changeset 0:1e000243b222

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:50:29 -0500
parents
children 5821049f1791
files .htaccess CHANGELOG INSTALL LICENSE README.md SQL/mssql.initial.sql SQL/mssql/2009103100.sql SQL/mssql/2010100600.sql SQL/mssql/2011011200.sql SQL/mssql/2011092800.sql SQL/mssql/2011111600.sql SQL/mssql/2011121400.sql SQL/mssql/2012051800.sql SQL/mssql/2012080700.sql SQL/mssql/2013011000.sql SQL/mssql/2013042700.sql SQL/mssql/2013052500.sql SQL/mssql/2013061000.sql SQL/mssql/2014042900.sql SQL/mssql/2015030800.sql SQL/mssql/2015111100.sql SQL/mssql/2016081200.sql SQL/mssql/2016100900.sql SQL/mssql/2016112200.sql SQL/mysql.initial.sql SQL/mysql/2008030300.sql SQL/mysql/2008040500.sql SQL/mysql/2008060900.sql SQL/mysql/2008092100.sql SQL/mysql/2009090400.sql SQL/mysql/2009103100.sql SQL/mysql/2010042300.sql SQL/mysql/2010100600.sql SQL/mysql/2011011200.sql SQL/mysql/2011092800.sql SQL/mysql/2011111600.sql SQL/mysql/2011121400.sql SQL/mysql/2012080700.sql SQL/mysql/2013011000.sql SQL/mysql/2013042700.sql SQL/mysql/2013052500.sql SQL/mysql/2013061000.sql SQL/mysql/2014042900.sql SQL/mysql/2015030800.sql SQL/mysql/2015111100.sql SQL/mysql/2016081200.sql SQL/mysql/2016100900.sql SQL/mysql/2016112200.sql SQL/oracle.initial.sql SQL/oracle/2015030800.sql SQL/oracle/2015111100.sql SQL/oracle/2016081200.sql SQL/oracle/2016100900.sql SQL/oracle/2016112200.sql SQL/postgres.initial.sql SQL/postgres/2008030300.sql SQL/postgres/2008060900.sql SQL/postgres/2008092100.sql SQL/postgres/2009090400.sql SQL/postgres/2009103100.sql SQL/postgres/2010042300.sql SQL/postgres/2010100600.sql SQL/postgres/2011011200.sql SQL/postgres/2011092800.sql SQL/postgres/2011111600.sql SQL/postgres/2011121400.sql SQL/postgres/2012080700.sql SQL/postgres/2013011000.sql SQL/postgres/2013042700.sql SQL/postgres/2013052500.sql SQL/postgres/2013061000.sql SQL/postgres/2014042900.sql SQL/postgres/2015030800.sql SQL/postgres/2015111100.sql SQL/postgres/2016081200.sql SQL/postgres/2016100900.sql SQL/postgres/2016112200.sql SQL/sqlite.initial.sql SQL/sqlite/2008030300.sql SQL/sqlite/2008060900.sql SQL/sqlite/2008092100.sql SQL/sqlite/2009090400.sql SQL/sqlite/2009103100.sql SQL/sqlite/2010042300.sql SQL/sqlite/2010100600.sql SQL/sqlite/2011011200.sql SQL/sqlite/2011092800.sql SQL/sqlite/2011111600.sql SQL/sqlite/2011121400.sql SQL/sqlite/2012080700.sql SQL/sqlite/2013011000.sql SQL/sqlite/2013011700.sql SQL/sqlite/2013042700.sql SQL/sqlite/2013052500.sql SQL/sqlite/2013061000.sql SQL/sqlite/2014042900.sql SQL/sqlite/2015030800.sql SQL/sqlite/2015111100.sql SQL/sqlite/2016081200.sql SQL/sqlite/2016100900.sql SQL/sqlite/2016112200.sql UPGRADING bin/cleandb.sh bin/cssshrink.sh bin/decrypt.sh bin/deluser.sh bin/dumpschema.sh bin/gc.sh bin/indexcontacts.sh bin/initdb.sh bin/install-jsdeps.sh bin/installto.sh bin/jsshrink.sh bin/makedoc.sh bin/moduserprefs.sh bin/msgexport.sh bin/msgimport.sh bin/update.sh bin/updatecss.sh bin/updatedb.sh composer.json composer.json-dist composer.lock composer.phar config index.php installer/check.php installer/client.js installer/config.php installer/images/add.png installer/images/banner_gradient.gif installer/images/banner_schraffur.gif installer/images/delete.png installer/images/error.png installer/images/roundcube_logo.png installer/index.php installer/styles.css installer/test.php jsdeps.json logs plugins/acl/acl.js plugins/acl/acl.min.js plugins/acl/acl.php plugins/acl/composer.json plugins/acl/config.inc.php.dist plugins/acl/localization/ar_SA.inc plugins/acl/localization/ast.inc plugins/acl/localization/az_AZ.inc plugins/acl/localization/be_BE.inc plugins/acl/localization/bg_BG.inc plugins/acl/localization/br.inc plugins/acl/localization/bs_BA.inc plugins/acl/localization/ca_ES.inc plugins/acl/localization/cs_CZ.inc plugins/acl/localization/cy_GB.inc plugins/acl/localization/da_DK.inc plugins/acl/localization/de_CH.inc plugins/acl/localization/de_DE.inc plugins/acl/localization/el_GR.inc plugins/acl/localization/en_CA.inc plugins/acl/localization/en_GB.inc plugins/acl/localization/en_US.inc plugins/acl/localization/eo.inc plugins/acl/localization/es_419.inc plugins/acl/localization/es_AR.inc plugins/acl/localization/es_ES.inc plugins/acl/localization/et_EE.inc plugins/acl/localization/eu_ES.inc plugins/acl/localization/fa_AF.inc plugins/acl/localization/fa_IR.inc plugins/acl/localization/fi_FI.inc plugins/acl/localization/fo_FO.inc plugins/acl/localization/fr_FR.inc plugins/acl/localization/fy_NL.inc plugins/acl/localization/ga_IE.inc plugins/acl/localization/gl_ES.inc plugins/acl/localization/he_IL.inc plugins/acl/localization/hr_HR.inc plugins/acl/localization/hu_HU.inc plugins/acl/localization/hy_AM.inc plugins/acl/localization/ia.inc plugins/acl/localization/id_ID.inc plugins/acl/localization/is_IS.inc plugins/acl/localization/it_IT.inc plugins/acl/localization/ja_JP.inc plugins/acl/localization/ka_GE.inc plugins/acl/localization/kab.inc plugins/acl/localization/km_KH.inc plugins/acl/localization/ko_KR.inc plugins/acl/localization/ku.inc plugins/acl/localization/ku_IQ.inc plugins/acl/localization/lb_LU.inc plugins/acl/localization/lt_LT.inc plugins/acl/localization/lv_LV.inc plugins/acl/localization/mk_MK.inc plugins/acl/localization/mn_MN.inc plugins/acl/localization/nb_NO.inc plugins/acl/localization/nl_BE.inc plugins/acl/localization/nl_NL.inc plugins/acl/localization/nn_NO.inc plugins/acl/localization/pl_PL.inc plugins/acl/localization/pt_BR.inc plugins/acl/localization/pt_PT.inc plugins/acl/localization/ro_RO.inc plugins/acl/localization/ru_RU.inc plugins/acl/localization/sk_SK.inc plugins/acl/localization/sl_SI.inc plugins/acl/localization/sq_AL.inc plugins/acl/localization/sr_CS.inc plugins/acl/localization/sv_SE.inc plugins/acl/localization/th_TH.inc plugins/acl/localization/ti.inc plugins/acl/localization/tr_TR.inc plugins/acl/localization/tzl.inc plugins/acl/localization/uk_UA.inc plugins/acl/localization/uz.inc plugins/acl/localization/vi_VN.inc plugins/acl/localization/zh_CN.inc plugins/acl/localization/zh_TW.inc plugins/acl/skins/classic/acl.css plugins/acl/skins/classic/acl.min.css plugins/acl/skins/classic/images/enabled.png plugins/acl/skins/classic/images/partial.png plugins/acl/skins/classic/templates/table.html plugins/acl/skins/larry/acl.css plugins/acl/skins/larry/acl.min.css plugins/acl/skins/larry/images/enabled.png plugins/acl/skins/larry/images/partial.png plugins/acl/skins/larry/templates/table.html plugins/additional_message_headers/additional_message_headers.php plugins/additional_message_headers/composer.json plugins/additional_message_headers/config.inc.php.dist plugins/archive/archive.js plugins/archive/archive.min.js plugins/archive/archive.php plugins/archive/composer.json plugins/archive/localization/ar_SA.inc plugins/archive/localization/ast.inc plugins/archive/localization/az_AZ.inc plugins/archive/localization/be_BE.inc plugins/archive/localization/bg_BG.inc plugins/archive/localization/br.inc plugins/archive/localization/bs_BA.inc plugins/archive/localization/ca_ES.inc plugins/archive/localization/cs_CZ.inc plugins/archive/localization/cy_GB.inc plugins/archive/localization/da_DK.inc plugins/archive/localization/de_CH.inc plugins/archive/localization/de_DE.inc plugins/archive/localization/el_GR.inc plugins/archive/localization/en_CA.inc plugins/archive/localization/en_GB.inc plugins/archive/localization/en_US.inc plugins/archive/localization/eo.inc plugins/archive/localization/es_419.inc plugins/archive/localization/es_AR.inc plugins/archive/localization/es_ES.inc plugins/archive/localization/et_EE.inc plugins/archive/localization/eu_ES.inc plugins/archive/localization/fa_AF.inc plugins/archive/localization/fa_IR.inc plugins/archive/localization/fi_FI.inc plugins/archive/localization/fo_FO.inc plugins/archive/localization/fr_FR.inc plugins/archive/localization/fy_NL.inc plugins/archive/localization/ga_IE.inc plugins/archive/localization/gl_ES.inc plugins/archive/localization/he_IL.inc plugins/archive/localization/hr_HR.inc plugins/archive/localization/hu_HU.inc plugins/archive/localization/hy_AM.inc plugins/archive/localization/ia.inc plugins/archive/localization/id_ID.inc plugins/archive/localization/is_IS.inc plugins/archive/localization/it_IT.inc plugins/archive/localization/ja_JP.inc plugins/archive/localization/kab.inc plugins/archive/localization/km_KH.inc plugins/archive/localization/ko_KR.inc plugins/archive/localization/ku.inc plugins/archive/localization/ku_IQ.inc plugins/archive/localization/lb_LU.inc plugins/archive/localization/lt_LT.inc plugins/archive/localization/lv_LV.inc plugins/archive/localization/mk_MK.inc plugins/archive/localization/ml_IN.inc plugins/archive/localization/mn_MN.inc plugins/archive/localization/mr_IN.inc plugins/archive/localization/nb_NO.inc plugins/archive/localization/nl_NL.inc plugins/archive/localization/nn_NO.inc plugins/archive/localization/pl_PL.inc plugins/archive/localization/pt_BR.inc plugins/archive/localization/pt_PT.inc plugins/archive/localization/ro_RO.inc plugins/archive/localization/ru_RU.inc plugins/archive/localization/si_LK.inc plugins/archive/localization/sk_SK.inc plugins/archive/localization/sl_SI.inc plugins/archive/localization/sq_AL.inc plugins/archive/localization/sr_CS.inc plugins/archive/localization/sv_SE.inc plugins/archive/localization/tr_TR.inc plugins/archive/localization/tzl.inc plugins/archive/localization/uk_UA.inc plugins/archive/localization/uz.inc plugins/archive/localization/vi_VN.inc plugins/archive/localization/zh_CN.inc plugins/archive/localization/zh_TW.inc plugins/archive/skins/classic/archive.css plugins/archive/skins/classic/archive.min.css plugins/archive/skins/classic/archive_act.png plugins/archive/skins/classic/archive_pas.png plugins/archive/skins/classic/foldericon.png plugins/archive/skins/larry/.gitignore plugins/attachment_reminder/attachment_reminder.js plugins/attachment_reminder/attachment_reminder.min.js plugins/attachment_reminder/attachment_reminder.php plugins/attachment_reminder/composer.json plugins/attachment_reminder/localization/ar_SA.inc plugins/attachment_reminder/localization/ast.inc plugins/attachment_reminder/localization/az_AZ.inc plugins/attachment_reminder/localization/be_BE.inc plugins/attachment_reminder/localization/bg_BG.inc plugins/attachment_reminder/localization/br.inc plugins/attachment_reminder/localization/bs_BA.inc plugins/attachment_reminder/localization/ca_ES.inc plugins/attachment_reminder/localization/cs_CZ.inc plugins/attachment_reminder/localization/cy_GB.inc plugins/attachment_reminder/localization/da_DK.inc plugins/attachment_reminder/localization/de_CH.inc plugins/attachment_reminder/localization/de_DE.inc plugins/attachment_reminder/localization/el_GR.inc plugins/attachment_reminder/localization/en_CA.inc plugins/attachment_reminder/localization/en_GB.inc plugins/attachment_reminder/localization/en_US.inc plugins/attachment_reminder/localization/es_419.inc plugins/attachment_reminder/localization/es_AR.inc plugins/attachment_reminder/localization/es_ES.inc plugins/attachment_reminder/localization/et_EE.inc plugins/attachment_reminder/localization/eu_ES.inc plugins/attachment_reminder/localization/fa_AF.inc plugins/attachment_reminder/localization/fa_IR.inc plugins/attachment_reminder/localization/fi_FI.inc plugins/attachment_reminder/localization/fo_FO.inc plugins/attachment_reminder/localization/fr_FR.inc plugins/attachment_reminder/localization/fy_NL.inc plugins/attachment_reminder/localization/ga_IE.inc plugins/attachment_reminder/localization/gl_ES.inc plugins/attachment_reminder/localization/he_IL.inc plugins/attachment_reminder/localization/hr_HR.inc plugins/attachment_reminder/localization/hu_HU.inc plugins/attachment_reminder/localization/ia.inc plugins/attachment_reminder/localization/id_ID.inc plugins/attachment_reminder/localization/is_IS.inc plugins/attachment_reminder/localization/it_IT.inc plugins/attachment_reminder/localization/ja_JP.inc plugins/attachment_reminder/localization/kab.inc plugins/attachment_reminder/localization/km_KH.inc plugins/attachment_reminder/localization/kn_IN.inc plugins/attachment_reminder/localization/ko_KR.inc plugins/attachment_reminder/localization/ku.inc plugins/attachment_reminder/localization/ku_IQ.inc plugins/attachment_reminder/localization/lb_LU.inc plugins/attachment_reminder/localization/lt_LT.inc plugins/attachment_reminder/localization/lv_LV.inc plugins/attachment_reminder/localization/mk_MK.inc plugins/attachment_reminder/localization/ml_IN.inc plugins/attachment_reminder/localization/mn_MN.inc plugins/attachment_reminder/localization/nb_NO.inc plugins/attachment_reminder/localization/nl_NL.inc plugins/attachment_reminder/localization/pl_PL.inc plugins/attachment_reminder/localization/pt_BR.inc plugins/attachment_reminder/localization/pt_PT.inc plugins/attachment_reminder/localization/ro_RO.inc plugins/attachment_reminder/localization/ru_RU.inc plugins/attachment_reminder/localization/sk_SK.inc plugins/attachment_reminder/localization/sl_SI.inc plugins/attachment_reminder/localization/sq_AL.inc plugins/attachment_reminder/localization/sr_CS.inc plugins/attachment_reminder/localization/sv_SE.inc plugins/attachment_reminder/localization/tr_TR.inc plugins/attachment_reminder/localization/uk_UA.inc plugins/attachment_reminder/localization/uz.inc plugins/attachment_reminder/localization/vi_VN.inc plugins/attachment_reminder/localization/zh_CN.inc plugins/attachment_reminder/localization/zh_TW.inc plugins/autologon/autologon.php plugins/autologon/composer.json plugins/contextmenu/CHANGELOG plugins/contextmenu/MANUAL.md plugins/contextmenu/README.md plugins/contextmenu/composer.json plugins/contextmenu/contextmenu.js plugins/contextmenu/contextmenu.php plugins/contextmenu/localization/ca_ES.inc plugins/contextmenu/localization/cs_CZ.inc plugins/contextmenu/localization/da_DK.inc plugins/contextmenu/localization/de_CH.inc plugins/contextmenu/localization/de_DE.inc plugins/contextmenu/localization/en_GB.inc plugins/contextmenu/localization/en_US.inc plugins/contextmenu/localization/es_AR.inc plugins/contextmenu/localization/es_ES.inc plugins/contextmenu/localization/fr_FR.inc plugins/contextmenu/localization/gl_ES.inc plugins/contextmenu/localization/hu_HU.inc plugins/contextmenu/localization/it_IT.inc plugins/contextmenu/localization/ja_JP.inc plugins/contextmenu/localization/nl_NL.inc plugins/contextmenu/localization/pl_PL.inc plugins/contextmenu/localization/pt_BR.inc plugins/contextmenu/localization/pt_PT.inc plugins/contextmenu/localization/ro_RO.inc plugins/contextmenu/localization/ru_RU.inc plugins/contextmenu/localization/sv_SE.inc plugins/contextmenu/localization/tr_TR.inc plugins/contextmenu/localization/uk_UA.inc plugins/contextmenu/localization/zh_TW.inc plugins/contextmenu/skins/classic/contextmenu.css plugins/contextmenu/skins/classic/functions.js plugins/contextmenu/skins/classic/images/contexticons.png plugins/contextmenu/skins/classic/images/messageactions.png plugins/contextmenu/skins/larry/contextmenu.css plugins/contextmenu/skins/larry/functions.js plugins/contextmenu/skins/larry/images/contexticons.png plugins/database_attachments/composer.json plugins/database_attachments/config.inc.php.dist plugins/database_attachments/database_attachments.php plugins/debug_logger/composer.json plugins/debug_logger/debug_logger.php plugins/debug_logger/runlog/runlog.php plugins/emoticons/composer.json plugins/emoticons/config.inc.php.dist plugins/emoticons/emoticons.php plugins/emoticons/emoticons_engine.php plugins/emoticons/localization/en_US.inc plugins/enigma/README plugins/enigma/composer.json plugins/enigma/config.inc.php.dist plugins/enigma/enigma.js plugins/enigma/enigma.min.js plugins/enigma/enigma.php plugins/enigma/home/.htaccess plugins/enigma/lib/enigma_driver.php plugins/enigma/lib/enigma_driver_gnupg.php plugins/enigma/lib/enigma_driver_phpssl.php plugins/enigma/lib/enigma_engine.php plugins/enigma/lib/enigma_error.php plugins/enigma/lib/enigma_key.php plugins/enigma/lib/enigma_mime_message.php plugins/enigma/lib/enigma_signature.php plugins/enigma/lib/enigma_subkey.php plugins/enigma/lib/enigma_ui.php plugins/enigma/lib/enigma_userid.php plugins/enigma/localization/bg_BG.inc plugins/enigma/localization/br.inc plugins/enigma/localization/cs_CZ.inc plugins/enigma/localization/cy_GB.inc plugins/enigma/localization/da_DK.inc plugins/enigma/localization/de_CH.inc plugins/enigma/localization/de_DE.inc plugins/enigma/localization/el_GR.inc plugins/enigma/localization/en_GB.inc plugins/enigma/localization/en_US.inc plugins/enigma/localization/es_ES.inc plugins/enigma/localization/et_EE.inc plugins/enigma/localization/eu_ES.inc plugins/enigma/localization/fa_IR.inc plugins/enigma/localization/fi_FI.inc plugins/enigma/localization/fo_FO.inc plugins/enigma/localization/fr_FR.inc plugins/enigma/localization/ga_IE.inc plugins/enigma/localization/he_IL.inc plugins/enigma/localization/hr_HR.inc plugins/enigma/localization/hu_HU.inc plugins/enigma/localization/ia.inc plugins/enigma/localization/id_ID.inc plugins/enigma/localization/is_IS.inc plugins/enigma/localization/it_IT.inc plugins/enigma/localization/ja_JP.inc plugins/enigma/localization/ka_GE.inc plugins/enigma/localization/ko_KR.inc plugins/enigma/localization/lt_LT.inc plugins/enigma/localization/lv_LV.inc plugins/enigma/localization/nl_BE.inc plugins/enigma/localization/nl_NL.inc plugins/enigma/localization/pl_PL.inc plugins/enigma/localization/pt_BR.inc plugins/enigma/localization/pt_PT.inc plugins/enigma/localization/ro_RO.inc plugins/enigma/localization/ru_RU.inc plugins/enigma/localization/sk_SK.inc plugins/enigma/localization/sq_AL.inc plugins/enigma/localization/sv_SE.inc plugins/enigma/localization/tr_TR.inc plugins/enigma/localization/uk_UA.inc plugins/enigma/localization/zh_CN.inc plugins/enigma/localization/zh_TW.inc plugins/enigma/openpgp.min.js plugins/enigma/skins/classic/enigma.css plugins/enigma/skins/classic/enigma.min.css plugins/enigma/skins/classic/enigma.png plugins/enigma/skins/classic/enigma_error.png plugins/enigma/skins/classic/key.png plugins/enigma/skins/classic/key_add.png plugins/enigma/skins/classic/keys_toolbar.png plugins/enigma/skins/classic/templates/keycreate.html plugins/enigma/skins/classic/templates/keyimport.html plugins/enigma/skins/classic/templates/keyinfo.html plugins/enigma/skins/classic/templates/keys.html plugins/enigma/skins/larry/enigma.css plugins/enigma/skins/larry/enigma.min.css plugins/enigma/skins/larry/enigma_icons.png plugins/enigma/skins/larry/templates/keycreate.html plugins/enigma/skins/larry/templates/keyimport.html plugins/enigma/skins/larry/templates/keyinfo.html plugins/enigma/skins/larry/templates/keys.html plugins/example_addressbook/composer.json plugins/example_addressbook/example_addressbook.php plugins/example_addressbook/example_addressbook_backend.php plugins/filesystem_attachments/composer.json plugins/filesystem_attachments/filesystem_attachments.php plugins/filters/.git/FETCH_HEAD plugins/filters/.git/HEAD plugins/filters/.git/ORIG_HEAD plugins/filters/.git/config plugins/filters/.git/description plugins/filters/.git/hooks/applypatch-msg.sample plugins/filters/.git/hooks/commit-msg.sample plugins/filters/.git/hooks/post-update.sample plugins/filters/.git/hooks/pre-applypatch.sample plugins/filters/.git/hooks/pre-commit.sample plugins/filters/.git/hooks/pre-push.sample plugins/filters/.git/hooks/pre-rebase.sample plugins/filters/.git/hooks/prepare-commit-msg.sample plugins/filters/.git/hooks/update.sample plugins/filters/.git/index plugins/filters/.git/info/exclude plugins/filters/.git/logs/HEAD plugins/filters/.git/logs/refs/heads/master plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.2 plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.5 plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.6 plugins/filters/.git/logs/refs/remotes/composer/master plugins/filters/.git/logs/refs/remotes/origin/HEAD plugins/filters/.git/objects/pack/pack-60aea0d39951518a0aa82fd3212c9fbee6acae53.idx plugins/filters/.git/objects/pack/pack-60aea0d39951518a0aa82fd3212c9fbee6acae53.pack plugins/filters/.git/packed-refs plugins/filters/.git/refs/heads/master plugins/filters/.git/refs/remotes/composer/filters-2.1.2 plugins/filters/.git/refs/remotes/composer/filters-2.1.5 plugins/filters/.git/refs/remotes/composer/filters-2.1.6 plugins/filters/.git/refs/remotes/composer/master plugins/filters/.git/refs/remotes/origin/HEAD plugins/filters/README.txt plugins/filters/composer.json plugins/filters/config.inc.php plugins/filters/filters.js plugins/filters/filters.php plugins/filters/localization/cs_CZ.inc plugins/filters/localization/de_DE.inc plugins/filters/localization/el_GR.inc plugins/filters/localization/en_US.inc plugins/filters/localization/es_ES.inc plugins/filters/localization/fr_FR.inc plugins/filters/localization/it_IT.inc plugins/filters/localization/ja_JP.inc plugins/filters/localization/nl_NL.inc plugins/filters/localization/pl_PL.inc plugins/filters/localization/pt_PT.inc plugins/filters/localization/ro_RO.inc plugins/filters/localization/ru_RU.inc plugins/filters/localization/sk_SK.inc plugins/filters/localization/tr_TR.inc plugins/filters/localization/uk_UA.inc plugins/filters/localization/zh_TW.inc plugins/filters/package.xml plugins/help/composer.json plugins/help/config.inc.php.dist plugins/help/content/license.html plugins/help/help.js plugins/help/help.min.js plugins/help/help.php plugins/help/localization/ar_SA.inc plugins/help/localization/ast.inc plugins/help/localization/az_AZ.inc plugins/help/localization/be_BE.inc plugins/help/localization/bg_BG.inc plugins/help/localization/br.inc plugins/help/localization/bs_BA.inc plugins/help/localization/ca_ES.inc plugins/help/localization/cs_CZ.inc plugins/help/localization/cy_GB.inc plugins/help/localization/da_DK.inc plugins/help/localization/de_CH.inc plugins/help/localization/de_DE.inc plugins/help/localization/el_GR.inc plugins/help/localization/en_CA.inc plugins/help/localization/en_GB.inc plugins/help/localization/en_US.inc plugins/help/localization/eo.inc plugins/help/localization/es_419.inc plugins/help/localization/es_AR.inc plugins/help/localization/es_ES.inc plugins/help/localization/et_EE.inc plugins/help/localization/eu_ES.inc plugins/help/localization/fa_AF.inc plugins/help/localization/fa_IR.inc plugins/help/localization/fi_FI.inc plugins/help/localization/fo_FO.inc plugins/help/localization/fr_FR.inc plugins/help/localization/fy_NL.inc plugins/help/localization/ga_IE.inc plugins/help/localization/gl_ES.inc plugins/help/localization/he_IL.inc plugins/help/localization/hr_HR.inc plugins/help/localization/hu_HU.inc plugins/help/localization/hy_AM.inc plugins/help/localization/ia.inc plugins/help/localization/id_ID.inc plugins/help/localization/is_IS.inc plugins/help/localization/it_IT.inc plugins/help/localization/ja_JP.inc plugins/help/localization/km_KH.inc plugins/help/localization/kn_IN.inc plugins/help/localization/ko_KR.inc plugins/help/localization/ku.inc plugins/help/localization/ku_IQ.inc plugins/help/localization/lb_LU.inc plugins/help/localization/lt_LT.inc plugins/help/localization/lv_LV.inc plugins/help/localization/mk_MK.inc plugins/help/localization/ml_IN.inc plugins/help/localization/mn_MN.inc plugins/help/localization/nb_NO.inc plugins/help/localization/nl_BE.inc plugins/help/localization/nl_NL.inc plugins/help/localization/nn_NO.inc plugins/help/localization/pl_PL.inc plugins/help/localization/pt_BR.inc plugins/help/localization/pt_PT.inc plugins/help/localization/ro_RO.inc plugins/help/localization/ru_RU.inc plugins/help/localization/sk_SK.inc plugins/help/localization/sl_SI.inc plugins/help/localization/sq_AL.inc plugins/help/localization/sr_CS.inc plugins/help/localization/sv_SE.inc plugins/help/localization/th_TH.inc plugins/help/localization/ti.inc plugins/help/localization/tr_TR.inc plugins/help/localization/tzl.inc plugins/help/localization/uk_UA.inc plugins/help/localization/uz.inc plugins/help/localization/vi_VN.inc plugins/help/localization/zh_CN.inc plugins/help/localization/zh_TW.inc plugins/help/skins/classic/help.css plugins/help/skins/classic/help.gif plugins/help/skins/classic/help.min.css plugins/help/skins/classic/templates/help.html plugins/help/skins/larry/help.css plugins/help/skins/larry/help.min.css plugins/help/skins/larry/help.png plugins/help/skins/larry/icons.psd plugins/help/skins/larry/templates/help.html plugins/hide_blockquote/composer.json plugins/hide_blockquote/hide_blockquote.js plugins/hide_blockquote/hide_blockquote.min.js plugins/hide_blockquote/hide_blockquote.php plugins/hide_blockquote/localization/ar_SA.inc plugins/hide_blockquote/localization/ast.inc plugins/hide_blockquote/localization/az_AZ.inc plugins/hide_blockquote/localization/be_BE.inc plugins/hide_blockquote/localization/bg_BG.inc plugins/hide_blockquote/localization/br.inc plugins/hide_blockquote/localization/bs_BA.inc plugins/hide_blockquote/localization/ca_ES.inc plugins/hide_blockquote/localization/cs_CZ.inc plugins/hide_blockquote/localization/cy_GB.inc plugins/hide_blockquote/localization/da_DK.inc plugins/hide_blockquote/localization/de_CH.inc plugins/hide_blockquote/localization/de_DE.inc plugins/hide_blockquote/localization/el_GR.inc plugins/hide_blockquote/localization/en_CA.inc plugins/hide_blockquote/localization/en_GB.inc plugins/hide_blockquote/localization/en_US.inc plugins/hide_blockquote/localization/eo.inc plugins/hide_blockquote/localization/es_419.inc plugins/hide_blockquote/localization/es_AR.inc plugins/hide_blockquote/localization/es_ES.inc plugins/hide_blockquote/localization/et_EE.inc plugins/hide_blockquote/localization/eu_ES.inc plugins/hide_blockquote/localization/fa_IR.inc plugins/hide_blockquote/localization/fi_FI.inc plugins/hide_blockquote/localization/fo_FO.inc plugins/hide_blockquote/localization/fr_FR.inc plugins/hide_blockquote/localization/fy_NL.inc plugins/hide_blockquote/localization/ga_IE.inc plugins/hide_blockquote/localization/gl_ES.inc plugins/hide_blockquote/localization/he_IL.inc plugins/hide_blockquote/localization/hr_HR.inc plugins/hide_blockquote/localization/hu_HU.inc plugins/hide_blockquote/localization/hy_AM.inc plugins/hide_blockquote/localization/ia.inc plugins/hide_blockquote/localization/id_ID.inc plugins/hide_blockquote/localization/is_IS.inc plugins/hide_blockquote/localization/it_IT.inc plugins/hide_blockquote/localization/ja_JP.inc plugins/hide_blockquote/localization/ka_GE.inc plugins/hide_blockquote/localization/km_KH.inc plugins/hide_blockquote/localization/ko_KR.inc plugins/hide_blockquote/localization/ku.inc plugins/hide_blockquote/localization/lb_LU.inc plugins/hide_blockquote/localization/lt_LT.inc plugins/hide_blockquote/localization/lv_LV.inc plugins/hide_blockquote/localization/mk_MK.inc plugins/hide_blockquote/localization/ml_IN.inc plugins/hide_blockquote/localization/mn_MN.inc plugins/hide_blockquote/localization/nb_NO.inc plugins/hide_blockquote/localization/nl_BE.inc plugins/hide_blockquote/localization/nl_NL.inc plugins/hide_blockquote/localization/nn_NO.inc plugins/hide_blockquote/localization/pl_PL.inc plugins/hide_blockquote/localization/pt_BR.inc plugins/hide_blockquote/localization/pt_PT.inc plugins/hide_blockquote/localization/ro_RO.inc plugins/hide_blockquote/localization/ru_RU.inc plugins/hide_blockquote/localization/sk_SK.inc plugins/hide_blockquote/localization/sl_SI.inc plugins/hide_blockquote/localization/sq_AL.inc plugins/hide_blockquote/localization/sr_CS.inc plugins/hide_blockquote/localization/sv_SE.inc plugins/hide_blockquote/localization/th_TH.inc plugins/hide_blockquote/localization/tr_TR.inc plugins/hide_blockquote/localization/tzl.inc plugins/hide_blockquote/localization/uk_UA.inc plugins/hide_blockquote/localization/uz.inc plugins/hide_blockquote/localization/vi_VN.inc plugins/hide_blockquote/localization/zh_CN.inc plugins/hide_blockquote/localization/zh_TW.inc plugins/hide_blockquote/skins/larry/style.css plugins/hide_blockquote/skins/larry/style.min.css plugins/http_authentication/composer.json plugins/http_authentication/config.inc.php.dist plugins/http_authentication/http_authentication.php plugins/http_authentication/logout.html plugins/identicon/composer.json plugins/identicon/identicon.php plugins/identicon/identicon_engine.php plugins/identity_select/composer.json plugins/identity_select/identity_select.php plugins/jqueryui/README plugins/jqueryui/composer.json plugins/jqueryui/config.inc.php.dist plugins/jqueryui/jqueryui.php plugins/jqueryui/js/i18n/jquery-ui-i18n.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-af.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar-DZ.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-az.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-bg.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-bs.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ca.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-cs.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-cy-GB.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-da.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-de-CH.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-de.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-el.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-AU.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-GB.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-NZ.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-eo.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-es.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-et.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-eu.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-fa.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-fi.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-fo.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr-CH.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-gl.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-he.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-hi.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-hr.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-hu.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-hy.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-id.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-is.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-it.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ja.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ka.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-kk.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-km.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ko.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-kz.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-lb.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-lt.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-lv.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-mk.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ml.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ms.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl-BE.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-no.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-pl.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt-BR.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-rm.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ro.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ru.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sk.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sl.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sq.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr-SR.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-sv.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-ta.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-th.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-tj.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-tr.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-uk.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-vi.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-CN.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-HK.js plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-TW.js plugins/jqueryui/js/jquery-ui-accessible-datepicker.js plugins/jqueryui/js/jquery-ui.min.js plugins/jqueryui/js/jquery.minicolors.min.js plugins/jqueryui/js/jquery.tagedit.js plugins/jqueryui/themes/classic/images/buttongradient.png plugins/jqueryui/themes/classic/images/listheader.png plugins/jqueryui/themes/classic/images/ui-icons_444444_256x240.png plugins/jqueryui/themes/classic/images/ui-icons_555555_256x240.png plugins/jqueryui/themes/classic/images/ui-icons_777620_256x240.png plugins/jqueryui/themes/classic/images/ui-icons_777777_256x240.png plugins/jqueryui/themes/classic/images/ui-icons_cc0000_256x240.png plugins/jqueryui/themes/classic/images/ui-icons_ffffff_256x240.png plugins/jqueryui/themes/classic/jquery-ui.css plugins/jqueryui/themes/classic/jquery-ui.css.diff plugins/jqueryui/themes/larry/images/animated-overlay.gif plugins/jqueryui/themes/larry/images/jquery.minicolors.png plugins/jqueryui/themes/larry/images/ui-dialog-close.png plugins/jqueryui/themes/larry/images/ui-icons-datepicker.png plugins/jqueryui/themes/larry/images/ui-icons_444444_256x240.png plugins/jqueryui/themes/larry/images/ui-icons_555555_256x240.png plugins/jqueryui/themes/larry/images/ui-icons_777620_256x240.png plugins/jqueryui/themes/larry/images/ui-icons_777777_256x240.png plugins/jqueryui/themes/larry/images/ui-icons_cc0000_256x240.png plugins/jqueryui/themes/larry/images/ui-icons_ffffff_256x240.png plugins/jqueryui/themes/larry/jquery-ui.css plugins/jqueryui/themes/larry/jquery-ui.css.diff plugins/jqueryui/themes/larry/jquery.minicolors.css plugins/jqueryui/themes/larry/tagedit.css plugins/krb_authentication/config.inc.php.dist plugins/krb_authentication/krb_authentication.php plugins/managesieve/Changelog plugins/managesieve/codemirror/addon/selection/active-line.js plugins/managesieve/codemirror/addon/selection/mark-selection.js plugins/managesieve/codemirror/addon/selection/selection-pointer.js plugins/managesieve/codemirror/lib/codemirror.css plugins/managesieve/codemirror/lib/codemirror.js plugins/managesieve/codemirror/mode/sieve/index.html plugins/managesieve/codemirror/mode/sieve/sieve.js plugins/managesieve/composer.json plugins/managesieve/config.inc.php plugins/managesieve/config.inc.php.dist plugins/managesieve/helpdocs/en_US/settings-filters.rst plugins/managesieve/helpdocs/en_US/settings-vacation.rst plugins/managesieve/helpdocs/po/settings-filters.pot plugins/managesieve/helpdocs/po/settings-vacation.pot plugins/managesieve/lib/Roundcube/rcube_sieve.php plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php plugins/managesieve/lib/Roundcube/rcube_sieve_script.php plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php plugins/managesieve/localization/ar_SA.inc plugins/managesieve/localization/ast.inc plugins/managesieve/localization/az_AZ.inc plugins/managesieve/localization/be_BE.inc plugins/managesieve/localization/bg_BG.inc plugins/managesieve/localization/br.inc plugins/managesieve/localization/bs_BA.inc plugins/managesieve/localization/ca_ES.inc plugins/managesieve/localization/cs_CZ.inc plugins/managesieve/localization/cy_GB.inc plugins/managesieve/localization/da_DK.inc plugins/managesieve/localization/de_CH.inc plugins/managesieve/localization/de_DE.inc plugins/managesieve/localization/el_GR.inc plugins/managesieve/localization/en_CA.inc plugins/managesieve/localization/en_GB.inc plugins/managesieve/localization/en_US.inc plugins/managesieve/localization/eo.inc plugins/managesieve/localization/es_419.inc plugins/managesieve/localization/es_AR.inc plugins/managesieve/localization/es_ES.inc plugins/managesieve/localization/et_EE.inc plugins/managesieve/localization/eu_ES.inc plugins/managesieve/localization/fa_AF.inc plugins/managesieve/localization/fa_IR.inc plugins/managesieve/localization/fi_FI.inc plugins/managesieve/localization/fo_FO.inc plugins/managesieve/localization/fr_FR.inc plugins/managesieve/localization/fy_NL.inc plugins/managesieve/localization/ga_IE.inc plugins/managesieve/localization/gl_ES.inc plugins/managesieve/localization/he_IL.inc plugins/managesieve/localization/hr_HR.inc plugins/managesieve/localization/hu_HU.inc plugins/managesieve/localization/hy_AM.inc plugins/managesieve/localization/ia.inc plugins/managesieve/localization/id_ID.inc plugins/managesieve/localization/is_IS.inc plugins/managesieve/localization/it_IT.inc plugins/managesieve/localization/ja_JP.inc plugins/managesieve/localization/ka_GE.inc plugins/managesieve/localization/km_KH.inc plugins/managesieve/localization/ko_KR.inc plugins/managesieve/localization/ku.inc plugins/managesieve/localization/lb_LU.inc plugins/managesieve/localization/lt_LT.inc plugins/managesieve/localization/lv_LV.inc plugins/managesieve/localization/mk_MK.inc plugins/managesieve/localization/ml_IN.inc plugins/managesieve/localization/mn_MN.inc plugins/managesieve/localization/mr_IN.inc plugins/managesieve/localization/nb_NO.inc plugins/managesieve/localization/nl_BE.inc plugins/managesieve/localization/nl_NL.inc plugins/managesieve/localization/nn_NO.inc plugins/managesieve/localization/pl_PL.inc plugins/managesieve/localization/pt_BR.inc plugins/managesieve/localization/pt_PT.inc plugins/managesieve/localization/ro_RO.inc plugins/managesieve/localization/ru_RU.inc plugins/managesieve/localization/si_LK.inc plugins/managesieve/localization/sk_SK.inc plugins/managesieve/localization/sl_SI.inc plugins/managesieve/localization/sq_AL.inc plugins/managesieve/localization/sr_CS.inc plugins/managesieve/localization/sv_SE.inc plugins/managesieve/localization/th_TH.inc plugins/managesieve/localization/tr_TR.inc plugins/managesieve/localization/tzl.inc plugins/managesieve/localization/uk_UA.inc plugins/managesieve/localization/vi_VN.inc plugins/managesieve/localization/zh_CN.inc plugins/managesieve/localization/zh_TW.inc plugins/managesieve/managesieve.js plugins/managesieve/managesieve.min.js plugins/managesieve/managesieve.php plugins/managesieve/skins/classic/images/add.png plugins/managesieve/skins/classic/images/del.png plugins/managesieve/skins/classic/images/down_small.gif plugins/managesieve/skins/classic/images/erase.png plugins/managesieve/skins/classic/images/filter.png plugins/managesieve/skins/classic/images/up_small.gif plugins/managesieve/skins/classic/managesieve.css plugins/managesieve/skins/classic/managesieve.min.css plugins/managesieve/skins/classic/managesieve_mail.css plugins/managesieve/skins/classic/managesieve_mail.min.css plugins/managesieve/skins/classic/templates/filteredit.html plugins/managesieve/skins/classic/templates/managesieve.html plugins/managesieve/skins/classic/templates/setedit.html plugins/managesieve/skins/classic/templates/seteditraw.html plugins/managesieve/skins/classic/templates/vacation.html plugins/managesieve/skins/larry/images/add.png plugins/managesieve/skins/larry/images/del.png plugins/managesieve/skins/larry/images/down_small.gif plugins/managesieve/skins/larry/images/erase.png plugins/managesieve/skins/larry/images/up_small.gif plugins/managesieve/skins/larry/images/vacation_icons.png plugins/managesieve/skins/larry/managesieve.css plugins/managesieve/skins/larry/managesieve.min.css plugins/managesieve/skins/larry/managesieve_mail.css plugins/managesieve/skins/larry/managesieve_mail.min.css plugins/managesieve/skins/larry/templates/filteredit.html plugins/managesieve/skins/larry/templates/managesieve.html plugins/managesieve/skins/larry/templates/setedit.html plugins/managesieve/skins/larry/templates/seteditraw.html plugins/managesieve/skins/larry/templates/vacation.html plugins/markasjunk/composer.json plugins/markasjunk/localization/ar.inc plugins/markasjunk/localization/ar_SA.inc plugins/markasjunk/localization/ast.inc plugins/markasjunk/localization/az_AZ.inc plugins/markasjunk/localization/be_BE.inc plugins/markasjunk/localization/bg_BG.inc plugins/markasjunk/localization/br.inc plugins/markasjunk/localization/bs_BA.inc plugins/markasjunk/localization/ca_ES.inc plugins/markasjunk/localization/cs_CZ.inc plugins/markasjunk/localization/cy_GB.inc plugins/markasjunk/localization/da_DK.inc plugins/markasjunk/localization/de_CH.inc plugins/markasjunk/localization/de_DE.inc plugins/markasjunk/localization/el_GR.inc plugins/markasjunk/localization/en_CA.inc plugins/markasjunk/localization/en_GB.inc plugins/markasjunk/localization/en_US.inc plugins/markasjunk/localization/eo.inc plugins/markasjunk/localization/es_419.inc plugins/markasjunk/localization/es_AR.inc plugins/markasjunk/localization/es_ES.inc plugins/markasjunk/localization/et_EE.inc plugins/markasjunk/localization/eu_ES.inc plugins/markasjunk/localization/fa_AF.inc plugins/markasjunk/localization/fa_IR.inc plugins/markasjunk/localization/fi_FI.inc plugins/markasjunk/localization/fo_FO.inc plugins/markasjunk/localization/fr_FR.inc plugins/markasjunk/localization/fy_NL.inc plugins/markasjunk/localization/ga_IE.inc plugins/markasjunk/localization/gl_ES.inc plugins/markasjunk/localization/he_IL.inc plugins/markasjunk/localization/hr_HR.inc plugins/markasjunk/localization/hu_HU.inc plugins/markasjunk/localization/hy_AM.inc plugins/markasjunk/localization/ia.inc plugins/markasjunk/localization/id_ID.inc plugins/markasjunk/localization/is_IS.inc plugins/markasjunk/localization/it_IT.inc plugins/markasjunk/localization/ja_JP.inc plugins/markasjunk/localization/km_KH.inc plugins/markasjunk/localization/ko_KR.inc plugins/markasjunk/localization/ku.inc plugins/markasjunk/localization/lb_LU.inc plugins/markasjunk/localization/lt_LT.inc plugins/markasjunk/localization/lv_LV.inc plugins/markasjunk/localization/mk_MK.inc plugins/markasjunk/localization/ml_IN.inc plugins/markasjunk/localization/mn_MN.inc plugins/markasjunk/localization/mr_IN.inc plugins/markasjunk/localization/nb_NO.inc plugins/markasjunk/localization/nl_BE.inc plugins/markasjunk/localization/nl_NL.inc plugins/markasjunk/localization/nn_NO.inc plugins/markasjunk/localization/pl_PL.inc plugins/markasjunk/localization/pt_BR.inc plugins/markasjunk/localization/pt_PT.inc plugins/markasjunk/localization/ro_RO.inc plugins/markasjunk/localization/ru_RU.inc plugins/markasjunk/localization/si_LK.inc plugins/markasjunk/localization/sk_SK.inc plugins/markasjunk/localization/sl_SI.inc plugins/markasjunk/localization/sq_AL.inc plugins/markasjunk/localization/sr_CS.inc plugins/markasjunk/localization/sv_SE.inc plugins/markasjunk/localization/th_TH.inc plugins/markasjunk/localization/tr_TR.inc plugins/markasjunk/localization/uk_UA.inc plugins/markasjunk/localization/vi_VN.inc plugins/markasjunk/localization/zh_CN.inc plugins/markasjunk/localization/zh_TW.inc plugins/markasjunk/markasjunk.js plugins/markasjunk/markasjunk.min.js plugins/markasjunk/markasjunk.php plugins/markasjunk/skins/classic/junk_act.png plugins/markasjunk/skins/classic/junk_pas.png plugins/markasjunk/skins/classic/markasjunk.css plugins/markasjunk/skins/classic/markasjunk.min.css plugins/markasjunk/skins/larry/.gitignore plugins/new_user_dialog/composer.json plugins/new_user_dialog/localization/ar.inc plugins/new_user_dialog/localization/ar_SA.inc plugins/new_user_dialog/localization/ast.inc plugins/new_user_dialog/localization/az_AZ.inc plugins/new_user_dialog/localization/be_BE.inc plugins/new_user_dialog/localization/bg_BG.inc plugins/new_user_dialog/localization/br.inc plugins/new_user_dialog/localization/bs_BA.inc plugins/new_user_dialog/localization/ca_ES.inc plugins/new_user_dialog/localization/cs_CZ.inc plugins/new_user_dialog/localization/cy_GB.inc plugins/new_user_dialog/localization/da_DK.inc plugins/new_user_dialog/localization/de_CH.inc plugins/new_user_dialog/localization/de_DE.inc plugins/new_user_dialog/localization/el_GR.inc plugins/new_user_dialog/localization/en_CA.inc plugins/new_user_dialog/localization/en_GB.inc plugins/new_user_dialog/localization/en_US.inc plugins/new_user_dialog/localization/eo.inc plugins/new_user_dialog/localization/es_419.inc plugins/new_user_dialog/localization/es_AR.inc plugins/new_user_dialog/localization/es_ES.inc plugins/new_user_dialog/localization/et_EE.inc plugins/new_user_dialog/localization/eu_ES.inc plugins/new_user_dialog/localization/fa_AF.inc plugins/new_user_dialog/localization/fa_IR.inc plugins/new_user_dialog/localization/fi_FI.inc plugins/new_user_dialog/localization/fo_FO.inc plugins/new_user_dialog/localization/fr_FR.inc plugins/new_user_dialog/localization/fy_NL.inc plugins/new_user_dialog/localization/ga_IE.inc plugins/new_user_dialog/localization/gl_ES.inc plugins/new_user_dialog/localization/he_IL.inc plugins/new_user_dialog/localization/hr_HR.inc plugins/new_user_dialog/localization/hu_HU.inc plugins/new_user_dialog/localization/hy_AM.inc plugins/new_user_dialog/localization/ia.inc plugins/new_user_dialog/localization/id_ID.inc plugins/new_user_dialog/localization/is_IS.inc plugins/new_user_dialog/localization/it_IT.inc plugins/new_user_dialog/localization/ja_JP.inc plugins/new_user_dialog/localization/km_KH.inc plugins/new_user_dialog/localization/ko_KR.inc plugins/new_user_dialog/localization/ku.inc plugins/new_user_dialog/localization/ku_IQ.inc plugins/new_user_dialog/localization/lb_LU.inc plugins/new_user_dialog/localization/lt_LT.inc plugins/new_user_dialog/localization/lv_LV.inc plugins/new_user_dialog/localization/mk_MK.inc plugins/new_user_dialog/localization/ml_IN.inc plugins/new_user_dialog/localization/mn_MN.inc plugins/new_user_dialog/localization/mr_IN.inc plugins/new_user_dialog/localization/nb_NO.inc plugins/new_user_dialog/localization/nl_BE.inc plugins/new_user_dialog/localization/nl_NL.inc plugins/new_user_dialog/localization/nn_NO.inc plugins/new_user_dialog/localization/pl_PL.inc plugins/new_user_dialog/localization/pt_BR.inc plugins/new_user_dialog/localization/pt_PT.inc plugins/new_user_dialog/localization/ro_RO.inc plugins/new_user_dialog/localization/ru_RU.inc plugins/new_user_dialog/localization/sk_SK.inc plugins/new_user_dialog/localization/sl_SI.inc plugins/new_user_dialog/localization/sq_AL.inc plugins/new_user_dialog/localization/sr_CS.inc plugins/new_user_dialog/localization/sv_SE.inc plugins/new_user_dialog/localization/th_TH.inc plugins/new_user_dialog/localization/tr_TR.inc plugins/new_user_dialog/localization/uk_UA.inc plugins/new_user_dialog/localization/vi_VN.inc plugins/new_user_dialog/localization/zh_CN.inc plugins/new_user_dialog/localization/zh_TW.inc plugins/new_user_dialog/new_user_dialog.php plugins/new_user_dialog/newuserdialog.css plugins/new_user_dialog/newuserdialog.min.css plugins/new_user_identity/composer.json plugins/new_user_identity/config.inc.php.dist plugins/new_user_identity/new_user_identity.php plugins/newmail_notifier/composer.json plugins/newmail_notifier/config.inc.php.dist plugins/newmail_notifier/favicon.ico plugins/newmail_notifier/localization/ar_SA.inc plugins/newmail_notifier/localization/ast.inc plugins/newmail_notifier/localization/az_AZ.inc plugins/newmail_notifier/localization/be_BE.inc plugins/newmail_notifier/localization/bg_BG.inc plugins/newmail_notifier/localization/br.inc plugins/newmail_notifier/localization/bs_BA.inc plugins/newmail_notifier/localization/ca_ES.inc plugins/newmail_notifier/localization/cs_CZ.inc plugins/newmail_notifier/localization/cy_GB.inc plugins/newmail_notifier/localization/da_DK.inc plugins/newmail_notifier/localization/de_CH.inc plugins/newmail_notifier/localization/de_DE.inc plugins/newmail_notifier/localization/el_GR.inc plugins/newmail_notifier/localization/en_CA.inc plugins/newmail_notifier/localization/en_GB.inc plugins/newmail_notifier/localization/en_US.inc plugins/newmail_notifier/localization/eo.inc plugins/newmail_notifier/localization/es_419.inc plugins/newmail_notifier/localization/es_AR.inc plugins/newmail_notifier/localization/es_ES.inc plugins/newmail_notifier/localization/et_EE.inc plugins/newmail_notifier/localization/eu_ES.inc plugins/newmail_notifier/localization/fa_IR.inc plugins/newmail_notifier/localization/fi_FI.inc plugins/newmail_notifier/localization/fo_FO.inc plugins/newmail_notifier/localization/fr_FR.inc plugins/newmail_notifier/localization/fy_NL.inc plugins/newmail_notifier/localization/ga_IE.inc plugins/newmail_notifier/localization/gl_ES.inc plugins/newmail_notifier/localization/he_IL.inc plugins/newmail_notifier/localization/hr_HR.inc plugins/newmail_notifier/localization/hu_HU.inc plugins/newmail_notifier/localization/hy_AM.inc plugins/newmail_notifier/localization/ia.inc plugins/newmail_notifier/localization/id_ID.inc plugins/newmail_notifier/localization/is_IS.inc plugins/newmail_notifier/localization/it_IT.inc plugins/newmail_notifier/localization/ja_JP.inc plugins/newmail_notifier/localization/km_KH.inc plugins/newmail_notifier/localization/ko_KR.inc plugins/newmail_notifier/localization/ku.inc plugins/newmail_notifier/localization/ku_IQ.inc plugins/newmail_notifier/localization/lb_LU.inc plugins/newmail_notifier/localization/lt_LT.inc plugins/newmail_notifier/localization/lv_LV.inc plugins/newmail_notifier/localization/mk_MK.inc plugins/newmail_notifier/localization/ml_IN.inc plugins/newmail_notifier/localization/mn_MN.inc plugins/newmail_notifier/localization/mr_IN.inc plugins/newmail_notifier/localization/nb_NO.inc plugins/newmail_notifier/localization/nl_BE.inc plugins/newmail_notifier/localization/nl_NL.inc plugins/newmail_notifier/localization/nn_NO.inc plugins/newmail_notifier/localization/pl_PL.inc plugins/newmail_notifier/localization/pt_BR.inc plugins/newmail_notifier/localization/pt_PT.inc plugins/newmail_notifier/localization/ro_RO.inc plugins/newmail_notifier/localization/ru_RU.inc plugins/newmail_notifier/localization/si_LK.inc plugins/newmail_notifier/localization/sk_SK.inc plugins/newmail_notifier/localization/sl_SI.inc plugins/newmail_notifier/localization/sq_AL.inc plugins/newmail_notifier/localization/sr_CS.inc plugins/newmail_notifier/localization/sv_SE.inc plugins/newmail_notifier/localization/th_TH.inc plugins/newmail_notifier/localization/ti.inc plugins/newmail_notifier/localization/tr_TR.inc plugins/newmail_notifier/localization/uk_UA.inc plugins/newmail_notifier/localization/uz.inc plugins/newmail_notifier/localization/vi_VN.inc plugins/newmail_notifier/localization/zh_CN.inc plugins/newmail_notifier/localization/zh_TW.inc plugins/newmail_notifier/mail.png plugins/newmail_notifier/newmail_notifier.js plugins/newmail_notifier/newmail_notifier.min.js plugins/newmail_notifier/newmail_notifier.php plugins/newmail_notifier/overlay.ico plugins/newmail_notifier/sound.mp3 plugins/newmail_notifier/sound.wav plugins/password/README plugins/password/composer.json plugins/password/config.inc.php.dist plugins/password/drivers/chpasswd.php plugins/password/drivers/cpanel.php plugins/password/drivers/cpanel_webmail.php plugins/password/drivers/dbmail.php plugins/password/drivers/directadmin.php plugins/password/drivers/domainfactory.php plugins/password/drivers/expect.php plugins/password/drivers/gearman.php plugins/password/drivers/hmail.php plugins/password/drivers/kpasswd.php plugins/password/drivers/ldap.php plugins/password/drivers/ldap_ppolicy.php plugins/password/drivers/ldap_simple.php plugins/password/drivers/pam.php plugins/password/drivers/plesk.php plugins/password/drivers/poppassd.php plugins/password/drivers/pw_usermod.php plugins/password/drivers/sasl.php plugins/password/drivers/smb.php plugins/password/drivers/sql.php plugins/password/drivers/virtualmin.php plugins/password/drivers/vpopmaild.php plugins/password/drivers/ximss.php plugins/password/drivers/xmail.php plugins/password/helpers/change_ldap_pass.pl plugins/password/helpers/chgdbmailusers.c plugins/password/helpers/chgsaslpasswd.c plugins/password/helpers/chgvirtualminpasswd.c plugins/password/helpers/chpass-wrapper.py plugins/password/helpers/dovecot_hmacmd5.php plugins/password/helpers/passwd-expect plugins/password/localization/ar.inc plugins/password/localization/ar_SA.inc plugins/password/localization/ast.inc plugins/password/localization/az_AZ.inc plugins/password/localization/be_BE.inc plugins/password/localization/bg_BG.inc plugins/password/localization/br.inc plugins/password/localization/bs_BA.inc plugins/password/localization/ca_ES.inc plugins/password/localization/cs_CZ.inc plugins/password/localization/cy_GB.inc plugins/password/localization/da_DK.inc plugins/password/localization/de_CH.inc plugins/password/localization/de_DE.inc plugins/password/localization/el_GR.inc plugins/password/localization/en_CA.inc plugins/password/localization/en_GB.inc plugins/password/localization/en_US.inc plugins/password/localization/eo.inc plugins/password/localization/es_419.inc plugins/password/localization/es_AR.inc plugins/password/localization/es_ES.inc plugins/password/localization/et_EE.inc plugins/password/localization/eu_ES.inc plugins/password/localization/fa_AF.inc plugins/password/localization/fa_IR.inc plugins/password/localization/fi_FI.inc plugins/password/localization/fo_FO.inc plugins/password/localization/fr_FR.inc plugins/password/localization/fy_NL.inc plugins/password/localization/ga_IE.inc plugins/password/localization/gl_ES.inc plugins/password/localization/he_IL.inc plugins/password/localization/hr_HR.inc plugins/password/localization/hu_HU.inc plugins/password/localization/hy_AM.inc plugins/password/localization/ia.inc plugins/password/localization/id_ID.inc plugins/password/localization/is_IS.inc plugins/password/localization/it_IT.inc plugins/password/localization/ja_JP.inc plugins/password/localization/km_KH.inc plugins/password/localization/ko_KR.inc plugins/password/localization/ku.inc plugins/password/localization/ku_IQ.inc plugins/password/localization/lb_LU.inc plugins/password/localization/lt_LT.inc plugins/password/localization/lv_LV.inc plugins/password/localization/mk_MK.inc plugins/password/localization/ml_IN.inc plugins/password/localization/mn_MN.inc plugins/password/localization/nb_NO.inc plugins/password/localization/nl_BE.inc plugins/password/localization/nl_NL.inc plugins/password/localization/nn_NO.inc plugins/password/localization/pl_PL.inc plugins/password/localization/pt_BR.inc plugins/password/localization/pt_PT.inc plugins/password/localization/ro_RO.inc plugins/password/localization/ru_RU.inc plugins/password/localization/sk_SK.inc plugins/password/localization/sl_SI.inc plugins/password/localization/sq_AL.inc plugins/password/localization/sr_CS.inc plugins/password/localization/sv_SE.inc plugins/password/localization/th_TH.inc plugins/password/localization/ti.inc plugins/password/localization/tr_TR.inc plugins/password/localization/uk_UA.inc plugins/password/localization/uz.inc plugins/password/localization/vi_VN.inc plugins/password/localization/zh_CN.inc plugins/password/localization/zh_TW.inc plugins/password/password.js plugins/password/password.min.js plugins/password/password.php plugins/redundant_attachments/composer.json plugins/redundant_attachments/config.inc.php.dist plugins/redundant_attachments/redundant_attachments.php plugins/show_additional_headers/composer.json plugins/show_additional_headers/show_additional_headers.php plugins/squirrelmail_usercopy/composer.json plugins/squirrelmail_usercopy/config.inc.php.dist plugins/squirrelmail_usercopy/squirrelmail_usercopy.php plugins/subscriptions_option/composer.json plugins/subscriptions_option/localization/ar_SA.inc plugins/subscriptions_option/localization/ast.inc plugins/subscriptions_option/localization/az_AZ.inc plugins/subscriptions_option/localization/be_BE.inc plugins/subscriptions_option/localization/bg_BG.inc plugins/subscriptions_option/localization/br.inc plugins/subscriptions_option/localization/bs_BA.inc plugins/subscriptions_option/localization/ca_ES.inc plugins/subscriptions_option/localization/cs_CZ.inc plugins/subscriptions_option/localization/cy_GB.inc plugins/subscriptions_option/localization/da_DK.inc plugins/subscriptions_option/localization/de_CH.inc plugins/subscriptions_option/localization/de_DE.inc plugins/subscriptions_option/localization/el_GR.inc plugins/subscriptions_option/localization/en_CA.inc plugins/subscriptions_option/localization/en_GB.inc plugins/subscriptions_option/localization/en_US.inc plugins/subscriptions_option/localization/eo.inc plugins/subscriptions_option/localization/es_419.inc plugins/subscriptions_option/localization/es_AR.inc plugins/subscriptions_option/localization/es_ES.inc plugins/subscriptions_option/localization/et_EE.inc plugins/subscriptions_option/localization/eu_ES.inc plugins/subscriptions_option/localization/fa_AF.inc plugins/subscriptions_option/localization/fa_IR.inc plugins/subscriptions_option/localization/fi_FI.inc plugins/subscriptions_option/localization/fo_FO.inc plugins/subscriptions_option/localization/fr_FR.inc plugins/subscriptions_option/localization/fy_NL.inc plugins/subscriptions_option/localization/ga_IE.inc plugins/subscriptions_option/localization/gl_ES.inc plugins/subscriptions_option/localization/he_IL.inc plugins/subscriptions_option/localization/hr_HR.inc plugins/subscriptions_option/localization/hu_HU.inc plugins/subscriptions_option/localization/hy_AM.inc plugins/subscriptions_option/localization/ia.inc plugins/subscriptions_option/localization/id_ID.inc plugins/subscriptions_option/localization/is_IS.inc plugins/subscriptions_option/localization/it_IT.inc plugins/subscriptions_option/localization/ja_JP.inc plugins/subscriptions_option/localization/km_KH.inc plugins/subscriptions_option/localization/ko_KR.inc plugins/subscriptions_option/localization/ku.inc plugins/subscriptions_option/localization/lb_LU.inc plugins/subscriptions_option/localization/lt_LT.inc plugins/subscriptions_option/localization/lv_LV.inc plugins/subscriptions_option/localization/mk_MK.inc plugins/subscriptions_option/localization/ml_IN.inc plugins/subscriptions_option/localization/mn_MN.inc plugins/subscriptions_option/localization/nb_NO.inc plugins/subscriptions_option/localization/nl_NL.inc plugins/subscriptions_option/localization/nn_NO.inc plugins/subscriptions_option/localization/pl_PL.inc plugins/subscriptions_option/localization/pt_BR.inc plugins/subscriptions_option/localization/pt_PT.inc plugins/subscriptions_option/localization/ro_RO.inc plugins/subscriptions_option/localization/ru_RU.inc plugins/subscriptions_option/localization/sk_SK.inc plugins/subscriptions_option/localization/sl_SI.inc plugins/subscriptions_option/localization/sq_AL.inc plugins/subscriptions_option/localization/sr_CS.inc plugins/subscriptions_option/localization/sv_SE.inc plugins/subscriptions_option/localization/th_TH.inc plugins/subscriptions_option/localization/tr_TR.inc plugins/subscriptions_option/localization/uk_UA.inc plugins/subscriptions_option/localization/uz.inc plugins/subscriptions_option/localization/vi_VN.inc plugins/subscriptions_option/localization/zh_CN.inc plugins/subscriptions_option/localization/zh_TW.inc plugins/subscriptions_option/subscriptions_option.php plugins/thunderbird_labels/.#thunderbird_labels.js# plugins/thunderbird_labels/Changelog plugins/thunderbird_labels/LICENSE.md plugins/thunderbird_labels/README.md plugins/thunderbird_labels/composer.json plugins/thunderbird_labels/config.inc.php plugins/thunderbird_labels/docs/README.md plugins/thunderbird_labels/docs/screenshot.png plugins/thunderbird_labels/localization/bg_BG.inc plugins/thunderbird_labels/localization/ca_ES.inc plugins/thunderbird_labels/localization/cs_CZ.inc plugins/thunderbird_labels/localization/de_DE.inc plugins/thunderbird_labels/localization/en_US.inc plugins/thunderbird_labels/localization/es_ES.inc plugins/thunderbird_labels/localization/fr_FR.inc plugins/thunderbird_labels/localization/hu_HU.inc plugins/thunderbird_labels/localization/it_IT.inc plugins/thunderbird_labels/localization/lv_LV.inc plugins/thunderbird_labels/localization/nl_NL.inc plugins/thunderbird_labels/localization/pl_PL.inc plugins/thunderbird_labels/localization/pt_BR.inc plugins/thunderbird_labels/localization/pt_PT.inc plugins/thunderbird_labels/localization/ru_RU.inc plugins/thunderbird_labels/localization/sk_SK.inc plugins/thunderbird_labels/localization/uk_UA.inc plugins/thunderbird_labels/skins/classic/tb_label.css plugins/thunderbird_labels/skins/classic/thunderbird_32.png plugins/thunderbird_labels/skins/default/tb_label.css plugins/thunderbird_labels/skins/default/thunderbird_32.png plugins/thunderbird_labels/skins/larry/tb_label.css plugins/thunderbird_labels/skins/larry/thunderbird_24.png plugins/thunderbird_labels/skins/larry/thunderbird_32.png plugins/thunderbird_labels/tb_label.js plugins/thunderbird_labels/thunderbird_labels.php plugins/userinfo/composer.json plugins/userinfo/localization/ar.inc plugins/userinfo/localization/ar_SA.inc plugins/userinfo/localization/ast.inc plugins/userinfo/localization/az_AZ.inc plugins/userinfo/localization/be_BE.inc plugins/userinfo/localization/bg_BG.inc plugins/userinfo/localization/br.inc plugins/userinfo/localization/bs_BA.inc plugins/userinfo/localization/ca_ES.inc plugins/userinfo/localization/cs_CZ.inc plugins/userinfo/localization/cy_GB.inc plugins/userinfo/localization/da_DK.inc plugins/userinfo/localization/de_CH.inc plugins/userinfo/localization/de_DE.inc plugins/userinfo/localization/el_GR.inc plugins/userinfo/localization/en_CA.inc plugins/userinfo/localization/en_GB.inc plugins/userinfo/localization/en_US.inc plugins/userinfo/localization/eo.inc plugins/userinfo/localization/es_419.inc plugins/userinfo/localization/es_AR.inc plugins/userinfo/localization/es_ES.inc plugins/userinfo/localization/et_EE.inc plugins/userinfo/localization/eu_ES.inc plugins/userinfo/localization/fa_AF.inc plugins/userinfo/localization/fa_IR.inc plugins/userinfo/localization/fi_FI.inc plugins/userinfo/localization/fo_FO.inc plugins/userinfo/localization/fr_FR.inc plugins/userinfo/localization/fy_NL.inc plugins/userinfo/localization/ga_IE.inc plugins/userinfo/localization/gl_ES.inc plugins/userinfo/localization/he_IL.inc plugins/userinfo/localization/hr_HR.inc plugins/userinfo/localization/hu_HU.inc plugins/userinfo/localization/hy_AM.inc plugins/userinfo/localization/ia.inc plugins/userinfo/localization/id_ID.inc plugins/userinfo/localization/is_IS.inc plugins/userinfo/localization/it_IT.inc plugins/userinfo/localization/ja_JP.inc plugins/userinfo/localization/km_KH.inc plugins/userinfo/localization/ko_KR.inc plugins/userinfo/localization/ku.inc plugins/userinfo/localization/ku_IQ.inc plugins/userinfo/localization/lb_LU.inc plugins/userinfo/localization/lt_LT.inc plugins/userinfo/localization/lv_LV.inc plugins/userinfo/localization/mk_MK.inc plugins/userinfo/localization/ml_IN.inc plugins/userinfo/localization/mn_MN.inc plugins/userinfo/localization/mr_IN.inc plugins/userinfo/localization/nb_NO.inc plugins/userinfo/localization/nl_BE.inc plugins/userinfo/localization/nl_NL.inc plugins/userinfo/localization/nn_NO.inc plugins/userinfo/localization/pl_PL.inc plugins/userinfo/localization/pt_BR.inc plugins/userinfo/localization/pt_PT.inc plugins/userinfo/localization/ro_RO.inc plugins/userinfo/localization/ru_RU.inc plugins/userinfo/localization/sk_SK.inc plugins/userinfo/localization/sl_SI.inc plugins/userinfo/localization/sq_AL.inc plugins/userinfo/localization/sr_CS.inc plugins/userinfo/localization/sv_SE.inc plugins/userinfo/localization/th_TH.inc plugins/userinfo/localization/ti.inc plugins/userinfo/localization/tr_TR.inc plugins/userinfo/localization/uk_UA.inc plugins/userinfo/localization/uz.inc plugins/userinfo/localization/vi_VN.inc plugins/userinfo/localization/zh_CN.inc plugins/userinfo/localization/zh_TW.inc plugins/userinfo/userinfo.js plugins/userinfo/userinfo.min.js plugins/userinfo/userinfo.php plugins/vcard_attachments/composer.json plugins/vcard_attachments/localization/ar.inc plugins/vcard_attachments/localization/ar_SA.inc plugins/vcard_attachments/localization/ast.inc plugins/vcard_attachments/localization/az_AZ.inc plugins/vcard_attachments/localization/be_BE.inc plugins/vcard_attachments/localization/bg_BG.inc plugins/vcard_attachments/localization/br.inc plugins/vcard_attachments/localization/bs_BA.inc plugins/vcard_attachments/localization/ca_ES.inc plugins/vcard_attachments/localization/cs_CZ.inc plugins/vcard_attachments/localization/cy_GB.inc plugins/vcard_attachments/localization/da_DK.inc plugins/vcard_attachments/localization/de_CH.inc plugins/vcard_attachments/localization/de_DE.inc plugins/vcard_attachments/localization/el_GR.inc plugins/vcard_attachments/localization/en_CA.inc plugins/vcard_attachments/localization/en_GB.inc plugins/vcard_attachments/localization/en_US.inc plugins/vcard_attachments/localization/eo.inc plugins/vcard_attachments/localization/es_419.inc plugins/vcard_attachments/localization/es_AR.inc plugins/vcard_attachments/localization/es_ES.inc plugins/vcard_attachments/localization/et_EE.inc plugins/vcard_attachments/localization/eu_ES.inc plugins/vcard_attachments/localization/fa_IR.inc plugins/vcard_attachments/localization/fi_FI.inc plugins/vcard_attachments/localization/fo_FO.inc plugins/vcard_attachments/localization/fr_FR.inc plugins/vcard_attachments/localization/fy_NL.inc plugins/vcard_attachments/localization/ga_IE.inc plugins/vcard_attachments/localization/gl_ES.inc plugins/vcard_attachments/localization/he_IL.inc plugins/vcard_attachments/localization/hr_HR.inc plugins/vcard_attachments/localization/hu_HU.inc plugins/vcard_attachments/localization/hy_AM.inc plugins/vcard_attachments/localization/ia.inc plugins/vcard_attachments/localization/id_ID.inc plugins/vcard_attachments/localization/is_IS.inc plugins/vcard_attachments/localization/it_IT.inc plugins/vcard_attachments/localization/ja_JP.inc plugins/vcard_attachments/localization/km_KH.inc plugins/vcard_attachments/localization/ko_KR.inc plugins/vcard_attachments/localization/ku.inc plugins/vcard_attachments/localization/lb_LU.inc plugins/vcard_attachments/localization/lt_LT.inc plugins/vcard_attachments/localization/lv_LV.inc plugins/vcard_attachments/localization/mk_MK.inc plugins/vcard_attachments/localization/ml_IN.inc plugins/vcard_attachments/localization/mn_MN.inc plugins/vcard_attachments/localization/mr_IN.inc plugins/vcard_attachments/localization/nb_NO.inc plugins/vcard_attachments/localization/nl_NL.inc plugins/vcard_attachments/localization/nn_NO.inc plugins/vcard_attachments/localization/pl_PL.inc plugins/vcard_attachments/localization/pt_BR.inc plugins/vcard_attachments/localization/pt_PT.inc plugins/vcard_attachments/localization/ro_RO.inc plugins/vcard_attachments/localization/ru_RU.inc plugins/vcard_attachments/localization/si_LK.inc plugins/vcard_attachments/localization/sk_SK.inc plugins/vcard_attachments/localization/sl_SI.inc plugins/vcard_attachments/localization/sq_AL.inc plugins/vcard_attachments/localization/sr_CS.inc plugins/vcard_attachments/localization/sv_SE.inc plugins/vcard_attachments/localization/th_TH.inc plugins/vcard_attachments/localization/tr_TR.inc plugins/vcard_attachments/localization/uk_UA.inc plugins/vcard_attachments/localization/uz.inc plugins/vcard_attachments/localization/vi_VN.inc plugins/vcard_attachments/localization/zh_CN.inc plugins/vcard_attachments/localization/zh_TW.inc plugins/vcard_attachments/skins/classic/style.css plugins/vcard_attachments/skins/classic/style.min.css plugins/vcard_attachments/skins/classic/vcard.png plugins/vcard_attachments/skins/classic/vcard_add_contact.png plugins/vcard_attachments/skins/larry/style.css plugins/vcard_attachments/skins/larry/style.min.css plugins/vcard_attachments/skins/larry/vcard.png plugins/vcard_attachments/skins/larry/vcard_add_contact.png plugins/vcard_attachments/vcard_attachments.php plugins/vcard_attachments/vcardattach.js plugins/vcard_attachments/vcardattach.min.js plugins/virtuser_file/composer.json plugins/virtuser_file/virtuser_file.php plugins/virtuser_query/composer.json plugins/virtuser_query/virtuser_query.php plugins/zipdownload/README plugins/zipdownload/composer.json plugins/zipdownload/config.inc.php.dist plugins/zipdownload/localization/ar.inc plugins/zipdownload/localization/ar_SA.inc plugins/zipdownload/localization/ast.inc plugins/zipdownload/localization/az_AZ.inc plugins/zipdownload/localization/be_BE.inc plugins/zipdownload/localization/bg_BG.inc plugins/zipdownload/localization/br.inc plugins/zipdownload/localization/bs_BA.inc plugins/zipdownload/localization/ca_ES.inc plugins/zipdownload/localization/cs_CZ.inc plugins/zipdownload/localization/cy_GB.inc plugins/zipdownload/localization/da_DK.inc plugins/zipdownload/localization/de_CH.inc plugins/zipdownload/localization/de_DE.inc plugins/zipdownload/localization/el_GR.inc plugins/zipdownload/localization/en_CA.inc plugins/zipdownload/localization/en_GB.inc plugins/zipdownload/localization/en_US.inc plugins/zipdownload/localization/eo.inc plugins/zipdownload/localization/es_419.inc plugins/zipdownload/localization/es_AR.inc plugins/zipdownload/localization/es_ES.inc plugins/zipdownload/localization/et_EE.inc plugins/zipdownload/localization/eu_ES.inc plugins/zipdownload/localization/fa_AF.inc plugins/zipdownload/localization/fa_IR.inc plugins/zipdownload/localization/fi_FI.inc plugins/zipdownload/localization/fo_FO.inc plugins/zipdownload/localization/fr_FR.inc plugins/zipdownload/localization/fy_NL.inc plugins/zipdownload/localization/ga_IE.inc plugins/zipdownload/localization/gl_ES.inc plugins/zipdownload/localization/he_IL.inc plugins/zipdownload/localization/hr_HR.inc plugins/zipdownload/localization/hu_HU.inc plugins/zipdownload/localization/hy_AM.inc plugins/zipdownload/localization/ia.inc plugins/zipdownload/localization/id_ID.inc plugins/zipdownload/localization/is_IS.inc plugins/zipdownload/localization/it_IT.inc plugins/zipdownload/localization/ja_JP.inc plugins/zipdownload/localization/km_KH.inc plugins/zipdownload/localization/ko_KR.inc plugins/zipdownload/localization/ku.inc plugins/zipdownload/localization/ku_IQ.inc plugins/zipdownload/localization/lb_LU.inc plugins/zipdownload/localization/lt_LT.inc plugins/zipdownload/localization/lv_LV.inc plugins/zipdownload/localization/mk_MK.inc plugins/zipdownload/localization/ml_IN.inc plugins/zipdownload/localization/mn_MN.inc plugins/zipdownload/localization/nb_NO.inc plugins/zipdownload/localization/nl_NL.inc plugins/zipdownload/localization/nn_NO.inc plugins/zipdownload/localization/pl_PL.inc plugins/zipdownload/localization/pt_BR.inc plugins/zipdownload/localization/pt_PT.inc plugins/zipdownload/localization/ro_RO.inc plugins/zipdownload/localization/ru_RU.inc plugins/zipdownload/localization/sk_SK.inc plugins/zipdownload/localization/sl_SI.inc plugins/zipdownload/localization/sq_AL.inc plugins/zipdownload/localization/sr_CS.inc plugins/zipdownload/localization/sv_SE.inc plugins/zipdownload/localization/th_TH.inc plugins/zipdownload/localization/tr_TR.inc plugins/zipdownload/localization/uk_UA.inc plugins/zipdownload/localization/uz.inc plugins/zipdownload/localization/vi_VN.inc plugins/zipdownload/localization/zh_CN.inc plugins/zipdownload/localization/zh_TW.inc plugins/zipdownload/skins/classic/zip.png plugins/zipdownload/skins/classic/zipdownload.css plugins/zipdownload/skins/classic/zipdownload.min.css plugins/zipdownload/skins/larry/zipdownload.css plugins/zipdownload/skins/larry/zipdownload.min.css plugins/zipdownload/zipdownload.js plugins/zipdownload/zipdownload.min.js plugins/zipdownload/zipdownload.php program robots.txt skins/classic/README skins/classic/addressbook.css skins/classic/addressbook.min.css skins/classic/common.css skins/classic/common.min.css skins/classic/embed.css skins/classic/embed.min.css skins/classic/functions.js skins/classic/functions.min.js skins/classic/googiespell.css skins/classic/googiespell.min.css skins/classic/images/abook_toolbar.png skins/classic/images/buttons/add_act.png skins/classic/images/buttons/add_pas.png skins/classic/images/buttons/add_sel.png skins/classic/images/buttons/bg.gif skins/classic/images/cleardot.png skins/classic/images/contactgroup.png skins/classic/images/contactpic.png skins/classic/images/dbutton.png skins/classic/images/dimple.png skins/classic/images/display/icons.gif skins/classic/images/display/icons.png skins/classic/images/display/loading.gif skins/classic/images/display/loading_blue.gif skins/classic/images/favicon.ico skins/classic/images/filedrop.png skins/classic/images/googiespell/change_lang.gif skins/classic/images/googiespell/indicator.gif skins/classic/images/googiespell/ok.gif skins/classic/images/googiespell/spellc.gif skins/classic/images/icons/attachment.png skins/classic/images/icons/blank.gif skins/classic/images/icons/collapsed.png skins/classic/images/icons/columnpicker.gif skins/classic/images/icons/delete.png skins/classic/images/icons/deleted.png skins/classic/images/icons/dot.png skins/classic/images/icons/down_small.gif skins/classic/images/icons/expanded.png skins/classic/images/icons/extwin.png skins/classic/images/icons/flagged.png skins/classic/images/icons/folders.png skins/classic/images/icons/forwarded.png skins/classic/images/icons/forwarded_replied.png skins/classic/images/icons/glass.png skins/classic/images/icons/glass_roll.png skins/classic/images/icons/groupactions.png skins/classic/images/icons/html.png skins/classic/images/icons/minus.gif skins/classic/images/icons/plus.gif skins/classic/images/icons/rename.png skins/classic/images/icons/replied.png skins/classic/images/icons/reset.gif skins/classic/images/icons/silhouette.png skins/classic/images/icons/sort.gif skins/classic/images/icons/text.png skins/classic/images/icons/unflagged.png skins/classic/images/icons/unread.png skins/classic/images/icons/unread_children.png skins/classic/images/icons/up_small.gif skins/classic/images/listheader.gif skins/classic/images/mail_footer.png skins/classic/images/mail_toolbar.png skins/classic/images/messageactions.png skins/classic/images/messageicons.png skins/classic/images/pagenav.gif skins/classic/images/quota-colors.png skins/classic/images/quota.png skins/classic/images/roundcube_logo.png skins/classic/images/searchfield.gif skins/classic/images/tabs-left.gif skins/classic/images/tabs-right.gif skins/classic/images/taskbar.png skins/classic/images/taskicons.gif skins/classic/images/taskicons.png skins/classic/images/tree.gif skins/classic/images/watermark.gif skins/classic/includes/header.html skins/classic/includes/links.html skins/classic/includes/messagetoolbar.html skins/classic/includes/settingstabs.html skins/classic/includes/taskbar.html skins/classic/mail.css skins/classic/mail.min.css skins/classic/meta.json skins/classic/print.css skins/classic/print.min.css skins/classic/safari.css skins/classic/safari.min.css skins/classic/settings.css skins/classic/settings.min.css skins/classic/splitter.js skins/classic/splitter.min.js skins/classic/templates/about.html skins/classic/templates/addressbook.html skins/classic/templates/compose.html skins/classic/templates/contact.html skins/classic/templates/contactadd.html skins/classic/templates/contactedit.html skins/classic/templates/contactprint.html skins/classic/templates/contactsearch.html skins/classic/templates/error.html skins/classic/templates/folderedit.html skins/classic/templates/folders.html skins/classic/templates/identities.html skins/classic/templates/identityedit.html skins/classic/templates/importcontacts.html skins/classic/templates/login.html skins/classic/templates/mail.html skins/classic/templates/message.html skins/classic/templates/messageerror.html skins/classic/templates/messagepart.html skins/classic/templates/messagepreview.html skins/classic/templates/messageprint.html skins/classic/templates/plugin.html skins/classic/templates/responseedit.html skins/classic/templates/responses.html skins/classic/templates/settings.html skins/classic/templates/settingsedit.html skins/classic/thumbnail.png skins/classic/watermark.html skins/larry/README skins/larry/addressbook.css skins/larry/addressbook.min.css skins/larry/embed.css skins/larry/embed.min.css skins/larry/googiespell.css skins/larry/googiespell.min.css skins/larry/images/addcontact.png skins/larry/images/ajaxloader.gif skins/larry/images/ajaxloader_dark.gif skins/larry/images/buttons.png skins/larry/images/contactgroup.png skins/larry/images/contactpic.png skins/larry/images/contactpic_32px.png skins/larry/images/contactpic_48px.png skins/larry/images/favicon.ico skins/larry/images/filedrop.png skins/larry/images/filetypes.png skins/larry/images/googiespell/change_lang.gif skins/larry/images/googiespell/indicator.gif skins/larry/images/googiespell/ok.gif skins/larry/images/googiespell/spellc.gif skins/larry/images/listicons.png skins/larry/images/messages.png skins/larry/images/messages_dark.png skins/larry/images/overflowshadow.png skins/larry/images/quota.png skins/larry/images/roundcube_logo.png skins/larry/images/selector.png skins/larry/images/splitter.png skins/larry/images/watermark.jpg skins/larry/includes/footer.html skins/larry/includes/header.html skins/larry/includes/links.html skins/larry/includes/mailtoolbar.html skins/larry/includes/settingstabs.html skins/larry/mail.css skins/larry/mail.min.css skins/larry/meta.json skins/larry/print.css skins/larry/print.min.css skins/larry/settings.css skins/larry/settings.min.css skins/larry/styles.css skins/larry/styles.min.css skins/larry/templates/about.html skins/larry/templates/addressbook.html skins/larry/templates/compose.html skins/larry/templates/contact.html skins/larry/templates/contactedit.html skins/larry/templates/contactprint.html skins/larry/templates/contactsearch.html skins/larry/templates/error.html skins/larry/templates/folderedit.html skins/larry/templates/folders.html skins/larry/templates/identities.html skins/larry/templates/identityedit.html skins/larry/templates/importcontacts.html skins/larry/templates/login.html skins/larry/templates/mail.html skins/larry/templates/message.html skins/larry/templates/messageerror.html skins/larry/templates/messagepart.html skins/larry/templates/messagepreview.html skins/larry/templates/messageprint.html skins/larry/templates/plugin.html skins/larry/templates/responseedit.html skins/larry/templates/responses.html skins/larry/templates/settings.html skins/larry/templates/settingsedit.html skins/larry/thumbnail.png skins/larry/ui.js skins/larry/ui.min.js skins/larry/watermark.html temp/js_cache/codemirror-5.21.0.zip temp/js_cache/jquery-3.2.1.js temp/js_cache/jstz-1.0.6.js temp/js_cache/openpgp-1.6.2.js temp/js_cache/publickey-0e011cb.js temp/js_cache/tinymce-4.5.8.zip temp/js_cache/tinymce-langs-4.5.8.tmp vendor/autoload.php vendor/bin/crypt-gpg-pinentry vendor/bin/rcubeinitdb.sh vendor/composer/ClassLoader.php vendor/composer/LICENSE vendor/composer/autoload_classmap.php vendor/composer/autoload_namespaces.php vendor/composer/autoload_psr4.php vendor/composer/autoload_real.php vendor/composer/autoload_static.php vendor/composer/include_paths.php vendor/composer/installed.json vendor/composer/semver/CHANGELOG.md vendor/composer/semver/LICENSE vendor/composer/semver/README.md vendor/composer/semver/composer.json vendor/composer/semver/src/Comparator.php vendor/composer/semver/src/Constraint/AbstractConstraint.php vendor/composer/semver/src/Constraint/Constraint.php vendor/composer/semver/src/Constraint/ConstraintInterface.php vendor/composer/semver/src/Constraint/EmptyConstraint.php vendor/composer/semver/src/Constraint/MultiConstraint.php vendor/composer/semver/src/Semver.php vendor/composer/semver/src/VersionParser.php vendor/endroid/qrcode/.gitignore vendor/endroid/qrcode/.travis.yml vendor/endroid/qrcode/LICENSE vendor/endroid/qrcode/README.md vendor/endroid/qrcode/assets/data/qrv10_0.dat vendor/endroid/qrcode/assets/data/qrv10_1.dat vendor/endroid/qrcode/assets/data/qrv10_2.dat vendor/endroid/qrcode/assets/data/qrv10_3.dat vendor/endroid/qrcode/assets/data/qrv11_0.dat vendor/endroid/qrcode/assets/data/qrv11_1.dat vendor/endroid/qrcode/assets/data/qrv11_2.dat vendor/endroid/qrcode/assets/data/qrv11_3.dat vendor/endroid/qrcode/assets/data/qrv12_0.dat vendor/endroid/qrcode/assets/data/qrv12_1.dat vendor/endroid/qrcode/assets/data/qrv12_2.dat vendor/endroid/qrcode/assets/data/qrv12_3.dat vendor/endroid/qrcode/assets/data/qrv13_0.dat vendor/endroid/qrcode/assets/data/qrv13_1.dat vendor/endroid/qrcode/assets/data/qrv13_2.dat vendor/endroid/qrcode/assets/data/qrv13_3.dat vendor/endroid/qrcode/assets/data/qrv14_0.dat vendor/endroid/qrcode/assets/data/qrv14_1.dat vendor/endroid/qrcode/assets/data/qrv14_2.dat vendor/endroid/qrcode/assets/data/qrv14_3.dat vendor/endroid/qrcode/assets/data/qrv15_0.dat vendor/endroid/qrcode/assets/data/qrv15_1.dat vendor/endroid/qrcode/assets/data/qrv15_2.dat vendor/endroid/qrcode/assets/data/qrv15_3.dat vendor/endroid/qrcode/assets/data/qrv16_0.dat vendor/endroid/qrcode/assets/data/qrv16_1.dat vendor/endroid/qrcode/assets/data/qrv16_2.dat vendor/endroid/qrcode/assets/data/qrv16_3.dat vendor/endroid/qrcode/assets/data/qrv17_0.dat vendor/endroid/qrcode/assets/data/qrv17_1.dat vendor/endroid/qrcode/assets/data/qrv17_2.dat vendor/endroid/qrcode/assets/data/qrv17_3.dat vendor/endroid/qrcode/assets/data/qrv18_0.dat vendor/endroid/qrcode/assets/data/qrv18_1.dat vendor/endroid/qrcode/assets/data/qrv18_2.dat vendor/endroid/qrcode/assets/data/qrv18_3.dat vendor/endroid/qrcode/assets/data/qrv19_0.dat vendor/endroid/qrcode/assets/data/qrv19_1.dat vendor/endroid/qrcode/assets/data/qrv19_2.dat vendor/endroid/qrcode/assets/data/qrv19_3.dat vendor/endroid/qrcode/assets/data/qrv1_0.dat vendor/endroid/qrcode/assets/data/qrv1_1.dat vendor/endroid/qrcode/assets/data/qrv1_2.dat vendor/endroid/qrcode/assets/data/qrv1_3.dat vendor/endroid/qrcode/assets/data/qrv20_0.dat vendor/endroid/qrcode/assets/data/qrv20_1.dat vendor/endroid/qrcode/assets/data/qrv20_2.dat vendor/endroid/qrcode/assets/data/qrv20_3.dat vendor/endroid/qrcode/assets/data/qrv21_0.dat vendor/endroid/qrcode/assets/data/qrv21_1.dat vendor/endroid/qrcode/assets/data/qrv21_2.dat vendor/endroid/qrcode/assets/data/qrv21_3.dat vendor/endroid/qrcode/assets/data/qrv22_0.dat vendor/endroid/qrcode/assets/data/qrv22_1.dat vendor/endroid/qrcode/assets/data/qrv22_2.dat vendor/endroid/qrcode/assets/data/qrv22_3.dat vendor/endroid/qrcode/assets/data/qrv23_0.dat vendor/endroid/qrcode/assets/data/qrv23_1.dat vendor/endroid/qrcode/assets/data/qrv23_2.dat vendor/endroid/qrcode/assets/data/qrv23_3.dat vendor/endroid/qrcode/assets/data/qrv24_0.dat vendor/endroid/qrcode/assets/data/qrv24_1.dat vendor/endroid/qrcode/assets/data/qrv24_2.dat vendor/endroid/qrcode/assets/data/qrv24_3.dat vendor/endroid/qrcode/assets/data/qrv25_0.dat vendor/endroid/qrcode/assets/data/qrv25_1.dat vendor/endroid/qrcode/assets/data/qrv25_2.dat vendor/endroid/qrcode/assets/data/qrv25_3.dat vendor/endroid/qrcode/assets/data/qrv26_0.dat vendor/endroid/qrcode/assets/data/qrv26_1.dat vendor/endroid/qrcode/assets/data/qrv26_2.dat vendor/endroid/qrcode/assets/data/qrv26_3.dat vendor/endroid/qrcode/assets/data/qrv27_0.dat vendor/endroid/qrcode/assets/data/qrv27_1.dat vendor/endroid/qrcode/assets/data/qrv27_2.dat vendor/endroid/qrcode/assets/data/qrv27_3.dat vendor/endroid/qrcode/assets/data/qrv28_0.dat vendor/endroid/qrcode/assets/data/qrv28_1.dat vendor/endroid/qrcode/assets/data/qrv28_2.dat vendor/endroid/qrcode/assets/data/qrv28_3.dat vendor/endroid/qrcode/assets/data/qrv29_0.dat vendor/endroid/qrcode/assets/data/qrv29_1.dat vendor/endroid/qrcode/assets/data/qrv29_2.dat vendor/endroid/qrcode/assets/data/qrv29_3.dat vendor/endroid/qrcode/assets/data/qrv2_0.dat vendor/endroid/qrcode/assets/data/qrv2_1.dat vendor/endroid/qrcode/assets/data/qrv2_2.dat vendor/endroid/qrcode/assets/data/qrv2_3.dat vendor/endroid/qrcode/assets/data/qrv30_0.dat vendor/endroid/qrcode/assets/data/qrv30_1.dat vendor/endroid/qrcode/assets/data/qrv30_2.dat vendor/endroid/qrcode/assets/data/qrv30_3.dat vendor/endroid/qrcode/assets/data/qrv31_0.dat vendor/endroid/qrcode/assets/data/qrv31_1.dat vendor/endroid/qrcode/assets/data/qrv31_2.dat vendor/endroid/qrcode/assets/data/qrv31_3.dat vendor/endroid/qrcode/assets/data/qrv32_0.dat vendor/endroid/qrcode/assets/data/qrv32_1.dat vendor/endroid/qrcode/assets/data/qrv32_2.dat vendor/endroid/qrcode/assets/data/qrv32_3.dat vendor/endroid/qrcode/assets/data/qrv33_0.dat vendor/endroid/qrcode/assets/data/qrv33_1.dat vendor/endroid/qrcode/assets/data/qrv33_2.dat vendor/endroid/qrcode/assets/data/qrv33_3.dat vendor/endroid/qrcode/assets/data/qrv34_0.dat vendor/endroid/qrcode/assets/data/qrv34_1.dat vendor/endroid/qrcode/assets/data/qrv34_2.dat vendor/endroid/qrcode/assets/data/qrv34_3.dat vendor/endroid/qrcode/assets/data/qrv35_0.dat vendor/endroid/qrcode/assets/data/qrv35_1.dat vendor/endroid/qrcode/assets/data/qrv35_2.dat vendor/endroid/qrcode/assets/data/qrv35_3.dat vendor/endroid/qrcode/assets/data/qrv36_0.dat vendor/endroid/qrcode/assets/data/qrv36_1.dat vendor/endroid/qrcode/assets/data/qrv36_2.dat vendor/endroid/qrcode/assets/data/qrv36_3.dat vendor/endroid/qrcode/assets/data/qrv37_0.dat vendor/endroid/qrcode/assets/data/qrv37_1.dat vendor/endroid/qrcode/assets/data/qrv37_2.dat vendor/endroid/qrcode/assets/data/qrv37_3.dat vendor/endroid/qrcode/assets/data/qrv38_0.dat vendor/endroid/qrcode/assets/data/qrv38_1.dat vendor/endroid/qrcode/assets/data/qrv38_2.dat vendor/endroid/qrcode/assets/data/qrv38_3.dat vendor/endroid/qrcode/assets/data/qrv39_0.dat vendor/endroid/qrcode/assets/data/qrv39_1.dat vendor/endroid/qrcode/assets/data/qrv39_2.dat vendor/endroid/qrcode/assets/data/qrv39_3.dat vendor/endroid/qrcode/assets/data/qrv3_0.dat vendor/endroid/qrcode/assets/data/qrv3_1.dat vendor/endroid/qrcode/assets/data/qrv3_2.dat vendor/endroid/qrcode/assets/data/qrv3_3.dat vendor/endroid/qrcode/assets/data/qrv40_0.dat vendor/endroid/qrcode/assets/data/qrv40_1.dat vendor/endroid/qrcode/assets/data/qrv40_2.dat vendor/endroid/qrcode/assets/data/qrv40_3.dat vendor/endroid/qrcode/assets/data/qrv4_0.dat vendor/endroid/qrcode/assets/data/qrv4_1.dat vendor/endroid/qrcode/assets/data/qrv4_2.dat vendor/endroid/qrcode/assets/data/qrv4_3.dat vendor/endroid/qrcode/assets/data/qrv5_0.dat vendor/endroid/qrcode/assets/data/qrv5_1.dat vendor/endroid/qrcode/assets/data/qrv5_2.dat vendor/endroid/qrcode/assets/data/qrv5_3.dat vendor/endroid/qrcode/assets/data/qrv6_0.dat vendor/endroid/qrcode/assets/data/qrv6_1.dat vendor/endroid/qrcode/assets/data/qrv6_2.dat vendor/endroid/qrcode/assets/data/qrv6_3.dat vendor/endroid/qrcode/assets/data/qrv7_0.dat vendor/endroid/qrcode/assets/data/qrv7_1.dat vendor/endroid/qrcode/assets/data/qrv7_2.dat vendor/endroid/qrcode/assets/data/qrv7_3.dat vendor/endroid/qrcode/assets/data/qrv8_0.dat vendor/endroid/qrcode/assets/data/qrv8_1.dat vendor/endroid/qrcode/assets/data/qrv8_2.dat vendor/endroid/qrcode/assets/data/qrv8_3.dat vendor/endroid/qrcode/assets/data/qrv9_0.dat vendor/endroid/qrcode/assets/data/qrv9_1.dat vendor/endroid/qrcode/assets/data/qrv9_2.dat vendor/endroid/qrcode/assets/data/qrv9_3.dat vendor/endroid/qrcode/assets/data/qrvfr1.dat vendor/endroid/qrcode/assets/data/qrvfr10.dat vendor/endroid/qrcode/assets/data/qrvfr11.dat vendor/endroid/qrcode/assets/data/qrvfr12.dat vendor/endroid/qrcode/assets/data/qrvfr13.dat vendor/endroid/qrcode/assets/data/qrvfr14.dat vendor/endroid/qrcode/assets/data/qrvfr15.dat vendor/endroid/qrcode/assets/data/qrvfr16.dat vendor/endroid/qrcode/assets/data/qrvfr17.dat vendor/endroid/qrcode/assets/data/qrvfr18.dat vendor/endroid/qrcode/assets/data/qrvfr19.dat vendor/endroid/qrcode/assets/data/qrvfr2.dat vendor/endroid/qrcode/assets/data/qrvfr20.dat vendor/endroid/qrcode/assets/data/qrvfr21.dat vendor/endroid/qrcode/assets/data/qrvfr22.dat vendor/endroid/qrcode/assets/data/qrvfr23.dat vendor/endroid/qrcode/assets/data/qrvfr24.dat vendor/endroid/qrcode/assets/data/qrvfr25.dat vendor/endroid/qrcode/assets/data/qrvfr26.dat vendor/endroid/qrcode/assets/data/qrvfr27.dat vendor/endroid/qrcode/assets/data/qrvfr28.dat vendor/endroid/qrcode/assets/data/qrvfr29.dat vendor/endroid/qrcode/assets/data/qrvfr3.dat vendor/endroid/qrcode/assets/data/qrvfr30.dat vendor/endroid/qrcode/assets/data/qrvfr31.dat vendor/endroid/qrcode/assets/data/qrvfr32.dat vendor/endroid/qrcode/assets/data/qrvfr33.dat vendor/endroid/qrcode/assets/data/qrvfr34.dat vendor/endroid/qrcode/assets/data/qrvfr35.dat vendor/endroid/qrcode/assets/data/qrvfr36.dat vendor/endroid/qrcode/assets/data/qrvfr37.dat vendor/endroid/qrcode/assets/data/qrvfr38.dat vendor/endroid/qrcode/assets/data/qrvfr39.dat vendor/endroid/qrcode/assets/data/qrvfr4.dat vendor/endroid/qrcode/assets/data/qrvfr40.dat vendor/endroid/qrcode/assets/data/qrvfr5.dat vendor/endroid/qrcode/assets/data/qrvfr6.dat vendor/endroid/qrcode/assets/data/qrvfr7.dat vendor/endroid/qrcode/assets/data/qrvfr8.dat vendor/endroid/qrcode/assets/data/qrvfr9.dat vendor/endroid/qrcode/assets/data/rsc10.dat vendor/endroid/qrcode/assets/data/rsc13.dat vendor/endroid/qrcode/assets/data/rsc15.dat vendor/endroid/qrcode/assets/data/rsc16.dat vendor/endroid/qrcode/assets/data/rsc17.dat vendor/endroid/qrcode/assets/data/rsc18.dat vendor/endroid/qrcode/assets/data/rsc20.dat vendor/endroid/qrcode/assets/data/rsc22.dat vendor/endroid/qrcode/assets/data/rsc24.dat vendor/endroid/qrcode/assets/data/rsc26.dat vendor/endroid/qrcode/assets/data/rsc28.dat vendor/endroid/qrcode/assets/data/rsc30.dat vendor/endroid/qrcode/assets/data/rsc32.dat vendor/endroid/qrcode/assets/data/rsc34.dat vendor/endroid/qrcode/assets/data/rsc36.dat vendor/endroid/qrcode/assets/data/rsc40.dat vendor/endroid/qrcode/assets/data/rsc42.dat vendor/endroid/qrcode/assets/data/rsc44.dat vendor/endroid/qrcode/assets/data/rsc46.dat vendor/endroid/qrcode/assets/data/rsc48.dat vendor/endroid/qrcode/assets/data/rsc50.dat vendor/endroid/qrcode/assets/data/rsc52.dat vendor/endroid/qrcode/assets/data/rsc54.dat vendor/endroid/qrcode/assets/data/rsc56.dat vendor/endroid/qrcode/assets/data/rsc58.dat vendor/endroid/qrcode/assets/data/rsc60.dat vendor/endroid/qrcode/assets/data/rsc62.dat vendor/endroid/qrcode/assets/data/rsc64.dat vendor/endroid/qrcode/assets/data/rsc66.dat vendor/endroid/qrcode/assets/data/rsc68.dat vendor/endroid/qrcode/assets/data/rsc7.dat vendor/endroid/qrcode/assets/font/opensans.ttf vendor/endroid/qrcode/assets/image/b.png vendor/endroid/qrcode/assets/image/d.png vendor/endroid/qrcode/assets/image/logo.png vendor/endroid/qrcode/assets/image/qrv1.png vendor/endroid/qrcode/assets/image/qrv10.png vendor/endroid/qrcode/assets/image/qrv11.png vendor/endroid/qrcode/assets/image/qrv12.png vendor/endroid/qrcode/assets/image/qrv13.png vendor/endroid/qrcode/assets/image/qrv14.png vendor/endroid/qrcode/assets/image/qrv15.png vendor/endroid/qrcode/assets/image/qrv16.png vendor/endroid/qrcode/assets/image/qrv17.png vendor/endroid/qrcode/assets/image/qrv18.png vendor/endroid/qrcode/assets/image/qrv19.png vendor/endroid/qrcode/assets/image/qrv2.png vendor/endroid/qrcode/assets/image/qrv20.png vendor/endroid/qrcode/assets/image/qrv21.png vendor/endroid/qrcode/assets/image/qrv22.png vendor/endroid/qrcode/assets/image/qrv23.png vendor/endroid/qrcode/assets/image/qrv24.png vendor/endroid/qrcode/assets/image/qrv25.png vendor/endroid/qrcode/assets/image/qrv26.png vendor/endroid/qrcode/assets/image/qrv27.png vendor/endroid/qrcode/assets/image/qrv28.png vendor/endroid/qrcode/assets/image/qrv29.png vendor/endroid/qrcode/assets/image/qrv3.png vendor/endroid/qrcode/assets/image/qrv30.png vendor/endroid/qrcode/assets/image/qrv31.png vendor/endroid/qrcode/assets/image/qrv32.png vendor/endroid/qrcode/assets/image/qrv33.png vendor/endroid/qrcode/assets/image/qrv34.png vendor/endroid/qrcode/assets/image/qrv35.png vendor/endroid/qrcode/assets/image/qrv36.png vendor/endroid/qrcode/assets/image/qrv37.png vendor/endroid/qrcode/assets/image/qrv38.png vendor/endroid/qrcode/assets/image/qrv39.png vendor/endroid/qrcode/assets/image/qrv4.png vendor/endroid/qrcode/assets/image/qrv40.png vendor/endroid/qrcode/assets/image/qrv5.png vendor/endroid/qrcode/assets/image/qrv6.png vendor/endroid/qrcode/assets/image/qrv7.png vendor/endroid/qrcode/assets/image/qrv8.png vendor/endroid/qrcode/assets/image/qrv9.png vendor/endroid/qrcode/composer.json vendor/endroid/qrcode/phpunit.xml.dist vendor/endroid/qrcode/src/Exceptions/DataDoesntExistsException.php vendor/endroid/qrcode/src/Exceptions/FreeTypeLibraryMissingException.php vendor/endroid/qrcode/src/Exceptions/ImageFunctionFailedException.php vendor/endroid/qrcode/src/Exceptions/ImageFunctionUnknownException.php vendor/endroid/qrcode/src/Exceptions/ImageSizeTooLargeException.php vendor/endroid/qrcode/src/Exceptions/VersionTooLargeException.php vendor/endroid/qrcode/src/QrCode.php vendor/endroid/qrcode/tests/QrCodeTest.php vendor/pear/auth_sasl/.gitignore vendor/pear/auth_sasl/.travis.yml vendor/pear/auth_sasl/Auth/SASL.php vendor/pear/auth_sasl/Auth/SASL/Anonymous.php vendor/pear/auth_sasl/Auth/SASL/Common.php vendor/pear/auth_sasl/Auth/SASL/CramMD5.php vendor/pear/auth_sasl/Auth/SASL/DigestMD5.php vendor/pear/auth_sasl/Auth/SASL/External.php vendor/pear/auth_sasl/Auth/SASL/Login.php vendor/pear/auth_sasl/Auth/SASL/Plain.php vendor/pear/auth_sasl/Auth/SASL/SCRAM.php vendor/pear/auth_sasl/README.md vendor/pear/auth_sasl/composer.json vendor/pear/auth_sasl/package.xml vendor/pear/auth_sasl/phpunit.xml.dist vendor/pear/console_commandline/.gitignore vendor/pear/console_commandline/.travis.yml vendor/pear/console_commandline/Console/CommandLine.php vendor/pear/console_commandline/Console/CommandLine/Action.php vendor/pear/console_commandline/Console/CommandLine/Action/Callback.php vendor/pear/console_commandline/Console/CommandLine/Action/Counter.php vendor/pear/console_commandline/Console/CommandLine/Action/Help.php vendor/pear/console_commandline/Console/CommandLine/Action/List.php vendor/pear/console_commandline/Console/CommandLine/Action/Password.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreArray.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreFalse.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreFloat.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreInt.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreString.php vendor/pear/console_commandline/Console/CommandLine/Action/StoreTrue.php vendor/pear/console_commandline/Console/CommandLine/Action/Version.php vendor/pear/console_commandline/Console/CommandLine/Argument.php vendor/pear/console_commandline/Console/CommandLine/Command.php vendor/pear/console_commandline/Console/CommandLine/CustomMessageProvider.php vendor/pear/console_commandline/Console/CommandLine/Element.php vendor/pear/console_commandline/Console/CommandLine/Exception.php vendor/pear/console_commandline/Console/CommandLine/MessageProvider.php vendor/pear/console_commandline/Console/CommandLine/MessageProvider/Default.php vendor/pear/console_commandline/Console/CommandLine/Option.php vendor/pear/console_commandline/Console/CommandLine/Outputter.php vendor/pear/console_commandline/Console/CommandLine/Outputter/Default.php vendor/pear/console_commandline/Console/CommandLine/Renderer.php vendor/pear/console_commandline/Console/CommandLine/Renderer/Default.php vendor/pear/console_commandline/Console/CommandLine/Result.php vendor/pear/console_commandline/Console/CommandLine/XmlParser.php vendor/pear/console_commandline/README.rst vendor/pear/console_commandline/composer.json vendor/pear/console_commandline/data/xmlschema.rng vendor/pear/console_commandline/docs/examples/ex1.php vendor/pear/console_commandline/docs/examples/ex2.php vendor/pear/console_commandline/docs/examples/ex2.xml vendor/pear/console_commandline/docs/examples/ex3.php vendor/pear/console_commandline/docs/examples/ex4.php vendor/pear/console_commandline/docs/examples/ex4.xml vendor/pear/console_commandline/docs/examples/ex5.php vendor/pear/console_commandline/docs/examples/ex5.xml vendor/pear/console_commandline/package.xml vendor/pear/console_commandline/tests/AllTests.php vendor/pear/console_commandline/tests/console_commandline_accept.phpt vendor/pear/console_commandline/tests/console_commandline_addargument.phpt vendor/pear/console_commandline/tests/console_commandline_addargument_2.phpt vendor/pear/console_commandline/tests/console_commandline_addcommand.phpt vendor/pear/console_commandline/tests/console_commandline_addcommand_2.phpt vendor/pear/console_commandline/tests/console_commandline_addcommand_3.phpt vendor/pear/console_commandline/tests/console_commandline_addoption.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_1.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_2.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_3.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_4.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_5.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_6.phpt vendor/pear/console_commandline/tests/console_commandline_addoption_errors_7.phpt vendor/pear/console_commandline/tests/console_commandline_bug18682.phpt vendor/pear/console_commandline/tests/console_commandline_fromxmlfile.phpt vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_1.phpt vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_2.phpt vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_error.phpt vendor/pear/console_commandline/tests/console_commandline_fromxmlstring.phpt vendor/pear/console_commandline/tests/console_commandline_options_defaults.phpt vendor/pear/console_commandline/tests/console_commandline_parse_1.phpt vendor/pear/console_commandline/tests/console_commandline_parse_10.phpt vendor/pear/console_commandline/tests/console_commandline_parse_11.phpt vendor/pear/console_commandline/tests/console_commandline_parse_12.phpt vendor/pear/console_commandline/tests/console_commandline_parse_13.phpt vendor/pear/console_commandline/tests/console_commandline_parse_14.phpt vendor/pear/console_commandline/tests/console_commandline_parse_15.phpt vendor/pear/console_commandline/tests/console_commandline_parse_16.phpt vendor/pear/console_commandline/tests/console_commandline_parse_17.phpt vendor/pear/console_commandline/tests/console_commandline_parse_18.phpt vendor/pear/console_commandline/tests/console_commandline_parse_19.phpt vendor/pear/console_commandline/tests/console_commandline_parse_2.phpt vendor/pear/console_commandline/tests/console_commandline_parse_20.phpt vendor/pear/console_commandline/tests/console_commandline_parse_21.phpt vendor/pear/console_commandline/tests/console_commandline_parse_22.phpt vendor/pear/console_commandline/tests/console_commandline_parse_23.phpt vendor/pear/console_commandline/tests/console_commandline_parse_24.phpt vendor/pear/console_commandline/tests/console_commandline_parse_25.phpt vendor/pear/console_commandline/tests/console_commandline_parse_26.phpt vendor/pear/console_commandline/tests/console_commandline_parse_27.phpt vendor/pear/console_commandline/tests/console_commandline_parse_28.phpt vendor/pear/console_commandline/tests/console_commandline_parse_29.phpt vendor/pear/console_commandline/tests/console_commandline_parse_3.phpt vendor/pear/console_commandline/tests/console_commandline_parse_4.phpt vendor/pear/console_commandline/tests/console_commandline_parse_5.phpt vendor/pear/console_commandline/tests/console_commandline_parse_6.phpt vendor/pear/console_commandline/tests/console_commandline_parse_7.phpt vendor/pear/console_commandline/tests/console_commandline_parse_8.phpt vendor/pear/console_commandline/tests/console_commandline_parse_9.phpt vendor/pear/console_commandline/tests/console_commandline_webrequest_1.phpt vendor/pear/console_commandline/tests/console_commandline_webrequest_2.phpt vendor/pear/console_commandline/tests/console_commandline_webrequest_3.phpt vendor/pear/console_commandline/tests/test.xml vendor/pear/console_commandline/tests/tests.inc.php vendor/pear/console_getopt/.gitignore vendor/pear/console_getopt/.travis.yml vendor/pear/console_getopt/Console/Getopt.php vendor/pear/console_getopt/LICENSE vendor/pear/console_getopt/README.rst vendor/pear/console_getopt/composer.json vendor/pear/console_getopt/package.xml vendor/pear/console_getopt/tests/001-getopt.phpt vendor/pear/console_getopt/tests/bug10557.phpt vendor/pear/console_getopt/tests/bug11068.phpt vendor/pear/console_getopt/tests/bug13140.phpt vendor/pear/crypt_gpg/.gitignore vendor/pear/crypt_gpg/.travis.yml vendor/pear/crypt_gpg/Crypt/GPG.php vendor/pear/crypt_gpg/Crypt/GPG/Engine.php vendor/pear/crypt_gpg/Crypt/GPG/Exceptions.php vendor/pear/crypt_gpg/Crypt/GPG/Key.php vendor/pear/crypt_gpg/Crypt/GPG/KeyGenerator.php vendor/pear/crypt_gpg/Crypt/GPG/PinEntry.php vendor/pear/crypt_gpg/Crypt/GPG/ProcessControl.php vendor/pear/crypt_gpg/Crypt/GPG/ProcessHandler.php vendor/pear/crypt_gpg/Crypt/GPG/Signature.php vendor/pear/crypt_gpg/Crypt/GPG/SignatureCreationInfo.php vendor/pear/crypt_gpg/Crypt/GPG/SubKey.php vendor/pear/crypt_gpg/Crypt/GPG/UserId.php vendor/pear/crypt_gpg/Crypt/GPGAbstract.php vendor/pear/crypt_gpg/LICENSE vendor/pear/crypt_gpg/README.md vendor/pear/crypt_gpg/composer.json vendor/pear/crypt_gpg/data/pinentry-cli.xml vendor/pear/crypt_gpg/package.php vendor/pear/crypt_gpg/package.xml vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentry vendor/pear/crypt_gpg/tests/DecryptAndVerifyTest.php vendor/pear/crypt_gpg/tests/DecryptTest.php vendor/pear/crypt_gpg/tests/DeletePrivateKeyTest.php vendor/pear/crypt_gpg/tests/DeletePublicKeyTest.php vendor/pear/crypt_gpg/tests/EncryptAndSignTest.php vendor/pear/crypt_gpg/tests/EncryptTest.php vendor/pear/crypt_gpg/tests/ExceptionsTest.php vendor/pear/crypt_gpg/tests/ExportPrivateKeyTest.php vendor/pear/crypt_gpg/tests/ExportPublicKeyTest.php vendor/pear/crypt_gpg/tests/GeneralTest.php vendor/pear/crypt_gpg/tests/GetFingerprintTest.php vendor/pear/crypt_gpg/tests/GetKeysTest.php vendor/pear/crypt_gpg/tests/ImportKeyTest.php vendor/pear/crypt_gpg/tests/KeyGeneratorTest.php vendor/pear/crypt_gpg/tests/KeyTest.php vendor/pear/crypt_gpg/tests/SignTest.php vendor/pear/crypt_gpg/tests/SignatureCreationInfoTest.php vendor/pear/crypt_gpg/tests/SignatureTest.php vendor/pear/crypt_gpg/tests/SubKeyTest.php vendor/pear/crypt_gpg/tests/TestCase.php vendor/pear/crypt_gpg/tests/UserIdTest.php vendor/pear/crypt_gpg/tests/VerifyTest.php vendor/pear/crypt_gpg/tests/config.php.dist vendor/pear/crypt_gpg/tests/data-files/testDecryptFile.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptFileDual.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptFileDualOnePassphrase.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptFileKeyNotFoundException.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptFileNoPassphrase.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptFileToString.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFile.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDual.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDualOnePassphrase.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDualSignatories.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileNoPassphrase.asc vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileToString.asc vendor/pear/crypt_gpg/tests/data-files/testFileEmpty.plain vendor/pear/crypt_gpg/tests/data-files/testFileMedium.plain vendor/pear/crypt_gpg/tests/data-files/testFileSmall.plain vendor/pear/crypt_gpg/tests/data-files/testImportKeyFile_private.asc vendor/pear/crypt_gpg/tests/data-files/testImportKeyFile_public.asc vendor/pear/crypt_gpg/tests/data-files/testVerifyFileClearsignedData.asc vendor/pear/crypt_gpg/tests/data-files/testVerifyFileDualClearsignedData.asc vendor/pear/crypt_gpg/tests/data-files/testVerifyFileDualNormalSignedData.asc vendor/pear/crypt_gpg/tests/data-files/testVerifyFileNormalSignedData.asc vendor/pear/crypt_gpg/tests/phpunit.xml vendor/pear/crypt_gpg/tools/build-keyring.php vendor/pear/crypt_gpg/tools/build-keyring.sh vendor/pear/crypt_gpg/tools/dump-keyring.php vendor/pear/crypt_gpg/tools/test-file-medium vendor/pear/crypt_gpg/tools/test-file-small vendor/pear/mail_mime/.gitignore vendor/pear/mail_mime/.travis.yml vendor/pear/mail_mime/Mail/mime.php vendor/pear/mail_mime/Mail/mimePart.php vendor/pear/mail_mime/README vendor/pear/mail_mime/composer.json vendor/pear/mail_mime/package.xml vendor/pear/mail_mime/scripts/phail.php vendor/pear/mail_mime/tests/Makefile vendor/pear/mail_mime/tests/class-filename.phpt vendor/pear/mail_mime/tests/encoding_case.phpt vendor/pear/mail_mime/tests/headers_with_mbstring.phpt vendor/pear/mail_mime/tests/headers_without_mbstring.phpt vendor/pear/mail_mime/tests/sleep_wakeup_EOL-bug3488-part1.phpt vendor/pear/mail_mime/tests/sleep_wakeup_EOL-bug3488-part2.phpt vendor/pear/mail_mime/tests/test_Bug_10596_1.phpt vendor/pear/mail_mime/tests/test_Bug_10816_1.phpt vendor/pear/mail_mime/tests/test_Bug_10999_1.phpt vendor/pear/mail_mime/tests/test_Bug_11381.phpt vendor/pear/mail_mime/tests/test_Bug_11731.phpt vendor/pear/mail_mime/tests/test_Bug_12165.phpt vendor/pear/mail_mime/tests/test_Bug_12385_1.phpt vendor/pear/mail_mime/tests/test_Bug_12411.phpt vendor/pear/mail_mime/tests/test_Bug_12466.phpt vendor/pear/mail_mime/tests/test_Bug_13032.phpt vendor/pear/mail_mime/tests/test_Bug_13444.phpt vendor/pear/mail_mime/tests/test_Bug_13962.phpt vendor/pear/mail_mime/tests/test_Bug_14529.phpt vendor/pear/mail_mime/tests/test_Bug_14779.phpt vendor/pear/mail_mime/tests/test_Bug_14780.phpt vendor/pear/mail_mime/tests/test_Bug_15320.phpt vendor/pear/mail_mime/tests/test_Bug_16539.phpt vendor/pear/mail_mime/tests/test_Bug_17025.phpt vendor/pear/mail_mime/tests/test_Bug_17175.phpt vendor/pear/mail_mime/tests/test_Bug_18083.phpt vendor/pear/mail_mime/tests/test_Bug_18772.phpt vendor/pear/mail_mime/tests/test_Bug_19497.phpt vendor/pear/mail_mime/tests/test_Bug_20226.phpt vendor/pear/mail_mime/tests/test_Bug_20273.phpt vendor/pear/mail_mime/tests/test_Bug_20563.phpt vendor/pear/mail_mime/tests/test_Bug_20564.phpt vendor/pear/mail_mime/tests/test_Bug_21098.phpt vendor/pear/mail_mime/tests/test_Bug_21205.phpt vendor/pear/mail_mime/tests/test_Bug_21206.phpt vendor/pear/mail_mime/tests/test_Bug_21255.phpt vendor/pear/mail_mime/tests/test_Bug_3513_1.phpt vendor/pear/mail_mime/tests/test_Bug_3513_2.phpt vendor/pear/mail_mime/tests/test_Bug_3513_3.phpt vendor/pear/mail_mime/tests/test_Bug_7561_1.phpt vendor/pear/mail_mime/tests/test_Bug_8386_1.phpt vendor/pear/mail_mime/tests/test_Bug_8541_1.phpt vendor/pear/mail_mime/tests/test_Bug_9722_1.phpt vendor/pear/net_idna2/.gitignore vendor/pear/net_idna2/.travis.yml vendor/pear/net_idna2/Net/IDNA2.php vendor/pear/net_idna2/Net/IDNA2/Exception.php vendor/pear/net_idna2/Net/IDNA2/Exception/Nameprep.php vendor/pear/net_idna2/README.md vendor/pear/net_idna2/composer.json vendor/pear/net_idna2/package.xml vendor/pear/net_idna2/phpunit.xml.dist vendor/pear/net_idna2/tests/Net_IDNA2Test.php vendor/pear/net_idna2/tests/draft-josefsson-idn-test-vectors.php vendor/pear/net_sieve/.gitignore vendor/pear/net_sieve/.travis.yml vendor/pear/net_sieve/Sieve.php vendor/pear/net_sieve/composer.json vendor/pear/net_sieve/package.xml vendor/pear/net_sieve/tests/SieveTest.php vendor/pear/net_sieve/tests/config.php.dist vendor/pear/net_sieve/tests/largescript.siv vendor/pear/net_smtp/.gitignore vendor/pear/net_smtp/.travis.yml vendor/pear/net_smtp/LICENSE vendor/pear/net_smtp/Net/SMTP.php vendor/pear/net_smtp/README.rst vendor/pear/net_smtp/composer.json vendor/pear/net_smtp/docs/docutils.conf vendor/pear/net_smtp/docs/docutils.css vendor/pear/net_smtp/docs/guide.txt vendor/pear/net_smtp/examples/basic.php vendor/pear/net_smtp/package.xml vendor/pear/net_smtp/phpdoc.sh vendor/pear/net_smtp/tests/auth.phpt vendor/pear/net_smtp/tests/basic.phpt vendor/pear/net_smtp/tests/config.php.dist vendor/pear/net_smtp/tests/quotedata.phpt vendor/pear/net_socket/.gitignore vendor/pear/net_socket/.travis.yml vendor/pear/net_socket/LICENSE vendor/pear/net_socket/Net/Socket.php vendor/pear/net_socket/README.md vendor/pear/net_socket/composer.json vendor/pear/net_socket/package.xml vendor/pear/net_socket/phpunit.xml.dist vendor/pear/pear-core-minimal/README.rst vendor/pear/pear-core-minimal/composer.json vendor/pear/pear-core-minimal/src/OS/Guess.php vendor/pear/pear-core-minimal/src/PEAR.php vendor/pear/pear-core-minimal/src/PEAR/Error.php vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php vendor/pear/pear-core-minimal/src/System.php vendor/pear/pear_exception/.gitignore vendor/pear/pear_exception/.travis.yml vendor/pear/pear_exception/LICENSE vendor/pear/pear_exception/PEAR/Exception.php vendor/pear/pear_exception/composer.json vendor/pear/pear_exception/package.xml vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php vendor/roundcube/plugin-installer/.gitignore vendor/roundcube/plugin-installer/README.md vendor/roundcube/plugin-installer/composer.json vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.php vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh
diffstat 2520 files changed, 203418 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.htaccess	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+# WARNING: For PHP 7 the module name in the line below need to be modified!
+<IfModule mod_php5.c>
+php_flag    display_errors  Off
+php_flag    log_errors      On
+# php_value    error_log    logs/errors
+
+php_value   upload_max_filesize   5M
+php_value   post_max_size         6M
+php_value   memory_limit          64M
+
+php_flag    zlib.output_compression     Off
+php_flag    suhosin.session.encrypt     Off
+
+#php_value   session.cookie_path     /
+#php_value   session.hash_function   sha256
+php_flag    session.auto_start       Off
+php_value   session.gc_maxlifetime   21600
+php_value   session.gc_divisor       500
+php_value   session.gc_probability   1
+</IfModule>
+
+<IfModule mod_rewrite.c>
+Options +SymLinksIfOwnerMatch
+RewriteEngine On
+RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico
+
+# security rules:
+# - deny access to files not containing a dot or starting with a dot
+#   in all locations except installer directory
+RewriteRule ^(?!installer|\.well-known\/|[a-zA-Z0-9]{16})(\.?[^\.]+)$ - [F]
+# - deny access to some locations
+RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F]
+# - deny access to composer binaries
+RewriteRule ^/vendor\/bin\/.* - [F]
+# - deny access to some documentation files
+RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml|jsdeps.json|Dockerfile)$ - [F]
+</IfModule>
+
+<IfModule mod_deflate.c>
+SetOutputFilter DEFLATE
+</IfModule>
+
+<IfModule mod_expires.c>
+ExpiresActive On
+ExpiresDefault "access plus 1 month"
+</IfModule>
+
+FileETag MTime Size
+
+<IfModule mod_autoindex.c>
+Options -Indexes
+</ifModule>
+
+<IfModule mod_headers.c>
+# Disable page indexing
+Header set X-Robots-Tag "noindex, nofollow"
+
+# replace 'append' with 'merge' for Apache version 2.2.9 and later
+#Header append Cache-Control public env=!NO_CACHE
+
+# Optional security header
+# Only increased security if the browser support those features
+# Be careful! Testing is required! They should be adusted to your intallation / user environment
+
+# HSTS - HTTP Strict Transport Security
+#Header always set Strict-Transport-Security "max-age=31536000; preload" env=HTTPS
+
+# HPKP - HTTP Public Key Pinning
+# Only template - fill with your values
+#Header always set Public-Key-Pins "max-age=3600; report-uri=\"\"; pin-sha256=\"\"; pin-sha256=\"\"" env=HTTPS
+
+# X-Xss-Protection
+# This header is used to configure the built in reflective XSS protection found in Internet Explorer, Chrome and Safari (Webkit). 
+#Header set X-XSS-Protection "1; mode=block"
+
+# X-Frame-Options
+# The X-Frame-Options header (RFC), or XFO header, protects your visitors against clickjacking attacks
+# Already set by php code! Do not activate both options
+#Header set X-Frame-Options SAMEORIGIN
+
+# X-Content-Type-Options
+# It prevents Google Chrome and Internet Explorer from trying to mime-sniff the content-type of a response away from the one being declared by the server.
+#Header set X-Content-Type-Options: "nosniff"
+
+# CSP - Content Security Policy
+# for better privacy/security ask browsers to not set the Referer
+# more flags for script, stylesheets and images available, read RFC for more information
+#Header set Content-Security-Policy "referrer no-referrer"
+</IfModule>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CHANGELOG	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2522 @@
+CHANGELOG Roundcube Webmail
+===========================
+
+RELEASE 1.3.3
+-------------
+- Fix decoding of mailto: links with + character in HTML messages (#6020)
+- Fix false reporting of failed upgrade in installto.sh (#6019)
+- Fix file disclosure vulnerability caused by insufficient input validation [CVE-2017-16651] (#6026)
+- Fix mangled non-ASCII characters in links in HTML messages (#6028)
+
+RELEASE 1.3.2
+-------------
+- Improve detection for Egde browser and add pointer event support (#5922)
+- Fix bug where pink image was used instead of a thumbnail when image resize fails (#5933)
+- Fix so files size/count limit is verified (client-side) also on drag-n-drop uploads (#5940)
+- Fix invalid template loading on a message error in preview frame (#5941)
+- Fix bug where HTML messages could have been rendered empty on some systems (#5957)
+- Fix wording of "Mark previewed messages as read" to "Mark messages as read" (#5952)
+- Enigma: Fix decryption of messages encoded with non-ascii charset (#5962)
+- Fix missing cursor in HTML editor on mail reply (#5969)
+- Fix (again) bug where image data URIs in css style were treated as evil/remote in mail preview (#5580)
+- Fix bug where mail search could return empty result on servers without SORT capability (#5973)
+- Fix bug where assets_path wasn't added to some watermark frames
+- Fix so untagged COPYUID responses are also supported according to RFC6851 (#5982)
+- Fix issue caused by non-default session.cookie_lifetime setting (#5961)
+- Fix Edge encoding bug when pasting text into the HTML editor, update to TinyMCE 4.5.8 (#5885)
+- Fix handling of unknown Content-Disposition type (#6002)
+- Fix truncated folder name on messages list in multi-folder mode, for folders with non-ascii characters (#6004)
+- Fix bug where removing the last subfolder did not hide toggle button on its parent record (#6007)
+- Fix bug where ghost messages could be added to the list after fast delete (#5941)
+
+RELEASE 1.3.1
+-------------
+- Don't ignore (global) userlogins/sendmail logs in per_user_logging mode
+- Add Preferences > Mailbox View > Main Options > Layout (#5829)
+- Password: Fix compatibility with PHP 7+ in cpanel_webmail driver (#5820)
+- Managesieve: Fix parsing dot-staffed lines in multiline text (#5838)
+- Managesieve: Fix AM/PM suffix in vacation time selectors
+- Managesieve: Fix bug where 'exists' operator was reset to 'contains' (#5899)
+- Remove non-printable characters from filenames on download/display (#5880)
+- Fix decoding non-ascii attachment names from TNEF attachments (#5646, #5799)
+- Fix uninitialized string offset in rcube_utils::bin2ascii() and make sure rcube_utils::random_bytes() result has always requested length (#5788)
+- Fix bug where HTML messages with @media styles could moddify style of page body (#5811)
+- Fix style issue on selected and unfocused message that is part of a thread (#5798)
+- Fix bug where a.button style from managesieve plugin could impact other elements (#5800)
+- Fix position of selected icon for (Mailvelope) Encrypt button
+- Fix fatal error when using DMY- or MDY-based date format in PostgreSQL (#5808)
+- Fix bug where errors were not printed when using bin/update.sh (#5834)
+- Fix PHP 7.2 warnings on count() use (#5845)
+- Fix bug where Chrome could not upload the same file that was selected before (#5854)
+- Fix duplicate messages on the list after deleting messages on the next to the last page (#5862)
+- Fix bug where messages count was not updated after delete when imap_cache is set (#5872)
+- Fix potential XSS vulnerability with malformed HTML message markup
+- Fix sending message with "Too many public recipients" dialog buttons (#5924)
+- Bring back double-click behavior on the message list which was removed in 1.3.0 (#5823)
+- Enigma: Fix decrypting an encrypted+signed message when signature verification fails (#5914)
+
+RELEASE 1.3.0
+-------------
+- Update to TinyMCE 4.5.7
+- Fix bug where invalid recipients could be silently discarded (#5739)
+- Fix conflict with _gid cookie of Google Analytics (#5748)
+- Print error from CLI scripts when system/exec function is disabled (#5744)
+- Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747)
+- Fix bug where it wasn't possible to scroll folders list in Edge (#5750)
+- Fix folders list sorting on Windows - if php-intl is available (#5732)
+- Fix addressbook searching by gender (#5757)
+- Fix prevention from using % and * characters in folder name (#5762)
+- Fix POST parameter reflection in default_charset selector (#5768)
+- Enigma: Fix compatibility with assets_dir
+- Managesieve: Skip redundant LISTSCRIPTS command
+- Fix SQL syntax error on MariaDB 10.2 (#5774)
+- Fix bug where zipdownload ignored files with the same name (#5777)
+- Fix bug where it wasn't possible to set timezone to auto-detected value (#5782)
+
+RELEASE 1.3-rc
+--------------
+- "Flattened" the larry theme: fresher look by removing shadows and gradients
+- Support logging to php://stdout (#5721)
+- Add support for DelSp=Yes in format=flowed messages (#5702)
+- Update to jQuery 3.2.1
+- Update to TinyMCE 4.5.6
+- Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678)
+- Enigma: Always use detached signatures (#5624)
+- Enigma: Fix handling of messages with nested PGP encrypted parts (#5634)
+- Minimize unwanted message loading in preview frame on drag (#5616)
+- Fix failing database schema check in all engines except mysql (#5730)
+- Fix autocomplete popup closing with click outside the input, don't handle Tab key as Enter (#5606)
+- Fix jsdeps.json synchronization on update, warn about missing requirements of install-jsdeps.sh (#5598)
+- Fix missing thread expand icon on search result in widescreen mode (#5613)
+- Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580)
+- Fix bug where external content in src attribute of input/video tags was not secured (#5583)
+- Fix PHP error on update of a contact with multiple email addresses when using PHP 7.1 (#5587)
+- Fix bug where mail content frame couldn't be reset in some corner cases (#5608)
+- Fix bug where some classic skin images were not displayed in IE/Edge (#5614)
+- Fix bug where signature couldn't be added above the quote in Firefox 51 (#5628)
+- Fix regression where groups with email address were resolved to its members' addresses
+- Fix update of group name in the contacts list header on group rename (#5648)
+- Add rewrite rule to disable access to /vendor/bin folder in .htaccess (#5630)
+- Fix bug where it was too easy accidentally move a folder when using the subscription checkbox (#5655)
+- Managesieve: Fix parser issue with empty lines between comments (#5657)
+- Managesieve: Fix possible defect in handling \r\n in scripts (#5685)
+- Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610)
+- Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820]
+- Fix bug where settings/upload.inc could not be used by plugins (#5694)
+- Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713)
+- Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695)
+- Fix undesired effects when postgres database uses different timezone than PHP host (#5708)
+- Installer: Fix DB schema initialization on MS SQL Server
+- Fix bug where base_dn setting was ignored inside group_filters (#5720)
+- Password: Fix security issue in virtualmin and sasl drivers [CVE-2017-8114]
+
+RELEASE 1.3-beta
+----------------
+- Nicely handle contact deletion on contact edit (#5522)
+- vcard_attachments: Add possibility to attach contact vCard to composed message (#4997)
+- Preserve message internal/received date on import in mbox format (#5559)
+- Zipdownload: Fix date format in mbox "From line"
+- Possibility to display QR code for contacts data (#5030)
+- Added identicon plugin
+- Widescreen layout aka three column view (#5093)
+- Unify automatic marking as \Seen in preview pane, full-page and extwin views (#5071)
+- Disable double-click on the list when preview pane is on (#5199)
+- Support hostname and hostname:port in force_https option (#5511)
+- Support ALLOW-FROM in x_frame_options (#5122)
+- Allow to omit a subject when sending an email (#5068)
+- Warn about too many disclosed recipients in composed email [max_disclosed_recipients] (#5132)
+- identity_select: Support Received header (#5085)
+- Plugin API: Added get_compose_responses hook (#5457)
+- Display error when trying to upload more files than specified in max_file_uploads (#5483)
+- Add missing sql upgrade file for 'ip' column resize in session table (#5465)
+- Do not show inline images of unsupported mimetype (#5463)
+- Password: Added replacement variables support in password_pop_host (#5539)
+- Password: Don't store passwords in temp files when using dovecotpw (#5531)
+- Password: Added LDAP PPolicy driver (#5364)
+- Password: Added cpanel_webmail driver (#5549)
+- Password: Added possibility to nicely redirect from other plugins on password expiration (#5468)
+- Implement separate action to mark all messages in a folder as \Seen (#5006)
+- Implement marking as \Seen in all folders or in a folder and its subfolders (#5076)
+- Archive: Don't reload messages list when it's not needed (#5225)
+- Archive: Add option to automatically mark archived messages as \Seen (#5142)
+- Improve randomness of password salts and random hashes (#5266)
+- Password/cPanel: Add support for hash authentication and reseller accounts (#5252)
+- Support host-specific imap_conn_options/smtp_conn_options/managesieve_conn_options (#5136)
+- Center and scale images in attachment preview frame (#5421)
+- Added max_message_size option enforced when attaching files to a composed message (#4993)
+- Added Search button in quick search menus (#5312)
+- Implement "one click" attachment/messages/photo upload (#5024)
+- Squirrelmail_usercopy: Add option to define character set of data files
+- Removed useless 'created' column from 'session' table (#5389)
+- Dropped legacy browsers support (#5167)
+    - Removed legacy_browser plugin
+    - Removed hacks for IE < 10
+    - Update to jQuery 3.1.1 and jQuery-UI 1.12.0
+    - compile .min.js files with ECMASCRIPT5 option
+- Require PHP >= 5.4
+- Add possibility to preview and download attachments in mail compose (#5053)
+- Add possibility to rename attachments in mail compose (#4996)
+- Remove backward compatibility "layer" of bc.php (#4902)
+- Support WEBP images in mail messages (#5362)
+- Support MathML in HTML message preview (#5182)
+- Rename Addressbook to Contacts (#5233)
+- Remove PHP mail() support, smtp_server is required now (#5340)
+- Display full message subject in onmouseover on truncated subject in mail view (#5346)
+- Enigma: Support GnuPG 2.1 (#5313)
+- Enigma: Support key generation for multiple identities (#5383)
+- Enigma: Import keys from key-server(s) (#5286)
+- Enigma: Search missing public keys on a key-server in mail compose (#5286)
+- Enigma: Delete user keys when using deluser.sh script
+- Enigma: Fix redundant list-secret-keys/list-public-keys calls on signing/encryption
+- Enigma: Implement PGP encryption and signing in one go (#5302)
+- Enigma: Display signature verification status for encrypted+signed messages (#5302)
+- Display different attachment icon on encrypted messages
+- Display different confirmation text when moving messages to Trash (#5220)
+- Indicate that a collapsed thread has flagged children (#5013)
+- Implemented message/rfc822 attachment preview
+- Update to jsTimezoneDetect 1.0.6
+- Managesieve: Add (optional) RAW script editor (#5414)
+- Managesieve: Add option to automatically set vacation :from address (#5428)
+- Managesieve: Support 'string' test from variables extension [RFC 5229] (#5248)
+- Managesieve: Support 'duplicate' extension [RFC 7352]
+- Managesieve: Unhide advanced rule controls if there are inputs with errors
+- Managesieve: Display warning message when filter form contains errors
+- Control search engine crawlers via X-Robots-Tag header instead of <meta> and robots.txt (#5098)
+- Fixed redundancy in sql caching system and compatibility with Galera Cluster (#5439)
+    - Removed redundant 'created' column from cache and cache_shared tables
+    - Removed use of redundant data records
+    - Added missing primary keys (dictionary, cache, cache_shared tables)
+- Fix so templating system does not mess with external (e.g. email) content (#5499)
+- Fix redundant keep-alive/refresh after session error on compose page (#5500)
+- Managesieve: Fix handling of scripts with nested rules (#5540)
+- Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544)
+- Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555)
+- Fix adding images to new identity signatures
+- Fix rsync error handling in installto.sh script (#5562)
+- Fix some advanced search issues with multiple addressbooks (#5572)
+- Fix so group/addressbook selection is retained on page refresh
+
+RELEASE 1.2.3
+-------------
+- Searching in both contacts and groups when LDAP addressbook with group_filters option is used
+- Fix vulnerability in handling of mail()'s 5th argument
+- Fix To: header encoding in mail sent with mail() method (#5475)
+- Fix flickering of header topline in min-mode (#5426)
+- Fix bug where folders list would scroll to top when clicking on subscription checkbox (#5447)
+- Fix decoding of GB2312/GBK text when iconv is not installed (#5448)
+- Fix regression where creation of default folders wasn't functioning without prefix (#5460)
+- Enigma: Fix bug where last records on keys list were hidden (#5461)
+- Enigma: Fix key search with keyword containing non-ascii characters (#5459)
+- Fix bug where deleting folders with subfolders could fail in some cases (#5466)
+- Fix bug where IMAP password could be exposed via error message (#5472)
+- Fix bug where it wasn't possible to store more that 2MB objects in memcache/apc,
+  Added memcache_max_allowed_packet and apc_max_allowed_packet settings (#5452)
+- Fix "Illegal string offset" warning in rcube::log_bug() on PHP 7.1 (#5508)
+- Fix storing "empty" values in rcube_cache/rcube_cache_shared (#5519)
+- Fix missing content check when image resize fails on attachment thumbnail generation (#5485)
+- Fix displaying attached images with wrong Content-Type specified (#5527)
+
+RELEASE 1.2.2
+-------------
+- Enigma: Add possibility to configure gpg-agent binary location (enigma_pgp_agent)
+- Enigma: Fix signature verification with some IMAP servers, e.g. Gmail, DBMail (#5371)
+- Enigma: Make recipient key searches case-insensitive (#5434)
+- Fix regression in resizing JPEG images with Imagick (#5376)
+- Managesieve: Fix parsing of vacation date-time with non-default date_format (#5372)
+- Use SymLinksIfOwnerMatch in .htaccess instead of FollowSymLinks disabled on some hosts for security reasons (#5370)
+- Wash position:fixed style in HTML mail for better security (#5264)
+- Fix bug where memcache_debug didn't work for session operations
+- Fix bug where Message-ID domain part was tied to username instead of current identity (#5385)
+- Fix bug where blocked.gif couldn't be attached to reply/forward with insecure content
+- Fix E_DEPRECATED warning when using Auth_SASL::factory() (#5401)
+- Fix bug where names of downloaded files could be malformed when derived from the message subject (#5404)
+- Fix so "All" messages selection is resetted on search reset (#5413)
+- Fix bug where folder creation could fail if personal namespace contained more than one entry (#5403)
+- Fix error causing empty INBOX listing in Firefox when using an URL with user:password specified (#5400)
+- Fix PHP warning when handling shared namespace with empty prefix (#5420)
+- Fix so folders list is scrolled to the selected folder on page load (#5424)
+- Fix so when moving to Trash we make sure the folder exists (#5192)
+- Fix displaying size of attachments with zero size
+- Fix so "Action disabled" error uses more appropriate 404 code (#5440)
+
+RELEASE 1.2.1
+-------------
+- Update TinyMCE to version 4.3.13 (#5309)
+- Fix bug where errors could have been not logged when per_user_logging=true
+- Fix bug where message list columns could be in wrong order after column drag-n-drop and list sorting
+- Fix so minified publickey.js (with cache-buster) is used when available (#5254)
+- Fix (replace) application/x-tar file extension test as it might not exist in nginx config (#5253)
+- Fix PHP warning when password_hosts is set, but is not an array (#5260)
+- Fix redundant keep-alive requests when session_lifetime is greater than ~20000 (#5273)
+- Fix so subfolders of INBOX can be set as Archive (#5274)
+- Fix bug where multi-folder search could choose a wrong folder in "this and subfolders" scope (#5282)
+- Fix bug where multi-folder search didn't work for unsubscribed INBOX (#5259)
+- Fix bug where "no body" alert could be displayed when sending mailvelope email
+- Enigma: Fix keys import from inside of an encrypted message (#5285)
+- Enigma: Fix malformed signed messages with force_7bit=true (#5292)
+- Enigma: Add possibility to configure gpg binary location (enigma_pgp_binary)
+- Enigma: Add possibility to export private keys (#5321)
+- Fix searching by email address in contacts with multiple addresses (#5291)
+- Fix handling of --delete argument in moduserprefs.sh script (#5296)
+- Workaround PHP issue by calling closelog() on script shutdown when using log_driver=syslog (#5289)
+- Fix so upgrade script makes sure program/lib directory does not contain old libraries (#5287)
+- Fix subscription checkbox state on error in folder subscribe/unsubscribe action (#5243)
+- Fix bug where microsecond format in logged date didn't work in some cases
+- Fix conflict in new_user_dialog and password_force_new_user settings (#5275)
+- Don't create multipart/alternative messages with empty text/plain part (#5283)
+- Use contact_search_name format in popup on results in compose contacts search
+- Fix handling of 'mailto' and 'error' arguments in message_before_send hook (#5347)
+- Fix missing localization of HTML editor when assets_dir != INSTALL_PATH
+- Fix handling of blockquote tags with mixed case on html2text conversion (#5363)
+- Fix javascript errors in IE on page with iframe that points to another domain
+
+RELEASE 1.2.0
+-------------
+- Enigma: Added enigma_debug option
+- Fix message list multi-select/deselect issue (#5219)
+- Fix bug where getting HTML editor content could steal focus from other form controls (#5223)
+- Fix bug where contact search menu fields where always unchecked in Larry skin
+- Fix autoloading of 'html' class
+- Fix bug where Encrypt button appears when switching editor to HTML (#5235)
+- Fix XSS issue in href attribute on area tag (#5240)
+
+RELEASE 1.2-rc
+--------------
+- Managesieve: Refactored script parser to be 100x faster
+- Enigma: added option to force users to use signing/encryption
+- Enigma: Added option to attach public keys to sent mail (#5152)
+- Enigma: Handle messages with text before an encrypted block (#5149)
+- Enigma: Handle encrypted/signed content inside message/rfc822 attachments
+- Enigma: Fix missing html/plain switch on multipart/signed messages (#4963)
+- Enigma: Disable format=flowed for signed plain text messages (#4960)
+- Enigma: Fix handling of encrypted + signed messages (#4950)
+- Enigma: Fix invalid boundary use in signed messages structure
+- Enable use of TLSv1.1 and TLSv1.2 for IMAP (#4955)
+- Save copy of original .htaccess file when using installto.sh script (#4947)
+- Fix regression where some message attachments could be missing on edit/forward (#4939)
+- Fix regression in displaying contents of message/rfc822 parts (#4937)
+- Fix handling of message/rfc822 attachments on replies and forwards (#4938)
+- Fix PDF support detection in Firefox > 19 (#4941)
+- Fix path traversal vulnerability in setting a skin [CVE-2015-8770] (#4945)
+- Fix so drag-n-drop of text (e.g. recipient addresses) on compose page actually works (#4944)
+- Fix .htaccess rewrite rules to not block .well-known URIs (#4943)
+- Fix mail view scaling on iOS (#4915)
+- Fix PHP7 warning "session_start(): Session callback expects true/false return value" (#4948)
+- Fix XSS issue in SVG images handling [CVE-2015-8864, CVE-2016-4068] (#4949)
+- Fix missing language name in "Add to Dictionary" request in HTML mode (#4951)
+- Fix (again) security issue in DBMail driver of password plugin [CVE-2015-2181] (#4958)
+- Fix bug where Archive/Junk buttons were not active after page jump with select=all mode (#4961)
+- Fix bug in long recipients list parsing for cases where recipient name contained @-char (#4964)
+- Plugin API: Added addressbook_export hook
+- Fix additional_message_headers plugin compatibility with Mail_Mime >= 1.9 (#4966)
+- Hide DSN option in Preferences when smtp_server is not used (#4967)
+- Fix handling of body parameter in mail compose request
+- Protect download urls against CSRF using unique request tokens [CVE-2016-4069] (#4957)
+- newmail_notifier: Refactor desktop notifications
+- Fix so contactlist_fields option can be set via config file
+- Fix so SPECIAL-USE assignments are forced only until user sets special folders (#4782)
+- Fix performance in reverting order of THREAD result
+- Fix converting mail addresses with @www. into mailto links (#5197)
+
+RELEASE 1.2-beta
+----------------
+- Update TinyMCE to version 4.2
+- Added support for Redis session handler
+- Removed some deprecated methods: https://github.com/roundcube/roundcubemail/commit/454b0b1c
+- Remove backward compatibility "layer" of bc.php (#4902)
+- Add possibility to define date format in write operations for ldap attributes (#3956)
+- Display attachment size in compose (#1329)
+- Added possibility to drag-n-drop attachments from mail preview to compose window
+- Implemented mail messages searching with predefined date interval
+- PGP encryption support via Mailvelope integration
+- PGP encryption support via Enigma plugin
+- PHP7 compatibility fixes (#4836)
+- Security: Added brute-force attack prevention via login rate limit (#4922)
+- Security: Added options to validate username/password on logon (#4884)
+- Security: Improve randomness of security tokens (#4899)
+- Security: Use random security tokens instead of hashes based on encryption key (#4829)
+- Security: Improved encrypt/decrypt methods with option to choose the cipher_method (#4492)
+- Make optional adding of standard signature separator - sig_separator (#3276)
+- Optimize folder_size() on Cyrus IMAP by using special folder annotation (#4894)
+- Make optional hidding of folders with name starting with a dot - imap_skip_hidden_folders (#4870)
+- Add option to enable HTML editor always, except when replying to plain text messages (#4352)
+- Emoticons: Added option to switch on/off emoticons in compose editor (#2076)
+- Emoticons: Added option to switch on/off emoticons in plain text messages
+- Emoticons: All emoticons-related functionality is handled by the plugin now
+- Installer: Add button to save generated config file in system temp directory (#3553)
+- Remove common subject prefixes Re:, Re[x]:, Re-x: on reply (#4882)
+- Added GSSAPI/Kerberos authentication plugin - krb_authentication
+- Password: Allow temporarily disabling the plugin functionality with a notice
+- Require Mbstring and OpenSSL extensions (#5166)
+- Add --config and --type options to moduserprefs.sh script (#4651)
+- Implemented memcache_debug and apc_debug options
+- Installer: Remove system() function use (#4695)
+- Password plugin: Added 'kpasswd' driver by Peter Allgeyer
+- Add initdb.sh to create database from initial.sql script with prefix support (#4722)
+- Plugin API: Added disabled_plugins an disabled_buttons options in html_editor hook
+- Plugin API: Added html2text hook
+- Plugin API: Added message_part_body hook
+- Plugin API: Added message_ready hook
+- Plugin API: Add special onload() method to execute plugin actions before startup (session and GUI initialization)
+- Implemented UI element to jump to specified page of the messages list (#1677)
+- Fix searching of contacts to allow remote images for known senders (#4886)
+- Fix bug where clicking date column with 'arrival' sorting would switch to sorting by 'date' (#4690)
+- Fix bug where message content could overlap attachments list in Larry skin (#4876)
+- Fix so microseconds macro (u) in log_date_format works (#4855)
+- Fix so unrecognized TNEF attachments are displayed on the list of attachments (#5138)
+- Fix so database_attachments::cleanup() does not remove attachments from other sessions (#4907)
+- Fix responses list update issue after response name change (#4917)
+- Fix bug where message preview was unintentionally reset on check-recent action (#4921)
+- Fix bug where HTML messages with invalid/excessive css styles couldn't be displayed (#4905)
+- Fix redundant blank lines when using HTML and top posting (#4927)
+- Fix redundant blank lines on start of text after html to text conversion (#4928)
+- Fix HTML sanitizer to skip <!-- node type X --> in output (#4932)
+- Fix invalid LDAP query in ACL user autocompletion (#4934)
+
+RELEASE 1.1.3
+-------------
+- Fix closing of nested menus (#4854)
+- Fix so E_DEPRECATED errors from PEAR libs are ignored by error_reporting change (#4770)
+- Fix compatibility with PHP 5.3 in rcube_ldap class (#4842)
+- Get rid of Mail_mimeDecode package dependency (#4836)
+- Fix "Importing..." message does not hide on error (#4840)
+- Fix Compose action in addressbook for results from multiple addressbooks (#4834)
+- Fix bug where some messages in multi-folder search couldn't be viewed/printed/downloaded (#4843)
+- Fix unintentional messages list page change on page switch in compose addressbook (#4844)
+- Fix race-condition in saving user preferences and loading plugin config (#4845)
+- Fix so plain text signature field uses monospace font (#4848)
+- Fix so links with href == content aren't added to links list on html to text conversion (#4847)
+- Fix handling of non-break spaces in html to text conversion (#4849)
+- Fix self-reply detection issues (#4852)
+- Fix multi-folder search result sorting by arrival date (#4858)
+- Fix so *-request@ addresses in Sender: header are also ignored on reply-all (#4860)
+- Update to TinyMCE 4.1.10 (#5164)
+- Fix draft removal after a message is sent and storing sent message is disabled (#4869)
+- Fix so imap folder attribute comparisons are case-insensitive (#4868)
+- Fix bug where new messages weren't added to the list in search mode
+- Fix wrong positioning of message list header on page scroll in Webkit browsers (#4646)
+- Fix some javascript errors in rare situations (#4853)
+- Fix error when using back button after sending an email (#4628)
+- Fix removing signature when switching to identity with an empty sig in HTML mode (#4872)
+- Disable links list generation on html-to-text conversion of identities or composed message (#4850)
+- Fix "washing" of style elements wrapped into many lines
+- Fix so input field (e.g. search box) does not loose focus on list load (#4862)
+- Fix so css of one html part does not apply to other text parts on message display (#4887)
+- Fix XSS issue in drag-n-drop file uploads [CVE-2015-8105] (#4900)
+- Fix handling of plus character in mailto: links (#4891)
+- Fix so adding CC/BCC recipients from the sidebar unhides compose form fields in Classic skin (#4874)
+- Fix so gc.sh script removes also expired sessions from sql database (#4893)
+- Fix support for Mozilla-based browsers, e.g. Pale Moon (#4895)
+- Fix various issues with Turkish (and similar) locales (#4896)
+- Fix so In-Reply-To header is set also for MDN receipts (#4897)
+- Fix missing HTTP_X_FORWARDED_FOR address in generated Received header
+- Fix issue where Content-Length of some attachments could be set to wrong value causing browser errors (#4877)
+
+RELEASE 1.1.2
+-------------
+- Add new plugin hook 'identity_create_after' providing the ID of the inserted identity (#4807)
+- Add option to place signature at bottom of the quoted text even in top-posting mode [sig_below]
+- Fix handling of %-encoded entities in mailto: URLs (#4799)
+- Fix zipped messages downloads after selecting all messages in a folder (#4797)
+- Fix vpopmaild driver of password plugin
+- Fix PHP warning: Non-static method PEAR::setErrorHandling() should not be called statically (#4798)
+- Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#4796)
+- Fix message list header in classic skin on window resize in Internet Explorer (#4732)
+- Fix so text/calendar parts are listed as attachments even if not marked as such (#4795)
+- Fix lack of signature separator for plain text signatures in html mode (#4802)
+- Fix font artifact in Google Chrome on Windows (#4803)
+- Fix bug where forced extwin page reload could exit from the extwin mode (#4801)
+- Fix bug where some unrelated attachments in multipart/related message were not listed (#4805)
+- Fix mouseup event handling when dragging a list record (#4808)
+- Fix bug where preview_pane setting wasn't always saved into user preferences (#4809)
+- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#4814)
+- Fix security issue in contact photo handling (#4817)
+- Fix possible memcache/apc cache data consistency issues (#4820)
+- Fix bug where imap_conn_options were ignored in IMAP connection test (#4822)
+- Fix bug where some files could have "executable" extension when stored in temp folder (#4815)
+- Fix attached file path unsetting in database_attachments plugin (#4823)
+- Fix issues when using moduserprefs.sh without --user argument (#4825)
+- Fix potential info disclosure issue by protecting directory access (#4816)
+- Fix blank image in html_signature when saving identity changes (#4833)
+- Installer: Use openssl_random_pseudo_bytes() (if available) to generate des_key (#4827)
+- Fix XSS vulnerability in _mbox argument handling (#4837)
+
+RELEASE 1.1.1
+-------------
+- ACL: Allow other plugins to adjust the list of permissions and groups to edit
+- Add possibility to print contact information (of a single contact)
+- Add possibility to configure max_allowed_packet value for all database engines (#4772)
+- Improved handling of storage errors after message is sent
+- Update to TinyMCE 4.1.9
+- Unified request* event arguments handling, added support for _unlock and _action parameters
+- Security: Generate random hash for the per-user local storage prefix (#4768)
+- Fix refreshing of drafts list when sending a message which was saved in meantime (#4745)
+- Fix saving/sending emoticon images when assets_dir is set
+- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet (#4778)
+- Fix setting max packet size for DB caches and check packet size also in shared cache
+- Fix needless security warning on BMP attachments display (#4771)
+- Fix handling of some improper constructs in format=flowed text as per the RFC3676[4.5] (#4773)
+- Fix performance of rcube_db_mysql::get_variable()
+- Fix missing or not up-to-date CATEGORIES entry in vCard export (#4766)
+- Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#4769)
+- Fix cursor position on reply below the quote in HTML mode (#4759)
+- Fix so "over quota" errors are displayed also in message compose page
+- Fix duplicate entries suppression in autocomplete result (#4776)
+- Fix "Non-static method PEAR::isError() should not be called statically" errors (#4770)
+- Fix parsing invalid HTML messages with BOM after <!DOCTYPE> (#4777)
+- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#4779)
+- Fix so localized folder name is displayed in multi-folder search result (#4750)
+- Fix javascript error after creating a folder which is a subfolder of another one (#4781)
+- Fix bug where subject of sent/saved message was removed if mbstring wasn't installed (#4780)
+- Fix missing vcard_attachment icon on messages list (#4783)
+- Fix storing signatures with big images in MySQL database (#4785)
+- Fix Opera browser detection in javascript (#4786)
+- Fix so search filter, scope and fields are reset on folder change
+- Fix rows count when messages search fails (#4760)
+- Fix bug where spellchecking in HTML editor do not work after switching editor type more than once (#4789)
+- Fix bug where TinyMCE area height was too small on slow network connection (#4788)
+- Fix backtick character handling in sql queries (#4790)
+- Fix redirect URL for attachments loaded in an iframe when behind a proxy (#4724)
+- Fix menu container references to point to the actual <ul> element (#4791)
+- Fix javascripts errors in IE8 - lack of Event.which, focusing a hidden element (#4793)
+
+RELEASE 1.1.0
+-------------
+- Make SMTP error log more verbose - include server response and error code
+- Fix download options menu (added by zipdownload plugin) in classic skin (#4740)
+- Fix blocked.gif image usage with assets_dir set
+- Fix bug where max_group_members was ignored when adding a new contact (#4733)
+- Hide MDN and DSN options in compose if disabled by admin (#4735)
+- Fix checks based on window.ActiveXObject in IE > 10
+- Fix XSS issue in style attribute handling [CVE-2015-1433] (#4739)
+- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737)
+- Fix so "set as default" option is hidden if identities_level > 1 (#4738)
+- Fix bug where search was reset after returning from compose visited for reply
+- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730)
+- Fix bug where Reply-To address was ignored on reply to messages sent by self (#4742)
+- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741)
+- Fix bug where drafts list wasn't refreshed after draft message was sent from another window (#4745)
+- Fix keyboard navigation and css in datepicker widget across many Firefox versions
+- Fix false warning when opening attached text/plain files (#4748)
+- Fix bug where signature could have been inserted twice after plain-to-html switch (#4746)
+- Fix security issue in DBMail driver of password plugin (#4757)
+- Enable FollowSymLinks option in .htaccess file which is required by rewrite rules (#4754)
+- Fix so JSON.parse() errors on localStorage items are ignored (#4752)
+
+RELEASE 1.1-rc
+--------------
+- Update jQuery to version 2.1.3
+- Allow to override any config option through env variables
+- Improve system security by using optional special URL with security token - use_secure_urls
+- Allow to define separate server/path for image/js/css files - assets_url/assets_dir
+- Sync vendor folder if exists in source package (#4700)
+- Avoid useless reloading list when resetting search with active filter (#4654)
+- Fix invalid folder selection if clicked while busy (#4709)
+- Fix import of multiple contact email addresses from Outlook-csv format (#4714)
+- Fix drag-n-drop to folders expanded while dragging (#4708)
+- Fix import of multiple contact groups from Google-csv format (#4710)
+- Fix import of contacts with multiple email addresses from Google-csv format (#4719)
+- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587]
+- Fix some rcube_utils::anytodatetime() corner cases with timezone mismatches (#4712)
+- Improve move-to and contact-export button in classic skin (#4713)
+- Fix wrong icon for download button in classic skin
+- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729)
+
+RELEASE 1.1-beta
+----------------
+- Fix skin path handling in plugin context (#4111)
+- Prevent memory exhaustion on image resizing with GD on Windows (#4580)
+- Add plugin hook for database table name lookups as requested in #4538
+- Added Oracle database support
+- Support contacts import in GMail CSV format
+- Added namespace filter in Folder Manager
+- Added folder searching in Folder Manager
+- Fix restoring draft messages from localStorage if editor mode differs (#4631)
+- Added config option/user preference to disable saving messages in localStorage (#4606)
+- Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging
+- Added config option 'log_session_id' to control the length of the session identifier in logs
+- Implemented 'storage_connected' API hook after successful IMAP login (#4638)
+- Intergrate Net_LDAP3 and rcube_ldap_generic classes
+- Add option (disabled_actions) to disable UI elements/actions (#4478)
+- Support password encryption using openssl extension (#4614)
+- Create/rename groups in UI dialogs (#4592)
+- Added 'contact_search_name' option to define autocompletion entry format
+- Display quota information for current folder not INBOX only (#3442)
+- Support images in HTML signatures (#3917)
+- Display full quota information in popup (#2103, #2746)
+- Mail compose: Selecting contact inserts recipient to previously focused input - to/cc/bcc accordingly (#4487)
+- Close "no subject" prompt with Enter key (#4463)
+- Password: Add option to force new users to change their password (#2963)
+- Improve support for screen readers and assistive technology using WCAG 2.0 and WAI ARIA standards
+- Enable basic keyboard navigation throughout the UI (#3333)
+- Select/scroll to previously selected message when returning from message page (#4146)
+- Display a warning if popup window was blocked (#4472)
+- Remove (was: ...) from message subject on reply (#4359)
+- Update to TinyMCE 4.1 (#4168)
+- Enable autolink plugin in TinyMCE (#4029)
+- Support image operations with Imagick extension (#4498)
+- Support upload progress with session.upload_progress and PECL uploadprogress module (#3934)
+- Make identity name field optional (#4435)
+- Utility script to remove user records from the local database
+- Plugin API: Added message_saved hook (#4503)
+- Plugin API: Added imap_search_before hook
+- Support messages import from zip archives
+- Zipdownload: Added mbox format support (#2354)
+- Drop support for IE6, move IE7/IE8 support to legacy_browser plugin
+- Update to jQuery-2.1.1
+- Search across multiple folders (#1676)
+- Improve UI integration of ACL settings
+- Drop support for PHP < 5.3.7
+- Set In-Reply-To and References for forwarded messages (#4465)
+- Removed redundant default_folders config option (#4500)
+- Implemented IMAP SPECIAL-USE extension support [RFC6154] (#3326)
+- Optimize some framed pages content for better performance (#4517)
+- Improve text messages display and conversion to HTML (#4091)
+- Don't remove links when html signature is converted to text (#4473)
+- Fix page title when using search filter (#4636)
+- Fix mbox files import
+- Fix some character sets detection (#4694)
+- Fix so attachment charset is set in headers of forward/draft message (#4676)
+- Fix bug where wrong charset could be used for text attachment preview page (#4674)
+
+RELEASE 1.0.5
+-------------
+- Fix wrong icon for download button in classic skin
+- Fix checks based on window.ActiveXObject in IE > 10
+- Fix XSS issue in style attribute handling (#4739)
+- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737)
+- Fix so "set as default" option is hidden if identities_level > 1 (#4738)
+- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730)
+- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741)
+- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729)
+
+RELEASE 1.0.4
+-------------
+- Disable TinyMCE contextmenu plugin as there are more cons than pros in using it (#4684)
+- Fix bug where show_real_foldernames setting wasn't honored on compose page (#4705)
+- Fix issue where Archive folder wasn't protected in Folder Manager (#4706)
+- Fix compatibility with PHP 5.2. in rcube_imap_generic (#4682)
+- Fix setting flags on servers with no PERMANENTFLAGS response (#4667)
+- Fix regression in SHAA password generation in ldap driver of password plugin (#4670)
+- Fix displaying of HTML messages with absolutely positioned elements in Larry skin (#4672)
+- Fix font style display issue in HTML messages with styled <span> elements (#4671)
+- Fix download of attachments that are part of TNEF message (#4668)
+- Fix handling of uuencoded messages if messages_cache is enabled (#4675)
+- Fix handling of base64-encoded attachments with extra spaces (#4678)
+- Fix handling of UNKNOWN-CTE response, try do decode content client-side (#4650)
+- Fix bug where creating subfolders in shared folders wasn't possible without ACL extension (#4680)
+- Fix reply scrolling issue with text mode and start message below the quote (#4681)
+- Fix possible issues in skin/skin_path config handling (#4689)
+- Fix lack of delimiter for recipient addresses in smtp_log (#4703)
+- Fix generation of Blowfish-based password hashes (#4721)
+- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587]
+
+RELEASE 1.0.3
+-------------
+- Initialize HTML editor before restoring a message from localStorage (#4631)
+- Add 'sig_max_lines' config option to default config file (#5162)
+- Add config option to specify IMAP connection socket parameters - imap_conn_options (#4589)
+- Add option to set default message list mode - default_list_mode (#3157)
+- Enable contextmenu plugin for TinyMCE editor (#3062)
+- Fix insert-signature command in external compose window if opened from inline compose screen (#4663)
+- Fix some mime-type to extension mapping checks in Installer (#4610)
+- Fix errors when using localStorage in Safari's private browsing mode (#4619)
+- Fix bug where $Forwarded flag was being set even if server didn't support it (#4621)
+- Fix various iCloud vCard issues, added fallback for external photos (#4617)
+- Fix invalid Content-Type header when send_format_flowed=false (#4616)
+- Fix errors when adding/updating contacts in active search (#4630)
+- Fix incorrect thumbnail rotation with GD and exif orientation data (#4641)
+- Fix contacts list update after adding/deleting/moving a contact (#4640, #4644)
+- Fix handling of email addresses with quoted domain part (#4647)
+- Fix comm_path update on task switch (#4648)
+- Fix error in MSSQL update script 2013061000.sql (#4658)
+- Fix validation of email addresses with IDNA domains (#4661)
+
+RELEASE 1.0.2
+-------------
+- Fix storing unsaved drafts in localStorage (#4529)
+- Add configurable LDAP_OPT_DEREF option (#4546)
+- Fix so when switching editor mode original version of signature is used (#4032)
+- Fix unintentional draft autosave request if autosave is disabled (#4550)
+- Fix malformed References: header in send/saved mail (#4552)
+- Fix handling unicode characters in links (#4555)
+- Fix incorrect handling of HTML comments in messages sanitization code (#4558)
+- Fix so current page is reset on list-mode change (#4561)
+- Fix so responses menu hides on click in classic skin (#4566)
+- Fix unintentional line-height style modification in HTML messages (#4567)
+- Fix broken normalize_string(), add support for ISO-8859-2 (#4568)
+- Support csv contacts import in German localization (#4570)
+- Fix so message list and counters are updated when a message is opened in new window (#4569)
+- Fix malformed recipient name when composing a message by clicking on mailto link (#4583)
+- Fix list reload after sending message in another window (#4576)
+- Fix so address format errors are ignored when saving a draft (#4594)
+- Fix incorrect label translation in return receipt (#4598)
+- Fix security issue in delete-response action - allow only ajax request
+- Fix Delete button state after deleting identity/response (#4603)
+- Fix bug where contacts with no email address were listed on compose addressbook (#4602)
+- Fix images import from various vCard formats (#4604)
+- Fix sorting messages by size on servers without SORT capability (#4608)
+
+RELEASE 1.0.1
+-------------
+- Support 'error' and 'body_file' return attribs in 'message_before_send' hook (#4467)
+- Apply user-specific replacements to group's base_dn property (#4512)
+- Fix missing email address when importing contacts from outlook csv (#4535)
+- Fix bug where "With attachment" option in search filter wasn't selected after return from mail view (#4508)
+- Fix "washing" of unicoded style attributes (#4510)
+- Fix unintentional redirect from compose page in Webkit browsers (#4516)
+- Fix messages index cache update under some conditions (e.g. proxy) (#4505)
+- Fix lack of translation of special folders in some configurations (#4520)
+- Fix XSS issue in plain text spellchecker (#4524)
+- Fix invalid page title for some folders (1489804)
+- Fix redundant alert message on over-size uploads (#4528)
+- Fix next message display after removing a message (#4521)
+- Fix missing Mail-Followup-To header in sent mail (#4534)
+- Fix error when spell-checking an empty text (#4536)
+- Avoid popupmenus being closed when scrollbar is clicked (#4537)
+- Add proxy_whitelist configuration option (#4496)
+- Fix identities_level=4 handling in new_user_dialog plugin (#4540)
+- Fix various db_prefix issues (#4539)
+- Fix too small length of users.preferences column data type on MySQL
+- Fix redundant warning when switching from html to text in empty editor (#4530)
+- Fix invalid host validation on login (#4541)
+- Fix IMAP connection test in installer so it is aware of imap_auth_type (#4502)
+
+RELEASE 1.0.0
+-------------
+- Added toolbar button to move message in message view
+- Fix style of disabled protocol handler link on IE (#4460)
+- Fix message import dialog when no file is selected (#4488)
+- Fix opening compose screen in new window after saving as draft (#4479)
+- Fix directories check in Installer on Windows (#4462)
+- Fix issue when default_addressbook option is set to integer value (#4379)
+- Fix Opera > 15 detection (#4455)
+- Fix security issue in DomainFactory driver of Password plugin
+- Fix invalid X-Draft-Info on forwarded message draft (#4464)
+- Fix regression in handling of 'attachments' result in message_compose hook (#4474)
+- Fix issue where msgexport.sh printed the message to STDOUT instead of a file (#4476)
+- Fix fatal error in database_attachments plugin under some conditions (#4495)
+
+RELEASE 1.0-rc
+--------------
+- Small CSS fix with message notice boxes in Larry skin (#4429)
+- Include groups in contacts search on mail compose (#4186)
+- Add mime-type mapping for .7z files (#4436)
+- Invoke update scripts with php to circumvent execution restrictions (#4330)
+- Fix drag & drop message/contact moving on touch device (#4395)
+- Fix canned responses in HTML mode (#4446)
+- Check/create default folders on every login not only the first (#4391)
+- Update to jQuery-1.11.0 and jQuery-UI-1.9.2
+- Support SMTP socket context options via new config option 'smtp_conn_options'
+- Fix compatibility with PHP 5.2 in html.php file (#4438)
+- Remove expand/collapse with plus/minus keys (on numeric keypad) (#4437)
+- Fix issue where filesystem path was added to all-attachments (zip) file (#4433)
+- Fix case-sensitivity of email addresses handling on compose (#1899)
+- Don't alter Message-ID of a draft when sending (#4381)
+- Fix issue where deprecated syntax for HTML lists was not handled properly (#3975)
+- Display different icons when Trash folder is empty or full (#2108)
+- Remember last position of more headers switch (#3660)
+- Fix so message flags modified by another client are applied on the list on refresh (#1639)
+- Fix broken text/* attachments when forwarding/editing a message (#4393)
+- Improved minified files handling, added css minification (#3041)
+- Fix handling of X-Forwarded-For header with multiple addresses (#4424)
+- Fix border issue on folders list in classic skin (#4419)
+- Implemented menu actions to copy/move messages, added folder-selector widget (#863)
+- Fix security rules in .htaccess preventing access to base URL without the ending slash (#4422)
+- Fix regression where only first new folder was placed in correct place on the list (#4418)
+- Fix issue where children of selected and collapsed thread were skipped on various actions (#4410)
+- Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#4388)
+- Fix unreliable mimetype tests in Installer (#4408)
+- Fix performance of listing writeable folders (#4406)
+
+RELEASE 1.0-beta
+----------------
+- Fix handling of invalid closing tags in HTML messages (#4403)
+- Set real content-type for file downloads (#4400)
+- Update TinyMCE to version 3.5.10 (#4401)
+- Fix keyboard navigation in list widgets (#4367)
+- Allow plugins to grab the reference of opened windows (#4383)
+- Larry skin: Improved status message display for better visibility (#4115)
+- Fix Internet Explorer 11 detection (#4397)
+- Fix date column width to fit the widest possible date format (#4354)
+- Move certain user preference options to a collapsed "advanced" block (#4015)
+- Add file type icons for Powerpoint and Open Office presentations (#4269)
+- Fix operations on folders with trailing spaces in name (#4387)
+- Improve identity selection based on From: header (#4360)
+- Fix issue where mails with inline images of the same name contained only the first image multiple times (#4378)
+- Use left/right arrow keys to collapse/expand thread and spacebar to select a row, change Ctrl key behavior (#4367)
+- Fix an issue where using arrow keys to go up a list can result in selected message being under headers (#4375)
+- Fix an issue where Home/End keys don't focus list row properly, don't scrollTo properly (#4370)
+- Add an option to disable smart Reply-List behaviour - reply_all_mode (#3953)
+- Fix an issue where pressing minus key on contacts list was hiding list records (#4368)
+- Fix an issue where shift + arrow-up key wasn't selecting all messages in collapsed thread (#4371)
+- Added icon for priority column in messages list header (#4275)
+- New feature "Canned Responses" to save and recall boilerplate text snippets
+- Fix HTML part detection when encapsulated inside multipart/signed (#4357)
+- Add spellchecker backend for the After the Deadline service
+- Replace markdown-style [1] link indexes in plain text email bodies
+- Improved mailto: link arguments handling (#4351)
+- Use DOMDocument LIBXML_PARSEHUGE and LIBXML_COMPACT options if possible (#4316)
+- Support HTTP_HOST, SERVER_NAME and SERVER_ADDR values in include_host_config feature
+- Make default font size for HTML messages configurable (request #118)
+- Fix XSS issue in addressbook group name field [CVE-2013-5646] (#4337)
+- After message is sent refresh messages list of replied message folder (#4282)
+- Add option force specified domain in user login - username_domain_forced (#4290)
+- Add option to import Vcards with group assignments
+- Save groups membership in Vcard export (#3801)
+- Workaround broken PHP function timezone_name_from_abbr (#4289)
+- Make cached message size limit configurable - messages_cache_threshold (#4326)
+- Log also failed logins to userlogins log
+- Add temp_dir_ttl configuration option (#4318)
+- Allow setting INBOX as Sent folder (#4264)
+- Fix replacement variables in user-specific base_dn in some LDAP requests (#4299)
+- Fix image scaling issues when image has only one dimension smaller than the limit (#4296)
+- Fix issue where uploaded photo was lost when contact form did not validate (#4296)
+- Move identity selection based on non-standard headers into (new) identity_select plugin (#3835)
+- Fix downloading binary files with (wrong) text/* content-type (#4292)
+- Respect HTTP_X_FORWARDED_FOR and HTTP_X_REAL_IP variables for session IP check
+- Simplified configuration by merging it into one file + defaults (#3156)
+- Make message list header stay on top when scrolling (#353)
+- Add support for 'enchant' spellcheck engine
+- Check filetype detection in installer and update script (#4252)
+- Fix folder names truncation in Classic skin (#4265)
+- Make possible to disable some (broken) IMAP extensions with imap_disable_caps option (#4245)
+- Contacts drag-n-drop default action is to move contacts (#3962)
+- Added possibility to choose to move or copy contacts from drag-n-drop menu (#3962)
+- Fix Close link and remove About link on error pages (#4201)
+- Improved/unified attachment preview screen, added print button
+- Fix lack of space between searchfiler and quicksearchbar in Larry skin (#4233)
+- Cache LDAP's user_specific search and use vlv for better performance (#4247)
+- LDAP: auto-detect and use VLV indices for all search operations
+- LDAP: additional group configuration options for  address books
+- LDAP: separated address book implementation from a generic LDAP wrapper class
+- Allow address books to browse a multi-level group hierarchy in the contacts list
+- Fix session issues when local and database time differs (#2401)
+- Fix thread cache syncronization/validation (#4150)
+- Added feature to import messages to the currently selected folder
+- Add option show_real_foldernames to disable localization of special folders
+- Fix database cache expunge issues (#4229)
+- Fix date format issues on MS SQL Server (#4078)
+- Add imap_cache_ttl option to configure TTL of imap_cache
+- Make LDAP cache engine configurable via ldap_cache and ldap_cache_ttl options
+- Fix "duplicate entry" errors on inserts to imap cache tables (#4228)
+- Improved handling of Reply-To/Bcc addresses of identity in compose form (#4142)
+- Added user preference to open all popups as standard windows
+- Implemented shared cache (rcube_cache_shared)
+- Change Reply-All button label/title when mailing list is detected (#4092)
+- Fix SMTP connection using IPv6 address in smtp_server option (#4147)
+- Added attachment_reminder plugin
+- Make PHP code eval() free, use create_function()
+- Add option to display email address together with a name in mail preview (#3952)
+- Support CSV import from Atmail (#4161)
+- Add db_prefix configuration option in place of db_table_*/db_sequence_* options
+- Make possible to use db_prefix for schema initialization in Installer (#4175)
+- Fix updatedb.sh script so it recognizes also table prefix for external DDL files
+- Fix parsing invalid date string (#4155)
+- Add "with attachment" option to messages list filter (#1795)
+- Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#4137)
+- Add rel="noreferrer" for links in displayed messages (#4976)
+- Add ability to toggle between HTML and text while viewing a message (#3005)
+- Remove "HTML message" from attachments list while viewing a message in text mode (#3005)
+- Support IMAP MOVE extension [RFC 6851]
+- Add attachment menu with Open and Download options (#4116)
+- Display user-friendly message on IMAP "over quota" errors (#914)
+- Extended archive plugin with user-configurable options to store messages into subfolders
+- Fix export of selected contacts from search result (#4070)
+- Feature to export only selected contacts from addressbook (by Phil Weir)
+
+RELEASE 0.9.5
+-------------
+- Fix failing vCard import when email address field contains spaces (#4363)
+- Fix default spell-check configuration after Google suspended their spell service
+- Fix vulnerability in handling _session argument of utils/save-prefs [CVE-2013-6172] (#4362)
+- Fix iframe onload for upload errors handling (#4361)
+- Fix address matching in Return-Path header on identity selection (#4358)
+- Fix text wrapping issue with long unwrappable lines (#4356)
+- Fixed issues where HTML comments inside style tag would hang Internet Explorer
+- Hide Delivery Status Notification option when smtp_server is unset (#4339)
+- Display full attachment name using title attribute when name is too long to display (#4328)
+- Fix attachment icon issue when rare font/language is used (#4334)
+- Fix expanded thread root message styling after refreshing messages list (#4335)
+- Fix issue where From address was removed from Cc and Bcc fields when editing a draft (#4327)
+- Fix error_reporting directive check (#4331)
+- Fix de_DE localization of "About" label in Help plugin (#4333)
+
+RELEASE 0.9.4
+-------------
+- Make identities matching case insensitive (#1881)
+- Fix issue where too big message data was stored in cache causing sql errors (#4325)
+- Fix iframe scrollbars on webkit desktop browsers (#4319)
+- Fix issue where legacy config was overridden by default config (#4305)
+- Fix newmail_notifier issue where favicon wasn't changed back to default (#4324)
+- Fix setting of Junk and NonJunk flags by markasjunk plugin (#4303)
+- Fix lack of Reply-To address in header of forwarded message body (#4314)
+- Fix bugs when invoking contact creation form when read-only addressbook is selected (#4313)
+- Fix identity selection on reply (#4308)
+- Fix so additional headers are added to all messages sent (#4302)
+- Fix display issue after moving folder in Folder Manager (#4310)
+- Fix handling of non-default date formats (#4311)
+- Fix unquoted path in PREG expression on Windows (#4307)
+- Fix wrong close tag in /template/mail.html (#4312)
+
+RELEASE 0.9.3
+-------------
+- Fix setting refresh_interval to "Never" in Preferences (#4304)
+- Fixed iframe scrolling on touch devices
+- Optimized message list for touch devices
+- Fix purge action in folder manager (#4300)
+- Fix base URL resolving on attribute values with no quotes (#4297)
+- Fix wrong handling of links with '|' character (#4298)
+- Fix colorspace issue on image conversion using ImageMagick (#4294)
+- Fix XSS vulnerability when editing a message "as new" or draft [CVE-2013-5645] (#4283)
+- Fix XSS vulnerability when saving HTML signatures [CVE-2013-5645] (#4283)
+- Fix rewrite rule in .htaccess (#4278)
+- Fix detecting Turkish language in ISO-8859-9 encoding (#4284)
+- Fix identity-selection using Return-Path headers (#4279)
+- Fix parsing of links with ... in URL (#4251)
+- Fix compose priority selector when opening in new window (#4286)
+- Fix bug where signature wasn't changed on identity selection when editing a draft (#4272)
+- Fix IMAP SETMETADATA parameters quoting (#4274)
+- Fix "could not load message" error on valid empty message body (#4271)
+- Fix handling of message/rfc822 attachments on message forward and edit (#4262)
+- Fix parsing of square bracket characters in IMAP response strings (#4267)
+- Don't clear References and in-Reply-To when a message is "edited as new" (#4263)
+- Fix messages list sorting with THREAD=REFS
+- Remove deprecated (in PHP 5.5) PREG /e modifier usage (#4239)
+- Fix empty messages list when register_globals is enabled (#4232)
+- Fix so valid and set date.timezone is not required by installer checks (#4242)
+- Canonize boolean ini_get() results (#4249)
+- Fix so install do not fail when one of DB driver checks fails but other drivers exist (#4240)
+- Fix so exported vCard specifies encoding in v3-compatible format (#4244)
+
+RELEASE 0.9.2
+-------------
+- Fix image thumbnails display in print mode (#4220)
+- Fix height of message headers block (#4200)
+- Fix timeout issue on drag&drop uploads (#4238)
+- Fix default sorting of threaded list when THREAD=REFS isn't supported
+- Fix list mode switch to 'List' after saving list settings in Larry skin (#4236)
+- Fix error when there's no writeable addressbook source (#4235)
+- Fix zipdownload plugin issue with filenames charset (#4231)
+- Fix so non-inline images aren't skipped on forward (#4230)
+- Fix "null" instead of empty string on messages list in IE10 (#4227)
+- Fix legacy options handling
+- Fix so bounces addresses in Sender headers are skipped on Reply-All (#4140)
+- Fix bug where serialized strings were truncated in PDO::quote() (#4226)
+- Fix displaying messages with invalid self-closing HTML tags (#4223)
+- Fix PHP warning when responding to a message with many Return-Path headers (#4222)
+- Fix unintentional compose window resize (#4206)
+- Fix performance regression in text wrapping function (#4219)
+- Fix connection to posgtres db using unix socket (#4218)
+- Fix handling of comma when adding contact from contacts widget (#4199)
+- Fix bug where a message was opened in both preview pane and new window on double-click (#4212)
+- Fix fatal error when xdebug.max_nesting_level was exceeded in rcube_washtml (#4202)
+- Fix PHP warning in html_table::set_row_attribs() in PHP 5.4 (#4194)
+- Fix invalid option selected in default_font selector when font is unset (#4204)
+- Fix displaying contact with ID divisible by 100 in sql addressbook (#4211)
+- Fix browser warnings on PDF plugin detection (#4209)
+- Fix fatal error when parsing UUencoded messages (#4210)
+
+RELEASE 0.9.1
+-------------
+- Better German labels for from/to to avoid conflicts with 'sender' (#4188)
+- Fix problem where security warning was displayed for valid images with image/jpg type (#4196)
+- Fix handling of invalid email addresses in headers (#4193)
+- Fix IMAP connection issue with default_socket_timeout < 0 and imap_timeout < 0 (#4191)
+- Fix various PHP code bugs found using static analysis (#4190)
+- Fix backslash character handling on vCard import (#4189)
+- Fix csv import from Thunderbird with French localization (#4170)
+- Fix messages list focus issue in Opera and Webkit (#4169)
+- Fix Reply-To header handling in Reply-All action (#4157)
+- Fix so Sender: address is added to Cc: field on reply to all (#4140)
+- Fix so addressbook_search_mode works also for group search (#4183)
+- Fix removal of a contact from a group in LDAP addressbook (#4185)
+- Include SQL query in the log on SQL error (#4172)
+- Fix handling untagged responses in IMAP FETCH - "could not load message" error (#4180)
+- Fix very small window size in Chrome (#4087)
+- Fix list page reset when viewing a message in Larry skin (#4182)
+- Fix min_refresh_interval handling on preferences save (#4179)
+- Fix PDF support detection for Firefox PDF.js (#4113)
+- Fix possible collision in generated thumbnail cache key (#4177)
+- Fix exit code on bootsrap errors in CLI mode (#4160)
+- Fix error handling in CLI mode, use STDERR and non-empty exit code (#5161)
+- Fix error when using check_referer=true
+- Fix incorrect handling of some specific links (#4171)
+- Fix incorrect handling of leading spaces in text wrapping
+- Fix unintentional messages list jumps on click in Internet Explorer (#4167)
+- Fix list of required configuration options (#4166)
+- Fix DB error when creating a new contact and a group is selected (#4164)
+- Fix handling of deprecated boolean value of reply_mode option (#4165)
+
+RELEASE 0.9.0
+-------------
+- Fix display of HTML entities in protected folder name (#4159)
+- Set minimal permissions to temp files (#4131)
+- Improve content check for embedded images without filename (#4151)
+- Fix handling of invalid characters in message headers and output (#4153)
+- Fix selecting collapsed rows on select-all (#4156)
+- Avoid race-conditions with concurrent attachment uploads (#3739)
+- Fix possible header duplicates when using additional headers (#4154)
+- Fix session issues with use_https=true (#4125)
+- Fix blockquote width in sent mail (#4152)
+- Fix keyboard events on list widgets in Internet Explorer (#4148)
+
+RELEASE 0.9-rc2
+---------------
+- Fix security issue in save-pref command
+- Remove sig_above configuration option, use reply_mode only (#4135)
+- Refresh current folder in opener window after draft save or message sent (#4132)
+- Fix saving draft just after entering compose window (#4141)
+- Fix javascript error in IE9 when loading form with placeholders into an iframe (#4138)
+- Fix handling of some conditional comment tags in HTML message (#4136)
+- Fix so forward as attachment works if additional attachment is added by message_compose hook (#4134)
+- Better handling of session errors in ajax requests (#4105)
+- Fix HTML part detection for some specific message structures (#4130)
+- Don't show fake address - phishing prevention (#4120)
+- Fix forward as attachment bug with editormode != 1 (#4129)
+- Fix LIMIT/OFFSET queries handling on MS SQL Server (#4123)
+- Fix so task name can really contain all from a-z0-9_- characters (#4095)
+- Fix javascript errors when working in a page opened with taget="_blank"
+- Mention SQLite database format change in UPGRADING file (#4122)
+- Increase maxlength to 254 chars for email input fields in addressbook (#4126)
+- Fix thumbnail size when GD extension is used for image resize (#4124)
+- Display notice that message is encrypted also for application/pkcs7-mime messages (#3815)
+
+RELEASE 0.9-rc
+--------------
+- Fix plain text spellchecker incorrect highlighting in non-ASCII text (#4114)
+- Add workaround for invalid message charset detection by IMAP servers (#4112)
+- Fix NUL characters in content-type of ms-tnef attachment (#4108)
+- Fix regression in handling LDAP contact identifiers (#4104)
+- Updated translations from Transifex
+- Fix buggy error template in a frame (#4092)
+- Add addressbook widget on compose page in classic skin
+- Add search box to compose address book widget (#3710)
+- Fix login in case when default_host is an array with one element (#4085)
+- Use LDAP fallback hosts on connect + bind instead of ldap_connect() only.
+- Add config option for LDAP bind timeout (sets LDAP_OPT_NETWORK_TIMEOUT option)
+- Submit Addressbook advanced search form with Enter key (#3843)
+- Also block remote images in HTML part view (#4013)
+- Improved database schema upgrade procedure, added updatedb.sh script
+- Force autocommit mode in mysql database driver (#4068)
+
+RELEASE 0.9-beta
+----------------
+- Fix searching by date in address book (#4058)
+- Improve charset detection by prioritizing charset according to user language (#2032)
+- Fix handling of escaped separator in vCard file (#4064)
+- Add option to use envelope From address for MDN responses (#4052)
+- Add possibility to search in message body only (#3977)
+- Support "multipart/relative" as an alias for "multipart/related" type (#4057)
+- Display PGP/MIME signature attachments as "Digital Signature" (#3845)
+- Workaround UW-IMAP bug where hierarchy separator is added to the shared folder name (#4051)
+- Fix version comparisons with -stable suffix (#4050)
+- Add unsupported alternative parts to attachments list (#4046)
+- Add Compose button on message view page (#3959)
+- Display 'Sender' header in message preview
+- Plugin API: Added message_before_send hook
+- Fix contact copy/add-to-group operations on search result (#4042)
+- Use matching identity in MDN response (#4043)
+- Fix handling of signatures on draft edit (#3996)
+- Fix so compacting of non-empty folder is possible also when messages list is empty (#4039)
+- Allow forwarding of multiple emails (#2941)
+- Fix big memory consumption of DB layer (#4037)
+- Fix broken message/part bodies when FETCH response contains more untagged lines (#4020)
+- Fix empty email on identities list after identity update (#4018)
+- Add new identities_level: (4) one identity with possibility to edit only signature
+- Use Delivered-To and Envelope-To headers for identity selection (#4024, #3835)
+- Fix XSS vulnerability using Flash files (#4014)
+- Always save drafts with format=flowed in order to keep original line wraps (#3997)
+- Select default_addressbook on the list in Address Book (#3624)
+- Fix so mobile phone has TYPE=CELL in exported vCard (#4004)
+- Support contacts import from CSV file (#2605)
+- Improved keep-alive action. Now the interval is based on session_lifetime (#3799)
+- Added cross-task 'refresh' request for system state updates (#3799)
+- Renamed config options: keep_alive to refresh_interval, min_keep_alive to min_refresh_interval
+- Fix handling of text/enriched content on message reply/forward/edit
+- Option to display attached images as thumbnails below message body
+- Upgraded to jQuery 1.8.3 and jQuery UI 1.9.1
+- Add config option to automatically generate LDAP attributes for new entries
+- Add user settings to open message view and compose form in new windows (#1886)
+- Better client-side timezone detection using the jsTimezoneDetect library (#3947)
+- Add option to disable saving sent mail in Sent folder - no_save_sent_messages (#3923)
+- Fix handling dont_override with message_sort_col and message_sort_order settings (#3970)
+- Fix handling of URLs with asterisk characters (#3969)
+- Remove automatic to-lowercase conversion of usernames (#3941)
+- Plugin API: Add 'email_list' argument for identities data in user_create hook
+- Integrated zipdownload plugin to download all attachments (#617)
+- Fix HTML special characters handling in message list/header display (#3812)
+- List related text/html part as attachment in plain text mode (#3918)
+- Use IMAP BINARY (RFC3516) extension to fetch message/part bodies
+- Fix folder creation under public namespace root (#3910)
+- Fix so "Edit as new" on draft creates a new message (#3924)
+- Fix invalid error message on deleting mail from read only folder (#3929)
+- Replace data URIs of images (pasted in HTML editor) with inline attachments (#3795)
+- Remove (too big) min-width on mail screen
+- Added template object 'frame'
+- Add option to enable HTML editor on forwarding (#3807)
+- Add option to not include original message on reply, rename option top_posting to reply_mode (#1615)
+- Added session_path config option and unified cookies settings in javascript
+- Added "Undeleted" option to messages list filter
+- Rewritten test scripts for PHPUnit
+- Add new DB abstraction layer based on PHP PDO, supporting SQLite3 (#3668)
+- Removed PEAR::MDB2 package
+- Removed users.alias column, added option ('user_aliases')
+  to use email address from identities as username (#3851)
+- Removed redundant cache.cache_id column (#3817)
+- Fix order of attachments in sent mail (#3740)
+- Fix Shift + delete button does not permanently delete messages (#3598)
+- Add Content-Length for attachments where possible (#1880)
+- Fix attachment sizes in message print page and attachment preview page (#3805)
+- Add mail attachments using drag & drop on HTML5 enabled browsers
+- Add workaround for invalid BODYSTRUCTURE response - parse message with Mail_mimeDecode package (#1966)
+- Display Tiff as Jpeg in browsers without Tiff support (#3757)
+- Don't display Pdf/Tiff/Flash attachments inline without browser support (#3757, #3394)
+- Add is_escaped attribute for html_select and html_textarea (#3782)
+- Fix issue where draft auto-save wasn't executed after some inactivity time
+- Add vCard import from multiple files at once (#3458)
+- Roundcube Framework:
+    Add possibility to replace IMAP driver with custom class
+    Add IMAP auto-connection feature, improving performance with caching enabled
+    Replace imap_init hook with storage_init (with additional 'driver' argument)
+    Improved performance by caching IMAP server's capabilities in session
+    Unified global functions naming (rcube_ prefix)
+    Better classes separation
+    Framework files moved to lib/Roundcube
+
+RELEASE 0.8.5
+-------------
+- Fix #countcontrols issue in IE<=8 when text is very long (#4060)
+- Fix unwanted horizontal scrollbar in message preview header (#4044)
+- Add workaround for IE<=8 bug where Content-Disposition:inline was ignored (#4028)
+- Fix XSS vulnerability in vbscript: and data:text links handling [CVE-2012-6121] (#4033)
+- Fix absolute positioning in HTML messages (#4007)
+- Fix cache (in)validation after setting \Deleted flag
+- Fix keybord events on messages list in opera browser (#4011)
+- Fix selection of collapsed thread rows (#3978)
+- Fix wrapping of quoted text with format=flowed (#3561)
+
+RELEASE 0.8.4
+-------------
+- Fix regression where unintentional page reload was done after request abort (#3999)
+- Fix XSS vulnerability in handling of text/enriched messages (#4000)
+- Fix handling of 'media' attribute on linked css (#3989)
+- Fix excessive LFs at the end of composed message with top_posting=true (#3995)
+- Fix bug where leading blanks were stripped from quoted lines (#3994)
+
+RELEASE 0.8.3
+-------------
+- Fix AREA links handling (#3992)
+- Fix possible HTTP DoS on error in keep-alive requests (#3983)
+- Fix compatybility with MDB2 2.5.0b4 (#3982)
+- Fix a bug where saving a message in INBOX wasn't possible
+- Fix HTML part detection in messages with attachments (#3976)
+- Fix bug where wrong words were highlighted on spell-before-send check
+- Fix scrolling quirk in email preview frame using Opera 12 (#3973)
+- Fix displaying of multipart/alternative messages with empty parts (#3961)
+- Fix threaded list sorting on PHP < 5.2.9 (#3960)
+- Fix Warning: htmlspecialchars(): charset `RCMAIL_CHARSET' not supported warning in Installer (#3958)
+
+RELEASE 0.8.2
+-------------
+- Fix XSS vulnerability from HTTP User-Agent header (#3954)
+- Force fonts in compose fields to be all the same (#3926)
+- Fix handling vCard entries with TEL;TYPE=CELL (#3949)
+- Fix error where session wasn't updated after folder rename/delete (#3928)
+- Fix PLAIN authentication for some IMAP servers (#3916)
+- Fix encoding vCard file when contains PHOTO;ENCODING=b (#3922)
+- Fix focus issue in IE when selecting message row (#3881)
+- Add full headers view in message preview window (#3823)
+- Fix message display page issues - unified with message preview (#3856, #3895)
+- Fix displaying all headers when they contain malformed characters (#3911)
+- Fix decoding of HTML messages with UTF-16 charset specified (#3902)
+- Fix quota capability detection so it can be overwritten by a plugin (#3903)
+- Fix identity selection on reply (#3516)
+- Fix Larry's messages list filter in IE (#3890)
+- Fix more IE issues by disabling Compat. mode with X-UA-Compatible meta tag (#3886)
+- Fix setting locales under Solaris - use additional .UTF-8 suffix (#3887)
+- Fix email address validation for addresses with IP address in domain part
+- Fix Larry skin issues in IE7 compat. mode (#3879)
+- Fix so subscribed non-existing/non-accessible shared folder can be unsubscribed
+
+RELEASE 0.8.1
+-------------
+- Fix bug where domain name was converted to lower-case even with login_lc=false (#3859)
+- Fix lower-casing email address on replies (#3863)
+- Fix line separator in exported messages (#3866)
+- Fix XSS issue where plain signatures wasn't secured in HTML mode [CVE-2012-4668] (#3875)
+- Fix XSS issue where href="javascript:" wasn't secured [CVE-2012-3508] (#3875)
+- Fix impossible to create message with empty plain text part (#3873)
+- Fix stripped apostrophes when replying in plain text to HTML message (#3869)
+- Fix inactive Save search option after advanced search (#3870)
+- Fix Remove from group option is active for contact search result (#3871)
+- Disable autocapitalization in login form on iPad/iPhone (#3872)
+- Fix focus on the list when list row is clicked (#3865)
+- Added separate From and To columns apart from smart From/To column (#2970)
+- Fix fallback to Larry skin when configured skin isn't available (#3857)
+- Fix (workaround) delete operations with some versions of memcache (#3858)
+- Fix (disable) request validation for spell and spell_html actions
+
+RELEASE 0.8.0
+-------------
+- Don't show product version on login screen (can be enabled by config)
+- Renamed old default skin to 'classic'. Larry is the new default skin.
+- Support connections to memcached socket file (#3848)
+- Enable TinyMCE inlinepopups plugin
+- Update to TinyMCE 3.5.6
+- Correctly escape localized labels in javascript variable (#3842)
+- Update Net_SMTP/Auth_SASL packages to fix Digest-MD5/Cram-MD5 authentication (#3846)
+- Don't add attachments content into reply/forward/draft message body (#3837)
+- Fix 'no connection' errors on page unloads (#3832)
+- Plugin API: Add 'unauthenticated' hook (#3545)
+- Show explicit error message when provided hostname is invalid (#3834)
+- Fix wrong compose screen elements focus in IE9 (#3826)
+- Fix fatal error when date.timezone isn't set (#3831)
+- Update to TinyMCE 3.5.4.1
+- Better icons with distinct shapes for priority columns (#3706)
+- Show dedicated icon for multipart/report messages (#3813)
+- Properly hide text of icon links/buttons (#3820)
+- Fix handling of unitless CSS size values in HTML message (#3821)
+- Fix removing contact photo using LDAP addressbook (#3737)
+- Fix storing X-ANNIVERSARY date in vCard format (#3816)
+- Update to Mail_Mime-1.8.5 (#3810)
+- Fix XSS vulnerability in message subject handling using Larry skin [CVE-2012-3507] (#3809)
+- Fix handling of links with various URI schemes e.g. "skype:" (#3521)
+- Fix handling of links inside PRE elements on html to text conversion
+- Fix indexing of links on html to text conversion
+- Decode header value in rcube_mime::get() by default (#3803)
+- Fix errors with enabled PHP magic_quotes_sybase option (#3798)
+- Fix SQL query for contacts listing on MS SQL Server (#3797)
+- Fix window.resize handler on IE8 and Opera (#3758)
+- Don't let error message popups cover the login form (#3794)
+- Update to TinyMCE 3.5.2
+- Don't show errors when moving contacts into groups they are already in (#3788)
+- Make folders with unread messages in subfolders bold again (#2892)
+- Abbreviate long attachment file names with ellipsis (#3793)
+- Fix html2text conversion of strong|b|a|th|h tags when used in upper case
+- Add listcontrols template container in Larry skin (#3792)
+- Fix host autoselection when default_host is an array (#3790)
+- Move messages forwarding mode setting into Preferences
+- Fix HTML entities handling in HTML editor (#3780)
+- Fix listing shared folders on Courier IMAP (#3767)
+
+RELEASE 0.8-rc
+--------------
+- Added new translations in Belarusian, Interlingua and Malayalam
+- Flipped compose options arrow (#3772)
+- Fix handling of large uuencode attachments (#3771)
+- Fix handling of "usemap" attribute (#3770)
+- Fix handling of some HTML tags e.g. IMG (#3769)
+- Use similar language as a fallback for plugin localization (#3726)
+- Fix issue where signature wasn't re-added on draft compose (#3659)
+- Update to TinyMCE 3.5 (#3762)
+- Fixed multi-threaded autocompletion when number of threads > number of sources
+- Allow to configure the number of values allowed for each LDAP attribute
+- Support for serialized LDAP address values (usually delimited with a $)
+- Less restrictive session auth checks, repeat keep-alive requests on failure (#3755)
+- Fix redirect to mail/compose on re-login (#3585)
+- Add IE8 hack for messages list issue (#3317)
+- Fix handling errors on draft auto-save
+- Fix importing vCard photo with ENCODING param specified (#3746)
+- Support multiple name/email pairs for Bcc and Reply-To identity settings (#3752)
+- Set flexible width to login form fields (#3735)
+- Fix re-draw bug on list columns change in IE8 (#3318)
+- Allow mass-removal of addresses from a group (#3259)
+- Fix removing all contacts on import to LDAP addressbook
+- Fix so "Back" from compose/show doesn't reset search request (#3594)
+- Add option to delete messages instead of moving to Trash when in Junk folder (#2805)
+- Fix invisible cursor when replying to a html message (#3100)
+- Reset IP stored in session when destroying session data (#3485)
+- Fix bug where memory_limit = -1 wasn't handled properly
+- Support LDAP RFC2256's country object class read/write (#3535)
+- Upgraded to jQuery 1.7.2
+- Image resize with GD extension (#3712)
+- Fix lack of warning when switching task in compose window (#3725)
+- Fix bug where it wasn't possible to enter ( or & characters in autocomplete fields
+- Request all needed fields from address book backends (#3721)
+- Unified (single) spellchecker button
+- Scroll long lists on drag&drop (#2249)
+- Copy all skins in installto script (#3705)
+
+RELEASE 0.8-beta
+----------------
+- Upgraded to jQuery 1.7.1 (#3673) and jQuery UI 1.8.18
+- Add Russian to the spellchecker languages list (#3542)
+- Remember custom skin selection after logout (#3688)
+- Make sure About tab is always the last tab (#3609)
+- Fix issue with folder creation under INBOX. namespace (#3683)
+- Added mailto: protocol handler registration link in User Preferences (#2729)
+- Handle identity details box with an iframe (#3066)
+- Fix issue where some text from original message was missing on reply (#3675)
+- Fix autoselect_host() for login (#3639)
+- Changed license to GNU GPLv3+ with exceptions for skins & plugins
+- Added address book widget on compose screen
+- Use proper timezones from PHP's internal timezonedb (#1973)
+- Add separate pagesize setting for mail messages and contacts (#3617)
+- Deprecate $DB, $USER, $IMAP global variables, Use $RCMAIL instead
+- Add option to set default font for HTML message (#894)
+- Fix issues with big memory allocation of IMAP results
+- Prevent from memory_limit exceeding when trying to parse big messages bodies (#3164)
+- Add possibility to add SASL mechanisms for SMTP in smtp_connect hook (#3399)
+- Mark (with different color) folders with recent messages (#2479)
+- Added About tab in Settings
+- TinyMCE updated to 3.4.6
+
+RELEASE 0.7.2
+-------------
+- Fix encoding of attachment with comma in name (#3717)
+- Fix handling of % character in IMAP protocol (#3711)
+- Fix duplicate names handling in addressbook searches (#3704)
+- Fix displaying of HTML messages from Disqus (#3702)
+- Disable E_STRICT warnings on PHP 5.4
+- Prevent from folder selection on virtual folder collapsing (#3681)
+- Fix automatic unsubscribe of non-existent folders
+- Fix double-quotes handling in recipient names
+- User configurable setting how to display contact names in list
+- Make contacts list sorting configurable for the admin/user
+- Fix parse errors in DDL files for MS SQL Server
+- Revert SORT=DISPLAY support, removed by mistake (#3664)
+- Add lost translation label in de_DE (#3654)
+- Fix drafts update issues when edited from preview pane (#3653)
+- Fix wrong variable name in rcube_ldap.php (#3643)
+- Make mime type detection based on filename extension to be case-insensitive
+- Fix failure on MySQL database upgrade from 0.7 - text column can't have default value (#3642)
+
+
+RELEASE 0.7.1
+-------------
+- Fix bug in handling of base href and inline content (#3634)
+- Fix SQL Error when saving a contact with many email addresses (#3630)
+- Fix strict email address searching if contact has more than one address
+- Remove duplicated 'organization' label (#3631)
+- Fix so editor selector is hidden when 'htmleditor' is listed in 'dont_override'
+- Fix wrong (long) label usage (#3627)
+- Fix handling of INBOX's subfolders in special folders config (#3623)
+- Add ifModule statement for setting Options -Indexes in .htaccess file (#3620)
+- Fix crashes with eAccelerator (#3608)
+- Fix searching on IMAP servers without CHARSET specifier support (#3619)
+- Fix expanding folders during drag&drop (#3611)
+- Fix wrong postgres sequence name in upgrade from 0.6
+- Fix broken CREATE INDEX queries in SQLite DDL files (#3607)
+
+RELEASE 0.7
+-----------
+- Make Roundcube render the Email Standards Project Acid Test correctly
+- Replace prompt() with jQuery UI dialog (#1603)
+- Fix navigation in messages search results
+- Improved handling of some malformed values encoded with quoted-printable (#3590)
+- Add possibility to do LDAP bind before searching for bind DN
+- Fix handling of empty <U> tags in HTML messages (#3584)
+- Add content filter for embedded attachments to protect from XSS on IE [CVE-2012-1253] (#3372)
+- Use strpos() instead of strstr() when possible (#3581)
+- Fix handling HTML entities when converting HTML to text (#3582)
+- Fix fit_string_to_size() renders browser and ui unresponsive (#3577)
+- Fix handling of invalid characters in request (#3536)
+- Fix merging some configuration options in update.sh script (#2181)
+- Fix so TEXT key will remove all HEADER keys in IMAP SEARCH (#3578)
+- Fix handling contact photo url with https:// prefix (#3575)
+- Fix possible infinite redirect on attachment preview (#3572)
+- Improved clickjacking protection for browsers which don't support X-Frame-Options headers
+- Fixed bug where similar folder names were highlighted wrong (#3345)
+- Fixed bug in handling link with '!' character in it (#3569)
+- Fixed bug where session ID's length was limited to 40 characters (#3570)
+- TinyMCE security issue: removed moxieplayer (embedding flv and mp4 is not supported anymore)
+
+RELEASE 0.7-beta
+----------------
+- Fix handling of HTML form elements in messages (#1604)
+- Fix regression in setting recipient to self when replying to a Sent message (#3101)
+- Fix listing of folders in hidden namespaces (#2895)
+- Don't consider \Noselect flag when building folders tree (#3448)
+- Fix sorting autocomplete results (#3504)
+- Add option to set session name (#2630)
+- Add option to skip alternative email addresses in autocompletion
+- Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts
+- Fix problem with parsing HTML message body with non-unicode characters (#3312)
+- Add option to define matching method for addressbook search (#2720, #3378)
+- Make email recipients separator configurable
+- Fix so folders with \Noinferiors attribute aren't listed in parent selector
+- Fix handling of curly brackets in URLs (#3555)
+- Fix handling of dates (birthday/anniversary) in contact data (#3552)
+- Fix error on opening searched LDAP contact (#3550)
+- Fix redundant line break in flowed format (#3551)
+- Fix IDN address validation issue (#3544)
+- Fix JS error when dst_active checkbox doesn't exist (#3540)
+- Autocomplete LDAP records when adding contacts from mail (#3498)
+- Plugin API: added 'ready' hook (#3492)
+- Ignore DSN request when it isn't supported by SMTP server (#3300)
+- Make sure LDAP name fields aren't arrays (#3523)
+- Fixed imap test to non-default port when using ssl (#3532)
+- Force all files to be overwritten when updating (#3531)
+- Fix issue where it wasn't possible to change list view mode in folder manager for INBOX (#3522)
+- Fix namespace handling in special folders settings (#3527)
+- Disable time limit for CLI scripts (#3524)
+- Fix misleading display when chaning editor type (#3519)
+- Add loading indicator on contact delete
+- Fix bug where after delete message rows can be added to the list of another folder (#3263)
+- Add notice on autocompletion that not all records were displayed
+- Add option 'searchonly' for LDAP address books
+- Add Priority filter to the messages list
+- Cache synchronization using QRESYNC/CONDSTORE
+- Trigger 'new_messages' hook for all checked folders (#3503)
+- Make date/time format user configurable; drop 'date_today' config option
+- Fix setting title for truncated subject in IE (#3141)
+- Fix displaying multipart/alternative messages with only one part (#3400)
+- Rewritten messages caching:
+  Indexes are stored in a separate table, so there's no need to store all messages in a folder
+  Added threads data caching
+  Flags are stored separately, so flag change doesn't cause DELETE+INSERT, just UPDATE
+- Improved FETCH response handling
+- Improvements in response tokenization method
+- Use 'From' and 'To' labels instead of 'Sender' and 'Recipient'
+- Fix username case-insensitivity issue in MySQL (#3462)
+- Addressbook Saved Searches
+- Added spellchecker exceptions dictionary (shared or per-user)
+- Added possibility to ignore words containing caps, numbers, symbols (spellcheck_ignore_* options)
+- Added 'priority' column on messages list (#2884)
+- Localize forwarded message header (#3487)
+
+RELEASE 0.6
+-----------
+- Fix bug where the last identity is used on reply (#3516)
+- Fix locked folder rename option on servers supporting RFC2086 only (#3508)
+- Fix session race conditions when composing new messages
+- Fix encoding of LDAP contacts identifiers (#3501)
+- jQuery 1.6.4
+- Fix handling of binary attachments encoded with quoted-printable (#3494)
+- Fix text-overflow:ellipsis issues on messages list in FF7 and Webkit (#3490)
+- Fix handling of links with IP address
+- Fix compacting folder resets message list filter (#3499)
+
+RELEASE 0.6-rc
+----------------
+- Send X-Frame-Options headers to protect from clickjacking (#3079)
+- Fallback to mail_domain in LDAP variable replacements; added 'host' to 'user_create' hook arguments (#3464)
+- Fixed wrong vCard type parameter mobile (#3496)
+- Fixed vCard WORKFAX issue (#3476)
+- Add vCard's Profile URL support (#3491)
+- jQuery 1.6.3
+- Fix imap_cache setting to values other than 'db' (#3489)
+- Fix handling of attachments inside message/rfc822 parts (#3466)
+- Make list of mimetypes that open in preview window configurable (#3175)
+- Added plugin hook 'message_part_get' for attachment downloads
+- Added unique connection identifier to IMAP debug messages
+- Fix image type check for contact photo uploads
+
+RELEASE 0.6-beta
+----------------
+- Fixed selecting identity on reply/forward (#3434)
+- Add option to hide selected LDAP addressbook on the list
+- Add client-side checking of uploaded files size
+- Add newlines between organization, department, jobtitle (#3468)
+- Recalculate date when replying to a message and localize the cite header (#3212)
+- Fix handling of email addresses with quoted local part (#3401)
+- Fix EOL character in vCard exports (#3357)
+- Added optional "multithreading" autocomplete feature
+- Plugin API: Added 'config_get' hook
+- Fixed new_user_identity plugin to work with updated rcube_ldap class (#3443)
+- Plugin API: added folder_delete and folder_rename hooks
+- Added possibility to undo last contact delete operation
+- Fix sorting of contact groups after group create (#3258)
+- Add optional textual upload progress indicator (#2330)
+- Fix parsing URLs containing commas (#3425)
+- Added vertical splitter for books/groups list in addressbook (#3389)
+- Improved namespace roots handling in folder manager
+- Added searching in all addressbook sources
+- Added addressbook source selection in contacts import
+- Implement LDAPv3 Virtual List View (VLV) for paged results listing
+- Use 'address_template' config option when adding a new address block (#3406)
+- Added addressbook advanced search
+- Add popup with basic fields selection for addressbook search
+- Case-insensitive matching in autocompletion (#3398)
+- Added option to force spellchecking before sending a message (#1862)
+- Fix handling of "<" character in contact data, search fields and folder names (#3349)
+- Fix saving "<" character in identity name and organization fields (#3349)
+- Added option to specify to which address book add new contacts
+- Added plugin hook for keep-alive requests
+- Store user preferences in session when write-master is not available and session is stored in memcache, write them later
+- Improve performence of folder manager operations
+- Fix default_port option handling in Installer when config.inc.php file exists (#3390)
+- Removed option focus_on_new_message, added newmail_notifier plugin
+- Added general rcube_cache class with Memcache and APC support
+- Improved caching performance by skipping writes of unchanged data
+- Option enable_caching replaced by imap_cache and messages_cache options
+- Fix WORKFAX saving in address book (#3380)
+- Add forward-as-attachment feature
+- jQuery-1.6.2 (#5158, #3154)
+- Improve display name composition when saving contacts (#3153)
+- Fix problems with subfolders of INBOX folder on some IMAP servers (#3247)
+- Fix handling of folders that doesn't belong to any namespace (#3184)
+- Enable multiselection for attachments uploading in capable browsers (#2266)
+- Add possibility to change HTML editor configuration by skin
+- Fix a bug where selecting too many contacts would produce too large URI request (#3369)
+- Improve performance by including files with absolute path (#3337)
+- Move folder name truncation to client/skin (#1822)
+- Added plugin hook for request token creation
+- Replace LDAP vars in group queries (#3329)
+- Fix vcard folding with uncode characters (#3353)
+- Keep all submitted data if contact form validation fails (#3350)
+- Handle uncode strings in rcube_addressbook::normalize_string() (#3351)
+- Fix handling of debug_level=4 in ajax requests (#3327)
+- Enable TinyMCE's contextmenu (#3062)
+- Allow multiple concurrent compose sessions
+- New config option for custom logo
+- Allow skins to define/override texts with <roundcube:label />
+- Add simple ACL rights/namespace handling in folder manager
+- Force IE to send referers (#3306)
+- Better display of vcard import results (#1861)
+- Improved vcard import
+- Interactive update script with improved DB schema check
+- Fix problem with contactgroupmembers table creation on MySQL 4.x, add index on contact_id column
+- Add LDAP SASL bind and proxy authentication (#2810)
+- Replying to a sent message puts the old recipient as the new recipient (#3101)
+- Fulltext search over (almost) all data for contacts
+- Extend address book with rich contact information
+
+RELEASE 0.5.4
+-------------
+- Fix XSS vulnerability in UI messages [CVE-2011-2937] (#3469)
+
+RELEASE 0.5.3
+-------------
+- Fix identities "reply-to" and "bcc" fields have a bogus value when left empty (#3405)
+- Fix issue which cases IMAP disconnection when encrypt() method was used (#3374)
+- Fix some CSS issues in Settings for Internet Explorer 
+- Fixed handling of folder with name "0" in folder selector
+- Fix bug where messages were deleted instead moved to trash folder after Shift key was used (#3376)
+- Fix relative URLs handling according to a <base> in HTML (#3368)
+- Fix handling of top-level domains with more than 5 chars or unicode chars (#3366)
+- Fix usage of non-standard HTTP error codes (#3297)
+- Fix PHP warning on mistaken in_array() usage (#3375)
+
+RELEASE 0.5.2
+-------------
+- TinyMCE 3.4.2 now compatible with IE9
+- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#3332)
+- Fix bug where template name without plugin prefix was used in render_page hook
+- Support 'abort' and 'result' response in 'preferences_save' hook, add error handling
+- Fix bug where some content would cause hang on html2text conversion (#3348)
+- Improve space-stuffing handling in format=flowed messages (#3346)
+- Fix bug where some dates would produce SQL error in MySQL (#3342)
+- Added workaround for some IMAP server with broken STATUS response (#3344)
+- Fix bug where default_charset was not used for text messages (#3328)
+- Stateless request tokens. No keep-alive necessary on login page (#3325)
+- Force names of unique constraints in PostgreSQL DDL
+- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly
+- Remove redundant DELETE query (for old session deletion) on login
+- Get around unreliable rand() and mt_rand() in session ID generation (#2516)
+- Fix some emails are not shown using Cyrus IMAP (#3316)
+- Fix handling of mime-encoded words with non-integral number of octets in a word (#3301)
+- Fix parsing links with non-printable characters inside (#3305)
+- Fixed de_CH Localization bugs (#3279)
+- Add variable for 'Today' label in date_today option (#2394)
+- Fix dont_override setting does not override existing user preferences (#3205)
+- Use only one from IMAP authentication methods to prevent login delays (1487784)
+- Support strftime format in date_today option
+- Fix SQL query in rcube_user::query() so it uses index on MySQL again
+- Removed redundant </form> tags from contact add/edit pages
+- Fix CSS error in contact details screen on IE7 (#3281)
+
+RELEASE 0.5.1
+-------------
+- Fix handling of attachments with invalid content type (#3275)
+- Add workaround for DBMail's bug http://www.dbmail.org/mantis/view.php?id=881 (#3274)
+- Use IMAP's ID extension (RFC2971) to print more info into debug log
+- Security: add optional referer check to prevent CSRF in GET requests
+- Fix email_dns_check setting not used for identities/contacts (#3251)
+- Fix ICANN example addresses doesn't validate (#3253)
+- Security: protect login form submission from CSRF [CVE-2011-1491]
+- Security: prevent from relaying malicious requests through modcss.inc [CVE-2011-1492]
+- Fix handling of non-image attachments in multipart/related messages (#3261)
+- Fix IDNA support when IDN/INTL modules are in use (#3253)
+- Fix handling of invalid HTML comments in messages (#3269)
+- Fix parsing FETCH response for very long headers (#3264)
+- Fix add/remove columns in message list when message_sort_order isn't set (#3262)
+- Check mime headers before attempt to parse them (#3256)
+- Quote header values in show_additional_headers plugin (#3255)
+- Fix settings UI on IE 6 (#3246)
+- Remove double borders in folder listing (#3236)
+- Separate full message headers UI element from headers table (#3238)
+- Add part MIME ID to message_part_* hooks (#3241) 
+- Improve parsing of MS Outlook vCards (#3239)
+- Updated PEAR::Net_Socket to 1.0.10
+- Updated PEAR::Net_IDNA2 to 0.1.1
+- Fix handling of comments inside an email address spec. (#3210)
+- Show full mail subject as title when hovering a cut subject link (#3141)
+- Fix randomly disappearing folders list in IE (#3231)
+- Fix list column add/removal in IE (#3230)
+- Fix login redirect issues (#3221)
+- Require PHP 5.2.1 or greater
+- Fix %h/%z variables in username_domain option (#3228)
+- Workaround for setting charset in case of malformed bodystructure response (#3227)
+- Fix impossible to subscribe to protected folders (#3199)
+- Fix setting timezone in Preferences (#3232)
+
+RELEASE 0.5
+-----------
+- Fix double-login/session issue (#3124)
+- Wrap HTML parts with <html><body> and add Doctype declaration (#3119)
+- Make rcube_autoload silently skip unknown classes (#3128)
+- Fix charset detection in vcards with encoded values (#1934)
+- Better CSS cursors for splitters (#2954)
+- Show the same message only once (#3186)
+- Fix namespaces handling (#3192)
+- Add handling of multifolder METADATA/ANNOTATION responses
+- Fix handling of INBOX when personal namespace prefix is non-empty (#3200)
+- Fix handling square brackets in links (#3209)
+- Add description of 'use_https' option in main.inc.php.dist file
+
+RELEASE 0.5-RC
+--------------
+- Plugin API: Add 'pass' argument in 'authenticate' hook (#3147)
+- Fix attachments of type message/rfc822 are not listed on attachments list
+- Add 'login_lc' config option for case-insensitive authentication (#3131)
+- Fix window is blur'ed in IE when selecting a message (#3161)
+- Fix cursor position on compose form in Webkit browsers (#2796)
+- Fix setting charset of attachment filenames (#3136)
+- Allow setting autocomplete attribute for all inputs separately (#3158)
+- New Folder Manager UI
+- Fix invalid Request when creating a folder (#3165)
+- Add folder size and quota indicator in folder manager (#2112)
+- Add possibility to move a subfolder into root folder (#2890)
+- Fix copying all messages in a folder copies only messages from current page
+- Improve performance of moving or copying of all messages in a folder
+- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1657)
+- Improve performance of folder rename and delete actions
+- Better support for READ-ONLY and NOPERM responses handling (#3108)
+- Add confirmation message on purge/expunge command response
+- Fix handling of untagged responses for AUTHENTICATE command (#3171)
+- Add username and IP address to log message on unsuccessful login (#3176)
+- Improved Mail-Followup-To and Mail-Reply-To headers handling
+- Fix charset conversion for text attachments without charset specification (#3181)
+
+RELEASE 0.5-BETA
+----------------
+- Make session data storage more robust against garbage session data (#3148)
+- Config option for autocomplete on login screen
+- Allow plugin templates to include local files (#3146)
+- List groups in address detail view and allow to subscribe/unsubscribe from there (#2862)
+- Messages caching: performance improvements, fixed syncing, fixes related with #2857
+- Add link to identities in compose window (#2843)
+- Add Internationalized Domain Name (IDNA) support (#729)
+- Add option to automatically send read notifications for known senders (#2199)
+- Add option to "Return receipt" will be always checked (#2571)
+- Fix HTML to plain text conversion doesn't handle citation blocks (#2992)
+- Use custom sorting when SORT is disabled by IMAP admin (#3020)
+- Allow setting some washtml options from plugin (#2727)
+- Add option do bind for an individual LDAP address book (#3048)
+- Change reply prefix to display email address only if sender name doesn't exist (#2709)
+- Plugin API: improved 'abort' flag handling, added 'result' item in some hooks (#2988)
+- Fix mailto optional params in plain text messages aren't handled (#3071)
+- Add Reply-to-List feature (#977)
+- Add Mail-Followup-To/Mail-Reply-To support (#1937)
+- Fix confirmation message isn't displayed after sending mail on Chrome (#2437)
+- Fix keyboard doesn't work with autocomplete list with Chrome (#3073)
+- Improve tabs to fixed width and add tabs in identities info (#3030)
+- Add unique index on users.username+users.mail_host
+- Make htmleditor option more consistent and add option to use HTML on reply to HTML message (#2164)
+- Use empty envelope sender address for message disposition notifications (RFC 2298.3)
+- Support SMTP Delivery Status Notifications - RFC 3461 (#2409)
+- Use css sprite image for messages list
+- Add (different) attachment icon for messages of type multipart/report (#2426)
+- Prevent from inserting empty link when composing HTML message (#3007)
+- Add caching support in id2uid and uid2id functions (#3065)
+- Add SASL proxy authentication for SMTP (#2811)
+- Improve displaying of UI messages (#3033)
+- Fix double e-mail filed in identity form (#3088)
+- Display IMAP errors for LIST/THREAD/SEARCH commands (#2981)
+- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC 2088)
+- Add separate column for message status icon (#2788)
+- Add ACL extension support into IMAP classes (RFC 4314)
+- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore)
+- Add METADATA extension support into IMAP classes (RFC 5464)
+- Fix decoding of e-mail address strings in message headers (#3097)
+- Fix handling of attachments when Content-Disposition is not inline nor attachment (#3086)
+- Improve performance of unseen messages counting (#3090)
+- Improve performance of messages counting using ESEARCH extension (RFC4731)
+- Add LIST-STATUS support in rcube_imap_generic class (RFC 5819)
+- Add SASL-IR support in IMAP (RFC 4959)
+- Add LOGINDISABLED support (RFC 2595)
+- Add support for AUTH=PLAIN in IMAP authentication
+- Re-implemented SMTP proxy authentication support
+- Add support for IMAP proxy authentication (#2808)
+- Add support for AUTH=DIGEST-MD5 in IMAP (RFC 2831)
+- Fix parent folder with unread subfolder not bold when message is open (#3104)
+- Add basic IMAP LIST's \Noselect option support
+- Add support for selection options from LIST-EXTENDED extension (RFC 5258)
+- Don't list subscribed but non-existent folders (#2474)
+- Fix handling of URLs with tilde (~) or semicolon (;) character (#3110, #3111)
+- Plugin API: added 'contact_form' hook
+- Add SORT=DISPLAY support (RFC 5957)
+- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
+- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property
+- Improve performance of setting IMAP flags using .SILENT suffix
+- Improve performance of message cache status checking with skip_disabled=true
+- Support contact's email addresses up to 255 characters long (#3116)
+- Add option to place replies in the folder of the message being replied to (#2248)
+- Add missing confirmation/error messages on contact/group/message actions (#2935)
+- Add 'loading' message on message move/copy/delete/mark actions
+- Improve responsiveness of messages displaying (#3039)
+- Add option for minimum length of autocomplete's string (#2625)
+- Fix operations on messages in unsubscribed folder (#3126)
+- Add support for shared folders (#525)
+- Fix handling of folders with name "0" (#3133)
+- Fix handling of folders with "<>" characters in name
+- jQuery 1.4.4
+- Fix handling of HTML entity strings in plain text messages
+- Fix focused elements aren't unfocused when clicking on the list (#3137)
+- Fix error in MSSQL DDL scripts (#3130)
+- Lock submit button in onsubmit event on login page (#3078)
+- Don't set attachment's charset in Content-type header (#3136)
+- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#2448)
+- Add workaround for MSOE's multipart/related messages with non-related attachments
+
+RELEASE 0.4.2
+-------------
+- Fix handling of backslash as IMAP delimiter
+- Fix charset replacement in HTML message bodies (#3067)
+- Fix: contact group input is empty when using rename action more than once on the same group record
+- Fix "Server Error! (Not Found)" when using utils/save-pref action (#3069)
+- Fix handling of Thunderbird's vCards (#3070)
+
+RELEASE 0.4.1
+-------------
+- Fix space-stuffing in format=flowed messages (#3064)
+- Fix msgexport.sh now using the new imap wrapper
+- Avoid displaying password on shell (#3010)
+- Only lower-case user name if first login attempt failed (#2600)
+- Make alias setting in squirrelmail_usercopy plugin configurable (patch by pommi, #3056)
+- Prevent from saving a non-existing skin path in user prefs (#3004)
+- Improve handling of single-part messages with bogus BODYSTRUCTURE (#2976)
+- Fix path to SQL files when using pgsql/mysqli/sqlsrv drivers (#2979)
+- Fix upgrade script for SQLite (#2980)
+- Fixes in SQL init script + added update script for MSSQL database
+- Remove redundant date in syslog messages (#3008)
+- Fix contacts list page controls when a group is selected (#3009)
+- Fix SMTP test in Installer (#3014)
+- Fix "Select all" causes message to be opened in folder with exactly one message (#2987)
+- Fix Tab key doesn't work in HTML editor in Google Chrome (#2995)
+- Fix TinyMCE uses zh_CN when zh_TW locale is set (#2998)
+- Fix TinyMCE buttons are hidden in Opera (#2993)
+- Fix JS error on IE when trying to send HTML message with enabled spellchecker (#3006)
+- Display inline images with known extensions and non-image content-type (#3002)
+- Fix "Threaded" checkbox after subfolder creation (#2997)
+- Fix timezone string in sent mail (#3021)
+- Show disabled checkboxes for protected folders instead of dots (#1898)
+- Added fieldsets in Identity form, added 'identity_form' hook
+- Re-added 'Close' button in upload form (#2999, #2917)
+- Fix handling of charsets with LATIN-* label
+- Fix messages background image handling in some cases (#3043)
+- Fix format=flowed handling (#3042)
+- Fix when IMAP connection fails in 'get' action session shouldn't be destroyed (#3046)
+- Fix list_cols is not updated after column dragging (#3050)
+- Support %z variable in host configuration options (#3054)
+
+RELEASE 0.4
+-----------
+- Fix disappearing upload form disappears when user selects a file on Safari (#2917)
+- Don't replace error messages with loading info (#2534)
+- Fix JS errors on compose mode switch (#2952)
+- Fix message structure parsing when it lacks optional fields (#2960)
+- Include all recipients in sendmail log
+- Support HTTP_X_FORWARDED_PROTO header for HTTPS detecting (#2950)
+- Fix default IMAP port configuration (#2948)
+- Create Sent folder when starting to compose a new message (#2900)
+- Fix handling of messages with Content-Type: application/* and no filename (#840)
+- Improved compose screen: resizable body and attachments list, vertical splitter, options menu
+- Fix RC forgets search results (#722)
+- TinyMCE 3.3.7
+- Improve parsing of styled empty tags in HTML messages (#2908)
+- Add %dc variable support in base_dn/bind_dn config (#2881)
+- Add button to hide/unhide the preview pane (#955)
+- Fix no-cache headers on https to prevent content caching by proxies (#2897)
+- Fix attachment filenames broken with TNEF decoder using long filenames (#2894)
+- Use user's timezone in Date header, not server's timezone (#2393)
+- Add option to set separate footer for HTML messages (#2784)
+- Add real SMTP error description to displayed error messages (#2233)
+- Fix some IMAP errors handling when opening the message (#1848)
+- Fix related parts aren't displayed when got mimetype other than image/* (#2629)
+- Multiple identity and database support for squirrelmail_usercopy plugin (#2686)
+- Support dynamic hostname (%d/%n) variables in configuration options (#1843)
+- Add 'messages_list' hook (#2504)
+- Add request* event triggers in http_post/http_request (#2340)
+- Fix use RFC-compliant line-delimiter when saving messages on IMAP (#2828)
+- Add 'imap_timeout' option (#2869)
+- Fix forwarding of messages with winmail attachments
+- Fix handling of uuencoded attachments in message body (#2163)
+- Added list_mailboxes hook in rcube_imap::list_unsubscribed() (#2791)
+- Fix wrong message on file upload error (#2839)
+- Add support for data URI scheme [RFC2397] (#2851)
+- Added 'actionbefore', 'actionafter', 'responsebefore', 'responseafter' events
+- Fix double-addition of e-mail domain to content ID in HTML images
+- Read and send messages with format=flowed (#1052), fixes word wrapping issues (#2703)
+- Fix duplicated attachments when forwarding a message (#2670)
+- Fix message/rfc822 attachments containing only attachments are not parsed properly (#2854)
+- Fix %00 character in winmail.dat attachments names (#2850)
+- Fix handling errors of folder deletion (#2821)
+- Parse untagged CAPABILITY response for LOGIN command (#2853)
+- Renamed all php-cli scripts to use .sh extension
+- Some files from /bin + spellchecking actions moved to the new 'utils' task
+- Added thread tree icons
+- Extend contact groups support (#2802)
+- Fix check-recent action issues and performance (#2690)
+- Fix messages order after checking for recent (#1249)
+- Fix autocomplete shows entries without email (#2640)
+- Fix listupdate event doesn't trigger on search response (#2824)
+- Fix select_all_mode value after selecting a message (#2834)
+- Set focus to editor on reply in HTML mode (#2768)
+- Fix composing in HTML jumps cursor to body instead of recipients (#2796)
+- Allow columns order change per user - drag&drop (#2124)
+- Add References header in read receipt (#2801)
+- Fix database constraint violation when opening a message (#2814)
+- Add 'loading' message while login is in progress (#2790)
+- Fix quota_zero_as_unlimited (#2786)
+- Fix folder subscription checking (#2804)
+- Fix INBOX appears (sometimes) twice in mailbox list (#2794)
+- Fix listing of attachments of some types e.g. "x-epoc/x-sisx-app" (#2779)
+- Fix DB Schema checking when some db_table_* options are not set (#2780)
+
+RELEASE 0.4-beta
+----------------
+- Add sizelimit and timelimit variables in LDAP config (#2704)
+- Hide IMAP host dropdown when single host is defined (#2553)
+- Add images pre-loading on login page (#623)
+- Add HTTP_X_REAL_IP and HTTP_X_FORWARDED_FOR to successful logins log (#2634)
+- Fix setting spellcheck languages with extended codes (#2747)
+- Fix messages list scrolling in FF3.6 (#2657)
+- Fix quicksearch input focus (#2770)
+- Always set changed date when flagging a DB record as deleted + provide a cleanup script
+- Fix address book/group selection (#2760)
+- Assign newly created contacts to the active group (#2764)
+- Added option not to mark messages as read when viewed in preview pane (#1513)
+- Allow plugins modify the Sent folder when composing (#2708)
+- Added optional (max_recipients) support to restrict total number of recipients per message (#1167)
+- Re-organize editor buttons, add blockquote and search buttons
+- Make possible to write inside or after a quoted html message (#1878)
+- Fix bugs on unexpected IMAP connection close (#2449, #2507)
+- Iloha's imap.inc rewritten into rcube_imap_generic class
+- Added contact groups in address book (not finished yet)
+- Added PageUp/PageDown/Home/End keys support on lists (#2627)
+- Added possibility to select all messages in a folder (#1312)
+- Added 'imap_force_caps' option for after-login CAPABILITY checking (#2087)
+- Password: Support dovecotpw encryption
+- TinyMCE 3.3.1
+- Implemented messages copying using drag&drop + SHIFT (#863)
+- Improved performance of folders operations (#2689)
+- Fix blocked.gif attachment is not attached to the message (#2685)
+- Managesieve: import from Horde-INGO
+- Managesieve: support for more than one match (#2362)
+- Managesieve: support for selectively disabling rules within a single sieve script (#2198)
+- Threaded message listing now available
+- Added sorting by ARRIVAL and CC
+- Message list columns configurable by the user
+- Removed 'index_sort' option, now we're using empty 'message_sort_col' for this
+- virtuser_query: support other identity data (#2413)
+- Options virtuser_* replaced with virtuser_* plugins
+- Plugin API: Implemented 'email2user' and 'user2email' hooks
+- Fix forwarding message omits CC header (#2538)
+- Add 'default_charset' option to user preferences (#1855)
+- Add 'delete_always' option to user preferences
+- Support/Require tls:// prefix in 'smtp_server' option for TLS connections
+- Fix inconsistent behaviour of 'delete_always' option (#2533)
+- Fix deleting all messages from last list page (#2528)
+- Flag original messages when sending a draft (#2458)
+- Changed signature separator when top-posting (#2555)
+- Let the admin define defaults for search modifiers (#2211)
+- Fix long e-mail addresses validation (#2641)
+- Remember search modifiers in user prefs (#2411)
+- Added force_7bit option to force MIME encoding of plain/text messages (#2679)
+- Use case sensitive check when checking for default folders (#2567)
+- Fix checking for new mail: now checks unseen count of inbox (#2123)
+- Improve performance by avoiding unnecessary updates to the session table (#2552)
+- Fix invalid <font> tags which cause HTML message rendering problems (#2687)
+- Fix CVE-2010-0464: Disable DNS prefetching (#2639)
+- Fix Received headers to behave better with SpamAssassin (#2682)
+- Password: Make passwords encoding consistent with core, add 'password_charset' global option (#2658)
+- Fix adding contacts SQL error on mysql (#2645)
+- Squirrelmail_usercopy: support reply-to field (#2678)
+- Fix IE spellcheck suggestion popup issue (#2656)
+- Fix email address auto-completion shows regexp pattern (#2498)
+- Fix merging of configuration parameters: user prefs always survive (#2584) 
+- Fix quota indicator value after folder purge/expunge (#2671)
+- Fix external mailto links support for use as protocol handler (#2328)
+- Fix attachment excessive memory use, support messages of any size (#1245)
+- Fix setting task name according to auth state
+- Password: fix vpopmaild driver (#2662)
+- Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#2659)
+- Fix quoted text wrapping when replying to an HTML email in plain text (#897)
+- Fix handling of extended mailto links (with params) (#2573)
+- Fix sorting by date of messages without date header on servers without SORT (#2521)
+- Fix inconsistency when not using default table names (#2652)
+- Fix folder rename/delete buttons do not appear on creation of first folder (#2653)
+- Fix character set conversion fails on systems where iconv doesn't accept //IGNORE (#2590)
+- Log in performance: Create default folders on first login only
+- Import contacts into the selected address book (by Phil Weir)
+- Add support for MDB2's 'sqlsrv' driver (#2602)
+- Use jQuery-1.4
+- Removed problematic browser-caching of messages
+- Fix incompatybility with suhosin.executor.disable_emodifier (#2549)
+- Use PLAIN auth when CRAM fails and imap_auth_type='check' (#2587)
+- Fix removal of <title> tag from HTML messages (#2629)
+- Fix 'force_https' to specified port when URL contains a port number (#2612)
+- Fix to-text converting of HTML entities inside b/strong/th/hX tags (#2621)
+- Bug in spellchecker suggestions when server charset != UTF8 (#2607)
+- Managesieve: Fix requires generation for multiple actions (#2603)
+- Fix LDAP problem with special characters in RDN (#2548)
+- Improved handling of message parts of type message/rfc822
+- Plugin API: added 'quota' hook
+- Fix parsing conditional comments in HTML messages (#2569)
+- Use built-in json_encode() for proper JSON format in AJAX replies
+- Allow setting only selected params in 'message_compose' hook (#2543)
+- Plugin API: added 'message_compose_body' hook (#2520)
+- Fix counters of all folders are checked in 'getunread' action  with check_all_folders disabled (#2399)
+- Fix displaying alternative parts in messages of type message/rfc822 (#2488)
+- Fix possible messages exposure when using Roundcube behind a proxy (#2516)
+- Fix unicode para and line separators in javascript response (#2542)
+- Additional_message_headers: allow unsetting headers, support plugin's config file (#2505)
+- Fix displaying of hidden directories in skins list (#2535)
+- Fix open_basedir restriction error when reading skins list (#2537)
+- Fix pasting from Office apps into html editor (#2508)
+- Fix empty <a> tags parsing (#2509)
+- Don't cut off attachment names when using non-RFC2231 encoding (#1912)
+- Allow inserting signatures above replied message body (#991)
+- Managesieve 2.0: multi-script support
+- Fix imap_auth_type regression (#2502)
+
+RELEASE 0.3.1
+------------------
+- Specify toolbar container in compose template (#2489)
+- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#2486)
+- Avoid unnecessary page loads for selected tab (#2324)
+- Fix quota indicator issues by content generation on client-size (#2454, #2470)
+- Don't display disabled sections in Settings (#2380)
+- Added server-side e-mail address validation with 'email_dns_check' option (#2175)
+- Fix login page loading into an iframe when session expires (#2253)
+- Allow setting port number in 'force_https' option (#2373)
+- Option 'force_https' replaced by 'force_https' plugin
+- Fix IE issue with non-UTF-8 characters in AJAX response (#2422)
+- Partially fixed "empty body" issue by showing raw body of malformed message (#2427)
+- Fix importing/sending to email address with whitespace (#2467)
+- Added XIMSS (CommuniGate) driver for Password plugin
+- Fix newly attached files are not saved in drafts w/o editing any text (#2457)
+- Added attachment upload indicator with parallel upload (#2344)
+- Use default_charset for bodies of messages without charset definition (#2446)
+- Password: added cPanel driver
+- Fix return to first page from e-mail screen (#2385)
+- Fix handling HTML comments in HTML messages (#2448)
+- Fix folder/messagelist controls alignment - icons used (#2356)
+- Fix LDAP addressbook shows 'Contact not found' error sometimes (#2438)
+- Fix cache status checking + improve cache operations performance (#2384)
+- Prevent from setting INBOX as any of special folders (#2390)
+- Fix regular expression for e-mail address (#2417)
+- Fix Received header format
+- Implemented sorting by message index - added 'index_sort' option (#2240)
+- Fix dl() use in installer (#2415)
+- Added 'ldap_debug' option
+- Fix "Empty startup greeting" bug (#2369)
+- Fix setting user name in 'new_user_identity' plugin (#2405)
+- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#2289)
+- Fix all folders checking for new messages with disabled caching (#2399)
+- Support skins in 'archive' and 'markasjunk' plugins
+- Added 'html_editor' hook (#2353)
+- Fix DB constraint violation when populating messages cache (#2338)
+- Password: added password strength options (#2348)
+- Fix LDAP partial result warning (#1928)
+- Fix delete in message view deletes permanently with flag_for_deletion=true (#2382)
+- Use faster/secure mt_rand() (#2376)
+- Fix roundcube hangs on empty inbox with bincimapd (#2375)
+- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#2232)
+- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#2023)
+- Check 'post_max_size' for upload max filesize (#2372) 
+- Password Plugin: Fix %d inserts username instead of domain (#2371)
+- Fix rcube_mdb2::affected_rows() (#2366)
+
+RELEASE 0.3-stable
+------------------
+- Fix gn and givenName should be synonymous in LDAP addressbook (#2208)
+- Add mail_domain to LDAP email entries without @ sign (#1652)
+- Fix saving empty values in LDAP contact data (#2113)
+- Fix LDAP contact update when RDN field is changed (#2119)
+- Fix LDAP attributes case senitivity problems (#2155)
+- Fix LDAP addressbook browsing when only one directory is used (#2314)
+- Fix endless loop on error response for APPEND command (#2346)
+- Don't require date.timezone setting in installer (#2284)
+- Fix date sorting problem with Courier IMAP server (#2351)
+- Unselect pressed buttons on mouse up (#2283)
+- Don't set php_value error_log in .htaccess but mention in INSTALL (#2230)
+- Fix too small status/flag/attachment columns in Safari 4 (#2349)
+- Fix selection disabling while dragging splitter in webkit browsers (#2342)
+- Added 'new_messages' plugin hook (#2298)
+- Added 'logout_after' plugin hook (#2333)
+- Added 'message_compose' hook
+- Added 'imap_connect' hook (#2256)
+- Fix vcard_attachments plugin (#2326)
+- Updated PEAR::Auth_SASL to 1.0.3 version
+- Use sequence names only with PostgreSQL (#2310)
+- Re-designed User Preferences interface 
+- Fix MS SQL DDL (#2312)
+- Fix rcube_mdb2.php: call to setCharset not implemented in mssql driver (#2311)
+- Added 'display_next' option
+- Fix rcube_mdb2::unixtimestamp for MS SQL (#2308)
+- Fix HTML washing to respect character encoding
+- Fix endless loop in iil_C_Login() with Courier IMAP (#2303)
+- Fix #messagemenu display on IE (#2299)
+- Speedup UI by using sprites for (toolbar) buttons
+- Fix charset names with X- prefix handling
+- Fix displaying of HTML messages with unknown/malformed tags (#2296)
+
+RELEASE 0.3-RC1
+---------------
+- Fix import of vCard entries with params (#1857)
+- Fix HTML messages output with empty block elements (#2271)
+- Use request tokens to protect POST requests from CSRF [CVE-2009-4076, CVE-2009-4077]
+- Added hook when killing a session
+- Added hook to write_log function (#2268)
+- Performance improvements by use UID commands (#2046)
+- Fix HTML editor tabIndex setting (#2269)
+- Added 'imap_debug' and 'smtp_debug' options
+- Support strftime's format modifiers in date_* options (#1354)
+- Support %h variable in 'smtp_server' option (#2101)
+- Show SMTP errors in browser (#2233)
+- Allow WBR tag in HTML message (#2259)
+- Use spl_autoload_register() instead of __autoload (#2250)
+- Add hook for identities listing (#2257)
+- Trigger hook 'smtp_connect' when opening an SMTP connection (#2255)
+- Added config option to enforce HTTPS connections
+- Fix non-unicode characters caching in unicode database (#1209)
+- Performance improvements of messages caching
+- Fix empty Date header issue (#2229)
+- Open collapsed folders during drag & drop (#2221)
+- Fixed link text replacements (#2120)
+- Also trigger 'insertrow' events on page load (#2151)
+- No link on subject in IE browsers (#1438)
+- Fixed filename encoding according to RFC2231 (#2192)
+- Added message Edit feature (#727, #1101)
+- Fix message Etag generation for counter issues (#1996)
+- Fix messages searching on MailEnable IMAP (#2097)
+- Fixed many 'skip_deleted' issues (#2006)
+- Fixed messages list sorting on servers without SORT capability
+- Colorized signatures in plain text messages
+- Reviewed/fixed skip_deleted/read_when_deleted/flag_for_deletion options handling in UI
+- Fix displaying of big maximum upload filesize (#2205)
+- Added possibility to invert messages selection
+- After move/delete from 'show' action display next message instead of messages list (#2203)
+- Fixed problem with double quote at the end of folder name (#2200)
+- Speedup UI by using CSS sprites and etags/expires/deflate in Apache config (#1397,#2128)
+- Support UID EXPUNGE: remove only moved/deleted messages
+- Add drag cancelling with ESC key (#1036)
+- Support initial identity name from virtuser_query (#807)
+- Added message menu, removed Print and Source buttons
+- Added possibility to save message as .eml file (#2178)
+- Added 1 minute interval in autosave options (#2173)
+- Support UTF-7 encoding in messages (#2156)
+- Better support for malformed character names (#2093)
+
+RELEASE 0.3-BETA
+----------------
+- Plugin API + jQuery engine
+- Added possibility to encrypt received header, option 'http_received_header_encrypt',
+  added some more logic in encrypt/decrypt functions for security
+- Fix Answered/Forwarded flag setting for messages in subfolders
+- Fix autocomplete problem with capital letters (#2122)
+- Support UUencode content encoding (#2163)
+- Minimize chance of race condition in session handling (#1260)
+- Fix session handling on non-session SQL query error (#2078)
+- Fix html editor mode setting when reopening draft message (#2158)
+- Added quick search box menu (#1010)
+- Fix wrong column sort order icons (#2149)
+- Updated TinyMCE to 3.2.3 version
+- Fix attachment names encoding when charset isn't specified in attachment part (#1483)
+- Fix message normal priority problem (#2146)
+- Fix autocomplete spinning wheel does not disappear (#2132)
+- Added log_date_format option (#2060)
+- Fix text wrapping in HTML editor after switching from plain text to HTML (#1917)
+- Fix auto-complete function hangs with plus sign (#2141)
+- Fix AJAX requests errors handler (#1503)
+- Speed up message list displaying on IE
+- Fix read/write database recognition (#2137)
+
+RELEASE 0.2.2
+-------------
+- Fix quicksearchbox look in Chrome and Konqueror (#1380)
+- Fix UTF-8 byte-order mark removing (#1911)
+- Fix folders subscribtions on Konqueror (#1380) 
+- Fix debug console on Konqueror and Safari
+- Fix messagelist focus issue when modifying status of selected messages (#2134)
+- Support STARTTLS in IMAP connection (#1714)
+- Fix DEL key problem in search boxes (#1923)
+- Support several e-mail addresses per user from virtuser_file (#2036)
+- Fix drag&drop with scrolling on IE (#2117)
+- Fix adding signature separator in html mode (#1768)
+- Fix opening attachment marks message as read (#2131)
+- Fix 'temp_dir' does not support relative path under Windows (#1157)
+- Fix "Initialize Database" button missing from installer (#2130)
+- Fix compose window doesn't fit 1024x768 window (#1807)
+- Fix service not available error when pressing back from compose dialog (#1942)
+- Fix using mail() on Windows (#2111)
+- Fix word wrapping in message-part's <PRE>s for printing (#2118)
+- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#2062)
+- Fix double footer in HTML message with embedded images
+- Fix TNEF implementation bug (#2107)
+- Fix incorrect row id parsing for LDAP contacts list (#2116) 
+- Fix 'mode' parameter in sqlite DSN (#2106)
+
+RELEASE 0.2.1
+------------------
+- Use US-ASCII as failover when Unicode searching fails (#2097)
+- Fix errors handling in IMAP command continuations (#2097)
+- Fix FETCH result parsing for servers returning flags at the end of result (#2098)
+- Fix datetime columns defaults in mysql's DDL (#2012)
+- Fix attaching more than nine inline images (#2094)
+- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#2093)
+- Fix mime-type detection using a hard-coded map (#1735)
+- Don't return empty string if charset conversion failed (#2092)
+- Disable concurrent autocomplete query results display (#2082)
+- Fix new lines stripped from message footer (#2088)
+- Fix IE problem with mouse click autocomplete (#2080)
+- Fix html body washing on reply/forward + fix attachments handling (#2034)
+- Fix multiple recipients input parsing (#2077)
+- Fix replying to message with html attachment (#2034)
+- Use default_charset for messages without specified charset (#2027, #1484961)
+- Support non-standard "GMT-XXXX" literal in date header (#2074)
+- Added TNEF support to decode MS Outlook attachments (winmail.dat)
+- Fix "value continuation" MIME headers by adding required semicolon (#2073)
+- Fix pressing select all/unread multiple times (#2069)
+- Fix selecting all unread does not honor new messages (#2070)
+- Fix some base64 encoded attachments handling (#2071)
+- Support NGINX as IMAP backend: better BAD response handling (#2066)
+- Performance fix: don't fetch attachment parts headers twice to parse filename
+- Fix checking for recent messages on various IMAP servers (#2055)
+- Performance fix: Don't fetch quota and recent messages in "message view" mode
+- Fix displaying of alternative-inside-alternative messages (#2061)
+- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#2059)
+- Fix creation of folders with '&' sign in name
+- Fix parsing of email addresses without angle brackets (#2048)
+- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on)
+- Fix large search results on server without SORT capability (#2031)
+- Get rid of preg_replace() with eval modifier and create_function usage (#2042)
+- Bring back <base> and <link> tags in HTML messages
+- Fix XSS vulnerability through background attributes [CVE-2009-0413]
+- Fix problems with backslash as IMAP hierarchy delimiter (#1116)
+- Secure vcard export by getting rid of preg's 'e' modifier use (#2045)
+- Fix authentication when submitting form with existing session (#2037)
+- Allow absolute URLs to images in HTML messages/sigs (#2029)
+- Fix message body which contains both inline attachments and emotions
+- Fix SQL query execution errors handling in rcube_mdb2 class (#1907)
+- Fix address names with '@' sign handling (#2022)
+- Improve messages display performance
+- Fix messages searching with 'to:' modifier
+
+RELEASE 0.2-STABLE
+------------------
+- Fix mark popup in IE 7 (#1785)
+- Fix line-break issue when copy & paste in Firefox (#1832)
+- Fix autocomplete "unknown server error" (#2008)
+- Fix STARTTLS before AUTH in SMTP connection (#1415)
+- Support multiple quota values in QUOTAROOT resonse (#1999)
+- Only abbreviate file name for IE < 7 browsers (#1548)
+- Performance: allow setting imap rootdir and delimiter before connect (#1628)
+- Fix sorting of folders with more than 2 levels (#1953)
+- Fix search results page jumps in LDAP addressbook (#1689)
+- Fix empty line before the signature in IE (#1769)
+- Fix horizontal scrollbar in preview pane on IE (#1228)
+- Add Robots meta tag in login page and installer (#1385)
+- Added 'show_images' option, removed 'addrbook_show_images' (#1977)
+- Option to check for new mails in all folders (#1053)
+- Don't set client busy when checking for new messages (#1706)
+- Allow UTF-8 folder names in config (#1960)
+- Add junk_mbox option configuration in installer (#1960)
+- Do serverside addressbook queries for autocompletion (#1925)
+- Allow setting attachment col position in 'list_cols' option
+- Allow override 'list_cols' via skin (#1958)
+- Fix 'cache' table cleanup on session destroy (#1913)
+- Increase speed of session destroy and garbage clean up
+- Fix session timeout when DB server got clock skew (#1890)
+- Fix handling of some malformed messages (#1099)
+- Speed up raw message body handling
+- Better HTML entities conversion in html2text (#1916)
+- Fix big memory consumption and speed up searching on servers without SORT capability
+- Fix setting locale to tr_TR, ku and az_AZ (#1872) 
+- Use SORT for searching on servers with SORT capability
+- Added message status filter
+- Fix empty file sending (#1801)
+- Improved searching with many criterias (calling one SEARCH command)
+- Fix HTML editor initialization on IE (#1731)
+- Add warning when switching editor mode from html to plain (#1888)
+- Make identities list scrollable (#1930)
+- Fix problem with numeric folder names (#1922)
+- Added BYE response simple support to prevent from endless loops in imap.inc (#777)
+- Fix unread message unintentionally marked as read if read_when_deleted=true (#1819)
+- Remove port number from SERVER_NAME in smtp_helo_host (#1915)
+- Don't send disposition notification receipts for messages marked as 'read' (#1918)
+- Added 'keep_alive' and 'min_keep_alive' options (#1777)
+- Added option 'identities_level', removed 'multiple_identities'
+- Allow deleting identities when multiple_identities=false (#1840)
+- Added option focus_on_new_message (#1789)
+- Fix html2text class autoloading on Windows (#1904)
+- Fix html signature formatting when identity save error occurred (#1833)
+- Add feedback and set busy when moving folder (#1897)
+- Fix 'Empty' link visibility for some languages e.g. Slovak (#1889)
+- Fix messages count bar overlapping (#1703)
+- Fix adding signature in drafts compose mode (#1884)
+- Fix iil_C_Sort() to support very long and/or divided responses (#1713)
+- Fix matching case sensitivity when setting identity on reply (#1881)
+- Prefer default identity on reply
+- Fix imap searching on ISMail server (#1870)
+- Add css class for flagged messages (#1868)
+- Write username instead of id in sendmail log (#1879)
+- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1877)
+- Fix js keywords escaping in json_serialize() for IE/Opera (#1874)
+- Added bin/killcache.php script (#1839)
+- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding()
+- Fix vCard file encoding detection for non-UTF-8 strings (#1820)
+- Add 'skip_deleted' option in User Preferences (#1850)
+- Minimize "inline" javascript scripts use (#1838)
+- Fix css class setting for folders with names matching defined classes names (#1772)
+- Fix race conditions when changing mailbox
+- Fix spellchecking when switching to html editor (#1779)
+- Fix compose window width/height (#1807)
+- Allow calling msgimport.sh/msgexport.sh from any directory (#1837)
+- Localized filesize units (#1760)
+- Better handling of "no identity" and "no email in identity" situations (#1592)
+- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding eg. to be readable in MS Outlook/OE (#1743)
+- Added "advanced options" feature in User Preferences
+- Fix unread counter when displaying cached massage in preview panel (#1720)
+- Fix htmleditor spellchecking on MS Windows (#1808)
+- Fix problem with non-ascii attachment names in Mail_mime (#1700, #1576)
+- Fix language autodetection (#1812)
+- Fix button label in folders management (#1816)
+- Fix collapsed folder not indicating unread msgs count of all subfolders (#1814)
+- Fix handling of apostrophes in filenames decoded according to rfc2231
+
+RELEASE 0.2-BETA
+----------------
+- Made config files location configurable (#1664)
+- Reduced memory footprint when forwarding attachments (#1764)
+- Allow and use spellcheck attribute for input/textarea fields (#1545)
+- Added icons for forwarded/forwarded+replied messages (#1691)
+- Added Reply-To to forwarded emails (#1739)
+- Display progress message for folders create/delete/rename (#1774)
+- Smart Tags and NOBR tag support in html messages (#1780, #1748)
+- Redesign of the identities settings (#836)
+- Add config option to disable creation/deletion of identities (#1139)
+- Added 'sendmail_delay' option to restrict messages sending interval (#1135)
+- Added vertical splitter for folders list resizing
+- Added possibility to view all headers in message view
+- Fixed splitter drag/resize on Opera (#1626)
+- Fixed quota img height/width setting from template (#1396)
+- Refactor drag & drop functionality. Don't rely on browser events anymore (#1108)
+- Insert "virtual" folders in subscription list (#1333)
+- Added link to open message in new window
+- Enable export of address book contacts as vCard
+- Add feature to import contacts from vcard files (#395)
+- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1464)
+- Allowed max. attachment size now indicated in compose screen (#1523)
+- Also capture backspace key in list mode (#1186)
+- Allow application/pgp parts to be displayed (#1309)
+- Correctly handle options in mailto-links (#1671)
+- Immediately save sort_col/sort_order in user prefs (#1698)
+- Truncate very long (above 50 characters) attachment filenames when displaying
+- Allow to auto-detect client language if none set (#1095)
+- Auto-detect the client timezone (user configurable)
+- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature
+- Fix Reply-To header displaying (#1738)
+- Mark form buttons that provide the most obvious operation (mainaction)
+- Added option 'quota_zero_as_unlimited' (#1206)
+- Added PRE handling in html2text class (#1301)
+- Added folder hierarchy collapsing
+- Added options to use syslog instead of log file (#1389)
+- Added Logging & Debugging section in Installer
+- Fix In-Reply-To and References headers when composing saved draft message (#1718)
+- Fix html message charset conversion for charsets with underline (#1717) 
+- Fix buttons status after contacts deletion (#1675)
+- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1432)
+- Use current mailbox name in template (#1690)
+- Better fix for skipping untagged responses (#1694)
+- Added pspell support patch by Kris Steinhoff (#781)
+- Enable spellchecker for HTML editor (#1589)
+- Respect spellcheck_uri in tinyMCE spellchecker (#941)
+- Case insensitive contacts searching using PostgreSQL (#1692)
+- Make default imap folders configurable for each user (#1558)
+- Save outgoing mail to selectable folder (#1324581)
+- Fix hiding of mark menu when clicking th button again (#1463)
+- Use long date format in print mode (#1643)
+- Updated TinyMCE to version 3.1.0.1
+- Re-enable autocomplete attribute for login form (#1661)
+- Check PERMANENTFLAGS before saving $MDNSent flag (#1478, #1485163)
+- Added flag column on messages list (#1220)
+- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232)
+- Allow trash/junk subfolders to be purged (#1568)
+- Store compose parameters in session and redirect to a unique URL
+- Fixed CRAM-MD5 authentication (#1364)
+- Fixed forwarding messages with one HTML attachment (#1103)
+- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1439)
+- Added option to select skin in user preferences
+- Added option to configure displaying of attached images below the message body
+- Added option to display images in messages from known senders (#1204)
+- User preferences grouped in more fieldsets
+- Fix corrupted MIME headers of messages in Sent folder (#1587)
+- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124
+- Use keypress instead of keydown to select list's row (#1362)
+- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1505)
+
+RELEASE 0.2-ALPHA
+-----------------
+- Added option to disable autocompletion from selected LDAP address books (#1445)
+- TLS support in LDAP connections: 'use_tls' property (#1581)
+- Fixed removing messages from search set after deleting them (#1583)
+- imap.inc: Fixed iil_C_FetchStructureString() to handle many 
+  literal strings in response (#1483)
+- Support for subfolders in default/protected folders (#1250)
+- Disallowed delimiter in folder name (#1351)
+- Support " and \ in folder names
+- Escape \ in login (#1214)
+- Better HTML sanitization with the DOM-based washtml script (#1276)
+- Fixed sorting of folders with non-ascii characters
+- Fixed Mysql DDL for default identities creation (#1554)
+- In Preferences added possibility to configure 'read_when_deleted',
+  'mdn_requests', 'flag_for_deletion' options
+- Made IMAP auth type configurable (#683)
+- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1540)
+- Fixed attachment list on IE 6/7 (#1355)
+- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
+- Make password input fields of type password in installer (#1417)
+- Don't attempt to delete cache entries if enable_caching is FALSE (#1537)
+- Optimized messages sorting on servers without sort capability (#1535)
+- Corrected message headers decoding when charset isn't specified and improved
+  support for native languages (#1536, #1534)
+- Expanded LDAP configuration options to support LDAP server writes.
+- Installer: encode special characters in DB username/password (#1529)
+- Fixed management of folders with national characters in names (#1526, #1504)
+- Fixed identities saving when using MDB2 pgsql driver (#1525)
+- Fixed BCC header reset (#1501)
+- Improved messages list performance - patch from Justin Heesemann
+- Append skin_path to images location only when it starts with '/' sign (#1398)
+- Fix IMAP response in message body when message has no body (#1479)
+- Fixed non-RFC dates formatting (#1429)
+- Fixed typo in set_charset() (#1498)
+- Decode entities when inserting HTML signature to plain text message (#1497)
+- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
+- Fixed signature loading on Windows (#1169)
+- Added language support to HTML editing (#1401)
+- Fixed remove signature when replying (#446)
+- Fixed problem with line with a space at the end (#1440)
+- Fixed <!DOCTYPE> tag filtering (#1066)
+- Fixed <?xml> tag filtering (#1075)
+- Added sections (fieldset+label) in Settings interface
+- Mark as read in one action with message preview (#1486)
+- Deleted redundant quota reads (#1486)
+- Added options for empty trash and expunge inbox on logout (#707)
+- Removed lines wrapping when displaying message
+- Fixed month localization
+- Changed codebase to PHP5 with autoloader
+
+RELEASE 0.1.1
+-------------
+- Clear selection when selecting single item (#1461)
+- Remove hard-coded image size in skin templates (#1423)
+- Database schema improvements (dropped unnecessary indexes)
+- Fixed creating a new folder with a comma in its name (#1263)
+- Fixed sorting of messages when default mailbox is empty (#1020)
+- Improve message previewpane - less loading (#1019)
+- Fixed login form autoompletion (#1378)
+- Fixed virtuser_query option for mdb2 backend (#1409)
+- Fixed attachment resoting from Drafts when message body was empty (#1144)
+- Fixed usage of ob_gzhandler (#1390)
+- Fixed message part window in IE6 (#1211)
+- Fixed decoding of mime-encoded strings (#938)
+- Fixed some iconv/mb_string problems (#1202)
+- Correctly quote mailbox name when using in URL (#1016)
+- Fixed "headers already sent" errors (#1399)
+
+RELEASE 0.1-STABLE
+------------------
+- Added interactive installer script
+- Fix folder adding/renaming inspired by #1349
+- Localize folder name in page title (#1338)
+- Fix code using wrong variable name (#818)
+- Allow to send mail with BCC recipients only
+- condense TinyMCE toolbar down to one line, removing table buttons (#1306)
+- Add function to mark the selected messages as read/unread (#641)
+- Also do charset decoding as suggested in RFC 2231 (fix #1022)
+- Show message count in folder list and hint when creating a subfolder
+- Distinguish ssl and tls for imap connections (#1252)
+- Added some charset aliases to fix typical mis-labelling (#1185)
+- Remember decision to display images for a certain message during session (#1310)
+- Truncate attachment filenames to 55 characters due to an IE bug (#1313)
+- Make sending of read receipts configurable
+- Respect config when localize folder names (#1280)
+- Also respect receipt and priority settings when re-opening a draft message
+- Remember search results (closes #722), patch by the_glu
+- Add Received header on outgoing mail
+- Upgrade to TinyMCE 2.1.3
+- Allow inserting image attachments into HTML messages while composing (#1179)
+- Implement Message-Disposition-Notification (Receipts)
+- Fix overriding of session vars when register_globals is on (#1255)
+- Fix bug with case-sensitive folder names (#973)
+- Don't create default folders by default
+- Fixed some potential security risks (audited by Andris)
+- Only show new messages if they match the current search (#925)
+- Switch to/from when searcing in Sent folder (#1177)
+- Correctly read the References header (#1236)
+- Unset old cookie before sending a new value (#1232)
+- Correctly decode attachments when downloading them (#1235 and #1484642)
+- Suppress IE errors when clearing attachments form (#1043)
+- Log error when login fails due to auto_create_user turned off
+- Filter linked/imported CSS files (closes #844)
+- Improve message compose screen (closes #1060)
+- Select next row after removing one from list (#1063)
+
+RELEASE 0.1-RC2
+---------------
+- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#637)
+- Suppress IE errors when clearing attachments form (#1043)
+- Set preferences field in user table to NULL (#1062)
+- Log error when login fails due to auto_create_user turned off
+- Filter linked/imported CSS files (closes #844)
+- Improve message compose screen (closes #1060)
+- Select next row after removing one from list (#1063)
+- Make smtp HELO/EHLO hostname configurable (#851)
+- IPv6 Compatibility (#1023), Patch #1484373
+- Unlock interface when message sending fails (#1188)
+- Eval PHP code in template includes (if configured)
+- Show message when folder is empty. Mo more static text in table (#1068)
+- Only display unread count in page title when new messages arrived
+- Fixed wrong delete button tooltip (#785)
+- Fixed charset encoding bug (#1091)
+- Applied patch for LDAP version (#1175)
+- Improved XHTML validation
+- Fix message list selection (#1174)
+- Better fix lowercased usernames (#1120)
+- Update pngbehavior Script as suggested in #1134
+- Fixed moving/deleting messages when more than 1 is selected
+- Applied patch for LDAP contacts listing by Glen Ogilvie
+- Applied patch for more address fields in LDAP contacts (#1074)
+- Add alternative for getallheaders() (fix #1146)
+- Identify mailboxes case-sensitive
+- Sort mailbox list case-insensitive (closes #1032)
+- Fix display of multipart messages from Apple Mail (closes #823)
+- Protect AJAX request from being fetched by a foreign site (XSS)
+- Make autocomplete for loginform configurable by the skin template
+- Fix compose function from address book (closes #1089)
+- Added //IGNORE to iconv call (patch #1086, closes #821)
+- Check if mbstring supports charset (#1003 and #1004)
+- Prefer iconv over mbstring (as suggested in #1004)
+- Check filesize of template includes (#1079)
+- Fixed bug with buttons not dimming/enabling properly after switching folders
+- Fixed compose window becoming unresponsive after saving a draft (#1132)
+- Re-enabled "Back" button in compose window now that bug #1132 is fixed
+- Fixed unresponsive interface issue when downloading attachments (#1138)
+- Lowered status message time from 5 to 3 seconds to improve responsiveness
+- Raised .htaccess upload_max_filesize from 2M to 5M to differ from default php.ini
+- Increased "mailboxcontrols" mail.css width from 160 to 170px to fix non-english languages (#1140)
+- Fix status message bug #1114 with regard to #1041
+- Fix address adding bug reported by David Koblas
+- Applied socket error patch by Thomas Mangin
+- Pass-by-reference workarround for PHP5 in sendmail.inc
+- Fixed buggy imap_root settings (closes #1056)
+- Prevent default events on subject links (#1071)
+- Use HTTP-POST requests for actions that change state
+
+RELEASE 0.1-RC1
+---------------
+- Use global filters and bind username/ for Ldap searches (#909)
+- Hide quota display if imap server does not support it
+- Hide address groups if no LDAP servers configured
+- Add link to message subjects (closes #982)
+- Better SQL query for contact listing/search (closes #1051)
+- Fixed marking as read in preview pane (closes #1048)
+- CSS hack to display attachments correctly in IE6
+- Wrap message body text (closes #901)
+- LDAP access is back in address book (closes #864)
+- Added search function for contacts
+- New Template parsing and output encoding
+- Fixed bugs #884 and #793
+- Fixed message moving procedure (closes #1013)
+- Fixed display of multiple attachments (closes #647)
+- Fixed check for new messages (closes #1015)
+- List attachments without filename
+- New session authentication: Change sessid cookie when login, authentication with sessauth cookie is now configurable.
+  Should close bugs #774 and #1484299
+- Correctly translate mailbox names (closes #993)
+- Quote e-mail address links (closes #1007)
+- Updated PEAR::Mail_mime package
+- Accept single quotes for HTML attributes when modifying message body (thanks Jason)
+- Sanitize input for new users/identities (thanks Colin Alston)
+- Don't download HTML message parts
+- Convert HTML parts to plaintext if 'prefer_html' is off
+- Correctly parse message/rfc822 parts (closes #838)
+- Also use user_id for unique key in messages table (closes #857)
+- Hide contacts drop down on blur (closes #946)
+- Make entries in contacts drop down clickable
+- Turn off browser autocompletion on login page
+- Quote <? in text/html message parts
+- Hide border around radio buttons
+- Applied patch for attachment download by crichardson (closes #943)
+- Fixed bug in Postgres DB handling (closes #852)
+- Fixed bug of invalid calls to fetchRow() in rcube_db.inc (closes #996)
+- Fixed array_merge bug (closes #997)
+- Fixed flag for deletion in list view (closes #987)
+- Finally support semicolons as recipient separator (closes ##976)
+- Fixed message headers (subject) encoding
+- check if safe mode is on or not (closes #990)
+- Show "no subject" in message list if subject is missing (closes #971)
+- Solved page caching of message preview (closes #905)
+- Only use gzip compression if configured (closes #967)
+- Fixed priority selector issue (#903)
+- Fixed some CSS issues in default skin (closes #951 and #911)
+- Prevent from double quoting of numeric HTML character references (closes #978)
+- Fixed display of HTML message attachments (closes #927)
+- Applied patch for preview caching (closes #933)
+- Added error handling for attachment uploads
+- Use multibyte safe string functions where necessary (closes #798)
+- Applied security patch to validate the submitted host value (by Kees Cook)
+- Applied security patch to validate input values when deleting contacts (by Kees Cook)
+- Applied security patch that sanitizes emoticon paths when attaching them (by Kees Cook)
+- Applied a patch to more aggressively sanitize a HTML message
+- Visualize blocked images in HTML messages
+- Fixed wrong message listing when showing search results (closes #890)
+- Show remote images when opening HTML message part as attachment
+- Improve memory usage when sending mail (closes #871)
+- Mark messages as read once the preview is loaded (closes #1484132)
+- Include smtp final response in log (closes #862)
+- Corrected date string in sent message header (closes #887)
+- Correclty choose "To" column in sent and draft mailboxes (closes #769)
+- Changed srong tooltips for message browse buttons (closes #757)
+- Fixed signature delimiter character to be standard (Bug #830)
+- Fixed XSS vulnerability (Bug #877)
+- Remove newlines from mail headers (Bug #827)
+- Selection issues when moving/deleting (Bug #837)
+- Applied patch of Clement Moulin for imap host auto-selection
+- ISO-encode IMAP password for plaintext login (Bugs #792 & #723)
+- Fixed folder name encoding in subscription list (Bug #879)
+- Fixed JS errors in identity list (Bug #885)
+- Translate foldernames in folder form (closes #879)
+- Added first and last buttons to message list, address book
+  and message detail
+- Pressing Shift-Del bypasses Trash folder
+- Enable purge command for Junk folder
+- Fetch all aliases if virtuser_query is used instead
+- Re-enabled multi select of contacts (Bug #817)
+- Enable contact editing right after creation (Bug #644)
+- Correct UTF-7 to UTF-8 conversion if mbstring is not available
+- Fixed IMAP fetch of message body (Bug #819)
+- Fixed safe_mode problems (Bug #539)
+- Fixed wrong header encoding (Bug #1483976)
+- Made automatic draft saving configurable
+- Fixed JS bug when renaming folders (Bug #799)
+- Added quota display as image (by Brett Patterson)
+- Corrected creation of a message-id
+- New indentation for quoted message text
+- Improved HTML validity
+- Fixed URL character set (Ticket #616)
+- Fixed saving of contact into MySQL from LDAP query results (Ticket #681)
+- Fixed folder renaming: unsubscribe before rename (Bug #750)
+- Finalized new message parsing (+ chaching)
+- Fixed wrong usage of mbstring (Bug #645)
+- Set default spelling language (Ticket #764)
+- Added support for Nox Spell Server
+- Re-built message parsing (Bug #422)
+  Now based on the message structure delivered by the IMAP server.
+- Fixed some XSS and SQL injection issues
+- Fixed charset problems with folder renaming
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/INSTALL	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,279 @@
+INTRODUCTION
+============
+
+This file describes the basic steps to install Roundcube Webmail on your
+web server. For additional information, please also consult the project's
+wiki page at https://github.com/roundcube/roundcubemail/wiki
+
+
+REQUIREMENTS
+============
+
+* An IMAP, HTTP and SMTP server
+* .htaccess support allowing overrides for DirectoryIndex
+* PHP Version 5.4 or greater including:
+   - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required)
+   - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
+   - Iconv, Zip, Fileinfo, Intl, Exif (recommended)
+   - LDAP for LDAP addressbook support (optional)
+   - GD, Imagick (optional thumbnails generation, QR-code)
+* PEAR and PEAR packages distributed with Roundcube or external:
+   - Mail_Mime 1.10.0 or newer
+   - Net_SMTP 1.7.1 or newer
+   - Net_Socket 1.0.12 or newer
+   - Net_IDNA2 0.1.1 or newer
+   - Auth_SASL 1.0.6 or newer
+   - Net_Sieve 1.3.2 or newer (for managesieve plugin)
+   - Crypt_GPG 1.6.0 or newer (for enigma plugin)
+   - Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode)
+* php.ini options (see .htaccess file):
+   - error_reporting E_ALL & ~E_NOTICE & ~E_STRICT
+   - memory_limit > 16MB (increase as suitable to support large attachments)
+   - file_uploads enabled (for attachment upload features)
+   - session.auto_start disabled
+   - suhosin.session.encrypt disabled
+   - mbstring.func_overload disabled
+* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database
+  or SQLite support in PHP - with permission to create tables
+* Composer installed either locally or globally (https://getcomposer.org)
+
+
+INSTALLATION
+============
+
+1. Decompress and put this folder somewhere inside your document root
+2. In case you don't use the so-called "complete" release package,
+  you have to install PHP and javascript dependencies.
+  2.1. Install PHP dependencies using composer:
+    - get composer from https://getcomposer.org/download/
+    - rename the composer.json-dist file into composer.json
+    - if you want to use LDAP address books, enable the LDAP libraries in your
+      composer.json file by moving the items from "suggest" to the "require"
+      section (remove the explanation texts after the version!).
+    - run `php composer.phar install --no-dev`
+  2.2. Install Javascript dependencies by executing `bin/install-jsdeps.sh` script.
+3. Make sure that the following directories (and the files within)
+   are writable by the webserver
+   - /temp
+   - /logs
+4. Create a new database and a database user for Roundcube (see DATABASE SETUP)
+5. Point your browser to http://url-to-roundcube/installer/
+6. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
+7. After creating and testing the configuration, remove the installer directory
+8. Check Known Issues section of this file
+
+
+CONFIGURATION HINTS
+===================
+
+IMPORTANT! Read all comments in defaults.inc.php, understand them
+and configure your installation to be not surprised by default behaviour.
+
+Roundcube writes internal errors to the 'errors' log file located in the logs
+directory which can be configured in config/config.inc.php. If you want ordinary
+PHP errors to be logged there as well, enable the 'php_value error_log' line
+in the .htaccess file and set the path to the log file accordingly.
+
+By default the session_path settings of PHP are not modified by Roundcube.
+However if you want to limit the session cookies to the directory where
+Roundcube resides you can uncomment and configure the according line
+in the .htaccess file.
+
+
+DATABASE SETUP
+==============
+
+Note: Database for Roundcube must use UTF-8 character set.
+Note: See defaults.inc.php file for examples of DSN configuration.
+
+* MySQL
+-------
+Setting up the mysql database can be done by creating an empty database,
+importing the table layout and granting the proper permissions to the
+roundcube user. Here is an example of that procedure:
+
+# mysql
+> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
+    IDENTIFIED BY 'password';
+> quit
+
+# mysql roundcubemail < SQL/mysql.initial.sql
+
+Note 1: 'password' is the master password for the roundcube user. It is strongly
+recommended you replace this with a more secure password. Please keep in
+mind: You need to specify this password later in 'config/db.inc.php'.
+
+
+* SQLite
+--------
+Versions of sqlite database engine older than 3 aren't supported.
+Database file and structure is created automatically by Roundcube.
+Make sure your configuration points to some file location and that the
+webserver can write to the file and the directory containing the file.
+
+
+* PostgreSQL
+------------
+To use Roundcube with PostgreSQL support you have to follow these
+simple steps, which have to be done as the postgres system user (or
+which ever is the database superuser):
+
+$ createuser -P roundcube
+$ createdb -O roundcube -E UNICODE roundcubemail
+$ psql -U roundcube -f SQL/postgres.initial.sql roundcubemail
+
+Note: in some system configurations you might need to add '-U postgres' to
+createuser and createdb commands.
+
+
+* Microsoft SQL Server
+----------------------
+Language/locale of the database must be set to us_english (1033). More info
+on this at https://github.com/roundcube/roundcubemail/issues/4078.
+
+
+Database cleaning
+-----------------
+To keep your database slick and clean we recommend to periodically execute
+bin/cleandb.sh which finally removes all records that are marked as deleted.
+Best solution is to install a cronjob running this script daily.
+
+
+MANUAL CONFIGURATION
+====================
+
+First of all, copy the sample configuration file config/config.inc.php.sample
+to config/config.inc.php and make the necessary adjustments according to your
+environment and your needs. More configuration options can be copied from the
+config/defaults.inc.php file into your local config.inc.php file as needed.
+Read the comments above the individual configuration options to find out what
+they do or read https://github.com/roundcube/roundcubemail/wiki/Installation
+for even more guidance.
+
+You can also modify the default .htaccess file. This is necessary to
+increase the allowed size of file attachments, for example:
+
+  php_value   upload_max_filesize     5M
+  php_value   post_max_size           6M
+
+
+SECURE YOUR INSTALLATION
+========================
+
+Access through the webserver to the following directories should be denied:
+
+  /config
+  /temp
+  /logs
+
+Roundcube uses .htaccess files to protect these directories, so be sure to
+allow override of the Limit directives to get them taken into account. The
+package also ships a .htaccess file in the root directory which defines some
+rewrite rules. In order to properly secure your installation, please enable
+mod_rewrite for Apache webserver and double check access to the above listed
+directories and their contents is denied.
+
+NOTE: In Apache 2.4, support for .htaccess files has been disabled by
+default. Therefore you first need to enable this in your Apache main or
+virtual host config by with:
+
+  AllowOverride all
+
+For non-apache web servers add equivalent configuration parameters to deny
+direct access to these private resources.
+
+It is also recommended to change the document root to <install path>/public_html
+after installation if Roundcube runs at root of a dedicated virtual host. This
+will automatically keep sensitive files out of reach for http requests.
+
+
+UPGRADING
+=========
+
+If you already have a previous version of Roundcube installed,
+please refer to the instructions in UPGRADING guide.
+
+
+OPTIMISING
+==========
+
+There are two forms of optimisation here, compression and caching, both aimed
+at increasing an end user's experience using Roundcube Webmail. Compression
+allows the static web pages to be delivered with less bandwidth. The index.php
+of Roundcube Webmail already enables compression on its output. The settings
+below allow compression to occur for all static files. Caching sets HTTP 
+response headers that enable a user's web client to understand what is static
+and how to cache it.
+
+The caching directives used are:
+ * Etags - sets at tag so the client can request is the page has changed
+ * Cache-control - defines the age of the page and that the page is 'public'
+   This enables clients to cache javascript files that don't have private 
+   information between sessions even if using HTTPS. It also allows proxies
+   to share the same cached page between users.
+ * Expires - provides another hint to increase the lifetime of static pages.
+
+For more information refer to RFC 2616.
+
+Side effects:
+-------------
+These directives are designed for production use. If you are using this in
+a development environment you may get horribly confused if your webclient
+is caching stuff that you changed on the server. Disabling the expires 
+parts below should save you some grief.
+
+If you are changing the skins, it is recommended that you copy content to 
+a different directory apart from 'default'.
+
+Apache:
+-------
+To enable these features in apache the following modules need to be enabled:
+ * mod_deflate
+ * mod_expires
+ * mod_headers
+
+The optimisation is already included in the .htaccess file in the top 
+directory of your installation.
+
+If you are using Apache version 2.2.9 and later, in the .htaccess file
+change the 'append' word to 'merge' for a more correct response. Keeping
+as 'append' shouldn't cause any problems though changing to merge will 
+eliminate the possibility of duplicate 'public' headers in Cache-control.
+
+Lighttpd:
+---------
+With Lightty the addition of Expire: tags by mod_expire is incompatible with
+the addition of "Cache-control: public". Using Cache-control 'public' is 
+used below as it is assumed to give a better caching result.
+
+Enable modules in server.modules:
+    "mod_setenv"
+    "mod_compress"
+
+Mod_compress is a server side cache of compressed files to improve its performance.
+
+$HTTP["host"] == "www.example.com" {
+
+    static-file.etags = "enable"
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails
+    etag.use-mtime = "enable"
+
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv
+    $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" {
+        setenv.add-response-header  = ( "Cache-Control" => "public, max-age=2592000")
+    }
+
+    # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress
+    # set compress.cache-dir to somewhere outside the docroot.
+    compress.cache-dir   = var.statedir + "/cache/compress"
+
+    compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")
+}
+
+
+KNOWN ISSUES
+============
+
+Installations with uw-imap server should set imap_disabled_caps = array('ESEARCH')
+in main configuration file. ESEARCH implementation in this server is broken (#1489184).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,95 @@
+Roundcube Webmail 
+=================
+[roundcube.net](http://roundcube.net)
+
+[![Build Status](https://api.travis-ci.org/roundcube/roundcubemail.svg?branch=release-1.3)](https://travis-ci.org/roundcube/roundcubemail)
+
+
+INTRODUCTION
+------------
+Roundcube Webmail is a browser-based multilingual IMAP client with an
+application-like user interface. It provides full functionality you expect
+from an email client, including MIME support, address book, folder management,
+message searching and spell checking. Roundcube Webmail is written in PHP and
+requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is
+easily extendable and the user interface is fully customizable using skins
+which are pure XHTML and CSS 2.
+
+The code is mainly written in PHP and is designed to run on a webserver.
+It includes other open-source classes/libraries from [PEAR][pear],
+an IMAP library derived from [IlohaMail][iloha] the [TinyMCE][tinymce] rich
+text editor, [Googiespell][googiespell] library for spell checking or
+the [WASHTML][washtml] sanitizer by Frederic Motte.
+
+The current default skin 'Larry' was kindly created by FLINT / Büro für
+Gestaltung, Berne, Switzerland.
+
+
+INSTALLATION
+------------
+For detailed instructions on how to install Roundcube webmail on your server,
+please refer to the INSTALL document in the same directory as this document.
+
+If you're updating an older version of Roundcube please follow the steps
+described in the UPGRADING file.
+
+
+LICENSE
+-------
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License (**with exceptions
+for skins & plugins**) as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see [www.gnu.org/licenses/][gpl].
+
+This file forms part of the Roundcube Webmail Software for which the
+following exception is added: Plugins and Skins which merely make
+function calls to the Roundcube Webmail Software, and for that purpose
+include it by reference shall not be considered modifications of
+the software.
+
+If you wish to use this file in another project or create a modified
+version that will not be part of the Roundcube Webmail Software, you
+may remove the exception above and use this source code under the
+original version of the license.
+
+For more details about licensing and the exceptions for skins and plugins
+see [roundcube.net/license][license]
+
+
+CONTRIBUTION
+------------
+Want to help make Roundcube the best webmail solution ever?
+Roundcube is open source software. Our developers and contributors all
+are volunteers and we're always looking for new additions and resources.
+For more information visit [roundcube.net/contribute][contrib]
+
+
+CONTACT
+-------
+For bug reports or feature requests please refer to the tracking system
+at [Github][githubissues] or subscribe to our mailing list.
+See [roundcube.net/support][support] for details.
+
+You're always welcome to send a message to the project admin:
+hello(at)roundcube(dot)net
+
+
+[pear]:         http://pear.php.net
+[iloha]:        http://sourceforge.net/projects/ilohamail/
+[tinymce]:      http://www.tinymce.com/
+[googiespell]:  http://orangoo.com/labs/GoogieSpell/
+[washtml]:      http://www.ubixis.com/washtml/
+[kmgerich]:     http://kmgerich.com/
+[gpl]:          http://www.gnu.org/licenses/
+[license]:      http://roundcube.net/license
+[contrib]:      http://roundcube.net/contribute
+[support]:      http://roundcube.net/support
+[githubissues]: https://github.com/roundcube/roundcubemail/issues
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql.initial.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,399 @@
+CREATE TABLE [dbo].[cache] (
+	[user_id] [int] NOT NULL ,
+	[cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[expires] [datetime] NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_shared] (
+	[cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[expires] [datetime] NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_index] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[expires] [datetime] NULL ,
+	[valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_thread] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[expires] [datetime] NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_messages] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[uid] [int] NOT NULL ,
+	[expires] [datetime] NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
+	[flags] [int] NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contacts] (
+	[contact_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[vcard] [text] COLLATE Latin1_General_CI_AI NULL ,
+	[words] [text] COLLATE Latin1_General_CI_AI NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contactgroups] (
+	[contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] 
+GO
+
+CREATE TABLE [dbo].[contactgroupmembers] (
+	[contactgroup_id] [int] NOT NULL ,
+	[contact_id] [int] NOT NULL ,
+	[created] [datetime] NOT NULL
+) ON [PRIMARY] 
+GO
+
+CREATE TABLE [dbo].[identities] (
+	[identity_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[signature] [text] COLLATE Latin1_General_CI_AI NULL, 
+	[html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[session] (
+	[sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[changed] [datetime] NULL ,
+	[ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[vars] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[users] (
+	[user_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[username] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[created] [datetime] NOT NULL ,
+	[last_login] [datetime] NULL ,
+	[failed_login] [datetime] NULL ,
+	[failed_login_counter] [int] NULL ,
+	[language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL ,
+	[preferences] [text] COLLATE Latin1_General_CI_AI NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[dictionary] (
+	[user_id] [int] ,
+	[language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[searches] (
+	[search_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[type] [tinyint] NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[system] (
+	[name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[value] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[cache_key]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[cache_key]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox],[uid]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD 
+	CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY  CLUSTERED 
+	(
+		[contact_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD 
+	CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED 
+	(
+		[contactgroup_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD 
+	CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED 
+	(
+		[contactgroup_id], [contact_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[identities] WITH NOCHECK ADD 
+	 PRIMARY KEY  CLUSTERED 
+	(
+		[identity_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[session] WITH NOCHECK ADD 
+	CONSTRAINT [PK_session_sess_id] PRIMARY KEY  CLUSTERED 
+	(
+		[sess_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[users] WITH NOCHECK ADD 
+	CONSTRAINT [PK_users_user_id] PRIMARY KEY  CLUSTERED 
+	(
+		[user_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[searches] WITH NOCHECK ADD 
+	CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED 
+	(
+		[search_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[system] WITH NOCHECK ADD 
+	CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED 
+	(
+		[name]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache] ADD 
+	CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
+	CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key],
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD 
+	CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD 
+	CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
+GO
+
+CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contacts] ADD 
+	CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id],
+	CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed],
+	CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del],
+	CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name],
+	CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email],
+	CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname],
+	CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname],
+	CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD 
+	CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
+	CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
+	CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
+	CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
+	CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contactgroups]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD 
+	CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
+	CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
+	CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[identities] ADD 
+	CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id],
+	CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del],
+	CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard],
+	CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name],
+	CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization],
+	CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email],
+	CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to],
+	CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc],
+	CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature],
+	CHECK ([standard] = '1' or [standard] = '0'),
+	CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[session] ADD 
+	CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id],
+	CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip]
+GO
+
+CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[users] ADD 
+	CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username],
+	CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host],
+	CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
+GO
+
+CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] ADD 
+	CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
+	CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type]
+GO
+
+CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] 
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
+    FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+-- Use trigger instead of foreign key (#1487112)
+-- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths."
+CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
+    AFTER DELETE AS
+    DELETE FROM [dbo].[contactgroupmembers]
+    WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
+GO
+
+INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2016112200')
+GO
+
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2009103100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,87 @@
+-- Updates from version 0.3.1
+
+ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] 
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[identities] ADD [changed] [datetime] NULL 
+GO
+
+CREATE TABLE [dbo].[contactgroups] (
+	[contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] 
+GO
+
+CREATE TABLE [dbo].[contactgroupmembers] (
+	[contactgroup_id] [int] NOT NULL ,
+	[contact_id] [int] NOT NULL ,
+	[created] [datetime] NOT NULL
+) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD 
+	CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED 
+	(
+		[contactgroup_id]
+	)  ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD 
+	CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED 
+	(
+		[contactgroup_id], [contact_id]
+	)  ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD 
+	CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
+	CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
+	CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
+	CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
+	CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE  INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD 
+	CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
+	CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
+	CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
+    FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
+    AFTER DELETE AS
+    DELETE FROM [dbo].[contactgroupmembers]
+    WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2010100600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+-- Updates from version 0.4.2
+
+DROP INDEX [IX_users_username]
+GO
+CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2011011200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,10 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE [dbo].[contacts] ADD [words] [text] COLLATE Latin1_General_CI_AI NULL 
+GO
+CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
+GO
+DELETE FROM [dbo].[messages]
+GO
+DELETE FROM [dbo].[cache]
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2011092800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,127 @@
+-- Updates from version 0.6
+
+CREATE TABLE [dbo].[dictionary] (
+    [user_id] [int] ,
+    [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,
+    [data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+CREATE  UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[searches] (
+	[search_id] [int] IDENTITY (1, 1) NOT NULL ,
+	[user_id] [int] NOT NULL ,
+	[type] [tinyint] NOT NULL ,
+	[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] WITH NOCHECK ADD 
+	CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED 
+	(
+		[search_id]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[searches] ADD 
+	CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
+	CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type],
+GO
+
+CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+DROP TABLE [dbo].[messages]
+GO
+CREATE TABLE [dbo].[cache_index] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_thread] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_messages] (
+	[user_id] [int] NOT NULL ,
+	[mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[uid] [int] NOT NULL ,
+	[changed] [datetime] NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
+	[flags] [int] NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD 
+	 PRIMARY KEY CLUSTERED 
+	(
+		[user_id],[mailbox],[uid]
+	) ON [PRIMARY] 
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD 
+	CONSTRAINT [DF_cache_index_changed] DEFAULT (getdate()) FOR [changed],
+	CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
+GO
+
+CREATE  INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD 
+	CONSTRAINT [DF_cache_thread_changed] DEFAULT (getdate()) FOR [changed]
+GO
+
+CREATE  INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD 
+	CONSTRAINT [DF_cache_messages_changed] DEFAULT (getdate()) FOR [changed],
+	CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
+GO
+
+CREATE  INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
+    FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+    ON DELETE CASCADE ON UPDATE CASCADE
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2011111600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE [dbo].[session] ALTER COLUMN [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2011121400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+-- Updates from version 0.7
+
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL
+GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2012051800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+-- Updates from version 0.8-rc
+
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
+-- Updates from version 0.8
+
+ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
+GO
+ALTER TABLE [dbo].[users] DROP COLUMN [alias]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
+
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2012080700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+-- Updates from version 0.8
+
+ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
+GO
+ALTER TABLE [dbo].[users] DROP COLUMN [alias]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2013011000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+-- Upgrades from 0.9-beta
+
+CREATE TABLE [dbo].[system] (
+    [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
+    [value] [text] COLLATE Latin1_General_CI_AI 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[system] WITH NOCHECK ADD
+    CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED
+    (
+        [name]
+    ) ON [PRIMARY]
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2013042700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2013052500.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+CREATE TABLE [dbo].[cache_shared] (
+	[cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+	[created] [datetime] NOT NULL ,
+	[data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_shared] ADD 
+	CONSTRAINT [DF_cache_shared_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE  INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
+GO
+
+CREATE  INDEX [IX_cache_shared_created] ON [dbo].[cache_shared]([created]) ON [PRIMARY]
+GO
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2013061000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+ALTER TABLE [dbo].[cache] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_shared] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_index] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_thread] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_messages] ADD [expires] [datetime] NULL
+GO
+
+UPDATE [dbo].[cache] SET [expires] = DATEADD(second, 604800, [created])
+GO
+UPDATE [dbo].[cache_shared] SET [expires] = DATEADD(second, 604800, [created])
+GO
+UPDATE [dbo].[cache_index] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+UPDATE [dbo].[cache_thread] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+UPDATE [dbo].[cache_messages] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+
+DROP INDEX [IX_cache_created]
+GO
+DROP INDEX [IX_cache_shared_created]
+GO
+ALTER TABLE [dbo].[cache_index] DROP COLUMN [changed]
+GO
+ALTER TABLE [dbo].[cache_thread] DROP COLUMN [changed]
+GO
+ALTER TABLE [dbo].[cache_messages] DROP COLUMN [changed]
+GO
+
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
+GO
+
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2014042900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2015030800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2015111100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+ALTER TABLE [dbo].[users] ADD [failed_login] [datetime] NULL
+GO
+ALTER TABLE [dbo].[users] ADD [failed_login_counter] [int] NULL
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2016081200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+ALTER TABLE [dbo].[session] DROP COLUMN [created]
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2016100900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+ALTER TABLE [dbo].[session] ALTER COLUMN [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mssql/2016112200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+DROP TABLE [dbo].[cache]
+GO
+DROP TABLE [dbo].[cache_shared]
+GO
+
+CREATE TABLE [dbo].[cache] (
+  [user_id] [int] NOT NULL ,
+  [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+  [expires] [datetime] NULL ,
+  [data] [text] COLLATE Latin1_General_CI_AI NOT NULL 
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+CREATE TABLE [dbo].[cache_shared] (
+  [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+  [expires] [datetime] NULL ,
+  [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache] ADD
+  CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
+  CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key],
+GO
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache] WITH NOCHECK ADD
+  PRIMARY KEY CLUSTERED (
+    [user_id],[cache_key]
+  ) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD
+  PRIMARY KEY CLUSTERED (
+    [cache_key]
+  ) ON [PRIMARY]
+GO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql.initial.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,212 @@
+-- Roundcube Webmail initial database structure
+
+
+/*!40014  SET FOREIGN_KEY_CHECKS=0 */;
+
+-- Table structure for table `session`
+
+CREATE TABLE `session` (
+ `sess_id` varchar(128) NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `ip` varchar(40) NOT NULL,
+ `vars` mediumtext NOT NULL,
+ PRIMARY KEY(`sess_id`),
+ INDEX `changed_index` (`changed`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `users`
+
+CREATE TABLE `users` (
+ `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `username` varchar(128) BINARY NOT NULL,
+ `mail_host` varchar(128) NOT NULL,
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `last_login` datetime DEFAULT NULL,
+ `failed_login` datetime DEFAULT NULL,
+ `failed_login_counter` int(10) UNSIGNED DEFAULT NULL,
+ `language` varchar(5),
+ `preferences` longtext,
+ PRIMARY KEY(`user_id`),
+ UNIQUE `username` (`username`, `mail_host`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `cache`
+
+CREATE TABLE `cache` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`user_id`, `cache_key`),
+ CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `cache_shared`
+
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`cache_key`),
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `cache_index`
+
+CREATE TABLE `cache_index` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `valid` tinyint(1) NOT NULL DEFAULT '0',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `cache_thread`
+
+CREATE TABLE `cache_thread` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `cache_messages`
+
+CREATE TABLE `cache_messages` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ `flags` int(11) NOT NULL DEFAULT '0',
+ CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`, `uid`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `contacts`
+
+CREATE TABLE `contacts` (
+ `contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL DEFAULT '',
+ `email` text NOT NULL,
+ `firstname` varchar(128) NOT NULL DEFAULT '',
+ `surname` varchar(128) NOT NULL DEFAULT '',
+ `vcard` longtext NULL,
+ `words` text NULL,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ PRIMARY KEY(`contact_id`),
+ CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_contacts_index` (`user_id`,`del`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+-- Table structure for table `contactgroups`
+
+CREATE TABLE `contactgroups` (
+  `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+  `user_id` int(10) UNSIGNED NOT NULL,
+  `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+  `del` tinyint(1) NOT NULL DEFAULT '0',
+  `name` varchar(128) NOT NULL DEFAULT '',
+  PRIMARY KEY(`contactgroup_id`),
+  CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
+    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  INDEX `contactgroups_user_index` (`user_id`,`del`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `contactgroupmembers` (
+  `contactgroup_id` int(10) UNSIGNED NOT NULL,
+  `contact_id` int(10) UNSIGNED NOT NULL,
+  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+  PRIMARY KEY (`contactgroup_id`, `contact_id`),
+  CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
+    REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
+    REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  INDEX `contactgroupmembers_contact_index` (`contact_id`)
+) /*!40000 ENGINE=INNODB */;
+
+
+-- Table structure for table `identities`
+
+CREATE TABLE `identities` (
+ `identity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `standard` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL,
+ `organization` varchar(128) NOT NULL DEFAULT '',
+ `email` varchar(128) NOT NULL,
+ `reply-to` varchar(128) NOT NULL DEFAULT '',
+ `bcc` varchar(128) NOT NULL DEFAULT '',
+ `signature` longtext,
+ `html_signature` tinyint(1) NOT NULL DEFAULT '0',
+ PRIMARY KEY(`identity_id`),
+ CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_identities_index` (`user_id`, `del`),
+ INDEX `email_identities_index` (`email`, `del`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `dictionary`
+
+CREATE TABLE `dictionary` (
+  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- redundant, for compat. with Galera Cluster
+  `user_id` int(10) UNSIGNED DEFAULT NULL, -- NULL here is for "shared dictionaries"
+  `language` varchar(5) NOT NULL,
+  `data` longtext NOT NULL,
+  CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
+    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  UNIQUE `uniqueness` (`user_id`, `language`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `searches`
+
+CREATE TABLE `searches` (
+ `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `type` int(3) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL,
+ `data` text,
+ PRIMARY KEY(`search_id`),
+ CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `type`, `name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+-- Table structure for table `system`
+
+CREATE TABLE `system` (
+ `name` varchar(64) NOT NULL,
+ `value` mediumtext,
+ PRIMARY KEY(`name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
+
+INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2008030300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+-- Updates from version 0.1-stable
+
+TRUNCATE TABLE `messages`;
+
+ALTER TABLE `messages`
+  DROP INDEX `idx`,
+  DROP INDEX `uid`;
+
+ALTER TABLE `cache`
+  DROP INDEX `cache_key`,
+  DROP INDEX `session_id`,
+  ADD INDEX `user_cache_index` (`user_id`,`cache_key`);
+
+ALTER TABLE `users`
+    ADD INDEX `username_index` (`username`),
+    ADD INDEX `alias_index` (`alias`);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2008040500.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+-- Updates from version 0.1.1
+
+ALTER TABLE `identities`
+    MODIFY `signature` text, 
+    MODIFY `bcc` varchar(128) NOT NULL DEFAULT '', 
+    MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '', 
+    MODIFY `organization` varchar(128) NOT NULL DEFAULT '',
+    MODIFY `name` varchar(128) NOT NULL, 
+    MODIFY `email` varchar(128) NOT NULL; 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2008060900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+-- Updates from version 0.2-alpha
+
+ALTER TABLE `messages`
+    ADD INDEX `created_index` (`created`);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2008092100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+-- Updates from version 0.2-beta (InnoDB required)
+
+ALTER TABLE `cache`
+    DROP `session_id`;
+
+ALTER TABLE `session`
+    ADD INDEX `changed_index` (`changed`);
+
+ALTER TABLE `cache`
+    ADD INDEX `created_index` (`created`);
+
+ALTER TABLE `users`
+    CHANGE `language` `language` varchar(5);
+
+ALTER TABLE `cache` ENGINE=InnoDB;
+ALTER TABLE `session` ENGINE=InnoDB;
+ALTER TABLE `messages` ENGINE=InnoDB;
+ALTER TABLE `users` ENGINE=InnoDB;
+ALTER TABLE `contacts` ENGINE=InnoDB;
+ALTER TABLE `identities` ENGINE=InnoDB;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2009090400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+-- Updates from version 0.3-stable
+
+TRUNCATE `messages`;
+
+ALTER TABLE `messages`
+    ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`);
+
+ALTER TABLE `session` 
+    CHANGE `vars` `vars` MEDIUMTEXT NOT NULL;
+
+ALTER TABLE `contacts`
+    ADD INDEX `user_contacts_index` (`user_id`,`email`);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2009103100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,52 @@
+-- Updates from version 0.3.1
+-- WARNING: Make sure that all tables are using InnoDB engine!!!
+--          If not, use: ALTER TABLE xxx ENGINE=InnoDB;
+
+/* MySQL bug workaround: http://bugs.mysql.com/bug.php?id=46293 */
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `messages` DROP FOREIGN KEY `user_id_fk_messages`;
+ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`;
+ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
+ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`;
+
+ALTER TABLE `messages` ADD CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `cache` ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `identities` ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `contacts` ALTER `name` SET DEFAULT '';
+ALTER TABLE `contacts` ALTER `firstname` SET DEFAULT '';
+ALTER TABLE `contacts` ALTER `surname` SET DEFAULT '';
+
+ALTER TABLE `identities` ADD INDEX `user_identities_index` (`user_id`, `del`);
+ALTER TABLE `identities` ADD `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `user_id`;
+
+CREATE TABLE `contactgroups` (
+  `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+  `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+  `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+  `del` tinyint(1) NOT NULL DEFAULT '0',
+  `name` varchar(128) NOT NULL DEFAULT '',
+  PRIMARY KEY(`contactgroup_id`),
+  CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
+    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  INDEX `contactgroups_user_index` (`user_id`,`del`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `contactgroupmembers` (
+  `contactgroup_id` int(10) UNSIGNED NOT NULL,
+  `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+  PRIMARY KEY (`contactgroup_id`, `contact_id`),
+  CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
+    REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
+    REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) /*!40000 ENGINE=INNODB */;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2010042300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+-- Updates from version 0.4-beta
+
+ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL;
+UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2010100600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+-- Updates from version 0.4.2
+
+ALTER TABLE `users` DROP INDEX `username_index`;
+ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`);
+
+ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL;
+
+TRUNCATE TABLE `messages`;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2011011200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE `contacts` ADD `words` TEXT NULL AFTER `vcard`;
+ALTER TABLE `contacts` CHANGE `vcard` `vcard` LONGTEXT /*!40101 CHARACTER SET utf8 */ NULL DEFAULT NULL;
+ALTER TABLE `contactgroupmembers` ADD INDEX `contactgroupmembers_contact_index` (`contact_id`);
+
+TRUNCATE TABLE `messages`;
+TRUNCATE TABLE `cache`;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2011092800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,67 @@
+-- Updates from version 0.6
+
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL;
+ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
+
+CREATE TABLE `dictionary` (
+  `user_id` int(10) UNSIGNED DEFAULT NULL,
+  `language` varchar(5) NOT NULL,
+  `data` longtext NOT NULL,
+  CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
+    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  UNIQUE `uniqueness` (`user_id`, `language`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `searches` (
+  `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+  `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+  `type` int(3) NOT NULL DEFAULT '0',
+  `name` varchar(128) NOT NULL,
+  `data` text,
+  PRIMARY KEY(`search_id`),
+  CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
+    REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  UNIQUE `uniqueness` (`user_id`, `type`, `name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+DROP TABLE `messages`;
+
+CREATE TABLE `cache_index` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `valid` tinyint(1) NOT NULL DEFAULT '0',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `cache_thread` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `cache_messages` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ `flags` int(11) NOT NULL DEFAULT '0',
+ CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`, `uid`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2011111600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2011121400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+-- Updates from version 0.7
+
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
+ALTER TABLE `contacts` DROP INDEX `user_contacts_index`;
+ALTER TABLE `contacts` MODIFY `email` text NOT NULL;
+ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`del`);
+ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `cache` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_index` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_thread` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_messages` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contacts` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contactgroups` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contactgroupmembers` ALTER `contact_id` DROP DEFAULT;
+ALTER TABLE `identities` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `searches` ALTER `user_id` DROP DEFAULT;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2012080700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,5 @@
+-- Updates from version 0.8
+
+ALTER TABLE `cache` DROP COLUMN `cache_id`;
+ALTER TABLE `users` DROP COLUMN `alias`;
+ALTER TABLE `identities` ADD INDEX `email_identities_index` (`email`, `del`);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2013011000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+-- Upgrade from 0.9-beta
+
+CREATE TABLE IF NOT EXISTS `system` (
+ `name` varchar(64) NOT NULL,
+ `value` mediumtext,
+ PRIMARY KEY(`name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2013042700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2013052500.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ INDEX `created_index` (`created`),
+ INDEX `cache_key_index` (`cache_key`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2013061000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+ALTER TABLE `cache` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_shared` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_index` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_thread` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_messages` ADD `expires` datetime DEFAULT NULL;
+
+-- initialize expires column with created/changed date + 7days
+UPDATE `cache` SET `expires` = `created` + interval 604800 second;
+UPDATE `cache_shared` SET `expires` = `created` + interval 604800 second;
+UPDATE `cache_index` SET `expires` = `changed` + interval 604800 second;
+UPDATE `cache_thread` SET `expires` = `changed` + interval 604800 second;
+UPDATE `cache_messages` SET `expires` = `changed` + interval 604800 second;
+
+ALTER TABLE `cache` DROP INDEX `created_index`;
+ALTER TABLE `cache_shared` DROP INDEX `created_index`;
+ALTER TABLE `cache_index` DROP `changed`;
+ALTER TABLE `cache_thread` DROP `changed`;
+ALTER TABLE `cache_messages` DROP `changed`;
+
+ALTER TABLE `cache` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_shared` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_index` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_thread` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_messages` ADD INDEX `expires_index` (`expires`);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2014042900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE `users` CHANGE `preferences` `preferences` longtext;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2015030800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE `identities` CHANGE `signature` `signature` longtext;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2015111100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+ALTER TABLE `users`
+  ADD `failed_login` datetime DEFAULT NULL,
+  ADD `failed_login_counter` int(10) UNSIGNED DEFAULT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2016081200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE `session` DROP COLUMN `created`;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2016100900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE `session` MODIFY `ip` varchar(40) NOT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/mysql/2016112200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+ALTER TABLE `dictionary` ADD COLUMN `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; -- redundant, for compat. with Galera Cluster
+
+DROP TABLE `cache`;
+DROP TABLE `cache_shared`;
+
+CREATE TABLE `cache` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`user_id`, `cache_key`),
+ CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+   REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`cache_key`),
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle.initial.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,220 @@
+-- Roundcube Webmail initial database structure
+-- This was tested with Oracle 11g
+
+CREATE TABLE "users" (
+    "user_id" integer PRIMARY KEY,
+    "username" varchar(128) NOT NULL,
+    "mail_host" varchar(128) NOT NULL,
+    "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    "last_login" timestamp with time zone DEFAULT NULL,
+    "failed_login" timestamp with time zone DEFAULT NULL,
+    "failed_login_counter" integer DEFAULT NULL,
+    "language" varchar(5),
+    "preferences" long DEFAULT NULL,
+    CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host")
+);
+
+CREATE SEQUENCE "users_seq"
+    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "users_seq_trig"
+BEFORE INSERT ON "users" FOR EACH ROW
+BEGIN
+    :NEW."user_id" := "users_seq".nextval;
+END;
+/
+
+CREATE TABLE "session" (
+    "sess_id" varchar(128) NOT NULL PRIMARY KEY,
+    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    "ip" varchar(41) NOT NULL,
+    "vars" long NOT NULL
+);
+
+CREATE INDEX "session_changed_idx" ON "session" ("changed");
+
+
+CREATE TABLE "identities" (
+    "identity_id" integer PRIMARY KEY,
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    "del" smallint DEFAULT 0 NOT NULL,
+    "standard" smallint DEFAULT 0 NOT NULL,
+    "name" varchar(128) NOT NULL,
+    "organization" varchar(128),
+    "email" varchar(128) NOT NULL,
+    "reply-to" varchar(128),
+    "bcc" varchar(128),
+    "signature" long,
+    "html_signature" integer DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX "identities_user_id_idx" ON "identities" ("user_id", "del");
+CREATE INDEX "identities_email_idx" ON "identities" ("email", "del");
+
+CREATE SEQUENCE "identities_seq"
+    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "identities_seq_trig"
+BEFORE INSERT ON "identities" FOR EACH ROW
+BEGIN
+    :NEW."identity_id" := "identities_seq".nextval;
+END;
+/
+
+CREATE TABLE "contacts" (
+    "contact_id" integer PRIMARY KEY,
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    "del" smallint DEFAULT 0 NOT NULL,
+    "name" varchar(128) DEFAULT NULL,
+    "email" varchar(4000) DEFAULT NULL,
+    "firstname" varchar(128) DEFAULT NULL,
+    "surname" varchar(128) DEFAULT NULL,
+    "vcard" long,
+    "words" varchar(4000)
+);
+
+CREATE INDEX "contacts_user_id_idx" ON "contacts" ("user_id", "del");
+
+CREATE SEQUENCE "contacts_seq"
+    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "contacts_seq_trig"
+BEFORE INSERT ON "contacts" FOR EACH ROW
+BEGIN
+    :NEW."contact_id" := "contacts_seq".nextval;
+END;
+/
+
+CREATE TABLE "contactgroups" (
+    "contactgroup_id" integer PRIMARY KEY,
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    "del" smallint DEFAULT 0 NOT NULL,
+    "name" varchar(128) NOT NULL
+);
+
+CREATE INDEX "contactgroups_user_id_idx" ON "contactgroups" ("user_id", "del");
+
+CREATE SEQUENCE "contactgroups_seq"
+    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "contactgroups_seq_trig"
+BEFORE INSERT ON "contactgroups" FOR EACH ROW
+BEGIN
+    :NEW."contactgroup_id" := "contactgroups_seq".nextval;
+END;
+/
+
+CREATE TABLE "contactgroupmembers" (
+    "contactgroup_id" integer NOT NULL
+        REFERENCES "contactgroups" ("contactgroup_id") ON DELETE CASCADE,
+    "contact_id" integer NOT NULL
+        REFERENCES "contacts" ("contact_id") ON DELETE CASCADE,
+    "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+    PRIMARY KEY ("contactgroup_id", "contact_id")
+);
+
+CREATE INDEX "contactgroupmembers_idx" ON "contactgroupmembers" ("contact_id");
+
+
+CREATE TABLE "cache" (
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "cache_key" varchar(128) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("user_id", "cache_key")
+);
+
+CREATE INDEX "cache_expires_idx" ON "cache" ("expires");
+
+
+CREATE TABLE "cache_shared" (
+    "cache_key" varchar(255) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("cache_key")
+);
+
+CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
+
+
+CREATE TABLE "cache_index" (
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "mailbox" varchar(255) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "valid" smallint DEFAULT 0 NOT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("user_id", "mailbox")
+);
+
+CREATE INDEX "cache_index_expires_idx" ON "cache_index" ("expires");
+
+
+CREATE TABLE "cache_thread" (
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "mailbox" varchar(255) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("user_id", "mailbox")
+);
+
+CREATE INDEX "cache_thread_expires_idx" ON "cache_thread" ("expires");
+
+
+CREATE TABLE "cache_messages" (
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "mailbox" varchar(255) NOT NULL,
+    "uid" integer NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    "flags" integer DEFAULT 0 NOT NULL,
+    PRIMARY KEY ("user_id", "mailbox", "uid")
+);
+
+CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires");
+
+
+CREATE TABLE "dictionary" (
+    "user_id" integer DEFAULT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "language" varchar(5) NOT NULL,
+    "data" long DEFAULT NULL,
+    CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language")
+);
+
+
+CREATE TABLE "searches" (
+    "search_id" integer PRIMARY KEY,
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "type" smallint DEFAULT 0 NOT NULL,
+    "name" varchar(128) NOT NULL,
+    "data" long NOT NULL,
+    CONSTRAINT "searches_user_id_key" UNIQUE ("user_id", "type", "name")
+);
+
+CREATE SEQUENCE "searches_seq"
+    START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "searches_seq_trig"
+BEFORE INSERT ON "searches" FOR EACH ROW
+BEGIN
+    :NEW."search_id" := "searches_seq".nextval;
+END;
+/
+
+CREATE TABLE "system" (
+    "name" varchar(64) NOT NULL PRIMARY KEY,
+    "value" long
+);
+
+INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2016112200');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle/2015030800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle/2015111100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+ALTER TABLE "users" ADD "failed_login" timestamp with time zone DEFAULT NULL;
+ALTER TABLE "users" ADD "failed_login_counter" integer DEFAULT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle/2016081200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE "session" DROP COLUMN "created";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle/2016100900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE "session" MODIFY "ip" varchar(41) NOT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/oracle/2016112200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+DROP TABLE "cache";
+DROP TABLE "cache_shared";
+
+CREATE TABLE "cache" (
+    "user_id" integer NOT NULL
+        REFERENCES "users" ("user_id") ON DELETE CASCADE,
+    "cache_key" varchar(128) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("user_id", "cache_key")
+);
+
+CREATE INDEX "cache_expires_idx" ON "cache" ("expires");
+
+
+CREATE TABLE "cache_shared" (
+    "cache_key" varchar(255) NOT NULL,
+    "expires" timestamp with time zone DEFAULT NULL,
+    "data" long NOT NULL,
+    PRIMARY KEY ("cache_key")
+);
+
+CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres.initial.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,291 @@
+-- Roundcube Webmail initial database structure
+
+--
+-- Sequence "users_seq"
+-- Name: users_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE users_seq
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+--
+-- Table "users"
+-- Name: users; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE users (
+    user_id integer DEFAULT nextval('users_seq'::text) PRIMARY KEY,
+    username varchar(128) DEFAULT '' NOT NULL,
+    mail_host varchar(128) DEFAULT '' NOT NULL,
+    created timestamp with time zone DEFAULT now() NOT NULL,
+    last_login timestamp with time zone DEFAULT NULL,
+    failed_login timestamp with time zone DEFAULT NULL,
+    failed_login_counter integer DEFAULT NULL,
+    "language" varchar(5),
+    preferences text DEFAULT ''::text NOT NULL,
+    CONSTRAINT users_username_key UNIQUE (username, mail_host)
+);
+
+
+--
+-- Table "session"
+-- Name: session; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "session" (
+    sess_id varchar(128) DEFAULT '' PRIMARY KEY,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    ip varchar(41) NOT NULL,
+    vars text NOT NULL
+);
+
+CREATE INDEX session_changed_idx ON session (changed);
+
+
+--
+-- Sequence "identities_seq"
+-- Name: identities_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE identities_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+--
+-- Table "identities"
+-- Name: identities; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE identities (
+    identity_id integer DEFAULT nextval('identities_seq'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    del smallint DEFAULT 0 NOT NULL,
+    standard smallint DEFAULT 0 NOT NULL,
+    name varchar(128) NOT NULL,
+    organization varchar(128),
+    email varchar(128) NOT NULL,
+    "reply-to" varchar(128),
+    bcc varchar(128),
+    signature text,
+    html_signature integer DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX identities_user_id_idx ON identities (user_id, del);
+CREATE INDEX identities_email_idx ON identities (email, del);
+
+
+--
+-- Sequence "contacts_seq"
+-- Name: contacts_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE contacts_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+--
+-- Table "contacts"
+-- Name: contacts; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contacts (
+    contact_id integer DEFAULT nextval('contacts_seq'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    del smallint DEFAULT 0 NOT NULL,
+    name varchar(128) DEFAULT '' NOT NULL,
+    email text DEFAULT '' NOT NULL,
+    firstname varchar(128) DEFAULT '' NOT NULL,
+    surname varchar(128) DEFAULT '' NOT NULL,
+    vcard text,
+    words text
+);
+
+CREATE INDEX contacts_user_id_idx ON contacts (user_id, del);
+
+--
+-- Sequence "contactgroups_seq"
+-- Name: contactgroups_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE contactgroups_seq
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+--
+-- Table "contactgroups"
+-- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contactgroups (
+    contactgroup_id integer DEFAULT nextval('contactgroups_seq'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    del smallint NOT NULL DEFAULT 0,
+    name varchar(128) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);
+
+--
+-- Table "contactgroupmembers"
+-- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contactgroupmembers (
+    contactgroup_id integer NOT NULL
+        REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    contact_id integer NOT NULL
+        REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    created timestamp with time zone DEFAULT now() NOT NULL,
+    PRIMARY KEY (contactgroup_id, contact_id)
+);
+
+CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);
+
+--
+-- Table "cache"
+-- Name: cache; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "cache" (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    cache_key varchar(128) DEFAULT '' NOT NULL,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+
+--
+-- Table "cache_shared"
+-- Name: cache_shared; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "cache_shared" (
+    cache_key varchar(255) NOT NULL PRIMARY KEY,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL
+);
+
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
+
+--
+-- Table "cache_index"
+-- Name: cache_index; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_index (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    expires timestamp with time zone DEFAULT NULL,
+    valid smallint NOT NULL DEFAULT 0,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_index_expires_idx ON cache_index (expires);
+
+--
+-- Table "cache_thread"
+-- Name: cache_thread; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_thread (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_thread_expires_idx ON cache_thread (expires);
+
+--
+-- Table "cache_messages"
+-- Name: cache_messages; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_messages (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    uid integer NOT NULL,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL,
+    flags integer NOT NULL DEFAULT 0,
+    PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX cache_messages_expires_idx ON cache_messages (expires);
+
+--
+-- Table "dictionary"
+-- Name: dictionary; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE dictionary (
+    user_id integer DEFAULT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+   "language" varchar(5) NOT NULL,
+    data text NOT NULL,
+    CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
+);
+
+--
+-- Sequence "searches_seq"
+-- Name: searches_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE searches_seq
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+--
+-- Table "searches"
+-- Name: searches; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE searches (
+    search_id integer DEFAULT nextval('searches_seq'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    "type" smallint DEFAULT 0 NOT NULL,
+    name varchar(128) NOT NULL,
+    data text NOT NULL,
+    CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
+);
+
+
+--
+-- Table "system"
+-- Name: system; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "system" (
+    name varchar(64) NOT NULL PRIMARY KEY,
+    value text
+);
+
+INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2008030300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+-- Updates from version 0.1-stable to 0.1.1
+
+CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key);
+CREATE INDEX contacts_user_id_idx ON contacts (user_id);
+CREATE INDEX identities_user_id_idx ON identities (user_id);
+
+CREATE INDEX users_username_id_idx ON users (username);
+CREATE INDEX users_alias_id_idx ON users (alias);
+
+-- added ON DELETE/UPDATE actions
+ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey;
+ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE identities DROP CONSTRAINT identities_user_id_fkey;
+ALTER TABLE identities ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_fkey;
+ALTER TABLE contacts ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE cache DROP CONSTRAINT cache_user_id_fkey;
+ALTER TABLE cache ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2008060900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+-- Updates from version 0.2-alpha
+
+CREATE INDEX messages_created_idx ON messages (created);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2008092100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+-- Updates from version 0.2-beta
+
+ALTER TABLE cache DROP session_id;
+
+CREATE INDEX session_changed_idx ON session (changed);
+CREATE INDEX cache_created_idx ON "cache" (created);
+
+ALTER TABLE users ALTER "language" DROP NOT NULL;
+ALTER TABLE users ALTER "language" DROP DEFAULT;
+
+ALTER TABLE identities ALTER del TYPE smallint;
+ALTER TABLE identities ALTER standard TYPE smallint;
+ALTER TABLE contacts ALTER del TYPE smallint;
+ALTER TABLE messages ALTER del TYPE smallint;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2009090400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+-- Updates from version 0.3-stable
+
+TRUNCATE messages;
+CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
+DROP INDEX contacts_user_id_idx;
+CREATE INDEX contacts_user_id_idx ON contacts (user_id, email);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2009103100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+-- Updates from version 0.3.1
+
+DROP INDEX identities_user_id_idx;
+CREATE INDEX identities_user_id_idx ON identities (user_id, del);
+
+ALTER TABLE identities ADD changed timestamp with time zone DEFAULT now() NOT NULL;
+
+CREATE SEQUENCE contactgroups_ids
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+CREATE TABLE contactgroups (
+    contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    del smallint NOT NULL DEFAULT 0,
+    name varchar(128) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);
+
+CREATE TABLE contactgroupmembers (
+    contactgroup_id integer NOT NULL
+        REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    contact_id integer NOT NULL
+        REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    created timestamp with time zone DEFAULT now() NOT NULL,
+    PRIMARY KEY (contactgroup_id, contact_id)
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2010042300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+-- Updates from version 0.4-beta
+
+ALTER TABLE users ALTER last_login DROP NOT NULL;
+ALTER TABLE users ALTER last_login SET DEFAULT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2010100600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+-- Updates from version 0.4.2
+
+DROP INDEX users_username_id_idx;
+ALTER TABLE users ADD CONSTRAINT users_username_key UNIQUE (username, mail_host);
+ALTER TABLE contacts ALTER email TYPE varchar(255);
+
+TRUNCATE messages;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2011011200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE contacts ADD words TEXT NULL;
+CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);
+
+TRUNCATE messages;
+TRUNCATE cache;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2011092800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,64 @@
+-- Updates from version 0.6
+
+CREATE TABLE dictionary (
+    user_id integer DEFAULT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+   "language" varchar(5) NOT NULL,
+    data text NOT NULL,
+    CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
+);
+
+CREATE SEQUENCE search_ids
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+CREATE TABLE searches (
+    search_id integer DEFAULT nextval('search_ids'::text) PRIMARY KEY,
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    "type" smallint DEFAULT 0 NOT NULL,
+    name varchar(128) NOT NULL,
+    data text NOT NULL,
+    CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
+);
+
+DROP SEQUENCE message_ids;
+DROP TABLE messages;
+
+CREATE TABLE cache_index (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    valid smallint NOT NULL DEFAULT 0,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_index_changed_idx ON cache_index (changed);
+
+CREATE TABLE cache_thread (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_thread_changed_idx ON cache_thread (changed);
+
+CREATE TABLE cache_messages (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    mailbox varchar(255) NOT NULL,
+    uid integer NOT NULL,
+    changed timestamp with time zone DEFAULT now() NOT NULL,
+    data text NOT NULL,
+    flags integer NOT NULL DEFAULT 0,
+    PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX cache_messages_changed_idx ON cache_messages (changed);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2011111600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE "session" ALTER sess_id TYPE varchar(128);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2011121400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,5 @@
+-- Updates from version 0.7
+
+DROP INDEX contacts_user_id_idx;
+CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del);
+ALTER TABLE contacts ALTER email TYPE text;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2012080700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+-- Updates from version 0.8
+
+ALTER TABLE cache DROP COLUMN cache_id;
+DROP SEQUENCE cache_ids;
+
+ALTER TABLE users DROP COLUMN alias;
+CREATE INDEX identities_email_idx ON identities (email, del);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2013011000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+CREATE TABLE "system" (
+    name varchar(64) NOT NULL PRIMARY KEY,
+    value text
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2013042700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+ALTER SEQUENCE user_ids RENAME TO users_seq;
+ALTER TABLE users ALTER COLUMN user_id SET DEFAULT nextval('users_seq'::text);
+
+ALTER SEQUENCE identity_ids RENAME TO identities_seq;
+ALTER TABLE identities ALTER COLUMN identity_id SET DEFAULT nextval('identities_seq'::text);
+
+ALTER SEQUENCE contact_ids RENAME TO contacts_seq;
+ALTER TABLE contacts ALTER COLUMN contact_id SET DEFAULT nextval('contacts_seq'::text);
+
+ALTER SEQUENCE contactgroups_ids RENAME TO contactgroups_seq;
+ALTER TABLE contactgroups ALTER COLUMN contactgroup_id SET DEFAULT nextval('contactgroups_seq'::text);
+
+ALTER SEQUENCE search_ids RENAME TO searches_seq;
+ALTER TABLE searches ALTER COLUMN search_id SET DEFAULT nextval('searches_seq'::text);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2013052500.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+CREATE TABLE "cache_shared" (
+    cache_key varchar(255) NOT NULL,
+    created timestamp with time zone DEFAULT now() NOT NULL,
+    data text NOT NULL
+);
+
+CREATE INDEX cache_shared_cache_key_idx ON "cache_shared" (cache_key);
+CREATE INDEX cache_shared_created_idx ON "cache_shared" (created);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2013061000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+ALTER TABLE "cache" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_shared" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_index" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_thread" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_messages" ADD expires timestamp with time zone DEFAULT NULL;
+
+-- initialize expires column with created/changed date + 7days
+UPDATE "cache" SET expires = created + interval '604800 seconds';
+UPDATE "cache_shared" SET expires = created + interval '604800 seconds';
+UPDATE "cache_index" SET expires = changed + interval '604800 seconds';
+UPDATE "cache_thread" SET expires = changed + interval '604800 seconds';
+UPDATE "cache_messages" SET expires = changed + interval '604800 seconds';
+
+DROP INDEX cache_created_idx;
+DROP INDEX cache_shared_created_idx;
+ALTER TABLE "cache_index" DROP "changed";
+ALTER TABLE "cache_thread" DROP "changed";
+ALTER TABLE "cache_messages" DROP "changed";
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
+CREATE INDEX cache_index_expires_idx ON "cache_index" (expires);
+CREATE INDEX cache_thread_expires_idx ON "cache_thread" (expires);
+CREATE INDEX cache_messages_expires_idx ON "cache_messages" (expires);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2014042900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2015030800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2015111100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+ALTER TABLE "users" ADD failed_login timestamp with time zone DEFAULT NULL;
+ALTER TABLE "users" ADD failed_login_counter integer DEFAULT NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2016081200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE "session" DROP COLUMN created;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2016100900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ALTER TABLE session ALTER COLUMN ip TYPE character varying(41);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/postgres/2016112200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+DROP TABLE "cache";
+DROP TABLE "cache_shared";
+
+CREATE TABLE "cache" (
+    user_id integer NOT NULL
+        REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    cache_key varchar(128) DEFAULT '' NOT NULL,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+
+CREATE TABLE "cache_shared" (
+    cache_key varchar(255) NOT NULL PRIMARY KEY,
+    expires timestamp with time zone DEFAULT NULL,
+    data text NOT NULL
+);
+
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite.initial.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,203 @@
+-- Roundcube Webmail initial database structure
+
+-- 
+-- Table structure for table contacts and related
+-- 
+
+CREATE TABLE contacts (
+  contact_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL,
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  email text NOT NULL default '',
+  firstname varchar(128) NOT NULL default '',
+  surname varchar(128) NOT NULL default '',
+  vcard text NOT NULL default '',
+  words text NOT NULL default ''
+);
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
+
+
+CREATE TABLE contactgroups (
+  contactgroup_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default ''
+);
+
+CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
+
+
+CREATE TABLE contactgroupmembers (
+  contactgroup_id integer NOT NULL,
+  contact_id integer NOT NULL default '0',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY (contactgroup_id, contact_id)
+);
+
+CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
+
+-- 
+-- Table structure for table identities
+-- 
+
+CREATE TABLE identities (
+  identity_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  standard tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  organization varchar(128) default '',
+  email varchar(128) NOT NULL default '',
+  "reply-to" varchar(128) NOT NULL default '',
+  bcc varchar(128) NOT NULL default '',
+  signature text NOT NULL default '',
+  html_signature tinyint NOT NULL default '0'
+);
+
+CREATE INDEX ix_identities_user_id ON identities(user_id, del);
+CREATE INDEX ix_identities_email ON identities(email, del);
+
+-- 
+-- Table structure for table users
+-- 
+
+CREATE TABLE users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  failed_login datetime DEFAULT NULL,
+  failed_login_counter integer DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+-- 
+-- Table structure for table session
+-- 
+
+CREATE TABLE session (
+  sess_id varchar(128) NOT NULL PRIMARY KEY,
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  ip varchar(40) NOT NULL default '',
+  vars text NOT NULL
+);
+
+CREATE INDEX ix_session_changed ON session (changed);
+
+--
+-- Table structure for table dictionary
+--
+
+CREATE TABLE dictionary (
+    user_id integer DEFAULT NULL,
+   "language" varchar(5) NOT NULL,
+    data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language");
+
+--
+-- Table structure for table searches
+--
+
+CREATE TABLE searches (
+  search_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL DEFAULT '0',
+  "type" smallint NOT NULL DEFAULT '0',
+  name varchar(128) NOT NULL,
+  data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
+
+-- 
+-- Table structure for table cache
+-- 
+
+CREATE TABLE cache (
+  user_id integer NOT NULL default 0,
+  cache_key varchar(128) NOT NULL default '',
+  expires datetime DEFAULT NULL,
+  data text NOT NULL,
+  PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+
+-- 
+-- Table structure for table cache_shared
+-- 
+
+CREATE TABLE cache_shared (
+  cache_key varchar(255) NOT NULL,
+  expires datetime DEFAULT NULL,
+  data text NOT NULL,
+  PRIMARY KEY (cache_key)
+);
+
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
+
+--
+-- Table structure for table cache_index
+--
+
+CREATE TABLE cache_index (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    expires datetime DEFAULT NULL,
+    valid smallint NOT NULL DEFAULT '0',
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_expires ON cache_index (expires);
+
+--
+-- Table structure for table cache_thread
+--
+
+CREATE TABLE cache_thread (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    expires datetime DEFAULT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);
+
+--
+-- Table structure for table cache_messages
+--
+
+CREATE TABLE cache_messages (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    uid integer NOT NULL,
+    expires datetime DEFAULT NULL,
+    data text NOT NULL,
+    flags integer NOT NULL DEFAULT '0',
+    PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
+
+--
+-- Table structure for table system
+--
+
+CREATE TABLE system (
+  name varchar(64) NOT NULL PRIMARY KEY,
+  value text NOT NULL
+);
+
+INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2008030300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+-- Updates from version 0.1-stable to 0.1.1
+
+DROP TABLE messages;
+
+CREATE TABLE messages (
+  message_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  del tinyint NOT NULL default '0',
+  cache_key varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  idx integer NOT NULL default '0',
+  uid integer NOT NULL default '0',
+  subject varchar(255) NOT NULL default '',
+  "from" varchar(255) NOT NULL default '',
+  "to" varchar(255) NOT NULL default '',
+  "cc" varchar(255) NOT NULL default '',
+  "date" datetime NOT NULL default '0000-00-00 00:00:00',
+  size integer NOT NULL default '0',
+  headers text NOT NULL,
+  structure text
+);
+
+CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid);
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2008060900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+-- Updates from version 0.2-alpha
+
+CREATE INDEX ix_messages_created ON messages (created);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2008092100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+-- Updates from version 0.2-beta
+
+CREATE INDEX ix_session_changed ON session (changed);
+CREATE INDEX ix_cache_created ON cache (created);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2009090400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+-- Updates from version 0.3-stable
+
+DELETE FROM messages;
+DROP INDEX ix_messages_user_cache_uid;
+CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid);
+CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx);
+DROP INDEX ix_contacts_user_id;
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2009103100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,61 @@
+-- Updates from version 0.3.1
+
+-- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; --
+
+CREATE TABLE temp_identities (
+  identity_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  standard tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  organization varchar(128) default '',
+  email varchar(128) NOT NULL default '',
+  "reply-to" varchar(128) NOT NULL default '',
+  bcc varchar(128) NOT NULL default '',
+  signature text NOT NULL default '',
+  html_signature tinyint NOT NULL default '0'
+);
+INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
+  SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
+  FROM identities WHERE del=0;
+
+DROP INDEX ix_identities_user_id;
+DROP TABLE identities;
+
+CREATE TABLE identities (
+  identity_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  standard tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  organization varchar(128) default '',
+  email varchar(128) NOT NULL default '',
+  "reply-to" varchar(128) NOT NULL default '',
+  bcc varchar(128) NOT NULL default '',
+  signature text NOT NULL default '',
+  html_signature tinyint NOT NULL default '0'
+);
+CREATE INDEX ix_identities_user_id ON identities(user_id, del);
+
+INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
+  SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
+  FROM temp_identities;
+
+DROP TABLE temp_identities;
+
+CREATE TABLE contactgroups (
+  contactgroup_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default ''
+);
+
+CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
+
+CREATE TABLE contactgroupmembers (
+  contactgroup_id integer NOT NULL,
+  contact_id integer NOT NULL default '0',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY (contactgroup_id, contact_id)
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2010042300.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+-- Updates from version 0.4-beta
+
+CREATE TABLE tmp_users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  alias varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime NOT NULL default '0000-00-00 00:00:00',
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  alias varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users;
+
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
+DROP TABLE tmp_users;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2010100600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,40 @@
+-- Updates from version 0.4.2
+
+DROP INDEX ix_users_username;
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+CREATE TABLE contacts_tmp (
+    contact_id integer NOT NULL PRIMARY KEY,
+    user_id integer NOT NULL default '0',
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    del tinyint NOT NULL default '0',
+    name varchar(128) NOT NULL default '',
+    email varchar(255) NOT NULL default '',
+    firstname varchar(128) NOT NULL default '',
+    surname varchar(128) NOT NULL default '',
+    vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;
+
+DROP TABLE contacts;
+CREATE TABLE contacts (
+    contact_id integer NOT NULL PRIMARY KEY,
+    user_id integer NOT NULL default '0',
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    del tinyint NOT NULL default '0',
+    name varchar(128) NOT NULL default '',
+    email varchar(255) NOT NULL default '',
+    firstname varchar(128) NOT NULL default '',
+    surname varchar(128) NOT NULL default '',
+    vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
+DROP TABLE contacts_tmp;
+
+DELETE FROM messages;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2011011200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+-- Updates from version 0.5.x
+
+CREATE TABLE contacts_tmp (
+    contact_id integer NOT NULL PRIMARY KEY,
+    user_id integer NOT NULL default '0',
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    del tinyint NOT NULL default '0',
+    name varchar(128) NOT NULL default '',
+    email varchar(255) NOT NULL default '',
+    firstname varchar(128) NOT NULL default '',
+    surname varchar(128) NOT NULL default '',
+    vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;
+
+DROP TABLE contacts;
+CREATE TABLE contacts (
+    contact_id integer NOT NULL PRIMARY KEY,
+    user_id integer NOT NULL default '0',
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    del tinyint NOT NULL default '0',
+    name varchar(128) NOT NULL default '',
+    email varchar(255) NOT NULL default '',
+    firstname varchar(128) NOT NULL default '',
+    surname varchar(128) NOT NULL default '',
+    vcard text NOT NULL default '',
+    words text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
+DROP TABLE contacts_tmp;
+
+
+DELETE FROM messages;
+DELETE FROM cache;
+CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2011092800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+-- Updates from version 0.6
+
+CREATE TABLE dictionary (
+    user_id integer DEFAULT NULL,
+   "language" varchar(5) NOT NULL,
+    data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language");
+
+CREATE TABLE searches (
+  search_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL DEFAULT '0',
+  "type" smallint NOT NULL DEFAULT '0',
+  name varchar(128) NOT NULL,
+  data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
+
+DROP TABLE messages;
+
+CREATE TABLE cache_index (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    valid smallint NOT NULL DEFAULT '0',
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_changed ON cache_index (changed);
+
+CREATE TABLE cache_thread (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_changed ON cache_thread (changed);
+
+CREATE TABLE cache_messages (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    uid integer NOT NULL,
+    changed datetime NOT NULL default '0000-00-00 00:00:00',
+    data text NOT NULL,
+    flags integer NOT NULL DEFAULT '0',
+    PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_changed ON cache_messages (changed);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2011111600.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+-- Updates from version 0.7-beta
+
+DROP TABLE session;
+CREATE TABLE session (
+  sess_id varchar(128) NOT NULL PRIMARY KEY,
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  ip varchar(40) NOT NULL default '',
+  vars text NOT NULL
+);
+CREATE INDEX ix_session_changed ON session (changed);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2011121400.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+-- Updates from version 0.7
+
+CREATE TABLE contacts_tmp (
+  contact_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL,
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  email text NOT NULL default '',
+  firstname varchar(128) NOT NULL default '',
+  surname varchar(128) NOT NULL default '',
+  vcard text NOT NULL default '',
+  words text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts;
+
+DROP TABLE contacts;
+
+CREATE TABLE contacts (
+  contact_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL,
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  del tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  email text NOT NULL default '',
+  firstname varchar(128) NOT NULL default '',
+  surname varchar(128) NOT NULL default '',
+  vcard text NOT NULL default '',
+  words text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
+    SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
+DROP TABLE contacts_tmp;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2012080700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+-- Updates from version 0.8
+
+DROP TABLE cache;
+CREATE TABLE cache (
+  user_id integer NOT NULL default 0,
+  cache_key varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  data text NOT NULL
+);
+
+CREATE INDEX ix_cache_user_cache_key ON cache(user_id, cache_key);
+CREATE INDEX ix_cache_created ON cache(created);
+
+CREATE TABLE tmp_users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+CREATE INDEX ix_identities_email ON identities(email, del);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2013011000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+-- Updates from version 0.9-beta
+
+CREATE TABLE IF NOT EXISTS system (
+  name varchar(64) NOT NULL PRIMARY KEY,
+  value text NOT NULL
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2013011700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+-- drop temp table created in 2012080700.sql
+DROP TABLE IF EXISTS tmp_users;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2013042700.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2013052500.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+CREATE TABLE cache_shared (
+  cache_key varchar(255) NOT NULL,
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  data text NOT NULL
+);
+
+CREATE INDEX ix_cache_shared_cache_key ON cache_shared(cache_key);
+CREATE INDEX ix_cache_shared_created ON cache_shared(created);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2013061000.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,48 @@
+DROP TABLE cache_index;
+DROP TABLE cache_thread;
+DROP TABLE cache_messages;
+
+ALTER TABLE cache ADD expires datetime DEFAULT NULL;
+DROP INDEX ix_cache_created;
+
+ALTER TABLE cache_shared ADD expires datetime DEFAULT NULL;
+DROP INDEX ix_cache_shared_created;
+
+UPDATE cache SET expires = datetime(created, '+604800 seconds');
+UPDATE cache_shared SET expires = datetime(created, '+604800 seconds');
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
+
+CREATE TABLE cache_index (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    expires datetime DEFAULT NULL,
+    valid smallint NOT NULL DEFAULT '0',
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_expires ON cache_index (expires);
+
+CREATE TABLE cache_thread (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    expires datetime DEFAULT NULL,
+    data text NOT NULL,
+    PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);
+
+CREATE TABLE cache_messages (
+    user_id integer NOT NULL,
+    mailbox varchar(255) NOT NULL,
+    uid integer NOT NULL,
+    expires datetime DEFAULT NULL,
+    data text NOT NULL,
+    flags integer NOT NULL DEFAULT '0',
+    PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2014042900.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2015030800.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+-- empty
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2015111100.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+CREATE TABLE tmp_users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  failed_login datetime DEFAULT NULL,
+  failed_login_counter integer DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+  user_id integer NOT NULL PRIMARY KEY,
+  username varchar(128) NOT NULL default '',
+  mail_host varchar(128) NOT NULL default '',
+  created datetime NOT NULL default '0000-00-00 00:00:00',
+  last_login datetime DEFAULT NULL,
+  failed_login datetime DEFAULT NULL,
+  failed_login_counter integer DEFAULT NULL,
+  language varchar(5),
+  preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
+    SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+DROP TABLE tmp_users;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2016081200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+DROP TABLE session;
+CREATE TABLE session (
+  sess_id varchar(128) NOT NULL PRIMARY KEY,
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
+  ip varchar(40) NOT NULL default '',
+  vars text NOT NULL
+);
+
+CREATE INDEX ix_session_changed ON session (changed);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SQL/sqlite/2016112200.sql	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+DROP TABLE cache;
+DROP TABLE cache_shared;
+
+CREATE TABLE cache (
+  user_id integer NOT NULL default 0,
+  cache_key varchar(128) NOT NULL default '',
+  expires datetime DEFAULT NULL,
+  data text NOT NULL,
+  PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+
+CREATE TABLE cache_shared (
+  cache_key varchar(255) NOT NULL,
+  expires datetime DEFAULT NULL,
+  data text NOT NULL,
+  PRIMARY KEY (cache_key)
+);
+
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UPGRADING	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,82 @@
+UPGRADING instructions
+======================
+
+Follow these instructions if upgrading from a previous version
+of Roundcube Webmail. We recommend to carefully backup the existing
+installation as well as the database before going through the following steps.
+
+Using the update script
+-----------------------
+There is a shell script (for unix based systems) that does the job for you.
+To use it, unpack the archive of the new Roundcube version to a temporary location
+(don't replace the Roundcube installation you want to update)
+and cd into that directory. From there, run the following command in a shell:
+
+  ./bin/installto.sh <TARGET-FOLDER>
+
+For <TARGET-FOLDER> you specify the path to the Roundcube installation 
+which should be updated. The update script will then copy all new files to the 
+target location and check and update the configuration and database schema.
+After all is done, the temporary folder with the new Roundcube files can be 
+removed again.
+
+WARNING: See Post-Upgrade Activities section below.
+
+
+Updating manually
+-----------------
+If you don't have shell access to the Roundcube installation or if not running 
+it on a unix system, you need to do the following operations by hand:
+
+1. Replace index.php and all files in
+   - ./bin/
+   - ./SQL/
+   - ./program/
+   - ./installer/
+2. Replace the configuration defaults files:
+   - config/defaults.inc.php
+   - config/mimetypes.php
+3. rsync the contents of the following folders from your installation
+   directory into the target folder:
+   ./skins/
+   ./plugins/
+   ./vendor/
+4. Update dependencies:
+4a. If you previously installed plugins through composer, update dependencies
+   by running `php composer.phar update --no-dev`.
+4b. Install/update dependencies using composer:
+   - get composer from https://getcomposer.org/download/
+   - rename the composer.json-dist file into composer.json
+   - if you want to use LDAP address books, enable the LDAP libraries in your
+     composer.json file by moving the items from "suggest" to the "require"
+     section (remove the explanation texts after the version!).
+   - run `php composer.phar install --no-dev`.
+4c. If you use git sources or the release package without dependencies
+   update javascript dependencies by executing `bin/install-jsdeps.sh` script.
+5. Run `./bin/update.sh` from the commandline OR
+   open http://url-to-roundcube/installer/ in a browser and choose "3 Test config".
+   To enable the latter one, you have to temporary set 'enable_installer'
+   to true in your local config/config.inc.php file.
+   WARNING: See SQLite database upgrade below.
+6. Let the update script/installer check your configuration and
+   update your config files and database schema as suggested by the updater.
+7. Make sure 'enable_installer' is set to false again.
+8. See Post-Upgrade Activities section.
+
+
+Post-Upgrade Activities
+-----------------------
+1. Check .htaccess settings (some php settings could become required)
+2. If you're using build-in addressbook, run indexing script /bin/indexcontacts.sh.
+3. When upgrading from version older than 0.6-beta you should make sure
+   your folder settings contain namespace prefix. For example Courier users
+   should add INBOX. prefix to folder names in main configuration file.
+4. Check system requirements in INSTALL file.
+
+SQLite database upgrade
+-----------------------
+Versions older than 0.9 were supporting SQLite v2 only. Newer versions require
+database in v3 format. The best what you can do is to convert database file
+to the new format using command line tools:
+
+sqlite OLD.DB .dump | sqlite3 NEW.DB
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/cleandb.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/cleandb.sh                                                        |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2010-2015, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Finally remove all db records marked as deleted some time ago       |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require INSTALL_PATH.'program/include/clisetup.php';
+
+if (!empty($_SERVER['argv'][1]))
+    $days = intval($_SERVER['argv'][1]);
+else
+    $days = 7;
+
+rcmail_utils::db_clean($days);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/cssshrink.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+#!/bin/sh
+PWD=`dirname "$0"`
+JAR_DIR='/tmp'
+VERSION='2.4.8'
+COMPILER_URL="https://github.com/yui/yuicompressor/releases/download/v${VERSION}/yuicompressor-${VERSION}.zip"
+
+do_shrink() {
+	rm -f "$2"
+	java -jar $JAR_DIR/yuicompressor.jar -v -o "$2" "$1"
+}
+
+if [ ! -w "$JAR_DIR" ]; then
+	JAR_DIR=$PWD
+fi
+
+if java -version >/dev/null 2>&1; then
+	:
+else
+	echo "Java not found. Please ensure that the 'java' program is in your PATH."
+	exit 1
+fi
+
+if [ ! -r "$JAR_DIR/yuicompressor.jar" ]; then
+	if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then
+		wget "$COMPILER_URL" -O "/tmp/$$.zip"
+	elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then
+		curl "$COMPILER_URL" -o "/tmp/$$.zip"
+	else
+		echo "Please download $COMPILER_URL and extract compiler.jar to $JAR_DIR/."
+		exit 1
+	fi
+	(cd $JAR_DIR && unzip "/tmp/$$.zip" && mv "yuicompressor-${VERSION}.jar" "yuicompressor.jar")
+	rm -f "/tmp/$$.zip"
+fi
+
+# compress single file from argument
+if [ $# -gt 0 ]; then
+	CSS_FILE="$1"
+
+	echo "Shrinking $CSS_FILE"
+    minfile=`echo $CSS_FILE | sed -e 's/\.css$/\.min\.css/'`
+	do_shrink "$CSS_FILE" "$minfile"
+	exit
+fi
+
+DIRS="$PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/*"
+# default: compress application scripts
+for dir in $DIRS; do
+    for file in $dir/*.css; do
+        echo "$file" | grep -e '.min.css$' >/dev/null
+        if [ $? -eq 0 ]; then
+            continue
+        fi
+        if [ ! -f "$file" ]; then
+            continue
+        fi
+
+        echo "Shrinking $file"
+        minfile=`echo $file | sed -e 's/\.css$/\.min\.css/'`
+        do_shrink "$file" "$minfile"
+    done
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/decrypt.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,67 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/decrypt.sh                                                        |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Decrypt the encrypted parts of the HTTP Received: headers           |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Tomas Tevesz <ice@extreme.hu>                                 |
+ +-----------------------------------------------------------------------+
+*/
+
+/**
+ * If http_received_header_encrypt is configured, the IP address and the
+ * host name of the added Received: header is encrypted with 3DES, to
+ * protect information that some could consider sensitve, yet their
+ * availability is a must in some circumstances.
+ *
+ * Such an encrypted Received: header might look like:
+ *
+ * Received: from DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==
+ *  [my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4]
+ *  with HTTP/1.1 (POST); Thu, 14 May 2009 19:17:28 +0200
+ *
+ * In this example, the two encrypted components are the sender host name
+ * (DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==) and the IP
+ * address (my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4).
+ *
+ * Using this tool, they can be decrypted into plain text:
+ *
+ * $ bin/decrypt.sh 'my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4' \
+ * > 'DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ=='
+ * 84.3.187.208
+ * 5403BBD0.catv.pool.telekom.hu
+ * $
+ *
+ * Thus it is known that this particular message was sent by 84.3.187.208,
+ * having, at the time of sending, the name of 5403BBD0.catv.pool.telekom.hu.
+ *
+ * If (most likely binary) junk is shown, then
+ *  - either the encryption password has, between the time the mail was sent
+ *    and 'now', changed, or
+ *  - you are dealing with counterfeit header data.
+ */
+
+define('INSTALL_PATH', realpath(__DIR__ .'/..') . '/');
+
+require INSTALL_PATH . 'program/include/clisetup.php';
+
+if ($argc < 2) {
+	die("Usage: " . basename($argv[0]) . " encrypted-hdr-part [encrypted-hdr-part ...]\n");
+}
+
+$RCMAIL = rcube::get_instance();
+
+for ($i = 1; $i < $argc; $i++) {
+	printf("%s\n", $RCMAIL->decrypt($argv[$i]));
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/deluser.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,125 @@
+#!/usr/bin/env php
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | bin/deluser.sh                                                        |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2014, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Utility script to remove all data related to a certain user         |
+ |   from the local database.                                            |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <thomas@roundcube.net>                       |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+function print_usage()
+{
+    print "Usage: deluser.sh [--host=mail_host] username\n";
+    print "--host=HOST  The IMAP hostname or IP the given user is related to\n";
+}
+
+function _die($msg, $usage=false)
+{
+    fputs(STDERR, $msg . "\n");
+    if ($usage) print_usage();
+    exit(1);
+}
+
+$rcmail = rcube::get_instance();
+
+// get arguments
+$args     = rcube_utils::get_opt(array('h' => 'host'));
+$username = trim($args[0]);
+
+if (empty($username)) {
+    _die("Missing required parameters", true);
+}
+
+if (empty($args['host'])) {
+    $hosts = $rcmail->config->get('default_host', '');
+    if (is_string($hosts)) {
+        $args['host'] = $hosts;
+    }
+    else if (is_array($hosts) && count($hosts) == 1) {
+        $args['host'] = reset($hosts);
+    }
+    else {
+        _die("Specify a host name", true);
+    }
+
+    // host can be a URL like tls://192.168.12.44
+    $host_url = parse_url($args['host']);
+    if ($host_url['host']) {
+        $args['host'] = $host_url['host'];
+    }
+}
+
+// connect to DB
+$db = $rcmail->get_dbh();
+$db->db_connect('w');
+$transaction = false;
+
+if (!$db->is_connected() || $db->is_error()) {
+    _die("No DB connection\n" . $db->is_error());
+}
+
+// find user in loca database
+$user = rcube_user::query($username, $args['host']);
+
+if (!$user) {
+    die("User not found.\n");
+}
+
+// inform plugins about approaching user deletion
+$plugin = $rcmail->plugins->exec_hook('user_delete_prepare', array('user' => $user, 'username' => $username, 'host' => $args['host']));
+
+// let plugins cleanup their own user-related data
+if (!$plugin['abort']) {
+    $transaction = $db->startTransaction();
+    $plugin = $rcmail->plugins->exec_hook('user_delete', $plugin);
+}
+
+if ($plugin['abort']) {
+    if ($transaction) {
+        $db->rollbackTransaction();
+    }
+    _die("User deletion aborted by plugin");
+}
+
+// deleting the user record should be sufficient due to ON DELETE CASCADE foreign key references
+// but not all database backends actually support this so let's do it by hand
+foreach (array('identities','contacts','contactgroups','dictionary','cache','cache_index','cache_messages','cache_thread','searches','users') as $table) {
+    $db->query('DELETE FROM ' . $db->table_name($table, true) . ' WHERE `user_id` = ?', $user->ID);
+}
+
+if ($db->is_error()) {
+    $rcmail->plugins->exec_hook('user_delete_rollback', $plugin);
+    _die("DB error occurred: " . $db->is_error());
+}
+else {
+    // inform plugins about executed user deletion
+    $plugin = $rcmail->plugins->exec_hook('user_delete_commit', $plugin);
+
+    if ($plugin['abort']) {
+        unset($plugin['abort']);
+        $db->rollbackTransaction();
+        $rcmail->plugins->exec_hook('user_delete_rollback', $plugin);
+    }
+    else {
+        $db->endTransaction();
+        echo "Successfully deleted user $user->ID\n";
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/dumpschema.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,97 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/dumpschema.sh                                                     |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Dumps database schema in XML format using MDB2_Schema               |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require INSTALL_PATH.'program/include/clisetup.php';
+
+/** callback function for schema dump **/
+function print_schema($dump)
+{
+	foreach ((array)$dump as $part)
+		echo $dump . "\n";
+}
+
+$config = new rcube_config();
+
+// don't allow public access if not in devel_mode
+if (!$config->get('devel_mode') && $_SERVER['REMOTE_ADDR']) {
+	header("HTTP/1.0 401 Access denied");
+	die("Access denied!");
+}
+
+$options = array(
+	'use_transactions' => false,
+	'log_line_break' => "\n",
+	'idxname_format' => '%s',
+	'debug' => false,
+	'quote_identifier' => true,
+	'force_defaults' => false,
+	'portability' => false,
+);
+
+$dsnw = $config->get('db_dsnw');
+$dsn_array = MDB2::parseDSN($dsnw);
+
+// set options for postgres databases
+if ($dsn_array['phptype'] == 'pgsql') {
+	$options['disable_smart_seqname'] = true;
+	$options['seqname_format'] = '%s';
+}
+
+$schema =& MDB2_Schema::factory($dsnw, $options);
+$schema->db->supported['transactions'] = false;
+
+
+// send as text/xml when opened in browser
+if ($_SERVER['REMOTE_ADDR'])
+	header('Content-Type: text/xml');
+
+
+if (PEAR::isError($schema)) {
+	$error = $schema->getMessage() . ' ' . $schema->getUserInfo();
+}
+else {
+	$dump_config = array(
+		// 'output_mode' => 'file',
+		'output' => 'print_schema',
+	);
+	
+	$definition = $schema->getDefinitionFromDatabase();
+	$definition['charset'] = 'utf8';
+
+	if (PEAR::isError($definition)) {
+		$error = $definition->getMessage() . ' ' . $definition->getUserInfo();
+	}
+	else {
+		$operation = $schema->dumpDatabase($definition, $dump_config, MDB2_SCHEMA_DUMP_STRUCTURE);
+		if (PEAR::isError($operation)) {
+			$error = $operation->getMessage() . ' ' . $operation->getUserInfo();
+		}
+	}
+}
+
+$schema->disconnect();
+
+if ($error && !$_SERVER['REMOTE_ADDR'])
+	fputs(STDERR, $error);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/gc.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/gc.sh                                                             |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Trigger garbage collecting routines manually (e.g. via cronjob)     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require INSTALL_PATH.'program/include/clisetup.php';
+
+$rcmail = rcube::get_instance();
+
+$session_driver   = $rcmail->config->get('session_storage', 'db');
+$session_lifetime = $rcmail->config->get('session_lifetime', 0) * 60 * 2;
+
+// Clean expired SQL sessions
+if ($session_driver == 'db' && $session_lifetime) {
+    $db = $rcmail->get_dbh();
+    $db->query("DELETE FROM " . $db->table_name('session')
+        . " WHERE changed < " . $db->now(-$session_lifetime));
+}
+
+// Clean caches and temp directory
+$rcmail->gc();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/indexcontacts.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/indexcontacts.sh                                                  |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2011, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Update the fulltext index for all contacts of the internal          |
+ |   address book.                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH.'program/include/clisetup.php';
+ini_set('memory_limit', -1);
+
+rcmail_utils::indexcontacts();
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/initdb.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/initdb.sh                                                         |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2010-2015, The Roundcube Dev Team                       |
+ | Copyright (C) 2010-2015, Kolab Systems AG                             |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Create database schema                                              |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+// get arguments
+$opts = rcube_utils::get_opt(array(
+    'd' => 'dir',
+));
+
+if (empty($opts['dir'])) {
+    rcube::raise_error("Database schema directory not specified (--dir).", false, true);
+}
+
+// Check if directory exists
+if (!file_exists($opts['dir'])) {
+    rcube::raise_error("Specified database schema directory doesn't exist.", false, true);
+}
+
+rcmail_utils::db_init($opts['dir']);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/install-jsdeps.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,328 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/install-jsdeps.sh                                                 |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Utility script to fetch and install all 3rd party javascript        |
+ |   libraries unsed in Roundcube from source.                           |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <thomas@roundcube.net>                       |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+if (!function_exists('exec')) {
+  die("PHP exec() function is required. Check disable_functions in php.ini\n");
+}
+
+$SOURCES = json_decode(file_get_contents(INSTALL_PATH . 'jsdeps.json'), true);
+
+if (empty($SOURCES['dependencies'])) {
+  die("ERROR: Failed to read sources from " . INSTALL_PATH . "jsdeps.json\n");
+}
+
+$CURL = trim(`which curl`);
+$WGET = trim(`which wget`);
+$UNZIP = trim(`which unzip`);
+$FILEINFO = trim(`which file`);
+
+if (empty($UNZIP)) {
+  die("ERROR: Required program 'unzip' not found\n");
+}
+if (empty($FILEINFO)) {
+  die("ERROR: Required program 'file' not found\n");
+}
+if (empty($CURL) && empty($WGET)) {
+  die("ERROR: Required program 'wget' or 'curl' not found\n");
+}
+
+$CACHEDIR = sys_get_temp_dir();
+
+if (is_writeable(INSTALL_PATH . 'temp/js_cache') || @mkdir(INSTALL_PATH . 'temp/js_cache', 0774, true)) {
+  $CACHEDIR = INSTALL_PATH . 'temp/js_cache';
+}
+
+
+//////////////// License definitions
+
+$LICENSES = array();
+$LICENSES['MIT'] = <<<EOM
+ * Licensed under the MIT licenses
+ *
+ * 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.
+
+EOM;
+
+$LICENSES['GPLv3'] = <<<EOG
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GNU GPL) as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.  The code is distributed WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+ *
+ * As additional permission under GNU GPL version 3 section 7, you
+ * may distribute non-source (e.g., minimized or compacted) forms of
+ * that code without the copy of the GNU GPL normally required by
+ * section 4, provided you include this license notice and a URL
+ * through which recipients can access the Corresponding Source.
+
+EOG;
+
+$LICENSES['LGPL'] = <<<EOL
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+
+EOL;
+
+
+//////////////// Functions
+
+/**
+ * Fetch package file from source
+ */
+function fetch_from_source($package, $useCache = true, &$filetype = null)
+{
+  global $CURL, $WGET, $FILEINFO, $CACHEDIR;
+
+  $filetype = pathinfo($package['url'], PATHINFO_EXTENSION) ?: 'tmp';
+  $cache_file = $CACHEDIR . '/' . $package['lib'] . '-' . $package['version'] . '.' . $filetype;
+
+  if (!is_readable($cache_file) || !$useCache) {
+    echo "Fetching $package[url]\n";
+
+    if ($CURL)
+        exec(sprintf('%s -s %s -o %s', $CURL, escapeshellarg($package['url']), $cache_file), $out, $retval);
+    else
+        exec(sprintf('%s -q %s -O %s', $WGET, escapeshellarg($package['url']), $cache_file), $out, $retval);
+
+    if ($retval !== 0) {
+      die("ERROR: Failed to download source file from " . $package['url'] . "\n");
+    }
+  }
+
+  if (!empty($package['sha1']) && ($sum = sha1_file($cache_file)) !== $package['sha1']) {
+    die("ERROR: Incorrect sha1 sum of $cache_file. Expected: $package[sha1], got: $sum\n");
+  }
+
+  // detect downloaded/cached file type
+  exec(sprintf('%s -b %s', $FILEINFO, $cache_file), $out);
+  if (stripos($out[0], 'zip') === 0) {
+    $filetype = 'zip';
+  }
+
+  return $cache_file;
+}
+
+/**
+ * Create a destination javascript file with copyright and license header
+ */
+function compose_destfile($package, $srcfile)
+{
+  global $LICENSES;
+
+  $header = sprintf("/**\n * %s - v%s\n *\n", $package['name'], $package['version']);
+
+  if (!empty($package['source'])) {
+    $header .= " * @source " . $package['source'] . "\n";
+    $header .= " *\n";
+  }
+
+  if (!empty($package['license']) && isset($LICENSES[$package['license']])) {
+    $header .= " * @licstart  The following is the entire license notice for the\n";
+    $header .= " * JavaScript code in this file.\n";
+    $header .= " *\n";
+    if (!empty($package['copyright'])) {
+      $header .= " * " . $package['copyright'] . "\n";
+      $header .= " *\n";
+    }
+
+    $header .= $LICENSES[$package['license']];
+    $header .= " *\n";
+    $header .= " * @licend  The above is the entire license notice\n";
+    $header .= " * for the JavaScript code in this file.\n";
+  }
+
+  $header .= " */\n";
+
+  if (file_put_contents(INSTALL_PATH . $package['dest'], $header . file_get_contents($srcfile))) {
+    echo "Wrote file " . INSTALL_PATH . $package['dest'] . "\n";
+  }
+  else {
+    die("ERROR: Failed to write destination file " . INSTALL_PATH . $package['dest'] . "\n");
+  }
+}
+
+/**
+ * Extract a Zip archive into the destination specified by the package config
+ */
+function extract_zipfile($package, $srcfile)
+{
+  global $UNZIP, $CACHEDIR;
+
+  $destdir = INSTALL_PATH . $package['dest'];
+  if (!is_dir($destdir)) {
+    mkdir($destdir, 0774, true);
+  }
+
+  if (!is_writeable($destdir)) {
+    die("ERROR: Cannot write to destination directory $destdir\n");
+  }
+
+  // pick files from zip archive
+  if (!empty($package['pick'])) {
+    foreach ($package['pick'] as $pattern) {
+      echo "Extracting files $pattern into $destdir\n";
+      exec(sprintf('%s -o %s %s -d %s', $UNZIP, escapeshellarg($srcfile), escapeshellarg($pattern), $destdir), $out, $retval);
+      if ($retval !== 0) {
+        echo "ERROR: Failed to unpack $pattern; " . join('; ' . $out) . "\n";
+      }
+    }
+  }
+  // unzip the archive and map source to dest files/directories
+  else if (!empty($package['map'])) {
+    $extract = $CACHEDIR . '/' . $package['lib'] . '-extract';
+    if (!is_dir($extract)) {
+      mkdir($extract, 0774, true);
+    }
+    exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $extract), $out, $retval);
+
+    // get the root folder of the extracted package
+    $extract_tree = glob("$extract/*", GLOB_ONLYDIR);
+    $sourcedir    = $extract_tree[0];
+
+    foreach ($package['map'] as $src => $dest) {
+      echo "Installing files $sourcedir/$src into $destdir/$dest\n";
+
+      // make sure the destination's parent directory exists
+      if (strpos($dest, '/') !== false) {
+        $parentdir = dirname($destdir . '/' . $dest);
+        if (!is_dir($parentdir)) {
+          mkdir($parentdir, 0774, true);
+        }
+      }
+
+      // avoid copying source directory as a child into destination
+      if (is_dir($sourcedir . '/' . $src) && is_dir($destdir . '/' . $dest)) {
+        exec(sprintf('rm -rf %s/%s', $destdir, $dest));
+      }
+
+      exec(sprintf('mv -f %s/%s %s/%s', $sourcedir, $src, $destdir, $dest), $out, $retval);
+      if ($retval !== 0) {
+        echo "ERROR: Failed to move $src into $destdir/$dest; " . join('; ' . $out) . "\n";
+      }
+    }
+
+    // remove temp extraction dir
+    exec('rm -rf ' . $extract);
+  }
+  // extract the archive into the destination directory
+  else {
+    echo "Extracting zip archive into $destdir\n";
+    exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $destdir), $out, $retval);
+    if ($retval !== 0) {
+      echo "ERROR: Failed to unzip $srcfile; " . join('; ' . $out) . "\n";
+    }
+  }
+
+  // remove some files from the destination
+  if (!empty($package['omit'])) {
+    foreach ((array)$package['omit'] as $glob) {
+      exec(sprintf('rm -rf %s/%s', $destdir, escapeshellarg($glob)));
+    }
+  }
+
+  // prepend license header to extracted files
+  if (!empty($package['addlicense'])) {
+    foreach ((array)$package['addlicense'] as $filename) {
+      $pkg = $package;
+      $pkg['dest'] = $package['dest'] . '/' . $filename;
+      compose_destfile($pkg, $destdir . '/' . $filename);
+    }
+  }
+}
+
+/**
+ * Delete the package destination file/dir
+ */
+function delete_destfile($package)
+{
+  $destdir = INSTALL_PATH . ($package['rm'] ?: $package['dest']);
+
+  if (file_exists($destdir)) {
+    if (PHP_OS === 'Windows') {
+      exec(sprintf("rd /s /q %s", escapeshellarg($destdir)));
+    }
+    else {
+      exec(sprintf("rm -rf %s", escapeshellarg($destdir)));
+    }
+  }
+}
+
+
+//////////////// Execution
+
+$args = rcube_utils::get_opt(array('f' => 'force:bool', 'd' => 'delete:bool'))
+        + array('force' => false, 'delete' => false);
+$WHAT = $args[0];
+
+foreach ($SOURCES['dependencies'] as $package) {
+  if (!isset($package['name'])) {
+    $package['name'] = $package['lib'];
+  }
+
+  if ($WHAT && $package['lib'] !== $WHAT) {
+    continue;
+  }
+
+  if ($args['delete']) {
+    delete_destfile($package);
+    continue;
+  }
+
+  echo "Installing $package[name]...\n";
+
+  $srcfile = fetch_from_source($package, !$args['force'], $filetype);
+
+  if ($filetype === 'zip') {
+    extract_zipfile($package, $srcfile);
+  }
+  else {
+    compose_destfile($package, $srcfile);
+  }
+
+  echo "Done.\n\n";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/installto.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,125 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/installto.sh                                                      |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2014-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Update an existing Roundcube installation with files from           |
+ |   this version                                                        |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+if (!function_exists('system')) {
+  rcube::raise_error("PHP system() function is required. Check disable_functions in php.ini.", false, true);
+}
+
+$target_dir = unslashify($_SERVER['argv'][1]);
+
+if (empty($target_dir) || !is_dir(realpath($target_dir)))
+  rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh <TARGET>", false, true);
+
+// read version from iniset.php
+$iniset = @file_get_contents($target_dir . '/program/include/iniset.php');
+if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m))
+  rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true);
+
+$oldversion = $m[1];
+
+if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>='))
+  rcube::raise_error("Installation at target location is up-to-date!", false, true);
+
+echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n";
+$input = trim(fgets(STDIN));
+
+if (strtolower($input) == 'y') {
+  echo "Copying files to target location...";
+
+  // Save a copy of original .htaccess file (#1490623)
+  if (file_exists("$target_dir/.htaccess")) {
+    $htaccess_copied = copy("$target_dir/.htaccess", "$target_dir/.htaccess.orig");
+  }
+
+  $dirs = array('program','installer','bin','SQL','plugins','skins');
+  if (is_dir(INSTALL_PATH . 'vendor') && !is_file("$target_dir/composer.json")) {
+    $dirs[] = 'vendor';
+  }
+  foreach ($dirs as $dir) {
+    // @FIXME: should we use --delete for all directories?
+    $delete  = in_array($dir, array('program', 'installer', 'vendor')) ? '--delete ' : '';
+    $command = "rsync -aC --out-format=%n " . $delete . INSTALL_PATH . "$dir/ $target_dir/$dir/";
+    if (system($command, $ret) === false || $ret > 0) {
+      rcube::raise_error("Failed to execute command: $command", false, true);
+    }
+  }
+  foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','jsdeps.json','CHANGELOG','README.md','UPGRADING','LICENSE','INSTALL') as $file) {
+    $command = "rsync -a --out-format=%n " . INSTALL_PATH . "$file $target_dir/$file";
+    if (file_exists(INSTALL_PATH . $file) && (system($command, $ret) === false || $ret > 0)) {
+      rcube::raise_error("Failed to execute command: $command", false, true);
+    }
+  }
+
+  // remove old (<1.0) .htaccess file
+  @unlink("$target_dir/program/.htaccess");
+  echo "done.";
+
+  // Inform the user about .htaccess change
+  if (!empty($htaccess_copied)) {
+    if (file_get_contents("$target_dir/.htaccess") != file_get_contents("$target_dir/.htaccess.orig")) {
+      echo "\n!! Old .htaccess file saved as .htaccess.orig !!";
+    }
+    else {
+      @unlink("$target_dir/.htaccess.orig");
+    }
+  }
+
+  echo "\n\n";
+
+  if (is_dir("$target_dir/skins/default")) {
+      echo "Removing old default skin...";
+      system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
+      foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) {
+          $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir);
+          if (is_dir("$target_dir/$plugin_skin_dir/classic"))
+            system("rm -rf $target_dir/$plugin_skin_dir/default");
+      }
+      echo "done.\n\n";
+  }
+
+  // check if js-deps are up-to-date
+  if (file_exists("$target_dir/jsdeps.json") && file_exists("$target_dir/bin/install-jsdeps.sh")) {
+    $jsdeps = json_decode(file_get_contents("$target_dir/jsdeps.json"));
+    $package = $jsdeps->dependencies[0];
+    $dest_file = $target_dir . '/' . $package->dest;
+    if (!file_exists($dest_file) || sha1_file($dest_file) !== $package->sha1) {
+        echo "Installing JavaScript dependencies...";
+        system("cd $target_dir && bin/install-jsdeps.sh");
+        echo "done.\n\n";
+    }
+  }
+  else {
+    echo "JavaScript dependencies installation skipped...\n";
+  }
+
+  echo "Running update script at target...\n";
+  system("cd $target_dir && php bin/update.sh --version=$oldversion");
+  echo "All done.\n";
+}
+else {
+  echo "Update cancelled. See ya!\n";
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/jsshrink.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,75 @@
+#!/bin/sh
+PWD=`dirname "$0"`
+JS_DIR="$PWD/../program/js"
+JAR_DIR='/tmp'
+LANG_IN='ECMASCRIPT5'
+CLOSURE_COMPILER_URL='http://dl.google.com/closure-compiler/compiler-latest.zip'
+
+do_shrink() {
+	rm -f "$2"
+	# copy the first comment block with license information for LibreJS
+	grep -q '@lic' $1 && sed -n '/\/\*/,/\*\// { p; /\*\//q; }' $1 > $2
+	java -jar $JAR_DIR/compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS --js="$1" --language_in="$3" >> $2
+}
+
+if [ ! -d "$JS_DIR" ]; then
+	echo "Directory $JS_DIR not found."
+	exit 1
+fi
+
+if [ ! -w "$JAR_DIR" ]; then
+	JAR_DIR=$PWD
+fi
+
+if java -version >/dev/null 2>&1; then
+	:
+else
+	echo "Java not found. Please ensure that the 'java' program is in your PATH."
+	exit 1
+fi
+
+if [ ! -r "$JAR_DIR/compiler.jar" ]; then
+	if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then
+		wget "$CLOSURE_COMPILER_URL" -O "/tmp/$$.zip"
+	elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then
+		curl "$CLOSURE_COMPILER_URL" -o "/tmp/$$.zip"
+	else
+		echo "Please download $CLOSURE_COMPILER_URL and extract compiler.jar to $JAR_DIR/."
+		exit 1
+	fi
+	(cd $JAR_DIR && unzip -p "/tmp/$$.zip" "*.jar" > "$JAR_DIR/compiler.jar")
+	rm -f "/tmp/$$.zip"
+fi
+
+# compress single file from argument
+if [ $# -gt 0 ]; then
+	JS_DIR=`dirname "$1"`
+	JS_FILE="$1"
+
+	if [ $# -gt 1 ]; then
+		LANG_IN="$2"
+	fi
+
+	echo "Shrinking $JS_FILE"
+    minfile=`echo $JS_FILE | sed -e 's/\.js$/\.min\.js/'`
+	do_shrink "$JS_FILE" "$minfile" "$LANG_IN"
+	exit
+fi
+
+DIRS="$PWD/../program/js $PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/* $PWD/../plugins/managesieve/codemirror/lib"
+# default: compress application scripts
+for dir in $DIRS; do
+    for file in $dir/*.js; do
+        echo "$file" | grep -e '.min.js$' >/dev/null
+        if [ $? -eq 0 ]; then
+            continue
+        fi
+        if [ ! -f "$file" ]; then
+            continue
+        fi
+
+        echo "Shrinking $file"
+        minfile=`echo $file | sed -e 's/\.js$/\.min\.js/'`
+        do_shrink "$file" "$minfile" "$LANG_IN"
+    done
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/makedoc.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+TITLE="Roundcube Webmail"
+PACKAGES="Webmail"
+
+INSTALL_PATH="`dirname $0`/.."
+PATH_PROJECT=$INSTALL_PATH/program/include
+PATH_FRAMEWORK=$INSTALL_PATH/program/lib/Roundcube
+PATH_DOCS=$INSTALL_PATH/doc/phpdoc
+BIN_PHPDOC="`/usr/bin/which phpdoc`"
+
+if [ ! -x "$BIN_PHPDOC" ]
+then
+  echo "phpdoc not found: $BIN_PHPDOC"
+  exit 1
+fi
+
+OUTPUTFORMAT=HTML
+TEMPLATE=responsive-twig
+
+# make documentation
+$BIN_PHPDOC -d $PATH_PROJECT,$PATH_FRAMEWORK -t $PATH_DOCS --title "$TITLE" --defaultpackagename $PACKAGES \
+	--template=$TEMPLATE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/moduserprefs.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,68 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/moduserprefs.sh                                                   |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2012-2015, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Bulk-change settings stored in user preferences                     |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH.'program/include/clisetup.php';
+
+function print_usage()
+{
+    print "Usage: moduserprefs.sh [options] pref-name [pref-value]\n";
+    print "Options:\n";
+    print "    --user=user-id User ID in local database\n";
+    print "    --config=path  Location of additional configuration file\n";
+    print "    --delete       Unset the given preference\n";
+    print "    --type=type    Pref-value type: int, bool, string\n";
+}
+
+
+// get arguments
+$args = rcube_utils::get_opt(array(
+        'u' => 'user',
+        'd' => 'delete:bool',
+        't' => 'type',
+        'c' => 'config',
+));
+
+if ($_SERVER['argv'][1] == 'help') {
+    print_usage();
+    exit;
+}
+else if (empty($args[0]) || (empty($args[1]) && empty($args['delete']))) {
+    print "Missing required parameters.\n";
+    print_usage();
+    exit;
+}
+
+$pref_name  = trim($args[0]);
+$pref_value = $args['delete'] ? null : trim($args[1]);
+
+if ($pref_value === null) {
+    $args['type'] = null;
+}
+
+if ($args['config']) {
+    $rcube = rcube::get_instance();
+    $rcube->config->load_from_file($args['config']);
+}
+
+rcmail_utils::mod_pref($pref_name, $pref_value, $args['user'], $args['type']);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/msgexport.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,143 @@
+#!/usr/bin/env php
+<?php
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+ini_set('memory_limit', -1);
+
+require_once INSTALL_PATH.'program/include/clisetup.php';
+
+function print_usage()
+{
+	print "Usage:  msgexport -h imap-host -u user-name -m mailbox name\n";
+	print "--host   IMAP host\n";
+	print "--user   IMAP user name\n";
+	print "--mbox   Folder name, set to '*' for all\n";
+	print "--file   Output file\n";
+}
+
+function vputs($str)
+{
+	$out = $GLOBALS['args']['file'] ? STDOUT : STDERR;
+	fwrite($out, $str);
+}
+
+function progress_update($pos, $max)
+{
+	$percent = round(100 * $pos / $max);
+	vputs(sprintf("%3d%% [%-51s] %d/%d\033[K\r", $percent, @str_repeat('=', $percent / 2) . '>', $pos, $max));
+}
+
+function export_mailbox($mbox, $filename)
+{
+	global $IMAP;
+
+	$IMAP->set_folder($mbox);
+
+    $index = $IMAP->index($mbox, null, 'ASC');
+    $count = $index->count();
+    $index = $index->get();
+
+	vputs("Getting message list of {$mbox}...");
+	vputs("$count messages\n");
+
+	if ($filename)
+	{
+		if (!($out = fopen($filename, 'w')))
+		{
+			vputs("Cannot write to output file\n");
+			return;
+		}
+		vputs("Writing to $filename\n");
+	}
+	else
+		$out = STDOUT;
+
+	for ($i = 0; $i < $count; $i++)
+	{
+		$headers = $IMAP->get_message_headers($index[$i]);
+		$from = current(rcube_mime::decode_address_list($headers->from, 1, false));
+
+		fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid));
+		$IMAP->get_raw_body($headers->uid, $out);
+		fwrite($out, "\n\n\n");
+
+		progress_update($i+1, $count);
+	}
+	vputs("\ncomplete.\n");
+
+	if ($filename)
+		fclose($out);
+}
+
+
+// get arguments
+$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
+$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
+
+if ($_SERVER['argv'][1] == 'help')
+{
+	print_usage();
+	exit;
+}
+else if (!$args['host'])
+{
+	vputs("Missing required parameters.\n");
+	print_usage();
+	exit;
+}
+
+// prompt for username if not set
+if (empty($args['user']))
+{
+	vputs("IMAP user: ");
+	$args['user'] = trim(fgets(STDIN));
+}
+
+// prompt for password
+$args['pass'] = rcube_utils::prompt_silent("Password: ");
+
+
+// parse $host URL
+$a_host = parse_url($args['host']);
+if ($a_host['host'])
+{
+	$host = $a_host['host'];
+	$imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+	$imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
+}
+else
+{
+	$host = $args['host'];
+	$imap_port = 143;
+}
+
+// instantiate IMAP class
+$IMAP = new rcube_imap(null);
+
+// try to connect to IMAP server
+if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
+{
+	vputs("IMAP login successful.\n");
+
+	$filename = null;
+	$mailboxes = $args['mbox'] == '*' ? $IMAP->list_folders(null) : array($args['mbox']);
+
+	foreach ($mailboxes as $mbox)
+	{
+		if ($args['file'])
+			$filename = preg_replace('/\.[a-z0-9]{3,4}$/i', '', $args['file']) . asciiwords($mbox) . '.mbox';
+		else if ($args['mbox'] == '*')
+			$filename = asciiwords($mbox) . '.mbox';
+
+		if ($args['mbox'] == '*' && in_array(strtolower($mbox), array('junk','spam','trash')))
+			continue;
+
+		export_mailbox($mbox, $filename);
+	}
+}
+else
+{
+	vputs("IMAP login failed.\n");
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/msgimport.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,113 @@
+#!/usr/bin/env php
+<?php
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+ini_set('memory_limit', -1);
+
+require_once INSTALL_PATH.'program/include/clisetup.php';
+
+function print_usage()
+{
+	print "Usage:  msgimport -h imap-host -u user-name -m mailbox -f message-file\n";
+	print "--host   IMAP host\n";
+	print "--user   IMAP user name\n";
+	print "--mbox   Target mailbox\n";
+	print "--file   Message file to upload\n";
+}
+
+
+// get arguments
+$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
+$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
+
+if ($_SERVER['argv'][1] == 'help')
+{
+	print_usage();
+	exit;
+}
+else if (!($args['host'] && $args['file']))
+{
+	print "Missing required parameters.\n";
+	print_usage();
+	exit;
+}
+else if (!is_file($args['file']))
+{
+	rcube::raise_error("Cannot read message file.", false, true);
+}
+
+// prompt for username if not set
+if (empty($args['user']))
+{
+	//fwrite(STDOUT, "Please enter your name\n");
+	echo "IMAP user: ";
+	$args['user'] = trim(fgets(STDIN));
+}
+
+// prompt for password
+if (empty($args['pass']))
+{
+	$args['pass'] = rcube_utils::prompt_silent("Password: ");
+}
+
+// parse $host URL
+$a_host = parse_url($args['host']);
+if ($a_host['host'])
+{
+	$host = $a_host['host'];
+	$imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+	$imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
+}
+else
+{
+	$host = $args['host'];
+	$imap_port = 143;
+}
+
+// instantiate IMAP class
+$IMAP = new rcube_imap(null);
+
+// try to connect to IMAP server
+if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
+{
+	print "IMAP login successful.\n";
+	print "Uploading messages...\n";
+	
+	$count = 0;
+	$message = $lastline = '';
+	
+	$fp = fopen($args['file'], 'r');
+	while (($line = fgets($fp)) !== false)
+	{
+		if (preg_match('/^From\s+-/', $line) && $lastline == '')
+		{
+			if (!empty($message))
+			{
+				if ($IMAP->save_message($args['mbox'], rtrim($message)))
+					$count++;
+				else
+					rcube::raise_error("Failed to save message to {$args['mbox']}", false, true);
+				$message = '';
+			}
+			continue;
+		}
+
+		$message .= $line;
+		$lastline = rtrim($line);
+	}
+
+	if (!empty($message) && $IMAP->save_message($args['mbox'], rtrim($message)))
+		$count++;
+
+	// upload message from file
+	if ($count)
+		print "$count messages successfully added to {$args['mbox']}.\n";
+	else
+		print "Adding messages failed!\n";
+}
+else
+{
+	rcube::raise_error("IMAP login failed.", false, true);
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/update.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,275 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/update.sh                                                         |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2010-2015, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Check local configuration and database schema after upgrading       |
+ |   to a new version                                                    |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+// get arguments
+$opts = rcube_utils::get_opt(array('v' => 'version', 'y' => 'accept:bool'));
+
+// ask user if no version is specified
+if (!$opts['version']) {
+  echo "What version are you upgrading from? Type '?' if you don't know.\n";
+  if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z-]*$/', $input))
+    $opts['version'] = $input;
+  else
+    $opts['version'] = RCMAIL_VERSION;
+}
+
+$RCI = rcmail_install::get_instance();
+$RCI->load_config();
+
+if ($RCI->configured) {
+  $success = true;
+
+  if (($messages = $RCI->check_config()) || $RCI->legacy_config) {
+    $success = false;
+    $err = 0;
+
+    // list old/replaced config options
+    if (is_array($messages['replaced'])) {
+      echo "WARNING: Replaced config options:\n";
+      echo "(These config options have been replaced or renamed)\n";
+
+      foreach ($messages['replaced'] as $msg) {
+        echo "- '" . $msg['prop'] . "' was replaced by '" . $msg['replacement'] . "'\n";
+        $err++;
+      }
+      echo "\n";
+    }
+
+    // list obsolete config options (just a notice)
+    if (is_array($messages['obsolete'])) {
+      echo "NOTICE: Obsolete config options:\n";
+      echo "(You still have some obsolete or inexistent properties set. This isn't a problem but should be noticed)\n";
+
+      foreach ($messages['obsolete'] as $msg) {
+        echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n";
+        $err++;
+      }
+      echo "\n";
+    }
+
+    if (!$err && $RCI->legacy_config) {
+      echo "WARNING: Your configuration needs to be migrated!\n";
+      echo "We changed the configuration files structure and your two config files main.inc.php and db.inc.php have to be merged into one single file.\n";
+      $err++;
+    }
+
+    // ask user to update config files
+    if ($err) {
+      if (!$opts['accept']) {
+        echo "Do you want me to fix your local configuration? (y/N)\n";
+        $input = trim(fgets(STDIN));
+      }
+
+      // positive: let's merge the local config with the defaults
+      if ($opts['accept'] || strtolower($input) == 'y') {
+        $error = $written = false;
+
+        // backup current config
+        echo ". backing up the current config file(s)...\n";
+
+        foreach (array('config', 'main', 'db') as $file) {
+          if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) {
+            if (!copy(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php', RCMAIL_CONFIG_DIR . '/' . $file . '.old.php')) {
+              $error = true;
+            }
+          }
+        }
+
+        if (!$error) {
+          $RCI->merge_config();
+          echo ". writing " . RCMAIL_CONFIG_DIR . "/config.inc.php...\n";
+          $written = $RCI->save_configfile($RCI->create_config());
+        }
+
+        // Success!
+        if ($written) {
+          echo "Done.\n";
+          echo "Your configuration files are now up-to-date!\n";
+
+          if ($messages['missing']) {
+            echo "But you still need to add the following missing options:\n";
+            foreach ($messages['missing'] as $msg)
+              echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n";
+          }
+
+          if ($RCI->legacy_config) {
+            foreach (array('main', 'db') as $file) {
+              @unlink(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php');
+            }
+          }
+        }
+        else {
+          echo "Failed to write config file(s)!\n";
+          echo "Grant write privileges to the current user or update the files manually according to the above messages.\n";
+        }
+      }
+      else {
+        echo "Please update your config files manually according to the above messages.\n";
+      }
+    }
+
+    // check dependencies based on the current configuration
+    if (is_array($messages['dependencies'])) {
+      echo "WARNING: Dependency check failed!\n";
+      echo "(Some of your configuration settings require other options to be configured or additional PHP modules to be installed)\n";
+
+      foreach ($messages['dependencies'] as $msg) {
+        echo "- " . $msg['prop'] . ': ' . $msg['explain'] . "\n";
+      }
+      echo "Please fix your config files and run this script again!\n";
+      echo "See ya.\n";
+    }
+  }
+
+  // check file type detection
+  if ($RCI->check_mime_detection()) {
+    echo "WARNING: File type detection doesn't work properly!\n";
+    echo "Please check the 'mime_magic' config option or the finfo functions of PHP and run this script again.\n";
+  }
+  if ($RCI->check_mime_extensions()) {
+    echo "WARNING: Mimetype to file extension mapping doesn't work properly!\n";
+    echo "Please check the 'mime_types' config option and run this script again.\n";
+  }
+
+  // check database schema
+  if ($RCI->config['db_dsnw']) {
+    echo "Executing database schema update.\n";
+    $success = rcmail_utils::db_update(INSTALL_PATH . 'SQL', 'roundcube', $opts['version'],
+        array('errors' => true));
+  }
+
+  // update composer dependencies
+  if (is_file(INSTALL_PATH . 'composer.json') && is_readable(INSTALL_PATH . 'composer.json-dist')) {
+    $composer_data = json_decode(file_get_contents(INSTALL_PATH . 'composer.json'), true);
+    $composer_template = json_decode(file_get_contents(INSTALL_PATH . 'composer.json-dist'), true);
+    $comsposer_json = null;
+
+    // update the require section with the new dependencies
+    if (is_array($composer_data['require']) && is_array($composer_template['require'])) {
+      $composer_data['require'] = array_merge($composer_data['require'], $composer_template['require']);
+
+      // remove obsolete packages
+      $old_packages = array(
+        'pear-pear.php.net/net_socket',
+        'pear-pear.php.net/auth_sasl',
+        'pear-pear.php.net/net_idna2',
+        'pear-pear.php.net/mail_mime',
+        'pear-pear.php.net/net_smtp',
+        'pear-pear.php.net/crypt_gpg',
+        'pear-pear.php.net/net_sieve',
+        'pear/mail_mime-decode',
+        'roundcube/net_sieve',
+      );
+      foreach ($old_packages as $pkg) {
+        if (array_key_exists($pkg, $composer_data['require'])) {
+          unset($composer_data['require'][$pkg]);
+        }
+      }
+    }
+
+    // update the repositories section with the new dependencies
+    if (is_array($composer_template['repositories'])) {
+      if (!is_array($composer_data['repositories'])) {
+        $composer_data['repositories'] = array();
+      }
+
+      foreach ($composer_template['repositories'] as $repo) {
+        $rkey = $repo['type'] . preg_replace('/^https?:/', '', $repo['url']) . $repo['package']['name'];
+        $existing = false;
+        foreach ($composer_data['repositories'] as $k =>  $_repo) {
+          if ($rkey == $_repo['type'] . preg_replace('/^https?:/', '', $_repo['url']) . $_repo['package']['name']) {
+            // switch to https://
+            if (isset($_repo['url']) && strpos($_repo['url'], 'http://') === 0)
+              $composer_data['repositories'][$k]['url'] = 'https:' . substr($_repo['url'], 5);
+            $existing = true;
+            break;
+          }
+          // remove old repos
+          else if (strpos($_repo['url'], 'git://git.kolab.org') === 0) {
+            unset($composer_data['repositories'][$k]);
+          }
+          else if ($_repo['type'] == 'package' && $_repo['package']['name'] == 'Net_SMTP') {
+            unset($composer_data['repositories'][$k]);
+          }
+        }
+        if (!$existing) {
+          $composer_data['repositories'][] = $repo;
+        }
+      }
+
+      $composer_data['repositories'] = array_values($composer_data['repositories']);
+    }
+
+    // use the JSON encoder from the Composer package
+    if (is_file('composer.phar')) {
+      include 'phar://composer.phar/src/Composer/Json/JsonFile.php';
+      $comsposer_json = \Composer\Json\JsonFile::encode($composer_data);
+    }
+    // PHP 5.4's json_encode() does the job, too
+    else if (defined('JSON_PRETTY_PRINT')) {
+      $comsposer_json = json_encode($composer_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+    }
+    else {
+      $success = false;
+      $comsposer_json = null;
+    }
+
+    // write updated composer.json back to disk
+    if ($comsposer_json && is_writeable(INSTALL_PATH . 'composer.json')) {
+      $success &= (bool)file_put_contents(INSTALL_PATH . 'composer.json', $comsposer_json);
+    }
+    else {
+      echo "WARNING: unable to update composer.json!\n";
+      echo "Please replace the 'require' section in your composer.json with the following:\n";
+
+      $require_json = '';
+      foreach ($composer_data['require'] as $pkg => $ver) {
+        $require_json .= sprintf('        "%s": "%s",'."\n", $pkg, $ver);
+      }
+
+      echo '    "require": {'."\n";
+      echo rtrim($require_json, ",\n");
+      echo "\n    }\n\n";
+    }
+
+    echo "NOTE: Update dependencies by running `php composer.phar update --no-dev`\n";
+  }
+
+  // index contacts for fulltext searching
+  if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) {
+    rcmail_utils::indexcontacts();
+  }
+
+  if ($success) {
+    echo "This instance of Roundcube is up-to-date.\n";
+    echo "Have fun!\n";
+  }
+}
+else {
+  echo "This instance of Roundcube is not yet configured!\n";
+  echo "Open http://url-to-roundcube/installer/ in your browser and follow the instuctions.\n";
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/updatecss.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,122 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/updatecss.sh                                                      |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2010-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Update cache-baster marks for css background images                 |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+// get arguments
+$opts = rcube_utils::get_opt(array(
+    'd' => 'dir',
+));
+
+if (empty($opts['dir'])) {
+    print "Skin directory not specified (--dir). Using skins/ and plugins/*/skins/.\n";
+
+    $dir     = INSTALL_PATH . 'skins';
+    $dir_p   = INSTALL_PATH . 'plugins';
+    $skins   = glob("$dir/*", GLOB_ONLYDIR);
+    $skins_p = glob("$dir_p/*/skins/*", GLOB_ONLYDIR);
+
+    $dirs = array_merge($skins, $skins_p);
+}
+// Check if directory exists
+else if (!file_exists($opts['dir'])) {
+    rcube::raise_error("Specified directory doesn't exist.", false, true);
+}
+else {
+    $dirs = array($opts['dir']);
+}
+
+foreach ($dirs as $dir) {
+    $img_dir = $dir . '/images';
+    if (!file_exists($img_dir)) {
+        continue;
+    }
+
+    $files   = get_files($dir);
+    $images  = get_images($img_dir);
+    $find    = array();
+    $replace = array();
+
+    // build regexps array
+    foreach ($images as $path => $sum) {
+        $path_ex   = str_replace('.', '\\.', $path);
+        $find[]    = "#url\(['\"]?images/$path_ex(\?v=[a-f0-9-\.]+)?['\"]?\)#";
+        $replace[] = "url(images/$path?v=$sum)";
+    }
+
+    foreach ($files as $file) {
+        $file    = $dir . '/' . $file;
+        print "File: $file\n";
+        $content = file_get_contents($file);
+        $content = preg_replace($find, $replace, $content, -1, $count);
+        if ($count) {
+            file_put_contents($file, $content);
+        }
+    }
+}
+
+
+function get_images($dir)
+{
+    $images = array();
+    $dh     = opendir($dir);
+
+    while ($file = readdir($dh)) {
+        if (preg_match('/^(.+)\.(gif|ico|png|jpg|jpeg)$/', $file, $m)) {
+            $filepath = "$dir/$file";
+            $images[$file] = substr(md5_file($filepath), 0, 4) . '.' . filesize($filepath);
+            print "Image: $filepath ({$images[$file]})\n";
+        }
+        else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) {
+            foreach (get_images($dir . '/' . $file) as $img => $sum) {
+                $images[$file . '/' . $img] = $sum;
+            }
+        }
+    }
+
+    closedir($dh);
+
+    return $images;
+}
+
+function get_files($dir)
+{
+    $files = array();
+    $dh    = opendir($dir);
+
+    while ($file = readdir($dh)) {
+        if (preg_match('/^(.+)\.(css|html)$/', $file, $m)) {
+            $files[] = $file;
+        }
+        else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) {
+            foreach (get_files($dir . '/' . $file) as $f) {
+                $files[] = $file . '/' . $f;
+            }
+        }
+    }
+
+    closedir($dh);
+
+    return $files;
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/updatedb.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+#!/usr/bin/env php
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | bin/updatedb.sh                                                       |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2010-2012, The Roundcube Dev Team                       |
+ | Copyright (C) 2010-2012, Kolab Systems AG                             |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Update database schema                                              |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+*/
+
+define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+// get arguments
+$opts = rcube_utils::get_opt(array(
+    'v' => 'version',
+    'd' => 'dir',
+    'p' => 'package',
+));
+
+if (empty($opts['dir'])) {
+    rcube::raise_error("Database schema directory not specified (--dir).", false, true);
+}
+if (empty($opts['package'])) {
+    rcube::raise_error("Database schema package name not specified (--package).", false, true);
+}
+
+rcmail_utils::db_update($opts['dir'], $opts['package'], $opts['version'], array('errors' => true));
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+{
+    "name": "roundcube/roundcubemail",
+    "description": "The Roundcube Webmail suite",
+    "license": "GPL-3.0+",
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "https://plugins.roundcube.net/"
+        },
+        {
+            "type": "vcs",
+            "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap.git"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "pear/pear-core-minimal": "~1.10.1",
+        "pear/net_socket": "~1.2.1",
+        "pear/auth_sasl": "~1.1.0",
+        "pear/net_idna2": "~0.2.0",
+        "pear/mail_mime": "~1.10.0",
+        "pear/net_smtp": "~1.7.1",
+        "pear/crypt_gpg": "~1.6.0",
+        "pear/net_sieve": "~1.4.0",
+        "roundcube/plugin-installer": "~0.1.6",
+        "endroid/qrcode": "~1.6.5",
+        "roundcube/filters": "dev-filters-2.1.6",
+        "weird-birds/thunderbird_labels": "v1.1.4",
+        "johndoh/contextmenu": ">=2.3"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^4.8.36 || ^5.7.21"
+    },
+    "suggest": {
+        "pear/net_ldap2": "~2.2.0 required for connecting to LDAP",
+        "kolab/net_ldap3": "~1.0.6 required for connecting to LDAP"
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/composer.json-dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+{
+    "name": "roundcube/roundcubemail",
+    "description": "The Roundcube Webmail suite",
+    "license": "GPL-3.0+",
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "https://plugins.roundcube.net/"
+        },
+        {
+            "type": "vcs",
+            "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap.git"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "pear/pear-core-minimal": "~1.10.1",
+        "pear/net_socket": "~1.2.1",
+        "pear/auth_sasl": "~1.1.0",
+        "pear/net_idna2": "~0.2.0",
+        "pear/mail_mime": "~1.10.0",
+        "pear/net_smtp": "~1.7.1",
+        "pear/crypt_gpg": "~1.6.0",
+        "pear/net_sieve": "~1.4.0",
+        "roundcube/plugin-installer": "~0.1.6",
+        "endroid/qrcode": "~1.6.5"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^4.8.36 || ^5.7.15"
+    },
+    "suggest": {
+        "pear/net_ldap2": "~2.2.0 required for connecting to LDAP",
+        "kolab/Net_LDAP3": "dev-master required for connecting to LDAP"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/composer.lock	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2220 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "dc36740daca018fc6288654a7f3e39be",
+    "packages": [
+        {
+            "name": "composer/semver",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/semver.git",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Semver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
+            "time": "2016-08-30T16:08:34+00:00"
+        },
+        {
+            "name": "endroid/qrcode",
+            "version": "1.6.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/endroid/qr-code.git",
+                "reference": "cef5d5b7b904d7bb0708eb744c35316364b65fa0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/endroid/qr-code/zipball/cef5d5b7b904d7bb0708eb744c35316364b65fa0",
+                "reference": "cef5d5b7b904d7bb0708eb744c35316364b65fa0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-gd": "*",
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Endroid\\QrCode\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jeroen van den Enden",
+                    "email": "info@endroid.nl",
+                    "homepage": "http://endroid.nl/"
+                }
+            ],
+            "description": "Endroid QR Code",
+            "homepage": "https://github.com/endroid/QrCode",
+            "keywords": [
+                "code",
+                "endroid",
+                "qr",
+                "qrcode"
+            ],
+            "abandoned": "endroid/qr-code",
+            "time": "2016-05-29T07:37:18+00:00"
+        },
+        {
+            "name": "johndoh/contextmenu",
+            "version": "2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JohnDoh/roundcube-contextmenu.git",
+                "reference": "7a03909260638a6ae05567b091dc120b653b1330"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JohnDoh/roundcube-contextmenu/zipball/7a03909260638a6ae05567b091dc120b653b1330",
+                "reference": "7a03909260638a6ae05567b091dc120b653b1330",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2.1",
+                "roundcube/plugin-installer": ">=0.1.2"
+            },
+            "type": "roundcube-plugin",
+            "extra": {
+                "roundcube": {
+                    "min-version": "1.3"
+                }
+            },
+            "notification-url": "https://plugins.roundcube.net/downloads/",
+            "license": [
+                "GPL-3.0"
+            ],
+            "authors": [
+                {
+                    "name": "Philip Weir",
+                    "email": "roundcube@tehinterweb.co.uk",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Adds context menus with common tasks to various parts of Roundcube",
+            "homepage": "http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/",
+            "keywords": [
+                "context",
+                "menu",
+                "right-click"
+            ],
+            "time": "2017-06-14T05:37:14+00:00"
+        },
+        {
+            "name": "pear/auth_sasl",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Auth_SASL.git",
+                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Auth_SASL/zipball/db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
+                "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear_exception": "@stable"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "@stable"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Auth": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD"
+            ],
+            "authors": [
+                {
+                    "name": "Anish Mistry",
+                    "email": "amistry@am-productions.biz",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Richard Heyes",
+                    "email": "richard@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Michael Bretterklieber",
+                    "email": "michael@bretterklieber.com",
+                    "role": "Lead"
+                }
+            ],
+            "description": "Abstraction of various SASL mechanism responses",
+            "time": "2017-03-07T14:37:05+00:00"
+        },
+        {
+            "name": "pear/console_commandline",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Console_CommandLine.git",
+                "reference": "7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Console_CommandLine/zipball/7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67",
+                "reference": "7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xml": "*",
+                "pear/pear_exception": "^1.0.0",
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Console": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Richard Quadling",
+                    "email": "RQuadling@GMail.com"
+                },
+                {
+                    "name": "David Jean Louis",
+                    "email": "izimobil@gmail.com"
+                }
+            ],
+            "description": "A full featured command line options and arguments parser.",
+            "homepage": "https://github.com/pear/Console_CommandLine",
+            "keywords": [
+                "console"
+            ],
+            "time": "2016-07-14T06:00:57+00:00"
+        },
+        {
+            "name": "pear/console_getopt",
+            "version": "v1.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Console_Getopt.git",
+                "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
+                "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Console": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
+                },
+                {
+                    "name": "Andrei Zmievski",
+                    "email": "andrei@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stig Bakken",
+                    "email": "stig@php.net",
+                    "role": "Developer"
+                }
+            ],
+            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+            "time": "2015-07-20T20:28:12+00:00"
+        },
+        {
+            "name": "pear/crypt_gpg",
+            "version": "v1.6.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Crypt_GPG.git",
+                "reference": "43066ee0f1cad38aa6cf41ed13db34a2792e527d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Crypt_GPG/zipball/43066ee0f1cad38aa6cf41ed13db34a2792e527d",
+                "reference": "43066ee0f1cad38aa6cf41ed13db34a2792e527d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "pear/console_commandline": "*",
+                "pear/pear_exception": "*",
+                "php": ">=5.4.8"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "ext-posix": "May require the posix PHP extension"
+            },
+            "bin": [
+                "scripts/crypt-gpg-pinentry"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Crypt": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "LGPL-2.1"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Gauthier",
+                    "email": "mike@silverorange.com"
+                },
+                {
+                    "name": "Nathan Fredrickson",
+                    "email": "nathan@silverorange.com"
+                },
+                {
+                    "name": "Aleksander Machniak",
+                    "email": "alec@alec.pl"
+                }
+            ],
+            "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
+            "homepage": "https://github.com/pear/Crypt_GPG",
+            "keywords": [
+                "PGP",
+                "encryption",
+                "gnupg",
+                "gpg"
+            ],
+            "time": "2017-09-03T07:55:02+00:00"
+        },
+        {
+            "name": "pear/mail_mime",
+            "version": "1.10.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Mail_Mime.git",
+                "reference": "7b2f93fa5219da99e9997f497b916b5bb27eb57a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/7b2f93fa5219da99e9997f497b916b5bb27eb57a",
+                "reference": "7b2f93fa5219da99e9997f497b916b5bb27eb57a",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear-core-minimal": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Mail": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-3-clause"
+            ],
+            "authors": [
+                {
+                    "name": "Cipriano Groenendal",
+                    "email": "cipri@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Aleksander Machniak",
+                    "email": "alec@php.net",
+                    "role": "Lead"
+                }
+            ],
+            "description": "Mail_Mime provides classes to create MIME messages",
+            "homepage": "http://pear.php.net/package/Mail_Mime",
+            "time": "2017-11-17T09:21:45+00:00"
+        },
+        {
+            "name": "pear/net_idna2",
+            "version": "v0.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Net_IDNA2.git",
+                "reference": "51734eaf8be2df58e8aad5835b9966459b2fb37c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Net_IDNA2/zipball/51734eaf8be2df58e8aad5835b9966459b2fb37c",
+                "reference": "51734eaf8be2df58e8aad5835b9966459b2fb37c",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear_exception": "@stable"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Net": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "LGPL"
+            ],
+            "authors": [
+                {
+                    "name": "Stefan Neufeind",
+                    "email": "pear.neufeind@speedpartner.de",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Daniel O'Connor",
+                    "email": "daniel.oconnor@gmail.com",
+                    "role": "Lead"
+                }
+            ],
+            "description": "More info available on: https://pear.php.net/package/Net_IDNA2",
+            "time": "2017-03-06T20:46:41+00:00"
+        },
+        {
+            "name": "pear/net_sieve",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Net_Sieve.git",
+                "reference": "0058a5e3c84841fe841c055e118fbee4ed239a8f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Net_Sieve/zipball/0058a5e3c84841fe841c055e118fbee4ed239a8f",
+                "reference": "0058a5e3c84841fe841c055e118fbee4ed239a8f",
+                "shasum": ""
+            },
+            "require": {
+                "pear/net_socket": "*",
+                "pear/pear-core-minimal": "*"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7.15"
+            },
+            "suggest": {
+                "pear/auth_sasl": "Install optionally via your project's composer.json"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "./"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD"
+            ],
+            "authors": [
+                {
+                    "name": "Anish Mistry",
+                    "email": "amistry@am-productions.biz",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Richard Heyes",
+                    "email": "richard@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Jan Schneider",
+                    "email": "jan@horde.org",
+                    "role": "lead"
+                },
+                {
+                    "name": "Damian Fernandez Sosa",
+                    "email": "damlists@cnba.uba.ar",
+                    "role": "Lead"
+                }
+            ],
+            "description": "More info available on: http://pear.php.net/package/Net_Sieve",
+            "time": "2017-05-21T10:17:48+00:00"
+        },
+        {
+            "name": "pear/net_smtp",
+            "version": "1.7.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Net_SMTP.git",
+                "reference": "e066e5ee011ae056c03db1a95d210fc09649b477"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477",
+                "reference": "e066e5ee011ae056c03db1a95d210fc09649b477",
+                "shasum": ""
+            },
+            "require": {
+                "pear/net_socket": "*",
+                "pear/pear-core-minimal": "*",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "pear/auth_sasl": "Install optionally via your project's composer.json"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Net": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "PHP-3.01"
+            ],
+            "authors": [
+                {
+                    "name": "Jon Parise",
+                    "email": "jon@php.net",
+                    "homepage": "http://www.indelible.org",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Chuck Hagenbuch",
+                    "email": "chuck@horde.org",
+                    "role": "Lead"
+                }
+            ],
+            "description": "An implementation of the SMTP protocol",
+            "homepage": "http://pear.github.io/Net_SMTP/",
+            "keywords": [
+                "email",
+                "mail",
+                "smtp"
+            ],
+            "time": "2017-01-14T18:19:55+00:00"
+        },
+        {
+            "name": "pear/net_socket",
+            "version": "v1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Net_Socket.git",
+                "reference": "f31d75ac352d49908f8987bbb1496c02a409812a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a",
+                "reference": "f31d75ac352d49908f8987bbb1496c02a409812a",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear_exception": "@stable",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Net": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Chuck Hagenbuch",
+                    "email": "chuck@horde.org",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Aleksander Machniak",
+                    "email": "alec@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stig Bakken",
+                    "email": "stig@php.net",
+                    "role": "Lead"
+                }
+            ],
+            "description": "More info available on: http://pear.php.net/package/Net_Socket",
+            "time": "2017-04-06T15:16:38+00:00"
+        },
+        {
+            "name": "pear/pear-core-minimal",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/pear-core-minimal.git",
+                "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115",
+                "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115",
+                "shasum": ""
+            },
+            "require": {
+                "pear/console_getopt": "~1.4",
+                "pear/pear_exception": "~1.0"
+            },
+            "replace": {
+                "rsky/pear-core-min": "self.version"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "src/"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Weiske",
+                    "email": "cweiske@php.net",
+                    "role": "Lead"
+                }
+            ],
+            "description": "Minimal set of PEAR core files to be used as composer dependency",
+            "time": "2017-02-28T16:46:11+00:00"
+        },
+        {
+            "name": "pear/pear_exception",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/PEAR_Exception.git",
+                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
+                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=4.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "class",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "PEAR": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "."
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Helgi Thormar",
+                    "email": "dufuz@php.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net"
+                }
+            ],
+            "description": "The PEAR Exception base class.",
+            "homepage": "https://github.com/pear/PEAR_Exception",
+            "keywords": [
+                "exception"
+            ],
+            "time": "2015-02-10T20:07:52+00:00"
+        },
+        {
+            "name": "roundcube/filters",
+            "version": "dev-filters-2.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/6ec123321/filters.git",
+                "reference": "5077a4abb7e13a2e98d2c8d648f576af23a6ddee"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/6ec123321/filters/zipball/5077a4abb7e13a2e98d2c8d648f576af23a6ddee",
+                "reference": "5077a4abb7e13a2e98d2c8d648f576af23a6ddee",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "roundcube/plugin-installer": ">=0.1.3"
+            },
+            "type": "roundcube-plugin",
+            "extra": {
+                "roundcube": {
+                    "min-version": "1.0-rc"
+                }
+            },
+            "notification-url": "https://plugins.roundcube.net/downloads/",
+            "license": [
+                "GNU GPLv3+"
+            ],
+            "authors": [
+                {
+                    "name": "Artur Petrov",
+                    "email": "admin@gtn18.ru",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Roberto Zarrelli",
+                    "email": "zarrelli@unimol.it",
+                    "role": "Author"
+                }
+            ],
+            "description": "Plugin that adds a new tab to the settings section to create client-side e-mail filtering.",
+            "homepage": "https://github.com/6ec123321/filters/archive/master.zip",
+            "keywords": [
+                "client-side",
+                "filters",
+                "rules",
+                "spam"
+            ],
+            "time": "2017-05-10T13:29:46+00:00"
+        },
+        {
+            "name": "roundcube/plugin-installer",
+            "version": "0.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/roundcube/plugin-installer.git",
+                "reference": "782420af7fb3f24295a61101d7e9296110c894e4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/782420af7fb3f24295a61101d7e9296110c894e4",
+                "reference": "782420af7fb3f24295a61101d7e9296110c894e4",
+                "shasum": ""
+            },
+            "require": {
+                "composer/semver": "^1.4.2",
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "composer/composer": "*"
+            },
+            "bin": [
+                "src/bin/rcubeinitdb.sh"
+            ],
+            "type": "composer-installer",
+            "extra": {
+                "class": "Roundcube\\Composer\\PluginInstaller"
+            },
+            "autoload": {
+                "psr-0": {
+                    "Roundcube\\Composer": "src/"
+                }
+            },
+            "notification-url": "https://plugins.roundcube.net/downloads/",
+            "license": [
+                "GPL-3.0+"
+            ],
+            "authors": [
+                {
+                    "name": "Till Klampaeckel",
+                    "email": "till@php.net"
+                },
+                {
+                    "name": "Thomas Bruederli",
+                    "email": "thomas@roundcube.net"
+                }
+            ],
+            "description": "A composer-installer for Roundcube plugins.",
+            "time": "2017-10-29T16:13:28+00:00"
+        },
+        {
+            "name": "weird-birds/thunderbird_labels",
+            "version": "v1.1.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/mike-kfed/rcmail-thunderbird-labels.git",
+                "reference": "eef4c17068b2228e1379f321a6f2923e4185b950"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/mike-kfed/rcmail-thunderbird-labels/zipball/eef4c17068b2228e1379f321a6f2923e4185b950",
+                "reference": "eef4c17068b2228e1379f321a6f2923e4185b950",
+                "shasum": ""
+            },
+            "require": {
+                "roundcube/plugin-installer": ">=0.1.3"
+            },
+            "type": "roundcube-plugin",
+            "notification-url": "https://plugins.roundcube.net/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Kefeder",
+                    "homepage": "https://github.com/mike-kfed/rcmail-thunderbird-labels",
+                    "role": "Developer"
+                }
+            ],
+            "keywords": [
+                "labels",
+                "mail",
+                "tags"
+            ],
+            "time": "2017-11-17T09:55:56+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3,<8.0-DEV"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^4.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "time": "2017-10-19T19:58:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2017-09-11T18:02:19+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "3.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2",
+                "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0",
+                "phpdocumentor/reflection-common": "^1.0.0",
+                "phpdocumentor/type-resolver": "^0.4.0",
+                "webmozart/assert": "^1.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^0.9.4",
+                "phpunit/phpunit": "^4.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2017-11-10T14:09:06+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "0.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5 || ^7.0",
+                "phpdocumentor/reflection-common": "^1.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^0.9.4",
+                "phpunit/phpunit": "^5.2||^4.8.24"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "time": "2017-07-14T14:27:02+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "1.7.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
+                "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
+                "sebastian/comparator": "^1.1|^2.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5|^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.7.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Prophecy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2017-11-24T13:59:53+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-04-02T07:44:40+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "1.4.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "time": "2017-12-04T08:55:13+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "5.7.26",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd",
+                "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "~1.0.3|~2.0",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-12-17T06:14:38+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "time": "2017-06-30T09:13:00+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-11-19T08:54:04+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v3.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "afe0cd38486505c9703707707d91450cfc1bd536"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536",
+                "reference": "afe0cd38486505c9703707707d91450cfc1bd536",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "~3.4|~4.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-12-11T20:38:23+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f",
+                "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6",
+                "sebastian/version": "^1.0.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2016-11-23T20:04:58+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": {
+        "roundcube/filters": 20
+    },
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.4.0"
+    },
+    "platform-dev": []
+}
Binary file composer.phar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+/etc/roundcube
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/index.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,324 @@
+<?php
+/**
+ +-------------------------------------------------------------------------+
+ | Roundcube Webmail IMAP Client                                           |
+ | Version 1.3.3                                                           |
+ |                                                                         |
+ | Copyright (C) 2005-2017, The Roundcube Dev Team                         |
+ |                                                                         |
+ | This program is free software: you can redistribute it and/or modify    |
+ | it under the terms of the GNU General Public License (with exceptions   |
+ | for skins & plugins) as published by the Free Software Foundation,      |
+ | either version 3 of the License, or (at your option) any later version. |
+ |                                                                         |
+ | This file forms part of the Roundcube Webmail Software for which the    |
+ | following exception is added: Plugins and Skins which merely make       |
+ | function calls to the Roundcube Webmail Software, and for that purpose  |
+ | include it by reference shall not be considered modifications of        |
+ | the software.                                                           |
+ |                                                                         |
+ | If you wish to use this file in another project or create a modified    |
+ | version that will not be part of the Roundcube Webmail Software, you    |
+ | may remove the exception above and use this source code under the       |
+ | original version of the license.                                        |
+ |                                                                         |
+ | This program is distributed in the hope that it will be useful,         |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            |
+ | GNU General Public License for more details.                            |
+ |                                                                         |
+ | You should have received a copy of the GNU General Public License       |
+ | along with this program.  If not, see http://www.gnu.org/licenses/.     |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                          |
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+// include environment
+require_once 'program/include/iniset.php';
+
+// init application, start session, init output class, etc.
+$RCMAIL = rcmail::get_instance(0, $GLOBALS['env']);
+
+// Make the whole PHP output non-cacheable (#1487797)
+$RCMAIL->output->nocacheing_headers();
+$RCMAIL->output->common_headers();
+
+// turn on output buffering
+ob_start();
+
+// check if config files had errors
+if ($err_str = $RCMAIL->config->get_error()) {
+    rcmail::raise_error(array(
+        'code' => 601,
+        'type' => 'php',
+        'message' => $err_str), false, true);
+}
+
+// check DB connections and exit on failure
+if ($err_str = $RCMAIL->db->is_error()) {
+    rcmail::raise_error(array(
+        'code' => 603,
+        'type' => 'db',
+        'message' => $err_str), false, true);
+}
+
+// error steps
+if ($RCMAIL->action == 'error' && !empty($_GET['_code'])) {
+    rcmail::raise_error(array('code' => hexdec($_GET['_code'])), false, true);
+}
+
+// check if https is required (for login) and redirect if necessary
+if (empty($_SESSION['user_id']) && ($force_https = $RCMAIL->config->get('force_https', false))) {
+    // force_https can be true, <hostname>, <hostname>:<port>, <port>
+    if (!is_bool($force_https)) {
+        list($host, $port) = explode(':', $force_https);
+
+        if (is_numeric($host) && empty($port)) {
+            $port = $host;
+            $host = '';
+        }
+    }
+
+    if (!rcube_utils::https_check($port ?: 443)) {
+        if (empty($host)) {
+            $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);
+        }
+        if ($port && $port != 443) {
+            $host .= ':' . $port;
+        }
+
+        header('Location: https://' . $host . $_SERVER['REQUEST_URI']);
+        exit;
+    }
+}
+
+// trigger startup plugin hook
+$startup = $RCMAIL->plugins->exec_hook('startup', array('task' => $RCMAIL->task, 'action' => $RCMAIL->action));
+$RCMAIL->set_task($startup['task']);
+$RCMAIL->action = $startup['action'];
+
+// try to log in
+if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
+    $request_valid = $_SESSION['temp'] && $RCMAIL->check_request();
+    $pass_charset  = $RCMAIL->config->get('password_charset', 'ISO-8859-1');
+
+    // purge the session in case of new login when a session already exists
+    $RCMAIL->kill_session();
+
+    $auth = $RCMAIL->plugins->exec_hook('authenticate', array(
+            'host'  => $RCMAIL->autoselect_host(),
+            'user'  => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)),
+            'pass'  => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true, $pass_charset),
+            'valid' => $request_valid,
+            'cookiecheck' => true,
+    ));
+
+    // Login
+    if ($auth['valid'] && !$auth['abort']
+        && $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck'])
+    ) {
+        // create new session ID, don't destroy the current session
+        // it was destroyed already by $RCMAIL->kill_session() above
+        $RCMAIL->session->remove('temp');
+        $RCMAIL->session->regenerate_id(false);
+
+        // send auth cookie if necessary
+        $RCMAIL->session->set_auth_cookie();
+
+        // log successful login
+        $RCMAIL->log_login();
+
+        // restore original request parameters
+        $query = array();
+        if ($url = rcube_utils::get_input_value('_url', rcube_utils::INPUT_POST)) {
+            parse_str($url, $query);
+
+            // prevent endless looping on login page
+            if ($query['_task'] == 'login') {
+                unset($query['_task']);
+            }
+
+            // prevent redirect to compose with specified ID (#1488226)
+            if ($query['_action'] == 'compose' && !empty($query['_id'])) {
+                $query = array('_action' => 'compose');
+            }
+        }
+
+        // allow plugins to control the redirect url after login success
+        $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('_task' => 'mail'));
+        unset($redir['abort'], $redir['_err']);
+
+        // send redirect
+        $OUTPUT->redirect($redir, 0, true);
+    }
+    else {
+        if (!$auth['valid']) {
+            $error_code = rcmail::ERROR_INVALID_REQUEST;
+        }
+        else {
+            $error_code = is_numeric($auth['error']) ? $auth['error'] : $RCMAIL->login_error();
+        }
+
+        $error_labels = array(
+            rcmail::ERROR_STORAGE          => 'storageerror',
+            rcmail::ERROR_COOKIES_DISABLED => 'cookiesdisabled',
+            rcmail::ERROR_INVALID_REQUEST  => 'invalidrequest',
+            rcmail::ERROR_INVALID_HOST     => 'invalidhost',
+            rcmail::ERROR_RATE_LIMIT       => 'accountlocked',
+        );
+
+        $error_message = !empty($auth['error']) && !is_numeric($auth['error']) ? $auth['error'] : ($error_labels[$error_code] ?: 'loginfailed');
+
+        $OUTPUT->show_message($error_message, 'warning');
+
+        // log failed login
+        $RCMAIL->log_login($auth['user'], true, $error_code);
+
+        $RCMAIL->plugins->exec_hook('login_failed', array(
+            'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user']));
+
+        $RCMAIL->kill_session();
+    }
+}
+
+// end session
+else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) {
+    $RCMAIL->request_security_check($mode = rcube_utils::INPUT_GET);
+
+    $userdata = array(
+        'user' => $_SESSION['username'],
+        'host' => $_SESSION['storage_host'],
+        'lang' => $RCMAIL->user->language,
+    );
+
+    $OUTPUT->show_message('loggedout');
+
+    $RCMAIL->logout_actions();
+    $RCMAIL->kill_session();
+    $RCMAIL->plugins->exec_hook('logout_after', $userdata);
+}
+
+// check session and auth cookie
+else if ($RCMAIL->task != 'login' && $_SESSION['user_id']) {
+    if (!$RCMAIL->session->check_auth()) {
+        $RCMAIL->kill_session();
+        $session_error = true;
+    }
+}
+
+// not logged in -> show login page
+if (empty($RCMAIL->user->ID)) {
+    // log session failures
+    $task = rcube_utils::get_input_value('_task', rcube_utils::INPUT_GPC);
+
+    if ($task && !in_array($task, array('login','logout'))
+        && !$session_error && ($sess_id = $_COOKIE[ini_get('session.name')])
+    ) {
+        $RCMAIL->session->log("Aborted session $sess_id; no valid session data found");
+        $session_error = true;
+    }
+
+    if ($session_error || $_REQUEST['_err'] == 'session') {
+        $OUTPUT->show_message('sessionerror', 'error', null, true, -1);
+    }
+
+    if ($OUTPUT->ajax_call || $OUTPUT->get_env('framed')) {
+        $OUTPUT->command('session_error', $RCMAIL->url(array('_err' => 'session')));
+        $OUTPUT->send('iframe');
+    }
+
+    // check if installer is still active
+    if ($RCMAIL->config->get('enable_installer') && is_readable('./installer/index.php')) {
+        $OUTPUT->add_footer(html::div(array('style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"),
+            html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") .
+            html::p(null, "The install script of your Roundcube installation is still stored in its default location!") .
+            html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the Roundcube directory because
+                these files may expose sensitive configuration data like server passwords and encryption keys
+                to the public. Make sure you cannot access the <a href=\"./installer/\">installer script</a> from your browser.")
+        ));
+    }
+
+    $plugin = $RCMAIL->plugins->exec_hook('unauthenticated', array('task' => 'login', 'error' => $session_error));
+
+    $RCMAIL->set_task($plugin['task']);
+
+    $OUTPUT->send($plugin['task']);
+}
+else {
+    // CSRF prevention
+    $RCMAIL->request_security_check();
+
+    // check access to disabled actions
+    $disabled_actions = (array) $RCMAIL->config->get('disabled_actions');
+    if (in_array($RCMAIL->task . '.' . ($RCMAIL->action ?: 'index'), $disabled_actions)) {
+        rcube::raise_error(array(
+            'code' => 404, 'type' => 'php',
+            'message' => "Action disabled"), true, true);
+    }
+}
+
+// we're ready, user is authenticated and the request is safe
+$plugin = $RCMAIL->plugins->exec_hook('ready', array('task' => $RCMAIL->task, 'action' => $RCMAIL->action));
+$RCMAIL->set_task($plugin['task']);
+$RCMAIL->action = $plugin['action'];
+
+// handle special actions
+if ($RCMAIL->action == 'keep-alive') {
+    $OUTPUT->reset();
+    $RCMAIL->plugins->exec_hook('keep_alive', array());
+    $OUTPUT->send();
+}
+else if ($RCMAIL->action == 'save-pref') {
+    include INSTALL_PATH . 'program/steps/utils/save_pref.inc';
+}
+
+
+// include task specific functions
+if (is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/func.inc')) {
+    include_once $incfile;
+}
+
+// allow 5 "redirects" to another action
+$redirects = 0; $incstep = null;
+while ($redirects < 5) {
+    // execute a plugin action
+    if (preg_match('/^plugin\./', $RCMAIL->action)) {
+        $RCMAIL->plugins->exec_action($RCMAIL->action);
+        break;
+    }
+    // execute action registered to a plugin task
+    else if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) {
+        if (!$RCMAIL->action) $RCMAIL->action = 'index';
+        $RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action);
+        break;
+    }
+    // try to include the step file
+    else if (($stepfile = $RCMAIL->get_action_file())
+        && is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/'.$stepfile)
+    ) {
+        // include action file only once (in case it don't exit)
+        include_once $incfile;
+        $redirects++;
+    }
+    else {
+        break;
+    }
+}
+
+if ($RCMAIL->action == 'refresh') {
+    $RCMAIL->plugins->exec_hook('refresh', array('last' => intval(rcube_utils::get_input_value('_last', rcube_utils::INPUT_GPC))));
+}
+
+// parse main template (default)
+$OUTPUT->send($RCMAIL->task);
+
+// if we arrive here, something went wrong
+rcmail::raise_error(array(
+    'code' => 404,
+    'type' => 'php',
+    'line' => __LINE__,
+    'file' => __FILE__,
+    'message' => "Invalid request"), true, true);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/check.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,267 @@
+<?php
+
+if (!class_exists('rcmail_install', false) || !is_object($RCI)) {
+    die("Not allowed! Please open installer/index.php instead.");
+}
+
+?>
+<form action="index.php" method="get">
+<?php
+
+$required_php_exts = array(
+    'PCRE'      => 'pcre',
+    'DOM'       => 'dom',
+    'Session'   => 'session',
+    'XML'       => 'xml',
+    'JSON'      => 'json',
+    'PDO'       => 'PDO',
+    'Multibyte' => 'mbstring',
+    'OpenSSL'   => 'openssl',
+);
+
+$optional_php_exts = array(
+    'FileInfo'  => 'fileinfo',
+    'Libiconv'  => 'iconv',
+    'Intl'      => 'intl',
+    'Exif'      => 'exif',
+    'LDAP'      => 'ldap',
+    'GD'        => 'gd',
+    'Imagick'   => 'imagick',
+);
+
+$required_libs = array(
+    'PEAR'      => 'pear.php.net',
+    'Auth_SASL' => 'pear.php.net',
+    'Net_SMTP'  => 'pear.php.net',
+    'Net_IDNA2' => 'pear.php.net',
+    'Mail_mime' => 'pear.php.net',
+);
+
+$optional_libs = array(
+    'Net_LDAP3' => 'git.kolab.org',
+);
+
+$ini_checks = array(
+    'file_uploads'                  => 1,
+    'session.auto_start'            => 0,
+    'mbstring.func_overload'        => 0,
+    'suhosin.session.encrypt'       => 0,
+);
+
+$optional_checks = array(
+    // required for utils/modcss.inc, should we require this?
+    'allow_url_fopen'  => 1,
+    'date.timezone'    => '-VALID-',
+);
+
+$source_urls = array(
+    'Sockets'   => 'http://www.php.net/manual/en/book.sockets.php',
+    'Session'   => 'http://www.php.net/manual/en/book.session.php',
+    'PCRE'      => 'http://www.php.net/manual/en/book.pcre.php',
+    'FileInfo'  => 'http://www.php.net/manual/en/book.fileinfo.php',
+    'Libiconv'  => 'http://www.php.net/manual/en/book.iconv.php',
+    'Multibyte' => 'http://www.php.net/manual/en/book.mbstring.php',
+    'OpenSSL'   => 'http://www.php.net/manual/en/book.openssl.php',
+    'JSON'      => 'http://www.php.net/manual/en/book.json.php',
+    'DOM'       => 'http://www.php.net/manual/en/book.dom.php',
+    'Intl'      => 'http://www.php.net/manual/en/book.intl.php',
+    'Exif'      => 'http://www.php.net/manual/en/book.exif.php',
+    'oci8'      => 'http://www.php.net/manual/en/book.oci8.php',
+    'PDO'       => 'http://www.php.net/manual/en/book.pdo.php',
+    'LDAP'      => 'http://www.php.net/manual/en/book.ldap.php',
+    'GD'        => 'http://www.php.net/manual/en/book.image.php',
+    'Imagick'   => 'http://www.php.net/manual/en/book.imagick.php',
+    'pdo_mysql'   => 'http://www.php.net/manual/en/ref.pdo-mysql.php',
+    'pdo_pgsql'   => 'http://www.php.net/manual/en/ref.pdo-pgsql.php',
+    'pdo_sqlite'  => 'http://www.php.net/manual/en/ref.pdo-sqlite.php',
+    'pdo_sqlite2' => 'http://www.php.net/manual/en/ref.pdo-sqlite.php',
+    'pdo_sqlsrv'  => 'http://www.php.net/manual/en/ref.pdo-sqlsrv.php',
+    'pdo_dblib'   => 'http://www.php.net/manual/en/ref.pdo-dblib.php',
+    'PEAR'      => 'http://pear.php.net',
+    'Net_SMTP'  => 'http://pear.php.net/package/Net_SMTP',
+    'Mail_mime' => 'http://pear.php.net/package/Mail_mime',
+    'Net_IDNA2' => 'http://pear.php.net/package/Net_IDNA2',
+    'Net_LDAP3' => 'https://git.kolab.org/diffusion/PNL',
+);
+
+echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 3 : 2) . '" />';
+?>
+
+<h3>Checking PHP version</h3>
+<?php
+
+define('MIN_PHP_VERSION', '5.4.0');
+if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) {
+    $RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected');
+} else {
+    $RCI->fail('Version', 'PHP Version ' . MIN_PHP_VERSION . ' or greater is required ' . PHP_VERSION . ' detected');
+}
+?>
+
+<h3>Checking PHP extensions</h3>
+<p class="hint">The following modules/extensions are <em>required</em> to run Roundcube:</p>
+<?php
+
+// get extensions location
+$ext_dir = ini_get('extension_dir');
+
+$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
+foreach ($required_php_exts as $name => $ext) {
+    if (extension_loaded($ext)) {
+        $RCI->pass($name);
+    } else {
+        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
+        $RCI->fail($name, $msg, $source_urls[$name]);
+    }
+    echo '<br />';
+}
+
+?>
+
+<p class="hint">The next couple of extensions are <em>optional</em> and recommended to get the best performance:</p>
+<?php
+
+foreach ($optional_php_exts as $name => $ext) {
+    if (extension_loaded($ext)) {
+        $RCI->pass($name);
+    }
+    else {
+        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
+        $RCI->na($name, $msg, $source_urls[$name]);
+    }
+    echo '<br />';
+}
+
+?>
+
+
+<h3>Checking available databases</h3>
+<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p>
+
+<?php
+
+$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
+foreach ($RCI->supported_dbs as $database => $ext) {
+    if (extension_loaded($ext)) {
+        $RCI->pass($database);
+        $found_db_driver = true;
+    }
+    else {
+        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
+        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
+        $RCI->na($database, $msg, $source_urls[$ext]);
+    }
+    echo '<br />';
+}
+if (empty($found_db_driver)) {
+  $RCI->failures++;
+}
+
+?>
+
+
+<h3>Check for required 3rd party libs</h3>
+<p class="hint">This also checks if the include path is set correctly.</p>
+
+<?php
+
+foreach ($required_libs as $classname => $vendor) {
+    if (class_exists($classname)) {
+        $RCI->pass($classname);
+    }
+    else {
+        $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]);
+    }
+    echo "<br />";
+}
+
+foreach ($optional_libs as $classname => $vendor) {
+    if (class_exists($classname)) {
+        $RCI->pass($classname);
+    }
+    else {
+        $RCI->na($classname, "Recommended to install $classname from $vendor", $source_urls[$classname]);
+    }
+    echo "<br />";
+}
+
+?>
+
+<h3>Checking php.ini/.htaccess settings</h3>
+<p class="hint">The following settings are <em>required</em> to run Roundcube:</p>
+
+<?php
+
+foreach ($ini_checks as $var => $val) {
+    $status = ini_get($var);
+    if ($val === '-NOTEMPTY-') {
+        if (empty($status)) {
+            $RCI->fail($var, "empty value detected");
+        }
+        else {
+            $RCI->pass($var);
+        }
+    }
+    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
+        $RCI->pass($var);
+    }
+    else {
+      $RCI->fail($var, "is '$status', should be '$val'");
+    }
+    echo '<br />';
+}
+?>
+
+<p class="hint">The following settings are <em>optional</em> and recommended:</p>
+
+<?php
+
+foreach ($optional_checks as $var => $val) {
+    $status = ini_get($var);
+    if ($val === '-NOTEMPTY-') {
+        if (empty($status)) {
+            $RCI->optfail($var, "Could be set");
+        } else {
+            $RCI->pass($var);
+        }
+        echo '<br />';
+        continue;
+    }
+    if ($val === '-VALID-') {
+        if ($var == 'date.timezone') {
+            try {
+                $tz = new DateTimeZone($status);
+                $RCI->pass($var);
+            }
+            catch (Exception $e) {
+                $RCI->optfail($var, empty($status) ? "not set" : "invalid value detected: $status");
+            }
+        }
+        else {
+            $RCI->pass($var);
+        }
+    }
+    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
+        $RCI->pass($var);
+    }
+    else {
+      $RCI->optfail($var, "is '$status', could be '$val'");
+    }
+    echo '<br />';
+}
+?>
+
+<?php
+
+if ($RCI->failures) {
+  echo '<p class="warning">Sorry but your webserver does not meet the requirements for Roundcube!<br />
+            Please install the missing modules or fix the php.ini settings according to the above check results.<br />
+            Hint: only checks showing <span class="fail">NOT OK</span> need to be fixed.</p>';
+}
+echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
+
+?>
+
+</form>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/client.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+/*
+ +-----------------------------------------------------------------------+
+ | Roundcube installer client function                                   |
+ |                                                                       |
+ | This file is part of the Roundcube web development suite              |
+ | Copyright (C) 2009-2012, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ +-----------------------------------------------------------------------+
+*/
+
+function toggleblock(id, link)
+{
+  var block = document.getElementById(id);
+  
+  return false;
+}
+
+
+function addhostfield()
+{
+  var container = document.getElementById('defaulthostlist');
+  var row = document.createElement('div');
+  var input = document.createElement('input');
+  var link = document.createElement('a');
+  
+  input.name = '_default_host[]';
+  input.size = '30';
+  link.href = '#';
+  link.onclick = function() { removehostfield(this.parentNode); return false };
+  link.className = 'removelink';
+  link.innerHTML = 'remove';
+  
+  row.appendChild(input);
+  row.appendChild(link);
+  container.appendChild(row);
+}
+
+
+function removehostfield(row)
+{
+  var container = document.getElementById('defaulthostlist');
+  container.removeChild(row);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/config.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,695 @@
+<?php
+
+if (!class_exists('rcmail_install', false) || !is_object($RCI)) {
+    die("Not allowed! Please open installer/index.php instead.");
+}
+
+// register these boolean fields
+$RCI->bool_config_props = array(
+  'ip_check' => 1,
+  'enable_spellcheck' => 1,
+  'auto_create_user' => 1,
+  'smtp_log' => 1,
+  'prefer_html' => 1,
+  'debug_level' => 1,
+);
+
+// allow the current user to get to the next step
+$_SESSION['allowinstaller'] = true;
+
+if (!empty($_POST['submit'])) {
+  $_SESSION['config'] = $RCI->create_config();
+
+  if ($RCI->save_configfile($_SESSION['config'])) {
+     echo '<p class="notice">The config file was saved successfully into <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.';
+
+     if ($RCI->legacy_config) {
+        echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
+     }
+
+     echo '</p>';
+  }
+  else {
+    if (($dir = sys_get_temp_dir()) && @is_writable($dir)) {
+      echo '<iframe name="getconfig" style="display:none"></iframe>';
+      echo '<form id="getconfig_form" action="index.php" method="get" target="getconfig" style="display:none">';
+      echo '<input name="_getconfig" value="2" /></form>';
+
+      $button_txt  = html::quote('Save in ' . $dir);
+      $save_button = '&nbsp;<input type="button" onclick="document.getElementById(\'getconfig_form\').submit()" value="' . $button_txt . '" />';
+    }
+
+    echo '<p class="notice">Copy or download the following configuration and save it';
+    echo ' as <tt><b>config.inc.php</b></tt> within the <tt>'.RCUBE_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>';
+    echo ' Make sure that there are no characters outside the <tt>&lt;?php ?&gt;</tt> brackets when saving the file.';
+    echo '&nbsp;<input type="button" onclick="location.href=\'index.php?_getconfig=1\'" value="Download" />';
+    echo $save_button;
+
+    if ($RCI->legacy_config) {
+       echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
+    }
+
+    echo '</p>';
+
+    $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile"));
+    echo $textbox->show(($_SESSION['config']));
+  }
+
+  echo '<p class="hint">Of course there are more options to configure.
+    Have a look at the defaults.inc.php file or visit <a href="https://github.com/roundcube/roundcubemail/wiki/Configuration" target="_blank">Howto_Config</a> to find out.</p>';
+
+  echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>';
+
+  // echo '<style type="text/css"> .configblock { display:none } </style>';
+  echo "\n<hr style='margin-bottom:1.6em' />\n";
+}
+
+?>
+<form action="index.php" method="post">
+<input type="hidden" name="_step" value="2" />
+
+<fieldset>
+<legend>General configuration</legend>
+<dl class="configblock">
+
+<dt class="propname">product_name</dt>
+<dd>
+<?php
+
+$input_prodname = new html_inputfield(array('name' => '_product_name', 'size' => 30, 'id' => "cfgprodname"));
+echo $input_prodname->show($RCI->getprop('product_name'));
+
+?>
+<div>The name of your service (used to compose page titles)</div>
+</dd>
+
+<dt class="propname">support_url</dt>
+<dd>
+<?php
+
+$input_support = new html_inputfield(array('name' => '_support_url', 'size' => 50, 'id' => "cfgsupporturl"));
+echo $input_support->show($RCI->getprop('support_url'));
+
+?>
+<div>Provide an URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div>
+<p class="hint">Enter an absolute URL (including http://) to a support page/form or a mailto: link.</p>
+</dd>
+
+<dt class="propname">skin_logo</dt>
+<dd>
+<?php
+
+$input_skin = new html_inputfield(array('name' => '_skin_logo', 'size' => 50, 'id' => "cfgskinlogo"));
+echo $input_skin->show($RCI->getprop('skin_logo'));
+
+?>
+<div>Custom image to display instead of the Roundcube logo.</div>
+<p class="hint">Enter a URL relative to the document root of this Roundcube installation.</p>
+</dd>
+
+<dt class="propname">temp_dir</dt>
+<dd>
+<?php
+
+$input_tempdir = new html_inputfield(array('name' => '_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
+echo $input_tempdir->show($RCI->getprop('temp_dir'));
+
+?>
+<div>Use this folder to store temp files (must be writeable for webserver)</div>
+</dd>
+
+<dt class="propname">des_key</dt>
+<dd>
+<?php
+
+$input_deskey = new html_inputfield(array('name' => '_des_key', 'size' => 30, 'id' => "cfgdeskey"));
+echo $input_deskey->show($RCI->getprop('des_key'));
+
+?>
+<div>This key is used to encrypt the users imap password before storing in the session record</div>
+<p class="hint">It's a random generated string to ensure that every installation has its own key.</p>
+</dd>
+
+<dt class="propname">ip_check</dt>
+<dd>
+<?php
+
+$check_ipcheck = new html_checkbox(array('name' => '_ip_check', 'id' => "cfgipcheck"));
+echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));
+
+?>
+<label for="cfgipcheck">Check client IP in session authorization</label><br />
+
+<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p>
+</dd>
+
+
+<dt class="propname">enable_spellcheck</dt>
+<dd>
+<?php
+$check_spell = new html_checkbox(array('name' => '_enable_spellcheck', 'id' => "cfgspellcheck"));
+echo $check_spell->show(intval($RCI->getprop('enable_spellcheck')), array('value' => 1));
+?>
+<label for="cfgspellcheck">Make use of the spell checker</label><br />
+</dd>
+
+<dt class="propname">spellcheck_engine</dt>
+<dd>
+<?php
+$select_spell = new html_select(array('name' => '_spellcheck_engine', 'id' => "cfgspellcheckengine"));
+if (extension_loaded('pspell'))
+  $select_spell->add('Pspell', 'pspell');
+if (extension_loaded('enchant'))
+  $select_spell->add('Enchant', 'enchant');
+$select_spell->add('Googie', 'googie');
+$select_spell->add('ATD', 'atd');
+
+echo $select_spell->show($RCI->is_post ? $_POST['_spellcheck_engine'] : 'pspell');
+
+?>
+<label for="cfgspellcheckengine">Which spell checker to use</label><br />
+
+<p class="hint">Googie implies that the message content will be sent to external server to check the spelling.</p>
+</dd>
+
+<dt class="propname">identities_level</dt>
+<dd>
+<?php
+
+$input_ilevel = new html_select(array('name' => '_identities_level', 'id' => "cfgidentitieslevel"));
+$input_ilevel->add('many identities with possibility to edit all params', 0);
+$input_ilevel->add('many identities with possibility to edit all params but not email address', 1);
+$input_ilevel->add('one identity with possibility to edit all params', 2);
+$input_ilevel->add('one identity with possibility to edit all params but not email address', 3);
+$input_ilevel->add('one identity with possibility to edit only signature', 4);
+echo $input_ilevel->show($RCI->getprop('identities_level'), 0);
+
+?>
+<div>Level of identities access</div>
+<p class="hint">Defines what users can do with their identities.</p>
+</dd>
+
+</dl>
+</fieldset>
+
+<fieldset>
+<legend>Logging & Debugging</legend>
+<dl class="loggingblock">
+
+<dt class="propname">debug_level</dt>
+<dd>
+<?php
+
+$value = $RCI->getprop('debug_level');
+$check_debug = new html_checkbox(array('name' => '_debug_level[]'));
+echo $check_debug->show(($value & 1) ? 1 : 0 , array('value' => 1, 'id' => 'cfgdebug1'));
+echo '<label for="cfgdebug1">Log errors</label><br />';
+
+echo $check_debug->show(($value & 4) ? 4 : 0, array('value' => 4, 'id' => 'cfgdebug4'));
+echo '<label for="cfgdebug4">Print errors (to the browser)</label><br />';
+
+?>
+</dd>
+
+<dt class="propname">log_driver</dt>
+<dd>
+<?php
+
+$select_log_driver = new html_select(array('name' => '_log_driver', 'id' => "cfglogdriver"));
+$select_log_driver->add(array('file', 'syslog', 'stdout'), array('file', 'syslog', 'stdout'));
+echo $select_log_driver->show($RCI->getprop('log_driver', 'file'));
+
+?>
+<div>How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility, 'stdout' writes to the process' STDOUT file descriptor.</div>
+</dd>
+
+<dt class="propname">log_dir</dt>
+<dd>
+<?php
+
+$input_logdir = new html_inputfield(array('name' => '_log_dir', 'size' => 30, 'id' => "cfglogdir"));
+echo $input_logdir->show($RCI->getprop('log_dir'));
+
+?>
+<div>Use this folder to store log files (must be writeable for webserver). Note that this only applies if you are using the 'file' log_driver.</div>
+</dd>
+
+<dt class="propname">syslog_id</dt>
+<dd>
+<?php
+
+$input_syslogid = new html_inputfield(array('name' => '_syslog_id', 'size' => 30, 'id' => "cfgsyslogid"));
+echo $input_syslogid->show($RCI->getprop('syslog_id', 'roundcube'));
+
+?>
+<div>What ID to use when logging with syslog. Note that this only applies if you are using the 'syslog' log_driver.</div>
+</dd>
+
+<dt class="propname">syslog_facility</dt>
+<dd>
+<?php
+
+$input_syslogfacility = new html_select(array('name' => '_syslog_facility', 'id' => "cfgsyslogfacility"));
+$input_syslogfacility->add('user-level messages', LOG_USER);
+$input_syslogfacility->add('mail subsystem', LOG_MAIL);
+$input_syslogfacility->add('local level 0', LOG_LOCAL0);
+$input_syslogfacility->add('local level 1', LOG_LOCAL1);
+$input_syslogfacility->add('local level 2', LOG_LOCAL2);
+$input_syslogfacility->add('local level 3', LOG_LOCAL3);
+$input_syslogfacility->add('local level 4', LOG_LOCAL4);
+$input_syslogfacility->add('local level 5', LOG_LOCAL5);
+$input_syslogfacility->add('local level 6', LOG_LOCAL6);
+$input_syslogfacility->add('local level 7', LOG_LOCAL7);
+echo $input_syslogfacility->show($RCI->getprop('syslog_facility'), LOG_USER);
+
+?>
+<div>What ID to use when logging with syslog.  Note that this only applies if you are using the 'syslog' log_driver.</div>
+</dd>
+
+
+
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>Database setup</legend>
+<dl class="configblock" id="cgfblockdb">
+<dt class="propname">db_dsnw</dt>
+<dd>
+<p>Database settings for read/write operations:</p>
+<?php
+
+$select_dbtype = new html_select(array('name' => '_dbtype', 'id' => "cfgdbtype"));
+foreach ($RCI->supported_dbs as $database => $ext) {
+    if (extension_loaded($ext)) {
+        $select_dbtype->add($database, substr($ext, 4));
+    }
+}
+
+$input_dbhost = new html_inputfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost"));
+$input_dbname = new html_inputfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname"));
+$input_dbuser = new html_inputfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser"));
+$input_dbpass = new html_inputfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass"));
+
+$dsnw = rcube_db::parse_dsn($RCI->getprop('db_dsnw'));
+
+echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : $dsnw['phptype']);
+echo '<label for="cfgdbtype">Database type</label><br />';
+echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : $dsnw['hostspec']);
+echo '<label for="cfgdbhost">Database server (omit for sqlite)</label><br />';
+echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : $dsnw['database']);
+echo '<label for="cfgdbname">Database name (use absolute path and filename for sqlite)</label><br />';
+echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : $dsnw['username']);
+echo '<label for="cfgdbuser">Database user name (needs write permissions)(omit for sqlite)</label><br />';
+echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : $dsnw['password']);
+echo '<label for="cfgdbpass">Database password (omit for sqlite)</label><br />';
+
+?>
+</dd>
+
+<dt class="propname">db_prefix</dt>
+<dd>
+<?php
+
+$input_prefix = new html_inputfield(array('name' => '_db_prefix', 'size' => 20, 'id' => "cfgdbprefix"));
+echo $input_prefix->show($RCI->getprop('db_prefix'));
+
+?>
+<div>Optional prefix that will be added to database object names (tables and sequences).</div>
+</dd>
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>IMAP Settings</legend>
+<dl class="configblock" id="cgfblockimap">
+<dt class="propname">default_host</dt>
+<dd>
+<div>The IMAP host(s) chosen to perform the log-in</div>
+<div id="defaulthostlist">
+<?php
+
+$text_imaphost = new html_inputfield(array('name' => '_default_host[]', 'size' => 30));
+$default_hosts = $RCI->get_hostlist();
+
+if (empty($default_hosts))
+  $default_hosts = array('');
+
+$i = 0;
+foreach ($default_hosts as $host) {
+  echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host);
+  if ($i++ > 0)
+    echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>';
+  echo '</div>';
+}
+
+?>
+</div>
+<div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div>
+
+<p class="hint">Leave blank to show a textbox at login. To use SSL/IMAPS connection, type ssl://hostname</p>
+</dd>
+
+<dt class="propname">default_port</dt>
+<dd>
+<?php
+
+$text_imapport = new html_inputfield(array('name' => '_default_port', 'size' => 6, 'id' => "cfgimapport"));
+echo $text_imapport->show($RCI->getprop('default_port'));
+
+?>
+<div>TCP port used for IMAP connections</div>
+</dd>
+
+<dt class="propname">username_domain</dt>
+<dd>
+<?php
+
+$text_userdomain = new html_inputfield(array('name' => '_username_domain', 'size' => 30, 'id' => "cfguserdomain"));
+echo $text_userdomain->show($RCI->getprop('username_domain'));
+
+?>
+<div>Automatically add this domain to user names for login</div>
+
+<p class="hint">Only for IMAP servers that require full e-mail addresses for login</p>
+</dd>
+
+<dt class="propname">auto_create_user</dt>
+<dd>
+<?php
+
+$check_autocreate = new html_checkbox(array('name' => '_auto_create_user', 'id' => "cfgautocreate"));
+echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1));
+
+?>
+<label for="cfgautocreate">Automatically create a new Roundcube user when log-in the first time</label><br />
+
+<p class="hint">A user is authenticated by the IMAP server but it requires a local record to store settings
+and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.</p>
+
+<p class="hint">If this option is disabled, the login only succeeds if there's a matching user-record in the local Roundcube database
+what means that you have to create those records manually or disable this option after the first login.</p>
+</dd>
+
+<dt class="propname">sent_mbox</dt>
+<dd>
+<?php
+
+$text_sentmbox = new html_inputfield(array('name' => '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox"));
+echo $text_sentmbox->show($RCI->getprop('sent_mbox'));
+
+?>
+<div>Store sent messages in this folder</div>
+
+<p class="hint">Leave blank if sent messages should not be stored. Note: folder must include namespace prefix if any.</p>
+</dd>
+
+<dt class="propname">trash_mbox</dt>
+<dd>
+<?php
+
+$text_trashmbox = new html_inputfield(array('name' => '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox"));
+echo $text_trashmbox->show($RCI->getprop('trash_mbox'));
+
+?>
+<div>Move messages to this folder when deleting them</div>
+
+<p class="hint">Leave blank if they should be deleted directly. Note: folder must include namespace prefix if any.</p>
+</dd>
+
+<dt class="propname">drafts_mbox</dt>
+<dd>
+<?php
+
+$text_draftsmbox = new html_inputfield(array('name' => '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox"));
+echo $text_draftsmbox->show($RCI->getprop('drafts_mbox'));
+
+?>
+<div>Store draft messages in this folder</div>
+
+<p class="hint">Leave blank if they should not be stored. Note: folder must include namespace prefix if any.</p>
+</dd>
+
+<dt class="propname">junk_mbox</dt>
+<dd>
+<?php
+
+$text_junkmbox = new html_inputfield(array('name' => '_junk_mbox', 'size' => 20, 'id' => "cfgjunkmbox"));
+echo $text_junkmbox->show($RCI->getprop('junk_mbox'));
+
+?>
+<div>Store spam messages in this folder</div>
+
+<p class="hint">Note: folder must include namespace prefix if any.</p>
+</dd>
+
+</dd>
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>SMTP Settings</legend>
+<dl class="configblock" id="cgfblocksmtp">
+<dt class="propname">smtp_server</dt>
+<dd>
+<?php
+
+$text_smtphost = new html_inputfield(array('name' => '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost"));
+echo $text_smtphost->show($RCI->getprop('smtp_server', 'localhost'));
+
+?>
+<div>Use this host for sending mails</div>
+
+<p class="hint">To use SSL connection, set ssl://smtp.host.com.</p>
+</dd>
+
+<dt class="propname">smtp_port</dt>
+<dd>
+<?php
+
+$text_smtpport = new html_inputfield(array('name' => '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport"));
+echo $text_smtpport->show($RCI->getprop('smtp_port'));
+
+?>
+<div>SMTP port (default is 25; 465 for SSL; 587 for submission)</div>
+</dd>
+
+<dt class="propname">smtp_user/smtp_pass</dt>
+<dd>
+<?php
+
+$text_smtpuser = new html_inputfield(array('name' => '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser"));
+$text_smtppass = new html_inputfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass"));
+echo $text_smtpuser->show($RCI->getprop('smtp_user'));
+echo $text_smtppass->show($RCI->getprop('smtp_pass'));
+
+?>
+<div>SMTP username and password (if required)</div>
+<p>
+<?php
+
+$check_smtpuser = new html_checkbox(array('name' => '_smtp_user_u', 'id' => "cfgsmtpuseru"));
+echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || $_POST['_smtp_user_u'] ? 1 : 0, array('value' => 1));
+
+?>
+<label for="cfgsmtpuseru">Use the current IMAP username and password for SMTP authentication</label>
+</p>
+</dd>
+<!--
+<dt class="propname">smtp_auth_type</dt>
+<dd>
+<?php
+/*
+$select_smtpauth = new html_select(array('name' => '_smtp_auth_type', 'id' => "cfgsmtpauth"));
+$select_smtpauth->add(array('(auto)', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'), array('0', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'));
+echo $select_smtpauth->show(intval($RCI->getprop('smtp_auth_type')));
+*/
+?>
+<div>Method to authenticate at the SMTP server. Choose (auto) if you don't know what this is</div>
+</dd>
+-->
+<dt class="propname">smtp_log</dt>
+<dd>
+<?php
+
+$check_smtplog = new html_checkbox(array('name' => '_smtp_log', 'id' => "cfgsmtplog"));
+echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), array('value' => 1));
+
+?>
+<label for="cfgsmtplog">Log sent messages in <tt>{log_dir}/sendmail</tt> or to syslog.</label><br />
+</dd>
+
+</dl>
+</fieldset>
+
+
+<fieldset>
+<legend>Display settings &amp; user prefs</legend>
+<dl class="configblock" id="cgfblockdisplay">
+
+<dt class="propname">language <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$input_locale = new html_inputfield(array('name' => '_language', 'size' => 6, 'id' => "cfglocale"));
+echo $input_locale->show($RCI->getprop('language'));
+
+?>
+<div>The default locale setting. This also defines the language of the login screen.<br/>Leave it empty to auto-detect the user agent language.</div>
+<p class="hint">Enter a <a href="http://www.faqs.org/rfcs/rfc1766">RFC1766</a> formatted language name. Examples: en_US, de_DE, de_CH, fr_FR, pt_BR</p>
+</dd>
+
+<dt class="propname">skin <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$input_skin = new html_select(array('name' => '_skin', 'id' => "cfgskin"));
+$input_skin->add($RCI->list_skins());
+echo $input_skin->show($RCI->getprop('skin'));
+
+?>
+<div>Name of interface skin (folder in /skins)</div>
+</dd>
+
+<dt class="propname">mail_pagesize <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$pagesize = $RCI->getprop('mail_pagesize');
+if (!$pagesize) {
+    $pagesize = $RCI->getprop('pagesize');
+}
+$input_pagesize = new html_inputfield(array('name' => '_mail_pagesize', 'size' => 6, 'id' => "cfgmailpagesize"));
+echo $input_pagesize->show($pagesize);
+
+?>
+<div>Show up to X items in the mail messages list view.</div>
+</dd>
+
+<dt class="propname">addressbook_pagesize <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$pagesize = $RCI->getprop('addressbook_pagesize');
+if (!$pagesize) {
+    $pagesize = $RCI->getprop('pagesize');
+}
+$input_pagesize = new html_inputfield(array('name' => '_addressbook_pagesize', 'size' => 6, 'id' => "cfgabookpagesize"));
+echo $input_pagesize->show($pagesize);
+
+?>
+<div>Show up to X items in the contacts list view.</div>
+</dd>
+
+<dt class="propname">prefer_html <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$check_htmlview = new html_checkbox(array('name' => '_prefer_html', 'id' => "cfghtmlview", 'value' => 1));
+echo $check_htmlview->show(intval($RCI->getprop('prefer_html')));
+
+?>
+<label for="cfghtmlview">Prefer displaying HTML messages</label><br />
+</dd>
+
+<dt class="propname">htmleditor <span class="userconf">*</span></dt>
+<dd>
+<label for="cfghtmlcompose">Compose HTML formatted messages</label>
+<?php
+
+$select_htmlcomp = new html_select(array('name' => '_htmleditor', 'id' => "cfghtmlcompose"));
+$select_htmlcomp->add('never', 0);
+$select_htmlcomp->add('always', 1);
+$select_htmlcomp->add('on reply to HTML message only', 2);
+echo $select_htmlcomp->show(intval($RCI->getprop('htmleditor')));
+
+?>
+</dd>
+
+<dt class="propname">draft_autosave <span class="userconf">*</span></dt>
+<dd>
+<label for="cfgautosave">Save compose message every</label>
+<?php
+
+$select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => 'cfgautosave'));
+$select_autosave->add('never', 0);
+foreach (array(1, 3, 5, 10) as $i => $min)
+  $select_autosave->add("$min min", $min*60);
+
+echo $select_autosave->show(intval($RCI->getprop('draft_autosave')));
+
+?>
+</dd>
+
+<dt class="propname">mdn_requests <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$mdn_opts = array(
+    0 => 'ask the user',
+    1 => 'send automatically',
+    3 => 'send receipt to user contacts, otherwise ask the user',
+    4 => 'send receipt to user contacts, otherwise ignore',
+    2 => 'ignore',
+);
+
+$select_mdnreq = new html_select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq"));
+$select_mdnreq->add(array_values($mdn_opts), array_keys($mdn_opts));
+echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests')));
+
+?>
+<div>Behavior if a received message requests a message delivery notification (read receipt)</div>
+</dd>
+
+<dt class="propname">mime_param_folding <span class="userconf">*</span></dt>
+<dd>
+<?php
+
+$select_param_folding = new html_select(array('name' => '_mime_param_folding', 'id' => "cfgmimeparamfolding"));
+$select_param_folding->add('Full RFC 2231 (Roundcube, Thunderbird)', '0'); 
+$select_param_folding->add('RFC 2047/2231 (MS Outlook, OE)', '1');
+$select_param_folding->add('Full RFC 2047 (deprecated)', '2');
+
+echo $select_param_folding->show(strval($RCI->getprop('mime_param_folding')));
+
+?>
+<div>How to encode attachment long/non-ascii names</div>
+</dd>
+
+</dl>
+
+<p class="hint"><span class="userconf">*</span>&nbsp; These settings are defaults for the user preferences</p>
+</fieldset>
+
+
+<fieldset>
+<legend>Plugins</legend>
+<dl class="configblock" id="cgfblockdisplay">
+
+<?php
+$plugins = $RCI->list_plugins();
+foreach ($plugins as $p) {
+    $p_check = new html_checkbox(array('name' => '_plugins_'.$p['name'], 'id' => 'cfgplugin_'.$p['name'], 'value' => $p['name']));
+    echo '<dt class="propname"><label>';
+    echo $p_check->show($p['enabled'] ? $p['name'] : 0);
+    echo '&nbsp;' . $p['name'] . '</label></dt><dd>';
+    echo '<label for="cfgplugin_'.$p['name'].'" class="hint">' . $p['desc'] . '</label><br/></dd>';
+}
+
+?>
+</dl>
+
+<p class="hint">Please consider checking dependencies of enabled plugins</p>
+</fieldset>
+
+<?php
+
+echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
+
+?>
+</form>
Binary file installer/images/add.png has changed
Binary file installer/images/banner_gradient.gif has changed
Binary file installer/images/banner_schraffur.gif has changed
Binary file installer/images/delete.png has changed
Binary file installer/images/error.png has changed
Binary file installer/images/roundcube_logo.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/index.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,183 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Roundcube Webmail setup tool                                            |
+ | Version 1.3.3                                                           |
+ |                                                                         |
+ | Copyright (C) 2009-2015, The Roundcube Dev Team                         |
+ |                                                                         |
+ | This program is free software: you can redistribute it and/or modify    |
+ | it under the terms of the GNU General Public License (with exceptions   |
+ | for skins & plugins) as published by the Free Software Foundation,      |
+ | either version 3 of the License, or (at your option) any later version. |
+ |                                                                         |
+ | This file forms part of the Roundcube Webmail Software for which the    |
+ | following exception is added: Plugins and Skins which merely make       |
+ | function calls to the Roundcube Webmail Software, and for that purpose  |
+ | include it by reference shall not be considered modifications of        |
+ | the software.                                                           |
+ |                                                                         |
+ | If you wish to use this file in another project or create a modified    |
+ | version that will not be part of the Roundcube Webmail Software, you    |
+ | may remove the exception above and use this source code under the       |
+ | original version of the license.                                        |
+ |                                                                         |
+ | This program is distributed in the hope that it will be useful,         |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            |
+ | GNU General Public License for more details.                            |
+ |                                                                         |
+ | You should have received a copy of the GNU General Public License       |
+ | along with this program.  If not, see http://www.gnu.org/licenses/.     |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                          |
+ +-------------------------------------------------------------------------+
+*/
+
+ini_set('error_reporting', E_ALL &~ (E_NOTICE | E_STRICT));
+ini_set('display_errors', 1);
+
+define('INSTALL_PATH', realpath(__DIR__ . '/../').'/');
+define('RCUBE_INSTALL_PATH', INSTALL_PATH);
+define('RCUBE_CONFIG_DIR', INSTALL_PATH . 'config/');
+
+$include_path  = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR;
+$include_path .= INSTALL_PATH . 'program/include' . PATH_SEPARATOR;
+$include_path .= ini_get('include_path');
+
+set_include_path($include_path);
+
+// include composer autoloader (if available)
+if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) {
+    require INSTALL_PATH . 'vendor/autoload.php';
+}
+
+require_once 'Roundcube/bootstrap.php';
+
+if (function_exists('session_start'))
+  session_start();
+
+$RCI = rcmail_install::get_instance();
+$RCI->load_config();
+
+if (isset($_GET['_getconfig'])) {
+  $filename = 'config.inc.php';
+  if (!empty($_SESSION['config']) && $_GET['_getconfig'] == 2) {
+    $path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename;
+    @unlink($path);
+    file_put_contents($path, $_SESSION['config']);
+    exit;
+  }
+  else if (!empty($_SESSION['config'])) {
+    header('Content-type: text/plain');
+    header('Content-Disposition: attachment; filename="'.$filename.'"');
+    echo $_SESSION['config'];
+    exit;
+  }
+  else {
+    header('HTTP/1.0 404 Not found');
+    die("The requested configuration was not found. Please run the installer from the beginning.");
+  }
+}
+
+if ($RCI->configured && ($RCI->getprop('enable_installer') || $_SESSION['allowinstaller']) &&
+    !empty($_GET['_mergeconfig'])) {
+  $filename = 'config.inc.php';
+
+  header('Content-type: text/plain');
+  header('Content-Disposition: attachment; filename="'.$filename.'"');
+
+  $RCI->merge_config();
+  echo $RCI->create_config();
+  exit;
+}
+
+// go to 'check env' step if we have a local configuration
+if ($RCI->configured && empty($_REQUEST['_step'])) {
+  header("Location: ./?_step=1");
+  exit;
+}
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Roundcube Webmail Installer</title>
+<meta name="Robots" content="noindex,nofollow" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" type="text/css" href="styles.css" />
+<script type="text/javascript" src="client.js"></script>
+</head>
+
+<body>
+
+<div id="banner">
+  <div class="banner-bg"></div>
+  <div class="banner-logo"><a href="http://roundcube.net"><img src="images/roundcube_logo.png" width="210" height="55" border="0" alt="Roundcube - open source webmail software" /></a></div>
+</div>
+
+<div id="topnav">
+  <a href="https://github.com/roundcube/roundcubemail/wiki/Installation">How-to Wiki</a>
+</div>
+
+<div id="content">
+
+<?php
+
+  // exit if installation is complete
+  if ($RCI->configured && !$RCI->getprop('enable_installer') && !$_SESSION['allowinstaller']) {
+    // header("HTTP/1.0 404 Not Found");
+    if ($RCI->configured && $RCI->legacy_config) {
+      echo '<h2 class="error">Your configuration needs to be migrated!</h2>';
+      echo '<p>We changed the configuration files structure and your installation needs to be updated accordingly.</p>';
+      echo '<p>Please run the <tt>bin/update.sh</tt> script from the command line or set <p>&nbsp; <tt>$rcube_config[\'enable_installer\'] = true;</tt></p>';
+      echo ' in your RCUBE_CONFIG_DIR/main.inc.php to let the installer help you migrating it.</p>';
+    }
+    else {
+      echo '<h2 class="error">The installer is disabled!</h2>';
+      echo '<p>To enable it again, set <tt>$config[\'enable_installer\'] = true;</tt> in RCUBE_CONFIG_DIR/config.inc.php</p>';
+    }
+    echo '</div></body></html>';
+    exit;
+  }
+
+?>
+
+<h1>Roundcube Webmail Installer</h1>
+
+<ol id="progress">
+<?php
+  $include_steps = array(
+    1 => './check.php',
+    2 => './config.php',
+    3 => './test.php',
+  );
+
+  if (!in_array($RCI->step, array_keys($include_steps))) {
+    $RCI->step = 1;
+  }
+
+  foreach (array('Check environment', 'Create config', 'Test config') as $i => $item) {
+    $j = $i + 1;
+    $link = ($RCI->step >= $j || $RCI->configured) ? '<a href="./index.php?_step='.$j.'">' . rcube::Q($item) . '</a>' : rcube::Q($item);
+    printf('<li class="step%d%s">%s</li>', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link);
+  }
+?>
+</ol>
+
+<?php
+
+include $include_steps[$RCI->step];
+
+?>
+</div>
+
+<div id="footer">
+  Installer by the Roundcube Dev Team. Copyright &copy; 2008-2012 – Published under the GNU Public License;&nbsp;
+  Icons by <a href="http://famfamfam.com">famfamfam</a>
+</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/styles.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,235 @@
+body {
+	background: white;
+	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	font-size: small;
+	color: black;
+	margin: 0;
+}
+
+#banner {
+	position: relative;
+	height: 58px;
+	margin: 0 0 1em 0;
+	padding: 10px 20px;
+	background: url('images/banner_gradient.gif') top left repeat-x #d8edfd;
+	overflow: hidden;
+}
+
+#banner .banner-bg {
+	position: absolute;
+	top: 0;
+	right: 0;
+	width: 630px;
+	height: 78px;
+	background: url('images/banner_schraffur.gif') top right no-repeat;
+	z-index: 0;
+}
+
+#banner .banner-logo {
+	position: absolute;
+	top: 10px;
+	left: 20px;
+	z-index: 4;
+}
+
+#banner .banner-logo a {
+	border: 0;
+}
+
+#topnav {
+	position: absolute;
+	top: 3.6em;
+	right: 20px;
+}
+
+#topnav a {
+	color: #666;
+}
+
+#content {
+	margin: 2em 20px;
+}
+
+#footer {
+  margin: 2em 20px 1em 20px;
+  padding-top: 0.6em;
+  font-size: smaller;
+  text-align: center;
+  border-top: 1px dotted #999;
+}
+
+#progress {
+  margin-bottom: 2em;
+  border: 1px solid #aaa;
+  background-color: #f9f9f9;
+}
+
+#progress:after {
+  content: ".";
+  display: block;
+  height: 0;
+  font-size: 0;
+  clear: both;
+  visibility: hidden;
+}
+
+#progress li {
+  float: left;
+  color: #999;
+  padding: 1em 5em 1em 0.2em;
+}
+
+#progress li a {
+  color: #999;
+  text-decoration: none;
+}
+
+#progress li a:hover {
+  text-decoration: underline;
+}
+
+#progress li.current {
+  color: #000;
+  font-weight: bold;
+}
+
+#progress li.passed,
+#progress li.passed a,
+#progress li.current a {
+  color: #333;
+}
+
+fieldset {
+  margin-bottom: 1.5em;
+  border: 1px solid #aaa;
+  background-color: #f9f9f9;
+}
+
+fieldset p.hint {
+  margin-top: 0.5em;
+}
+
+legend {
+  font-size: 1.1em;
+  font-weight: bold;
+}
+
+textarea.configfile {
+  background-color: #f9f9f9;
+  font-family: monospace;
+  font-size: 9pt;
+  width: 100%;
+  height: 30em;
+}
+
+.propname {
+  font-family: monospace;
+  font-size: 9pt;
+  margin-top: 1em;
+  margin-bottom: 0.6em;
+}
+
+dd div {
+  margin-top: 0.3em;
+}
+
+dd label {
+  padding-left: 0.5em;
+}
+
+th {
+  text-align: left;
+}
+
+ul li {
+  margin: 0.3em 0 0.4em -1em;
+}
+
+ul li ul li {
+  margin-bottom: 0.2em;
+}
+
+h3 {
+  font-size: 1.1em;
+  margin-top: 1.5em;
+  margin-bottom: 0.6em;
+}
+
+h4 {
+  margin-bottom: 0.2em;
+}
+
+a.blocktoggle {
+  color: #666;
+  text-decoration: none;
+}
+
+a.addlink {
+  color: #999;
+  font-size: 0.9em;
+  padding: 1px 0 1px 20px;
+  background: url('images/add.png') top left no-repeat;
+  text-decoration: none;
+}
+
+a.removelink {
+  color: #999;
+  font-size: 0.9em;
+  padding: 1px 0 1px 24px;
+  background: url('images/delete.png') 4px 0 no-repeat;
+  text-decoration: none;
+}
+
+.hint {
+  color: #666;
+  font-size: 0.95em;
+}
+
+.success {
+  color: #006400;
+  font-weight: bold !important;
+}
+
+.fail {
+  color: #ff0000 !important;
+  font-weight: bold !important;
+}
+
+.na {
+  color: #f60;
+  font-weight: bold;
+}
+
+.indent {
+  padding-left: 0.8em;
+}
+
+.notice {
+  padding: 1em;
+  background-color: #f7fdcb;
+  border: 2px solid #c2d071;
+}
+
+.suggestion {
+  padding: 0.6em;
+  background-color: #ebebeb;
+  border: 1px solid #999;
+}
+
+p.warning,
+div.warning {
+  padding: 1em;
+  background-color: #ef9398;
+  border: 2px solid #dc5757;
+}
+
+h3.warning {
+  color: #c00;
+  background: url('images/error.png') top left no-repeat;
+  padding-left: 24px;
+}
+
+.userconf {
+  color: #00c;
+  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installer/test.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,445 @@
+<?php
+
+if (!class_exists('rcmail_install', false) || !is_object($RCI)) {
+    die("Not allowed! Please open installer/index.php instead.");
+}
+
+?>
+<form action="index.php?_step=3" method="post">
+
+<h3>Check config file</h3>
+<?php
+
+if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'defaults.inc.php')) {
+  $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php');
+  if (!empty($config)) {
+    $RCI->pass('defaults.inc.php');
+  }
+  else {
+    $RCI->fail('defaults.inc.php', 'Syntax error');
+  }
+}
+else {
+  $RCI->fail('defaults.inc.php', 'Unable to read default config file?');
+}
+echo '<br />';
+
+if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'config.inc.php')) {
+  $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php');
+  if (!empty($config)) {
+    $RCI->pass('config.inc.php');
+  }
+  else {
+    $RCI->fail('config.inc.php', 'Syntax error');
+  }
+}
+else {
+  $RCI->fail('config.inc.php', 'Unable to read file. Did you create the config file?');
+}
+echo '<br />';
+
+
+if ($RCI->configured && ($messages = $RCI->check_config())) {
+  if (is_array($messages['replaced'])) {
+    echo '<h3 class="warning">Replaced config options</h3>';
+    echo '<p class="hint">The following config options have been replaced or renamed. ';
+    echo 'Please update them accordingly in your config files.</p>';
+
+    echo '<ul class="configwarings">';
+    foreach ($messages['replaced'] as $msg) {
+      echo html::tag('li', null, html::span('propname', $msg['prop']) .
+        ' was replaced by ' . html::span('propname', $msg['replacement']));
+    }
+    echo '</ul>';
+  }
+
+  if (is_array($messages['obsolete'])) {
+    echo '<h3>Obsolete config options</h3>';
+    echo '<p class="hint">You still have some obsolete or inexistent properties set. This isn\'t a problem but should be noticed.</p>';
+
+    echo '<ul class="configwarings">';
+    foreach ($messages['obsolete'] as $msg) {
+      echo html::tag('li', null, html::span('propname', $msg['prop']) . ($msg['name'] ? ':&nbsp;' . $msg['name'] : ''));
+    }
+    echo '</ul>';
+  }
+
+  echo '<p class="suggestion">OK, lazy people can download the updated config file here: ';
+  echo html::a(array('href' => './?_mergeconfig=1'), 'config.inc.php') . ' &nbsp;';
+  echo "</p>";
+
+  if (is_array($messages['dependencies'])) {
+    echo '<h3 class="warning">Dependency check failed</h3>';
+    echo '<p class="hint">Some of your configuration settings require other options to be configured or additional PHP modules to be installed</p>';
+
+    echo '<ul class="configwarings">';
+    foreach ($messages['dependencies'] as $msg) {
+      echo html::tag('li', null, html::span('propname', $msg['prop']) . ': ' . $msg['explain']);
+    }
+    echo '</ul>';
+  }
+}
+
+?>
+
+<h3>Check if directories are writable</h3>
+<p>Roundcube may need to write/save files into these directories</p>
+<?php
+
+$dirs[] = $RCI->config['temp_dir'] ? $RCI->config['temp_dir'] : 'temp';
+if ($RCI->config['log_driver'] != 'syslog')
+    $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs';
+
+foreach ($dirs as $dir) {
+    $dirpath = rcube_utils::is_absolute_path($dir) ? $dir : INSTALL_PATH . $dir;
+    if (is_writable(realpath($dirpath))) {
+        $RCI->pass($dir);
+        $pass = true;
+    }
+    else {
+        $RCI->fail($dir, 'not writeable for the webserver');
+    }
+    echo '<br />';
+}
+
+if (!$pass) {
+    echo '<p class="hint">Use <tt>chmod</tt> or <tt>chown</tt> to grant write privileges to the webserver</p>';
+}
+
+?>
+
+<h3>Check DB config</h3>
+<?php
+
+$db_working = false;
+if ($RCI->configured) {
+    if (!empty($RCI->config['db_dsnw'])) {
+        $DB = rcube_db::factory($RCI->config['db_dsnw'], '', false);
+        $DB->set_debug((bool)$RCI->config['sql_debug']);
+        $DB->db_connect('w');
+
+        if (!($db_error_msg = $DB->is_error())) {
+            $RCI->pass('DSN (write)');
+            echo '<br />';
+            $db_working = true;
+        }
+        else {
+            $RCI->fail('DSN (write)', $db_error_msg);
+            echo '<p class="hint">Make sure that the configured database exists and that the user has write privileges<br />';
+            echo 'DSN: ' . $RCI->config['db_dsnw'] . '</p>';
+        }
+    }
+    else {
+        $RCI->fail('DSN (write)', 'not set');
+    }
+}
+else {
+    $RCI->fail('DSN (write)', 'Could not read config file');
+}
+
+// initialize db with schema found in /SQL/*
+if ($db_working && $_POST['initdb']) {
+    if (!($success = $RCI->init_db($DB))) {
+        $db_working = false;
+        echo '<p class="warning">Please try to inizialize the database manually as described in the INSTALL guide.
+          Make sure that the configured database extists and that the user as write privileges</p>';
+    }
+}
+
+else if ($db_working && $_POST['updatedb']) {
+    if (!($success = $RCI->update_db($_POST['version']))) {
+        echo '<p class="warning">Database schema update failed.</p>';
+    }
+}
+
+// test database
+if ($db_working) {
+    $db_read = $DB->query("SELECT count(*) FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'users'));
+    if ($DB->is_error()) {
+        $RCI->fail('DB Schema', "Database not initialized");
+        echo '<p><input type="submit" name="initdb" value="Initialize database" /></p>';
+        $db_working = false;
+    }
+    else if ($err = $RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) {
+        $RCI->fail('DB Schema', "Database schema differs");
+        echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>";
+        $select = $RCI->versions_select(array('name' => 'version'));
+        $select->add('0.9 or newer', '');
+        echo '<p class="suggestion">You should run the update queries to get the schema fixed.<br/><br/>Version to update from: ' . $select->show() . '&nbsp;<input type="submit" name="updatedb" value="Update" /></p>';
+        $db_working = false;
+    }
+    else {
+        $RCI->pass('DB Schema');
+        echo '<br />';
+    }
+}
+
+// more database tests
+if ($db_working) {
+    // write test
+    $insert_id = md5(uniqid());
+    $db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
+        . " (`sess_id`, `changed`, `ip`, `vars`) VALUES (?, ".$DB->now().", '127.0.0.1', 'foo')", $insert_id);
+
+    if ($db_write) {
+      $RCI->pass('DB Write');
+      $DB->query("DELETE FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
+        . " WHERE `sess_id` = ?", $insert_id);
+    }
+    else {
+      $RCI->fail('DB Write', $RCI->get_error());
+    }
+    echo '<br />';
+
+    // check timezone settings
+    $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db';
+    $tz_db = $DB->query($tz_db);
+    $tz_db = $DB->fetch_assoc($tz_db);
+    $tz_db = (int) $tz_db['tz_db'];
+    $tz_local = (int) time();
+    $tz_diff  = $tz_local - $tz_db;
+
+    // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta
+    if (abs($tz_diff) > 1800) {
+        $RCI->fail('DB Time', "Database time differs {$td_ziff}s from PHP time");
+    }
+    else {
+        $RCI->pass('DB Time');
+    }
+}
+
+?>
+
+<h3>Test filetype detection</h3>
+
+<?php
+
+if ($errors = $RCI->check_mime_detection()) {
+  $RCI->fail('Fileinfo/mime_content_type configuration');
+  if (!empty($RCI->config['mime_magic'])) {
+    echo '<p class="hint">Try setting the <tt>mime_magic</tt> config option to <tt>null</tt>.</p>';
+  }
+  else {
+    echo '<p class="hint">Check the <a href="http://www.php.net/manual/en/function.finfo-open.php">Fileinfo functions</a> of your PHP installation.<br/>';
+    echo 'The path to the magic.mime file can be set using the <tt>mime_magic</tt> config option in Roundcube.</p>';
+  }
+}
+else {
+  $RCI->pass('Fileinfo/mime_content_type configuration');
+  echo "<br/>";
+}
+
+
+if ($errors = $RCI->check_mime_extensions()) {
+  $RCI->fail('Mimetype to file extension mapping');
+  echo '<p class="hint">Please set a valid path to your webserver\'s mime.types file to the <tt>mime_types</tt> config option.<br/>';
+  echo 'If you can\'t find such a file, download it from <a href="http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types">svn.apache.org</a>.</p>';
+}
+else {
+  $RCI->pass('Mimetype to file extension mapping');
+  echo "<br/>";
+}
+
+?>
+
+
+<h3>Test SMTP config</h3>
+
+<p>
+Server: <?php echo rcube_utils::parse_host($RCI->getprop('smtp_server', 'localhost')); ?><br />
+Port: <?php echo $RCI->getprop('smtp_port'); ?><br />
+
+<?php
+
+if ($RCI->getprop('smtp_server')) {
+  $user = $RCI->getprop('smtp_user', '(none)');
+  $pass = $RCI->getprop('smtp_pass', '(none)');
+
+  if ($user == '%u') {
+    $user_field = new html_inputfield(array('name' => '_smtp_user'));
+    $user = $user_field->show($_POST['_smtp_user']);
+  }
+  if ($pass == '%p') {
+    $pass_field = new html_passwordfield(array('name' => '_smtp_pass'));
+    $pass = $pass_field->show();
+  }
+
+  echo "User: $user<br />";
+  echo "Password: $pass<br />";
+}
+
+$from_field = new html_inputfield(array('name' => '_from', 'id' => 'sendmailfrom'));
+$to_field = new html_inputfield(array('name' => '_to', 'id' => 'sendmailto'));
+
+?>
+</p>
+
+<?php
+
+if (isset($_POST['sendmail'])) {
+
+  echo '<p>Trying to send email...<br />';
+
+  $from = idn_to_ascii(trim($_POST['_from']));
+  $to   = idn_to_ascii(trim($_POST['_to']));
+
+  if (preg_match('/^' . $RCI->email_pattern . '$/i', $from) &&
+      preg_match('/^' . $RCI->email_pattern . '$/i', $to)
+  ) {
+    $headers = array(
+      'From'    => $from,
+      'To'      => $to,
+      'Subject' => 'Test message from Roundcube',
+    );
+
+    $body = 'This is a test to confirm that Roundcube can send email.';
+
+    // send mail using configured SMTP server
+    $CONFIG = $RCI->config;
+
+    if (!empty($_POST['_smtp_user'])) {
+      $CONFIG['smtp_user'] = $_POST['_smtp_user'];
+    }
+    if (!empty($_POST['_smtp_pass'])) {
+      $CONFIG['smtp_pass'] = $_POST['_smtp_pass'];
+    }
+
+    $mail_object  = new Mail_mime();
+    $send_headers = $mail_object->headers($headers);
+    $head         = $mail_object->txtHeaders($send_headers);
+
+    $SMTP = new rcube_smtp();
+    $SMTP->connect(rcube_utils::parse_host($RCI->getprop('smtp_server')),
+      $RCI->getprop('smtp_port'), $CONFIG['smtp_user'], $CONFIG['smtp_pass']);
+
+    $status        = $SMTP->send_mail($headers['From'], $headers['To'], $head, $body);
+    $smtp_response = $SMTP->get_response();
+
+    if ($status) {
+        $RCI->pass('SMTP send');
+    }
+    else {
+        $RCI->fail('SMTP send', join('; ', $smtp_response));
+    }
+  }
+  else {
+    $RCI->fail('SMTP send', 'Invalid sender or recipient');
+  }
+
+  echo '</p>';
+}
+
+?>
+
+<table>
+<tbody>
+  <tr>
+    <td><label for="sendmailfrom">Sender</label></td>
+    <td><?php echo $from_field->show($_POST['_from']); ?></td>
+  </tr>
+  <tr>
+    <td><label for="sendmailto">Recipient</label></td>
+    <td><?php echo $to_field->show($_POST['_to']); ?></td>
+  </tr>
+</tbody>
+</table>
+
+<p><input type="submit" name="sendmail" value="Send test mail" /></p>
+
+
+<h3>Test IMAP config</h3>
+
+<?php
+
+$default_hosts = $RCI->get_hostlist();
+if (!empty($default_hosts)) {
+  $host_field = new html_select(array('name' => '_host', 'id' => 'imaphost'));
+  $host_field->add($default_hosts);
+}
+else {
+  $host_field = new html_inputfield(array('name' => '_host', 'id' => 'imaphost'));
+}
+
+$user_field = new html_inputfield(array('name' => '_user', 'id' => 'imapuser'));
+$pass_field = new html_passwordfield(array('name' => '_pass', 'id' => 'imappass'));
+
+?>
+
+<table>
+<tbody>
+  <tr>
+    <td><label for="imaphost">Server</label></td>
+    <td><?php echo $host_field->show($_POST['_host']); ?></td>
+  </tr>
+  <tr>
+    <td>Port</td>
+    <td><?php echo $RCI->getprop('default_port'); ?></td>
+  </tr>
+    <tr>
+      <td><label for="imapuser">Username</label></td>
+      <td><?php echo $user_field->show($_POST['_user']); ?></td>
+    </tr>
+    <tr>
+      <td><label for="imappass">Password</label></td>
+      <td><?php echo $pass_field->show(); ?></td>
+    </tr>
+</tbody>
+</table>
+
+<?php
+
+if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user'])) {
+
+  echo '<p>Connecting to ' . rcube::Q($_POST['_host']) . '...<br />';
+
+  $imap_host = trim($_POST['_host']);
+  $imap_port = $RCI->getprop('default_port');
+  $a_host    = parse_url($imap_host);
+
+  if ($a_host['host']) {
+    $imap_host = $a_host['host'];
+    $imap_ssl  = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
+    if (isset($a_host['port']))
+      $imap_port = $a_host['port'];
+    else if ($imap_ssl && $imap_ssl != 'tls' && (!$imap_port || $imap_port == 143))
+      $imap_port = 993;
+  }
+
+  $imap_host = idn_to_ascii($imap_host);
+  $imap_user = idn_to_ascii($_POST['_user']);
+
+  $imap = new rcube_imap(null);
+  $imap->set_options(array(
+    'auth_type' => $RCI->getprop('imap_auth_type'),
+    'debug'     => $RCI->getprop('imap_debug'),
+    'socket_options' => $RCI->getprop('imap_conn_options'),
+  ));
+
+  if ($imap->connect($imap_host, $imap_user, $_POST['_pass'], $imap_port, $imap_ssl)) {
+    $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no'));
+    $imap->close();
+  }
+  else {
+    $RCI->fail('IMAP connect', $RCI->get_error());
+  }
+}
+
+?>
+
+<p><input type="submit" name="imaptest" value="Check login" /></p>
+
+</form>
+
+<hr />
+
+<p class="warning">
+
+After completing the installation and the final tests please <b>remove</b> the whole
+installer folder from the document root of the webserver or make sure that
+<tt>enable_installer</tt> option in <tt>config.inc.php</tt> is disabled.<br />
+<br />
+
+These files may expose sensitive configuration data like server passwords and encryption keys
+to the public. Make sure you cannot access this installer from your browser.
+
+</p>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jsdeps.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,87 @@
+{
+  "dependencies": [
+    {
+      "lib": "jquery",
+      "name": "jQuery",
+      "version": "3.2.1",
+      "url": "https://code.jquery.com/jquery-3.2.1.min.js",
+      "dest": "program/js/jquery.min.js",
+      "sha1": "1055018c28ab41087ef9ccefe411606893dabea2",
+      "license": "MIT",
+      "copyright": "Copyright 2005, 2015 jQuery Foundation, Inc.",
+      "source": "https://github.com/jquery/jquery/tree/3.2.1"
+    },
+    {
+      "lib": "jstz",
+      "name": "jsTimezoneDetect",
+      "version": "1.0.6",
+      "url": "https://bitbucket.org/pellepim/jstimezonedetect/raw/6c427658686c664da52c6a87cd62ec910baab276/dist/jstz.min.js",
+      "dest": "program/js/jstz.min.js",
+      "sha1": "4291cd3b259d2060460c2a6ab99f428d3c0c9537",
+      "license": "MIT",
+      "copyright": "Copyright (c) Jon Nylander",
+      "source": "https://bitbucket.org/pellepim/jstimezonedetect/raw/6c427658686c664da52c6a87cd62ec910baab276/dist/jstz.js"
+    },
+    {
+      "lib": "publickey",
+      "name": "PublicKey.js",
+      "version": "0e011cb",
+      "url": "https://raw.githubusercontent.com/diafygi/publickeyjs/0e011cb18907a1adc0313aa92e69cd8858e1ef66/publickey.js",
+      "dest": "program/js/publickey.js",
+      "sha1": "d0920e190754e024c4be76ad5bbc7e76b2e37a4d",
+      "license": "GPLv3",
+      "copyright": "Copyright (c) 2015 Daniel Roesler",
+      "source": "https://github.com/diafygi/publickeyjs/blob/master/publickey.js"
+    },
+    {
+      "lib": "tinymce",
+      "version": "4.5.8",
+      "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.8.zip",
+      "dest": "program/js",
+      "sha1": "08b0757264adb86066940bbafb7aa9ec0c7c6685",
+      "license": "LGPL",
+      "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved",
+      "rm": "program/js/tinymce",
+      "map": {
+        "js/tinymce": "tinymce"
+      },
+      "omit": [
+        "tinymce/license.txt",
+        "tinymce/jquery.tinymce.min.js"
+      ],
+      "addlicense": [
+        "tinymce/tinymce.min.js"
+      ]
+    },
+    {
+      "lib": "tinymce-langs",
+      "version": "4.5.8",
+      "url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy",
+      "dest": "program/js/tinymce"
+    },
+    {
+      "lib": "openpgp",
+      "name": "OpenPGP.js",
+      "version": "1.6.2",
+      "url": "https://raw.githubusercontent.com/openpgpjs/openpgpjs/v1.6.2/dist/openpgp.min.js",
+      "dest": "plugins/enigma/openpgp.min.js",
+      "sha1": "de75af6883019f490f69211e506377c84f49a85b",
+      "license": "LGPL",
+      "copyright": "Copyright (c) OpenPGP Development Team",
+      "source": "https://github.com/openpgpjs/openpgpjs/blob/v1.6.2/dist/openpgp.js"
+    },
+    {
+      "lib": "codemirror",
+      "version": "5.21.0",
+      "url": "http://codemirror.net/codemirror-5.21.0.zip",
+      "dest": "plugins/managesieve/codemirror",
+      "sha1": "3b767c2e3acd6796e54ed19ed2ac0755fcf87984",
+      "license": "MIT",
+      "map": {
+        "lib": "lib",
+        "addon/selection": "addon/selection",
+        "mode/sieve": "mode/sieve"
+      }
+    }
+  ]
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logs	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+../../log/roundcube
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/acl.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,389 @@
+/**
+ * ACL plugin script
+ */
+
+if (window.rcmail) {
+    rcmail.addEventListener('init', function() {
+        if (rcmail.gui_objects.acltable) {
+            rcmail.acl_list_init();
+            // enable autocomplete on user input
+            if (rcmail.env.acl_users_source) {
+                var inst = rcmail.is_framed() ? parent.rcmail : rcmail;
+                inst.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'});
+
+                // pass config settings and localized texts to autocomplete context
+                inst.set_env({ autocomplete_max:rcmail.env.autocomplete_max, autocomplete_min_length:rcmail.env.autocomplete_min_length });
+                inst.add_label('autocompletechars', rcmail.labels.autocompletechars);
+                inst.add_label('autocompletemore', rcmail.labels.autocompletemore);
+
+                // fix inserted value
+                inst.addEventListener('autocomplete_insert', function(e) {
+                    if (e.field.id != 'acluser')
+                        return;
+
+                    e.field.value = e.insert.replace(/[ ,;]+$/, '');
+                });
+            }
+        }
+
+        rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true);
+        rcmail.enable_command('acl-delete', 'acl-edit', false);
+
+        if (rcmail.env.acl_advanced)
+            $('#acl-switch').addClass('selected');
+    });
+}
+
+// Display new-entry form
+rcube_webmail.prototype.acl_create = function()
+{
+    this.acl_init_form();
+}
+
+// Display ACL edit form
+rcube_webmail.prototype.acl_edit = function()
+{
+    // @TODO: multi-row edition
+    var id = this.acl_list.get_single_selection();
+    if (id)
+        this.acl_init_form(id);
+}
+
+// ACL entry delete
+rcube_webmail.prototype.acl_delete = function()
+{
+    var users = this.acl_get_usernames();
+
+    if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) {
+        this.http_post('settings/plugin.acl', {
+                _act: 'delete',
+                _user: users.join(','),
+                _mbox: this.env.mailbox
+            },
+            this.set_busy(true, 'acl.deleting'));
+    }
+}
+
+// Save ACL data
+rcube_webmail.prototype.acl_save = function()
+{
+    var data, type, rights = '', user = $('#acluser', this.acl_form).val();
+
+    $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() {
+        if (this.checked)
+            rights += this.value;
+    });
+
+    if (type = $('input:checked[name=usertype]', this.acl_form).val()) {
+        if (type != 'user')
+            user = type;
+    }
+
+    if (!user) {
+        alert(this.get_label('acl.nouser'));
+        return;
+    }
+    if (!rights) {
+        alert(this.get_label('acl.norights'));
+        return;
+    }
+
+    data = {
+        _act: 'save',
+        _user: user,
+        _acl: rights,
+        _mbox: this.env.mailbox
+    }
+
+    if (this.acl_id) {
+        data._old = this.acl_id;
+    }
+
+    this.http_post('settings/plugin.acl', data, this.set_busy(true, 'acl.saving'));
+}
+
+// Cancel/Hide form
+rcube_webmail.prototype.acl_cancel = function()
+{
+    this.ksearch_blur();
+    this.acl_popup.dialog('close');
+}
+
+// Update data after save (and hide form)
+rcube_webmail.prototype.acl_update = function(o)
+{
+    // delete old row
+    if (o.old)
+        this.acl_remove_row(o.old);
+    // make sure the same ID doesn't exist
+    else if (this.env.acl[o.id])
+        this.acl_remove_row(o.id);
+
+    // add new row
+    this.acl_add_row(o, true);
+    // hide autocomplete popup
+    this.ksearch_blur();
+    // hide form
+    this.acl_popup.dialog('close');
+}
+
+// Switch table display mode
+rcube_webmail.prototype.acl_mode_switch = function(elem)
+{
+    this.env.acl_advanced = !this.env.acl_advanced;
+    this.enable_command('acl-delete', 'acl-edit', false);
+    this.http_request('settings/plugin.acl', '_act=list'
+        + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple')
+        + '&_mbox='+urlencode(this.env.mailbox),
+        this.set_busy(true, 'loading'));
+}
+
+// ACL table initialization
+rcube_webmail.prototype.acl_list_init = function()
+{
+    var method = this.env.acl_advanced ? 'addClass' : 'removeClass';
+
+    $('#acl-switch')[method]('selected');
+    $(this.gui_objects.acltable)[method]('advanced');
+
+    this.acl_list = new rcube_list_widget(this.gui_objects.acltable,
+        {multiselect: true, draggable: false, keyboard: true});
+    this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); })
+        .addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); })
+        .addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); })
+        .init();
+}
+
+// ACL table row selection handler
+rcube_webmail.prototype.acl_list_select = function(list)
+{
+    rcmail.enable_command('acl-delete', list.selection.length > 0);
+    rcmail.enable_command('acl-edit', list.selection.length == 1);
+    list.focus();
+}
+
+// ACL table double-click handler
+rcube_webmail.prototype.acl_list_dblclick = function(list)
+{
+    this.acl_edit();
+}
+
+// ACL table keypress handler
+rcube_webmail.prototype.acl_list_keypress = function(list)
+{
+    if (list.key_pressed == list.ENTER_KEY)
+        this.command('acl-edit');
+    else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
+        if (!this.acl_form || !this.acl_form.is(':visible'))
+            this.command('acl-delete');
+}
+
+// Reloads ACL table
+rcube_webmail.prototype.acl_list_update = function(html)
+{
+    $(this.gui_objects.acltable).html(html);
+    this.acl_list_init();
+}
+
+// Returns names of users in selected rows
+rcube_webmail.prototype.acl_get_usernames = function()
+{
+    var users = [], n, len, cell, row,
+        list = this.acl_list,
+        selection = list.get_selection();
+
+    for (n=0, len=selection.length; n<len; n++) {
+        if (this.env.acl_specials.length && $.inArray(selection[n], this.env.acl_specials) >= 0) {
+            users.push(selection[n]);
+        }
+        else if (row = list.rows[selection[n]]) {
+            cell = $('td.user', row.obj);
+            if (cell.length == 1)
+                users.push(cell.text());
+        }
+    }
+
+    return users;
+}
+
+// Removes ACL table row
+rcube_webmail.prototype.acl_remove_row = function(id)
+{
+    var list = this.acl_list;
+
+    list.remove_row(id);
+    list.clear_selection();
+
+    // we don't need it anymore (remove id conflict)
+    $('#rcmrow'+id).remove();
+    this.env.acl[id] = null;
+
+    this.enable_command('acl-delete', list.selection.length > 0);
+    this.enable_command('acl-edit', list.selection.length == 1);
+}
+
+// Adds ACL table row
+rcube_webmail.prototype.acl_add_row = function(o, sel)
+{
+    var n, len, ids = [], spec = [], id = o.id, list = this.acl_list,
+        items = this.env.acl_advanced ? [] : this.env.acl_items,
+        table = this.gui_objects.acltable,
+        row = $('thead > tr', table).clone();
+
+    // Update new row
+    $('th', row).map(function() {
+        var td = $('<td>'),
+            title = $(this).attr('title'),
+            cl = this.className.replace(/^acl/, '');
+
+        if (title)
+            td.attr('title', title);
+
+        if (items && items[cl])
+            cl = items[cl];
+
+        if (cl == 'user')
+            td.addClass(cl).append($('<a>').text(o.username));
+        else
+            td.addClass(this.className + ' ' + rcmail.acl_class(o.acl, cl)).text('');
+
+        $(this).replaceWith(td);
+    });
+
+    row.attr('id', 'rcmrow'+id);
+    row = row.get(0);
+
+    this.env.acl[id] = o.acl;
+
+    // sorting... (create an array of user identifiers, then sort it)
+    for (n in this.env.acl) {
+        if (this.env.acl[n]) {
+            if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0)
+                spec.push(n);
+            else
+                ids.push(n);
+        }
+    }
+    ids.sort();
+    // specials on the top
+    ids = spec.concat(ids);
+
+    // find current id
+    for (n=0, len=ids.length; n<len; n++)
+        if (ids[n] == id)
+            break;
+
+    // add row
+    if (n && n < len) {
+        $('#rcmrow'+ids[n-1]).after(row);
+        list.init_row(row);
+        list.rowcount++;
+    }
+    else
+        list.insert_row(row);
+
+    if (sel)
+        list.select_row(o.id);
+}
+
+// Initializes and shows ACL create/edit form
+rcube_webmail.prototype.acl_init_form = function(id)
+{
+    var ul, row, td, val = '', type = 'user', li_elements, body = $('body'),
+        adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'),
+        name_input = $('#acluser'), type_list = $('#usertype');
+
+    if (!this.acl_form) {
+        var fn = function () { $('input[value="user"]').prop('checked', true); };
+        name_input.click(fn).keypress(fn);
+    }
+
+    this.acl_form = $('#aclform');
+
+    // Hide unused items
+    if (this.env.acl_advanced) {
+        adv_ul.show();
+        sim_ul.hide();
+        ul = adv_ul;
+    }
+    else {
+        sim_ul.show();
+        adv_ul.hide();
+        ul = sim_ul;
+    }
+
+    // initialize form fields
+    li_elements = $(':checkbox', ul);
+    li_elements.attr('checked', false);
+
+    if (id && (row = this.acl_list.rows[id])) {
+        row = row.obj;
+        li_elements.map(function() {
+            td = $('td.'+this.id, row);
+            if (td.length && td.hasClass('enabled'))
+                this.checked = true;
+        });
+
+        if (!this.env.acl_specials.length || $.inArray(id, this.env.acl_specials) < 0)
+            val = $('td.user', row).text();
+        else
+            type = id;
+    }
+    // mark read (lrs) rights by default
+    else {
+        li_elements.filter(function() { return this.id.match(/^acl([lrs]|read)$/); }).prop('checked', true);
+    }
+
+    name_input.val(val);
+    $('input[value='+type+']').prop('checked', true);
+
+    this.acl_id = id;
+
+    var buttons = {}, me = this, body = document.body;
+
+    buttons[this.get_label('save')] = function(e) { me.command('acl-save'); };
+    buttons[this.get_label('cancel')] = function(e) { me.command('acl-cancel'); };
+
+    // display it as popup
+    this.acl_popup = this.show_popup_dialog(
+        this.acl_form.show(),
+        id ? this.get_label('acl.editperms') : this.get_label('acl.newuser'),
+        buttons,
+        {
+            button_classes: ['mainaction'],
+            modal: true,
+            closeOnEscape: true,
+            close: function(e, ui) {
+                (me.is_framed() ? parent.rcmail : me).ksearch_hide();
+                me.acl_form.appendTo(body).hide();
+                $(this).remove();
+                window.focus(); // focus iframe
+            }
+        }
+    );
+
+    if (type == 'user')
+        name_input.focus();
+    else
+        $('input:checked', type_list).focus();
+}
+
+// Returns class name according to ACL comparison result
+rcube_webmail.prototype.acl_class = function(acl1, acl2)
+{
+    var i, len, found = 0;
+
+    acl1 = String(acl1);
+    acl2 = String(acl2);
+
+    for (i=0, len=acl2.length; i<len; i++)
+        if (acl1.indexOf(acl2[i]) > -1)
+            found++;
+
+    if (found == len)
+        return 'enabled';
+    else if (found)
+        return 'partial';
+
+    return 'disabled';
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/acl.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+window.rcmail&&rcmail.addEventListener("init",function(){if(rcmail.gui_objects.acltable&&(rcmail.acl_list_init(),rcmail.env.acl_users_source)){var a=rcmail.is_framed()?parent.rcmail:rcmail;a.init_address_input_events($("#acluser"),{action:"settings/plugin.acl-autocomplete"});a.set_env({autocomplete_max:rcmail.env.autocomplete_max,autocomplete_min_length:rcmail.env.autocomplete_min_length});a.add_label("autocompletechars",rcmail.labels.autocompletechars);a.add_label("autocompletemore",rcmail.labels.autocompletemore);
+a.addEventListener("autocomplete_insert",function(a){"acluser"==a.field.id&&(a.field.value=a.insert.replace(/[ ,;]+$/,""))})}rcmail.enable_command("acl-create","acl-save","acl-cancel","acl-mode-switch",!0);rcmail.enable_command("acl-delete","acl-edit",!1);rcmail.env.acl_advanced&&$("#acl-switch").addClass("selected")});rcube_webmail.prototype.acl_create=function(){this.acl_init_form()};rcube_webmail.prototype.acl_edit=function(){var a=this.acl_list.get_single_selection();a&&this.acl_init_form(a)};
+rcube_webmail.prototype.acl_delete=function(){var a=this.acl_get_usernames();a&&a.length&&confirm(this.get_label("acl.deleteconfirm"))&&this.http_post("settings/plugin.acl",{_act:"delete",_user:a.join(","),_mbox:this.env.mailbox},this.set_busy(!0,"acl.deleting"))};
+rcube_webmail.prototype.acl_save=function(){var a,c="",b=$("#acluser",this.acl_form).val();$(this.env.acl_advanced?"#advancedrights :checkbox":"#simplerights :checkbox",this.acl_form).map(function(){this.checked&&(c+=this.value)});(a=$("input:checked[name=usertype]",this.acl_form).val())&&"user"!=a&&(b=a);b?c?(a={_act:"save",_user:b,_acl:c,_mbox:this.env.mailbox},this.acl_id&&(a._old=this.acl_id),this.http_post("settings/plugin.acl",a,this.set_busy(!0,"acl.saving"))):alert(this.get_label("acl.norights")):
+alert(this.get_label("acl.nouser"))};rcube_webmail.prototype.acl_cancel=function(){this.ksearch_blur();this.acl_popup.dialog("close")};rcube_webmail.prototype.acl_update=function(a){a.old?this.acl_remove_row(a.old):this.env.acl[a.id]&&this.acl_remove_row(a.id);this.acl_add_row(a,!0);this.ksearch_blur();this.acl_popup.dialog("close")};
+rcube_webmail.prototype.acl_mode_switch=function(a){this.env.acl_advanced=!this.env.acl_advanced;this.enable_command("acl-delete","acl-edit",!1);this.http_request("settings/plugin.acl","_act=list&_mode="+(this.env.acl_advanced?"advanced":"simple")+"&_mbox="+urlencode(this.env.mailbox),this.set_busy(!0,"loading"))};
+rcube_webmail.prototype.acl_list_init=function(){var a=this.env.acl_advanced?"addClass":"removeClass";$("#acl-switch")[a]("selected");$(this.gui_objects.acltable)[a]("advanced");this.acl_list=new rcube_list_widget(this.gui_objects.acltable,{multiselect:!0,draggable:!1,keyboard:!0});this.acl_list.addEventListener("select",function(a){rcmail.acl_list_select(a)}).addEventListener("dblclick",function(a){rcmail.acl_list_dblclick(a)}).addEventListener("keypress",function(a){rcmail.acl_list_keypress(a)}).init()};
+rcube_webmail.prototype.acl_list_select=function(a){rcmail.enable_command("acl-delete",0<a.selection.length);rcmail.enable_command("acl-edit",1==a.selection.length);a.focus()};rcube_webmail.prototype.acl_list_dblclick=function(a){this.acl_edit()};rcube_webmail.prototype.acl_list_keypress=function(a){if(a.key_pressed==a.ENTER_KEY)this.command("acl-edit");else if(a.key_pressed==a.DELETE_KEY||a.key_pressed==a.BACKSPACE_KEY)this.acl_form&&this.acl_form.is(":visible")||this.command("acl-delete")};
+rcube_webmail.prototype.acl_list_update=function(a){$(this.gui_objects.acltable).html(a);this.acl_list_init()};rcube_webmail.prototype.acl_get_usernames=function(){var a=[],c,b,d=this.acl_list,e=d.get_selection();var g=0;for(c=e.length;g<c;g++)if(this.env.acl_specials.length&&0<=$.inArray(e[g],this.env.acl_specials))a.push(e[g]);else if(b=d.rows[e[g]])b=$("td.user",b.obj),1==b.length&&a.push(b.text());return a};
+rcube_webmail.prototype.acl_remove_row=function(a){var c=this.acl_list;c.remove_row(a);c.clear_selection();$("#rcmrow"+a).remove();this.env.acl[a]=null;this.enable_command("acl-delete",0<c.selection.length);this.enable_command("acl-edit",1==c.selection.length)};
+rcube_webmail.prototype.acl_add_row=function(a,c){var b=[];var d=[];var e=a.id,g=this.acl_list,h=this.env.acl_advanced?[]:this.env.acl_items,k=$("thead > tr",this.gui_objects.acltable).clone();$("th",k).map(function(){var b=$("<td>"),c=$(this).attr("title"),d=this.className.replace(/^acl/,"");c&&b.attr("title",c);h&&h[d]&&(d=h[d]);"user"==d?b.addClass(d).append($("<a>").text(a.username)):b.addClass(this.className+" "+rcmail.acl_class(a.acl,d)).text("");$(this).replaceWith(b)});k.attr("id","rcmrow"+
+e);k=k.get(0);this.env.acl[e]=a.acl;for(f in this.env.acl)this.env.acl[f]&&(this.env.acl_specials.length&&0<=$.inArray(f,this.env.acl_specials)?d.push(f):b.push(f));b.sort();b=d.concat(b);var f=0;for(d=b.length;f<d&&b[f]!=e;f++);f&&f<d?($("#rcmrow"+b[f-1]).after(k),g.init_row(k),g.rowcount++):g.insert_row(k);c&&g.select_row(a.id)};
+rcube_webmail.prototype.acl_init_form=function(a){var c,b,d="",e="user",g=$("body");var h=$("#advancedrights");var k=$("#simplerights"),f=$("#acluser"),n=$("#usertype");if(!this.acl_form){var m=function(){$('input[value="user"]').prop("checked",!0)};f.click(m).keypress(m)}this.acl_form=$("#aclform");this.env.acl_advanced?(h.show(),k.hide()):(k.show(),h.hide(),h=k);h=$(":checkbox",h);h.attr("checked",!1);a&&(c=this.acl_list.rows[a])?(c=c.obj,h.map(function(){b=$("td."+this.id,c);b.length&&b.hasClass("enabled")&&
+(this.checked=!0)}),!this.env.acl_specials.length||0>$.inArray(a,this.env.acl_specials)?d=$("td.user",c).text():e=a):h.filter(function(){return this.id.match(/^acl([lrs]|read)$/)}).prop("checked",!0);f.val(d);$("input[value="+e+"]").prop("checked",!0);this.acl_id=a;d={};var l=this;g=document.body;d[this.get_label("save")]=function(a){l.command("acl-save")};d[this.get_label("cancel")]=function(a){l.command("acl-cancel")};this.acl_popup=this.show_popup_dialog(this.acl_form.show(),a?this.get_label("acl.editperms"):
+this.get_label("acl.newuser"),d,{button_classes:["mainaction"],modal:!0,closeOnEscape:!0,close:function(a,b){(l.is_framed()?parent.rcmail:l).ksearch_hide();l.acl_form.appendTo(g).hide();$(this).remove();window.focus()}});"user"==e?f.focus():$("input:checked",n).focus()};rcube_webmail.prototype.acl_class=function(a,c){var b,d=0;a=String(a);c=String(c);var e=0;for(b=c.length;e<b;e++)-1<a.indexOf(c[e])&&d++;return d==b?"enabled":d?"partial":"disabled"};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/acl.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,781 @@
+<?php
+
+/**
+ * Folders Access Control Lists Management (RFC4314, RFC2086)
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * Copyright (C) 2011-2012, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class acl extends rcube_plugin
+{
+    public $task = 'settings|addressbook|calendar';
+
+    private $rc;
+    private $supported = null;
+    private $mbox;
+    private $ldap;
+    private $specials = array('anyone', 'anonymous');
+
+    /**
+     * Plugin initialization
+     */
+    function init()
+    {
+        $this->rc = rcmail::get_instance();
+
+        // Register hooks
+        $this->add_hook('folder_form', array($this, 'folder_form'));
+        // kolab_addressbook plugin
+        $this->add_hook('addressbook_form', array($this, 'folder_form'));
+        $this->add_hook('calendar_form_kolab', array($this, 'folder_form'));
+        // Plugin actions
+        $this->register_action('plugin.acl', array($this, 'acl_actions'));
+        $this->register_action('plugin.acl-autocomplete', array($this, 'acl_autocomplete'));
+    }
+
+    /**
+     * Handler for plugin actions (AJAX)
+     */
+    function acl_actions()
+    {
+        $action = trim(rcube_utils::get_input_value('_act', rcube_utils::INPUT_GPC));
+
+        // Connect to IMAP
+        $this->rc->storage_init();
+
+        // Load localization and configuration
+        $this->add_texts('localization/');
+        $this->load_config();
+
+        if ($action == 'save') {
+            $this->action_save();
+        }
+        else if ($action == 'delete') {
+            $this->action_delete();
+        }
+        else if ($action == 'list') {
+            $this->action_list();
+        }
+
+        // Only AJAX actions
+        $this->rc->output->send();
+    }
+
+    /**
+     * Handler for user login autocomplete request
+     */
+    function acl_autocomplete()
+    {
+        $this->load_config();
+
+        $search = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC, true);
+        $reqid  = rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC);
+        $users  = array();
+        $keys   = array();
+
+        if ($this->init_ldap()) {
+            $max  = (int) $this->rc->config->get('autocomplete_max', 15);
+            $mode = (int) $this->rc->config->get('addressbook_search_mode');
+
+            $this->ldap->set_pagesize($max);
+            $result = $this->ldap->search('*', $search, $mode);
+
+            foreach ($result->records as $record) {
+                $user = $record['uid'];
+
+                if (is_array($user)) {
+                    $user = array_filter($user);
+                    $user = $user[0];
+                }
+
+                if ($user) {
+                    $display = rcube_addressbook::compose_search_name($record);
+                    $user    = array('name' => $user, 'display' => $display);
+                    $users[] = $user;
+                    $keys[]  = $display ?: $user['name'];
+                }
+            }
+
+            if ($this->rc->config->get('acl_groups')) {
+                $prefix      = $this->rc->config->get('acl_group_prefix');
+                $group_field = $this->rc->config->get('acl_group_field', 'name');
+                $result      = $this->ldap->list_groups($search, $mode);
+
+                foreach ($result as $record) {
+                    $group    = $record['name'];
+                    $group_id = is_array($record[$group_field]) ? $record[$group_field][0] : $record[$group_field];
+
+                    if ($group) {
+                        $users[] = array('name' => ($prefix ?: '') . $group_id, 'display' => $group, 'type' => 'group');
+                        $keys[]  = $group;
+                    }
+                }
+            }
+        }
+
+        if (count($users)) {
+            // sort users index
+            asort($keys, SORT_LOCALE_STRING);
+            // re-sort users according to index
+            foreach ($keys as $idx => $val) {
+                $keys[$idx] = $users[$idx];
+            }
+            $users = array_values($keys);
+        }
+
+        $this->rc->output->command('ksearch_query_results', $users, $search, $reqid);
+        $this->rc->output->send();
+    }
+
+    /**
+     * Handler for 'folder_form' hook
+     *
+     * @param array $args Hook arguments array (form data)
+     *
+     * @return array Hook arguments array
+     */
+    function folder_form($args)
+    {
+        $mbox_imap = $args['options']['name'];
+        $myrights  = $args['options']['rights'];
+
+        // Edited folder name (empty in create-folder mode)
+        if (!strlen($mbox_imap)) {
+            return $args;
+        }
+/*
+        // Do nothing on protected folders (?)
+        if ($args['options']['protected']) {
+            return $args;
+        }
+*/
+        // Get MYRIGHTS
+        if (empty($myrights)) {
+            return $args;
+        }
+
+        // Load localization and include scripts
+        $this->load_config();
+        $this->specials = $this->rc->config->get('acl_specials', $this->specials);
+        $this->add_texts('localization/', array('deleteconfirm', 'norights',
+            'nouser', 'deleting', 'saving', 'newuser', 'editperms'));
+        $this->rc->output->add_label('save', 'cancel');
+        $this->include_script('acl.js');
+        $this->rc->output->include_script('list.js');
+        $this->include_stylesheet($this->local_skin_path().'/acl.css');
+
+        // add Info fieldset if it doesn't exist
+        if (!isset($args['form']['props']['fieldsets']['info']))
+            $args['form']['props']['fieldsets']['info'] = array(
+                'name'  => $this->rc->gettext('info'),
+                'content' => array());
+
+        // Display folder rights to 'Info' fieldset
+        $args['form']['props']['fieldsets']['info']['content']['myrights'] = array(
+            'label' => rcube::Q($this->gettext('myrights')),
+            'value' => $this->acl2text($myrights)
+        );
+
+        // Return if not folder admin
+        if (!in_array('a', $myrights)) {
+            return $args;
+        }
+
+        // The 'Sharing' tab
+        $this->mbox = $mbox_imap;
+        $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source'));
+        $this->rc->output->set_env('mailbox', $mbox_imap);
+        $this->rc->output->add_handlers(array(
+            'acltable'  => array($this, 'templ_table'),
+            'acluser'   => array($this, 'templ_user'),
+            'aclrights' => array($this, 'templ_rights'),
+        ));
+
+        $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15));
+        $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length'));
+        $this->rc->output->add_label('autocompletechars', 'autocompletemore');
+
+        $args['form']['sharing'] = array(
+            'name'    => rcube::Q($this->gettext('sharing')),
+            'content' => $this->rc->output->parse('acl.table', false, false),
+        );
+
+        return $args;
+    }
+
+    /**
+     * Creates ACL rights table
+     *
+     * @param array $attrib Template object attributes
+     *
+     * @return string HTML Content
+     */
+    function templ_table($attrib)
+    {
+        if (empty($attrib['id']))
+            $attrib['id'] = 'acl-table';
+
+        $out = $this->list_rights($attrib);
+
+        $this->rc->output->add_gui_object('acltable', $attrib['id']);
+
+        return $out;
+    }
+
+    /**
+     * Creates ACL rights form (rights list part)
+     *
+     * @param array $attrib Template object attributes
+     *
+     * @return string HTML Content
+     */
+    function templ_rights($attrib)
+    {
+        // Get supported rights
+        $supported = $this->rights_supported();
+
+        // give plugins the opportunity to adjust this list
+        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
+            array('rights' => $supported, 'folder' => $this->mbox, 'labels' => array()));
+        $supported = $data['rights'];
+
+        // depending on server capability either use 'te' or 'd' for deleting msgs
+        $deleteright = implode(array_intersect(str_split('ted'), $supported));
+
+        $out = '';
+        $ul  = '';
+        $input = new html_checkbox();
+
+        // Advanced rights
+        $attrib['id'] = 'advancedrights';
+        foreach ($supported as $key => $val) {
+            $id = "acl$val";
+            $ul .= html::tag('li', null,
+                $input->show('', array(
+                    'name' => "acl[$val]", 'value' => $val, 'id' => $id))
+                . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$val)),
+                    $this->gettext('acl'.$val)));
+        }
+
+        $out = html::tag('ul', $attrib, $ul, html::$common_attrib);
+
+        // Simple rights
+        $ul = '';
+        $attrib['id'] = 'simplerights';
+        $items = array(
+            'read' => 'lrs',
+            'write' => 'wi',
+            'delete' => $deleteright,
+            'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
+        );
+
+        // give plugins the opportunity to adjust this list
+        $data = $this->rc->plugins->exec_hook('acl_rights_simple',
+            array('rights' => $items, 'folder' => $this->mbox, 'labels' => array(), 'titles' => array()));
+
+        foreach ($data['rights'] as $key => $val) {
+            $id = "acl$key";
+            $ul .= html::tag('li', null,
+                $input->show('', array(
+                    'name' => "acl[$val]", 'value' => $val, 'id' => $id))
+                . html::label(array('for' => $id, 'title' => $data['titles'][$key] ?: $this->gettext('longacl'.$key)),
+                    $data['labels'][$key] ?: $this->gettext('acl'.$key)));
+        }
+
+        $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib);
+
+        $this->rc->output->set_env('acl_items', $data['rights']);
+
+        return $out;
+    }
+
+    /**
+     * Creates ACL rights form (user part)
+     *
+     * @param array $attrib Template object attributes
+     *
+     * @return string HTML Content
+     */
+    function templ_user($attrib)
+    {
+        // Create username input
+        $attrib['name'] = 'acluser';
+
+        $textfield = new html_inputfield($attrib);
+
+        $fields['user'] = html::label(array('for' => $attrib['id']), $this->gettext('username'))
+            . ' ' . $textfield->show();
+
+        // Add special entries
+        if (!empty($this->specials)) {
+            foreach ($this->specials as $key) {
+                $fields[$key] = html::label(array('for' => 'id'.$key), $this->gettext($key));
+            }
+        }
+
+        $this->rc->output->set_env('acl_specials', $this->specials);
+
+        // Create list with radio buttons
+        if (count($fields) > 1) {
+            $ul = '';
+            $radio = new html_radiobutton(array('name' => 'usertype'));
+            foreach ($fields as $key => $val) {
+                $ul .= html::tag('li', null, $radio->show($key == 'user' ? 'user' : '',
+                        array('value' => $key, 'id' => 'id'.$key))
+                    . $val);
+            }
+
+            $out = html::tag('ul', array('id' => 'usertype', 'class' => $attrib['class']), $ul, html::$common_attrib);
+        }
+        // Display text input alone
+        else {
+            $out = $fields['user'];
+        }
+
+        return $out;
+    }
+
+    /**
+     * Creates ACL rights table
+     *
+     * @param array $attrib Template object attributes
+     *
+     * @return string HTML Content
+     */
+    private function list_rights($attrib=array())
+    {
+        // Get ACL for the folder
+        $acl = $this->rc->storage->get_acl($this->mbox);
+
+        if (!is_array($acl)) {
+            $acl = array();
+        }
+
+        // Keep special entries (anyone/anonymous) on top of the list
+        if (!empty($this->specials) && !empty($acl)) {
+            foreach ($this->specials as $key) {
+                if (isset($acl[$key])) {
+                    $acl_special[$key] = $acl[$key];
+                    unset($acl[$key]);
+                }
+            }
+        }
+
+        // Sort the list by username
+        uksort($acl, 'strnatcasecmp');
+
+        if (!empty($acl_special)) {
+            $acl = array_merge($acl_special, $acl);
+        }
+
+        // Get supported rights and build column names
+        $supported = $this->rights_supported();
+
+        // give plugins the opportunity to adjust this list
+        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
+            array('rights' => $supported, 'folder' => $this->mbox, 'labels' => array()));
+        $supported = $data['rights'];
+
+        // depending on server capability either use 'te' or 'd' for deleting msgs
+        $deleteright = implode(array_intersect(str_split('ted'), $supported));
+
+        // Use advanced or simple (grouped) rights
+        $advanced = $this->rc->config->get('acl_advanced_mode');
+
+        if ($advanced) {
+            $items = array();
+            foreach ($supported as $sup) {
+                $items[$sup] = $sup;
+            }
+        }
+        else {
+            $items = array(
+                'read' => 'lrs',
+                'write' => 'wi',
+                'delete' => $deleteright,
+                'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
+            );
+
+            // give plugins the opportunity to adjust this list
+            $data = $this->rc->plugins->exec_hook('acl_rights_simple',
+                array('rights' => $items, 'folder' => $this->mbox, 'labels' => array()));
+            $items = $data['rights'];
+        }
+
+        // Create the table
+        $attrib['noheader'] = true;
+        $table = new html_table($attrib);
+
+        // Create table header
+        $table->add_header('user', $this->gettext('identifier'));
+        foreach (array_keys($items) as $key) {
+            $label = $data['labels'][$key] ?: $this->gettext('shortacl'.$key);
+            $table->add_header(array('class' => 'acl'.$key, 'title' => $label), $label);
+        }
+
+        $js_table = array();
+        foreach ($acl as $user => $rights) {
+            if ($this->rc->storage->conn->user == $user) {
+                continue;
+            }
+
+            // filter out virtual rights (c or d) the server may return
+            $userrights = array_intersect($rights, $supported);
+            $userid = rcube_utils::html_identifier($user);
+
+            if (!empty($this->specials) && in_array($user, $this->specials)) {
+                $user = $this->gettext($user);
+            }
+
+            $table->add_row(array('id' => 'rcmrow'.$userid));
+            $table->add('user', html::a(array('id' => 'rcmlinkrow'.$userid), rcube::Q($user)));
+
+            foreach ($items as $key => $right) {
+                $in = $this->acl_compare($userrights, $right);
+                switch ($in) {
+                    case 2: $class = 'enabled'; break;
+                    case 1: $class = 'partial'; break;
+                    default: $class = 'disabled'; break;
+                }
+                $table->add('acl' . $key . ' ' . $class, '');
+            }
+
+            $js_table[$userid] = implode($userrights);
+        }
+
+        $this->rc->output->set_env('acl', $js_table);
+        $this->rc->output->set_env('acl_advanced', $advanced);
+
+        $out = $table->show();
+
+        return $out;
+    }
+
+    /**
+     * Handler for ACL update/create action
+     */
+    private function action_save()
+    {
+        $mbox  = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); // UTF7-IMAP
+        $user  = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST));
+        $acl   = trim(rcube_utils::get_input_value('_acl', rcube_utils::INPUT_POST));
+        $oldid = trim(rcube_utils::get_input_value('_old', rcube_utils::INPUT_POST));
+
+        $acl    = array_intersect(str_split($acl), $this->rights_supported());
+        $users  = $oldid ? array($user) : explode(',', $user);
+        $result = 0;
+
+        foreach ($users as $user) {
+            $user   = trim($user);
+            $prefix = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : '';
+
+            if ($prefix && strpos($user, $prefix) === 0) {
+                $username = $user;
+            }
+            else if (!empty($this->specials) && in_array($user, $this->specials)) {
+                $username = $this->gettext($user);
+            }
+            else if (!empty($user)) {
+                if (!strpos($user, '@') && ($realm = $this->get_realm())) {
+                    $user .= '@' . rcube_utils::idn_to_ascii(preg_replace('/^@/', '', $realm));
+                }
+                $username = $user;
+            }
+
+            if (!$acl || !$user || !strlen($mbox)) {
+                continue;
+            }
+
+            $user     = $this->mod_login($user);
+            $username = $this->mod_login($username);
+
+            if ($user != $_SESSION['username'] && $username != $_SESSION['username']) {
+                if ($this->rc->storage->set_acl($mbox, $user, $acl)) {
+                    $ret = array('id' => rcube_utils::html_identifier($user),
+                         'username' => $username, 'acl' => implode($acl), 'old' => $oldid);
+                    $this->rc->output->command('acl_update', $ret);
+                    $result++;
+                }
+            }
+        }
+
+        if ($result) {
+            $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation');
+        }
+        else {
+            $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error');
+        }
+    }
+
+    /**
+     * Handler for ACL delete action
+     */
+    private function action_delete()
+    {
+        $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); //UTF7-IMAP
+        $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST));
+
+        $user = explode(',', $user);
+
+        foreach ($user as $u) {
+            $u = trim($u);
+            if ($this->rc->storage->delete_acl($mbox, $u)) {
+                $this->rc->output->command('acl_remove_row', rcube_utils::html_identifier($u));
+            }
+            else {
+                $error = true;
+            }
+        }
+
+        if (!$error) {
+            $this->rc->output->show_message('acl.deletesuccess', 'confirmation');
+        }
+        else {
+            $this->rc->output->show_message('acl.deleteerror', 'error');
+        }
+    }
+
+    /**
+     * Handler for ACL list update action (with display mode change)
+     */
+    private function action_list()
+    {
+        if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) {
+            return;
+        }
+
+        $this->mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GPC, true)); // UTF7-IMAP
+        $advanced   = trim(rcube_utils::get_input_value('_mode', rcube_utils::INPUT_GPC));
+        $advanced   = $advanced == 'advanced';
+
+        // Save state in user preferences
+        $this->rc->user->save_prefs(array('acl_advanced_mode' => $advanced));
+
+        $out = $this->list_rights();
+
+        $out = preg_replace(array('/^<table[^>]+>/', '/<\/table>$/'), '', $out);
+
+        $this->rc->output->command('acl_list_update', $out);
+    }
+
+    /**
+     * Creates <UL> list with descriptive access rights
+     *
+     * @param array $rights MYRIGHTS result
+     *
+     * @return string HTML content
+     */
+    function acl2text($rights)
+    {
+        if (empty($rights)) {
+            return '';
+        }
+
+        $supported = $this->rights_supported();
+        $list      = array();
+        $attrib    = array(
+            'name' => 'rcmyrights',
+            'style' => 'margin:0; padding:0 15px;',
+        );
+
+        foreach ($supported as $right) {
+            if (in_array($right, $rights)) {
+                $list[] = html::tag('li', null, rcube::Q($this->gettext('acl' . $right)));
+            }
+        }
+
+        if (count($list) == count($supported))
+            return rcube::Q($this->gettext('aclfull'));
+
+        return html::tag('ul', $attrib, implode("\n", $list));
+    }
+
+    /**
+     * Compares two ACLs (according to supported rights)
+     *
+     * @param array $acl1 ACL rights array (or string)
+     * @param array $acl2 ACL rights array (or string)
+     *
+     * @param int Comparison result, 2 - full match, 1 - partial match, 0 - no match
+     */
+    function acl_compare($acl1, $acl2)
+    {
+        if (!is_array($acl1)) $acl1 = str_split($acl1);
+        if (!is_array($acl2)) $acl2 = str_split($acl2);
+
+        $rights = $this->rights_supported();
+
+        $acl1 = array_intersect($acl1, $rights);
+        $acl2 = array_intersect($acl2, $rights);
+        $res  = array_intersect($acl1, $acl2);
+
+        $cnt1 = count($res);
+        $cnt2 = count($acl2);
+
+        if ($cnt1 == $cnt2)
+            return 2;
+        else if ($cnt1)
+            return 1;
+        else
+            return 0;
+    }
+
+    /**
+     * Get list of supported access rights (according to RIGHTS capability)
+     *
+     * @return array List of supported access rights abbreviations
+     */
+    function rights_supported()
+    {
+        if ($this->supported !== null) {
+            return $this->supported;
+        }
+
+        $capa = $this->rc->storage->get_capability('RIGHTS');
+
+        if (is_array($capa)) {
+            $rights = strtolower($capa[0]);
+        }
+        else {
+            $rights = 'cd';
+        }
+
+        return $this->supported = str_split('lrswi' . $rights . 'pa');
+    }
+
+    /**
+     * Username realm detection.
+     *
+     * @return string Username realm (domain)
+     */
+    private function get_realm()
+    {
+        // When user enters a username without domain part, realm
+        // allows to add it to the username (and display correct username in the table)
+
+        if (isset($_SESSION['acl_username_realm'])) {
+            return $_SESSION['acl_username_realm'];
+        }
+
+        // find realm in username of logged user (?)
+        list($name, $domain) = explode('@', $_SESSION['username']);
+
+        // Use (always existent) ACL entry on the INBOX for the user to determine
+        // whether or not the user ID in ACL entries need to be qualified and how
+        // they would need to be qualified.
+        if (empty($domain)) {
+            $acl = $this->rc->storage->get_acl('INBOX');
+            if (is_array($acl)) {
+                $regexp = '/^' . preg_quote($_SESSION['username'], '/') . '@(.*)$/';
+                foreach (array_keys($acl) as $name) {
+                    if (preg_match($regexp, $name, $matches)) {
+                        $domain = $matches[1];
+                        break;
+                    }
+                }
+            }
+        }
+
+        return $_SESSION['acl_username_realm'] = $domain;
+    }
+
+    /**
+     * Initializes autocomplete LDAP backend
+     */
+    private function init_ldap()
+    {
+        if ($this->ldap) {
+            return $this->ldap->ready;
+        }
+
+        // get LDAP config
+        $config = $this->rc->config->get('acl_users_source');
+
+        if (empty($config)) {
+            return false;
+        }
+
+        // not an array, use configured ldap_public source
+        if (!is_array($config)) {
+            $ldap_config = (array) $this->rc->config->get('ldap_public');
+            $config      = $ldap_config[$config];
+        }
+
+        $uid_field = $this->rc->config->get('acl_users_field', 'mail');
+        $filter    = $this->rc->config->get('acl_users_filter');
+
+        if (empty($uid_field) || empty($config)) {
+            return false;
+        }
+
+        // get name attribute
+        if (!empty($config['fieldmap'])) {
+            $name_field = $config['fieldmap']['name'];
+        }
+        // ... no fieldmap, use the old method
+        if (empty($name_field)) {
+            $name_field = $config['name_field'];
+        }
+
+        // add UID field to fieldmap, so it will be returned in a record with name
+        $config['fieldmap']['name'] = $name_field;
+        $config['fieldmap']['uid']  = $uid_field;
+
+        // search in UID and name fields
+        // $name_field can be in a form of <field>:<modifier> (#1490591)
+        $name_field = preg_replace('/:.*$/', '', $name_field);
+        $search     = array_unique(array($name_field, $uid_field));
+
+        $config['search_fields']   = $search;
+        $config['required_fields'] = array($uid_field);
+
+        // set search filter
+        if ($filter) {
+            $config['filter'] = $filter;
+        }
+
+        // disable vlv
+        $config['vlv'] = false;
+
+        // Initialize LDAP connection
+        $this->ldap = new rcube_ldap($config,
+            $this->rc->config->get('ldap_debug'),
+            $this->rc->config->mail_domain($_SESSION['imap_host']));
+
+        return $this->ldap->ready;
+    }
+
+    /**
+     * Modify user login according to 'login_lc' setting
+     */
+    protected function mod_login($user)
+    {
+        $login_lc = $this->rc->config->get('login_lc');
+
+        if ($login_lc === true || $login_lc == 2) {
+            $user = mb_strtolower($user);
+        }
+        // lowercase domain name
+        else if ($login_lc && strpos($user, '@')) {
+            list($local, $domain) = explode('@', $user);
+            $user = $local . '@' . mb_strtolower($domain);
+        }
+
+        return $user;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/acl",
+    "type": "roundcube-plugin",
+    "description": "IMAP Folders Access Control Lists Management (RFC4314, RFC2086).",
+    "license": "GPLv3+",
+    "version": "1.6",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+// Default look of access rights table
+// In advanced mode all access rights are displayed separately
+// In simple mode access rights are grouped into four groups: read, write, delete, full 
+$config['acl_advanced_mode'] = false;
+
+// LDAP addressbook that would be searched for user names autocomplete.
+// That should be an array refering to the $config['ldap_public'] array key
+// or complete addressbook configuration array.
+$config['acl_users_source'] = '';
+
+// The LDAP attribute which will be used as ACL user identifier
+$config['acl_users_field'] = 'mail';
+
+// The LDAP search filter will be &'d with search queries
+$config['acl_users_filter'] = '';
+
+// Enable LDAP groups in user autocompletion.
+// Note: LDAP addressbook defined in acl_users_source must include groups config
+$config['acl_groups'] = false;
+
+// Prefix added to the group name to build IMAP ACL identifier
+$config['acl_group_prefix'] = 'group:';
+
+// The LDAP attribute (or field name) which will be used as ACL group identifier
+$config['acl_group_field'] = 'name';
+
+// Include the following 'special' access control subjects in the ACL dialog;
+// Defaults to array('anyone', 'anonymous') (not when set to an empty array)
+// Example: array('anyone') to exclude 'anonymous'.
+// Set to an empty array to exclude all special aci subjects.
+$config['acl_specials'] = array('anyone', 'anonymous');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'مشاركة';
+$labels['myrights'] = 'حقوق الوصول';
+$labels['username'] = 'مستخدم:';
+$labels['advanced'] = 'وضع متقدم';
+$labels['newuser'] = 'اضاÙØ© مدخل';
+$labels['editperms'] = 'تعديل الصلاحيات';
+$labels['actions'] = 'اجراءات حقوق الوصول...';
+$labels['anyone'] = 'كل المستخدمين(اي شخص)';
+$labels['anonymous'] = 'ضي٠(مجهول)';
+$labels['identifier'] = 'معرÙ';
+$labels['acll'] = 'بحث';
+$labels['aclr'] = 'قراءة الرسائل';
+$labels['acls'] = 'ابقاء حالة الزيارة';
+$labels['aclw'] = 'اكتب رمز';
+$labels['acli'] = 'ادخل (نسخ الى)';
+$labels['aclp'] = 'نشر';
+$labels['aclc'] = 'إنشاء مجلدات Ùرعية';
+$labels['aclk'] = 'إنشاء مجلدات Ùرعية';
+$labels['acld'] = 'حذ٠الرسائل';
+$labels['aclt'] = 'حذ٠الرسائل';
+$labels['acle'] = 'Ø­ÙØ°Ù';
+$labels['aclx'] = 'حذ٠المجلد';
+$labels['acla'] = 'ادارة';
+$labels['aclfull'] = 'تحكم كامل';
+$labels['aclother'] = 'اخرى';
+$labels['aclread'] = 'قراءة ';
+$labels['aclwrite'] = 'كتابة';
+$labels['acldelete'] = 'حذÙ';
+$labels['shortacll'] = 'بحث';
+$labels['shortaclr'] = 'قراءة ';
+$labels['shortacls'] = 'ابقاء';
+$labels['shortaclw'] = 'قراءة';
+$labels['shortacli'] = 'ادراج';
+$labels['shortaclp'] = 'نشر';
+$labels['shortaclc'] = 'أنشئ';
+$labels['shortaclk'] = 'أنشئ';
+$labels['shortacld'] = 'حذÙ';
+$labels['shortaclt'] = 'حذÙ';
+$labels['shortacle'] = 'Ø­ÙØ°Ù';
+$labels['shortaclx'] = 'حذ٠المجلد';
+$labels['shortacla'] = 'ادارة';
+$labels['shortaclother'] = 'اخرى';
+$labels['shortaclread'] = 'قراءة ';
+$labels['shortaclwrite'] = 'كتابة';
+$labels['shortacldelete'] = 'حذÙ';
+$labels['longacll'] = 'المجلد مرئي ÙÙŠ القائمة وبالامكان ايضا الاشتراك';
+$labels['longaclr'] = 'من الممكن Ùتح المجلد للقراءة';
+$labels['longacls'] = 'وسم الزيارة ÙÙŠ الرسائل بالامكان تغييره';
+$labels['longaclw'] = 'وسم والكلمات الرئيسية ÙÙŠ الرسائل يمكن تغييره, ماعدا الزيارة والحذ٠';
+$labels['longacli'] = 'بالامكان كتابة الرسائل ونسخها الى هذا المجلد';
+$labels['longaclp'] = 'بالامكان نشر الرسائل الى هذ المجلد';
+$labels['longaclc'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
+$labels['longaclk'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
+$labels['longacld'] = 'حذ٠وسم الرسائل من الممكن تغييرة';
+$labels['longaclt'] = 'حذ٠وسم الرسائل من الممكن تغييرة';
+$labels['longacle'] = 'بالامكان شطب الرسائل';
+$labels['longaclx'] = 'هذا المجلد بالامكان حذÙØ© او اعادة تسميته';
+$labels['longacla'] = 'حقوق الوصول لهذا المجلد بالامكان تغييره';
+$labels['longaclfull'] = 'التحكم الكامل يتضمن ادارة المجلدات';
+$labels['longaclread'] = 'من الممكن Ùتح المجلد للقراءة';
+$labels['longaclwrite'] = 'لا يمكن وضع علامة على الرسائل, كتبت او نسخة الى هذا المجلد';
+$labels['longacldelete'] = 'لا يمكن حذ٠الرسائل';
+$messages['deleting'] = 'جاري حذ٠حقوق الوصول...';
+$messages['saving'] = 'جاري Ø­Ùظ حقوق الوصول...';
+$messages['updatesuccess'] = 'تم تغيير حقوق الوصول بنجاح';
+$messages['deletesuccess'] = 'تم حذ٠حقوق الوصول بنجاح';
+$messages['createsuccess'] = 'تم اضاÙØ© حقوق الوصول بنجاح';
+$messages['updateerror'] = 'لا يمكن تحديث حقوق الوصول';
+$messages['deleteerror'] = 'لا يمكن حذ٠حقوق الوصول';
+$messages['createerror'] = 'لا يمكن اضاÙØ© حقوق الوصول';
+$messages['deleteconfirm'] = 'هل تريد Ùعلاً حذ٠حقوق الوصول لـ المستخدمين المحددين ØŸ';
+$messages['norights'] = 'لم يتم تحديد حقوق وصول!';
+$messages['nouser'] = 'لم يتم تحديد اسم مستخدم!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartición';
+$labels['myrights'] = 'Drechos d\'accesu';
+$labels['username'] = 'Usuariu:';
+$labels['advanced'] = 'Mou avanzáu';
+$labels['newuser'] = 'Amestar entrada';
+$labels['editperms'] = 'Editar permisos';
+$labels['actions'] = 'Aición de drechos d\'accesu...';
+$labels['anyone'] = 'Tolos usuarios (toos)';
+$labels['anonymous'] = 'Convidaos (anónimos)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Guetar';
+$labels['aclr'] = 'Lleer mensaxes';
+$labels['acls'] = 'Estáu Caltener Vistu';
+$labels['aclw'] = 'Escribir banderes';
+$labels['acli'] = 'Inxertar (copiar a)';
+$labels['aclc'] = 'Crear subcarpetes';
+$labels['aclk'] = 'Crear subcarpetes';
+$labels['acld'] = 'Desaniciar mensaxes';
+$labels['aclt'] = 'Desaniciar mensaxes';
+$labels['acle'] = 'Desanciar';
+$labels['aclx'] = 'Desaniciar carpeta';
+$labels['acla'] = 'Alministrar';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Otru';
+$labels['aclread'] = 'Lleer';
+$labels['aclwrite'] = 'Escribir';
+$labels['acldelete'] = 'Desaniciar';
+$labels['shortacll'] = 'Guetar';
+$labels['shortaclr'] = 'Lleer';
+$labels['shortacls'] = 'Caltener';
+$labels['shortaclw'] = 'Escribir';
+$labels['shortacli'] = 'Inxertar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Desaniciar';
+$labels['shortaclt'] = 'Desaniciar';
+$labels['shortacle'] = 'Desaniciar';
+$labels['shortaclx'] = 'Desaniciu de carpeta';
+$labels['shortacla'] = 'Alministrar';
+$labels['shortaclother'] = 'Otru';
+$labels['shortaclread'] = 'Lleer';
+$labels['shortaclwrite'] = 'Escribir';
+$labels['shortacldelete'] = 'Desaniciar';
+$labels['longacll'] = 'La carpeta ye visible nes llistes y pue soscribise a';
+$labels['longaclr'] = 'La carpeta nun pue abrise pa leer';
+$labels['longaclx'] = 'La carpeta pue desaniciase o renomase';
+$labels['longacla'] = 'Puen camudase los drechos d\'accesu de la carpeta';
+$labels['longaclfull'] = 'Control completu incluyendo l\'alminitración de carpeta';
+$labels['longaclread'] = 'La carpeta pue abrise pa llectura';
+$labels['longaclwrite'] = 'Los mensaxes puen conseñase, escribise o copiase a la carpeta';
+$labels['longacldelete'] = 'Los mensaxes puen desaniciase';
+$labels['longaclother'] = 'Otros drechos d\'accesu';
+$labels['ariasummaryacltable'] = 'Llista de drechos d\'accesu';
+$messages['deleting'] = 'Desaniciando los drechos d\'accesu...';
+$messages['saving'] = 'Guardando los drechos d\'accesu...';
+$messages['updatesuccess'] = 'Camudaos con ésitu los drechos d\'accesu';
+$messages['deletesuccess'] = 'Desaniciaos con ésitu los drechos d\'accesu';
+$messages['createsuccess'] = 'Amestaos con ésitu los drechos d\'accesu';
+$messages['updateerror'] = 'Nun puen anovase los drechos d\'accesu';
+$messages['deleteerror'] = 'Nun puen desaniciase los drechos d\'accesu';
+$messages['createerror'] = 'Nun puen amestase los drechos d\'accesu';
+$messages['deleteconfirm'] = '¿De xuru quies desaniciar los drechos d\'accesu al(a los) usuariu(os) esbilláu(os)?';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'PaylaÅŸma';
+$labels['myrights'] = 'Giriş hüququ';
+$labels['username'] = 'İstifadəçi:';
+$labels['advanced'] = 'Ekspert rejimi';
+$labels['newuser'] = 'Sahə əlavə et';
+$labels['editperms'] = 'Cavabları redaktə et';
+$labels['actions'] = 'Giriş hüququ ilə hərəkət...';
+$labels['anyone'] = 'Bütün istifadəçilər (istənilən)';
+$labels['anonymous'] = 'Qonaqlar (anonimlər)';
+$labels['identifier'] = 'Ä°dentifikator';
+$labels['acll'] = 'Baxış';
+$labels['aclr'] = 'Məktubu oxu';
+$labels['acls'] = 'Oxunulan kimi saxla';
+$labels['aclw'] = 'Yazı bayrağı';
+$labels['acli'] = 'ÆlavÉ™ et (kopyala)';
+$labels['aclp'] = 'Yazı';
+$labels['aclc'] = 'Qovluqaltı yarat';
+$labels['aclk'] = 'Qovluqaltı yarat';
+$labels['acld'] = 'Məktubu sil';
+$labels['aclt'] = 'Məktubu sil';
+$labels['acle'] = 'Poz';
+$labels['aclx'] = 'QovluÄŸu sil';
+$labels['acla'] = 'Ä°darÉ™';
+$labels['acln'] = 'Mesajl şərh et';
+$labels['aclfull'] = 'Tam idarÉ™';
+$labels['aclother'] = 'Digər';
+$labels['aclread'] = 'Oxu';
+$labels['aclwrite'] = 'Yaz';
+$labels['acldelete'] = 'Sil';
+$labels['shortacll'] = 'Baxış';
+$labels['shortaclr'] = 'Oxu';
+$labels['shortacls'] = 'Saxla';
+$labels['shortaclw'] = 'Yaz';
+$labels['shortacli'] = 'Yerləşdir';
+$labels['shortaclp'] = 'Yazı';
+$labels['shortaclc'] = 'Yarat';
+$labels['shortaclk'] = 'Yarat';
+$labels['shortacld'] = 'Sil';
+$labels['shortaclt'] = 'Sil';
+$labels['shortacle'] = 'Poz';
+$labels['shortaclx'] = 'Qovluğun silinməsi';
+$labels['shortacla'] = 'Ä°darÉ™';
+$labels['shortacln'] = 'Şərh';
+$labels['shortaclother'] = 'Digər';
+$labels['shortaclread'] = 'Oxu';
+$labels['shortaclwrite'] = 'Yaz';
+$labels['shortacldelete'] = 'Sil';
+$labels['longacll'] = 'Qovluq siyahıda görünür və yazılmağa hazırdır';
+$labels['longaclr'] = 'Bu qovluq oxunmaq üçün açıla bilər';
+$labels['longacls'] = 'Oxunulan flaqı dəyişdirilə bilər';
+$labels['longaclw'] = 'Oxunulan və silinənlərdən başqa flaqlar və açar sözləri dəyişdirilə bilər';
+$labels['longacli'] = 'Məktub qovluğa yazıla və ya saxlanıla bilər';
+$labels['longaclp'] = 'Məktub bu qovluğa göndərilə bilər';
+$labels['longaclc'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
+$labels['longaclk'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
+$labels['longacld'] = 'Silinən flaqı dəyişdirilə bilər';
+$labels['longaclt'] = 'Silinən flaqı dəyişdirilə bilər';
+$labels['longacle'] = 'Məktublar pozula bilər';
+$labels['longaclx'] = 'Bu qovluq silinə və ya adı dəyişdirilə bilər';
+$labels['longacla'] = 'Bu qovluğa giriş hüququ dəyişdirilə bilər';
+$labels['longacln'] = 'Müştərək metaməlumatlar (şərhlər) dəyişdirilə bilər';
+$labels['longaclfull'] = 'Qovluğun idarəsi ilə birlikdə, tam giriş.';
+$labels['longaclread'] = 'Bu qovluq oxunmaq üçün açıla bilər';
+$labels['longaclwrite'] = 'Məktubu bu qovluğa qeyd etmək, yazmaq və kopyalamaq olar';
+$labels['longacldelete'] = 'Məktubu silmək olar';
+$labels['longaclother'] = 'Digər giriş hüquqları';
+$labels['ariasummaryacltable'] = 'Giriş hüquqlarının siyahısı';
+$labels['arialabelaclactions'] = 'Hərəkət siyahısı';
+$labels['arialabelaclform'] = 'Giriş hüquqlarının forması';
+$messages['deleting'] = 'Giriş hüququnun silinməsi...';
+$messages['saving'] = 'Giriş hüququnun saxlanılması...';
+$messages['updatesuccess'] = 'Giriş hüququ dəyişdirildi';
+$messages['deletesuccess'] = 'Giriş hüququ silindi';
+$messages['createsuccess'] = 'Giriş hüququ əlavə edildi';
+$messages['updateerror'] = 'Hüquqları yeniləmək alınmadı';
+$messages['deleteerror'] = 'Giriş hüququnu silmək mümkün deyil';
+$messages['createerror'] = 'Giriş hüququnu əlavə etmək mümkün deyil';
+$messages['deleteconfirm'] = 'Seçilmiş istifadəçilərin giriş hüququnu silməkdə əminsiniz?';
+$messages['norights'] = 'Giriş hüquqları göstərilməyib!';
+$messages['nouser'] = 'İstifadəçi adı təyin olunmayıb!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'СумеÑны доÑтуп';
+$labels['myrights'] = 'Правы доÑтупу';
+$labels['username'] = 'КарыÑтальнік:';
+$labels['advanced'] = 'Пашыраны Ñ€Ñжым';
+$labels['newuser'] = 'Дадаць запіÑ';
+$labels['editperms'] = 'РÑдагаваць правы доÑтупу';
+$labels['actions'] = 'ДзеÑнні з правамі доÑтупу...';
+$labels['anyone'] = 'УÑе карыÑтальнікі (любыÑ)';
+$labels['anonymous'] = 'ГоÑці (ананімныÑ)';
+$labels['identifier'] = 'ІдÑнтыфікатар';
+$labels['acll'] = 'Пошук';
+$labels['aclr'] = 'Прачытаць паведамленні';
+$labels['acls'] = 'Пакінуць Ñтан Бачанае';
+$labels['aclw'] = 'Флагі запіÑваннÑ';
+$labels['acli'] = 'УÑтавіць (капіраваць у)';
+$labels['aclp'] = 'Ðдправіць';
+$labels['aclc'] = 'Стварыць ÑƒÐºÐ»Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð¿ÐºÑ–';
+$labels['aclk'] = 'Стварыць ÑƒÐºÐ»Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð¿ÐºÑ–';
+$labels['acld'] = 'Выдаліць паведамленні';
+$labels['aclt'] = 'Выдаліць паведамленні';
+$labels['acle'] = 'Знішчыць паведамленні';
+$labels['aclx'] = 'Выдаліць папку';
+$labels['acla'] = 'ÐдмініÑтраваць';
+$labels['acln'] = 'Ðнатаваць паведамленні';
+$labels['aclfull'] = 'Поўны доÑтуп';
+$labels['aclother'] = 'Іншае';
+$labels['aclread'] = 'Чытанне';
+$labels['aclwrite'] = 'ЗапіÑ';
+$labels['acldelete'] = 'Выдаленне';
+$labels['shortacll'] = 'Пошук';
+$labels['shortaclr'] = 'Чытанне';
+$labels['shortacls'] = 'Пакінуць';
+$labels['shortaclw'] = 'ЗапіÑванне';
+$labels['shortacli'] = 'Даданне';
+$labels['shortaclp'] = 'Ðдпраўленне';
+$labels['shortaclc'] = 'СтварÑнне';
+$labels['shortaclk'] = 'СтварÑнне';
+$labels['shortacld'] = 'Выдаленне';
+$labels['shortaclt'] = 'Выдаленне';
+$labels['shortacle'] = 'ЗнішчÑнне';
+$labels['shortaclx'] = 'Выдаленне папкі';
+$labels['shortacla'] = 'ÐдмініÑтраванне';
+$labels['shortacln'] = 'Ðнатаваць';
+$labels['shortaclother'] = 'Іншае';
+$labels['shortaclread'] = 'Чытанне';
+$labels['shortaclwrite'] = 'ЗапіÑ';
+$labels['shortacldelete'] = 'Выдаленне';
+$labels['longacll'] = 'Папку можна пабачыць у ÑпіÑах Ñ– падпіÑацца на Ñе';
+$labels['longaclr'] = 'Папку можна адкрыць Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ';
+$labels['longacls'] = 'Ðа паведамленнÑÑ… можна пераключаць флаг Бачанае';
+$labels['longaclw'] = 'Ðа паведамленнÑÑ… можна мÑнÑць ÐºÐ»ÑŽÑ‡Ð°Ð²Ñ‹Ñ Ñловы Ñ– пераключаць флагі, апроч Бачанае Ñ– Выдаленае';
+$labels['longacli'] = 'Паведамленні могуць быць запіÑÐ°Ð½Ñ‹Ñ Ð°Ð»ÑŒÐ±Ð¾ ÑкапіÑÐ²Ð°Ð½Ñ‹Ñ Ñž папку';
+$labels['longaclp'] = 'Паведамленні могуць быць Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½Ñ‹Ñ Ñž гÑтую папку';
+$labels['longaclc'] = 'Папкі могуць быць Ñтвораны (альбо перайменаваны) наўпроÑÑ‚ пад гÑтай папкай';
+$labels['longaclk'] = 'Папкі могуць быць Ñтвораны (альбо перайменаваны) наўпроÑÑ‚ пад гÑтай папкай';
+$labels['longacld'] = 'Ðа паведамленнÑÑ… можна пераключаць флаг Выдаленае';
+$labels['longaclt'] = 'Ðа паведамленнÑÑ… можна пераключаць флаг Выдаленае';
+$labels['longacle'] = 'Паведамленні могуць быць знішчаны';
+$labels['longaclx'] = 'Папку можна выдаліць альбо перайменаваць';
+$labels['longacla'] = 'Правы доÑтупу на папку можна змÑнÑць';
+$labels['longacln'] = 'Ðнатацыі паведамленнÑÑž (ÑÑƒÐ¿Ð¾Ð»ÑŒÐ½Ñ‹Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ñ‹Ñ) можна змÑнÑць';
+$labels['longaclfull'] = 'Поўны доÑтуп, уключна з адмінÑтраваннем папкі';
+$labels['longaclread'] = 'Папку можна адкрыць Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ';
+$labels['longaclwrite'] = 'Паведамленні могуць быць пазначаныÑ, запіÑÐ°Ð½Ñ‹Ñ Ð°Ð»ÑŒÐ±Ð¾ ÑкапіÑÐ²Ð°Ð½Ñ‹Ñ Ñž папку';
+$labels['longacldelete'] = 'Паведамленні можна выдаліць';
+$labels['longaclother'] = 'Ð†Ð½ÑˆÑ‹Ñ Ð¿Ñ€Ð°Ð²Ñ‹ доÑтупу';
+$labels['ariasummaryacltable'] = 'Ð¡Ð¿Ñ–Ñ Ð¿Ñ€Ð°Ð²Ð¾Ñž доÑтупу';
+$labels['arialabelaclactions'] = 'Ð¡Ð¿Ñ–Ñ Ð´Ð·ÐµÑннÑÑž';
+$labels['arialabelaclform'] = 'Форма правоў доÑтупу';
+$messages['deleting'] = 'Правы доÑтупу выдалÑюцца...';
+$messages['saving'] = 'Правы доÑтупу захоўваюцца...';
+$messages['updatesuccess'] = 'Правы доÑтупу зменены';
+$messages['deletesuccess'] = 'Правы доÑтупу выдалены';
+$messages['createsuccess'] = 'Правы доÑтупу дададзены';
+$messages['updateerror'] = 'Ðе ўдалоÑÑ Ð°Ð±Ð½Ð°Ð²Ñ–Ñ†ÑŒ правы доÑтупу';
+$messages['deleteerror'] = 'Ðе ўдалоÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ правы доÑтупу';
+$messages['createerror'] = 'Ðе ўдалоÑÑ Ð´Ð°Ð´Ð°Ñ†ÑŒ правы доÑтупу';
+$messages['deleteconfirm'] = 'Ðапраўду выдаліць правы доÑтупу Ð´Ð»Ñ Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ð°Ð³Ð° карыÑтальніка(Ñž)?';
+$messages['norights'] = 'Жадных правоў не зададзена!';
+$messages['nouser'] = 'Жадных імёнаў карыÑтальнікаў не зададзена!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'СподелÑне';
+$labels['myrights'] = 'Права за доÑтъп';
+$labels['username'] = 'Потребител:';
+$labels['advanced'] = 'Разширен режим';
+$labels['newuser'] = 'ДобавÑне на запиÑ';
+$labels['editperms'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° права';
+$labels['actions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð° права за доÑтъп...';
+$labels['anyone'] = 'Ð’Ñички потребители (който и да е)';
+$labels['anonymous'] = 'ГоÑти (анонимни)';
+$labels['identifier'] = 'Индентификатор';
+$labels['acll'] = 'ПретърÑване';
+$labels['aclr'] = 'Четене на пиÑма';
+$labels['acls'] = 'Запазване на ВидÑно';
+$labels['aclw'] = 'ЗапиÑване на флагове';
+$labels['acli'] = 'Вмъкване (Копиране в)';
+$labels['aclp'] = 'Изпращане';
+$labels['aclc'] = 'Създаване на подпапки';
+$labels['aclk'] = 'Създаване на подпапки';
+$labels['acld'] = 'Изтриване на пиÑма';
+$labels['aclt'] = 'Изтриване на пиÑмо';
+$labels['acle'] = 'Заличаване';
+$labels['aclx'] = 'Изтриване на папка';
+$labels['acla'] = 'ÐдминиÑтриране';
+$labels['acln'] = 'Ðнотиране на пиÑма';
+$labels['aclfull'] = 'Пълен контрол';
+$labels['aclother'] = 'Други';
+$labels['aclread'] = 'Четене';
+$labels['aclwrite'] = 'ПиÑане';
+$labels['acldelete'] = 'Изтриване';
+$labels['shortacll'] = 'ТърÑене';
+$labels['shortaclr'] = 'Четене';
+$labels['shortacls'] = 'Запазване';
+$labels['shortaclw'] = 'ПиÑане';
+$labels['shortacli'] = 'Вмъкване';
+$labels['shortaclp'] = 'Изпращане';
+$labels['shortaclc'] = 'Създаване';
+$labels['shortaclk'] = 'Създаване';
+$labels['shortacld'] = 'Изтриване';
+$labels['shortaclt'] = 'Изтриване';
+$labels['shortacle'] = 'Заличаване';
+$labels['shortaclx'] = 'Изтриване на папка';
+$labels['shortacla'] = 'ÐдминиÑтриране';
+$labels['shortacln'] = 'Ðнотирай';
+$labels['shortaclother'] = 'Други';
+$labels['shortaclread'] = 'Четене';
+$labels['shortaclwrite'] = 'ПиÑане';
+$labels['shortacldelete'] = 'Изтриване';
+$labels['longacll'] = 'Папката е видима в ÑпиÑъците и може да Ñе абонирате';
+$labels['longaclr'] = 'Папката може да бъде отворена за четене';
+$labels['longacls'] = 'Флаг ВидÑно може да бъде променен.';
+$labels['longaclw'] = 'Флаговете и кл. думи за пиÑмата могат да бъдат променÑни, без ВидÑно и Изтрито.';
+$labels['longacli'] = 'ПиÑмата могат да бъдат пиÑани или копирани към папката.';
+$labels['longaclp'] = 'ПиÑмата могат да бъдат пиÑани в папката';
+$labels['longaclc'] = 'Папките могат да бъдат Ñъздавани (или преименувани) директно в тази папка';
+$labels['longaclk'] = 'Папките могат да бъдат Ñъздавани (или преименувани) в тази оÑновна папка';
+$labels['longacld'] = 'Флагът Изтрито може да бъде променÑн';
+$labels['longaclt'] = 'Флагът Изтрито може да бъде променÑн';
+$labels['longacle'] = 'ПиÑмата могат да бъдат заличавани';
+$labels['longaclx'] = 'Папката може да бъде изтривана или преименувана';
+$labels['longacla'] = 'Правата за доÑтъп до папката могат да бъдат променÑни';
+$labels['longacln'] = 'Могат да Ñе променÑÑ‚ Ñподелените метаданни (антоции) на пиÑмата';
+$labels['longaclfull'] = 'Пълен контрол, включително и админиÑтриране на папките';
+$labels['longaclread'] = 'Папката може да бъде отворена за четене';
+$labels['longaclwrite'] = 'ПиÑмата могат да бъдат маркирани, запиÑвани или копирани в папката';
+$labels['longacldelete'] = 'ПиÑмата могат да бъдат изтривани';
+$labels['longaclother'] = 'Други права за доÑтъп';
+$labels['ariasummaryacltable'] = 'СпиÑък Ñ Ð¿Ñ€Ð°Ð²Ð° за доÑтъп';
+$labels['arialabelaclactions'] = 'СпиÑък Ñ Ð´ÐµÐ¹ÑтвиÑ';
+$labels['arialabelaclform'] = 'Форма Ñ Ð¿Ñ€Ð°Ð²Ð° за доÑтъп';
+$messages['deleting'] = 'Изтриване на права за доÑтъп...';
+$messages['saving'] = 'Запазване на права за доÑтъп...';
+$messages['updatesuccess'] = 'Правата за доÑтъп Ñа променени уÑпешно';
+$messages['deletesuccess'] = 'Правата за доÑтъп Ñа изтрити уÑпешно';
+$messages['createsuccess'] = 'Правата за доÑтъп Ñа добавени уÑпешно';
+$messages['updateerror'] = 'Ðевъзможно модифициране на правата за доÑтъп';
+$messages['deleteerror'] = 'Ðевъзможно изтриване на права за доÑтъп';
+$messages['createerror'] = 'Ðевъзможно добавÑне на права за доÑтъп';
+$messages['deleteconfirm'] = 'Сигурни ли Ñте, че желаете да премахнате правата за доÑтъп от избраните потребители?';
+$messages['norights'] = 'ÐÑма указани права!';
+$messages['nouser'] = 'ÐÑма указано потребителÑко име!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Rannañ';
+$labels['myrights'] = 'Aotreoù mont e-barzh';
+$labels['username'] = 'Implijer:';
+$labels['advanced'] = 'Mod kempleshoc\'h';
+$labels['newuser'] = 'Ouzhpennañ un elfenn';
+$labels['editperms'] = 'Embann an aotreoù';
+$labels['actions'] = 'Aotreoù mont e-barzh';
+$labels['anyone'] = 'An holl implijerien (neb hini)';
+$labels['anonymous'] = 'Kouvidi (dizanv)';
+$labels['identifier'] = 'Naoudi';
+$labels['acll'] = 'Taol sell';
+$labels['aclr'] = 'Kemennadennoù lennet';
+$labels['acls'] = 'Derc\'hel ar stad "Gwelet"';
+$labels['aclw'] = 'Bannieloù skrivañ';
+$labels['acli'] = 'Enlakaat (Eilañ an digoradur)';
+$labels['aclp'] = 'Postañ';
+$labels['aclc'] = 'Krouiñ isteuliadoù';
+$labels['aclk'] = 'Krouiñ isteuliadoù';
+$labels['acld'] = 'Dilemel kemennadennoù';
+$labels['aclt'] = 'Dilemel kemennadennoù';
+$labels['acle'] = 'Skarzhañ';
+$labels['aclx'] = 'Dilemel an teuliad';
+$labels['acla'] = 'Ardeiñ';
+$labels['acln'] = 'Notennaouiñ kemennadennoù';
+$labels['aclfull'] = 'Reoliadur a-bezh';
+$labels['aclother'] = 'All';
+$labels['aclread'] = 'Lenn';
+$labels['aclwrite'] = 'Skrivañ';
+$labels['acldelete'] = 'Dilemel';
+$labels['shortacll'] = 'Teurel ur sell';
+$labels['shortaclr'] = 'Lenn';
+$labels['shortacls'] = 'Derc\'hel';
+$labels['shortaclw'] = 'Skrivañ';
+$labels['shortacli'] = 'Enlakaat';
+$labels['shortaclp'] = 'Postañ';
+$labels['shortaclc'] = 'Krouiñ';
+$labels['shortaclk'] = 'Krouiñ';
+$labels['shortacld'] = 'Dilemel';
+$labels['shortaclt'] = 'Dilemel';
+$labels['shortacle'] = 'Skarzhañ';
+$labels['shortaclx'] = 'Dilemel an teuliad';
+$labels['shortacla'] = 'Ardeiñ';
+$labels['shortacln'] = 'Notennaouiñ';
+$labels['shortaclother'] = 'Traoù all';
+$labels['shortaclread'] = 'Lenn';
+$labels['shortaclwrite'] = 'Skrivañ';
+$labels['shortacldelete'] = 'Dilemel';
+$labels['longacll'] = 'Gwelus eo an teuliad-se er rolloù ha gallout a reer bezañ koumanantet dezhañ';
+$labels['longaclr'] = 'Gallout a reer digeriñ an teuliad-mañ evit e lenn';
+$labels['longacls'] = 'Gallout a reer kemmañ ar bannieloù "Kemennadenn gwelet"';
+$labels['longaclw'] = 'Gallout a reer kemmañ an bannieloù kemennadennoù hag ar gerioù-alc\'hwez, war-bouez "Gwelet" ha "Dilamet"';
+$labels['longacli'] = 'Gallout a ra ar c\'hemennadennoù bezañ skrivet be eilet en teuliad';
+$labels['longaclp'] = 'Gallout a reer postañ kemennadennoù d\'an teuliad-mañ';
+$labels['longaclc'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
+$labels['longaclk'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
+$labels['longacld'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
+$labels['longaclt'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
+$labels['longacle'] = 'Gallout a reer skarzhañ ar c\'hemennadennoù';
+$labels['longaclx'] = 'Gallout a ra bezañ dilamet pe adanvet an teuliad';
+$labels['longacla'] = 'Gallout a reer kemmañ aotreoù haeziñ an teuliad';
+$labels['longacln'] = 'Metaroadennoù rannet (notennoù) ar c\'hemennadennoù a c\'hell bezañ kemmet';
+$labels['longaclfull'] = 'Reoliadur a-bezh, ardeiñ an teuliad en o zouez';
+$labels['longaclread'] = 'Gallout a reer digeriñ an teuliad evit e lenn';
+$labels['longaclwrite'] = 'Gallout a reer merkañ, skrivañ pe eilañ kemennadennoù d\'an teuliad';
+$labels['longacldelete'] = 'Gallout a reer dilemel ar c\'hemennadennoù';
+$labels['longaclother'] = 'Aotreoù haeziñ all';
+$labels['ariasummaryacltable'] = 'Roll an aotreoù haeziñ';
+$labels['arialabelaclactions'] = 'Roll ar gweredoù';
+$labels['arialabelaclform'] = 'Aotreoù haeziñ a-berzh';
+$messages['deleting'] = 'O tilemel an aotreoù haeziñ...';
+$messages['saving'] = 'Oc\'h enrollañ an aotreoù haeziñ...';
+$messages['updatesuccess'] = 'Kemmet an aotreoù haeziñ gant berzh';
+$messages['deletesuccess'] = 'Dilamet an aotreoù haeziñ gant berzh';
+$messages['createsuccess'] = 'Ouzhpennet an aotreoù haeziñ gant berzh';
+$messages['updateerror'] = 'N\'haller ket hizivaat an aotreoù haeziñ';
+$messages['deleteerror'] = 'N\'haller ket dilemel an aotreoù haeziñ';
+$messages['createerror'] = 'N\'haller ket ouzhpennañ aotreoù haeziñ';
+$messages['deleteconfirm'] = 'Sur oc\'h e fell deoc\'h dilemel aotreoù haeziñ an arveriaded diuzet?';
+$messages['norights'] = 'Aotre ebet erspizet!';
+$messages['nouser'] = 'Anv arveriad ebet erspizet!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Razmjena';
+$labels['myrights'] = 'Prava pristupa';
+$labels['username'] = 'Korisnik:';
+$labels['advanced'] = 'Napredni mod';
+$labels['newuser'] = 'Dodaj unos';
+$labels['editperms'] = 'Uredi dozvole';
+$labels['actions'] = 'Akcije za prava pristupa...';
+$labels['anyone'] = 'Svi korisnici (bilo ko)';
+$labels['anonymous'] = 'Gosti (anonimno)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Pronađi';
+$labels['aclr'] = 'ProÄitaj poruke';
+$labels['acls'] = 'Zadrži stanje pregleda';
+$labels['aclw'] = 'Oznake za pisanje';
+$labels['acli'] = 'Umetni (Kopiraj u)';
+$labels['aclp'] = 'Objavi';
+$labels['aclc'] = 'Napravi podfoldere';
+$labels['aclk'] = 'Napravi podfoldere';
+$labels['acld'] = 'Obriši poruke';
+$labels['aclt'] = 'Obriši poruke';
+$labels['acle'] = 'Izbriši';
+$labels['aclx'] = 'Obriši folder';
+$labels['acla'] = 'Administracija';
+$labels['acln'] = 'Obilježi poruke';
+$labels['aclfull'] = 'Puna kontrola';
+$labels['aclother'] = 'Ostalo';
+$labels['aclread'] = 'ProÄitano';
+$labels['aclwrite'] = 'Piši';
+$labels['acldelete'] = 'Obriši';
+$labels['shortacll'] = 'Pronađi';
+$labels['shortaclr'] = 'ProÄitano';
+$labels['shortacls'] = 'Zadrži';
+$labels['shortaclw'] = 'Piši';
+$labels['shortacli'] = 'Umetni';
+$labels['shortaclp'] = 'Objavi';
+$labels['shortaclc'] = 'Kreiraj';
+$labels['shortaclk'] = 'Kreiraj';
+$labels['shortacld'] = 'Obriši';
+$labels['shortaclt'] = 'Obriši';
+$labels['shortacle'] = 'Izbriši';
+$labels['shortaclx'] = 'Brisanje foldera';
+$labels['shortacla'] = 'Administracija';
+$labels['shortacln'] = 'Obilježli';
+$labels['shortaclother'] = 'Ostalo';
+$labels['shortaclread'] = 'ProÄitano';
+$labels['shortaclwrite'] = 'Piši';
+$labels['shortacldelete'] = 'Obriši';
+$labels['longacll'] = 'Ovaj folder je vidljiv u listama i moguće je izvršiti pretplatu na njega';
+$labels['longaclr'] = 'Folder je moguće otvoriti radi Äitanja';
+$labels['longacls'] = 'Oznaka Äitanja za poruke se može promijeniti';
+$labels['longaclw'] = 'Oznake za poruke i kljuÄne rijeÄi je moguće promijeniti, osim za pregledano i obrisano';
+$labels['longacli'] = 'Moguće je kopirati i zapisivati poruke u folder';
+$labels['longaclp'] = 'Moguće je objavljivati poruke u ovaj folder';
+$labels['longaclc'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
+$labels['longaclk'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
+$labels['longacld'] = 'Oznaka za obrisane poruke se može mijenjati';
+$labels['longaclt'] = 'Oznaka za obrisane poruke se može mijenjati';
+$labels['longacle'] = 'Poruke je moguće obrisati';
+$labels['longaclx'] = 'Folder je moguće obrisati ili preimenovati';
+$labels['longacla'] = 'Pristupna prava foldera je moguće promijeniti';
+$labels['longacln'] = 'Dijeljeni podaci (obilježavanja) poruka mogu se mijenjati';
+$labels['longaclfull'] = 'Puna kontrola ukljuÄujući i administraciju foldera';
+$labels['longaclread'] = 'Folder je moguće otvoriti radi Äitanja';
+$labels['longaclwrite'] = 'Moguće je oznaÄavati, zapisivati i kopirati poruke u folder';
+$labels['longacldelete'] = 'Moguće je obrisati poruke';
+$labels['longaclother'] = 'Ostala prava pristupa';
+$labels['ariasummaryacltable'] = 'Lista prava pristupa';
+$labels['arialabelaclactions'] = 'Lista akcija';
+$labels['arialabelaclform'] = 'Obrazac za prava pristupa';
+$messages['deleting'] = 'Brišem prava pristupa...';
+$messages['saving'] = 'Snimam prava pristupa...';
+$messages['updatesuccess'] = 'Prava pristupa su uspješno promijenjena';
+$messages['deletesuccess'] = 'Prava pristupa su uspješno obrisana';
+$messages['createsuccess'] = 'Prava pristupa su uspješno dodana';
+$messages['updateerror'] = 'Nije moguće ažurirati prava pristupa';
+$messages['deleteerror'] = 'Nije moguće obrisati prava pristupa';
+$messages['createerror'] = 'Nije moguće dodati prava pristupa';
+$messages['deleteconfirm'] = 'Jeste li sigurni da želite ukloniti prava pristupa za odabrane korisnike?';
+$messages['norights'] = 'Niste odabrali prava pristupa!';
+$messages['nouser'] = 'Niste odabrali korisniÄko ime!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Comparteix';
+$labels['myrights'] = 'Permisos d\'accés';
+$labels['username'] = 'Usuari:';
+$labels['advanced'] = 'Mode Avançat';
+$labels['newuser'] = 'Afegeix una entrada';
+$labels['editperms'] = 'Editar Permisos';
+$labels['actions'] = 'Accions dels permisos d\'accés...';
+$labels['anyone'] = 'Tots els usuaris (qualsevol)';
+$labels['anonymous'] = 'Convidats (anònim)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Cerca';
+$labels['aclr'] = 'Llegeix missatges';
+$labels['acls'] = 'Conserva\'l com a llegit';
+$labels['aclw'] = 'Marques d\'escriptura';
+$labels['acli'] = 'Insereix (Copia dins)';
+$labels['aclp'] = 'Envia l\'entrada';
+$labels['aclc'] = 'Crea subcarpetes';
+$labels['aclk'] = 'Crea subcarpetes';
+$labels['acld'] = 'Suprimeix missatges';
+$labels['aclt'] = 'Suprimeix missatges';
+$labels['acle'] = 'Buida';
+$labels['aclx'] = 'Suprimeix carpeta';
+$labels['acla'] = 'Administra';
+$labels['acln'] = 'Anota missatges';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Un altre';
+$labels['aclread'] = 'Lectura';
+$labels['aclwrite'] = 'Escriptura';
+$labels['acldelete'] = 'Suprimeix';
+$labels['shortacll'] = 'Cerca';
+$labels['shortaclr'] = 'Lectura';
+$labels['shortacls'] = 'Conserva';
+$labels['shortaclw'] = 'Escriptura';
+$labels['shortacli'] = 'Insereix';
+$labels['shortaclp'] = 'Envia l\'entrada';
+$labels['shortaclc'] = 'Crea';
+$labels['shortaclk'] = 'Crea';
+$labels['shortacld'] = 'Suprimeix';
+$labels['shortaclt'] = 'Suprimeix';
+$labels['shortacle'] = 'Buida';
+$labels['shortaclx'] = 'Suprimeix carpeta';
+$labels['shortacla'] = 'Administra';
+$labels['shortacln'] = 'Anota';
+$labels['shortaclother'] = 'Un altre';
+$labels['shortaclread'] = 'Lectura';
+$labels['shortaclwrite'] = 'Escriptura';
+$labels['shortacldelete'] = 'Suprimeix';
+$labels['longacll'] = 'La carpeta és visible a les llistes i s\'hi pot subscriure';
+$labels['longaclr'] = 'La carpeta pot ser oberta per llegir';
+$labels['longacls'] = 'Els missatges marcats com a Llegit poden ser canviats';
+$labels['longaclw'] = 'Les marques i les paraules clau dels missatges poden ser canviats, excepte els Llegit i Suprimit';
+$labels['longacli'] = 'Els missatges poden ser escrits i copiats a la carpeta';
+$labels['longaclp'] = 'Els missatges poden ser enviats a aquesta carpeta';
+$labels['longaclc'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
+$labels['longaclk'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
+$labels['longacld'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
+$labels['longaclt'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
+$labels['longacle'] = 'Els missatges poden ser purgats';
+$labels['longaclx'] = 'La carpeta pot ser suprimida o reanomenada';
+$labels['longacla'] = 'Els permisos d\'accés a la carpeta poden ser canviats';
+$labels['longacln'] = 'Les metadades compartides dels missatges (anotacions) poden ser canviades';
+$labels['longaclfull'] = 'Control total fins i tot la gestió de carpetes';
+$labels['longaclread'] = 'La carpeta pot ser oberta per llegir';
+$labels['longaclwrite'] = 'Els missatges poden ser marcats, escrits o copiats a la carpeta';
+$labels['longacldelete'] = 'Els missatges poden ser suprimits';
+$labels['longaclother'] = 'Altres drets d\'accés';
+$labels['ariasummaryacltable'] = 'Llista els drets d\'accés';
+$labels['arialabelaclactions'] = 'Llista les accions';
+$labels['arialabelaclform'] = 'Formulari de drets d\'accés';
+$messages['deleting'] = 'S\'estan suprimint els permisos d\'accés...';
+$messages['saving'] = 'S\'estan desant els permisos d\'accés...';
+$messages['updatesuccess'] = 'Els permisos d\'accés han estat canviats correctament';
+$messages['deletesuccess'] = 'Els permisos d\'accés han estat suprimits correctament';
+$messages['createsuccess'] = 'Els permisos d\'accés han estat afegits correctament';
+$messages['updateerror'] = 'No s\'han pogut actualitzar els permisos d\'accés';
+$messages['deleteerror'] = 'No s\'han pogut suprimir els permisos d\'accés';
+$messages['createerror'] = 'No s\'han pogut afegir els permisos d\'accés';
+$messages['deleteconfirm'] = 'Esteu segurs que voleu suprimir els permisos d\'accés de l\'usuari o usuaris seleccionats?';
+$messages['norights'] = 'No s\'ha especificat cap permís';
+$messages['nouser'] = 'No s\'ha especificat cap nom d\'usuari';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Sdílení';
+$labels['myrights'] = 'Přístupová práva';
+$labels['username'] = 'Uživatel:';
+$labels['advanced'] = 'PokroÄilý režim';
+$labels['newuser'] = 'Přidat záznam';
+$labels['editperms'] = 'Upravit oprávnění';
+$labels['actions'] = 'Přístupové právo akce ...';
+$labels['anyone'] = 'Všichni uživatelé (kdokoli)';
+$labels['anonymous'] = 'Hosté (anonymní)';
+$labels['identifier'] = 'Identifikátor';
+$labels['acll'] = 'Vyhledat';
+$labels['aclr'] = 'Číst zprávy';
+$labels['acls'] = 'Ponechat stav PÅ™eÄteno';
+$labels['aclw'] = 'Zapsat oznaÄení';
+$labels['acli'] = 'Vložit (Kopírovat do)';
+$labels['aclp'] = 'Odeslat';
+$labels['aclc'] = 'Vytvořit podsložky';
+$labels['aclk'] = 'Vytvořit podsložky';
+$labels['acld'] = 'Smazat zprávy';
+$labels['aclt'] = 'Smazat zprávy';
+$labels['acle'] = 'Vyprázdnit';
+$labels['aclx'] = 'Smazat složku';
+$labels['acla'] = 'Spravovat';
+$labels['acln'] = 'OznaÄit zprávy poznámkou';
+$labels['aclfull'] = 'Plný přístup';
+$labels['aclother'] = 'Ostatní';
+$labels['aclread'] = 'Číst';
+$labels['aclwrite'] = 'Zapsat';
+$labels['acldelete'] = 'Smazat';
+$labels['shortacll'] = 'Vyhledat';
+$labels['shortaclr'] = 'Číst';
+$labels['shortacls'] = 'Zachovat';
+$labels['shortaclw'] = 'Zapsat';
+$labels['shortacli'] = 'Vložit';
+$labels['shortaclp'] = 'Odeslat';
+$labels['shortaclc'] = 'Vytvořit';
+$labels['shortaclk'] = 'Vytvořit';
+$labels['shortacld'] = 'Smazat';
+$labels['shortaclt'] = 'Smazat';
+$labels['shortacle'] = 'Vyprázdnit';
+$labels['shortaclx'] = 'Mazat složky';
+$labels['shortacla'] = 'Spravovat';
+$labels['shortacln'] = 'OznaÄit poznámkou';
+$labels['shortaclother'] = 'Ostatní';
+$labels['shortaclread'] = 'Číst';
+$labels['shortaclwrite'] = 'Zapsat';
+$labels['shortacldelete'] = 'Smazat';
+$labels['longacll'] = 'Složka je viditelná v seznamu a může být přihlášena';
+$labels['longaclr'] = 'Složka může být otevÅ™ena pro Ätení';
+$labels['longacls'] = 'OznaÄená zpráva byla zmÄ›nÄ›na';
+$labels['longaclw'] = 'ZnaÄky a klíÄová slova u zpráv je možné mÄ›nit, kromÄ› příznaku PÅ™eÄteno a Smazáno';
+$labels['longacli'] = 'Zpráva může být napsána nebo zkopírována do složky';
+$labels['longaclp'] = 'Zpráva může být odeslána do této složky';
+$labels['longaclc'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
+$labels['longaclk'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
+$labels['longacld'] = 'Příznak smazané zprávy může být změněn';
+$labels['longaclt'] = 'Příznak smazané zprávy může být změněn';
+$labels['longacle'] = 'Zpráva může být smazána';
+$labels['longaclx'] = 'Složka může být smazána nebo přejmenována';
+$labels['longacla'] = 'Přístupová práva složky mohou být změněna';
+$labels['longacln'] = 'Zprávamy sdílené metadata (poznámky) mohou být změněny';
+$labels['longaclfull'] = 'Plný přístup vÄetnÄ› správy složky';
+$labels['longaclread'] = 'Složka může být otevÅ™ena pro Ätení';
+$labels['longaclwrite'] = 'Zpráva může být oznaÄena, napsána nebo zkopírována do složky';
+$labels['longacldelete'] = 'Zprávy mohou být smazány';
+$labels['longaclother'] = 'Jiná přístupová oprávnění';
+$labels['ariasummaryacltable'] = 'Seznam oprávnění';
+$labels['arialabelaclactions'] = 'Seznam akcí';
+$labels['arialabelaclform'] = 'Formulář pro přístupová oprávnění';
+$messages['deleting'] = 'Odstraňuji přístupová práva...';
+$messages['saving'] = 'Ukládám přístupová práva...';
+$messages['updatesuccess'] = 'Přístupová práva byla úspěšně změněna';
+$messages['deletesuccess'] = 'Přístupová práva byla úspěšně odstraněna';
+$messages['createsuccess'] = 'Přístupová práva byla úspěšně přidána';
+$messages['updateerror'] = 'Úprava přístupových práv se nezdařila';
+$messages['deleteerror'] = 'Smazání přístupových práv se nezdařilo';
+$messages['createerror'] = 'Přidání přístupových práv se nezdařilo';
+$messages['deleteconfirm'] = 'Opravdu si přejete odstranit přístupová práva pro vybrané(ho) uživatele?';
+$messages['norights'] = 'Nejsou specifikována žádná práva!';
+$messages['nouser'] = 'Není specifikováno uživatelské jméno!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Rhannu';
+$labels['myrights'] = 'Hawliau Mynediad';
+$labels['username'] = 'Defnyddiwr:';
+$labels['advanced'] = 'Modd uwch';
+$labels['newuser'] = 'Ychwanegu cofnod';
+$labels['editperms'] = 'Golygu hawliau';
+$labels['actions'] = 'Gweithredoedd hawl mynediad...';
+$labels['anyone'] = 'Pob defnyddiwr (unrhywun)';
+$labels['anonymous'] = 'Gwestai (anhysbys)';
+$labels['identifier'] = 'Dynodwr';
+$labels['acll'] = 'Chwilio';
+$labels['aclr'] = 'Darllen negeseuon';
+$labels['acls'] = 'Cadw stad Gwelwyd';
+$labels['aclw'] = 'Fflagiau ysgrifennu';
+$labels['acli'] = 'Mewnosod (Copïo fewn i)';
+$labels['aclp'] = 'Postio';
+$labels['aclc'] = 'Creu is-ffolderi';
+$labels['aclk'] = 'Creu is-ffolderi';
+$labels['acld'] = 'Dileu negeseuon';
+$labels['aclt'] = 'Dileu negeseuon';
+$labels['acle'] = 'Dileu';
+$labels['aclx'] = 'Dileu ffolder';
+$labels['acla'] = 'Gweinyddu';
+$labels['acln'] = 'Anodi negeseuon';
+$labels['aclfull'] = 'Rheolaeth lawn';
+$labels['aclother'] = 'Arall';
+$labels['aclread'] = 'Darllen';
+$labels['aclwrite'] = 'Ysgrifennu';
+$labels['acldelete'] = 'Dileu';
+$labels['shortacll'] = 'Chwilio';
+$labels['shortaclr'] = 'Darllen';
+$labels['shortacls'] = 'Cadw';
+$labels['shortaclw'] = 'Ysgrifennu';
+$labels['shortacli'] = 'Mewnosod';
+$labels['shortaclp'] = 'Postio';
+$labels['shortaclc'] = 'Creu';
+$labels['shortaclk'] = 'Creu';
+$labels['shortacld'] = 'Dileu';
+$labels['shortaclt'] = 'Dileu';
+$labels['shortacle'] = 'Dileu';
+$labels['shortaclx'] = 'Dileu ffolder';
+$labels['shortacla'] = 'Gweinyddu';
+$labels['shortacln'] = 'Anodi';
+$labels['shortaclother'] = 'Arall';
+$labels['shortaclread'] = 'Darllen';
+$labels['shortaclwrite'] = 'Ysgrifennu';
+$labels['shortacldelete'] = 'Dileu';
+$labels['longacll'] = 'Mae\'r ffolder hwn i\'w weld ar y rhestrau a mae\'n bosib tanysgrifio iddo';
+$labels['longaclr'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
+$labels['longacls'] = 'Gellir newid y fflag negeseuon Gwelwyd';
+$labels['longaclw'] = 'Gellir newid y fflagiau negeseuon a allweddeiriau, heblaw Gwelwyd a Dilëuwyd';
+$labels['longacli'] = 'Gellir ysgrifennu neu copïo negeseuon i\'r ffolder';
+$labels['longaclp'] = 'Gellir postio negeseuon i\'r ffolder hwn';
+$labels['longaclc'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
+$labels['longaclk'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
+$labels['longacld'] = 'Gellir newid fflag neges Dileu';
+$labels['longaclt'] = 'Gellir newid fflag neges Dileu';
+$labels['longacle'] = 'Gellir gwaredu negeseuon';
+$labels['longaclx'] = 'Gellir dileu neu ail-enwi\'r ffolder';
+$labels['longacla'] = 'Gellir newid hawliau mynediad y ffolder';
+$labels['longacln'] = 'Gellir newid negeseuon metadata (anodiadau) a rannwyd';
+$labels['longaclfull'] = 'Rheolaeth lawn yn cynnwys rheolaeth ffolderi';
+$labels['longaclread'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
+$labels['longaclwrite'] = 'Gellir nodi, ysgrifennu neu copïo negeseuon i\'r ffolder';
+$labels['longacldelete'] = 'Gellir dileu negeseuon';
+$labels['longaclother'] = 'Hawliau mynediad eraill';
+$labels['ariasummaryacltable'] = 'Rhestr o hawliau mynediad';
+$labels['arialabelaclactions'] = 'Rhestru gweithrediadau';
+$labels['arialabelaclform'] = 'Ffurflen hawliau mynediad';
+$messages['deleting'] = 'Yn dileu hawliau mynediad...';
+$messages['saving'] = 'Yn cadw hawliau mynediad...';
+$messages['updatesuccess'] = 'Wedi newid hawliau mynediad yn llwyddiannus';
+$messages['deletesuccess'] = 'Wedi dileu hawliau mynediad yn llwyddiannus';
+$messages['createsuccess'] = 'Wedi ychwanegu hawliau mynediad yn llwyddiannus';
+$messages['updateerror'] = 'Methwyd diweddaru hawliau mynediad';
+$messages['deleteerror'] = 'Methwyd dileu hawliau mynediad';
+$messages['createerror'] = 'Methwyd ychwanegu hawliau mynediad';
+$messages['deleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu hawliau mynediad y defnyddiwr/wyr ddewiswyd?';
+$messages['norights'] = 'Nid oes hawliau wedi eu nodi!';
+$messages['nouser'] = 'Nid oes enw defnyddiwr wedi ei nodi!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,93 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Deling';
+$labels['myrights'] = 'Adgangrettigheder';
+$labels['username'] = 'Bruger:';
+$labels['advanced'] = 'Avanceret tilstand';
+$labels['newuser'] = 'Tilføj indgang';
+$labels['editperms'] = 'Rediger tilladelser';
+$labels['actions'] = 'Tilgangsrettigheder...';
+$labels['anyone'] = 'Alle brugere';
+$labels['anonymous'] = 'Gæst (anonym)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Slå op';
+$labels['aclr'] = 'Læs beskeder';
+$labels['acls'] = 'Behold læst-status';
+$labels['aclw'] = 'Skriv flag';
+$labels['acli'] = 'Indsæt (kopier ind i)';
+$labels['aclp'] = 'Send';
+$labels['aclc'] = 'Opret undermapper';
+$labels['aclk'] = 'Opret undermapper';
+$labels['acld'] = 'Slet beskeder';
+$labels['aclt'] = 'Slet beskeder';
+$labels['acle'] = 'Udslet';
+$labels['aclx'] = 'Slet mappe';
+$labels['acla'] = 'Administrer';
+$labels['acln'] = 'Annoter beskeder';
+$labels['aclfull'] = 'Fuld kontrol';
+$labels['aclother'] = 'Andet';
+$labels['aclread'] = 'Læse';
+$labels['aclwrite'] = 'Skrive';
+$labels['acldelete'] = 'Slet';
+$labels['shortacll'] = 'Slå op';
+$labels['shortaclr'] = 'Læse';
+$labels['shortacls'] = 'Behold';
+$labels['shortaclw'] = 'Skrive';
+$labels['shortacli'] = 'Indsæt';
+$labels['shortaclp'] = 'Send';
+$labels['shortaclc'] = 'Opret';
+$labels['shortaclk'] = 'Opret';
+$labels['shortacld'] = 'Slet';
+$labels['shortaclt'] = 'Slet';
+$labels['shortacle'] = 'Udslet';
+$labels['shortaclx'] = 'Slet mappe';
+$labels['shortacla'] = 'Administrer';
+$labels['shortacln'] = 'Annoter';
+$labels['shortaclother'] = 'Andet';
+$labels['shortaclread'] = 'Læse';
+$labels['shortaclwrite'] = 'Skrive';
+$labels['shortacldelete'] = 'Slet';
+$labels['longacll'] = 'Mappen er synlig på listen og kan abonneres på';
+$labels['longaclr'] = 'Mappen kan åbnes for læsning';
+$labels['longacls'] = 'Beskeders Læst-flag kan ændres';
+$labels['longaclw'] = 'Beskeders flag og nøgleord kan ændres med undtagelse af Læst og Slettet';
+$labels['longacli'] = 'Beskeder kan blive skrevet eller kopieret til mappen';
+$labels['longaclp'] = 'Beskeder kan sendes til denne mappe';
+$labels['longaclc'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
+$labels['longaclk'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
+$labels['longacld'] = 'Beskeders Slet-flag kan ændres';
+$labels['longaclt'] = 'Beskeders Slet-flag kan ændres';
+$labels['longacle'] = 'Beskeder kan slettes';
+$labels['longaclx'] = 'Mappen kan blive slettet eller omdøbt';
+$labels['longacla'] = 'Mappen adgangsrettigheder kan ændres';
+$labels['longaclfull'] = 'Fuld kontrol inklusiv mappeadministration';
+$labels['longaclread'] = 'Mappen kan åbnes for læsning';
+$labels['longaclwrite'] = 'Beskeder kan blive markeret, skrevet eller kopieret til mappen';
+$labels['longacldelete'] = 'Beskeder kan slettes';
+$messages['deleting'] = 'Slette rettigheder...';
+$messages['saving'] = 'Gemme rettigheder...';
+$messages['updatesuccess'] = 'Tilgangsrettighederne blev ændret';
+$messages['deletesuccess'] = 'Sletterettigheder blev ændret';
+$messages['createsuccess'] = 'Tilgangsrettigheder blev tilføjet';
+$messages['updateerror'] = 'Kunne ikke opdatere adgangsrettigheder';
+$messages['deleteerror'] = 'Kunne ikke slette tilgangsrettigheder';
+$messages['createerror'] = 'Kunne ikke tilføje tilgangsrettigheder';
+$messages['deleteconfirm'] = 'Er du sikker på, at du vil slette tilgangsrettigheder fra de(n) valgte bruger(e)?';
+$messages['norights'] = 'Der er ikke specificeret nogle rettigheder!';
+$messages['nouser'] = 'Der er ikke angiver et brugernavn!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Freigabe';
+$labels['myrights'] = 'Zugriffsrechte';
+$labels['username'] = 'Benutzer:';
+$labels['advanced'] = 'Expertenmodus';
+$labels['newuser'] = 'Eintrag hinzufügen';
+$labels['editperms'] = 'Zugriffsrechte bearbeiten';
+$labels['actions'] = 'Zugriffsrechte Aktionen...';
+$labels['anyone'] = 'Alle Benutzer (anyone)';
+$labels['anonymous'] = 'Gäste (anonymous)';
+$labels['identifier'] = 'Bezeichnung';
+$labels['acll'] = 'Sichtbar';
+$labels['aclr'] = 'Nachrichten lesen';
+$labels['acls'] = 'Lesestatus ändern';
+$labels['aclw'] = 'Flags schreiben';
+$labels['acli'] = 'Nachrichten hinzufügen';
+$labels['aclp'] = 'Senden an';
+$labels['aclc'] = 'Unterordner erstellen';
+$labels['aclk'] = 'Unterordner erstellen';
+$labels['acld'] = 'Nachrichten als gelöscht markieren';
+$labels['aclt'] = 'Nachrichten als gelöscht markieren';
+$labels['acle'] = 'Endgültig löschen';
+$labels['aclx'] = 'Ordner löschen';
+$labels['acla'] = 'Verwalten';
+$labels['acln'] = 'Nachrichten auszeichnen';
+$labels['aclfull'] = 'Vollzugriff';
+$labels['aclother'] = 'Andere';
+$labels['aclread'] = 'Lesen';
+$labels['aclwrite'] = 'Schreiben';
+$labels['acldelete'] = 'Löschen';
+$labels['shortacll'] = 'Sichtbar';
+$labels['shortaclr'] = 'Lesen';
+$labels['shortacls'] = 'Behalte';
+$labels['shortaclw'] = 'Schreiben';
+$labels['shortacli'] = 'Hinzufügen';
+$labels['shortaclp'] = 'Senden an';
+$labels['shortaclc'] = 'Erstellen';
+$labels['shortaclk'] = 'Erstellen';
+$labels['shortacld'] = 'Löschen';
+$labels['shortaclt'] = 'Löschen';
+$labels['shortacle'] = 'Endgültig löschen';
+$labels['shortaclx'] = 'Ordner löschen';
+$labels['shortacla'] = 'Verwalten';
+$labels['shortacln'] = 'Auszeichnen';
+$labels['shortaclother'] = 'Andere';
+$labels['shortaclread'] = 'Lesen';
+$labels['shortaclwrite'] = 'Schreiben';
+$labels['shortacldelete'] = 'Löschen';
+$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
+$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
+$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
+$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter ausser "Gelesen" und "Gelöscht" können geändert werden';
+$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
+$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
+$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
+$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
+$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
+$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
+$labels['longacle'] = 'Als "gelöscht" markierte Nachrichten können entfernt werden';
+$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
+$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
+$labels['longacln'] = 'Geteilte Nachrichten-Auszeichnungen (Metadaten) können nicht geändert werden';
+$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
+$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
+$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
+$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
+$labels['longaclother'] = 'Andere Zugriffsrechte ';
+$labels['ariasummaryacltable'] = 'Liste der Zugriffsrechte';
+$labels['arialabelaclactions'] = 'Listen-Aktionen';
+$labels['arialabelaclform'] = 'Zugriffsrechte (Formular)';
+$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
+$messages['saving'] = 'Zugriffsrechte werden gespeichert...';
+$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
+$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
+$messages['createsuccess'] = 'Zugriffsrechte erfolgreich hinzugefügt';
+$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
+$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
+$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
+$messages['deleteconfirm'] = 'Sind Sie sicher, dass Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
+$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
+$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Freigabe';
+$labels['myrights'] = 'Zugriffsrechte';
+$labels['username'] = 'Benutzer:';
+$labels['advanced'] = 'Erweiterter Modus';
+$labels['newuser'] = 'Eintrag hinzufügen';
+$labels['editperms'] = 'Zugriffsrechte bearbeiten';
+$labels['actions'] = 'Zugriffsrechteaktionen …';
+$labels['anyone'] = 'Alle Benutzer (anyone)';
+$labels['anonymous'] = 'Gäste (anonymous)';
+$labels['identifier'] = 'Bezeichnung';
+$labels['acll'] = 'Sichtbar';
+$labels['aclr'] = 'Nachrichten lesen';
+$labels['acls'] = 'Lesestatus ändern';
+$labels['aclw'] = 'Flags schreiben';
+$labels['acli'] = 'Nachrichten hinzufügen';
+$labels['aclp'] = 'Senden an';
+$labels['aclc'] = 'Unterordner erstellen';
+$labels['aclk'] = 'Unterordner erstellen';
+$labels['acld'] = 'Nachrichten als gelöscht markieren';
+$labels['aclt'] = 'Nachrichten als gelöscht markieren';
+$labels['acle'] = 'Endgültig löschen';
+$labels['aclx'] = 'Ordner löschen';
+$labels['acla'] = 'Verwalten';
+$labels['acln'] = 'Nachrichten kommentieren';
+$labels['aclfull'] = 'Vollzugriff';
+$labels['aclother'] = 'Andere';
+$labels['aclread'] = 'Lesen';
+$labels['aclwrite'] = 'Schreiben';
+$labels['acldelete'] = 'Löschen';
+$labels['shortacll'] = 'Sichtbar';
+$labels['shortaclr'] = 'Lesen';
+$labels['shortacls'] = 'Lesestatus';
+$labels['shortaclw'] = 'Schreiben';
+$labels['shortacli'] = 'Hinzufügen';
+$labels['shortaclp'] = 'Senden an';
+$labels['shortaclc'] = 'Erstellen';
+$labels['shortaclk'] = 'Erstellen';
+$labels['shortacld'] = 'Löschen';
+$labels['shortaclt'] = 'Löschen';
+$labels['shortacle'] = 'Endgültig löschen';
+$labels['shortaclx'] = 'Ordner löschen';
+$labels['shortacla'] = 'Verwalten';
+$labels['shortacln'] = 'Kommentieren';
+$labels['shortaclother'] = 'Andere';
+$labels['shortaclread'] = 'Lesen';
+$labels['shortaclwrite'] = 'Schreiben';
+$labels['shortacldelete'] = 'Löschen';
+$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
+$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
+$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
+$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter außer "Gelesen" und "Gelöscht" können geändert werden';
+$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
+$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
+$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
+$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
+$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
+$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
+$labels['longacle'] = 'Als "gelöscht" markiert Nachrichten können gelöscht werden.';
+$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
+$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
+$labels['longacln'] = 'Nachrichten Metadaten (Vermerke) können geändert werden';
+$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
+$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
+$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
+$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
+$labels['longaclother'] = 'Andere Zugriffsrechte';
+$labels['ariasummaryacltable'] = 'Liste von Zugriffsrechten';
+$labels['arialabelaclactions'] = 'Aktionen anzeigen';
+$labels['arialabelaclform'] = 'Zugriffsrechteformular';
+$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
+$messages['saving'] = 'Zugriffsrechte werden gewährt...';
+$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
+$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
+$messages['createsuccess'] = 'Zugriffsrechte erfolgreich gewährt';
+$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
+$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
+$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
+$messages['deleteconfirm'] = 'Sind Sie sicher, daß Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
+$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
+$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Κοινή χÏήση';
+$labels['myrights'] = 'Δικαιώματα ΠÏόσβασης ';
+$labels['username'] = 'ΧÏήστης:';
+$labels['advanced'] = 'ΠÏοηγμένη λειτουÏγία';
+$labels['newuser'] = 'ΠÏοσθήκη καταχώÏησης ';
+$labels['editperms'] = 'Μεταβολή δικαιωμάτων';
+$labels['actions'] = 'ΕνέÏγειες δικαιωμάτων Ï€Ïόσβασης...';
+$labels['anyone'] = 'Όλοι οι χÏήστες (οποιοσδήποτε)';
+$labels['anonymous'] = 'Επισκέπτες (ανώνυμοι)';
+$labels['identifier'] = 'ΑναγνωÏιστικό';
+$labels['acll'] = 'Αναζήτηση';
+$labels['aclr'] = 'Διαβάστε τα μηνÏματα ';
+$labels['acls'] = 'ΔιατήÏηση κατάστασης ανάγνωσης';
+$labels['aclw'] = 'Ρυθμίσεις εγγÏαφής';
+$labels['acli'] = 'Εισάγωγη (ΑντιγÏαφή σε) ';
+$labels['aclp'] = 'ΚαταχώÏηση';
+$labels['aclc'] = 'ΔημιουÏγία υποφακέλων';
+$labels['aclk'] = 'ΔημιουÏγία υποφακέλων';
+$labels['acld'] = 'ΔιαγÏαφή μηνυμάτων';
+$labels['aclt'] = 'ΔιαγÏαφή μηνυμάτων';
+$labels['acle'] = 'Απαλοιφή';
+$labels['aclx'] = 'ΔιαγÏαφή φακέλου';
+$labels['acla'] = 'ΔιαχείÏιση';
+$labels['acln'] = 'ΠÏοσθήκη υπομνήματος στα μηνÏματα';
+$labels['aclfull'] = 'ΠλήÏης Ï€Ïόσβαση';
+$labels['aclother'] = 'Άλλο';
+$labels['aclread'] = 'Ανάγνωση';
+$labels['aclwrite'] = 'ΕγγÏαφή';
+$labels['acldelete'] = 'ΔιαγÏαφή';
+$labels['shortacll'] = 'Αναζήτηση';
+$labels['shortaclr'] = 'Ανάγνωση';
+$labels['shortacls'] = 'ΤήÏηση';
+$labels['shortaclw'] = 'ΕγγÏαφή';
+$labels['shortacli'] = 'Εισαγωγή';
+$labels['shortaclp'] = 'ΚαταχώÏηση';
+$labels['shortaclc'] = 'ΔημιουÏγία';
+$labels['shortaclk'] = 'ΔημιουÏγία';
+$labels['shortacld'] = 'ΔιαγÏαφή';
+$labels['shortaclt'] = 'ΔιαγÏαφή';
+$labels['shortacle'] = 'Απαλοιφή';
+$labels['shortaclx'] = 'ΔιαγÏαφή φακέλου';
+$labels['shortacla'] = 'ΔιαχείÏιση';
+$labels['shortacln'] = 'ΠÏοσθήκη υπομνήματος';
+$labels['shortaclother'] = 'Άλλο';
+$labels['shortaclread'] = 'Ανάγνωση';
+$labels['shortaclwrite'] = 'ΕγγÏαφή';
+$labels['shortacldelete'] = 'ΔιαγÏαφή';
+$labels['longacll'] = 'Ο φάκελος είναι οÏατός στους καταλόγους και μποÏείτε να εγγÏαφείτε σε αυτόν';
+$labels['longaclr'] = 'Ο φάκελος μποÏεί να Ï€Ïοσπελαστεί για ανάγνωση ';
+$labels['longacls'] = 'Η κατάσταση ανάγνωσης μηνυμάτων μποÏεί να αλλαχθεί';
+$labels['longaclw'] = 'ΜποÏοÏν να μεταβληθοÏν οι καταστάσεις μηνυμάτων και οι λέξεις κλειδιά, εκτός από τις καταστάσεις Ανάγνωσης και ΔιαγÏαφής';
+$labels['longacli'] = 'Τα μηνÏματα μποÏοÏν να εγγÏαφοÏν ή να αντιγÏαφοÏν στον φάκελο ';
+$labels['longaclp'] = 'Τα μηνÏματα μποÏοÏν να τοποθετηθοÏν σε αυτόν το φάκελο ';
+$labels['longaclc'] = 'ΜποÏοÏν να δημιουÏγηθοÏν (ή να μετονομαστοÏν) φάκελοι ακÏιβώς κάτω από αυτόν τον φάκελο ';
+$labels['longaclk'] = 'ΜποÏοÏν να δημιουÏγηθοÏν (ή να μετονομαστοÏν) φάκελοι ακÏιβώς κάτω από αυτόν τον φάκελο ';
+$labels['longacld'] = 'Η κατάσταση διαγÏαφής μηνυμάτων μποÏεί να μεταβληθεί';
+$labels['longaclt'] = 'Η κατάσταση διαγÏαφής μηνυμάτων μποÏεί να μεταβληθεί';
+$labels['longacle'] = 'Τα μηνÏματα μποÏοÏν να απαλειφθοÏν';
+$labels['longaclx'] = 'Ο φάκελος μποÏεί να μετονομασθεί ή να διαγÏαφεί';
+$labels['longacla'] = 'Τα δικαιώματα Ï€Ïόσβασης στον φάκελο μποÏοÏν να μεταβληθοÏν';
+$labels['longacln'] = 'Το διαμοιÏαζόμενο υπόμνημα των μηνυμάτων είναι δυνατό να μεταβληθεί';
+$labels['longaclfull'] = 'ΠλήÏης έλεγχος συμπεÏιλαμβανόμενης της διαχείÏισης φακέλων';
+$labels['longaclread'] = 'Ο φάκελος είναι δυνατό να Ï€Ïοσπελαστεί για ανάγνωση';
+$labels['longaclwrite'] = 'Τα μηνÏματα μποÏοÏν να σημαδεÏονται, να εγγÏάφονται ή να αντιγÏάφονται στον φάκελο';
+$labels['longacldelete'] = 'Τα μηνÏματα μποÏοÏν να διαγÏαφοÏν';
+$labels['longaclother'] = 'Άλλα δικαιώματα Ï€Ïόσβασης';
+$labels['ariasummaryacltable'] = 'Λίστα δικαιωμάτων Ï€Ïόσβασης';
+$labels['arialabelaclactions'] = 'Λίστα ενεÏγειών';
+$labels['arialabelaclform'] = 'ΦόÏμα δικαιωμάτων Ï€Ïόσβασης';
+$messages['deleting'] = 'ΔιαγÏαφή των δικαιωμάτων Ï€Ïόσβασης...';
+$messages['saving'] = 'Αποθήκευση δικαιώματων Ï€Ïόσβασης...';
+$messages['updatesuccess'] = 'Επιτυχής μεταβολή των δικαιωμάτων Ï€Ïόσβασης';
+$messages['deletesuccess'] = 'Επιτυχής διαγÏαφή των δικαιωμάτων Ï€Ïόσβασης';
+$messages['createsuccess'] = 'Επιτυχής Ï€Ïοσθήκη δικαιωμάτων Ï€Ïόσβασης';
+$messages['updateerror'] = 'Δεν είναι δυνατή η ενημέÏωση των δικαιωμάτων Ï€Ïόσβασης';
+$messages['deleteerror'] = 'Δεν είναι δυνατή η διαγÏαφή των δικαιωμάτων Ï€Ïόσβασης ';
+$messages['createerror'] = 'Δεν είναι δυνατή η Ï€Ïοσθήκη δικαιωμάτων Ï€Ïόσβασης ';
+$messages['deleteconfirm'] = 'Είστε βέβαιοι ότι θέλετε να καταÏγήσετε τα δικαιώματα Ï€Ïόσβασης του επιλεγμένου(ων) χÏήστη(ών);';
+$messages['norights'] = 'Κανένα δικαίωμα δεν έχει καθοÏιστεί!';
+$messages['nouser'] = 'Το όνομα χÏήστη δεν έχει καθοÏιστεί! ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,94 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Sharing';
+$labels['myrights'] = 'Access Rights';
+$labels['username'] = 'User:';
+$labels['advanced'] = 'Advanced mode';
+$labels['newuser'] = 'Add entry';
+$labels['editperms'] = 'Edit permissions';
+$labels['actions'] = 'Access right actions...';
+$labels['anyone'] = 'All users (anyone)';
+$labels['anonymous'] = 'Guests (anonymous)';
+$labels['identifier'] = 'Identifier';
+$labels['acll'] = 'Lookup';
+$labels['aclr'] = 'Read messages';
+$labels['acls'] = 'Keep Seen state';
+$labels['aclw'] = 'Write flags';
+$labels['acli'] = 'Insert (Copy into)';
+$labels['aclp'] = 'Post';
+$labels['aclc'] = 'Create subfolders';
+$labels['aclk'] = 'Create subfolders';
+$labels['acld'] = 'Delete messages';
+$labels['aclt'] = 'Delete messages';
+$labels['acle'] = 'Expunge';
+$labels['aclx'] = 'Delete folder';
+$labels['acla'] = 'Administer';
+$labels['acln'] = 'Annotate messages';
+$labels['aclfull'] = 'Full control';
+$labels['aclother'] = 'Other';
+$labels['aclread'] = 'Read';
+$labels['aclwrite'] = 'Write';
+$labels['acldelete'] = 'Delete';
+$labels['shortacll'] = 'Lookup';
+$labels['shortaclr'] = 'Read';
+$labels['shortacls'] = 'Keep';
+$labels['shortaclw'] = 'Write';
+$labels['shortacli'] = 'Insert';
+$labels['shortaclp'] = 'Post';
+$labels['shortaclc'] = 'Create';
+$labels['shortaclk'] = 'Create';
+$labels['shortacld'] = 'Delete';
+$labels['shortaclt'] = 'Delete';
+$labels['shortacle'] = 'Expunge';
+$labels['shortaclx'] = 'Folder delete';
+$labels['shortacla'] = 'Administer';
+$labels['shortacln'] = 'Annotate';
+$labels['shortaclother'] = 'Other';
+$labels['shortaclread'] = 'Read';
+$labels['shortaclwrite'] = 'Write';
+$labels['shortacldelete'] = 'Delete';
+$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
+$labels['longaclr'] = 'The folder can be opened for reading';
+$labels['longacls'] = 'Messages Seen flag can be changed';
+$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
+$labels['longacli'] = 'Messages can be written or copied to the folder';
+$labels['longaclp'] = 'Messages can be posted to this folder';
+$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longacld'] = 'Messages Delete flag can be changed';
+$labels['longaclt'] = 'Messages Delete flag can be changed';
+$labels['longacle'] = 'Messages can be expunged';
+$labels['longaclx'] = 'The folder can be deleted or renamed';
+$labels['longacla'] = 'The folder access rights can be changed';
+$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
+$labels['longaclfull'] = 'Full control including folder administration';
+$labels['longaclread'] = 'The folder can be opened for reading';
+$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
+$labels['longacldelete'] = 'Messages can be deleted';
+$messages['deleting'] = 'Deleting access rights...';
+$messages['saving'] = 'Saving access rights...';
+$messages['updatesuccess'] = 'Successfully changed access rights';
+$messages['deletesuccess'] = 'Successfully deleted access rights';
+$messages['createsuccess'] = 'Successfully added access rights';
+$messages['updateerror'] = 'Unable to update access rights';
+$messages['deleteerror'] = 'Unable to delete access rights';
+$messages['createerror'] = 'Unable to add access rights';
+$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
+$messages['norights'] = 'No rights has been specified!';
+$messages['nouser'] = 'No username has been specified!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Sharing';
+$labels['myrights'] = 'Access Rights';
+$labels['username'] = 'User:';
+$labels['advanced'] = 'Advanced mode';
+$labels['newuser'] = 'Add entry';
+$labels['editperms'] = 'Edit permissions';
+$labels['actions'] = 'Access right actions...';
+$labels['anyone'] = 'All users (anyone)';
+$labels['anonymous'] = 'Guests (anonymous)';
+$labels['identifier'] = 'Identifier';
+$labels['acll'] = 'Look-up';
+$labels['aclr'] = 'Read messages';
+$labels['acls'] = 'Keep Seen state';
+$labels['aclw'] = 'Write flags';
+$labels['acli'] = 'Insert (copy into)';
+$labels['aclp'] = 'Post';
+$labels['aclc'] = 'Create sub-folders';
+$labels['aclk'] = 'Create sub-folders';
+$labels['acld'] = 'Delete messages';
+$labels['aclt'] = 'Delete messages';
+$labels['acle'] = 'Expunge';
+$labels['aclx'] = 'Delete folder';
+$labels['acla'] = 'Administer';
+$labels['acln'] = 'Annotate messages';
+$labels['aclfull'] = 'Full control';
+$labels['aclother'] = 'Other';
+$labels['aclread'] = 'Read';
+$labels['aclwrite'] = 'Write';
+$labels['acldelete'] = 'Delete';
+$labels['shortacll'] = 'Look-up';
+$labels['shortaclr'] = 'Read';
+$labels['shortacls'] = 'Keep';
+$labels['shortaclw'] = 'Write';
+$labels['shortacli'] = 'Insert';
+$labels['shortaclp'] = 'Post';
+$labels['shortaclc'] = 'Create';
+$labels['shortaclk'] = 'Create';
+$labels['shortacld'] = 'Delete';
+$labels['shortaclt'] = 'Delete';
+$labels['shortacle'] = 'Expunge';
+$labels['shortaclx'] = 'Folder delete';
+$labels['shortacla'] = 'Administer';
+$labels['shortacln'] = 'Annotate';
+$labels['shortaclother'] = 'Other';
+$labels['shortaclread'] = 'Read';
+$labels['shortaclwrite'] = 'Write';
+$labels['shortacldelete'] = 'Delete';
+$labels['longacll'] = 'The folder is visible on lists and can be subscribed to.';
+$labels['longaclr'] = 'The folder can be opened for reading';
+$labels['longacls'] = 'Messages Seen flag can be changed';
+$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted.';
+$labels['longacli'] = 'Messages can be written or copied to the folder';
+$labels['longaclp'] = 'Messages can be posted to this folder';
+$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longacld'] = 'Messages Delete flag can be changed';
+$labels['longaclt'] = 'Messages Delete flag can be changed';
+$labels['longacle'] = 'Messages can be expunged';
+$labels['longaclx'] = 'The folder can be deleted or renamed';
+$labels['longacla'] = 'The folder access rights can be changed';
+$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
+$labels['longaclfull'] = 'Full control including folder administration';
+$labels['longaclread'] = 'The folder can be opened for reading';
+$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
+$labels['longacldelete'] = 'Messages can be deleted';
+$labels['longaclother'] = 'Other access rights';
+$labels['ariasummaryacltable'] = 'List of access rights';
+$labels['arialabelaclactions'] = 'List actions';
+$labels['arialabelaclform'] = 'Access rights form';
+$messages['deleting'] = 'Deleting access rights...';
+$messages['saving'] = 'Saving access rights...';
+$messages['updatesuccess'] = 'Successfully changed access rights';
+$messages['deletesuccess'] = 'Successfully deleted access rights';
+$messages['createsuccess'] = 'Successfully added access rights';
+$messages['updateerror'] = 'Unable to update access rights';
+$messages['deleteerror'] = 'Unable to delete access rights';
+$messages['createerror'] = 'Unable to add access rights';
+$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
+$messages['norights'] = 'No rights has been specified!';
+$messages['nouser'] = 'No username has been specified!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,108 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+
+$labels['sharing'] = 'Sharing';
+$labels['myrights'] = 'Access Rights';
+$labels['username'] = 'User:';
+$labels['advanced'] = 'Advanced mode';
+$labels['newuser'] = 'Add entry';
+$labels['editperms'] = 'Edit permissions';
+$labels['actions'] = 'Access right actions...';
+$labels['anyone'] = 'All users (anyone)';
+$labels['anonymous'] = 'Guests (anonymous)';
+$labels['identifier'] = 'Identifier';
+
+$labels['acll'] = 'Lookup';
+$labels['aclr'] = 'Read messages';
+$labels['acls'] = 'Keep Seen state';
+$labels['aclw'] = 'Write flags';
+$labels['acli'] = 'Insert (Copy into)';
+$labels['aclp'] = 'Post';
+$labels['aclc'] = 'Create subfolders';
+$labels['aclk'] = 'Create subfolders';
+$labels['acld'] = 'Delete messages';
+$labels['aclt'] = 'Delete messages';
+$labels['acle'] = 'Expunge';
+$labels['aclx'] = 'Delete folder';
+$labels['acla'] = 'Administer';
+$labels['acln'] = 'Annotate messages';
+
+$labels['aclfull'] = 'Full control';
+$labels['aclother'] = 'Other';
+$labels['aclread'] = 'Read';
+$labels['aclwrite'] = 'Write';
+$labels['acldelete'] = 'Delete';
+
+$labels['shortacll'] = 'Lookup';
+$labels['shortaclr'] = 'Read';
+$labels['shortacls'] = 'Keep';
+$labels['shortaclw'] = 'Write';
+$labels['shortacli'] = 'Insert';
+$labels['shortaclp'] = 'Post';
+$labels['shortaclc'] = 'Create';
+$labels['shortaclk'] = 'Create';
+$labels['shortacld'] = 'Delete';
+$labels['shortaclt'] = 'Delete';
+$labels['shortacle'] = 'Expunge';
+$labels['shortaclx'] = 'Folder delete';
+$labels['shortacla'] = 'Administer';
+$labels['shortacln'] = 'Annotate';
+
+$labels['shortaclother'] = 'Other';
+$labels['shortaclread'] = 'Read';
+$labels['shortaclwrite'] = 'Write';
+$labels['shortacldelete'] = 'Delete';
+
+$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
+$labels['longaclr'] = 'The folder can be opened for reading';
+$labels['longacls'] = 'Messages Seen flag can be changed';
+$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
+$labels['longacli'] = 'Messages can be written or copied to the folder';
+$labels['longaclp'] = 'Messages can be posted to this folder';
+$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
+$labels['longacld'] = 'Messages Delete flag can be changed';
+$labels['longaclt'] = 'Messages Delete flag can be changed';
+$labels['longacle'] = 'Messages can be expunged';
+$labels['longaclx'] = 'The folder can be deleted or renamed';
+$labels['longacla'] = 'The folder access rights can be changed';
+$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
+
+$labels['longaclfull'] = 'Full control including folder administration';
+$labels['longaclread'] = 'The folder can be opened for reading';
+$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
+$labels['longacldelete'] = 'Messages can be deleted';
+$labels['longaclother'] = 'Other access rights';
+
+$labels['ariasummaryacltable'] = 'List of access rights';
+$labels['arialabelaclactions'] = 'List actions';
+$labels['arialabelaclform'] = 'Access rights form';
+
+$messages['deleting'] = 'Deleting access rights...';
+$messages['saving'] = 'Saving access rights...';
+$messages['updatesuccess'] = 'Successfully changed access rights';
+$messages['deletesuccess'] = 'Successfully deleted access rights';
+$messages['createsuccess'] = 'Successfully added access rights';
+$messages['updateerror'] = 'Unable to update access rights';
+$messages['deleteerror'] = 'Unable to delete access rights';
+$messages['createerror'] = 'Unable to add access rights';
+$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
+$messages['norights'] = 'No rights has been specified!';
+$messages['nouser'] = 'No username has been specified!';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Kunhavigado';
+$labels['myrights'] = 'Atingrajtoj';
+$labels['username'] = 'Uzanto:';
+$labels['newuser'] = 'Aldoni eron';
+$labels['actions'] = 'Agoj de atingrajtoj...';
+$labels['anyone'] = 'Ĉiuj uzantoj (iu ajn)';
+$labels['anonymous'] = 'Gasto (sennome)';
+$labels['identifier'] = 'Identigilo';
+$labels['acll'] = 'Elserĉo';
+$labels['aclr'] = 'Legi mesaÄojn';
+$labels['acls'] = 'Manteni legitan staton';
+$labels['acli'] = 'Enmeti (alglui)';
+$labels['aclp'] = 'AfiÅi';
+$labels['aclc'] = 'Krei subdosierujojn';
+$labels['aclk'] = 'Krei subdosierujojn';
+$labels['acld'] = 'Forigi mesaÄojn';
+$labels['aclt'] = 'Forigi mesaÄojn';
+$labels['aclx'] = 'Forigi dosierujon';
+$labels['acla'] = 'Administri';
+$labels['aclfull'] = 'Plena kontrolo';
+$labels['aclother'] = 'Alia';
+$labels['aclread'] = 'Legi';
+$labels['aclwrite'] = 'Skribi';
+$labels['acldelete'] = 'Forigi';
+$labels['shortacll'] = 'Elserĉo';
+$labels['shortaclr'] = 'Legi';
+$labels['shortacls'] = 'Manteni';
+$labels['shortaclw'] = 'Skribi';
+$labels['shortacli'] = 'Enmeti';
+$labels['shortaclp'] = 'AfiÅi';
+$labels['shortaclc'] = 'Krei';
+$labels['shortaclk'] = 'Krei';
+$labels['shortacld'] = 'Forigi';
+$labels['shortaclt'] = 'Forigi';
+$labels['shortaclx'] = 'Forigo de dosierujo';
+$labels['shortacla'] = 'Administri';
+$labels['shortaclother'] = 'Alia';
+$labels['shortaclread'] = 'Legi';
+$labels['shortaclwrite'] = 'Skribi';
+$labels['shortacldelete'] = 'Forigi';
+$labels['longacll'] = 'La dosierujo videblas en listoj kaj oni povas aboni al Äi';
+$labels['longaclr'] = 'La dosierujo malfermeblas por legado';
+$labels['longacli'] = 'MesaÄoj skribeblas aÅ­ kopieblas en la dosierujo';
+$labels['longaclp'] = 'MesaÄoj afiÅeblas en ĉi tiu dosierujo';
+$labels['longaclread'] = 'La dosierujo malfermeblas por legado';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartiendo';
+$labels['myrights'] = 'Permisos de acceso';
+$labels['username'] = 'Usuario:';
+$labels['advanced'] = 'Modo avanzado';
+$labels['newuser'] = 'Añadir entrada';
+$labels['editperms'] = 'Editar permisos';
+$labels['actions'] = 'Acciones de derecho de acceso...';
+$labels['anyone'] = 'Todos los usuarios (cualquiera)';
+$labels['anonymous'] = 'Invitados (anónimos)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Búsqueda';
+$labels['aclr'] = 'Leer mensajes';
+$labels['acls'] = 'Mantener estado de visto';
+$labels['aclw'] = 'Etiquetas de escritura';
+$labels['acli'] = 'Insertar (copiar a)';
+$labels['aclp'] = 'Publicar';
+$labels['aclc'] = 'Crear subcarpetas';
+$labels['aclk'] = 'Crear subcarpetas';
+$labels['acld'] = 'Eliminar mensajes';
+$labels['aclt'] = 'Eliminar mensajes';
+$labels['acle'] = 'Borrar';
+$labels['aclx'] = 'Eliminar carpeta';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Anotar mensajes';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Otro';
+$labels['aclread'] = 'Leer';
+$labels['aclwrite'] = 'Escribir';
+$labels['acldelete'] = 'Eliminar';
+$labels['shortacll'] = 'Búsqueda';
+$labels['shortaclr'] = 'Leer';
+$labels['shortacls'] = 'Mantener';
+$labels['shortaclw'] = 'Escribir';
+$labels['shortacli'] = 'Insertar';
+$labels['shortaclp'] = 'Publicar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Eliminar';
+$labels['shortaclt'] = 'Eliminar';
+$labels['shortacle'] = 'Borrar';
+$labels['shortaclx'] = 'Eliminar carpeta';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Anotar';
+$labels['shortaclother'] = 'Otro';
+$labels['shortaclread'] = 'Leer';
+$labels['shortaclwrite'] = 'Escribir';
+$labels['shortacldelete'] = 'Eliminar';
+$labels['longacll'] = 'La carpeta es visible en listas y se la puede suscribir';
+$labels['longaclr'] = 'La carpeta puede ser abierta para lectura';
+$labels['longacls'] = 'Etiqueta de mensajes leídos puede ser cambiada';
+$labels['longaclw'] = 'Las etiquetas de mensajes y palabras clave puede ser cambiada, excepto Leídos y Eliminados';
+$labels['longacli'] = 'Se pueden escribir o copiar mensajes a la carpeta';
+$labels['longaclp'] = 'Los mensajes pueden ser publicados en esta carpeta';
+$labels['longaclc'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
+$labels['longaclk'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
+$labels['longacld'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
+$labels['longaclt'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
+$labels['longacle'] = 'Los mensajes pueden ser borrados';
+$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
+$labels['longacla'] = 'Los derechos de acceso de la carpeta pueden ser cambiados';
+$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) puede ser cambiado';
+$labels['longaclfull'] = 'Control total incluyendo administración de carpetas';
+$labels['longaclread'] = 'La carpeta puede ser abierta para lectura';
+$labels['longaclwrite'] = 'Los mensajes pueden ser marcados, escritos o copiados a la carpeta';
+$labels['longacldelete'] = 'Los mensajes pueden ser eliminados';
+$labels['longaclother'] = 'Otros derechos de acceso';
+$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
+$labels['arialabelaclactions'] = 'Listar acciones';
+$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
+$messages['deleting'] = 'Derechos de acceso de eliminación...';
+$messages['saving'] = 'Guardando derechos de acceso...';
+$messages['updatesuccess'] = 'Se han cambiado los derechos de acceso exitosamente';
+$messages['deletesuccess'] = 'Se han eliminado los derechos de acceso exitosamente';
+$messages['createsuccess'] = 'Se han agregado los derechos de acceso exitosamente';
+$messages['updateerror'] = 'No es posible actualizar los derechos de acceso';
+$messages['deleteerror'] = 'No es posible eliminar los derechos de acceso';
+$messages['createerror'] = 'No es posible agregar los derechos de acceso';
+$messages['deleteconfirm'] = '¿Estás seguro de que deseas eliminar los derechos de acceso a usuario(s) seleccionado(s)?';
+$messages['norights'] = '¡No se hace especificado un derecho!';
+$messages['nouser'] = '¡No se ha especificado un nombre de usuario!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartiendo';
+$labels['myrights'] = 'Permisos de acceso';
+$labels['username'] = 'Usuario:';
+$labels['advanced'] = 'Modo avanzado';
+$labels['newuser'] = 'Agregar entrada';
+$labels['editperms'] = 'Editar permisos';
+$labels['actions'] = 'Acciones para los permisos de acceso...';
+$labels['anyone'] = 'Todos los usuarios (cualquiera)';
+$labels['anonymous'] = 'Invitado (anonimo)';
+$labels['identifier'] = 'Identificacion';
+$labels['acll'] = 'Buscar';
+$labels['aclr'] = 'Leer mensajes';
+$labels['acls'] = 'Mantener como visualizado';
+$labels['aclw'] = 'Escribir marcadores';
+$labels['acli'] = 'Insertar (Copiar en)';
+$labels['aclp'] = 'Publicar';
+$labels['aclc'] = 'Crear subcarpetas';
+$labels['aclk'] = 'Crear subcarpetas';
+$labels['acld'] = 'Eliminar mensajes';
+$labels['aclt'] = 'Eliminar mensajes';
+$labels['acle'] = 'Descartar';
+$labels['aclx'] = 'Eliminar carpeta';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Anotar mensajes';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Otro';
+$labels['aclread'] = 'Leer';
+$labels['aclwrite'] = 'Escribir';
+$labels['acldelete'] = 'Eliminar';
+$labels['shortacll'] = 'Buscar';
+$labels['shortaclr'] = 'Leer';
+$labels['shortacls'] = 'Mantener';
+$labels['shortaclw'] = 'Escribir';
+$labels['shortacli'] = 'Insertar';
+$labels['shortaclp'] = 'Publicar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Eliminar';
+$labels['shortaclt'] = 'Eliminar';
+$labels['shortacle'] = 'Descartar';
+$labels['shortaclx'] = 'Borrado de carpeta';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Anotar';
+$labels['shortaclother'] = 'Otro';
+$labels['shortaclread'] = 'Leer';
+$labels['shortaclwrite'] = 'Escribir';
+$labels['shortacldelete'] = 'Eliminar';
+$labels['longacll'] = 'La carpeta es visible en listas y es posible suscribirse a ella';
+$labels['longaclr'] = 'La carpeta se puede abirir para lectura';
+$labels['longacls'] = 'El marcador de Mensajes Vistos puede ser modificado';
+$labels['longaclw'] = 'Los marcadores de mensajes y palabras clave se pueden modificar, excepto Visto y Eliminado';
+$labels['longacli'] = 'En esta carpeta se pueden escribir o copiar mensajes';
+$labels['longaclp'] = 'En esta carpeta se pueden publicar mensajes';
+$labels['longaclc'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
+$labels['longaclk'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
+$labels['longacld'] = 'El marcador de Mensaje Eliminado puede ser modificado';
+$labels['longaclt'] = 'El marcador de Mensaje Eliminado puede ser modificado';
+$labels['longacle'] = 'Los mensajes pueden ser descartados';
+$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
+$labels['longacla'] = 'Los permisos de acceso de esta carpeta pueden ser modificados';
+$labels['longacln'] = 'La metainformación de mensajes compartidos (anotaciones) puede ser cambiada';
+$labels['longaclfull'] = 'Control total incluyendo la administracion de carpeta';
+$labels['longaclread'] = 'La carpeta se puede abrir para lectura';
+$labels['longaclwrite'] = 'En esta carpeta los mensajes pueden ser marcados, escritos o copiados';
+$labels['longacldelete'] = 'Los mensajes se pueden eliminar';
+$labels['longaclother'] = 'Otros permisos de acceso';
+$labels['ariasummaryacltable'] = 'Listado de permisos de acceso';
+$labels['arialabelaclactions'] = 'Listar acciones';
+$labels['arialabelaclform'] = 'Formulario de permisos de acceso';
+$messages['deleting'] = 'Eliminando permisos de acceso...';
+$messages['saving'] = 'Salvando permisos de acceso...';
+$messages['updatesuccess'] = 'Permisos de acceso modificados satisfactoriamente';
+$messages['deletesuccess'] = 'Permisos de acceso eliminados correctamente';
+$messages['createsuccess'] = 'Permisos de acceso agregados satisfactoriamente';
+$messages['updateerror'] = 'No se pudieron actualizar los permisos de acceso';
+$messages['deleteerror'] = 'No se pueden eliminar los permisos de acceso';
+$messages['createerror'] = 'No se pueden agregar los permisos de acceso';
+$messages['deleteconfirm'] = 'Estas seguro que queres remover los permisos de acceso a el/los usuario(s) seleccionado/s?';
+$messages['norights'] = 'Ningun permiso ha sido especificado!';
+$messages['nouser'] = 'Ningun nombre de usuario ha sido especificado!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartir';
+$labels['myrights'] = 'Permisos de acceso';
+$labels['username'] = 'Usuario:';
+$labels['advanced'] = 'Modo avanzado';
+$labels['newuser'] = 'Añadir una entrada';
+$labels['editperms'] = 'Editar permisos';
+$labels['actions'] = 'Acciones sobre los permisos de acceso…';
+$labels['anyone'] = 'Todos los usuarios (cualquiera)';
+$labels['anonymous'] = 'Invitados (anónimo)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Búsqueda';
+$labels['aclr'] = 'Leer mensajes';
+$labels['acls'] = 'Mantener como "Leído';
+$labels['aclw'] = 'Escribir etiquetas';
+$labels['acli'] = 'Insertar (Copiar dentro)';
+$labels['aclp'] = 'Enviar';
+$labels['aclc'] = 'Crear subcarpetas';
+$labels['aclk'] = 'Crear subcarpetas';
+$labels['acld'] = 'Borrar mensajes';
+$labels['aclt'] = 'Borrar mensajes';
+$labels['acle'] = 'Expurgar';
+$labels['aclx'] = 'Borrar carpeta';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Anotar mensajes';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Otro';
+$labels['aclread'] = 'Leer';
+$labels['aclwrite'] = 'Escribir';
+$labels['acldelete'] = 'Borrar';
+$labels['shortacll'] = 'Búsqueda';
+$labels['shortaclr'] = 'Leer';
+$labels['shortacls'] = 'Conservar';
+$labels['shortaclw'] = 'Escribir';
+$labels['shortacli'] = 'Insertar';
+$labels['shortaclp'] = 'Enviar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Borrar';
+$labels['shortaclt'] = 'Borrar';
+$labels['shortacle'] = 'Expurgar';
+$labels['shortaclx'] = 'Borrar carpeta';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Anotar';
+$labels['shortaclother'] = 'Otro';
+$labels['shortaclread'] = 'Leer';
+$labels['shortaclwrite'] = 'Escribir';
+$labels['shortacldelete'] = 'Borrar';
+$labels['longacll'] = 'La carpeta es visible en las listas y es posible suscribirse a ella';
+$labels['longaclr'] = 'Se puede abrir la carpeta para leer';
+$labels['longacls'] = 'Se pueden cambiar los mensajes con la etiqueta "Leído';
+$labels['longaclw'] = 'Las etiquetas de mensaje y las palabras clave se pueden cambiar, excepto "Leído" y "Borrado';
+$labels['longacli'] = 'Se pueden escribir mensajes o copiarlos a la carpeta';
+$labels['longaclp'] = 'Se pueden enviar mensajes a esta carpeta';
+$labels['longaclc'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
+$labels['longaclk'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
+$labels['longacld'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
+$labels['longaclt'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
+$labels['longacle'] = 'No se pueden expurgar los mensajes';
+$labels['longaclx'] = 'La carpeta se puede borrar o renombrar';
+$labels['longacla'] = 'Se pueden cambiar los permisos de acceso';
+$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) pueden cambiarse';
+$labels['longaclfull'] = 'Control total, incluyendo la gestión de carpetas';
+$labels['longaclread'] = 'Se puede abrir la carpeta para leer';
+$labels['longaclwrite'] = 'Se pueden etiquetar, escribir o copiar mensajes a la carpeta';
+$labels['longacldelete'] = 'Los mensajes se pueden borrar';
+$labels['longaclother'] = 'Otros derechos de acceso';
+$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
+$labels['arialabelaclactions'] = 'Lista de acciones';
+$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
+$messages['deleting'] = 'Borrando permisos de acceso…';
+$messages['saving'] = 'Guardando permisos de acceso…';
+$messages['updatesuccess'] = 'Se han cambiado los permisos de acceso';
+$messages['deletesuccess'] = 'Se han borrado los permisos de acceso';
+$messages['createsuccess'] = 'Se han añadido los permisos de acceso';
+$messages['updateerror'] = 'No ha sido posible actualizar los derechos de acceso';
+$messages['deleteerror'] = 'No se han podido borrar los permisos de acceso';
+$messages['createerror'] = 'No se han podido añadir los permisos de acceso';
+$messages['deleteconfirm'] = '¿Seguro que quiere borrar los permisos de acceso del usuairo seleccionado?';
+$messages['norights'] = 'No se han especificado los permisos de acceso';
+$messages['nouser'] = 'No se ha especificado un nombre de usuario';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Jagamine';
+$labels['myrights'] = 'Ligipääsuõigused';
+$labels['username'] = 'Kasutaja:';
+$labels['advanced'] = 'laiendatud režiim';
+$labels['newuser'] = 'Lisa sissekanne';
+$labels['editperms'] = 'Muuda õigusi';
+$labels['actions'] = 'Ligipääsuõiguste toimingud...';
+$labels['anyone'] = 'Kõik kasutajad';
+$labels['anonymous'] = 'Külalised (anonüümsed)';
+$labels['identifier'] = 'Tuvastaja';
+$labels['acll'] = 'Ãœlevaade';
+$labels['aclr'] = 'Lugeda kirju';
+$labels['acls'] = 'Hoia nähtud olekut';
+$labels['aclw'] = 'Salvesta lipud';
+$labels['acli'] = 'Sisesta (kopeeri)';
+$labels['aclp'] = 'Postita';
+$labels['aclc'] = 'Luua alamkaustu';
+$labels['aclk'] = 'Luua alamkaustu';
+$labels['acld'] = 'Kustutada kirju';
+$labels['aclt'] = 'Kustutada kirju';
+$labels['acle'] = 'Eemalda';
+$labels['aclx'] = 'Kustutada kausta';
+$labels['acla'] = 'Administreerida';
+$labels['acln'] = 'Annoteeri kirja';
+$labels['aclfull'] = 'Täis kontroll';
+$labels['aclother'] = 'Muu';
+$labels['aclread'] = 'Loe';
+$labels['aclwrite'] = 'Kirjuta';
+$labels['acldelete'] = 'Kustuta';
+$labels['shortacll'] = 'Ãœlevaade';
+$labels['shortaclr'] = 'Loe';
+$labels['shortacls'] = 'Säilita';
+$labels['shortaclw'] = 'Kirjuta';
+$labels['shortacli'] = 'Lisa';
+$labels['shortaclp'] = 'Postita';
+$labels['shortaclc'] = 'Loo';
+$labels['shortaclk'] = 'Loo';
+$labels['shortacld'] = 'Kustuta';
+$labels['shortaclt'] = 'Kustuta';
+$labels['shortacle'] = 'Eemalda';
+$labels['shortaclx'] = 'Kausta kustutamine';
+$labels['shortacla'] = 'Administreerida';
+$labels['shortacln'] = 'Annoteeri';
+$labels['shortaclother'] = 'Muu';
+$labels['shortaclread'] = 'Loe';
+$labels['shortaclwrite'] = 'Kirjuta';
+$labels['shortacldelete'] = 'Kustuta';
+$labels['longacll'] = 'See kaust on nimekirjas nähtav ja seda saab tellida';
+$labels['longaclr'] = 'Kausta saab lugemiseks avada';
+$labels['longacls'] = 'Kirja loetuse lippu saab muuta';
+$labels['longaclw'] = 'Kirja lippe ja otsingusõnu saab muuta, väljaarvatud loetud ja kustutatud';
+$labels['longacli'] = 'Kirju saab salvestada ja kopeerida antud kausta';
+$labels['longaclp'] = 'Kirju saab postitada antud kausta';
+$labels['longaclc'] = 'Kaustasi saab luua (või ümber nimetada) otse siia kausta alla.';
+$labels['longaclk'] = 'Kaustu saab luua (või ümber nimetada) otse siia kausta alla';
+$labels['longacld'] = 'Kirja kustutamis lippu saab muuta';
+$labels['longaclt'] = 'Kirja kustutamis lippu saab muuta';
+$labels['longacle'] = 'Kirju saab eemaldada';
+$labels['longaclx'] = 'Seda kausta ei saa kustutada ega ümber nimetada';
+$labels['longacla'] = 'Selle kausta ligipääsuõigusi saab muuta';
+$labels['longacln'] = 'Kirja jagatud metainfot (annotatsioonid) saab muuta';
+$labels['longaclfull'] = 'Täielik kontroll koos kaustade haldamisega';
+$labels['longaclread'] = 'Kausta saab lugemiseks avada';
+$labels['longaclwrite'] = 'Kirju saab märgistada, salvestada või kopeerida kausta';
+$labels['longacldelete'] = 'Kirju saab kustutada';
+$labels['longaclother'] = 'Muud ligipääsu õigused';
+$labels['ariasummaryacltable'] = 'Nimekir ligipääsu õigustest';
+$labels['arialabelaclactions'] = 'Näita tegevusi';
+$labels['arialabelaclform'] = 'Ligipääsu õiguste vorm';
+$messages['deleting'] = 'Ligipääsuõiguste kustutamine...';
+$messages['saving'] = 'Ligipääsuõiguste salvestamine...';
+$messages['updatesuccess'] = 'Ligipääsuõigused on muudetud';
+$messages['deletesuccess'] = 'Ligipääsuõigused on kustutatud';
+$messages['createsuccess'] = 'Ligipääsuõigused on lisatud';
+$messages['updateerror'] = 'Ligipääsuõiguste uuendamine nurjus';
+$messages['deleteerror'] = 'Ligipääsuõiguste kustutamine nurjus';
+$messages['createerror'] = 'Ligipääsuõiguste andmine nurjus';
+$messages['deleteconfirm'] = 'Oled sa kindel, et sa soovid valitudkasutaja(te) õiguseid kustutada?';
+$messages['norights'] = 'Õigusi pole määratud!';
+$messages['nouser'] = 'Kasutajanime pole määratud!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Partekatzen';
+$labels['myrights'] = 'Sarbide-eskubideak';
+$labels['username'] = 'Erabiltzailea:';
+$labels['advanced'] = 'modu aurreratua';
+$labels['newuser'] = 'Gehitu sarrera';
+$labels['editperms'] = 'Editatu baimenak';
+$labels['actions'] = 'Sarbide-eskubideen ekintzak...';
+$labels['anyone'] = 'Erabiltzaile guztiak (edozein)';
+$labels['anonymous'] = 'Gonbidatuak (anonimo)';
+$labels['identifier'] = 'Identifikatzailea';
+$labels['acll'] = 'Bilatu';
+$labels['aclr'] = 'Irakurri mezuak';
+$labels['acls'] = 'Mantendu ikusita egoera';
+$labels['aclw'] = 'Idatzi banderak';
+$labels['acli'] = 'Txertatu (kopiatu barnean)';
+$labels['aclp'] = 'Posta';
+$labels['aclc'] = 'Sortu azpikarpetak';
+$labels['aclk'] = 'Sortu azpikarpetak';
+$labels['acld'] = 'Ezabatu mezuak';
+$labels['aclt'] = 'Ezabatu mezuak';
+$labels['acle'] = 'Kendu';
+$labels['aclx'] = 'Ezabatu karpeta';
+$labels['acla'] = 'Administratu';
+$labels['acln'] = 'Idatzi mezuak';
+$labels['aclfull'] = 'Kontrol osoa';
+$labels['aclother'] = 'Beste';
+$labels['aclread'] = 'Irakurri';
+$labels['aclwrite'] = 'Idatzi';
+$labels['acldelete'] = 'Ezabatu';
+$labels['shortacll'] = 'Bilatu';
+$labels['shortaclr'] = 'Irakurri';
+$labels['shortacls'] = 'Mantendu';
+$labels['shortaclw'] = 'Idatzi';
+$labels['shortacli'] = 'Txertatu';
+$labels['shortaclp'] = 'Bidali';
+$labels['shortaclc'] = 'Sortu';
+$labels['shortaclk'] = 'Sortu';
+$labels['shortacld'] = 'Ezabatu';
+$labels['shortaclt'] = 'Ezabatu';
+$labels['shortacle'] = 'Kendu';
+$labels['shortaclx'] = 'Ezabatu karpeta';
+$labels['shortacla'] = 'Administratu';
+$labels['shortacln'] = 'Idatzi';
+$labels['shortaclother'] = 'Beste';
+$labels['shortaclread'] = 'Irakurri';
+$labels['shortaclwrite'] = 'Idatzi';
+$labels['shortacldelete'] = 'Ezabatu';
+$labels['longacll'] = 'Karpeta hau zerrendan ikusgai dago eta harpidetzen ahal zara';
+$labels['longaclr'] = 'Karpeta ireki daiteke irakurtzeko';
+$labels['longacls'] = 'Mezuen ikusita bandera aldatu daiteke';
+$labels['longaclw'] = 'Mezuen banderak eta gako-hitzak alda daitezke, ikusita eta ezabatuta salbu';
+$labels['longacli'] = 'Mezuak karpetara idatzi edo kopiatu daitezke';
+$labels['longaclp'] = 'Mezuak bidali daitezke karpeta honetara';
+$labels['longaclc'] = 'Karpetak sor daitezke (edo berrizendatu) zuzenean karpeta honetan';
+$labels['longaclk'] = 'Karpetak sor daitezke (edo berrizendatu) karpeta honetan';
+$labels['longacld'] = 'Mezuen ezabatu bandera alda daiteke';
+$labels['longaclt'] = 'Mezuen ezabatu bandera alda daiteke';
+$labels['longacle'] = 'Mezuak betiko ezaba daitezke';
+$labels['longaclx'] = 'Karpeta ezaba edo berrizenda daiteke';
+$labels['longacla'] = 'Karpetaren sarbide eskubideak alda daitezke';
+$labels['longacln'] = 'Partekatutatko mezuen metadatuak (oharrak) alda daitezke';
+$labels['longaclfull'] = 'Kontrol osoa, karpetaren administrazioa barne';
+$labels['longaclread'] = 'Karpeta ireki daiteke irakurtzeko';
+$labels['longaclwrite'] = 'Mezuak marka, idatzi edo kopia daitezke karpetara';
+$labels['longacldelete'] = 'Mezuak ezaba daitezke';
+$labels['longaclother'] = 'Beste sarbide-eskubideak';
+$labels['ariasummaryacltable'] = 'Sarbide-eskubideen zerrenda';
+$labels['arialabelaclactions'] = 'Zerrendatu ekintzak';
+$labels['arialabelaclform'] = 'Sarbide-eskubideen formularioa';
+$messages['deleting'] = 'Sarbide-eskubideak ezabatzen...';
+$messages['saving'] = 'Sarbide-eskubideak gordetzen...';
+$messages['updatesuccess'] = 'Sarbide-eskubideak ongi aldatu dira';
+$messages['deletesuccess'] = 'Sarbide-eskubideak ongi ezabatu dira';
+$messages['createsuccess'] = 'Sarbide-eskubideak ongi gehitu dira';
+$messages['updateerror'] = 'Ezin dira eguneratu sarbide-eskubideak';
+$messages['deleteerror'] = 'Ezin dira ezabatu sarbide-eskubideak';
+$messages['createerror'] = 'Ezin dira gehitu sarbide-eskubideak';
+$messages['deleteconfirm'] = 'Seguru zaude hautatutako erabiltzaile(ar)en sarbide-eskubideak ezabatu nahi duzula?';
+$messages['norights'] = 'Eskubideak ez dira zehaztu!';
+$messages['nouser'] = 'Erabiltzaile-izana ez da zehaztu!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'اشتراک گذاری';
+$labels['username'] = 'کاربر:';
+$labels['newuser'] = 'اÙزودن مدخل';
+$labels['aclw'] = 'نوشتن نشانه ها';
+$labels['aclp'] = 'ارسال';
+$labels['acla'] = 'مدیر';
+$labels['aclfull'] = 'کنترل کامل';
+$labels['aclother'] = 'دیگر';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'اشتراک‌گذاری';
+$labels['myrights'] = 'حقوق دسترسی';
+$labels['username'] = 'کاربر:';
+$labels['advanced'] = 'حالت پیشرÙته';
+$labels['newuser'] = 'اÙزودن ورودی';
+$labels['editperms'] = 'ویرایش مجوزها';
+$labels['actions'] = 'Ùعالیت‌های حق دسترسی...';
+$labels['anyone'] = 'همه‌ی کاربران (هر کسی)';
+$labels['anonymous'] = 'مهمان‌ها (ناشناس)';
+$labels['identifier'] = 'شناساگر';
+$labels['acll'] = 'یاÙتن';
+$labels['aclr'] = 'پیام‌های خوانده شده';
+$labels['acls'] = 'نگه داشتن حالت بازدید';
+$labels['aclw'] = 'پرچم‌های نوشتن';
+$labels['acli'] = 'وارد کردن (رونوشت در)';
+$labels['aclp'] = 'نوشته';
+$labels['aclc'] = 'ایجاد زیرپوشه‌ها';
+$labels['aclk'] = 'ایجاد زیرپوشه‌ها';
+$labels['acld'] = 'حذ٠پیام‌ها';
+$labels['aclt'] = 'حذ٠پیام‌ها';
+$labels['acle'] = 'پاک کردن';
+$labels['aclx'] = 'حذ٠پوشه';
+$labels['acla'] = 'اداره کردن';
+$labels['acln'] = 'حاشیه نویسی پیام ها';
+$labels['aclfull'] = 'کنترل کامل';
+$labels['aclother'] = 'دیگر';
+$labels['aclread'] = 'خواندن';
+$labels['aclwrite'] = 'نوشتن';
+$labels['acldelete'] = 'حذ٠کردن';
+$labels['shortacll'] = 'یاÙتن';
+$labels['shortaclr'] = 'خواندن';
+$labels['shortacls'] = 'نگه داشتن';
+$labels['shortaclw'] = 'نوشتن';
+$labels['shortacli'] = 'جاگذارى';
+$labels['shortaclp'] = 'پست کردن';
+$labels['shortaclc'] = 'ایجاد';
+$labels['shortaclk'] = 'ایجاد';
+$labels['shortacld'] = 'حذÙ';
+$labels['shortaclt'] = 'حذÙ';
+$labels['shortacle'] = 'پاک کردن';
+$labels['shortaclx'] = 'حذ٠پوشه';
+$labels['shortacla'] = 'اداره کردن';
+$labels['shortacln'] = 'حاشیه نویسی';
+$labels['shortaclother'] = 'دیگر';
+$labels['shortaclread'] = 'خواندن';
+$labels['shortaclwrite'] = 'نوشتن';
+$labels['shortacldelete'] = 'حذ٠کردن';
+$labels['longacll'] = 'پوشه در Ùهرست‌ها قابل مشاهده است Ùˆ می‌تواند مشترک آن شد';
+$labels['longaclr'] = 'پوشه می‌تواند برای خواندن باز شود';
+$labels['longacls'] = 'پرچم بازدید پیام‌ها می‌تواند تغییر داده شود';
+$labels['longaclw'] = 'پرچم Ùˆ کلیدواژه پیام‌ها می‌تواند تغییر داده شود، به غیر از بازدید Ùˆ حذÙ';
+$labels['longacli'] = 'پیام‌ها می‌توانند کپی یا نوشته شوند به پوشه';
+$labels['longaclp'] = 'پیام‌ها می‌توانند پست شوند به این پوشه';
+$labels['longaclc'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
+$labels['longaclk'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
+$labels['longacld'] = 'پرچم حذ٠پیام‌ها می‌تواند تغییر داده شود';
+$labels['longaclt'] = 'پرچم حذ٠پیام‌ها می‌تواند تغییر داده شود';
+$labels['longacle'] = 'پیام‌ها می‌توانند حذ٠شوند';
+$labels['longaclx'] = 'پوشه می‌تواند حذ٠یا تغییر نام داده شود';
+$labels['longacla'] = 'حقوق دسترسی پوشه می‌تواند تغییر داده شود';
+$labels['longacln'] = 'اطلاعات متا اشتراک گذاشته شده پیام‌ها (حاشیه‌ها) می‌تواند تغییر داده شوند';
+$labels['longaclfull'] = 'کنترل کامل شما مدیریت پوشه';
+$labels['longaclread'] = 'پوشه می‌تواند برای خواندن باز شود';
+$labels['longaclwrite'] = 'پیام‌ها می‌توانند علامتگذاری، نوشته و یا کپی شوند در پوشه';
+$labels['longacldelete'] = 'پیام‌ها می‌توانند حذ٠شوند';
+$labels['longaclother'] = 'قوانین دسترسی دیگر';
+$labels['ariasummaryacltable'] = 'Ùهرست قوانین دسترسی';
+$labels['arialabelaclactions'] = 'Ùهرست کنش‌ها';
+$labels['arialabelaclform'] = 'Ùرم قوانین دسترسی';
+$messages['deleting'] = 'حذ٠کردن حقوق دسترسی...';
+$messages['saving'] = 'ذخیره حقوق دسترسی...';
+$messages['updatesuccess'] = 'حقوق دسترسی با کام‌یابی تغییر کردند';
+$messages['deletesuccess'] = 'حقوق دسترسی با کام‌یابی حذ٠شدند';
+$messages['createsuccess'] = 'حقوق دسترسی با کام‌یابی اضاÙÙ‡ شدند';
+$messages['updateerror'] = 'ناتوانی در روزآمد کردن حقوق دسترسی';
+$messages['deleteerror'] = 'ناتوانی در حذ٠حقوق دسترسی';
+$messages['createerror'] = 'ناتوانی در اضاÙÙ‡ کردن حقوق دسترسی';
+$messages['deleteconfirm'] = 'آیا شما مطمئن هستید که می‌خواهید حقوق دسترسی را برای کاربر(ان) انتخاب شده حذ٠نمایید؟';
+$messages['norights'] = 'هیچ حقی مشخص نشده است!';
+$messages['nouser'] = 'هیج نام‌کاربری‌ای مشخص نشده است!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Jakaminen';
+$labels['myrights'] = 'Käyttöoikeudet';
+$labels['username'] = 'Käyttäjä:';
+$labels['editperms'] = 'Muokkaa oikeuksia';
+$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)';
+$labels['anonymous'] = 'Vieraat (anonyymit)';
+$labels['aclc'] = 'Luo alikansioita';
+$labels['aclk'] = 'Luo alikansioita';
+$labels['acld'] = 'Poista viestejä';
+$labels['aclt'] = 'Poista viestejä';
+$labels['aclx'] = 'Poista kansio';
+$labels['aclfull'] = 'Täydet käyttöoikeudet';
+$labels['aclother'] = 'Muu';
+$labels['aclread'] = 'Luku';
+$labels['aclwrite'] = 'Kirjoitus';
+$labels['acldelete'] = 'Poisto';
+$labels['shortaclc'] = 'Luo';
+$labels['shortaclk'] = 'Luo';
+$labels['shortacld'] = 'Poista';
+$labels['shortaclt'] = 'Poista';
+$labels['shortaclother'] = 'Muu';
+$labels['shortaclread'] = 'Luku';
+$labels['shortaclwrite'] = 'Kirjoitus';
+$labels['shortacldelete'] = 'Poisto';
+$labels['longaclr'] = 'Kansion voi avata lukua varten';
+$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen';
+$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa';
+$messages['deleting'] = 'Poistetaan käyttöoikeuksia...';
+$messages['saving'] = 'Tallennetaan käyttöoikeuksia...';
+$messages['updatesuccess'] = 'Käyttöoikeuksia muutettiin onnistuneesti';
+$messages['deletesuccess'] = 'Käyttöoikeuksia poistettiin onnistuneesti';
+$messages['createsuccess'] = 'Käyttöoikeuksia lisättiin onnistuneesti';
+$messages['updateerror'] = 'Käyttöoikeuksien päivitys epäonnistui';
+$messages['deleteerror'] = 'Käyttöoikeuksien poistaminen epäonnistui';
+$messages['createerror'] = 'Käyttöoikeuksien lisääminen epäonnistui';
+$messages['norights'] = 'Oikeuksia ei ole määritelty!';
+$messages['nouser'] = 'Käyttäjänimeä ei ole määritelty!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Deiling';
+$labels['myrights'] = 'Atgongdar-rættindi';
+$labels['username'] = 'Brúkari:';
+$labels['advanced'] = 'Víðkað útgáva';
+$labels['newuser'] = 'Legg inn';
+$labels['editperms'] = 'Broyt atgonguloyvi';
+$labels['actions'] = 'Stillingar til atgongu-rættindi';
+$labels['anyone'] = 'Allir brúkarir (øll)';
+$labels['anonymous'] = 'Gestir (dulnevnd)';
+$labels['identifier'] = 'dátuheiti';
+$labels['acll'] = 'Slá upp';
+$labels['aclr'] = 'Les boð';
+$labels['acls'] = 'Varveit lisna støðu';
+$labels['aclw'] = 'Hvít Fløgg';
+$labels['acli'] = 'Inn';
+$labels['aclp'] = 'Send';
+$labels['aclc'] = 'Ger undurmappur';
+$labels['aclk'] = 'Ger undurmappur';
+$labels['acld'] = 'Strika boð';
+$labels['aclt'] = 'Strika boð';
+$labels['acle'] = 'Strika út';
+$labels['aclx'] = 'Strika mappu';
+$labels['acla'] = 'Umsit';
+$labels['acln'] = 'Viðmerk boð';
+$labels['aclfull'] = 'Full stýring';
+$labels['aclother'] = 'Annað';
+$labels['aclread'] = 'Les';
+$labels['aclwrite'] = 'Skriva';
+$labels['acldelete'] = 'Strika';
+$labels['shortacll'] = 'Slá upp';
+$labels['shortaclr'] = 'Les';
+$labels['shortacls'] = 'Varveit';
+$labels['shortaclw'] = 'Skriva';
+$labels['shortacli'] = 'Legg inn';
+$labels['shortaclp'] = 'Send';
+$labels['shortaclc'] = 'Stovna';
+$labels['shortaclk'] = 'Stovna';
+$labels['shortacld'] = 'Strika';
+$labels['shortaclt'] = 'Strika';
+$labels['shortacle'] = 'Strika út';
+$labels['shortaclx'] = 'Strika mappu';
+$labels['shortacla'] = 'Umsit';
+$labels['shortacln'] = 'Viðmerk';
+$labels['shortaclother'] = 'Annað';
+$labels['shortaclread'] = 'Les';
+$labels['shortaclwrite'] = 'Skriva';
+$labels['shortacldelete'] = 'Strika';
+$labels['longacll'] = 'Mappan er sjónlig á listum og til ber at tekna seg fyri hana';
+$labels['longaclr'] = 'Mappan kann verða opna til lesná';
+$labels['longacls'] = 'Viðmerki ið vísur á lisin boð kann broytast';
+$labels['longaclw'] = 'Boð viðmerki og lyklaorð kunnu øll broytast, undantikið Sæð og Strika';
+$labels['longacli'] = 'Boð kunnu verða skriva og flutt til eina aðra mappu';
+$labels['longaclp'] = 'Boð kunnu verða send til hesa mappu';
+$labels['longaclc'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
+$labels['longaclk'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
+$labels['longacld'] = 'Viðmerki ið vísur á strika boð kann broytast';
+$labels['longaclt'] = 'Viðmerki ið vísur á strika boð kann broytast';
+$labels['longacle'] = 'Boð kunnu verða strika út';
+$labels['longaclx'] = 'Mappan kann verða strika ella umdoypt';
+$labels['longacla'] = 'Atgongdu-rættindini til hesa mappu kunnu broytast';
+$labels['longacln'] = '"Metadata" (viðmerking) av boðum kann broytast';
+$labels['longaclfull'] = 'Full stýring, írokna mappu-umsiting';
+$labels['longaclread'] = 'Mappan kann latast upp til lesná';
+$labels['longaclwrite'] = 'Boð kunnu verða viðmerkt, skriva ella avritast til mappuna';
+$labels['longacldelete'] = 'Boð kunnu verða strikað';
+$labels['longaclother'] = 'Aðrar heimildir';
+$labels['ariasummaryacltable'] = 'Listi yvir brúkara heimildum';
+$labels['arialabelaclactions'] = 'Vís gerðir';
+$labels['arialabelaclform'] = 'Heimilda frymil';
+$messages['deleting'] = 'Strikar atgongu-rættindi...';
+$messages['saving'] = 'Goymur atgongu-rættindi...';
+$messages['updatesuccess'] = 'Atgongu-rættindi broytt væleyndað';
+$messages['deletesuccess'] = 'Atgongu-rættindi strika væleyndað';
+$messages['createsuccess'] = 'Atgongu-rættindi stovna væleyndað';
+$messages['updateerror'] = 'Til ber ikki at dagføra atgongu-rættindi';
+$messages['deleteerror'] = 'Til ber ikki at strika atgongu-rættindi';
+$messages['createerror'] = 'Til ber ikki at leggja aftrat atgongu-rættindi';
+$messages['deleteconfirm'] = 'Ert tú vís/ur í at tú ynskir at strika atgongu-rættindini hjá valdum brúkar(um)?';
+$messages['norights'] = 'Eingi rættindi tilskila!';
+$messages['nouser'] = 'Einki brúkaranavn var tilskila!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Partage';
+$labels['myrights'] = 'Droits d\'accès';
+$labels['username'] = 'Utilisateur :';
+$labels['advanced'] = 'Mode avancé';
+$labels['newuser'] = 'Ajouter une entrée';
+$labels['editperms'] = 'Modifier les permissions';
+$labels['actions'] = 'Actions des droits d\'accès...';
+$labels['anyone'] = 'Tous les utilisateurs (n\'importe qui)';
+$labels['anonymous'] = 'Invités (anonyme)';
+$labels['identifier'] = 'Identifiant';
+$labels['acll'] = 'Consultation';
+$labels['aclr'] = 'Lire les courriels';
+$labels['acls'] = 'Garder l\'état « vu »';
+$labels['aclw'] = 'Drapeaux d\'écriture';
+$labels['acli'] = 'Insérer (copier dans)';
+$labels['aclp'] = 'Publier';
+$labels['aclc'] = 'Créer des sous-dossiers';
+$labels['aclk'] = 'Créer des sous-dossiers';
+$labels['acld'] = 'Supprimer des courriels';
+$labels['aclt'] = 'Supprimer des courriels';
+$labels['acle'] = 'Purger';
+$labels['aclx'] = 'Supprimer un dossier';
+$labels['acla'] = 'Administrer';
+$labels['acln'] = 'Annoter les courriels';
+$labels['aclfull'] = 'Contrôle total';
+$labels['aclother'] = 'Autre';
+$labels['aclread'] = 'Lecture';
+$labels['aclwrite'] = 'Écriture';
+$labels['acldelete'] = 'Supprimer';
+$labels['shortacll'] = 'Consultation';
+$labels['shortaclr'] = 'Lecture';
+$labels['shortacls'] = 'Conserver';
+$labels['shortaclw'] = 'Écriture';
+$labels['shortacli'] = 'Insérer';
+$labels['shortaclp'] = 'Publier';
+$labels['shortaclc'] = 'Créer';
+$labels['shortaclk'] = 'Créer';
+$labels['shortacld'] = 'Supprimer';
+$labels['shortaclt'] = 'Supprimer';
+$labels['shortacle'] = 'Purger';
+$labels['shortaclx'] = 'Suppression de dossier';
+$labels['shortacla'] = 'Administrer';
+$labels['shortacln'] = 'Annoter';
+$labels['shortaclother'] = 'Autre';
+$labels['shortaclread'] = 'Lecture';
+$labels['shortaclwrite'] = 'Écriture';
+$labels['shortacldelete'] = 'Supprimer';
+$labels['longacll'] = 'Ce dossier est visible dans les listes et on peut s\'y abonner';
+$labels['longaclr'] = 'Le dossier peut-être ouvert en lecture';
+$labels['longacls'] = 'Le drapeau Vu des courriels peut-être changée';
+$labels['longaclw'] = 'Les drapeaux et mots-clés des courriels peuvent être changés, sauf pour Vu et Supprimé';
+$labels['longacli'] = 'Les courriels peuvent-être écrits ou copiés dans le dossier';
+$labels['longaclp'] = 'Les courriels peuvent-être publiés dans ce dossier';
+$labels['longaclc'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
+$labels['longaclk'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
+$labels['longacld'] = 'Le drapeau de suppression des courriels peut-être modifiée';
+$labels['longaclt'] = 'Le drapeau de suppression des courriels peut-être modifiée';
+$labels['longacle'] = 'Les courriels peuvent-être purgés';
+$labels['longaclx'] = 'Le dossier peut-être supprimé ou renommé';
+$labels['longacla'] = 'Les droits d\'accès du dossier peuvent être modifiés';
+$labels['longacln'] = 'Les métadonnées partagées des courriels (annotations) peuvent être changées';
+$labels['longaclfull'] = 'Contrôle total, incluant l\'administration des dossiers';
+$labels['longaclread'] = 'Le dossier peut-être ouvert en lecture';
+$labels['longaclwrite'] = 'Les courriels peuvent-être marqués, écrits ou copiés dans ce dossier';
+$labels['longacldelete'] = 'Les courriels peuvent être supprimés';
+$labels['longaclother'] = 'Autres droits d\'accès';
+$labels['ariasummaryacltable'] = 'Liste de droits d\'accès';
+$labels['arialabelaclactions'] = 'Lister les actions';
+$labels['arialabelaclform'] = 'Formulaire de droits d\'accès';
+$messages['deleting'] = 'Suppression des droits d\'accès…';
+$messages['saving'] = 'Enregistrement des droits d\'accès…';
+$messages['updatesuccess'] = 'Les droits d\'accès ont été changés avec succès';
+$messages['deletesuccess'] = 'Les droits d\'accès ont été supprimés avec succès';
+$messages['createsuccess'] = 'Les droits d\'accès ont été ajoutés avec succès';
+$messages['updateerror'] = 'Impossible de mettre à jour les droits d\'accès';
+$messages['deleteerror'] = 'Impossible de supprimer les droits d\'accès';
+$messages['createerror'] = 'Impossible d\'ajouter des droits d\'accès';
+$messages['deleteconfirm'] = 'Êtes-vous sûr de vouloir retirer les droits d\'accès des utilisateurs sélectionnés ?';
+$messages['norights'] = 'Aucun droit n\'a été spécifié !';
+$messages['nouser'] = 'Aucun nom d\'utilisateur n\'a été spécifié !';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Dielen';
+$labels['myrights'] = 'Tagong Rjochten';
+$labels['username'] = 'Brûker:';
+$labels['advanced'] = 'Avansearre modus';
+$labels['newuser'] = 'Ynfier taheakje';
+$labels['editperms'] = 'Bewurkje tagongsrjochten';
+$labels['actions'] = 'Tagong aksjes...';
+$labels['anyone'] = 'Alle brûkers (eltsenien)';
+$labels['anonymous'] = 'Gasten (anonym)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Opsykje';
+$labels['aclr'] = 'Lêzen berjochten';
+$labels['acls'] = 'Bewarje Sjoen steat';
+$labels['aclw'] = 'Skriuw flaggen';
+$labels['acli'] = 'Ynfoegje (Kopiearje yn)';
+$labels['aclp'] = 'Pleatse';
+$labels['aclc'] = 'Underlizzende mappen oanmeitsje';
+$labels['aclk'] = 'Underlizzende mappen oanmeitsje';
+$labels['acld'] = 'Berjochten wiskje';
+$labels['aclt'] = 'Berjochten wiskje';
+$labels['aclx'] = 'Map ferwiderje';
+$labels['acla'] = 'Beheare';
+$labels['aclfull'] = 'Folsleine kontrôle';
+$labels['aclother'] = 'Oars';
+$labels['aclread'] = 'Lêze';
+$labels['aclwrite'] = 'Skriuwe';
+$labels['acldelete'] = 'Ferwiderje';
+$labels['shortacll'] = 'Opsykje';
+$labels['shortaclr'] = 'Lêze';
+$labels['shortacls'] = 'Hâlde';
+$labels['shortaclw'] = 'Skriuwe';
+$labels['shortacli'] = 'Ynfoegje';
+$labels['shortaclp'] = 'Pleatse';
+$labels['shortaclc'] = 'Oanmeitsje';
+$labels['shortaclk'] = 'Oanmeitsje';
+$labels['shortacld'] = 'Ferwiderje';
+$labels['shortaclt'] = 'Ferwiderje';
+$labels['shortaclx'] = 'Map ferwiderje';
+$labels['shortacla'] = 'Beheare';
+$labels['shortaclother'] = 'Oars';
+$labels['shortaclread'] = 'Lêze';
+$labels['shortaclwrite'] = 'Skriuwe';
+$labels['shortacldelete'] = 'Ferwiderje';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Comhroinnt';
+$labels['myrights'] = 'Cearta rochtana';
+$labels['username'] = 'An tÚsáideoir:';
+$labels['advanced'] = 'Mód le hardroghanna';
+$labels['newuser'] = 'Cuir iontráil leis';
+$labels['editperms'] = 'Cuir na ceadanna in eagar';
+$labels['actions'] = 'Gníomhartha maidir le cearta rochtana...';
+$labels['anyone'] = 'Gach duine';
+$labels['anonymous'] = 'Aíonna (gan ainm)';
+$labels['identifier'] = 'Aitheantóir';
+$labels['acll'] = 'Cuardaigh';
+$labels['aclr'] = 'Léigh teachtaireachtaí';
+$labels['aclw'] = 'Scríobh bratacha';
+$labels['acli'] = 'Ionsáigh (macasamhlaigh isteach ann)';
+$labels['aclc'] = 'Cruthaigh fófhillteáin';
+$labels['aclk'] = 'Cruthaigh fofhillteáin';
+$labels['acld'] = 'Scrios teachtaireachtaí';
+$labels['aclt'] = 'Scrios teachtaireachtaí';
+$labels['acle'] = 'Scrios';
+$labels['aclx'] = 'Scrios an fillteán';
+$labels['acla'] = 'Riar';
+$labels['acln'] = 'Cuir nótaí le teachtaireachtaí';
+$labels['aclfull'] = 'Smacht iomlán';
+$labels['aclother'] = 'Eile';
+$labels['aclread'] = 'Léite';
+$labels['aclwrite'] = ' Cum';
+$labels['acldelete'] = 'Scrios';
+$labels['shortacll'] = 'Féach';
+$labels['shortaclr'] = 'Léite';
+$labels['shortacls'] = 'Coinnigh';
+$labels['shortaclw'] = 'Cum';
+$labels['shortacli'] = 'Ionsáigh';
+$labels['shortaclc'] = 'Cruthaigh';
+$labels['shortaclk'] = 'Cruthaigh';
+$labels['shortacld'] = 'Scrios';
+$labels['shortaclt'] = 'Scrios';
+$labels['shortacle'] = 'Bain den liosta';
+$labels['shortaclx'] = 'Scrios an fillteán';
+$labels['shortacla'] = 'Riaraigh';
+$labels['shortacln'] = 'Cuir nóta leis';
+$labels['shortaclother'] = 'Eile';
+$labels['shortaclread'] = 'Léite';
+$labels['shortaclwrite'] = 'Scríobh';
+$labels['shortacldelete'] = 'Scrios';
+$labels['longaclr'] = 'Is féidir an fillteán a oscailt chun é a léam';
+$labels['longacle'] = 'Is féidir teachtaireachtaí a bhaint de';
+$labels['longaclx'] = 'Is féidir an fillteán seo a scriosadh nó é athainmniú';
+$labels['longacla'] = 'Is féidir cearta rochtana an fhillteáin a athrú';
+$labels['longaclread'] = 'Is féidir an fillteán a oscailt chun é a léamh';
+$labels['longacldelete'] = 'Is féidir teachtaireachtaí a scriosadh';
+$labels['longaclother'] = 'Cearta rochtana eile';
+$labels['ariasummaryacltable'] = 'Liosta de na cearta rochtana';
+$labels['arialabelaclform'] = 'Cearta rochtana ó';
+$messages['createerror'] = 'Ní féidir cearta rochtana a chur leis';
+$messages['deleteconfirm'] = 'An bhfuil tú cinnte gur mian leat na cearta rochtana a bhaint den úsáideoir(í) roghnaithe?';
+$messages['norights'] = 'Níor sonraíodh aon chearta!';
+$messages['nouser'] = 'Níor sonraíodh aon ainm úsáideora!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartindo';
+$labels['myrights'] = 'Permisos de acceso';
+$labels['username'] = 'Utente:';
+$labels['advanced'] = 'Modo avanzado';
+$labels['newuser'] = 'Engadir entrada';
+$labels['editperms'] = 'Editar permisos';
+$labels['actions'] = 'Accións sobre os Permisos de acceso...';
+$labels['anyone'] = 'Todas as persoas usuarias (calquera)';
+$labels['anonymous'] = 'Persoas convidadas (anónimo)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Bloquear';
+$labels['aclr'] = 'Ler mensaxes';
+$labels['acls'] = 'Manter estado actividade';
+$labels['aclw'] = 'Marcas de lectura';
+$labels['acli'] = 'Engadir (Copiar en)';
+$labels['aclp'] = 'Envío';
+$labels['aclc'] = 'Crear subcartafoles';
+$labels['aclk'] = 'Crear subcartafoles';
+$labels['acld'] = 'Borrar mensaxes';
+$labels['aclt'] = 'Borrar mensaxes';
+$labels['acle'] = 'Expurga';
+$labels['aclx'] = 'Eliminar cartafol';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Crear anotacións para as mensaxes';
+$labels['aclfull'] = 'Control total';
+$labels['aclother'] = 'Outros';
+$labels['aclread'] = 'Lectura';
+$labels['aclwrite'] = 'Escritura';
+$labels['acldelete'] = 'Borrado';
+$labels['shortacll'] = 'Buscar';
+$labels['shortaclr'] = 'Ler';
+$labels['shortacls'] = 'Manter';
+$labels['shortaclw'] = 'Escribir';
+$labels['shortacli'] = 'Inserir';
+$labels['shortaclp'] = 'Publicar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Eliminar';
+$labels['shortaclt'] = 'Eliminar';
+$labels['shortacle'] = 'Expurga';
+$labels['shortaclx'] = 'Eliminar cartafol';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Crear anotación';
+$labels['shortaclother'] = 'Outros';
+$labels['shortaclread'] = 'Lectura';
+$labels['shortaclwrite'] = 'Escritura';
+$labels['shortacldelete'] = 'Eliminar';
+$labels['longacll'] = 'O cartafol é visíbel e pode ser subscrito';
+$labels['longaclr'] = 'Pódese abrir o cartafol para lectura';
+$labels['longacls'] = 'Pódese mudar o marcador de Mensaxes Enviadas';
+$labels['longaclw'] = 'Pódense mudar marcadores e palabras chave agás Vistas e Borradas';
+$labels['longacli'] = 'Pódense escreber ou copiar as mensaxes a este cartafol';
+$labels['longaclp'] = 'Pódense enviar as mensaxes a este cartafol';
+$labels['longaclc'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
+$labels['longaclk'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
+$labels['longacld'] = 'Pódense mudar as mensaxes coa marca Eliminar';
+$labels['longaclt'] = 'Pódense mudar as mensaxes coa marca Eliminar';
+$labels['longacle'] = 'As mensaxes poden ser expurgadas';
+$labels['longaclx'] = 'Pódese borrar ou renomear o cartafol';
+$labels['longacla'] = 'Pódense mudar os permisos de acceso ao cartafol';
+$labels['longacln'] = 'Pódense trocar as anotacións das mensaxes';
+$labels['longaclfull'] = 'Control total inclúe administración de cartafoles';
+$labels['longaclread'] = 'Pódese abrir o cartafol para lectura';
+$labels['longaclwrite'] = 'Pódense marcar, escribir ou copiar as mensaxes no cartafol';
+$labels['longacldelete'] = 'Pódense borrar as mensaxes';
+$labels['longaclother'] = 'Outros dereitos de acceso';
+$labels['ariasummaryacltable'] = 'Lista de dereitos de acceso';
+$labels['arialabelaclactions'] = 'Accións de lista';
+$labels['arialabelaclform'] = 'Formulario de dereitos de acceso';
+$messages['deleting'] = 'Borrando permisos de acceso...';
+$messages['saving'] = 'Gardando permisos de acceso...';
+$messages['updatesuccess'] = 'Mudados con éxito os permisos de acceso';
+$messages['deletesuccess'] = 'Borrados con éxito os permisos de acceso';
+$messages['createsuccess'] = 'Engadidos con éxito os permisos de acceso';
+$messages['updateerror'] = 'Non se poden actualizar os permisos de acceso';
+$messages['deleteerror'] = 'Non se poden borrar os permisos de acceso';
+$messages['createerror'] = 'Non se poden engadir permisos de acceso';
+$messages['deleteconfirm'] = 'De certo que queres eliminar os permisos de acceso da(s) persoa(s) usuaria(s) escollida(s)?';
+$messages['norights'] = 'Non se especificaron permisos!';
+$messages['nouser'] = 'Non se especificou o nome da persoa usuaria!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'שיתוף';
+$labels['myrights'] = 'זכויות גישה';
+$labels['username'] = 'משתמש:';
+$labels['advanced'] = 'מצב מתקד×';
+$labels['newuser'] = 'הוסף ערך';
+$labels['editperms'] = 'עריכת הרש×ות';
+$labels['actions'] = 'פעולות על זכויות גישה...';
+$labels['anyone'] = 'כל ×”×ž×©×ª×ž×©×™× (כל ×חד)';
+$labels['anonymous'] = '××•×¨×—×™× (×נונימי)';
+$labels['identifier'] = 'מזהה';
+$labels['acll'] = 'חיפוש';
+$labels['aclr'] = 'קרי×ת הודעות';
+$labels['acls'] = 'שמירה על סטטוס נר××”';
+$labels['aclw'] = 'דגלי כתיבה';
+$labels['acli'] = 'הוספה בין ×¢×¨×›×™× (העתקה לתוך)';
+$labels['aclp'] = 'פרסו×';
+$labels['aclc'] = 'יצירת תת־תיקיות';
+$labels['aclk'] = 'יצירת תת־תיקיות';
+$labels['acld'] = 'מחיקת הודעות';
+$labels['aclt'] = 'מחיקת הודעות';
+$labels['acle'] = 'ניקוי רשומות שבוטלו';
+$labels['aclx'] = 'מחיקת תיקיה';
+$labels['acla'] = 'מנהל';
+$labels['acln'] = 'הוספה של הערת תיוג להודעות';
+$labels['aclfull'] = 'שליטה מל××”';
+$labels['aclother'] = '×חר';
+$labels['aclread'] = 'קרי××”';
+$labels['aclwrite'] = 'כתיבה';
+$labels['acldelete'] = 'מחיקה';
+$labels['shortacll'] = 'חיפוש';
+$labels['shortaclr'] = 'קרי××”';
+$labels['shortacls'] = 'להש×יר';
+$labels['shortaclw'] = 'כתיבה';
+$labels['shortacli'] = 'הוספה בין ערכי×';
+$labels['shortaclp'] = 'פרסו×';
+$labels['shortaclc'] = 'יצירה';
+$labels['shortaclk'] = 'יצירה';
+$labels['shortacld'] = 'מחיקה';
+$labels['shortaclt'] = 'מחיקה';
+$labels['shortacle'] = 'ניקוי רשומות שבוטלו';
+$labels['shortaclx'] = 'מחיקת תיקיה';
+$labels['shortacla'] = 'מנהל';
+$labels['shortacln'] = 'הוספה של הערת תיוג';
+$labels['shortaclother'] = '×חר';
+$labels['shortaclread'] = 'קרי××”';
+$labels['shortaclwrite'] = 'כתיבה';
+$labels['shortacldelete'] = 'מחיקה';
+$labels['longacll'] = 'התיקיה תר××” ברשימות וניתן ×™×”×™×” ×œ×”×¨×©× ×ליה';
+$labels['longaclr'] = 'ניתן לפתוח ×ת התיקיה ×•×œ×§×¨×•× ×‘×”';
+$labels['longacls'] = 'ניתן לשנות דגל נר××” בהודעות';
+$labels['longaclw'] = 'ניתן לשנות ×“×’×œ×™× ×•×ž×™×œ×•×ª מפתח בהודעות, למעט נר××” ונמחק';
+$labels['longacli'] = 'ניתן לכתוב הודעות לתיקיה ×ו למוחקן';
+$labels['longaclp'] = 'ניתן ×œ×¤×¨×¡× ×”×•×“×¢×•×ª לתוך תיקיה זו';
+$labels['longaclc'] = 'ניתן ליצור (×ו לשנות ש×) תיקיות, ישירות תחת תיקיה זו';
+$labels['longaclk'] = 'ניתן ליצור (×ו לשנות ש×) תיקיות, ישירות תחת תיקיה זו';
+$labels['longacld'] = 'ניתן לשנות דגל נמחק של הודעות';
+$labels['longaclt'] = 'ניתן לשנות דגל נמחק של הודעות';
+$labels['longacle'] = 'ניתן לנקות הודעות שסומנו כמבוטלות';
+$labels['longaclx'] = 'ניתן למחוק תיקיה זו ×ו לשנות שמה';
+$labels['longacla'] = 'ניתן לשנות זכויות גישה של תיקיה זו';
+$labels['longacln'] = 'ניתן לשנות הערות תיוג המשותפות להודעות';
+$labels['longaclfull'] = 'שליטה מל××” כולל ניהול התיקיה';
+$labels['longaclread'] = 'ניתן לפתוח ×ת התיקיה ×•×œ×§×¨×•× ×‘×”';
+$labels['longaclwrite'] = 'ניתן לסמן, לכתוב ×ו להעתיק הודעות לתיקיה זו';
+$labels['longacldelete'] = 'ניתן למחוק הודעות';
+$labels['longaclother'] = 'זכויות גישה ×חרות';
+$labels['ariasummaryacltable'] = 'רשימת זכויות גישה';
+$labels['arialabelaclactions'] = 'רשימת פעולות';
+$labels['arialabelaclform'] = 'טופס זכויות גישה';
+$messages['deleting'] = 'זכויות גישה נמחקות...';
+$messages['saving'] = 'זכויות גישה נשמרות...';
+$messages['updatesuccess'] = 'זכויות גישה שונו בהצלחה';
+$messages['deletesuccess'] = 'זכויות גישה נמחקו בהצלחה';
+$messages['createsuccess'] = 'זכויות גישה נוספו בהצלחה';
+$messages['updateerror'] = '×œ× × ×™×ª×Ÿ לעדכן הרש×ות גישה';
+$messages['deleteerror'] = '×œ× × ×™×ª×Ÿ למחוק זכויות גישה';
+$messages['createerror'] = '×œ× × ×™×ª×Ÿ להוסיף זכויות גישה';
+$messages['deleteconfirm'] = '×”×× ×•×“××™ שברצונך להסיר זכויות גישה של המשתמש(×™×) שנבחרו?';
+$messages['norights'] = '×œ× ×¦×•×™× ×• זכויות גישה כלשהן !';
+$messages['nouser'] = '×œ× ×¦×•×™×Ÿ ×©× ×ž×©×ª×ž×© כלשהו!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Dijeljenje';
+$labels['myrights'] = 'Prava pristupa';
+$labels['username'] = 'Korisnik:';
+$labels['newuser'] = 'Dodaj unos/pravilo';
+$labels['editperms'] = 'Uredi dozvole';
+$labels['actions'] = 'Akcije prava pristupa...';
+$labels['anyone'] = 'Svi korisnici (anyone)';
+$labels['anonymous'] = 'Gosti (anonymous)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Pretraga';
+$labels['aclr'] = 'ProÄitaj poruke';
+$labels['acls'] = 'Zadrži u stanju "Viđeno"';
+$labels['aclw'] = 'Zapiši oznake';
+$labels['acli'] = 'Umetni (kopiraj u)';
+$labels['aclp'] = 'Pošalji';
+$labels['aclc'] = 'Napravi podmapu';
+$labels['aclk'] = 'Napravi podmapu';
+$labels['acld'] = 'Obriši poruke';
+$labels['aclt'] = 'Obriši poruke';
+$labels['acle'] = 'Trajno obriši';
+$labels['aclx'] = 'Obriši mapu';
+$labels['acla'] = 'Administriraj';
+$labels['aclfull'] = 'Potpuna kontrola';
+$labels['aclother'] = 'Drugo';
+$labels['aclread'] = 'ÄŒitanje';
+$labels['aclwrite'] = 'Pisanje';
+$labels['acldelete'] = 'Obriši';
+$labels['shortacll'] = 'Pretraži';
+$labels['shortaclr'] = 'ÄŒitaj';
+$labels['shortacls'] = 'Zadrži';
+$labels['shortaclw'] = 'Piši';
+$labels['shortacli'] = 'Umetni';
+$labels['shortaclp'] = 'Pošalji';
+$labels['shortaclc'] = 'Stvori';
+$labels['shortaclk'] = 'Stvori';
+$labels['shortacld'] = 'Obriši';
+$labels['shortaclt'] = 'Obriši';
+$labels['shortacle'] = 'Trajno obriši';
+$labels['shortaclx'] = 'Obriši mapu';
+$labels['shortacla'] = 'Administriraj';
+$labels['shortaclother'] = 'Drugo';
+$labels['shortaclread'] = 'ÄŒitanje';
+$labels['shortaclwrite'] = 'Pisanje';
+$labels['shortacldelete'] = 'Brisanje';
+$labels['longacll'] = 'Mapa je vidljiva u listi i može se na nju pretplatiti';
+$labels['longaclr'] = 'Mapa može biti otvorena za Äitanje';
+$labels['longacls'] = 'Oznaku "Viđeno" je moguće mijenjati u porukama';
+$labels['longaclw'] = 'Oznake i kljuÄne rijeÄi, osim oznaka "ViÄ‘eno" i "Obrisano", se mogu mijenjati';
+$labels['longacli'] = 'Poruke mogu biti pohranjene ili kopirane u mapu';
+$labels['longaclp'] = 'Poruke mogu biti postavljene u mapu';
+$labels['longaclc'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
+$labels['longaclk'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
+$labels['longacld'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
+$labels['longaclt'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
+$labels['longacle'] = 'Poruke mogu biti izbrisane';
+$labels['longaclx'] = 'Mapa može biti obrisana ili preimenovana';
+$labels['longacla'] = 'Prava pristupa nad mapom se mogu mijenjati';
+$labels['longaclfull'] = 'Potpuna kontrola ukljuÄujući administraciju mapa';
+$labels['longaclread'] = 'Mapa može biti otvorena za Äitanje';
+$labels['longaclwrite'] = 'Poruke mogu biti oznaÄene, pohranjene ili kopirane u mapu';
+$labels['longacldelete'] = 'Poruke mogu biti obrisane';
+$messages['deleting'] = 'Brišem prava pristupa...';
+$messages['saving'] = 'Pohranjujem prava pristupa';
+$messages['updatesuccess'] = 'Prava pristupa uspješno promjenjena';
+$messages['deletesuccess'] = 'Prava pristupa uspješno obrisana';
+$messages['createsuccess'] = 'Prava pristupa uspješno dodana';
+$messages['updateerror'] = 'Ne mogu pohraniti vCard';
+$messages['deleteerror'] = 'Ne mogu obrisati prava pristupa';
+$messages['createerror'] = 'Ne mogu dodati prava pristupa';
+$messages['deleteconfirm'] = 'Jeste li sigurni da želite obrisati prava pristupa za odabranog korisnika(e)?';
+$messages['norights'] = 'Nije navedeno pravo pristupa!';
+$messages['nouser'] = 'Nije navedeno korisniÄko ime!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Megosztás';
+$labels['myrights'] = 'Hozzáférési jogok';
+$labels['username'] = 'Felhasználó:';
+$labels['advanced'] = 'Haladó mód';
+$labels['newuser'] = 'Elem hozzáadása';
+$labels['editperms'] = 'Jogosultságok szerkesztése';
+$labels['actions'] = 'Hozzáférési jogok müveletei..';
+$labels['anyone'] = 'Minden felhasználó (bárki)';
+$labels['anonymous'] = 'Vendégek (névtelen)';
+$labels['identifier'] = 'Azonosító';
+$labels['acll'] = 'Keresés';
+$labels['aclr'] = 'Üzenetek olvasása';
+$labels['acls'] = 'Olvasottsági állapot megtartása';
+$labels['aclw'] = 'Üzenet jelölése';
+$labels['acli'] = 'Beillesztés (Bemásolás)';
+$labels['aclp'] = 'Bejegyzés';
+$labels['aclc'] = 'Almappa létrehozás';
+$labels['aclk'] = 'Almappa létrehozás';
+$labels['acld'] = 'Üzenetek törlése';
+$labels['aclt'] = 'Üzenetek törlése';
+$labels['acle'] = 'Törölt üzenetek eltávolítása';
+$labels['aclx'] = 'Mappa törlés';
+$labels['acla'] = 'Adminisztrátor';
+$labels['acln'] = 'Üzenetekhez címkézés';
+$labels['aclfull'] = 'Teljes hozzáférés';
+$labels['aclother'] = 'Egyéb';
+$labels['aclread'] = 'Olvasás';
+$labels['aclwrite'] = 'Ãrás';
+$labels['acldelete'] = 'Törlés';
+$labels['shortacll'] = 'Keresés';
+$labels['shortaclr'] = 'Olvasás';
+$labels['shortacls'] = 'Megtartás';
+$labels['shortaclw'] = 'Ãrás';
+$labels['shortacli'] = 'Beszúrás';
+$labels['shortaclp'] = 'Bejegyzés';
+$labels['shortaclc'] = 'Létrehozás';
+$labels['shortaclk'] = 'Létrehozás';
+$labels['shortacld'] = 'Törlés';
+$labels['shortaclt'] = 'Törlés';
+$labels['shortacle'] = 'Törölt üzenetek eltávolítása';
+$labels['shortaclx'] = 'Mappa törlése';
+$labels['shortacla'] = 'Adminisztrátor';
+$labels['shortacln'] = 'Cimkézés';
+$labels['shortaclother'] = 'Egyéb';
+$labels['shortaclread'] = 'Olvasás';
+$labels['shortaclwrite'] = 'Ãrás';
+$labels['shortacldelete'] = 'Törlés';
+$labels['longacll'] = 'A mappa látható a listán és fel tudsz rá iratkozni.';
+$labels['longaclr'] = 'A mappa olvasásra megnyitható';
+$labels['longacls'] = 'Az üzenet megtekintési állapota módosítható';
+$labels['longaclw'] = 'Az üzenetek jelölései és kulcsszavai módosíthatóak, kivéve az olvasottsági állapotot és az üzenet törölt állapotát.';
+$labels['longacli'] = 'Üzenetek irhatóak és máolshatóak a mappába.';
+$labels['longaclp'] = 'Ebbe a mappába tudsz  üzeneteket tenni.';
+$labels['longaclc'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
+$labels['longaclk'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
+$labels['longacld'] = 'Üzenet törölve jelző módositható.';
+$labels['longaclt'] = 'Üzenet törölve jelző módositható.';
+$labels['longacle'] = 'Az üzenetek véglegesen eltávolíthatóak';
+$labels['longaclx'] = 'A mappa törölhető vagy átnevezhető';
+$labels['longacla'] = 'A mappa hozzáférési jogai módosíthatóak';
+$labels['longacln'] = 'Üzenetek megosztott metaadatai(cimkéi) módosíthatoak';
+$labels['longaclfull'] = 'Teljes hozzáférés beleértve a mappák kezelését';
+$labels['longaclread'] = 'A mappa olvasásra megnyitható';
+$labels['longaclwrite'] = 'Az üzenetek megjelölhetök, irhatók és másolhatók ebbe a mappába';
+$labels['longacldelete'] = 'Az üzenetek törölhetőek';
+$labels['longaclother'] = 'Egyébb hozzáférési jogok';
+$labels['ariasummaryacltable'] = 'Hozzáférési jogok listája';
+$labels['arialabelaclactions'] = 'Listázási müveletek';
+$labels['arialabelaclform'] = 'Hozzáférési jogok űrlap';
+$messages['deleting'] = 'Hozzáférési jogok törlése...';
+$messages['saving'] = 'Hozzáférési jogok mentése...';
+$messages['updatesuccess'] = 'A hozzáférési jogok sikeresen módosultak.';
+$messages['deletesuccess'] = 'A hozzáférési jogok törlése sikeresen megtörtént.';
+$messages['createsuccess'] = 'A hozzáférési jogok hozzáadása sikeresen megtörtént.';
+$messages['updateerror'] = 'Nem sikerült módosítani a hozzáférési jogokat.';
+$messages['deleteerror'] = 'Nem sikerült törölni a hozzáférési jogokat.';
+$messages['createerror'] = 'Nem sikerült a hozzáférési jogok hozzáadása';
+$messages['deleteconfirm'] = 'Biztosan eltávolítja a kiválasztott felhasználó(k) hozzáférési jogait?';
+$messages['norights'] = 'Nincsennek jogok megadva.';
+$messages['nouser'] = 'A felhasználónév nincs megadva.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Ô¿Õ«Õ½Õ¾Õ¥Õ¬';
+$labels['myrights'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€';
+$labels['username'] = 'Õ•Õ£Õ¿Õ¡Õ¿Õ¥Ö€`';
+$labels['advanced'] = 'Ô±Õ¼Õ¡Õ»Õ¡Õ¤Õ¥Õ´ Õ¼Õ¥ÕªÕ«Õ´';
+$labels['newuser'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ Õ£Ö€Õ¡Õ¼Õ¸Ö‚Õ´';
+$labels['editperms'] = 'Ô½Õ´Õ¢Õ¡Õ£Ö€Õ¥Õ¬ Õ©Õ¸Ö‚ÕµÕ¬Õ¿Õ¾Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['actions'] = 'Մուտքի իրավունքների գործողություններ…';
+$labels['anyone'] = 'Ô²Õ¸Õ¬Õ¸Ö€ Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ¨ (ÖÕ¡Õ¶Õ¯Õ¡ÖÕ¡Õ®)';
+$labels['anonymous'] = 'Õ€ÕµÕ¸Ö‚Ö€Õ¥Ö€Õ¨ (Õ¡Õ¶Õ¡Õ¶Õ¸Ö‚Õ¶)';
+$labels['identifier'] = 'Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ«Õ¹';
+$labels['acll'] = 'Õ“Õ¶Õ¿Ö€Õ¸Ö‚Õ´';
+$labels['aclr'] = 'Ô¿Õ¡Ö€Õ¤Õ¡Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['acls'] = 'ÕŠÕ¡Õ°ÕºÕ¡Õ¶Õ¥Õ¬ Õ¤Õ«Õ¿Õ´Õ¡Õ¶ Õ¯Õ¡Ö€Õ£Õ¡Õ¾Õ«Õ³Õ¡Õ¯Õ¨';
+$labels['aclw'] = 'Ô³Ö€Õ¡Õ¼Õ´Õ¡Õ¶ Õ¶Õ·Õ¸Ö‚Õ´Õ¶Õ¥Ö€';
+$labels['acli'] = 'Õ†Õ¥Ö€Õ¤Õ¶Õ¥Õ¬ (ÕŠÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬ Õ¶Õ¥Ö€Õ½)';
+$labels['aclp'] = 'Õ€Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¥Õ¬';
+$labels['aclc'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¥Õ¶Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€';
+$labels['aclk'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¥Õ¶Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€';
+$labels['acld'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['aclt'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['acle'] = 'Õ€Õ¥Õ¼Õ¡ÖÕ¶Õ¥Õ¬';
+$labels['aclx'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ ÕºÕ¡Õ¶Õ¡Õ¯Õ¨';
+$labels['acla'] = 'Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬';
+$labels['acln'] = 'Ô¾Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['aclfull'] = 'Ô¼Ö€Õ«Õ¾ Õ¾Õ¥Ö€Õ¡Õ°Õ½Õ¯Õ¸Ö‚Õ´';
+$labels['aclother'] = 'Ô±ÕµÕ¬';
+$labels['aclread'] = 'Ô¿Õ¡Ö€Õ¤Õ¡Õ¬';
+$labels['aclwrite'] = 'Ô³Ö€Õ¥Õ¬';
+$labels['acldelete'] = 'Õ‹Õ¶Õ»Õ¥Õ¬';
+$labels['shortacll'] = 'Õ“Õ¶Õ¿Ö€Õ¸Ö‚Õ´';
+$labels['shortaclr'] = 'Ô¿Õ¡Ö€Õ¤Õ¡Õ¬';
+$labels['shortacls'] = 'ÕŠÕ¡Õ°Õ¥Õ¬';
+$labels['shortaclw'] = 'Ô³Ö€Õ¥Õ¬';
+$labels['shortacli'] = 'Õ†Õ¥Ö€Õ¤Õ¶Õ¥Õ¬';
+$labels['shortaclp'] = 'Õ€Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¥Õ¬';
+$labels['shortaclc'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬';
+$labels['shortaclk'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬';
+$labels['shortacld'] = 'Õ‹Õ¶Õ»Õ¥Õ¬';
+$labels['shortaclt'] = 'Õ‹Õ¶Õ»Õ¥Õ¬';
+$labels['shortacle'] = 'Õ€Õ¥Õ¼Õ¡ÖÕ¶Õ¥Õ¬';
+$labels['shortaclx'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ« Õ»Õ¶Õ»Õ¸Ö‚Õ´';
+$labels['shortacla'] = 'Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬';
+$labels['shortacln'] = 'Ô¾Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¥Õ¬';
+$labels['shortaclother'] = 'Ô±ÕµÕ¬';
+$labels['shortaclread'] = 'Ô¿Õ¡Ö€Õ¤Õ¡Õ¬';
+$labels['shortaclwrite'] = 'Ô³Ö€Õ¥Õ¬';
+$labels['shortacldelete'] = 'Õ‹Õ¶Õ»Õ¥Õ¬';
+$labels['longacll'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¨ Õ¥Ö€Ö‡Õ¸Ö‚Õ´ Õ§ ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¶Õ¥Ö€Õ¸Ö‚Õ´ Ö‡ Õ¶Ö€Õ¡Õ¶ Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ§ Õ¢Õ¡ÕªÕ¡Õ¶Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¾Õ¥Õ¬';
+$labels['longaclr'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ Õ¢Õ¡ÖÕ¾Õ¥Õ¬ Õ¨Õ¶Õ©Õ¥Ö€ÖÕ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€';
+$labels['longacls'] = 'ÕÕ¥Õ½Õ¾Õ¡Õ® Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¶Õ·Õ¸Ö‚Õ´Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬';
+$labels['longaclw'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¶Õ·Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨ Ö‡ Õ°Õ«Õ´Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬, Õ¢Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ ÕÕ¥Õ½Õ¡Õ® Ö‡ Õ‹Õ¶Õ»Õ¾Õ¡Õ® Õ¶Õ·Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«';
+$labels['longacli'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ£Ö€Õ¾Õ¥Õ¬ Ö‡ ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¾Õ¥Õ¬ ÕºÕ¡Õ¶Õ¡Õ¯Õ« Õ´Õ¥Õ»';
+$labels['longaclp'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ°Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¾Õ¥Õ¬ Õ¡ÕµÕ½ ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´';
+$labels['longaclc'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ (Õ¯Õ¡Õ´ Õ¾Õ¥Ö€Õ¡Õ¶Õ¾Õ¡Õ¶Õ¾Õ¥Õ¬) Õ¡ÕµÕ½ ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´';
+$labels['longaclk'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ (Õ¯Õ¡Õ´ Õ¾Õ¥Ö€Õ¡Õ¶Õ¾Õ¡Õ¶Õ¾Õ¥Õ¬) Õ¡ÕµÕ½ ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´';
+$labels['longacld'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ‹Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¸Ö‚Õ´Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬';
+$labels['longaclt'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ‹Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¸Ö‚Õ´Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬';
+$labels['longacle'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ°Õ¥Õ¼Õ¡ÖÕ¾Õ¥Õ¬';
+$labels['longaclx'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ Õ»Õ¶Õ»Õ¾Õ¥Õ¬ Õ¯Õ¡Õ´ Õ¾Õ¥Ö€Õ¡Õ¶Õ¾Õ¡Õ¶Õ¾Õ¥Õ¬';
+$labels['longacla'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ« Õ´Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬';
+$labels['longacln'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¢Õ¡Õ·Õ­Õ¾Õ¡Õ® Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ¨ (Õ®Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨) Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥Õ¬';
+$labels['longaclfull'] = 'Ô¼Ö€Õ«Õ¾ Õ¾Õ¥Ö€Õ¡Õ°Õ½Õ¯Õ¸Ö‚Õ´ Õ¶Õ¥Ö€Õ¡Õ¼ÕµÕ¡Õ¬ ÕºÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¸Ö‚Õ´Õ¨';
+$labels['longaclread'] = 'ÕŠÕ¡Õ¶Õ¡Õ¯Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ Õ¢Õ¡ÖÕ¾Õ¥Õ¬ Õ¨Õ¶Õ©Õ¥Ö€ÖÕ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€';
+$labels['longaclwrite'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ¶Õ·Õ¾Õ¥Õ¬, Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Ö‡ ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¾Õ¥Õ¬ Õ¡ÕµÕ½ ÕºÕ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´';
+$labels['longacldelete'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ¥Õ¶ Õ»Õ¶Õ»Õ¾Õ¥Õ¬';
+$labels['longaclother'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ¡ÕµÕ¬ Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨';
+$labels['ariasummaryacltable'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨';
+$labels['arialabelaclactions'] = 'Ô³Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨';
+$labels['arialabelaclform'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ« Õ¢Õ¬Õ¡Õ¶Õ¯';
+$messages['deleting'] = 'Ջնջվում են մուտքի իրավունքները…';
+$messages['saving'] = 'Պահպանվում են մուտքի իրավունքները…';
+$messages['updatesuccess'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ¢Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² ÖƒÕ¸ÖƒÕ¸Õ­Õ¾Õ¥ÖÕ«Õ¶Ö‰';
+$messages['deletesuccess'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ¢Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² Õ»Õ¶Õ»Õ¾Õ¥ÖÕ«Õ¶Ö‰';
+$messages['createsuccess'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ¢Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² Õ¡Õ¾Õ¥Õ¬Õ¡ÖÕ¾Õ¥ÖÕ¾Õ«Õ¶Ö‰';
+$messages['updateerror'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ« Õ©Õ¡Ö€Õ´Õ¡ÖÕ¸Ö‚Õ´Õ¨ Õ¡Õ¶Õ»Õ¡Õ¿Õ¥Õ¬';
+$messages['deleteerror'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ»Õ¶Õ»Õ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥ÖÖ‰';
+$messages['createerror'] = 'Õ„Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨ Õ¡Õ¾Õ¥Õ¬Õ¡ÖÕ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥ÖÖ‰';
+$messages['deleteconfirm'] = 'Ô´Õ¸Ö‚Ö„ Õ¾Õ½Õ¿Õ¡ÕžÕ° Õ§Ö„, Õ¸Ö€ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ¶Õ·Õ¾Õ¡Õ® Ö…Õ£Õ¿Õ¾Õ¸Õ²Õ¶Õ¥Ö€Õ«Õ¶ Õ¦Ö€Õ¯Õ¥Õ¬ Õ´Õ¸Ö‚Õ¿Ö„Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ«ÖÖ‰';
+$messages['norights'] = 'ÕˆÕ¹ Õ´Õ« Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„ Õ¹Õ«Õ› Õ¶Õ·Õ¾Õ¥Õ¬Ö‰';
+$messages['nouser'] = 'Õ•Õ£Õ¿Õ¾Õ¸Õ²Õ« Õ¡Õ¶Õ¸Ö‚Õ¶Õ¨ Õ¹Õ«Õ› Õ¶Õ·Õ¾Õ¥Õ¬Ö‰';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Uso in commun';
+$labels['myrights'] = 'Derectos de accesso';
+$labels['username'] = 'Usator:';
+$labels['advanced'] = 'Modo avantiate';
+$labels['newuser'] = 'Adder entrata';
+$labels['editperms'] = 'Modificar permissiones';
+$labels['actions'] = 'Actiones de derecto de accesso...';
+$labels['anyone'] = 'Tote le usatores (non importa qui)';
+$labels['anonymous'] = 'Hospites (anonyme)';
+$labels['identifier'] = 'Identificator';
+$labels['acll'] = 'Cercar';
+$labels['aclr'] = 'Leger messages';
+$labels['acls'] = 'Retener le stato Vidite';
+$labels['aclw'] = 'Signales de scriptura';
+$labels['acli'] = 'Inserer (copiar in)';
+$labels['aclp'] = 'Inviar';
+$labels['aclc'] = 'Crear subdossieres';
+$labels['aclk'] = 'Crear subdossieres';
+$labels['acld'] = 'Deler messages';
+$labels['aclt'] = 'Deler messages';
+$labels['acle'] = 'Expunger';
+$labels['aclx'] = 'Deler dossier';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Annotar messages';
+$labels['aclfull'] = 'Controlo total';
+$labels['aclother'] = 'Altere';
+$labels['aclread'] = 'Leger';
+$labels['aclwrite'] = 'Scriber';
+$labels['acldelete'] = 'Deler';
+$labels['shortacll'] = 'Cercar';
+$labels['shortaclr'] = 'Leger';
+$labels['shortacls'] = 'Retener';
+$labels['shortaclw'] = 'Scriber';
+$labels['shortacli'] = 'Inserer';
+$labels['shortaclp'] = 'Inviar';
+$labels['shortaclc'] = 'Crear';
+$labels['shortaclk'] = 'Crear';
+$labels['shortacld'] = 'Deler';
+$labels['shortaclt'] = 'Deler';
+$labels['shortacle'] = 'Expunger';
+$labels['shortaclx'] = 'Deletion de dossier';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Annotar';
+$labels['shortaclother'] = 'Altere';
+$labels['shortaclread'] = 'Leger';
+$labels['shortaclwrite'] = 'Scriber';
+$labels['shortacldelete'] = 'Deler';
+$labels['longacll'] = 'Le dossier es visibile in listas e on pote subscriber se a illo';
+$labels['longaclr'] = 'Le dossier pote esser aperite pro lectura';
+$labels['longacls'] = 'Le signal "Vidite" de messages pote esser cambiate';
+$labels['longaclw'] = 'Le signales e parolas-clave de messages pote esser cambiate, excepte "Vidite" e "Delite"';
+$labels['longacli'] = 'Messages pote esser scribite o copiate al dossier';
+$labels['longaclp'] = 'Messages pote esser inviate a iste dossier';
+$labels['longaclc'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
+$labels['longaclk'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
+$labels['longacld'] = 'Le signal "Deler" de messages pote esser cambiate';
+$labels['longaclt'] = 'Le signal "Deler" de messages pote esser cambiate';
+$labels['longacle'] = 'Messages pote esser expungite';
+$labels['longaclx'] = 'Le dossier pote esser delite o renominate';
+$labels['longacla'] = 'Le derectos de accesso del dossier pote esser cambiate';
+$labels['longacln'] = 'Le metadatos commun (annotationes) de messages pote esser cambiate';
+$labels['longaclfull'] = 'Controlo total incluse le administration de dossieres';
+$labels['longaclread'] = 'Le dossier pote esser aperite pro lectura';
+$labels['longaclwrite'] = 'Messages pote esser marcate, scribite o copiate al dossier';
+$labels['longacldelete'] = 'Messages pote esser delite';
+$labels['longaclother'] = 'Altere derectos de accesso';
+$labels['ariasummaryacltable'] = 'Lista de derectos de accesso';
+$labels['arialabelaclactions'] = 'Listar actiones';
+$labels['arialabelaclform'] = 'Formulario de derectos de accesso';
+$messages['deleting'] = 'A deler derectos de accesso...';
+$messages['saving'] = 'A salveguardar derectos de accesso...';
+$messages['updatesuccess'] = 'Le derectos de accesso ha essite cambiate';
+$messages['deletesuccess'] = 'Le derectos de accesso ha essite delite';
+$messages['createsuccess'] = 'Le derectos de accesso ha essite addite';
+$messages['updateerror'] = 'Impossibile actualisar le derectos de accesso';
+$messages['deleteerror'] = 'Impossibile deler derectos de accesso';
+$messages['createerror'] = 'Impossibile adder derectos de accesso';
+$messages['deleteconfirm'] = 'Es vos secur de voler remover le derectos de accesso del usator(es) seligite?';
+$messages['norights'] = 'Nulle derecto ha essite specificate.';
+$messages['nouser'] = 'Nulle nomine de usator ha essite specificate.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Berbagi';
+$labels['myrights'] = 'Hak Akses';
+$labels['username'] = 'Pengguna:';
+$labels['advanced'] = 'Mode Lanjut';
+$labels['newuser'] = 'Tambahkan entri';
+$labels['editperms'] = 'Ubah izin';
+$labels['actions'] = 'Aksi hak akses...';
+$labels['anyone'] = 'Semua pengguna (siapa saja)';
+$labels['anonymous'] = 'Para tamu (anonim)';
+$labels['identifier'] = 'Yang mengidentifikasi';
+$labels['acll'] = 'Cari';
+$labels['aclr'] = 'Baca pesan';
+$labels['acls'] = 'Jaga status terbaca';
+$labels['aclw'] = 'Membuat tanda';
+$labels['acli'] = 'Sisipkan (Salin kedalam)';
+$labels['aclp'] = 'Tulisan';
+$labels['aclc'] = 'Buat subfolder';
+$labels['aclk'] = 'Buat subfolder';
+$labels['acld'] = 'Hapus pesan';
+$labels['aclt'] = 'Hapus pesan';
+$labels['acle'] = 'Menghapus';
+$labels['aclx'] = 'Hapus folder';
+$labels['acla'] = 'Kelola';
+$labels['acln'] = 'Berikan keterangan pesan';
+$labels['aclfull'] = 'Kendali penuh';
+$labels['aclother'] = 'Lainnya';
+$labels['aclread'] = 'Baca';
+$labels['aclwrite'] = 'Tulis';
+$labels['acldelete'] = 'Hapus';
+$labels['shortacll'] = 'Cari';
+$labels['shortaclr'] = 'Baca';
+$labels['shortacls'] = 'Simpan';
+$labels['shortaclw'] = 'Tulis';
+$labels['shortacli'] = 'Sisipkan';
+$labels['shortaclp'] = 'Tulisan';
+$labels['shortaclc'] = 'Buat';
+$labels['shortaclk'] = 'Buat';
+$labels['shortacld'] = 'Hapus';
+$labels['shortaclt'] = 'Hapus';
+$labels['shortacle'] = 'Buang';
+$labels['shortaclx'] = 'Hapus folder';
+$labels['shortacla'] = 'Kelola';
+$labels['shortacln'] = 'Berikan keterangan';
+$labels['shortaclother'] = 'Lainnya';
+$labels['shortaclread'] = 'Baca';
+$labels['shortaclwrite'] = 'Tulis';
+$labels['shortacldelete'] = 'Hapus';
+$labels['longacll'] = 'Folder terlihat di daftar dan dapat dijadikan langganan';
+$labels['longaclr'] = 'Folder dapat dibuka untuk dibaca';
+$labels['longacls'] = 'Tanda pesan terbaca dapat diubah';
+$labels['longaclw'] = 'Tanda pesan dan kata kunci dapat diubah, kecuali Terbaca dan Terhapus';
+$labels['longacli'] = 'Pesan dapat ditulis atau disalin kedalam folder';
+$labels['longaclp'] = 'Pesan dapat dikirim ke folder ini';
+$labels['longaclc'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
+$labels['longaclk'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
+$labels['longacld'] = 'Tanda hapus pesan dapat diubah';
+$labels['longaclt'] = 'Tanda hapus pesan dapat diubah';
+$labels['longacle'] = 'Pesan dapat dibuang';
+$labels['longaclx'] = 'Folder dapat dihapus atau diubah namanya';
+$labels['longacla'] = 'Hak akses folder dapat diubah';
+$labels['longacln'] = 'Metadata pesan bersama (penjelasan) dapat diubah';
+$labels['longaclfull'] = 'Kendali penuh penuh termasuk administrasi';
+$labels['longaclread'] = 'Folder dapat dibuka untuk dibaca';
+$labels['longaclwrite'] = 'Pesan dapat ditandai, ditulis atau disalin kedalam folder';
+$labels['longacldelete'] = 'Pesan dapat dihapus';
+$labels['longaclother'] = 'Hak akses lainnya';
+$labels['ariasummaryacltable'] = 'Daftar hak akses';
+$labels['arialabelaclactions'] = 'Aksi daftar';
+$labels['arialabelaclform'] = 'Formulir hak akses';
+$messages['deleting'] = 'Menghapus hak akses...';
+$messages['saving'] = 'Menyimpan hak akses...';
+$messages['updatesuccess'] = 'Hak akses berhasil diubah';
+$messages['deletesuccess'] = 'Hak akses berhasil dihapus';
+$messages['createsuccess'] = 'Hak akses berhasil ditambahkan';
+$messages['updateerror'] = 'Tidak dapat memperbaharui hak akses';
+$messages['deleteerror'] = 'Tidak dapat menghapus hak akses';
+$messages['createerror'] = 'Tidak dapat menambah hak akses';
+$messages['deleteconfirm'] = 'Apakah Anda yakin ingin menghapus hak akses dari user terpilih?';
+$messages['norights'] = 'Hak belum ditentukan!';
+$messages['nouser'] = 'Username belum ditentukan!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Deiling';
+$labels['myrights'] = 'Aðgangsheimildir';
+$labels['username'] = 'Notandi:';
+$labels['advanced'] = 'Flóknari hamur';
+$labels['newuser'] = 'Bæta við færslu';
+$labels['editperms'] = 'Breyta heimildum';
+$labels['anyone'] = 'Allir notendur (hver sem er)';
+$labels['anonymous'] = 'Gestir (nafnlausir)';
+$labels['acll'] = 'Uppfletting';
+$labels['aclr'] = 'Lesa skeyti';
+$labels['aclc'] = 'Búa til undirmöppur';
+$labels['aclk'] = 'Búa til undirmöppur';
+$labels['acld'] = 'Eyða skeytum';
+$labels['aclt'] = 'Eyða skeytum';
+$labels['aclx'] = 'Eyða möppu';
+$labels['aclread'] = 'Lesið';
+$labels['shortaclr'] = 'Lesið';
+$labels['shortaclw'] = 'Skrifa';
+$labels['shortacli'] = 'Setja inn';
+$labels['shortaclc'] = 'Búa til';
+$labels['shortaclk'] = 'Búa til';
+$labels['shortacld'] = 'Eyða';
+$labels['shortaclt'] = 'Eyða';
+$labels['shortaclx'] = 'Eyða möppu';
+$labels['shortacla'] = 'Stjórna';
+$labels['shortaclread'] = 'Lesið';
+$labels['shortaclwrite'] = 'Skrifa';
+$labels['shortacldelete'] = 'Eyða';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Condivisione';
+$labels['myrights'] = 'Diritti d\'accesso';
+$labels['username'] = 'Utente:';
+$labels['advanced'] = 'Modalità avanzata';
+$labels['newuser'] = 'Aggiungi voce';
+$labels['editperms'] = 'Modifica permessi';
+$labels['actions'] = 'Azioni permessi d\'accesso...';
+$labels['anyone'] = 'Tutti gli utenti';
+$labels['anonymous'] = 'Osptiti (anonimi)';
+$labels['identifier'] = 'Identificatore';
+$labels['acll'] = 'Ricerca';
+$labels['aclr'] = 'Leggi messaggi';
+$labels['acls'] = 'Mantieni lo stato Visto';
+$labels['aclw'] = 'Flag di scrittura';
+$labels['acli'] = 'Inserisci (Copia in)';
+$labels['aclp'] = 'Invio';
+$labels['aclc'] = 'Crea sottocartelle';
+$labels['aclk'] = 'Crea sottocartelle';
+$labels['acld'] = 'Elimina messaggi';
+$labels['aclt'] = 'Elimina messaggi';
+$labels['acle'] = 'Elimina';
+$labels['aclx'] = 'Elimina cartella';
+$labels['acla'] = 'Amministra';
+$labels['acln'] = 'Annota messaggi';
+$labels['aclfull'] = 'Controllo completo';
+$labels['aclother'] = 'Altro';
+$labels['aclread'] = 'Lettura';
+$labels['aclwrite'] = 'Scrittura';
+$labels['acldelete'] = 'Elimina';
+$labels['shortacll'] = 'Ricerca';
+$labels['shortaclr'] = 'Lettura';
+$labels['shortacls'] = 'Mantieni';
+$labels['shortaclw'] = 'Scrivi';
+$labels['shortacli'] = 'Inserisci';
+$labels['shortaclp'] = 'Invio';
+$labels['shortaclc'] = 'Crea';
+$labels['shortaclk'] = 'Crea';
+$labels['shortacld'] = 'Elimina';
+$labels['shortaclt'] = 'Elimina';
+$labels['shortacle'] = 'Elimina';
+$labels['shortaclx'] = 'Elimina cartella';
+$labels['shortacla'] = 'Amministra';
+$labels['shortacln'] = 'Annota';
+$labels['shortaclother'] = 'Altro';
+$labels['shortaclread'] = 'Lettura';
+$labels['shortaclwrite'] = 'Scrittura';
+$labels['shortacldelete'] = 'Elimina';
+$labels['longacll'] = 'La cartella è visibile sulle liste e può essere sottoscritta';
+$labels['longaclr'] = 'Questa cartella può essere aperta in lettura';
+$labels['longacls'] = 'Il flag Messaggio Visto può essere cambiato';
+$labels['longaclw'] = 'I flag dei messaggi e le keywords possono essere cambiati, ad esclusione di Visto ed Eliminato';
+$labels['longacli'] = 'I messaggi possono essere scritti o copiati nella cartella';
+$labels['longaclp'] = 'I messaggi possono essere inviati a questa cartella';
+$labels['longaclc'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
+$labels['longaclk'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
+$labels['longacld'] = 'Il flag Messaggio Eliminato può essere cambiato';
+$labels['longaclt'] = 'Il flag Messaggio Eliminato può essere cambiato';
+$labels['longacle'] = 'I messaggi possono essere cancellati';
+$labels['longaclx'] = 'La cartella può essere eliminata o rinominata';
+$labels['longacla'] = 'I diritti di accesso della cartella possono essere cambiati';
+$labels['longacln'] = 'I metadati (annotazioni) dei messaggi condivisi possono essere modificati';
+$labels['longaclfull'] = 'Controllo completo incluso cartella di amministrazione';
+$labels['longaclread'] = 'Questa cartella può essere aperta in lettura';
+$labels['longaclwrite'] = 'I messaggi possono essere marcati, scritti o copiati nella cartella';
+$labels['longacldelete'] = 'I messaggi possono essere eliminati';
+$labels['longaclother'] = 'Altri diritti di accesso';
+$labels['ariasummaryacltable'] = 'Elenco dei diritti di accesso';
+$labels['arialabelaclactions'] = 'Lista azioni';
+$labels['arialabelaclform'] = 'Modulo di accesso';
+$messages['deleting'] = 'Sto eliminando i diritti di accesso...';
+$messages['saving'] = 'Sto salvando i diritti di accesso...';
+$messages['updatesuccess'] = 'I diritti d\'accesso sono stati cambiati';
+$messages['deletesuccess'] = 'I diritti d\'accesso sono stati eliminati';
+$messages['createsuccess'] = 'I diritti d\'accesso sono stati aggiunti';
+$messages['updateerror'] = 'Impossibile aggiornare i diritti d\'accesso';
+$messages['deleteerror'] = 'Impossibile eliminare i diritti d\'accesso';
+$messages['createerror'] = 'Impossibile aggiungere i diritti d\'accesso';
+$messages['deleteconfirm'] = 'Sei sicuro, vuoi rimuovere i diritti d\'accesso degli utenti selezionati?';
+$messages['norights'] = 'Nessun diritto specificato!';
+$messages['nouser'] = 'Lo username non è stato specificato!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = '共有';
+$labels['myrights'] = 'アクセス権';
+$labels['username'] = 'ユーザー:';
+$labels['advanced'] = '詳細ãªãƒ¢ãƒ¼ãƒ‰';
+$labels['newuser'] = '項目を追加';
+$labels['editperms'] = '編集ã®æ¨©é™';
+$labels['actions'] = 'アクセス権ã®å‹•ä½œ...';
+$labels['anyone'] = '(誰ã§ã‚‚)ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼';
+$labels['anonymous'] = 'ゲスト(匿å)';
+$labels['identifier'] = '識別å­';
+$labels['acll'] = '検索';
+$labels['aclr'] = 'メッセージを読む';
+$labels['acls'] = '既読ã®çŠ¶æ…‹ã‚’ä¿æŒ';
+$labels['aclw'] = '書ãè¾¼ã¿ãƒ•ãƒ©ãƒƒã‚°';
+$labels['acli'] = '挿入(中ã«è¤‡è£½)';
+$labels['aclp'] = '投稿';
+$labels['aclc'] = 'サブフォルダを作æˆ';
+$labels['aclk'] = 'サブフォルダを作æˆ';
+$labels['acld'] = 'メッセージを削除';
+$labels['aclt'] = 'メッセージを削除';
+$labels['acle'] = '抹消';
+$labels['aclx'] = 'フォルダーを削除';
+$labels['acla'] = '管ç†';
+$labels['acln'] = 'メッセージã«æ³¨é‡ˆ';
+$labels['aclfull'] = '完全ãªåˆ¶å¾¡';
+$labels['aclother'] = 'ãã®ä»–';
+$labels['aclread'] = '読ã¿è¾¼ã¿';
+$labels['aclwrite'] = '書ãè¾¼ã¿';
+$labels['acldelete'] = '削除';
+$labels['shortacll'] = '検索';
+$labels['shortaclr'] = '読ã¿è¾¼ã¿';
+$labels['shortacls'] = 'ä¿æŒ';
+$labels['shortaclw'] = '書ãè¾¼ã¿';
+$labels['shortacli'] = '挿入';
+$labels['shortaclp'] = '投稿';
+$labels['shortaclc'] = '作æˆ';
+$labels['shortaclk'] = '作æˆ';
+$labels['shortacld'] = '削除';
+$labels['shortaclt'] = '削除';
+$labels['shortacle'] = '抹消';
+$labels['shortaclx'] = 'フォルダーã®å‰Šé™¤';
+$labels['shortacla'] = '管ç†';
+$labels['shortacln'] = '注釈';
+$labels['shortaclother'] = 'ãã®ä»–';
+$labels['shortaclread'] = '読ã¿è¾¼ã¿';
+$labels['shortaclwrite'] = '書ãè¾¼ã¿';
+$labels['shortacldelete'] = '削除';
+$labels['longacll'] = 'フォルダーをリストã«è¦‹ãˆã‚‹ã‚ˆã†ã«ã—ã¦ç™»éŒ²å¯èƒ½:';
+$labels['longaclr'] = 'フォルダーを読むã“ã¨ã‚’å¯èƒ½';
+$labels['longacls'] = 'メッセージã®æ—¢èª­ã®ãƒ•ãƒ©ãƒƒã‚°ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longaclw'] = '既読ã¨å‰Šé™¤ã®ãƒ•ãƒ©ãƒƒã‚°ã‚’除ãã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãƒ•ãƒ©ãƒƒã‚°ã¨ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longacli'] = 'メッセージã«æ›¸ãè¾¼ã¿ã¨ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã¸ã®è¤‡è£½ã‚’å¯èƒ½';
+$labels['longaclp'] = 'メッセージをã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã«æŠ•ç¨¿ã‚’å¯èƒ½';
+$labels['longaclc'] = 'ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®ç›´ä¸‹ã«ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®ä½œæˆã¨åå‰ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longaclk'] = 'ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®ç›´ä¸‹ã«ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®ä½œæˆã¨åå‰ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longacld'] = 'メッセージã®å‰Šé™¤ãƒ•ãƒ©ãƒƒã‚°ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longaclt'] = 'メッセージã®å‰Šé™¤ãƒ•ãƒ©ãƒƒã‚°ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longacle'] = 'メッセージã®æŠ¹æ¶ˆã‚’å¯èƒ½';
+$labels['longaclx'] = 'ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®å‰Šé™¤ã‚„åå‰ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longacla'] = 'フォルダーã®ã‚¢ã‚¯ã‚»ã‚¹æ¨©ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longacln'] = 'メッセージã®å…±æœ‰ã•ã‚Œã‚‹ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿(注釈)ã®å¤‰æ›´ã‚’å¯èƒ½';
+$labels['longaclfull'] = 'フォルダーã®ç®¡ç†ã‚’å«ã‚ãŸå®Œå…¨ãªåˆ¶å¾¡ã‚’å¯èƒ½';
+$labels['longaclread'] = 'フォルダーを読むã“ã¨ã‚’å¯èƒ½';
+$labels['longaclwrite'] = 'メッセージã«ãƒžãƒ¼ã‚¯ã®è¨­å®šã€æ›¸ãè¾¼ã¿ã€ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã«è¤‡è£½ã‚’å¯èƒ½';
+$labels['longacldelete'] = 'メッセージã®å‰Šé™¤ã‚’å¯èƒ½';
+$labels['longaclother'] = 'ä»–ã®ã‚¢ã‚¯ã‚»ã‚¹æ¨©';
+$labels['ariasummaryacltable'] = 'アクセス権ã®ä¸€è¦§';
+$labels['arialabelaclactions'] = '動作を一覧';
+$labels['arialabelaclform'] = 'アクセス権ã®æ¬„';
+$messages['deleting'] = 'アクセス権を削除中...';
+$messages['saving'] = 'アクセス権をä¿å­˜ä¸­...';
+$messages['updatesuccess'] = 'アクセス権を変更ã—ã¾ã—ãŸã€‚';
+$messages['deletesuccess'] = 'アクセス権を削除ã—ã¾ã—ãŸã€‚';
+$messages['createsuccess'] = 'アクセス権を追加ã—ã¾ã—ãŸã€‚';
+$messages['updateerror'] = 'アクセス権を更新ã§ãã¾ã›ã‚“。';
+$messages['deleteerror'] = 'アクセス権を削除ã§ãã¾ã›ã‚“。';
+$messages['createerror'] = 'アクセス権を追加ã§ãã¾ã›ã‚“。';
+$messages['deleteconfirm'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ä»¶ã‚’本当ã«å‰Šé™¤ã—ãŸã„ã§ã™ã‹?';
+$messages['norights'] = '何ã®æ¨©é™ã‚‚指定ã•ã‚Œã¦ã„ã¾ã›ã‚“!';
+$messages['nouser'] = 'ユーザーåを指定ã—ã¦ã„ã¾ã›ã‚“!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ka_GE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['aclread'] = 'წáƒáƒ™áƒ˜áƒ—ხვáƒ';
+$labels['shortaclr'] = 'წáƒáƒ™áƒ˜áƒ—ხვáƒ';
+$labels['shortaclread'] = 'წáƒáƒ™áƒ˜áƒ—ხვáƒ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/kab.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Beá¹­á¹­u';
+$labels['myrights'] = 'Izerfan n unekcum';
+$labels['username'] = 'Aseqdac:';
+$labels['advanced'] = 'Askar leqqayen';
+$labels['newuser'] = 'Rnu anekcam';
+$labels['editperms'] = 'Ẓreg tisirag';
+$labels['actions'] = 'Tigawin n izerfan n unekcum...';
+$labels['anyone'] = 'Akk iseqdacen (yal yiwen)';
+$labels['anonymous'] = 'Inebgawen (udrigen)';
+$labels['identifier'] = 'Sulu';
+$labels['acll'] = 'Nadi';
+$labels['aclr'] = 'Ɣer iznan';
+$labels['aclp'] = 'Aru izen';
+$labels['aclc'] = 'Rnu ikaramen isnawanen';
+$labels['aclk'] = 'Rnu ikaramen isnawanen';
+$labels['acld'] = 'Kkes iznan';
+$labels['aclt'] = 'Ɣer iznan';
+$labels['acle'] = 'Sfeá¸';
+$labels['aclx'] = 'Kkes akaram';
+$labels['acla'] = 'Sefrek';
+$labels['acln'] = 'Rnu tizmilin i yiznan';
+$labels['shortaclk'] = 'Rnu';
+$labels['shortacld'] = 'Kkes';
+$labels['shortaclt'] = 'Kkes';
+$labels['shortacla'] = 'Sefrek';
+$labels['shortacln'] = 'Rnu tazmilt';
+$labels['shortaclother'] = 'Ayen-nniá¸en';
+$labels['shortaclread'] = 'Ɣeṛ';
+$labels['shortaclwrite'] = 'Aru';
+$labels['shortacldelete'] = 'Kkes';
+$messages['deleting'] = 'Kkes akk izerfan n unekcum...';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'ការ​ចែក​រំលែក';
+$labels['myrights'] = 'សិទ្ធិ​ចូល';
+$labels['username'] = 'អ្នក​ប្រើ៖';
+$labels['advanced'] = 'បែប​កម្រិážâ€‹ážáŸ’ពស់';
+$labels['newuser'] = 'បន្ážáŸ‚ម​ធាážáž»';
+$labels['actions'] = 'សកម្មភាព​សិទ្ធិ​ចូល...';
+$labels['anyone'] = 'អ្នក​ប្រើ​ទាំង​អស់ (នរណា​ម្នាក់)';
+$labels['anonymous'] = 'ភ្ញៀវ (អនាមិក)';
+$labels['acll'] = 'ស្វែងរក';
+$labels['aclr'] = 'អាន​សារ';
+$labels['acli'] = 'បញ្ចូល (ចម្លង​មក​ដាក់)';
+$labels['aclp'] = 'ប្រកាស';
+$labels['aclc'] = 'បង្កើážâ€‹ážážâ€‹ážšáž„';
+$labels['aclk'] = 'បង្កើážâ€‹ážážâ€‹ážšáž„';
+$labels['acld'] = 'លុប​សារ';
+$labels['aclt'] = 'លុប​សារ';
+$labels['acle'] = 'ដកចáŸáž‰';
+$labels['aclx'] = 'លុប​ážáž';
+$labels['acla'] = 'អភិបាល';
+$labels['aclfull'] = 'បញ្ជា​ទាំង​អស់';
+$labels['aclother'] = 'ផ្សáŸáž„ៗ';
+$labels['aclread'] = 'អាន';
+$labels['aclwrite'] = 'សរសáŸážš';
+$labels['acldelete'] = 'លុប';
+$labels['shortacll'] = 'ស្វែងរក';
+$labels['shortaclr'] = 'អាន';
+$labels['shortacls'] = 'រក្សា';
+$labels['shortaclw'] = 'សរសáŸážš';
+$labels['shortacli'] = 'បញ្ចូល';
+$labels['shortaclp'] = 'ប្រកាស';
+$labels['shortaclc'] = 'បង្កើáž';
+$labels['shortaclk'] = 'បង្កើáž';
+$labels['shortacld'] = 'លុប';
+$labels['shortaclt'] = 'លុប';
+$labels['shortacle'] = 'ដកចáŸáž‰';
+$labels['shortaclx'] = 'ការ​លុប​ážáž';
+$labels['shortacla'] = 'អភិបាល';
+$labels['shortaclother'] = 'ផ្សáŸáž„ៗ';
+$labels['shortaclread'] = 'អាន';
+$labels['shortaclwrite'] = 'សរសáŸážš';
+$labels['shortacldelete'] = 'លុប';
+$labels['longaclr'] = 'ážážâ€‹áž“áŸáŸ‡â€‹áž¢áž¶áž…​បើក​សម្រាប់​អាន';
+$labels['longacle'] = 'សារ​នáŸáŸ‡â€‹áž¢áž¶áž…​ážáŸ’រូវ​បាន​ដក​ចáŸáž‰';
+$labels['longaclx'] = 'ážážâ€‹áž“áŸáŸ‡ អាច​ážáŸ’រូវ​បាន​លុប ឬ​ ប្ដូរ​ឈ្មោះ';
+$labels['longacla'] = 'សិទ្ធិ​ចូល​ទៅ​កាន់​ážážâ€‹áž“áŸáŸ‡â€‹áž¢áž¶áž…​ážáŸ’រូវ​បាន​​ផ្លាស់​ប្ដូរ​';
+$labels['longacldelete'] = 'សារ​នáŸáŸ‡â€‹áž¢áž¶áž…​ážáŸ’រូវ​បាន​លុប';
+$messages['deleting'] = 'កំពុង​លុប​សិទ្ធិ​ចូល...';
+$messages['saving'] = 'រក្សា​ទុក​សិទ្ធិ​ចូល...';
+$messages['deletesuccess'] = 'លុប​សិទ្ធិ​ចូល​ដោយ​ជោគជáŸáž™â€‹';
+$messages['createsuccess'] = 'បន្ážáŸ‚ម​សិទ្ធិ​ចូល​ដោយ​ជោគជáŸáž™';
+$messages['updateerror'] = 'មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​សិទ្ធិ​ចូល';
+$messages['deleteerror'] = 'មិន​អាច​លុប​សិទ្ធិ​ចូល';
+$messages['createerror'] = 'មិន​អាច​បន្ážáŸ‚ម​សិទ្ធិ​ចូល';
+$messages['deleteconfirm'] = 'ážáž¾â€‹áž¢áŸ’នក​ពិážâ€‹áž‡áž¶â€‹áž…ង់​ដក​សិទ្ធ​ចូល​ពី​អ្នក​ប្រើប្រាស់​ដែល​បាន​រើស​មែនទáŸ?';
+$messages['norights'] = 'មិន​បាន​បញ្ជាក់​សិទ្ធិ​ច្បាស់​លាស់!';
+$messages['nouser'] = 'មិន​បាន​បញ្ជាក់​ឈ្មោះ​អ្នក​ប្រើ!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = '공유';
+$labels['myrights'] = '접근 권한';
+$labels['username'] = '사용ìž:';
+$labels['advanced'] = '고급 모드';
+$labels['newuser'] = '입력내용 추가';
+$labels['editperms'] = '권한 수정';
+$labels['actions'] = 'ì ‘ê·¼ 권한 ë™ìž‘...';
+$labels['anyone'] = '모든 ì‚¬ìš©ìž (아무나)';
+$labels['anonymous'] = 'ë°©ë¬¸ìž (ìµëª…)';
+$labels['identifier'] = 'ì‹ë³„ìž';
+$labels['acll'] = '조회';
+$labels['aclr'] = 'ì½ì€ 메시지';
+$labels['acls'] = 'ì½ì€ ìƒíƒœ 유지';
+$labels['aclw'] = '쓰기 깃발';
+$labels['acli'] = '삽입 (복사할 위치)';
+$labels['aclp'] = '게시';
+$labels['aclc'] = '하위 í´ë” ìƒì„±';
+$labels['aclk'] = '하위 í´ë” ìƒì„±';
+$labels['acld'] = '메시지 삭제';
+$labels['aclt'] = '메시지 삭제';
+$labels['acle'] = 'ì˜êµ¬ 제거';
+$labels['aclx'] = 'í´ë” ì‚­ì œ';
+$labels['acla'] = '관리';
+$labels['acln'] = 'ë©”ì‹œì§€ì— ì£¼ì„ ì¶”ê°€';
+$labels['aclfull'] = '전체 제어 권한';
+$labels['aclother'] = '기타';
+$labels['aclread'] = 'ì½ìŒ';
+$labels['aclwrite'] = '쓰기';
+$labels['acldelete'] = '삭제';
+$labels['shortacll'] = '조회';
+$labels['shortaclr'] = 'ì½ìŒ';
+$labels['shortacls'] = 'ë³´ê´€';
+$labels['shortaclw'] = '쓰기';
+$labels['shortacli'] = '삽입';
+$labels['shortaclp'] = '게시';
+$labels['shortaclc'] = 'ìƒì„±';
+$labels['shortaclk'] = 'ìƒì„±';
+$labels['shortacld'] = '삭제';
+$labels['shortaclt'] = '삭제';
+$labels['shortacle'] = '지움';
+$labels['shortaclx'] = 'í´ë” ì‚­ì œ';
+$labels['shortacla'] = '관리';
+$labels['shortacln'] = 'ì£¼ì„ ì¶”ê°€';
+$labels['shortaclother'] = '기타';
+$labels['shortaclread'] = 'ì½ê¸°';
+$labels['shortaclwrite'] = '쓱';
+$labels['shortacldelete'] = '삭제';
+$labels['longacll'] = 'í´ë”ê°€ 목ë¡ì— 나타나고 ë‹¤ìŒ ì‚¬ìš©ìžê°€ 구ë…í•  수 있ìŒ:';
+$labels['longaclr'] = 'ì½ê¸° 위해 í´ë”를 ì—´ 수 있ìŒ';
+$labels['longacls'] = 'ì½ì€ 메시지 ê¹ƒë°œì´ ë³€ê²½ë  ìˆ˜ 있ìŒ';
+$labels['longaclw'] = '메시지 깃발 ë° í‚¤ì›Œë“œë¥¼ 변경할 수 있ìŒ, 다만 ì½ìŒ ë° ì‚­ì œë¨ì€ 제외ë¨';
+$labels['longacli'] = '메시지를 í´ë”ì— ë³µì‚¬í•˜ê±°ë‚˜ 작성할 수 있ìŒ';
+$labels['longaclp'] = '메시지가 ì´ í´ë”ì— ê²Œì‹œë  ìˆ˜ 있ìŒ';
+$labels['longaclc'] = 'ì´ í´ë”ì˜ ë°”ë¡œ ì•„ëž˜ì— í´ë”를 ìƒì„±(ë˜ëŠ” ì´ë¦„ 변경)í•  수 있ìŒ';
+$labels['longaclk'] = 'ì´ í´ë”ì˜ ë°”ë¡œ ì•„ëž˜ì— í´ë”를 ìƒì„±(ë˜ëŠ” ì´ë¦„ 변경)í•  수 있ìŒ';
+$labels['longacld'] = '메시지 ì‚­ì œ ê¹ƒë°œì´ ë³€ê²½ë  ìˆ˜ 있ìŒ';
+$labels['longaclt'] = '메시지 ì‚­ì œ ê¹ƒë°œì´ ë³€ê²½ë  ìˆ˜ 있ìŒ';
+$labels['longacle'] = '메시지가 ì˜êµ¬ ì œê±°ë  ìˆ˜ 있ìŒ';
+$labels['longaclx'] = 'í´ë”를 삭제하거나 ì´ë¦„ì„ ë³€ê²½ í•  수 있ìŒ';
+$labels['longacla'] = 'í´ë”ì˜ ì ‘ê·¼ ê¶Œí•œì„ ë³€ê²½í•  수 있ìŒ';
+$labels['longacln'] = 'ê³µìœ ëœ ë©”íƒ€ë°ì´í„°(주ì„)ì€ ë³€ê²½ë  ìˆ˜ 있습니다';
+$labels['longaclfull'] = 'í´ë” 관리를 í¬í•¨í•œ ì „ì²´ 제어 권한';
+$labels['longaclread'] = 'í´ë”를 ì—´ì–´ ì½ì„ 수 있ìŒ';
+$labels['longaclwrite'] = '메시지를 표시하거나, í´ë”ë¡œ ì´ë™ ë˜ëŠ” 복사할 수 있ìŒ';
+$labels['longacldelete'] = '메시지를 삭제할 수 있ìŒ';
+$labels['longaclother'] = '기타 접근 권한';
+$labels['ariasummaryacltable'] = 'ì ‘ê·¼ 권한 목ë¡';
+$labels['arialabelaclactions'] = 'ëª©ë¡ ë™ìž‘';
+$labels['arialabelaclform'] = 'ì ‘ê·¼ 권한 ì–‘ì‹';
+$messages['deleting'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì‚­ì œí•˜ëŠ” 중...';
+$messages['saving'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì €ìž¥í•˜ëŠ” 중...';
+$messages['updatesuccess'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì„±ê³µì ìœ¼ë¡œ 변경함';
+$messages['deletesuccess'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì„±ê³µì ìœ¼ë¡œ 삭제함.';
+$messages['createsuccess'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì„±ê³µì ìœ¼ë¡œ 추가함.';
+$messages['updateerror'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì—…ë°ì´íŠ¸ í•  수 ì—†ìŒ';
+$messages['deleteerror'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì‚­ì œí•  수 ì—†ìŒ';
+$messages['createerror'] = 'ì ‘ê·¼ ê¶Œí•œì„ ì¶”ê°€í•  수 ì—†ìŒ';
+$messages['deleteconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ 사용ìžì˜ ì ‘ê·¼ ê¶Œí•œì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$messages['norights'] = 'ì§€ì •ëœ ê¶Œí•œì´ ì—†ìŒ!';
+$messages['nouser'] = 'ì§€ì •ëœ ì‚¬ìš©ìžëª…ì´ ì—†ìŒ!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Parvekirin';
+$labels['myrights'] = 'Mafên Têketinê';
+$labels['username'] = 'Bikarhêner:';
+$labels['advanced'] = 'Moda pêşketî';
+$labels['newuser'] = 'Têketinek zêde bike';
+$labels['editperms'] = 'Destûrdayînan Sererast Bike';
+$labels['actions'] = 'Digihîje tevgerên çê..';
+$labels['anyone'] = 'Hemû bikarhêner (her kes)';
+$labels['anonymous'] = 'Mêvan (gelêrî)';
+$labels['identifier'] = 'Danasîner';
+$labels['acll'] = 'Lê bigere';
+$labels['aclr'] = 'Peyaman bixwîne';
+$labels['aclw'] = 'Alayan binivîse';
+$labels['acli'] = 'Têxe (Heman bike li)';
+$labels['aclp'] = 'Şandî';
+$labels['aclc'] = 'Bindosyeyan çêke';
+$labels['aclk'] = 'Bindosyeyan çêke';
+$labels['acld'] = 'Peyaman binivîse';
+$labels['aclt'] = 'Peyaman jê bibe';
+$labels['acle'] = 'Jê derxîne';
+$labels['aclx'] = 'Dosyeyê jê bibe';
+$labels['acla'] = 'Birêvebir';
+$labels['acln'] = 'Bi nîşeyan peyaman rave bike';
+$labels['aclfull'] = 'Tam venêrîn';
+$labels['aclother'] = 'Ên din';
+$labels['aclread'] = 'Bixwîne';
+$labels['aclwrite'] = 'Binivîse';
+$labels['acldelete'] = 'Jê bibe';
+$labels['shortacll'] = 'Lê bigere';
+$labels['shortaclr'] = 'Bixwîne';
+$labels['shortacls'] = 'Bihêle';
+$labels['shortaclw'] = 'Binivîse';
+$labels['shortacli'] = 'Tev bike';
+$labels['shortaclp'] = 'Şandî';
+$labels['shortaclc'] = 'Çêke';
+$labels['shortaclk'] = 'Çêke';
+$labels['shortacld'] = 'Jê bibe';
+$labels['shortaclt'] = 'Jê bibe';
+$labels['shortacle'] = 'Jê derxîne';
+$labels['shortaclx'] = 'Dosye-jêbirin';
+$labels['shortacla'] = 'Bikarhêner';
+$labels['shortacln'] = 'Bi nîşeyan rave bike';
+$labels['shortaclother'] = 'Ên din';
+$labels['shortaclread'] = 'Bixwîne';
+$labels['shortaclwrite'] = 'Binivîse';
+$labels['shortacldelete'] = 'Jê bibe';
+$labels['longaclr'] = 'Dosye ji bo xwendinê dikare bê vekirin';
+$labels['longacls'] = 'Alaya peyamên Dîtî dikare bête guhartin';
+$labels['longaclc'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
+$labels['longaclk'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
+$labels['longaclx'] = 'Dosye dikare bê jêbirin an jî binavkirin';
+$labels['longacla'] = 'Mafê gihîştina dosyeyê dikare bê guhartin';
+$labels['longaclfull'] = 'Tam venêrîn bi birêvebirina dosyeyê';
+$labels['longaclread'] = 'Dosye ji bo xwendinê dikare bê vekirin';
+$labels['longaclwrite'] = 'Peyam dikarin kopiyî dosyeyê bên kirin, nîşankirin, nivîsandin.';
+$labels['longacldelete'] = 'Hêmî peyam dikarin werin jêbirin';
+$labels['longaclother'] = 'Mafên din ên têketinê';
+$labels['ariasummaryacltable'] = 'Lîsteya mafên têketinê';
+$labels['arialabelaclactions'] = 'Tevgeran liste bike';
+$labels['arialabelaclform'] = 'Forma mafên têketinê';
+$messages['deleting'] = 'Mafên têketinê tên jêbirin...';
+$messages['saving'] = 'Mafên têketinê tên tomarkirin...';
+$messages['updatesuccess'] = 'Mafên têketinê bi serkeftin hatin guhartin';
+$messages['deletesuccess'] = 'Mafên têketinê bi serkeftin hatin jêbirin';
+$messages['createsuccess'] = 'Mafên têketinê bi serkeftin hatin tevkirin';
+$messages['updateerror'] = 'Nûkirina mafên têketinê bigire';
+$messages['deleteerror'] = 'Jêbirina mafên têketinê bigire';
+$messages['createerror'] = 'Tevkirina mafên têketinê bigire';
+$messages['deleteconfirm'] = 'Tu ewle yî, dixwazî mafên têketinê yên bikarhênerê(n) bijartî rakî?';
+$messages['norights'] = 'Tu maf nehat diyarkirin!';
+$messages['nouser'] = 'Tu bikarhêner nehat diyarkirin!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'هاوبەشکردن';
+$labels['username'] = 'بەکارهێنەر:';
+$labels['advanced'] = 'شێوازی پێشکەوتوو';
+$labels['shortaclc'] = 'دروستکردن';
+$labels['shortaclk'] = 'دروستکردن';
+$labels['shortacld'] = 'سڕینەوە';
+$labels['shortaclt'] = 'سڕینەوە';
+$labels['shortaclx'] = 'سڕینەوەی بوخچە';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Sharing';
+$labels['myrights'] = 'Zougrëffsrechter';
+$labels['username'] = 'Benotzer:';
+$labels['advanced'] = 'Avancéierte Modus';
+$labels['newuser'] = 'Element dobäisetzen';
+$labels['actions'] = 'Optioune fir d\'Zougrëffsrechter';
+$labels['anyone'] = 'All d\'Benotzer (jiddwereen)';
+$labels['anonymous'] = 'Gaascht (anonym)';
+$labels['identifier'] = 'Identifiant';
+$labels['acll'] = 'Noschloen';
+$labels['aclr'] = 'Messagë liesen';
+$labels['acls'] = 'Lies-Status behalen';
+$labels['acld'] = 'Messagë läschen';
+$labels['aclt'] = 'Messagë läschen';
+$labels['acle'] = 'Ausläschen';
+$labels['aclx'] = 'Dossier läschen';
+$labels['acla'] = 'Administréieren';
+$labels['aclfull'] = 'Voll Kontroll';
+$labels['aclother'] = 'Aner';
+$labels['aclread'] = 'Liesen';
+$labels['aclwrite'] = 'Schreiwen';
+$labels['acldelete'] = 'Läschen';
+$labels['shortacll'] = 'Noschloen';
+$labels['shortaclr'] = 'Liesen';
+$labels['shortacls'] = 'Halen';
+$labels['shortaclw'] = 'Schreiwen';
+$labels['shortacli'] = 'Drasetze';
+$labels['shortaclp'] = 'Schécken';
+$labels['shortaclc'] = 'Erstellen';
+$labels['shortaclk'] = 'Erstellen';
+$labels['shortacld'] = 'Läschen';
+$labels['shortaclt'] = 'Läschen';
+$labels['shortacle'] = 'Ausläschen';
+$labels['shortaclx'] = 'Dossier läschen';
+$labels['shortacla'] = 'Administréieren';
+$labels['shortaclother'] = 'Aner';
+$labels['shortaclread'] = 'Liesen';
+$labels['shortaclwrite'] = 'Schreiwen';
+$labels['shortacldelete'] = 'Läschen';
+$labels['longacldelete'] = 'Messagë kënne geläscht ginn';
+$messages['deleting'] = 'Zougrëffsrechter gi geläscht...';
+$messages['saving'] = 'Zougrëffsrechter gi gespäichert...';
+$messages['updatesuccess'] = 'Rechter erfollegräich geännert';
+$messages['deletesuccess'] = 'Rechter erfollegräich geläscht';
+$messages['createsuccess'] = 'Rechter erfollegräich dobäigesat';
+$messages['updateerror'] = 'D\'Zougrëffsrechter kënnen net aktualiséiert ginn';
+$messages['deleteerror'] = 'Rechter kënnen net geläscht ginn';
+$messages['createerror'] = 'Zougrëffsrechter kënnen net dobäigesat ginn';
+$messages['deleteconfirm'] = 'Bass du dir sécher, dass du d\'Zougrëffsrechter fir déi ausgewielte Benotzer wëlls ewechhuelen?';
+$messages['norights'] = 'Et goufe keng Rechter uginn! ';
+$messages['nouser'] = 'Et gouf kee Benotzernumm uginn!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Dalinimasis';
+$labels['myrights'] = 'Prieigos teisÄ—s';
+$labels['username'] = 'Vartotojas:';
+$labels['advanced'] = 'Pažengusio vartotojo rėžimas';
+$labels['newuser'] = 'Pridėti įrašą';
+$labels['editperms'] = 'Tvarkyti leidimus';
+$labels['actions'] = 'Prieigos teisių veiksmai...';
+$labels['anyone'] = 'Visi vartotojai (bet kas)';
+$labels['anonymous'] = 'SveÄias (anonimas)';
+$labels['identifier'] = 'Identifikatorius';
+$labels['acll'] = 'Paieška';
+$labels['aclr'] = 'Perskaityti pranešimus';
+$labels['acls'] = 'Palikti būseną "Žiūrėtas"';
+$labels['aclw'] = 'Įrašyti vėliavėles';
+$labels['acli'] = 'Įterpti (kopijuoti į)';
+$labels['aclp'] = 'Įrašas';
+$labels['aclc'] = 'Kurti poaplankius';
+$labels['aclk'] = 'Kurti poaplankius';
+$labels['acld'] = 'Ištrinti žinutes';
+$labels['aclt'] = 'Ištrinti žinutes';
+$labels['acle'] = 'IÅ¡braukti';
+$labels['aclx'] = 'IÅ¡trinti aplankÄ…';
+$labels['acla'] = 'Valdyti';
+$labels['acln'] = 'Anotuoti laiškus';
+$labels['aclfull'] = 'Visiška kontrolė';
+$labels['aclother'] = 'Kita';
+$labels['aclread'] = 'Skaityti';
+$labels['aclwrite'] = 'Įrašyti';
+$labels['acldelete'] = 'Trinti';
+$labels['shortacll'] = 'Paieška';
+$labels['shortaclr'] = 'Skaityti';
+$labels['shortacls'] = 'Palikti';
+$labels['shortaclw'] = 'Įrašyti';
+$labels['shortacli'] = 'Įterpti';
+$labels['shortaclp'] = 'Įrašas';
+$labels['shortaclc'] = 'Sukurti';
+$labels['shortaclk'] = 'Sukurti';
+$labels['shortacld'] = 'Trinti';
+$labels['shortaclt'] = 'Trinti';
+$labels['shortacle'] = 'IÅ¡braukti';
+$labels['shortaclx'] = 'IÅ¡trinti aplankÄ…';
+$labels['shortacla'] = 'Valdyti';
+$labels['shortacln'] = 'Anotuoti';
+$labels['shortaclother'] = 'Kita';
+$labels['shortaclread'] = 'Skaityti';
+$labels['shortaclwrite'] = 'Įrašyti';
+$labels['shortacldelete'] = 'Trinti';
+$labels['longacll'] = 'Aplankas yra matomas sąrašuose ir gali būti prenumeruojamas';
+$labels['longaclr'] = 'Aplanką galima peržiūrėti';
+$labels['longacls'] = 'Pranešimų vėliavėlė "Matyta" gali būti pakeista';
+$labels['longaclw'] = 'Pranešimų vėliavėlės ir raktažodžiai gali būti pakeisti, išskyrus "Matytas" ir "Ištrintas"';
+$labels['longacli'] = 'Pranešimai gali būti įrašyti arba nukopijuoti į aplanką';
+$labels['longaclp'] = 'Į šį aplanką galima dėti laiškus.';
+$labels['longaclc'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
+$labels['longaclk'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
+$labels['longacld'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
+$labels['longaclt'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
+$labels['longacle'] = 'Pranešimai gali būti išbraukti';
+$labels['longaclx'] = 'Aplankas gali būti pašalintas arba pervadintas';
+$labels['longacla'] = 'Aplanko prieigos teisės gali būti pakeistos';
+$labels['longacln'] = 'Bendrieji laiškų meta-duomenys (anotacijos) gali būti pakeisti';
+$labels['longaclfull'] = 'Visiška kontrolė įskaitant aplanko administravimą';
+$labels['longaclread'] = 'Aplanką galima peržiūrėti';
+$labels['longaclwrite'] = 'Pranešimai gali būti pažymėti, įrašyti arba nukopijuoti į aplanką';
+$labels['longacldelete'] = 'Pranešimai gali būti ištrinti';
+$labels['longaclother'] = 'Kitos prieigos teisÄ—s';
+$labels['ariasummaryacltable'] = 'Prieigos teisių sąrašas';
+$labels['arialabelaclactions'] = 'Rodyti veiksmus';
+$labels['arialabelaclform'] = 'Prieigos teisių forma';
+$messages['deleting'] = 'Panaikinamos prieigos teisÄ—s';
+$messages['saving'] = 'IÅ¡saugomos prieigos teisÄ—s';
+$messages['updatesuccess'] = 'Prieigos teisÄ—s sÄ—kmingai pakeistos';
+$messages['deletesuccess'] = 'Prieigos teisÄ—s sÄ—kmingai panaikintos';
+$messages['createsuccess'] = 'Prieigos teisÄ—s sÄ—kmingai pridÄ—tos';
+$messages['updateerror'] = 'Nepavyko pakeisti prieigos teisių';
+$messages['deleteerror'] = 'Neįmanoma panaikinti prieigos teises';
+$messages['createerror'] = 'Neišeina pridėti prieigos teises';
+$messages['deleteconfirm'] = 'Ar jūs esate įsitikinę, jog norite panaikinti prieigos teises pažymėtiems vartotojams(-ui)?';
+$messages['norights'] = 'Nenurodytos jokios teisÄ—s!';
+$messages['nouser'] = 'Nenurodytas joks vartotojas!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'DalÄ«Å¡anÄs';
+$labels['myrights'] = 'Piekļuves tiesības';
+$labels['username'] = 'LietotÄjs:';
+$labels['advanced'] = 'PaplaÅ¡inÄtais režīms';
+$labels['newuser'] = 'Pievienot ierakstu';
+$labels['editperms'] = 'Rediģēt piejas';
+$labels['actions'] = 'DarbÄ«bas ar piekļuves tiesÄ«bÄm...';
+$labels['anyone'] = 'Visi lietotÄji (ikviens)';
+$labels['anonymous'] = 'Viesi (anonīmie)';
+$labels['identifier'] = 'Identifikators';
+$labels['acll'] = 'Atrast';
+$labels['aclr'] = 'Lasīt ziņojumus';
+$labels['acls'] = 'PaturÄ“t "RedzÄ“tÄ" statusu';
+$labels['aclw'] = 'SaglabÄt atzÄ«mes';
+$labels['acli'] = 'Ievietot (Iekopēt)';
+$labels['aclp'] = 'Nosūtīt';
+$labels['aclc'] = 'Izveidot apakšmapes';
+$labels['aclk'] = 'Izveidot apakšmapes';
+$labels['acld'] = 'Dzēst ziņojumus';
+$labels['aclt'] = 'Dzēst ziņojumus';
+$labels['acle'] = 'Izdzēst';
+$labels['aclx'] = 'Dzēst mapi';
+$labels['acla'] = 'PÄrvaldÄ«t';
+$labels['acln'] = 'Anotēt e-pastus';
+$labels['aclfull'] = 'Pilna kontrole';
+$labels['aclother'] = 'Cits';
+$labels['aclread'] = 'Lasīt';
+$labels['aclwrite'] = 'Rakstīt';
+$labels['acldelete'] = 'Dzēst';
+$labels['shortacll'] = 'Atrast';
+$labels['shortaclr'] = 'Lasīt';
+$labels['shortacls'] = 'Paturēt';
+$labels['shortaclw'] = 'Rakstīt';
+$labels['shortacli'] = 'Ievietot';
+$labels['shortaclp'] = 'Nosūtīt';
+$labels['shortaclc'] = 'Izveidot';
+$labels['shortaclk'] = 'Izveidot';
+$labels['shortacld'] = 'Dzēst';
+$labels['shortaclt'] = 'Dzēst';
+$labels['shortacle'] = 'Izdzēst';
+$labels['shortaclx'] = 'Mapes dzēšana';
+$labels['shortacla'] = 'PÄrvaldÄ«t';
+$labels['shortacln'] = 'Anotēt';
+$labels['shortaclother'] = 'Cits';
+$labels['shortaclread'] = 'Lasīt';
+$labels['shortaclwrite'] = 'Rakstīt';
+$labels['shortacldelete'] = 'Dzēst';
+$labels['longacll'] = 'Mape ir redzama kopÄ“jÄ mapju sarakstÄ un var tikt abonÄ“ta';
+$labels['longaclr'] = 'Ši mape var tikt atvērta lasīšanai';
+$labels['longacls'] = 'Ziņojumu "Redzēts" atzīme var tik mainīta';
+$labels['longaclw'] = 'Ziņojumu atzÄ«mes, izņemot "RedzÄ“ts" un "DzÄ“sts", un atslÄ“gvÄrdi var tik mainÄ«ti';
+$labels['longacli'] = 'Ziņojumi var tikt  ierakstÄ«ti vai pÄrkopÄ“ti uz Å¡o mapi';
+$labels['longaclp'] = 'VÄ“stules var tikt ievietotas Å¡ajÄ mapÄ“';
+$labels['longaclc'] = 'Zem Å¡Ä«s mapes pa tieÅ¡o var tikt izveidotas (vai pÄrsauktas) citas mapes';
+$labels['longaclk'] = 'Zem Å¡Ä«s mapes pa tieÅ¡o var tikt izveidotas (vai pÄrsauktas) citas mapes';
+$labels['longacld'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
+$labels['longaclt'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
+$labels['longacle'] = 'Vēstules var tikt izdzēstas';
+$labels['longaclx'] = 'Mape var tikt gan dzÄ“sta, gan pÄrdÄ“vÄ“ta';
+$labels['longacla'] = 'Mapes pieejas tiesības var tikt izmainītas';
+$labels['longacln'] = 'E-pastu koplietotie meta dati (anotÄcijas) var tikt mainÄ«ti';
+$labels['longaclfull'] = 'Pilna kontrole, iekļaujot arī mapju administrēšanu';
+$labels['longaclread'] = 'Mape var tikt atvērta lasīšanai';
+$labels['longaclwrite'] = 'Ziņojumi mapÄ“ var tikt gan atzÄ«mÄ“ti, gan ierakstÄ«ti vai arÄ« pÄrkopÄ“ti uz mapi';
+$labels['longacldelete'] = 'Vēstules var tikt izdzēstas';
+$labels['longaclother'] = 'Pieejas tiesības citiem';
+$labels['ariasummaryacltable'] = 'Pieejas tiesību saraksts';
+$labels['arialabelaclactions'] = 'Darbību saraksts';
+$labels['arialabelaclform'] = 'Pieejas tiesību forma';
+$messages['deleting'] = 'Dzēš piekļuves tiesības...';
+$messages['saving'] = 'SaglabÄ piekļuves tiesÄ«bas...';
+$messages['updatesuccess'] = 'Piekļuves tiesības tika veiksmīgi samainītas';
+$messages['deletesuccess'] = 'Piekļuves tiesības tika veiksmīgi izdzēstas';
+$messages['createsuccess'] = 'Piekļuves tiesības tika veiksmīgi pievienotas';
+$messages['updateerror'] = 'Pieejas tiesÄ«bas nomainÄ«t neizdevÄs';
+$messages['deleteerror'] = 'Piekļuves tiesÄ«bas izdzÄ“st neizdevÄs';
+$messages['createerror'] = 'Piekļuves tiesÄ«bas pievienot neizdevÄs';
+$messages['deleteconfirm'] = 'Vai tieÅ¡Äm atzÄ«mÄ“tajiem lietotÄjiem noņemt piekļuves tiesÄ«bas?';
+$messages['norights'] = 'Netika norÄdÄ«tas tiesÄ«bas!';
+$messages['nouser'] = 'Netika norÄdÄ«ts lietotÄjvÄrds!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Сподели';
+$labels['myrights'] = 'Право на приÑтап';
+$labels['username'] = 'КориÑник';
+$labels['advanced'] = 'Ðапредно ниво';
+$labels['newuser'] = 'Додади запиÑ';
+$labels['editperms'] = 'Уреди одобрение';
+$labels['actions'] = 'Правото на приÑтапување';
+$labels['anyone'] = 'Сите кориÑници (Ñекој)';
+$labels['anonymous'] = 'ГоÑти (анонимен)';
+$labels['identifier'] = 'Идентификатор';
+$labels['acll'] = 'Пронајди';
+$labels['aclr'] = 'Прочитај пораките';
+$labels['acls'] = 'Задржи ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€ÐµÐ³Ð»ÐµÐ´Ð°Ð½Ð¾';
+$labels['aclw'] = 'Ðапиши знамиња';
+$labels['acli'] = 'Вметни (копирај)';
+$labels['aclp'] = 'Објави';
+$labels['aclc'] = 'Создај подпапка';
+$labels['aclk'] = 'Креирај подпапка';
+$labels['acld'] = 'Избриши пораки ';
+$labels['aclt'] = 'Избриши пораки';
+$labels['acle'] = 'ИÑпразни ';
+$labels['aclx'] = 'Избриши папка ';
+$labels['acla'] = 'Управувај ';
+$labels['acln'] = 'Коментирај пораки ';
+$labels['aclfull'] = 'ЦелоÑна контрола ';
+$labels['aclother'] = 'Друго ';
+$labels['aclread'] = 'Читај ';
+$labels['aclwrite'] = 'Пишувај ';
+$labels['acldelete'] = 'Бришај ';
+$labels['shortacll'] = 'Пребарувај ';
+$labels['shortaclr'] = 'Чита';
+$labels['shortacls'] = 'Задржи';
+$labels['shortaclw'] = 'Пишивај';
+$labels['shortacli'] = 'ВнеÑи ';
+$labels['shortaclp'] = 'ПоÑтирај';
+$labels['shortaclc'] = 'Креирај ';
+$labels['shortaclk'] = 'Создај';
+$labels['shortacld'] = 'Избриши ';
+$labels['shortaclt'] = 'Избриши';
+$labels['shortacle'] = 'Избриши трајно ';
+$labels['shortaclx'] = 'Бришај папка ';
+$labels['shortacla'] = 'Управувај ';
+$labels['shortacln'] = 'Дај коментар ';
+$labels['shortaclother'] = 'Друго ';
+$labels['shortaclread'] = 'Читај';
+$labels['shortaclwrite'] = 'Пичувај';
+$labels['shortacldelete'] = 'Избриши';
+$labels['longacll'] = 'Папката е видлива на лиÑтите и може да Ñе претплати на неа ';
+$labels['longaclr'] = 'Папката може да Ñе отвори за читање ';
+$labels['longacls'] = 'Знамето за прегледани пораки може да Ñе Ñмени ';
+$labels['longaclw'] = 'Знамињата за пораки и клучните зборови може да Ñе Ñменат, оÑвен прегледани и избришани';
+$labels['longacli'] = 'Пораките можат да Ñе впишаат или иÑкопираат во папката ';
+$labels['longaclp'] = 'Пораки може да бидат објавени во оваа папка';
+$labels['longaclc'] = 'Папките може да Ñе креираат (или преименуваат) директно под оваа папка ';
+$labels['longaclk'] = 'Папките може да Ñе креираат (или преименуваат) директно под оваа папка ';
+$labels['longacld'] = 'Знамето за избришани пораки може да Ñе Ñмени';
+$labels['longaclt'] = 'Знамето за избришани пораки може да Ñе Ñмени';
+$labels['longacle'] = 'Пораките може трајно да Ñе избришаат ';
+$labels['longaclx'] = 'Папката може да Ñе избрише или преименува ';
+$labels['longacla'] = 'Правата за приÑтап кон папката може да бидат променети ';
+$labels['longacln'] = 'Метадата (прибелешки) на Ñподелени пораки може да Ñе промени ';
+$labels['longaclfull'] = 'ЦелоÑна контрола вклучувајќи и админиÑтрација на папка ';
+$labels['longaclread'] = 'Папката може да биде отворена за читање ';
+$labels['longaclwrite'] = 'Пораките може да бидат штиклирани, запишани или копирани во папката ';
+$labels['longacldelete'] = 'Пораките може да бидат избришани ';
+$labels['longaclother'] = 'Други правила за приÑтап ';
+$labels['ariasummaryacltable'] = 'ЛиÑта од правила за приÑтап ';
+$labels['arialabelaclactions'] = 'ЛиÑта на акции ';
+$labels['arialabelaclform'] = 'Форма за правила на приÑтап ';
+$messages['deleting'] = 'Бришење на правата за приÑтап ';
+$messages['saving'] = 'Зачувување на правата за приÑтап ';
+$messages['updatesuccess'] = 'УÑпешно променети правила на приÑтап ';
+$messages['deletesuccess'] = 'УÑпешно избришани правила на приÑтап';
+$messages['createsuccess'] = 'УÑпешно додадени правила на приÑтап';
+$messages['updateerror'] = 'Ðе може да Ñе ажурират правата за приÑтап';
+$messages['deleteerror'] = 'Ðе може да Ñе избришаат правата за приÑтап';
+$messages['createerror'] = 'Ðе може да Ñе додадат правата за приÑтап';
+$messages['deleteconfirm'] = 'Дали Ñте Ñигурни дека Ñакате да ги тргнете правата за приÑтап на избраниот кориÑник(ци)? ';
+$messages['norights'] = 'Ðема наведени права! ';
+$messages['nouser'] = 'Ðема неведено кориÑничко име! ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Хуваалцах';
+$labels['myrights'] = 'ÐÑвтрÑлтийн зөвшөөрлүүд';
+$labels['username'] = 'Ð¥ÑÑ€ÑглÑгч:';
+$labels['advanced'] = 'ДÑлгÑÑ€Ñнгүй горим';
+$labels['newuser'] = 'ÐÑмÑÑ…';
+$labels['editperms'] = 'Зөвшөөрлүүдийг заÑах';
+$labels['actions'] = 'ÐÑвтрÑлтийн зөвшөөрлийн үйлдлүүд...';
+$labels['anyone'] = 'Бүх Ñ…ÑÑ€ÑглÑгч (хүн бүр)';
+$labels['anonymous'] = '(Үл таних) зочин';
+$labels['identifier'] = 'Таних мÑдÑÑлÑл';
+$labels['acll'] = 'Хайх';
+$labels['aclr'] = 'Ð—ÑƒÑ€Ð²Ð°Ñ ÑƒÐ½ÑˆÐ¸Ñ…';
+$labels['acls'] = 'ХарÑан төлөвт хадгалах';
+$labels['aclw'] = 'ТÑмдÑглÑгÑÑ Ñ…Ð¸Ð¹Ñ…';
+$labels['acli'] = 'Оруулах (хуулж)';
+$labels['aclp'] = 'БичлÑг';
+$labels['aclc'] = 'ДÑд Ñ…Ð°Ð²Ñ‚Ð°Ñ Ò¯Ò¯ÑгÑÑ…';
+$labels['aclk'] = 'ДÑд Ñ…Ð°Ð²Ñ‚Ð°Ñ Ò¯Ò¯ÑгÑÑ…';
+$labels['acld'] = 'Захиануудыг уÑтгах';
+$labels['aclt'] = 'Захиануудыг уÑтгах';
+$labels['acle'] = 'УÑтгах';
+$labels['aclx'] = 'Ð¥Ð°Ð²Ñ‚Ð°Ñ ÑƒÑтгах';
+$labels['acla'] = 'Зохицуулагч';
+$labels['acln'] = 'Тайлбар зурваÑ';
+$labels['aclfull'] = 'БүрÑн удирдлага';
+$labels['aclother'] = 'БуÑад';
+$labels['aclread'] = 'УншÑан';
+$labels['aclwrite'] = 'Бичих';
+$labels['acldelete'] = 'УÑтгах';
+$labels['shortacll'] = 'Хайх';
+$labels['shortaclr'] = 'Унших';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Deling';
+$labels['myrights'] = 'Tilgangsrettigheter';
+$labels['username'] = 'Bruker:';
+$labels['advanced'] = 'Avansert modus';
+$labels['newuser'] = 'Legg til oppføring';
+$labels['editperms'] = 'Rediger tilgangsrettigheter';
+$labels['actions'] = 'Valg for tilgangsrettigheter.';
+$labels['anyone'] = 'Alle brukere (alle)';
+$labels['anonymous'] = 'Gjester (anonyme)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Oppslag';
+$labels['aclr'] = 'Les meldinger';
+$labels['acls'] = 'Behold lesestatus';
+$labels['aclw'] = 'Lagre flagg';
+$labels['acli'] = 'Lim inn';
+$labels['aclp'] = 'Post';
+$labels['aclc'] = 'Opprett undermapper';
+$labels['aclk'] = 'Opprett undermapper';
+$labels['acld'] = 'Slett meldinger';
+$labels['aclt'] = 'Slett meldinger';
+$labels['acle'] = 'Slett fullstendig';
+$labels['aclx'] = 'Slett mappe';
+$labels['acla'] = 'Administrer';
+$labels['aclfull'] = 'Full kontroll';
+$labels['aclother'] = 'Annet';
+$labels['aclread'] = 'Les';
+$labels['aclwrite'] = 'Skriv';
+$labels['acldelete'] = 'Slett';
+$labels['shortacll'] = 'Oppslag';
+$labels['shortaclr'] = 'Les';
+$labels['shortacls'] = 'Behold';
+$labels['shortaclw'] = 'Skriv';
+$labels['shortacli'] = 'Sett inn';
+$labels['shortaclp'] = 'Post';
+$labels['shortaclc'] = 'Opprett';
+$labels['shortaclk'] = 'Opprett';
+$labels['shortacld'] = 'Slett';
+$labels['shortaclt'] = 'Slett';
+$labels['shortacle'] = 'Slett fullstendig';
+$labels['shortaclx'] = 'Slett mappe';
+$labels['shortacla'] = 'Administrer';
+$labels['shortaclother'] = 'Annet';
+$labels['shortaclread'] = 'Les';
+$labels['shortaclwrite'] = 'Skriv';
+$labels['shortacldelete'] = 'Slett';
+$labels['longacll'] = 'Mappen er synlig og kan abonneres på';
+$labels['longaclr'] = 'Mappen kan åpnes for lesing';
+$labels['longacls'] = 'Meldingenes lesestatusflagg kan endres';
+$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endres, bortsett fra status for lesing og sletting';
+$labels['longacli'] = 'Meldinger kan lagres eller kopieres til mappen';
+$labels['longaclp'] = 'Meldinger kan postes til denne mappen';
+$labels['longaclc'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
+$labels['longaclk'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
+$labels['longacld'] = 'Meldingenes flagg for sletting kan endres';
+$labels['longaclt'] = 'Meldingenes flagg for sletting kan endres';
+$labels['longacle'] = 'Meldingen kan slettes for godt';
+$labels['longaclx'] = 'Mappen kan slettes eller gis nytt navn';
+$labels['longacla'] = 'Mappens tilgangsrettigheter kan endres';
+$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
+$labels['longaclread'] = 'Mappen kan åpnes for lesing';
+$labels['longaclwrite'] = 'Meldinger kan merkes, lagres i eller flyttes til mappen';
+$labels['longacldelete'] = 'Meldingen kan slettes';
+$messages['deleting'] = 'Sletter tilgangsrettigheter';
+$messages['saving'] = 'Lagrer tilgangsrettigheter';
+$messages['updatesuccess'] = 'Tilgangsrettigheter ble endret';
+$messages['deletesuccess'] = 'Tilgangsrettigheter ble slettet';
+$messages['createsuccess'] = 'Tilgangsrettigheter ble lagt til';
+$messages['updateerror'] = 'Kunne ikke oppdatere tilgangsrettigheter';
+$messages['deleteerror'] = 'Kunne ikke fjerne tilgangsrettigheter';
+$messages['createerror'] = 'Kunne ikke legge til tilgangsrettigheter';
+$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valgte brukere';
+$messages['norights'] = 'Ingen rettigheter er spesifisert!';
+$messages['nouser'] = 'Brukernavn er ikke spesifisert!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['aclother'] = 'Anders';
+$labels['shortaclother'] = 'Anders';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Delen';
+$labels['myrights'] = 'Toegangsrechten';
+$labels['username'] = 'Gebruiker:';
+$labels['advanced'] = 'Geavanceerde modus';
+$labels['newuser'] = 'Item toevoegen';
+$labels['editperms'] = 'Rechten bewerken';
+$labels['actions'] = 'Toegangsrechtenopties...';
+$labels['anyone'] = 'Alle gebruikers (iedereen)';
+$labels['anonymous'] = 'Gasten (anoniem)';
+$labels['identifier'] = 'Identificatie';
+$labels['acll'] = 'Opzoeken';
+$labels['aclr'] = 'Berichten lezen';
+$labels['acls'] = 'Onthoud gelezen-status';
+$labels['aclw'] = 'Markeringen instellen';
+$labels['acli'] = 'Invoegen (kopiëren naar)';
+$labels['aclp'] = 'Plaatsen';
+$labels['aclc'] = 'Submappen aanmaken';
+$labels['aclk'] = 'Submappen aanmaken';
+$labels['acld'] = 'Berichten verwijderen';
+$labels['aclt'] = 'Berichten verwijderen';
+$labels['acle'] = 'Vernietigen';
+$labels['aclx'] = 'Map verwijderen';
+$labels['acla'] = 'Beheren';
+$labels['acln'] = 'Annoteer berichten';
+$labels['aclfull'] = 'Volledige toegang';
+$labels['aclother'] = 'Overig';
+$labels['aclread'] = 'Lezen';
+$labels['aclwrite'] = 'Schrijven';
+$labels['acldelete'] = 'Verwijderen';
+$labels['shortacll'] = 'Opzoeken';
+$labels['shortaclr'] = 'Lezen';
+$labels['shortacls'] = 'Behouden';
+$labels['shortaclw'] = 'Schrijven';
+$labels['shortacli'] = 'Invoegen';
+$labels['shortaclp'] = 'Plaatsen';
+$labels['shortaclc'] = 'Aanmaken';
+$labels['shortaclk'] = 'Aanmaken';
+$labels['shortacld'] = 'Verwijderen';
+$labels['shortaclt'] = 'Verwijderen';
+$labels['shortacle'] = 'Vernietigen';
+$labels['shortaclx'] = 'Map verwijderen';
+$labels['shortacla'] = 'Beheren';
+$labels['shortacln'] = 'Annoteren';
+$labels['shortaclother'] = 'Overig';
+$labels['shortaclread'] = 'Lezen';
+$labels['shortaclwrite'] = 'Schrijven';
+$labels['shortacldelete'] = 'Verwijderen';
+$labels['longacll'] = 'De map is zichtbaar in lijsten en het is mogelijk om te abonneren op deze map';
+$labels['longaclr'] = 'De map kan geopend worden om te lezen';
+$labels['longacls'] = 'De berichtmarkering \'Gelezen\' kan aangepast worden';
+$labels['longaclw'] = 'Berichtmarkeringen en labels kunnen aangepast worden, behalve \'Gelezen\' en \'Verwijderd\'';
+$labels['longacli'] = 'Berichten kunnen opgesteld worden of gekopieerd worden naar deze map';
+$labels['longaclp'] = 'Berichten kunnen geplaatst worden in deze map';
+$labels['longaclc'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
+$labels['longaclk'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
+$labels['longacld'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
+$labels['longaclt'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
+$labels['longacle'] = 'Berichten kunnen vernietigd worden';
+$labels['longaclx'] = 'De map kan verwijderd of hernoemd worden';
+$labels['longacla'] = 'De toegangsrechten voor deze map kunnen veranderd worden';
+$labels['longacln'] = 'Gedeelde metadata (annotaties) van berichten kan aangepast worden';
+$labels['longaclfull'] = 'Volledige controle inclusief mappenbeheer';
+$labels['longaclread'] = 'De map kan geopend worden om te lezen';
+$labels['longaclwrite'] = 'Berichten kunnen gemarkeerd worden, opgesteld worden of gekopieerd worden naar deze map';
+$labels['longacldelete'] = 'Berichten kunnen verwijderd worden';
+$labels['longaclother'] = 'Overige toegangsrechten';
+$labels['ariasummaryacltable'] = 'Lijst van toegangsrechten';
+$labels['arialabelaclactions'] = 'Lijstacties';
+$labels['arialabelaclform'] = 'Formulier voor toegangsrechten';
+$messages['deleting'] = 'Toegangsrechten worden verwijderd...';
+$messages['saving'] = 'Toegangsrechten worden opgeslagen...';
+$messages['updatesuccess'] = 'Toegangsrechten succesvol veranderd';
+$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd';
+$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd';
+$messages['updateerror'] = 'Toegangsrechten kunnen niet bijgewerkt worden';
+$messages['deleteerror'] = 'Toegangsrechten kunnen niet verwijderd worden';
+$messages['createerror'] = 'Toegangsrechten kunnen niet toegevoegd worden';
+$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?';
+$messages['norights'] = 'Er zijn geen toegangsrechten opgegeven!';
+$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Deling';
+$labels['myrights'] = 'Tilgangsrettar';
+$labels['username'] = 'Brukar:';
+$labels['newuser'] = 'Legg til oppføring';
+$labels['actions'] = 'Val for tilgangsrettar...';
+$labels['anyone'] = 'Alle brukarar (alle)';
+$labels['anonymous'] = 'Gjester (anonyme)';
+$labels['identifier'] = 'Identifikator';
+$labels['acll'] = 'Oppslag';
+$labels['aclr'] = 'Les meldingar';
+$labels['acls'] = 'Behald lesestatus';
+$labels['aclw'] = 'Skriveflagg';
+$labels['acli'] = 'Lim inn';
+$labels['aclp'] = 'Post';
+$labels['aclc'] = 'Opprett undermapper';
+$labels['aclk'] = 'Opprett undermapper';
+$labels['acld'] = 'Slett meldingar';
+$labels['aclt'] = 'Slett meldingar';
+$labels['acle'] = 'Slett fullstendig';
+$labels['aclx'] = 'Slett mappe';
+$labels['acla'] = 'Administrér';
+$labels['aclfull'] = 'Full kontroll';
+$labels['aclother'] = 'Anna';
+$labels['aclread'] = 'Les';
+$labels['aclwrite'] = 'Skriv';
+$labels['acldelete'] = 'Slett';
+$labels['shortacll'] = 'Oppslag';
+$labels['shortaclr'] = 'Les';
+$labels['shortacls'] = 'Behald';
+$labels['shortaclw'] = 'Skriv';
+$labels['shortacli'] = 'Sett inn';
+$labels['shortaclp'] = 'Post';
+$labels['shortaclc'] = 'Opprett';
+$labels['shortaclk'] = 'Opprett';
+$labels['shortacld'] = 'Slett';
+$labels['shortaclt'] = 'Slett';
+$labels['shortacle'] = 'Slett fullstendig';
+$labels['shortaclx'] = 'Slett mappe';
+$labels['shortacla'] = 'Administrér';
+$labels['shortaclother'] = 'Anna';
+$labels['shortaclread'] = 'Les';
+$labels['shortaclwrite'] = 'Skriv';
+$labels['shortacldelete'] = 'Slett';
+$labels['longacll'] = 'Mappa er synleg og kan abonnerast på';
+$labels['longaclr'] = 'Mappa kan opnast for lesing';
+$labels['longacls'] = 'Meldingane sine lesestatusflagg kan endrast';
+$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endrast, bortsett frå status for lesing og sletting';
+$labels['longacli'] = 'Meldingar kan lagrast eller kopierast til mappa';
+$labels['longaclp'] = 'Meldingar kan postast til denne mappa';
+$labels['longaclc'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
+$labels['longaclk'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
+$labels['longacld'] = 'Meldingane sine flagg for sletting kan endrast';
+$labels['longaclt'] = 'Meldingane sine flagg for sletting kan endrast';
+$labels['longacle'] = 'Meldinga kan slettast for godt';
+$labels['longaclx'] = 'Mappa kan slettast eller få nytt namn';
+$labels['longacla'] = 'Mappa sine tilgangsrettar kan endrast';
+$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
+$labels['longaclread'] = 'Mappa kan opnast for lesing';
+$labels['longaclwrite'] = 'Meldingar kan merkast, lagrast i eller flyttast til mappa';
+$labels['longacldelete'] = 'Meldinga kan slettast';
+$messages['deleting'] = 'Slettar tilgangsrettar…';
+$messages['saving'] = 'Lagrar tilgangsrettar…';
+$messages['updatesuccess'] = 'Tilgangsrettiar vart endra';
+$messages['deletesuccess'] = 'Tilgangsretter vart sletta';
+$messages['createsuccess'] = 'Tilgangsrettar vart legne til';
+$messages['deleteerror'] = 'Kunne ikkje fjerne tilgangsrettar';
+$messages['createerror'] = 'Kunne ikkje leggje til tilgangsrettar';
+$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valde brukarar?';
+$messages['norights'] = 'Ingen rettar er spesifisert!';
+$messages['nouser'] = 'Brukarnamn er ikkje spesifisert!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Udostępnianie';
+$labels['myrights'] = 'Prawa dostępu';
+$labels['username'] = 'Użytkownik:';
+$labels['advanced'] = 'Tryb zaawansowany';
+$labels['newuser'] = 'Dodaj rekord';
+$labels['editperms'] = 'Edytuj zezwolenia';
+$labels['actions'] = 'Akcje na prawach...';
+$labels['anyone'] = 'Wszyscy (anyone)';
+$labels['anonymous'] = 'Goście (anonymous)';
+$labels['identifier'] = 'Identyfikator';
+$labels['acll'] = 'PodglÄ…d';
+$labels['aclr'] = 'Odczyt (Read)';
+$labels['acls'] = 'Zmiana stanu wiadomości (Keep)';
+$labels['aclw'] = 'Zmiana flag wiadomości (Write)';
+$labels['acli'] = 'Dodawanie/Kopiowanie do (Insert)';
+$labels['aclp'] = 'Wysyłanie';
+$labels['aclc'] = 'Tworzenie podfolderów (Create)';
+$labels['aclk'] = 'Tworzenie podfolderów (Create)';
+$labels['acld'] = 'Usuwanie wiadomości (Delete)';
+$labels['aclt'] = 'Usuwanie wiadomości (Delete)';
+$labels['acle'] = 'PorzÄ…dkowanie';
+$labels['aclx'] = 'Usuwanie folderu (Delete)';
+$labels['acla'] = 'Administracja';
+$labels['acln'] = 'Adnotacje wiadomości';
+$labels['aclfull'] = 'Wszystkie';
+$labels['aclother'] = 'Pozostałe';
+$labels['aclread'] = 'Odczyt';
+$labels['aclwrite'] = 'Zapis';
+$labels['acldelete'] = 'Usuwanie';
+$labels['shortacll'] = 'PodglÄ…d';
+$labels['shortaclr'] = 'Odczyt';
+$labels['shortacls'] = 'Zmiana';
+$labels['shortaclw'] = 'Zapis';
+$labels['shortacli'] = 'Dodawanie';
+$labels['shortaclp'] = 'Wysyłanie';
+$labels['shortaclc'] = 'Tworzenie';
+$labels['shortaclk'] = 'Tworzenie';
+$labels['shortacld'] = 'Usuwanie';
+$labels['shortaclt'] = 'Usuwanie';
+$labels['shortacle'] = 'PorzÄ…dkowanie';
+$labels['shortaclx'] = 'Usuwanie folderu';
+$labels['shortacla'] = 'Administracja';
+$labels['shortacln'] = 'Adnotacje';
+$labels['shortaclother'] = 'Pozostałe';
+$labels['shortaclread'] = 'Odczyt';
+$labels['shortaclwrite'] = 'Zapis';
+$labels['shortacldelete'] = 'Usuwanie';
+$labels['longacll'] = 'Pozwala na subskrybowanie folderu i powoduje, że jest on widoczny na liście';
+$labels['longaclr'] = 'Folder może być otwarty w trybie do odczytu';
+$labels['longacls'] = 'Pozwala na zmienę stanu wiadomości';
+$labels['longaclw'] = 'Pozwala zmieniać wszystkie flagi wiadomości, oprócz "Przeczytano" i "Usunięto';
+$labels['longacli'] = 'Pozwala zapisywać wiadomości i kopiować do folderu';
+$labels['longaclp'] = 'Pozwala wysyłać wiadomości do folderu';
+$labels['longaclc'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
+$labels['longaclk'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
+$labels['longacld'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
+$labels['longaclt'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
+$labels['longacle'] = 'Pozwala na usuwanie wiadomości oznaczonych do usunięcia';
+$labels['longaclx'] = 'Pozwala na zmianę nazwy lub usunięcie folderu';
+$labels['longacla'] = 'Pozwala na zmiane praw dostępu do folderu';
+$labels['longacln'] = 'Pozwala na zmianę współdzielonych meta-danych wiadomości (adnotacji)';
+$labels['longaclfull'] = 'Pełna kontrola włącznie z administrowaniem folderem';
+$labels['longaclread'] = 'Folder może być otwarty w trybie do odczytu';
+$labels['longaclwrite'] = 'Wiadomości mogą być oznaczane, zapisywane i kopiowane do folderu';
+$labels['longacldelete'] = 'Wiadomości mogą być usuwane';
+$labels['longaclother'] = 'Inne prawa dostępu';
+$labels['ariasummaryacltable'] = 'Spis praw dostępu';
+$labels['arialabelaclactions'] = 'Lista działań';
+$labels['arialabelaclform'] = 'Formularz praw dostępu';
+$messages['deleting'] = 'Usuwanie praw dostępu...';
+$messages['saving'] = 'Zapisywanie praw dostępu...';
+$messages['updatesuccess'] = 'Pomyślnie zmieniono prawa dostępu';
+$messages['deletesuccess'] = 'Pomyślnie usunięto prawa dostępu';
+$messages['createsuccess'] = 'Pomyślnie dodano prawa dostępu';
+$messages['updateerror'] = 'Nie udało się zaktualizować praw dostępu';
+$messages['deleteerror'] = 'Nie udało się usunąć praw dostępu';
+$messages['createerror'] = 'Nie udało się dodać praw dostępu';
+$messages['deleteconfirm'] = 'Czy na pewno chcesz usunąć prawa wybranym użytkownikom?';
+$messages['norights'] = 'Nie wybrano praw dostępu!';
+$messages['nouser'] = 'Nie podano nazwy użytkownika!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Compartilhamento';
+$labels['myrights'] = 'Permissões de Acesso';
+$labels['username'] = 'Usuário:';
+$labels['advanced'] = 'Modo avançado';
+$labels['newuser'] = 'Adicionar entrada';
+$labels['editperms'] = 'Editar permissões';
+$labels['actions'] = 'Ações de direito de acesso...';
+$labels['anyone'] = 'Todos os usuários (qualquer um)';
+$labels['anonymous'] = 'Convidados (anônimos)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Pesquisar';
+$labels['aclr'] = 'Ler mensagens';
+$labels['acls'] = 'Manter estado de enviado';
+$labels['aclw'] = 'Salvar marcadores';
+$labels['acli'] = 'Inserir (Cópia em)';
+$labels['aclp'] = 'Enviar';
+$labels['aclc'] = 'Criar subpastas';
+$labels['aclk'] = 'Criar subpastas';
+$labels['acld'] = 'Apagar mensagens';
+$labels['aclt'] = 'Apagar mensagens';
+$labels['acle'] = 'Expurgar';
+$labels['aclx'] = 'Excluir pasta';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Inserir anotações nas mensagens';
+$labels['aclfull'] = 'Controle total';
+$labels['aclother'] = 'Outro';
+$labels['aclread'] = 'Ler';
+$labels['aclwrite'] = 'Salvar';
+$labels['acldelete'] = 'Excluir';
+$labels['shortacll'] = 'Pesquisar';
+$labels['shortaclr'] = 'Ler';
+$labels['shortacls'] = 'Manter';
+$labels['shortaclw'] = 'Salvar';
+$labels['shortacli'] = 'Inserir';
+$labels['shortaclp'] = 'Enviar';
+$labels['shortaclc'] = 'Criar';
+$labels['shortaclk'] = 'Criar';
+$labels['shortacld'] = 'Excluir';
+$labels['shortaclt'] = 'Excluir';
+$labels['shortacle'] = 'Expurgar';
+$labels['shortaclx'] = 'Excluir pasta';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Anotar';
+$labels['shortaclother'] = 'Outro';
+$labels['shortaclread'] = 'Ler';
+$labels['shortaclwrite'] = 'Salvar';
+$labels['shortacldelete'] = 'Excluir';
+$labels['longacll'] = 'A pasta está visível nas listas e pode ser inscrita para';
+$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
+$labels['longacls'] = 'Marcador de Mensagem Enviada pode ser modificadas';
+$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser modificadas, exceto de Enviadas e Excluídas';
+$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
+$labels['longaclp'] = 'As mensagens podem ser enviadas para esta pasta';
+$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
+$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
+$labels['longacld'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
+$labels['longaclt'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
+$labels['longacle'] = 'As mensagens podem ser expurgadas';
+$labels['longaclx'] = 'A pasta pode ser apagada ou renomeada';
+$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
+$labels['longacln'] = 'Metadados compartilhados das mensagens (anotações) podem ser alterados';
+$labels['longaclfull'] = 'Controle total incluindo a pasta de administração';
+$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
+$labels['longaclwrite'] = 'As mensagens podem ser marcadas, salvas ou copiadas para a pasta';
+$labels['longacldelete'] = 'Mensagens podem ser apagadas';
+$labels['longaclother'] = 'Outras permissões de acesso';
+$labels['ariasummaryacltable'] = 'Lista de permissões de acesso';
+$labels['arialabelaclactions'] = 'Lista de ações';
+$labels['arialabelaclform'] = 'Formulário de permissões de acesso';
+$messages['deleting'] = 'Apagando permissões de acesso...';
+$messages['saving'] = 'Salvando permissões de acesso...';
+$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
+$messages['deletesuccess'] = 'Permissões de acesso apagadas com sucesso';
+$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
+$messages['updateerror'] = 'Não foi possível atualizar as permissões de acesso';
+$messages['deleteerror'] = 'Não foi possível apagar as permissões de acesso';
+$messages['createerror'] = 'Não foi possível adicionar as permissões de acesso';
+$messages['deleteconfirm'] = 'Tem certeza que deseja remover as permissões de acesso do(s) usuário(s) delecionado(s)?';
+$messages['norights'] = 'Não foram definidas permissões!';
+$messages['nouser'] = 'Nome de usuário não especificado!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Partilhar';
+$labels['myrights'] = 'Permissões de acesso';
+$labels['username'] = 'Utilizador:';
+$labels['advanced'] = 'Modo avançado';
+$labels['newuser'] = 'Adicionar entrada';
+$labels['editperms'] = 'Editar permissões';
+$labels['actions'] = 'Acções de permissão de acesso...';
+$labels['anyone'] = 'Todos os utilizadores (todos)';
+$labels['anonymous'] = 'Convidados (anónimo)';
+$labels['identifier'] = 'Identificador';
+$labels['acll'] = 'Pesquisar';
+$labels['aclr'] = 'Ler mensagens';
+$labels['acls'] = 'Manter estado Visto';
+$labels['aclw'] = 'Guardar marcadores';
+$labels['acli'] = 'Inserir (Copiar para)';
+$labels['aclp'] = 'Publicar';
+$labels['aclc'] = 'Criar subpastas';
+$labels['aclk'] = 'Criar subpastas';
+$labels['acld'] = 'Eliminar mensagens';
+$labels['aclt'] = 'Eliminar mensagens';
+$labels['acle'] = 'Purgar';
+$labels['aclx'] = 'Eliminar pasta';
+$labels['acla'] = 'Administrar';
+$labels['acln'] = 'Anotar mensagens';
+$labels['aclfull'] = 'Controlo total';
+$labels['aclother'] = 'Outro';
+$labels['aclread'] = 'Ler';
+$labels['aclwrite'] = 'Escrever';
+$labels['acldelete'] = 'Eliminar';
+$labels['shortacll'] = 'Pesquisar';
+$labels['shortaclr'] = 'Ler';
+$labels['shortacls'] = 'Manter';
+$labels['shortaclw'] = 'Escrever';
+$labels['shortacli'] = 'Inserir';
+$labels['shortaclp'] = 'Publicar';
+$labels['shortaclc'] = 'Criar';
+$labels['shortaclk'] = 'Criar';
+$labels['shortacld'] = 'Eliminar';
+$labels['shortaclt'] = 'Eliminar';
+$labels['shortacle'] = 'Purgar';
+$labels['shortaclx'] = 'Eliminar pasta';
+$labels['shortacla'] = 'Administrar';
+$labels['shortacln'] = 'Anotar';
+$labels['shortaclother'] = 'Outro';
+$labels['shortaclread'] = 'Ler';
+$labels['shortaclwrite'] = 'Escrever';
+$labels['shortacldelete'] = 'Eliminar';
+$labels['longacll'] = 'A pasta está visível em listas e pode subscrita';
+$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
+$labels['longacls'] = 'O marcador Mensagens Vistas pode ser alterado';
+$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser alterados, excepto Vistas e Eliminadas';
+$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
+$labels['longaclp'] = 'As mensagens podem ser publicadas para esta pasta';
+$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
+$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
+$labels['longacld'] = 'O marcador Apagar Mensagens pode ser alterado';
+$labels['longaclt'] = 'O marcador Apagar Mensagens pode ser alterado';
+$labels['longacle'] = 'As mensagens podem ser purgadas';
+$labels['longaclx'] = 'A pasta pode ser eliminada ou renomeada';
+$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
+$labels['longacln'] = 'Mensagens de metadados (anotações) partilhadas podem ser alteradas';
+$labels['longaclfull'] = 'Controlo total incluindo administração de pastas';
+$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
+$labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta';
+$labels['longacldelete'] = 'As mensagens podem ser eliminadas';
+$labels['longaclother'] = 'Outros direitos de acesso';
+$labels['ariasummaryacltable'] = 'Lista de direitos de acesso';
+$labels['arialabelaclactions'] = 'Lista de acções';
+$labels['arialabelaclform'] = 'Formulário de direitos de acesso';
+$messages['deleting'] = 'A eliminar permissões de acesso...';
+$messages['saving'] = 'A guardar permissões de acesso...';
+$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
+$messages['deletesuccess'] = 'Permissões de acesso eliminadas com sucesso';
+$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
+$messages['updateerror'] = 'Não foi possível actualizar os direitos de acesso';
+$messages['deleteerror'] = 'Não foi possível eliminar permissões de acesso';
+$messages['createerror'] = 'Não foi possível adicionar permissões de acesso';
+$messages['deleteconfirm'] = 'Tem a certeza que pretende remover as permissões de acesso do(s) utilizador(es) seleccionado(s)?';
+$messages['norights'] = 'Não foram especificadas quaisquer permissões!';
+$messages['nouser'] = 'Não foi especificado nenhum nome de utilizador!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Partajare';
+$labels['myrights'] = 'Drepturi de acces';
+$labels['username'] = 'Utilizator:';
+$labels['advanced'] = 'Modul avansat';
+$labels['newuser'] = 'Adăugare intrare';
+$labels['editperms'] = 'Editare permisiuni';
+$labels['actions'] = 'Acțiunea drepturilor de acces...';
+$labels['anyone'] = 'Toți utilizatori (oricare)';
+$labels['anonymous'] = 'Vizitator';
+$labels['identifier'] = 'Identificator';
+$labels['acll'] = 'Caută';
+$labels['aclr'] = 'Citire mesaje';
+$labels['acls'] = 'Menține starea citirii';
+$labels['aclw'] = 'Indicator scriere';
+$labels['acli'] = 'Inserare (copiere în)';
+$labels['aclp'] = 'Postează';
+$labels['aclc'] = 'Creează subdirectoare';
+$labels['aclk'] = 'Creează subdirectoare';
+$labels['acld'] = 'Ștergere mesaje';
+$labels['aclt'] = 'Ștergere mesaje';
+$labels['acle'] = 'Elimină';
+$labels['aclx'] = 'Ștergere dosar';
+$labels['acla'] = 'Administrează';
+$labels['acln'] = 'Adnotează mesajele';
+$labels['aclfull'] = 'Control complet';
+$labels['aclother'] = 'Altul';
+$labels['aclread'] = 'CiteÅŸte';
+$labels['aclwrite'] = 'Scrie';
+$labels['acldelete'] = 'Șterge';
+$labels['shortacll'] = 'Caută';
+$labels['shortaclr'] = 'CiteÅŸte';
+$labels['shortacls'] = 'Păstrează';
+$labels['shortaclw'] = 'Scrie';
+$labels['shortacli'] = 'Inserează';
+$labels['shortaclp'] = 'Postează';
+$labels['shortaclc'] = 'Creează';
+$labels['shortaclk'] = 'Creează';
+$labels['shortacld'] = 'Șterge';
+$labels['shortaclt'] = 'Șterge';
+$labels['shortacle'] = 'Elimină';
+$labels['shortaclx'] = 'Ștergere dosar';
+$labels['shortacla'] = 'Administrează';
+$labels['shortacln'] = 'Adnotă';
+$labels['shortaclother'] = 'Altul';
+$labels['shortaclread'] = 'CiteÅŸte';
+$labels['shortaclwrite'] = 'Scrie';
+$labels['shortacldelete'] = 'Șterge';
+$labels['longacll'] = 'Dosarul este vizibil pe liste și se poate subscrie la acesta';
+$labels['longaclr'] = 'Dosarul se poate deschide pentru citire';
+$labels['longacls'] = 'Indicatorul de Văzut a fost schimbat';
+$labels['longaclw'] = 'Indicatoarele și cuvintele cheie ale mesajelor se pot schimba cu excepția Văzut și Șters';
+$labels['longacli'] = 'Mesajul se poate scrie sau copia într-un dosar';
+$labels['longaclp'] = 'Mesajele se pot trimite către acest dosar';
+$labels['longaclc'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
+$labels['longaclk'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
+$labels['longacld'] = 'Indicatorul de Șters al mesajelor se poate modifica';
+$labels['longaclt'] = 'Indicatorul de Șters al mesajelor se poate modifica';
+$labels['longacle'] = 'Mesajele se pot elimina';
+$labels['longaclx'] = 'Dosarul se poate șterge sau redenumi';
+$labels['longacla'] = 'Drepturile de acces la dosar se pot schimba';
+$labels['longacln'] = 'Metadatele (adnotarile) impartite ale mesajelor pot fi schimbate';
+$labels['longaclfull'] = 'Control complet include și administrare dosar';
+$labels['longaclread'] = 'Dosarul se poate deschide pentru citire';
+$labels['longaclwrite'] = 'Mesajul se poate marca, scrie sau copia într-un dosar';
+$labels['longacldelete'] = 'Mesajele se pot șterge';
+$labels['longaclother'] = 'Alte drepturi de acces';
+$labels['ariasummaryacltable'] = 'Listă drepturi de acces';
+$labels['arialabelaclactions'] = 'Arată acțiuni';
+$labels['arialabelaclform'] = 'Drepturi de acces de la';
+$messages['deleting'] = 'Șterg drepturile de access...';
+$messages['saving'] = 'Salvez drepturi accesare...';
+$messages['updatesuccess'] = 'Drepturile de acces au fost schimbate cu succes';
+$messages['deletesuccess'] = 'Drepturile de acces au fost șterse cu succes';
+$messages['createsuccess'] = 'Drepturile de acces au fost adăugate cu succes';
+$messages['updateerror'] = 'Nu s-au putut actualiza drepturile de acces';
+$messages['deleteerror'] = 'Nu s-au putut șterge drepturile de acces';
+$messages['createerror'] = 'Nu s-au putut adăuga drepturi de acces';
+$messages['deleteconfirm'] = 'Sunteți sigur că doriți să ștergeți drepturile de acces la utilizatorul (ii) selectați?';
+$messages['norights'] = 'Nu au fost specificate drepturi!';
+$messages['nouser'] = 'Nu a fost specificat niciun utilizator!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'СовмеÑтный доÑтуп';
+$labels['myrights'] = 'Права доÑтупа';
+$labels['username'] = 'Пользователь:';
+$labels['advanced'] = 'ЭкÑпертный режим';
+$labels['newuser'] = 'Добавить поле';
+$labels['editperms'] = 'Редактировать права';
+$labels['actions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа...';
+$labels['anyone'] = 'Ð’Ñе пользователи (любые)';
+$labels['anonymous'] = 'ГоÑти (анонимные)';
+$labels['identifier'] = 'Идентификатор';
+$labels['acll'] = 'ПроÑмотр';
+$labels['aclr'] = 'Чтение Ñообщений';
+$labels['acls'] = 'Сохранение ÑоÑтоÑÐ½Ð¸Ñ ÐŸÑ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¾';
+$labels['aclw'] = 'ЗапиÑÑŒ флагов';
+$labels['acli'] = 'Ð’Ñтавка (копирование в...)';
+$labels['aclp'] = 'Отправить';
+$labels['aclc'] = 'Создание вложенных папок';
+$labels['aclk'] = 'Создание вложенных папок';
+$labels['acld'] = 'Удаление Ñообщений';
+$labels['aclt'] = 'Удаление Ñообщений';
+$labels['acle'] = 'Уничтожение Ñообщений';
+$labels['aclx'] = 'Удаление папки';
+$labels['acla'] = 'ÐдминиÑтрировать';
+$labels['acln'] = 'Комментировать ÑообщениÑ';
+$labels['aclfull'] = 'Полный доÑтуп';
+$labels['aclother'] = 'Другое';
+$labels['aclread'] = 'Чтение';
+$labels['aclwrite'] = 'ЗапиÑÑŒ';
+$labels['acldelete'] = 'Удаление';
+$labels['shortacll'] = 'ПоиÑк';
+$labels['shortaclr'] = 'Чтение';
+$labels['shortacls'] = 'Прочитано';
+$labels['shortaclw'] = 'ЗапиÑÑŒ';
+$labels['shortacli'] = 'Ð’Ñтавить';
+$labels['shortaclp'] = 'Отправить';
+$labels['shortaclc'] = 'Создать';
+$labels['shortaclk'] = 'Создать';
+$labels['shortacld'] = 'Удаление';
+$labels['shortaclt'] = 'Удаление';
+$labels['shortacle'] = 'Уничтожение';
+$labels['shortaclx'] = 'Удаление папки';
+$labels['shortacla'] = 'ÐдминиÑтрировать';
+$labels['shortacln'] = 'Комментировать';
+$labels['shortaclother'] = 'Другое';
+$labels['shortaclread'] = 'Чтение';
+$labels['shortaclwrite'] = 'ЗапиÑÑŒ';
+$labels['shortacldelete'] = 'Удаление';
+$labels['longacll'] = 'Папка видима в ÑпиÑках и доÑтупна Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки';
+$labels['longaclr'] = 'Эта папка может быть открыта Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ';
+$labels['longacls'] = 'Флаг Прочитано может быть изменен';
+$labels['longaclw'] = 'Флаги и ключевые Ñлова, кроме Прочитано и Удалено, могут быть изменены';
+$labels['longacli'] = 'Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть запиÑаны или Ñкопированы в папку';
+$labels['longaclp'] = 'Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть отправлены в Ñту папку';
+$labels['longaclc'] = 'Подпапки могут быть Ñозданы или переименованы прÑмо в Ñтой папке';
+$labels['longaclk'] = 'Подпапки могут быть Ñозданы или переименованы прÑмо в Ñтой папке';
+$labels['longacld'] = 'Флаг Удалено может быть изменен';
+$labels['longaclt'] = 'Флаг Удалено может быть изменен';
+$labels['longacle'] = 'Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть уничтожены';
+$labels['longaclx'] = 'Эта папка может быть переименована или удалена';
+$labels['longacla'] = 'Права доÑтупа к папке могут быть изменены';
+$labels['longacln'] = 'СовмеÑтные медаданные Ñообщений (комментарии) могут быть изменены';
+$labels['longaclfull'] = 'Полный доÑтуп, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ папкой';
+$labels['longaclread'] = 'Эта папка может быть открыта Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ';
+$labels['longaclwrite'] = 'Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ помечать, запиÑывать или копировать в папку';
+$labels['longacldelete'] = 'Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ удалÑÑ‚ÑŒ';
+$labels['longaclother'] = 'Прочие права доÑтупа';
+$labels['ariasummaryacltable'] = 'СпиÑок прав доÑтупа';
+$labels['arialabelaclactions'] = 'СпиÑок дейÑтвий';
+$labels['arialabelaclform'] = 'Форма прав доÑтупа';
+$messages['deleting'] = 'Удаление прав доÑтупа...';
+$messages['saving'] = 'Сохранение прав доÑтупа...';
+$messages['updatesuccess'] = 'Права доÑтупа уÑпешно изменены';
+$messages['deletesuccess'] = 'Права доÑтупа уÑпешно удалены';
+$messages['createsuccess'] = 'УÑпешно добавлены права доÑтупа';
+$messages['updateerror'] = 'Ðевозможно обновить права доÑтупа';
+$messages['deleteerror'] = 'Ðевозможно удалить права доÑтупа';
+$messages['createerror'] = 'Ðевозможно добавить права доÑтупа';
+$messages['deleteconfirm'] = 'Ð’Ñ‹ уверены в том, что хотите удалить права доÑтупа выбранных пользователей?';
+$messages['norights'] = 'Права доÑтупа не уÑтановлены!';
+$messages['nouser'] = 'Ðе определено Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Zdieľanie';
+$labels['myrights'] = 'Prístupové oprávnenia';
+$labels['username'] = 'Používateľ:';
+$labels['advanced'] = 'Režim pre pokroÄilých';
+$labels['newuser'] = 'Pridať záznam';
+$labels['editperms'] = 'Upraviť oprávnenia';
+$labels['actions'] = 'Prístupové práva pre akcie...';
+$labels['anyone'] = 'Všetci užívatelia (ktokoľvek)';
+$labels['anonymous'] = 'Hostia (anonymní)';
+$labels['identifier'] = 'Identifikátor';
+$labels['acll'] = 'Vyhľadať';
+$labels['aclr'] = 'Čítať správy';
+$labels['acls'] = 'PonechaÅ¥ ako preÄítané';
+$labels['aclw'] = 'Príznaky pre zápis';
+$labels['acli'] = 'Vložiť (Skopírovať do)';
+$labels['aclp'] = 'Odoslať na';
+$labels['aclc'] = 'VytvoriÅ¥ podprieÄinky';
+$labels['aclk'] = 'VytvoriÅ¥ podprieÄinky';
+$labels['acld'] = 'Vymazať správy';
+$labels['aclt'] = 'Vymazať správy';
+$labels['acle'] = 'VyÄistiÅ¥';
+$labels['aclx'] = 'VymazaÅ¥ prieÄinok';
+$labels['acla'] = 'Spravovať';
+$labels['acln'] = 'OznaÄiÅ¥ správy poznámkou';
+$labels['aclfull'] = 'Úplný prístup';
+$labels['aclother'] = 'Iné';
+$labels['aclread'] = 'Čítanie';
+$labels['aclwrite'] = 'Zápis';
+$labels['acldelete'] = 'Odstránenie';
+$labels['shortacll'] = 'Vyhľadať';
+$labels['shortaclr'] = 'Čítanie';
+$labels['shortacls'] = 'Ponechať';
+$labels['shortaclw'] = 'Zápis';
+$labels['shortacli'] = 'Vložiť';
+$labels['shortaclp'] = 'Odoslať na';
+$labels['shortaclc'] = 'Vytvoriť';
+$labels['shortaclk'] = 'Vytvoriť';
+$labels['shortacld'] = 'Vymazať';
+$labels['shortaclt'] = 'Vymazať';
+$labels['shortacle'] = 'VyÄistiÅ¥';
+$labels['shortaclx'] = 'VymazaÅ¥ prieÄinok';
+$labels['shortacla'] = 'Spravovať';
+$labels['shortacln'] = 'OznaÄiÅ¥ poznámkou';
+$labels['shortaclother'] = 'Iné';
+$labels['shortaclread'] = 'Čítanie';
+$labels['shortaclwrite'] = 'Zápis';
+$labels['shortacldelete'] = 'Odstránenie';
+$labels['longacll'] = 'PrieÄinok je v zoznamoch viditeľný a dá sa k nemu prihlásiÅ¥';
+$labels['longaclr'] = 'PreÄinok je možné otvoriÅ¥ na Äítanie';
+$labels['longacls'] = 'Príznak "PreÄítané" je možné zmeniÅ¥';
+$labels['longaclw'] = 'Príznaky správ a kľúÄové slová je možné zmeniÅ¥, okrem "PreÄítané" a "Vymazané"';
+$labels['longacli'] = 'Do tohto prieÄinka je možné zapisovaÅ¥ alebo kopírovaÅ¥ správy';
+$labels['longaclp'] = 'Do tohto prieÄinka je možné publikovaÅ¥ správy';
+$labels['longaclc'] = 'PrieÄinky je možné vytváraÅ¥ (alebo premenovávaÅ¥) priamo v tomto prieÄinku';
+$labels['longaclk'] = 'PrieÄinky je možné vytváraÅ¥ (alebo premenovávaÅ¥) priamo v tomto prieÄinku';
+$labels['longacld'] = 'Príznak správ "Vymazané" je možné zmeniť';
+$labels['longaclt'] = 'Príznak správ "Vymazané" je možné zmeniť';
+$labels['longacle'] = 'Správy je možné vyÄistiÅ¥';
+$labels['longaclx'] = 'PrieÄinok je možné vymazaÅ¥ alebo premenovaÅ¥';
+$labels['longacla'] = 'Prístupové oprávnenia k tomuto prieÄinku je možné zmeniÅ¥';
+$labels['longacln'] = 'Meta-dáta (poznámky) zdieľané medzi správami, je možné zmeniť';
+$labels['longaclfull'] = 'Úplný prístup, vrátane správy prieÄinka';
+$labels['longaclread'] = 'PreÄinok je možné otvoriÅ¥ na Äítanie';
+$labels['longaclwrite'] = 'Správy je možné oznaÄiÅ¥, zapísaÅ¥ alebo skopírovaÅ¥ do preÄinka';
+$labels['longacldelete'] = 'Správy je možné vymazať';
+$labels['longaclother'] = 'Iné prístupové oprávnenia';
+$labels['ariasummaryacltable'] = 'Zoznam prístupových oprávnení';
+$labels['arialabelaclactions'] = 'Zoznam akcií';
+$labels['arialabelaclform'] = 'Formulár pre prístupové oprávnenia';
+$messages['deleting'] = 'Odstraňovanie prístupových oprávnení...';
+$messages['saving'] = 'Ukladanie prístupových oprávnení...';
+$messages['updatesuccess'] = 'Prístupové oprávnenia boli úspešne zmenené';
+$messages['deletesuccess'] = 'Prístupové oprávnenia boli úspešne vymazané';
+$messages['createsuccess'] = 'Prístupové oprávnenia boli úspešne pridané';
+$messages['updateerror'] = 'Nemožno aktualizovať prístupové oprávnenia';
+$messages['deleteerror'] = 'Prístupové oprávnenia sa nepodarilo vymazať';
+$messages['createerror'] = 'Prístupové oprávnenia sa nepodarilo pridať';
+$messages['deleteconfirm'] = 'Naozaj chcete odstrániť prístupové oprávnenia vybraného používateľa?';
+$messages['norights'] = 'Neboli urÄené žiadne oprávnenia!';
+$messages['nouser'] = 'Nebolo urÄené žiadne meno používateľa!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Skupna raba';
+$labels['myrights'] = 'Pravice dostopa';
+$labels['username'] = 'Uporabnik:';
+$labels['advanced'] = 'Napredni naÄin';
+$labels['newuser'] = 'Dodaj vnos';
+$labels['editperms'] = 'Uredi pravice';
+$labels['actions'] = 'Nastavitve pravic dostopa';
+$labels['anyone'] = 'Vsi uporabniki';
+$labels['anonymous'] = 'Gosti';
+$labels['identifier'] = 'OznaÄevalnik';
+$labels['acll'] = 'Iskanje';
+$labels['aclr'] = 'Prebrana sporoÄila';
+$labels['acls'] = 'Ohrani status \'Prebrano\'';
+$labels['aclw'] = 'OznaÄi pisanje sporoÄila';
+$labels['acli'] = 'Vstavi (Kopiraj v)';
+$labels['aclp'] = 'Objava';
+$labels['aclc'] = 'Ustvari podmape';
+$labels['aclk'] = 'Ustvari podmape';
+$labels['acld'] = 'IzbriÅ¡i sporoÄila';
+$labels['aclt'] = 'IzbriÅ¡i sporoÄila';
+$labels['acle'] = 'Izbriši';
+$labels['aclx'] = 'Izbriši mapo';
+$labels['acla'] = 'Uredi';
+$labels['acln'] = 'Komentarji';
+$labels['aclfull'] = 'Popolno upravljanje';
+$labels['aclother'] = 'Ostalo';
+$labels['aclread'] = 'Preberi';
+$labels['aclwrite'] = 'Sestavi';
+$labels['acldelete'] = 'Izbriši';
+$labels['shortacll'] = 'Iskanje';
+$labels['shortaclr'] = 'Preberi';
+$labels['shortacls'] = 'Ohrani';
+$labels['shortaclw'] = 'Sestavi';
+$labels['shortacli'] = 'Vstavi';
+$labels['shortaclp'] = 'Objava';
+$labels['shortaclc'] = 'Ustvari';
+$labels['shortaclk'] = 'Ustvari';
+$labels['shortacld'] = 'Izbriši';
+$labels['shortaclt'] = 'Izbriši';
+$labels['shortacle'] = 'Izbriši';
+$labels['shortaclx'] = 'Izbriši mapo';
+$labels['shortacla'] = 'Uredi';
+$labels['shortacln'] = 'Dodaj komentar';
+$labels['shortaclother'] = 'Ostalo';
+$labels['shortaclread'] = 'Preberi';
+$labels['shortaclwrite'] = 'Sestavi';
+$labels['shortacldelete'] = 'Izbriši';
+$labels['longacll'] = 'Mapa je vidna na seznamih in jo lahko naroÄite';
+$labels['longaclr'] = 'Mapa je na voljo za branje';
+$labels['longacls'] = 'Oznaka \'Prebrano sporoÄilo\' je lahko spremenjena';
+$labels['longaclw'] = 'Oznake sporoÄil in kljuÄne besede je mogoÄe spremeniti, z izjemo oznak "Prebrano" in "Izbrisano';
+$labels['longacli'] = 'SporoÄilo je lahko poslano ali kopirano v mapo';
+$labels['longaclp'] = 'SporoÄilo je lahko poslano v to mapo';
+$labels['longaclc'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
+$labels['longaclk'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
+$labels['longacld'] = 'Oznako sporoÄila  \'Izbrisano\' je mogoÄe spremeniti';
+$labels['longaclt'] = 'Oznako sporoÄila  \'Izbrisano\' je mogoÄe spremeniti';
+$labels['longacle'] = 'SporoÄila so lahko izbrisana';
+$labels['longaclx'] = 'Mapa je lahko izbrisana ali preimenovana';
+$labels['longacla'] = 'Pravice na mapi so lahko spremenjene';
+$labels['longacln'] = 'Metapodatke (komentarjev), ki so v skupni rabi, je mogoÄe spremeniti';
+$labels['longaclfull'] = 'Popolno upravljanje, vkljuÄno z urejanjem map';
+$labels['longaclread'] = 'Mapa je na voljo za branje';
+$labels['longaclwrite'] = 'SporoÄila je mogoÄe oznaÄiti, sestaviti ali kopirati v mapo';
+$labels['longacldelete'] = 'SporoÄila so lahko izbrisana';
+$labels['longaclother'] = 'Ostale pravice dostopa';
+$labels['ariasummaryacltable'] = 'Seznam pravic dostopa';
+$labels['arialabelaclactions'] = 'Prikaži možnosti';
+$labels['arialabelaclform'] = 'Obrazec za nastavitve pravic dostopa';
+$messages['deleting'] = 'Brisanje pravic';
+$messages['saving'] = 'Shranjevanje pravic';
+$messages['updatesuccess'] = 'Pravice so bile uspešno spremenjene';
+$messages['deletesuccess'] = 'Pravice so bile uspešno izbrisane';
+$messages['createsuccess'] = 'Pravice so bile uspešno dodane';
+$messages['updateerror'] = 'Pravic ni mogoÄe posodobiti';
+$messages['deleteerror'] = 'Pravic ni mogoÄe izbrisati';
+$messages['createerror'] = 'Pravic ni bilo mogoÄe dodati';
+$messages['deleteconfirm'] = 'Ste prepriÄani, da želite odstraniti pravice dostopa za izbrane uporabnike?';
+$messages['norights'] = 'Pravic niste doloÄili';
+$messages['nouser'] = 'Niste doloÄili uporabniÅ¡lega imena';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['myrights'] = 'Të drejta Hyrjeje';
+$labels['username'] = 'Përdorues:';
+$labels['advanced'] = 'Mënyra e përparuar';
+$labels['newuser'] = 'Shtoni zë';
+$labels['editperms'] = 'Përpunoni leje';
+$labels['actions'] = 'Veprime të drejtash hyrjeje…';
+$labels['anyone'] = 'Krejt përdoruesit (cilido)';
+$labels['anonymous'] = 'Mysafirë (në mënyrë anonime)';
+$labels['identifier'] = 'Identifikues';
+$labels['acll'] = 'Kërkim';
+$labels['aclr'] = 'Lexoni mesazhe';
+$labels['acls'] = 'Mbaje gjendjen i Parë';
+$labels['acli'] = 'Fut (Kopje te)';
+$labels['aclp'] = 'Postim';
+$labels['aclc'] = 'Krijo nëndosje';
+$labels['aclk'] = 'Krijo nëndosje';
+$labels['acld'] = 'Fshiji mesazhet';
+$labels['aclt'] = 'Fshiji mesazhet';
+$labels['acle'] = 'Spastroje';
+$labels['aclx'] = 'Fshije dosjen';
+$labels['acla'] = 'Administroni';
+$labels['acln'] = 'Shto shënime te mesazhet';
+$labels['aclfull'] = 'Kontroll i plotë';
+$labels['aclother'] = 'Tjetër';
+$labels['aclread'] = 'Leximi';
+$labels['aclwrite'] = 'Shkrimi';
+$labels['acldelete'] = 'Fshije';
+$labels['shortacll'] = 'Kërkim';
+$labels['shortaclr'] = 'Leximi';
+$labels['shortacls'] = 'Mbaje';
+$labels['shortaclw'] = 'Shkrimi';
+$labels['shortacli'] = 'Fut';
+$labels['shortaclp'] = 'Posto';
+$labels['shortaclc'] = 'Krijoje';
+$labels['shortaclk'] = 'Krijoje';
+$labels['shortacld'] = 'Fshije';
+$labels['shortaclt'] = 'Fshije';
+$labels['shortacle'] = 'Spastro';
+$labels['shortaclx'] = 'Fshirje dosjeje';
+$labels['shortacla'] = 'Administro';
+$labels['shortacln'] = 'Shto shënim';
+$labels['shortaclother'] = 'Tjetër';
+$labels['shortaclread'] = 'Leximi';
+$labels['shortaclwrite'] = 'Shkrimi';
+$labels['shortacldelete'] = 'Fshirjeje';
+$labels['longacll'] = 'Dosja është e dukshme në lista dhe në të mund të pajtoheni';
+$labels['longaclr'] = 'Dosja mund të hapet për lexim';
+$labels['longacls'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
+$labels['longaclw'] = 'Mund të ndryshohen shenjat dhe fjalëkyçet për mesazhet, hiq të Parë dhe të Fshirë';
+$labels['longacli'] = 'Mesazhet mund të shkruhen ose kopjohen në dosje';
+$labels['longaclp'] = 'Mesazhet mund të postohen te kjo dosje';
+$labels['longaclc'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
+$labels['longaclk'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
+$labels['longacld'] = 'Mund të ndryshohet shenja Mesazhe të Fshirë';
+$labels['longaclt'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
+$labels['longacle'] = 'Mesazhet mund të spastrohen';
+$labels['longaclx'] = 'Dosja mund të fshihet ose riemërtohet';
+$labels['longacla'] = 'Mund të ndryshohen të drejta hyrjeje te dosja';
+$labels['longacln'] = 'Mund të ndryshohen tejtëdhëna të përbashkëta (shënime) mesazhesh';
+$labels['longaclfull'] = 'Kontroll i plotë, përfshi administrim dosjesh';
+$labels['longaclread'] = 'Dosja mund të hapet për lexim';
+$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjë, shkruhen ose kopjohen te dosja';
+$labels['longacldelete'] = 'Mesazhet mund të fshihen';
+$labels['longaclother'] = 'Të tjera të drejta hyrjesh';
+$labels['ariasummaryacltable'] = 'Listë të drejtash hyrjeje';
+$labels['arialabelaclactions'] = 'Paraqit veprime';
+$labels['arialabelaclform'] = 'Formular të drejtash hyrjeje';
+$messages['deleting'] = 'Po fshihen të drejta hyrjeje…';
+$messages['saving'] = 'Po ruhen të drejtash hyrjeje…';
+$messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje';
+$messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje';
+$messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje';
+$messages['updateerror'] = 'S’arrihet të përditësohen të drejta hyrjeje';
+$messages['deleteerror'] = 'S’arrihet të fshihen të drejta hyrjeje';
+$messages['createerror'] = 'S’arrihet të shtohen të drejta hyrjeje';
+$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?';
+$messages['norights'] = 'S’janë specifikuar të drejta!';
+$messages['nouser'] = 'S’është specifikuar emër përdoruesi!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Дељење';
+$labels['myrights'] = 'Права приÑтупа';
+$labels['username'] = 'КориÑник:';
+$labels['advanced'] = 'Ðапредни режим';
+$labels['newuser'] = 'Додај уноÑ';
+$labels['editperms'] = 'Уреди дозволе';
+$labels['actions'] = 'Радње права приÑтупа...';
+$labels['anyone'] = 'Сви кориÑници (било ко)';
+$labels['anonymous'] = 'ГоÑти (анонимно)';
+$labels['identifier'] = 'Идентификатор';
+$labels['acll'] = 'Потражи';
+$labels['aclr'] = 'Прочитане поруке';
+$labels['acls'] = 'Очувај Ñтање прегледаноÑти';
+$labels['acli'] = 'Убаци (копирај у)';
+$labels['aclc'] = 'Ðаправи потфаÑцикле';
+$labels['aclk'] = 'Ðаправи потфаÑцикле';
+$labels['acld'] = 'Обриши поруке';
+$labels['aclt'] = 'Обриши поруке';
+$labels['aclx'] = 'Обриши фаÑциклу';
+$labels['acla'] = 'ÐдминиÑтрирај';
+$labels['aclfull'] = 'Пуна контрола';
+$labels['aclother'] = 'Друго';
+$labels['aclread'] = 'Читање';
+$labels['aclwrite'] = 'УпиÑ';
+$labels['acldelete'] = 'Обриши';
+$labels['shortacll'] = 'Потражи';
+$labels['shortaclr'] = 'Прочитана';
+$labels['shortacls'] = 'Задржи';
+$labels['shortaclw'] = 'Пиши';
+$labels['shortacli'] = 'Убаци';
+$labels['shortaclc'] = 'Ðаправи';
+$labels['shortaclk'] = 'Ðаправи';
+$labels['shortacld'] = 'Обриши';
+$labels['shortaclt'] = 'Обриши';
+$labels['shortaclother'] = 'Друго';
+$labels['shortaclread'] = 'Читање';
+$labels['shortaclwrite'] = 'УпиÑ';
+$labels['shortacldelete'] = 'БриÑање';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Utdelning';
+$labels['myrights'] = 'Åtkomsträttigheter';
+$labels['username'] = 'Användare:';
+$labels['advanced'] = 'Avancerat läge';
+$labels['newuser'] = 'Lägg till';
+$labels['editperms'] = 'Ändra rättigheter';
+$labels['actions'] = 'Hantera åtkomsträttigheter...';
+$labels['anyone'] = 'Alla användare (vem som helst)';
+$labels['anonymous'] = 'Gäster (anonyma)';
+$labels['identifier'] = 'Identifikation';
+$labels['acll'] = 'Uppslagning';
+$labels['aclr'] = 'Läs meddelanden';
+$labels['acls'] = 'Behåll status Läst';
+$labels['aclw'] = 'Skriv flaggor';
+$labels['acli'] = 'Infoga (kopiera in)';
+$labels['aclp'] = 'Posta';
+$labels['aclc'] = 'Skapa underkataloger';
+$labels['aclk'] = 'Skapa underkataloger';
+$labels['acld'] = 'Ta bort meddelanden';
+$labels['aclt'] = 'Ta bort meddelanden';
+$labels['acle'] = 'Utplåna';
+$labels['aclx'] = 'Ta bort katalog';
+$labels['acla'] = 'Administrera';
+$labels['acln'] = 'Kommentera meddelanden';
+$labels['aclfull'] = 'Full kontroll';
+$labels['aclother'] = 'Övrig';
+$labels['aclread'] = 'Läs';
+$labels['aclwrite'] = 'Skriv';
+$labels['acldelete'] = 'Ta bort';
+$labels['shortacll'] = 'Uppslagning';
+$labels['shortaclr'] = 'Läs';
+$labels['shortacls'] = 'Behåll';
+$labels['shortaclw'] = 'Skriv';
+$labels['shortacli'] = 'Infoga';
+$labels['shortaclp'] = 'Posta';
+$labels['shortaclc'] = 'Skapa';
+$labels['shortaclk'] = 'Skapa';
+$labels['shortacld'] = 'Ta bort';
+$labels['shortaclt'] = 'Ta bort';
+$labels['shortacle'] = 'Utplåna';
+$labels['shortaclx'] = 'Ta bort katalog';
+$labels['shortacla'] = 'Administrera';
+$labels['shortacln'] = 'Kommentera';
+$labels['shortaclother'] = 'Övrig';
+$labels['shortaclread'] = 'Läs';
+$labels['shortaclwrite'] = 'Skriv';
+$labels['shortacldelete'] = 'Ta bort';
+$labels['longacll'] = 'Katalogen är synlig i listor och den kan prenumereras på';
+$labels['longaclr'] = 'Katalogen kan öppnas för läsning';
+$labels['longacls'] = 'Meddelandeflagga Läst kan ändras';
+$labels['longaclw'] = 'Meddelandeflaggor och nyckelord kan ändras, undantaget Läst och Borttagen';
+$labels['longacli'] = 'Meddelanden kan skrivas eller kopieras till katalogen';
+$labels['longaclp'] = 'Meddelanden kan postas till denna katalog';
+$labels['longaclc'] = 'Kataloger kan skapas (eller ges annat namn) direkt i denna katalog';
+$labels['longaclk'] = 'Kataloger kan skapas (eller ges annat namn) direkt i denna katalog';
+$labels['longacld'] = 'Meddelandeflagga Borttaget kan ändras';
+$labels['longaclt'] = 'Meddelandeflagga Borttaget kan ändras';
+$labels['longacle'] = 'Meddelanden kan utplånas';
+$labels['longaclx'] = 'Katalogen kan tas bort eller ges annat namn';
+$labels['longacla'] = 'Katalogens åtkomsträttigheter kan ändras';
+$labels['longacln'] = 'Delad information om meddelanden (kommentarer) kan ändras';
+$labels['longaclfull'] = 'Full kontroll inklusive katalogadministration';
+$labels['longaclread'] = 'Katalogen kan öppnas för läsning';
+$labels['longaclwrite'] = 'Meddelanden kan märkas, skrivas eller kopieras till katalogen';
+$labels['longacldelete'] = 'Meddelanden kan tas bort';
+$labels['longaclother'] = 'Övriga åtkomsträttigheter';
+$labels['ariasummaryacltable'] = 'Lista med åtkomsträttigheter';
+$labels['arialabelaclactions'] = 'Hantera listor';
+$labels['arialabelaclform'] = 'Formulär för åtkomsträttigheter';
+$messages['deleting'] = 'Tar bort åtkomsträttigheter...';
+$messages['saving'] = 'Sparar åtkomsträttigheter...';
+$messages['updatesuccess'] = 'Åtkomsträttigheterna är ändrade';
+$messages['deletesuccess'] = 'Åtkomsträttigheterna är borttagna';
+$messages['createsuccess'] = 'Åtkomsträttigheterna är tillagda';
+$messages['updateerror'] = 'Åtkomsträttigheterna kunde inte ändras';
+$messages['deleteerror'] = 'Åtkomsträttigheterna kunde inte tas bort';
+$messages['createerror'] = 'Åtkomsträttigheterna kunde inte läggas till';
+$messages['deleteconfirm'] = 'Vill du verkligen ta bort åtkomsträttigheterna för markerade användare?';
+$messages['norights'] = 'Inga åtkomsträttigheter angavs!';
+$messages['nouser'] = 'Inget användarnamn angavs!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล';
+$labels['myrights'] = 'สิทธิ์à¸à¸²à¸£à¹€à¸‚้าใช้';
+$labels['username'] = 'ผู้ใช้งาน:';
+$labels['newuser'] = 'เพิ่มรายà¸à¸²à¸£';
+$labels['anyone'] = 'ผู้ใช้งานทั้งหมด (ใครà¸à¹‡à¹„ด้)';
+$labels['anonymous'] = 'ผู้เยี่ยมชม (คนà¹à¸›à¸¥à¸à¸«à¸™à¹‰à¸²)';
+$labels['aclr'] = 'อ่านข้อความ';
+$labels['acli'] = 'à¹à¸—รภ(คัดลอà¸à¹„ปไว้)';
+$labels['aclp'] = 'โพสต์';
+$labels['aclc'] = 'สร้างโฟลเดอร์ย่อย';
+$labels['aclk'] = 'สร้างโฟลเดอร์ย่อย';
+$labels['acld'] = 'ลบข้อความ';
+$labels['aclt'] = 'ลบข้อความ';
+$labels['aclx'] = 'ลบโฟลเดอร์';
+$labels['acla'] = 'Administer';
+$labels['aclfull'] = 'Full control';
+$labels['aclother'] = 'อื่นๆ';
+$labels['aclread'] = 'อ่าน';
+$labels['aclwrite'] = 'เขียน';
+$labels['acldelete'] = 'ลบ';
+$labels['shortacll'] = 'ดู';
+$labels['shortaclr'] = 'อ่าน';
+$labels['shortacls'] = 'เà¸à¹‡à¸š';
+$labels['shortaclw'] = 'เขียน';
+$labels['shortacli'] = 'à¹à¸—รà¸';
+$labels['shortaclp'] = 'โพสต์';
+$labels['shortaclc'] = 'สร้าง';
+$labels['shortaclk'] = 'สร้าง';
+$labels['shortacld'] = 'ลบ';
+$labels['shortaclt'] = 'ลบ';
+$labels['shortaclx'] = 'ลบโฟลเดอร์';
+$labels['shortaclother'] = 'อื่นๆ';
+$labels['shortaclread'] = 'อ่าน';
+$labels['shortaclwrite'] = 'เขียน';
+$labels['shortacldelete'] = 'ลบ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/ti.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'ንኻáˆáŠ¥';
+$labels['myrights'] = 'መሰላት በዓሠዋና';
+$labels['username'] = 'በዓሠዋና';
+$labels['newuser'] = 'እታዎ ክá‹áˆµáŠ½';
+$labels['actions'] = 'ንጥáˆá‰³á‰µ መብት ተጠቃማይáŠá‰µ';
+$labels['anyone'] = 'ኩሉሠበዓáˆá‰² ዋናታት(á‹áŠ¾áŠ ሰብ)';
+$labels['anonymous'] = 'ጋሻ(ሽሠአáˆá‰¦)';
+$labels['identifier'] = 'መለለዪ';
+$labels['acll'] = 'አለሻ';
+$labels['aclr'] = 'á‹á‰°áŠá‰ á‰¡ መáˆáŠ¥áŠ½á‰³á‰µ';
+$labels['acls'] = 'ተራእዩ ብá‹á‰¥áˆ ይጽናሕ';
+$labels['aclw'] = 'áˆáˆáŠ­á‰³á‰µ áˆáŒ½áˆ“á';
+$labels['acli'] = 'ሸጉጥ(አብ..መንጎ አá‰áˆáŒ¥)';
+$labels['aclp'] = 'ጠቅዕ';
+$labels['aclc'] = 'ማህደር áጠር';
+$labels['aclk'] = 'ክáለማህደር áጠር';
+$labels['acld'] = 'መáˆáŠ¥áŠ½á‰³á‰µ አጥáእ';
+$labels['aclt'] = 'መáˆáŠ¥áŠ½á‰³á‰µ አጥáእ';
+$labels['acle'] = 'ንሓዋሩ አጥáእ';
+$labels['aclx'] = 'ማህደር አጥáእ';
+$labels['acla'] = 'ተቖáƒá€áˆ­';
+$labels['aclfull'] = 'áˆáˆ‰áŠ¥ ቑጽá…ር';
+$labels['aclother'] = 'ካሊእ';
+$labels['aclread'] = 'ከንብብ';
+$labels['aclwrite'] = 'ክጽሕá';
+$labels['acldelete'] = 'ይጥáˆáŠ áˆˆá‹­';
+$labels['shortacll'] = 'አለሻ';
+$labels['shortaclr'] = 'á‹á‰°áŠá‰ á‰ ';
+$labels['shortacls'] = 'á‹­á…ናሕ';
+$labels['shortaclw'] = 'ይጽሓá';
+$labels['shortacli'] = 'ይሸጎጥ';
+$labels['shortaclp'] = 'ይጠቃዕ';
+$labels['shortaclc'] = 'á‹­áˆáŒ áˆ­';
+$labels['shortaclk'] = 'á‹­áˆáŒ áˆ­';
+$labels['shortacld'] = 'ይጥá‹áŠ¥';
+$labels['shortaclt'] = 'ይጥá‹áŠ¥';
+$labels['shortacle'] = 'ንሓዋሩ ይጥá‹áŠ¥';
+$labels['shortaclx'] = 'á‹áŒ áእ ማህደር';
+$labels['shortacla'] = 'ክቆáƒá€áˆ­';
+$labels['shortaclother'] = 'ካሊእ';
+$labels['shortaclread'] = 'ከንብብ';
+$labels['shortaclwrite'] = 'ክጽሕá';
+$labels['shortacldelete'] = 'ይጥá‹áŠ¥';
+$labels['longaclr'] = 'ማህደር ተኸáŠá‰± ክንበብ ይኽእáˆ';
+$labels['longacls'] = 'ተራእዩ á‹á‰¥áˆ መáˆáŠ¥áŠ½á‰² ዕላሠክለወጥ ይኽእáˆ';
+$labels['longaclw'] = 'ዕላማትን መáትሕ ቃላትን መáˆáŠ½á‰µá‰³á‰µ ክáˆá‹ˆáŒ¡ ይኽእሉ, ብዘይካ á‹á‰°áˆ¨áŠ£á‹©áŠ• á‹áŒ áኡን';
+$labels['longacli'] = 'መáˆáŠ¥áŠ½á‰² ናብዚ ማህደር ክጽሓá ወይ ክቕዳሕ ይኽእáˆ';
+$labels['longaclp'] = 'መáˆáŠ¥áŠ½á‰² ናብዚ ማህደር ክኣቱ ይኽእáˆ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Paylaşım';
+$labels['myrights'] = 'EriÅŸim Ä°zinleri';
+$labels['username'] = 'Kullanıcı:';
+$labels['advanced'] = 'GeliÅŸmiÅŸ kip';
+$labels['newuser'] = 'Kayıt ekle';
+$labels['editperms'] = 'İzinleri düzenle';
+$labels['actions'] = 'EriÅŸim izinleri iÅŸlemleri...';
+$labels['anyone'] = 'Tüm kullanıcılar (kim olursa)';
+$labels['anonymous'] = 'Ziyaretçiler (isimsiz)';
+$labels['identifier'] = 'Tanımlayıcı';
+$labels['acll'] = 'Arama';
+$labels['aclr'] = 'Ä°letileri oku';
+$labels['acls'] = 'Okundu durumu korunsun';
+$labels['aclw'] = 'Yazma iÅŸaretleri';
+$labels['acli'] = 'Ekle (kopyala)';
+$labels['aclp'] = 'Gönder';
+$labels['aclc'] = 'Alt klasörler oluştur';
+$labels['aclk'] = 'Alt klasörler oluştur';
+$labels['acld'] = 'Ä°letileri sil';
+$labels['aclt'] = 'Ä°letileri sil';
+$labels['acle'] = 'Sil';
+$labels['aclx'] = 'Klasörü sil';
+$labels['acla'] = 'Yönet';
+$labels['acln'] = 'Ä°letilere not ekle';
+$labels['aclfull'] = 'Tam denetim';
+$labels['aclother'] = 'DiÄŸer';
+$labels['aclread'] = 'Oku';
+$labels['aclwrite'] = 'Yaz';
+$labels['acldelete'] = 'Sil';
+$labels['shortacll'] = 'Arama';
+$labels['shortaclr'] = 'Oku';
+$labels['shortacls'] = 'Koru';
+$labels['shortaclw'] = 'Yaz';
+$labels['shortacli'] = 'Ekle';
+$labels['shortaclp'] = 'Gönder';
+$labels['shortaclc'] = 'OluÅŸtur';
+$labels['shortaclk'] = 'OluÅŸtur';
+$labels['shortacld'] = 'Sil';
+$labels['shortaclt'] = 'Sil';
+$labels['shortacle'] = 'Sil';
+$labels['shortaclx'] = 'Klasörü sil';
+$labels['shortacla'] = 'Yönet';
+$labels['shortacln'] = 'Not ekle';
+$labels['shortaclother'] = 'DiÄŸer';
+$labels['shortaclread'] = 'Oku';
+$labels['shortaclwrite'] = 'Yaz';
+$labels['shortacldelete'] = 'Sil';
+$labels['longacll'] = 'Klasör listesinde görülebilir ve abone olunabilir';
+$labels['longaclr'] = 'Klasör okunmak üzere açılabilir';
+$labels['longacls'] = 'Ä°letilerin Okundu iÅŸareti deÄŸiÅŸtirilebilir';
+$labels['longaclw'] = 'Okundu ve Silindi işaretleri dışındaki işaret ve anahtar sözcükler değiştirilebilir';
+$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir';
+$labels['longaclp'] = 'İletiler bu klasöre gönderilebilir';
+$labels['longaclc'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).';
+$labels['longaclk'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).';
+$labels['longacld'] = 'Ä°leti Silindi iÅŸareti deÄŸiÅŸtirilebilir';
+$labels['longaclt'] = 'Ä°leti Silindi iÅŸareti deÄŸiÅŸtirilebilir';
+$labels['longacle'] = 'Ä°letiler silinebilir';
+$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir';
+$labels['longacla'] = 'Klasör erişim izinleri değiştirilebilir';
+$labels['longacln'] = 'İletilerin paylaşılan üst verileri (notlar) değiştirilebilir';
+$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim';
+$labels['longaclread'] = 'Klasör okunmak üzere açılabilir';
+$labels['longaclwrite'] = 'Klasöre iletiler işaretlenebilir, yazılabilir ya da kopyalanabilir';
+$labels['longacldelete'] = 'Ä°letiler silinebilir';
+$labels['longaclother'] = 'DiÄŸer eriÅŸim izinleri';
+$labels['ariasummaryacltable'] = 'EriÅŸim izinleri listesi';
+$labels['arialabelaclactions'] = 'Ä°ÅŸlem listesi';
+$labels['arialabelaclform'] = 'EriÅŸim izinleri formu';
+$messages['deleting'] = 'EriÅŸim izinleri siliniyor...';
+$messages['saving'] = 'EriÅŸim izinleri kaydediliyor...';
+$messages['updatesuccess'] = 'EriÅŸim izinleri deÄŸiÅŸtirildi';
+$messages['deletesuccess'] = 'EriÅŸim izinleri silindi';
+$messages['createsuccess'] = 'EriÅŸim izinleri eklendi';
+$messages['updateerror'] = 'Erişim izinleri güncellenemedi';
+$messages['deleteerror'] = 'EriÅŸim izinleri silinemedi';
+$messages['createerror'] = 'EriÅŸim izinleri eklenemedi';
+$messages['deleteconfirm'] = 'Seçilmiş kullanıcılar için erişim izinlerini silmek istediğinize emin misiniz?';
+$messages['norights'] = 'Herhangi bir izin belirtilmemiÅŸ!';
+$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiş!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/tzl.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['username'] = 'Uçeir:';
+$labels['anonymous'] = 'Gästs (anonimös)';
+$labels['acldelete'] = 'Zeletarh';
+$labels['shortacld'] = 'Zeletarh';
+$labels['shortaclt'] = 'Zeletarh';
+$labels['shortacldelete'] = 'Zeletarh';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'ПоширеннÑ';
+$labels['myrights'] = 'Права доÑтупу';
+$labels['username'] = 'КориÑтувач:';
+$labels['advanced'] = 'Розширений режим';
+$labels['newuser'] = 'Додати запиÑ';
+$labels['editperms'] = 'Редагувати дозволи';
+$labels['actions'] = 'Дії з правами доÑтупу…';
+$labels['anyone'] = 'УÑÑ– кориÑтувачі (будь-хто)';
+$labels['anonymous'] = 'ГоÑÑ‚Ñ– (аноніми)';
+$labels['identifier'] = 'Ідентифікатор';
+$labels['acll'] = 'Пошук';
+$labels['aclr'] = 'Прочитані повідомленнÑ';
+$labels['acls'] = 'Зберегти ÑÑ‚Ð°Ñ‚ÑƒÑ Â«ÐŸÑ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¾Â»';
+$labels['aclw'] = 'Прапорці напиÑаннÑ';
+$labels['acli'] = 'Ð’Ñтавити (Копіювати в)';
+$labels['aclp'] = 'ДопиÑ';
+$labels['aclc'] = 'Створити підтеки';
+$labels['aclk'] = 'Створити підтеки';
+$labels['acld'] = 'Вилучити повідомленнÑ';
+$labels['aclt'] = 'Вилучити повідомленнÑ';
+$labels['acle'] = 'ВикреÑлити';
+$labels['aclx'] = 'Вилучити теку';
+$labels['acla'] = 'ÐдмініÑтрувати';
+$labels['acln'] = 'Ðнотувати повідомленнÑ';
+$labels['aclfull'] = 'Повний контроль';
+$labels['aclother'] = 'Інше';
+$labels['aclread'] = 'Читати';
+$labels['aclwrite'] = 'ПиÑати';
+$labels['acldelete'] = 'Вилучити';
+$labels['shortacll'] = 'Пошук';
+$labels['shortaclr'] = 'Читати';
+$labels['shortacls'] = 'Залишити';
+$labels['shortaclw'] = 'ПиÑати';
+$labels['shortacli'] = 'Ð’Ñтавити';
+$labels['shortaclp'] = 'ДопиÑати';
+$labels['shortaclc'] = 'Створити';
+$labels['shortaclk'] = 'Створити';
+$labels['shortacld'] = 'Вилучити';
+$labels['shortaclt'] = 'Вилучити';
+$labels['shortacle'] = 'ВикреÑлити';
+$labels['shortaclx'] = 'Вилучити теку';
+$labels['shortacla'] = 'ÐдмініÑтрувати';
+$labels['shortacln'] = 'Ðнотувати';
+$labels['shortaclother'] = 'Інше';
+$labels['shortaclread'] = 'Читати';
+$labels['shortaclwrite'] = 'ПиÑати';
+$labels['shortacldelete'] = 'Вилучити';
+$labels['longacll'] = 'Тека видима у ÑпиÑках Ñ– на неї можна підпиÑатиÑÑŒ';
+$labels['longaclr'] = 'Теку можна відкрити Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ';
+$labels['longacls'] = 'Прапорець «Прочитано» на повідомленнÑÑ… можна змінити';
+$labels['longaclw'] = 'Прапорці Ñ– ключові Ñлова повідомлень можна змінити, окрім «Прочитано» Ñ– «Вилучено»';
+$labels['longacli'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° запиÑати або копіювати у теку';
+$labels['longaclp'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° публікувати в цю теку';
+$labels['longaclc'] = 'Теки можна Ñтворювати (чи перейменовувати) прÑмо під цією текою';
+$labels['longaclk'] = 'Теки можна Ñтворювати (чи перейменовувати) прÑмо під цією текою';
+$labels['longacld'] = 'Прапорець «Вилучено» на повідомленнÑÑ… можна змінити';
+$labels['longaclt'] = 'Прапорець «Вилучено» на повідомленнÑÑ… можна змінити';
+$labels['longacle'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викреÑлити';
+$labels['longaclx'] = 'Теку можна вилучити чи перейменувати';
+$labels['longacla'] = 'Права доÑтупу до теки можна змінити';
+$labels['longacln'] = 'Поширені метадані (анотації) повідомлень можна змінити';
+$labels['longaclfull'] = 'Повний контроль, включно з адмініÑтруваннÑм тек';
+$labels['longaclread'] = 'Теку можна відкрити Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ';
+$labels['longaclwrite'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° позначити, запиÑати або копіювати у теку';
+$labels['longacldelete'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° вилучити';
+$labels['longaclother'] = 'Інші права доÑтупу';
+$labels['ariasummaryacltable'] = 'СпиÑок прав доÑтупу';
+$labels['arialabelaclactions'] = 'Перелічити дії';
+$labels['arialabelaclform'] = 'Форма прав доÑтупу';
+$messages['deleting'] = 'Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð² доÑтупу…';
+$messages['saving'] = 'Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð² доÑтупу…';
+$messages['updatesuccess'] = 'Права доÑтупу уÑпішно змінені';
+$messages['deletesuccess'] = 'Права доÑтупу уÑпішно вилучені';
+$messages['createsuccess'] = 'Права доÑтупу уÑпішно додані';
+$messages['updateerror'] = 'Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ права доÑтупу';
+$messages['deleteerror'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ права доÑтупу';
+$messages['createerror'] = 'Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ права доÑтупу';
+$messages['deleteconfirm'] = 'Ви дійÑно хочете вилучити права доÑтупу обраного кориÑтувача(-ів)?';
+$messages['norights'] = 'Жодних прав не вказано!';
+$messages['nouser'] = 'Жодного імені кориÑтувача не вказано!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Bo‘lishish';
+$labels['myrights'] = 'Kirish huquqlari';
+$labels['username'] = 'Foydalanuvchi:';
+$labels['advanced'] = 'Kengaytirilgan rejim';
+$labels['newuser'] = 'Qo‘shish';
+$labels['editperms'] = 'Ruxsatlarni tahrirlash';
+$labels['actions'] = 'Kirish huquqi harakatlari';
+$labels['anyone'] = 'Barcha foydalanuvchilar (hamma)';
+$labels['anonymous'] = 'Mehmonlar (anonim)';
+$labels['identifier'] = 'Identifikatsiya';
+$labels['acll'] = 'Qidirish';
+$labels['aclr'] = 'Xatlarni o‘qish';
+$labels['acli'] = 'Kiritish (...ga nusxalash)';
+$labels['aclp'] = 'Xat';
+$labels['aclc'] = 'Ichki papkalarni yaratish';
+$labels['aclk'] = 'Ichki papkalarni yaratish';
+$labels['acld'] = 'Xabarlarni o‘chirish';
+$labels['aclt'] = 'Xabarlarni o‘chirish';
+$labels['aclx'] = 'Papkani o‘chirish';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = 'Chia sẻ';
+$labels['myrights'] = 'Quyá»n truy cập';
+$labels['username'] = 'NgÆ°á»i dùng:';
+$labels['advanced'] = 'Chế độ tính năng cao hơn';
+$labels['newuser'] = 'Thêm bài viết';
+$labels['editperms'] = 'Sá»­a đổi quyá»n sá»­ dụng';
+$labels['actions'] = 'Các thao tác quyá»n truy cập';
+$labels['anyone'] = 'Tất cả ngÆ°á»i dùng (bất kỳ ai)';
+$labels['anonymous'] = 'Khách (nặc danh)';
+$labels['identifier'] = 'Äịnh danh';
+$labels['acll'] = 'Tìm kiếm';
+$labels['aclr'] = 'Äá»c thÆ°';
+$labels['acls'] = 'Giữ trạng thái đã xem qua';
+$labels['aclw'] = 'CỠđánh dấu cho mục viết';
+$labels['acli'] = 'CheÌ€n thêm (sao cheÌp vaÌ€o)';
+$labels['aclp'] = 'Äăng bài';
+$labels['aclc'] = 'Tạo giữ liệu con';
+$labels['aclk'] = 'Tạo giữ liệu con';
+$labels['acld'] = 'Xóa thư';
+$labels['aclt'] = 'Xóa thư';
+$labels['acle'] = 'Thải bá»';
+$labels['aclx'] = 'Xóa giữ liệu';
+$labels['acla'] = 'Quản lý';
+$labels['acln'] = 'Thông tin chú thích';
+$labels['aclfull'] = 'Quản lý toàn bộ';
+$labels['aclother'] = 'Loại khác';
+$labels['aclread'] = 'Äá»c';
+$labels['aclwrite'] = 'Viết';
+$labels['acldelete'] = 'Xoá';
+$labels['shortacll'] = 'Tìm kiếm';
+$labels['shortaclr'] = 'Äá»c';
+$labels['shortacls'] = 'Giữ';
+$labels['shortaclw'] = 'Viết';
+$labels['shortacli'] = 'Chèn';
+$labels['shortaclp'] = 'Äăng bài';
+$labels['shortaclc'] = 'Tạo mới';
+$labels['shortaclk'] = 'Tạo mới';
+$labels['shortacld'] = 'Xoá';
+$labels['shortaclt'] = 'Xoá';
+$labels['shortacle'] = 'Thải bá»';
+$labels['shortaclx'] = 'Giữ liệu được xóa';
+$labels['shortacla'] = 'Quản lý';
+$labels['shortacln'] = 'Chú thích';
+$labels['shortaclother'] = 'Loại khác';
+$labels['shortaclread'] = 'Äá»c';
+$labels['shortaclwrite'] = 'Viết';
+$labels['shortacldelete'] = 'Xoá';
+$labels['longacll'] = 'Thư mục đã được hiển thị và có thể đăng ký sử dụng';
+$labels['longaclr'] = 'ThÆ° mục có thể được mở để Ä‘á»c';
+$labels['longacls'] = 'CỠđánh dấu thư đã xem qua có thể thay đổi';
+$labels['longaclw'] = 'CỠthư và từ khóa có thể thay đổi, ngoại trừ đã xem qua và bị xóa';
+$labels['longacli'] = 'Thư có thể được ghi hoặc sao chép vào giữ liệu';
+$labels['longaclp'] = 'Thư có thể bỠvào trong giữ liệu này';
+$labels['longaclc'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
+$labels['longaclk'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
+$labels['longacld'] = 'CỠđánh dấu thư xóa có thể thay đổi';
+$labels['longaclt'] = 'CỠđánh dấu thư xóa có thể thay đổi';
+$labels['longacle'] = 'ThÆ° có thể thải bá»';
+$labels['longaclx'] = 'Giữ liệu có thể xóa được hoặc đặt lại tên';
+$labels['longacla'] = 'Quyên truy cập giữ liệu có thể thay đổi';
+$labels['longacln'] = 'Dữ liệu thông tin (chú thích) của thư có thể thay đổi';
+$labels['longaclfull'] = 'Quản lý toàn bộ bao gồm cả sự thi hành giữ liệu';
+$labels['longaclread'] = 'Giữ liệu có thể được mở để Ä‘á»c';
+$labels['longaclwrite'] = 'Thư có thể được đánh dấu, ghi hoăc sao chép vào giữ liệu';
+$labels['longacldelete'] = 'Thư có thể bị xóa';
+$labels['longaclother'] = 'Quyá»n truy cập khác';
+$labels['ariasummaryacltable'] = 'Danh sách quyá»n truy cập';
+$labels['arialabelaclactions'] = 'Danh sách hành động';
+$labels['arialabelaclform'] = 'Bảng khai quyá»n truy cập';
+$messages['deleting'] = 'Xóa quyá»n truy cập...';
+$messages['saving'] = 'LÆ°u quyá»n truy cập...';
+$messages['updatesuccess'] = 'Thay đổi quyá»n truy cập thành công...';
+$messages['deletesuccess'] = 'Xóa quyá»n truy cập thành công...';
+$messages['createsuccess'] = 'Thêm quyá»n truy cập thành công...';
+$messages['updateerror'] = 'Không thể cập nhật quyá»n truy cập';
+$messages['deleteerror'] = 'Khôngthể xóa quyá»n truy cập';
+$messages['createerror'] = 'Không thể thêm quyá»n truy cập';
+$messages['deleteconfirm'] = 'Bạn có chắc là muốn xóa bá» quyá»n truy cập của ngÆ°á»i dùng được chá»n?';
+$messages['norights'] = 'ChÆ°a có quyá»n nào được chỉ định!';
+$messages['nouser'] = 'Chưa có tên truy nhập được chỉ định!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = '共享';
+$labels['myrights'] = '访问æƒé™';
+$labels['username'] = '用户:';
+$labels['advanced'] = '高级模å¼';
+$labels['newuser'] = '新增æ¡ç›®';
+$labels['editperms'] = '编辑æƒé™';
+$labels['actions'] = 'æƒé™è®¾ç½®...';
+$labels['anyone'] = '所有用户(任何人)';
+$labels['anonymous'] = 'æ¥å®¾(匿å)';
+$labels['identifier'] = '标识符';
+$labels['acll'] = '查找';
+$labels['aclr'] = '读å–消æ¯';
+$labels['acls'] = 'ä¿å­˜å·²è¯»çŠ¶æ€';
+$labels['aclw'] = '写入标志';
+$labels['acli'] = 'æ’å…¥(å¤åˆ¶è‡³)';
+$labels['aclp'] = 'å‘é€';
+$labels['aclc'] = '创建å­æ–‡ä»¶å¤¹';
+$labels['aclk'] = '创建å­æ–‡ä»¶å¤¹';
+$labels['acld'] = '删除消æ¯';
+$labels['aclt'] = '删除消æ¯';
+$labels['acle'] = '清除';
+$labels['aclx'] = '删除文件夹';
+$labels['acla'] = '管ç†';
+$labels['acln'] = '注释消æ¯';
+$labels['aclfull'] = '全部控制';
+$labels['aclother'] = '其它';
+$labels['aclread'] = '读å–';
+$labels['aclwrite'] = '写入';
+$labels['acldelete'] = '删除';
+$labels['shortacll'] = '查找';
+$labels['shortaclr'] = '读å–';
+$labels['shortacls'] = 'ä¿å­˜';
+$labels['shortaclw'] = '写入';
+$labels['shortacli'] = 'æ’å…¥';
+$labels['shortaclp'] = 'å‘é€';
+$labels['shortaclc'] = '新建';
+$labels['shortaclk'] = '新建';
+$labels['shortacld'] = '删除';
+$labels['shortaclt'] = '删除';
+$labels['shortacle'] = '清除';
+$labels['shortaclx'] = '删除文件夹';
+$labels['shortacla'] = '管ç†';
+$labels['shortacln'] = '注释';
+$labels['shortaclother'] = '其他';
+$labels['shortaclread'] = '读å–';
+$labels['shortaclwrite'] = '写入';
+$labels['shortacldelete'] = '删除';
+$labels['longacll'] = '该文件夹在列表上å¯è§ä¸”å¯è¢«è®¢é˜…';
+$labels['longaclr'] = '该文件夹å¯è¢«æ‰“开阅读';
+$labels['longacls'] = '已读消æ¯æ ‡è¯†å¯ä»¥æ”¹å˜';
+$labels['longaclw'] = '除已读和删除表示外其他消æ¯æ ‡è¯†å¯ä»¥æ”¹å˜';
+$labels['longacli'] = '消æ¯å¯è¢«æ ‡è®°ï¼Œæ’°å†™æˆ–å¤åˆ¶è‡³æ–‡ä»¶å¤¹ä¸­';
+$labels['longaclp'] = '消æ¯å¯ä»¥å‘到此文件夹';
+$labels['longaclc'] = '文件夹å¯è¢«åˆ›å»º(或改å)于现有目录下';
+$labels['longaclk'] = '文件夹å¯ç›´æŽ¥åœ¨æ­¤ç›®å½•ä¸‹åˆ›å»ºï¼ˆæˆ–改å)';
+$labels['longacld'] = '消æ¯å·²åˆ é™¤æ ‡è¯†å¯ä»¥æ”¹å˜';
+$labels['longaclt'] = '消æ¯å·²åˆ é™¤æ ‡è¯†å¯ä»¥æ”¹å˜';
+$labels['longacle'] = '消æ¯å¯è¢«æ¸…除';
+$labels['longaclx'] = '该文件夹å¯è¢«åˆ é™¤æˆ–é‡å‘½å';
+$labels['longacla'] = '文件夹访问æƒé™å¯è¢«ä¿®æ”¹';
+$labels['longacln'] = '消æ¯å…±äº«å…ƒæ•°æ®ï¼ˆæ³¨é‡Šï¼‰å¯ä»¥æ”¹å˜';
+$labels['longaclfull'] = '完全控制,包括文件夹管ç†';
+$labels['longaclread'] = '该文件夹å¯è¢«æ‰“开阅读';
+$labels['longaclwrite'] = '消æ¯å¯è¢«æ ‡è®°ï¼Œæ’°å†™æˆ–å¤åˆ¶è‡³æ–‡ä»¶å¤¹ä¸­';
+$labels['longacldelete'] = 'ä¿¡æ¯å¯è¢«åˆ é™¤';
+$labels['longaclother'] = '其他访问æƒé™';
+$labels['ariasummaryacltable'] = '访问æƒé™åˆ—表';
+$labels['arialabelaclactions'] = '列出æ“作';
+$labels['arialabelaclform'] = '访问æƒé™ä»Ž';
+$messages['deleting'] = '删除访问æƒé™ä¸­â€¦';
+$messages['saving'] = 'ä¿å­˜è®¿é—®æƒé™ä¸­â€¦';
+$messages['updatesuccess'] = 'æˆåŠŸä¿®æ”¹è®¿é—®æƒé™';
+$messages['deletesuccess'] = 'æˆåŠŸåˆ é™¤è®¿é—®æƒé™';
+$messages['createsuccess'] = 'æˆåŠŸæ·»åŠ è®¿é—®æƒé™';
+$messages['updateerror'] = '无法更新访问æƒé™';
+$messages['deleteerror'] = '无法删除访问æƒé™';
+$messages['createerror'] = '无法添加访问æƒé™';
+$messages['deleteconfirm'] = '您确定è¦ç§»é™¤é€‰ä¸­ç”¨æˆ·çš„访问æƒé™å—?';
+$messages['norights'] = '没有已指定的æƒé™!';
+$messages['nouser'] = '没有已指定的用户å!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/acl/localization/<lang>.inc                                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
+*/
+$labels['sharing'] = '共享';
+$labels['myrights'] = 'å­˜å–權é™';
+$labels['username'] = '使用者:';
+$labels['advanced'] = '進階模å¼';
+$labels['newuser'] = '新增項目';
+$labels['editperms'] = '編輯權é™';
+$labels['actions'] = '權é™è¨­å®š...';
+$labels['anyone'] = '所有使用者 (任何人)';
+$labels['anonymous'] = '訪客 (匿å)';
+$labels['identifier'] = '識別碼';
+$labels['acll'] = '尋找';
+$labels['aclr'] = '讀å–郵件';
+$labels['acls'] = 'ä¿æŒä¸Šç·šç‹€æ…‹';
+$labels['aclw'] = '寫入旗標';
+$labels['acli'] = 'æ’å…¥ (複製到這裡)';
+$labels['aclp'] = '發表';
+$labels['aclc'] = '建立å­è³‡æ–™å¤¾';
+$labels['aclk'] = '建立å­è³‡æ–™å¤¾';
+$labels['acld'] = '刪除郵件';
+$labels['aclt'] = '刪除郵件';
+$labels['acle'] = '刪去';
+$labels['aclx'] = '刪除資料夾';
+$labels['acla'] = '管ç†è€…';
+$labels['acln'] = '評注郵件';
+$labels['aclfull'] = '完全控制';
+$labels['aclother'] = '其他';
+$labels['aclread'] = '讀å–';
+$labels['aclwrite'] = '寫入';
+$labels['acldelete'] = '刪除';
+$labels['shortacll'] = '尋找';
+$labels['shortaclr'] = '讀å–';
+$labels['shortacls'] = 'ä¿å­˜';
+$labels['shortaclw'] = '寫入';
+$labels['shortacli'] = 'æ’å…¥';
+$labels['shortaclp'] = '發表';
+$labels['shortaclc'] = '建立';
+$labels['shortaclk'] = '建立';
+$labels['shortacld'] = '刪除';
+$labels['shortaclt'] = '刪除';
+$labels['shortacle'] = '刪去';
+$labels['shortaclx'] = '資料夾刪除';
+$labels['shortacla'] = '管ç†è€…';
+$labels['shortacln'] = '評注';
+$labels['shortaclother'] = '其他';
+$labels['shortaclread'] = '讀å–';
+$labels['shortaclwrite'] = '寫入';
+$labels['shortacldelete'] = '刪除';
+$labels['longacll'] = '此資料夾å¯ä»¥è§€çœ‹å’Œè¨‚é–±';
+$labels['longaclr'] = '此資料夾å¯ä»¥é–‹å•Ÿä¸¦è®€å–';
+$labels['longacls'] = '能修改郵件旗標';
+$labels['longaclw'] = '郵件旗標和關éµå­—å¯ä»¥è®Šæ›´ï¼Œä¸åŒ…å«å·²æª¢è¦–和刪除的';
+$labels['longacli'] = '郵件能寫入或複製到資料夾';
+$labels['longaclp'] = '郵件能發表到此資料夾';
+$labels['longaclc'] = '這個資料夾之下å¯ä»¥å»ºå­è³‡æ–™å¤¾ (或é‡æ–°å‘½å)';
+$labels['longaclk'] = '這個資料夾之下å¯ä»¥å»ºå­è³‡æ–™å¤¾ (或é‡æ–°å‘½å)';
+$labels['longacld'] = '能修改郵件刪除旗標';
+$labels['longaclt'] = '能修改郵件刪除旗標';
+$labels['longacle'] = '能刪去郵件';
+$labels['longaclx'] = '資料夾能刪除或é‡æ–°å‘½å';
+$labels['longacla'] = '能變更資料夾權é™';
+$labels['longacln'] = '郵件共享的元資料 (評注) 能更改';
+$labels['longaclfull'] = '完全控制包å«è³‡æ–™å¤¾ç®¡ç†';
+$labels['longaclread'] = '資料夾能開啟並讀å–';
+$labels['longaclwrite'] = '郵件å¯ä»¥æ¨™è¨˜ã€å¯«å…¥æˆ–複製到資料夾';
+$labels['longacldelete'] = '郵件能刪除';
+$labels['longaclother'] = '其他權é™';
+$labels['ariasummaryacltable'] = '權é™æ¸…å–®';
+$labels['arialabelaclactions'] = '清單動作';
+$labels['arialabelaclform'] = '權é™è¡¨å–®';
+$messages['deleting'] = '刪除權é™...';
+$messages['saving'] = '儲存權é™...';
+$messages['updatesuccess'] = '權é™è®Šæ›´å®Œæˆ';
+$messages['deletesuccess'] = '權é™åˆªé™¤å®Œæˆ';
+$messages['createsuccess'] = '權é™æ–°å¢žå®Œæˆ';
+$messages['updateerror'] = '無法更新權é™';
+$messages['deleteerror'] = '無法刪除權é™';
+$messages['createerror'] = '無法新增權é™';
+$messages['deleteconfirm'] = '確定è¦åˆªé™¤æ‰€é¸ä½¿ç”¨è€…的權é™å—Žï¼Ÿ';
+$messages['norights'] = '沒有指定任何權é™';
+$messages['nouser'] = '沒有指定用戶å稱';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/classic/acl.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+#aclmanager
+{
+  position: relative;
+  border: 1px solid #999;
+  min-height: 302px;
+}
+
+#aclcontainer
+{
+  overflow-x: auto;
+}
+
+#acltable
+{
+  width: 100%;
+  border-collapse: collapse;
+  background-color: #F9F9F9;
+}
+
+#acltable td
+{
+  width: 1%;
+  white-space: nowrap;
+}
+
+#acltable thead td
+{
+  padding: 0 4px 0 2px;
+}
+
+#acltable tbody td
+{
+  text-align: center;
+  padding: 2px;
+  border-bottom: 1px solid #999999;
+  cursor: default;
+}
+
+#acltable tbody td.user
+{
+  width: 96%;
+  text-align: left;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#acltable tbody td.partial
+{
+  background: url(images/partial.png?v=05d7.389) center no-repeat;
+}
+
+#acltable tbody td.enabled
+{
+  background: url(images/enabled.png?v=9d9a.674) center no-repeat;
+}
+
+#acltable tr.selected td
+{
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+
+#acltable tr.unfocused td
+{
+  color: #FFFFFF;
+  background-color: #929292;
+}
+
+#acladvswitch
+{
+  position: absolute;
+  right: 4px;
+  text-align: right;
+  line-height: 22px;
+}
+
+#acladvswitch input
+{
+  vertical-align: middle;
+}
+
+#acladvswitch span
+{
+  display: block;
+}
+
+#aclform
+{
+  display: none;
+}
+
+#aclform div
+{
+  padding: 0;
+  text-align: center;
+  clear: both;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/classic/acl.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#aclmanager{position:relative;border:1px solid #999;min-height:302px}#aclcontainer{overflow-x:auto}#acltable{width:100%;border-collapse:collapse;background-color:#f9f9f9}#acltable td{width:1%;white-space:nowrap}#acltable thead td{padding:0 4px 0 2px}#acltable tbody td{text-align:center;padding:2px;border-bottom:1px solid #999;cursor:default}#acltable tbody td.user{width:96%;text-align:left;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}#acltable tbody td.partial{background:url(images/partial.png?v=05d7.389) center no-repeat}#acltable tbody td.enabled{background:url(images/enabled.png?v=9d9a.674) center no-repeat}#acltable tr.selected td{color:#fff;background-color:#c33}#acltable tr.unfocused td{color:#fff;background-color:#929292}#acladvswitch{position:absolute;right:4px;text-align:right;line-height:22px}#acladvswitch input{vertical-align:middle}#acladvswitch span{display:block}#aclform{display:none}#aclform div{padding:0;text-align:center;clear:both}
\ No newline at end of file
Binary file plugins/acl/skins/classic/images/enabled.png has changed
Binary file plugins/acl/skins/classic/images/partial.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/classic/templates/table.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,46 @@
+<!--[if lte IE 6]>
+    <style type="text/css">
+    #aclmanager { height: expression(Math.min(302, parseInt(document.documentElement.clientHeight))+'px'); }
+    </style>
+<![endif]-->
+
+<div id="aclmanager">
+<div id="aclcontainer" class="boxlistcontent" style="top:0">
+    <roundcube:object name="acltable" id="acltable" class="records-table" />
+</div>
+<div class="boxfooter">
+    <roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+    <roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="button groupactions" onclick="show_aclmenu(); return false" content=" " />
+</div>
+</div>
+
+<div id="aclmenu" class="popupmenu selectable">
+    <ul>
+        <li><roundcube:button command="acl-edit" label="edit" classAct="active" /></li>
+        <li><roundcube:button command="acl-delete" label="delete" classAct="active" /></li>
+        <roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
+            <li><roundcube:button name="acl-switch" id="acl-switch" label="acl.advanced" onclick="rcmail.command('acl-mode-switch')" class="active" /></li>
+        <roundcube:endif />
+    </ul>
+</div>
+
+<div id="aclform" style="padding:10px 0">
+    <fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
+        <roundcube:object name="acluser" class="toolbarmenu" id="acluser" size="35" />
+    </fieldset>
+    <fieldset class="thinbordered"><legend><roundcube:label name="acl.myrights" /></legend>
+        <roundcube:object name="aclrights" class="toolbarmenu" />
+    </fieldset>
+</div>
+
+<script type="text/javascript">
+function show_aclmenu()
+{
+    if (!rcmail_ui) {
+        rcube_init_mail_ui();
+        rcmail_ui.popups.aclmenu = {id:'aclmenu', above:1, obj: $('#aclmenu')};
+    }
+
+    rcmail_ui.show_popup('aclmenu');
+}
+</script>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/larry/acl.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+#aclcontainer
+{
+  overflow-x: auto;
+  border: 1px solid #CCDDE4;
+  background-color: #D9ECF4;
+  height: 272px;
+  box-shadow: none;
+}
+
+#acllist-content
+{
+  position: relative;
+  height: 230px;
+  background-color: white;
+}
+
+#acllist-footer
+{
+  position: relative;
+}
+
+#acltable
+{
+  width: 100%;
+  border-collapse: collapse;
+  border: none;
+}
+
+#acltable th,
+#acltable td
+{
+  white-space: nowrap;
+  text-align: center;
+}
+
+#acltable thead tr th
+{
+  font-size: 11px;
+  font-weight: bold;
+}
+
+#acltable tbody td
+{
+  text-align: center;
+  height: 16px;
+  cursor: default;
+}
+
+#acltable thead tr > .user
+{
+  width: 30%;
+  border-left: none;
+}
+
+#acltable.advanced thead tr > .user {
+  width: 25%;
+}
+
+#acltable tbody td.user
+{
+  text-align: left;
+}
+
+#acltable tbody td.partial
+{
+  background-image: url(images/partial.png?v=05d7.389);
+  background-position: center;
+  background-repeat: no-repeat;
+}
+
+#acltable tbody td.enabled
+{
+  background-image: url(images/enabled.png?v=9d9a.674);
+  background-position: center;
+  background-repeat: no-repeat;
+}
+
+#acltable tbody tr.selected td.partial
+{
+  background-color: #019bc6;
+  background-image: url(images/partial.png?v=05d7.389), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/partial.png?v=05d7.389), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
+  background-image: url(images/partial.png?v=05d7.389), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/partial.png?v=05d7.389), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/partial.png?v=05d7.389), linear-gradient(top, #019bc6 0%, #017cb4 100%);
+}
+
+#acltable tbody tr.selected td.enabled
+{
+  background-color: #019bc6;
+  background-image: url(images/enabled.png?v=9d9a.674), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/enabled.png?v=9d9a.674), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
+  background-image: url(images/enabled.png?v=9d9a.674), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/enabled.png?v=9d9a.674), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+  background-image: url(images/enabled.png?v=9d9a.674), linear-gradient(top, #019bc6 0%, #017cb4 100%);
+}
+
+#aclform
+{
+  display: none;
+}
+
+#aclform div
+{
+  padding: 0;
+  text-align: center;
+  clear: both;
+}
+
+#aclform ul
+{
+  list-style: none;
+  margin: 0.2em;
+  padding: 0;
+}
+
+#aclform ul li label
+{
+  margin-left: 0.5em;
+}
+
+ul.toolbarmenu li span.delete {
+  background-position: 0 -1509px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/larry/acl.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#aclcontainer{overflow-x:auto;border:1px solid #ccdde4;background-color:#d9ecf4;height:272px;box-shadow:none}#acllist-content{position:relative;height:230px;background-color:white}#acllist-footer{position:relative}#acltable{width:100%;border-collapse:collapse;border:0}#acltable th,#acltable td{white-space:nowrap;text-align:center}#acltable thead tr th{font-size:11px;font-weight:bold}#acltable tbody td{text-align:center;height:16px;cursor:default}#acltable thead tr>.user{width:30%;border-left:0}#acltable.advanced thead tr>.user{width:25%}#acltable tbody td.user{text-align:left}#acltable tbody td.partial{background-image:url(images/partial.png?v=05d7.389);background-position:center;background-repeat:no-repeat}#acltable tbody td.enabled{background-image:url(images/enabled.png?v=9d9a.674);background-position:center;background-repeat:no-repeat}#acltable tbody tr.selected td.partial{background-color:#019bc6;background-image:url(images/partial.png?v=05d7.389),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-webkit-gradient(linear,left top,left bottom,color-stop(0,#019bc6),color-stop(100%,#017cb4));background-image:url(images/partial.png?v=05d7.389),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-ms-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),linear-gradient(top,#019bc6 0,#017cb4 100%)}#acltable tbody tr.selected td.enabled{background-color:#019bc6;background-image:url(images/enabled.png?v=9d9a.674),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-webkit-gradient(linear,left top,left bottom,color-stop(0,#019bc6),color-stop(100%,#017cb4));background-image:url(images/enabled.png?v=9d9a.674),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-ms-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),linear-gradient(top,#019bc6 0,#017cb4 100%)}#aclform{display:none}#aclform div{padding:0;text-align:center;clear:both}#aclform ul{list-style:none;margin:.2em;padding:0}#aclform ul li label{margin-left:.5em}ul.toolbarmenu li span.delete{background-position:0 -1509px}
\ No newline at end of file
Binary file plugins/acl/skins/larry/images/enabled.png has changed
Binary file plugins/acl/skins/larry/images/partial.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/acl/skins/larry/templates/table.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<div id="aclcontainer" class="uibox listbox">
+<div id="acllist-content" class="scroller withfooter">
+    <h2 class="voice" id="aria-label-acltable"><roundcube:label name="acl.ariasummaryacltable" /></h2>
+    <roundcube:object name="acltable" id="acltable" class="records-table" aria-labelledby="aria-label-acltable" role="listbox" />
+</div>
+<div id="acllist-footer" class="boxfooter">
+    <roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="listbutton groupactions" onclick="return UI.toggle_popup('aclmenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="aclmenu-menu" />
+</div>
+</div>
+
+<div id="aclmenu" class="popupmenu" aria-hidden="true" data-align="bottom">
+    <h3 id="aria-label-aclactions" class="voice"><roundcube:label name="acl.arialabelaclactions" /></h3>
+    <ul id="aclmenu-menu" class="toolbarmenu selectable iconized" role="menu" aria-labelledby="aria-label-aclactions">
+        <li role="menuitem"><roundcube:button command="acl-edit" label="edit" class="icon" classAct="icon active" innerclass="icon edit" /></li>
+        <li role="menuitem"><roundcube:button command="acl-delete" label="delete" class="icon" classAct="icon active" innerclass="icon delete" /></li>
+        <roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
+            <li role="menuitem"><roundcube:button name="acl-switch" id="acl-switch" label="acl.advanced" onclick="rcmail.command('acl-mode-switch');return false" class="active" /></li>
+        <roundcube:endif />
+    </ul>
+</div>
+
+<div id="aclform" class="propform" aria-labelledby="aria-label-aclform" role="form">
+    <h3 id="aria-label-aclform" class="voice"><roundcube:label name="acl.arialabelaclform" /></h3>
+    <fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
+        <roundcube:object name="acluser" id="acluser" size="35" class="proplist" />
+    </fieldset>
+    <fieldset class="thinbordered"><legend><roundcube:label name="acl.myrights" /></legend>
+        <roundcube:object name="aclrights" class="proplist" />
+    </fieldset>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/additional_message_headers/additional_message_headers.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * Additional Message Headers
+ *
+ * Very simple plugin which will add additional headers
+ * to or remove them from outgoing messages.
+ *
+ * Enable the plugin in config.inc.php and add your desired headers:
+ * $config['additional_message_headers'] = array('User-Agent' => 'My-Very-Own-Webmail');
+ *
+ * @author Ziba Scott
+ * @website http://roundcube.net
+ */
+class additional_message_headers extends rcube_plugin
+{
+    function init()
+    {
+        $this->add_hook('message_before_send', array($this, 'message_headers'));
+    }
+
+    function message_headers($args)
+    {
+        $this->load_config();
+
+        $rcube = rcube::get_instance();
+
+        // additional email headers
+        $additional_headers = $rcube->config->get('additional_message_headers', array());
+
+        if (!empty($additional_headers)) {
+            $args['message']->headers($additional_headers, true);
+        }
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/additional_message_headers/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/additional_message_headers",
+    "type": "roundcube-plugin",
+    "description": "Very simple plugin which will add additional headers to or remove them from outgoing messages.",
+    "license": "GPLv2",
+    "version": "1.2.1",
+    "authors": [
+        {
+            "name": "Ziba Scott",
+            "email": "email@example.org",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/additional_message_headers/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+// $config['additional_message_headers']['X-Remote-Browser'] = $_SERVER['HTTP_USER_AGENT'];
+// $config['additional_message_headers']['X-Originating-IP'] = '[' . $_SERVER['REMOTE_ADDR'] .']';
+// $config['additional_message_headers']['X-RoundCube-Server'] = $_SERVER['SERVER_ADDR'];
+
+// if( isset( $_SERVER['MACHINE_NAME'] )) {
+//     $config['additional_message_headers']['X-RoundCube-Server'] .= ' (' . $_SERVER['MACHINE_NAME'] . ')';
+// }
+
+// To remove (e.g. X-Sender) message header use null value
+// $config['additional_message_headers']['X-Sender'] = null;
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/archive.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,64 @@
+/**
+ * Archive plugin script
+ * @version 3.0
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+function rcmail_archive(prop)
+{
+  if (rcmail_is_archive())
+    return;
+
+  var post_data = rcmail.selection_post_data();
+
+  // exit if selection is empty
+  if (!post_data._uid)
+    return;
+
+  rcmail.show_contentframe(false);
+
+  // Disable message command buttons until a message is selected
+  rcmail.enable_command(rcmail.env.message_commands, false);
+  rcmail.enable_command('plugin.archive', false);
+
+  // let the server sort the messages to the according subfolders
+  rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive');
+}
+
+function rcmail_is_archive()
+{
+  // check if current folder is an archive folder or one of its children
+  return rcmail.env.mailbox == rcmail.env.archive_folder
+    || rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter);
+}
+
+// callback for app-onload event
+if (window.rcmail) {
+  rcmail.addEventListener('init', function(evt) {
+    // register command (directly enable in message view mode)
+    rcmail.register_command('plugin.archive', rcmail_archive, rcmail.env.uid && !rcmail_is_archive());
+
+    // add event-listener to message list
+    if (rcmail.message_list)
+      rcmail.message_list.addEventListener('select', function(list) {
+        rcmail.enable_command('plugin.archive', list.get_selection().length > 0 && !rcmail_is_archive());
+      });
+
+    // set css style for archive folder
+    var li;
+    if (rcmail.env.archive_folder && (li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true)))
+      $(li).addClass('archive');
+  });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/archive.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+/**
+ * Archive plugin script
+ * @version 3.0
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+function rcmail_archive(a){rcmail_is_archive()||(a=rcmail.selection_post_data(),a._uid&&(rcmail.show_contentframe(!1),rcmail.enable_command(rcmail.env.message_commands,!1),rcmail.enable_command("plugin.archive",!1),rcmail.with_selected_messages("move",a,null,"plugin.move2archive")))}function rcmail_is_archive(){return rcmail.env.mailbox==rcmail.env.archive_folder||rcmail.env.mailbox.startsWith(rcmail.env.archive_folder+rcmail.env.delimiter)}
+window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("plugin.archive",rcmail_archive,rcmail.env.uid&&!rcmail_is_archive());rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){rcmail.enable_command("plugin.archive",0<a.get_selection().length&&!rcmail_is_archive())});var b;rcmail.env.archive_folder&&(b=rcmail.get_folder_li(rcmail.env.archive_folder,"",!0))&&$(b).addClass("archive")});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/archive.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,456 @@
+<?php
+
+/**
+ * Archive
+ *
+ * Plugin that adds a new button to the mailbox toolbar
+ * to move messages to a (user selectable) archive folder.
+ *
+ * @version 3.0
+ * @license GNU GPLv3+
+ * @author Andre Rodier, Thomas Bruederli, Aleksander Machniak
+ */
+class archive extends rcube_plugin
+{
+    public $task = 'settings|mail';
+
+
+    function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // register special folder type
+        rcube_storage::$folder_types[] = 'archive';
+
+        if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')
+            && ($archive_folder = $rcmail->config->get('archive_mbox'))
+        ) {
+            $skin_path = $this->local_skin_path();
+            if (is_file($this->home . "/$skin_path/archive.css")) {
+                $this->include_stylesheet("$skin_path/archive.css");
+            }
+
+            $this->include_script('archive.js');
+            $this->add_texts('localization', true);
+            $this->add_button(
+                array(
+                    'type'     => 'link',
+                    'label'    => 'buttontext',
+                    'command'  => 'plugin.archive',
+                    'class'    => 'button buttonPas archive disabled',
+                    'classact' => 'button archive',
+                    'width'    => 32,
+                    'height'   => 32,
+                    'title'    => 'buttontitle',
+                    'domain'   => $this->ID,
+                ),
+                'toolbar');
+
+            // register hook to localize the archive folder
+            $this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist'));
+
+            // set env variables for client
+            $rcmail->output->set_env('archive_folder', $archive_folder);
+            $rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type',''));
+        }
+        else if ($rcmail->task == 'mail') {
+            // handler for ajax request
+            $this->register_action('plugin.move2archive', array($this, 'move_messages'));
+        }
+        else if ($rcmail->task == 'settings') {
+            $this->add_hook('preferences_list', array($this, 'prefs_table'));
+            $this->add_hook('preferences_save', array($this, 'save_prefs'));
+        }
+    }
+
+    /**
+     * Hook to give the archive folder a localized name in the mailbox list
+     */
+    function render_mailboxlist($p)
+    {
+        $rcmail         = rcmail::get_instance();
+        $archive_folder = $rcmail->config->get('archive_mbox');
+        $show_real_name = $rcmail->config->get('show_real_foldernames');
+
+        // set localized name for the configured archive folder
+        if ($archive_folder && !$show_real_name) {
+            if (isset($p['list'][$archive_folder])) {
+                $p['list'][$archive_folder]['name'] = $this->gettext('archivefolder');
+            }
+            else {
+                // search in subfolders
+                $this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder'));
+            }
+        }
+
+        return $p;
+    }
+
+    /**
+     * Helper method to find the archive folder in the mailbox tree
+     */
+    private function _mod_folder_name(&$list, $folder, $new_name)
+    {
+        foreach ($list as $idx => $item) {
+            if ($item['id'] == $folder) {
+                $list[$idx]['name'] = $new_name;
+                return true;
+            }
+            else if (!empty($item['folders'])) {
+                if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Plugin action to move the submitted list of messages to the archive subfolders
+     * according to the user settings and their headers.
+     */
+    function move_messages()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // only process ajax requests
+        if (!$rcmail->output->ajax_call) {
+            return;
+        }
+
+        $this->add_texts('localization');
+
+        $storage        = $rcmail->get_storage();
+        $delimiter      = $storage->get_hierarchy_delimiter();
+        $read_on_move   = (bool) $rcmail->config->get('read_on_archive');
+        $archive_type   = $rcmail->config->get('archive_type', '');
+        $archive_folder = $rcmail->config->get('archive_mbox');
+        $archive_prefix = $archive_folder . $delimiter;
+        $current_mbox   = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
+        $search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC);
+        $uids           = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
+
+        // count messages before changing anything
+        if ($_POST['_from'] != 'show') {
+            $threading = (bool) $storage->get_threading();
+            $old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL');
+            $old_pages = ceil($old_count / $storage->get_pagesize());
+        }
+
+        $count = 0;
+
+        // this way response handler for 'move' action will be executed
+        $rcmail->action = 'move';
+        $this->result   = array(
+            'reload'       => false,
+            'error'        => false,
+            'sources'      => array(),
+            'destinations' => array(),
+        );
+
+        foreach (rcmail::get_uids(null, null, $multifolder) as $mbox => $uids) {
+            if (!$archive_folder  || strpos($mbox, $archive_prefix) === 0) {
+                $count = count($uids);
+                continue;
+            }
+            else if (!$archive_type || $archive_type == 'folder') {
+                $folder = $archive_folder;
+
+                if ($archive_type == 'folder') {
+                    // compose full folder path
+                    $folder .= $delimiter . $mbox;
+
+                    // create archive subfolder if it doesn't yet exist
+                    $this->subfolder_worker($folder);
+                }
+
+                $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
+            }
+            else {
+                if ($uids == '*') {
+                    $index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order());
+                    $uids  = $index->get();
+                }
+
+                $messages = $storage->fetch_headers($mbox, $uids);
+                $execute  = array();
+
+                foreach ($messages as $message) {
+                    $subfolder = null;
+                    switch ($archive_type) {
+                    case 'year':
+                        $subfolder = $rcmail->format_date($message->timestamp, 'Y');
+                        break;
+
+                    case 'month':
+                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
+                            . $delimiter . $rcmail->format_date($message->timestamp, 'm');
+                        break;
+
+                    case 'sender':
+                        $from = $message->get('from');
+                        preg_match('/[\b<](.+@.+)[\b>]/i', $from, $m);
+                        $subfolder = $m[1] ?: $this->gettext('unkownsender');
+
+                        // replace reserved characters in folder name
+                        $repl = $delimiter == '-' ? '_' : '-';
+                        $replacements[$delimiter] = $repl;
+                        $replacements['.'] = $repl;  // some IMAP server do not allow . characters
+                        $subfolder = strtr($subfolder, $replacements);
+                        break;
+                    }
+
+                    // compose full folder path
+                    $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : '');
+
+                    $execute[$folder][] = $message->uid;
+                }
+
+                foreach ($execute as $folder => $uids) {
+                    // create archive subfolder if it doesn't yet exist
+                    $this->subfolder_worker($folder);
+
+                    $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
+                }
+            }
+        }
+
+        if ($this->result['error']) {
+            if ($_POST['_from'] != 'show') {
+                $rcmail->output->command('list_mailbox');
+            }
+
+            $rcmail->output->show_message($this->gettext('archiveerror'), 'warning');
+            $rcmail->output->send();
+        }
+
+        if (!empty($_POST['_refresh'])) {
+            // FIXME: send updated message rows instead of reloading the entire list
+            $rcmail->output->command('refresh_list');
+        }
+        else {
+            $addrows = true;
+        }
+
+        // refresh saved search set after moving some messages
+        if ($search_request && $rcmail->storage->get_search_set()) {
+            $_SESSION['search'] = $rcmail->storage->refresh_search();
+        }
+
+        if ($_POST['_from'] == 'show') {
+            if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) {
+                $rcmail->output->command('show_message', $next);
+            }
+            else {
+                $rcmail->output->command('command', 'list');
+            }
+
+            $rcmail->output->send();
+        }
+
+        $mbox           = $storage->get_folder();
+        $msg_count      = $storage->count(null, $threading ? 'THREADS' : 'ALL');
+        $exists         = $storage->count($mbox, 'EXISTS', true);
+        $page_size      = $storage->get_pagesize();
+        $page           = $storage->get_page();
+        $pages          = ceil($msg_count / $page_size);
+        $nextpage_count = $old_count - $page_size * $page;
+        $remaining      = $msg_count - $page_size * ($page - 1);
+
+        // jump back one page (user removed the whole last page)
+        if ($page > 1 && $remaining == 0) {
+            $page -= 1;
+            $storage->set_page($page);
+            $_SESSION['page'] = $page;
+            $jump_back = true;
+        }
+
+        // update message count display
+        $rcmail->output->set_env('messagecount', $msg_count);
+        $rcmail->output->set_env('current_page', $page);
+        $rcmail->output->set_env('pagecount', $pages);
+        $rcmail->output->set_env('exists', $exists);
+
+        // update mailboxlist
+        $unseen_count = $msg_count ? $storage->count($mbox, 'UNSEEN') : 0;
+        $old_unseen   = rcmail_get_unseen_count($mbox);
+        $quota_root   = $multifolder ? $this->result['sources'][0] : 'INBOX';
+
+        if ($old_unseen != $unseen_count) {
+            $rcmail->output->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
+            rcmail_set_unseen_count($mbox, $unseen_count);
+        }
+
+        $rcmail->output->command('set_quota', $rcmail->quota_content(null, $quota_root));
+        $rcmail->output->command('set_rowcount', rcmail_get_messagecount_text($msg_count), $mbox);
+
+        if ($threading) {
+            $count = rcube_utils::get_input_value('_count', rcube_utils::INPUT_POST);
+        }
+
+        // add new rows from next page (if any)
+        if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) {
+            // #5862: Don't add more rows than it was on the next page
+            $count = $jump_back ? null : min($nextpage_count, $count);
+
+            $a_headers = $storage->list_messages($mbox, null,
+                rcmail_sort_column(), rcmail_sort_order(), $count);
+
+            rcmail_js_message_list($a_headers, false);
+        }
+
+        if ($this->result['reload']) {
+            $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation');
+        }
+        else {
+            $rcmail->output->show_message($this->gettext('archived'), 'confirmation');
+
+            if (!$read_on_move) {
+                foreach ($this->result['destinations'] as $folder) {
+                    rcmail_send_unread_count($folder, true);
+                }
+            }
+        }
+
+        // send response
+        $rcmail->output->send();
+    }
+
+    /**
+     * Move messages from one folder to another and mark as read if needed
+     */
+    private function move_messages_worker($uids, $from_mbox, $to_mbox, $read_on_move)
+    {
+        $storage = rcmail::get_instance()->get_storage();
+
+        if ($read_on_move) {
+            // don't flush cache (4th argument)
+            $storage->set_flag($uids, 'SEEN', $from_mbox, true);
+        }
+
+        // move message to target folder
+        if ($storage->move_message($uids, $to_mbox, $from_mbox)) {
+            if (!in_array($from_mbox, $this->result['sources'])) {
+                $this->result['sources'][] = $from_mbox;
+            }
+            if (!in_array($to_mbox, $this->result['destinations'])) {
+                $this->result['destinations'][] = $to_mbox;
+            }
+
+            return count($uids);
+        }
+
+        $this->result['error'] = true;
+    }
+
+    /**
+     * Create archive subfolder if it doesn't yet exist
+     */
+    private function subfolder_worker($folder)
+    {
+        $storage   = rcmail::get_instance()->get_storage();
+        $delimiter = $storage->get_hierarchy_delimiter();
+
+        if ($this->folders === null) {
+            $this->folders = $storage->list_folders('', $archive_folder . '*', 'mail', null, true);
+        }
+
+        if (!in_array($folder, $this->folders)) {
+            $path = explode($delimiter, $folder);
+
+            // we'll create all folders in the path
+            for ($i=0; $i<count($path); $i++) {
+                $_folder = implode($delimiter, array_slice($path, 0, $i+1));
+                if (!in_array($_folder, $this->folders)) {
+                    if ($storage->create_folder($_folder, true)) {
+                        $this->result['reload'] = true;
+                        $this->folders[] = $_folder;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Hook to inject plugin-specific user settings
+     */
+    function prefs_table($args)
+    {
+        global $CURR_SECTION;
+
+        $this->add_texts('localization');
+
+        $rcmail        = rcmail::get_instance();
+        $dont_override = $rcmail->config->get('dont_override', array());
+
+        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
+            $mbox = $rcmail->config->get('archive_mbox');
+            $type = $rcmail->config->get('archive_type');
+
+            // load folders list when needed
+            if ($CURR_SECTION) {
+                $select = $rcmail->folder_selector(array(
+                        'noselection'   => '---',
+                        'realnames'     => true,
+                        'maxlength'     => 30,
+                        'folder_filter' => 'mail',
+                        'folder_rights' => 'w',
+                        'onchange'      => "if ($(this).val() == 'INBOX') $(this).val('')",
+                ));
+            }
+            else {
+                $select = new html_select();
+            }
+
+            $args['blocks']['main']['options']['archive_mbox'] = array(
+                'title'   => $this->gettext('archivefolder'),
+                'content' => $select->show($mbox, array('name' => "_archive_mbox"))
+            );
+
+            // add option for structuring the archive folder
+            $archive_type = new html_select(array('name' => '_archive_type', 'id' => 'ff_archive_type'));
+            $archive_type->add($this->gettext('none'), '');
+            $archive_type->add($this->gettext('archivetypeyear'), 'year');
+            $archive_type->add($this->gettext('archivetypemonth'), 'month');
+            $archive_type->add($this->gettext('archivetypesender'), 'sender');
+            $archive_type->add($this->gettext('archivetypefolder'), 'folder');
+
+            $args['blocks']['archive'] = array(
+                'name' => rcube::Q($this->gettext('settingstitle')),
+                'options' => array('archive_type' => array(
+                        'title'   => $this->gettext('archivetype'),
+                        'content' => $archive_type->show($type)
+                    )
+                )
+            );
+        }
+        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
+            $chbox = new html_checkbox(array('name' => '_read_on_archive', 'id' => 'ff_read_on_archive', 'value' => 1));
+            $args['blocks']['main']['options']['read_on_archive'] = array(
+                'title'   => $this->gettext('readonarchive'),
+                'content' => $chbox->show($rcmail->config->get('read_on_archive') ? 1 : 0)
+            );
+        }
+
+        return $args;
+    }
+
+    /**
+     * Hook to save plugin-specific user settings
+     */
+    function save_prefs($args)
+    {
+        $rcmail        = rcmail::get_instance();
+        $dont_override = $rcmail->config->get('dont_override', array());
+
+        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
+            $args['prefs']['archive_type'] = rcube_utils::get_input_value('_archive_type', rcube_utils::INPUT_POST);
+        }
+        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
+            $args['prefs']['read_on_archive'] = (bool) rcube_utils::get_input_value('_read_on_archive', rcube_utils::INPUT_POST);
+        }
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/archive",
+    "type": "roundcube-plugin",
+    "description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.",
+    "license": "GPLv3+",
+    "version": "3.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'الأرشيÙ';
+$labels['buttontitle'] = 'أرش٠هذه الرسالة';
+$labels['archived'] = 'Ø£ÙرشÙت بنجاح';
+$labels['archivedreload'] = 'ارشÙت بنجاح. اعد تحميل الصÙحه لاضهار المل٠المؤرشÙ';
+$labels['archiveerror'] = 'بعض الرسائل لايمكن ارشÙتها';
+$labels['archivefolder'] = 'الأرشيÙ';
+$labels['settingstitle'] = 'الأرشيÙ';
+$labels['archivetype'] = 'تقسيم الأرشي٠ب';
+$labels['archivetypeyear'] = 'السنة (مثال. الارشيÙ/2012)';
+$labels['archivetypemonth'] = 'الشهر (مثال. الارشيÙ/2012/06)';
+$labels['archivetypefolder'] = 'المجلد الاصلي';
+$labels['archivetypesender'] = 'ايميل المرسل';
+$labels['unkownsender'] = 'مجهول';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivu';
+$labels['buttontitle'] = 'Archivar esti mensaxe';
+$labels['archived'] = 'Archiváu con ésitu';
+$labels['archivedreload'] = 'Archiváu con ésitu. Recarga la páxina pa ver les nueves carpetes d\'archivos.';
+$labels['archiveerror'] = 'Nun pudieron archivase dalgunos mensaxes';
+$labels['archivefolder'] = 'Archivu';
+$labels['settingstitle'] = 'Archivu';
+$labels['archivetype'] = 'Dividir l\'archivu por';
+$labels['archivetypeyear'] = 'Añu (p.ex. Archivu/2012)';
+$labels['archivetypemonth'] = 'Mes (p.ex. Archivu/2012/06)';
+$labels['archivetypefolder'] = 'Carpeta orixinal';
+$labels['archivetypesender'] = 'Corréu-e del remitente';
+$labels['unkownsender'] = 'desconocíu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arxiv';
+$labels['buttontitle'] = 'Mesajı arxivə göndər';
+$labels['archived'] = 'Arxivə göndərildi';
+$labels['archivedreload'] = 'Müvəffəqiyyətlə arxivləşdirildi. Yeni arxiv qovluqlarını görmək üçün səhifəni yeniləyin.';
+$labels['archiveerror'] = 'Bəzi məktublar arxivləşdirilə bilinmirlər';
+$labels['archivefolder'] = 'Arxiv';
+$labels['settingstitle'] = 'Arxiv';
+$labels['archivetype'] = 'Arxivi böl: ';
+$labels['archivetypeyear'] = 'İl (məs. Arxiv/2012)';
+$labels['archivetypemonth'] = 'Ay (məs. Arxiv/2012/06)';
+$labels['archivetypefolder'] = 'Orijinal qovluq';
+$labels['archivetypesender'] = 'Göndərənin E-Poçtu';
+$labels['unkownsender'] = 'naməlum';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхіў';
+$labels['buttontitle'] = 'ПеранеÑці Ñž архіў';
+$labels['archived'] = 'ПеранеÑена Ñž архіў';
+$labels['archivedreload'] = 'ПеранеÑена Ñž архіў. Перагрузіце Ñтаронку, каб пабачыць Ð½Ð¾Ð²Ñ‹Ñ Ð°Ñ€Ñ…Ñ–ÑžÐ½Ñ‹Ñ Ð¿Ð°Ð¿ÐºÑ–.';
+$labels['archiveerror'] = 'ÐÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ– не могуць быць перанеÑены Ñž архіў';
+$labels['archivefolder'] = 'Ðрхіў';
+$labels['settingstitle'] = 'Ðрхіў';
+$labels['archivetype'] = 'РаздзÑліць архіў паводле';
+$labels['archivetypeyear'] = 'года (прыкладам, Ðрхіў/2012)';
+$labels['archivetypemonth'] = 'меÑÑца (прыкладам, Ðрхіў/2012/06)';
+$labels['archivetypefolder'] = 'Ð’Ñ‹Ñ‚Ð¾Ñ‡Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°';
+$labels['archivetypesender'] = 'Эл. пошта адпраўніка';
+$labels['unkownsender'] = 'невÑдомы';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхивирай';
+$labels['buttontitle'] = 'Ðрхивиране на пиÑмото';
+$labels['archived'] = 'Ðрхивирането премина уÑпешно';
+$labels['archivedreload'] = 'УÑпешно архивирано. Презаредете Ñтраницата за да видите архивираните папки.';
+$labels['archiveerror'] = 'ÐÑкои пиÑма не бÑха архивирани';
+$labels['archivefolder'] = 'Ðрхивирай';
+$labels['settingstitle'] = 'Ðрхив';
+$labels['archivetype'] = 'Раздели архива по';
+$labels['archivetypeyear'] = 'Година (пр. Ðрхив/2012)';
+$labels['archivetypemonth'] = 'МеÑец (пр. Ðрхив/2012/06)';
+$labels['archivetypefolder'] = 'Оригинална папка';
+$labels['archivetypesender'] = 'E-mail Ð°Ð´Ñ€ÐµÑ Ð½Ð° подател';
+$labels['unkownsender'] = 'неизвеÑтно';
+$labels['readonarchive'] = 'Маркирай пиÑмото като прочетено в архива';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Diell';
+$labels['buttontitle'] = 'Diellaouiñ ar gemennadenn-mañ';
+$labels['archived'] = 'Diellaouet gant berzh';
+$labels['archivedreload'] = 'Diellaouet gant berzh. Adkargit ar bajenn da welet an teuliad dielloù nevez.';
+$labels['archiveerror'] = 'Ul lodenn eus ar c\'hemennadennoù n\'hallont ket bezañ diellaouet';
+$labels['archivefolder'] = 'Diell';
+$labels['settingstitle'] = 'Diell';
+$labels['archivetype'] = 'Rannañ an diell dre';
+$labels['archivetypeyear'] = 'Bloaz (sk: Diell/2012)';
+$labels['archivetypemonth'] = 'Miz (sk: Diell/2012/06)';
+$labels['archivetypefolder'] = 'Teuliad orin';
+$labels['archivetypesender'] = 'Postel ar c\'haser';
+$labels['unkownsender'] = 'dianav';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhiva';
+$labels['buttontitle'] = 'Arhiviraj ovu poruku';
+$labels['archived'] = 'Arhiviranje uspješno';
+$labels['archivedreload'] = 'UspjeÅ¡no arhivirano. Ponovo uÄitajte stranicu da biste vidjeli nove foldere za arhiviranje.';
+$labels['archiveerror'] = 'Neke poruke nisu mogle biti arhivirane';
+$labels['archivefolder'] = 'Arhiva';
+$labels['settingstitle'] = 'Arhiva';
+$labels['archivetype'] = 'Podijeli arhivu po';
+$labels['archivetypeyear'] = 'Godinama (npr. Arhiva/2012)';
+$labels['archivetypemonth'] = 'Mjesecima (npr Arhiva/2012/06)';
+$labels['archivetypefolder'] = 'Originalni folder';
+$labels['archivetypesender'] = 'Email pošiljaoca';
+$labels['unkownsender'] = 'nepoznato';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arxiva';
+$labels['buttontitle'] = 'Arxiva aquest missatge';
+$labels['archived'] = 'Arxivat correctament';
+$labels['archivedreload'] = 'Arxivat correctament. Recarregueu la pàgina per veure les noves carpetes de l\'arxiu.';
+$labels['archiveerror'] = 'Alguns missatges no s\'han pogut arxivar';
+$labels['archivefolder'] = 'Arxiu';
+$labels['settingstitle'] = 'Arxiu';
+$labels['archivetype'] = 'Divideix arxiu per';
+$labels['archivetypeyear'] = 'Any (p.ex. Arxiu/2012)';
+$labels['archivetypemonth'] = 'Mes (p.ex. Arxiu/2012/06)';
+$labels['archivetypefolder'] = 'Carpeta original';
+$labels['archivetypesender'] = 'Adreça del remitent';
+$labels['unkownsender'] = 'desconegut';
+$labels['readonarchive'] = 'Marca el missatge com a llegit a l\'arxiu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiv';
+$labels['buttontitle'] = 'Archivovat zprávu';
+$labels['archived'] = 'Úspěšně vloženo do archivu';
+$labels['archivedreload'] = 'Úspěšně archivovány. Obnovte stránku, abyste uviděli nové složky v archivu.';
+$labels['archiveerror'] = 'Některé zprávy nelze archivovat';
+$labels['archivefolder'] = 'Archiv';
+$labels['settingstitle'] = 'Archiv';
+$labels['archivetype'] = 'Rozdělit archiv podle';
+$labels['archivetypeyear'] = 'Rok (napÅ™.  Archiv/2012)';
+$labels['archivetypemonth'] = 'Měsíc (např. Archiv/2012/06)';
+$labels['archivetypefolder'] = 'Původní složka';
+$labels['archivetypesender'] = 'E-mail odesílatele';
+$labels['unkownsender'] = 'neznámý';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archif';
+$labels['buttontitle'] = 'Archifo\'r neges hwn';
+$labels['archived'] = 'Archifwyd yn llwyddiannus';
+$labels['archivedreload'] = 'Archifwyd yn llwyddiannus. Ail-lwythwch y dudalen i weld ffolderi archif newydd.';
+$labels['archiveerror'] = 'Nid oedd yn bosib archifo rhai negeseuon';
+$labels['archivefolder'] = 'Archif';
+$labels['settingstitle'] = 'Archif';
+$labels['archivetype'] = 'Rhannu archif gyda';
+$labels['archivetypeyear'] = 'Blwyddyn (e.g. Archif/2012)';
+$labels['archivetypemonth'] = 'Mis (e.g. Archif/2012/06)';
+$labels['archivetypetbmonth'] = 'Mis - Cydnaws a Thunderbird (e.e. Archif/2012/2012-06)';
+$labels['archivetypefolder'] = 'Ffolder gwreiddiol';
+$labels['archivetypesender'] = 'Ebost anfonwr';
+$labels['unkownsender'] = 'anhysbys';
+$labels['readonarchive'] = 'Nodi\'r neges fel darllenwyd ar archif';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkiv';
+$labels['buttontitle'] = 'Arkivér denne besked';
+$labels['archived'] = 'Succesfuldt arkiveret.';
+$labels['archivedreload'] = 'Arkivering lykkedes. Genindlæs siden for at se den nye arkiv mappe.';
+$labels['archiveerror'] = 'Nogle meddelelser kunne ikke arkiveres';
+$labels['archivefolder'] = 'Arkiv';
+$labels['settingstitle'] = 'Arkiver';
+$labels['archivetype'] = 'Del arkiv med';
+$labels['archivetypeyear'] = 'Ã…r (f.eks. Arkiv/2012)';
+$labels['archivetypemonth'] = 'MÃ¥ned (f.eks. Arkiv/2012/06)';
+$labels['archivetypefolder'] = 'Original mappe';
+$labels['archivetypesender'] = 'Afsenders email';
+$labels['unkownsender'] = 'ukendt';
+$labels['readonarchive'] = 'Marker denne meddelelse som læst i arkivet';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiv';
+$labels['buttontitle'] = 'Nachricht(en) archivieren';
+$labels['archived'] = 'Nachricht(en) erfolgreich archiviert';
+$labels['archivedreload'] = 'Nachrichten wurden archiviert. Laden Sie die Seite neu, um die neuen Archivordner zu sehen.';
+$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
+$labels['archivefolder'] = 'Archiv';
+$labels['settingstitle'] = 'Archiv';
+$labels['archivetype'] = 'Erstelle Unterordner nach';
+$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
+$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
+$labels['archivetypetbmonth'] = 'Monat - Kompatibel mit Thunderbird (z.B. Archive/2012/2012-06)';
+$labels['archivetypefolder'] = 'Originalordner';
+$labels['archivetypesender'] = 'Absender';
+$labels['unkownsender'] = 'unbekannt';
+$labels['readonarchive'] = 'Nachrichten beim Archivieren als gelesen markieren';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiv';
+$labels['buttontitle'] = 'Nachricht archivieren';
+$labels['archived'] = 'Nachricht erfolgreich archiviert';
+$labels['archivedreload'] = 'Erfolgreich archiviert. Bitte die Seite aktualisieren, um die neuen Archivordner zu sehen.';
+$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
+$labels['archivefolder'] = 'Archiv';
+$labels['settingstitle'] = 'Archiv';
+$labels['archivetype'] = 'Archiv aufteilen nach';
+$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
+$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
+$labels['archivetypetbmonth'] = 'Monat - Thunderbird-kompatibel (z.B. Archiv/2012/2012-06)';
+$labels['archivetypefolder'] = 'Originalordner';
+$labels['archivetypesender'] = 'Absender-E-Mail';
+$labels['unkownsender'] = 'unbekannt';
+$labels['readonarchive'] = 'Nachricht im Archiv als gelesen markieren';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ΑÏχειοθέτηση';
+$labels['buttontitle'] = 'ΑÏχειοθέτηση μηνÏματος';
+$labels['archived'] = 'ΑÏχειοθετήθηκε με επιτυχία';
+$labels['archivedreload'] = 'Επιτυχής αÏχειοθέτηση. Ανανεώστε την σελίδα για να δείτε τους νέους φακέλους αÏχειοθέτησης. ';
+$labels['archiveerror'] = 'ΟÏισμένα μηνÏματα δεν ήταν δυνατό να αÏχειοθετηθοÏν. ';
+$labels['archivefolder'] = 'ΑÏχειοθέτηση';
+$labels['settingstitle'] = 'ΑÏχειοθέτηση';
+$labels['archivetype'] = 'Τμηματοποίηση αÏχείου με βάση';
+$labels['archivetypeyear'] = 'Έτος (Ï€.χ. ΑÏχείο/2012)';
+$labels['archivetypemonth'] = 'Μήνα (Ï€.χ. ΑÏχείο/2012/06)';
+$labels['archivetypefolder'] = 'ΑÏχικός φάκελος';
+$labels['archivetypesender'] = 'Αποστολέας email';
+$labels['unkownsender'] = 'άγνωστο';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archive';
+$labels['buttontitle'] = 'Archive this message';
+$labels['archived'] = 'Successfully archived';
+$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
+$labels['archiveerror'] = 'Some messages could not be archived';
+$labels['archivefolder'] = 'Archive';
+$labels['settingstitle'] = 'Archive';
+$labels['archivetype'] = 'Divide archive by';
+$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
+$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
+$labels['archivetypefolder'] = 'Original folder';
+$labels['archivetypesender'] = 'Sender email';
+$labels['unkownsender'] = 'unknown';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archive';
+$labels['buttontitle'] = 'Archive this message';
+$labels['archived'] = 'Successfully archived';
+$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
+$labels['archiveerror'] = 'Some messages could not be archived';
+$labels['archivefolder'] = 'Archive';
+$labels['settingstitle'] = 'Archive';
+$labels['archivetype'] = 'Divide archive by';
+$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
+$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
+$labels['archivetypefolder'] = 'Original folder';
+$labels['archivetypesender'] = 'Sender email';
+$labels['unkownsender'] = 'unknown';
+$labels['readonarchive'] = 'Mark the message as read on archive';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+
+$labels = array();
+$labels['buttontext'] = 'Archive';
+$labels['buttontitle'] = 'Archive this message';
+$labels['archived'] = 'Successfully archived';
+$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
+$labels['archiveerror'] = 'Some messages could not be archived';
+$labels['archivefolder'] = 'Archive';
+$labels['settingstitle'] = 'Archive';
+$labels['archivetype'] = 'Divide archive by';
+$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
+$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
+$labels['archivetypefolder'] = 'Original folder';
+$labels['archivetypesender'] = 'Sender email';
+$labels['unkownsender'] = 'unknown';
+$labels['readonarchive'] = 'Mark the message as read on archive';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkivigi';
+$labels['buttontitle'] = 'Arkivigi ĉi tiun mesaÄon';
+$labels['archived'] = 'Sukcese arkivigita';
+$labels['archivefolder'] = 'Arkivo';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivar';
+$labels['buttontitle'] = 'Archivar este mensaje';
+$labels['archived'] = 'Archivado exitosamente';
+$labels['archivedreload'] = 'Archivado exitosamente. Recarga esta página para ver las nuevas carpetas';
+$labels['archiveerror'] = 'Algunos mensajes no pudieron ser archivados';
+$labels['archivefolder'] = 'Archivar';
+$labels['settingstitle'] = 'Archivar';
+$labels['archivetype'] = 'Dividir archivo por';
+$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
+$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
+$labels['archivetypefolder'] = 'Carpeta original';
+$labels['archivetypesender'] = 'Remitente de correo electrónico';
+$labels['unkownsender'] = 'desconocido';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivo';
+$labels['buttontitle'] = 'Archivar este mensaje';
+$labels['archived'] = 'Mensaje Archivado';
+$labels['archivedreload'] = 'Archivado satisfactoriamente. Recarga la página para ver las nuevas capetas archivadas.';
+$labels['archiveerror'] = 'Algunos mensajes no pudieron archivarse';
+$labels['archivefolder'] = 'Archivo';
+$labels['settingstitle'] = 'Archivo';
+$labels['archivetype'] = 'Separar archivo por';
+$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
+$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
+$labels['archivetypefolder'] = 'Carpeta original';
+$labels['archivetypesender'] = 'Remitente del correo';
+$labels['unkownsender'] = 'desconocido';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivo';
+$labels['buttontitle'] = 'Archivar este mensaje';
+$labels['archived'] = 'Archivado correctamente';
+$labels['archivedreload'] = 'Archivado correctamente. Recargue la página para ver las nuevas carpetas de archivo.';
+$labels['archiveerror'] = 'No se pudo archivar algunos mensajes';
+$labels['archivefolder'] = 'Archivo';
+$labels['settingstitle'] = 'Archivo';
+$labels['archivetype'] = 'Dividir el archivo por';
+$labels['archivetypeyear'] = 'Año (p.ej. Archivo/2012)';
+$labels['archivetypemonth'] = 'Mes (p.ej. Archivo/2012/06)';
+$labels['archivetypetbmonth'] = 'Mes - Compatible con Thunderbird (ej. Archive/2012/2012-06)';
+$labels['archivetypefolder'] = 'Bandeja original';
+$labels['archivetypesender'] = 'Correo electrónico del remitente';
+$labels['unkownsender'] = 'desconocido';
+$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhiveeri';
+$labels['buttontitle'] = 'Arhiveeri see kiri';
+$labels['archived'] = 'Edukalt arhiveeritud';
+$labels['archivedreload'] = 'Arhiveerimine õnnestus. Uute arhiivi kaustada nägemiseks laadi leht uuesti.';
+$labels['archiveerror'] = 'Mõnda kirja ei õnnestusnud arhiveerida';
+$labels['archivefolder'] = 'Arhiiv';
+$labels['settingstitle'] = 'Arhiiv';
+$labels['archivetype'] = 'Jaga arhiiv';
+$labels['archivetypeyear'] = 'Aasta (nt. Arhiiv/2012)';
+$labels['archivetypemonth'] = 'Kuu (nt. Arhiiv/2012/06)';
+$labels['archivetypefolder'] = 'Esialgne kaust';
+$labels['archivetypesender'] = 'Saatja e-post';
+$labels['unkownsender'] = 'teadmata';
+$labels['readonarchive'] = 'Märgi kiri arhiveerimisel loetuks';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Gorde';
+$labels['buttontitle'] = 'Gorde mezu hau';
+$labels['archived'] = 'Ongi gorde da';
+$labels['archivedreload'] = 'Ongi gorde da. Freskatu orria fitxategi-karpeta berria ikusteko.';
+$labels['archiveerror'] = 'Mezu batzuk ezin dira gorde.';
+$labels['archivefolder'] = 'Gorde';
+$labels['settingstitle'] = 'Gorde';
+$labels['archivetype'] = 'Banatu honen arabera';
+$labels['archivetypeyear'] = 'Urtea (e.b. Archive/2012)';
+$labels['archivetypemonth'] = 'Hilabete (e.b. Archive/2012/06)';
+$labels['archivetypetbmonth'] = 'Hilabetea - Thunderbird-ekin bateragarria (ad. Artxiboa/2012/2012-06)';
+$labels['archivetypefolder'] = 'Jatorrizko karpeta';
+$labels['archivetypesender'] = 'Bidaltzailearen helbidea';
+$labels['unkownsender'] = 'ezezaguna';
+$labels['readonarchive'] = 'Markatu mezua irakurri bezala artxiboan';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ارشیو';
+$labels['buttontitle'] = 'ارشیو این پیام';
+$labels['archived'] = 'با موÙقیت ارشیو شد';
+$labels['archivefolder'] = 'ارشیو';
+$labels['settingstitle'] = 'ارشیو';
+$labels['archivetypefolder'] = 'پوشه اصلی';
+$labels['archivetypesender'] = 'ایمیل Ùرستنده';
+$labels['unkownsender'] = 'نا شناس';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'بایگانی';
+$labels['buttontitle'] = 'بایگانی این پیغام';
+$labels['archived'] = 'با موÙقیت بایگانی شد';
+$labels['archivedreload'] = 'با کام‌یابی بایگانی شد. برای دیدن پوشه‌های بایگانی جدید صÙحه را مجددا بارگذاری نمایید.';
+$labels['archiveerror'] = 'برخی از پیام‌ها بایگانی نشدند.';
+$labels['archivefolder'] = 'بایگانی';
+$labels['settingstitle'] = 'بایگانی';
+$labels['archivetype'] = 'تقسیم بایگانی با';
+$labels['archivetypeyear'] = 'سال (به عنوان مثال بایگانی/۲۰۱۲)';
+$labels['archivetypemonth'] = 'ماه (به عنوان مثال بایگانی/۲۰۱۲/۰۶)';
+$labels['archivetypefolder'] = 'پوشه اصلی';
+$labels['archivetypesender'] = 'رایانامه Ùرستنده';
+$labels['unkownsender'] = 'ناشناخته';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkistoi';
+$labels['buttontitle'] = 'Arkistoi viesti';
+$labels['archived'] = 'Arkistoitu onnistuneesti';
+$labels['archivedreload'] = 'Arkistointi onnistui. Päivitä sivu nähdäksesi uudet arkistokansiot.';
+$labels['archiveerror'] = 'Joidenkin viestien arkistointi epäonnistui';
+$labels['archivefolder'] = 'Arkistoi';
+$labels['settingstitle'] = 'Arkistoi';
+$labels['archivetype'] = 'Jaa arkisto';
+$labels['archivetypeyear'] = 'Vuodella (esim. Arkisto/2012)';
+$labels['archivetypemonth'] = 'Kuukaudella (esim. Arkisto/2012/06)';
+$labels['archivetypefolder'] = 'Alkuperäinen kansio';
+$labels['archivetypesender'] = 'Lähettäjän osoite';
+$labels['unkownsender'] = 'tuntematon';
+$labels['readonarchive'] = 'Merkitse viesti luetuksi arkistoon';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Goym í skjalasavni';
+$labels['buttontitle'] = 'Goym hetta boð í skjalasavni';
+$labels['archived'] = 'Goymt í skjalasavn';
+$labels['archivedreload'] = 'Goymt í skjalasavn. Les inn aftur síðu fyri at síggja nýggjar mappur';
+$labels['archiveerror'] = 'Onkur boð kundu ikki leggjast í skjalagoymslu';
+$labels['archivefolder'] = 'Goym í skjalasavni';
+$labels['settingstitle'] = 'Goym í skjalasavni';
+$labels['archivetype'] = 'Deil skjalagoymslu við';
+$labels['archivetypeyear'] = 'Ãr (t.d. Skjalagoymsla/2012)';
+$labels['archivetypemonth'] = 'Mánar(t.d. Skjalahgoymsla/2012/06)';
+$labels['archivetypefolder'] = 'Uppruna mappa';
+$labels['archivetypesender'] = 'Sendara teldupostur';
+$labels['unkownsender'] = 'ókent';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiver';
+$labels['buttontitle'] = 'Archiver ce courriel';
+$labels['archived'] = 'Archivé avec succès';
+$labels['archivedreload'] = 'Archivé avec succès. Recharger la page pour voir les nouveaux dossiers d\'archives.';
+$labels['archiveerror'] = 'Certains courriels n\'ont pas pu être archivés.';
+$labels['archivefolder'] = 'Archives';
+$labels['settingstitle'] = 'Archives';
+$labels['archivetype'] = 'Diviser l\'archive par';
+$labels['archivetypeyear'] = 'Année (ex. Archives/2012)';
+$labels['archivetypemonth'] = 'Mois (ex. Archives/2012/06)';
+$labels['archivetypetbmonth'] = 'Mois - compatible avec Thunderbird (p.ex. Archive/2012/2012-06)';
+$labels['archivetypefolder'] = 'Dossier original';
+$labels['archivetypesender'] = 'Courriel de l\'expéditeur';
+$labels['unkownsender'] = 'inconnu';
+$labels['readonarchive'] = 'Marquer le courriel comme lu lors de l\'archivage';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Argyf';
+$labels['buttontitle'] = 'Pleats yn argyf';
+$labels['archived'] = 'Mei sukses nei argyf ferpleatst';
+$labels['archivedreload'] = 'Mei sukses nei argyf ferpleatst. Ferfarskje dizze side om de nije argyf mappen te sjen.';
+$labels['archiveerror'] = 'Guon berjochten koenen net ferpleatst wurde nei it argyf';
+$labels['archivefolder'] = 'Argyf';
+$labels['settingstitle'] = 'Argyf';
+$labels['archivetype'] = 'Ferdiel argyf troch';
+$labels['archivetypeyear'] = 'Jier (bygelyks Argyf/2012)';
+$labels['archivetypemonth'] = 'Moanne (bygelyks Argyf/2012/06)';
+$labels['archivetypefolder'] = 'Oarspronklike map';
+$labels['archivetypesender'] = 'Stjoerder e-post';
+$labels['unkownsender'] = 'ûnbekend';
+$labels['readonarchive'] = 'Markearje it berjocht as lêzen op argyf';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Cuir sa chartlann';
+$labels['buttontitle'] = 'Cuir an teachtaireacht seo sa chartlann';
+$labels['archived'] = 'Curtha go ráthúil sa chartlann';
+$labels['archivedreload'] = 'Curtha go ráthúil sa chartlann. Athluchtaigh an leathanach chun na fillteáin chartlainne nua a fheiceáil.';
+$labels['archiveerror'] = 'Níorbh fhéidir roinnt teachtaireachtaí a chur sa chartlann';
+$labels['archivefolder'] = 'An Chartlann';
+$labels['settingstitle'] = 'Cartlann';
+$labels['archivetype'] = 'Roinn an chartlann de réir';
+$labels['archivetypeyear'] = 'Biiain (m.sh. Cartlann/2012)';
+$labels['archivetypemonth'] = 'Mí (m.sh. Cartlann/2012/06)';
+$labels['archivetypetbmonth'] = 'Mí - comhoiriúnach le Thunderbird (m.sh. Cartlann/2012/2012-06)';
+$labels['archivetypefolder'] = 'An fillteán bunaidh';
+$labels['archivetypesender'] = 'Seoladh ríomhphoist an tseoltóra';
+$labels['unkownsender'] = 'anaithnid';
+$labels['readonarchive'] = 'Rianaigh an teachtaireacht mar léite sa chartlann';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arquivo';
+$labels['buttontitle'] = 'Arquivar esta mensaxe';
+$labels['archived'] = 'Aquivouse a mensaxe';
+$labels['archivedreload'] = 'Arquivado correctamente. Recargua a páxina para ver os novos cartafoles de arquivado.';
+$labels['archiveerror'] = 'Non se puideron arquivar algunhas mensaxes';
+$labels['archivefolder'] = 'Arquivo';
+$labels['settingstitle'] = 'Arquivar';
+$labels['archivetype'] = 'Dividir o arquivo por';
+$labels['archivetypeyear'] = 'Ano (p.ex. Arquivo/2012)';
+$labels['archivetypemonth'] = 'Mes (p.ex. Arquivo/2012/06)';
+$labels['archivetypefolder'] = 'Cartafol orixe';
+$labels['archivetypesender'] = 'Enderezo da persoa remitente';
+$labels['unkownsender'] = 'descoñecido';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = '×רכיון';
+$labels['buttontitle'] = 'משלוח ההודעה ל×רכיב';
+$labels['archived'] = 'עדכון ×”×רכיון הצליח';
+$labels['archivedreload'] = 'נשמר בהצלחה ב×רכיב. יש לרענו ×ת הדף כדי לר×ות ×ת התיקיות החדשות ב×רכיב.';
+$labels['archiveerror'] = '×œ× × ×™×ª×Ÿ ×”×™×” להעביר ל×רכיב חלק מההודעות';
+$labels['archivefolder'] = '×רכיון';
+$labels['settingstitle'] = '×רכיב';
+$labels['archivetype'] = 'לחלק ×ת ×”×רכיב על ידי';
+$labels['archivetypeyear'] = 'שנה ( לדוגמה, ×רכיב/2012/96 )';
+$labels['archivetypemonth'] = 'חודש ( לדוגמה, ×רכיב/2012/96 )';
+$labels['archivetypefolder'] = 'תיקיה מקורית';
+$labels['archivetypesender'] = 'שולח ההודעה';
+$labels['unkownsender'] = '×œ× ×™×“×•×¢';
+$labels['readonarchive'] = 'יש לסמן ×ת ההודעה ב×רכיב ×›×ילו נקר××”';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhiva';
+$labels['buttontitle'] = 'Arhiviraj poruku';
+$labels['archived'] = 'Uspješno arhivirano';
+$labels['archivedreload'] = 'Uspješno arhivirano. Osvježite stranicu kako biste vidjeli nove arhivske mape.';
+$labels['archiveerror'] = 'Neke poruke nije bilo moguće arhivirati';
+$labels['archivefolder'] = 'Arhiva';
+$labels['settingstitle'] = 'Arhiva';
+$labels['archivetype'] = 'Podijeli arhivu po';
+$labels['archivetypeyear'] = 'Godina (npr. Arhiva/2012)';
+$labels['archivetypemonth'] = 'Mjesec (e.g. Arhiva/2012/06)';
+$labels['archivetypefolder'] = 'Izvorna mapa';
+$labels['archivetypesender'] = 'E-mail adresa pošiljatelja';
+$labels['unkownsender'] = 'nepoznato';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiválás';
+$labels['buttontitle'] = 'Üzenet archiválása';
+$labels['archived'] = 'Sikeres archiválás';
+$labels['archivedreload'] = 'Az arhiválás sikeres. Frissitsd az oldalt, hogy lásd a létrejött arhivum mappákat.';
+$labels['archiveerror'] = 'Néhány üzenetet nem sikerült arhiválni';
+$labels['archivefolder'] = 'Archiválás';
+$labels['settingstitle'] = 'Archiválás';
+$labels['archivetype'] = 'Arhívum tovább bontása a következő szerint';
+$labels['archivetypeyear'] = 'Év ( pl Arhívum/2012)';
+$labels['archivetypemonth'] = 'Honap ( pl Arhívum/2012/06)';
+$labels['archivetypetbmonth'] = 'Honap - Thunderbird kompatibilis ( pl Arhívum/2012/2012-06)';
+$labels['archivetypefolder'] = 'Eredeti mappa';
+$labels['archivetypesender'] = 'Feladó';
+$labels['unkownsender'] = 'ismeretlen';
+$labels['readonarchive'] = 'Üzenet olvasottként jelölése arhiváláskor';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ô±Ö€Õ­Õ«Õ¾';
+$labels['buttontitle'] = 'Ô±Ö€Õ­Õ«Õ¾Õ¡ÖÕ¶Õ¥Õ¬ Õ¡ÕµÕ½ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['archived'] = 'Ô²Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² Õ¡Ö€Õ­Õ«Õ¾Õ¡ÖÕ¾Õ¥Ö';
+$labels['archivedreload'] = 'Ô²Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² Õ¡Ö€Õ­Õ«Õ¾Õ¡ÖÕ¾Õ¥Ö: ÕŽÕ¥Ö€Õ¢Õ¥Õ¼Õ¶Õ¥Ö„ Õ§Õ»Õ¨ Õ¶Õ¸Ö€ Õ¡Ö€Õ­Õ«Õ¾Õ¡ÖÕ¾Õ¡Õ® ÕºÕ¡Õ¶Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Õ¿Õ¥Õ½Õ¶Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€:';
+$labels['archiveerror'] = 'ÕˆÖ€Õ¸Õ· Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€ Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Õ¡Ö€Õ­Õ«Õ¾Õ¡ÖÕ¶Õ¥Õ¬';
+$labels['archivefolder'] = 'Ô±Ö€Õ­Õ«Õ¾';
+$labels['settingstitle'] = 'Ô±Ö€Õ­Õ«Õ¾';
+$labels['archivetype'] = 'Ô²Õ¡ÕªÕ¡Õ¶Õ¥Õ¬ Õ¡Ö€Õ­Õ«Õ¾Õ¨';
+$labels['archivetypeyear'] = 'ÕÕ¡Ö€Õ¥Õ©Õ«Õ¾ (Ö…Ö€.Õ Ô±Ö€Õ­Õ«Õ¾/2012)';
+$labels['archivetypemonth'] = 'Ô±Õ´Õ½Õ¡Õ©Õ«Õ¾ (Ö…Ö€.Õ Ô±Ö€Õ­Õ«Õ¾/2012/06)';
+$labels['archivetypefolder'] = 'Ô±Õ¼Õ¡Õ»Õ«Õ¶ ÕºÕ¡Õ¶Õ¡Õ¯Õ¨';
+$labels['archivetypesender'] = 'ÕˆÖ‚Õ²Õ¡Ö€Õ¯Õ¸Õ²Õ« Õ§Õ¬-ÖƒÕ¸Õ½Õ¿Õ¨';
+$labels['unkownsender'] = 'Õ¡Õ¶Õ°Õ¡ÕµÕ¿';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivar';
+$labels['buttontitle'] = 'Archivar iste message';
+$labels['archived'] = 'Archivate con successo';
+$labels['archivedreload'] = 'Archivate con successo. Recarga le pagina pro vider le nove dossieres de archivo.';
+$labels['archiveerror'] = 'Alcun messages non poteva esser archivate';
+$labels['archivefolder'] = 'Archivo';
+$labels['settingstitle'] = 'Archivo';
+$labels['archivetype'] = 'Divider le archivo per';
+$labels['archivetypeyear'] = 'Anno (p.ex. Archivo/2012)';
+$labels['archivetypemonth'] = 'Mense (p.ex. Archivo/2012/06)';
+$labels['archivetypetbmonth'] = 'Mense - compatibile con Thunderbird (p.ex. Archivo/2012/2012-06)';
+$labels['archivetypefolder'] = 'Dossier original';
+$labels['archivetypesender'] = 'E-mail del expeditor';
+$labels['unkownsender'] = 'incognite';
+$labels['readonarchive'] = 'Marcar le message como legite in le archivo';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arsip';
+$labels['buttontitle'] = 'Arsipkan pesan ini';
+$labels['archived'] = 'Berhasil mengarsipkan';
+$labels['archivedreload'] = 'Berhasil diarsipkan. Reload halaman untuk melihat folder arsip baru.';
+$labels['archiveerror'] = 'Beberapa pesan tidak dapat diarsipkan';
+$labels['archivefolder'] = 'Arsip';
+$labels['settingstitle'] = 'Arsip';
+$labels['archivetype'] = 'Pisah arsip berdasarkan';
+$labels['archivetypeyear'] = 'Tahun (contoh: Arsip/2012)';
+$labels['archivetypemonth'] = 'Bulan (contoh: Arsip/2012/06)';
+$labels['archivetypefolder'] = 'Folder asli';
+$labels['archivetypesender'] = 'Email pengirim';
+$labels['unkownsender'] = 'Tidak dikenal';
+$labels['readonarchive'] = 'Tandai pesan telah dibaca di arsip';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Geymsla';
+$labels['buttontitle'] = 'Setja þetta skeyti í geymslu';
+$labels['archived'] = 'Tókst að setja í geymslu';
+$labels['archivedreload'] = 'Tókst að setja í geymslu. Endurlestu síðuna til að sjá nýju geymslumöppurnar.';
+$labels['archiveerror'] = 'Ekki var hægt að setja öll skeyti í geymslu';
+$labels['archivefolder'] = 'Geymsla';
+$labels['settingstitle'] = 'Geymsla';
+$labels['archivetype'] = 'Skipta geymslu upp eftir';
+$labels['archivetypeyear'] = 'ári (t.d. Geymsla/2012)';
+$labels['archivetypemonth'] = 'mánuði (t.d. Geymsla/2012/06)';
+$labels['archivetypetbmonth'] = 'mánuði - samhæft við Thunderbird (t.d. Geymsla/2012/2012-06)';
+$labels['archivetypefolder'] = 'Upprunaleg mappa';
+$labels['archivetypesender'] = 'Tölvupóstfang sendanda';
+$labels['unkownsender'] = 'óþekkt';
+$labels['readonarchive'] = 'Merkja skeyti sem lesið þegar það er lesið í geymslu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivio';
+$labels['buttontitle'] = 'Archivia questo messaggio';
+$labels['archived'] = 'Archiviato correttamente';
+$labels['archivedreload'] = 'Archiviata con successo. Ricarica la pagina per visualizzare le nuove cartelle.';
+$labels['archiveerror'] = 'Alcuni messaggi non possono essere archiviati';
+$labels['archivefolder'] = 'Archivio';
+$labels['settingstitle'] = 'Archivio';
+$labels['archivetype'] = 'Dividi archivio per';
+$labels['archivetypeyear'] = 'Anno (es. Archivio/2012)';
+$labels['archivetypemonth'] = 'Mese (es. Archivio/2012/06)';
+$labels['archivetypefolder'] = 'Cartella di origine';
+$labels['archivetypesender'] = 'Mittente email';
+$labels['unkownsender'] = 'sconosciuto';
+$labels['readonarchive'] = 'Segna i messaggi in archivio come letti';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'アーカイブ';
+$labels['buttontitle'] = 'ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’アーカイブ';
+$labels['archived'] = 'アーカイブã—ã¾ã—ãŸã€‚';
+$labels['archivedreload'] = 'アーカイブã—ã¾ã—ãŸã€‚ページをå†èª­ã¿è¾¼ã¿ã™ã‚‹ã¨ã€æ–°ã—ã„アーカイブã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’表示ã—ã¾ã™ã€‚';
+$labels['archiveerror'] = 'アーカイブã§ããªã„メッセージãŒã‚ã‚Šã¾ã—ãŸ';
+$labels['archivefolder'] = 'アーカイブ';
+$labels['settingstitle'] = 'アーカイブ';
+$labels['archivetype'] = 'アーカイブを分割: ';
+$labels['archivetypeyear'] = '年 (例: アーカイブ/2012)';
+$labels['archivetypemonth'] = '月 (例: アーカイブ/2012/06)';
+$labels['archivetypetbmonth'] = '月 - Thunderbirdäº’æ› (例: アーカイブ/2012/2012-06)';
+$labels['archivetypefolder'] = 'å…ƒã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼';
+$labels['archivetypesender'] = 'é›»å­ãƒ¡ãƒ¼ãƒ«ã®é€ä¿¡è€…';
+$labels['unkownsender'] = 'ä¸æ˜Ž';
+$labels['readonarchive'] = 'アーカイブã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’既読ã«è¨­å®š';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/kab.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ḥrez';
+$labels['buttontitle'] = 'Ḥrez izen-agi';
+$labels['archived'] = 'Aḥraz yedda akken iwata';
+$labels['archivefolder'] = 'Aḥraz';
+$labels['settingstitle'] = 'Aḥraz';
+$labels['archivetypeyear'] = 'Aseggas(md. Aḥraz/2012)';
+$labels['archivetypesender'] = 'Imayl n umazan';
+$labels['unkownsender'] = 'arussin';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'áž”áŸážŽáŸ’ណសារ';
+$labels['buttontitle'] = 'ធ្វើ​សារ​នáŸáŸ‡â€‹áž‡áž¶â€‹áž”ណ្ណសារ';
+$labels['archived'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រáŸáž…';
+$labels['archivedreload'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រáŸáž…។ ផ្ទុក​ទំពáŸážšâ€‹áž¡áž¾áž„​វិញ ដើម្បី​មើល​ážážâ€‹áž”ណ្ណសារ​ážáŸ’មី។';
+$labels['archiveerror'] = 'សារ​ážáŸ’លះ​មិន​អាច​ážáŸ’រូវ​បាន​ធ្វើ​ជា​បណ្ណសារ​ទáŸ';
+$labels['archivefolder'] = 'áž”áŸážŽáŸ’ណសារ';
+$labels['settingstitle'] = 'បណ្ណសារ';
+$labels['archivetype'] = 'ចែក​បណ្ណសារ​ážáž¶áž˜';
+$labels['archivetypeyear'] = 'ឆ្នាំ (ឧទា. បណ្ណសារ/2012)';
+$labels['archivetypemonth'] = 'ážáŸ‚ (ឧទា. បណ្ណសារ/2012/06)';
+$labels['archivetypefolder'] = 'ážážâ€‹ážŠáž¾áž˜';
+$labels['archivetypesender'] = 'អ្នក​ផ្ញើ​អ៊ីមែល';
+$labels['unkownsender'] = 'មិន​ស្គាល់';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ë³´ê´€';
+$labels['buttontitle'] = 'ì´ ë©”ì‹œì§€ë¥¼ ë³´ê´€í•¨ì— ì €ìž¥';
+$labels['archived'] = '성공ì ìœ¼ë¡œ 보관함';
+$labels['archivedreload'] = '성공ì ìœ¼ë¡œ ë³´ê´€ë˜ì—ˆìŠµë‹ˆë‹¤. 페ì´ì§€ë¥¼ 다시 불러와서 새로운 보관함 í´ë”를 확ì¸í•˜ì„¸ìš”.';
+$labels['archiveerror'] = 'ì¼ë¶€ 메시지가 ë³´ê´€ë˜ì§€ ì•ŠìŒ';
+$labels['archivefolder'] = 'ë³´ê´€';
+$labels['settingstitle'] = 'ë³´ê´€';
+$labels['archivetype'] = 'ë³´ê´€ëœ ë©”ì‹œì§€ 정리 기준';
+$labels['archivetypeyear'] = 'ì—°ë„ (예: ë³´ê´€/2012)';
+$labels['archivetypemonth'] = '월 (예: 보관/2012/06)';
+$labels['archivetypefolder'] = 'ì›ë³¸ í´ë”';
+$labels['archivetypesender'] = 'ë°œì†¡ìž ì´ë©”ì¼';
+$labels['unkownsender'] = 'ì•Œ 수 ì—†ìŒ';
+$labels['readonarchive'] = '편지 보관함ì—ì„œ 메시지를 ì½ìŒìœ¼ë¡œ 표시';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arşîv';
+$labels['buttontitle'] = 'vê peyamê arşîv bike';
+$labels['archived'] = 'Bi serkeftin hat arşîvkirin';
+$labels['archivedreload'] = 'Bi serkeftin hat arşîvkirin. Rûpelê dîsa bar bike da dosyeyên arşîvê yên nû bibînî.';
+$labels['archiveerror'] = 'Hin peyam nehatin arşîvkirin.';
+$labels['archivefolder'] = 'Arşîv';
+$labels['settingstitle'] = 'Arşîv';
+$labels['archivetype'] = 'Arşîvê dabeşîne';
+$labels['archivetypeyear'] = 'Sal (wek Arşîv/2012)';
+$labels['archivetypemonth'] = 'Meh (wek Arşîv/2012/06)';
+$labels['archivetypefolder'] = 'Dosyeya resen';
+$labels['archivetypesender'] = 'Emaila ÅŸandyar';
+$labels['unkownsender'] = 'nenas';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ئەرشیÙ';
+$labels['archivefolder'] = 'ئەرشیÙ';
+$labels['settingstitle'] = 'ئەرشیÙ';
+$labels['unkownsender'] = 'نەناسراو';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivéieren';
+$labels['buttontitle'] = 'Dëse Message archivéieren';
+$labels['archived'] = 'Erfollegräich archivéiert';
+$labels['archivedreload'] = 'Erfollegräich archivéiert. Lued d\'Säit nei fir déi neisten Archiv-Dossieren ze gesinn.';
+$labels['archiveerror'] = 'Verschidde Messagë konnten net archivéiert ginn';
+$labels['archivefolder'] = 'Archiv';
+$labels['settingstitle'] = 'Archiv';
+$labels['archivetype'] = 'Archiv dividéieren duerch';
+$labels['archivetypeyear'] = 'Joer (z.B. Archiv/2013)';
+$labels['archivetypemonth'] = 'Mount (z.B. Archiv/2013/06)';
+$labels['archivetypefolder'] = 'Original-Dossier';
+$labels['archivetypesender'] = 'Sender-E-Mail';
+$labels['unkownsender'] = 'onbekannt';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archyvuoti';
+$labels['buttontitle'] = 'Perkelti šį laišką į archyvą';
+$labels['archived'] = 'Laiškas sėkmingai perkeltas į archyvą';
+$labels['archivedreload'] = 'Sėkmingai perkelta į archyvą. Iš naujo įkelkite puslapį, kad pamatytumėt pasikeitimus.';
+$labels['archiveerror'] = 'Į archyvą nepavyko perkelti keleto laiškų.';
+$labels['archivefolder'] = 'Archyvuoti';
+$labels['settingstitle'] = 'Archyvuoti';
+$labels['archivetype'] = 'Padalinti archyvÄ… pagal';
+$labels['archivetypeyear'] = 'Metai (pvz. Archyvas/2012)';
+$labels['archivetypemonth'] = 'MÄ—nesis (pvz. Archyvas/2012/06)';
+$labels['archivetypetbmonth'] = 'MÄ—nesis - Suderinama su Thunderbird (pvz., Archyvas/2012/2012-06)';
+$labels['archivetypefolder'] = 'Tikrasis aplankas';
+$labels['archivetypesender'] = 'Siuntėjo el. pašto adresas';
+$labels['unkownsender'] = 'nežinomas';
+$labels['readonarchive'] = 'Archyvuojant, žymėti laišką kaip skaitytą';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhīvs';
+$labels['buttontitle'] = 'Arhivēt šo vēstuli';
+$labels['archived'] = 'Vēstule veiksmīgi arhivēta';
+$labels['archivedreload'] = 'ArhÄ«vs veiksmÄ«gi izveidots. Lai redzÄ“tu jaunÄs arhÄ«va mapes, pÄrlÄdÄ“jiet lapu.';
+$labels['archiveerror'] = 'Dažas vēstules nebija iespējams arhivēt';
+$labels['archivefolder'] = 'Arhīvs';
+$labels['settingstitle'] = 'Arhīvs';
+$labels['archivetype'] = 'Sadalīt arhīvu pa';
+$labels['archivetypeyear'] = 'Gadiem (piem. Arhīvs/2012)';
+$labels['archivetypemonth'] = 'Mēnešiem (piem. Arhīvs/2012/06)';
+$labels['archivetypetbmonth'] = 'Mēnesis - Savietojams ar Thunderbird (piem. Arhīvs/2012/2012-06)';
+$labels['archivetypefolder'] = 'SÄkotnÄ“jÄ mape';
+$labels['archivetypesender'] = 'SÅ«tÄ«tÄja e-pasts';
+$labels['unkownsender'] = 'nezinÄms';
+$labels['readonarchive'] = 'ArhivÄ“jot, atzÄ«mÄ“t vÄ“stuli kÄ izlasÄ«tu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхива ';
+$labels['buttontitle'] = 'Ðрхивирај ја оваа порака ';
+$labels['archived'] = 'УÑпешно архивирана ';
+$labels['archivedreload'] = 'УÑпешно архивирано. Вчитај ја Ñтраната повторно за да ги видиш новите архивирани папки.';
+$labels['archiveerror'] = 'Ðекои пораки не може да бидат архивирани ';
+$labels['archivefolder'] = 'Ðрхива ';
+$labels['settingstitle'] = 'Ðрхива ';
+$labels['archivetype'] = 'Подели архива по ';
+$labels['archivetypeyear'] = 'Година (пр. Ðрхива/2012/06)';
+$labels['archivetypemonth'] = 'МеÑец (пр. Ðрхива/2012/06)';
+$labels['archivetypefolder'] = 'Оригинална папка ';
+$labels['archivetypesender'] = 'ЕлектронÑка пошта на иÑпраќач';
+$labels['unkownsender'] = 'Ðепознато ';
+$labels['readonarchive'] = 'Обележи ја пораката како прочитана на архивата ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ശേഖരം';
+$labels['buttontitle'] = 'à´ˆ മെസàµà´¸àµ‡à´œàµ ശേഖരികàµà´•àµà´•';
+$labels['archived'] = 'വിജയകരമായി ശേഖരിചàµà´šàµ';
+$labels['archivefolder'] = 'ശേഖരം';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхив';
+$labels['buttontitle'] = 'Ð­Ð½Ñ Ð·ÑƒÑ€Ð²Ð°Ñыг архивлах';
+$labels['archived'] = 'Ðмжилттай архивлагдлаа';
+$labels['archivedreload'] = 'Ðмжилттай архивлагдлаа. ХуудÑыг дахин дуудаж ÑˆÐ¸Ð½Ñ Ò¯Ò¯ÑÑÑн архив хавтÑыг харна уу.';
+$labels['archiveerror'] = 'Зарим Ð·ÑƒÑ€Ð²Ð°Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð»Ð°Ð³Ð´Ð°Ð¶ чадахгүй';
+$labels['archivefolder'] = 'Ðрхив';
+$labels['settingstitle'] = 'Ðрхив';
+$labels['archivetype'] = 'Ðрхивыг дараахаар Ñлга: ';
+$labels['archivetypeyear'] = 'Он (жиш: Ðрхив/2012)';
+$labels['archivetypemonth'] = 'Сар (жиш: Ðрхив/2012/06)';
+$labels['archivetypefolder'] = 'ЖинхÑÐ½Ñ Ñ…Ð°Ð²Ñ‚Ð°Ñ';
+$labels['archivetypesender'] = 'ИлгÑÑгчийн мÑйл хаÑг';
+$labels['unkownsender'] = 'мÑдÑгдÑхгүй';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'जतन केलेला';
+$labels['buttontitle'] = 'हा संदेश जतन करा';
+$labels['archived'] = 'यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ जतन केला';
+$labels['archivefolder'] = 'जतन केलेला';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkiv';
+$labels['buttontitle'] = 'Arkiver meldingen';
+$labels['archived'] = 'Arkivert';
+$labels['archivedreload'] = 'Arkivering vellykket. Last inn siden på nytt for å se de nye arkivmappene.';
+$labels['archiveerror'] = 'Noen meldinger kunne ikke arkiveres';
+$labels['archivefolder'] = 'Arkiv';
+$labels['settingstitle'] = 'Arkiv';
+$labels['archivetype'] = 'Del arkiv etter';
+$labels['archivetypeyear'] = 'Ã…r (f.eks. Arkiv/2012)';
+$labels['archivetypemonth'] = 'MÃ¥ned (f.eks. Arkiv/2012/06)';
+$labels['archivetypefolder'] = 'Opprinnelig mappe';
+$labels['archivetypesender'] = 'Avsender';
+$labels['unkownsender'] = 'ukjent';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archief';
+$labels['buttontitle'] = 'Archiveer dit bericht';
+$labels['archived'] = 'Succesvol gearchiveerd';
+$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te bekijken.';
+$labels['archiveerror'] = 'Sommige berichten kunnen niet gearchiveerd worden';
+$labels['archivefolder'] = 'Archief';
+$labels['settingstitle'] = 'Archiveren';
+$labels['archivetype'] = 'Archief opdelen in';
+$labels['archivetypeyear'] = 'Jaar (bijv. Archief/2012)';
+$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)';
+$labels['archivetypefolder'] = 'Originele map';
+$labels['archivetypesender'] = 'Afzender e-mail';
+$labels['unkownsender'] = 'onbekend';
+$labels['readonarchive'] = 'Markeer bericht al gelezen op archiveren';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkiver';
+$labels['buttontitle'] = 'Arkiver meldinga';
+$labels['archived'] = 'Arkivert';
+$labels['archivedreload'] = 'Arkivering vellukka. Last inn sida på nytt for å sjå dei nye arkivmappene.';
+$labels['archiveerror'] = 'Nokre meldingar kunne ikkje arkiverast';
+$labels['archivefolder'] = 'Arkiver';
+$labels['settingstitle'] = 'Arkiv';
+$labels['archivetype'] = 'Del arkiv etter';
+$labels['archivetypeyear'] = 'Ã…r (f.eks. Arkiv/2012)';
+$labels['archivetypemonth'] = 'MÃ¥nad (f.eks. Arkiv/2012/06)';
+$labels['archivetypefolder'] = 'Opprinneleg mappe';
+$labels['archivetypesender'] = 'Avsendar';
+$labels['unkownsender'] = 'ukjent';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archiwum';
+$labels['buttontitle'] = 'PrzenieÅ› do archiwum';
+$labels['archived'] = 'Pomyślnie zarchiwizowano';
+$labels['archivedreload'] = 'Pomyślnie zarchiwizowano. Odśwież stronę aby zobaczyć nowe foldery.';
+$labels['archiveerror'] = 'Nie można zarchiwizować niektórych wiadomości';
+$labels['archivefolder'] = 'Archiwum';
+$labels['settingstitle'] = 'Archiwum';
+$labels['archivetype'] = 'Podziel archiwum wg';
+$labels['archivetypeyear'] = 'Roku (np. Archiwum/2012)';
+$labels['archivetypemonth'] = 'MiesiÄ…ca (np. Archiwum/2012/06)';
+$labels['archivetypetbmonth'] = 'MiesiÄ…ca - Kompatybilnie z Thunderbird (np. Archive/2012/2012-06)';
+$labels['archivetypefolder'] = 'Oryginalny folder';
+$labels['archivetypesender'] = 'E-mail nadawcy';
+$labels['unkownsender'] = 'nieznany';
+$labels['readonarchive'] = 'Podczas archiwizowania oznacz wiadomość jako przeczytaną';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arquivo';
+$labels['buttontitle'] = 'Arquivar esta mensagem';
+$labels['archived'] = 'Arquivada com sucesso';
+$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
+$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
+$labels['archivefolder'] = 'Arquivo';
+$labels['settingstitle'] = 'Arquivo';
+$labels['archivetype'] = 'Dividir arquivo por';
+$labels['archivetypeyear'] = 'Ano (isto é, Arquivo/2012)';
+$labels['archivetypemonth'] = 'Mês (isto é, Arquivo/2012/06)';
+$labels['archivetypetbmonth'] = 'Mês - Compatível com o Thunderbird (exemplo Archive/2012/2012-06)';
+$labels['archivetypefolder'] = 'Pasta original';
+$labels['archivetypesender'] = 'E-mail do remetente';
+$labels['unkownsender'] = 'desconhecido';
+$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arquivo';
+$labels['buttontitle'] = 'Arquivar esta mensagem';
+$labels['archived'] = 'Arquivada com sucesso';
+$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
+$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
+$labels['archivefolder'] = 'Arquivo';
+$labels['settingstitle'] = 'Arquivo';
+$labels['archivetype'] = 'Dividir arquivo por';
+$labels['archivetypeyear'] = 'Ano (ex. Arquivo/2012)';
+$labels['archivetypemonth'] = 'Mês (ex. Arquivo/2012/06)';
+$labels['archivetypetbmonth'] = 'Mês - Compatível com Thunderbird (ex. Arquivo/2012/2012-06)';
+$labels['archivetypefolder'] = 'Pasta original';
+$labels['archivetypesender'] = 'E-mail do remetente';
+$labels['unkownsender'] = 'desconhecido';
+$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhivă';
+$labels['buttontitle'] = 'Arhivează mesajul.';
+$labels['archived'] = 'Arhivare reuşită.';
+$labels['archivedreload'] = 'Arhivat cu succes. Reîncărcați pagina pentru a vedea noul dosar de arhivare.';
+$labels['archiveerror'] = 'Unele mesaje nu au putut fi arhivate';
+$labels['archivefolder'] = 'Arhivă';
+$labels['settingstitle'] = 'Arhivă';
+$labels['archivetype'] = 'ÃŽmparte arhiva pe';
+$labels['archivetypeyear'] = 'Ani (ex. Arhiva/2013)';
+$labels['archivetypemonth'] = 'Luni (ex. Arhiva/2013/06)';
+$labels['archivetypetbmonth'] = 'Luni - Compatibil Thunderbird (ex. Arhivă/2012/2012-06)';
+$labels['archivetypefolder'] = 'Dosar original';
+$labels['archivetypesender'] = 'E-mail expeditor';
+$labels['unkownsender'] = 'necunoscut';
+$labels['readonarchive'] = 'Marchează mesajul ca citit în arhivă';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхив';
+$labels['buttontitle'] = 'ПеремеÑтить выбранное в архив';
+$labels['archived'] = 'ПеренеÑено в Ðрхив';
+$labels['archivedreload'] = 'УÑпешно заархивировано. Обновите Ñтраницу, чтобы увидеть новые папки архива.';
+$labels['archiveerror'] = 'Ðекоторые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ могут быть заархивированы';
+$labels['archivefolder'] = 'Ðрхив';
+$labels['settingstitle'] = 'Ðрхив';
+$labels['archivetype'] = 'Разделить архив по';
+$labels['archivetypeyear'] = 'Год (например, Ðрхив/2012)';
+$labels['archivetypemonth'] = 'МеÑÑц (например, Ðрхив/2012/06)';
+$labels['archivetypetbmonth'] = 'МеÑÑц - ÑовмеÑтимо Ñ Thunderbird (например, Ðрхив/2012/2012-06)';
+$labels['archivetypefolder'] = 'ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°';
+$labels['archivetypesender'] = 'ÐÐ´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ';
+$labels['unkownsender'] = 'неизвеÑтно';
+$labels['readonarchive'] = 'Помечать как прочитанное при архивировании';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/si_LK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'සංරක්â€à·‚ණය';
+$labels['buttontitle'] = 'මෙම පණිවිඩය සංරක්â€à·‚ණය කරන්න';
+$labels['archived'] = 'සංරක්â€à·‚ණය à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’';
+$labels['archivefolder'] = 'සංරක්â€à·‚ණය';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Archivovať';
+$labels['buttontitle'] = 'Archivovať túto správu';
+$labels['archived'] = 'Úspešne uložené do archívu';
+$labels['archivedreload'] = 'Archivovanie bolo úspeÅ¡ne dokonÄené. Ak si chcete prezrieÅ¥ nové archívne prieÄinky, obnovte stránku.';
+$labels['archiveerror'] = 'Niektoré správy nebolo možné archivovať';
+$labels['archivefolder'] = 'Archivovať';
+$labels['settingstitle'] = 'Archív';
+$labels['archivetype'] = 'Rozdeliť archív po';
+$labels['archivetypeyear'] = 'rokoch (napríklad Archív/2012)';
+$labels['archivetypemonth'] = 'mesiacoch (napríklad Archív/2012/06)';
+$labels['archivetypetbmonth'] = 'mesiacoch - kompatibilne s Thunderbird (napríklad Archív /2012/2012-06)';
+$labels['archivetypefolder'] = 'Pôvodný prieÄinok';
+$labels['archivetypesender'] = 'E-mailová adresa odosielateľa';
+$labels['unkownsender'] = 'neznámy';
+$labels['readonarchive'] = 'Pri archivovaní oznaÄiÅ¥ správu ako preÄítanú';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arhiv';
+$labels['buttontitle'] = 'Arhiviraj to sporoÄilo';
+$labels['archived'] = 'SporoÄilo je bilo uspeÅ¡no arhivirano';
+$labels['archivedreload'] = 'Uspešno  shranjeno v arhiv. Za pregled map v Arhivu ponovno naložite stran.';
+$labels['archiveerror'] = 'Nekaterih sporoÄil ni bilo mogoÄe arhivirati';
+$labels['archivefolder'] = 'Arhiv';
+$labels['settingstitle'] = 'Arhiv';
+$labels['archivetype'] = 'Razdeli arhiv glede na';
+$labels['archivetypeyear'] = 'Leto (npr. Arhiv/2012)';
+$labels['archivetypemonth'] = 'Mesec (npr. Arhiv/2012/06)';
+$labels['archivetypefolder'] = 'Izvorna mapa';
+$labels['archivetypesender'] = 'Naslov pošiljatelja';
+$labels['unkownsender'] = 'neznan';
+$labels['readonarchive'] = 'Ob arhiviranju oznaÄi sporoÄilo kot prebrano';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkivoje';
+$labels['buttontitle'] = 'Arkivoje këtë mesazh';
+$labels['archived'] = 'U arkivua me sukses';
+$labels['archivedreload'] = 'U arkivua me sukses. Ringarkoni faqen që të shihni dosjet e reja arkiv.';
+$labels['archiveerror'] = 'Ca nga mesazhet s’u arkivuan dot';
+$labels['archivefolder'] = 'Arkivoje';
+$labels['settingstitle'] = 'Arkivoje';
+$labels['archivetype'] = 'Ndaje arkivin sipas';
+$labels['archivetypeyear'] = 'Vit (p.sh. Arkiv/2012)';
+$labels['archivetypemonth'] = 'Muaj (p.sh. Arkiv/2012/06)';
+$labels['archivetypefolder'] = 'Dosje origjinale';
+$labels['archivetypesender'] = 'Email dërguesi';
+$labels['unkownsender'] = 'e panjohur';
+$labels['readonarchive'] = 'I vini shenjë si të lexuar mesazhit në arkiv';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхивирај';
+$labels['buttontitle'] = 'Ðрхивирај ову поруку';
+$labels['archived'] = 'УÑпешно архивирано';
+$labels['archivedreload'] = 'УÑпешно архивирано. Поново учитајте Ñтрану да видите нове архивиране фаÑцикле.';
+$labels['archiveerror'] = 'Ðеке поруке Ñе ниÑу могле архивирати';
+$labels['archivefolder'] = 'Ðрхива';
+$labels['settingstitle'] = 'Ðрхивирање';
+$labels['archivetype'] = 'РазврÑтај архиве по';
+$labels['archivetypeyear'] = 'години (нпр. Ðрхива/2015)';
+$labels['archivetypemonth'] = 'меÑецу (нпр. Ðрхива/2015/03)';
+$labels['archivetypefolder'] = 'изворној фаÑцикли';
+$labels['archivetypesender'] = 'адреÑи пошиљаоца';
+$labels['unkownsender'] = 'непознато';
+$labels['readonarchive'] = 'Поруку означи као прочитану при архивирању';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arkivera';
+$labels['buttontitle'] = 'Arkivera meddelande';
+$labels['archived'] = 'Meddelandet är arkiverat';
+$labels['archivedreload'] = 'Meddelandet är arkiverat. Ladda om sidan för att se de nya arkivkatalogerna.';
+$labels['archiveerror'] = 'NÃ¥gra meddelanden kunde inte arkiveras';
+$labels['archivefolder'] = 'Arkiv';
+$labels['settingstitle'] = 'Arkiv';
+$labels['archivetype'] = 'Uppdelning av arkiv';
+$labels['archivetypeyear'] = 'Ã…r (ex. Arkiv/2012)';
+$labels['archivetypemonth'] = 'MÃ¥nad (ex. Arkiv/2012/06)';
+$labels['archivetypetbmonth'] = 'Månad - Anpassad för Thunderbird (ex. Arkiv/2012/2012-06)';
+$labels['archivetypefolder'] = 'Ursprunglig katalog';
+$labels['archivetypesender'] = 'Avsändaradress';
+$labels['unkownsender'] = 'Okänd';
+$labels['readonarchive'] = 'Märk meddelande som läst vid arkivering';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'ArÅŸivle';
+$labels['buttontitle'] = 'Bu iletiyi arÅŸivle';
+$labels['archived'] = 'ArÅŸivlendi.';
+$labels['archivedreload'] = 'Arşivlendi. Yeni arşiv klasörlerini görmek için sayfayı yenileyin.';
+$labels['archiveerror'] = 'Bazı iletiler arşivlenemedi';
+$labels['archivefolder'] = 'ArÅŸiv';
+$labels['settingstitle'] = 'ArÅŸiv';
+$labels['archivetype'] = 'Arşivleme şuna göre yapılsın';
+$labels['archivetypeyear'] = 'Yıl (Arşiv/2012)';
+$labels['archivetypemonth'] = 'Ay (ArÅŸiv/2012/06)';
+$labels['archivetypetbmonth'] = 'Ay - Thunderbird uyumlu (Arsiv2012/2012-06 gibi)';
+$labels['archivetypefolder'] = 'Özgün klasör';
+$labels['archivetypesender'] = 'Gönderici adresi';
+$labels['unkownsender'] = 'bilinmeyen';
+$labels['readonarchive'] = 'ArÅŸivdeki ileti okunmuÅŸ olarak iÅŸaretlensin';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/tzl.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['unkownsender'] = 'inschì';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Ðрхів';
+$labels['buttontitle'] = 'Ðрхівувати це повідомленнÑ';
+$labels['archived'] = 'ПеренеÑено в архів';
+$labels['archivedreload'] = 'УÑпішно заархівовано. Перезавантажте Ñторінку, щоб побачити нові теки з архівами.';
+$labels['archiveerror'] = 'ДеÑкі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð·Ð°Ð°Ñ€Ñ…Ñ–Ð²ÑƒÐ²Ð°Ñ‚Ð¸';
+$labels['archivefolder'] = 'Ðрхів';
+$labels['settingstitle'] = 'Ðрхів';
+$labels['archivetype'] = 'Розділити архів по';
+$labels['archivetypeyear'] = 'Рік (наприклад Ðрхів/2012)';
+$labels['archivetypemonth'] = 'МіÑÑць (наприклад Ðрхів/2012/06)';
+$labels['archivetypefolder'] = 'Оригінальна тека';
+$labels['archivetypesender'] = 'Відправник email';
+$labels['unkownsender'] = 'невідомо';
+$labels['readonarchive'] = 'Позначити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñк прочитане по архіву';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Arxiv';
+$labels['buttontitle'] = 'Bu xatni arxivlang';
+$labels['archived'] = 'Arxivlandi';
+$labels['archivedreload'] = 'Arxivlandi. Yangi arxiv papkalarini ko‘rish uchun sahifani qayta yuklang.';
+$labels['archiveerror'] = 'Ba‘zi xatlarni arxivlab bo‘lmaydi.';
+$labels['archivefolder'] = 'Arxiv';
+$labels['settingstitle'] = 'Arxiv';
+$labels['archivetype'] = 'Arxivni ... ga ko‘ra bo\'lish';
+$labels['archivetypeyear'] = 'Yil (masalan Arxiv/2012)';
+$labels['archivetypemonth'] = 'Oy (masalan Arxiv/2012/06)';
+$labels['archivetypetbmonth'] = 'Oy Thunderbirdga moslangan (masalan Arxiv/2012/2012-06)';
+$labels['archivetypefolder'] = 'Asl papka';
+$labels['archivetypesender'] = 'Jo‘natuvchi elektron manzili';
+$labels['unkownsender'] = 'noma’lum';
+$labels['readonarchive'] = 'Arxivda xatni o‘qilgan deb belgilang';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'Lưu trữ';
+$labels['buttontitle'] = 'Lưu lại bức thư này';
+$labels['archived'] = 'Lưu lại thành công';
+$labels['archivedreload'] = 'Äã lÆ°u thành công. Tải lại trang này để thấy các thÆ° mục lÆ°u trữ má»›i.';
+$labels['archiveerror'] = 'Một số thư không thể lưu lại được';
+$labels['archivefolder'] = 'Lưu trữ';
+$labels['settingstitle'] = 'Lưu trữ';
+$labels['archivetype'] = 'Chia bộ lưu trữ bởi';
+$labels['archivetypeyear'] = 'Năm (ví dụ: Lưu trữ/2012)';
+$labels['archivetypemonth'] = 'Tháng (ví dụ: Lưu trữ/2012/06)';
+$labels['archivetypefolder'] = 'Thư mục nguyên gốc';
+$labels['archivetypesender'] = 'Äịa chỉ thÆ° Ä‘iện tá»­ của ngÆ°á»i gá»­i';
+$labels['unkownsender'] = 'Không rõ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = '存档';
+$labels['buttontitle'] = '存档该信æ¯';
+$labels['archived'] = '存档æˆåŠŸ';
+$labels['archivedreload'] = '存档æˆåŠŸã€‚请刷新本页以查看新的存档文件夹。';
+$labels['archiveerror'] = '部分信æ¯æ— æ³•å­˜æ¡£';
+$labels['archivefolder'] = '存档';
+$labels['settingstitle'] = '存档';
+$labels['archivetype'] = '分类存档按';
+$labels['archivetypeyear'] = '年(例如 存档/2012)';
+$labels['archivetypemonth'] = '月(例如 存档/2012/06)';
+$labels['archivetypefolder'] = '原始文件夹';
+$labels['archivetypesender'] = 'å‘件人邮件';
+$labels['unkownsender'] = '未知';
+$labels['readonarchive'] = '在归档中标记信æ¯ä¸ºå·²è¯»';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/archive/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2016, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
+*/
+$labels['buttontext'] = 'å°å­˜';
+$labels['buttontitle'] = 'å°å­˜æ­¤ä¿¡ä»¶';
+$labels['archived'] = 'æˆåŠŸå°å­˜';
+$labels['archivedreload'] = 'å°å­˜å‹•ä½œå®Œæˆã€‚è¦é‡æ–°è¼‰å…¥é é¢ï¼Œæ‰èƒ½çœ‹åˆ°æ–°çš„å°å­˜è³‡æ–™å¤¾';
+$labels['archiveerror'] = '部分信件無法完æˆå°å­˜';
+$labels['archivefolder'] = 'å°å­˜';
+$labels['settingstitle'] = 'å°å­˜';
+$labels['archivetype'] = 'å°å­˜æª”案切割方å¼ï¼š';
+$labels['archivetypeyear'] = '年分 (例如: å°å­˜/2012)';
+$labels['archivetypemonth'] = '月分 (例如: å°å­˜/2012/06)';
+$labels['archivetypefolder'] = '原始資料夾';
+$labels['archivetypesender'] = '寄件者電å­ä¿¡ç®±';
+$labels['unkownsender'] = '未知';
+$labels['readonarchive'] = 'å°‡å°å­˜çš„郵件標示為已讀å–';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/skins/classic/archive.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,10 @@
+
+#messagetoolbar a.button.archive {
+	text-indent: -5000px;
+	background: url(archive_act.png) 0 0 no-repeat;
+}
+
+#mailboxlist li.mailbox.archive > a {
+	background-image: url(foldericon.png);
+	background-position: 5px 1px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/archive/skins/classic/archive.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#messagetoolbar a.button.archive{text-indent:-5000px;background:url(archive_act.png) 0 0 no-repeat}#mailboxlist li.mailbox.archive>a{background-image:url(foldericon.png);background-position:5px 1px}
\ No newline at end of file
Binary file plugins/archive/skins/classic/archive_act.png has changed
Binary file plugins/archive/skins/classic/archive_pas.png has changed
Binary file plugins/archive/skins/classic/foldericon.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/attachment_reminder.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,83 @@
+/**
+ * Attachment Reminder plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+function rcmail_get_compose_message()
+{
+  var msg;
+
+  if (window.tinyMCE && (ed = tinyMCE.get(rcmail.env.composebody))) {
+    msg = ed.getContent();
+    msg = msg.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gmi, '');
+  }
+  else {
+    msg = $('#' + rcmail.env.composebody).val();
+    msg = msg.replace(/^>.*$/gmi, '');
+  }
+
+  return msg;
+};
+
+function rcmail_check_message(msg)
+{
+  var i, rx, keywords = rcmail.get_label('keywords', 'attachment_reminder').split(",").concat([".doc", ".pdf"]);
+
+  keywords = $.map(keywords, function(n) { return RegExp.escape(n); });
+  rx = new RegExp('(' + keywords.join('|') + ')', 'i');
+
+  return msg.search(rx) != -1;
+};
+
+function rcmail_have_attachments()
+{
+  return rcmail.env.attachments && $('li', rcmail.gui_objects.attachmentlist).length;
+};
+
+function rcmail_attachment_reminder_dialog()
+{
+  var buttons = {};
+
+  buttons[rcmail.get_label('addattachment')] = function() {
+    $(this).remove();
+    if (window.UI && UI.show_uploadform) // Larry skin
+      UI.show_uploadform();
+    else if (window.rcmail_ui && rcmail_ui.show_popup) // classic skin
+      rcmail_ui.show_popup('uploadmenu', true);
+  };
+  buttons[rcmail.get_label('send')] = function(e) {
+    $(this).remove();
+    rcmail.env.attachment_reminder = true;
+    rcmail.command('send', '', e);
+  };
+
+  rcmail.env.attachment_reminder = false;
+  rcmail.show_popup_dialog(rcmail.get_label('attachment_reminder.forgotattachment'), '', buttons);
+};
+
+
+if (window.rcmail) {
+  rcmail.addEventListener('beforesend', function(evt) {
+    var msg = rcmail_get_compose_message(),
+      subject = $('#compose-subject').val();
+
+    if (!rcmail.env.attachment_reminder && !rcmail_have_attachments()
+      && (rcmail_check_message(msg) || rcmail_check_message(subject))
+    ) {
+      rcmail_attachment_reminder_dialog();
+      return false;
+    }
+  });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/attachment_reminder.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+/**
+ * Attachment Reminder plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+function rcmail_get_compose_message(){if(window.tinyMCE&&(ed=tinyMCE.get(rcmail.env.composebody))){var a=ed.getContent();a=a.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gmi,"")}else a=$("#"+rcmail.env.composebody).val(),a=a.replace(/^>.*$/gmi,"");return a}function rcmail_check_message(a){var b=rcmail.get_label("keywords","attachment_reminder").split(",").concat([".doc",".pdf"]);b=$.map(b,function(a){return RegExp.escape(a)});b=new RegExp("("+b.join("|")+")","i");return-1!=a.search(b)}
+function rcmail_have_attachments(){return rcmail.env.attachments&&$("li",rcmail.gui_objects.attachmentlist).length}
+function rcmail_attachment_reminder_dialog(){var a={};a[rcmail.get_label("addattachment")]=function(){$(this).remove();window.UI&&UI.show_uploadform?UI.show_uploadform():window.rcmail_ui&&rcmail_ui.show_popup&&rcmail_ui.show_popup("uploadmenu",!0)};a[rcmail.get_label("send")]=function(a){$(this).remove();rcmail.env.attachment_reminder=!0;rcmail.command("send","",a)};rcmail.env.attachment_reminder=!1;rcmail.show_popup_dialog(rcmail.get_label("attachment_reminder.forgotattachment"),"",a)}
+window.rcmail&&rcmail.addEventListener("beforesend",function(a){a=rcmail_get_compose_message();var b=$("#compose-subject").val();if(!rcmail.env.attachment_reminder&&!rcmail_have_attachments()&&(rcmail_check_message(a)||rcmail_check_message(b)))return rcmail_attachment_reminder_dialog(),!1});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/attachment_reminder.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Attachment Reminder
+ *
+ * A plugin that reminds a user to attach the files
+ *
+ * @author Thomas Yu - Sian, Liu
+ * @author Aleksander Machniak <machniak@kolabsys.com>
+ *
+ * Copyright (C) 2013 Thomas Yu - Sian, Liu
+ * Copyright (C) 2013, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ */
+
+class attachment_reminder extends rcube_plugin
+{
+    public $task = 'mail|settings';
+    public $noajax = true;
+
+
+    function init()
+    {
+        $rcmail = rcube::get_instance();
+
+        if ($rcmail->task == 'mail' && $rcmail->action == 'compose') {
+            if ($rcmail->config->get('attachment_reminder')) {
+                $this->include_script('attachment_reminder.js');
+                $this->add_texts('localization/', array('keywords', 'forgotattachment'));
+                $rcmail->output->add_label('addattachment', 'send');
+            }
+        }
+
+        if ($rcmail->task == 'settings') {
+            $dont_override = $rcmail->config->get('dont_override', array());
+
+            if (!in_array('attachment_reminder', $dont_override)) {
+                $this->add_hook('preferences_list', array($this, 'prefs_list'));
+                $this->add_hook('preferences_save', array($this, 'prefs_save'));
+            }
+        }
+    }
+
+    function prefs_list($args)
+    {
+        if ($args['section'] == 'compose') {
+            $this->add_texts('localization/');
+            $reminder = rcube::get_instance()->config->get('attachment_reminder');
+            $field_id = 'rcmfd_attachment_reminder';
+            $checkbox = new html_checkbox(array('name' => '_attachment_reminder', 'id' => $field_id, 'value' => 1));
+
+            $args['blocks']['main']['options']['attachment_reminder'] = array(
+                'title' => html::label($field_id, rcube::Q($this->gettext('reminderoption'))),
+                'content' => $checkbox->show($reminder ? 1 : 0),
+            );
+        }
+
+        return $args;
+    }
+
+    function prefs_save($args)
+    {
+        if ($args['section'] == 'compose') {
+            $dont_override = rcube::get_instance()->config->get('dont_override', array());
+            if (!in_array('attachment_reminder', $dont_override)) {
+                $args['prefs']['attachment_reminder'] = !empty($_POST['_attachment_reminder']);
+            }
+        }
+        return $args;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/attachment_reminder",
+    "type": "roundcube-plugin",
+    "description": "This Roundcube plugin reminds the user to attach a file if the composed message text indicates that there should be any.",
+    "license": "GPLv3+",
+    "version": "1.1",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        },
+        {
+            "name": "Thomas Yu - Sian, Liu",
+            "email": "",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "هل نسيت إرÙاق ملÙØŸ";
+$messages['reminderoption'] = "تذكير حول المرÙقات المنسية";
+$messages['keywords'] = "المرÙقات,الملÙ,ارÙاق,مرÙÙ‚,ارÙاق,مضمون,CV,صÙحة المغلÙ";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "¿Escaecisti axuntar un ficheru?";
+$messages['reminderoption'] = "Recordar alrodiu d'axuntos escaecíos";
+$messages['keywords'] = "axuntu,ficheru,axuntar,axuntáu,axuntando,axuntao,axuntada,CV,carta de presentación";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Faylı əlavə etməyi unutdunuz?";
+$messages['reminderoption'] = "Unudulmuş qoşmalardan xəbərdar et";
+$messages['keywords'] = "qoşmalar,fayl,qoşma,qoşulub,qoşulur,qapalı,CV,qoşma məktub";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "ЗабыліÑÑ Ð´Ð°Ð»ÑƒÑ‡Ñ‹Ñ†ÑŒ файл?";
+$messages['reminderoption'] = "Ðапамінаць пра Ð·Ð°Ð±Ñ‹Ñ‚Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñнні";
+$messages['keywords'] = "далучÑнне,файл,далучыць,далучаны,далучаецца,укладзены,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Забравихте ли да прикрепите файл към Ñъобщението?";
+$messages['reminderoption'] = "ÐапомнÑне за забравени прикачени файлове";
+$messages['keywords'] = "прикачен,прикрепен,прикачам,прикачвам,прикрепÑм,прикрепвам,файл,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Disonjet ho peus stagan er restr ?";
+$messages['reminderoption'] = "Adgalv war ar pezhiou stag disonjet";
+$messages['keywords'] = "pezh stag, restr, stagan, aman staget, stagit, ouzhpenan, CV, lizher youl";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Da li ste zaboravili da dodate ovu datoteku?";
+$messages['reminderoption'] = "Napomene o zaboravljenim prilozima";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,prilog,biografija,popratno pismo,prilogu,popratnom pismu,datoteka,fajl";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Us heu oblidat afegir un fitxer?";
+$messages['reminderoption'] = "Recordatori de fitxers adjunts oblidats";
+$messages['keywords'] = "adjunt,fitxer,adjuntar,adjuntat,adjuntant,CV,carta";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Nezapomněli jste připojit přílohu?";
+$messages['reminderoption'] = "Upozorňovat na zapomenuté přílohy";
+$messages['keywords'] = "příloha,přílohy,příloze,přílohu,přiloženém,připojeném,CV,životopis";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Atodiad ar goll?";
+$messages['forgotattachment'] = "Wedi anghofio atodi ffeil?";
+$messages['reminderoption'] = "Atgoffa am atodiadau ar goll";
+$messages['keywords'] = "atodiad,atodi,atodaf,atodwyd,atodir,amgaedig,dogfen,llythyr,ffeil,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Glemte du at vedhæfte en fil?";
+$messages['reminderoption'] = "Påmind om glemt vedhæftning af filer";
+$messages['keywords'] = "vedhæftet fil,fil,vedhæft,vedhæftet,vedhæfter,lukket,CV,følgebrev";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen eine Datei anzuhängen?";
+$messages['reminderoption'] = "Vor vergessenen Anhängen warnen";
+$messages['keywords'] = "anbei,anhang,angehängt,angefügt,beigefügt,beliegend";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Fehlender Anhang?";
+$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen, eine Datei anzuhängen?";
+$messages['reminderoption'] = "An vergessene Anhänge erinnern";
+$messages['keywords'] = "anbei,im anhang,siehe anhang,angehängt,angefügt,beigefügt,beliegend";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Μήπως ξεχάσετε να επισυνάψετε αÏχείο; ";
+$messages['reminderoption'] = "ΥπενθÏμιση για συνημμένα";
+$messages['keywords'] = "συνημμένο, αÏχείο, επισÏναψη, συνημμένο, επισυνάπτοντας, εσωκλείοντας, βιογÏαφικό σημείωμα, συνοδευτική επιστολή";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Did you forget to attach a file?";
+$messages['reminderoption'] = "Remind about forgotten attachments";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Did you forget to attach a file?";
+$messages['reminderoption'] = "Remind about forgotten attachments";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+
+$messages = array();
+$messages['forgotattachment'] = "Did you forget to attach a file?";
+$messages['reminderoption'] = "Remind about forgotten attachments";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "¿Has olvidado adjuntar un archivo?";
+$messages['reminderoption'] = "Recordar si olvido adjuntar archivos";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Has olvidado adjuntar un archivo?";
+$messages['reminderoption'] = "Recordar sobre archivos adjuntos olvidados";
+$messages['keywords'] = "adjunto,archivo,adjuntar,adjuntado,adjuntando,";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "¿Olvidó adjuntar un fichero al mensaje?";
+$messages['reminderoption'] = "Recordatorio sobre adjuntos olvidados";
+$messages['keywords'] = "adjunto, archivo, adjuntar, unido, adjuntando, cerrado, CV, carta de presentación";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Unustasid faili lisada?";
+$messages['reminderoption'] = "Tuleta mulle meelde kui unustasin manuse lisada";
+$messages['keywords'] = "manus,manuses,lisatud,lisasin,fail,file,failis,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Eranskina falta da?";
+$messages['forgotattachment'] = "Ahaztu zaizu fitxategia eranstea?";
+$messages['reminderoption'] = "Ohartarazi ahaztutako erankinez";
+$messages['keywords'] = "eranskin,fitxategia,erantzi,erantzita,eransten,atxikita";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "آیا Ùراموش کردید Ú©Ù‡ Ùایل را الصاق کرده اید؟";
+$messages['reminderoption'] = "یاد آوری درمورد ضمایم Ùراموش شده";
+$messages['keywords'] = "ضمیمه،Ùایل،ضمیمه کردن،ضمیمه شده،در حال ضمیمه کردن، الصاق شده،CVØŒ عنوان نامه";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "آیا شما پیوست کردن پرونده را Ùراموش کرده‌اید؟";
+$messages['reminderoption'] = "یادآوری Ùراموشی پیوست‌ها";
+$messages['keywords'] = "پیوست،پرونده،پیوست کردن، پیوست شده، CV";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Unohditko liittää tiedoston?";
+$messages['reminderoption'] = "Muistuta mahdollisesti unohtuneista liitteistä";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,liite,tiedosto,liitteenä,liitetiedosto,ansioluettelo";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Gloymdi tú at viðhefta ein fíl?";
+$messages['reminderoption'] = "Ãminn um gloymdar viðheftingar";
+$messages['keywords'] = "viðhefting,fílur,heft,viðheft,heftir,lagt inní,CV,fylgi skriv";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Pièce jointe manquante ?";
+$messages['forgotattachment'] = "Avez-vous oublié de joindre un fichier ?";
+$messages['reminderoption'] = "Rappel sur les pièces jointes oubliées";
+$messages['keywords'] = "pièce jointe,fichier,joindre,joins,joint,attaché,inclus,ci-inclus,CV, lettre d'accompagnement";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Hawwo jo ferjitten in bestân ta te heakjen?";
+$messages['reminderoption'] = "Herinnerje oer ferjitten taheaksels";
+$messages['keywords'] = "bestân,triem,hechtsje,ferbûn,taheak,ynsletten,CV,brief";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "An bhfuil ceangaltán in easnamh?";
+$messages['forgotattachment'] = "Ar dhearmad tú comhad a cheangal leis?";
+$messages['reminderoption'] = "Cuimhneachán faoi cheangaltán dearmadta";
+$messages['keywords'] = "ceangaltán,comhad,ceangail,ceangailte,ag ceangail,iniata,CV,litir chumhdaigh";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Esqueceches adxuntar un ficheiro?";
+$messages['reminderoption'] = "Lembrete de adxuntos esquecidos";
+$messages['keywords'] = "anexo, arquivo, engadir, anexo, anexando, pechado, CV, carta de presentación";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "×”×× ×©×›×—×ª לצרף קובץ?";
+$messages['reminderoption'] = "להזכיר לצרף נספח";
+$messages['keywords'] = "נספח,קובץ,לצרף,מצורף,מצרף,מצרפת,רצ\"ב,קו\"×—,קורות ×—×™×™×";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Jeste li zaboravili dodati privitak?";
+$messages['reminderoption'] = "Podsjeti na zaboravljen privitak";
+$messages['keywords'] = "privitak,datoteka,dodati,dodano,dodajem,u privitku,CV,motivacijsko pismo";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Hiányzó csatolmány?";
+$messages['forgotattachment'] = "Nem felejtetted el a csatolandó file-t?";
+$messages['reminderoption'] = "Emlékeztessen a csatolandó csatolmányra";
+$messages['keywords'] = "csatolmány, file, csatolás, csatolt, csatolni, közrezárt, CV, kisérőlevél";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Attachamento mancante?";
+$messages['forgotattachment'] = "Ha vos oblidate de attachar un file?";
+$messages['reminderoption'] = "Rememorar de attachamentos oblidate";
+$messages['keywords'] = "attachamento,file,attachar,attachate,attachante,annexo,annexe,annexate,CV,curriculo de vita";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Apakah anda lupa melampirkan sebuah file?";
+$messages['reminderoption'] = "Ingatkan tentang lampiran yang terlupakan";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Vantar viðhengi?";
+$messages['forgotattachment'] = "Gleymdirðu að hengja við skrá?";
+$messages['reminderoption'] = "Minna á viðhengi sem gleymast";
+$messages['keywords'] = "viðhengi,skrá,hengja við,innfellt,CV,meðfylgjandi,ferilskrá,mynd";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Sembra che tu abbia dimenticato di allegare un file!\nPremere Annulla per inviare lo stesso.\nOK per tornare al messaggio senza inviare.";
+$messages['reminderoption'] = "Ricorda per gli allegati dimenticati";
+$messages['keywords'] = "allegato,allegati,allegata,allegate,allega,allego,alleghi,attaccato,file,attachment,attach";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "ファイルã®æ·»ä»˜ã‚’忘れã¦ã„ã¾ã›ã‚“ã‹?";
+$messages['reminderoption'] = "添付ファイルã®ä»˜ã‘忘れを確èª";
+$messages['keywords'] = "添付,ファイル,添付ファイル,åŒå°,æ·»ãˆçŠ¶";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/kab.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "TettuḠad t-tessedduḠafaylu?";
+$messages['reminderoption'] = "Smekti af imeddayen yettwattun";
+$messages['keywords'] = "amedday,afaylu,seddu,yeddan,aseddu,yedda,CV,tabratt";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "ážáž¾áž¢áŸ’នក​ភ្លáŸáž…​ភ្ជាប់​ឯកសារ​ឬ?";
+$messages['reminderoption'] = "រំលឹង​អំពី​ឯកសារ​ភ្ជាប់​ដែល​បាន​ភ្លáŸáž…";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/kn_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "ನೀವೠಫೈಲೠಅಟà³à²¯à²¾à²šà³ ಮಾಡಲೠಮರೆತಿರà³à²µà²¿à²°à²¾?";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "파ì¼ì„ 첨부하는 ê²ƒì„ ìžŠìœ¼ì…¨ìŠµë‹ˆê¹Œ?";
+$messages['reminderoption'] = "ìžŠì—ˆë˜ ì²¨ë¶€íŒŒì¼ ì¶”ê°€ì— ëŒ€í•´ 알림";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Te ji bîr kir da pelekê pêve bikî?";
+$messages['reminderoption'] = "Pêvekên jibîrkirî bi bîr bixe";
+$messages['keywords'] = "pêvek, pel, pêve bike, pêvekirî, pêve dike, rapêçandî, CV, tîpa bergê";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "ئایا لەبیرت کرد پەڕگەیەک هاوپێچ بکەی؟";
+$messages['reminderoption'] = "بیرهێنانەوە دەربارەی هاوپێچە لەبیرکراوەکان";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Hues du vergiess e Fichier drunzehänken?";
+$messages['reminderoption'] = "U vergiessen Unhäng erënneren";
+$messages['keywords'] = "Attachment,Fichier,Unhank,Unhang,Unhäng,ugehaangen,unhänken,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,fichier joint";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Ar nepamiršote prisegti priedo?";
+$messages['reminderoption'] = "Priminti apie neprisegtus priedus";
+$messages['keywords'] = "priedas, byla, prisegti, prisegta, prisegama, uždaras, CV, laiškas";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Trūkst pielikums?";
+$messages['forgotattachment'] = "Vai JÅ«s nepiemirsÄt pievienot failu?";
+$messages['reminderoption'] = "AtgÄdinÄt par nepievienotajiem pielikumiem";
+$messages['keywords'] = "pielikums,fails,pievienot,pielikt,pievienots,pielikts,ievietot,ievietots,CV";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Дали заборави да прикачиш датотека ?";
+$messages['reminderoption'] = "ПотÑети за заборавени прикачувања ";
+$messages['keywords'] = "Додаток, датотека, прикачени, прикалува, затворен, ЦВ, мотивационо пиÑмо";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "താങàµà´•àµ¾ ഒരൠഫയൽ ചേർകàµà´•à´¾àµ» മറനàµà´¨àµà´ªàµ‹à´¯à´¿";
+$messages['reminderoption'] = "ചേർകàµà´•à´¾àµ» മറനàµà´¨àµà´ªàµ‹à´¯ ഫയലàµà´•à´³àµ† പറàµà´±à´¿ ഓർമàµà´®à´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´•";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Та файл хавÑаргахаа мартÑан уу?";
+$messages['reminderoption'] = "МартÑан хавÑралтуудыг Ñануулах";
+$messages['keywords'] = "хавÑралт,файл,хавÑралт,хавÑаргагдÑан,хавÑаргаж байна,хаÑваргаÑан,анкет,танилцуулга";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Glemte du å legge ved en fil?";
+$messages['reminderoption'] = "Gi meg en påminnelse om glemte vedlegg";
+$messages['keywords'] = "vedlegg, fil, legg ved, lagt ved, legger ved, lukket, CV, følgebrev";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Bent u vergeten het bestand bij te voegen?";
+$messages['reminderoption'] = "Herinner mij aan vergeten bijlagen";
+$messages['keywords'] = "attachment,bestand,bijgaand,bijgaande,brief,bijgevoegd,bijgesloten,CV,document,bijgesloten";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Brakujący załącznik?";
+$messages['forgotattachment'] = "Czy nie zapomniałeś załączyć pliku?";
+$messages['reminderoption'] = "Włącz przypominanie o brakującym załączniku";
+$messages['keywords'] = "załącznik,plik,załącz,CV";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Faltando anexo?";
+$messages['forgotattachment'] = "Você esqueceu-se de anexar um arquivo?";
+$messages['reminderoption'] = "Alertar sobre o possível esquecimento de anexos";
+$messages['keywords'] = "anexo,arquivo,anexar,anexado,anexando,incluso,CV,currículo";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Falta anexo?";
+$messages['forgotattachment'] = "Você esqueceu-se de anexar um ficheiro?";
+$messages['reminderoption'] = "Lembrar sobre anexos esquecidos";
+$messages['keywords'] = "anexo,ficheiro,anexar,anexado,a anexar,em anexo,currículo,carta de apresentação";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Lipsă atașament?";
+$messages['forgotattachment'] = "Ați uitat să atașati ?";
+$messages['reminderoption'] = "Adu-mi aminte de atașamente";
+$messages['keywords'] = "atașament,atasament,atas,atasat,ataș,attach,fisier,fișier,attach,atach,attache";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Забыли вложение?";
+$messages['forgotattachment'] = "Вы не забыли прикрепить файл?";
+$messages['reminderoption'] = "Ðапоминать о забытых вложениÑÑ…";
+$messages['keywords'] = "вложение,файл, вложенный, прикрепленный,резюме,документ";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Chýbajúca príloha?";
+$messages['forgotattachment'] = "Nezabudli ste pridať prílohu?";
+$messages['reminderoption'] = "Pripomenúť zabudnuté prílohy";
+$messages['keywords'] = "príloha,súbor,pripojiť,priložená,priložený,priložené,v prílohe,životopis,sprievodný list";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Ste pozabili pripeti datoteko?";
+$messages['reminderoption'] = "Opozorilo za dodajanje priponk";
+$messages['keywords'] = "priponka,datoteka,pripeti,pripeta,pripenjati,priložen,priložiti,CV,spremno pismo";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Mos harruat të bashkëngjitni një kartelë?";
+$messages['reminderoption'] = "Kujtoji për bashkëngjitje të harruara";
+$messages['keywords'] = "bashkëngjitje,skedar,kartelë,bashkëngjite,bashkëngjitur,përfshirë,CV,letër shoqëruese";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Да ли Ñте заборавили да приложите фајл?";
+$messages['reminderoption'] = "ПодÑетник на заборављене прилоге";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,прилог,фајл,приложи,приложен,прилажем,пропратно пиÑмо";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Saknas bilaga?";
+$messages['forgotattachment'] = "Glömde du att bifoga en fil?";
+$messages['reminderoption'] = "Påminn om glömda bilagor";
+$messages['keywords'] = "bilaga,fil,bifoga,bifogad,bifogar,infogad,CV,personligt brev";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Dosya eklemeyi unuttunuz mu?";
+$messages['forgotattachment'] = "Dosya eklemeyi mi unuttunuz?";
+$messages['reminderoption'] = "Dosya ekleme unutulduysa hatırlatılsın";
+$messages['keywords'] = "ekleme,dosya,ek,eklenildi,ekleniliyor,ekteki,CV,mektup";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Ви забули прикріпити файл?";
+$messages['reminderoption'] = "Ðагадати про забуте вкладеннÑ";
+$messages['keywords'] = "вкладеннÑ,файл,прикріпити,прикріплений,прикріплюю,вкладено,CV,Ñупровідний лиÑÑ‚";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['missingattachment'] = "Ilovani yo‘qotdingizmi?";
+$messages['forgotattachment'] = "Ilova faylini unutdingizmi?";
+$messages['reminderoption'] = "Unutilgan ilovalar haqida eslatish";
+$messages['keywords'] = "ilova,fayl,ilovalash,ilova qilindi,ilova qilinmoqda,yopilgan,CV,xatjild";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "Bạn đã quên không đính kèm tệp tin?";
+$messages['reminderoption'] = "Nhắc vỠtệp tin đính kèm bị quên";
+$messages['keywords'] = "tệp đính kèm,tệp tin,đính kèm,đã đính kèm,đang đính kèm tập tin,đính kèm,CV,thư mở đầu";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "您似乎忘记添加附件了,是å¦ç»§ç»­å‘é€ï¼Ÿ";
+$messages['reminderoption'] = "忘记添加附件æ醒";
+$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/attachment_reminder/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/attachment_reminder/localization/<lang>.inc                   |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Archive plugin             |
+ | Copyright (C) 2013, The Roundcube Dev Team                            |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
+*/
+$messages['forgotattachment'] = "似乎忘記加入附件,確定è¦å¯„出嗎?";
+$messages['reminderoption'] = "æ醒加入附件";
+$messages['keywords'] = "附件,檔案,附加,附檔,附上,履歷,å°é¢";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/autologon/autologon.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Sample plugin to try out some hooks.
+ * This performs an automatic login if accessed from localhost
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ */
+class autologon extends rcube_plugin
+{
+  public $task = 'login';
+
+  function init()
+  {
+    $this->add_hook('startup', array($this, 'startup'));
+    $this->add_hook('authenticate', array($this, 'authenticate'));
+  }
+
+  function startup($args)
+  {
+    // change action to login
+    if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost())
+      $args['action'] = 'login';
+
+    return $args;
+  }
+
+  function authenticate($args)
+  {
+    if (!empty($_GET['_autologin']) && $this->is_localhost()) {
+      $args['user'] = 'me';
+      $args['pass'] = '******';
+      $args['host'] = 'localhost';
+      $args['cookiecheck'] = false;
+      $args['valid'] = true;
+    }
+
+    return $args;
+  }
+
+  function is_localhost()
+  {
+    return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1';
+  }
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/autologon/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/autologon",
+    "type": "roundcube-plugin",
+    "description": "Sample plugin to try out some hooks",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/CHANGELOG	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,130 @@
+Roundcube Webmail ContextMenu
+=============================
+
+Version 2.3 (2017-06-14, rc-1.3)
+=================================================
+ * Remove special handling for group-create/rename (requires roundcube rev ec98aa5)
+ * "Flattened" the larry theme: fresher look by removing shadows and gradients
+ * Fix handling of folder names containing special chars
+
+Version 2.2 (2017-01-02, rc-1.3)
+=================================================
+ * Use new 'Mark all as read' function from core (requires 1.3)
+ * Enable compact+purge actions on all folders
+
+Version 2.1.2 (2015-04-18, rc-1.1)
+=================================================
+ * Fix #67 address book copy/move action not updated
+
+Version 2.1.1 (2015-03-18, rc-1.1)
+=================================================
+ * Update submenu detection after 619891c
+
+Version 2.1 (2015-01-06, rc-1.1)
+=================================================
+ * Add specific menu for adding contact to group
+ * Update after dev-accessibility merged to RC master
+ * Support multi-folder search results (66536974fe)
+ * Fix possible CSRF in readfolder action
+ * Add option to move/copy contacts in address book
+
+Version 2.0 (2014-04-30, rc-1.0)
+=================================================
+ * Remove IE6 support
+ * Remove rcm_contextmenu_register_command, use commands from toolbars
+ * Remove specially created manus, generate context menu dynamically from UI
+ * Much better menu generation, improve loading times
+
+Version 1.13 (2014-02-01, rc-1.0)
+=================================================
+ * Add menu to contact list on compose screen (requires b3c034c)
+
+Version 1.12 (2013-12-01, rc-1.0)
+=================================================
+ * Update depreciated moveto command to move
+ * Update config file var names to match core
+
+Version 1.11 (2013-05-19, rc-1.0)
+=================================================
+ * Add export option to address book menu
+ * Add contextmenu_show JS event
+ **** code branching/tagging no longer sync'd to roundcube versions ****
+
+Version 1.10 (2013-03-03, rc-0.9)
+=================================================
+ * Add remove selected contacts from group option
+ * Rename default skin to classic (c40419bdfe)
+ * rcube_ui > rcube_utils (r6091)
+ * Update for Roundcube framework
+
+Version 1.9 (2012-04-14, rc-0.8)
+=================================================
+ * Update after r5781
+ * Add inital support for Larry
+
+Version 1.8 (2011-05-14, rc-0.8)
+=================================================
+ * Fix readfolder method after r5557
+ * Use new labels for group delete/rename (r4864)
+ * Add forward-attachment function (r4761)
+
+Version 1.7 (2011-10-01, rc-0.5)
+=================================================
+ * Add reply-list function (r4032)
+
+Version 1.6 (2010-08-01, rc-0.4)
+=================================================
+ * Fix error in deleteing after moving using context menu
+ * Update hooks (r3840)
+
+Version 1.5 (2010-05-29, rc-0.4)
+=================================================
+ * Hide menu after click in iframes
+ * Update contact copying after r3694
+ * Update hooks after r3685
+
+Version 1.4 (2010-03-30, rc-0.4)
+=================================================
+ * Update after r3614
+ * Update jquery.ContextMenu to 1.01
+ * Use new imap->search_once function (r3446)
+ * Add initial support for contact groups in address book
+ * Fix mark all as read function
+ * Update to r3393
+ * Fix folder count with nested folders
+
+Version 1.3 (2010-02-07, rc-0.4)
+=================================================
+ * Update after r3258
+ * CSS update after r3141
+ * Use local_skin_path() (rev 3076)
+ * Added address book context menu (requires r3023)
+
+Version 1.2 (2009-09-18, rc-0.3)
+=================================================
+ * Fix folder menu for UTF8 folders
+ * Use rcmail_send_unread_count (r2960)
+ * Add 'move to' to message list menu
+
+Version 1.1 (2009-09-11, rc-0.3)
+=================================================
+ * Added folder list context menu
+ * Moved menu generation from JS to PHP
+ * Added support for sub menus
+ * Added new "edit" action
+ * Update insertrow event listener following changes in core
+ * Add fallback to default skin
+ * Better init restrictions
+ * Correct style after r2541
+ * Only init when on mailbox screen (while _uid is empty and user is logged in)
+ * Added hook for other plugins to add items to the menu (see README)
+ * Added support for new actions: show source, save .eml, open in new window
+ * Added support for plugin template system
+ * Added highlighting of selected row
+ * Fixed menu in IE
+ * Fixed delete in Trash folder
+ * Added ability to mark or delete multiple messages
+ * Fixed delete function
+ * Fixed working with "Select" functions
+ * Added event hooks when message list is updated
+ * Created plugin
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/MANUAL.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,248 @@
+# Contextmenu manual
+
+This file provides information for plugin and skin developers. The Contextmenu plugin can be extended by other plugins; new menus can be created and existing menus manipulated. For basic installation information please see the [README](./README.md).
+
+- [Creating a new Contextmenu](#creating-a-new-contextmenu)
+- [Working with an existing Contextmenu](#working-with-an-existing-contextmenu)
+- [Events](#events)
+- [Contextmenu and skins](#contextmenu-and-skins)
+
+## Creating a new Contextmenu
+
+By default Contextmenu is added to the `mail` and `addressbook` tasks in Roundcube. It can be added to other tasks by calling the PHP function `include_plugin()` like this `$this->include_plugin('contextmenu');` from inside your plugin. This function checks if the Contextmenu plugin is available and loads it if possible.
+
+The JavaScript function `rcm_callbackmenu_init()` creates the Contextmenu object. If the Contextmenu functions are enabled in the UI then the `rcmail.env.contextmenu` variable JavaScript will be set to true. Setting this variable to false will disable all context menus.
+
+```js
+var menu = rcm_callbackmenu_init(props, events);
+```
+
+The functions takes 2 parameters:
+
+`props` (required) JSON object:
+* menu_name - (string) required - A friendly name for the Contextmenu, it is also used as the ID for the Contextmenu element.
+* menu_source - (string or array) required - See [Menu sources](#menu-sources) for details.
+* list_object - (object) optional - If Contextmenu is used on a Roundcube list object then that list object should be set here (e.g. `rcmail.message_list`), set to `null` if using Contextmenu on another element. It is set to `rcmail.message_list` by default.
+* source_class - (string) optional - The CSS class applied to the triggering element, `contextRow` by default.
+* mouseover_timeout - (int) optional - The delay for displaying submenus on mouseover, set to -1 to disable mouseover. `400` by default.
+
+`events` (optional) JSON object. Contextmenu triggers a number of events during execution, for example `command` is tiggered when the user clicks on an item in the menu. Full details of all the events can be found in the [Events](#events) section of this file. This parameters allows a plugin author to attach their own functions to the Contextmenu events, overriding the defaults.
+
+Creating a simple Contextmenu looks like this:
+```js
+var menu = rcm_callbackmenu_init(
+  {'menu_name': 'messagelist', 'menu_source': '#messagetoolbar'},
+  {'beforeactivate': function(p) {
+    rcmail.env.contextmenu_selection = p.ref.list_selection(true);
+  },
+  'afteractivate': function(p) {
+    p.ref.list_selection(false, rcmail.env.contextmenu_selection);
+  }});
+```
+
+The Contextmenu must then be attached to the element(s) in the UI. For example:
+```js
+$(el).on("contextmenu", function(e) {
+  rcm_show_menu(e, obj, source_id, menu);
+});
+```
+
+The `rcm_show_menu` displays a Contextmenu on the screen. It has the following parameters:
+* e - (event) The JS event object
+* obj - (object) The object the Contextmenu is active on (typically `this`)
+* source_id - (string) The object ID used by core function. When using the Contextmenu on a Roundcube list object then the ID can be retrieved from the object, like this:
+```js
+if (uid = list_object.get_row_uid(this)) {
+  rcm_show_menu(e, this, uid, menu);
+}
+```
+The ID can also be extracted from the originial function call, like this:
+```js
+if (source.attr('onclick') && source.attr('onclick').match(rcmail.context_menu_command_pattern)) {
+  rcm_show_menu(e, this, RegExp.$2, menu);
+}
+```
+* menu - (object) The menu object as created by `rcm_callbackmenu_init`
+
+## Menu sources
+
+The menu_source parameter can be a string (for building the Contextmenu from a single source) or an array of jQuery selectors. To add custom elements to the Contextmenu a menu element must first be added to the IU, for example:
+```php
+$li = '';
+$li .= html::tag('li', null, $this->api->output->button(array('command' => 'plugin.myplugin.command1', 'type' => 'link', 'class' => 'myclass1', 'label' => 'myplugin.command1')));
+$li .= html::tag('li', null, $this->api->output->button(array('command' => 'plugin.myplugin.command2', 'type' => 'link', 'class' => 'myclass2', 'label' => 'myplugin.command2')));
+$li .= html::tag('li', null, $this->api->output->button(array('command' => 'plugin.myplugin.command3', 'type' => 'link', 'class' => 'myclass3', 'label' => 'myplugin.command3')));
+$out = html::tag('ul', array('id' => 'mymenu'), $li);
+$this->api->output->add_footer(html::div(array('style' => 'display: none;'), $out));
+```
+The Contextmenu can then be invoked like this:
+```js
+var menu = rcm_callbackmenu_init({menu_name: 'mymenu', menu_source: '#mymenu'});
+```
+A JSON object can also be used instead of an element selector to add simple elements to the Contextmenu. For example:
+```js
+var menu = rcm_callbackmenu_init({menu_name: 'mymenu', menu_source: ['#mymenu', {lable: 'extra item', command: 'plugin.myplugin.command', props: '', class: 'myclass'}]});
+```
+The JSON object can have:
+* `label` (string) required - text for the menu element
+* `command` (string) required - the Roundcube command to execute on click
+* `props` (string) optional - arguments to pass to the Roundcube command
+* `classes` (string) optional - classes to apply to the menu element
+
+## Working with an existing Contextmenu
+
+A global event `contextmenu_init` is triggered when a new Contextmenu is initialised so other plugins can interact with it.
+```js
+rcmail.addEventListener('contextmenu_init', function(menu) {
+  // identify the folder list context menu
+  if (menu.menu_name == 'folderlist') {
+    // add a shortcut to the folder management screen to the end of the menu
+    menu.menu_source.push({label: 'Manage folders', command: 'folders', props: '', classes: 'managefolders'});
+
+    // make sure this new shortcut is always active
+    menu.addEventListener('activate', function(p) {
+      if (p.command == 'folders') {
+        return true;
+      }
+    });
+  }
+});
+```
+
+The Contextmnu object is passed to the function allowing properities to be manipulated and/or new events to be attached. By default the following menus are created:
+
+On the mail screen:
+* messagelist - attached to rows in the message list
+* folderlist - attached to entries in the folder list
+
+On the message composing screen:
+* composeto - attached to contacts in the contacts search widget
+
+On the address book screen:
+* contactlist - attached to rows in the contacts list
+* abooklist - attached to addressbooks and groups
+
+To prevent an element from appearing in a Contextmenu give it the class `rcm_ignore`.
+
+To make sure an element in the Contextmenu is always active give it the class `rcm_active`.
+
+The environmental variable `rcmail.env.context_menu_source_id` contains the ID of the specific element that the Contextmenu was triggered on, this is the `source_id` passed to `rcm_show_menu`
+
+## Events
+
+The following events are triggered by Contextmenu:
+
+`init` - Triggered once the Contextmenu object has been initalized
+* ref - The Contextmenu object
+
+`beforecommand` - Triggered when an element in the menu is clicked
+* ref - The Contextmenu object
+* el - The HTML object being clicked
+* command - The Roundcube command to run
+* args - The arguments being passed to the Roundcube command
+This function can return the following in a JSON object:
+* abort - Boolean, abort the default command execution, other events like `command` and `aftercommand` will not be executed
+* result - Result of the command, if abort if true this is returned to the client
+
+`command` - Triggered when an element in the menu is clicked
+* ref - The Contextmenu object
+* el - The HTML object being clicked
+* command - The Roundcube command to run
+* args - The arguments being passed to the Roundcube command
+* evt - The JS event object
+This function can return the result of the command to pass back to the client
+
+By default the following function is used:
+
+```js
+function(p) {
+  if (!$(p.el).hasClass('active'))
+    return false;
+
+  if (p.ref.list_object) {
+    var prev_display_next = rcmail.env.display_next;
+
+    if (!(p.ref.list_object.selection.length == 1 && p.ref.list_object.in_selection(rcmail.env.context_menu_source_id)))
+      rcmail.env.display_next = false;
+
+    var prev_sel = p.ref.list_selection(true);
+  }
+
+  // enable the required command
+  var prev_command = rcmail.commands[p.command];
+  rcmail.enable_command(p.command, true);
+  var result = rcmail.command(p.command, p.args, p.el, p.evt);
+  rcmail.enable_command(p.command, prev_command);
+
+  if (p.ref.list_object) {
+    p.ref.list_selection(false, prev_sel);
+    rcmail.env.display_next = prev_display_next;
+  }
+
+  if ($.inArray(p.command, rcmail.context_menu_overload_commands) >= 0) {
+    rcmail.context_menu_commands[p.command] = rcmail.commands[p.command];
+    rcmail.enable_command(p.command, true);
+  }
+
+  return result;
+}
+```
+
+The Contextmenu works by faking a message selection and calling the normal Roundcube command before putting everything back to normal.
+
+`aftercommand` - Triggered when an element in the menu is clicked
+* ref - The Contextmenu object
+* el - The HTML object being clicked
+* command - The Roundcube command to run
+* args - The arguments being passed to the Roundcube command
+
+`beforeactivate` - Triggered when a Contextmenu is displayed
+* ref - The Contextmenu object
+* source - The element the Contextmenu has been triggered on
+This function can return the following in a JSON object:
+* abort - Boolean, abort the default activation process, other events like `activate` and `afteractivat` will not be executed
+* show - Boolean, show the menu or not
+
+`activate` - Triggered when a Contextmenu is displayed, a separate event is triggered for each menu item
+* el - The menu element being activated
+* btn - The ID of the button in the UI on which the menu element is based
+* source - The element the Contextmenu has been triggered on
+* command - The command the menu element executes
+* enabled - Boolean, if the menu element is active or not
+This function can return a boolean value: true to activate the element, false to disable it
+
+`afteractivate` - Triggered when a Contextmenu is displayed
+* ref - The Contextmenu object
+* source - The element the Contextmenu has been triggered on
+
+`insertitem` - Triggered each time an item is added to a Contextmenu
+* item - The HTML object to be added to the menu
+
+For example permanently deactivating the delete option on the message list Contextmenu could be done like this:
+```js
+rcmail.addEventListener('contextmenu_init', function(menu) {
+  if (menu.menu_name == 'messagelist') {
+    menu.addEventListener('activate', function(p) {
+	  var is_delete = false;
+
+      $.each(rcmail.buttons['delete'], function() {
+        if (this.id == p.btn) {
+          is_delete = true;
+          return false;
+        }
+      });
+
+      return is_delete ? false : null;
+    });
+  }
+});
+```
+
+## Contextmenu and skins
+
+In the plugin folder there is a skins folder, and inside that there is a folder for each skin. Two files are needed for each skin: contextmenu.css - CSS for the menu, and functions.js containing the JavaScript to create Contextmenus in the skin. This plugin provides some helper functions for adding the default menus to the UI, they are: `rcm_listmenu_init()` for attaching a Contextmenu to a Roundcube list object, `rcm_foldermenu_init()` for attaching a Contextmenu to the folder list on the mail screen, and `rcm_abookmenu_init()` for attaching a Contextmenu to the address book and groups list on the address book screen. Each function expects the same 3 parameters:
+* The HTML object or jQuery selector of the element to attach to.
+* A props object, see [Creating a new Contextmenu](#creating-a-new-contextmenu)
+* An events object, see [Events](#events)
+
+Contextmenus must be defined separately for each skin because they are built from the toolbar elements in the UI which may have different IDs as well as different construction on each skin.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+Roundcube Webmail ContextMenu
+=============================
+This plugin creates contextmenus for various parts of Roundcube using commands
+from the toolbars.
+
+License
+-------
+This plugin is released under the [GNU General Public License Version 3+][gpl].
+
+Even if skins might contain some programming work, they are not considered
+as a linked part of the plugin and therefore skins DO NOT fall under the
+provisions of the GPL license. See the README file located in the core skins
+folder for details on the skin license.
+
+Install
+-------
+* Place this plugin folder into plugins directory of Roundcube
+* Add contextmenu to $config['plugins'] in your Roundcube config
+
+**NB:** When downloading the plugin from GitHub you will need to create a
+directory called contextmenu and place the files in there, ignoring the root
+directory in the downloaded archive.
+
+[rcplugrepo]: http://plugins.roundcube.net/packages/johndoh/contextmenu
+[releases]: http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/releases
+[gpl]: http://www.gnu.org/licenses/gpl.html
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+{
+  "name": "johndoh/contextmenu",
+  "description": "Adds context menus with common tasks to various parts of Roundcube",
+  "keywords": ["context","menu","right-click"],
+  "homepage": "http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/",
+  "license": "GPL-3.0",
+  "type": "roundcube-plugin",
+  "version": "2.3",
+  "authors": [
+    {
+      "name": "Philip Weir",
+      "email": "roundcube@tehinterweb.co.uk",
+      "role": "Developer"
+    }
+  ],
+  "repositories": [
+    {
+      "type": "composer",
+      "url": "http://plugins.roundcube.net"
+    }
+  ],
+  "require": {
+    "php": ">=5.2.1",
+    "roundcube/plugin-installer": ">=0.1.2"
+  },
+  "extra": {
+    "roundcube": {
+      "min-version": "1.3"
+    }
+  }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/contextmenu.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1027 @@
+/**
+ * ContextMenu plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (C) 2009-2014 Philip Weir
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+rcube_webmail.prototype.context_menu_skip_commands = new Array('mail-checkmail', 'mail-compose', 'addressbook-add', 'addressbook-import', 'addressbook-advanced-search', 'addressbook-search-create');
+rcube_webmail.prototype.context_menu_overload_commands = new Array('move', 'copy');
+rcube_webmail.prototype.context_menu_commands = new Array();
+rcube_webmail.prototype.context_menu_popup_menus = new Array();
+rcube_webmail.prototype.context_menu_popup_commands = {};
+
+rcube_webmail.prototype.context_menu_command_pattern = /rcmail\.command\(\'([^\']+)\',\s?\'((?:\\\'|[^\'])*)\'/;
+
+function rcm_listmenu_init(row, props, events) {
+	if (!events)
+		events = {};
+
+	var menu = rcm_callbackmenu_init(props, $.extend({
+		'beforeactivate': function(p) {
+			rcmail.env.contextmenu_selection = p.ref.list_selection(true);
+		},
+		'afteractivate': function(p) {
+			p.ref.menu_selection = p.ref.list_object.get_selection();
+			p.ref.list_selection(false, rcmail.env.contextmenu_selection);
+		}
+	}, events));
+
+	var list_object = props.list_object ? props.list_object : rcmail.message_list;
+	$("#" + row).on("contextmenu", function(e) {
+		if (uid = list_object.get_row_uid(this)) {
+			rcm_show_menu(e, this, uid, menu);
+		}
+	});
+}
+
+function rcm_foldermenu_init(el, props, events) {
+	if (!events)
+		events = {};
+
+	var menu = rcm_callbackmenu_init($.extend({'menu_name': 'folderlist', 'list_object': null}, props), $.extend({
+		'beforeactivate': function(p) {
+			if (rcmail.env.contextmenu_messagecount_request) {
+				rcmail.env.contextmenu_messagecount_request.abort();
+			}
+			rcmail.env.contextmenu_messagecount_request = null;
+		},
+		'activate': function(p) {
+			if ($.inArray(p.command, Array('expunge', 'purge', 'mark-all-read')) >= 0) {
+				// disable the commands by default
+				$(p.el).addClass('disabled').removeClass('active');
+
+				// if menu is opened on current folder (or special mark-all-read command) then enable the commands same as in UI
+				if ((rcmail.env.context_menu_source_id == rcmail.env.mailbox || p.command == 'mark-all-read') && rcm_check_button_state(p.btn, true)) {
+					$(p.el).addClass('active').removeClass('disabled');
+				}
+				// if menu is opened on difference folder then get message count for the folder
+				else if (rcmail.env.context_menu_source_id != rcmail.env.mailbox && !rcmail.env.contextmenu_messagecount_request) {
+					// folder check called async to prevent slowdown on menu load
+					rcmail.env.contextmenu_messagecount_request = $.ajax({
+						type: 'POST', url: rcmail.url('plugin.contextmenu.messagecount'), data: {'_mbox': rcmail.env.context_menu_source_id}, dataType: 'json', async: true,
+						success: function(data) {
+							if (data.messagecount > 0 && $('#rcm_folderlist').is(':visible')) {
+								// override the environment to check if commands should be abled
+								var temp_exists = rcmail.env.exists;
+								var temp_mailbox = rcmail.env.mailbox;
+								rcmail.env.exists = data.messagecount;
+								rcmail.env.mailbox = rcmail.env.context_menu_source_id;
+
+								$('#rcm_folderlist').find('a.cmd_expunge').addClass('active').removeClass('disabled');
+								if (rcmail.purge_mailbox_test()) {
+									$('#rcm_folderlist').find('a.cmd_purge').addClass('active').removeClass('disabled');
+								}
+
+								rcmail.env.exists = temp_exists;
+								rcmail.env.mailbox = temp_mailbox;
+							}
+						}
+					});
+				}
+			}
+		},
+		'beforecommand': function(p) {
+			if (rcmail.env.context_menu_source_id != rcmail.env.mailbox && $.inArray(p.command, Array('expunge', 'purge')) >= 0) {
+				var result = rcmail[p.command + '_mailbox'](rcmail.env.context_menu_source_id);
+
+				// update the unread count and trash icon
+				if (p.command == 'purge' && result !== false) {
+					rcmail.set_unread_count(rcmail.env.context_menu_source_id, 0, false);
+
+					if (rcmail.env.context_menu_source_id == rcmail.env.trash_mailbox)
+						rcmail.set_trash_count(0);
+				}
+
+				return {'abort': true, 'result': true};
+			}
+			else if (rcmail.env.context_menu_source_id != rcmail.env.mailbox && p.command == 'mark-all-read') {
+				rcmail.mark_all_read(rcmail.env.context_menu_source_id);
+				return {'abort': true, 'result': true};
+			}
+		}
+	}, events));
+
+	$(el).click(function(e) {
+		// hide menu when changing folder
+		menu.hide(e);
+	})
+	.on("contextmenu", function(e) {
+		var source = $(this).children('a');
+
+		// remove focus (and keyboard nav highlighting) from A
+		source.blur();
+
+		if (source.attr('rel') && source.attr('onclick') && source.attr('onclick').match(rcmail.context_menu_command_pattern)) {
+			rcm_show_menu(e, this, source.attr('rel'), menu);
+		}
+	});
+}
+
+function rcm_abookmenu_init(el, props, events) {
+	if (!events)
+		events = {};
+
+	var menu = rcm_callbackmenu_init($.extend({'menu_name': 'abooklist'}, props), $.extend({
+		'beforeactivate': function(p) {
+			p.ref.container.find('li.submenu').remove();
+		},
+		'activate': function(p) {
+			var ids = rcmail.env.context_menu_source_id.split(':', 2);
+			cur_source = ids[0];
+
+			if (p.command == 'group-create') {
+				// addressbook
+				if ($(p.source).hasClass('addressbook') && rcmail.env.address_sources[cur_source].groups && !rcmail.env.address_sources[cur_source].readonly) {
+					$(p.el).addClass('active').removeClass('disabled');
+				}
+				else {
+					$(p.el).addClass('disabled').removeClass('active');
+				}
+			}
+			else if (p.command == 'group-rename' || p.command == 'group-delete') {
+				// group
+				if ($(p.source).hasClass('contactgroup') && !rcmail.env.address_sources[cur_source].readonly) {
+					$(p.el).addClass('active').removeClass('disabled');
+				}
+				else {
+					$(p.el).addClass('disabled').removeClass('active');
+				}
+			}
+			else if (p.command == 'search-delete') {
+				// saved search
+				if ($(p.source).hasClass('contactsearch')) {
+					$(p.el).addClass('active').removeClass('disabled');
+				}
+				else {
+					$(p.el).addClass('disabled').removeClass('active');
+				}
+			}
+		},
+		'command': function(p) {
+			if (!$(p.el).hasClass('active'))
+				return;
+
+			var prev_source = rcmail.env.source;
+			var prev_group = rcmail.env.group;
+			var result = false;
+
+			var ids = rcmail.env.context_menu_source_id.split(':', 2);
+			cur_source = ids[0];
+			cur_id = ids[1];
+
+			rcmail.env.source = cur_source;
+			rcmail.env.group = cur_id;
+
+			// enable the required command
+			var prev_command = rcmail.commands[p.command];
+			rcmail.enable_command(p.command, true);
+
+			switch (p.command) {
+				case 'search-delete':
+					var result = false;
+
+					if ($(p.ref.selected_object).children('a').attr('rel')) {
+						var prev_search_id = rcmail.env.search_id;
+						var prev_search_request = rcmail.env.search_request;
+						rcmail.env.search_request = true;
+						rcmail.env.search_id = $(p.ref.selected_object).children('a').attr('rel').replace('S', '');
+
+						result = rcmail.command(p.command, p.args, p.el, p.evt);
+
+						rcmail.env.search_request = prev_search_request;
+						rcmail.env.search_id = prev_search_id;
+					}
+					break;
+				default:
+					result = rcmail.command(p.command, p.args, p.el, p.evt);
+					break;
+			}
+
+			rcmail.enable_command(p.command, prev_command);
+			rcmail.env.source = prev_source;
+			rcmail.env.group = prev_group;
+
+			return result;
+		}
+	}, events));
+
+	$(el).click(function(e) {
+		// hide menu when changing address book
+		menu.hide(e);
+	})
+	.on("contextmenu",function(e) {
+		var source = $(this).children('a');
+
+		// remove focus (and keyboard nav highlighting) from A
+		source.blur();
+
+		if (source.attr('rel') && source.attr('rel').match(/([A-Z0-9\-_]+(:[A-Z0-9\-_]+)?)/i)) {
+			rcm_show_menu(e, this, RegExp.$1, menu);
+		}
+	});
+}
+
+function rcm_callbackmenu_init(props, events) {
+	var std_events = {
+		'command': function(p) {
+			if (!$(p.el).hasClass('active'))
+				return;
+
+			if (p.ref.list_object) {
+				var prev_display_next = rcmail.env.display_next;
+
+				if (!(p.ref.list_object.selection.length == 1 && p.ref.list_object.in_selection(rcmail.env.context_menu_source_id)))
+					rcmail.env.display_next = false;
+
+				var prev_sel = p.ref.list_selection(true);
+			}
+
+			// enable the required command
+			var prev_command = rcmail.commands[p.command];
+			rcmail.enable_command(p.command, true);
+			var result = rcmail.command(p.command, p.args, p.el, p.evt);
+			rcmail.enable_command(p.command, prev_command);
+
+			if (p.ref.list_object) {
+				p.ref.list_selection(false, prev_sel);
+				rcmail.env.display_next = prev_display_next;
+			}
+
+			if ($.inArray(p.command, rcmail.context_menu_overload_commands) >= 0) {
+				rcmail.context_menu_commands[p.command] = rcmail.commands[p.command];
+				rcmail.enable_command(p.command, true);
+			}
+
+			return result;
+		},
+		'activate': function(p) {
+			$(p.el).addClass(p.enabled ? 'active' : 'disabled');
+		}
+	}
+
+	if (events)
+		$.extend(std_events, events);
+
+	if (!rcmail.env.contextmenus[props.menu_name]) {
+		var menu = new rcube_context_menu(props);
+		$.each(std_events, function(trigger, func) {
+			menu.addEventListener(trigger, function(p) { return func(p); });
+		});
+		menu.init();
+		rcmail.env.contextmenus[props.menu_name] = menu;
+	}
+	else {
+		var menu = rcmail.env.contextmenus[props.menu_name];
+	}
+
+	return menu;
+}
+
+function rcm_show_menu(e, obj, id, menu) {
+	// if contextmenus have been disabled then show browser context menu as normal
+	if (!rcmail.env.contextmenu)
+		return true;
+
+	e.preventDefault();
+	e.cancelBubble = true;
+	if (e.stopPropagation)
+		e.stopPropagation();
+
+	// hide any other open menus
+	for (var i = 0; i < rcmail.menu_stack.length; i++) {
+		rcmail.hide_menu(rcmail.menu_stack[i], e);
+	}
+
+	rcmail.env.context_menu_source_id = id;
+	menu.show(obj, e);
+}
+
+function rcm_hide_menu(e, sub_only) {
+	$.each($(sub_only ? '.rcmsubmenu' : 'div.contextmenu'), function() {
+		if ($(this).is(':visible')) {
+			$(this).hide();
+			rcmail.triggerEvent('menu-close', { name: $(this).attr('id'), props:{ menu: $(this).attr('id') }, originalEvent: e });
+		}
+	});
+
+	// close popup menus opened by the contextmenu
+	for (var i = rcmail.context_menu_popup_menus.length - 1; i >= 0; i--) {
+		rcmail.hide_menu(rcmail.context_menu_popup_menus[i], e);
+		rcmail.context_menu_popup_menus.pop();
+	}
+}
+
+function rcube_context_menu(p) {
+	this.menu_name = null;
+	this.menu_source = null;
+	this.list_object = rcmail.message_list;
+	this.source_class = 'contextRow';
+	this.mouseover_timeout = 400;
+
+	this.is_submenu = false;
+	this.parent_menu = this;
+	this.parent_object = null;
+	this.selected_object = null
+	this.container = null;
+	this.original_selection = new Array();
+	this.menu_selection = new Array();
+	this.submenus = new Array();
+	this.timers = new Array();
+
+	// overwrite default parameters
+	if (p && typeof p === 'object')
+		for (var n in p)
+			this[n] = p[n];
+
+	var ref = this;
+
+	this.init = function() {
+		if (!this.container) {
+			rcmail.triggerEvent('contextmenu_init', this);
+
+			this.container = $('<div id="rcm_'+ this.menu_name +'" style="display: none;"></div>');
+			this.container.addClass('contextmenu popupmenu');
+			this.container.addClass(this.is_submenu ? 'rcmsubmenu' : 'rcmmainmenu');
+
+			var rows = [], ul = $('<ul role="menu">'),
+			li = $('<li>'),	link = $('<a>'), span = $('<span>');
+
+			ul.addClass('toolbarmenu iconized');
+			li.attr('role', 'menuitem');
+
+			link.attr('href', '#');
+			link.addClass('icon active');
+			link.attr('role', 'button');
+			link.attr('tabindex', '-1');
+			link.attr('aria-disabled', 'true');
+
+			span.addClass('icon');
+
+			// loop over possible menu elements and build settings object
+			sources = typeof this.menu_source == 'string' ? [this.menu_source] : this.menu_source;
+			this.menu_source = {}
+			$.each(sources, function(i) {
+				var source_elements;
+				if (typeof sources[i] == 'string') {
+					ref.menu_source[sources[i]] = {
+						'toggle': !$(sources[i]).is(':visible')
+					};
+					source_elements = $(sources[i]).children();
+				}
+				else {
+					ref.menu_source[i] = {
+						'toggle': false
+					};
+					source_elements = $(sources[i]);
+				}
+
+				ul.attr('aria-labelledby', $(sources[i]).attr('aria-labelledby'));
+
+				$.each(source_elements, function() {
+					var elem, command, args;
+
+					if ($(this).is('a')) {
+						elem = $(this).clone();
+					}
+					else if ($(this).is('span') && $(this).children().length == 2) {
+						elem = $(this).children(':first').clone();
+
+						if ($(this).children(':last').attr('onclick').match(rcmail.context_menu_popup_pattern)) {
+							$(elem).attr('onclick', $(this).children(':last').attr('onclick'));
+						}
+					}
+					else if ($(this).is('li') && $(this).children('a').length == 1) {
+						elem = $(this).children('a').clone();
+
+						if (!elem.attr('onclick') || !elem.attr('onclick').match(rcmail.context_menu_command_pattern))
+							return;
+					}
+					else if ($(this).parent().is('a')) {
+						elem = $(this).parent().clone();
+					}
+					else if (this.command && this.label) {
+						elem = $('<a>').attr('href', '#')
+								.attr('id', 'rcmjs')
+								.attr('onclick', "return rcmail.command('"+ this.command +"','"+ this.props +"',this,event)")
+								.addClass(this.classes)
+								.html(this.label);
+					}
+					else {
+						return;
+					}
+
+					// skip any element that does not look like a Roundcube button
+					if (!elem.attr('onclick')) {
+						return;
+					}
+
+					if (elem.attr('onclick').match(rcmail.context_menu_command_pattern)) {
+						command = RegExp.$1;
+						args = RegExp.$2;
+					}
+
+					// skip elements we don't need
+					if ($.inArray(rcmail.env.task + '-' + command, rcmail.context_menu_skip_commands) > -1 || elem.hasClass('rcm_ignore')) {
+						return;
+					}
+
+					var a = link.clone(), row = li.clone();
+
+					// add command name element
+					tmp = span.clone();
+					tmp.text($.trim(elem.text()).length > 0 ? $.trim(elem.text()) : elem.attr('title'));
+					tmp.addClass(elem.children('span').attr('class'));
+					a.append(tmp);
+					a.addClass(elem.attr('class'));
+					a.removeClass('button').removeClass('disabled');
+					a.addClass('rcm_elem_' + elem.attr('id'));
+
+					if (elem.attr('onclick').match(rcmail.context_menu_popup_pattern)) {
+						a.data('command', RegExp.$1);
+						a.append($('<span>').addClass('right-arrow'));
+						row.addClass('submenu');
+						a.click(function(e) {
+							if (!$(this).hasClass('active'))
+								return;
+
+							ref.submenu(a, e);
+							return false;
+						});
+
+						if (ref.mouseover_timeout > -1) {
+							a.mouseover(function(e) {
+								if (!$(this).hasClass('active'))
+									return;
+
+								ref.timers['submenu_show'] = window.setTimeout(function(a, e) {
+									ref.submenu(a, e);
+								}, ref.mouseover_timeout, a, e);
+							});
+
+							a.mouseout(function(e) {
+								if (!$(this).hasClass('active'))
+									return;
+
+								$(this).blur(); clearTimeout(ref.timers['submenu_show']);
+							});
+						}
+					}
+					else {
+						a.addClass('cmd_' + command);
+						a.data('command', command);
+						if (elem.attr('target'))
+							a.attr('target', elem.attr('target'));
+
+						a.click(function(e) {
+							if ($(this).parents('.rcmsubmenu').length == 0) {
+								rcm_hide_menu(e, true);
+								clearTimeout(ref.timers['submenu_hide']);
+							}
+
+							var cur_popups = rcmail.menu_stack.length;
+							var result;
+
+							var callback = ref.parent_menu.triggerEvent('beforecommand', {ref: ref, el: this, command: command, args: args});
+							if (!callback || !callback.abort) {
+								result = ref.parent_menu.triggerEvent('command', {ref: ref, el: this, command: command, args: args, evt: e});
+							}
+							else {
+								result = callback.result;
+							}
+
+							if (!callback || !callback.skipaftercommand)
+								ref.parent_menu.triggerEvent('aftercommand', {ref: ref, el: this, command: command, args: args});
+
+							if (rcmail.menu_stack.length > cur_popups) {
+								var popup_name = rcmail.menu_stack[rcmail.menu_stack.length - 1];
+								rcmail.context_menu_popup_menus.push(popup_name);
+
+								// make sure enabled commands match context menu message selection
+								$.each(rcmail.context_menu_popup_commands[popup_name], function(cmd, state) {
+									rcmail.enable_command(cmd, state);
+								});
+							}
+
+							// ensure menu is always hidden after action (for Safari)
+							ref.hide(e);
+
+							return result;
+						});
+
+						if (ref.mouseover_timeout > -1 && !ref.is_submenu) {
+							a.mouseover(function(e) {
+								ref.timers['submenu_hide'] = window.setTimeout(function(e) {
+									rcm_hide_menu(e, true);
+								}, ref.mouseover_timeout, e);
+							});
+
+							a.mouseout(function(e) { clearTimeout(ref.timers['submenu_hide']); });
+						}
+					}
+
+					row.append(a);
+					ref.parent_menu.triggerEvent('insertitem', {item: row});
+					rows.push(row);
+				});
+			});
+
+			ul.append(rows).appendTo(this.container);
+			this.parent_menu.triggerEvent('init', {ref: this});
+			this.container.appendTo($('body'));
+		}
+	};
+
+	this.show = function(obj, e) {
+		if (obj) {
+			this.hide(e);
+		}
+
+		var callback = this.parent_menu.triggerEvent('beforeactivate', {ref: this, source: obj});
+		if (!callback || !callback.abort) {
+			if (obj) {
+				$(obj).addClass(this.source_class);
+			}
+
+			$.each(ref.menu_source, function(id, props) {
+				if (props.toggle) {
+					$(id).parent().show();
+				}
+			});
+
+			$.each(this.container.find('a'), function() {
+				if ($(this).hasClass('rcm_active')) {
+					$(this).addClass('active');
+				}
+				else if (btn = $(this).attr('class').match(/rcm_elem_([a-z0-9]+)/)) {
+					$(this).parent('li')[(btn[1] == 'rcmjs' || $('#' + btn[1]).is(':visible')) ? 'show' : 'hide']();
+					$(this).removeClass('active').removeClass('disabled');
+
+					var enabled = false;
+					if (!rcm_check_button_state(btn[1], false) && (!ref.is_submenu || rcm_check_button_state(btn[1], true))) {
+						enabled = true;
+					}
+
+					var ret = ref.parent_menu.triggerEvent('activate', {el: this, btn: btn[1], source: obj, command: $(this).data('command'), enabled: enabled});
+					if (ret === true) {
+						$(this).addClass('active').removeClass('disabled');
+					}
+					else if (ret === false) {
+						$(this).addClass('disabled').removeClass('active');
+					}
+				}
+			});
+
+			$.each(ref.menu_source, function(id, props) {
+				if (props.toggle) {
+					$(id).parent().hide();
+				}
+			});
+
+			this.parent_menu.triggerEvent('afteractivate', {ref: this, source: obj});
+		}
+
+		// position menu on the screen
+		if (this.is_submenu) {
+			rcmail.element_position(this.container, this.parent_object);
+		}
+		else {
+			this.position(e, this.container);
+		}
+
+		if (!callback || callback.show !== false) {
+			this.selected_object = obj;
+			this.container.show();
+			rcmail.triggerEvent('menu-open', { name: this.container.attr('id'), props:{ menu: this.container.attr('id') }, originalEvent: e });
+		}
+	};
+
+	this.hide = function(e) {
+		// use window.event when e is not defined (legacy support for IE8)
+		var target = e ? e.target : window.event.srcElement;
+
+		if ($('div.contextmenu').is(':visible') && (rcmail.context_menu_popup_menus.length == 0 || $(target).parents('div.contextmenu').length == 0)) {
+			this.selected_object = null;
+			$('.' + this.source_class).removeClass(this.source_class);
+			rcm_hide_menu(e);
+
+			for (var i in rcmail.context_menu_commands) {
+				if (!rcmail.context_menu_commands[i]) {
+					rcmail.enable_command(i, false);
+				}
+			}
+
+			rcmail.context_menu_commands = new Array();
+		}
+	};
+
+	this.submenu = function(link, e) {
+		// use window.event when e is not defined (legacy support for IE8)
+		if (!e)
+			e = window.event;
+
+		if (e) {
+			e.cancelBubble = true;
+			if (e.stopPropagation)
+				e.stopPropagation();
+		}
+
+		rcm_hide_menu(e, true);
+
+		var id = rcmail.gui_containers[$(link).data('command')] ? rcmail.gui_containers[$(link).data('command')].attr('id') : $(link).data('command');
+		if (!this.submenus[id]) {
+			var elem = !$('#' + id).is('ul') ? '#' + id + ' ul' : '#' + id; // check if the container returned is a ul else there should be one directly beneath it
+			this.submenus[id] = new rcube_context_menu({'menu_name': id, 'menu_source': elem, 'parent_menu': this, 'parent_object': link, 'is_submenu': true, 'list_object': this.list_object});
+			this.submenus[id].init();
+		}
+
+		this.submenus[id].show(null, e);
+	};
+
+	this.position = function(e, menu) {
+		// temporarily show element to calculate its size
+		menu.css({left: '-1000px', top: '-1000px'}).show();
+
+		var win = $(window),
+		win_height = win.height(),
+		elem_height = $(menu).height(),
+		elem_width = $(menu).width(),
+		top = e.pageY,
+		left = e.pageX;
+
+		if (top + elem_height > win_height) {
+			top -= elem_height;
+
+			if (top < 0)
+				top = Math.max(0, (win_height - elem_height) / 2);
+		}
+
+		if (left + elem_width > win.width())
+			left -= elem_width;
+
+		menu.hide();
+		menu.css({left: left + 'px', top: top + 'px'});
+	};
+
+	this.list_selection = function(show, prev_sel) {
+		// make the system think no preview pane exists while we do some fake message selects
+		// to enable/disable relevent commands for current selection
+		var prev_contentframe = rcmail.env.contentframe;
+		rcmail.env.contentframe = null;
+
+		if (show) {
+			if (this.list_object.selection.length == 0 || !this.list_object.in_selection(rcmail.env.context_menu_source_id)) {
+				prev_sel = this.list_object.get_selection();
+				this.list_object.highlight_row(rcmail.env.context_menu_source_id, true);
+
+				for (var i in prev_sel)
+					this.list_object.highlight_row(prev_sel[i], true);
+
+				this.list_object.triggerEvent('select');
+			}
+			else {
+				// trigger a select event to update active commands
+				// use case: select multiple message, open contextmenu; open contextmenu on a message not in selection; open contextmenu on selection
+				this.list_object.triggerEvent('select');
+			}
+		}
+		else if (prev_sel) {
+			for (var i in prev_sel)
+				this.list_object.highlight_row(prev_sel[i], true);
+
+			this.list_object.highlight_row(rcmail.env.context_menu_source_id, true);
+			this.list_object.triggerEvent('select');
+		}
+
+		rcmail.env.contentframe = prev_contentframe;
+
+		return prev_sel;
+	};
+
+	this.addEventListener = rcube_event_engine.prototype.addEventListener;
+	this.removeEventListener = rcube_event_engine.prototype.removeEventListener;
+	this.triggerEvent = rcube_event_engine.prototype.triggerEvent;
+};
+
+function rcm_override_mailbox_command(menu, props, before) {
+	if ($('div.contextmenu').is(':visible') && $.inArray(props.action, rcmail.context_menu_overload_commands) >= 0) {
+		if (before) {
+			rcmail.env.context_menu_prev_display_next = rcmail.env.display_next;
+			if (!(menu.list_object.selection.length == 1 && menu.list_object.in_selection(rcmail.env.context_menu_source_id)))
+				rcmail.env.display_next = false;
+
+			rcmail.env.context_menu_prev_sel = menu.list_selection(true);
+		}
+		else if (rcmail.env.context_menu_prev_sel) {
+			menu.list_selection(false, rcmail.env.context_menu_prev_sel);
+			rcmail.env.display_next = rcmail.env.context_menu_prev_display_next;
+		}
+	}
+}
+
+function rcm_check_button_state(btn, active) {
+	var classes = active ? rcmail.context_menu_button_active_class : rcmail.context_menu_button_disabled_class;
+	var found = false;
+
+	$.each(classes, function(i) {
+		if ($('#' + btn).hasClass(classes[i])) {
+			found = true;
+
+			// stop processing
+			return false;
+		}
+	});
+
+	return found;
+}
+
+function rcm_addressbook_selector(event, command, callback) {
+	var container = rcmail.rcm_addressbook_selector_element;
+
+	if (!container) {
+		var rows = [],
+			ul = $('<ul class="toolbarmenu">');
+
+		container = $('<div id="addressbook-selector" class="popupmenu"></div>');
+
+		// loop over address books
+		$.each(rcmail.env.address_sources, function() {
+			if (!this.readonly) {
+				rows.push(rcm_addressbook_selector_item(this));
+
+				if (this.groups) {
+					var ref = this;
+					$.each(rcmail.env.contactgroups, function() {
+						rows.push(rcm_addressbook_selector_item(this, ref.id));
+					});
+				}
+			}
+		});
+
+		ul.append(rows).appendTo(container);
+
+		// temporarily show element to calculate its size
+		container.css({left: '-1000px', top: '-1000px'})
+			.appendTo($('body')).show();
+
+		// set max-height if the list is long
+		if (rows.length > 10)
+			container.css('max-height', $('li', container)[0].offsetHeight * 10 + 9);
+
+		// register delegate event handler for folder item clicks
+		container.on('click', 'a.active', function(e) {
+			container.data('callback')(this, container.data('command'), e);
+			return false;
+		});
+
+		rcmail.rcm_addressbook_selector_element = container;
+	}
+
+	container.data('command', command);
+	container.data('callback', callback);
+
+	// customize menu for move or copy
+	container.find('li').show();
+
+	// search result may contain contacts from many sources, but if there is only one...
+	var source = rcmail.env.source;
+	if (source == '' && rcmail.env.selection_sources.length == 1)
+		source = rcmail.env.selection_sources[0];
+
+	// hide currently open address book from menu
+	if (source) {
+		$.each(container.find('a'), function() {
+			if (($(this).data('source') && $(this).data('source') == source) || $(this).data('id') == source)
+				$(this).parent('li').hide();
+		});
+	}
+
+	// position menu on the screen
+	rcmail.show_menu('addressbook-selector', true, event);
+}
+
+function rcm_group_selector(event, command, callback) {
+	var container = rcmail.rcm_addressgroup_selector_element;
+
+	if (!container) {
+		var rows = [],
+			ul = $('<ul class="toolbarmenu">');
+
+		container = $('<div id="addressgroup-selector" class="popupmenu"></div>');
+
+		// loop over address books
+		$.each(rcmail.env.address_sources, function() {
+			if (this.id === rcmail.env.source) {
+				var ref = this;
+				$.each(rcmail.env.contactgroups, function() {
+					rows.push(rcm_addressbook_selector_item(this, ref.id));
+				});
+			}
+		});
+
+		ul.append(rows).appendTo(container);
+
+		// remove indent added by rcm_addressbook_selector_item()
+		$(ul).find('a').removeAttr('style');
+
+		// temporarily show element to calculate its size
+		container.css({left: '-1000px', top: '-1000px'})
+			.appendTo($('body')).show();
+
+		// set max-height if the list is long
+		if (rows.length > 10)
+			container.css('max-height', $('li', container)[0].offsetHeight * 10 + 9);
+
+		// register delegate event handler for folder item clicks
+		container.on('click', 'a.active', {cmd: command}, function(e) {
+			container.data('callback')(this, e);
+			return false;
+		});
+
+		rcmail.rcm_addressgroup_selector_element = container;
+	}
+
+	container.data('callback', callback);
+
+	// customize menu for move or copy
+	container.find('li').show();
+
+	// hide currently open group from menu
+	if (rcmail.env.group) {
+		$.each(container.find('a'), function() {
+			if ($(this).data('id') == rcmail.env.group)
+				$(this).parent('li').hide();
+		});
+	}
+
+	// position menu on the screen
+	rcmail.show_menu('addressgroup-selector', true, event);
+}
+
+function rcm_addressbook_selector_item(obj, abook_id) {
+	if (abook_id && abook_id === obj.source || !abook_id) {
+		var a = $('<a>').attr('href', '#').addClass('icon'),
+			row = $('<li>');
+
+		if (obj.type == 'group') {
+			a.addClass('active contactgroup')
+			a.data('source', obj.source);
+			a.data('id', obj.id);
+			a.css('padding-left', '16px');
+		}
+		else {
+			a.addClass('addressbook active').data('id', obj.id);
+		}
+
+		// add address book name element
+		a.append($('<span>').text(obj.name));
+
+		return row.append(a);
+	}
+}
+
+$(document).ready(function() {
+	if (window.rcmail) {
+		rcmail.env.contextmenus = {};
+
+		rcmail.addEventListener('init', function() {
+			// no need to reattach events inside iframe
+			if (rcmail.is_framed())
+				return;
+
+			var body_mouseup = function(e) { $.each(rcmail.env.contextmenus, function() { this.hide(e); }); };
+			$(document.body).on('click contextmenu', body_mouseup);
+
+			// Hide menu after clicks in iframes (eg. preview pane)
+			$('iframe').on('load', function(e) {
+				try { $(this.contentDocument || this.contentWindow).on('mouseup', body_mouseup) }
+				catch (e) { /* catch possible "Permission denied" error in IE */ }
+			})
+			.contents().on('mouseup', body_mouseup);
+		});
+
+		if ((rcmail.env.task == 'mail' || rcmail.env.task == 'addressbook') && rcmail.env.action == '') {
+			// special handeling for move/copy functions (folder/address book selector)
+			rcmail.addEventListener('actionbefore', function(props) {
+				var menu = rcmail.env.task == 'addressbook' ? rcmail.env.contextmenus['contactlist'] : rcmail.env.contextmenus['messagelist'];
+				rcm_override_mailbox_command(menu, props, true);
+			});
+
+			rcmail.addEventListener('actionafter', function(props) {
+				var menu = rcmail.env.task == 'addressbook' ? rcmail.env.contextmenus['contactlist'] : rcmail.env.contextmenus['messagelist'];
+				rcm_override_mailbox_command(menu, props, false);
+			});
+		}
+
+		if (rcmail.env.task == 'mail' && rcmail.env.action == '') {
+			rcmail.register_command('plugin.contextmenu.collapseall', function(props, obj) {
+				$("#mailboxlist div.expanded").each(function() { $(this).click(); });
+			}, false);
+
+			rcmail.register_command('plugin.contextmenu.expandall', function(props, obj) {
+				$("#mailboxlist div.collapsed").each(function() { $(this).click(); });
+			}, false);
+
+			rcmail.register_command('plugin.contextmenu.openfolder', function(props, obj) {
+				var button_id = rcmail.buttons['plugin.contextmenu.openfolder'][0].id;
+
+				rcube_find_object(button_id).href = '?_task=mail&_mbox='+urlencode(rcmail.env.context_menu_source_id);
+				rcmail.sourcewin = window.open(rcube_find_object(button_id).href);
+				if (rcmail.sourcewin)
+					window.setTimeout(function() { rcmail.sourcewin.focus(); }, 20);
+
+				rcube_find_object(button_id).href = '#';
+			}, false);
+		}
+
+		if (rcmail.env.task == 'addressbook' && rcmail.env.action == '') {
+			// address book selector
+			rcmail.addEventListener('actionbefore', function(props) {
+				if ((props.action == 'move' || props.action == 'copy') && props.props == '') {
+					rcm_addressbook_selector(props.originalEvent, props.action, function(obj, cmd, evt) {
+						// search result may contain contacts from many sources, but if there is only one...
+						var source = rcmail.env.source;
+						if (source == '' && rcmail.env.selection_sources.length == 1)
+							source = rcmail.env.selection_sources[0];
+
+						if ($(obj).data('source')) {
+							rcmail.command(cmd, rcmail.env.contactgroups['G' + $(obj).data('source') + $(obj).data('id')], evt);
+						}
+						else {
+							rcmail.command(cmd, rcmail.env.address_sources[$(obj).data('id')], evt);
+						}
+					});
+
+					return false;
+				}
+			});
+
+			// address book group selector
+			rcmail.register_command('plugin.contextmenu.assigngroup', function(props, obj, event) {
+				rcm_group_selector(event, props, function(obj, evt) {
+					// search result may contain contacts from many sources, but if there is only one...
+					rcm_override_mailbox_command(rcmail.env.contextmenus['contactlist'], { action: 'copy' } , true);
+					rcmail.group_member_change('add', rcmail.contact_list.get_selection().join(','), rcmail.env.source, $(obj).data('id'));
+					rcm_override_mailbox_command(rcmail.env.contextmenus['contactlist'], { action: 'copy' } , false);
+				});
+			}, false);
+
+			// reset address book selector when groups change
+			rcmail.addEventListener('group_insert', function() { $("#addressbook-selector").remove(); $("#addressgroup-selector").remove(); rcmail.rcm_addressbook_selector_element = undefined; rcmail.rcm_addressgroup_selector_element  = undefined; } );
+			rcmail.addEventListener('group_update', function() { $("#addressbook-selector").remove(); $("#addressgroup-selector").remove(); rcmail.rcm_addressbook_selector_element = undefined; rcmail.rcm_addressgroup_selector_element  = undefined; } );
+			rcmail.addEventListener('group_delete', function() { $("#addressbook-selector").remove(); $("#addressgroup-selector").remove(); rcmail.rcm_addressbook_selector_element = undefined; rcmail.rcm_addressgroup_selector_element  = undefined; } );
+		}
+
+		// special event listeners for intreacting with plugins which open popup menus (eg: zipdownload)
+		rcmail.addEventListener('menu-open', function(p) {
+			// check for popupmenus that arent part of contextmenu
+			if ($('div.contextmenu').is(':visible') && p.name.indexOf('rcm_') != 0) {
+				rcmail.context_menu_popup_commands[p.name] = {};
+				$('#' + p.name).find('a').each(function() {
+					if ($(this).attr('onclick') && $(this).attr('onclick').match(rcmail.context_menu_command_pattern)) {
+						var cmd = RegExp.$1;
+						rcmail.context_menu_popup_commands[p.name][cmd] = rcmail.commands[cmd];
+					}
+				});
+			}
+		});
+
+		rcmail.addEventListener('menu-close', function(p) {
+			// check required args are present, other plugins trigger this event too
+			if (!p.originalEvent) {
+				return;
+			}
+
+			// check for popupmenus that arent part of contextmenu
+			var e = p.originalEvent.currentTarget ? p.originalEvent.currentTarget : p.originalEvent.srcElement;
+			if ($('div.contextmenu').is(':visible') && p.name.indexOf('rcm_') != 0 && $(e).attr('class').indexOf('rcm_elem_') == -1) {
+				rcm_hide_menu(p.originalEvent);
+			}
+		});
+
+		rcmail.addEventListener('get_single_uid', function() {
+			if ($('#rcm_messagelist').is(':visible') && rcmail.env.contextmenus['messagelist'].menu_selection.length == 1) {
+				return rcmail.env.contextmenus['messagelist'].menu_selection[0];
+			}
+		});
+
+		rcmail.addEventListener('get_single_cid', function() {
+			if ($('#rcm_contactlist').is(':visible') && rcmail.env.contextmenus['contactlist'].menu_selection.length == 1) {
+				return rcmail.env.contextmenus['contactlist'].menu_selection[0];
+			}
+			else if ($('#rcm_composeto').is(':visible') && rcmail.env.contextmenus['composeto'].menu_selection.length == 1) {
+				return rcmail.env.contextmenus['composeto'].menu_selection[0];
+			}
+		});
+	}
+});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/contextmenu.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * ContextMenu
+ *
+ * Plugin to add a context menu to various parts of the interface
+ *
+ * @author Philip Weir
+ *
+ * Copyright (C) 2009-2014 Philip Weir
+ *
+ * This program is a Roundcube (http://www.roundcube.net) plugin.
+ * For more information see README.md.
+ * See MANUAL.md for information about extending this plugin.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Roundcube. If not, see http://www.gnu.org/licenses/.
+ */
+class contextmenu extends rcube_plugin
+{
+	public $task = 'mail|addressbook';
+
+	function init()
+	{
+		$rcmail = rcube::get_instance();
+
+		if ($rcmail->output->type == 'html') {
+			$this->include_script('contextmenu.js');
+			$this->include_stylesheet($this->local_skin_path() . '/contextmenu.css');
+			$this->include_script($this->local_skin_path() . '/functions.js');
+			$this->api->output->set_env('contextmenu', true);
+		}
+
+		if ($rcmail->task == 'mail') {
+			$this->register_action('plugin.contextmenu.messagecount', array($this, 'messagecount'));
+
+			// on the mailbox screen only add some additional options for the folder menu
+			if ($rcmail->action == '') {
+				$this->addition_folder_options();
+			}
+		}
+		elseif ($rcmail->task == 'addressbook' && $rcmail->action == '') {
+			// give other plugins a change to add address books before checking if they exist for the menu
+			$this->add_hook('render_page', array($this, 'addition_addressbook_options'));
+		}
+	}
+
+	public function addition_folder_options()
+	{
+		$this->add_texts('localization/');
+
+		$li = '';
+		$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'plugin.contextmenu.collapseall', 'type' => 'link', 'class' => 'collapseall rcm_active', 'label' => 'contextmenu.collapseall', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+		$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'plugin.contextmenu.expandall', 'type' => 'link', 'class' => 'expandall rcm_active', 'label' => 'contextmenu.expandall', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+		$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'plugin.contextmenu.openfolder', 'type' => 'link', 'class' => 'openfolder rcm_active', 'label' => 'openinextwin', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+
+		$out = html::tag('ul', array('id' => 'rcmFolderMenu', 'role' => 'menu'), $li);
+		$this->api->output->add_footer(html::div(array('style' => 'display: none;', 'aria-hidden' => 'true'), $out));
+	}
+
+	public function addition_addressbook_options()
+	{
+		$this->add_texts('localization/');
+
+		$li = '';
+		$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'plugin.contextmenu.assigngroup', 'type' => 'link', 'class' => 'assigngroup disabled', 'classact' => 'assigngroup active', 'label' => 'contextmenu.assigngroup', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+
+		if (count(rcube::get_instance()->get_address_sources(true)) > 1) {
+			// only show the move option if there are sources to move between
+			$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'move', 'type' => 'link', 'class' => 'movecontact disabled', 'classact' => 'movecontact active', 'label' => 'moveto', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+			$li .= html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array('command' => 'copy', 'type' => 'link', 'class' => 'copycontact disabled', 'classact' => 'copycontact active', 'label' => 'copyto', 'tabindex' => '-1', 'aria-disabled' => 'true')));
+		}
+
+		$out = html::tag('ul', array('id' => 'rcmAddressBookMenu', 'role' => 'menu'), $li);
+		$this->api->output->add_footer(html::div(array('style' => 'display: none;', 'aria-hidden' => 'true'), $out));
+	}
+
+	public function messagecount()
+	{
+		$storage = rcube::get_instance()->storage;
+		$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
+
+		// send output
+		header("Content-Type: application/json; charset=".RCUBE_CHARSET);
+		echo json_encode(array('messagecount' => $storage->count($mbox, 'EXISTS')));
+		exit;
+	}
+}
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Daniel López */
+
+$labels = array();
+$labels['collapseall'] = 'Compacta totes les carpetes';
+$labels['expandall'] = 'Expandeix totes les carpetes';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Martin Frajdl */
+
+$labels = array();
+$labels['collapseall'] = 'Sbalit všechny složky';
+$labels['expandall'] = 'Rozbalit všechny složky';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Johannes Hessellund */
+
+$labels = array();
+$labels['collapseall'] = 'Fold alle mapper sammen';
+$labels['expandall'] = 'Udfold alle mapper';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Mike Constabel */
+
+$labels = array();
+$labels['collapseall'] = 'Alle Unterordner einklappen';
+$labels['expandall'] = 'Alle Unterordner ausklappen';
+$labels['assigngroup'] = 'Gewählte Kontakte einer Gruppe zuordnen';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Mike Constabel */
+
+$labels = array();
+$labels['collapseall'] = 'Alle Unterordner einklappen';
+$labels['expandall'] = 'Alle Unterordner ausklappen';
+$labels['assigngroup'] = 'Gewählte Kontakte einer Gruppe zuordnen';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Philip Weir */
+
+$labels = array();
+$labels['collapseall'] = 'Collapse all folders';
+$labels['expandall'] = 'Expand all folders';
+$labels['assigngroup'] = 'Assign selected contacts to group...';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Philip Weir */
+
+$labels = array();
+$labels['collapseall'] = 'Collapse all folders';
+$labels['expandall'] = 'Expand all folders';
+$labels['assigngroup'] = 'Assign selected contacts to group...';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+<?php
+/* Author: Sergio Loyola */
+
+$labels = array();
+$labels['markreadfolder'] = 'Marcar todo como leído';
+$labels['collapseall'] = 'Compactar todas las carpetas';
+$labels['expandall'] = 'Expandir todas las carpetas';
+$labels['assigngroup'] = 'Asignar contactos seleccionados al grupo ...';
+
+$messages = array();
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Daniel López */
+
+$labels = array();
+$labels['collapseall'] = 'Compactar todas las carpetas';
+$labels['expandall'] = 'Expandir todas las carpetas';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: */
+
+$labels = array();
+$labels['collapseall'] = 'Reduire les dossiers';
+$labels['expandall'] = 'Developper les dossiers';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: David Garabana Barro */
+
+$labels = array();
+$labels['collapseall'] = 'Pechar tódolos cartafoles';
+$labels['expandall'] = 'Abrir tódolos cartafoles';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Németh János */
+
+$labels = array();
+$labels['collapseall'] = 'Összes összecsukása';
+$labels['expandall'] = 'Összes kibontása';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Massimiliano Adamo */
+
+$labels = array();
+$labels['collapseall'] = 'Compatta tutte le cartelle';
+$labels['expandall'] = 'Espandi tutte le cartelle';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: MASUDA Kazuya */
+
+$labels = array();
+$labels['collapseall'] = 'å…¨ã¦ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é–‰ã˜ã‚‹';
+$labels['expandall'] = 'å…¨ã¦ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é–‹ã';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Wouter Kevenaar */
+
+$labels = array();
+$labels['collapseall'] = 'Alle mappen inklappen';
+$labels['expandall'] = 'Alle mappen uitklappen';
+$labels['assigngroup'] = 'Geselecteerde contacten toewijzen aan groep...';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Michał Jałocha */
+
+$labels = array();
+$labels['collapseall'] = 'Zwiń wszystkie foldery';
+$labels['expandall'] = 'Rozwiń wszystkie foldery';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+/* Author: Claudio Ferreira Filho */
+
+$labels = array();
+$labels['collapseall'] = 'Recolher todas as pastas';
+$labels['expandall'] = 'Expandir todas as pastas';
+$labels['assigngroup'] = 'Atribuir contatos selecionados ao grupo...';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Miguel Clara */
+
+$labels = array();
+$labels['collapseall'] = 'Fechar todas as pastas';
+$labels['expandall'] = 'Expandir todas as pastas';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Ovidiu Bica */
+
+$labels = array();
+$labels['collapseall'] = 'Ascunde toate folderele';
+$labels['expandall'] = 'Afişează toate folderele';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Sergey Basov */
+
+$labels = array();
+$labels['collapseall'] = 'Свернуть вÑе папки';
+$labels['expandall'] = 'Развернуть вÑе папки';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Jonas Nasholm */
+
+$labels = array();
+$labels['collapseall'] = 'Dölj alla kataloger';
+$labels['expandall'] = 'Visa alla kataloger';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Mustafa Icer */
+
+$labels = array();
+$labels['collapseall'] = 'Tüm alt klasörleri kapat';
+$labels['expandall'] = 'Tüm alt klasörleri aç';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: Sergey Basov */
+
+$labels = array();
+$labels['collapseall'] = 'Згорнути уÑÑ– папки';
+$labels['expandall'] = 'Розгорнути уÑÑ– папки';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+/* Author: thomasysliu */
+
+$labels = array();
+$labels['collapseall'] = '全部收起';
+$labels['expandall'] = '全部展開';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/skins/classic/contextmenu.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,301 @@
+/**
+ * ContextMenu plugin styles
+ */
+
+.contextRow td,
+#mailboxlist li.contextRow,
+#directorylistbox li.contextRow
+{
+  background-color: #EEEEEE;
+}
+
+#mailboxlist li.selected,
+#directorylistbox li.selected
+{
+  background-color: #929292;
+}
+
+div.contextmenu li a.active:hover
+{
+  color: #fff;
+}
+
+div.contextmenu a
+{
+  position: relative;
+  outline: 0;
+  padding: 0 !important;
+}
+
+div.contextmenu ul.iconized li a span
+{
+  display: block;
+  padding: 1px 12px 3px 28px;
+}
+
+div.contextmenu ul.iconized li a span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 20px;
+}
+
+div.contextmenu ul.iconized li.submenu a span.icon
+{
+  padding-right: 15px;
+}
+
+div.contextmenu ul.iconized li.submenu a span.right-arrow
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  height: 15px;
+  width: 15px;
+  background: url(images/contexticons.png) no-repeat right 1px;
+}
+
+div.contextmenu ul.iconized li a.reply span.icon
+{
+  background-position: 7px -119px;
+}
+
+div.contextmenu ul.iconized li a.replyAll span.icon
+{
+  background-position: 7px -392px;
+}
+
+div.contextmenu ul.iconized li a.replyalllink span.icon
+{
+  background-position: 7px -392px;
+}
+
+div.contextmenu ul.iconized li a.replylistlink span.icon
+{
+  background-position: 7px -377px;
+}
+
+div.contextmenu ul.iconized li a.forward span.icon
+{
+  background-position: 7px -102px;
+}
+
+div.contextmenu ul.iconized li a.forwardlink span.icon
+{
+  background-position: 7px -102px;
+}
+
+div.contextmenu ul.iconized li a.forwardattachmentlink span.icon
+{
+  background-position: 7px -361px;
+}
+
+div.contextmenu ul.iconized li a.delete span.icon
+{
+  background-position: 7px -187px;
+}
+
+div.contextmenu ul.iconized li a.markmessage span.icon
+{
+  background-position: 7px -457px;
+}
+
+div.contextmenu ul.iconized li a.readlink span.icon
+{
+  background-position: 7px -85px;
+}
+
+div.contextmenu ul.iconized li a.unreadlink span.icon
+{
+  background-position: 7px -136px;
+}
+div.contextmenu ul.iconized li a.flaggedlink span.icon
+{
+  background-position: 7px -170px;
+}
+
+div.contextmenu ul.iconized li a.unflaggedlink span.icon
+{
+  background-position: 7px -153px;
+}
+
+div.contextmenu ul.iconized li a.messagemenu span.icon
+{
+  background-position: 7px -475px;
+}
+
+div.contextmenu ul.iconized li a.compose span.icon
+{
+  background-position: 8px -237px;
+}
+
+div.contextmenu ul.iconized li a.print span.icon
+{
+  background: url(images/messageactions.png) no-repeat 5px 1px;
+}
+
+div.contextmenu ul.iconized li a.cmd_mark-all-read span.icon
+{
+  background-position: 7px -85px;
+}
+
+div.contextmenu ul.iconized li a.collapseall span.icon
+{
+  background-position: 7px -203px;
+}
+div.contextmenu ul.iconized li a.expandall span.icon
+{
+  background-position: 7px -219px;
+}
+
+div.contextmenu ul.iconized li a.cmd_expunge span.icon
+{
+  background-position: 7px -254px;
+}
+
+div.contextmenu ul.iconized li a.cmd_purge span.icon
+{
+  background-position: 7px -271px;
+}
+
+div.contextmenu ul.iconized li a.openfolder span.icon
+{
+  background: url(images/messageactions.png) no-repeat 6px -52px;
+}
+
+div.contextmenu ul.iconized li a.movecontact span.icon
+{
+  background: url(images/messageactions.png) no-repeat 5px -161px;
+}
+
+div.contextmenu ul.iconized li a.copycontact span.icon
+{
+  background: url(images/messageactions.png) no-repeat 5px -143px;
+}
+
+div.contextmenu ul.iconized li a.export span.icon
+{
+  background-position: 7px -510px;
+}
+
+div.contextmenu ul.iconized li a.exportalllink span.icon
+{
+  background-position: 7px -527px;
+}
+
+div.contextmenu ul.iconized li a.exportsellink span.icon
+{
+  background-position: 7px -510px;
+}
+
+div.contextmenu ul.iconized li a.cmd_add-recipient span.icon
+{
+  background-position: 8px -236px;
+}
+
+div.contextmenu ul.iconized li a.vcard span.icon
+{
+  background-position: 7px -546px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-create span.icon,
+div.contextmenu ul.iconized li a.assigngroup span.icon
+{
+  background-position: 7px -441px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-remove-selected span.icon
+{
+  background-position: 7px -492px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-rename span.icon
+{
+  background-position: 7px -426px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-delete span.icon
+{
+  background-position: 7px -186px;
+}
+
+div.contextmenu ul.iconized li a.cmd_search-delete span.icon
+{
+  background-position: 7px -186px;
+}
+
+#rcm_messagemenumenu ul.iconized li a span.icon
+{
+  background: url(images/messageactions.png) no-repeat 5px 20px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.printlink span.icon
+{
+  background-position: 5px 1px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.downloadlink span.icon
+{
+  background-position: 5px -17px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.editlink span.icon
+{
+  background-position: 5px -70px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.movelink span.icon
+{
+  background-position: 5px -161px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.copylink span.icon
+{
+  background-position: 5px -143px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.sourcelink span.icon
+{
+  background-position: 5px -35px;
+}
+
+#rcm_messagemenumenu ul.iconized li a.openlink span.icon
+{
+  background-position: 5px -52px;
+}
+
+/*** address book selector ***/
+
+#addressbook-selector li a,
+#addressgroup-selector li a
+{
+  padding: 0;
+}
+
+#addressbook-selector li a span,
+#addressgroup-selector li a span
+{
+  background: url(images/contexticons.png) no-repeat 0 20px;
+  display: block;
+  height: 15px;
+  min-height: 14px;
+  padding: 2px 4px 2px 28px;
+  overflow: hidden;
+  max-width: 120px;
+  text-overflow: ellipsis;
+}
+
+#addressbook-selector li a.active:hover span,
+#addressgroup-selector li a.active:hover span
+{
+  color: white;
+}
+
+#addressbook-selector li a.addressbook span
+{
+  background-position: 5px -306px;
+}
+
+#addressbook-selector li a.contactgroup span,
+#addressgroup-selector li a.contactgroup span
+{
+  background-position: 5px -343px;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/skins/classic/functions.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+/**
+ * ContextMenu plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (C) 2014 Philip Weir
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+rcube_webmail.prototype.context_menu_popup_pattern = /rcmail_ui\.show_popup\(\'([^\']+)\'/;
+rcube_webmail.prototype.context_menu_button_active_class = new Array('active', 'button');
+rcube_webmail.prototype.context_menu_button_disabled_class = new Array('disabled', 'buttonPas');
+
+function add_menu_text(p) {
+	if ($(p.item).children('a').hasClass('vcard')) {
+		$(p.item).children('a').children('span').text($('#abookactions a.vcard').attr('title'));
+	}
+}
+
+function reorder_contact_menu(p) {
+	// put export link last
+	var ul = p.ref.container.find('ul:first');
+	$(p.ref.container).find('a.export').parent('li').appendTo(ul);
+}
+
+function reorder_abook_menu(p) {
+	// remove the remove from group option from the address book menu
+	p.ref.container.find('a.cmd_group-remove-selected').remove();
+}
+
+$(document).ready(function() {
+	if (window.rcmail) {
+		if (rcmail.env.task == 'mail' && rcmail.env.action == '') {
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'messagelist', 'menu_source': '#messagetoolbar'}); } );
+			rcmail.add_onload("rcm_foldermenu_init('#mailboxlist li', {'menu_source': ['#rcmFolderMenu', '#mailboxoptionsmenu ul']})");
+		}
+		else if (rcmail.env.task == 'mail' && rcmail.env.action == 'compose') {
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'composeto', 'menu_source': '#abookactions', 'list_object': rcmail.contact_list}, {'insertitem': function(p) { add_menu_text(p); }}); } );
+		}
+		else if (rcmail.env.task == 'addressbook' && rcmail.env.action == '') {
+			rcmail.addEventListener('contextmenu_init', function(menu) {
+				if (menu.menu_name == 'contactlist') {
+					// copy the remove from group option in the contact menu
+					if (btn = $('#' + rcmail.buttons['group-remove-selected'][0].id).clone()) {
+						// remove the ID and add override class
+						btn.removeAttr('id').addClass('rcm_active');
+						btn = $('<li>').attr('role', 'menuitem').append(btn);
+						btn.insertAfter($('#rcmAddressBookMenu').find('a.assigngroup').parent('li'));
+					}
+				}
+			});
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'contactlist', 'menu_source': ['#abooktoolbar', '#rcmAddressBookMenu'], 'list_object': rcmail.contact_list}, {
+				'init': function(p) { reorder_contact_menu(p); },
+				'afteractivate': function(p) {
+					p.ref.list_selection(false, rcmail.env.contextmenu_selection);
+
+					// count the number of groups in the current addressbook
+					if (!rcmail.env.group || rcmail.env.readonly)
+						p.ref.container.find('a.cmd_group-remove-selected').removeClass('active').addClass('disabled');
+
+					// count the number of groups in the current addressbook
+					var groupcount = 0;
+					if (!rcmail.env.readonly && rcmail.env.address_sources[rcmail.env.source] && rcmail.env.address_sources[rcmail.env.source].groups)
+						$.each(rcmail.env.contactgroups, function(){ if (this.source === rcmail.env.source) groupcount++ });
+
+					if (groupcount > 0)
+						p.ref.container.find('a.assigngroup').removeClass('disabled').addClass('active');
+					else
+						p.ref.container.find('a.assigngroup').removeClass('active').addClass('disabled');
+				},
+				'aftercommand': function(p) {
+					if ($(p.el).hasClass('active') && p.command == 'group-remove-selected')
+						rcmail.command('listgroup', {'source': rcmail.env.source, 'id': rcmail.env.group}, p.el);
+				}
+			}); } );
+			rcmail.add_onload("rcm_abookmenu_init('#directorylist li, #savedsearchlist li', {'menu_source': ['#directorylist-footer', '#groupoptionsmenu ul']}, {'init': function(p) { reorder_abook_menu(p); }})");
+			rcmail.addEventListener('group_insert', function(props) { rcm_abookmenu_init(props.li, {'menu_source': ['#directorylist-footer', '#groupoptionsmenu ul']}); } );
+			rcmail.addEventListener('abook_search_insert', function(props) { rcm_abookmenu_init(rcmail.savedsearchlist.get_item('S' + props.id), {'menu_source': ['#directorylist-footer', '#groupoptionsmenu ul']}); } );
+		}
+	}
+});
\ No newline at end of file
Binary file plugins/contextmenu/skins/classic/images/contexticons.png has changed
Binary file plugins/contextmenu/skins/classic/images/messageactions.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/skins/larry/contextmenu.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,236 @@
+/**
+ * ContextMenu plugin styles
+ */
+
+.records-table tbody tr.contextRow td
+{
+  background-color: #F2F2F2;
+}
+
+#mailboxlist li.contextRow,
+#directorylist li.contextRow,
+#savedsearchlist li.contextRow,
+#addresslist .contextRow,
+#contacts-table .contextRow
+{
+  background-color: #C7E3EF;
+}
+
+div.contextmenu a
+{
+  position: relative;
+  outline: 0;
+  cursor: default;
+}
+
+div.contextmenu.rcmmainmenu ul.iconized li a span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 20px;
+}
+
+div.contextmenu ul li.submenu a span.icon
+{
+  padding-right: 18px;
+}
+
+div.contextmenu ul.iconized li.submenu a span.right-arrow
+{
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  height: 15px;
+  width: 18px;
+  background: url(images/contexticons.png) no-repeat right -194px;
+  opacity: 0.2;
+}
+
+div.contextmenu ul.iconized li.submenu a.active span.right-arrow
+{
+  opacity: 0.99;
+}
+
+div.contextmenu ul.iconized li a.reply span.icon
+{
+  background-position: 0 -122px;
+}
+
+div.contextmenu ul.iconized li a.reply-all span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -147px;
+}
+
+div.contextmenu ul.iconized li a.replyalllink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -147px;
+}
+
+div.contextmenu ul.iconized li a.replylistlink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -464px;
+}
+
+div.contextmenu ul.iconized li a.forward span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -169px;
+}
+
+div.contextmenu ul.iconized li a.forwardlink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -169px;
+}
+
+div.contextmenu ul.iconized li a.forwardattachmentlink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -445px;
+}
+
+div.contextmenu ul.iconized li a.delete span.icon
+{
+  background-position: 0 -96px;
+}
+
+div.contextmenu ul.iconized li a.markmessage span.icon
+{
+  background-position: 0 -670px;
+}
+
+div.contextmenu ul.iconized li a.more span.icon
+{
+  background-position: 0 -690px;
+}
+
+div.contextmenu ul.iconized li a.compose span.icon
+{
+  background-position: 0 -281px;
+}
+
+div.contextmenu ul.iconized li a.print span.icon
+{
+  background-position: 0 -710px;
+}
+
+div.contextmenu ul.iconized li a.removegroup span.icon
+{
+  background-position: 0 -347px;
+}
+
+div.contextmenu ul.iconized li a.cmd_mark-all-read span.icon
+{
+  background-position: 0 -26px;
+}
+
+div.contextmenu ul.iconized li a.cmd_expunge span.icon
+{
+  background-position: 0 -523px;
+}
+
+div.contextmenu ul.iconized li a.cmd_purge span.icon
+{
+  background-position: 0 -504px;
+}
+
+div.contextmenu ul.iconized li a.collapseall span.icon
+{
+  background-position: 0 -326px;
+}
+
+div.contextmenu ul.iconized li a.expandall span.icon
+{
+  background-position: 0 -305px;
+}
+
+div.contextmenu ul.iconized li a.openfolder span.icon
+{
+  background-position: 0 -484px;
+}
+
+div.contextmenu ul.iconized li a.addto span.icon,
+div.contextmenu ul.iconized li a.addcc span.icon,
+div.contextmenu ul.iconized li a.addbcc span.icon
+{
+  background-position: 0 -281px;
+}
+
+div.contextmenu ul.iconized li a.vcard span.icon
+{
+  background-position: 0 -738px;
+}
+
+div.contextmenu ul.iconized li a.movecontact span.icon
+{
+  background-position: 0 -632px;
+}
+
+div.contextmenu ul.iconized li a.copycontact span.icon
+{
+  background-position: 0 -651px;
+}
+
+div.contextmenu ul.iconized li a.export span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -543px;
+}
+
+div.contextmenu ul.iconized li a.exportalllink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -568px;
+}
+
+div.contextmenu ul.iconized li a.exportsellink span.icon
+{
+  background: url(images/contexticons.png) no-repeat 0 -543px;
+}
+
+
+div.contextmenu ul.iconized li a.cmd_group-create span.icon,
+div.contextmenu ul.iconized li a.assigngroup span.icon
+{
+  background-position: 0 -613px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-rename span.icon
+{
+  background-position: 0 -591px;
+}
+
+div.contextmenu ul.iconized li a.cmd_group-delete span.icon
+{
+  background-position: 0 -96px;
+}
+
+div.contextmenu ul.iconized li a.cmd_search-delete span.icon
+{
+  background-position: 0 -96px;
+}
+
+/*** address book selector ***/
+
+#addressbook-selector,
+#addressgroup-selector
+{
+	z-index: 1000;
+}
+
+#addressbook-selector li a span,
+#addressgroup-selector li a span
+{
+  background: url(images/contexticons.png) no-repeat 0 20px;
+  display: block;
+  height: 17px;
+  min-height: 14px;
+  padding: 4px 4px 1px 28px;
+  overflow: hidden;
+  max-width: 120px;
+  text-overflow: ellipsis;
+}
+
+#addressbook-selector li a.addressbook span
+{
+	background-position: 0 -397px;
+}
+
+#addressbook-selector li a.contactgroup span,
+#addressgroup-selector li a.contactgroup span
+{
+	background-position: 0 -418px;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contextmenu/skins/larry/functions.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,95 @@
+/**
+ * ContextMenu plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (C) 2014 Philip Weir
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+rcube_webmail.prototype.context_menu_popup_pattern = /UI\.toggle_popup\(\'([^\']+)\'/;
+rcube_webmail.prototype.context_menu_button_active_class = new Array('active');
+rcube_webmail.prototype.context_menu_button_disabled_class = new Array('disabled');
+
+function add_menu_text(menu, p) {
+	if (menu == 'composeto') {
+		if ($(p.item).children('a').hasClass('addto')) {
+			$(p.item).children('a').children('span').text($('#compose-contacts div.boxfooter a.addto').attr('title'));
+		}
+		else if ($(p.item).children('a').hasClass('addcc')) {
+			$(p.item).children('a').children('span').text($('#compose-contacts div.boxfooter a.addcc').attr('title'));
+		}
+		else if ($(p.item).children('a').hasClass('addbcc')) {
+			$(p.item).children('a').children('span').text($('#compose-contacts div.boxfooter a.addbcc').attr('title'));
+		}
+		else if ($(p.item).children('a').hasClass('vcard')) {
+			$(p.item).children('a').children('span').text($('#compose-contacts div.boxfooter a.vcard').attr('title'));
+		}
+	}
+	else if (menu == 'contactlist') {
+		if ($(p.item).children('a').hasClass('delete')) {
+			$(p.item).children('a').children('span').text($('#addresslist div.boxfooter a.delete').attr('title'));
+		}
+		else if ($(p.item).children('a').hasClass('removegroup')) {
+			$(p.item).children('a').children('span').text($('#addresslist div.boxfooter a.removegroup').attr('title'));
+		}
+	}
+}
+
+function reorder_contact_menu(p) {
+	// put export link last
+	var ul = p.ref.container.find('ul:first');
+	$(p.ref.container).find('a.export').parent('li').appendTo(ul);
+
+	// put assign group link before remove
+	$(p.ref.container).find('a.assigngroup').parent('li').insertBefore($(p.ref.container).find('a.removegroup').parent('li'));
+}
+
+$(document).ready(function() {
+	if (window.rcmail) {
+		if (rcmail.env.task == 'mail' && rcmail.env.action == '') {
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'messagelist', 'menu_source': '#messagetoolbar'}); } );
+			rcmail.add_onload("rcm_foldermenu_init('#mailboxlist li', {'menu_source': ['#rcmFolderMenu', '#mailboxoptionsmenu']})");
+		}
+		else if (rcmail.env.task == 'mail' && rcmail.env.action == 'compose') {
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'composeto', 'menu_source': '#compose-contacts div.boxfooter', 'list_object': rcmail.contact_list}, {'insertitem': function(p) { add_menu_text('composeto', p); }}); } );
+		}
+		else if (rcmail.env.task == 'addressbook' && rcmail.env.action == '') {
+			rcmail.addEventListener('insertrow', function(props) { rcm_listmenu_init(props.row.id, {'menu_name': 'contactlist', 'menu_source': ['#addressbooktoolbar','#addresslist div.boxfooter a.delete','#addresslist div.boxfooter a.removegroup', '#rcmAddressBookMenu'], 'list_object': rcmail.contact_list}, {
+				'insertitem': function(p) { add_menu_text('contactlist', p); },
+				'init': function(p) { reorder_contact_menu(p); },
+				'afteractivate': function(p) {
+					p.ref.list_selection(false, rcmail.env.contextmenu_selection);
+
+					// count the number of groups in the current addressbook
+					if (!rcmail.env.group || rcmail.env.readonly)
+						p.ref.container.find('a.removegroup').removeClass('active').addClass('disabled');
+
+					var groupcount = 0;
+					if (!rcmail.env.readonly && rcmail.env.address_sources[rcmail.env.source] && rcmail.env.address_sources[rcmail.env.source].groups)
+						$.each(rcmail.env.contactgroups, function(){ if (this.source === rcmail.env.source) groupcount++ });
+
+					if (groupcount > 0)
+						p.ref.container.find('a.assigngroup').removeClass('disabled').addClass('active');
+					else
+						p.ref.container.find('a.assigngroup').removeClass('active').addClass('disabled');
+				},
+				'aftercommand': function(p) {
+					if ($(p.el).hasClass('active') && p.command == 'group-remove-selected')
+						rcmail.command('listgroup', {'source': rcmail.env.source, 'id': rcmail.env.group}, p.el);
+				}
+			}); } );
+			rcmail.add_onload("rcm_abookmenu_init('#directorylist li, #savedsearchlist li', {'menu_source': ['#directorylist-footer', '#groupoptionsmenu']}, {'insertitem': function(p) { add_menu_text('abooklist', p); }})");
+			rcmail.addEventListener('group_insert', function(props) { rcm_abookmenu_init(props.li, {'menu_source': ['#directorylist-footer', '#groupoptionsmenu']}); } );
+			rcmail.addEventListener('abook_search_insert', function(props) { rcm_abookmenu_init(rcmail.savedsearchlist.get_item('S' + props.id), {'menu_source': ['#directorylist-footer', '#groupoptionsmenu']}); } );
+		}
+	}
+});
\ No newline at end of file
Binary file plugins/contextmenu/skins/larry/images/contexticons.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/database_attachments/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+{
+    "name": "roundcube/database_attachments",
+    "type": "roundcube-plugin",
+    "description": "This plugin which provides database backed storage for temporary attachment file handling. The primary advantage of this plugin is its compatibility with round-robin dns multi-server Roundcube installations.",
+    "license": "GPLv2",
+    "version": "1.2",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        },
+        {
+            "name": "Ziba Scott",
+            "email": "ziba@umich.edu",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3",
+        "roundcube/filesystem_attachments": ">=1.0.0"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/database_attachments/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+<?php
+
+// By default this plugin stores attachments in filesystem
+// and copies them into sql database.
+// You can change it to use 'memcache' or 'apc'.
+// -----------------------------------------------------------
+// WARNING: Remember to set max_allowed_packet in database or
+//          config to match with expected max attachment size.
+// -----------------------------------------------------------
+$config['database_attachments_cache'] = 'db';
+
+// Attachment data expires after specied TTL time in seconds (max.2592000).
+// Default is 12 hours.
+$config['database_attachments_cache_ttl'] = 12 * 60 * 60;
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/database_attachments/database_attachments.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,192 @@
+<?php
+
+/**
+ * Database Attachments
+ *
+ * This plugin which provides database backed storage for temporary
+ * attachment file handling. The primary advantage of this plugin
+ * is its compatibility with round-robin dns multi-server roundcube
+ * installations.
+ *
+ * This plugin relies on the core filesystem_attachments plugin
+ *
+ * @author Ziba Scott <ziba@umich.edu>
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+if (class_exists('filesystem_attachments', false) && !defined('TESTS_DIR')) {
+    die("Configuration issue. There can be only one enabled plugin for attachments handling");
+}
+
+require_once INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php';
+
+class database_attachments extends filesystem_attachments
+{
+    // Cache object
+    protected $cache;
+
+    // A prefix for the cache key used in the session and in the key field of the cache table
+    const PREFIX = "ATTACH";
+
+    /**
+     * Save a newly uploaded attachment
+     */
+    function upload($args)
+    {
+        $args['status'] = false;
+
+        $cache = $this->get_cache();
+        $key   = $this->_key($args);
+        $data  = file_get_contents($args['path']);
+
+        if ($data === false) {
+            return $args;
+        }
+
+        $data   = base64_encode($data);
+        $status = $cache->write($key, $data);
+
+        if ($status) {
+            $args['id']     = $key;
+            $args['status'] = true;
+            $args['path']   = null;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Save an attachment from a non-upload source (draft or forward)
+     */
+    function save($args)
+    {
+        $args['status'] = false;
+
+        $cache = $this->get_cache();
+        $key   = $this->_key($args);
+
+        if ($args['path']) {
+            $args['data'] = file_get_contents($args['path']);
+
+            if ($args['data'] === false) {
+                return $args;
+            }
+
+            $args['path'] = null;
+        }
+
+        $data   = base64_encode($args['data']);
+        $status = $cache->write($key, $data);
+
+        if ($status) {
+            $args['id'] = $key;
+            $args['status'] = true;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Remove an attachment from storage
+     * This is triggered by the remove attachment button on the compose screen
+     */
+    function remove($args)
+    {
+        $cache  = $this->get_cache();
+        $status = $cache->remove($args['id']);
+
+        $args['status'] = true;
+
+        return $args;
+    }
+
+    /**
+     * When composing an html message, image attachments may be shown
+     * For this plugin, $this->get() will check the file and
+     * return it's contents
+     */
+    function display($args)
+    {
+        return $this->get($args);
+    }
+
+    /**
+     * When displaying or sending the attachment the file contents are fetched
+     * using this method. This is also called by the attachment_display hook.
+     */
+    function get($args)
+    {
+        $cache = $this->get_cache();
+        $data  = $cache->read($args['id']);
+
+        if ($data !== null && $data !== false) {
+            $args['data'] = base64_decode($data);
+            $args['status'] = true;
+        }
+        else {
+            $args['status'] = false;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Delete all temp files associated with this user
+     */
+    function cleanup($args)
+    {
+        // check if cache object exist, it may be empty on session_destroy (#1489726)
+        if ($cache = $this->get_cache()) {
+            $cache->remove($args['group'], true);
+        }
+    }
+
+    /**
+     * Helper method to generate a unique key for the given attachment file
+     */
+    protected function _key($args)
+    {
+        $uname = $args['path'] ?: $args['name'];
+        return $args['group'] . md5(time() . $uname . $_SESSION['user_id']);
+    }
+
+    /**
+     * Initialize and return cache object
+     */
+    protected function get_cache()
+    {
+        if (!$this->cache) {
+            $this->load_config();
+
+            $rcmail = rcube::get_instance();
+            $ttl    = 12 * 60 * 60; // default: 12 hours
+            $ttl    = $rcmail->config->get('database_attachments_cache_ttl', $ttl);
+            $type   = $rcmail->config->get('database_attachments_cache', 'db');
+            $prefix = self::PREFIX;
+
+            // Add session identifier to the prefix to prevent from removing attachments
+            // in other sessions of the same user (#1490542)
+            if ($id = session_id()) {
+                $prefix .= $id;
+            }
+
+            // Init SQL cache (disable cache data serialization)
+            $this->cache = $rcmail->get_cache($prefix, $type, $ttl, false);
+        }
+
+        return $this->cache;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/debug_logger/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/debug_logger",
+    "type": "roundcube-plugin",
+    "description": "Enhanced logging for debugging purposes. It is not recommened to be enabled on production systems without testing because of the somewhat increased memory, cpu and disk i/o overhead.",
+    "license": "GPLv2",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Ziba Scott",
+            "email": "ziba@umich.edu",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/debug_logger/debug_logger.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * Debug Logger
+ *
+ * Enhanced logging for debugging purposes.  It is not recommened
+ * to be enabled on production systems without testing because of
+ * the somewhat increased memory, cpu and disk i/o overhead.
+ *
+ * Debug Logger listens for existing console("message") calls and
+ * introduces start and end tags as well as free form tagging
+ * which can redirect messages to files.  The resulting log files
+ * provide timing and tag quantity results.
+ *
+ * Enable the plugin in config.inc.php and add your desired
+ * log types and files.
+ *
+ * @author Ziba Scott
+ * @website http://roundcube.net
+ *
+ * Example:
+ *
+ * config.inc.php:
+ *
+ *   // $config['debug_logger'][type of logging] = name of file in log_dir
+ *   // The 'master' log includes timing information
+ *   $config['debug_logger']['master'] = 'master';
+ *   // If you want sql messages to also go into a separate file 
+ *   $config['debug_logger']['sql'] = 'sql';
+ *
+ * index.php (just after $RCMAIL->plugins->init()):
+ *
+ *   console("my test","start");
+ *   console("my message");
+ *   console("my sql calls","start");
+ *   console("cp -r * /dev/null","shell exec");
+ *   console("select * from example","sql");
+ *   console("select * from example","sql");
+ *   console("select * from example","sql");
+ *   console("end");
+ *   console("end");
+ *
+ *
+ * logs/master (after reloading the main page):
+ *
+ *   [17-Feb-2009 16:51:37 -0500] start: Task: mail. 
+ *   [17-Feb-2009 16:51:37 -0500]   start: my test
+ *   [17-Feb-2009 16:51:37 -0500]     my message
+ *   [17-Feb-2009 16:51:37 -0500]     shell exec: cp -r * /dev/null
+ *   [17-Feb-2009 16:51:37 -0500]     start: my sql calls
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ *   [17-Feb-2009 16:51:37 -0500]     end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3, 
+ *   [17-Feb-2009 16:51:37 -0500]   end: my test - 0.0055 seconds shell exec: 1, sql: 3, 
+ *   [17-Feb-2009 16:51:38 -0500] end: Task: mail.  - 0.8854 seconds shell exec: 1, sql: 3, 
+ * 
+ * logs/sql (after reloading the main page):
+ *
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
+ */
+class debug_logger extends rcube_plugin
+{
+    function init()
+    {
+        require_once(__DIR__ . '/runlog/runlog.php');
+        $this->runlog = new runlog();
+
+        if(!rcmail::get_instance()->config->get('log_dir')){
+            rcmail::get_instance()->config->set('log_dir',INSTALL_PATH.'logs');
+        }
+
+        $log_config = rcmail::get_instance()->config->get('debug_logger',array());
+
+        foreach ($log_config as $type => $file){
+            $this->runlog->set_file(rcmail::get_instance()->config->get('log_dir').'/'.$file, $type);
+        }
+
+        $start_string = "";
+        $action = rcmail::get_instance()->action;
+        $task = rcmail::get_instance()->task;
+        if($action){
+               $start_string .= "Action: ".$action.". ";
+        }
+        if($task){
+               $start_string .= "Task: ".$task.". ";
+        }
+        $this->runlog->start($start_string);
+
+        $this->add_hook('console', array($this, 'console'));
+        $this->add_hook('authenticate', array($this, 'authenticate'));
+    }
+
+    function authenticate($args){
+        $this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']);
+        return $args;
+    }
+
+    function console($args){
+        $note = $args[0];
+        $type = $args[1];
+
+
+        if(!isset($args[1])){
+            // This could be extended to detect types based on the 
+            // file which called console. For now only rcube_imap/rcube_storage is supported
+            $bt = debug_backtrace();
+            $file  = $bt[3]['file'];
+            switch(basename($file)){
+                case 'rcube_imap.php':
+                    $type = 'imap';
+                    break;
+                case 'rcube_storage.php':
+                    $type = 'storage';
+                    break;
+                default:
+                    $type = FALSE; 
+                    break; 
+            }
+        }
+        switch($note){
+            case 'end':
+                $type = 'end';
+                break;
+        }
+
+
+        switch($type){
+            case 'start':
+                $this->runlog->start($note);
+                break;
+            case 'end':
+                $this->runlog->end();
+                break;
+            default:
+                $this->runlog->note($note, $type);
+                break;
+        }
+        return $args;
+    }
+
+    function __destruct()
+    {
+        if ($this->runlog)
+            $this->runlog->end();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/debug_logger/runlog/runlog.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,233 @@
+<?php
+
+/**
+ * runlog
+ *
+ * @author Ziba Scott <ziba@umich.edu>
+ */
+class runlog {
+
+    private $start_time   = FALSE;
+    private $parent_stack = array();
+    private $file_handles = array();
+    private $indent       = 0;
+    private $run_log      = array();
+
+    public $print_to_console = FALSE;
+    public $threshold        = 0;
+    public $tag_count        = array();
+    public $timestamp        = "d-M-Y H:i:s O";
+    public $max_line_size    = 150;
+
+    function runlog()
+    {
+        $this->start_time = microtime(true);
+    }
+
+    public function start($name, $tag = false)
+    {
+        $this->run_log[] = array(
+                'type'    => 'start',
+                'tag'     => $tag,
+                'index'   => count($this->run_log),
+                'value'   => $name,
+                'time'    => microtime(true),
+                'parents' => $this->parent_stack,
+                'ended'   => false,
+        );
+
+        $this->parent_stack[] = $name;
+
+        $this->print_to_console("start: ".$name, $tag, 'start');
+        $this->print_to_file("start: ".$name, $tag, 'start');
+        $this->indent++;
+    }
+
+    public function end()
+    {
+        $name = array_pop($this->parent_stack);
+        foreach ($this->run_log as $k => $entry) {
+            if ($entry['value'] == $name && $entry['type'] == 'start' && !$entry['ended']) {
+                $lastk = $k;
+            }
+        }
+
+        $start = $this->run_log[$lastk]['time'];
+        $this->run_log[$lastk]['duration'] = microtime(true) - $start;
+        $this->run_log[$lastk]['ended'] = true;
+        $this->run_log[] = array(
+                'type'     => 'end',
+                'tag'      =>  $this->run_log[$lastk]['tag'],
+                'index'    => $lastk,
+                'value'    => $name,
+                'time'     => microtime(true),
+                'duration' => microtime(true) - $start,
+                'parents'  => $this->parent_stack,
+        );
+
+        $this->indent--;
+        if ($this->run_log[$lastk]['duration'] >= $this->threshold) {
+            $tag_report = "";
+            foreach ($this->tag_count as $tag => $count){
+                $tag_report .= "$tag: $count, ";
+            }
+            if (!empty($tag_report)) {
+//                $tag_report = "\n$tag_report\n";
+            }
+            $end_txt = sprintf("end: $name - %0.4f seconds $tag_report", $this->run_log[$lastk]['duration']);
+            $this->print_to_console($end_txt, $this->run_log[$lastk]['tag'], 'end');
+            $this->print_to_file($end_txt,  $this->run_log[$lastk]['tag'], 'end');
+        }
+    }
+
+    public function increase_tag_count($tag)
+    {
+        if (!isset($this->tag_count[$tag])) {
+            $this->tag_count[$tag] = 0;
+        }
+
+        $this->tag_count[$tag]++;
+    }
+
+    public function get_text()
+    {
+        $text = "";
+        foreach ($this->run_log as $entry){
+            $text .= str_repeat("   ",count($entry['parents']));
+            if ($entry['tag'] != 'text'){
+                $text .= $entry['tag'].': ';
+            }
+            $text .= $entry['value'];
+
+            if ($entry['tag'] == 'end') {
+                $text .= sprintf(" - %0.4f seconds", $entry['duration']);
+            }
+
+            $text .= "\n";
+        }
+
+        return $text;
+    }
+
+    public function set_file($filename, $tag = 'master')
+    {
+        if (!isset($this->file_handle[$tag])) {
+            $this->file_handles[$tag] = fopen($filename, 'a');
+            if (!$this->file_handles[$tag]) {
+                trigger_error('Could not open file for writing: '.$filename);
+            }
+        }
+    }
+
+    public function note($msg, $tag = false)
+    {
+        if ($tag) {
+            $this->increase_tag_count($tag);
+        }
+        if (is_array($msg)) {
+            $msg = '<pre>' . print_r($msg, true) . '</pre>';
+        }
+        $this->debug_messages[] = $msg;
+        $this->run_log[] = array(
+                'type'    => 'note',
+                'tag'     => $tag ?: 'text',
+                'value'   => htmlentities($msg),
+                'time'    => microtime(true),
+                'parents' => $this->parent_stack,
+        );
+
+        $this->print_to_file($msg, $tag);
+        $this->print_to_console($msg, $tag);
+    }
+
+    public function print_to_file($msg, $tag = false, $type = false)
+    {
+        if (!$tag) {
+            $file_handle_tag = 'master';
+        }
+        else{
+            $file_handle_tag = $tag;
+        }
+
+        if ($file_handle_tag != 'master' && isset($this->file_handles[$file_handle_tag])) {
+            $buffer = $this->get_indent();
+            $buffer .= "$msg\n";
+            if (!empty($this->timestamp)) {
+                $buffer = sprintf("[%s] %s",date($this->timestamp, time()), $buffer);
+            }
+            fwrite($this->file_handles[$file_handle_tag], wordwrap($buffer, $this->max_line_size, "\n     "));
+        }
+
+        if (isset($this->file_handles['master']) && $this->file_handles['master']) {
+            $buffer = $this->get_indent();
+            if ($tag) {
+                $buffer .= "$tag: ";
+            }
+            $msg = str_replace("\n","",$msg);
+            $buffer .= "$msg";
+            if (!empty($this->timestamp)) {
+                $buffer = sprintf("[%s] %s",date($this->timestamp, time()), $buffer);
+            }
+            if(strlen($buffer) > $this->max_line_size){
+                $buffer = substr($buffer,0,$this->max_line_size - 3) . "...";
+            }
+            fwrite($this->file_handles['master'], $buffer."\n");
+        }
+    }
+
+    public function print_to_console($msg, $tag = false)
+    {
+        if ($this->print_to_console) {
+            if (is_array($this->print_to_console)) {
+                if (in_array($tag, $this->print_to_console)) {
+                    echo $this->get_indent();
+                    if ($tag) {
+                        echo "$tag: ";
+                    }
+                    echo "$msg\n";
+                }
+            }
+            else {
+                echo $this->get_indent();
+                if ($tag) {
+                    echo "$tag: ";
+                }
+                echo "$msg\n";
+            }
+        }
+    }
+
+    public function print_totals()
+    {
+        $totals = array();
+        foreach ($this->run_log as $entry) {
+            if ($entry['type'] == 'start' && $entry['ended']) {
+                $totals[$entry['value']]['duration'] += $entry['duration'];
+                $totals[$entry['value']]['count'] += 1;
+            }
+        }
+
+        if ($this->file_handle) {
+            foreach ($totals as $name => $details) {
+                fwrite($this->file_handle,$name.": ".number_format($details['duration'],4)."sec,  ".$details['count']." calls \n");
+            }
+        }
+    }
+
+    private function get_indent()
+    {
+        $buf = "";
+        for ($i = 0; $i < $this->indent; $i++) {
+            $buf .= "  ";
+        }
+        return $buf;
+    }
+
+
+    function  __destruct()
+    {
+        foreach ($this->file_handles as $handle) {
+            fclose($handle);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/emoticons/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/emoticons",
+    "type": "roundcube-plugin",
+    "description": "Plugin that adds emoticons support.",
+    "license": "GPLv3+",
+    "version": "2.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/emoticons/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+<?php
+
+// Enable emoticons in plain text messages preview
+$config['emoticons_display'] = false;
+
+// Enable emoticons in compose editor (HTML)
+$config['emoticons_compose'] = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/emoticons/emoticons.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,185 @@
+<?php
+
+/**
+ * Emoticons
+ *
+ * Plugin to replace emoticons in plain text message body with real icons.
+ * Also it enables emoticons in HTML compose editor. Both features are optional.
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ * @author Aleksander Machniak
+ * @website http://roundcube.net
+ */
+class emoticons extends rcube_plugin
+{
+    public $task = 'mail|settings|utils';
+
+
+    /**
+     * Plugin initilization.
+     */
+    function init()
+    {
+        $rcube = rcube::get_instance();
+
+        $this->add_hook('message_part_after', array($this, 'message_part_after'));
+        $this->add_hook('message_outgoing_body', array($this, 'message_outgoing_body'));
+        $this->add_hook('html2text', array($this, 'html2text'));
+        $this->add_hook('html_editor', array($this, 'html_editor'));
+
+        if ($rcube->task == 'settings') {
+            $this->add_hook('preferences_list', array($this, 'preferences_list'));
+            $this->add_hook('preferences_save', array($this, 'preferences_save'));
+        }
+    }
+
+    /**
+     * 'message_part_after' hook handler to replace common plain text emoticons
+     * with emoticon images (<img>)
+     */
+    function message_part_after($args)
+    {
+        if ($args['type'] == 'plain') {
+            $this->load_config();
+
+            $rcube = rcube::get_instance();
+            if (!$rcube->config->get('emoticons_display', false)) {
+                return $args;
+            }
+
+            require_once __DIR__ . '/emoticons_engine.php';
+
+            $args['body'] = emoticons_engine::text2icons($args['body']);
+        }
+
+        return $args;
+    }
+
+    /**
+     * 'message_outgoing_body' hook handler to replace image emoticons from TinyMCE
+     * editor with image attachments.
+     */
+    function message_outgoing_body($args)
+    {
+        if ($args['type'] == 'html') {
+            $this->load_config();
+
+            $rcube = rcube::get_instance();
+            if (!$rcube->config->get('emoticons_compose', true)) {
+                return $args;
+            }
+
+            require_once __DIR__ . '/emoticons_engine.php';
+
+            // look for "emoticon" images from TinyMCE and change their src paths to
+            // be file paths on the server instead of URL paths.
+            $images = emoticons_engine::replace($args['body']);
+
+            // add these images as attachments to the MIME message
+            foreach ($images as $img_name => $img_file) {
+                $args['message']->addHTMLImage($img_file, 'image/gif', '', true, $img_name);
+            }
+        }
+
+        return $args;
+    }
+
+    /**
+     * 'html2text' hook handler to replace image emoticons from TinyMCE
+     * editor with plain text emoticons.
+     *
+     * This is executed on html2text action, i.e. when switching from HTML to text
+     * in compose window (or similar place). Also when generating alternative
+     * text/plain part.
+     */
+    function html2text($args)
+    {
+        $rcube = rcube::get_instance();
+
+        if ($rcube->action == 'html2text' || $rcube->action == 'send') {
+            $this->load_config();
+
+            if (!$rcube->config->get('emoticons_compose', true)) {
+                return $args;
+            }
+
+            require_once __DIR__ . '/emoticons_engine.php';
+
+            $args['body'] = emoticons_engine::icons2text($args['body']);
+        }
+
+        return $args;
+    }
+
+    /**
+     * 'html_editor' hook handler, where we enable emoticons in TinyMCE
+     */
+    function html_editor($args)
+    {
+        $rcube = rcube::get_instance();
+
+        $this->load_config();
+
+        if ($rcube->config->get('emoticons_compose', true)) {
+            $args['extra_plugins'][] = 'emoticons';
+            $args['extra_buttons'][] = 'emoticons';
+        }
+
+        return $args;
+    }
+
+    /**
+     * 'preferences_list' hook handler
+     */
+    function preferences_list($args)
+    {
+        $rcube         = rcube::get_instance();
+        $dont_override = $rcube->config->get('dont_override', array());
+
+        if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
+            $this->load_config();
+            $this->add_texts('localization');
+
+            $field_id = 'emoticons_display';
+            $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1));
+
+            $args['blocks']['main']['options']['emoticons_display'] = array(
+                    'title'   => $this->gettext('emoticonsdisplay'),
+                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_display', false)))
+            );
+        }
+        else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
+            $this->load_config();
+            $this->add_texts('localization');
+
+            $field_id = 'emoticons_compose';
+            $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1));
+
+            $args['blocks']['main']['options']['emoticons_compose'] = array(
+                    'title'   => $this->gettext('emoticonscompose'),
+                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_compose', true)))
+            );
+        }
+
+        return $args;
+    }
+
+    /**
+     * 'preferences_save' hook handler
+     */
+    function preferences_save($args)
+    {
+        $rcube         = rcube::get_instance();
+        $dont_override = $rcube->config->get('dont_override', array());
+
+        if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
+            $args['prefs']['emoticons_display'] = rcube_utils::get_input_value('_emoticons_display', rcube_utils::INPUT_POST) ? true : false;
+        }
+        else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
+            $args['prefs']['emoticons_compose'] = rcube_utils::get_input_value('_emoticons_compose', rcube_utils::INPUT_POST) ? true : false;
+        }
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/emoticons/emoticons_engine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ * @author Aleksander Machniak
+ */
+class emoticons_engine
+{
+    const IMG_PATH = 'program/js/tinymce/plugins/emoticons/img/';
+
+    /**
+     * Replaces TinyMCE's emoticon images with plain-text representation
+     *
+     * @param string $html HTML content
+     *
+     * @return string HTML content
+     */
+    public static function icons2text($html)
+    {
+        $emoticons = array(
+            '8-)' => 'smiley-cool',
+            ':-#' => 'smiley-foot-in-mouth',
+            ':-*' => 'smiley-kiss',
+            ':-X' => 'smiley-sealed',
+            ':-P' => 'smiley-tongue-out',
+            ':-@' => 'smiley-yell',
+            ":'(" => 'smiley-cry',
+            ':-(' => 'smiley-frown',
+            ':-D' => 'smiley-laughing',
+            ':-)' => 'smiley-smile',
+            ':-S' => 'smiley-undecided',
+            ':-$' => 'smiley-embarassed',
+            'O:-)' => 'smiley-innocent',
+            ':-|' => 'smiley-money-mouth',
+            ':-O' => 'smiley-surprised',
+            ';-)' => 'smiley-wink',
+        );
+
+        foreach ($emoticons as $idx => $file) {
+            // <img title="Cry" src="http://.../program/js/tinymce/plugins/emoticons/img/smiley-cry.gif" border="0" alt="Cry" />
+            $file      = preg_quote(self::IMG_PATH . $file . '.gif', '/');
+            $search[]  = '/<img (title="[a-z ]+" )?src="[^"]+' . $file . '"[^>]+\/>/i';
+            $replace[] = $idx;
+        }
+
+        return preg_replace($search, $replace, $html);
+    }
+
+    /**
+     * Replace common plain text emoticons with empticon <img> tags
+     *
+     * @param string $text Text
+     *
+     * @return string Converted text
+     */
+    public static function text2icons($text)
+    {
+        // This is a lookbehind assertion which will exclude html entities
+        // E.g. situation when ";)" in "&quot;)" shouldn't be replaced by the icon
+        // It's so long because of assertion format restrictions
+        $entity = '(?<!&'
+            . '[a-zA-Z0-9]{2}' . '|' . '#[0-9]{2}' . '|'
+            . '[a-zA-Z0-9]{3}' . '|' . '#[0-9]{3}' . '|'
+            . '[a-zA-Z0-9]{4}' . '|' . '#[0-9]{4}' . '|'
+            . '[a-zA-Z0-9]{5}' . '|'
+            . '[a-zA-Z0-9]{6}' . '|'
+            . '[a-zA-Z0-9]{7}'
+            . ')';
+
+        // map of emoticon replacements
+        $map = array(
+            '/(?<!mailto):D/'   => self::img_tag('smiley-laughing.gif',    ':D'    ),
+            '/:-D/'             => self::img_tag('smiley-laughing.gif',    ':-D'   ),
+            '/:\(/'             => self::img_tag('smiley-frown.gif',       ':('    ),
+            '/:-\(/'            => self::img_tag('smiley-frown.gif',       ':-('   ),
+            '/'.$entity.';\)/'  => self::img_tag('smiley-wink.gif',        ';)'    ),
+            '/'.$entity.';-\)/' => self::img_tag('smiley-wink.gif',        ';-)'   ),
+            '/8\)/'             => self::img_tag('smiley-cool.gif',        '8)'    ),
+            '/8-\)/'            => self::img_tag('smiley-cool.gif',        '8-)'   ),
+            '/(?<!mailto):O/i'  => self::img_tag('smiley-surprised.gif',   ':O'    ),
+            '/(?<!mailto):-O/i' => self::img_tag('smiley-surprised.gif',   ':-O'   ),
+            '/(?<!mailto):P/i'  => self::img_tag('smiley-tongue-out.gif',  ':P'    ),
+            '/(?<!mailto):-P/i' => self::img_tag('smiley-tongue-out.gif',  ':-P'   ),
+            '/(?<!mailto):@/i'  => self::img_tag('smiley-yell.gif',        ':@'    ),
+            '/(?<!mailto):-@/i' => self::img_tag('smiley-yell.gif',        ':-@'   ),
+            '/O:\)/i'           => self::img_tag('smiley-innocent.gif',    'O:)'   ),
+            '/O:-\)/i'          => self::img_tag('smiley-innocent.gif',    'O:-)'  ),
+            '/(?<!O):\)/'       => self::img_tag('smiley-smile.gif',       ':)'    ),
+            '/(?<!O):-\)/'      => self::img_tag('smiley-smile.gif',       ':-)'   ),
+            '/(?<!mailto):\$/'  => self::img_tag('smiley-embarassed.gif',  ':$'    ),
+            '/(?<!mailto):-\$/' => self::img_tag('smiley-embarassed.gif',  ':-$'   ),
+            '/(?<!mailto):\*/i'  => self::img_tag('smiley-kiss.gif',       ':*'    ),
+            '/(?<!mailto):-\*/i' => self::img_tag('smiley-kiss.gif',       ':-*'   ),
+            '/(?<!mailto):S/i'  => self::img_tag('smiley-undecided.gif',   ':S'    ),
+            '/(?<!mailto):-S/i' => self::img_tag('smiley-undecided.gif',   ':-S'   ),
+        );
+
+        return preg_replace(array_keys($map), array_values($map), $text);
+    }
+
+    protected static function img_tag($ico, $title)
+    {
+        return html::img(array('src' => './' . self::IMG_PATH . $ico, 'title' => $title));
+    }
+
+    /**
+     * Replace emoticon icons <img> 'src' attribute, so it can
+     * be replaced with real file by Mail_Mime.
+     *
+     * @param string &$html HTML content
+     *
+     * @return array List of image files
+     */
+    public static function replace(&$html)
+    {
+        // Replace this:
+        // <img src="http[s]://.../tinymce/plugins/emoticons/img/smiley-cool.gif" ... />
+        // with this:
+        // <img src="/path/on/server/.../tinymce/plugins/emoticons/img/smiley-cool.gif" ... />
+
+        $rcube      = rcube::get_instance();
+        $assets_dir = $rcube->config->get('assets_dir');
+        $path       = unslashify($assets_dir ?: INSTALL_PATH) . '/' . self::IMG_PATH;
+        $offset     = 0;
+        $images     = array();
+
+        // remove any null-byte characters before parsing
+        $html = preg_replace('/\x00/', '', $html);
+
+        if (preg_match_all('# src=[\'"]([^\'"]+)#', $html, $matches, PREG_OFFSET_CAPTURE)) {
+            foreach ($matches[1] as $m) {
+                // find emoticon image tags
+                if (preg_match('#'. self::IMG_PATH . '(.*)$#', $m[0], $imatches)) {
+                    $image_name = $imatches[1];
+
+                    // sanitize image name so resulting attachment doesn't leave images dir
+                    $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i', '', $image_name);
+                    $image_file = $path . $image_name;
+
+                    // Add the same image only once
+                    $images[$image_name] = $image_file;
+
+                    $html    = substr_replace($html, $image_file, $m[1] + $offset, strlen($m[0]));
+                    $offset += strlen($image_file) - strlen($m[0]);
+                }
+            }
+        }
+
+        return $images;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/emoticons/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/emoticons/localization/<lang>.inc                             |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Emoticons plugin           |
+ | Copyright (C) 2012-2015, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
+*/
+
+$labels = array();
+$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages';
+$labels['emoticonscompose'] = 'Enable emoticons';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,65 @@
+Enigma Plugin for Roundcube
+
+This plugin adds support for viewing and sending of signed and encrypted
+messages in PGP (RFC 2440) and PGP/MIME (RFC 3156) format.
+
+The plugin uses gpg binary on the server and stores all keys
+(including private keys of the users) on the server.
+Encryption/decryption is done server-side. So, this plugin
+is for users that trust the server.
+
+
+Implemented features:
+---------------------
++ PGP: signatures verification
++ PGP: messages decryption
++ PGP: Sending of encrypted/signed messages
++ PGP: keys management UI (key import, export, delete)
++ PGP: key generation (client- or server-side)
++ Handling of PGP keys attached to incoming messages
++ User preferences to disable plugin features
++ Attaching public keys to email
++ Key server(s) support (search, import)
+
+
+TODO:
+-----
+- Handling of big messages with temp files (? - security)
+- Key info in contact details page (optional)
+- Extended key management:
+   - disable,
+   - revoke,
+   - change expiration date, change passphrase, add photo,
+   - manage user IDs
+   - export private keys
+- Generate revocation certs
+- Search filter to see invalid/expired keys
+- Key server(s) support (upload, refresh)
+- Mark keys as trusted/untrasted, display appropriate message in verify/decrypt status
+- Support for multi-server installations (store keys in sql database? probably impossible with GnuPG 2.1)
+- Performance improvements:
+   - cache decrypted message key id so we can skip decryption if we have no password in session
+   - cache (last or successful only?) sig verification status to not verify on every msg preview (optional)
+- S/MIME: Certs generation (?)
+- S/MIME: Certs management
+- S/MIME: signed messages verification
+- S/MIME: encrypted messages decryption
+- S/MIME: Sending signed/encrypted messages
+- S/MIME: Handling of certs attached to incoming messages
+- S/MIME: Certificate info in Contacts details page (optional)
+
+
+KNOWN ISSUES:
+-------------
+There are some known issues with accepting key passphrases on various
+system configurations. This is caused by issues in PinEntry handling.
+Make sure that vendor/bin/crypt-gpg-pinentry works from command line.
+
+Possible reasons:
+- non-working loader in shebang (#! /usr/bin/env php)
+  Make sure it works for the user the php scripts are executed upon
+  (i.e. apache, www-date, etc.)
+- SELinux setting, try command: setsebool -P httpd_unified 0
+
+Note: pinentry is used with gpg >= 2.0 and <= 2.1.12.
+Note: for server use GnuPG developers still recommend version 1.4.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+{
+    "name": "roundcube/enigma",
+    "type": "roundcube-plugin",
+    "description": "Server-side PGP Encryption for Roundcube",
+    "license": "GPLv3+",
+    "version": "0.7",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": "~0.1.6",
+        "pear/crypt_gpg": "~1.6.0"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+<?php
+
+// Enigma Plugin options
+// --------------------
+
+// A driver to use for PGP. Default: "gnupg".
+$config['enigma_pgp_driver'] = 'gnupg';
+
+// A driver to use for S/MIME. Default: "phpssl".
+$config['enigma_smime_driver'] = 'phpssl';
+
+// Enables logging of enigma operations (including Crypt_GPG debug info)
+$config['enigma_debug'] = false;
+
+// Keys directory for all users. Default 'enigma/home'.
+// Must be writeable by PHP process
+$config['enigma_pgp_homedir'] = null;
+
+// Location of gpg binary. By default it will be auto-detected.
+// This is also a way to force gpg2 use if there are both 1.x and 2.x on the system.
+$config['enigma_pgp_binary'] = '';
+
+// Location of gpg-agent binary. By default it will be auto-detected.
+// It's used with GnuPG 2.x.
+$config['enigma_pgp_agent'] = '';
+
+// Location of gpgconf binary. By default it will be auto-detected.
+// It's used with GnuPG >= 2.1.
+$config['enigma_pgp_gpgconf'] = '';
+
+// Enables signatures verification feature.
+$config['enigma_signatures'] = true;
+
+// Enables messages decryption feature.
+$config['enigma_decryption'] = true;
+
+// Enables messages encryption and signing feature.
+$config['enigma_encryption'] = true;
+
+// Enable signing all messages by default
+$config['enigma_sign_all'] = false;
+
+// Enable encrypting all messages by default
+$config['enigma_encrypt_all'] = false;
+
+// Enable attaching a public key to all messages by default
+$config['enigma_attach_pubkey'] = false;
+
+// Default for how long to store private key passwords (in minutes).
+// When set to 0 passwords will be stored for the whole session.
+$config['enigma_password_time'] = 5;
+
+// With this option you can lock composing options
+// of the plugin forcing the user to use configured settings.
+// The array accepts: 'sign', 'encrypt', 'pubkey'.
+//
+// For example, to force your users to sign every email,
+// you should set:
+//     - enigma_sign_all     = true
+//     - enigma_options_lock = array('sign')
+//     - dont_override       = array('enigma_sign_all')
+$config['enigma_options_lock'] = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/enigma.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,625 @@
+/* Enigma Plugin */
+
+window.rcmail && rcmail.addEventListener('init', function(evt) {
+    if (rcmail.env.task == 'settings') {
+        if (rcmail.gui_objects.keyslist) {
+            rcmail.keys_list = new rcube_list_widget(rcmail.gui_objects.keyslist,
+                {multiselect:true, draggable:false, keyboard:false});
+            rcmail.keys_list
+                .addEventListener('select', function(o) { rcmail.enigma_keylist_select(o); })
+                .addEventListener('keypress', function(o) { rcmail.enigma_keylist_keypress(o); })
+                .init()
+                .focus();
+
+            rcmail.enigma_list();
+
+            rcmail.register_command('firstpage', function(props) { return rcmail.enigma_list_page('first'); });
+            rcmail.register_command('previouspage', function(props) { return rcmail.enigma_list_page('previous'); });
+            rcmail.register_command('nextpage', function(props) { return rcmail.enigma_list_page('next'); });
+            rcmail.register_command('lastpage', function(props) { return rcmail.enigma_list_page('last'); });
+        }
+
+        if (rcmail.env.action == 'plugin.enigmakeys') {
+            rcmail.register_command('search', function(props) {return rcmail.enigma_search(props); }, true);
+            rcmail.register_command('reset-search', function(props) {return rcmail.enigma_search_reset(props); }, true);
+            rcmail.register_command('plugin.enigma-import', function() { rcmail.enigma_import(); }, true);
+            rcmail.register_command('plugin.enigma-import-search', function() { rcmail.enigma_import_search(); }, true);
+            rcmail.register_command('plugin.enigma-key-export', function() { rcmail.enigma_export(); });
+            rcmail.register_command('plugin.enigma-key-export-selected', function() { rcmail.enigma_export(true); });
+            rcmail.register_command('plugin.enigma-key-import', function() { rcmail.enigma_key_import(); }, true);
+            rcmail.register_command('plugin.enigma-key-delete', function(props) { return rcmail.enigma_delete(); });
+            rcmail.register_command('plugin.enigma-key-create', function(props) { return rcmail.enigma_key_create(); }, true);
+            rcmail.register_command('plugin.enigma-key-save', function(props) { return rcmail.enigma_key_create_save(); }, true);
+
+            rcmail.addEventListener('responseafterplugin.enigmakeys', function() {
+                rcmail.enable_command('plugin.enigma-key-export', rcmail.env.rowcount > 0);
+            });
+
+            if (rcmail.gui_objects.importform) {
+                // make sure Enter key in search input starts searching
+                // instead of submitting the form
+                $('#rcmimportsearch').keydown(function(e) {
+                    if (e.which == 13) {
+                        rcmail.enigma_import_search();
+                        return false;
+                    }
+                });
+
+                $('input[type="button"]:first').focus();
+            }
+        }
+    }
+    else if (rcmail.env.task == 'mail') {
+        if (rcmail.env.action == 'compose') {
+            rcmail.addEventListener('beforesend', function(props) { rcmail.enigma_beforesend_handler(props); })
+                .addEventListener('beforesavedraft', function(props) { rcmail.enigma_beforesavedraft_handler(props); });
+
+            $('input,label', $('#enigmamenu')).mouseup(function(e) {
+                // don't close the menu on mouse click inside
+                e.stopPropagation();
+            });
+
+            $('a.button.enigma').prop('tabindex', $('#messagetoolbar > a:first').prop('tabindex'));
+        }
+
+        $.each(['encrypt', 'sign'], function() {
+            if (rcmail.env['enigma_force_' + this])
+                $('[name="_enigma_' + this + '"]').prop('checked', true);
+        });
+
+        if (rcmail.env.enigma_password_request) {
+            rcmail.enigma_password_request(rcmail.env.enigma_password_request);
+        }
+    }
+});
+
+
+/*********************************************************/
+/*********    Enigma Settings/Keys/Certs UI      *********/
+/*********************************************************/
+
+// Display key(s) import form
+rcube_webmail.prototype.enigma_key_import = function()
+{
+    this.enigma_loadframe('&_action=plugin.enigmakeys&_a=import');
+};
+
+// Display key(s) generation form
+rcube_webmail.prototype.enigma_key_create = function()
+{
+    this.enigma_loadframe('&_action=plugin.enigmakeys&_a=create');
+};
+
+// Generate key(s) and submit them
+rcube_webmail.prototype.enigma_key_create_save = function()
+{
+    var options, lock, users = [],
+        password = $('#key-pass').val(),
+        confirm = $('#key-pass-confirm').val(),
+        size = $('#key-size').val();
+
+    $('[name="identity[]"]:checked').each(function() {
+        users.push(this.value);
+    });
+
+    // validate the form
+    if (!password || !confirm)
+        return alert(this.get_label('enigma.formerror'));
+
+    if (password != confirm)
+        return alert(this.get_label('enigma.passwordsdiffer'));
+
+    if (!users.length)
+        return alert(this.get_label('enigma.noidentselected'));
+
+    // generate keys
+    // use OpenPGP.js if browser supports required features
+    if (window.openpgp && window.crypto && (window.crypto.getRandomValues || window.crypto.subtle)) {
+        lock = this.set_busy(true, 'enigma.keygenerating');
+        options = {
+            numBits: size,
+            userId: users,
+            passphrase: password
+        };
+
+        openpgp.generateKeyPair(options).then(function(keypair) {
+            // success
+            var post = {_a: 'import', _keys: keypair.privateKeyArmored, _generated: 1,
+                _passwd: password, _keyid: keypair.key.primaryKey.fingerprint};
+
+            // send request to server
+            rcmail.http_post('plugin.enigmakeys', post, lock);
+        }, function(error) {
+            // failure
+            rcmail.set_busy(false, null, lock);
+            rcmail.display_message(rcmail.get_label('enigma.keygenerateerror'), 'error');
+        });
+    }
+    else {
+        rcmail.display_message(rcmail.get_label('enigma.keygennosupport'), 'error');
+    }
+};
+
+// Action executed after successful key generation and import
+rcube_webmail.prototype.enigma_key_create_success = function()
+{
+    parent.rcmail.enigma_list(1);
+};
+
+// Delete key(s)
+rcube_webmail.prototype.enigma_delete = function()
+{
+    var keys = this.keys_list.get_selection();
+
+    if (!keys.length || !confirm(this.get_label('enigma.keyremoveconfirm')))
+        return;
+
+    var lock = this.display_message(this.get_label('enigma.keyremoving'), 'loading'),
+        post = {_a: 'delete', _keys: keys};
+
+    // send request to server
+    this.http_post('plugin.enigmakeys', post, lock);
+};
+
+// Export key(s)
+rcube_webmail.prototype.enigma_export = function(selected)
+{
+    var priv = false,
+        list = this.keys_list,
+        keys = selected ? list.get_selection().join(',') : '*',
+        args = {_keys: keys};
+
+    if (!keys.length)
+        return;
+
+    // find out whether selected keys are private
+    if (keys == '*')
+        priv = true;
+    else
+        $.each(list.get_selection(), function() {
+            flags = $(list.rows[this].obj).data('flags');
+            if (flags && flags.indexOf('p') >= 0) {
+                priv = true;
+                return false;
+            }
+        });
+
+    // ask the user about including private key in the export
+    if (priv)
+        return this.show_popup_dialog(
+            this.get_label('enigma.keyexportprompt'),
+            this.get_label('enigma.exportkeys'),
+            [{
+                text: this.get_label('enigma.onlypubkeys'),
+                click: function(e) {
+                    rcmail.enigma_export_submit(args);
+                    $(this).remove();
+                }
+            },
+            {
+                text: this.get_label('enigma.withprivkeys'),
+                click: function(e) {
+                    args._priv = 1;
+                    rcmail.enigma_export_submit(args);
+                    $(this).remove();
+                }
+            }],
+            {width: 400}
+        );
+
+    this.enigma_export_submit(args);
+};
+
+// Sumbitting request for key(s) export
+// Done this way to handle password input
+rcube_webmail.prototype.enigma_export_submit = function(data)
+{
+    var id = 'keyexport-' + new Date().getTime(),
+        form = $('<form>').attr({target: id, method: 'post', style: 'display:none',
+            action: '?_action=plugin.enigmakeys&_task=settings&_a=export'}),
+        iframe = $('<iframe>').attr({name: id, style: 'display:none'})
+
+    form.append($('<input>').attr({name: '_token', value: this.env.request_token}));
+    $.each(data, function(i, v) {
+        form.append($('<input>').attr({name: i, value: v}));
+    });
+
+    iframe.appendTo(document.body);
+    form.appendTo(document.body).submit();
+};
+
+// Submit key(s) import form
+rcube_webmail.prototype.enigma_import = function()
+{
+    var form, file, lock,
+        id = 'keyexport-' + new Date().getTime(),
+        iframe = $('<iframe>').attr({name: id, style: 'display:none'});
+
+    if (form = this.gui_objects.importform) {
+        file = document.getElementById('rcmimportfile');
+        if (file && !file.value) {
+            alert(this.get_label('selectimportfile'));
+            return;
+        }
+
+        lock = this.set_busy(true, 'importwait');
+        iframe.appendTo(document.body);
+        $(form).attr({target: id, action: this.add_url(form.action, '_unlock', lock)})
+            .submit();
+    }
+};
+
+// Ssearch for key(s) for import
+rcube_webmail.prototype.enigma_import_search = function()
+{
+    var form, search;
+
+    if (form = this.gui_objects.importform) {
+        search = $('#rcmimportsearch').val();
+        if (!search) {
+            return;
+        }
+
+        this.enigma_find_publickey(search);
+    }
+};
+
+// list row selection handler
+rcube_webmail.prototype.enigma_keylist_select = function(list)
+{
+    var id = list.get_single_selection(), url;
+
+    if (id)
+        url = '&_action=plugin.enigmakeys&_a=info&_id=' + id;
+
+    this.enigma_loadframe(url);
+    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-export-selected', list.selection.length > 0);
+};
+
+rcube_webmail.prototype.enigma_keylist_keypress = function(list)
+{
+    if (list.modkey == CONTROL_KEY)
+        return;
+
+    if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
+        this.command('plugin.enigma-key-delete');
+    else if (list.key_pressed == 33)
+        this.command('previouspage');
+    else if (list.key_pressed == 34)
+        this.command('nextpage');
+};
+
+// load key frame
+rcube_webmail.prototype.enigma_loadframe = function(url)
+{
+    var win;
+
+    if (win = this.get_frame_window(this.env.contentframe)) {
+        if (!url) {
+            if (win.location && win.location.href.indexOf(this.env.blankpage) < 0)
+                win.location.href = this.env.blankpage;
+            if (this.env.frame_lock)
+                this.set_busy(false, null, this.env.frame_lock);
+            return;
+        }
+
+        this.env.frame_lock = this.set_busy(true, 'loading');
+        win.location.href = this.env.comm_path + '&_framed=1' + url;
+    }
+};
+
+// Search keys/certs
+rcube_webmail.prototype.enigma_search = function(props)
+{
+    if (!props && this.gui_objects.qsearchbox)
+        props = this.gui_objects.qsearchbox.value;
+
+    if (props || this.env.search_request) {
+        var params = {'_a': 'search', '_q': props},
+          lock = this.set_busy(true, 'searching');
+//        if (this.gui_objects.search_filter)
+//          addurl += '&_filter=' + this.gui_objects.search_filter.value;
+        this.env.current_page = 1;
+        this.enigma_loadframe();
+        this.enigma_clear_list();
+        this.http_post('plugin.enigmakeys', params, lock);
+    }
+
+    return false;
+};
+
+// Reset search filter and the list
+rcube_webmail.prototype.enigma_search_reset = function(props)
+{
+    var s = this.env.search_request;
+    this.reset_qsearch();
+
+    if (s) {
+        this.enigma_loadframe();
+        this.enigma_clear_list();
+
+        // refresh the list
+        this.enigma_list();
+    }
+
+    return false;
+};
+
+// Keys/certs listing
+rcube_webmail.prototype.enigma_list = function(page, reset_frame)
+{
+    if (this.is_framed())
+        return parent.rcmail.enigma_list(page, reset_frame);
+
+    var params = {'_a': 'list'},
+      lock = this.set_busy(true, 'loading');
+
+    this.env.current_page = page ? page : 1;
+
+    if (this.env.search_request)
+        params._q = this.env.search_request;
+    if (page)
+        params._p = page;
+
+    this.enigma_clear_list(reset_frame);
+    this.http_post('plugin.enigmakeys', params, lock);
+};
+
+// Change list page
+rcube_webmail.prototype.enigma_list_page = function(page)
+{
+    if (page == 'next')
+        page = this.env.current_page + 1;
+    else if (page == 'last')
+        page = this.env.pagecount;
+    else if (page == 'prev' && this.env.current_page > 1)
+        page = this.env.current_page - 1;
+    else if (page == 'first' && this.env.current_page > 1)
+        page = 1;
+
+    this.enigma_list(page);
+};
+
+// Remove list rows
+rcube_webmail.prototype.enigma_clear_list = function(reset_frame)
+{
+    if (reset_frame !== false)
+        this.enigma_loadframe();
+
+    if (this.keys_list)
+        this.keys_list.clear(true);
+
+    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-delete-selected', false);
+};
+
+// Adds a row to the list
+rcube_webmail.prototype.enigma_add_list_row = function(r)
+{
+    if (!this.gui_objects.keyslist || !this.keys_list)
+        return false;
+
+    var list = this.keys_list,
+        tbody = this.gui_objects.keyslist.tBodies[0],
+        rowcount = tbody.rows.length,
+        even = rowcount%2,
+        css_class = 'message'
+            + (even ? ' even' : ' odd'),
+        // for performance use DOM instead of jQuery here
+        row = document.createElement('tr'),
+        col = document.createElement('td');
+
+    row.id = 'rcmrow' + r.id;
+    row.className = css_class;
+    if (r.flags) $(row).data('flags', r.flags);
+
+    col.innerHTML = r.name;
+    row.appendChild(col);
+    list.insert_row(row);
+};
+
+
+/*********************************************************/
+/*********        Enigma Message methods         *********/
+/*********************************************************/
+
+// handle message send/save action
+rcube_webmail.prototype.enigma_beforesend_handler = function(props)
+{
+    this.env.last_action = 'send';
+    this.enigma_compose_handler(props);
+};
+
+rcube_webmail.prototype.enigma_beforesavedraft_handler = function(props)
+{
+    this.env.last_action = 'savedraft';
+    this.enigma_compose_handler(props);
+};
+
+rcube_webmail.prototype.enigma_compose_handler = function(props)
+{
+    var form = this.gui_objects.messageform;
+
+    // copy inputs from enigma menu to the form
+    $('#enigmamenu input').each(function() {
+        var id = this.id + '_cpy', input = $('#' + id);
+
+        if (!input.length) {
+            input = $(this).clone();
+            input.prop({id: id, type: 'hidden'}).appendTo(form);
+        }
+
+        input.val(this.checked ? '1' : '');
+    });
+
+    // disable signing when saving drafts
+    if (this.env.last_action == 'savedraft') {
+        $('input[name="_enigma_sign"]', form).val(0);
+    }
+};
+
+// Import attached keys/certs file
+rcube_webmail.prototype.enigma_import_attachment = function(mime_id)
+{
+    var lock = this.set_busy(true, 'loading'),
+        post = {_uid: this.env.uid, _mbox: this.env.mailbox, _part: mime_id};
+
+    this.http_post('plugin.enigmaimport', post, lock);
+
+    return false;
+};
+
+// password request popup
+rcube_webmail.prototype.enigma_password_request = function(data)
+{
+    if (!data || !data.keyid) {
+        return;
+    }
+
+    var ref = this,
+        msg = this.get_label('enigma.enterkeypass'),
+        myprompt = $('<div class="prompt">'),
+        myprompt_content = $('<div class="message">')
+            .appendTo(myprompt),
+        myprompt_input = $('<input>').attr({type: 'password', size: 30})
+            .keypress(function(e) {
+                if (e.which == 13)
+                    (ref.is_framed() ? window.parent.$ : $)('.ui-dialog-buttonpane button.mainaction:visible').click();
+            })
+            .appendTo(myprompt);
+
+    data.key = data.keyid;
+    if (data.keyid.length > 8)
+        data.keyid = data.keyid.substr(data.keyid.length - 8);
+
+    $.each(['keyid', 'user'], function() {
+        msg = msg.replace('$' + this, data[this]);
+    });
+
+    myprompt_content.text(msg);
+
+    this.show_popup_dialog(myprompt, this.get_label('enigma.enterkeypasstitle'),
+        [{
+            text: this.get_label('save'),
+            'class': 'mainaction',
+            click: function(e) {
+                e.stopPropagation();
+
+                var jq = ref.is_framed() ? window.parent.$ : $;
+
+                data.password = myprompt_input.val();
+
+                if (!data.password) {
+                    myprompt_input.focus();
+                    return;
+                }
+
+                ref.enigma_password_submit(data);
+                jq(this).remove();
+            }
+        },
+        {
+            text: this.get_label('cancel'),
+            click: function(e) {
+                var jq = ref.is_framed() ? window.parent.$ : $;
+                e.stopPropagation();
+                jq(this).remove();
+            }
+        }], {width: 400});
+
+    if (this.is_framed() && parent.rcmail.message_list) {
+        // this fixes bug when pressing Enter on "Save" button in the dialog
+        parent.rcmail.message_list.blur();
+    }
+};
+
+// submit entered password
+rcube_webmail.prototype.enigma_password_submit = function(data)
+{
+    var lock, form;
+
+    if (this.env.action == 'compose' && !data['compose-init']) {
+        return this.enigma_password_compose_submit(data);
+    }
+    else if (this.env.action == 'plugin.enigmakeys' && (form = this.gui_objects.importform)) {
+        if (!$('input[name="_keyid"]', form).length) {
+            $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
+                .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
+        }
+
+        return this.enigma_import();
+    }
+
+    lock = data.nolock ? null : this.set_busy(true, 'loading');
+    form = $('<form>')
+        .attr({method: 'post', action: data.action || location.href, style: 'display:none'})
+        .append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
+        .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
+        .append($('<input>').attr({type: 'hidden', name: '_token', value: this.env.request_token}))
+        .append($('<input>').attr({type: 'hidden', name: '_unlock', value: lock}));
+
+    // Additional form fields for request parameters
+    $.each(data, function(i, v) {
+        if (i.indexOf('input') == 0)
+            form.append($('<input>').attr({type: 'hidden', name: i.substring(5), value: v}))
+    });
+
+    if (data.iframe) {
+        var name = 'enigma_frame_' + (new Date()).getTime(),
+            frame = $('<iframe>').attr({style: 'display:none', name: name}).appendTo(document.body);
+        form.attr('target', name);
+    }
+
+    form.appendTo(document.body).submit();
+};
+
+// submit entered password - in mail compose page
+rcube_webmail.prototype.enigma_password_compose_submit = function(data)
+{
+    var form = this.gui_objects.messageform;
+
+    if (!$('input[name="_keyid"]', form).length) {
+        $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
+            .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}));
+    }
+    else {
+        $('input[name="_keyid"]', form).val(data.key);
+        $('input[name="_passwd"]', form).val(data.password);
+    }
+
+    this.submit_messageform(this.env.last_action == 'savedraft');
+};
+
+// Display no-key error with key search button
+rcube_webmail.prototype.enigma_key_not_found = function(data)
+{
+    return this.show_popup_dialog(
+        data.text,
+        data.title,
+        [{
+            text: data.button,
+            click: function(e) {
+                $(this).remove();
+                rcmail.enigma_find_publickey(data.email);
+            }
+        }],
+        {width: 400, dialogClass: 'error'}
+    );
+};
+
+// Search for a public key on the key server
+rcube_webmail.prototype.enigma_find_publickey = function(email)
+{
+    this.mailvelope_search_pubkeys([email],
+        function(status) {},
+        function(key) {
+            var lock = rcmail.set_busy(true, 'enigma.importwait'),
+                post = {_a: 'import', _keys: key};
+
+            if (rcmail.env.action == 'plugin.enigmakeys')
+                post._refresh = 1;
+
+            // send request to server
+            rcmail.http_post('plugin.enigmakeys', post, lock);
+        }
+    );
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/enigma.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+window.rcmail&&rcmail.addEventListener("init",function(a){"settings"==rcmail.env.task?(rcmail.gui_objects.keyslist&&(rcmail.keys_list=new rcube_list_widget(rcmail.gui_objects.keyslist,{multiselect:!0,draggable:!1,keyboard:!1}),rcmail.keys_list.addEventListener("select",function(a){rcmail.enigma_keylist_select(a)}).addEventListener("keypress",function(a){rcmail.enigma_keylist_keypress(a)}).init().focus(),rcmail.enigma_list(),rcmail.register_command("firstpage",function(a){return rcmail.enigma_list_page("first")}),
+rcmail.register_command("previouspage",function(a){return rcmail.enigma_list_page("previous")}),rcmail.register_command("nextpage",function(a){return rcmail.enigma_list_page("next")}),rcmail.register_command("lastpage",function(a){return rcmail.enigma_list_page("last")})),"plugin.enigmakeys"==rcmail.env.action&&(rcmail.register_command("search",function(a){return rcmail.enigma_search(a)},!0),rcmail.register_command("reset-search",function(a){return rcmail.enigma_search_reset(a)},!0),rcmail.register_command("plugin.enigma-import",
+function(){rcmail.enigma_import()},!0),rcmail.register_command("plugin.enigma-import-search",function(){rcmail.enigma_import_search()},!0),rcmail.register_command("plugin.enigma-key-export",function(){rcmail.enigma_export()}),rcmail.register_command("plugin.enigma-key-export-selected",function(){rcmail.enigma_export(!0)}),rcmail.register_command("plugin.enigma-key-import",function(){rcmail.enigma_key_import()},!0),rcmail.register_command("plugin.enigma-key-delete",function(a){return rcmail.enigma_delete()}),
+rcmail.register_command("plugin.enigma-key-create",function(a){return rcmail.enigma_key_create()},!0),rcmail.register_command("plugin.enigma-key-save",function(a){return rcmail.enigma_key_create_save()},!0),rcmail.addEventListener("responseafterplugin.enigmakeys",function(){rcmail.enable_command("plugin.enigma-key-export",0<rcmail.env.rowcount)}),rcmail.gui_objects.importform&&($("#rcmimportsearch").keydown(function(a){if(13==a.which)return rcmail.enigma_import_search(),!1}),$('input[type="button"]:first').focus()))):
+"mail"==rcmail.env.task&&("compose"==rcmail.env.action&&(rcmail.addEventListener("beforesend",function(a){rcmail.enigma_beforesend_handler(a)}).addEventListener("beforesavedraft",function(a){rcmail.enigma_beforesavedraft_handler(a)}),$("input,label",$("#enigmamenu")).mouseup(function(a){a.stopPropagation()}),$("a.button.enigma").prop("tabindex",$("#messagetoolbar > a:first").prop("tabindex"))),$.each(["encrypt","sign"],function(){rcmail.env["enigma_force_"+this]&&$('[name="_enigma_'+this+'"]').prop("checked",
+!0)}),rcmail.env.enigma_password_request&&rcmail.enigma_password_request(rcmail.env.enigma_password_request))});rcube_webmail.prototype.enigma_key_import=function(){this.enigma_loadframe("&_action=plugin.enigmakeys&_a=import")};rcube_webmail.prototype.enigma_key_create=function(){this.enigma_loadframe("&_action=plugin.enigmakeys&_a=create")};
+rcube_webmail.prototype.enigma_key_create_save=function(){var a=[],b=$("#key-pass").val();var c=$("#key-pass-confirm").val();var d=$("#key-size").val();$('[name="identity[]"]:checked').each(function(){a.push(this.value)});if(!b||!c)return alert(this.get_label("enigma.formerror"));if(b!=c)return alert(this.get_label("enigma.passwordsdiffer"));if(!a.length)return alert(this.get_label("enigma.noidentselected"));if(window.openpgp&&window.crypto&&(window.crypto.getRandomValues||window.crypto.subtle)){var e=
+this.set_busy(!0,"enigma.keygenerating");c={numBits:d,userId:a,passphrase:b};openpgp.generateKeyPair(c).then(function(a){rcmail.http_post("plugin.enigmakeys",{_a:"import",_keys:a.privateKeyArmored,_generated:1,_passwd:b,_keyid:a.key.primaryKey.fingerprint},e)},function(a){rcmail.set_busy(!1,null,e);rcmail.display_message(rcmail.get_label("enigma.keygenerateerror"),"error")})}else rcmail.display_message(rcmail.get_label("enigma.keygennosupport"),"error")};
+rcube_webmail.prototype.enigma_key_create_success=function(){parent.rcmail.enigma_list(1)};rcube_webmail.prototype.enigma_delete=function(){var a=this.keys_list.get_selection();if(a.length&&confirm(this.get_label("enigma.keyremoveconfirm"))){var b=this.display_message(this.get_label("enigma.keyremoving"),"loading");this.http_post("plugin.enigmakeys",{_a:"delete",_keys:a},b)}};
+rcube_webmail.prototype.enigma_export=function(a){var b=!1,c=this.keys_list;a=a?c.get_selection().join(","):"*";var d={_keys:a};if(a.length){"*"==a?b=!0:$.each(c.get_selection(),function(){if((flags=$(c.rows[this].obj).data("flags"))&&0<=flags.indexOf("p"))return b=!0,!1});if(b)return this.show_popup_dialog(this.get_label("enigma.keyexportprompt"),this.get_label("enigma.exportkeys"),[{text:this.get_label("enigma.onlypubkeys"),click:function(a){rcmail.enigma_export_submit(d);$(this).remove()}},{text:this.get_label("enigma.withprivkeys"),
+click:function(a){d._priv=1;rcmail.enigma_export_submit(d);$(this).remove()}}],{width:400});this.enigma_export_submit(d)}};
+rcube_webmail.prototype.enigma_export_submit=function(a){var b="keyexport-"+(new Date).getTime(),c=$("<form>").attr({target:b,method:"post",style:"display:none",action:"?_action=plugin.enigmakeys&_task=settings&_a=export"});b=$("<iframe>").attr({name:b,style:"display:none"});c.append($("<input>").attr({name:"_token",value:this.env.request_token}));$.each(a,function(a,b){c.append($("<input>").attr({name:a,value:b}))});b.appendTo(document.body);c.appendTo(document.body).submit()};
+rcube_webmail.prototype.enigma_import=function(){var a,b,c="keyexport-"+(new Date).getTime(),d=$("<iframe>").attr({name:c,style:"display:none"});if(a=this.gui_objects.importform)(b=document.getElementById("rcmimportfile"))&&!b.value?alert(this.get_label("selectimportfile")):(b=this.set_busy(!0,"importwait"),d.appendTo(document.body),$(a).attr({target:c,action:this.add_url(a.action,"_unlock",b)}).submit())};
+rcube_webmail.prototype.enigma_import_search=function(){var a;this.gui_objects.importform&&(a=$("#rcmimportsearch").val())&&this.enigma_find_publickey(a)};rcube_webmail.prototype.enigma_keylist_select=function(a){var b=a.get_single_selection(),c;b&&(c="&_action=plugin.enigmakeys&_a=info&_id="+b);this.enigma_loadframe(c);this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-export-selected",0<a.selection.length)};
+rcube_webmail.prototype.enigma_keylist_keypress=function(a){a.modkey!=CONTROL_KEY&&(a.key_pressed==a.DELETE_KEY||a.key_pressed==a.BACKSPACE_KEY?this.command("plugin.enigma-key-delete"):33==a.key_pressed?this.command("previouspage"):34==a.key_pressed&&this.command("nextpage"))};
+rcube_webmail.prototype.enigma_loadframe=function(a){var b;if(b=this.get_frame_window(this.env.contentframe))a?(this.env.frame_lock=this.set_busy(!0,"loading"),b.location.href=this.env.comm_path+"&_framed=1"+a):(b.location&&0>b.location.href.indexOf(this.env.blankpage)&&(b.location.href=this.env.blankpage),this.env.frame_lock&&this.set_busy(!1,null,this.env.frame_lock))};
+rcube_webmail.prototype.enigma_search=function(a){!a&&this.gui_objects.qsearchbox&&(a=this.gui_objects.qsearchbox.value);if(a||this.env.search_request){a={_a:"search",_q:a};var b=this.set_busy(!0,"searching");this.env.current_page=1;this.enigma_loadframe();this.enigma_clear_list();this.http_post("plugin.enigmakeys",a,b)}return!1};
+rcube_webmail.prototype.enigma_search_reset=function(a){a=this.env.search_request;this.reset_qsearch();a&&(this.enigma_loadframe(),this.enigma_clear_list(),this.enigma_list());return!1};
+rcube_webmail.prototype.enigma_list=function(a,b){if(this.is_framed())return parent.rcmail.enigma_list(a,b);var c={_a:"list"},d=this.set_busy(!0,"loading");this.env.current_page=a?a:1;this.env.search_request&&(c._q=this.env.search_request);a&&(c._p=a);this.enigma_clear_list(b);this.http_post("plugin.enigmakeys",c,d)};
+rcube_webmail.prototype.enigma_list_page=function(a){"next"==a?a=this.env.current_page+1:"last"==a?a=this.env.pagecount:"prev"==a&&1<this.env.current_page?a=this.env.current_page-1:"first"==a&&1<this.env.current_page&&(a=1);this.enigma_list(a)};rcube_webmail.prototype.enigma_clear_list=function(a){!1!==a&&this.enigma_loadframe();this.keys_list&&this.keys_list.clear(!0);this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-delete-selected",!1)};
+rcube_webmail.prototype.enigma_add_list_row=function(a){if(!this.gui_objects.keyslist||!this.keys_list)return!1;var b=this.keys_list,c="message"+(this.gui_objects.keyslist.tBodies[0].rows.length%2?" even":" odd"),d=document.createElement("tr"),e=document.createElement("td");d.id="rcmrow"+a.id;d.className=c;a.flags&&$(d).data("flags",a.flags);e.innerHTML=a.name;d.appendChild(e);b.insert_row(d)};rcube_webmail.prototype.enigma_beforesend_handler=function(a){this.env.last_action="send";this.enigma_compose_handler(a)};
+rcube_webmail.prototype.enigma_beforesavedraft_handler=function(a){this.env.last_action="savedraft";this.enigma_compose_handler(a)};rcube_webmail.prototype.enigma_compose_handler=function(a){var b=this.gui_objects.messageform;$("#enigmamenu input").each(function(){var a=this.id+"_cpy",d=$("#"+a);d.length||(d=$(this).clone(),d.prop({id:a,type:"hidden"}).appendTo(b));d.val(this.checked?"1":"")});"savedraft"==this.env.last_action&&$('input[name="_enigma_sign"]',b).val(0)};
+rcube_webmail.prototype.enigma_import_attachment=function(a){var b=this.set_busy(!0,"loading");this.http_post("plugin.enigmaimport",{_uid:this.env.uid,_mbox:this.env.mailbox,_part:a},b);return!1};
+rcube_webmail.prototype.enigma_password_request=function(a){if(a&&a.keyid){var b=this,c=this.get_label("enigma.enterkeypass"),d=$('<div class="prompt">'),e=$('<div class="message">').appendTo(d),f=$("<input>").attr({type:"password",size:30}).keypress(function(a){13==a.which&&(b.is_framed()?window.parent.$:$)(".ui-dialog-buttonpane button.mainaction:visible").click()}).appendTo(d);a.key=a.keyid;8<a.keyid.length&&(a.keyid=a.keyid.substr(a.keyid.length-8));$.each(["keyid","user"],function(){c=c.replace("$"+
+this,a[this])});e.text(c);this.show_popup_dialog(d,this.get_label("enigma.enterkeypasstitle"),[{text:this.get_label("save"),"class":"mainaction",click:function(c){c.stopPropagation();c=b.is_framed()?window.parent.$:$;a.password=f.val();a.password?(b.enigma_password_submit(a),c(this).remove()):f.focus()}},{text:this.get_label("cancel"),click:function(a){var c=b.is_framed()?window.parent.$:$;a.stopPropagation();c(this).remove()}}],{width:400});this.is_framed()&&parent.rcmail.message_list&&parent.rcmail.message_list.blur()}};
+rcube_webmail.prototype.enigma_password_submit=function(a){var b;if("compose"==this.env.action&&!a["compose-init"])return this.enigma_password_compose_submit(a);if("plugin.enigmakeys"==this.env.action&&(b=this.gui_objects.importform))return $('input[name="_keyid"]',b).length||$(b).append($("<input>").attr({type:"hidden",name:"_keyid",value:a.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:a.password})),this.enigma_import();var c=a.nolock?null:this.set_busy(!0,"loading");b=$("<form>").attr({method:"post",
+action:a.action||location.href,style:"display:none"}).append($("<input>").attr({type:"hidden",name:"_keyid",value:a.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:a.password})).append($("<input>").attr({type:"hidden",name:"_token",value:this.env.request_token})).append($("<input>").attr({type:"hidden",name:"_unlock",value:c}));$.each(a,function(a,c){0==a.indexOf("input")&&b.append($("<input>").attr({type:"hidden",name:a.substring(5),value:c}))});a.iframe&&(a="enigma_frame_"+(new Date).getTime(),
+$("<iframe>").attr({style:"display:none",name:a}).appendTo(document.body),b.attr("target",a));b.appendTo(document.body).submit()};
+rcube_webmail.prototype.enigma_password_compose_submit=function(a){var b=this.gui_objects.messageform;$('input[name="_keyid"]',b).length?($('input[name="_keyid"]',b).val(a.key),$('input[name="_passwd"]',b).val(a.password)):$(b).append($("<input>").attr({type:"hidden",name:"_keyid",value:a.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:a.password}));this.submit_messageform("savedraft"==this.env.last_action)};
+rcube_webmail.prototype.enigma_key_not_found=function(a){return this.show_popup_dialog(a.text,a.title,[{text:a.button,click:function(b){$(this).remove();rcmail.enigma_find_publickey(a.email)}}],{width:400,dialogClass:"error"})};
+rcube_webmail.prototype.enigma_find_publickey=function(a){this.mailvelope_search_pubkeys([a],function(a){},function(a){var b=rcmail.set_busy(!0,"enigma.importwait");a={_a:"import",_keys:a};"plugin.enigmakeys"==rcmail.env.action&&(a._refresh=1);rcmail.http_post("plugin.enigmakeys",a,b)})};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/enigma.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,529 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Enigma Plugin for Roundcube                                             |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+/**
+ * This class contains only hooks and action handlers.
+ * Most plugin logic is placed in enigma_engine and enigma_ui classes.
+ */
+class enigma extends rcube_plugin
+{
+    public $task = 'mail|settings|cli';
+    public $rc;
+    public $engine;
+    public $ui;
+
+    private $env_loaded = false;
+
+
+    /**
+     * Plugin initialization.
+     */
+    function init()
+    {
+        $this->rc = rcube::get_instance();
+
+        if ($this->rc->task == 'mail') {
+            // message parse/display hooks
+            $this->add_hook('message_part_structure', array($this, 'part_structure'));
+            $this->add_hook('message_part_body', array($this, 'part_body'));
+            $this->add_hook('message_body_prefix', array($this, 'status_message'));
+
+            $this->register_action('plugin.enigmaimport', array($this, 'import_file'));
+            $this->register_action('plugin.enigmakeys', array($this, 'preferences_ui'));
+
+            // load the Enigma plugin configuration
+            $this->load_config();
+
+            $enabled = $this->rc->config->get('enigma_encryption', true);
+
+            // message displaying
+            if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
+                $this->add_hook('message_load', array($this, 'message_load'));
+                $this->add_hook('template_object_messagebody', array($this, 'message_output'));
+            }
+            // message composing
+            else if ($enabled && $this->rc->action == 'compose') {
+                $this->add_hook('message_compose_body', array($this, 'message_compose'));
+
+                $this->load_ui();
+                $this->ui->init();
+            }
+            // message sending (and draft storing)
+            else if ($enabled && $this->rc->action == 'send') {
+                $this->add_hook('message_ready', array($this, 'message_ready'));
+            }
+
+            $this->password_handler();
+        }
+        else if ($this->rc->task == 'settings') {
+            // add hooks for Enigma settings
+            $this->add_hook('settings_actions', array($this, 'settings_actions'));
+            $this->add_hook('preferences_sections_list', array($this, 'preferences_sections_list'));
+            $this->add_hook('preferences_list', array($this, 'preferences_list'));
+            $this->add_hook('preferences_save', array($this, 'preferences_save'));
+
+            // register handler for keys/certs management
+            $this->register_action('plugin.enigmakeys', array($this, 'preferences_ui'));
+//            $this->register_action('plugin.enigmacerts', array($this, 'preferences_ui'));
+
+            $this->load_ui();
+
+            if (empty($_REQUEST['_framed']) || strpos($this->rc->action, 'plugin.enigma') === 0) {
+                $this->ui->add_css();
+            }
+
+            $this->password_handler();
+        }
+        else if ($this->rc->task == 'cli') {
+            $this->add_hook('user_delete_commit', array($this, 'user_delete'));
+        }
+
+        $this->add_hook('refresh', array($this, 'refresh'));
+    }
+
+    /**
+     * Plugin environment initialization.
+     */
+    function load_env()
+    {
+        if ($this->env_loaded) {
+            return;
+        }
+
+        $this->env_loaded = true;
+
+        // Add include path for Enigma classes and drivers
+        $include_path = $this->home . '/lib' . PATH_SEPARATOR;
+        $include_path .= ini_get('include_path');
+        set_include_path($include_path);
+
+        // load the Enigma plugin configuration
+        $this->load_config();
+
+        // include localization (if wasn't included before)
+        $this->add_texts('localization/');
+    }
+
+    /**
+     * Plugin UI initialization.
+     */
+    function load_ui($all = false)
+    {
+        if (!$this->ui) {
+            // load config/localization
+            $this->load_env();
+
+            // Load UI
+            $this->ui = new enigma_ui($this, $this->home);
+        }
+
+        if ($all) {
+            $this->ui->add_css();
+            $this->ui->add_js();
+        }
+    }
+
+    /**
+     * Plugin engine initialization.
+     */
+    function load_engine()
+    {
+        if ($this->engine) {
+            return $this->engine;
+        }
+
+        // load config/localization
+        $this->load_env();
+
+        return $this->engine = new enigma_engine($this);
+    }
+
+    /**
+     * Handler for message_part_structure hook.
+     * Called for every part of the message.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function part_structure($p)
+    {
+        $this->load_engine();
+
+        return $this->engine->part_structure($p);
+    }
+
+    /**
+     * Handler for message_part_body hook.
+     * Called to get body of a message part.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function part_body($p)
+    {
+        $this->load_engine();
+
+        return $this->engine->part_body($p);
+    }
+
+    /**
+     * Handler for settings_actions hook.
+     * Adds Enigma settings section into preferences.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function settings_actions($args)
+    {
+        // add labels
+        $this->add_texts('localization/');
+
+        // register as settings action
+        $args['actions'][] = array(
+            'action' => 'plugin.enigmakeys',
+            'class'  => 'enigma keys',
+            'label'  => 'enigmakeys',
+            'title'  => 'enigmakeys',
+            'domain' => 'enigma',
+        );
+/*
+        $args['actions'][] = array(
+            'action' => 'plugin.enigmacerts',
+            'class'  => 'enigma certs',
+            'label'  => 'enigmacerts',
+            'title'  => 'enigmacerts',
+            'domain' => 'enigma',
+        );
+*/
+        return $args;
+    }
+
+    /**
+     * Handler for preferences_sections_list hook.
+     * Adds Encryption settings section into preferences sections list.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function preferences_sections_list($p)
+    {
+        $p['list']['enigma'] = array(
+            'id' => 'enigma', 'section' => $this->gettext('encryption'),
+        );
+
+        return $p;
+    }
+
+    /**
+     * Handler for preferences_list hook.
+     * Adds options blocks into Enigma settings sections in Preferences.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function preferences_list($p)
+    {
+        if ($p['section'] != 'enigma') {
+            return $p;
+        }
+
+        $no_override = array_flip((array)$this->rc->config->get('dont_override'));
+
+        $p['blocks']['main']['name'] = $this->gettext('mainoptions');
+
+        if (!isset($no_override['enigma_encryption'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_encryption';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_encryption',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_encryption'] = array(
+                'title'   => html::label($field_id, $this->gettext('supportencryption')),
+                'content' => $input->show(intval($this->rc->config->get('enigma_encryption'))),
+            );
+        }
+
+        if (!isset($no_override['enigma_signatures'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_signatures';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_signatures',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_signatures'] = array(
+                'title'   => html::label($field_id, $this->gettext('supportsignatures')),
+                'content' => $input->show(intval($this->rc->config->get('enigma_signatures'))),
+            );
+        }
+
+        if (!isset($no_override['enigma_decryption'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_decryption';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_decryption',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_decryption'] = array(
+                'title'   => html::label($field_id, $this->gettext('supportdecryption')),
+                'content' => $input->show(intval($this->rc->config->get('enigma_decryption'))),
+            );
+        }
+
+        if (!isset($no_override['enigma_sign_all'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_sign_all';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_sign_all',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_sign_all'] = array(
+                'title'   => html::label($field_id, $this->gettext('signdefault')),
+                'content' => $input->show($this->rc->config->get('enigma_sign_all') ? 1 : 0),
+            );
+        }
+
+        if (!isset($no_override['enigma_encrypt_all'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_encrypt_all';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_encrypt_all',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_encrypt_all'] = array(
+                'title'   => html::label($field_id, $this->gettext('encryptdefault')),
+                'content' => $input->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0),
+            );
+        }
+
+        if (!isset($no_override['enigma_attach_pubkey'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_attach_pubkey';
+            $input    = new html_checkbox(array(
+                    'name'  => '_enigma_attach_pubkey',
+                    'id'    => $field_id,
+                    'value' => 1,
+            ));
+
+            $p['blocks']['main']['options']['enigma_attach_pubkey'] = array(
+                'title'   => html::label($field_id, $this->gettext('attachpubkeydefault')),
+                'content' => $input->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0),
+            );
+        }
+
+        if (!isset($no_override['enigma_password_time'])) {
+            if (!$p['current']) {
+                $p['blocks']['main']['content'] = true;
+                return $p;
+            }
+
+            $field_id = 'rcmfd_enigma_password_time';
+            $select   = new html_select(array('name' => '_enigma_password_time', 'id' => $field_id));
+
+            foreach (array(1, 5, 10, 15, 30) as $m) {
+                $label = $this->gettext(array('name' => 'nminutes', 'vars' => array('m' => $m)));
+                $select->add($label, $m);
+            }
+            $select->add($this->gettext('wholesession'), 0);
+
+            $p['blocks']['main']['options']['enigma_password_time'] = array(
+                'title'   => html::label($field_id, $this->gettext('passwordtime')),
+                'content' => $select->show(intval($this->rc->config->get('enigma_password_time'))),
+            );
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for preferences_save hook.
+     * Executed on Enigma settings form submit.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function preferences_save($p)
+    {
+        if ($p['section'] == 'enigma') {
+            $p['prefs'] = array(
+                'enigma_signatures'    => (bool) rcube_utils::get_input_value('_enigma_signatures', rcube_utils::INPUT_POST),
+                'enigma_decryption'    => (bool) rcube_utils::get_input_value('_enigma_decryption', rcube_utils::INPUT_POST),
+                'enigma_encryption'    => (bool) rcube_utils::get_input_value('_enigma_encryption', rcube_utils::INPUT_POST),
+                'enigma_sign_all'      => (bool) rcube_utils::get_input_value('_enigma_sign_all', rcube_utils::INPUT_POST),
+                'enigma_encrypt_all'   => (bool) rcube_utils::get_input_value('_enigma_encrypt_all', rcube_utils::INPUT_POST),
+                'enigma_attach_pubkey' => (bool) rcube_utils::get_input_value('_enigma_attach_pubkey', rcube_utils::INPUT_POST),
+                'enigma_password_time' => intval(rcube_utils::get_input_value('_enigma_password_time', rcube_utils::INPUT_POST)),
+            );
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for keys/certs management UI template.
+     */
+    function preferences_ui()
+    {
+        $this->load_ui();
+
+        $this->ui->init();
+    }
+
+    /**
+     * Handler for message_body_prefix hook.
+     * Called for every displayed (content) part of the message.
+     * Adds infobox about signature verification and/or decryption
+     * status above the body.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function status_message($p)
+    {
+        $this->load_ui();
+
+        return $this->ui->status_message($p);
+    }
+
+    /**
+     * Handler for message_load hook.
+     * Check message bodies and attachments for keys/certs.
+     */
+    function message_load($p)
+    {
+        $this->load_ui();
+
+        return $this->ui->message_load($p);
+    }
+
+    /**
+     * Handler for template_object_messagebody hook.
+     * This callback function adds a box below the message content
+     * if there is a key/cert attachment available
+     */
+    function message_output($p)
+    {
+        $this->load_ui();
+
+        return $this->ui->message_output($p);
+    }
+
+    /**
+     * Handler for attached keys/certs import
+     */
+    function import_file()
+    {
+        $this->load_ui();
+
+        $this->ui->import_file();
+    }
+
+    /**
+     * Handle password submissions
+     */
+    function password_handler()
+    {
+        $this->load_engine();
+
+        $this->engine->password_handler();
+    }
+
+    /**
+     * Handle message_ready hook (encryption/signing)
+     */
+    function message_ready($p)
+    {
+        $this->load_ui();
+
+        return $this->ui->message_ready($p);
+    }
+
+    /**
+     * Handle message_compose_body hook
+     */
+    function message_compose($p)
+    {
+        $this->load_ui();
+
+        return $this->ui->message_compose($p);
+    }
+
+    /**
+     * Handler for refresh hook.
+     */
+    function refresh($p)
+    {
+        // calling enigma_engine constructor to remove passwords
+        // stored in session after expiration time
+        $this->load_engine();
+
+        return $p;
+    }
+
+    /**
+     * Handle delete_user_commit hook
+     */
+    function user_delete($p)
+    {
+        $this->load_engine();
+
+        $p['abort'] = $p['abort'] || !$this->engine->delete_user_data($p['username']);
+
+        return $p;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/home/.htaccess	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+# deny webserver access to this directory
+<ifModule mod_authz_core.c>
+    Require all denied
+</ifModule>
+<ifModule !mod_authz_core.c>
+    Deny from all
+</ifModule>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_driver.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Abstract driver for the Enigma Plugin                                   |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+abstract class enigma_driver
+{
+    /**
+     * Class constructor.
+     *
+     * @param string User name (email address)
+     */
+    abstract function __construct($user);
+
+    /**
+     * Driver initialization.
+     *
+     * @return mixed NULL on success, enigma_error on failure
+     */
+    abstract function init();
+
+    /**
+     * Encryption (and optional signing).
+     *
+     * @param string     Message body
+     * @param array      List of keys (enigma_key objects)
+     * @param enigma_key Optional signing Key ID
+     *
+     * @return mixed Encrypted message or enigma_error on failure
+     */
+    abstract function encrypt($text, $keys, $sign_key = null);
+
+    /**
+     * Decryption (and sig verification if sig exists).
+     *
+     * @param string           Encrypted message
+     * @param array            List of key-password
+     * @param enigma_signature Signature information (if available)
+     *
+     * @return mixed Decrypted message or enigma_error on failure
+     */
+    abstract function decrypt($text, $keys = array(), &$signature = null);
+
+    /**
+     * Signing.
+     *
+     * @param string     Message body
+     * @param enigma_key The signing key
+     * @param int        Signing mode (enigma_engine::SIGN_*)
+     *
+     * @return mixed True on success or enigma_error on failure
+     */
+    abstract function sign($text, $key, $mode = null);
+
+    /**
+     * Signature verification.
+     *
+     * @param string Message body
+     * @param string Signature, if message is of type PGP/MIME and body doesn't contain it
+     *
+     * @return mixed Signature information (enigma_signature) or enigma_error
+     */
+    abstract function verify($text, $signature);
+
+    /**
+     * Key/Cert file import.
+     *
+     * @param string File name or file content
+     * @param bolean True if first argument is a filename
+     * @param array  Optional key => password map
+     *
+     * @return mixed Import status array or enigma_error
+     */
+    abstract function import($content, $isfile = false, $passwords = array());
+
+    /**
+     * Key/Cert export.
+     *
+     * @param string Key ID
+     * @param bool   Include private key
+     * @param array  Optional key => password map
+     *
+     * @return mixed Key content or enigma_error
+     */
+    abstract function export($key, $with_private = false, $passwords = array());
+
+    /**
+     * Keys listing.
+     *
+     * @param string Optional pattern for key ID, user ID or fingerprint
+     *
+     * @return mixed Array of enigma_key objects or enigma_error
+     */
+    abstract function list_keys($pattern = '');
+
+    /**
+     * Single key information.
+     *
+     * @param string Key ID, user ID or fingerprint
+     *
+     * @return mixed Key (enigma_key) object or enigma_error
+     */
+    abstract function get_key($keyid);
+
+    /**
+     * Key pair generation.
+     *
+     * @param array Key/User data (name, email, password, size)
+     *
+     * @return mixed Key (enigma_key) object or enigma_error
+     */
+    abstract function gen_key($data);
+
+    /**
+     * Key deletion.
+     *
+     * @param string Key ID
+     *
+     * @return mixed True on success or enigma_error
+     */
+    abstract function delete_key($keyid);
+
+    /**
+     * Returns a name of the hash algorithm used for the last
+     * signing operation.
+     *
+     * @return string Hash algorithm name e.g. sha1
+     */
+    abstract function signature_algorithm();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_driver_gnupg.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,536 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | GnuPG (PGP) driver for the Enigma Plugin                                |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+require_once 'Crypt/GPG.php';
+
+class enigma_driver_gnupg extends enigma_driver
+{
+    protected $rc;
+    protected $gpg;
+    protected $homedir;
+    protected $user;
+    protected $last_sig_algorithm;
+
+
+    function __construct($user)
+    {
+        $this->rc   = rcmail::get_instance();
+        $this->user = $user;
+    }
+
+    /**
+     * Driver initialization and environment checking.
+     * Should only return critical errors.
+     *
+     * @return mixed NULL on success, enigma_error on failure
+     */
+    function init()
+    {
+        $homedir = $this->rc->config->get('enigma_pgp_homedir', INSTALL_PATH . 'plugins/enigma/home');
+        $debug   = $this->rc->config->get('enigma_debug');
+        $binary  = $this->rc->config->get('enigma_pgp_binary');
+        $agent   = $this->rc->config->get('enigma_pgp_agent');
+        $gpgconf = $this->rc->config->get('enigma_pgp_gpgconf');
+
+        if (!$homedir) {
+            return new enigma_error(enigma_error::INTERNAL,
+                "Option 'enigma_pgp_homedir' not specified");
+        }
+
+        // check if homedir exists (create it if not) and is readable
+        if (!file_exists($homedir)) {
+            return new enigma_error(enigma_error::INTERNAL,
+                "Keys directory doesn't exists: $homedir");
+        }
+        if (!is_writable($homedir)) {
+            return new enigma_error(enigma_error::INTERNAL,
+                "Keys directory isn't writeable: $homedir");
+        }
+
+        $homedir = $homedir . '/' . $this->user;
+
+        // check if user's homedir exists (create it if not) and is readable
+        if (!file_exists($homedir)) {
+            mkdir($homedir, 0700);
+        }
+
+        if (!file_exists($homedir)) {
+            return new enigma_error(enigma_error::INTERNAL,
+                "Unable to create keys directory: $homedir");
+        }
+        if (!is_writable($homedir)) {
+            return new enigma_error(enigma_error::INTERNAL,
+                "Unable to write to keys directory: $homedir");
+        }
+
+        $this->homedir = $homedir;
+
+        $options = array('homedir' => $this->homedir);
+
+        if ($debug) {
+            $options['debug'] = array($this, 'debug');
+        }
+        if ($binary) {
+            $options['binary'] = $binary;
+        }
+        if ($agent) {
+            $options['agent'] = $agent;
+        }
+        if ($gpgconf) {
+            $options['gpgconf'] = $gpgconf;
+        }
+
+        // Create Crypt_GPG object
+        try {
+            $this->gpg = new Crypt_GPG($options);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Encryption (and optional signing).
+     *
+     * @param string     Message body
+     * @param array      List of keys (enigma_key objects)
+     * @param enigma_key Optional signing Key ID
+     *
+     * @return mixed Encrypted message or enigma_error on failure
+     */
+    function encrypt($text, $keys, $sign_key = null)
+    {
+        try {
+            foreach ($keys as $key) {
+                $this->gpg->addEncryptKey($key->reference);
+            }
+
+            if ($sign_key) {
+                $this->gpg->addSignKey($sign_key->reference, $sign_key->password);
+
+                $res     = $this->gpg->encryptAndSign($text, true);
+                $sigInfo = $this->gpg->getLastSignatureInfo();
+
+                $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();
+
+                return $res;
+            }
+
+            return $this->gpg->encrypt($text, true);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Decrypt a message (and verify if signature found)
+     *
+     * @param string           Encrypted message
+     * @param array            List of key-password mapping
+     * @param enigma_signature Signature information (if available)
+     *
+     * @return mixed Decrypted message or enigma_error on failure
+     */
+    function decrypt($text, $keys = array(), &$signature = null)
+    {
+        try {
+            foreach ($keys as $key => $password) {
+                $this->gpg->addDecryptKey($key, $password);
+            }
+
+            $result = $this->gpg->decryptAndVerify($text, true);
+
+            if (!empty($result['signatures'])) {
+                $signature = $this->parse_signature($result['signatures'][0]);
+            }
+
+            return $result['data'];
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Signing.
+     *
+     * @param string     Message body
+     * @param enigma_key The key
+     * @param int        Signing mode (enigma_engine::SIGN_*)
+     *
+     * @return mixed True on success or enigma_error on failure
+     */
+    function sign($text, $key, $mode = null)
+    {
+        try {
+            $this->gpg->addSignKey($key->reference, $key->password);
+
+            $res     = $this->gpg->sign($text, $mode, CRYPT_GPG::ARMOR_ASCII, true);
+            $sigInfo = $this->gpg->getLastSignatureInfo();
+
+            $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();
+
+            return $res;
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Signature verification.
+     *
+     * @param string Message body
+     * @param string Signature, if message is of type PGP/MIME and body doesn't contain it
+     *
+     * @return mixed Signature information (enigma_signature) or enigma_error
+     */
+    function verify($text, $signature)
+    {
+        try {
+            $verified = $this->gpg->verify($text, $signature);
+            return $this->parse_signature($verified[0]);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Key file import.
+     *
+     * @param string File name or file content
+     * @param bolean True if first argument is a filename
+     * @param array  Optional key => password map
+     *
+     * @return mixed Import status array or enigma_error
+     */
+    public function import($content, $isfile = false, $passwords = array())
+    {
+        try {
+            // GnuPG 2.1 requires secret key passphrases on import
+            foreach ($passwords as $keyid => $pass) {
+                $this->gpg->addPassphrase($keyid, $pass);
+            }
+
+            if ($isfile)
+                return $this->gpg->importKeyFile($content);
+            else
+                return $this->gpg->importKey($content);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Key export.
+     *
+     * @param string Key ID
+     * @param bool   Include private key
+     * @param array  Optional key => password map
+     *
+     * @return mixed Key content or enigma_error
+     */
+    public function export($keyid, $with_private = false, $passwords = array())
+    {
+        try {
+            $key = $this->gpg->exportPublicKey($keyid, true);
+
+            if ($with_private) {
+                // GnuPG 2.1 requires secret key passphrases on export
+                foreach ($passwords as $_keyid => $pass) {
+                    $this->gpg->addPassphrase($_keyid, $pass);
+                }
+
+                $priv = $this->gpg->exportPrivateKey($keyid, true);
+                $key .= $priv;
+            }
+
+            return $key;
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Keys listing.
+     *
+     * @param string Optional pattern for key ID, user ID or fingerprint
+     *
+     * @return mixed Array of enigma_key objects or enigma_error
+     */
+    public function list_keys($pattern = '')
+    {
+        try {
+            $keys = $this->gpg->getKeys($pattern);
+            $result = array();
+
+            foreach ($keys as $idx => $key) {
+                $result[] = $this->parse_key($key);
+                unset($keys[$idx]);
+            }
+
+            return $result;
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Single key information.
+     *
+     * @param string Key ID, user ID or fingerprint
+     *
+     * @return mixed Key (enigma_key) object or enigma_error
+     */
+    public function get_key($keyid)
+    {
+        $list = $this->list_keys($keyid);
+
+        if (is_array($list)) {
+            return $list[key($list)];
+        }
+
+        // error
+        return $list;
+    }
+
+    /**
+     * Key pair generation.
+     *
+     * @param array Key/User data (user, email, password, size)
+     *
+     * @return mixed Key (enigma_key) object or enigma_error
+     */
+    public function gen_key($data)
+    {
+        try {
+            $debug  = $this->rc->config->get('enigma_debug');
+            $keygen = new Crypt_GPG_KeyGenerator(array(
+                    'homedir' => $this->homedir,
+                    // 'binary'  => '/usr/bin/gpg2',
+                    'debug'   => $debug ? array($this, 'debug') : false,
+            ));
+
+            $key = $keygen
+                ->setExpirationDate(0)
+                ->setPassphrase($data['password'])
+                ->generateKey($data['user'], $data['email']);
+
+            return $this->parse_key($key);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Key deletion.
+     *
+     * @param string Key ID
+     *
+     * @return mixed True on success or enigma_error
+     */
+    public function delete_key($keyid)
+    {
+        // delete public key
+        $result = $this->delete_pubkey($keyid);
+
+        // error handling
+        if ($result !== true) {
+            $code = $result->getCode();
+
+            // if not found, delete private key
+            if ($code == enigma_error::KEYNOTFOUND) {
+                $result = $this->delete_privkey($keyid);
+            }
+            // need to delete private key first
+            else if ($code == enigma_error::DELKEY) {
+                $key = $this->get_key($keyid);
+                for ($i = count($key->subkeys) - 1; $i >= 0; $i--) {
+                    $type = ($key->subkeys[$i]->usage & enigma_key::CAN_ENCRYPT) ? 'priv' : 'pub';
+                    $result = $this->{'delete_' . $type . 'key'}($key->subkeys[$i]->id);
+                    if ($result !== true) {
+                        return $result;
+                    }
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns a name of the hash algorithm used for the last
+     * signing operation.
+     *
+     * @return string Hash algorithm name e.g. sha1
+     */
+    public function signature_algorithm()
+    {
+        return $this->last_sig_algorithm;
+    }
+
+    /**
+     * Private key deletion.
+     */
+    protected function delete_privkey($keyid)
+    {
+        try {
+            $this->gpg->deletePrivateKey($keyid);
+            return true;
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Public key deletion.
+     */
+    protected function delete_pubkey($keyid)
+    {
+        try {
+            $this->gpg->deletePublicKey($keyid);
+            return true;
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
+    }
+
+    /**
+     * Converts Crypt_GPG exception into Enigma's error object
+     *
+     * @param mixed Exception object
+     *
+     * @return enigma_error Error object
+     */
+    protected function get_error_from_exception($e)
+    {
+        $data = array();
+
+        if ($e instanceof Crypt_GPG_KeyNotFoundException) {
+            $error = enigma_error::KEYNOTFOUND;
+            $data['id'] = $e->getKeyId();
+        }
+        else if ($e instanceof Crypt_GPG_BadPassphraseException) {
+            $error = enigma_error::BADPASS;
+            $data['bad']     = $e->getBadPassphrases();
+            $data['missing'] = $e->getMissingPassphrases();
+        }
+        else if ($e instanceof Crypt_GPG_NoDataException) {
+            $error = enigma_error::NODATA;
+        }
+        else if ($e instanceof Crypt_GPG_DeletePrivateKeyException) {
+            $error = enigma_error::DELKEY;
+        }
+        else {
+            $error = enigma_error::INTERNAL;
+        }
+
+        $msg = $e->getMessage();
+
+        return new enigma_error($error, $msg, $data);
+    }
+
+    /**
+     * Converts Crypt_GPG_Signature object into Enigma's signature object
+     *
+     * @param Crypt_GPG_Signature Signature object
+     *
+     * @return enigma_signature Signature object
+     */
+    protected function parse_signature($sig)
+    {
+        $data = new enigma_signature();
+
+        $data->id          = $sig->getId() ?: $sig->getKeyId();
+        $data->valid       = $sig->isValid();
+        $data->fingerprint = $sig->getKeyFingerprint();
+        $data->created     = $sig->getCreationDate();
+        $data->expires     = $sig->getExpirationDate();
+
+        // In case of ERRSIG user may not be set
+        if ($user = $sig->getUserId()) {
+            $data->name    = $user->getName();
+            $data->comment = $user->getComment();
+            $data->email   = $user->getEmail();
+        }
+
+        return $data;
+    }
+
+    /**
+     * Converts Crypt_GPG_Key object into Enigma's key object
+     *
+     * @param Crypt_GPG_Key Key object
+     *
+     * @return enigma_key Key object
+     */
+    protected function parse_key($key)
+    {
+        $ekey = new enigma_key();
+
+        foreach ($key->getUserIds() as $idx => $user) {
+            $id = new enigma_userid();
+            $id->name    = $user->getName();
+            $id->comment = $user->getComment();
+            $id->email   = $user->getEmail();
+            $id->valid   = $user->isValid();
+            $id->revoked = $user->isRevoked();
+
+            $ekey->users[$idx] = $id;
+        }
+
+        $ekey->name = trim($ekey->users[0]->name . ' <' . $ekey->users[0]->email . '>');
+
+        // keep reference to Crypt_GPG's key for performance reasons
+        $ekey->reference = $key;
+
+        foreach ($key->getSubKeys() as $idx => $subkey) {
+            $skey = new enigma_subkey();
+            $skey->id          = $subkey->getId();
+            $skey->revoked     = $subkey->isRevoked();
+            $skey->created     = $subkey->getCreationDate();
+            $skey->expires     = $subkey->getExpirationDate();
+            $skey->fingerprint = $subkey->getFingerprint();
+            $skey->has_private = $subkey->hasPrivate();
+            $skey->algorithm   = $subkey->getAlgorithm();
+            $skey->length      = $subkey->getLength();
+            $skey->usage       = $subkey->usage();
+
+            $ekey->subkeys[$idx] = $skey;
+        };
+
+        $ekey->id = $ekey->subkeys[0]->id;
+
+        return $ekey;
+    }
+
+    /**
+     * Write debug info from Crypt_GPG to logs/enigma
+     */
+    public function debug($line)
+    {
+        rcube::write_log('enigma', 'GPG: ' . $line);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_driver_phpssl.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,234 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | S/MIME driver for the Enigma Plugin                                     |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_driver_phpssl extends enigma_driver
+{
+    private $rc;
+    private $homedir;
+    private $user;
+
+    function __construct($user)
+    {
+        $rcmail = rcmail::get_instance();
+        $this->rc   = $rcmail;
+        $this->user = $user;
+    }
+
+    /**
+     * Driver initialization and environment checking.
+     * Should only return critical errors.
+     *
+     * @return mixed NULL on success, enigma_error on failure
+     */
+    function init()
+    {
+        $homedir = $this->rc->config->get('enigma_smime_homedir', INSTALL_PATH . '/plugins/enigma/home');
+
+        if (!$homedir)
+            return new enigma_error(enigma_error::INTERNAL,
+                "Option 'enigma_smime_homedir' not specified");
+
+        // check if homedir exists (create it if not) and is readable
+        if (!file_exists($homedir))
+            return new enigma_error(enigma_error::INTERNAL,
+                "Keys directory doesn't exists: $homedir");
+        if (!is_writable($homedir))
+            return new enigma_error(enigma_error::INTERNAL,
+                "Keys directory isn't writeable: $homedir");
+
+        $homedir = $homedir . '/' . $this->user;
+
+        // check if user's homedir exists (create it if not) and is readable
+        if (!file_exists($homedir))
+            mkdir($homedir, 0700);
+
+        if (!file_exists($homedir))
+            return new enigma_error(enigma_error::INTERNAL,
+                "Unable to create keys directory: $homedir");
+        if (!is_writable($homedir))
+            return new enigma_error(enigma_error::INTERNAL,
+                "Unable to write to keys directory: $homedir");
+
+        $this->homedir = $homedir;
+
+    }
+
+    function encrypt($text, $keys, $sign_key = null)
+    {
+    }
+
+    function decrypt($text, $keys = array(), &$signature = null)
+    {
+    }
+
+    function sign($text, $key, $mode = null)
+    {
+    }
+
+    function verify($struct, $message)
+    {
+        // use common temp dir
+        $temp_dir  = $this->rc->config->get('temp_dir');
+        $msg_file  = tempnam($temp_dir, 'rcmMsg');
+        $cert_file = tempnam($temp_dir, 'rcmCert');
+
+        $fh = fopen($msg_file, "w");
+        if ($struct->mime_id) {
+            $message->get_part_body($struct->mime_id, false, 0, $fh);
+        }
+        else {
+            $this->rc->storage->get_raw_body($message->uid, $fh);
+        }
+        fclose($fh);
+
+        // @TODO: use stored certificates
+
+        // try with certificate verification
+        $sig      = openssl_pkcs7_verify($msg_file, 0, $cert_file);
+        $validity = true;
+
+        if ($sig !== true) {
+            // try without certificate verification
+            $sig      = openssl_pkcs7_verify($msg_file, PKCS7_NOVERIFY, $cert_file);
+            $validity = enigma_error::UNVERIFIED;
+        }
+
+        if ($sig === true) {
+            $sig = $this->parse_sig_cert($cert_file, $validity);
+        }
+        else {
+            $errorstr = $this->get_openssl_error();
+            $sig = new enigma_error(enigma_error::INTERNAL, $errorstr);
+        }
+
+        // remove temp files
+        @unlink($msg_file);
+        @unlink($cert_file);
+
+        return $sig;
+    }
+
+    public function import($content, $isfile = false, $passwords = array())
+    {
+    }
+
+    public function export($key, $with_private = false, $passwords = array())
+    {
+    }
+
+    public function list_keys($pattern='')
+    {
+    }
+
+    public function get_key($keyid)
+    {
+    }
+
+    public function gen_key($data)
+    {
+    }
+
+    public function delete_key($keyid)
+    {
+    }
+
+    /**
+     * Returns a name of the hash algorithm used for the last
+     * signing operation.
+     *
+     * @return string Hash algorithm name e.g. sha1
+     */
+    public function signature_algorithm()
+    {
+    }
+
+    /**
+     * Converts Crypt_GPG_Key object into Enigma's key object
+     *
+     * @param Crypt_GPG_Key Key object
+     *
+     * @return enigma_key Key object
+     */
+    private function parse_key($key)
+    {
+/*
+        $ekey = new enigma_key();
+
+        foreach ($key->getUserIds() as $idx => $user) {
+            $id = new enigma_userid();
+            $id->name    = $user->getName();
+            $id->comment = $user->getComment();
+            $id->email   = $user->getEmail();
+            $id->valid   = $user->isValid();
+            $id->revoked = $user->isRevoked();
+
+            $ekey->users[$idx] = $id;
+        }
+        
+        $ekey->name = trim($ekey->users[0]->name . ' <' . $ekey->users[0]->email . '>');
+
+        foreach ($key->getSubKeys() as $idx => $subkey) {
+                $skey = new enigma_subkey();
+                $skey->id          = $subkey->getId();
+                $skey->revoked     = $subkey->isRevoked();
+                $skey->created     = $subkey->getCreationDate();
+                $skey->expires     = $subkey->getExpirationDate();
+                $skey->fingerprint = $subkey->getFingerprint();
+                $skey->has_private = $subkey->hasPrivate();
+
+                $ekey->subkeys[$idx] = $skey;
+        };
+        
+        $ekey->id = $ekey->subkeys[0]->id;
+        
+        return $ekey;
+*/
+    }
+
+    private function get_openssl_error()
+    {
+        $tmp = array();
+        while ($errorstr = openssl_error_string()) {
+            $tmp[] = $errorstr;
+        }
+
+        return join("\n", array_values($tmp));
+    }
+
+    private function parse_sig_cert($file, $validity)
+    {
+        $cert = openssl_x509_parse(file_get_contents($file));
+
+        if (empty($cert) || empty($cert['subject'])) {
+            $errorstr = $this->get_openssl_error();
+            return new enigma_error(enigma_error::INTERNAL, $errorstr);
+        }
+
+        $data = new enigma_signature();
+
+        $data->id          = $cert['hash']; //?
+        $data->valid       = $validity;
+        $data->fingerprint = $cert['serialNumber'];
+        $data->created     = $cert['validFrom_time_t'];
+        $data->expires     = $cert['validTo_time_t'];
+        $data->name        = $cert['subject']['CN'];
+//        $data->comment     = '';
+        $data->email       = $cert['subject']['emailAddress'];
+
+        return $data;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_engine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1391 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Engine of the Enigma Plugin                                             |
+ |                                                                         |
+ | Copyright (C) 2010-2016 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+/**
+ * Enigma plugin engine.
+ *
+ * RFC2440: OpenPGP Message Format
+ * RFC3156: MIME Security with OpenPGP
+ * RFC3851: S/MIME
+ */
+class enigma_engine
+{
+    private $rc;
+    private $enigma;
+    private $pgp_driver;
+    private $smime_driver;
+    private $password_time;
+
+    public $decryptions     = array();
+    public $signatures      = array();
+    public $encrypted_parts = array();
+
+    const ENCRYPTED_PARTIALLY = 100;
+
+    const SIGN_MODE_BODY     = 1;
+    const SIGN_MODE_SEPARATE = 2;
+    const SIGN_MODE_MIME     = 4;
+
+    const ENCRYPT_MODE_BODY = 1;
+    const ENCRYPT_MODE_MIME = 2;
+    const ENCRYPT_MODE_SIGN = 4;
+
+
+    /**
+     * Plugin initialization.
+     */
+    function __construct($enigma)
+    {
+        $this->rc     = rcmail::get_instance();
+        $this->enigma = $enigma;
+
+        $this->password_time = $this->rc->config->get('enigma_password_time') * 60;
+
+        // this will remove passwords from session after some time
+        if ($this->password_time) {
+            $this->get_passwords();
+        }
+    }
+
+    /**
+     * PGP driver initialization.
+     */
+    function load_pgp_driver()
+    {
+        if ($this->pgp_driver) {
+            return;
+        }
+
+        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_pgp_driver', 'gnupg');
+        $username = $this->rc->user->get_username();
+
+        // Load driver
+        $this->pgp_driver = new $driver($username);
+
+        if (!$this->pgp_driver) {
+            rcube::raise_error(array(
+                'code' => 600, 'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Enigma plugin: Unable to load PGP driver: $driver"
+            ), true, true);
+        }
+
+        // Initialise driver
+        $result = $this->pgp_driver->init();
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__, true);
+        }
+    }
+
+    /**
+     * S/MIME driver initialization.
+     */
+    function load_smime_driver()
+    {
+        if ($this->smime_driver) {
+            return;
+        }
+
+        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_smime_driver', 'phpssl');
+        $username = $this->rc->user->get_username();
+
+        // Load driver
+        $this->smime_driver = new $driver($username);
+
+        if (!$this->smime_driver) {
+            rcube::raise_error(array(
+                'code' => 600, 'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Enigma plugin: Unable to load S/MIME driver: $driver"
+            ), true, true);
+        }
+
+        // Initialise driver
+        $result = $this->smime_driver->init();
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__, true);
+        }
+    }
+
+    /**
+     * Handler for message signing
+     *
+     * @param Mail_mime Original message
+     * @param int       Encryption mode
+     *
+     * @return enigma_error On error returns error object
+     */
+    function sign_message(&$message, $mode = null)
+    {
+        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_SIGNED);
+        $from = $mime->getFromAddress();
+
+        // find private key
+        $key = $this->find_key($from, true);
+
+        if (empty($key)) {
+            return new enigma_error(enigma_error::KEYNOTFOUND);
+        }
+
+        // check if we have password for this key
+        $passwords = $this->get_passwords();
+        $pass      = $passwords[$key->id];
+
+        if ($pass === null) {
+            // ask for password
+            $error = array('missing' => array($key->id => $key->name));
+            return new enigma_error(enigma_error::BADPASS, '', $error);
+        }
+
+        $key->password = $pass;
+
+        // select mode
+        switch ($mode) {
+        case self::SIGN_MODE_BODY:
+            $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
+            break;
+
+        case self::SIGN_MODE_MIME:
+            $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
+            break;
+
+        default:
+            if ($mime->isMultipart()) {
+                $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
+            }
+            else {
+                $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
+            }
+        }
+
+        // get message body
+        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
+            // in this mode we'll replace text part
+            // with the one containing signature
+            $body = $message->getTXTBody();
+
+            $text_charset = $message->getParam('text_charset');
+            $line_length  = $this->rc->config->get('line_length', 72);
+
+            // We can't use format=flowed for signed messages
+            if (strpos($text_charset, 'format=flowed')) {
+                list($charset, $params) = explode(';', $text_charset);
+                $body = rcube_mime::unfold_flowed($body);
+                $body = rcube_mime::wordwrap($body, $line_length, "\r\n", false, $charset);
+
+                $text_charset = str_replace(";\r\n format=flowed", '', $text_charset);
+            }
+        }
+        else {
+            // here we'll build PGP/MIME message
+            $body = $mime->getOrigBody();
+        }
+
+        // sign the body
+        $result = $this->pgp_sign($body, $key, $pgp_mode);
+
+        if ($result !== true) {
+            if ($result->getCode() == enigma_error::BADPASS) {
+                // ask for password
+                $error = array('bad' => array($key->id => $key->name));
+                return new enigma_error(enigma_error::BADPASS, '', $error);
+            }
+
+            return $result;
+        }
+
+        // replace message body
+        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
+            $message->setTXTBody($body);
+            $message->setParam('text_charset', $text_charset);
+        }
+        else {
+            $mime->addPGPSignature($body, $this->pgp_driver->signature_algorithm());
+            $message = $mime;
+        }
+    }
+
+    /**
+     * Handler for message encryption
+     *
+     * @param Mail_mime Original message
+     * @param int       Encryption mode
+     * @param bool      Is draft-save action - use only sender's key for encryption
+     *
+     * @return enigma_error On error returns error object
+     */
+    function encrypt_message(&$message, $mode = null, $is_draft = false)
+    {
+        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_ENCRYPTED);
+
+        // always use sender's key
+        $from = $mime->getFromAddress();
+
+        // check senders key for signing
+        if ($mode & self::ENCRYPT_MODE_SIGN) {
+            $sign_key = $this->find_key($from, true);
+
+            if (empty($sign_key)) {
+                return new enigma_error(enigma_error::KEYNOTFOUND);
+            }
+
+            // check if we have password for this key
+            $passwords = $this->get_passwords();
+            $sign_pass = $passwords[$sign_key->id];
+
+            if ($sign_pass === null) {
+                // ask for password
+                $error = array('missing' => array($sign_key->id => $sign_key->name));
+                return new enigma_error(enigma_error::BADPASS, '', $error);
+            }
+
+            $sign_key->password = $sign_pass;
+        }
+
+        $recipients = array($from);
+
+        // if it's not a draft we add all recipients' keys
+        if (!$is_draft) {
+            $recipients = array_merge($recipients, $mime->getRecipients());
+        }
+
+        if (empty($recipients)) {
+            return new enigma_error(enigma_error::KEYNOTFOUND);
+        }
+
+        $recipients = array_unique($recipients);
+
+        // find recipient public keys
+        foreach ((array) $recipients as $email) {
+            if ($email == $from && $sign_key) {
+                $key = $sign_key;
+            }
+            else {
+                $key = $this->find_key($email);
+            }
+
+            if (empty($key)) {
+                return new enigma_error(enigma_error::KEYNOTFOUND, '', array(
+                    'missing' => $email
+                ));
+            }
+
+            $keys[] = $key;
+        }
+
+        // select mode
+        if ($mode & self::ENCRYPT_MODE_BODY) {
+            $encrypt_mode = $mode;
+        }
+        else if ($mode & self::ENCRYPT_MODE_MIME) {
+            $encrypt_mode = $mode;
+        }
+        else {
+            $encrypt_mode = $mime->isMultipart() ? self::ENCRYPT_MODE_MIME : self::ENCRYPT_MODE_BODY;
+        }
+
+        // get message body
+        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
+            // in this mode we'll replace text part
+            // with the one containing encrypted message
+            $body = $message->getTXTBody();
+        }
+        else {
+            // here we'll build PGP/MIME message
+            $body = $mime->getOrigBody();
+        }
+
+        // sign the body
+        $result = $this->pgp_encrypt($body, $keys, $sign_key);
+
+        if ($result !== true) {
+            if ($result->getCode() == enigma_error::BADPASS) {
+                // ask for password
+                $error = array('bad' => array($sign_key->id => $sign_key->name));
+                return new enigma_error(enigma_error::BADPASS, '', $error);
+            }
+
+            return $result;
+        }
+
+        // replace message body
+        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
+            $message->setTXTBody($body);
+        }
+        else {
+            $mime->setPGPEncryptedBody($body);
+            $message = $mime;
+        }
+    }
+
+    /**
+     * Handler for attaching public key to a message
+     *
+     * @param Mail_mime Original message
+     *
+     * @return bool True on success, False on failure
+     */
+    function attach_public_key(&$message)
+    {
+        $headers = $message->headers();
+        $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
+        $from    = $from[1];
+
+        // find my key
+        if ($from && ($key = $this->find_key($from))) {
+            $pubkey_armor = $this->export_key($key->id);
+
+            if (!$pubkey_armor instanceof enigma_error) {
+                $pubkey_name = '0x' . enigma_key::format_id($key->id) . '.asc';
+                $message->addAttachment($pubkey_armor, 'application/pgp-keys', $pubkey_name, false, '7bit');
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Handler for message_part_structure hook.
+     * Called for every part of the message.
+     *
+     * @param array  Original parameters
+     * @param string Part body (will be set if used internally)
+     *
+     * @return array Modified parameters
+     */
+    function part_structure($p, $body = null)
+    {
+        if ($p['mimetype'] == 'text/plain' || $p['mimetype'] == 'application/pgp') {
+            $this->parse_plain($p, $body);
+        }
+        else if ($p['mimetype'] == 'multipart/signed') {
+            $this->parse_signed($p, $body);
+        }
+        else if ($p['mimetype'] == 'multipart/encrypted') {
+            $this->parse_encrypted($p);
+        }
+        else if ($p['mimetype'] == 'application/pkcs7-mime') {
+            $this->parse_encrypted($p);
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for message_part_body hook.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function part_body($p)
+    {
+        // encrypted attachment, see parse_plain_encrypted()
+        if ($p['part']->need_decryption && $p['part']->body === null) {
+            $this->load_pgp_driver();
+
+            $storage = $this->rc->get_storage();
+            $body    = $storage->get_message_part($p['object']->uid, $p['part']->mime_id, $p['part'], null, null, true, 0, false);
+            $result  = $this->pgp_decrypt($body);
+
+            // @TODO: what to do on error?
+            if ($result === true) {
+                $p['part']->body = $body;
+                $p['part']->size = strlen($body);
+                $p['part']->body_modified = true;
+            }
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for plain/text message.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Part body (will be set if used internally)
+     */
+    function parse_plain(&$p, $body = null)
+    {
+        $part = $p['structure'];
+
+        // Get message body from IMAP server
+        if ($body === null) {
+            $body = $this->get_part_body($p['object'], $part);
+        }
+
+        // In this way we can use fgets on string as on file handle
+        // Don't use php://temp for security (body may come from an encrypted part)
+        $fd = fopen('php://memory', 'r+');
+        if (!$fd) {
+            return;
+        }
+
+        fwrite($fd, $body);
+        rewind($fd);
+
+        $body   = '';
+        $prefix = '';
+        $mode   = '';
+        $tokens = array(
+            'BEGIN PGP SIGNED MESSAGE' => 'signed-start',
+            'END PGP SIGNATURE'        => 'signed-end',
+            'BEGIN PGP MESSAGE'        => 'encrypted-start',
+            'END PGP MESSAGE'          => 'encrypted-end',
+        );
+        $regexp = '/^-----(' . implode('|', array_keys($tokens)) . ')-----[\r\n]*/';
+
+        while (($line = fgets($fd)) !== false) {
+            if ($line[0] === '-' && $line[4] === '-' && preg_match($regexp, $line, $m)) {
+                switch ($tokens[$m[1]]) {
+                case 'signed-start':
+                    $body = $line;
+                    $mode = 'signed';
+                    break;
+
+                case 'signed-end':
+                    if ($mode === 'signed') {
+                        $body .= $line;
+                    }
+                    break 2; // ignore anything after this line
+
+                case 'encrypted-start':
+                    $body = $line;
+                    $mode = 'encrypted';
+                    break;
+
+                case 'encrypted-end':
+                    if ($mode === 'encrypted') {
+                        $body .= $line;
+                    }
+                    break 2; // ignore anything after this line
+                }
+
+                continue;
+            }
+
+            if ($mode === 'signed') {
+                $body .= $line;
+            }
+            else if ($mode === 'encrypted') {
+                $body .= $line;
+            }
+            else {
+                $prefix .= $line;
+            }
+        }
+
+        fclose($fd);
+
+        if ($mode === 'signed') {
+            $this->parse_plain_signed($p, $body, $prefix);
+        }
+        else if ($mode === 'encrypted') {
+            $this->parse_plain_encrypted($p, $body, $prefix);
+        }
+    }
+
+    /**
+     * Handler for multipart/signed message.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Part body (will be set if used internally)
+     */
+    function parse_signed(&$p, $body = null)
+    {
+        $struct = $p['structure'];
+
+        // S/MIME
+        if ($struct->parts[1] && $struct->parts[1]->mimetype == 'application/pkcs7-signature') {
+            $this->parse_smime_signed($p, $body);
+        }
+        // PGP/MIME: RFC3156
+        // The multipart/signed body MUST consist of exactly two parts.
+        // The first part contains the signed data in MIME canonical format,
+        // including a set of appropriate content headers describing the data.
+        // The second body MUST contain the PGP digital signature.  It MUST be
+        // labeled with a content type of "application/pgp-signature".
+        else if (count($struct->parts) == 2
+            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/pgp-signature'
+        ) {
+            $this->parse_pgp_signed($p, $body);
+        }
+    }
+
+    /**
+     * Handler for multipart/encrypted message.
+     *
+     * @param array Reference to hook's parameters
+     */
+    function parse_encrypted(&$p)
+    {
+        $struct = $p['structure'];
+
+        // S/MIME
+        if ($p['mimetype'] == 'application/pkcs7-mime') {
+            $this->parse_smime_encrypted($p);
+        }
+        // PGP/MIME: RFC3156
+        // The multipart/encrypted MUST consist of exactly two parts. The first
+        // MIME body part must have a content type of "application/pgp-encrypted".
+        // This body contains the control information.
+        // The second MIME body part MUST contain the actual encrypted data.  It
+        // must be labeled with a content type of "application/octet-stream".
+        else if (count($struct->parts) == 2
+            && $struct->parts[0] && $struct->parts[0]->mimetype == 'application/pgp-encrypted'
+            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/octet-stream'
+        ) {
+            $this->parse_pgp_encrypted($p);
+        }
+    }
+
+    /**
+     * Handler for plain signed message.
+     * Excludes message and signature bodies and verifies signature.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Message (part) body
+     * @param string Body prefix (additional text before the encrypted block)
+     */
+    private function parse_plain_signed(&$p, $body, $prefix = '')
+    {
+        if (!$this->rc->config->get('enigma_signatures', true)) {
+            return;
+        }
+
+        $this->load_pgp_driver();
+        $part = $p['structure'];
+
+        // Verify signature
+        if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
+            $sig = $this->pgp_verify($body);
+        }
+
+        // In this way we can use fgets on string as on file handle
+        // Don't use php://temp for security (body may come from an encrypted part)
+        $fd = fopen('php://memory', 'r+');
+        if (!$fd) {
+            return;
+        }
+
+        fwrite($fd, $body);
+        rewind($fd);
+
+        $body = $part->body = null;
+        $part->body_modified = true;
+
+        // Extract body (and signature?)
+        while (($line = fgets($fd, 1024)) !== false) {
+            if ($part->body === null)
+                $part->body = '';
+            else if (preg_match('/^-----BEGIN PGP SIGNATURE-----/', $line))
+                break;
+            else
+                $part->body .= $line;
+        }
+
+        fclose($fd);
+
+        // Remove "Hash" Armor Headers
+        $part->body = preg_replace('/^.*\r*\n\r*\n/', '', $part->body);
+        // de-Dash-Escape (RFC2440)
+        $part->body = preg_replace('/(^|\n)- -/', '\\1-', $part->body);
+
+        if ($prefix) {
+            $part->body = $prefix . $part->body;
+        }
+
+        // Store signature data for display
+        if (!empty($sig)) {
+            $sig->partial = !empty($prefix);
+            $this->signatures[$part->mime_id] = $sig;
+        }
+    }
+
+    /**
+     * Handler for PGP/MIME signed message.
+     * Verifies signature.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Part body (will be set if used internally)
+     */
+    private function parse_pgp_signed(&$p, $body = null)
+    {
+        if (!$this->rc->config->get('enigma_signatures', true)) {
+            return;
+        }
+
+        if ($this->rc->action != 'show' && $this->rc->action != 'preview' && $this->rc->action != 'print') {
+            return;
+        }
+
+        $this->load_pgp_driver();
+        $struct = $p['structure'];
+
+        $msg_part = $struct->parts[0];
+        $sig_part = $struct->parts[1];
+
+        // Get bodies
+        if ($body === null) {
+            if (!$struct->body_modified) {
+                $body = $this->get_part_body($p['object'], $struct);
+            }
+        }
+
+        $boundary = $struct->ctype_parameters['boundary'];
+
+        // when it is a signed message forwarded as attachment
+        // ctype_parameters property will not be set
+        if (!$boundary && $struct->headers['content-type']
+            && preg_match('/boundary="?([a-zA-Z0-9\'()+_,-.\/:=?]+)"?/', $struct->headers['content-type'], $m)
+        ) {
+            $boundary = $m[1];
+        }
+
+        // set signed part body
+        list($msg_body, $sig_body) = $this->explode_signed_body($body, $boundary);
+
+        // Verify
+        if ($sig_body && $msg_body) {
+            $sig = $this->pgp_verify($msg_body, $sig_body);
+
+            // Store signature data for display
+            $this->signatures[$struct->mime_id] = $sig;
+            $this->signatures[$msg_part->mime_id] = $sig;
+        }
+    }
+
+    /**
+     * Handler for S/MIME signed message.
+     * Verifies signature.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Part body (will be set if used internally)
+     */
+    private function parse_smime_signed(&$p, $body = null)
+    {
+        if (!$this->rc->config->get('enigma_signatures', true)) {
+            return;
+        }
+
+        // @TODO
+    }
+
+    /**
+     * Handler for plain encrypted message.
+     *
+     * @param array  Reference to hook's parameters
+     * @param string Message (part) body
+     * @param string Body prefix (additional text before the encrypted block)
+     */
+    private function parse_plain_encrypted(&$p, $body, $prefix = '')
+    {
+        if (!$this->rc->config->get('enigma_decryption', true)) {
+            return;
+        }
+
+        $this->load_pgp_driver();
+        $part = $p['structure'];
+
+        // Decrypt
+        $result = $this->pgp_decrypt($body, $signature);
+
+        // Store decryption status
+        $this->decryptions[$part->mime_id] = $result;
+
+        // Store signature data for display
+        if ($signature) {
+            $this->signatures[$part->mime_id] = $signature;
+        }
+
+        // find parent part ID
+        if (strpos($part->mime_id, '.')) {
+            $items = explode('.', $part->mime_id);
+            array_pop($items);
+            $parent = implode('.', $items);
+        }
+        else {
+            $parent = 0;
+        }
+
+        // Parse decrypted message
+        if ($result === true) {
+            $part->body          = $prefix . $body;
+            $part->body_modified = true;
+
+            // it maybe PGP signed inside, verify signature
+            $this->parse_plain($p, $body);
+
+            // Remember it was decrypted
+            $this->encrypted_parts[] = $part->mime_id;
+
+            // Inform the user that only a part of the body was encrypted
+            if ($prefix) {
+                $this->decryptions[$part->mime_id] = self::ENCRYPTED_PARTIALLY;
+            }
+
+            // Encrypted plain message may contain encrypted attachments
+            // in such case attachments have .pgp extension and type application/octet-stream.
+            // This is what happens when you select "Encrypt each attachment separately
+            // and send the message using inline PGP" in Thunderbird's Enigmail.
+
+            if ($p['object']->mime_parts[$parent]) {
+                foreach ((array)$p['object']->mime_parts[$parent]->parts as $p) {
+                    if ($p->disposition == 'attachment' && $p->mimetype == 'application/octet-stream'
+                        && preg_match('/^(.*)\.pgp$/i', $p->filename, $m)
+                    ) {
+                        // modify filename
+                        $p->filename = $m[1];
+                        // flag the part, it will be decrypted when needed
+                        $p->need_decryption = true;
+                        // disable caching
+                        $p->body_modified = true;
+                    }
+                }
+            }
+        }
+        // decryption failed, but the message may have already
+        // been cached with the modified parts (see above),
+        // let's bring the original state back
+        else if ($p['object']->mime_parts[$parent]) {
+            foreach ((array)$p['object']->mime_parts[$parent]->parts as $p) {
+                if ($p->need_decryption && !preg_match('/^(.*)\.pgp$/i', $p->filename, $m)) {
+                    // modify filename
+                    $p->filename .= '.pgp';
+                    // flag the part, it will be decrypted when needed
+                    unset($p->need_decryption);
+                }
+            }
+        }
+    }
+
+    /**
+     * Handler for PGP/MIME encrypted message.
+     *
+     * @param array Reference to hook's parameters
+     */
+    private function parse_pgp_encrypted(&$p)
+    {
+        if (!$this->rc->config->get('enigma_decryption', true)) {
+            return;
+        }
+
+        $this->load_pgp_driver();
+
+        $struct = $p['structure'];
+        $part   = $struct->parts[1];
+
+        // Get body
+        $body = $this->get_part_body($p['object'], $part);
+
+        // Decrypt
+        $result = $this->pgp_decrypt($body, $signature);
+
+        if ($result === true) {
+            // Parse decrypted message
+            $struct = $this->parse_body($body);
+
+            // Modify original message structure
+            $this->modify_structure($p, $struct, strlen($body));
+
+            // Parse the structure (there may be encrypted/signed parts inside
+            $this->part_structure(array(
+                    'object'    => $p['object'],
+                    'structure' => $struct,
+                    'mimetype'  => $struct->mimetype
+                ), $body);
+
+            // Attach the decryption message to all parts
+            $this->decryptions[$struct->mime_id] = $result;
+            foreach ((array) $struct->parts as $sp) {
+                $this->decryptions[$sp->mime_id] = $result;
+                if ($signature) {
+                    $this->signatures[$sp->mime_id] = $signature;
+                }
+            }
+        }
+        else {
+            $this->decryptions[$part->mime_id] = $result;
+
+            // Make sure decryption status message will be displayed
+            $part->type = 'content';
+            $p['object']->parts[] = $part;
+
+            // don't show encrypted part on attachments list
+            // don't show "cannot display encrypted message" text
+            $p['abort'] = true;
+        }
+    }
+
+    /**
+     * Handler for S/MIME encrypted message.
+     *
+     * @param array Reference to hook's parameters
+     */
+    private function parse_smime_encrypted(&$p)
+    {
+        if (!$this->rc->config->get('enigma_decryption', true)) {
+            return;
+        }
+
+        // @TODO
+    }
+
+    /**
+     * PGP signature verification.
+     *
+     * @param mixed Message body
+     * @param mixed Signature body (for MIME messages)
+     *
+     * @return mixed enigma_signature or enigma_error
+     */
+    private function pgp_verify(&$msg_body, $sig_body = null)
+    {
+        // @TODO: Handle big bodies using (temp) files
+        $sig = $this->pgp_driver->verify($msg_body, $sig_body);
+
+        if (($sig instanceof enigma_error) && $sig->getCode() != enigma_error::KEYNOTFOUND) {
+            self::raise_error($sig, __LINE__);
+        }
+
+        return $sig;
+    }
+
+    /**
+     * PGP message decryption.
+     *
+     * @param mixed            &$msg_body  Message body
+     * @param enigma_signature &$signature Signature verification result
+     *
+     * @return mixed True or enigma_error
+     */
+    private function pgp_decrypt(&$msg_body, &$signature = null)
+    {
+        // @TODO: Handle big bodies using (temp) files
+        $keys   = $this->get_passwords();
+        $result = $this->pgp_driver->decrypt($msg_body, $keys, $signature);
+
+        if ($result instanceof enigma_error) {
+            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
+                self::raise_error($result, __LINE__);
+            }
+
+            return $result;
+        }
+
+        $msg_body = $result;
+
+        return true;
+    }
+
+    /**
+     * PGP message signing
+     *
+     * @param mixed      Message body
+     * @param enigma_key The key (with passphrase)
+     * @param int        Signing mode
+     *
+     * @return mixed True or enigma_error
+     */
+    private function pgp_sign(&$msg_body, $key, $mode = null)
+    {
+        // @TODO: Handle big bodies using (temp) files
+        $result = $this->pgp_driver->sign($msg_body, $key, $mode);
+
+        if ($result instanceof enigma_error) {
+            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
+                self::raise_error($result, __LINE__);
+            }
+
+            return $result;
+        }
+
+        $msg_body = $result;
+
+        return true;
+    }
+
+    /**
+     * PGP message encrypting
+     *
+     * @param mixed  Message body
+     * @param array  Keys (array of enigma_key objects)
+     * @param string Optional signing Key ID
+     * @param string Optional signing Key password
+     *
+     * @return mixed True or enigma_error
+     */
+    private function pgp_encrypt(&$msg_body, $keys, $sign_key = null, $sign_pass = null)
+    {
+        // @TODO: Handle big bodies using (temp) files
+        $result = $this->pgp_driver->encrypt($msg_body, $keys, $sign_key, $sign_pass);
+
+        if ($result instanceof enigma_error) {
+            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
+                self::raise_error($result, __LINE__);
+            }
+
+            return $result;
+        }
+
+        $msg_body = $result;
+
+        return true;
+    }
+
+    /**
+     * PGP keys listing.
+     *
+     * @param mixed Key ID/Name pattern
+     *
+     * @return mixed Array of keys or enigma_error
+     */
+    function list_keys($pattern = '')
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->list_keys($pattern);
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Find PGP private/public key
+     *
+     * @param string E-mail address
+     * @param bool   Need a key for signing?
+     *
+     * @return enigma_key The key
+     */
+    function find_key($email, $can_sign = false)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->list_keys($email);
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+            return;
+        }
+
+        $mode = $can_sign ? enigma_key::CAN_SIGN : enigma_key::CAN_ENCRYPT;
+
+        // check key validity and type
+        foreach ($result as $key) {
+            if ($subkey = $key->find_subkey($email, $mode)) {
+                return $key;
+            }
+        }
+    }
+
+    /**
+     * PGP key details.
+     *
+     * @param mixed Key ID
+     *
+     * @return mixed enigma_key or enigma_error
+     */
+    function get_key($keyid)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->get_key($keyid);
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+        }
+
+        return $result;
+    }
+
+    /**
+     * PGP key delete.
+     *
+     * @param string Key ID
+     *
+     * @return enigma_error|bool True on success
+     */
+    function delete_key($keyid)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->delete_key($keyid);
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+        }
+
+        return $result;
+    }
+
+    /**
+     * PGP keys pair generation.
+     *
+     * @param array Key pair parameters
+     *
+     * @return mixed enigma_key or enigma_error
+     */
+    function generate_key($data)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->gen_key($data);
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+        }
+
+        return $result;
+    }
+
+    /**
+     * PGP keys/certs import.
+     *
+     * @param mixed   Import file name or content
+     * @param boolean True if first argument is a filename
+     *
+     * @return mixed Import status data array or enigma_error
+     */
+    function import_key($content, $isfile = false)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->import($content, $isfile, $this->get_passwords());
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+        }
+        else {
+            $result['imported']  = $result['public_imported'] + $result['private_imported'];
+            $result['unchanged'] = $result['public_unchanged'] + $result['private_unchanged'];
+        }
+
+        return $result;
+    }
+
+    /**
+     * PGP keys/certs export.
+     *
+     * @param string   Key ID
+     * @param resource Optional output stream
+     * @param bool     Include private key
+     *
+     * @return mixed Key content or enigma_error
+     */
+    function export_key($key, $fp = null, $include_private = false)
+    {
+        $this->load_pgp_driver();
+        $result = $this->pgp_driver->export($key, $include_private, $this->get_passwords());
+
+        if ($result instanceof enigma_error) {
+            self::raise_error($result, __LINE__);
+            return $result;
+        }
+
+        if ($fp) {
+            fwrite($fp, $result);
+        }
+        else {
+            return $result;
+        }
+    }
+
+    /**
+     * Registers password for specified key/cert sent by the password prompt.
+     */
+    function password_handler()
+    {
+        $keyid  = rcube_utils::get_input_value('_keyid', rcube_utils::INPUT_POST);
+        $passwd = rcube_utils::get_input_value('_passwd', rcube_utils::INPUT_POST, true);
+
+        if ($keyid && $passwd !== null && strlen($passwd)) {
+            $this->save_password(strtoupper($keyid), $passwd);
+        }
+    }
+
+    /**
+     * Saves key/cert password in user session
+     */
+    function save_password($keyid, $password)
+    {
+        // we store passwords in session for specified time
+        if ($config = $_SESSION['enigma_pass']) {
+            $config = $this->rc->decrypt($config);
+            $config = @unserialize($config);
+        }
+
+        $config[$keyid] = array($password, time());
+
+        $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
+    }
+
+    /**
+     * Returns currently stored passwords
+     */
+    function get_passwords()
+    {
+        if ($config = $_SESSION['enigma_pass']) {
+            $config = $this->rc->decrypt($config);
+            $config = @unserialize($config);
+        }
+
+        $threshold = $this->password_time ? time() - $this->password_time : 0;
+        $keys      = array();
+
+        // delete expired passwords
+        foreach ((array) $config as $key => $value) {
+            if ($threshold && $value[1] < $threshold) {
+                unset($config[$key]);
+                $modified = true;
+            }
+            else {
+                $keys[$key] = $value[0];
+            }
+        }
+
+        if ($modified) {
+            $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
+        }
+
+        return $keys;
+    }
+
+    /**
+     * Get message part body.
+     *
+     * @param rcube_message      Message object
+     * @param rcube_message_part Message part
+     */
+    private function get_part_body($msg, $part)
+    {
+        // @TODO: Handle big bodies using file handles
+
+        // This is a special case when we want to get the whole body
+        // using direct IMAP access, in other cases we prefer
+        // rcube_message::get_part_body() as the body may be already in memory
+        if (!$part->mime_id) {
+            // fake the size which may be empty for multipart/* parts
+            // otherwise get_message_part() below will fail
+            if (!$part->size) {
+                $reset = true;
+                $part->size = 1;
+            }
+
+            $storage = $this->rc->get_storage();
+            $body    = $storage->get_message_part($msg->uid, $part->mime_id, $part,
+                null, null, true, 0, false);
+
+            if ($reset) {
+                $part->size = 0;
+            }
+        }
+        else {
+            $body = $msg->get_part_body($part->mime_id, false);
+
+            // Convert charset to get rid of possible non-ascii characters (#5962)
+            if ($part->charset && stripos($part->charset, 'ASCII') === false) {
+                $body = rcube_charset::convert($body, $part->charset, 'US-ASCII');
+            }
+        }
+
+        return $body;
+    }
+
+    /**
+     * Parse decrypted message body into structure
+     *
+     * @param string Message body
+     *
+     * @return array Message structure
+     */
+    private function parse_body(&$body)
+    {
+        // Mail_mimeDecode need \r\n end-line, but gpg may return \n
+        $body = preg_replace('/\r?\n/', "\r\n", $body);
+
+        // parse the body into structure
+        $struct = rcube_mime::parse_message($body);
+
+        return $struct;
+    }
+
+    /**
+     * Replace message encrypted structure with decrypted message structure
+     *
+     * @param array              Hook arguments
+     * @param rcube_message_part Part structure
+     * @param int                Part size
+     */
+    private function modify_structure(&$p, $struct, $size = 0)
+    {
+        // modify mime_parts property of the message object
+        $old_id = $p['structure']->mime_id;
+
+        foreach (array_keys($p['object']->mime_parts) as $idx) {
+            if (!$old_id || $idx == $old_id || strpos($idx, $old_id . '.') === 0) {
+                unset($p['object']->mime_parts[$idx]);
+            }
+        }
+
+        // set some part params used by Roundcube core
+        $struct->headers  = array_merge($p['structure']->headers, $struct->headers);
+        $struct->size     = $size;
+        $struct->filename = $p['structure']->filename;
+
+        // modify the new structure to be correctly handled by Roundcube
+        $this->modify_structure_part($struct, $p['object'], $old_id);
+
+        // replace old structure with the new one
+        $p['structure'] = $struct;
+        $p['mimetype']  = $struct->mimetype;
+    }
+
+    /**
+     * Modify decrypted message part
+     *
+     * @param rcube_message_part
+     * @param rcube_message
+     */
+    private function modify_structure_part($part, $msg, $old_id)
+    {
+        // never cache the body
+        $part->body_modified = true;
+        $part->encoding      = 'stream';
+
+        // modify part identifier
+        if ($old_id) {
+            $part->mime_id = !$part->mime_id ? $old_id : ($old_id . '.' . $part->mime_id);
+        }
+
+        // Cache the fact it was decrypted
+        $this->encrypted_parts[] = $part->mime_id;
+        $msg->mime_parts[$part->mime_id] = $part;
+
+        // modify sub-parts
+        foreach ((array) $part->parts as $p) {
+            $this->modify_structure_part($p, $msg, $old_id);
+        }
+    }
+
+    /**
+     * Extracts body and signature of multipart/signed message body
+     */
+    private function explode_signed_body($body, $boundary)
+    {
+        if (!$body) {
+            return array();
+        }
+
+        $boundary     = '--' . $boundary;
+        $boundary_len = strlen($boundary) + 2;
+
+        // Find boundaries
+        $start = strpos($body, $boundary) + $boundary_len;
+        $end   = strpos($body, $boundary, $start);
+
+        // Get signed body and signature
+        $sig  = substr($body, $end + $boundary_len);
+        $body = substr($body, $start, $end - $start - 2);
+
+        // Cleanup signature
+        $sig = substr($sig, strpos($sig, "\r\n\r\n") + 4);
+        $sig = substr($sig, 0, strpos($sig, $boundary));
+
+        return array($body, $sig);
+    }
+
+    /**
+     * Checks if specified message part is a PGP-key or S/MIME cert data
+     *
+     * @param rcube_message_part Part object
+     *
+     * @return boolean True if part is a key/cert
+     */
+    public function is_keys_part($part)
+    {
+        // @TODO: S/MIME
+        return (
+            // Content-Type: application/pgp-keys
+            $part->mimetype == 'application/pgp-keys'
+        );
+    }
+
+    /**
+     * Removes all user keys and assigned data
+     *
+     * @param string Username
+     *
+     * @return bool True on success, False on failure
+     */
+    public function delete_user_data($username)
+    {
+        $homedir = $this->rc->config->get('enigma_pgp_homedir', INSTALL_PATH . 'plugins/enigma/home');
+        $homedir .= DIRECTORY_SEPARATOR . $username;
+
+        return file_exists($homedir) ? self::delete_dir($homedir) : true;
+    }
+
+    /**
+     * Recursive method to remove directory with its content
+     *
+     * @param string Directory
+     */
+    public static function delete_dir($dir)
+    {
+        // This code can be executed from command line, make sure
+        // we have permissions to delete keys directory
+        if (!is_writable($dir)) {
+            rcube::raise_error("Unable to delete $dir", false, true);
+            return false;
+        }
+
+        if ($content = scandir($dir)) {
+            foreach ($content as $filename) {
+                if ($filename != '.' && $filename != '..') {
+                    $filename = $dir . DIRECTORY_SEPARATOR . $filename;
+
+                    if (is_dir($filename)) {
+                        self::delete_dir($filename);
+                    }
+                    else {
+                        unlink($filename);
+                    }
+                }
+            }
+
+            rmdir($dir);
+        }
+
+        return true;
+    }
+
+    /**
+     * Raise/log (relevant) errors
+     */
+    protected static function raise_error($result, $line, $abort = false)
+    {
+        if ($result->getCode() != enigma_error::BADPASS) {
+            rcube::raise_error(array(
+                    'code'    => 600,
+                    'file'    => __FILE__,
+                    'line'    => $line,
+                    'message' => "Enigma plugin: " . $result->getMessage()
+                ), true, $abort);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_error.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Error class for the Enigma Plugin                                       |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_error
+{
+    private $code;
+    private $message;
+    private $data = array();
+
+    // error codes
+    const OK          = 0;
+    const INTERNAL    = 1;
+    const NODATA      = 2;
+    const KEYNOTFOUND = 3;
+    const DELKEY      = 4;
+    const BADPASS     = 5;
+    const EXPIRED     = 6;
+    const UNVERIFIED  = 7;
+
+
+    function __construct($code = null, $message = '', $data = array())
+    {
+        $this->code    = $code;
+        $this->message = $message;
+        $this->data    = $data;
+    }
+
+    function getCode()
+    {
+        return $this->code;
+    }
+
+    function getMessage()
+    {
+        return $this->message;
+    }
+
+    function getData($name)
+    {
+        return $name ? $this->data[$name] : $this->data;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_key.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Key class for the Enigma Plugin                                         |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_key
+{
+    public $id;
+    public $name;
+    public $users   = array();
+    public $subkeys = array();
+    public $reference;
+    public $password;
+
+    const TYPE_UNKNOWN = 0;
+    const TYPE_KEYPAIR = 1;
+    const TYPE_PUBLIC  = 2;
+
+    const CAN_ENCRYPT      = 1;
+    const CAN_SIGN         = 2;
+    const CAN_CERTIFY      = 4;
+    const CAN_AUTHENTICATE = 8;
+
+
+    /**
+     * Keys list sorting callback for usort()
+     */
+    static function cmp($a, $b)
+    {
+        return strcmp($a->name, $b->name);
+    }
+
+    /**
+     * Returns key type
+     */
+    function get_type()
+    {
+        if ($this->subkeys[0]->has_private)
+            return enigma_key::TYPE_KEYPAIR;
+        else if (!empty($this->subkeys[0]))
+            return enigma_key::TYPE_PUBLIC;
+
+        return enigma_key::TYPE_UNKNOWN;
+    }
+
+    /**
+     * Returns true if all user IDs are revoked
+     */
+    function is_revoked()
+    {
+        foreach ($this->subkeys as $subkey)
+            if (!$subkey->revoked)
+                return false;
+
+        return true;
+    }
+
+    /**
+     * Returns true if any user ID is valid
+     */
+    function is_valid()
+    {
+        foreach ($this->users as $user)
+            if ($user->valid)
+                return true;
+
+        return false;
+    }
+
+    /**
+     * Returns true if any of subkeys is not expired
+     */
+    function is_expired()
+    {
+        $now = time();
+
+        foreach ($this->subkeys as $subkey)
+            if (!$subkey->expires || $subkey->expires > $now)
+                return true;
+
+        return false;
+    }
+
+    /**
+     * Returns true if any of subkeys is a private key
+     */
+    function is_private()
+    {
+        $now = time();
+
+        foreach ($this->subkeys as $subkey)
+            if ($subkey->has_private)
+                return true;
+
+        return false;
+    }
+
+    /**
+     * Get key ID by user email
+     */
+    function find_subkey($email, $mode)
+    {
+        $now = time();
+
+        foreach ($this->users as $user) {
+            if (strcasecmp($user->email, $email) === 0 && $user->valid && !$user->revoked) {
+                foreach ($this->subkeys as $subkey) {
+                    if (!$subkey->revoked && (!$subkey->expires || $subkey->expires > $now)) {
+                        if ($subkey->usage & $mode) {
+                            return $subkey;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Converts long ID or Fingerprint to short ID
+     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
+     *
+     * @param string Key ID or fingerprint
+     * @return string Key short ID
+     */
+    static function format_id($id)
+    {
+        // E.g. 04622F2089E037A5 => 89E037A5
+
+        return substr($id, -8);
+    }
+
+    /**
+     * Formats fingerprint string
+     *
+     * @param string Key fingerprint
+     *
+     * @return string Formatted fingerprint (with spaces)
+     */
+    static function format_fingerprint($fingerprint)
+    {
+        if (!$fingerprint) {
+            return '';
+        }
+
+        $result = '';
+        for ($i=0; $i<40; $i++) {
+            if ($i % 4 == 0) {
+                $result .= ' ';
+            }
+            $result .= $fingerprint[$i];
+        }
+
+        return $result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_mime_message.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,305 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Mail_mime wrapper for the Enigma Plugin                                 |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_mime_message extends Mail_mime
+{
+    const PGP_SIGNED    = 1;
+    const PGP_ENCRYPTED = 2;
+
+    protected $type;
+    protected $message;
+    protected $body;
+    protected $signature;
+    protected $encrypted;
+    protected $micalg;
+
+
+    /**
+     * Object constructor
+     *
+     * @param Mail_mime Original message
+     * @param int       Output message type
+     */
+    function __construct($message, $type)
+    {
+        $this->message = $message;
+        $this->type    = $type;
+
+        // clone parameters
+        foreach (array_keys($this->build_params) as $param) {
+            $this->build_params[$param] = $message->getParam($param);
+        }
+
+        // clone headers
+        $this->headers = $message->headers();
+
+        // \r\n is must-have here
+        $this->body = $message->get() . "\r\n";
+    }
+
+    /**
+     * Check if the message is multipart (requires PGP/MIME)
+     *
+     * @return bool True if it is multipart, otherwise False
+     */
+    public function isMultipart()
+    {
+        return $this->message instanceof enigma_mime_message
+            || $this->message->isMultipart() || $this->message->getHTMLBody();
+    }
+
+    /**
+     * Get e-mail address of message sender
+     *
+     * @return string Sender address
+     */
+    public function getFromAddress()
+    {
+        // get sender address
+        $headers = $this->message->headers();
+        $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
+        $from    = $from[1];
+
+        return $from;
+    }
+
+    /**
+     * Get recipients' e-mail addresses
+     *
+     * @return array Recipients' addresses
+     */
+    public function getRecipients()
+    {
+        // get sender address
+        $headers = $this->message->headers();
+        $to      = rcube_mime::decode_address_list($headers['To'], null, false, null, true);
+        $cc      = rcube_mime::decode_address_list($headers['Cc'], null, false, null, true);
+        $bcc     = rcube_mime::decode_address_list($headers['Bcc'], null, false, null, true);
+
+        $recipients = array_unique(array_merge($to, $cc, $bcc));
+        $recipients = array_diff($recipients, array('undisclosed-recipients:'));
+
+        return $recipients;
+    }
+
+    /**
+     * Get original message body, to be encrypted/signed
+     *
+     * @return string Message body
+     */
+    public function getOrigBody()
+    {
+        $_headers = $this->message->headers();
+        $headers  = array();
+
+        if ($_headers['Content-Transfer-Encoding']
+            && stripos($_headers['Content-Type'], 'multipart') === false
+        ) {
+            $headers[] = 'Content-Transfer-Encoding: ' . $_headers['Content-Transfer-Encoding'];
+        }
+        $headers[] = 'Content-Type: ' . $_headers['Content-Type'];
+
+        return implode("\r\n", $headers) . "\r\n\r\n" . $this->body;
+    }
+
+    /**
+     * Register signature attachment
+     *
+     * @param string Signature body
+     * @param string Hash algorithm name
+     */
+    public function addPGPSignature($body, $algorithm = null)
+    {
+        $this->signature = $body;
+        $this->micalg    = $algorithm;
+
+        // Reset Content-Type to be overwritten with valid boundary
+        unset($this->headers['Content-Type']);
+        unset($this->headers['Content-Transfer-Encoding']);
+    }
+
+    /**
+     * Register encrypted body
+     *
+     * @param string Encrypted body
+     */
+    public function setPGPEncryptedBody($body)
+    {
+        $this->encrypted = $body;
+
+        // Reset Content-Type to be overwritten with valid boundary
+        unset($this->headers['Content-Type']);
+        unset($this->headers['Content-Transfer-Encoding']);
+    }
+
+    /**
+     * Builds the multipart message.
+     *
+     * @param array    $params    Build parameters that change the way the email
+     *                            is built. Should be associative. See $_build_params.
+     * @param resource $filename  Output file where to save the message instead of
+     *                            returning it
+     * @param boolean  $skip_head True if you want to return/save only the message
+     *                            without headers
+     *
+     * @return mixed The MIME message content string, null or PEAR error object
+     */
+    public function get($params = null, $filename = null, $skip_head = false)
+    {
+        if (!empty($params)) {
+            foreach ($params as $key => $value) {
+                $this->build_params[$key] = $value;
+            }
+        }
+
+        $this->checkParams();
+
+        if ($this->type == self::PGP_SIGNED) {
+            $params = array(
+                'preamble'     => "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)",
+                'content_type' => "multipart/signed; protocol=\"application/pgp-signature\"",
+                'eol'          => $this->build_params['eol'],
+            );
+
+            if ($this->micalg) {
+                $params['content_type'] .= "; micalg=pgp-" . $this->micalg;
+            }
+
+            $message = new Mail_mimePart('', $params);
+
+            if (!empty($this->body)) {
+                $headers = $this->message->headers();
+                $params  = array('content_type' => $headers['Content-Type']);
+
+                if ($headers['Content-Transfer-Encoding']
+                    && stripos($headers['Content-Type'], 'multipart') === false
+                ) {
+                    $params['encoding'] = $headers['Content-Transfer-Encoding'];
+                }
+
+                $message->addSubpart($this->body, $params);
+            }
+
+            if (!empty($this->signature)) {
+                $message->addSubpart($this->signature, array(
+                    'filename'     => 'signature.asc',
+                    'content_type' => 'application/pgp-signature',
+                    'disposition'  => 'attachment',
+                    'description'  => 'OpenPGP digital signature',
+                ));
+            }
+        }
+        else if ($this->type == self::PGP_ENCRYPTED) {
+            $params = array(
+                'preamble'     => "This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)",
+                'content_type' => "multipart/encrypted; protocol=\"application/pgp-encrypted\"",
+                'eol'          => $this->build_params['eol'],
+            );
+
+            $message = new Mail_mimePart('', $params);
+
+            $message->addSubpart('Version: 1', array(
+                    'content_type' => 'application/pgp-encrypted',
+                    'description'  => 'PGP/MIME version identification',
+            ));
+
+            $message->addSubpart($this->encrypted, array(
+                    'content_type' => 'application/octet-stream',
+                    'description'  => 'PGP/MIME encrypted message',
+                    'disposition'  => 'inline',
+                    'filename'     => 'encrypted.asc',
+            ));
+        }
+
+        // Use saved boundary
+        if (!empty($this->build_params['boundary'])) {
+            $boundary = $this->build_params['boundary'];
+        }
+        else {
+            $boundary = null;
+        }
+
+        // Write output to file
+        if ($filename) {
+            // Append mimePart message headers and body into file
+            $headers = $message->encodeToFile($filename, $boundary, $skip_head);
+
+            if ($this->isError($headers)) {
+                return $headers;
+            }
+
+            $this->headers = array_merge($this->headers, $headers);
+
+            return;
+        }
+        else {
+            $output = $message->encode($boundary, $skip_head);
+
+            if ($this->isError($output)) {
+                return $output;
+            }
+
+            $this->headers = array_merge($this->headers, $output['headers']);
+
+            return $output['body'];
+        }
+    }
+
+    /**
+     * Get Content-Type and Content-Transfer-Encoding headers of the message
+     *
+     * @return array Headers array
+     */
+    protected function contentHeaders()
+    {
+        $this->checkParams();
+
+        $eol = $this->build_params['eol'] ?: "\r\n";
+
+        // multipart message: and boundary
+        if (!empty($this->build_params['boundary'])) {
+            $boundary = $this->build_params['boundary'];
+        }
+        else if (!empty($this->headers['Content-Type'])
+            && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m)
+        ) {
+            $boundary = $m[1];
+        }
+        else {
+            $boundary = '=_' . md5(rand() . microtime());
+        }
+
+        $this->build_params['boundary'] = $boundary;
+
+        if ($this->type == self::PGP_SIGNED) {
+            $headers['Content-Type'] = "multipart/signed;$eol"
+                ." protocol=\"application/pgp-signature\";$eol"
+                ." boundary=\"$boundary\"";
+
+            if ($this->micalg) {
+                $headers['Content-Type'] .= ";{$eol} micalg=pgp-" . $this->micalg;
+            }
+        }
+        else if ($this->type == self::PGP_ENCRYPTED) {
+            $headers['Content-Type'] = "multipart/encrypted;$eol"
+                ." protocol=\"application/pgp-encrypted\";$eol"
+                ." boundary=\"$boundary\"";
+        }
+
+        return $headers;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_signature.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | Signature class for the Enigma Plugin                                   |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_signature
+{
+    public $id;
+    public $valid;
+    public $fingerprint;
+    public $created;
+    public $expires;
+    public $name;
+    public $comment;
+    public $email;
+
+    // Set it to true if signature is valid, but part of the message
+    // was out of the signed block
+    public $partial;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_subkey.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | SubKey class for the Enigma Plugin                                      |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_subkey
+{
+    public $id;
+    public $fingerprint;
+    public $expires;
+    public $created;
+    public $revoked;
+    public $has_private;
+    public $algorithm;
+    public $length;
+    public $usage;
+
+
+    /**
+     * Converts internal ID to short ID
+     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
+     *
+     * @return string Key ID
+     */
+    function get_short_id()
+    {
+        // E.g. 04622F2089E037A5 => 89E037A5
+        return enigma_key::format_id($this->id);
+    }
+
+    /**
+     * Getter for formatted fingerprint
+     *
+     * @return string Formatted fingerprint
+     */
+    function get_fingerprint()
+    {
+        return enigma_key::format_fingerprint($this->fingerprint);
+    }
+
+    /**
+     * Returns human-readable name of the key's algorithm
+     *
+     * @return string Algorithm name
+     */
+    function get_algorithm()
+    {
+        // http://tools.ietf.org/html/rfc4880#section-9.1
+        switch ($this->algorithm) {
+        case 1:
+        case 2:
+        case 3:
+            return 'RSA';
+        case 16:
+        case 20:
+            return 'Elgamal';
+        case 17:
+            return 'DSA';
+        case 18:
+            return 'Elliptic Curve';
+        case 19:
+            return 'ECDSA';
+        case 21:
+            return 'Diffie-Hellman';
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_ui.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1245 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | User Interface for the Enigma Plugin                                    |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_ui
+{
+    private $rc;
+    private $enigma;
+    private $home;
+    private $css_loaded;
+    private $js_loaded;
+    private $data;
+    private $keys_parts  = array();
+    private $keys_bodies = array();
+
+
+    function __construct($enigma_plugin, $home='')
+    {
+        $this->enigma = $enigma_plugin;
+        $this->rc     = $enigma_plugin->rc;
+        $this->home   = $home; // we cannot use $enigma_plugin->home here
+    }
+
+    /**
+     * UI initialization and requests handlers.
+     *
+     * @param string Preferences section
+     */
+    function init()
+    {
+        $this->add_js();
+
+        $action = rcube_utils::get_input_value('_a', rcube_utils::INPUT_GPC);
+
+        if ($this->rc->action == 'plugin.enigmakeys') {
+            switch ($action) {
+                case 'delete':
+                    $this->key_delete();
+                    break;
+/*
+                case 'edit':
+                    $this->key_edit();
+                    break;
+*/
+                case 'import':
+                    $this->key_import();
+                    break;
+
+                case 'export':
+                    $this->key_export();
+                    break;
+
+                case 'generate':
+                    $this->key_generate();
+                    break;
+
+                case 'create':
+                    $this->key_create();
+                    break;
+
+                case 'search':
+                case 'list':
+                    $this->key_list();
+                    break;
+
+                case 'info':
+                    $this->key_info();
+                    break;
+            }
+
+            $this->rc->output->add_handlers(array(
+                    'keyslist'     => array($this, 'tpl_keys_list'),
+                    'keyframe'     => array($this, 'tpl_key_frame'),
+                    'countdisplay' => array($this, 'tpl_keys_rowcount'),
+                    'searchform'   => array($this->rc->output, 'search_form'),
+            ));
+
+            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmakeys'));
+            $this->rc->output->send('enigma.keys');
+        }
+/*
+        // Preferences UI
+        else if ($this->rc->action == 'plugin.enigmacerts') {
+            $this->rc->output->add_handlers(array(
+                    'keyslist'     => array($this, 'tpl_certs_list'),
+                    'keyframe'     => array($this, 'tpl_cert_frame'),
+                    'countdisplay' => array($this, 'tpl_certs_rowcount'),
+                    'searchform'   => array($this->rc->output, 'search_form'),
+            ));
+
+            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmacerts'));
+            $this->rc->output->send('enigma.certs'); 
+        }
+*/
+        // Message composing UI
+        else if ($this->rc->action == 'compose') {
+            $this->compose_ui();
+        }
+    }
+
+    /**
+     * Adds CSS style file to the page header.
+     */
+    function add_css()
+    {
+        if ($this->css_loaded) {
+            return;
+        }
+
+        $skin_path = $this->enigma->local_skin_path();
+        $this->enigma->include_stylesheet("$skin_path/enigma.css");
+        $this->css_loaded = true;
+    }
+
+    /**
+     * Adds javascript file to the page header.
+     */
+    function add_js()
+    {
+        if ($this->js_loaded) {
+            return;
+        }
+
+        $this->enigma->include_script('enigma.js');
+
+        $this->js_loaded = true;
+    }
+
+    /**
+     * Initializes key password prompt
+     *
+     * @param enigma_error $status Error object with key info
+     * @param array        $params Optional prompt parameters
+     */
+    function password_prompt($status, $params = array())
+    {
+        $data = $status->getData('missing');
+
+        if (empty($data)) {
+            $data = $status->getData('bad');
+        }
+
+        $keyid = key($data);
+        $data  = array(
+            'keyid' => $params['keyid'] ?: $keyid,
+            'user'  => $data[$keyid]
+        );
+
+        // With GnuPG 2.1 user name may not be specified (e.g. on private
+        // key export), we'll get the key information and set the name appropriately
+        if ($keyid && $params['keyid'] && strpos($data['user'], $keyid) !== false) {
+            $key = $this->enigma->engine->get_key($params['keyid']);
+            if ($key && $key->name) {
+                $data['user'] = $key->name;
+            }
+        }
+
+        if (!empty($params)) {
+            $data = array_merge($params, $data);
+        }
+
+        if (preg_match('/^(send|plugin.enigmaimport|plugin.enigmakeys)$/', $this->rc->action)) {
+            $this->rc->output->command('enigma_password_request', $data);
+        }
+        else {
+            $this->rc->output->set_env('enigma_password_request', $data);
+        }
+
+        // add some labels to client
+        $this->rc->output->add_label('enigma.enterkeypasstitle', 'enigma.enterkeypass',
+            'save', 'cancel');
+
+        $this->add_css();
+        $this->add_js();
+    }
+
+    /**
+     * Template object for key info/edit frame.
+     *
+     * @param array Object attributes
+     *
+     * @return string HTML output
+     */
+    function tpl_key_frame($attrib)
+    {
+        return $this->rc->output->frame($attrib, true);
+    }
+
+    /**
+     * Template object for list of keys.
+     *
+     * @param array Object attributes
+     *
+     * @return string HTML content
+     */
+    function tpl_keys_list($attrib)
+    {
+        // add id to message list table if not specified
+        if (!strlen($attrib['id'])) {
+            $attrib['id'] = 'rcmenigmakeyslist';
+        }
+
+        // define list of cols to be displayed
+        $a_show_cols = array('name');
+
+        // create XHTML table
+        $out = $this->rc->table_output($attrib, array(), $a_show_cols, 'id');
+
+        // set client env
+        $this->rc->output->add_gui_object('keyslist', $attrib['id']);
+        $this->rc->output->include_script('list.js');
+
+        // add some labels to client
+        $this->rc->output->add_label('enigma.keyremoveconfirm', 'enigma.keyremoving',
+            'enigma.keyexportprompt', 'enigma.withprivkeys', 'enigma.onlypubkeys', 'enigma.exportkeys'
+        );
+
+        return $out;
+    }
+
+    /**
+     * Key listing (and searching) request handler
+     */
+    private function key_list()
+    {
+        $this->enigma->load_engine();
+
+        $pagesize = $this->rc->config->get('pagesize', 100);
+        $page     = max(intval(rcube_utils::get_input_value('_p', rcube_utils::INPUT_GPC)), 1);
+        $search   = rcube_utils::get_input_value('_q', rcube_utils::INPUT_GPC);
+
+        // Get the list
+        $list = $this->enigma->engine->list_keys($search);
+
+        if ($list && ($list instanceof enigma_error))
+            $this->rc->output->show_message('enigma.keylisterror', 'error');
+        else if (empty($list))
+            $this->rc->output->show_message('enigma.nokeysfound', 'notice');
+        else if (is_array($list)) {
+            // Save the size
+            $listsize = count($list);
+
+            // Sort the list by key (user) name
+            usort($list, array('enigma_key', 'cmp'));
+
+            // Slice current page
+            $list = array_slice($list, ($page - 1) * $pagesize, $pagesize);
+            $size = count($list);
+
+            // Add rows
+            foreach ($list as $key) {
+                $this->rc->output->command('enigma_add_list_row', array(
+                        'name'  => rcube::Q($key->name),
+                        'id'    => $key->id,
+                        'flags' => $key->is_private() ? 'p' : ''
+                ));
+            }
+        }
+
+        $this->rc->output->set_env('rowcount', $size);
+        $this->rc->output->set_env('search_request', $search);
+        $this->rc->output->set_env('pagecount', ceil($listsize/$pagesize));
+        $this->rc->output->set_env('current_page', $page);
+        $this->rc->output->command('set_rowcount',
+            $this->get_rowcount_text($listsize, $size, $page));
+
+        $this->rc->output->send();
+    }
+
+    /**
+     * Template object for list records counter.
+     *
+     * @param array Object attributes
+     *
+     * @return string HTML output
+     */
+    function tpl_keys_rowcount($attrib)
+    {
+        if (!$attrib['id'])
+            $attrib['id'] = 'rcmcountdisplay';
+
+        $this->rc->output->add_gui_object('countdisplay', $attrib['id']);
+
+        return html::span($attrib, $this->get_rowcount_text());
+    }
+
+    /**
+     * Returns text representation of list records counter
+     */
+    private function get_rowcount_text($all=0, $curr_count=0, $page=1)
+    {
+        if (!$curr_count) {
+            $out = $this->enigma->gettext('nokeysfound');
+        }
+        else {
+            $pagesize = $this->rc->config->get('pagesize', 100);
+            $first    = ($page - 1) * $pagesize;
+
+            $out = $this->enigma->gettext(array(
+                'name' => 'keysfromto',
+                'vars' => array(
+                    'from'  => $first + 1,
+                    'to'    => $first + $curr_count,
+                    'count' => $all)
+            ));
+        }
+
+        return $out;
+    }
+
+    /**
+     * Key information page handler
+     */
+    private function key_info()
+    {
+        $this->enigma->load_engine();
+
+        $id  = rcube_utils::get_input_value('_id', rcube_utils::INPUT_GET);
+        $res = $this->enigma->engine->get_key($id);
+
+        if ($res instanceof enigma_key) {
+            $this->data = $res;
+        }
+        else { // error
+            $this->rc->output->show_message('enigma.keyopenerror', 'error');
+            $this->rc->output->command('parent.enigma_loadframe');
+            $this->rc->output->send('iframe');
+        }
+
+        $this->rc->output->add_handlers(array(
+            'keyname' => array($this, 'tpl_key_name'),
+            'keydata' => array($this, 'tpl_key_data'),
+        ));
+
+        $this->rc->output->set_pagetitle($this->enigma->gettext('keyinfo'));
+        $this->rc->output->send('enigma.keyinfo');
+    }
+
+    /**
+     * Template object for key name
+     */
+    function tpl_key_name($attrib)
+    {
+        return rcube::Q($this->data->name);
+    }
+
+    /**
+     * Template object for key information page content
+     */
+    function tpl_key_data($attrib)
+    {
+        $out   = '';
+        $table = new html_table(array('cols' => 2));
+
+        // Key user ID
+        $table->add('title', $this->enigma->gettext('keyuserid'));
+        $table->add(null, rcube::Q($this->data->name));
+
+        // Key ID
+        $table->add('title', $this->enigma->gettext('keyid'));
+        $table->add(null, $this->data->subkeys[0]->get_short_id());
+
+        // Key type
+        $keytype = $this->data->get_type();
+        if ($keytype == enigma_key::TYPE_KEYPAIR) {
+            $type = $this->enigma->gettext('typekeypair');
+        }
+        else if ($keytype == enigma_key::TYPE_PUBLIC) {
+            $type = $this->enigma->gettext('typepublickey');
+        }
+        $table->add('title', $this->enigma->gettext('keytype'));
+        $table->add(null, $type);
+
+        // Key fingerprint
+        $table->add('title', $this->enigma->gettext('fingerprint'));
+        $table->add(null, $this->data->subkeys[0]->get_fingerprint());
+
+        $out .= html::tag('fieldset', null,
+            html::tag('legend', null,
+                $this->enigma->gettext('basicinfo')) . $table->show($attrib));
+
+        // Subkeys
+        $table = new html_table(array('cols' => 5, 'id' => 'enigmasubkeytable', 'class' => 'records-table'));
+
+        $table->add_header('id', $this->enigma->gettext('subkeyid'));
+        $table->add_header('algo', $this->enigma->gettext('subkeyalgo'));
+        $table->add_header('created', $this->enigma->gettext('subkeycreated'));
+        $table->add_header('expires', $this->enigma->gettext('subkeyexpires'));
+        $table->add_header('usage', $this->enigma->gettext('subkeyusage'));
+
+        $now         = time();
+        $date_format = $this->rc->config->get('date_format', 'Y-m-d');
+        $usage_map   = array(
+            enigma_key::CAN_ENCRYPT      => $this->enigma->gettext('typeencrypt'),
+            enigma_key::CAN_SIGN         => $this->enigma->gettext('typesign'),
+            enigma_key::CAN_CERTIFY      => $this->enigma->gettext('typecert'),
+            enigma_key::CAN_AUTHENTICATE => $this->enigma->gettext('typeauth'),
+        );
+
+        foreach ($this->data->subkeys as $subkey) {
+            $algo = $subkey->get_algorithm();
+            if ($algo && $subkey->length) {
+                $algo .= ' (' . $subkey->length . ')';
+            }
+
+            $usage = array();
+            foreach ($usage_map as $key => $text) {
+                if ($subkey->usage & $key) {
+                    $usage[] = $text;
+                }
+            }
+
+            $table->add('id', $subkey->get_short_id());
+            $table->add('algo', $algo);
+            $table->add('created', $subkey->created ? $this->rc->format_date($subkey->created, $date_format, false) : '');
+            $table->add('expires', $subkey->expires ? $this->rc->format_date($subkey->expires, $date_format, false) : $this->enigma->gettext('expiresnever'));
+            $table->add('usage', implode(',', $usage));
+            $table->set_row_attribs($subkey->revoked || ($subkey->expires && $subkey->expires < $now) ? 'deleted' : '');
+        }
+
+        $out .= html::tag('fieldset', null,
+            html::tag('legend', null,
+                $this->enigma->gettext('subkeys')) . $table->show());
+
+        // Additional user IDs
+        $table = new html_table(array('cols' => 2, 'id' => 'enigmausertable', 'class' => 'records-table'));
+
+        $table->add_header('id', $this->enigma->gettext('userid'));
+        $table->add_header('valid', $this->enigma->gettext('uservalid'));
+
+        foreach ($this->data->users as $user) {
+            $username = $user->name;
+            if ($user->comment) {
+                $username .= ' (' . $user->comment . ')';
+            }
+            $username .= ' <' . $user->email . '>';
+
+            $table->add('id', rcube::Q(trim($username)));
+            $table->add('valid', $this->enigma->gettext($user->valid ? 'valid' : 'unknown'));
+            $table->set_row_attribs($user->revoked || !$user->valid ? 'deleted' : '');
+        }
+
+        $out .= html::tag('fieldset', null,
+            html::tag('legend', null,
+                $this->enigma->gettext('userids')) . $table->show());
+
+        return $out;
+    }
+
+    /**
+     * Key(s) export handler
+     */
+    private function key_export()
+    {
+        $keys   = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST);
+        $priv   = rcube_utils::get_input_value('_priv', rcube_utils::INPUT_POST);
+        $engine = $this->enigma->load_engine();
+        $list   = $keys == '*' ? $engine->list_keys() : explode(',', $keys);
+
+        if (is_array($list) && ($fp = fopen('php://memory', 'rw'))) {
+            $filename = 'export.pgp';
+            if (count($list) == 1) {
+                $filename = (is_object($list[0]) ? $list[0]->id : $list[0]) . '.pgp';
+            }
+
+            $status = null;
+            foreach ($list as $key) {
+                $keyid  = is_object($key) ? $key->id : $key;
+                $status = $engine->export_key($keyid, $fp, (bool) $priv);
+
+                if ($status instanceof enigma_error) {
+                    $code = $status->getCode();
+
+                    if ($code == enigma_error::BADPASS) {
+                        $this->password_prompt($status, array(
+                                'input_keys'   => $keys,
+                                'input_priv'   => 1,
+                                'input_task'   => 'settings',
+                                'input_action' => 'plugin.enigmakeys',
+                                'input_a'      => 'export',
+                                'action'       => '?',
+                                'iframe'       => true,
+                                'nolock'       => true,
+                                'keyid'        => $keyid,
+                        ));
+                        fclose($fp);
+                        $this->rc->output->send('iframe');
+                    }
+                }
+            }
+
+            // send downlaod headers
+            header('Content-Type: application/pgp-keys');
+            header('Content-Disposition: attachment; filename="' . $filename . '"');
+
+            rewind($fp);
+            while (!feof($fp)) {
+                echo fread($fp, 1024 * 1024);
+            }
+            fclose($fp);
+        }
+
+        exit;
+    }
+
+    /**
+     * Key import (page) handler
+     */
+    private function key_import()
+    {
+        // Import process
+        if ($data = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST)) {
+            $this->enigma->load_engine();
+            $this->enigma->engine->password_handler();
+
+            $result = $this->enigma->engine->import_key($data);
+
+            if (is_array($result)) {
+                if (rcube_utils::get_input_value('_generated', rcube_utils::INPUT_POST)) {
+                    $this->rc->output->command('enigma_key_create_success');
+                    $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
+                }
+                else {
+                    $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
+                        array('new' => $result['imported'], 'old' => $result['unchanged']));
+
+                    if ($result['imported'] && !empty($_POST['_refresh'])) {
+                        $this->rc->output->command('enigma_list', 1, false);
+                    }
+                }
+            }
+            else {
+                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
+            }
+
+            $this->rc->output->send();
+        }
+        else if ($_FILES['_file']['tmp_name'] && is_uploaded_file($_FILES['_file']['tmp_name'])) {
+            $this->enigma->load_engine();
+            $result = $this->enigma->engine->import_key($_FILES['_file']['tmp_name'], true);
+
+            if (is_array($result)) {
+                // reload list if any keys has been added
+                if ($result['imported']) {
+                    $this->rc->output->command('parent.enigma_list', 1);
+                }
+                else {
+                    $this->rc->output->command('parent.enigma_loadframe');
+                }
+
+                $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
+                    array('new' => $result['imported'], 'old' => $result['unchanged']));
+            }
+            else if ($result instanceof enigma_error && $result->getCode() == enigma_error::BADPASS) {
+                $this->password_prompt($result);
+            }
+            else {
+                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
+            }
+
+            $this->rc->output->send('iframe');
+        }
+        else if ($err = $_FILES['_file']['error']) {
+            if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) {
+                $this->rc->output->show_message('filesizeerror', 'error',
+                    array('size' => $this->rc->show_bytes(rcube_utils::max_upload_size())));
+            } else {
+                $this->rc->output->show_message('fileuploaderror', 'error');
+            }
+
+            $this->rc->output->send('iframe');
+        }
+
+        $this->rc->output->add_handlers(array(
+            'importform' => array($this, 'tpl_key_import_form'),
+        ));
+
+        $this->rc->output->set_pagetitle($this->enigma->gettext('keyimport'));
+        $this->rc->output->send('enigma.keyimport');
+    }
+
+    /**
+     * Template object for key import (upload) form
+     */
+    function tpl_key_import_form($attrib)
+    {
+        $attrib += array('id' => 'rcmKeyImportForm');
+
+        $upload = new html_inputfield(array('type' => 'file', 'name' => '_file',
+            'id' => 'rcmimportfile', 'size' => 30));
+        $search = new html_inputfield(array('type' => 'text', 'name' => '_search',
+            'id' => 'rcmimportsearch', 'size' => 30));
+
+        $upload_button = new html_inputfield(array(
+                'type'    => 'button',
+                'value'   => $this->rc->gettext('import'),
+                'class'   => 'button',
+                'onclick' => "return rcmail.command('plugin.enigma-import','',this,event)",
+        ));
+
+        $search_button = new html_inputfield(array(
+                'type'    => 'button',
+                'value'   => $this->rc->gettext('search'),
+                'class'   => 'button',
+                'onclick' => "return rcmail.command('plugin.enigma-import-search','',this,event)",
+        ));
+
+        $upload_form = html::div(null,
+            rcube::Q($this->enigma->gettext('keyimporttext'), 'show')
+            . html::br() . html::br() . $upload->show()
+            . html::br() . html::br() . $upload_button->show()
+        );
+
+        $search_form = html::div(null,
+            rcube::Q($this->enigma->gettext('keyimportsearchtext'), 'show')
+            . html::br() . html::br() . $search->show()
+            . html::br() . html::br() . $search_button->show()
+        );
+
+        $form = html::tag('fieldset', '', html::tag('legend', null, $this->enigma->gettext('keyimportlabel')) . $upload_form)
+            . html::tag('fieldset', '', html::tag('legend', null, $this->enigma->gettext('keyimportsearchlabel')) . $search_form);
+
+        $this->rc->output->add_label('selectimportfile', 'importwait', 'nopubkeyfor', 'nopubkeyforsender',
+            'encryptnoattachments','encryptedsendialog','searchpubkeyservers', 'importpubkeys',
+            'encryptpubkeysfound',  'search', 'close', 'import', 'keyid', 'keylength', 'keyexpired',
+            'keyrevoked', 'keyimportsuccess', 'keyservererror');
+        $this->rc->output->add_gui_object('importform', $attrib['id']);
+        $this->rc->output->include_script('publickey.js');
+
+        $out = $this->rc->output->form_tag(array(
+            'action'  => $this->rc->url(array('action' => $this->rc->action, 'a' => 'import')),
+            'method'  => 'post',
+            'enctype' => 'multipart/form-data') + $attrib,
+            $form
+        );
+
+        return $out;
+    }
+
+    /**
+     * Server-side key pair generation handler
+     */
+    private function key_generate()
+    {
+        // Crypt_GPG does not support key generation for multiple identities
+        // It is also very slow (which is problematic because it may exceed
+        // request time limit) and requires entropy generator
+        // That's why we use only OpenPGP.js method of key generation
+        return;
+
+        $user = rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST, true);
+        $pass = rcube_utils::get_input_value('_password', rcube_utils::INPUT_POST, true);
+        $size = (int) rcube_utils::get_input_value('_size', rcube_utils::INPUT_POST);
+
+        if ($size > 4096) {
+            $size = 4096;
+        }
+
+        $ident = rcube_mime::decode_address_list($user, 1, false);
+
+        if (empty($ident)) {
+            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
+            $this->rc->output->send();
+        }
+
+        $this->enigma->load_engine();
+        $result = $this->enigma->engine->generate_key(array(
+            'user'     => $ident[1]['name'],
+            'email'    => $ident[1]['mailto'],
+            'password' => $pass,
+            'size'     => $size,
+        ));
+
+        if ($result instanceof enigma_key) {
+            $this->rc->output->command('enigma_key_create_success');
+            $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
+        }
+        else {
+            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
+        }
+
+        $this->rc->output->send();
+    }
+
+    /**
+     * Key generation page handler
+     */
+    private function key_create()
+    {
+        $this->enigma->include_script('openpgp.min.js');
+
+        $this->rc->output->add_handlers(array(
+            'keyform' => array($this, 'tpl_key_create_form'),
+        ));
+
+        $this->rc->output->set_pagetitle($this->enigma->gettext('keygenerate'));
+        $this->rc->output->send('enigma.keycreate');
+    }
+
+    /**
+     * Template object for key generation form
+     */
+    function tpl_key_create_form($attrib)
+    {
+        $attrib += array('id' => 'rcmKeyCreateForm');
+        $table  = new html_table(array('cols' => 2));
+
+        // get user's identities
+        $identities = $this->rc->user->list_identities(null, true);
+        $checkbox   = new html_checkbox(array('name' => 'identity[]'));
+        foreach ((array) $identities as $idx => $ident) {
+            $name = empty($ident['name']) ? ($ident['email']) : $ident['ident'];
+            $identities[$idx] = html::label(null, $checkbox->show($name, array('value' => $name)) . rcube::Q($name));
+        }
+
+        $table->add('title', html::label('key-name', rcube::Q($this->enigma->gettext('newkeyident'))));
+        $table->add(null, implode($identities, "\n"));
+
+        // Key size
+        $select = new html_select(array('name' => 'size', 'id' => 'key-size'));
+        $select->add($this->enigma->gettext('key2048'), '2048');
+        $select->add($this->enigma->gettext('key4096'), '4096');
+
+        $table->add('title', html::label('key-size', rcube::Q($this->enigma->gettext('newkeysize'))));
+        $table->add(null, $select->show());
+
+        // Password and confirm password
+        $table->add('title', html::label('key-pass', rcube::Q($this->enigma->gettext('newkeypass'))));
+        $table->add(null, rcube_output::get_edit_field('password', '',
+            array('id' => 'key-pass', 'size' => $attrib['size'], 'required' => true), 'password'));
+
+        $table->add('title', html::label('key-pass-confirm', rcube::Q($this->enigma->gettext('newkeypassconfirm'))));
+        $table->add(null, rcube_output::get_edit_field('password-confirm', '',
+            array('id' => 'key-pass-confirm', 'size' => $attrib['size'], 'required' => true), 'password'));
+
+        $this->rc->output->add_gui_object('keyform', $attrib['id']);
+        $this->rc->output->add_label('enigma.keygenerating', 'enigma.formerror',
+            'enigma.passwordsdiffer', 'enigma.keygenerateerror', 'enigma.noidentselected',
+            'enigma.keygennosupport');
+
+        return $this->rc->output->form_tag(array(), $table->show($attrib));
+    }
+
+    /**
+     * Key deleting
+     */
+    private function key_delete()
+    {
+        $keys   = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST);
+        $engine = $this->enigma->load_engine();
+
+        foreach ((array)$keys as $key) {
+            $res = $engine->delete_key($key);
+
+            if ($res !== true) {
+                $this->rc->output->show_message('enigma.keyremoveerror', 'error');
+                $this->rc->output->command('enigma_list');
+                $this->rc->output->send();
+            }
+        }
+
+        $this->rc->output->command('enigma_list');
+        $this->rc->output->show_message('enigma.keyremovesuccess', 'confirmation');
+        $this->rc->output->send();
+    }
+
+    /**
+     * Init compose UI (add task button and the menu)
+     */
+    private function compose_ui()
+    {
+        $this->add_css();
+
+        // Options menu button
+        $this->enigma->add_button(array(
+            'type'     => 'link',
+            'command'  => 'plugin.enigma',
+            'onclick'  => "rcmail.command('menu-open', 'enigmamenu', event.target, event)",
+            'class'    => 'button enigma',
+            'title'    => 'encryptionoptions',
+            'label'    => 'encryption',
+            'domain'   => $this->enigma->ID,
+            'width'    => 32,
+            'height'   => 32,
+            'aria-owns'     => 'enigmamenu',
+            'aria-haspopup' => 'true',
+            'aria-expanded' => 'false',
+            ), 'toolbar');
+
+        $locks = (array) $this->rc->config->get('enigma_options_lock');
+        $menu  = new html_table(array('cols' => 2));
+        $chbox = new html_checkbox(array('value' => 1));
+
+        $menu->add(null, html::label(array('for' => 'enigmasignopt'),
+            rcube::Q($this->enigma->gettext('signmsg'))));
+        $menu->add(null, $chbox->show($this->rc->config->get('enigma_sign_all') ? 1 : 0,
+                array(
+                    'name'     => '_enigma_sign',
+                    'id'       => 'enigmasignopt',
+                    'disabled' => in_array('sign', $locks),
+                )));
+
+        $menu->add(null, html::label(array('for' => 'enigmaencryptopt'),
+            rcube::Q($this->enigma->gettext('encryptmsg'))));
+        $menu->add(null, $chbox->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0,
+                array(
+                    'name'     => '_enigma_encrypt',
+                    'id'       => 'enigmaencryptopt',
+                    'disabled' => in_array('encrypt', $locks),
+                )));
+
+        $menu->add(null, html::label(array('for' => 'enigmaattachpubkeyopt'),
+            rcube::Q($this->enigma->gettext('attachpubkeymsg'))));
+        $menu->add(null, $chbox->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0,
+                array(
+                    'name'     => '_enigma_attachpubkey',
+                    'id'       => 'enigmaattachpubkeyopt',
+                    'disabled' => in_array('pubkey', $locks),
+                )));
+
+        $menu = html::div(array('id' => 'enigmamenu', 'class' => 'popupmenu'), $menu->show());
+
+        // Options menu contents
+        $this->rc->output->add_footer($menu);
+    }
+
+    /**
+     * Handler for message_body_prefix hook.
+     * Called for every displayed (content) part of the message.
+     * Adds infobox about signature verification and/or decryption
+     * status above the body.
+     *
+     * @param array Original parameters
+     *
+     * @return array Modified parameters
+     */
+    function status_message($p)
+    {
+        // skip: not a message part
+        if ($p['part'] instanceof rcube_message) {
+            return $p;
+        }
+
+        // skip: message has no signed/encoded content
+        if (!$this->enigma->engine) {
+            return $p;
+        }
+
+        $engine   = $this->enigma->engine;
+        $part_id  = $p['part']->mime_id;
+        $messages = array();
+
+        // Decryption status
+        if (($found = $this->find_part_id($part_id, $engine->decryptions)) !== null
+            && ($status = $engine->decryptions[$found])
+        ) {
+            $attach_scripts = true;
+
+            // show the message only once
+            unset($engine->decryptions[$found]);
+
+            // display status info
+            $attrib['id'] = 'enigma-message';
+
+            if ($status instanceof enigma_error) {
+                $attrib['class'] = 'enigmaerror';
+                $code            = $status->getCode();
+
+                if ($code == enigma_error::KEYNOTFOUND) {
+                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
+                        $this->enigma->gettext('decryptnokey')));
+                }
+                else if ($code == enigma_error::BADPASS) {
+                    $missing = $status->getData('missing');
+                    $label   = 'decrypt' . (!empty($missing) ? 'no' : 'bad') . 'pass';
+                    $msg     = rcube::Q($this->enigma->gettext($label));
+                    $this->password_prompt($status);
+                }
+                else {
+                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
+                }
+            }
+            else if ($status === enigma_engine::ENCRYPTED_PARTIALLY) {
+                $attrib['class'] = 'enigmawarning';
+                $msg = rcube::Q($this->enigma->gettext('decryptpartial'));
+            }
+            else {
+                $attrib['class'] = 'enigmanotice';
+                $msg = rcube::Q($this->enigma->gettext('decryptok'));
+            }
+
+            $attrib['msg'] = $msg;
+            $messages[] = $attrib;
+        }
+
+        // Signature verification status
+        if (($found = $this->find_part_id($part_id, $engine->signatures)) !== null
+            && ($sig = $engine->signatures[$found])
+        ) {
+            $attach_scripts = true;
+
+            // show the message only once
+            unset($engine->signatures[$found]);
+
+            // display status info
+            $attrib['id'] = 'enigma-message';
+
+            if ($sig instanceof enigma_signature) {
+                $sender = $sig->name ?: '';
+                if ($sig->email) {
+                    $sender .= ' <' . $sig->email . '>';
+                }
+
+                if ($sig->valid === enigma_error::UNVERIFIED) {
+                    $attrib['class'] = 'enigmawarning';
+                    $msg = str_replace('$sender', $sender, $this->enigma->gettext('sigunverified'));
+                    $msg = str_replace('$keyid', $sig->id, $msg);
+                    $msg = rcube::Q($msg);
+                }
+                else if ($sig->valid) {
+                    $attrib['class'] = $sig->partial ? 'enigmawarning' : 'enigmanotice';
+                    $label = 'sigvalid' . ($sig->partial ? 'partial' : '');
+                    $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext($label)));
+                }
+                else {
+                    $attrib['class'] = 'enigmawarning';
+                    if ($sender) {
+                        $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext('siginvalid')));
+                    }
+                    else {
+                        $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->id),
+                            $this->enigma->gettext('signokey')));
+                    }
+                }
+            }
+            else if ($sig && $sig->getCode() == enigma_error::KEYNOTFOUND) {
+                $attrib['class'] = 'enigmawarning';
+                $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->getData('id')),
+                    $this->enigma->gettext('signokey')));
+            }
+            else {
+                $attrib['class'] = 'enigmaerror';
+                $msg = rcube::Q($this->enigma->gettext('sigerror'));
+            }
+/*
+            $msg .= '&nbsp;' . html::a(array('href' => "#sigdetails",
+                'onclick' => rcmail_output::JS_OBJECT_NAME.".command('enigma-sig-details')"),
+                rcube::Q($this->enigma->gettext('showdetails')));
+*/
+            // test
+//            $msg .= '<br /><pre>'.$sig->body.'</pre>';
+
+            $attrib['msg'] = $msg;
+            $messages[]    = $attrib;
+        }
+
+        if ($count = count($messages)) {
+            if ($count == 2 && $messages[0]['class'] == $messages[1]['class']) {
+                $p['prefix'] .= html::div($messages[0], $messages[0]['msg'] . ' ' . $messages[1]['msg']);
+            }
+            else {
+                foreach ($messages as $msg) {
+                    $p['prefix'] .= html::div($msg, $msg['msg']);
+                }
+            }
+        }
+
+        if ($attach_scripts) {
+            // add css and js script
+            $this->add_css();
+            $this->add_js();
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for message_load hook.
+     * Check message bodies and attachments for keys/certs.
+     */
+    function message_load($p)
+    {
+        $engine = $this->enigma->load_engine();
+
+        // handle keys/certs in attachments
+        foreach ((array) $p['object']->attachments as $attachment) {
+            if ($engine->is_keys_part($attachment)) {
+                $this->keys_parts[] = $attachment->mime_id;
+            }
+        }
+
+        // the same with message bodies
+        foreach ((array) $p['object']->parts as $part) {
+            if ($engine->is_keys_part($part)) {
+                $this->keys_parts[]  = $part->mime_id;
+                $this->keys_bodies[] = $part->mime_id;
+            }
+        }
+
+        // @TODO: inline PGP keys
+
+        if ($this->keys_parts) {
+            $this->enigma->add_texts('localization');
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for template_object_messagebody hook.
+     * This callback function adds a box below the message content
+     * if there is a key/cert attachment available
+     */
+    function message_output($p)
+    {
+        foreach ($this->keys_parts as $part) {
+            // remove part's body
+            if (in_array($part, $this->keys_bodies)) {
+                $p['content'] = '';
+            }
+
+            // add box below message body
+            $p['content'] .= html::p(array('class' => 'enigmaattachment'),
+                html::a(array(
+                    'href'    => "#",
+                    'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".enigma_import_attachment('".rcube::JQ($part)."')",
+                    'title'   => $this->enigma->gettext('keyattimport')),
+                    html::span(null, $this->enigma->gettext('keyattfound'))));
+
+            $attach_scripts = true;
+        }
+
+        if ($attach_scripts) {
+            // add css and js script
+            $this->add_css();
+            $this->add_js();
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handle message_ready hook (encryption/signing/attach public key)
+     */
+    function message_ready($p)
+    {
+        $savedraft      = !empty($_POST['_draft']) && empty($_GET['_saveonly']);
+        $sign_enable    = (bool) rcube_utils::get_input_value('_enigma_sign', rcube_utils::INPUT_POST);
+        $encrypt_enable = (bool) rcube_utils::get_input_value('_enigma_encrypt', rcube_utils::INPUT_POST);
+        $pubkey_enable  = (bool) rcube_utils::get_input_value('_enigma_attachpubkey', rcube_utils::INPUT_POST);
+        $locks          = (array) $this->rc->config->get('enigma_options_lock');
+
+        if (in_array('sign', $locks)) {
+            $sign_enable = (bool) $this->rc->config->get('enigma_sign_all');
+        }
+        if (in_array('encrypt', $locks)) {
+            $encrypt_enable = (bool) $this->rc->config->get('enigma_encrypt_all');
+        }
+        if (in_array('pubkey', $locks)) {
+            $pubkey_enable = (bool) $this->rc->config->get('enigma_attach_pubkey');
+        }
+
+        if (!$savedraft && $pubkey_enable) {
+            $engine = $this->enigma->load_engine();
+            $engine->attach_public_key($p['message']);
+        }
+
+        if ($encrypt_enable) {
+            $engine = $this->enigma->load_engine();
+            $mode   = !$savedraft && $sign_enable ? enigma_engine::ENCRYPT_MODE_SIGN : null;
+            $status = $engine->encrypt_message($p['message'], $mode, $savedraft);
+            $mode   = 'encrypt';
+        }
+        else if (!$savedraft && $sign_enable) {
+            $engine = $this->enigma->load_engine();
+            $status = $engine->sign_message($p['message'], enigma_engine::SIGN_MODE_MIME);
+            $mode   = 'sign';
+        }
+
+        if ($mode && ($status instanceof enigma_error)) {
+            $code = $status->getCode();
+
+            if ($code == enigma_error::KEYNOTFOUND) {
+                $vars = array('email' => $status->getData('missing'));
+                $msg  = 'enigma.' . $mode . 'nokey';
+            }
+            else if ($code == enigma_error::BADPASS) {
+                $this->password_prompt($status);
+            }
+            else {
+                $msg = 'enigma.' . $mode . 'error';
+            }
+
+            if ($msg) {
+                if ($vars && $vars['email']) {
+                    $this->rc->output->command('enigma_key_not_found', array(
+                            'email'  => $vars['email'],
+                            'text'   => $this->rc->gettext(array('name' => $msg, 'vars' => $vars)),
+                            'title'  => $this->enigma->gettext('keynotfound'),
+                            'button' => $this->enigma->gettext('findkey'),
+                    ));
+                }
+                else {
+                    $this->rc->output->show_message($msg, 'error', $vars);
+                }
+            }
+
+            $this->rc->output->send('iframe');
+        }
+
+        return $p;
+    }
+
+   /**
+     * Handler for message_compose_body hook
+     * Display error when the message cannot be encrypted
+     * and provide a way to try again with a password.
+     */
+    function message_compose($p)
+    {
+        $engine = $this->enigma->load_engine();
+
+        // skip: message has no signed/encoded content
+        if (!$this->enigma->engine) {
+            return $p;
+        }
+
+        $engine = $this->enigma->engine;
+        $locks  = (array) $this->rc->config->get('enigma_options_lock');
+
+        // Decryption status
+        foreach ($engine->decryptions as $status) {
+            if ($status instanceof enigma_error) {
+                $code = $status->getCode();
+
+                if ($code == enigma_error::KEYNOTFOUND) {
+                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
+                        $this->enigma->gettext('decryptnokey')));
+                }
+                else if ($code == enigma_error::BADPASS) {
+                    $this->password_prompt($status, array('compose-init' => true));
+                    return $p;
+                }
+                else {
+                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
+                }
+            }
+        }
+
+        if ($msg) {
+            $this->rc->output->show_message($msg, 'error');
+        }
+
+        // Check sign/ecrypt options for signed/encrypted drafts
+        if (!in_array('encrypt', $locks)) {
+            $this->rc->output->set_env('enigma_force_encrypt', !empty($engine->decryptions));
+        }
+        if (!in_array('sign', $locks)) {
+            $this->rc->output->set_env('enigma_force_sign', !empty($engine->signatures));
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for keys/certs import request action
+     */
+    function import_file()
+    {
+        $uid     = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
+        $mbox    = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
+        $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST);
+        $storage = $this->rc->get_storage();
+        $engine  = $this->enigma->load_engine();
+
+        if ($uid && $mime_id) {
+            // Note: we get the attachment body via rcube_message class
+            // to support keys inside encrypted messages (#5285)
+            $message = new rcube_message($uid, $mbox);
+
+            // Check if we don't need to ask for password again
+            foreach ($engine->decryptions as $status) {
+                if ($status instanceof enigma_error) {
+                    if ($status->getCode() == enigma_error::BADPASS) {
+                        $this->password_prompt($status, array(
+                                'input_uid'    => $uid,
+                                'input_mbox'   => $mbox,
+                                'input_part'   => $mime_id,
+                                'input_task'   => 'mail',
+                                'input_action' => 'plugin.enigmaimport',
+                                'action'       => '?',
+                                'iframe'       => true,
+                        ));
+                        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
+                        return;
+                    }
+                }
+            }
+
+            if ($engine->is_keys_part($message->mime_parts[$mime_id])) {
+                $part = $message->get_part_body($mime_id);
+            }
+        }
+
+        if ($part && is_array($result = $engine->import_key($part))) {
+            $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
+                array('new' => $result['imported'], 'old' => $result['unchanged']));
+        }
+        else {
+            $this->rc->output->show_message('enigma.keysimportfailed', 'error');
+        }
+
+        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
+    }
+
+    /**
+     * Check if the part or its parent exists in the array
+     * of decryptions/signatures. Returns found ID.
+     */
+    private function find_part_id($part_id, $data)
+    {
+        $ids   = explode('.', $part_id);
+        $i     = 0;
+        $count = count($ids);
+
+        while ($i < $count && strlen($part = implode('.', array_slice($ids, 0, ++$i)))) {
+            if (array_key_exists($part, $data)) {
+                return $part;
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/lib/enigma_userid.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ +-------------------------------------------------------------------------+
+ | User ID class for the Enigma Plugin                                     |
+ |                                                                         |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
+ |                                                                         |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
+ |                                                                         |
+ +-------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                              |
+ +-------------------------------------------------------------------------+
+*/
+
+class enigma_userid
+{
+    public $revoked;
+    public $valid;
+    public $name;
+    public $comment;
+    public $email;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Криптиране';
+$labels['enigmacerts'] = 'S/MIME Ñертификати';
+$labels['enigmakeys'] = 'PGP ключове';
+$labels['keysfromto'] = 'Ключове $from до $to от $count';
+$labels['keyname'] = 'Име';
+$labels['keyid'] = 'ИРна ключ';
+$labels['keyuserid'] = 'ИРна потребител';
+$labels['keytype'] = 'Тип на ключ';
+$labels['fingerprint'] = 'ПръÑтов отпечатък';
+$labels['subkeys'] = 'Подключове';
+$labels['basicinfo'] = 'ОÑновна информациÑ';
+$labels['userids'] = 'Допълнителни потребители';
+$labels['typepublickey'] = 'публичен ключ';
+$labels['typekeypair'] = 'ключова двойка';
+$labels['keyattfound'] = 'Това пиÑмо Ñъдържа прикрепени PGP ключове';
+$labels['keyattimport'] = 'Импорт на ключове';
+$labels['typesign'] = 'Подпиши';
+$labels['typeencrypt'] = 'Криптирай';
+$labels['typecert'] = 'УдоÑтовери';
+$labels['typeauth'] = 'УдоÑтоверÑване';
+$labels['subkeyid'] = 'ИÐ';
+$labels['subkeyalgo'] = 'Ðлгоритъм';
+$labels['subkeycreated'] = 'Създаден на';
+$labels['subkeyexpires'] = 'Изтича на';
+$labels['subkeyusage'] = 'Използван';
+$labels['expiresnever'] = 'никога';
+$labels['unknown'] = 'неизвеÑтно';
+$labels['uservalid'] = 'Валиден';
+$labels['userid'] = 'ИÐ';
+$labels['valid'] = 'валиден';
+$labels['supportencryption'] = 'Включи криптиране и подпиÑване на пиÑма';
+$labels['supportsignatures'] = 'Включи Ð²ÐµÑ€Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð° подпиÑи в пиÑма';
+$labels['supportdecryption'] = 'Включи декриптиране на пиÑма';
+$labels['signdefault'] = 'ПодпиÑвай вÑички пиÑма по подразбиране';
+$labels['encryptdefault'] = 'Криптирай вÑички пиÑма по подразбиране';
+$labels['attachpubkeydefault'] = 'Прикрепи по подразбирне Ð¼Ð¾Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½ PGP ключ';
+$labels['passwordtime'] = 'Запомни паролата на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ за';
+$labels['nminutes'] = '$m минути';
+$labels['wholesession'] = 'цÑлата ÑеÑиÑ';
+$labels['createkeys'] = 'Създай нова ключова двойка';
+$labels['importkeys'] = 'Импорт на ключове';
+$labels['exportkeys'] = 'ЕкÑпорт на ключове';
+$labels['keyactions'] = 'ДейÑтвиÑ...';
+$labels['keyremove'] = 'Изтриване';
+$labels['keydisable'] = 'Деактивиране';
+$labels['keyrevoke'] = 'ОтмÑна';
+$labels['keysend'] = 'Изпрати пиÑмо Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½ ключ';
+$labels['keychpass'] = 'Промени паролата';
+$labels['newkeyident'] = 'СамоличноÑÑ‚:';
+$labels['newkeypass'] = 'Парола:';
+$labels['newkeypassconfirm'] = 'Потвърди паролата:';
+$labels['newkeysize'] = 'Размер на ключа:';
+$labels['key2048'] = '2048 бита (по подразбиране)';
+$labels['key4096'] = '4096 бита (по-Ñигурен)';
+$labels['keygenerating'] = 'Генериране на ключове...';
+$labels['encryptionoptions'] = 'Опции за криптиране...';
+$labels['encryptmsg'] = 'Криптирай това пиÑмо';
+$labels['signmsg'] = 'Подпиши това пиÑмо';
+$labels['enterkeypasstitle'] = 'Въведете парола на ключа';
+$labels['enterkeypass'] = 'Ðужна е парола за отварÑне на ключ ($keyid) за потребител $user.';
+$labels['arialabelkeyexportoptions'] = 'Опции за екÑпорт на ключ';
+$labels['attachpubkeymsg'] = 'Прикрепи Ð¼Ð¾Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½ ключ';
+$labels['keyexportprompt'] = 'Желаете ли да включите Ñекретните ключове в запиÑÐ°Ð½Ð¸Ñ OpenPGP файл?';
+$labels['onlypubkeys'] = 'ЕкÑпорт Ñамо на Публичните ключове';
+$labels['withprivkeys'] = 'ЕкÑпорт на Секретни ключове';
+$labels['findkey'] = 'ТърÑи на Ñървъри за ключове';
+$labels['keyimportlabel'] = 'Импорт от файл';
+$labels['keyimportsearchlabel'] = 'ТърÑи на Ñървъри за ключове';
+$messages['sigvalid'] = 'Верифициран Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð¾Ñ‚ $sender.';
+$messages['sigvalidpartial'] = 'Верифициран Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð¾Ñ‚ $sender, но чаÑÑ‚ от Ñъдържанието на пиÑмото не е било подпиÑано';
+$messages['siginvalid'] = 'Ðевалиден Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð¾Ñ‚ $sender.';
+$messages['sigunverified'] = 'Ðеверифициран подпиÑ. Сертификатът не е верифициран. Сертификат Ñ Ð˜Ð $keyid.';
+$messages['signokey'] = 'Ðеверифициран подпиÑ. ÐŸÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ не е намерен. Ключ Ñ Ð˜Ð $keyid.';
+$messages['sigerror'] = 'Ðеверифициран подпиÑ. Вътрешна грешка.';
+$messages['decryptok'] = 'ПиÑмото е декриптирано.';
+$messages['decrypterror'] = 'Ðевъзможно декриптиране.';
+$messages['decryptnokey'] = 'Ðевъзможно декриптиране. ЧаÑтниÑÑ‚ ключ не е намерен. Ключ Ñ Ð˜Ð $keyid.';
+$messages['decryptnopass'] = 'Ðевъзможно декриптиране. Паролата на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ е задължителна.';
+$messages['decryptpartial'] = 'ПиÑмото е декриптирано, но чаÑÑ‚ от Ñъдържанието му не е било защитено Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¸Ñ€Ð°Ð½Ðµ.';
+$messages['signerror'] = 'Ðевъзможно подпиÑване.';
+$messages['signnokey'] = 'Ðевъзможно подпиÑване. ЧаÑтниÑÑ‚ ключ не е намерен.';
+$messages['signnopass'] = 'Ðевъзможно подпиÑване. Паролата на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ е задължителна.';
+$messages['encrypterror'] = 'Ðевъзможно криптиране.';
+$messages['encryptnokey'] = 'Ðевъзможно криптиране. ПубличниÑÑ‚ ключ не е намерен за $email.';
+$messages['nokeysfound'] = 'Ðе Ñа намерени ключове';
+$messages['keynotfound'] = 'Ключът не е намерен!';
+$messages['keyopenerror'] = 'Ðевъзможно получаване на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° ключа! Вътрешна грешка.';
+$messages['keylisterror'] = 'Ðевъзможно получаване на ключове! Вътрешна грешка.';
+$messages['keysimportfailed'] = 'Ðевъзможно импортиране на ключове! Вътрешна грешка.';
+$messages['keysimportsuccess'] = 'Ключовете Ñа импортирани уÑпешно. Импортирани $new, непроменени $old.';
+$messages['keyremoving'] = 'Изтриване на ключове...';
+$messages['keyremoveconfirm'] = 'Желаете ли да изтриете избраните ключове?';
+$messages['keyremovesuccess'] = 'Ключовете Ñа изтрити уÑпешно.';
+$messages['keyremoveerror'] = 'Ðевъзможно изтриване на ключове.';
+$messages['keyimporttext'] = 'Можете да импортирате чаÑтни и публични ключове или Ñигнатури за отмÑна в ASCII-Armor формат.';
+$messages['keyimportsearchtext'] = 'Можете да Ñ‚ÑŠÑ€Ñите публични ключове по идентификатор, потребитлÑко име или Ð°Ð´Ñ€ÐµÑ Ð½Ð° ел. поща, Ñлед което директно да ги импортирате.';
+$messages['formerror'] = 'ÐœÐ¾Ð»Ñ Ð¿Ð¾Ð¿ÑŠÐ»Ð½ÐµÑ‚Ðµ формата. Ð’Ñички полета Ñа задължителни!';
+$messages['passwordsdiffer'] = 'Паролите не Ñъвпадат!';
+$messages['keygenerateerror'] = 'Ðевъзможно генериране на ключова двойка';
+$messages['keygeneratesuccess'] = 'Ключовата двойка е генерирана и импортирана уÑпешно.';
+$messages['keygennosupport'] = 'ВашиÑÑ‚ браузър не поддържа нужните криптографÑки методи. Ðевъзможно генериране на ключова двойка.';
+$messages['noidentselected'] = 'ТрÑбва да избере поне една ÑамоличноÑÑ‚ за този ключ!';
+$messages['nonameident'] = 'СамоличноÑтта Ñ‚Ñ€Ñбва да има дефинирано потребителÑко име!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Enrinegañ';
+$labels['enigmacerts'] = 'Testenioù S/MIME';
+$labels['enigmakeys'] = 'Alc\'hwezioù PGP';
+$labels['keysfromto'] = 'Alc\'hwezioù $from da $to war $count';
+$labels['keyname'] = 'Anv';
+$labels['keyid'] = 'Naoudi an alc\'hwez';
+$labels['keyuserid'] = 'Naoudi an arveriad';
+$labels['keytype'] = 'Rizh an alc\'hwez';
+$labels['fingerprint'] = 'Roudoù-biz';
+$labels['subkeys'] = 'Is-alc\'hwez';
+$labels['basicinfo'] = 'Titouroù diazez';
+$labels['userids'] = 'Arveriaded ouzhpenn';
+$labels['typepublickey'] = 'alc\'hwez foran';
+$labels['typekeypair'] = 'daouad alc\'hwezioù';
+$labels['keyattfound'] = 'Alc\'hwezioù PGP a zo staget d\'ar gemennadenn-mañ.';
+$labels['keyattimport'] = 'Enporzhiañ an alc\'hwez(ioù)';
+$labels['typesign'] = 'Sinañ';
+$labels['typeencrypt'] = 'Enrinegañ';
+$labels['typecert'] = 'Testeniañ';
+$labels['typeauth'] = 'Dilesa';
+$labels['subkeyid'] = 'Naoudi';
+$labels['subkeyalgo'] = 'Treol';
+$labels['subkeycreated'] = 'Krouet';
+$labels['subkeyexpires'] = 'Diamzeriñ';
+$labels['subkeyusage'] = 'Arver';
+$labels['expiresnever'] = 'morse';
+$labels['unknown'] = 'dianav';
+$labels['uservalid'] = 'Talvoudek';
+$labels['userid'] = 'Naoudi';
+$labels['valid'] = 'talvoudek';
+$labels['supportencryption'] = 'Gweredekaat enrinegañ ha sinañ ar c\'hemennadennoù';
+$labels['supportsignatures'] = 'Gweredekaat gwiriañ sinadur ar c\'hemennadennoù';
+$labels['supportdecryption'] = 'Gweredekaat ezrinegañ ar c\'hemennadennoù';
+$labels['signdefault'] = 'Sinañ an goll gemennadennoù dre ziouer';
+$labels['encryptdefault'] = 'Enrinegañ an holl gemennadennoù dre ziouer ';
+$labels['attachpubkeydefault'] = 'Kenstagañ ma alc\'hwez foran PGP dre ziouer';
+$labels['passwordtime'] = 'Mirout gerioù-tremen an alc\'hwezioù prevez e-pad ';
+$labels['nminutes'] = '$m a vunutennoù';
+$labels['wholesession'] = 'an estez a-bezh';
+$labels['createkeys'] = 'Krouiñ un daouad alc\'hwezioù nevez';
+$labels['importkeys'] = 'Enporzhiañ un alc\'hwez';
+$labels['exportkeys'] = 'Ezporzhiañ un alc\'hwez';
+$labels['keyactions'] = 'Gweredoù an alc\'hwez...';
+$labels['keyremove'] = 'Dilemel';
+$labels['keydisable'] = 'Diweredekaat';
+$labels['keyrevoke'] = 'Dizorniañ';
+$labels['keysend'] = 'Kas an alc\'hwez foran en ur gemennadenn';
+$labels['keychpass'] = 'Kemmañ ar ger-tremen';
+$labels['newkeyident'] = 'Pivelezh:';
+$labels['newkeypass'] = 'Ger-tremen:';
+$labels['newkeypassconfirm'] = 'Kadarnaat ar ger-tremen:';
+$labels['newkeysize'] = 'Ment an alc\'hwez:';
+$labels['key2048'] = '2048 bit - dre ziouer';
+$labels['key4096'] = '4096 bit - diogeloc\'h';
+$labels['keygenerating'] = 'O c\'henel an alc\'hwezioù...';
+$labels['encryptionoptions'] = 'Dibarzhioù enrinegañ...';
+$labels['encryptmsg'] = 'Enrinegañ ar gemennadenn-mañ';
+$labels['signmsg'] = 'Sinañ ent niverel ar gemennadenn-mañ';
+$labels['enterkeypasstitle'] = 'Enankañ frazenn-dremen an alc\'hwez';
+$labels['enterkeypass'] = 'Ur frazenn-dremen a zo dleet evit dibrennañ an alc\'hwez prevez ($keyid= evit an arveriad: $user';
+$labels['arialabelkeyexportoptions'] = 'Dibarzhioù ezporzhiañ an alc\'hwezioù';
+$labels['attachpubkeymsg'] = 'Stagañ ma alc\'hwez foran';
+$labels['keyexportprompt'] = 'Fellout a ra deoc\'h enkorfañ an alc\'hwezioù kuzh er restr alc\'hwezioù OpenPGP enrollet?';
+$labels['onlypubkeys'] = 'Ezporzhiañ an alc\'hwezhioù foran hepken';
+$labels['withprivkeys'] = 'Ezporzhiañ an alc\'hwezioù kuzh';
+$labels['findkey'] = 'Klask war an dafariad(où) alc\'hwezioù';
+$messages['sigvalid'] = 'Sinadur gwiriet a-berzh $sender.';
+$messages['sigvalidpartial'] = 'Sinadur gwiriet a-berzh $sender, met ul lodenn eus ar c\'horf n\'eo ket enrineget.';
+$messages['siginvalid'] = 'Sinadur didalvoudek a-berzh $sender.';
+$messages['sigunverified'] = 'Sinadur amwiriet. testeni amwiriet. Naoudi an testeni: $keyid.';
+$messages['signokey'] = 'Sinadur amwiriet. Alc\'hwez foran ebet kavet. Naoudi an alc\'hwez: $keyid.';
+$messages['sigerror'] = 'Sinadur amwiriet. Fazi diabarzh.';
+$messages['decryptok'] = 'Kemennadenn ezrineget.';
+$messages['decrypterror'] = 'Ezrinegañ c\'hwitet.';
+$messages['decryptnokey'] = 'Ezrinegañ c\'hwitet. Alc\'hwez prevez ebet kavet. Naoudi an alc\'hwez: $keyid.';
+$messages['decryptnopass'] = 'Ezrinegañ c\'hwitet. Frazenn-dremen azgoulennet.';
+$messages['decryptpartial'] = 'Kemennadenn ezrineget, met ul lodenn eus ar c\'horf ne oa ket enrineget.';
+$messages['signerror'] = 'Sinadur c\'hwitet.';
+$messages['signnokey'] = 'Sinadur c\'hwitet. Alc\'hwez prevez ebet kavet.';
+$messages['signnopass'] = 'Sinadur c\'hwitet. Frazenn-dremen azgoulennet.';
+$messages['encrypterror'] = 'Enrinegañ c\'hwitet.';
+$messages['encryptnokey'] = 'Enrinegañ c\'hwitet. N\'eo ket bet kavet an alc\'hwez foran evit $email.';
+$messages['nokeysfound'] = 'Alc\'hwez ebet kavet';
+$messages['keynotfound'] = 'N\'eo ket bet kavet an alc\'hwez!';
+$messages['keyopenerror'] = 'N\'haller ket kaout titouroù an alc\'hwez! Fazi diabarzh.';
+$messages['keylisterror'] = 'N\'haller ket rollañ an alc\'hwezioù! Fazi diabarzh.';
+$messages['keysimportfailed'] = 'N\'haller ket enporzhiañ an alc\'hwez(ioù)! Fazi diabarzh.';
+$messages['keysimportsuccess'] = 'Alc\'hwez(ioù) enporzhiet gant berzh. Enporzhiet: $new, digemm: $old.';
+$messages['keyremoving'] = 'O tilemel an alc\'hwez(ioù)...';
+$messages['keyremoveconfirm'] = 'Fellout a ra deoc\'h dilemel an alc\'hwez(ioù) diuzet?';
+$messages['keyremovesuccess'] = 'Alc\'hwez(ioù) dilamet gant berzh';
+$messages['keyremoveerror'] = 'N\'haller ket dilemel an alc\'hwez(ioù) diuzet.';
+$messages['keyimporttext'] = 'Gallout a rit enporzhiañ alc\'hwez(ioù) foran ha prevez pe sinadurioù dizorniañ er mentrezh ASCII-Armor.';
+$messages['formerror'] = 'Ret eo leuniañ ar furmskrid. An holl vaeziennoù a zo dleet!';
+$messages['passwordsdiffer'] = 'Ne glot ket ar gerioù-tremen!';
+$messages['keygenerateerror'] = 'C\'hwitadenn war ganedigezh un daouad alc\'hwezhioù';
+$messages['keygeneratesuccess'] = 'Ganet hag enporzhiet eo bet un daouad alc\'hwezioù gant berzh. ';
+$messages['keygennosupport'] = 'N\'eo ket skoret an enrinegañ gant ho merdeer web. N\'haller ket genel un alc\'hwez nevez.';
+$messages['nonameident'] = 'Ret eo d\'ar pivelezh kaout un anv arveriad despizet!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Šifrování';
+$labels['enigmacerts'] = 'S/MIME certifikáty';
+$labels['enigmakeys'] = 'PGP klíÄe';
+$labels['keysfromto'] = 'KlíÄe $from až $to z poÄtu: $count';
+$labels['keyname'] = 'Jméno';
+$labels['keyid'] = 'ID KlíÄe';
+$labels['keyuserid'] = 'ID uživatele';
+$labels['keytype'] = 'Typ klíÄe';
+$labels['fingerprint'] = 'Otisk prstu';
+$labels['subkeys'] = 'PodklíÄe';
+$labels['basicinfo'] = 'Základní informace';
+$labels['userids'] = 'Další uživatelé';
+$labels['typepublickey'] = 'veÅ™ejný klíÄ';
+$labels['typekeypair'] = 'pár klíÄů';
+$labels['keyattfound'] = 'Tato zpráva má pÅ™iložený/é PGP klíÄ(e).';
+$labels['keyattimport'] = 'Importovat klíÄ(e)';
+$labels['typesign'] = 'Podepsat';
+$labels['typeencrypt'] = 'Zašifrovat';
+$labels['typecert'] = 'Certifikovat';
+$labels['typeauth'] = 'Autentizace';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmus';
+$labels['subkeycreated'] = 'Vytvořený';
+$labels['subkeyexpires'] = 'Vyprší';
+$labels['subkeyusage'] = 'Použití';
+$labels['expiresnever'] = 'nikdy';
+$labels['unknown'] = 'neznámý';
+$labels['uservalid'] = 'Správný';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'správný';
+$labels['supportencryption'] = 'Povolit podepisování a šifrování zpráv.';
+$labels['supportsignatures'] = 'Povolit ověřování podpisů zpráv.';
+$labels['supportdecryption'] = 'Povolit dešifrování zpráv.';
+$labels['signdefault'] = 'Podepisovat všechny zprávy';
+$labels['encryptdefault'] = 'Šifrovat všechny zprávy';
+$labels['passwordtime'] = 'Uchovat hesla pro privátní klíÄe pro';
+$labels['nminutes'] = '$m minut(a)';
+$labels['wholesession'] = 'celá relace';
+$labels['createkeys'] = 'VytvoÅ™it nový pár klíÄů';
+$labels['importkeys'] = 'Importovat klíÄ(e)';
+$labels['exportkeys'] = 'Exportovat klíÄ(e)';
+$labels['keyactions'] = 'Akce s klíÄem...';
+$labels['keyremove'] = 'Smazat';
+$labels['keydisable'] = 'Vypnout';
+$labels['keyrevoke'] = 'Revokovat';
+$labels['keysend'] = 'Odeslat veÅ™ejný klÃ­Ä ve zprávÄ›';
+$labels['keychpass'] = 'Změnit heslo';
+$labels['newkeyident'] = 'Identita:';
+$labels['newkeypass'] = 'Heslo:';
+$labels['newkeypassconfirm'] = 'Potvrdit heslo:';
+$labels['newkeysize'] = 'Velikost klíÄe:';
+$labels['key2048'] = '2048 bitů - výchozí';
+$labels['key4096'] = '4093 bítů - více bezpeÄné';
+$labels['keygenerating'] = 'Generuji klíÄe...';
+$labels['encryptionoptions'] = 'Možnosti šifrování...';
+$labels['encryptmsg'] = 'Zašifrovat tuto zprávu';
+$labels['signmsg'] = 'Digitálně podepsat tuto zprávu';
+$labels['enterkeypasstitle'] = 'Zadejte heslo pro klíÄ';
+$labels['enterkeypass'] = 'Heslo je nutné k odemknutí soukromého klíÄe ($keyid) pro uživatele: $user.';
+$labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíÄů';
+$labels['attachpubkeymsg'] = 'PÅ™ipojit můj veÅ™ejný klíÄ';
+$labels['onlypubkeys'] = 'Exportovat pouze veÅ™ejné klíÄe';
+$labels['withprivkeys'] = 'Exportovat soukromé klíÄe';
+$labels['keyimportlabel'] = 'Importovat ze souboru';
+$labels['keyimportsearchlabel'] = 'Hledat klÃ­Ä na keyserveru';
+$messages['sigvalid'] = 'Ověřený podpis od $sender.';
+$messages['sigvalidpartial'] = 'Ověřený podpis od $sender, ale Äást tÄ›la není podepsána.';
+$messages['siginvalid'] = 'Nesprávný podpis od $sender.';
+$messages['sigunverified'] = 'Neověřený podpis. Certifikát není ověřen. ID certifikátu: $keyid.';
+$messages['signokey'] = 'Neověřený podpis. VeÅ™ejný klÃ­Ä nebyl nalezen. ID klíÄe: $keyid.';
+$messages['sigerror'] = 'Neověřený podpis. Interní chyba.';
+$messages['decryptok'] = 'Zpráva byla dešifrována.';
+$messages['decrypterror'] = 'Dešifrování selhalo.';
+$messages['decryptnokey'] = 'DeÅ¡ifrování selhalo. VeÅ™ejný klÃ­Ä nebyl nalezen. ID klíÄe: $keyid.';
+$messages['decryptnopass'] = 'DeÅ¡ifrování selhalo. Heslo pro klÃ­Ä je požadováno.';
+$messages['signerror'] = 'Podepisování selhalo.';
+$messages['signnokey'] = 'Podepisování selhalo. Soukromý klÃ­Ä nebyl nalezen.';
+$messages['signnopass'] = 'Podepisování selhalo. Heslo pro klÃ­Ä je požadováno.';
+$messages['encrypterror'] = 'Šifrování selhalo.';
+$messages['encryptnokey'] = 'Å ifrování selhalo. VeÅ™ejný klÃ­Ä pro email $email nebyl nalezen.';
+$messages['nokeysfound'] = 'Nebyly nalezeny žádné klíÄe.';
+$messages['keynotfound'] = 'KlÃ­Ä nebyl nalezen!';
+$messages['keyopenerror'] = 'Nemohu dostat informace o klíÄi! Interní chyba.';
+$messages['keylisterror'] = 'Nemohu získat seznam klíÄů! Interní chyba.';
+$messages['keysimportfailed'] = 'Nemohu importovat klíÄ(e)! Interní chyba.';
+$messages['keysimportsuccess'] = 'KlíÄ(e) byl(y) úspěšnÄ› naimportován(y). Importovány: $new, nezmÄ›nÄ›ny: $old.';
+$messages['keyremoving'] = 'Odstraňuji klíÄ(e)...';
+$messages['keyremoveconfirm'] = 'Opravdu si pÅ™ejete odstranit vybraný/é klíÄ(e)?';
+$messages['keyremovesuccess'] = 'KlíÄ(e) byl(y) úspěšnÄ› odstranÄ›n(y).';
+$messages['keyremoveerror'] = 'Nemohu smazat vybraný/é klíÄ(e).';
+$messages['keyimporttext'] = 'Můžete naimportovat soukromý/é a veÅ™ejný/é klíÄ(e) nebo podpisy pro revokaci ve formátu ASCII-Armor.';
+$messages['formerror'] = 'Prosím vyplňte tento formulář. Všechna pole jsou požadována.';
+$messages['passwordsdiffer'] = 'Zadaná hesla se neshodují!';
+$messages['keygenerateerror'] = 'Selhalo generování páru klíÄů';
+$messages['keygeneratesuccess'] = 'Pár klíÄů byl úspěšnÄ› vygenerován a naimportován.';
+$messages['keygennosupport'] = 'Váš webový prohlížeÄ nepodporuje kryptografii. Nemohu vygenerovat pár klíÄů.';
+$messages['nonameident'] = 'Identita musí mít definované uživatelské jméno.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Amgryptiad';
+$labels['enigmacerts'] = 'Tystysgrifau S/MIME';
+$labels['enigmakeys'] = 'Allweddi PGP';
+$labels['keysfromto'] = 'Allweddi $from i $to o $count';
+$labels['keyname'] = 'Enw';
+$labels['keyid'] = 'ID Allwedd';
+$labels['keyuserid'] = 'ID Defnyddiwr';
+$labels['keytype'] = 'Math o allwedd';
+$labels['fingerprint'] = 'Olion bys';
+$labels['subkeys'] = 'Isallweddi';
+$labels['basicinfo'] = 'Gwybodaeth sylfaenol';
+$labels['userids'] = 'Defnyddwyr Ychwanegol';
+$labels['typepublickey'] = 'allwedd gyhoeddus';
+$labels['typekeypair'] = 'pâr allweddi';
+$labels['keyattfound'] = 'Mae\'r neges hwn yn cynnwys allwedd(i) PGP.';
+$labels['keyattimport'] = 'Mewnforio allwedd(i)';
+$labels['typesign'] = 'Llofnodi';
+$labels['typeencrypt'] = 'Amgryptio';
+$labels['typecert'] = 'Tystio';
+$labels['typeauth'] = 'Dilysiad';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algorithm';
+$labels['subkeycreated'] = 'Crëwyd';
+$labels['subkeyexpires'] = 'Yn darfod';
+$labels['subkeyusage'] = 'Defnydd';
+$labels['expiresnever'] = 'byth';
+$labels['unknown'] = 'anhysbys';
+$labels['uservalid'] = 'Dilys';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'dilys';
+$labels['supportencryption'] = 'Galluogi amgryptio neges a llofnodi';
+$labels['supportsignatures'] = 'Galluogi dilys llofnodion neges';
+$labels['supportdecryption'] = 'Galluogi dadgryptio neges';
+$labels['signdefault'] = 'Llofnodi pob neges yn ddiofyn';
+$labels['encryptdefault'] = 'Amgryptio pob neges yn ddiofyn';
+$labels['attachpubkeydefault'] = 'Atodi fy allwedd PGP cyhoeddus yn ddiofyn';
+$labels['passwordtime'] = 'Cadw cyfrineiriau allweddi preifat am';
+$labels['nminutes'] = '$m munud';
+$labels['wholesession'] = 'y sesiwn i gyd';
+$labels['createkeys'] = 'Creu pâr allweddi newydd';
+$labels['importkeys'] = 'Mewnforio allwedd(i)';
+$labels['exportkeys'] = 'Allforio allwedd(i)';
+$labels['keyactions'] = 'Gweithredoedd allwedd...';
+$labels['keyremove'] = 'Dileu';
+$labels['keydisable'] = 'Analluogi';
+$labels['keyrevoke'] = 'Dirymu';
+$labels['keysend'] = 'Danfon allwedd gyhoeddus mewn neges';
+$labels['keychpass'] = 'Newid cyfrinair';
+$labels['newkeyident'] = 'Personoliaeth:';
+$labels['newkeypass'] = 'Cyfrinair:';
+$labels['newkeypassconfirm'] = 'Cadarnhau cyfrinair:';
+$labels['newkeysize'] = 'Maint allwedd:';
+$labels['key2048'] = '2048 did - diofyn';
+$labels['key4096'] = '4096 did - mwy cadarn';
+$labels['keygenerating'] = 'Yn creu allweddi...';
+$labels['encryptionoptions'] = 'Dewisiadau amgryptio...';
+$labels['encryptmsg'] = 'Amgryptio\'r neges hwn';
+$labels['signmsg'] = 'Llofnodi\'r neges yma yn ddigidol';
+$labels['enterkeypasstitle'] = 'Rhowch yr ymadrodd cyfrin';
+$labels['enterkeypass'] = 'Mae angen ymadrodd cyfrin i ddatgloi allwedd breifat ($keyid) ar gyfer defnyddiwr: $user:';
+$labels['arialabelkeyexportoptions'] = 'Dewisiadau allforio allweddi';
+$labels['attachpubkeymsg'] = 'Atodi fy allwedd cyhoeddus';
+$labels['keyexportprompt'] = 'Ydych eisiau cynnwys allweddi cyfrinachol yn y ffeil OpenPGP i\'w gadw?';
+$labels['onlypubkeys'] = 'Allforio Allweddi Cyhoeddus yn unig';
+$labels['withprivkeys'] = 'Allforio Allweddi Cyfrinachol';
+$labels['findkey'] = 'Chwilio ar weinydd(wyr) allweddi';
+$labels['keyimportlabel'] = 'Mewnforio o ffeil';
+$labels['keyimportsearchlabel'] = 'Chwilio ar weinydd(wyr) allweddi';
+$messages['sigvalid'] = 'Llofnod wedi ddilysu o $sender.';
+$messages['sigvalidpartial'] = 'Llofnod wedi ddilysu o $sender, ond ni arwyddywyd rhan o gorff y neges';
+$messages['siginvalid'] = 'Llofnod annilys o $sender.';
+$messages['sigunverified'] = 'Llofnod heb ei ddilysu. Tystysgrif heb ei ddilys. ID Tystysgrif: $keyid.';
+$messages['signokey'] = 'Llofnod heb ei ddilysu. Allwedd gyhoeddus heb ei ganfod. ID Allwedd: $keyid.';
+$messages['sigerror'] = 'Llofnod heb ei ddilysu. Gwall mewnol.';
+$messages['decryptok'] = 'Neges wedi ei ddadgryptio.';
+$messages['decrypterror'] = 'Dadgryptio wedi methu.';
+$messages['decryptnokey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod: ID Allwedd: $keyid.';
+$messages['decryptbadpass'] = 'Dadgryptio wedi methu. Cyfrinair annilys.';
+$messages['decryptnopass'] = 'Dadgryptio wedi methu. Mae angen cyfrinair.';
+$messages['decryptpartial'] = 'Dadgryptiwyd y neges, ond roedd darn o gorff y neges heb ei amgryptio';
+$messages['signerror'] = 'Llofnodi wedi methu.';
+$messages['signnokey'] = 'Llofnodi wedi methu. Allwedd breifat heb ei ganfod.';
+$messages['signbadpass'] = 'Llofnodi wedi methu. Cyfrinair annilys.';
+$messages['signnopass'] = 'Llofnodi wedi methu. Mae angen cyfrinair.';
+$messages['encrypterror'] = 'Amgryptio wedi methu.';
+$messages['encryptnokey'] = 'Amgryptio wedi methu. Allwedd cyhoeddus heb ei ganfod ar gyfer $email.';
+$messages['nokeysfound'] = 'Ni ganfuwyd unrhyw allweddi';
+$messages['keynotfound'] = 'Ni ganfuwyd yr allwedd!';
+$messages['keyopenerror'] = 'Methwyd cael gwybodaeth allwedd! Gwall mewnol.';
+$messages['keylisterror'] = 'Methwyd cael rhestr allweddi! Gwall mewnol';
+$messages['keysimportfailed'] = 'Methwyd mewnforio allwedd(i)! Gwall mewnol.';
+$messages['keysimportsuccess'] = 'Mewnforiwyd allwedd(i) yn llwyddiannus. Mewnforiwyd: $new, heb newid: $old.';
+$messages['keyremoving'] = 'Yn dileu allwedd(i)...';
+$messages['keyremoveconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu yr allwedd(i) dewiswyd?';
+$messages['keyremovesuccess'] = 'Allwedd(i) wedi ei dileu yn llwyddiannus';
+$messages['keyremoveerror'] = 'Methwyd dileu yr allwedd(i) dewiswyd.';
+$messages['keyimporttext'] = 'Fe allwch chi mewnforio allwedd(i) preifat a chyhoeddus neu lofnodion pallu mewn fformat ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Gallwch chwilio am allweddi cyhoeddus yn ol adnabydd allwedd, enw defnyddiwr neu gyfeiriad ebost ac yna eu mewnforio yn uniongyrchol.';
+$messages['formerror'] = 'Llenwch y ffurflen os gwelwch yn dda. Mae angen llenwi pob maes!';
+$messages['passwordsdiffer'] = 'Nid yw\'r cyfrineiriau yn cyfateb!';
+$messages['keygenerateerror'] = 'Methwyd creu pâr allweddi';
+$messages['keygeneratesuccess'] = 'Creuwyd a mewnforiwyd pâr allweddi yn llwyddiannus.';
+$messages['keygennosupport'] = 'Nid yw\'ch porwr gwe yn cefnogi amgryptio. Methwyd creu pâr allweddi!';
+$messages['noidentselected'] = 'Rhaid i chi ddewis o leiaf un hunaniaeth i\'r allwedd!';
+$messages['nonameident'] = 'Rhaid i\'r personoliaeth gael enw defnyddiwr wedi ei ddiffinio!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['keyname'] = 'Navn';
+$labels['fingerprint'] = 'Fingeravtryk';
+$labels['typeencrypt'] = 'Krypter';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyexpires'] = 'Udløber';
+$labels['expiresnever'] = 'aldrig';
+$labels['unknown'] = 'ukendt';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valid';
+$labels['keyremove'] = 'Fjern';
+$labels['keychpass'] = 'Skift kodeord:';
+$labels['newkeyident'] = 'Identitet:';
+$labels['newkeypass'] = 'Kodeord';
+$labels['keyimportlabel'] = 'Importer fra fil';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Verschlüsselung';
+$labels['enigmacerts'] = 'S/MIME Zertifikate';
+$labels['enigmakeys'] = 'PGP Schlüssel';
+$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
+$labels['keyname'] = 'Schlüssel';
+$labels['keyid'] = 'Schlüssel ID';
+$labels['keyuserid'] = 'Benutzer ID';
+$labels['keytype'] = 'Schlüsseltyp';
+$labels['fingerprint'] = 'Fingerprint';
+$labels['subkeys'] = 'Sub-Schlüssel';
+$labels['basicinfo'] = 'Allgemeine Informationen';
+$labels['userids'] = 'Zusätzliche Benutzer';
+$labels['typepublickey'] = 'Öffentlicher Schlüssel';
+$labels['typekeypair'] = 'Schlüsselpaar';
+$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP Schlüssel.';
+$labels['keyattimport'] = 'Schlüssel importieren';
+$labels['typesign'] = 'Signieren';
+$labels['typeencrypt'] = 'Verschlüsseln';
+$labels['typecert'] = 'Bestätigen';
+$labels['typeauth'] = 'Authentifizierung';
+$labels['subkeyid'] = 'Sub-Schlüssel ID';
+$labels['subkeyalgo'] = 'Algorithmus';
+$labels['subkeycreated'] = 'Erstellt am';
+$labels['subkeyexpires'] = 'Läuft aus';
+$labels['subkeyusage'] = 'Verwendet für';
+$labels['expiresnever'] = 'nie';
+$labels['unknown'] = 'unbekannt';
+$labels['uservalid'] = 'Gültigkeit';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'gültig';
+$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
+$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
+$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
+$labels['signdefault'] = 'Nachrichten immer signieren';
+$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
+$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
+$labels['passwordtime'] = 'Private Schlüssel behalten für';
+$labels['nminutes'] = '$m Minuten';
+$labels['wholesession'] = 'die gesamte Sitzung';
+$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
+$labels['importkeys'] = 'Schlüssel importieren';
+$labels['exportkeys'] = 'Schlüssel exportieren';
+$labels['keyactions'] = 'Aktionen...';
+$labels['keyremove'] = 'Entfernen';
+$labels['keydisable'] = 'Deaktivieren';
+$labels['keyrevoke'] = 'Widerrufen';
+$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
+$labels['keychpass'] = 'Passwort ändern';
+$labels['newkeyident'] = 'Identität:';
+$labels['newkeypass'] = 'Passwort:';
+$labels['newkeypassconfirm'] = 'Passwort bestätigen:';
+$labels['newkeysize'] = 'Schlüssellänge:';
+$labels['key2048'] = '2048 bits - standard';
+$labels['key4096'] = '4096 bits - sicher';
+$labels['keygenerating'] = 'Schlüssel generieren...';
+$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
+$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
+$labels['signmsg'] = 'Diese Nachricht digital signieren';
+$labels['enterkeypasstitle'] = 'Bitte Schlüssel Passwort eingeben';
+$labels['enterkeypass'] = 'Ein Passwort wird benötigt um den privaten Schlüssel ($keyid) für Benutzer: $user zu entsperren';
+$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
+$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
+$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
+$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
+$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
+$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikat-ID: $keyid. ';
+$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
+$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
+$messages['decryptok'] = 'Nachricht entschlüsselt.';
+$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
+$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
+$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
+$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
+$messages['signerror'] = 'Signierung fehlgeschlagen.';
+$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
+$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
+$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
+$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
+$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
+$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
+$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
+$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
+$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
+$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
+$messages['keyremoving'] = 'Schlüssel entfernen...';
+$messages['keyremoveconfirm'] = 'Bist du dir sicher, dass du die ausgewählten Schlüssel entfernen willst?';
+$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
+$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
+$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
+$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
+$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
+$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
+$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
+$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
+$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Verschlüsselung';
+$labels['enigmacerts'] = 'S/MIME-Zertifikate';
+$labels['enigmakeys'] = 'PGP-Schlüssel';
+$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
+$labels['keyname'] = 'Schlüssel';
+$labels['keyid'] = 'Schlüsselkennung';
+$labels['keyuserid'] = 'Benutzerkennung';
+$labels['keytype'] = 'Schlüsseltyp';
+$labels['fingerprint'] = 'Fingerabdruck';
+$labels['subkeys'] = 'Unterschlüssel';
+$labels['basicinfo'] = 'Allgemeine Informationen';
+$labels['userids'] = 'Zusätzliche Benutzer';
+$labels['typepublickey'] = 'Öffentlicher Schlüssel';
+$labels['typekeypair'] = 'Schlüsselpaar';
+$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP-Schlüssel.';
+$labels['keyattimport'] = 'Schlüssel importieren';
+$labels['typesign'] = 'Signieren';
+$labels['typeencrypt'] = 'Verschlüsseln';
+$labels['typecert'] = 'Bestätigen';
+$labels['typeauth'] = 'Authentifizierung';
+$labels['subkeyid'] = 'Kennung';
+$labels['subkeyalgo'] = 'Algorithmus';
+$labels['subkeycreated'] = 'Erstellt am';
+$labels['subkeyexpires'] = 'Läuft aus';
+$labels['subkeyusage'] = 'Verwendet für';
+$labels['expiresnever'] = 'nie';
+$labels['unknown'] = 'unbekannt';
+$labels['uservalid'] = 'Gültigkeit';
+$labels['userid'] = 'Kennung';
+$labels['valid'] = 'gültig';
+$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
+$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
+$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
+$labels['signdefault'] = 'Nachrichten immer signieren';
+$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
+$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
+$labels['passwordtime'] = 'Private Schlüssel behalten für';
+$labels['nminutes'] = '$m Minuten';
+$labels['wholesession'] = 'die gesamte Sitzung';
+$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
+$labels['importkeys'] = 'Schlüssel importieren';
+$labels['exportkeys'] = 'Schlüssel exportieren';
+$labels['keyactions'] = 'Aktionen …';
+$labels['keyremove'] = 'Entfernen';
+$labels['keydisable'] = 'Deaktivieren';
+$labels['keyrevoke'] = 'Widerrufen';
+$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
+$labels['keychpass'] = 'Passwort ändern';
+$labels['newkeyident'] = 'Identität:';
+$labels['newkeypass'] = 'Passwort:';
+$labels['newkeypassconfirm'] = 'Passwort bestätigen:';
+$labels['newkeysize'] = 'Schlüssellänge:';
+$labels['key2048'] = '2048 Bit - Vorgabe';
+$labels['key4096'] = '4096 Bit - mehr Sicherheit';
+$labels['keygenerating'] = 'Schlüssel werden erstellt …';
+$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
+$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
+$labels['signmsg'] = 'Diese Nachricht digital signieren';
+$labels['sendunencrypted'] = 'Unverschlüsselt senden';
+$labels['enterkeypasstitle'] = 'Bitte Schlüsselpasswort eingeben';
+$labels['enterkeypass'] = 'Ein Passwort wird benötigt, um den privaten Schlüssel ($keyid) für Benutzer »$user« zu entsperren.';
+$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
+$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
+$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
+$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
+$labels['withprivkeys'] = 'Geheime Schlüssel exportieren';
+$labels['findkey'] = 'Auf Schlüsselserver(n) suchen';
+$labels['keyimportlabel'] = 'Aus Datei importieren';
+$labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
+$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
+$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
+$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
+$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikatkennung: $keyid. ';
+$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
+$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
+$messages['decryptok'] = 'Nachricht entschlüsselt.';
+$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
+$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
+$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.';
+$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
+$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
+$messages['signerror'] = 'Signierung fehlgeschlagen.';
+$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
+$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.';
+$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
+$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
+$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
+$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
+$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
+$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
+$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
+$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
+$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
+$messages['keyremoving'] = 'Schlüssel werden entfernt …';
+$messages['keyremoveconfirm'] = 'Sind Sie sich sicher, dass Sie die ausgewählten Schlüssel entfernen wollen?';
+$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
+$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
+$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
+$messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.';
+$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
+$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
+$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
+$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
+$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
+$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!';
+$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'ΚÏυπτογÏάφηση';
+$labels['enigmacerts'] = 'Πιστοποιητικά S/MIME';
+$labels['enigmakeys'] = 'PGP Κλειδιά';
+$labels['keysfromto'] = 'Κλειδιά $from έως $to από $count';
+$labels['keyname'] = 'Όνομα';
+$labels['keyid'] = 'Ταυτότητα κλειδιοÏ';
+$labels['keyuserid'] = 'Ταυτότητα ΧÏήστη';
+$labels['keytype'] = 'ΤÏπος κλειδιοÏ';
+$labels['fingerprint'] = 'Δακτυλικό αποτÏπωμα';
+$labels['subkeys'] = 'Υποκλειδιά';
+$labels['basicinfo'] = 'Βασικές πληÏοφοÏίες';
+$labels['userids'] = 'Επιπλέον ΧÏήστες';
+$labels['typepublickey'] = 'δημόσιο κλειδί';
+$labels['typekeypair'] = 'ζεÏγος κλειδιοÏ';
+$labels['keyattfound'] = 'Αυτό το μήνυμα πεÏιέχει συνημμένο(α) κλειδί(ά) PGP.';
+$labels['keyattimport'] = 'Εισαγωγή κλειδιοÏ(ών)';
+$labels['typesign'] = 'ΥπογÏαφή';
+$labels['typeencrypt'] = 'ΚÏυπτογÏάφηση';
+$labels['typecert'] = 'Πιστοποίηση';
+$labels['typeauth'] = 'Επαλήθευση';
+$labels['subkeyid'] = 'Ταυτότητα';
+$labels['subkeyalgo'] = 'ΑλγόÏιθμος';
+$labels['subkeycreated'] = 'ΔημιουÏγήθηκε';
+$labels['subkeyexpires'] = 'Λήγει';
+$labels['subkeyusage'] = 'ΧÏήση';
+$labels['expiresnever'] = 'ποτέ';
+$labels['unknown'] = 'άγνωστο';
+$labels['uservalid'] = 'ΈγκυÏο';
+$labels['userid'] = 'Ταυτότητα';
+$labels['valid'] = 'έγκυÏο';
+$labels['supportencryption'] = 'ΕνεÏγοποιήστε την κÏυπτογÏάφηση και υπογÏαφή μηνυμάτων';
+$labels['supportsignatures'] = 'ΕνεÏγοποίηση επαλήθευσης υπογÏαφών μηνÏματος';
+$labels['supportdecryption'] = 'ΕνεÏγοποιήστε την κÏυπτογÏάφηση μηνυμάτων';
+$labels['signdefault'] = 'ΥπογÏαφή όλων των μηνυμάτων από Ï€Ïοεπιλογή';
+$labels['encryptdefault'] = 'ΚÏυπτογÏάφηση όλων των μηνυμάτων από Ï€Ïοεπιλογή';
+$labels['attachpubkeydefault'] = 'ΕπισÏναψη του δημόσιου PGP ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼Î¿Ï… από Ï€Ïοεπιλογή';
+$labels['passwordtime'] = 'ΔιατήÏηση των κωδικών του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î³Î¹Î±';
+$labels['nminutes'] = '$m λεπτό(ά)';
+$labels['wholesession'] = 'ολόκληÏη τη συνεδÏία';
+$labels['createkeys'] = 'ΔημιουÏγία νέου ζεÏγους κλειδιοÏ';
+$labels['importkeys'] = 'Εισαγωγή κλειδιοÏ(ών)';
+$labels['exportkeys'] = 'Εξαγωγή κλειδιοÏ(ών)';
+$labels['keyactions'] = 'ΕνέÏγειες κλειδιοÏ...';
+$labels['keyremove'] = 'ΔιαγÏαφή';
+$labels['keydisable'] = 'ΑπενεÏγοποίηση';
+$labels['keyrevoke'] = 'ΑπόσυÏση';
+$labels['keysend'] = 'Αποστολή δημοσίου ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ÏƒÏ„Î¿ μήνυμα';
+$labels['keychpass'] = 'Αλλαγή κωδικοÏ';
+$labels['newkeyident'] = 'ΑναγνωÏιστικό:';
+$labels['newkeypass'] = 'Κωδικός:';
+$labels['newkeypassconfirm'] = 'Επιβεβαίωση κωδικοÏ:';
+$labels['newkeysize'] = 'Μέγεθος κλειδιοÏ:';
+$labels['key2048'] = '2048 bits - Ï€ÏοκαθοÏισμένο';
+$labels['key4096'] = '4096 bits - ασφαλέστεÏο';
+$labels['keygenerating'] = 'ΔημιουÏγία κλειδιών...';
+$labels['encryptionoptions'] = 'Επιλογές κÏυπτογÏάφησης...';
+$labels['encryptmsg'] = 'ΚÏυπτογÏάφηση του μηνÏματος';
+$labels['signmsg'] = 'Ψηφιακή υπογÏαφή του μηνÏματος';
+$labels['enterkeypasstitle'] = 'Εισάσετε τον κωδικό του κλειδιοÏ';
+$labels['enterkeypass'] = 'Απαιτείται ένας κωδικός για το ξεκλειδωμα του κÏÏ…Ï†Î¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ($keyid) του χÏήστη: $user.';
+$labels['arialabelkeyexportoptions'] = 'Επιλογές εξαγωγής κλειδιών';
+$labels['attachpubkeymsg'] = 'ΕπισÏναψη του δημόσιου ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼Î¿Ï…';
+$labels['keyexportprompt'] = 'Θέλετε να συμπεÏιληφθοÏν τα μυστικά κλειδικά στο αποθηκευμένο αÏχείο κλειδιών OpenPGP;';
+$labels['onlypubkeys'] = 'Εξαγωγή Δημοσίων Κλειδιών Μόνο';
+$labels['withprivkeys'] = 'Εξαγωγή Μυστικών Κλειδιών';
+$labels['findkey'] = 'Αναζήτηση στον(ους) εξυπηÏετητή(ές) κλειδιών';
+$labels['keyimportlabel'] = 'Εισαγωγή από αÏχείο';
+$messages['sigvalid'] = 'Επαληθευμένη υπογÏαφή από τον  $sender.';
+$messages['sigvalidpartial'] = 'Επαληθευμένη υπογÏαφή από τον $sender, αλλά τμήμα του κειμένου δεν έχει υπογÏαφεί.';
+$messages['siginvalid'] = 'ΆκυÏη υπογÏαφή από τον $sender.';
+$messages['sigunverified'] = 'Ανεπαλήθευτη υπογÏαφή. Το πιστοποιητικό δεν έχει επαληθευτεί. Ταυτότητα πιστοποιητικοÏ: $keyid.';
+$messages['signokey'] = 'Ανεπαλήθευτη υπογÏαφή. Το δημόσιο κλειδί δε βÏέθηκε. Ταυτότητα κλειδιοÏ: $keyid.';
+$messages['sigerror'] = 'Ανεπαλήθευτη υπογÏαφή. ΕσωτεÏικό σφάλμα.';
+$messages['decryptok'] = 'Το μήνυμα αποκÏυπτογÏαφήθηκε.';
+$messages['decrypterror'] = 'Η αποκÏυπτογÏάφηση απέτυχε.';
+$messages['decryptnokey'] = 'Η αποκÏυπτογÏάφηση απέτυχε. Το ιδιωτικό κλειδί δε βÏέθηκε. Ταυτότητα κλειδιοÏ: $keyid.';
+$messages['decryptnopass'] = 'Η αποκÏυπτογÏάφηση απέτυχε. Απαιτείται ο κωδικός του κλειδιοÏ.';
+$messages['decryptpartial'] = 'Το μήνυμα αποκÏυπτογÏαφήθηκε, αλλά τμήμα του μηνÏματος δεν ήταν κÏυπτογÏαφημένο.';
+$messages['signerror'] = 'Η υπογÏαφή απέτυχε.';
+$messages['signnokey'] = 'Η υπογÏαφή απέτυχε. Το ιδιωτικό κλειδί δε βÏέθηκε.';
+$messages['signnopass'] = 'Η υπογÏαφή απέτυχε. Απαιτείται ο κωδικός του κλειδιοÏ.';
+$messages['encrypterror'] = 'Η κÏυπτογÏάφηση απέτυχε.';
+$messages['encryptnokey'] = 'Η κÏυπτογÏάφηση απέτυχε. Το δημόσιο κλειδί του $email δε βÏέθηκε.
+ ';
+$messages['nokeysfound'] = 'Δε βÏέθηκαν κλειδιά';
+$messages['keynotfound'] = 'Το κλειδί δε βÏέθηκε!';
+$messages['keyopenerror'] = 'Αδυναμία ανάκτησης των πληÏοφοÏιών του κλειδιοÏ! ΕσωτεÏικό σφάλμα.';
+$messages['keylisterror'] = 'Αδυναμία ανάκτησης λίστας κλειδιοÏ! ΕσωτεÏικό σφάλμα.';
+$messages['keysimportfailed'] = 'Αδυναμία εισαγωγής του κλειδιοÏ(ών)! ΕσωτεÏικό σφάλμα.';
+$messages['keysimportsuccess'] = 'Το κλειδί(ά) εισήχθη επιτυχώς. Εισήχθη: $new, αναλλοίωτο: $old.';
+$messages['keyremoving'] = 'ΔιαφÏαφή κλειδιοÏ(ών)...';
+$messages['keyremoveconfirm'] = 'Θέλετε σίγουÏα να διαγÏάψετε το επιλεγμένο κλειδί(ά);';
+$messages['keyremovesuccess'] = 'Το κλειδί(ά) διαγÏάφηκε επιτυχώς.';
+$messages['keyremoveerror'] = 'Αδυναμία διαγÏαφής του επιλεγμένου κλειδιοÏ(ών).';
+$messages['keyimporttext'] = 'ΜποÏείτε να εισάγετε ιδιωτικά ή δημόσια κλειδιά ή να ανακτήσετε υπογÏαφές σε μοÏγή ASCII-Armor.';
+$messages['formerror'] = 'ΠαÏακαλώ συμπληÏώστε όλα τα πεδία της φόÏμας!';
+$messages['passwordsdiffer'] = 'Οι κωδικοί δεν ταιÏιάζουν Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚!';
+$messages['keygenerateerror'] = 'Αποτυχία δημιουÏγίας ζεÏγους κλειδιών.';
+$messages['keygeneratesuccess'] = 'Το ζεÏγος κλειδιών δημιουÏγήθηκε και εισήχθη επιτυχώς.';
+$messages['keygennosupport'] = 'To Ï€ÏόγÏαμμα πεÏιήγησής σας δεν υποστηÏίζει κÏυπτογÏάφηση. Δεν ήταν δυνατή η δημιουÏγία ενός ζεÏγος κλειδιών!';
+$messages['nonameident'] = 'Η Ταυτότητα Ï€Ïέπει να έχει οÏισμένο όνομα χÏήστη!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Encryption';
+$labels['enigmacerts'] = 'S/MIME Certificates';
+$labels['enigmakeys'] = 'PGP Keys';
+$labels['keysfromto'] = 'Keys $from to $to of $count';
+$labels['keyname'] = 'Name';
+$labels['keyid'] = 'Key ID';
+$labels['keyuserid'] = 'User ID';
+$labels['keytype'] = 'Key type';
+$labels['fingerprint'] = 'Fingerprint';
+$labels['subkeys'] = 'Subkeys';
+$labels['basicinfo'] = 'Basic Information';
+$labels['userids'] = 'Additional Users';
+$labels['typepublickey'] = 'public key';
+$labels['typekeypair'] = 'key pair';
+$labels['keyattfound'] = 'This message contains attached PGP key(s).';
+$labels['keyattimport'] = 'Import key(s)';
+$labels['typesign'] = 'Sign';
+$labels['typeencrypt'] = 'Encrypt';
+$labels['typecert'] = 'Certify';
+$labels['typeauth'] = 'Authentication';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algorithm';
+$labels['subkeycreated'] = 'Created';
+$labels['subkeyexpires'] = 'Expires';
+$labels['subkeyusage'] = 'Usage';
+$labels['expiresnever'] = 'never';
+$labels['unknown'] = 'unknown';
+$labels['uservalid'] = 'Valid';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valid';
+$labels['supportencryption'] = 'Enable message encryption and signing';
+$labels['supportsignatures'] = 'Enable message signatures verification';
+$labels['supportdecryption'] = 'Enable message decryption';
+$labels['signdefault'] = 'Sign all messages by default';
+$labels['encryptdefault'] = 'Encrypt all messages by default';
+$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
+$labels['passwordtime'] = 'Keep private key passwords for';
+$labels['nminutes'] = '$m minute(s)';
+$labels['wholesession'] = 'the whole session';
+$labels['createkeys'] = 'Create a new key pair';
+$labels['importkeys'] = 'Import key(s)';
+$labels['exportkeys'] = 'Export key(s)';
+$labels['keyactions'] = 'Key actions...';
+$labels['keyremove'] = 'Remove';
+$labels['keydisable'] = 'Disable';
+$labels['keyrevoke'] = 'Revoke';
+$labels['keysend'] = 'Send public key in a message';
+$labels['keychpass'] = 'Change password';
+$labels['newkeyident'] = 'Identity:';
+$labels['newkeypass'] = 'Password:';
+$labels['newkeypassconfirm'] = 'Confirm password:';
+$labels['newkeysize'] = 'Key size:';
+$labels['key2048'] = '2048 bits - default';
+$labels['key4096'] = '4096 bits - more secure';
+$labels['keygenerating'] = 'Generating keys...';
+$labels['encryptionoptions'] = 'Encryption options...';
+$labels['encryptmsg'] = 'Encrypt this message';
+$labels['signmsg'] = 'Digitally sign this message';
+$labels['sendunencrypted'] = 'Send unencrypted';
+$labels['enterkeypasstitle'] = 'Enter key passphrase';
+$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
+$labels['arialabelkeyexportoptions'] = 'Keys export options';
+$labels['attachpubkeymsg'] = 'Attach my public key';
+$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
+$labels['onlypubkeys'] = 'Export Public Keys Only';
+$labels['withprivkeys'] = 'Export Secret Keys';
+$labels['findkey'] = 'Search on key server(s)';
+$labels['keyimportlabel'] = 'Import from file';
+$labels['keyimportsearchlabel'] = 'Search on key server(s)';
+$messages['sigvalid'] = 'Verified signature from $sender.';
+$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
+$messages['siginvalid'] = 'Invalid signature from $sender.';
+$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
+$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
+$messages['sigerror'] = 'Unverified signature. Internal error.';
+$messages['decryptok'] = 'Message decrypted.';
+$messages['decrypterror'] = 'Decryption failed.';
+$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
+$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
+$messages['decryptnopass'] = 'Decryption failed. Key password required.';
+$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
+$messages['signerror'] = 'Signing failed.';
+$messages['signnokey'] = 'Signing failed. Private key not found.';
+$messages['signbadpass'] = 'Signing failed. Invalid password.';
+$messages['signnopass'] = 'Signing failed. Key password required.';
+$messages['encrypterror'] = 'Encryption failed.';
+$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
+$messages['nokeysfound'] = 'No keys found';
+$messages['keynotfound'] = 'Key not found!';
+$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
+$messages['keylisterror'] = 'Unable to list keys! Internal error.';
+$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
+$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
+$messages['keyremoving'] = 'Removing key(s)...';
+$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
+$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
+$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
+$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
+$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
+$messages['formerror'] = 'Please fill in the form. All fields are required!';
+$messages['passwordsdiffer'] = 'Passwords do not match!';
+$messages['keygenerateerror'] = 'Failed to generate a key pair';
+$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
+$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
+$messages['noidentselected'] = 'You have to select at least one identity for the key!';
+$messages['nonameident'] = 'Identity must have a user name defined!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+
+$labels = array();
+$labels['encryption'] = 'Encryption';
+$labels['enigmacerts'] = 'S/MIME Certificates';
+$labels['enigmakeys'] = 'PGP Keys';
+$labels['keysfromto'] = 'Keys $from to $to of $count';
+$labels['keyname'] = 'Name';
+$labels['keyid'] = 'Key ID';
+$labels['keyuserid'] = 'User ID';
+$labels['keytype'] = 'Key type';
+$labels['fingerprint'] = 'Fingerprint';
+$labels['subkeys'] = 'Subkeys';
+$labels['basicinfo'] = 'Basic Information';
+$labels['userids'] = 'Additional Users';
+$labels['typepublickey'] = 'public key';
+$labels['typekeypair'] = 'key pair';
+$labels['keyattfound'] = 'This message contains attached PGP key(s).';
+$labels['keyattimport'] = 'Import key(s)';
+$labels['typesign'] = 'Sign';
+$labels['typeencrypt'] = 'Encrypt';
+$labels['typecert'] = 'Certify';
+$labels['typeauth'] = 'Authentication';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algorithm';
+$labels['subkeycreated'] = 'Created';
+$labels['subkeyexpires'] = 'Expires';
+$labels['subkeyusage'] = 'Usage';
+$labels['expiresnever'] = 'never';
+$labels['unknown'] = 'unknown';
+$labels['uservalid'] = 'Valid';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valid';
+
+$labels['supportencryption'] = 'Enable message encryption and signing';
+$labels['supportsignatures'] = 'Enable message signatures verification';
+$labels['supportdecryption'] = 'Enable message decryption';
+$labels['signdefault'] = 'Sign all messages by default';
+$labels['encryptdefault'] = 'Encrypt all messages by default';
+$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
+$labels['passwordtime'] = 'Keep private key passwords for';
+$labels['nminutes'] = '$m minute(s)';
+$labels['wholesession'] = 'the whole session';
+
+$labels['createkeys'] = 'Create a new key pair';
+$labels['importkeys'] = 'Import key(s)';
+$labels['exportkeys'] = 'Export key(s)';
+$labels['keyactions'] = 'Key actions...';
+$labels['keyremove'] = 'Remove';
+$labels['keydisable'] = 'Disable';
+$labels['keyrevoke'] = 'Revoke';
+$labels['keysend'] = 'Send public key in a message';
+$labels['keychpass'] = 'Change password';
+
+$labels['newkeyident'] = 'Identity:';
+$labels['newkeypass'] = 'Password:';
+$labels['newkeypassconfirm'] = 'Confirm password:';
+$labels['newkeysize'] = 'Key size:';
+$labels['key2048'] = '2048 bits - default';
+$labels['key4096'] = '4096 bits - more secure';
+$labels['keygenerating'] = 'Generating keys...';
+
+$labels['encryptionoptions'] = 'Encryption options...';
+$labels['encryptmsg'] = 'Encrypt this message';
+$labels['signmsg'] = 'Digitally sign this message';
+
+$labels['enterkeypasstitle'] = 'Enter key passphrase';
+$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
+$labels['arialabelkeyexportoptions'] = 'Keys export options';
+$labels['attachpubkeymsg'] = 'Attach my public key';
+
+$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
+$labels['onlypubkeys'] = 'Export Public Keys Only';
+$labels['withprivkeys'] = 'Export Secret Keys';
+$labels['findkey'] = 'Search on key server(s)';
+$labels['keyimportlabel'] = 'Import from file';
+$labels['keyimportsearchlabel'] = 'Search on key server(s)';
+
+$messages = array();
+$messages['sigvalid'] = 'Verified signature from $sender.';
+$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
+$messages['siginvalid'] = 'Invalid signature from $sender.';
+$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
+$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
+$messages['sigerror'] = 'Unverified signature. Internal error.';
+$messages['decryptok'] = 'Message decrypted.';
+$messages['decrypterror'] = 'Decryption failed.';
+$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
+$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
+$messages['decryptnopass'] = 'Decryption failed. Key password required.';
+$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
+$messages['signerror'] = 'Signing failed.';
+$messages['signnokey'] = 'Signing failed. Private key not found.';
+$messages['signbadpass'] = 'Signing failed. Invalid password.';
+$messages['signnopass'] = 'Signing failed. Key password required.';
+$messages['encrypterror'] = 'Encryption failed.';
+$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
+$messages['nokeysfound'] = 'No keys found';
+$messages['keynotfound'] = 'Key not found!';
+$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
+$messages['keylisterror'] = 'Unable to list keys! Internal error.';
+$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
+$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
+$messages['keyremoving'] = 'Removing key(s)...';
+$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
+$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
+$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
+$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
+$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
+
+$messages['formerror'] = 'Please, fill the form. All fields are required!';
+$messages['passwordsdiffer'] = 'Passwords do not match!';
+$messages['keygenerateerror'] = 'Failed to generate a key pair';
+$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
+$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
+$messages['noidentselected'] = 'You have to select at least one identity for the key!';
+
+// removed in 1.3
+$messages['nonameident'] = 'Identity must have a user name defined!';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Encriptación';
+$labels['enigmacerts'] = 'Certificados S/MIME';
+$labels['enigmakeys'] = 'Claves PGP';
+$labels['keysfromto'] = 'Llaves $from hasta $to de $count';
+$labels['keyname'] = 'Nombre';
+$labels['keyid'] = 'ID de Clave';
+$labels['keyuserid'] = 'ID de Usuario';
+$labels['keytype'] = 'Tipo de Clave';
+$labels['fingerprint'] = 'Huella dactilar';
+$labels['subkeys'] = 'Subclaves';
+$labels['basicinfo'] = 'Información Básica';
+$labels['userids'] = 'Usuarios Adicionales';
+$labels['typepublickey'] = 'llave pública';
+$labels['typekeypair'] = 'clave par';
+$labels['keyattfound'] = 'Este mensaje contiene adjunto una(s) clave(s) PGP.';
+$labels['keyattimport'] = 'Importar clave(s)';
+$labels['typesign'] = 'Firmar';
+$labels['typeencrypt'] = 'Encriptar';
+$labels['typecert'] = 'Certificar';
+$labels['typeauth'] = 'Autentificación';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmo';
+$labels['subkeycreated'] = 'Creado';
+$labels['subkeyexpires'] = 'Expirado';
+$labels['subkeyusage'] = 'Uso';
+$labels['expiresnever'] = 'nunca';
+$labels['unknown'] = 'desconocido';
+$labels['uservalid'] = 'Válido';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'válido';
+$labels['supportencryption'] = 'Habilitar el cifrado de mensajes y firma';
+$labels['supportsignatures'] = 'Activar la verificación de firmas de mensajes';
+$labels['supportdecryption'] = 'Habilitar descifrado de mensaje';
+$labels['signdefault'] = 'Firmar todos los mensajes por defecto';
+$labels['encryptdefault'] = 'Encriptar todos los mensajes por defecto';
+$labels['attachpubkeydefault'] = 'Adjuntar mi clave PGP pública por defecto';
+$labels['passwordtime'] = 'Mantenga las contraseñas de clave privada para';
+$labels['nminutes'] = '$m minuto(s)';
+$labels['wholesession'] = 'toda la sesión';
+$labels['createkeys'] = 'Crear una nueva clave par';
+$labels['importkeys'] = 'Importar clave(s)';
+$labels['exportkeys'] = 'Exportar clave(s)';
+$labels['keyactions'] = 'Acción de llave...';
+$labels['keyremove'] = 'Eliminar';
+$labels['keydisable'] = 'Deshabilitado';
+$labels['keyrevoke'] = 'Revocar';
+$labels['keysend'] = 'Enviar clave pública en el mensaje';
+$labels['keychpass'] = 'Cambiar contraseña';
+$labels['newkeyident'] = 'Identidad:';
+$labels['newkeypass'] = 'Contraseña:';
+$labels['newkeypassconfirm'] = 'Confirmar contraseña:';
+$labels['newkeysize'] = 'Tamaño de clave:';
+$labels['key2048'] = '2048 bits - por defecto';
+$labels['key4096'] = '4096 bits - más seguro';
+$labels['keygenerating'] = 'Generando claves...';
+$labels['encryptionoptions'] = 'Opciones de encriptado...';
+$labels['encryptmsg'] = 'Encriptar este mensaje.';
+$labels['signmsg'] = 'Firmar digitalmente este mensaje';
+$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
+$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
+$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
+$labels['keyexportprompt'] = '¿Quiere incluir claves secretas en el archivo guardado de claves OpenPGP?';
+$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
+$labels['withprivkeys'] = 'Exportar las Claves Secretas';
+$labels['findkey'] = 'Buscar en servidor(es) de claves';
+$labels['keyimportlabel'] = 'Importar desde archivo';
+$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
+$messages['sigvalid'] = 'Firma verificada por $sender.';
+$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
+$messages['siginvalid'] = 'Firma inválida por $sender.';
+$messages['sigunverified'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID del Certificado: $keyid.';
+$messages['signokey'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID de Clave: $keyid.';
+$messages['sigerror'] = 'Firma no verificada. Error interno.';
+$messages['decryptok'] = 'Mensaje desenciptado.';
+$messages['decrypterror'] = 'Desenciptación fallida.';
+$messages['decryptnokey'] = 'Desenciptación fallida. Clave privada no encontrada. ID de Clave: $keyid.';
+$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña inválida.';
+$messages['decryptnopass'] = 'Desencriptado fallido. Contraseña requerida.';
+$messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.';
+$messages['signerror'] = 'Firmado fallido.';
+$messages['signnokey'] = 'Firmado fallido. Clave privada no encontrada.';
+$messages['signbadpass'] = 'Firma fallida. Contraseña inválida.';
+$messages['signnopass'] = 'Acceso fallido. Contraseña requerida.';
+$messages['encrypterror'] = 'Encriptación fallida.';
+$messages['encryptnokey'] = 'Encriptación fallida. Clave pública no encontrada para $email.';
+$messages['nokeysfound'] = 'No se encontraron claves';
+$messages['keynotfound'] = '¡Clave no encontrada!';
+$messages['keyopenerror'] = '¡No se puede obtener la información de clave! Error interno.';
+$messages['keylisterror'] = '¡No es posible enumerar las claves! Error interno.';
+$messages['keysimportfailed'] = '¡No se puede(n) importar la(s) clave(s)! Error interno.';
+$messages['keysimportsuccess'] = 'Clave(s) importada(s) correctamente. Importado: $new, sin cambios: $old.';
+$messages['keyremoving'] = 'Eliminando clave(s)...';
+$messages['keyremoveconfirm'] = '¿Seguro que quiere eliminar la(s) clave(s) seleccionada(s)?';
+$messages['keyremovesuccess'] = 'Clave(s) eliminada(s) correctamente.';
+$messages['keyremoveerror'] = 'No se han podido borrar las clave(s) seleccionadas.';
+$messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y pública(s) o firmas de revocación en formato ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Puedes buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.';
+$messages['formerror'] = 'Por favor llene el formulario. ¡Todos los campos son obligatorios!';
+$messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!';
+$messages['keygenerateerror'] = 'No se ha podido generar una clave par';
+$messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.';
+$messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!';
+$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la llave!';
+$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['enigmacerts'] = 'S/MIME sertifikaadid';
+$labels['enigmakeys'] = 'PGP võtmed';
+$labels['keyname'] = 'Nimi';
+$labels['keyid'] = 'Võtme ID';
+$labels['keyuserid'] = 'Kasutaja ID';
+$labels['keytype'] = 'Võtme tüüp';
+$labels['fingerprint'] = 'Sõrmejälg';
+$labels['typepublickey'] = 'avalik võti';
+$labels['typekeypair'] = 'võtme paar';
+$labels['keyattimport'] = 'Impordi võti';
+$labels['typesign'] = 'Allkirjasta';
+$labels['typeencrypt'] = 'Krüpti';
+$labels['typecert'] = 'Sertifitseeri';
+$labels['subkeyid'] = 'ID';
+$labels['subkeycreated'] = 'Loodud';
+$labels['subkeyexpires'] = 'Aegub';
+$labels['subkeyusage'] = 'Kasutus';
+$labels['expiresnever'] = 'mitte kunagi';
+$labels['unknown'] = 'teadmata';
+$labels['userid'] = 'ID';
+$labels['keyremove'] = 'Eemalda';
+$labels['keydisable'] = 'Keela';
+$labels['keychpass'] = 'Muuda parooli';
+$labels['newkeyident'] = 'Identiteet:';
+$labels['newkeypass'] = 'Parool:';
+$labels['newkeypassconfirm'] = 'Kinnita parool:';
+$labels['newkeysize'] = 'Võtme suurus:';
+$labels['key2048'] = '2048 bitti - vailimisi';
+$labels['key4096'] = '4096 bitti - turvalisem';
+$labels['keygenerating'] = 'Võtmete genereerimine...';
+$labels['keyimportlabel'] = 'Impordi failist';
+$messages['nokeysfound'] = 'Võtmeid ei leitud';
+$messages['keynotfound'] = 'Võtit ei leitud!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Zifraketa';
+$labels['enigmacerts'] = 'S/MIME egiaztagiriak';
+$labels['enigmakeys'] = 'PGP gakoak';
+$labels['keysfromto'] = '$count-eko $from-etik $to-rako gakoak';
+$labels['keyname'] = 'Izena';
+$labels['keyid'] = 'gakoaren IDa';
+$labels['keyuserid'] = 'Erabiltzailearen IDa';
+$labels['keytype'] = 'Gako mota';
+$labels['fingerprint'] = 'Hatz-marka';
+$labels['subkeys'] = 'Azpigakoak';
+$labels['basicinfo'] = 'Oinarrizko informazioa';
+$labels['userids'] = 'Erabiltzaile gehigarriak';
+$labels['typepublickey'] = 'gako publikoa';
+$labels['typekeypair'] = 'gako bikotea';
+$labels['keyattfound'] = 'Mezu honek erantsita PGP gakoa(k) d(it)u';
+$labels['keyattimport'] = 'Inportatu gakoa(k)';
+$labels['typesign'] = 'Sinatu';
+$labels['typeencrypt'] = 'Zifratu';
+$labels['typecert'] = 'Ziurtatu';
+$labels['typeauth'] = 'Egiaztapena';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmoa';
+$labels['subkeycreated'] = 'Sortuta';
+$labels['subkeyexpires'] = 'Iraungitze-data';
+$labels['subkeyusage'] = 'Erabilera';
+$labels['expiresnever'] = 'inoiz ez';
+$labels['unknown'] = 'ezezaguna';
+$labels['uservalid'] = 'Baliozkoa';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'baliozkoa';
+$labels['supportencryption'] = 'Gaitu mezuen zifratzea eta sinadura ';
+$labels['supportsignatures'] = 'Gaitu mezuen sinaduren egiaztapena';
+$labels['supportdecryption'] = 'Gaitu mezuen deszifratzea';
+$labels['signdefault'] = 'Mezuen sinatzea lehenetsita';
+$labels['encryptdefault'] = 'Mezuen zifratzea lehenetsita';
+$labels['attachpubkeydefault'] = 'Nire PGP gako publikoa eranstea lehenetsita';
+$labels['passwordtime'] = 'Mantendu gako pribatuen pasahitzak';
+$labels['nminutes'] = '$m minutu';
+$labels['wholesession'] = 'Saio osoa';
+$labels['createkeys'] = 'Sortu gako pare berria';
+$labels['importkeys'] = 'Inportatu gakoa(k)';
+$labels['exportkeys'] = 'Esportatu gakoa(k)';
+$labels['keyactions'] = 'Gakoaren ekintzak...';
+$labels['keyremove'] = 'Kendu';
+$labels['keydisable'] = 'Ezgaitu';
+$labels['keyrevoke'] = 'Errebokatu';
+$labels['keysend'] = 'Bidali gako publiko mezu batean';
+$labels['keychpass'] = 'Aldatu pasahitza';
+$labels['newkeyident'] = 'Identitatea:';
+$labels['newkeypass'] = 'Pasahitza:';
+$labels['newkeypassconfirm'] = 'Berretsi pasahitza:';
+$labels['newkeysize'] = 'Gakoaren tamaina:';
+$labels['key2048'] = '2048 bit - lehenetsita';
+$labels['key4096'] = '4096 bit - seguruagoa';
+$labels['keygenerating'] = 'Gakoak sortzen...';
+$labels['encryptionoptions'] = 'Zifratze aukerak...';
+$labels['encryptmsg'] = 'Zifratu mezu hau';
+$labels['signmsg'] = 'Sinatu era digitalean mezu hau';
+$labels['enterkeypasstitle'] = 'Sartu gakoaren pasaesaldia';
+$labels['enterkeypass'] = 'Pasaesaldi bat behar da erabiltzaile honen gako sekretua ($keyid) desblokeatzeko: $user';
+$labels['arialabelkeyexportoptions'] = 'Gakoaren esportazio aukerak';
+$labels['attachpubkeymsg'] = 'Erantsi nire gako publikoa';
+$labels['keyexportprompt'] = 'Nahi al duzu gako sekretuak sartzea gordetako OpenPGP gakoen fitxategian?';
+$labels['onlypubkeys'] = 'Esportatu bakarrik gako publikoak';
+$labels['withprivkeys'] = 'Esportatu gako sekretoak';
+$labels['findkey'] = 'Bilatu gako zerbitzari(et)an';
+$labels['keyimportlabel'] = 'Inportatu fitxategitik';
+$labels['keyimportsearchlabel'] = 'Bilatu gako zerbitzari(et)an';
+$messages['sigvalid'] = '$sender-en sinadura egiaztatuta';
+$messages['sigvalidpartial'] = '$sender-en sinadura egiaztatuta, baina testu-gorputzaren zati bat ez dago sinatua.';
+$messages['siginvalid'] = '$sender-en sinadura baliogabea.';
+$messages['sigunverified'] = 'Egiaztatu gabeko sinadura. Egiaztagiria ez dago egiaztatuta. Egiaztagiriaren IDa: $Keyid.';
+$messages['signokey'] = 'Egiaztatu gabeko sinadura. Ez da aurkitu gako publikoa. Gakoaren IDa: $keyid.';
+$messages['sigerror'] = 'Egiaztatu gabeko sinadura. Barne errorea.';
+$messages['decryptok'] = 'Mezua deszifratua.';
+$messages['decrypterror'] = 'Deszifratzeak huts egin du.';
+$messages['decryptnokey'] = 'Deszifratzeak  huts egin du. Ez da aurkitu gako pribatua. Gakoaren IDa:  $keyid.';
+$messages['decryptbadpass'] = 'Deszifratzeak huts egin du. Baliogabeko pasahitza.';
+$messages['decryptnopass'] = 'Deszifratzeak huts egin du. Pasahitz gakoa behar da.';
+$messages['decryptpartial'] = 'Mezua deszifratua, baina testu gorputzaren zati bat ez zegoen zifratua.';
+$messages['signerror'] = 'Sinadurak huts egin du.';
+$messages['signnokey'] = 'Sinadurak huts egin du. Ez da aurkitu gako pribatua.';
+$messages['signbadpass'] = 'Sinadurak huts egin du. Baliogabeko pasahitza.';
+$messages['signnopass'] = 'Sinadurak huts egin du. Gako pasahitza behar da.';
+$messages['encrypterror'] = 'Zifratzeak huts egin du.';
+$messages['encryptnokey'] = 'Zifratzeak huts egin du. Ez da $email -ren gako publikoa aurkitu.';
+$messages['nokeysfound'] = 'Ez dira gakoak aurkitu';
+$messages['keynotfound'] = 'Gakoa ez da aurkitu!';
+$messages['keyopenerror'] = 'Ezin izan da gakoaren informazioa eskuratu! Barne errorea.';
+$messages['keylisterror'] = 'Ezin izan dira gakoak zerrendatu! Barne errorea.';
+$messages['keysimportfailed'] = 'Ezin izan d(ir)a gakoa(k) inportatu! Barne errorea.';
+$messages['keysimportsuccess'] = 'Gakoa(k) ongi inportatu d(ir)a. Inportatua: $new, aldatu gabe: $old';
+$messages['keyremoving'] = 'Gakoa(k) kentzen...';
+$messages['keyremoveconfirm'] = 'Ziur hautatutako gakoa(k) ezabatu nahi d(it)uzula?';
+$messages['keyremovesuccess'] = 'Gakoa(k) ongi ezabatu d(ir)a';
+$messages['keyremoveerror'] = 'Ezin izan d(ir)a hautatutako gakoa(k) ezabatu.';
+$messages['keyimporttext'] = 'Gako pribatu eta publikoa(k) edo errebokazio sinadurak ASCII-Armor formatuan inportatu ahal dituzu.';
+$messages['keyimportsearchtext'] = 'Gako publikoak bilatzen ahal dituzu gako identifikatzaile, erabiltzaile-izena edo posta helbidearen bidez eta orduan zuzenean inportatu.';
+$messages['formerror'] = 'Bete formularioa. Eremu guztiak bete behar dira!';
+$messages['passwordsdiffer'] = 'Pasahitzek ez dute bat egiten!';
+$messages['keygenerateerror'] = 'Huts egin du gako bikotea sortzen.';
+$messages['keygeneratesuccess'] = 'Gako bikotea ongi sortu eta inportatu da.';
+$messages['keygennosupport'] = 'Zure nabigatzaileak ez du kriptografia onartzen. Ezin da gako bikotea sortu!';
+$messages['noidentselected'] = 'Gutxienez identitate bat hautatu behar duzu gakoarentzat!';
+$messages['nonameident'] = 'Identitateak erabiltzaile-izen bat definitua izan behar du!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'رمزگذاری';
+$labels['keyname'] = 'نام';
+$labels['keyuserid'] = 'شناسه‌ی کاربری';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Salaus';
+$labels['enigmacerts'] = 'S/MIME-varmenteet';
+$labels['enigmakeys'] = 'PGP-avaimet';
+$labels['keysfromto'] = 'Avaimet $from-$to/$count';
+$labels['keyname'] = 'Nimi';
+$labels['keyid'] = 'Avaintunniste';
+$labels['keyuserid'] = 'Käyttäjätunniste';
+$labels['keytype'] = 'Avaimen tyyppi';
+$labels['fingerprint'] = 'Sormenjälki';
+$labels['subkeys'] = 'Aliavaimet';
+$labels['basicinfo'] = 'Perustiedot';
+$labels['userids'] = 'Lisäkäyttäjät';
+$labels['typepublickey'] = 'julkinen avain';
+$labels['typekeypair'] = 'avainpari';
+$labels['keyattfound'] = 'Tämä viesti sisältää yhden tai useamman PGP-avaimen.';
+$labels['keyattimport'] = 'Tuo avaimia';
+$labels['typesign'] = 'Allekirjoitus';
+$labels['typeencrypt'] = 'Salaus';
+$labels['typecert'] = 'Todistus';
+$labels['typeauth'] = 'Tunnistautuminen';
+$labels['subkeyid'] = 'Tunniste';
+$labels['subkeyalgo'] = 'Algoritmi';
+$labels['subkeycreated'] = 'Luotu';
+$labels['subkeyexpires'] = 'Vanhenee';
+$labels['subkeyusage'] = 'Käyttö';
+$labels['expiresnever'] = 'ei koskaan';
+$labels['unknown'] = 'tuntematon';
+$labels['uservalid'] = 'Kelvollinen';
+$labels['userid'] = 'Tunniste';
+$labels['valid'] = 'kelvollinen';
+$labels['supportencryption'] = 'Käytä viestien salausta ja allekirjoitusta';
+$labels['supportsignatures'] = 'Käytä viestien allekirjoitusten vahvistusta';
+$labels['supportdecryption'] = 'Ota käyttöön viestien salauksen purkaminen';
+$labels['signdefault'] = 'Allekirjoita kaikki viestit oletuksena';
+$labels['encryptdefault'] = 'Salaa kaikki viestit oletuksena';
+$labels['attachpubkeydefault'] = 'Liitä julkinen PGP-avaimeni oletuksena';
+$labels['passwordtime'] = 'Säilytä yksityisen avaimen salasanat';
+$labels['nminutes'] = '$m minuutin ajan';
+$labels['wholesession'] = 'koko istunnon ajan';
+$labels['createkeys'] = 'Luo uusi avainpari';
+$labels['importkeys'] = 'Tuo avaimia';
+$labels['exportkeys'] = 'Vie avaimia';
+$labels['keyactions'] = 'Avaintoiminnot...';
+$labels['keyremove'] = 'Poista';
+$labels['keydisable'] = 'Poista käytöstä';
+$labels['keyrevoke'] = 'Kumoa';
+$labels['keysend'] = 'Lähetä julkinen avain viestissä';
+$labels['keychpass'] = 'Vaihda salasana';
+$labels['newkeyident'] = 'Identiteetti:';
+$labels['newkeypass'] = 'Salasana:';
+$labels['newkeypassconfirm'] = 'Vahvista salasana:';
+$labels['newkeysize'] = 'Avaimen koko:';
+$labels['key2048'] = '2048 bittiä - oletus';
+$labels['key4096'] = '4096 bittiä - turvallisempi';
+$labels['keygenerating'] = 'Luodaan avaimia...';
+$labels['encryptionoptions'] = 'Salausvalinnat...';
+$labels['encryptmsg'] = 'Salaa tämä viesti';
+$labels['signmsg'] = 'Lisää digitaalinen allekirjoitus tähän viestiin';
+$labels['enterkeypasstitle'] = 'Anna tunnuslause';
+$labels['arialabelkeyexportoptions'] = 'Avaimien vientivalinnat';
+$labels['attachpubkeymsg'] = 'Liitä julkinen avaimeni';
+$labels['findkey'] = 'Etsi avainpalvelimilta';
+$messages['sigvalid'] = 'Vahvistettu allekirjoitus lähettäjältä $sender.';
+$messages['siginvalid'] = 'Virheellinen allekirjoitus lähettäjältä $sender.';
+$messages['sigunverified'] = 'Vahvistamaton allekirjoitus. Varmennetta ei ole vahvistettu. Varmenteen tunniste: $keyid.';
+$messages['signokey'] = 'Vahvistamaton allekirjoitus. Julkista avainta ei löydy. Avaimen tunniste: $keyid.';
+$messages['sigerror'] = 'Vahvistamaton allekirjoitus. Sisäinen virhe.';
+$messages['decryptok'] = 'Viestin salaus purettu.';
+$messages['decrypterror'] = 'Salauksen purkaminen epäonnistui.';
+$messages['decryptnokey'] = 'Salauksen purkaminen epäonnistui. Yksityistä avainta ei löytynyt. Avaimen tunniste: $keyid.';
+$messages['decryptnopass'] = 'Salauksen purkaminen epäonnistui. Avaimen salasana vaaditaan.';
+$messages['signerror'] = 'Allekirjoittaminen epäonnistui.';
+$messages['signnokey'] = 'Allekirjoittaminen epäonnistui. Yksityistä avainta ei löytynyt.';
+$messages['signnopass'] = 'Allekirjoitus epäonnistui. Avaimen salasana vaaditaan.';
+$messages['encrypterror'] = 'Salaaminen epäonnistui.';
+$messages['encryptnokey'] = 'Salaaminen epäonnistui. Osoitteelle $email ei löytynyt julkista avainta.';
+$messages['nokeysfound'] = 'Avaimia ei löytynyt';
+$messages['keynotfound'] = 'Avainta ei löytynyt!';
+$messages['keyopenerror'] = 'Avaintietojen noutaminen ei onnistu! Sisäinen virhe.';
+$messages['keylisterror'] = 'Avainten listaaminen ei onnistu! Sisäinen virhe.';
+$messages['keysimportfailed'] = 'Avaimen tuominen epäonnistui! Sisäinen virhe.';
+$messages['formerror'] = 'Täytä lomake. Kaikki kentät ovat pakollisia!';
+$messages['passwordsdiffer'] = 'Salasanat eivät täsmää!';
+$messages['keygenerateerror'] = 'Avainparin luominen epäonnistui';
+$messages['keygeneratesuccess'] = 'Avainpari luotiin ja tuotiin onnistuneesti.';
+$messages['keygennosupport'] = 'Selaimesi ei tue salaustekniikkaa. Avainparin luominen ei onnistu!';
+$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Brongla';
+$labels['enigmacerts'] = 'S/MIME skjal';
+$labels['enigmakeys'] = 'PGP lyklar';
+$labels['keysfromto'] = 'Lyklar frá $from til $to av $count';
+$labels['keyname'] = 'Navn';
+$labels['keyid'] = 'Lykla ID';
+$labels['keyuserid'] = 'Brúkara ID';
+$labels['keytype'] = 'Lykla týpa';
+$labels['fingerprint'] = 'Fingramerki';
+$labels['subkeys'] = 'Undir lyklar';
+$labels['basicinfo'] = 'Grund upplýsingar';
+$labels['userids'] = 'Eyka brúkarar';
+$labels['typepublickey'] = 'almenna lykil';
+$labels['typekeypair'] = 'lykla par';
+$labels['keyattfound'] = 'Hesi boð innihalda viðheftar PGP lyklar';
+$labels['keyattimport'] = 'Innflyt lyk(lar/il)';
+$labels['typesign'] = 'Undirskriva';
+$labels['typeencrypt'] = 'Brongla';
+$labels['typecert'] = 'Vátta';
+$labels['typeauth'] = 'Samgildi';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritma';
+$labels['subkeycreated'] = 'Stovna';
+$labels['subkeyexpires'] = 'Gongur út';
+$labels['subkeyusage'] = 'Brúksla';
+$labels['expiresnever'] = 'aldrin';
+$labels['unknown'] = 'ókent';
+$labels['uservalid'] = 'Gildigt';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'Gildigt';
+$labels['supportencryption'] = 'Tendra boð brongling og undirskriving';
+$labels['supportsignatures'] = 'Tendra váttan av undirskriftum';
+$labels['supportdecryption'] = 'Tendra boð óbrongsling';
+$labels['signdefault'] = 'Undirskriva øll boð vanliga';
+$labels['encryptdefault'] = 'Brongla øll boð vanligt';
+$labels['passwordtime'] = 'Goym loyniorð hjá loyndarlykilum fyri';
+$labels['nminutes'] = '$m minutt(ir)';
+$labels['wholesession'] = 'øll setanin';
+$labels['createkeys'] = 'Skapa nýtt lykla par';
+$labels['importkeys'] = 'Innflyt lyk(lar/il)';
+$labels['exportkeys'] = 'Flyt út lyklar';
+$labels['keyactions'] = 'Lykla gerðir';
+$labels['keyremove'] = 'Strika';
+$labels['keydisable'] = 'Sløkk';
+$labels['keyrevoke'] = 'Sig úr gildi';
+$labels['keysend'] = 'Send almennan lykil í einum boðum';
+$labels['keychpass'] = 'Broyt loyniorð';
+$labels['newkeyident'] = 'Samleiki:';
+$labels['newkeypass'] = 'Loyniorð:';
+$labels['newkeypassconfirm'] = 'Vátta loyniorð:';
+$labels['newkeysize'] = 'Lykla stødd:';
+$labels['key2048'] = '2048 bit - vanligt';
+$labels['key4096'] = '4096 bits - meiri trygt';
+$labels['keygenerating'] = 'Framleiður lyklar...';
+$labels['encryptionoptions'] = 'Bronglu møguleikar';
+$labels['encryptmsg'] = 'Brongla hesi boð';
+$labels['signmsg'] = 'Undirskriva hesi boð';
+$labels['enterkeypasstitle'] = 'Skriva loyniorð';
+$labels['enterkeypass'] = 'Tað er tørvur á einum loyniorðið fyri at stongja upp loyndar-lykilin ($keyid) hjá brúkara:';
+$labels['arialabelkeyexportoptions'] = 'Lykla út flytingar møguleikar';
+$messages['sigvalid'] = 'Váttað undirskrift frá $sender.';
+$messages['siginvalid'] = 'Ógildig undirskrift frá $sender.';
+$messages['sigunverified'] = 'Óvátta undirskrift: skjal er ikki vátta. Skjal ID: $keyid.';
+$messages['signokey'] = 'Óvátta undirskrift. Almennur lykil var ikki funnin. Lykla ID: $keyid.';
+$messages['sigerror'] = 'Óvátta boð. Innanhýsis feilur.';
+$messages['decryptok'] = 'Boðini eru óbrongla';
+$messages['decrypterror'] = 'Feilur kom í óbrongslingina.';
+$messages['decryptnokey'] = 'Óbrongsling riggaði ikki. Loyndarlykilin var ikki funnin. Lykila ID: $keyid.';
+$messages['decryptnopass'] = 'Óbrongslan riggaði ikki. Lykla loyniorð er neyðugt.';
+$messages['signerror'] = 'Undirskriving riggaði ikki.';
+$messages['signnokey'] = 'Undirskriving riggaði ikki. Eingin privat lyki funnin';
+$messages['signnopass'] = 'Undirskriving riggaði ikki. Lykla loyniorð er neyðugt.';
+$messages['encrypterror'] = 'Brongsling riggaði ikk';
+$messages['encryptnokey'] = 'Brongsling riggaði ikki. Almennur lykil var ikki funnin fyri $email';
+$messages['nokeysfound'] = 'Eingir lyklar vóru funnir';
+$messages['keyopenerror'] = 'Bar ikki til at fáa upplýsingar um lyklar! Innanhýsis feilur';
+$messages['keylisterror'] = 'Bar ikki til at lista lyklar! Innanhýsis feilur';
+$messages['keysimportfailed'] = 'Bar ikki til at innflyta lyk(il/lar)! Innanhýsis feilur';
+$messages['keysimportsuccess'] = 'Lykar innfluttir. Innflutt: $new, óbroyttir: $old.';
+$messages['keyremoving'] = 'Strikar lyk(il/lar)';
+$messages['keyremoveconfirm'] = 'Ert tú vísur í, at tú vilt strika hesar lyklar?';
+$messages['keyremovesuccess'] = 'Lyk(il/lar) eru strikaðir';
+$messages['keyremoveerror'] = 'Ber ikki til at strika lyk(il/lar)';
+$messages['keyimporttext'] = 'Tú kanst innflyta almennar og privat lyklar ella taka aftur undirskriftir í ASCII-Armor formati';
+$messages['formerror'] = 'Vinarliga fylla allan formin. Øll felt eru kravd!';
+$messages['passwordsdiffer'] = 'Loyniorðini eru ikki eins!';
+$messages['keygenerateerror'] = 'Feilur kom í, tá roynt var at framleiða lykla par';
+$messages['keygeneratesuccess'] = 'Eitt lykla-par var framleitt og inn flutt';
+$messages['keygennosupport'] = 'Tín kagari dugur ikki dulmálsvísindi. Ber ikki til at framleiða lykla par';
+$messages['nonameident'] = 'samleiki má hava eitt brúkaranavn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Chiffrement';
+$labels['enigmacerts'] = 'Certificats S/MIME';
+$labels['enigmakeys'] = 'Clés PGP';
+$labels['keysfromto'] = 'Clés $from à $to sur $count';
+$labels['keyname'] = 'Nom';
+$labels['keyid'] = 'ID de clé';
+$labels['keyuserid'] = 'ID utilisateur';
+$labels['keytype'] = 'Type de clé';
+$labels['fingerprint'] = 'Empreinte';
+$labels['subkeys'] = 'Sous-clés';
+$labels['basicinfo'] = 'Informations de base';
+$labels['userids'] = 'Utilisateurs supplémentaires';
+$labels['typepublickey'] = 'Clé publique';
+$labels['typekeypair'] = 'biclé';
+$labels['keyattfound'] = 'Ce courriel contient une/des clé(s) PGP jointe(s).';
+$labels['keyattimport'] = 'Importer une/des clé(s)';
+$labels['typesign'] = 'Signer';
+$labels['typeencrypt'] = 'Chiffrer';
+$labels['typecert'] = 'Certifier';
+$labels['typeauth'] = 'Authentification';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algorithme ';
+$labels['subkeycreated'] = 'Créée';
+$labels['subkeyexpires'] = 'Expire';
+$labels['subkeyusage'] = 'Utilisation';
+$labels['expiresnever'] = 'jamais';
+$labels['unknown'] = 'inconnu';
+$labels['uservalid'] = 'Valide';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valide';
+$labels['supportencryption'] = 'Activer la signature et le chiffrement des courriels';
+$labels['supportsignatures'] = 'Activer la vérification des signatures des courriels';
+$labels['supportdecryption'] = 'Activer le déchiffrement des courriels';
+$labels['signdefault'] = 'Par défaut, signer tous les courriels';
+$labels['encryptdefault'] = 'Par défaut, chiffrer tous les courriels';
+$labels['attachpubkeydefault'] = 'Par défaut, joindre ma clé PGP publique';
+$labels['passwordtime'] = 'Conserver les mots de passe des clés privées pendant';
+$labels['nminutes'] = '$m minute(s)';
+$labels['wholesession'] = 'la session complète';
+$labels['createkeys'] = 'Créer une nouvelle biclé';
+$labels['importkeys'] = 'Importer des clés';
+$labels['exportkeys'] = 'Exporter des clés';
+$labels['keyactions'] = 'Actions des clés...';
+$labels['keyremove'] = 'Supprimer';
+$labels['keydisable'] = 'Désactiver';
+$labels['keyrevoke'] = 'Révoquer';
+$labels['keysend'] = 'Envoyer la clé publique dans un courriel';
+$labels['keychpass'] = 'Changer le mot de passe';
+$labels['newkeyident'] = 'Identité :';
+$labels['newkeypass'] = 'Mot de passe :';
+$labels['newkeypassconfirm'] = 'Confirmer le mot de passe :';
+$labels['newkeysize'] = 'Taille de la clé :';
+$labels['key2048'] = '2048 bits - par défaut';
+$labels['key4096'] = '4096 bits - plus sécurisé';
+$labels['keygenerating'] = 'Génération des clés...';
+$labels['encryptionoptions'] = 'Options de chiffrement...';
+$labels['encryptmsg'] = 'Chiffrer ce courriel';
+$labels['signmsg'] = 'Signer numériquement ce courriel';
+$labels['sendunencrypted'] = 'Envoyer non chiffré';
+$labels['enterkeypasstitle'] = 'Saisir la phrase de passe de la clé';
+$labels['enterkeypass'] = 'Un phrase de passe est nécessaire pour débloquer la clé secrète ($keyid) pour l\'utilisateur : $user.';
+$labels['arialabelkeyexportoptions'] = 'Options d\'exportation des clés';
+$labels['attachpubkeymsg'] = 'Joindre ma clé publique';
+$labels['keyexportprompt'] = 'Voulez-vous inclure les clés secrètes dans le fichier des clés OpenPGP enregistrées ?';
+$labels['onlypubkeys'] = 'Exporter seulement les clés publiques';
+$labels['withprivkeys'] = 'Exporter les clés secrètes';
+$labels['findkey'] = 'Rechercher sur les serveurs de clés';
+$labels['keyimportlabel'] = 'Importer d\'un fichier';
+$labels['keyimportsearchlabel'] = 'Rechercher sur les serveurs de clés';
+$messages['sigvalid'] = 'Signature vérifiée de $sender.';
+$messages['sigvalidpartial'] = 'La signature de $sender a été vérifiée, mais une partie du corps n\'était pas signée.';
+$messages['siginvalid'] = 'Signature invalide de $sender.';
+$messages['sigunverified'] = 'Signature non vérifiée. Certificat non vérifié. ID de certificat : $keyid.';
+$messages['signokey'] = 'Signature non vérifiée. Clé publique introuvable. ID de clé : $keyid.';
+$messages['sigerror'] = 'Signature non vérifiée. Erreur interne.';
+$messages['decryptok'] = 'Courriel déchiffré.';
+$messages['decrypterror'] = 'Échec lors du déchiffrement.';
+$messages['decryptnokey'] = 'Échec de déchiffrement. Clé privée introuvable. ID de clé : $keyid.';
+$messages['decryptbadpass'] = 'Échec de déchiffrement. Le mot de passe est invalide.';
+$messages['decryptnopass'] = 'Échec de déchiffrement. Le mot de passe de la clé est exigé.';
+$messages['decryptpartial'] = 'Le courriel a été déchiffré, mais une partie du corps n\'était pas chiffré.';
+$messages['signerror'] = 'Échec lors de la signature.';
+$messages['signnokey'] = 'Échec lors de la signature. La clé privée est introuvable.';
+$messages['signbadpass'] = 'Échec de signature. Le mot de passe est invalide.';
+$messages['signnopass'] = 'Échec de signature. Le mot de passe de la clé est exigé.';
+$messages['encrypterror'] = 'Échec lors du chiffrement.';
+$messages['encryptnokey'] = 'Échec lors du chiffrement. La clé publique est introuvable pour $email.';
+$messages['nokeysfound'] = 'Aucune clé trouvée';
+$messages['keynotfound'] = 'Clé introuvable !';
+$messages['keyopenerror'] = 'Impossible d\'obtenir les informations sur la clé ! Erreur interne.';
+$messages['keylisterror'] = 'Impossible de lister les clés ! Erreur interne.';
+$messages['keysimportfailed'] = 'Impossible d\'importer les clés ! Erreur interne.';
+$messages['keysimportsuccess'] = 'Importation de clé réussie. Importées : $new, non modifiée(s) : $old.';
+$messages['keyremoving'] = 'Suppression de des clés...';
+$messages['keyremoveconfirm'] = 'Voulez-vous vraiment supprimer les clés sélectionnées ?';
+$messages['keyremovesuccess'] = 'Clés supprimées avec succès';
+$messages['keyremoveerror'] = 'Impossible de supprimer les clés sélectionnées';
+$messages['keyimporttext'] = 'Vous pouvez importer des clés privées et publiques ou des signatures de révocation au format ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Vous pouvez chercher des clés publiques par identifiant de clé, nom d\'utilisateur ou adresse courriel, et ensuite les importer directement.';
+$messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont requis !';
+$messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas !';
+$messages['keygenerateerror'] = 'La génération de la biclé a échoué';
+$messages['keygeneratesuccess'] = 'Une biclé a été générée et importée avec succès.';
+$messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé !';
+$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé !';
+$messages['nonameident'] = 'Un nom d\'utilisateur doit être défini pour l\'identité !';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Criptiúchán';
+$labels['keyname'] = 'Ainm';
+$labels['fingerprint'] = 'Méarlorg';
+$labels['basicinfo'] = 'An fhaisnéis bhunúsach';
+$labels['userids'] = 'Úsáideoirí breise';
+$labels['typepublickey'] = 'eochair phoiblí';
+$labels['typesign'] = 'Sínigh';
+$labels['typeencrypt'] = 'Criptigh';
+$labels['typecert'] = 'Deimhnigh';
+$labels['typeauth'] = 'Fíordheimhniú';
+$labels['subkeyid'] = 'Aitheantas';
+$labels['subkeyalgo'] = 'Algartam';
+$labels['subkeycreated'] = 'Cruthaithe';
+$labels['subkeyexpires'] = 'Éagann sé';
+$labels['subkeyusage'] = 'Úsáid';
+$labels['expiresnever'] = 'riamh';
+$labels['unknown'] = 'anaithnid';
+$labels['uservalid'] = 'Bailí';
+$labels['userid'] = 'Aitheantas';
+$labels['valid'] = 'bailí';
+$labels['signdefault'] = 'Sínigh gach teachtaireacht mar réamhshocrú';
+$labels['encryptdefault'] = 'Criptigh gach teachtaireacht mar réamhshocrú';
+$labels['nminutes'] = '$m nóiméad';
+$labels['wholesession'] = 'an dreas ar fad';
+$labels['keyremove'] = 'Bain';
+$labels['keydisable'] = 'Díchumasaigh';
+$labels['keyrevoke'] = 'Aisghairm';
+$labels['keysend'] = 'Seol eochair phoiblí i dteachtaireacht';
+$labels['keychpass'] = 'Athraigh d\'fhocal faire';
+$labels['newkeyident'] = 'Aitheantas:';
+$labels['newkeypass'] = 'Focal faire:';
+$labels['newkeypassconfirm'] = 'Deimhnigh an focal faire:';
+$labels['keygenerating'] = 'Ag cruthú eochracha...';
+$labels['encryptmsg'] = 'Criptigh an teachtaireacht seo';
+$labels['signmsg'] = 'Sínigh an teachtaireacht seo go digiteach';
+$labels['attachpubkeymsg'] = 'Ceangail m\'eochair phoiblí';
+$labels['keyimportlabel'] = 'Tabhair isteach ó chomhad';
+$messages['decrypterror'] = 'Theip ar an díchriptiú';
+$messages['signerror'] = 'Theip ar an síniú.';
+$messages['encrypterror'] = 'Theip ar an gcriptiú.';
+$messages['nokeysfound'] = 'Níor aimsíodh aon eochair';
+$messages['keynotfound'] = 'Níor aimsíodh an eochair!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'הצפנה';
+$labels['enigmacerts'] = 'תעודות מ×ושרות S/MIME';
+$labels['enigmakeys'] = 'מפתחות PGP';
+$labels['keysfromto'] = 'מפתחות from$ עד to$ מתוך count$';
+$labels['keyname'] = 'ש×';
+$labels['keyid'] = 'זיהוי מפתח';
+$labels['keyuserid'] = 'זיהוי משתמש';
+$labels['keytype'] = 'סוג מפתח';
+$labels['fingerprint'] = 'טביעת ×צבע';
+$labels['subkeys'] = 'תת מפתח';
+$labels['basicinfo'] = 'מידע בסיסי';
+$labels['userids'] = '×ž×©×ª×ž×©×™× × ×•×¡×¤×™×';
+$labels['typepublickey'] = 'מפתח ציבורי';
+$labels['typekeypair'] = 'צמד מפתחות';
+$labels['keyattfound'] = 'הצרופה מכילה מפתח PGP ×חד ×ו יותר';
+$labels['keyattimport'] = '×™×™×‘×•× ×ž×¤×ª×— ×חד ×ו יותר';
+$labels['typesign'] = 'לחתו×';
+$labels['typeencrypt'] = 'להצפין';
+$labels['typecert'] = 'ל×שר';
+$labels['typeauth'] = '×•×™×“×•× ×ž×§×•×¨×™×•×ª';
+$labels['subkeyid'] = 'קוד זיהוי';
+$labels['subkeyalgo'] = '×לגורית×';
+$labels['subkeycreated'] = 'נוצר';
+$labels['subkeyexpires'] = 'פג תוקף';
+$labels['subkeyusage'] = 'שימוש';
+$labels['expiresnever'] = '××£ פע×';
+$labels['unknown'] = '×œ× ×™×“×•×¢';
+$labels['uservalid'] = 'בתוקף';
+$labels['userid'] = 'קוד זיהוי';
+$labels['valid'] = 'בתוקף';
+$labels['supportencryption'] = 'הפעלה של הצפנת הודעה וחתימתה';
+$labels['supportsignatures'] = 'הפעלה של ×•×™×“×•× ×—×ª×™×ž×•×ª הודעה';
+$labels['supportdecryption'] = 'הפעלה של פיענוח הודעה';
+$labels['signdefault'] = 'חתימה של כל הודעה כברירת מחדל';
+$labels['encryptdefault'] = 'הצפנה של כל הודעה כברירת מחדל';
+$labels['attachpubkeydefault'] = 'צירוף המפתח הציבורי שלי כברירת מחדל';
+$labels['passwordtime'] = '×חסון סיסמ×ות של מפתח פרטי עבור';
+$labels['nminutes'] = 'm$ דקות';
+$labels['wholesession'] = 'כל משך ההתקשרות';
+$labels['createkeys'] = 'יצירה של צמד מפתחות';
+$labels['importkeys'] = '×™×™×‘×•× ×ž×¤×ª×— ×חד ×ו יותר';
+$labels['exportkeys'] = '×™×™×¦×•× ×ž×¤×ª×— ×חד ×ו יותר';
+$labels['keyactions'] = 'פעולות ×פשריות למפתח...';
+$labels['keyremove'] = 'הסר';
+$labels['keydisable'] = 'חסו×';
+$labels['keyrevoke'] = 'הפקעה';
+$labels['keysend'] = 'משלוח מפתח ציבורי בהודעה';
+$labels['keychpass'] = 'שינוי סיסמה';
+$labels['newkeyident'] = 'זהות:';
+$labels['newkeypass'] = 'סיסמה:';
+$labels['newkeypassconfirm'] = '×ישור סיסמה:';
+$labels['newkeysize'] = 'גודל מפתח:';
+$labels['key2048'] = 'ברירת מחדל - 2048 סיביות';
+$labels['key4096'] = '4096 סיביות - יותר בטוח';
+$labels['keygenerating'] = 'מפתחות נוצרי×...';
+$labels['encryptionoptions'] = '×פשרויות הצפנה...';
+$labels['encryptmsg'] = 'הצפנה של הודעה זו';
+$labels['signmsg'] = 'חתימה דיגיטלית של הודעה זו';
+$labels['sendunencrypted'] = 'לשלוח ×œ×œ× ×”×¦×¤× ×”';
+$labels['enterkeypasstitle'] = '× × ×œ×”×§×™×© צרור ×ותיות ×•×¡×™×ž× ×™× ×œ×™×¦×™×¨×ª מפתח';
+$labels['enterkeypass'] = 'יש להקיש צרור ×ותיות ×•×¡×™×ž× ×™× ×©× ×‘×—×¨×• ×§×•×“× ×›×“×™ לשחרר נעילה של המפתח הסודי  (keyid$)  של משתמש  user$';
+$labels['arialabelkeyexportoptions'] = '×פשרויות ×™×™×¦×•× ×©×œ מפתחות';
+$labels['attachpubkeymsg'] = 'צירוף המפתח הציבורי שלי';
+$labels['keyexportprompt'] = '×”×× ×‘×¨×¦×•× ×š לכלול מפתחות ×¡×•×“×™×™× ×‘×§×•×‘×¥ השמור של המפתחות ?';
+$labels['onlypubkeys'] = '×™×™×¦×•× ×ž×¤×ª×—×•×ª ×¦×™×‘×•×¨×™×™× ×‘×œ×‘×“';
+$labels['withprivkeys'] = '×™×™×¦×•× ×ž×¤×ª×—×•×ª סודיי×';
+$labels['findkey'] = 'חיפוש בשרת(י) מפתח';
+$labels['keyimportlabel'] = '×™×™×‘×•× ×ž×§×•×‘×¥';
+$labels['keyimportsearchlabel'] = 'חיפוש בשרת(י) מפתח';
+$messages['sigvalid'] = '×ימות חתימה מ sender$';
+$messages['sigvalidpartial'] = '×ומתה חתימה של sender$ ×בל חלק מגוף ההודעה ×œ× × ×—×ª×';
+$messages['siginvalid'] = 'חתימה ×œ× ×ª×§×™× ×” מ sender$';
+$messages['sigunverified'] = 'חתימה ×œ× ×ž×ומתת. התעודה ×œ× ×ומתה. קוד תעודה: keyid$.';
+$messages['signokey'] = 'חתימה ×œ× ×ž×ומתת. ×œ× × ×ž×¦× ×ž×¤×ª×— ציבורי. קוד מפתח: keyid$.';
+$messages['sigerror'] = 'חתימה ×œ× ×ž×ומתת. שגי××” פנימית.';
+$messages['decryptok'] = 'הודעה פוענחה.';
+$messages['decrypterror'] = 'הפיענוח נכשל.';
+$messages['decryptnokey'] = 'הפיענוח נכשל. ×œ× × ×ž×¦× ×ž×¤×ª×— פרטי. קוד מפתח: keyid$.';
+$messages['decryptbadpass'] = 'פיענוח נכשל. סיסמה שגויה.';
+$messages['decryptnopass'] = 'פענוח נכשל. נדרשת סיסמת מפתח.';
+$messages['decryptpartial'] = 'ההודעה פוענחה ×בל חלק מגוף ההודעה כלל ×œ× ×”×•×¦×¤×Ÿ';
+$messages['signerror'] = 'חתימה נכשלה.';
+$messages['signnokey'] = 'חתימה נכשלה. ×œ× × ×ž×¦× ×ž×¤×ª×— פרטי.';
+$messages['signbadpass'] = 'חתימה נכשלה. סיסמה שגויה.';
+$messages['signnopass'] = '×—×™×ª×•× × ×›×©×œ. נדרשת סיסמת מפתח.';
+$messages['encrypterror'] = 'הצפנה נכשלה.';
+$messages['encryptnokey'] = 'הצפנה נכשלה. ×œ× × ×ž×¦× ×ž×¤×ª×— ציבורי עבור mail$.';
+$messages['nokeysfound'] = '×œ× × ×ž×¦×ו מפתחות.';
+$messages['keynotfound'] = '×œ× × ×ž×¦× ×ž×¤×ª×— !';
+$messages['keyopenerror'] = '×œ× × ×™×ª×Ÿ להשיג מידע על מפתח! שגי××” פנימית.';
+$messages['keylisterror'] = '×œ× × ×™×ª×Ÿ להציג רשימת מפתחות! שגי××” פנימית.';
+$messages['keysimportfailed'] = '×œ× × ×™×ª×Ÿ ×œ×™×™×‘× ×ž×¤×ª×— ×חד ×ו יותר !   שגי××” פנימית.';
+$messages['keysimportsuccess'] = 'מפתחות יוב×ו בהצלחה. יוב×: new$, ×œ× ×©×™× ×•×™: old$.';
+$messages['keyremoving'] = 'הסרת מפתחות...';
+$messages['keyremoveconfirm'] = '×”×× ×œ×ž×—×•×§ ×ת המפתחות שנבחרו?';
+$messages['keyremovesuccess'] = 'מפתח(ות) נמחק(ו) בהצלחה';
+$messages['keyremoveerror'] = '×œ× × ×™×ª×Ÿ למחוק ×ת המפתחות שנבחרו.';
+$messages['keyimporttext'] = 'ניתן ×œ×™×™×‘× ×ž×¤×ª×—×•×ª ×¤×¨×˜×™×™× ×•×¦×™×‘×•×¨×™×™× ×ו חתימות ביטול ב×פורמט ASCII-Armor';
+$messages['keyimportsearchtext'] = 'ניתן לחפש מפתחות ×¦×™×‘×•×¨×™×™× ×œ×¤×™ מזהה מפתח, ×©× ×ž×©×ª×ž×© ×ו כתובת דו×"ל ו××—"×› ×œ×™×™×‘× ××•×ª× ×™×©×™×¨×•×ª.';
+$messages['formerror'] = '× × ×œ×ž×œ× ×ת כל השדות בטופס !';
+$messages['passwordsdiffer'] = 'הסיסמ×ות ×œ× ×ª×•×מות!';
+$messages['keygenerateerror'] = 'נכשלה יצירה של צמד המפתחות';
+$messages['keygeneratesuccess'] = 'נוצר צמד מפתחות ×•×™×•×‘× ×‘×”×¦×œ×—×”.';
+$messages['keygennosupport'] = 'הדפדפן ×”×–×” ×ינו תומך בהצפנה. ×œ× × ×™×ª×Ÿ לייצר צמד מפתחות !';
+$messages['noidentselected'] = 'יש לבחור לפחות זהות ×חת עבור המפתח';
+$messages['nonameident'] = 'יש להגדיר ×©× ×ž×©×ª×ž×© בהגדרת הזהות !';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['keychpass'] = 'Promjena zaporke';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Titkosítás';
+$labels['enigmacerts'] = 'S/MIMI Tanusitványok';
+$labels['enigmakeys'] = 'PGP Kulcsok';
+$labels['keysfromto'] = 'Kulcsok $from - $to / $count ';
+$labels['keyname'] = 'Név';
+$labels['keyid'] = 'Kulcs ID';
+$labels['keyuserid'] = 'Felhasználó ID';
+$labels['keytype'] = 'Kulcs tipus';
+$labels['fingerprint'] = 'Ujjlenyomat';
+$labels['subkeys'] = 'Alkulcsok';
+$labels['basicinfo'] = 'Alap információk';
+$labels['userids'] = 'További felhasználok';
+$labels['typepublickey'] = 'nyilvános kulcs';
+$labels['typekeypair'] = 'kulcspár';
+$labels['keyattfound'] = 'Ez az űzenet tartalmaz csatolt PGP kulcso(ka)t';
+$labels['keyattimport'] = 'Kulcs(ok) importálása';
+$labels['typesign'] = 'Aláírás';
+$labels['typeencrypt'] = 'Titkosít';
+$labels['typecert'] = 'Igazolni';
+$labels['typeauth'] = 'Hitelesítés';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmus';
+$labels['subkeycreated'] = 'Létrehozva';
+$labels['subkeyexpires'] = 'Lejár';
+$labels['subkeyusage'] = 'Felhasználás';
+$labels['expiresnever'] = 'soha';
+$labels['unknown'] = 'ismeretlen';
+$labels['uservalid'] = 'Érvényes';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'érvényes';
+$labels['supportencryption'] = 'Az üzenet titkosításának és aláíásának engedélyezése';
+$labels['supportsignatures'] = 'Az űzenet álírásainak ellenörzésének engedélyezése';
+$labels['supportdecryption'] = 'Az üzenet ki-titkosításának engedélyezése';
+$labels['signdefault'] = 'Alapértelemzetten írja alá az üzeneteket';
+$labels['encryptdefault'] = 'Titkosítsa az összes üzenetet alapértelemzetten';
+$labels['attachpubkeydefault'] = 'Alapértelmezetten csatolja a publikus PGP kulcsomat.';
+$labels['passwordtime'] = 'Jegyezze meg a privát kulcs jelszavát a következöhöz';
+$labels['nminutes'] = '$m perc';
+$labels['wholesession'] = 'az egész munkamenet';
+$labels['createkeys'] = 'Új kulcs pár létrehozása';
+$labels['importkeys'] = 'Kulcsok importálása';
+$labels['exportkeys'] = 'Kulcs(ok) exportálása';
+$labels['keyactions'] = 'Kulcs műveletek';
+$labels['keyremove'] = 'Eltávolítás';
+$labels['keydisable'] = 'Tilt';
+$labels['keyrevoke'] = 'Visszavon';
+$labels['keysend'] = 'Kűld el a nyilvános kulcsot az üzenetben';
+$labels['keychpass'] = 'Jelszó módosítás';
+$labels['newkeyident'] = 'Azonosító:';
+$labels['newkeypass'] = 'Jelszó:';
+$labels['newkeypassconfirm'] = 'Jelszó megerősítése';
+$labels['newkeysize'] = 'Kulcs méret:';
+$labels['key2048'] = '2048 bit - alapértelemzett';
+$labels['key4096'] = '4096 bit - biztonságosabb';
+$labels['keygenerating'] = 'Kulcsok generálása…';
+$labels['encryptionoptions'] = 'Titkosítási beállítások...';
+$labels['encryptmsg'] = 'Titkosítsa ezt az üzenetet';
+$labels['signmsg'] = 'Ennek az üzenetnek  a digtális aláírása';
+$labels['sendunencrypted'] = 'Küldés titkosítatlanul';
+$labels['enterkeypasstitle'] = 'Ãrd be a jelmondatot';
+$labels['enterkeypass'] = 'Jelmondat(passphrase) szükséges a titkos kulcs ($keyid)  felhasznlóhoz ($user) feloldásához. ';
+$labels['arialabelkeyexportoptions'] = 'Kulcsok exportálásához opciók';
+$labels['attachpubkeymsg'] = 'A nyilvános kulcsom csatolása';
+$labels['keyexportprompt'] = 'A mentett OpenPGP kulcsoknál legyenek-e tárolva a titkos kulcsok is?';
+$labels['onlypubkeys'] = 'Csak a nyilvános kulcsok exportálása';
+$labels['withprivkeys'] = 'Titkos kucsok exportálása';
+$labels['findkey'] = 'Keresés a kulcs szerver(ek)en';
+$labels['keyimportlabel'] = 'Importálás fájlból';
+$labels['keyimportsearchlabel'] = 'Keresés a kulcs szerver(ek)en';
+$messages['sigvalid'] = 'A $sender feladó aláírása ellenőrízve.';
+$messages['sigvalidpartial'] = 'A $sender feladó aláírása ellenőrízve, de részei az üzenetnek nem voltak aláírva.';
+$messages['siginvalid'] = 'Érvénytelen aláírás  a következő feladótól: $sender';
+$messages['sigunverified'] = 'Nem ellenörzött aláírás. A tanúsítvány nem ellenőrzött. Tanusítvány ID: $keyid.';
+$messages['signokey'] = 'Nem ellenörzött aláírás. Nyilvános kulcs nem található. Kulcs ID: $keyid.';
+$messages['sigerror'] = 'Nem ellenörzött aláírás. Belső hiba.';
+$messages['decryptok'] = 'Üzenet ki-tikosítva.';
+$messages['decrypterror'] = 'Visszafejtés sikertelen.';
+$messages['decryptnokey'] = 'Visszafejtés sikertelen. Nyilvános nem található. Kulcs ID: $keyid.';
+$messages['decryptbadpass'] = 'Visszafejtés sikertelen. Hibás jelszó.';
+$messages['decryptnopass'] = 'Visszafejtés sikertelen. A kulcshoz jelszó kell.';
+$messages['decryptpartial'] = 'Visszafejtés sikeres, de néhány része az üzenetnek nem volt titkosítva.';
+$messages['signerror'] = 'Aláírás sikertelen.';
+$messages['signnokey'] = 'Aláírás sikertelen. Nyilvános kulcs nem található.';
+$messages['signbadpass'] = 'Aláírás sikertelen. Hibás jelszó.';
+$messages['signnopass'] = 'Aláírás sikertelen. A kulcshoz jelszó kell.';
+$messages['encrypterror'] = 'Titkosítás sikertelen.';
+$messages['encryptnokey'] = 'Titkosítás sikertelen. Nyilvás kulcs nem található a következőhöz: $email.';
+$messages['nokeysfound'] = 'Nem  találhatóak kulcsok';
+$messages['keynotfound'] = 'A kulcs nem található!';
+$messages['keyopenerror'] = 'A kulcs információk lekérésés nem lehetséges. Belső hiba.';
+$messages['keylisterror'] = 'A kulcsok listázása nem sikerült. Belső hiba.';
+$messages['keysimportfailed'] = 'A kulcs(ok) importálása sikertlelen. Belső hiba.';
+$messages['keysimportsuccess'] = 'A kulcs(ok) importálása sikeres. Importálva: $new, változatlan: $old.';
+$messages['keyremoving'] = 'Kulcs(ok) eltávolítása...';
+$messages['keyremoveconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott kulcso(ka)t?';
+$messages['keyremovesuccess'] = 'A kulcs(ok) sikeresen törölve';
+$messages['keyremoveerror'] = 'Nem sikerült a kiválasztott kulcso(ka)t törölni.';
+$messages['keyimporttext'] = 'Importálhatod a privát és nyilvános kulcsodat vagy a visszavonási aláírásokatr ASCII-Armor formátumban.';
+$messages['keyimportsearchtext'] = 'A publikus kulcsokat keresheted az azonsító, a felhasználó név vagy a email cím alapján, majd közvetlenül beimportálhatod.';
+$messages['formerror'] = 'Tőltsd ki az ürlapot. Minden mező kitöltése kötelező!';
+$messages['passwordsdiffer'] = 'A jelszavak nem egyeznek!';
+$messages['keygenerateerror'] = 'Nem sikerült a kulcs-pár létrehozása';
+$messages['keygeneratesuccess'] = 'A kulcs-pár létrejött és sikeresen beimportálódott.';
+$messages['keygennosupport'] = 'A böngésződ nem támogatja a titkosítást. A kulcs-pár nem hozható létre!';
+$messages['noidentselected'] = 'Ki kell választanod legalább egy identitást a kulcshoz!';
+$messages['nonameident'] = 'Egy identitásnak kötelező felhasználó nevet beállítani!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Cryptographia';
+$labels['enigmacerts'] = 'Certificatos S/MIME';
+$labels['enigmakeys'] = 'Claves PGP';
+$labels['keysfromto'] = 'Claves $from a $to de $count';
+$labels['keyname'] = 'Nomine';
+$labels['keyid'] = 'ID de clave';
+$labels['keyuserid'] = 'ID de usator';
+$labels['keytype'] = 'Typo de clave';
+$labels['fingerprint'] = 'Impression digital';
+$labels['subkeys'] = 'Subclaves';
+$labels['basicinfo'] = 'Information basic';
+$labels['userids'] = 'Usatores additional';
+$labels['typepublickey'] = 'clave public';
+$labels['typekeypair'] = 'par de claves';
+$labels['keyattfound'] = 'Iste message contine clave(s) PGP attachate.';
+$labels['keyattimport'] = 'Importar clave(s)';
+$labels['typesign'] = 'Signar';
+$labels['typeencrypt'] = 'Cryptar';
+$labels['typecert'] = 'Certificar';
+$labels['typeauth'] = 'Authentication';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algorithmo';
+$labels['subkeycreated'] = 'Create';
+$labels['subkeyexpires'] = 'Expira';
+$labels['subkeyusage'] = 'Usage';
+$labels['expiresnever'] = 'nunquam';
+$labels['unknown'] = 'incognite';
+$labels['uservalid'] = 'Valide';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valide';
+$labels['supportencryption'] = 'Activar le cryptation e signatura de messages';
+$labels['supportsignatures'] = 'Activar le verification de signaturas de messages';
+$labels['supportdecryption'] = 'Activar le decryptation de messages';
+$labels['signdefault'] = 'Signar tote le messages per option predefinite';
+$labels['encryptdefault'] = 'Cryptar tote le messages per option predefinite';
+$labels['attachpubkeydefault'] = 'Attachar mi clave PGP public per option predefinite';
+$labels['passwordtime'] = 'Memorar le contrasignos de claves private durante';
+$labels['nminutes'] = '$m minuta(s)';
+$labels['wholesession'] = 'tote le session';
+$labels['createkeys'] = 'Crear un nove par de claves';
+$labels['importkeys'] = 'Importar clave(s)';
+$labels['exportkeys'] = 'Exportar clave(s)';
+$labels['keyactions'] = 'Actiones de clave...';
+$labels['keyremove'] = 'Remover';
+$labels['keydisable'] = 'Disactivar';
+$labels['keyrevoke'] = 'Revocar';
+$labels['keysend'] = 'Inviar le clave pubic in un message';
+$labels['keychpass'] = 'Cambiar contrasigno';
+$labels['newkeyident'] = 'Identitate:';
+$labels['newkeypass'] = 'Contrasigno:';
+$labels['newkeypassconfirm'] = 'Confirmar contrasigno:';
+$labels['newkeysize'] = 'Dimension del clave:';
+$labels['key2048'] = '2048 bits - predefinite';
+$labels['key4096'] = '4096 bits - plus secur';
+$labels['keygenerating'] = 'Genera claves...';
+$labels['encryptionoptions'] = 'Optiones de cryptation...';
+$labels['encryptmsg'] = 'Cryptar iste message';
+$labels['signmsg'] = 'Signar digitalmente iste message';
+$labels['sendunencrypted'] = 'Inviar sin cryptation';
+$labels['enterkeypasstitle'] = 'Entra le contrasigno del clave';
+$labels['enterkeypass'] = 'Un contrasigno es necessari pro disblocar le clave secrete ($keyid) pro le usator: $user.';
+$labels['arialabelkeyexportoptions'] = 'Optiones de exportation de claves';
+$labels['attachpubkeymsg'] = 'Attachar mi clave public';
+$labels['keyexportprompt'] = 'Includer le claves secrete in le file de claves OpenPGP a salveguardar?';
+$labels['onlypubkeys'] = 'Exportar claves public solmente';
+$labels['withprivkeys'] = 'Exportar claves secrete';
+$labels['findkey'] = 'Cercar in servitor(es) de claves';
+$labels['keyimportlabel'] = 'Importar ab file';
+$labels['keyimportsearchlabel'] = 'Cercar in servitor(es) de claves';
+$messages['sigvalid'] = 'Signatura de $sender verificate.';
+$messages['sigvalidpartial'] = 'Signatura de $sender verificate, ma un parte del texto non ha essite signate.';
+$messages['siginvalid'] = 'Signatura de $sender invalide.';
+$messages['sigunverified'] = 'Signatura non verificate. Certificato non verificate. ID del certificato: $keyid.';
+$messages['signokey'] = 'Signatura non verificate. Clave public non trovate. ID del clave: $keyid.';
+$messages['sigerror'] = 'Signatura non verificate. Error interne.';
+$messages['decryptok'] = 'Message decryptate.';
+$messages['decrypterror'] = 'Decryptation fallite.';
+$messages['decryptnokey'] = 'Decryptation fallite. Clave private non trovate. ID del clave: $keyid.';
+$messages['decryptbadpass'] = 'Decryptation fallite. Contrasigno non valide.';
+$messages['decryptnopass'] = 'Decryptation fallite. Contrasigno del clave requirite.';
+$messages['decryptpartial'] = 'Le message ha essite decryptate, ma un parte del corpore non esseva cryptate.';
+$messages['signerror'] = 'Signatura fallite.';
+$messages['signnokey'] = 'Signatura fallite. Clave private non trovate.';
+$messages['signbadpass'] = 'Signatura fallite. Contrasigno non valide.';
+$messages['signnopass'] = 'Signatura fallite. Contrasigno del clave requirite.';
+$messages['encrypterror'] = 'Cryptation fallite.';
+$messages['encryptnokey'] = 'Cryptation fallite. Clave public non trovate pro $email.';
+$messages['nokeysfound'] = 'Nulle clave trovate';
+$messages['keynotfound'] = 'Clave non trovate!';
+$messages['keyopenerror'] = 'Incapace de obtener information del clave! Error interne.';
+$messages['keylisterror'] = 'Incapace de listar claves! Error interne.';
+$messages['keysimportfailed'] = 'Incapace de importar clave(s)! Error interne.';
+$messages['keysimportsuccess'] = 'Importation de clave(s) succedite. Importate: $new, non cambiate: $old.';
+$messages['keyremoving'] = 'A remover clave(s)...';
+$messages['keyremoveconfirm'] = 'Es vos secur de voler deler le clave(s) seligite?';
+$messages['keyremovesuccess'] = 'Deletion del clave(s) succedite';
+$messages['keyremoveerror'] = 'Incapace de deler le clave(s) seligite.';
+$messages['keyimporttext'] = 'Es possibile importar clave(s) private e public o signaturas de revocation in formato "ASCII Armor".';
+$messages['keyimportsearchtext'] = 'Es possibile cercar claves public per identificator, nomine de usator o adresse de e-mail e postea importar los directemente.';
+$messages['formerror'] = 'Per favor, completa le formularios. Tote le campos es obligatori!';
+$messages['passwordsdiffer'] = 'Le contrasignos non corresponde!';
+$messages['keygenerateerror'] = 'Generation de par de claves fallite';
+$messages['keygeneratesuccess'] = 'Un par de claves ha essite generate e importate con successo.';
+$messages['keygennosupport'] = 'Vostre navigator del web non supporta le cryptographia. Incapace de generar un par de claves!';
+$messages['noidentselected'] = 'Es necessari seliger al minus un identitate pro le clave!';
+$messages['nonameident'] = 'Le identitate debe includer un nomine de usator!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Enkripsi';
+$labels['enigmacerts'] = 'Sertifikat S/MIME';
+$labels['enigmakeys'] = 'Kunci PGP';
+$labels['keysfromto'] = 'Kunci $from sampai $to dari $count';
+$labels['keyname'] = 'Nama';
+$labels['keyid'] = 'ID Kunci';
+$labels['keyuserid'] = 'ID Pengguna';
+$labels['keytype'] = 'Tipe kunci';
+$labels['fingerprint'] = 'Sidik jari';
+$labels['subkeys'] = 'Subkunci';
+$labels['basicinfo'] = 'Informasi dasar';
+$labels['userids'] = 'Pengguna Tambahan';
+$labels['typepublickey'] = 'kunci publik';
+$labels['typekeypair'] = 'kunci pasangan';
+$labels['keyattfound'] = 'Pesan ini memuat kunci PGP yang dilampirkan.';
+$labels['keyattimport'] = 'Impor kunci';
+$labels['typesign'] = 'Tandatangani';
+$labels['typeencrypt'] = 'Enkripsi';
+$labels['typecert'] = 'Sertifikasikan';
+$labels['typeauth'] = 'Otentifikasi';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritma';
+$labels['subkeycreated'] = 'Dibuat';
+$labels['subkeyexpires'] = 'Kedaluarsa';
+$labels['subkeyusage'] = 'Penggunaan';
+$labels['expiresnever'] = 'tidak pernah';
+$labels['unknown'] = 'tak diketahui';
+$labels['uservalid'] = 'Valid';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valid';
+$labels['supportencryption'] = 'Fungsikan enkripsi dan penandatanganan pesan';
+$labels['supportsignatures'] = 'Fungsikan verifikasi tanda tangan pesan';
+$labels['supportdecryption'] = 'Fungsikan dekripsi pesan';
+$labels['signdefault'] = 'Tandatangani semua pesan secara baku';
+$labels['encryptdefault'] = 'Enkripsikan semua pesan secara baku';
+$labels['attachpubkeydefault'] = 'Lampirkan kunci PGP publik saya secara baku';
+$labels['passwordtime'] = 'Simpan kata sandi kunci rahasia selama';
+$labels['nminutes'] = '$m menit';
+$labels['wholesession'] = 'seluruh sesi';
+$labels['createkeys'] = 'Buat pasangan kunci baru';
+$labels['importkeys'] = 'Impor kunci';
+$labels['exportkeys'] = 'Ekspor kunci';
+$labels['keyactions'] = 'Aksi kunci...';
+$labels['keyremove'] = 'Hapus';
+$labels['keydisable'] = 'Nonaktifkan';
+$labels['keyrevoke'] = 'Cabut';
+$labels['keysend'] = 'Kirim kunci publik dalam pesan';
+$labels['keychpass'] = 'Ubah kata sandi';
+$labels['newkeyident'] = 'Identitas:';
+$labels['newkeypass'] = 'Kata sandi:';
+$labels['newkeypassconfirm'] = 'Konfirmasi kata sandi:';
+$labels['newkeysize'] = 'Ukuran kunci:';
+$labels['key2048'] = '2048 bit - baku';
+$labels['key4096'] = '4096 bit - lebih aman';
+$labels['keygenerating'] = 'Membuat kunci...';
+$labels['encryptionoptions'] = 'Opsi enkripsi...';
+$labels['encryptmsg'] = 'Enkripsikan pesan ini';
+$labels['signmsg'] = 'Tandatantani pesan ini';
+$labels['enterkeypasstitle'] = 'Masukkan frasa sandi kunci';
+$labels['enterkeypass'] = 'Frasa sandi diperlukan untuk membuka kunci rahasia ($keyid) untuk pengguna: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci';
+$labels['attachpubkeymsg'] = 'Lampirkan kunci publik saya';
+$labels['keyexportprompt'] = 'Apakah Anda ingin menyertakan kunci rahasia dalam berkas kunci OpenPGP yang disimpan?';
+$labels['onlypubkeys'] = 'Ekspor Kunci Publik Saja';
+$labels['withprivkeys'] = 'Ekspor Kunci Rahasia';
+$labels['findkey'] = 'Cari pada server kunci';
+$labels['keyimportlabel'] = 'Impor dari berkas';
+$labels['keyimportsearchlabel'] = 'Cari pada server kunci';
+$messages['sigvalid'] = 'Tanda tangan terverifikasi dari $sender.';
+$messages['sigvalidpartial'] = 'Tanda tangan terverifikasi dari $sender, tapi sebagian pesan tidak ditandatangani.';
+$messages['siginvalid'] = 'Tanda tangan tak valid dari $sender.';
+$messages['sigunverified'] = 'Tanda tangan tak terverifikasi. Sertifikat tak terverifikasi. ID sertifikat: $keyid.';
+$messages['signokey'] = 'Tanda tangan tak terverifikasi. Kunci publik tak ditemukan. ID kunci: $keyid.';
+$messages['sigerror'] = 'Tanda tangan tak terverifikasi. Kesalahan internal.';
+$messages['decryptok'] = 'Pesan didekripsi.';
+$messages['decrypterror'] = 'Dekripsi gagal.';
+$messages['decryptnokey'] = 'Dekripsi gagal. Kunci privat tak ditemukan. ID kunci: $keyid.';
+$messages['decryptbadpass'] = 'Dekripsi gagal. Kata sandi tidak valid.';
+$messages['decryptnopass'] = 'Dekripsi gagal. Kata sandi kunci diperlukan.';
+$messages['decryptpartial'] = 'Pesan didekripsi, tapi sebagian isi tidak dienkripsi.';
+$messages['signerror'] = 'Penandatanganan gagal.';
+$messages['signnokey'] = 'Penandatanganan gagal. Kunci privat tak ditemukan.';
+$messages['signbadpass'] = 'Penandatanganan gagal. Kata sandi tidak valid.';
+$messages['signnopass'] = 'Penandatanganan gagal. Kata sandi kunci diperlukan.';
+$messages['encrypterror'] = 'Enkripsi gagal.';
+$messages['encryptnokey'] = 'Enkripsi gagal. Kunci publik tak ditemukan untuk $email.';
+$messages['nokeysfound'] = 'Tidak ada kunci yang ditemukan';
+$messages['keynotfound'] = 'Kunci tidak ditemukan!';
+$messages['keyopenerror'] = 'Tidak bisa memperoleh informasi kunci! Kesalahan internal.';
+$messages['keylisterror'] = 'Tidak bisa membuat daftar kunci! Kesalahan internal.';
+$messages['keysimportfailed'] = 'Tidak bisa mengimpor kunci! Kesalahan internal.';
+$messages['keysimportsuccess'] = 'Kunci sukses diimpor. Diimpor: $new, tidak berubah: $old.';
+$messages['keyremoving'] = 'Menghapus kunci...';
+$messages['keyremoveconfirm'] = 'Anda yakin hendak menghapus kunci yang dipilih?';
+$messages['keyremovesuccess'] = 'Kunci sukses dihapus';
+$messages['keyremoveerror'] = 'Tidak bisa menghapus kunci yang dipilih.';
+$messages['keyimporttext'] = 'Anda bisa mengimpor kunci privat dan publik atau tanda tangan pencabutan dalam format ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Anda dapat mencari kunci publik berdasarkan identifier kunci, nama pengguna, atau alamat surel, lalu secara langsung mengimpor mereka.';
+$messages['formerror'] = 'Harap isi formulir. Semua ruas diperlukan!';
+$messages['passwordsdiffer'] = 'Kata sandi tidak cocok!';
+$messages['keygenerateerror'] = 'Gagal membuat suatu pasangan kunci';
+$messages['keygeneratesuccess'] = 'Suatu pasangan kunci dibuat dan sukses diimpor.';
+$messages['keygennosupport'] = 'Peramban web Anda tidak mendukung kriptografi. Tidak bisa membuat suatu pasangan kunci!';
+$messages['noidentselected'] = 'Anda mesti memilih paling tidak satu identitas untuk kunci!';
+$messages['nonameident'] = 'Identitas mesti mengandung nama pengguna!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Dulritun';
+$labels['enigmakeys'] = 'PGP-lyklar';
+$labels['keyname'] = 'Heiti';
+$labels['keyid'] = 'Auðkenni lykils';
+$labels['typeencrypt'] = 'Dulrita';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Criptare';
+$labels['enigmacerts'] = 'Certificati S/MIME';
+$labels['enigmakeys'] = 'Chiavi PGP';
+$labels['keysfromto'] = 'Chiavi da $from a $to di $count';
+$labels['keyname'] = 'Nome';
+$labels['keyid'] = 'ID della chiave';
+$labels['keyuserid'] = 'ID utente';
+$labels['keytype'] = 'Tipo chiave';
+$labels['fingerprint'] = 'Fingerprint';
+$labels['subkeys'] = 'Sottochiavi';
+$labels['basicinfo'] = 'Informazioni base';
+$labels['userids'] = 'Utenti aggiuntivi';
+$labels['typepublickey'] = 'chiave pubblica';
+$labels['keyattfound'] = 'Questo messaggio contiene allegate Chiavi PGP.';
+$labels['keyattimport'] = 'Importa Chiave(i)';
+$labels['typesign'] = 'Firma';
+$labels['typeencrypt'] = 'Cripta';
+$labels['typecert'] = 'Certifica';
+$labels['typeauth'] = 'Autenticazione';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmo';
+$labels['subkeycreated'] = 'Creato';
+$labels['subkeyexpires'] = 'Scadenza';
+$labels['subkeyusage'] = 'Utilizzo';
+$labels['expiresnever'] = 'mai';
+$labels['unknown'] = 'sconosciuto';
+$labels['uservalid'] = 'Valido';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valido';
+$labels['supportencryption'] = 'Abilita cifratura firma del messaggio';
+$labels['supportsignatures'] = 'Abilita la verifica delle firme dei messaggi';
+$labels['supportdecryption'] = 'Abilita da decodifica del messaggio';
+$labels['signdefault'] = 'Firma tutti i messaggi di default';
+$labels['encryptdefault'] = 'Crypta tutti i messaggi di default';
+$labels['attachpubkeydefault'] = 'Allega la mia chiave pubblica PGP di default';
+$labels['nminutes'] = '$m minuti';
+$labels['createkeys'] = 'Crea una nuova coppia di chiavi';
+$labels['importkeys'] = 'Importa chiave(i)';
+$labels['exportkeys'] = 'Esporta Chiave(i)';
+$labels['keyremove'] = 'Rimuovi';
+$labels['keydisable'] = 'Disabilita';
+$labels['keyrevoke'] = 'Revoca';
+$labels['keychpass'] = 'Cambia password';
+$labels['newkeyident'] = 'Identità:';
+$labels['newkeypass'] = 'Password:';
+$labels['newkeypassconfirm'] = 'Conferma password:';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'æš—å·åŒ–';
+$labels['enigmacerts'] = 'S/MIME証明書';
+$labels['enigmakeys'] = 'PGPã®ã‚­ãƒ¼';
+$labels['keysfromto'] = '$count ã® $from ã‹ã‚‰ $to ã¸ã®ã‚­ãƒ¼';
+$labels['keyname'] = 'åå‰';
+$labels['keyid'] = 'キーID';
+$labels['keyuserid'] = 'ユーザーID';
+$labels['keytype'] = 'キーã®ç¨®é¡ž';
+$labels['fingerprint'] = 'フィンガープリント';
+$labels['subkeys'] = '副キー';
+$labels['basicinfo'] = '基本情報';
+$labels['userids'] = '追加ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼';
+$labels['typepublickey'] = '公開éµ';
+$labels['typekeypair'] = 'éµãƒšã‚¢';
+$labels['keyattfound'] = 'ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯åŒå°ã—ãŸPGPã®ã‚­ãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã™ã€‚';
+$labels['keyattimport'] = 'キーをインãƒãƒ¼ãƒˆ';
+$labels['typesign'] = 'ç½²å';
+$labels['typeencrypt'] = 'æš—å·åŒ–';
+$labels['typecert'] = '証明書';
+$labels['typeauth'] = 'èªè¨¼';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'アルゴリズム';
+$labels['subkeycreated'] = '作æˆæ—¥æ™‚';
+$labels['subkeyexpires'] = '期é™åˆ‡ã‚Œ';
+$labels['subkeyusage'] = '使用法';
+$labels['expiresnever'] = 'ã—ãªã„';
+$labels['unknown'] = 'ä¸æ˜Ž';
+$labels['uservalid'] = '有効';
+$labels['userid'] = 'ID';
+$labels['valid'] = '有効';
+$labels['supportencryption'] = 'メッセージã®æš—å·åŒ–ã¨ç½²å';
+$labels['supportsignatures'] = 'メッセージã®ç½²åを検証';
+$labels['supportdecryption'] = 'メッセージã®å¾©å·';
+$labels['signdefault'] = 'ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’åˆæœŸè¨­å®šã§ç½²å';
+$labels['encryptdefault'] = 'ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’åˆæœŸè¨­å®šã§æš—å·åŒ–';
+$labels['attachpubkeydefault'] = 'åˆæœŸè¨­å®šã§è‡ªåˆ†ã®å…¬é–‹éµã‚’添付';
+$labels['passwordtime'] = 'プライベートキーã®ãƒ‘スワードを以下ã®é–“ä¿æŒ: ';
+$labels['nminutes'] = '$m 分';
+$labels['wholesession'] = 'セッションã®é–“中';
+$labels['createkeys'] = 'æ–°ã—ã„éµãƒšã‚¢ã‚’作æˆ';
+$labels['importkeys'] = 'キーをインãƒãƒ¼ãƒˆ';
+$labels['exportkeys'] = 'キーをエクスãƒãƒ¼ãƒˆ';
+$labels['keyactions'] = 'キーã®æ“作...';
+$labels['keyremove'] = '削除';
+$labels['keydisable'] = '無効化';
+$labels['keyrevoke'] = '廃止';
+$labels['keysend'] = 'メッセージ中ã«å…¬é–‹éµã‚’é€ä¿¡';
+$labels['keychpass'] = 'パスワードを変更';
+$labels['newkeyident'] = '識別情報:';
+$labels['newkeypass'] = 'パスワード:';
+$labels['newkeypassconfirm'] = 'パスワードã®ç¢ºèª:';
+$labels['newkeysize'] = 'éµã®å¤§ãã•:';
+$labels['key2048'] = '2048ビット(åˆæœŸè¨­å®š)';
+$labels['key4096'] = '4096ビット(より安全)';
+$labels['keygenerating'] = 'キーを精製中...';
+$labels['encryptionoptions'] = 'æš—å·ã®ã‚ªãƒ—ション...';
+$labels['encryptmsg'] = 'ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æš—å·åŒ–';
+$labels['signmsg'] = 'ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«é›»å­ç½²å';
+$labels['sendunencrypted'] = 'æš—å·åŒ–ã—ãªã„ã§é€ä¿¡';
+$labels['enterkeypasstitle'] = 'キーã®ãƒ‘スフレーズを入力';
+$labels['enterkeypass'] = 'ユーザー: $userã®ç§˜å¯†éµ($keyid)ã®è§£é™¤ã«ãƒ‘スフレーズãŒå¿…è¦ã§ã™ã€‚';
+$labels['arialabelkeyexportoptions'] = 'キーã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション';
+$labels['attachpubkeymsg'] = '公開éµã‚’添付';
+$labels['keyexportprompt'] = 'ä¿å­˜ã—ãŸOpenPGPã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã«ç§˜å¯†éµã‚‚å«ã‚ã¾ã™ã‹?';
+$labels['onlypubkeys'] = '公開éµã ã‘エクスãƒãƒ¼ãƒˆ';
+$labels['withprivkeys'] = '秘密éµã‚’エクスãƒãƒ¼ãƒˆ';
+$labels['findkey'] = 'キーサーãƒãƒ¼ã§æ¤œç´¢';
+$labels['keyimportlabel'] = 'ファイルã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ';
+$labels['keyimportsearchlabel'] = 'キーサーãƒãƒ¼ã§æ¤œç´¢';
+$messages['sigvalid'] = '$senderã‹ã‚‰ã®ç½²åを検証ã—ã¾ã—ãŸã€‚';
+$messages['sigvalidpartial'] = '$senderã‹ã‚‰ã®ç½²åを検証ã—ã¾ã—ãŸãŒã€æœ¬æ–‡ã®ä¸€éƒ¨ã¯ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。';
+$messages['siginvalid'] = '$senderã‹ã‚‰ã®ç½²åã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“。';
+$messages['sigunverified'] = 'ç½²åを検証ã§ãã¾ã›ã‚“。証明書を検証ã§ãã¾ã›ã‚“。証明書ID: $keyid';
+$messages['signokey'] = 'ç½²åを検証ã§ãã¾ã›ã‚“。次ã®å…¬é–‹éµãŒã‚ã‚Šã¾ã›ã‚“: $keyid';
+$messages['sigerror'] = 'ç½²åを検証ã§ãã¾ã›ã‚“。内部エラーã§ã™ã€‚';
+$messages['decryptok'] = 'メッセージを復å·ã—ã¾ã—ãŸã€‚';
+$messages['decrypterror'] = '復å·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['decryptnokey'] = '復å·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚次ã®ã‚­ãƒ¼IDã®ç§˜å¯†éµãŒã‚ã‚Šã¾ã›ã‚“: $keyid';
+$messages['decryptbadpass'] = '復å·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚パスワードãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。';
+$messages['decryptnopass'] = '復å·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚キーã®ãƒ‘スワードãŒå¿…è¦ã§ã™ã€‚';
+$messages['decryptpartial'] = 'メッセージを復å·ã—ã¾ã—ãŸã€‚ã—ã‹ã—ã€æœ¬æ–‡ã®ä¸€éƒ¨ã¯æš—å·åŒ–ã—ã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['signerror'] = 'ç½²åã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['signnokey'] = 'ç½²åã§ãã¾ã›ã‚“ã§ã—ãŸã€‚秘密éµãŒã‚ã‚Šã¾ã›ã‚“。';
+$messages['signbadpass'] = 'サインインã§ãã¾ã›ã‚“ã§ã—ãŸã€‚パスワードãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。';
+$messages['signnopass'] = 'ç½²åã§ãã¾ã›ã‚“ã§ã—ãŸã€‚キーã®ãƒ‘スワードãŒå¿…è¦ã§ã™ã€‚';
+$messages['encrypterror'] = 'æš—å·åŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['encryptnokey'] = 'æš—å·åŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚$emailã¸ã®å…¬é–‹éµãŒã‚ã‚Šã¾ã›ã‚“。';
+$messages['nokeysfound'] = 'キーãŒã‚ã‚Šã¾ã›ã‚“。';
+$messages['keynotfound'] = 'キーãŒã‚ã‚Šã¾ã›ã‚“!';
+$messages['keyopenerror'] = 'キーã®æƒ…報をå–å¾—ã§ãã¾ã›ã‚“!  内部エラーã§ã™ã€‚';
+$messages['keylisterror'] = 'キーã®ä¸€è¦§ã‚’ã§ãã¾ã›ã‚“!  内部エラーã§ã™ã€‚';
+$messages['keysimportfailed'] = 'キーをインãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“!  内部エラーã§ã™ã€‚';
+$messages['keysimportsuccess'] = 'キーをインãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚$new個を新è¦ã«ã€$old個ã¯å¤‰æ›´ã—ã¦ã„ã¾ã›ã‚“。';
+$messages['keyremoving'] = 'キーを削除中...';
+$messages['keyremoveconfirm'] = '本当ã«!  秘密éµã‚’削除ã—ã¾ã™ã‹?';
+$messages['keyremovesuccess'] = 'éµã‚’削除ã—ã¾ã—ãŸã€‚';
+$messages['keyremoveerror'] = '秘密éµã‚’削除ã§ãã¾ã›ã‚“。';
+$messages['keyimporttext'] = '秘密éµã¨å…¬é–‹éµã€ã¾ãŸã¯å¤±åŠ¹ç½²åã¯ASCII-Armorå½¢å¼ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚';
+$messages['keyimportsearchtext'] = 'キーã®è­˜åˆ¥å­ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã€é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ã„ãšã‚Œã‹ã§å…¬é–‹éµã‚’検索ã—ã¦ã€ç›´æŽ¥ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚';
+$messages['formerror'] = '項目を入力ã—ã¦ãã ã•ã„。ã™ã¹ã¦ã®é …ç›®ã¯å¿…é ˆã§ã™!';
+$messages['passwordsdiffer'] = 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“!';
+$messages['keygenerateerror'] = 'éµãƒšã‚¢ã‚’生æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['keygeneratesuccess'] = 'éµãƒšã‚¢ã‚’生æˆã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚';
+$messages['keygennosupport'] = 'WebブラウザーãŒæš—å·æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。éµãƒšã‚¢ã‚’生æˆã§ãã¾ã›ã‚“!';
+$messages['noidentselected'] = 'キーã®ãŸã‚ã®è­˜åˆ¥æƒ…報を少ãªãã¨ã‚‚1ã¤é¸æŠžã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“!';
+$messages['nonameident'] = '識別情報ã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå¿…é ˆã§ã™!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ka_GE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['keyname'] = 'სáƒáƒ®áƒ”ლი';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = '암호화';
+$labels['enigmacerts'] = 'S/MIME ì¸ì¦ì„œ';
+$labels['enigmakeys'] = 'PGP 키';
+$labels['keysfromto'] = '키 ì´ $countê°œ 중 $from 번째 부터 $to 번째까지';
+$labels['keyname'] = 'ì´ë¦„';
+$labels['keyid'] = '키 ID';
+$labels['keyuserid'] = 'ì‚¬ìš©ìž ID';
+$labels['keytype'] = '키 유형';
+$labels['fingerprint'] = '지문';
+$labels['subkeys'] = '하위 키';
+$labels['basicinfo'] = '기본 정보';
+$labels['userids'] = '추가 사용ìž';
+$labels['typepublickey'] = '공개 키';
+$labels['typekeypair'] = '키 페어';
+$labels['keyattfound'] = 'ì´ ë©”ì‹œì§€ëŠ” ì²¨ë¶€ëœ PGP 키를 í¬í•¨í•©ë‹ˆë‹¤.';
+$labels['keyattimport'] = '키 가져오기';
+$labels['typesign'] = '서명';
+$labels['typeencrypt'] = '암호화';
+$labels['typecert'] = 'ì¸ì¦';
+$labels['typeauth'] = 'ì¸ì¦';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = '알고리즘';
+$labels['subkeycreated'] = 'ìƒì„±ì¼';
+$labels['subkeyexpires'] = '만료ì¼';
+$labels['subkeyusage'] = '사용ë„';
+$labels['expiresnever'] = '하지 ì•ŠìŒ';
+$labels['unknown'] = 'ì•Œ 수 ì—†ìŒ';
+$labels['uservalid'] = '유효';
+$labels['userid'] = 'ID';
+$labels['valid'] = '유효';
+$labels['supportencryption'] = '메시지 암호화 ë° ì„œëª… 추가 활성화';
+$labels['supportsignatures'] = '메시지 서명 ê²€ì¦ í™œì„±í™”';
+$labels['supportdecryption'] = '메시지 복호화 활성화';
+$labels['signdefault'] = '기본ì ìœ¼ë¡œ 모든 ë©”ì‹œì§€ì— ì„œëª… 추가';
+$labels['encryptdefault'] = '기본ì ìœ¼ë¡œ 모든 메시지 암호화';
+$labels['attachpubkeydefault'] = '내 공개 PGP 키를 기본으로 첨부';
+$labels['passwordtime'] = '비공개 키 암호를 ë‹¤ìŒ ê¸°ê°„ë™ì•ˆ 유지';
+$labels['nminutes'] = '$m분';
+$labels['wholesession'] = '전체 세션';
+$labels['createkeys'] = '새로운 키 페어 ìƒì„±';
+$labels['importkeys'] = '키 가져오기';
+$labels['exportkeys'] = '키 내보내기';
+$labels['keyactions'] = '키 ë™ìž‘...';
+$labels['keyremove'] = '제거';
+$labels['keydisable'] = '비활성화';
+$labels['keyrevoke'] = 'í기';
+$labels['keysend'] = 'ë©”ì‹œì§€ì— ê³µê°œ 키 전송';
+$labels['keychpass'] = '암호 변경';
+$labels['newkeyident'] = 'ì‹ ì›:';
+$labels['newkeypass'] = '암호:';
+$labels['newkeypassconfirm'] = '암호 확ì¸:';
+$labels['newkeysize'] = '키 í¬ê¸°:';
+$labels['key2048'] = '2048 비트 - 기본';
+$labels['key4096'] = '4096 비트 - 보안 강화';
+$labels['keygenerating'] = '키를 ìƒì„±í•˜ëŠ” 중...';
+$labels['encryptionoptions'] = '암호화 옵션...';
+$labels['encryptmsg'] = 'ì´ ë©”ì‹œì§€ë¥¼ 암호화';
+$labels['signmsg'] = 'ì´ ë©”ì‹œì§€ì— ë””ì§€í„¸ 서명 추가';
+$labels['enterkeypasstitle'] = '키 암호문 입력';
+$labels['enterkeypass'] = 'ë‹¤ìŒ ì‚¬ìš©ìžì— 대한 비밀 키($keyid)ì˜ ìž ê¸ˆì„ í•´ì œí•˜ë ¤ë©´ ì•”í˜¸ë¬¸ì´ í•„ìš”í•©ë‹ˆë‹¤: $user.';
+$labels['arialabelkeyexportoptions'] = '키 내보내기 옵션';
+$labels['attachpubkeymsg'] = '내 공개 키 첨부';
+$labels['keyexportprompt'] = '암호 키를 ì €ìž¥ëœ OpenPGP 키 파ì¼ì— í¬í•¨í•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$labels['onlypubkeys'] = '공개 키만 내보내기';
+$labels['withprivkeys'] = '비밀 키 내보내기';
+$labels['findkey'] = '키 서버ì—ì„œ 검색';
+$labels['keyimportlabel'] = '파ì¼ì—ì„œ 가져오기';
+$labels['keyimportsearchlabel'] = '키 서버ì—ì„œ 검색';
+$messages['sigvalid'] = '$senderì´(ê°€) 보낸 ê²€ì¦ëœ 서명.';
+$messages['sigvalidpartial'] = '$senderì˜ ê²€ì¦ëœ 서명ì´ê¸´ 하나, 본문 ì¼ë¶€ê°€ 서명ë˜ì§€ 않았습니다.';
+$messages['siginvalid'] = '$senderì´(ê°€) 보낸 ê²€ì¦ë˜ì§€ ì•Šì€ ì„œëª….';
+$messages['sigunverified'] = 'ê²€ì¦ë˜ì§€ ì•Šì€ ì„œëª…. ì¸ì¦ì„œê°€ ê²€ì¦ë˜ì§€ ì•ŠìŒ. ì¸ì¦ì„œ ID: $keyid.';
+$messages['signokey'] = 'ê²€ì¦ë˜ì§€ ì•Šì€ ì„œëª…. 공개 키를 ì°¾ì„ ìˆ˜ 없습니다. 키 ID: $keyid.';
+$messages['sigerror'] = 'ê²€ì¦ë˜ì§€ ì•Šì€ ì„œëª…. 내부 오류.';
+$messages['decryptok'] = '메시지가 복호화ë¨.';
+$messages['decrypterror'] = 'ë³µí˜¸í™”ì— ì‹¤íŒ¨í•¨.';
+$messages['decryptnokey'] = 'ë³µí˜¸í™”ì— ì‹¤íŒ¨í•¨. 비공개 키를 ì°¾ì„ ìˆ˜ ì—†ìŒ. 키 ID: $keyid.';
+$messages['decryptbadpass'] = 'ë³µí˜¸í™”ì— ì‹¤íŒ¨í•¨. ìž˜ëª»ëœ ì•”í˜¸.';
+$messages['decryptnopass'] = 'ë³µí˜¸í™”ì— ì‹¤íŒ¨í•¨. 키 암호가 필요합니다.';
+$messages['decryptpartial'] = '메시지가 복호화ë지만 본문 ì¼ë¶€ê°€ 암호화 ë˜ì§€ 않았습니다.';
+$messages['signerror'] = '서명 ì¶”ê°€ì— ì‹¤íŒ¨í•¨.';
+$messages['signnokey'] = '서명 ì¶”ê°€ì— ì‹¤íŒ¨í•¨. 비공개 키를 ì°¾ì„ ìˆ˜ ì—†ìŒ.';
+$messages['signbadpass'] = 'ì„œëª…ì— ì‹¤íŒ¨í•¨. ìž˜ëª»ëœ ì•”í˜¸.';
+$messages['signnopass'] = '서명 ì¶”ê°€ì— ì‹¤íŒ¨í•¨. 키 암호가 필요합니다.';
+$messages['encrypterror'] = 'ì•”í˜¸í™”ì— ì‹¤íŒ¨í•¨.';
+$messages['encryptnokey'] = 'ì•”í˜¸í™”ì— ì‹¤íŒ¨í•¨. $emailì— ëŒ€í•œ 공개 키를 ì°¾ì„ ìˆ˜ ì—†ìŒ.';
+$messages['nokeysfound'] = '키를 ì°¾ì„ ìˆ˜ ì—†ìŒ';
+$messages['keynotfound'] = '키를 발견하지 못함!';
+$messages['keyopenerror'] = '키 정보를 ì–»ì„ ìˆ˜ ì—†ìŒ! 내부 오류.';
+$messages['keylisterror'] = '키 목ë¡ì„ 표시할 수 ì—†ìŒ! 내부 오류.';
+$messages['keysimportfailed'] = '키를 가져올 수 ì—†ìŒ! 내부 오류.';
+$messages['keysimportsuccess'] = '키를 성공ì ìœ¼ë¡œ 가져옴. 가져옴: $newê°œ, 변경ë˜ì§€ ì•ŠìŒ: $oldê°œ.';
+$messages['keyremoving'] = '키를 제거하는 중...';
+$messages['keyremoveconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ 키를 삭제하시겠습니까?';
+$messages['keyremovesuccess'] = '키가 성공ì ìœ¼ë¡œ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤';
+$messages['keyremoveerror'] = 'ì„ íƒí•œ 키를 삭제하지 못함.';
+$messages['keyimporttext'] = '비공개 ë° ê³µê°œ 키 ë˜ëŠ” í기 ì„œëª…ì„ ASCII-Armor 형ì‹ìœ¼ë¡œ 가져올 수 있습니다.';
+$messages['keyimportsearchtext'] = '키 ì‹ë³„ìž, 사용ìžëª… ë˜ëŠ” ì´ë©”ì¼ ì£¼ì†Œë¡œ 공개 키를 검색하신 후ì—, ì§ì ‘ 가져오실 수 있습니다.';
+$messages['formerror'] = 'ì–‘ì‹ì„ 작성해주세요. 모든 필드가 채워져야 합니다!';
+$messages['passwordsdiffer'] = '암호가 ì¼ì¹˜í•˜ì§€ ì•ŠìŒ!';
+$messages['keygenerateerror'] = '키 페어 ìƒì„±ì„ 실패함';
+$messages['keygeneratesuccess'] = '키 페어가 성공ì ìœ¼ë¡œ ìƒì„±ë˜ì—ˆê³  가져왔습니다.';
+$messages['keygennosupport'] = '웹 브ë¼ìš°ì €ê°€ 암호화를 지ì›í•˜ì§€ 않습니다. 키 페어를 ìƒì„±í•˜ì§€ 못함!';
+$messages['noidentselected'] = 'ì ì–´ë„ í‚¤ì— ëŒ€í•œ 하나 ì´ìƒì˜ ì‹ ì›ì„ ì„ íƒí•˜ì…”야 합니다!';
+$messages['nonameident'] = 'ì‹ ì›ì—는 사용ìžëª…ì´ ì •ì˜ë˜ì–´ì•¼ 합니다!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Å ifravimas';
+$labels['enigmacerts'] = 'S/MIME liudijimai';
+$labels['enigmakeys'] = 'PGP raktai';
+$labels['keysfromto'] = '$from – $to raktai iš $count';
+$labels['keyname'] = 'Vardas';
+$labels['keyid'] = 'Rakto ID';
+$labels['keyuserid'] = 'Naudotojo ID';
+$labels['keytype'] = 'Rakto tipas';
+$labels['fingerprint'] = 'Kontrolinis kodas';
+$labels['subkeys'] = 'PorakÄiai';
+$labels['basicinfo'] = 'PagrindinÄ— informacija';
+$labels['userids'] = 'Papildomi naudotojai';
+$labels['typepublickey'] = 'viešasis raktas';
+$labels['typekeypair'] = 'raktų pora';
+$labels['keyattfound'] = 'Šiame laiške aptiktas PGP raktas (raktai).';
+$labels['keyattimport'] = 'Importuoti raktÄ… (raktus)';
+$labels['typesign'] = 'Pasirašyti';
+$labels['typeencrypt'] = 'Å ifruoti';
+$labels['typecert'] = 'Liudyti';
+$labels['typeauth'] = 'Autentikacija';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmas';
+$labels['subkeycreated'] = 'Sukurtas';
+$labels['subkeyexpires'] = 'Galioja iki';
+$labels['subkeyusage'] = 'Naudotinas';
+$labels['expiresnever'] = 'neterminuotai';
+$labels['unknown'] = 'nežinoma';
+$labels['uservalid'] = 'Galioja';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'galioja';
+$labels['supportencryption'] = 'Įgalinti laiškų šifravimą ir pasirašymą';
+$labels['supportsignatures'] = 'Įgalinti laiškų parašų tikrinimą';
+$labels['supportdecryption'] = 'Įgalinti laiškų iššifravimą';
+$labels['signdefault'] = 'Numatytai pasirašinėti visus laiškus';
+$labels['encryptdefault'] = 'Numatytai šifruoti visus laiškus';
+$labels['attachpubkeydefault'] = 'Visada prisegti mano viešąjį raktą prie laiško.';
+$labels['passwordtime'] = 'Saugoti privaÄiųjų raktų slaptažodžius';
+$labels['nminutes'] = '$m min.';
+$labels['wholesession'] = 'visÄ… seanso laikÄ…';
+$labels['createkeys'] = 'Kurti naują raktų porą';
+$labels['importkeys'] = 'Importuoti raktus';
+$labels['exportkeys'] = 'Eksportuoti raktus';
+$labels['keyactions'] = 'Raktų veiksmai…';
+$labels['keyremove'] = 'Å alinti';
+$labels['keydisable'] = 'IÅ¡jungti';
+$labels['keyrevoke'] = 'Atšaukti';
+$labels['keysend'] = 'Siųsti viešąjį raktą kartu su laišku';
+$labels['keychpass'] = 'Keisti slaptažodį';
+$labels['newkeyident'] = 'TapatybÄ—:';
+$labels['newkeypass'] = 'Slaptažodis:';
+$labels['newkeypassconfirm'] = 'Patvirtinkite slaptažodį:';
+$labels['newkeysize'] = 'Rakto dydis:';
+$labels['key2048'] = '2048 bitai – numatytasis';
+$labels['key4096'] = '4096 bitai – saugesnis';
+$labels['keygenerating'] = 'Raktai generuojami…';
+$labels['encryptionoptions'] = 'Šifravimo parinktys…';
+$labels['encryptmsg'] = 'Šifruoti šį laišką';
+$labels['signmsg'] = 'Pasirašyti šį laišką';
+$labels['sendunencrypted'] = 'Siųsti nešifruotą';
+$labels['enterkeypasstitle'] = 'Įveskite rakto slaptafrazę';
+$labels['enterkeypass'] = 'Naudotojo $user slaptajam raktui ($keyid) atrakinti reikalinga slaptafrazÄ—.';
+$labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys';
+$labels['attachpubkeymsg'] = 'Prisegti mano viešąjį raktą';
+$labels['keyexportprompt'] = 'Ar norite įkelti privaÄiuosius raktus, saugojamus OpenPGP raktų faile?';
+$labels['onlypubkeys'] = 'Eksportuoti tik viešuosius raktus';
+$labels['withprivkeys'] = 'Eksportuoti privaÄiuosius raktus';
+$labels['findkey'] = 'Ieškoti raktų serveryje(-iuose)';
+$labels['keyimportlabel'] = 'Importuoti iš failo';
+$labels['keyimportsearchlabel'] = 'Ieškoti raktų serveryje(-iuose)';
+$messages['sigvalid'] = 'Galiojantis $sender parašas.';
+$messages['sigvalidpartial'] = '$sender parašas patvirtintas, bet už dalį laiško nebuvo pasirašyta.';
+$messages['siginvalid'] = 'Negaliojantis $sender parašas.';
+$messages['sigunverified'] = 'Parašo galiojimas nepatikrintas. Nepatvirtintas liudijimas. Liudijimo ID: $keyid.';
+$messages['signokey'] = 'Parašo galiojimas nepatikrintas. Nerastas viešasis raktas. Rakto ID: $keyid.';
+$messages['sigerror'] = 'Parašo galiojimas nepatikrintas. Įvyko vidinė klaida.';
+$messages['decryptok'] = 'Laiškas iššifruotas.';
+$messages['decrypterror'] = 'IÅ¡Å¡ifruoti nepavyko.';
+$messages['decryptnokey'] = 'IÅ¡Å¡ifruoti nepavyko. Nerastas privatusis raktas. Rakto ID: $keyid.';
+$messages['decryptbadpass'] = 'Iššifravimas nepavyko. Neteisingas slaptažodis.';
+$messages['decryptnopass'] = 'Nepavyko iššifruoti, reikalingas rakto slaptažodis.';
+$messages['decryptpartial'] = 'Laiškas iššifruotas, nors dalis laiško ir nebuvo užšifruota.';
+$messages['signerror'] = 'Pasirašyti nepavyko.';
+$messages['signnokey'] = 'Pasirašyti nepavyko. Nerastas privatusis raktas.';
+$messages['signbadpass'] = 'Pasirašyti nepavyko. Neteisingas slaptažodis.';
+$messages['signnopass'] = 'Nepavyko pasirašyti, reikalingas rakto slaptažodis.';
+$messages['encrypterror'] = 'Užšifruoti nepavyko.';
+$messages['encryptnokey'] = 'Užšifruoti nepavyko. Nerastas viešasis $email raktas.';
+$messages['nokeysfound'] = 'Raktų nerasta';
+$messages['keynotfound'] = 'Raktas nerastas!';
+$messages['keyopenerror'] = 'Nepavyko gauti rakto duomenų! Įvyko vidinė klaida.';
+$messages['keylisterror'] = 'Nepavyko išvardinti raktų! Įvyko vidinė klaida.';
+$messages['keysimportfailed'] = 'Nepavyko importuoti rakto (raktų)! Įvyko vidinė klaida.';
+$messages['keysimportsuccess'] = 'Raktai importuoti sÄ—kmingai. Nauji raktai: $new, nepakitÄ™: $old.';
+$messages['keyremoving'] = 'Raktų šalinimas…';
+$messages['keyremoveconfirm'] = 'Ar tikrai norite pašalinti pažymėtus raktus?';
+$messages['keyremovesuccess'] = 'Raktai sėkmingai pašalinti';
+$messages['keyremoveerror'] = 'Pasirinktų raktų pašalinti nepavyko.';
+$messages['keyimporttext'] = 'Galite importuoti „ASCII-Armor“ formato privaÄiuosius ir vieÅ¡uosius raktus bei atÅ¡aukimo liudijimus.';
+$messages['keyimportsearchtext'] = 'Galite ieškoti viešųjų raktų pagal rakto identifikatorių, vartotojo vardą arba el. pašto adresą ir juos tiesiogiai importuoti.';
+$messages['formerror'] = 'Prašome užpildyti formą. Visi laukai privalomi!';
+$messages['passwordsdiffer'] = 'Slaptažodžiai nesutampa!';
+$messages['keygenerateerror'] = 'Nepavyko sugeneruoti raktų poros.';
+$messages['keygeneratesuccess'] = 'Raktų pora sėkmingai sugeneruota ir importuota.';
+$messages['keygennosupport'] = 'Jūsų naršyklėje kriptografija nepalaikoma. Raktų poros sugeneruoti nepavyko!';
+$messages['noidentselected'] = 'JÅ«s turite raktui pasirinkti bent vienÄ… tapatybÄ™!';
+$messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Šifrēšana';
+$labels['enigmacerts'] = 'S/MIME sertifikÄti';
+$labels['enigmakeys'] = 'PGP atslēgas';
+$labels['keysfromto'] = 'Atslēgas $from līdz $to no $count';
+$labels['keyname'] = 'VÄrds';
+$labels['keyid'] = 'Atslēgas ID';
+$labels['keyuserid'] = 'LietotÄja ID';
+$labels['keytype'] = 'Atslēgas tips';
+$labels['fingerprint'] = 'Pirksta nospiedums';
+$labels['subkeys'] = 'Apakšatslēgas';
+$labels['basicinfo'] = 'PamatinformÄcija';
+$labels['userids'] = 'Papildus lietotÄji';
+$labels['typepublickey'] = 'publiskÄ atslÄ“ga';
+$labels['typekeypair'] = 'atslÄ“gu pÄris';
+$labels['keyattfound'] = 'Šis e-pasts satur pievienotu PGP atslēgu(as);';
+$labels['keyattimport'] = 'Importēt atslēgu(as).';
+$labels['typesign'] = 'Paraksts';
+$labels['typeencrypt'] = 'Šifrēt';
+$labels['typecert'] = 'SertifikÄts';
+$labels['typeauth'] = 'AutentifikÄcija';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritms';
+$labels['subkeycreated'] = 'Izveidots';
+$labels['subkeyexpires'] = 'Termiņš';
+$labels['subkeyusage'] = 'Pielietojums';
+$labels['expiresnever'] = 'nekad';
+$labels['unknown'] = 'neiznÄms';
+$labels['uservalid'] = 'Derīgs';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'derīgs';
+$labels['supportencryption'] = 'Ieslēgt e-pastu šifrēšanu un parakstīšanu';
+$labels['supportsignatures'] = 'IeslÄ“gt e-pastu parakstu pÄrbaudi';
+$labels['supportdecryption'] = 'Ieslēgt e-pastu atšifrēšanu';
+$labels['signdefault'] = 'Pēc noklusējuma parakstīt visus e-pastus';
+$labels['encryptdefault'] = 'Pēc noklusējuma šifrēt visas vēstules';
+$labels['attachpubkeydefault'] = 'Pēc noklusējuma pievienot manu publisko PGP atslēgu';
+$labels['passwordtime'] = 'SaglabÄt privÄto atslÄ“gu paroles';
+$labels['nminutes'] = '$m minūte(s)';
+$labels['wholesession'] = 'visai sessijai';
+$labels['createkeys'] = 'Izveidot jaunu atslÄ“gu pÄri';
+$labels['importkeys'] = 'Importēt atslēgu(as).';
+$labels['exportkeys'] = 'Eksportēt atslēgu(as)';
+$labels['keyactions'] = 'Darbības ar atslēgu ...';
+$labels['keyremove'] = 'Dzēst';
+$labels['keydisable'] = 'Atspējot';
+$labels['keyrevoke'] = 'Atsaukt';
+$labels['keysend'] = 'Ar e-pastu sūtīt arī publisko atslēgu';
+$labels['keychpass'] = 'Mainīt paroli';
+$labels['newkeyident'] = 'IdentitÄte:';
+$labels['newkeypass'] = 'Parole:';
+$labels['newkeypassconfirm'] = 'ApstiprinÄt paroli:';
+$labels['newkeysize'] = 'Atslēgas stiprums:';
+$labels['key2048'] = '2048 biti - pec noklusējuma';
+$labels['key4096'] = '4096 biti - papildus drošība';
+$labels['keygenerating'] = 'Ģenerē atslēgas...';
+$labels['encryptionoptions'] = 'Šifrēšanas iestatījumi...';
+$labels['encryptmsg'] = 'Šifrēt šo e-pastu';
+$labels['signmsg'] = 'DigitÄli parakstÄ«t Å¡o e-pastu';
+$labels['enterkeypasstitle'] = 'Ievadiet atslēgas paroli';
+$labels['enterkeypass'] = 'Lai atbloÄ·Ä“tu lietotÄja $user Å¡ifrÄ“to atslÄ“gu ($keyid), ir nepiecieÅ¡ama parole.';
+$labels['arialabelkeyexportoptions'] = 'Atslēgu eksportēšanas iestatījumi';
+$labels['attachpubkeymsg'] = 'Pievienot manu publisko atslēgu';
+$labels['keyexportprompt'] = 'Vai iekļaut slepenÄs atslÄ“gas saglabÄtajos openPGP atslÄ“gu failos?';
+$labels['onlypubkeys'] = 'EksportÄ“t tikai publiskÄs atslÄ“gas';
+$labels['withprivkeys'] = 'EksportÄ“t slepenÄs atslÄ“gas';
+$labels['findkey'] = 'Meklēt atslēgu serveros.';
+$labels['keyimportlabel'] = 'Importēt no faila';
+$labels['keyimportsearchlabel'] = 'Meklēt atslēgu serveros.';
+$messages['sigvalid'] = 'PÄrbaudÄ«ts $sender paraksts.';
+$messages['sigvalidpartial'] = 'PÄrbaudÄ«ts $sender paraksts, bet daļa no e-pasta nav parakstÄ«ta.';
+$messages['siginvalid'] = 'Nederīgs paraksts no $sender.';
+$messages['sigunverified'] = 'NepÄrbaudÄ«ts paraksts. SertifikÄts nav pÄrbaudÄ«ts. SertifikÄta ID: $keyid.';
+$messages['signokey'] = 'NepÄrbaudÄ«ts paraksts. PubliskÄ atslÄ“ga nav atrasta. AtslÄ“gas ID: $keyid.';
+$messages['sigerror'] = 'NepÄrbaudÄ«ts paraksts. IekÅ¡Ä“jÄ kļūda.';
+$messages['decryptok'] = 'E-pasts atšifrēts.';
+$messages['decrypterror'] = 'AtÅ¡ifrÄ“Å¡ana neizdevÄs.';
+$messages['decryptnokey'] = 'AtÅ¡ifrÄ“Å¡ana neizdevÄs. PrivÄtÄ atslÄ“ga netika atrasta. AtslÄ“gas ID: $keyid.';
+$messages['decryptbadpass'] = 'AtÅ¡ifrÄ“Å¡ana neizdevÄs. Nepareiza parole.';
+$messages['decryptnopass'] = 'AtÅ¡ifrÄ“Å¡ana neizdevÄs. NepiecieÅ¡ama atslÄ“gas parole.';
+$messages['decryptpartial'] = 'E-pasts ir atÅ¡ifrÄ“ts, bet daļa no tÄ nemaz nebija Å¡ifrÄ“ta.';
+$messages['signerror'] = 'SÅ«tÄ«Å¡ana neizdevÄs.';
+$messages['signnokey'] = 'NosÅ«tÄ«t neizdevÄs. Nav atrasta privÄtÄ atslÄ“ga.';
+$messages['signbadpass'] = 'ParakstÄ«Å¡ana neizdevÄs. Nepareiza parole.';
+$messages['signnopass'] = 'NosÅ«tÄ«t neizdevÄs. Ir nepiecieÅ¡ama atslÄ“gas parole.';
+$messages['encrypterror'] = 'Å ifrÄ“Å¡ana neizdevÄs.';
+$messages['encryptnokey'] = 'Å ifrÄ“Å¡ana neizdevÄs. Epastam $email netika atrasta publiskÄ atslÄ“ga.';
+$messages['nokeysfound'] = 'Nav atrasta neviena atslēga';
+$messages['keynotfound'] = 'Atslēga netika atrasta!';
+$messages['keyopenerror'] = 'Nav iespÄ“jams iegÅ«t atslÄ“gas informÄciju! IekÅ¡Ä“jÄ kļūda.';
+$messages['keylisterror'] = 'Nav iespÄ“jams parÄdÄ«t atslÄ“gu sarakstu! IekÅ¡Ä“jÄ kļūda.';
+$messages['keysimportfailed'] = 'Nav iespÄ“jams ieimportÄ“t atslÄ“gu(s)! IekÅ¡Ä“jÄ kļūda.';
+$messages['keysimportsuccess'] = 'Atslēgas ieimportētas veiksmīgi. Ieimportēts: $new, nemainīts: $old.';
+$messages['keyremoving'] = 'Dzēš atslēgu(as)...';
+$messages['keyremoveconfirm'] = 'Vai JÅ«s esat pÄrliecinÄti ka gribat dzÄ“st atzÄ«mÄ“tÄs astlÄ“gas?';
+$messages['keyremovesuccess'] = 'Atslēga(s) nodzēsta veiksmīgi.';
+$messages['keyremoveerror'] = 'AtzÄ«mÄ“to atslÄ“gu(as) neizdevÄs nodzÄ“st.';
+$messages['keyimporttext'] = 'JÅ«s varat importÄ“t privÄtÄs un publiskÄs atslÄ“gas vai anulÄ“Å¡anas parakstus ASCII-Armor formÄtÄ.';
+$messages['keyimportsearchtext'] = 'PubliskÄs atslÄ“gas JÅ«s varat meklÄ“t norÄdot vai nu atslÄ“gas identifikatoru, vai lietotÄjvÄrdu, vai e-pasta adresi - un pÄ“c tam pa tieÅ¡o tÄs importÄ“t.';
+$messages['formerror'] = 'LÅ«dzu aipildiet formu. Visi lauki ir obligÄti!';
+$messages['passwordsdiffer'] = 'Paroles nesakrīt!';
+$messages['keygenerateerror'] = 'NeizdevÄs uzÄ£enerÄ“t atslÄ“gu pÄri.';
+$messages['keygeneratesuccess'] = 'AtslÄ“gu pÄris veiksmÄ«gi uzÄ£enerÄ“ts un ieimportÄ“ts.';
+$messages['keygennosupport'] = 'Nav iespÄ“jams uzÄ£enerÄ“t atslÄ“gu pÄri, jo JÅ«su tÄ«mekļa pÄrlÅ«ks neatbalsta kriptogrÄfijas iespÄ“jas!';
+$messages['noidentselected'] = 'Jums ir jÄizvÄ“las vismaz viens atslÄ“gas identifikators!';
+$messages['nonameident'] = 'IdentitÄtei jÄbÅ«t ar definÄ“tu lietotÄja vÄrdu!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['keyname'] = 'Naam';
+$labels['subkeycreated'] = 'Aangemaakt';
+$labels['keychpass'] = 'Wijzig wachtwoord';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Versleuteling';
+$labels['enigmacerts'] = 'S/MIME-certificaten';
+$labels['enigmakeys'] = 'PGP-sleutels';
+$labels['keysfromto'] = 'Sleutels $from t/m $to van $count';
+$labels['keyname'] = 'Naam';
+$labels['keyid'] = 'Sleutel-ID';
+$labels['keyuserid'] = 'Gebruiker-ID';
+$labels['keytype'] = 'Sleuteltype';
+$labels['fingerprint'] = 'Vingerafdruk';
+$labels['subkeys'] = 'Subsleutels';
+$labels['basicinfo'] = 'Algemene informatie';
+$labels['userids'] = 'Extra gebruikers';
+$labels['typepublickey'] = 'publieke sleutel';
+$labels['typekeypair'] = 'sleutelpaar';
+$labels['keyattfound'] = 'Dit bericht bevat bijgevoegde PGP-sleutel(s).';
+$labels['keyattimport'] = 'Importeer sleutel(s)';
+$labels['typesign'] = 'Onderteken';
+$labels['typeencrypt'] = 'Versleutel';
+$labels['typecert'] = 'Certificeren';
+$labels['typeauth'] = 'Authenticatie';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritme';
+$labels['subkeycreated'] = 'Aangemaakt';
+$labels['subkeyexpires'] = 'Verloopt';
+$labels['subkeyusage'] = 'Gebruik';
+$labels['expiresnever'] = 'nooit';
+$labels['unknown'] = 'onbekend';
+$labels['uservalid'] = 'Geldig';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'geldig';
+$labels['supportencryption'] = 'Berichtversleuteling en -ondertekening inschakelen';
+$labels['supportsignatures'] = 'Verificatie van berichtondertekening inschakelen';
+$labels['supportdecryption'] = 'Berichtontsleuteling inschakelen';
+$labels['signdefault'] = 'Onderteken standaard alle berichten';
+$labels['encryptdefault'] = 'Versleutel standaard alle berichten';
+$labels['attachpubkeydefault'] = 'Voeg mijn publieke PGP-sleutel standaard bij';
+$labels['passwordtime'] = 'Onthoud geheime sleutelwachtwoorden voor';
+$labels['nminutes'] = '$m minuten';
+$labels['wholesession'] = 'de hele sessie';
+$labels['createkeys'] = 'Maak een nieuw sleutelpaar aan';
+$labels['importkeys'] = 'Importeer sleutel(s)';
+$labels['exportkeys'] = 'Exporteer sleutel(s)';
+$labels['keyactions'] = 'Sleutelacties...';
+$labels['keyremove'] = 'Verwijderen';
+$labels['keydisable'] = 'Uitschakelen';
+$labels['keyrevoke'] = 'Intrekken';
+$labels['keysend'] = 'Verstuur publieke sleutel in een bericht';
+$labels['keychpass'] = 'Wijzig wachtwoord';
+$labels['newkeyident'] = 'Identiteit:';
+$labels['newkeypass'] = 'Wachtwoord:';
+$labels['newkeypassconfirm'] = 'Bevestig wachtwoord:';
+$labels['newkeysize'] = 'Sleutelgrootte:';
+$labels['key2048'] = '2048 bits - standaard';
+$labels['key4096'] = '4096 bits - veiliger';
+$labels['keygenerating'] = 'Sleutels genereren...';
+$labels['encryptionoptions'] = 'Versleutelingsopties...';
+$labels['encryptmsg'] = 'Versleutel dit bericht';
+$labels['signmsg'] = 'Onderteken dit bericht digitaal';
+$labels['enterkeypasstitle'] = 'Voer sleutelwachtwoord in';
+$labels['enterkeypass'] = 'Een wachtwoord is vereist om de geheime sleutel ($keyid) te openen voor gebruiker: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opties voor sleutels exporteren';
+$labels['attachpubkeymsg'] = 'Voeg mijn publieke sleutel bij';
+$labels['keyexportprompt'] = 'Wilt u geheime sleutels bewaren in het opgeslagen OpenPGP-sleutelbestand?';
+$labels['onlypubkeys'] = 'Alleen publieke sleutels exporteren';
+$labels['withprivkeys'] = 'Geheime sleutels exporteren';
+$labels['findkey'] = 'Zoek op keyserver(s)';
+$labels['keyimportlabel'] = 'Importeer van bestand';
+$labels['keyimportsearchlabel'] = 'Zoek op keyserver(s)';
+$messages['sigvalid'] = 'Ondertekening van $sender geverifieerd.';
+$messages['sigvalidpartial'] = 'Ondertekening van $sender geverifieerd, maar een deel van de inhoud was niet ondertekend.';
+$messages['siginvalid'] = 'Ongeldige ondertekening van $sender.';
+$messages['sigunverified'] = 'Niet-geverifieerde ondertekening. Certificaat niet geverifieerd. Certificaat-ID: $keyid.';
+$messages['signokey'] = 'Niet-geverifieerde ondertekening. Publieke sleutel niet gevonden. Sleutel-ID: $keyid.';
+$messages['sigerror'] = 'Niet-geverifieerde ondertekening. Interne fout.';
+$messages['decryptok'] = 'Bericht ontsleuteld.';
+$messages['decrypterror'] = 'Ontsleutelen mislukt.';
+$messages['decryptnokey'] = 'Ontsleutelen mislukt. Geheime sleutel niet gevonden. Sleutel-ID: $keyid.';
+$messages['decryptbadpass'] = 'Ontsleutelen mislukt. Verkeerde wachtwoord.';
+$messages['decryptnopass'] = 'Ontsleutelen mislukt. Sleutelwachtwoord vereist.';
+$messages['decryptpartial'] = 'Bericht ontsleuteld, maar een deel van de inhoud was niet versleuteld.';
+$messages['signerror'] = 'Ondertekenen mislukt.';
+$messages['signnokey'] = 'Ondertekenen mislukt. Geheime sleutel niet gevonden.';
+$messages['signbadpass'] = 'Ondertekenen mislukt. Verkeerde sleutel.';
+$messages['signnopass'] = 'Ondertekenen mislukt. Sleutelwachtwoord vereist.';
+$messages['encrypterror'] = 'Versleutelen mislukt.';
+$messages['encryptnokey'] = 'Onsleutelen mislukt. Publieke sleutel niet gevonden voor $email.';
+$messages['nokeysfound'] = 'Geen sleutels gevonden';
+$messages['keynotfound'] = 'Sleutel niet gevonden';
+$messages['keyopenerror'] = 'Sleutelinformatie kan niet worden opgehaald! Interne fout.';
+$messages['keylisterror'] = 'Sleutels kunnen niet worden weergegeven! Interne fout.';
+$messages['keysimportfailed'] = 'Sleutel(s) kunnen niet worden geïmporteerd! Interne fout.';
+$messages['keysimportsuccess'] = 'Sleutel(s) succesvol geïmporteerd. Geïmporteerd: $new, ongewijzigd: $old.';
+$messages['keyremoving'] = 'Sleutel(s) verwijderen...';
+$messages['keyremoveconfirm'] = 'Weet u zeker dat u de geselecteerde sleutel(s) wilt verwijderen?';
+$messages['keyremovesuccess'] = 'Sleutel(s) succesvol verwijderd';
+$messages['keyremoveerror'] = 'Geselecteerde sleutel(s) kunnen niet worden verwijderd.';
+$messages['keyimporttext'] = 'U kunt geheime en publieke sleutel(s) of intrek-ondertekeningen importeren in ASCII-Armor formaat.';
+$messages['keyimportsearchtext'] = 'U kunt naar publieke sleutels zoeken op basis van sleutel identifier, gebruikersnaam of e-mailadres en ze vervolgens direct importeren.';
+$messages['formerror'] = 'Vul alstublieft het formulier in. Alle velden zijn vereist!';
+$messages['passwordsdiffer'] = 'Wachtwoorden komen niet overeen!';
+$messages['keygenerateerror'] = 'Genereren van een sleutelpaar is mislukt';
+$messages['keygeneratesuccess'] = 'Een sleutelpaar is succesvol gegenereerd en geïmporteerd.';
+$messages['keygennosupport'] = 'Uw webbrowser ondersteunt geen cryptografie. Sleutelpaar genereren is mislukt!';
+$messages['noidentselected'] = 'Je dient minimaal een identiteit te selecteren voor de sleutel!';
+$messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Szyfrowanie';
+$labels['enigmacerts'] = 'Certyfikaty S/MIME';
+$labels['enigmakeys'] = 'Klucze PGP';
+$labels['keysfromto'] = 'Klucze od $from do $to z $count';
+$labels['keyname'] = 'Nazwa';
+$labels['keyid'] = 'Id klucza';
+$labels['keyuserid'] = 'Id użytkownika';
+$labels['keytype'] = 'Typ klucza';
+$labels['fingerprint'] = 'Odcisk palca';
+$labels['subkeys'] = 'Podklucze';
+$labels['basicinfo'] = 'Informacje podstawowe';
+$labels['userids'] = 'Dodatkowi użytkownicy';
+$labels['typepublickey'] = 'klucz publiczny';
+$labels['typekeypair'] = 'para kluczy';
+$labels['keyattfound'] = 'Ta wiadomość zawiera załączone klucze PGP.';
+$labels['keyattimport'] = 'Importuj klucz(e)';
+$labels['typesign'] = 'Podpisz';
+$labels['typeencrypt'] = 'Szyfruj';
+$labels['typecert'] = 'Certyfikuj';
+$labels['typeauth'] = 'Uwierzytelnianie';
+$labels['subkeyid'] = 'Id';
+$labels['subkeyalgo'] = 'Algorytm';
+$labels['subkeycreated'] = 'Utworzony';
+$labels['subkeyexpires'] = 'Wygasa';
+$labels['subkeyusage'] = 'Zastosowanie';
+$labels['expiresnever'] = 'nigdy';
+$labels['unknown'] = 'nieznany';
+$labels['uservalid'] = 'Ważny';
+$labels['userid'] = 'Id';
+$labels['valid'] = 'ważny';
+$labels['supportencryption'] = 'Włącz szyfrowanie i podpisywanie wiadomości';
+$labels['supportsignatures'] = 'Włącz weryfikację podpisów wiadomości';
+$labels['supportdecryption'] = 'Włącz rozszyfrowywanie wiadomości';
+$labels['signdefault'] = 'Domyślnie podpisuj wiadomości';
+$labels['encryptdefault'] = 'Domyślnie szyfruj wiadomości';
+$labels['attachpubkeydefault'] = 'Zawsze załączaj mój klucz publiczny PGP';
+$labels['passwordtime'] = 'Przechowuj hasła kluczy prywatnych przez';
+$labels['nminutes'] = '$m minut';
+$labels['wholesession'] = 'cała sesja';
+$labels['createkeys'] = 'Utwórz nową parę kluczy';
+$labels['importkeys'] = 'Importuj klucz(e)';
+$labels['exportkeys'] = 'Eksportuj klucz(e)';
+$labels['keyactions'] = 'Akcje kluczy...';
+$labels['keyremove'] = 'Usuń';
+$labels['keydisable'] = 'Wyłącz';
+$labels['keyrevoke'] = 'Unieważnij';
+$labels['keysend'] = 'Wyślij klucz publiczny w wiadomości';
+$labels['keychpass'] = 'Zmień hasło';
+$labels['newkeyident'] = 'Tożsamość:';
+$labels['newkeypass'] = 'Hasło:';
+$labels['newkeypassconfirm'] = 'Potwierdź hasło:';
+$labels['newkeysize'] = 'Rozmiar klucza:';
+$labels['key2048'] = '2048 bitów - domyślnie';
+$labels['key4096'] = '4096 bitów - bardziej bezpiecznie';
+$labels['keygenerating'] = 'Generowanie kluczy...';
+$labels['encryptionoptions'] = 'Opcje szyfrowania...';
+$labels['encryptmsg'] = 'Szyfruj wiadomość';
+$labels['signmsg'] = 'Podpisz wiadomość';
+$labels['enterkeypasstitle'] = 'Wprowadź hasło klucza';
+$labels['enterkeypass'] = 'Wymagane jest hasło do klucza ($keyid) użytkownika: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opcje eksportu kluczy';
+$labels['attachpubkeymsg'] = 'Załącz mój klucz publiczny';
+$labels['keyexportprompt'] = 'Czy chcesz dołączyć klucze prywatne do utworzonego pliku kluczy PGP?';
+$labels['onlypubkeys'] = 'Eksportuj tylko klucze publiczne';
+$labels['withprivkeys'] = 'Eksportuj klucze prywatne';
+$labels['findkey'] = 'Wyszukaj na serwerach kluczy';
+$labels['keyimportlabel'] = 'Import z pliku';
+$labels['keyimportsearchlabel'] = 'Wyszukiwanie na serwerach kluczy';
+$messages['sigvalid'] = 'Zweryfikowany podpis nadawcy $sender.';
+$messages['sigvalidpartial'] = 'Zweryfikowany podpis od $sender, ale część wiadomości nie została podpisana.';
+$messages['siginvalid'] = 'Błędny podpis nadawcy $sender.';
+$messages['sigunverified'] = 'Podpis niezweryfikowany. Certyfikat niezweryfikowany. ID certyfikatu: $keyid.';
+$messages['signokey'] = 'Podpis niezweryfikowany. Brak klucza publicznego. ID klucza: $keyid.';
+$messages['sigerror'] = 'Podpis niezweryfikowany. Błąd wewnętrzny.';
+$messages['decryptok'] = 'Wiadomość odszyfrowana.';
+$messages['decrypterror'] = 'Nie udało się odszyfrować wiadomości.';
+$messages['decryptnokey'] = 'Odszyfrowanie nie powiodło się. Brak klucza prywatnego. ID klucza: $keyid.';
+$messages['decryptbadpass'] = 'Odszyfrowanie nie powiodło się. Hasło jest nieprawidłowe.';
+$messages['decryptnopass'] = 'Odszyfrowanie nie powiodło się. Hasło jest wymagane.';
+$messages['decryptpartial'] = 'Wiadomość odszyfrowana, ale jej część nie była zaszyfrowana.';
+$messages['signerror'] = 'BÅ‚Ä…d podpisywania.';
+$messages['signnokey'] = 'BÅ‚Ä…d podpisywania. Nie znaleziono klucza prywatnego.';
+$messages['signbadpass'] = 'Błąd podpisywania. Hasło jest nieprawidłowe.';
+$messages['signnopass'] = 'Błąd podpisywania. Wymagane hasło klucza.';
+$messages['encrypterror'] = 'BÅ‚Ä…d szyfrowania.';
+$messages['encryptnokey'] = 'BÅ‚Ä…d szyfrowania. Nie znaleziono klucza publicznego dla $email.';
+$messages['nokeysfound'] = 'Nie znaleziono kluczy';
+$messages['keynotfound'] = 'Nie znaleziono klucza!';
+$messages['keyopenerror'] = 'Nie można odczytać informacji o kluczu! Błąd wewnętrzny.';
+$messages['keylisterror'] = 'Nie można odczytać listy kluczy! Błąd wewnętrzny.';
+$messages['keysimportfailed'] = 'Nie można zapisać kluczy! Błąd wewnętrzny.';
+$messages['keysimportsuccess'] = 'Klucze zostały zapisane. Dodane: $new, bez zmian: $old.';
+$messages['keyremoving'] = 'Usuwanie kluczy...';
+$messages['keyremoveconfirm'] = 'Czy na pewno chcesz usunąć wybrane klucze?';
+$messages['keyremovesuccess'] = 'Klucze zostały usunięte.';
+$messages['keyremoveerror'] = 'Nie można usunąć wybranych kluczy.';
+$messages['keyimporttext'] = 'Możesz zaimportować klucze prywatne i publiczne oraz sygnatury unieważniające w formacie ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Możesz wyszukiwać przy użyciu identyfikatora klucza, nazwy użytkownika lub adresu email, a następnie bezpośrednio zaimportować wyszukane klucze.';
+$messages['formerror'] = 'Proszę wypełnić formularz. Wszystkie pola są wymagane!';
+$messages['passwordsdiffer'] = 'Hasła nie pasują!';
+$messages['keygenerateerror'] = 'Generowanie pary kluczy nie powiodło się';
+$messages['keygeneratesuccess'] = 'Para kluczy została zapisana.';
+$messages['keygennosupport'] = 'Twoja przeglądarka nie obsługuje kryptografii. Nie można wygenerować kluczy!';
+$messages['noidentselected'] = 'Należy wybrać przynajmniej jedną tożsamość!';
+$messages['nonameident'] = 'Tożsamość musi zawierać nazwę użytkownika!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Criptografação';
+$labels['enigmacerts'] = 'Certificados S/MIME';
+$labels['enigmakeys'] = 'Chaves PGP';
+$labels['keysfromto'] = ' $count chaves de $from para $to';
+$labels['keyname'] = 'Nome';
+$labels['keyid'] = 'ID da chave';
+$labels['keyuserid'] = 'ID do usuário';
+$labels['keytype'] = 'Tipo de chave';
+$labels['fingerprint'] = 'Autenticação digital';
+$labels['subkeys'] = 'Subchaves';
+$labels['basicinfo'] = 'Informação básica';
+$labels['userids'] = 'Usuários adicionais';
+$labels['typepublickey'] = 'chave pública';
+$labels['typekeypair'] = 'par de chave';
+$labels['keyattfound'] = 'Essa mensagem contém chave(s) PGP em anexo.';
+$labels['keyattimport'] = 'Importa chave(s)';
+$labels['typesign'] = 'Assinatura';
+$labels['typeencrypt'] = 'Criptografar';
+$labels['typecert'] = 'Certificado';
+$labels['typeauth'] = 'Autenticação';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritimo';
+$labels['subkeycreated'] = 'Criado';
+$labels['subkeyexpires'] = 'Expira';
+$labels['subkeyusage'] = 'Uso';
+$labels['expiresnever'] = 'nunca';
+$labels['unknown'] = 'desconhecido';
+$labels['uservalid'] = 'Válido';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'válido';
+$labels['supportencryption'] = 'Habilitar mensagens criptografadas e assinaturas';
+$labels['supportsignatures'] = 'Habilitar verificação de mensagens assinadas';
+$labels['supportdecryption'] = 'habilita descriptografia de mensagens';
+$labels['signdefault'] = 'Assinar todas as mensagens por padrão';
+$labels['encryptdefault'] = 'Criptografar todas as mensagens por padrão';
+$labels['attachpubkeydefault'] = 'Anexar minha chave PGP pública';
+$labels['passwordtime'] = 'Mantenha senhas de chave privada para';
+$labels['nminutes'] = '$m minuto(s)';
+$labels['wholesession'] = 'toda a sessão';
+$labels['createkeys'] = 'Criar novo par de chaves';
+$labels['importkeys'] = 'importar chave(s)';
+$labels['exportkeys'] = 'Exportar chave(s)';
+$labels['keyactions'] = 'Principais ações ...';
+$labels['keyremove'] = 'Remover';
+$labels['keydisable'] = 'Desabilitar';
+$labels['keyrevoke'] = 'Revogar';
+$labels['keysend'] = 'Mandar chave pública em uma mensagem';
+$labels['keychpass'] = 'Trocar senha';
+$labels['newkeyident'] = 'identificação:';
+$labels['newkeypass'] = 'Senha:';
+$labels['newkeypassconfirm'] = 'Confirmar senha:';
+$labels['newkeysize'] = 'Tamanho da chave:';
+$labels['key2048'] = '2048 bits - padrão';
+$labels['key4096'] = '4096 bits - maise seguro';
+$labels['keygenerating'] = 'Gerando chaves...';
+$labels['encryptionoptions'] = 'Opções de criptografia...';
+$labels['encryptmsg'] = 'Criptografar essa mensagem';
+$labels['signmsg'] = 'Assinar digitalmente essa mensagem';
+$labels['sendunencrypted'] = 'Enviar não criptografado';
+$labels['enterkeypasstitle'] = 'Digite a frase secreta da chave';
+$labels['enterkeypass'] = 'Uma frase secreta é necessária para desbloquear a chave ($keyid) para o usuário: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves';
+$labels['attachpubkeymsg'] = 'Anexar minha chave pública';
+$labels['keyexportprompt'] = 'Deseja incluir chaves secretas no arquivo de chaves OpenPGP salva?';
+$labels['onlypubkeys'] = 'Exportar somente Chaves Públicas';
+$labels['withprivkeys'] = 'Exportar Chaves Secretas';
+$labels['findkey'] = 'Procurar no(s) servidor(es) de chaves';
+$labels['keyimportlabel'] = 'Importar do arquivo';
+$labels['keyimportsearchlabel'] = 'Procurar no(s) servidor(es) de chaves';
+$messages['sigvalid'] = 'Verificar assinatura de $sender.';
+$messages['sigvalidpartial'] = 'Verificar assinatura de $sender, mas parte do corpo não foi assinada.';
+$messages['siginvalid'] = 'Assinatura inválida de $sender.';
+$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. Certificado de ID: $keyid.';
+$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. Chave de ID: $keyid.';
+$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
+$messages['decryptok'] = 'Mensagem descriptografada';
+$messages['decrypterror'] = 'Falha ao descriptografar.';
+$messages['decryptnokey'] = 'Falha ao descriptografar. Chave privada não encontrada. Chave de ID: $keyid.';
+$messages['decryptbadpass'] = 'Descriptografia falhou. Senha inválida.';
+$messages['decryptnopass'] = 'Falha ao descriptografar. Senha chave requerida.';
+$messages['decryptpartial'] = 'Mensagem descriptografada, mas parte do corpo não foi encriptado.';
+$messages['signerror'] = 'Assinatura falhou.';
+$messages['signnokey'] = 'Assinatura falhou. Chave privada não encontrada.';
+$messages['signbadpass'] = 'Login falhou. Senha inválida.';
+$messages['signnopass'] = 'Assinatura falhou. Senha chave requerida.';
+$messages['encrypterror'] = 'Falha ao criptografar.';
+$messages['encryptnokey'] = 'Falha ao criptografar. Chave pública não encontrada para $email.';
+$messages['nokeysfound'] = 'Nenhuma chave encontrada';
+$messages['keynotfound'] = 'Chave não encontrada!';
+$messages['keyopenerror'] = 'Não é possível obter informações da chave! Erro interno.';
+$messages['keylisterror'] = 'Não é possível listar as chaves! Erro interno.';
+$messages['keysimportfailed'] = 'Não é possível importar chave(s)! Erro interno.';
+$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importado: $new, mantido: $old.';
+$messages['keyremoving'] = 'Removendo chave(s)...';
+$messages['keyremoveconfirm'] = 'Tem a certeza, de que deseja excluir a seleção de chave(s)?';
+$messages['keyremovesuccess'] = 'Chave(s) deletada com sucvesso';
+$messages['keyremoveerror'] = 'Não é possível excluir a seleção de chave(s).';
+$messages['keyimporttext'] = 'Você pode importar chaves privadas e publicas ou assinaturas de revogação em formato ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Você pode procurar por chaves públicas pelo identificador de chaves, nome do usuário ou e-mail, e então importá-las diretamente.';
+$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são necessários!';
+$messages['passwordsdiffer'] = 'Senhas não conferem!';
+$messages['keygenerateerror'] = 'Falha ao gerar um par de chaves';
+$messages['keygeneratesuccess'] = 'Um par de chaves foi gerado e importado com sucesso.';
+$messages['keygennosupport'] = 'Seu navegador não suporta criptografia. Não é possível gerar um par de chaves!';
+$messages['noidentselected'] = 'Você tem que selecionar ao menos uma identidade para a chave!';
+$messages['nonameident'] = 'A identificação deve ter um nome de usuário definido!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Encriptação';
+$labels['enigmacerts'] = 'Certificados S/MIME';
+$labels['enigmakeys'] = 'Chaves PGP';
+$labels['keysfromto'] = 'Chave de $from a $to de $count';
+$labels['keyname'] = 'Nome';
+$labels['keyid'] = 'ID da Chave';
+$labels['keyuserid'] = 'ID do Utilizador';
+$labels['keytype'] = 'Tipo de chave';
+$labels['fingerprint'] = 'Impressão digital';
+$labels['subkeys'] = 'Sub-chaves';
+$labels['basicinfo'] = 'Informação básica';
+$labels['userids'] = 'Utilizadores adicionais';
+$labels['typepublickey'] = 'chave publica';
+$labels['typekeypair'] = 'par de chaves';
+$labels['keyattfound'] = 'Esta mensagem contém chave(s) PGP anexada(s).';
+$labels['keyattimport'] = 'Importar chave(s)';
+$labels['typesign'] = 'Assinar';
+$labels['typeencrypt'] = 'Encriptar';
+$labels['typecert'] = 'Certificar';
+$labels['typeauth'] = 'Autenticação';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmo';
+$labels['subkeycreated'] = 'Criado';
+$labels['subkeyexpires'] = 'Expira';
+$labels['subkeyusage'] = 'Uso';
+$labels['expiresnever'] = 'nunca';
+$labels['unknown'] = 'desconhecido';
+$labels['uservalid'] = 'Válido';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'válido';
+$labels['supportencryption'] = 'Activar a encriptação de mensagens e assinatura';
+$labels['supportsignatures'] = 'Activar a verificação de assinaturas de mensagens';
+$labels['supportdecryption'] = 'Activar desencriptação de mensagem';
+$labels['signdefault'] = 'Assinar todas as mensagens por defeito';
+$labels['encryptdefault'] = 'Encriptar todas as mensagens por defeito';
+$labels['attachpubkeydefault'] = 'Anexar a minha chave pública PGP por defeito';
+$labels['passwordtime'] = 'Manter palavras-passe de chave privada para';
+$labels['nminutes'] = '$m minuto(s)';
+$labels['wholesession'] = 'toda a sessão';
+$labels['createkeys'] = 'Criar um novo par de chaves';
+$labels['importkeys'] = 'Importar chave(s)';
+$labels['exportkeys'] = 'Exportar chave(s)';
+$labels['keyactions'] = 'Acções das chaves...';
+$labels['keyremove'] = 'Remover';
+$labels['keydisable'] = 'Desactivar';
+$labels['keyrevoke'] = 'Revogar';
+$labels['keysend'] = 'Enviar chave pública numa mensagem';
+$labels['keychpass'] = 'Alterar palavra-passe';
+$labels['newkeyident'] = 'Identidade:';
+$labels['newkeypass'] = 'Palavra-passe:';
+$labels['newkeypassconfirm'] = 'Confirmar palavra-passe:';
+$labels['newkeysize'] = 'Tamanho da chave:';
+$labels['key2048'] = '2048 bits - predefinição';
+$labels['key4096'] = '4096 bits - mais seguro';
+$labels['keygenerating'] = 'A gerar chaves...';
+$labels['encryptionoptions'] = 'Opções de encriptação...';
+$labels['encryptmsg'] = 'Encriptar esta mensagem';
+$labels['signmsg'] = 'Assinar digitalmente esta mensagem';
+$labels['sendunencrypted'] = 'Enviar desencriptado';
+$labels['enterkeypasstitle'] = 'Digite chave de frase de acesso';
+$labels['enterkeypass'] = 'É necessária uma frase de acesso para desbloquear a chave secreta ($keyid) do utilizador: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opções de exportação de chaves';
+$labels['attachpubkeymsg'] = 'Anexar a minha chave pública';
+$labels['keyexportprompt'] = 'Deseja incluir as chaves secretas no ficheiro, guardado, de chaves OpenPGP?';
+$labels['onlypubkeys'] = 'Exportar apenas Chaves Públicas';
+$labels['withprivkeys'] = 'Exportar chaves secretas';
+$labels['findkey'] = 'Pesquisar no(s) servidor(es) de chaves';
+$labels['keyimportlabel'] = 'Importar do ficheiro';
+$labels['keyimportsearchlabel'] = 'Pesquisar no(s) servidor(es) de chaves';
+$messages['sigvalid'] = 'Assinatura verificada de $sender.';
+$messages['sigvalidpartial'] = 'Assinatura verificada a partir de $sender, mas parte do corpo não foi assinado.';
+$messages['siginvalid'] = 'Assinatura inválida de $sender.';
+$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. ID do certificado: $keyid.';
+$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. ID da chave: $keyid.';
+$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
+$messages['decryptok'] = 'Mensagem desencriptada.';
+$messages['decrypterror'] = 'A desencriptação falhou.';
+$messages['decryptnokey'] = 'A desencriptação falhou. Chave privada não encontrada. ID da chave: $keyid.';
+$messages['decryptbadpass'] = 'A desencriptação falhou. Palavra-passe inválida.';
+$messages['decryptnopass'] = 'A desencriptação falhou. Chave necessária.';
+$messages['decryptpartial'] = 'Mensagem desencriptada, mas parte do corpo não foi encriptado.';
+$messages['signerror'] = 'A assinatura falhou.';
+$messages['signnokey'] = 'A assinatura falhou. Chave privada não encontrada.';
+$messages['signbadpass'] = 'A assinatura falhou. Palavra-passe inválida.';
+$messages['signnopass'] = 'A assinatura falhou. Chave necessária.';
+$messages['encrypterror'] = 'A encriptação falhou.';
+$messages['encryptnokey'] = 'A encriptação falhou. Chave pública não encontrada para $email.';
+$messages['nokeysfound'] = 'Não foram encontradas chaves';
+$messages['keynotfound'] = 'Chave não encontrada!';
+$messages['keyopenerror'] = 'Não foi possível obter informações sobre a chave! Erro interno.';
+$messages['keylisterror'] = 'Não foi possível listar as chaves! Erro interno.';
+$messages['keysimportfailed'] = 'Não foi possível importar a(s) chave(s)! Erro interno.';
+$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importada: $new, inalterada: $old.';
+$messages['keyremoving'] = 'A remover chave(s)...';
+$messages['keyremoveconfirm'] = 'Tem a certeza que pretende eliminar a(s) chave(s) selecionada(s)?';
+$messages['keyremovesuccess'] = 'Chave(s) eliminada(s) com sucesso.';
+$messages['keyremoveerror'] = 'Não foi possível eliminar a(s) chave(s) selecionada(s).';
+$messages['keyimporttext'] = 'Pode importar chaves privadas e públicas ou de revogação de assinaturas em formato ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Pode procurar por chaves públicas através de identificadores de chave, nome de utilizador ou endereço de e-mail e, em seguida, importá-las directamente.';
+$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são obrigatórios!';
+$messages['passwordsdiffer'] = 'As palavras-passe não coincidem!';
+$messages['keygenerateerror'] = 'Falha ao gerar o par de chaves';
+$messages['keygeneratesuccess'] = 'Foi gerado e importado, com sucesso, um par de chaves.';
+$messages['keygennosupport'] = 'O seu navegador não suporta criptografia. Não foi possível gerar um par de chaves!';
+$messages['noidentselected'] = 'Tem de seleccionar pelo menos uma identidade para a chave!';
+$messages['nonameident'] = 'A identidade deve ter um nome de utilizador definido!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Criptare';
+$labels['enigmacerts'] = 'Certificate S/MIME';
+$labels['enigmakeys'] = 'Chei PGP';
+$labels['keysfromto'] = 'Cheile de la $from la $to din $count';
+$labels['keyname'] = 'Nume';
+$labels['keyid'] = 'ID Cheie';
+$labels['keyuserid'] = 'ID Utilizator';
+$labels['keytype'] = 'Tip cheie';
+$labels['fingerprint'] = 'Amprentă';
+$labels['subkeys'] = 'Subchei';
+$labels['basicinfo'] = 'Informații de bază';
+$labels['userids'] = 'Utilizatori adiționali';
+$labels['typepublickey'] = 'cheie publică';
+$labels['typekeypair'] = 'cheie pereche';
+$labels['keyattfound'] = 'Acest mesaj conține chei PGP  atașate.';
+$labels['keyattimport'] = 'Importă chei';
+$labels['typesign'] = 'Semnează';
+$labels['typeencrypt'] = 'Criptează';
+$labels['typecert'] = 'Certifică';
+$labels['typeauth'] = 'Autentificare';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritm';
+$labels['subkeycreated'] = 'Creat la';
+$labels['subkeyexpires'] = 'Expiră la';
+$labels['subkeyusage'] = 'Folosire';
+$labels['expiresnever'] = 'niciodată';
+$labels['unknown'] = 'necunoscut';
+$labels['uservalid'] = 'Valid';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'valid';
+$labels['supportencryption'] = 'Activează criptare și semnare mesaj';
+$labels['supportsignatures'] = 'Activează verificare semnături mesaj';
+$labels['supportdecryption'] = 'Activează decriptare mesaj';
+$labels['signdefault'] = 'Semnează toate mesajele în mod prestabilit';
+$labels['encryptdefault'] = 'Criptează toate mesajele în mod prestabilit';
+$labels['attachpubkeydefault'] = 'Atașează cheia mea publică PGP implicit';
+$labels['passwordtime'] = 'Păstrează parola cheii private pentru';
+$labels['nminutes'] = '$m minut(e)';
+$labels['wholesession'] = 'toată sesiunea';
+$labels['createkeys'] = 'Creează cheie pereche nouă';
+$labels['importkeys'] = 'Importă chei(e)';
+$labels['exportkeys'] = 'Expertă chei(e)';
+$labels['keyactions'] = 'Acțiuni cheie';
+$labels['keyremove'] = 'Elimină';
+$labels['keydisable'] = 'Dezactivează';
+$labels['keyrevoke'] = 'Revocă';
+$labels['keysend'] = 'Trimite cheie publică în mesaj';
+$labels['keychpass'] = 'Schimbă parola';
+$labels['newkeyident'] = 'Identitate:';
+$labels['newkeypass'] = 'Parola:';
+$labels['newkeypassconfirm'] = 'Confirmă parola:';
+$labels['newkeysize'] = 'Dimensiunea cheii:';
+$labels['key2048'] = '2048 biți - implicit';
+$labels['key4096'] = '4096 biți - mult mai sigur';
+$labels['keygenerating'] = 'Se generează cheile...';
+$labels['encryptionoptions'] = 'Opțiuni criptare';
+$labels['encryptmsg'] = 'Criptează acest mesaj';
+$labels['signmsg'] = 'Semnează digital acest mesaj';
+$labels['enterkeypasstitle'] = 'Introdu fraza de acces cheie';
+$labels['enterkeypass'] = 'O frază de acces este necesară pentru a debloca cheia secretă ($keyid) pentru utilizatorul: $user.';
+$labels['arialabelkeyexportoptions'] = 'Opțiuni export chei';
+$labels['attachpubkeymsg'] = 'Atașează cheia mea publică';
+$labels['keyexportprompt'] = 'Vrei să incluzi cheile secrete în fișierul de chei OpenPGP salvat?';
+$labels['onlypubkeys'] = 'Exportă doar Cheile Publice';
+$labels['withprivkeys'] = 'Exportă Cheile Secrete';
+$labels['findkey'] = 'Caută în serverele de chei';
+$labels['keyimportlabel'] = 'Importă din fișier';
+$labels['keyimportsearchlabel'] = 'Caută în serverele de chei';
+$messages['sigvalid'] = 'Semnătură $sender verificată.';
+$messages['sigvalidpartial'] = 'Semnătură $sender verificată, dar parte a mesajului nu a fost semnat.';
+$messages['siginvalid'] = 'Semnătură nevalidă de la $sender.';
+$messages['sigunverified'] = 'Semnătură neverificată. Certificat neverificat. ID Certificat: $keyid.';
+$messages['signokey'] = 'Semnătură neverificată. Cheie publică negăsită. ID Cheie: $keyid.';
+$messages['sigerror'] = 'Semnătura neconfirmată. Eroare internă.';
+$messages['decryptok'] = 'Mesajul a fost decriptat.';
+$messages['decrypterror'] = 'Decriptarea a eșuat.';
+$messages['decryptnokey'] = 'Decriptarea a eșuat. Cheie privată negăsită. ID Cheie: $keyid.';
+$messages['decryptbadpass'] = 'Decriptarea a eșuat. Parolă nevalidă.';
+$messages['decryptnopass'] = 'Decriptarea a eșuat. Parola este obligatorie.';
+$messages['decryptpartial'] = 'Mesaj decriptat, dar parte a mesajului nu a fost criptat.';
+$messages['signerror'] = 'Semnarea a eșuat.';
+$messages['signnokey'] = 'Semnarea a eșuat. Cheia privată nu a fost găsită.';
+$messages['signbadpass'] = 'Semnarea a eșuat. Parolă nevalidă.';
+$messages['signnopass'] = 'Semnarea a eșuat. Parolă cheie necesară.';
+$messages['encrypterror'] = 'Criptarea a eșuat.';
+$messages['encryptnokey'] = 'Criptarea a eșuat. Cheia publică nu a fost găsită pentru $email.';
+$messages['nokeysfound'] = 'Nici o cheie găsită';
+$messages['keynotfound'] = 'Cheia nu a fost găsită!';
+$messages['keyopenerror'] = 'Imposibil de preluat informații cheie! Eroare internă.';
+$messages['keylisterror'] = 'Imposibil de afișat chei! Eroare internă.';
+$messages['keysimportfailed'] = 'Imposibil de importat chei(e)! Eroare internă.';
+$messages['keysimportsuccess'] = 'Chei importate cu succes. Importate: $new, neschimbate: $old.';
+$messages['keyremoving'] = 'Se elimină cheile...';
+$messages['keyremoveconfirm'] = 'Ești sigur că vrei să ștergi cheile selectate?';
+$messages['keyremovesuccess'] = 'Chei eliminate cu succes';
+$messages['keyremoveerror'] = 'Imposibil de șters cheile selectate.';
+$messages['keyimporttext'] = 'Poți importa chei private și publice sau semnături de revocare în format ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Poți căuta chei publice după identificatorul de cheie, numele de utilizator sau adresa de e-mail și apoi le poți importa direct.';
+$messages['formerror'] = 'Te rog completează formularul. Toate câmpurile sunt necesare!';
+$messages['passwordsdiffer'] = 'Parolele nu se potrivesc!';
+$messages['keygenerateerror'] = 'Nu s-a putut genera cheia pereche';
+$messages['keygeneratesuccess'] = 'Cheia pereche a fost generată și importată cu succes.';
+$messages['keygennosupport'] = 'Browserul dvs. web nu acceptă criptografia. Imposibil de generat cheia pereche!';
+$messages['noidentselected'] = 'Trebuie sa alegi cel puțin o identitate pentru cheie!';
+$messages['nonameident'] = 'Identitatea trebuie să aibă definit un nume de utilizator!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Шифрование';
+$labels['enigmacerts'] = 'Сертификаты S/MIME';
+$labels['enigmakeys'] = 'Ключи PGP';
+$labels['keysfromto'] = 'Ключи Ñ $from по $to из $count';
+$labels['keyname'] = 'ИмÑ';
+$labels['keyid'] = 'ID ключа';
+$labels['keyuserid'] = 'ID пользователÑ';
+$labels['keytype'] = 'Тип ключа';
+$labels['fingerprint'] = 'Отпечаток';
+$labels['subkeys'] = 'Подключи';
+$labels['basicinfo'] = 'Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ';
+$labels['userids'] = 'Дополнительные ключи';
+$labels['typepublickey'] = 'открытый ключ';
+$labels['typekeypair'] = 'пара ключей';
+$labels['keyattfound'] = 'Это Ñообщение Ñодержит прикреплённый(е) PGP ключ(и).';
+$labels['keyattimport'] = 'Импортировать ключ(и)';
+$labels['typesign'] = 'ПодпиÑать';
+$labels['typeencrypt'] = 'Зашифровать';
+$labels['typecert'] = 'УдоÑтоверить';
+$labels['typeauth'] = 'ÐутентификациÑ';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Ðлгоритм';
+$labels['subkeycreated'] = 'Создан';
+$labels['subkeyexpires'] = 'Срок дейÑтвиÑ';
+$labels['subkeyusage'] = 'ИÑпользование';
+$labels['expiresnever'] = 'никогда';
+$labels['unknown'] = 'неизвеÑтно';
+$labels['uservalid'] = 'ДейÑтвительный';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'дейÑтвительный';
+$labels['supportencryption'] = 'Включить шифрование и подпиÑание Ñообщений';
+$labels['supportsignatures'] = 'Включить проверку подпиÑанных Ñообщений';
+$labels['supportdecryption'] = 'Включить раÑшифровывание Ñообщений';
+$labels['signdefault'] = 'ПодпиÑывать вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию';
+$labels['encryptdefault'] = 'Шифровать вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию';
+$labels['attachpubkeydefault'] = 'Прикрепить мой открытый ключ по умолчанию';
+$labels['passwordtime'] = 'Хранить пароль закрытого ключа';
+$labels['nminutes'] = '$m минут(ы)';
+$labels['wholesession'] = 'веÑÑŒ ÑеанÑ';
+$labels['createkeys'] = 'Создать новую пару ключей';
+$labels['importkeys'] = 'Импортировать ключ(и)';
+$labels['exportkeys'] = 'ЭкÑпортировать ключ(и)';
+$labels['keyactions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸...';
+$labels['keyremove'] = 'Удалить';
+$labels['keydisable'] = 'Отключить';
+$labels['keyrevoke'] = 'Отозвать';
+$labels['keysend'] = 'Отправить открытый ключ в Ñообщении';
+$labels['keychpass'] = 'Изменить пароль';
+$labels['newkeyident'] = 'Профиль:';
+$labels['newkeypass'] = 'Пароль:';
+$labels['newkeypassconfirm'] = 'Подтвердите пароль:';
+$labels['newkeysize'] = 'Размер ключа:';
+$labels['key2048'] = '2048 бит - по умолчанию';
+$labels['key4096'] = '4096 бит - более безопаÑный';
+$labels['keygenerating'] = 'Создание ключей...';
+$labels['encryptionoptions'] = 'ÐаÑтройки шифрованиÑ...';
+$labels['encryptmsg'] = 'Зашифровать Ñто Ñообщение';
+$labels['signmsg'] = 'ПодпиÑать Ñто Ñообщение';
+$labels['sendunencrypted'] = 'Отправить незашифрованным';
+$labels['enterkeypasstitle'] = 'Введите фразу-пароль ключа';
+$labels['enterkeypass'] = 'Фраза-пароль нужна Ð´Ð»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ Ñекретного ключа ($keyid) пользователÑ: $user.';
+$labels['arialabelkeyexportoptions'] = 'Параметры ÑкÑпорта ключей';
+$labels['attachpubkeymsg'] = 'Прикрепить мой открытый ключ';
+$labels['keyexportprompt'] = 'Ð’Ñ‹ хотите включить закрытые ключи в файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡ÐµÐ¹ OpenPGP?';
+$labels['onlypubkeys'] = 'ЭкÑпортировать только открытые ключи';
+$labels['withprivkeys'] = 'ЭкÑпортировать закрытые ключи';
+$labels['findkey'] = 'ПоиÑк на Ñервере(-ах) ключей';
+$labels['keyimportlabel'] = 'Импортировать из файла';
+$labels['keyimportsearchlabel'] = 'ПоиÑк на Ñервере(-ах) ключей';
+$messages['sigvalid'] = 'ÐŸÑ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ $sender.';
+$messages['sigvalidpartial'] = 'ÐŸÑ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ $sender, но чаÑÑ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ подпиÑана.';
+$messages['siginvalid'] = 'ÐедейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ $sender.';
+$messages['sigunverified'] = 'ÐÐµÐ¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ. Сертификат не проверен. ID Ñертификата: $keyid.';
+$messages['signokey'] = 'ÐÐµÐ¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ. Открытый ключ не найден. ID ключа: $keyid.';
+$messages['sigerror'] = 'ÐÐµÐ¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ. ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°.';
+$messages['decryptok'] = 'Сообщение раÑшифровано.';
+$messages['decrypterror'] = 'Сбой раÑшифровки.';
+$messages['decryptnokey'] = 'Сбой раÑшифровки. Закрытый ключ не найден. ID ключа: $keyid.';
+$messages['decryptbadpass'] = 'Сбой раÑшифровки. Ðеверный пароль.';
+$messages['decryptnopass'] = 'Сбой раÑшифровки. ТребуетÑÑ ÐºÐ»ÑŽÑ‡ паролÑ.';
+$messages['decryptpartial'] = 'Сообщение раÑшифровано, но чаÑÑ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ была зашифрована.';
+$messages['signerror'] = 'Сбой подпиÑаниÑ.';
+$messages['signnokey'] = 'Сбой подпиÑаниÑ. Закрытый ключ не найден.';
+$messages['signbadpass'] = 'Сбой подпиÑаниÑ. Ðеверный пароль.';
+$messages['signnopass'] = 'Сбой подпиÑаниÑ. ТребуетÑÑ ÐºÐ»ÑŽÑ‡ паролÑ.';
+$messages['encrypterror'] = 'Сбой шифрованиÑ.';
+$messages['encryptnokey'] = 'Сбой шифрованиÑ. Ðе найден открытый ключ Ð´Ð»Ñ $email.';
+$messages['nokeysfound'] = 'Ключи не найдены';
+$messages['keynotfound'] = 'Ключ не найден!';
+$messages['keyopenerror'] = 'Ðевозможно получить информацию о ключе! ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°.';
+$messages['keylisterror'] = 'Ðевозможно ÑоÑтавить ÑпиÑок ключей! ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°.';
+$messages['keysimportfailed'] = 'Ðевозможно импортировать ключ(и)! ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°.';
+$messages['keysimportsuccess'] = 'Ключ(и) уÑпешно импортирован(Ñ‹) . Импортировано: $new, без изменений: $old.';
+$messages['keyremoving'] = 'Удаление ключа(ей)...';
+$messages['keyremoveconfirm'] = 'Вы уверенны, что хотите удалить выделенный(е) ключ(и)?';
+$messages['keyremovesuccess'] = 'Ключ(и) уÑпешно удален(Ñ‹)';
+$messages['keyremoveerror'] = 'Ðевозможно удалить выделенный(е) ключ(и).';
+$messages['keyimporttext'] = 'Ð’Ñ‹ можете импортировать закрытый и открытый ключ(и) или подпиÑи отзыва в формате ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Ð’Ñ‹ можете иÑкать открытые ключи по идентификатору ключа, имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ адреÑу Ñлектронной почты, а затем импортировать их напрÑмую.';
+$messages['formerror'] = 'Заполните форму. Ð’Ñе Ð¿Ð¾Ð»Ñ Ð¾Ð±Ñзательны!';
+$messages['passwordsdiffer'] = 'Пароли не Ñовпадают!';
+$messages['keygenerateerror'] = 'Ðе удалоÑÑŒ Ñоздать пару ключей';
+$messages['keygeneratesuccess'] = 'Пара ключей Ñоздана и уÑпешно импортирована.';
+$messages['keygennosupport'] = 'Ваш браузер не поддерживает шифрование. Ðевозможно Ñоздать пару ключей!';
+$messages['noidentselected'] = 'Ð’Ñ‹ должны выбрать по крайней мере один профиль Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð°!';
+$messages['nonameident'] = 'У Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ быть определено Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Å ifrovanie';
+$labels['enigmacerts'] = 'Certifikáty S/MIME';
+$labels['enigmakeys'] = 'KľúÄe PGP';
+$labels['keysfromto'] = 'KľúÄe $from až $to z poÄtu: $count';
+$labels['keyname'] = 'Názov';
+$labels['keyid'] = 'ID kľúÄa';
+$labels['keyuserid'] = 'ID používateľa';
+$labels['keytype'] = 'Typ kľúÄa';
+$labels['fingerprint'] = 'OdtlaÄok';
+$labels['subkeys'] = 'Podradené kľúÄe';
+$labels['basicinfo'] = 'Základná informácia';
+$labels['userids'] = 'Ďalší používatelia';
+$labels['typepublickey'] = 'verejný kľúÄ';
+$labels['typekeypair'] = 'pár kľúÄov';
+$labels['keyattfound'] = 'Táto správa obsahuje priložené kľúÄe PGP.';
+$labels['keyattimport'] = 'ImportovaÅ¥ kľúÄ(e)';
+$labels['typesign'] = 'Podpísať';
+$labels['typeencrypt'] = 'Zašifrovať';
+$labels['typecert'] = 'Certifikovať';
+$labels['typeauth'] = 'Autentifikácia';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritmus';
+$labels['subkeycreated'] = 'Vytvorené';
+$labels['subkeyexpires'] = 'Expiruje';
+$labels['subkeyusage'] = 'Využitie';
+$labels['expiresnever'] = 'nikdy';
+$labels['unknown'] = 'neznáme';
+$labels['uservalid'] = 'Platné';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'platné';
+$labels['supportencryption'] = 'Zapnúť šifrovanie a podpisovanie správ';
+$labels['supportsignatures'] = 'Zapnúť overovanie podpisov v správe';
+$labels['supportdecryption'] = 'Zapnúť dešifrovanie správ';
+$labels['signdefault'] = 'Predvolene podpisovať všetky správy';
+$labels['encryptdefault'] = 'Predvolene šifrovať všetky správy';
+$labels['attachpubkeydefault'] = 'Predvolene pripájaÅ¥ môj verejný PGP kľúÄ';
+$labels['passwordtime'] = 'UchovávaÅ¥ heslá súkromného kľúÄa poÄas';
+$labels['nminutes'] = '$m minút/minúty';
+$labels['wholesession'] = 'celej relácie';
+$labels['createkeys'] = 'VytvoriÅ¥ nový pár kľúÄov';
+$labels['importkeys'] = 'ImportovaÅ¥ kľúÄ(e)';
+$labels['exportkeys'] = 'ExportovaÅ¥ kľúÄ(e)';
+$labels['keyactions'] = 'Akcie kľúÄa...';
+$labels['keyremove'] = 'Odstrániť';
+$labels['keydisable'] = 'Vypnúť';
+$labels['keyrevoke'] = 'Odvolať';
+$labels['keysend'] = 'OdoslaÅ¥ verejný kÄ¾ÃºÄ v správe';
+$labels['keychpass'] = 'Zmeniť heslo';
+$labels['newkeyident'] = 'Identita:';
+$labels['newkeypass'] = 'Heslo:';
+$labels['newkeypassconfirm'] = 'Potvrdiť heslo:';
+$labels['newkeysize'] = 'VeľkosÅ¥ kľúÄa:';
+$labels['key2048'] = '2048 bitov – predvolené';
+$labels['key4096'] = '4096 bitov - bezpeÄnejÅ¡ie';
+$labels['keygenerating'] = 'Generovanie kľúÄov...';
+$labels['encryptionoptions'] = 'Nastavenia Å¡ifrovania...';
+$labels['encryptmsg'] = 'Zašifrovať túto správu';
+$labels['signmsg'] = 'Digitálne podpísať túto správu';
+$labels['sendunencrypted'] = 'Odoslať nezašifrované';
+$labels['enterkeypasstitle'] = 'ZadaÅ¥ kľúÄovú frázu';
+$labels['enterkeypass'] = 'Na odomknutie tajného kľúÄa je potrebná kľúÄová fráza ($keyid) pre používateľa: $user.';
+$labels['arialabelkeyexportoptions'] = 'Nastavenia exportu kľúÄov';
+$labels['attachpubkeymsg'] = 'PripojiÅ¥ môj verejný kľúÄ';
+$labels['keyexportprompt'] = 'Chcete do uloženého súboru s kľúÄmi OpenPGP zahrnúť aj tajné kľúÄe?';
+$labels['onlypubkeys'] = 'ExportovaÅ¥ len verejné kľúÄe';
+$labels['withprivkeys'] = 'ExportovaÅ¥ tajné kľúÄe';
+$labels['findkey'] = 'HľadaÅ¥ na serveri/serveroch s kľúÄom';
+$labels['keyimportlabel'] = 'Importovať zo súboru';
+$labels['keyimportsearchlabel'] = 'HľadaÅ¥ na serveri/serveroch s kľúÄom';
+$messages['sigvalid'] = 'Overený podpis od $sender.';
+$messages['sigvalidpartial'] = 'Overený podpis od $sender, ale ÄasÅ¥ tela podpísaná nebola.';
+$messages['siginvalid'] = 'Neplatný podpis od $sender.';
+$messages['sigunverified'] = 'Neoverený podpis, certifikát nebol overený. ID certifikátu: $keyid.';
+$messages['signokey'] = 'Neoverený podpis. Verejný kÄ¾ÃºÄ sa nenaÅ¡iel. ID kľúÄa: $keyid.';
+$messages['sigerror'] = 'Neoverený podpis. Interná chyba.';
+$messages['decryptok'] = 'Správa bola dešifrovaná.';
+$messages['decrypterror'] = 'Dešifrovanie nebolo úspešné.';
+$messages['decryptnokey'] = 'DeÅ¡ifrovanie nebolo úspeÅ¡né. Súkromný kÄ¾ÃºÄ sa nenaÅ¡iel. ID kľúÄa: $keyid.';
+$messages['decryptbadpass'] = 'Dešifrovanie bolo neúspešné. Neplatné heslo.';
+$messages['decryptnopass'] = 'DeÅ¡ifrovanie nebolo úspeÅ¡né. Vyžaduje sa kľúÄové heslo.';
+$messages['decryptpartial'] = 'Správa bola deÅ¡ifrovaná, ale ÄasÅ¥ jej tela nebola zaÅ¡ifrovaná.';
+$messages['signerror'] = 'Vloženie podpisu bolo neúspešné.';
+$messages['signnokey'] = 'Vloženie podpisu bolo neúspeÅ¡né. NenaÅ¡iel sa súkromný kľúÄ.';
+$messages['signbadpass'] = 'Podpisovanie bolo neúspešné. Neplatné heslo.';
+$messages['signnopass'] = 'Vloženie podpisu nebolo úspeÅ¡né. Vyžaduje sa kľúÄové heslo.';
+$messages['encrypterror'] = 'Šifrovanie nebolo úspešné.';
+$messages['encryptnokey'] = 'Å ifrovanie nebolo úspeÅ¡né. NenaÅ¡iel sa verejný kÄ¾ÃºÄ pre $email.';
+$messages['nokeysfound'] = 'NenaÅ¡li sa žiadne kľúÄe';
+$messages['keynotfound'] = 'KÄ¾ÃºÄ sa nenaÅ¡iel!';
+$messages['keyopenerror'] = 'Nemožno získaÅ¥ informácie o kľúÄi! Interná chyba.';
+$messages['keylisterror'] = 'Nemožno zostaviÅ¥ zoznam kľúÄov! Interná chyba.';
+$messages['keysimportfailed'] = 'Nemožno naimportovaÅ¥ kľúÄ(e)! Interná chyba.';
+$messages['keysimportsuccess'] = 'Import kľúÄa (kľúÄov) bol úspeÅ¡ný.Naimportované položky: $new, bez zmeny: $old.';
+$messages['keyremoving'] = 'Odstraňovanie kľúÄa (kľúÄov)...';
+$messages['keyremoveconfirm'] = 'Naozaj chcete vymazaÅ¥ vybraný kľúÄ/kľúÄe?';
+$messages['keyremovesuccess'] = 'Vymazanie kľúÄa (kľúÄov) bolo úspeÅ¡né.';
+$messages['keyremoveerror'] = 'Nemožno vymazaÅ¥ vybraný kÄ¾ÃºÄ (vybrané kľúÄe).';
+$messages['keyimporttext'] = 'Môžete naimportovaÅ¥ súkromné a verejné kľúÄe alebo podpisy pre odvolanie vo formáte ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Verejné kľúÄe môžete vyhľadávaÅ¥ podľa identifikátora kľúÄa, mena používateľa alebo e-mailovej adresy a potom ich priamo importovaÅ¥.';
+$messages['formerror'] = 'Prosím vyplňte formulár. Je nutné vyplniť všetky polia!';
+$messages['passwordsdiffer'] = 'Heslá sa nezhodujú!';
+$messages['keygenerateerror'] = 'Nepodarilo sa vygenerovaÅ¥ pár kľúÄov';
+$messages['keygeneratesuccess'] = 'Pár kľúÄov bol úspeÅ¡ne vygenerovaný a naimportovaný.';
+$messages['keygennosupport'] = 'Váš internetový prehliadaÄ nepodporuje kryptografiu. Nemožno vygenerovaÅ¥ pár kľúÄov!';
+$messages['noidentselected'] = 'Pre tento kÄ¾ÃºÄ si musíte vybraÅ¥ aspoň jednu identitu!';
+$messages['nonameident'] = 'Identita musí mať definované meno používateľa!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Fshehtëzim';
+$labels['enigmacerts'] = 'Dëshmi S/MIME';
+$labels['enigmakeys'] = 'Kyçe PGP';
+$labels['keysfromto'] = 'Kyçat nga $from deri në $to nga $count gjithsej';
+$labels['keyname'] = 'Emër';
+$labels['keyid'] = 'ID Kyçi';
+$labels['keyuserid'] = 'ID Përdoruesi';
+$labels['keytype'] = 'Lloj kyçi';
+$labels['fingerprint'] = 'Shenja gishtash';
+$labels['subkeys'] = 'Nënkyç';
+$labels['basicinfo'] = 'Informacion bazë';
+$labels['userids'] = 'Përdorues Shtesë';
+$labels['typepublickey'] = 'kyç publik';
+$labels['typekeypair'] = 'çift kyçesh';
+$labels['keyattfound'] = 'Ky mesazh përmban kyçin(et) PGP të bashkëngjitur.';
+$labels['keyattimport'] = 'Importo kyç(e)';
+$labels['typesign'] = 'Nënshkruaje';
+$labels['typeencrypt'] = 'Fshehtëzoje';
+$labels['typecert'] = 'Dëshmoje';
+$labels['typeauth'] = 'Mirëfilltësim';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritëm';
+$labels['subkeycreated'] = 'Krijuar më';
+$labels['subkeyexpires'] = 'Skadon më';
+$labels['subkeyusage'] = 'Përdorim';
+$labels['expiresnever'] = 'kurrë';
+$labels['unknown'] = 'i panjohur';
+$labels['uservalid'] = 'I vlefshëm';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'i vlefshëm';
+$labels['supportencryption'] = 'Aktivizo fshehtëzim dhe nënshkrim mesazhesh';
+$labels['supportsignatures'] = 'Aktivizo verifikim nënshkrimesh mesazhi';
+$labels['supportdecryption'] = 'Aktivizo shfshehtëzim mesazhi';
+$labels['signdefault'] = 'Si parazgjedhje, nënshkruaji krejt mesazhet';
+$labels['encryptdefault'] = 'Si parazgjedhje, fshehtëzoji krejt mesazhet';
+$labels['attachpubkeydefault'] = 'Bashkëngjite kyçin tim publik, si parazgjedhje';
+$labels['passwordtime'] = 'Fjalëkalimet e kyçeve privatë mbaji për';
+$labels['nminutes'] = '$m minutë(a)';
+$labels['wholesession'] = 'krejt sesionin';
+$labels['createkeys'] = 'Krijoni një çift të ri kyçesh';
+$labels['importkeys'] = 'Importo kyç(e)';
+$labels['exportkeys'] = 'Eksporto kyç(e)';
+$labels['keyactions'] = 'Veprime kyçesh…';
+$labels['keyremove'] = 'Hiqe';
+$labels['keydisable'] = 'Çaktivizoje';
+$labels['keyrevoke'] = 'Shfuqizoje';
+$labels['keysend'] = 'Dërgo kyç publik në mesazh';
+$labels['keychpass'] = 'Ndryshoni fjalëkalimin';
+$labels['newkeyident'] = 'Identitet';
+$labels['newkeypass'] = 'Fjalëkalim:';
+$labels['newkeypassconfirm'] = 'Ripohoni fjalëkalimin:';
+$labels['newkeysize'] = 'Madhësi kyçi:';
+$labels['key2048'] = '2048 bite - parazgjedhje';
+$labels['key4096'] = '4096 bite - më i sigurt';
+$labels['keygenerating'] = 'Po prodhohen kyçe…';
+$labels['encryptionoptions'] = 'Mundësi fshehtëzimi…';
+$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazh';
+$labels['signmsg'] = 'Nënshkruaje në mënyrë dixhitale këtë mesazh';
+$labels['enterkeypasstitle'] = 'Jepni frazëkalim kyçi';
+$labels['enterkeypass'] = 'Frazëkalimi është i nevojshëm për të zhbllokuar kyçin e fshehtë ($keyid) për përdoruesin: $user.';
+$labels['arialabelkeyexportoptions'] = 'Mundësi eksportimi kyçesh';
+$labels['attachpubkeymsg'] = 'Bashkëngjite kyçin tim publik';
+$labels['keyexportprompt'] = 'Doni të përfshihen kyçe të fshehtë te skedari i ruajtur për kyçe OpenPGP?';
+$labels['onlypubkeys'] = 'Eksporto Vetëm Kyçe Publikë';
+$labels['withprivkeys'] = 'Eksporto Kyçe të Fshehtë';
+$labels['findkey'] = 'Kërko në shërbyes kyçesh';
+$labels['keyimportlabel'] = 'Importo prej skedari';
+$labels['keyimportsearchlabel'] = 'Kërko në shërbyes kyçesh';
+$messages['sigvalid'] = 'Nënshkrim nga $sender i verifikuar.';
+$messages['sigvalidpartial'] = 'Nënshkrim nga $sender i verifikuar, por s’pati të nënshkruar pjesë lënde.';
+$messages['siginvalid'] = 'Nënshkrim  i pavlefshëm nga $sender.';
+$messages['sigunverified'] = 'Nënshkrim i paverifikuar. Dëshmia s’u verifikua. ID Dëshmie: $keyid.';
+$messages['signokey'] = 'Nënshkrim i paverifikuar. S’u gjet kyç. ID Kyçi: $keyid.';
+$messages['sigerror'] = 'Nënshkrim i paverifikuar. Gabim i brendshëm.';
+$messages['decryptok'] = 'Mesazhi u shfshehtëzua.';
+$messages['decrypterror'] = 'Shfshehtëzimi dështoi.';
+$messages['decryptnokey'] = 'Shfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.';
+$messages['decryptbadpass'] = 'Shfshehtëzimi dështoi. Fjalëkalim i pavlefshëm.';
+$messages['decryptnopass'] = 'Shfshehtëzimi dështoi. Lypset fjalëkalim kyçi.';
+$messages['decryptpartial'] = 'Mesazhi u shfshehtëzua, por një pjesë e lëndë s’u shfshehtëzua.';
+$messages['signerror'] = 'Nënshkrimi dështoi.';
+$messages['signnokey'] = 'Nënshkrimi dështoi. S’u gjet kyç privat.';
+$messages['signbadpass'] = 'Hyrja dështoi. Fjalëkalim i pavlefshëm.';
+$messages['signnopass'] = 'Nënshkrimi dështoi. Lypset fjalëkalim kyçi.';
+$messages['encrypterror'] = 'Fshehtëzimi dështoi.';
+$messages['encryptnokey'] = 'Fshehtëzimi dështoi. S’u gjet kyç publik për $email';
+$messages['nokeysfound'] = 'S’u gjetën kyçe';
+$messages['keynotfound'] = 'S’u gjet kyç!';
+$messages['keyopenerror'] = 'S’arrihet të merren të dhëna kyçi! Gabim i brendshëm.';
+$messages['keylisterror'] = 'S’arrihet të paraqiten kyçe! Gabim i brendshëm.';
+$messages['keysimportfailed'] = 'S’arrihet të importohen kyç(e)! Gabim i brendshëm.';
+$messages['keysimportsuccess'] = 'Kyçi(et) u importuan me sukses. Të importuar: $new, të pandryshuar: $old.';
+$messages['keyremoving'] = 'Po hiqet kyçi(et)…';
+$messages['keyremoveconfirm'] = 'Jeni i sigurt se doni të fshihet kyçi(et) i përzgjedhur?';
+$messages['keyremovesuccess'] = 'Kyçi(et) u fshi me sukses';
+$messages['keyremoveerror'] = 'S’arrihet të fshihen kyçin(et) e përzgjedhur?';
+$messages['keyimporttext'] = 'Mund të importoni kyç(e) privatë dhe publikë ose nënshkrime shfuqizimesh në formatin ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Për kyçe publikë mund të kërkoni sipas identifikuesi kyçi, emri përdoruesi ose adrese email dhe mandej t’i importoni ata drejtpërsëdrejti.';
+$messages['formerror'] = 'Ju lutemi, plotësoni formularin. Janë të domosdoshme krejt fushat!';
+$messages['passwordsdiffer'] = 'Fjalëkalimet nuk përputhen!';
+$messages['keygenerateerror'] = 'Dështoi prodhimi i një çifti kyçesh';
+$messages['keygeneratesuccess'] = 'U prodhua dhe importua me sukses një çift kyçesh.';
+$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. S’arrihet të prodhohet çift kyçesh!';
+$messages['noidentselected'] = 'Duhet të përzgjidhni të paktën një identitet për kyçin!';
+$messages['nonameident'] = 'Identiteti duhet të ketë të përkufizuar një emër përdoruesi!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Kryptering';
+$labels['enigmacerts'] = 'S/MIME-certifikat';
+$labels['enigmakeys'] = 'PGP-nycklar';
+$labels['keysfromto'] = 'Nyckel $from till $to av $count';
+$labels['keyname'] = 'Namn';
+$labels['keyid'] = 'Nyckel-ID';
+$labels['keyuserid'] = 'Användar-ID';
+$labels['keytype'] = 'Nyckeltyp';
+$labels['fingerprint'] = 'Fingeravtryck';
+$labels['subkeys'] = 'Undernycklar';
+$labels['basicinfo'] = 'Grundläggande information';
+$labels['userids'] = 'Ytterligare användare';
+$labels['typepublickey'] = 'offentlig nyckel';
+$labels['typekeypair'] = 'nyckelpar';
+$labels['keyattfound'] = 'Meddelandet innehåller en eller flera bifogade PGP-nycklar.';
+$labels['keyattimport'] = 'Importera nyckel';
+$labels['typesign'] = 'Signera';
+$labels['typeencrypt'] = 'Kryptera';
+$labels['typecert'] = 'Intyga';
+$labels['typeauth'] = 'Autentisering';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Algoritm';
+$labels['subkeycreated'] = 'Skapad';
+$labels['subkeyexpires'] = 'Utgår';
+$labels['subkeyusage'] = 'Användning';
+$labels['expiresnever'] = 'aldrig';
+$labels['unknown'] = 'okänd';
+$labels['uservalid'] = 'Giltig';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'giltig';
+$labels['supportencryption'] = 'Aktivera kryptering och signering av meddelanden';
+$labels['supportsignatures'] = 'Aktivera signaturverifiering i meddelanden';
+$labels['supportdecryption'] = 'Aktivera dekryptering av meddelanden';
+$labels['signdefault'] = 'Signera alla meddelanden';
+$labels['encryptdefault'] = 'Kryptera alla meddelanden';
+$labels['attachpubkeydefault'] = 'Bifoga alltid min offentliga nyckel';
+$labels['passwordtime'] = 'Använd lösenord till privat nyckel under';
+$labels['nminutes'] = '$m min';
+$labels['wholesession'] = 'Hela sessionen';
+$labels['createkeys'] = 'Nytt nyckelpar ';
+$labels['importkeys'] = 'Importera nycklar';
+$labels['exportkeys'] = 'Exportera nycklar';
+$labels['keyactions'] = 'Hantera nycklar...';
+$labels['keyremove'] = 'Ta bort';
+$labels['keydisable'] = 'Inaktivera';
+$labels['keyrevoke'] = 'Upphäv';
+$labels['keysend'] = 'Skicka offentlig nyckel i meddelande';
+$labels['keychpass'] = 'Ändra lösenord';
+$labels['newkeyident'] = 'Identitet';
+$labels['newkeypass'] = 'Lösenord';
+$labels['newkeypassconfirm'] = 'Bekräfta lösenord';
+$labels['newkeysize'] = 'Nyckelstorlek';
+$labels['key2048'] = '2048 bitar - standard';
+$labels['key4096'] = '4096 bitar - säkrare';
+$labels['keygenerating'] = 'Skapar nycklar...';
+$labels['encryptionoptions'] = 'Krypteringsalternativ...';
+$labels['encryptmsg'] = 'Kryptera meddelandet';
+$labels['signmsg'] = 'Signera meddelandet';
+$labels['sendunencrypted'] = 'Skicka okrypterat';
+$labels['enterkeypasstitle'] = 'Ange nyckelns lösenord';
+$labels['enterkeypass'] = 'Lösenord behövs för att låsa upp den privata nyckeln ($keyid) för användare $user.';
+$labels['arialabelkeyexportoptions'] = 'Exportalternativ för nycklar';
+$labels['attachpubkeymsg'] = 'Bifoga min offentliga nyckel';
+$labels['keyexportprompt'] = 'Inkludera privata nycklar i den sparade nyckelfilen för OpenPGP?';
+$labels['onlypubkeys'] = 'Exportera endast offentliga nycklar';
+$labels['withprivkeys'] = 'Exportera privata nycklar';
+$labels['findkey'] = 'Sök nyckel på en eller flera servrar';
+$labels['keyimportlabel'] = 'Importera från fil';
+$labels['keyimportsearchlabel'] = 'Sök nyckel på en eller flera servrar';
+$messages['sigvalid'] = 'Signatur verifierad för $sender.';
+$messages['sigvalidpartial'] = 'Signatur verifierad för $sender, men meddelandet var delvis osignerat.';
+$messages['siginvalid'] = 'Ogiltig signatur från $sender.';
+$messages['sigunverified'] = 'Overifierad signatur. Certifikatet är inte verifierat. Certifikat-ID: $keyid.';
+$messages['signokey'] = 'Overifierad signatur. Offentlig nyckel otillgänglig. Nyckel-ID: $keyid.';
+$messages['sigerror'] = 'Overifierad signatur. Internt fel.';
+$messages['decryptok'] = 'Meddelandet är dekrypterat.';
+$messages['decrypterror'] = 'Dekrypteringen misslyckades.';
+$messages['decryptnokey'] = 'Dekrypteringen misslyckades. Privat nyckel otillgänglig. Nyckel-ID: $keyid.';
+$messages['decryptbadpass'] = 'Dekrypteringen misslyckades. Fel lösenord.';
+$messages['decryptnopass'] = 'Dekrypteringen misslyckades. Ange nyckelns lösenord.';
+$messages['decryptpartial'] = 'Meddelandet är dekrypterat, men meddelandet var delvis okrypterat.';
+$messages['signerror'] = 'Signeringen misslyckades.';
+$messages['signnokey'] = 'Signeringen misslyckades. Privat nyckel otillgänglig.';
+$messages['signbadpass'] = 'Signeringen misslyckades. Fel lösenord.';
+$messages['signnopass'] = 'Signeringen misslyckades. Ange nyckelns lösenord.';
+$messages['encrypterror'] = 'Krypteringen misslyckades.';
+$messages['encryptnokey'] = 'Krypteringen misslyckades. Offentlig nyckel otillgänglig för $email.';
+$messages['nokeysfound'] = 'Inga nycklar hittades.';
+$messages['keynotfound'] = 'Nyckeln hittades inte!';
+$messages['keyopenerror'] = 'Nyckelinformation kunde inte hämtas. Internt fel.';
+$messages['keylisterror'] = 'Nycklar kunde inte listas. Internt fel.';
+$messages['keysimportfailed'] = 'Nycklar kunde inte importeras. Internt fel.';
+$messages['keysimportsuccess'] = 'Nycklar har importerats. Importerade: $new, oförändrade: $old.';
+$messages['keyremoving'] = 'Tar bort nycklar...';
+$messages['keyremoveconfirm'] = 'Vill du ta bort markerade nycklar?';
+$messages['keyremovesuccess'] = 'Nycklar borttagna.';
+$messages['keyremoveerror'] = 'Nycklarna kunde inte tas bort.';
+$messages['keyimporttext'] = 'Privata och offentliga nycklar eller återkallande av signaturer kan importeras i formatet ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Offentlig nyckel kan sökas genom att ange identifierare, användarnamn eller mailadress, för att sedan importeras direkt.';
+$messages['formerror'] = 'Fyll i formulärets samtliga fält.';
+$messages['passwordsdiffer'] = 'Bekräftelsen av lösenordet stämmer inte.';
+$messages['keygenerateerror'] = 'Nyckelpar kunde inte skapas';
+$messages['keygeneratesuccess'] = 'Nyckelpar skapat och importerat.';
+$messages['keygennosupport'] = 'Webbläsaren saknar krypteringsfunktion. Nyckelpar kunde inte skapas.';
+$messages['noidentselected'] = 'Minst en identitet till nyckeln måste väljas!';
+$messages['nonameident'] = 'Användarnamn måste anges.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'Åžifreleme';
+$labels['enigmacerts'] = 'S/MIME Sertifikaları';
+$labels['enigmakeys'] = 'PGP Anahtarları';
+$labels['keysfromto'] = 'Anahtarlar $from - $to / $count';
+$labels['keyname'] = 'Ad';
+$labels['keyid'] = 'Anahtar Kodu';
+$labels['keyuserid'] = 'Kullanıcı Kodu';
+$labels['keytype'] = 'Anahtar türü';
+$labels['fingerprint'] = 'Parmak izi';
+$labels['subkeys'] = 'Alt anahtarlar';
+$labels['basicinfo'] = 'Temel Bilgiler';
+$labels['userids'] = 'Ek Kullanıcılar';
+$labels['typepublickey'] = 'Genel Anahtar';
+$labels['typekeypair'] = 'Anahtar çifti';
+$labels['keyattfound'] = 'İleti ekinde PGP anahtarları var.';
+$labels['keyattimport'] = 'Anahtar(lar)ı içe aktar.';
+$labels['typesign'] = 'Ä°mza';
+$labels['typeencrypt'] = 'Åžifrele';
+$labels['typecert'] = 'Belgele';
+$labels['typeauth'] = 'Kimlik Doğrulaması';
+$labels['subkeyid'] = 'Kod';
+$labels['subkeyalgo'] = 'Algoritma';
+$labels['subkeycreated'] = 'OluÅŸturuldu';
+$labels['subkeyexpires'] = 'Geçerlilik süresi';
+$labels['subkeyusage'] = 'Kullanım';
+$labels['expiresnever'] = 'asla';
+$labels['unknown'] = 'bilinmeyen';
+$labels['uservalid'] = 'Geçerli';
+$labels['userid'] = 'Kod';
+$labels['valid'] = 'geçerli';
+$labels['supportencryption'] = 'İletiler şifrelensin ve imzalansın';
+$labels['supportsignatures'] = 'İleti imzaları doğrulansın';
+$labels['supportdecryption'] = 'İleti şifreleri çözülsün';
+$labels['signdefault'] = 'Varsayılan olarak tüm iletiler imzalansın';
+$labels['encryptdefault'] = 'Varsayılan olarak tüm iletiler şifrelensin';
+$labels['attachpubkeydefault'] = 'Varsayılan olarak PGP anahtarı eklensin';
+$labels['passwordtime'] = 'Parolalar için özel anahtarları tut';
+$labels['nminutes'] = '$m dakika';
+$labels['wholesession'] = 'tüm oturum';
+$labels['createkeys'] = 'Yeni anahtar çifti oluştur';
+$labels['importkeys'] = 'Anahtar(lar)ı içe aktar';
+$labels['exportkeys'] = 'Anahtar(lar)ı dışa aktar';
+$labels['keyactions'] = 'Anahtar iÅŸlemler...';
+$labels['keyremove'] = 'Kaldır';
+$labels['keydisable'] = 'Devre dışı';
+$labels['keyrevoke'] = 'Geri al';
+$labels['keysend'] = 'İletiyle birlikte ortak anahtar gönderilsin';
+$labels['keychpass'] = 'Parolayı değiştir';
+$labels['newkeyident'] = 'Kimlik:';
+$labels['newkeypass'] = 'Parola:';
+$labels['newkeypassconfirm'] = 'Parola Onayı:';
+$labels['newkeysize'] = 'Anahtar uzunluÄŸu:';
+$labels['key2048'] = '2048 bit-Varsayılan';
+$labels['key4096'] = '4096 bit- daha güvenli';
+$labels['keygenerating'] = 'Anahtarlar oluÅŸtur...';
+$labels['encryptionoptions'] = 'Şifreleme ayarları...';
+$labels['encryptmsg'] = 'Bu iletiyi ÅŸifrele';
+$labels['signmsg'] = 'Ä°letiyi dijital imzala';
+$labels['sendunencrypted'] = 'Şifrelenmemiş olarak gönder';
+$labels['enterkeypasstitle'] = 'Anahtar sözcüğünüzü yazın';
+$labels['enterkeypass'] = 'Gizli anahtarı ($keyid) açmak için $user kullanıcısının anahtar sözcüğü gerekli.';
+$labels['arialabelkeyexportoptions'] = 'Anahtar dışa aktarma ayarları';
+$labels['attachpubkeymsg'] = 'Genel anahtarımı ekle';
+$labels['keyexportprompt'] = 'OpenPGP anahtar dosyasına gizli anahtarları da  kaydetmek istiyor musunuz?';
+$labels['onlypubkeys'] = 'Yalnız Genel Anahtarları Dışa Aktar';
+$labels['withprivkeys'] = 'Gizli Anahtarları Dışa Aktar';
+$labels['findkey'] = 'Anahtarı sunucu(lar)da ara';
+$labels['keyimportlabel'] = 'Dosyadan içe aktar';
+$labels['keyimportsearchlabel'] = 'Anahtarı sunucu(lar)da ara';
+$messages['sigvalid'] = '$sender imzası geçerli.';
+$messages['sigvalidpartial'] = '$sender imzası doğrulandı, ancak metnin tümü imzalanmamış.';
+$messages['siginvalid'] = '$sender imzası geçersiz.';
+$messages['sigunverified'] = 'İmza doğrulanmamış. Sertifika doğrulanmamış. Sertifika Kodu: $keyid.';
+$messages['signokey'] = 'İmza doğrulanmamış. Genel anahtar bulunamadı. Anahtar Kodu: $keyid.';
+$messages['sigerror'] = 'Sorun var! İmza doğrulanmamış.';
+$messages['decryptok'] = 'İleti şifresi çözüldü.';
+$messages['decrypterror'] = 'Şifre çözülemedi.';
+$messages['decryptnokey'] = 'Şifre çözülemedi. Özel anahtar bulunamadı. Anahtar Kodu: $keyid.';
+$messages['decryptbadpass'] = 'Şifre çözülemedi. Parola geçersiz.';
+$messages['decryptnopass'] = 'Şifre çözülemedi. Anahtar parola gerekli.';
+$messages['decryptpartial'] = 'İletinin şifresi çözüldü, fakat metnin tümü şifrelenmemiş.';
+$messages['signerror'] = 'İmzalama geçersiz.';
+$messages['signnokey'] = 'İmzalanamadı. Özel anahtar bulunamadı.';
+$messages['signbadpass'] = 'İmzalanamadı. Parola geçersiz.';
+$messages['signnopass'] = 'İmzalanamadı. Anahtar parola gerekli.';
+$messages['encrypterror'] = 'Åžifrelenemedi.';
+$messages['encryptnokey'] = 'Şifrelenemedi. Genel anahtar $email içinde bulunamadı.';
+$messages['nokeysfound'] = 'Anahtarlar bulunamadı';
+$messages['keynotfound'] = 'Anahtar buunamadı!';
+$messages['keyopenerror'] = 'Sorun var! Anahtar bilgileri alınamıyor.';
+$messages['keylisterror'] = 'Sorun var! Anahtar listesi yok.';
+$messages['keysimportfailed'] = 'Sorun var! Anahtar(lar) aktarılamıyor.';
+$messages['keysimportsuccess'] = 'Anahtar(lar) içe aktarıldı. İçe Aktarılan: $new, Değişmeyen: $old.';
+$messages['keyremoving'] = 'Anahtar(lar) kaldırılıyor...';
+$messages['keyremoveconfirm'] = 'Seçilmiş anahtar(lar)ı silmek istediğinize emin misiniz?';
+$messages['keyremovesuccess'] = 'Anahtar(lar) silindi';
+$messages['keyremoveerror'] = 'Anahtar(lar) silinemedi.';
+$messages['keyimporttext'] = 'Özel ve genel anahtar(lar)ı içe aktarabilir ya da ASCII-Armor biçimindeki imzanızı geri çekebilirsiniz.';
+$messages['keyimportsearchtext'] = 'Genel anahtarları, anahtar tanımlayıcı, e-posta ya da kullanıcı adına göre arayarak doğrudan içe aktarabilirsiniz.';
+$messages['formerror'] = 'Formun doldurun. Tüm alanlar zorunludur!';
+$messages['passwordsdiffer'] = 'Parola ile onayı aynı değil!';
+$messages['keygenerateerror'] = 'Anahtar çifti oluşturulamadı.';
+$messages['keygeneratesuccess'] = 'Anahtar çiftiniz oluşturuldu ve içe aktarıldı.';
+$messages['keygennosupport'] = 'Tarayıcınız şifrelemeyi desteklemiyor. Anahtar çifti oluşturulamıyor.';
+$messages['noidentselected'] = 'Anahtar için en az bir kimlik seçmelisiniz!';
+$messages['nonameident'] = 'Kimlik için bir kullanıcı adı belirtmelisiniz!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = 'ШифруваннÑ';
+$labels['enigmacerts'] = 'Сертифікати S/MIME';
+$labels['enigmakeys'] = 'PGP-ключі';
+$labels['keysfromto'] = 'Ключі з $from до $to з $count';
+$labels['keyname'] = 'Ім\'Ñ';
+$labels['keyid'] = 'ID ключа';
+$labels['keyuserid'] = 'ID кориÑтувача';
+$labels['keytype'] = 'Тип ключа';
+$labels['fingerprint'] = 'Відбиток';
+$labels['subkeys'] = 'Субключі';
+$labels['basicinfo'] = 'Базова інформаціÑ';
+$labels['userids'] = 'Додаткові кориÑтувачі';
+$labels['typepublickey'] = 'публічний ключ';
+$labels['typekeypair'] = 'пара ключів';
+$labels['keyattfound'] = 'Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–Ñтить прикріплений PGP-ключ(Ñ–).';
+$labels['keyattimport'] = 'Імпортувати ключ(і)';
+$labels['typesign'] = 'ПідпиÑати';
+$labels['typeencrypt'] = 'Шифрувати';
+$labels['typecert'] = 'Сертифікувати';
+$labels['typeauth'] = 'ÐвтентифікаціÑ';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = 'Ðлгоритм';
+$labels['subkeycreated'] = 'Створено';
+$labels['subkeyexpires'] = 'ЗакінчуєтьÑÑ';
+$labels['subkeyusage'] = 'ВикориÑтаннÑ';
+$labels['expiresnever'] = 'ніколи';
+$labels['unknown'] = 'невідомо';
+$labels['uservalid'] = 'ДійÑний';
+$labels['userid'] = 'ID';
+$labels['valid'] = 'дійÑний';
+$labels['supportencryption'] = 'Увімкнути ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– підпиÑÐ°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ';
+$labels['supportsignatures'] = 'Увімкнути верифікацію підпиÑів повідомленьй';
+$labels['supportdecryption'] = 'Увімкнути Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ';
+$labels['signdefault'] = 'Типово підпиÑувати уÑÑ– лиÑти';
+$labels['encryptdefault'] = 'Типово шифрувати уÑÑ– повідомленнÑ';
+$labels['attachpubkeydefault'] = 'Приєднати мій публічний типовий PGP ключ';
+$labels['passwordtime'] = 'Зберігати паролі приватних ключів';
+$labels['nminutes'] = '$n хвилин(и)';
+$labels['wholesession'] = 'уÑÑŽ ÑеÑÑ–ÑŽ';
+$labels['createkeys'] = 'Створити нову пару ключів';
+$labels['importkeys'] = 'Імпортувати ключ(і)';
+$labels['exportkeys'] = 'ЕкÑпортувати ключ(Ñ–)';
+$labels['keyactions'] = 'Ключові дії...';
+$labels['keyremove'] = 'Вилучити';
+$labels['keydisable'] = 'Вимкнути';
+$labels['keyrevoke'] = 'Відкликати';
+$labels['keysend'] = 'ÐадіÑлати публічний ключ в повідомленні';
+$labels['keychpass'] = 'Змінити пароль';
+$labels['newkeyident'] = 'Профіль:';
+$labels['newkeypass'] = 'Пароль:';
+$labels['newkeypassconfirm'] = 'Підтвердіть пароль:';
+$labels['newkeysize'] = 'Розмір ключа:';
+$labels['key2048'] = '2048 бітів — дефолтно';
+$labels['key4096'] = '4096 бітів — безпечніше';
+$labels['keygenerating'] = 'Ð“ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð²â€¦';
+$labels['encryptionoptions'] = 'Опції шифруваннÑ…';
+$labels['encryptmsg'] = 'Шифрувати це повідомленнÑ';
+$labels['signmsg'] = 'ПоÑтавити цифровий Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð¿Ñ–Ð´ повідомленнÑм';
+$labels['enterkeypasstitle'] = 'Введіть фразу-пароль ключа';
+$labels['enterkeypass'] = 'Ðеобхідна фраза-пароль Ð´Ð»Ñ Ð²Ñ–Ð´Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñекретного ключа ($keyid) Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: $user.';
+$labels['arialabelkeyexportoptions'] = 'Опції екÑпорту ключів';
+$labels['attachpubkeymsg'] = 'Приєднати мій публічний ключ';
+$labels['keyexportprompt'] = 'Бажаєте включити приватні ключі у файл-ключів OpenPGP?';
+$labels['onlypubkeys'] = 'ЕкÑпортувати публічні ключі';
+$labels['withprivkeys'] = 'ЕкÑпортувати приватні ключі';
+$labels['findkey'] = 'Пошук по ключовому(вих) Ñерверах';
+$labels['keyimportlabel'] = 'Імпортувати з файлу';
+$labels['keyimportsearchlabel'] = 'Пошук по ключовому(вих) Ñерверах';
+$messages['sigvalid'] = 'Перевірений Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð²Ñ–Ð´ $sender.';
+$messages['sigvalidpartial'] = 'Перевірений Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð²Ñ–Ð´ $sender, але чаÑтина тіла Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ було підпиÑано.';
+$messages['siginvalid'] = 'ÐедійÑний Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð²Ñ–Ð´ $sender.';
+$messages['sigunverified'] = 'Ðеперевірений підпиÑ. Сертифікат не перевірено. ID Ñертифіката: $keyid.';
+$messages['signokey'] = 'Ðеперевірений підпиÑ. Публічний ключ не знайдено. ID ключа: $keyid.';
+$messages['sigerror'] = 'Ðеперевірений підпиÑ. Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.';
+$messages['decryptok'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾.';
+$messages['decrypterror'] = 'Ð Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ.';
+$messages['decryptnokey'] = 'Ð Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Приватний ключ не знайдено. ID ключа: $keyid.';
+$messages['decryptnopass'] = 'Ð Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Потрібен пароль ключа.';
+$messages['decryptpartial'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ðµ, але чаÑтина тіла не було зашифроване.';
+$messages['signerror'] = 'ПідпиÑÐ°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ.';
+$messages['signnokey'] = 'ПідпиÑÐ°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Приватний ключ не знайдено.';
+$messages['signnopass'] = 'ПідпиÑÐ°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Потрібен пароль ключа.';
+$messages['encrypterror'] = 'Ð¨Ð¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. ';
+$messages['encryptnokey'] = 'Ð¨Ð¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Публічний ключ не знайдено Ð´Ð»Ñ $email.';
+$messages['nokeysfound'] = 'Ðе знайдено ключів';
+$messages['keynotfound'] = 'Ключ не знайдено!';
+$messages['keyopenerror'] = 'Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ інформацію про ключ! Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.';
+$messages['keylisterror'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð²ÐµÑти перелік ключів! Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.';
+$messages['keysimportfailed'] = 'Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ ключ(Ñ–)! Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.';
+$messages['keysimportsuccess'] = 'Ключ(Ñ–) імпотровано уÑпішно. Імпортовано: $new, без змін: $old.';
+$messages['keyremoving'] = 'Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°(-ів)…';
+$messages['keyremoveconfirm'] = 'Ви дійÑно хочете видалити обраний(-Ñ–) ключ(Ñ–)?';
+$messages['keyremovesuccess'] = 'Ключ(Ñ–) вилучено уÑпішно';
+$messages['keyremoveerror'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ обраний(-Ñ–) ключ(Ñ–).';
+$messages['keyimporttext'] = 'Ви можете імпортувати приватні та публічні ключі чи підпиÑи ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ форматі ASCII-Armor.';
+$messages['keyimportsearchtext'] = 'Ви можете здійÑнювати пошук відкритих ключів за допомогою ідентифікатора ключа, ім\'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або адреÑи електронної пошти, а потім імпортувати Ñ—Ñ….';
+$messages['formerror'] = 'Будь лаÑка, заповніть форму. УÑÑ– Ð¿Ð¾Ð»Ñ Ð¾Ð±Ð¾Ð²\'Ñзкові!';
+$messages['passwordsdiffer'] = 'Паролі не Ñпівпадають!';
+$messages['keygenerateerror'] = 'Ðе вдалоÑÑ Ð·Ð³ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ñ‚Ð¸ пару ключів';
+$messages['keygeneratesuccess'] = 'Пару ключів уÑпішно згенеровано й імпортовано.';
+$messages['keygennosupport'] = 'Ваш веб-браузер не підтримує криптографію. Ðе вдалоÑÑ Ð·Ð³ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ñ‚Ð¸ пару ключів!';
+$messages['noidentselected'] = 'Ви повинні вибрати принаймні, один ідентифікатор Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð°!';
+$messages['nonameident'] = 'Профіль повинен мати вказане ім\'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = '加密';
+$labels['enigmacerts'] = 'S/MIME è¯ä¹¦';
+$labels['enigmakeys'] = 'PGP 密钥';
+$labels['keysfromto'] = '从 $from 到 $to,共计 $count 个密钥';
+$labels['keyname'] = 'å称';
+$labels['keyid'] = '密钥 ID';
+$labels['keyuserid'] = '用户 ID';
+$labels['keytype'] = '密钥类型';
+$labels['fingerprint'] = '指纹';
+$labels['subkeys'] = 'å­å¯†é’¥';
+$labels['basicinfo'] = '基本信æ¯';
+$labels['userids'] = '其他用户';
+$labels['typepublickey'] = '公钥';
+$labels['typekeypair'] = '密钥对';
+$labels['keyattfound'] = '此消æ¯åŒ…å«é™„加的 PGP 密钥。';
+$labels['keyattimport'] = '导入密钥';
+$labels['typesign'] = 'ç­¾å';
+$labels['typeencrypt'] = '加密';
+$labels['typecert'] = 'è¯æ˜Ž';
+$labels['typeauth'] = '身份验è¯';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = '算法';
+$labels['subkeycreated'] = '创建于';
+$labels['subkeyexpires'] = '过期时间';
+$labels['subkeyusage'] = '用法';
+$labels['expiresnever'] = '从ä¸';
+$labels['unknown'] = '未知';
+$labels['uservalid'] = '有效';
+$labels['userid'] = 'ID';
+$labels['valid'] = '有效';
+$labels['supportencryption'] = 'å¯ç”¨é‚®ä»¶åŠ å¯†å’Œç­¾å';
+$labels['supportsignatures'] = 'å¯ç”¨é‚®ä»¶ç­¾å验è¯';
+$labels['supportdecryption'] = 'å¯ç”¨é‚®ä»¶è§£å¯†';
+$labels['signdefault'] = '默认签å所有邮件';
+$labels['encryptdefault'] = '默认加密所有邮件';
+$labels['attachpubkeydefault'] = '默认附加我的公共 PGP 密钥';
+$labels['passwordtime'] = 'ä¿æŒç§é’¥å¯†ç ';
+$labels['nminutes'] = '$m 分钟';
+$labels['wholesession'] = '整个会è¯';
+$labels['createkeys'] = '创建新密钥对';
+$labels['importkeys'] = '导入密钥';
+$labels['exportkeys'] = '加密密钥';
+$labels['keyactions'] = '密钥æ“作...';
+$labels['keyremove'] = '移除';
+$labels['keydisable'] = 'ç¦ç”¨';
+$labels['keyrevoke'] = '废除';
+$labels['keysend'] = '在邮件中å‘é€å…¬é’¥';
+$labels['keychpass'] = '修改密ç ';
+$labels['newkeyident'] = '身份:';
+$labels['newkeypass'] = '密ç ï¼š';
+$labels['newkeypassconfirm'] = '确认密ç ï¼š';
+$labels['newkeysize'] = '密钥大å°ï¼š';
+$labels['key2048'] = '2048 ä½ - 默认';
+$labels['key4096'] = '4096 ä½ - 更安全';
+$labels['keygenerating'] = '正在生æˆå¯†é’¥...';
+$labels['encryptionoptions'] = '加密选项...';
+$labels['encryptmsg'] = '加密此邮件';
+$labels['signmsg'] = 'æ•°å­—ç­¾å此邮件';
+$labels['enterkeypasstitle'] = '请输入密钥å£ä»¤';
+$labels['enterkeypass'] = '需è¦å£ä»¤è§£é”ç§é’¥ ($keyid),用户:$user。';
+$labels['arialabelkeyexportoptions'] = '密钥导出选项';
+$labels['attachpubkeymsg'] = '附加我的公钥';
+$labels['keyexportprompt'] = '您è¦åœ¨ä¿å­˜çš„ OpenPGP 密钥文件中包å«ç§é’¥å—?';
+$labels['onlypubkeys'] = '仅导出公钥';
+$labels['withprivkeys'] = '导出ç§é’¥';
+$labels['findkey'] = 'æœç´¢å¯†é’¥æœåŠ¡å™¨';
+$labels['keyimportlabel'] = '从文件导入';
+$labels['keyimportsearchlabel'] = '在密钥æœåŠ¡å™¨ä¸Šæœç´¢';
+$messages['sigvalid'] = '已验è¯æ¥è‡ª $sender çš„ç­¾å。';
+$messages['sigvalidpartial'] = '已验è¯æ¥è‡ª $sender çš„ç­¾å,但主体部分未被签å。';
+$messages['siginvalid'] = '无效的æ¥è‡ª $sender çš„ç­¾å。';
+$messages['sigunverified'] = '未验è¯ç­¾å。è¯ä¹¦æœªéªŒè¯ã€‚è¯ä¹¦ ID: $keyid。';
+$messages['signokey'] = '未验è¯ç­¾å。公钥未找到。密钥 ID: $keyid。';
+$messages['sigerror'] = '未验è¯ç­¾å。内部错误。';
+$messages['decryptok'] = '邮件已解密';
+$messages['decrypterror'] = '解密失败。';
+$messages['decryptnokey'] = '解密失败。ç§é’¥æœªæ‰¾åˆ°ã€‚密钥 ID: $keyid。';
+$messages['decryptbadpass'] = '解密失败。密ç æ— æ•ˆã€‚';
+$messages['decryptnopass'] = '解密失败。需è¦å¯†é’¥å¯†ç ã€‚';
+$messages['decryptpartial'] = '邮件已解密,但主体部分未被加密。';
+$messages['signerror'] = 'ç­¾å失败。';
+$messages['signnokey'] = 'ç­¾å失败。ç§é’¥æœªæ‰¾åˆ°ã€‚';
+$messages['signbadpass'] = 'ç­¾å失败。密ç æ— æ•ˆã€‚';
+$messages['signnopass'] = 'ç­¾å失败。需è¦å¯†é’¥å¯†ç ã€‚';
+$messages['encrypterror'] = '加密失败。';
+$messages['encryptnokey'] = '加密失败。用于 $email 的公钥未找到。';
+$messages['nokeysfound'] = '没有找到密钥';
+$messages['keynotfound'] = '密钥未找到ï¼';
+$messages['keyopenerror'] = '无法获å–密钥信æ¯ï¼å†…部错误。';
+$messages['keylisterror'] = '无法列出密钥。内部错误。';
+$messages['keysimportfailed'] = '无法导入密钥ï¼å†…部错误。';
+$messages['keysimportsuccess'] = '密钥导入æˆåŠŸã€‚已导入 $new 项,未å˜æ›´ $old 项。';
+$messages['keyremoving'] = '正在移除密钥...';
+$messages['keyremoveconfirm'] = '您确定å—,确定删除选定密钥?';
+$messages['keyremovesuccess'] = '密钥删除æˆåŠŸ';
+$messages['keyremoveerror'] = '无法删除选定密钥。';
+$messages['keyimporttext'] = '您å¯ä»¥å¯¼å…¥ç§é’¥å’Œå…¬é’¥æˆ–废除 ASCII-Armor æ ¼å¼çš„ç­¾å。';
+$messages['keyimportsearchtext'] = '您å¯ä»¥æ ¹æ®å¯†é’¥æ ‡è¯†ç¬¦ã€ç”¨æˆ·å或电å­é‚®ä»¶åœ°å€æœç´¢å…¬é’¥å’Œç›´æŽ¥å¯¼å…¥å®ƒä»¬ã€‚';
+$messages['formerror'] = '请填写表å•ã€‚所有字段都为必填ï¼';
+$messages['passwordsdiffer'] = '密ç ä¸åŒ¹é…ï¼';
+$messages['keygenerateerror'] = '生æˆå¯†é’¥å¯¹å¤±è´¥';
+$messages['keygeneratesuccess'] = '密钥对生æˆå’Œå¯¼å…¥æˆåŠŸã€‚';
+$messages['keygennosupport'] = '您的网页æµè§ˆå™¨ä¸æ”¯æŒåŠ å¯†ã€‚无法生æˆå¯†é’¥å¯¹ï¼';
+$messages['noidentselected'] = '您必须为该密钥选择至少一个身份ï¼';
+$messages['nonameident'] = '身份必须有一个用户åï¼';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | plugins/enigma/localization/<lang>.inc                                |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail ACL plugin                 |
+ | Copyright (C) 2012-2016, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
+*/
+$labels['encryption'] = '加密';
+$labels['enigmacerts'] = 'S/MIME 憑證';
+$labels['enigmakeys'] = 'PGP 金鑰';
+$labels['keysfromto'] = '金鑰:由 $from 至 $to (共 $count 個)';
+$labels['keyname'] = 'å稱';
+$labels['keyid'] = '金鑰 ID';
+$labels['keyuserid'] = '使用者 ID';
+$labels['keytype'] = '金鑰類型';
+$labels['fingerprint'] = '指紋';
+$labels['subkeys'] = 'å­é‡‘é‘°';
+$labels['basicinfo'] = '基本資訊';
+$labels['userids'] = 'é¡å¤–使用者';
+$labels['typepublickey'] = '公鑰';
+$labels['typekeypair'] = '金鑰å°';
+$labels['keyattfound'] = '本郵件有附帶的 PGP 金鑰';
+$labels['keyattimport'] = '匯入金鑰';
+$labels['typesign'] = '簽署';
+$labels['typeencrypt'] = '加密';
+$labels['typecert'] = 'èªè­‰';
+$labels['typeauth'] = '身份核å°';
+$labels['subkeyid'] = 'ID';
+$labels['subkeyalgo'] = '演算法';
+$labels['subkeycreated'] = '建立時間:';
+$labels['subkeyexpires'] = 'éŽæœŸæ™‚間:';
+$labels['subkeyusage'] = '使用情æ³';
+$labels['expiresnever'] = '從未使用';
+$labels['unknown'] = 'ä¸æ˜Ž';
+$labels['uservalid'] = '有效';
+$labels['userid'] = 'ID';
+$labels['valid'] = '有效';
+$labels['supportencryption'] = '啟用郵件加密åŠç°½ç½²';
+$labels['supportsignatures'] = '啟用郵件簽åé©—è­‰';
+$labels['supportdecryption'] = '啟用郵件解密';
+$labels['signdefault'] = 'é è¨­ç°½ç½²æ‰€æœ‰éƒµä»¶';
+$labels['encryptdefault'] = 'é è¨­åŠ å¯†æ‰€æœ‰éƒµä»¶';
+$labels['attachpubkeydefault'] = 'é è¨­é™„上我的公開 PGP 金鑰';
+$labels['passwordtime'] = '為以下項目ä¿ç•™ç§å¯†é‡‘鑰密碼:';
+$labels['nminutes'] = '$m 分é˜';
+$labels['wholesession'] = '整個工作階段';
+$labels['createkeys'] = '建立新的金鑰å°';
+$labels['importkeys'] = '匯入金鑰';
+$labels['exportkeys'] = '匯出金鑰';
+$labels['keyactions'] = '金鑰動作...';
+$labels['keyremove'] = '移除';
+$labels['keydisable'] = 'åœç”¨';
+$labels['keyrevoke'] = '撤銷';
+$labels['keysend'] = '在郵件傳é€å…¬é–‹é‡‘é‘°';
+$labels['keychpass'] = '更改密碼';
+$labels['newkeyident'] = '身份:';
+$labels['newkeypass'] = '密碼:';
+$labels['newkeypassconfirm'] = '確èªå¯†ç¢¼ï¼š';
+$labels['newkeysize'] = '金鑰大å°ï¼š';
+$labels['key2048'] = '2048 ä½å…ƒ - é è¨­';
+$labels['key4096'] = '4096 ä½å…ƒ - 較安全';
+$labels['keygenerating'] = '正在製作金鑰...';
+$labels['encryptionoptions'] = '加密é¸é …...';
+$labels['encryptmsg'] = '加密本郵件';
+$labels['signmsg'] = '數ä½ç°½ç½²æœ¬éƒµä»¶';
+$labels['enterkeypasstitle'] = '輸入金鑰密語';
+$labels['enterkeypass'] = '需è¦å¯†èªžæ‰èƒ½ç‚ºä½¿ç”¨è€… $user 解鎖密鑰 ($keyid)';
+$labels['arialabelkeyexportoptions'] = '金鑰匯出é¸é …';
+$labels['attachpubkeymsg'] = '附上我的公開金鑰';
+$labels['keyexportprompt'] = '是å¦åŒ…括儲存在 OpenPGP 金鑰檔案的密鑰?';
+$labels['onlypubkeys'] = '僅匯出公開金鑰';
+$labels['withprivkeys'] = '匯出密鑰';
+$labels['findkey'] = '在金鑰伺æœå™¨æœå°‹';
+$labels['keyimportlabel'] = '從檔案匯入';
+$labels['keyimportsearchlabel'] = '在金鑰伺æœå™¨æœå°‹';
+$messages['sigvalid'] = '來自 $sender 的已驗證簽å';
+$messages['sigvalidpartial'] = '來自 $sender 的已驗證簽å,但內文部分並未簽署';
+$messages['siginvalid'] = '來自 $sender 的無效簽å';
+$messages['sigunverified'] = '未驗證的簽å。憑證無驗證。憑證 ID:$keyid';
+$messages['signokey'] = '未驗證的簽å。找ä¸åˆ°å…¬é–‹é‡‘鑰。金鑰 ID:$keyid';
+$messages['sigerror'] = '未驗證的簽å。內部出錯';
+$messages['decryptok'] = '郵件已解密';
+$messages['decrypterror'] = '解密失敗';
+$messages['decryptnokey'] = '解密失敗。找ä¸åˆ°ç§å¯†é‡‘鑰。金鑰 ID:$keyid';
+$messages['decryptbadpass'] = '解密失敗。密碼無效';
+$messages['decryptnopass'] = '解密失敗。必需è¦é‡‘鑰的密碼';
+$messages['decryptpartial'] = '郵件已解密,但內文部分未有加密';
+$messages['signerror'] = 'ç°½å失敗';
+$messages['signnokey'] = 'ç°½å失敗。找ä¸åˆ°ç§å¯†é‡‘é‘°';
+$messages['signbadpass'] = 'ç°½å失敗。密碼無效';
+$messages['signnopass'] = 'ç°½å失敗。必須è¦é‡‘鑰密碼';
+$messages['encrypterror'] = '加密失敗';
+$messages['encryptnokey'] = '加密失敗。找ä¸åˆ°ç”¨æ–¼ $email 的公開金鑰';
+$messages['nokeysfound'] = '找ä¸åˆ°é‡‘é‘°';
+$messages['keynotfound'] = '找ä¸åˆ°é‡‘é‘°ï¼';
+$messages['keyopenerror'] = '無法å–得金鑰資訊ï¼å…§éƒ¨å‡ºéŒ¯';
+$messages['keylisterror'] = '無法列出金鑰ï¼å…§éƒ¨å‡ºéŒ¯';
+$messages['keysimportfailed'] = '無法匯入金鑰ï¼å…§éƒ¨å‡ºéŒ¯';
+$messages['keysimportsuccess'] = 'æˆåŠŸåŒ¯å…¥é‡‘鑰。匯入:$new,ä¸è®Šï¼š$old';
+$messages['keyremoving'] = '正在移除金鑰...';
+$messages['keyremoveconfirm'] = '是å¦ç¢ºå®šè¦åˆªé™¤æ‰€é¸çš„金鑰?';
+$messages['keyremovesuccess'] = 'æˆåŠŸåˆªé™¤é‡‘é‘°';
+$messages['keyremoveerror'] = '無法刪除所é¸çš„金鑰';
+$messages['keyimporttext'] = 'å¯ç”¨ ASCII-Armor æ ¼å¼åŒ¯å…¥ç§å¯†åŠå…¬é–‹é‡‘鑰,或撤銷金鑰';
+$messages['keyimportsearchtext'] = 'å¯ç”¨é‡‘鑰識別碼ã€ä½¿ç”¨è€…å稱或電郵ä½å€æœå°‹å…¬é–‹é‡‘鑰,然後直接匯入';
+$messages['formerror'] = '請填好表格,所有欄ä½éƒ½æ˜¯å¿…須的ï¼';
+$messages['passwordsdiffer'] = '密碼ä¸ç¬¦ï¼';
+$messages['keygenerateerror'] = '未能產生金鑰å°';
+$messages['keygeneratesuccess'] = 'æˆåŠŸç”¢ç”Ÿä¸¦åŒ¯å…¥é‡‘é‘°å°';
+$messages['keygennosupport'] = '您的網項ç€è¦½å™¨ä¸æ”¯æ´åŠ å¯†æ©Ÿåˆ¶ï¼Œæ•…此無法產生金鑰å°ï¼';
+$messages['noidentselected'] = 'è¦ç‚ºé‡‘é‘°é¸å–至少一個身份ï¼';
+$messages['nonameident'] = '身份必須è¦æœ‰ä½¿ç”¨è€…å稱ï¼';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/openpgp.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+/**
+ * OpenPGP.js - v1.6.2
+ *
+ * @source https://github.com/openpgpjs/openpgpjs/blob/v1.6.2/dist/openpgp.js
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) OpenPGP Development Team
+ *
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+/*! OpenPGPjs.org  this is LGPL licensed code, see LICENSE/our website for more information.- v1.6.2 - 2016-06-08 */!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.openpgp=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d=a("./promise/promise").Promise,e=a("./promise/polyfill").polyfill;c.Promise=d,c.polyfill=e},{"./promise/polyfill":5,"./promise/promise":6}],2:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){e(a,b)}}function e(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&f(g.then)?g.then(d(j),c):e(j,g)})}var e=a("./utils").isArray,f=a("./utils").isFunction;c.all=d},{"./utils":10}],3:[function(a,b,c){(function(a,b){"use strict";function d(){return function(){a.nextTick(g)}}function e(){var a=0,b=new k(g),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function f(){return function(){l.setTimeout(g,1)}}function g(){for(var a=0;a<m.length;a++){var b=m[a],c=b[0],d=b[1];c(d)}m=[]}function h(a,b){var c=m.push([a,b]);1===c&&i()}var i,j="undefined"!=typeof window?window:{},k=j.MutationObserver||j.WebKitMutationObserver,l="undefined"!=typeof b?b:void 0===this?window:this,m=[];i="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?d():k?e():f(),c.asap=h}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:11}],4:[function(a,b,c){"use strict";function d(a,b){return 2!==arguments.length?e[a]:void(e[a]=b)}var e={instrument:!1};c.config=e,c.configure=d},{}],5:[function(a,b,c){(function(b){"use strict";function d(){var a;a="undefined"!=typeof b?b:"undefined"!=typeof window&&window.document?window:self;var c="Promise"in a&&"resolve"in a.Promise&&"reject"in a.Promise&&"all"in a.Promise&&"race"in a.Promise&&function(){var b;return new a.Promise(function(a){b=a}),f(b)}();c||(a.Promise=e)}var e=a("./promise").Promise,f=a("./utils").isFunction;c.polyfill=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./promise":6,"./utils":10}],6:[function(a,b,c){"use strict";function d(a){if(!q(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof d))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],e(a,this)}function e(a,b){function c(a){j(b,a)}function d(a){l(b,a)}try{a(c,d)}catch(e){d(e)}}function f(a,b,c,d){var e,f,g,h,k=q(c);if(k)try{e=c(d),g=!0}catch(m){h=!0,f=m}else e=d,g=!0;i(b,e)||(k&&g?j(b,e):h?l(b,f):a===y?j(b,e):a===z&&l(b,e))}function g(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+y]=c,e[f+z]=d}function h(a,b){for(var c,d,e=a._subscribers,g=a._detail,h=0;h<e.length;h+=3)c=e[h],d=e[h+b],f(b,c,d,g);a._subscribers=null}function i(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(p(b)&&(d=b.then,q(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?j(a,d):k(a,d)))},function(b){return c?!0:(c=!0,void l(a,b))}),!0}catch(e){return c?!0:(l(a,e),!0)}return!1}function j(a,b){a===b?k(a,b):i(a,b)||k(a,b)}function k(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(m,a))}function l(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(n,a))}function m(a){h(a,a._state=y)}function n(a){h(a,a._state=z)}var o=a("./config").config,p=(a("./config").configure,a("./utils").objectOrFunction),q=a("./utils").isFunction,r=(a("./utils").now,a("./all").all),s=a("./race").race,t=a("./resolve").resolve,u=a("./reject").reject,v=a("./asap").asap;o.async=v;var w=void 0,x=0,y=1,z=2;d.prototype={constructor:d,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;o.async(function(){f(c._state,d,e[c._state-1],c._detail)})}else g(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},d.all=r,d.race=s,d.resolve=t,d.reject=u,c.Promise=d},{"./all":2,"./asap":3,"./config":4,"./race":7,"./reject":8,"./resolve":9,"./utils":10}],7:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var e=a("./utils").isArray;c.race=d},{"./utils":10}],8:[function(a,b,c){"use strict";function d(a){var b=this;return new b(function(b,c){c(a)})}c.reject=d},{}],9:[function(a,b,c){"use strict";function d(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}c.resolve=d},{}],10:[function(a,b,c){"use strict";function d(a){return e(a)||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"[object Array]"===Object.prototype.toString.call(a)}var g=Date.now||function(){return(new Date).getTime()};c.objectOrFunction=d,c.isFunction=e,c.isArray=f,c.now=g},{}],11:[function(a,b,c){function d(){k=!1,h.length?j=h.concat(j):l=-1,j.length&&e()}function e(){if(!k){var a=setTimeout(d);k=!0;for(var b=j.length;b;){for(h=j,j=[];++l<b;)h&&h[l].run();l=-1,b=j.length}h=null,k=!1,clearTimeout(a)}}function f(a,b){this.fun=a,this.array=b}function g(){}var h,i=b.exports={},j=[],k=!1,l=-1;i.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];j.push(new f(a,b)),1!==j.length||k||setTimeout(e,0)},f.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.binding=function(a){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(a){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],12:[function(a,b,c){"use strict";function d(a,b){return this instanceof d?(this.text=a.replace(/\r/g,"").replace(/[\t ]+\n/g,"\n").replace(/\n/g,"\r\n"),void(this.packets=b||new h.List)):new d(a,b)}function e(a){var b=j.decode(a);if(b.type!==i.armor.signed)throw new Error("No cleartext signed message.");var c=new h.List;c.read(b.data),f(b.headers,c);var e=new d(b.text,c);return e}function f(a,b){for(var c=function(a){for(var c=0;c<b.length;c++)if(b[c].tag===i.packet.signature&&!a.some(function(a){return b[c].hashAlgorithm===a}))return!1;return!0},d=null,e=[],f=0;f<a.length;f++){if(d=a[f].match(/Hash: (.+)/),!d)throw new Error('Only "Hash" header allowed in cleartext signed message');d=d[1].replace(/\s/g,""),d=d.split(","),d=d.map(function(a){a=a.toLowerCase();try{return i.write(i.hash,a)}catch(b){throw new Error("Unknown hash algorithm in armor header: "+a)}}),e=e.concat(d)}if(!e.length&&!c([i.hash.md5]))throw new Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');if(!c(e))throw new Error("Hash algorithm mismatch in armor header and signature")}var g=a("./config"),h=a("./packet"),i=a("./enums.js"),j=a("./encoding/armor.js");d.prototype.getSigningKeyIds=function(){var a=[],b=this.packets.filterByTag(i.packet.signature);return b.forEach(function(b){a.push(b.issuerKeyId)}),a},d.prototype.sign=function(a){var b=new h.List,c=new h.Literal;c.setText(this.text);for(var d=0;d<a.length;d++){if(a[d].isPublic())throw new Error("Need private key for signing");var e=new h.Signature;e.signatureType=i.signature.text,e.hashAlgorithm=g.prefer_hash_algorithm;var f=a[d].getSigningKeyPacket();if(e.publicKeyAlgorithm=f.algorithm,!f.isDecrypted)throw new Error("Private key is not decrypted.");e.sign(f,c),b.push(e)}this.packets=b},d.prototype.verify=function(a){var b=[],c=this.packets.filterByTag(i.packet.signature),d=new h.Literal;d.setText(this.text);for(var e=0;e<c.length;e++){for(var f=null,g=0;g<a.length&&!(f=a[g].getSigningKeyPacket(c[e].issuerKeyId));g++);var j={};f?(j.keyid=c[e].issuerKeyId,j.valid=c[e].verify(f,d)):(j.keyid=c[e].issuerKeyId,j.valid=null),b.push(j)}return b},d.prototype.getText=function(){return this.text.replace(/\r\n/g,"\n")},d.prototype.armor=function(){var a={hash:i.read(i.hash,g.prefer_hash_algorithm).toUpperCase(),text:this.text,data:this.packets.write()};return j.encode(i.armor.signed,a)},c.CleartextMessage=d,c.readArmored=e},{"./config":17,"./encoding/armor.js":41,"./enums.js":43,"./packet":55}],13:[function(a,b,c){(function(){"use strict";function a(a,b){var c=a.split("."),d=n;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===l?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a,b){if(this.index="number"==typeof b?b:0,this.d=0,this.buffer=a instanceof(o?Uint8Array:Array)?a:new(o?Uint8Array:Array)(32768),2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&c(this)}function c(a){var b,c=a.buffer,d=c.length,e=new(o?Uint8Array:Array)(d<<1);if(o)e.set(c);else for(b=0;d>b;++b)e[b]=c[b];return a.buffer=e}function d(a){this.buffer=new(o?Uint16Array:Array)(2*a),this.length=0}function e(a,b){this.e=w,this.f=0,this.input=o&&a instanceof Array?new Uint8Array(a):a,this.c=0,b&&(b.lazy&&(this.f=b.lazy),"number"==typeof b.compressionType&&(this.e=b.compressionType),b.outputBuffer&&(this.b=o&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.c=b.outputIndex)),this.b||(this.b=new(o?Uint8Array:Array)(32768))}function f(a,b){this.length=a,this.g=b}function g(a,b){function c(a,b){var c,d=a.g,e=[],f=0;c=z[a.length],e[f++]=65535&c,e[f++]=c>>16&255,e[f++]=c>>24;var g;switch(m){case 1===d:g=[0,d-1,0];break;case 2===d:g=[1,d-2,0];break;case 3===d:g=[2,d-3,0];break;case 4===d:g=[3,d-4,0];break;case 6>=d:g=[4,d-5,1];break;case 8>=d:g=[5,d-7,1];break;case 12>=d:g=[6,d-9,2];break;case 16>=d:g=[7,d-13,2];break;case 24>=d:g=[8,d-17,3];break;case 32>=d:g=[9,d-25,3];break;case 48>=d:g=[10,d-33,4];break;case 64>=d:g=[11,d-49,4];break;case 96>=d:g=[12,d-65,5];break;case 128>=d:g=[13,d-97,5];break;case 192>=d:g=[14,d-129,6];break;case 256>=d:g=[15,d-193,6];break;case 384>=d:g=[16,d-257,7];break;case 512>=d:g=[17,d-385,7];break;case 768>=d:g=[18,d-513,8];break;case 1024>=d:g=[19,d-769,8];break;case 1536>=d:g=[20,d-1025,9];break;case 2048>=d:g=[21,d-1537,9];break;case 3072>=d:g=[22,d-2049,10];break;case 4096>=d:g=[23,d-3073,10];break;case 6144>=d:g=[24,d-4097,11];break;case 8192>=d:g=[25,d-6145,11];break;case 12288>=d:g=[26,d-8193,12];break;case 16384>=d:g=[27,d-12289,12];break;case 24576>=d:g=[28,d-16385,13];break;case 32768>=d:g=[29,d-24577,13];break;default:throw"invalid distance"}c=g,e[f++]=c[0],e[f++]=c[1],e[f++]=c[2];var h,i;for(h=0,i=e.length;i>h;++h)r[s++]=e[h];u[e[0]]++,v[e[3]]++,t=a.length+b-1,n=null}var d,e,f,g,i,j,k,n,p,q={},r=o?new Uint16Array(2*b.length):[],s=0,t=0,u=new(o?Uint32Array:Array)(286),v=new(o?Uint32Array:Array)(30),w=a.f;if(!o){for(f=0;285>=f;)u[f++]=0;for(f=0;29>=f;)v[f++]=0}for(u[256]=1,d=0,e=b.length;e>d;++d){for(f=i=0,g=3;g>f&&d+f!==e;++f)i=i<<8|b[d+f];if(q[i]===l&&(q[i]=[]),j=q[i],!(0<t--)){for(;0<j.length&&32768<d-j[0];)j.shift();if(d+3>=e){for(n&&c(n,-1),f=0,g=e-d;g>f;++f)p=b[d+f],r[s++]=p,++u[p];break}0<j.length?(k=h(b,d,j),n?n.length<k.length?(p=b[d-1],r[s++]=p,++u[p],c(k,0)):c(n,-1):k.length<w?n=k:c(k,0)):n?c(n,-1):(p=b[d],r[s++]=p,++u[p])}j.push(d)}return r[s++]=256,u[256]++,a.j=u,a.i=v,o?r.subarray(0,s):r}function h(a,b,c){var d,e,g,h,i,j,k=0,l=a.length;h=0,j=c.length;a:for(;j>h;h++){if(d=c[j-h-1],g=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;g=k}for(;258>g&&l>b+g&&a[d+g]===a[b+g];)++g;if(g>k&&(e=d,k=g),258===g)break}return new f(k,b-e)}function i(a,b){var c,e,f,g,h,i=a.length,k=new d(572),l=new(o?Uint8Array:Array)(i);if(!o)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0<a[g]&&k.push(g,a[g]);if(c=Array(k.length/2),e=new(o?Uint32Array:Array)(k.length/2),1===c.length)return l[k.pop().index]=1,l;for(g=0,h=k.length/2;h>g;++g)c[g]=k.pop(),e[g]=c[g].value;for(f=j(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function j(a,b,c){function d(a){var c=n[a][p[a]];c===b?(d(a+1),d(a+1)):--l[c],++p[a]}var e,f,g,h,i,j=new(o?Uint16Array:Array)(c),k=new(o?Uint8Array:Array)(c),l=new(o?Uint8Array:Array)(b),m=Array(c),n=Array(c),p=Array(c),q=(1<<c)-b,r=1<<c-1;for(j[c-1]=b,f=0;c>f;++f)r>q?k[f]=0:(k[f]=1,q-=r),q<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;g<j[c-1];++g)m[c-1][g]=a[g],n[c-1][g]=g;for(e=0;c>e;++e)p[e]=0;for(1===k[c-1]&&(--l[0],++p[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=p[f+1],g=0;g<j[f];g++)h=m[f+1][i]+m[f+1][i+1],h>a[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);p[f]=0,1===k[f]&&d(f)}return l}function k(a){var b,c,d,e,f=new(o?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}var l=void 0,m=!0,n=this,o="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;b.prototype.a=function(a,b,d){var e,f=this.buffer,g=this.index,h=this.d,i=f[g];if(d&&b>1&&(a=b>8?(u[255&a]<<24|u[a>>>8&255]<<16|u[a>>>16&255]<<8|u[a>>>24&255])>>32-b:u[a]>>8-b),8>b+h)i=i<<b|a,h+=b;else for(e=0;b>e;++e)i=i<<1|a>>b-e-1&1,8===++h&&(h=0,f[g++]=u[i],i=0,g===f.length&&(f=c(this)));f[g]=i,this.buffer=f,this.d=h,this.index=g},b.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0<this.d&&(b[c]<<=8-this.d,b[c]=u[b[c]],c++),o?a=b.subarray(0,c):(b.length=c,a=b),a};var p,q=new(o?Uint8Array:Array)(256);for(p=0;256>p;++p){for(var r=p,s=r,t=7,r=r>>>1;r;r>>>=1)s<<=1,s|=1&r,--t;q[p]=(s<<t&255)>>>0}var u=q;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2<this.length&&f[d+2]>f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var v,w=2,x=[];for(v=0;288>v;v++)switch(m){case 143>=v:x.push([v+48,8]);break;case 255>=v:x.push([v-144+400,9]);break;case 279>=v:x.push([v-256+0,7]);break;case 287>=v:x.push([v-280+192,8]);break;default:throw"invalid literal: "+v}e.prototype.h=function(){var a,c,d,e,f=this.input;switch(this.e){case 0:for(d=0,e=f.length;e>d;){c=o?f.subarray(d,d+65535):f.slice(d,d+65535),d+=c.length;var h=c,j=d===e,n=l,p=l,q=l,r=l,s=l,t=this.b,u=this.c;if(o){for(t=new Uint8Array(this.b.buffer);t.length<=u+h.length+5;)t=new Uint8Array(t.length<<1);t.set(this.b)}if(n=j?1:0,t[u++]=0|n,p=h.length,q=~p+65536&65535,t[u++]=255&p,t[u++]=p>>>8&255,t[u++]=255&q,t[u++]=q>>>8&255,o)t.set(h,u),u+=h.length,t=t.subarray(0,u);else{for(r=0,s=h.length;s>r;++r)t[u++]=h[r];t.length=u}this.c=u,this.b=t}break;case 1:var v=new b(o?new Uint8Array(this.b.buffer):this.b,this.c);v.a(1,1,m),v.a(1,2,m);var y,z,A,B=g(this,f);for(y=0,z=B.length;z>y;y++)if(A=B[y],b.prototype.a.apply(v,x[A]),A>256)v.a(B[++y],B[++y],m),v.a(B[++y],5),v.a(B[++y],B[++y],m);else if(256===A)break;this.b=v.finish(),this.c=this.b.length;break;case w:var C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R=new b(o?new Uint8Array(this.b.buffer):this.b,this.c),S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],T=Array(19);for(C=w,R.a(1,1,m),R.a(C,2,m),D=g(this,f),H=i(this.j,15),I=k(H),J=i(this.i,7),K=k(J),E=286;E>257&&0===H[E-1];E--);for(F=30;F>1&&0===J[F-1];F--);var U,V,W,X,Y,Z,$=E,_=F,aa=new(o?Uint32Array:Array)($+_),ba=new(o?Uint32Array:Array)(316),ca=new(o?Uint8Array:Array)(19);for(U=V=0;$>U;U++)aa[V++]=H[U];for(U=0;_>U;U++)aa[V++]=J[U];if(!o)for(U=0,X=ca.length;X>U;++U)ca[U]=0;for(U=Y=0,X=aa.length;X>U;U+=V){for(V=1;X>U+V&&aa[U+V]===aa[U];++V);if(W=V,0===aa[U])if(3>W)for(;0<W--;)ba[Y++]=0,ca[0]++;else for(;W>0;)Z=138>W?W:138,Z>W-3&&W>Z&&(Z=W-3),10>=Z?(ba[Y++]=17,ba[Y++]=Z-3,ca[17]++):(ba[Y++]=18,ba[Y++]=Z-11,ca[18]++),W-=Z;else if(ba[Y++]=aa[U],ca[aa[U]]++,W--,3>W)for(;0<W--;)ba[Y++]=aa[U],ca[aa[U]]++;else for(;W>0;)Z=6>W?W:6,Z>W-3&&W>Z&&(Z=W-3),ba[Y++]=16,ba[Y++]=Z-3,ca[16]++,W-=Z}for(a=o?ba.subarray(0,Y):ba.slice(0,Y),L=i(ca,7),P=0;19>P;P++)T[P]=L[S[P]];for(G=19;G>4&&0===T[G-1];G--);for(M=k(L),R.a(E-257,5,m),R.a(F-1,5,m),R.a(G-4,4,m),P=0;G>P;P++)R.a(T[P],3,m);for(P=0,Q=a.length;Q>P;P++)if(N=a[P],R.a(M[N],L[N],m),N>=16){switch(P++,N){case 16:O=2;break;case 17:O=3;break;case 18:O=7;break;default:throw"invalid code: "+N}R.a(a[P],O,m)}var da,ea,fa,ga,ha,ia,ja,ka,la=[I,H],ma=[K,J];for(ha=la[0],ia=la[1],ja=ma[0],ka=ma[1],da=0,ea=D.length;ea>da;++da)if(fa=D[da],R.a(ha[fa],ia[fa],m),fa>256)R.a(D[++da],D[++da],m),ga=D[++da],R.a(ja[ga],ka[ga],m),R.a(D[++da],D[++da],m);else if(256===fa)break;this.b=R.finish(),this.c=this.b.length;break;default:throw"invalid compression type"}return this.b};var y=function(){function a(a){switch(m){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a}}var b,c,d=[];for(b=3;258>=b;b++)c=a(b),d[b]=c[2]<<24|c[1]<<16|c[0];return d}(),z=o?new Uint32Array(y):y;a("Zlib.RawDeflate",e),a("Zlib.RawDeflate.prototype.compress",e.prototype.h);var A,B,C,D,E={NONE:0,FIXED:1,DYNAMIC:w};if(Object.keys)A=Object.keys(E);else for(B in A=[],C=0,E)A[C++]=B;for(C=0,D=A.length;D>C;++C)B=A[C],a("Zlib.RawDeflate.CompressionType."+B,E[B])}).call(this)},{}],14:[function(a,b,c){(function(){"use strict";function a(a,b){var c=a.split("."),d=g;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a){var b,c,d,e,f,g,i,j,k,l,m=a.length,n=0,o=Number.POSITIVE_INFINITY;for(j=0;m>j;++j)a[j]>n&&(n=a[j]),a[j]<o&&(o=a[j]);for(b=1<<n,c=new(h?Uint32Array:Array)(b),d=1,e=0,f=2;n>=d;){for(j=0;m>j;++j)if(a[j]===d){for(g=0,i=e,k=0;d>k;++k)g=g<<1|1&i,i>>=1;for(l=d<<16|j,k=g;b>k;k+=f)c[k]=l;++e}++d,e<<=1,f<<=1}return[c,n,o]}function c(a,b){switch(this.g=[],this.h=32768,this.c=this.f=this.d=this.k=0,this.input=h?new Uint8Array(a):a,this.l=!1,this.i=j,this.q=!1,(b||!(b={}))&&(b.index&&(this.d=b.index),b.bufferSize&&(this.h=b.bufferSize),b.bufferType&&(this.i=b.bufferType),b.resize&&(this.q=b.resize)),this.i){case i:this.a=32768,this.b=new(h?Uint8Array:Array)(32768+this.h+258);break;case j:this.a=0,this.b=new(h?Uint8Array:Array)(this.h),this.e=this.v,this.m=this.s,this.j=this.t;break;default:throw Error("invalid inflate mode")}}function d(a,b){for(var c,d=a.f,e=a.c,f=a.input,g=a.d,h=f.length;b>e;){if(g>=h)throw Error("input buffer is broken");d|=f[g++]<<e,e+=8}return c=d&(1<<b)-1,a.f=d>>>b,a.c=e-b,a.d=g,c}function e(a,b){for(var c,d,e=a.f,f=a.c,g=a.input,h=a.d,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<<f,f+=8;return c=j[e&(1<<k)-1],d=c>>>16,a.f=e>>d,a.c=f-d,a.d=h,65535&c}function f(a){function c(a,b,c){var f,g,h,i=this.p;for(h=0;a>h;)switch(f=e(this,b)){case 16:for(g=3+d(this,2);g--;)c[h++]=i;break;case 17:for(g=3+d(this,3);g--;)c[h++]=0;i=0;break;case 18:for(g=11+d(this,7);g--;)c[h++]=0;i=0;break;default:i=c[h++]=f}return this.p=i,c}var f,g,i,j,k=d(a,5)+257,l=d(a,5)+1,m=d(a,4)+4,o=new(h?Uint8Array:Array)(n.length);for(j=0;m>j;++j)o[n[j]]=d(a,3);if(!h)for(j=m,m=o.length;m>j;++j)o[n[j]]=0;f=b(o),g=new(h?Uint8Array:Array)(k),i=new(h?Uint8Array:Array)(l),a.p=0,a.j(b(c.call(a,k,f,g)),b(c.call(a,l,f,i)))}var g=this,h="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView,i=0,j=1;c.prototype.u=function(){for(;!this.l;){var a=d(this,3);switch(1&a&&(this.l=!0),a>>>=1){case 0:var b=this.input,c=this.d,e=this.b,g=this.a,k=b.length,l=void 0,m=void 0,n=e.length,o=void 0;if(this.c=this.f=0,c+1>=k)throw Error("invalid uncompressed block header: LEN");if(l=b[c++]|b[c++]<<8,c+1>=k)throw Error("invalid uncompressed block header: NLEN");if(m=b[c++]|b[c++]<<8,l===~m)throw Error("invalid uncompressed block header: length verify");if(c+l>b.length)throw Error("input buffer is broken");switch(this.i){case i:for(;g+l>e.length;){if(o=n-g,l-=o,h)e.set(b.subarray(c,c+o),g),g+=o,c+=o;else for(;o--;)e[g++]=b[c++];this.a=g,e=this.e(),g=this.a}break;case j:for(;g+l>e.length;)e=this.e({o:2});break;default:throw Error("invalid inflate mode")}if(h)e.set(b.subarray(c,c+l),g),g+=l,c+=l;else for(;l--;)e[g++]=b[c++];this.d=c,this.a=g,this.b=e;break;case 1:this.j(z,B);break;case 2:f(this);break;default:throw Error("unknown BTYPE: "+a)}}return this.m()};var k,l,m=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=h?new Uint16Array(m):m,o=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],p=h?new Uint16Array(o):o,q=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],r=h?new Uint8Array(q):q,s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t=h?new Uint16Array(s):s,u=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],v=h?new Uint8Array(u):u,w=new(h?Uint8Array:Array)(288);for(k=0,l=w.length;l>k;++k)w[k]=143>=k?8:255>=k?9:279>=k?7:8;var x,y,z=b(w),A=new(h?Uint8Array:Array)(30);for(x=0,y=A.length;y>x;++x)A[x]=5;var B=b(A);c.prototype.j=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length-258;256!==(g=e(this,a));)if(256>g)f>=k&&(this.a=f,c=this.e(),f=this.a),c[f++]=g;else for(h=g-257,j=p[h],0<r[h]&&(j+=d(this,r[h])),g=e(this,b),i=t[g],0<v[g]&&(i+=d(this,v[g])),f>=k&&(this.a=f,c=this.e(),f=this.a);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.t=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length;256!==(g=e(this,a));)if(256>g)f>=k&&(c=this.e(),k=c.length),c[f++]=g;else for(h=g-257,j=p[h],0<r[h]&&(j+=d(this,r[h])),g=e(this,b),i=t[g],0<v[g]&&(i+=d(this,v[g])),f+j>k&&(c=this.e(),k=c.length);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.e=function(){var a,b,c=new(h?Uint8Array:Array)(this.a-32768),d=this.a-32768,e=this.b;if(h)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.g.push(c),this.k+=c.length,h)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.a=32768,e},c.prototype.v=function(a){var b,c,d,e,f=this.input.length/this.d+1|0,g=this.input,i=this.b;return a&&("number"==typeof a.o&&(f=a.o),"number"==typeof a.r&&(f+=a.r)),2>f?(c=(g.length-this.d)/this.n[2],e=258*(c/2)|0,d=e<i.length?i.length+e:i.length<<1):d=i.length*f,h?(b=new Uint8Array(d),b.set(i)):b=i,this.b=b},c.prototype.m=function(){var a,b,c,d,e,f=0,g=this.b,i=this.g,j=new(h?Uint8Array:Array)(this.k+(this.a-32768));if(0===i.length)return h?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);for(b=0,c=i.length;c>b;++b)for(a=i[b],d=0,e=a.length;e>d;++d)j[f++]=a[d];for(b=32768,c=this.a;c>b;++b)j[f++]=g[b];return this.g=[],this.buffer=j},c.prototype.s=function(){var a,b=this.a;return h?this.q?(a=new Uint8Array(b),a.set(this.b.subarray(0,b))):a=this.b.subarray(0,b):(this.b.length>b&&(this.b.length=b),a=this.b),this.buffer=a},a("Zlib.RawInflate",c),a("Zlib.RawInflate.prototype.decompress",c.prototype.u);var C,D,E,F,G={ADAPTIVE:j,BLOCK:i};if(Object.keys)C=Object.keys(G);else for(D in C=[],E=0,G)C[E++]=D;for(E=0,F=C.length;F>E;++E)D=C[E],a("Zlib.RawInflate.BufferType."+D,G[D])}).call(this)},{}],15:[function(a,b,c){(function(){"use strict";function a(a){throw a}function b(a,b){var c=a.split("."),d=w;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===u?d=d[e]?d[e]:d[e]={}:d[e]=b}function c(b,c){this.index="number"==typeof c?c:0,this.i=0,this.buffer=b instanceof(x?Uint8Array:Array)?b:new(x?Uint8Array:Array)(32768),2*this.buffer.length<=this.index&&a(Error("invalid index")),this.buffer.length<=this.index&&this.f()}function d(a){this.buffer=new(x?Uint16Array:Array)(2*a),this.length=0}function e(a){var b,c,d,e,f,g,h,i,j,k,l=a.length,m=0,n=Number.POSITIVE_INFINITY;for(i=0;l>i;++i)a[i]>m&&(m=a[i]),a[i]<n&&(n=a[i]);for(b=1<<m,c=new(x?Uint32Array:Array)(b),d=1,e=0,f=2;m>=d;){for(i=0;l>i;++i)if(a[i]===d){for(g=0,h=e,j=0;d>j;++j)g=g<<1|1&h,h>>=1;for(k=d<<16|i,j=g;b>j;j+=f)c[j]=k;++e}++d,e<<=1,f<<=1}return[c,m,n]}function f(a,b){this.h=F,this.w=0,this.input=x&&a instanceof Array?new Uint8Array(a):a,this.b=0,b&&(b.lazy&&(this.w=b.lazy),"number"==typeof b.compressionType&&(this.h=b.compressionType),b.outputBuffer&&(this.a=x&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.b=b.outputIndex)),this.a||(this.a=new(x?Uint8Array:Array)(32768))}function g(a,b){this.length=a,this.H=b}function h(b,c){function d(b,c){var d,e=b.H,f=[],g=0;d=J[b.length],f[g++]=65535&d,f[g++]=d>>16&255,f[g++]=d>>24;var h;switch(v){case 1===e:h=[0,e-1,0];break;case 2===e:h=[1,e-2,0];break;case 3===e:h=[2,e-3,0];break;case 4===e:h=[3,e-4,0];break;case 6>=e:h=[4,e-5,1];break;case 8>=e:h=[5,e-7,1];break;case 12>=e:h=[6,e-9,2];break;case 16>=e:h=[7,e-13,2];break;case 24>=e:h=[8,e-17,3];break;case 32>=e:h=[9,e-25,3];break;case 48>=e:h=[10,e-33,4];break;case 64>=e:h=[11,e-49,4];break;case 96>=e:h=[12,e-65,5];break;case 128>=e:h=[13,e-97,5];break;case 192>=e:h=[14,e-129,6];break;case 256>=e:h=[15,e-193,6];break;case 384>=e:h=[16,e-257,7];break;case 512>=e:h=[17,e-385,7];break;case 768>=e:h=[18,e-513,8];break;case 1024>=e:h=[19,e-769,8];break;case 1536>=e:h=[20,e-1025,9];break;case 2048>=e:h=[21,e-1537,9];break;case 3072>=e:h=[22,e-2049,10];break;case 4096>=e:h=[23,e-3073,10];break;case 6144>=e:h=[24,e-4097,11];break;case 8192>=e:h=[25,e-6145,11];break;case 12288>=e:h=[26,e-8193,12];break;case 16384>=e:h=[27,e-12289,12];break;case 24576>=e:h=[28,e-16385,13];break;case 32768>=e:h=[29,e-24577,13];break;default:a("invalid distance")}d=h,f[g++]=d[0],f[g++]=d[1],f[g++]=d[2];var i,j;for(i=0,j=f.length;j>i;++i)p[q++]=f[i];s[f[0]]++,t[f[3]]++,r=b.length+c-1,m=null}var e,f,g,h,j,k,l,m,n,o={},p=x?new Uint16Array(2*c.length):[],q=0,r=0,s=new(x?Uint32Array:Array)(286),t=new(x?Uint32Array:Array)(30),w=b.w;if(!x){for(g=0;285>=g;)s[g++]=0;for(g=0;29>=g;)t[g++]=0}for(s[256]=1,e=0,f=c.length;f>e;++e){for(g=j=0,h=3;h>g&&e+g!==f;++g)j=j<<8|c[e+g];if(o[j]===u&&(o[j]=[]),k=o[j],!(0<r--)){for(;0<k.length&&32768<e-k[0];)k.shift();if(e+3>=f){for(m&&d(m,-1),g=0,h=f-e;h>g;++g)n=c[e+g],p[q++]=n,++s[n];break}0<k.length?(l=i(c,e,k),m?m.length<l.length?(n=c[e-1],p[q++]=n,++s[n],d(l,0)):d(m,-1):l.length<w?m=l:d(l,0)):m?d(m,-1):(n=c[e],p[q++]=n,++s[n])}k.push(e)}return p[q++]=256,s[256]++,b.M=s,b.L=t,x?p.subarray(0,q):p}function i(a,b,c){var d,e,f,h,i,j,k=0,l=a.length;h=0,j=c.length;a:for(;j>h;h++){if(d=c[j-h-1],f=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;f=k}for(;258>f&&l>b+f&&a[d+f]===a[b+f];)++f;if(f>k&&(e=d,k=f),258===f)break}return new g(k,b-e)}function j(a,b){var c,e,f,g,h,i=a.length,j=new d(572),l=new(x?Uint8Array:Array)(i);if(!x)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0<a[g]&&j.push(g,a[g]);if(c=Array(j.length/2),e=new(x?Uint32Array:Array)(j.length/2),1===c.length)return l[j.pop().index]=1,l;for(g=0,h=j.length/2;h>g;++g)c[g]=j.pop(),e[g]=c[g].value;for(f=k(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function k(a,b,c){function d(a){var c=n[a][o[a]];c===b?(d(a+1),d(a+1)):--l[c],++o[a]}var e,f,g,h,i,j=new(x?Uint16Array:Array)(c),k=new(x?Uint8Array:Array)(c),l=new(x?Uint8Array:Array)(b),m=Array(c),n=Array(c),o=Array(c),p=(1<<c)-b,q=1<<c-1;for(j[c-1]=b,f=0;c>f;++f)q>p?k[f]=0:(k[f]=1,p-=q),p<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;g<j[c-1];++g)m[c-1][g]=a[g],n[c-1][g]=g;for(e=0;c>e;++e)o[e]=0;for(1===k[c-1]&&(--l[0],++o[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=o[f+1],g=0;g<j[f];g++)h=m[f+1][i]+m[f+1][i+1],h>a[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);o[f]=0,1===k[f]&&d(f)}return l}function l(a){var b,c,d,e,f=new(x?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}function m(b,c){switch(this.l=[],this.m=32768,this.e=this.g=this.c=this.q=0,this.input=x?new Uint8Array(b):b,this.s=!1,this.n=L,this.C=!1,(c||!(c={}))&&(c.index&&(this.c=c.index),c.bufferSize&&(this.m=c.bufferSize),c.bufferType&&(this.n=c.bufferType),c.resize&&(this.C=c.resize)),this.n){case K:this.b=32768,this.a=new(x?Uint8Array:Array)(32768+this.m+258);break;case L:this.b=0,this.a=new(x?Uint8Array:Array)(this.m),this.f=this.K,this.t=this.I,this.o=this.J;break;default:a(Error("invalid inflate mode"))}}function n(b,c){for(var d,e=b.g,f=b.e,g=b.input,h=b.c,i=g.length;c>f;)h>=i&&a(Error("input buffer is broken")),e|=g[h++]<<f,f+=8;return d=e&(1<<c)-1,b.g=e>>>c,b.e=f-c,b.c=h,d}function o(a,b){for(var c,d,e=a.g,f=a.e,g=a.input,h=a.c,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<<f,f+=8;return c=j[e&(1<<k)-1],d=c>>>16,a.g=e>>d,a.e=f-d,a.c=h,65535&c}function p(a){function b(a,b,c){var d,e,f,g=this.z;for(f=0;a>f;)switch(d=o(this,b)){case 16:for(e=3+n(this,2);e--;)c[f++]=g;break;case 17:for(e=3+n(this,3);e--;)c[f++]=0;g=0;break;case 18:for(e=11+n(this,7);e--;)c[f++]=0;g=0;break;default:g=c[f++]=d}return this.z=g,c}var c,d,f,g,h=n(a,5)+257,i=n(a,5)+1,j=n(a,4)+4,k=new(x?Uint8Array:Array)(Q.length);for(g=0;j>g;++g)k[Q[g]]=n(a,3);if(!x)for(g=j,j=k.length;j>g;++g)k[Q[g]]=0;c=e(k),d=new(x?Uint8Array:Array)(h),f=new(x?Uint8Array:Array)(i),a.z=0,a.o(e(b.call(a,h,c,d)),e(b.call(a,i,c,f)))}function q(a){if("string"==typeof a){var b,c,d=a.split("");for(b=0,c=d.length;c>b;b++)d[b]=(255&d[b].charCodeAt(0))>>>0;a=d}for(var e,f=1,g=0,h=a.length,i=0;h>0;){e=h>1024?1024:h,h-=e;do f+=a[i++],g+=f;while(--e);f%=65521,g%=65521}return(g<<16|f)>>>0}function r(b,c){var d,e;switch(this.input=b,this.c=0,(c||!(c={}))&&(c.index&&(this.c=c.index),c.verify&&(this.N=c.verify)),d=b[this.c++],e=b[this.c++],15&d){case da:this.method=da;break;default:a(Error("unsupported compression method"))}0!==((d<<8)+e)%31&&a(Error("invalid fcheck flag:"+((d<<8)+e)%31)),
+32&e&&a(Error("fdict flag is not supported")),this.B=new m(b,{index:this.c,bufferSize:c.bufferSize,bufferType:c.bufferType,resize:c.resize})}function s(a,b){this.input=a,this.a=new(x?Uint8Array:Array)(32768),this.h=ea.k;var c,d={};!b&&(b={})||"number"!=typeof b.compressionType||(this.h=b.compressionType);for(c in b)d[c]=b[c];d.outputBuffer=this.a,this.A=new f(this.input,d)}function t(a,c){var d,e,f,g;if(Object.keys)d=Object.keys(c);else for(e in d=[],f=0,c)d[f++]=e;for(f=0,g=d.length;g>f;++f)e=d[f],b(a+"."+e,c[e])}var u=void 0,v=!0,w=this,x="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;c.prototype.f=function(){var a,b=this.buffer,c=b.length,d=new(x?Uint8Array:Array)(c<<1);if(x)d.set(b);else for(a=0;c>a;++a)d[a]=b[a];return this.buffer=d},c.prototype.d=function(a,b,c){var d,e=this.buffer,f=this.index,g=this.i,h=e[f];if(c&&b>1&&(a=b>8?(D[255&a]<<24|D[a>>>8&255]<<16|D[a>>>16&255]<<8|D[a>>>24&255])>>32-b:D[a]>>8-b),8>b+g)h=h<<b|a,g+=b;else for(d=0;b>d;++d)h=h<<1|a>>b-d-1&1,8===++g&&(g=0,e[f++]=D[h],h=0,f===e.length&&(e=this.f()));e[f]=h,this.buffer=e,this.i=g,this.index=f},c.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0<this.i&&(b[c]<<=8-this.i,b[c]=D[b[c]],c++),x?a=b.subarray(0,c):(b.length=c,a=b),a};var y,z=new(x?Uint8Array:Array)(256);for(y=0;256>y;++y){for(var A=y,B=A,C=7,A=A>>>1;A;A>>>=1)B<<=1,B|=1&A,--C;z[y]=(B<<C&255)>>>0}var D=z;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2<this.length&&f[d+2]>f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var E,F=2,G={NONE:0,r:1,k:F,O:3},H=[];for(E=0;288>E;E++)switch(v){case 143>=E:H.push([E+48,8]);break;case 255>=E:H.push([E-144+400,9]);break;case 279>=E:H.push([E-256+0,7]);break;case 287>=E:H.push([E-280+192,8]);break;default:a("invalid literal: "+E)}f.prototype.j=function(){var b,d,e,f,g=this.input;switch(this.h){case 0:for(e=0,f=g.length;f>e;){d=x?g.subarray(e,e+65535):g.slice(e,e+65535),e+=d.length;var i=d,k=e===f,m=u,n=u,o=u,p=u,q=u,r=this.a,s=this.b;if(x){for(r=new Uint8Array(this.a.buffer);r.length<=s+i.length+5;)r=new Uint8Array(r.length<<1);r.set(this.a)}if(m=k?1:0,r[s++]=0|m,n=i.length,o=~n+65536&65535,r[s++]=255&n,r[s++]=n>>>8&255,r[s++]=255&o,r[s++]=o>>>8&255,x)r.set(i,s),s+=i.length,r=r.subarray(0,s);else{for(p=0,q=i.length;q>p;++p)r[s++]=i[p];r.length=s}this.b=s,this.a=r}break;case 1:var t=new c(x?new Uint8Array(this.a.buffer):this.a,this.b);t.d(1,1,v),t.d(1,2,v);var w,y,z,A=h(this,g);for(w=0,y=A.length;y>w;w++)if(z=A[w],c.prototype.d.apply(t,H[z]),z>256)t.d(A[++w],A[++w],v),t.d(A[++w],5),t.d(A[++w],A[++w],v);else if(256===z)break;this.a=t.finish(),this.b=this.a.length;break;case F:var B,C,D,E,G,I,J,K,L,M,N,O,P,Q,R,S=new c(x?new Uint8Array(this.a.buffer):this.a,this.b),T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],U=Array(19);for(B=F,S.d(1,1,v),S.d(B,2,v),C=h(this,g),I=j(this.M,15),J=l(I),K=j(this.L,7),L=l(K),D=286;D>257&&0===I[D-1];D--);for(E=30;E>1&&0===K[E-1];E--);var V,W,X,Y,Z,$,_=D,aa=E,ba=new(x?Uint32Array:Array)(_+aa),ca=new(x?Uint32Array:Array)(316),da=new(x?Uint8Array:Array)(19);for(V=W=0;_>V;V++)ba[W++]=I[V];for(V=0;aa>V;V++)ba[W++]=K[V];if(!x)for(V=0,Y=da.length;Y>V;++V)da[V]=0;for(V=Z=0,Y=ba.length;Y>V;V+=W){for(W=1;Y>V+W&&ba[V+W]===ba[V];++W);if(X=W,0===ba[V])if(3>X)for(;0<X--;)ca[Z++]=0,da[0]++;else for(;X>0;)$=138>X?X:138,$>X-3&&X>$&&($=X-3),10>=$?(ca[Z++]=17,ca[Z++]=$-3,da[17]++):(ca[Z++]=18,ca[Z++]=$-11,da[18]++),X-=$;else if(ca[Z++]=ba[V],da[ba[V]]++,X--,3>X)for(;0<X--;)ca[Z++]=ba[V],da[ba[V]]++;else for(;X>0;)$=6>X?X:6,$>X-3&&X>$&&($=X-3),ca[Z++]=16,ca[Z++]=$-3,da[16]++,X-=$}for(b=x?ca.subarray(0,Z):ca.slice(0,Z),M=j(da,7),Q=0;19>Q;Q++)U[Q]=M[T[Q]];for(G=19;G>4&&0===U[G-1];G--);for(N=l(M),S.d(D-257,5,v),S.d(E-1,5,v),S.d(G-4,4,v),Q=0;G>Q;Q++)S.d(U[Q],3,v);for(Q=0,R=b.length;R>Q;Q++)if(O=b[Q],S.d(N[O],M[O],v),O>=16){switch(Q++,O){case 16:P=2;break;case 17:P=3;break;case 18:P=7;break;default:a("invalid code: "+O)}S.d(b[Q],P,v)}var ea,fa,ga,ha,ia,ja,ka,la,ma=[J,I],na=[L,K];for(ia=ma[0],ja=ma[1],ka=na[0],la=na[1],ea=0,fa=C.length;fa>ea;++ea)if(ga=C[ea],S.d(ia[ga],ja[ga],v),ga>256)S.d(C[++ea],C[++ea],v),ha=C[++ea],S.d(ka[ha],la[ha],v),S.d(C[++ea],C[++ea],v);else if(256===ga)break;this.a=S.finish(),this.b=this.a.length;break;default:a("invalid compression type")}return this.a};var I=function(){function b(b){switch(v){case 3===b:return[257,b-3,0];case 4===b:return[258,b-4,0];case 5===b:return[259,b-5,0];case 6===b:return[260,b-6,0];case 7===b:return[261,b-7,0];case 8===b:return[262,b-8,0];case 9===b:return[263,b-9,0];case 10===b:return[264,b-10,0];case 12>=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272,b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:a("invalid length: "+b)}}var c,d,e=[];for(c=3;258>=c;c++)d=b(c),e[c]=d[2]<<24|d[1]<<16|d[0];return e}(),J=x?new Uint32Array(I):I,K=0,L=1,M={F:K,D:L};m.prototype.p=function(){for(;!this.s;){var b=n(this,3);switch(1&b&&(this.s=v),b>>>=1){case 0:var c=this.input,d=this.c,e=this.a,f=this.b,g=c.length,h=u,i=u,j=e.length,k=u;switch(this.e=this.g=0,d+1>=g&&a(Error("invalid uncompressed block header: LEN")),h=c[d++]|c[d++]<<8,d+1>=g&&a(Error("invalid uncompressed block header: NLEN")),i=c[d++]|c[d++]<<8,h===~i&&a(Error("invalid uncompressed block header: length verify")),d+h>c.length&&a(Error("input buffer is broken")),this.n){case K:for(;f+h>e.length;){if(k=j-f,h-=k,x)e.set(c.subarray(d,d+k),f),f+=k,d+=k;else for(;k--;)e[f++]=c[d++];this.b=f,e=this.f(),f=this.b}break;case L:for(;f+h>e.length;)e=this.f({v:2});break;default:a(Error("invalid inflate mode"))}if(x)e.set(c.subarray(d,d+h),f),f+=h,d+=h;else for(;h--;)e[f++]=c[d++];this.c=d,this.b=f,this.a=e;break;case 1:this.o(aa,ca);break;case 2:p(this);break;default:a(Error("unknown BTYPE: "+b))}}return this.t()};var N,O,P=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q=x?new Uint16Array(P):P,R=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],S=x?new Uint16Array(R):R,T=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],U=x?new Uint8Array(T):T,V=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],W=x?new Uint16Array(V):V,X=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Y=x?new Uint8Array(X):X,Z=new(x?Uint8Array:Array)(288);for(N=0,O=Z.length;O>N;++N)Z[N]=143>=N?8:255>=N?9:279>=N?7:8;var $,_,aa=e(Z),ba=new(x?Uint8Array:Array)(30);for($=0,_=ba.length;_>$;++$)ba[$]=5;var ca=e(ba);m.prototype.o=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length-258;256!==(e=o(this,a));)if(256>e)d>=i&&(this.b=d,c=this.f(),d=this.b),c[d++]=e;else for(f=e-257,h=S[f],0<U[f]&&(h+=n(this,U[f])),e=o(this,b),g=W[e],0<Y[e]&&(g+=n(this,Y[e])),d>=i&&(this.b=d,c=this.f(),d=this.b);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.J=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length;256!==(e=o(this,a));)if(256>e)d>=i&&(c=this.f(),i=c.length),c[d++]=e;else for(f=e-257,h=S[f],0<U[f]&&(h+=n(this,U[f])),e=o(this,b),g=W[e],0<Y[e]&&(g+=n(this,Y[e])),d+h>i&&(c=this.f(),i=c.length);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.f=function(){var a,b,c=new(x?Uint8Array:Array)(this.b-32768),d=this.b-32768,e=this.a;if(x)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.l.push(c),this.q+=c.length,x)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.b=32768,e},m.prototype.K=function(a){var b,c,d,e,f=this.input.length/this.c+1|0,g=this.input,h=this.a;return a&&("number"==typeof a.v&&(f=a.v),"number"==typeof a.G&&(f+=a.G)),2>f?(c=(g.length-this.c)/this.u[2],e=258*(c/2)|0,d=e<h.length?h.length+e:h.length<<1):d=h.length*f,x?(b=new Uint8Array(d),b.set(h)):b=h,this.a=b},m.prototype.t=function(){var a,b,c,d,e,f=0,g=this.a,h=this.l,i=new(x?Uint8Array:Array)(this.q+(this.b-32768));if(0===h.length)return x?this.a.subarray(32768,this.b):this.a.slice(32768,this.b);for(b=0,c=h.length;c>b;++b)for(a=h[b],d=0,e=a.length;e>d;++d)i[f++]=a[d];for(b=32768,c=this.b;c>b;++b)i[f++]=g[b];return this.l=[],this.buffer=i},m.prototype.I=function(){var a,b=this.b;return x?this.C?(a=new Uint8Array(b),a.set(this.a.subarray(0,b))):a=this.a.subarray(0,b):(this.a.length>b&&(this.a.length=b),a=this.a),this.buffer=a},r.prototype.p=function(){var b,c,d=this.input;return b=this.B.p(),this.c=this.B.c,this.N&&(c=(d[this.c++]<<24|d[this.c++]<<16|d[this.c++]<<8|d[this.c++])>>>0,c!==q(b)&&a(Error("invalid adler-32 checksum"))),b};var da=8,ea=G;s.prototype.j=function(){var b,c,d,e,f,g,h,i=0;switch(h=this.a,b=da){case da:c=Math.LOG2E*Math.log(32768)-8;break;default:a(Error("invalid compression method"))}switch(d=c<<4|b,h[i++]=d,b){case da:switch(this.h){case ea.NONE:f=0;break;case ea.r:f=1;break;case ea.k:f=2;break;default:a(Error("unsupported compression type"))}break;default:a(Error("invalid compression method"))}return e=f<<6|0,h[i++]=e|31-(256*d+e)%31,g=q(this.input),this.A.b=i,h=this.A.j(),i=h.length,x&&(h=new Uint8Array(h.buffer),h.length<=i+4&&(this.a=new Uint8Array(h.length+4),this.a.set(h),h=this.a),h=h.subarray(0,i+4)),h[i++]=g>>24&255,h[i++]=g>>16&255,h[i++]=g>>8&255,h[i++]=255&g,h},b("Zlib.Inflate",r),b("Zlib.Inflate.prototype.decompress",r.prototype.p),t("Zlib.Inflate.BufferType",{ADAPTIVE:M.D,BLOCK:M.F}),b("Zlib.Deflate",s),b("Zlib.Deflate.compress",function(a,b){return new s(a,b).j()}),b("Zlib.Deflate.prototype.compress",s.prototype.j),t("Zlib.Deflate.CompressionType",{NONE:ea.NONE,FIXED:ea.r,DYNAMIC:ea.k})}).call(this)},{}],16:[function(a,b,c){var d=a("../enums.js");b.exports={prefer_hash_algorithm:d.hash.sha256,encryption_cipher:d.symmetric.aes256,compression:d.compression.zip,integrity_protect:!0,ignore_mdc_error:!1,rsa_blinding:!0,useWebCrypto:!0,show_version:!0,show_comment:!0,versionstring:"OpenPGP.js v1.6.2",commentstring:"http://openpgpjs.org",keyserver:"https://keyserver.ubuntu.com",node_store:"./openpgp.store",debug:!1}},{"../enums.js":43}],17:[function(a,b,c){b.exports=a("./config.js")},{"./config.js":16}],18:[function(a,b,c){"use strict";var d=a("../util.js"),e=a("./cipher");b.exports={encrypt:function(a,b,c,f,g){b=new e[b](f);var h=b.blockSize,i=new Uint8Array(h),j=new Uint8Array(h);a=a+a.charAt(h-2)+a.charAt(h-1);var k,l,m,n=new Uint8Array(c.length+2+2*h),o=g?0:2;for(k=0;h>k;k++)i[k]=0;for(j=b.encrypt(i),k=0;h>k;k++)n[k]=j[k]^a.charCodeAt(k);for(i.set(n.subarray(0,h)),j=b.encrypt(i),n[h]=j[0]^a.charCodeAt(h),n[h+1]=j[1]^a.charCodeAt(h+1),g?i.set(n.subarray(2,h+2)):i.set(n.subarray(0,h)),j=b.encrypt(i),k=0;h>k;k++)n[h+2+k]=j[k+o]^c.charCodeAt(k);for(l=h;l<c.length+o;l+=h)for(m=l+2-o,i.set(n.subarray(m,m+h)),j=b.encrypt(i),k=0;h>k;k++)n[h+m+k]=j[k]^c.charCodeAt(l+k-o);return n=n.subarray(0,c.length+2+h),d.Uint8Array2str(n)},mdc:function(a,b,c){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g);for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];return i=a.encrypt(i),d.bin2str(h)+String.fromCharCode(i[0]^c.charCodeAt(g))+String.fromCharCode(i[1]^c.charCodeAt(g+1))},decrypt:function(a,b,c,d){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g),j="",k=[];for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];if(i=a.encrypt(i),h[g-2]!=(i[0]^c.charCodeAt(g))||h[g-1]!=(i[1]^c.charCodeAt(g+1)))throw new Error("CFB decrypt: invalid key");if(d){for(f=0;g>f;f++)h[f]=c.charCodeAt(f+2);for(j=g+2;j<c.length;j+=g)for(i=a.encrypt(h),f=0;g>f&&f+j<c.length;f++)h[f]=c.charCodeAt(j+f),k.push(String.fromCharCode(i[f]^h[f]))}else{for(f=0;g>f;f++)h[f]=c.charCodeAt(f);for(j=g;j<c.length;j+=g)for(i=a.encrypt(h),f=0;g>f&&f+j<c.length;f++)h[f]=c.charCodeAt(j+f),k.push(String.fromCharCode(i[f]^h[f]))}return d||k.splice(0,2),k.splice(c.length-g-2),k},normalEncrypt:function(a,b,c,f){a=new e[a](b);var g=a.blockSize,h="",i="",j=0,k="",l="";for(i=f.substring(0,g);c.length>g*j;){var m=a.encrypt(d.str2bin(i));h=c.substring(j*g,j*g+g);for(var n=0;n<h.length;n++)l+=String.fromCharCode(h.charCodeAt(n)^m[n]);i=l,l="",k+=i,j++}return k},normalDecrypt:function(a,b,c,f){a=new e[a](b);var g,h=a.blockSize,i="",j=0,k="",l=0;if(null===f)for(g=0;h>g;g++)i+=String.fromCharCode(0);else i=f.substring(0,h);for(;c.length>h*j;){var m=a.encrypt(d.str2bin(i));for(i=c.substring(j*h+l,j*h+h+l),g=0;g<i.length;g++)k+=String.fromCharCode(i.charCodeAt(g)^m[g]);j++}return k}}},{"../util.js":76,"./cipher":23}],19:[function(a,b,c){"use strict";function d(a){return 255&a}function e(a){return a>>8&255}function f(a){return a>>16&255}function g(a){return a>>24&255}function h(a,b,c,d){return e(p[255&a])|e(p[b>>8&255])<<8|e(p[c>>16&255])<<16|e(p[d>>>24])<<24}function i(a){var b,c,d=a.length,e=new Array(d/4);if(a&&!(d%4)){for(b=0,c=0;d>c;c+=4)e[b++]=a[c]|a[c+1]<<8|a[c+2]<<16|a[c+3]<<24;return e}}function j(a){var b,c=0,h=a.length,i=new Array(4*h);for(b=0;h>b;b++)i[c++]=d(a[b]),i[c++]=e(a[b]),i[c++]=f(a[b]),i[c++]=g(a[b]);return i}function k(a){var b,c,h,i,j,k,l=new Array(u+1),m=a.length,p=new Array(t),q=new Array(t),r=0;if(16==m)k=10,b=4;else if(24==m)k=12,b=6;else{if(32!=m)throw new Error("Invalid key-length for AES key:"+m);k=14,b=8}for(c=0;u+1>c;c++)l[c]=new Uint32Array(4);for(c=0,h=0;m>h;h++,c+=4)p[h]=a.charCodeAt(c)|a.charCodeAt(c+1)<<8|a.charCodeAt(c+2)<<16|a.charCodeAt(c+3)<<24;for(h=b-1;h>=0;h--)q[h]=p[h];for(i=0,j=0,h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}for(;k+1>i;){var s=q[b-1];if(q[0]^=o[e(s)]|o[f(s)]<<8|o[g(s)]<<16|o[d(s)]<<24,q[0]^=n[r++],8!=b)for(h=1;b>h;h++)q[h]^=q[h-1];else{for(h=1;b/2>h;h++)q[h]^=q[h-1];for(s=q[b/2-1],q[b/2]^=o[d(s)]|o[e(s)]<<8|o[f(s)]<<16|o[g(s)]<<24,h=b/2+1;b>h;h++)q[h]^=q[h-1]}for(h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}}return{rounds:k,rk:l}}function l(a,b,c){var d,e,f;for(f=i(a),e=b.rounds,d=0;e-1>d;d++)c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=p[255&c[0]]^q[c[1]>>8&255]^r[c[2]>>16&255]^s[c[3]>>>24],f[1]=p[255&c[1]]^q[c[2]>>8&255]^r[c[3]>>16&255]^s[c[0]>>>24],f[2]=p[255&c[2]]^q[c[3]>>8&255]^r[c[0]>>16&255]^s[c[1]>>>24],f[3]=p[255&c[3]]^q[c[0]>>8&255]^r[c[1]>>16&255]^s[c[2]>>>24];return d=e-1,c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=h(c[0],c[1],c[2],c[3])^b.rk[e][0],f[1]=h(c[1],c[2],c[3],c[0])^b.rk[e][1],f[2]=h(c[2],c[3],c[0],c[1])^b.rk[e][2],f[3]=h(c[3],c[0],c[1],c[2])^b.rk[e][3],j(f)}function m(a){var b=function(a){this.key=k(a),this._temp=new Uint32Array(this.blockSize/4),this.encrypt=function(a){return l(a,this.key,this._temp)}};return b.blockSize=b.prototype.blockSize=16,b.keySize=b.prototype.keySize=a/8,b}var n=(a("../../util.js"),new Uint8Array([1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145])),o=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),p=new Uint32Array([2774754246,2222750968,2574743534,2373680118,234025727,3177933782,2976870366,1422247313,1345335392,50397442,2842126286,2099981142,436141799,1658312629,3870010189,2591454956,1170918031,2642575903,1086966153,2273148410,368769775,3948501426,3376891790,200339707,3970805057,1742001331,4255294047,3937382213,3214711843,4154762323,2524082916,1539358875,3266819957,486407649,2928907069,1780885068,1513502316,1094664062,49805301,1338821763,1546925160,4104496465,887481809,150073849,2473685474,1943591083,1395732834,1058346282,201589768,1388824469,1696801606,1589887901,672667696,2711000631,251987210,3046808111,151455502,907153956,2608889883,1038279391,652995533,1764173646,3451040383,2675275242,453576978,2659418909,1949051992,773462580,756751158,2993581788,3998898868,4221608027,4132590244,1295727478,1641469623,3467883389,2066295122,1055122397,1898917726,2542044179,4115878822,1758581177,0,753790401,1612718144,536673507,3367088505,3982187446,3194645204,1187761037,3653156455,1262041458,3729410708,3561770136,3898103984,1255133061,1808847035,720367557,3853167183,385612781,3309519750,3612167578,1429418854,2491778321,3477423498,284817897,100794884,2172616702,4031795360,1144798328,3131023141,3819481163,4082192802,4272137053,3225436288,2324664069,2912064063,3164445985,1211644016,83228145,3753688163,3249976951,1977277103,1663115586,806359072,452984805,250868733,1842533055,1288555905,336333848,890442534,804056259,3781124030,2727843637,3427026056,957814574,1472513171,4071073621,2189328124,1195195770,2892260552,3881655738,723065138,2507371494,2690670784,2558624025,3511635870,2145180835,1713513028,2116692564,2878378043,2206763019,3393603212,703524551,3552098411,1007948840,2044649127,3797835452,487262998,1994120109,1004593371,1446130276,1312438900,503974420,3679013266,168166924,1814307912,3831258296,1573044895,1859376061,4021070915,2791465668,2828112185,2761266481,937747667,2339994098,854058965,1137232011,1496790894,3077402074,2358086913,1691735473,3528347292,3769215305,3027004632,4199962284,133494003,636152527,2942657994,2390391540,3920539207,403179536,3585784431,2289596656,1864705354,1915629148,605822008,4054230615,3350508659,1371981463,602466507,2094914977,2624877800,555687742,3712699286,3703422305,2257292045,2240449039,2423288032,1111375484,3300242801,2858837708,3628615824,84083462,32962295,302911004,2741068226,1597322602,4183250862,3501832553,2441512471,1489093017,656219450,3114180135,954327513,335083755,3013122091,856756514,3144247762,1893325225,2307821063,2811532339,3063651117,572399164,2458355477,552200649,1238290055,4283782570,2015897680,2061492133,2408352771,4171342169,2156497161,386731290,3669999461,837215959,3326231172,3093850320,3275833730,2962856233,1999449434,286199582,3417354363,4233385128,3602627437,974525996]),q=new Uint32Array([1667483301,2088564868,2004348569,2071721613,4076011277,1802229437,1869602481,3318059348,808476752,16843267,1734856361,724260477,4278118169,3621238114,2880130534,1987505306,3402272581,2189565853,3385428288,2105408135,4210749205,1499050731,1195871945,4042324747,2913812972,3570709351,2728550397,2947499498,2627478463,2762232823,1920132246,3233848155,3082253762,4261273884,2475900334,640044138,909536346,1061125697,4160222466,3435955023,875849820,2779075060,3857043764,4059166984,1903288979,3638078323,825320019,353708607,67373068,3351745874,589514341,3284376926,404238376,2526427041,84216335,2593796021,117902857,303178806,2155879323,3806519101,3958099238,656887401,2998042573,1970662047,151589403,2206408094,741103732,437924910,454768173,1852759218,1515893998,2694863867,1381147894,993752653,3604395873,3014884814,690573947,3823361342,791633521,2223248279,1397991157,3520182632,0,3991781676,538984544,4244431647,2981198280,1532737261,1785386174,3419114822,3200149465,960066123,1246401758,1280088276,1482207464,3486483786,3503340395,4025468202,2863288293,4227591446,1128498885,1296931543,859006549,2240090516,1162185423,4193904912,33686534,2139094657,1347461360,1010595908,2678007226,2829601763,1364304627,2745392638,1077969088,2408514954,2459058093,2644320700,943222856,4126535940,3166462943,3065411521,3671764853,555827811,269492272,4294960410,4092853518,3537026925,3452797260,202119188,320022069,3974939439,1600110305,2543269282,1145342156,387395129,3301217111,2812761586,2122251394,1027439175,1684326572,1566423783,421081643,1936975509,1616953504,2172721560,1330618065,3705447295,572671078,707417214,2425371563,2290617219,1179028682,4008625961,3099093971,336865340,3739133817,1583267042,185275933,3688607094,3772832571,842163286,976909390,168432670,1229558491,101059594,606357612,1549580516,3267534685,3553869166,2896970735,1650640038,2442213800,2509582756,3840201527,2038035083,3890730290,3368586051,926379609,1835915959,2374828428,3587551588,1313774802,2846444e3,1819072692,1448520954,4109693703,3941256997,1701169839,2054878350,2930657257,134746136,3132780501,2021191816,623200879,774790258,471611428,2795919345,3031724999,3334903633,3907570467,3722289532,1953818780,522141217,1263245021,3183305180,2341145990,2324303749,1886445712,1044282434,3048567236,1718013098,1212715224,50529797,4143380225,235805714,1633796771,892693087,1465364217,3115936208,2256934801,3250690392,488454695,2661164985,3789674808,4177062675,2560109491,286335539,1768542907,3654920560,2391672713,2492740519,2610638262,505297954,2273777042,3924412704,3469641545,1431677695,673730680,3755976058,2357986191,2711706104,2307459456,218962455,3216991706,3873888049,1111655622,1751699640,1094812355,2576951728,757946999,252648977,2964356043,1414834428,3149622742,370551866]),r=new Uint32Array([1673962851,2096661628,2012125559,2079755643,4076801522,1809235307,1876865391,3314635973,811618352,16909057,1741597031,727088427,4276558334,3618988759,2874009259,1995217526,3398387146,2183110018,3381215433,2113570685,4209972730,1504897881,1200539975,4042984432,2906778797,3568527316,2724199842,2940594863,2619588508,2756966308,1927583346,3231407040,3077948087,4259388669,2470293139,642542118,913070646,1065238847,4160029431,3431157708,879254580,2773611685,3855693029,4059629809,1910674289,3635114968,828527409,355090197,67636228,3348452039,591815971,3281870531,405809176,2520228246,84545285,2586817946,118360327,304363026,2149292928,3806281186,3956090603,659450151,2994720178,1978310517,152181513,2199756419,743994412,439627290,456535323,1859957358,1521806938,2690382752,1386542674,997608763,3602342358,3011366579,693271337,3822927587,794718511,2215876484,1403450707,3518589137,0,3988860141,541089824,4242743292,2977548465,1538714971,1792327274,3415033547,3194476990,963791673,1251270218,1285084236,1487988824,3481619151,3501943760,4022676207,2857362858,4226619131,1132905795,1301993293,862344499,2232521861,1166724933,4192801017,33818114,2147385727,1352724560,1014514748,2670049951,2823545768,1369633617,2740846243,1082179648,2399505039,2453646738,2636233885,946882616,4126213365,3160661948,3061301686,3668932058,557998881,270544912,4293204735,4093447923,3535760850,3447803085,202904588,321271059,3972214764,1606345055,2536874647,1149815876,388905239,3297990596,2807427751,2130477694,1031423805,1690872932,1572530013,422718233,1944491379,1623236704,2165938305,1335808335,3701702620,574907938,710180394,2419829648,2282455944,1183631942,4006029806,3094074296,338181140,3735517662,1589437022,185998603,3685578459,3772464096,845436466,980700730,169090570,1234361161,101452294,608726052,1555620956,3265224130,3552407251,2890133420,1657054818,2436475025,2503058581,3839047652,2045938553,3889509095,3364570056,929978679,1843050349,2365688973,3585172693,1318900302,2840191145,1826141292,1454176854,4109567988,3939444202,1707781989,2062847610,2923948462,135272456,3127891386,2029029496,625635109,777810478,473441308,2790781350,3027486644,3331805638,3905627112,3718347997,1961401460,524165407,1268178251,3177307325,2332919435,2316273034,1893765232,1048330814,3044132021,1724688998,1217452104,50726147,4143383030,236720654,1640145761,896163637,1471084887,3110719673,2249691526,3248052417,490350365,2653403550,3789109473,4176155640,2553000856,287453969,1775418217,3651760345,2382858638,2486413204,2603464347,507257374,2266337927,3922272489,3464972750,1437269845,676362280,3752164063,2349043596,2707028129,2299101321,219813645,3211123391,3872862694,1115997762,1758509160,1099088705,2569646233,760903469,253628687,2960903088,1420360788,3144537787,371997206]),s=new Uint32Array([3332727651,4169432188,4003034999,4136467323,4279104242,3602738027,3736170351,2438251973,1615867952,33751297,3467208551,1451043627,3877240574,3043153879,1306962859,3969545846,2403715786,530416258,2302724553,4203183485,4011195130,3001768281,2395555655,4211863792,1106029997,3009926356,1610457762,1173008303,599760028,1408738468,3835064946,2606481600,1975695287,3776773629,1034851219,1282024998,1817851446,2118205247,4110612471,2203045068,1750873140,1374987685,3509904869,4178113009,3801313649,2876496088,1649619249,708777237,135005188,2505230279,1181033251,2640233411,807933976,933336726,168756485,800430746,235472647,607523346,463175808,3745374946,3441880043,1315514151,2144187058,3936318837,303761673,496927619,1484008492,875436570,908925723,3702681198,3035519578,1543217312,2767606354,1984772923,3076642518,2110698419,1383803177,3711886307,1584475951,328696964,2801095507,3110654417,0,3240947181,1080041504,3810524412,2043195825,3069008731,3569248874,2370227147,1742323390,1917532473,2497595978,2564049996,2968016984,2236272591,3144405200,3307925487,1340451498,3977706491,2261074755,2597801293,1716859699,294946181,2328839493,3910203897,67502594,4269899647,2700103760,2017737788,632987551,1273211048,2733855057,1576969123,2160083008,92966799,1068339858,566009245,1883781176,4043634165,1675607228,2009183926,2943736538,1113792801,540020752,3843751935,4245615603,3211645650,2169294285,403966988,641012499,3274697964,3202441055,899848087,2295088196,775493399,2472002756,1441965991,4236410494,2051489085,3366741092,3135724893,841685273,3868554099,3231735904,429425025,2664517455,2743065820,1147544098,1417554474,1001099408,193169544,2362066502,3341414126,1809037496,675025940,2809781982,3168951902,371002123,2910247899,3678134496,1683370546,1951283770,337512970,2463844681,201983494,1215046692,3101973596,2673722050,3178157011,1139780780,3299238498,967348625,832869781,3543655652,4069226873,3576883175,2336475336,1851340599,3669454189,25988493,2976175573,2631028302,1239460265,3635702892,2902087254,4077384948,3475368682,3400492389,4102978170,1206496942,270010376,1876277946,4035475576,1248797989,1550986798,941890588,1475454630,1942467764,2538718918,3408128232,2709315037,3902567540,1042358047,2531085131,1641856445,226921355,260409994,3767562352,2084716094,1908716981,3433719398,2430093384,100991747,4144101110,470945294,3265487201,1784624437,2935576407,1775286713,395413126,2572730817,975641885,666476190,3644383713,3943954680,733190296,573772049,3535497577,2842745305,126455438,866620564,766942107,1008868894,361924487,3374377449,2269761230,2868860245,1350051880,2776293343,59739276,1509466529,159418761,437718285,1708834751,3610371814,2227585602,3501746280,2193834305,699439513,1517759789,504434447,2076946608,2835108948,1842789307,742004246]),t=8,u=14;b.exports={};var v=[128,192,256];for(var w in v)b.exports[v[w]]=m(v[w])},{"../../util.js":76}],20:[function(a,b,c){function d(){}function e(a){this.bf=new d,this.bf.init(f.str2bin(a)),this.encrypt=function(a){return this.bf.encrypt_block(a)}}d.prototype.BLOCKSIZE=8,d.prototype.SBOXES=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]],
+d.prototype.PARRAY=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],d.prototype.NN=16,d.prototype._clean=function(a){if(0>a){var b=2147483647&a;a=b+2147483648}return a},d.prototype._F=function(a){var b,c,d,e,f;return e=255&a,a>>>=8,d=255&a,a>>>=8,c=255&a,a>>>=8,b=255&a,f=this.sboxes[0][b]+this.sboxes[1][c],f^=this.sboxes[2][d],f+=this.sboxes[3][e]},d.prototype._encrypt_block=function(a){var b,c=a[0],d=a[1];for(b=0;b<this.NN;++b){c^=this.parray[b],d=this._F(c)^d;var e=c;c=d,d=e}c^=this.parray[this.NN+0],d^=this.parray[this.NN+1],a[0]=this._clean(d),a[1]=this._clean(c)},d.prototype.encrypt_block=function(a){var b,c=[0,0],d=this.BLOCKSIZE/2;for(b=0;b<this.BLOCKSIZE/2;++b)c[0]=c[0]<<8|255&a[b+0],c[1]=c[1]<<8|255&a[b+d];this._encrypt_block(c);var e=[];for(b=0;b<this.BLOCKSIZE/2;++b)e[b+0]=c[0]>>>24-8*b&255,e[b+d]=c[1]>>>24-8*b&255;return e},d.prototype._decrypt_block=function(a){var b,c=a[0],d=a[1];for(b=this.NN+1;b>1;--b){c^=this.parray[b],d=this._F(c)^d;var e=c;c=d,d=e}c^=this.parray[1],d^=this.parray[0],a[0]=this._clean(d),a[1]=this._clean(c)},d.prototype.init=function(a){var b,c=0;for(this.parray=[],b=0;b<this.NN+2;++b){var d,e=0;for(d=0;4>d;++d)e=e<<8|255&a[c],++c>=a.length&&(c=0);this.parray[b]=this.PARRAY[b]^e}for(this.sboxes=[],b=0;4>b;++b)for(this.sboxes[b]=[],c=0;256>c;++c)this.sboxes[b][c]=this.SBOXES[b][c];var f=[0,0];for(b=0;b<this.NN+2;b+=2)this._encrypt_block(f),this.parray[b+0]=f[0],this.parray[b+1]=f[1];for(b=0;4>b;++b)for(c=0;256>c;c+=2)this._encrypt_block(f),this.sboxes[b][c+0]=f[0],this.sboxes[b][c+1]=f[1]};var f=a("../../util.js");b.exports=e,b.exports.keySize=e.prototype.keySize=16,b.exports.blockSize=e.prototype.blockSize=16},{"../../util.js":76}],21:[function(a,b,c){function d(){function a(a,b,c){var d=b+a,e=d<<c|d>>>32-c;return(f[0][e>>>24]^f[1][e>>>16&255])-f[2][e>>>8&255]+f[3][255&e]}function b(a,b,c){var d=b^a,e=d<<c|d>>>32-c;return f[0][e>>>24]-f[1][e>>>16&255]+f[2][e>>>8&255]^f[3][255&e]}function c(a,b,c){var d=b-a,e=d<<c|d>>>32-c;return(f[0][e>>>24]+f[1][e>>>16&255]^f[2][e>>>8&255])-f[3][255&e]}this.BlockSize=8,this.KeySize=16,this.setKey=function(a){if(this.masking=new Array(16),this.rotate=new Array(16),this.reset(),a.length!=this.KeySize)throw new Error("CAST-128: keys must be 16 bytes");return this.keySchedule(a),!0},this.reset=function(){for(var a=0;16>a;a++)this.masking[a]=0,this.rotate[a]=0},this.getBlockSize=function(){return BlockSize},this.encrypt=function(d){for(var e=new Array(d.length),f=0;f<d.length;f+=8){var g,h=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3],i=d[f+4]<<24|d[f+5]<<16|d[f+6]<<8|d[f+7];g=i,i=h^a(i,this.masking[0],this.rotate[0]),h=g,g=i,i=h^b(i,this.masking[1],this.rotate[1]),h=g,g=i,i=h^c(i,this.masking[2],this.rotate[2]),h=g,g=i,i=h^a(i,this.masking[3],this.rotate[3]),h=g,g=i,i=h^b(i,this.masking[4],this.rotate[4]),h=g,g=i,i=h^c(i,this.masking[5],this.rotate[5]),h=g,g=i,i=h^a(i,this.masking[6],this.rotate[6]),h=g,g=i,i=h^b(i,this.masking[7],this.rotate[7]),h=g,g=i,i=h^c(i,this.masking[8],this.rotate[8]),h=g,g=i,i=h^a(i,this.masking[9],this.rotate[9]),h=g,g=i,i=h^b(i,this.masking[10],this.rotate[10]),h=g,g=i,i=h^c(i,this.masking[11],this.rotate[11]),h=g,g=i,i=h^a(i,this.masking[12],this.rotate[12]),h=g,g=i,i=h^b(i,this.masking[13],this.rotate[13]),h=g,g=i,i=h^c(i,this.masking[14],this.rotate[14]),h=g,g=i,i=h^a(i,this.masking[15],this.rotate[15]),h=g,e[f]=i>>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>>16&255,e[f+6]=h>>>8&255,e[f+7]=255&h}return e},this.decrypt=function(d){for(var e=new Array(d.length),f=0;f<d.length;f+=8){var g,h=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3],i=d[f+4]<<24|d[f+5]<<16|d[f+6]<<8|d[f+7];g=i,i=h^a(i,this.masking[15],this.rotate[15]),h=g,g=i,i=h^c(i,this.masking[14],this.rotate[14]),h=g,g=i,i=h^b(i,this.masking[13],this.rotate[13]),h=g,g=i,i=h^a(i,this.masking[12],this.rotate[12]),h=g,g=i,i=h^c(i,this.masking[11],this.rotate[11]),h=g,g=i,i=h^b(i,this.masking[10],this.rotate[10]),h=g,g=i,i=h^a(i,this.masking[9],this.rotate[9]),h=g,g=i,i=h^c(i,this.masking[8],this.rotate[8]),h=g,g=i,i=h^b(i,this.masking[7],this.rotate[7]),h=g,g=i,i=h^a(i,this.masking[6],this.rotate[6]),h=g,g=i,i=h^c(i,this.masking[5],this.rotate[5]),h=g,g=i,i=h^b(i,this.masking[4],this.rotate[4]),h=g,g=i,i=h^a(i,this.masking[3],this.rotate[3]),h=g,g=i,i=h^c(i,this.masking[2],this.rotate[2]),h=g,g=i,i=h^b(i,this.masking[1],this.rotate[1]),h=g,g=i,i=h^a(i,this.masking[0],this.rotate[0]),h=g,e[f]=i>>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>16&255,e[f+6]=h>>8&255,e[f+7]=255&h}return e};var d=new Array(4);d[0]=new Array(4),d[0][0]=new Array(4,0,13,15,12,14,8),d[0][1]=new Array(5,2,16,18,17,19,10),d[0][2]=new Array(6,3,23,22,21,20,9),d[0][3]=new Array(7,1,26,25,27,24,11),d[1]=new Array(4),d[1][0]=new Array(0,6,21,23,20,22,16),d[1][1]=new Array(1,4,0,2,1,3,18),d[1][2]=new Array(2,5,7,6,5,4,17),d[1][3]=new Array(3,7,10,9,11,8,19),d[2]=new Array(4),d[2][0]=new Array(4,0,13,15,12,14,8),d[2][1]=new Array(5,2,16,18,17,19,10),d[2][2]=new Array(6,3,23,22,21,20,9),d[2][3]=new Array(7,1,26,25,27,24,11),d[3]=new Array(4),d[3][0]=new Array(0,6,21,23,20,22,16),d[3][1]=new Array(1,4,0,2,1,3,18),d[3][2]=new Array(2,5,7,6,5,4,17),d[3][3]=new Array(3,7,10,9,11,8,19);var e=new Array(4);e[0]=new Array(4),e[0][0]=new Array(24,25,23,22,18),e[0][1]=new Array(26,27,21,20,22),e[0][2]=new Array(28,29,19,18,25),e[0][3]=new Array(30,31,17,16,28),e[1]=new Array(4),e[1][0]=new Array(3,2,12,13,8),e[1][1]=new Array(1,0,14,15,13),e[1][2]=new Array(7,6,8,9,3),e[1][3]=new Array(5,4,10,11,7),e[2]=new Array(4),e[2][0]=new Array(19,18,28,29,25),e[2][1]=new Array(17,16,30,31,28),e[2][2]=new Array(23,22,24,25,18),e[2][3]=new Array(21,20,26,27,22),e[3]=new Array(4),e[3][0]=new Array(8,9,7,6,3),e[3][1]=new Array(10,11,5,4,7),e[3][2]=new Array(12,13,3,2,8),e[3][3]=new Array(14,15,1,0,13),this.keySchedule=function(a){var b,c,g=new Array(8),h=new Array(32);for(b=0;4>b;b++)c=4*b,g[b]=a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3];for(var i,j=[6,7,4,5],k=0,l=0;2>l;l++)for(var m=0;4>m;m++){for(c=0;4>c;c++){var n=d[m][c];i=g[n[1]],i^=f[4][g[n[2]>>>2]>>>24-8*(3&n[2])&255],i^=f[5][g[n[3]>>>2]>>>24-8*(3&n[3])&255],i^=f[6][g[n[4]>>>2]>>>24-8*(3&n[4])&255],i^=f[7][g[n[5]>>>2]>>>24-8*(3&n[5])&255],i^=f[j[c]][g[n[6]>>>2]>>>24-8*(3&n[6])&255],g[n[0]]=i}for(c=0;4>c;c++){var o=e[m][c];i=f[4][g[o[0]>>>2]>>>24-8*(3&o[0])&255],i^=f[5][g[o[1]>>>2]>>>24-8*(3&o[1])&255],i^=f[6][g[o[2]>>>2]>>>24-8*(3&o[2])&255],i^=f[7][g[o[3]>>>2]>>>24-8*(3&o[3])&255],i^=f[4+c][g[o[4]>>>2]>>>24-8*(3&o[4])&255],h[k]=i,k++}}for(b=0;16>b;b++)this.masking[b]=h[b],this.rotate[b]=31&h[16+b]};var f=new Array(8);f[0]=new Array(821772500,2678128395,1810681135,1059425402,505495343,2617265619,1610868032,3483355465,3218386727,2294005173,3791863952,2563806837,1852023008,365126098,3269944861,584384398,677919599,3229601881,4280515016,2002735330,1136869587,3744433750,2289869850,2731719981,2714362070,879511577,1639411079,575934255,717107937,2857637483,576097850,2731753936,1725645e3,2810460463,5111599,767152862,2543075244,1251459544,1383482551,3052681127,3089939183,3612463449,1878520045,1510570527,2189125840,2431448366,582008916,3163445557,1265446783,1354458274,3529918736,3202711853,3073581712,3912963487,3029263377,1275016285,4249207360,2905708351,3304509486,1442611557,3585198765,2712415662,2731849581,3248163920,2283946226,208555832,2766454743,1331405426,1447828783,3315356441,3108627284,2957404670,2981538698,3339933917,1669711173,286233437,1465092821,1782121619,3862771680,710211251,980974943,1651941557,430374111,2051154026,704238805,4128970897,3144820574,2857402727,948965521,3333752299,2227686284,718756367,2269778983,2731643755,718440111,2857816721,3616097120,1113355533,2478022182,410092745,1811985197,1944238868,2696854588,1415722873,1682284203,1060277122,1998114690,1503841958,82706478,2315155686,1068173648,845149890,2167947013,1768146376,1993038550,3566826697,3390574031,940016341,3355073782,2328040721,904371731,1205506512,4094660742,2816623006,825647681,85914773,2857843460,1249926541,1417871568,3287612,3211054559,3126306446,1975924523,1353700161,2814456437,2438597621,1800716203,722146342,2873936343,1151126914,4160483941,2877670899,458611604,2866078500,3483680063,770352098,2652916994,3367839148,3940505011,3585973912,3809620402,718646636,2504206814,2914927912,3631288169,2857486607,2860018678,575749918,2857478043,718488780,2069512688,3548183469,453416197,1106044049,3032691430,52586708,3378514636,3459808877,3211506028,1785789304,218356169,3571399134,3759170522,1194783844,1523787992,3007827094,1975193539,2555452411,1341901877,3045838698,3776907964,3217423946,2802510864,2889438986,1057244207,1636348243,3761863214,1462225785,2632663439,481089165,718503062,24497053,3332243209,3344655856,3655024856,3960371065,1195698900,2971415156,3710176158,2115785917,4027663609,3525578417,2524296189,2745972565,3564906415,1372086093,1452307862,2780501478,1476592880,3389271281,18495466,2378148571,901398090,891748256,3279637769,3157290713,2560960102,1447622437,4284372637,216884176,2086908623,1879786977,3588903153,2242455666,2938092967,3559082096,2810645491,758861177,1121993112,215018983,642190776,4169236812,1196255959,2081185372,3508738393,941322904,4124243163,2877523539,1848581667,2205260958,3180453958,2589345134,3694731276,550028657,2519456284,3789985535,2973870856,2093648313,443148163,46942275,2734146937,1117713533,1115362972,1523183689,3717140224,1551984063),f[1]=new Array(522195092,4010518363,1776537470,960447360,4267822970,4005896314,1435016340,1929119313,2913464185,1310552629,3579470798,3724818106,2579771631,1594623892,417127293,2715217907,2696228731,1508390405,3994398868,3925858569,3695444102,4019471449,3129199795,3770928635,3520741761,990456497,4187484609,2783367035,21106139,3840405339,631373633,3783325702,532942976,396095098,3548038825,4267192484,2564721535,2011709262,2039648873,620404603,3776170075,2898526339,3612357925,4159332703,1645490516,223693667,1567101217,3362177881,1029951347,3470931136,3570957959,1550265121,119497089,972513919,907948164,3840628539,1613718692,3594177948,465323573,2659255085,654439692,2575596212,2699288441,3127702412,277098644,624404830,4100943870,2717858591,546110314,2403699828,3655377447,1321679412,4236791657,1045293279,4010672264,895050893,2319792268,494945126,1914543101,2777056443,3894764339,2219737618,311263384,4275257268,3458730721,669096869,3584475730,3835122877,3319158237,3949359204,2005142349,2713102337,2228954793,3769984788,569394103,3855636576,1425027204,108000370,2736431443,3671869269,3043122623,1750473702,2211081108,762237499,3972989403,2798899386,3061857628,2943854345,867476300,964413654,1591880597,1594774276,2179821409,552026980,3026064248,3726140315,2283577634,3110545105,2152310760,582474363,1582640421,1383256631,2043843868,3322775884,1217180674,463797851,2763038571,480777679,2718707717,2289164131,3118346187,214354409,200212307,3810608407,3025414197,2674075964,3997296425,1847405948,1342460550,510035443,4080271814,815934613,833030224,1620250387,1945732119,2703661145,3966000196,1388869545,3456054182,2687178561,2092620194,562037615,1356438536,3409922145,3261847397,1688467115,2150901366,631725691,3840332284,549916902,3455104640,394546491,837744717,2114462948,751520235,2221554606,2415360136,3999097078,2063029875,803036379,2702586305,821456707,3019566164,360699898,4018502092,3511869016,3677355358,2402471449,812317050,49299192,2570164949,3259169295,2816732080,3331213574,3101303564,2156015656,3705598920,3546263921,143268808,3200304480,1638124008,3165189453,3341807610,578956953,2193977524,3638120073,2333881532,807278310,658237817,2969561766,1641658566,11683945,3086995007,148645947,1138423386,4158756760,1981396783,2401016740,3699783584,380097457,2680394679,2803068651,3334260286,441530178,4016580796,1375954390,761952171,891809099,2183123478,157052462,3683840763,1592404427,341349109,2438483839,1417898363,644327628,2233032776,2353769706,2201510100,220455161,1815641738,182899273,2995019788,3627381533,3702638151,2890684138,1052606899,588164016,1681439879,4038439418,2405343923,4229449282,167996282,1336969661,1688053129,2739224926,1543734051,1046297529,1138201970,2121126012,115334942,1819067631,1902159161,1941945968,2206692869,1159982321),f[2]=new Array(2381300288,637164959,3952098751,3893414151,1197506559,916448331,2350892612,2932787856,3199334847,4009478890,3905886544,1373570990,2450425862,4037870920,3778841987,2456817877,286293407,124026297,3001279700,1028597854,3115296800,4208886496,2691114635,2188540206,1430237888,1218109995,3572471700,308166588,570424558,2187009021,2455094765,307733056,1310360322,3135275007,1384269543,2388071438,863238079,2359263624,2801553128,3380786597,2831162807,1470087780,1728663345,4072488799,1090516929,532123132,2389430977,1132193179,2578464191,3051079243,1670234342,1434557849,2711078940,1241591150,3314043432,3435360113,3091448339,1812415473,2198440252,267246943,796911696,3619716990,38830015,1526438404,2806502096,374413614,2943401790,1489179520,1603809326,1920779204,168801282,260042626,2358705581,1563175598,2397674057,1356499128,2217211040,514611088,2037363785,2186468373,4022173083,2792511869,2913485016,1173701892,4200428547,3896427269,1334932762,2455136706,602925377,2835607854,1613172210,41346230,2499634548,2457437618,2188827595,41386358,4172255629,1313404830,2405527007,3801973774,2217704835,873260488,2528884354,2478092616,4012915883,2555359016,2006953883,2463913485,575479328,2218240648,2099895446,660001756,2341502190,3038761536,3888151779,3848713377,3286851934,1022894237,1620365795,3449594689,1551255054,15374395,3570825345,4249311020,4151111129,3181912732,310226346,1133119310,530038928,136043402,2476768958,3107506709,2544909567,1036173560,2367337196,1681395281,1758231547,3641649032,306774401,1575354324,3716085866,1990386196,3114533736,2455606671,1262092282,3124342505,2768229131,4210529083,1833535011,423410938,660763973,2187129978,1639812e3,3508421329,3467445492,310289298,272797111,2188552562,2456863912,310240523,677093832,1013118031,901835429,3892695601,1116285435,3036471170,1337354835,243122523,520626091,277223598,4244441197,4194248841,1766575121,594173102,316590669,742362309,3536858622,4176435350,3838792410,2501204839,1229605004,3115755532,1552908988,2312334149,979407927,3959474601,1148277331,176638793,3614686272,2083809052,40992502,1340822838,2731552767,3535757508,3560899520,1354035053,122129617,7215240,2732932949,3118912700,2718203926,2539075635,3609230695,3725561661,1928887091,2882293555,1988674909,2063640240,2491088897,1459647954,4189817080,2302804382,1113892351,2237858528,1927010603,4002880361,1856122846,1594404395,2944033133,3855189863,3474975698,1643104450,4054590833,3431086530,1730235576,2984608721,3084664418,2131803598,4178205752,267404349,1617849798,1616132681,1462223176,736725533,2327058232,551665188,2945899023,1749386277,2575514597,1611482493,674206544,2201269090,3642560800,728599968,1680547377,2620414464,1388111496,453204106,4156223445,1094905244,2754698257,2201108165,3757000246,2704524545,3922940700,3996465027),f[3]=new Array(2645754912,532081118,2814278639,3530793624,1246723035,1689095255,2236679235,4194438865,2116582143,3859789411,157234593,2045505824,4245003587,1687664561,4083425123,605965023,672431967,1336064205,3376611392,214114848,4258466608,3232053071,489488601,605322005,3998028058,264917351,1912574028,756637694,436560991,202637054,135989450,85393697,2152923392,3896401662,2895836408,2145855233,3535335007,115294817,3147733898,1922296357,3464822751,4117858305,1037454084,2725193275,2127856640,1417604070,1148013728,1827919605,642362335,2929772533,909348033,1346338451,3547799649,297154785,1917849091,4161712827,2883604526,3968694238,1469521537,3780077382,3375584256,1763717519,136166297,4290970789,1295325189,2134727907,2798151366,1566297257,3672928234,2677174161,2672173615,965822077,2780786062,289653839,1133871874,3491843819,35685304,1068898316,418943774,672553190,642281022,2346158704,1954014401,3037126780,4079815205,2030668546,3840588673,672283427,1776201016,359975446,3750173538,555499703,2769985273,1324923,69110472,152125443,3176785106,3822147285,1340634837,798073664,1434183902,15393959,216384236,1303690150,3881221631,3711134124,3960975413,106373927,2578434224,1455997841,1801814300,1578393881,1854262133,3188178946,3258078583,2302670060,1539295533,3505142565,3078625975,2372746020,549938159,3278284284,2620926080,181285381,2865321098,3970029511,68876850,488006234,1728155692,2608167508,836007927,2435231793,919367643,3339422534,3655756360,1457871481,40520939,1380155135,797931188,234455205,2255801827,3990488299,397000196,739833055,3077865373,2871719860,4022553888,772369276,390177364,3853951029,557662966,740064294,1640166671,1699928825,3535942136,622006121,3625353122,68743880,1742502,219489963,1664179233,1577743084,1236991741,410585305,2366487942,823226535,1050371084,3426619607,3586839478,212779912,4147118561,1819446015,1911218849,530248558,3486241071,3252585495,2886188651,3410272728,2342195030,20547779,2982490058,3032363469,3631753222,312714466,1870521650,1493008054,3491686656,615382978,4103671749,2534517445,1932181,2196105170,278426614,6369430,3274544417,2913018367,697336853,2143000447,2946413531,701099306,1558357093,2805003052,3500818408,2321334417,3567135975,216290473,3591032198,23009561,1996984579,3735042806,2024298078,3739440863,569400510,2339758983,3016033873,3097871343,3639523026,3844324983,3256173865,795471839,2951117563,4101031090,4091603803,3603732598,971261452,534414648,428311343,3389027175,2844869880,694888862,1227866773,2456207019,3043454569,2614353370,3749578031,3676663836,459166190,4132644070,1794958188,51825668,2252611902,3084671440,2036672799,3436641603,1099053433,2469121526,3059204941,1323291266,2061838604,1018778475,2233344254,2553501054,334295216,3556750194,1065731521,183467730),f[4]=new Array(2127105028,745436345,2601412319,2788391185,3093987327,500390133,1155374404,389092991,150729210,3891597772,3523549952,1935325696,716645080,946045387,2901812282,1774124410,3869435775,4039581901,3293136918,3438657920,948246080,363898952,3867875531,1286266623,1598556673,68334250,630723836,1104211938,1312863373,613332731,2377784574,1101634306,441780740,3129959883,1917973735,2510624549,3238456535,2544211978,3308894634,1299840618,4076074851,1756332096,3977027158,297047435,3790297736,2265573040,3621810518,1311375015,1667687725,47300608,3299642885,2474112369,201668394,1468347890,576830978,3594690761,3742605952,1958042578,1747032512,3558991340,1408974056,3366841779,682131401,1033214337,1545599232,4265137049,206503691,103024618,2855227313,1337551222,2428998917,2963842932,4015366655,3852247746,2796956967,3865723491,3747938335,247794022,3755824572,702416469,2434691994,397379957,851939612,2314769512,218229120,1380406772,62274761,214451378,3170103466,2276210409,3845813286,28563499,446592073,1693330814,3453727194,29968656,3093872512,220656637,2470637031,77972100,1667708854,1358280214,4064765667,2395616961,325977563,4277240721,4220025399,3605526484,3355147721,811859167,3069544926,3962126810,652502677,3075892249,4132761541,3498924215,1217549313,3250244479,3858715919,3053989961,1538642152,2279026266,2875879137,574252750,3324769229,2651358713,1758150215,141295887,2719868960,3515574750,4093007735,4194485238,1082055363,3417560400,395511885,2966884026,179534037,3646028556,3738688086,1092926436,2496269142,257381841,3772900718,1636087230,1477059743,2499234752,3811018894,2675660129,3285975680,90732309,1684827095,1150307763,1723134115,3237045386,1769919919,1240018934,815675215,750138730,2239792499,1234303040,1995484674,138143821,675421338,1145607174,1936608440,3238603024,2345230278,2105974004,323969391,779555213,3004902369,2861610098,1017501463,2098600890,2628620304,2940611490,2682542546,1171473753,3656571411,3687208071,4091869518,393037935,159126506,1662887367,1147106178,391545844,3452332695,1891500680,3016609650,1851642611,546529401,1167818917,3194020571,2848076033,3953471836,575554290,475796850,4134673196,450035699,2351251534,844027695,1080539133,86184846,1554234488,3692025454,1972511363,2018339607,1491841390,1141460869,1061690759,4244549243,2008416118,2351104703,2868147542,1598468138,722020353,1027143159,212344630,1387219594,1725294528,3745187956,2500153616,458938280,4129215917,1828119673,544571780,3503225445,2297937496,1241802790,267843827,2694610800,1397140384,1558801448,3782667683,1806446719,929573330,2234912681,400817706,616011623,4121520928,3603768725,1761550015,1968522284,4053731006,4192232858,4005120285,872482584,3140537016,3894607381,2287405443,1963876937,3663887957,1584857e3,2975024454,1833426440,4025083860),f[5]=new Array(4143615901,749497569,1285769319,3795025788,2514159847,23610292,3974978748,844452780,3214870880,3751928557,2213566365,1676510905,448177848,3730751033,4086298418,2307502392,871450977,3222878141,4110862042,3831651966,2735270553,1310974780,2043402188,1218528103,2736035353,4274605013,2702448458,3936360550,2693061421,162023535,2827510090,687910808,23484817,3784910947,3371371616,779677500,3503626546,3473927188,4157212626,3500679282,4248902014,2466621104,3899384794,1958663117,925738300,1283408968,3669349440,1840910019,137959847,2679828185,1239142320,1315376211,1547541505,1690155329,739140458,3128809933,3933172616,3876308834,905091803,1548541325,4040461708,3095483362,144808038,451078856,676114313,2861728291,2469707347,993665471,373509091,2599041286,4025009006,4170239449,2149739950,3275793571,3749616649,2794760199,1534877388,572371878,2590613551,1753320020,3467782511,1405125690,4270405205,633333386,3026356924,3475123903,632057672,2846462855,1404951397,3882875879,3915906424,195638627,2385783745,3902872553,1233155085,3355999740,2380578713,2702246304,2144565621,3663341248,3894384975,2502479241,4248018925,3094885567,1594115437,572884632,3385116731,767645374,1331858858,1475698373,3793881790,3532746431,1321687957,619889600,1121017241,3440213920,2070816767,2833025776,1933951238,4095615791,890643334,3874130214,859025556,360630002,925594799,1764062180,3920222280,4078305929,979562269,2810700344,4087740022,1949714515,546639971,1165388173,3069891591,1495988560,922170659,1291546247,2107952832,1813327274,3406010024,3306028637,4241950635,153207855,2313154747,1608695416,1150242611,1967526857,721801357,1220138373,3691287617,3356069787,2112743302,3281662835,1111556101,1778980689,250857638,2298507990,673216130,2846488510,3207751581,3562756981,3008625920,3417367384,2198807050,529510932,3547516680,3426503187,2364944742,102533054,2294910856,1617093527,1204784762,3066581635,1019391227,1069574518,1317995090,1691889997,3661132003,510022745,3238594800,1362108837,1817929911,2184153760,805817662,1953603311,3699844737,120799444,2118332377,207536705,2282301548,4120041617,145305846,2508124933,3086745533,3261524335,1877257368,2977164480,3160454186,2503252186,4221677074,759945014,254147243,2767453419,3801518371,629083197,2471014217,907280572,3900796746,940896768,2751021123,2625262786,3161476951,3661752313,3260732218,1425318020,2977912069,1496677566,3988592072,2140652971,3126511541,3069632175,977771578,1392695845,1698528874,1411812681,1369733098,1343739227,3620887944,1142123638,67414216,3102056737,3088749194,1626167401,2546293654,3941374235,697522451,33404913,143560186,2595682037,994885535,1247667115,3859094837,2699155541,3547024625,4114935275,2968073508,3199963069,2732024527,1237921620,951448369,1898488916,1211705605,2790989240,2233243581,3598044975),f[6]=new Array(2246066201,858518887,1714274303,3485882003,713916271,2879113490,3730835617,539548191,36158695,1298409750,419087104,1358007170,749914897,2989680476,1261868530,2995193822,2690628854,3443622377,3780124940,3796824509,2976433025,4259637129,1551479e3,512490819,1296650241,951993153,2436689437,2460458047,144139966,3136204276,310820559,3068840729,643875328,1969602020,1680088954,2185813161,3283332454,672358534,198762408,896343282,276269502,3014846926,84060815,197145886,376173866,3943890818,3813173521,3545068822,1316698879,1598252827,2633424951,1233235075,859989710,2358460855,3503838400,3409603720,1203513385,1193654839,2792018475,2060853022,207403770,1144516871,3068631394,1121114134,177607304,3785736302,326409831,1929119770,2983279095,4183308101,3474579288,3200513878,3228482096,119610148,1170376745,3378393471,3163473169,951863017,3337026068,3135789130,2907618374,1183797387,2015970143,4045674555,2182986399,2952138740,3928772205,384012900,2454997643,10178499,2879818989,2596892536,111523738,2995089006,451689641,3196290696,235406569,1441906262,3890558523,3013735005,4158569349,1644036924,376726067,1006849064,3664579700,2041234796,1021632941,1374734338,2566452058,371631263,4007144233,490221539,206551450,3140638584,1053219195,1853335209,3412429660,3562156231,735133835,1623211703,3104214392,2738312436,4096837757,3366392578,3110964274,3956598718,3196820781,2038037254,3877786376,2339753847,300912036,3766732888,2372630639,1516443558,4200396704,1574567987,4069441456,4122592016,2699739776,146372218,2748961456,2043888151,35287437,2596680554,655490400,1132482787,110692520,1031794116,2188192751,1324057718,1217253157,919197030,686247489,3261139658,1028237775,3135486431,3059715558,2460921700,986174950,2661811465,4062904701,2752986992,3709736643,367056889,1353824391,731860949,1650113154,1778481506,784341916,357075625,3608602432,1074092588,2480052770,3811426202,92751289,877911070,3600361838,1231880047,480201094,3756190983,3094495953,434011822,87971354,363687820,1717726236,1901380172,3926403882,2481662265,400339184,1490350766,2661455099,1389319756,2558787174,784598401,1983468483,30828846,3550527752,2716276238,3841122214,1765724805,1955612312,1277890269,1333098070,1564029816,2704417615,1026694237,3287671188,1260819201,3349086767,1016692350,1582273796,1073413053,1995943182,694588404,1025494639,3323872702,3551898420,4146854327,453260480,1316140391,1435673405,3038941953,3486689407,1622062951,403978347,817677117,950059133,4246079218,3278066075,1486738320,1417279718,481875527,2549965225,3933690356,760697757,1452955855,3897451437,1177426808,1702951038,4085348628,2447005172,1084371187,3516436277,3068336338,1073369276,1027665953,3284188590,1230553676,1368340146,2226246512,267243139,2274220762,4070734279,2497715176,2423353163,2504755875),f[7]=new Array(3793104909,3151888380,2817252029,895778965,2005530807,3871412763,237245952,86829237,296341424,3851759377,3974600970,2475086196,709006108,1994621201,2972577594,937287164,3734691505,168608556,3189338153,2225080640,3139713551,3033610191,3025041904,77524477,185966941,1208824168,2344345178,1721625922,3354191921,1066374631,1927223579,1971335949,2483503697,1551748602,2881383779,2856329572,3003241482,48746954,1398218158,2050065058,313056748,4255789917,393167848,1912293076,940740642,3465845460,3091687853,2522601570,2197016661,1727764327,364383054,492521376,1291706479,3264136376,1474851438,1685747964,2575719748,1619776915,1814040067,970743798,1561002147,2925768690,2123093554,1880132620,3151188041,697884420,2550985770,2607674513,2659114323,110200136,1489731079,997519150,1378877361,3527870668,478029773,2766872923,1022481122,431258168,1112503832,897933369,2635587303,669726182,3383752315,918222264,163866573,3246985393,3776823163,114105080,1903216136,761148244,3571337562,1690750982,3166750252,1037045171,1888456500,2010454850,642736655,616092351,365016990,1185228132,4174898510,1043824992,2023083429,2241598885,3863320456,3279669087,3674716684,108438443,2132974366,830746235,606445527,4173263986,2204105912,1844756978,2532684181,4245352700,2969441100,3796921661,1335562986,4061524517,2720232303,2679424040,634407289,885462008,3294724487,3933892248,2094100220,339117932,4048830727,3202280980,1458155303,2689246273,1022871705,2464987878,3714515309,353796843,2822958815,4256850100,4052777845,551748367,618185374,3778635579,4020649912,1904685140,3069366075,2670879810,3407193292,2954511620,4058283405,2219449317,3135758300,1120655984,3447565834,1474845562,3577699062,550456716,3466908712,2043752612,881257467,869518812,2005220179,938474677,3305539448,3850417126,1315485940,3318264702,226533026,965733244,321539988,1136104718,804158748,573969341,3708209826,937399083,3290727049,2901666755,1461057207,4013193437,4066861423,3242773476,2421326174,1581322155,3028952165,786071460,3900391652,3918438532,1485433313,4023619836,3708277595,3678951060,953673138,1467089153,1930354364,1533292819,2492563023,1346121658,1685000834,1965281866,3765933717,4190206607,2052792609,3515332758,690371149,3125873887,2180283551,2903598061,3933952357,436236910,289419410,14314871,1242357089,2904507907,1616633776,2666382180,585885352,3471299210,2699507360,1432659641,277164553,3354103607,770115018,2303809295,3741942315,3177781868,2853364978,2269453327,3774259834,987383833,1290892879,225909803,1741533526,890078084,1496906255,1111072499,916028167,243534141,1252605537,2204162171,531204876,290011180,3916834213,102027703,237315147,209093447,1486785922,220223953,2758195998,4175039106,82940208,3127791296,2569425252,518464269,1353887104,3941492737,2377294467,3935040926)}function e(a){this.cast5=new d,this.cast5.setKey(f.str2bin(a)),this.encrypt=function(a){return this.cast5.encrypt(a)}}var f=a("../../util.js");b.exports=e,b.exports.blockSize=e.prototype.blockSize=8,b.exports.keySize=e.prototype.keySize=16},{"../../util.js":76}],22:[function(a,b,c){"use strict";function d(a,b,c,d,e,h){var i,j,k,l,m,n,o,p,q,r,s,t,u,v,w=new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756),x=new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344),y=new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584),z=new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928),A=new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080),B=new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312),C=new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154),D=new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696),E=0,F=b.length,G=0,H=32==a.length?3:9;
+p=3==H?c?new Array(0,32,2):new Array(30,-2,-2):c?new Array(0,32,2,62,30,-2,64,96,2):new Array(94,62,-2,32,64,2,30,-2,-2),c&&(b=f(b,h),F=b.length);var I="",J="";for(1==d&&(q=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),s=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),E=0);F>E;){for(n=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),o=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),1==d&&(c?(n^=q,o^=s):(r=q,t=s,q=n,s=o)),k=252645135&(n>>>4^o),o^=k,n^=k<<4,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,n=n<<1|n>>>31,o=o<<1|o>>>31,j=0;H>j;j+=3){for(u=p[j+1],v=p[j+2],i=p[j];i!=u;i+=v)l=o^a[i],m=(o>>>4|o<<28)^a[i+1],k=n,n=o,o=k^(x[l>>>24&63]|z[l>>>16&63]|B[l>>>8&63]|D[63&l]|w[m>>>24&63]|y[m>>>16&63]|A[m>>>8&63]|C[63&m]);k=n,n=o,o=k}n=n>>>1|n<<31,o=o>>>1|o<<31,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=252645135&(n>>>4^o),o^=k,n^=k<<4,1==d&&(c?(q=n,s=o):(n^=r,o^=t)),J+=String.fromCharCode(n>>>24,n>>>16&255,n>>>8&255,255&n,o>>>24,o>>>16&255,o>>>8&255,255&o),G+=8,512==G&&(I+=J,J="",G=0)}return I+=J,c||(I=g(I,h)),I}function e(a){for(var b,c,d,e=new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964),f=new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697),g=new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272),h=new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144),i=new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256),j=new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488),k=new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746),l=new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568),m=new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578),n=new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488),o=new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800),p=new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744),q=new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128),r=new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261),s=a.length>8?3:1,t=new Array(32*s),u=new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0),v=0,w=0,x=0;s>x;x++){var y=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++),z=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++);d=252645135&(y>>>4^z),z^=d,y^=d<<4,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=858993459&(y>>>2^z),z^=d,y^=d<<2,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=16711935&(z>>>8^y),y^=d,z^=d<<8,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=y<<8|z>>>20&240,y=z<<24|z<<8&16711680|z>>>8&65280|z>>>24&240,z=d;for(var A=0;A<u.length;A++)u[A]?(y=y<<2|y>>>26,z=z<<2|z>>>26):(y=y<<1|y>>>27,z=z<<1|z>>>27),y&=-15,z&=-15,b=e[y>>>28]|f[y>>>24&15]|g[y>>>20&15]|h[y>>>16&15]|i[y>>>12&15]|j[y>>>8&15]|k[y>>>4&15],c=l[z>>>28]|m[z>>>24&15]|n[z>>>20&15]|o[z>>>16&15]|p[z>>>12&15]|q[z>>>8&15]|r[z>>>4&15],d=65535&(c>>>16^b),t[w++]=b^d,t[w++]=c^d<<16}return t}function f(a,b){var c=8-a.length%8;return 2==b&&8>c?a+="        ".substr(0,c):1==b?a+=String.fromCharCode(c,c,c,c,c,c,c,c).substr(0,c):!b&&8>c&&(a+="\x00\x00\x00\x00\x00\x00\x00\x00".substr(0,c)),a}function g(a,b){if(2==b)a=a.replace(/ *$/g,"");else if(1==b){var c=a.charCodeAt(a.length-1);a=a.substr(0,a.length-c)}else b||(a=a.replace(/\0*$/g,""));return a}function h(a){this.key=[];for(var b=0;3>b;b++)this.key.push(a.substr(8*b,8));this.encrypt=function(a){return j.str2bin(d(e(this.key[2]),d(e(this.key[1]),d(e(this.key[0]),j.bin2str(a),!0,0,null,null),!1,0,null,null),!0,0,null,null))}}function i(a){this.key=a,this.encrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!0,0,null,b))},this.decrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!1,0,null,b))}}var j=a("../../util.js");h.keySize=h.prototype.keySize=24,h.blockSize=h.prototype.blockSize=8,b.exports={des:h,originalDes:i}},{"../../util.js":76}],23:[function(a,b,c){var d=a("./des.js");b.exports={des:d.originalDes,tripledes:d.des,cast5:a("./cast5.js"),twofish:a("./twofish.js"),blowfish:a("./blowfish.js"),idea:function(){throw new Error("IDEA symmetric-key algorithm not implemented")}};var e=a("./aes.js");for(var f in e)b.exports["aes"+f]=e[f]},{"./aes.js":19,"./blowfish.js":20,"./cast5.js":21,"./des.js":22,"./twofish.js":24}],24:[function(a,b,c){function d(a,b){return(a<<b|a>>>32-b)&k}function e(a,b){return a[b]|a[b+1]<<8|a[b+2]<<16|a[b+3]<<24}function f(a,b,c){a.splice(b,4,255&c,c>>>8&255,c>>>16&255,c>>>24&255)}function g(a,b){return a>>>8*b&255}function h(){function a(a){function b(a){return a^a>>2^[0,90,180,238][3&a]}function c(a){return a^a>>1^a>>2^[0,238,180,90][3&a]}function f(a,b){var c,d,e;for(c=0;8>c;c++)d=b>>>24,b=b<<8&k|a>>>24,a=a<<8&k,e=d<<1,128&d&&(e^=333),b^=d^e<<16,e^=d>>>1,1&d&&(e^=166),b^=e<<24|e<<8;return b}function h(a,b){var c,d,e,f;return c=b>>4,d=15&b,e=A[a][c^d],f=B[a][E[d]^F[c]],D[a][E[f]^F[e]]<<4|C[a][e^f]}function i(a,b){var c=g(a,0),d=g(a,1),e=g(a,2),f=g(a,3);switch(q){case 4:c=G[1][c]^g(b[3],0),d=G[0][d]^g(b[3],1),e=G[0][e]^g(b[3],2),f=G[1][f]^g(b[3],3);case 3:c=G[1][c]^g(b[2],0),d=G[1][d]^g(b[2],1),e=G[0][e]^g(b[2],2),f=G[0][f]^g(b[2],3);case 2:c=G[0][G[0][c]^g(b[1],0)]^g(b[0],0),d=G[0][G[1][d]^g(b[1],1)]^g(b[0],1),e=G[1][G[0][e]^g(b[1],2)]^g(b[0],2),f=G[1][G[1][f]^g(b[1],3)]^g(b[0],3)}return H[0][c]^H[1][d]^H[2][e]^H[3][f]}o=a;var j,l,m,n,p,q,r,u,v,w=[],x=[],y=[],z=[],A=[[8,1,7,13,6,15,3,2,0,11,5,9,14,12,10,4],[2,8,11,13,15,7,6,14,3,1,9,4,0,10,12,5]],B=[[14,12,11,8,1,2,3,5,15,4,10,6,7,0,9,13],[1,14,2,11,4,12,3,7,6,13,10,5,15,9,0,8]],C=[[11,10,5,14,6,13,9,0,12,8,15,3,2,4,7,1],[4,12,7,5,1,6,9,10,0,14,13,8,2,11,3,15]],D=[[13,7,15,4,1,2,6,14,9,11,3,0,8,5,12,10],[11,9,5,1,12,3,13,14,6,4,7,15,2,0,8,10]],E=[0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15],F=[0,9,2,11,4,13,6,15,8,1,10,3,12,5,14,7],G=[[],[]],H=[[],[],[],[]];for(o=o.slice(0,32),j=o.length;16!=j&&24!=j&&32!=j;)o[j++]=0;for(j=0;j<o.length;j+=4)y[j>>2]=e(o,j);for(j=0;256>j;j++)G[0][j]=h(0,j),G[1][j]=h(1,j);for(j=0;256>j;j++)r=G[1][j],u=b(r),v=c(r),H[0][j]=r+(u<<8)+(v<<16)+(v<<24),H[2][j]=u+(v<<8)+(r<<16)+(v<<24),r=G[0][j],u=b(r),v=c(r),H[1][j]=v+(v<<8)+(u<<16)+(r<<24),H[3][j]=u+(r<<8)+(v<<16)+(u<<24);for(q=y.length/2,j=0;q>j;j++)l=y[j+j],w[j]=l,m=y[j+j+1],x[j]=m,z[q-j-1]=f(l,m);for(j=0;40>j;j+=2)l=16843009*j,m=l+16843009,l=i(l,w),m=d(i(m,x),8),s[j]=l+m&k,s[j+1]=d(l+2*m,9);for(j=0;256>j;j++)switch(l=m=n=p=j,q){case 4:l=G[1][l]^g(z[3],0),m=G[0][m]^g(z[3],1),n=G[0][n]^g(z[3],2),p=G[1][p]^g(z[3],3);case 3:l=G[1][l]^g(z[2],0),m=G[1][m]^g(z[2],1),n=G[0][n]^g(z[2],2),p=G[0][p]^g(z[2],3);case 2:t[0][j]=H[0][G[0][G[0][l]^g(z[1],0)]^g(z[0],0)],t[1][j]=H[1][G[0][G[1][m]^g(z[1],1)]^g(z[0],1)],t[2][j]=H[2][G[1][G[0][n]^g(z[1],2)]^g(z[0],2)],t[3][j]=H[3][G[1][G[1][p]^g(z[1],3)]^g(z[0],3)]}}function b(a){return t[0][g(a,0)]^t[1][g(a,1)]^t[2][g(a,2)]^t[3][g(a,3)]}function c(a){return t[0][g(a,3)]^t[1][g(a,0)]^t[2][g(a,1)]^t[3][g(a,2)]}function h(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2]^f+g+s[4*a+8]&k,31),e[3]=d(e[3],1)^f+2*g+s[4*a+9]&k,f=b(e[2]),g=c(e[3]),e[0]=d(e[0]^f+g+s[4*a+10]&k,31),e[1]=d(e[1],1)^f+2*g+s[4*a+11]&k}function i(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2],1)^f+g+s[4*a+10]&k,e[3]=d(e[3]^f+2*g+s[4*a+11]&k,31),f=b(e[2]),g=c(e[3]),e[0]=d(e[0],1)^f+g+s[4*a+8]&k,e[1]=d(e[1]^f+2*g+s[4*a+9]&k,31)}function j(){s=[],t=[[],[],[],[]]}function l(a,b){p=a,q=b;for(var c=[e(p,q)^s[0],e(p,q+4)^s[1],e(p,q+8)^s[2],e(p,q+12)^s[3]],d=0;8>d;d++)h(d,c);return f(p,q,c[2]^s[4]),f(p,q+4,c[3]^s[5]),f(p,q+8,c[0]^s[6]),f(p,q+12,c[1]^s[7]),q+=16,p}function m(a,b){p=a,q=b;for(var c=[e(p,q)^s[4],e(p,q+4)^s[5],e(p,q+8)^s[6],e(p,q+12)^s[7]],d=7;d>=0;d--)i(d,c);f(p,q,c[2]^s[0]),f(p,q+4,c[3]^s[1]),f(p,q+8,c[0]^s[2]),f(p,q+12,c[1]^s[3]),q+=16}function n(){return p}var o=null,p=null,q=-1,r=null;r="twofish";var s=[],t=[[],[],[],[]];return{name:"twofish",blocksize:16,open:a,close:j,encrypt:l,decrypt:m,finalize:n}}function i(a){this.tf=h(),this.tf.open(l.str2bin(a),0),this.encrypt=function(a){return this.tf.encrypt(j(a),0)}}function j(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b}var k=4294967295,l=a("../../util.js");b.exports=i,b.exports.keySize=i.prototype.keySize=32,b.exports.blockSize=i.prototype.blockSize=16},{"../../util.js":76}],25:[function(a,b,c){var d=a("./random.js"),e=a("./cipher"),f=a("./public_key"),g=a("../type/mpi.js");b.exports={publicKeyEncrypt:function(a,b,c){var d=function(){var d;switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":var e=new f.rsa,g=b[0].toBigInteger(),h=b[1].toBigInteger();return d=c.toBigInteger(),[e.encrypt(d,h,g)];case"elgamal":var i=new f.elgamal,j=b[0].toBigInteger(),k=b[1].toBigInteger(),l=b[2].toBigInteger();return d=c.toBigInteger(),i.encrypt(d,k,j,l);default:return[]}}();return d.map(function(a){var b=new g;return b.fromBigInteger(a),b})},publicKeyDecrypt:function(a,b,c){var d,e=function(){switch(a){case"rsa_encrypt_sign":case"rsa_encrypt":var e=new f.rsa,g=b[0].toBigInteger(),h=b[1].toBigInteger(),i=b[2].toBigInteger();d=b[3].toBigInteger();var j=b[4].toBigInteger(),k=b[5].toBigInteger(),l=c[0].toBigInteger();return e.decrypt(l,g,h,i,d,j,k);case"elgamal":var m=new f.elgamal,n=b[3].toBigInteger(),o=c[0].toBigInteger(),p=c[1].toBigInteger();return d=b[0].toBigInteger(),m.decrypt(o,p,d,n);default:return null}}(),h=new g;return h.fromBigInteger(e),h},getPrivateMpiCount:function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":return 4;case"elgamal":return 1;case"dsa":return 1;default:throw new Error("Unknown algorithm")}},getPublicMpiCount:function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":return 2;case"elgamal":return 3;case"dsa":return 4;default:throw new Error("Unknown algorithm.")}},generateMpi:function(a,b){function c(a){return a.map(function(a){var b=new g;return b.fromBigInteger(a),b})}switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":var d=new f.rsa;return d.generate(b,"10001").then(function(a){var b=[];return b.push(a.n),b.push(a.ee),b.push(a.d),b.push(a.p),b.push(a.q),b.push(a.u),c(b)});default:throw new Error("Unsupported algorithm for key generation.")}},getPrefixRandom:function(a){return d.getRandomBytes(e[a].blockSize)},generateSessionKey:function(a){return d.getRandomBytes(e[a].keySize)}}},{"../type/mpi.js":74,"./cipher":23,"./public_key":36,"./random.js":39}],26:[function(a,b,c){var d=b.exports={},e=a("./forge_util.js"),f=null,g=!1,h=null,i=function(){f=String.fromCharCode(128),f+=e.fillString(String.fromCharCode(0),64),h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],g=!0},j=function(a,b,c){for(var d,e,f,g,i,j,k,l,m,n,o,p,q,r,s,t=c.length();t>=64;){for(k=0;16>k;++k)b[k]=c.getInt32();for(;64>k;++k)d=b[k-2],d=(d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10,e=b[k-15],e=(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3,b[k]=d+b[k-7]+e+b[k-16]&4294967295;for(l=a.h0,m=a.h1,n=a.h2,o=a.h3,p=a.h4,q=a.h5,r=a.h6,s=a.h7,k=0;64>k;++k)g=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7),i=r^p&(q^r),f=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),j=l&m|n&(l^m),d=s+g+i+h[k]+b[k],e=f+j,s=r,r=q,q=p,p=o+d&4294967295,o=n,n=m,m=l,l=d+e&4294967295;a.h0=a.h0+l&4294967295,a.h1=a.h1+m&4294967295,a.h2=a.h2+n&4294967295,a.h3=a.h3+o&4294967295,a.h4=a.h4+p&4294967295,a.h5=a.h5+q&4294967295,a.h6=a.h6+r&4294967295,a.h7=a.h7+s&4294967295,t-=64}};d.create=function(){g||i();var a=null,b=e.createBuffer(),c=new Array(64),d={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0};return d.start=function(){return d.messageLength=0,b=e.createBuffer(),a={h0:1779033703,h1:3144134277,h2:1013904242,h3:2773480762,h4:1359893119,h5:2600822924,h6:528734635,h7:1541459225},d},d.start(),d.update=function(f,g){return"utf8"===g&&(f=e.encodeUtf8(f)),d.messageLength+=f.length,b.putBytes(f),j(a,c,b),(b.read>2048||0===b.length())&&b.compact(),d},d.digest=function(){var g=d.messageLength,h=e.createBuffer();h.putBytes(b.bytes()),h.putBytes(f.substr(0,64-(g+8)%64)),h.putInt32(g>>>29&255),h.putInt32(g<<3&4294967295);var i={h0:a.h0,h1:a.h1,h2:a.h2,h3:a.h3,h4:a.h4,h5:a.h5,h6:a.h6,h7:a.h7};j(i,c,h);var k=e.createBuffer();return k.putInt32(i.h0),k.putInt32(i.h1),k.putInt32(i.h2),k.putInt32(i.h3),k.putInt32(i.h4),k.putInt32(i.h5),k.putInt32(i.h6),k.putInt32(i.h7),k},d}},{"./forge_util.js":27}],27:[function(a,b,c){var d=b.exports={};d.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},d.isArrayBuffer=function(a){return"undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer};var e=[];"undefined"!=typeof Int8Array&&e.push(Int8Array),"undefined"!=typeof Uint8Array&&e.push(Uint8Array),"undefined"!=typeof Uint8ClampedArray&&e.push(Uint8ClampedArray),"undefined"!=typeof Int16Array&&e.push(Int16Array),"undefined"!=typeof Uint16Array&&e.push(Uint16Array),"undefined"!=typeof Int32Array&&e.push(Int32Array),"undefined"!=typeof Uint32Array&&e.push(Uint32Array),"undefined"!=typeof Float32Array&&e.push(Float32Array),"undefined"!=typeof Float64Array&&e.push(Float64Array),d.isArrayBufferView=function(a){for(var b=0;b<e.length;++b)if(a instanceof e[b])return!0;return!1},d.ByteBuffer=function(a){if(this.data="",this.read=0,"string"==typeof a)this.data=a;else if(d.isArrayBuffer(a)||d.isArrayBufferView(a)){var b=new Uint8Array(a);try{this.data=String.fromCharCode.apply(null,b)}catch(c){for(var e=0;e<b.length;++e)this.putByte(b[e])}}},d.ByteBuffer.prototype.length=function(){return this.data.length-this.read},d.ByteBuffer.prototype.isEmpty=function(){return this.length()<=0},d.ByteBuffer.prototype.putByte=function(a){return this.data+=String.fromCharCode(a),this},d.ByteBuffer.prototype.fillWithByte=function(a,b){a=String.fromCharCode(a);for(var c=this.data;b>0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return this.data=c,this},d.ByteBuffer.prototype.putBytes=function(a){return this.data+=a,this},d.ByteBuffer.prototype.putString=function(a){return this.data+=d.encodeUtf8(a),this},d.ByteBuffer.prototype.putInt16=function(a){return this.data+=String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt24=function(a){return this.data+=String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt32=function(a){return this.data+=String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt16Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255),this},d.ByteBuffer.prototype.putInt24Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255),this},d.ByteBuffer.prototype.putInt32Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>24&255),this},d.ByteBuffer.prototype.putInt=function(a,b){do b-=8,this.data+=String.fromCharCode(a>>b&255);while(b>0);return this},d.ByteBuffer.prototype.putSignedInt=function(a,b){return 0>a&&(a+=2<<b-1),this.putInt(a,b)},d.ByteBuffer.prototype.putBuffer=function(a){return this.data+=a.getBytes(),this},d.ByteBuffer.prototype.getByte=function(){return this.data.charCodeAt(this.read++)},d.ByteBuffer.prototype.getInt16=function(){var a=this.data.charCodeAt(this.read)<<8^this.data.charCodeAt(this.read+1);return this.read+=2,a},d.ByteBuffer.prototype.getInt24=function(){var a=this.data.charCodeAt(this.read)<<16^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2);return this.read+=3,a},d.ByteBuffer.prototype.getInt32=function(){var a=this.data.charCodeAt(this.read)<<24^this.data.charCodeAt(this.read+1)<<16^this.data.charCodeAt(this.read+2)<<8^this.data.charCodeAt(this.read+3);return this.read+=4,a},d.ByteBuffer.prototype.getInt16Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8;return this.read+=2,a},d.ByteBuffer.prototype.getInt24Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16;return this.read+=3,a},d.ByteBuffer.prototype.getInt32Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16^this.data.charCodeAt(this.read+3)<<24;return this.read+=4,a},d.ByteBuffer.prototype.getInt=function(a){var b=0;do b=(b<<8)+this.data.charCodeAt(this.read++),a-=8;while(a>0);return b},d.ByteBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},d.ByteBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},d.ByteBuffer.prototype.bytes=function(a){return"undefined"==typeof a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},d.ByteBuffer.prototype.at=function(a){return this.data.charCodeAt(this.read+a)},d.ByteBuffer.prototype.setAt=function(a,b){return this.data=this.data.substr(0,this.read+a)+String.fromCharCode(b)+this.data.substr(this.read+a+1),this},d.ByteBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},d.ByteBuffer.prototype.copy=function(){var a=d.createBuffer(this.data);return a.read=this.read,a},d.ByteBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},d.ByteBuffer.prototype.clear=function(){return this.data="",this.read=0,this},d.ByteBuffer.prototype.truncate=function(a){var b=Math.max(0,this.length()-a);return this.data=this.data.substr(this.read,b),this.read=0,this},d.ByteBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.length;++b){var c=this.data.charCodeAt(b);16>c&&(a+="0"),a+=c.toString(16)}return a},d.ByteBuffer.prototype.toString=function(){return d.decodeUtf8(this.bytes())},d.createBuffer=function(a,b){return b=b||"raw",void 0!==a&&"utf8"===b&&(a=d.encodeUtf8(a)),new d.ByteBuffer(a)},d.fillString=function(a,b){for(var c="";b>0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return c},d.xorBytes=function(a,b,c){for(var d="",e="",f="",g=0,h=0;c>0;--c,++g)e=a.charCodeAt(g)^b.charCodeAt(g),h>=10&&(d+=f,f="",h=0),f+=String.fromCharCode(e),++h;return d+=f},d.hexToBytes=function(a){var b="",c=0;for(a.length&!0&&(c=1,b+=String.fromCharCode(parseInt(a[0],16)));c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},d.bytesToHex=function(a){return d.createBuffer(a).toHex()},d.int32ToBytes=function(a){return String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a)};var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];d.encode64=function(a,b){for(var c,d,e,g="",h="",i=0;i<a.length;)c=a.charCodeAt(i++),d=a.charCodeAt(i++),e=a.charCodeAt(i++),g+=f.charAt(c>>2),g+=f.charAt((3&c)<<4|d>>4),isNaN(d)?g+="==":(g+=f.charAt((15&d)<<2|e>>6),g+=isNaN(e)?"=":f.charAt(63&e)),b&&g.length>b&&(h+=g.substr(0,b)+"\r\n",g=g.substr(b));return h+=g},d.decode64=function(a){a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var b,c,d,e,f="",h=0;h<a.length;)b=g[a.charCodeAt(h++)-43],c=g[a.charCodeAt(h++)-43],d=g[a.charCodeAt(h++)-43],e=g[a.charCodeAt(h++)-43],f+=String.fromCharCode(b<<2|c>>4),64!==d&&(f+=String.fromCharCode((15&c)<<4|d>>2),64!==e&&(f+=String.fromCharCode((3&d)<<6|e)));return f},d.encodeUtf8=function(a){return unescape(encodeURIComponent(a))},d.decodeUtf8=function(a){return decodeURIComponent(escape(a))}},{}],28:[function(a,b,c){var d=a("./sha.js"),e=a("./forge_sha256.js");b.exports={md5:a("./md5.js"),sha1:d.sha1,sha224:d.sha224,sha256:d.sha256,sha384:d.sha384,sha512:d.sha512,ripemd:a("./ripe-md.js"),digest:function(a,b){switch(a){case 1:return this.md5(b);case 2:return this.sha1(b);case 3:return this.ripemd(b);case 8:var c=e.create();return c.update(b),c.digest().getBytes();case 9:return this.sha384(b);case 10:return this.sha512(b);case 11:return this.sha224(b);default:throw new Error("Invalid hash function.")}},getHashByteLength:function(a){switch(a){case 1:return 16;case 2:case 3:return 20;case 8:return 32;case 9:return 48;case 10:return 64;case 11:return 28;default:throw new Error("Invalid hash algorithm.")}}}},{"./forge_sha256.js":26,"./md5.js":29,"./ripe-md.js":30,"./sha.js":31}],29:[function(a,b,c){function d(a,b){var c=a[0],d=a[1],e=a[2],j=a[3];c=f(c,d,e,j,b[0],7,-680876936),j=f(j,c,d,e,b[1],12,-389564586),e=f(e,j,c,d,b[2],17,606105819),d=f(d,e,j,c,b[3],22,-1044525330),c=f(c,d,e,j,b[4],7,-176418897),j=f(j,c,d,e,b[5],12,1200080426),e=f(e,j,c,d,b[6],17,-1473231341),d=f(d,e,j,c,b[7],22,-45705983),c=f(c,d,e,j,b[8],7,1770035416),j=f(j,c,d,e,b[9],12,-1958414417),e=f(e,j,c,d,b[10],17,-42063),d=f(d,e,j,c,b[11],22,-1990404162),c=f(c,d,e,j,b[12],7,1804603682),j=f(j,c,d,e,b[13],12,-40341101),e=f(e,j,c,d,b[14],17,-1502002290),d=f(d,e,j,c,b[15],22,1236535329),c=g(c,d,e,j,b[1],5,-165796510),j=g(j,c,d,e,b[6],9,-1069501632),e=g(e,j,c,d,b[11],14,643717713),d=g(d,e,j,c,b[0],20,-373897302),c=g(c,d,e,j,b[5],5,-701558691),j=g(j,c,d,e,b[10],9,38016083),e=g(e,j,c,d,b[15],14,-660478335),d=g(d,e,j,c,b[4],20,-405537848),c=g(c,d,e,j,b[9],5,568446438),j=g(j,c,d,e,b[14],9,-1019803690),e=g(e,j,c,d,b[3],14,-187363961),d=g(d,e,j,c,b[8],20,1163531501),c=g(c,d,e,j,b[13],5,-1444681467),j=g(j,c,d,e,b[2],9,-51403784),e=g(e,j,c,d,b[7],14,1735328473),d=g(d,e,j,c,b[12],20,-1926607734),c=h(c,d,e,j,b[5],4,-378558),j=h(j,c,d,e,b[8],11,-2022574463),e=h(e,j,c,d,b[11],16,1839030562),d=h(d,e,j,c,b[14],23,-35309556),c=h(c,d,e,j,b[1],4,-1530992060),j=h(j,c,d,e,b[4],11,1272893353),e=h(e,j,c,d,b[7],16,-155497632),d=h(d,e,j,c,b[10],23,-1094730640),c=h(c,d,e,j,b[13],4,681279174),j=h(j,c,d,e,b[0],11,-358537222),e=h(e,j,c,d,b[3],16,-722521979),d=h(d,e,j,c,b[6],23,76029189),c=h(c,d,e,j,b[9],4,-640364487),j=h(j,c,d,e,b[12],11,-421815835),e=h(e,j,c,d,b[15],16,530742520),d=h(d,e,j,c,b[2],23,-995338651),c=i(c,d,e,j,b[0],6,-198630844),j=i(j,c,d,e,b[7],10,1126891415),e=i(e,j,c,d,b[14],15,-1416354905),d=i(d,e,j,c,b[5],21,-57434055),c=i(c,d,e,j,b[12],6,1700485571),j=i(j,c,d,e,b[3],10,-1894986606),e=i(e,j,c,d,b[10],15,-1051523),d=i(d,e,j,c,b[1],21,-2054922799),c=i(c,d,e,j,b[8],6,1873313359),j=i(j,c,d,e,b[15],10,-30611744),e=i(e,j,c,d,b[6],15,-1560198380),d=i(d,e,j,c,b[13],21,1309151649),c=i(c,d,e,j,b[4],6,-145523070),j=i(j,c,d,e,b[11],10,-1120210379),e=i(e,j,c,d,b[2],15,718787259),d=i(d,e,j,c,b[9],21,-343485551),a[0]=o(c,a[0]),a[1]=o(d,a[1]),a[2]=o(e,a[2]),a[3]=o(j,a[3])}function e(a,b,c,d,e,f){return b=o(o(b,a),o(d,f)),o(b<<e|b>>>32-e,c)}function f(a,b,c,d,f,g,h){return e(b&c|~b&d,a,b,f,g,h)}function g(a,b,c,d,f,g,h){return e(b&d|c&~d,a,b,f,g,h)}function h(a,b,c,d,f,g,h){return e(b^c^d,a,b,f,g,h)}function i(a,b,c,d,f,g,h){return e(c^(b|~d),a,b,f,g,h)}function j(a){var b,c=a.length,e=[1732584193,-271733879,-1732584194,271733878];for(b=64;b<=a.length;b+=64)d(e,k(a.substring(b-64,b)));a=a.substring(b-64);var f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;b<a.length;b++)f[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(f[b>>2]|=128<<(b%4<<3),b>55)for(d(e,f),b=0;16>b;b++)f[b]=0;return f[14]=8*c,d(e,f),e}function k(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c}function l(a){for(var b="",c=0;4>c;c++)b+=q[a>>8*c+4&15]+q[a>>8*c&15];return b}function m(a){for(var b=0;b<a.length;b++)a[b]=l(a[b]);return a.join("")}function n(a){return m(j(a))}function o(a,b){return a+b&4294967295}function o(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}var p=a("../../util.js");b.exports=function(a){var b=n(a),c=p.hex2bin(b);return c};var q="0123456789abcdef".split("");"5d41402abc4b2a76b9719d911017c592"!=n("hello")},{"../../util.js":76}],30:[function(a,b,c){function d(a,b){return new Number(a<<b|a>>>32-b)}function e(a,b,c){return new Number(a^b^c)}function f(a,b,c){return new Number(a&b|~a&c)}function g(a,b,c){return new Number((a|~b)^c)}function h(a,b,c){return new Number(a&c|b&~c)}function i(a,b,c){return new Number(a^(b|~c))}function j(a,b,c,j,k,l,m,n){switch(n){case 0:a+=e(b,c,j)+l+0;break;case 1:a+=f(b,c,j)+l+1518500249;break;case 2:a+=g(b,c,j)+l+1859775393;break;case 3:a+=h(b,c,j)+l+2400959708;break;case 4:a+=i(b,c,j)+l+2840853838;break;case 5:a+=i(b,c,j)+l+1352829926;break;case 6:a+=h(b,c,j)+l+1548603684;break;case 7:a+=g(b,c,j)+l+1836072691;break;case 8:a+=f(b,c,j)+l+2053994217;break;case 9:a+=e(b,c,j)+l+0;break;default:throw new Error("Bogus round number")}a=d(a,m)+k,c=d(c,10),a&=4294967295,b&=4294967295,c&=4294967295,j&=4294967295,k&=4294967295;var o=[];return o[0]=a,o[1]=b,o[2]=c,o[3]=j,o[4]=k,o[5]=l,o[6]=m,o}function k(a){a[0]=1732584193,a[1]=4023233417,a[2]=2562383102,a[3]=271733878,a[4]=3285377520}function l(a,b){var c,d,e,f=[],g=[];for(d=0;5>d;d++)f[d]=new Number(a[d]),g[d]=new Number(a[d]);var h=0;for(e=0;5>e;e++)for(d=0;16>d;d++)c=j(f[(h+0)%5],f[(h+1)%5],f[(h+2)%5],f[(h+3)%5],f[(h+4)%5],b[t[e][d]],s[e][d],e),f[(h+0)%5]=c[0],f[(h+1)%5]=c[1],f[(h+2)%5]=c[2],f[(h+3)%5]=c[3],f[(h+4)%5]=c[4],h+=4;for(h=0,e=5;10>e;e++)for(d=0;16>d;d++)c=j(g[(h+0)%5],g[(h+1)%5],g[(h+2)%5],g[(h+3)%5],g[(h+4)%5],b[t[e][d]],s[e][d],e),g[(h+0)%5]=c[0],g[(h+1)%5]=c[1],g[(h+2)%5]=c[2],g[(h+3)%5]=c[3],g[(h+4)%5]=c[4],h+=4;g[3]+=f[2]+a[1],a[1]=a[2]+f[3]+g[4],a[2]=a[3]+f[4]+g[0],a[3]=a[4]+f[0]+g[1],a[4]=a[0]+f[1]+g[2],a[0]=g[3]}function m(a){for(var b=0;16>b;b++)a[b]=0}function n(a,b,c,d){var e=new Array(16);m(e);for(var f=0,g=0;(63&c)>g;g++)e[g>>>2]^=(255&b.charCodeAt(f++))<<8*(3&g);e[c>>>2&15]^=1<<8*(3&c)+7,(63&c)>55&&(l(a,e),e=new Array(16),m(e)),e[14]=c<<3,e[15]=c>>>29|d<<3,l(a,e)}function o(a){var b=(255&a.charCodeAt(3))<<24;return b|=(255&a.charCodeAt(2))<<16,b|=(255&a.charCodeAt(1))<<8,b|=255&a.charCodeAt(0)}function p(a){var b,c,d=new Array(r/32),e=new Array(r/8);k(d),b=a.length;var f=new Array(16);m(f);var g,h=0;for(c=b;c>63;c-=64){for(g=0;16>g;g++)f[g]=o(a.substr(h,4)),h+=4;l(d,f)}for(n(d,a.substr(h),b,0),g=0;r/8>g;g+=4)e[g]=255&d[g>>>2],e[g+1]=d[g>>>2]>>>8&255,e[g+2]=d[g>>>2]>>>16&255,e[g+3]=d[g>>>2]>>>24&255;return e}function q(a){for(var b=p(a),c="",d=0;r/8>d;d++)c+=String.fromCharCode(b[d]);return c}var r=160,s=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12],[11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5],[11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12],[9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6],[9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11],[9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5],[15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8],[8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]],t=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8],[3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12],[1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2],[4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12],[6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2],[15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13],[8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14],[12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]];b.exports=q},{}],31:[function(a,b,c){var d=function(){var a=8,b="",c=0,d=function(a,b){this.highOrder=a,this.lowOrder=b},e=function(b){var c,d=[],e=(1<<a)-1,f=b.length*a;for(c=0;f>c;c+=a)d[c>>5]|=(b.charCodeAt(c/a)&e)<<32-a-c%32;return d},f=function(a){var b,c,d=[],e=a.length;for(b=0;e>b;b+=2){if(c=parseInt(a.substr(b,2),16),isNaN(c))throw new Error("INVALID HEX STRING");d[b>>3]|=c<<24-4*(b%8)}return d},g=function(a){var b,d,e=c?"0123456789ABCDEF":"0123456789abcdef",f="",g=4*a.length;for(b=0;g>b;b+=1)d=a[b>>2]>>8*(3-b%4),f+=e.charAt(d>>4&15)+e.charAt(15&d);return f},h=function(a){var c,d,e,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",g="",h=4*a.length;for(c=0;h>c;c+=3)for(e=(a[c>>2]>>8*(3-c%4)&255)<<16|(a[c+1>>2]>>8*(3-(c+1)%4)&255)<<8|a[c+2>>2]>>8*(3-(c+2)%4)&255,d=0;4>d;d+=1)g+=8*c+6*d<=32*a.length?f.charAt(e>>6*(3-d)&63):b;return g},i=function(a){for(var b="",c=255,d=0;d<32*a.length;d+=8)b+=String.fromCharCode(a[d>>5]>>>24-d%32&c);return b},j=function(a,b){return a<<b|a>>>32-b},k=function(a,b){return a>>>b|a<<32-b},l=function(a,b){return 32>=b?new d(a.highOrder>>>b|a.lowOrder<<32-b,a.lowOrder>>>b|a.highOrder<<32-b):new d(a.lowOrder>>>b|a.highOrder<<32-b,a.highOrder>>>b|a.lowOrder<<32-b)},m=function(a,b){return a>>>b},n=function(a,b){return 32>=b?new d(a.highOrder>>>b,a.lowOrder>>>b|a.highOrder<<32-b):new d(0,a.highOrder<<32-b)},o=function(a,b,c){return a^b^c},p=function(a,b,c){return a&b^~a&c},q=function(a,b,c){return new d(a.highOrder&b.highOrder^~a.highOrder&c.highOrder,a.lowOrder&b.lowOrder^~a.lowOrder&c.lowOrder)},r=function(a,b,c){return a&b^a&c^b&c},s=function(a,b,c){return new d(a.highOrder&b.highOrder^a.highOrder&c.highOrder^b.highOrder&c.highOrder,a.lowOrder&b.lowOrder^a.lowOrder&c.lowOrder^b.lowOrder&c.lowOrder)},t=function(a){return k(a,2)^k(a,13)^k(a,22)},u=function(a){var b=l(a,28),c=l(a,34),e=l(a,39);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},v=function(a){return k(a,6)^k(a,11)^k(a,25)},w=function(a){var b=l(a,14),c=l(a,18),e=l(a,41);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},x=function(a){return k(a,7)^k(a,18)^m(a,3)},y=function(a){var b=l(a,1),c=l(a,8),e=n(a,7);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},z=function(a){return k(a,17)^k(a,19)^m(a,10)},A=function(a){var b=l(a,19),c=l(a,61),e=n(a,6);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},B=function(a,b){var c=(65535&a)+(65535&b),d=(a>>>16)+(b>>>16)+(c>>>16);return(65535&d)<<16|65535&c},C=function(a,b,c,d){var e=(65535&a)+(65535&b)+(65535&c)+(65535&d),f=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16);return(65535&f)<<16|65535&e},D=function(a,b,c,d,e){var f=(65535&a)+(65535&b)+(65535&c)+(65535&d)+(65535&e),g=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16)+(f>>>16);return(65535&g)<<16|65535&f},E=function(a,b){var c,e,f,g;return c=(65535&a.lowOrder)+(65535&b.lowOrder),e=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c>>>16),f=(65535&e)<<16|65535&c,c=(65535&a.highOrder)+(65535&b.highOrder)+(e>>>16),e=(a.highOrder>>>16)+(b.highOrder>>>16)+(c>>>16),g=(65535&e)<<16|65535&c,new d(g,f)},F=function(a,b,c,e){
+var f,g,h,i;return f=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder),g=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f>>>16),h=(65535&g)<<16|65535&f,f=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(g>>>16),g=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f>>>16),i=(65535&g)<<16|65535&f,new d(i,h)},G=function(a,b,c,e,f){var g,h,i,j;return g=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder)+(65535&f.lowOrder),h=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f.lowOrder>>>16)+(g>>>16),i=(65535&h)<<16|65535&g,g=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(65535&f.highOrder)+(h>>>16),h=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f.highOrder>>>16)+(g>>>16),j=(65535&h)<<16|65535&g,new d(j,i)},H=function(a,b){var c,d,e,f,g,h,i,k,l,m=[],n=p,q=o,s=r,t=j,u=B,v=D,w=[1732584193,4023233417,2562383102,271733878,3285377520],x=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];for(a[b>>5]|=128<<24-b%32,a[(b+65>>9<<4)+15]=b,l=a.length,i=0;l>i;i+=16){for(c=w[0],d=w[1],e=w[2],f=w[3],g=w[4],k=0;80>k;k+=1)16>k?m[k]=a[k+i]:m[k]=t(m[k-3]^m[k-8]^m[k-14]^m[k-16],1),h=20>k?v(t(c,5),n(d,e,f),g,x[k],m[k]):40>k?v(t(c,5),q(d,e,f),g,x[k],m[k]):60>k?v(t(c,5),s(d,e,f),g,x[k],m[k]):v(t(c,5),q(d,e,f),g,x[k],m[k]),g=f,f=e,e=t(d,30),d=c,c=h;w[0]=u(c,w[0]),w[1]=u(d,w[1]),w[2]=u(e,w[2]),w[3]=u(f,w[3]),w[4]=u(g,w[4])}return w},I=function(a,b,c){var e,f,g,h,i,j,k,l,m,n,o,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z=[];for("SHA-224"===c||"SHA-256"===c?(H=64,I=(b+65>>9<<4)+15,L=16,M=1,W=Number,N=B,O=C,P=D,Q=x,R=z,S=t,T=v,V=r,U=p,X=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],o="SHA-224"===c?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]):("SHA-384"===c||"SHA-512"===c)&&(H=80,I=(b+128>>10<<5)+31,L=32,M=2,W=d,N=E,O=F,P=G,Q=y,R=A,S=u,T=w,V=s,U=q,X=[new W(1116352408,3609767458),new W(1899447441,602891725),new W(3049323471,3964484399),new W(3921009573,2173295548),new W(961987163,4081628472),new W(1508970993,3053834265),new W(2453635748,2937671579),new W(2870763221,3664609560),new W(3624381080,2734883394),new W(310598401,1164996542),new W(607225278,1323610764),new W(1426881987,3590304994),new W(1925078388,4068182383),new W(2162078206,991336113),new W(2614888103,633803317),new W(3248222580,3479774868),new W(3835390401,2666613458),new W(4022224774,944711139),new W(264347078,2341262773),new W(604807628,2007800933),new W(770255983,1495990901),new W(1249150122,1856431235),new W(1555081692,3175218132),new W(1996064986,2198950837),new W(2554220882,3999719339),new W(2821834349,766784016),new W(2952996808,2566594879),new W(3210313671,3203337956),new W(3336571891,1034457026),new W(3584528711,2466948901),new W(113926993,3758326383),new W(338241895,168717936),new W(666307205,1188179964),new W(773529912,1546045734),new W(1294757372,1522805485),new W(1396182291,2643833823),new W(1695183700,2343527390),new W(1986661051,1014477480),new W(2177026350,1206759142),new W(2456956037,344077627),new W(2730485921,1290863460),new W(2820302411,3158454273),new W(3259730800,3505952657),new W(3345764771,106217008),new W(3516065817,3606008344),new W(3600352804,1432725776),new W(4094571909,1467031594),new W(275423344,851169720),new W(430227734,3100823752),new W(506948616,1363258195),new W(659060556,3750685593),new W(883997877,3785050280),new W(958139571,3318307427),new W(1322822218,3812723403),new W(1537002063,2003034995),new W(1747873779,3602036899),new W(1955562222,1575990012),new W(2024104815,1125592928),new W(2227730452,2716904306),new W(2361852424,442776044),new W(2428436474,593698344),new W(2756734187,3733110249),new W(3204031479,2999351573),new W(3329325298,3815920427),new W(3391569614,3928383900),new W(3515267271,566280711),new W(3940187606,3454069534),new W(4118630271,4000239992),new W(116418474,1914138554),new W(174292421,2731055270),new W(289380356,3203993006),new W(460393269,320620315),new W(685471733,587496836),new W(852142971,1086792851),new W(1017036298,365543100),new W(1126000580,2618297676),new W(1288033470,3409855158),new W(1501505948,4234509866),new W(1607167915,987167468),new W(1816402316,1246189591)],o="SHA-384"===c?[new W(3418070365,3238371032),new W(1654270250,914150663),new W(2438529370,812702999),new W(355462360,4144912697),new W(1731405415,4290775857),new W(41048885895,1750603025),new W(3675008525,1694076839),new W(1203062813,3204075428)]:[new W(1779033703,4089235720),new W(3144134277,2227873595),new W(1013904242,4271175723),new W(2773480762,1595750129),new W(1359893119,2917565137),new W(2600822924,725511199),new W(528734635,4215389547),new W(1541459225,327033209)]),a[b>>5]|=128<<24-b%32,a[I]=b,Y=a.length,J=0;Y>J;J+=L){for(e=o[0],f=o[1],g=o[2],h=o[3],i=o[4],j=o[5],k=o[6],l=o[7],K=0;H>K;K+=1)16>K?Z[K]=new W(a[K*M+J],a[K*M+J+1]):Z[K]=O(R(Z[K-2]),Z[K-7],Q(Z[K-15]),Z[K-16]),m=P(l,T(i),U(i,j,k),X[K],Z[K]),n=N(S(e),V(e,f,g)),l=k,k=j,j=i,i=N(h,m),h=g,g=f,f=e,e=N(m,n);o[0]=N(e,o[0]),o[1]=N(f,o[1]),o[2]=N(g,o[2]),o[3]=N(h,o[3]),o[4]=N(i,o[4]),o[5]=N(j,o[5]),o[6]=N(k,o[6]),o[7]=N(l,o[7])}switch(c){case"SHA-224":return[o[0],o[1],o[2],o[3],o[4],o[5],o[6]];case"SHA-256":return o;case"SHA-384":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder];case"SHA-512":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder,o[6].highOrder,o[6].lowOrder,o[7].highOrder,o[7].lowOrder];default:throw new Error("Unknown SHA variant")}},J=function(b,c){if(this.sha1=null,this.sha224=null,this.sha256=null,this.sha384=null,this.sha512=null,this.strBinLen=null,this.strToHash=null,"HEX"===c){if(0!==b.length%2)throw new Error("TEXT MUST BE IN BYTE INCREMENTS");this.strBinLen=4*b.length,this.strToHash=f(b)}else{if("ASCII"!==c&&"undefined"!=typeof c)throw new Error("UNKNOWN TEXT INPUT TYPE");this.strBinLen=b.length*a,this.strToHash=e(b)}};return J.prototype={getHash:function(a,b){var c=null,d=this.strToHash.slice();switch(b){case"HEX":c=g;break;case"B64":c=h;break;case"ASCII":c=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(a){case"SHA-1":return null===this.sha1&&(this.sha1=H(d,this.strBinLen)),c(this.sha1);case"SHA-224":return null===this.sha224&&(this.sha224=I(d,this.strBinLen,a)),c(this.sha224);case"SHA-256":return null===this.sha256&&(this.sha256=I(d,this.strBinLen,a)),c(this.sha256);case"SHA-384":return null===this.sha384&&(this.sha384=I(d,this.strBinLen,a)),c(this.sha384);case"SHA-512":return null===this.sha512&&(this.sha512=I(d,this.strBinLen,a)),c(this.sha512);default:throw new Error("HASH NOT RECOGNIZED")}},getHMAC:function(b,c,d,j){var k,l,m,n,o,p,q,r,s,t=[],u=[];switch(j){case"HEX":k=g;break;case"B64":k=h;break;case"ASCII":k=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(d){case"SHA-1":m=64,s=160;break;case"SHA-224":m=64,s=224;break;case"SHA-256":m=64,s=256;break;case"SHA-384":m=128,s=384;break;case"SHA-512":m=128,s=512;break;default:throw new Error("HASH NOT RECOGNIZED")}if("HEX"===c){if(0!==b.length%2)throw new Error("KEY MUST BE IN BYTE INCREMENTS");l=f(b),r=4*b.length}else{if("ASCII"!==c)throw new Error("UNKNOWN KEY INPUT TYPE");l=e(b),r=b.length*a}for(n=8*m,q=m/4-1,r/8>m?(l="SHA-1"===d?H(l,r):I(l,r,d),l[q]&=4294967040):m>r/8&&(l[q]&=4294967040),o=0;q>=o;o+=1)t[o]=909522486^l[o],u[o]=1549556828^l[o];return"SHA-1"===d?(p=H(t.concat(this.strToHash),n+this.strBinLen),p=H(u.concat(p),n+s)):(p=I(t.concat(this.strToHash),n+this.strBinLen,d),p=I(u.concat(p),n+s,d)),k(p)}},J}();b.exports={sha1:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-1","ASCII")},sha224:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-224","ASCII")},sha256:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-256","ASCII")},sha384:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-384","ASCII")},sha512:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-512","ASCII")}}},{}],32:[function(a,b,c){b.exports={cipher:a("./cipher"),hash:a("./hash"),cfb:a("./cfb.js"),publicKey:a("./public_key"),signature:a("./signature.js"),random:a("./random.js"),pkcs1:a("./pkcs1.js")};var d=a("./crypto.js");for(var e in d)b.exports[e]=d[e]},{"./cfb.js":18,"./cipher":23,"./crypto.js":25,"./hash":28,"./pkcs1.js":33,"./public_key":36,"./random.js":39,"./signature.js":40}],33:[function(a,b,c){function d(a){for(var b,c="";c.length<a;)b=f.getSecureRandomOctet(),0!==b&&(c+=String.fromCharCode(b));return c}var e=[];e[1]=[48,32,48,12,6,8,42,134,72,134,247,13,2,5,5,0,4,16],e[2]=[48,33,48,9,6,5,43,14,3,2,26,5,0,4,20],e[3]=[48,33,48,9,6,5,43,36,3,2,1,5,0,4,20],e[8]=[48,49,48,13,6,9,96,134,72,1,101,3,4,2,1,5,0,4,32],e[9]=[48,65,48,13,6,9,96,134,72,1,101,3,4,2,2,5,0,4,48],e[10]=[48,81,48,13,6,9,96,134,72,1,101,3,4,2,3,5,0,4,64],e[11]=[48,45,48,13,6,9,96,134,72,1,101,3,4,2,4,5,0,4,28];var f=(a("./crypto.js"),a("./random.js")),g=a("../util.js"),h=a("./public_key/jsbn.js"),i=a("./hash");b.exports={eme:{encode:function(a,b){var c=a.length;if(c>b-11)throw new Error("Message too long");var e=d(b-c-3),f=String.fromCharCode(0)+String.fromCharCode(2)+e+String.fromCharCode(0)+a;return f},decode:function(a){0!==a.charCodeAt(0)&&(a=String.fromCharCode(0)+a);for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=2;0!==a.charCodeAt(d)&&d<a.length;)d++;var e=d-2,f=a.charCodeAt(d++);if(0===b&&2===c&&e>=8&&0===f)return a.substr(d);throw new Error("Decryption error")}},emsa:{encode:function(a,b,c){var d,f=i.digest(a,b);if(f.length!==i.getHashByteLength(a))throw new Error("Invalid hash length");var j="";for(d=0;d<e[a].length;d++)j+=String.fromCharCode(e[a][d]);j+=f;var k=j.length;if(k+11>c)throw new Error("Intended encoded message length too short");var l="";for(d=0;c-k-3>d;d++)l+=String.fromCharCode(255);var m=String.fromCharCode(0)+String.fromCharCode(1)+l+String.fromCharCode(0)+j;return new h(g.hexstrdump(m),16)}}}},{"../util.js":76,"./crypto.js":25,"./hash":28,"./public_key/jsbn.js":37,"./random.js":39}],34:[function(a,b,c){function d(){function a(a,b,c,d,i,j){for(var k,l,m,n=h.getLeftNBits(g.digest(a,b),i.bitLength()),o=new e(h.hexstrdump(n),16);;)if(k=f.getRandomBigIntegerInRange(e.ONE,i.subtract(e.ONE)),l=c.modPow(k,d).mod(i),m=k.modInverse(i).multiply(o.add(j.multiply(l))).mod(i),0!=l&&0!=m)break;var p=[];return p[0]=l.toMPI(),p[1]=m.toMPI(),p}function b(a){var b=i.prefer_hash_algorithm;switch(Math.round(a.bitLength()/8)){case 20:return 2!=b&&b>11&&10!=b&&8>b?2:b;case 28:return b>11&&8>b?11:b;case 32:return b>10&&8>b?8:b;default:return h.print_debug("DSA select hash algorithm: returning null for an unknown length of q"),null}}function c(a,b,c,d,f,i,j,k){var l=h.getLeftNBits(g.digest(a,d),i.bitLength()),m=new e(h.hexstrdump(l),16);if(e.ZERO.compareTo(b)>=0||b.compareTo(i)>=0||e.ZERO.compareTo(c)>=0||c.compareTo(i)>=0)return h.print_debug("invalid DSA Signature"),null;var n=c.modInverse(i);if(0==e.ZERO.compareTo(n))return h.print_debug("invalid DSA Signature"),null;var o=m.multiply(n).mod(i),p=b.multiply(n).mod(i);return j.modPow(o,f).multiply(k.modPow(p,f)).mod(f).mod(i)}this.select_hash_algorithm=b,this.sign=a,this.verify=c}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../hash"),h=a("../../util.js"),i=a("../../config");b.exports=d},{"../../config":17,"../../util.js":76,"../hash":28,"../random.js":39,"./jsbn.js":37}],35:[function(a,b,c){function d(){function a(a,b,c,d){var g=c.subtract(e.TWO),h=f.getRandomBigIntegerInRange(e.ONE,g);h=h.mod(g).add(e.ONE);var i=[];return i[0]=b.modPow(h,c),i[1]=d.modPow(h,c).multiply(a).mod(c),i}function b(a,b,c,d){return g.print_debug("Elgamal Decrypt:\nc1:"+g.hexstrdump(a.toMPI())+"\nc2:"+g.hexstrdump(b.toMPI())+"\np:"+g.hexstrdump(c.toMPI())+"\nx:"+g.hexstrdump(d.toMPI())),a.modPow(d,c).modInverse(c).multiply(b).mod(c)}this.encrypt=a,this.decrypt=b}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../../util.js");b.exports=d},{"../../util.js":76,"../random.js":39,"./jsbn.js":37}],36:[function(a,b,c){b.exports={rsa:a("./rsa.js"),elgamal:a("./elgamal.js"),dsa:a("./dsa.js")}},{"./dsa.js":34,"./elgamal.js":35,"./rsa.js":38}],37:[function(a,b,c){function d(a,b,c){null!=a&&("number"==typeof a?this.fromNumber(a,b,c):null==b&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function e(){return new d(null)}function f(a,b,c,d,e,f){for(;--f>=0;){var g=b*this[a++]+c[d]+e;e=Math.floor(g/67108864),c[d++]=67108863&g}return e}function g(a){return fb.charAt(a)}function h(a,b){var c=gb[a.charCodeAt(b)];return null==c?-1:c}function i(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t,a.s=this.s}function j(a){this.t=1,this.s=0>a?-1:0,a>0?this[0]=a:-1>a?this[0]=a+this.DV:this.t=0}function k(a){var b=e();return b.fromInt(a),b}function l(a,b){var c;if(16==b)c=4;else if(8==b)c=3;else if(256==b)c=8;else if(2==b)c=1;else if(32==b)c=5;else{if(4!=b)return void this.fromRadix(a,b);c=2}this.t=0,this.s=0;for(var e=a.length,f=!1,g=0;--e>=0;){var i=8==c?255&a[e]:h(a,e);0>i?"-"==a.charAt(e)&&(f=!0):(f=!1,0==g?this[this.t++]=i:g+c>this.DB?(this[this.t-1]|=(i&(1<<this.DB-g)-1)<<g,this[this.t++]=i>>this.DB-g):this[this.t-1]|=i<<g,g+=c,g>=this.DB&&(g-=this.DB))}8==c&&0!=(128&a[0])&&(this.s=-1,g>0&&(this[this.t-1]|=(1<<this.DB-g)-1<<g)),this.clamp(),f&&d.ZERO.subTo(this,this)}function m(){for(var a=this.s&this.DM;this.t>0&&this[this.t-1]==a;)--this.t}function n(a){if(this.s<0)return"-"+this.negate().toString(a);var b;if(16==a)b=4;else if(8==a)b=3;else if(2==a)b=1;else if(32==a)b=5;else{if(4!=a)return this.toRadix(a);b=2}var c,d=(1<<b)-1,e=!1,f="",h=this.t,i=this.DB-h*this.DB%b;if(h-- >0)for(i<this.DB&&(c=this[h]>>i)>0&&(e=!0,f=g(c));h>=0;)b>i?(c=(this[h]&(1<<i)-1)<<b-i,c|=this[--h]>>(i+=this.DB-b)):(c=this[h]>>(i-=b)&d,0>=i&&(i+=this.DB,--h)),c>0&&(e=!0),e&&(f+=g(c));return e?f:"0"}function o(){var a=e();return d.ZERO.subTo(this,a),a}function p(){return this.s<0?this.negate():this}function q(a){var b=this.s-a.s;if(0!=b)return b;var c=this.t;if(b=c-a.t,0!=b)return this.s<0?-b:b;for(;--c>=0;)if(0!=(b=this[c]-a[c]))return b;return 0}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function s(){return this.t<=0?0:this.DB*(this.t-1)+r(this[this.t-1]^this.s&this.DM)}function t(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a,b.s=this.s}function u(a,b){for(var c=a;c<this.t;++c)b[c-a]=this[c];b.t=Math.max(this.t-a,0),b.s=this.s}function v(a,b){var c,d=a%this.DB,e=this.DB-d,f=(1<<e)-1,g=Math.floor(a/this.DB),h=this.s<<d&this.DM;for(c=this.t-1;c>=0;--c)b[c+g+1]=this[c]>>e|h,h=(this[c]&f)<<d;for(c=g-1;c>=0;--c)b[c]=0;b[g]=h,b.t=this.t+g+1,b.s=this.s,b.clamp()}function w(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)return void(b.t=0);var d=a%this.DB,e=this.DB-d,f=(1<<d)-1;b[0]=this[c]>>d;for(var g=c+1;g<this.t;++g)b[g-c-1]|=(this[g]&f)<<e,b[g-c]=this[g]>>d;d>0&&(b[this.t-c-1]|=(this.s&f)<<e),b.t=this.t-c,b.clamp()}function x(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);e>c;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d-=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d-=a[c],b[c++]=d&this.DM,d>>=this.DB;d-=a.s}b.s=0>d?-1:0,-1>d?b[c++]=this.DV+d:d>0&&(b[c++]=d),b.t=c,b.clamp()}function y(a,b){var c=this.abs(),e=a.abs(),f=c.t;for(b.t=f+e.t;--f>=0;)b[f]=0;for(f=0;f<e.t;++f)b[f+c.t]=c.am(0,e[f],b,f,0,c.t);b.s=0,b.clamp(),this.s!=a.s&&d.ZERO.subTo(b,b)}function z(a){for(var b=this.abs(),c=a.t=2*b.t;--c>=0;)a[c]=0;for(c=0;c<b.t-1;++c){var d=b.am(c,b[c],a,2*c,0,1);(a[c+b.t]+=b.am(c+1,2*b[c],a,2*c+1,d,b.t-c-1))>=b.DV&&(a[c+b.t]-=b.DV,a[c+b.t+1]=1)}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1)),a.s=0,a.clamp()}function A(a,b,c){var f=a.abs();if(!(f.t<=0)){var g=this.abs();if(g.t<f.t)return null!=b&&b.fromInt(0),void(null!=c&&this.copyTo(c));null==c&&(c=e());var h=e(),i=this.s,j=a.s,k=this.DB-r(f[f.t-1]);k>0?(f.lShiftTo(k,h),g.lShiftTo(k,c)):(f.copyTo(h),g.copyTo(c));var l=h.t,m=h[l-1];if(0!=m){var n=m*(1<<this.F1)+(l>1?h[l-2]>>this.F2:0),o=this.FV/n,p=(1<<this.F1)/n,q=1<<this.F2,s=c.t,t=s-l,u=null==b?e():b;for(h.dlShiftTo(t,u),c.compareTo(u)>=0&&(c[c.t++]=1,c.subTo(u,c)),d.ONE.dlShiftTo(l,u),u.subTo(h,h);h.t<l;)h[h.t++]=0;for(;--t>=0;){var v=c[--s]==m?this.DM:Math.floor(c[s]*o+(c[s-1]+q)*p);if((c[s]+=h.am(0,v,c,t,0,l))<v)for(h.dlShiftTo(t,u),c.subTo(u,c);c[s]<--v;)c.subTo(u,c)}null!=b&&(c.drShiftTo(l,b),i!=j&&d.ZERO.subTo(b,b)),c.t=l,c.clamp(),k>0&&c.rShiftTo(k,c),0>i&&d.ZERO.subTo(c,c)}}}function B(a){var b=e();return this.abs().divRemTo(a,null,b),this.s<0&&b.compareTo(d.ZERO)>0&&a.subTo(b,b),b}function C(a){this.m=a}function D(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function E(a){return a}function F(a){a.divRemTo(this.m,null,a)}function G(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function H(a,b){a.squareTo(b),this.reduce(b)}function I(){if(this.t<1)return 0;var a=this[0];if(0==(1&a))return 0;var b=3&a;return b=b*(2-(15&a)*b)&15,b=b*(2-(255&a)*b)&255,b=b*(2-((65535&a)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV,b>0?this.DV-b:-b}function J(a){this.m=a,this.mp=a.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<a.DB-15)-1,this.mt2=2*a.t}function K(a){var b=e();return a.abs().dlShiftTo(this.m.t,b),b.divRemTo(this.m,null,b),a.s<0&&b.compareTo(d.ZERO)>0&&this.m.subTo(b,b),b}function L(a){var b=e();return a.copyTo(b),this.reduce(b),b}function M(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b<this.m.t;++b){var c=32767&a[b],d=c*this.mpl+((c*this.mph+(a[b]>>15)*this.mpl&this.um)<<15)&a.DM;for(c=b+this.m.t,a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp(),a.drShiftTo(this.m.t,a),a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function N(a,b){a.squareTo(b),this.reduce(b)}function O(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function P(){return 0==(this.t>0?1&this[0]:this.s)}function Q(a,b){if(a>4294967295||1>a)return d.ONE;var c=e(),f=e(),g=b.convert(this),h=r(a)-1;for(g.copyTo(c);--h>=0;)if(b.sqrTo(c,f),(a&1<<h)>0)b.mulTo(f,g,c);else{var i=c;c=f,f=i}return b.revert(c)}function R(a,b){var c;return c=256>a||b.isEven()?new C(b):new J(b),this.exp(a,c)}function S(){var a=e();return this.copyTo(a),a}function T(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function U(){return 0==this.t?this.s:this[0]<<24>>24}function V(){return 0==this.t?this.s:this[0]<<16>>16}function W(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function X(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function Y(a){if(null==a&&(a=10),0==this.signum()||2>a||a>36)return"0";var b=this.chunkSize(a),c=Math.pow(a,b),d=k(c),f=e(),g=e(),h="";for(this.divRemTo(d,f,g);f.signum()>0;)h=(c+g.intValue()).toString(a).substr(1)+h,f.divRemTo(d,f,g);return g.intValue().toString(a)+h}function Z(a,b){this.fromInt(0),null==b&&(b=10);for(var c=this.chunkSize(b),e=Math.pow(b,c),f=!1,g=0,i=0,j=0;j<a.length;++j){var k=h(a,j);0>k?"-"==a.charAt(j)&&0==this.signum()&&(f=!0):(i=b*i+k,++g>=c&&(this.dMultiply(e),this.dAddOffset(i,0),g=0,i=0))}g>0&&(this.dMultiply(Math.pow(b,g)),this.dAddOffset(i,0)),f&&d.ZERO.subTo(this,this)}function $(a,b,c){if("number"==typeof b)if(2>a)this.fromInt(1);else for(this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(d.ONE.shiftLeft(a-1),ga,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(d.ONE.shiftLeft(a-1),this);else{var e=new Array,f=7&a;e.length=(a>>3)+1,b.nextBytes(e),f>0?e[0]&=(1<<f)-1:e[0]=0,this.fromString(e,256)}}function _(){var a=this.t,b=new Array;b[0]=this.s;var c,d=this.DB-a*this.DB%8,e=0;if(a-- >0)for(d<this.DB&&(c=this[a]>>d)!=(this.s&this.DM)>>d&&(b[e++]=c|this.s<<this.DB-d);a>=0;)8>d?(c=(this[a]&(1<<d)-1)<<8-d,c|=this[--a]>>(d+=this.DB-8)):(c=this[a]>>(d-=8)&255,0>=d&&(d+=this.DB,--a)),(e>0||c!=this.s)&&(b[e++]=c);return b}function aa(a){return 0==this.compareTo(a)}function ba(a){return this.compareTo(a)<0?this:a}function ca(a){return this.compareTo(a)>0?this:a}function da(a,b,c){var d,e,f=Math.min(a.t,this.t);for(d=0;f>d;++d)c[d]=b(this[d],a[d]);if(a.t<this.t){for(e=a.s&this.DM,d=f;d<this.t;++d)c[d]=b(this[d],e);c.t=this.t}else{for(e=this.s&this.DM,d=f;d<a.t;++d)c[d]=b(e,a[d]);c.t=a.t}c.s=b(this.s,a.s),c.clamp()}function ea(a,b){return a&b}function fa(a){var b=e();return this.bitwiseTo(a,ea,b),b}function ga(a,b){return a|b}function ha(a){var b=e();return this.bitwiseTo(a,ga,b),b}function ia(a,b){return a^b}function ja(a){var b=e();return this.bitwiseTo(a,ia,b),b}function ka(a,b){return a&~b}function la(a){var b=e();return this.bitwiseTo(a,ka,b),b}function ma(){for(var a=e(),b=0;b<this.t;++b)a[b]=this.DM&~this[b];return a.t=this.t,a.s=~this.s,a}function na(a){var b=e();return 0>a?this.rShiftTo(-a,b):this.lShiftTo(a,b),b}function oa(a){var b=e();return 0>a?this.lShiftTo(-a,b):this.rShiftTo(a,b),b}function pa(a){if(0==a)return-1;var b=0;return 0==(65535&a)&&(a>>=16,b+=16),0==(255&a)&&(a>>=8,b+=8),0==(15&a)&&(a>>=4,b+=4),0==(3&a)&&(a>>=2,b+=2),0==(1&a)&&++b,b}function qa(){for(var a=0;a<this.t;++a)if(0!=this[a])return a*this.DB+pa(this[a]);return this.s<0?this.t*this.DB:-1}function ra(a){for(var b=0;0!=a;)a&=a-1,++b;return b}function sa(){for(var a=0,b=this.s&this.DM,c=0;c<this.t;++c)a+=ra(this[c]^b);return a}function ta(a){var b=Math.floor(a/this.DB);return b>=this.t?0!=this.s:0!=(this[b]&1<<a%this.DB)}function ua(a,b){var c=d.ONE.shiftLeft(a);return this.bitwiseTo(c,b,c),c}function va(a){return this.changeBit(a,ga)}function wa(a){return this.changeBit(a,ka)}function xa(a){return this.changeBit(a,ia)}function ya(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);e>c;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d+=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d+=a[c],b[c++]=d&this.DM,d>>=this.DB;d+=a.s}b.s=0>d?-1:0,d>0?b[c++]=d:-1>d&&(b[c++]=this.DV+d),b.t=c,b.clamp()}function za(a){var b=e();return this.addTo(a,b),b}function Aa(a){var b=e();return this.subTo(a,b),b}function Ba(a){var b=e();return this.multiplyTo(a,b),b}function Ca(){var a=e();return this.squareTo(a),a}function Da(a){var b=e();return this.divRemTo(a,b,null),b}function Ea(a){var b=e();return this.divRemTo(a,null,b),b}function Fa(a){var b=e(),c=e();return this.divRemTo(a,b,c),new Array(b,c)}function Ga(a){this[this.t]=this.am(0,a-1,this,0,0,this.t),++this.t,this.clamp()}function Ha(a,b){if(0!=a){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function Ia(){}function Ja(a){return a}function Ka(a,b,c){a.multiplyTo(b,c)}function La(a,b){a.squareTo(b)}function Ma(a){return this.exp(a,new Ia)}function Na(a,b,c){var d=Math.min(this.t+a.t,b);for(c.s=0,c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;e>d;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);e>d;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function Oa(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d<a.t;++d)c[this.t+d-b]=this.am(b-d,a[d],c,0,0,this.t+d-b);c.clamp(),c.drShiftTo(1,c)}function Pa(a){this.r2=e(),this.q3=e(),d.ONE.dlShiftTo(2*a.t,this.r2),this.mu=this.r2.divide(a),this.m=a}function Qa(a){if(a.s<0||a.t>2*this.m.t)return a.mod(this.m);if(a.compareTo(this.m)<0)return a;var b=e();return a.copyTo(b),this.reduce(b),b}function Ra(a){return a}function Sa(a){for(a.drShiftTo(this.m.t-1,this.r2),a.t>this.m.t+1&&(a.t=this.m.t+1,a.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function Ta(a,b){a.squareTo(b),this.reduce(b)}function Ua(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function Va(a,b){var c,d,f=a.bitLength(),g=k(1);if(0>=f)return g;c=18>f?1:48>f?3:144>f?4:768>f?5:6,d=8>f?new C(b):b.isEven()?new Pa(b):new J(b);var h=new Array,i=3,j=c-1,l=(1<<c)-1;if(h[1]=d.convert(this),c>1){var m=e();for(d.sqrTo(h[1],m);l>=i;)h[i]=e(),d.mulTo(m,h[i-2],h[i]),i+=2}var n,o,p=a.t-1,q=!0,s=e();for(f=r(a[p])-1;p>=0;){for(f>=j?n=a[p]>>f-j&l:(n=(a[p]&(1<<f+1)-1)<<j-f,p>0&&(n|=a[p-1]>>this.DB+f-j)),i=c;0==(1&n);)n>>=1,--i;if((f-=i)<0&&(f+=this.DB,--p),q)h[n].copyTo(g),q=!1;else{for(;i>1;)d.sqrTo(g,s),d.sqrTo(s,g),i-=2;i>0?d.sqrTo(g,s):(o=g,g=s,s=o),d.mulTo(s,h[n],g)}for(;p>=0&&0==(a[p]&1<<f);)d.sqrTo(g,s),o=g,g=s,s=o,--f<0&&(f=this.DB-1,--p)}return d.revert(g)}function Wa(a){var b=this.s<0?this.negate():this.clone(),c=a.s<0?a.negate():a.clone();if(b.compareTo(c)<0){var d=b;b=c,c=d}var e=b.getLowestSetBit(),f=c.getLowestSetBit();if(0>f)return b;for(f>e&&(f=e),f>0&&(b.rShiftTo(f,b),c.rShiftTo(f,c));b.signum()>0;)(e=b.getLowestSetBit())>0&&b.rShiftTo(e,b),(e=c.getLowestSetBit())>0&&c.rShiftTo(e,c),b.compareTo(c)>=0?(b.subTo(c,b),b.rShiftTo(1,b)):(c.subTo(b,c),c.rShiftTo(1,c));return f>0&&c.lShiftTo(f,c),c}function Xa(a){if(0>=a)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(0==b)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}function Ya(a){var b=a.isEven();if(this.isEven()&&b||0==a.signum())return d.ZERO;for(var c=a.clone(),e=this.clone(),f=k(1),g=k(0),h=k(0),i=k(1);0!=c.signum();){for(;c.isEven();)c.rShiftTo(1,c),b?(f.isEven()&&g.isEven()||(f.addTo(this,f),g.subTo(a,g)),f.rShiftTo(1,f)):g.isEven()||g.subTo(a,g),g.rShiftTo(1,g);for(;e.isEven();)e.rShiftTo(1,e),b?(h.isEven()&&i.isEven()||(h.addTo(this,h),i.subTo(a,i)),h.rShiftTo(1,h)):i.isEven()||i.subTo(a,i),i.rShiftTo(1,i);c.compareTo(e)>=0?(c.subTo(e,c),b&&f.subTo(h,f),g.subTo(i,g)):(e.subTo(c,e),b&&h.subTo(f,h),i.subTo(g,i))}return 0!=e.compareTo(d.ONE)?d.ZERO:i.compareTo(a)>=0?i.subtract(a):i.signum()<0?(i.addTo(a,i),i.signum()<0?i.add(a):i):i}function Za(a){var b,c=this.abs();if(1==c.t&&c[0]<=hb[hb.length-1]){for(b=0;b<hb.length;++b)if(c[0]==hb[b])return!0;return!1}if(c.isEven())return!1;for(b=1;b<hb.length;){for(var d=hb[b],e=b+1;e<hb.length&&ib>d;)d*=hb[e++];for(d=c.modInt(d);e>b;)if(d%hb[b++]==0)return!1}return c.millerRabin(a)}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function $a(){var a=this.toByteArray(),b=8*(a.length-1)+r(a[0]),c="";return c+=String.fromCharCode((65280&b)>>8),c+=String.fromCharCode(255&b),c+=bb.bin2str(a)}function _a(a){var b=this.subtract(d.ONE),c=b.getLowestSetBit();if(0>=c)return!1;var f=b.shiftRight(c);a=a+1>>1,a>hb.length&&(a=hb.length);for(var g,h=e(),i=[],j=0;a>j;++j){for(;g=hb[Math.floor(Math.random()*hb.length)],-1!=i.indexOf(g););i.push(g),h.fromInt(g);var k=h.modPow(f,this);if(0!=k.compareTo(d.ONE)&&0!=k.compareTo(b)){for(var g=1;g++<c&&0!=k.compareTo(b);)if(k=k.modPowInt(2,this),0==k.compareTo(d.ONE))return!1;if(0!=k.compareTo(b))return!1}}return!0}var ab,bb=a("../../util.js");d.prototype.am=f,ab=26,d.prototype.DB=ab,d.prototype.DM=(1<<ab)-1,d.prototype.DV=1<<ab;var cb=52;d.prototype.FV=Math.pow(2,cb),d.prototype.F1=cb-ab,d.prototype.F2=2*ab-cb;var db,eb,fb="0123456789abcdefghijklmnopqrstuvwxyz",gb=new Array;for(db="0".charCodeAt(0),eb=0;9>=eb;++eb)gb[db++]=eb;for(db="a".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;for(db="A".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;C.prototype.convert=D,C.prototype.revert=E,C.prototype.reduce=F,C.prototype.mulTo=G,C.prototype.sqrTo=H,J.prototype.convert=K,J.prototype.revert=L,J.prototype.reduce=M,J.prototype.mulTo=O,J.prototype.sqrTo=N,d.prototype.copyTo=i,d.prototype.fromInt=j,d.prototype.fromString=l,d.prototype.clamp=m,d.prototype.dlShiftTo=t,d.prototype.drShiftTo=u,d.prototype.lShiftTo=v,d.prototype.rShiftTo=w,d.prototype.subTo=x,d.prototype.multiplyTo=y,d.prototype.squareTo=z,d.prototype.divRemTo=A,d.prototype.invDigit=I,d.prototype.isEven=P,d.prototype.exp=Q,d.prototype.toString=n,d.prototype.negate=o,d.prototype.abs=p,d.prototype.compareTo=q,d.prototype.bitLength=s,d.prototype.mod=B,d.prototype.modPowInt=R,d.ZERO=k(0),d.ONE=k(1),d.TWO=k(2),b.exports=d,Ia.prototype.convert=Ja,Ia.prototype.revert=Ja,Ia.prototype.mulTo=Ka,Ia.prototype.sqrTo=La,Pa.prototype.convert=Qa,Pa.prototype.revert=Ra,Pa.prototype.reduce=Sa,Pa.prototype.mulTo=Ua,Pa.prototype.sqrTo=Ta;var hb=[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],ib=(1<<26)/hb[hb.length-1],d=a("./jsbn.js");d.prototype.chunkSize=W,d.prototype.toRadix=Y,d.prototype.fromRadix=Z,d.prototype.fromNumber=$,d.prototype.bitwiseTo=da,d.prototype.changeBit=ua,d.prototype.addTo=ya,d.prototype.dMultiply=Ga,d.prototype.dAddOffset=Ha,d.prototype.multiplyLowerTo=Na,d.prototype.multiplyUpperTo=Oa,d.prototype.modInt=Xa,d.prototype.millerRabin=_a,d.prototype.clone=S,d.prototype.intValue=T,d.prototype.byteValue=U,d.prototype.shortValue=V,d.prototype.signum=X,d.prototype.toByteArray=_,d.prototype.equals=aa,d.prototype.min=ba,d.prototype.max=ca,d.prototype.and=fa,d.prototype.or=ha,d.prototype.xor=ja,d.prototype.andNot=la,d.prototype.not=ma,d.prototype.shiftLeft=na,d.prototype.shiftRight=oa,d.prototype.getLowestSetBit=qa,d.prototype.bitCount=sa,d.prototype.testBit=ta,d.prototype.setBit=va,d.prototype.clearBit=wa,d.prototype.flipBit=xa,d.prototype.add=za,d.prototype.subtract=Aa,d.prototype.multiply=Ba,d.prototype.divide=Da,d.prototype.remainder=Ea,d.prototype.divideAndRemainder=Fa,d.prototype.modPow=Va,d.prototype.modInverse=Ya,d.prototype.pow=Ma,d.prototype.gcd=Wa,d.prototype.isProbablePrime=Za,d.prototype.toMPI=$a,d.prototype.square=Ca},{"../../util.js":76,"./jsbn.js":37}],38:[function(a,b,c){function d(){function a(a){for(var b=0;b<a.length;b++)a[b]=j.getSecureRandomOctet();
+}this.nextBytes=a}function e(a,b,c){return m=m.bitLength()===b.bitLength()?m.square().mod(b):j.getRandomBigIntegerInRange(h.TWO,b),l=m.modInverse(b).modPow(c,b),a.multiply(l).mod(b)}function f(a,b){return a.multiply(m).mod(b)}function g(){function a(a,b,c,d,g,j,l){k.rsa_blinding&&(a=e(a,b,c));var m=a.mod(g).modPow(d.mod(g.subtract(h.ONE)),g),n=a.mod(j).modPow(d.mod(j.subtract(h.ONE)),j);i.print_debug("rsa.js decrypt\nxpn:"+i.hexstrdump(m.toMPI())+"\nxqn:"+i.hexstrdump(n.toMPI()));var o=n.subtract(m);return 0===o[0]?(o=m.subtract(n),o=o.multiply(l).mod(j),o=j.subtract(o)):o=o.multiply(l).mod(j),o=o.multiply(g).add(m),k.rsa_blinding&&(o=f(o,b)),o}function b(a,b,c){return a.modPowInt(b,c)}function c(a,b,c){return a.modPow(b,c)}function g(a,b,c){return a.modPowInt(b,c)}function j(){this.n=null,this.e=0,this.ee=null,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.u=null}function l(a,b){function c(a){var b=g.exportKey("jwk",a.privateKey);return"function"!=typeof b.then&&(b=f(b,"Error exporting RSA key pair.")),b}function e(a){function c(a){var b=a.replace(/\-/g,"+").replace(/_/g,"/"),c=i.hexstrdump(atob(b));return new h(c,16)}var d=new j;return d.n=c(a.n),d.ee=new h(b,16),d.d=c(a.d),d.p=c(a.p),d.q=c(a.q),d.u=d.p.modInverse(d.q),d}function f(a,b){return new Promise(function(c,d){a.onerror=function(a){d(new Error(b))},a.oncomplete=function(a){c(a.target.result)}})}var g=i.getWebCrypto();if(g){var k,l,m=new Uint32Array([parseInt(b,16)]),n=new Uint8Array(m.buffer);return window.crypto&&window.crypto.webkitSubtle?(k={name:"RSA-OAEP",modulusLength:a,publicExponent:n.subarray(0,3)},l=g.generateKey(k,!0,["encrypt","decrypt"])):(k={name:"RSASSA-PKCS1-v1_5",modulusLength:a,publicExponent:n.subarray(0,3),hash:{name:"SHA-1"}},l=g.generateKey(k,!0,["sign","verify"]),"function"!=typeof l.then&&(l=f(l,"Error generating RSA key pair."))),l.then(c).then(function(a){return e(a instanceof ArrayBuffer?JSON.parse(String.fromCharCode.apply(null,new Uint8Array(a))):a)})}return new Promise(function(c){var e=new j,f=new d,g=a>>1;for(e.e=parseInt(b,16),e.ee=new h(b,16);;){for(;e.p=new h(a-g,1,f),0!==e.p.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.p.isProbablePrime(10););for(;e.q=new h(g,1,f),0!==e.q.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.q.isProbablePrime(10););if(e.p.compareTo(e.q)<=0){var i=e.p;e.p=e.q,e.q=i}var k=e.p.subtract(h.ONE),l=e.q.subtract(h.ONE),m=k.multiply(l);if(0===m.gcd(e.ee).compareTo(h.ONE)){e.n=e.p.multiply(e.q),e.d=e.ee.modInverse(m),e.dmp1=e.d.mod(k),e.dmq1=e.d.mod(l),e.u=e.p.modInverse(e.q);break}}c(e)})}this.encrypt=b,this.decrypt=a,this.verify=g,this.sign=c,this.generate=l,this.keyObject=j}var h=a("./jsbn.js"),i=a("../../util.js"),j=a("../random.js"),k=a("../../config"),l=h.ZERO,m=h.ZERO;b.exports=g},{"../../config":17,"../../util.js":76,"../random.js":39,"./jsbn.js":37}],39:[function(a,b,c){function d(){this.buffer=null,this.size=null}var e=a("../type/mpi.js"),f=null;"undefined"==typeof window&&(f=a("crypto")),b.exports={getRandomBytes:function(a){for(var b="",c=0;a>c;c++)b+=String.fromCharCode(this.getSecureRandomOctet());return b},getSecureRandom:function(a,b){for(var c=this.getSecureRandomUint(),d=(b-a).toString(2).length;(c&Math.pow(2,d)-1)>b-a;)c=this.getSecureRandomUint();return a+Math.abs(c&Math.pow(2,d)-1)},getSecureRandomOctet:function(){var a=new Uint8Array(1);return this.getRandomValues(a),a[0]},getSecureRandomUint:function(){var a=new Uint8Array(4),b=new DataView(a.buffer);return this.getRandomValues(a),b.getUint32(0)},getRandomValues:function(a){if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if("undefined"!=typeof window&&window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(a);else if("undefined"!=typeof window&&"object"==typeof window.msCrypto&&"function"==typeof window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(a);else if(f){var b=f.randomBytes(a.length);a.set(b)}else{if(!this.randomBuffer.buffer)throw new Error("No secure random number generator available.");this.randomBuffer.get(a)}},getRandomBigInteger:function(a){if(1>a)throw new Error("Illegal parameter value: bits < 1");var b=Math.floor((a+7)/8),c=this.getRandomBytes(b);a%8>0&&(c=String.fromCharCode(Math.pow(2,a%8)-1&c.charCodeAt(0))+c.substring(1));var d=new e;return d.fromBytes(c),d.toBigInteger()},getRandomBigIntegerInRange:function(a,b){if(b.compareTo(a)<=0)throw new Error("Illegal parameter value: max <= min");for(var c=b.subtract(a),d=this.getRandomBigInteger(c.bitLength());d.compareTo(c)>0;)d=this.getRandomBigInteger(c.bitLength());return a.add(d)},randomBuffer:new d},d.prototype.init=function(a){this.buffer=new Uint8Array(a),this.size=0},d.prototype.set=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");var b=this.buffer.length-this.size;a.length>b&&(a=a.subarray(0,b)),this.buffer.set(a,this.size),this.size+=a.length},d.prototype.get=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if(this.size<a.length)throw new Error("Random number buffer depleted");for(var b=0;b<a.length;b++)a[b]=this.buffer[--this.size],this.buffer[this.size]=0}},{"../type/mpi.js":74,crypto:"crypto"}],40:[function(a,b,c){var d=a("./public_key"),e=a("./pkcs1.js");a("./hash");b.exports={verify:function(a,b,c,f,g){switch(a){case 1:case 2:case 3:var h=new d.rsa,i=f[0].toBigInteger(),j=f[0].byteLength(),k=f[1].toBigInteger(),l=c[0].toBigInteger(),m=h.verify(l,k,i),n=e.emsa.encode(b,g,j);return 0===m.compareTo(n);case 16:throw new Error("signing with Elgamal is not defined in the OpenPGP standard.");case 17:var o=new d.dsa,p=c[0].toBigInteger(),q=c[1].toBigInteger(),r=f[0].toBigInteger(),s=f[1].toBigInteger(),t=f[2].toBigInteger(),u=f[3].toBigInteger(),l=g,v=o.verify(b,p,q,l,r,s,t,u);return 0===v.compareTo(p);default:throw new Error("Invalid signature algorithm.")}},sign:function(a,b,c,f){var g;switch(b){case 1:case 2:case 3:var h=new d.rsa,i=c[2].toBigInteger(),j=c[0].toBigInteger();return g=e.emsa.encode(a,f,c[0].byteLength()),h.sign(g,i,j).toMPI();case 17:var k=new d.dsa,l=c[0].toBigInteger(),m=c[1].toBigInteger(),n=c[2].toBigInteger(),o=(c[3].toBigInteger(),c[4].toBigInteger());g=f;var p=k.sign(a,g,n,l,m,o);return p[0].toString()+p[1].toString();case 16:throw new Error("Signing with Elgamal is not defined in the OpenPGP standard.");default:throw new Error("Invalid signature algorithm.")}}}},{"./hash":28,"./pkcs1.js":33,"./public_key":36}],41:[function(a,b,c){function d(a){var b=/^-----BEGIN PGP (MESSAGE, PART \d+\/\d+|MESSAGE, PART \d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$\n/m,c=a.match(b);if(!c)throw new Error("Unknown ASCII armor type");return/MESSAGE, PART \d+\/\d+/.test(c[1])?o.armor.multipart_section:/MESSAGE, PART \d+/.test(c[1])?o.armor.multipart_last:/SIGNED MESSAGE/.test(c[1])?o.armor.signed:/MESSAGE/.test(c[1])?o.armor.message:/PUBLIC KEY BLOCK/.test(c[1])?o.armor.public_key:/PRIVATE KEY BLOCK/.test(c[1])?o.armor.private_key:void 0}function e(){var a="";return p.show_version&&(a+="Version: "+p.versionstring+"\r\n"),p.show_comment&&(a+="Comment: "+p.commentstring+"\r\n"),a+="\r\n"}function f(a){var b=h(a),c=""+String.fromCharCode(b>>16)+String.fromCharCode(b>>8&255)+String.fromCharCode(255&b);return n.encode(c)}function g(a,b){var c=f(a),d=b;return c[0]==d[0]&&c[1]==d[1]&&c[2]==d[2]&&c[3]==d[3]}function h(a){for(var b=11994318,c=0;a.length-c>16;)b=b<<8^q[255&(b>>16^a.charCodeAt(c))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+1))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+2))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+3))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+4))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+5))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+6))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+7))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+8))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+9))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+10))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+11))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+12))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+13))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+14))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+15))],c+=16;for(var d=c;d<a.length;d++)b=b<<8^q[255&(b>>16^a.charCodeAt(c++))];return 16777215&b}function i(a){var b=/^[ \f\r\t\u00a0\u2000-\u200a\u202f\u205f\u3000]*\n/m,c="",d=a,e=b.exec(a);if(null===e)throw new Error("Mandatory blank line missing between armor headers and armor data");return c=a.slice(0,e.index),d=a.slice(e.index+e[0].length),c=c.split("\n"),c.pop(),{headers:c,body:d}}function j(a){for(var b=0;b<a.length;b++)if(!/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(a[b]))throw new Error("Improperly formatted armor header: "+a[b])}function k(a){var b=/^=/m,c=a,d="",e=b.exec(a);return null!==e&&(c=a.slice(0,e.index),d=a.slice(e.index+1)),{body:c,checksum:d}}function l(a){var b=/^-----[^-]+-----$\n/m;a=a.replace(/[\t\r ]+\n/g,"\n");var c,e,h,l=d(a),m=a.split(b),o=1;if(a.search(b)!=m[0].length&&(o=0),2!=l){h=i(m[o]);var p=k(h.body);c={data:n.decode(p.body),headers:h.headers,type:l},e=p.checksum}else{h=i(m[o].replace(/^- /gm,""));var q=i(m[o+1].replace(/^- /gm,""));j(q.headers);var r=k(q.body);c={text:h.body.replace(/\n$/,"").replace(/\n/g,"\r\n"),data:n.decode(r.body),headers:h.headers,type:l},e=r.checksum}if(e=e.substr(0,4),!g(c.data,e))throw new Error("Ascii armor integrity check on message failed: '"+e+"' should be '"+f(c.data)+"'");return j(c.headers),c}function m(a,b,c,d){var g=[];switch(a){case o.armor.multipart_section:g.push("-----BEGIN PGP MESSAGE, PART "+c+"/"+d+"-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE, PART "+c+"/"+d+"-----\r\n");break;case o.armor.multipart_last:g.push("-----BEGIN PGP MESSAGE, PART "+c+"-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE, PART "+c+"-----\r\n");break;case o.armor.signed:g.push("\r\n-----BEGIN PGP SIGNED MESSAGE-----\r\n"),g.push("Hash: "+b.hash+"\r\n\r\n"),g.push(b.text.replace(/\n-/g,"\n- -")),g.push("\r\n-----BEGIN PGP SIGNATURE-----\r\n"),g.push(e()),g.push(n.encode(b.data)),g.push("\r\n="+f(b.data)+"\r\n"),g.push("-----END PGP SIGNATURE-----\r\n");break;case o.armor.message:g.push("-----BEGIN PGP MESSAGE-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE-----\r\n");break;case o.armor.public_key:g.push("-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP PUBLIC KEY BLOCK-----\r\n\r\n");break;case o.armor.private_key:g.push("-----BEGIN PGP PRIVATE KEY BLOCK-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP PRIVATE KEY BLOCK-----\r\n")}return g.join("")}var n=a("./base64.js"),o=a("../enums.js"),p=a("../config"),q=[0,8801531,25875725,17603062,60024545,51751450,35206124,44007191,128024889,120049090,103502900,112007375,70412248,78916387,95990485,88014382,264588937,256049778,240098180,248108927,207005800,215016595,232553829,224014750,140824496,149062475,166599357,157832774,200747345,191980970,176028764,184266919,520933865,529177874,512099556,503334943,480196360,471432179,487973381,496217854,414011600,405478443,422020573,430033190,457094705,465107658,448029500,439496647,281648992,273666971,289622637,298124950,324696449,333198714,315665548,307683447,392699481,401494690,383961940,375687087,352057528,343782467,359738805,368533838,1041867730,1050668841,1066628831,1058355748,1032471859,1024199112,1006669886,1015471301,968368875,960392720,942864358,951368477,975946762,984451313,1000411399,992435708,836562267,828023200,810956886,818967725,844041146,852051777,868605623,860066380,914189410,922427545,938981743,930215316,904825475,896059e3,878993294,887231349,555053627,563297984,547333942,538569677,579245274,570480673,588005847,596249900,649392898,640860153,658384399,666397428,623318499,631331096,615366894,606833685,785398962,777416777,794487231,802989380,759421523,767923880,751374174,743392165,695319947,704115056,687564934,679289981,719477610,711202705,728272487,737067676,2083735460,2092239711,2109313705,2101337682,2141233477,2133257662,2116711496,2125215923,2073216669,2064943718,2048398224,2057199467,2013339772,2022141063,2039215473,2030942602,1945504045,1936737750,1920785440,1929023707,1885728716,1893966647,1911503553,1902736954,1951893524,1959904495,1977441561,1968902626,2009362165,2000822798,1984871416,1992881923,1665111629,1673124534,1656046400,1647513531,1621913772,1613380695,1629922721,1637935450,1688082292,1679317903,1695859321,1704103554,1728967061,1737211246,1720132760,1711368291,1828378820,1820103743,1836060105,1844855090,1869168165,1877963486,1860430632,1852155859,1801148925,1809650950,1792118e3,1784135691,1757986588,1750004711,1765960209,1774462698,1110107254,1118611597,1134571899,1126595968,1102643863,1094667884,1077139354,1085643617,1166763343,1158490548,1140961346,1149762745,1176011694,1184812885,1200772771,1192499800,1307552511,1298785796,1281720306,1289958153,1316768798,1325007077,1341561107,1332794856,1246636998,1254647613,1271201483,1262662192,1239272743,1230733788,1213667370,1221678289,1562785183,1570797924,1554833554,1546300521,1588974462,1580441477,1597965939,1605978760,1518843046,1510078557,1527603627,1535847760,1494504007,1502748348,1486784330,1478020017,1390639894,1382365165,1399434779,1408230112,1366334967,1375129868,1358579962,1350304769,1430452783,1438955220,1422405410,1414423513,1456544974,1448562741,1465633219,1474135352];b.exports={encode:m,decode:l}},{"../config":17,"../enums.js":43,"./base64.js":42}],42:[function(a,b,c){function d(a,b){var c,d,e,g=b?b:[],h=0,i=0,j=a.length;for(e=0;j>e;e++)d=a.charCodeAt(e),0===i?(g.push(f.charAt(d>>2&63)),c=(3&d)<<4):1==i?(g.push(f.charAt(c|d>>4&15)),c=(15&d)<<2):2==i&&(g.push(f.charAt(c|d>>6&3)),h+=1,h%60===0&&g.push("\n"),g.push(f.charAt(63&d))),h+=1,h%60===0&&g.push("\n"),i+=1,3==i&&(i=0);return i>0&&(g.push(f.charAt(c)),h+=1,h%60===0&&g.push("\n"),g.push("="),h+=1),1==i&&(h%60===0&&g.push("\n"),g.push("=")),b?void 0:g.join("")}function e(a){var b,c,d=[],e=0,g=0,h=a.length;for(c=0;h>c;c++)b=f.indexOf(a.charAt(c)),b>=0&&(e&&d.push(String.fromCharCode(g|b>>6-e&255)),e=e+2&7,g=b<<e&255);return d.join("")}var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";b.exports={encode:d,decode:e}},{}],43:[function(a,b,c){"use strict";b.exports={s2k:{simple:0,salted:1,iterated:3,gnu:101},publicKey:{rsa_encrypt_sign:1,rsa_encrypt:2,rsa_sign:3,elgamal:16,dsa:17},symmetric:{plaintext:0,idea:1,tripledes:2,cast5:3,blowfish:4,aes128:7,aes192:8,aes256:9,twofish:10},compression:{uncompressed:0,zip:1,zlib:2,bzip2:3},hash:{md5:1,sha1:2,ripemd:3,sha256:8,sha384:9,sha512:10,sha224:11},packet:{publicKeyEncryptedSessionKey:1,signature:2,symEncryptedSessionKey:3,onePassSignature:4,secretKey:5,publicKey:6,secretSubkey:7,compressed:8,symmetricallyEncrypted:9,marker:10,literal:11,trust:12,userid:13,publicSubkey:14,userAttribute:17,symEncryptedIntegrityProtected:18,modificationDetectionCode:19},literal:{binary:"b".charCodeAt(),text:"t".charCodeAt(),utf8:"u".charCodeAt()},signature:{binary:0,text:1,standalone:2,cert_generic:16,cert_persona:17,cert_casual:18,cert_positive:19,cert_revocation:48,subkey_binding:24,key_binding:25,key:31,key_revocation:32,subkey_revocation:40,timestamp:64,third_party:80},signatureSubpacket:{signature_creation_time:2,signature_expiration_time:3,exportable_certification:4,trust_signature:5,regular_expression:6,revocable:7,key_expiration_time:9,placeholder_backwards_compatibility:10,preferred_symmetric_algorithms:11,revocation_key:12,issuer:16,notation_data:20,preferred_hash_algorithms:21,preferred_compression_algorithms:22,key_server_preferences:23,preferred_key_server:24,primary_user_id:25,policy_uri:26,key_flags:27,signers_user_id:28,reason_for_revocation:29,features:30,signature_target:31,embedded_signature:32},keyFlags:{certify_keys:1,sign_data:2,encrypt_communication:4,encrypt_storage:8,split_private_key:16,authentication:32,shared_private_key:128},keyStatus:{invalid:0,expired:1,revoked:2,valid:3,no_self_cert:4},armor:{multipart_section:0,multipart_last:1,signed:2,message:3,public_key:4,private_key:5},write:function(a,b){if("number"==typeof b&&(b=this.read(a,b)),void 0!==a[b])return a[b];throw new Error("Invalid enum value.")},read:function(a,b){for(var c in a)if(a[c]==b)return c;throw new Error("Invalid enum value.")}}},{}],44:[function(a,b,c){"use strict";function d(b){this._baseUrl=b?b:e.keyserver,this._fetch="undefined"!=typeof window?window.fetch:a("node-fetch")}b.exports=d;var e=a("../config");d.prototype.lookup=function(a){var b=this._baseUrl+"/pks/lookup?op=get&options=mr&search=",c=this._fetch;if(a.keyId)b+="0x"+encodeURIComponent(a.keyId);else{if(!a.query)throw new Error("You must provide a query parameter!");b+=encodeURIComponent(a.query)}return c(b).then(function(a){return 200===a.status?a.text():void 0}).then(function(a){return!a||a.indexOf("-----END PGP PUBLIC KEY BLOCK-----")<0?void 0:a.trim()})},d.prototype.upload=function(a){var b=this._baseUrl+"/pks/add",c=this._fetch;return c(b,{method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:"keytext="+encodeURIComponent(a)})}},{"../config":17,"node-fetch":"node-fetch"}],45:[function(a,b,c){b.exports=a("./hkp.js")},{"./hkp.js":44}],46:[function(a,b,c){"use strict";b.exports=a("./openpgp.js"),b.exports.key=a("./key.js"),b.exports.message=a("./message.js"),b.exports.cleartext=a("./cleartext.js"),b.exports.util=a("./util.js"),b.exports.packet=a("./packet"),b.exports.MPI=a("./type/mpi.js"),b.exports.S2K=a("./type/s2k.js"),b.exports.Keyid=a("./type/keyid.js"),b.exports.armor=a("./encoding/armor.js"),b.exports.enums=a("./enums.js"),b.exports.config=a("./config/config.js"),b.exports.crypto=a("./crypto"),b.exports.Keyring=a("./keyring"),b.exports.AsyncProxy=a("./worker/async_proxy.js"),b.exports.HKP=a("./hkp")},{"./cleartext.js":12,"./config/config.js":16,"./crypto":32,"./encoding/armor.js":41,"./enums.js":43,"./hkp":45,"./key.js":47,"./keyring":48,"./message.js":51,"./openpgp.js":52,"./packet":55,"./type/keyid.js":73,"./type/mpi.js":74,"./type/s2k.js":75,"./util.js":76,"./worker/async_proxy.js":77}],47:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);if(this.primaryKey=null,this.revocationSignature=null,this.directSignatures=null,this.users=null,this.subKeys=null,this.packetlist2structure(a),!this.primaryKey||!this.users)throw new Error("Invalid key: need at least key and user ID packet")}function e(a,b){return a.algorithm!==o.read(o.publicKey,o.publicKey.dsa)&&a.algorithm!==o.read(o.publicKey,o.publicKey.rsa_sign)&&(!b.keyFlags||0!==(b.keyFlags[0]&o.keyFlags.encrypt_communication)||0!==(b.keyFlags[0]&o.keyFlags.encrypt_storage))}function f(a,b){return!(a.algorithm!=o.read(o.publicKey,o.publicKey.dsa)&&a.algorithm!=o.read(o.publicKey,o.publicKey.rsa_sign)&&a.algorithm!=o.read(o.publicKey,o.publicKey.rsa_encrypt_sign)||b.keyFlags&&0===(b.keyFlags[0]&o.keyFlags.sign_data))}function g(a,b){return 3==a.version&&0!==a.expirationTimeV3?new Date(a.created.getTime()+24*a.expirationTimeV3*3600*1e3):4==a.version&&b.keyNeverExpires===!1?new Date(a.created.getTime()+1e3*b.keyExpirationTime):null}function h(a,b,c,d){a=a[c],a&&(b[c]?a.forEach(function(a){a.isExpired()||d&&!d(a)||b[c].some(function(b){return b.signature===a.signature})||b[c].push(a)}):b[c]=a)}function i(a){return this instanceof i?(this.userId=a.tag==o.packet.userid?a:null,this.userAttribute=a.tag==o.packet.userAttribute?a:null,this.selfCertifications=null,this.otherCertifications=null,void(this.revocationCertifications=null)):new i(a)}function j(a){return this instanceof j?(this.subKey=a,this.bindingSignature=null,void(this.revocationSignature=null)):new j(a)}function k(a){var b={};b.keys=[];try{var c=p.decode(a);if(c.type!=o.armor.public_key&&c.type!=o.armor.private_key)throw new Error("Armored text not of type key");var e=new n.List;e.read(c.data);var f=e.indexOfTag(o.packet.publicKey,o.packet.secretKey);if(0===f.length)throw new Error("No key packet found in armored text");for(var g=0;g<f.length;g++){var h=e.slice(f[g],f[g+1]);try{var i=new d(h);b.keys.push(i)}catch(j){b.err=b.err||[],b.err.push(j)}}}catch(j){b.err=b.err||[],b.err.push(j)}return b}function l(a){function b(){return g=new n.SecretKey,g.algorithm=o.read(o.publicKey,a.keyType),g.generate(a.numBits)}function c(){return k=new n.SecretSubkey,k.algorithm=o.read(o.publicKey,a.keyType),k.generate(a.numBits)}function e(){return a.passphrase&&(g.encrypt(a.passphrase),k.encrypt(a.passphrase)),f=new n.List,f.push(g),a.userId.forEach(function(b,c){h=new n.Userid,h.read(b),i={},i.userid=h,i.key=g,j=new n.Signature,j.signatureType=o.signature.cert_generic,j.publicKeyAlgorithm=a.keyType,j.hashAlgorithm=q.prefer_hash_algorithm,j.keyFlags=[o.keyFlags.certify_keys|o.keyFlags.sign_data],j.preferredSymmetricAlgorithms=[],j.preferredSymmetricAlgorithms.push(o.symmetric.aes256),j.preferredSymmetricAlgorithms.push(o.symmetric.aes192),j.preferredSymmetricAlgorithms.push(o.symmetric.aes128),j.preferredSymmetricAlgorithms.push(o.symmetric.cast5),j.preferredSymmetricAlgorithms.push(o.symmetric.tripledes),j.preferredHashAlgorithms=[],j.preferredHashAlgorithms.push(o.hash.sha256),j.preferredHashAlgorithms.push(o.hash.sha1),j.preferredHashAlgorithms.push(o.hash.sha512),j.preferredCompressionAlgorithms=[],j.preferredCompressionAlgorithms.push(o.compression.zlib),j.preferredCompressionAlgorithms.push(o.compression.zip),0===c&&(j.isPrimaryUserID=!0),q.integrity_protect&&(j.features=[],j.features.push(1)),j.sign(g,i),f.push(h),f.push(j)}),i={},i.key=g,i.bind=k,l=new n.Signature,l.signatureType=o.signature.subkey_binding,l.publicKeyAlgorithm=a.keyType,l.hashAlgorithm=q.prefer_hash_algorithm,l.keyFlags=[o.keyFlags.encrypt_communication|o.keyFlags.encrypt_storage],l.sign(g,i),f.push(k),f.push(l),a.unlocked||(g.clearPrivateMPIs(),k.clearPrivateMPIs()),new d(f)}var f,g,h,i,j,k,l;if(a.keyType=a.keyType||o.publicKey.rsa_encrypt_sign,a.keyType!==o.publicKey.rsa_encrypt_sign)throw new Error("Only RSA Encrypt or Sign supported");a.passphrase||(a.unlocked=!0),(String.prototype.isPrototypeOf(a.userId)||"string"==typeof a.userId)&&(a.userId=[a.userId]);var m=b(),p=c();return Promise.all([m,p]).then(e)}function m(a){for(var b={},c=0;c<a.length;c++){var d=a[c].getPrimaryUser();if(!d||!d.selfCertificate.preferredSymmetricAlgorithms)return q.encryption_cipher;d.selfCertificate.preferredSymmetricAlgorithms.forEach(function(a,c){var d=b[a]||(b[a]={prio:0,count:0,algo:a});d.prio+=64>>c,d.count++})}var e={prio:0,algo:q.encryption_cipher};for(var f in b)try{f!==o.symmetric.plaintext&&f!==o.symmetric.idea&&o.read(o.symmetric,f)&&b[f].count===a.length&&b[f].prio>e.prio&&(e=b[f])}catch(g){}return e.algo}var n=a("./packet"),o=a("./enums.js"),p=a("./encoding/armor.js"),q=a("./config"),r=a("./util");d.prototype.packetlist2structure=function(a){for(var b,c,d,e=0;e<a.length;e++)switch(a[e].tag){case o.packet.publicKey:case o.packet.secretKey:this.primaryKey=a[e],c=this.primaryKey.getKeyId();break;case o.packet.userid:case o.packet.userAttribute:b=new i(a[e]),this.users||(this.users=[]),this.users.push(b);break;case o.packet.publicSubkey:case o.packet.secretSubkey:b=null,this.subKeys||(this.subKeys=[]),d=new j(a[e]),this.subKeys.push(d);break;case o.packet.signature:switch(a[e].signatureType){case o.signature.cert_generic:case o.signature.cert_persona:case o.signature.cert_casual:case o.signature.cert_positive:if(!b){r.print_debug("Dropping certification signatures without preceding user packet");continue}a[e].issuerKeyId.equals(c)?(b.selfCertifications||(b.selfCertifications=[]),b.selfCertifications.push(a[e])):(b.otherCertifications||(b.otherCertifications=[]),b.otherCertifications.push(a[e]));break;case o.signature.cert_revocation:b?(b.revocationCertifications||(b.revocationCertifications=[]),b.revocationCertifications.push(a[e])):(this.directSignatures||(this.directSignatures=[]),this.directSignatures.push(a[e]));break;case o.signature.key:this.directSignatures||(this.directSignatures=[]),this.directSignatures.push(a[e]);break;case o.signature.subkey_binding:if(!d){r.print_debug("Dropping subkey binding signature without preceding subkey packet");continue}d.bindingSignature=a[e];break;case o.signature.key_revocation:this.revocationSignature=a[e];break;case o.signature.subkey_revocation:if(!d){r.print_debug("Dropping subkey revocation signature without preceding subkey packet");continue}d.revocationSignature=a[e]}}},d.prototype.toPacketlist=function(){var a=new n.List;a.push(this.primaryKey),a.push(this.revocationSignature),a.concat(this.directSignatures);var b;for(b=0;b<this.users.length;b++)a.concat(this.users[b].toPacketlist());if(this.subKeys)for(b=0;b<this.subKeys.length;b++)a.concat(this.subKeys[b].toPacketlist());return a},d.prototype.getSubkeyPackets=function(){var a=[];if(this.subKeys)for(var b=0;b<this.subKeys.length;b++)a.push(this.subKeys[b].subKey);return a},d.prototype.getAllKeyPackets=function(){return[this.primaryKey].concat(this.getSubkeyPackets())},d.prototype.getKeyIds=function(){for(var a=[],b=this.getAllKeyPackets(),c=0;c<b.length;c++)a.push(b[c].getKeyId());return a},d.prototype.getKeyPacket=function(a){for(var b=this.getAllKeyPackets(),c=0;c<b.length;c++)for(var d=b[c].getKeyId(),e=0;e<a.length;e++)if(d.equals(a[e]))return b[c];return null},d.prototype.getUserIds=function(){for(var a=[],b=0;b<this.users.length;b++)this.users[b].userId&&a.push(this.users[b].userId.write());return a},d.prototype.isPublic=function(){return this.primaryKey.tag==o.packet.publicKey},d.prototype.isPrivate=function(){return this.primaryKey.tag==o.packet.secretKey},d.prototype.toPublic=function(){for(var a,b=new n.List,c=this.toPacketlist(),e=0;e<c.length;e++)switch(c[e].tag){case o.packet.secretKey:a=c[e].writePublicKey();var f=new n.PublicKey;f.read(a),b.push(f);break;case o.packet.secretSubkey:a=c[e].writePublicKey();var g=new n.PublicSubkey;g.read(a),b.push(g);break;default:b.push(c[e])}return new d(b)},d.prototype.armor=function(){var a=this.isPublic()?o.armor.public_key:o.armor.private_key;return p.encode(a,this.toPacketlist().write())},d.prototype.getSigningKeyPacket=function(a){var b=this.getPrimaryUser();if(b&&f(this.primaryKey,b.selfCertificate)&&(!a||this.primaryKey.getKeyId().equals(a)))return this.primaryKey;if(this.subKeys)for(var c=0;c<this.subKeys.length;c++)if(this.subKeys[c].isValidSigningKey(this.primaryKey)&&(!a||this.subKeys[c].subKey.getKeyId().equals(a)))return this.subKeys[c].subKey;return null},d.prototype.getPreferredHashAlgorithm=function(){var a=this.getPrimaryUser();return a&&a.selfCertificate.preferredHashAlgorithms?a.selfCertificate.preferredHashAlgorithms[0]:q.prefer_hash_algorithm},d.prototype.getEncryptionKeyPacket=function(){if(this.subKeys)for(var a=0;a<this.subKeys.length;a++)if(this.subKeys[a].isValidEncryptionKey(this.primaryKey))return this.subKeys[a].subKey;var b=this.getPrimaryUser();return b&&e(this.primaryKey,b.selfCertificate)?this.primaryKey:null},d.prototype.decrypt=function(a){if(!this.isPrivate())throw new Error("Nothing to decrypt in a public key");for(var b=this.getAllKeyPackets(),c=0;c<b.length;c++){var d=b[c].decrypt(a);if(!d)return!1}return!0},d.prototype.decryptKeyPacket=function(a,b){if(!this.isPrivate())throw new Error("Nothing to decrypt in a public key");for(var c=this.getAllKeyPackets(),d=0;d<c.length;d++)for(var e=c[d].getKeyId(),f=0;f<a.length;f++)if(e.equals(a[f])){var g=c[d].decrypt(b);if(!g)return!1}return!0},d.prototype.verifyPrimaryKey=function(){if(this.revocationSignature&&!this.revocationSignature.isExpired()&&(this.revocationSignature.verified||this.revocationSignature.verify(this.primaryKey,{key:this.primaryKey})))return o.keyStatus.revoked;if(3==this.primaryKey.version&&0!==this.primaryKey.expirationTimeV3&&Date.now()>this.primaryKey.created.getTime()+24*this.primaryKey.expirationTimeV3*3600*1e3)return o.keyStatus.expired;for(var a=!1,b=0;b<this.users.length;b++)this.users[b].userId&&this.users[b].selfCertifications&&(a=!0);if(!a)return o.keyStatus.no_self_cert;var c=this.getPrimaryUser();return c?4==this.primaryKey.version&&c.selfCertificate.keyNeverExpires===!1&&Date.now()>this.primaryKey.created.getTime()+1e3*c.selfCertificate.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid},d.prototype.getExpirationTime=function(){if(3==this.primaryKey.version)return g(this.primaryKey);if(4==this.primaryKey.version){var a=this.getPrimaryUser();return a?g(this.primaryKey,a.selfCertificate):null}},d.prototype.getPrimaryUser=function(){for(var a=[],b=0;b<this.users.length;b++)if(this.users[b].userId&&this.users[b].selfCertifications)for(var c=0;c<this.users[b].selfCertifications.length;c++)a.push({user:this.users[b],selfCertificate:this.users[b].selfCertifications[c]});a=a.sort(function(a,b){return a.selfCertificate.isPrimaryUserID>b.selfCertificate.isPrimaryUserID?-1:a.selfCertificate.isPrimaryUserID<b.selfCertificate.isPrimaryUserID?1:a.selfCertificate.created>b.selfCertificate.created?-1:a.selfCertificate.created<b.selfCertificate.created?1:0});for(var b=0;b<a.length;b++)if(a[b].user.isValidSelfCertificate(this.primaryKey,a[b].selfCertificate))return a[b];return null},d.prototype.update=function(a){var b=this;if(a.verifyPrimaryKey()!==o.keyStatus.invalid){if(this.primaryKey.getFingerprint()!==a.primaryKey.getFingerprint())throw new Error("Key update method: fingerprints of keys not equal");if(this.isPublic()&&a.isPrivate()){var c=(this.subKeys&&this.subKeys.length)===(a.subKeys&&a.subKeys.length)&&(!this.subKeys||this.subKeys.every(function(b){return a.subKeys.some(function(a){return b.subKey.getFingerprint()===a.subKey.getFingerprint()})}));if(!c)throw new Error("Cannot update public key with private key if subkey mismatch");this.primaryKey=a.primaryKey}this.revocationSignature||!a.revocationSignature||a.revocationSignature.isExpired()||!a.revocationSignature.verified&&!a.revocationSignature.verify(a.primaryKey,{key:a.primaryKey})||(this.revocationSignature=a.revocationSignature),h(a,this,"directSignatures"),a.users.forEach(function(a){for(var c=!1,d=0;d<b.users.length;d++)if(a.userId&&a.userId.userid===b.users[d].userId.userid||a.userAttribute&&a.userAttribute.equals(b.users[d].userAttribute)){b.users[d].update(a,b.primaryKey),c=!0;break}c||b.users.push(a)}),a.subKeys&&a.subKeys.forEach(function(a){for(var c=!1,d=0;d<b.subKeys.length;d++)if(a.subKey.getFingerprint()===b.subKeys[d].subKey.getFingerprint()){b.subKeys[d].update(a,b.primaryKey),c=!0;break}c||b.subKeys.push(a)})}},d.prototype.revoke=function(){},i.prototype.toPacketlist=function(){var a=new n.List;return a.push(this.userId||this.userAttribute),a.concat(this.revocationCertifications),a.concat(this.selfCertifications),a.concat(this.otherCertifications),a},i.prototype.isRevoked=function(a,b){if(this.revocationCertifications){var c=this;return this.revocationCertifications.some(function(d){return d.issuerKeyId.equals(a.issuerKeyId)&&!d.isExpired()&&(d.verified||d.verify(b,{userid:c.userId||c.userAttribute,key:b}))})}return!1},i.prototype.getValidSelfCertificate=function(a){if(!this.selfCertifications)return null;for(var b=this.selfCertifications.sort(function(a,b){return a=a.created,b=b.created,a>b?-1:b>a?1:0}),c=0;c<b.length;c++)if(this.isValidSelfCertificate(a,b[c]))return b[c];return null},i.prototype.isValidSelfCertificate=function(a,b){return this.isRevoked(b,a)?!1:b.isExpired()||!b.verified&&!b.verify(a,{userid:this.userId||this.userAttribute,key:a})?!1:!0},i.prototype.verify=function(a){if(!this.selfCertifications)return o.keyStatus.no_self_cert;for(var b,c=0;c<this.selfCertifications.length;c++)if(this.isRevoked(this.selfCertifications[c],a))b=o.keyStatus.revoked;else if(this.selfCertifications[c].verified||this.selfCertifications[c].verify(a,{userid:this.userId||this.userAttribute,
+key:a})){if(!this.selfCertifications[c].isExpired()){b=o.keyStatus.valid;break}b=o.keyStatus.expired}else b=o.keyStatus.invalid;return b},i.prototype.update=function(a,b){var c=this;h(a,this,"selfCertifications",function(a){return a.verified||a.verify(b,{userid:c.userId||c.userAttribute,key:b})}),h(a,this,"otherCertifications"),h(a,this,"revocationCertifications")},j.prototype.toPacketlist=function(){var a=new n.List;return a.push(this.subKey),a.push(this.revocationSignature),a.push(this.bindingSignature),a},j.prototype.isValidEncryptionKey=function(a){return this.verify(a)==o.keyStatus.valid&&e(this.subKey,this.bindingSignature)},j.prototype.isValidSigningKey=function(a){return this.verify(a)==o.keyStatus.valid&&f(this.subKey,this.bindingSignature)},j.prototype.verify=function(a){return this.revocationSignature&&!this.revocationSignature.isExpired()&&(this.revocationSignature.verified||this.revocationSignature.verify(a,{key:a,bind:this.subKey}))?o.keyStatus.revoked:3==this.subKey.version&&0!==this.subKey.expirationTimeV3&&Date.now()>this.subKey.created.getTime()+24*this.subKey.expirationTimeV3*3600*1e3?o.keyStatus.expired:this.bindingSignature?this.bindingSignature.isExpired()?o.keyStatus.expired:this.bindingSignature.verified||this.bindingSignature.verify(a,{key:a,bind:this.subKey})?4==this.subKey.version&&this.bindingSignature.keyNeverExpires===!1&&Date.now()>this.subKey.created.getTime()+1e3*this.bindingSignature.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid:o.keyStatus.invalid},j.prototype.getExpirationTime=function(){return g(this.subKey,this.bindingSignature)},j.prototype.update=function(a,b){if(a.verify(b)!==o.keyStatus.invalid){if(this.subKey.getFingerprint()!==a.subKey.getFingerprint())throw new Error("SubKey update method: fingerprints of subkeys not equal");this.subKey.tag===o.packet.publicSubkey&&a.subKey.tag===o.packet.secretSubkey&&(this.subKey=a.subKey),!this.bindingSignature&&a.bindingSignature&&(a.bindingSignature.verified||a.bindingSignature.verify(b,{key:b,bind:this.subKey}))&&(this.bindingSignature=a.bindingSignature),this.revocationSignature||!a.revocationSignature||a.revocationSignature.isExpired()||!a.revocationSignature.verified&&!a.revocationSignature.verify(b,{key:b,bind:this.subKey})||(this.revocationSignature=a.revocationSignature)}},c.Key=d,c.readArmored=k,c.generate=l,c.getPreferredSymAlgo=m},{"./config":17,"./encoding/armor.js":41,"./enums.js":43,"./packet":55,"./util":76}],48:[function(a,b,c){b.exports=a("./keyring.js"),b.exports.localstore=a("./localstore.js")},{"./keyring.js":49,"./localstore.js":50}],49:[function(a,b,c){function d(b){this.storeHandler=b||new(a("./localstore.js")),this.publicKeys=new e(this.storeHandler.loadPublic()),this.privateKeys=new e(this.storeHandler.loadPrivate())}function e(a){this.keys=a}function f(a,b){a=a.toLowerCase();for(var c=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp("<"+c+">"),e=b.getUserIds(),f=0;f<e.length;f++){var g=e[f].toLowerCase();if(a===g||d.test(g))return!0}return!1}function g(a,b){return 16===a.length?a===b.getKeyId().toHex():a===b.getFingerprint()}var h=(a("../enums.js"),a("../key.js"));a("../util.js");b.exports=d,d.prototype.store=function(){this.storeHandler.storePublic(this.publicKeys.keys),this.storeHandler.storePrivate(this.privateKeys.keys)},d.prototype.clear=function(){this.publicKeys.keys=[],this.privateKeys.keys=[]},d.prototype.getKeysForId=function(a,b){var c=[];return c=c.concat(this.publicKeys.getForId(a,b)||[]),c=c.concat(this.privateKeys.getForId(a,b)||[]),c.length?c:null},d.prototype.removeKeysForId=function(a){var b=[];return b=b.concat(this.publicKeys.removeForId(a)||[]),b=b.concat(this.privateKeys.removeForId(a)||[]),b.length?b:null},d.prototype.getAllKeys=function(){return this.publicKeys.keys.concat(this.privateKeys.keys)},e.prototype.getForAddress=function(a){for(var b=[],c=0;c<this.keys.length;c++)f(a,this.keys[c])&&b.push(this.keys[c]);return b},e.prototype.getForId=function(a,b){for(var c=0;c<this.keys.length;c++){if(g(a,this.keys[c].primaryKey))return this.keys[c];if(b&&this.keys[c].subKeys)for(var d=0;d<this.keys[c].subKeys.length;d++)if(g(a,this.keys[c].subKeys[d].subKey))return this.keys[c]}return null},e.prototype.importKey=function(a){var b=h.readArmored(a),c=this;return b.keys.forEach(function(a){var b=a.primaryKey.getKeyId().toHex(),d=c.getForId(b);d?d.update(a):c.push(a)}),b.err?b.err:null},e.prototype.push=function(a){return this.keys.push(a)},e.prototype.removeForId=function(a){for(var b=0;b<this.keys.length;b++)if(g(a,this.keys[b].primaryKey))return this.keys.splice(b,1)[0];return null}},{"../enums.js":43,"../key.js":47,"../util.js":76,"./localstore.js":50}],50:[function(a,b,c){function d(b){b=b||"openpgp-",this.publicKeysItem=b+this.publicKeysItem,this.privateKeysItem=b+this.privateKeysItem,"undefined"!=typeof window&&window.localStorage?this.storage=window.localStorage:this.storage=new(a("node-localstorage").LocalStorage)(g.node_store)}function e(a,b){var c=JSON.parse(a.getItem(b)),d=[];if(null!==c&&0!==c.length)for(var e,f=0;f<c.length;f++)e=h.readArmored(c[f]),e.err?i.print_debug("Error reading armored key from keyring index: "+f):d.push(e.keys[0]);return d}function f(a,b,c){var d=[];if(c.length){for(var e=0;e<c.length;e++)d.push(c[e].armor());a.setItem(b,JSON.stringify(d))}else a.removeItem(b)}b.exports=d;var g=a("../config"),h=a("../key.js"),i=a("../util.js");d.prototype.publicKeysItem="public-keys",d.prototype.privateKeysItem="private-keys",d.prototype.loadPublic=function(){return e(this.storage,this.publicKeysItem)},d.prototype.loadPrivate=function(){return e(this.storage,this.privateKeysItem)},d.prototype.storePublic=function(a){f(this.storage,this.publicKeysItem,a)},d.prototype.storePrivate=function(a){f(this.storage,this.privateKeysItem,a)}},{"../config":17,"../key.js":47,"../util.js":76,"node-localstorage":"node-localstorage"}],51:[function(a,b,c){"use strict";function d(a){return this instanceof d?void(this.packets=a||new i.List):new d(a)}function e(a){var b=k.decode(a).data,c=new i.List;return c.read(b),new d(c)}function f(a,b){var c=new i.Literal;c.setBytes(a,j.read(j.literal,j.literal.binary));var e=new i.List;e.push(c);var f=k.decode(b).data;return e.read(f),new d(e)}function g(a){var b=new i.Literal;b.setText(a);var c=new i.List;return c.push(b),new d(c)}function h(a,b){var c=new i.Literal;b&&c.setFilename(b),c.setBytes(a,j.read(j.literal,j.literal.binary));var e=new i.List;return e.push(c),new d(e)}var i=a("./packet"),j=a("./enums.js"),k=a("./encoding/armor.js"),l=a("./config"),m=a("./crypto"),n=a("./key.js");d.prototype.getEncryptionKeyIds=function(){var a=[],b=this.packets.filterByTag(j.packet.publicKeyEncryptedSessionKey);return b.forEach(function(b){a.push(b.publicKeyId)}),a},d.prototype.getSigningKeyIds=function(){var a=[],b=this.unwrapCompressed(),c=b.packets.filterByTag(j.packet.onePassSignature);if(c.forEach(function(b){a.push(b.signingKeyId)}),!a.length){var d=b.packets.filterByTag(j.packet.signature);d.forEach(function(b){a.push(b.issuerKeyId)})}return a},d.prototype.decrypt=function(a){var b=this.getEncryptionKeyIds();if(!b.length)return this;var c=a.getKeyPacket(b);if(!c.isDecrypted)throw new Error("Private key is not decrypted.");for(var e,f=this.packets.filterByTag(j.packet.publicKeyEncryptedSessionKey),g=0;g<f.length;g++)if(f[g].publicKeyId.equals(c.getKeyId())){e=f[g],e.decrypt(c);break}if(e){var h=this.packets.filterByTag(j.packet.symmetricallyEncrypted,j.packet.symEncryptedIntegrityProtected);if(0!==h.length){var k=h[0];k.decrypt(e.sessionKeyAlgorithm,e.sessionKey);var l=new d(k.packets);return k.packets=new i.List,l}}},d.prototype.getLiteralData=function(){var a=this.packets.findPacket(j.packet.literal);return a&&a.data||null},d.prototype.getFilename=function(){var a=this.packets.findPacket(j.packet.literal);return a&&a.getFilename()||null},d.prototype.getText=function(){var a=this.packets.findPacket(j.packet.literal);return a?a.getText():null},d.prototype.encrypt=function(a){var b=new i.List,c=n.getPreferredSymAlgo(a),e=m.generateSessionKey(j.read(j.symmetric,c));a.forEach(function(a){var d=a.getEncryptionKeyPacket();if(!d)throw new Error("Could not find valid key packet for encryption in key "+a.primaryKey.getKeyId().toHex());var f=new i.PublicKeyEncryptedSessionKey;f.publicKeyId=d.getKeyId(),f.publicKeyAlgorithm=d.algorithm,f.sessionKey=e,f.sessionKeyAlgorithm=j.read(j.symmetric,c),f.encrypt(d),b.push(f)});var f;return f=l.integrity_protect?new i.SymEncryptedIntegrityProtected:new i.SymmetricallyEncrypted,f.packets=this.packets,f.encrypt(j.read(j.symmetric,c),e),b.push(f),f.packets=new i.List,new d(b)},d.prototype.symEncrypt=function(a){if(!a)throw new Error("The passphrase cannot be empty!");var b=j.read(j.symmetric,l.encryption_cipher),c=new i.List,e=new i.SymEncryptedSessionKey;e.sessionKeyAlgorithm=b,e.decrypt(a),c.push(e);var f=new i.SymEncryptedIntegrityProtected;return f.packets=this.packets,f.encrypt(b,e.sessionKey),c.push(f),f.packets=new i.List,new d(c)},d.prototype.symDecrypt=function(a){var b=this.packets.filterByTag(j.packet.symEncryptedSessionKey,j.packet.symEncryptedIntegrityProtected),c=b[0];c.decrypt(a);var e=b[1];e.decrypt(c.sessionKeyAlgorithm,c.sessionKey);var f=new d(e.packets);return e.packets=new i.List,f},d.prototype.sign=function(a){var b=new i.List,c=this.packets.findPacket(j.packet.literal);if(!c)throw new Error("No literal data packet to sign.");var e,f,g=j.write(j.literal,c.format),h=g==j.literal.binary?j.signature.binary:j.signature.text;for(e=0;e<a.length;e++){if(a[e].isPublic())throw new Error("Need private key for signing");var k=new i.OnePassSignature;if(k.type=h,k.hashAlgorithm=l.prefer_hash_algorithm,f=a[e].getSigningKeyPacket(),!f)throw new Error("Could not find valid key packet for signing in key "+a[e].primaryKey.getKeyId().toHex());k.publicKeyAlgorithm=f.algorithm,k.signingKeyId=f.getKeyId(),b.push(k)}for(b.push(c),e=a.length-1;e>=0;e--){var m=new i.Signature;if(m.signatureType=h,m.hashAlgorithm=l.prefer_hash_algorithm,m.publicKeyAlgorithm=f.algorithm,!f.isDecrypted)throw new Error("Private key is not decrypted.");m.sign(f,c),b.push(m)}return new d(b)},d.prototype.verify=function(a){var b=[],c=this.unwrapCompressed(),d=c.packets.filterByTag(j.packet.literal);if(1!==d.length)throw new Error("Can only verify message with one literal data packet.");for(var e=c.packets.filterByTag(j.packet.signature),f=0;f<e.length;f++){for(var g=null,h=0;h<a.length&&!(g=a[h].getSigningKeyPacket(e[f].issuerKeyId));h++);var i={};g?(i.keyid=e[f].issuerKeyId,i.valid=e[f].verify(g,d[0])):(i.keyid=e[f].issuerKeyId,i.valid=null),b.push(i)}return b},d.prototype.unwrapCompressed=function(){var a=this.packets.filterByTag(j.packet.compressed);return a.length?new d(a[0].packets):this},d.prototype.armor=function(){return k.encode(j.armor.message,this.packets.write())},c.Message=d,c.readArmored=e,c.readSignedContent=f,c.fromText=g,c.fromBinary=h},{"./config":17,"./crypto":32,"./encoding/armor.js":41,"./enums.js":43,"./key.js":47,"./packet":55}],52:[function(a,b,c){"use strict";function d(a,b){return b&&b.worker||"undefined"!=typeof window&&window.Worker?(b=b||{},b.config=this.config,x=new w(a,b),!0):!1}function e(){return x}function f(a,b,c,d){return a.length||(a=[a]),x?x.encryptMessage(a,b,c,d):m(function(){var e,f;return e=o(b,c,d),e=e.encrypt(a),f=q.encode(r.armor.message,e.packets.write())},"Error encrypting message!")}function g(a,b,c,d,e){return a.length||(a=[a]),x?x.signAndEncryptMessage(a,b,c,d,e):m(function(){var f,g;return f=o(c,d,e),f=f.sign([b]),f=f.encrypt(a),g=q.encode(r.armor.message,f.packets.write())},"Error signing and encrypting message!")}function h(a,b,c){return x?x.decryptMessage(a,b,c):m(function(){return b=b.decrypt(a),c?p(b,c):p(b).text},"Error decrypting message!")}function i(a,b,c,d){return b.length||(b=[b]),x?x.decryptAndVerifyMessage(a,b,c,d):m(function(){var e={};return c=c.decrypt(a),e=p(c,d),e.text?(e.signatures=c.verify(b),e):null},"Error decrypting and verifying message!")}function j(a,b){return a.length||(a=[a]),x?x.signClearMessage(a,b):m(function(){var c=new t.CleartextMessage(b);return c.sign(a),c.armor()},"Error signing cleartext message!")}function k(a,b){return a.length||(a=[a]),x?x.verifyClearSignedMessage(a,b):m(function(){var c={};if(!(b instanceof t.CleartextMessage))throw new Error("Parameter [message] needs to be of type CleartextMessage.");return c.text=b.getText(),c.signatures=b.verify(a),c},"Error verifying cleartext signed message!")}function l(a){return!v.getWebCrypto()&&x?x.generateKeyPair(a):u.generate(a).then(function(a){var b={};return b.key=a,b.privateKeyArmored=a.armor(),b.publicKeyArmored=a.toPublic().armor(),b})["catch"](function(b){if(console.error(b),!v.getWebCrypto())throw new Error("Error generating keypair using js fallback!");return console.log("Error generating keypair using native WebCrypto... falling back back to js!"),x.generateKeyPair(a)})["catch"](n.bind(null,"Error generating keypair!"))}function m(a,b){var c=new Promise(function(b){var c=a();b(c)});return c["catch"](n.bind(null,b))}function n(a,b){throw console.error(b.stack),new Error(a)}function o(a,b,c){var d;return d="binary"===b?s.fromBinary(a,c):s.fromText(a)}function p(a,b){return"binary"===b?{text:a.getLiteralData(),filename:a.getFilename()}:{text:a.getText()}}var q=a("./encoding/armor.js"),r=a("./enums.js"),s=a("./message.js"),t=a("./cleartext.js"),u=a("./key.js"),v=a("./util"),w=a("./worker/async_proxy.js");a("es6-promise").polyfill();var x=null;c.initWorker=d,c.getWorker=e,c.encryptMessage=f,c.signAndEncryptMessage=g,c.decryptMessage=h,c.decryptAndVerifyMessage=i,c.signClearMessage=j,c.verifyClearSignedMessage=k,c.generateKeyPair=l},{"./cleartext.js":12,"./encoding/armor.js":41,"./enums.js":43,"./key.js":47,"./message.js":51,"./util":76,"./worker/async_proxy.js":77,"es6-promise":1}],53:[function(a,b,c){function d(a){return a.substr(0,1).toUpperCase()+a.substr(1)}var e=a("../enums.js");b.exports={Compressed:a("./compressed.js"),SymEncryptedIntegrityProtected:a("./sym_encrypted_integrity_protected.js"),PublicKeyEncryptedSessionKey:a("./public_key_encrypted_session_key.js"),SymEncryptedSessionKey:a("./sym_encrypted_session_key.js"),Literal:a("./literal.js"),PublicKey:a("./public_key.js"),SymmetricallyEncrypted:a("./symmetrically_encrypted.js"),Marker:a("./marker.js"),PublicSubkey:a("./public_subkey.js"),UserAttribute:a("./user_attribute.js"),OnePassSignature:a("./one_pass_signature.js"),SecretKey:a("./secret_key.js"),Userid:a("./userid.js"),SecretSubkey:a("./secret_subkey.js"),Signature:a("./signature.js"),Trust:a("./trust.js"),newPacketFromTag:function(a){return new(this[d(a)])},fromStructuredClone:function(a){var b=e.read(e.packet,a.tag),c=this.newPacketFromTag(b);for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);return c.postCloneTypeFix&&c.postCloneTypeFix(),c}}},{"../enums.js":43,"./compressed.js":54,"./literal.js":56,"./marker.js":57,"./one_pass_signature.js":58,"./public_key.js":61,"./public_key_encrypted_session_key.js":62,"./public_subkey.js":63,"./secret_key.js":64,"./secret_subkey.js":65,"./signature.js":66,"./sym_encrypted_integrity_protected.js":67,"./sym_encrypted_session_key.js":68,"./symmetrically_encrypted.js":69,"./trust.js":70,"./user_attribute.js":71,"./userid.js":72}],54:[function(a,b,c){function d(){this.tag=e.packet.compressed,this.packets=null,this.algorithm="zip",this.compressed=null}b.exports=d;var e=a("../enums.js"),f=a("../util.js"),g=a("../compression/zlib.min.js"),h=a("../compression/rawinflate.min.js"),i=a("../compression/rawdeflate.min.js");d.prototype.read=function(a){this.algorithm=e.read(e.compression,a.charCodeAt(0)),this.compressed=a.substr(1),this.decompress()},d.prototype.write=function(){return null===this.compressed&&this.compress(),String.fromCharCode(e.write(e.compression,this.algorithm))+this.compressed},d.prototype.decompress=function(){var a;switch(this.algorithm){case"uncompressed":a=this.compressed;break;case"zip":var b=new h.Zlib.RawInflate(f.str2Uint8Array(this.compressed));a=f.Uint8Array2str(b.decompress());break;case"zlib":var b=new g.Zlib.Inflate(f.str2Uint8Array(this.compressed));a=f.Uint8Array2str(b.decompress());break;case"bzip2":throw new Error("Compression algorithm BZip2 [BZ2] is not implemented.");default:throw new Error("Compression algorithm unknown :"+this.alogrithm)}this.packets.read(a)},d.prototype.compress=function(){var a,b;switch(a=this.packets.write(),this.algorithm){case"uncompressed":this.compressed=a;break;case"zip":b=new i.Zlib.RawDeflate(f.str2Uint8Array(a)),this.compressed=f.Uint8Array2str(b.compress());break;case"zlib":b=new g.Zlib.Deflate(f.str2Uint8Array(a)),this.compressed=f.Uint8Array2str(b.compress());break;case"bzip2":throw new Error("Compression algorithm BZip2 [BZ2] is not implemented.");default:throw new Error("Compression algorithm unknown :"+this.type)}}},{"../compression/rawdeflate.min.js":13,"../compression/rawinflate.min.js":14,"../compression/zlib.min.js":15,"../enums.js":43,"../util.js":76}],55:[function(a,b,c){a("../enums.js");b.exports={List:a("./packetlist.js")};var d=a("./all_packets.js");for(var e in d)b.exports[e]=d[e]},{"../enums.js":43,"./all_packets.js":53,"./packetlist.js":60}],56:[function(a,b,c){function d(){this.tag=f.packet.literal,this.format="utf8",this.data="",this.date=new Date,this.filename="msg.txt"}b.exports=d;var e=a("../util.js"),f=a("../enums.js");d.prototype.setText=function(a){a=a.replace(/\r/g,"").replace(/\n/g,"\r\n"),this.data="utf8"==this.format?e.encode_utf8(a):a},d.prototype.getText=function(){var a=e.decode_utf8(this.data);return a.replace(/\r\n/g,"\n")},d.prototype.setBytes=function(a,b){this.format=b,this.data=a},d.prototype.getBytes=function(){return this.data},d.prototype.setFilename=function(a){this.filename=a},d.prototype.getFilename=function(){return this.filename},d.prototype.read=function(a){var b=f.read(f.literal,a.charCodeAt(0)),c=a.charCodeAt(1);this.filename=e.decode_utf8(a.substr(2,c)),this.date=e.readDate(a.substr(2+c,4));var d=a.substring(6+c);this.setBytes(d,b)},d.prototype.write=function(){var a=e.encode_utf8(this.filename),b=this.getBytes(),c="";return c+=String.fromCharCode(f.write(f.literal,this.format)),c+=String.fromCharCode(a.length),c+=a,c+=e.writeDate(this.date),c+=b}},{"../enums.js":43,"../util.js":76}],57:[function(a,b,c){function d(){this.tag=e.packet.marker}b.exports=d;var e=a("../enums.js");d.prototype.read=function(a){return 80==a.charCodeAt(0)&&71==a.charCodeAt(1)&&80==a.charCodeAt(2)?!0:!1}},{"../enums.js":43}],58:[function(a,b,c){function d(){this.tag=e.packet.onePassSignature,this.version=null,this.type=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signingKeyId=null,this.flags=null}b.exports=d;var e=a("../enums.js"),f=a("../type/keyid.js");d.prototype.read=function(a){var b=0;return this.version=a.charCodeAt(b++),this.type=e.read(e.signature,a.charCodeAt(b++)),this.hashAlgorithm=e.read(e.hash,a.charCodeAt(b++)),this.publicKeyAlgorithm=e.read(e.publicKey,a.charCodeAt(b++)),this.signingKeyId=new f,this.signingKeyId.read(a.substr(b)),b+=8,this.flags=a.charCodeAt(b++),this},d.prototype.write=function(){var a="";return a+=String.fromCharCode(3),a+=String.fromCharCode(e.write(e.signature,this.type)),a+=String.fromCharCode(e.write(e.hash,this.hashAlgorithm)),a+=String.fromCharCode(e.write(e.publicKey,this.publicKeyAlgorithm)),a+=this.signingKeyId.write(),a+=String.fromCharCode(this.flags)},d.prototype.postCloneTypeFix=function(){this.signingKeyId=f.fromClone(this.signingKeyId)}},{"../enums.js":43,"../type/keyid.js":73}],59:[function(a,b,c){var d=(a("../enums.js"),a("../util.js"));b.exports={readSimpleLength:function(a){var b,c=0,e=a.charCodeAt(0);return 192>e?(c=a.charCodeAt(0),b=1):255>e?(c=(a.charCodeAt(0)-192<<8)+a.charCodeAt(1)+192,b=2):255==e&&(c=d.readNumber(a.substr(1,4)),b=5),{len:c,offset:b}},writeSimpleLength:function(a){var b="";return 192>a?b+=String.fromCharCode(a):a>191&&8384>a?(b+=String.fromCharCode((a-192>>8)+192),b+=String.fromCharCode(a-192&255)):(b+=String.fromCharCode(255),b+=d.writeNumber(a,4)),b},writeHeader:function(a,b){var c="";return c+=String.fromCharCode(192|a),c+=this.writeSimpleLength(b)},writeOldHeader:function(a,b){var c="";return 256>b?(c+=String.fromCharCode(128|a<<2),c+=String.fromCharCode(b)):65536>b?(c+=String.fromCharCode(128|a<<2|1),c+=d.writeNumber(b,2)):(c+=String.fromCharCode(128|a<<2|2),c+=d.writeNumber(b,4)),c},read:function(a,b,c){if(null===a||a.length<=b||a.substring(b).length<2||0===(128&a.charCodeAt(b)))throw new Error("Error during parsing. This message / key is probably not containing a valid OpenPGP format.");var e,f=b,g=-1,h=-1;h=0,0!==(64&a.charCodeAt(f))&&(h=1);var i;h?g=63&a.charCodeAt(f):(g=(63&a.charCodeAt(f))>>2,i=3&a.charCodeAt(f)),f++;var j=null,k=-1;if(h)if(a.charCodeAt(f)<192)e=a.charCodeAt(f++),d.print_debug("1 byte length:"+e);else if(a.charCodeAt(f)>=192&&a.charCodeAt(f)<224)e=(a.charCodeAt(f++)-192<<8)+a.charCodeAt(f++)+192,d.print_debug("2 byte length:"+e);else if(a.charCodeAt(f)>223&&a.charCodeAt(f)<255){e=1<<(31&a.charCodeAt(f++)),d.print_debug("4 byte length:"+e);var l=f+e;j=a.substring(f,f+e);for(var m;;){if(a.charCodeAt(l)<192){m=a.charCodeAt(l++),e+=m,j+=a.substring(l,l+m),l+=m;break}if(a.charCodeAt(l)>=192&&a.charCodeAt(l)<224){m=(a.charCodeAt(l++)-192<<8)+a.charCodeAt(l++)+192,e+=m,j+=a.substring(l,l+m),l+=m;break}if(!(a.charCodeAt(l)>223&&a.charCodeAt(l)<255)){l++,m=a.charCodeAt(l++)<<24|a.charCodeAt(l++)<<16|a.charCodeAt(l++)<<8|a.charCodeAt(l++),j+=a.substring(l,l+m),e+=m,l+=m;break}m=1<<(31&a.charCodeAt(l++)),e+=m,j+=a.substring(l,l+m),l+=m}k=l-f}else f++,e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);else switch(i){case 0:e=a.charCodeAt(f++);break;case 1:e=a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;case 2:e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;default:e=c}return-1==k&&(k=e),null===j&&(j=a.substring(f,f+k)),{tag:g,packet:j,offset:f+k}}}},{"../enums.js":43,"../util.js":76}],60:[function(a,b,c){function d(){this.length=0}b.exports=d;var e=a("./packet.js"),f=a("./all_packets.js"),g=a("../enums.js");d.prototype.read=function(a){for(var b=0;b<a.length;){var c=e.read(a,b,a.length-b);b=c.offset;var d=!1;try{var h=g.read(g.packet,c.tag),i=f.newPacketFromTag(h);this.push(i),d=!0,i.read(c.packet)}catch(j){d&&this.pop()}}},d.prototype.write=function(){for(var a="",b=0;b<this.length;b++){var c=this[b].write();a+=e.writeHeader(this[b].tag,c.length),a+=c}return a},d.prototype.push=function(a){a&&(a.packets=a.packets||new d,this[this.length]=a,this.length++)},d.prototype.pop=function(){if(0!==this.length){var a=this[this.length-1];return delete this[this.length-1],this.length--,a}},d.prototype.filter=function(a){for(var b=new d,c=0;c<this.length;c++)a(this[c],c,this)&&b.push(this[c]);return b},d.prototype.filterByTag=function(){for(var a=Array.prototype.slice.call(arguments),b=new d,c=this,e=0;e<this.length;e++)a.some(function(a){return c[e].tag==a})&&b.push(this[e]);return b},d.prototype.forEach=function(a){for(var b=0;b<this.length;b++)a(this[b])},d.prototype.findPacket=function(a){var b=this.filterByTag(a);if(b.length)return b[0];for(var c=null,d=0;d<this.length;d++)if(this[d].packets.length&&(c=this[d].packets.findPacket(a)))return c;return null},d.prototype.indexOfTag=function(){for(var a=Array.prototype.slice.call(arguments),b=[],c=this,d=0;d<this.length;d++)a.some(function(a){return c[d].tag==a})&&b.push(d);return b},d.prototype.slice=function(a,b){b||(b=this.length);for(var c=new d,e=a;b>e;e++)c.push(this[e]);return c},d.prototype.concat=function(a){if(a)for(var b=0;b<a.length;b++)this.push(a[b])},b.exports.fromStructuredClone=function(a){for(var b=new d,c=0;c<a.length;c++)b.push(f.fromStructuredClone(a[c])),0!==b[c].packets.length?b[c].packets=this.fromStructuredClone(b[c].packets):b[c].packets=new d;return b}},{"../enums.js":43,"./all_packets.js":53,"./packet.js":59}],61:[function(a,b,c){function d(){this.tag=h.packet.publicKey,this.version=4,this.created=new Date,this.mpi=[],this.algorithm="rsa_sign",this.expirationTimeV3=0,this.fingerprint=null,this.keyid=null}b.exports=d;var e=a("../util.js"),f=a("../type/mpi.js"),g=a("../type/keyid.js"),h=a("../enums.js"),i=a("../crypto");d.prototype.read=function(a){var b=0;if(this.version=a.charCodeAt(b++),3==this.version||4==this.version){this.created=e.readDate(a.substr(b,4)),b+=4,3==this.version&&(this.expirationTimeV3=e.readNumber(a.substr(b,2)),b+=2),this.algorithm=h.read(h.publicKey,a.charCodeAt(b++));var c=i.getPublicMpiCount(this.algorithm);this.mpi=[];for(var d=a.substr(b),g=0,j=0;c>j&&g<d.length;j++)if(this.mpi[j]=new f,g+=this.mpi[j].read(d.substr(g)),g>d.length)throw new Error("Error reading MPI @:"+g);return g+6}throw new Error("Version "+this.version+" of the key packet is unsupported.")},d.prototype.readPublicKey=d.prototype.read,d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=e.writeDate(this.created),3==this.version&&(a+=e.writeNumber(this.expirationTimeV3,2)),a+=String.fromCharCode(h.write(h.publicKey,this.algorithm));for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].write();return a},d.prototype.writePublicKey=d.prototype.write,d.prototype.writeOld=function(){var a=this.writePublicKey();return String.fromCharCode(153)+e.writeNumber(a.length,2)+a},d.prototype.getKeyId=function(){return this.keyid?this.keyid:(this.keyid=new g,4==this.version?this.keyid.read(e.hex2bin(this.getFingerprint()).substr(12,8)):3==this.version&&this.keyid.read(this.mpi[0].write().substr(-8)),this.keyid)},d.prototype.getFingerprint=function(){if(this.fingerprint)return this.fingerprint;var a="";if(4==this.version)a=this.writeOld(),this.fingerprint=i.hash.sha1(a);else if(3==this.version){for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].toBytes();this.fingerprint=i.hash.md5(a)}return this.fingerprint=e.hexstrdump(this.fingerprint),this.fingerprint},d.prototype.getBitSize=function(){return 8*this.mpi[0].byteLength()},d.prototype.postCloneTypeFix=function(){for(var a=0;a<this.mpi.length;a++)this.mpi[a]=f.fromClone(this.mpi[a]);this.keyid&&(this.keyid=g.fromClone(this.keyid))}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76}],62:[function(a,b,c){function d(){this.tag=h.packet.publicKeyEncryptedSessionKey,this.version=3,this.publicKeyId=new e,this.publicKeyAlgorithm="rsa_encrypt",this.sessionKey=null,this.sessionKeyAlgorithm="aes256",this.encrypted=[]}b.exports=d;var e=a("../type/keyid.js"),f=a("../util.js"),g=a("../type/mpi.js"),h=a("../enums.js"),i=a("../crypto");d.prototype.read=function(a){this.version=a.charCodeAt(0),this.publicKeyId.read(a.substr(1)),this.publicKeyAlgorithm=h.read(h.publicKey,a.charCodeAt(9));var b=10,c=function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":return 1;case"elgamal":return 2;default:throw new Error("Invalid algorithm.")}}(this.publicKeyAlgorithm);this.encrypted=[];for(var d=0;c>d;d++){var e=new g;b+=e.read(a.substr(b)),this.encrypted.push(e)}},d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=this.publicKeyId.write(),a+=String.fromCharCode(h.write(h.publicKey,this.publicKeyAlgorithm));for(var b=0;b<this.encrypted.length;b++)a+=this.encrypted[b].write();return a},d.prototype.encrypt=function(a){var b=String.fromCharCode(h.write(h.symmetric,this.sessionKeyAlgorithm));b+=this.sessionKey;var c=f.calc_checksum(this.sessionKey);b+=f.writeNumber(c,2);var d=new g;d.fromBytes(i.pkcs1.eme.encode(b,a.mpi[0].byteLength())),this.encrypted=i.publicKeyEncrypt(this.publicKeyAlgorithm,a.mpi,d)},d.prototype.decrypt=function(a){var b=i.publicKeyDecrypt(this.publicKeyAlgorithm,a.mpi,this.encrypted).toBytes(),c=f.readNumber(b.substr(b.length-2)),d=i.pkcs1.eme.decode(b);if(a=d.substring(1,d.length-2),c!=f.calc_checksum(a))throw new Error("Checksum mismatch");this.sessionKey=a,this.sessionKeyAlgorithm=h.read(h.symmetric,d.charCodeAt(0))},d.prototype.postCloneTypeFix=function(){this.publicKeyId=e.fromClone(this.publicKeyId);for(var a=0;a<this.encrypted.length;a++)this.encrypted[a]=g.fromClone(this.encrypted[a])}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76}],63:[function(a,b,c){function d(){e.call(this),this.tag=f.packet.publicSubkey}b.exports=d;var e=a("./public_key.js"),f=a("../enums.js");d.prototype=new e,d.prototype.constructor=d},{"../enums.js":43,"./public_key.js":61}],64:[function(a,b,c){function d(){j.call(this),this.tag=k.packet.secretKey,this.encrypted=null,this.isDecrypted=!1}function e(a){return"sha1"==a?20:2}function f(a){return"sha1"==a?m.hash.sha1:function(a){return l.writeNumber(l.calc_checksum(a),2)}}function g(a,b,c){var d=e(a),g=f(a),h=b.substr(b.length-d);b=b.substr(0,b.length-d);var i=g(b);if(i!=h)return new Error("Hash mismatch.");for(var j=m.getPrivateMpiCount(c),k=0,l=[],o=0;j>o&&k<b.length;o++)l[o]=new n,k+=l[o].read(b.substr(k));return l}function h(a,b,c){for(var d="",e=m.getPublicMpiCount(b),g=e;g<c.length;g++)d+=c[g].write();return d+=f(a)(d)}function i(a,b,c){return a.produce_key(b,m.cipher[c].keySize)}b.exports=d;var j=a("./public_key.js"),k=a("../enums.js"),l=a("../util.js"),m=a("../crypto"),n=a("../type/mpi.js"),o=a("../type/s2k.js");d.prototype=new j,d.prototype.constructor=d,d.prototype.read=function(a){var b=this.readPublicKey(a);a=a.substr(b);var c=a.charCodeAt(0);if(c)this.encrypted=a;else{var d=g("mod",a.substr(1),this.algorithm);if(d instanceof Error)throw d;this.mpi=this.mpi.concat(d),this.isDecrypted=!0}},d.prototype.write=function(){var a=this.writePublicKey();return this.encrypted?a+=this.encrypted:(a+=String.fromCharCode(0),a+=h("mod",this.algorithm,this.mpi)),a},d.prototype.encrypt=function(a){if(this.isDecrypted&&!a)return void(this.encrypted=null);if(!a)throw new Error("The key must be decrypted before removing passphrase protection.");var b=new o,c="aes256",d=h("sha1",this.algorithm,this.mpi),e=i(b,a,c),f=m.cipher[c].blockSize,g=m.random.getRandomBytes(f);this.encrypted="",this.encrypted+=String.fromCharCode(254),this.encrypted+=String.fromCharCode(k.write(k.symmetric,c)),this.encrypted+=b.write(),this.encrypted+=g,this.encrypted+=m.cfb.normalEncrypt(c,e,d,g)},d.prototype.decrypt=function(a){if(this.isDecrypted)return!0;var b,c,d=0,e=this.encrypted.charCodeAt(d++);if(255==e||254==e){b=this.encrypted.charCodeAt(d++),b=k.read(k.symmetric,b);var f=new o;d+=f.read(this.encrypted.substr(d)),c=i(f,a,b)}else b=e,b=k.read(k.symmetric,b),c=m.hash.md5(a);var h=this.encrypted.substr(d,m.cipher[b].blockSize);d+=h.length;var j,l=this.encrypted.substr(d);j=m.cfb.normalDecrypt(b,c,l,h);var n=254==e?"sha1":"mod",p=g(n,j,this.algorithm);return p instanceof Error?!1:(this.mpi=this.mpi.concat(p),this.isDecrypted=!0,!0)},d.prototype.generate=function(a){var b=this;return m.generateMpi(b.algorithm,a).then(function(a){b.mpi=a,b.isDecrypted=!0})},d.prototype.clearPrivateMPIs=function(){if(!this.encrypted)throw new Error("If secret key is not encrypted, clearing private MPIs is irreversible.");this.mpi=this.mpi.slice(0,m.getPublicMpiCount(this.algorithm)),this.isDecrypted=!1}},{"../crypto":32,"../enums.js":43,"../type/mpi.js":74,"../type/s2k.js":75,"../util.js":76,"./public_key.js":61}],65:[function(a,b,c){function d(){e.call(this),this.tag=f.packet.secretSubkey}b.exports=d;var e=a("./secret_key.js"),f=a("../enums.js");d.prototype=new e,d.prototype.constructor=d},{"../enums.js":43,"./secret_key.js":64}],66:[function(a,b,c){function d(){this.tag=h.packet.signature,this.version=4,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signatureData=null,this.unhashedSubpackets=null,this.signedHashValue=null,this.created=new Date,this.signatureExpirationTime=null,this.signatureNeverExpires=!0,this.exportable=null,this.trustLevel=null,this.trustAmount=null,this.regularExpression=null,this.revocable=null,this.keyExpirationTime=null,this.keyNeverExpires=null,
+this.preferredSymmetricAlgorithms=null,this.revocationKeyClass=null,this.revocationKeyAlgorithm=null,this.revocationKeyFingerprint=null,this.issuerKeyId=new k,this.notation=null,this.preferredHashAlgorithms=null,this.preferredCompressionAlgorithms=null,this.keyServerPreferences=null,this.preferredKeyServer=null,this.isPrimaryUserID=null,this.policyURI=null,this.keyFlags=null,this.signersUserId=null,this.reasonForRevocationFlag=null,this.reasonForRevocationString=null,this.features=null,this.signatureTargetPublicKeyAlgorithm=null,this.signatureTargetHashAlgorithm=null,this.signatureTargetHash=null,this.embeddedSignature=null,this.verified=!1}function e(a,b){var c="";return c+=g.writeSimpleLength(b.length+1),c+=String.fromCharCode(a),c+=b}b.exports=d;var f=a("../util.js"),g=a("./packet.js"),h=a("../enums.js"),i=a("../crypto"),j=a("../type/mpi.js"),k=a("../type/keyid.js");d.prototype.read=function(a){function b(a){for(var b=f.readNumber(a.substr(0,2)),c=2;2+b>c;){var d=g.readSimpleLength(a.substr(c));c+=d.offset,this.read_sub_packet(a.substr(c,d.len)),c+=d.len}return c}var c=0;switch(this.version=a.charCodeAt(c++),this.version){case 3:5!=a.charCodeAt(c++)&&f.print_debug("packet/signature.js\ninvalid One-octet length of following hashed material.MUST be 5. @:"+(c-1));var d=c;this.signatureType=a.charCodeAt(c++),this.created=f.readDate(a.substr(c,4)),c+=4,this.signatureData=a.substring(d,c),this.issuerKeyId.read(a.substring(c,c+8)),c+=8,this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++);break;case 4:this.signatureType=a.charCodeAt(c++),this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++),c+=b.call(this,a.substr(c),!0),this.signatureData=a.substr(0,c);var e=c;c+=b.call(this,a.substr(c),!1),this.unhashedSubpackets=a.substr(e,c-e);break;default:throw new Error("Version "+this.version+" of the signature is unsupported.")}this.signedHashValue=a.substr(c,2),c+=2,this.signature=a.substr(c)},d.prototype.write=function(){var a="";switch(this.version){case 3:a+=String.fromCharCode(3),a+=String.fromCharCode(5),a+=this.signatureData,a+=this.issuerKeyId.write(),a+=String.fromCharCode(this.publicKeyAlgorithm),a+=String.fromCharCode(this.hashAlgorithm);break;case 4:a+=this.signatureData,a+=this.unhashedSubpackets?this.unhashedSubpackets:f.writeNumber(0,2)}return a+=this.signedHashValue+this.signature},d.prototype.sign=function(a,b){var c=h.write(h.signature,this.signatureType),d=h.write(h.publicKey,this.publicKeyAlgorithm),e=h.write(h.hash,this.hashAlgorithm),f=String.fromCharCode(4);f+=String.fromCharCode(c),f+=String.fromCharCode(d),f+=String.fromCharCode(e),this.issuerKeyId=a.getKeyId(),f+=this.write_all_sub_packets(),this.signatureData=f;var g=this.calculateTrailer(),j=this.toSign(c,b)+this.signatureData+g,k=i.hash.digest(e,j);this.signedHashValue=k.substr(0,2),this.signature=i.signature.sign(e,d,a.mpi,j)},d.prototype.write_all_sub_packets=function(){var a=h.signatureSubpacket,b="",c="";if(null!==this.created&&(b+=e(a.signature_creation_time,f.writeDate(this.created))),null!==this.signatureExpirationTime&&(b+=e(a.signature_expiration_time,f.writeNumber(this.signatureExpirationTime,4))),null!==this.exportable&&(b+=e(a.exportable_certification,String.fromCharCode(this.exportable?1:0))),null!==this.trustLevel&&(c=String.fromCharCode(this.trustLevel)+String.fromCharCode(this.trustAmount),b+=e(a.trust_signature,c)),null!==this.regularExpression&&(b+=e(a.regular_expression,this.regularExpression)),null!==this.revocable&&(b+=e(a.revocable,String.fromCharCode(this.revocable?1:0))),null!==this.keyExpirationTime&&(b+=e(a.key_expiration_time,f.writeNumber(this.keyExpirationTime,4))),null!==this.preferredSymmetricAlgorithms&&(c=f.bin2str(this.preferredSymmetricAlgorithms),b+=e(a.preferred_symmetric_algorithms,c)),null!==this.revocationKeyClass&&(c=String.fromCharCode(this.revocationKeyClass),c+=String.fromCharCode(this.revocationKeyAlgorithm),c+=this.revocationKeyFingerprint,b+=e(a.revocation_key,c)),this.issuerKeyId.isNull()||(b+=e(a.issuer,this.issuerKeyId.write())),null!==this.notation)for(var d in this.notation)if(this.notation.hasOwnProperty(d)){var g=this.notation[d];c=String.fromCharCode(128),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=f.writeNumber(d.length,2),c+=f.writeNumber(g.length,2),c+=d+g,b+=e(a.notation_data,c)}return null!==this.preferredHashAlgorithms&&(c=f.bin2str(this.preferredHashAlgorithms),b+=e(a.preferred_hash_algorithms,c)),null!==this.preferredCompressionAlgorithms&&(c=f.bin2str(this.preferredCompressionAlgorithms),b+=e(a.preferred_compression_algorithms,c)),null!==this.keyServerPreferences&&(c=f.bin2str(this.keyServerPreferences),b+=e(a.key_server_preferences,c)),null!==this.preferredKeyServer&&(b+=e(a.preferred_key_server,this.preferredKeyServer)),null!==this.isPrimaryUserID&&(b+=e(a.primary_user_id,String.fromCharCode(this.isPrimaryUserID?1:0))),null!==this.policyURI&&(b+=e(a.policy_uri,this.policyURI)),null!==this.keyFlags&&(c=f.bin2str(this.keyFlags),b+=e(a.key_flags,c)),null!==this.signersUserId&&(b+=e(a.signers_user_id,this.signersUserId)),null!==this.reasonForRevocationFlag&&(c=String.fromCharCode(this.reasonForRevocationFlag),c+=this.reasonForRevocationString,b+=e(a.reason_for_revocation,c)),null!==this.features&&(c=f.bin2str(this.features),b+=e(a.features,c)),null!==this.signatureTargetPublicKeyAlgorithm&&(c=String.fromCharCode(this.signatureTargetPublicKeyAlgorithm),c+=String.fromCharCode(this.signatureTargetHashAlgorithm),c+=this.signatureTargetHash,b+=e(a.signature_target,c)),null!==this.embeddedSignature&&(b+=e(a.embedded_signature,this.embeddedSignature.write())),b=f.writeNumber(b.length,2)+b},d.prototype.read_sub_packet=function(a){function b(a,b){this[a]=[];for(var c=0;c<b.length;c++)this[a].push(b.charCodeAt(c))}var c,e=0,g=127&a.charCodeAt(e++);switch(g){case 2:this.created=f.readDate(a.substr(e));break;case 3:c=f.readNumber(a.substr(e)),this.signatureNeverExpires=0===c,this.signatureExpirationTime=c;break;case 4:this.exportable=1==a.charCodeAt(e++);break;case 5:this.trustLevel=a.charCodeAt(e++),this.trustAmount=a.charCodeAt(e++);break;case 6:this.regularExpression=a.substr(e);break;case 7:this.revocable=1==a.charCodeAt(e++);break;case 9:c=f.readNumber(a.substr(e)),this.keyExpirationTime=c,this.keyNeverExpires=0===c;break;case 11:b.call(this,"preferredSymmetricAlgorithms",a.substr(e));break;case 12:this.revocationKeyClass=a.charCodeAt(e++),this.revocationKeyAlgorithm=a.charCodeAt(e++),this.revocationKeyFingerprint=a.substr(e,20);break;case 16:this.issuerKeyId.read(a.substr(e));break;case 20:if(128==a.charCodeAt(e)){e+=4;var h=f.readNumber(a.substr(e,2));e+=2;var j=f.readNumber(a.substr(e,2));e+=2;var k=a.substr(e,h),l=a.substr(e+h,j);this.notation=this.notation||{},this.notation[k]=l}else f.print_debug("Unsupported notation flag "+a.charCodeAt(e));break;case 21:b.call(this,"preferredHashAlgorithms",a.substr(e));break;case 22:b.call(this,"preferredCompressionAlgorithms",a.substr(e));break;case 23:b.call(this,"keyServerPreferencess",a.substr(e));break;case 24:this.preferredKeyServer=a.substr(e);break;case 25:this.isPrimaryUserID=0!==a[e++];break;case 26:this.policyURI=a.substr(e);break;case 27:b.call(this,"keyFlags",a.substr(e));break;case 28:this.signersUserId+=a.substr(e);break;case 29:this.reasonForRevocationFlag=a.charCodeAt(e++),this.reasonForRevocationString=a.substr(e);break;case 30:b.call(this,"features",a.substr(e));break;case 31:this.signatureTargetPublicKeyAlgorithm=a.charCodeAt(e++),this.signatureTargetHashAlgorithm=a.charCodeAt(e++);var m=i.getHashByteLength(this.signatureTargetHashAlgorithm);this.signatureTargetHash=a.substr(e,m);break;case 32:this.embeddedSignature=new d,this.embeddedSignature.read(a.substr(e));break;default:f.print_debug("Unknown signature subpacket type "+g+" @:"+e)}},d.prototype.toSign=function(a,b){var c=h.signature;switch(a){case c.binary:case c.text:return b.getBytes();case c.standalone:return"";case c.cert_generic:case c.cert_persona:case c.cert_casual:case c.cert_positive:case c.cert_revocation:var d,e;if(void 0!==b.userid)e=180,d=b.userid;else{if(void 0===b.userattribute)throw new Error("Either a userid or userattribute packet needs to be supplied for certification.");e=209,d=b.userattribute}var g=d.write();if(4==this.version)return this.toSign(c.key,b)+String.fromCharCode(e)+f.writeNumber(g.length,4)+g;if(3==this.version)return this.toSign(c.key,b)+g;break;case c.subkey_binding:case c.subkey_revocation:case c.key_binding:return this.toSign(c.key,b)+this.toSign(c.key,{key:b.bind});case c.key:if(void 0===b.key)throw new Error("Key packet is required for this signature.");return b.key.writeOld();case c.key_revocation:return this.toSign(c.key,b);case c.timestamp:return"";case c.third_party:throw new Error("Not implemented");default:throw new Error("Unknown signature type.")}},d.prototype.calculateTrailer=function(){var a="";return 3==this.version?a:(a+=String.fromCharCode(4),a+=String.fromCharCode(255),a+=f.writeNumber(this.signatureData.length,4))},d.prototype.verify=function(a,b){var c=h.write(h.signature,this.signatureType),d=h.write(h.publicKey,this.publicKeyAlgorithm),e=h.write(h.hash,this.hashAlgorithm),f=this.toSign(c,b),g=this.calculateTrailer(),k=0;d>0&&4>d?k=1:17==d&&(k=2);for(var l=[],m=0,n=0;k>n;n++)l[n]=new j,m+=l[n].read(this.signature.substr(m));return this.verified=i.signature.verify(d,e,l,a.mpi,f+this.signatureData+g),this.verified},d.prototype.isExpired=function(){return this.signatureNeverExpires?!1:Date.now()>this.created.getTime()+1e3*this.signatureExpirationTime},d.prototype.postCloneTypeFix=function(){this.issuerKeyId=k.fromClone(this.issuerKeyId)}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76,"./packet.js":59}],67:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedIntegrityProtected,this.encrypted=null,this.modification=!1,this.packets=null}b.exports=d;var e=(a("../util.js"),a("../crypto")),f=a("../enums.js");d.prototype.read=function(a){var b=a.charCodeAt(0);if(1!=b)throw new Error("Invalid packet version.");this.encrypted=a.substr(1)},d.prototype.write=function(){return String.fromCharCode(1)+this.encrypted},d.prototype.encrypt=function(a,b){var c=this.packets.write(),d=e.getPrefixRandom(a),f=d+d.charAt(d.length-2)+d.charAt(d.length-1),g=c;g+=String.fromCharCode(211),g+=String.fromCharCode(20),g+=e.hash.sha1(f+g),this.encrypted=e.cfb.encrypt(d,a,g,b,!1),f.length+g.length!=this.encrypted.length&&(this.encrypted=this.encrypted.substring(0,f.length+g.length))},d.prototype.decrypt=function(a,b){var c=e.cfb.decrypt(a,b,this.encrypted,!1),d=c.slice(c.length-20,c.length).join("");if(c.splice(c.length-20),this.hash=e.hash.sha1(e.cfb.mdc(a,b,this.encrypted)+c.join("")),this.hash!=d)throw new Error("Modification detected.");c.splice(c.length-2),this.packets.read(c.join(""))}},{"../crypto":32,"../enums.js":43,"../util.js":76}],68:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedSessionKey,this.version=4,this.sessionKeyEncryptionAlgorithm=null,this.sessionKeyAlgorithm="aes256",this.encrypted=null,this.s2k=new e}var e=a("../type/s2k.js"),f=a("../enums.js"),g=a("../crypto");b.exports=d,d.prototype.read=function(a){this.version=a.charCodeAt(0);var b=f.read(f.symmetric,a.charCodeAt(1)),c=this.s2k.read(a.substr(2)),d=c+2;d<a.length?(this.encrypted=a.substr(d),this.sessionKeyEncryptionAlgorithm=b):this.sessionKeyAlgorithm=b},d.prototype.write=function(){var a=null===this.encrypted?this.sessionKeyAlgorithm:this.sessionKeyEncryptionAlgorithm,b=String.fromCharCode(this.version)+String.fromCharCode(f.write(f.symmetric,a))+this.s2k.write();return null!==this.encrypted&&(b+=this.encrypted),b},d.prototype.decrypt=function(a){var b=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm,c=g.cipher[b].keySize,d=this.s2k.produce_key(a,c);if(null===this.encrypted)this.sessionKey=d;else{var e=g.cfb.decrypt(this.sessionKeyEncryptionAlgorithm,d,this.encrypted,!0);e=e.join(""),this.sessionKeyAlgorithm=f.read(f.symmetric,e[0].keyCodeAt()),this.sessionKey=e.substr(1)}},d.prototype.encrypt=function(a){var b=g.getKeyLength(this.sessionKeyEncryptionAlgorithm),c=this.s2k.produce_key(a,b),d=String.fromCharCode(f.write(f.symmetric,this.sessionKeyAlgorithm))+g.getRandomBytes(g.getKeyLength(this.sessionKeyAlgorithm));this.encrypted=g.cfb.encrypt(g.getPrefixRandom(this.sessionKeyEncryptionAlgorithm),this.sessionKeyEncryptionAlgorithm,c,d,!0)},d.prototype.postCloneTypeFix=function(){this.s2k=e.fromClone(this.s2k)}},{"../crypto":32,"../enums.js":43,"../type/s2k.js":75}],69:[function(a,b,c){function d(){this.tag=f.packet.symmetricallyEncrypted,this.encrypted=null,this.packets=null,this.ignore_mdc_error=g.ignore_mdc_error}b.exports=d;var e=a("../crypto"),f=a("../enums.js"),g=a("../config");d.prototype.read=function(a){this.encrypted=a},d.prototype.write=function(){return this.encrypted},d.prototype.decrypt=function(a,b){var c=e.cfb.decrypt(a,b,this.encrypted,!0);if(!this.ignore_mdc_error&&("aes128"===a||"aes192"===a||"aes256"===a))throw new Error("Decryption failed due to missing MDC in combination with modern cipher.");this.packets.read(c.join(""))},d.prototype.encrypt=function(a,b){var c=this.packets.write();this.encrypted=e.cfb.encrypt(e.getPrefixRandom(a),a,c,b,!0)}},{"../config":17,"../crypto":32,"../enums.js":43}],70:[function(a,b,c){function d(){this.tag=e.packet.trust}b.exports=d;var e=a("../enums.js");d.prototype.read=function(a){}},{"../enums.js":43}],71:[function(a,b,c){function d(){this.tag=f.packet.userAttribute,this.attributes=[]}var e=(a("../util.js"),a("./packet.js")),f=a("../enums.js");b.exports=d,d.prototype.read=function(a){for(var b=0;b<a.length;){var c=e.readSimpleLength(a.substr(b));b+=c.offset,this.attributes.push(a.substr(b,c.len)),b+=c.len}},d.prototype.write=function(){for(var a="",b=0;b<this.attributes.length;b++)a+=e.writeSimpleLength(this.attributes[b].length),a+=this.attributes[b];return a},d.prototype.equals=function(a){return a&&a instanceof d?this.attributes.every(function(b,c){return b===a.attributes[c]}):!1}},{"../enums.js":43,"../util.js":76,"./packet.js":59}],72:[function(a,b,c){function d(){this.tag=f.packet.userid,this.userid=""}b.exports=d;var e=a("../util.js"),f=a("../enums.js");d.prototype.read=function(a){this.userid=e.decode_utf8(a)},d.prototype.write=function(){return e.encode_utf8(this.userid)}},{"../enums.js":43,"../util.js":76}],73:[function(a,b,c){function d(){this.bytes=""}b.exports=d;var e=a("../util.js");d.prototype.read=function(a){this.bytes=a.substr(0,8)},d.prototype.write=function(){return this.bytes},d.prototype.toHex=function(){return e.hexstrdump(this.bytes)},d.prototype.equals=function(a){return this.bytes==a.bytes},d.prototype.isNull=function(){return""===this.bytes},b.exports.mapToHex=function(a){return a.toHex()},b.exports.fromClone=function(a){var b=new d;return b.bytes=a.bytes,b},b.exports.fromId=function(a){var b=new d;return b.read(e.hex2bin(a)),b}},{"../util.js":76}],74:[function(a,b,c){function d(){this.data=null}b.exports=d;var e=a("../crypto/public_key/jsbn.js"),f=a("../util.js");d.prototype.read=function(a){var b=a.charCodeAt(0)<<8|a.charCodeAt(1),c=Math.ceil(b/8),d=a.substr(2,c);return this.fromBytes(d),2+c},d.prototype.fromBytes=function(a){this.data=new e(f.hexstrdump(a),16)},d.prototype.toBytes=function(){return this.write().substr(2)},d.prototype.byteLength=function(){return this.toBytes().length},d.prototype.write=function(){return this.data.toMPI()},d.prototype.toBigInteger=function(){return this.data.clone()},d.prototype.fromBigInteger=function(a){this.data=a.clone()},b.exports.fromClone=function(a){a.data.copyTo=e.prototype.copyTo;var b=new e;a.data.copyTo(b);var c=new d;return c.data=b,c}},{"../crypto/public_key/jsbn.js":37,"../util.js":76}],75:[function(a,b,c){function d(){this.algorithm="sha256",this.type="iterated",this.c=96,this.salt=g.random.getRandomBytes(8)}b.exports=d;var e=a("../enums.js"),f=a("../util.js"),g=a("../crypto");d.prototype.get_count=function(){var a=6;return 16+(15&this.c)<<(this.c>>4)+a},d.prototype.read=function(a){var b=0;switch(this.type=e.read(e.s2k,a.charCodeAt(b++)),this.algorithm=e.read(e.hash,a.charCodeAt(b++)),this.type){case"simple":break;case"salted":this.salt=a.substr(b,8),b+=8;break;case"iterated":this.salt=a.substr(b,8),b+=8,this.c=a.charCodeAt(b++);break;case"gnu":if("GNU"!=a.substr(b,3))throw new Error("Unknown s2k type.");b+=3;var c=1e3+a.charCodeAt(b++);if(1001!=c)throw new Error("Unknown s2k gnu protection mode.");this.type=c;break;default:throw new Error("Unknown s2k type.")}return b},d.prototype.write=function(){var a=String.fromCharCode(e.write(e.s2k,this.type));switch(a+=String.fromCharCode(e.write(e.hash,this.algorithm)),this.type){case"simple":break;case"salted":a+=this.salt;break;case"iterated":a+=this.salt,a+=String.fromCharCode(this.c);break;case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}return a},d.prototype.produce_key=function(a,b){function c(b,c){var d=e.write(e.hash,c.algorithm);switch(c.type){case"simple":return g.hash.digest(d,b+a);case"salted":return g.hash.digest(d,b+c.salt+a);case"iterated":for(var f=[],h=c.get_count(),i=c.salt+a;f.length*i.length<h;)f.push(i);return f=f.join(""),f.length>h&&(f=f.substr(0,h)),g.hash.digest(d,b+f);case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}}a=f.encode_utf8(a);for(var d="",h="";d.length<=b;)d+=c(h,this),h+=String.fromCharCode(0);return d.substr(0,b)},b.exports.fromClone=function(a){var b=new d;return this.algorithm=a.algorithm,this.type=a.type,this.c=a.c,this.salt=a.salt,b}},{"../crypto":32,"../enums.js":43,"../util.js":76}],76:[function(a,b,c){"use strict";var d=a("./config");b.exports={readNumber:function(a){for(var b=0,c=0;c<a.length;c++)b<<=8,b+=a.charCodeAt(c);return b},writeNumber:function(a,b){for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a>>8*(b-d-1)&255);return c},readDate:function(a){var b=this.readNumber(a),c=new Date;return c.setTime(1e3*b),c},writeDate:function(a){var b=Math.round(a.getTime()/1e3);return this.writeNumber(b,4)},emailRegEx:/^[+a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,6}$/,hexdump:function(a){for(var b,c=[],d=a.length,e=0,f=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(" "+b),f++,f%32===0&&c.push("\n           ")}return c.join("")},hexstrdump:function(a){if(null===a)return"";for(var b,c=[],d=a.length,e=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},hex2bin:function(a){for(var b="",c=0;c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},hexidump:function(a){for(var b,c=[],d=a.length,e=0;d>e;){for(b=a[e++].toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},encode_utf8:function(a){return unescape(encodeURIComponent(a))},decode_utf8:function(a){if("string"!=typeof a)throw new Error('Parameter "utf8" is not of type string');try{return decodeURIComponent(escape(a))}catch(b){return a}},bin2str:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")},str2bin:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b},str2Uint8Array:function(a){for(var b=new Uint8Array(a.length),c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b},Uint8Array2str:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")},calc_checksum:function(a){for(var b={s:0,add:function(a){this.s=(this.s+a)%65536}},c=0;c<a.length;c++)b.add(a.charCodeAt(c));return b.s},print_debug:function(a){d.debug&&console.log(a)},print_debug_hexstr_dump:function(a,b){d.debug&&(a+=this.hexstrdump(b),console.log(a))},getLeftNBits:function(a,b){var c=b%8;if(0===c)return a.substring(0,b/8);var d=(b-c)/8+1,e=a.substring(0,d);return this.shiftRight(e,8-c)},shiftRight:function(a,b){var c=util.str2bin(a);if(b%8===0)return a;for(var d=c.length-1;d>=0;d--)c[d]>>=b%8,d>0&&(c[d]|=c[d-1]<<8-b%8&255);return util.bin2str(c)},get_hashAlgorithmString:function(a){switch(a){case 1:return"MD5";case 2:return"SHA1";case 3:return"RIPEMD160";case 8:return"SHA256";case 9:return"SHA384";case 10:return"SHA512";case 11:return"SHA224"}return"unknown"},getWebCrypto:function(){if(d.useWebCrypto!==!1&&"undefined"!=typeof window){if(window.crypto)return window.crypto.subtle||window.crypto.webkitSubtle;if(window.msCrypto)return window.msCrypto.subtle}}}},{"./config":17}],77:[function(a,b,c){"use strict";function d(a,b){b&&b.worker?this.worker=b.worker:this.worker=new Worker(a||"openpgp.worker.js"),this.worker.onmessage=this.onMessage.bind(this),this.worker.onerror=function(a){throw new Error("Unhandled error in openpgp worker: "+a.message+" ("+a.filename+":"+a.lineno+")")},this.seedRandom(i),this.tasks=[],b&&b.config&&this.worker.postMessage({event:"configure",config:b.config})}var e=a("../crypto"),f=a("../packet"),g=a("../key.js"),h=a("../type/keyid.js"),i=5e4,j=2e4;d.prototype.execute=function(a){var b=this,c=new Promise(function(c,d){a(),b.tasks.push({resolve:c,reject:d})});return c},d.prototype.onMessage=function(a){var b=a.data;switch(b.event){case"method-return":b.err?this.tasks.shift().reject(new Error(b.err)):this.tasks.shift().resolve(b.data);break;case"request-seed":this.seedRandom(j);break;default:throw new Error("Unknown Worker Event.")}},d.prototype.seedRandom=function(a){var b=this.getRandomBuffer(a);this.worker.postMessage({event:"seed-random",buf:b})},d.prototype.getRandomBuffer=function(a){if(!a)return null;var b=new Uint8Array(a);return e.random.getRandomValues(b),b},d.prototype.terminate=function(){this.worker.terminate()},d.prototype.encryptMessage=function(a,b,c,d){var e=this;return e.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"encrypt-message",keys:a,text:b,format:c,filename:d})})},d.prototype.signAndEncryptMessage=function(a,b,c,d,e){var f=this;return f.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),b=b.toPacketlist(),f.worker.postMessage({event:"sign-and-encrypt-message",publicKeys:a,privateKey:b,text:c,format:d,filename:e})})},d.prototype.decryptMessage=function(a,b,c){var d=this;return d.execute(function(){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-message",privateKey:a,message:b,format:c})})},d.prototype.decryptAndVerifyMessage=function(a,b,c,d){var e=this,f=new Promise(function(f,g){a=a.toPacketlist(),b.length||(b=[b]),b=b.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"decrypt-and-verify-message",privateKey:a,publicKeys:b,message:c,format:d}),e.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),f(a)},reject:g})});return f},d.prototype.signClearMessage=function(a,b){var c=this;return c.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"sign-clear-message",privateKeys:a,text:b})})},d.prototype.verifyClearSignedMessage=function(a,b){var c=this,d=new Promise(function(d,e){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"verify-clear-signed-message",publicKeys:a,message:b}),c.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),d(a)},reject:e})});return d},d.prototype.generateKeyPair=function(a){var b=this,c=new Promise(function(c,d){b.worker.postMessage({event:"generate-key-pair",options:a}),b.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a.key);a.key=new g.Key(b),c(a)},reject:d})});return c},d.prototype.decryptKey=function(a,b){var c=this,d=new Promise(function(d,e){a=a.toPacketlist(),c.worker.postMessage({event:"decrypt-key",privateKey:a,password:b}),c.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);d(a)},reject:e})});return d},d.prototype.decryptKeyPacket=function(a,b,c){var d=this,e=new Promise(function(e,h){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-key-packet",privateKey:a,keyIds:b,password:c}),d.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);e(a)},reject:h})});return e},b.exports=d},{"../crypto":32,"../key.js":47,"../packet":55,"../type/keyid.js":73}]},{},[46])(46)});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/enigma.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,226 @@
+/*** Style for Enigma plugin ***/
+
+/***** Messages displaying *****/
+
+#enigma-message,
+/* fixes border-top */
+#messagebody div #enigma-message
+{
+  margin: 0;
+  margin-bottom: 5px;
+  min-height: 20px;
+  padding: 10px 10px 6px 46px;
+}
+
+div.enigmaerror,
+/* fixes border-top */
+#messagebody div.enigmaerror
+{
+  background: url(enigma_error.png) 6px 1px no-repeat;
+  background-color: #EF9398;
+  border: 1px solid #DC5757;
+}
+
+div.enigmanotice,
+/* fixes border-top */
+#messagebody div.enigmanotice
+{
+  background: url(enigma.png) 6px 1px no-repeat;
+  background-color: #A6EF7B;
+  border: 1px solid #76C83F;
+}
+
+div.enigmawarning,
+/* fixes border-top */
+#messagebody div.enigmawarning
+{
+  background: url(enigma.png) 6px 1px no-repeat;
+  background-color: #F7FDCB;
+  border: 1px solid #C2D071;
+}
+
+#enigma-message a
+{
+  color: #666666;
+  padding-left: 10px;
+}
+
+#enigma-message a:hover
+{
+  color: #333333;
+}
+
+p.enigmaattachment
+{
+  margin: 0.5em 1em;
+  border: 1px solid #999;
+  border-radius: 4px;
+  width: auto;
+}
+
+p.enigmaattachment a
+{
+  display: block;
+  background: url(key_add.png) 10px center no-repeat;
+  padding: 1em 0.5em 1em 50px;
+}
+
+
+/***** E-mail Compose Page *****/
+
+#messagetoolbar a.button.enigma {
+  text-indent: -5000px;
+  background: url(enigma.png) 0 0 no-repeat;
+}
+
+/***** Keys/Certs Management *****/
+
+#mainscreen.enigma
+{
+  top: 80px;
+}
+
+div.enigmascreen
+{
+  position: absolute;
+  top: 40px;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.enigma #quicksearchbar
+{
+  top: 10px;
+  right: 0;
+}
+
+#enigmacontent-box
+{
+  position: absolute;
+  top: 0px;
+  left: 290px;
+  right: 0px;
+  bottom: 0px;
+  border: 1px solid #999999;
+  overflow: hidden;
+}
+
+#enigmakeyslist
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#keylistcountbar
+{
+  margin-top: 4px;
+  margin-left: 4px;
+}
+
+#keys-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#keys-table td
+{
+  cursor: default;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#key-details table td.title
+{
+  font-weight: bold;
+  text-align: right;
+}
+
+#key-details table {
+  width: 100%;
+}
+
+#key-details table td,
+#key-details table th {
+  border: 0;
+}
+
+#keyimportform fieldset div {
+  color: #666;
+  padding: 5px 0px;
+}
+
+#keycreateform td > label {
+  display: block;
+}
+
+#keystoolbar
+{
+  position: absolute;
+  top: 0;
+  left: 10px;
+  height: 35px;
+}
+
+#keystoolbar a
+{
+  padding-right: 10px;
+}
+
+#keystoolbar a.button,
+#keystoolbar a.buttonPas,
+#keystoolbar span.separator {
+  display: block;
+  float: left;
+  width: 32px;
+  height: 32px;
+  padding: 0;
+  margin: 0 5px;
+  overflow: hidden;
+  background: url(keys_toolbar.png) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#keystoolbar a.buttonPas {
+  opacity: 0.35;
+}
+
+#keystoolbar a.createSel {
+  background-position: 0 -32px;
+}
+
+#keystoolbar a.create {
+  background-position: 0 0;
+}
+
+#keystoolbar a.importSel {
+  background-position: -64px -32px;
+}
+
+#keystoolbar a.import {
+  background-position: -64px 0;
+}
+
+#keystoolbar a.exportSel {
+  background-position: -96px -32px;
+}
+
+#keystoolbar a.export {
+  background-position: -96px 0;
+}
+
+#keystoolbar a.keymenu {
+  background-position: -128px 0;
+  width: 36px;
+}
+
+#keystoolbar span.separator {
+  width: 5px;
+  background-position: -166px 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/enigma.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#enigma-message,#messagebody div #enigma-message{margin:0;margin-bottom:5px;min-height:20px;padding:10px 10px 6px 46px}div.enigmaerror,#messagebody div.enigmaerror{background:url(enigma_error.png) 6px 1px no-repeat;background-color:#ef9398;border:1px solid #dc5757}div.enigmanotice,#messagebody div.enigmanotice{background:url(enigma.png) 6px 1px no-repeat;background-color:#a6ef7b;border:1px solid #76c83f}div.enigmawarning,#messagebody div.enigmawarning{background:url(enigma.png) 6px 1px no-repeat;background-color:#f7fdcb;border:1px solid #c2d071}#enigma-message a{color:#666;padding-left:10px}#enigma-message a:hover{color:#333}p.enigmaattachment{margin:.5em 1em;border:1px solid #999;border-radius:4px;width:auto}p.enigmaattachment a{display:block;background:url(key_add.png) 10px center no-repeat;padding:1em .5em 1em 50px}#messagetoolbar a.button.enigma{text-indent:-5000px;background:url(enigma.png) 0 0 no-repeat}#mainscreen.enigma{top:80px}div.enigmascreen{position:absolute;top:40px;right:0;bottom:0;left:0}.enigma #quicksearchbar{top:10px;right:0}#enigmacontent-box{position:absolute;top:0;left:290px;right:0;bottom:0;border:1px solid #999;overflow:hidden}#enigmakeyslist{position:absolute;top:0;bottom:0;left:0;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#keylistcountbar{margin-top:4px;margin-left:4px}#keys-table{width:100%;table-layout:fixed}#keys-table td{cursor:default;text-overflow:ellipsis;-o-text-overflow:ellipsis}#key-details table td.title{font-weight:bold;text-align:right}#key-details table{width:100%}#key-details table td,#key-details table th{border:0}#keyimportform fieldset div{color:#666;padding:5px 0}#keycreateform td>label{display:block}#keystoolbar{position:absolute;top:0;left:10px;height:35px}#keystoolbar a{padding-right:10px}#keystoolbar a.button,#keystoolbar a.buttonPas,#keystoolbar span.separator{display:block;float:left;width:32px;height:32px;padding:0;margin:0 5px;overflow:hidden;background:url(keys_toolbar.png) 0 0 no-repeat transparent;opacity:.99}#keystoolbar a.buttonPas{opacity:.35}#keystoolbar a.createSel{background-position:0 -32px}#keystoolbar a.create{background-position:0 0}#keystoolbar a.importSel{background-position:-64px -32px}#keystoolbar a.import{background-position:-64px 0}#keystoolbar a.exportSel{background-position:-96px -32px}#keystoolbar a.export{background-position:-96px 0}#keystoolbar a.keymenu{background-position:-128px 0;width:36px}#keystoolbar span.separator{width:5px;background-position:-166px 0}
\ No newline at end of file
Binary file plugins/enigma/skins/classic/enigma.png has changed
Binary file plugins/enigma/skins/classic/enigma_error.png has changed
Binary file plugins/enigma/skins/classic/key.png has changed
Binary file plugins/enigma/skins/classic/key_add.png has changed
Binary file plugins/enigma/skins/classic/keys_toolbar.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/templates/keycreate.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<div id="keyimport-title" class="boxtitle"><roundcube:label name="enigma.createkeys" /></div>
+
+<div id="import-form" class="boxcontent">
+    <roundcube:object name="keyform" id="keycreateform" class="propform" size="40" textareacols="40" textarearows="6" />
+
+    <div id="formfooter">
+        <div class="footerleft">
+            <roundcube:button command="plugin.enigma-key-save" type="input" class="button mainaction" label="save" />
+        </div>
+    </div>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/templates/keyimport.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<div id="keyimport-title" class="boxtitle"><roundcube:label name="enigma.importkeys" /></div>
+
+<div id="import-form" class="boxcontent">
+    <roundcube:object name="importform" id="keyimportform" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/templates/keyinfo.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<div id="keyinfo-title" class="boxtitle"><roundcube:object name="keyname" part="name" /></div>
+
+<div id="key-details" class="boxcontent">
+    <roundcube:object name="keydata" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/classic/templates/keys.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#enigmakeyslist { width: <roundcube:exp expression="!empty(cookie:enigmaviewsplitter) ? cookie:enigmaviewsplitter-5 : 210" />px; }
+#enigmacontent-box { left: <roundcube:exp expression="!empty(cookie:enigmaviewsplitter) ? cookie:enigmaviewsplitter+5 : 220" />px; }
+</style>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen" class="enigma">
+
+<div id="keystoolbar">
+    <roundcube:button command="plugin.enigma-key-create" type="link" class="buttonPas create" classAct="button create" classSel="button createSel" title="enigma.createkeys" content=" " />
+    <roundcube:button command="plugin.enigma-key-import" type="link" class="buttonPas import" classAct="button import" classSel="button importSel" title="enigma.importkeys" content=" " />
+    <span class="dropbutton">
+    <roundcube:button command="plugin.enigma-key-export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="enigma.exportkeys" content=" " />
+    <span id="exportmenulink" onclick="rcmail_ui.show_popup('exportmenu');return false"></span>
+    </span>
+    <roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button keymenu" title="enigma.keyactions" onclick="rcmail_ui.show_popup('messagemenu');return false" content=" " />
+</div>
+
+<div id="quicksearchbar">
+    <roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
+    <roundcube:object name="searchform" id="quicksearchbox" />
+    <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
+</div>
+
+
+<div class="enigmascreen">
+
+<div id="enigmakeyslist">
+<div class="boxtitle"><roundcube:label name="enigma.keyname" /></div>
+<div class="boxlistcontent">
+    <roundcube:object name="keyslist" id="keys-table" class="records-table" cellspacing="0" noheader="true" />
+</div>
+<div class="boxfooter">
+<div id="keylistcountbar" class="pagenav">
+    <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " />
+    <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " />
+    <roundcube:object name="countdisplay" style="padding:0 .5em; float:left" />
+    <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " />
+    <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " />
+</div>
+</div>
+</div>
+
+<script type="text/javascript">
+    var enigmaviewsplit = new rcube_splitter({id:'enigmaviewsplitter', p1: 'enigmakeyslist', p2: 'enigmacontent-box', orientation: 'v', relative: true, start: 215});
+    rcmail.add_onload('enigmaviewsplit.init()');
+</script>
+
+<div id="enigmacontent-box">
+    <roundcube:object name="keyframe" id="keyframe" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+</div>
+
+<div id="messagemenu" class="popupmenu">
+    <ul>
+        <li><roundcube:button class="deletelink" command="plugin.enigma-key-delete" label="enigma.keyremove" classAct="deletelink active" /></li>
+<!--
+        <li><roundcube:button class="disablelink" command="plugin.enigma-key-disable" label="enigma.keydisable" classAct="disablelink active" /></li>
+        <li><roundcube:button class="revokelink" command="plugin.enigma-key-revoke" label="enigma.keyrevoke" classAct="revokelink active" /></li>
+        <li class="separator_below"><roundcube:button class="sendlink" command="plugin.enigma-key-send" label="enigma.keysend" classAct="sendlink active" /></li>
+        <li><roundcube:button class="chpasslink" command="plugin.enigma-key-chpass" label="enigma.keychpass" classAct="chpasslink active" /></li>
+-->
+    </ul>
+</div>
+
+<div id="exportmenu" class="popupmenu">
+    <ul>
+        <li><roundcube:button command="plugin.enigma-key-export" label="exportall" prop="sub" classAct="exportalllink active" class="exportalllink" /></li>
+        <li><roundcube:button command="plugin.enigma-key-export-selected" label="exportsel" prop="sub" classAct="exportsellink active" class="exportsellink" /></li>
+    </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/enigma.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,175 @@
+/*** Style for Enigma plugin ***/
+
+/***** Messages displaying *****/
+
+#enigma-message,
+#messagebody div #enigma-message
+{
+  margin: 0;
+  margin-bottom: 5px;
+  padding: 6px 12px 6px 30px;
+  font-weight: bold;
+}
+
+div.enigmaerror,
+#messagebody div.enigmaerror
+{
+  background: url(enigma_icons.png) 3px -201px no-repeat #f2cccd;
+  border: 1px solid #c00005;
+  color: #c00005;
+}
+
+div.enigmanotice,
+#messagebody div.enigmanotice
+{
+  background: url(enigma_icons.png) 3px -171px no-repeat #c9e6d3;
+  border: 1px solid #008a2e;
+  color: #008a2e;
+}
+
+div.enigmawarning,
+#messagebody div.enigmawarning
+{
+  background: url(enigma_icons.png) 3px -231px no-repeat #fef893;
+  border: 1px solid #ffdf0e;
+  color: #960;
+}
+
+#enigma-message a
+{
+  color: #666666;
+  padding-left: 10px;
+}
+
+#enigma-message a:hover
+{
+  color: #333333;
+}
+
+p.enigmaattachment {
+  margin: 0.5em 1em;
+  width: auto;
+  background: #f9f9f9;
+  border: 1px solid #d3d3d3;
+  border-radius: 4px;
+}
+
+p.enigmaattachment a {
+  display: block;
+  background: url(enigma_icons.png) 8px -78px no-repeat;
+  padding: 1em 0.5em 1em 46px;
+}
+
+/***** E-mail Compose Page *****/
+
+#messagetoolbar a.button.enigma {
+  background-image: url(enigma_icons.png);
+  background-position: center -122px;
+  background-repeat: no-repeat;
+}
+
+#enigmamenu {
+  color: white;
+  padding: 2px 5px;
+}
+
+
+/***** Keys/Certs Management *****/
+
+#settings-sections .enigma.keys a {
+  background-image: url(enigma_icons.png);
+  background-position: 7px -345px;
+  background-repeat: no-repeat;
+}
+
+#settings-sections .enigma.keys.selected a {
+  background-image: url(enigma_icons.png);
+  background-position: 7px -368px;
+  background-repeat: no-repeat;
+}
+
+#sections-table #rcmrowenigma .section {
+  background-image: url(enigma_icons.png);
+  background-position: 5px -297px;
+  background-repeat: no-repeat;
+}
+
+#sections-table #rcmrowenigma.selected .section {
+  background-image: url(enigma_icons.png);
+  background-position: 5px -321px;
+  background-repeat: no-repeat;
+}
+
+#mainscreen.enigma #settings-sections,
+#mainscreen.enigma #settings-right
+{
+  top: 44px;
+}
+
+#enigmacontent-box
+{
+  position: absolute;
+  top: 0px;
+  left: 272px;
+  right: 0px;
+  bottom: 0px;
+}
+
+#enigmakeyslist
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 260px;
+}
+
+#keylistcountbar
+{
+  margin-top: 4px;
+  margin-left: 4px;
+}
+
+#keys-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#keys-table td
+{
+  text-overflow: ellipsis;
+}
+
+#keyimportform fieldset div
+{
+  background-color: #eee;
+  padding: 10px;
+}
+
+#keycreateform td > label {
+  display: block;
+}
+
+#keystoolbar
+{
+  position: absolute;
+  top: -6px;
+  left: 0;
+  height: 40px;
+  white-space: nowrap;
+  z-index: 10;
+}
+
+#keystoolbar a.button
+{
+  background: url(enigma_icons.png) 0 0 no-repeat transparent;
+}
+
+#keystoolbar a.import {
+  background-position: center 0;
+}
+
+#keystoolbar a.export {
+  background-position: center -40px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/enigma.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#enigma-message,#messagebody div #enigma-message{margin:0;margin-bottom:5px;padding:6px 12px 6px 30px;font-weight:bold}div.enigmaerror,#messagebody div.enigmaerror{background:url(enigma_icons.png) 3px -201px no-repeat #f2cccd;border:1px solid #c00005;color:#c00005}div.enigmanotice,#messagebody div.enigmanotice{background:url(enigma_icons.png) 3px -171px no-repeat #c9e6d3;border:1px solid #008a2e;color:#008a2e}div.enigmawarning,#messagebody div.enigmawarning{background:url(enigma_icons.png) 3px -231px no-repeat #fef893;border:1px solid #ffdf0e;color:#960}#enigma-message a{color:#666;padding-left:10px}#enigma-message a:hover{color:#333}p.enigmaattachment{margin:.5em 1em;width:auto;background:#f9f9f9;border:1px solid #d3d3d3;border-radius:4px}p.enigmaattachment a{display:block;background:url(enigma_icons.png) 8px -78px no-repeat;padding:1em .5em 1em 46px}#messagetoolbar a.button.enigma{background-image:url(enigma_icons.png);background-position:center -122px;background-repeat:no-repeat}#enigmamenu{color:white;padding:2px 5px}#settings-sections .enigma.keys a{background-image:url(enigma_icons.png);background-position:7px -345px;background-repeat:no-repeat}#settings-sections .enigma.keys.selected a{background-image:url(enigma_icons.png);background-position:7px -368px;background-repeat:no-repeat}#sections-table #rcmrowenigma .section{background-image:url(enigma_icons.png);background-position:5px -297px;background-repeat:no-repeat}#sections-table #rcmrowenigma.selected .section{background-image:url(enigma_icons.png);background-position:5px -321px;background-repeat:no-repeat}#mainscreen.enigma #settings-sections,#mainscreen.enigma #settings-right{top:44px}#enigmacontent-box{position:absolute;top:0;left:272px;right:0;bottom:0}#enigmakeyslist{position:absolute;top:0;bottom:0;left:0;width:260px}#keylistcountbar{margin-top:4px;margin-left:4px}#keys-table{width:100%;table-layout:fixed}#keys-table td{text-overflow:ellipsis}#keyimportform fieldset div{background-color:#eee;padding:10px}#keycreateform td>label{display:block}#keystoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap;z-index:10}#keystoolbar a.button{background:url(enigma_icons.png) 0 0 no-repeat transparent}#keystoolbar a.import{background-position:center 0}#keystoolbar a.export{background-position:center -40px}
\ No newline at end of file
Binary file plugins/enigma/skins/larry/enigma_icons.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/templates/keycreate.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:label name="enigma.createkeys" /></h1>
+
+<div id="key-details" class="boxcontent">
+    <roundcube:object name="keyform" id="keycreateform" class="propform" size="40" textareacols="40" textarearows="6" />
+</div>
+
+<div class="footerleft formbuttons">
+    <roundcube:button command="plugin.enigma-key-save" type="input" class="button mainaction" label="save" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/templates/keyimport.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:label name="enigma.importkeys" /></h1>
+
+<div id="import-form" class="boxcontent">
+    <roundcube:object name="importform" class="propform" id="keyimportform" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/templates/keyinfo.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:object name="keyname" part="name" /></h1>
+
+<div id="key-details" class="boxcontent propform">
+    <roundcube:object name="keydata" class="propform" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/enigma/skins/larry/templates/keys.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,91 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="enigma">
+    <h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="enigma.enigmakeys" /></h1>
+
+    <!-- toolbar -->
+    <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+    <div id="keystoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
+        <roundcube:button command="plugin.enigma-key-import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="enigma.importkeys" />
+        <span class="dropbutton">
+            <roundcube:button command="plugin.enigma-key-export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="enigma.exportkeys" />
+            <a href="#export" class="dropbuttontip" id="exportmenulink" onclick="return UI.toggle_popup('exportmenu',event)" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0"><roundcube:label name="enigma.arialabelkeyexportoptions" /></a>
+        </span>
+    </div>
+
+    <div id="exportmenu" class="popupmenu" aria-hidden="true">
+        <h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="enigma.arialabelkeyexportoptions" /></h3>
+        <ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu">
+            <roundcube:button type="link-menuitem" command="plugin.enigma-key-export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" />
+            <roundcube:button type="link-menuitem" command="plugin.enigma-key-export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" />
+        </ul>
+    </div>
+
+    <div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
+        <h2 id="aria-label-searchform" class="voice"><roundcube:label name="enigma.arialabelkeysearchform" /></h2>
+        <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelmailquicksearchbox" /></label>
+        <roundcube:object name="searchform" id="quicksearchbox" />
+        <a id="searchmenulink" class="iconbutton searchicon" > </a>
+        <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
+    </div>
+
+    <roundcube:include file="/includes/settingstabs.html" />
+
+    <div id="settings-right" role="main" aria-labelledby="aria-label-enigmakeyslist">
+        <div id="enigmakeyslist" class="uibox listbox" role="navigation" aria-labelledby="enigmakeyslist-header">
+            <div id="enigmakeyslist-header" class="boxtitle"><roundcube:label name="enigma.enigmakeys" /></div>
+            <div class="scroller withfooter">
+                <roundcube:object name="keyslist" id="keys-table" class="listing" role="listbox" cellspacing="0" noheader="true" />
+            </div>
+            <div class="boxpagenav">
+                <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
+                <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
+                <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
+                <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
+            </div>
+            <div class="boxfooter">
+                <roundcube:button command="plugin.enigma-key-create" type="link" title="enigma.createkeys" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="enigma.keyadd" /><roundcube:button name="moreactions" id="keyoptionslink" type="link" title="enigma.keyactions" class="listbutton groupactions" onclick="return UI.toggle_popup('keyoptions',event)" innerClass="inner" label="enigma.arialabelkeyoptions" aria-haspopup="true" aria-expanded="false" aria-owns="keyoptionsmenu" />
+                <span class="countdisplay" aria-live="polite" aria-relevant="text">
+                <span class="voice"><roundcube:label name="enigma.enigmakeys" /></span>
+                    <roundcube:object name="countdisplay" />
+                </span>
+            </div>
+        </div>
+
+        <div id="enigmacontent-box" class="uibox">
+            <div class="iframebox">
+                <roundcube:object name="keyframe" id="keyframe" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+            </div>
+        </div>
+    </div>
+</div>
+
+<div id="keyoptions" class="popupmenu">
+    <ul class="toolbarmenu">
+        <li><roundcube:button class="deletelink" command="plugin.enigma-key-delete" label="enigma.keyremove" target="_blank" classAct="deletelink active" /></li>
+<!--
+        <li><roundcube:button class="disablelink" command="enigma.key-disable" label="enigma.keydisable" target="_blank" classAct="disablelink active" /></li>
+        <li><roundcube:button class="revokelink" command="enigma.key-revoke" label="enigma.keyrevoke" classAct="revokelink active" /></li>
+        <li class="separator_below"><roundcube:button class="sendlink" command="enigma.key-send" label="enigma.keysend" classAct="sendlink active" /></li>
+        <li><roundcube:button class="chpasslink" command="enigma.key-chpass" label="enigma.keychpass" classAct="chpasslink active" /></li>
+-->
+    </ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+<script type="text/javascript">
+    new rcube_splitter({ id:'enigmakeyssplitter', p1:'#enigmakeyslist', p2:'#enigmacontent-box',
+            orientation:'v', relative:true, start:266, min:180, size:12 }).init();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/example_addressbook/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/example_addressbook",
+    "type": "roundcube-plugin",
+    "description": "Sample plugin to add a new address book with just a static list of contacts",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/example_addressbook/example_addressbook.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,53 @@
+<?php
+
+require_once(__DIR__ . '/example_addressbook_backend.php');
+
+/**
+ * Sample plugin to add a new address book
+ * with just a static list of contacts
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ */
+class example_addressbook extends rcube_plugin
+{
+  private $abook_id = 'static';
+  private $abook_name = 'Static List';
+
+  public function init()
+  {
+    $this->add_hook('addressbooks_list', array($this, 'address_sources'));
+    $this->add_hook('addressbook_get', array($this, 'get_address_book'));
+
+    // use this address book for autocompletion queries
+    // (maybe this should be configurable by the user?)
+    $config = rcmail::get_instance()->config;
+    $sources = (array) $config->get('autocomplete_addressbooks', array('sql'));
+    if (!in_array($this->abook_id, $sources)) {
+      $sources[] = $this->abook_id;
+      $config->set('autocomplete_addressbooks', $sources);
+    }
+  }
+
+  public function address_sources($p)
+  {
+    $abook = new example_addressbook_backend($this->abook_name);
+    $p['sources'][$this->abook_id] = array(
+      'id' => $this->abook_id,
+      'name' => $this->abook_name,
+      'readonly' => $abook->readonly,
+      'groups' => $abook->groups,
+    );
+    return $p;
+  }
+
+  public function get_address_book($p)
+  {
+    if ($p['id'] === $this->abook_id) {
+      $p['instance'] = new example_addressbook_backend($this->abook_name);
+    }
+
+    return $p;
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/example_addressbook/example_addressbook_backend.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * Example backend class for a custom address book
+ *
+ * This one just holds a static list of address records
+ *
+ * @author Thomas Bruederli
+ */
+class example_addressbook_backend extends rcube_addressbook
+{
+  public $primary_key = 'ID';
+  public $readonly = true;
+  public $groups = true;
+
+  private $filter;
+  private $result;
+  private $name;
+
+  public function __construct($name)
+  {
+    $this->ready = true;
+    $this->name = $name;
+  }
+
+  public function get_name()
+  {
+    return $this->name;
+  }
+
+  public function set_search_set($filter)
+  {
+    $this->filter = $filter;
+  }
+
+  public function get_search_set()
+  {
+    return $this->filter;
+  }
+
+  public function reset()
+  {
+    $this->result = null;
+    $this->filter = null;
+  }
+
+  function list_groups($search = null, $mode = 0)
+  {
+    return array(
+      array('ID' => 'testgroup1', 'name' => "Testgroup"),
+      array('ID' => 'testgroup2', 'name' => "Sample Group"),
+    );
+  }
+
+  public function list_records($cols=null, $subset=0)
+  {
+    $this->result = $this->count();
+    $this->result->add(array('ID' => '111', 'name' => "Example Contact", 'firstname' => "Example", 'surname' => "Contact", 'email' => "example@roundcube.net"));
+
+    return $this->result;
+  }
+
+  public function search($fields, $value, $strict=false, $select=true, $nocount=false, $required=array())
+  {
+    // no search implemented, just list all records
+    return $this->list_records();
+  }
+
+  public function count()
+  {
+    return new rcube_result_set(1, ($this->list_page-1) * $this->page_size);
+  }
+
+  public function get_result()
+  {
+    return $this->result;
+  }
+
+  public function get_record($id, $assoc=false)
+  {
+    $this->list_records();
+    $first = $this->result->first();
+    $sql_arr = $first['ID'] == $id ? $first : null;
+
+    return $assoc && $sql_arr ? $sql_arr : $this->result;
+  }
+
+
+  function create_group($name)
+  {
+    $result = false;
+
+    return $result;
+  }
+
+  function delete_group($gid)
+  {
+    return false;
+  }
+
+  function rename_group($gid, $newname, &$newid)
+  {
+    return $newname;
+  }
+
+  function add_to_group($group_id, $ids)
+  {
+    return false;
+  }
+
+  function remove_from_group($group_id, $ids)
+  {
+     return false;
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filesystem_attachments/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/filesystem_attachments",
+    "type": "roundcube-plugin",
+    "description": "This is a core plugin which provides basic, filesystem based attachment temporary file handling. This includes storing attachments of messages currently being composed, writing attachments to disk when drafts with attachments are re-opened and writing attachments to disk for inline display in current html compositions.",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Ziba Scott",
+            "email": "ziba@umich.edu",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filesystem_attachments/filesystem_attachments.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,226 @@
+<?php
+/**
+ * Filesystem Attachments
+ *
+ * This is a core plugin which provides basic, filesystem based
+ * attachment temporary file handling.  This includes storing
+ * attachments of messages currently being composed, writing attachments
+ * to disk when drafts with attachments are re-opened and writing
+ * attachments to disk for inline display in current html compositions.
+ * It also handles uploaded files for other uses, so not only attachments.
+ *
+ * Developers may wish to extend this class when creating attachment
+ * handler plugins:
+ *   require_once('plugins/filesystem_attachments/filesystem_attachments.php');
+ *   class myCustom_attachments extends filesystem_attachments
+ *
+ * Note for developers: It is plugin's responsibility to care about security.
+ * So, e.g. if the plugin is asked about some file path it should check
+ * if it's really the storage path of the plugin and not e.g. /etc/passwd.
+ * It is done by setting 'status' flag on every plugin hook it uses.
+ * Roundcube core will trust the returned path if status=true.
+ *
+ * @license GNU GPLv3+
+ * @author Ziba Scott <ziba@umich.edu>
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ */
+class filesystem_attachments extends rcube_plugin
+{
+    public $task = '?(?!login).*';
+
+    function init()
+    {
+        // Save a newly uploaded attachment
+        $this->add_hook('attachment_upload', array($this, 'upload'));
+
+        // Save an attachment from a non-upload source (draft or forward)
+        $this->add_hook('attachment_save', array($this, 'save'));
+
+        // Remove an attachment from storage
+        $this->add_hook('attachment_delete', array($this, 'remove'));
+
+        // When composing an html message, image attachments may be shown
+        $this->add_hook('attachment_display', array($this, 'display'));
+
+        // Get the attachment from storage and place it on disk to be sent
+        $this->add_hook('attachment_get', array($this, 'get'));
+
+        // Delete all temp files associated with this user
+        $this->add_hook('attachments_cleanup', array($this, 'cleanup'));
+        $this->add_hook('session_destroy', array($this, 'cleanup'));
+    }
+
+    /**
+     * Save a newly uploaded attachment
+     */
+    function upload($args)
+    {
+        $args['status'] = false;
+        $group  = $args['group'];
+        $rcmail = rcube::get_instance();
+
+        // use common temp dir for file uploads
+        $temp_dir = $rcmail->config->get('temp_dir');
+        $tmpfname = tempnam($temp_dir, 'rcmAttmnt');
+
+        if (move_uploaded_file($args['path'], $tmpfname) && file_exists($tmpfname)) {
+            $args['id']     = $this->file_id();
+            $args['path']   = $tmpfname;
+            $args['status'] = true;
+            @chmod($tmpfname, 0600);  // set correct permissions (#1488996)
+
+            // Note the file for later cleanup
+            $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $tmpfname;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Save an attachment from a non-upload source (draft or forward)
+     */
+    function save($args)
+    {
+        $group = $args['group'];
+        $args['status'] = false;
+
+        if (!$args['path']) {
+            $rcmail   = rcube::get_instance();
+            $temp_dir = $rcmail->config->get('temp_dir');
+            $tmp_path = tempnam($temp_dir, 'rcmAttmnt');
+
+            if ($fp = fopen($tmp_path, 'w')) {
+                fwrite($fp, $args['data']);
+                fclose($fp);
+                $args['path'] = $tmp_path;
+            }
+            else {
+                return $args;
+            }
+        }
+
+        $args['id']     = $this->file_id();
+        $args['status'] = true;
+
+        // Note the file for later cleanup
+        $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $args['path'];
+
+        return $args;
+    }
+
+    /**
+     * Remove an attachment from storage
+     * This is triggered by the remove attachment button on the compose screen
+     */
+    function remove($args)
+    {
+        $args['status'] = $this->verify_path($args['path']) && @unlink($args['path']);
+        return $args;
+    }
+
+    /**
+     * When composing an html message, image attachments may be shown
+     * For this plugin, the file is already in place, just check for
+     * the existence of the proper metadata
+     */
+    function display($args)
+    {
+        $args['status'] = $this->verify_path($args['path']) && file_exists($args['path']);
+        return $args;
+    }
+
+    /**
+     * This attachment plugin doesn't require any steps to put the file
+     * on disk for use.  This stub function is kept here to make this 
+     * class handy as a parent class for other plugins which may need it.
+     */
+    function get($args)
+    {
+        if (!$this->verify_path($args['path'])) {
+            $args['path'] = null;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Delete all temp files associated with this user
+     */
+    function cleanup($args)
+    {
+        // $_SESSION['compose']['attachments'] is not a complete record of
+        // temporary files because loading a draft or starting a forward copies
+        // the file to disk, but does not make an entry in that array
+        if (is_array($_SESSION['plugins']['filesystem_attachments'])) {
+            foreach ($_SESSION['plugins']['filesystem_attachments'] as $group => $files) {
+                if ($args['group'] && $args['group'] != $group) {
+                    continue;
+                }
+
+                foreach ((array)$files as $filename) {
+                    if (file_exists($filename)) {
+                        unlink($filename);
+                    }
+                }
+
+                unset($_SESSION['plugins']['filesystem_attachments'][$group]);
+            }
+        }
+        return $args;
+    }
+
+    function file_id()
+    {
+        $userid = rcube::get_instance()->user->ID;
+        list($usec, $sec) = explode(' ', microtime());
+        $id = preg_replace('/[^0-9]/', '', $userid . $sec . $usec);
+
+        // make sure the ID is really unique (#1489546)
+        while ($this->find_file_by_id($id)) {
+            // increment last four characters
+            $x  = substr($id, -4) + 1;
+            $id = substr($id, 0, -4) . sprintf('%04d', ($x > 9999 ? $x - 9999 : $x));
+        }
+
+        return $id;
+    }
+
+    private function find_file_by_id($id)
+    {
+        foreach ((array) $_SESSION['plugins']['filesystem_attachments'] as $group => $files) {
+            if (isset($files[$id])) {
+                return true;
+            }
+        }
+    }
+
+    /**
+     * For security we'll always verify the file path stored in session,
+     * as session entries can be faked in various ways e.g. #6026.
+     * We allow only files in Roundcube temp dir
+     */
+    protected function verify_path($path)
+    {
+        if (empty($path)) {
+            return false;
+        }
+
+        $rcmail    = rcube::get_instance();
+        $temp_dir  = $rcmail->config->get('temp_dir');
+        $file_path = pathinfo($path, PATHINFO_DIRNAME);
+
+        if ($temp_dir !== $file_path) {
+            rcube::raise_error(array(
+                    'code'    => 403,
+                    'file'    => __FILE__,
+                    'line'    => __LINE__,
+                    'message' => sprintf("%s can't read %s (not in temp_dir)",
+                        $rcmail->get_user_name(), substr($path, 0, 512))
+                ), true, false);
+
+            return false;
+        }
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/FETCH_HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+50ab218829638c733ea7184af7bbe5a2a40f9b5b	not-for-merge	branch 'filters-2.1.2' of https://github.com/6ec123321/filters
+5a3a8e411b7d65644526df8f3ac2f7246e8eca72	not-for-merge	branch 'filters-2.1.5' of https://github.com/6ec123321/filters
+5077a4abb7e13a2e98d2c8d648f576af23a6ddee	not-for-merge	branch 'filters-2.1.6' of https://github.com/6ec123321/filters
+7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d	not-for-merge	branch 'master' of https://github.com/6ec123321/filters
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+5077a4abb7e13a2e98d2c8d648f576af23a6ddee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/ORIG_HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+bd3ac5f2a137e93a57fa3745fe3d7f09fa148602
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/config	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	url = https://github.com/6ec123321/filters.git
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	pushurl = git@github.com:6ec123321/filters.git
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
+[remote "composer"]
+	url = https://github.com/6ec123321/filters.git
+	fetch = +refs/heads/*:refs/remotes/composer/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/description	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/applypatch-msg.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/commit-msg.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/post-update.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/pre-applypatch.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/pre-commit.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/pre-push.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+IFS=' '
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/pre-rebase.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/prepare-commit-msg.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/hooks/update.sample	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file plugins/filters/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/info/exclude	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d root <root@markup.co.uk> 1515018156 -0500	clone: from https://github.com/6ec123321/filters.git
+7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d bd3ac5f2a137e93a57fa3745fe3d7f09fa148602 root <root@markup.co.uk> 1515018156 -0500	checkout: moving from master to filters-2.1.6
+bd3ac5f2a137e93a57fa3745fe3d7f09fa148602 5077a4abb7e13a2e98d2c8d648f576af23a6ddee root <root@markup.co.uk> 1515018157 -0500	reset: moving to 5077a4abb7e13a2e98d2c8d648f576af23a6ddee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/heads/master	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d root <root@markup.co.uk> 1515018156 -0500	clone: from https://github.com/6ec123321/filters.git
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.2	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 50ab218829638c733ea7184af7bbe5a2a40f9b5b root <root@markup.co.uk> 1515018156 -0500	fetch composer: storing head
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.5	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 5a3a8e411b7d65644526df8f3ac2f7246e8eca72 root <root@markup.co.uk> 1515018156 -0500	fetch composer: storing head
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/remotes/composer/filters-2.1.6	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 5077a4abb7e13a2e98d2c8d648f576af23a6ddee root <root@markup.co.uk> 1515018156 -0500	fetch composer: storing head
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/remotes/composer/master	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d root <root@markup.co.uk> 1515018156 -0500	fetch composer: storing head
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/logs/refs/remotes/origin/HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d root <root@markup.co.uk> 1515018156 -0500	clone: from https://github.com/6ec123321/filters.git
Binary file plugins/filters/.git/objects/pack/pack-60aea0d39951518a0aa82fd3212c9fbee6acae53.idx has changed
Binary file plugins/filters/.git/objects/pack/pack-60aea0d39951518a0aa82fd3212c9fbee6acae53.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/packed-refs	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+# pack-refs with: peeled fully-peeled 
+50ab218829638c733ea7184af7bbe5a2a40f9b5b refs/remotes/origin/filters-2.1.2
+5a3a8e411b7d65644526df8f3ac2f7246e8eca72 refs/remotes/origin/filters-2.1.5
+5077a4abb7e13a2e98d2c8d648f576af23a6ddee refs/remotes/origin/filters-2.1.6
+7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d refs/remotes/origin/master
+d6d054c3fc402d9b4da19a19f9c8952579b306dd refs/tags/filters-2.1.4
+5a3a8e411b7d65644526df8f3ac2f7246e8eca72 refs/tags/filters-2.1.5
+bd3ac5f2a137e93a57fa3745fe3d7f09fa148602 refs/tags/filters-2.1.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/heads/master	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/remotes/composer/filters-2.1.2	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+50ab218829638c733ea7184af7bbe5a2a40f9b5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/remotes/composer/filters-2.1.5	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+5a3a8e411b7d65644526df8f3ac2f7246e8eca72
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/remotes/composer/filters-2.1.6	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+5077a4abb7e13a2e98d2c8d648f576af23a6ddee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/remotes/composer/master	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+7c1a48e4ead1586a219b7bb8ec7cce322cb2e91d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/.git/refs/remotes/origin/HEAD	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/README.txt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,86 @@
+/**
+ * Filters
+ *
+ * Plugin that adds a new tab to the settings section to create client-side e-mail filtering.
+ *
+ * @version 2.1.6
+ * @author Roberto Zarrelli <zarrelli@unimol.it>
+ * @developer Artur Petrov <admin@gtn18.ru>
+ */
+
+
+To install the plugin you have to:
+1. PHP requirements: installed imap-module (--with-imap) for working with imap_mime_header_decode() function.
+2. Download zip-archive to Roundcube/plugins folder;
+3. Unzip downloaded zip-archive;
+4. Rename unziped folder to 'filters';
+5. Add "filters" in the plugins section of the roundcube configuration (config/config.inc.php).
+For example:
+$config['plugins'] = array(
+ 'archive',
+ 'password',
+ 'filters',
+);
+
+To setup the plugin, open the config.inc.php file and edit the following variables:
+  $config['autoAddSpamFilterRule'] = TRUE;  // if TRUE a spam filter rule is created for all users which automatically move messages into junk folder  
+  $config['spam_subject'] = '[SPAM]';       // How to mark the spam in the subject? To have effect the previous variable must be TRUE.
+  $config['caseInsensitiveSearch'] = TRUE;  // if TRUE filters searching in case insensitive mode.
+  $config['decodeBase64Msg'] = TRUE;        // if TRUE decodes base64 mail messages.
+
+
+History
+
+1.0 Initial version.
+1.1 Fixed some important issues.
+1.2 Fixed some minor issues - thanks to Marco De Vivo. 
+1.3 Fixed some minor issues and added additional translations: Dutch and French - thanks to Ruud van den Hout.
+1.4 News: each rule can now filter all, read or unread messages.
+1.5 Fixed some important issues detected with Roundcube 0.8
+1.6 Added additional translation: German - thanks to Fynn Kardel. 
+1.7 Added additional translation: Russian - thanks to AresMax. 
+1.8 Added additional translation: Czech - thanks to Miroslav Baka.
+1.9 Added additional translation: Spanish - thanks to Yoni (MyRoundcube Dev Team - www.myroundcube.com). 
+1.9.1 Added additional translations: Polish - thanks to Damian Wrzalski; Slovak - thanks to Miki.
+1.9.2: 
+  - Added additional translation: Portugal - thanks to antoniomr. 
+  - Fixed the UTF-8 coding on the German translation - thanks to Veit.
+  - Added the contrib section with third-party scripts.
+  - Thanks to Carsten Schumann to write the manual filter patch for Filters 1.9.2 which adds the option to filter manually on request (i.e. to move all newsletters/alerts from inbox to trash).
+    The patch expands the settings page with an option "Mode: automatic/manual" and adds a "manual filter" button to the toolbar. Finally, it updates the localization files.
+2.0:
+  - Added the 'auto add spam filter rule' which automatically add the rule to move messages into junk folder.
+  - Added additional translations: Taiwan - thanks to Avery Wu;
+  - Added additional translations: Romanian - thanks to Tache Madalin;
+  - Fixed to UTF-8 the French translation - thanks to Nvirenque.
+2.1:
+  - Added the feature to filter base64 encoded mail messages;
+  - Added the feature to filter messages searching in case insensitive or case sensitive mode;
+  - Improved the code to prevent the javascript injection - thanks to Moritz;
+  - Improved code organization;
+  - Minor bug fixes.
+2.1.1:
+  - Fixed a bug which prevented to insert case sensitive search strings - thanks to Emanuele Bruno.
+2.1.2:
+  - Added a dynamic vertical scrollbar when there are a lot of filters to show - thanks to Alain Martini.
+2.1.3:
+  - Now check mail only in INBOX like yandex.mail or gmail;
+  - fix "refresh" mailboxes after move mails;
+  - Fixed a bug with the conflict rules. Add priority checkbox, now first rules with priority are working.
+2.1.4:
+  - Fixed for compare strings (Tested in all russian charset);
+  - Fixed option: all, read and unread messages;
+  - Added a new option: mark read or mark unread messages;
+  - Fully replaced a search algorithm;
+  - Fixed localization for 'folder' and 'folder.subfolder' - thanks to twisterbr;
+  - Added additional translations: Japanese - thanks to tatsuyaueda;
+  - Added config.inc.php;
+  - Fix "decode and search BASE64 messages";
+  - Added additional translations: Ukrainian - thanks to Dmitro Gnatoyko (dimagnatoiko@gmail.com).
+2.1.5:
+  - Fixed for Roundcubemail 1.2.2.
+2.1.6:
+  - Fixed for Roundcubemail 1.2.4
+  - Fixed warnings
+  - Fixed "SAVE" button in settings -> filter rules. Thx @JofO97
+  - Fixed search in Roundcube - thanks to peterkroon
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+{
+    "name": "roundcube/filters",
+    "type": "roundcube-plugin",
+    "description": "Plugin that adds a new tab to the settings section to create client-side e-mail filtering.",
+    "keywords": ["filters","client-side","rules","spam"],
+    "homepage": "https://github.com/6ec123321/filters/archive/master.zip",
+    "license": "GNU GPLv3+",
+    "version": "2.1.6",
+    "authors": [
+    	{
+            "name": "Roberto Zarrelli",
+            "email": "zarrelli@unimol.it",
+            "role": "Author"
+        },
+		{
+            "name": "Artur Petrov",
+            "email": "admin@gtn18.ru",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    },
+    "extra": {
+        "roundcube": {
+             "min-version": "1.0-rc"
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/config.inc.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?php
+
+$config['autoAddSpamFilterRule'] = TRUE;
+$config['spam_subject'] = '[SPAM]';
+$config['caseInsensitiveSearch'] = TRUE;
+$config['decodeBase64Msg'] = FALSE;
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/filters.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+/**
+ * Filters
+ *
+ * Plugin that adds a new tab to the settings section to create client-side e-mail filtering.
+ *
+ * @version 2.1.6
+ * @author Roberto Zarrelli <zarrelli@unimol.it>
+ * @developer Artur Petrov <admin@gtn18.ru>
+ */
+
+
+if (window.rcmail) {
+  rcmail.addEventListener('init', function(evt) {
+    var tab = $('<span>').attr('id', 'settingstabpluginfilters').addClass('tablink');    
+    var button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.filters').html(rcmail.gettext('filters', 'filters')).appendTo(tab);    
+        
+    // add button and register command
+    rcmail.add_element(tab, 'tabs');
+    rcmail.register_command('plugin.filters-delete', function(){ rcmail.goto_url('plugin.filters-delete') }, true);    
+    rcmail.register_command('plugin.filters-save', function(){ 
+      var input_searchstring = rcube_find_object('_searchstring');      
+      if (input_searchstring && input_searchstring.value=='') {
+          alert(rcmail.gettext('nosearchstring','filters'));          
+          input_searchstring.focus();
+      }
+      else
+        rcmail.gui_objects.filtersform.submit();
+    }, true);
+  })
+}
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/filters.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,471 @@
+<?php
+
+/**
+ * Filters
+ *
+ * Plugin that adds a new tab to the settings section to create client-side e-mail filtering.
+ *
+ * @version 2.1.6
+ * @author Roberto Zarrelli <zarrelli@unimol.it>
+ * @developer Artur Petrov <admin@gtn18.ru>
+ */
+
+class filters extends rcube_plugin{
+
+  public $task = 'login|mail|settings';
+
+  private $autoAddSpamFilterRule;
+  private $spam_subject;
+  private $caseInsensitiveSearch;
+  private $decodeBase64Msg;
+  private $searchstring = array();
+  private $destfolder = array();
+  private $msg_uids = array();
+  private $open_mbox;
+
+
+  function init(){
+
+    /* Filters parameters initialization. See readme.txt */
+    $this->load_config();
+    /* ***************************************************** */
+
+    $rcmail = rcmail::get_instance();
+    $this->rc = &$rcmail;
+
+    $this->autoAddSpamFilterRule = $this->rc->config->get('autoAddSpamFilterRule',TRUE);
+    $this->spam_subject = $this->rc->config->get('spam_subject','[SPAM]');
+    $this->caseInsensitiveSearch = $this->rc->config->get('caseInsensitiveSearch',TRUE);
+    $this->decodeBase64Msg = $this->rc->config->get('decodeBase64Msg',FALSE);
+
+    if($this->rc->task == 'mail' && !isset($_GET["_q"]))
+        $this->add_hook('messages_list', array($this, 'filters_checkmsg'));
+    else if ($this->rc->task == 'settings'){
+        $this->register_action('plugin.filters', array($this, 'filters_init'));
+        $this->register_action('plugin.filters-save', array($this, 'filters_save'));
+        $this->register_action('plugin.filters-delete', array($this, 'filters_delete'));
+        $this->add_texts('localization/', array('filters','nosearchstring'));
+        $this->rc->output->add_label('filters');
+        $this->include_script('filters.js');      
+    }
+    else if ($this->rc->task == 'login'){
+      if ($this->autoAddSpamFilterRule)
+        $this->add_hook('login_after', array($this, 'filters_addMoveSpamRule'));
+    }
+
+  }
+
+  function filters_checkmsg($mlist){
+	$user = $this->rc->user;
+	if (method_exists($this->rc->imap,'get_mailbox_name')) {
+	  $imap = $this->rc->imap;
+	  $open_mbox = $imap->get_mailbox_name();
+        }
+	else {
+	  $imap = $this->rc->storage;
+	  $open_mbox = $imap->get_folder();
+	}
+	
+        $this->open_mbox=$open_mbox;
+
+	// does not consider the messages already in the trash
+    if ($open_mbox == $this->rc->config->get('trash_mbox'))
+		return;
+
+	//load filters
+	$arr_prefs = $this->rc->config->get('filters', array());
+
+	foreach ($arr_prefs as $key => $saved_filter){
+		// if saved destination folder exists and current folder is INBOX
+	  if (method_exists($imap,'mailbox_exists')){
+		if ($imap->mailbox_exists($saved_filter['destfolder']) && 'INBOX'==$open_mbox){
+		  $saved_filter['searchstring'] = html_entity_decode($saved_filter['searchstring']);
+		  // if (!isset($saved_filter['filterpriority'])) $saved_filter['filterpriority'] = '';
+		  // destfolder#messages#filterpriority#markread
+		  $this->searchstring[ $saved_filter['whatfilter'] ][ $saved_filter['searchstring'] ] = 
+			$saved_filter['destfolder']."#".$saved_filter['messages']."#".$saved_filter['filterpriority']."#".$saved_filter['markread'];
+		}
+	  }
+	  if (!method_exists($imap,'mailbox_exists')){
+		if ($imap->folder_exists($saved_filter['destfolder']) && 'INBOX'==$open_mbox){
+                  $saved_filter['searchstring'] = html_entity_decode($saved_filter['searchstring']);
+                  // if (!isset($saved_filter['filterpriority'])) $saved_filter['filterpriority'] = '';
+                  // destfolder#messages#filterpriority#markread
+                  $this->searchstring[ $saved_filter['whatfilter'] ][ $saved_filter['searchstring'] ] =
+                        $saved_filter['destfolder']."#".$saved_filter['messages']."#".$saved_filter['filterpriority']."#".$saved_filter['markread'];
+		}
+	  }
+	}
+    // if there aren't filters return
+    if(!count($arr_prefs) || !count($this->searchstring) || !isset($mlist['messages']) || !is_array($mlist['messages']))
+      return;
+
+    // scan the messages
+    foreach($mlist["messages"] as $message){
+	  $this->filters_search($message);
+    }
+
+    // move the filtered messages
+    if (count($this->destfolder) > 0){
+      foreach ($this->destfolder as $dfolder){
+        $uids = array();
+        foreach ($this->msg_uids[$dfolder] as $muids){
+          $uids[] = $muids;
+        }
+        if (count($uids)){
+		  $imap->move_message($uids, $dfolder, $open_mbox);
+		  // refresh
+      	  $unseen = $this->rc->storage->count($dfolder, 'UNSEEN');
+      	  $this->api->output->command('set_unread_count',$dfolder, $unseen);
+		  $this->api->output->command('list_mailbox');
+		  $this->api->output->send();
+        }
+      }
+    }
+
+  }
+  
+
+  function filters_init(){
+    $this->add_texts('localization/');
+    $this->register_handler('plugin.body', array($this, 'filters_form'));
+    $this->rc->output->set_pagetitle($this->gettext('filters'));
+    $this->rc->output->send('plugin');
+  }
+
+  function filters_save(){
+    $user = $this->rc->user;
+
+    $this->add_texts('localization/');
+    $this->register_handler('plugin.body', array($this, 'filters_form'));
+    $this->rc->output->set_pagetitle($this->gettext('filters'));
+
+    $searchstring = trim(rcube_utils::get_input_value('_searchstring', RCUBE_INPUT_POST, true));
+    $destfolder = trim(rcube_utils::get_input_value('_folders', RCUBE_INPUT_POST, true));
+    $whatfilter = trim(rcube_utils::get_input_value('_whatfilter', RCUBE_INPUT_POST, true));
+    $messages = trim(rcube_utils::get_input_value('_messages', RCUBE_INPUT_POST, true));
+    $filterpriority = trim(rcube_utils::get_input_value('_checkbox', RCUBE_INPUT_POST, true));
+	$markread = trim(rcube_utils::get_input_value('_markread', RCUBE_INPUT_POST, true));
+
+    if ($searchstring == "")
+      $this->rc->output->command('display_message', $this->gettext('nosearchstring'), 'error');
+    else{
+      $new_arr['whatfilter'] = $whatfilter;
+      $new_arr['searchstring'] = htmlspecialchars(addslashes($searchstring));
+      $new_arr['destfolder'] = addslashes($destfolder);
+      $new_arr['messages'] = $messages;
+      $new_arr['filterpriority'] = $filterpriority;
+      $new_arr['markread'] = $markread;
+      $arr_prefs = $user->get_prefs();
+      $arr_prefs['filters'][] = $new_arr;
+      if ($user->save_prefs($arr_prefs))
+        $this->rc->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation');
+      else
+        $this->rc->output->command('display_message', $this->gettext('unsuccessfullysaved'), 'error');
+    }
+    $this->rc->overwrite_action('plugin.filters');
+    $this->rc->output->send('plugin');
+  }
+
+  function filters_delete(){
+    $user = $this->rc->user;
+
+    $this->add_texts('localization/');
+    $this->register_handler('plugin.body', array($this, 'filters_form'));
+    $this->rc->output->set_pagetitle($this->gettext('filters'));
+
+    if (isset($_GET[filterid])){
+      $filter_id = $_GET[filterid];
+      $arr_prefs = $user->get_prefs();
+      $arr_prefs['filters'][$filter_id] = '';
+      $arr_prefs['filters'] = array_diff($arr_prefs['filters'], array(''));
+      if ($user->save_prefs($arr_prefs))
+        $this->rc->output->command('display_message', $this->gettext('successfullydeleted'), 'confirmation');
+      else
+        $this->rc->output->command('display_message', $this->gettext('unsuccessfullydeleted'), 'error');
+    }
+
+    if (function_exists('rcmail::get_instance()->overwrite_action'))
+      rcmail::get_instance()->overwrite_action('plugin.filters');
+    else $this->rc->overwrite_action('plugin.filters');
+    
+    $this->rc->output->send('plugin');
+  }
+
+  function filters_form(){
+
+    if (method_exists($this->rc,'imap_connect')) $this->rc->imap_connect();
+    else $this->rc->storage_connect();
+
+    $table = new html_table(array('cols' => 2));
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('whatfilter').":", 'html'));
+
+    $select = new html_select(array('name' => '_whatfilter', 'id' => 'whatfilter'));
+    $select->add($this->gettext('from'), 'from');
+    $select->add($this->gettext('to'), 'to');
+    $select->add($this->gettext('cc'), 'cc');
+    $select->add($this->gettext('subject'), 'subject');
+    $table->add('', $select->show($this->gettext('from')));
+
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('searchstring').":"), 'html');
+    $inputfield = new html_inputfield(array('name' => '_searchstring', 'id' => 'searchstring'));
+    $table->add('', $inputfield->show(""));
+
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('moveto').":"));
+    if (function_exists('rcmail::get_instance()->folder_selector'))
+      $select = rcmail::get_instance()->folder_selector(array('name' => '_folders', 'id' => 'folders'));
+    else $select = $this->rc->folder_selector(array('name' => '_folders', 'id' => 'folders'));
+    $table->add('title',  $select->show());
+
+    # new option: all, read and unread messages
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('messagecount').":"), 'html');
+    $select = new html_select(array('name' => '_messages', 'id' => 'messages'));
+    $select->add($this->gettext('all'), 'all');
+    $select->add($this->gettext('unread'), 'unread');
+    $select->add($this->gettext('isread'), 'isread');
+    $table->add('', $select->show($this->gettext('all')));
+
+    # new option: markread or markunread messages
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('markmessages').":"), 'html');
+    $select = new html_select(array('name' => '_markread', 'id' => 'markread'));
+    $select->add($this->gettext('none'), 'none');
+    $select->add($this->gettext('markunread'), 'markunread');
+    $select->add($this->gettext('markread'), 'markread');
+    $table->add('', $select->show($this->gettext('none')));
+	
+    # new option: filter priority, "on" as enable and "" as disable
+    $table->add('title', rcube_utils::rep_specialchars_output($this->gettext('filterpriority').":"), 'html');
+    $checkbox = new html_checkbox(array('name' => '_checkbox', 'id' => 'checkbox'));
+    $table->add('', $checkbox->show("0"));
+
+    // load saved filters
+    $user = $this->rc->user;
+    $arr_prefs = $user->get_prefs();
+    $i = 1;
+    $flag=false;
+    $table2 = new html_table(array('cols' => 2));
+    foreach ($arr_prefs['filters'] as $key => $saved_filter){
+      $flag=true;
+      if (empty($saved_filter['markread'])) $saved_filter['markread'] = 'none';
+      $folder_id = $saved_filter['destfolder'];
+      if (function_exists('rcmail::get_instance()->localize_folderpath'))
+        $folder_name = rcmail::get_instance()->localize_folderpath($folder_id);
+      else $folder_name = $this->rc->localize_folderpath($folder_id);
+
+      $messages = $saved_filter['messages'];
+
+      $msg = $i." - ".$this->gettext('msg_if_field')." <b>".$this->gettext($saved_filter['whatfilter'])."</b> ".$this->gettext('msg_contains').
+	    " <b>".stripslashes($saved_filter['searchstring'])."</b> ".
+	    $this->gettext('msg_move_msg_in')." <b>".$folder_name."</b> ".
+		"(".$this->gettext('messagecount').": ".$this->gettext($saved_filter['messages']).
+		", ".$this->gettext('mark').": ".$this->gettext($saved_filter['markread']).")";
+      if ( !empty($saved_filter['filterpriority']))
+	    $msg = "<font color='green'>".$msg."</font>";
+
+      $table2->add('title',$msg);
+      $dlink = "<a href='./?_task=settings&_action=plugin.filters-delete&filterid=".$key."'>".$this->gettext('delete')."</a>";
+      $table2->add('title',$dlink);
+      $i++;
+    }
+
+    if (!$flag){
+      $table2->add('title',rcube_utils::rep_specialchars_output($this->gettext('msg_no_stored_filters'), 'html'));
+    }
+
+    $out = html::div(array('class' => 'box'),
+        html::div(array('id' => 'prefs-title', 'class' => 'boxtitle'), $this->gettext('filters')) .
+        html::div(array('class' => 'boxcontent'), $table->show() .
+        html::p(null,
+            $this->rc->output->button(array(
+                'command' => 'plugin.filters-save',
+                'type' => 'input',
+                'class' => 'button mainaction',
+                'label' => 'save'
+        )))));
+    $out.= html::div(array('id' => 'prefs-title','class' => 'boxtitle'), $this->gettext('storedfilters')). html::div(array('class' => 'uibox listbox scroller','style'=>'margin-top:250px;'),
+        html::div(array('class' => 'boxcontent'), $table2->show() ));
+
+    $this->rc->output->add_gui_object('filtersform', 'filters-form');
+
+    return $this->rc->output->form_tag(array(
+        'id' => 'filters-form',
+        'name' => 'filters-form',
+        'method' => 'post',
+	'class' => 'propform',
+        'action' => './?_task=settings&_action=plugin.filters-save',
+    ), $out);
+
+  }
+
+  function filters_search($message){
+    // check if a message has been read
+    if (isset($message->flags['SEEN']) && $message->flags['SEEN'])
+      $msg_read = 1;
+	$headers = array('from','to','cc','subject');
+	$destination_folder = '';
+	$filter_flag = '';
+	$mark_flag = '';
+	foreach($headers as $whatfilter){
+      if (isset($this->searchstring[$whatfilter])){
+        foreach ($this->searchstring[$whatfilter] as $from => $dest){
+          $arr = explode("#",$dest);
+          $destination = $arr[0];
+          $msg_filter = $arr[1];
+		  $filterpriority = $arr[2];
+		  $markread = $arr[3];
+
+        switch ($whatfilter){
+          case 'from':
+            $field = $message->from;
+            break;
+          case 'to':
+            $field = $message->to;
+            break;
+          case 'cc':
+            $field = $message->cc;
+            break;
+          case 'subject':
+	    $field = $message->subject;
+            break;
+          default:
+            $field = "";
+        }
+
+        if ($this->filters_searchString($field, $from) != false && $destination!=$this->open_mbox){
+		  if (!empty($filterpriority)){
+			$destination_folder = $destination;
+			$filter_flag = $msg_filter;
+			$mark_flag = $markread;
+			break 2;
+		  }
+		  if (empty($destination_folder)){
+			$destination_folder = $destination;
+			$filter_flag = $msg_filter;
+			$mark_flag = $markread;
+		  }
+        }
+      }
+    }
+  }
+  if (!empty($destination_folder)){
+	// if message as read and need unread message, then exit from function
+	// ЕÑли Ñообщение как прочитанное и нужно непрочитанное Ñообщение, то выход из функции  
+	if (!empty($msg_read) && $filter_flag == "unread") return;
+	// if message as unread and need read message, then exit from function
+	// ЕÑли Ñообщение как непрочитанное и нужно прочитанное Ñообщение, то выход из функции 
+	if (empty($msg_read) && $filter_flag == "isread") return;
+	  $this->msg_uids[$destination_folder][] = $message->uid;
+	  if (!in_array($destination_folder, $this->destfolder)) $this->destfolder[] = $destination_folder;
+	// Mark message as read if need mark message as read
+	// Отметить Ñообщение как прочитанное
+	if ($mark_flag == "markread") $this->filters_markread($message);
+	// Mark message as unread if need mark message as unread
+	// Отметить Ñообщение как непрочитанное
+	if ($mark_flag == "markunread") $this->filters_markread($message,'UNSEEN');
+  }
+}
+  // Mark message as read (SEEN) or as unread (UNSEEN)
+  function filters_markread($message,$markread='SEEN'){
+	$storage = $this->rc->storage;
+	$storage->set_flag($message->uid, $markread, NULL);
+  }
+
+  function filters_searchString($msg,$stringToSearch){
+    $ret = FALSE;
+
+    $ciSearch = $this->caseInsensitiveSearch;
+    $decode_msg	= rcube_mime::decode_header((string)$msg);
+
+    $stringToSearch=stripslashes($stringToSearch);
+
+    $decode_msg = addslashes($decode_msg);
+    $stringToSearch = addslashes($stringToSearch);
+
+    if ($ciSearch){
+      if (function_exists('mb_stripos')){
+        $tmp = mb_stripos($decode_msg, $stringToSearch);
+      }
+      else{
+        $tmp = stripos($decode_msg, $stringToSearch);
+      }
+    }
+    else{
+      if (function_exists('mb_strpos')){
+        $tmp = mb_strpos($decode_msg, $stringToSearch);
+      }
+      else{
+        $tmp = strpos($decode_msg, $stringToSearch);
+      }
+    }
+
+    if ($tmp !== FALSE){
+      $ret = TRUE;
+    }
+    
+    else{
+      if ($this->decodeBase64Msg === TRUE){
+        // decode and search BASE64 msg
+        $decode_msg = rcube_mime::decode_header(base64_decode($msg));
+
+        if ($decode_msg !== FALSE){
+
+          if ($ciSearch){
+            if (function_exists('mb_stripos')){
+              $tmp = mb_stripos($decode_msg, $stringToSearch);
+            }
+            else{
+              $tmp = stripos($decode_msg, $stringToSearch);
+            }
+          }
+          else{
+            if (function_exists('mb_strpos')){
+              $tmp = mb_strpos($decode_msg, $stringToSearch);
+            }
+            else{
+              $tmp = strpos($decode_msg, $stringToSearch);
+            }
+          }
+          if ($tmp !== FALSE){
+            $ret = TRUE;
+          }
+        }
+      }
+    }
+
+    return $ret;
+  }
+
+
+  function filters_addMoveSpamRule(){
+
+      $user = $this->rc->user;
+
+      $searchstring = $this->spam_subject;
+      $destfolder = $this->rc->config->get('junk_mbox', null);
+      $whatfilter = "subject";
+      $messages = "all";
+
+      //load filters
+      $arr_prefs = $this->rc->config->get('filters', array());
+
+      // check if the rule is already enabled
+      $found = false;
+      foreach ($arr_prefs as $key => $saved_filter){
+        if ($saved_filter['searchstring'] == $searchstring && $saved_filter['whatfilter'] == $whatfilter){
+          $found = true;
+        }
+      }
+
+      if (!$found && $destfolder !== null && $destfolder !== ""){
+        $new_arr['whatfilter'] = $whatfilter;
+        $new_arr['searchstring'] = $searchstring;
+        $new_arr['destfolder'] = $destfolder;
+	$new_arr['messages'] = $messages;
+        $arr_prefs = $user->get_prefs();
+        $arr_prefs['filters'][] = $new_arr;
+        $user->save_prefs($arr_prefs);
+      }
+  }
+
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();                                
+$labels['filters'] = 'Pravidla';
+$labels['storedfilters'] = 'Uložená pravidla';
+$labels['whatfilter'] = 'Pravidlo';
+$labels['searchstring'] = 'Obsahuje';
+$labels['moveto'] = 'Uložit do';
+$labels['from'] = 'Od';
+$labels['to'] = 'Komu';
+$labels['cc'] = 'Kopie';
+$labels['subject'] = 'Předmět';
+$labels['delete'] = 'Smazat';
+
+$messages = array();
+$messages['nosearchstring'] = "Pole 'Obsahuje' nemůže zůstat prázdné.";
+$messages['successfullysaved'] = "Pravidlo bylo uloženo.";
+$messages['unsuccessfullysaved'] = "Chyba: pravidlo nebylo uloženo.";
+$messages['successfullydeleted'] = "Pravidlo bylo smazánoo.";
+$messages['unsuccessfullydeleted'] = "Chyba: pravidlo nebylo smazáno.";
+$messages['msg_if_field'] = 'Pokud pole';
+$messages['msg_contains'] = 'obsahuje';
+$messages['msg_move_msg_in'] = 'uložit zprávu do';
+$messages['msg_no_stored_filters'] = "Nemáte uložená pravidla.";
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filter';
+$labels['storedfilters'] = 'Gespeicherte Filter';
+$labels['whatfilter'] = 'Filter';
+$labels['searchstring'] = 'Enthält';
+$labels['moveto'] = 'Verschieben nach';
+$labels['from'] = 'Absender';
+$labels['to'] = 'Empfänger';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Betreff';
+$labels['delete'] = 'Löschen';
+
+$messages = array();
+$messages['nosearchstring'] = "Das Feld 'Enthält' darf nicht leer sein.";
+$messages['successfullysaved'] = "Filter erfolgreich gespeichert.";
+$messages['unsuccessfullysaved'] = "Fehler: Filter nicht gespeichert.";
+$messages['successfullydeleted'] = "Filter erfolgreich gelöscht.";
+$messages['unsuccessfullydeleted'] = "Fehler: Filter nicht gelöscht.";
+$messages['msg_if_field'] = 'Wenn das Feld';
+$messages['msg_contains'] = 'den Inhalt';
+$messages['msg_move_msg_in'] = 'aufweist, dann verschiebe die Nachricht in den Ordner';
+$messages['msg_no_stored_filters'] = "Keine gespeicherten Filter.";
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+$labels = array();
+$labels['filters'] = 'ΦίλτÏα';
+$labels['storedfilters'] = 'Αποθηκευμένα ΦίλτÏα';
+$labels['whatfilter'] = 'ΦίλτÏο';
+$labels['searchstring'] = 'ΠεÏιέχει';
+$labels['moveto'] = 'Μετακίνηση σε';
+$labels['from'] = 'Από';
+$labels['to'] = 'Σέ';
+$labels['cc'] = 'Κοιν';
+$labels['subject'] = 'Θέμα';
+$labels['delete'] = 'ΔιαγÏαφή';
+$labels['filterpriority'] = 'Îα μην ισχÏουν άλλοι κανόνες';
+$messages = array();
+$messages['nosearchstring'] = "Το πεδίο 'ΠεÏιέχει' δεν μποÏεί να είναι κενό.";
+$messages['successfullysaved'] = "Το φίλτÏο αποθηκεÏτηκε.";
+$messages['unsuccessfullysaved'] = "Σφάλμα: το φίλτÏο δεν αποθηκεÏτηκε.";
+$messages['successfullydeleted'] = "Το φίλτÏο διαγÏάφτηκε.";
+$messages['unsuccessfullydeleted'] = "Σφάλμα: το φίλτÏο δεν διαγÏάφτηκε.";
+$messages['msg_if_field'] = 'Εάν το πεδίο';
+$messages['msg_contains'] = 'ΠεÏιέχει';
+$messages['msg_move_msg_in'] = 'μετακίνησε το μήνυμα σε';
+$messages['msg_no_stored_filters'] = "Δεν υπάÏχουν αποθηκεÏμενα φίλτÏα.";
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filters';
+$labels['storedfilters'] = 'Stored filters';
+$labels['whatfilter'] = 'Filter';
+$labels['searchstring'] = 'Contains';
+$labels['moveto'] = 'Move to';
+$labels['from'] = 'From';
+$labels['to'] = 'To';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Subject';
+$labels['delete'] = 'Delete';
+$labels['filterpriority'] = 'Do not apply other rules';
+
+$messages = array();
+$messages['nosearchstring'] = "The field 'Contains' cannot be empty.";
+$messages['successfullysaved'] = "Filter successfully stored.";
+$messages['unsuccessfullysaved'] = "Error: filter not stored.";
+$messages['successfullydeleted'] = "Filter successfully deleted.";
+$messages['unsuccessfullydeleted'] = "Error: filter not deleted.";
+$messages['msg_if_field'] = 'If the field';
+$messages['msg_contains'] = 'contains';
+$messages['msg_move_msg_in'] = 'move the message to';
+$messages['msg_no_stored_filters'] = "There aren't filters stored.";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | Author: Yoni - MyRoundcube Plugins www.myroundcube.com
+ +-----------------------------------------------------------------------+
+ */
+$labels = array();
+$labels['filters'] = 'Filtros';
+$labels['storedfilters'] = 'Filtros almacenados';
+$labels['whatfilter'] = 'Filtro';
+$labels['searchstring'] = 'Contiene';
+$labels['moveto'] = 'Mover a';
+$labels['from'] = 'De';
+$labels['to'] = 'Para';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Asunto';
+$labels['delete'] = 'Eliminar';
+$labels['filterpriority'] = 'No aplicar otras reglas';
+$messages = array();
+$messages['nosearchstring'] = "El campo 'Contiene' no puede estar vacío.";
+$messages['successfullysaved'] = "Filtro almacenado éxitosamente.";
+$messages['unsuccessfullysaved'] = "Error: filtro no almacenado.";
+$messages['successfullydeleted'] = "Filtro elimindo éxitosamente.";
+$messages['unsuccessfullydeleted'] = "Error: filtro no eliminado.";
+$messages['msg_if_field'] = 'Si el campo';
+$messages['msg_contains'] = 'contiene';
+$messages['msg_move_msg_in'] = 'mover mensaje a';
+$messages['msg_no_stored_filters'] = "No hay filtros almacenados.";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filtres';
+$labels['storedfilters'] = 'Filtres actifs';
+$labels['whatfilter'] = 'Filtre';
+$labels['searchstring'] = 'Contient';
+$labels['moveto'] = 'Déplacer vers';
+$labels['from'] = 'De';
+$labels['to'] = 'Pour';
+$labels['cc'] = 'Copie à';
+$labels['subject'] = 'Sujet';
+$labels['delete'] = 'Supprimer';
+$labels['filterpriority'] = 'Ne pas appliquer les autres règles de filtrage';
+
+$messages = array();
+$messages['nosearchstring'] = "Le champ 'Contient' ne peut pas être vide.";
+$messages['successfullysaved'] = "Filtre enregistré avec succés.";
+$messages['unsuccessfullysaved'] = "Erreur: filtre non sauvegardé.";
+$messages['successfullydeleted'] = "Filtre supprimé avec succés.";
+$messages['unsuccessfullydeleted'] = "Erreur: filtre non supprimé.";
+$messages['msg_if_field'] = 'Si le champ';
+$messages['msg_contains'] = 'contient';
+$messages['msg_move_msg_in'] = 'déplacer le message vers';
+$messages['msg_no_stored_filters'] = "Il n'y a pas de filtres enregistrés.";
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filtri';
+$labels['storedfilters'] = 'Filtri impostati';
+$labels['whatfilter'] = 'Filtrare';
+$labels['searchstring'] = 'Contiene';
+$labels['moveto'] = 'Sposta in';
+$labels['from'] = 'Da';
+$labels['to'] = 'A';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Oggetto';
+$labels['delete'] = 'Cancella';
+
+$messages = array();
+$messages['nosearchstring'] = "Il campo 'Contiene' non può essere vuoto.";
+$messages['successfullysaved'] = "Il filtro è stato salvato con successo.";
+$messages['unsuccessfullysaved'] = "Errore nel salvataggio del filtro.";
+$messages['successfullydeleted'] = "Il filtro è stato eliminato con successo.";
+$messages['unsuccessfullydeleted'] = "Errore nella rimozione del filtro.";
+$messages['msg_if_field'] = 'Se il campo';
+$messages['msg_contains'] = 'contiene';
+$messages['msg_move_msg_in'] = 'sposta il messaggio in';
+$messages['msg_no_stored_filters'] = 'Non è stato impostato alcun filtro';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+$labels = array();
+$labels['filters'] = 'フィルター';
+$labels['storedfilters'] = 'Stored filters';
+$labels['whatfilter'] = 'æ¡ä»¶';
+$labels['searchstring'] = 'å«ã¾ã‚Œã‚‹æ–‡å­—列';
+$labels['moveto'] = '移動先';
+$labels['from'] = 'From';
+$labels['to'] = 'To';
+$labels['cc'] = 'Cc';
+$labels['subject'] = 'Subject';
+$labels['delete'] = 'Delete';
+$labels['filterpriority'] = 'ä»–ã®ãƒ«ãƒ¼ãƒ«ã‚’é©ç”¨ã—ãªã„';
+$messages = array();
+$messages['nosearchstring'] = "'å«ã¾ã‚Œã‚‹æ–‡å­—列' を空欄ã«ã™ã‚‹äº‹ã¯å‡ºæ¥ã¾ã›ã‚“。";
+$messages['successfullysaved'] = "フィルタをä¿å­˜ã—ã¾ã—ãŸã€‚";
+$messages['unsuccessfullysaved'] = "エラー: フィルタをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚";
+$messages['successfullydeleted'] = "フィルタを削除ã—ã¾ã—ãŸã€‚";
+$messages['unsuccessfullydeleted'] = "エラー: フィルタを削除出æ¥ã¾ã›ã‚“ã§ã—ãŸã€‚";
+$messages['msg_if_field'] = ' ';
+$messages['msg_contains'] = 'ã«';
+$messages['msg_move_msg_in'] = 'ãŒå«ã¾ã‚Œã‚‹å ´åˆã€æ¬¡ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã«ç§»å‹•ã—ã¾ã™ã€‚';
+$messages['msg_no_stored_filters'] = "ç¾åœ¨ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。";
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filters';
+$labels['storedfilters'] = 'Opgeslagen filters';
+$labels['whatfilter'] = 'Filter';
+$labels['searchstring'] = 'Bevat';
+$labels['moveto'] = 'Verplaaten naar';
+$labels['from'] = 'Van';
+$labels['to'] = 'Naar';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Onderwerp';
+$labels['delete'] = 'Verwijderen';
+
+$messages = array();
+$messages['nosearchstring'] = "Het veld 'Bevat' mag niet leeg zijn.";
+$messages['successfullysaved'] = "Filter met succes opgeslagen.";
+$messages['unsuccessfullysaved'] = "Fout: filteren niet opgeslagen.";
+$messages['successfullydeleted'] = "Filter met succes verwijderd.";
+$messages['unsuccessfullydeleted'] = "Fout: filter niet verwijderd.";
+$messages['msg_if_field'] = 'Als het veld';
+$messages['msg_contains'] = 'bevat';
+$messages['msg_move_msg_in'] = 'het bericht verplaatsen naar';
+$messages['msg_no_stored_filters'] = "Er zijn geen opgeslagen filters.";
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+$labels = array();
+$labels['filters'] = 'Reguły filtrowania';
+$labels['storedfilters'] = 'Utworzone reguły filtrowania';
+$labels['whatfilter'] = 'Filtruj';
+$labels['searchstring'] = 'Zawiera';
+$labels['moveto'] = 'PrzenieÅ› do';
+$labels['from'] = 'Od';
+$labels['to'] = 'Do';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Temat';
+$labels['delete'] = 'Usuń';
+
+$messages = array();
+$messages['nosearchstring'] = "Pole 'Zawiera' nie może być puste.";
+$messages['successfullysaved'] = "Reguła filtrowania zapisana.";
+$messages['unsuccessfullysaved'] = "Błąd. Nie udało się zapisać reguły filtrowania.";
+$messages['successfullydeleted'] = "Reguła filtrowania została usunięta.";
+$messages['unsuccessfullydeleted'] = "Błąd. Nie udało się usunąć reguły filtrowania.";
+$messages['msg_if_field'] = 'Jeśli pole';
+$messages['msg_contains'] = 'zawiera';
+$messages['msg_move_msg_in'] = 'przenieś wiadomość do';
+$messages['msg_no_stored_filters'] = "Nie ma żadnych reguł filtrowania wiadomości.";
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filtros';
+$labels['storedfilters'] = 'Filtros guardados';
+$labels['whatfilter'] = 'Filtro';
+$labels['searchstring'] = 'Contém';
+$labels['moveto'] = 'Mover para';
+$labels['from'] = 'Remetente';
+$labels['to'] = 'Destinatário';
+$labels['cc'] = 'Com conhecimento';
+$labels['subject'] = 'Assunto';
+$labels['delete'] = 'Apagar'; 
+$messages = array();
+$messages['nosearchstring'] = "O campo 'Contém' não pode estar vazio.";
+$messages['successfullysaved'] = "O fitro foi guardado com êxito.";
+$messages['unsuccessfullysaved'] = "Erro: o filtro não foi guardado.";
+$messages['successfullydeleted'] = "O filtro foi apagado com êxito.";
+$messages['unsuccessfullydeleted'] = "Erro: o filtro não foi apagado.";
+$messages['msg_if_field'] = 'Se o campo';
+$messages['msg_contains'] = 'incluir';
+$messages['msg_move_msg_in'] = 'mover a mensagem para';
+$messages['msg_no_stored_filters'] = "Não existem filtros.";
+
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+$labels = array();
+$labels['filters'] = 'Filtre';
+$labels['storedfilters'] = 'Filtre salvate';
+$labels['whatfilter'] = 'Filtru';
+$labels['searchstring'] = 'Contine';
+$labels['moveto'] = 'Muta in';
+$labels['from'] = 'De la';
+$labels['to'] = 'Catre';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Subiect';
+$labels['delete'] = 'Sterge';
+
+$messages = array();
+$messages['nosearchstring'] = "Campul 'Contine' nu poate fi gol.";
+$messages['successfullysaved'] = "Filtru salvat cu succes.";
+$messages['unsuccessfullysaved'] = "Eroare: Filtrul nu poate fi salvat.";
+$messages['successfullydeleted'] = "Filtru sters cu succes.";
+$messages['unsuccessfullydeleted'] = "Eroare: filtrul nu a fost sters.";
+$messages['msg_if_field'] = 'Daca campul';
+$messages['msg_contains'] = 'contine';
+$messages['msg_move_msg_in'] = 'muta mesajul in';
+$messages['msg_no_stored_filters'] = "Nici un filtru salvat.";
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Фильтры';
+$labels['storedfilters'] = 'Правила';
+$labels['whatfilter'] = 'Фильтр';
+$labels['searchstring'] = 'Содержит';
+$labels['moveto'] = 'ПеремеÑтить';
+$labels['from'] = 'От';
+$labels['to'] = 'Кому';
+$labels['cc'] = 'КопиÑ';
+$labels['subject'] = 'Тема';
+$labels['delete'] = 'Удалить';
+$labels['filterpriority'] = 'Ðе применÑÑ‚ÑŒ другие правила';
+
+$messages = array();
+$messages['nosearchstring'] = "Поле 'Содержит' не может быть пуÑтым.";
+$messages['successfullysaved'] = "Правило Ñохранено.";
+$messages['unsuccessfullysaved'] = "Ошибка: правило не Ñохранено.";
+$messages['successfullydeleted'] = "Правило удалено.";
+$messages['unsuccessfullydeleted'] = "Ошибка: правило не удалено.";
+$messages['msg_if_field'] = 'ЕÑли поле';
+$messages['msg_contains'] = 'Содержит';
+$messages['msg_move_msg_in'] = 'ПеремеÑтить Ñообщение в';
+$messages['msg_no_stored_filters'] = "Правила не Ñозданы, нет Ñохраненных правил.";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();                                
+$labels['filters'] = 'Pravidlá';
+$labels['storedfilters'] = 'Uložené pravidlá';
+$labels['whatfilter'] = 'Pravidlo';
+$labels['searchstring'] = 'Obsahuje';
+$labels['moveto'] = 'Uložiť do';
+$labels['from'] = 'Od';
+$labels['to'] = 'Komu';
+$labels['cc'] = 'Kópia';
+$labels['subject'] = 'Predmet';
+$labels['delete'] = 'Zmazať';
+
+$messages = array();
+$messages['nosearchstring'] = "Pole 'Obsahuje' nemôže zostať prázdne.";
+$messages['successfullysaved'] = "Pravidlo bolo uložené.";
+$messages['unsuccessfullysaved'] = "Chyba: pravidlo nebolo uložené.";
+$messages['successfullydeleted'] = "Pravidlo bolo zmazané.";
+$messages['unsuccessfullydeleted'] = "Chyba: pravidlo nebolo zmazané.";
+$messages['msg_if_field'] = 'Pokiaľ pole';
+$messages['msg_contains'] = 'obsahuje';
+$messages['msg_move_msg_in'] = 'uložit správu do';
+$messages['msg_no_stored_filters'] = "Nemáte uložené pravidlá.";
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Filtreler';
+$labels['storedfilters'] = 'Kayıtlı Filtreler';
+$labels['whatfilter'] = 'Filtre';
+$labels['searchstring'] = 'İçerir';
+$labels['moveto'] = 'Hedefe Taşı';
+$labels['from'] = 'From';
+$labels['to'] = 'To';
+$labels['cc'] = 'CC';
+$labels['subject'] = 'Subject/Konu';
+$labels['delete'] = 'Sil';
+$labels['filterpriority'] = 'DiÄŸer kurallara uygulama.';
+
+$messages = array();
+$messages['nosearchstring'] = " 'İçerir' alanı boş olamaz.";
+$messages['successfullysaved'] = "Filtre oluÅŸturuldu.";
+$messages['unsuccessfullysaved'] = "Hata: filtre kaydedilemedi.";
+$messages['successfullydeleted'] = "Filtre silindi.";
+$messages['unsuccessfullydeleted'] = "Hata: Filtre silinemedi.";
+$messages['msg_if_field'] = 'EÄŸer ÅŸu alan : ';
+$messages['msg_contains'] = 'şunu içeriyorsa : ';
+$messages['msg_move_msg_in'] = 'mesajı şuraya taşı';
+$messages['msg_no_stored_filters'] = "Henüz bir filtre oluşturulmamış. Yeni oluşturabilirsiniz.";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+$labels = array();
+$labels['filters'] = 'Фільтри';
+$labels['storedfilters'] = 'Правила';
+$labels['whatfilter'] = 'Фільтр';
+$labels['searchstring'] = 'МіÑтить';
+$labels['moveto'] = 'ПереміÑтити';
+$labels['from'] = 'Від';
+$labels['to'] = 'Кому';
+$labels['cc'] = 'КопіÑ';
+$labels['subject'] = 'Тема';
+$labels['delete'] = 'Видалити';
+$labels['filterpriority'] = 'Ðе заÑтоÑовувати інші правила';
+
+$messages = array();
+$messages['nosearchstring'] = "Поле 'МіÑтить' не может бути пуÑтим.";
+$messages['successfullysaved'] = "Правило збережено.";
+$messages['unsuccessfullysaved'] = "Помилка: правило не збережено.";
+$messages['successfullydeleted'] = "Правило видалено.";
+$messages['unsuccessfullydeleted'] = "Помилка: правило не видалено.";
+$messages['msg_if_field'] = 'Якщо поле';
+$messages['msg_contains'] = 'МіÑтить';
+$messages['msg_move_msg_in'] = 'ПереміÑтити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾';
+$messages['msg_no_stored_filters'] = "Правила не Ñтворені, немає збережених правил.";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+
+$labels = array();
+$labels['filters'] = '分類器';
+$labels['storedfilters'] = '已儲存的è¦å‰‡';
+$labels['whatfilter'] = 'æœå°‹æ¬„ä½';
+$labels['searchstring'] = '包å«';
+$labels['moveto'] = '移動至';
+$labels['from'] = '寄件人';
+$labels['to'] = '收件人';
+$labels['cc'] = '副本收件人';
+$labels['subject'] = '主旨';
+$labels['delete'] = '刪除';
+
+$messages = array();
+$messages['nosearchstring'] = "é—œéµå­—ä¸å¯ä»¥æ˜¯ç©ºçš„";
+$messages['successfullysaved'] = "è¦å‰‡å„²å­˜æˆåŠŸ";
+$messages['unsuccessfullysaved'] = "錯誤:è¦å‰‡æœªå„²å­˜";
+$messages['successfullydeleted'] = "è¦å‰‡åˆªé™¤æˆåŠŸ";
+$messages['unsuccessfullydeleted'] = "錯誤:è¦å‰‡æœªåˆªé™¤";
+$messages['msg_if_field'] = '如果欄ä½';
+$messages['msg_contains'] = '包å«';
+$messages['msg_move_msg_in'] = '移動郵件';
+$messages['msg_no_stored_filters'] = "沒有已儲存的è¦å‰‡";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/filters/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+    http://pear.php.net/dtd/tasks-1.0.xsd
+    http://pear.php.net/dtd/package-2.0
+    http://pear.php.net/dtd/package-2.0.xsd">
+	<name>filters</name>
+    <uri>https://plugins.roundcube.net/packages/roundcube/filters</uri>
+	<summary>Client-side e-mail filter</summary>
+	<description>Plugin that adds a new tab to the settings section to create client-side e-mail filtering</description>
+	<lead>
+		<name>Roberto Zarrelli</name>
+		<user>-</user>
+		<email>zarrelli@unimol.it</email>
+		<active>yes</active>
+	</lead>
+	<lead>
+		<name>Artur Petrov</name>
+		<user>6ec123321</user>
+		<email>admin@gtn18.ru</email>
+		<active>yes</active>
+	</lead>
+	<date>2017-04-12</date>
+	<version>
+		<release>2.1.6</release>
+		<api>2.1.6</api>
+	</version>
+	<stability>
+		<release>stable</release>
+		<api>stable</api>
+	</stability>
+	<license uri="http://www.gnu.org/licenses/agpl.html">GNU GPLv3</license>
+	<notes>-</notes>
+	<contents>
+		<dir baseinstalldir="/" name="/">
+			<file name="config.inc.php" role="php"></file>
+			<file name="filters.php" role="php"></file>
+			<file name="filters.js" role="data"></file>
+			<file name="localization/cs_CZ.inc" role="data"></file>
+			<file name="localization/de_DE.inc" role="data"></file>
+			<file name="localization/el_GR.inc" role="data"></file>
+			<file name="localization/en_US.inc" role="data"></file>
+			<file name="localization/es_ES.inc" role="data"></file>
+			<file name="localization/fr_FR.inc" role="data"></file>
+			<file name="localization/it_IT.inc" role="data"></file>
+			<file name="localization/ja_JP.inc" role="data"></file>
+			<file name="localization/nl_NL.inc" role="data"></file>
+			<file name="localization/pl_PL.inc" role="data"></file>
+			<file name="localization/pt_PT.inc" role="data"></file>
+			<file name="localization/ro_RO.inc" role="data"></file>
+			<file name="localization/ru_RU.inc" role="data"></file>
+			<file name="localization/sk_SK.inc" role="data"></file>
+			<file name="localization/tr_TR.inc" role="data"></file>
+			<file name="localization/uk_UA.inc" role="data"></file>
+			<file name="localization/zh_TW.inc" role="data"></file>
+			<file name="README.txt" role="data"></file>
+			<file name="composer.json" role="data"></file>
+		</dir>
+	</contents>
+	<dependencies>
+		<required>
+			<php>
+				<min>5.3.0</min>
+			</php>
+			<pearinstaller>
+				<min>1.3.0</min>
+			</pearinstaller>
+		</required>
+	</dependencies>
+	<phprelease/>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/help",
+    "type": "roundcube-plugin",
+    "description": "Plugin adds a new item (Help) in taskbar.",
+    "license": "GPLv3+",
+    "version": "1.4",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+// Help content iframe source
+// %l will be replaced by the language code resolved using the 'help_language_map' option
+// If you are serving roundcube via https, then change this URL to https also.
+$config['help_source'] = 'http://docs.roundcube.net/doc/help/1.1/%l/';
+
+// Map task/action combinations to deep-links
+// Use '<task>/<action>' or only '<task>' strings as keys
+// The values will be appended to the 'help_source' URL
+$config['help_index_map'] = array(
+    'login'                => 'login.html',
+    'mail'                 => 'mail/index.html',
+    'mail/compose'         => 'mail/compose.html',
+    'addressbook'          => 'addressbook/index.html',
+    'settings'             => 'settings/index.html',
+    'settings/preferences' => 'settings/preferences.html',
+    'settings/folders'     => 'settings/folders.html',
+    'settings/identities'  => 'settings/identities.html',
+);
+
+// Map to translate Roundcube language codes into help document languages
+// The '*' entry will be used as default
+$config['help_language_map'] = array('*' => 'en_US');
+
+// Enter an absolute URL to a page displaying information about this webmail
+// Alternatively, create a HTML file under <this-plugin-dir>/content/about.html
+$config['help_about_url'] = null;
+
+// Enter an absolute URL to a page displaying information about this webmail
+// Alternatively, put your license text to <this-plugin-dir>/content/license.html
+$config['help_license_url'] = null;
+
+// Determine whether to open the help in a new window
+$config['help_open_extwin'] = false;
+
+// URL to additional information about CSRF protection
+$config['help_csrf_info'] = null;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/content/license.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,689 @@
+<div id="helplicense" class="readtext">
+<h2 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h2>
+<p style="text-align: center;">Version 3, 29 June 2007</p>
+
+<p>Copyright &copy; 2007 Free Software Foundation, Inc.
+ &lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;</p><p>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.</p>
+
+<h3>Preamble</h3>
+
+<p>The GNU General Public License is a free, copyleft license for
+software and other kinds of works.</p>
+
+<p>The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.</p>
+
+<p>When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.</p>
+
+<p>To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.</p>
+
+<p>For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.</p>
+
+<p>Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.</p>
+
+<p>For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.</p>
+
+<p>Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.</p>
+
+<p>Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.</p>
+
+<p>The precise terms and conditions for copying, distribution and
+modification follow.</p>
+
+<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>
+
+<h4><a name="section0"></a>0. Definitions.</h4>
+
+<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>
+
+<p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.</p>
+ 
+<p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
+&ldquo;recipients&rdquo; may be individuals or organizations.</p>
+
+<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of the
+earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>
+
+<p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
+on the Program.</p>
+
+<p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.</p>
+
+<p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.</p>
+
+<p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.</p>
+
+<h4><a name="section1"></a>1. Source Code.</h4>
+
+<p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
+for making modifications to it.  &ldquo;Object code&rdquo; means any non-source
+form of a work.</p>
+
+<p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.</p>
+
+<p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+&ldquo;Major Component&rdquo;, in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.</p>
+
+<p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.</p>
+
+<p>The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.</p>
+
+<p>The Corresponding Source for a work in source code form is that
+same work.</p>
+
+<h4><a name="section2"></a>2. Basic Permissions.</h4>
+
+<p>All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.</p>
+
+<p>You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.</p>
+
+<p>Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.</p>
+
+<h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
+
+<p>No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.</p>
+
+<p>When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.</p>
+
+<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>
+
+<p>You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.</p>
+
+<p>You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.</p>
+
+<h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>
+
+<p>You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:</p>
+
+<ul>
+<li>a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.</li>
+
+<li>b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    &ldquo;keep intact all notices&rdquo;.</li>
+
+<li>c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.</li>
+
+<li>d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.</li>
+
+</ul>
+
+<p>A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+&ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.</p>
+
+<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>
+
+<p>You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:</p>
+
+<ul>
+<li>a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.</li>
+
+<li>b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.</li>
+
+<li>c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.</li>
+
+<li>d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.</li>
+
+<li>e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.</li>
+</ul>
+
+<p>A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.</p>
+
+<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, &ldquo;normally used&rdquo; refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.</p>
+
+<p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.</p>
+
+<p>If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).</p>
+
+<p>The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.</p>
+
+<p>Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.</p>
+
+<h4><a name="section7"></a>7. Additional Terms.</h4>
+
+<p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.</p>
+
+<p>When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.</p>
+
+<p>Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:</p>
+
+<ul>
+<li>a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or</li>
+
+<li>b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or</li>
+
+<li>c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or</li>
+
+<li>d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or</li>
+
+<li>e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or</li>
+
+<li>f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.</li>
+</ul>
+
+<p>All other non-permissive additional terms are considered &ldquo;further
+restrictions&rdquo; within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.</p>
+
+<p>If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.</p>
+
+<p>Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.</p>
+
+<h4><a name="section8"></a>8. Termination.</h4>
+
+<p>You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).</p>
+
+<p>However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.</p>
+
+<p>Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.</p>
+
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.</p>
+
+<h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>
+
+<p>You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.</p>
+
+<h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>
+
+<p>Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.</p>
+
+<p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.</p>
+
+<p>You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.</p>
+
+<h4><a name="section11"></a>11. Patents.</h4>
+
+<p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>
+
+<p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, &ldquo;control&rdquo; includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.</p>
+
+<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.</p>
+
+<p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.</p>
+
+<p>If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.</p>
+
+  
+<p>If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.</p>
+
+<p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.</p>
+
+<p>Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.</p>
+
+<h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>
+
+<p>If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.</p>
+
+<h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>
+
+<p>Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.</p>
+
+<h4><a name="section14"></a>14. Revised Versions of this License.</h4>
+
+<p>The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.</p>
+
+<p>Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License &ldquo;or any later version&rdquo; applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.</p>
+
+<p>If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.</p>
+
+<p>Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.</p>
+
+<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>
+
+<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
+
+<h4><a name="section16"></a>16. Limitation of Liability.</h4>
+
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.</p>
+
+<h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>
+
+<p>If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.</p>
+
+<p>END OF TERMS AND CONDITIONS</p>
+
+<h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>
+
+<p>If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.</p>
+
+<p>To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>
+
+<pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
+</pre>
+
+<p>Also add information on how to contact you by electronic and paper mail.</p>
+
+<p>If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:</p>
+
+<pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+</pre>
+
+<p>The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>
+
+<p>You should also get your employer (if you work as a programmer) or school,
+if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>
+
+<p>The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;<a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>&gt;.</p>
+
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/help.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+/**
+ * Help plugin client script
+ * @version 1.4
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+// hook into switch-task event to open the help window
+if (window.rcmail) {
+    rcmail.addEventListener('beforeswitch-task', function(prop) {
+        // catch clicks to help task button
+        if (prop == 'help') {
+            if (rcmail.task == 'help')  // we're already there
+                return false;
+
+            var url = rcmail.url('help/index', { _rel: rcmail.task + (rcmail.env.action ? '/'+rcmail.env.action : '') });
+            if (rcmail.env.help_open_extwin) {
+                rcmail.open_window(url, 1020, false);
+            }
+            else {
+                rcmail.redirect(url, false);
+            }
+
+            return false;
+      }
+  });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/help.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+/**
+ * Help plugin client script
+ * @version 1.4
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&rcmail.addEventListener("beforeswitch-task",function(a){if("help"==a){if("help"==rcmail.task)return!1;a=rcmail.url("help/index",{_rel:rcmail.task+(rcmail.env.action?"/"+rcmail.env.action:"")});rcmail.env.help_open_extwin?rcmail.open_window(a,1020,!1):rcmail.redirect(a,!1);return!1}});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/help.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,164 @@
+<?php
+
+/**
+ * Roundcube Help Plugin
+ *
+ * @author Aleksander 'A.L.E.C' Machniak
+ * @author Thomas Bruederli <thomas@roundcube.net>
+ * @license GNU GPLv3+
+ *
+ * Configuration (see config.inc.php.dist)
+ * 
+ **/
+
+class help extends rcube_plugin
+{
+    // all task excluding 'login' and 'logout'
+    public $task = '?(?!login|logout).*';
+    // we've got no ajax handlers
+    public $noajax = true;
+    // skip frames
+    public $noframe = true;
+
+    function init()
+    {
+        $this->load_config();
+        $this->add_texts('localization/', false);
+
+        // register task
+        $this->register_task('help');
+
+        // register actions
+        $this->register_action('index', array($this, 'action'));
+        $this->register_action('about', array($this, 'action'));
+        $this->register_action('license', array($this, 'action'));
+
+        $this->add_hook('startup', array($this, 'startup'));
+        $this->add_hook('error_page', array($this, 'error_page'));
+    }
+
+    function startup($args)
+    {
+        $rcmail = rcmail::get_instance();
+
+        // add taskbar button
+        $this->add_button(array(
+            'command'    => 'help',
+            'class'      => 'button-help',
+            'classsel'   => 'button-help button-selected',
+            'innerclass' => 'button-inner',
+            'label'      => 'help.help',
+        ), 'taskbar');
+
+        $this->include_script('help.js');
+        $rcmail->output->set_env('help_open_extwin', $rcmail->config->get('help_open_extwin', false), true);
+
+        // add style for taskbar button (must be here) and Help UI
+        $skin_path = $this->local_skin_path();
+        if (is_file($this->home . "/$skin_path/help.css")) {
+            $this->include_stylesheet("$skin_path/help.css");
+        }
+    }
+
+    function action()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // register UI objects
+        $rcmail->output->add_handlers(array(
+            'helpcontent' => array($this, 'content'),
+            'tablink' => array($this, 'tablink'),
+        ));
+
+        if ($rcmail->action == 'about')
+            $rcmail->output->set_pagetitle($this->gettext('about'));
+        else if ($rcmail->action == 'license')
+            $rcmail->output->set_pagetitle($this->gettext('license'));
+        else
+            $rcmail->output->set_pagetitle($this->gettext('help'));
+
+        $rcmail->output->send('help.help');
+    }
+
+    function tablink($attrib)
+    {
+        $rcmail = rcmail::get_instance();
+
+        $attrib['name'] = 'helplink' . $attrib['action'];
+        $attrib['href'] = $rcmail->url(array('_action' => $attrib['action'], '_extwin' => !empty($_REQUEST['_extwin']) ? 1 : null));
+
+        // title might be already translated here, so revert to it's initial value
+        // so button() will translate it correctly
+        $attrib['title'] = $attrib['label'];
+
+        return $rcmail->output->button($attrib);
+    }
+
+    function content($attrib)
+    {
+        $rcmail = rcmail::get_instance();
+
+        switch ($rcmail->action) {
+            case 'about':
+                if (is_readable($this->home . '/content/about.html')) {
+                    return @file_get_contents($this->home . '/content/about.html');
+                }
+                $default = $rcmail->url(array('_task' => 'settings', '_action' => 'about', '_framed' => 1));
+                $src     = $rcmail->config->get('help_about_url', $default);
+                break;
+
+            case 'license':
+                if (is_readable($this->home . '/content/license.html')) {
+                    return @file_get_contents($this->home . '/content/license.html');
+                }
+                $src = $rcmail->config->get('help_license_url', 'http://www.gnu.org/licenses/gpl-3.0-standalone.html');
+                break;
+
+            default:
+                $src = $rcmail->config->get('help_source');
+
+                // resolve task/action for depp linking
+                $index_map = $rcmail->config->get('help_index_map', array());
+                $rel = $_REQUEST['_rel'];
+                list($task,$action) = explode('/', $rel);
+                if ($add = $index_map[$rel])
+                    $src .= $add;
+                else if ($add = $index_map[$task])
+                    $src .= $add;
+                break;
+        }
+
+        // default content: iframe
+        if (!empty($src)) {
+            $attrib['src'] = $this->resolve_language($src);
+        }
+
+        if (empty($attrib['id']))
+            $attrib['id'] = 'rcmailhelpcontent';
+
+        $attrib['name'] = $attrib['id'];
+
+        return $rcmail->output->frame($attrib);
+    }
+
+    function error_page($args)
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($args['code'] == 403 && $rcmail->request_status == rcube::REQUEST_ERROR_URL && ($url = $rcmail->config->get('help_csrf_info'))) {
+            $args['text'] .= '<p>' . html::a(array('href' => $url, 'target' => '_blank'), $this->gettext('csrfinfo')) . '</p>';
+        }
+
+        return $args;
+    }
+
+    private function resolve_language($path)
+    {
+        // resolve language placeholder
+        $rcmail  = rcmail::get_instance();
+        $langmap = $rcmail->config->get('help_language_map', array('*' => 'en_US'));
+        $lang    = $langmap[$_SESSION['language']] ?: $langmap['*'];
+
+        return str_replace('%l', $lang, $path);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'مساعدة';
+$labels['about'] = 'حوْل';
+$labels['license'] = 'الرخصة';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ayuda';
+$labels['about'] = 'Tocante a';
+$labels['license'] = 'Llicencia';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Kömək';
+$labels['about'] = 'Haqqında';
+$labels['license'] = 'Lisenziya';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Дапамога';
+$labels['about'] = 'ÐпіÑанне';
+$labels['license'] = 'ЛіцÑнзіÑ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Помощ';
+$labels['about'] = 'ОтноÑно';
+$labels['license'] = 'Лиценз';
+$labels['csrfinfo'] = 'Прочети повече за CSRF и как Ñи защитен';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Skoazell';
+$labels['about'] = 'Diwar-benn';
+$labels['license'] = 'Lañvaz';
+$labels['csrfinfo'] = 'Gouzout hiroc\'h a-zivout an CSRF ha penaos e warezomp ac\'hanoc\'h';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Pomoć';
+$labels['about'] = 'O programu';
+$labels['license'] = 'Licenca';
+$labels['csrfinfo'] = 'Saznajte viÅ¡e o CSRF i naÄinu na koji vas Å¡titimo';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ajuda';
+$labels['about'] = 'Quant a';
+$labels['license'] = 'Llicència';
+$labels['csrfinfo'] = 'Llegeix més sobre CSRF i com et protegim';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Nápověda';
+$labels['about'] = 'O aplikaci';
+$labels['license'] = 'Licence';
+$labels['csrfinfo'] = 'PÅ™eÄtÄ›te si více o útoku typu CSRF a jak vás chráníme';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Cymorth';
+$labels['about'] = 'Amdan';
+$labels['license'] = 'Trwydded';
+$labels['csrfinfo'] = 'Darllenwch fwy am CSRF a sut rydyn ni\'n amddiffyn chi.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjælp';
+$labels['about'] = 'Om';
+$labels['license'] = 'Licens';
+$labels['csrfinfo'] = 'Læs mere om CSRF og om hvordan vi beskytter dig';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hilfe';
+$labels['about'] = 'Ãœber';
+$labels['license'] = 'Lizenz';
+$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie davor schützen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hilfe';
+$labels['about'] = 'Ãœber';
+$labels['license'] = 'Lizenz';
+$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie schützen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Βοήθεια';
+$labels['about'] = 'Σχετικά';
+$labels['license'] = 'Άδεια χÏήσης';
+$labels['csrfinfo'] = 'Διαβάστε πεÏισσότεÏα για το CSRF και το πως σε Ï€ÏοστατεÏουμε';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'About';
+$labels['license'] = 'License';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'About';
+$labels['license'] = 'Licence';
+$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+
+$labels = array();
+$labels['help'] = 'Help';
+$labels['about'] = 'About';
+$labels['license'] = 'License';
+$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Helpo';
+$labels['about'] = 'Pri';
+$labels['license'] = 'Permesilo';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ayuda';
+$labels['about'] = 'Sobre';
+$labels['license'] = 'Licencia';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ayuda';
+$labels['about'] = 'Acerca de';
+$labels['license'] = 'Licencia';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ayuda';
+$labels['about'] = 'Acerca de';
+$labels['license'] = 'Licencia';
+$labels['csrfinfo'] = 'Lea más sobre CSRF y cómo le protegemos';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Abi';
+$labels['about'] = 'Roundcube info';
+$labels['license'] = 'Litsents';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Laguntza';
+$labels['about'] = 'Honi buruz';
+$labels['license'] = 'Lizentzia';
+$labels['csrfinfo'] = 'Irakurri gehiago CSRF-ez eta nola babesten zaitugun';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'راهنما';
+$labels['about'] = 'درباره نرم اÙزار';
+$labels['license'] = 'حق نشر';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'راهنما';
+$labels['about'] = 'درباره';
+$labels['license'] = 'گواهینامه';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ohje';
+$labels['about'] = 'Tietoja';
+$labels['license'] = 'Lisenssi';
+$labels['csrfinfo'] = 'Lue lisää CSRF:stä ja kuinka suojaamme sinua';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjálp';
+$labels['about'] = 'Um';
+$labels['license'] = 'Heimildarskjal';
+$labels['csrfinfo'] = 'Les meira um CSRF, og um hvussu tað kann verja teg';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'About';
+$labels['license'] = 'License';
+$labels['csrfinfo'] = 'Apprenez-en davantage sur les attaques CSRF et comment nous vous protégeons';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'Oer';
+$labels['license'] = 'Lisinsje';
+$labels['csrfinfo'] = 'Lês mear oer CSRF en hoe\'t wy jo beskermje';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Cabhair';
+$labels['about'] = 'Maidir leis';
+$labels['license'] = 'Ceadúnas';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Axuda';
+$labels['about'] = 'Acerca de';
+$labels['license'] = 'Licenza';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'עזרה';
+$labels['about'] = '×ודות';
+$labels['license'] = 'רשיון';
+$labels['csrfinfo'] = '× × ×œ×§×¨×•× ×›×¢×ª ×ודות CSRF וכיצד ×נו ×ž×’×™× ×™× ×¢×œ×™×š.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Pomoć';
+$labels['about'] = 'O programu';
+$labels['license'] = 'Licenca';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Súgó';
+$labels['about'] = 'Névjegy';
+$labels['license'] = 'Licensz';
+$labels['csrfinfo'] = 'Olvass többet a CSRF-ről és arról hogy védünk meg ettöl';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Õ•Õ£Õ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶';
+$labels['about'] = 'Õ†Õ¯Õ¡Ö€Õ¡Õ£Õ«Ö€';
+$labels['license'] = 'Ô±Ö€Õ¿Õ¸Õ¶Õ¡Õ£Õ«Ö€';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Adjuta';
+$labels['about'] = 'A proposito';
+$labels['license'] = 'Licentia';
+$labels['csrfinfo'] = 'Lege plus sur CSRF e como nos te protege';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Bantuan';
+$labels['about'] = 'Tentang';
+$labels['license'] = 'Lisensi';
+$labels['csrfinfo'] = 'Baca lebih jauh tentang CSRF dan bagaimana kami melindungi Anda';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjálp';
+$labels['about'] = 'Um hugbúnaðinn';
+$labels['license'] = 'Notkunarleyfi';
+$labels['csrfinfo'] = 'Lestumeira uF og hvernig við verjum þig';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Aiuto';
+$labels['about'] = 'Informazioni';
+$labels['license'] = 'Licenza';
+$labels['csrfinfo'] = 'Maggiori informazioni su CSRF e su come ti proteggiamo';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ヘルプ';
+$labels['about'] = 'ã“ã®ãƒ—ログラムã«ã¤ã„ã¦';
+$labels['license'] = 'ライセンス';
+$labels['csrfinfo'] = 'CSRFã¨å®‰å…¨ã‚’ä¿ã¤æ–¹æ³•ã«ã¤ã„ã¦ã•ã‚‰ã«èª­ã‚€';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ជំនួយ';
+$labels['about'] = 'អំពី';
+$labels['license'] = 'អាជ្ញាបáŸážŽáŸ’ណ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/kn_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ಸಹಾಯ';
+$labels['license'] = 'ಪರವಾನಗಿ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ë„움ë§';
+$labels['about'] = 'ì •ë³´';
+$labels['license'] = 'ë¼ì´ì„ ìŠ¤';
+$labels['csrfinfo'] = 'CSRF ë° ì‚¬ìš©ìž ë³´í˜¸ì— ëŒ€í•´ ë” ë§Žì€ ì •ë³´ 확ì¸';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Alîkarî';
+$labels['about'] = 'Dervar';
+$labels['license'] = 'Lîsans';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'یارمەتی';
+$labels['about'] = 'دەربارە';
+$labels['license'] = 'مۆڵەت';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hëllef';
+$labels['about'] = 'Iwwert';
+$labels['license'] = 'Lizenz';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Žinynas';
+$labels['about'] = 'Apie';
+$labels['license'] = 'Licencija';
+$labels['csrfinfo'] = 'IÅ¡samiau apie CSRF ir apie tai, kaip jie jus apsaugo.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Palīdzība';
+$labels['about'] = 'Par';
+$labels['license'] = 'Licence';
+$labels['csrfinfo'] = 'LasÄ«t papildus par "vairÄku vietņu pieprasÄ«juma viltoÅ¡anu" (CSRF) un kÄ no tÄ sevi aizsargÄt.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Помош';
+$labels['about'] = 'За';
+$labels['license'] = 'Лиценца';
+$labels['csrfinfo'] = 'Прочитај повеќе за CSRF и како ние те штитиме ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'സഹായം';
+$labels['about'] = 'വിവരം';
+$labels['license'] = 'à´…à´¨àµà´®à´¤à´¿';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ТуÑламж';
+$labels['about'] = 'Танилцуулга';
+$labels['license'] = 'Лиценз';
+$labels['csrfinfo'] = 'Бид таныг Ñаж хамгаалж байгаа буюу CSRF-ын тухай дÑлгÑÑ€Ñнгүй унших';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjelp';
+$labels['about'] = 'Om';
+$labels['license'] = 'Lisensvilkår';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'Over';
+$labels['license'] = 'Licentie';
+$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Help';
+$labels['about'] = 'Over';
+$labels['license'] = 'Licentie';
+$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjelp';
+$labels['about'] = 'Om';
+$labels['license'] = 'Lisens';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Pomoc';
+$labels['about'] = 'O programie';
+$labels['license'] = 'Licencja';
+$labels['csrfinfo'] = 'Przeczytaj więcej o CSRF i w jaki sposób zabezpieczamy ciebie.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ajuda';
+$labels['about'] = 'Sobre';
+$labels['license'] = 'Licença';
+$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós protegemos você';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ajuda';
+$labels['about'] = 'Sobre...';
+$labels['license'] = 'Licença';
+$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós o protegemos';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ajutor';
+$labels['about'] = 'Despre';
+$labels['license'] = 'Licența';
+$labels['csrfinfo'] = 'Citiți mai multe despre CSRF și cum vă protejăm';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Помощь';
+$labels['about'] = 'О программе';
+$labels['license'] = 'ЛицензиÑ';
+$labels['csrfinfo'] = 'Узнайте больше о CSRF и о том как мы защищаем ваÑ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Pomocník';
+$labels['about'] = 'O aplikácii';
+$labels['license'] = 'Licencia';
+$labels['csrfinfo'] = 'PreÄítajte si viac o útokoch typu CSRF a o tom, ako vás môžeme pred nimi ochrániÅ¥';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'PomoÄ';
+$labels['about'] = 'Vizitka';
+$labels['license'] = 'Licenca';
+$labels['csrfinfo'] = 'Preberite veÄ o CSRF in kako ste zaÅ¡Äiteni';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Ndihmë';
+$labels['about'] = 'Rreth';
+$labels['license'] = 'Licencë';
+$labels['csrfinfo'] = 'Lexoni më tepër rreth CSRF-së dhe se si ju mbrojmë';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Помоћ';
+$labels['about'] = 'О програму';
+$labels['license'] = 'Лиценца';
+$labels['csrfinfo'] = 'Прочитајте о ЦСРФ-у и како Ð²Ð°Ñ ÑˆÑ‚Ð¸Ñ‚Ð¸Ð¼Ð¾';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Hjälp';
+$labels['about'] = 'Om';
+$labels['license'] = 'Licens';
+$labels['csrfinfo'] = 'Läs mer om CSRF och skyddet mot detta';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'ช่วยเหลือ';
+$labels['about'] = 'เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š';
+$labels['license'] = 'ลิขสิทธิ์';
+$labels['csrfinfo'] = 'อ่านเพิ่มเติมเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š CSRF à¹à¸¥à¸°à¸§à¸´à¸˜à¸µà¸—ี่เราปà¸à¸›à¹‰à¸­à¸‡à¸„ุณ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/ti.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'መáˆáˆƒáˆª';
+$labels['about'] = 'ብዛዕባ';
+$labels['license'] = 'áቓድ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Yardım';
+$labels['about'] = 'Hakkında';
+$labels['license'] = 'Lisans';
+$labels['csrfinfo'] = 'Korunmanız ve CSRF hakkında ayrıntılı bilgi.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/tzl.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Aßistançéu';
+$labels['about'] = 'Över';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Допомога';
+$labels['about'] = 'Про програму';
+$labels['license'] = 'ЛіцензіÑ';
+$labels['csrfinfo'] = 'ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про CSRF Ñ– Ñк ми Ð’Ð°Ñ Ð·Ð°Ñ…Ð¸Ñ‰Ð°Ñ”Ð¼Ð¾';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Yordam';
+$labels['about'] = 'Biz haqimizda';
+$labels['license'] = 'Litsenziya';
+$labels['csrfinfo'] = 'CSRF haqida  va qanday himoya qilishimiz haqida ko‘proq o‘qing';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = 'Trợ giúp';
+$labels['about'] = 'Giới thiệu';
+$labels['license'] = 'Bản quyá»n';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = '帮助';
+$labels['about'] = '关于';
+$labels['license'] = '许å¯åè®®';
+$labels['csrfinfo'] = '了解 CSRF 如何ä¿æŠ¤æ‚¨';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/help/localization/<lang>.inc                                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Help plugin                |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
+*/
+$labels['help'] = '說明';
+$labels['about'] = '關於';
+$labels['license'] = '授權';
+$labels['csrfinfo'] = '閱讀更多有關「跨站å½é€ è¦æ±‚(CSRF)ã€çš„資訊,並了解我們的軟體如何防止您å—騙';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/classic/help.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,43 @@
+/***** Roundcube|Mail Help task styles *****/
+
+#taskbar a.button-help
+{
+  background-image: url('help.gif');
+}
+
+.extwin #tabsbar
+{
+  top: 21px;
+  left: 20px;
+  right: 100px;
+  border-bottom: 0;
+}
+
+.helpwin .closelink {
+	position: absolute;
+	top: 20px;
+	right: 20px;
+}
+
+.help-box
+{
+  overflow: auto;
+  background-color: #F2F2F2;
+}
+
+#helplicense, #helpabout
+{
+  width: 46em;
+  padding: 1em 2em;
+}
+
+#helplicense a, #helpabout a
+{
+  color: #900;
+}
+
+#helpabout
+{
+  margin: 0 auto;
+}
+
Binary file plugins/help/skins/classic/help.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/classic/help.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#taskbar a.button-help{background-image:url('help.gif')}.extwin #tabsbar{top:21px;left:20px;right:100px;border-bottom:0}.helpwin .closelink{position:absolute;top:20px;right:20px}.help-box{overflow:auto;background-color:#f2f2f2}#helplicense,#helpabout{width:46em;padding:1em 2em}#helplicense a,#helpabout a{color:#900}#helpabout{margin:0 auto}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/classic/templates/help.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/this/help.css" />
+<script type="text/javascript">
+function help_init_settings_tabs()
+{
+    var action, tab = '#helptabindex';
+    if (window.rcmail && (action = rcmail.env.action)) {
+        tab = '#helptab' + (action ? action : 'index');
+    }
+    $(tab).addClass('tablink-selected');
+}
+</script>
+</head>
+<roundcube:if condition="env:extwin" />
+<body class="extwin helpwin">
+<roundcube:object name="message" id="message" />
+<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
+<roundcube:else />
+<body class="helpwin">
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:endif />
+
+<div id="tabsbar">
+<span id="helptabindex" class="tablink"><roundcube:object name="tablink" action="index" type="link" label="help.help" title="help.help" /></span>
+<span id="helptababout" class="tablink"><roundcube:object name="tablink" action="about" type="link" label="help.about" title="help.about" class="tablink" /></span>
+<span id="helptablicense" class="tablink"><roundcube:object name="tablink" action="license" type="link" label="help.license" title="help.license" class="tablink" /></span>
+<roundcube:container name="helptabs" id="helptabsbar" />
+<script type="text/javascript"> if (window.rcmail) rcmail.add_onload(help_init_settings_tabs);</script>
+</div>
+
+<div id="mainscreen" class="box help-box">
+<roundcube:object name="helpcontent" id="helpcontentframe" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/larry/help.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+
+#helpcontentframe {
+	border: 0;
+	border-radius: 4px;
+}
+
+#mainscreen .readtext {
+	margin: 20px;
+}
+
+#helptoolbar {
+	position: absolute;
+	top: -6px;
+	left: 0;
+	height: 40px;
+	white-space: nowrap;
+}
+
+#taskbar a.button-help span.button-inner {
+	background: url(help.png) 0 0 no-repeat;
+	height: 19px;
+}
+
+#taskbar a.button-help:hover span.button-inner,
+#taskbar a.button-help.button-selected span.button-inner {
+	background: url(help.png) 0 -24px no-repeat;
+	height: 19px;
+}
+
+.toolbar a.button.help {
+	background: url(help.png) center -51px no-repeat;
+}
+
+.toolbar a.button.about {
+	background: url(help.png) center -89px no-repeat;
+}
+
+.toolbar a.button.license {
+	background: url(help.png) center -130px no-repeat;
+}
+
+.iframebox.help_license {
+	overflow: auto;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/larry/help.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#helpcontentframe{border:0;border-radius:4px}#mainscreen .readtext{margin:20px}#helptoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap}#taskbar a.button-help span.button-inner{background:url(help.png) 0 0 no-repeat;height:19px}#taskbar a.button-help:hover span.button-inner,#taskbar a.button-help.button-selected span.button-inner{background:url(help.png) 0 -24px no-repeat;height:19px}.toolbar a.button.help{background:url(help.png) center -51px no-repeat}.toolbar a.button.about{background:url(help.png) center -89px no-repeat}.toolbar a.button.license{background:url(help.png) center -130px no-repeat}.iframebox.help_license{overflow:auto}
\ No newline at end of file
Binary file plugins/help/skins/larry/help.png has changed
Binary file plugins/help/skins/larry/icons.psd has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/help/skins/larry/templates/help.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="extwin"><roundcube:else /><body><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<div id="helptoolbar" class="toolbar">
+<roundcube:object name="tablink" action="index" type="link" label="help.help" title="help.help" class="button help" />
+<roundcube:object name="tablink" action="about" type="link" label="help.about" title="help.about" class="button about" />
+<roundcube:object name="tablink" action="license" type="link" label="help.license" title="help.license" class="button license" />
+<roundcube:container name="helptabs" id="helptabsbar" />
+</div>
+
+<div id="pluginbody" class="uibox offset">
+	<div class="iframebox help_<roundcube:var name='env:action' />">
+		<roundcube:object name="helpcontent" id="helpcontentframe" style="width:100%; height:100%" frameborder="0" src="/watermark.html" />
+	</div>
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/hide_blockquote",
+    "type": "roundcube-plugin",
+    "description": "This allows to hide long blocks of cited text in messages.",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/hide_blockquote.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+/**
+ * Hide Blockquotes plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+if (window.rcmail)
+  rcmail.addEventListener('init', function() { hide_blockquote(); });
+
+function hide_blockquote()
+{
+  var limit = rcmail.env.blockquote_limit;
+
+  if (limit <= 0)
+    return;
+
+  $('div.message-part div.pre > blockquote', $('#messagebody')).each(function() {
+    var div, link, q = $(this),
+      text = $.trim(q.text()),
+      res = text.split(/\n/);
+
+    if (res.length <= limit) {
+      // there can be also a block with very long wrapped line
+      // assume line height = 15px
+      if (q.height() <= limit * 15)
+        return;
+    }
+
+    div = $('<blockquote class="blockquote-header">')
+      .css({'white-space': 'nowrap', overflow: 'hidden', position: 'relative'})
+      .text(res[0]);
+
+    link = $('<span class="blockquote-link"></span>')
+      .css({position: 'absolute', 'z-Index': 2})
+      .text(rcmail.get_label('hide_blockquote.show'))
+      .data('parent', div)
+      .click(function() {
+        var t = $(this), parent = t.data('parent'), visible = parent.is(':visible');
+
+        t.text(rcmail.get_label(visible ? 'hide' : 'show', 'hide_blockquote'))
+          .detach().appendTo(visible ? q : parent);
+
+        parent[visible ? 'hide' : 'show']();
+        q[visible ? 'show' : 'hide']();
+      });
+
+    link.appendTo(div);
+
+    // Modify blockquote
+    q.hide().css({position: 'relative'}).before(div);
+  });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/hide_blockquote.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+/**
+ * Hide Blockquotes plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&rcmail.addEventListener("init",function(){hide_blockquote()});
+function hide_blockquote(){var b=rcmail.env.blockquote_limit;0>=b||$("div.message-part div.pre > blockquote",$("#messagebody")).each(function(){var c=$(this);var a=$.trim(c.text()).split(/\n/);a.length<=b&&c.height()<=15*b||(a=$('<blockquote class="blockquote-header">').css({"white-space":"nowrap",overflow:"hidden",position:"relative"}).text(a[0]),$('<span class="blockquote-link"></span>').css({position:"absolute","z-Index":2}).text(rcmail.get_label("hide_blockquote.show")).data("parent",a).click(function(){var a=
+$(this),b=a.data("parent"),d=b.is(":visible");a.text(rcmail.get_label(d?"hide":"show","hide_blockquote")).detach().appendTo(d?c:b);b[d?"hide":"show"]();c[d?"show":"hide"]()}).appendTo(a),c.hide().css({position:"relative"}).before(a))})};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/hide_blockquote.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * Quotation block hidding
+ *
+ * Plugin that adds a possibility to hide long blocks of cited text in messages.
+ *
+ * Configuration:
+ * // Minimum number of citation lines. Longer citation blocks will be hidden.
+ * // 0 - no limit (no hidding).
+ * $config['hide_blockquote_limit'] = 0;
+ *
+ * @license GNU GPLv3+
+ * @author Aleksander Machniak <alec@alec.pl>
+ */
+class hide_blockquote extends rcube_plugin
+{
+    public $task = 'mail|settings';
+
+    function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($rcmail->task == 'mail'
+            && ($rcmail->action == 'preview' || $rcmail->action == 'show')
+            && ($limit = $rcmail->config->get('hide_blockquote_limit'))
+        ) {
+            // include styles
+            $this->include_stylesheet($this->local_skin_path() . "/style.css");
+
+            // Script and localization
+            $this->include_script('hide_blockquote.js');
+            $this->add_texts('localization', true);
+
+            // set env variable for client
+            $rcmail->output->set_env('blockquote_limit', $limit);
+        }
+        else if ($rcmail->task == 'settings') {
+            $dont_override = $rcmail->config->get('dont_override', array());
+            if (!in_array('hide_blockquote_limit', $dont_override)) {
+                $this->add_hook('preferences_list', array($this, 'prefs_table'));
+                $this->add_hook('preferences_save', array($this, 'save_prefs'));
+            }
+        }
+    }
+
+    function prefs_table($args)
+    {
+        if ($args['section'] != 'mailview') {
+            return $args;
+        }
+
+        $this->add_texts('localization');
+
+        $rcmail   = rcmail::get_instance();
+        $limit    = (int) $rcmail->config->get('hide_blockquote_limit');
+        $field_id = 'hide_blockquote_limit';
+        $input    = new html_inputfield(array('name' => '_'.$field_id, 'id' => $field_id, 'size' => 5));
+
+        $args['blocks']['main']['options']['hide_blockquote_limit'] = array(
+            'title'   => $this->gettext('quotelimit'),
+            'content' => $input->show($limit ?: '')
+        );
+
+        return $args;
+    }
+
+    function save_prefs($args)
+    {
+        if ($args['section'] == 'mailview') {
+            $args['prefs']['hide_blockquote_limit'] = (int) rcube_utils::get_input_value('_hide_blockquote_limit', rcube_utils::INPUT_POST);
+        }
+
+        return $args;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'إخÙاء';
+$labels['show'] = 'إظهار';
+$labels['quotelimit'] = 'اخ٠الاقتباس اذا كان عدد الاسطر اكبر من ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Anubrir';
+$labels['show'] = 'Amosar';
+$labels['quotelimit'] = 'Anubrir la citación cuando la cuenta de llinies seya mayor de';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Gizlət';
+$labels['show'] = 'Göstər';
+$labels['quotelimit'] = 'Sayğac xətti çoxdursa sitatı gizlə';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Схаваць';
+$labels['show'] = 'Паказаць';
+$labels['quotelimit'] = 'Хаваць цытаванне, калі колькаÑць радкоў пераўзыходзіць';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Скрий';
+$labels['show'] = 'Покажи';
+$labels['quotelimit'] = 'Скрива цитатите когато Ð±Ñ€Ð¾Ñ Ñ€ÐµÐ´Ð¾Ð²Ðµ е по-голÑм от';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Kuzhat';
+$labels['show'] = 'Diskouez';
+$labels['quotelimit'] = 'Kuzhat ar meneg pa\'z\'eo re uhel niver a linennnoù eus';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Sakrij';
+$labels['show'] = 'Prikaži';
+$labels['quotelimit'] = 'Sakrij citate kada je broj linija veći od';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Amaga';
+$labels['show'] = 'Mostra';
+$labels['quotelimit'] = 'Amaga la cita quan el nombre de línies sigui més gran de';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Skrýt';
+$labels['show'] = 'Zobrazit';
+$labels['quotelimit'] = 'Skrýt citaci pokud je poÄet řádků vÄ›tší než';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Cuddio';
+$labels['show'] = 'Dangos';
+$labels['quotelimit'] = 'Cuddio dyfynniad pan mae\'r nifer o linellau yn fwy na';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Skjul';
+$labels['show'] = 'Vis';
+$labels['quotelimit'] = 'Skjul citat når antallet af linjer er højere end';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'ausblenden';
+$labels['show'] = 'einblenden';
+$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'ausblenden';
+$labels['show'] = 'einblenden';
+$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'ΑποκÏυψη';
+$labels['show'] = 'Εμφάνιση';
+$labels['quotelimit'] = 'ΑπόκÏυψη παÏαπομπων όταν ο αÏιθμός γÏαμμών είναι μεγαλÏτεÏος από';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Hide';
+$labels['show'] = 'Show';
+$labels['quotelimit'] = 'Hide citation when lines count is greater than';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Hide';
+$labels['show'] = 'Show';
+$labels['quotelimit'] = 'Hide citation when lines count is greater than';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+
+$labels = array();
+$labels['hide'] = 'Hide';
+$labels['show'] = 'Show';
+$labels['quotelimit'] = 'Hide citation when lines count is greater than';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'KaÅi';
+$labels['show'] = 'Montri';
+$labels['quotelimit'] = 'KaÅi citaĵon kiam la nombro de linioj estas pligranda ol';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ocultar';
+$labels['show'] = 'Mostrar';
+$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas sea mayor a ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ocultar';
+$labels['show'] = 'Mostrar';
+$labels['quotelimit'] = 'Ocultar el mail citado cuando el número de líneas sea mayor que';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ocultar';
+$labels['show'] = 'Mostrar';
+$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas es mayor que';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Peida';
+$labels['show'] = 'Näita';
+$labels['quotelimit'] = 'Peida tsitaat kui ridade arv on suurem kui';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ezkutatu';
+$labels['show'] = 'Erakutsi';
+$labels['quotelimit'] = 'Ezkutatu aipamena lerroen kopurua hau baino handiagoa denean';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'مخÙÛŒ کردن';
+$labels['show'] = 'نشان دادن';
+$labels['quotelimit'] = 'پنهان کردن نقل‌قول وقتی تعداد خطوط بیشتر است از';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Piilota';
+$labels['show'] = 'Näytä';
+$labels['quotelimit'] = 'Piilota lainaus rivejä ollessa enemmän kuin';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Goym';
+$labels['show'] = 'Vís';
+$labels['quotelimit'] = 'Goym stevning tá ið tað eru meiri reglur enn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Masquer';
+$labels['show'] = 'Montrer';
+$labels['quotelimit'] = 'Masquer la citation quand le nombre de lignes est supérieur à';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ferstopje';
+$labels['show'] = 'Fertoane';
+$labels['quotelimit'] = 'Sitaasje ferstopje at rigel telling grutter is as';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Folaigh';
+$labels['show'] = 'Taispeáin';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Agochar';
+$labels['show'] = 'Amosar';
+$labels['quotelimit'] = 'Agochar mencións cando haxa demasiadas liñas';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'הסתר';
+$labels['show'] = 'הצג';
+$labels['quotelimit'] = 'הסתר ציטוט ×›×שר מספר השורות גדול מ-';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Sakrij';
+$labels['show'] = 'Pokaži';
+$labels['quotelimit'] = 'Sakrij citat ako broj linija prelazi';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Elrejtés';
+$labels['show'] = 'Megjelenítés';
+$labels['quotelimit'] = 'Idézet elrejtése ha a sorok száma több mint';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ô¹Õ¡Ö„ÖÕ¶Õ¥Õ¬';
+$labels['show'] = 'Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬';
+$labels['quotelimit'] = 'Ô¹Õ¡Ö„ÖÕ¶Õ¥Õ¬ ÖÕ«Õ¿Õ¸Ö‚Õ´Õ¨ Õ¥Ö€Õ¢ Õ¿Õ¸Õ²Õ¥Ö€Õ« Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ Õ£Õ¥Ö€Õ¡Õ¦Õ¡Õ¶ÖÕ¸Ö‚Õ´ Õ§';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Celar';
+$labels['show'] = 'Monstrar';
+$labels['quotelimit'] = 'Celar le citation quando le numero de lineas es superior a';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Sembunyi';
+$labels['show'] = 'Tampil';
+$labels['quotelimit'] = 'Sembunyikan kutipan ketika jumlah baris lebih besar dari';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Fela';
+$labels['show'] = 'Birta';
+$labels['quotelimit'] = 'Fela tilvitnun þegar fjöldi lína er meiri en';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Nascondi';
+$labels['show'] = 'Mostra';
+$labels['quotelimit'] = 'Nascondi la citazione quando il numero di righe è maggiore di';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'éš ã™';
+$labels['show'] = '表示';
+$labels['quotelimit'] = '次ã®è¡Œæ•°ã‚ˆã‚Šå¤šã„引用をéžè¡¨ç¤º';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ka_GE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['show'] = 'ჩვენებáƒ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'លាក់';
+$labels['show'] = 'បង្ហាញ';
+$labels['quotelimit'] = 'លាក់​អážáŸ’ážáž”ទ​សម្រង់​ពáŸáž›â€‹áž…ំនួន​ជួរ​ធំ​ជាង';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = '숨기기';
+$labels['show'] = '표시';
+$labels['quotelimit'] = 'í–‰ 개수가 다ìŒë³´ë‹¤ ë§Žì„ ë•Œ ì¸ìš©êµ¬ë¥¼ 숨김:';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Veşêre';
+$labels['show'] = 'Nîşan bide';
+$labels['quotelimit'] = 'Jêgirtinê bigire dema ku hejmara rêzan zêdetir be ji';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Verstoppen';
+$labels['show'] = 'Weisen';
+$labels['quotelimit'] = 'Zitat verstoppe wann d\'Zeilenunzuel méi grouss ass ewéi';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'PaslÄ—pti';
+$labels['show'] = 'Parodyti';
+$labels['quotelimit'] = 'PaslÄ—pti citatÄ…, kai joje eiluÄių daugiau negu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Slēpt';
+$labels['show'] = 'RÄdÄ«t';
+$labels['quotelimit'] = 'SlÄ“pt citÄtu kad lÄ«niju skaits ir lielÄks kÄ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Скриј ';
+$labels['show'] = 'Покажи';
+$labels['quotelimit'] = 'Скриј цитат кога бројот на линии е поголем од';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'മറയàµà´•àµà´•àµà´•';
+$labels['show'] = 'à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•';
+$labels['quotelimit'] = 'ഇതിലàµà´‚ കൂടàµà´¤à´²à´¾à´£àµ വരികളàµà´Ÿàµ† à´Žà´£àµà´£à´®àµ†à´™àµà´•à´¿àµ½ അവലംബം മറയàµà´•àµà´•àµà´•';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ðуух';
+$labels['show'] = 'Харах';
+$labels['quotelimit'] = 'Ð¥ÑрвÑÑ Ð¼Ó©Ñ€Ð¸Ð¹Ð½ тоо Ð´Ð°Ñ€Ð°Ð°Ñ…Ð°Ð°Ñ Ð¸Ñ… бол ишлÑлийг харуулахгүй:';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Skjul';
+$labels['show'] = 'Vis';
+$labels['quotelimit'] = 'Skjul sitat når antall linjer er flere enn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Verberg';
+$labels['show'] = 'Weergeven';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Verbergen';
+$labels['show'] = 'Tonen';
+$labels['quotelimit'] = 'Verberg citaat wanneer aantal regels groter is dan';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Gøym';
+$labels['show'] = 'Vis';
+$labels['quotelimit'] = 'Gøym sitat når talet på linjer er større enn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ukryj';
+$labels['show'] = 'Pokaż';
+$labels['quotelimit'] = 'Ukryj blok cytatu gdy liczba linii jest większa od';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ocultar';
+$labels['show'] = 'Exibir';
+$labels['quotelimit'] = 'Ocultar a citação quando o número de linhas for maior que';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ocultar';
+$labels['show'] = 'Mostrar';
+$labels['quotelimit'] = 'Ocultar citação quando o número de linhas for maior que';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ascunde';
+$labels['show'] = 'Afișează';
+$labels['quotelimit'] = 'Ascunde citațiile dacă numărul de linii este mai mare ca';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Скрыть';
+$labels['show'] = 'Показать';
+$labels['quotelimit'] = 'Скрыть цитату, еÑли чиÑло Ñтрок более чем';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Skryť';
+$labels['show'] = 'Zobraziť';
+$labels['quotelimit'] = 'SkryÅ¥ citovaný text, ak je poÄet riadkov väÄší než';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Skrij';
+$labels['show'] = 'Prikaži';
+$labels['quotelimit'] = 'Skrij citiran tekst, ko je Å¡tevilo vrstic veÄje od';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Fshihe';
+$labels['show'] = 'Shfaqe';
+$labels['quotelimit'] = 'Fshihe citimin kur numri i rreshtave është më i madh se';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Сакриј';
+$labels['show'] = 'Прикажи';
+$labels['quotelimit'] = 'Сакриј цитат када је број редова већи од';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Dölj';
+$labels['show'] = 'Visa';
+$labels['quotelimit'] = 'Dölj citat när antalet rader överstiger';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'ซ่อน';
+$labels['show'] = 'à¹à¸ªà¸”ง';
+$labels['quotelimit'] = 'ซ่อนà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¹€à¸¡à¸·à¹ˆà¸­à¸à¸²à¸£à¸™à¸±à¸šà¸šà¸£à¸£à¸—ัดมีค่ามาà¸à¸à¸§à¹ˆà¸²';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Gizle';
+$labels['show'] = 'Görüntüle';
+$labels['quotelimit'] = 'Satır sayısı şundan fazla ise alıntılar gizlensin:';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/tzl.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ascunçarh';
+$labels['show'] = 'Mostrarh';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Приховати';
+$labels['show'] = 'Показати';
+$labels['quotelimit'] = 'Приховати цитуваннÑ, коли кількіÑÑ‚ÑŒ Ñ€Ñдків більша, ніж ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Berkitish';
+$labels['show'] = 'Ko‘rsatish';
+$labels['quotelimit'] = 'Qatorlar soni ko‘proq bo‘lsa, sarlavhani yashirish';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'Ẩn';
+$labels['show'] = 'Hiển thị';
+$labels['quotelimit'] = 'Ẩn trích dẫn khi tổng số dòng lớn hơn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'éšè—';
+$labels['show'] = '显示';
+$labels['quotelimit'] = 'éšè—引用当行数大于';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/hide_blockquote/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
+*/
+$labels['hide'] = 'éš±è—';
+$labels['show'] = '顯示';
+$labels['quotelimit'] = '當行數大於此數目,就隱è—引文:';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/skins/larry/style.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+span.blockquote-link {
+  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+  top: 0;
+  cursor: pointer;
+  right: 5px;
+  height: 14px;
+  min-width: 40px;
+  padding: 0 8px;
+  font-size: 10px;
+  font-weight: bold;
+  color: #a8a8a8;
+  line-height: 14px;
+  text-decoration: none;
+  text-shadow: 0px 1px 1px #fff;
+  text-align: center;
+  border: 1px solid #e8e8e8;
+  border-top: none;
+  border-bottom-right-radius: 6px;
+  border-bottom-left-radius: 6px;
+  background: #f8f8f8;
+  background: -moz-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#e8e8e8));
+  background: -o-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
+  background: -ms-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
+  background: linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
+}
+
+blockquote.blockquote-header {
+  text-overflow: ellipsis !important;
+  padding-right: 60px !important;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/hide_blockquote/skins/larry/style.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+span.blockquote-link{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;top:0;cursor:pointer;right:5px;height:14px;min-width:40px;padding:0 8px;font-size:10px;font-weight:bold;color:#a8a8a8;line-height:14px;text-decoration:none;text-shadow:0 1px 1px #fff;text-align:center;border:1px solid #e8e8e8;border-top:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px;background:#f8f8f8;background:-moz-linear-gradient(top,#f8f8f8 0,#e8e8e8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f8f8f8),color-stop(100%,#e8e8e8));background:-o-linear-gradient(top,#f8f8f8 0,#e8e8e8 100%);background:-ms-linear-gradient(top,#f8f8f8 0,#e8e8e8 100%);background:linear-gradient(top,#f8f8f8 0,#e8e8e8 100%)}blockquote.blockquote-header{text-overflow:ellipsis !important;padding-right:60px !important}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/http_authentication/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/http_authentication",
+    "type": "roundcube-plugin",
+    "description": "HTTP Basic Authentication",
+    "license": "GPLv3+",
+    "version": "1.5",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/http_authentication/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<?php
+
+// HTTP Basic Authentication Plugin options
+// ----------------------------------------
+// Default mail host to log-in using user/password from HTTP Authentication.
+// This is useful if the users are free to choose arbitrary mail hosts (or
+// from a list), but have one host they usually want to log into.
+// Unlike $config['default_host'] this must be a string!
+$config['http_authentication_host'] = '';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/http_authentication/http_authentication.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * HTTP Basic Authentication
+ *
+ * Make use of an existing HTTP authentication and perform login with the existing user credentials
+ *
+ * Configuration:
+ * // redirect the client to this URL after logout. This page is then responsible to clear HTTP auth
+ * $config['logout_url'] = 'http://server.tld/logout.html';
+ *
+ * See logout.html (in this directory) for an example how HTTP auth can be cleared.
+ *
+ * For other configuration options, see config.inc.php.dist!
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ */
+class http_authentication extends rcube_plugin
+{
+    private $redirect_query;
+
+    function init()
+    {
+        $this->add_hook('startup', array($this, 'startup'));
+        $this->add_hook('authenticate', array($this, 'authenticate'));
+        $this->add_hook('logout_after', array($this, 'logout'));
+        $this->add_hook('login_after', array($this, 'login'));
+    }
+
+    function startup($args)
+    {
+        if (!empty($_SERVER['PHP_AUTH_USER'])) {
+            $rcmail = rcmail::get_instance();
+            $rcmail->add_shutdown_function(array('http_authentication', 'shutdown'));
+
+            // handle login action
+            if (empty($_SESSION['user_id'])) {
+                $args['action']         = 'login';
+                $this->redirect_query   = $_SERVER['QUERY_STRING'];
+            }
+            // Set user password in session (see shutdown() method for more info)
+            else if (!empty($_SESSION['user_id']) && empty($_SESSION['password'])
+                     && !empty($_SERVER['PHP_AUTH_PW'])) {
+                $_SESSION['password'] = $rcmail->encrypt($_SERVER['PHP_AUTH_PW']);
+            }
+        }
+
+        return $args;
+    }
+
+    function authenticate($args)
+    {
+        // Load plugin's config file
+        $this->load_config();
+
+        $host = rcmail::get_instance()->config->get('http_authentication_host');
+        if (is_string($host) && trim($host) !== '' && empty($args['host']))
+            $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
+
+        // Allow entering other user data in login form,
+        // e.g. after log out (#1487953)
+        if (!empty($args['user'])) {
+            return $args;
+        }
+
+        if (!empty($_SERVER['PHP_AUTH_USER'])) {
+            $args['user'] = $_SERVER['PHP_AUTH_USER'];
+            if (!empty($_SERVER['PHP_AUTH_PW']))
+                $args['pass'] = $_SERVER['PHP_AUTH_PW'];
+        }
+
+        $args['cookiecheck'] = false;
+        $args['valid'] = true;
+
+        return $args;
+    }
+
+    function logout($args)
+    {
+        // redirect to configured URL in order to clear HTTP auth credentials
+        if (!empty($_SERVER['PHP_AUTH_USER']) && $args['user'] == $_SERVER['PHP_AUTH_USER']) {
+            if ($url = rcmail::get_instance()->config->get('logout_url')) {
+                header("Location: $url", true, 307);
+            }
+        }
+    }
+
+    function shutdown()
+    {
+        // There's no need to store password (even if encrypted) in session
+        // We'll set it back on startup (#1486553)
+        rcmail::get_instance()->session->remove('password');
+    }
+
+    function login($args)
+    {
+        // Redirect to the previous QUERY_STRING
+        if($this->redirect_query){
+            header('Location: ./?' . $this->redirect_query);
+            exit;
+        }
+        return $args;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/http_authentication/logout.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Logout</title>
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
+<script type="text/javascript">
+
+// as seen on http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache
+$(document).ready(function(){
+	if (document.all && document.execCommand) {
+		document.execCommand("ClearAuthenticationCache", "false");
+	 }
+	 else {
+		 $.ajax({
+			url: location.href,
+			type: 'POST',
+			username: '__LOGOUT__',
+			password: '***********'
+		});
+	}
+});
+
+</script>
+</head>
+<body>
+<h1>You've successully been logged out!</h1>
+
+</body>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/identicon/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+{
+    "name": "roundcube/identicon",
+    "type": "roundcube-plugin",
+    "description": "Displays Github-like identicons for contacts/addresses without photo specified.",
+    "license": "GPLv3+",
+    "version": "0.1",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "php-gd": "*",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/identicon/identicon.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * Identicon
+ *
+ * Plugin to display a unique github-like identification icons
+ * for contacts/addresses that do not have a photo image.
+ *
+ * @todo: Make it optional and configurable via user preferences
+ * @todo: Make color palettes match the curren skin
+ * @todo: Implement optional SVG generator
+ *
+ * @license GNU GPLv3+
+ * @author Aleksander Machniak <alec@alec.pl>
+ * @website http://roundcube.net
+ */
+class identicon extends rcube_plugin
+{
+    public $task = 'addressbook';
+
+
+    /**
+     * Plugin initilization.
+     */
+    function init()
+    {
+        $this->add_hook('contact_photo', array($this, 'contact_photo'));
+    }
+
+    /**
+     * 'contact_photo' hook handler to inject an identicon image
+     */
+    function contact_photo($args)
+    {
+        // pre-conditions, exit if photo already exists or invalid input
+        if (!empty($args['url']) || !empty($args['data'])
+            || (empty($args['record']) && empty($args['email']))
+        ) {
+            return $args;
+        }
+
+        $rcmail = rcmail::get_instance();
+
+        // supporting edit/add action may be tricky, let's not do this
+        if ($rcmail->action == 'show' || $rcmail->action == 'photo') {
+            $email = $args['email'];
+            if (!$email && $args['record']) {
+                $addresses = rcube_addressbook::get_col_values('email', $args['record'], true);
+                if (!empty($addresses)) {
+                    $email = $addresses[0];
+                }
+            }
+
+            if ($email) {
+                require_once __DIR__ . '/identicon_engine.php';
+
+                $identicon = new identicon_engine($email);
+
+                if ($rcmail->action == 'show') {
+                    // set photo URL using data-uri
+                    if (($icon = $identicon->getBinary()) && ($icon = base64_encode($icon))) {
+                        $mimetype    =$identicon->getMimetype();
+                        $args['url'] = sprintf('data:%s;base64,%s', $mimetype, $icon);
+                    }
+                }
+                else {
+                    // send the icon to the browser
+                    $identicon = new identicon_engine($email);
+                    if ($identicon->sendOutput()) {
+                        exit;
+                    }
+                }
+            }
+        }
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/identicon/identicon_engine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * @license GNU GPLv3+
+ * @author Aleksander Machniak <alec@alec.pl>
+ */
+class identicon_engine
+{
+    private $ident;
+    private $width;
+    private $height;
+    private $margin;
+    private $binary;
+    private $color;
+    private $bgcolor  = '#F9F9F9';
+    private $mimetype = 'image/png';
+    private $palette  = array(
+        '#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3',
+        '#03A9F4', '#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39',
+        '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548', '#607D8B',
+    );
+    private $grid = array(
+         0,  1,  2,  1,  0,
+         3,  4,  5,  4,  3,
+         6,  7,  8,  7,  6,
+         9, 10, 11, 10,  9,
+        12, 13, 14, 13, 12,
+    );
+
+    const GRID_SIZE = 5;
+    const ICON_SIZE = 150;
+
+
+    /**
+     * Class constructor
+     *
+     * @param string $ident Unique identifier (email address)
+     * @param int    $size  Icon size in pixels
+     */
+    public function __construct($ident, $size = null)
+    {
+        if (!$size) {
+            $size = self::ICON_SIZE;
+        }
+
+        $this->ident  = $ident;
+        $this->margin = (int) round($size / 10);
+        $this->width  = (int) round(($size - $this->margin * 2) / self::GRID_SIZE) * self::GRID_SIZE + $this->margin * 2;
+        $this->height = $this->width;
+
+        $this->generate();
+    }
+
+    /**
+     * Returns image mimetype
+     */
+    public function getMimetype()
+    {
+        return $this->mimetype;
+    }
+
+    /**
+     * Returns the image in binary form
+     */
+    public function getBinary()
+    {
+        return $this->binary;
+    }
+
+    /**
+     * Sends the image to the browser
+     */
+    public function sendOutput()
+    {
+        if ($this->binary) {
+            $rcmail = rcmail::get_instance();
+            $rcmail->output->future_expire_header(10 * 60);
+
+            header('Content-Type: ' . $this->mimetype);
+            header('Content-Size: ' . strlen($this->binary));
+            echo $this->binary;
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Icon generator
+     */
+    private function generate()
+    {
+        $ident = md5($this->ident, true);
+
+        // set icon color
+        $div         = intval(255/count($this->palette));
+        $index       = intval(ord($ident[0]) / $div);
+        $this->color = $this->palette[$index] ?: $this->palette[0];
+
+        // set cell size
+        $cell_width  = ($this->width - $this->margin * 2) / self::GRID_SIZE;
+        $cell_height = ($this->height - $this->margin * 2) / self::GRID_SIZE;
+
+        // create a grid
+        foreach ($this->grid as $i => $idx) {
+            $row_num    = intval($i / self::GRID_SIZE);
+            $cell_num_h = $i - $row_num * self::GRID_SIZE;
+
+            $this->grid[$i] = array(
+                'active' => ord($ident[$idx]) % 2 > 0,
+                'x1'     => $cell_width * $cell_num_h + $this->margin,
+                'y1'     => $cell_height * $row_num + $this->margin,
+                'x2'     => $cell_width * ($cell_num_h + 1) + $this->margin,
+                'y2'     => $cell_height * ($row_num + 1) + $this->margin,
+            );
+        }
+
+        // really generate the image using supported methods
+        if (function_exists('imagepng')) {
+            $this->generateGD();
+        }
+        else {
+            // log an error
+            $error = array(
+                'code'    => 500,
+                'message' => "PHP-GD module not found. It's required by identicon plugin.",
+            );
+
+            rcube::raise_error($error, true, false);
+        }
+    }
+
+    /**
+     * GD-based icon generation worker
+     */
+    private function generateGD()
+    {
+        $color   = $this->toRGB($this->color);
+        $bgcolor = $this->toRGB($this->bgcolor);
+
+        // create an image, setup colors
+        $image   = imagecreate($this->width, $this->height);
+        $color   = imagecolorallocate($image, $color[0], $color[1], $color[2]);
+        $bgcolor = imagecolorallocate($image, $bgcolor[0], $bgcolor[1], $bgcolor[2]);
+
+        imagefilledrectangle($image, 0, 0, $this->width, $this->height, $bgcolor);
+
+        // draw the grid created in self::generate()
+        foreach ($this->grid as $item) {
+            if ($item['active']) {
+                imagefilledrectangle($image, $item['x1'], $item['y1'], $item['x2'], $item['y2'], $color);
+            }
+        }
+
+        // generate an image and save it to a variable
+        ob_start();
+        imagepng($image, null, 6, PNG_ALL_FILTERS);
+        $this->binary = ob_get_contents();
+        ob_end_clean();
+
+        // cleanup
+        imagedestroy($image);
+    }
+
+    /**
+     * Convert #FFFFFF color format to 3-value RGB
+     */
+    private function toRGB($color)
+    {
+        preg_match('/^#?([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/i', $color, $m);
+
+        return array(hexdec($m[1]), hexdec($m[2]), hexdec($m[3]));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/identity_select/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/identity_select",
+    "type": "roundcube-plugin",
+    "description": "On reply to a message user identity selection is based on\n\t\tcontent of standard headers like From, To, Cc and Return-Path.\n\t\tHere you can add header(s) set by your SMTP server (e.g.\n\t\tDelivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make\n\t\tidentity selection more accurate.",
+    "license": "GPLv3+",
+    "version": "1.1",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/identity_select/identity_select.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Identity selection based on additional message headers.
+ *
+ * On reply to a message user identity selection is based on
+ * content of standard headers i.e. From, To, Cc and Return-Path.
+ * Here you can add header(s) set by your SMTP server (e.g.
+ * Delivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make
+ * identity selection more accurate.
+ *
+ * Enable the plugin in config.inc.php and add your desired headers:
+ *   $config['identity_select_headers'] = array('Delivered-To');
+ *
+ * Note: 'Received' header is also supported, but has bigger impact
+ *       on performance, as it's body is potentially much bigger
+ *       than other headers used by Roundcube
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ * @license GNU GPLv3+
+ */
+class identity_select extends rcube_plugin
+{
+    public $task = 'mail';
+
+
+    function init()
+    {
+        $this->add_hook('identity_select', array($this, 'select'));
+        $this->add_hook('storage_init', array($this, 'storage_init'));
+    }
+
+    /**
+     * Adds additional headers to supported headers list
+     */
+    function storage_init($p)
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($add_headers = (array)$rcmail->config->get('identity_select_headers', array())) {
+            $p['fetch_headers'] = trim($p['fetch_headers'] . ' ' . strtoupper(join(' ', $add_headers)));
+        }
+
+        return $p;
+    }
+
+    /**
+     * Identity selection
+     */
+    function select($p)
+    {
+        if ($p['selected'] !== null || !is_object($p['message']->headers)) {
+            return $p;
+        }
+
+        $rcmail = rcmail::get_instance();
+
+        foreach ((array)$rcmail->config->get('identity_select_headers', array()) as $header) {
+            if ($emails = $this->get_email_from_header($p['message'], $header)) {
+                foreach ($p['identities'] as $idx => $ident) {
+                    if (in_array($ident['email_ascii'], $emails)) {
+                        $p['selected'] = $idx;
+                        break 2;
+                    }
+                }
+            }
+        }
+
+        return $p;
+    }
+
+    /**
+     * Extract email address from specified message header
+     */
+    protected function get_email_from_header($message, $header)
+    {
+        $value = $message->headers->get($header, false);
+
+        if (strtolower($header) == 'received') {
+            // find first email address in all Received headers
+            $email = null;
+            foreach ((array) $value as $entry) {
+                if (preg_match('/[\s\t]+for[\s\t]+<([^>]+)>/', $entry, $matches)) {
+                    $email = $matches[1];
+                    break;
+                }
+            }
+
+            $value = $email;
+        }
+
+        return (array) $value;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
++-------------------------------------------------------------------------+
+|
+|  Author:  Cor Bosman (roundcube@wa.ter.net)
+|  Plugin:  jqueryui
+|  Version: 1.12.0
+|  Purpose: Add jquery-ui to roundcube for every plugin to use
+|
++-------------------------------------------------------------------------+
+
+jqueryui adds the complete jquery-ui library including the smoothness
+theme to roundcube. This allows other plugins to use jquery-ui without
+having to load their own version. The benefit of using 1 central jquery-ui
+is that we wont run into problems of conflicting jquery libraries being
+loaded. All plugins that want to use jquery-ui should use this plugin as
+a requirement.
+
+It is possible for plugin authors to override the default smoothness theme.
+To do this, go to the jquery-ui website, and use the download feature to
+download your own theme. In the advanced settings, provide a scope class to
+your theme and add that class to all your UI elements. Finally, load the
+downloaded css files in your own plugin.
+
+Some jquery-ui modules provide localization. One example is the datepicker module.
+If you want to load localization for a specific module, then set up config.inc.php.
+Check the config.inc.php.dist file on how to set this up for the datepicker module.
+
+As of version 1.8.6 this plugin also supports other themes. If you're a theme
+developer and would like a different default theme to be used for your RC theme
+then let me know and we can set things up.
+
+This also provides some common UI modules e.g. miniColors extension.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/jqueryui",
+    "type": "roundcube-plugin",
+    "description": "Plugin adds the complete jQuery-UI library including the smoothness theme to Roundcube. This allows other plugins to use jQuery-UI without having to load their own version. The benefit of using one central jQuery-UI is that we wont run into problems of conflicting jQuery libraries being loaded. All plugins that want to use jQuery-UI should use this plugin as a requirement.",
+    "license": "GPLv3+",
+    "version": "1.12.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+<?php
+
+// if you want to load localization strings for specific sub-libraries of jquery-ui, configure them here 
+$config['jquery_ui_i18n'] = array('datepicker');
+
+// map Roundcube skins with jquery-ui themes here
+$config['jquery_ui_skin_map'] = array(
+  'larry' => 'larry',
+  'default' => 'larry',
+);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/jqueryui.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * jQuery UI
+ *
+ * Provide the jQuery UI library with according themes.
+ *
+ * @version 1.12.0
+ * @author Cor Bosman <roundcube@wa.ter.net>
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ * @author Aleksander Machniak <alec@alec.pl>
+ * @license GNU GPLv3+
+ */
+class jqueryui extends rcube_plugin
+{
+    public $noajax = true;
+    public $version = '1.12.0';
+
+    private static $features = array();
+    private static $ui_theme;
+
+    public function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // the plugin might have been force-loaded so do some sanity check first
+        if ($rcmail->output->type != 'html' || self::$ui_theme) {
+          return;
+        }
+
+        $this->load_config();
+
+        // include UI scripts
+        $this->include_script("js/jquery-ui.min.js");
+
+        // include UI stylesheet
+        $skin     = $rcmail->config->get('skin');
+        $ui_map   = $rcmail->config->get('jquery_ui_skin_map', array());
+        $ui_theme = $ui_map[$skin] ?: $skin;
+
+        self::$ui_theme = $ui_theme;
+
+        if (file_exists($this->home . "/themes/$ui_theme/jquery-ui.css")) {
+            $this->include_stylesheet("themes/$ui_theme/jquery-ui.css");
+        }
+        else {
+            $this->include_stylesheet("themes/larry/jquery-ui.css");
+        }
+
+        if ($ui_theme == 'larry') {
+            // patch dialog position function in order to fully fit the close button into the window
+            $rcmail->output->add_script("jQuery.extend(jQuery.ui.dialog.prototype.options.position, {
+                using: function(pos) {
+                    var me = jQuery(this),
+                        offset = me.css(pos).offset(),
+                        topOffset = offset.top - 12;
+                    if (topOffset < 0)
+                        me.css('top', pos.top - topOffset);
+                    if (offset.left + me.outerWidth() + 12 > jQuery(window).width())
+                        me.css('left', pos.left - 12);
+                }
+            });", 'foot');
+        }
+
+        // jquery UI localization
+        $jquery_ui_i18n = $rcmail->config->get('jquery_ui_i18n', array('datepicker'));
+        if (count($jquery_ui_i18n) > 0) {
+            $lang_l = str_replace('_', '-', substr($_SESSION['language'], 0, 5));
+            $lang_s = substr($_SESSION['language'], 0, 2);
+
+            foreach ($jquery_ui_i18n as $package) {
+                if (file_exists($this->home . "/js/i18n/jquery.ui.$package-$lang_l.js")) {
+                    $this->include_script("js/i18n/jquery.ui.$package-$lang_l.js");
+                }
+                else
+                if (file_exists($this->home . "/js/i18n/jquery.ui.$package-$lang_s.js")) {
+                    $this->include_script("js/i18n/jquery.ui.$package-$lang_s.js");
+                }
+            }
+        }
+
+        // Date format for datepicker
+        $date_format = $rcmail->config->get('date_format', 'Y-m-d');
+        $date_format = strtr($date_format, array(
+                'y' => 'y',
+                'Y' => 'yy',
+                'm' => 'mm',
+                'n' => 'm',
+                'd' => 'dd',
+                'j' => 'd',
+        ));
+        $rcmail->output->set_env('date_format', $date_format);
+    }
+
+    public static function miniColors()
+    {
+        if (in_array('miniColors', self::$features)) {
+            return;
+        }
+
+        self::$features[] = 'miniColors';
+
+        $ui_theme = self::$ui_theme;
+        $rcube    = rcube::get_instance();
+        $script   = 'plugins/jqueryui/js/jquery.minicolors.min.js';
+        $css      = "plugins/jqueryui/themes/$ui_theme/jquery.minicolors.css";
+
+        if (!file_exists(INSTALL_PATH . $css)) {
+            $css = "plugins/jqueryui/themes/larry/jquery.minicolors.css";
+        }
+
+        $rcube->output->include_css($css);
+        $rcube->output->add_header(html::tag('script', array('type' => "text/javascript", 'src' => $script)));
+        $rcube->output->add_script('$.fn.miniColors = $.fn.minicolors; $("input.colors").minicolors()', 'docready');
+    }
+
+    public static function tagedit()
+    {
+        if (in_array('tagedit', self::$features)) {
+            return;
+        }
+
+        self::$features[] = 'tagedit';
+
+        $script   = 'plugins/jqueryui/js/jquery.tagedit.js';
+        $rcube    = rcube::get_instance();
+        $ui_theme = self::$ui_theme;
+        $css      = "plugins/jqueryui/themes/$ui_theme/tagedit.css";
+
+        if (!file_exists(INSTALL_PATH . $css)) {
+            $css = "plugins/jqueryui/themes/larry/tagedit.css";
+        }
+
+        $rcube->output->include_css($css);
+        $rcube->output->add_header(html::tag('script', array('type' => "text/javascript", 'src' => $script)));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery-ui-i18n.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1677 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/*! jQuery UI - v1.9.1 - 2012-10-25
+* http://jqueryui.com
+* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
+* Copyright 2012 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+	$.datepicker.regional['af'] = {
+		closeText: 'Selekteer',
+		prevText: 'Vorige',
+		nextText: 'Volgende',
+		currentText: 'Vandag',
+		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+		'Julie','Augustus','September','Oktober','November','Desember'],
+		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['af']);
+});
+
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+	$.datepicker.regional['ar-DZ'] = {
+		closeText: 'إغلاق',
+		prevText: '&#x3C;السابق',
+		nextText: 'التالي&#x3E;',
+		currentText: 'اليوم',
+		monthNames: ['جانÙÙŠ', 'ÙÙŠÙري', 'مارس', 'Ø£Ùريل', 'ماي', 'جوان',
+		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوÙمبر', 'ديسمبر'],
+		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		weekHeader: 'أسبوع',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 6,
+  		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
+
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name Ùبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+	$.datepicker.regional['ar'] = {
+		closeText: 'إغلاق',
+		prevText: '&#x3C;السابق',
+		nextText: 'التالي&#x3E;',
+		currentText: 'اليوم',
+		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+		weekHeader: 'أسبوع',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 6,
+  		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ar']);
+});
+
+/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+	$.datepicker.regional['az'] = {
+		closeText: 'BaÄŸla',
+		prevText: '&#x3C;Geri',
+		nextText: 'İrəli&#x3E;',
+		currentText: 'Bugün',
+		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun',
+		'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+		monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun',
+		'Ä°yul','Avq','Sen','Okt','Noy','Dek'],
+		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+		weekHeader: 'Hf',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['az']);
+});
+
+/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+	$.datepicker.regional['bg'] = {
+		closeText: 'затвори',
+		prevText: '&#x3C;назад',
+		nextText: 'напред&#x3E;',
+		nextBigText: '&#x3E;&#x3E;',
+		currentText: 'днеÑ',
+		monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни',
+		'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+		monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни',
+		'Юли','Ðвг','Сеп','Окт','Ðов','Дек'],
+		dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'],
+		dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'],
+		dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['bg']);
+});
+
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+	$.datepicker.regional['bs'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['bs']);
+});
+
+/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ca'] = {
+		closeText: 'Tanca',
+		prevText: 'Anterior',
+		nextText: 'Següent',
+		currentText: 'Avui',
+		monthNames: ['gener','febrer','març','abril','maig','juny',
+		'juliol','agost','setembre','octubre','novembre','desembre'],
+		monthNamesShort: ['gen','feb','març','abr','maig','juny',
+		'jul','ag','set','oct','nov','des'],
+		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
+		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
+		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
+		weekHeader: 'Set',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ca']);
+});
+
+/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+	$.datepicker.regional['cs'] = {
+		closeText: 'Zavřít',
+		prevText: '&#x3C;Dříve',
+		nextText: 'Později&#x3E;',
+		currentText: 'Nyní',
+		monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven',
+		'Äervenec','srpen','září','říjen','listopad','prosinec'],
+		monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer',
+		'Ävc','srp','zář','říj','lis','pro'],
+		dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'],
+		dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'],
+		dayNamesMin: ['ne','po','út','st','Ät','pá','so'],
+		weekHeader: 'Týd',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['cs']);
+});
+
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+	$.datepicker.regional['cy-GB'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+		weekHeader: 'Wy',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+});
+
+/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['da'] = {
+		closeText: 'Luk',
+		prevText: '&#x3C;Forrige',
+		nextText: 'Næste&#x3E;',
+		currentText: 'Idag',
+		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+		'Juli','August','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+		weekHeader: 'Uge',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['da']);
+});
+
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+	$.datepicker.regional['de'] = {
+		closeText: 'schließen',
+		prevText: '&#x3C;zurück',
+		nextText: 'Vor&#x3E;',
+		currentText: 'heute',
+		monthNames: ['Januar','Februar','März','April','Mai','Juni',
+		'Juli','August','September','Oktober','November','Dezember'],
+		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dez'],
+		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		weekHeader: 'KW',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['de']);
+});
+
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+	$.datepicker.regional['el'] = {
+		closeText: 'Κλείσιμο',
+		prevText: 'ΠÏοηγοÏμενος',
+		nextText: 'Επόμενος',
+		currentText: 'ΤÏέχων Μήνας',
+		monthNames: ['ΙανουάÏιος','ΦεβÏουάÏιος','ΜάÏτιος','ΑπÏίλιος','Μάιος','ΙοÏνιος',
+		'ΙοÏλιος','ΑÏγουστος','ΣεπτέμβÏιος','ΟκτώβÏιος','ÎοέμβÏιος','ΔεκέμβÏιος'],
+		monthNamesShort: ['Ιαν','Φεβ','ΜαÏ','ΑπÏ','Μαι','Ιουν',
+		'Ιουλ','Αυγ','Σεπ','Οκτ','Îοε','Δεκ'],
+		dayNames: ['ΚυÏιακή','ΔευτέÏα','ΤÏίτη','ΤετάÏτη','Πέμπτη','ΠαÏασκευή','Σάββατο'],
+		dayNamesShort: ['ΚυÏ','Δευ','ΤÏι','Τετ','Πεμ','ΠαÏ','Σαβ'],
+		dayNamesMin: ['Κυ','Δε','ΤÏ','Τε','Πε','Πα','Σα'],
+		weekHeader: 'Εβδ',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['el']);
+});
+
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+	$.datepicker.regional['en-AU'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
+
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+	$.datepicker.regional['en-GB'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
+
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+	$.datepicker.regional['en-NZ'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
+
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+	$.datepicker.regional['eo'] = {
+		closeText: 'Fermi',
+		prevText: '&#x3C;Anta',
+		nextText: 'Sekv&#x3E;',
+		currentText: 'Nuna',
+		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+		'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','AÅ­g','Sep','Okt','Nov','Dec'],
+		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+		dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'],
+		dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'],
+		weekHeader: 'Sb',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['eo']);
+});
+
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['es'] = {
+		closeText: 'Cerrar',
+		prevText: '&#x3C;Ant',
+		nextText: 'Sig&#x3E;',
+		currentText: 'Hoy',
+		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+		'Jul','Ago','Sep','Oct','Nov','Dic'],
+		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['es']);
+});
+
+/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+	$.datepicker.regional['et'] = {
+		closeText: 'Sulge',
+		prevText: 'Eelnev',
+		nextText: 'Järgnev',
+		currentText: 'Täna',
+		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+		'Juuli','August','September','Oktoober','November','Detsember'],
+		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+		dayNamesMin: ['P','E','T','K','N','R','L'],
+		weekHeader: 'näd',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['et']);
+});
+
+/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+	$.datepicker.regional['eu'] = {
+		closeText: 'Egina',
+		prevText: '&#x3C;Aur',
+		nextText: 'Hur&#x3E;',
+		currentText: 'Gaur',
+		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+			'uzt.','abu.','ira.','urr.','aza.','abe.'],
+		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+		weekHeader: 'As',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['eu']);
+});
+
+/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+	$.datepicker.regional['fa'] = {
+		closeText: 'بستن',
+		prevText: '&#x3C;قبلی',
+		nextText: 'بعدی&#x3E;',
+		currentText: 'امروز',
+		monthNames: [
+			'Ùروردين',
+			'ارديبهشت',
+			'خرداد',
+			'تير',
+			'مرداد',
+			'شهريور',
+			'مهر',
+			'آبان',
+			'آذر',
+			'دی',
+			'بهمن',
+			'اسÙند'
+		],
+		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+		dayNames: [
+			'يکشنبه',
+			'دوشنبه',
+			'سه‌شنبه',
+			'چهارشنبه',
+			'پنجشنبه',
+			'جمعه',
+			'شنبه'
+		],
+		dayNamesShort: [
+			'ی',
+			'د',
+			'س',
+			'Ú†',
+			'Ù¾',
+			'ج',
+			'Ø´'
+		],
+		dayNamesMin: [
+			'ی',
+			'د',
+			'س',
+			'Ú†',
+			'Ù¾',
+			'ج',
+			'Ø´'
+		],
+		weekHeader: 'Ù‡Ù',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 6,
+		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fa']);
+});
+
+/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['fi'] = {
+		closeText: 'Sulje',
+		prevText: '&#xAB;Edellinen',
+		nextText: 'Seuraava&#xBB;',
+		currentText: 'Tänään',
+		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
+		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+		weekHeader: 'Vk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fi']);
+});
+
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+	$.datepicker.regional['fo'] = {
+		closeText: 'Lat aftur',
+		prevText: '&#x3C;Fyrra',
+		nextText: 'Næsta&#x3E;',
+		currentText: 'Ã dag',
+		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+		'Juli','August','September','Oktober','November','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Des'],
+		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+		weekHeader: 'Vk',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fo']);
+});
+
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+	$.datepicker.regional['fr-CH'] = {
+		closeText: 'Fermer',
+		prevText: '&#x3C;Préc',
+		nextText: 'Suiv&#x3E;',
+		currentText: 'Courant',
+		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+		'Jul','Aoû','Sep','Oct','Nov','Déc'],
+		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});
+
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+			  Stéphane Nahmani (sholby@sholby.net),
+			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+	$.datepicker.regional['fr'] = {
+		closeText: 'Fermer',
+		prevText: 'Précédent',
+		nextText: 'Suivant',
+		currentText: 'Aujourd\'hui',
+		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+		dayNamesMin: ['D','L','M','M','J','V','S'],
+		weekHeader: 'Sem.',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fr']);
+});
+
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+	$.datepicker.regional['gl'] = {
+		closeText: 'Pechar',
+		prevText: '&#x3C;Ant',
+		nextText: 'Seg&#x3E;',
+		currentText: 'Hoxe',
+		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+		'Xul','Ago','Set','Out','Nov','Dec'],
+		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['gl']);
+});
+
+/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+	$.datepicker.regional['he'] = {
+		closeText: 'סגור',
+		prevText: '&#x3C;הקוד×',
+		nextText: 'הב×&#x3E;',
+		currentText: 'היו×',
+		monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני',
+		'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'],
+		monthNamesShort: ['ינו','פבר','מרץ','×פר','מ××™','יוני',
+		'יולי','×וג','ספט','×וק','נוב','דצמ'],
+		dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+		dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+		dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['he']);
+});
+
+/* Hindi initialisation for the jQuery UI date picker plugin. */
+/* Written by Michael Dawart. */
+jQuery(function($){
+	$.datepicker.regional['hi'] = {
+		closeText: 'बंद',
+		prevText: 'पिछला',
+		nextText: 'अगला',
+		currentText: 'आज',
+		monthNames: ['जनवरी ','फरवरी','मारà¥à¤š','अपà¥à¤°à¥‡à¤²','मई','जून',
+		'जूलाई','अगसà¥à¤¤ ','सितमà¥à¤¬à¤°','अकà¥à¤Ÿà¥‚बर','नवमà¥à¤¬à¤°','दिसमà¥à¤¬à¤°'],
+		monthNamesShort: ['जन', 'फर', 'मारà¥à¤š', 'अपà¥à¤°à¥‡à¤²', 'मई', 'जून',
+		'जूलाई', 'अग', 'सित', 'अकà¥à¤Ÿ', 'नव', 'दि'],
+		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बà¥à¤§à¤µà¤¾à¤°', 'गà¥à¤°à¥à¤µà¤¾à¤°', 'शà¥à¤•à¥à¤°à¤µà¤¾à¤°', 'शनिवार'],
+		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+		weekHeader: 'हफà¥à¤¤à¤¾',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hi']);
+});
+
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+	$.datepicker.regional['hr'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['SijeÄanj','VeljaÄa','Ožujak','Travanj','Svibanj','Lipanj',
+		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+		'Srp','Kol','Ruj','Lis','Stu','Pro'],
+		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Tje',
+		dateFormat: 'dd.mm.yy.',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hr']);
+});
+
+/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+	$.datepicker.regional['hu'] = {
+		closeText: 'bezár',
+		prevText: 'vissza',
+		nextText: 'előre',
+		currentText: 'ma',
+		monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június',
+		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún',
+		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+		weekHeader: 'Hét',
+		dateFormat: 'yy.mm.dd.',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hu']);
+});
+
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+	$.datepicker.regional['hy'] = {
+		closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬',
+		prevText: '&#x3C;Õ†Õ¡Õ­.',
+		nextText: 'Õ€Õ¡Õ».&#x3E;',
+		currentText: 'Ô±ÕµÕ½Ö…Ö€',
+		monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+		'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'],
+		monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+		'Õ€Õ¸Ö‚Õ¬','Õ•Õ£Õ½','ÕÕ¥Õº','Õ€Õ¸Õ¯','Õ†Õ¸Õµ','Ô´Õ¥Õ¯'],
+		dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'],
+		dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+		dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+		weekHeader: 'Õ‡Ô²Õ',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hy']);
+});
+
+/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['id'] = {
+		closeText: 'Tutup',
+		prevText: '&#x3C;mundur',
+		nextText: 'maju&#x3E;',
+		currentText: 'hari ini',
+		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+		'Juli','Agustus','September','Oktober','Nopember','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+		'Jul','Agus','Sep','Okt','Nop','Des'],
+		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+		weekHeader: 'Mg',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['id']);
+});
+
+/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+	$.datepicker.regional['is'] = {
+		closeText: 'Loka',
+		prevText: '&#x3C; Fyrri',
+		nextText: 'Næsti &#x3E;',
+		currentText: 'Ã dag',
+		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+		'Júlí','Ãgúst','September','Október','Nóvember','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+		'Júl','Ãgú','Sep','Okt','Nóv','Des'],
+		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
+		weekHeader: 'Vika',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['is']);
+});
+
+/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['it'] = {
+		closeText: 'Chiudi',
+		prevText: '&#x3C;Prec',
+		nextText: 'Succ&#x3E;',
+		currentText: 'Oggi',
+		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+			'Lug','Ago','Set','Ott','Nov','Dic'],
+		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
+		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['it']);
+});
+
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+	$.datepicker.regional['ja'] = {
+		closeText: 'é–‰ã˜ã‚‹',
+		prevText: '&#x3C;å‰',
+		nextText: '次&#x3E;',
+		currentText: '今日',
+		monthNames: ['1月','2月','3月','4月','5月','6月',
+		'7月','8月','9月','10月','11月','12月'],
+		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+		'7月','8月','9月','10月','11月','12月'],
+		dayNames: ['日曜日','月曜日','ç«æ›œæ—¥','水曜日','木曜日','金曜日','土曜日'],
+		dayNamesShort: ['æ—¥','月','ç«','æ°´','木','金','土'],
+		dayNamesMin: ['æ—¥','月','ç«','æ°´','木','金','土'],
+		weekHeader: '週',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['ja']);
+});
+
+/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ka'] = {
+		closeText: 'დáƒáƒ®áƒ£áƒ áƒ•áƒ',
+		prevText: '&#x3c; წინáƒ',
+		nextText: 'შემდეგი &#x3e;',
+		currentText: 'დღეს',
+		monthNames: ['იáƒáƒœáƒ•áƒáƒ áƒ˜','თებერვáƒáƒšáƒ˜','მáƒáƒ áƒ¢áƒ˜','áƒáƒžáƒ áƒ˜áƒšáƒ˜','მáƒáƒ˜áƒ¡áƒ˜','ივნისი', 'ივლისი','áƒáƒ’ვისტáƒ','სექტემბერი','áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი','ნáƒáƒ”მბერი','დეკემბერი'],
+		monthNamesShort: ['იáƒáƒœ','თებ','მáƒáƒ ','áƒáƒžáƒ ','მáƒáƒ˜','ივნ', 'ივლ','áƒáƒ’ვ','სექ','áƒáƒ¥áƒ¢','ნáƒáƒ”','დეკ'],
+		dayNames: ['კვირáƒ','áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი','სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი','áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი','ხუთშáƒáƒ‘áƒáƒ—ი','პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი','შáƒáƒ‘áƒáƒ—ი'],
+		dayNamesShort: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+		dayNamesMin: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+		weekHeader: 'კვირáƒ',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ka']);
+});
+
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['kk'] = {
+		closeText: 'Жабу',
+		prevText: '&#x3C;Ðлдыңғы',
+		nextText: 'КелеÑÑ–&#x3E;',
+		currentText: 'Бүгін',
+		monthNames: ['Қаңтар','Ðқпан','Ðаурыз','Сәуір','Мамыр','МауÑым',
+		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','ЖелтоқÑан'],
+		monthNamesShort: ['Қаң','Ðқп','Ðау','Сәу','Мам','Мау',
+		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+		dayNames: ['ЖекÑенбі','ДүйÑенбі','СейÑенбі','СәрÑенбі','БейÑенбі','Жұма','Сенбі'],
+		dayNamesShort: ['жкÑ','дÑн','ÑÑн','ÑÑ€Ñ','бÑн','жма','Ñнб'],
+		dayNamesMin: ['Жк','ДÑ','СÑ','Ср','БÑ','Жм','Сн'],
+		weekHeader: 'Ðе',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['kk']);
+});
+
+/* Khmer initialisation for the jQuery calendar extension. */
+/* Written by Chandara Om (chandara.teacher@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['km'] = {
+		closeText: 'ធ្វើ​រួច',
+		prevText: 'មុន',
+		nextText: 'បន្ទាប់',
+		currentText: 'ážáŸ’ងៃ​នáŸáŸ‡',
+		monthNames: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+		'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+		'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+		dayNames: ['អាទិážáŸ’áž™', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បážáž·áŸ', 'សុក្រ', 'សៅរáŸ'],
+		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+		weekHeader: 'សប្ដាហáŸ',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['km']);
+});
+
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+jQuery(function($){
+	$.datepicker.regional['ko'] = {
+		closeText: '닫기',
+		prevText: 'ì´ì „달',
+		nextText: '다ìŒë‹¬',
+		currentText: '오늘',
+		monthNames: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+		'7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+		monthNamesShort: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+		'7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+		dayNames: ['ì¼ìš”ì¼','월요ì¼','화요ì¼','수요ì¼','목요ì¼','금요ì¼','토요ì¼'],
+		dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'],
+		dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'],
+		weekHeader: 'Wk',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'ë…„'};
+	$.datepicker.setDefaults($.datepicker.regional['ko']);
+});
+
+/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+jQuery(function($){
+	$.datepicker.regional['lb'] = {
+		closeText: 'Fäerdeg',
+		prevText: 'Zréck',
+		nextText: 'Weider',
+		currentText: 'Haut',
+		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+		'Juli','August','September','Oktober','November','Dezember'],
+		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+		weekHeader: 'W',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lb']);
+});
+
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+	$.datepicker.regional['lt'] = {
+		closeText: 'Uždaryti',
+		prevText: '&#x3C;Atgal',
+		nextText: 'Pirmyn&#x3E;',
+		currentText: 'Å iandien',
+		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+		dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'],
+		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'],
+		weekHeader: 'Wk',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lt']);
+});
+
+/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+	$.datepicker.regional['lv'] = {
+		closeText: 'Aizvērt',
+		prevText: 'Iepr',
+		nextText: 'NÄka',
+		currentText: 'Å odien',
+		monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs',
+		'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n',
+		'JÅ«l','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+		weekHeader: 'Nav',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lv']);
+});
+
+/* Macedonian i18n for the jQuery UI date picker plugin. */
+/* Written by Stojce Slavkovski. */
+jQuery(function($){
+	$.datepicker.regional['mk'] = {
+		closeText: 'Затвори',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'ДенеÑ',
+		monthNames: ['Јануари','Февруари','Март','Ðприл','Мај','Јуни',
+		'Јули','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+		monthNamesShort: ['Јан','Фев','Мар','Ðпр','Мај','Јун',
+		'Јул','Ðвг','Сеп','Окт','Ðое','Дек'],
+		dayNames: ['Ðедела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+		dayNamesShort: ['Ðед','Пон','Вто','Сре','Чет','Пет','Саб'],
+		dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Са'],
+		weekHeader: 'Сед',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['mk']);
+});
+
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ml'] = {
+		closeText: 'ശരി',
+		prevText: 'à´®àµà´¨àµà´¨à´¤àµà´¤àµ†',
+		nextText: 'à´…à´Ÿàµà´¤àµà´¤à´¤àµ ',
+		currentText: 'ഇനàµà´¨àµ',
+		monthNames: ['ജനàµà´µà´°à´¿','ഫെബàµà´°àµà´µà´°à´¿','മാരàµâ€à´šàµà´šàµ','à´à´ªàµà´°à´¿à´²àµâ€','മേയàµ','ജൂണàµâ€',
+		'ജൂലൈ','ആഗസàµà´±àµà´±àµ','സെപàµà´±àµà´±à´‚ബരàµâ€','à´’à´•àµà´Ÿàµ‹à´¬à´°àµâ€','നവംബരàµâ€','ഡിസംബരàµâ€'],
+		monthNamesShort: ['ജനàµ', 'ഫെബàµ', 'മാരàµâ€', 'à´à´ªàµà´°à´¿', 'മേയàµ', 'ജൂണàµâ€',
+		'ജൂലാ', 'ആഗ', 'സെപàµ', 'à´’à´•àµà´Ÿàµ‹', 'നവം', 'à´¡à´¿à´¸'],
+		dayNames: ['ഞായരàµâ€', 'തിങàµà´•à´³àµâ€', 'ചൊവàµà´µ', 'à´¬àµà´§à´¨àµâ€', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+		dayNamesShort: ['ഞായ', 'തിങàµà´•', 'ചൊവàµà´µ', 'à´¬àµà´§', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+		dayNamesMin: ['à´žà´¾','തി','ചൊ','à´¬àµ','à´µàµà´¯à´¾','വെ','à´¶'],
+		weekHeader: 'à´†',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ml']);
+});
+
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+	$.datepicker.regional['ms'] = {
+		closeText: 'Tutup',
+		prevText: '&#x3C;Sebelum',
+		nextText: 'Selepas&#x3E;',
+		currentText: 'hari ini',
+		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+		'Julai','Ogos','September','Oktober','November','Disember'],
+		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+		'Jul','Ogo','Sep','Okt','Nov','Dis'],
+		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+		weekHeader: 'Mg',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ms']);
+});
+
+/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+	$.datepicker.regional['nl-BE'] = {
+		closeText: 'Sluiten',
+		prevText: 'â†',
+		nextText: '→',
+		currentText: 'Vandaag',
+		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});
+
+/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+	$.datepicker.regional.nl = {
+		closeText: 'Sluiten',
+		prevText: 'â†',
+		nextText: '→',
+		currentText: 'Vandaag',
+		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional.nl);
+});
+
+/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+	$.datepicker.regional['no'] = {
+		closeText: 'Lukk',
+		prevText: '&#xAB;Forrige',
+		nextText: 'Neste&#xBB;',
+		currentText: 'I dag',
+		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+		weekHeader: 'Uke',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''
+	};
+	$.datepicker.setDefaults($.datepicker.regional['no']);
+});
+
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['pl'] = {
+		closeText: 'Zamknij',
+		prevText: '&#x3C;Poprzedni',
+		nextText: 'Następny&#x3E;',
+		currentText: 'DziÅ›',
+		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+		'Lip','Sie','Wrz','Pa','Lis','Gru'],
+		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+		dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'],
+		dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'],
+		weekHeader: 'Tydz',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pl']);
+});
+
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['pt-BR'] = {
+		closeText: 'Fechar',
+		prevText: '&#x3C;Anterior',
+		nextText: 'Próximo&#x3E;',
+		currentText: 'Hoje',
+		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+		'Jul','Ago','Set','Out','Nov','Dez'],
+		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+});
+
+/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+	$.datepicker.regional['pt'] = {
+		closeText: 'Fechar',
+		prevText: '&#x3C;Anterior',
+		nextText: 'Seguinte',
+		currentText: 'Hoje',
+		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+		'Jul','Ago','Set','Out','Nov','Dez'],
+		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		weekHeader: 'Sem',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pt']);
+});
+
+/* Romansh initialisation for the jQuery UI date picker plugin. */
+/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+jQuery(function($){
+	$.datepicker.regional['rm'] = {
+		closeText: 'Serrar',
+		prevText: '&#x3C;Suandant',
+		nextText: 'Precedent&#x3E;',
+		currentText: 'Actual',
+		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+		weekHeader: 'emna',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['rm']);
+});
+
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+	$.datepicker.regional['ro'] = {
+		closeText: 'ÃŽnchide',
+		prevText: '&#xAB; Luna precedentă',
+		nextText: 'Luna următoare &#xBB;',
+		currentText: 'Azi',
+		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+		weekHeader: 'Săpt',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ro']);
+});
+
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ru'] = {
+		closeText: 'Закрыть',
+		prevText: '&#x3C;Пред',
+		nextText: 'След&#x3E;',
+		currentText: 'СегоднÑ',
+		monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь',
+		'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'],
+		monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+		'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+		dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'],
+		dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'],
+		dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+		weekHeader: 'Ðед',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ru']);
+});
+
+/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+	$.datepicker.regional['sk'] = {
+		closeText: 'Zavrieť',
+		prevText: '&#x3C;Predchádzajúci',
+		nextText: 'Nasledujúci&#x3E;',
+		currentText: 'Dnes',
+		monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+		'Júl','August','September','Október','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+		'Júl','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+		dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'],
+		dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'],
+		weekHeader: 'Ty',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sk']);
+});
+
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = Ä, s = Å¡ z = ž C = ÄŒ S = Å  Z = Ž */
+jQuery(function($){
+	$.datepicker.regional['sl'] = {
+		closeText: 'Zapri',
+		prevText: '&#x3C;Prejšnji',
+		nextText: 'Naslednji&#x3E;',
+		currentText: 'Trenutni',
+		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+		'Julij','Avgust','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Avg','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','ÄŒetrtek','Petek','Sobota'],
+		dayNamesShort: ['Ned','Pon','Tor','Sre','ÄŒet','Pet','Sob'],
+		dayNamesMin: ['Ne','Po','To','Sr','ÄŒe','Pe','So'],
+		weekHeader: 'Teden',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sl']);
+});
+
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['sq'] = {
+		closeText: 'mbylle',
+		prevText: '&#x3C;mbrapa',
+		nextText: 'Përpara&#x3E;',
+		currentText: 'sot',
+		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+		'Kor','Gus','Sht','Tet','Nën','Dhj'],
+		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+		weekHeader: 'Ja',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sq']);
+});
+
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+	$.datepicker.regional['sr-SR'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Avg','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sre','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Sed',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
+
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+	$.datepicker.regional['sr'] = {
+		closeText: 'Затвори',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'ДанаÑ',
+		monthNames: ['Јануар','Фебруар','Март','Ðприл','Мај','Јун',
+		'Јул','ÐвгуÑÑ‚','Септембар','Октобар','Ðовембар','Децембар'],
+		monthNamesShort: ['Јан','Феб','Мар','Ðпр','Мај','Јун',
+		'Јул','Ðвг','Сеп','Окт','Ðов','Дец'],
+		dayNames: ['Ðедеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+		dayNamesShort: ['Ðед','Пон','Уто','Сре','Чет','Пет','Суб'],
+		dayNamesMin: ['Ðе','По','Ут','Ср','Че','Пе','Су'],
+		weekHeader: 'Сед',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sr']);
+});
+
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+	$.datepicker.regional['sv'] = {
+		closeText: 'Stäng',
+		prevText: '&#xAB;Förra',
+		nextText: 'Nästa&#xBB;',
+		currentText: 'Idag',
+		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+		'Juli','Augusti','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+		weekHeader: 'Ve',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sv']);
+});
+
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+	$.datepicker.regional['ta'] = {
+		closeText: 'மூடà¯',
+		prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯',
+		nextText: 'அடà¯à®¤à¯à®¤à®¤à¯',
+		currentText: 'இனà¯à®±à¯',
+		monthNames: ['தை','மாசி','பஙà¯à®•à¯à®©à®¿','சிதà¯à®¤à®¿à®°à¯ˆ','வைகாசி','ஆனி',
+		'ஆடி','ஆவணி','பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿','à®à®ªà¯à®ªà®šà®¿','காரà¯à®¤à¯à®¤à®¿à®•à¯ˆ','மாரà¯à®•à®´à®¿'],
+		monthNamesShort: ['தை','மாசி','பஙà¯','சிதà¯','வைகா','ஆனி',
+		'ஆடி','ஆவ','பà¯à®°','à®à®ªà¯','காரà¯','மாரà¯'],
+		dayNames: ['ஞாயிறà¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','திஙà¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ','செவà¯à®µà®¾à®¯à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','பà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ','வியாழகà¯à®•à®¿à®´à®®à¯ˆ','வெளà¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ','சனிகà¯à®•à®¿à®´à®®à¯ˆ'],
+		dayNamesShort: ['ஞாயிறà¯','திஙà¯à®•à®³à¯','செவà¯à®µà®¾à®¯à¯','பà¯à®¤à®©à¯','வியாழனà¯','வெளà¯à®³à®¿','சனி'],
+		dayNamesMin: ['ஞா','தி','செ','பà¯','வி','வெ','ச'],
+		weekHeader: 'Ðе',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ta']);
+});
+
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+	$.datepicker.regional['th'] = {
+		closeText: 'ปิด',
+		prevText: '&#xAB;&#xA0;ย้อน',
+		nextText: 'ถัดไป&#xA0;&#xBB;',
+		currentText: 'วันนี้',
+		monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+		'à¸à¸£à¸à¸Žà¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'],
+		monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+		'à¸.ค.','ส.ค.','à¸.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'],
+		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['th']);
+});
+
+/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['tj'] = {
+		closeText: 'Идома',
+		prevText: '&#x3c;Қафо',
+		nextText: 'Пеш&#x3e;',
+		currentText: 'Имрӯз',
+		monthNames: ['Январ','Феврал','Март','Ðпрел','Май','Июн',
+		'Июл','ÐвгуÑÑ‚','СентÑбр','ОктÑбр','ÐоÑбр','Декабр'],
+		monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+		'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+		dayNames: ['Ñкшанбе','душанбе','Ñешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+		dayNamesShort: ['Ñкш','душ','Ñеш','чор','пан','ҷум','шан'],
+		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+		weekHeader: 'Хф',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['tj']);
+});
+
+/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+	$.datepicker.regional['tr'] = {
+		closeText: 'kapat',
+		prevText: '&#x3C;geri',
+		nextText: 'ileri&#x3e',
+		currentText: 'bugün',
+		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+		monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz',
+		'Tem','AÄŸu','Eyl','Eki','Kas','Ara'],
+		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+		weekHeader: 'Hf',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['tr']);
+});
+
+/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['uk'] = {
+		closeText: 'Закрити',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Сьогодні',
+		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+		'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'],
+		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+		'Лип','Сер','Вер','Жов','ЛиÑ','Гру'],
+		dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','п’ÑтницÑ','Ñубота'],
+		dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'],
+		dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+		weekHeader: 'Тиж',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['uk']);
+});
+
+/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+	$.datepicker.regional['vi'] = {
+		closeText: 'Äóng',
+		prevText: '&#x3C;TrÆ°á»›c',
+		nextText: 'Tiếp&#x3E;',
+		currentText: 'Hôm nay',
+		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng MÆ°á»i', 'Tháng MÆ°á»i Má»™t', 'Tháng MÆ°á»i Hai'],
+		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+		weekHeader: 'Tu',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['vi']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-CN'] = {
+		closeText: '关闭',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-HK'] = {
+		closeText: '關閉',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-TW'] = {
+		closeText: '關閉',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-af.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+	$.datepicker.regional['af'] = {
+		closeText: 'Selekteer',
+		prevText: 'Vorige',
+		nextText: 'Volgende',
+		currentText: 'Vandag',
+		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+		'Julie','Augustus','September','Oktober','November','Desember'],
+		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['af']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar-DZ.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+	$.datepicker.regional['ar-DZ'] = {
+		closeText: 'إغلاق',
+		prevText: '&#x3C;السابق',
+		nextText: 'التالي&#x3E;',
+		currentText: 'اليوم',
+		monthNames: ['جانÙÙŠ', 'ÙÙŠÙري', 'مارس', 'Ø£Ùريل', 'ماي', 'جوان',
+		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوÙمبر', 'ديسمبر'],
+		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		weekHeader: 'أسبوع',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 6,
+  		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name Ùبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+	$.datepicker.regional['ar'] = {
+		closeText: 'إغلاق',
+		prevText: '&#x3C;السابق',
+		nextText: 'التالي&#x3E;',
+		currentText: 'اليوم',
+		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+		weekHeader: 'أسبوع',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 6,
+  		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ar']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-az.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+	$.datepicker.regional['az'] = {
+		closeText: 'BaÄŸla',
+		prevText: '&#x3C;Geri',
+		nextText: 'İrəli&#x3E;',
+		currentText: 'Bugün',
+		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun',
+		'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+		monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun',
+		'Ä°yul','Avq','Sen','Okt','Noy','Dek'],
+		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+		weekHeader: 'Hf',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['az']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-bg.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+	$.datepicker.regional['bg'] = {
+		closeText: 'затвори',
+		prevText: '&#x3C;назад',
+		nextText: 'напред&#x3E;',
+		nextBigText: '&#x3E;&#x3E;',
+		currentText: 'днеÑ',
+		monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни',
+		'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+		monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни',
+		'Юли','Ðвг','Сеп','Окт','Ðов','Дек'],
+		dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'],
+		dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'],
+		dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['bg']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-bs.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+	$.datepicker.regional['bs'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['bs']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ca.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ca'] = {
+		closeText: 'Tanca',
+		prevText: 'Anterior',
+		nextText: 'Següent',
+		currentText: 'Avui',
+		monthNames: ['gener','febrer','març','abril','maig','juny',
+		'juliol','agost','setembre','octubre','novembre','desembre'],
+		monthNamesShort: ['gen','feb','març','abr','maig','juny',
+		'jul','ag','set','oct','nov','des'],
+		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
+		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
+		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
+		weekHeader: 'Set',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ca']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-cs.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+	$.datepicker.regional['cs'] = {
+		closeText: 'Zavřít',
+		prevText: '&#x3C;Dříve',
+		nextText: 'Později&#x3E;',
+		currentText: 'Nyní',
+		monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven',
+		'Äervenec','srpen','září','říjen','listopad','prosinec'],
+		monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer',
+		'Ävc','srp','zář','říj','lis','pro'],
+		dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'],
+		dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'],
+		dayNamesMin: ['ne','po','út','st','Ät','pá','so'],
+		weekHeader: 'Týd',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['cs']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-cy-GB.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+	$.datepicker.regional['cy-GB'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+		weekHeader: 'Wy',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-da.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['da'] = {
+		closeText: 'Luk',
+		prevText: '&#x3C;Forrige',
+		nextText: 'Næste&#x3E;',
+		currentText: 'Idag',
+		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+		'Juli','August','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+		weekHeader: 'Uge',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['da']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-de-CH.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Swiss-German initialisation for the jQuery UI date picker plugin. */
+/* By Douglas Jose & Juerg Meier. */
+jQuery(function($){
+	$.datepicker.regional['de-CH'] = {
+		closeText: 'schliessen',
+		prevText: '&#x3c;zurück',
+		nextText: 'nächster&#x3e;',
+		currentText: 'heute',
+		monthNames: ['Januar','Februar','März','April','Mai','Juni',
+		'Juli','August','September','Oktober','November','Dezember'],
+		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dez'],
+		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		weekHeader: 'Wo',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['de-CH']);
+});/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-de.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+	$.datepicker.regional['de'] = {
+		closeText: 'schließen',
+		prevText: '&#x3C;zurück',
+		nextText: 'Vor&#x3E;',
+		currentText: 'heute',
+		monthNames: ['Januar','Februar','März','April','Mai','Juni',
+		'Juli','August','September','Oktober','November','Dezember'],
+		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dez'],
+		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+		weekHeader: 'KW',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['de']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-el.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+	$.datepicker.regional['el'] = {
+		closeText: 'Κλείσιμο',
+		prevText: 'ΠÏοηγοÏμενος',
+		nextText: 'Επόμενος',
+		currentText: 'ΤÏέχων Μήνας',
+		monthNames: ['ΙανουάÏιος','ΦεβÏουάÏιος','ΜάÏτιος','ΑπÏίλιος','Μάιος','ΙοÏνιος',
+		'ΙοÏλιος','ΑÏγουστος','ΣεπτέμβÏιος','ΟκτώβÏιος','ÎοέμβÏιος','ΔεκέμβÏιος'],
+		monthNamesShort: ['Ιαν','Φεβ','ΜαÏ','ΑπÏ','Μαι','Ιουν',
+		'Ιουλ','Αυγ','Σεπ','Οκτ','Îοε','Δεκ'],
+		dayNames: ['ΚυÏιακή','ΔευτέÏα','ΤÏίτη','ΤετάÏτη','Πέμπτη','ΠαÏασκευή','Σάββατο'],
+		dayNamesShort: ['ΚυÏ','Δευ','ΤÏι','Τετ','Πεμ','ΠαÏ','Σαβ'],
+		dayNamesMin: ['Κυ','Δε','ΤÏ','Τε','Πε','Πα','Σα'],
+		weekHeader: 'Εβδ',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['el']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-AU.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+	$.datepicker.regional['en-AU'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-GB.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+	$.datepicker.regional['en-GB'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-NZ.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+	$.datepicker.regional['en-NZ'] = {
+		closeText: 'Done',
+		prevText: 'Prev',
+		nextText: 'Next',
+		currentText: 'Today',
+		monthNames: ['January','February','March','April','May','June',
+		'July','August','September','October','November','December'],
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-eo.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+	$.datepicker.regional['eo'] = {
+		closeText: 'Fermi',
+		prevText: '&#x3C;Anta',
+		nextText: 'Sekv&#x3E;',
+		currentText: 'Nuna',
+		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+		'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','AÅ­g','Sep','Okt','Nov','Dec'],
+		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+		dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'],
+		dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'],
+		weekHeader: 'Sb',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['eo']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-es.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['es'] = {
+		closeText: 'Cerrar',
+		prevText: '&#x3C;Ant',
+		nextText: 'Sig&#x3E;',
+		currentText: 'Hoy',
+		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+		'Jul','Ago','Sep','Oct','Nov','Dic'],
+		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['es']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-et.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+	$.datepicker.regional['et'] = {
+		closeText: 'Sulge',
+		prevText: 'Eelnev',
+		nextText: 'Järgnev',
+		currentText: 'Täna',
+		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+		'Juuli','August','September','Oktoober','November','Detsember'],
+		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+		dayNamesMin: ['P','E','T','K','N','R','L'],
+		weekHeader: 'näd',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['et']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-eu.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+	$.datepicker.regional['eu'] = {
+		closeText: 'Egina',
+		prevText: '&#x3C;Aur',
+		nextText: 'Hur&#x3E;',
+		currentText: 'Gaur',
+		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+			'uzt.','abu.','ira.','urr.','aza.','abe.'],
+		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+		weekHeader: 'As',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['eu']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fa.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,61 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+	$.datepicker.regional['fa'] = {
+		closeText: 'بستن',
+		prevText: '&#x3C;قبلی',
+		nextText: 'بعدی&#x3E;',
+		currentText: 'امروز',
+		monthNames: [
+			'Ùروردين',
+			'ارديبهشت',
+			'خرداد',
+			'تير',
+			'مرداد',
+			'شهريور',
+			'مهر',
+			'آبان',
+			'آذر',
+			'دی',
+			'بهمن',
+			'اسÙند'
+		],
+		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+		dayNames: [
+			'يکشنبه',
+			'دوشنبه',
+			'سه‌شنبه',
+			'چهارشنبه',
+			'پنجشنبه',
+			'جمعه',
+			'شنبه'
+		],
+		dayNamesShort: [
+			'ی',
+			'د',
+			'س',
+			'Ú†',
+			'Ù¾',
+			'ج',
+			'Ø´'
+		],
+		dayNamesMin: [
+			'ی',
+			'د',
+			'س',
+			'Ú†',
+			'Ù¾',
+			'ج',
+			'Ø´'
+		],
+		weekHeader: 'Ù‡Ù',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 6,
+		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fa']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fi.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['fi'] = {
+		closeText: 'Sulje',
+		prevText: '&#xAB;Edellinen',
+		nextText: 'Seuraava&#xBB;',
+		currentText: 'Tänään',
+		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
+		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+		weekHeader: 'Vk',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fi']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fo.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+	$.datepicker.regional['fo'] = {
+		closeText: 'Lat aftur',
+		prevText: '&#x3C;Fyrra',
+		nextText: 'Næsta&#x3E;',
+		currentText: 'Ã dag',
+		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+		'Juli','August','September','Oktober','November','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Des'],
+		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+		weekHeader: 'Vk',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fo']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr-CH.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+	$.datepicker.regional['fr-CH'] = {
+		closeText: 'Fermer',
+		prevText: '&#x3C;Préc',
+		nextText: 'Suiv&#x3E;',
+		currentText: 'Courant',
+		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+		'Jul','Aoû','Sep','Oct','Nov','Déc'],
+		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+			  Stéphane Nahmani (sholby@sholby.net),
+			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+	$.datepicker.regional['fr'] = {
+		closeText: 'Fermer',
+		prevText: 'Précédent',
+		nextText: 'Suivant',
+		currentText: 'Aujourd\'hui',
+		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+		dayNamesMin: ['D','L','M','M','J','V','S'],
+		weekHeader: 'Sem.',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['fr']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-gl.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+	$.datepicker.regional['gl'] = {
+		closeText: 'Pechar',
+		prevText: '&#x3C;Ant',
+		nextText: 'Seg&#x3E;',
+		currentText: 'Hoxe',
+		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+		'Xul','Ago','Set','Out','Nov','Dec'],
+		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['gl']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-he.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+	$.datepicker.regional['he'] = {
+		closeText: 'סגור',
+		prevText: '&#x3C;הקוד×',
+		nextText: 'הב×&#x3E;',
+		currentText: 'היו×',
+		monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני',
+		'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'],
+		monthNamesShort: ['ינו','פבר','מרץ','×פר','מ××™','יוני',
+		'יולי','×וג','ספט','×וק','נוב','דצמ'],
+		dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+		dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+		dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: true,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['he']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hi.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Hindi initialisation for the jQuery UI date picker plugin. */
+/* Written by Michael Dawart. */
+jQuery(function($){
+	$.datepicker.regional['hi'] = {
+		closeText: 'बंद',
+		prevText: 'पिछला',
+		nextText: 'अगला',
+		currentText: 'आज',
+		monthNames: ['जनवरी ','फरवरी','मारà¥à¤š','अपà¥à¤°à¥‡à¤²','मई','जून',
+		'जूलाई','अगसà¥à¤¤ ','सितमà¥à¤¬à¤°','अकà¥à¤Ÿà¥‚बर','नवमà¥à¤¬à¤°','दिसमà¥à¤¬à¤°'],
+		monthNamesShort: ['जन', 'फर', 'मारà¥à¤š', 'अपà¥à¤°à¥‡à¤²', 'मई', 'जून',
+		'जूलाई', 'अग', 'सित', 'अकà¥à¤Ÿ', 'नव', 'दि'],
+		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बà¥à¤§à¤µà¤¾à¤°', 'गà¥à¤°à¥à¤µà¤¾à¤°', 'शà¥à¤•à¥à¤°à¤µà¤¾à¤°', 'शनिवार'],
+		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+		weekHeader: 'हफà¥à¤¤à¤¾',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hi']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hr.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+	$.datepicker.regional['hr'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['SijeÄanj','VeljaÄa','Ožujak','Travanj','Svibanj','Lipanj',
+		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+		'Srp','Kol','Ruj','Lis','Stu','Pro'],
+		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Tje',
+		dateFormat: 'dd.mm.yy.',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hr']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hu.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+	$.datepicker.regional['hu'] = {
+		closeText: 'bezár',
+		prevText: 'vissza',
+		nextText: 'előre',
+		currentText: 'ma',
+		monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június',
+		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún',
+		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+		weekHeader: 'Hét',
+		dateFormat: 'yy.mm.dd.',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hu']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hy.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+	$.datepicker.regional['hy'] = {
+		closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬',
+		prevText: '&#x3C;Õ†Õ¡Õ­.',
+		nextText: 'Õ€Õ¡Õ».&#x3E;',
+		currentText: 'Ô±ÕµÕ½Ö…Ö€',
+		monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+		'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'],
+		monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+		'Õ€Õ¸Ö‚Õ¬','Õ•Õ£Õ½','ÕÕ¥Õº','Õ€Õ¸Õ¯','Õ†Õ¸Õµ','Ô´Õ¥Õ¯'],
+		dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'],
+		dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+		dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+		weekHeader: 'Õ‡Ô²Õ',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['hy']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-id.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['id'] = {
+		closeText: 'Tutup',
+		prevText: '&#x3C;mundur',
+		nextText: 'maju&#x3E;',
+		currentText: 'hari ini',
+		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+		'Juli','Agustus','September','Oktober','Nopember','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+		'Jul','Agus','Sep','Okt','Nop','Des'],
+		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+		weekHeader: 'Mg',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['id']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-is.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+	$.datepicker.regional['is'] = {
+		closeText: 'Loka',
+		prevText: '&#x3C; Fyrri',
+		nextText: 'Næsti &#x3E;',
+		currentText: 'Ã dag',
+		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+		'Júlí','Ãgúst','September','Október','Nóvember','Desember'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+		'Júl','Ãgú','Sep','Okt','Nóv','Des'],
+		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
+		weekHeader: 'Vika',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['is']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-it.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['it'] = {
+		closeText: 'Chiudi',
+		prevText: '&#x3C;Prec',
+		nextText: 'Succ&#x3E;',
+		currentText: 'Oggi',
+		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+			'Lug','Ago','Set','Ott','Nov','Dic'],
+		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
+		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['it']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ja.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+	$.datepicker.regional['ja'] = {
+		closeText: 'é–‰ã˜ã‚‹',
+		prevText: '&#x3C;å‰',
+		nextText: '次&#x3E;',
+		currentText: '今日',
+		monthNames: ['1月','2月','3月','4月','5月','6月',
+		'7月','8月','9月','10月','11月','12月'],
+		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+		'7月','8月','9月','10月','11月','12月'],
+		dayNames: ['日曜日','月曜日','ç«æ›œæ—¥','水曜日','木曜日','金曜日','土曜日'],
+		dayNamesShort: ['æ—¥','月','ç«','æ°´','木','金','土'],
+		dayNamesMin: ['æ—¥','月','ç«','æ°´','木','金','土'],
+		weekHeader: '週',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['ja']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ka.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ka'] = {
+		closeText: 'დáƒáƒ®áƒ£áƒ áƒ•áƒ',
+		prevText: '&#x3c; წინáƒ',
+		nextText: 'შემდეგი &#x3e;',
+		currentText: 'დღეს',
+		monthNames: ['იáƒáƒœáƒ•áƒáƒ áƒ˜','თებერვáƒáƒšáƒ˜','მáƒáƒ áƒ¢áƒ˜','áƒáƒžáƒ áƒ˜áƒšáƒ˜','მáƒáƒ˜áƒ¡áƒ˜','ივნისი', 'ივლისი','áƒáƒ’ვისტáƒ','სექტემბერი','áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი','ნáƒáƒ”მბერი','დეკემბერი'],
+		monthNamesShort: ['იáƒáƒœ','თებ','მáƒáƒ ','áƒáƒžáƒ ','მáƒáƒ˜','ივნ', 'ივლ','áƒáƒ’ვ','სექ','áƒáƒ¥áƒ¢','ნáƒáƒ”','დეკ'],
+		dayNames: ['კვირáƒ','áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი','სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი','áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი','ხუთშáƒáƒ‘áƒáƒ—ი','პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი','შáƒáƒ‘áƒáƒ—ი'],
+		dayNamesShort: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+		dayNamesMin: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+		weekHeader: 'კვირáƒ',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ka']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-kk.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['kk'] = {
+		closeText: 'Жабу',
+		prevText: '&#x3C;Ðлдыңғы',
+		nextText: 'КелеÑÑ–&#x3E;',
+		currentText: 'Бүгін',
+		monthNames: ['Қаңтар','Ðқпан','Ðаурыз','Сәуір','Мамыр','МауÑым',
+		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','ЖелтоқÑан'],
+		monthNamesShort: ['Қаң','Ðқп','Ðау','Сәу','Мам','Мау',
+		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+		dayNames: ['ЖекÑенбі','ДүйÑенбі','СейÑенбі','СәрÑенбі','БейÑенбі','Жұма','Сенбі'],
+		dayNamesShort: ['жкÑ','дÑн','ÑÑн','ÑÑ€Ñ','бÑн','жма','Ñнб'],
+		dayNamesMin: ['Жк','ДÑ','СÑ','Ср','БÑ','Жм','Сн'],
+		weekHeader: 'Ðе',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['kk']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-km.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Khmer initialisation for the jQuery calendar extension. */
+/* Written by Chandara Om (chandara.teacher@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['km'] = {
+		closeText: 'ធ្វើ​រួច',
+		prevText: 'មុន',
+		nextText: 'បន្ទាប់',
+		currentText: 'ážáŸ’ងៃ​នáŸáŸ‡',
+		monthNames: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+		'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+		'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+		dayNames: ['អាទិážáŸ’áž™', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បážáž·áŸ', 'សុក្រ', 'សៅរáŸ'],
+		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+		weekHeader: 'សប្ដាហáŸ',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['km']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ko.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+jQuery(function($){
+	$.datepicker.regional['ko'] = {
+		closeText: '닫기',
+		prevText: 'ì´ì „달',
+		nextText: '다ìŒë‹¬',
+		currentText: '오늘',
+		monthNames: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+		'7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+		monthNamesShort: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+		'7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+		dayNames: ['ì¼ìš”ì¼','월요ì¼','화요ì¼','수요ì¼','목요ì¼','금요ì¼','토요ì¼'],
+		dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'],
+		dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'],
+		weekHeader: 'Wk',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'ë…„'};
+	$.datepicker.setDefaults($.datepicker.regional['ko']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-kz.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['kz'] = {
+		closeText: 'Жабу',
+		prevText: '&#x3c;Ðлдыңғы',
+		nextText: 'КелеÑÑ–&#x3e;',
+		currentText: 'Бүгін',
+		monthNames: ['Қаңтар','Ðқпан','Ðаурыз','Сәуір','Мамыр','МауÑым',
+		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','ЖелтоқÑан'],
+		monthNamesShort: ['Қаң','Ðқп','Ðау','Сәу','Мам','Мау',
+		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+		dayNames: ['ЖекÑенбі','ДүйÑенбі','СейÑенбі','СәрÑенбі','БейÑенбі','Жұма','Сенбі'],
+		dayNamesShort: ['жкÑ','дÑн','ÑÑн','ÑÑ€Ñ','бÑн','жма','Ñнб'],
+		dayNamesMin: ['Жк','ДÑ','СÑ','Ср','БÑ','Жм','Сн'],
+		weekHeader: 'Ðе',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['kz']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lb.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+jQuery(function($){
+	$.datepicker.regional['lb'] = {
+		closeText: 'Fäerdeg',
+		prevText: 'Zréck',
+		nextText: 'Weider',
+		currentText: 'Haut',
+		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+		'Juli','August','September','Oktober','November','Dezember'],
+		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+		weekHeader: 'W',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lb']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lt.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+	$.datepicker.regional['lt'] = {
+		closeText: 'Uždaryti',
+		prevText: '&#x3C;Atgal',
+		nextText: 'Pirmyn&#x3E;',
+		currentText: 'Å iandien',
+		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+		dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'],
+		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'],
+		weekHeader: 'Wk',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lt']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lv.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+	$.datepicker.regional['lv'] = {
+		closeText: 'Aizvērt',
+		prevText: 'Iepr',
+		nextText: 'NÄka',
+		currentText: 'Å odien',
+		monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs',
+		'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n',
+		'JÅ«l','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+		weekHeader: 'Nav',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['lv']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-mk.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Macedonian i18n for the jQuery UI date picker plugin. */
+/* Written by Stojce Slavkovski. */
+jQuery(function($){
+	$.datepicker.regional['mk'] = {
+		closeText: 'Затвори',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'ДенеÑ',
+		monthNames: ['Јануари','Февруари','Март','Ðприл','Мај','Јуни',
+		'Јули','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+		monthNamesShort: ['Јан','Фев','Мар','Ðпр','Мај','Јун',
+		'Јул','Ðвг','Сеп','Окт','Ðое','Дек'],
+		dayNames: ['Ðедела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+		dayNamesShort: ['Ðед','Пон','Вто','Сре','Чет','Пет','Саб'],
+		dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Са'],
+		weekHeader: 'Сед',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['mk']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ml.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ml'] = {
+		closeText: 'ശരി',
+		prevText: 'à´®àµà´¨àµà´¨à´¤àµà´¤àµ†',
+		nextText: 'à´…à´Ÿàµà´¤àµà´¤à´¤àµ ',
+		currentText: 'ഇനàµà´¨àµ',
+		monthNames: ['ജനàµà´µà´°à´¿','ഫെബàµà´°àµà´µà´°à´¿','മാരàµâ€à´šàµà´šàµ','à´à´ªàµà´°à´¿à´²àµâ€','മേയàµ','ജൂണàµâ€',
+		'ജൂലൈ','ആഗസàµà´±àµà´±àµ','സെപàµà´±àµà´±à´‚ബരàµâ€','à´’à´•àµà´Ÿàµ‹à´¬à´°àµâ€','നവംബരàµâ€','ഡിസംബരàµâ€'],
+		monthNamesShort: ['ജനàµ', 'ഫെബàµ', 'മാരàµâ€', 'à´à´ªàµà´°à´¿', 'മേയàµ', 'ജൂണàµâ€',
+		'ജൂലാ', 'ആഗ', 'സെപàµ', 'à´’à´•àµà´Ÿàµ‹', 'നവം', 'à´¡à´¿à´¸'],
+		dayNames: ['ഞായരàµâ€', 'തിങàµà´•à´³àµâ€', 'ചൊവàµà´µ', 'à´¬àµà´§à´¨àµâ€', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+		dayNamesShort: ['ഞായ', 'തിങàµà´•', 'ചൊവàµà´µ', 'à´¬àµà´§', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+		dayNamesMin: ['à´žà´¾','തി','ചൊ','à´¬àµ','à´µàµà´¯à´¾','വെ','à´¶'],
+		weekHeader: 'à´†',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ml']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ms.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+	$.datepicker.regional['ms'] = {
+		closeText: 'Tutup',
+		prevText: '&#x3C;Sebelum',
+		nextText: 'Selepas&#x3E;',
+		currentText: 'hari ini',
+		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+		'Julai','Ogos','September','Oktober','November','Disember'],
+		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+		'Jul','Ogo','Sep','Okt','Nov','Dis'],
+		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+		weekHeader: 'Mg',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ms']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl-BE.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+	$.datepicker.regional['nl-BE'] = {
+		closeText: 'Sluiten',
+		prevText: 'â†',
+		nextText: '→',
+		currentText: 'Vandaag',
+		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+	$.datepicker.regional.nl = {
+		closeText: 'Sluiten',
+		prevText: 'â†',
+		nextText: '→',
+		currentText: 'Vandaag',
+		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional.nl);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-no.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+	$.datepicker.regional['no'] = {
+		closeText: 'Lukk',
+		prevText: '&#xAB;Forrige',
+		nextText: 'Neste&#xBB;',
+		currentText: 'I dag',
+		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+		weekHeader: 'Uke',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''
+	};
+	$.datepicker.setDefaults($.datepicker.regional['no']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pl.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['pl'] = {
+		closeText: 'Zamknij',
+		prevText: '&#x3C;Poprzedni',
+		nextText: 'Następny&#x3E;',
+		currentText: 'DziÅ›',
+		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+		'Lip','Sie','Wrz','Pa','Lis','Gru'],
+		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+		dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'],
+		dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'],
+		weekHeader: 'Tydz',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pl']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt-BR.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['pt-BR'] = {
+		closeText: 'Fechar',
+		prevText: '&#x3C;Anterior',
+		nextText: 'Próximo&#x3E;',
+		currentText: 'Hoje',
+		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+		'Jul','Ago','Set','Out','Nov','Dez'],
+		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		weekHeader: 'Sm',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+	$.datepicker.regional['pt'] = {
+		closeText: 'Fechar',
+		prevText: '&#x3C;Anterior',
+		nextText: 'Seguinte',
+		currentText: 'Hoje',
+		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+		'Jul','Ago','Set','Out','Nov','Dez'],
+		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+		weekHeader: 'Sem',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['pt']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-rm.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Romansh initialisation for the jQuery UI date picker plugin. */
+/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+jQuery(function($){
+	$.datepicker.regional['rm'] = {
+		closeText: 'Serrar',
+		prevText: '&#x3C;Suandant',
+		nextText: 'Precedent&#x3E;',
+		currentText: 'Actual',
+		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+		weekHeader: 'emna',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['rm']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ro.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+	$.datepicker.regional['ro'] = {
+		closeText: 'ÃŽnchide',
+		prevText: '&#xAB; Luna precedentă',
+		nextText: 'Luna următoare &#xBB;',
+		currentText: 'Azi',
+		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+		weekHeader: 'Săpt',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ro']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ru.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['ru'] = {
+		closeText: 'Закрыть',
+		prevText: '&#x3C;Пред',
+		nextText: 'След&#x3E;',
+		currentText: 'СегоднÑ',
+		monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь',
+		'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'],
+		monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+		'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+		dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'],
+		dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'],
+		dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+		weekHeader: 'Ðед',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ru']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sk.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+	$.datepicker.regional['sk'] = {
+		closeText: 'Zavrieť',
+		prevText: '&#x3C;Predchádzajúci',
+		nextText: 'Nasledujúci&#x3E;',
+		currentText: 'Dnes',
+		monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+		'Júl','August','September','Október','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+		'Júl','Aug','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+		dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'],
+		dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'],
+		weekHeader: 'Ty',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sk']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sl.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = Ä, s = Å¡ z = ž C = ÄŒ S = Å  Z = Ž */
+jQuery(function($){
+	$.datepicker.regional['sl'] = {
+		closeText: 'Zapri',
+		prevText: '&#x3C;Prejšnji',
+		nextText: 'Naslednji&#x3E;',
+		currentText: 'Trenutni',
+		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+		'Julij','Avgust','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Avg','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','ÄŒetrtek','Petek','Sobota'],
+		dayNamesShort: ['Ned','Pon','Tor','Sre','ÄŒet','Pet','Sob'],
+		dayNamesMin: ['Ne','Po','To','Sr','ÄŒe','Pe','So'],
+		weekHeader: 'Teden',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sl']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sq.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['sq'] = {
+		closeText: 'mbylle',
+		prevText: '&#x3C;mbrapa',
+		nextText: 'Përpara&#x3E;',
+		currentText: 'sot',
+		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+		'Kor','Gus','Sht','Tet','Nën','Dhj'],
+		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+		weekHeader: 'Ja',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sq']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr-SR.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+	$.datepicker.regional['sr-SR'] = {
+		closeText: 'Zatvori',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Danas',
+		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Avg','Sep','Okt','Nov','Dec'],
+		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','ÄŒetvrtak','Petak','Subota'],
+		dayNamesShort: ['Ned','Pon','Uto','Sre','ÄŒet','Pet','Sub'],
+		dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+		weekHeader: 'Sed',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+	$.datepicker.regional['sr'] = {
+		closeText: 'Затвори',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'ДанаÑ',
+		monthNames: ['Јануар','Фебруар','Март','Ðприл','Мај','Јун',
+		'Јул','ÐвгуÑÑ‚','Септембар','Октобар','Ðовембар','Децембар'],
+		monthNamesShort: ['Јан','Феб','Мар','Ðпр','Мај','Јун',
+		'Јул','Ðвг','Сеп','Окт','Ðов','Дец'],
+		dayNames: ['Ðедеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+		dayNamesShort: ['Ðед','Пон','Уто','Сре','Чет','Пет','Суб'],
+		dayNamesMin: ['Ðе','По','Ут','Ср','Че','Пе','Су'],
+		weekHeader: 'Сед',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sr']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sv.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+	$.datepicker.regional['sv'] = {
+		closeText: 'Stäng',
+		prevText: '&#xAB;Förra',
+		nextText: 'Nästa&#xBB;',
+		currentText: 'Idag',
+		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+		'Juli','Augusti','September','Oktober','November','December'],
+		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+		'Jul','Aug','Sep','Okt','Nov','Dec'],
+		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+		weekHeader: 'Ve',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['sv']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ta.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+	$.datepicker.regional['ta'] = {
+		closeText: 'மூடà¯',
+		prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯',
+		nextText: 'அடà¯à®¤à¯à®¤à®¤à¯',
+		currentText: 'இனà¯à®±à¯',
+		monthNames: ['தை','மாசி','பஙà¯à®•à¯à®©à®¿','சிதà¯à®¤à®¿à®°à¯ˆ','வைகாசி','ஆனி',
+		'ஆடி','ஆவணி','பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿','à®à®ªà¯à®ªà®šà®¿','காரà¯à®¤à¯à®¤à®¿à®•à¯ˆ','மாரà¯à®•à®´à®¿'],
+		monthNamesShort: ['தை','மாசி','பஙà¯','சிதà¯','வைகா','ஆனி',
+		'ஆடி','ஆவ','பà¯à®°','à®à®ªà¯','காரà¯','மாரà¯'],
+		dayNames: ['ஞாயிறà¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','திஙà¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ','செவà¯à®µà®¾à®¯à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','பà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ','வியாழகà¯à®•à®¿à®´à®®à¯ˆ','வெளà¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ','சனிகà¯à®•à®¿à®´à®®à¯ˆ'],
+		dayNamesShort: ['ஞாயிறà¯','திஙà¯à®•à®³à¯','செவà¯à®µà®¾à®¯à¯','பà¯à®¤à®©à¯','வியாழனà¯','வெளà¯à®³à®¿','சனி'],
+		dayNamesMin: ['ஞா','தி','செ','பà¯','வி','வெ','ச'],
+		weekHeader: 'Ðе',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['ta']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-th.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+	$.datepicker.regional['th'] = {
+		closeText: 'ปิด',
+		prevText: '&#xAB;&#xA0;ย้อน',
+		nextText: 'ถัดไป&#xA0;&#xBB;',
+		currentText: 'วันนี้',
+		monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+		'à¸à¸£à¸à¸Žà¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'],
+		monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+		'à¸.ค.','ส.ค.','à¸.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'],
+		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+		weekHeader: 'Wk',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['th']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-tj.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['tj'] = {
+		closeText: 'Идома',
+		prevText: '&#x3c;Қафо',
+		nextText: 'Пеш&#x3e;',
+		currentText: 'Имрӯз',
+		monthNames: ['Январ','Феврал','Март','Ðпрел','Май','Июн',
+		'Июл','ÐвгуÑÑ‚','СентÑбр','ОктÑбр','ÐоÑбр','Декабр'],
+		monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+		'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+		dayNames: ['Ñкшанбе','душанбе','Ñешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+		dayNamesShort: ['Ñкш','душ','Ñеш','чор','пан','ҷум','шан'],
+		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+		weekHeader: 'Хф',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['tj']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-tr.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+	$.datepicker.regional['tr'] = {
+		closeText: 'kapat',
+		prevText: '&#x3C;geri',
+		nextText: 'ileri&#x3e',
+		currentText: 'bugün',
+		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+		monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz',
+		'Tem','AÄŸu','Eyl','Eki','Kas','Ara'],
+		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+		weekHeader: 'Hf',
+		dateFormat: 'dd.mm.yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['tr']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-uk.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['uk'] = {
+		closeText: 'Закрити',
+		prevText: '&#x3C;',
+		nextText: '&#x3E;',
+		currentText: 'Сьогодні',
+		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+		'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'],
+		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+		'Лип','Сер','Вер','Жов','ЛиÑ','Гру'],
+		dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','п’ÑтницÑ','Ñубота'],
+		dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'],
+		dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+		weekHeader: 'Тиж',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['uk']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-vi.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+	$.datepicker.regional['vi'] = {
+		closeText: 'Äóng',
+		prevText: '&#x3C;TrÆ°á»›c',
+		nextText: 'Tiếp&#x3E;',
+		currentText: 'Hôm nay',
+		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng MÆ°á»i', 'Tháng MÆ°á»i Má»™t', 'Tháng MÆ°á»i Hai'],
+		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+		weekHeader: 'Tu',
+		dateFormat: 'dd/mm/yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: false,
+		yearSuffix: ''};
+	$.datepicker.setDefaults($.datepicker.regional['vi']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-CN.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-CN'] = {
+		closeText: '关闭',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'yy-mm-dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-HK.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-HK'] = {
+		closeText: '關閉',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'dd-mm-yy',
+		firstDay: 0,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-TW.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat (MIT) */
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+	$.datepicker.regional['zh-TW'] = {
+		closeText: '關閉',
+		prevText: '&#x3C;上月',
+		nextText: '下月&#x3E;',
+		currentText: '今天',
+		monthNames: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+		'七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+		dayNamesMin: ['日','一','二','三','四','五','六'],
+		weekHeader: '周',
+		dateFormat: 'yy/mm/dd',
+		firstDay: 1,
+		isRTL: false,
+		showMonthAfterYear: true,
+		yearSuffix: 'å¹´'};
+	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
+/* @license-end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/jquery-ui-accessible-datepicker.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,237 @@
+/*! jQuery UI Accessible Datepicker extension
+* (to be appended to jquery-ui-*.custom.min.js)
+*
+* @licstart The following is the entire license notice for the
+*  JavaScript code in this page.
+*
+* Copyright 2014 Kolab Systems AG
+*
+* The JavaScript code in this page is free software: you can
+* redistribute it and/or modify it under the terms of the GNU
+* General Public License (GNU GPL) as published by the Free Software
+* Foundation, either version 3 of the License, or (at your option)
+* any later version.  The code is distributed WITHOUT ANY WARRANTY;
+* without even the implied warranty of MERCHANTABILITY or FITNESS
+* FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+*
+* As additional permission under GNU GPL version 3 section 7, you
+* may distribute non-source (e.g., minimized or compacted) forms of
+* that code without the copy of the GNU GPL normally required by
+* section 4, provided you include this license notice and a URL
+* through which recipients can access the Corresponding Source.
+*
+* @licend The above is the entire license notice
+*  for the JavaScript code in this page.
+*/
+
+(function($, undefined) {
+
+// references to super class methods
+var __newInst           = $.datepicker._newInst;
+var __updateDatepicker  = $.datepicker._updateDatepicker;
+var __connectDatepicker = $.datepicker._connectDatepicker;
+var __showDatepicker    = $.datepicker._showDatepicker;
+var __hideDatepicker    = $.datepicker._hideDatepicker;
+
+// "extend" singleton instance methods
+$.extend($.datepicker, {
+
+	/* Create a new instance object */
+	_newInst: function(target, inline) {
+		var that = this, inst = __newInst.call(this, target, inline);
+
+		if (inst.inline) {
+			// attach keyboard event handler
+			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
+				// we're only interested navigation keys
+				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
+					return;
+				}
+				event.stopPropagation();
+				event.preventDefault();
+				inst._hasfocus = true;
+
+				var activeCell;
+				switch (event.keyCode) {
+					case $.ui.keyCode.ENTER:
+						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
+							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
+						}
+						break;
+
+					case $.ui.keyCode.PAGE_UP:
+						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
+						break;
+					case $.ui.keyCode.PAGE_DOWN:
+						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
+						break;
+
+					default:
+						return that._cursorKeydown(event, inst);
+				}
+			})
+			.attr('role', 'region')
+			.attr('aria-labelledby', inst.id + '-dp-title');
+		}
+		else {
+			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
+			inst.dpDiv.attr('id', widgetId)
+				.attr('aria-hidden', 'true')
+				.attr('aria-labelledby', inst.id + '-dp-title');
+
+				$(inst.input).attr('aria-haspopup', 'true')
+					.attr('aria-expanded', 'false')
+					.attr('aria-owns', widgetId);
+		}
+
+		return inst;
+	},
+
+	/* Attach the date picker to an input field */
+	_connectDatepicker: function(target, inst) {
+		__connectDatepicker.call(this, target, inst);
+
+		var that = this;
+
+		// register additional keyboard events to control date selection with cursor keys
+		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
+			var inc = 1;
+			switch (event.keyCode) {
+				case 109:
+				case 173:
+				case 189:  // "minus"
+					inc = -1;
+				case 61:
+				case 107:
+				case 187:  // "plus"
+					// do nothing if the input does not contain full date string
+					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
+						return true;
+					}
+					that._adjustInstDate(inst, inc, 'D');
+					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
+					return false;
+
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.DOWN:
+					// unfold datepicker if not visible
+					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
+						that._showDatepicker(event);
+						event.stopPropagation();
+						event.preventDefault();
+						return false;
+					}
+
+				default:
+					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
+						return that._cursorKeydown(event, inst);
+					}
+			}
+		})
+		// fix https://bugs.jqueryui.com/ticket/8593
+		.click(function (event) { that._showDatepicker(event); })
+		.attr('autocomplete', 'off');
+	},
+
+	/* Handle keyboard event on datepicker widget */
+	_cursorKeydown: function(event, inst) {
+		inst._keyEvent = true;
+
+		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');
+
+		switch (event.keyCode) {
+			case $.ui.keyCode.LEFT:
+				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
+				break;
+			case $.ui.keyCode.RIGHT:
+				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
+				break;
+			case $.ui.keyCode.UP:
+				this._adjustDate(inst.input, -7, 'D');
+				break;
+			case $.ui.keyCode.DOWN:
+				this._adjustDate(inst.input, +7, 'D');
+				break;
+			case $.ui.keyCode.HOME:
+				// TODO: jump to first of month
+				break;
+			case $.ui.keyCode.END:
+				// TODO: jump to end of month
+				break;
+		}
+
+		return true;
+	},
+
+	/* Pop-up the date picker for a given input field */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		__showDatepicker.call(this, input);
+
+		var inst = $.datepicker._getInst(input);
+		if (inst && $.datepicker._datepickerShowing) {
+			inst.dpDiv.attr('aria-hidden', 'false');
+			$(input).attr('aria-expanded', 'true');
+		}
+	},
+
+	/* Hide the date picker from view */
+	_hideDatepicker: function(input) {
+		__hideDatepicker.call(this, input);
+
+		var inst = this._curInst;
+		if (inst && !$.datepicker._datepickerShowing) {
+			inst.dpDiv.attr('aria-hidden', 'true');
+			$(inst.input).attr('aria-expanded', 'false');
+		}
+	},
+
+	/* Render the date picker content */
+	_updateDatepicker: function(inst) {
+		__updateDatepicker.call(this, inst);
+
+		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
+		if (activeCell) {
+			activeCell = $(activeCell);
+			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
+		}
+
+		// allow focus on main container only
+		inst.dpDiv.find('.ui-datepicker-calendar')
+			.attr('tabindex', inst.inline ? '0' : '-1')
+			.attr('role', 'grid')
+			.attr('aria-readonly', 'true')
+			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
+			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
+			.find('a').attr('tabindex', '-1');
+
+		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');
+
+		inst.dpDiv.find('.ui-datepicker-title')
+			.attr('id', inst.id + '-dp-title')
+
+		// set focus again after update
+		if (inst._hasfocus) {
+			inst.dpDiv.find('.ui-datepicker-calendar').focus();
+			inst._hasfocus = false;
+		}
+	},
+
+	_selectDateRC: function(id, dateStr) {
+		var target = $(id), inst = this._getInst(target[0]);
+
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input) {
+			inst.input.val(dateStr);
+		}
+		this._updateAlternate(inst);
+		if (inst.input) {
+			inst.input.trigger("change"); // fire the change event
+		}
+		if (inst.inline) {
+			this._updateDatepicker(inst);
+		}
+	}
+});
+
+}(jQuery));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/jquery-ui.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,228 @@
+/*! jQuery UI - v1.12.0 - 2016-08-01
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(p.inline?p.dpDiv.parent()[0]:p.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.0";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o,a=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;o=function(){var e=t("<div>").css("position","absolute").appendTo("body").offset({top:1.5,left:1.5}),i=1.5===e.offset().top;return e.remove(),o=function(){return i},i},t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=t.extend({},n);var p,g,m,_,v,b,y=t(n.of),w=t.position.getWithinInfo(n.within),k=t.position.getScrollInfo(w),D=(n.collision||"flip").split(" "),x={};return b=s(y),y[0].preventDefault&&(n.at="left top"),g=b.width,m=b.height,_=b.offset,v=t.extend({},_),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):c.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=c.test(i[1])?i[1]:"center",t=u.exec(i[0]),e=u.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[d.exec(i[0])[0],d.exec(i[1])[0]]}),1===D.length&&(D[1]=D[0]),"right"===n.at[0]?v.left+=g:"center"===n.at[0]&&(v.left+=g/2),"bottom"===n.at[1]?v.top+=m:"center"===n.at[1]&&(v.top+=m/2),p=e(x.at,g,m),v.left+=p[0],v.top+=p[1],this.each(function(){var s,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),C=u+f+i(this,"marginRight")+k.width,I=d+b+i(this,"marginBottom")+k.height,M=t.extend({},v),T=e(x.my,c.outerWidth(),c.outerHeight());"right"===n.my[0]?M.left-=u:"center"===n.my[0]&&(M.left-=u/2),"bottom"===n.my[1]?M.top-=d:"center"===n.my[1]&&(M.top-=d/2),M.left+=T[0],M.top+=T[1],o()||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},t.each(["left","top"],function(e,i){t.ui.position[D[e]]&&t.ui.position[D[e]][i](M,{targetWidth:g,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:s,collisionWidth:C,collisionHeight:I,offset:[p[0]+T[0],p[1]+T[1]],my:n.my,at:n.at,within:w,elem:c})}),n.using&&(l=function(t){var e=_.left-M.left,i=e+g-u,s=_.top-M.top,o=s+m-d,h={target:{element:y,left:_.left,top:_.top,width:g,height:m},element:{element:c,left:M.left,top:M.top,width:u,height:d},horizontal:0>i?"left":e>0?"right":"center",vertical:0>o?"top":s>0?"bottom":"middle"};u>g&&g>r(e+i)&&(h.horizontal="center"),d>m&&m>r(s+o)&&(h.vertical="middle"),h.important=a(r(e),r(i))>a(r(s),r(o))?"horizontal":"vertical",n.using.call(this,t,h)}),c.offset(t.extend(M,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-o-n;e.collisionWidth>o?h>0&&0>=l?(i=t.left+h+e.collisionWidth-o-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+o-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=a(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,o=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-o-n;e.collisionHeight>o?h>0&&0>=l?(i=t.top+h+e.collisionHeight-o-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+o-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=a(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,a=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-a-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-a-o,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,a=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-a-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-a-o,(0>s||r(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>r(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.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},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c=!1;t(document).on("mouseup",function(){c=!1}),t.widget("ui.mouse",{version:"1.12.0",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!c){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),c=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,c=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.0",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this._blurActiveElement(e),this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);this._getHandle(e)&&s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
+},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.droppable",{version:"1.12.0",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&u(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var u=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&u(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=u(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.0",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};
+t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.selectable",t.ui.mouse,{version:"1.12.0",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.0",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.accordion",{version:"1.12.0",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))
+},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.widget("ui.menu",{version:"1.12.0",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",n=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.0",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var d=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.0",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(e["_"+s+"Options"]&&(a=e["_"+s+"Options"]("middle")),e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(t){var n=i.options.classes[t]||"";n=n.replace(d,"").trim(),s[t]=(n+" "+e[t]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.0",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)
+},_updateLabel:function(){this.label.contents().not(this.element.add(this.icon).add(this.iconSpace)).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.0",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.0"}});var p;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),p===n&&(p=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))}},_updateDatepicker:function(e){this.maxRows=4,p=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},D=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?D():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?D():b=!0;break;default:D()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,D,x,C,I,M,T,P,S,A,O,N,H,z,E,W,F,L,R=new Date,Y=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),B=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),K=this._get(t,"hideIfNoPrevNext"),q=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),X=this._get(t,"stepMonths"),$=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-X,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>":K?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+X,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>":K?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:Y,a=q?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(B?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(B?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(D="",this.maxRows=4,x=0;U[1]>x;x++){if(C=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",M="",$){if(M+="<div class='ui-datepicker-group",U[1]>1)switch(x){case 0:M+=" ui-datepicker-group-first",I=" ui-corner-"+(B?"right":"left");break;case U[1]-1:M+=" ui-datepicker-group-last",I=" ui-corner-"+(B?"left":"right");
+break;default:M+=" ui-datepicker-group-middle",I=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?B?o:s:"")+(/all|right/.test(I)&&0===k?B?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||x>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",T=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)P=(w+c)%7,T+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[P]+"'>"+p[P]+"</span></th>";for(M+=T+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),A=(this._getFirstDayOfMonth(te,Z)-c+7)%7,O=Math.ceil((A+S)/7),N=$?this.maxRows>O?this.maxRows:O:O,this.maxRows=N,H=this._daylightSavingAdjust(new Date(te,Z,1-A)),z=0;N>z;z++){for(M+="<tr>",E=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",w=0;7>w;w++)W=m?m.apply(t.input?t.input[0]:null,[H]):[!0,""],F=H.getMonth()!==Z,L=F&&!v||!W[0]||Q&&Q>H||J&&H>J,E+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(H.getTime()===C.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===C.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+W[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===Y.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!W[2]?"":" title='"+W[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===Y.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+($?"</div>"+(U[0]>0&&x===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),D+=M}y+=D}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.0",t.datepicker,t.widget("ui.dialog",{version:"1.12.0",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.progressbar",{version:"1.12.0",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.0",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.0",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)
+},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.spinner",{version:"1.12.0",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.0",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.0",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]
+}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip;var f="ui-effects-",g="ui-effects-style",m="ui-effects-animated",_=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(_),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(_.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(m)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(f+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(f+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.0",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(g,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(g)||"",t.removeData(g)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(f+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=f+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(m),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(m,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var v=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var v;t.uiBackCompat!==!1&&(v=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)}))});
+
+/*! jQuery UI Accessible Datepicker extension
+* Copyright 2014 Kolab Systems AG
+*/
+(function($, undefined) {
+
+// references to super class methods
+var __newInst           = $.datepicker._newInst;
+var __updateDatepicker  = $.datepicker._updateDatepicker;
+var __connectDatepicker = $.datepicker._connectDatepicker;
+var __showDatepicker    = $.datepicker._showDatepicker;
+var __hideDatepicker    = $.datepicker._hideDatepicker;
+
+// "extend" singleton instance methods
+$.extend($.datepicker, {
+
+	/* Create a new instance object */
+	_newInst: function(target, inline) {
+		var that = this, inst = __newInst.call(this, target, inline);
+
+		if (inst.inline) {
+			// attach keyboard event handler
+			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
+				// we're only interested navigation keys
+				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
+					return;
+				}
+				event.stopPropagation();
+				event.preventDefault();
+				inst._hasfocus = true;
+
+				var activeCell;
+				switch (event.keyCode) {
+					case $.ui.keyCode.ENTER:
+						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
+							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
+						}
+						break;
+
+					case $.ui.keyCode.PAGE_UP:
+						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
+						break;
+					case $.ui.keyCode.PAGE_DOWN:
+						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
+						break;
+
+					default:
+						return that._cursorKeydown(event, inst);
+				}
+			})
+			.attr('role', 'region')
+			.attr('aria-labelledby', inst.id + '-dp-title');
+		}
+		else {
+			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
+			inst.dpDiv.attr('id', widgetId)
+				.attr('aria-hidden', 'true')
+				.attr('aria-labelledby', inst.id + '-dp-title');
+
+				$(inst.input).attr('aria-haspopup', 'true')
+					.attr('aria-expanded', 'false')
+					.attr('aria-owns', widgetId);
+		}
+
+		return inst;
+	},
+
+	/* Attach the date picker to an input field */
+	_connectDatepicker: function(target, inst) {
+		__connectDatepicker.call(this, target, inst);
+
+		var that = this;
+
+		// register additional keyboard events to control date selection with cursor keys
+		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
+			var inc = 1;
+			switch (event.keyCode) {
+				case 109:
+				case 173:
+				case 189:  // "minus"
+					inc = -1;
+				case 61:
+				case 107:
+				case 187:  // "plus"
+					// do nothing if the input does not contain full date string
+					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
+						return true;
+					}
+					that._adjustInstDate(inst, inc, 'D');
+					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
+					return false;
+
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.DOWN:
+					// unfold datepicker if not visible
+					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
+						that._showDatepicker(event);
+						event.stopPropagation();
+						event.preventDefault();
+						return false;
+					}
+
+				default:
+					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
+						return that._cursorKeydown(event, inst);
+					}
+			}
+		})
+		// fix https://bugs.jqueryui.com/ticket/8593
+		.click(function (event) { that._showDatepicker(event); })
+		.attr('autocomplete', 'off');
+	},
+
+	/* Handle keyboard event on datepicker widget */
+	_cursorKeydown: function(event, inst) {
+		inst._keyEvent = true;
+
+		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');
+
+		switch (event.keyCode) {
+			case $.ui.keyCode.LEFT:
+				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
+				break;
+			case $.ui.keyCode.RIGHT:
+				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
+				break;
+			case $.ui.keyCode.UP:
+				this._adjustDate(inst.input, -7, 'D');
+				break;
+			case $.ui.keyCode.DOWN:
+				this._adjustDate(inst.input, +7, 'D');
+				break;
+			case $.ui.keyCode.HOME:
+				// TODO: jump to first of month
+				break;
+			case $.ui.keyCode.END:
+				// TODO: jump to end of month
+				break;
+		}
+
+		return true;
+	},
+
+	/* Pop-up the date picker for a given input field */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		__showDatepicker.call(this, input);
+
+		var inst = $.datepicker._getInst(input);
+		if (inst && $.datepicker._datepickerShowing) {
+			inst.dpDiv.attr('aria-hidden', 'false');
+			$(input).attr('aria-expanded', 'true');
+		}
+	},
+
+	/* Hide the date picker from view */
+	_hideDatepicker: function(input) {
+		__hideDatepicker.call(this, input);
+
+		var inst = this._curInst;
+		if (inst && !$.datepicker._datepickerShowing) {
+			inst.dpDiv.attr('aria-hidden', 'true');
+			$(inst.input).attr('aria-expanded', 'false');
+		}
+	},
+
+	/* Render the date picker content */
+	_updateDatepicker: function(inst) {
+		__updateDatepicker.call(this, inst);
+
+		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
+		if (activeCell) {
+			activeCell = $(activeCell);
+			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
+		}
+
+		// allow focus on main container only
+		inst.dpDiv.find('.ui-datepicker-calendar')
+			.attr('tabindex', inst.inline ? '0' : '-1')
+			.attr('role', 'grid')
+			.attr('aria-readonly', 'true')
+			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
+			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
+			.find('a').attr('tabindex', '-1');
+
+		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');
+
+		inst.dpDiv.find('.ui-datepicker-title')
+			.attr('id', inst.id + '-dp-title')
+
+		// set focus again after update
+		if (inst._hasfocus) {
+			inst.dpDiv.find('.ui-datepicker-calendar').focus();
+			inst._hasfocus = false;
+		}
+	},
+
+	_selectDateRC: function(id, dateStr) {
+		var target = $(id), inst = this._getInst(target[0]);
+
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input) {
+			inst.input.val(dateStr);
+		}
+		this._updateAlternate(inst);
+		if (inst.input) {
+			inst.input.trigger("change"); // fire the change event
+		}
+		if (inst.inline) {
+			this._updateDatepicker(inst);
+		}
+	}
+});
+
+}(jQuery));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/jquery.minicolors.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+/*
+ * jQuery MiniColors: A tiny color picker built on jQuery
+ *
+ * Copyright: Cory LaViska for A Beautiful Site, LLC: http://www.abeautifulsite.net/
+ *
+ * Contribute: https://github.com/claviska/jquery-minicolors
+ *
+ * @license: http://opensource.org/licenses/MIT
+ *
+ */
+!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function($){"use strict";function i(i,t){var o=$('<div class="minicolors" />'),s=$.minicolors.defaults,a,n,r,c,l;if(!i.data("minicolors-initialized")){if(t=$.extend(!0,{},s,t),o.addClass("minicolors-theme-"+t.theme).toggleClass("minicolors-with-opacity",t.opacity).toggleClass("minicolors-no-data-uris",t.dataUris!==!0),void 0!==t.position&&$.each(t.position.split(" "),function(){o.addClass("minicolors-position-"+this)}),a="rgb"===t.format?t.opacity?"25":"20":t.keywords?"11":"7",i.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",t).prop("size",a).wrap(o).after('<div class="minicolors-panel minicolors-slider-'+t.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),t.inline||(i.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),i.next(".minicolors-input-swatch").on("click",function(t){t.preventDefault(),i.focus()})),c=i.parent().find(".minicolors-panel"),c.on("selectstart",function(){return!1}).end(),t.swatches&&0!==t.swatches.length)for(t.swatches.length>7&&(t.swatches.length=7),c.addClass("minicolors-with-swatches"),n=$('<ul class="minicolors-swatches"></ul>').appendTo(c),l=0;l<t.swatches.length;++l)r=t.swatches[l],r=f(r)?u(r,!0):x(p(r,!0)),$('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color"></span></li>').appendTo(n).data("swatch-color",t.swatches[l]).find(".minicolors-swatch-color").css({backgroundColor:y(r),opacity:r.a}),t.swatches[l]=r;t.inline&&i.parent().addClass("minicolors-inline"),e(i,!1),i.data("minicolors-initialized",!0)}}function t(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function o(i){var t=i.parent(),o=t.find(".minicolors-panel"),a=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(s(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(a.showSpeed,function(){a.show&&a.show.call(i.get(0))}))}function s(){$(".minicolors-focus").each(function(){var i=$(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),s=t.data("minicolors-settings");o.fadeOut(s.hideSpeed,function(){s.hide&&s.hide.call(t.get(0)),i.removeClass("minicolors-focus")})})}function a(i,t,o){var s=i.parents(".minicolors").find(".minicolors-input"),a=s.data("minicolors-settings"),r=i.find("[class$=-picker]"),e=i.offset().left,c=i.offset().top,l=Math.round(t.pageX-e),h=Math.round(t.pageY-c),d=o?a.animationSpeed:0,p,u,g,m;t.originalEvent.changedTouches&&(l=t.originalEvent.changedTouches[0].pageX-e,h=t.originalEvent.changedTouches[0].pageY-c),0>l&&(l=0),0>h&&(h=0),l>i.width()&&(l=i.width()),h>i.height()&&(h=i.height()),i.parent().is(".minicolors-slider-wheel")&&r.parent().is(".minicolors-grid")&&(p=75-l,u=75-h,g=Math.sqrt(p*p+u*u),m=Math.atan2(u,p),0>m&&(m+=2*Math.PI),g>75&&(g=75,l=75-75*Math.cos(m),h=75-75*Math.sin(m)),l=Math.round(l),h=Math.round(h)),i.is(".minicolors-grid")?r.stop(!0).animate({top:h+"px",left:l+"px"},d,a.animationEasing,function(){n(s,i)}):r.stop(!0).animate({top:h+"px"},d,a.animationEasing,function(){n(s,i)})}function n(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,l,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),f=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),k=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(k,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(f.control){case"wheel":e=b.width()/2-I.x,l=b.height()/2-I.y,h=Math.sqrt(e*e+l*l),d=Math.atan2(l,e),0>d&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=m(h/.75,0,100),s=m(180*d/Math.PI,0,360),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100}));break;case"saturation":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(S.y*(100/w.height())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(I.y*(100/b.height())),0,100),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=m(360-parseInt(S.y*(360/w.height()),10),0,360),a=m(Math.floor(I.x*(100/b.width())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),b.css("backgroundColor",C({h:s,s:100,b:100}))}u=f.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),c(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),r=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=f(t)?u(t,!0):x(p(t,!0)),o=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),(isNaN(o)||!n.opacity)&&(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(f(t)&&(t=w(t)),t=d(t,n.letterCase)),i.val(t),r.find("span").css({backgroundColor:t,opacity:o}),c(i,t,o)}function e(i,t){var o,s,a,n,r,e,l,h,b,y,M=i.parent(),x=i.data("minicolors-settings"),I=M.find(".minicolors-input-swatch"),S=M.find(".minicolors-grid"),z=M.find(".minicolors-slider"),F=M.find(".minicolors-opacity-slider"),D=S.find("[class$=-picker]"),T=z.find("[class$=-picker]"),j=F.find("[class$=-picker]");switch(f(i.val())?(o=w(i.val()),r=m(parseFloat(v(i.val())).toFixed(2),0,1),r&&i.attr("data-opacity",r)):o=d(p(i.val(),!0),x.letterCase),o||(o=d(g(x.defaultValue,!0),x.letterCase)),s=k(o),n=x.keywords?$.map(x.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],e=""!==i.val()&&$.inArray(i.val().toLowerCase(),n)>-1?d(i.val()):f(i.val())?u(i.val()):o,t||i.val(e),x.opacity&&(a=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),isNaN(a)&&(a=1),i.attr("data-opacity",a),I.find("span").css("opacity",a),h=m(F.height()-F.height()*a,0,F.height()),j.css("top",h+"px")),"transparent"===i.val().toLowerCase()&&I.find("span").css("opacity",0),I.find("span").css("backgroundColor",o),x.control){case"wheel":b=m(Math.ceil(.75*s.s),0,S.height()/2),y=s.h*Math.PI/180,l=m(75-Math.cos(y)*b,0,S.width()),h=m(75-Math.sin(y)*b,0,S.height()),D.css({top:h+"px",left:l+"px"}),h=150-s.b/(100/S.height()),""===o&&(h=0),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100}));break;case"saturation":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.s*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:100,b:s.b})),M.find(".minicolors-grid-inner").css("opacity",s.s/100);break;case"brightness":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.s/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.b*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100})),M.find(".minicolors-grid-inner").css("opacity",1-s.b/100);break;default:l=m(Math.ceil(s.s/(100/S.width())),0,S.width()),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.h/(360/z.height()),0,z.height()),T.css("top",h+"px"),S.css("backgroundColor",C({h:s.h,s:100,b:100}))}i.data("minicolors-initialized")&&c(i,e,a)}function c(i,t,o){var s=i.data("minicolors-settings"),a=i.data("minicolors-lastChange"),n,r,e;if(!a||a.value!==t||a.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),s.swatches&&0!==s.swatches.length){for(n=f(t)?u(t,!0):x(t),r=-1,e=0;e<s.swatches.length;++e)if(n.r===s.swatches[e].r&&n.g===s.swatches[e].g&&n.b===s.swatches[e].b&&n.a===s.swatches[e].a){r=e;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),-1!==e&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(e).addClass("selected")}s.change&&(s.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){s.change.call(i.get(0),t,o)},s.changeDelay))):s.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function l(i){var t=p($(i).val(),!0),o=x(t),s=$(i).attr("data-opacity");return o?(void 0!==s&&$.extend(o,{a:parseFloat(s)}),o):null}function h(i,t){var o=p($(i).val(),!0),s=x(o),a=$(i).attr("data-opacity");return s?(void 0===a&&(a=1),t?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function d(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function p(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function u(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=m(parseInt(s[0],10),0,255),s[1]=m(parseInt(s[1],10),0,255),s[2]=m(parseInt(s[2],10),0,255),s[3]&&(s[3]=m(parseFloat(s[3],10),0,1)),t?{r:s[0],g:s[1],b:s[2],a:s[3]?s[3]:null}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function g(i,t){return f(i)?u(i):p(i,t)}function m(i,t,o){return t>i&&(i=t),i>o&&(i=o),i}function f(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?!0:!1}function v(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function b(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,r=(255-s)*a/255,e=(n-r)*(o%60)/60;360===o&&(o=0),60>o?(t.r=n,t.b=r,t.g=r+e):120>o?(t.g=n,t.b=r,t.r=n-e):180>o?(t.g=n,t.r=r,t.b=r+e):240>o?(t.b=n,t.r=r,t.g=n-e):300>o?(t.b=n,t.g=r,t.r=r+e):360>o?(t.r=n,t.g=r,t.b=n-e):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function w(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function y(i){var t=[i.r.toString(16),i.g.toString(16),i.b.toString(16)];return $.each(t,function(i,o){1===o.length&&(t[i]="0"+o)}),"#"+t.join("")}function C(i){return y(b(i))}function k(i){var t=M(x(i));return 0===t.s&&(t.h=360),t}function M(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function x(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}$.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",dataUris:!0,defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default",swatches:[]}},$.extend($.fn,{minicolors:function(a,n){switch(a){case"destroy":return $(this).each(function(){t($(this))}),$(this);case"hide":return s(),$(this);case"opacity":return void 0===n?$(this).attr("data-opacity"):($(this).each(function(){e($(this).attr("data-opacity",n))}),$(this));case"rgbObject":return l($(this),"rgbaObject"===a);case"rgbString":case"rgbaString":return h($(this),"rgbaString"===a);case"settings":return void 0===n?$(this).data("minicolors-settings"):($(this).each(function(){var i=$(this).data("minicolors-settings")||{};t($(this)),$(this).minicolors($.extend(!0,i,n))}),$(this));case"show":return o($(this).eq(0)),$(this);case"value":return void 0===n?$(this).val():($(this).each(function(){"object"==typeof n?(n.opacity&&$(this).attr("data-opacity",m(n.opacity,0,1)),n.color&&$(this).val(n.color)):$(this).val(n),e($(this))}),$(this));default:return"create"!==a&&(n=a),$(this).each(function(){i($(this),n)}),$(this)}}}),$(document).on("mousedown.minicolors touchstart.minicolors",function(i){$(i.target).parents().add(i.target).hasClass("minicolors")||s()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=$(this);i.preventDefault(),$(document).data("minicolors-target",t),a(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=$(document).data("minicolors-target");t&&a(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){$(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(i){i.preventDefault();var t=$(this),o=t.parents(".minicolors").find(".minicolors-input"),s=t.data("swatch-color");r(o,s,v(s)),e(o)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(i){var t=$(this).parent().find(".minicolors-input");i.preventDefault(),o(t)}).on("focus.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&o(i)}).on("blur.minicolors",".minicolors-input",function(){var i=$(this),t=i.data("minicolors-settings"),o,s,a,n,r;i.data("minicolors-initialized")&&(o=t.keywords?$.map(t.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],""!==i.val()&&$.inArray(i.val().toLowerCase(),o)>-1?r=i.val():(f(i.val())?a=u(i.val(),!0):(s=p(i.val(),!0),a=s?x(s):null),r=null===a?t.defaultValue:"rgb"===t.format?u(t.opacity?"rgba("+a.r+","+a.g+","+a.b+","+i.attr("data-opacity")+")":"rgb("+a.r+","+a.g+","+a.b+")"):y(a)),n=t.opacity?i.attr("data-opacity"):1,"transparent"===r.toLowerCase()&&(n=0),i.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",n),i.val(r),""===i.val()&&i.val(g(t.defaultValue,!0)),i.val(d(i.val(),t.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=$(this);if(t.data("minicolors-initialized"))switch(i.keyCode){case 9:s();break;case 13:case 27:s(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&e(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&setTimeout(function(){e(i,!0)},1)})});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/js/jquery.tagedit.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,683 @@
+/*
+* Tagedit - jQuery Plugin
+* The Plugin can be used to edit tags from a database the easy way
+*
+* Examples and documentation at: tagedit.webwork-albrecht.de
+*
+* License:
+* This work is licensed under a MIT License
+*
+* @licstart  The following is the entire license notice for the
+* JavaScript code in this file.
+*
+* Copyright (c) 2010 Oliver Albrecht <info@webwork-albrecht.de>
+* Copyright (c) 2014 Thomas Brüderli <thomas@roundcube.net>
+*
+* Licensed under the MIT licenses
+*
+* 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.
+*
+* @licend  The above is the entire license notice
+* for the JavaScript code in this file.
+*
+* @author Oliver Albrecht Mial: info@webwork-albrecht.de Twitter: @webworka
+* @version 1.5.2 (06/2014)
+* Requires: jQuery v1.4+, jQueryUI v1.8+, jQuerry.autoGrowInput
+*
+* Example of usage:
+*
+* $( "input.tag" ).tagedit();
+*
+* Possible options:
+*
+*  autocompleteURL: '', // url for a autocompletion
+*  deleteEmptyItems: true, // Deletes items with empty value
+*  deletedPostfix: '-d', // will be put to the Items that are marked as delete
+*  addedPostfix: '-a', // will be put to the Items that are choosem from the database
+*  additionalListClass: '', // put a classname here if the wrapper ul shoud receive a special class
+*  allowEdit: true, // Switch on/off edit entries
+*  allowDelete: true, // Switch on/off deletion of entries. Will be ignored if allowEdit = false
+*  allowAdd: true, // switch on/off the creation of new entries
+*  direction: 'ltr' // Sets the writing direction for Outputs and Inputs
+*  animSpeed: 500 // Sets the animation speed for effects
+*  autocompleteOptions: {}, // Setting Options for the jquery UI Autocomplete (http://jqueryui.com/demos/autocomplete/)
+*  breakKeyCodes: [ 13, 44 ], // Sets the characters to break on to parse the tags (defaults: return, comma)
+*  checkNewEntriesCaseSensitive: false, // If there is a new Entry, it is checked against the autocompletion list. This Flag controlls if the check is (in-)casesensitive
+*  texts: { // some texts
+*      removeLinkTitle: 'Remove from list.',
+*      saveEditLinkTitle: 'Save changes.',
+*      deleteLinkTitle: 'Delete this tag from database.',
+*      deleteConfirmation: 'Are you sure to delete this entry?',
+*      deletedElementTitle: 'This Element will be deleted.',
+*      breakEditLinkTitle: 'Cancel'
+*  }
+*/
+
+(function($) {
+
+	$.fn.tagedit = function(options) {
+		/**
+		* Merge Options with defaults
+		*/
+		options = $.extend(true, {
+			// default options here
+			autocompleteURL: null,
+			checkToDeleteURL: null,
+			deletedPostfix: '-d',
+			addedPostfix: '-a',
+			additionalListClass: '',
+			allowEdit: true,
+			allowDelete: true,
+			allowAdd: true,
+			direction: 'ltr',
+			animSpeed: 500,
+			autocompleteOptions: {
+				select: function( event, ui ) {
+					$(this).val(ui.item.value).trigger('transformToTag', [ui.item.id]);
+					return false;
+				}
+			},
+			breakKeyCodes: [ 13, 44 ],
+			checkNewEntriesCaseSensitive: false,
+			texts: {
+				removeLinkTitle: 'Remove from list.',
+				saveEditLinkTitle: 'Save changes.',
+				deleteLinkTitle: 'Delete this tag from database.',
+				deleteConfirmation: 'Are you sure to delete this entry?',
+				deletedElementTitle: 'This Element will be deleted.',
+				breakEditLinkTitle: 'Cancel',
+                forceDeleteConfirmation: 'There are more records using this tag, are you sure do you want to remove it?'
+			},
+			tabindex: false
+		}, options || {});
+
+		// no action if there are no elements
+		if(this.length == 0) {
+			return;
+		}
+
+		// set the autocompleteOptions source
+		if(options.autocompleteURL) {
+			options.autocompleteOptions.source = options.autocompleteURL;
+		}
+
+		// Set the direction of the inputs
+		var direction= this.attr('dir');
+		if(direction && direction.length > 0) {
+			options.direction = this.attr('dir');
+		}
+
+		var elements = this;
+		var focusItem = null;
+
+		var baseNameRegexp = new RegExp("^(.*)\\[([0-9]*?("+options.deletedPostfix+"|"+options.addedPostfix+")?)?\]$", "i");
+
+		var baseName = elements.eq(0).attr('name').match(baseNameRegexp);
+		if(baseName && baseName.length == 4) {
+			baseName = baseName[1];
+		}
+		else {
+			// Elementname does not match the expected format, exit
+			alert('elementname dows not match the expected format (regexp: '+baseNameRegexp+')')
+			return;
+		}
+
+		// read tabindex from source element
+		var ti;
+		if (!options.tabindex && (ti = elements.eq(0).attr('tabindex')))
+			options.tabindex = ti;
+
+		// init elements
+		inputsToList();
+
+		/**
+		* Creates the tageditinput from a list of textinputs
+		*
+		*/
+		function inputsToList() {
+			var html = '<ul class="tagedit-list '+options.additionalListClass+'">';
+
+			elements.each(function(i) {
+				var element_name = $(this).attr('name').match(baseNameRegexp);
+				if(element_name && element_name.length == 4 && (options.deleteEmptyItems == false || $(this).val().length > 0)) {
+					if(element_name[1].length > 0) {
+						var elementId = typeof element_name[2] != 'undefined'? element_name[2]: '',
+							domId = 'tagedit-' + baseName + '-' + (elementId || i);
+
+						html += '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
+						html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
+						html += '<input type="hidden" name="'+baseName+'['+elementId+']" value="'+$(this).val()+'" />';
+						if (options.allowDelete)
+							html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
+						html += '</li>';
+					}
+				}
+			});
+
+			// replace Elements with the list and save the list in the local variable elements
+			elements.last().after(html)
+			var newList = elements.last().next();
+			elements.remove();
+			elements = newList;
+
+			// Check if some of the elementshav to be marked as deleted
+			if(options.deletedPostfix.length > 0) {
+				elements.find('input[name$="'+options.deletedPostfix+'\]"]').each(function() {
+					markAsDeleted($(this).parent());
+				});
+			}
+
+			// put an input field at the End
+			// Put an empty element at the end
+			html = '<li class="tagedit-listelement tagedit-listelement-new">';
+			if (options.allowAdd)
+				html += '<input type="text" name="'+baseName+'[]" value="" id="tagedit-input" disabled="disabled" class="tagedit-input-disabled" dir="'+options.direction+'"/>';
+			html += '</li>';
+			html += '</ul>';
+
+			elements
+				.append(html)
+				.attr('tabindex', options.tabindex) // set tabindex to <ul> to recieve focus
+
+				// Set function on the input
+				.find('#tagedit-input')
+					.attr('tabindex', options.tabindex)
+					.each(function() {
+						$(this).autoGrowInput({comfortZone: 15, minWidth: 15, maxWidth: 20000});
+
+						// Event is triggert in case of choosing an item from the autocomplete, or finish the input
+						$(this).bind('transformToTag', function(event, id) {
+							var oldValue = (typeof id != 'undefined' && (id.length > 0 || id > 0));
+
+							var checkAutocomplete = oldValue == true || options.autocompleteOptions.noCheck ? false : true;
+							// check if the Value ist new
+							var isNewResult = isNew($(this).val(), checkAutocomplete);
+							if(isNewResult[0] === true || (isNewResult[0] === false && typeof isNewResult[1] == 'string')) {
+
+								if(oldValue == false && typeof isNewResult[1] == 'string') {
+									oldValue = true;
+									id = isNewResult[1];
+								}
+
+								if(options.allowAdd == true || oldValue) {
+									var domId = 'tagedit-' + baseName + '-' + id;
+									// Make a new tag in front the input
+									html = '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
+									html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
+									var name = oldValue? baseName + '['+id+options.addedPostfix+']' : baseName + '[]';
+									html += '<input type="hidden" name="'+name+'" value="'+$(this).val()+'" />';
+									html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
+									html += '</li>';
+
+									$(this).parent().before(html);
+								}
+							}
+							$(this).val('');
+
+							// close autocomplete
+							if(options.autocompleteOptions.source) {
+								if($(this).is(':ui-autocomplete'))
+									$(this).autocomplete( "close" );
+							}
+
+						})
+						.keydown(function(event) {
+							var code = event.keyCode > 0? event.keyCode : event.which;
+
+							switch(code) {
+								case 46:
+									if (!focusItem)
+										break;
+								case 8: // BACKSPACE
+									if(focusItem) {
+										focusItem.fadeOut(options.animSpeed, function() {
+											$(this).remove();
+										})
+										unfocusItem();
+										event.preventDefault();
+										return false;
+									}
+									else if($(this).val().length == 0) {
+										// delete Last Tag
+										var elementToRemove = elements.find('li.tagedit-listelement-old').last();
+										elementToRemove.fadeOut(options.animSpeed, function() {elementToRemove.remove();})
+										event.preventDefault();
+										return false;
+									}
+									break;
+								case 9: // TAB
+									if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
+										$(this).trigger('transformToTag');
+										event.preventDefault();
+										return false;
+									}
+									break;
+								case 37: // LEFT
+								case 39: // RIGHT
+									if($(this).val().length == 0) {
+										// select previous Tag
+										var inc = code == 37 ? -1 : 1,
+											items = elements.find('li.tagedit-listelement-old')
+											x = items.length, next = 0;
+										items.each(function(i, elem) {
+											if ($(elem).hasClass('tagedit-listelement-focus')) {
+												x = i;
+												return true;
+											}
+										});
+										unfocusItem();
+										next = Math.max(0, x + inc);
+										if (items.get(next)) {
+											focusItem = items.eq(next).addClass('tagedit-listelement-focus');
+											$(this).attr('aria-activedescendant', focusItem.attr('aria-labelledby'))
+
+											if(options.autocompleteOptions.source != false) {
+												$(this).autocomplete('close').autocomplete('disable');
+											}
+										}
+										event.preventDefault();
+										return false;
+									}
+									break;
+								default:
+									// ignore input if an item is focused
+									if (focusItem !== null) {
+										event.preventDefault();
+										event.bubble = false;
+										return false;
+									}
+							}
+							return true;
+						})
+						.keypress(function(event) {
+							var code = event.keyCode > 0? event.keyCode : event.which;
+							if($.inArray(code, options.breakKeyCodes) > -1) {
+								if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
+									$(this).trigger('transformToTag');
+								}
+								event.preventDefault();
+								return false;
+							}
+							else if($(this).val().length > 0){
+								unfocusItem();
+							}
+							return true;
+						})
+						.bind('paste', function(e){
+							var that = $(this);
+							if (e.type == 'paste'){
+								setTimeout(function(){
+									that.trigger('transformToTag');
+								}, 1);
+							}
+						})
+						.blur(function() {
+							if($(this).val().length == 0) {
+								// disable the field to prevent sending with the form
+								$(this).attr('disabled', 'disabled').addClass('tagedit-input-disabled');
+							}
+							else {
+								// Delete entry after a timeout
+								var input = $(this);
+								$(this).data('blurtimer', window.setTimeout(function() {input.val('');}, 500));
+							}
+							unfocusItem();
+							// restore tabindex when widget looses focus
+							if (options.tabindex)
+								elements.attr('tabindex', options.tabindex);
+						})
+						.focus(function() {
+							window.clearTimeout($(this).data('blurtimer'));
+							// remove tabindex on <ul> because #tagedit-input now has it
+							elements.attr('tabindex', '-1');
+						});
+
+						if(options.autocompleteOptions.source != false) {
+							$(this).autocomplete(options.autocompleteOptions);
+						}
+					})
+				.end()
+				.click(function(event) {
+					switch(event.target.tagName) {
+						case 'A':
+							$(event.target).parent().fadeOut(options.animSpeed, function() {
+								$(event.target).parent().remove();
+								elements.find('#tagedit-input').focus();
+								});
+							break;
+						case 'INPUT':
+						case 'SPAN':
+						case 'LI':
+							if($(event.target).hasClass('tagedit-listelement-deleted') == false &&
+							$(event.target).parent('li').hasClass('tagedit-listelement-deleted') == false) {
+								// Don't edit an deleted Items
+								return doEdit(event);
+							}
+						default:
+							$(this).find('#tagedit-input')
+								.removeAttr('disabled')
+								.removeClass('tagedit-input-disabled')
+								.focus();
+					}
+					return false;
+				})
+				// forward focus event (on tabbing through the form)
+				.focus(function(e){ $(this).click(); })
+		}
+
+		/**
+		 * Remove class and reference to currently focused tag item
+		 */
+		function unfocusItem() {
+			if(focusItem){
+				if(options.autocompleteOptions.source != false) {
+					elements.find('#tagedit-input').autocomplete('enable');
+				}
+				focusItem.removeClass('tagedit-listelement-focus');
+				focusItem = null;
+				elements.find('#tagedit-input').removeAttr('aria-activedescendant');
+			}
+		}
+
+		/**
+		* Sets all Actions and events for editing an Existing Tag.
+		*
+		* @param event {object} The original Event that was given
+		* return {boolean}
+		*/
+		function doEdit(event) {
+			if(options.allowEdit == false) {
+				// Do nothing
+				return;
+			}
+
+			var element = event.target.tagName == 'SPAN'? $(event.target).parent() : $(event.target);
+
+			var closeTimer = null;
+
+			// Event that is fired if the User finishes the edit of a tag
+			element.bind('finishEdit', function(event, doReset) {
+				window.clearTimeout(closeTimer);
+
+				var textfield = $(this).find(':text');
+				var isNewResult = isNew(textfield.val(), true);
+				if(textfield.val().length > 0 && (typeof doReset == 'undefined' || doReset === false) && (isNewResult[0] == true)) {
+					// This is a new Value and we do not want to do a reset. Set the new value
+					$(this).find(':hidden').val(textfield.val());
+					$(this).find('span').html(textfield.val());
+				}
+
+				textfield.remove();
+				$(this).find('a.tagedit-save, a.tagedit-break, a.tagedit-delete').remove(); // Workaround. This normaly has to be done by autogrow Plugin
+				$(this).removeClass('tagedit-listelement-edit').unbind('finishEdit');
+				return false;
+			});
+
+			var hidden = element.find(':hidden');
+			html = '<input type="text" name="tmpinput" autocomplete="off" value="'+hidden.val()+'" class="tagedit-edit-input" dir="'+options.direction+'"/>';
+			html += '<a class="tagedit-save" title="'+options.texts.saveEditLinkTitle+'">o</a>';
+			html += '<a class="tagedit-break" title="'+options.texts.breakEditLinkTitle+'">x</a>';
+
+			// If the Element is one from the Database, it can be deleted
+			if(options.allowDelete == true && element.find(':hidden').length > 0 &&
+			typeof element.find(':hidden').attr('name').match(baseNameRegexp)[3] != 'undefined') {
+				html += '<a class="tagedit-delete" title="'+options.texts.deleteLinkTitle+'">d</a>';
+			}
+
+			hidden.after(html);
+			element
+				.addClass('tagedit-listelement-edit')
+				.find('a.tagedit-save')
+					.click(function() {
+						$(this).parent().trigger('finishEdit');
+						return false;
+					})
+				.end()
+				.find('a.tagedit-break')
+					.click(function() {
+						$(this).parent().trigger('finishEdit', [true]);
+						return false;
+					})
+				.end()
+				.find('a.tagedit-delete')
+					.click(function() {
+                        window.clearTimeout(closeTimer);
+						if(confirm(options.texts.deleteConfirmation)) {
+                            var canDelete = checkToDelete($(this).parent());
+                            if (!canDelete && confirm(options.texts.forceDeleteConfirmation)) {
+                                markAsDeleted($(this).parent());
+                            }
+
+                            if(canDelete) {
+                                markAsDeleted($(this).parent());
+                            }
+
+                            $(this).parent().find(':text').trigger('finishEdit', [true]);
+						}
+                        else {
+                            $(this).parent().find(':text').trigger('finishEdit', [true]);
+                        }
+						return false;
+					})
+				.end()
+				.find(':text')
+					.focus()
+					.autoGrowInput({comfortZone: 10, minWidth: 15, maxWidth: 20000})
+					.keypress(function(event) {
+						switch(event.keyCode) {
+							case 13: // RETURN
+								event.preventDefault();
+								$(this).parent().trigger('finishEdit');
+								return false;
+							case 27: // ESC
+								event.preventDefault();
+								$(this).parent().trigger('finishEdit', [true]);
+								return false;
+						}
+						return true;
+					})
+					.blur(function() {
+						var that = $(this);
+						closeTimer = window.setTimeout(function() {that.parent().trigger('finishEdit', [true])}, 500);
+					});
+		}
+
+        /**
+         * Verifies if the tag select to be deleted is used by other records using an Ajax request.
+         *
+         * @param element
+         * @returns {boolean}
+         */
+        function checkToDelete(element) {
+            // if no URL is provide will not verify
+            if(options.checkToDeleteURL === null) {
+                return false;
+            }
+
+            var inputName = element.find('input:hidden').attr('name');
+            var idPattern = new RegExp('\\d');
+            var tagId = inputName.match(idPattern);
+            var checkResult = false;
+
+            $.ajax({
+                async   : false,
+                url     : options.checkToDeleteURL,
+                dataType: 'json',
+                type    : 'POST',
+                data    : { 'tagId' : tagId},
+                complete: function (XMLHttpRequest, textStatus) {
+
+                    // Expected JSON Object: { "success": Boolean, "allowDelete": Boolean}
+                    var result = $.parseJSON(XMLHttpRequest.responseText);
+                    if(result.success === true){
+                        checkResult = result.allowDelete;
+                    }
+                }
+            });
+
+            return checkResult;
+        }
+
+		/**
+		* Marks a single Tag as deleted.
+		*
+		* @param element {object}
+		*/
+		function markAsDeleted(element) {
+			element
+				.trigger('finishEdit', [true])
+				.addClass('tagedit-listelement-deleted')
+				.attr('title', options.deletedElementTitle);
+				element.find(':hidden').each(function() {
+					var nameEndRegexp = new RegExp('('+options.addedPostfix+'|'+options.deletedPostfix+')?\]');
+					var name = $(this).attr('name').replace(nameEndRegexp, options.deletedPostfix+']');
+					$(this).attr('name', name);
+				});
+
+		}
+
+		/**
+		* Checks if a tag is already choosen.
+		*
+		* @param value {string}
+		* @param checkAutocomplete {boolean} optional Check also the autocomplet values
+		* @returns {Array} First item is a boolean, telling if the item should be put to the list, second is optional the ID from autocomplete list
+		*/
+		function isNew(value, checkAutocomplete) {
+            checkAutocomplete = typeof checkAutocomplete == 'undefined'? false : checkAutocomplete;
+			var autoCompleteId = null;
+            
+            var compareValue = options.checkNewEntriesCaseSensitive == true? value : value.toLowerCase();
+
+			var isNew = true;
+			elements.find('li.tagedit-listelement-old input:hidden').each(function() {
+                var elementValue = options.checkNewEntriesCaseSensitive == true? $(this).val() : $(this).val().toLowerCase();
+				if(elementValue == compareValue) {
+					isNew = false;
+				}
+			});
+
+			if (isNew == true && checkAutocomplete == true && options.autocompleteOptions.source != false) {
+				var result = [];
+				if ($.isArray(options.autocompleteOptions.source)) {
+					result = options.autocompleteOptions.source;
+				}
+                else if ($.isFunction(options.autocompleteOptions.source)) {
+					options.autocompleteOptions.source({term: value}, function (data) {result = data});
+				}
+                else if (typeof options.autocompleteOptions.source === "string") {
+					// Check also autocomplete values
+					var autocompleteURL = options.autocompleteOptions.source;
+					if (autocompleteURL.match(/\?/)) {
+						autocompleteURL += '&';
+					} else {
+						autocompleteURL += '?';
+					}
+					autocompleteURL += 'term=' + value;
+					$.ajax({
+						async: false,
+						url: autocompleteURL,
+						dataType: 'json',
+						complete: function (XMLHttpRequest, textStatus) {
+							result = $.parseJSON(XMLHttpRequest.responseText);
+						}
+					});
+				}
+                
+				// If there is an entry for that already in the autocomplete, don't use it (Check could be case sensitive or not)
+				for (var i = 0; i < result.length; i++) {
+					var resultValue = result[i].label? result[i].label : result[i];
+					var label = options.checkNewEntriesCaseSensitive == true? resultValue : resultValue.toLowerCase();
+					if (label == compareValue) {
+						isNew = false;
+						autoCompleteId = typeof result[i] == 'string' ? i : result[i].id;
+						break;
+					}
+				}
+			}
+
+			return new Array(isNew, autoCompleteId);
+		}
+	}
+})(jQuery);
+
+(function($){
+    
+// jQuery autoGrowInput plugin by James Padolsey
+// See related thread: http://stackoverflow.com/questions/931207/is-there-a-jquery-autogrow-plugin-for-text-fields
+        
+$.fn.autoGrowInput = function(o) {
+    
+    o = $.extend({
+        maxWidth: 1000,
+        minWidth: 0,
+        comfortZone: 70
+    }, o);
+    
+    this.filter('input:text').each(function(){
+        
+        var minWidth = o.minWidth || $(this).width(),
+            val = '',
+            input = $(this),
+            testSubject = $('<tester/>').css({
+                position: 'absolute',
+                top: -9999,
+                left: -9999,
+                width: 'auto',
+                fontSize: input.css('fontSize'),
+                fontFamily: input.css('fontFamily'),
+                fontWeight: input.css('fontWeight'),
+                letterSpacing: input.css('letterSpacing'),
+                whiteSpace: 'nowrap'
+            }),
+            check = function() {
+                
+                if (val === (val = input.val())) {return;}
+                
+                // Enter new content into testSubject
+                var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,'&nbsp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+                testSubject.html(escaped);
+                
+                // Calculate new width + whether to change
+                var testerWidth = testSubject.width(),
+                    newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
+                    currentWidth = input.width(),
+                    isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
+                                         || (newWidth > minWidth && newWidth < o.maxWidth);
+                
+                // Animate width
+                if (isValidWidthChange) {
+                    input.width(newWidth);
+                }
+                
+            };
+            
+        testSubject.insertAfter(input);
+        
+        $(this).bind('keyup keydown blur update', check);
+        
+        check();
+    });
+    
+    return this;
+
+};
+
+})(jQuery);
\ No newline at end of file
Binary file plugins/jqueryui/themes/classic/images/buttongradient.png has changed
Binary file plugins/jqueryui/themes/classic/images/listheader.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_444444_256x240.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_555555_256x240.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_777620_256x240.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_777777_256x240.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_cc0000_256x240.png has changed
Binary file plugins/jqueryui/themes/classic/images/ui-icons_ffffff_256x240.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/classic/jquery-ui.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1356 @@
+/*! jQuery UI - v1.12.0 - 2016-08-01
+* http://jqueryui.com
+* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+	pointer-events: none;
+}
+
+
+/* Icons
+----------------------------------*/
+.ui-icon {
+	display: inline-block;
+	vertical-align: middle;
+	margin-top: -.25em;
+	position: relative;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+	left: 50%;
+	margin-left: -8px;
+	display: block;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: 0;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	cursor: pointer;
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-item-wrapper {
+	position: relative;
+	padding: 3px 1em 3px .4em;
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	margin: -1px;
+}
+.ui-menu .ui-menu-item .ui-state-active {
+	background: #c33;
+	border-color: #a22;
+	color: #fff;
+	display: block;
+}
+.ui-menu .ui-menu-item a {
+	display: block;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item-wrapper {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-button {
+	padding: .4em 1em;
+	display: inline-block;
+	position: relative;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+
+	/* Support: IE <= 11 */
+	overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2em;
+	box-sizing: border-box;
+	text-indent: -9999px;
+	white-space: nowrap;
+}
+
+/* no icon support for input elements */
+input.ui-button.ui-button-icon-only {
+	text-indent: 0;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-top: -8px;
+	margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+	padding: 0;
+	width: 2.1em;
+	height: 2.1em;
+	text-indent: -9999px;
+	white-space: nowrap;
+
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+	width: auto;
+	height: auto;
+	text-indent: 0;
+	white-space: normal;
+	padding: .4em 1em;
+}
+
+/* workarounds */
+/* Support: Firefox 5 - 40 */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-controlgroup {
+	vertical-align: middle;
+	display: inline-block;
+}
+.ui-controlgroup > .ui-controlgroup-item {
+	float: left;
+	margin-left: 0;
+	margin-right: 0;
+}
+.ui-controlgroup > .ui-controlgroup-item:focus,
+.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
+	z-index: 9999;
+}
+.ui-controlgroup-vertical > .ui-controlgroup-item {
+	display: block;
+	float: none;
+	width: 100%;
+	margin-top: 0;
+	margin-bottom: 0;
+	text-align: left;
+}
+.ui-controlgroup-vertical .ui-controlgroup-item {
+	box-sizing: border-box;
+}
+.ui-controlgroup .ui-controlgroup-label {
+	padding: .4em 1em;
+}
+.ui-controlgroup .ui-controlgroup-label span {
+	font-size: 80%;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
+	border-left: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
+	border-top: none;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+	border-right: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+	border-bottom: none;
+}
+
+/* Spinner specific style fixes */
+.ui-controlgroup-vertical .ui-spinner-input {
+
+	/* Support: IE8 only, Android < 4.4 only */
+	width: 75%;
+	width: calc( 100% - 2.4em );
+}
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+	border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+	box-shadow: inset 1px 1px 1px #ccc;
+	border-radius: .12em;
+	border: none;
+}
+.ui-checkboxradio-radio-label .ui-icon-background {
+	width: 16px;
+	height: 16px;
+	border-radius: 1em;
+	overflow: visible;
+	border: none;
+}
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+	background-image: none;
+	width: 8px;
+	height: 8px;
+	border-width: 4px;
+	border-style: solid;
+}
+.ui-checkboxradio-disabled {
+	pointer-events: none;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+	box-shadow: 1px 1px 18px #999;
+	-moz-box-shadow: 1px 1px 12px #999;
+	-webkit-box-shadow: #999 1px 1px 12px;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker td.ui-datepicker-current-day .ui-state-active {
+	background:#c33;
+	border-color:#a22;
+	color:#fff;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: default;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+	left: .5em;
+	top: .3em;
+}
+.ui-dialog {
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+	-webkit-box-shadow: #999 1px 1px 12px;
+	-moz-box-shadow: 1px 1px 12px #999;
+	box-shadow: 1px 1px 18px #999;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.no-close .ui-dialog-titlebar-close {
+	display: none !important;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: default;
+}
+.ui-dialog .ui-resizable-n {
+	height: 2px;
+	top: 0;
+}
+.ui-dialog .ui-resizable-e {
+	width: 2px;
+	right: 0;
+}
+.ui-dialog .ui-resizable-s {
+	height: 2px;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-w {
+	width: 2px;
+	left: 0;
+}
+.ui-dialog .ui-resizable-se,
+.ui-dialog .ui-resizable-sw,
+.ui-dialog .ui-resizable-ne,
+.ui-dialog .ui-resizable-nw {
+	width: 7px;
+	height: 7px;
+}
+.ui-dialog .ui-resizable-se {
+	right: 0;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-sw {
+	left: 0;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-ne {
+	right: 0;
+	top: 0;
+}
+.ui-dialog .ui-resizable-nw {
+	left: 0;
+	top: 0;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-text {
+	display: block;
+	margin-right: 20px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-selectmenu-button.ui-button {
+	text-align: left;
+	white-space: nowrap;
+	width: 14em;
+}
+.ui-selectmenu-icon.ui-icon {
+	float: right;
+	margin-top: 0;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: .222em 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 2em;
+}
+.ui-spinner-button {
+	width: 1.6em;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top-style: none;
+	border-bottom-style: none;
+	border-right-style: none;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+	-webkit-border-top-left-radius: 2px;
+	-moz-border-radius-topleft: 2px;
+	border-top-left-radius: 2px;
+	-webkit-border-top-right-radius: 2px;
+	-moz-border-radius-topright: 2px;
+	border-top-right-radius: 2px;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .3em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-dialog .ui-tabs-nav li.ui-tabs-active {
+	background: #fff;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget.ui-widget-content {
+	border: 1px solid #c5c5c5;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #ffffff;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #333333;
+}
+.ui-widget-header {
+	border: 1px solid #dddddd;
+	font-weight: bold;
+	border-width: 0 0 1px 0;
+	background: #f4f4f4 url("images/listheader.png") 50% 50% repeat;
+	color: #333333;
+	margin: -0.2em -0.2em 0 -0.2em;
+}
+.ui-widget-header a {
+	color: #333333;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+
+/* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+	border: 1px solid #c5c5c5;
+	background: #f6f6f6;
+	font-weight: normal;
+	color: #454545;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+	color: #454545;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+	border: 1px solid #cccccc;
+	background: #ededed;
+	font-weight: normal;
+	color: #2b2b2b;
+}
+.ui-state-focus,
+.ui-widget-content .ui-state-focus {
+	border: 1px solid #c33;
+	color: #a00;
+}
+.ui-tabs-nav .ui-state-focus {
+	border: 1px solid #a4a4a4;
+	color: #000;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+	color: #2b2b2b;
+	text-decoration: none;
+}
+
+.ui-visual-focus {
+	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+	border: 1px solid #003eff;
+	font-weight: normal;
+	background: #c33;
+	border-color: #a22;
+	color: #fff;
+}
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+	border: #003eff;
+	background-color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+	color: #777620;
+}
+.ui-state-checked {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #777620;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #f1a899;
+	background: #fddfdf;
+	color: #5f3f3f;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #5f3f3f;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #5f3f3f;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .6;
+	filter:Alpha(Opacity=60);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-button .ui-icon {
+	background-image: url("images/ui-icons_777777_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon,
+.ui-state-default .ui-icon {
+	background-image: url("images/ui-icons_555555_256x240.png");
+}
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+	background-image: url("images/ui-icons_777620_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("images/ui-icons_cc0000_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-caret-1-n { background-position: 0 0; }
+.ui-icon-caret-1-ne { background-position: -16px 0; }
+.ui-icon-caret-1-e { background-position: -32px 0; }
+.ui-icon-caret-1-se { background-position: -48px 0; }
+.ui-icon-caret-1-s { background-position: -65px 0; }
+.ui-icon-caret-1-sw { background-position: -80px 0; }
+.ui-icon-caret-1-w { background-position: -96px 0; }
+.ui-icon-caret-1-nw { background-position: -112px 0; }
+.ui-icon-caret-2-n-s { background-position: -128px 0; }
+.ui-icon-caret-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -65px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -65px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+	-webkit-box-shadow: 0px 0px 5px #666666;
+	box-shadow: 0px 0px 5px #666666;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/classic/jquery-ui.css.diff	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,172 @@
+--- jquery-ui.css.orig	2016-08-15 11:56:45.000000000 +0200
++++ jquery-ui.css	2016-08-15 11:46:38.000000000 +0200
+@@ -227,6 +227,15 @@
+ .ui-menu .ui-state-active {
+ 	margin: -1px;
+ }
++.ui-menu .ui-menu-item .ui-state-active {
++	background: #c33;
++	border-color: #a22;
++	color: #fff;
++	display: block;
++}
++.ui-menu .ui-menu-item a {
++	display: block;
++}
+ 
+ /* icon support */
+ .ui-menu-icons {
+@@ -403,6 +412,9 @@
+ 	width: 17em;
+ 	padding: .2em .2em 0;
+ 	display: none;
++	box-shadow: 1px 1px 18px #999;
++	-moz-box-shadow: 1px 1px 12px #999;
++	-webkit-box-shadow: #999 1px 1px 12px;
+ }
+ .ui-datepicker .ui-datepicker-header {
+ 	position: relative;
+@@ -476,6 +488,11 @@
+ 	text-align: right;
+ 	text-decoration: none;
+ }
++.ui-datepicker td.ui-datepicker-current-day .ui-state-active {
++	background:#c33;
++	border-color:#a22;
++	color:#fff;
++}
+ .ui-datepicker .ui-datepicker-buttonpane {
+ 	background-image: none;
+ 	margin: .7em 0 0 0;
+@@ -487,7 +504,7 @@
+ .ui-datepicker .ui-datepicker-buttonpane button {
+ 	float: right;
+ 	margin: .5em .2em .4em;
+-	cursor: pointer;
++	cursor: default;
+ 	padding: .2em .6em .3em .6em;
+ 	width: auto;
+ 	overflow: visible;
+@@ -580,6 +597,9 @@
+ 	left: 0;
+ 	padding: .2em;
+ 	outline: 0;
++	-webkit-box-shadow: #999 1px 1px 12px;
++	-moz-box-shadow: 1px 1px 12px #999;
++	box-shadow: 1px 1px 18px #999;
+ }
+ .ui-dialog .ui-dialog-titlebar {
+ 	padding: .4em 1em;
+@@ -602,6 +622,9 @@
+ 	padding: 1px;
+ 	height: 20px;
+ }
++.no-close .ui-dialog-titlebar-close {
++	display: none !important;
++}
+ .ui-dialog .ui-dialog-content {
+ 	position: relative;
+ 	border: 0;
+@@ -621,7 +644,7 @@
+ }
+ .ui-dialog .ui-dialog-buttonpane button {
+ 	margin: .5em .4em .5em 0;
+-	cursor: pointer;
++	cursor: default;
+ }
+ .ui-dialog .ui-resizable-n {
+ 	height: 2px;
+@@ -843,20 +866,29 @@
+ 	float: left;
+ 	position: relative;
+ 	top: 0;
+-	margin: 1px .2em 0 0;
++	margin: 0;
+ 	border-bottom-width: 0;
+ 	padding: 0;
+ 	white-space: nowrap;
++	-webkit-border-top-left-radius: 2px;
++	-moz-border-radius-topleft: 2px;
++	border-top-left-radius: 2px;
++	-webkit-border-top-right-radius: 2px;
++	-moz-border-radius-topright: 2px;
++	border-top-right-radius: 2px;
+ }
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ 	float: left;
+-	padding: .5em 1em;
++	padding: .3em 1em;
+ 	text-decoration: none;
+ }
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ 	margin-bottom: -1px;
+ 	padding-bottom: 1px;
+ }
++.ui-dialog .ui-tabs-nav li.ui-tabs-active {
++	background: #fff;
++}
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+@@ -910,9 +942,11 @@
+ }
+ .ui-widget-header {
+ 	border: 1px solid #dddddd;
+-	background: #e9e9e9;
+-	color: #333333;
+ 	font-weight: bold;
++	border-width: 0 0 1px 0;
++	background: #f4f4f4 url("images/listheader.png") 50% 50% repeat;
++	color: #333333;
++	margin: -0.2em -0.2em 0 -0.2em;
+ }
+ .ui-widget-header a {
+ 	color: #333333;
+@@ -957,6 +991,15 @@
+ 	font-weight: normal;
+ 	color: #2b2b2b;
+ }
++.ui-state-focus,
++.ui-widget-content .ui-state-focus {
++	border: 1px solid #c33;
++	color: #a00;
++}
++.ui-tabs-nav .ui-state-focus {
++	border: 1px solid #a4a4a4;
++	color: #000;
++}
+ .ui-state-hover a,
+ .ui-state-hover a:hover,
+ .ui-state-hover a:link,
+@@ -981,9 +1024,10 @@
+ .ui-button:active,
+ .ui-button.ui-state-active:hover {
+ 	border: 1px solid #003eff;
+-	background: #007fff;
+ 	font-weight: normal;
+-	color: #ffffff;
++	background: #c33;
++	border-color: #a22;
++	color: #fff;
+ }
+ .ui-icon-background,
+ .ui-state-active .ui-icon-background {
+@@ -993,7 +1037,6 @@
+ .ui-state-active a,
+ .ui-state-active a:link,
+ .ui-state-active a:visited {
+-	color: #ffffff;
+ 	text-decoration: none;
+ }
+ 
+@@ -1040,8 +1083,8 @@
+ .ui-priority-secondary,
+ .ui-widget-content .ui-priority-secondary,
+ .ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70); /* support: IE8 */
++	opacity: .6;
++	filter:Alpha(Opacity=60);
+ 	font-weight: normal;
+ }
+ .ui-state-disabled,
Binary file plugins/jqueryui/themes/larry/images/animated-overlay.gif has changed
Binary file plugins/jqueryui/themes/larry/images/jquery.minicolors.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-dialog-close.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons-datepicker.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_444444_256x240.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_555555_256x240.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_777620_256x240.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_777777_256x240.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_cc0000_256x240.png has changed
Binary file plugins/jqueryui/themes/larry/images/ui-icons_ffffff_256x240.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/larry/jquery-ui.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1540 @@
+/*! jQuery UI - v1.12.0 - 2016-08-01
+* http://jqueryui.com
+* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+	pointer-events: none;
+	background: #fafafa;
+	color: #333333;
+}
+
+
+/* Icons
+----------------------------------*/
+.ui-icon {
+	display: inline-block;
+	vertical-align: middle;
+	margin-top: -.25em;
+	position: relative;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+	left: 50%;
+	margin-left: -8px;
+	display: block;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-menu.ui-widget,
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: 0;
+	background: #444;
+	border: 1px solid #999;
+	border-radius: 4px !important;
+	box-shadow: 0 2px 6px 0 #333;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	cursor: pointer;
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+	color: #fff;
+	white-space: nowrap;
+	border-top: 1px solid #5a5a5a;
+}
+.ui-menu .ui-menu-item div,
+.ui-menu .ui-menu-item a {
+	display: block;
+	line-height: 1.5;
+	padding: 6px 10px 4px;
+	background-color: #444;
+	border: 0;
+	border-radius: 0;
+	color: #fff;
+}
+.ui-menu .ui-menu-item:first-child {
+	border-top: 0;
+}
+.ui-menu .ui-menu-item:last-child {
+	border-bottom: 0;
+}
+.ui-menu .ui-menu-item-wrapper {
+	position: relative;
+	padding: 3px 1em 3px .4em;
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-menu-item .ui-state-focus,
+.ui-menu .ui-menu-item .ui-state-active,
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	background: #0883d0;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item-wrapper {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-button {
+	padding: .4em 1em;
+	display: inline-block;
+	position: relative;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+
+	/* Support: IE <= 11 */
+	overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2em;
+	box-sizing: border-box;
+	text-indent: -9999px;
+	white-space: nowrap;
+}
+
+/* no icon support for input elements */
+input.ui-button.ui-button-icon-only {
+	text-indent: 0;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-top: -8px;
+	margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+	padding: 0;
+	width: 2.1em;
+	height: 2.1em;
+	text-indent: -9999px;
+	white-space: nowrap;
+
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+	width: auto;
+	height: auto;
+	text-indent: 0;
+	white-space: normal;
+	padding: .4em 1em;
+}
+
+/* workarounds */
+/* Support: Firefox 5 - 40 */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-controlgroup {
+	vertical-align: middle;
+	display: inline-block;
+}
+.ui-controlgroup > .ui-controlgroup-item {
+	float: left;
+	margin-left: 0;
+	margin-right: 0;
+}
+.ui-controlgroup > .ui-controlgroup-item:focus,
+.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
+	z-index: 9999;
+}
+.ui-controlgroup-vertical > .ui-controlgroup-item {
+	display: block;
+	float: none;
+	width: 100%;
+	margin-top: 0;
+	margin-bottom: 0;
+	text-align: left;
+}
+.ui-controlgroup-vertical .ui-controlgroup-item {
+	box-sizing: border-box;
+}
+.ui-controlgroup .ui-controlgroup-label {
+	padding: .4em 1em;
+}
+.ui-controlgroup .ui-controlgroup-label span {
+	font-size: 80%;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
+	border-left: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
+	border-top: none;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+	border-right: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+	border-bottom: none;
+}
+
+/* Spinner specific style fixes */
+.ui-controlgroup-vertical .ui-spinner-input {
+
+	/* Support: IE8 only, Android < 4.4 only */
+	width: 75%;
+	width: calc( 100% - 2.4em );
+}
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+	border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+	box-shadow: inset 1px 1px 1px #ccc;
+	border-radius: .12em;
+	border: none;
+}
+.ui-checkboxradio-radio-label .ui-icon-background {
+	width: 16px;
+	height: 16px;
+	border-radius: 1em;
+	overflow: visible;
+	border: none;
+}
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+	background-image: none;
+	width: 8px;
+	height: 8px;
+	border-width: 4px;
+	border-style: solid;
+}
+.ui-checkboxradio-disabled {
+	pointer-events: none;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+	left: .5em;
+	top: .3em;
+}
+.ui-dialog {
+	position: absolute;
+	top: 0;
+	left: 0;
+	outline: 0;
+	padding: 3px;
+	background: #fff;
+	border-radius: 6px !important;
+	border: 0 !important;
+	box-shadow: 1px 1px 18px #666;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: 15px 1em 8px 1em;
+	position: relative;
+	border: 0;
+	border-radius: 5px 5px 0 0;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 16px .1em 0;
+	font-size: 1.3em;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: -15px;
+	top: -15px;
+	width: 30px;
+	margin: 0;
+	padding: 0;
+	height: 30px;
+	z-index: 99999;
+	border-width: 0 !important;
+	background: none !important;
+	filter: none !important;
+	box-shadow: none !important;
+}
+.ui-dialog .ui-dialog-titlebar-close.ui-state-focus {
+	outline: 2px solid #4fadd5;
+}
+.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick {
+	top: 0;
+	left: 0;
+	margin: 0;
+	width: 30px;
+	height: 30px;
+	background: url("images/ui-dialog-close.png") 0 0 no-repeat;
+}
+.no-close .ui-dialog-titlebar-close {
+	display: none !important;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: 1.5em 1em 0.5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-widget-content {
+	border: 0;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	border-color: #ddd;
+	border-style: solid;
+	margin: 0;
+	padding: .3em 1em .5em .8em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: left;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-n {
+	height: 2px;
+	top: 0;
+}
+.ui-dialog .ui-resizable-e {
+	width: 2px;
+	right: 0;
+}
+.ui-dialog .ui-resizable-s {
+	height: 2px;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-w {
+	width: 2px;
+	left: 0;
+}
+.ui-dialog .ui-resizable-se,
+.ui-dialog .ui-resizable-sw,
+.ui-dialog .ui-resizable-ne,
+.ui-dialog .ui-resizable-nw {
+	width: 7px;
+	height: 7px;
+}
+.ui-dialog .ui-resizable-se {
+	width: 14px;
+	height: 14px;
+	right: 3px;
+	bottom: 3px;
+	background-position: -80px -224px;
+}
+.ui-dialog .ui-resizable-sw {
+	left: 0;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-ne {
+	right: 0;
+	top: 0;
+}
+.ui-dialog .ui-resizable-nw {
+	left: 0;
+	top: 0;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-text {
+	display: block;
+	margin-right: 20px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-selectmenu-button.ui-button {
+	text-align: left;
+	white-space: nowrap;
+	width: 14em;
+}
+.ui-selectmenu-icon.ui-icon {
+	float: right;
+	margin-top: 0;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background: #017cb4;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: .222em 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 2em;
+}
+.ui-spinner-button {
+	width: 1.6em;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top-style: none;
+	border-bottom-style: none;
+	border-right-style: none;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0; padding: 0;
+	border: 0;
+	background: transparent;
+	filter: none;
+	height: 44px;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	position: relative;
+	display: inline-block;
+	top: 0;
+	margin: 0;
+	border: 0 !important;
+	padding: 0 1px 0 0;
+	white-space: nowrap;
+	background: #f8f8f8;
+}
+.ui-tabs .ui-tabs-nav li:last-child {
+	background: none;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	display: inline-block;
+	padding: 15px;
+	text-decoration: none;
+	font-size: 12px;
+	color: #999;
+	background: #fafafa;
+	border-right: 1px solid #fafafa;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	outline: none;
+	color: #004458;
+	background: #efefef;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 0.5em 1em;
+	margin-top: 0.2em;
+	background: #efefef;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #ffffff;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #0186ba;
+}
+.ui-widget-header {
+	border: 1px solid #dddddd;
+	color: #333333;
+	font-weight: bold;
+	background: #e4e4e4;
+}
+.ui-widget-header a {
+	color: #333333;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+
+/* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+	border: 1px solid #c5c5c5;
+	background: #f6f6f6;
+	font-weight: normal;
+	color: #454545;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+	color: #454545;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+	border: 1px solid #cccccc;
+	background: #ededed;
+	font-weight: normal;
+	color: #2b2b2b;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+	color: #2b2b2b;
+	text-decoration: none;
+}
+
+.ui-visual-focus {
+	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+	border: 1px solid #003eff;
+	background: #007fff;
+	font-weight: normal;
+	color: #ffffff;
+}
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+	border: #003eff;
+	background-color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+	color: #777620;
+}
+.ui-state-checked {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #777620;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #f1a899;
+	background: #fddfdf;
+	color: #5f3f3f;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #5f3f3f;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #5f3f3f;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70); /* support: IE8 */
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-button .ui-icon {
+	background-image: url("images/ui-icons_777777_256x240.png");
+}
+
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-caret-1-n { background-position: 0 0; }
+.ui-icon-caret-1-ne { background-position: -16px 0; }
+.ui-icon-caret-1-e { background-position: -32px 0; }
+.ui-icon-caret-1-se { background-position: -48px 0; }
+.ui-icon-caret-1-s { background-position: -65px 0; }
+.ui-icon-caret-1-sw { background-position: -80px 0; }
+.ui-icon-caret-1-w { background-position: -96px 0; }
+.ui-icon-caret-1-nw { background-position: -112px 0; }
+.ui-icon-caret-2-n-s { background-position: -128px 0; }
+.ui-icon-caret-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -65px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -65px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+	-webkit-box-shadow: 0px 0px 5px #666666;
+	box-shadow: 0px 0px 5px #666666;
+}
+
+/* Roundcube button styling */
+.ui-button.ui-state-default {
+	display: inline-block;
+	margin: 0 2px;
+	padding: 1px 2px;
+	border: 1px solid #c0c0c0;
+	border-radius: 4px;
+	background: #f7f7f7;
+	color: #525252;
+	text-decoration: none;
+	outline: none;
+}
+
+.ui-button.mainaction {
+	color: #ededed;
+	border-color: #1f262c;
+	background: #2c2f33;
+}
+
+.ui-button.ui-state-focus {
+	color: #525252;
+	border-color: #4fadd5;
+	-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+	-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+	-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+	box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+}
+
+.ui-button.ui-state-active {
+	color: #525252;
+	border-color: #aaa;
+	background: #e6e6e6;
+}
+
+.ui-button.ui-state-focus.mainaction,
+.ui-button.ui-state-hover.mainaction {
+	color: #fff;
+}
+
+.ui-button.ui-state-focus.mainaction {
+	border-color: #1f262c;
+	-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+	-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+	-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+	box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+}
+
+.ui-button.ui-state-active.mainaction {
+	color: #fff;
+	background: #515151;
+}
+
+.ui-button[disabled],
+.ui-button[disabled]:hover,
+.ui-button.mainaction[disabled] {
+	color: #aaa !important;
+}
+
+/* Roundcube's specific Datepicker style override */
+.ui-datepicker {
+	min-width: 20em;
+	padding: 0;
+	display: none;
+	border: 0;
+	border-radius: 3px;
+	-webkit-box-shadow: #666 1px 1px 10px;
+	   -moz-box-shadow: 1px 1px 10px #666;
+	        box-shadow: 1px 1px 16px #666;
+}
+.ui-datepicker .ui-datepicker-header {
+	padding: .3em 0;
+	border-radius: 3px 3px 0 0;
+	border: 0;
+	background: #3a3a3a;
+	filter: none;
+	color: #fff;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	border: 0;
+	background: none;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon {
+	background: url("images/ui-icons-datepicker.png") 0 0 no-repeat;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w {
+	background-position: 0 2px;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e {
+	background-position: -14px 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 2px;
+	border: 0;
+	background: none;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next,
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 2px;
+}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year {
+	border: 0;
+	background: #3a3a3a;
+	outline: none;
+	color: #fff;
+	font-weight: bold;
+	width: auto;
+	margin-right: 4px;
+	padding-right: 4px;
+}
+.ui-datepicker .ui-datepicker-title select::-ms-expand {
+	display: none;
+}
+.ie10 .ui-datepicker .ui-datepicker-title select,
+.webkit .ui-datepicker .ui-datepicker-title select,
+.mozilla .ui-datepicker .ui-datepicker-title select {
+	background-image: url("images/ui-icons-datepicker.png");
+	background-position: right -18px;
+	background-repeat: no-repeat;
+	padding-right: 14px;
+	-webkit-appearance: none;
+	   -moz-appearance: none;
+	        appearance: none;
+}
+.ui-datepicker .ui-datepicker-month:focus,
+.ui-datepicker .ui-datepicker-year:focus {
+	outline: 1px solid #4fadd5;
+}
+.ui-datepicker table {
+	margin: 0;
+	border-spacing: 0;
+}
+.ui-datepicker table:focus {
+	outline: 2px solid #4fadd5;
+	outline-offset: -2px;
+}
+.ui-datepicker td {
+	border: 1px solid #bbb;
+	padding: 0;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+	border: 0;
+	padding: .5em;
+}
+.ui-datepicker td a.ui-state-default {
+	border: none;
+	background: #e6e6e6;
+}
+.ui-datepicker td a.ui-priority-secondary {
+	background: #eee;
+}
+.ui-datepicker td a.ui-state-active {
+	color: #fff;
+	border-color: #0883d0 !important;
+	background: #0883d0 !important;
+}
+.ui-datepicker .ui-state-highlight {
+	color: #0081c2;
+}
+.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default {
+	color: #fff;
+	border-color: rgba(73,180,210,0.7);
+	background: rgba(73,180,210,0.7);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/larry/jquery-ui.css.diff	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,556 @@
+--- jquery-ui.css.orig	2016-09-08 12:47:27.000000000 +0200
++++ jquery-ui.css	2016-09-08 12:47:53.333000000 +0200
+@@ -62,6 +62,8 @@
+ .ui-state-disabled {
+ 	cursor: default !important;
+ 	pointer-events: none;
++	background: #fafafa;
++	color: #333333;
+ }
+ 
+ 
+@@ -196,12 +198,17 @@
+ 	left: 0;
+ 	cursor: default;
+ }
++.ui-menu.ui-widget,
+ .ui-menu {
+ 	list-style: none;
+ 	padding: 0;
+ 	margin: 0;
+ 	display: block;
+ 	outline: 0;
++	background: #444;
++	border: 1px solid #999;
++	border-radius: 4px !important;
++	box-shadow: 0 2px 6px 0 #333;
+ }
+ .ui-menu .ui-menu {
+ 	position: absolute;
+@@ -211,6 +218,26 @@
+ 	cursor: pointer;
+ 	/* support: IE10, see #8844 */
+ 	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
++	color: #fff;
++	white-space: nowrap;
++	border-top: 1px solid #5a5a5a;
++}
++.ui-menu .ui-menu-item div,
++.ui-menu .ui-menu-item a {
++	display: block;
++	line-height: 1.5;
++	padding: 6px 10px 4px;
++	text-shadow: 0 1px 1px #333;
++	background-color: #444;
++	border: 0;
++	border-radius: 0;
++	color: #fff;
++}
++.ui-menu .ui-menu-item:first-child {
++	border-top: 0;
++}
++.ui-menu .ui-menu-item:last-child {
++	border-bottom: 0;
+ }
+ .ui-menu .ui-menu-item-wrapper {
+ 	position: relative;
+@@ -223,9 +250,16 @@
+ 	line-height: 0;
+ 	border-width: 1px 0 0 0;
+ }
++.ui-menu .ui-menu-item .ui-state-focus,
++.ui-menu .ui-menu-item .ui-state-active,
+ .ui-menu .ui-state-focus,
+ .ui-menu .ui-state-active {
+-	margin: -1px;
++	background: #00aad6;
++	background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9));
++	background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%);
++	background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%);
++	background: linear-gradient(top, #00aad6 0%, #008fc9 100%);
+ }
+ 
+ /* icon support */
+@@ -578,16 +612,24 @@
+ 	position: absolute;
+ 	top: 0;
+ 	left: 0;
+-	padding: .2em;
+ 	outline: 0;
++	padding: 3px;
++	background: #fff;
++	border-radius: 6px !important;
++	border: 0 !important;
++	box-shadow: 1px 1px 18px #666;
+ }
+ .ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
++	padding: 15px 1em 8px 1em;
+ 	position: relative;
++	border: 0;
++	border-radius: 5px 5px 0 0;
+ }
+ .ui-dialog .ui-dialog-title {
+ 	float: left;
+-	margin: .1em 0;
++	margin: .1em 16px .1em 0;
++	font-size: 1.3em;
++	text-shadow: 1px 1px 1px #fff;
+ 	white-space: nowrap;
+ 	width: 90%;
+ 	overflow: hidden;
+@@ -595,29 +637,53 @@
+ }
+ .ui-dialog .ui-dialog-titlebar-close {
+ 	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 20px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
++	right: -15px;
++	top: -15px;
++	width: 30px;
++	margin: 0;
++	padding: 0;
++	height: 30px;
++	z-index: 99999;
++	border-width: 0 !important;
++	background: none !important;
++	filter: none !important;
++	box-shadow: none !important;
++}
++.ui-dialog .ui-dialog-titlebar-close.ui-state-focus {
++	outline: 2px solid #4fadd5;
++}
++.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick {
++	top: 0;
++	left: 0;
++	margin: 0;
++	width: 30px;
++	height: 30px;
++	background: url("images/ui-dialog-close.png") 0 0 no-repeat;
++}
++.no-close .ui-dialog-titlebar-close {
++	display: none !important;
+ }
+ .ui-dialog .ui-dialog-content {
+ 	position: relative;
+ 	border: 0;
+-	padding: .5em 1em;
++	padding: 1.5em 1em 0.5em 1em;
+ 	background: none;
+ 	overflow: auto;
+ }
++.ui-dialog .ui-widget-content {
++	border: 0;
++}
+ .ui-dialog .ui-dialog-buttonpane {
+ 	text-align: left;
+ 	border-width: 1px 0 0 0;
+ 	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
++	border-color: #ddd;
++	border-style: solid;
++	margin: 0;
++	padding: .3em 1em .5em .8em;
+ }
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
++	float: left;
+ }
+ .ui-dialog .ui-dialog-buttonpane button {
+ 	margin: .5em .4em .5em 0;
+@@ -647,8 +713,11 @@
+ 	height: 7px;
+ }
+ .ui-dialog .ui-resizable-se {
+-	right: 0;
+-	bottom: 0;
++	width: 14px;
++	height: 14px;
++	right: 3px;
++	bottom: 3px;
++	background-position: -80px -224px;
+ }
+ .ui-dialog .ui-resizable-sw {
+ 	left: 0;
+@@ -742,7 +811,13 @@
+ 	font-size: .7em;
+ 	display: block;
+ 	border: 0;
+-	background-position: 0 0;
++	background: #019bc6;
++	background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
++	background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
++	background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
++	background: linear-gradient(top, #019bc6 0%, #017cb4 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0);
+ }
+ 
+ /* support: IE8 - See #6727 */
+@@ -835,23 +910,41 @@
+ 	padding: .2em;
+ }
+ .ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
++	margin: 0; padding: 0;
++	border: 0;
++	background: transparent;
++	filter: none;
++	height: 44px;
+ }
+ .ui-tabs .ui-tabs-nav li {
+ 	list-style: none;
+-	float: left;
+ 	position: relative;
++	display: inline-block;
+ 	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
++	margin: 0;
++	border: 0 !important;
++	padding: 0 1px 0 0;
+ 	white-space: nowrap;
++	background: #f8f8f8;
++	background: -moz-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(50%,#d3d3d3), color-stop(100%,#f8f8f8));
++	background: -webkit-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
++	background: -o-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
++	background: -ms-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
++	background: linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#d3d3d3', GradientType=0);
++}
++.ui-tabs .ui-tabs-nav li:last-child {
++	background: none;
+ }
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+-	float: left;
+-	padding: .5em 1em;
++	display: inline-block;
++	padding: 15px;
+ 	text-decoration: none;
++	font-size: 12px;
++	color: #999;
++	background: #fafafa;
++	border-right: 1px solid #fafafa;
+ }
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ 	margin-bottom: -1px;
+@@ -862,14 +955,26 @@
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ 	cursor: text;
+ }
++.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
++	outline: none;
++	color: #004458;
++	background: #efefef;
++	background: -moz-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(40%,#fff), color-stop(100%,#e4e4e4));
++	background: -o-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
++	background: -ms-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
++	background: linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#e4e4e4', GradientType=0);
++}
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ 	cursor: pointer;
+ }
+ .ui-tabs .ui-tabs-panel {
+ 	display: block;
+ 	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
++	padding: 0.5em 1em;
++	margin-top: 0.2em;
++	background: #efefef;
+ }
+ .ui-tooltip {
+ 	padding: 8px;
+@@ -897,22 +1002,25 @@
+ 	font-family: Arial,Helvetica,sans-serif;
+ 	font-size: 1em;
+ }
+-.ui-widget.ui-widget-content {
+-	border: 1px solid #c5c5c5;
+-}
+ .ui-widget-content {
+ 	border: 1px solid #dddddd;
+ 	background: #ffffff;
+ 	color: #333333;
+ }
+ .ui-widget-content a {
+-	color: #333333;
++	color: #0186ba;
+ }
+ .ui-widget-header {
+ 	border: 1px solid #dddddd;
+-	background: #e9e9e9;
+ 	color: #333333;
+ 	font-weight: bold;
++	background: #e4e4e4;
++	background: -moz-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#e4e4e4));
++	background: -o-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
++	background: -ms-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
++	background: linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e4e4e4', GradientType=0);
+ }
+ .ui-widget-header a {
+ 	color: #333333;
+@@ -1073,27 +1181,7 @@
+ .ui-button .ui-icon {
+ 	background-image: url("images/ui-icons_777777_256x240.png");
+ }
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon,
+-.ui-button:hover .ui-icon,
+-.ui-button:focus .ui-icon,
+-.ui-state-default .ui-icon {
+-	background-image: url("images/ui-icons_555555_256x240.png");
+-}
+-.ui-state-active .ui-icon,
+-.ui-button:active .ui-icon {
+-	background-image: url("images/ui-icons_ffffff_256x240.png");
+-}
+-.ui-state-highlight .ui-icon,
+-.ui-button .ui-state-highlight.ui-icon {
+-	background-image: url("images/ui-icons_777620_256x240.png");
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url("images/ui-icons_cc0000_256x240.png");
+-}
+ 
+-/* positioning */
+ .ui-icon-blank { background-position: 16px 16px; }
+ .ui-icon-caret-1-n { background-position: 0 0; }
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
+@@ -1311,3 +1399,222 @@
+ 	-webkit-box-shadow: 0px 0px 5px #666666;
+ 	box-shadow: 0px 0px 5px #666666;
+ }
++
++/* Roundcube button styling */
++.ui-button.ui-state-default {
++	display: inline-block;
++	margin: 0 2px;
++	padding: 1px 2px;
++	text-shadow: 0px 1px 1px #fff;
++	border: 1px solid #c6c6c6;
++	border-radius: 4px;
++	background: #f7f7f7;
++	background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6));
++	background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
++	background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
++	background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
++	-webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
++	   -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
++	     -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
++	        box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
++	text-decoration: none;
++	outline: none;
++}
++
++.ui-button.mainaction {
++	color: #ededed;
++	text-shadow: 0px 1px 1px #333;
++	border-color: #1f262c;
++	background: #505050;
++	background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#505050), color-stop(100%,#2a2e31));
++	background: -o-linear-gradient(top, #505050 0%, #2a2e31 100%);
++	background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%);
++	background: linear-gradient(top, #505050 0%, #2a2e31 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#505050', endColorstr='#2a2e31', GradientType=0);
++	-moz-box-shadow: inset 0 1px 0 0 #777;
++	-webkit-box-shadow: inset 0 1px 0 0 #777;
++	-o-box-shadow: inset 0 1px 0 0 #777;
++	box-shadow: inset 0 1px 0 0 #777;
++}
++
++.ui-button.ui-state-focus {
++	color: #525252;
++	border-color: #4fadd5;
++	-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
++	-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
++	-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
++	box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
++}
++
++.ui-button.ui-state-active {
++	color: #525252;
++	border-color: #aaa;
++	background: #e6e6e6;
++	background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9));
++	background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
++	background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
++	background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
++	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e6e6e6', endColorstr='#f9f9f9', GradientType=0);
++}
++
++.ui-button.ui-state-focus.mainaction,
++.ui-button.ui-state-hover.mainaction {
++	color: #fff;
++}
++
++.ui-button.ui-state-focus.mainaction {
++	border-color: #1f262c;
++	-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
++	-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
++	-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
++	box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
++}
++
++.ui-button.ui-state-active.mainaction {
++	color: #fff;
++	background: #515151;
++	background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
++	background: -o-linear-gradient(top, #2a2e31 0%, #505050 100%);
++	background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
++	background: linear-gradient(top, #2a2e31 0%, #505050 100%);
++}
++
++.ui-button[disabled],
++.ui-button[disabled]:hover,
++.ui-button.mainaction[disabled] {
++	color: #aaa !important;
++}
++
++/* Roundcube's specific Datepicker style override */
++.ui-datepicker {
++	min-width: 20em;
++	padding: 0;
++	display: none;
++	border: 0;
++	border-radius: 3px;
++	-webkit-box-shadow: #666 1px 1px 10px;
++	   -moz-box-shadow: 1px 1px 10px #666;
++	        box-shadow: 1px 1px 16px #666;
++}
++.ui-datepicker .ui-datepicker-header {
++	padding: .3em 0;
++	border-radius: 3px 3px 0 0;
++	border: 0;
++	background: #3a3a3a;
++	filter: none;
++	color: #fff;
++	text-shadow: 0px 1px 1px #000;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	border: 0;
++	background: none;
++}
++.ui-datepicker .ui-datepicker-header .ui-icon {
++	background: url("images/ui-icons-datepicker.png") 0 0 no-repeat;
++}
++.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w {
++	background-position: 0 2px;
++}
++.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e {
++	background-position: -14px 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 2px;
++	border: 0;
++	background: none;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next,
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 2px;
++}
++.ui-datepicker select.ui-datepicker-month, 
++.ui-datepicker select.ui-datepicker-year {
++	border: 0;
++	background: #3a3a3a;
++	outline: none;
++	color: #fff;
++	font-weight: bold;
++	width: auto;
++	margin-right: 4px;
++	padding-right: 4px;
++}
++.ui-datepicker .ui-datepicker-title select::-ms-expand {
++	display: none;
++}
++.ie10 .ui-datepicker .ui-datepicker-title select,
++.webkit .ui-datepicker .ui-datepicker-title select,
++.mozilla .ui-datepicker .ui-datepicker-title select {
++	background-image: url("images/ui-icons-datepicker.png");
++	background-position: right -18px;
++	background-repeat: no-repeat;
++	padding-right: 14px;
++	-webkit-appearance: none;
++	   -moz-appearance: none;
++	        appearance: none;
++}
++.ui-datepicker .ui-datepicker-month:focus,
++.ui-datepicker .ui-datepicker-year:focus {
++	outline: 1px solid #4fadd5;
++}
++.ui-datepicker table {
++	margin: 0;
++	border-spacing: 0;
++}
++.ui-datepicker table:focus {
++	outline: 2px solid #4fadd5;
++	outline-offset: -2px;
++}
++.ui-datepicker td {
++	border: 1px solid #bbb;
++	padding: 0;
++}
++.ui-datepicker td span, .ui-datepicker td a {
++	border: 0;
++	padding: .5em;
++	text-shadow: 0px 1px 1px #fff;
++}
++.ui-datepicker td a.ui-state-default {
++	border: 0px solid #fff;
++	border-top-width: 1px;
++	border-left-width: 1px;
++	background: #e6e6e6;
++	background: -moz-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#d6d6d6));
++	background: -o-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
++	background: -ms-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
++	background: linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
++}
++.ui-datepicker td a.ui-priority-secondary {
++	background: #eee;
++}
++.ui-datepicker td a.ui-state-active {
++	color: #fff;
++	border-color: #0286ac !important;
++	text-shadow: 0px 1px 1px #00516e !important;
++	background: #00acd4 !important;
++	background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%);
++	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7));
++	background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%);
++	background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%);
++	background: linear-gradient(top, #00acd4 0%, #008fc7 100%);
++}
++.ui-datepicker .ui-state-highlight {
++	color: #0081c2;
++}
++.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default {
++	color: #fff;
++	border-color: rgba(73,180,210,0.7);
++	background: rgba(73,180,210,0.7);
++	text-shadow: 0px 1px 1px #666;
++}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/larry/jquery.minicolors.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,327 @@
+.minicolors {
+    position: relative;
+}
+
+.minicolors-sprite {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2YAAACWCAYAAAC1r5t6AAEL2klEQVR4AeSaBY8czxHFqw6SW3vvz4yiMDMnojB9pESsfI8wMzNzRGFmMhz6aGcq1btvck/PM31eec0tlYp6eqp2fOP+ba//7cm3x7K35jYbEWHd8BItieNQmmHubhGWmuLpN7ZkD/96w22B40c/+tES+y960Ys0b3PmW1vsCA385Cc/MR0veMEL7FrMe97znsd1tiQhdlPJIQ+7vk4bEYM5iA3EG/YrttZVrTEi6uvUbe3tkmqp3LthH+tBBq8zjWtN0P+/fxmIdfnAaMhvy4DBIyaTSds0TXt0dBQHBwft3t5eu7Oz0545cyZ+85vftO941zuP7LTZVE6Rhmhs7tya2d6S2W6aFyx1TAU2xDsfOmWn8z1t+Nspmyn/xjxz/evl2Chj96e+I2O3pb2OgljGFzcSKT7uYlgHdrM6K6gUtudFqGg0sZeCZhFPKXFuDLKVspFyDvXLWEq5CzKeSqS4Pq6USPH0A92kPYvBD30ktmwHKIKKTvG0A3FHEzGLI3+BNaR7OhuQ1qJp+fks/k3tV2mxevqaNHj9l4EL2ZzrKljQPHx9qefPVvyRxCVfja2ZHeifMOma3f0l6PvqP7Dr47aU+1Nuh72eMtb3FRXbozU2WaYGehvSmDaHZuBv4111Hv9ryXhCyn3oYJ0qHkuF9Igg9CjUx7pmh72Fw7/EJ7aj7ys0k+NjC/yDWyniZqsGKX5Ae7FFG2yDILfs1njYxCwl7am21AHtyEXalFfNc6DJX4H/8tRjzH196sdlTRJdn+9hf8jrvgx/O+3v4Z6Tidyb+qA1+tZ0xOqfRdiKeUrRZstm8FNDVi0y7tDpF5sfkkXRmVvU8HjyWpi1c7xhEfPOpZ1NuPlvD5ZsgeOHP/zh9Q5m7fUMZs95znOKmtSA5OQcNCTHfOvMb9dBReoR6Ik5ALECbXPDXeRQMJNa6j3BV1vhi/2geJFgG5rnRsJWaJ5BrOiUSCBrDw8Pi0QHZZubm+2//vWvKZi952PvPaiA2eAmJ4pWUZYZzzY6+4ArbP8JwGD7xf/d7gTykG2ssZHx/4B15FXGNop5QDY6WVyMM4+GAVwKZshTowxmKGgPRaB4Eo0zffazzNl+MFtOuTvlzpQxySnZpo0KeAHYBMgojhwe6RJtP6EhAmQCb5iPOAtvdMLapsGXfujNex/TAriA149UvmjUqdB/fWHOXwMuq3zg8y4APXexC3jWyHT5pTuWzcays6+9rxTYNKb+E3vArIICigA78LchWwCzDTtp3AUwYygbK5CJPZoXzNiWhirN8fvqPOBsIuXjzvcqVlYrhK7YAmaQPbFr5Mnzdo59p/eVN2YfuWXA7FTqO9J/Ter7Mvd2QNBL8x6jRkCpDmcKUFpf7Kb+IeZ8LOecyfW+lnor9YVbBMweuhjM3Dvogi2jLxc4Y/vNPxZVHW4TS5cJYlWQWsBormcwe/azn33JYMbwQLFQ6HH3yzsxq19jlJsXhtjmazCvfx29d70XzTGs9p+Yqa81IW4KYFofdLQ5kDOGL6wXsKfzoNrAaHIgV+xpCjZDWSSQNeWkbH9/P3Z3d9vt7e12Y2Oj/fe//x2///3v289/64v7Nu7fwETaPhJuga8SA5AWALMpl8TAPgG5oncCcZIdxLtvoP9bYnbC8FLUSd9An2LUkaYJ3JAjMBMgcyZMFmkGjaKhaRPn0z43L5hBA7QIytCJT+2RbnbkxCywjfSegkssKrs2PTErmo//YjKxwG7aHe1FcYqOqYKT4ZntEbN5lDMvcdqeT8NpZRAXpm7LvNny3ZTuelO2cPyfp2mHHZiK2oqFmJGNOrBAmJfgwH3dsRbsCNyBerfgK2HBdnwAYbO+l6j1DFLl0hdiuD0+n+NYaP+OgCHJa3QLc40e1F+aMfTJ0edEewwG6aBna4jjGdO/n7Dlu1fMTleBCzHRyjGa1xMzSI1fdjiu37mQPgMZHg6kuUfBDKINQxRnOA4wmxvI9qQZbWwTzRz2n/ndDY1K0h6sDnb9cPPkE7M9iWsjknM04kU28a3YxOzDNy2YraV+yuwUzJ+W9htTl9jtqQmK2FZYYl+hLOSeCmjwj+2N1AeZ/2zmf5H6S7n2LzN+eJOC2dPCvC1mjY4w2+uwZm7+61+u3GJgNrmeweyZz3xmHcwIHub7KWP9J35zQFbkqJ5SAQR1XiDGwNjgmlqvtfqrYAZ/8LOjWqRW8mEXcXeGLs71glkZWi9iHYCVHINYSwNgNh3BMFZ8/ukipMVPGKOclm1tbZUTsymY/fnPf26/+bPvXrAxwRU2OU4bmD4wc8znTY76xQaYMYBBa0y+5wzmGWxyYrb1/y84iPaKbMMfzU7MAmAm3z73fpfLjTg08lN/skKFQvYYzBTYYOvvNUGbIM3qidldALP14e/NCdA6cVQd0G5rFkWnBE7M9vknil0j5mkHGoNNIEYnacg5/YArshnvfuc0OTJjCAh5QDLcHFn5P0rnIH/SwN1q98IIvUjtoTy5MBCRjLSjw8kKC54PQBquR/MyieDJBkG12PhktchKubRm9dPvf/bk61PhEhBjWF25b3V4J6/wxT5rvUZOzA4ZuhQFqmAGITDbwlcV/61uWJZT7iOs4b/2cQXIRhIfDZ+Y7VUakTn9R4FCmnsXP/E7IeuQ09WqEav/UKNyYnYCoGlzDigDmM3sLbx8D8w+eFOB2Sj1q1K/JfXrMveUtsxNKRpzqxrrVICMbQW0GNJUb9rH8qvMfyHl05n/TsrezQNmT3lJ0NdnA+9Ll0CwEjD7weotBmZH1zOYPf3p/2PvLIDjSrKsnVllkNSy283cw8zMzDwTsPTvz7TMzMzMzBg4zMzMM83M3bZkC8uW6+Vmlu6JPX3m6qq0lrvLoVVsRuJ79VIa976vzr0nH65gpkAUggzNe9Ch148LbT7A+ffWe0XPVSLAC+7DCtRWwYzn9Dl4T1jP/cJgRWvBXARvBGbWZhDD9RjHM5gq1gHGWtNCFxnMRiDG4YuAs5WVlQZmTTEbgdmdd95Zbrrppu6TV3x+CaFB8g20WzBX3HGCNwK7VUrBGoBNmFtUbGrz2d4HrL1EoUF32Log/sk+/DwDs32tUAijgVaxvptnJvllub3o7MEDQwbEAztAVhDuyBvE2xw2FOeY2XfoBxzFzH1yLRTWOB2GMnoF0LUKAHNlQBRQJnLM8rFjwau4jE7cz6Q+13/+7L5gjx+OOO3DmQ9kvlKWZt1QRi1xNpOTZzZn4YzHwzf58w3MZgVtZjbMh1UY034DM4pEVgCTuUAWRH/RyiEbl38xZyM+QbFy/BRm3ZWCmUKYFAlxBJAxlGUizbxYy9z6tf9yyoPZnjr/lNr/+tp+RS33XYebXmLgQunsnp3AWKSaxaGMY8CZC2YY63CPa9dSecuwonItn6jza6c2mD30BUJZQmg8ljHsfO2M1uXv2bNDwAwwdGxSIMxbV8PQFMx8CBkTzEJ1zQcW1FtWzAQEixiEhKGMDoy5apqsC8EsaBf9DCcnTMGsjAFtfD2DWVEwYxMPVKyWURmaQla8nDJTyspgMACkJQazZv5x6623dp+7/qsLxeLbMpgFPOJAl9cvOjYtoYw9CErwy6i1Bp6UWvfAOcYvpJgtWgTgQssxs3H/SyjKMSvn1vaBWss30G4oEAMZ2k6OGR56NQPAQJ7BewLGCNRAm0imj8DMnhK7wK94VkIX10uv1aEoAMUsMXgFgObFOmXrF3vJyQlxTvPrKtnRow7qRH+wwqKPhTBaCF8PMgpWivKV7VrnthjnsEA8B4cPjsZLpmttptA9bIwW4U5esCNuPOr3LIQR86O5XqYQQ1xAQlcWZSoU8jhUE5/TQXqTkEX9DhefOXooCzEUNTBzRCLmOHBRRbuMEE/8cCilL8CpsoinoHz4PRfulTd3amuZdhU0f52TY7bqoUAwhrZnAHI7R/+5thkX2r/0fYAzDbdWAAuQRhQzvwSwhjEBM0iA87YpZhGo+4FaNiucjL48fQBmwV9F+yg9QBnDGVFmPrxe//MpC2b3q/Dy3bX90qaMVRAz6OoZdGlJBmaja60GqPlQNtQ5P3RRc80UxDBvBe1OxjsCtXJ5LTXkMf9uHbvxFAWzV5eUxaasYDZLP/h2EP9P8bI37N0h5h8ApKMTDGbtpVrALA5dRD+AK10bgVVy7hODmT5nBH0oWBurep0HRFCkMFf7BED+NXr/AMwKg5Xdu6Dd5hscoY05CXlErSGKAEkGs6JtVcysRviighkbfjS1rLUbpBWYf8zNzZXbbrut++LNVx1Rn4vc6mkAl4YtemFCPI+awYyEpeRF+jkIkCmckZwZjxSEMgZhVuzKqGCWZ6GC+cknCmmF5od7Nnq5kTjNxBSKeQlpVMWM5D8JZTwgLmeihiG/TAKZAGv+e2hOA+SRpey/pdn8qA8QE4jTV9EjoMyUB4PtF650IB7Rnv7E8wIwRcIUoxuhGf9wvlkMX/FzRyGYQksnLAQKRumU/K4yjZfN96Vg616x99KpUMmPVTJuS605ZhG3SIn8/xas3G73cH7sYc8TbVzwxgcz1D5lKphx1LIPanGa1qJ6/DBaQjHDDvTpFbjGjz4FmPlxl0HptQIoQyHFrLdkmzmS0j+WUw3MWs7Yf63jr+pS3t+ADAoZYCsAM+n7NdpjqmU+kEmtyhn6a1Y7gNbmWl7am+r839ax95xaYPawb0RQt2NXVfSrKLbLcvPQ8mX/PLXDwGwwyWBWc4MAZgIaMZjJOoaezVWxGKxiYItNSPQZ9blKFGoo9ylOntcIzPwcrxjMMB4pZnQfjHMo4kaKmQIYX8OqGO6ZmiTGilntAswajLXpguKBGRSzBmdVcW1zpUFaM/+opdRwxu5Lt187777kSGhinuF+oKRJKGPZ26L+JLqvcHpWYIAMQxAITMXsp+2aDQMEcjKwgnnzfpMCJRAQNOkrZxq3CTATIGMZkDeZTQZkcFOWAZhBHvHNP/RlJ/7eHKUE0V0AMw5T5A0hxyyMg8K1oEz6Or2k3urqOG571rQqb83gUPsyhl58nc7CkkKG4yeRz8K0rpOfcJkzLkPRvuLPnDBjf/mlhfecut+0QpcPWaqYhetRoJiJMoY6NgRx0rLIsCi0zD8dRvMCZYGf4ThWlACzVZ9pUAdFwq+twEm2o7+L2Zfs0y+RAjBTSENfix/KuCJtKhlKmYIZwhtbsb9Otv9m/X13qoDZi2v9A8OUX1QLQEwVMi0OrKUIzgA7IZBt7syokKbtqDCgFQBaa7+93uM3hym9+9QAs4f/3xKvUDUNY9RmMPvqn0/vMDBbnWQwqy/SADNRfuKcL4EeaceAJ2Cl53BFylqs3Pn9oUKahCT6UCXAZ0AGWOsAPb1erwFMq1tfjUjYhEOfRWELbXfOYAvQluQaMBbGkgdmGr7IqhmB2NDqVjCXAGUCZq00KBuNtXBGgNlXD950iIw+LJTR2mz2MaqlTIlihjVUt+sH4BKoZj0wi3yJS6YgMC9s461ebn16yVne1Ml8Rk7VmeX8svglpyioWd2Z+cdqAngBzLAJmcOmyZER9ZKNjb59rv3uaxWZHlwZU7YXndJqMfdoJatCBgv9zRUzqGGbxjcNaIzMP0xVQyhjsRyz/sqKE6AhaovxKPv4rff4C0UstNGcyDfRljgRIYU6CL/DBSXndjWC/Wje7jx6KPIVLPRMZPuPFboz3jM+D3/PQp/XAeWy3V0YJYv7olkgEjwKHGUCS7hc2qLRnju6OeGP3+TfBT10ybSIDFtKSRn7ENAKyBKmI7KGfrMCbDMPnIG16KZqGYq/TtV9ATMpopjFJu1gGeGY+dAq/1zFGh/M4gQ79FUxU37RfgxwyyiSZ3aMND94SnpPH+EjrZnaHMyCB7fxvGxK2SoBGgrCGFtNmmbLM/vb45MOZg3IfnSY8nNH6piCmCplUNDQFgjTEEbU22yXr7Ufyii5Zgpma9pfX9PA7Ffqte+ZbDB75PeUVIoXta1RAWNZT+Wv/O7MDgOzlUkGs/n5eYCZhDDG9u9ejpleH4QyYjwKX4wPTyboCaAPKlerNN8Mc0NTnwBgrd1pW3PMFL6o7yliuM9QVTMBMe4njNG9PJUM6/1wRRlCg0IWMeaCWVPKWruNOWAGV8Y23gCtVDBreWbdZXO3HIy+US7hi42nonFNoYxFo/5YcBK3Rg0PInf5BQWzvJGU0B7+XAQCUhjjZpYZ036OGdnlgyJlQxiPQxxVMYNtWyebsGyfs1LmA1u9s8qs5n4egZmqZAxtvXRMwhT9tzc8MMCMxii8EaB2JGWA2fJyLJDoaS3xDxbK9dSJQB0AKGudi8c6C020Han0gkBdc9d7K/w6eOLxz2FTuRJ3j+8bPLu/f2rK3mI5EA38DU97yGn635jwv0uqmukahTMGM81mcpglPj1L/okfrKXEVvnBscxuUlwQDCg5ZgN5+BjUYuKEmeGAND+xLnGePPRm8aNK/VBGXzUzGOsRnOXWX241wRltJBOY/fWxSQWzl1Rg+r5hBbMu9UQZ6xlkCXwRmNVrAqUsVM4EwBTUyibW+cW3zNe+FgfMHEhrcIa5t9XyW+1Q6wkFsx/VUMatxzYQuOUv//Jp22z+0d9m849h2t6f5Ul2Zbzvfe8LMCsRRAkY6RygJ4XhirEyVgAkTkhieL0AmPaH1C4+xPlQJblcbogl1nqwxSoYg6uqZAJe0SHQifps8IE+rgF8KZShz2DGillqQw3EGMzgwNjWMJi1AjBDvlnNMys1z6z76uHb7swzGmMioGXtzGGNuoZ4Rr/NXlVuKRhTh3lb4xw+zTlmB3Ob05c4radxYCvlmJH1fdkg5ZyBLHOfwYyhTCHMDRUi6oQMWGrJ9pIThzLul1DGaQMz3/eg4M/BKhqvgyuj5pepfslzWEtW+kKZraYcs/7SYsqmekHfYrWmkEV7LqpCAaTo7CyO6MiJ3vDZUoTIAg0ochypnwUMW50lv6vYVbglRZZk7AkPyvvgzyyFjzqjfYwWQo/Tc8TaOG1Tj7qxawikFGQAWiXr7wIqWkaXfgeGSxk6oVq14FrsDb8z2h9UNIZtKJH2vBn3wFl0DGwl2xYJCgt+p+v90x42y2/tPoxhzoe0GOQIzPx/GXFqFmoVmObtC6Wh+6/8PFPN9GDpMBc2UstarYqZ1rIpATbvHGd2NDlk69QqX5/eD2EMn17GFcxiKGulb+OAtLxqhRUzOs+sVDD7q9VJA7P7pX7+yS7n/wnoarWGLjKQoR+HMqJOAZyxioa5LeWXAbxCV8Y1zIeAhnUdwEyVs1a3z/jzkvq/WEHshskCs0f9vJwayTEX0deSMm9iSv7ST83uMDBbmmQwu/TSS8cFs3gutqJ3gChUw0qguAlIyfWBE6IXyuhAVhLg8uYU2Bia3FBGVuy88EVVzND2aoQ1RgYfViUCMVbMCtpsiQ9Y2wjMoJ41MLMzzHDANMCs1JzFUlXY7rKFO27nlxgwCMALY26YItpTNKbfUjfFLBOzkFJGsOa86IBjKM+MzD9WPMc4PsZx9CDn1P7pDcw0vwyEKQoaEWgHMKuFwWxV4UtyzDDOc14SHRLnjtQy3569OK9suYJZMTADjOFJgZoMYV2rnRefIqycUw85Zu5X6KsulOmbHNp0+qyVLu1aWAitOHyfja2aVMh9cR//o2Telkgn+HF3kwKvDf1gXazXyIPpClmota6O3Tbi540v9s8YQygjQSdAzLun/PZ0BV5fdPm+R+x38sgitSxq63pRzCId2cEDz2UeBiCHDcyOuY6M5ynWiIdhkIXlyoGUY6YPPwg25VKoKmZW5gzQmrCjxh/yxN5pLFFaoCLobgMzezDaBOWO9QXOMkIZsY7BjExAAGZ/sTQpYLanjn176qefTf3evtQjlSwCNBTpxwWujACvkxjKKO2oKJg5QCbjHfZyJKX+T1Yw++NaH58MMHv0b5SUe34emR/KwBAnFNWl/MUf2L/DzjFbmGQwu/jii0dgZmF7fmihk5NFdQkcD4uqWOx0qO6HtsZVxXSOnAzxbJz/5YUUJhwwzc+s+8P8vQVm0sY9uY/QS1cxQ23nkSWs4drMPxL6ADO2x8dZZoAxC2McGqQlBrMGZRXO0G6qWXfZ4p23phkRi1Qlm9r85aboOO5Xr13t1UKujJ7YxAoayrI6NGYDMxuP350NzNrrQt4HAAPOBAWbOQ1Uav0IzGQTuoYS7LAhwBlEJsoxEwtqgFliMJN8stEc/TlKnFpDoYwjOBMQi2KdUGcPzPAK2sDsyBH9o1BX7O8dj3h+Mc+4DpcFUEIXRraBPjMJ0aDOdD1fqp8JBRCfrztXCIqND6WrUEjdopexoqhYhNo5eIAUL6wkknWuk99peJp2Vqt83h/GcUv5JPr97nvs6e6bvar0KLouvhYHTHMA79bStHzrfDMtcp0Z7SB8DlgG2oRgFmONgplToy3jwQaXiDgPW+nWX2nPgbIvT+yWgIsdOHPAjB6+bzDWVyjzwKy1RTUrrZ5P6c+OTAKYvaT2f6MC2SMbkLVQxtpOXRYgQ9sBMVHMCN6SzZ1IKKOOlRMMZew2BbM17TOU0fVtn8X22+ilpP73pbTrPfc+mD3mjwv/1zr0q6JlCmzo589/6+k7DMyOTDKYXXTRRVDM/JwvHZfQRt9kA2vGD0VU6FG4Y4t6sqxPal+PtZxX1tpiuqEQhzmFqiivLG12/piAGtbovOaaMfABrDqGL4CZshimN8opE4v8Qm6MdzP/MCADnEExQ35Z67fxBmEjGDN3xjbX2qM8s8uWD97iv72bWIRauaWVKYdnuBjTDJRbOE2rkJ9GG/fgjBWzWg5pKKO2E+eY7ffCg6JvncXxRMFM8ssGTmwmwGzgHjgt+Rp1fD77OWZwZcTLDnLLXDhD3eaL/z5K+WctlBF/CVLE3FinLF+za2EPOryt7T48rwlT8qOJXyfPP1BzwnTmRD8v3EHR5Kpt2Exy7yn5WLZsa0/rvQ3g/LXwlULH0ND40ejaUtSP7GsXnf74AzFsTemcFB3T60UxiyP/QiMQ8SvF+YueVf75qjcpmI3v/a+hjA6Iaa306bT9cwAOrb9NTCFDjgPGQyjzzT58lpZQRmwkr5BKtoo2AxnareAabEYOmq6b+ZND9zaY/X5tf2vq9fsNxlBGcNbrKYixiibjcUjjhIQyomAc4Yi+2Udb02pbp6DWnrPY/lGG9VZ17A8qmH3vvQtmj/vrppiN/22cH75gdlFdBbP/eWCbzT/622z+sd2hjIcnGcwuuOCC/xiYSV4W1Kj2IwDlOi86Y7gGQOKdI5YAUwRWydqFwQ4/eC48k7Q9dU3nFBh1XOdwr2iucE6ewBfWMpd16sbI0MULxfyjjQ8ZvDBv/SHGyfyj/RQrGCtNLatlVDcAq+Op1sMKYjjTrJXS5kaK2crczZxeld2XFkAacYoVbmcdM7XtqB0wPWDTQn0/KL6HBiIEOb3hYBuP/AwQytheF7J9E11O09BF8QMDXQqQYV7BjFlFk+dWPSUtUXFEpqG8rdI5Zvvr+CycGQmyoJLVQrlkopwZqKkwkN2ALW0jr4zPPBskPdS11I3kNkZgtmd+LkHz4HwmwFiB0OIJPJk6tgoqTOYldi+EQaoeI7lkdCtwITs/4s6aqsUfT2ePyX4yLS4UjojwvowHw3OTIpXVGDllG9NDt1WB031RTh4rj8U9H4z2ICqXrSZnRFEq5R70vJ5CqVDp3Yc/H01snoXMM550xsZQ5Sr7KDLvr4NipgDmcg3WDBww8/LMDnovGekM0Ztmx8/OimuAWQxlOjcIk+gIzGxDx9ef7CwOxLQSqmSB0Cl9gJlAWYOxZvIxgFJmYDYQKINbI4r3FzqS0h/fdW+B2UPr+j+uEPbcWhqE1bFW58SAVjJgq5XMtYJYZJ+vMDZ2KOPWrfJjN0YeC8w/vLBFaSdWylB47D0p9b8lpV1X3ztg9vh/LRt/K8X/0Y0Mnqxu2/nsN5yxQ8AMMDQ/ya6MN998sw9mDqwAlAATpGh1DGUGV0MDCfRbYUt58ATu655dRuDFgFMc+3rkjg0dN0YAnueKiDmG0HFCFB0wE/WL1gLG5LPxg7UAJ1dNA4yJmjZs06yYydllSVUyTKHf1DCELgLaTBUbqWSYY1fGVrc1CGUEnNW5dmj58CurczcmZZEpYxgP0qbQlzw0yS9DKcgxS4FyFuRroL1stvmLHMoYhoXN4IVH3BhdMEMcJxGl85oAMNP8sYEztqo5Z61NdvnY1EImu/y7w0i/1mfCqw1wZsBF+WIEaSV85+Q/YU/ALLc6fhVF2COZgHBhyixpz6FDeMFnsCDSwZitYhOOgus4ulEPZm51YThrP4AtN1ULU20m240pS4rt3x044BslMS8pmBCYIszJtKJoPKLuj9Q2A8EsQINHw1BRsCmcdyfPRRCJ+xYFNTL5kN8RyBX/xxGPDIIM4BqGSn8DrANIitkI4NXMTM588tn2T7KkNF0EyIISruMcM8dmQgBM1bNIR2Ytec5Kl/CTTWs6Kw4E9M8CiJGGzT8GyfnvVNQO1LMlok1zZtxvuwBSoh5X31MFbToAM1PHKIRxwApZmweQtSJhjKKejcIYbTN/eNu9AWbfWiGshS7OpB6rZAC0nGjcAbGeC2KioMma5ENaGMqYt5RfpqGMCmNYD+gaxvb4vgEIroVaRnVnNYHaUh37ngphf3nPg9kT3mChjD0nqVaGXHiTHLPPvOasHWaXf2iSweymm27aEpjJeGj+0ca4L/eTvm8Mos/EfVGuvM9VGOu0ljn0vZoVKw1P5D7aOh7CmLotijqG51UrfAY0Hi88hD6DWa3VAKS0AoADmMH8w2CNwWx0DcCs1jAAaWDWfWUwfz1DVp5R+MIcxv05VctQoJghxWrghTMmGstYC56BOyMpZo1rNAJAf7KBWeHvcVHCU2fRplhOB8wGmWEMIBa+6IgUaBsSMMOPncpyBilmwEhVyNSNMUy7sfF+OgqHxQDKAGPo83pfG8A5ZnsPHvRt6ONQuNge/wSDDmMb+G2JpvTD9nT/8X7jR4n9++PoR70uXjn+D/hqm/5C2ufe2U+/0N7iAWZdrTv9H7it2QzW5BqEMvpRfqH4FDg0cpCvODP27fyyM9VoXr88ipQxfyxQzPyxQE1ziBOk2VuCI6MGi8eGH9r259j8Y60BGUIWKadsQGoZClwZ0SZQK4Azyjdrm/n9W+5JMJup9Q/V8tMKZD6gtXZOJfcCpUzHufSckMYUwRkOzA2hLMgvUzgLQhk76Qc5ZVIPoZaFJZGK1vvJkvq/UWFscM+B2ZPeZV+PZee/sa7Lk5uoi7X50y86e4cpZgcnGcxuvPFGH8zifLESHDa9JfgSwPMMPvg69znQZsVMlLHgnDFRypzaUc+idSF80RyriEXzyPQevE4OlfYArZB6NpR8soKxBlboU9hiZ3Wq9dBgrGAOYFZL19bUPs4zA5jllm/25cHha8OcjGkISugreEEx8xW2srcxDJhFvrRF+KIKTChsl2/9JjDNNaaJUoWgmGXLfCgIEZrG4dJ6QFvgu421ADPAF0qOXmwcAh0Vo00oZpIxaxvq4bt0IKXliPmvZ8X3NXDBrKR+M/9gpWzzNzheC8VMbPMXElwZ99x1F+dDUTtjyHDFD33LkFjEBIRs1clso5gqhXUFStPd1bFccANWmwjXsEYem1Ux/HXsGr5HYhdCPBeeI2MpFCw8P+7Exo00RnIUAjnz3X30WYmCoohxUu8ybOg1ZJA/jdRClu9sBo9CAyJL8ufZ5TbHz5+ygDJ+2BxaY0hNX3rW/VI6rasAVaCaGZhxnbZWpu6umK35oYwKaahdQFM4W7R/GXeMEEMdGQ/4ebCxVYYUZ92wpxuIwxfHUc+WqVQw27WwjpUHcn3iQmpZtqcosa435QEamLrUeza+qXXqrdUPMzDrE4wZkAmYUZs2lFHLXykvpvS7N91TYDZV599QoevFBF4GZP1asrWl9PJoXUcARmeUKaCh0HotuI7hy4M0lLzV/DL0pd5aCGPgyAjYEhBzFTPuvyWlXa8rqb92z4DZkz/EOWaaRavgpfHlGLdrupQ/9exzdohdPgDprkkGs+uuuw57Zlhwockx4SgABtzD1rRawMo3AsH9OJcMoY4CX655yDjKlzpHes6LHvQJgKl7o877OWaSV1boh0HMgzaEJWpfwhqLOuULoI0Wcz5Zex4+TNrADWPHzfgjQSWDUlb7qU5DMWv1aAyKGQxAajt96diRq/K0nD825YBWCGx8rR/KuOqHMooRiLVl3XKyYqoZFLPY2XtGUtLHzHooUwpmmmPmwJlsypn3RSZimSE2wnb5JZ2R2Pwj6wHSMYRJHzlnU+bKCNhC7liBGha9uUn+GZwd22YKgdneO9orqL70J3FcxKzGGsp3hxhXM2EOPRSgIULAfVFb5UMFoIpoAnAi0KLXZw6tpBwwwR7aKyCOc81SkAYuvzc+641giJQ5AzHPsj4nBj0GVO9ctyyiGs/xX5bglEY1l44BWPPbsoRryi8tnfu8B6Y0nQTE0B5aETgLlDMpCGWM+QV1wC/+ucxwZlRHxn3iyOgGAQYQJge3KZhB+luVdvRP3dugyIDNnHz3Iv4rOwZS4s8CcCsujMkODcx2HSMoI8UsDwBipJJRSZhDf9nakuz7OzfcE2D2xDr+KxW8XrAOXH0DLqtbv41HuWY9wJaYfkjtGoI4BapYHNIYqmUEYm4t7a2DGfdRK3gVag9HfdSJ+glr3lFS78dS2v3Zkw9mT/10QRjjCf0AzD7xpPN2GJjdMclgdu2117ZqGIQxen1XxWI4wu8RfVXDtI/7B/cVYNw8lFEPdvbCHGVtaOSBz5K8L1XEwj4aXk6ZhCsyoBUvzFHzytAHVGH50DqknHW4RizyU1vLxh+YM4UMh0yP+jaWWk05Zm0ufeHYkSvZvKOgZkgDr2wAZrnVzrfPUMyO9ohZGNKK9YuAGQrN4cDpBT7bVFmmiA01XhkyKWZF4cxBGgI0IlQCMwllHNDDYnzguZ+R8wns8hfzOssc11dymH+UtC9lU8vw0kMGH2LyMRVAGq4BmAHI/Ace+G0JZSwS35QBZrffzpqP4x4IECB2wohBU/E1FlpnOVikktH9cR+BLFLgsF6cE0sumNcwPdsTlmcNtgOQ0J79IEZdz1hklawjaCl4puybW+oa/UR8kvR4rxpZib4Co/4GFGjpAWl14C5Z0BDys8Z5L3y4QZiFM86UVq+PzQxru6tl2Nr+F0Y6pqHbe3ww038NGI/cGzGvfhmLCT8Nxs5DGKNAGYGWA11B31fMBgGgYY1XaD6bmSHqciSlKQtl5Kf3PSSJpzPG0HcgDYBmfJN6xwzGuBCUaUkOtGWhzExg9lvXnWwwe3Yde3OFr31QxKCQKZCJUtZqqGpmn+/mmrkKGkoMaJFalhnAFNI8tUzyyrQdFwUxtHkcgOWCmTOHkMchraljR0rqv6yC2cdOLpg97csGZqKAue1aEvoS6pgtx+xjjzx/hx0wffskuzIeOHBgLDAT447C8IIx/IRniWHOATMeU2XNvZ8DXLxWAUg+h5/fhShap9Coqhjur4Cl9wjaAmoEfgxm6AvAeXllMP6AYNbaBZ3Wr4X7DcIAa7DIxzlnrT0CMeSfNYUMYFb7DcoQyrgOZmsLV2ieWCLQyqJ+CZj5+Wey5mg2V0YwCbUJzkh4EiNDzjGr7XlrC8dI20IZyz6Yf9hmal1CewxJnqO547sYzKKQRi1CnplYpo4dzuTKmO4OZpR5MutZ3ztgxoqavHuiLXb5OMds4KpjGMsbxjpBOUMmTUl7b701dgcu8Rlf/tlXtCC6tf8ZwT089S12NfY/VYe0rfM6p32iJJmkCMf4wG5Wprb+o+eobeWCpA+ag/s4w+6aC17ymAZfeKun0hGgtfbx2jZQw//ofVXfBzOwizBNKCwFqhkUszk7tpAcGQM/w+mxgwBlkwAzhTAt8fcxEhmI6MEGZQCzvasWiFlsByPIcnaQ8SdTrc/WZ8CYFdwHOWb9NQpfPEqGHwMBMoO24uScJWqrO+NvXH0ywey5dexNFaxmGcJaG7AlJQpndOzz0VYFzcs1S7YmCagJjEFNo7FIKUNba9+VsVPzDwpXdHLKZByAVdyQxRDQMAe1sB1I/YqUdn/k5IHZM64xMJNwkOTBV95cMfvoAy7cYWB26ySD2f79+10w4z5UqiivLLi+qNok99T1stY9dDrpfTzFLVLPnBBFtF3IipQ07Rs06TUhmHEfUIVnCGAMih3UsDYRGX/wuWbFSgf44jHAGMYQzmhqGhQzrCuWZ4Ywx/T5tYXLRvxBYYmqgHnfMheEO+o892H+IeISA9ggNAnzHc7mrI5/2MRZjT9mvCBAPbiNCdUx/1A4EyMQzA08X22bgwTYwKwTMBvBUyFXRntqAzC4MRKEBaXYnyMzmJnaNSCDDyho+samfTUHwV/pSO0vjAJNpm+5ZXyc4qBHvSI+zzi+ebAmzrPGtD7X+B8T/2z/jfQiPDWz3Yk8i8+k4QHiY7OrP+CT9YUvfzy9wRctTS1r86aYDQnQHBALwUzZJRaa0FbHRrXNnzfFv0s9U/TV+GNGDpSO4cwFMzifDOUcM3I1kc1RHyxDwhSJUj3xzNhdaxyN7T45oCs5Kpn2i7crKGZr5Lw4sFrCFxMraAOEMQqUYZ2g869febLA7Dmpn99UgcqUMgGz0PRjY0ArAmcAMt/sA3OxWnYSQxlt7VbCGFtJG6plJQYxjEVghvkjBXB2csDs5pJ69YYlR9/cSVxC8e/WHvfDF120w84xu2WSwWx2djYGs83DGsFpIaQJRAlwhSGRCkce7GFNUviSfjdmjpnObQnMyFGR+nGOGX0G9zWsEf2CMVXLeI4t8QXOMD4kOCsGXTAJaUrY0OAs1YLDpaGSjfpNIQOoMZh9dm3xK5pXliM1jMGMlTVaU2h85HLWOIThrLQ6KpKLZorbspkYzlnb/2+bE8oIKMt0VpmXp1G82E3+BnoXfX2ea/GgDBvM8jYneWgsAR7ZWDE7g0IZ6w4ExBjSirxjClfbOlcxszoHiSjYOPez9Yu9eua2IYQy3nQzGUbAxCNToEZJhfObE+Ug0ct9QbN44AYEGVVk9mGzpZBig5VsGIKba5BkEbBRA5I65xzRReYbrYXPUBMP+3xlDzMKkX2VUvisMLKWF+MMiYZhQQ4707MHYEwiwpbDUGwcgrshT4xEOTVuwe9KQktHI4U0SlW8ixMamdf3f9GrnoT/zkgoI8CsIzCDclbL1FDf/NFmagCY+eJSHPXnn9WsB02bM+Pa6O39XDX+sCIwBtCKLX38UEb/nzJqmafzmo11ED2ojvOtlAZmq5QDG2TwTnGOGUrmcT/adJrBLK8wlEEtEzjDww4ExmRefTR/9fLtB7M9Dcpa+GJTygBbUMkYzFAk10xgTMZIGWNA881A4pDGCNAiy3zA1viKGQrG1lrbzSlDW3PL8hi5ZcmFs6HbBpz1RnC2/WD2rEPr5h8pCFcM3WlFMfvQWZfsMDC7aZLBbGZm5kTArKA4YDbMOSc5a8xXyeL8M1W0XMUsMgEJVC+FPoUqzG2orPkw5ithfB2DldZQwRjM1PCDgC48t6z9tLYcLg34gjqmB0yntraNq11+KzZeAGZt7mvAbLj0JQaqTLbRnG+mahgrZqi9d4QCMONovwJOoXcFzjMjQYmPAYO72Vxk/sGhjDhdJ9NrQ5GcDacwbUI9azXAjDbDfWuXIMyxsFoGOIsPmNZXNiqAstZmWJuCQqbF1re5bLoAACt4WxNVjZW1FYRBisXBME3dcKMmPmniEnAktLAvThqSvwAAAv5w1vp30OejW4768qy63H0e33sQY4HdPD8hMRnGDVYzwW1ra45YuE/O5SNwDn/BzhAq3R/mgzjjrR4VAGivay597TMAY+wWAaVMQhs7A7LjpJ51rmKGGq6MnjLm8w3W+tb5Gs4IMBukvS1jLpV0emBO5Kj6sZsJ5gFm8rBcBMjMU2OXiUl98M8GTvTZ/rnvqu19DGZZAEwRUlQyN/UP1yuY9ehh8TB5ICCGgg0qkKHIYdO//NXtBrPn1PKmClD7GMJEMfNdGd0Qx5xUWSs9CmWUcEZxZIxDGRXMMGf1pvll/qHSYSgj6vEt8juFMs0tc00/HBCzvipn6UgH5WxbwezZyyMwa0VtndDx48DFixhg9oGZS3cYmN04yWA2PT2dCKrcs8bGMOYIlS6nHeaOBW6LPMZzCmNs7pECs4/x4SuYs99fxhwfAE1r1RIf4An4Atwm9L0DpgFcuM5RzBjAWpWCUMbUmtaGfT6bgcAiH/NwaBzNAcwsH43BLH1muPxFgi7wiICW1ApnOm51ZjDLBGSblAELSyg2hnCgpTD0ikMZZ624eRtSOHzRSUwZ7hZ+yZqEYlBWOKQxcgcgMMuqU4zOMTuQCl584qdXEUCs9KcM2GasbmCm0JXTgCz0sbHVANgklNEUszwCsxv4ZZ2hByTSunR4Mqlk5Cic6YW9gDzUwAK/Ok2pyraq0ETXuu2zu1RKbzRcendfk7s29u8HX/8be2cBHEfSZeub1T1q2/N+eszMtMzMzMzMzMzMzBC8vDs/0w7Pz8zLzEwej1pWdz5nO4/8vbO3lLLGEat4ehVRkdjVVa2xpj+de88NKEMVEppnX7GSctFsKWAPKmC4vgoo8yF0BcBe7/C1KHJN1369jxWR1sV4q1Tm+Pnx9q14tytoEVYWoANfAKgK3tsNT6rlupfA6wGcrfNv3utNmZwkGGvjBmJUzgzO2gn1jP9YHMwcxgb+GWpHBfNpALLe/U76R6pSuNPDK6oTqj35v/js99XCIMz6gLBFV8cEZAtnIJ1gGYHZIz23rPVD4w5gtc+LpzF/cTb1D2BWrlIpU78/jPpYixTOrA/K/JpX3EowuwZl0zUoK4+4AV+9zUMZbQ/OyfeWG+20kBGImX8YpHmB6TaHdlxsOlPOamadnxeV1jzCEzcdzKSYqe+ARhMQgphawhdhrAouHc4EZklbo/zldqecLZ91y8Bs82aHdaJidvJYdQO1umPTxb3Lf3vO6pj95ll2ZXzFK14xBLMMiEaQls7ba1ozUszmcspsLX9/KzBt+8Yq2Ty0peGLmUtjO/x1BC5uJNBxvpuuCKwEc1o+NpSxK2WEMe2V8+LR2owzo1Syttagy8GMxaabbX6DtHjB9spL+H/BQqMPT5iHqlZpqc+wRu4zxWwf0JXqMokz4z69MgBmDx7/O66/+T80MJvLL3PFLA2qMcUs9GBQzKqrZyYL0mpS/v+12+X/7SyehYOZf0Xz/DLn5w5kUsq0dhyY4Wb7XL/x3q9dYasexMVqTe39duU9yBK3ppwxL8eBS0z568aT1LoGr3YXyZt4gME1bczJMvgQB7dsKhfZ8ZQ/g3lpU+0pjvkX/tv3ewt9o4dCFhp3EAtBmfLO+ri1VxHemPzBaW8ezLzvezC2v8Gg0l///XUQj9kp+g3KgmDWoWy7ay9iLgcxPID1XTGztkOYHOiXXTHLIgU9ZavgoaiYXTIbfNf45uHLWLtgb3OZLwCz3bmW8UcOY5rXmoMZxwKzr3rZrQKzN4hFeXosFn+PQAVAA3D1/qyCZmeiotXJQhlhkY/5QShjoH+rQxnZz86t96mSaV5q2NjkA+ONjz3HDC0A7a9rTG/dkOOWgNmD18BsUab+FyZzpirzv/D9qB3Mbr9v+e/OmV3+b5xlMHvZy15GMBvCV742r3g1oEA4owDFXRrV97pmBCBeyyEqdWT0PQNzD19jH+udobDG/W7+gTHfy8MVCXisVSZI27R+ppKxkLQYru3vsBUEtNbSoVHujACzXQvDj937dqWMJiACtgZnstRvBiCba+No88/fXnkxFS4ZgQRBy1udVMhWuVlI3csVs31yDFgGYAaTEHz1F5iV0bfZ5sr4D1hc2oCM7Yw8WP2LDsDMc8zUXxcnTlCpF2kDy2z+drKcwOyRPTcMNczsi47m5pUzh7Up1imM+Tc47/tYilnpf0KvPcfs4q/9WviRlyrzYzyfr1ui1Cmu6xPs38pj3p3w1r/LyZd8mYOZF/wdGJ38+w96W4UxWigjLPTb3KoKzlw562B20NpUMTvI/gVgzLmxy/xk1vllJ5AftCDldnYoCypmALPtrn+hjQFrM3jDeVPMaP5RukJ2W28X++ZATzgj91id5h2Y7Xs8gvqmkhW/Q85D9PQ9ATALEqOUsta6SoY9xGQ9SMVD6PyCF5eHr5SVi7Eo98Vieh1TyFIIy0MZx+YfXuNsW2D+YTDmDo122nzcslBGs8rH2E9BmPe3VNQsbPFEgJaCGefmAS2eVWP5FjUWB/Ewj/Jnb7rZKWbFf+dVdQYXKIpZuw5m/+D+5X84Z2D2a2cZzF760pcKzBJ1KwWxWcMPwpMBmvddEXOVai7ska/1NYclh69AKGM4mHnf5ghSKbT5Ps0bgG0Ci7qfDmPq6xox48goePMaZqljo9YFX4I4KWB9vs0JtrSv9v5uvfVZx0z9rpC117X5Nm798rz60AvSP1+uMBaoUVXTmHsAaBVjsso+xSViAM3D1AfDKN/scnS7/HoCV8by95tNvilmt6cm8nnsJmM1CWZ4kHVrHdaqhztmf0o3MAs/YhGqEeQomQczGXxhjcpZIMdMChhVsTzmyTROGydg9iu/khZHLl4gWhOlzx1toimEChQjrNHQZmrvSuojpPX5tqfSkOLobQtyvNzQQn2EYQIoZOrRX6Xno0W83lPX99QrmX7oJSDQjnC16HkR5uk29Gwt/NNgUMWto6Bum0IwNbfbh89Ha2YY5gDHbLNabtxn0YeJe9XN92sg7LHP4Bql7/0PH/KOhDLFwlFBM/WsA1o7V9veP+xQdrX1+7wUM4KZt/w9Rh1Zbel6MvqNX9A2MPvrHZg9Ksq1s1vlA8pMKQOQbXb9C0f92vsJnOWhjOumkDWYakoXVLL1DTArfS6SfumusmKf2kIZ1zT+8D93AcwwxxyzFX+Hcb72+aJQxgNIeGuEL2JceKN0XxS4Yd69Mz/vYYPZI2NZfjYWi7d2hYwtwWwcyjhXgLo4vA3cGfNC0x7KmPcDZ5m3yh/ml1lOWZ5bxjkrJj2hTQpIDxSyIZhhTw/3fEqN6X2RNXGqo/zum9xQzCpXOChcyAtJbtsHUbfxLx9Y/sdbDGbLWwxmh7cYzH71LIPZi1/84gzMTgVp6B/ryMg5h61kPguF9Puay0M7Tgnj2lzfwW0wZ2CWW+KHjb122Vytsg2AzEMZOXbr/JqBGRS0I+Dq6tim1zOTEiZXxqaUte0EM8GYDEHUL8+pDz0P/2fEaXMOY2KWHOI09lDGE3/t9/NBcMxftvHwL+8XPcdshDYgSoKbTnNlXLeb9QdjW3zOKtN22mx9FJjmsZRnWxbGaGjpYLbqDo4XLMfsouWY4eYFZh3W/KZtT+trDGfGEJj98i/fcjHF59nL5sdK0Kmc38fZAINaXacV4rLnG5cfGCtn3ueEz5OVT14fzT/M0x//6cPf1WAs0N8anNGp0dUzGYK00MaD3ZyHMu67GH5ke1MAYhPGUxDSCG0P7s5uxBrtPZrX6iOjdjA7yiuz0MWt9Tf9X7H6DdQEafhdBjDrXNJhrLkoLtY9jBEqWTupjol/iotQ8M2oV66D2aVqNvnFLfHxI8tArSQC6FyOmVSwCf1UJbM8s8K5pPr/Z7ywPKxfVFP59lhMn+YK2XwoI8FsbAbCecEZoa4SzqKc0j4/ZtvDoWo2r5htjgtfHOSXEbRy1ex0YDbfBl/7TTWmz42HcZRfuwZmJSZ6QbFMS2aCpNZKnF1XzP7DA8v/fM4Us18+i2DGfbNgduv7kYUbel+hgCmomVrm12Lr81lf1xwbfOTKmu5zUJ8sBFZc4zVgiZ+FMqZKmc2ntcuSWmaEt924n60fArV2fSpo7RSYyeyj9R3MuqV+eU7sP6fOhCjmypmPmXfG1wHMpiYiQVySZ0Ylwyj3zAxAEPXXxpdLD2XMCvbqqAIzuDLW+UR6wBceyBLlSi8wrZt1qlSspsaiUYJcZgByudcAOKzhD7E8+pt6NawsUsIGoYs5a9OVscSaOoApaP6glm9mpXZL/9pZ21fFX/zFKEHBKi1VrEWSDR0soPTIJCNyJa5SEUIdrzoomQxYSNOitOxQYqpfgcQnBY1jvBCW+/UYWKS9f1/yjTTjgJ6n6cwgpTV0ddRHxKcuXaWqQVvIyg88ez0UR9r521HQzd4DQqf6hMD/8lHvgb+ZMHTRwxgz9cxDGqWeXY1YrRu0UTGDGN7gawdhvT9JEevjtsf67YSWrP7lHs54NS51MDtyZIRqdgHq2S6MEX3B2qrD2RGkdVDDv/rDRcT+dQi7TSrZGlb4a4EZgIx9sg9SugJ5Zos165dl3pHs5206VwVxFspY9nkaMQLU0ALGMG9Bp5/0/NOD2RQfH8vFd8c0LSyEcdBmIOaghrGdBmnd/CMPaeRcZp/vLo2HEa1vQFZcIZurZTYbynjVAc3gzNSzm6pZtrH1TB0DeI3ArJ2H25g+PqL8yKnB7BVvfB3MEMzo8fh0/sVhU10x+5/PXP7Xc+bK+Itn1ZWxQ8AQzLR1BGClFClGae5XKSUIWHP291CefD0BqhzyEvOPQH++wLQ2IOzR+m72MZs7xr3WrwA1KmDc29YLgcsUtC0hTaC2uU5epc/v+lDIdAq23Axk21UzwZr6AjMPbWzzKZg9K/afBZBKwctPV89cISsUnhqYMYcsLPpPMOYCk0CNtcyinTL/GB2XlMNxPZyx8GsD+rrJCsQRjGGPzD/0AMgps0SUAgrVGPsdzlTcKA9l7OYfhbkbDmIcSxVDv7XF+tEVsX2YfKzNDGTdWs3plFrWH8KCTgFml171qvYuBgoJ6OBbeC0AEsVvVFjDw/GwEkyOanIBuCZ8+WeoZKec3Ryg0WquwYYeoXxtQXeCe90G1rSvH4I2gZJFrcj+HsBaAKAFf0DVNRTup0+E71Osohr2MZaUJv6AKBKgyXsaI8SSpIh7Kub8Qebm57RrGOrYf059B/gc16rxXz/+ffsffmCXv6KChnkBmbcOaCvlnF079zZx9QisFv2/+MUOutZ9Hn0AWqiPCn8lOr/EPsCsnYe7f8mPhB6OUEYEHauv+W2b6+cW43a91t/s+m1+FWWzOFLJbqNKJiCT+NROKWRXekveMUBrrVSzaS0oY12yUa4rlDP0VxXqWdV+gdkhbfBv3GzgZqmMed8fxH01P/a55ZRq2avFNL2EIYs7NWwMaEMQs3Wu2bxUNQeyOUA77gz2cyCzvhuA5IDm58giPy8m7acpZJz38fGKGUA0mf8fEeVVcYqjPP+NDmvDMv02K0Zms4et13IdzF7nmcv/dovBbHmLwewwbu3xC2cZzLpBxMYgizDG/nzumL3WwW0Qyuivd4WsCoJ023ZfgWLSQVgcKWG4BqGIUFdoid9hiPNU4Ahm3idMtjHBTKoX34NKmPaCyoaKWZp/Rot85JsF4Eyt+so105znnEUDtjaGGUh5Ruw/0yGMSlkyDwADoK2sFhrm1w5lLjjZ+IqPcV4+eSgjq4BlWIO+QMzzytgnmAHC/KHWRUTZ98xbTyL6z8Cs9FDGGo/2GmbARePpPu5gZoWl23ybQyhjBzAB15o5Z8Rnwps/DEkTgVqbuPjKV57K6eEUnh6Dd8kLU2N4cpMLynqcGqq3/gz+ovFH4wWhT28jMnhcu2Yq6fnrckVzbH2S/Vxtn8BU4P3fP/H9pZABxtDu8sU4JxVNYIZwxtW2g9nmhnK2dzUOjtSxRaxj8pDF1qIfCGVUP9CHaoZC05u4pPyyo/DFIJhBJQOkAcoutHXA2fV228HsMFYxNTBralmHsIUgrPUFYlDKJosGxFriOt8VswP8bupPcBqlzM8VrnWbMleQU4Ybsxs0IPP5LJC+PciHP6ecMoTxJbGYXi2WS4BZErI4ALIxmCHfDC2gDUYgiYW+5ZqdvtB03h85MRLOvKi0A5nWHcKScEX2B8YeiU0+ny9X0qQcPr9Ged3TWMyW+99wZ5ffwwM06+UdxzUda1fM3vRZy/9xzsDslWcZzJq1OcBsBFd1UJ8s0Odr2XLNoU3zx9rXzxSETvZZCKMpbOw7kLUuX+9wZ+tqZ/seyuhhkAxldIXMnRj7fGYA4nXMWpeqmCtmu60wAqEzI8FMsCZIk1OjwEz9IzC7P/YfEH+QTUJ9zGm+7vb3fm9LpqDt5sAxLjRVCErqV6/Z3DgH9YBaKGO91uY2fehfkvkHwMz/jksbSpcCNa8x6pgBuuy0B7Q5p80HO8T9df8/gP22XkbEo3qwExWzPPxnEIGK/l7UmOKAKtjRzVVCGtZGro2s1FTa18WXv5yRGlFBATkgZFlauXBTY5Q2RRjTHO9l7PHo7281vkx56+qa1RKzsd13wb3UjBEN5Mw5hXszKdL5be4zqRjohsZ+mNjr7s8FNd9494VROSjXBoGOA722P6CUx//xKR+C/8CrgRlkl53ZB8EsC2kEoMlCf+/wCMz2d4pZGJjFrr+mQkYQ85LtgDNGL7cQRBrNMyhZkFalezugAcR6HwqaQhxXUQ4XseiGH5MUs840E9hGypnGGZwFW4DZdNBDGYsBWTXFrCRpgXN/D7QaZ8ueY2Y3ZsDVT41rX/M5jb0i3Qc9q5wihPF7YrH4xBy8cvMP7mN/XNcsyzcriaJGMINNPvoGaCeCskOOHcZ8TBDzUMaBRX4HM0DX1FvULhu6MHKMdhTCmDwjctO+I6J8+k2D2dPfcNMVswy+PI9sDGZv9+zl/zpnoYwvP8tg1uzNHcyO63dLe4exNn8EHjPqmlviE+Lc/COOCzP0PDUHMYfIY1wZPfQw67thiM/p88ihbD6U0YtIp2CmOmN9uiQ5Zh7yKMhzs49ok+wLvNpEb6NDGUMaK8xBGM4Yvd9gTfOtbeNy/7S+L1bkEYOxlcYdvmytjQ3SDMzgcgabfIpLBmsKkEPqFjSZEvFX9Vo7r0y0fs8rewzVMrmV9PGKoYxmR0nFDDLg4VLA1WkTdLkOhDAWyITVoM3qAMznmHUwC4AZrPIRopiCGJ7Q2XovogdjAcBgn9/OyptWeCPnEl2gKlCr6QEvfVnUqGkc426KmVGVz14JciAPWPdZmB4uGKWa4UUhkGi68DrGPPU4KkTkZe2vyf/0WQhtUQ2eEJKYuxx61pjnzolmPYTT+Ir0g7BRAk9UFOI2RPVct9abgdFSDPtwT3RY3PVq7/NHFwVMaIYu+G/of3/GRwjE8MejDl+aU7HpVcV6G0dvUeNs1XPNlG9221EoY/9XMUEZmwRbBLMe1EtIczhr/arwxv4v5MJR9miJ271WGSGstw3UVn0NMNbmBGl9XHtYY2ymBmPt7DDW+zgnKmcOaLDXT0WnKwKzmT97VYQpArYuCOIofCKE0aMAlqUrZmUOxGA7iZvFHrQzRd3e54Fyk2rZO8eiFZF2RczHeevwNq5rZmuzlvolaiGU3UyuWczkmJWh8YeBGc5Z8w/PKcNanKhmWQ5iro45mOVrGh9ijL3qv31EeVrcxFEe9/o7xQzx31570hOa82RnFZh+t2cvX+1cmH/Akf4sg9n+/v5NgVkS2ugAxnmfY18Qkip0VMUIdoQjvm6mrlgOeDmYKUSS/d0CFTTmqnW+ZI0x7XNFTBC1xSKvvyXkaV9XtrRGlay6WgaVjCGO0SFKy66ehcxAtM9Vs76+g7B2ES82rTyz1qdidl9Z30uly0+ClocpEtr8Ndq7bXWBJhl9uHqGCEBP0xLT0MgQkX+X55SByhyzx8x5Gg4cTVZS0iAJXhSYSd7DzdcOY5mCRkCDDOjRf7kro4OZGWT7XXPMr3U8S6yomPEklHGMr6YW4gho6z8dhTK+5CVx5o5xxOD/P8ZWln+nn+2rffZHJ+GLyZjAtmKOGfqr6mGNHcwiB7M+BzDDvMZVe5JMprIbC8xKt8mPfirYuFrGaJ9Hu9I8IA1gpjmCGcIYC8Zklgn9OfYpZqM7rfvdC7rUF5TNBV5Um09PKmY7MLMbXHMub/13litois989/tvBswuxFR+NRaLf3FyMMv3nTCUkesDQCu7dlNyExB3ZczPuJWhjEPFzAHtJHlltwDMkHNWfc+cgvbbNUozRVzHCY/yE6/fc8wKKvqDyuxwR0aEX1wHs/d/zvLVz5ld/kvOsivjAw88cFIwqwMYi9Za39fdSl9jLeZ2+bkr4+z1Mzt8vh8Ba+Z1rooRjgRQuT0+9pkdvoBfY64RJrXWgIewpn47gtfX+lwoI9cEaXRhBIARzNineiYwI6Q1INu9XmB2d1nfncOYjU0Nq71fWp/7rC+7fIev1vdi07N1ztoJMGOOWf7NUIpZkqE19DBEEp3Dm+zy17hpD2tcc1ypqkEKtAfKzT/kythLz+Z37yLninXLen8VBaAGV0b8VAqostoYmqbhdH8gmIJXgdmLXjT4Adk43zsyxEdnkAuWX+GWEtz8247DJl14U02vYH2z/D2GyWO44LiMwDg3zz9Dfzy99pQId3xI5Wt8/sc5kDmMCdJ6H+eK+WYENJiB7G3jKpwYCWRrAhvmqZJJf1b/IQtv1NnADL+b3F+VMKZW8+h3d0bsaX21ZTPB2KNBVIcxU8mQsqVxLjo511zZhUYKxvAEZuSRwVcHtxWNPgB3K5iCdMUMahiUscCDVNBlHAdqei0e5J3uPTmYlfLFsZi+6v+Gq2Vru/p1WjDzcMWTm4E4oNVpLtfMAS2snlkOZ7ldPqHMrfK9flkMgUz763xOmYGXja3dzoGZKWNbzmM8o5p9Xo3yjXHCo/zI61mOGcPS1Zp9vo9VYLqh2Uc9d/ma5wzMXnSWwey+++4DmOUw1t0WCWPpXr/GXC4Z3BuDjo1trq0RgAY5Zu6wyDaOKRodPmfKWQZmOPK6ZVzzPvdxrre8Jg0/Shuaaqaj3BDVNnJh1CW1cOTKiHnmmLW+55jtYFVzAjKBWG8rIK31BWmtbfPlrrK+E4qZwhUNzLC2l+eRlZVUtAzMxCVgGbYJ5zyE/hU6NEbPMZutwaQ5KWYN0BxrHMb8BG0WPODhbf1BKuIuCx/AQx0pFVJkQtKcQhktHA6hjJZcnytloxN7qZgpCCt05kBm647M0gcu7+qZlTiMCy94wZBbOF/PorxFpvl/RNrzy57+gzj9dcmON3u11/qiT04UswCMca0C2Hooo6tlK40FZpWKmf6FUCkjmFE3Vqs5rrnq32EKYdZUygzEOCcY4xoNQaimhcBsB1umlq3JOD5nzNP7mev8dJDaKeGuBynLBmqtXRXtlWKmr3tGlWEUWdfzYBb2cFadLt727pOC2X+NaXplLBbTMWDWW44dtvI5B7XcTt8hrmCcG4G4UsZ5t83foH/UOpTNOjPO55ZtWK/MoEx9FpL24tEaz9Ypm2/nc8w4b2OecGw8vNZvxoi/Gic4yve+3qZGTA/7l7RElk987vK1zxmYveAsg9m99947ALP5MEWCVJIDVgVhbv4h8Oprcw6Qbgwilsugrx0jMON6IciJkbg2AjN732PBDNfmER2+CG6aFygKqnSvRdCmzwLhiwS6gEKWFZ+O1sKdkQWmt2qlrHX4akYx7doab1trYKZ8s7hrcfVO+3afhiRWAJfGrpa5olZMMUtVMz/nLCYQ+fdXJ3JlvF2BgL2Prw31YidJAzOjU2hQCmU0xcwfwoCM8yRPB7M8lNHAbPClB0oZAexiEsaYKWahPDOAWkVoIxQ07U8NQGQGfhG/v2mTzkgNgrUfzEsjrnKAzZaHpm22GWO+rNhudezusZBfHRPYadfXAjbV3in+geTONighELimBmqO+YBl31+4S/eQHumz1oI5flJVPZRywwvsx4s+7pfbcbz2l34qvtEjIWkP9cwAZwA06weUsopQxtpyzJBLVlQ4AqDGdQYAl2PBjHDWQg6lhXv1r5rDmc3pXHHuCMyomBWCGcZsC0HMmYdQxlM5ZgX5ZK6KKcesuMKfiJ3FAM1yzPJwxQTSgvMOad7vIY1vfmc5kd1HKT8Zy8V7uwpGACOoEbL8nDf78NcUgloHwGUCZNxb2hiQNTmIYXyKQtOD/DL2DcTc7AP2+MXUskC/tR2ODMwq4craahB2OAdkbpdveyy88cdrlA/uw2OP8s2vSzBjgq8nBI/+x1ij1m189vOWr3sOzD8ISM87y2B29913D8Gst97nXl1j1vzD87gcxjx0cRyuaBCHEEfr81nCHRcdsjyXzJSxyNQymn+gr3FmEiK3RAc9Wt/TWt8VM3dkrJlihr2EsupjU9Bo/iG4o3LG8Q7EBGbqNzD7+enq0+3/lAAyzSN0cYU+9vL17Ne9LMdMrTGMuzVqXgYgrZZZNzG8PA9lyDF7dETpOWY1U8pIkZjnHBW07dIgzFUygzaXA0Wo/i2NYIYHajbRj5Q1APPLnJ+1jo8e9vgYFyhm13UBqmYVXzNzbHa0djhratnl6wWmn/uc9hw3anBFIZQQd4xSer84nDi03YAUd0EsxQnFYYAQ4QBg+w20HMqwT0u4piDKn4H3TcCqqAcW8JdM6owVYFwf92aWxwhhRdfKaHIGEFlxrYAI9TJWReOPcR6muwEKt+gq+FmRPl/3Kz7zeozcqhLOAFwANaylcCYo24NbIxSzNf916GRxCfQ1n2VmsiS7SrFvY+9G9qiVi6/AF0KaUIUwFqaWEdrCwKydkwFYsX6wHUUCPgQwy/LDBFc09lCfObHG2QIzvXZZ4coYa7UOZxhzjvP+uwshkW/49JOA2fvGYvrJFLCWHDuYjUEtV8pG9vnjwtPbMsGFcdcmgMbz9KGMg9yyJMdsy/FN55XNuzDOW+L7nsOTg5kraO8eEY8bgtlXvu5hLapjdtoD9h9f+rzF658zMHvOWQazO++88+SK2Xx44qyyZmvavvG9nmNma6lCpm1Y23LMQ+tQrwhptMmvDm7YW2T24esy/yCE9rGULQttxGP3+wDoMa8sGijpebRG8MtAzV0aeSLHTIB4ZIcPt8bgPCGtz8mFUWAmda3142nT1acmQIW/RGNMaOPY1nMwywQmznmatrjHOEaK2ZyoYGA2b5W/8j4fDHaToNRNBmYCMihiazo1qu/RM318uQtNV8OPHZg9ooPZJUPK3Grawazwx+mhjAZj61whQ0u0zsEMZuDPfnaipeAw+ch3jNUg3xjjwy/q0+zllObLHPoom83VuFM8h2lyNg1EwvQIPuP0H6HvAJQnGzUFeuOia3eE4Tf42s+D4lVhNcrcMhh/7DmYsW0wFsw564qZ/4tAXpmHMqpva6mmjHpmm66YOZjR9MO18Aow0xzWBG8GZhaueCAVzGDM+qGxM4/9TWZxoDscmnkYmOFHWNSHaoZ9CGUETQKsqgPa2oDM9yZh2q/71BLHH7dFKc+PxeLVcjBzxczWx0DG1mqXLaGIEdIIYlDPdvcBIxALZTxMQxqDIY29n4UyFoOwyPPLPMcsDWGcN/wQWHHODT54jxXjDNDYz8cGbmM4e0GN8vojE8Ly+a9jYFawOgrsL9xTd2D29c9fvsE5q2P27LPsyvjnf/7nKZi1w10Ys3XPHxsBnZuEzNUxc7dGKmY+JvD4PbqidZxdPvc43PE+OYmxm4KMzEBCz0vY4phFpAmv/Si9L6gL5JLR5EPXoTtjQDnTHqlh7XR1jHPtKC2sEflm0cYEs6dOV5+SfKunt3pwnflkCGuEsob5DmZXi4MY+MUhbRAwd7l7ZTwYo+N2BgICztxikn2XCy3hbrtgCCOBy1ubc+v8PjbFLAUzPEGGlVDGBF2AsYK/o7tdPkIZpZhpjK+YnCu9Ty2gap4Vs1uO2bOe2fOd3TTC+gjh2zrkxLR7/eSvC6+nBXWJFu5Mi2p9qmawq6/uJKIe3waT/kxbRKccZy5S0KlHpQNkf88d1Qzzc18M5n6Rc9x8gzMF9wXVEXMOTse++cCURaO8whxfVUr1emZpitsbfMMX6neRwMuBzAxA1HJ+Czgz9ey2bVylBynBLLXKUV/ztdvqexVAnghltMwsjU33NhgzSCOcCcx6KKMrYhMYJWMcrlX1uc4TitmFSjt8AhcjT9EvVt0gkFtGQKMro4iyneE3neXC8qatHwZor/6UMlbLFj8J9asDExUxtvMKmlorSo21QTunplloo85aBF8OaAxpjN6eOpRRY0CbmX6kFvlbQZIVklYbs7XK5kGMLQHu5IBmQKbXm3HIWDUrn3oNzCKmo7oqpZxeL4u6je98wfKNzhmYPfMsg9mf/umfHgtm7rLoEJbszcBMLd9LALZxtczDFd35MVPlOJcoc3OhjKM6ZYQxX49snwNWUlA6hboEzNTXmGBG5Yv7aCji6hnhS2PLRet7O3C1QzXLeivlTLCmc9v2E8yePF19EpUxyCqJStb7mLfXYB8UM0b65fySOzY6mFExyw3vXDFzq3xCl06oY+oLe4xANwuDMUKahzJWz0Xr8l8fE8wuz4PZIx0reVIZgyMjc8nUX7EvMJuBsjL/U5rPBtSpHLPmIpsQWSle+4vUMl+6bL4m9GwFajCbf8EvrLGGtyb2saI0maTwxmC2VXGv/n69k2Oqcw/ughfkKwiX7DiKhUC1j4KohxpoBNvWrcn9EK78WTxSU6BFPtM9IXcQKiQhlC9yx8o3/uYv9RyzPq5q2dc+U9S2gDKAmsAMRaRTexwoZvm6m4JUgRvAbM9t8kWbFqaIP8FgTq3vZe7ZTjFzGFtTGfM5tg5jNAWB+cdVKPn6iAFoHkTBH5XWfJ9eu1ctxywSgsxuOjhvex3Mam//+5NLzB+LmOIFsVi8eh7CODhzYBNcWTtW0gbGIAmgEchOXmj6VKGMNP4Y1C/T2IHMTT+2nlfmQMbW88dG5h7cM1bKfL35UhyrmpWPeu0dmN1I6K3H2fl6zpkFEmy38SMvXL7JeTD/wPHAWQazP/7jPzYwG9Yiy8CM87N5aoCsDcYEPlezaB6iNK80/NEhzZ9jBF4KV+S432dp8wIxwCTnd2OrY1Y1BpSlBaYJe67ieVijhzIakHGdYLZB3+uYDcFMAMeQRappsNI/yjF70uLwCYSstN2z8EUAWrrfFLSDTECqCaRx3r/2d4VNZb8up18ITTErj4yoVMwca1wlM0LVQxa3yy8OY5ivgLHq+WU4CWZjxczCGAdw5k9RezsEM4OzMZgRqamYXbz//qjVVRhxRuvwyzgKT3eIqLu9WMfBwsa24AWcb6hP1UACElqCiQ5rmUJkmAKIYnK3i0d+FcCiXi8oJOTxfgpmq1FrgRqHAyBmBasrQkntZX2MItl6Lqp5vDd/JolfjpUG2XYRd/gHK8abfvtX4vdMZZ9jghfBzJWyvibzj0rzD/5r8FBGBQJjHlCGvitnV6CYFdjkW9VBjNWurFVfMKe+XBn3omwWEQKzgw5SAi7nmrUraBn7kHm6Xf6hG3q4SmZh1sXADOOV5aKtTDHjzaIvtQxrbXxAhcxDGXsfgPYfnzAPZiXeJxaLn7p5KJt8n6/Njx3Y8lBGhDseV+OseNHpzPxjEMpYTp5f5uGMcGV0xczDFXnmtcnYR+vqF+dPHsLoOWa4VqVxCM/3iIjHxsxRPuAamNWY7C9j/juQE3kkoxSzn3jh8s3OGZjdd5bB7I/+6I/Ccr5yMBsYg+iQ02L2uhmYIrPlxiCJAoeD83wWTW26A2Rpa60PVU5rhKOC+6AyVglLeR7afOiiAM7BDONNH5e21vcSyNq5AYy1aQ95lIJGJaxtZJiiA52bf7AVhFE9c7WMtvnR9jQwe+Li8PGueIVEI7IJ+9jnJODAhlBGYxlX0XyPu8y7YjY6LrmnoWdB4CHoZMI+H9DMP9a8+YL+vDRIOCPLDMGMUAZFTOGL/Dv6ytb2oJxpTzuLzD+EzdACKm6ekFYtxLFoz1HFpitHYLa6957jPf6gPrkhyK4VqBAyAAZcDrXqkI8MH3IWoKeG2uOoI3/ffI1dPGfqlNhnC54xdUDkPfKmw65sz95DJ/scPlZ3pezj4rlxqWGHWnuPwM/RPwN/cZ7vlpHfm33X1yBs0Yph7RHCOOcq2havp/lH7MDsUL97zABErZl9GLBxjYG+NdaJYsb8MurcbvZBpSwwJqwRzKCYCbTQd5WM84Cvno/G/Z5mKrt8gdWl1kLxytKX59byv/MRzGQPeZApYgZgAjOdeo0/XGuvRPzbx5fIj2WU8oKeW9YhCSGMuzHmND8EuLFBSNIKziz8sSQKmp/uzKjxfCgj+zmUxah+WVvvAIZaZejXbo2fGH3kBh8DpWzrtcocsE5u7oFn5LzmCnLN4vXmHBrLu7zWdcXMf7NxVGfceDWkK+MTXrh8i3MGZvecZTD7gz/4gxTMBFCcP5VK5q/HdQVOx5l/CJy6enY0b6YbXqS66lDfzT2wh+pXFWA5ZPEz6eOhXf5c6KIdLp8V5orpeVSPTNdg3phfA8pXWMFpwhghTaYfBDBZ5hPqdntRYLqth8BMr2tg9vjF4WOz2mNlLwtRxNiAjPNFfQOzOXZhabD9yjnnmJsFs0czjNHrk+Fh0ZJEnTS3t+EPspD3PFZz7WGOlAExL8VszvwDZv9JGWxrK/oIWxSQ4WtfDmZrgNlDNravp32uEJ11Cszuvsu0HaML/0IOoIFahgUd7nQojjA/CYWFEIMcktzF0W8k1OeL2erqgg+pSQQ2wBLBTMu8Rwe7yN6HVvd4D5EqUxkYHuiW/7X2H4e9f0p/fhDkeKP8CLULn0vJ3CF1s3SrhBuloexbfO/XmzIvVQxjqGOmngHGEMKo/oWumFku2QEUsyy8cY0x141hZP6xA7Zthy4vdCEwcxCr1uYhjXsaI8cM8NVZxeEsHMy0p+/HQ5m5IUIZ3WWxmKAZMNP0NeabaQ+ul4OZw5iT5YFJfBi74tbs8v/FY+fA7P1isfiJWHoeGYFrZAbiMDZ0arR5W59yMHNXRoe0OrlSxnFgPoEzjRO1bM4m33PMrlpLAPNz1nkxzyGzVufpwczXDUw9Z+09I+KOFMze8hqY1aIcMw9F0NhhKZurUeo27nnR8q3OWR2zu86yK+PjH//4mwYzG8dQTUvCGDW0fQ5YBl/z10df8yN1jXORF4rO93F+BGIAPY59jWAWiVW+j+nE6Bb70UGKr3GFzEMZtx3IArXLUkOQdmiNNc8U5tjG19p47PLw52LvmD9b7sG0cM/hjPvU7/vQPygOZANQY9+Us2aZ/zc9pHFs/vEI5pjxawMeCvIgSdOlw7Zvu8TN8qF4gigN0tJcs3EoozsyzqcCzs9bv3Ywoyp2EJXqmOZP/FPiw2xi9fM/HwUuhgZQc6BlmhIBYL7umMEfwvKQFVUYFilQICSVQCNIwXvCph4PorkSZB5cwNU/Xac1ukkQGFMROMbb21g32MYIT+z3VolepX9mTP4qN8CuFFjVF8IrgRWfj/LMUgUNP29+HlWvwbX8eWvPjdMajFLe6ge+WUlJPQSxOqihJaBVW99yrlvlt2u2L40lU8nQ11o1ILOwxkRVu9L729jrKtklAlYUV8janJt+AMQq1DWCnBSz4uoY4ezA58ksjBrkvOeY0YhIkAVD32KM3OYLHBoJYcVCsKsrZgQvu8HhWm+z/fXa+Y/vyMGsxP2xWLwJgYuAxnnODez0R+GPqFWGcQptWfFpAJupZ7XIlXHqihJyzQaFpk+UX4a+qWOwyHfDj4J6ZJyLIZhxjuN5+ErVtBQ+ff1w/pp3RsTbRHKU12lgRlfGU1f/vw5mz3/R8m3OgfkHAennzzKYPfaxjyWYGXDluWbqZ685gV3+1pWzE9rl++vnVLEUnDI1zccDMJsLa/R9vMgGfcFl6X2uEcx4P4Ss3WsBVSq6revpCEEiQE1QlYIZxwIzg7DMuZFg1tqWW6Zx3LE4/Bn/5k7li2uVoMaTPANIK41lumLGKJiD3lqQSf7V38GMOWZDMJu3zoBC5pW0e0ta7fs2S8AWbp6QBgHKZUGN6c5IMHNFYrkDsxq3RwFS0tSDOFl1l6aO5aw9AczU4uYt/8yVs/yraG11zK6dtYHZ0552w0wCIXKW6KxepD3t2ZojYmHIYzCEzyBuN3IwYM0vOARObQ1gxnsUsW1vgFmZOggihNDyB3T10u67uG5n1Ff7XgFQX7dDT82raC8lQKuLViNg7DFF4Bp4z9qfT+/VH7mNXcVivgSVN9IpcwPVnfpnrLDNfjMAM32+9mn1ubf50e8AUPWTNcu45nC2Z4pZkmfW5g8dugRkqWrW9k0K7uW69ijYF8WmpZjlmaNtrThs9fHudQQ3nFWv1y9ggtmB5Yv1sStmEpaYh1ZNiOrXgWJmcBbuvmjzrooFlLRiP0qZf9RD0CJu3CGMN6p1EqfWWD27gdljfi774vzfY9qFMV68AVjLY4DLoU3Kll43BDKceO0AzGAGwnGSa0b7/GlYaJoQdJhCitqKNjtdMauxzXPLMhBTH+M0h2w8tjMHtvl1f3acV2qU14iIXw47yn99zcMaTTHLa4akc5xmvHkDs1940fLtzhmYPe0sg9kdd9xxU2A2yENzIPP9GqfOiQ5pBnvVrfIzJc9DIHlkYY9YczXL7faHillyuJomcFI/BUHBj57dapRtLYctCFWCJ+uHwiP7SeATeFEx0801yOLrKh0aextwatyttfZnF4c/LbCieHRk+JGoaVVzhDIPaVQLMCMCuLi0b8DGuYdMk/nrE4cyPhKKGa3xJf8JxARmePCMVjeLJv8BwPoDaG6dnolhiB6mK2cOZhbKeAkFphuQudmHQhbV1x7OEdr2eoHp/8PeW0C5ciTruhFV0h57+zIzMzMzDjMzMzN7mD3owTse8DCeAR+PD148zMzMjONt75Yq35OVsfqbf4WyqjRafnq3j9aqXZmRmaVK9e7u+vqP/LNwVYw+zEjaosljaWE7Ek3drt+mMl533X4bjclLrzH/clP39BKoKge4z71fchMAS5GlZt53Edv6eCEy/+7G56xdZvZj8L++90rmw+VKWfxMYlqjwtg5SXEEmNVUxgTErEKYKYgJxJ2uMbsIGGP649rOmeNPLcXOm9s5TWGU+rlTY49NnH+OqfU4M5XRCGfKNApmEjcAm+zpDDBLdllpqPgpkGlfBTM74Y0AwEiTGtOJ8CyAd9lH3fS/uPv7rOvvo/B1Wm9DWjOu7R0UsrzOvozNNANxK9jbjMqZ7mk2N5VR15epYqaGH2nqYronGSGsaYef15twxrbSTl2U/tL+7mL2YJOX/8l/gFRGTWPctXAYZYKZlcF+9lsXtzpjYPa5YwazT3ziEwpmY4YfCmHa1rTdl3jUVe0yvUZz3zIBJY2hrOPUmVH659DEur7GQS13ZVR45ObSYaoS+4jpJtWimLE+msoY10tMPiz6SZnpiyUOWOhvzvaxfvURuyRXwgrKHnWkM5aIK7xFnYpZi1k0JjxzoUiyXD3aT4xIZZQdwPQxApNBOaHM9QIKWalnVc8M8XI6iYtwa5SdtPM1ZsWW5va7mYQJCMMDEGDMcOQxgFkKY7rejG2FscyTjmvMrr1Wp2NT6UiNI/SVjxdwaQ1i7VB4VUQlQ/pie6nW1N2cLQFTVnX+LOrv/nT9HF9x7zkXZiYmRRXQPaeaxKks3uoDbxOlrJYBXWiDSkaIGxgHxG2PE4DWReNKSweA8UCqo8KZCuc0/9CfScnaMkKX/omF/QpQKFPMDGAW5SaUcRnXRXFjjD4CZu30aXw50nZkxEt5YQJmSpVaVtUsVDHXiaD/uQ/rf70/aN79iC3637sbshYj8EWlDGdVxhI1rV1XEJN6vuaMhxh/0D4/NwFp2+XnNvkKZ1Ef6vvscmEsAl85mE1eU4b+uhcZ66OKmvZRMPvVwfwv1CXwFi//3f9wXdalw/rqxGVKXmyPV1cVs9/+1sVtzhiYfekxg9nHPvaxcTBrt9lIimNub896vql0U41T4EogLHvv/cEML1XSGG8Zg7CNY6PONWYxJ7HKD8WvcP8ypiiirG3RHGXLwEzhiwqetkWcR4DZR/vVh4y2+PwNSSBTCNMj+km7mn9c1ExAKmNo1+QTBbN5a8zE+MPg/a9AtrnhjmvMCGY9YUwm49t6LkCFswnKUM0CzEQKOWdlo5iFWqapQpGyKLEdhzBzZxfroya/AnikrO3q1siy2iCUmmzqdmLnrrnGAgK2bsGl1lPuEBMOpBHmr+RahQvEaihJpXRvmHLo+jWm67F3BOE4yNRJvb9IKZTbxTUTJ0mbCFm61TWxiRt46/uM8G2RPnFFXC+HNLk/rttLIBZ5k+kcFepv85F3QuGyOMSR0Wt7kb44R7soaGGXD+hCmYAm9fguQllBjW6NA7Vs9VvV/PAEwuixqmcqZlTLaAJSbqR1PmFMxajKNMI/pf5hqT+B1X1ii5+nUmuyRQPQCGZO0NoFZiBOweWIV0gDnG3qH1LXvHtZ13/A+t5lfdluSGNdjvltbXMQxhqpjGhzmoFU1cwV0NJDnQg1hbFlk78Si/xsM2nEUG6DWQ5iWtf+E9va68p2QWoZzO5q5p80vHxZFTOHXTCcquQlClqyxuzkWxe3O2OujJ89ZlfGH/mRH5kOZji3wEz6BHxl7cbrE9IINuHKGHG9rzEo0zaBKo1FeWhde2TjaF5DX2MbTFuAGeORfsh505FRlLGomoKZwJoxrmC2ORPatE0t9mEK4h/uVh/YBWa+S0nTGOps0zVmmT6jR+uh5gLAbEoqo4BZPWeL4ujIGEQqC+aomOmyrIvYv2znBNGnGoDUDdqqyKQLlMyWFS/P79y3rNSP3+Xv6vmB2QC8KpxFGdRZdL0Z4s5kLoCZ2+e3iVqf+cz+uYLsJaX2UNkDa86V87cA2iCi4h9K8g77pUfqTWlTvjGaDh9v0KC8ie4Xp135V1/HGjnsWb3XyxvDb/fx91AxO/VmX27OgLAoq5JGECO4BdQtzVaEryacsawo4M0N9ddbxQwgBj08cVnEpFAXOIv+8VNg6Mgj1gm7KGyRZ9QYhBxEcOtOYHwJONMURe5scI6M7NpfOJsbTGfglSyMk5XMoE7SpvRffUDAzD9pfX+nNH2R9Q7AtmivMZvn3NgAMakLiMlm1V6vh02na5/BA8gAaOmRQZnt3L/spLG+rBDIankczBS6PN+TrG2TP5qimANoE9bk8I8Us3t+IZj9EzX/0HT0VjYJCvXZffWNizucMTD79DGD2Q/90A/NSmXUPpmqNaKuDRmY6fqvCaYe+ftKu5p/aB+pD2QjxPX+Wy9Ne2RZ17EpWGVgFuMjzhjHxkHoNKY/ah+FstqHUGYBXGhj+qKmMkbdP9it3rdL/XKAWpSd7EIYoyvjEtcSV8aL43CmahqPPcHsvKQL6URVOSOV0i5/ETcYk0Kd5BltJYCstjP1kamMxWzl+RqzNJURlvia/hN9avs5whse+xyKGSYhroyiqAGtZX0aJlTB7FOfShWZXGXZa7mRujXOX8KU39z8lxq7S/mQr/wW9QPY9xWc1Xrv9oemEtf8WbXTWO/wqfdD9cJTPp7kBcBifzKMi7KmPw51HzMFMdYzwdxxlrVncnCNmWGHQVW+rAVm0JyiHP2Y8uiD173GEn4h37CuKhnj0R9c01+EGlaFSjH4QBl1g7hpumyQx5YlzNbJmrGL9WZjkrF/2Q7CZL1IquOF9/F/2x81777f+v73zVbJCGBtVQzwJjA3tll1F+fmnmdwZuzTjadLc28zTWUkuDRSGQFjksYYaYqSuqj1OE9RzPKYGpbMVctWo3HfEd+kM9pfNbNftvry/l9tzT80byB9FZRdswqKuQ+2+t+LO50xMPuSYwazH/iBH1Awy+FL4Gisv/YVOGqlPWrKo2X9GtfQchPMdBPpZHzbVr+hkrEfwrwvY13AjGDHa3CDaa4lY1tU8rKsMaPbIt+XClmUFcbirGD2/m71Xtu1luyc2VBjVNT8HDwyAtrgxGhRF/OPcSBTb8DcOn9GKmNVxc7TEp8wFtKg5HBGe6VMT1wZTxJzjxMjkAnLqI0+XBkBZvgzGsw/1GUx+5t6FxC28wA/bx8hKyZTJdP1ZBHTVMah2iBUIxDRNFd27pOf1HTFfG+vQzhGZKmC6s8v4KHrsooxru+tE8niu9BE8UyH5A0CXO191bScv9ThcDYN6h0kqZ/jhJfvlYaw/A+RS93pmg9DCYsD9XNUzvTM9ogR2IaqmAGskKJ4EeUEzkRIr5AW+6DFd4+AmQt4QTVDfEc5IEzjYQoyeK6MAdQiHoxDgaklSgX/dCeqeKlqpgqZpDLK2HMFilmN9aWCmU6m4EYrfcohypk60WLiv/Fe/q/cpDF+0JYb+FEoYz0AKSCNSlqjT9+hPOeYZhAiYIa6rjdzK97ZCvuZtV0ZFUjoxhiAFumLBkAbbK1ry1Qha20aDTCcZ32fQtSstWXaPh7zu5rZJ07B7D+vSymdfdGvyrTrr1zc5YyB2SeOGcy+7/u+L8BsXBUTyIk40g11XBOi6i1oumIhjMFdUV0aFaLSe9zRJwWzsZTF7JoKTy1wkzVm8b6xuTVhjGYfcf3YeBpAV/vjHOYdYaVf16INAC8Lq36AmRHcAGPxMgKYwtjmTGfHTSrj+/v1u2Pz6LIUMKNyxtg5PhdEGUIT+geYtX9taixPZ7wAMLvexlLVzofeBDCLlCHddE12zPZMNgSYqex3MZ9gEpP1Zg7zD8lvqOYfv8uKXUL/tgAzfYSDOqYwlsFZx0noDSMeAKf9mKhFl8YS5h8f/3g7k+3wdojtVMXDv9vBZyW5iiN9GvOUWh6bfvnDz5f95r3NXT73MYWyqoa5pihKuWgd/bG32SKS5lz/x0u5jChp3kzRHuCsSCVfVTJNUzSoYqbpi1GOMQQzTWG8GGe6NubZghrjEeYfhC1Nm25kvqdteq3eAGYmdGkaQ9w1lYExGfvL7+EGwJ+wRX9n6zV9cYZStphrEKKpjApd2fgur8eYfI8zBTRVzFqpjLla1jL9qPXdG0hbWzGbuH5smG3s0QYwjU8GNUlndL+tpjKq22Je5ouujOWaxd3OhPkH/DWOGcy+93u/l2BmY6pYvhl02ypfN5QWqEv7EcQAbfF2+2wqbYAwaUNdAqimAJcbfoy/YhznKrCXmoLEfUQ9PhdVx6JfhbEhbPBxHW5CHdAW0DWImsZ0RjUD4ZgAM796sX6XicrltW44R5ujn+WAxjEJmKGs9cY2YNRkZqYyAsiyzdooBarVZCXNgLfVQqDMpZ6VHWVOTo0MRU6oH+P5aqSNv6XLShOXB5sy+vCzjH3M8hsWGMOjKMoBY1k6Y9mYf3z0o20R7Phfe0hRh3/HvOFgV9Q2jR/F58ued/+KL6lQ5QlsWdTlG2AgqKHfIDINFDMm+saZB/VkqGLoj291mBvVa69p4EF/1RxlEGffc8leZsuAM4CZKGJRJnQp16i6hr6cXH+id6t33o4tx+CtmPVcYxY3ScWsi9xKtJmuK0OKQ4wlqP3su+I/4R+yrvtBW/S/XyFstC6Q1dyUmmPa4DYbzOQMWEscGrswApGNpgXOCD3r3PijQhqBLFIYrQFmBLL9wUyP+XuRtWDM58DZLw/mf9nMft3MzO1uq2ImqYztn7mNlPDB7GP9Pc6YK+NHjtmV8eqrrw4wu0lBcXeFnDJm/kGlqEIUzzGG1w/ICnVHr20ZVNXDVFlimXBDACQ8NVQ03assTUeUsVS/hkRFY13Lus9ZvD0/wxhj7M94XCtiUVdVjEpdgFWEmNoYEKcbVHNTaoBcHHGdm8Dsvf36KmTx1TNYBZDl+G1a+IxAhll+4XUGATP+XmdMuYbtutH0b1Exa6Yy/q66Z9ml2W7YnCCOOtGhthHeVsut7X3c2InzxsVKX+oXdd3ZRjUbzK6v6YzpPmZul9lQUxlNUxnF4cxtGbFQ0GK23PmIYKZUiUfQEgCGckMClGTTE1t++MNtW0ENja9p2n+/s/Fr6Ko3TbWbnz5Ie3m9TDstkUVtbt6x9k3HaFDrGtB0UO2j3Q7GrfmIe3z1Z09z35ZcS+b1zLRGAlxJ4EzALMw/kj9JUDE7gQ0+wawtmNOCv9jalvU7Um3xl5m5PL+DY3JRFnUNCcuDA6oAZNU2v5yIUkaAQzzKJVmy1a92gZmw8X4xKmZIR8wVMoUynVS6yjn6/+RVHv4y1nWfIXARtnITkHa71tuW+vs4No6DWXuPM0lllDKATGAkU8x0z7Iia8ss6gJc2bkEWEU97gOKmFcL/nF7+3Z7OzanfTC7pZndtC+y2/3rGjNJBm+uzWUf40rqwezqxb3OGJh96JjB7N3vfrfuLZanKzZgDeNMrzNlLVmFqnxTaYGqfO2YqGJ4EdxwPbbFfXMD6EHH8hVtunH0XMVMoE9NPqLO9EhdfxZwy/e1gN0KVwGbMTT6pxtPC4yZGoYw9bFuPu2bC2GT6c34/l3d6h1FfiM6QAyQJuAGSOM4toViBjZJICyN6UFN5vP1GE1lLJdtznBcvCTKmBTpEzCm8iA3mI4bPYnNprGmDGWZJPY0M6QyFihmHhPAGjP8XT2ATM7nCGrNv0hHe7FOHj+FLnnOVTO1zw8z8Apmiw9+cP+EPvbNPRF3+SDKSE30O9AtaUzfe+JLR+lM1YERXWclBkqoHcP2Bdpt7gTr74qD5o/e639ei//ImsJoCmbsCyhjOVHMRBG7mNcJbIli1l47O9hSdxtMtG6Na59zSRvqg1uHN/YTQNZGaMKEnF4agDKpI4Y1Zi5QVSKWiJkO48xgZozH2CgDzOSvYFlOpp550zwXmciPvDN+pLzG+v4phLG8rPUmpKHciGldnB1zSJu795nnClrnda3ZWCqjB4jpObXI37QVri2r41tglht7HF4pm5iamI9pg9vLzezZ2x93j1gVQypjBmN5TEGtOqq/bXGfMwZmHzhmMHvXu961F5iNgZrC14hjo44zvQ7G83rRL1XFWBbwau1jpnCn19ZXqhzOecW1mdqo6YuqjKFdrxGHxoeIA77i+jomP9QMRMpIeez+W7d6ewAYVbGyZFpj1AXgAGxxKB0MS1XM2kA2RZP5bYtNWhsvrDFLbPL177QEM55F/lvIRGJiO2FMYqKa0WqSG0wzlZGOjDx4Z4Q0xHnWsqQy6s3CTl/VMhqEsH4BYLayxfvff8jstt95HUEqYVveu3le9/marwBQaeqiwpjBRp8QhjJTIZelujIGXKlipvUsAZj1KBPaCGZUy3TtmMbPaV0TmKG2iWJ2URUzMfEA27DdRuAs1pidc/iteCJWigsjlgRyJuiHegkwW+nNQf5L/8DEG05oU9acff/b3cw6c/+f1vf/KgeurKwwpm3sPxXMoKC10xszBU1SJtt7nDE+eEe1jGmNoU41rfIVzNZW8vRFlnkWI4/9jT3aaYqje5JpfX7bVxez/2xmg9sToZjl6tjEjcwqmL1+cb8zYP5BQHrfMYPZVVddtReYMdWO5xZ4EaqYyujutmMfMzUWYYwgFXxhm7goYqPKWdx3o877HDStUa+5D5hxnzZ9D0KaGIgYrsFxFoCYwRevJaYhCmcaD2XMapzGIGH+sWnq3tGt3mYEM6pdUMVcYqKaQS2Lc41VMGvrMdKOQzegDsVsWirjZTWV8ZL2Fqe6EVtXz1hYF4pZAmY1xnTFaItYAZiFqtZhL7NdYOZ23opAGf3avH78Q1jj19k4HvMQx+xdUhn10/cKbkUVM6hlHfZCK3XrXAswu/rqQ1GWuMHr3xNLNUpU/8MmUkigqEqnnbVyeEv69r22XRDbTpB6Be2tfXAFbW+bVRbXJtnoWseOXKT+njDe6/2+4atVXgkAQ8wCtGAQQkUNRCCQFmAm6hjLbItyA9hyX9PBFro3GVIVz6Vg5iiXbEWptNnQpUBmCmPKMwJkMlbAjHdLuJI4ztpfWZplNf8QtUxkvrDLzWgSZ9rsR/t3vc3N7M+Zdz9ofb+cDWaNtv0t9tN1aRGLM2IKbh3G5ZtRi3IWUEYwi3ojlTEFM8IYjoCi1j5l6KPQJf3GLPGnm3octO3CYLZZZ/Yzbs9cFeuSVMbsVcZSHAazl/cPOGNg9t5jBrN3vOMdCmYlM90IGOJaKFWlZqprBBkFMAsYUtWtllMImlgmlE1Zd5aaf2i7xgSgsvVlqSIXIKTX5/ovmn1QJUN8YFlSIC3WlUU53jNrq/DlNbau92HrLYFZXVN2UxlGIN3b+/WbTVUvras6JupZWWoqYxxil1/kgcajrA70FKJUMVMwQ8HVlfGyur4sfP0BY6qG6aZs2YcySCojoUvXm+XMwyNSGSuYSSoaFLNLG8lOWm7cPTkaekB2s1IGjGm72LNUbeDEFu95j/ySOYIX7uUonRnZaTxtUfsc/q60WRsOO2xS1wd88//Up3msD0OdcsxyiL4KY3quYNaCL8YIbApyuulEQRypjLs08AAxtqXryyRWj9jHzABWLHvGN+inEEf/DLZ3q9H1YnWmO+CrKMyFAhfjoJjZRdxERopxKHFmbXKNb3urm9nfss6/S0GLkNUGrvnpjnl/vW4T2ujcyHN73VkXdUe8s+KR0si1ZprKqBb5FjCGdWZmxVwVMoGwBphJ+3Rb+8OvGUvfp10eitnfMLMfcHsRFbN9X1hj9vzFg86YXf67j9mV8Zu/+Zt3ghnLoqZpm44pOk7haORsgBVtz8bsVcacIqiqVeHeZa1+hLa49/mvNtQp2Ilixjjr0T6oiQiNPbg+DSDIMSXqFcain8UYgtnb+vWV5ZwoYnoAyFiPcREvqqDVFMhVmsooZezBfKKP/QFoALM8lTHYBmAWiYCx8RoBzHUyOZglqYw1P1NMPvD7PyfQEnVObGcq49KsKmaOLWTdluHRBjVsE+ej2i4oE/MPInF24zQDib7iWXfRSoAZFbN3vWvffY+h9xxIfVIjjlSJGh8/Hjy8iaJW29FWq85eBcP2p6Jflf1TGkXx03HaQ14P+vavUTATuNI6LfXZhjLNPxZbMJP/7fhOSMEMyn6MMYwTs6MUzM5lZ/2OlrqWl18IdkN3yh8nUMiUZU6Y1YcDfaUMMAvhMs5t9Usz4gFmaONYXWOmFEl5L7vh5Kbjw2DbN1zpZvYc6/uXEJYUjEbjUh5vm2MUspjn3CgqWg5oLnb6but0rZkCCuFMrfJp+GENMJuxpqxek+rZfDXMD6aQTYg/zcxe4/bqdQWzL/IVz+dPWzzkjIHZVccIZvw8RsBMwSY3/MjBLAJDZoOv40LpCR6S6xOgmsAmZX1/vSb7KVjl15aXjkmukcKWvrS/lFOoCqWsjk9TGYPL1Jkx+vH6tL1nSmXAm5YDzMRGv3tLv35T9lszuKVQMUO7HhzL8lDBDM8HLKtPlpYz23wFs3YqY1jll2ynbH0Q4sQTnWlYaApjAJfma0q718lKumNsOH1h0y5pZhXALgurfB4KXnBhXFrRL6XWI5URUJavN6MeUKSe+GwinfHEune+03wHDIDYkI64aY9wluKGJD4nZakbSKnX8KZjYJL4R8iLWIKMce1aLx5jZKPrgo2rlQrx3jD+sGjWQtH0F+mU0CdnYTG/2ggQk7G1v5t5zEXpOqp1DL9+o3Sr81XAlq8tP+34Ij7ke75RwSpATf76UKSfqmgEMqQ6bsBMvgOodokqhoMAB6UMB/XlDZiFDh4gBZ2okcKY4o5Y59drDJ7CVQhPaTbgibJL1HkNgpmgJEELdck8lVnIQZNNC7v8IXFZxCGg1ogD4mp9M/GvuQnMrrBF/+R2+mI9j8e13i6PgZm8Rz6m03MbzNQMpN+mNZZ8rVlmly8W+QFlsjcZyoAvlhOnxbZSRjhUmJtv1nEQEJM+fpMBiNuVDVdGm7HOzIvZMJg9bvGwM7aP2X87ZjD7hm/4BgWzqWmJzbVnWtf4rnPABGPhPOjuU2GMsXZ9vO9kMFO4mvsSNawVp4Mj2whyes6UMrY315qxTqt8thPMruzXbzD9k2bUBc6yo0Adc8RiaZaCGQ/VapRvdNnWDWWrqF0PMMv/sO7bFEa/rKpkl+4w9KgxY7whH9ZUxmQSiNGCMs0K1I2mdY0ZNpg2u4zb0OYGH6GcoT5+qF1+js2Szog1ZRZ1SWeMVMb+HW9PFQ9yAEGIcXKDNralM1PYkFGACbGxT7lGAUnpxNLdaaIkdQuIUwt9ZVVlTdbz20mUr1xJVHjkeweIyoWTeclJ3l+vC7jKBuoMR/S5h3/ft2QKmahj2r6JQdZRmON5EdoMVDKsyMz/fBF92ebSjxtSF6hb4qSYpCkA3lDG6lHC3HbybTA7yWFNyozJj4UczFKlTBFS2rWNZVHMAFSkyTyVkSmPkAxBn/Kz73+8YWnm32+L/i+GMpXCVROssriO5XgZN3kza/Rr73WWrzuLs4JaHJ0agZgoZ7p/mdEmX9aVBYTpmZC1v6viPPjyQypiY+XvL2Z/2+2deSqjAtp4vILZwxaPOGNg9vZjBrOv+7qvGwezA5/1+qKYxWtAnW2qulHpsnHw2r9N+u1tic86X1S+atXoyhjqF6CM5YI90GwkrbEJY+jDg3EFMT26N/br1xlAKgALXKKwFjGkMiZghvJJh9/zlVl2Wk8UilK5MyPBLH0V38KYXRZ+hqqY7d4PwPFooGDGVMZVPWMyBLL8cHFwDPMPN1vJ43dVwC5VQ21AGB9kIsUx6ipkLrEb0jLs8vUGc+KkHpA+nQWw0fyje9vbRE0J8QdP8PB7UNiA3JSbXlARKptuOzfnrNBQewPeABPKdwEqCjz1PXODfN+lyRXIZS6Alm1pJgpUdCzm+LwUMuWVglt9f95pqTNyjWXbl9V7EKhGGQInbgJB11v0repoAYYkT7PadjrTR/zQd8p/7hJlhTGWa1/El9Ie8YUkzQmYpQqZtJ2Y2ukXTQCG+Ue2fizHlpIgTRGsKVEOu3xhGG+KTXlbaQCbn+xwgdUZhBujqvesM6bmHz6IEwko01T6Q1l/ltGKkqmPX/4Gt85+1LrFn7flBlwWZsu2uYfCVhvA5q5JA2hl9Y59O9nEWq/XcG7kvmZQ0ErnNljH9WY5qIhapvuU0R5/BSAbWI8jT1Vkub35816KWLu82r/vD5rZX3V7/7qaf4zvNDli6bQFs/v2jzpjYPbWYwazr/mar1EwmwVoFpXxVEaFkLZipu3z15jRdl7vM8pqw1+YNnlgMMvXkUl3ghnSMDchBTMqi6KQ5TAWL6Q1ZqmMeP+41uyje0O/vsKCU7hWLIEyT9sa0AbFbBwBVLsRd0aCWT1G9zELs/lyCdMWiSpKl+JismQbUhkNm7MJnOlxEqmMhZtNwzIfoMYfzvVuw7pE9y3jY1nUN23LDNyiHLOmK2M9F3n8hBYA24OTWoceIFqARSrjm9+M1DU/BZtS4sG+noEVkUKHX1puASUB3LVPKic5NuFygZfTN2RLMUJFtFu08h4DIk7xzGu84PoWfQKCog+ADnuTxb2TXOMdYo4BOnjLuD+kgMa8Fe+db4WZxXxkQFQAa6XElSqwFle/Rcw/+jOFswB4eR8e709CDpjHl7OY1fKjfvx7zM55G8SWcS5Q0HgonMUZqYyyXqzCFr4jGDM9WmvUCGbx3YrvaqwRq2fRkRCLfkvY5aP/4BCXYkPpUMwaAlT0w0SjLcZn5h96jCpmUsfdRxvAbE3g4s0lsZikxipJUmUr9TfNta/9J9Z1/8P6/nwKWSzPWn+m48biqrzNNRLJlLIwCGlsSh1KGtacDR7rzZqpjPUYNnEBMyeI7b8X2WzDjv1BbC/VLI99fjD/926fgCvj3i8oZndZPObAYLY8MJidHNiV8c3H7Mr4hje8QcFs9NwCsznXIJzoNRPjD4pmA97PCFf7qGHaT2KZIjcQ5GbCWcsYxKILFTMFtSyVsQVkjEVcHBpp/rETzFDXdWZ6dK/r16/RBxpvqWWihlm2Bk0VM3ILFTHlF7YxjRHlTDFLltpUtey8GH5o+mLm90/5cKmKmdx0lOlYEvmYbE/lwcj+Qyojno4DzGoqo2Dl6PI+3jkhjooZIYsTStaeNQ8idKQy+pveFFATwAJ2EZ7S7ZVdNjn2AB4ZE2+AV/RX03cZHGMjUO+LIBmAAP5zQpa+3E47Yy4xDNxYwVMaZaUZwtIJap2pYgeIjVEBZuxHQMo+Q4fCRVDW9WrZVuCmkfoW2oqb4fu48er6dbPH/tQPQgELuEJ5ic2zlsPmnChm7Cepj2H+kSb3xgYR+q0d/fXPGLGO1qMt2iuYqfqV6UlsV/Us6wNtfPDdqthKUxSFYxTYkvYSYObCyI7yho3J0Z3ZuSHtm/OzpjLqV8YjdUFvXtOyAWNUz6yC2qevuIN13acjJdCWi6pQVYBiuWesxjmmZzkHLcbZt9k/lLwo9xgna81wDemjR7f73Dnt8xWm1B5fXRgVzPbfi6xd318Fa/bx2TCn52LlDm7X1lRG9/a2Jc0X1pjdevG4A5t/LA9s/nFoMHvTMYPZ6173uqmK2ahKNvGcXZ9pe1HPbPUnOy9m7or7QFqy+TTBpQl1hCABPRidzFtrpm0BpwFwqDdhLc4aQ1wt9gv3LtNrCLB1V3TrV3ETaY8zRaSlgpnAWe0f4wltZWF20vFBRtmFjvPo0zABub6YXXAFs5ZiJpb4qbsJJ0XaxOQSMMONB01Ku+s+ASi7gFlJ9jETGJOEJgWxaFtEGW1YkRJghv3KTtKkLFXPEu0A9RvqY+jK7I1vNA/1yEtAjzke0sOkA+ueUC4AuLgGoSaVzAByFpAVLZDp4nSaPlecEBapdfFWRDzcb4FS5UCUQgHPayDWfRUqc9izy82CF/U65oSpUAyrqlTwfoQfRz+AZcxdUaqwFimGCk5xu6cqnTAfQJdpoPX6sn4s0h23J3nvWqZKuOn5+J/9YSpi+iS/I+1aQY5jpa5gxv/5AVyN9WXpSk2Cm4BZCROQRB2Ls6pnhDKv7fVa4rzkxhv2EzH3UGaJcsQZI+/wmlDMIlVRgasFXkukOcY4cjPBTN+cE+CRq2UrMf+QyXz81f/Juu4rR9eSSXsDpqQ8di3GW+XWmCn7ouWbUuuZm04PCZipGyM3kxYgm27sobG2hT3KB1O+2uWZscHsP7l9tSpmecpivppY2spg9h/6J56xfcxef8xgdsUVV7TBTCCH9Zkqm4LRTgVN7PmzNWYt2EvrCpPaZ2J9F0uN7Y1G4w3bxwyEChrqBK9WSiPrloGYrjVL9lBTy33tz3L3mn79ioAvr+fCJ/sUzDQGsENapNrl579G07bcvB2G7G1XRq9OjJcFjAFlxKkER71x9GFuJ8BMoCxZOKf9NAUSuZk1nTEUM7zCp+0SXfJfy/FIRyfG5rJAQJsDxDCZ/MYrwCEhK0AOW+rCNn/T9rrXgywATayqGsT4/puNYQyLLGQdpcw0QraxwRAKsGFg/AXqEOWLSpX2T5RHE9Vx9oekVX3p1bX/9FGMqw44etkn/tJPEMzqWdwZ0S6AJmclhHITBaz1f74ZwEqhLYkTH1jGSs2i4EW4GlXGltJX6nEMrjBF0CLXkFXqGFlbtmvcCYEqUeshYMZHzxhnEDGel1xjxhtQsDIlSNYb4Fbq+UOvfJH1/fPzNEYtz4lNB71myqSqYH0znbJRj3J61M2maQYSqYzdjlTGWFvmu/YpGz1UoZoDXMOhQeugY/xFbl9T15g1bZ0aa8+KpDL+y8WTzxiYvfaYwew1r3lNG8zmg5iOi+vnIKaxJF0RphhTbfL3T2tkRfu3Y5PHtcekqpgClCnstVIaFcLETIRQlsId2xTu1MExwOxV3frlcwFM24suYFrEuW4wraKSiVNjQbojtvrKTNw3DHP9hmVyV0akqZ2vBiCXAsjqmcAVSlqal5m5MrZYJm48U84apBlr0Io1wYwJTu1MU01v1C9dqY+bJwQunRSPZkwms41fcYUd9KVf57xRoUG77PFmUNbGiUTt5GfNKQnsT6PtS2m7Pig0THUmgllu6qLvS31v0mfw5F/9GYJWPOmH62KNQb5ZhFOjQpuhPkQ7zD+S746Iq4YsUKaAFn0JcgNuhGYfXutQ0rByVL7La5tFG/qVCmZOuFpFWdUxAhjPAmoBd1iv5ivY45dMxY8UxmiXL5fwM9uj3iGVETcotKlSYBxKmPXmO8Q3E7v6FddZv7ilQtEsABsfs/c18+vvv29a7ta4qOcar8Ygpa41U9A64doyGH6wn5p7TFfEtH6s8NVsv87tW2sqY+dp6qIAW0NNq2D2DxZPPWNg9ppjBrNXvepVu8DM5ipkMWxCP15zYCqjvB9hTEUzpj2OAhg7jStrs6GsTF1zppDZAjAdquKbAhmyGXWPs13pihq3THGTmCpoloHZK7r1S4VFQu3K4WxBgw+kMS5IAQJmwSqALwhNeA4gvEm6I45xxayCmV1aFbNLcs8wlfnGqHRY5FDGlMUoc6Ka3xR17susa8wUzMTwIwWxBkcvkjVmMYFCXSDOOkFNCWI/Pn7GZF79al0+pYXpUpeqLpUPWuvMKCnpO47fCzmipfPIJZPLIQQDkRFlScdrr3CMLMk9aA0fVqQXxg2wTedtu7Q3wFbZvWSvMSuN6ofdfmR56m/8fONbtKAc9vcAt3MsB9hJHl4PMKuHqmOa0nhCkMv7sBzmH9j8InVRYhvOmzFcn7YUcFvmilnyLe3BMNLejon5xzp3Ulzqnatq5vKl03Fgae5jJsSoaplMNp1IDmxXvfzT1vd3IMy00w/bMYUjjbXb9ZrTr9W+b9bbVvtqDDI40xmNKYxUyHgmpOQgpsB2CNONAwDYAYHt027fi1RG37V5P8oaV/OPv7F4+hlzZXzVMbsyfsVXfMVOMJsCWO4elUOlMsarZKCm18jt8tP7wTWbtvq6Nk37KmC1+omByKhKlroyJipaTIj9FPBYT+ELsaycAVeinuVg9rJ+/WJjGmOUEzVMwCynA15jGa6M+uuRdZbHLfVvwLFupzJujzD/iH3MmjaSywTY4Iiy7jkBBbA202h+k5qAXJQn1ApRl3L7WX7c2FA6AzHhY41bF5PAGrN4/ORENFbQRt867mfmtrLyilfiCd7bfu4aUp2KNRV1WvtzNd4yymKoKO3JANSs3SW74FwVEFb0nKPulKb3i5du1jztzkZkMNG5NAOnNSNeZg8h8emf/5VQukT1qsdSAU1iADGMB5iVmsqYfCdIaqOcE/XsNNF3Jd/2p3C1NGcaYqQ21jaFM/ZRGCu2VDATqIpyPVpKmrKOfhChmAmYLU83kcYMRS2rMUKaAtwirlOq1lCG+oYn4kSygqSn1pJ60/gAisTe9tItmE2AqP3Xke3TvveYibb9GsuNQUoXKY1MZSxYR+apQtYCpptf+bo51bQAsx8VxWyq4YdLfajfBH+hf+YZA7NXHDOYfdmXfdlOMIuNoaVttN+mrioSQUzVsH0Us5YKl8Q1ZhrXlzpE5u8lANe2wWe/FIgIpFGl8sW6XksVs6hHYAeYGcfyftnGdEWCYwvMXtqtX5jAlSpkbCd4QWWr9aRvMEswTCY2sU44k3JsMt3YYDqki0hl3OFnWBRdsI9ZSemzpjLGZNK1ZpAH1RikYXSIDaY5oSX2MRNbgORxTs5xiFVAxLw+0GzOBTfoJEidpExCqBO7N61seNnLwsihTkkxoAA6wigCMBYmGbT7wNM8gEUDhBFxfSTIiOmfgy7CVCNDGdYEj+Id9eUNqOMG1U0i0bYigwpCEAQdFCRDEg4t2DdOYHjHvmulhNFHWNxHE9vtC68YgAnKDrXN8w2vY6Q988ZfJwVUWUUA65z+NaJgjNYJdrrGLFfNTiSdUcoCZ/qdQrv8c/JdDMjSGNvkBzWhzFEPMANcCXypiAS+kW9/30Gi3foUqG7h8rETtqKsShn7KT8TzGzgV0VvVq3wa/tKxrCPgNubXkwwO3QqYw56h1/PlrePx3Utm6Y5buHMuwAzMfwgiB1/OuKhga0NZj9TFTP3+et+NZVxPZj9qcWzzxiYveyYwey6667bCWb7rjljv0Y7WSP6DoAhTXNsOUSqXf5kaMuNQeanObZUMb2kxhW06K6ITaPlGnI7Aky8Btq1v+2Ix0FQ02s0FbMXd+sXyO95nPXPntpPVTZNadzWVx1/nXIJVqKeydZgWdLc9RXQBk/BbBsol1Y4415ldCbJ9ghQKmWdqYxxwMxjJTmZmOhO9YwGICealharTWj+4Xxka5/TxzaCWUxgJYoYAU1vvKV1cse5lZWXvjg3omJZAUE7thI/cqiYuaQKY/Rm9EVg0MVTjRVT0KoacNVQvNQNEcoZIukIl3kpNOn9ZB/hgVbACcJqnO8fBUvX+T179Vvpt6hAVjgsSll/dgnM1by5dcAWlLNVXW+GlEX0SZgl+sS1JLWx2EK+O1vf3aqQ5VBGcPMAM3IMy8xIVvBqQJzGfbVbrec6stavGB2rcNdbAmYZaRbClpwJcSXJ13zdiz5t/eIOs9eLKXAdCtpY1rH7gqOOn7xv2qkhCFMZ1eBjOogdHrSO83obMPuVVbG+gpnmerPMOs8KZn9w8dwzBmYvOWYwu/baawlm4/DVboumyamMaoWfqWKJK+NcxSyBnhTQ9DLaNg53+iJdtfvx+pPWmMXnlTo0CmAJQKapi1LfBWYyNgezF3Xr5xdVxpat35x6IOtvIf1r20oz/mSNWeOxH1pMlJHKuDMfq9vgTGzPDBfGMPmQfM3kHP1yMIsMGplMgJpMBmUBszruhuqGouYfVS27RZq4lJ/zv707v7yhmCl8NW5aYjQRl0nFOrThxS8yJyQYbeBhAi8bhYVS5lBjhCpEXSlc4yS28U5Vh5s/Q5kTgKjXxKbTeENRhQSSaP1uARi8L673inKVzJT1CCrQDrEFgdX5YB82cyiALTMSXgP9jJ+ThRJmxvet919qP4uYfC4qs2FnMzTjay2fn96L2fZ+n2sXMplF6hmYoW8obUvuY1brNZVRbPLrGVDWALMTjomt23Gtav6BZGRdISpQFuAG8Ip42OVT/adi5idi2MHUxWCUFMxEXOJ1oKL5Oj66/NeEljWFcaFQpuvRYP6R/EyCKqY3L3X2YXt8KK96wRbMpq4j2z9dkW37X2+xiPoBrpfEWIdyVroOdvCAEFXMzgB8TQOzz0Mx08W07XXO6A/zj8sWzz8L+5jh9aJjBrNrrrmGaXZfHJiNj8nt8aEOAc5ol28pbDVgaQ586bj97PKlQd5vzhgoiOkaM34mAl6tNWcpZDGua8gIX6NqmoDZ5f36uZGG2FLFMjXMl+QXWYdW+w5Ls3UHXwwjqDELcBOXmKQ/XnQBM5VQDGDmdX2Z3SJUM6Yq1vPIY4Q+NqwXopaBLLc3jzZOMoU17Jxd4Q6GFF5h7JK20Udy50XTFkMpo02AKGXi0FjrJdMGog1aQjzCEszWL7w8HswjTbACCvfWoqMEAY7Q5XVMXIvrwgpgLPl9h7Q5K3xv4EMU49qliIs93t+o5sR1YGIhsAIzDIGMuFmNM+WScBJzjqiYnoADI2DJnnG2KROW5d698H0DSmuqIt47IBA3FfOqX4t6/dqOj1sgD4CcfAYB2IxfvjzRn1OggnBWRDwDtSXLGB+pjPKd0f7zBdeQ5WCmKY+bGJWxfI0Y21przRDT/oMTqlQZQ5ztAmYp+0B4WundSl3iema7xgTM+MaJcpaDWFPyKyi/5PmqmLXVqjS2Z8piPnY/ZewASlvbzr9PVbLV/1ewdAAV7vD3TjC78cZQzGyvl9rln7vFC8+YK+Plx+zKePnllwcQkRVmQ1rSPjeVURWzsTVmk50XdW6tcdomzVMBbnJb+7L5Pma6wXTLLh9tO1MZFdJUWWuoZKlj4xbMhufs/A25UPUrYlhTJuM0H6UsAGYOODM1MZyYMId1Zm3zD4IZ0xiZZ6l/TtdJSH0gmPGgesazTEono3JgbpePv6W7Pr61715UM0Ka20oeLwlcK3jL8cb1aChmlz/frCCJzesasgCJUHcCPkJdkg2ak7Vhp9dyKm2i3gTSEYAK9DtwzXZsXKaO8VPVLspCSBU2VQuKeQQUYg7FCD7cMToUrE1bUCY+JyQzkk5dPOkLkC7uKT5aSQAtuoE2ZchCVq6KoxmoWNb/xfyoArriX/1sQ3XctRccoJUAGnN5wS2KAJnIMIs8p45yjMYJcVxjxkTfiwpfLEMRY3/tRzCLNWZjyFKYypi35RAnihluIuUVX0kdapp6bNDUkK6MiwzMaIIpx2iMdvk+cCK4KV1rJjccZaVR7f/C/xfMFos7CBjpee8Yzocbi9j+Y+dD4+CeQMhxqlhHAGa/nq8xY47HlHTGoWzNP879vhefMTB73jGD2fOe97x9wWyKe6Npf1XI0O+gihmt+zW45/ozBa25ylr+vm17fCpmakhiqoZRMSOc0fwjiWfAxvk1wYxxgtnzuuFZU8EsO8oC24JlfRZQyPKHG6plyjM5mNVjt11+l+8ARq2pLNSKMibAspBp35oI1plxIjzUbhrn1RQwawCYxlmWNWYLK9bZmiBWzw19ABPWRC+sxqmJW2tbP++5kR5HkKiwg9S/+BdtsOuo0KIsEufoWtujQRNBRCkyIgNhArJTpERGPYbJlQBASJOECoehQJmq9plhMlSikOJHv38Yo0C4I1BRZRNolM2c+Q6eMJK46TtAlPPBi1fMHz9opaLvpn1rJVoDzF50WR+piIQsVckQRx+2LxTMrIJZAZjxOyNVy1AvAWVo3wlzAmaSmoiY7YYx9JVDUxl5M4QwxlsK2mozhiwDMFtBqJS7ngxhHkyd9+0VzIIY4+a9xozxTCVbyfoyHJdf/mlb9HcYh5X9DTnmq18tWNrfMGS6Xf+yOjOexkvXYY8yARFH+cAK1wEhkOWbIZXxxp9HKiOT8ZNXtvcLx6zXZrf4Yy89Y2D2nGMGs+c85zmHAjOW56QyxiDeg6Fd15jteg+bn66Yx6VtvG8W2z9uY2vMxP3RZMyA2L5rzAhzEWtZ6asK1z+3G55edoKXyDFpGwEth7OV0axQsv2KPMhIv0hhpJvjhbons6wxEzCr68s8rKOplt0ip04hUtrohysjblbgiwYg2aGpjmKXfyLpXvUx7RIrYfwRe5FFeQqc1X5+2g/7mJVIV6yA1tUHnaHCGtWy0tALqlqGnZ5Wtn72s9puUxrVGiNuo+umNeYKIXldW/Vi7Uj7zfV3rb57VLjnmr60TS6eh1q//mUghpeRuQgNtz8HOYHw0n4C0o0N4l76+27BJ3lCFv7TO1IVCV+N+kLBLB7cBLYy4EI7vmsk3gKzpQIaJoYy2xs6eYm2usF0CRhTdpHJsI1l1gvALlPMcFdYe4Y42sjMenDGTGUMuEpTGJUe9aBaplD3/BdWMJtrU38I2/tG281vzS9W+4htoMxrGmOpAOJmw+H3FJvefpwQSDD7cSpm81/cdHIYzG7xZ19+Bsw/CEjPOmYwe/aznz0OZtKmatRYPNrcfW4qY0sxQzEHxqQfC4OscZsLbgGTNjGVkf2YnjgOZm1IMx1DcxAqaPqSGGFukHYT8LLotgvMnt0PT1NGiXp2FNa1H2IEtrWrWSFFpnpmG0HM4eIYy7K4xiz9832P/cuq6UfIekxfdNyk1bhLziYfFYYuU8KCPDGpmIguoGMsSWXEy3VL7DRTVB/fCGIFChkSnGrMVAHbwpeYfq9QzjUAlunKuHrWM0KAYhpebs7IdUVR8gJ1zCOlzkyZIZN38NI4u1vBe5mKY+zk5mKvrwO8ZOvVRiDGTVMo02aFk0jNpFW9Aiu5Z9jOkmvJoqZKIOeYQCbSNYsqnRzCcXrrgqdU5eLq+j8C417+B89jjZg8+afAhY2xhHeiDyEvUhnxP12AzLn6sqUxS5vH9ZjKaC4GHwnGoD1PZVCYi7oPzhuHeiYxOdLYSsSqFVwZXe8aH61HGf2knsSgoNUNpss63pi4KzmXI4fKfbzec19Eu/z5KYT7r0ubClK13O2OIS5gVfssecam0kuxyY8z1LKut7KBsq5CR9kexQFg3gazgQBzZuzyb/z+LZjFKwe0ZM8XWVFtVsHsr73yjIHZM44ZzJ75zGdOVszmm3801a2xVMYh4odQzNpxHTuuiLE4VU0T5SqFNR3bSG007ZupZSMpk9YAsNQwhEDZArNn9sNTGqAlcU1frOUFzUG0f8IwRpdGedzXWIWyGHODZP/lO+X2ZqdG87Lxmu5VVs8ebVTLhDRLr/IeASwml5NmKjLVfskaM4e2dw5HqoplgJb00TVmBTfqvLH0K6ZgJm1xBJg9/WnG17jo1ey9/0vXKcnuZqmA4ymdzNP6FKb0RfRI+x5CxctG59cwiaYX9zSVdFwhHL3ZvClwki2v/KO/F/+hSy69LAS6JFdOaAB9czDjCsyIR+yiokJup4OYgBlt83GDJdpSOFOFbWGeKW2DQ+FKxCZClsYiTjdGgFxcJ8BsoUv9BMSogC0Ia/rrwmu8hPAZqYxrM5MJxIRictaANMp8ViGP6tqzXzJ9g+n9TTwO294co/dG4GpsQN2hb9fF+ab42it8AcyGUMw8SW/0+RtL/1+itBHMvg2Kmf4Jy9WHF3FjDGD29199xuzyn3bMrowf+chHdoJZe43YPPOPKI8AWoRTGNO9zHJgbK4nYxOvpeP0ElrJ61Kd68rIeSqM6VBR7BT6WkqaCSxmIBZwnJqEEPhQ5/X7p/fDkxTAWkqYVzBTSAuOiTL7ZI/yetCBflXEIES2CLuhssx60hqzuodZaST8FU4ScBbxiA19vTHJxVzh3Jpo5uxMylQwg2qmCZh54iUOPLKpEBqKWe6+uKr1FVbO6M3rAfmv9l099Sncf2p8DyztoeHYlFjCzU2YNaTt4zfFOejA5lbT01/tm9QrqunH/ElpuzblS88ZLfW9ky2z809OI7w6Y/pK9l579Z/8A2aLVCkDfKE9g7CFi6qG8QFm+J+PA9oyUhelraGaxXcXIGyhe5ERYRTYAGDit8qJxNjBoYoJaNUyXBfTduMaMzUBWQHMJJM0TDABWwJp+mUSmEPfLvYxk4noTXNSmLgcpFSQ6DNfSrv8/dMID2pXPwpl7fvoWptJ65jk8Hruehs6t8GxjqyYnQwVxiqwDQFmtZwDWRLDmH3VqkNC3WGgLMDshq8lmOmfoVho/+AuFcwu+edXnDEwe8oxg9mHPvShXWBmU8w+ojJ1DMbRZZBVXleBbIi4gNwYjOm97VSepoLYqPGI1OeuNxP4CgjifesYy4CMZQWq3KKfgJW3yVjLwOxp/fAEBSxb5OvGfIGywJct9LmA5h8Qj8gwcdbsPy7fkpTGG73CWTFb5zlx218oJdwYLyFg5YvmOEnVnxgrADOR9uoZ7c4JxYfASY+DmdiWNJf6KXwxlVFcGcP8g4qZafqi1hXemJwV1wGYnTz5Se1HbzoiemdWSso8tFQv0Rhju/rkjnVayZ7RiTKDtggg7smNEi/jlAhjKNQ5OeIyjxiWum/QMBL1sXlp0zgw6ljSUC5Is8ts/qvhIZr1zpGWGi282BV/5o+cqmALKmENRSwogf2ZCqlgxv/9UYa5hzBOjRf210OxALAlh0AWJqB/bkmusaCyloOZKmcr7GsmN5+xjfbp1sgW5d0WATLOAm11LPoLXxPMLAczLH5TRZ9tsbYsJ9Gnv/xLbdHfJoel/c06xtv3h0Aps65xxLJj0QYz72zdSapiqGbDKZQVV5UsqY8Dm7ZNh6vjS4/8UrcbvqqCWZf9uTFLWpA2BbP/8Lozto/Zk44ZzD74wQ+Ogtl0BQ1j9k9lNEIAY6qYtVQ5aRuNTYex8X7SprHJABew1bLNFxDbhPXzU8iKeApieK9sjCWqWQpmT+mHx/M5gJAlgCXQJkzTs56DWRw51+SHwlmkNgbL5K8AswplLk6MhVBWb7KcQxnk6YC5dRdUycmgrmmNOmk5VA5sg5k+ommd8ahLe4k2c1tTGTNjamPEJYErYiVL5Ip6jZ088QkBSdN1pLZeJKDjUzmgKaohCuIgjul7NRSetmqnkXkCGN87SM2lOa5DHAOpSicZvBPD8nZs3D2uNcp8c01Oq2n8dX/+Tybrx1JFLGIoC4gtbATMNuV2ki/PetAIRJGhWI/VoKKIYf0Z2uCtulCFTcr1moObZ380EjOQlqpW4JFBVxSCWVuIzIALbE1Ik7Hxpe0KFDOBslqXNpZx6Jo05mY+9RXvsn7x4ICX/fcPOySU8Zotk47JdYyPNMVIYYx2lL27SXUbNlDWCWiV+okO1QjECWZVMYMKNqqgzU97PFY4Y/ldbjdcW8GsMN975DcVvXAVzG79hjMGZk84ZjB7//vfPxXM2NaEHLS3DEN0XRliiROjGIG0YGwPi3yT8XNTDnXcbEjTmKpmlBQjjlTDXSmNJYlZBl8Cb6Nqm6pmCmZP6ofH5vCFc6KoRZ3xEkAn/dbkmFxoGl/dpC7zbTATm/yW8yLBDFCWLawrfeOpzEmc2q5lnVQbzBrmmItYYcIYyqqgRZ0AFqDF5C0+Ssok2l+lALPHPS60oTCcoAU6nS22vaINfIR1RnWcn4pLGEOEMi+6ifE2rsAV9VDl4t0COGgBTzZwQTZsylw7QFVSYwwPUI25xlgxQcE9n9rwS1+v47mR9akVPy9BW5W4GXdsWID95OJePdJHCabYR60U3I0bNoIGynrcH3Y785h7vHe8X0wC8417rJ/Dpssb/sqfTeBKQcvDYZFQhjL7cmy4MkbyLv1IvdZNzwpiaRqkjhush12PpiG2v4NLourrT4EAM6pktsohDIoZYgJtmRniKhSzBLYAZfnHzxnqOACcgpn6/utXoaTxfFIFbU999a2s6z43X/3af61Y+1oab/TP1TONNQ6uJ6umH101/Oi6SGHcngkfJY5NHevN9MzDZ6pnjdTHw69dOyzIDWa3crvw8WKd2+bgS809ZDF0bpG1HswuveuVZ8Aun6/HHjOYXX311W0wa5t6NNW1Rp2coZb5qqilatlcQGMlm8+4ZX7evwVvY2WqUAjrdQhk6sqo68lY1vViqnDp+2lslyqm18gAr39iNzzaCFYUi2odzxCavtiEOassExtMr7JHfEesqJ+GpkBWKEP6Yy7+d2Yexh8VzFQZK5GbKZpTlqMZ5dLXiSh45ewia9EwYXJMObWnxEbCXbonGR/hXJb9u3wZCvoY2rdtHl+N5HGyJJMRWBOgU5uDld34mMfUh2uoQuY0SQzYAMAEEHCLZEBacdWrtmMBBIUbTXPzZA9gKjCvAAhhw+t4Y7xfxGBHEQTJ/dYS10PsWwYQQape0CH6FqpNm7O6PG7iwVlEJ9mOjbDpuFcr6EeQKuI6ybLr5nC4tmHOCmZ1enQN2QGKhUBtBrA/hdU3/bW/YKZP/QujggYgUxlm039QSsA1tmMHi//RDr2Yph/5ny1W6K99FNyK/hAdsbotCmFSLskP4RKKmQpEa7W/D85BHxmnnOPrsMtX9tW7YDvqm/IAcdOyM8DMB4UyrBETeqxaJ5xKhC6Tn29Pfs1treuumW1HPwpleo32OK3nINeEM9YzpayqYlIGjNXY1h6/izVkaSpjpDOGKlb7omyJOQjOhwC16WmPN1tqZKxMuK3bDe/bgpnJD9AseT43fxIwu99bztg+Zo8+ZlfGxz/+8SmYRYFxAtBMUGNdwUxBTEEtyhTQxt0YxyFM20cZy8Y7HboeQKaApkoabe5N4E/np+AVl1cQG11/JmvMGO8f3w2PMv4mVPjqEwOQRfRTtSx/1hhnl+AWrj0jkMlWYA67/JZiFg6Mdg5KGJ1KZOKMlQTURDGTCSHuY/Jgvkl1Meo0AWMw1U7XkBG4MkALMMNY08fJbR2wVcs1TgBbm0461ptxq92TRz+yPpC7mayT8sRoAkQAuDKRzwrXIAXaRVMAgsAE+4UyBIJRUwv2CWSTxVUxKgjIqSDB+p4AZSUHleKAnGjHe5YaoPJXnHxU8HFgBVv0KxGRDaph4FFCwSrZFgSGzBqqika45L7e0VU/YkIuwEsJDgplwedZvxpv/tt/lfluWVoiyokMQ2hjPPr1ZoIA0JOrxizmH/pjgP24Bo3gVhRBtKyQpTGkLHr0QdyomJFFViRGjasQlZ0Ba0hlTGcjUJb3SWYlfTzWmGV5lr5OVDGlSs3LTCb2hCv+i3Xddbbou12q1XRoa8Jc0qcdH4c06dMl19KjSxQzMfwo7rYimBldGaGawQik1L5FFTMFsxzIFNrGQa1dP3zq4/Trrati9g5VzMyK5ozrRiso6z5mlzz8bWfMLv+Rxwxmj33sY0fBjG3uzof9FOCyurtbqF4KX+io96LmIAou+wLaOKy1x2k5bWuMmwxohDAFNKYvEtJ0HZler1VWlY11hbYWmD22Hx5hi1z9kjhiBLMGlC0AZrOFJi3LfmYCZvjxBolPrTMWAmbZxEiaOZjJjdaJFYJZkg2YwRnODVfGRgKm3H0SQwqjgpkAGFQwoU7UszgpM8bf+IiHqw+9QlVd/wTVJrOyJ5MZ7ewRVIt1DkBfdsedydi4V8QAhO5IHaxzAMjIH0BlI+t8M2Wp4DriCdI0wI++RmWSn2c6yiC96WeL60GhFDgG12osABVpi0WnmnwuhFrD12Pb8ta//zcJYJobF3H20XZV2ZhLp2CmZ8CVI9UxVmqGGCXjCHa1XJiGoN+1ic5dWtCW4A3NPxTO5CZzOCPHIJ714zqyxS7mdamHQMm+aX8qZrtuNM/PTG4aE5NJPuG1l5p3P2B9/2faKYZaHlsvtj+YoW1yHePbR7fj7FtAK97H2jJRyxqqWTlVx4qnKY05kGlsoovjQY1EDq+0/Ugx+1tuF96wBTPftRO/AJu+on2on+6lj3/HGQOzhx8zmD360Y8OGLKm1b1A2oyURYUlhYsSsdi/rEKc6boyd6e5xU6A3AVV+6c2tsoH6JfX2U9dGS3a8bVjWxvGxORD4wJgKYxJWqMqa/2j++FhN/EHFbAoQz1zOjVCULJ+B8wxldGVY1BWaCu6ZzNdHMViYud2VwsoZefEdbGtiqUTifrQwRpfAYy5mSXOOx5oqKhBIhzg3hfWAKNbyxXccdgCyJcl4lih4titSSfhmtYo4KYTylbT3PCwhwr+pHuLNXBDAyxouTF6Fwy1R2ps9gsDj/8l30cosEN7OEssHuCzIr294x//nS/89uyRqkjY6qmW1RTGhQvMqVOjKmY5nKlKRtZhnF4ZigmD9fW7e/tdO9x0VsfFhYIZ/8xS4zAD0fjgZll6Im9W0htz9kkmBsVsgUzRPmzzI6PU84+a5aXrrw30FzCLI1lPhjInIbmXYu1iQaWPff3mbX/CFos/mQOQgljeZ3ysxlvAhnJW174dz5GeuJgIZpu+pymMQ+dbYOrMBmutMavlwexkU8beZoMHiOlZVTHE4uxRb8Da3LrfrErbj1uxv+R24RU7wKxll68xpDKef9Y7zxiYPfSYweyRj3ykglkOW+PgNRnW3D0ggoDWWnem/dL3SlU/vI+WcSm0NZWxPO1RDUGkPgZtMqa1V5l+FtGZbQpohCt932ZbVq7v44jH+7Otf1Q3PMQWIhItICihrO3eC6zV88AUR4KZgVkIZdZU07CsS7cxTl/bN3WoZeWc7IK9VKMPxKUck7BzFcziZow3KsCG2EWdYBHqHFXMxKct9MBcDev5iIY1ZtEvATNA10qMwiO2khj7BMQJmD3kwcYNlN1U5OLarOA0KiY1lshK9edSTl68hjZFi3BhU6Vy0/encqamHXgPtkg2JoQlVRBV28K1puxZLSb0RSE4WqCAxVq56KagpMoY76vFwlpgGqnBCIYGK1Dq4h3k4u/8Z/8gVK4df0MRKFtkVJDHItVxgPqFdWEwBRH1TOosE+J4LvxuFBjLvrMLIC3KxXpVzlQxI6sgDZHikYAX2iQmnBP90i/D9JgcqrIhlRE3zVTFWEuWQplAW518kCkn/+g3dub2XusX91O42rc83cxDy1lsXCnTsQJiUo8Dm0iL4ce6CyBrpTLGEXBGKCOQRVxcGmtcY1NTHMMR8lBr0g6W4uh2VTF7mNuF5wWY6QbSY5a+yRqzYnb+xe86Y2D24GMGs0c84hFjYNZ0aszGuPsYvKEJqhggZMSVcbJdflsF0xTL6evJDlxmKLPGT10ZtUmUL2upcFOgTQGO769jFMwe0Q0PDvYIRsmOFN7qmXEe6sq4Jphlf5VmXcDtonpmjLsyaiKgLpjTlMWog0j1Qac3vUnhm5gsZUAclTKjjxoeKpjV9WW57b2jzkNjAWpu7BOPiwFoBTfpMrFoJ5j5jpShaLvhQQ9MRJEjUJsa1858sBRs5t+m9mvAzOGmsv8HPh7Sct6yt1rXfr3rX/0TBTOuG+OBWNbfI05QCzAT2ML/fpQbQJY4O0YdroyiZ0edencLyHTSGIM1ZoAscE2a1rgWjtFlXCtm/8GVMV9PxiOHs1YdX6YuAbMgTBCk1FVJE4hTGfFRV7oVe5H1/fOy9WIEolzZWpr13fR9xZprxjTWNPQgdOkhRh9xztaUVXVNUxgVylQx25RjnVlR+3ykMtIQRNedoZwdqtTpMX0T68OZiUzo81w3e6nbhacEmI2/SuO3UKQzXnrFe86YK+MDj9mV8e1vf3sKZvFAXveTibKCldrga1ohx+p1TfcuW6/XUTZJW9R1ZjshS+P7pisK6Ol89wWxbP1W9t6ZYsbPc5e6tq7X9oZjo6qDahCioEoDEtdy7eubyzCV8WHd8CALLunzFEVfyJIrbZP+AXlRFj7JYQw8szaoatwaTLb9OkmTAaCYlXN5AiAJtLT/hsu2SGXEjaGeHrSZFNZBPPoNxeArKbsbaSJTyf8Cre2o40tUgayFx+sEvupeZzKWDo0Ru/CA+9ser/G9tKrtft6jfbl9rpPvwNV+qSPy+MhQ2g7xmr1r3PwuGtz3MvoJFE8vy/p7/92/EKAydVUk3zTArQDQGDMb9H+3fIckWnNS354JdryGVTArOVHGjYty1uofZQEzEZScsKXf9jUmzINDAC3ALEXKdnxyH37/YU0ZbhqTSm8Wk4dipgvoHn6lm9l/sL7/Sut7H19HNnPDZy1r+ziMjbkuIpWxZYffRd8EzHor3ExaUxkJN4SymsqYGIGISyNArQFm4wYh+1vva+xA1vwaX6/N/p2Z/R+36x9drJefZFDOVBnLX1TM3nr1GQOz+x8zmL3lLW9RMLNq8DEphbEBZ1SjFOgIHLqujHHdn4ttabqgzGEUoubBVq62tcojRiHWSG/U+dGdMjZhLerEuCOVkcA1qqLV91RFbbRMMHtoN9xfFS6CmjGbj2mM0qa/YVUxWxG6gmeQ1Uc1Lc7RN+ohQt2IeLoHrnEjaRyeKGSmyhhlQKFSBbOVgFlGlGvP8zeZ+hisMzjArNAWX9aJ4e/oKPdSFjCrcQWz/CGGG1BLcpb0Ez0gwOx+9x2XW1hhbPriIzX10CHT31+qEMnyVyMd8sBynoYlxdH2f8/8Mxm/Ff0Axj943PN8FbOgdPV//Nehbu0CtMahylkS68wGK4lunHEMoSvO2i8fWxIM2cTwXT1JXwp4UzBzgJkKTenfZAhinHSusmG9WnJXuotB48jasVZNwAwqV360J8ZJaP+Hv93N7M+b249uAagqYM11ZQSuqpotutP+HcFrEW0Y29XrRaxrwdl8Y4+svMPsw3wbG3qkL8qRAknRIyANJiABZQQzghdiqYIW9aLxPNWRY8bXqOl4xvdPgyxmf9rMftrt+gcU68ysm/CHx9Ja6VyvfP697z9jYHbfYwazN7/5zQpmzXVjEc7BrK08wcQjqqZrozZtNR5tsfZDr6/QMtnQQ8DJZrgv6ltMArjsGtKmwLtznnEW8xRVxcZSGXdCl4KZjJ0MZg/uhvshey89CGjWg2PALaqccdxKYGuVHJlz4xox8crY1vM/MsXNwi5fZT5Alz4eFJ1UH/01lRGT4QOL73iKCzL13fZtxRLFrOGyqAdgrNe0oACzCnZua0BXss6stmNiVjQOTUAfiC7c5972O68RJjqzd7P/+73/v/77eOoXiQWxNpRhbAkKEDCT5F3hlTWVMQU09GsBWuGfUTJNO86M8cAYr2naReFMwMz0UDGJfXXCJ9l1CGZypy5fptZM0K71JTeUj5u0E1G9atlx017PRQGNB/I1H3oTmJ0396+xvv974+vHFKDGoG1cbcsPhTyYe+QKGesKZWr2gaOzAWvL1j4/lZGK2YpGIN4EsxzQpK7gNW4QomPG0xrb9Vlt31TM/q2ZXXC7/i5bMHMBMs3jHvcCqa6Mn/jgGQOzex8zmF155ZUCZgJUAmsNeBtNc8yuQUAjgKlZhzoQCjTtev+mKyMhTfp/UWDGtE+BIE1H1OHpm0QdtvheY+vNFETp0vEKZqEk6v2wPH9tmoDZA324b/JHWAEvbW+kOyZK2grCUSo4UTmD0HRiaIOXBvZrzl6xGw7WjaVLz+leohOUvlTMKOVh5XHjkEnHBKv/Pz6cAeYMcQcpnHmeqoiypDfKY5ubK1GmgMb2tfQ9SU1BYvz197pnK31tfg4iYxqJc7iIaI8yKcVfr8bIzZBJyAozITXO7jdn2qOOkjqCGohSO21T4yVdgPbB2/znNnz1nq8pWzj6NKCtKzYIkI0fbiuuK9PvqhaYQS2T/EtFlBzK0LcEWcZ62gE/q8grOWlK2qNkCmJSjjG+FhCTu2+CmePLIW2M0fyDIIZJURHDDa+SMQJoMe7B7wh7ng9Y3997HMzG6+MbQSt8cd1Y17DCp/KWgRnaO4l5p+Yf2ExaUhgd8NNMZRS1DHCmUDbIPmfq1NgEM8RGQSyHtrzeivle0PYeM3vQ9rf5hVsW65K9yszUaoll9qlhr6mMX/bhM2D+wdc9jxnM3vjGN4oC1lbOFEiStWSjils9Qg1TxafoejIxIaSCpuCk98H2FJAUpvY38RhX3Rp9cvDJwZj3mq03K2Je2bbkz2MpsI0pb+jbP8CHewe3eC9CEdaJpQoZAS1hG7gySuZfBTAH21BcUgUt+tq2fCN+QZRE9Q/ff1hmiM2kTgaKmhBmbcOCORPC1JsWjmnBmlpSDpwG7QDUNNsBXwQzQyqjsQ/aCWY8FM7ElVH0gFLPhDKmP15/j7u3tRLWNcp+2qYxrauTYPul/Se/o8a1ptdsXpdAk89+bzHK49I13p6Htmvq5MS3P5QCh88wrvzh299yB1yZxIrGpG9GESUUs4AtOYtIXuPrWeBWNJWRN4VkZdGPKoQxrkdRDBp8yyOqglFAYlzlPuUelNm2dH6EhDSUPf3YIy790Vbq1rxlsJiM3rxQprRTTWM9QK72f+A741vlHtZ3H9Y1ZjmkNdqSWA5m0p7DWgPQAHEBXzwrvInZRyhng3vAWICZKmW64XMOZwOMQABnRVwai7fBTIAshzHE24dAVon6/sA20v/OZvYl259a1/+rqpiVRkI8AwpmEa6f5Pn/89Ez5sp492N2Zbzf/e43C8xQng5w+fo1Nf+gkkN4UxBUNUkBozUXNdNge5O3tLEFdlHX9jzts63qSVH3d4uy2umn4NQCLsZb4xlvpDgu7tsN94z1YkYgQ4xtITJRNStSVzAbXKErP9BOMBN/QKQ15oKK6kwBX4iLrOdxzhbUsW+Hm8XN6c3zptl2wjGYSApmYfZhyd/Vt/UeqY1Rjr569CwzlVETtDRtUVbP6Few0N2Ra8zudlcrv5OX2AbJm/9+2PT/y9dH73xbKGMKYIxHXcukBahpkdooYLY24/9wepgmyb4m8RgvkAcwU2Ush61FqkFpnKoZzT8UyjzhmDikDhaKMTE+zD/qncdHGICFek9czNeTNbLo4cpIylSC1Eno2jKdjMsHcP+r4rfJX7Ou+xbr+/NJ6uHEekM1a+9BlqtienQJmIn5B1Sxtj2+V3t8dWLsoFgF0DRTGXMTkNUAV0YoZamVPoGsueYMfQhvcmT33IQvl3jMzWdB228PZn/fzH64gtnfK9YNyBmIAqpFnmA05kDZ89/+8TMGZnc9ZjC7733vm6YbKgMRsRVCFFwknvVTUGC7RUHXmLHPlLRKjSl4oCkdG/XWeQwSp65BU7MSpHiu4bLIOfD9kvVmbcMRAaphB6TpvmhT1bPFfbrhHt4n68R4jqMX0SnGRd8e+551pyyz7mJ5Ff66FhutRgrjUM90nY8f+J0YIWJPZiuNVEY1afagyHp2EGe3jElJ/iapNcw/hBhTOCuENIE5upvgGgCzTky0GylCSapi2cZELVuin+tNx6MjJ5Wjs+KzmIVs45+/y50Pl1i3fz6h1rVpPOd//0nwqozvNbGC64QC5jq8PV+tamT2JDVzVCe97RCVrMP8T+Pjd7tDfCNsDpQTWSb9GZYAG+mgYwpUnqq43oED03lHwUxgTGKuMWmn7U+MZyqjN7ilrFU5A8NI3JPsAB8EE2VWvNP5dYJZ4Y3Ebw+uM2vkYEobUyED0O77boeI8X+sX/zLPAUR5XFQU1v7NqDxaEKZApj2UTBThQxt3EzaI1tfzD/y9VxpKuMa+5lRQUvWmrUdG9W1USHsi1TRVvu7Orbrbv+jmP37U+y68Oc3YLZnukDk4tv2GDqz8z/2yTMGZnc+ZjC7973vvTlN3TyaxbQfhrfamk6NOyAndWXMoKOxvq0JbtJnDpgN7u7YxyvOauChTpV6G3L/6abVm4rXa8WYzH6/CZooKrCiPK6k7YC9xb274W7Wg0mCW4JP5Deto2/+W7WOBcsMHZdk1bMp46gQtdu1kSxT0gfC2IL5nOZfioNJRqM6IaQ0DnQmcWUUYRcPkpR+Qp4noNXElVHXkeUPMQpn2mYCaSmYpX/3L0kf7tZEhS0eWzdjLtz5jlaKkvMeu15xI+KWBoQO46rQAe4rHcVb1gr7jidwjoR3j8XnZdyIu/2xTe6gSY3argEdpV1Gs0+l/yfveReCGXPnAF0CaCrLdCVkHko6CZgFjOXZfqzrPmebsZoAzHGDdc3VWHmMXqubcq99QjMHmCVckn+759CWThjXGhpgFTHyL+MsI31xybolqYyefaLJRGgAouvQTK5xn6v5N4EnW99f0d4QOgO08VTGfKzsN7aoZcBX0xZfz1hjhjVlKZiVgLJuB5gZzwIhBcsSqJwNiRGI5WDGeJbKOGoOklvtt/dAG3dz3N963+1xZnal1Zfb9b9/C2axzixLW8zdP9BGMPu1T50B8w8C0h2PGczuec97joEZztJvOrSNttE8QkEs2qJf+z2akGaApmGcu1BoX18Hsl/rGiw3AVLhVdtC/MpBjYHxNgVHWT82ZR+2xT264S4WIEVAEzYpAmUpvyTAFmvMlEtkx37JEBRfDbo1FvT19PE6yDDATFIZY6Lpg4+AXB9kCsWMhJltZAIpEDcKKkUMYyWVsVf7e1XN6MMmqY0BaT3bYMhdUxnhJ7cGiOGGGMPjpgKbc7VNVc6uv8Pt04fuubykbQoGWZ/5mYN7uvVrN421bms6fLUt81Gzm+q6LsuauKk9tJeypY7JX3qPh8un/NR977FL/UrOReqiknVJe18ilVGZplFWKItytJXoE/1kFWifKmauwLU57wA2jvWoD24FilkGX/kklV10vLgyuiClZI322CwakAaOTmKmYFZkXVguA+o5n1jS517v58PxX7LOv88Wi8Vh1ow1UxnTQ8AsPxTEtN53WFOmx7Zt3Vm+toww1tyYWVIZS81+KbKv2eaQtWZzwSzi6zaYaUwPVQDb/fKxeb/tVP+Kmf04wMzClVFf836ixmP2efvMGQOz2x8zmN397ndvglnDrXH2erMW+FFJUhv9xjXG3l/PzbYMFJN5j16fc9G2EUjTGEGJMTVR0c9O+uXK1hxgE0gba1vcvS93cn1wgVrGdWXWQXji8qtOxyNzsBNnI+GVdaFrI8EtZxe1ny6muVCuu+RIvuVSJD3cLOIoo18HBYzARbiKOCdGGu1Ox5wI4MGVsc/VLoCXrDELV0Z8SdAX1wrFbEieyAhda32sbCZxFdEGPn+724y47oFW2F7jxbW3jV1PfPy0gU6H49fSgVKXi2kLa4ff37ndoEaU+Sys5axYcqbTjbmze5BLINjepLvUqH6GWv7MA+/Dp/fYVFrhClTAtibM0ZUxAyt9UMuRQP7csQPURO0S2MJ3M7+D03TG6EeUCZBrglk9BllulfRFe9ImM1CbfPDvwoWVG4kXImLWPza0aFInITmZahyi4+/xATdjJrn/L+v7fykwJrA1E9A0nh9i6MG4AljEAVsaFzCjYja429AJkOkRANPYxwz7mSXW+YAz6D5MZWyBGdUyLadrzvZMbVRFsA1pzTTG/1hvB2DWz/9TXQPMrjljdvm3PWZXxle84hXTwazdNimtcco6sKSN8RaATVbnGml42qzjZoMfi4QqNSRJ54uXxC0AqYLgMKLI6Tyb8CWgNRvM7taXO3ovoNUTzlDeBWG9xAB0ZcGcbgUxnA1xU96pZVro4we0KAm42aXCFVwW02Q/TDqT/5w3iZXBKOtE07ShDN6KKGY09MjSFR2gle5k0IxTD5Cb07jGAsCQtCW7O23A7Da3av7eiYYAInOk9xU1qyoWIUN6JKsYjay+GhtqjDqOl3gjVXKYBpj+Oo1RcYsF7+9VrSpVLXKuB5NrDbVPrpBhDhjruLLfBEmhEmOOfMOYIbUrgaDCN69DOXMH6A0GsC11SNxrqZ+rxeUKLtyZ3kGnjyd4M6xZNt7eNQ+5fwOy2qpZykKRUdila8ySdMWCeACcwWJf/4yRw5wBtkbAK25Q4jImOw+akyVMwrahtlGUGhTIokzuSfh4wxRD/Wh9RNCs7XqNHkparDFry3icpJBn2EnStUQndfcPqinDk6zvXttWydrAJWvL5Fz7J205oHWM7TD/wIF6KGeimAHI6rmxsfSKaYEKZaZA1rDPt2y9WW4GwrrCU9u5EXFHO/pqm0JXrrKNAttjzO0thpcoZvukjOgG03btGQOzWx8zmL3sZS+bAmbaNDN1UcAK5aSPimZj12oqTny/FmCJoyLaxs8z2lI1Lk4j47WZXQSkckBu3aqkJ0Z5XzVtcdeu3D4DMkOM7c5Yt+vPnDwnWX+F9rWsy98+1T+jxjmmuOEVATgs2kJ3xM5vkmTqrKv5R9HcTKYtYiJCmzT+WLs4NNbYcPrQ3CH9MCBMUxglZZGPaogVjtVURrE4WFMt03q60sZtsEJXxgCzW91yPCeuvcZorjm9Qsb+6ZLTMiEJgwlUzU7wG1+yNf3vrfPTKnOlbNZLhrZnDSjN/4u4BaXzde0jHpw82SucEcg8+uZkoO2dWdn1ra1nWUs2JP12iVEDlC5vQpbGFqKoNfoUqmUUj3SdWI0HxyjftMBsAONyuR9hS/xZdHlgHo9fLxRbs6+CxjBRjdkKk5Ov7l0/Ev99kc7YfZf1/SUBSlj7NdFZkf2mOy426rkd/ojzIo8wARmSPctQ3zuVca1AhnqoZjmUtcGMMKZlrecK2riKloNbsw/jnx/c/qaZ/cQEMKv1slcq43VnbB+zWx4zmL3kJS8RMGsrWJJyyDrHsG/WR4EoS1+kgYaFt0b0F4CMPqX2UbiYlQIZgIHrtc7NMXwffF4RVjBrpX1qWqMqZyWbFq4bnyfX2EXdknVsMDOJvriOgKCC2Z27clsjhAWX0GWxC14RVtFyHMIzaeJJyVMcGadJSJpAl1s4MN9SvfuTuE6KcEYo66tiNmHzk4FyICdmmcKGcaePzF1ie98RsqiYRTl5bOvQL1XMkomoDsBELtUDqJzx/Pn/+l/s5nmpjpU0aZu2z3ibdvPxv1RRa0NoE55v/lcxu+6xD6dStutnUEgtgLMc3thGMBMAw8OYpCjGd0frOyJRzIp1suNgxz+l6MQUxvhTQcZgbHHN6ssBi+2DCkoCcoNmCNIMk3cNxUyMPBbZl88Bdkx3dMNLXBa9gQu42ZwoJXbnj7r+b9+6M/b/or3GjHVRxLok3hqrCprGtaxnglifA5l5ZwWbSQPQxCZfUhlb+5gZ0xj1EEiLlMaWSyPryZllApjWmyCmbV+8cvY/i9m/M3n5H7jeykln/Asy0wzaL69dSjUsGsx+9bx9+RkDs/9yzGD24he/OAezNrgoYI2mLuqZDJT1kWqqegn0te7bdt0rAVLGTDsLzIVrYpxlgKQy5mofXB45hi6PCnaqao4pcZPjKGu9CWZ37Mpt8gcblmO9WLYmI3iH4+nqKMyixoWEsVLjVMk0I9AFzPSp0lyMPWD8wZtSejROjjGMKV3chJBluuGJTKa0F6aoXX5ilN0LZKkypqqYzq6dyshD1pg1SJQxqm6//Z//k2yiHClqESuRsigM5eYe3zNVZXEFA0kVNLx0NxgGKAuVIn1QlvcSzad2rDUOVuUt3iqUH+vifTXZL0s5HN9uWyJ6K/r73Qmpuq4uIl47V3iL9EWvY1TJ0iRFfclaPFzP5J6j1DW3uP7yxz9KfzbBxIO5cA4449P/UMukAYBaV1dfAsKGZIWlWuUM8T+/glr2XcHMwIFgJitEo85JJsiDWLK+bNOnbNeYdSEgqaA0kFFaLAP3+SjXyXRMPdwcauqhdykfvSZvdqq48T+8nciNZrA1iDKmk67nbjAr+Bl2p094+sf6vvtc09SjrZTNN/fIHRe1jQDWTmUkrPn2vO4EyKKcpTKa/JobXWcGSONG02KjP5hZ6VQxy+3zCWFRVuUsBzP2zdIcJ25I3T7iWv/JzL7K5OV/83orAxWzPV9etv9nv/u8feUZA7P/dMxg9sIXvnAOmNk4AKX9FB7aY8evZ1qHulOo+mRAmdyXXivASFU/Pc9NqVSo5FnNPtQy3/Tamn6Z9N01v52frb4PxrA+CmZ36MqtmKpoXQJp2r6sZ2mPmIpR5Bj+tW0IyIoy+qDfzq3AVlnqmncgw6V6+IskyLzMaJc2708X1xHMBvH/Z8J63KDSqACaAB5SGc16AawlYoCtBNIwjjH58sZjJB9DmcJoaC9sq+WIRQKXpjz+9n/8j/FdHY//ksgWwCKZdH4KTUXXk3H9U8CP16sWAEPwXvTN0Evgy72iAYCNC9gKHCFj7VqAjmTe1euegkzxehfZYi7EYhxxzSvdxbe/C66ULJmS4HM6mXi7PJXS3bxwrl7LgcB8N5NIBT1JV633BTDH+j58vnLnsgYOIFuKfcWTH2fWZ2DGupEOtK/QA3/mlaqYOe3yqYQJbJmNM03ePvDPLNS1k798acoibjjGyPhaL7C8HxLQwgSEY3IwQ18PqBvkozUwsqYvRnvU5Ui/hDSloRKmN6eEWQakL2peZjLJO36J7xDCv8sW/d+cu99YHhfAyk0+cqdFbYuxjrgDxhasn5ZL51hXVn9tdTmQaTlNaFfzDxtfZ6YpjQXnClW1jn4CUmOAtm7tfVYU1rTeArD02+Pbzezvpzz1L6+3UrqwsNGFw7qWOkv5x7jB7GvO21efsX3M/sMxuzLe9ra3nQRmh2zXh/68X/NyDWhs7gGmcFiY3perUe3zGLDpmF3xJCSg1d5aoHWrstdaxAfOXcEL7SlgKphJv8XtvPxXC25B6qLDiFCz+yg4OetoZ9/B83RFXW8W8QGGhblFBRYSZ/IAUxcNhh+e5mBC8ut0UZ1OTGCrnlNJEO3NtWdmEVO7/C41+QjocolZxMWVURlaFbMBa8UixjVmunqGiVoCcQC23/73/14futVYIoMUoQoAnJHC5ZdaXDF+oQEGADrQ2XhxAQKBLDevQEhVSuAmvT/yRO3gAUdbVVB/9wpR6oVNCdXFZTJAlqMITUDL03vBZ4iB+BywF5p89ADNWnden5cUY5YKXfUzQCfCafqU/FVPfxKf8pkLF2ClIJa3LySdkWvMUp3YbWBqooDbqHObfFcFmDFBmd/FaX4m2qM/xxbV0AtugGwyQAETBS2Fs2wc1Db5EuAuyMUEteBjgbEU5Cgwn5h5BmWJKmYDbzT5AGT87QhmxtfzrF+8aNz8Q0w92sYeublHXh9PZXRJZZQj4qXrbVAgY/pixAFEq7mpjCYbTZsoZu1Np6UuChpBTM8CYk1zkAa86Xk9xSDE7Rlm9qoUzG5FV0Y6JjGl0bQtXqgM2+Nz5+1/nDG7/H93zGB261vfOgWzqS6MKOfjFKDSdWXSTdaNKZC03gOphFpnamGM9QQ4Bom3zjub2tdlPT9jXusQ8GJedGSkUwo/V107tgOInXb7cX+EVn7eegY0xvXjHvvbePkv+vt//hFW+gA2VcygiuW/71VQyllm9f+QdxZAriW5mpbSdd/OfcswzDzTOMyMy7yPmZmZmZmZmZmZmZmZsafpQVkbHTfl/uNbWZ2+rp6tiDoRjpOgPM60y67z+ZeU+PVqGyWYFRtH8zykDmXM9oHZ0P9UOBPMVqOGpa7p8vW3cs4I7RtGplSrwEMdsJq7sOWFEehueu6zjdxj1jZUoHQYmFmXaEQtFBJgoYXae+/g+G3BpWZfL7Wr513vDQCo1VHkPL7E7Tyal9GYZRKG3vwA7H07X2tO77vf7R0yUEkzKfJjrYDGVH9wfWSmiZifiq1Al6taJu3VRzvt+HOGas7b+RMKVC9Eh+7/9A5EnvIbYUwwc3DLFJJkUqEg1sFZJgmRtlTjToYKjnBVdPCvnAv8FPuMOUvFLECEW066+76SF0D8Mk0W9J+/1q0+/rWN8Ss2NvfiJtKrKlkBZuhrE3osgBldGQc2k9b0+AJkcGH8x6NdGRlnhtT5ALS8J+gArQezbMO5TQ5yfIp9JAb5ozB7jJm9zIrDX4np8l3T+PLLFq7uhu/UrdmXXbbvu2Bg9pzzDGb/4T/8h1UwO1o1o502AdJs1X3RldzW1LioAInui1JvAWr1XL0cWWadMWX7MjoigUrOOdtVwWu3MSjhq2nPPq1jqpf+w4gXUvkyUcx8mJmWYcd7B23PBInbIV9sobAlsWXNFyEyz8sXIzKeIysjNpLm3ZvSI/pEQYtCMdsaXRCbyS8BGhQz5+0aAEzaOHN5aJ/D+SkVMufk+t8Pi52dRDGTW9Obn/NsMwuGVO3OoVqOTx0rIYP/xMyFP2BvIWqMt3tzyQ+UVNH2/c8yd4UqbBBm4mYozem+zOvoml3XirYrKpgLUOX1dvalK0w4oseQ+8Rlvi6XcXGx0dcskCofG6UJnU3czCZ3ixAVzeeMdu8B5iETDfOc61y/i03Y977nu/B7R8FM2iLLIIOqbApmFogR2zLJh7ZnmdA2x2zNy7Fhg1BmJul6hDClvY4945jsj6D74WQTMI1wTvvwAuZ8WyNjh5VqS29TPlRraEGLbc53iESJL+7/+PVuew9/N9tsPpAp8JmNkZB1IKDpGe1IfT80OyMVMwLZ7JeEH3IGiOFhB7oyWgdmUM40EcjoFDPpk3lpG8GrA7RTptBfTw6y7/GO5vYRtufw18+sjIP/mfaUUXRRzDzMPuOy/cAFA7NnnWcwe+lLX1on11hP5gGYOzxtPpJnHBxjxmkQumSM1inRcd80Jgdpz3T54/wrm+684spJWylbM07n0fS37ovl66Vg9tIRz9+JRkMZpOCTYfVNUUcFmnpXwQxsE030AOPTtL7dm5VRXRUbP0z6X7I/ZMExrOIYAFdhI3FocGXUBSJdPpJpF15aCmyFoxPL+pY5J188xIFrntGPGLWQMS971jMSUJSQdr53yjj6ryn7IwS0IqatF/+4ZHxeu4ATt9DuCQoJI3SdzLJIQ0J34Y54L6xCn9NcGsCdZrLvl0N8EzBJOpr2EvM1oQigxZdptkHcQ4NycyBKDYOhv0UkTCm05XNHzkcgNsxDYu/Msj6Tvyhuu7639v3v8+5mo4Cr4VfOYBqAm4DYfgqI/uPMj7/YuZRj1kNsBMyKJxfI0nqDLM01JCtjhlsRrkiXqoi5tJu2YfwQV0YRMmU2UMrIzip+up4BZh6ykOad0T7fAsTwYuiGbf/hGwFmUM18/LJtNvcGcC1uDk0wa9p4TshTKKONN+nxHenx7zgXihmUM9lYGniLEIS1jaYJZFIOjTNbA7Nt78oo7QQ1ghltGmBjX6plbteY2d/uBbO3uk3S5ceh+7fI1/D2yuPjX9F+6IzBbHPGYHZ6xmD2jPMMZi9+8YsVzIwxUlpPm06VkjaCiya2MNrirODTPQfT5BNs6uesLtW4N8K+A56VMbUbZrM+1lVdTJWviY0LuizuUQL5nMU8+0QrCmYvGfFc/O+HaiZ80oAY6mIvmZWiu6nZ86VI10e0A8wKejwRujzBZDuiLBYWA9HDQfCqga1YNBaMxTS/PHPmPRuzXxUzRMpwwmu3pFrXBOF/+4ynJ4QAWUAmChbSZlapNnKlBDYTKBAQciUUiHAin82mBjTAIWAPwRgFUD4v52JSpkJYpJaEUij2gF+81gqoFCRl5Y5lCsgJGFNX5HshkBmeAxW69sCnWzifJyzESks/+P7vTSXMbBQEMIIEcGeZXwNaHmEhgFX+paMstogjM02fY1sBtQBImW5wQdBa+WRDHw8BMxMWqT/aspcZ+4o6lLZa8VLYYt4VfgOrvdHGBMzbL1bxucQ7F0V/gDZf+s1u/fFuNlI16+GshC5uCM1rEMT6vcqgkEE58wlosy987AEyiTUzaTeemXCYcWY4Z6zZNs+NS+OWQGYW83kDICYwVrswEswaxaxX0FqlTFW7dzCzj7Tm8He9bf5PGgubPkazoeT8YeJDXtF+5IyTf2zOOPnHqZ3t8bTznJXxnd/5nQXM+hSJWj8w5qyzZZv2tdegCyAhhHNRG3VhFDtP0KBt554oz0dYoa2Cb8bbOV0yuR9atcdZly5flk6gat9Xee7Otk2OkmD2ohHPsUGByMxVJas4RcqEN5f+GPqFOctB+NJ+dV+sf+lSb8Itv78ck0rFDMQp9FipY/ICYKGnNhewD8KQYjJql8VqsZrwYWOB2y6mB9Byj5cD502pmG1b6GKkTT5USdPHy572VMPRbDCNeLKw3qZJHw/Lon3twGRWjNlSZ0Bc2yMMilW/Ejatr7a3XAye60fBbGkGvILY/PAHvR//sEkDyiy0U7VNoM51nEXFIvwUSD1ha1tGbgbqdGXsQQsLgPvjsOjGhkCXqmXbhnG28Aic9XL87G9nzcehdgLxDQprXRbQESnaX/xtbv3xb66oZuNeOzXspAKwFsxmmny6I67HmHUbSGtdwWwHXwpkGS7N2DJ9EE64Dae2A8xOFcRmfaplAmhNIhBVyiY4UkE7PSNAOzxBSKOW4fD3u9VibMyiCK7VMw+2x/bK+Pe8bD96wdLlP/U8g9k7vuM7vlzATIpXBWYci3MFY45EIFSVGOu2rAYyeYZei9ch4GHOVO9cQ+cIZjqnTgGcjxawtEgXxS7z5SqYvcDjWU6VKx9DlLOxAGknOSZj0oRl+EtVsA5Iw5em8pCKU1v+eE8dKaA56WLVdbFsB7hth7U8I229S6NGD9eLUackuiTy12b9jV37u7fKdbJ6Rntr04Dby57yZKSBNwvd/6sCEmZt1JOWrTqQkZBZLzQfIxNNEMDc53PFtG12GXPsZ2a0rXnU5/xinXfaJCYuawhmNuwhT91MMXeX18CZ6hlp8o2vNdplxvK8+n6rOyYH5BV/9MM+eIIVIAv1LBffWTgjGwXiU4pPAeouurNCWWhZxriCGVL8DEnmAbdEOiNPmxxX6lBRL4AJCz24MCb6KOsKZgzd478DmTm8T6WvXIl8v9cyn1CkuDBKHBn6pKy32y/8dre7Pt7dxskHSFyZwFYNZmhX+FrLwuh0ZYRtCWTTzjcWwyXZR5Mefzm+jOVGNasf4soo6fPDLFwgrNjjrAOzqMFM5g5I4z0GQU1sipDMXi2Twz/qVgvPmyJu/0H4EnDT23eFs7e7bD9+wcDsyecZzN7+7d/e3F0z7GU91ZMWoNSOZ1yjTTihEIH2LCos6PycLn7q3ifXdR2qc1GIy7TyqXQ1GRSNbX1fCTKuNhGhIKZgSXdD0+chGHWxeZwvXs+yD+clMHv+iGfYaKQVqStw0Y4ef2lDxWxbqWRV3zxXXJO22UalgFkWdX8yLE76vfjdF+XtwI0OJMDalbHY/TL2LNryaARKzH7hd/bBW7xaMVukzNrxlP03PemJvV7UZTac8V/RKldsAxCgH+kEE1xohqTyakO4AfIsrEv3MgO0LRywbaQpNa4zY1KhYx2NS9KXbAGQptlWjHd1UzWCHCYjEPhjH/VhHWDNc/vhEZtpPxhjVn90+zZVznwPzAXBbOVTi1ysJergTDADszSgpbZ6VgGKDESPUc6snl3x/VVdQ2I9i8nhjAC5YJ8uHLLh87+jBTOJNfs+25xcV7guNmAGIKNNd6a74oDNPjDzEyb80HT4fYyZFTFm3mVkLFLlN/uZVanz/yE3nV7M0sjyoYoZbfjfDEDG8T8bbs8xs5usP8w/+TYLdzMfdtQR05XxTS/bT14wMHvieQezDrrY16lmfTp5Xr/vowLEMYsuj1p2TdQBQHQBykM2u17u04rMY+/eaMV4hTVtMwVKbD8g0CljpU9gzAQAeQ0CpPZVYHbyXI9n2MaM7oyqlIlbI3b+JCGkB6HYuX5hQiASD77TKr2t8s60JccAzETmgxoWADETcmwxR4lTfRp0MXOyIWX2956DjDFTpax1Whqdy2JjU8SUya1jM1Gc6bSV5Zc98Qn2cj5AKMePYPsRT02TIw4iYZ9N0vuZsMriGb8rsYcm15/3Jz7mI6GYVX/kkG4IXyyr0gYw03LDLbbtbdgPLbz9FEudfQA4jg/fAVfMs7ekCWGpswWY9ajYr6IHOWZlLBYSKvUVi40sN4t63ne7LR3+Ehubb53xYgsKWV9vgYzuigQzr2LLcsxUyzqlbG1jaShlx2w03ceanUatmIVDFSvizaRen6mQAcwWsjZq//PN1rYT88+9zWIMM2vcFfftZeJIl7/dmr32Zfvpi5D8Q47Hn2cwe9u3fdslMNvDZmyg3b5rtPZsJ8zUENTPRSuMBeM1GGfVqoHStk8RpD3npGf09WxcK1gtJGLetF+NTWOZdifPGfY02+yBr6GgRhqoz1TOzOEjboAxcV0EjKFPPP+ynu5xesRQMmTcWOGuiHKHMzFkklDKcnFLZ975wZVRnJxS6RoWBS5Kedqwf5+9txOTNvS7bZFnTsoKZo9/XJHogljR35i3DHE0v/D/IyeYmhmfj/nj+XzrT8xcIWcFcprcpMXO8JUXvDdlf+A1CKaBZFv/HrP9pz7hY/QjqlkmAGESQ8aPNYFM68MtLOiSKOdSZy5S6cBe6lDMxFURk5M2n+0h9tTCdWwQzBS6GGcmZTIMF2s5tgazBT1vDTkJZpD/ihSRIYk/5oPSYEelz/k+t7VjmPtX2Nj8j0PBDOcGyAhi6M96s29ZjJGxZKqMZVk2lpbzka6MUM2aJCCMNZO9zaiaUTk7BsxQPhDMsu9Lw+1VVwN4/csmmIVLlsVY/19FxeyVLtvPXrCsjDee56yMz3rWs45KwCGXWrHjmO55S1LDNZ3xYNnNxB2ElGoPNZ8EteCW2NsBhqiC7bMr5ufSx+ySy687YKwBVpSPALNnD3vK0n9HcVFU+4DS5morLCOiEsALKhjLlcdfqBsD/0pHnYkkGh1pnTQh87lmIRFgM0Jb/5M6FbMOwNaVMd7eyW5HgVvHkFvKU4tZd06Q9QbMbrrxhgUqYfXlq6YV0HAO1L1zOpLD/j+9Lj/zKZ9QfRAAWW7mUWW8kbaENk25f2eMWWiSD34qJNmH5DOdNj7HBPosxxDMdHLVwlJVk000JLJU++WTropZnJJpetkvx2Sb1p1jWsVs4ZsV9VUwq8t0WdRFw5bjn/X9buvH/c3Hb9jJ5h4TmJB1kWDGbIyIMcvzWHdlJJBxz7Lt8AQxPfcujNlvs6znTi2rszLWqfPVfVHL85wh2FHGmgHEWMe52+dM20oXxjoO7dZwe7iZ/YktHv71UMzWIor3Z2X8z5ft5y7YPmY3nGcwe+Yzn7kUP3ZoNkWMb5UaxKAR2nitZh5QkaTegxnm38Bf/9x9P6psk7LEmhHmCKP1/Bh3VwJkM+dmu4J6PMHsmcOe3P9nRGwZ2rnHmc9yiG35LxSCEyFtGwXDiK1ew/RwmWyIP2btr9ngjdeKmRLjVsFM6h148dyCGWZCZ8uqD3WmExhQzEJvL/sJzkcsKWwvu+F6KFJSYPp1TXOvmyBbWDiyLIabO1LUm2nKfa0wUYY8j8n85HldZzKTU7ibc86aKJ/KUboTYj82Sf0vcxDb7MdmYx4uyVHCdJNu3bzZpFxsM20hgeVqnzYRbmIio2a7vn9m3KNuFmP3esnF4MpokiYfIp/u1Tav4RJ79rOf/snzQxF7gAuq2cDGWuV3mOyDNl1AqXK1KLDwKeFZYWqX3l4ALFZRpijvwC08JwaFjLQI1SwBbWHRvuWshHfLt0HaQuyyXfsAZuqqKBOWB2U/LrR5t575g24HHf5ettm8r22adPh9Yo8m62Lnykggwxifalm6LyaQQTUrszEaynIGmC3EmRHQGrUMMWeLqlkdY1YDmYBZ3fePDaiJ7bua24fYAYd/xwQzH0U0sjd1HnHFlfGFl+0XLhiYXXeewezpT396q4Bpcw8gvQvkgosdy3uvv3gN2mZaetOyuisSPDD+YCiTsQRLqmgcyv69YMd2zK2bXgdlzaB6PMHsGcOeGBWQeVOnKuaMK1MbuRkRUSlCYWuWQ8tVPFmhvME/e9KjQJkjxkySfADiRPYTmBO7GDWERf2/v4eyDsxypg4HJ5xZbmzY5+UktvytX9qbstR9jn/Zddci25TzR0DUkbFK1Gbdp0u+JszTPjy7ZZNiQaeZTCIE2FyRcLYH5uqJJgSccJMp7dmGJrSqV8AYcmRIZQdM+bIILOa69DphnoamsCRzl9SH4umIALOY09CL87kUto3wOw0oSEox11Ve0yxc5+jzvQ/7hc/+DNzR8/cUpAd0TQyialkJdPlaFMk69vCMaMbRwBnHhnzCE6ZyIg6du1fWYCNQ5wZWifo7SMWlLLvyjTwKmKtnwjbC2p7+Efx3o8k/gvJfg8HFIrov6af/sNthxyXz8SO22TzhLmPKvIawemNpglgDa47kH/N5dtC1oQtjk5WxAbM61gyxZXvBTMoBCCOknc5zSFwZ9jfLtQXVNOsVNCY10b6Q9TWp9X803J55qKee/9DtFmOw1Xp/bv1nJ2bbrdkz7mG/dBH2MRNAuuY8g9lTn/rUg10TD3RP7Mv9tQhlTjc/hS4zM+4LNgHHq+dQd0RVlmSPMV6XYFfFpt0lhGmq/NI9kv0sYw1sos1Kmevobcs2LZ88ddjjlUts4EFWKZKBuKpqYpcZ5qP791n1+awHneUwdvbL9xv8LXVhMmH21TTKF0JoUChTXRm5sArgkkxrMSqPUumqI1DcvGrPFWXiELleKmaa6CPw7riFqGkAtgV17abHPlZvxHmjzn9GCiVtEJbU0CYQ49La7vfMgyqT63CUu/gwBTpSKCbAa8C8eTJodgQo2OsGzvocOobDeDSQtX4BBWIvptuND/vFz/tsfkeRXVQFm2f2oe4KZjvAEihDrJl+eupPBerTTuAtNF5slvtJ8qHp9KmN5/VUBWPsWANcKkiF5NcA3MV2vrzk44WVqGqWZZe3TK4xj6gnGPwPUtvUoCb1p/6o28GH/zvzza/YZvNvl2PKmMCjUtPYn2XneRjBbTuGuis2QCbtek6FjNkYl10ZGyBbdmmUf6nyCKpk+rAmSyP7dU20qTM4/lm4Pdrc/sYOPPynEswcqfIVuvyu3bhjewXMnnDZfuWCgdljzjOYPeUpT7lqyCKIFOV6HJNqYBxstEyQOBokWT4v45rYNTczBbk61o2wJ8DJMschE2M77z3K28lThj1uxygFn8gDbTIGD0BdeQ8QjZtiSLlCgECf6UG1yzzdGXVxtJNH0xYKWZT2EHcW2KMsOjUNYNY4VvazbNpx2+a4kQl5V9wi2wBwzV0cXRkf++iUdXR7FnWXS+AAjPhO/THZj4v/2LJ1T+p39SmcJzcb09UuB5hCSqR7YOZHNR+Snl73YJPxlolDthnf7aIiqVthsWmbSfZEVdkk5X2oj1+OETdG5h0Jy9dXlLZUErGjmSuU5Sy53hwbSFyfbpXm3OJMHE91WwAXcN6tE/A+55Q/lM2bdDPfPd8vfeHnIclH//1jblDYvB7rki6/+otHOXDewjl495CYs6wnmFn5k4qLaraDN7Fv9XDYqEQHWY/iEvuljwvX8tjq2zEfrt6m2o56+i/ELLt6ok5WifmcBLOxNQuRAgXARB7UukBZoWU+5SfdrurwV7ex+QIk/wCQTfjSPclOCFWVKyP6fF7LN3tdGRPGSiAbNZBRNbs6V8b6zMepbji9LQEt2yXGTM7rro2ozzU3ShmBLWxn/0rm9uV2FYf/8m0WY8MfHOdBTxJAGTek3p6aPfay/eoFS5f/6POclfGN3/iNezBrIALVo10SYVteM9sBbAsT0SrncPeVMZfWtoMd9mG8mq+7ey65OzYQ2YDZk4bd0N/U9IQQwjnZF65egeQYCEbR/O/3PV6CIXAGlziZMKS9PFP+y4m6SH6+TzGTb/UQklRS1EnrIr1YoNE2j8ajdBXCKAqwripYJIRxQg2AYTHov+nRj6IgAwFIXOti54KnmtW+mDABOt1ni/FhpnFRVNC0nobYpcxRo6qn63DTxQbjwyzMEfMGlUriquzOjZdd1x6GAVQCKQWqaZmBeQenspYdsHnlcsOnx/zDmflZwYyTtQgXY3mNmPpfNoL7lS/5Qko0PZRtBMxcXRrnazVADw6eaXRhPERJU3v2J6RlAg+NDcsJU0lzLogLXQIz14yKZJitCksNkG15TVG7iviwoXV9uZsx+RZ5VIoZJhl72rx7t4qFPOmn3K7ucLPxhbbZvGoCWKeGyblVyJq9yvhI5exKwg9C2GjS4+vDGkAzABqAbNWVcT3WTNLne7+3GbM09gpan7FxWwPa55nba9tVHv7bt1tshoSPeee2sX/T6ZiujA+9h/36BVDM9HjkeQazN3zDN1wHMy32cLZyzd4MsVZath6E9EJtrNZVAtox4lhmVzSqhFQUOf/apZHzX58LXqvF93gdzJ4w7DqyiGVZGcYbQNOyMo6bbYcITWSUyL7C+2975R9JRDLPDPHa5vh84FAq1Ak7Jh8AN5dF7Ma6jte8//ogy9Q3Mf2jVMx8P2iJS2JIv9vQejo6qTtjgp/8jO4WFpgIbjP7iRcvwsse+XC47zVVtDQH3BE5RsWqPSMDvCFF8Er3/GxYM2a9H9Q3H7/fWu+AqO3sbZxAtXTYShkEX7+Av/YVXyrfOT4BCy6M7lpP+yWYyyPdp40f4wPBTLM0hrg13hnr6kid75Jp0ZltsfiJpXvUYNW5L6SdCksKbxyb8OQdKjbcvMeNkXhZvBMBwuS7FPDjlEUqgabtE3rFrD+Gm2++1cbmxQCx5ryQdXGzAGSSHn87pgo2eiArlTPTrIxHuDI2G02fiirWuDSKapZzBKB1rozS34PZwqbUbt8UG/tPx2Sj9T+53WJ0G0zH+p4up6dm971sv3nB9jF7+HkGs9d//dc/GqI4ZgVm+ufrFaYVhW7CT45pAG+dZAgkACpt17Jn+FqWZYi6KJbP1yl8rWLWwHKvpi2qon0s2snjh10zBSPsTVrEkAHYmOTDPG2VbZAzwwTGZDsw5Rm2nbb3Fjh63ai9oYGaRkLFf4WQSYlKVroCoZ0L4WISqNqbmw7IvHVl9JyAps2ny2LTzkVWKtvLHv4wCxP3NmhQ0iIefvh3VSatkoIUpYXm0gdiQ/Y/zJLQVlwZbpWGBdN7sZq6PEl51XAhUeMsRJOqXx90oAkqXrMGmACftNK99rBDtX579QUM+/Wv/krwSdA3jnWJHysSgngBcHBP1E9AZFkiMHcffbHjgxGdZhsBLqs/6Qll0hbSnm3Z75ndUT7lTOZhgbT4yjdReALO/pA6U+tvfELV/P7ajDvKsiLnS4xvZIiZYGv549jRIBbG7yaVBkUOHLPdaB9mj/85t+OOa8w332Wbzb33xpq5KmodiAmoOROI7IktcxcXRmRizLM8Dk3+8Y9apwsj66HltVizfygUNFXN+OCm00EQq9LmA8QCdcSW/VEMe4HZcZ6D/jczxmx4HUesmZ8i9lwkwWxr9q/uYb91wcDsYecZzF7v9V6vgxBUbRlcmjKqBz/XMXMgwPnx1+7LfdeSe2d7gcbVkO1nvb6u7+TGYY813tC4AloTR+YCYVDXMluj6Q7+GpKldVXK0BbiLagYIHaIT3LJsui6n5kuEpP2Gn+42BA4i1CKFEArmGXbPWAjs/AF71LW+aiETbdQOEuXRo2AWZtw4+/0soc99Gp2r1LN5RzsoyXZsdyPuM7xM+GcjnkeWveXpBJ5d6++H/WbX/tV+CB08oy6MQrIufjRISAq9cGQPclU8VIFjElAUmfeJQuROtPnmChjvpsc4Uvrblp3OSecCcTNfuEWMoyyTcU00Xz08ZHfVC6LprAl3z0BsZNvFyBuKNmbZjAJuDGCKstJQ1HTRd94NJiZ+cn15iffZmNzn/9302jCVpsen+0CY2IzIS5kzzIAGdLjA8r4sOZMhYzl6OGsBzO6Myqc9bFmIWvadq6MssaAYlac/zA29uLY2C/bkYf/3R2ujBv5sQsHf33kly7T5b/CPex3LhiYPeQ8g9nrvM7rLNyk9wqaxnuxD3ZNTBNgRNqavcvWY8cOjG3jRbt6f43leRyxlnpu84SkH3cJilva0RAZLEswu37Yo41hDL4PwgS6hFUcZV5PgEvYRdo0lb7NMaahXGJHeHOTw0mSyOWvwOaIMcMCosCecBDmLNMnk+pYrDNOB2ZO/Y82HT9LBkeNMbMJaSHxZutQRlsBs4c8CJJRr7xQKUGlGdQ29U9q68+3bsMhLrKYvhy8ct/GCa8flBVXp52KnYxfvgBmjLn375OMK1S93/7Gr2MA011DmiPOjADHsmwoHbKhtLoiRv3xBqQZ4S3HtJ9WAS4BMxOFbfVT335UJeuiwBiYx6Nz3SaYybl6idnXeMSLjRykSkxsX7Bc0EdTvqBTMrz+V44Fszljf30bm89owWys7Fu2HlsmQCaZFwXIdN+yI+LLltLl052RZUn+IRBWKGaqpDWxZoSyDsxM+1pXxtcyt883t6MP/4ebEsyO+4EqJpid/HP73YsAZgJDDz7PWRmvvfbaVsliXw9tHWCs94nRIc/Jca3SU2SCRH0NzOiSyLqocrDFXGHLvoVYvGPfh0NcGmsQFzC7btgjjcqYK4vA088pNuVZ29JewKy6NyBwRYMBaisgJ29YgSp+mN7kTj9MKmYLfOJmodAGiU/6a/nPp6LlS8qYC3jV9m50dlIwc3XAQnmnC+xf7LQJOH2F3fTgB5nP3w5CEnQ4Er3bTBphNlO5EwFC7EyTfLjFrk/SdkjmRJfnNZcNk0NS4vu0Rt72mBJRPo8zgYhLYorZFTnPnLZmltT2Xc6SkdqMbDAdSibzhEyMu3bsUaZAlRFfcj03x9Y4IclX5vOL+6Qol/laJ2diU+rd6zM753u+TQrVhJuOhCz6D0A4VvO7yHx+91u+2cxDKIAfhkotCwKa1Dk+zDJNPmLGGHkZ0r7PJlPsG74KEr7KTy/6tqbfBo6NMCoazU+7KmTKL+rpB4/AYJlfyCpKpQLGmRXsu+dl9yo0EODmBZjh1azgLBfWvAByjWt/1e3MjpN3s3HygQJiALQsN66Mci4hzTeZ8ENiy4oYsuzLdtOzuO85sjBKFsMS0GJFNQOcbXlu9zYTOCsSgQwCGetXB2bbYe9oG/sIO6PD//HPjRtM987eDjuC2T3t9y9YuvwHnmcwu+aaa1Zc2fTo+tqxq31sQ/xWE7O2DmlN/dzYVmtx99hutzQ/7nnxXMe4MSaYXeP2CLolesEjxriygbgyqxW32ANmoXUVocg3NcwJmMnhphMuJL6SMqWMBdAnU8FsKypZ0JVRH6HtRb/IgrKYseKtBTCjY5OLo5SbabSKwhZgDBNdgbTiJunmBz7Agv9qVuKtpCRVun4UJryY1AvFxirPEoyrSu3B9WHk/hlVIV68GGYxIS3X7QlEYXxGuSZVrGgmqq8HrbGG4j3yYNzdqhqJdeP4vW//FrOBwCV8IBq1X/rRptfix5NxY3Oe/c8WwAj0dROVcmNHW/3ki8pWAVU14eiZR+1d2iJjzIyQBS529HGVFDW9VcywGGqX9cTbvmt++SzBzMxP3tX85IP2KGdUzBCHtlcdY9sVNayOLauzMprZP9ZAxjKVsj4BSBRnlgXQTueZqfMV0ghodayZghdjz5p4M4JZQtkl+wgTUjkezH4fYFa6y6O9+JbNdPknD7Q/uGBg9oDzDGaPecxjelBoYr/gmrjkujgNsg/1NVDo1CTWaVvtkyaggXkcC10AyqaO+R4Cr9oNUQD12ravN2vqwOwxbg/bey9AQEOSkDCpQ3WL3FIsf90SsQGuiMk40gd4QxgXeAbp5WTiXk2s6pM8/93NkboyRjTEiXprA9ADmNEji4DW3so1/b5/wuLSGAWYSQ7uZsEve8D9zMxFLUk1RfcpEwVNVRtJH68phDUtfLgkv4hCsWFqfd0/y+R5EqjmNc3cXK4vc2buQYExB8wIYADDErhc9mtzsQnXieccXeK7ZNLSduUl8hQEc4Wq6skEseG01I2AlCqkm1x7zjoM0Cc5HF23Dti14tZDtwjAZgX6Boji+Qff9e3FHzbS+rmpjfRJXf3rlAosTG/3gQPQlvmXz1gz1ZND488IWvxE40xb5mJ1Uc401ky8+QSo4spZ+iAkRcsy/MgXcWWipFXQpkk/qrdHbUyOlPKIzlUWk4giqE4mTzXtMb941mBmZq/wrjY2H8SEHu2+Zb4nTb6z7SRVMMaW0Y2x3reMDzt7V8YqK2MTZyZQJmWBs/yvo4pZQCFDEpAlMIuEshP7iLhkdrZg9uvMytjAmKO/UsweaX90wcDsfucZzB71qEc1AHA8nAE4VutXBV2r9SzStXEdxNbVviPmuLT+I0B1dTn7FLoWzB7l9pCdOESoIuNYHX7lDt5xtel5RX/vLFwbuRVPcS0ecpOTZAjE6XGmts9F7QWrgMQHqoS6JoF1VMxCwMxtY5prMgBnDqeomHYudpI6QMZTIeOtpVvUaQ30nRBYy3JG5bzsfvflP5vdjboflIqdB274m2QWUkbj0akqBNL6VWg7c4isZ9vn/25ei3XMqdmcABXUhTHXXzIa9OZsVSgvRvzh9323fCQBYlTua0ATGrBZR6aJToMp0uYwx6mOU0AzSRyyVwETR2Z+6l3sQ10ady6PY9ZyjDCJxo0pl5A823MpNtU/HjkZeM9q+daxT1OXeihFFsSZi0MAHWxKAn3Uz98dYHZHecIZYaxLh492AJn5sBiDQFZvKk3VzAFqBLKzSZffpM1n6nwp14AmcCbeNEuxZoAxhThpi1TKTszOHMxOf95ijO5bXq3779JtmG2usz++YGB23/MMZo94xCNWQKy0qfqpOi2pRRizChdHqVuon69r9GoX6q0KNsvOOlW1xfi11b+Vk0e6PSghyh3qmHCNa7sL74idC5BlEsTkEUPWRWt/jNU2EakQphVM/hHW+yyRIg0LjwGgw21DDCFIU9DSiaoEKMlBdCF0b0xwUzBzWYnAF+LFvLaVWYesVO3KOy84ZxX9cgs6sTnHCNCd2i33va+EZGXoDrIcSjSUHDIAm05LqYMlctjy/8AFWyo4vrjJGIr12NpKzpxfny2S1MbLHIirPeiC4BaOpfmw8Y9+4PvwERf/t05C1nI1PsnA6++guo4yIi7paKc/MrmqXtCHOpQJc2ZxlDG0X1TxuZgUm3SMClahTCMqVxHyZ+qWqAkx0SYrwVuq+8Pz5zxj0BsXsr7wR/7c3QBml/LxruabD2pcGRsgE7VNVDOBsQrIBMbQpzFmjoehvUyVj/ZgunwBsezrYs1mX+PGiHZxY5zr6QGtizETKLtkdveA2Y8TzJrv9k5Jm4rZ5sn2pxcsK+O9z3NWxld6pVdaB4vehlkU1YYug2U2x2pcNx+1p1mbHr+pHwNVnH9Xby6D+bZGzKZoWEOZVKRaNy4PcD747+LSw90eYAMJDb0Qi5i40OAhCLCTa6b6hX+HAC72zdVupZ5lCFT4LhP4gt5kPvt1YZVcWN7wuMIWIEwmaos3QLTT8Uv3lSGgBTsAGlMNJHi5WX+b2fTlWWHM5QW4+d73Mh6a7CMY6eQEIsQacX8vlHWIZbv7rIsVQpok9kpsZO+wfeM4Xb0C5+tiFbMOUyy5iXmTOcz+wO5nc15yPV5DrYt27CMXfE0Y1+dWuDUmv3KOiEWTBCI5e/UxZU7HP/mRH5ofTXFdNNMyXRyljgfb83tNMjISrqL6+YKfGIEz3RbZFCnw80qt1tsCZbruToh0P2bef4SLBcxXXdqpugm0ifiIWTkBC7MXMEv7jeSE2dgsC+BVE8Ai4brYLJpfxA//mbsTzMzi5AqcnTCmrMvGKGny/c4x4a6p8JH8Yz5WXBizv48vW0uXvx5n1j+2dbZGqmY599BzkwQkFMzmfGPYO/gl+8h8i+4eMPt+i6HRkgQxQ91xJpg92/7sgoHZvc4zmP2f//N/GuhahzU2M7Nh18b6WSpTfdv5v856G1WwZRuXqlLjMXO69DC3+5NH3CSGDFBmqpTNMtuVLOjKuP6vci/QoayH48k7Bay27e/YhkyqucFRt0UlSI4NBNhBMTMLRJG43FcGokukrHW9lpS9fVdEAUv4ShCb7w7HByjzlnvd88q6MkGFfGdo9j/dX7PdT0sQAjqaZAzUjwpimZhpUEPeVJsLNxdRD9MSWMPcdWW4Vg7L2DK1LH0y8VzhCihOYTFf41mWsfIqzU4AsQNOM7bO+SbMft8zv5w+Ywb1ncIKAm6ODgEwJGukQN+f/viPgE3o1th8nI3tlHVyTgJQUMAUvEQ/lr7G5VrKmGQHXq16ZvLpV7ALE45WDz+dSHLOIrjlNbTPAV8yW7wlgDQH1IGxRVWTDzIpUReji4z9C4yoF/zQn7q7weyO89va2Nzh2nhP2Z9MYsugkAmQZT18qmUKZl7Utc3PwpUREHa8K2MNZAJjVMq0nXubBUGs34D6T7duH2iX7OP9ktndC2bfbjG8VsXWHOCzcboyvtj+4ozBbJwxmG3tbI9/d57B7H/+z/9J5UrVrMZtDfFlsLNm4FI6+uPh5ojnOKfXb9quBsiyzja6RfJy3POsaPsnD3G7T/BeQN0SrUiLn2UD+0xbU29B5RTP75c9NzGaaZ79UTDRtIfsAhXMOfn1myLXhcxypXiZTKaEtJAFQgI0tJnvVmDl7VeYl26NJn2hCbPxW7yCzdb0bCjrYghpBhuOu/me/9YUOtxCYMcl1bpsXKycEiGZEyfgSAIOuYp8VyUMSRKQSDtNf8//jbMa2jBLkH8ijKKapLCX9PsEMGGZVORd1y1ZFomVeA0QZzYbNJFJzkAxLITA5Lks12iOrJkJkki6kvPIJ8x+XXvMM4j7zpdSNbxUNZG0BBiZQtqf/dSPXVkHgYvyi/rXeTRghjIRYKFsaCvtUdfYMU4Gk8XkNnVfGacGNsEk1hYgafWlT1PxDypgDq1PHgpf5aqDfXSf5YTzzMhAwpkBzLDgh/zkywPM7mi/znzzf9s7CyDJkeYKv9TA0jGfmZmZGYLM7AAzMzMzM2OA/ZuZmZmZme1jvmt1uuOuOubtF1WlVWzvrOZmFaGVKqtKymqNevV1pl79zGa9Ww5kMUj7jJBBFGQ4ipatBkTIAGiTkbOGKmM/lRG26VTGYm8BWjut8ale5GwrBOLAhTXVBLR/K5NH/5UOpCsOZusfVUZoB0uJmL2l7jllEbNblwxmb/M2b3NFQIE2QtsxAJmdCyl8/XnR4kpC0hWFsfm2K3XdD583dGdhEASHzBaerojtYG3YPoxnkgEi/rfKQJRxizGLv7KVeJivOkinCGys40pVxqQ8PqGr+/xg/b291TuQAbgsUobHN7SpQBphLuicl7k6kLHMuEFZH7n1Fs1f5s+jPH/y43muJEp1aX7VUxgvx6/+KWjse839diXr2KS/P39803Uw/t8f/6EUNYbJI2AL7NfYRZ0Js+xnhjkAxrZWxh2SkgaT+ZEpKXKlw23C5DeAE2ZKiorzhLf0lEUMOEmbAvOCgyNsFGm83IKxshXaWsTMFBjVjoBRglJswzxySc/3u8cFZtrsv9xm+zUa9l4HETJbUY495TBA6ANABjDrRs7kwNZOYWwCGfdT0ymNjKIhUtaPmNWFQHKopDDi3TPb/6Xc0wfFgf5is9XxgNn3EMymUxmlen2upeEdde9pEv+QdMuSweyt3/qtjxUQKGBB4Y9dn+809aed8HUM/jqY3ZEOZggSSZjyi1k4LPvKiFlnXTfKssmkVW3DpQtaqGc7wS6vJ0whzMeyzz9SaZ+CKkpi5qzwRzdCF99QKSvbel2UEaXV5dFjqM3O5E90WX8kLdjh2nNyhUY9csvNR5GckEVFisEl1UXdiDT9j4D8u6Tw0PI28uQS+KlQILIEyQ2b9JgC7mK0hsRS0vQ8npRmKyYFI3CZUpQ+fpa0d+aipQdiE2iHNbBzMBUvWJeBayGFpSPKo3UZFR8uVk1ETN/0WjxVVHXFRcq1ZJb2Ic6xLRvLPX/+J1Igdw7lyd9ZVGuX7mwTugR7rQ3r2G9tQIaQn0fFZnyH1dtmGZarx9OZNlXW2zCdMVS7FMDGMA+dmetljMSWYNguj4gz3VHmbLYGbAT6PL99nGBW6ve/U7H3Ln0gOwK39RAXR8GGFpBZmSuhbSqVEXA2VzJ/lbB1117kzKDM2qxjWqWx1H+7DvQeufcMjB0bmI3frhwGAthlRMzeXffvGMyGHYPZeseqjDctWZXxuZ/7uXcCADuDC6tegC+wL9GX/vFp7rTd5Wd++Nyh2xBgwj7EPGRlQexQzBi0iJcM0rIBbFlhHoukKWy/DmZwjNExd1DMhZoGutyu2Qct2hMKjIK0fsTFdQAvSVaWwgQ9PGJGCPO+wVRIi3Qx2iUlRMDlUTHI6ZcBw/7YzTcXOwX7VFdiLBWeFgdZ+lLnaXv2eWVYX0mOP3gfiwoajjPsJxHuADgGUiAVg6wjkAl/5y489B82UhG+lEqfvNnAzlITMxQOYMVpzlvGsXIcyXfyDEgzRJA6Oi6B0q5Zcp468fM02FZatM7nfUvd+5d/LgVy3nw1KT8LybAMLgLj9KNk/dV+4rAEYAKaxb25uhhIVqNk/DmmTZ8VqEKUTHKWcc5BBA0RNlvL2TAbAcEL3gXeJ1NcHD0T0iLr4T+RKPs43aPQ5/6t4wez3B822/fcrF+iYbihAmT2btmgcahHyCCPT1Cbn8qIiJmDWF/449JTGV0if6QqI8odQCty9913zu7PQR+R+/r2OJCOH8y+nu+YsUVfqZHqusP76YFTBmY3LhnM7r777vazNo3HCRaoRlvad39+2q/iOfpMt4jrRdvh3aFbGPmSTKAQ2YHP2AFv2z7bdmqnMhK+yC/M9PN30kLIIKwo+rlD/ZRG1aEs2v2aYCZZlMxEPNJJNJxASxuvK4N2j/CuWHQf5cL3t1sENtMAraYxRz06VeOTLKdSAqQ9duMN9Rufsn+Z7QYst2varawYZT/TDIkJo9V0eF4epkemUE85jKrPBuW18VKRki36io+0TQ+bpvbF6PWjoe5r73z3//VfSUGYqoKZ7XNFvfgwNhPIEEf2ffHOUWhUerzb/irMhp9V/I52u9e1wCySIOYrUhZl76Sp9EN7ZgbGNIyxDvtgaPnKZ1SmL/Yxum+z/nf/xrGCGSJnL7hZv0+x90rV1MbY0+jvlNXEP8LLUGkkgBHYNA1nhLH2e2bNra1m4ztmBLLaPgRBWtGyDP2O9vSO2tc/b1bpaoDZ+suVIVp76oxYCGYfrgdP2TxmNywZzO66667ph33MP8YOc+o4V9mEGEgT0FDnBR67KTsfEfI6r555fvbp101HqdjPyzEVUVwArB7eGbo5wjnGAkwENkIXA1CViJscuMTIl9lMed5V0cKzAlWFOyxRX6MW7uPWwIzQpqgMpEaYYBmZHQO3OkgZ4VGr2AaAVVjbgWxdTXIKT2WU+o+Ql7pWoe7RG27gr4CMlFm9gxqcZ9NgGbs87uT8ZwbNaofKEEvr++WpkkL/Mk4sJlyCaJYfvGpJBWxwnT23BYqUII3RjFbrJZ6keYm2ETU7dm8qbNEXU5184O//FvDl+3yyNwIQJPTrXxUMNBXvkNBr+5rGAOIDY9lccXcPSty5/dxM13Ttskh95VzO9cGZpL59rIQuSSIfi23gubUp58GzLCJmCYVGdzwEKcpsr3f++lUEs6f3b5T2P0bD3sdv1j0XAElLYUSErBIpQ3nbrzZ/mSkvXpJUfqCctt8DNKY1psGYRc/GJIwhkubKjQZoY5Yo2VHq4mpT/hzt60tiXw9pX7p6YPZ5/o5ZG8JY1wSzT9BDp0H8wwDp+iWD2R133NF74D7eugX0XVLdCR7n4e3SjYSxCIMthzWCGOoYrJLVMUqmduSMDz608RkDC4myvTJqhrUFZv0ByPYBZ1AygQgIyaAR8QK0CWWuatraT2UNO1MZIZMgOZg9dv318iXtAT6Eiaab7x9BYdDUC+VAQYVCgoFBIedarvpg8NCGJKt3+HP5ekMnjJlpK4RM9BXhrf4Z4TPEYimKODePBml/LJz/22xlbPCcUNr8rbhNuaVR6MF/+PtL+iNHPaiBt36aPeRzmcm0SIVEX7MxfbF+N3kdnGAsOxgHL22t3sGsIv3jkGXXDGuWoTfta/bllzM/2onLgnTFyfbdOCYdp3M+mOz3u+PXrjKYla32X0mx96kb+1tt3zkbB7XfLZuVwohVu0xltH0HsTmS+engZeUGkHHS6SIG8v25p8/Wvv5oexmuLph9ijIGWLuS+S2JpSL+8Vl65BTI5TsgXVgymN12223zIWCh9buHoEVA1Em8Poe3Sdfjf0JkASKdhABnwSgvy7P8BuMS8AwjarIImbL9I2//C8B0/rcd/UU4DjhswKjnwEs9nMkKmKnSxuoktEnxIXlQwAP+ds4URwKbzA5sZUwAZRMCsTo8nqKP2x+/7kLxoETjZYGYLDX2PpS2MGAy9xJT/YotTAQki3/hc6VlY9LorEzgXHaMV9IiO9DwVxRnMwy2w+CwtMtUIy3RjiVJSZAsY/aDbvsHxmPnd9DzY8bWFz8cEy8pSJKSKpN4R4R7aJNc1993k/Ji/HNxlNKZai6cKoDDffhf/rlDAAbZVTAzcZIwOlD2I2aELaYrlrp6vZR27R3ipCCAAbJwxwPU2If1ElMW+eVZilVuwXtm8npnHUIXII2XAKqLZenF/7C06bILbuzL8m2/sggwK32HTfldtZnzbB3xUgZkJUK2AzBTe59wNjmXWXK/JfwBe3ttR8waKY2j9GfrQZ8b+/qu3FdqT1oGmH10AbNkTd02lXAVX6RHT9k8ZueXrMr4pm/6pscJR/02xw8sKSl26HNCafJS1CiraZI7/fyO/zM+vEW6IGcSwBX/d2WETNV2Bm4MKJlNFeEPsZ3d6MX+dDm6XwDRWNXZ5xwBqtOq4JSyMsC0thxkuPP+oGSG8LdM8IgGr1BvNoyQ8cHkFUBcgGXflxLIzIE8ft6+TsFAShhh5kJAqFujBXK1c875T5LdW+jQlpr3PeP32YrycKDfmpw/+c4ZD8WLNu1r6z12y1LF8axj1o+Jcz/y7/8qRSDSFTZet2UlpbHygpPE2a0dgPGXnu1Hfo8dez2gbi1BJ1VMYTRwM/CyuqjCGePoTE9E9p8uhrYkwCHSlvV2li3Ky2H2IDejnAS0FpnZILRdG+FAcSAdYLvllxYCZl63d+eY8THjoPccQzePg4NXfR6z1ZQqowBsKtvWu2YEseB7ZdOpjG3Z/Eoqo8OXlU0YhKB2z2b/W8bQF+W+/m/70S0HzD5IGZNfsrB1noKHr9FjpwzMzi0ZzN7kTd5k8eDFdosHx2uf15mbpHMMFAVSEZtP+oSwWltGxLBt2sg5lfbtwUJiTe3BzNrP0LTjtXxNtg9G2jAYj4bRk5CaUbB2P8oIdBw32KFdSkbZ2K6sT5w712aGdKc8whMGg0CsGiaxlXnNY/ji6obZbML+cJ5NYK+TD8EM8vN4rM72a14dYRSey3fmECAhkAZ2w/U0Of6gSmX3c+2bHv3P/+RTfO+7iW1ADAFYc9/480TZNuPM1tb38Wn5pBRRiQ8RzvqDYZRNqGd0C5epEUgKF/1APzWgLlQBsKTX4OLWKO04fIaFU06VtrXBeR5ndr73bv7FJYKZxgytpOdehT58DL3vZr1hTUDju2ZcBwewqVTGplx+WwAkJ+GsrtA4Tz6fkbL7V6mvH1NfuZL+cwz/WJcEZu/Rn2B69jtm36bHT5Mqo6SzSwazN3qjN9r9Q/38tovzYfnnX46/lXZnbtiswf8ZCWrh6UjQSmDqYi0QZfWZdo6cYByWAW3VCAycaxMjSZSO98Gs69hkG9Y1QxfVVETxt3SkyzHhSYQ4vkmDT5sJWmnncTvr3Pbk2bN9BmB59lzDu5p6moGh6ZhYTNdyf/7C7v1I3HxfCWvkyPaxYJh/PS7n43j0f/7bYarPL2JIJiSGcVSJnPGv2e4IWSpiLYomRQXmsoBYAPYY4/b99sASNiY0i495iZRFBJ4cxIJ1E7+kRU553Lc1Ey/A5SjYOsPW297480sGs2064QuspA8cQ+/9dASNE0zLImcGbb3I2Xw1Rtra6owrzUllhPgH1BotknbPZvvNo/S1K+lftsdfLJjlO+N+nf7C7Co3xnfpiVMGZmeWDGZv8AZvcNlQsKw+186xgD5nrpcO0n4wJsOUuroWRiLzT0yDRATMGCRqYDaU+uyDWklnpH4CqbIUWa4TZBvURDCDUwjvyQcV7ffPJAxym98IgQz/TZyQVa1XHdjql1Brf3sGcYGymicObOzjMbbUU2fOqL3wwlHdr96+arU9CoCwsV/CssEYgn70PWAly/MWHmBHXaDEmNKESBhUG1k5/wq13YGx4gxbPH7P/+G29H0CmdkJYxa+8XJZEBsW7wxs2T4JadX+HEgakvTfJRN/nql+A0g1CGMwyWxWH62+RR6fX85DdC6FyNH1DFLWd5biiJiiOH+73b/+ZxcPZhaVep6nI2jSO42DnsejYoycTacy+vYy4Kw9yfR0KiMhDWBWQO1fR+k7V6mvWIX+k+daLpi9JVLwY/o/j+6vcj+qJ08ZmB0uGcxe//Vfv/uwvVQYWKKfvWkDdt5v92OTpF19JmcuSPvOLH2uQSBKUw9I7UCTsM+AE9twm92wR90xlvttaOdA5vy/Xx1Yu33LU8RKfEsIq7bxY/Qd5rb08v1+/6cODzHjVvDwrghwlIEUDgPbnq5G6H5ERd2dSyi1xoTJQazT9kAhqipa00jLx+N4UhnFc3MKCZYzeA5AVayDTeutKErgUQNbn8h6MHgOpl56f2HkooK+phQio7TPLHV11U0C0NbuipDbj9vB+8kH7qs/9WsCzISXnSo3SW1aAjWiYSER2BBdk0fYFLxzNNjIQ+LdAmkM8wEJyxgIvynsY1oLQ2eWn1AHppW1Cwd9Czqm5J7zkqCM9hAsDfJ6+B/jmhKhtTCfb3GctR08pQs/cyLADDBydiW9/Sh99Bh6eUjj10VAdImpjLZPQJsvmV/bB4Blc16zPxylL1pJPzCmnuBnsXwwe1Olcke5AyHFz+qpUzbB9MGSVRnPnz9/xaCJ/Y//OLsfy/LHsIixnDknDSKIkXOi9ZJ/G9DClRjdH+vTg7AuMgDiGmlaZRsTuDNNoSTMKngp6za+LCcMIKflLkIBj7ZWAdQCHif6uaSCX2U8eqJvVuuR2oj9pw4OdDKWXUa6rg2J05vtennywQe6tzIowCmi3Vb1VMb+d5BDGMEMcFw9BiNdVVLkPu58/4lh6F9tDmRX+znlsabr0SYrbfpOsJzzB37+p04imG2h5mAMvcIovfVKert16MXtfbICa8eUymg+IqURcNaNmP3l0yAm/eAq9UdjaPRxnywwe20l/9b6Uvk8Aoq/rtUpk8vfXzKYnT179liBYPfHXKC/1z4DSzirPLtEfd7fajCpAm7RytwLqHv7cRJpkXnxjT6pZQAJ9H5Yb0YdwAyD8f26yIe8bbjNfMw6RnH+sWp0jCqCBDFKaCTK4UlX1hPHtFYEP68Z9/YsgmTXrqJEH720Nzxke1PELo6k95U26nasanpSall6oxqhueSVqY5ZYfv1ub+g9CGEqTg5dW/GMwyl+E+JEX4A7nDaRQq7od1duqzgmGtxsbz4/hT79LN7nnrkYQKXlREZUw3Isl7XmtOtVsaY6hCGf/mXhrIIagQx3tP9fmZDsIn7c3inXtf/9mS7sHLUGZmXtk3+jJjNIUuUz/7ESQYzQtRrr6S3HqU3G0MvV0tpXAsRtONKZVQTxv54lH56Jf3wZv2Ni44b0skFs1dWKnd1NCl+X+MpA7O9JYPZ4eGhektEUMI9vTxnqaTr9Zqzkv14vPax559j/jE5xvnjm3/e+eOLmX3qkv/Txzo4pCV2XK7zzPzy3IuBR5u2s/36yxhIO0rW70PjLIxst6dt9lWAb1BGRPvVsKewecqiO7kmjo5UJwApwArJcMm0utK2+MBzpM9P5gxWfA+DlBBTFw00QoYeDjMGug52qrzHBfjKymM6/xYzahDo7TipM2GiCu82vRhJOpSmmQGWtLrSz+Z1C4WnM8ITSZVUcQFcV0881vnjTrNH/6bJif6VGDEPlhWQ97L35c8pgC5eBxzZcaz+g0P/JwYyOtpkhdFp876+rFsfNRfAVr9dv1GyEZ30UTfa0X74Y88WMPPtwUp6xVF6/dUzkPbCo/SCI1Ma56cymi8zJPMdzKR/2Gz/brP+3Bj6xVH6o1FarXiOEw9mL6Ws19h+zgCzP98t+KzX68HLv/d7vzcLzF7lVV6FD9a7BrNhyWB2cHCw1OjMyfXrml/7+62a6NujwhytJaNhn0/Cylmid4CvuYPsDwR1O7Irmg2CJQIW29vY+ejY7kdEIvwkW1R9XQ/DjGs0S90Qpba13eT4l7aWYjMEPF8ecf6YUb/8ZXzyidnfVxhnv712d4t3+/QdnlE3Q6gGjXYxkMj5o5hm5LlLXv7VOvjRZyGYAZJC58bUq4+hWzfltxlDt4zS65W+F1rpjO1oWV2RERGyR8r2l1ap+8fQ92+2942h39y+M+bne9aB2WMvphwuMZUxGc1P/Kca0rm/Ue4YzGLHYJY7BrNYMpjt7e1poYCgk7tc+7yG9rNZ3R79NnN5hu0ipTz2h+sZDraBoe5ozhtEX6EJ/ZCwN2e0aA/Um37Q4Ui4zYjdX0Ic4dqyK148OZ/zelzNH98VXnImFmXbMaak4ohxZd8lTM1eIuefPGYM4NgGs/fDpwHMNJatlW8v5TcfQzeUtm8yhl5g9GMEwawp/vEPY+gXRkkFwH6unPN/N2WeW892MPt/EVUthjBzfnYAAAAASUVORK5CYII=);
+}
+
+.minicolors-no-data-uris .minicolors-sprite {
+    background-image: url(jquery.minicolors.png);
+}
+
+.minicolors-swatch {
+    position: absolute;
+    vertical-align: middle;
+    background-position: -80px 0;
+    border: solid 1px #ccc;
+    cursor: text;
+    padding: 0;
+    margin: 0;
+    display: inline-block;
+}
+
+.minicolors-swatch-color {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+}
+
+.minicolors input[type=hidden] + .minicolors-swatch {
+    width: 28px;
+    position: static;
+    cursor: pointer;
+}
+
+.minicolors input[type=hidden][disabled] + .minicolors-swatch {
+    cursor: default;
+}
+
+/* Panel */
+.minicolors-panel {
+    position: absolute;
+    width: 173px;
+    height: 152px;
+    background: white;
+    border: solid 1px #CCC;
+    box-shadow: 0 0 20px rgba(0, 0, 0, .2);
+    z-index: 99999;
+    box-sizing: content-box;
+    display: none;
+}
+
+.minicolors-panel.minicolors-with-swatches {
+	height: 182px;
+}
+
+.minicolors-panel.minicolors-visible {
+    display: block;
+}
+
+/* Panel positioning */
+.minicolors-position-top .minicolors-panel {
+    top: -154px;
+}
+
+.minicolors-position-right .minicolors-panel {
+    right: 0;
+}
+
+.minicolors-position-bottom .minicolors-panel {
+    top: auto;
+}
+
+.minicolors-position-left .minicolors-panel {
+    left: 0;
+}
+
+.minicolors-with-opacity .minicolors-panel {
+    width: 194px;
+}
+
+.minicolors .minicolors-grid {
+    position: absolute;
+    top: 1px;
+    left: 1px;
+    width: 150px;
+    height: 150px;
+    background-position: -120px 0;
+    cursor: crosshair;
+}
+
+.minicolors .minicolors-grid-inner {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 150px;
+    height: 150px;
+}
+
+.minicolors-slider-saturation .minicolors-grid {
+    background-position: -420px 0;
+}
+
+.minicolors-slider-saturation .minicolors-grid-inner {
+    background-position: -270px 0;
+    background-image: inherit;
+}
+
+.minicolors-slider-brightness .minicolors-grid {
+    background-position: -570px 0;
+}
+
+.minicolors-slider-brightness .minicolors-grid-inner {
+    background-color: black;
+}
+
+.minicolors-slider-wheel .minicolors-grid {
+    background-position: -720px 0;
+}
+
+.minicolors-slider,
+.minicolors-opacity-slider {
+    position: absolute;
+    top: 1px;
+    left: 152px;
+    width: 20px;
+    height: 150px;
+    background-color: white;
+    background-position: 0 0;
+    cursor: row-resize;
+}
+
+.minicolors-slider-saturation .minicolors-slider {
+    background-position: -60px 0;
+}
+
+.minicolors-slider-brightness .minicolors-slider {
+    background-position: -20px 0;
+}
+
+.minicolors-slider-wheel .minicolors-slider {
+    background-position: -20px 0;
+}
+
+.minicolors-opacity-slider {
+    left: 173px;
+    background-position: -40px 0;
+    display: none;
+}
+
+.minicolors-with-opacity .minicolors-opacity-slider {
+    display: block;
+}
+
+/* Pickers */
+.minicolors-grid .minicolors-picker {
+    position: absolute;
+    top: 70px;
+    left: 70px;
+    width: 12px;
+    height: 12px;
+    border: solid 1px black;
+    border-radius: 10px;
+    margin-top: -6px;
+    margin-left: -6px;
+    background: none;
+}
+
+.minicolors-grid .minicolors-picker > div {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 8px;
+    height: 8px;
+    border-radius: 8px;
+    border: solid 2px white;
+    box-sizing: content-box;
+}
+
+.minicolors-picker {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 18px;
+    height: 2px;
+    background: white;
+    border: solid 1px black;
+    margin-top: -2px;
+    box-sizing: content-box;
+}
+
+/* Swatches */
+.minicolors-swatches,.minicolors-swatches li {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	overflow: hidden;
+	position: absolute;
+	top: 157px;
+	left: 5px;
+}
+
+.minicolors-swatches .minicolors-swatch {
+	position: relative;
+	float: left;
+	cursor: pointer;
+	margin:0 4px 0 0;
+}
+
+.minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
+	margin-right:7px;
+}
+
+.minicolors-swatch.selected {
+	border-color:#000;
+}
+
+/* Inline controls */
+.minicolors-inline {
+    display: inline-block;
+}
+
+.minicolors-inline .minicolors-input {
+    display: none !important;
+}
+
+.minicolors-inline .minicolors-panel {
+    position: relative;
+    top: auto;
+    left: auto;
+    box-shadow: none;
+    z-index: auto;
+    display: inline-block;
+}
+
+/* Default theme */
+.minicolors-theme-default .minicolors-swatch {
+    top: 5px;
+    left: 5px;
+    width: 18px;
+    height: 18px;
+}
+.minicolors-theme-default .minicolors-swatches .minicolors-swatch {
+    top: 0;
+    left: 0;
+    width: 18px;
+    height: 18px;
+}
+.minicolors-theme-default .minicolors-swatches {
+	height: 20px;
+}
+.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
+    left: auto;
+    right: 5px;
+}
+.minicolors-theme-default.minicolors {
+    width: auto;
+    display: inline-block;
+}
+.minicolors-theme-default .minicolors-input {
+    height: 20px;
+    width: auto;
+    display: inline-block;
+    padding-left: 26px;
+}
+.minicolors-theme-default.minicolors-position-right .minicolors-input {
+    padding-right: 26px;
+    padding-left: inherit;
+}
+
+/* Bootstrap theme */
+.minicolors-theme-bootstrap .minicolors-swatch {
+    z-index: 2;
+    top: 3px;
+    left: 3px;
+    width: 28px;
+    height: 28px;
+    border-radius: 3px;
+}
+.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
+    top: 0;
+    left: 0;
+    width: 20px;
+    height: 20px;
+}
+.minicolors-theme-bootstrap .minicolors-swatch-color {
+    border-radius: inherit;
+}
+.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch {
+    left: auto;
+    right: 3px;
+}
+.minicolors-theme-bootstrap .minicolors-input {
+    float: none;
+    padding-left: 44px;
+}
+.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
+    padding-right: 44px;
+    padding-left: 12px;
+}
+.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
+    top: 4px;
+    left: 4px;
+    width: 37px;
+    height: 37px;
+    border-radius: 5px;
+}
+.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
+    width: 24px;
+    height: 24px;
+}
+.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+}
+
+/* Semantic Ui theme */
+.minicolors-theme-semanticui .minicolors-swatch {
+    top: 0;
+    left: 0;
+    padding: 18px;
+}
+.minicolors-theme-semanticui input {
+    text-indent: 30px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/jqueryui/themes/larry/tagedit.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,105 @@
+/**
+ * Styles of the tagedit inputsforms
+ */
+.tagedit-list {
+	width: 100%;
+	margin: 0;
+	padding: 4px 4px 0 5px;
+	overflow: auto;
+	min-height: 26px;
+	background: #fff;
+	border: 1px solid #b2b2b2;
+	border-radius: 4px;
+	box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+	-moz-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+	-webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+	-o-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+}
+.tagedit-list li.tagedit-listelement {
+	list-style-type: none;
+	float: left;
+	margin: 0 4px 4px 0;
+	padding: 0;
+}
+
+/* New Item input */
+.tagedit-list li.tagedit-listelement-new input {
+	border: 0;
+	height: 100%;
+	padding: 4px 1px;
+	width: 15px;
+	background: #fff;
+	border-radius: 0;
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-o-box-shadow: none;
+}
+.tagedit-list li.tagedit-listelement-new input:focus {
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-o-box-shadow: none;
+	outline: none;
+}
+.tagedit-list li.tagedit-listelement-new input.tagedit-input-disabled {
+	display: none;
+}
+
+/* Item that is put to the List */
+.tagedit span.tag-element,
+.tagedit-list li.tagedit-listelement-old {
+	padding: 3px 6px 1px 6px;
+	background: #ddeef5;
+	background: -moz-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#edf6fa), color-stop(100%,#d6e9f3));
+	background: -o-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
+	background: -ms-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
+	background: linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
+	border: 1px solid #c2dae5;
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	color: #0d5165;
+	line-height: 1.3em;
+}
+
+.tagedit-list li.tagedit-listelement-focus {
+	border-color: #4787b1;
+	-moz-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
+	-webkit-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
+	-o-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
+	box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
+}
+
+.tagedit span.tag-element {
+	margin-right: 0.6em;
+	padding: 2px 6px;
+/*	cursor: pointer; */
+}
+
+.tagedit span.tag-element.inherit {
+	color: #666;
+	background: #f2f2f2;
+	border-color: #ddd;
+}
+
+.tagedit-list li.tagedit-listelement-old a.tagedit-close,
+.tagedit-list li.tagedit-listelement-old a.tagedit-break,
+.tagedit-list li.tagedit-listelement-old a.tagedit-delete,
+.tagedit-list li.tagedit-listelement-old a.tagedit-save {
+	text-indent: -2000px;
+	display: inline-block;
+	position: relative;
+	top: -1px;
+	width: 16px;
+	height: 16px;
+	margin: 0 -4px 0 6px;
+	background: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAOCAYAAAD0f5bSAAAAgUlEQVQoz2NgQAKzdxwWAOIEIG5AwiC+AAM2AJQIAOL3QPwfCwaJB6BrSMChGB0nwDQYwATP3nn4f+Ge4ygKQXyQOJKYAUjTepjAm09fwBimEUTDxJA0rWdANxWmaMXB0xiGwDADurthGkEAmwbqaCLFeWQFBOlBTlbkkp2MSE2wAA8R50rWvqeRAAAAAElFTkSuQmCC') left 1px no-repeat;
+	cursor: pointer;
+}
+
+.tagedit-list li.tagedit-listelement-old span {
+	display: inline-block;
+	height: 15px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/krb_authentication/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,13 @@
+<?php
+
+// Kerberos/GSSAPI Authentication Plugin options
+// ---------------------------------------------
+
+// Default mail host to log-in using user/password from HTTP Authentication.
+// This is useful if the users are free to choose arbitrary mail hosts (or
+// from a list), but have one host they usually want to log into.
+// Unlike $config['default_host'] this must be a string!
+$config['krb_authentication_host'] = '';
+
+// GSS API security context
+$config['krb_authentication_context'] = 'imap/kolab.example.org@EXAMPLE.ORG';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/krb_authentication/krb_authentication.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * Kerberos Authentication
+ *
+ * Make use of an existing Kerberos authentication and perform login
+ * with the existing user credentials
+ *
+ * For other configuration options, see config.inc.php.dist!
+ *
+ * @license GNU GPLv3+
+ * @author Jeroen van Meeuwen
+ */
+class krb_authentication extends rcube_plugin
+{
+    private $redirect_query;
+
+    /**
+     * Plugin initialization
+     */
+    function init()
+    {
+        $this->add_hook('startup', array($this, 'startup'));
+        $this->add_hook('authenticate', array($this, 'authenticate'));
+        $this->add_hook('login_after', array($this, 'login'));
+        $this->add_hook('storage_connect', array($this, 'storage_connect'));
+    }
+
+    /**
+     * Startup hook handler
+     */
+    function startup($args)
+    {
+        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
+            // handle login action
+            if (empty($_SESSION['user_id'])) {
+                $args['action']       = 'login';
+                $this->redirect_query = $_SERVER['QUERY_STRING'];
+            }
+            else {
+                $_SESSION['password'] = null;
+            }
+        }
+
+        return $args;
+    }
+
+    /**
+     * Authenticate hook handler
+     */
+    function authenticate($args)
+    {
+        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
+            // Load plugin's config file
+            $this->load_config();
+
+            $rcmail = rcmail::get_instance();
+            $host   = $rcmail->config->get('krb_authentication_host');
+
+            if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
+                $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
+            }
+
+            if (!empty($_SERVER['REMOTE_USER'])) {
+                $args['user'] = $_SERVER['REMOTE_USER'];
+                $args['pass'] = null;
+            }
+
+            $args['cookiecheck'] = false;
+            $args['valid']       = true;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Storage_connect hook handler
+     */
+    function storage_connect($args)
+    {
+        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
+            // Load plugin's config file
+            $this->load_config();
+
+            $rcmail  = rcmail::get_instance();
+            $context = $rcmail->config->get('krb_authentication_context');
+
+            $args['gssapi_context'] = $context ?: 'imap/kolab.example.org@EXAMPLE.ORG';
+            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
+            $args['auth_type']      = 'GSSAPI';
+        }
+
+        return $args;
+    }
+
+    /**
+     * login_after hook handler
+     */
+    function login($args)
+    {
+        // Redirect to the previous QUERY_STRING
+        if ($this->redirect_query) {
+            header('Location: ./?' . $this->redirect_query);
+            exit;
+        }
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/Changelog	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,371 @@
+- Fix parsing dot-staffed lines in multiline text (#5838)
+- Fix AM/PM suffix in vacation time selectors
+- Fix bug where 'exists' operator was reset to 'contains' (#5899)
+
+* version 8.9 [2017-05-22]
+-----------------------------------------------------------
+- Fix handling of scripts with nested rules (#5540)
+- Fix possible defect in handling \r\n in scripts (#5685)
+- Performance: Skip redundant LISTSCRIPTS command
+
+* version 8.8 [2016-11-27]
+-----------------------------------------------------------
+- Fix parsing of vacation date-time with non-default date_format (#5372)
+- Fix regression where js error is thrown if server does not support 'duplicate' extension
+- Add option to automatically set vacation :from address (#5428)
+- Support per-host managesieve_conn_options (#5136)
+- Added (optional) RAW script editor (#5414)
+
+* version 8.7 [2016-07-19]
+-----------------------------------------------------------
+- Support 'string' test from variables extension [RFC 5229] (#5248)
+- Support 'duplicate' extension [RFC 7352]
+- Unhide advanced rule controls if there are inputs with errors
+- Display warning message when filter form contains errors
+
+* version 8.6 [2016-04-06]
+-----------------------------------------------------------
+- Refactored script parser to be 100x faster (on big scripts)
+
+* version 8.5 [2015-11-15]
+-----------------------------------------------------------
+- Add support for :from parameter in vacation action (patch from Michele Locati)
+
+* version 8.4 [2015-04-20]
+-----------------------------------------------------------
+- Add option to prepopulate vacation addresses on form init (#1490030)
+- Add option to define default vacation interval
+- Fix missing position indicator in Larry skin when dragging a filter
+- Fix incorrect filter data after filter delete (#1490356)
+
+* version 8.3 [2015-03-12]
+-----------------------------------------------------------
+- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet
+- Fix handling of header test with one-element array as header name
+- Fix missing host:port in connection error message
+
+* version 8.2 [2015-01-14]
+-----------------------------------------------------------
+- Fix bug where actions without if/elseif/else in sieve scripts were skipped
+- Support "not allof" test as a negation of all sub-tests
+- Fix bug where vacation rule was saved to wrong script if managesieve_kolab_master=true
+- Improve procedure of script selection to write a vacation rule
+
+* version 8.1 [2014-12-09]
+-----------------------------------------------------------
+- Added simple API to manage vacation rule
+- Fix missing css/js scripts in filter form in mail task
+- Fix default vacation status (#1490019)
+- Make possible to set vacation start/end date and time
+- Fix compatibility with contextmenu plugin
+
+* version 8.0 [2014-07-16]
+-----------------------------------------------------------
+- Fix bug where non-existing (or unsubscribed) folder wasn't listed in folder selector (#1489956)
+- Added optional separate interface for out-of-office management (#1488266)
+- Fix disabled "create filter" action
+- Fix enotify/notify extension handling
+- Improved UI accessibility
+- Added option to specify connection socket parameters - managesieve_conn_options
+- Support vacation date rules without date extension (#1489978)
+
+* version 7.2 [2014-02-14]
+-----------------------------------------------------------
+- Nicely handle server-side modification of script names (#1489412)
+- Add Filters tab/section using plugin API hook
+- Fix issue where folder selector wasn't visible on new filter form
+- Fix issue where multi-select fields were not visible in new filter action rows (#1489600)
+- Fix issue in displaying filter form when managesieve_kolab_master=true
+  and sieve variables extension is supported by the server (#1489599)
+- Fix wrong action folder selection if managesieve_domains is not empty (#1489617)
+- Fix filter creation from an email when preview frame is disabled (#1489647)
+
+* version 7.1 [2013-11-22]
+-----------------------------------------------------------
+- lib/Net_Sieve.php moved to Roundcube /lib directory
+- Added managesieve_domains option to limit redirect destinations
+- Fix bug where at least one additional address of vacation message was required (#1489345)
+- Fix so i;ascii-numeric comparator is not forced as default for :count and :value operators
+- Fix date/currentdate related form issues and comparators handling (#1489346)
+- Fix a bug where deleted filter was not removed from the list
+
+* version 7.0 [2013-09-09]
+-----------------------------------------------------------
+- Add vacation-seconds extension support (RFC 6131)
+- Several script parser code improvements
+- Support string list arguments in filter form (#1489018)
+- Support date, currendate and index tests - RFC5260 (#1488120)
+- Split plugin file into two files
+- Fix handling of &, <, > characters in scripts/filter names (#1489208)
+- Support 'keep' action (#1489226)
+- Add common headers to header selector (#1489271)
+
+* version 6.2 [2013-02-17]
+-----------------------------------------------------------
+- Support tls:// prefix in managesieve_host option
+- Removed depracated functions usage
+- Don't trim whitespace in folder names (#1488955)
+
+* version 6.1 [2012-12-21]
+-----------------------------------------------------------
+- Fixed filter activation/deactivation confirmation message (#1488765)
+- Moved rcube_* classes to <plugin>/lib/Roundcube for compat. with Roundcube Framework autoloader
+- Fixed filter selection after filter deletion (#1488832)
+- Fixed compatibility with jQueryUI-1.9
+- Don't force 'stop' action on last rule in a script
+
+* version 6.0 [2012-10-03]
+-----------------------------------------------------------
+- Fixed issue with DBMail bug [http://pear.php.net/bugs/bug.php?id=19077] (#1488594)
+- Added support for enotify/notify (RFC5435, RFC5436, draft-ietf-sieve-notify-00)
+- Change default port to 4190 (IANA-allocated), add port auto-detection (#1488713)
+- Added request size limits detection and script corruption prevention (#1488648)
+- Fix so scripts listed in managesieve_filename_exceptions aren't displayed on the list (#1488724)
+
+* version 5.2 [2012-07-24]
+-----------------------------------------------------------
+- Added GUI for variables setting - RFC5229 (patch from Paweł Słowik)
+- Fixed scrollbars in Larry's iframes
+- Fix performance issue in message_headers_output hook handling
+
+* version 5.1 [2012-06-21]
+-----------------------------------------------------------
+- Fixed filter popup width (for non-english localizations)
+- Fixed tokenizer infinite loop on invalid script content
+- Larry skin support
+- Fixed custom header name validity check, made RFC2822-compliant
+
+* version 5.0 [2012-01-05]
+-----------------------------------------------------------
+- Fixed setting test type to :is when none is specified
+- Fixed javascript error in IE8
+- Fixed possible ID duplication when adding filter rules very fast (#1488288)
+- Fixed bug where drag layer wasn't removed when dragging was ended over sets list
+
+* version 5.0-rc1 [2011-11-17]
+-----------------------------------------------------------
+- Fixed sorting of scripts, scripts including aware of the sort order
+- Fixed import of rules with unsupported tests
+- Added 'address' and 'envelope' tests support
+- Added 'body' extension support (RFC5173)
+- Added 'subaddress' extension support (RFC5233)
+- Added comparators support
+- Changed Sender/Recipient labels to From/To
+- Fixed importing rule names from Ingo
+- Fixed handling of extensions disabled in config
+
+* version 5.0-beta [2011-10-17]
+-----------------------------------------------------------
+- Added possibility to create a filter based on selected message "in-place"
+- Fixed import from Horde-INGO (#1488064)
+- Add managesieve_script_name option for default name of the script (#1487956)
+- Fixed handling of enabled magic_quotes_gpc setting
+- Fixed PHP warning on connection error when submitting filter form
+- Fixed bug where new action row with flags wasn't handled properly
+- Added managesieve_connect hook for plugins
+- Fixed doubled Filter tab on page refresh
+- Added filters set selector in filter form when invoked in mail task
+- Improved script parser, added support for include and variables extensions
+- Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14)
+- Use smaller action/rule buttons
+- UI redesign: added possibility to move filter to any place using drag&drop
+  (instead of up/down buttons), added filter sets list object, added more
+  'loading' messages
+- Added option to hide some scripts (managesieve_filename_exceptions)
+
+* version 4.3 [2011-07-28]
+-----------------------------------------------------------
+- Fixed handling of error in Net_Sieve::listScripts()
+- Fixed handling of REFERRAL responses (http://pear.php.net/bugs/bug.php?id=17107)
+- Fixed bug where wrong folders hierarchy was displayed on folders listing
+
+* version 4.2 [2011-05-24]
+-----------------------------------------------------------
+- Moved elsif replacement code to handle only imports from other formats
+- Fixed mod_mailbox() usage for newer Roundcube versions
+- Fixed regex extension (error: regex require missing)
+
+* version 4.1 [2011-03-07]
+-----------------------------------------------------------
+- Fix fileinto target is always INBOX (#1487776)
+- Fix escaping of backslash character in quoted strings (#1487780)
+- Fix handling of non-safe characters (double-quote, backslash)
+  or UTF-8 characters (dovecot's implementation bug workaround)
+  in script names
+- Fix saving of a script using flags extension on servers with imap4flags support (#1487825)
+
+* version 4.0 [2011-02-10]
+-----------------------------------------------------------
+- Fix STARTTLS for timsieved < 2.3.10
+- Added :regex and :matches support (#1487746)
+- Added setflag/addflag/removeflag support (#1487449)
+- Added support for vacation :subject field (#1487120)
+- rcube_sieve_script class moved to separate file
+- Moved javascript code from skin templates into managesieve.js file
+
+* version 3.0 [2011-02-01]
+-----------------------------------------------------------
+- Added support for SASL proxy authentication (#1486691)
+- Fixed parsing of scripts with \r\n line separator
+- Apply forgotten changes for form errors handling
+- Fix multi-line strings parsing (#1487685)
+- Added tests for script parser
+- Rewritten script parser
+- Fix double request when clicking on Filters tab using Firefox
+
+* version 2.10 [2010-10-10]
+-----------------------------------------------------------
+- Fixed import from Avelsieve
+- Use localized size units (#1486976)
+- Added support for relational operators and i;ascii-numeric comparator
+- Added popups with form errors
+
+* version 2.9 [2010-08-02]
+-----------------------------------------------------------
+- Fixed vacation parameters parsing (#1486883)
+
+* version 2.8 [2010-07-08]
+-----------------------------------------------------------
+- Added managesieve_auth_type option (#1486731)
+
+* version 2.7 [2010-07-06]
+-----------------------------------------------------------
+- Update Net_Sieve to version 1.3.0 (fixes LOGIN athentication)
+- Added support for copying and copy sending of messages (COPY extension)
+
+* version 2.6 [2010-06-03]
+-----------------------------------------------------------
+- Support %n and %d variables in managesieve_host option
+
+* version 2.5 [2010-05-04]
+-----------------------------------------------------------
+- Fix filters set label after activation
+- Fix filters set activation, add possibility to deactivate sets (#1486699)
+- Fix download button state when sets list is empty
+- Fix errors when sets list is empty
+
+* version 2.4 [2010-04-01]
+-----------------------------------------------------------
+- Fixed bug in DIGEST-MD5 authentication (http://pear.php.net/bugs/bug.php?id=17285)
+- Fixed disabling rules with many tests
+- Small css unification with core
+- Scripts import/export
+
+* version 2.3 [2010-03-18]
+-----------------------------------------------------------
+- Added import from Horde-INGO
+- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
+- Support for selectively disabling rules within a single sieve script (#1485882)
+- Added vertical splitter
+
+* version 2.2 [2010-02-06]
+-----------------------------------------------------------
+- Fix handling of "<>" characters in filter names (#1486477)
+
+* version 2.1 [2010-01-12]
+-----------------------------------------------------------
+- Fix "require" structure generation when many modules are used
+- Fix problem with '<' and '>' characters in header tests
+
+* version 2.0 [2009-11-02]
+-----------------------------------------------------------
+- Added 'managesieve_debug' option
+- Added multi-script support
+- Small css improvements + sprite image buttons
+- PEAR::NetSieve 1.2.0b1
+
+* version 1.7 [2009-09-20]
+-----------------------------------------------------------
+- Support multiple managesieve hosts using %h variable
+  in managesieve_host option
+- Fix first rule deleting (#1486140) 
+
+* version 1.6 [2009-09-08]
+-----------------------------------------------------------
+- Fix warning when importing squirrelmail rules
+- Fix handling of "true" as "anyof (true)" test
+
+* version 1.5 [2009-09-04]
+-----------------------------------------------------------
+- Added es_ES, ua_UA localizations
+- Added 'managesieve_mbox_encoding' option
+
+* version 1.4 [2009-07-29]
+-----------------------------------------------------------
+- Updated PEAR::Net_Sieve to 1.1.7
+
+* version 1.3 [2009-07-24]
+-----------------------------------------------------------
+- support more languages
+- support config.inc.php file
+
+* version 1.2 [2009-06-28]
+-----------------------------------------------------------
+- Support IMAP namespaces in fileinto (#1485943)
+- Added it_IT localization
+
+* version 1.1 [2009-05-27]
+-----------------------------------------------------------
+- Added new icons
+- Added support for headers lists (coma-separated) in rules
+- Added de_CH localization
+
+* version 1.0 [2009-05-21]
+-----------------------------------------------------------
+- Rewritten using plugin API
+- Added hu_HU localization (Tamas Tevesz)
+
+* version beta7 (svn-r2300) [2009-03-01]
+-----------------------------------------------------------
+- Added SquirrelMail script auto-import (Jonathan Ernst)
+- Added 'vacation' support (Jonathan Ernst & alec)
+- Added 'stop' support (Jonathan Ernst)
+- Added option for extensions disabling (Jonathan Ernst & alec)
+- Added fi_FI, nl_NL, bg_BG localization
+- Small style fixes
+
+* version 0.2-stable1 (svn-r2205) [2009-01-03]
+-----------------------------------------------------------
+- Fix moving down filter row
+- Fixes for compressed js files in stable release package
+- Created patch for svn version r2205
+
+* version 0.2-stable [2008-12-31]
+-----------------------------------------------------------
+- Added ru_RU, fr_FR, zh_CN translation
+- Fixes for Roundcube 0.2-stable
+
+* version 0.2-beta [2008-09-21]
+-----------------------------------------------------------
+- Small css fixes for IE
+- Fixes for Roundcube 0.2-beta
+
+* version beta6 [2008-08-08]
+-----------------------------------------------------------
+- Added de_DE translation
+- Fix for Roundcube r1634
+
+* version beta5 [2008-06-10]
+-----------------------------------------------------------
+- Fixed 'exists' operators
+- Fixed 'not*' operators for custom headers
+- Fixed filters deleting
+
+* version beta4 [2008-06-09]
+-----------------------------------------------------------
+- Fix for Roundcube r1490
+
+* version beta3 [2008-05-22]
+-----------------------------------------------------------
+- Fixed textarea error class setting
+- Added pagetitle setting
+- Added option 'managesieve_replace_delimiter'
+- Fixed errors on IE (still need some css fixes)
+
+* version beta2 [2008-05-20]
+-----------------------------------------------------------
+- Use 'if' only for first filter and 'elsif' for the rest
+
+* version beta1 [2008-05-15]
+-----------------------------------------------------------
+- Initial version for Roundcube r1388.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/addon/selection/active-line.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,74 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Because sometimes you need to style the cursor's line.
+//
+// Adds an option 'styleActiveLine' which, when enabled, gives the
+// active line's wrapping <div> the CSS class "CodeMirror-activeline",
+// and gives its background <div> the class "CodeMirror-activeline-background".
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+  var WRAP_CLASS = "CodeMirror-activeline";
+  var BACK_CLASS = "CodeMirror-activeline-background";
+  var GUTT_CLASS = "CodeMirror-activeline-gutter";
+
+  CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
+    var prev = old && old != CodeMirror.Init;
+    if (val && !prev) {
+      cm.state.activeLines = [];
+      updateActiveLines(cm, cm.listSelections());
+      cm.on("beforeSelectionChange", selectionChange);
+    } else if (!val && prev) {
+      cm.off("beforeSelectionChange", selectionChange);
+      clearActiveLines(cm);
+      delete cm.state.activeLines;
+    }
+  });
+
+  function clearActiveLines(cm) {
+    for (var i = 0; i < cm.state.activeLines.length; i++) {
+      cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
+      cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
+      cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
+    }
+  }
+
+  function sameArray(a, b) {
+    if (a.length != b.length) return false;
+    for (var i = 0; i < a.length; i++)
+      if (a[i] != b[i]) return false;
+    return true;
+  }
+
+  function updateActiveLines(cm, ranges) {
+    var active = [];
+    for (var i = 0; i < ranges.length; i++) {
+      var range = ranges[i];
+      if (!range.empty()) continue;
+      var line = cm.getLineHandleVisualStart(range.head.line);
+      if (active[active.length - 1] != line) active.push(line);
+    }
+    if (sameArray(cm.state.activeLines, active)) return;
+    cm.operation(function() {
+      clearActiveLines(cm);
+      for (var i = 0; i < active.length; i++) {
+        cm.addLineClass(active[i], "wrap", WRAP_CLASS);
+        cm.addLineClass(active[i], "background", BACK_CLASS);
+        cm.addLineClass(active[i], "gutter", GUTT_CLASS);
+      }
+      cm.state.activeLines = active;
+    });
+  }
+
+  function selectionChange(cm, sel) {
+    updateActiveLines(cm, sel.ranges);
+  }
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/addon/selection/mark-selection.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,118 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Because sometimes you need to mark the selected *text*.
+//
+// Adds an option 'styleSelectedText' which, when enabled, gives
+// selected text the CSS class given as option value, or
+// "CodeMirror-selectedtext" when the value is not a string.
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) {
+    var prev = old && old != CodeMirror.Init;
+    if (val && !prev) {
+      cm.state.markedSelection = [];
+      cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext";
+      reset(cm);
+      cm.on("cursorActivity", onCursorActivity);
+      cm.on("change", onChange);
+    } else if (!val && prev) {
+      cm.off("cursorActivity", onCursorActivity);
+      cm.off("change", onChange);
+      clear(cm);
+      cm.state.markedSelection = cm.state.markedSelectionStyle = null;
+    }
+  });
+
+  function onCursorActivity(cm) {
+    cm.operation(function() { update(cm); });
+  }
+
+  function onChange(cm) {
+    if (cm.state.markedSelection.length)
+      cm.operation(function() { clear(cm); });
+  }
+
+  var CHUNK_SIZE = 8;
+  var Pos = CodeMirror.Pos;
+  var cmp = CodeMirror.cmpPos;
+
+  function coverRange(cm, from, to, addAt) {
+    if (cmp(from, to) == 0) return;
+    var array = cm.state.markedSelection;
+    var cls = cm.state.markedSelectionStyle;
+    for (var line = from.line;;) {
+      var start = line == from.line ? from : Pos(line, 0);
+      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;
+      var end = atEnd ? to : Pos(endLine, 0);
+      var mark = cm.markText(start, end, {className: cls});
+      if (addAt == null) array.push(mark);
+      else array.splice(addAt++, 0, mark);
+      if (atEnd) break;
+      line = endLine;
+    }
+  }
+
+  function clear(cm) {
+    var array = cm.state.markedSelection;
+    for (var i = 0; i < array.length; ++i) array[i].clear();
+    array.length = 0;
+  }
+
+  function reset(cm) {
+    clear(cm);
+    var ranges = cm.listSelections();
+    for (var i = 0; i < ranges.length; i++)
+      coverRange(cm, ranges[i].from(), ranges[i].to());
+  }
+
+  function update(cm) {
+    if (!cm.somethingSelected()) return clear(cm);
+    if (cm.listSelections().length > 1) return reset(cm);
+
+    var from = cm.getCursor("start"), to = cm.getCursor("end");
+
+    var array = cm.state.markedSelection;
+    if (!array.length) return coverRange(cm, from, to);
+
+    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();
+    if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE ||
+        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)
+      return reset(cm);
+
+    while (cmp(from, coverStart.from) > 0) {
+      array.shift().clear();
+      coverStart = array[0].find();
+    }
+    if (cmp(from, coverStart.from) < 0) {
+      if (coverStart.to.line - from.line < CHUNK_SIZE) {
+        array.shift().clear();
+        coverRange(cm, from, coverStart.to, 0);
+      } else {
+        coverRange(cm, from, coverStart.from, 0);
+      }
+    }
+
+    while (cmp(to, coverEnd.to) < 0) {
+      array.pop().clear();
+      coverEnd = array[array.length - 1].find();
+    }
+    if (cmp(to, coverEnd.to) > 0) {
+      if (to.line - coverEnd.from.line < CHUNK_SIZE) {
+        array.pop().clear();
+        coverRange(cm, coverEnd.from, to);
+      } else {
+        coverRange(cm, coverEnd.to, to);
+      }
+    }
+  }
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/addon/selection/selection-pointer.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  CodeMirror.defineOption("selectionPointer", false, function(cm, val) {
+    var data = cm.state.selectionPointer;
+    if (data) {
+      CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove);
+      CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout);
+      CodeMirror.off(window, "scroll", data.windowScroll);
+      cm.off("cursorActivity", reset);
+      cm.off("scroll", reset);
+      cm.state.selectionPointer = null;
+      cm.display.lineDiv.style.cursor = "";
+    }
+    if (val) {
+      data = cm.state.selectionPointer = {
+        value: typeof val == "string" ? val : "default",
+        mousemove: function(event) { mousemove(cm, event); },
+        mouseout: function(event) { mouseout(cm, event); },
+        windowScroll: function() { reset(cm); },
+        rects: null,
+        mouseX: null, mouseY: null,
+        willUpdate: false
+      };
+      CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove);
+      CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout);
+      CodeMirror.on(window, "scroll", data.windowScroll);
+      cm.on("cursorActivity", reset);
+      cm.on("scroll", reset);
+    }
+  });
+
+  function mousemove(cm, event) {
+    var data = cm.state.selectionPointer;
+    if (event.buttons == null ? event.which : event.buttons) {
+      data.mouseX = data.mouseY = null;
+    } else {
+      data.mouseX = event.clientX;
+      data.mouseY = event.clientY;
+    }
+    scheduleUpdate(cm);
+  }
+
+  function mouseout(cm, event) {
+    if (!cm.getWrapperElement().contains(event.relatedTarget)) {
+      var data = cm.state.selectionPointer;
+      data.mouseX = data.mouseY = null;
+      scheduleUpdate(cm);
+    }
+  }
+
+  function reset(cm) {
+    cm.state.selectionPointer.rects = null;
+    scheduleUpdate(cm);
+  }
+
+  function scheduleUpdate(cm) {
+    if (!cm.state.selectionPointer.willUpdate) {
+      cm.state.selectionPointer.willUpdate = true;
+      setTimeout(function() {
+        update(cm);
+        cm.state.selectionPointer.willUpdate = false;
+      }, 50);
+    }
+  }
+
+  function update(cm) {
+    var data = cm.state.selectionPointer;
+    if (!data) return;
+    if (data.rects == null && data.mouseX != null) {
+      data.rects = [];
+      if (cm.somethingSelected()) {
+        for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling)
+          data.rects.push(sel.getBoundingClientRect());
+      }
+    }
+    var inside = false;
+    if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) {
+      var rect = data.rects[i];
+      if (rect.left <= data.mouseX && rect.right >= data.mouseX &&
+          rect.top <= data.mouseY && rect.bottom >= data.mouseY)
+        inside = true;
+    }
+    var cursor = inside ? data.value : "";
+    if (cm.display.lineDiv.style.cursor != cursor)
+      cm.display.lineDiv.style.cursor = cursor;
+  }
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/lib/codemirror.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,341 @@
+/* BASICS */
+
+.CodeMirror {
+  /* Set height, width, borders, and global font properties here */
+  font-family: monospace;
+  height: 300px;
+  color: black;
+}
+
+/* PADDING */
+
+.CodeMirror-lines {
+  padding: 4px 0; /* Vertical padding around content */
+}
+.CodeMirror pre {
+  padding: 0 4px; /* Horizontal padding of content */
+}
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+  background-color: white; /* The little square between H and V scrollbars */
+}
+
+/* GUTTER */
+
+.CodeMirror-gutters {
+  border-right: 1px solid #ddd;
+  background-color: #f7f7f7;
+  white-space: nowrap;
+}
+.CodeMirror-linenumbers {}
+.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; }
+
+/* CURSOR */
+
+.CodeMirror-cursor {
+  border-left: 1px solid black;
+  border-right: none;
+  width: 0;
+}
+/* Shown when moving in bi-directional text */
+.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-animate-fat-cursor {
+  width: auto;
+  border: 0;
+  -webkit-animation: blink 1.06s steps(1) infinite;
+  -moz-animation: blink 1.06s steps(1) infinite;
+  animation: blink 1.06s steps(1) infinite;
+  background-color: #7e7;
+}
+@-moz-keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+@-webkit-keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+@keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.CodeMirror-overwrite .CodeMirror-cursor {}
+
+.cm-tab { display: inline-block; text-decoration: inherit; }
+
+.CodeMirror-rulers {
+  position: absolute;
+  left: 0; right: 0; top: -50px; bottom: -20px;
+  overflow: hidden;
+}
+.CodeMirror-ruler {
+  border-left: 1px solid #ccc;
+  top: 0; bottom: 0;
+  position: absolute;
+}
+
+/* DEFAULT THEME */
+
+.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: #00f;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
+.cm-s-default .cm-variable-2 {color: #05a;}
+.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 {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: #f00;}
+.cm-invalidchar {color: #f00;}
+
+.CodeMirror-composing { border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
+.CodeMirror-activeline-background {background: #e8f2ff;}
+
+/* STOP */
+
+/* The rest of this file contains styles related to the mechanics of
+   the editor. You probably shouldn't touch them. */
+
+.CodeMirror {
+  position: relative;
+  overflow: hidden;
+  background: white;
+}
+
+.CodeMirror-scroll {
+  overflow: scroll !important; /* Things will break if this is overridden */
+  /* 30px is the magic margin used to hide the element's real scrollbars */
+  /* See overflow: hidden in .CodeMirror */
+  margin-bottom: -30px; margin-right: -30px;
+  padding-bottom: 30px;
+  height: 100%;
+  outline: none; /* Prevent dragging from highlighting the element */
+  position: relative;
+}
+.CodeMirror-sizer {
+  position: relative;
+  border-right: 30px solid transparent;
+}
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+   before actual scrolling happens, thus preventing shaking and
+   flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+  position: absolute;
+  z-index: 6;
+  display: 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: -30px;
+}
+.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 {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none;
+}
+
+.CodeMirror-lines {
+  cursor: text;
+  min-height: 1px; /* prevents collapsing before first draw */
+}
+.CodeMirror pre {
+  /* Reset some styles that the rest of the page might have set */
+  -moz-border-radius: 0; -webkit-border-radius: 0; 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;
+  -webkit-font-variant-ligatures: none;
+  font-variant-ligatures: none;
+}
+.CodeMirror-wrap pre {
+  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;
+  overflow: auto;
+}
+
+.CodeMirror-widget {}
+
+.CodeMirror-code {
+  outline: none;
+}
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+  -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 {
+  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: #ffa;
+  background: rgba(255, 255, 0, .4);
+}
+
+/* Used to force a border model for a node */
+.cm-force-border { padding-right: .1px; }
+
+@media print {
+  /* Hide the cursor when printing */
+  .CodeMirror div.CodeMirror-cursors {
+    visibility: hidden;
+  }
+}
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/lib/codemirror.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9109 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// This is CodeMirror (http://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+// Kludges for bugs and behavior differences that can't be feature
+// detected are enabled based on userAgent etc sniffing.
+var userAgent = navigator.userAgent
+var platform = navigator.platform
+
+var gecko = /gecko\/\d/i.test(userAgent)
+var ie_upto10 = /MSIE \d/.test(userAgent)
+var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent)
+var ie = ie_upto10 || ie_11up
+var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1])
+var webkit = /WebKit\//.test(userAgent)
+var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent)
+var chrome = /Chrome\//.test(userAgent)
+var presto = /Opera\//.test(userAgent)
+var safari = /Apple Computer/.test(navigator.vendor)
+var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent)
+var phantom = /PhantomJS/.test(userAgent)
+
+var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent)
+// This is woefully incomplete. Suggestions for alternative methods welcome.
+var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)
+var mac = ios || /Mac/.test(platform)
+var chromeOS = /\bCrOS\b/.test(userAgent)
+var windows = /win/i.test(platform)
+
+var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/)
+if (presto_version) { presto_version = Number(presto_version[1]) }
+if (presto_version && presto_version >= 15) { presto = false; webkit = true }
+// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11))
+var captureRightClick = gecko || (ie && ie_version >= 9)
+
+function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+var rmClass = function(node, cls) {
+  var current = node.className
+  var match = classTest(cls).exec(current)
+  if (match) {
+    var after = current.slice(match.index + match[0].length)
+    node.className = current.slice(0, match.index) + (after ? match[1] + after : "")
+  }
+}
+
+function removeChildren(e) {
+  for (var count = e.childNodes.length; count > 0; --count)
+    { e.removeChild(e.firstChild) }
+  return e
+}
+
+function removeChildrenAndAdd(parent, e) {
+  return removeChildren(parent).appendChild(e)
+}
+
+function elt(tag, content, className, style) {
+  var e = document.createElement(tag)
+  if (className) { e.className = className }
+  if (style) { e.style.cssText = style }
+  if (typeof content == "string") { e.appendChild(document.createTextNode(content)) }
+  else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } }
+  return e
+}
+
+var range
+if (document.createRange) { range = function(node, start, end, endNode) {
+  var r = document.createRange()
+  r.setEnd(endNode || node, end)
+  r.setStart(node, start)
+  return r
+} }
+else { range = function(node, start, end) {
+  var r = document.body.createTextRange()
+  try { r.moveToElementText(node.parentNode) }
+  catch(e) { return r }
+  r.collapse(true)
+  r.moveEnd("character", end)
+  r.moveStart("character", start)
+  return r
+} }
+
+function contains(parent, child) {
+  if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+    { child = child.parentNode }
+  if (parent.contains)
+    { return parent.contains(child) }
+  do {
+    if (child.nodeType == 11) { child = child.host }
+    if (child == parent) { return true }
+  } while (child = child.parentNode)
+}
+
+function activeElt() {
+  // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+  // IE < 10 will throw when accessed while the page is loading or in an iframe.
+  // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+  var activeElement
+  try {
+    activeElement = document.activeElement
+  } catch(e) {
+    activeElement = document.body || null
+  }
+  while (activeElement && activeElement.root && activeElement.root.activeElement)
+    { activeElement = activeElement.root.activeElement }
+  return activeElement
+}
+
+function addClass(node, cls) {
+  var current = node.className
+  if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls }
+}
+function joinClasses(a, b) {
+  var as = a.split(" ")
+  for (var i = 0; i < as.length; i++)
+    { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } }
+  return b
+}
+
+var selectInput = function(node) { node.select() }
+if (ios) // Mobile Safari apparently has a bug where select() is broken.
+  { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } }
+else if (ie) // Suppress mysterious IE10 errors
+  { selectInput = function(node) { try { node.select() } catch(_e) {} } }
+
+function bind(f) {
+  var args = Array.prototype.slice.call(arguments, 1)
+  return function(){return f.apply(null, args)}
+}
+
+function copyObj(obj, target, overwrite) {
+  if (!target) { target = {} }
+  for (var prop in obj)
+    { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+      { target[prop] = obj[prop] } }
+  return target
+}
+
+// Counts the column offset in a string, taking tabs into account.
+// Used mostly to find indentation.
+function countColumn(string, end, tabSize, startIndex, startValue) {
+  if (end == null) {
+    end = string.search(/[^\s\u00a0]/)
+    if (end == -1) { end = string.length }
+  }
+  for (var i = startIndex || 0, n = startValue || 0;;) {
+    var nextTab = string.indexOf("\t", i)
+    if (nextTab < 0 || nextTab >= end)
+      { return n + (end - i) }
+    n += nextTab - i
+    n += tabSize - (n % tabSize)
+    i = nextTab + 1
+  }
+}
+
+function Delayed() {this.id = null}
+Delayed.prototype.set = function(ms, f) {
+  clearTimeout(this.id)
+  this.id = setTimeout(f, ms)
+}
+
+function indexOf(array, elt) {
+  for (var i = 0; i < array.length; ++i)
+    { if (array[i] == elt) { return i } }
+  return -1
+}
+
+// Number of pixels added to scroller and sizer to hide scrollbar
+var scrollerGap = 30
+
+// Returned or thrown by various protocols to signal 'I'm not
+// handling this'.
+var Pass = {toString: function(){return "CodeMirror.Pass"}}
+
+// Reused option objects for setSelection & friends
+var sel_dontScroll = {scroll: false};
+var sel_mouse = {origin: "*mouse"};
+var sel_move = {origin: "+move"}
+
+// The inverse of countColumn -- find the offset that corresponds to
+// a particular column.
+function findColumn(string, goal, tabSize) {
+  for (var pos = 0, col = 0;;) {
+    var nextTab = string.indexOf("\t", pos)
+    if (nextTab == -1) { nextTab = string.length }
+    var skipped = nextTab - pos
+    if (nextTab == string.length || col + skipped >= goal)
+      { return pos + Math.min(skipped, goal - col) }
+    col += nextTab - pos
+    col += tabSize - (col % tabSize)
+    pos = nextTab + 1
+    if (col >= goal) { return pos }
+  }
+}
+
+var spaceStrs = [""]
+function spaceStr(n) {
+  while (spaceStrs.length <= n)
+    { spaceStrs.push(lst(spaceStrs) + " ") }
+  return spaceStrs[n]
+}
+
+function lst(arr) { return arr[arr.length-1] }
+
+function map(array, f) {
+  var out = []
+  for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) }
+  return out
+}
+
+function insertSorted(array, value, score) {
+  var pos = 0, priority = score(value)
+  while (pos < array.length && score(array[pos]) <= priority) { pos++ }
+  array.splice(pos, 0, value)
+}
+
+function nothing() {}
+
+function createObj(base, props) {
+  var inst
+  if (Object.create) {
+    inst = Object.create(base)
+  } else {
+    nothing.prototype = base
+    inst = new nothing()
+  }
+  if (props) { copyObj(props, inst) }
+  return inst
+}
+
+var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/
+function isWordCharBasic(ch) {
+  return /\w/.test(ch) || ch > "\x80" &&
+    (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+}
+function isWordChar(ch, helper) {
+  if (!helper) { return isWordCharBasic(ch) }
+  if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+  return helper.test(ch)
+}
+
+function isEmpty(obj) {
+  for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+  return true
+}
+
+// Extending unicode characters. A series of a non-extending char +
+// any number of extending chars is treated as a single unit as far
+// as editing and measuring is concerned. This is not fully correct,
+// since some scripts/fonts/browsers also treat other configurations
+// of code points as a group.
+var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/
+function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+// The display handles the DOM integration, both for input reading
+// and content drawing. It holds references to DOM nodes and
+// display-related state.
+
+function Display(place, doc, input) {
+  var d = this
+  this.input = input
+
+  // Covers bottom-right square when both scrollbars are present.
+  d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler")
+  d.scrollbarFiller.setAttribute("cm-not-content", "true")
+  // Covers bottom of gutter when coverGutterNextToScrollbar is on
+  // and h scrollbar is present.
+  d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler")
+  d.gutterFiller.setAttribute("cm-not-content", "true")
+  // Will contain the actual code, positioned to cover the viewport.
+  d.lineDiv = elt("div", null, "CodeMirror-code")
+  // Elements are added to these to represent selection and cursors.
+  d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1")
+  d.cursorDiv = elt("div", null, "CodeMirror-cursors")
+  // A visibility: hidden element used to find the size of things.
+  d.measure = elt("div", null, "CodeMirror-measure")
+  // When lines outside of the viewport are measured, they are drawn in this.
+  d.lineMeasure = elt("div", null, "CodeMirror-measure")
+  // Wraps everything that needs to exist inside the vertically-padded coordinate system
+  d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+                    null, "position: relative; outline: none")
+  // Moved around its parent to cover visible view.
+  d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative")
+  // Set to the height of the document, allowing scrolling.
+  d.sizer = elt("div", [d.mover], "CodeMirror-sizer")
+  d.sizerWidth = null
+  // Behavior of elts with overflow: auto and padding is
+  // inconsistent across browsers. This is used to ensure the
+  // scrollable area is big enough.
+  d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;")
+  // Will contain the gutters, if any.
+  d.gutters = elt("div", null, "CodeMirror-gutters")
+  d.lineGutter = null
+  // Actual scrollable element.
+  d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll")
+  d.scroller.setAttribute("tabIndex", "-1")
+  // The element in which the editor lives.
+  d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror")
+
+  // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+  if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 }
+  if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true }
+
+  if (place) {
+    if (place.appendChild) { place.appendChild(d.wrapper) }
+    else { place(d.wrapper) }
+  }
+
+  // Current rendered range (may be bigger than the view window).
+  d.viewFrom = d.viewTo = doc.first
+  d.reportedViewFrom = d.reportedViewTo = doc.first
+  // Information about the rendered lines.
+  d.view = []
+  d.renderedView = null
+  // Holds info about a single rendered line when it was rendered
+  // for measurement, while not in view.
+  d.externalMeasured = null
+  // Empty space (in pixels) above the view
+  d.viewOffset = 0
+  d.lastWrapHeight = d.lastWrapWidth = 0
+  d.updateLineNumbers = null
+
+  d.nativeBarWidth = d.barHeight = d.barWidth = 0
+  d.scrollbarsClipped = false
+
+  // Used to only resize the line number gutter when necessary (when
+  // the amount of lines crosses a boundary that makes its width change)
+  d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null
+  // Set to true when a non-horizontal-scrolling line widget is
+  // added. As an optimization, line widget aligning is skipped when
+  // this is false.
+  d.alignWidgets = false
+
+  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+
+  // Tracks the maximum line length so that the horizontal scrollbar
+  // can be kept static when scrolling.
+  d.maxLine = null
+  d.maxLineLength = 0
+  d.maxLineChanged = false
+
+  // Used for measuring wheel scrolling granularity
+  d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null
+
+  // True when shift is held down.
+  d.shift = false
+
+  // Used to track whether anything happened since the context menu
+  // was opened.
+  d.selForContextMenu = null
+
+  d.activeTouch = null
+
+  input.init(d)
+}
+
+// Find the line object corresponding to the given line number.
+function getLine(doc, n) {
+  n -= doc.first
+  if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+  var chunk = doc
+  while (!chunk.lines) {
+    for (var i = 0;; ++i) {
+      var child = chunk.children[i], sz = child.chunkSize()
+      if (n < sz) { chunk = child; break }
+      n -= sz
+    }
+  }
+  return chunk.lines[n]
+}
+
+// Get the part of a document between two positions, as an array of
+// strings.
+function getBetween(doc, start, end) {
+  var out = [], n = start.line
+  doc.iter(start.line, end.line + 1, function (line) {
+    var text = line.text
+    if (n == end.line) { text = text.slice(0, end.ch) }
+    if (n == start.line) { text = text.slice(start.ch) }
+    out.push(text)
+    ++n
+  })
+  return out
+}
+// Get the lines between from and to, as array of strings.
+function getLines(doc, from, to) {
+  var out = []
+  doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value
+  return out
+}
+
+// Update the height of a line, propagating the height change
+// upwards to parent nodes.
+function updateLineHeight(line, height) {
+  var diff = height - line.height
+  if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } }
+}
+
+// Given a line object, find its line number by walking up through
+// its parent links.
+function lineNo(line) {
+  if (line.parent == null) { return null }
+  var cur = line.parent, no = indexOf(cur.lines, line)
+  for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+    for (var i = 0;; ++i) {
+      if (chunk.children[i] == cur) { break }
+      no += chunk.children[i].chunkSize()
+    }
+  }
+  return no + cur.first
+}
+
+// Find the line at the given vertical position, using the height
+// information in the document tree.
+function lineAtHeight(chunk, h) {
+  var n = chunk.first
+  outer: do {
+    for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+      var child = chunk.children[i$1], ch = child.height
+      if (h < ch) { chunk = child; continue outer }
+      h -= ch
+      n += child.chunkSize()
+    }
+    return n
+  } while (!chunk.lines)
+  var i = 0
+  for (; i < chunk.lines.length; ++i) {
+    var line = chunk.lines[i], lh = line.height
+    if (h < lh) { break }
+    h -= lh
+  }
+  return n + i
+}
+
+function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+function lineNumberFor(options, i) {
+  return String(options.lineNumberFormatter(i + options.firstLineNumber))
+}
+
+// A Pos instance represents a position within the text.
+function Pos (line, ch) {
+  if (!(this instanceof Pos)) { return new Pos(line, ch) }
+  this.line = line; this.ch = ch
+}
+
+// Compare two positions, return 0 if they are the same, a negative
+// number when a is less, and a positive number otherwise.
+function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+function copyPos(x) {return Pos(x.line, x.ch)}
+function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+// Most of the external API clips given positions to make sure they
+// actually exist within the document.
+function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+function clipPos(doc, pos) {
+  if (pos.line < doc.first) { return Pos(doc.first, 0) }
+  var last = doc.first + doc.size - 1
+  if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+  return clipToLen(pos, getLine(doc, pos.line).text.length)
+}
+function clipToLen(pos, linelen) {
+  var ch = pos.ch
+  if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+  else if (ch < 0) { return Pos(pos.line, 0) }
+  else { return pos }
+}
+function clipPosArray(doc, array) {
+  var out = []
+  for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) }
+  return out
+}
+
+// Optimize some code when these features are not used.
+var sawReadOnlySpans = false;
+var sawCollapsedSpans = false
+
+function seeReadOnlySpans() {
+  sawReadOnlySpans = true
+}
+
+function seeCollapsedSpans() {
+  sawCollapsedSpans = true
+}
+
+// TEXTMARKER SPANS
+
+function MarkedSpan(marker, from, to) {
+  this.marker = marker
+  this.from = from; this.to = to
+}
+
+// Search an array of spans for a span matching the given marker.
+function getMarkedSpanFor(spans, marker) {
+  if (spans) { for (var i = 0; i < spans.length; ++i) {
+    var span = spans[i]
+    if (span.marker == marker) { return span }
+  } }
+}
+// Remove a span from an array, returning undefined if no spans are
+// left (we don't store arrays for lines without spans).
+function removeMarkedSpan(spans, span) {
+  var r
+  for (var i = 0; i < spans.length; ++i)
+    { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } }
+  return r
+}
+// Add a span to a line.
+function addMarkedSpan(line, span) {
+  line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]
+  span.marker.attachLine(line)
+}
+
+// Used for the algorithm that adjusts markers for a change in the
+// document. These functions cut an array of spans at a given
+// character position, returning an array of remaining chunks (or
+// undefined if nothing remains).
+function markedSpansBefore(old, startCh, isInsert) {
+  var nw
+  if (old) { for (var i = 0; i < old.length; ++i) {
+    var span = old[i], marker = span.marker
+    var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh)
+    if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to))
+    }
+  } }
+  return nw
+}
+function markedSpansAfter(old, endCh, isInsert) {
+  var nw
+  if (old) { for (var i = 0; i < old.length; ++i) {
+    var span = old[i], marker = span.marker
+    var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh)
+    if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+                                            span.to == null ? null : span.to - endCh))
+    }
+  } }
+  return nw
+}
+
+// Given a change object, compute the new set of marker spans that
+// cover the line in which the change took place. Removes spans
+// entirely within the change, reconnects spans belonging to the
+// same marker that appear on both sides of the change, and cuts off
+// spans partially within the change. Returns an array of span
+// arrays with one element for each line in (after) the change.
+function stretchSpansOverChange(doc, change) {
+  if (change.full) { return null }
+  var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans
+  var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans
+  if (!oldFirst && !oldLast) { return null }
+
+  var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0
+  // Get the spans that 'stick out' on both sides
+  var first = markedSpansBefore(oldFirst, startCh, isInsert)
+  var last = markedSpansAfter(oldLast, endCh, isInsert)
+
+  // Next, merge those two ends
+  var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0)
+  if (first) {
+    // Fix up .to properties of first
+    for (var i = 0; i < first.length; ++i) {
+      var span = first[i]
+      if (span.to == null) {
+        var found = getMarkedSpanFor(last, span.marker)
+        if (!found) { span.to = startCh }
+        else if (sameLine) { span.to = found.to == null ? null : found.to + offset }
+      }
+    }
+  }
+  if (last) {
+    // Fix up .from in last (or move them into first in case of sameLine)
+    for (var i$1 = 0; i$1 < last.length; ++i$1) {
+      var span$1 = last[i$1]
+      if (span$1.to != null) { span$1.to += offset }
+      if (span$1.from == null) {
+        var found$1 = getMarkedSpanFor(first, span$1.marker)
+        if (!found$1) {
+          span$1.from = offset
+          if (sameLine) { (first || (first = [])).push(span$1) }
+        }
+      } else {
+        span$1.from += offset
+        if (sameLine) { (first || (first = [])).push(span$1) }
+      }
+    }
+  }
+  // Make sure we didn't create any zero-length spans
+  if (first) { first = clearEmptySpans(first) }
+  if (last && last != first) { last = clearEmptySpans(last) }
+
+  var newMarkers = [first]
+  if (!sameLine) {
+    // Fill gap with whole-line-spans
+    var gap = change.text.length - 2, gapMarkers
+    if (gap > 0 && first)
+      { for (var i$2 = 0; i$2 < first.length; ++i$2)
+        { if (first[i$2].to == null)
+          { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } }
+    for (var i$3 = 0; i$3 < gap; ++i$3)
+      { newMarkers.push(gapMarkers) }
+    newMarkers.push(last)
+  }
+  return newMarkers
+}
+
+// Remove spans that are empty and don't have a clearWhenEmpty
+// option of false.
+function clearEmptySpans(spans) {
+  for (var i = 0; i < spans.length; ++i) {
+    var span = spans[i]
+    if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+      { spans.splice(i--, 1) }
+  }
+  if (!spans.length) { return null }
+  return spans
+}
+
+// Used to 'clip' out readOnly ranges when making a change.
+function removeReadOnlyRanges(doc, from, to) {
+  var markers = null
+  doc.iter(from.line, to.line + 1, function (line) {
+    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+      var mark = line.markedSpans[i].marker
+      if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+        { (markers || (markers = [])).push(mark) }
+    } }
+  })
+  if (!markers) { return null }
+  var parts = [{from: from, to: to}]
+  for (var i = 0; i < markers.length; ++i) {
+    var mk = markers[i], m = mk.find(0)
+    for (var j = 0; j < parts.length; ++j) {
+      var p = parts[j]
+      if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+      var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to)
+      if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+        { newParts.push({from: p.from, to: m.from}) }
+      if (dto > 0 || !mk.inclusiveRight && !dto)
+        { newParts.push({from: m.to, to: p.to}) }
+      parts.splice.apply(parts, newParts)
+      j += newParts.length - 1
+    }
+  }
+  return parts
+}
+
+// Connect or disconnect spans from a line.
+function detachMarkedSpans(line) {
+  var spans = line.markedSpans
+  if (!spans) { return }
+  for (var i = 0; i < spans.length; ++i)
+    { spans[i].marker.detachLine(line) }
+  line.markedSpans = null
+}
+function attachMarkedSpans(line, spans) {
+  if (!spans) { return }
+  for (var i = 0; i < spans.length; ++i)
+    { spans[i].marker.attachLine(line) }
+  line.markedSpans = spans
+}
+
+// Helpers used when computing which overlapping collapsed span
+// counts as the larger one.
+function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+// Returns a number indicating which of two overlapping collapsed
+// spans is larger (and thus includes the other). Falls back to
+// comparing ids when the spans cover exactly the same range.
+function compareCollapsedMarkers(a, b) {
+  var lenDiff = a.lines.length - b.lines.length
+  if (lenDiff != 0) { return lenDiff }
+  var aPos = a.find(), bPos = b.find()
+  var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b)
+  if (fromCmp) { return -fromCmp }
+  var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b)
+  if (toCmp) { return toCmp }
+  return b.id - a.id
+}
+
+// Find out whether a line ends or starts in a collapsed span. If
+// so, return the marker for that span.
+function collapsedSpanAtSide(line, start) {
+  var sps = sawCollapsedSpans && line.markedSpans, found
+  if (sps) { for (var sp = void 0, i = 0; i < sps.length; ++i) {
+    sp = sps[i]
+    if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+        (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+      { found = sp.marker }
+  } }
+  return found
+}
+function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+// Test whether there exists a collapsed span that partially
+// overlaps (covers the start or end, but not both) of a new span.
+// Such overlap is not allowed.
+function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {
+  var line = getLine(doc, lineNo$$1)
+  var sps = sawCollapsedSpans && line.markedSpans
+  if (sps) { for (var i = 0; i < sps.length; ++i) {
+    var sp = sps[i]
+    if (!sp.marker.collapsed) { continue }
+    var found = sp.marker.find(0)
+    var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker)
+    var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker)
+    if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+    if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+        fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+      { return true }
+  } }
+}
+
+// A visual line is a line as drawn on the screen. Folding, for
+// example, can cause multiple logical lines to appear on the same
+// visual line. This finds the start of the visual line that the
+// given line is part of (usually that is the line itself).
+function visualLine(line) {
+  var merged
+  while (merged = collapsedSpanAtStart(line))
+    { line = merged.find(-1, true).line }
+  return line
+}
+
+// Returns an array of logical lines that continue the visual line
+// started by the argument, or undefined if there are no such lines.
+function visualLineContinued(line) {
+  var merged, lines
+  while (merged = collapsedSpanAtEnd(line)) {
+    line = merged.find(1, true).line
+    ;(lines || (lines = [])).push(line)
+  }
+  return lines
+}
+
+// Get the line number of the start of the visual line that the
+// given line number is part of.
+function visualLineNo(doc, lineN) {
+  var line = getLine(doc, lineN), vis = visualLine(line)
+  if (line == vis) { return lineN }
+  return lineNo(vis)
+}
+
+// Get the line number of the start of the next visual line after
+// the given line.
+function visualLineEndNo(doc, lineN) {
+  if (lineN > doc.lastLine()) { return lineN }
+  var line = getLine(doc, lineN), merged
+  if (!lineIsHidden(doc, line)) { return lineN }
+  while (merged = collapsedSpanAtEnd(line))
+    { line = merged.find(1, true).line }
+  return lineNo(line) + 1
+}
+
+// Compute whether a line is hidden. Lines count as hidden when they
+// are part of a visual line that starts with another line, or when
+// they are entirely covered by collapsed, non-widget span.
+function lineIsHidden(doc, line) {
+  var sps = sawCollapsedSpans && line.markedSpans
+  if (sps) { for (var sp = void 0, i = 0; i < sps.length; ++i) {
+    sp = sps[i]
+    if (!sp.marker.collapsed) { continue }
+    if (sp.from == null) { return true }
+    if (sp.marker.widgetNode) { continue }
+    if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+      { return true }
+  } }
+}
+function lineIsHiddenInner(doc, line, span) {
+  if (span.to == null) {
+    var end = span.marker.find(1, true)
+    return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+  }
+  if (span.marker.inclusiveRight && span.to == line.text.length)
+    { return true }
+  for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {
+    sp = line.markedSpans[i]
+    if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+        (sp.to == null || sp.to != span.from) &&
+        (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+        lineIsHiddenInner(doc, line, sp)) { return true }
+  }
+}
+
+// Find the height above the given line.
+function heightAtLine(lineObj) {
+  lineObj = visualLine(lineObj)
+
+  var h = 0, chunk = lineObj.parent
+  for (var i = 0; i < chunk.lines.length; ++i) {
+    var line = chunk.lines[i]
+    if (line == lineObj) { break }
+    else { h += line.height }
+  }
+  for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+    for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+      var cur = p.children[i$1]
+      if (cur == chunk) { break }
+      else { h += cur.height }
+    }
+  }
+  return h
+}
+
+// Compute the character length of a line, taking into account
+// collapsed ranges (see markText) that might hide parts, and join
+// other lines onto it.
+function lineLength(line) {
+  if (line.height == 0) { return 0 }
+  var len = line.text.length, merged, cur = line
+  while (merged = collapsedSpanAtStart(cur)) {
+    var found = merged.find(0, true)
+    cur = found.from.line
+    len += found.from.ch - found.to.ch
+  }
+  cur = line
+  while (merged = collapsedSpanAtEnd(cur)) {
+    var found$1 = merged.find(0, true)
+    len -= cur.text.length - found$1.from.ch
+    cur = found$1.to.line
+    len += cur.text.length - found$1.to.ch
+  }
+  return len
+}
+
+// Find the longest line in the document.
+function findMaxLine(cm) {
+  var d = cm.display, doc = cm.doc
+  d.maxLine = getLine(doc, doc.first)
+  d.maxLineLength = lineLength(d.maxLine)
+  d.maxLineChanged = true
+  doc.iter(function (line) {
+    var len = lineLength(line)
+    if (len > d.maxLineLength) {
+      d.maxLineLength = len
+      d.maxLine = line
+    }
+  })
+}
+
+// BIDI HELPERS
+
+function iterateBidiSections(order, from, to, f) {
+  if (!order) { return f(from, to, "ltr") }
+  var found = false
+  for (var i = 0; i < order.length; ++i) {
+    var part = order[i]
+    if (part.from < to && part.to > from || from == to && part.to == from) {
+      f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr")
+      found = true
+    }
+  }
+  if (!found) { f(from, to, "ltr") }
+}
+
+function bidiLeft(part) { return part.level % 2 ? part.to : part.from }
+function bidiRight(part) { return part.level % 2 ? part.from : part.to }
+
+function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0 }
+function lineRight(line) {
+  var order = getOrder(line)
+  if (!order) { return line.text.length }
+  return bidiRight(lst(order))
+}
+
+function compareBidiLevel(order, a, b) {
+  var linedir = order[0].level
+  if (a == linedir) { return true }
+  if (b == linedir) { return false }
+  return a < b
+}
+
+var bidiOther = null
+function getBidiPartAt(order, pos) {
+  var found
+  bidiOther = null
+  for (var i = 0; i < order.length; ++i) {
+    var cur = order[i]
+    if (cur.from < pos && cur.to > pos) { return i }
+    if ((cur.from == pos || cur.to == pos)) {
+      if (found == null) {
+        found = i
+      } else if (compareBidiLevel(order, cur.level, order[found].level)) {
+        if (cur.from != cur.to) { bidiOther = found }
+        return i
+      } else {
+        if (cur.from != cur.to) { bidiOther = i }
+        return found
+      }
+    }
+  }
+  return found
+}
+
+function moveInLine(line, pos, dir, byUnit) {
+  if (!byUnit) { return pos + dir }
+  do { pos += dir }
+  while (pos > 0 && isExtendingChar(line.text.charAt(pos)))
+  return pos
+}
+
+// This is needed in order to move 'visually' through bi-directional
+// text -- i.e., pressing left should make the cursor go left, even
+// when in RTL text. The tricky part is the 'jumps', where RTL and
+// LTR text touch each other. This often requires the cursor offset
+// to move more than one unit, in order to visually move one unit.
+function moveVisually(line, start, dir, byUnit) {
+  var bidi = getOrder(line)
+  if (!bidi) { return moveLogically(line, start, dir, byUnit) }
+  var pos = getBidiPartAt(bidi, start), part = bidi[pos]
+  var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit)
+
+  for (;;) {
+    if (target > part.from && target < part.to) { return target }
+    if (target == part.from || target == part.to) {
+      if (getBidiPartAt(bidi, target) == pos) { return target }
+      part = bidi[pos += dir]
+      return (dir > 0) == part.level % 2 ? part.to : part.from
+    } else {
+      part = bidi[pos += dir]
+      if (!part) { return null }
+      if ((dir > 0) == part.level % 2)
+        { target = moveInLine(line, part.to, -1, byUnit) }
+      else
+        { target = moveInLine(line, part.from, 1, byUnit) }
+    }
+  }
+}
+
+function moveLogically(line, start, dir, byUnit) {
+  var target = start + dir
+  if (byUnit) { while (target > 0 && isExtendingChar(line.text.charAt(target))) { target += dir } }
+  return target < 0 || target > line.text.length ? null : target
+}
+
+// Bidirectional ordering algorithm
+// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+// that this (partially) implements.
+
+// One-char codes used for character types:
+// L (L):   Left-to-Right
+// R (R):   Right-to-Left
+// r (AL):  Right-to-Left Arabic
+// 1 (EN):  European Number
+// + (ES):  European Number Separator
+// % (ET):  European Number Terminator
+// n (AN):  Arabic Number
+// , (CS):  Common Number Separator
+// m (NSM): Non-Spacing Mark
+// b (BN):  Boundary Neutral
+// s (B):   Paragraph Separator
+// t (S):   Segment Separator
+// w (WS):  Whitespace
+// N (ON):  Other Neutrals
+
+// Returns null if characters are ordered as they appear
+// (left-to-right), or an array of sections ({from, to, level}
+// objects) in the order in which they occur visually.
+var bidiOrdering = (function() {
+  // Character types for codepoints 0 to 0xff
+  var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"
+  // Character types for codepoints 0x600 to 0x6ff
+  var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"
+  function charType(code) {
+    if (code <= 0xf7) { return lowTypes.charAt(code) }
+    else if (0x590 <= code && code <= 0x5f4) { return "R" }
+    else if (0x600 <= code && code <= 0x6ed) { return arabicTypes.charAt(code - 0x600) }
+    else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+    else if (0x2000 <= code && code <= 0x200b) { return "w" }
+    else if (code == 0x200c) { return "b" }
+    else { return "L" }
+  }
+
+  var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/
+  var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/
+  // Browsers seem to always treat the boundaries of block elements as being L.
+  var outerType = "L"
+
+  function BidiSpan(level, from, to) {
+    this.level = level
+    this.from = from; this.to = to
+  }
+
+  return function(str) {
+    if (!bidiRE.test(str)) { return false }
+    var len = str.length, types = []
+    for (var i = 0; i < len; ++i)
+      { types.push(charType(str.charCodeAt(i))) }
+
+    // W1. Examine each non-spacing mark (NSM) in the level run, and
+    // change the type of the NSM to the type of the previous
+    // character. If the NSM is at the start of the level run, it will
+    // get the type of sor.
+    for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+      var type = types[i$1]
+      if (type == "m") { types[i$1] = prev }
+      else { prev = type }
+    }
+
+    // W2. Search backwards from each instance of a European number
+    // until the first strong type (R, L, AL, or sor) is found. If an
+    // AL is found, change the type of the European number to Arabic
+    // number.
+    // W3. Change all ALs to R.
+    for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+      var type$1 = types[i$2]
+      if (type$1 == "1" && cur == "r") { types[i$2] = "n" }
+      else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } }
+    }
+
+    // W4. A single European separator between two European numbers
+    // changes to a European number. A single common separator between
+    // two numbers of the same type changes to that type.
+    for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+      var type$2 = types[i$3]
+      if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" }
+      else if (type$2 == "," && prev$1 == types[i$3+1] &&
+               (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 }
+      prev$1 = type$2
+    }
+
+    // W5. A sequence of European terminators adjacent to European
+    // numbers changes to all European numbers.
+    // W6. Otherwise, separators and terminators change to Other
+    // Neutral.
+    for (var i$4 = 0; i$4 < len; ++i$4) {
+      var type$3 = types[i$4]
+      if (type$3 == ",") { types[i$4] = "N" }
+      else if (type$3 == "%") {
+        var end = void 0
+        for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+        var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"
+        for (var j = i$4; j < end; ++j) { types[j] = replace }
+        i$4 = end - 1
+      }
+    }
+
+    // W7. Search backwards from each instance of a European number
+    // until the first strong type (R, L, or sor) is found. If an L is
+    // found, then change the type of the European number to L.
+    for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+      var type$4 = types[i$5]
+      if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" }
+      else if (isStrong.test(type$4)) { cur$1 = type$4 }
+    }
+
+    // N1. A sequence of neutrals takes the direction of the
+    // surrounding strong text if the text on both sides has the same
+    // direction. European and Arabic numbers act as if they were R in
+    // terms of their influence on neutrals. Start-of-level-run (sor)
+    // and end-of-level-run (eor) are used at level run boundaries.
+    // N2. Any remaining neutrals take the embedding direction.
+    for (var i$6 = 0; i$6 < len; ++i$6) {
+      if (isNeutral.test(types[i$6])) {
+        var end$1 = void 0
+        for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+        var before = (i$6 ? types[i$6-1] : outerType) == "L"
+        var after = (end$1 < len ? types[end$1] : outerType) == "L"
+        var replace$1 = before || after ? "L" : "R"
+        for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 }
+        i$6 = end$1 - 1
+      }
+    }
+
+    // Here we depart from the documented algorithm, in order to avoid
+    // building up an actual levels array. Since there are only three
+    // levels (0, 1, 2) in an implementation that doesn't take
+    // explicit embedding into account, we can build up the order on
+    // the fly, without following the level-based algorithm.
+    var order = [], m
+    for (var i$7 = 0; i$7 < len;) {
+      if (countsAsLeft.test(types[i$7])) {
+        var start = i$7
+        for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+        order.push(new BidiSpan(0, start, i$7))
+      } else {
+        var pos = i$7, at = order.length
+        for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+        for (var j$2 = pos; j$2 < i$7;) {
+          if (countsAsNum.test(types[j$2])) {
+            if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) }
+            var nstart = j$2
+            for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+            order.splice(at, 0, new BidiSpan(2, nstart, j$2))
+            pos = j$2
+          } else { ++j$2 }
+        }
+        if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) }
+      }
+    }
+    if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+      order[0].from = m[0].length
+      order.unshift(new BidiSpan(0, 0, m[0].length))
+    }
+    if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+      lst(order).to -= m[0].length
+      order.push(new BidiSpan(0, len - m[0].length, len))
+    }
+    if (order[0].level == 2)
+      { order.unshift(new BidiSpan(1, order[0].to, order[0].to)) }
+    if (order[0].level != lst(order).level)
+      { order.push(new BidiSpan(order[0].level, len, len)) }
+
+    return order
+  }
+})()
+
+// Get the bidi ordering for the given line (and cache it). Returns
+// false for lines that are fully left-to-right, and an array of
+// BidiSpan objects otherwise.
+function getOrder(line) {
+  var order = line.order
+  if (order == null) { order = line.order = bidiOrdering(line.text) }
+  return order
+}
+
+// EVENT HANDLING
+
+// Lightweight event framework. on/off also work on DOM nodes,
+// registering native DOM handlers.
+
+var noHandlers = []
+
+var on = function(emitter, type, f) {
+  if (emitter.addEventListener) {
+    emitter.addEventListener(type, f, false)
+  } else if (emitter.attachEvent) {
+    emitter.attachEvent("on" + type, f)
+  } else {
+    var map$$1 = emitter._handlers || (emitter._handlers = {})
+    map$$1[type] = (map$$1[type] || noHandlers).concat(f)
+  }
+}
+
+function getHandlers(emitter, type) {
+  return emitter._handlers && emitter._handlers[type] || noHandlers
+}
+
+function off(emitter, type, f) {
+  if (emitter.removeEventListener) {
+    emitter.removeEventListener(type, f, false)
+  } else if (emitter.detachEvent) {
+    emitter.detachEvent("on" + type, f)
+  } else {
+    var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type]
+    if (arr) {
+      var index = indexOf(arr, f)
+      if (index > -1)
+        { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)) }
+    }
+  }
+}
+
+function signal(emitter, type /*, values...*/) {
+  var handlers = getHandlers(emitter, type)
+  if (!handlers.length) { return }
+  var args = Array.prototype.slice.call(arguments, 2)
+  for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) }
+}
+
+// The DOM events that CodeMirror handles can be overridden by
+// registering a (non-DOM) handler on the editor for the event name,
+// and preventDefault-ing the event in that handler.
+function signalDOMEvent(cm, e, override) {
+  if (typeof e == "string")
+    { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} }
+  signal(cm, override || e.type, cm, e)
+  return e_defaultPrevented(e) || e.codemirrorIgnore
+}
+
+function signalCursorActivity(cm) {
+  var arr = cm._handlers && cm._handlers.cursorActivity
+  if (!arr) { return }
+  var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = [])
+  for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+    { set.push(arr[i]) } }
+}
+
+function hasHandler(emitter, type) {
+  return getHandlers(emitter, type).length > 0
+}
+
+// Add on and off methods to a constructor's prototype, to make
+// registering events on such objects more convenient.
+function eventMixin(ctor) {
+  ctor.prototype.on = function(type, f) {on(this, type, f)}
+  ctor.prototype.off = function(type, f) {off(this, type, f)}
+}
+
+// Due to the fact that we still support jurassic IE versions, some
+// compatibility wrappers are needed.
+
+function e_preventDefault(e) {
+  if (e.preventDefault) { e.preventDefault() }
+  else { e.returnValue = false }
+}
+function e_stopPropagation(e) {
+  if (e.stopPropagation) { e.stopPropagation() }
+  else { e.cancelBubble = true }
+}
+function e_defaultPrevented(e) {
+  return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+}
+function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)}
+
+function e_target(e) {return e.target || e.srcElement}
+function e_button(e) {
+  var b = e.which
+  if (b == null) {
+    if (e.button & 1) { b = 1 }
+    else if (e.button & 2) { b = 3 }
+    else if (e.button & 4) { b = 2 }
+  }
+  if (mac && e.ctrlKey && b == 1) { b = 3 }
+  return b
+}
+
+// Detect drag-and-drop
+var dragAndDrop = function() {
+  // There is *some* kind of drag-and-drop support in IE6-8, but I
+  // couldn't get it to work yet.
+  if (ie && ie_version < 9) { return false }
+  var div = elt('div')
+  return "draggable" in div || "dragDrop" in div
+}()
+
+var zwspSupported
+function zeroWidthElement(measure) {
+  if (zwspSupported == null) {
+    var test = elt("span", "\u200b")
+    removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]))
+    if (measure.firstChild.offsetHeight != 0)
+      { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) }
+  }
+  var node = zwspSupported ? elt("span", "\u200b") :
+    elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px")
+  node.setAttribute("cm-text", "")
+  return node
+}
+
+// Feature-detect IE's crummy client rect reporting for bidi text
+var badBidiRects
+function hasBadBidiRects(measure) {
+  if (badBidiRects != null) { return badBidiRects }
+  var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"))
+  var r0 = range(txt, 0, 1).getBoundingClientRect()
+  var r1 = range(txt, 1, 2).getBoundingClientRect()
+  removeChildren(measure)
+  if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+  return badBidiRects = (r1.right - r0.right < 3)
+}
+
+// See if "".split is the broken IE version, if so, provide an
+// alternative way to split lines.
+var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+  var pos = 0, result = [], l = string.length
+  while (pos <= l) {
+    var nl = string.indexOf("\n", pos)
+    if (nl == -1) { nl = string.length }
+    var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl)
+    var rt = line.indexOf("\r")
+    if (rt != -1) {
+      result.push(line.slice(0, rt))
+      pos += rt + 1
+    } else {
+      result.push(line)
+      pos = nl + 1
+    }
+  }
+  return result
+} : function (string) { return string.split(/\r\n?|\n/); }
+
+var hasSelection = window.getSelection ? function (te) {
+  try { return te.selectionStart != te.selectionEnd }
+  catch(e) { return false }
+} : function (te) {
+  var range$$1
+  try {range$$1 = te.ownerDocument.selection.createRange()}
+  catch(e) {}
+  if (!range$$1 || range$$1.parentElement() != te) { return false }
+  return range$$1.compareEndPoints("StartToEnd", range$$1) != 0
+}
+
+var hasCopyEvent = (function () {
+  var e = elt("div")
+  if ("oncopy" in e) { return true }
+  e.setAttribute("oncopy", "return;")
+  return typeof e.oncopy == "function"
+})()
+
+var badZoomedRects = null
+function hasBadZoomedRects(measure) {
+  if (badZoomedRects != null) { return badZoomedRects }
+  var node = removeChildrenAndAdd(measure, elt("span", "x"))
+  var normal = node.getBoundingClientRect()
+  var fromRange = range(node, 0, 1).getBoundingClientRect()
+  return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+}
+
+// Known modes, by name and by MIME
+var modes = {};
+var mimeModes = {}
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+function defineMode(name, mode) {
+  if (arguments.length > 2)
+    { mode.dependencies = Array.prototype.slice.call(arguments, 2) }
+  modes[name] = mode
+}
+
+function defineMIME(mime, spec) {
+  mimeModes[mime] = spec
+}
+
+// Given a MIME type, a {name, ...options} config object, or a name
+// string, return a mode config object.
+function resolveMode(spec) {
+  if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+    spec = mimeModes[spec]
+  } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+    var found = mimeModes[spec.name]
+    if (typeof found == "string") { found = {name: found} }
+    spec = createObj(found, spec)
+    spec.name = found.name
+  } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+    return resolveMode("application/xml")
+  } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+    return resolveMode("application/json")
+  }
+  if (typeof spec == "string") { return {name: spec} }
+  else { return spec || {name: "null"} }
+}
+
+// Given a mode spec (anything that resolveMode accepts), find and
+// initialize an actual mode object.
+function getMode(options, spec) {
+  spec = resolveMode(spec)
+  var mfactory = modes[spec.name]
+  if (!mfactory) { return getMode(options, "text/plain") }
+  var modeObj = mfactory(options, spec)
+  if (modeExtensions.hasOwnProperty(spec.name)) {
+    var exts = modeExtensions[spec.name]
+    for (var prop in exts) {
+      if (!exts.hasOwnProperty(prop)) { continue }
+      if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] }
+      modeObj[prop] = exts[prop]
+    }
+  }
+  modeObj.name = spec.name
+  if (spec.helperType) { modeObj.helperType = spec.helperType }
+  if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+    { modeObj[prop$1] = spec.modeProps[prop$1] } }
+
+  return modeObj
+}
+
+// This can be used to attach properties to mode objects from
+// outside the actual mode definition.
+var modeExtensions = {}
+function extendMode(mode, properties) {
+  var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {})
+  copyObj(properties, exts)
+}
+
+function copyState(mode, state) {
+  if (state === true) { return state }
+  if (mode.copyState) { return mode.copyState(state) }
+  var nstate = {}
+  for (var n in state) {
+    var val = state[n]
+    if (val instanceof Array) { val = val.concat([]) }
+    nstate[n] = val
+  }
+  return nstate
+}
+
+// Given a mode and a state (for that mode), find the inner mode and
+// state at the position that the state refers to.
+function innerMode(mode, state) {
+  var info
+  while (mode.innerMode) {
+    info = mode.innerMode(state)
+    if (!info || info.mode == mode) { break }
+    state = info.state
+    mode = info.mode
+  }
+  return info || {mode: mode, state: state}
+}
+
+function startState(mode, a1, a2) {
+  return mode.startState ? mode.startState(a1, a2) : true
+}
+
+// STRING STREAM
+
+// Fed to the mode parsers, provides helper functions to make
+// parsers more succinct.
+
+var StringStream = function(string, tabSize) {
+  this.pos = this.start = 0
+  this.string = string
+  this.tabSize = tabSize || 8
+  this.lastColumnPos = this.lastColumnValue = 0
+  this.lineStart = 0
+}
+
+StringStream.prototype = {
+  eol: function() {return this.pos >= this.string.length},
+  sol: function() {return this.pos == this.lineStart},
+  peek: function() {return this.string.charAt(this.pos) || undefined},
+  next: function() {
+    if (this.pos < this.string.length)
+      { return this.string.charAt(this.pos++) }
+  },
+  eat: function(match) {
+    var ch = this.string.charAt(this.pos)
+    var ok
+    if (typeof match == "string") { ok = ch == match }
+    else { ok = ch && (match.test ? match.test(ch) : match(ch)) }
+    if (ok) {++this.pos; return ch}
+  },
+  eatWhile: function(match) {
+    var start = this.pos
+    while (this.eat(match)){}
+    return this.pos > start
+  },
+  eatSpace: function() {
+    var this$1 = this;
+
+    var start = this.pos
+    while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos }
+    return this.pos > start
+  },
+  skipToEnd: function() {this.pos = this.string.length},
+  skipTo: function(ch) {
+    var found = this.string.indexOf(ch, this.pos)
+    if (found > -1) {this.pos = found; return true}
+  },
+  backUp: function(n) {this.pos -= n},
+  column: function() {
+    if (this.lastColumnPos < this.start) {
+      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue)
+      this.lastColumnPos = this.start
+    }
+    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+  },
+  indentation: function() {
+    return countColumn(this.string, null, this.tabSize) -
+      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+  },
+  match: function(pattern, consume, caseInsensitive) {
+    if (typeof pattern == "string") {
+      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }
+      var substr = this.string.substr(this.pos, pattern.length)
+      if (cased(substr) == cased(pattern)) {
+        if (consume !== false) { this.pos += pattern.length }
+        return true
+      }
+    } else {
+      var match = this.string.slice(this.pos).match(pattern)
+      if (match && match.index > 0) { return null }
+      if (match && consume !== false) { this.pos += match[0].length }
+      return match
+    }
+  },
+  current: function(){return this.string.slice(this.start, this.pos)},
+  hideFirstChars: function(n, inner) {
+    this.lineStart += n
+    try { return inner() }
+    finally { this.lineStart -= n }
+  }
+}
+
+// Compute a style array (an array starting with a mode generation
+// -- for invalidation -- followed by pairs of end positions and
+// style strings), which is used to highlight the tokens on the
+// line.
+function highlightLine(cm, line, state, forceToEnd) {
+  // A styles array always starts with a number identifying the
+  // mode/overlays that it is based on (for easy invalidation).
+  var st = [cm.state.modeGen], lineClasses = {}
+  // Compute the base array of styles
+  runMode(cm, line.text, cm.doc.mode, state, function (end, style) { return st.push(end, style); },
+    lineClasses, forceToEnd)
+
+  // Run overlays, adjust style array.
+  var loop = function ( o ) {
+    var overlay = cm.state.overlays[o], i = 1, at = 0
+    runMode(cm, line.text, overlay.mode, true, function (end, style) {
+      var start = i
+      // Ensure there's a token end at the current position, and that i points at it
+      while (at < end) {
+        var i_end = st[i]
+        if (i_end > end)
+          { st.splice(i, 1, end, st[i+1], i_end) }
+        i += 2
+        at = Math.min(end, i_end)
+      }
+      if (!style) { return }
+      if (overlay.opaque) {
+        st.splice(start, i - start, end, "overlay " + style)
+        i = start + 2
+      } else {
+        for (; start < i; start += 2) {
+          var cur = st[start+1]
+          st[start+1] = (cur ? cur + " " : "") + "overlay " + style
+        }
+      }
+    }, lineClasses)
+  };
+
+  for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+  return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+}
+
+function getLineStyles(cm, line, updateFrontier) {
+  if (!line.styles || line.styles[0] != cm.state.modeGen) {
+    var state = getStateBefore(cm, lineNo(line))
+    var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state)
+    line.stateAfter = state
+    line.styles = result.styles
+    if (result.classes) { line.styleClasses = result.classes }
+    else if (line.styleClasses) { line.styleClasses = null }
+    if (updateFrontier === cm.doc.frontier) { cm.doc.frontier++ }
+  }
+  return line.styles
+}
+
+function getStateBefore(cm, n, precise) {
+  var doc = cm.doc, display = cm.display
+  if (!doc.mode.startState) { return true }
+  var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter
+  if (!state) { state = startState(doc.mode) }
+  else { state = copyState(doc.mode, state) }
+  doc.iter(pos, n, function (line) {
+    processLine(cm, line.text, state)
+    var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo
+    line.stateAfter = save ? copyState(doc.mode, state) : null
+    ++pos
+  })
+  if (precise) { doc.frontier = pos }
+  return state
+}
+
+// Lightweight form of highlight -- proceed over this line and
+// update state, but don't save a style array. Used for lines that
+// aren't currently visible.
+function processLine(cm, text, state, startAt) {
+  var mode = cm.doc.mode
+  var stream = new StringStream(text, cm.options.tabSize)
+  stream.start = stream.pos = startAt || 0
+  if (text == "") { callBlankLine(mode, state) }
+  while (!stream.eol()) {
+    readToken(mode, stream, state)
+    stream.start = stream.pos
+  }
+}
+
+function callBlankLine(mode, state) {
+  if (mode.blankLine) { return mode.blankLine(state) }
+  if (!mode.innerMode) { return }
+  var inner = innerMode(mode, state)
+  if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+}
+
+function readToken(mode, stream, state, inner) {
+  for (var i = 0; i < 10; i++) {
+    if (inner) { inner[0] = innerMode(mode, state).mode }
+    var style = mode.token(stream, state)
+    if (stream.pos > stream.start) { return style }
+  }
+  throw new Error("Mode " + mode.name + " failed to advance stream.")
+}
+
+// Utility for getTokenAt and getLineTokens
+function takeToken(cm, pos, precise, asArray) {
+  var getObj = function (copy) { return ({
+    start: stream.start, end: stream.pos,
+    string: stream.current(),
+    type: style || null,
+    state: copy ? copyState(doc.mode, state) : state
+  }); }
+
+  var doc = cm.doc, mode = doc.mode, style
+  pos = clipPos(doc, pos)
+  var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise)
+  var stream = new StringStream(line.text, cm.options.tabSize), tokens
+  if (asArray) { tokens = [] }
+  while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+    stream.start = stream.pos
+    style = readToken(mode, stream, state)
+    if (asArray) { tokens.push(getObj(true)) }
+  }
+  return asArray ? tokens : getObj()
+}
+
+function extractLineClasses(type, output) {
+  if (type) { for (;;) {
+    var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/)
+    if (!lineClass) { break }
+    type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length)
+    var prop = lineClass[1] ? "bgClass" : "textClass"
+    if (output[prop] == null)
+      { output[prop] = lineClass[2] }
+    else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+      { output[prop] += " " + lineClass[2] }
+  } }
+  return type
+}
+
+// Run the given mode's parser over a line, calling f for each token.
+function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
+  var flattenSpans = mode.flattenSpans
+  if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans }
+  var curStart = 0, curStyle = null
+  var stream = new StringStream(text, cm.options.tabSize), style
+  var inner = cm.options.addModeClass && [null]
+  if (text == "") { extractLineClasses(callBlankLine(mode, state), lineClasses) }
+  while (!stream.eol()) {
+    if (stream.pos > cm.options.maxHighlightLength) {
+      flattenSpans = false
+      if (forceToEnd) { processLine(cm, text, state, stream.pos) }
+      stream.pos = text.length
+      style = null
+    } else {
+      style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses)
+    }
+    if (inner) {
+      var mName = inner[0].name
+      if (mName) { style = "m-" + (style ? mName + " " + style : mName) }
+    }
+    if (!flattenSpans || curStyle != style) {
+      while (curStart < stream.start) {
+        curStart = Math.min(stream.start, curStart + 5000)
+        f(curStart, curStyle)
+      }
+      curStyle = style
+    }
+    stream.start = stream.pos
+  }
+  while (curStart < stream.pos) {
+    // Webkit seems to refuse to render text nodes longer than 57444
+    // characters, and returns inaccurate measurements in nodes
+    // starting around 5000 chars.
+    var pos = Math.min(stream.pos, curStart + 5000)
+    f(pos, curStyle)
+    curStart = pos
+  }
+}
+
+// Finds the line to start with when starting a parse. Tries to
+// find a line with a stateAfter, so that it can start with a
+// valid state. If that fails, it returns the line with the
+// smallest indentation, which tends to need the least context to
+// parse correctly.
+function findStartLine(cm, n, precise) {
+  var minindent, minline, doc = cm.doc
+  var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100)
+  for (var search = n; search > lim; --search) {
+    if (search <= doc.first) { return doc.first }
+    var line = getLine(doc, search - 1)
+    if (line.stateAfter && (!precise || search <= doc.frontier)) { return search }
+    var indented = countColumn(line.text, null, cm.options.tabSize)
+    if (minline == null || minindent > indented) {
+      minline = search - 1
+      minindent = indented
+    }
+  }
+  return minline
+}
+
+// LINE DATA STRUCTURE
+
+// Line objects. These hold state related to a line, including
+// highlighting info (the styles array).
+function Line(text, markedSpans, estimateHeight) {
+  this.text = text
+  attachMarkedSpans(this, markedSpans)
+  this.height = estimateHeight ? estimateHeight(this) : 1
+}
+eventMixin(Line)
+Line.prototype.lineNo = function() { return lineNo(this) }
+
+// Change the content (text, markers) of a line. Automatically
+// invalidates cached information and tries to re-estimate the
+// line's height.
+function updateLine(line, text, markedSpans, estimateHeight) {
+  line.text = text
+  if (line.stateAfter) { line.stateAfter = null }
+  if (line.styles) { line.styles = null }
+  if (line.order != null) { line.order = null }
+  detachMarkedSpans(line)
+  attachMarkedSpans(line, markedSpans)
+  var estHeight = estimateHeight ? estimateHeight(line) : 1
+  if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+}
+
+// Detach a line from the document tree and its markers.
+function cleanUpLine(line) {
+  line.parent = null
+  detachMarkedSpans(line)
+}
+
+// Convert a style as returned by a mode (either null, or a string
+// containing one or more styles) to a CSS style. This is cached,
+// and also looks for line-wide styles.
+var styleToClassCache = {};
+var styleToClassCacheWithMode = {}
+function interpretTokenStyle(style, options) {
+  if (!style || /^\s*$/.test(style)) { return null }
+  var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache
+  return cache[style] ||
+    (cache[style] = style.replace(/\S+/g, "cm-$&"))
+}
+
+// Render the DOM representation of the text of a line. Also builds
+// up a 'line map', which points at the DOM nodes that represent
+// specific stretches of text, and is used by the measuring code.
+// The returned object contains the DOM node, this map, and
+// information about line-wide styles that were set by the mode.
+function buildLineContent(cm, lineView) {
+  // The padding-right forces the element to have a 'border', which
+  // is needed on Webkit to be able to get line-level bounding
+  // rectangles for it (in measureChar).
+  var content = elt("span", null, null, webkit ? "padding-right: .1px" : null)
+  var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content,
+                 col: 0, pos: 0, cm: cm,
+                 trailingSpace: false,
+                 splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}
+  lineView.measure = {}
+
+  // Iterate over the logical lines that make up this visual line.
+  for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+    var line = i ? lineView.rest[i - 1] : lineView.line, order = void 0
+    builder.pos = 0
+    builder.addToken = buildToken
+    // Optionally wire in some hacks into the token-rendering
+    // algorithm, to deal with browser quirks.
+    if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))
+      { builder.addToken = buildTokenBadBidi(builder.addToken, order) }
+    builder.map = []
+    var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line)
+    insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate))
+    if (line.styleClasses) {
+      if (line.styleClasses.bgClass)
+        { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") }
+      if (line.styleClasses.textClass)
+        { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") }
+    }
+
+    // Ensure at least a single node is present, for measuring.
+    if (builder.map.length == 0)
+      { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) }
+
+    // Store the map and a cache object for the current logical line
+    if (i == 0) {
+      lineView.measure.map = builder.map
+      lineView.measure.cache = {}
+    } else {
+      (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+      ;(lineView.measure.caches || (lineView.measure.caches = [])).push({})
+    }
+  }
+
+  // See issue #2901
+  if (webkit) {
+    var last = builder.content.lastChild
+    if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+      { builder.content.className = "cm-tab-wrap-hack" }
+  }
+
+  signal(cm, "renderLine", cm, lineView.line, builder.pre)
+  if (builder.pre.className)
+    { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") }
+
+  return builder
+}
+
+function defaultSpecialCharPlaceholder(ch) {
+  var token = elt("span", "\u2022", "cm-invalidchar")
+  token.title = "\\u" + ch.charCodeAt(0).toString(16)
+  token.setAttribute("aria-label", token.title)
+  return token
+}
+
+// Build up the DOM representation for a single token, and add it to
+// the line map. Takes care to render special characters separately.
+function buildToken(builder, text, style, startStyle, endStyle, title, css) {
+  if (!text) { return }
+  var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text
+  var special = builder.cm.state.specialChars, mustWrap = false
+  var content
+  if (!special.test(text)) {
+    builder.col += text.length
+    content = document.createTextNode(displayText)
+    builder.map.push(builder.pos, builder.pos + text.length, content)
+    if (ie && ie_version < 9) { mustWrap = true }
+    builder.pos += text.length
+  } else {
+    content = document.createDocumentFragment()
+    var pos = 0
+    while (true) {
+      special.lastIndex = pos
+      var m = special.exec(text)
+      var skipped = m ? m.index - pos : text.length - pos
+      if (skipped) {
+        var txt = document.createTextNode(displayText.slice(pos, pos + skipped))
+        if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) }
+        else { content.appendChild(txt) }
+        builder.map.push(builder.pos, builder.pos + skipped, txt)
+        builder.col += skipped
+        builder.pos += skipped
+      }
+      if (!m) { break }
+      pos += skipped + 1
+      var txt$1 = void 0
+      if (m[0] == "\t") {
+        var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize
+        txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"))
+        txt$1.setAttribute("role", "presentation")
+        txt$1.setAttribute("cm-text", "\t")
+        builder.col += tabWidth
+      } else if (m[0] == "\r" || m[0] == "\n") {
+        txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"))
+        txt$1.setAttribute("cm-text", m[0])
+        builder.col += 1
+      } else {
+        txt$1 = builder.cm.options.specialCharPlaceholder(m[0])
+        txt$1.setAttribute("cm-text", m[0])
+        if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) }
+        else { content.appendChild(txt$1) }
+        builder.col += 1
+      }
+      builder.map.push(builder.pos, builder.pos + 1, txt$1)
+      builder.pos++
+    }
+  }
+  builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32
+  if (style || startStyle || endStyle || mustWrap || css) {
+    var fullStyle = style || ""
+    if (startStyle) { fullStyle += startStyle }
+    if (endStyle) { fullStyle += endStyle }
+    var token = elt("span", [content], fullStyle, css)
+    if (title) { token.title = title }
+    return builder.content.appendChild(token)
+  }
+  builder.content.appendChild(content)
+}
+
+function splitSpaces(text, trailingBefore) {
+  if (text.length > 1 && !/  /.test(text)) { return text }
+  var spaceBefore = trailingBefore, result = ""
+  for (var i = 0; i < text.length; i++) {
+    var ch = text.charAt(i)
+    if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+      { ch = "\u00a0" }
+    result += ch
+    spaceBefore = ch == " "
+  }
+  return result
+}
+
+// Work around nonsense dimensions being reported for stretches of
+// right-to-left text.
+function buildTokenBadBidi(inner, order) {
+  return function (builder, text, style, startStyle, endStyle, title, css) {
+    style = style ? style + " cm-force-border" : "cm-force-border"
+    var start = builder.pos, end = start + text.length
+    for (;;) {
+      // Find the part that overlaps with the start of this text
+      var part = void 0
+      for (var i = 0; i < order.length; i++) {
+        part = order[i]
+        if (part.to > start && part.from <= start) { break }
+      }
+      if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }
+      inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css)
+      startStyle = null
+      text = text.slice(part.to - start)
+      start = part.to
+    }
+  }
+}
+
+function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+  var widget = !ignoreWidget && marker.widgetNode
+  if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) }
+  if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+    if (!widget)
+      { widget = builder.content.appendChild(document.createElement("span")) }
+    widget.setAttribute("cm-marker", marker.id)
+  }
+  if (widget) {
+    builder.cm.display.input.setUneditable(widget)
+    builder.content.appendChild(widget)
+  }
+  builder.pos += size
+  builder.trailingSpace = false
+}
+
+// Outputs a number of spans to make up a line, taking highlighting
+// and marked text into account.
+function insertLineContent(line, builder, styles) {
+  var spans = line.markedSpans, allText = line.text, at = 0
+  if (!spans) {
+    for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+      { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) }
+    return
+  }
+
+  var len = allText.length, pos = 0, i = 1, text = "", style, css
+  var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed
+  for (;;) {
+    if (nextChange == pos) { // Update current marker set
+      spanStyle = spanEndStyle = spanStartStyle = title = css = ""
+      collapsed = null; nextChange = Infinity
+      var foundBookmarks = [], endStyles = void 0
+      for (var j = 0; j < spans.length; ++j) {
+        var sp = spans[j], m = sp.marker
+        if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+          foundBookmarks.push(m)
+        } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+          if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+            nextChange = sp.to
+            spanEndStyle = ""
+          }
+          if (m.className) { spanStyle += " " + m.className }
+          if (m.css) { css = (css ? css + ";" : "") + m.css }
+          if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle }
+          if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) }
+          if (m.title && !title) { title = m.title }
+          if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+            { collapsed = sp }
+        } else if (sp.from > pos && nextChange > sp.from) {
+          nextChange = sp.from
+        }
+      }
+      if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+        { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } }
+
+      if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+        { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } }
+      if (collapsed && (collapsed.from || 0) == pos) {
+        buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+                           collapsed.marker, collapsed.from == null)
+        if (collapsed.to == null) { return }
+        if (collapsed.to == pos) { collapsed = false }
+      }
+    }
+    if (pos >= len) { break }
+
+    var upto = Math.min(len, nextChange)
+    while (true) {
+      if (text) {
+        var end = pos + text.length
+        if (!collapsed) {
+          var tokenText = end > upto ? text.slice(0, upto - pos) : text
+          builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+                           spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css)
+        }
+        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+        pos = end
+        spanStartStyle = ""
+      }
+      text = allText.slice(at, at = styles[i++])
+      style = interpretTokenStyle(styles[i++], builder.cm.options)
+    }
+  }
+}
+
+
+// These objects are used to represent the visible (currently drawn)
+// part of the document. A LineView may correspond to multiple
+// logical lines, if those are connected by collapsed ranges.
+function LineView(doc, line, lineN) {
+  // The starting line
+  this.line = line
+  // Continuing lines, if any
+  this.rest = visualLineContinued(line)
+  // Number of logical lines in this visual line
+  this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1
+  this.node = this.text = null
+  this.hidden = lineIsHidden(doc, line)
+}
+
+// Create a range of LineView objects for the given lines.
+function buildViewArray(cm, from, to) {
+  var array = [], nextPos
+  for (var pos = from; pos < to; pos = nextPos) {
+    var view = new LineView(cm.doc, getLine(cm.doc, pos), pos)
+    nextPos = pos + view.size
+    array.push(view)
+  }
+  return array
+}
+
+var operationGroup = null
+
+function pushOperation(op) {
+  if (operationGroup) {
+    operationGroup.ops.push(op)
+  } else {
+    op.ownsGroup = operationGroup = {
+      ops: [op],
+      delayedCallbacks: []
+    }
+  }
+}
+
+function fireCallbacksForOps(group) {
+  // Calls delayed callbacks and cursorActivity handlers until no
+  // new ones appear
+  var callbacks = group.delayedCallbacks, i = 0
+  do {
+    for (; i < callbacks.length; i++)
+      { callbacks[i].call(null) }
+    for (var j = 0; j < group.ops.length; j++) {
+      var op = group.ops[j]
+      if (op.cursorActivityHandlers)
+        { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+          { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } }
+    }
+  } while (i < callbacks.length)
+}
+
+function finishOperation(op, endCb) {
+  var group = op.ownsGroup
+  if (!group) { return }
+
+  try { fireCallbacksForOps(group) }
+  finally {
+    operationGroup = null
+    endCb(group)
+  }
+}
+
+var orphanDelayedCallbacks = null
+
+// Often, we want to signal events at a point where we are in the
+// middle of some work, but don't want the handler to start calling
+// other methods on the editor, which might be in an inconsistent
+// state or simply not expect any other events to happen.
+// signalLater looks whether there are any handlers, and schedules
+// them to be executed when the last operation ends, or, if no
+// operation is active, when a timeout fires.
+function signalLater(emitter, type /*, values...*/) {
+  var arr = getHandlers(emitter, type)
+  if (!arr.length) { return }
+  var args = Array.prototype.slice.call(arguments, 2), list
+  if (operationGroup) {
+    list = operationGroup.delayedCallbacks
+  } else if (orphanDelayedCallbacks) {
+    list = orphanDelayedCallbacks
+  } else {
+    list = orphanDelayedCallbacks = []
+    setTimeout(fireOrphanDelayed, 0)
+  }
+  var loop = function ( i ) {
+    list.push(function () { return arr[i].apply(null, args); })
+  };
+
+  for (var i = 0; i < arr.length; ++i)
+    loop( i );
+}
+
+function fireOrphanDelayed() {
+  var delayed = orphanDelayedCallbacks
+  orphanDelayedCallbacks = null
+  for (var i = 0; i < delayed.length; ++i) { delayed[i]() }
+}
+
+// When an aspect of a line changes, a string is added to
+// lineView.changes. This updates the relevant part of the line's
+// DOM structure.
+function updateLineForChanges(cm, lineView, lineN, dims) {
+  for (var j = 0; j < lineView.changes.length; j++) {
+    var type = lineView.changes[j]
+    if (type == "text") { updateLineText(cm, lineView) }
+    else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) }
+    else if (type == "class") { updateLineClasses(lineView) }
+    else if (type == "widget") { updateLineWidgets(cm, lineView, dims) }
+  }
+  lineView.changes = null
+}
+
+// Lines with gutter elements, widgets or a background class need to
+// be wrapped, and have the extra elements added to the wrapper div
+function ensureLineWrapped(lineView) {
+  if (lineView.node == lineView.text) {
+    lineView.node = elt("div", null, null, "position: relative")
+    if (lineView.text.parentNode)
+      { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) }
+    lineView.node.appendChild(lineView.text)
+    if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 }
+  }
+  return lineView.node
+}
+
+function updateLineBackground(lineView) {
+  var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass
+  if (cls) { cls += " CodeMirror-linebackground" }
+  if (lineView.background) {
+    if (cls) { lineView.background.className = cls }
+    else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }
+  } else if (cls) {
+    var wrap = ensureLineWrapped(lineView)
+    lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild)
+  }
+}
+
+// Wrapper around buildLineContent which will reuse the structure
+// in display.externalMeasured when possible.
+function getLineContent(cm, lineView) {
+  var ext = cm.display.externalMeasured
+  if (ext && ext.line == lineView.line) {
+    cm.display.externalMeasured = null
+    lineView.measure = ext.measure
+    return ext.built
+  }
+  return buildLineContent(cm, lineView)
+}
+
+// Redraw the line's text. Interacts with the background and text
+// classes because the mode may output tokens that influence these
+// classes.
+function updateLineText(cm, lineView) {
+  var cls = lineView.text.className
+  var built = getLineContent(cm, lineView)
+  if (lineView.text == lineView.node) { lineView.node = built.pre }
+  lineView.text.parentNode.replaceChild(built.pre, lineView.text)
+  lineView.text = built.pre
+  if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+    lineView.bgClass = built.bgClass
+    lineView.textClass = built.textClass
+    updateLineClasses(lineView)
+  } else if (cls) {
+    lineView.text.className = cls
+  }
+}
+
+function updateLineClasses(lineView) {
+  updateLineBackground(lineView)
+  if (lineView.line.wrapClass)
+    { ensureLineWrapped(lineView).className = lineView.line.wrapClass }
+  else if (lineView.node != lineView.text)
+    { lineView.node.className = "" }
+  var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass
+  lineView.text.className = textClass || ""
+}
+
+function updateLineGutter(cm, lineView, lineN, dims) {
+  if (lineView.gutter) {
+    lineView.node.removeChild(lineView.gutter)
+    lineView.gutter = null
+  }
+  if (lineView.gutterBackground) {
+    lineView.node.removeChild(lineView.gutterBackground)
+    lineView.gutterBackground = null
+  }
+  if (lineView.line.gutterClass) {
+    var wrap = ensureLineWrapped(lineView)
+    lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+                                    ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"))
+    wrap.insertBefore(lineView.gutterBackground, lineView.text)
+  }
+  var markers = lineView.line.gutterMarkers
+  if (cm.options.lineNumbers || markers) {
+    var wrap$1 = ensureLineWrapped(lineView)
+    var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"))
+    cm.display.input.setUneditable(gutterWrap)
+    wrap$1.insertBefore(gutterWrap, lineView.text)
+    if (lineView.line.gutterClass)
+      { gutterWrap.className += " " + lineView.line.gutterClass }
+    if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+      { lineView.lineNumber = gutterWrap.appendChild(
+        elt("div", lineNumberFor(cm.options, lineN),
+            "CodeMirror-linenumber CodeMirror-gutter-elt",
+            ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) }
+    if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {
+      var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]
+      if (found)
+        { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+                                   ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) }
+    } }
+  }
+}
+
+function updateLineWidgets(cm, lineView, dims) {
+  if (lineView.alignable) { lineView.alignable = null }
+  for (var node = lineView.node.firstChild, next = void 0; node; node = next) {
+    next = node.nextSibling
+    if (node.className == "CodeMirror-linewidget")
+      { lineView.node.removeChild(node) }
+  }
+  insertLineWidgets(cm, lineView, dims)
+}
+
+// Build a line's DOM representation from scratch
+function buildLineElement(cm, lineView, lineN, dims) {
+  var built = getLineContent(cm, lineView)
+  lineView.text = lineView.node = built.pre
+  if (built.bgClass) { lineView.bgClass = built.bgClass }
+  if (built.textClass) { lineView.textClass = built.textClass }
+
+  updateLineClasses(lineView)
+  updateLineGutter(cm, lineView, lineN, dims)
+  insertLineWidgets(cm, lineView, dims)
+  return lineView.node
+}
+
+// A lineView may contain multiple logical lines (when merged by
+// collapsed spans). The widgets for all of them need to be drawn.
+function insertLineWidgets(cm, lineView, dims) {
+  insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)
+  if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+    { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } }
+}
+
+function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+  if (!line.widgets) { return }
+  var wrap = ensureLineWrapped(lineView)
+  for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+    var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget")
+    if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") }
+    positionLineWidget(widget, node, lineView, dims)
+    cm.display.input.setUneditable(node)
+    if (allowAbove && widget.above)
+      { wrap.insertBefore(node, lineView.gutter || lineView.text) }
+    else
+      { wrap.appendChild(node) }
+    signalLater(widget, "redraw")
+  }
+}
+
+function positionLineWidget(widget, node, lineView, dims) {
+  if (widget.noHScroll) {
+    (lineView.alignable || (lineView.alignable = [])).push(node)
+    var width = dims.wrapperWidth
+    node.style.left = dims.fixedPos + "px"
+    if (!widget.coverGutter) {
+      width -= dims.gutterTotalWidth
+      node.style.paddingLeft = dims.gutterTotalWidth + "px"
+    }
+    node.style.width = width + "px"
+  }
+  if (widget.coverGutter) {
+    node.style.zIndex = 5
+    node.style.position = "relative"
+    if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" }
+  }
+}
+
+function widgetHeight(widget) {
+  if (widget.height != null) { return widget.height }
+  var cm = widget.doc.cm
+  if (!cm) { return 0 }
+  if (!contains(document.body, widget.node)) {
+    var parentStyle = "position: relative;"
+    if (widget.coverGutter)
+      { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" }
+    if (widget.noHScroll)
+      { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" }
+    removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle))
+  }
+  return widget.height = widget.node.parentNode.offsetHeight
+}
+
+// Return true when the given mouse event happened in a widget
+function eventInWidget(display, e) {
+  for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+    if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+        (n.parentNode == display.sizer && n != display.mover))
+      { return true }
+  }
+}
+
+// POSITION MEASUREMENT
+
+function paddingTop(display) {return display.lineSpace.offsetTop}
+function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+function paddingH(display) {
+  if (display.cachedPaddingH) { return display.cachedPaddingH }
+  var e = removeChildrenAndAdd(display.measure, elt("pre", "x"))
+  var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle
+  var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}
+  if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data }
+  return data
+}
+
+function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+function displayWidth(cm) {
+  return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+}
+function displayHeight(cm) {
+  return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+}
+
+// Ensure the lineView.wrapping.heights array is populated. This is
+// an array of bottom offsets for the lines that make up a drawn
+// line. When lineWrapping is on, there might be more than one
+// height.
+function ensureLineHeights(cm, lineView, rect) {
+  var wrapping = cm.options.lineWrapping
+  var curWidth = wrapping && displayWidth(cm)
+  if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+    var heights = lineView.measure.heights = []
+    if (wrapping) {
+      lineView.measure.width = curWidth
+      var rects = lineView.text.firstChild.getClientRects()
+      for (var i = 0; i < rects.length - 1; i++) {
+        var cur = rects[i], next = rects[i + 1]
+        if (Math.abs(cur.bottom - next.bottom) > 2)
+          { heights.push((cur.bottom + next.top) / 2 - rect.top) }
+      }
+    }
+    heights.push(rect.bottom - rect.top)
+  }
+}
+
+// Find a line map (mapping character offsets to text nodes) and a
+// measurement cache for the given line number. (A line view might
+// contain multiple lines when collapsed ranges are present.)
+function mapFromLineView(lineView, line, lineN) {
+  if (lineView.line == line)
+    { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+  for (var i = 0; i < lineView.rest.length; i++)
+    { if (lineView.rest[i] == line)
+      { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+  for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+    { if (lineNo(lineView.rest[i$1]) > lineN)
+      { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+}
+
+// Render a line into the hidden node display.externalMeasured. Used
+// when measurement is needed for a line that's not in the viewport.
+function updateExternalMeasurement(cm, line) {
+  line = visualLine(line)
+  var lineN = lineNo(line)
+  var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN)
+  view.lineN = lineN
+  var built = view.built = buildLineContent(cm, view)
+  view.text = built.pre
+  removeChildrenAndAdd(cm.display.lineMeasure, built.pre)
+  return view
+}
+
+// Get a {top, bottom, left, right} box (in line-local coordinates)
+// for a given character.
+function measureChar(cm, line, ch, bias) {
+  return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+}
+
+// Find a line view that corresponds to the given line number.
+function findViewForLine(cm, lineN) {
+  if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+    { return cm.display.view[findViewIndex(cm, lineN)] }
+  var ext = cm.display.externalMeasured
+  if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+    { return ext }
+}
+
+// Measurement can be split in two steps, the set-up work that
+// applies to the whole line, and the measurement of the actual
+// character. Functions like coordsChar, that need to do a lot of
+// measurements in a row, can thus ensure that the set-up work is
+// only done once.
+function prepareMeasureForLine(cm, line) {
+  var lineN = lineNo(line)
+  var view = findViewForLine(cm, lineN)
+  if (view && !view.text) {
+    view = null
+  } else if (view && view.changes) {
+    updateLineForChanges(cm, view, lineN, getDimensions(cm))
+    cm.curOp.forceUpdate = true
+  }
+  if (!view)
+    { view = updateExternalMeasurement(cm, line) }
+
+  var info = mapFromLineView(view, line, lineN)
+  return {
+    line: line, view: view, rect: null,
+    map: info.map, cache: info.cache, before: info.before,
+    hasHeights: false
+  }
+}
+
+// Given a prepared measurement object, measures the position of an
+// actual character (or fetches it from the cache).
+function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+  if (prepared.before) { ch = -1 }
+  var key = ch + (bias || ""), found
+  if (prepared.cache.hasOwnProperty(key)) {
+    found = prepared.cache[key]
+  } else {
+    if (!prepared.rect)
+      { prepared.rect = prepared.view.text.getBoundingClientRect() }
+    if (!prepared.hasHeights) {
+      ensureLineHeights(cm, prepared.view, prepared.rect)
+      prepared.hasHeights = true
+    }
+    found = measureCharInner(cm, prepared, ch, bias)
+    if (!found.bogus) { prepared.cache[key] = found }
+  }
+  return {left: found.left, right: found.right,
+          top: varHeight ? found.rtop : found.top,
+          bottom: varHeight ? found.rbottom : found.bottom}
+}
+
+var nullRect = {left: 0, right: 0, top: 0, bottom: 0}
+
+function nodeAndOffsetInLineMap(map$$1, ch, bias) {
+  var node, start, end, collapse, mStart, mEnd
+  // First, search the line map for the text node corresponding to,
+  // or closest to, the target character.
+  for (var i = 0; i < map$$1.length; i += 3) {
+    mStart = map$$1[i]
+    mEnd = map$$1[i + 1]
+    if (ch < mStart) {
+      start = 0; end = 1
+      collapse = "left"
+    } else if (ch < mEnd) {
+      start = ch - mStart
+      end = start + 1
+    } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {
+      end = mEnd - mStart
+      start = end - 1
+      if (ch >= mEnd) { collapse = "right" }
+    }
+    if (start != null) {
+      node = map$$1[i + 2]
+      if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+        { collapse = bias }
+      if (bias == "left" && start == 0)
+        { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {
+          node = map$$1[(i -= 3) + 2]
+          collapse = "left"
+        } }
+      if (bias == "right" && start == mEnd - mStart)
+        { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {
+          node = map$$1[(i += 3) + 2]
+          collapse = "right"
+        } }
+      break
+    }
+  }
+  return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+}
+
+function getUsefulRect(rects, bias) {
+  var rect = nullRect
+  if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+    if ((rect = rects[i]).left != rect.right) { break }
+  } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+    if ((rect = rects[i$1]).left != rect.right) { break }
+  } }
+  return rect
+}
+
+function measureCharInner(cm, prepared, ch, bias) {
+  var place = nodeAndOffsetInLineMap(prepared.map, ch, bias)
+  var node = place.node, start = place.start, end = place.end, collapse = place.collapse
+
+  var rect
+  if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+    for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+      while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start }
+      while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end }
+      if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+        { rect = node.parentNode.getBoundingClientRect() }
+      else
+        { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) }
+      if (rect.left || rect.right || start == 0) { break }
+      end = start
+      start = start - 1
+      collapse = "right"
+    }
+    if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) }
+  } else { // If it is a widget, simply get the box for the whole widget.
+    if (start > 0) { collapse = bias = "right" }
+    var rects
+    if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+      { rect = rects[bias == "right" ? rects.length - 1 : 0] }
+    else
+      { rect = node.getBoundingClientRect() }
+  }
+  if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+    var rSpan = node.parentNode.getClientRects()[0]
+    if (rSpan)
+      { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} }
+    else
+      { rect = nullRect }
+  }
+
+  var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top
+  var mid = (rtop + rbot) / 2
+  var heights = prepared.view.measure.heights
+  var i = 0
+  for (; i < heights.length - 1; i++)
+    { if (mid < heights[i]) { break } }
+  var top = i ? heights[i - 1] : 0, bot = heights[i]
+  var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+                right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+                top: top, bottom: bot}
+  if (!rect.left && !rect.right) { result.bogus = true }
+  if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot }
+
+  return result
+}
+
+// Work around problem with bounding client rects on ranges being
+// returned incorrectly when zoomed on IE10 and below.
+function maybeUpdateRectForZooming(measure, rect) {
+  if (!window.screen || screen.logicalXDPI == null ||
+      screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+    { return rect }
+  var scaleX = screen.logicalXDPI / screen.deviceXDPI
+  var scaleY = screen.logicalYDPI / screen.deviceYDPI
+  return {left: rect.left * scaleX, right: rect.right * scaleX,
+          top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+}
+
+function clearLineMeasurementCacheFor(lineView) {
+  if (lineView.measure) {
+    lineView.measure.cache = {}
+    lineView.measure.heights = null
+    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+      { lineView.measure.caches[i] = {} } }
+  }
+}
+
+function clearLineMeasurementCache(cm) {
+  cm.display.externalMeasure = null
+  removeChildren(cm.display.lineMeasure)
+  for (var i = 0; i < cm.display.view.length; i++)
+    { clearLineMeasurementCacheFor(cm.display.view[i]) }
+}
+
+function clearCaches(cm) {
+  clearLineMeasurementCache(cm)
+  cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null
+  if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true }
+  cm.display.lineNumChars = null
+}
+
+function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft }
+function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop }
+
+// Converts a {top, bottom, left, right} box from line-local
+// coordinates into another coordinate system. Context may be one of
+// "line", "div" (display.lineDiv), "local"./null (editor), "window",
+// or "page".
+function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+  if (!includeWidgets && lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) {
+    var size = widgetHeight(lineObj.widgets[i])
+    rect.top += size; rect.bottom += size
+  } } }
+  if (context == "line") { return rect }
+  if (!context) { context = "local" }
+  var yOff = heightAtLine(lineObj)
+  if (context == "local") { yOff += paddingTop(cm.display) }
+  else { yOff -= cm.display.viewOffset }
+  if (context == "page" || context == "window") {
+    var lOff = cm.display.lineSpace.getBoundingClientRect()
+    yOff += lOff.top + (context == "window" ? 0 : pageScrollY())
+    var xOff = lOff.left + (context == "window" ? 0 : pageScrollX())
+    rect.left += xOff; rect.right += xOff
+  }
+  rect.top += yOff; rect.bottom += yOff
+  return rect
+}
+
+// Coverts a box from "div" coords to another coordinate system.
+// Context may be "window", "page", "div", or "local"./null.
+function fromCoordSystem(cm, coords, context) {
+  if (context == "div") { return coords }
+  var left = coords.left, top = coords.top
+  // First move into "page" coordinate system
+  if (context == "page") {
+    left -= pageScrollX()
+    top -= pageScrollY()
+  } else if (context == "local" || !context) {
+    var localBox = cm.display.sizer.getBoundingClientRect()
+    left += localBox.left
+    top += localBox.top
+  }
+
+  var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect()
+  return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+}
+
+function charCoords(cm, pos, context, lineObj, bias) {
+  if (!lineObj) { lineObj = getLine(cm.doc, pos.line) }
+  return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+}
+
+// Returns a box for a given cursor position, which may have an
+// 'other' property containing the position of the secondary cursor
+// on a bidi boundary.
+function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+  lineObj = lineObj || getLine(cm.doc, pos.line)
+  if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) }
+  function get(ch, right) {
+    var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight)
+    if (right) { m.left = m.right; } else { m.right = m.left }
+    return intoCoordSystem(cm, lineObj, m, context)
+  }
+  function getBidi(ch, partPos) {
+    var part = order[partPos], right = part.level % 2
+    if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
+      part = order[--partPos]
+      ch = bidiRight(part) - (part.level % 2 ? 0 : 1)
+      right = true
+    } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
+      part = order[++partPos]
+      ch = bidiLeft(part) - part.level % 2
+      right = false
+    }
+    if (right && ch == part.to && ch > part.from) { return get(ch - 1) }
+    return get(ch, right)
+  }
+  var order = getOrder(lineObj), ch = pos.ch
+  if (!order) { return get(ch) }
+  var partPos = getBidiPartAt(order, ch)
+  var val = getBidi(ch, partPos)
+  if (bidiOther != null) { val.other = getBidi(ch, bidiOther) }
+  return val
+}
+
+// Used to cheaply estimate the coordinates for a position. Used for
+// intermediate scroll updates.
+function estimateCoords(cm, pos) {
+  var left = 0
+  pos = clipPos(cm.doc, pos)
+  if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch }
+  var lineObj = getLine(cm.doc, pos.line)
+  var top = heightAtLine(lineObj) + paddingTop(cm.display)
+  return {left: left, right: left, top: top, bottom: top + lineObj.height}
+}
+
+// Positions returned by coordsChar contain some extra information.
+// xRel is the relative x position of the input coordinates compared
+// to the found position (so xRel > 0 means the coordinates are to
+// the right of the character position, for example). When outside
+// is true, that means the coordinates lie outside the line's
+// vertical range.
+function PosWithInfo(line, ch, outside, xRel) {
+  var pos = Pos(line, ch)
+  pos.xRel = xRel
+  if (outside) { pos.outside = true }
+  return pos
+}
+
+// Compute the character position closest to the given coordinates.
+// Input must be lineSpace-local ("div" coordinate system).
+function coordsChar(cm, x, y) {
+  var doc = cm.doc
+  y += cm.display.viewOffset
+  if (y < 0) { return PosWithInfo(doc.first, 0, true, -1) }
+  var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1
+  if (lineN > last)
+    { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1) }
+  if (x < 0) { x = 0 }
+
+  var lineObj = getLine(doc, lineN)
+  for (;;) {
+    var found = coordsCharInner(cm, lineObj, lineN, x, y)
+    var merged = collapsedSpanAtEnd(lineObj)
+    var mergedPos = merged && merged.find(0, true)
+    if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
+      { lineN = lineNo(lineObj = mergedPos.to.line) }
+    else
+      { return found }
+  }
+}
+
+function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {
+  var innerOff = y - heightAtLine(lineObj)
+  var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth
+  var preparedMeasure = prepareMeasureForLine(cm, lineObj)
+
+  function getX(ch) {
+    var sp = cursorCoords(cm, Pos(lineNo$$1, ch), "line", lineObj, preparedMeasure)
+    wrongLine = true
+    if (innerOff > sp.bottom) { return sp.left - adjust }
+    else if (innerOff < sp.top) { return sp.left + adjust }
+    else { wrongLine = false }
+    return sp.left
+  }
+
+  var bidi = getOrder(lineObj), dist = lineObj.text.length
+  var from = lineLeft(lineObj), to = lineRight(lineObj)
+  var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine
+
+  if (x > toX) { return PosWithInfo(lineNo$$1, to, toOutside, 1) }
+  // Do a binary search between these bounds.
+  for (;;) {
+    if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
+      var ch = x < fromX || x - fromX <= toX - x ? from : to
+      var outside = ch == from ? fromOutside : toOutside
+      var xDiff = x - (ch == from ? fromX : toX)
+      // This is a kludge to handle the case where the coordinates
+      // are after a line-wrapped line. We should replace it with a
+      // more general handling of cursor positions around line
+      // breaks. (Issue #4078)
+      if (toOutside && !bidi && !/\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 &&
+          ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) {
+        var charSize = measureCharPrepared(cm, preparedMeasure, ch, "right")
+        if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) {
+          outside = false
+          ch++
+          xDiff = x - charSize.right
+        }
+      }
+      while (isExtendingChar(lineObj.text.charAt(ch))) { ++ch }
+      var pos = PosWithInfo(lineNo$$1, ch, outside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0)
+      return pos
+    }
+    var step = Math.ceil(dist / 2), middle = from + step
+    if (bidi) {
+      middle = from
+      for (var i = 0; i < step; ++i) { middle = moveVisually(lineObj, middle, 1) }
+    }
+    var middleX = getX(middle)
+    if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) { toX += 1000; } dist = step}
+    else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step}
+  }
+}
+
+var measureText
+// Compute the default text height.
+function textHeight(display) {
+  if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+  if (measureText == null) {
+    measureText = elt("pre")
+    // Measure a bunch of lines, for browsers that compute
+    // fractional heights.
+    for (var i = 0; i < 49; ++i) {
+      measureText.appendChild(document.createTextNode("x"))
+      measureText.appendChild(elt("br"))
+    }
+    measureText.appendChild(document.createTextNode("x"))
+  }
+  removeChildrenAndAdd(display.measure, measureText)
+  var height = measureText.offsetHeight / 50
+  if (height > 3) { display.cachedTextHeight = height }
+  removeChildren(display.measure)
+  return height || 1
+}
+
+// Compute the default character width.
+function charWidth(display) {
+  if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+  var anchor = elt("span", "xxxxxxxxxx")
+  var pre = elt("pre", [anchor])
+  removeChildrenAndAdd(display.measure, pre)
+  var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10
+  if (width > 2) { display.cachedCharWidth = width }
+  return width || 10
+}
+
+// Do a bulk-read of the DOM positions and sizes needed to draw the
+// view, so that we don't interleave reading and writing to the DOM.
+function getDimensions(cm) {
+  var d = cm.display, left = {}, width = {}
+  var gutterLeft = d.gutters.clientLeft
+  for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+    left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft
+    width[cm.options.gutters[i]] = n.clientWidth
+  }
+  return {fixedPos: compensateForHScroll(d),
+          gutterTotalWidth: d.gutters.offsetWidth,
+          gutterLeft: left,
+          gutterWidth: width,
+          wrapperWidth: d.wrapper.clientWidth}
+}
+
+// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+// but using getBoundingClientRect to get a sub-pixel-accurate
+// result.
+function compensateForHScroll(display) {
+  return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+}
+
+// Returns a function that estimates the height of a line, to use as
+// first approximation until the line becomes visible (and is thus
+// properly measurable).
+function estimateHeight(cm) {
+  var th = textHeight(cm.display), wrapping = cm.options.lineWrapping
+  var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3)
+  return function (line) {
+    if (lineIsHidden(cm.doc, line)) { return 0 }
+
+    var widgetsHeight = 0
+    if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+      if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height }
+    } }
+
+    if (wrapping)
+      { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+    else
+      { return widgetsHeight + th }
+  }
+}
+
+function estimateLineHeights(cm) {
+  var doc = cm.doc, est = estimateHeight(cm)
+  doc.iter(function (line) {
+    var estHeight = est(line)
+    if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+  })
+}
+
+// Given a mouse event, find the corresponding position. If liberal
+// is false, it checks whether a gutter or scrollbar was clicked,
+// and returns null if it was. forRect is used by rectangular
+// selections, and tries to estimate a character position even for
+// coordinates beyond the right of the text.
+function posFromMouse(cm, e, liberal, forRect) {
+  var display = cm.display
+  if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+  var x, y, space = display.lineSpace.getBoundingClientRect()
+  // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+  try { x = e.clientX - space.left; y = e.clientY - space.top }
+  catch (e) { return null }
+  var coords = coordsChar(cm, x, y), line
+  if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+    var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length
+    coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff))
+  }
+  return coords
+}
+
+// Find the view element corresponding to a given line. Return null
+// when the line isn't visible.
+function findViewIndex(cm, n) {
+  if (n >= cm.display.viewTo) { return null }
+  n -= cm.display.viewFrom
+  if (n < 0) { return null }
+  var view = cm.display.view
+  for (var i = 0; i < view.length; i++) {
+    n -= view[i].size
+    if (n < 0) { return i }
+  }
+}
+
+function updateSelection(cm) {
+  cm.display.input.showSelection(cm.display.input.prepareSelection())
+}
+
+function prepareSelection(cm, primary) {
+  var doc = cm.doc, result = {}
+  var curFragment = result.cursors = document.createDocumentFragment()
+  var selFragment = result.selection = document.createDocumentFragment()
+
+  for (var i = 0; i < doc.sel.ranges.length; i++) {
+    if (primary === false && i == doc.sel.primIndex) { continue }
+    var range$$1 = doc.sel.ranges[i]
+    if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }
+    var collapsed = range$$1.empty()
+    if (collapsed || cm.options.showCursorWhenSelecting)
+      { drawSelectionCursor(cm, range$$1.head, curFragment) }
+    if (!collapsed)
+      { drawSelectionRange(cm, range$$1, selFragment) }
+  }
+  return result
+}
+
+// Draws a cursor for the given range
+function drawSelectionCursor(cm, head, output) {
+  var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine)
+
+  var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"))
+  cursor.style.left = pos.left + "px"
+  cursor.style.top = pos.top + "px"
+  cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"
+
+  if (pos.other) {
+    // Secondary cursor, shown when on a 'jump' in bi-directional text
+    var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"))
+    otherCursor.style.display = ""
+    otherCursor.style.left = pos.other.left + "px"
+    otherCursor.style.top = pos.other.top + "px"
+    otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"
+  }
+}
+
+// Draws the given range as a highlighted selection
+function drawSelectionRange(cm, range$$1, output) {
+  var display = cm.display, doc = cm.doc
+  var fragment = document.createDocumentFragment()
+  var padding = paddingH(cm.display), leftSide = padding.left
+  var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right
+
+  function add(left, top, width, bottom) {
+    if (top < 0) { top = 0 }
+    top = Math.round(top)
+    bottom = Math.round(bottom)
+    fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px")))
+  }
+
+  function drawForLine(line, fromArg, toArg) {
+    var lineObj = getLine(doc, line)
+    var lineLen = lineObj.text.length
+    var start, end
+    function coords(ch, bias) {
+      return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+    }
+
+    iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) {
+      var leftPos = coords(from, "left"), rightPos, left, right
+      if (from == to) {
+        rightPos = leftPos
+        left = right = leftPos.left
+      } else {
+        rightPos = coords(to - 1, "right")
+        if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp }
+        left = leftPos.left
+        right = rightPos.right
+      }
+      if (fromArg == null && from == 0) { left = leftSide }
+      if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
+        add(left, leftPos.top, null, leftPos.bottom)
+        left = leftSide
+        if (leftPos.bottom < rightPos.top) { add(left, leftPos.bottom, null, rightPos.top) }
+      }
+      if (toArg == null && to == lineLen) { right = rightSide }
+      if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
+        { start = leftPos }
+      if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
+        { end = rightPos }
+      if (left < leftSide + 1) { left = leftSide }
+      add(left, rightPos.top, right - left, rightPos.bottom)
+    })
+    return {start: start, end: end}
+  }
+
+  var sFrom = range$$1.from(), sTo = range$$1.to()
+  if (sFrom.line == sTo.line) {
+    drawForLine(sFrom.line, sFrom.ch, sTo.ch)
+  } else {
+    var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line)
+    var singleVLine = visualLine(fromLine) == visualLine(toLine)
+    var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end
+    var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start
+    if (singleVLine) {
+      if (leftEnd.top < rightStart.top - 2) {
+        add(leftEnd.right, leftEnd.top, null, leftEnd.bottom)
+        add(leftSide, rightStart.top, rightStart.left, rightStart.bottom)
+      } else {
+        add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom)
+      }
+    }
+    if (leftEnd.bottom < rightStart.top)
+      { add(leftSide, leftEnd.bottom, null, rightStart.top) }
+  }
+
+  output.appendChild(fragment)
+}
+
+// Cursor-blinking
+function restartBlink(cm) {
+  if (!cm.state.focused) { return }
+  var display = cm.display
+  clearInterval(display.blinker)
+  var on = true
+  display.cursorDiv.style.visibility = ""
+  if (cm.options.cursorBlinkRate > 0)
+    { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+      cm.options.cursorBlinkRate) }
+  else if (cm.options.cursorBlinkRate < 0)
+    { display.cursorDiv.style.visibility = "hidden" }
+}
+
+function ensureFocus(cm) {
+  if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) }
+}
+
+function delayBlurEvent(cm) {
+  cm.state.delayingBlurEvent = true
+  setTimeout(function () { if (cm.state.delayingBlurEvent) {
+    cm.state.delayingBlurEvent = false
+    onBlur(cm)
+  } }, 100)
+}
+
+function onFocus(cm, e) {
+  if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false }
+
+  if (cm.options.readOnly == "nocursor") { return }
+  if (!cm.state.focused) {
+    signal(cm, "focus", cm, e)
+    cm.state.focused = true
+    addClass(cm.display.wrapper, "CodeMirror-focused")
+    // This test prevents this from firing when a context
+    // menu is closed (since the input reset would kill the
+    // select-all detection hack)
+    if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+      cm.display.input.reset()
+      if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730
+    }
+    cm.display.input.receivedFocus()
+  }
+  restartBlink(cm)
+}
+function onBlur(cm, e) {
+  if (cm.state.delayingBlurEvent) { return }
+
+  if (cm.state.focused) {
+    signal(cm, "blur", cm, e)
+    cm.state.focused = false
+    rmClass(cm.display.wrapper, "CodeMirror-focused")
+  }
+  clearInterval(cm.display.blinker)
+  setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150)
+}
+
+// Re-align line numbers and gutter marks to compensate for
+// horizontal scrolling.
+function alignHorizontally(cm) {
+  var display = cm.display, view = display.view
+  if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+  var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft
+  var gutterW = display.gutters.offsetWidth, left = comp + "px"
+  for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+    if (cm.options.fixedGutter) {
+      if (view[i].gutter)
+        { view[i].gutter.style.left = left }
+      if (view[i].gutterBackground)
+        { view[i].gutterBackground.style.left = left }
+    }
+    var align = view[i].alignable
+    if (align) { for (var j = 0; j < align.length; j++)
+      { align[j].style.left = left } }
+  } }
+  if (cm.options.fixedGutter)
+    { display.gutters.style.left = (comp + gutterW) + "px" }
+}
+
+// Used to ensure that the line number gutter is still the right
+// size for the current document size. Returns true when an update
+// is needed.
+function maybeUpdateLineNumberWidth(cm) {
+  if (!cm.options.lineNumbers) { return false }
+  var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display
+  if (last.length != display.lineNumChars) {
+    var test = display.measure.appendChild(elt("div", [elt("div", last)],
+                                               "CodeMirror-linenumber CodeMirror-gutter-elt"))
+    var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW
+    display.lineGutter.style.width = ""
+    display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1
+    display.lineNumWidth = display.lineNumInnerWidth + padding
+    display.lineNumChars = display.lineNumInnerWidth ? last.length : -1
+    display.lineGutter.style.width = display.lineNumWidth + "px"
+    updateGutterSpace(cm)
+    return true
+  }
+  return false
+}
+
+// Read the actual heights of the rendered lines, and update their
+// stored heights to match.
+function updateHeightsInViewport(cm) {
+  var display = cm.display
+  var prevBottom = display.lineDiv.offsetTop
+  for (var i = 0; i < display.view.length; i++) {
+    var cur = display.view[i], height = void 0
+    if (cur.hidden) { continue }
+    if (ie && ie_version < 8) {
+      var bot = cur.node.offsetTop + cur.node.offsetHeight
+      height = bot - prevBottom
+      prevBottom = bot
+    } else {
+      var box = cur.node.getBoundingClientRect()
+      height = box.bottom - box.top
+    }
+    var diff = cur.line.height - height
+    if (height < 2) { height = textHeight(display) }
+    if (diff > .001 || diff < -.001) {
+      updateLineHeight(cur.line, height)
+      updateWidgetHeight(cur.line)
+      if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+        { updateWidgetHeight(cur.rest[j]) } }
+    }
+  }
+}
+
+// Read and store the height of line widgets associated with the
+// given line.
+function updateWidgetHeight(line) {
+  if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i)
+    { line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight } }
+}
+
+// Compute the lines that are visible in a given viewport (defaults
+// the the current scroll position). viewport may contain top,
+// height, and ensure (see op.scrollToPos) properties.
+function visibleLines(display, doc, viewport) {
+  var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop
+  top = Math.floor(top - paddingTop(display))
+  var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight
+
+  var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom)
+  // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+  // forces those lines into the viewport (if possible).
+  if (viewport && viewport.ensure) {
+    var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line
+    if (ensureFrom < from) {
+      from = ensureFrom
+      to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)
+    } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+      from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight)
+      to = ensureTo
+    }
+  }
+  return {from: from, to: Math.max(to, from + 1)}
+}
+
+// Sync the scrollable area and scrollbars, ensure the viewport
+// covers the visible area.
+function setScrollTop(cm, val) {
+  if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+  cm.doc.scrollTop = val
+  if (!gecko) { updateDisplaySimple(cm, {top: val}) }
+  if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val }
+  cm.display.scrollbars.setScrollTop(val)
+  if (gecko) { updateDisplaySimple(cm) }
+  startWorker(cm, 100)
+}
+// Sync scroller and scrollbar, ensure the gutter elements are
+// aligned.
+function setScrollLeft(cm, val, isScroller) {
+  if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) { return }
+  val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
+  cm.doc.scrollLeft = val
+  alignHorizontally(cm)
+  if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val }
+  cm.display.scrollbars.setScrollLeft(val)
+}
+
+// Since the delta values reported on mouse wheel events are
+// unstandardized between browsers and even browser versions, and
+// generally horribly unpredictable, this code starts by measuring
+// the scroll effect that the first few mouse wheel events have,
+// and, from that, detects the way it can convert deltas to pixel
+// offsets afterwards.
+//
+// The reason we want to know the amount a wheel event will scroll
+// is that it gives us a chance to update the display before the
+// actual scrolling happens, reducing flickering.
+
+var wheelSamples = 0;
+var wheelPixelsPerUnit = null
+// Fill in a browser-detected starting value on browsers where we
+// know one. These don't have to be accurate -- the result of them
+// being wrong would just be a slight flicker on the first wheel
+// scroll (if it is large enough).
+if (ie) { wheelPixelsPerUnit = -.53 }
+else if (gecko) { wheelPixelsPerUnit = 15 }
+else if (chrome) { wheelPixelsPerUnit = -.7 }
+else if (safari) { wheelPixelsPerUnit = -1/3 }
+
+function wheelEventDelta(e) {
+  var dx = e.wheelDeltaX, dy = e.wheelDeltaY
+  if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail }
+  if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail }
+  else if (dy == null) { dy = e.wheelDelta }
+  return {x: dx, y: dy}
+}
+function wheelEventPixels(e) {
+  var delta = wheelEventDelta(e)
+  delta.x *= wheelPixelsPerUnit
+  delta.y *= wheelPixelsPerUnit
+  return delta
+}
+
+function onScrollWheel(cm, e) {
+  var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
+
+  var display = cm.display, scroll = display.scroller
+  // Quit if there's nothing to scroll here
+  var canScrollX = scroll.scrollWidth > scroll.clientWidth
+  var canScrollY = scroll.scrollHeight > scroll.clientHeight
+  if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+  // Webkit browsers on OS X abort momentum scrolls when the target
+  // of the scroll event is removed from the scrollable element.
+  // This hack (see related code in patchDisplay) makes sure the
+  // element is kept around.
+  if (dy && mac && webkit) {
+    outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+      for (var i = 0; i < view.length; i++) {
+        if (view[i].node == cur) {
+          cm.display.currentWheelTarget = cur
+          break outer
+        }
+      }
+    }
+  }
+
+  // On some browsers, horizontal scrolling will cause redraws to
+  // happen before the gutter has been realigned, causing it to
+  // wriggle around in a most unseemly way. When we have an
+  // estimated pixels/delta value, we just handle horizontal
+  // scrolling entirely here. It'll be slightly off from native, but
+  // better than glitching out.
+  if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+    if (dy && canScrollY)
+      { setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))) }
+    setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)))
+    // Only prevent default scrolling if vertical scrolling is
+    // actually possible. Otherwise, it causes vertical scroll
+    // jitter on OSX trackpads when deltaX is small and deltaY
+    // is large (issue #3579)
+    if (!dy || (dy && canScrollY))
+      { e_preventDefault(e) }
+    display.wheelStartX = null // Abort measurement, if in progress
+    return
+  }
+
+  // 'Project' the visible viewport to cover the area that is being
+  // scrolled into view (if we know enough to estimate it).
+  if (dy && wheelPixelsPerUnit != null) {
+    var pixels = dy * wheelPixelsPerUnit
+    var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
+    if (pixels < 0) { top = Math.max(0, top + pixels - 50) }
+    else { bot = Math.min(cm.doc.height, bot + pixels + 50) }
+    updateDisplaySimple(cm, {top: top, bottom: bot})
+  }
+
+  if (wheelSamples < 20) {
+    if (display.wheelStartX == null) {
+      display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
+      display.wheelDX = dx; display.wheelDY = dy
+      setTimeout(function () {
+        if (display.wheelStartX == null) { return }
+        var movedX = scroll.scrollLeft - display.wheelStartX
+        var movedY = scroll.scrollTop - display.wheelStartY
+        var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+          (movedX && display.wheelDX && movedX / display.wheelDX)
+        display.wheelStartX = display.wheelStartY = null
+        if (!sample) { return }
+        wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
+        ++wheelSamples
+      }, 200)
+    } else {
+      display.wheelDX += dx; display.wheelDY += dy
+    }
+  }
+}
+
+// SCROLLBARS
+
+// Prepare DOM reads needed to update the scrollbars. Done in one
+// shot to minimize update/measure roundtrips.
+function measureForScrollbars(cm) {
+  var d = cm.display, gutterW = d.gutters.offsetWidth
+  var docH = Math.round(cm.doc.height + paddingVert(cm.display))
+  return {
+    clientHeight: d.scroller.clientHeight,
+    viewHeight: d.wrapper.clientHeight,
+    scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+    viewWidth: d.wrapper.clientWidth,
+    barLeft: cm.options.fixedGutter ? gutterW : 0,
+    docHeight: docH,
+    scrollHeight: docH + scrollGap(cm) + d.barHeight,
+    nativeBarWidth: d.nativeBarWidth,
+    gutterWidth: gutterW
+  }
+}
+
+function NativeScrollbars(place, scroll, cm) {
+  this.cm = cm
+  var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar")
+  var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar")
+  place(vert); place(horiz)
+
+  on(vert, "scroll", function () {
+    if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") }
+  })
+  on(horiz, "scroll", function () {
+    if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") }
+  })
+
+  this.checkedZeroWidth = false
+  // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+  if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" }
+}
+
+NativeScrollbars.prototype = copyObj({
+  update: function(measure) {
+    var needsH = measure.scrollWidth > measure.clientWidth + 1
+    var needsV = measure.scrollHeight > measure.clientHeight + 1
+    var sWidth = measure.nativeBarWidth
+
+    if (needsV) {
+      this.vert.style.display = "block"
+      this.vert.style.bottom = needsH ? sWidth + "px" : "0"
+      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0)
+      // A bug in IE8 can cause this value to be negative, so guard it.
+      this.vert.firstChild.style.height =
+        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"
+    } else {
+      this.vert.style.display = ""
+      this.vert.firstChild.style.height = "0"
+    }
+
+    if (needsH) {
+      this.horiz.style.display = "block"
+      this.horiz.style.right = needsV ? sWidth + "px" : "0"
+      this.horiz.style.left = measure.barLeft + "px"
+      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
+      this.horiz.firstChild.style.width =
+        (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
+    } else {
+      this.horiz.style.display = ""
+      this.horiz.firstChild.style.width = "0"
+    }
+
+    if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+      if (sWidth == 0) { this.zeroWidthHack() }
+      this.checkedZeroWidth = true
+    }
+
+    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+  },
+  setScrollLeft: function(pos) {
+    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos }
+    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz) }
+  },
+  setScrollTop: function(pos) {
+    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos }
+    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert) }
+  },
+  zeroWidthHack: function() {
+    var w = mac && !mac_geMountainLion ? "12px" : "18px"
+    this.horiz.style.height = this.vert.style.width = w
+    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"
+    this.disableHoriz = new Delayed
+    this.disableVert = new Delayed
+  },
+  enableZeroWidthBar: function(bar, delay) {
+    bar.style.pointerEvents = "auto"
+    function maybeDisable() {
+      // To find out whether the scrollbar is still visible, we
+      // check whether the element under the pixel in the bottom
+      // left corner of the scrollbar box is the scrollbar box
+      // itself (when the bar is still visible) or its filler child
+      // (when the bar is hidden). If it is still visible, we keep
+      // it enabled, if it's hidden, we disable pointer events.
+      var box = bar.getBoundingClientRect()
+      var elt$$1 = document.elementFromPoint(box.left + 1, box.bottom - 1)
+      if (elt$$1 != bar) { bar.style.pointerEvents = "none" }
+      else { delay.set(1000, maybeDisable) }
+    }
+    delay.set(1000, maybeDisable)
+  },
+  clear: function() {
+    var parent = this.horiz.parentNode
+    parent.removeChild(this.horiz)
+    parent.removeChild(this.vert)
+  }
+}, NativeScrollbars.prototype)
+
+function NullScrollbars() {}
+
+NullScrollbars.prototype = copyObj({
+  update: function() { return {bottom: 0, right: 0} },
+  setScrollLeft: function() {},
+  setScrollTop: function() {},
+  clear: function() {}
+}, NullScrollbars.prototype)
+
+function updateScrollbars(cm, measure) {
+  if (!measure) { measure = measureForScrollbars(cm) }
+  var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
+  updateScrollbarsInner(cm, measure)
+  for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+    if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+      { updateHeightsInViewport(cm) }
+    updateScrollbarsInner(cm, measureForScrollbars(cm))
+    startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
+  }
+}
+
+// Re-synchronize the fake scrollbars with the actual size of the
+// content.
+function updateScrollbarsInner(cm, measure) {
+  var d = cm.display
+  var sizes = d.scrollbars.update(measure)
+
+  d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
+  d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
+  d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
+
+  if (sizes.right && sizes.bottom) {
+    d.scrollbarFiller.style.display = "block"
+    d.scrollbarFiller.style.height = sizes.bottom + "px"
+    d.scrollbarFiller.style.width = sizes.right + "px"
+  } else { d.scrollbarFiller.style.display = "" }
+  if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+    d.gutterFiller.style.display = "block"
+    d.gutterFiller.style.height = sizes.bottom + "px"
+    d.gutterFiller.style.width = measure.gutterWidth + "px"
+  } else { d.gutterFiller.style.display = "" }
+}
+
+var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
+
+function initScrollbars(cm) {
+  if (cm.display.scrollbars) {
+    cm.display.scrollbars.clear()
+    if (cm.display.scrollbars.addClass)
+      { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+  }
+
+  cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+    cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
+    // Prevent clicks in the scrollbars from killing focus
+    on(node, "mousedown", function () {
+      if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) }
+    })
+    node.setAttribute("cm-not-content", "true")
+  }, function (pos, axis) {
+    if (axis == "horizontal") { setScrollLeft(cm, pos) }
+    else { setScrollTop(cm, pos) }
+  }, cm)
+  if (cm.display.scrollbars.addClass)
+    { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+}
+
+// SCROLLING THINGS INTO VIEW
+
+// If an editor sits on the top or bottom of the window, partially
+// scrolled out of view, this ensures that the cursor is visible.
+function maybeScrollWindow(cm, coords) {
+  if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+  var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null
+  if (coords.top + box.top < 0) { doScroll = true }
+  else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false }
+  if (doScroll != null && !phantom) {
+    var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n                         top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + (coords.left) + "px; width: 2px;"))
+    cm.display.lineSpace.appendChild(scrollNode)
+    scrollNode.scrollIntoView(doScroll)
+    cm.display.lineSpace.removeChild(scrollNode)
+  }
+}
+
+// Scroll a given position into view (immediately), verifying that
+// it actually became visible (as line heights are accurately
+// measured, the position of something may 'drift' during drawing).
+function scrollPosIntoView(cm, pos, end, margin) {
+  if (margin == null) { margin = 0 }
+  var coords
+  for (var limit = 0; limit < 5; limit++) {
+    var changed = false
+    coords = cursorCoords(cm, pos)
+    var endCoords = !end || end == pos ? coords : cursorCoords(cm, end)
+    var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),
+                                       Math.min(coords.top, endCoords.top) - margin,
+                                       Math.max(coords.left, endCoords.left),
+                                       Math.max(coords.bottom, endCoords.bottom) + margin)
+    var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft
+    if (scrollPos.scrollTop != null) {
+      setScrollTop(cm, scrollPos.scrollTop)
+      if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true }
+    }
+    if (scrollPos.scrollLeft != null) {
+      setScrollLeft(cm, scrollPos.scrollLeft)
+      if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true }
+    }
+    if (!changed) { break }
+  }
+  return coords
+}
+
+// Scroll a given set of coordinates into view (immediately).
+function scrollIntoView(cm, x1, y1, x2, y2) {
+  var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2)
+  if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop) }
+  if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) }
+}
+
+// Calculate a new scroll position needed to scroll the given
+// rectangle into view. Returns an object with scrollTop and
+// scrollLeft properties. When these are undefined, the
+// vertical/horizontal position does not need to be adjusted.
+function calculateScrollPos(cm, x1, y1, x2, y2) {
+  var display = cm.display, snapMargin = textHeight(cm.display)
+  if (y1 < 0) { y1 = 0 }
+  var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop
+  var screen = displayHeight(cm), result = {}
+  if (y2 - y1 > screen) { y2 = y1 + screen }
+  var docBottom = cm.doc.height + paddingVert(display)
+  var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin
+  if (y1 < screentop) {
+    result.scrollTop = atTop ? 0 : y1
+  } else if (y2 > screentop + screen) {
+    var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen)
+    if (newTop != screentop) { result.scrollTop = newTop }
+  }
+
+  var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft
+  var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)
+  var tooWide = x2 - x1 > screenw
+  if (tooWide) { x2 = x1 + screenw }
+  if (x1 < 10)
+    { result.scrollLeft = 0 }
+  else if (x1 < screenleft)
+    { result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)) }
+  else if (x2 > screenw + screenleft - 3)
+    { result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw }
+  return result
+}
+
+// Store a relative adjustment to the scroll position in the current
+// operation (to be applied when the operation finishes).
+function addToScrollPos(cm, left, top) {
+  if (left != null || top != null) { resolveScrollToPos(cm) }
+  if (left != null)
+    { cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left }
+  if (top != null)
+    { cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top }
+}
+
+// Make sure that at the end of the operation the current cursor is
+// shown.
+function ensureCursorVisible(cm) {
+  resolveScrollToPos(cm)
+  var cur = cm.getCursor(), from = cur, to = cur
+  if (!cm.options.lineWrapping) {
+    from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur
+    to = Pos(cur.line, cur.ch + 1)
+  }
+  cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}
+}
+
+// When an operation has its scrollToPos property set, and another
+// scroll action is applied before the end of the operation, this
+// 'simulates' scrolling that position into view in a cheap way, so
+// that the effect of intermediate scroll commands is not ignored.
+function resolveScrollToPos(cm) {
+  var range$$1 = cm.curOp.scrollToPos
+  if (range$$1) {
+    cm.curOp.scrollToPos = null
+    var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to)
+    var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),
+                                  Math.min(from.top, to.top) - range$$1.margin,
+                                  Math.max(from.right, to.right),
+                                  Math.max(from.bottom, to.bottom) + range$$1.margin)
+    cm.scrollTo(sPos.scrollLeft, sPos.scrollTop)
+  }
+}
+
+// Operations are used to wrap a series of changes to the editor
+// state in such a way that each change won't have to update the
+// cursor and display (which would be awkward, slow, and
+// error-prone). Instead, display updates are batched and then all
+// combined and executed at once.
+
+var nextOpId = 0
+// Start a new operation.
+function startOperation(cm) {
+  cm.curOp = {
+    cm: cm,
+    viewChanged: false,      // Flag that indicates that lines might need to be redrawn
+    startHeight: cm.doc.height, // Used to detect need to update scrollbar
+    forceUpdate: false,      // Used to force a redraw
+    updateInput: null,       // Whether to reset the input textarea
+    typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
+    changeObjs: null,        // Accumulated changes, for firing change events
+    cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+    cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+    selectionChanged: false, // Whether the selection needs to be redrawn
+    updateMaxLine: false,    // Set when the widest line needs to be determined anew
+    scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+    scrollToPos: null,       // Used to scroll to a specific position
+    focus: false,
+    id: ++nextOpId           // Unique ID
+  }
+  pushOperation(cm.curOp)
+}
+
+// Finish an operation, updating the display and signalling delayed events
+function endOperation(cm) {
+  var op = cm.curOp
+  finishOperation(op, function (group) {
+    for (var i = 0; i < group.ops.length; i++)
+      { group.ops[i].cm.curOp = null }
+    endOperations(group)
+  })
+}
+
+// The DOM updates done when an operation finishes are batched so
+// that the minimum number of relayouts are required.
+function endOperations(group) {
+  var ops = group.ops
+  for (var i = 0; i < ops.length; i++) // Read DOM
+    { endOperation_R1(ops[i]) }
+  for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+    { endOperation_W1(ops[i$1]) }
+  for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+    { endOperation_R2(ops[i$2]) }
+  for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+    { endOperation_W2(ops[i$3]) }
+  for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+    { endOperation_finish(ops[i$4]) }
+}
+
+function endOperation_R1(op) {
+  var cm = op.cm, display = cm.display
+  maybeClipScrollbars(cm)
+  if (op.updateMaxLine) { findMaxLine(cm) }
+
+  op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+    op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+                       op.scrollToPos.to.line >= display.viewTo) ||
+    display.maxLineChanged && cm.options.lineWrapping
+  op.update = op.mustUpdate &&
+    new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate)
+}
+
+function endOperation_W1(op) {
+  op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update)
+}
+
+function endOperation_R2(op) {
+  var cm = op.cm, display = cm.display
+  if (op.updatedDisplay) { updateHeightsInViewport(cm) }
+
+  op.barMeasure = measureForScrollbars(cm)
+
+  // If the max line changed since it was last measured, measure it,
+  // and ensure the document's width matches it.
+  // updateDisplay_W2 will use these properties to do the actual resizing
+  if (display.maxLineChanged && !cm.options.lineWrapping) {
+    op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3
+    cm.display.sizerWidth = op.adjustWidthTo
+    op.barMeasure.scrollWidth =
+      Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth)
+    op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm))
+  }
+
+  if (op.updatedDisplay || op.selectionChanged)
+    { op.preparedSelection = display.input.prepareSelection(op.focus) }
+}
+
+function endOperation_W2(op) {
+  var cm = op.cm
+
+  if (op.adjustWidthTo != null) {
+    cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"
+    if (op.maxScrollLeft < cm.doc.scrollLeft)
+      { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) }
+    cm.display.maxLineChanged = false
+  }
+
+  var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())
+  if (op.preparedSelection)
+    { cm.display.input.showSelection(op.preparedSelection, takeFocus) }
+  if (op.updatedDisplay || op.startHeight != cm.doc.height)
+    { updateScrollbars(cm, op.barMeasure) }
+  if (op.updatedDisplay)
+    { setDocumentHeight(cm, op.barMeasure) }
+
+  if (op.selectionChanged) { restartBlink(cm) }
+
+  if (cm.state.focused && op.updateInput)
+    { cm.display.input.reset(op.typing) }
+  if (takeFocus) { ensureFocus(op.cm) }
+}
+
+function endOperation_finish(op) {
+  var cm = op.cm, display = cm.display, doc = cm.doc
+
+  if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) }
+
+  // Abort mouse wheel delta measurement, when scrolling explicitly
+  if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+    { display.wheelStartX = display.wheelStartY = null }
+
+  // Propagate the scroll position to the actual DOM scroller
+  if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {
+    doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop))
+    display.scrollbars.setScrollTop(doc.scrollTop)
+    display.scroller.scrollTop = doc.scrollTop
+  }
+  if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {
+    doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft))
+    display.scrollbars.setScrollLeft(doc.scrollLeft)
+    display.scroller.scrollLeft = doc.scrollLeft
+    alignHorizontally(cm)
+  }
+  // If we need to scroll a specific position into view, do so.
+  if (op.scrollToPos) {
+    var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin)
+    if (op.scrollToPos.isCursor && cm.state.focused) { maybeScrollWindow(cm, coords) }
+  }
+
+  // Fire events for markers that are hidden/unidden by editing or
+  // undoing
+  var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers
+  if (hidden) { for (var i = 0; i < hidden.length; ++i)
+    { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } }
+  if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+    { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } }
+
+  if (display.wrapper.offsetHeight)
+    { doc.scrollTop = cm.display.scroller.scrollTop }
+
+  // Fire change events, and delayed event handlers
+  if (op.changeObjs)
+    { signal(cm, "changes", cm, op.changeObjs) }
+  if (op.update)
+    { op.update.finish() }
+}
+
+// Run the given function in an operation
+function runInOp(cm, f) {
+  if (cm.curOp) { return f() }
+  startOperation(cm)
+  try { return f() }
+  finally { endOperation(cm) }
+}
+// Wraps a function in an operation. Returns the wrapped function.
+function operation(cm, f) {
+  return function() {
+    if (cm.curOp) { return f.apply(cm, arguments) }
+    startOperation(cm)
+    try { return f.apply(cm, arguments) }
+    finally { endOperation(cm) }
+  }
+}
+// Used to add methods to editor and doc instances, wrapping them in
+// operations.
+function methodOp(f) {
+  return function() {
+    if (this.curOp) { return f.apply(this, arguments) }
+    startOperation(this)
+    try { return f.apply(this, arguments) }
+    finally { endOperation(this) }
+  }
+}
+function docMethodOp(f) {
+  return function() {
+    var cm = this.cm
+    if (!cm || cm.curOp) { return f.apply(this, arguments) }
+    startOperation(cm)
+    try { return f.apply(this, arguments) }
+    finally { endOperation(cm) }
+  }
+}
+
+// Updates the display.view data structure for a given change to the
+// document. From and to are in pre-change coordinates. Lendiff is
+// the amount of lines added or subtracted by the change. This is
+// used for changes that span multiple lines, or change the way
+// lines are divided into visual lines. regLineChange (below)
+// registers single-line changes.
+function regChange(cm, from, to, lendiff) {
+  if (from == null) { from = cm.doc.first }
+  if (to == null) { to = cm.doc.first + cm.doc.size }
+  if (!lendiff) { lendiff = 0 }
+
+  var display = cm.display
+  if (lendiff && to < display.viewTo &&
+      (display.updateLineNumbers == null || display.updateLineNumbers > from))
+    { display.updateLineNumbers = from }
+
+  cm.curOp.viewChanged = true
+
+  if (from >= display.viewTo) { // Change after
+    if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+      { resetView(cm) }
+  } else if (to <= display.viewFrom) { // Change before
+    if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+      resetView(cm)
+    } else {
+      display.viewFrom += lendiff
+      display.viewTo += lendiff
+    }
+  } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+    resetView(cm)
+  } else if (from <= display.viewFrom) { // Top overlap
+    var cut = viewCuttingPoint(cm, to, to + lendiff, 1)
+    if (cut) {
+      display.view = display.view.slice(cut.index)
+      display.viewFrom = cut.lineN
+      display.viewTo += lendiff
+    } else {
+      resetView(cm)
+    }
+  } else if (to >= display.viewTo) { // Bottom overlap
+    var cut$1 = viewCuttingPoint(cm, from, from, -1)
+    if (cut$1) {
+      display.view = display.view.slice(0, cut$1.index)
+      display.viewTo = cut$1.lineN
+    } else {
+      resetView(cm)
+    }
+  } else { // Gap in the middle
+    var cutTop = viewCuttingPoint(cm, from, from, -1)
+    var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1)
+    if (cutTop && cutBot) {
+      display.view = display.view.slice(0, cutTop.index)
+        .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+        .concat(display.view.slice(cutBot.index))
+      display.viewTo += lendiff
+    } else {
+      resetView(cm)
+    }
+  }
+
+  var ext = display.externalMeasured
+  if (ext) {
+    if (to < ext.lineN)
+      { ext.lineN += lendiff }
+    else if (from < ext.lineN + ext.size)
+      { display.externalMeasured = null }
+  }
+}
+
+// Register a change to a single line. Type must be one of "text",
+// "gutter", "class", "widget"
+function regLineChange(cm, line, type) {
+  cm.curOp.viewChanged = true
+  var display = cm.display, ext = cm.display.externalMeasured
+  if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+    { display.externalMeasured = null }
+
+  if (line < display.viewFrom || line >= display.viewTo) { return }
+  var lineView = display.view[findViewIndex(cm, line)]
+  if (lineView.node == null) { return }
+  var arr = lineView.changes || (lineView.changes = [])
+  if (indexOf(arr, type) == -1) { arr.push(type) }
+}
+
+// Clear the view.
+function resetView(cm) {
+  cm.display.viewFrom = cm.display.viewTo = cm.doc.first
+  cm.display.view = []
+  cm.display.viewOffset = 0
+}
+
+function viewCuttingPoint(cm, oldN, newN, dir) {
+  var index = findViewIndex(cm, oldN), diff, view = cm.display.view
+  if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+    { return {index: index, lineN: newN} }
+  var n = cm.display.viewFrom
+  for (var i = 0; i < index; i++)
+    { n += view[i].size }
+  if (n != oldN) {
+    if (dir > 0) {
+      if (index == view.length - 1) { return null }
+      diff = (n + view[index].size) - oldN
+      index++
+    } else {
+      diff = n - oldN
+    }
+    oldN += diff; newN += diff
+  }
+  while (visualLineNo(cm.doc, newN) != newN) {
+    if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+    newN += dir * view[index - (dir < 0 ? 1 : 0)].size
+    index += dir
+  }
+  return {index: index, lineN: newN}
+}
+
+// Force the view to cover a given range, adding empty view element
+// or clipping off existing ones as needed.
+function adjustView(cm, from, to) {
+  var display = cm.display, view = display.view
+  if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+    display.view = buildViewArray(cm, from, to)
+    display.viewFrom = from
+  } else {
+    if (display.viewFrom > from)
+      { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) }
+    else if (display.viewFrom < from)
+      { display.view = display.view.slice(findViewIndex(cm, from)) }
+    display.viewFrom = from
+    if (display.viewTo < to)
+      { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) }
+    else if (display.viewTo > to)
+      { display.view = display.view.slice(0, findViewIndex(cm, to)) }
+  }
+  display.viewTo = to
+}
+
+// Count the number of lines in the view whose DOM representation is
+// out of date (or nonexistent).
+function countDirtyView(cm) {
+  var view = cm.display.view, dirty = 0
+  for (var i = 0; i < view.length; i++) {
+    var lineView = view[i]
+    if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty }
+  }
+  return dirty
+}
+
+// HIGHLIGHT WORKER
+
+function startWorker(cm, time) {
+  if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)
+    { cm.state.highlight.set(time, bind(highlightWorker, cm)) }
+}
+
+function highlightWorker(cm) {
+  var doc = cm.doc
+  if (doc.frontier < doc.first) { doc.frontier = doc.first }
+  if (doc.frontier >= cm.display.viewTo) { return }
+  var end = +new Date + cm.options.workTime
+  var state = copyState(doc.mode, getStateBefore(cm, doc.frontier))
+  var changedLines = []
+
+  doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+    if (doc.frontier >= cm.display.viewFrom) { // Visible
+      var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength
+      var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true)
+      line.styles = highlighted.styles
+      var oldCls = line.styleClasses, newCls = highlighted.classes
+      if (newCls) { line.styleClasses = newCls }
+      else if (oldCls) { line.styleClasses = null }
+      var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+        oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass)
+      for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] }
+      if (ischange) { changedLines.push(doc.frontier) }
+      line.stateAfter = tooLong ? state : copyState(doc.mode, state)
+    } else {
+      if (line.text.length <= cm.options.maxHighlightLength)
+        { processLine(cm, line.text, state) }
+      line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null
+    }
+    ++doc.frontier
+    if (+new Date > end) {
+      startWorker(cm, cm.options.workDelay)
+      return true
+    }
+  })
+  if (changedLines.length) { runInOp(cm, function () {
+    for (var i = 0; i < changedLines.length; i++)
+      { regLineChange(cm, changedLines[i], "text") }
+  }) }
+}
+
+// DISPLAY DRAWING
+
+function DisplayUpdate(cm, viewport, force) {
+  var display = cm.display
+
+  this.viewport = viewport
+  // Store some values that we'll need later (but don't want to force a relayout for)
+  this.visible = visibleLines(display, cm.doc, viewport)
+  this.editorIsHidden = !display.wrapper.offsetWidth
+  this.wrapperHeight = display.wrapper.clientHeight
+  this.wrapperWidth = display.wrapper.clientWidth
+  this.oldDisplayWidth = displayWidth(cm)
+  this.force = force
+  this.dims = getDimensions(cm)
+  this.events = []
+}
+
+DisplayUpdate.prototype.signal = function(emitter, type) {
+  if (hasHandler(emitter, type))
+    { this.events.push(arguments) }
+}
+DisplayUpdate.prototype.finish = function() {
+  var this$1 = this;
+
+  for (var i = 0; i < this.events.length; i++)
+    { signal.apply(null, this$1.events[i]) }
+}
+
+function maybeClipScrollbars(cm) {
+  var display = cm.display
+  if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+    display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth
+    display.heightForcer.style.height = scrollGap(cm) + "px"
+    display.sizer.style.marginBottom = -display.nativeBarWidth + "px"
+    display.sizer.style.borderRightWidth = scrollGap(cm) + "px"
+    display.scrollbarsClipped = true
+  }
+}
+
+// Does the actual updating of the line display. Bails out
+// (returning false) when there is nothing to be done and forced is
+// false.
+function updateDisplayIfNeeded(cm, update) {
+  var display = cm.display, doc = cm.doc
+
+  if (update.editorIsHidden) {
+    resetView(cm)
+    return false
+  }
+
+  // Bail out if the visible area is already rendered and nothing changed.
+  if (!update.force &&
+      update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+      display.renderedView == display.view && countDirtyView(cm) == 0)
+    { return false }
+
+  if (maybeUpdateLineNumberWidth(cm)) {
+    resetView(cm)
+    update.dims = getDimensions(cm)
+  }
+
+  // Compute a suitable new viewport (from & to)
+  var end = doc.first + doc.size
+  var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first)
+  var to = Math.min(end, update.visible.to + cm.options.viewportMargin)
+  if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) }
+  if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) }
+  if (sawCollapsedSpans) {
+    from = visualLineNo(cm.doc, from)
+    to = visualLineEndNo(cm.doc, to)
+  }
+
+  var different = from != display.viewFrom || to != display.viewTo ||
+    display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth
+  adjustView(cm, from, to)
+
+  display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom))
+  // Position the mover div to align with the current scroll position
+  cm.display.mover.style.top = display.viewOffset + "px"
+
+  var toUpdate = countDirtyView(cm)
+  if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+    { return false }
+
+  // For big changes, we hide the enclosing element during the
+  // update, since that speeds up the operations on most browsers.
+  var focused = activeElt()
+  if (toUpdate > 4) { display.lineDiv.style.display = "none" }
+  patchDisplay(cm, display.updateLineNumbers, update.dims)
+  if (toUpdate > 4) { display.lineDiv.style.display = "" }
+  display.renderedView = display.view
+  // There might have been a widget with a focused element that got
+  // hidden or updated, if so re-focus it.
+  if (focused && activeElt() != focused && focused.offsetHeight) { focused.focus() }
+
+  // Prevent selection and cursors from interfering with the scroll
+  // width and height.
+  removeChildren(display.cursorDiv)
+  removeChildren(display.selectionDiv)
+  display.gutters.style.height = display.sizer.style.minHeight = 0
+
+  if (different) {
+    display.lastWrapHeight = update.wrapperHeight
+    display.lastWrapWidth = update.wrapperWidth
+    startWorker(cm, 400)
+  }
+
+  display.updateLineNumbers = null
+
+  return true
+}
+
+function postUpdateDisplay(cm, update) {
+  var viewport = update.viewport
+
+  for (var first = true;; first = false) {
+    if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+      // Clip forced viewport to actual scrollable area.
+      if (viewport && viewport.top != null)
+        { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} }
+      // Updated line heights might result in the drawn area not
+      // actually covering the viewport. Keep looping until it does.
+      update.visible = visibleLines(cm.display, cm.doc, viewport)
+      if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+        { break }
+    }
+    if (!updateDisplayIfNeeded(cm, update)) { break }
+    updateHeightsInViewport(cm)
+    var barMeasure = measureForScrollbars(cm)
+    updateSelection(cm)
+    updateScrollbars(cm, barMeasure)
+    setDocumentHeight(cm, barMeasure)
+  }
+
+  update.signal(cm, "update", cm)
+  if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+    update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo)
+    cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo
+  }
+}
+
+function updateDisplaySimple(cm, viewport) {
+  var update = new DisplayUpdate(cm, viewport)
+  if (updateDisplayIfNeeded(cm, update)) {
+    updateHeightsInViewport(cm)
+    postUpdateDisplay(cm, update)
+    var barMeasure = measureForScrollbars(cm)
+    updateSelection(cm)
+    updateScrollbars(cm, barMeasure)
+    setDocumentHeight(cm, barMeasure)
+    update.finish()
+  }
+}
+
+// Sync the actual display DOM structure with display.view, removing
+// nodes for lines that are no longer in view, and creating the ones
+// that are not there yet, and updating the ones that are out of
+// date.
+function patchDisplay(cm, updateNumbersFrom, dims) {
+  var display = cm.display, lineNumbers = cm.options.lineNumbers
+  var container = display.lineDiv, cur = container.firstChild
+
+  function rm(node) {
+    var next = node.nextSibling
+    // Works around a throw-scroll bug in OS X Webkit
+    if (webkit && mac && cm.display.currentWheelTarget == node)
+      { node.style.display = "none" }
+    else
+      { node.parentNode.removeChild(node) }
+    return next
+  }
+
+  var view = display.view, lineN = display.viewFrom
+  // Loop over the elements in the view, syncing cur (the DOM nodes
+  // in display.lineDiv) with the view as we go.
+  for (var i = 0; i < view.length; i++) {
+    var lineView = view[i]
+    if (lineView.hidden) {
+    } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+      var node = buildLineElement(cm, lineView, lineN, dims)
+      container.insertBefore(node, cur)
+    } else { // Already drawn
+      while (cur != lineView.node) { cur = rm(cur) }
+      var updateNumber = lineNumbers && updateNumbersFrom != null &&
+        updateNumbersFrom <= lineN && lineView.lineNumber
+      if (lineView.changes) {
+        if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false }
+        updateLineForChanges(cm, lineView, lineN, dims)
+      }
+      if (updateNumber) {
+        removeChildren(lineView.lineNumber)
+        lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)))
+      }
+      cur = lineView.node.nextSibling
+    }
+    lineN += lineView.size
+  }
+  while (cur) { cur = rm(cur) }
+}
+
+function updateGutterSpace(cm) {
+  var width = cm.display.gutters.offsetWidth
+  cm.display.sizer.style.marginLeft = width + "px"
+}
+
+function setDocumentHeight(cm, measure) {
+  cm.display.sizer.style.minHeight = measure.docHeight + "px"
+  cm.display.heightForcer.style.top = measure.docHeight + "px"
+  cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"
+}
+
+// Rebuild the gutter elements, ensure the margin to the left of the
+// code matches their width.
+function updateGutters(cm) {
+  var gutters = cm.display.gutters, specs = cm.options.gutters
+  removeChildren(gutters)
+  var i = 0
+  for (; i < specs.length; ++i) {
+    var gutterClass = specs[i]
+    var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass))
+    if (gutterClass == "CodeMirror-linenumbers") {
+      cm.display.lineGutter = gElt
+      gElt.style.width = (cm.display.lineNumWidth || 1) + "px"
+    }
+  }
+  gutters.style.display = i ? "" : "none"
+  updateGutterSpace(cm)
+}
+
+// Make sure the gutters options contains the element
+// "CodeMirror-linenumbers" when the lineNumbers option is true.
+function setGuttersForLineNumbers(options) {
+  var found = indexOf(options.gutters, "CodeMirror-linenumbers")
+  if (found == -1 && options.lineNumbers) {
+    options.gutters = options.gutters.concat(["CodeMirror-linenumbers"])
+  } else if (found > -1 && !options.lineNumbers) {
+    options.gutters = options.gutters.slice(0)
+    options.gutters.splice(found, 1)
+  }
+}
+
+// Selection objects are immutable. A new one is created every time
+// the selection changes. A selection is one or more non-overlapping
+// (and non-touching) ranges, sorted, and an integer that indicates
+// which one is the primary selection (the one that's scrolled into
+// view, that getCursor returns, etc).
+function Selection(ranges, primIndex) {
+  this.ranges = ranges
+  this.primIndex = primIndex
+}
+
+Selection.prototype = {
+  primary: function() { return this.ranges[this.primIndex] },
+  equals: function(other) {
+    var this$1 = this;
+
+    if (other == this) { return true }
+    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+    for (var i = 0; i < this.ranges.length; i++) {
+      var here = this$1.ranges[i], there = other.ranges[i]
+      if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) { return false }
+    }
+    return true
+  },
+  deepCopy: function() {
+    var this$1 = this;
+
+    var out = []
+    for (var i = 0; i < this.ranges.length; i++)
+      { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) }
+    return new Selection(out, this.primIndex)
+  },
+  somethingSelected: function() {
+    var this$1 = this;
+
+    for (var i = 0; i < this.ranges.length; i++)
+      { if (!this$1.ranges[i].empty()) { return true } }
+    return false
+  },
+  contains: function(pos, end) {
+    var this$1 = this;
+
+    if (!end) { end = pos }
+    for (var i = 0; i < this.ranges.length; i++) {
+      var range = this$1.ranges[i]
+      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+        { return i }
+    }
+    return -1
+  }
+}
+
+function Range(anchor, head) {
+  this.anchor = anchor; this.head = head
+}
+
+Range.prototype = {
+  from: function() { return minPos(this.anchor, this.head) },
+  to: function() { return maxPos(this.anchor, this.head) },
+  empty: function() {
+    return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch
+  }
+}
+
+// Take an unsorted, potentially overlapping set of ranges, and
+// build a selection out of it. 'Consumes' ranges array (modifying
+// it).
+function normalizeSelection(ranges, primIndex) {
+  var prim = ranges[primIndex]
+  ranges.sort(function (a, b) { return cmp(a.from(), b.from()); })
+  primIndex = indexOf(ranges, prim)
+  for (var i = 1; i < ranges.length; i++) {
+    var cur = ranges[i], prev = ranges[i - 1]
+    if (cmp(prev.to(), cur.from()) >= 0) {
+      var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to())
+      var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head
+      if (i <= primIndex) { --primIndex }
+      ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to))
+    }
+  }
+  return new Selection(ranges, primIndex)
+}
+
+function simpleSelection(anchor, head) {
+  return new Selection([new Range(anchor, head || anchor)], 0)
+}
+
+// Compute the position of the end of a change (its 'to' property
+// refers to the pre-change end).
+function changeEnd(change) {
+  if (!change.text) { return change.to }
+  return Pos(change.from.line + change.text.length - 1,
+             lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+}
+
+// Adjust a position to refer to the post-change position of the
+// same text, or the end of the change if the change covers it.
+function adjustForChange(pos, change) {
+  if (cmp(pos, change.from) < 0) { return pos }
+  if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+  var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch
+  if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch }
+  return Pos(line, ch)
+}
+
+function computeSelAfterChange(doc, change) {
+  var out = []
+  for (var i = 0; i < doc.sel.ranges.length; i++) {
+    var range = doc.sel.ranges[i]
+    out.push(new Range(adjustForChange(range.anchor, change),
+                       adjustForChange(range.head, change)))
+  }
+  return normalizeSelection(out, doc.sel.primIndex)
+}
+
+function offsetPos(pos, old, nw) {
+  if (pos.line == old.line)
+    { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+  else
+    { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+}
+
+// Used by replaceSelections to allow moving the selection to the
+// start or around the replaced test. Hint may be "start" or "around".
+function computeReplacedSel(doc, changes, hint) {
+  var out = []
+  var oldPrev = Pos(doc.first, 0), newPrev = oldPrev
+  for (var i = 0; i < changes.length; i++) {
+    var change = changes[i]
+    var from = offsetPos(change.from, oldPrev, newPrev)
+    var to = offsetPos(changeEnd(change), oldPrev, newPrev)
+    oldPrev = change.to
+    newPrev = to
+    if (hint == "around") {
+      var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0
+      out[i] = new Range(inv ? to : from, inv ? from : to)
+    } else {
+      out[i] = new Range(from, from)
+    }
+  }
+  return new Selection(out, doc.sel.primIndex)
+}
+
+// Used to get the editor into a consistent state again when options change.
+
+function loadMode(cm) {
+  cm.doc.mode = getMode(cm.options, cm.doc.modeOption)
+  resetModeState(cm)
+}
+
+function resetModeState(cm) {
+  cm.doc.iter(function (line) {
+    if (line.stateAfter) { line.stateAfter = null }
+    if (line.styles) { line.styles = null }
+  })
+  cm.doc.frontier = cm.doc.first
+  startWorker(cm, 100)
+  cm.state.modeGen++
+  if (cm.curOp) { regChange(cm) }
+}
+
+// DOCUMENT DATA STRUCTURE
+
+// By default, updates that start and end at the beginning of a line
+// are treated specially, in order to make the association of line
+// widgets and marker elements with the text behave more intuitive.
+function isWholeLineUpdate(doc, change) {
+  return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+    (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+}
+
+// Perform a change on the document data structure.
+function updateDoc(doc, change, markedSpans, estimateHeight$$1) {
+  function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+  function update(line, text, spans) {
+    updateLine(line, text, spans, estimateHeight$$1)
+    signalLater(line, "change", line, change)
+  }
+  function linesFor(start, end) {
+    var result = []
+    for (var i = start; i < end; ++i)
+      { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)) }
+    return result
+  }
+
+  var from = change.from, to = change.to, text = change.text
+  var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line)
+  var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line
+
+  // Adjust the line structure
+  if (change.full) {
+    doc.insert(0, linesFor(0, text.length))
+    doc.remove(text.length, doc.size - text.length)
+  } else if (isWholeLineUpdate(doc, change)) {
+    // This is a whole-line replace. Treated specially to make
+    // sure line objects move the way they are supposed to.
+    var added = linesFor(0, text.length - 1)
+    update(lastLine, lastLine.text, lastSpans)
+    if (nlines) { doc.remove(from.line, nlines) }
+    if (added.length) { doc.insert(from.line, added) }
+  } else if (firstLine == lastLine) {
+    if (text.length == 1) {
+      update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans)
+    } else {
+      var added$1 = linesFor(1, text.length - 1)
+      added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1))
+      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+      doc.insert(from.line + 1, added$1)
+    }
+  } else if (text.length == 1) {
+    update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0))
+    doc.remove(from.line + 1, nlines)
+  } else {
+    update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+    update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans)
+    var added$2 = linesFor(1, text.length - 1)
+    if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) }
+    doc.insert(from.line + 1, added$2)
+  }
+
+  signalLater(doc, "change", doc, change)
+}
+
+// Call f for all linked documents.
+function linkedDocs(doc, f, sharedHistOnly) {
+  function propagate(doc, skip, sharedHist) {
+    if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+      var rel = doc.linked[i]
+      if (rel.doc == skip) { continue }
+      var shared = sharedHist && rel.sharedHist
+      if (sharedHistOnly && !shared) { continue }
+      f(rel.doc, shared)
+      propagate(rel.doc, doc, shared)
+    } }
+  }
+  propagate(doc, null, true)
+}
+
+// Attach a document to an editor.
+function attachDoc(cm, doc) {
+  if (doc.cm) { throw new Error("This document is already in use.") }
+  cm.doc = doc
+  doc.cm = cm
+  estimateLineHeights(cm)
+  loadMode(cm)
+  if (!cm.options.lineWrapping) { findMaxLine(cm) }
+  cm.options.mode = doc.modeOption
+  regChange(cm)
+}
+
+function History(startGen) {
+  // Arrays of change events and selections. Doing something adds an
+  // event to done and clears undo. Undoing moves events from done
+  // to undone, redoing moves them in the other direction.
+  this.done = []; this.undone = []
+  this.undoDepth = Infinity
+  // Used to track when changes can be merged into a single undo
+  // event
+  this.lastModTime = this.lastSelTime = 0
+  this.lastOp = this.lastSelOp = null
+  this.lastOrigin = this.lastSelOrigin = null
+  // Used by the isClean() method
+  this.generation = this.maxGeneration = startGen || 1
+}
+
+// Create a history change event from an updateDoc-style change
+// object.
+function historyChangeFromChange(doc, change) {
+  var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}
+  attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1)
+  linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true)
+  return histChange
+}
+
+// Pop all selection events off the end of a history array. Stop at
+// a change event.
+function clearSelectionEvents(array) {
+  while (array.length) {
+    var last = lst(array)
+    if (last.ranges) { array.pop() }
+    else { break }
+  }
+}
+
+// Find the top change event in the history. Pop off selection
+// events that are in the way.
+function lastChangeEvent(hist, force) {
+  if (force) {
+    clearSelectionEvents(hist.done)
+    return lst(hist.done)
+  } else if (hist.done.length && !lst(hist.done).ranges) {
+    return lst(hist.done)
+  } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+    hist.done.pop()
+    return lst(hist.done)
+  }
+}
+
+// Register a change in the history. Merges changes that are within
+// a single operation, or are close together with an origin that
+// allows merging (starting with "+") into a single event.
+function addChangeToHistory(doc, change, selAfter, opId) {
+  var hist = doc.history
+  hist.undone.length = 0
+  var time = +new Date, cur
+  var last
+
+  if ((hist.lastOp == opId ||
+       hist.lastOrigin == change.origin && change.origin &&
+       ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||
+        change.origin.charAt(0) == "*")) &&
+      (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+    // Merge this change into the last event
+    last = lst(cur.changes)
+    if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+      // Optimized case for simple insertion -- don't want to add
+      // new changesets for every character typed
+      last.to = changeEnd(change)
+    } else {
+      // Add new sub-event
+      cur.changes.push(historyChangeFromChange(doc, change))
+    }
+  } else {
+    // Can not be merged, start a new event.
+    var before = lst(hist.done)
+    if (!before || !before.ranges)
+      { pushSelectionToHistory(doc.sel, hist.done) }
+    cur = {changes: [historyChangeFromChange(doc, change)],
+           generation: hist.generation}
+    hist.done.push(cur)
+    while (hist.done.length > hist.undoDepth) {
+      hist.done.shift()
+      if (!hist.done[0].ranges) { hist.done.shift() }
+    }
+  }
+  hist.done.push(selAfter)
+  hist.generation = ++hist.maxGeneration
+  hist.lastModTime = hist.lastSelTime = time
+  hist.lastOp = hist.lastSelOp = opId
+  hist.lastOrigin = hist.lastSelOrigin = change.origin
+
+  if (!last) { signal(doc, "historyAdded") }
+}
+
+function selectionEventCanBeMerged(doc, origin, prev, sel) {
+  var ch = origin.charAt(0)
+  return ch == "*" ||
+    ch == "+" &&
+    prev.ranges.length == sel.ranges.length &&
+    prev.somethingSelected() == sel.somethingSelected() &&
+    new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+}
+
+// Called whenever the selection changes, sets the new selection as
+// the pending selection in the history, and pushes the old pending
+// selection into the 'done' array when it was significantly
+// different (in number of selected ranges, emptiness, or time).
+function addSelectionToHistory(doc, sel, opId, options) {
+  var hist = doc.history, origin = options && options.origin
+
+  // A new event is started when the previous origin does not match
+  // the current, or the origins don't allow matching. Origins
+  // starting with * are always merged, those starting with + are
+  // merged when similar and close together in time.
+  if (opId == hist.lastSelOp ||
+      (origin && hist.lastSelOrigin == origin &&
+       (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+        selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+    { hist.done[hist.done.length - 1] = sel }
+  else
+    { pushSelectionToHistory(sel, hist.done) }
+
+  hist.lastSelTime = +new Date
+  hist.lastSelOrigin = origin
+  hist.lastSelOp = opId
+  if (options && options.clearRedo !== false)
+    { clearSelectionEvents(hist.undone) }
+}
+
+function pushSelectionToHistory(sel, dest) {
+  var top = lst(dest)
+  if (!(top && top.ranges && top.equals(sel)))
+    { dest.push(sel) }
+}
+
+// Used to store marked span information in the history.
+function attachLocalSpans(doc, change, from, to) {
+  var existing = change["spans_" + doc.id], n = 0
+  doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+    if (line.markedSpans)
+      { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans }
+    ++n
+  })
+}
+
+// When un/re-doing restores text containing marked spans, those
+// that have been explicitly cleared should not be restored.
+function removeClearedSpans(spans) {
+  if (!spans) { return null }
+  var out
+  for (var i = 0; i < spans.length; ++i) {
+    if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } }
+    else if (out) { out.push(spans[i]) }
+  }
+  return !out ? spans : out.length ? out : null
+}
+
+// Retrieve and filter the old marked spans stored in a change event.
+function getOldSpans(doc, change) {
+  var found = change["spans_" + doc.id]
+  if (!found) { return null }
+  var nw = []
+  for (var i = 0; i < change.text.length; ++i)
+    { nw.push(removeClearedSpans(found[i])) }
+  return nw
+}
+
+// Used for un/re-doing changes from the history. Combines the
+// result of computing the existing spans with the set of spans that
+// existed in the history (so that deleting around a span and then
+// undoing brings back the span).
+function mergeOldSpans(doc, change) {
+  var old = getOldSpans(doc, change)
+  var stretched = stretchSpansOverChange(doc, change)
+  if (!old) { return stretched }
+  if (!stretched) { return old }
+
+  for (var i = 0; i < old.length; ++i) {
+    var oldCur = old[i], stretchCur = stretched[i]
+    if (oldCur && stretchCur) {
+      spans: for (var j = 0; j < stretchCur.length; ++j) {
+        var span = stretchCur[j]
+        for (var k = 0; k < oldCur.length; ++k)
+          { if (oldCur[k].marker == span.marker) { continue spans } }
+        oldCur.push(span)
+      }
+    } else if (stretchCur) {
+      old[i] = stretchCur
+    }
+  }
+  return old
+}
+
+// Used both to provide a JSON-safe object in .getHistory, and, when
+// detaching a document, to split the history in two
+function copyHistoryArray(events, newGroup, instantiateSel) {
+  var copy = []
+  for (var i = 0; i < events.length; ++i) {
+    var event = events[i]
+    if (event.ranges) {
+      copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event)
+      continue
+    }
+    var changes = event.changes, newChanges = []
+    copy.push({changes: newChanges})
+    for (var j = 0; j < changes.length; ++j) {
+      var change = changes[j], m = void 0
+      newChanges.push({from: change.from, to: change.to, text: change.text})
+      if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+        if (indexOf(newGroup, Number(m[1])) > -1) {
+          lst(newChanges)[prop] = change[prop]
+          delete change[prop]
+        }
+      } } }
+    }
+  }
+  return copy
+}
+
+// The 'scroll' parameter given to many of these indicated whether
+// the new cursor position should be scrolled into view after
+// modifying the selection.
+
+// If shift is held or the extend flag is set, extends a range to
+// include a given position (and optionally a second position).
+// Otherwise, simply returns the range between the given positions.
+// Used for cursor motion and such.
+function extendRange(doc, range, head, other) {
+  if (doc.cm && doc.cm.display.shift || doc.extend) {
+    var anchor = range.anchor
+    if (other) {
+      var posBefore = cmp(head, anchor) < 0
+      if (posBefore != (cmp(other, anchor) < 0)) {
+        anchor = head
+        head = other
+      } else if (posBefore != (cmp(head, other) < 0)) {
+        head = other
+      }
+    }
+    return new Range(anchor, head)
+  } else {
+    return new Range(other || head, head)
+  }
+}
+
+// Extend the primary selection range, discard the rest.
+function extendSelection(doc, head, other, options) {
+  setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options)
+}
+
+// Extend all selections (pos is an array of selections with length
+// equal the number of selections)
+function extendSelections(doc, heads, options) {
+  var out = []
+  for (var i = 0; i < doc.sel.ranges.length; i++)
+    { out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null) }
+  var newSel = normalizeSelection(out, doc.sel.primIndex)
+  setSelection(doc, newSel, options)
+}
+
+// Updates a single range in the selection.
+function replaceOneSelection(doc, i, range, options) {
+  var ranges = doc.sel.ranges.slice(0)
+  ranges[i] = range
+  setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options)
+}
+
+// Reset the selection to a single range.
+function setSimpleSelection(doc, anchor, head, options) {
+  setSelection(doc, simpleSelection(anchor, head), options)
+}
+
+// Give beforeSelectionChange handlers a change to influence a
+// selection update.
+function filterSelectionChange(doc, sel, options) {
+  var obj = {
+    ranges: sel.ranges,
+    update: function(ranges) {
+      var this$1 = this;
+
+      this.ranges = []
+      for (var i = 0; i < ranges.length; i++)
+        { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+                                   clipPos(doc, ranges[i].head)) }
+    },
+    origin: options && options.origin
+  }
+  signal(doc, "beforeSelectionChange", doc, obj)
+  if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) }
+  if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }
+  else { return sel }
+}
+
+function setSelectionReplaceHistory(doc, sel, options) {
+  var done = doc.history.done, last = lst(done)
+  if (last && last.ranges) {
+    done[done.length - 1] = sel
+    setSelectionNoUndo(doc, sel, options)
+  } else {
+    setSelection(doc, sel, options)
+  }
+}
+
+// Set a new selection.
+function setSelection(doc, sel, options) {
+  setSelectionNoUndo(doc, sel, options)
+  addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options)
+}
+
+function setSelectionNoUndo(doc, sel, options) {
+  if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+    { sel = filterSelectionChange(doc, sel, options) }
+
+  var bias = options && options.bias ||
+    (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1)
+  setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true))
+
+  if (!(options && options.scroll === false) && doc.cm)
+    { ensureCursorVisible(doc.cm) }
+}
+
+function setSelectionInner(doc, sel) {
+  if (sel.equals(doc.sel)) { return }
+
+  doc.sel = sel
+
+  if (doc.cm) {
+    doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true
+    signalCursorActivity(doc.cm)
+  }
+  signalLater(doc, "cursorActivity", doc)
+}
+
+// Verify that the selection does not partially select any atomic
+// marked ranges.
+function reCheckSelection(doc) {
+  setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll)
+}
+
+// Return a selection that does not partially select any atomic
+// ranges.
+function skipAtomicInSelection(doc, sel, bias, mayClear) {
+  var out
+  for (var i = 0; i < sel.ranges.length; i++) {
+    var range = sel.ranges[i]
+    var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]
+    var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear)
+    var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear)
+    if (out || newAnchor != range.anchor || newHead != range.head) {
+      if (!out) { out = sel.ranges.slice(0, i) }
+      out[i] = new Range(newAnchor, newHead)
+    }
+  }
+  return out ? normalizeSelection(out, sel.primIndex) : sel
+}
+
+function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+  var line = getLine(doc, pos.line)
+  if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+    var sp = line.markedSpans[i], m = sp.marker
+    if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+        (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+      if (mayClear) {
+        signal(m, "beforeCursorEnter")
+        if (m.explicitlyCleared) {
+          if (!line.markedSpans) { break }
+          else {--i; continue}
+        }
+      }
+      if (!m.atomic) { continue }
+
+      if (oldPos) {
+        var near = m.find(dir < 0 ? 1 : -1), diff = void 0
+        if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
+          { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) }
+        if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+          { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+      }
+
+      var far = m.find(dir < 0 ? -1 : 1)
+      if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
+        { far = movePos(doc, far, dir, far.line == pos.line ? line : null) }
+      return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+    }
+  } }
+  return pos
+}
+
+// Ensure a given position is not inside an atomic range.
+function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+  var dir = bias || 1
+  var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+      (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+      skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+      (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true))
+  if (!found) {
+    doc.cantEdit = true
+    return Pos(doc.first, 0)
+  }
+  return found
+}
+
+function movePos(doc, pos, dir, line) {
+  if (dir < 0 && pos.ch == 0) {
+    if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+    else { return null }
+  } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+    if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+    else { return null }
+  } else {
+    return new Pos(pos.line, pos.ch + dir)
+  }
+}
+
+function selectAll(cm) {
+  cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll)
+}
+
+// UPDATING
+
+// Allow "beforeChange" event handlers to influence a change
+function filterChange(doc, change, update) {
+  var obj = {
+    canceled: false,
+    from: change.from,
+    to: change.to,
+    text: change.text,
+    origin: change.origin,
+    cancel: function () { return obj.canceled = true; }
+  }
+  if (update) { obj.update = function (from, to, text, origin) {
+    if (from) { obj.from = clipPos(doc, from) }
+    if (to) { obj.to = clipPos(doc, to) }
+    if (text) { obj.text = text }
+    if (origin !== undefined) { obj.origin = origin }
+  } }
+  signal(doc, "beforeChange", doc, obj)
+  if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) }
+
+  if (obj.canceled) { return null }
+  return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+}
+
+// Apply a change to a document, and add it to the document's
+// history, and propagating it to all linked documents.
+function makeChange(doc, change, ignoreReadOnly) {
+  if (doc.cm) {
+    if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+    if (doc.cm.state.suppressEdits) { return }
+  }
+
+  if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+    change = filterChange(doc, change, true)
+    if (!change) { return }
+  }
+
+  // Possibly split or suppress the update based on the presence
+  // of read-only spans in its range.
+  var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)
+  if (split) {
+    for (var i = split.length - 1; i >= 0; --i)
+      { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}) }
+  } else {
+    makeChangeInner(doc, change)
+  }
+}
+
+function makeChangeInner(doc, change) {
+  if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+  var selAfter = computeSelAfterChange(doc, change)
+  addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)
+
+  makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))
+  var rebased = []
+
+  linkedDocs(doc, function (doc, sharedHist) {
+    if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+      rebaseHist(doc.history, change)
+      rebased.push(doc.history)
+    }
+    makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))
+  })
+}
+
+// Revert a change stored in a document's history.
+function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+  if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return }
+
+  var hist = doc.history, event, selAfter = doc.sel
+  var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done
+
+  // Verify that there is a useable event (so that ctrl-z won't
+  // needlessly clear selection events)
+  var i = 0
+  for (; i < source.length; i++) {
+    event = source[i]
+    if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+      { break }
+  }
+  if (i == source.length) { return }
+  hist.lastOrigin = hist.lastSelOrigin = null
+
+  for (;;) {
+    event = source.pop()
+    if (event.ranges) {
+      pushSelectionToHistory(event, dest)
+      if (allowSelectionOnly && !event.equals(doc.sel)) {
+        setSelection(doc, event, {clearRedo: false})
+        return
+      }
+      selAfter = event
+    }
+    else { break }
+  }
+
+  // Build up a reverse change object to add to the opposite history
+  // stack (redo when undoing, and vice versa).
+  var antiChanges = []
+  pushSelectionToHistory(selAfter, dest)
+  dest.push({changes: antiChanges, generation: hist.generation})
+  hist.generation = event.generation || ++hist.maxGeneration
+
+  var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")
+
+  var loop = function ( i ) {
+    var change = event.changes[i]
+    change.origin = type
+    if (filter && !filterChange(doc, change, false)) {
+      source.length = 0
+      return {}
+    }
+
+    antiChanges.push(historyChangeFromChange(doc, change))
+
+    var after = i ? computeSelAfterChange(doc, change) : lst(source)
+    makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))
+    if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) }
+    var rebased = []
+
+    // Propagate to the linked documents
+    linkedDocs(doc, function (doc, sharedHist) {
+      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+        rebaseHist(doc.history, change)
+        rebased.push(doc.history)
+      }
+      makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))
+    })
+  };
+
+  for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+    var returned = loop( i$1 );
+
+    if ( returned ) return returned.v;
+  }
+}
+
+// Sub-views need their line numbers shifted when text is added
+// above or below them in the parent document.
+function shiftDoc(doc, distance) {
+  if (distance == 0) { return }
+  doc.first += distance
+  doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+    Pos(range.anchor.line + distance, range.anchor.ch),
+    Pos(range.head.line + distance, range.head.ch)
+  ); }), doc.sel.primIndex)
+  if (doc.cm) {
+    regChange(doc.cm, doc.first, doc.first - distance, distance)
+    for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+      { regLineChange(doc.cm, l, "gutter") }
+  }
+}
+
+// More lower-level change function, handling only a single document
+// (not linked ones).
+function makeChangeSingleDoc(doc, change, selAfter, spans) {
+  if (doc.cm && !doc.cm.curOp)
+    { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+  if (change.to.line < doc.first) {
+    shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))
+    return
+  }
+  if (change.from.line > doc.lastLine()) { return }
+
+  // Clip the change to the size of this doc
+  if (change.from.line < doc.first) {
+    var shift = change.text.length - 1 - (doc.first - change.from.line)
+    shiftDoc(doc, shift)
+    change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+              text: [lst(change.text)], origin: change.origin}
+  }
+  var last = doc.lastLine()
+  if (change.to.line > last) {
+    change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+              text: [change.text[0]], origin: change.origin}
+  }
+
+  change.removed = getBetween(doc, change.from, change.to)
+
+  if (!selAfter) { selAfter = computeSelAfterChange(doc, change) }
+  if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) }
+  else { updateDoc(doc, change, spans) }
+  setSelectionNoUndo(doc, selAfter, sel_dontScroll)
+}
+
+// Handle the interaction of a change to a document with the editor
+// that this document is part of.
+function makeChangeSingleDocInEditor(cm, change, spans) {
+  var doc = cm.doc, display = cm.display, from = change.from, to = change.to
+
+  var recomputeMaxLength = false, checkWidthStart = from.line
+  if (!cm.options.lineWrapping) {
+    checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))
+    doc.iter(checkWidthStart, to.line + 1, function (line) {
+      if (line == display.maxLine) {
+        recomputeMaxLength = true
+        return true
+      }
+    })
+  }
+
+  if (doc.sel.contains(change.from, change.to) > -1)
+    { signalCursorActivity(cm) }
+
+  updateDoc(doc, change, spans, estimateHeight(cm))
+
+  if (!cm.options.lineWrapping) {
+    doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+      var len = lineLength(line)
+      if (len > display.maxLineLength) {
+        display.maxLine = line
+        display.maxLineLength = len
+        display.maxLineChanged = true
+        recomputeMaxLength = false
+      }
+    })
+    if (recomputeMaxLength) { cm.curOp.updateMaxLine = true }
+  }
+
+  // Adjust frontier, schedule worker
+  doc.frontier = Math.min(doc.frontier, from.line)
+  startWorker(cm, 400)
+
+  var lendiff = change.text.length - (to.line - from.line) - 1
+  // Remember that these lines changed, for updating the display
+  if (change.full)
+    { regChange(cm) }
+  else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+    { regLineChange(cm, from.line, "text") }
+  else
+    { regChange(cm, from.line, to.line + 1, lendiff) }
+
+  var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change")
+  if (changeHandler || changesHandler) {
+    var obj = {
+      from: from, to: to,
+      text: change.text,
+      removed: change.removed,
+      origin: change.origin
+    }
+    if (changeHandler) { signalLater(cm, "change", cm, obj) }
+    if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) }
+  }
+  cm.display.selForContextMenu = null
+}
+
+function replaceRange(doc, code, from, to, origin) {
+  if (!to) { to = from }
+  if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp }
+  if (typeof code == "string") { code = doc.splitLines(code) }
+  makeChange(doc, {from: from, to: to, text: code, origin: origin})
+}
+
+// Rebasing/resetting history to deal with externally-sourced changes
+
+function rebaseHistSelSingle(pos, from, to, diff) {
+  if (to < pos.line) {
+    pos.line += diff
+  } else if (from < pos.line) {
+    pos.line = from
+    pos.ch = 0
+  }
+}
+
+// Tries to rebase an array of history events given a change in the
+// document. If the change touches the same lines as the event, the
+// event, and everything 'behind' it, is discarded. If the change is
+// before the event, the event's positions are updated. Uses a
+// copy-on-write scheme for the positions, to avoid having to
+// reallocate them all on every rebase, but also avoid problems with
+// shared position objects being unsafely updated.
+function rebaseHistArray(array, from, to, diff) {
+  for (var i = 0; i < array.length; ++i) {
+    var sub = array[i], ok = true
+    if (sub.ranges) {
+      if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }
+      for (var j = 0; j < sub.ranges.length; j++) {
+        rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)
+        rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)
+      }
+      continue
+    }
+    for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+      var cur = sub.changes[j$1]
+      if (to < cur.from.line) {
+        cur.from = Pos(cur.from.line + diff, cur.from.ch)
+        cur.to = Pos(cur.to.line + diff, cur.to.ch)
+      } else if (from <= cur.to.line) {
+        ok = false
+        break
+      }
+    }
+    if (!ok) {
+      array.splice(0, i + 1)
+      i = 0
+    }
+  }
+}
+
+function rebaseHist(hist, change) {
+  var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1
+  rebaseHistArray(hist.done, from, to, diff)
+  rebaseHistArray(hist.undone, from, to, diff)
+}
+
+// Utility for applying a change to a line by handle or number,
+// returning the number and optionally registering the line as
+// changed.
+function changeLine(doc, handle, changeType, op) {
+  var no = handle, line = handle
+  if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) }
+  else { no = lineNo(handle) }
+  if (no == null) { return null }
+  if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) }
+  return line
+}
+
+// The document is represented as a BTree consisting of leaves, with
+// chunk of lines in them, and branches, with up to ten leaves or
+// other branch nodes below them. The top node is always a branch
+// node, and is the document object itself (meaning it has
+// additional methods and properties).
+//
+// All nodes have parent links. The tree is used both to go from
+// line numbers to line objects, and to go from objects to numbers.
+// It also indexes by height, and is used to convert between height
+// and line object, and to find the total height of the document.
+//
+// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+function LeafChunk(lines) {
+  var this$1 = this;
+
+  this.lines = lines
+  this.parent = null
+  var height = 0
+  for (var i = 0; i < lines.length; ++i) {
+    lines[i].parent = this$1
+    height += lines[i].height
+  }
+  this.height = height
+}
+
+LeafChunk.prototype = {
+  chunkSize: function() { return this.lines.length },
+  // Remove the n lines at offset 'at'.
+  removeInner: function(at, n) {
+    var this$1 = this;
+
+    for (var i = at, e = at + n; i < e; ++i) {
+      var line = this$1.lines[i]
+      this$1.height -= line.height
+      cleanUpLine(line)
+      signalLater(line, "delete")
+    }
+    this.lines.splice(at, n)
+  },
+  // Helper used to collapse a small branch into a single leaf.
+  collapse: function(lines) {
+    lines.push.apply(lines, this.lines)
+  },
+  // Insert the given array of lines at offset 'at', count them as
+  // having the given height.
+  insertInner: function(at, lines, height) {
+    var this$1 = this;
+
+    this.height += height
+    this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at))
+    for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 }
+  },
+  // Used to iterate over a part of the tree.
+  iterN: function(at, n, op) {
+    var this$1 = this;
+
+    for (var e = at + n; at < e; ++at)
+      { if (op(this$1.lines[at])) { return true } }
+  }
+}
+
+function BranchChunk(children) {
+  var this$1 = this;
+
+  this.children = children
+  var size = 0, height = 0
+  for (var i = 0; i < children.length; ++i) {
+    var ch = children[i]
+    size += ch.chunkSize(); height += ch.height
+    ch.parent = this$1
+  }
+  this.size = size
+  this.height = height
+  this.parent = null
+}
+
+BranchChunk.prototype = {
+  chunkSize: function() { return this.size },
+  removeInner: function(at, n) {
+    var this$1 = this;
+
+    this.size -= n
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at < sz) {
+        var rm = Math.min(n, sz - at), oldHeight = child.height
+        child.removeInner(at, rm)
+        this$1.height -= oldHeight - child.height
+        if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null }
+        if ((n -= rm) == 0) { break }
+        at = 0
+      } else { at -= sz }
+    }
+    // If the result is smaller than 25 lines, ensure that it is a
+    // single leaf node.
+    if (this.size - n < 25 &&
+        (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+      var lines = []
+      this.collapse(lines)
+      this.children = [new LeafChunk(lines)]
+      this.children[0].parent = this
+    }
+  },
+  collapse: function(lines) {
+    var this$1 = this;
+
+    for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) }
+  },
+  insertInner: function(at, lines, height) {
+    var this$1 = this;
+
+    this.size += lines.length
+    this.height += height
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at <= sz) {
+        child.insertInner(at, lines, height)
+        if (child.lines && child.lines.length > 50) {
+          // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+          // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+          var remaining = child.lines.length % 25 + 25
+          for (var pos = remaining; pos < child.lines.length;) {
+            var leaf = new LeafChunk(child.lines.slice(pos, pos += 25))
+            child.height -= leaf.height
+            this$1.children.splice(++i, 0, leaf)
+            leaf.parent = this$1
+          }
+          child.lines = child.lines.slice(0, remaining)
+          this$1.maybeSpill()
+        }
+        break
+      }
+      at -= sz
+    }
+  },
+  // When a node has grown, check whether it should be split.
+  maybeSpill: function() {
+    if (this.children.length <= 10) { return }
+    var me = this
+    do {
+      var spilled = me.children.splice(me.children.length - 5, 5)
+      var sibling = new BranchChunk(spilled)
+      if (!me.parent) { // Become the parent node
+        var copy = new BranchChunk(me.children)
+        copy.parent = me
+        me.children = [copy, sibling]
+        me = copy
+     } else {
+        me.size -= sibling.size
+        me.height -= sibling.height
+        var myIndex = indexOf(me.parent.children, me)
+        me.parent.children.splice(myIndex + 1, 0, sibling)
+      }
+      sibling.parent = me.parent
+    } while (me.children.length > 10)
+    me.parent.maybeSpill()
+  },
+  iterN: function(at, n, op) {
+    var this$1 = this;
+
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at < sz) {
+        var used = Math.min(n, sz - at)
+        if (child.iterN(at, used, op)) { return true }
+        if ((n -= used) == 0) { break }
+        at = 0
+      } else { at -= sz }
+    }
+  }
+}
+
+// Line widgets are block elements displayed above or below a line.
+
+function LineWidget(doc, node, options) {
+  var this$1 = this;
+
+  if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+    { this$1[opt] = options[opt] } } }
+  this.doc = doc
+  this.node = node
+}
+eventMixin(LineWidget)
+
+function adjustScrollWhenAboveVisible(cm, line, diff) {
+  if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+    { addToScrollPos(cm, null, diff) }
+}
+
+LineWidget.prototype.clear = function() {
+  var this$1 = this;
+
+  var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line)
+  if (no == null || !ws) { return }
+  for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } }
+  if (!ws.length) { line.widgets = null }
+  var height = widgetHeight(this)
+  updateLineHeight(line, Math.max(0, line.height - height))
+  if (cm) { runInOp(cm, function () {
+    adjustScrollWhenAboveVisible(cm, line, -height)
+    regLineChange(cm, no, "widget")
+  }) }
+}
+LineWidget.prototype.changed = function() {
+  var oldH = this.height, cm = this.doc.cm, line = this.line
+  this.height = null
+  var diff = widgetHeight(this) - oldH
+  if (!diff) { return }
+  updateLineHeight(line, line.height + diff)
+  if (cm) { runInOp(cm, function () {
+    cm.curOp.forceUpdate = true
+    adjustScrollWhenAboveVisible(cm, line, diff)
+  }) }
+}
+
+function addLineWidget(doc, handle, node, options) {
+  var widget = new LineWidget(doc, node, options)
+  var cm = doc.cm
+  if (cm && widget.noHScroll) { cm.display.alignWidgets = true }
+  changeLine(doc, handle, "widget", function (line) {
+    var widgets = line.widgets || (line.widgets = [])
+    if (widget.insertAt == null) { widgets.push(widget) }
+    else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) }
+    widget.line = line
+    if (cm && !lineIsHidden(doc, line)) {
+      var aboveVisible = heightAtLine(line) < doc.scrollTop
+      updateLineHeight(line, line.height + widgetHeight(widget))
+      if (aboveVisible) { addToScrollPos(cm, null, widget.height) }
+      cm.curOp.forceUpdate = true
+    }
+    return true
+  })
+  return widget
+}
+
+// TEXTMARKERS
+
+// Created with markText and setBookmark methods. A TextMarker is a
+// handle that can be used to clear or find a marked position in the
+// document. Line objects hold arrays (markedSpans) containing
+// {from, to, marker} object pointing to such marker objects, and
+// indicating that such a marker is present on that line. Multiple
+// lines may point to the same marker when it spans across lines.
+// The spans will have null for their from/to properties when the
+// marker continues beyond the start/end of the line. Markers have
+// links back to the lines they currently touch.
+
+// Collapsed markers have unique ids, in order to be able to order
+// them, which is needed for uniquely determining an outer marker
+// when they overlap (they may nest, but not partially overlap).
+var nextMarkerId = 0
+
+function TextMarker(doc, type) {
+  this.lines = []
+  this.type = type
+  this.doc = doc
+  this.id = ++nextMarkerId
+}
+eventMixin(TextMarker)
+
+// Clear the marker.
+TextMarker.prototype.clear = function() {
+  var this$1 = this;
+
+  if (this.explicitlyCleared) { return }
+  var cm = this.doc.cm, withOp = cm && !cm.curOp
+  if (withOp) { startOperation(cm) }
+  if (hasHandler(this, "clear")) {
+    var found = this.find()
+    if (found) { signalLater(this, "clear", found.from, found.to) }
+  }
+  var min = null, max = null
+  for (var i = 0; i < this.lines.length; ++i) {
+    var line = this$1.lines[i]
+    var span = getMarkedSpanFor(line.markedSpans, this$1)
+    if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") }
+    else if (cm) {
+      if (span.to != null) { max = lineNo(line) }
+      if (span.from != null) { min = lineNo(line) }
+    }
+    line.markedSpans = removeMarkedSpan(line.markedSpans, span)
+    if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+      { updateLineHeight(line, textHeight(cm.display)) }
+  }
+  if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+    var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual)
+    if (len > cm.display.maxLineLength) {
+      cm.display.maxLine = visual
+      cm.display.maxLineLength = len
+      cm.display.maxLineChanged = true
+    }
+  } }
+
+  if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) }
+  this.lines.length = 0
+  this.explicitlyCleared = true
+  if (this.atomic && this.doc.cantEdit) {
+    this.doc.cantEdit = false
+    if (cm) { reCheckSelection(cm.doc) }
+  }
+  if (cm) { signalLater(cm, "markerCleared", cm, this) }
+  if (withOp) { endOperation(cm) }
+  if (this.parent) { this.parent.clear() }
+}
+
+// Find the position of the marker in the document. Returns a {from,
+// to} object by default. Side can be passed to get a specific side
+// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+// Pos objects returned contain a line object, rather than a line
+// number (used to prevent looking up the same line twice).
+TextMarker.prototype.find = function(side, lineObj) {
+  var this$1 = this;
+
+  if (side == null && this.type == "bookmark") { side = 1 }
+  var from, to
+  for (var i = 0; i < this.lines.length; ++i) {
+    var line = this$1.lines[i]
+    var span = getMarkedSpanFor(line.markedSpans, this$1)
+    if (span.from != null) {
+      from = Pos(lineObj ? line : lineNo(line), span.from)
+      if (side == -1) { return from }
+    }
+    if (span.to != null) {
+      to = Pos(lineObj ? line : lineNo(line), span.to)
+      if (side == 1) { return to }
+    }
+  }
+  return from && {from: from, to: to}
+}
+
+// Signals that the marker's widget changed, and surrounding layout
+// should be recomputed.
+TextMarker.prototype.changed = function() {
+  var pos = this.find(-1, true), widget = this, cm = this.doc.cm
+  if (!pos || !cm) { return }
+  runInOp(cm, function () {
+    var line = pos.line, lineN = lineNo(pos.line)
+    var view = findViewForLine(cm, lineN)
+    if (view) {
+      clearLineMeasurementCacheFor(view)
+      cm.curOp.selectionChanged = cm.curOp.forceUpdate = true
+    }
+    cm.curOp.updateMaxLine = true
+    if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+      var oldHeight = widget.height
+      widget.height = null
+      var dHeight = widgetHeight(widget) - oldHeight
+      if (dHeight)
+        { updateLineHeight(line, line.height + dHeight) }
+    }
+  })
+}
+
+TextMarker.prototype.attachLine = function(line) {
+  if (!this.lines.length && this.doc.cm) {
+    var op = this.doc.cm.curOp
+    if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+      { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) }
+  }
+  this.lines.push(line)
+}
+TextMarker.prototype.detachLine = function(line) {
+  this.lines.splice(indexOf(this.lines, line), 1)
+  if (!this.lines.length && this.doc.cm) {
+    var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this)
+  }
+}
+
+// Create a marker, wire it up to the right lines, and
+function markText(doc, from, to, options, type) {
+  // Shared markers (across linked documents) are handled separately
+  // (markTextShared will call out to this again, once per
+  // document).
+  if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+  // Ensure we are in an operation.
+  if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+  var marker = new TextMarker(doc, type), diff = cmp(from, to)
+  if (options) { copyObj(options, marker, false) }
+  // Don't connect empty markers unless clearWhenEmpty is false
+  if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+    { return marker }
+  if (marker.replacedWith) {
+    // Showing up as a widget implies collapsed (widget replaces text)
+    marker.collapsed = true
+    marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget")
+    if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") }
+    if (options.insertLeft) { marker.widgetNode.insertLeft = true }
+  }
+  if (marker.collapsed) {
+    if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+        from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+      { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+    seeCollapsedSpans()
+  }
+
+  if (marker.addToHistory)
+    { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) }
+
+  var curLine = from.line, cm = doc.cm, updateMaxLine
+  doc.iter(curLine, to.line + 1, function (line) {
+    if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+      { updateMaxLine = true }
+    if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) }
+    addMarkedSpan(line, new MarkedSpan(marker,
+                                       curLine == from.line ? from.ch : null,
+                                       curLine == to.line ? to.ch : null))
+    ++curLine
+  })
+  // lineIsHidden depends on the presence of the spans, so needs a second pass
+  if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+    if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) }
+  }) }
+
+  if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) }
+
+  if (marker.readOnly) {
+    seeReadOnlySpans()
+    if (doc.history.done.length || doc.history.undone.length)
+      { doc.clearHistory() }
+  }
+  if (marker.collapsed) {
+    marker.id = ++nextMarkerId
+    marker.atomic = true
+  }
+  if (cm) {
+    // Sync editor state
+    if (updateMaxLine) { cm.curOp.updateMaxLine = true }
+    if (marker.collapsed)
+      { regChange(cm, from.line, to.line + 1) }
+    else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)
+      { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } }
+    if (marker.atomic) { reCheckSelection(cm.doc) }
+    signalLater(cm, "markerAdded", cm, marker)
+  }
+  return marker
+}
+
+// SHARED TEXTMARKERS
+
+// A shared marker spans multiple linked documents. It is
+// implemented as a meta-marker-object controlling multiple normal
+// markers.
+function SharedTextMarker(markers, primary) {
+  var this$1 = this;
+
+  this.markers = markers
+  this.primary = primary
+  for (var i = 0; i < markers.length; ++i)
+    { markers[i].parent = this$1 }
+}
+eventMixin(SharedTextMarker)
+
+SharedTextMarker.prototype.clear = function() {
+  var this$1 = this;
+
+  if (this.explicitlyCleared) { return }
+  this.explicitlyCleared = true
+  for (var i = 0; i < this.markers.length; ++i)
+    { this$1.markers[i].clear() }
+  signalLater(this, "clear")
+}
+SharedTextMarker.prototype.find = function(side, lineObj) {
+  return this.primary.find(side, lineObj)
+}
+
+function markTextShared(doc, from, to, options, type) {
+  options = copyObj(options)
+  options.shared = false
+  var markers = [markText(doc, from, to, options, type)], primary = markers[0]
+  var widget = options.widgetNode
+  linkedDocs(doc, function (doc) {
+    if (widget) { options.widgetNode = widget.cloneNode(true) }
+    markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type))
+    for (var i = 0; i < doc.linked.length; ++i)
+      { if (doc.linked[i].isParent) { return } }
+    primary = lst(markers)
+  })
+  return new SharedTextMarker(markers, primary)
+}
+
+function findSharedMarkers(doc) {
+  return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+}
+
+function copySharedMarkers(doc, markers) {
+  for (var i = 0; i < markers.length; i++) {
+    var marker = markers[i], pos = marker.find()
+    var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to)
+    if (cmp(mFrom, mTo)) {
+      var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type)
+      marker.markers.push(subMark)
+      subMark.parent = marker
+    }
+  }
+}
+
+function detachSharedMarkers(markers) {
+  var loop = function ( i ) {
+    var marker = markers[i], linked = [marker.primary.doc]
+    linkedDocs(marker.primary.doc, function (d) { return linked.push(d); })
+    for (var j = 0; j < marker.markers.length; j++) {
+      var subMarker = marker.markers[j]
+      if (indexOf(linked, subMarker.doc) == -1) {
+        subMarker.parent = null
+        marker.markers.splice(j--, 1)
+      }
+    }
+  };
+
+  for (var i = 0; i < markers.length; i++) loop( i );
+}
+
+var nextDocId = 0
+var Doc = function(text, mode, firstLine, lineSep) {
+  if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep) }
+  if (firstLine == null) { firstLine = 0 }
+
+  BranchChunk.call(this, [new LeafChunk([new Line("", null)])])
+  this.first = firstLine
+  this.scrollTop = this.scrollLeft = 0
+  this.cantEdit = false
+  this.cleanGeneration = 1
+  this.frontier = firstLine
+  var start = Pos(firstLine, 0)
+  this.sel = simpleSelection(start)
+  this.history = new History(null)
+  this.id = ++nextDocId
+  this.modeOption = mode
+  this.lineSep = lineSep
+  this.extend = false
+
+  if (typeof text == "string") { text = this.splitLines(text) }
+  updateDoc(this, {from: start, to: start, text: text})
+  setSelection(this, simpleSelection(start), sel_dontScroll)
+}
+
+Doc.prototype = createObj(BranchChunk.prototype, {
+  constructor: Doc,
+  // Iterate over the document. Supports two forms -- with only one
+  // argument, it calls that for each line in the document. With
+  // three, it iterates over the range given by the first two (with
+  // the second being non-inclusive).
+  iter: function(from, to, op) {
+    if (op) { this.iterN(from - this.first, to - from, op) }
+    else { this.iterN(this.first, this.first + this.size, from) }
+  },
+
+  // Non-public interface for adding and removing lines.
+  insert: function(at, lines) {
+    var height = 0
+    for (var i = 0; i < lines.length; ++i) { height += lines[i].height }
+    this.insertInner(at - this.first, lines, height)
+  },
+  remove: function(at, n) { this.removeInner(at - this.first, n) },
+
+  // From here, the methods are part of the public interface. Most
+  // are also available from CodeMirror (editor) instances.
+
+  getValue: function(lineSep) {
+    var lines = getLines(this, this.first, this.first + this.size)
+    if (lineSep === false) { return lines }
+    return lines.join(lineSep || this.lineSeparator())
+  },
+  setValue: docMethodOp(function(code) {
+    var top = Pos(this.first, 0), last = this.first + this.size - 1
+    makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+                      text: this.splitLines(code), origin: "setValue", full: true}, true)
+    setSelection(this, simpleSelection(top))
+  }),
+  replaceRange: function(code, from, to, origin) {
+    from = clipPos(this, from)
+    to = to ? clipPos(this, to) : from
+    replaceRange(this, code, from, to, origin)
+  },
+  getRange: function(from, to, lineSep) {
+    var lines = getBetween(this, clipPos(this, from), clipPos(this, to))
+    if (lineSep === false) { return lines }
+    return lines.join(lineSep || this.lineSeparator())
+  },
+
+  getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+  getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+  getLineNumber: function(line) {return lineNo(line)},
+
+  getLineHandleVisualStart: function(line) {
+    if (typeof line == "number") { line = getLine(this, line) }
+    return visualLine(line)
+  },
+
+  lineCount: function() {return this.size},
+  firstLine: function() {return this.first},
+  lastLine: function() {return this.first + this.size - 1},
+
+  clipPos: function(pos) {return clipPos(this, pos)},
+
+  getCursor: function(start) {
+    var range$$1 = this.sel.primary(), pos
+    if (start == null || start == "head") { pos = range$$1.head }
+    else if (start == "anchor") { pos = range$$1.anchor }
+    else if (start == "end" || start == "to" || start === false) { pos = range$$1.to() }
+    else { pos = range$$1.from() }
+    return pos
+  },
+  listSelections: function() { return this.sel.ranges },
+  somethingSelected: function() {return this.sel.somethingSelected()},
+
+  setCursor: docMethodOp(function(line, ch, options) {
+    setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options)
+  }),
+  setSelection: docMethodOp(function(anchor, head, options) {
+    setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options)
+  }),
+  extendSelection: docMethodOp(function(head, other, options) {
+    extendSelection(this, clipPos(this, head), other && clipPos(this, other), options)
+  }),
+  extendSelections: docMethodOp(function(heads, options) {
+    extendSelections(this, clipPosArray(this, heads), options)
+  }),
+  extendSelectionsBy: docMethodOp(function(f, options) {
+    var heads = map(this.sel.ranges, f)
+    extendSelections(this, clipPosArray(this, heads), options)
+  }),
+  setSelections: docMethodOp(function(ranges, primary, options) {
+    var this$1 = this;
+
+    if (!ranges.length) { return }
+    var out = []
+    for (var i = 0; i < ranges.length; i++)
+      { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+                         clipPos(this$1, ranges[i].head)) }
+    if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) }
+    setSelection(this, normalizeSelection(out, primary), options)
+  }),
+  addSelection: docMethodOp(function(anchor, head, options) {
+    var ranges = this.sel.ranges.slice(0)
+    ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)))
+    setSelection(this, normalizeSelection(ranges, ranges.length - 1), options)
+  }),
+
+  getSelection: function(lineSep) {
+    var this$1 = this;
+
+    var ranges = this.sel.ranges, lines
+    for (var i = 0; i < ranges.length; i++) {
+      var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+      lines = lines ? lines.concat(sel) : sel
+    }
+    if (lineSep === false) { return lines }
+    else { return lines.join(lineSep || this.lineSeparator()) }
+  },
+  getSelections: function(lineSep) {
+    var this$1 = this;
+
+    var parts = [], ranges = this.sel.ranges
+    for (var i = 0; i < ranges.length; i++) {
+      var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+      if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) }
+      parts[i] = sel
+    }
+    return parts
+  },
+  replaceSelection: function(code, collapse, origin) {
+    var dup = []
+    for (var i = 0; i < this.sel.ranges.length; i++)
+      { dup[i] = code }
+    this.replaceSelections(dup, collapse, origin || "+input")
+  },
+  replaceSelections: docMethodOp(function(code, collapse, origin) {
+    var this$1 = this;
+
+    var changes = [], sel = this.sel
+    for (var i = 0; i < sel.ranges.length; i++) {
+      var range$$1 = sel.ranges[i]
+      changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin}
+    }
+    var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse)
+    for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+      { makeChange(this$1, changes[i$1]) }
+    if (newSel) { setSelectionReplaceHistory(this, newSel) }
+    else if (this.cm) { ensureCursorVisible(this.cm) }
+  }),
+  undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}),
+  redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}),
+  undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}),
+  redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}),
+
+  setExtending: function(val) {this.extend = val},
+  getExtending: function() {return this.extend},
+
+  historySize: function() {
+    var hist = this.history, done = 0, undone = 0
+    for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } }
+    for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } }
+    return {undo: done, redo: undone}
+  },
+  clearHistory: function() {this.history = new History(this.history.maxGeneration)},
+
+  markClean: function() {
+    this.cleanGeneration = this.changeGeneration(true)
+  },
+  changeGeneration: function(forceSplit) {
+    if (forceSplit)
+      { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null }
+    return this.history.generation
+  },
+  isClean: function (gen) {
+    return this.history.generation == (gen || this.cleanGeneration)
+  },
+
+  getHistory: function() {
+    return {done: copyHistoryArray(this.history.done),
+            undone: copyHistoryArray(this.history.undone)}
+  },
+  setHistory: function(histData) {
+    var hist = this.history = new History(this.history.maxGeneration)
+    hist.done = copyHistoryArray(histData.done.slice(0), null, true)
+    hist.undone = copyHistoryArray(histData.undone.slice(0), null, true)
+  },
+
+  setGutterMarker: docMethodOp(function(line, gutterID, value) {
+    return changeLine(this, line, "gutter", function (line) {
+      var markers = line.gutterMarkers || (line.gutterMarkers = {})
+      markers[gutterID] = value
+      if (!value && isEmpty(markers)) { line.gutterMarkers = null }
+      return true
+    })
+  }),
+
+  clearGutter: docMethodOp(function(gutterID) {
+    var this$1 = this;
+
+    var i = this.first
+    this.iter(function (line) {
+      if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+        changeLine(this$1, line, "gutter", function () {
+          line.gutterMarkers[gutterID] = null
+          if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null }
+          return true
+        })
+      }
+      ++i
+    })
+  }),
+
+  lineInfo: function(line) {
+    var n
+    if (typeof line == "number") {
+      if (!isLine(this, line)) { return null }
+      n = line
+      line = getLine(this, line)
+      if (!line) { return null }
+    } else {
+      n = lineNo(line)
+      if (n == null) { return null }
+    }
+    return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+            textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+            widgets: line.widgets}
+  },
+
+  addLineClass: docMethodOp(function(handle, where, cls) {
+    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+      var prop = where == "text" ? "textClass"
+               : where == "background" ? "bgClass"
+               : where == "gutter" ? "gutterClass" : "wrapClass"
+      if (!line[prop]) { line[prop] = cls }
+      else if (classTest(cls).test(line[prop])) { return false }
+      else { line[prop] += " " + cls }
+      return true
+    })
+  }),
+  removeLineClass: docMethodOp(function(handle, where, cls) {
+    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+      var prop = where == "text" ? "textClass"
+               : where == "background" ? "bgClass"
+               : where == "gutter" ? "gutterClass" : "wrapClass"
+      var cur = line[prop]
+      if (!cur) { return false }
+      else if (cls == null) { line[prop] = null }
+      else {
+        var found = cur.match(classTest(cls))
+        if (!found) { return false }
+        var end = found.index + found[0].length
+        line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null
+      }
+      return true
+    })
+  }),
+
+  addLineWidget: docMethodOp(function(handle, node, options) {
+    return addLineWidget(this, handle, node, options)
+  }),
+  removeLineWidget: function(widget) { widget.clear() },
+
+  markText: function(from, to, options) {
+    return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+  },
+  setBookmark: function(pos, options) {
+    var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+                    insertLeft: options && options.insertLeft,
+                    clearWhenEmpty: false, shared: options && options.shared,
+                    handleMouseEvents: options && options.handleMouseEvents}
+    pos = clipPos(this, pos)
+    return markText(this, pos, pos, realOpts, "bookmark")
+  },
+  findMarksAt: function(pos) {
+    pos = clipPos(this, pos)
+    var markers = [], spans = getLine(this, pos.line).markedSpans
+    if (spans) { for (var i = 0; i < spans.length; ++i) {
+      var span = spans[i]
+      if ((span.from == null || span.from <= pos.ch) &&
+          (span.to == null || span.to >= pos.ch))
+        { markers.push(span.marker.parent || span.marker) }
+    } }
+    return markers
+  },
+  findMarks: function(from, to, filter) {
+    from = clipPos(this, from); to = clipPos(this, to)
+    var found = [], lineNo$$1 = from.line
+    this.iter(from.line, to.line + 1, function (line) {
+      var spans = line.markedSpans
+      if (spans) { for (var i = 0; i < spans.length; i++) {
+        var span = spans[i]
+        if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||
+              span.from == null && lineNo$$1 != from.line ||
+              span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&
+            (!filter || filter(span.marker)))
+          { found.push(span.marker.parent || span.marker) }
+      } }
+      ++lineNo$$1
+    })
+    return found
+  },
+  getAllMarks: function() {
+    var markers = []
+    this.iter(function (line) {
+      var sps = line.markedSpans
+      if (sps) { for (var i = 0; i < sps.length; ++i)
+        { if (sps[i].from != null) { markers.push(sps[i].marker) } } }
+    })
+    return markers
+  },
+
+  posFromIndex: function(off) {
+    var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length
+    this.iter(function (line) {
+      var sz = line.text.length + sepSize
+      if (sz > off) { ch = off; return true }
+      off -= sz
+      ++lineNo$$1
+    })
+    return clipPos(this, Pos(lineNo$$1, ch))
+  },
+  indexFromPos: function (coords) {
+    coords = clipPos(this, coords)
+    var index = coords.ch
+    if (coords.line < this.first || coords.ch < 0) { return 0 }
+    var sepSize = this.lineSeparator().length
+    this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+      index += line.text.length + sepSize
+    })
+    return index
+  },
+
+  copy: function(copyHistory) {
+    var doc = new Doc(getLines(this, this.first, this.first + this.size),
+                      this.modeOption, this.first, this.lineSep)
+    doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft
+    doc.sel = this.sel
+    doc.extend = false
+    if (copyHistory) {
+      doc.history.undoDepth = this.history.undoDepth
+      doc.setHistory(this.getHistory())
+    }
+    return doc
+  },
+
+  linkedDoc: function(options) {
+    if (!options) { options = {} }
+    var from = this.first, to = this.first + this.size
+    if (options.from != null && options.from > from) { from = options.from }
+    if (options.to != null && options.to < to) { to = options.to }
+    var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep)
+    if (options.sharedHist) { copy.history = this.history
+    ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist})
+    copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]
+    copySharedMarkers(copy, findSharedMarkers(this))
+    return copy
+  },
+  unlinkDoc: function(other) {
+    var this$1 = this;
+
+    if (other instanceof CodeMirror$1) { other = other.doc }
+    if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+      var link = this$1.linked[i]
+      if (link.doc != other) { continue }
+      this$1.linked.splice(i, 1)
+      other.unlinkDoc(this$1)
+      detachSharedMarkers(findSharedMarkers(this$1))
+      break
+    } }
+    // If the histories were shared, split them again
+    if (other.history == this.history) {
+      var splitIds = [other.id]
+      linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true)
+      other.history = new History(null)
+      other.history.done = copyHistoryArray(this.history.done, splitIds)
+      other.history.undone = copyHistoryArray(this.history.undone, splitIds)
+    }
+  },
+  iterLinkedDocs: function(f) {linkedDocs(this, f)},
+
+  getMode: function() {return this.mode},
+  getEditor: function() {return this.cm},
+
+  splitLines: function(str) {
+    if (this.lineSep) { return str.split(this.lineSep) }
+    return splitLinesAuto(str)
+  },
+  lineSeparator: function() { return this.lineSep || "\n" }
+})
+
+// Public alias.
+Doc.prototype.eachLine = Doc.prototype.iter
+
+// Kludge to work around strange IE behavior where it'll sometimes
+// re-fire a series of drag-related events right after the drop (#1551)
+var lastDrop = 0
+
+function onDrop(e) {
+  var cm = this
+  clearDragCursor(cm)
+  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+    { return }
+  e_preventDefault(e)
+  if (ie) { lastDrop = +new Date }
+  var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files
+  if (!pos || cm.isReadOnly()) { return }
+  // Might be a file drop, in which case we simply extract the text
+  // and insert it.
+  if (files && files.length && window.FileReader && window.File) {
+    var n = files.length, text = Array(n), read = 0
+    var loadFile = function (file, i) {
+      if (cm.options.allowDropFileTypes &&
+          indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+        { return }
+
+      var reader = new FileReader
+      reader.onload = operation(cm, function () {
+        var content = reader.result
+        if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" }
+        text[i] = content
+        if (++read == n) {
+          pos = clipPos(cm.doc, pos)
+          var change = {from: pos, to: pos,
+                        text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+                        origin: "paste"}
+          makeChange(cm.doc, change)
+          setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)))
+        }
+      })
+      reader.readAsText(file)
+    }
+    for (var i = 0; i < n; ++i) { loadFile(files[i], i) }
+  } else { // Normal drop
+    // Don't do a replace if the drop happened inside of the selected text.
+    if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+      cm.state.draggingText(e)
+      // Ensure the editor is re-focused
+      setTimeout(function () { return cm.display.input.focus(); }, 20)
+      return
+    }
+    try {
+      var text$1 = e.dataTransfer.getData("Text")
+      if (text$1) {
+        var selected
+        if (cm.state.draggingText && !cm.state.draggingText.copy)
+          { selected = cm.listSelections() }
+        setSelectionNoUndo(cm.doc, simpleSelection(pos, pos))
+        if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+          { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } }
+        cm.replaceSelection(text$1, "around", "paste")
+        cm.display.input.focus()
+      }
+    }
+    catch(e){}
+  }
+}
+
+function onDragStart(cm, e) {
+  if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+  e.dataTransfer.setData("Text", cm.getSelection())
+  e.dataTransfer.effectAllowed = "copyMove"
+
+  // Use dummy image instead of default browsers image.
+  // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+  if (e.dataTransfer.setDragImage && !safari) {
+    var img = elt("img", null, null, "position: fixed; left: 0; top: 0;")
+    img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+    if (presto) {
+      img.width = img.height = 1
+      cm.display.wrapper.appendChild(img)
+      // Force a relayout, or Opera won't use our image for some obscure reason
+      img._top = img.offsetTop
+    }
+    e.dataTransfer.setDragImage(img, 0, 0)
+    if (presto) { img.parentNode.removeChild(img) }
+  }
+}
+
+function onDragOver(cm, e) {
+  var pos = posFromMouse(cm, e)
+  if (!pos) { return }
+  var frag = document.createDocumentFragment()
+  drawSelectionCursor(cm, pos, frag)
+  if (!cm.display.dragCursor) {
+    cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors")
+    cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv)
+  }
+  removeChildrenAndAdd(cm.display.dragCursor, frag)
+}
+
+function clearDragCursor(cm) {
+  if (cm.display.dragCursor) {
+    cm.display.lineSpace.removeChild(cm.display.dragCursor)
+    cm.display.dragCursor = null
+  }
+}
+
+// These must be handled carefully, because naively registering a
+// handler for each editor will cause the editors to never be
+// garbage collected.
+
+function forEachCodeMirror(f) {
+  if (!document.body.getElementsByClassName) { return }
+  var byClass = document.body.getElementsByClassName("CodeMirror")
+  for (var i = 0; i < byClass.length; i++) {
+    var cm = byClass[i].CodeMirror
+    if (cm) { f(cm) }
+  }
+}
+
+var globalsRegistered = false
+function ensureGlobalHandlers() {
+  if (globalsRegistered) { return }
+  registerGlobalHandlers()
+  globalsRegistered = true
+}
+function registerGlobalHandlers() {
+  // When the window resizes, we need to refresh active editors.
+  var resizeTimer
+  on(window, "resize", function () {
+    if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+      resizeTimer = null
+      forEachCodeMirror(onResize)
+    }, 100) }
+  })
+  // When the window loses focus, we want to show the editor as blurred
+  on(window, "blur", function () { return forEachCodeMirror(onBlur); })
+}
+// Called when the window resizes
+function onResize(cm) {
+  var d = cm.display
+  if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)
+    { return }
+  // Might be a text scaling operation, clear size caches.
+  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+  d.scrollbarsClipped = false
+  cm.setSize()
+}
+
+var keyNames = {
+  3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+  19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+  36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+  46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+  106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete",
+  173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+  221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+  63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+}
+
+// Number keys
+for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) }
+// Alphabetic keys
+for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) }
+// Function keys
+for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 }
+
+var keyMap = {}
+
+keyMap.basic = {
+  "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+  "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+  "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+  "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+  "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+  "Esc": "singleSelection"
+}
+// Note that the save and find-related commands aren't defined by
+// default. User code or addons can define them. Unknown commands
+// are simply ignored.
+keyMap.pcDefault = {
+  "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+  "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+  "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+  "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+  "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+  "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+  "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+  fallthrough: "basic"
+}
+// Very basic readline/emacs-style bindings, which are standard on Mac.
+keyMap.emacsy = {
+  "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+  "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+  "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+  "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+  "Ctrl-O": "openLine"
+}
+keyMap.macDefault = {
+  "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+  "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+  "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+  "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+  "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+  "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+  "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+  fallthrough: ["basic", "emacsy"]
+}
+keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault
+
+// KEYMAP DISPATCH
+
+function normalizeKeyName(name) {
+  var parts = name.split(/-(?!$)/)
+  name = parts[parts.length - 1]
+  var alt, ctrl, shift, cmd
+  for (var i = 0; i < parts.length - 1; i++) {
+    var mod = parts[i]
+    if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true }
+    else if (/^a(lt)?$/i.test(mod)) { alt = true }
+    else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true }
+    else if (/^s(hift)?$/i.test(mod)) { shift = true }
+    else { throw new Error("Unrecognized modifier name: " + mod) }
+  }
+  if (alt) { name = "Alt-" + name }
+  if (ctrl) { name = "Ctrl-" + name }
+  if (cmd) { name = "Cmd-" + name }
+  if (shift) { name = "Shift-" + name }
+  return name
+}
+
+// This is a kludge to keep keymaps mostly working as raw objects
+// (backwards compatibility) while at the same time support features
+// like normalization and multi-stroke key bindings. It compiles a
+// new normalized keymap, and then updates the old object to reflect
+// this.
+function normalizeKeyMap(keymap) {
+  var copy = {}
+  for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+    var value = keymap[keyname]
+    if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+    if (value == "...") { delete keymap[keyname]; continue }
+
+    var keys = map(keyname.split(" "), normalizeKeyName)
+    for (var i = 0; i < keys.length; i++) {
+      var val = void 0, name = void 0
+      if (i == keys.length - 1) {
+        name = keys.join(" ")
+        val = value
+      } else {
+        name = keys.slice(0, i + 1).join(" ")
+        val = "..."
+      }
+      var prev = copy[name]
+      if (!prev) { copy[name] = val }
+      else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+    }
+    delete keymap[keyname]
+  } }
+  for (var prop in copy) { keymap[prop] = copy[prop] }
+  return keymap
+}
+
+function lookupKey(key, map$$1, handle, context) {
+  map$$1 = getKeyMap(map$$1)
+  var found = map$$1.call ? map$$1.call(key, context) : map$$1[key]
+  if (found === false) { return "nothing" }
+  if (found === "...") { return "multi" }
+  if (found != null && handle(found)) { return "handled" }
+
+  if (map$$1.fallthrough) {
+    if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]")
+      { return lookupKey(key, map$$1.fallthrough, handle, context) }
+    for (var i = 0; i < map$$1.fallthrough.length; i++) {
+      var result = lookupKey(key, map$$1.fallthrough[i], handle, context)
+      if (result) { return result }
+    }
+  }
+}
+
+// Modifier key presses don't count as 'real' key presses for the
+// purpose of keymap fallthrough.
+function isModifierKey(value) {
+  var name = typeof value == "string" ? value : keyNames[value.keyCode]
+  return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+}
+
+// Look up the name of a key as indicated by an event object.
+function keyName(event, noShift) {
+  if (presto && event.keyCode == 34 && event["char"]) { return false }
+  var base = keyNames[event.keyCode], name = base
+  if (name == null || event.altGraphKey) { return false }
+  if (event.altKey && base != "Alt") { name = "Alt-" + name }
+  if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name }
+  if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name }
+  if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name }
+  return name
+}
+
+function getKeyMap(val) {
+  return typeof val == "string" ? keyMap[val] : val
+}
+
+// Helper for deleting text near the selection(s), used to implement
+// backspace, delete, and similar functionality.
+function deleteNearSelection(cm, compute) {
+  var ranges = cm.doc.sel.ranges, kill = []
+  // Build up a set of ranges to kill first, merging overlapping
+  // ranges.
+  for (var i = 0; i < ranges.length; i++) {
+    var toKill = compute(ranges[i])
+    while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+      var replaced = kill.pop()
+      if (cmp(replaced.from, toKill.from) < 0) {
+        toKill.from = replaced.from
+        break
+      }
+    }
+    kill.push(toKill)
+  }
+  // Next, remove those actual ranges.
+  runInOp(cm, function () {
+    for (var i = kill.length - 1; i >= 0; i--)
+      { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") }
+    ensureCursorVisible(cm)
+  })
+}
+
+// Commands are parameter-less actions that can be performed on an
+// editor, mostly used for keybindings.
+var commands = {
+  selectAll: selectAll,
+  singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+  killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+    if (range.empty()) {
+      var len = getLine(cm.doc, range.head.line).text.length
+      if (range.head.ch == len && range.head.line < cm.lastLine())
+        { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+      else
+        { return {from: range.head, to: Pos(range.head.line, len)} }
+    } else {
+      return {from: range.from(), to: range.to()}
+    }
+  }); },
+  deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+    from: Pos(range.from().line, 0),
+    to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+  }); }); },
+  delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+    from: Pos(range.from().line, 0), to: range.from()
+  }); }); },
+  delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    var leftPos = cm.coordsChar({left: 0, top: top}, "div")
+    return {from: leftPos, to: range.from()}
+  }); },
+  delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+    return {from: range.from(), to: rightPos }
+  }); },
+  undo: function (cm) { return cm.undo(); },
+  redo: function (cm) { return cm.redo(); },
+  undoSelection: function (cm) { return cm.undoSelection(); },
+  redoSelection: function (cm) { return cm.redoSelection(); },
+  goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+  goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+  goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+    {origin: "+move", bias: 1}
+  ); },
+  goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+    {origin: "+move", bias: 1}
+  ); },
+  goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+    {origin: "+move", bias: -1}
+  ); },
+  goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+  }, sel_move); },
+  goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    return cm.coordsChar({left: 0, top: top}, "div")
+  }, sel_move); },
+  goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    var pos = cm.coordsChar({left: 0, top: top}, "div")
+    if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+    return pos
+  }, sel_move); },
+  goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+  goLineDown: function (cm) { return cm.moveV(1, "line"); },
+  goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+  goPageDown: function (cm) { return cm.moveV(1, "page"); },
+  goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+  goCharRight: function (cm) { return cm.moveH(1, "char"); },
+  goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+  goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+  goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+  goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+  goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+  goWordRight: function (cm) { return cm.moveH(1, "word"); },
+  delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+  delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+  delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+  delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+  delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+  delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+  indentAuto: function (cm) { return cm.indentSelection("smart"); },
+  indentMore: function (cm) { return cm.indentSelection("add"); },
+  indentLess: function (cm) { return cm.indentSelection("subtract"); },
+  insertTab: function (cm) { return cm.replaceSelection("\t"); },
+  insertSoftTab: function (cm) {
+    var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize
+    for (var i = 0; i < ranges.length; i++) {
+      var pos = ranges[i].from()
+      var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize)
+      spaces.push(spaceStr(tabSize - col % tabSize))
+    }
+    cm.replaceSelections(spaces)
+  },
+  defaultTab: function (cm) {
+    if (cm.somethingSelected()) { cm.indentSelection("add") }
+    else { cm.execCommand("insertTab") }
+  },
+  // Swap the two chars left and right of each selection's head.
+  // Move cursor behind the two swapped characters afterwards.
+  //
+  // Doesn't consider line feeds a character.
+  // Doesn't scan more than one line above to find a character.
+  // Doesn't do anything on an empty line.
+  // Doesn't do anything with non-empty selections.
+  transposeChars: function (cm) { return runInOp(cm, function () {
+    var ranges = cm.listSelections(), newSel = []
+    for (var i = 0; i < ranges.length; i++) {
+      if (!ranges[i].empty()) { continue }
+      var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text
+      if (line) {
+        if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) }
+        if (cur.ch > 0) {
+          cur = new Pos(cur.line, cur.ch + 1)
+          cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+                          Pos(cur.line, cur.ch - 2), cur, "+transpose")
+        } else if (cur.line > cm.doc.first) {
+          var prev = getLine(cm.doc, cur.line - 1).text
+          if (prev) {
+            cur = new Pos(cur.line, 1)
+            cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+                            prev.charAt(prev.length - 1),
+                            Pos(cur.line - 1, prev.length - 1), cur, "+transpose")
+          }
+        }
+      }
+      newSel.push(new Range(cur, cur))
+    }
+    cm.setSelections(newSel)
+  }); },
+  newlineAndIndent: function (cm) { return runInOp(cm, function () {
+    var sels = cm.listSelections()
+    for (var i = sels.length - 1; i >= 0; i--)
+      { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") }
+    sels = cm.listSelections()
+    for (var i$1 = 0; i$1 < sels.length; i$1++)
+      { cm.indentLine(sels[i$1].from().line, null, true) }
+    ensureCursorVisible(cm)
+  }); },
+  openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+  toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+}
+
+
+function lineStart(cm, lineN) {
+  var line = getLine(cm.doc, lineN)
+  var visual = visualLine(line)
+  if (visual != line) { lineN = lineNo(visual) }
+  var order = getOrder(visual)
+  var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual)
+  return Pos(lineN, ch)
+}
+function lineEnd(cm, lineN) {
+  var merged, line = getLine(cm.doc, lineN)
+  while (merged = collapsedSpanAtEnd(line)) {
+    line = merged.find(1, true).line
+    lineN = null
+  }
+  var order = getOrder(line)
+  var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line)
+  return Pos(lineN == null ? lineNo(line) : lineN, ch)
+}
+function lineStartSmart(cm, pos) {
+  var start = lineStart(cm, pos.line)
+  var line = getLine(cm.doc, start.line)
+  var order = getOrder(line)
+  if (!order || order[0].level == 0) {
+    var firstNonWS = Math.max(0, line.text.search(/\S/))
+    var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch
+    return Pos(start.line, inWS ? 0 : firstNonWS)
+  }
+  return start
+}
+
+// Run a handler that was bound to a key.
+function doHandleBinding(cm, bound, dropShift) {
+  if (typeof bound == "string") {
+    bound = commands[bound]
+    if (!bound) { return false }
+  }
+  // Ensure previous input has been read, so that the handler sees a
+  // consistent view of the document
+  cm.display.input.ensurePolled()
+  var prevShift = cm.display.shift, done = false
+  try {
+    if (cm.isReadOnly()) { cm.state.suppressEdits = true }
+    if (dropShift) { cm.display.shift = false }
+    done = bound(cm) != Pass
+  } finally {
+    cm.display.shift = prevShift
+    cm.state.suppressEdits = false
+  }
+  return done
+}
+
+function lookupKeyForEditor(cm, name, handle) {
+  for (var i = 0; i < cm.state.keyMaps.length; i++) {
+    var result = lookupKey(name, cm.state.keyMaps[i], handle, cm)
+    if (result) { return result }
+  }
+  return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+    || lookupKey(name, cm.options.keyMap, handle, cm)
+}
+
+var stopSeq = new Delayed
+function dispatchKey(cm, name, e, handle) {
+  var seq = cm.state.keySeq
+  if (seq) {
+    if (isModifierKey(name)) { return "handled" }
+    stopSeq.set(50, function () {
+      if (cm.state.keySeq == seq) {
+        cm.state.keySeq = null
+        cm.display.input.reset()
+      }
+    })
+    name = seq + " " + name
+  }
+  var result = lookupKeyForEditor(cm, name, handle)
+
+  if (result == "multi")
+    { cm.state.keySeq = name }
+  if (result == "handled")
+    { signalLater(cm, "keyHandled", cm, name, e) }
+
+  if (result == "handled" || result == "multi") {
+    e_preventDefault(e)
+    restartBlink(cm)
+  }
+
+  if (seq && !result && /\'$/.test(name)) {
+    e_preventDefault(e)
+    return true
+  }
+  return !!result
+}
+
+// Handle a key from the keydown event.
+function handleKeyBinding(cm, e) {
+  var name = keyName(e, true)
+  if (!name) { return false }
+
+  if (e.shiftKey && !cm.state.keySeq) {
+    // First try to resolve full name (including 'Shift-'). Failing
+    // that, see if there is a cursor-motion command (starting with
+    // 'go') bound to the keyname without 'Shift-'.
+    return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+        || dispatchKey(cm, name, e, function (b) {
+             if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+               { return doHandleBinding(cm, b) }
+           })
+  } else {
+    return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+  }
+}
+
+// Handle a key from the keypress event
+function handleCharBinding(cm, e, ch) {
+  return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+}
+
+var lastStoppedKey = null
+function onKeyDown(e) {
+  var cm = this
+  cm.curOp.focus = activeElt()
+  if (signalDOMEvent(cm, e)) { return }
+  // IE does strange things with escape.
+  if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false }
+  var code = e.keyCode
+  cm.display.shift = code == 16 || e.shiftKey
+  var handled = handleKeyBinding(cm, e)
+  if (presto) {
+    lastStoppedKey = handled ? code : null
+    // Opera has no cut event... we try to at least catch the key combo
+    if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+      { cm.replaceSelection("", null, "cut") }
+  }
+
+  // Turn mouse into crosshair when Alt is held on Mac.
+  if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+    { showCrossHair(cm) }
+}
+
+function showCrossHair(cm) {
+  var lineDiv = cm.display.lineDiv
+  addClass(lineDiv, "CodeMirror-crosshair")
+
+  function up(e) {
+    if (e.keyCode == 18 || !e.altKey) {
+      rmClass(lineDiv, "CodeMirror-crosshair")
+      off(document, "keyup", up)
+      off(document, "mouseover", up)
+    }
+  }
+  on(document, "keyup", up)
+  on(document, "mouseover", up)
+}
+
+function onKeyUp(e) {
+  if (e.keyCode == 16) { this.doc.sel.shift = false }
+  signalDOMEvent(this, e)
+}
+
+function onKeyPress(e) {
+  var cm = this
+  if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+  var keyCode = e.keyCode, charCode = e.charCode
+  if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+  if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+  var ch = String.fromCharCode(charCode == null ? keyCode : charCode)
+  // Some browsers fire keypress events for backspace
+  if (ch == "\x08") { return }
+  if (handleCharBinding(cm, e, ch)) { return }
+  cm.display.input.onKeyPress(e)
+}
+
+// A mouse down can be a single click, double click, triple click,
+// start of selection drag, start of text drag, new cursor
+// (ctrl-click), rectangle drag (alt-drag), or xwin
+// middle-click-paste. Or it might be a click on something we should
+// not interfere with, such as a scrollbar or widget.
+function onMouseDown(e) {
+  var cm = this, display = cm.display
+  if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+  display.input.ensurePolled()
+  display.shift = e.shiftKey
+
+  if (eventInWidget(display, e)) {
+    if (!webkit) {
+      // Briefly turn off draggability, to allow widgets to do
+      // normal dragging things.
+      display.scroller.draggable = false
+      setTimeout(function () { return display.scroller.draggable = true; }, 100)
+    }
+    return
+  }
+  if (clickInGutter(cm, e)) { return }
+  var start = posFromMouse(cm, e)
+  window.focus()
+
+  switch (e_button(e)) {
+  case 1:
+    // #3261: make sure, that we're not starting a second selection
+    if (cm.state.selectingText)
+      { cm.state.selectingText(e) }
+    else if (start)
+      { leftButtonDown(cm, e, start) }
+    else if (e_target(e) == display.scroller)
+      { e_preventDefault(e) }
+    break
+  case 2:
+    if (webkit) { cm.state.lastMiddleDown = +new Date }
+    if (start) { extendSelection(cm.doc, start) }
+    setTimeout(function () { return display.input.focus(); }, 20)
+    e_preventDefault(e)
+    break
+  case 3:
+    if (captureRightClick) { onContextMenu(cm, e) }
+    else { delayBlurEvent(cm) }
+    break
+  }
+}
+
+var lastClick;
+var lastDoubleClick
+function leftButtonDown(cm, e, start) {
+  if (ie) { setTimeout(bind(ensureFocus, cm), 0) }
+  else { cm.curOp.focus = activeElt() }
+
+  var now = +new Date, type
+  if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {
+    type = "triple"
+  } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {
+    type = "double"
+    lastDoubleClick = {time: now, pos: start}
+  } else {
+    type = "single"
+    lastClick = {time: now, pos: start}
+  }
+
+  var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained
+  if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+      type == "single" && (contained = sel.contains(start)) > -1 &&
+      (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) &&
+      (cmp(contained.to(), start) > 0 || start.xRel < 0))
+    { leftButtonStartDrag(cm, e, start, modifier) }
+  else
+    { leftButtonSelect(cm, e, start, type, modifier) }
+}
+
+// Start a text drag. When it ends, see if any dragging actually
+// happen, and treat as a click if it didn't.
+function leftButtonStartDrag(cm, e, start, modifier) {
+  var display = cm.display, startTime = +new Date
+  var dragEnd = operation(cm, function (e2) {
+    if (webkit) { display.scroller.draggable = false }
+    cm.state.draggingText = false
+    off(document, "mouseup", dragEnd)
+    off(display.scroller, "drop", dragEnd)
+    if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
+      e_preventDefault(e2)
+      if (!modifier && +new Date - 200 < startTime)
+        { extendSelection(cm.doc, start) }
+      // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+      if (webkit || ie && ie_version == 9)
+        { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) }
+      else
+        { display.input.focus() }
+    }
+  })
+  // Let the drag handler handle this.
+  if (webkit) { display.scroller.draggable = true }
+  cm.state.draggingText = dragEnd
+  dragEnd.copy = mac ? e.altKey : e.ctrlKey
+  // IE's approach to draggable
+  if (display.scroller.dragDrop) { display.scroller.dragDrop() }
+  on(document, "mouseup", dragEnd)
+  on(display.scroller, "drop", dragEnd)
+}
+
+// Normal selection, as opposed to text dragging.
+function leftButtonSelect(cm, e, start, type, addNew) {
+  var display = cm.display, doc = cm.doc
+  e_preventDefault(e)
+
+  var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges
+  if (addNew && !e.shiftKey) {
+    ourIndex = doc.sel.contains(start)
+    if (ourIndex > -1)
+      { ourRange = ranges[ourIndex] }
+    else
+      { ourRange = new Range(start, start) }
+  } else {
+    ourRange = doc.sel.primary()
+    ourIndex = doc.sel.primIndex
+  }
+
+  if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) {
+    type = "rect"
+    if (!addNew) { ourRange = new Range(start, start) }
+    start = posFromMouse(cm, e, true, true)
+    ourIndex = -1
+  } else if (type == "double") {
+    var word = cm.findWordAt(start)
+    if (cm.display.shift || doc.extend)
+      { ourRange = extendRange(doc, ourRange, word.anchor, word.head) }
+    else
+      { ourRange = word }
+  } else if (type == "triple") {
+    var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)))
+    if (cm.display.shift || doc.extend)
+      { ourRange = extendRange(doc, ourRange, line.anchor, line.head) }
+    else
+      { ourRange = line }
+  } else {
+    ourRange = extendRange(doc, ourRange, start)
+  }
+
+  if (!addNew) {
+    ourIndex = 0
+    setSelection(doc, new Selection([ourRange], 0), sel_mouse)
+    startSel = doc.sel
+  } else if (ourIndex == -1) {
+    ourIndex = ranges.length
+    setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
+                 {scroll: false, origin: "*mouse"})
+  } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) {
+    setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+                 {scroll: false, origin: "*mouse"})
+    startSel = doc.sel
+  } else {
+    replaceOneSelection(doc, ourIndex, ourRange, sel_mouse)
+  }
+
+  var lastPos = start
+  function extendTo(pos) {
+    if (cmp(lastPos, pos) == 0) { return }
+    lastPos = pos
+
+    if (type == "rect") {
+      var ranges = [], tabSize = cm.options.tabSize
+      var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize)
+      var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize)
+      var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol)
+      for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+           line <= end; line++) {
+        var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize)
+        if (left == right)
+          { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) }
+        else if (text.length > leftPos)
+          { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) }
+      }
+      if (!ranges.length) { ranges.push(new Range(start, start)) }
+      setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+                   {origin: "*mouse", scroll: false})
+      cm.scrollIntoView(pos)
+    } else {
+      var oldRange = ourRange
+      var anchor = oldRange.anchor, head = pos
+      if (type != "single") {
+        var range$$1
+        if (type == "double")
+          { range$$1 = cm.findWordAt(pos) }
+        else
+          { range$$1 = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))) }
+        if (cmp(range$$1.anchor, anchor) > 0) {
+          head = range$$1.head
+          anchor = minPos(oldRange.from(), range$$1.anchor)
+        } else {
+          head = range$$1.anchor
+          anchor = maxPos(oldRange.to(), range$$1.head)
+        }
+      }
+      var ranges$1 = startSel.ranges.slice(0)
+      ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head)
+      setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse)
+    }
+  }
+
+  var editorSize = display.wrapper.getBoundingClientRect()
+  // Used to ensure timeout re-tries don't fire when another extend
+  // happened in the meantime (clearTimeout isn't reliable -- at
+  // least on Chrome, the timeouts still happen even when cleared,
+  // if the clear happens after their scheduled firing time).
+  var counter = 0
+
+  function extend(e) {
+    var curCount = ++counter
+    var cur = posFromMouse(cm, e, true, type == "rect")
+    if (!cur) { return }
+    if (cmp(cur, lastPos) != 0) {
+      cm.curOp.focus = activeElt()
+      extendTo(cur)
+      var visible = visibleLines(display, doc)
+      if (cur.line >= visible.to || cur.line < visible.from)
+        { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) }
+    } else {
+      var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0
+      if (outside) { setTimeout(operation(cm, function () {
+        if (counter != curCount) { return }
+        display.scroller.scrollTop += outside
+        extend(e)
+      }), 50) }
+    }
+  }
+
+  function done(e) {
+    cm.state.selectingText = false
+    counter = Infinity
+    e_preventDefault(e)
+    display.input.focus()
+    off(document, "mousemove", move)
+    off(document, "mouseup", up)
+    doc.history.lastSelOrigin = null
+  }
+
+  var move = operation(cm, function (e) {
+    if (!e_button(e)) { done(e) }
+    else { extend(e) }
+  })
+  var up = operation(cm, done)
+  cm.state.selectingText = up
+  on(document, "mousemove", move)
+  on(document, "mouseup", up)
+}
+
+
+// Determines whether an event happened in the gutter, and fires the
+// handlers for the corresponding event.
+function gutterEvent(cm, e, type, prevent) {
+  var mX, mY
+  try { mX = e.clientX; mY = e.clientY }
+  catch(e) { return false }
+  if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+  if (prevent) { e_preventDefault(e) }
+
+  var display = cm.display
+  var lineBox = display.lineDiv.getBoundingClientRect()
+
+  if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+  mY -= lineBox.top - display.viewOffset
+
+  for (var i = 0; i < cm.options.gutters.length; ++i) {
+    var g = display.gutters.childNodes[i]
+    if (g && g.getBoundingClientRect().right >= mX) {
+      var line = lineAtHeight(cm.doc, mY)
+      var gutter = cm.options.gutters[i]
+      signal(cm, type, cm, line, gutter, e)
+      return e_defaultPrevented(e)
+    }
+  }
+}
+
+function clickInGutter(cm, e) {
+  return gutterEvent(cm, e, "gutterClick", true)
+}
+
+// CONTEXT MENU HANDLING
+
+// To make the context menu work, we need to briefly unhide the
+// textarea (making it as unobtrusive as possible) to let the
+// right-click take effect on it.
+function onContextMenu(cm, e) {
+  if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+  if (signalDOMEvent(cm, e, "contextmenu")) { return }
+  cm.display.input.onContextMenu(e)
+}
+
+function contextMenuInGutter(cm, e) {
+  if (!hasHandler(cm, "gutterContextMenu")) { return false }
+  return gutterEvent(cm, e, "gutterContextMenu", false)
+}
+
+function themeChanged(cm) {
+  cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+    cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-")
+  clearCaches(cm)
+}
+
+var Init = {toString: function(){return "CodeMirror.Init"}}
+
+var defaults = {}
+var optionHandlers = {}
+
+function defineOptions(CodeMirror) {
+  var optionHandlers = CodeMirror.optionHandlers
+
+  function option(name, deflt, handle, notOnInit) {
+    CodeMirror.defaults[name] = deflt
+    if (handle) { optionHandlers[name] =
+      notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle }
+  }
+
+  CodeMirror.defineOption = option
+
+  // Passed to option handlers when there is no old value.
+  CodeMirror.Init = Init
+
+  // These two are, on init, called from the constructor because they
+  // have to be initialized before the editor can start at all.
+  option("value", "", function (cm, val) { return cm.setValue(val); }, true)
+  option("mode", null, function (cm, val) {
+    cm.doc.modeOption = val
+    loadMode(cm)
+  }, true)
+
+  option("indentUnit", 2, loadMode, true)
+  option("indentWithTabs", false)
+  option("smartIndent", true)
+  option("tabSize", 4, function (cm) {
+    resetModeState(cm)
+    clearCaches(cm)
+    regChange(cm)
+  }, true)
+  option("lineSeparator", null, function (cm, val) {
+    cm.doc.lineSep = val
+    if (!val) { return }
+    var newBreaks = [], lineNo = cm.doc.first
+    cm.doc.iter(function (line) {
+      for (var pos = 0;;) {
+        var found = line.text.indexOf(val, pos)
+        if (found == -1) { break }
+        pos = found + val.length
+        newBreaks.push(Pos(lineNo, found))
+      }
+      lineNo++
+    })
+    for (var i = newBreaks.length - 1; i >= 0; i--)
+      { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) }
+  })
+  option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) {
+    cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g")
+    if (old != Init) { cm.refresh() }
+  })
+  option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true)
+  option("electricChars", true)
+  option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+    throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+  }, true)
+  option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true)
+  option("rtlMoveVisually", !windows)
+  option("wholeLineUpdateBefore", true)
+
+  option("theme", "default", function (cm) {
+    themeChanged(cm)
+    guttersChanged(cm)
+  }, true)
+  option("keyMap", "default", function (cm, val, old) {
+    var next = getKeyMap(val)
+    var prev = old != Init && getKeyMap(old)
+    if (prev && prev.detach) { prev.detach(cm, next) }
+    if (next.attach) { next.attach(cm, prev || null) }
+  })
+  option("extraKeys", null)
+
+  option("lineWrapping", false, wrappingChanged, true)
+  option("gutters", [], function (cm) {
+    setGuttersForLineNumbers(cm.options)
+    guttersChanged(cm)
+  }, true)
+  option("fixedGutter", true, function (cm, val) {
+    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"
+    cm.refresh()
+  }, true)
+  option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true)
+  option("scrollbarStyle", "native", function (cm) {
+    initScrollbars(cm)
+    updateScrollbars(cm)
+    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop)
+    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)
+  }, true)
+  option("lineNumbers", false, function (cm) {
+    setGuttersForLineNumbers(cm.options)
+    guttersChanged(cm)
+  }, true)
+  option("firstLineNumber", 1, guttersChanged, true)
+  option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true)
+  option("showCursorWhenSelecting", false, updateSelection, true)
+
+  option("resetSelectionOnContextMenu", true)
+  option("lineWiseCopyCut", true)
+
+  option("readOnly", false, function (cm, val) {
+    if (val == "nocursor") {
+      onBlur(cm)
+      cm.display.input.blur()
+      cm.display.disabled = true
+    } else {
+      cm.display.disabled = false
+    }
+    cm.display.input.readOnlyChanged(val)
+  })
+  option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true)
+  option("dragDrop", true, dragDropChanged)
+  option("allowDropFileTypes", null)
+
+  option("cursorBlinkRate", 530)
+  option("cursorScrollMargin", 0)
+  option("cursorHeight", 1, updateSelection, true)
+  option("singleCursorHeightPerLine", true, updateSelection, true)
+  option("workTime", 100)
+  option("workDelay", 100)
+  option("flattenSpans", true, resetModeState, true)
+  option("addModeClass", false, resetModeState, true)
+  option("pollInterval", 100)
+  option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; })
+  option("historyEventDelay", 1250)
+  option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true)
+  option("maxHighlightLength", 10000, resetModeState, true)
+  option("moveInputWithCursor", true, function (cm, val) {
+    if (!val) { cm.display.input.resetPosition() }
+  })
+
+  option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; })
+  option("autofocus", null)
+}
+
+function guttersChanged(cm) {
+  updateGutters(cm)
+  regChange(cm)
+  setTimeout(function () { return alignHorizontally(cm); }, 20)
+}
+
+function dragDropChanged(cm, value, old) {
+  var wasOn = old && old != Init
+  if (!value != !wasOn) {
+    var funcs = cm.display.dragFunctions
+    var toggle = value ? on : off
+    toggle(cm.display.scroller, "dragstart", funcs.start)
+    toggle(cm.display.scroller, "dragenter", funcs.enter)
+    toggle(cm.display.scroller, "dragover", funcs.over)
+    toggle(cm.display.scroller, "dragleave", funcs.leave)
+    toggle(cm.display.scroller, "drop", funcs.drop)
+  }
+}
+
+function wrappingChanged(cm) {
+  if (cm.options.lineWrapping) {
+    addClass(cm.display.wrapper, "CodeMirror-wrap")
+    cm.display.sizer.style.minWidth = ""
+    cm.display.sizerWidth = null
+  } else {
+    rmClass(cm.display.wrapper, "CodeMirror-wrap")
+    findMaxLine(cm)
+  }
+  estimateLineHeights(cm)
+  regChange(cm)
+  clearCaches(cm)
+  setTimeout(function () { return updateScrollbars(cm); }, 100)
+}
+
+// A CodeMirror instance represents an editor. This is the object
+// that user code is usually dealing with.
+
+function CodeMirror$1(place, options) {
+  var this$1 = this;
+
+  if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) }
+
+  this.options = options = options ? copyObj(options) : {}
+  // Determine effective options based on given values and defaults.
+  copyObj(defaults, options, false)
+  setGuttersForLineNumbers(options)
+
+  var doc = options.value
+  if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator) }
+  this.doc = doc
+
+  var input = new CodeMirror$1.inputStyles[options.inputStyle](this)
+  var display = this.display = new Display(place, doc, input)
+  display.wrapper.CodeMirror = this
+  updateGutters(this)
+  themeChanged(this)
+  if (options.lineWrapping)
+    { this.display.wrapper.className += " CodeMirror-wrap" }
+  if (options.autofocus && !mobile) { display.input.focus() }
+  initScrollbars(this)
+
+  this.state = {
+    keyMaps: [],  // stores maps added by addKeyMap
+    overlays: [], // highlighting overlays, as added by addOverlay
+    modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
+    overwrite: false,
+    delayingBlurEvent: false,
+    focused: false,
+    suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+    pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
+    selectingText: false,
+    draggingText: false,
+    highlight: new Delayed(), // stores highlight worker timeout
+    keySeq: null,  // Unfinished key sequence
+    specialChars: null
+  }
+
+  // Override magic textarea content restore that IE sometimes does
+  // on our hidden textarea on reload
+  if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) }
+
+  registerEventHandlers(this)
+  ensureGlobalHandlers()
+
+  startOperation(this)
+  this.curOp.forceUpdate = true
+  attachDoc(this, doc)
+
+  if ((options.autofocus && !mobile) || this.hasFocus())
+    { setTimeout(bind(onFocus, this), 20) }
+  else
+    { onBlur(this) }
+
+  for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+    { optionHandlers[opt](this$1, options[opt], Init) } }
+  maybeUpdateLineNumberWidth(this)
+  if (options.finishInit) { options.finishInit(this) }
+  for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) }
+  endOperation(this)
+  // Suppress optimizelegibility in Webkit, since it breaks text
+  // measuring on line wrapping boundaries.
+  if (webkit && options.lineWrapping &&
+      getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+    { display.lineDiv.style.textRendering = "auto" }
+}
+
+// The default configuration options.
+CodeMirror$1.defaults = defaults
+// Functions to run when options are changed.
+CodeMirror$1.optionHandlers = optionHandlers
+
+// Attach the necessary event handlers when initializing the editor
+function registerEventHandlers(cm) {
+  var d = cm.display
+  on(d.scroller, "mousedown", operation(cm, onMouseDown))
+  // Older IE's will not fire a second mousedown for a double click
+  if (ie && ie_version < 11)
+    { on(d.scroller, "dblclick", operation(cm, function (e) {
+      if (signalDOMEvent(cm, e)) { return }
+      var pos = posFromMouse(cm, e)
+      if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+      e_preventDefault(e)
+      var word = cm.findWordAt(pos)
+      extendSelection(cm.doc, word.anchor, word.head)
+    })) }
+  else
+    { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) }
+  // Some browsers fire contextmenu *after* opening the menu, at
+  // which point we can't mess with it anymore. Context menu is
+  // handled in onMouseDown for these browsers.
+  if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) }
+
+  // Used to suppress mouse event handling when a touch happens
+  var touchFinished, prevTouch = {end: 0}
+  function finishTouch() {
+    if (d.activeTouch) {
+      touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000)
+      prevTouch = d.activeTouch
+      prevTouch.end = +new Date
+    }
+  }
+  function isMouseLikeTouchEvent(e) {
+    if (e.touches.length != 1) { return false }
+    var touch = e.touches[0]
+    return touch.radiusX <= 1 && touch.radiusY <= 1
+  }
+  function farAway(touch, other) {
+    if (other.left == null) { return true }
+    var dx = other.left - touch.left, dy = other.top - touch.top
+    return dx * dx + dy * dy > 20 * 20
+  }
+  on(d.scroller, "touchstart", function (e) {
+    if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) {
+      d.input.ensurePolled()
+      clearTimeout(touchFinished)
+      var now = +new Date
+      d.activeTouch = {start: now, moved: false,
+                       prev: now - prevTouch.end <= 300 ? prevTouch : null}
+      if (e.touches.length == 1) {
+        d.activeTouch.left = e.touches[0].pageX
+        d.activeTouch.top = e.touches[0].pageY
+      }
+    }
+  })
+  on(d.scroller, "touchmove", function () {
+    if (d.activeTouch) { d.activeTouch.moved = true }
+  })
+  on(d.scroller, "touchend", function (e) {
+    var touch = d.activeTouch
+    if (touch && !eventInWidget(d, e) && touch.left != null &&
+        !touch.moved && new Date - touch.start < 300) {
+      var pos = cm.coordsChar(d.activeTouch, "page"), range
+      if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+        { range = new Range(pos, pos) }
+      else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+        { range = cm.findWordAt(pos) }
+      else // Triple tap
+        { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+      cm.setSelection(range.anchor, range.head)
+      cm.focus()
+      e_preventDefault(e)
+    }
+    finishTouch()
+  })
+  on(d.scroller, "touchcancel", finishTouch)
+
+  // Sync scrolling between fake scrollbars and real scrollable
+  // area, ensure viewport is updated when scrolling.
+  on(d.scroller, "scroll", function () {
+    if (d.scroller.clientHeight) {
+      setScrollTop(cm, d.scroller.scrollTop)
+      setScrollLeft(cm, d.scroller.scrollLeft, true)
+      signal(cm, "scroll", cm)
+    }
+  })
+
+  // Listen to wheel events in order to try and update the viewport on time.
+  on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); })
+  on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); })
+
+  // Prevent wrapper from ever scrolling
+  on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; })
+
+  d.dragFunctions = {
+    enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }},
+    over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }},
+    start: function (e) { return onDragStart(cm, e); },
+    drop: operation(cm, onDrop),
+    leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }}
+  }
+
+  var inp = d.input.getField()
+  on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); })
+  on(inp, "keydown", operation(cm, onKeyDown))
+  on(inp, "keypress", operation(cm, onKeyPress))
+  on(inp, "focus", function (e) { return onFocus(cm, e); })
+  on(inp, "blur", function (e) { return onBlur(cm, e); })
+}
+
+var initHooks = []
+CodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); }
+
+// Indent the given line. The how parameter can be "smart",
+// "add"/null, "subtract", or "prev". When aggressive is false
+// (typically set to true for forced single-line indents), empty
+// lines are not indented, and places where the mode returns Pass
+// are left alone.
+function indentLine(cm, n, how, aggressive) {
+  var doc = cm.doc, state
+  if (how == null) { how = "add" }
+  if (how == "smart") {
+    // Fall back to "prev" when the mode doesn't have an indentation
+    // method.
+    if (!doc.mode.indent) { how = "prev" }
+    else { state = getStateBefore(cm, n) }
+  }
+
+  var tabSize = cm.options.tabSize
+  var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize)
+  if (line.stateAfter) { line.stateAfter = null }
+  var curSpaceString = line.text.match(/^\s*/)[0], indentation
+  if (!aggressive && !/\S/.test(line.text)) {
+    indentation = 0
+    how = "not"
+  } else if (how == "smart") {
+    indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text)
+    if (indentation == Pass || indentation > 150) {
+      if (!aggressive) { return }
+      how = "prev"
+    }
+  }
+  if (how == "prev") {
+    if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) }
+    else { indentation = 0 }
+  } else if (how == "add") {
+    indentation = curSpace + cm.options.indentUnit
+  } else if (how == "subtract") {
+    indentation = curSpace - cm.options.indentUnit
+  } else if (typeof how == "number") {
+    indentation = curSpace + how
+  }
+  indentation = Math.max(0, indentation)
+
+  var indentString = "", pos = 0
+  if (cm.options.indentWithTabs)
+    { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} }
+  if (pos < indentation) { indentString += spaceStr(indentation - pos) }
+
+  if (indentString != curSpaceString) {
+    replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input")
+    line.stateAfter = null
+    return true
+  } else {
+    // Ensure that, if the cursor was in the whitespace at the start
+    // of the line, it is moved to the end of that space.
+    for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+      var range = doc.sel.ranges[i$1]
+      if (range.head.line == n && range.head.ch < curSpaceString.length) {
+        var pos$1 = Pos(n, curSpaceString.length)
+        replaceOneSelection(doc, i$1, new Range(pos$1, pos$1))
+        break
+      }
+    }
+  }
+}
+
+// This will be set to a {lineWise: bool, text: [string]} object, so
+// that, when pasting, we know what kind of selections the copied
+// text was made out of.
+var lastCopied = null
+
+function setLastCopied(newLastCopied) {
+  lastCopied = newLastCopied
+}
+
+function applyTextInput(cm, inserted, deleted, sel, origin) {
+  var doc = cm.doc
+  cm.display.shift = false
+  if (!sel) { sel = doc.sel }
+
+  var paste = cm.state.pasteIncoming || origin == "paste"
+  var textLines = splitLinesAuto(inserted), multiPaste = null
+  // When pasing N lines into N selections, insert one line per selection
+  if (paste && sel.ranges.length > 1) {
+    if (lastCopied && lastCopied.text.join("\n") == inserted) {
+      if (sel.ranges.length % lastCopied.text.length == 0) {
+        multiPaste = []
+        for (var i = 0; i < lastCopied.text.length; i++)
+          { multiPaste.push(doc.splitLines(lastCopied.text[i])) }
+      }
+    } else if (textLines.length == sel.ranges.length) {
+      multiPaste = map(textLines, function (l) { return [l]; })
+    }
+  }
+
+  var updateInput
+  // Normal behavior is to insert the new text into every selection
+  for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+    var range$$1 = sel.ranges[i$1]
+    var from = range$$1.from(), to = range$$1.to()
+    if (range$$1.empty()) {
+      if (deleted && deleted > 0) // Handle deletion
+        { from = Pos(from.line, from.ch - deleted) }
+      else if (cm.state.overwrite && !paste) // Handle overwrite
+        { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) }
+      else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+        { from = to = Pos(from.line, 0) }
+    }
+    updateInput = cm.curOp.updateInput
+    var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+                       origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}
+    makeChange(cm.doc, changeEvent)
+    signalLater(cm, "inputRead", cm, changeEvent)
+  }
+  if (inserted && !paste)
+    { triggerElectric(cm, inserted) }
+
+  ensureCursorVisible(cm)
+  cm.curOp.updateInput = updateInput
+  cm.curOp.typing = true
+  cm.state.pasteIncoming = cm.state.cutIncoming = false
+}
+
+function handlePaste(e, cm) {
+  var pasted = e.clipboardData && e.clipboardData.getData("Text")
+  if (pasted) {
+    e.preventDefault()
+    if (!cm.isReadOnly() && !cm.options.disableInput)
+      { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) }
+    return true
+  }
+}
+
+function triggerElectric(cm, inserted) {
+  // When an 'electric' character is inserted, immediately trigger a reindent
+  if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+  var sel = cm.doc.sel
+
+  for (var i = sel.ranges.length - 1; i >= 0; i--) {
+    var range$$1 = sel.ranges[i]
+    if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }
+    var mode = cm.getModeAt(range$$1.head)
+    var indented = false
+    if (mode.electricChars) {
+      for (var j = 0; j < mode.electricChars.length; j++)
+        { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+          indented = indentLine(cm, range$$1.head.line, "smart")
+          break
+        } }
+    } else if (mode.electricInput) {
+      if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))
+        { indented = indentLine(cm, range$$1.head.line, "smart") }
+    }
+    if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line) }
+  }
+}
+
+function copyableRanges(cm) {
+  var text = [], ranges = []
+  for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+    var line = cm.doc.sel.ranges[i].head.line
+    var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}
+    ranges.push(lineRange)
+    text.push(cm.getRange(lineRange.anchor, lineRange.head))
+  }
+  return {text: text, ranges: ranges}
+}
+
+function disableBrowserMagic(field, spellcheck) {
+  field.setAttribute("autocorrect", "off")
+  field.setAttribute("autocapitalize", "off")
+  field.setAttribute("spellcheck", !!spellcheck)
+}
+
+function hiddenTextarea() {
+  var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none")
+  var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;")
+  // The textarea is kept positioned near the cursor to prevent the
+  // fact that it'll be scrolled into view on input from scrolling
+  // our fake cursor out of view. On webkit, when wrap=off, paste is
+  // very slow. So make the area wide instead.
+  if (webkit) { te.style.width = "1000px" }
+  else { te.setAttribute("wrap", "off") }
+  // If border: 0; -- iOS fails to open keyboard (issue #1287)
+  if (ios) { te.style.border = "1px solid black" }
+  disableBrowserMagic(te)
+  return div
+}
+
+// The publicly visible API. Note that methodOp(f) means
+// 'wrap f in an operation, performed on its `this` parameter'.
+
+// This is not the complete set of editor methods. Most of the
+// methods defined on the Doc type are also injected into
+// CodeMirror.prototype, for backwards compatibility and
+// convenience.
+
+var addEditorMethods = function(CodeMirror) {
+  var optionHandlers = CodeMirror.optionHandlers
+
+  var helpers = CodeMirror.helpers = {}
+
+  CodeMirror.prototype = {
+    constructor: CodeMirror,
+    focus: function(){window.focus(); this.display.input.focus()},
+
+    setOption: function(option, value) {
+      var options = this.options, old = options[option]
+      if (options[option] == value && option != "mode") { return }
+      options[option] = value
+      if (optionHandlers.hasOwnProperty(option))
+        { operation(this, optionHandlers[option])(this, value, old) }
+    },
+
+    getOption: function(option) {return this.options[option]},
+    getDoc: function() {return this.doc},
+
+    addKeyMap: function(map$$1, bottom) {
+      this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1))
+    },
+    removeKeyMap: function(map$$1) {
+      var maps = this.state.keyMaps
+      for (var i = 0; i < maps.length; ++i)
+        { if (maps[i] == map$$1 || maps[i].name == map$$1) {
+          maps.splice(i, 1)
+          return true
+        } }
+    },
+
+    addOverlay: methodOp(function(spec, options) {
+      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec)
+      if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+      insertSorted(this.state.overlays,
+                   {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+                    priority: (options && options.priority) || 0},
+                   function (overlay) { return overlay.priority; })
+      this.state.modeGen++
+      regChange(this)
+    }),
+    removeOverlay: methodOp(function(spec) {
+      var this$1 = this;
+
+      var overlays = this.state.overlays
+      for (var i = 0; i < overlays.length; ++i) {
+        var cur = overlays[i].modeSpec
+        if (cur == spec || typeof spec == "string" && cur.name == spec) {
+          overlays.splice(i, 1)
+          this$1.state.modeGen++
+          regChange(this$1)
+          return
+        }
+      }
+    }),
+
+    indentLine: methodOp(function(n, dir, aggressive) {
+      if (typeof dir != "string" && typeof dir != "number") {
+        if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" }
+        else { dir = dir ? "add" : "subtract" }
+      }
+      if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) }
+    }),
+    indentSelection: methodOp(function(how) {
+      var this$1 = this;
+
+      var ranges = this.doc.sel.ranges, end = -1
+      for (var i = 0; i < ranges.length; i++) {
+        var range$$1 = ranges[i]
+        if (!range$$1.empty()) {
+          var from = range$$1.from(), to = range$$1.to()
+          var start = Math.max(end, from.line)
+          end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1
+          for (var j = start; j < end; ++j)
+            { indentLine(this$1, j, how) }
+          var newRanges = this$1.doc.sel.ranges
+          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+            { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) }
+        } else if (range$$1.head.line > end) {
+          indentLine(this$1, range$$1.head.line, how, true)
+          end = range$$1.head.line
+          if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) }
+        }
+      }
+    }),
+
+    // Fetch the parser token for a given character. Useful for hacks
+    // that want to inspect the mode state (say, for completion).
+    getTokenAt: function(pos, precise) {
+      return takeToken(this, pos, precise)
+    },
+
+    getLineTokens: function(line, precise) {
+      return takeToken(this, Pos(line), precise, true)
+    },
+
+    getTokenTypeAt: function(pos) {
+      pos = clipPos(this.doc, pos)
+      var styles = getLineStyles(this, getLine(this.doc, pos.line))
+      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch
+      var type
+      if (ch == 0) { type = styles[2] }
+      else { for (;;) {
+        var mid = (before + after) >> 1
+        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid }
+        else if (styles[mid * 2 + 1] < ch) { before = mid + 1 }
+        else { type = styles[mid * 2 + 2]; break }
+      } }
+      var cut = type ? type.indexOf("overlay ") : -1
+      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+    },
+
+    getModeAt: function(pos) {
+      var mode = this.doc.mode
+      if (!mode.innerMode) { return mode }
+      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+    },
+
+    getHelper: function(pos, type) {
+      return this.getHelpers(pos, type)[0]
+    },
+
+    getHelpers: function(pos, type) {
+      var this$1 = this;
+
+      var found = []
+      if (!helpers.hasOwnProperty(type)) { return found }
+      var help = helpers[type], mode = this.getModeAt(pos)
+      if (typeof mode[type] == "string") {
+        if (help[mode[type]]) { found.push(help[mode[type]]) }
+      } else if (mode[type]) {
+        for (var i = 0; i < mode[type].length; i++) {
+          var val = help[mode[type][i]]
+          if (val) { found.push(val) }
+        }
+      } else if (mode.helperType && help[mode.helperType]) {
+        found.push(help[mode.helperType])
+      } else if (help[mode.name]) {
+        found.push(help[mode.name])
+      }
+      for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+        var cur = help._global[i$1]
+        if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+          { found.push(cur.val) }
+      }
+      return found
+    },
+
+    getStateAfter: function(line, precise) {
+      var doc = this.doc
+      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line)
+      return getStateBefore(this, line + 1, precise)
+    },
+
+    cursorCoords: function(start, mode) {
+      var pos, range$$1 = this.doc.sel.primary()
+      if (start == null) { pos = range$$1.head }
+      else if (typeof start == "object") { pos = clipPos(this.doc, start) }
+      else { pos = start ? range$$1.from() : range$$1.to() }
+      return cursorCoords(this, pos, mode || "page")
+    },
+
+    charCoords: function(pos, mode) {
+      return charCoords(this, clipPos(this.doc, pos), mode || "page")
+    },
+
+    coordsChar: function(coords, mode) {
+      coords = fromCoordSystem(this, coords, mode || "page")
+      return coordsChar(this, coords.left, coords.top)
+    },
+
+    lineAtHeight: function(height, mode) {
+      height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top
+      return lineAtHeight(this.doc, height + this.display.viewOffset)
+    },
+    heightAtLine: function(line, mode, includeWidgets) {
+      var end = false, lineObj
+      if (typeof line == "number") {
+        var last = this.doc.first + this.doc.size - 1
+        if (line < this.doc.first) { line = this.doc.first }
+        else if (line > last) { line = last; end = true }
+        lineObj = getLine(this.doc, line)
+      } else {
+        lineObj = line
+      }
+      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets).top +
+        (end ? this.doc.height - heightAtLine(lineObj) : 0)
+    },
+
+    defaultTextHeight: function() { return textHeight(this.display) },
+    defaultCharWidth: function() { return charWidth(this.display) },
+
+    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+    addWidget: function(pos, node, scroll, vert, horiz) {
+      var display = this.display
+      pos = cursorCoords(this, clipPos(this.doc, pos))
+      var top = pos.bottom, left = pos.left
+      node.style.position = "absolute"
+      node.setAttribute("cm-ignore-events", "true")
+      this.display.input.setUneditable(node)
+      display.sizer.appendChild(node)
+      if (vert == "over") {
+        top = pos.top
+      } else if (vert == "above" || vert == "near") {
+        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth)
+        // Default to positioning above (if specified and possible); otherwise default to positioning below
+        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+          { top = pos.top - node.offsetHeight }
+        else if (pos.bottom + node.offsetHeight <= vspace)
+          { top = pos.bottom }
+        if (left + node.offsetWidth > hspace)
+          { left = hspace - node.offsetWidth }
+      }
+      node.style.top = top + "px"
+      node.style.left = node.style.right = ""
+      if (horiz == "right") {
+        left = display.sizer.clientWidth - node.offsetWidth
+        node.style.right = "0px"
+      } else {
+        if (horiz == "left") { left = 0 }
+        else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 }
+        node.style.left = left + "px"
+      }
+      if (scroll)
+        { scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight) }
+    },
+
+    triggerOnKeyDown: methodOp(onKeyDown),
+    triggerOnKeyPress: methodOp(onKeyPress),
+    triggerOnKeyUp: onKeyUp,
+
+    execCommand: function(cmd) {
+      if (commands.hasOwnProperty(cmd))
+        { return commands[cmd].call(null, this) }
+    },
+
+    triggerElectric: methodOp(function(text) { triggerElectric(this, text) }),
+
+    findPosH: function(from, amount, unit, visually) {
+      var this$1 = this;
+
+      var dir = 1
+      if (amount < 0) { dir = -1; amount = -amount }
+      var cur = clipPos(this.doc, from)
+      for (var i = 0; i < amount; ++i) {
+        cur = findPosH(this$1.doc, cur, dir, unit, visually)
+        if (cur.hitSide) { break }
+      }
+      return cur
+    },
+
+    moveH: methodOp(function(dir, unit) {
+      var this$1 = this;
+
+      this.extendSelectionsBy(function (range$$1) {
+        if (this$1.display.shift || this$1.doc.extend || range$$1.empty())
+          { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }
+        else
+          { return dir < 0 ? range$$1.from() : range$$1.to() }
+      }, sel_move)
+    }),
+
+    deleteH: methodOp(function(dir, unit) {
+      var sel = this.doc.sel, doc = this.doc
+      if (sel.somethingSelected())
+        { doc.replaceSelection("", null, "+delete") }
+      else
+        { deleteNearSelection(this, function (range$$1) {
+          var other = findPosH(doc, range$$1.head, dir, unit, false)
+          return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}
+        }) }
+    }),
+
+    findPosV: function(from, amount, unit, goalColumn) {
+      var this$1 = this;
+
+      var dir = 1, x = goalColumn
+      if (amount < 0) { dir = -1; amount = -amount }
+      var cur = clipPos(this.doc, from)
+      for (var i = 0; i < amount; ++i) {
+        var coords = cursorCoords(this$1, cur, "div")
+        if (x == null) { x = coords.left }
+        else { coords.left = x }
+        cur = findPosV(this$1, coords, dir, unit)
+        if (cur.hitSide) { break }
+      }
+      return cur
+    },
+
+    moveV: methodOp(function(dir, unit) {
+      var this$1 = this;
+
+      var doc = this.doc, goals = []
+      var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected()
+      doc.extendSelectionsBy(function (range$$1) {
+        if (collapse)
+          { return dir < 0 ? range$$1.from() : range$$1.to() }
+        var headPos = cursorCoords(this$1, range$$1.head, "div")
+        if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn }
+        goals.push(headPos.left)
+        var pos = findPosV(this$1, headPos, dir, unit)
+        if (unit == "page" && range$$1 == doc.sel.primary())
+          { addToScrollPos(this$1, null, charCoords(this$1, pos, "div").top - headPos.top) }
+        return pos
+      }, sel_move)
+      if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+        { doc.sel.ranges[i].goalColumn = goals[i] } }
+    }),
+
+    // Find the word at the given position (as returned by coordsChar).
+    findWordAt: function(pos) {
+      var doc = this.doc, line = getLine(doc, pos.line).text
+      var start = pos.ch, end = pos.ch
+      if (line) {
+        var helper = this.getHelper(pos, "wordChars")
+        if ((pos.xRel < 0 || end == line.length) && start) { --start; } else { ++end }
+        var startChar = line.charAt(start)
+        var check = isWordChar(startChar, helper)
+          ? function (ch) { return isWordChar(ch, helper); }
+          : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+          : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }
+        while (start > 0 && check(line.charAt(start - 1))) { --start }
+        while (end < line.length && check(line.charAt(end))) { ++end }
+      }
+      return new Range(Pos(pos.line, start), Pos(pos.line, end))
+    },
+
+    toggleOverwrite: function(value) {
+      if (value != null && value == this.state.overwrite) { return }
+      if (this.state.overwrite = !this.state.overwrite)
+        { addClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+      else
+        { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+
+      signal(this, "overwriteToggle", this, this.state.overwrite)
+    },
+    hasFocus: function() { return this.display.input.getField() == activeElt() },
+    isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+    scrollTo: methodOp(function(x, y) {
+      if (x != null || y != null) { resolveScrollToPos(this) }
+      if (x != null) { this.curOp.scrollLeft = x }
+      if (y != null) { this.curOp.scrollTop = y }
+    }),
+    getScrollInfo: function() {
+      var scroller = this.display.scroller
+      return {left: scroller.scrollLeft, top: scroller.scrollTop,
+              height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+              width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+              clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+    },
+
+    scrollIntoView: methodOp(function(range$$1, margin) {
+      if (range$$1 == null) {
+        range$$1 = {from: this.doc.sel.primary().head, to: null}
+        if (margin == null) { margin = this.options.cursorScrollMargin }
+      } else if (typeof range$$1 == "number") {
+        range$$1 = {from: Pos(range$$1, 0), to: null}
+      } else if (range$$1.from == null) {
+        range$$1 = {from: range$$1, to: null}
+      }
+      if (!range$$1.to) { range$$1.to = range$$1.from }
+      range$$1.margin = margin || 0
+
+      if (range$$1.from.line != null) {
+        resolveScrollToPos(this)
+        this.curOp.scrollToPos = range$$1
+      } else {
+        var sPos = calculateScrollPos(this, Math.min(range$$1.from.left, range$$1.to.left),
+                                      Math.min(range$$1.from.top, range$$1.to.top) - range$$1.margin,
+                                      Math.max(range$$1.from.right, range$$1.to.right),
+                                      Math.max(range$$1.from.bottom, range$$1.to.bottom) + range$$1.margin)
+        this.scrollTo(sPos.scrollLeft, sPos.scrollTop)
+      }
+    }),
+
+    setSize: methodOp(function(width, height) {
+      var this$1 = this;
+
+      var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }
+      if (width != null) { this.display.wrapper.style.width = interpret(width) }
+      if (height != null) { this.display.wrapper.style.height = interpret(height) }
+      if (this.options.lineWrapping) { clearLineMeasurementCache(this) }
+      var lineNo$$1 = this.display.viewFrom
+      this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {
+        if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+          { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } }
+        ++lineNo$$1
+      })
+      this.curOp.forceUpdate = true
+      signal(this, "refresh", this)
+    }),
+
+    operation: function(f){return runInOp(this, f)},
+
+    refresh: methodOp(function() {
+      var oldHeight = this.display.cachedTextHeight
+      regChange(this)
+      this.curOp.forceUpdate = true
+      clearCaches(this)
+      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop)
+      updateGutterSpace(this)
+      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+        { estimateLineHeights(this) }
+      signal(this, "refresh", this)
+    }),
+
+    swapDoc: methodOp(function(doc) {
+      var old = this.doc
+      old.cm = null
+      attachDoc(this, doc)
+      clearCaches(this)
+      this.display.input.reset()
+      this.scrollTo(doc.scrollLeft, doc.scrollTop)
+      this.curOp.forceScroll = true
+      signalLater(this, "swapDoc", this, old)
+      return old
+    }),
+
+    getInputField: function(){return this.display.input.getField()},
+    getWrapperElement: function(){return this.display.wrapper},
+    getScrollerElement: function(){return this.display.scroller},
+    getGutterElement: function(){return this.display.gutters}
+  }
+  eventMixin(CodeMirror)
+
+  CodeMirror.registerHelper = function(type, name, value) {
+    if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} }
+    helpers[type][name] = value
+  }
+  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+    CodeMirror.registerHelper(type, name, value)
+    helpers[type]._global.push({pred: predicate, val: value})
+  }
+}
+
+// Used for horizontal relative motion. Dir is -1 or 1 (left or
+// right), unit can be "char", "column" (like char, but doesn't
+// cross line boundaries), "word" (across next word), or "group" (to
+// the start of next group of word or non-word-non-whitespace
+// chars). The visually param controls whether, in right-to-left
+// text, direction 1 means to move towards the next index in the
+// string, or towards the character to the right of the current
+// position. The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosH(doc, pos, dir, unit, visually) {
+  var line = pos.line, ch = pos.ch, origDir = dir
+  var lineObj = getLine(doc, line)
+  function findNextLine() {
+    var l = line + dir
+    if (l < doc.first || l >= doc.first + doc.size) { return false }
+    line = l
+    return lineObj = getLine(doc, l)
+  }
+  function moveOnce(boundToLine) {
+    var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true)
+    if (next == null) {
+      if (!boundToLine && findNextLine()) {
+        if (visually) { ch = (dir < 0 ? lineRight : lineLeft)(lineObj) }
+        else { ch = dir < 0 ? lineObj.text.length : 0 }
+      } else { return false }
+    } else { ch = next }
+    return true
+  }
+
+  if (unit == "char") {
+    moveOnce()
+  } else if (unit == "column") {
+    moveOnce(true)
+  } else if (unit == "word" || unit == "group") {
+    var sawType = null, group = unit == "group"
+    var helper = doc.cm && doc.cm.getHelper(pos, "wordChars")
+    for (var first = true;; first = false) {
+      if (dir < 0 && !moveOnce(!first)) { break }
+      var cur = lineObj.text.charAt(ch) || "\n"
+      var type = isWordChar(cur, helper) ? "w"
+        : group && cur == "\n" ? "n"
+        : !group || /\s/.test(cur) ? null
+        : "p"
+      if (group && !first && !type) { type = "s" }
+      if (sawType && sawType != type) {
+        if (dir < 0) {dir = 1; moveOnce()}
+        break
+      }
+
+      if (type) { sawType = type }
+      if (dir > 0 && !moveOnce(!first)) { break }
+    }
+  }
+  var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true)
+  if (!cmp(pos, result)) { result.hitSide = true }
+  return result
+}
+
+// For relative vertical movement. Dir may be -1 or 1. Unit can be
+// "page" or "line". The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosV(cm, pos, dir, unit) {
+  var doc = cm.doc, x = pos.left, y
+  if (unit == "page") {
+    var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight)
+    var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3)
+    y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount
+
+  } else if (unit == "line") {
+    y = dir > 0 ? pos.bottom + 3 : pos.top - 3
+  }
+  var target
+  for (;;) {
+    target = coordsChar(cm, x, y)
+    if (!target.outside) { break }
+    if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+    y += dir * 5
+  }
+  return target
+}
+
+// CONTENTEDITABLE INPUT STYLE
+
+function ContentEditableInput(cm) {
+  this.cm = cm
+  this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null
+  this.polling = new Delayed()
+  this.composing = null
+  this.gracePeriod = false
+  this.readDOMTimeout = null
+}
+
+ContentEditableInput.prototype = copyObj({
+  init: function(display) {
+    var this$1 = this;
+
+    var input = this, cm = input.cm
+    var div = input.div = display.lineDiv
+    disableBrowserMagic(div, cm.options.spellcheck)
+
+    on(div, "paste", function (e) {
+      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+      // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+      if (ie_version <= 11) { setTimeout(operation(cm, function () {
+        if (!input.pollContent()) { regChange(cm) }
+      }), 20) }
+    })
+
+    on(div, "compositionstart", function (e) {
+      this$1.composing = {data: e.data}
+    })
+    on(div, "compositionupdate", function (e) {
+      if (!this$1.composing) { this$1.composing = {data: e.data} }
+    })
+    on(div, "compositionend", function (e) {
+      if (this$1.composing) {
+        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() }
+        this$1.composing = null
+      }
+    })
+
+    on(div, "touchstart", function () { return input.forceCompositionEnd(); })
+
+    on(div, "input", function () {
+      if (!this$1.composing) { this$1.readFromDOMSoon() }
+    })
+
+    function onCopyCut(e) {
+      if (signalDOMEvent(cm, e)) { return }
+      if (cm.somethingSelected()) {
+        setLastCopied({lineWise: false, text: cm.getSelections()})
+        if (e.type == "cut") { cm.replaceSelection("", null, "cut") }
+      } else if (!cm.options.lineWiseCopyCut) {
+        return
+      } else {
+        var ranges = copyableRanges(cm)
+        setLastCopied({lineWise: true, text: ranges.text})
+        if (e.type == "cut") {
+          cm.operation(function () {
+            cm.setSelections(ranges.ranges, 0, sel_dontScroll)
+            cm.replaceSelection("", null, "cut")
+          })
+        }
+      }
+      if (e.clipboardData) {
+        e.clipboardData.clearData()
+        var content = lastCopied.text.join("\n")
+        // iOS exposes the clipboard API, but seems to discard content inserted into it
+        e.clipboardData.setData("Text", content)
+        if (e.clipboardData.getData("Text") == content) {
+          e.preventDefault()
+          return
+        }
+      }
+      // Old-fashioned briefly-focus-a-textarea hack
+      var kludge = hiddenTextarea(), te = kludge.firstChild
+      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild)
+      te.value = lastCopied.text.join("\n")
+      var hadFocus = document.activeElement
+      selectInput(te)
+      setTimeout(function () {
+        cm.display.lineSpace.removeChild(kludge)
+        hadFocus.focus()
+        if (hadFocus == div) { input.showPrimarySelection() }
+      }, 50)
+    }
+    on(div, "copy", onCopyCut)
+    on(div, "cut", onCopyCut)
+  },
+
+  prepareSelection: function() {
+    var result = prepareSelection(this.cm, false)
+    result.focus = this.cm.state.focused
+    return result
+  },
+
+  showSelection: function(info, takeFocus) {
+    if (!info || !this.cm.display.view.length) { return }
+    if (info.focus || takeFocus) { this.showPrimarySelection() }
+    this.showMultipleSelections(info)
+  },
+
+  showPrimarySelection: function() {
+    var sel = window.getSelection(), prim = this.cm.doc.sel.primary()
+    var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset)
+    var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset)
+    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+        cmp(minPos(curAnchor, curFocus), prim.from()) == 0 &&
+        cmp(maxPos(curAnchor, curFocus), prim.to()) == 0)
+      { return }
+
+    var start = posToDOM(this.cm, prim.from())
+    var end = posToDOM(this.cm, prim.to())
+    if (!start && !end) { return }
+
+    var view = this.cm.display.view
+    var old = sel.rangeCount && sel.getRangeAt(0)
+    if (!start) {
+      start = {node: view[0].measure.map[2], offset: 0}
+    } else if (!end) { // FIXME dangerously hacky
+      var measure = view[view.length - 1].measure
+      var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map
+      end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]}
+    }
+
+    var rng
+    try { rng = range(start.node, start.offset, end.offset, end.node) }
+    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+    if (rng) {
+      if (!gecko && this.cm.state.focused) {
+        sel.collapse(start.node, start.offset)
+        if (!rng.collapsed) {
+          sel.removeAllRanges()
+          sel.addRange(rng)
+        }
+      } else {
+        sel.removeAllRanges()
+        sel.addRange(rng)
+      }
+      if (old && sel.anchorNode == null) { sel.addRange(old) }
+      else if (gecko) { this.startGracePeriod() }
+    }
+    this.rememberSelection()
+  },
+
+  startGracePeriod: function() {
+    var this$1 = this;
+
+    clearTimeout(this.gracePeriod)
+    this.gracePeriod = setTimeout(function () {
+      this$1.gracePeriod = false
+      if (this$1.selectionChanged())
+        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) }
+    }, 20)
+  },
+
+  showMultipleSelections: function(info) {
+    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors)
+    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection)
+  },
+
+  rememberSelection: function() {
+    var sel = window.getSelection()
+    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset
+    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset
+  },
+
+  selectionInEditor: function() {
+    var sel = window.getSelection()
+    if (!sel.rangeCount) { return false }
+    var node = sel.getRangeAt(0).commonAncestorContainer
+    return contains(this.div, node)
+  },
+
+  focus: function() {
+    if (this.cm.options.readOnly != "nocursor") {
+      if (!this.selectionInEditor())
+        { this.showSelection(this.prepareSelection(), true) }
+      this.div.focus()
+    }
+  },
+  blur: function() { this.div.blur() },
+  getField: function() { return this.div },
+
+  supportsTouch: function() { return true },
+
+  receivedFocus: function() {
+    var input = this
+    if (this.selectionInEditor())
+      { this.pollSelection() }
+    else
+      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) }
+
+    function poll() {
+      if (input.cm.state.focused) {
+        input.pollSelection()
+        input.polling.set(input.cm.options.pollInterval, poll)
+      }
+    }
+    this.polling.set(this.cm.options.pollInterval, poll)
+  },
+
+  selectionChanged: function() {
+    var sel = window.getSelection()
+    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+  },
+
+  pollSelection: function() {
+    if (!this.composing && this.readDOMTimeout == null && !this.gracePeriod && this.selectionChanged()) {
+      var sel = window.getSelection(), cm = this.cm
+      this.rememberSelection()
+      var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)
+      var head = domToPos(cm, sel.focusNode, sel.focusOffset)
+      if (anchor && head) { runInOp(cm, function () {
+        setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll)
+        if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true }
+      }) }
+    }
+  },
+
+  pollContent: function() {
+    if (this.readDOMTimeout != null) {
+      clearTimeout(this.readDOMTimeout)
+      this.readDOMTimeout = null
+    }
+
+    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary()
+    var from = sel.from(), to = sel.to()
+    if (from.ch == 0 && from.line > cm.firstLine())
+      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) }
+    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+      { to = Pos(to.line + 1, 0) }
+    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+    var fromIndex, fromLine, fromNode
+    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+      fromLine = lineNo(display.view[0].line)
+      fromNode = display.view[0].node
+    } else {
+      fromLine = lineNo(display.view[fromIndex].line)
+      fromNode = display.view[fromIndex - 1].node.nextSibling
+    }
+    var toIndex = findViewIndex(cm, to.line)
+    var toLine, toNode
+    if (toIndex == display.view.length - 1) {
+      toLine = display.viewTo - 1
+      toNode = display.lineDiv.lastChild
+    } else {
+      toLine = lineNo(display.view[toIndex + 1].line) - 1
+      toNode = display.view[toIndex + 1].node.previousSibling
+    }
+
+    if (!fromNode) { return false }
+    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine))
+    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length))
+    while (newText.length > 1 && oldText.length > 1) {
+      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- }
+      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ }
+      else { break }
+    }
+
+    var cutFront = 0, cutEnd = 0
+    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length)
+    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+      { ++cutFront }
+    var newBot = lst(newText), oldBot = lst(oldText)
+    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+                             oldBot.length - (oldText.length == 1 ? cutFront : 0))
+    while (cutEnd < maxCutEnd &&
+           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+      { ++cutEnd }
+
+    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "")
+    newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "")
+
+    var chFrom = Pos(fromLine, cutFront)
+    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0)
+    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+      replaceRange(cm.doc, newText, chFrom, chTo, "+input")
+      return true
+    }
+  },
+
+  ensurePolled: function() {
+    this.forceCompositionEnd()
+  },
+  reset: function() {
+    this.forceCompositionEnd()
+  },
+  forceCompositionEnd: function() {
+    if (!this.composing) { return }
+    this.composing = null
+    if (!this.pollContent()) { regChange(this.cm) }
+    this.div.blur()
+    this.div.focus()
+  },
+  readFromDOMSoon: function() {
+    var this$1 = this;
+
+    if (this.readDOMTimeout != null) { return }
+    this.readDOMTimeout = setTimeout(function () {
+      this$1.readDOMTimeout = null
+      if (this$1.composing) { return }
+      if (this$1.cm.isReadOnly() || !this$1.pollContent())
+        { runInOp(this$1.cm, function () { return regChange(this$1.cm); }) }
+    }, 80)
+  },
+
+  setUneditable: function(node) {
+    node.contentEditable = "false"
+  },
+
+  onKeyPress: function(e) {
+    e.preventDefault()
+    if (!this.cm.isReadOnly())
+      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) }
+  },
+
+  readOnlyChanged: function(val) {
+    this.div.contentEditable = String(val != "nocursor")
+  },
+
+  onContextMenu: nothing,
+  resetPosition: nothing,
+
+  needsContentAttribute: true
+  }, ContentEditableInput.prototype)
+
+function posToDOM(cm, pos) {
+  var view = findViewForLine(cm, pos.line)
+  if (!view || view.hidden) { return null }
+  var line = getLine(cm.doc, pos.line)
+  var info = mapFromLineView(view, line, pos.line)
+
+  var order = getOrder(line), side = "left"
+  if (order) {
+    var partPos = getBidiPartAt(order, pos.ch)
+    side = partPos % 2 ? "right" : "left"
+  }
+  var result = nodeAndOffsetInLineMap(info.map, pos.ch, side)
+  result.offset = result.collapse == "right" ? result.end : result.start
+  return result
+}
+
+function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+function domTextBetween(cm, from, to, fromLine, toLine) {
+  var text = "", closing = false, lineSep = cm.doc.lineSeparator()
+  function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+  function walk(node) {
+    if (node.nodeType == 1) {
+      var cmText = node.getAttribute("cm-text")
+      if (cmText != null) {
+        if (cmText == "") { text += node.textContent.replace(/\u200b/g, "") }
+        else { text += cmText }
+        return
+      }
+      var markerID = node.getAttribute("cm-marker"), range$$1
+      if (markerID) {
+        var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID))
+        if (found.length && (range$$1 = found[0].find()))
+          { text += getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep) }
+        return
+      }
+      if (node.getAttribute("contenteditable") == "false") { return }
+      for (var i = 0; i < node.childNodes.length; i++)
+        { walk(node.childNodes[i]) }
+      if (/^(pre|div|p)$/i.test(node.nodeName))
+        { closing = true }
+    } else if (node.nodeType == 3) {
+      var val = node.nodeValue
+      if (!val) { return }
+      if (closing) {
+        text += lineSep
+        closing = false
+      }
+      text += val
+    }
+  }
+  for (;;) {
+    walk(from)
+    if (from == to) { break }
+    from = from.nextSibling
+  }
+  return text
+}
+
+function domToPos(cm, node, offset) {
+  var lineNode
+  if (node == cm.display.lineDiv) {
+    lineNode = cm.display.lineDiv.childNodes[offset]
+    if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+    node = null; offset = 0
+  } else {
+    for (lineNode = node;; lineNode = lineNode.parentNode) {
+      if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+      if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+    }
+  }
+  for (var i = 0; i < cm.display.view.length; i++) {
+    var lineView = cm.display.view[i]
+    if (lineView.node == lineNode)
+      { return locateNodeInLineView(lineView, node, offset) }
+  }
+}
+
+function locateNodeInLineView(lineView, node, offset) {
+  var wrapper = lineView.text.firstChild, bad = false
+  if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+  if (node == wrapper) {
+    bad = true
+    node = wrapper.childNodes[offset]
+    offset = 0
+    if (!node) {
+      var line = lineView.rest ? lst(lineView.rest) : lineView.line
+      return badPos(Pos(lineNo(line), line.text.length), bad)
+    }
+  }
+
+  var textNode = node.nodeType == 3 ? node : null, topNode = node
+  if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+    textNode = node.firstChild
+    if (offset) { offset = textNode.nodeValue.length }
+  }
+  while (topNode.parentNode != wrapper) { topNode = topNode.parentNode }
+  var measure = lineView.measure, maps = measure.maps
+
+  function find(textNode, topNode, offset) {
+    for (var i = -1; i < (maps ? maps.length : 0); i++) {
+      var map$$1 = i < 0 ? measure.map : maps[i]
+      for (var j = 0; j < map$$1.length; j += 3) {
+        var curNode = map$$1[j + 2]
+        if (curNode == textNode || curNode == topNode) {
+          var line = lineNo(i < 0 ? lineView.line : lineView.rest[i])
+          var ch = map$$1[j] + offset
+          if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)] }
+          return Pos(line, ch)
+        }
+      }
+    }
+  }
+  var found = find(textNode, topNode, offset)
+  if (found) { return badPos(found, bad) }
+
+  // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+  for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+    found = find(after, after.firstChild, 0)
+    if (found)
+      { return badPos(Pos(found.line, found.ch - dist), bad) }
+    else
+      { dist += after.textContent.length }
+  }
+  for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+    found = find(before, before.firstChild, -1)
+    if (found)
+      { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+    else
+      { dist$1 += before.textContent.length }
+  }
+}
+
+// TEXTAREA INPUT STYLE
+
+function TextareaInput(cm) {
+  this.cm = cm
+  // See input.poll and input.reset
+  this.prevInput = ""
+
+  // Flag that indicates whether we expect input to appear real soon
+  // now (after some event like 'keypress' or 'input') and are
+  // polling intensively.
+  this.pollingFast = false
+  // Self-resetting timeout for the poller
+  this.polling = new Delayed()
+  // Tracks when input.reset has punted to just putting a short
+  // string into the textarea instead of the full selection.
+  this.inaccurateSelection = false
+  // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+  this.hasSelection = false
+  this.composing = null
+}
+
+TextareaInput.prototype = copyObj({
+  init: function(display) {
+    var this$1 = this;
+
+    var input = this, cm = this.cm
+
+    // Wraps and hides input textarea
+    var div = this.wrapper = hiddenTextarea()
+    // The semihidden textarea that is focused when the editor is
+    // focused, and receives input.
+    var te = this.textarea = div.firstChild
+    display.wrapper.insertBefore(div, display.wrapper.firstChild)
+
+    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+    if (ios) { te.style.width = "0px" }
+
+    on(te, "input", function () {
+      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null }
+      input.poll()
+    })
+
+    on(te, "paste", function (e) {
+      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+      cm.state.pasteIncoming = true
+      input.fastPoll()
+    })
+
+    function prepareCopyCut(e) {
+      if (signalDOMEvent(cm, e)) { return }
+      if (cm.somethingSelected()) {
+        setLastCopied({lineWise: false, text: cm.getSelections()})
+        if (input.inaccurateSelection) {
+          input.prevInput = ""
+          input.inaccurateSelection = false
+          te.value = lastCopied.text.join("\n")
+          selectInput(te)
+        }
+      } else if (!cm.options.lineWiseCopyCut) {
+        return
+      } else {
+        var ranges = copyableRanges(cm)
+        setLastCopied({lineWise: true, text: ranges.text})
+        if (e.type == "cut") {
+          cm.setSelections(ranges.ranges, null, sel_dontScroll)
+        } else {
+          input.prevInput = ""
+          te.value = ranges.text.join("\n")
+          selectInput(te)
+        }
+      }
+      if (e.type == "cut") { cm.state.cutIncoming = true }
+    }
+    on(te, "cut", prepareCopyCut)
+    on(te, "copy", prepareCopyCut)
+
+    on(display.scroller, "paste", function (e) {
+      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+      cm.state.pasteIncoming = true
+      input.focus()
+    })
+
+    // Prevent normal selection in the editor (we handle our own)
+    on(display.lineSpace, "selectstart", function (e) {
+      if (!eventInWidget(display, e)) { e_preventDefault(e) }
+    })
+
+    on(te, "compositionstart", function () {
+      var start = cm.getCursor("from")
+      if (input.composing) { input.composing.range.clear() }
+      input.composing = {
+        start: start,
+        range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+      }
+    })
+    on(te, "compositionend", function () {
+      if (input.composing) {
+        input.poll()
+        input.composing.range.clear()
+        input.composing = null
+      }
+    })
+  },
+
+  prepareSelection: function() {
+    // Redraw the selection and/or cursor
+    var cm = this.cm, display = cm.display, doc = cm.doc
+    var result = prepareSelection(cm)
+
+    // Move the hidden textarea near the cursor to prevent scrolling artifacts
+    if (cm.options.moveInputWithCursor) {
+      var headPos = cursorCoords(cm, doc.sel.primary().head, "div")
+      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect()
+      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+                                          headPos.top + lineOff.top - wrapOff.top))
+      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+                                           headPos.left + lineOff.left - wrapOff.left))
+    }
+
+    return result
+  },
+
+  showSelection: function(drawn) {
+    var cm = this.cm, display = cm.display
+    removeChildrenAndAdd(display.cursorDiv, drawn.cursors)
+    removeChildrenAndAdd(display.selectionDiv, drawn.selection)
+    if (drawn.teTop != null) {
+      this.wrapper.style.top = drawn.teTop + "px"
+      this.wrapper.style.left = drawn.teLeft + "px"
+    }
+  },
+
+  // Reset the input to correspond to the selection (or to be empty,
+  // when not typing and nothing is selected)
+  reset: function(typing) {
+    if (this.contextMenuPending) { return }
+    var minimal, selected, cm = this.cm, doc = cm.doc
+    if (cm.somethingSelected()) {
+      this.prevInput = ""
+      var range$$1 = doc.sel.primary()
+      minimal = hasCopyEvent &&
+        (range$$1.to().line - range$$1.from().line > 100 || (selected = cm.getSelection()).length > 1000)
+      var content = minimal ? "-" : selected || cm.getSelection()
+      this.textarea.value = content
+      if (cm.state.focused) { selectInput(this.textarea) }
+      if (ie && ie_version >= 9) { this.hasSelection = content }
+    } else if (!typing) {
+      this.prevInput = this.textarea.value = ""
+      if (ie && ie_version >= 9) { this.hasSelection = null }
+    }
+    this.inaccurateSelection = minimal
+  },
+
+  getField: function() { return this.textarea },
+
+  supportsTouch: function() { return false },
+
+  focus: function() {
+    if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+      try { this.textarea.focus() }
+      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+    }
+  },
+
+  blur: function() { this.textarea.blur() },
+
+  resetPosition: function() {
+    this.wrapper.style.top = this.wrapper.style.left = 0
+  },
+
+  receivedFocus: function() { this.slowPoll() },
+
+  // Poll for input changes, using the normal rate of polling. This
+  // runs as long as the editor is focused.
+  slowPoll: function() {
+    var this$1 = this;
+
+    if (this.pollingFast) { return }
+    this.polling.set(this.cm.options.pollInterval, function () {
+      this$1.poll()
+      if (this$1.cm.state.focused) { this$1.slowPoll() }
+    })
+  },
+
+  // When an event has just come in that is likely to add or change
+  // something in the input textarea, we poll faster, to ensure that
+  // the change appears on the screen quickly.
+  fastPoll: function() {
+    var missed = false, input = this
+    input.pollingFast = true
+    function p() {
+      var changed = input.poll()
+      if (!changed && !missed) {missed = true; input.polling.set(60, p)}
+      else {input.pollingFast = false; input.slowPoll()}
+    }
+    input.polling.set(20, p)
+  },
+
+  // Read input from the textarea, and update the document to match.
+  // When something is selected, it is present in the textarea, and
+  // selected (unless it is huge, in which case a placeholder is
+  // used). When nothing is selected, the cursor sits after previously
+  // seen text (can be empty), which is stored in prevInput (we must
+  // not reset the textarea when typing, because that breaks IME).
+  poll: function() {
+    var this$1 = this;
+
+    var cm = this.cm, input = this.textarea, prevInput = this.prevInput
+    // Since this is called a *lot*, try to bail out as cheaply as
+    // possible when it is clear that nothing happened. hasSelection
+    // will be the case when there is a lot of text in the textarea,
+    // in which case reading its value would be expensive.
+    if (this.contextMenuPending || !cm.state.focused ||
+        (hasSelection(input) && !prevInput && !this.composing) ||
+        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+      { return false }
+
+    var text = input.value
+    // If nothing changed, bail.
+    if (text == prevInput && !cm.somethingSelected()) { return false }
+    // Work around nonsensical selection resetting in IE9/10, and
+    // inexplicable appearance of private area unicode characters on
+    // some key combos in Mac (#2689).
+    if (ie && ie_version >= 9 && this.hasSelection === text ||
+        mac && /[\uf700-\uf7ff]/.test(text)) {
+      cm.display.input.reset()
+      return false
+    }
+
+    if (cm.doc.sel == cm.display.selForContextMenu) {
+      var first = text.charCodeAt(0)
+      if (first == 0x200b && !prevInput) { prevInput = "\u200b" }
+      if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+    }
+    // Find the part of the input that is actually new
+    var same = 0, l = Math.min(prevInput.length, text.length)
+    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same }
+
+    runInOp(cm, function () {
+      applyTextInput(cm, text.slice(same), prevInput.length - same,
+                     null, this$1.composing ? "*compose" : null)
+
+      // Don't leave long text in the textarea, since it makes further polling slow
+      if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" }
+      else { this$1.prevInput = text }
+
+      if (this$1.composing) {
+        this$1.composing.range.clear()
+        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+                                           {className: "CodeMirror-composing"})
+      }
+    })
+    return true
+  },
+
+  ensurePolled: function() {
+    if (this.pollingFast && this.poll()) { this.pollingFast = false }
+  },
+
+  onKeyPress: function() {
+    if (ie && ie_version >= 9) { this.hasSelection = null }
+    this.fastPoll()
+  },
+
+  onContextMenu: function(e) {
+    var input = this, cm = input.cm, display = cm.display, te = input.textarea
+    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop
+    if (!pos || presto) { return } // Opera is difficult.
+
+    // Reset the current text selection only if the click is done outside of the selection
+    // and 'resetSelectionOnContextMenu' option is true.
+    var reset = cm.options.resetSelectionOnContextMenu
+    if (reset && cm.doc.sel.contains(pos) == -1)
+      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) }
+
+    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText
+    input.wrapper.style.cssText = "position: absolute"
+    var wrapperBox = input.wrapper.getBoundingClientRect()
+    te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"
+    var oldScrollY
+    if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712)
+    display.input.focus()
+    if (webkit) { window.scrollTo(null, oldScrollY) }
+    display.input.reset()
+    // Adds "Select all" to context menu in FF
+    if (!cm.somethingSelected()) { te.value = input.prevInput = " " }
+    input.contextMenuPending = true
+    display.selForContextMenu = cm.doc.sel
+    clearTimeout(display.detectingSelectAll)
+
+    // Select-all will be greyed out if there's nothing to select, so
+    // this adds a zero-width space so that we can later check whether
+    // it got selected.
+    function prepareSelectAllHack() {
+      if (te.selectionStart != null) {
+        var selected = cm.somethingSelected()
+        var extval = "\u200b" + (selected ? te.value : "")
+        te.value = "\u21da" // Used to catch context-menu undo
+        te.value = extval
+        input.prevInput = selected ? "" : "\u200b"
+        te.selectionStart = 1; te.selectionEnd = extval.length
+        // Re-set this, in case some other handler touched the
+        // selection in the meantime.
+        display.selForContextMenu = cm.doc.sel
+      }
+    }
+    function rehide() {
+      input.contextMenuPending = false
+      input.wrapper.style.cssText = oldWrapperCSS
+      te.style.cssText = oldCSS
+      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) }
+
+      // Try to detect the user choosing select-all
+      if (te.selectionStart != null) {
+        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() }
+        var i = 0, poll = function () {
+          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+              te.selectionEnd > 0 && input.prevInput == "\u200b")
+            { operation(cm, selectAll)(cm) }
+          else if (i++ < 10) { display.detectingSelectAll = setTimeout(poll, 500) }
+          else { display.input.reset() }
+        }
+        display.detectingSelectAll = setTimeout(poll, 200)
+      }
+    }
+
+    if (ie && ie_version >= 9) { prepareSelectAllHack() }
+    if (captureRightClick) {
+      e_stop(e)
+      var mouseup = function () {
+        off(window, "mouseup", mouseup)
+        setTimeout(rehide, 20)
+      }
+      on(window, "mouseup", mouseup)
+    } else {
+      setTimeout(rehide, 50)
+    }
+  },
+
+  readOnlyChanged: function(val) {
+    if (!val) { this.reset() }
+  },
+
+  setUneditable: nothing,
+
+  needsContentAttribute: false
+}, TextareaInput.prototype)
+
+function fromTextArea(textarea, options) {
+  options = options ? copyObj(options) : {}
+  options.value = textarea.value
+  if (!options.tabindex && textarea.tabIndex)
+    { options.tabindex = textarea.tabIndex }
+  if (!options.placeholder && textarea.placeholder)
+    { options.placeholder = textarea.placeholder }
+  // Set autofocus to true if this textarea is focused, or if it has
+  // autofocus and no other element is focused.
+  if (options.autofocus == null) {
+    var hasFocus = activeElt()
+    options.autofocus = hasFocus == textarea ||
+      textarea.getAttribute("autofocus") != null && hasFocus == document.body
+  }
+
+  function save() {textarea.value = cm.getValue()}
+
+  var realSubmit
+  if (textarea.form) {
+    on(textarea.form, "submit", save)
+    // Deplorable hack to make the submit method do the right thing.
+    if (!options.leaveSubmitMethodAlone) {
+      var form = textarea.form
+      realSubmit = form.submit
+      try {
+        var wrappedSubmit = form.submit = function () {
+          save()
+          form.submit = realSubmit
+          form.submit()
+          form.submit = wrappedSubmit
+        }
+      } catch(e) {}
+    }
+  }
+
+  options.finishInit = function (cm) {
+    cm.save = save
+    cm.getTextArea = function () { return textarea; }
+    cm.toTextArea = function () {
+      cm.toTextArea = isNaN // Prevent this from being ran twice
+      save()
+      textarea.parentNode.removeChild(cm.getWrapperElement())
+      textarea.style.display = ""
+      if (textarea.form) {
+        off(textarea.form, "submit", save)
+        if (typeof textarea.form.submit == "function")
+          { textarea.form.submit = realSubmit }
+      }
+    }
+  }
+
+  textarea.style.display = "none"
+  var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+    options)
+  return cm
+}
+
+function addLegacyProps(CodeMirror) {
+  CodeMirror.off = off
+  CodeMirror.on = on
+  CodeMirror.wheelEventPixels = wheelEventPixels
+  CodeMirror.Doc = Doc
+  CodeMirror.splitLines = splitLinesAuto
+  CodeMirror.countColumn = countColumn
+  CodeMirror.findColumn = findColumn
+  CodeMirror.isWordChar = isWordCharBasic
+  CodeMirror.Pass = Pass
+  CodeMirror.signal = signal
+  CodeMirror.Line = Line
+  CodeMirror.changeEnd = changeEnd
+  CodeMirror.scrollbarModel = scrollbarModel
+  CodeMirror.Pos = Pos
+  CodeMirror.cmpPos = cmp
+  CodeMirror.modes = modes
+  CodeMirror.mimeModes = mimeModes
+  CodeMirror.resolveMode = resolveMode
+  CodeMirror.getMode = getMode
+  CodeMirror.modeExtensions = modeExtensions
+  CodeMirror.extendMode = extendMode
+  CodeMirror.copyState = copyState
+  CodeMirror.startState = startState
+  CodeMirror.innerMode = innerMode
+  CodeMirror.commands = commands
+  CodeMirror.keyMap = keyMap
+  CodeMirror.keyName = keyName
+  CodeMirror.isModifierKey = isModifierKey
+  CodeMirror.lookupKey = lookupKey
+  CodeMirror.normalizeKeyMap = normalizeKeyMap
+  CodeMirror.StringStream = StringStream
+  CodeMirror.SharedTextMarker = SharedTextMarker
+  CodeMirror.TextMarker = TextMarker
+  CodeMirror.LineWidget = LineWidget
+  CodeMirror.e_preventDefault = e_preventDefault
+  CodeMirror.e_stopPropagation = e_stopPropagation
+  CodeMirror.e_stop = e_stop
+  CodeMirror.addClass = addClass
+  CodeMirror.contains = contains
+  CodeMirror.rmClass = rmClass
+  CodeMirror.keyNames = keyNames
+}
+
+// EDITOR CONSTRUCTOR
+
+defineOptions(CodeMirror$1)
+
+addEditorMethods(CodeMirror$1)
+
+// Set up methods on CodeMirror's prototype to redirect to the editor's document.
+var dontDelegate = "iter insert remove copy getEditor constructor".split(" ")
+for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+  { CodeMirror$1.prototype[prop] = (function(method) {
+    return function() {return method.apply(this.doc, arguments)}
+  })(Doc.prototype[prop]) } }
+
+eventMixin(Doc)
+
+// INPUT HANDLING
+
+CodeMirror$1.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}
+
+// MODE DEFINITION AND QUERYING
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+CodeMirror$1.defineMode = function(name/*, mode, …*/) {
+  if (!CodeMirror$1.defaults.mode && name != "null") { CodeMirror$1.defaults.mode = name }
+  defineMode.apply(this, arguments)
+}
+
+CodeMirror$1.defineMIME = defineMIME
+
+// Minimal default mode.
+CodeMirror$1.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); })
+CodeMirror$1.defineMIME("text/plain", "null")
+
+// EXTENSIONS
+
+CodeMirror$1.defineExtension = function (name, func) {
+  CodeMirror$1.prototype[name] = func
+}
+CodeMirror$1.defineDocExtension = function (name, func) {
+  Doc.prototype[name] = func
+}
+
+CodeMirror$1.fromTextArea = fromTextArea
+
+addLegacyProps(CodeMirror$1)
+
+CodeMirror$1.version = "5.21.0"
+
+return CodeMirror$1;
+
+})));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/mode/sieve/index.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,93 @@
+<!doctype html>
+
+<title>CodeMirror: Sieve (RFC5228) mode</title>
+<meta charset="utf-8"/>
+<link rel=stylesheet href="../../doc/docs.css">
+
+<link rel="stylesheet" href="../../lib/codemirror.css">
+<script src="../../lib/codemirror.js"></script>
+<script src="sieve.js"></script>
+<style>.CodeMirror {background: #f8f8f8;}</style>
+<div id=nav>
+  <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
+
+  <ul>
+    <li><a href="../../index.html">Home</a>
+    <li><a href="../../doc/manual.html">Manual</a>
+    <li><a href="https://github.com/codemirror/codemirror">Code</a>
+  </ul>
+  <ul>
+    <li><a href="../index.html">Language modes</a>
+    <li><a class=active href="#">Sieve (RFC5228)</a>
+  </ul>
+</div>
+
+<article>
+<h2>Sieve (RFC5228) mode</h2>
+<form><textarea id="code" name="code">
+#
+# Example Sieve Filter
+# Declare any optional features or extension used by the script
+#
+
+require ["fileinto", "reject"];
+
+#
+# Reject any large messages (note that the four leading dots get
+# "stuffed" to three)
+#
+if size :over 1M
+{
+  reject text:
+Please do not send me large attachments.
+Put your file on a server and send me the URL.
+Thank you.
+.... Fred
+.
+;
+  stop;
+}
+
+#
+# Handle messages from known mailing lists
+# Move messages from IETF filter discussion list to filter folder
+#
+if header :is "Sender" "owner-ietf-mta-filters@imc.org"
+{
+  fileinto "filter";  # move to "filter" folder
+}
+#
+# Keep all messages to or from people in my company
+#
+elsif address :domain :is ["From", "To"] "example.com"
+{
+  keep;               # keep in "In" folder
+}
+
+#
+# Try and catch unsolicited email.  If a message is not to me,
+# or it contains a subject known to be spam, file it away.
+#
+elsif anyof (not address :all :contains
+               ["To", "Cc", "Bcc"] "me@example.com",
+             header :matches "subject"
+               ["*make*money*fast*", "*university*dipl*mas*"])
+{
+  # If message header does not contain my address,
+  # it's from a list.
+  fileinto "spam";   # move to "spam" folder
+}
+else
+{
+  # Move all other (non-company) mail to "personal"
+  # folder.
+  fileinto "personal";
+}
+</textarea></form>
+    <script>
+      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
+    </script>
+
+    <p><strong>MIME types defined:</strong> <code>application/sieve</code>.</p>
+
+  </article>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/codemirror/mode/sieve/sieve.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,193 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("sieve", function(config) {
+  function words(str) {
+    var obj = {}, words = str.split(" ");
+    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
+    return obj;
+  }
+
+  var keywords = words("if elsif else stop require");
+  var atoms = words("true false not");
+  var indentUnit = config.indentUnit;
+
+  function tokenBase(stream, state) {
+
+    var ch = stream.next();
+    if (ch == "/" && stream.eat("*")) {
+      state.tokenize = tokenCComment;
+      return tokenCComment(stream, state);
+    }
+
+    if (ch === '#') {
+      stream.skipToEnd();
+      return "comment";
+    }
+
+    if (ch == "\"") {
+      state.tokenize = tokenString(ch);
+      return state.tokenize(stream, state);
+    }
+
+    if (ch == "(") {
+      state._indent.push("(");
+      // add virtual angel wings so that editor behaves...
+      // ...more sane incase of broken brackets
+      state._indent.push("{");
+      return null;
+    }
+
+    if (ch === "{") {
+      state._indent.push("{");
+      return null;
+    }
+
+    if (ch == ")")  {
+      state._indent.pop();
+      state._indent.pop();
+    }
+
+    if (ch === "}") {
+      state._indent.pop();
+      return null;
+    }
+
+    if (ch == ",")
+      return null;
+
+    if (ch == ";")
+      return null;
+
+
+    if (/[{}\(\),;]/.test(ch))
+      return null;
+
+    // 1*DIGIT "K" / "M" / "G"
+    if (/\d/.test(ch)) {
+      stream.eatWhile(/[\d]/);
+      stream.eat(/[KkMmGg]/);
+      return "number";
+    }
+
+    // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_")
+    if (ch == ":") {
+      stream.eatWhile(/[a-zA-Z_]/);
+      stream.eatWhile(/[a-zA-Z0-9_]/);
+
+      return "operator";
+    }
+
+    stream.eatWhile(/\w/);
+    var cur = stream.current();
+
+    // "text:" *(SP / HTAB) (hash-comment / CRLF)
+    // *(multiline-literal / multiline-dotstart)
+    // "." CRLF
+    if ((cur == "text") && stream.eat(":"))
+    {
+      state.tokenize = tokenMultiLineString;
+      return "string";
+    }
+
+    if (keywords.propertyIsEnumerable(cur))
+      return "keyword";
+
+    if (atoms.propertyIsEnumerable(cur))
+      return "atom";
+
+    return null;
+  }
+
+  function tokenMultiLineString(stream, state)
+  {
+    state._multiLineString = true;
+    // the first line is special it may contain a comment
+    if (!stream.sol()) {
+      stream.eatSpace();
+
+      if (stream.peek() == "#") {
+        stream.skipToEnd();
+        return "comment";
+      }
+
+      stream.skipToEnd();
+      return "string";
+    }
+
+    if ((stream.next() == ".")  && (stream.eol()))
+    {
+      state._multiLineString = false;
+      state.tokenize = tokenBase;
+    }
+
+    return "string";
+  }
+
+  function tokenCComment(stream, state) {
+    var maybeEnd = false, ch;
+    while ((ch = stream.next()) != null) {
+      if (maybeEnd && ch == "/") {
+        state.tokenize = tokenBase;
+        break;
+      }
+      maybeEnd = (ch == "*");
+    }
+    return "comment";
+  }
+
+  function tokenString(quote) {
+    return function(stream, state) {
+      var escaped = false, ch;
+      while ((ch = stream.next()) != null) {
+        if (ch == quote && !escaped)
+          break;
+        escaped = !escaped && ch == "\\";
+      }
+      if (!escaped) state.tokenize = tokenBase;
+      return "string";
+    };
+  }
+
+  return {
+    startState: function(base) {
+      return {tokenize: tokenBase,
+              baseIndent: base || 0,
+              _indent: []};
+    },
+
+    token: function(stream, state) {
+      if (stream.eatSpace())
+        return null;
+
+      return (state.tokenize || tokenBase)(stream, state);;
+    },
+
+    indent: function(state, _textAfter) {
+      var length = state._indent.length;
+      if (_textAfter && (_textAfter[0] == "}"))
+        length--;
+
+      if (length <0)
+        length = 0;
+
+      return length * indentUnit;
+    },
+
+    electricChars: "}"
+  };
+});
+
+CodeMirror.defineMIME("application/sieve", "sieve");
+
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/managesieve",
+    "type": "roundcube-plugin",
+    "description": "Adds a possibility to manage Sieve scripts (incoming mail filters). It's clickable interface which operates on text scripts and communicates with server using managesieve protocol. Adds Filters tab in Settings.",
+    "license": "GPLv3+",
+    "version": "8.7",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "https://plugins.roundcube.net"
+        },
+        {
+            "type": "vcs",
+            "url": "https://github.com/roundcube/Net_Sieve.git"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3",
+        "roundcube/net_sieve": "~1.5.0"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/config.inc.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,108 @@
+<?php
+
+// managesieve server port. When empty the port will be determined automatically
+// using getservbyname() function, with 4190 as a fallback.
+$config['managesieve_port'] = null;
+
+// managesieve server address, default is localhost.
+// Replacement variables supported in host name:
+// %h - user's IMAP hostname
+// %n - http hostname ($_SERVER['SERVER_NAME'])
+// %d - domain (http hostname without the first part)
+// For example %n = mail.domain.tld, %d = domain.tld
+$config['managesieve_host'] = 'localhost';
+
+// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
+// or none. Optional, defaults to best method supported by server.
+$config['managesieve_auth_type'] = null;
+
+// Optional managesieve authentication identifier to be used as authorization proxy.
+// Authenticate as a different user but act on behalf of the logged in user.
+// Works with PLAIN and DIGEST-MD5 auth.
+$config['managesieve_auth_cid'] = null;
+
+// Optional managesieve authentication password to be used for imap_auth_cid
+$config['managesieve_auth_pw'] = null;
+
+// use or not TLS for managesieve server connection
+// Note: tls:// prefix in managesieve_host is also supported
+$config['managesieve_usetls'] = false;
+
+// Connection scket context options
+// See http://php.net/manual/en/context.ssl.php
+// The example below enables server certificate validation
+//$config['managesieve_conn_options'] = array(
+//  'ssl'         => array(
+//     'verify_peer'  => true,
+//     'verify_depth' => 3,
+//     'cafile'       => '/etc/openssl/certs/ca.crt',
+//   ),
+// );
+// Note: These can be also specified as an array of options indexed by hostname
+$config['managesieve_conn_options'] = null;
+
+// default contents of filters script (eg. default spam filter)
+$config['managesieve_default'] = '/etc/dovecot/sieve/global';
+
+// The name of the script which will be used when there's no user script
+$config['managesieve_script_name'] = 'managesieve';
+
+// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
+// but some implementations does not covert UTF-8 to modified UTF-7.
+// Defaults to UTF7-IMAP
+$config['managesieve_mbox_encoding'] = 'UTF-8';
+
+// I need this because my dovecot (with listescape plugin) uses
+// ':' delimiter, but creates folders with dot delimiter
+$config['managesieve_replace_delimiter'] = '';
+
+// disabled sieve extensions (body, copy, date, editheader, encoded-character,
+// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
+// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
+// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
+// Note: not all extensions are implemented
+$config['managesieve_disabled_extensions'] = array();
+
+// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
+$config['managesieve_debug'] = false;
+
+// Enables features described in http://wiki.kolab.org/KEP:14
+$config['managesieve_kolab_master'] = false;
+
+// Script name extension used for scripts including. Dovecot uses '.sieve',
+// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
+$config['managesieve_filename_extension'] = '.sieve';
+
+// List of reserved script names (without extension).
+// Scripts listed here will be not presented to the user.
+$config['managesieve_filename_exceptions'] = array();
+
+// List of domains limiting destination emails in redirect action
+// If not empty, user will need to select domain from a list
+$config['managesieve_domains'] = array();
+
+// Enables separate management interface for vacation responses (out-of-office)
+// 0 - no separate section (default),
+// 1 - add Vacation section,
+// 2 - add Vacation section, but hide Filters section
+$config['managesieve_vacation'] = 0;
+
+// Default vacation interval (in days).
+// Note: If server supports vacation-seconds extension it is possible
+// to define interval in seconds here (as a string), e.g. "3600s".
+$config['managesieve_vacation_interval'] = 0;
+
+// Some servers require vacation :addresses to be filled with all
+// user addresses (aliases). This option enables automatic filling
+// of these on initial vacation form creation.
+$config['managesieve_vacation_addresses_init'] = false;
+
+// Sometimes you want to always reply with mail email address
+// This option enables automatic filling of :from field on initial vacation form creation.
+$config['managesieve_vacation_from_init'] = false;
+
+// Supported methods of notify extension. Default: 'mailto'
+$config['managesieve_notify_methods'] = array('mailto');
+
+// Enables scripts RAW editor feature
+$config['managesieve_raw_editor'] = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,108 @@
+<?php
+
+// managesieve server port. When empty the port will be determined automatically
+// using getservbyname() function, with 4190 as a fallback.
+$config['managesieve_port'] = null;
+
+// managesieve server address, default is localhost.
+// Replacement variables supported in host name:
+// %h - user's IMAP hostname
+// %n - http hostname ($_SERVER['SERVER_NAME'])
+// %d - domain (http hostname without the first part)
+// For example %n = mail.domain.tld, %d = domain.tld
+$config['managesieve_host'] = 'localhost';
+
+// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
+// or none. Optional, defaults to best method supported by server.
+$config['managesieve_auth_type'] = null;
+
+// Optional managesieve authentication identifier to be used as authorization proxy.
+// Authenticate as a different user but act on behalf of the logged in user.
+// Works with PLAIN and DIGEST-MD5 auth.
+$config['managesieve_auth_cid'] = null;
+
+// Optional managesieve authentication password to be used for imap_auth_cid
+$config['managesieve_auth_pw'] = null;
+
+// use or not TLS for managesieve server connection
+// Note: tls:// prefix in managesieve_host is also supported
+$config['managesieve_usetls'] = false;
+
+// Connection scket context options
+// See http://php.net/manual/en/context.ssl.php
+// The example below enables server certificate validation
+//$config['managesieve_conn_options'] = array(
+//  'ssl'         => array(
+//     'verify_peer'  => true,
+//     'verify_depth' => 3,
+//     'cafile'       => '/etc/openssl/certs/ca.crt',
+//   ),
+// );
+// Note: These can be also specified as an array of options indexed by hostname
+$config['managesieve_conn_options'] = null;
+
+// default contents of filters script (eg. default spam filter)
+$config['managesieve_default'] = '/etc/dovecot/sieve/global';
+
+// The name of the script which will be used when there's no user script
+$config['managesieve_script_name'] = 'managesieve';
+
+// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
+// but some implementations does not covert UTF-8 to modified UTF-7.
+// Defaults to UTF7-IMAP
+$config['managesieve_mbox_encoding'] = 'UTF-8';
+
+// I need this because my dovecot (with listescape plugin) uses
+// ':' delimiter, but creates folders with dot delimiter
+$config['managesieve_replace_delimiter'] = '';
+
+// disabled sieve extensions (body, copy, date, editheader, encoded-character,
+// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
+// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
+// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
+// Note: not all extensions are implemented
+$config['managesieve_disabled_extensions'] = array();
+
+// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
+$config['managesieve_debug'] = false;
+
+// Enables features described in http://wiki.kolab.org/KEP:14
+$config['managesieve_kolab_master'] = false;
+
+// Script name extension used for scripts including. Dovecot uses '.sieve',
+// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
+$config['managesieve_filename_extension'] = '.sieve';
+
+// List of reserved script names (without extension).
+// Scripts listed here will be not presented to the user.
+$config['managesieve_filename_exceptions'] = array();
+
+// List of domains limiting destination emails in redirect action
+// If not empty, user will need to select domain from a list
+$config['managesieve_domains'] = array();
+
+// Enables separate management interface for vacation responses (out-of-office)
+// 0 - no separate section (default),
+// 1 - add Vacation section,
+// 2 - add Vacation section, but hide Filters section
+$config['managesieve_vacation'] = 0;
+
+// Default vacation interval (in days).
+// Note: If server supports vacation-seconds extension it is possible
+// to define interval in seconds here (as a string), e.g. "3600s".
+$config['managesieve_vacation_interval'] = 0;
+
+// Some servers require vacation :addresses to be filled with all
+// user addresses (aliases). This option enables automatic filling
+// of these on initial vacation form creation.
+$config['managesieve_vacation_addresses_init'] = false;
+
+// Sometimes you want to always reply with mail email address
+// This option enables automatic filling of :from field on initial vacation form creation.
+$config['managesieve_vacation_from_init'] = false;
+
+// Supported methods of notify extension. Default: 'mailto'
+$config['managesieve_notify_methods'] = array('mailto');
+
+// Enables scripts RAW editor feature
+$config['managesieve_raw_editor'] = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/helpdocs/en_US/settings-filters.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,55 @@
+.. index:: Filters
+.. _settings-managesieve-filters:
+
+*******
+Filters
+*******
+
+Incoming mail is automatically processed by the server and handled/organized
+according to defined criteria. For example you can tell the server to move the message to
+specified folder, redirect it to another account, send a reply, discard, delete, etc.
+
+Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood
+all filters are stored as a Sieve script on the server. This interface allows you to
+define rules in easy way without the need to know the language.
+
+Each filter definition has a name and set of rules and actions. Usually 
+the number of definitions is unlimited and they can be grouped into sets
+(scripts) for convenience.
+
+
+Filter sets
+-----------
+
+Filter definitions can be grouped into sets. These can be activated or disactivated.
+Depending on server configuration there can be none, one or more active sets
+at the same time. They need to have a unique name.
+
+New sets can be created as empty or as a copy of an existing set. It is also possible
+to import them from a text file containing Sieve script. Sets in form of a script
+can be also downloaded e.g. for backup or migration purposes.
+
+
+Filter definition
+-----------------
+
+Every filter can be active or inactive, which is convenient if you want to
+disable some actions temporarily.
+
+Because filters are executed in specified order (from top to bottom as you see them on the list)
+you can use drag-and-drop technique to rearange filters on the list.
+
+Every filter definition contains at least one rule and one action. Depending on server
+capabilities a rule can be based e.g. on message headers, body, date or size.
+
+A set of actions also depends on server capabilities. Most servers support:
+
+* moving/copying messages to specified folder
+* redirecting/copying messages to another account
+* discarding messages with specified error message
+* replying (vacation)
+* deleting (ignoring) messages
+* setting flags (e.g. marking as Read)
+
+Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules*
+and *Keep message in Inbox* actions to have more control on this.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/helpdocs/en_US/settings-vacation.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+.. index:: Vacation
+.. _settings-managesieve-vacation:
+
+********
+Vacation
+********
+
+The vacation autoresponder's purpose is to provide correspondents with
+notification that the user is away for an extended period of time and that
+they should not expect quick responses.
+
+**Vacation** is used to respond to an incoming message with another message.
+
+This interface is part of :ref:`settings-managesieve-filters` functionality
+and provides a simple way to manage vacation responses.
+
+
+Vacation message
+----------------
+
+To enable the autoresponder you have to set at least the response body and change
+the status to *On*.
+
+**Subject**
+  Response subject is optional. By default the reply subject will be set
+  to *Auto: <original subject>*
+
+**Body**
+  Response body. Here you put the reason of your absence or any other text
+  that will be send to sender.
+
+**Vacation start/end**
+  These fields define when the vacation rule is active and are optional.
+
+**Status**
+  This field activates the rule. If you always use the same response body it is
+  convenient to disable the vacation rule when it's not needed and enable again
+  another time.
+
+Advanced settings
+-----------------
+
+**Reply sender address**
+  This is an email address that will be used as sender of the vacation reply.
+
+**My email addresses**
+  Normally the vacation response is send if recipient address of the incoming
+  message is one of your addresses known to the server. Here you can add
+  more addresses.
+
+**Reply interval**
+  This parameter defines how often the reply to the same sender is generated.
+  When you receive a lot of messages from the same sender in short time,
+  usually you don't want to reply to all of them. By default reply is send once a day.
+
+**Incoming message action**
+  This field defines an action taken on the incoming message. You can discard or keep
+  it or redirect/copy to another account (so it can be handled by another person).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/helpdocs/po/settings-filters.pot	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2015, roundcube.net
+# This file is distributed under the same license as the Roundcube Webmail Help package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Roundcube Webmail Help 1.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-06-07 16:59\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:9
+# cdb4a7c71e5343edb8015510da83a0b8
+msgid "Filters"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:11
+# 94cde05fc3f049e8911dffacfb9af0e5
+msgid "Incoming mail is automatically processed by the server and handled/organized according to defined criteria. For example you can tell the server to move the message to specified folder, redirect it to another account, send a reply, discard, delete, etc."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:15
+# c33e9a7b05f24fe59464ff2f1c9e10a5
+msgid "Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood all filters are stored as a Sieve script on the server. This interface allows you to define rules in easy way without the need to know the language."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:19
+# 95eb7e571ec44698a474407092b6b79c
+msgid "Each filter definition has a name and set of rules and actions. Usually the number of definitions is unlimited and they can be grouped into sets (scripts) for convenience."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:25
+# aa2da905741247b9971687cd4fdb6a21
+msgid "Filter sets"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:27
+# dc9dbc4144034676a720caaf4379e4e3
+msgid "Filter definitions can be grouped into sets. These can be activated or disactivated. Depending on server configuration there can be none, one or more active sets at the same time. They need to have a unique name."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:31
+# 03f58cdba04c4282b867c792572a55e6
+msgid "New sets can be created as empty or as a copy of an existing set. It is also possible to import them from a text file containing Sieve script. Sets in form of a script can be also downloaded e.g. for backup or migration purposes."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:37
+# 9144e63ba44b476dadfcc84e33e72b86
+msgid "Filter definition"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:39
+# 602e3696b4bd4db5960351b5af0e72fd
+msgid "Every filter can be active or inactive, which is convenient if you want to disable some actions temporarily."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:42
+# 0f01b114450f4439b210f3831d66c534
+msgid "Because filters are executed in specified order (from top to bottom as you see them on the list) you can use drag-and-drop technique to rearange filters on the list."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:45
+# 0a30f2aa835e430c9f9de2e446f4c311
+msgid "Every filter definition contains at least one rule and one action. Depending on server capabilities a rule can be based e.g. on message headers, body, date or size."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:48
+# d3b9c2df232c4cd891ec6ba4751e02cf
+msgid "A set of actions also depends on server capabilities. Most servers support:"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:50
+# 1ee77f36a88746e0809e903838314e5a
+msgid "moving/copying messages to specified folder"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:51
+# c2669d203d104753830a170af2ceffde
+msgid "redirecting/copying messages to another account"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:52
+# b04abf50eb1948518caff0c9f6d32ad4
+msgid "discarding messages with specified error message"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:53
+# 439873796de6457985088a206b449c5b
+msgid "replying (vacation)"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:54
+# 5b7bce17840647bdba48ffa944b30ec5
+msgid "deleting (ignoring) messages"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:55
+# a12f2f2bebe74c668b637be66352ddb7
+msgid "setting flags (e.g. marking as Read)"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-filters.rst:57
+# a19231cf44e64eeca67da4cd31b0303a
+msgid "Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules* and *Keep message in Inbox* actions to have more control on this."
+msgstr ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/helpdocs/po/settings-vacation.pot	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2015, roundcube.net
+# This file is distributed under the same license as the Roundcube Webmail Help package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Roundcube Webmail Help 1.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-06-07 16:59\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:9
+# 6f1988e3ca10490f8b46fdf11ce3553a
+msgid "Vacation"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:11
+# 628c07bf4b424a039800ef834f891841
+msgid "The vacation autoresponder's purpose is to provide correspondents with notification that the user is away for an extended period of time and that they should not expect quick responses."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:15
+# 57607d8b841b42859d3bb4e6abc4d653
+msgid "**Vacation** is used to respond to an incoming message with another message."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:17
+# 34f46a208d324588906b0d3d10a6176c
+msgid "This interface is part of :ref:`settings-managesieve-filters` functionality and provides a simple way to manage vacation responses."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:22
+# 895cd4752ec649bc87850eb4bd149853
+msgid "Vacation message"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:24
+# 5de6ddf9931a481e9d1c9953183b28d8
+msgid "To enable the autoresponder you have to set at least the response body and change the status to *On*."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:28
+# c4790be6b0454aa190190c1e77087414
+msgid "Response subject is optional. By default the reply subject will be set to *Auto: <original subject>*"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:32
+# 65eb9d5c2f8d4a8cb3077c824ecf597f
+msgid "Response body. Here you put the reason of your absence or any other text that will be send to sender."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:36
+# 2b05975ad2ee40e9b64356eb39308a92
+msgid "These fields define when the vacation rule is active and are optional."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:39
+# 575bd1430cdf4ea4bbcfb9d8556393bc
+msgid "This field activates the rule. If you always use the same response body it is convenient to disable the vacation rule when it's not needed and enable again another time."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:44
+# 22d533b9cffd47d39c04cbca07d9513d
+msgid "Advanced settings"
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:47
+# d56d3eac661f41799e4538be4d2806cd
+msgid "This is an email address that will be used as sender of the vacation reply."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:50
+# f2c3d5d2e05c4147bdca65d3b12acdf4
+msgid "Normally the vacation response is send if recipient address of the incoming message is one of your addresses known to the server. Here you can add more addresses."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:55
+# 9b1ee71a799d43ebb8cef4a2555a7b83
+msgid "This parameter defines how often the reply to the same sender is generated. When you receive a lot of messages from the same sender in short time, usually you don't want to reply to all of them. By default reply is send once a day."
+msgstr ""
+
+#: ../../en_US/_plugins/managesieve/settings-vacation.rst:60
+# 8ce4de76e26543f1be25dedb372ce296
+msgid "This field defines an action taken on the incoming message. You can discard or keep it or redirect/copy to another account (so it can be handled by another person)."
+msgstr ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,472 @@
+<?php
+
+/**
+ * Classes for managesieve operations (using PEAR::Net_Sieve)
+ *
+ * Copyright (C) 2008-2011, The Roundcube Dev Team
+ * Copyright (C) 2011, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+// Managesieve Protocol: RFC5804
+
+class rcube_sieve
+{
+    private $sieve;                 // Net_Sieve object
+    private $error = false;         // error flag
+    private $errorLines = array();  // array of line numbers within sieve script which raised an error
+    private $list       = array();  // scripts list
+    private $exts;                  // array of supported extensions
+    private $active;                // active script name
+
+    public $script;                 // rcube_sieve_script object
+    public $current;                // name of currently loaded script
+
+    const ERROR_CONNECTION = 1;
+    const ERROR_LOGIN      = 2;
+    const ERROR_NOT_EXISTS = 3;    // script not exists
+    const ERROR_INSTALL    = 4;    // script installation
+    const ERROR_ACTIVATE   = 5;    // script activation
+    const ERROR_DELETE     = 6;    // script deletion
+    const ERROR_INTERNAL   = 7;    // internal error
+    const ERROR_DEACTIVATE = 8;    // script activation
+    const ERROR_OTHER      = 255;  // other/unknown error
+
+
+    /**
+     * Object constructor
+     *
+     * @param string  Username (for managesieve login)
+     * @param string  Password (for managesieve login)
+     * @param string  Managesieve server hostname/address
+     * @param string  Managesieve server port number
+     * @param string  Managesieve authentication method 
+     * @param boolean Enable/disable TLS use
+     * @param array   Disabled extensions
+     * @param boolean Enable/disable debugging
+     * @param string  Proxy authentication identifier
+     * @param string  Proxy authentication password
+     * @param array   List of options to pass to stream_context_create().
+     */
+    public function __construct($username, $password='', $host='localhost', $port=2000,
+        $auth_type=null, $usetls=true, $disabled=array(), $debug=false,
+        $auth_cid=null, $auth_pw=null, $options=array())
+    {
+        $this->sieve = new Net_Sieve();
+
+        if ($debug) {
+            $this->sieve->setDebug(true, array($this, 'debug_handler'));
+        }
+
+        $result = $this->sieve->connect($host, $port, $options, $usetls);
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_CONNECTION);
+        }
+
+        if (!empty($auth_cid)) {
+            $authz    = $username;
+            $username = $auth_cid;
+        }
+        if (!empty($auth_pw)) {
+            $password = $auth_pw;
+        }
+
+        $result = $this->sieve->login($username, $password, $auth_type ? strtoupper($auth_type) : null, $authz);
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_LOGIN);
+        }
+
+        $this->exts = $this->get_extensions();
+
+        // disable features by config
+        if (!empty($disabled)) {
+            // we're working on lower-cased names
+            $disabled = array_map('strtolower', (array) $disabled);
+            foreach ($disabled as $ext) {
+                if (($idx = array_search($ext, $this->exts)) !== false) {
+                    unset($this->exts[$idx]);
+                }
+            }
+        }
+    }
+
+    public function __destruct()
+    {
+        $this->sieve->disconnect();
+    }
+
+    /**
+     * Getter for error code
+     */
+    public function error()
+    {
+        return $this->error ?: false;
+    }
+
+    /**
+     * Saves current script into server
+     */
+    public function save($name = null)
+    {
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        if (!$this->script) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        if (!$name) {
+            $name = $this->current;
+        }
+
+        $script = $this->script->as_text();
+
+        if (!$script) {
+            $script = '/* empty script */';
+        }
+
+        $result = $this->sieve->installScript($name, $script);
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_INSTALL);
+        }
+
+        return true;
+    }
+
+    /**
+     * Saves text script into server
+     */
+    public function save_script($name, $content = null)
+    {
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        if (!$content) {
+            $content = '/* empty script */';
+        }
+
+        $result = $this->sieve->installScript($name, $content);
+
+        if (is_a($result, 'PEAR_Error')) {
+            $rawErrorMessage = $result->getMessage();
+            $errMessages = preg_split("/$name:/", $rawErrorMessage);
+
+            if (count($errMessages) > 0) {
+                foreach ($errMessages as $singleError) {
+                    $matches = array();
+                    $res = preg_match('/line (\d+):(.*)/i', $singleError, $matches);
+
+                    if ($res === 1 ) {
+                        if (count($matches) > 2) {
+                            $this->errorLines[] = array("line" => $matches[1], "msg" => $matches[2]);
+                        }
+                        else {
+                            $this->errorLines[] = array("line" => $matches[1], "msg" => null);
+                        }
+                    }
+                }
+            }
+
+            return $this->_set_error(self::ERROR_INSTALL);
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the current error line within the saved sieve script
+     */
+    public function get_error_lines()
+    {
+        return $this->errorLines;
+    }
+
+    /**
+     * Activates specified script
+     */
+    public function activate($name = null)
+    {
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        if (!$name) {
+            $name = $this->current;
+        }
+
+        $result = $this->sieve->setActive($name);
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_ACTIVATE);
+        }
+
+        $this->active = $name;
+
+        return true;
+    }
+
+    /**
+     * De-activates specified script
+     */
+    public function deactivate()
+    {
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        $result = $this->sieve->setActive('');
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_DEACTIVATE);
+        }
+
+        $this->active = null;
+
+        return true;
+    }
+
+    /**
+     * Removes specified script
+     */
+    public function remove($name = null)
+    {
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        if (!$name) {
+            $name = $this->current;
+        }
+
+        // script must be deactivated first
+        if ($name == $this->sieve->getActive()) {
+            $result = $this->sieve->setActive('');
+
+            if (is_a($result, 'PEAR_Error')) {
+                return $this->_set_error(self::ERROR_DELETE);
+            }
+
+            $this->active = null;
+        }
+
+        $result = $this->sieve->removeScript($name);
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_DELETE);
+        }
+
+        if ($name == $this->current) {
+            $this->current = null;
+        }
+
+        $this->list = null;
+
+        return true;
+    }
+
+    /**
+     * Gets list of supported by server Sieve extensions
+     */
+    public function get_extensions()
+    {
+        if ($this->exts)
+            return $this->exts;
+
+        if (!$this->sieve)
+            return $this->_set_error(self::ERROR_INTERNAL);
+
+        $ext = $this->sieve->getExtensions();
+
+        if (is_a($ext, 'PEAR_Error')) {
+            return array();
+        }
+
+        // we're working on lower-cased names
+        $ext = array_map('strtolower', (array) $ext);
+
+        if ($this->script) {
+            $supported = $this->script->get_extensions();
+            foreach ($ext as $idx => $ext_name)
+                if (!in_array($ext_name, $supported))
+                    unset($ext[$idx]);
+        }
+
+        return array_values($ext);
+    }
+
+    /**
+     * Gets list of scripts from server
+     */
+    public function get_scripts()
+    {
+        if (!$this->list) {
+
+            if (!$this->sieve)
+                return $this->_set_error(self::ERROR_INTERNAL);
+
+            $list = $this->sieve->listScripts($active);
+
+            if (is_a($list, 'PEAR_Error')) {
+                return $this->_set_error(self::ERROR_OTHER);
+            }
+
+            $this->list   = $list;
+            $this->active = $active;
+        }
+
+        return $this->list;
+    }
+
+    /**
+     * Returns active script name
+     */
+    public function get_active()
+    {
+        if ($this->active !== null) {
+            return $this->active;
+        }
+
+        if (!$this->sieve) {
+            return $this->_set_error(self::ERROR_INTERNAL);
+        }
+
+        return $this->active = $this->sieve->getActive();
+    }
+
+    /**
+     * Loads script by name
+     */
+    public function load($name)
+    {
+        if (!$this->sieve)
+            return $this->_set_error(self::ERROR_INTERNAL);
+
+        if ($this->current == $name)
+            return true;
+
+        $script = $this->sieve->getScript($name);
+
+        if (is_a($script, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_OTHER);
+        }
+
+        // try to parse from Roundcube format
+        $this->script = $this->_parse($script);
+
+        $this->current = $name;
+
+        return true;
+    }
+
+    /**
+     * Loads script from text content
+     */
+    public function load_script($script)
+    {
+        if (!$this->sieve)
+            return $this->_set_error(self::ERROR_INTERNAL);
+
+        // try to parse from Roundcube format
+        $this->script = $this->_parse($script);
+    }
+
+    /**
+     * Creates rcube_sieve_script object from text script
+     */
+    private function _parse($txt)
+    {
+        // parse
+        $script = new rcube_sieve_script($txt, $this->exts);
+
+        // fix/convert to Roundcube format
+        if (!empty($script->content)) {
+            // replace all elsif with if+stop, we support only ifs
+            foreach ($script->content as $idx => $rule) {
+                if (empty($rule['type']) || !preg_match('/^(if|elsif|else)$/', $rule['type'])) {
+                    continue;
+                }
+
+                $script->content[$idx]['type'] = 'if';
+
+                // 'stop' not found?
+                foreach ($rule['actions'] as $action) {
+                    if (preg_match('/^(stop|vacation)$/', $action['type'])) {
+                        continue 2;
+                    }
+                }
+                if (!empty($script->content[$idx+1]) && $script->content[$idx+1]['type'] != 'if') {
+                    $script->content[$idx]['actions'][] = array('type' => 'stop');
+                }
+            }
+        }
+
+        return $script;
+    }
+
+    /**
+     * Gets specified script as text
+     */
+    public function get_script($name)
+    {
+        if (!$this->sieve)
+            return $this->_set_error(self::ERROR_INTERNAL);
+
+        $content = $this->sieve->getScript($name);
+
+        if (is_a($content, 'PEAR_Error')) {
+            return $this->_set_error(self::ERROR_OTHER);
+        }
+
+        return $content;
+    }
+
+    /**
+     * Creates empty script or copy of other script
+     */
+    public function copy($name, $copy)
+    {
+        if (!$this->sieve)
+            return $this->_set_error(self::ERROR_INTERNAL);
+
+        if ($copy) {
+            $content = $this->sieve->getScript($copy);
+
+            if (is_a($content, 'PEAR_Error')) {
+                return $this->_set_error(self::ERROR_OTHER);
+            }
+        }
+
+
+        return $this->save_script($name, $content);
+    }
+
+    private function _set_error($error)
+    {
+        $this->error = $error;
+        return false;
+    }
+
+    /**
+     * This is our own debug handler for connection
+     */
+    public function debug_handler(&$sieve, $message)
+    {
+        rcube::write_log('sieve', preg_replace('/\r\n$/', '', $message));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2743 @@
+<?php
+
+/**
+ * Managesieve (Sieve Filters) Engine
+ *
+ * Engine part of Managesieve plugin implementing UI and backend access.
+ *
+ * Copyright (C) 2008-2014, The Roundcube Dev Team
+ * Copyright (C) 2011-2014, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sieve_engine
+{
+    protected $rc;
+    protected $sieve;
+    protected $errors;
+    protected $form;
+    protected $list;
+    protected $tips    = array();
+    protected $script  = array();
+    protected $exts    = array();
+    protected $active  = array();
+    protected $headers = array(
+        'subject' => 'Subject',
+        'from'    => 'From',
+        'to'      => 'To',
+    );
+    protected $addr_headers = array(
+        // Required
+        "from", "to", "cc", "bcc", "sender", "resent-from", "resent-to",
+        // Additional (RFC 822 / RFC 2822)
+        "reply-to", "resent-reply-to", "resent-sender", "resent-cc", "resent-bcc",
+        // Non-standard (RFC 2076, draft-palme-mailext-headers-08.txt)
+        "for-approval", "for-handling", "for-comment", "apparently-to", "errors-to",
+        "delivered-to", "return-receipt-to", "x-admin", "read-receipt-to",
+        "x-confirm-reading-to", "return-receipt-requested",
+        "registered-mail-reply-requested-by", "mail-followup-to", "mail-reply-to",
+        "abuse-reports-to", "x-complaints-to", "x-report-abuse-to",
+        // Undocumented
+        "x-beenthere",
+    );
+    protected $notify_methods = array(
+        'mailto',
+        // 'sms',
+        // 'tel',
+    );
+    protected $notify_importance_options = array(
+        3 => 'notifyimportancelow',
+        2 => 'notifyimportancenormal',
+        1 => 'notifyimportancehigh'
+    );
+
+    const VERSION  = '8.9';
+    const PROGNAME = 'Roundcube (Managesieve)';
+    const PORT     = 4190;
+
+
+    /**
+     * Class constructor
+     */
+    function __construct($plugin)
+    {
+        $this->rc     = rcube::get_instance();
+        $this->plugin = $plugin;
+    }
+
+    /**
+     * Loads configuration, initializes plugin (including sieve connection)
+     */
+    function start($mode = null)
+    {
+        // register UI objects
+        $this->rc->output->add_handlers(array(
+            'filterslist'      => array($this, 'filters_list'),
+            'filtersetslist'   => array($this, 'filtersets_list'),
+            'filterframe'      => array($this, 'filter_frame'),
+            'filterform'       => array($this, 'filter_form'),
+            'filtersetform'    => array($this, 'filterset_form'),
+            'filterseteditraw' => array($this, 'filterset_editraw'),
+        ));
+
+        // connect to managesieve server
+        $error = $this->connect($_SESSION['username'], $this->rc->decrypt($_SESSION['password']));
+
+        // load current/active script
+        if (!$error) {
+            // Get list of scripts
+            $list = $this->list_scripts();
+
+            // reset current script when entering filters UI (#1489412)
+            if ($this->rc->action == 'plugin.managesieve') {
+                $this->rc->session->remove('managesieve_current');
+            }
+
+            if ($mode != 'vacation') {
+                if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
+                    $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+                }
+                else if (!empty($_SESSION['managesieve_current'])) {
+                    $script_name = $_SESSION['managesieve_current'];
+                }
+            }
+
+            $error = $this->load_script($script_name);
+        }
+
+        // finally set script objects
+        if ($error) {
+            switch ($error) {
+                case rcube_sieve::ERROR_CONNECTION:
+                case rcube_sieve::ERROR_LOGIN:
+                    $this->rc->output->show_message('managesieve.filterconnerror', 'error');
+                    break;
+
+                default:
+                    $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
+                    break;
+            }
+
+            // reload interface in case of possible error when specified script wasn't found (#1489412)
+            if ($script_name !== null && !empty($list) && !in_array($script_name, $list)) {
+                $this->rc->output->command('reload', 500);
+            }
+
+            // to disable 'Add filter' button set env variable
+            $this->rc->output->set_env('filterconnerror', true);
+            $this->script = array();
+        }
+        else {
+            $this->exts = $this->sieve->get_extensions();
+            $this->init_script();
+            $this->rc->output->set_env('currentset', $this->sieve->current);
+            $_SESSION['managesieve_current'] = $this->sieve->current;
+        }
+
+        $this->rc->output->set_env('raw_sieve_editor', $this->rc->config->get('managesieve_raw_editor', true));
+
+        return $error;
+    }
+
+    /**
+     * Connect to configured managesieve server
+     *
+     * @param string $username User login
+     * @param string $password User password
+     *
+     * @return int Connection status: 0 on success, >0 on failure
+     */
+    public function connect($username, $password)
+    {
+        // Get connection parameters
+        $host = $this->rc->config->get('managesieve_host', 'localhost');
+        $port = $this->rc->config->get('managesieve_port');
+        $tls  = $this->rc->config->get('managesieve_usetls', false);
+
+        $host = rcube_utils::parse_host($host);
+        $host = rcube_utils::idn_to_ascii($host);
+
+        // remove tls:// prefix, set TLS flag
+        if (($host = preg_replace('|^tls://|i', '', $host, 1, $cnt)) && $cnt) {
+            $tls = true;
+        }
+
+        if (empty($port)) {
+            $port = getservbyname('sieve', 'tcp');
+            if (empty($port)) {
+                $port = self::PORT;
+            }
+        }
+
+        $plugin = $this->rc->plugins->exec_hook('managesieve_connect', array(
+            'user'      => $username,
+            'password'  => $password,
+            'host'      => $host,
+            'port'      => $port,
+            'usetls'    => $tls,
+            'auth_type' => $this->rc->config->get('managesieve_auth_type'),
+            'disabled'  => $this->rc->config->get('managesieve_disabled_extensions'),
+            'debug'     => $this->rc->config->get('managesieve_debug', false),
+            'auth_cid'  => $this->rc->config->get('managesieve_auth_cid'),
+            'auth_pw'   => $this->rc->config->get('managesieve_auth_pw'),
+            'socket_options' => $this->rc->config->get('managesieve_conn_options'),
+        ));
+
+        // Handle per-host socket options
+        rcube_utils::parse_socket_options($plugin['socket_options'], $plugin['host']);
+
+        // try to connect to managesieve server and to fetch the script
+        $this->sieve = new rcube_sieve(
+            $plugin['user'],
+            $plugin['password'],
+            $plugin['host'],
+            $plugin['port'],
+            $plugin['auth_type'],
+            $plugin['usetls'],
+            $plugin['disabled'],
+            $plugin['debug'],
+            $plugin['auth_cid'],
+            $plugin['auth_pw'],
+            $plugin['socket_options']
+        );
+
+        $error = $this->sieve->error();
+
+        if ($error) {
+            rcube::raise_error(array(
+                    'code'    => 403,
+                    'file'    => __FILE__,
+                    'line'    => __LINE__,
+                    'message' => "Unable to connect to managesieve on $host:$port"
+                ), true, false);
+        }
+
+        return $error;
+    }
+
+    /**
+     * Load specified (or active) script
+     *
+     * @param string $script_name Optional script name
+     *
+     * @return int Connection status: 0 on success, >0 on failure
+     */
+    protected function load_script($script_name = null)
+    {
+        // Get list of scripts
+        $list = $this->list_scripts();
+
+        if ($script_name === null || $script_name === '') {
+            // get (first) active script
+            if (!empty($this->active)) {
+               $script_name = $this->active[0];
+            }
+            else if ($list) {
+                $script_name = $list[0];
+            }
+            // create a new (initial) script
+            else {
+                // if script not exists build default script contents
+                $script_file = $this->rc->config->get('managesieve_default');
+                $script_name = $this->rc->config->get('managesieve_script_name');
+
+                if (empty($script_name)) {
+                    $script_name = 'roundcube';
+                }
+
+                if ($script_file && is_readable($script_file)) {
+                    $content = file_get_contents($script_file);
+                }
+
+                // add script and set it active
+                if ($this->sieve->save_script($script_name, $content)) {
+                    $this->activate_script($script_name);
+                    $this->list[] = $script_name;
+                }
+            }
+        }
+
+        if ($script_name) {
+            $this->sieve->load($script_name);
+        }
+
+        return $this->sieve->error();
+    }
+
+    /**
+     * User interface actions handler
+     */
+    function actions()
+    {
+        $error = $this->start();
+
+        // Handle user requests
+        if ($action = rcube_utils::get_input_value('_act', rcube_utils::INPUT_GPC)) {
+            $fid = (int) rcube_utils::get_input_value('_fid', rcube_utils::INPUT_POST);
+
+            if ($action == 'delete' && !$error) {
+                if (isset($this->script[$fid])) {
+                    if ($this->sieve->script->delete_rule($fid))
+                        $result = $this->save_script();
+
+                    if ($result === true) {
+                        $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation');
+                        $this->rc->output->command('managesieve_updatelist', 'del', array('id' => $fid));
+                    }
+                    else {
+                        $this->rc->output->show_message('managesieve.filterdeleteerror', 'error');
+                    }
+                }
+            }
+            else if ($action == 'move' && !$error) {
+                if (isset($this->script[$fid])) {
+                    $to   = (int) rcube_utils::get_input_value('_to', rcube_utils::INPUT_POST);
+                    $rule = $this->script[$fid];
+
+                    // remove rule
+                    unset($this->script[$fid]);
+                    $this->script = array_values($this->script);
+
+                    // add at target position
+                    if ($to >= count($this->script)) {
+                        $this->script[] = $rule;
+                    }
+                    else {
+                        $script = array();
+                        foreach ($this->script as $idx => $r) {
+                            if ($idx == $to)
+                                $script[] = $rule;
+                            $script[] = $r;
+                        }
+                        $this->script = $script;
+                    }
+
+                    $this->sieve->script->content = $this->script;
+                    $result = $this->save_script();
+
+                    if ($result === true) {
+                        $result = $this->list_rules();
+
+                        $this->rc->output->show_message('managesieve.moved', 'confirmation');
+                        $this->rc->output->command('managesieve_updatelist', 'list',
+                            array('list' => $result, 'clear' => true, 'set' => $to));
+                    }
+                    else {
+                        $this->rc->output->show_message('managesieve.moveerror', 'error');
+                    }
+                }
+            }
+            else if ($action == 'act' && !$error) {
+                if (isset($this->script[$fid])) {
+                    $rule     = $this->script[$fid];
+                    $disabled = !empty($rule['disabled']);
+                    $rule['disabled'] = !$disabled;
+                    $result = $this->sieve->script->update_rule($fid, $rule);
+
+                    if ($result !== false)
+                        $result = $this->save_script();
+
+                    if ($result === true) {
+                        if ($rule['disabled'])
+                            $this->rc->output->show_message('managesieve.deactivated', 'confirmation');
+                        else
+                            $this->rc->output->show_message('managesieve.activated', 'confirmation');
+                        $this->rc->output->command('managesieve_updatelist', 'update',
+                            array('id' => $fid, 'disabled' => $rule['disabled']));
+                    }
+                    else {
+                        if ($rule['disabled'])
+                            $this->rc->output->show_message('managesieve.deactivateerror', 'error');
+                        else
+                            $this->rc->output->show_message('managesieve.activateerror', 'error');
+                    }
+                }
+            }
+            else if ($action == 'setact' && !$error) {
+                $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
+                $result = $this->activate_script($script_name);
+                $kep14  = $this->rc->config->get('managesieve_kolab_master');
+
+                if ($result === true) {
+                    $this->rc->output->set_env('active_sets', $this->active);
+                    $this->rc->output->show_message('managesieve.setactivated', 'confirmation');
+                    $this->rc->output->command('managesieve_updatelist', 'setact',
+                        array('name' => $script_name, 'active' => true, 'all' => !$kep14));
+                }
+                else {
+                    $this->rc->output->show_message('managesieve.setactivateerror', 'error');
+                }
+            }
+            else if ($action == 'deact' && !$error) {
+                $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
+                $result = $this->deactivate_script($script_name);
+
+                if ($result === true) {
+                    $this->rc->output->set_env('active_sets', $this->active);
+                    $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation');
+                    $this->rc->output->command('managesieve_updatelist', 'setact',
+                        array('name' => $script_name, 'active' => false));
+                }
+                else {
+                    $this->rc->output->show_message('managesieve.setdeactivateerror', 'error');
+                }
+            }
+            else if ($action == 'setdel' && !$error) {
+                $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
+                $result = $this->remove_script($script_name);
+
+                if ($result === true) {
+                    $this->rc->output->show_message('managesieve.setdeleted', 'confirmation');
+                    $this->rc->output->command('managesieve_updatelist', 'setdel',
+                        array('name' => $script_name));
+                    $this->rc->session->remove('managesieve_current');
+                }
+                else {
+                    $this->rc->output->show_message('managesieve.setdeleteerror', 'error');
+                }
+            }
+            else if ($action == 'setget') {
+                $this->rc->request_security_check(rcube_utils::INPUT_GET);
+
+                $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+                $script      = $this->sieve->get_script($script_name);
+
+                if ($script === false) {
+                    exit;
+                }
+
+                $browser = new rcube_browser;
+
+                // send download headers
+                header("Content-Type: application/octet-stream");
+                header("Content-Length: ".strlen($script));
+
+                if ($browser->ie) {
+                    header("Content-Type: application/force-download");
+                    $filename = rawurlencode($script_name);
+                }
+                else {
+                    $filename = addcslashes($script_name, '\\"');
+                }
+
+                header("Content-Disposition: attachment; filename=\"$filename.txt\"");
+                echo $script;
+                exit;
+            }
+            else if ($action == 'list') {
+                $result = $this->list_rules();
+
+                $this->rc->output->command('managesieve_updatelist', 'list', array('list' => $result));
+            }
+            else if ($action == 'ruleadd') {
+                $rid = rcube_utils::get_input_value('_rid', rcube_utils::INPUT_POST);
+                $id = $this->genid();
+                $content = $this->rule_div($fid, $id, false);
+
+                $this->rc->output->command('managesieve_rulefill', $content, $id, $rid);
+            }
+            else if ($action == 'actionadd') {
+                $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_POST);
+                $id = $this->genid();
+                $content = $this->action_div($fid, $id, false);
+
+                $this->rc->output->command('managesieve_actionfill', $content, $id, $aid);
+            }
+            else if ($action == 'addresses') {
+                $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_POST);
+
+                $this->rc->output->command('managesieve_vacation_addresses_update', $aid, $this->user_emails());
+            }
+
+            $this->rc->output->send();
+        }
+        else if ($this->rc->task == 'mail') {
+            // Initialize the form
+            $rules = rcube_utils::get_input_value('r', rcube_utils::INPUT_GET);
+            if (!empty($rules)) {
+                $i = 0;
+                foreach ($rules as $rule) {
+                    list($header, $value) = explode(':', $rule, 2);
+                    $tests[$i] = array(
+                        'type' => 'contains',
+                        'test' => 'header',
+                        'arg1' => $header,
+                        'arg2' => $value,
+                    );
+                    $i++;
+                }
+
+                $this->form = array(
+                    'join'  => count($tests) > 1 ? 'allof' : 'anyof',
+                    'name'  => '',
+                    'tests' => $tests,
+                    'actions' => array(
+                        0 => array('type' => 'fileinto'),
+                        1 => array('type' => 'stop'),
+                    ),
+                );
+            }
+        }
+
+        $this->send();
+    }
+
+    function saveraw()
+    {
+        // Init plugin and handle managesieve connection
+        $error = $this->start();
+
+        $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST);
+
+        $result = $this->sieve->save_script($script_name, $_POST['rawsetcontent']);
+
+        if ($result === false) {
+            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
+            $errorLines = $this->sieve->get_error_lines();
+            if (count($errorLines) > 0) {
+                $this->rc->output->set_env("sieve_errors", $errorLines);
+            }
+        }
+        else {
+            $this->rc->output->show_message('managesieve.setupdated', 'confirmation');
+            $this->rc->output->command('parent.managesieve_updatelist', 'refresh');
+        }
+
+        $this->send();
+    }
+
+    function save()
+    {
+        // Init plugin and handle managesieve connection
+        $error = $this->start();
+
+        // get request size limits (#1488648)
+        $max_post = max(array(
+            ini_get('max_input_vars'),
+            ini_get('suhosin.request.max_vars'),
+            ini_get('suhosin.post.max_vars'),
+        ));
+        $max_depth = max(array(
+            ini_get('suhosin.request.max_array_depth'),
+            ini_get('suhosin.post.max_array_depth'),
+        ));
+
+        // check request size limit
+        if ($max_post && count($_POST, COUNT_RECURSIVE) >= $max_post) {
+            rcube::raise_error(array(
+                'code' => 500, 'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Request size limit exceeded (one of max_input_vars/suhosin.request.max_vars/suhosin.post.max_vars)"
+                ), true, false);
+            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
+        }
+        // check request depth limits
+        else if ($max_depth && count($_POST['_header']) > $max_depth) {
+            rcube::raise_error(array(
+                'code' => 500, 'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Request size limit exceeded (one of suhosin.request.max_array_depth/suhosin.post.max_array_depth)"
+                ), true, false);
+            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
+        }
+        // filters set add action
+        else if (!empty($_POST['_newset'])) {
+            $name       = rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true);
+            $copy       = rcube_utils::get_input_value('_copy', rcube_utils::INPUT_POST, true);
+            $from       = rcube_utils::get_input_value('_from', rcube_utils::INPUT_POST);
+            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
+            $kolab      = $this->rc->config->get('managesieve_kolab_master');
+            $name_uc    = mb_strtolower($name);
+            $list       = $this->list_scripts();
+
+            if (!$name) {
+                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
+            }
+            else if (mb_strlen($name) > 128) {
+                $this->errors['name'] = $this->plugin->gettext('nametoolong');
+            }
+            else if (!empty($exceptions) && in_array($name, (array)$exceptions)) {
+                $this->errors['name'] = $this->plugin->gettext('namereserved');
+            }
+            else if (!empty($kolab) && in_array($name_uc, array('MASTER', 'USER', 'MANAGEMENT'))) {
+                $this->errors['name'] = $this->plugin->gettext('namereserved');
+            }
+            else if (in_array($name, $list)) {
+                $this->errors['name'] = $this->plugin->gettext('setexist');
+            }
+            else if ($from == 'file') {
+                // from file
+                if (is_uploaded_file($_FILES['_file']['tmp_name'])) {
+                    $file = file_get_contents($_FILES['_file']['tmp_name']);
+                    $file = preg_replace('/\r/', '', $file);
+                    // for security don't save script directly
+                    // check syntax before, like this...
+                    $this->sieve->load_script($file);
+                    if (!$this->save_script($name)) {
+                        $this->errors['file'] = $this->plugin->gettext('setcreateerror');
+                    }
+                }
+                else {  // upload failed
+                    $err = $_FILES['_file']['error'];
+
+                    if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) {
+                        $msg = $this->rc->gettext(array('name' => 'filesizeerror',
+                            'vars' => array('size' =>
+                                $this->rc->show_bytes(rcube_utils::max_upload_size()))));
+                    }
+                    else {
+                        $this->errors['file'] = $this->plugin->gettext('fileuploaderror');
+                    }
+                }
+            }
+            else if (!$this->sieve->copy($name, $from == 'set' ? $copy : '')) {
+                $error = 'managesieve.setcreateerror';
+            }
+
+            if (!$error && empty($this->errors)) {
+                // Find position of the new script on the list
+                $list[] = $name;
+                asort($list, SORT_LOCALE_STRING);
+                $list  = array_values($list);
+                $index = array_search($name, $list);
+
+                $this->rc->output->show_message('managesieve.setcreated', 'confirmation');
+                $this->rc->output->command('parent.managesieve_updatelist', 'setadd',
+                    array('name' => $name, 'index' => $index));
+            }
+            else if ($msg) {
+                $this->rc->output->command('display_message', $msg, 'error');
+            }
+            else if ($error) {
+                $this->rc->output->show_message($error, 'error');
+            }
+        }
+        // filter add/edit action
+        else if (isset($_POST['_name'])) {
+            $name = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true));
+            $fid  = trim(rcube_utils::get_input_value('_fid', rcube_utils::INPUT_POST));
+            $join = trim(rcube_utils::get_input_value('_join', rcube_utils::INPUT_POST));
+
+            // and arrays
+            $headers        = rcube_utils::get_input_value('_header', rcube_utils::INPUT_POST);
+            $cust_headers   = rcube_utils::get_input_value('_custom_header', rcube_utils::INPUT_POST);
+            $cust_vars      = rcube_utils::get_input_value('_custom_var', rcube_utils::INPUT_POST);
+            $ops            = rcube_utils::get_input_value('_rule_op', rcube_utils::INPUT_POST);
+            $sizeops        = rcube_utils::get_input_value('_rule_size_op', rcube_utils::INPUT_POST);
+            $sizeitems      = rcube_utils::get_input_value('_rule_size_item', rcube_utils::INPUT_POST);
+            $sizetargets    = rcube_utils::get_input_value('_rule_size_target', rcube_utils::INPUT_POST);
+            $targets        = rcube_utils::get_input_value('_rule_target', rcube_utils::INPUT_POST, true);
+            $mods           = rcube_utils::get_input_value('_rule_mod', rcube_utils::INPUT_POST);
+            $mod_types      = rcube_utils::get_input_value('_rule_mod_type', rcube_utils::INPUT_POST);
+            $body_trans     = rcube_utils::get_input_value('_rule_trans', rcube_utils::INPUT_POST);
+            $body_types     = rcube_utils::get_input_value('_rule_trans_type', rcube_utils::INPUT_POST, true);
+            $comparators    = rcube_utils::get_input_value('_rule_comp', rcube_utils::INPUT_POST);
+            $indexes        = rcube_utils::get_input_value('_rule_index', rcube_utils::INPUT_POST);
+            $lastindexes    = rcube_utils::get_input_value('_rule_index_last', rcube_utils::INPUT_POST);
+            $dateheaders    = rcube_utils::get_input_value('_rule_date_header', rcube_utils::INPUT_POST);
+            $dateparts      = rcube_utils::get_input_value('_rule_date_part', rcube_utils::INPUT_POST);
+            $message        = rcube_utils::get_input_value('_rule_message', rcube_utils::INPUT_POST);
+            $dup_handles    = rcube_utils::get_input_value('_rule_duplicate_handle', rcube_utils::INPUT_POST, true);
+            $dup_headers    = rcube_utils::get_input_value('_rule_duplicate_header', rcube_utils::INPUT_POST, true);
+            $dup_uniqueids  = rcube_utils::get_input_value('_rule_duplicate_uniqueid', rcube_utils::INPUT_POST, true);
+            $dup_seconds    = rcube_utils::get_input_value('_rule_duplicate_seconds', rcube_utils::INPUT_POST);
+            $dup_lasts      = rcube_utils::get_input_value('_rule_duplicate_last', rcube_utils::INPUT_POST);
+            $act_types      = rcube_utils::get_input_value('_action_type', rcube_utils::INPUT_POST, true);
+            $mailboxes      = rcube_utils::get_input_value('_action_mailbox', rcube_utils::INPUT_POST, true);
+            $act_targets    = rcube_utils::get_input_value('_action_target', rcube_utils::INPUT_POST, true);
+            $domain_targets = rcube_utils::get_input_value('_action_target_domain', rcube_utils::INPUT_POST);
+            $area_targets   = rcube_utils::get_input_value('_action_target_area', rcube_utils::INPUT_POST, true);
+            $reasons        = rcube_utils::get_input_value('_action_reason', rcube_utils::INPUT_POST, true);
+            $addresses      = rcube_utils::get_input_value('_action_addresses', rcube_utils::INPUT_POST, true);
+            $intervals      = rcube_utils::get_input_value('_action_interval', rcube_utils::INPUT_POST);
+            $interval_types = rcube_utils::get_input_value('_action_interval_type', rcube_utils::INPUT_POST);
+            $from           = rcube_utils::get_input_value('_action_from', rcube_utils::INPUT_POST);
+            $subject        = rcube_utils::get_input_value('_action_subject', rcube_utils::INPUT_POST, true);
+            $flags          = rcube_utils::get_input_value('_action_flags', rcube_utils::INPUT_POST);
+            $varnames       = rcube_utils::get_input_value('_action_varname', rcube_utils::INPUT_POST);
+            $varvalues      = rcube_utils::get_input_value('_action_varvalue', rcube_utils::INPUT_POST);
+            $varmods        = rcube_utils::get_input_value('_action_varmods', rcube_utils::INPUT_POST);
+            $notifymethods  = rcube_utils::get_input_value('_action_notifymethod', rcube_utils::INPUT_POST);
+            $notifytargets  = rcube_utils::get_input_value('_action_notifytarget', rcube_utils::INPUT_POST, true);
+            $notifyoptions  = rcube_utils::get_input_value('_action_notifyoption', rcube_utils::INPUT_POST, true);
+            $notifymessages = rcube_utils::get_input_value('_action_notifymessage', rcube_utils::INPUT_POST, true);
+            $notifyfrom     = rcube_utils::get_input_value('_action_notifyfrom', rcube_utils::INPUT_POST);
+            $notifyimp      = rcube_utils::get_input_value('_action_notifyimportance', rcube_utils::INPUT_POST);
+
+            // we need a "hack" for radiobuttons
+            foreach ($sizeitems as $item)
+                $items[] = $item;
+
+            $this->form['disabled'] = !empty($_POST['_disabled']);
+            $this->form['join']     = $join == 'allof';
+            $this->form['name']     = $name;
+            $this->form['tests']    = array();
+            $this->form['actions']  = array();
+
+            if ($name == '')
+                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
+            else {
+                foreach ($this->script as $idx => $rule)
+                    if($rule['name'] == $name && $idx != $fid) {
+                        $this->errors['name'] = $this->plugin->gettext('ruleexist');
+                        break;
+                    }
+            }
+
+            $i = 0;
+            // rules
+            if ($join == 'any') {
+                $this->form['tests'][0]['test'] = 'true';
+            }
+            else {
+                foreach ($headers as $idx => $header) {
+                    // targets are indexed differently (assume form order)
+                    $target     = $this->strip_value(array_shift($targets), true);
+                    $header     = $this->strip_value($header);
+                    $operator   = $this->strip_value($ops[$idx]);
+                    $comparator = $this->strip_value($comparators[$idx]);
+
+                    if ($header == 'size') {
+                        $sizeop     = $this->strip_value($sizeops[$idx]);
+                        $sizeitem   = $this->strip_value($items[$idx]);
+                        $sizetarget = $this->strip_value($sizetargets[$idx]);
+
+                        $this->form['tests'][$i]['test'] = 'size';
+                        $this->form['tests'][$i]['type'] = $sizeop;
+                        $this->form['tests'][$i]['arg']  = $sizetarget;
+
+                        if ($sizetarget == '')
+                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('cannotbeempty');
+                        else if (!preg_match('/^[0-9]+(K|M|G)?$/i', $sizetarget.$sizeitem, $m)) {
+                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('forbiddenchars');
+                            $this->form['tests'][$i]['item'] = $sizeitem;
+                        }
+                        else
+                            $this->form['tests'][$i]['arg'] .= $m[1];
+                    }
+                    else if ($header == 'currentdate') {
+                        $datepart = $this->strip_value($dateparts[$idx]);
+
+                        if (preg_match('/^not/', $operator))
+                            $this->form['tests'][$i]['not'] = true;
+                        $type = preg_replace('/^not/', '', $operator);
+
+                        if ($type == 'exists') {
+                            $this->errors['tests'][$i]['op'] = true;
+                        }
+
+                        $this->form['tests'][$i]['test'] = 'currentdate';
+                        $this->form['tests'][$i]['type'] = $type;
+                        $this->form['tests'][$i]['part'] = $datepart;
+                        $this->form['tests'][$i]['arg']  = $target;
+
+                        if ($type != 'exists') {
+                            if (!count($target)) {
+                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                            }
+                            else if (strpos($type, 'count-') === 0) {
+                                foreach ($target as $arg) {
+                                    if (preg_match('/[^0-9]/', $arg)) {
+                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
+                                    }
+                                }
+                            }
+                            else if (strpos($type, 'value-') === 0) {
+                                // Some date/time formats do not support i;ascii-numeric comparator
+                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, array('date', 'time', 'iso8601', 'std11'))) {
+                                    $comparator = '';
+                                }
+                            }
+
+                            if (!preg_match('/^(regex|matches|count-)/', $type) && count($target)) {
+                                foreach ($target as $arg) {
+                                    if (!$this->validate_date_part($datepart, $arg)) {
+                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else if ($header == 'date') {
+                        $datepart    = $this->strip_value($dateparts[$idx]);
+                        $dateheader  = $this->strip_value($dateheaders[$idx]);
+                        $index       = $this->strip_value($indexes[$idx]);
+                        $indexlast   = $this->strip_value($lastindexes[$idx]);
+
+                        if (preg_match('/^not/', $operator))
+                            $this->form['tests'][$i]['not'] = true;
+                        $type = preg_replace('/^not/', '', $operator);
+
+                        if ($type == 'exists') {
+                            $this->errors['tests'][$i]['op'] = true;
+                        }
+
+                        if (!empty($index) && $mod != 'envelope') {
+                            $this->form['tests'][$i]['index'] = intval($index);
+                            $this->form['tests'][$i]['last']  = !empty($indexlast);
+                        }
+
+                        if (empty($dateheader)) {
+                            $dateheader = 'Date';
+                        }
+                        else if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $dateheader)) {
+                            $this->errors['tests'][$i]['dateheader'] = $this->plugin->gettext('forbiddenchars');
+                        }
+
+                        $this->form['tests'][$i]['test']   = 'date';
+                        $this->form['tests'][$i]['type']   = $type;
+                        $this->form['tests'][$i]['part']   = $datepart;
+                        $this->form['tests'][$i]['arg']    = $target;
+                        $this->form['tests'][$i]['header'] = $dateheader;
+
+                        if ($type != 'exists') {
+                            if (!count($target)) {
+                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                            }
+                            else if (strpos($type, 'count-') === 0) {
+                                foreach ($target as $arg) {
+                                    if (preg_match('/[^0-9]/', $arg)) {
+                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
+                                    }
+                                }
+                            }
+                            else if (strpos($type, 'value-') === 0) {
+                                // Some date/time formats do not support i;ascii-numeric comparator
+                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, array('date', 'time', 'iso8601', 'std11'))) {
+                                    $comparator = '';
+                                }
+                            }
+
+                            if (count($target) && !preg_match('/^(regex|matches|count-)/', $type)) {
+                                foreach ($target as $arg) {
+                                    if (!$this->validate_date_part($datepart, $arg)) {
+                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else if ($header == 'body') {
+                        $trans      = $this->strip_value($body_trans[$idx]);
+                        $trans_type = $this->strip_value($body_types[$idx], true);
+
+                        if (preg_match('/^not/', $operator))
+                            $this->form['tests'][$i]['not'] = true;
+                        $type = preg_replace('/^not/', '', $operator);
+
+                        if ($type == 'exists') {
+                            $this->errors['tests'][$i]['op'] = true;
+                        }
+
+                        $this->form['tests'][$i]['test'] = 'body';
+                        $this->form['tests'][$i]['type'] = $type;
+                        $this->form['tests'][$i]['arg']  = $target;
+
+                        if (empty($target) && $type != 'exists') {
+                            $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                        }
+                        else if (preg_match('/^(value|count)-/', $type)) {
+                            foreach ($target as $target_value) {
+                                if (preg_match('/[^0-9]/', $target_value)) {
+                                    $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
+                                }
+                            }
+                        }
+
+                        $this->form['tests'][$i]['part'] = $trans;
+                        if ($trans == 'content') {
+                            $this->form['tests'][$i]['content'] = $trans_type;
+                        }
+                    }
+                    else if ($header == 'message') {
+                        $test = $this->strip_value($message[$idx]);
+
+                        if (preg_match('/^not/', $test)) {
+                            $this->form['tests'][$i]['not'] = true;
+                            $test = substr($test, 3);
+                        }
+
+                        $this->form['tests'][$i]['test'] = $test;
+
+                        if ($test == 'duplicate') {
+                            $this->form['tests'][$i]['last']     = !empty($dup_lasts[$idx]);
+                            $this->form['tests'][$i]['handle']   = trim($dup_handles[$idx]);
+                            $this->form['tests'][$i]['header']   = trim($dup_headers[$idx]);
+                            $this->form['tests'][$i]['uniqueid'] = trim($dup_uniqueids[$idx]);
+                            $this->form['tests'][$i]['seconds']  = trim($dup_seconds[$idx]);
+
+                            if ($this->form['tests'][$i]['seconds']
+                                && preg_match('/[^0-9]/', $this->form['tests'][$i]['seconds'])
+                            ) {
+                                $this->errors['tests'][$i]['duplicate_seconds'] = $this->plugin->gettext('forbiddenchars');
+                            }
+
+                            if ($this->form['tests'][$i]['header'] && $this->form['tests'][$i]['uniqueid']) {
+                                $this->errors['tests'][$i]['duplicate_uniqueid'] = $this->plugin->gettext('duplicate.conflict.err');
+                            }
+                        }
+                    }
+                    else {
+                        $cust_header = $headers = $this->strip_value(array_shift($cust_headers));
+                        $mod         = $this->strip_value($mods[$idx]);
+                        $mod_type    = $this->strip_value($mod_types[$idx]);
+                        $index       = $this->strip_value($indexes[$idx]);
+                        $indexlast   = $this->strip_value($lastindexes[$idx]);
+
+                        if ($header == 'string') {
+                            $cust_var = $headers = $this->strip_value(array_shift($cust_vars));
+                        }
+
+                        if (preg_match('/^not/', $operator))
+                            $this->form['tests'][$i]['not'] = true;
+                        $type = preg_replace('/^not/', '', $operator);
+
+                        if (!empty($index) && $mod != 'envelope') {
+                            $this->form['tests'][$i]['index'] = intval($index);
+                            $this->form['tests'][$i]['last']  = !empty($indexlast);
+                        }
+
+                        if ($header == '...' || $header == 'string') {
+                            if (!count($headers))
+                                $this->errors['tests'][$i]['header'] = $this->plugin->gettext('cannotbeempty');
+                            else if ($header == '...') {
+                                foreach ($headers as $hr) {
+                                    // RFC2822: printable ASCII except colon
+                                    if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $hr)) {
+                                        $this->errors['tests'][$i]['header'] = $this->plugin->gettext('forbiddenchars');
+                                    }
+                                }
+                            }
+
+                            if (empty($this->errors['tests'][$i]['header']))
+                                $cust_header = $cust_var = (is_array($headers) && count($headers) == 1) ? $headers[0] : $headers;
+                        }
+
+                        $test   = $header == 'string' ? 'string' : 'header';
+                        $header = $header == 'string' ? $cust_var : $header;
+                        $header = $header == '...' ? $cust_header : $header;
+
+                        if (is_array($header)) {
+                            foreach ($header as $h_index => $val) {
+                                if (isset($this->headers[$val])) {
+                                    $header[$h_index] = $this->headers[$val];
+                                }
+                            }
+                        }
+
+                        if ($type == 'exists') {
+                            $this->form['tests'][$i]['test'] = 'exists';
+                            $this->form['tests'][$i]['arg'] = $header;
+                        }
+                        else {
+                            if ($mod == 'address' || $mod == 'envelope') {
+                                $found = false;
+                                if (empty($this->errors['tests'][$i]['header'])) {
+                                    foreach ((array)$header as $hdr) {
+                                        if (!in_array(strtolower(trim($hdr)), $this->addr_headers))
+                                            $found = true;
+                                    }
+                                }
+                                if (!$found)
+                                    $test = $mod;
+                            }
+
+                            $this->form['tests'][$i]['type'] = $type;
+                            $this->form['tests'][$i]['test'] = $test;
+                            $this->form['tests'][$i]['arg1'] = $header;
+                            $this->form['tests'][$i]['arg2'] = $target;
+
+                            if (empty($target)) {
+                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                            }
+                            else if (preg_match('/^(value|count)-/', $type)) {
+                                foreach ($target as $target_value) {
+                                    if (preg_match('/[^0-9]/', $target_value)) {
+                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
+                                    }
+                                }
+                            }
+
+                            if ($mod) {
+                                $this->form['tests'][$i]['part'] = $mod_type;
+                            }
+                        }
+                    }
+
+                    if ($header != 'size' && $comparator) {
+                        $this->form['tests'][$i]['comparator'] = $comparator;
+                    }
+
+                    $i++;
+                }
+            }
+
+            $i = 0;
+            // actions
+            foreach ($act_types as $idx => $type) {
+                $type = $this->strip_value($type);
+
+                switch ($type) {
+                case 'fileinto':
+                case 'fileinto_copy':
+                    $mailbox = $this->strip_value($mailboxes[$idx], false, false);
+                    $this->form['actions'][$i]['target'] = $this->mod_mailbox($mailbox, 'in');
+
+                    if ($type == 'fileinto_copy') {
+                        $type = 'fileinto';
+                        $this->form['actions'][$i]['copy'] = true;
+                    }
+                    break;
+
+                case 'reject':
+                case 'ereject':
+                    $target = $this->strip_value($area_targets[$idx]);
+                    $this->form['actions'][$i]['target'] = str_replace("\r\n", "\n", $target);
+
+ //                 if ($target == '')
+//                      $this->errors['actions'][$i]['targetarea'] = $this->plugin->gettext('cannotbeempty');
+                    break;
+
+                case 'redirect':
+                case 'redirect_copy':
+                    $target = $this->strip_value($act_targets[$idx]);
+                    $domain = $this->strip_value($domain_targets[$idx]);
+
+                    // force one of the configured domains
+                    $domains = (array) $this->rc->config->get('managesieve_domains');
+                    if (!empty($domains) && !empty($target)) {
+                        if (!$domain || !in_array($domain, $domains)) {
+                            $domain = $domains[0];
+                        }
+
+                        $target .= '@' . $domain;
+                    }
+
+                    $this->form['actions'][$i]['target'] = $target;
+
+                    if ($target == '')
+                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                    else if (!rcube_utils::check_email($target))
+                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext(!empty($domains) ? 'forbiddenchars' : 'noemailwarning');
+
+                    if ($type == 'redirect_copy') {
+                        $type = 'redirect';
+                        $this->form['actions'][$i]['copy'] = true;
+                    }
+
+                    break;
+
+                case 'addflag':
+                case 'setflag':
+                case 'removeflag':
+                    $_target = array();
+                    if (empty($flags[$idx])) {
+                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('noflagset');
+                    }
+                    else {
+                        foreach ($flags[$idx] as $flag) {
+                            $_target[] = $this->strip_value($flag);
+                        }
+                    }
+                    $this->form['actions'][$i]['target'] = $_target;
+                    break;
+
+                case 'vacation':
+                    $reason        = $this->strip_value($reasons[$idx]);
+                    $interval_type = $interval_types[$idx] == 'seconds' ? 'seconds' : 'days';
+
+                    $this->form['actions'][$i]['reason']    = str_replace("\r\n", "\n", $reason);
+                    $this->form['actions'][$i]['from']      = $from[$idx];
+                    $this->form['actions'][$i]['subject']   = $subject[$idx];
+                    $this->form['actions'][$i]['addresses'] = array_shift($addresses);
+                    $this->form['actions'][$i][$interval_type] = $intervals[$idx];
+// @TODO: vacation :mime, :handle
+
+                    foreach ((array)$this->form['actions'][$i]['addresses'] as $aidx => $address) {
+                        $this->form['actions'][$i]['addresses'][$aidx] = $address = trim($address);
+
+                        if (empty($address)) {
+                            unset($this->form['actions'][$i]['addresses'][$aidx]);
+                        }
+                        else if (!rcube_utils::check_email($address)) {
+                            $this->errors['actions'][$i]['addresses'] = $this->plugin->gettext('noemailwarning');
+                            break;
+                        }
+                    }
+
+                    if (!empty($this->form['actions'][$i]['from']) && !rcube_utils::check_email($this->form['actions'][$i]['from'])) {
+                        $this->errors['actions'][$i]['from'] = $this->plugin->gettext('noemailwarning');
+                    }
+
+                    if ($this->form['actions'][$i]['reason'] == '')
+                        $this->errors['actions'][$i]['reason'] = $this->plugin->gettext('cannotbeempty');
+                    if ($this->form['actions'][$i][$interval_type] && !preg_match('/^[0-9]+$/', $this->form['actions'][$i][$interval_type]))
+                        $this->errors['actions'][$i]['interval'] = $this->plugin->gettext('forbiddenchars');
+                    break;
+
+                case 'set':
+                    $this->form['actions'][$i]['name'] = $varnames[$idx];
+                    $this->form['actions'][$i]['value'] = $varvalues[$idx];
+                    foreach ((array)$varmods[$idx] as $v_m) {
+                        $this->form['actions'][$i][$v_m] = true;
+                    }
+
+                    if (empty($varnames[$idx])) {
+                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('cannotbeempty');
+                    }
+                    else if (!preg_match('/^[0-9a-z_]+$/i', $varnames[$idx])) {
+                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('forbiddenchars');
+                    }
+
+                    if (!isset($varvalues[$idx]) || $varvalues[$idx] === '') {
+                        $this->errors['actions'][$i]['value'] = $this->plugin->gettext('cannotbeempty');
+                    }
+                    break;
+
+                case 'notify':
+                    if (empty($notifymethods[$idx])) {
+                        $this->errors['actions'][$i]['method'] = $this->plugin->gettext('cannotbeempty');
+                    }
+                    if (empty($notifytargets[$idx])) {
+                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
+                    }
+                    if (!empty($notifyfrom[$idx]) && !rcube_utils::check_email($notifyfrom[$idx])) {
+                        $this->errors['actions'][$i]['from'] = $this->plugin->gettext('noemailwarning');
+                    }
+
+                    // skip empty options
+                    foreach ((array)$notifyoptions[$idx] as $opt_idx => $opt) {
+                        if (!strlen(trim($opt))) {
+                            unset($notifyoptions[$idx][$opt_idx]);
+                        }
+                    }
+
+                    $this->form['actions'][$i]['method']     = $notifymethods[$idx] . ':' . $notifytargets[$idx];
+                    $this->form['actions'][$i]['options']    = $notifyoptions[$idx];
+                    $this->form['actions'][$i]['message']    = $notifymessages[$idx];
+                    $this->form['actions'][$i]['from']       = $notifyfrom[$idx];
+                    $this->form['actions'][$i]['importance'] = $notifyimp[$idx];
+                    break;
+                }
+
+                $this->form['actions'][$i]['type'] = $type;
+                $i++;
+            }
+
+            if (!$this->errors && !$error) {
+                // save the script
+                if (!isset($this->script[$fid])) {
+                    $fid = $this->sieve->script->add_rule($this->form);
+                    $new = true;
+                }
+                else {
+                    $fid = $this->sieve->script->update_rule($fid, $this->form);
+                }
+
+                if ($fid !== false) {
+                    $save = $this->save_script();
+                }
+
+                if ($save && $fid !== false) {
+                    $this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
+                    if ($this->rc->task != 'mail') {
+                        $this->rc->output->command('parent.managesieve_updatelist',
+                            isset($new) ? 'add' : 'update',
+                            array(
+                                'name' => $this->form['name'],
+                                'id' => $fid,
+                                'disabled' => $this->form['disabled']
+                        ));
+                    }
+                    else {
+                        $this->rc->output->command('managesieve_dialog_close');
+                        $this->rc->output->send('iframe');
+                    }
+                }
+                else {
+                    $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
+                }
+            }
+            else {
+                $this->rc->output->show_message('managesieve.filterformerror', 'warning');
+            }
+        }
+
+        $this->send();
+    }
+
+    protected function send()
+    {
+        // Handle form action
+        if (isset($_GET['_framed']) || isset($_POST['_framed'])) {
+            if (isset($_GET['_newset']) || isset($_POST['_newset'])) {
+                $this->rc->output->send('managesieve.setedit');
+            }
+            else if (isset($_GET['_seteditraw']) || isset($_POST['_seteditraw'])) {
+                $this->rc->output->send('managesieve.seteditraw');
+            }
+            else {
+                $this->rc->output->send('managesieve.filteredit');
+            }
+        }
+        else {
+            $this->rc->output->set_pagetitle($this->plugin->gettext('filters'));
+            $this->rc->output->send('managesieve.managesieve');
+        }
+    }
+
+    // return the filters list as HTML table
+    function filters_list($attrib)
+    {
+        // add id to message list table if not specified
+        if (!strlen($attrib['id']))
+            $attrib['id'] = 'rcmfilterslist';
+
+        // define list of cols to be displayed
+        $a_show_cols = array('name');
+
+        $result = $this->list_rules();
+
+        // create XHTML table
+        $out = $this->rc->table_output($attrib, $result, $a_show_cols, 'id');
+
+        // set client env
+        $this->rc->output->add_gui_object('filterslist', $attrib['id']);
+        $this->rc->output->include_script('list.js');
+
+        // add some labels to client
+        $this->rc->output->add_label('managesieve.filterdeleteconfirm');
+
+        return $out;
+    }
+
+    // return the filters list as <SELECT>
+    function filtersets_list($attrib, $no_env = false)
+    {
+        // add id to message list table if not specified
+        if (!strlen($attrib['id'])) {
+            $attrib['id'] = 'rcmfiltersetslist';
+        }
+
+        $list = $this->list_scripts();
+
+        if ($list) {
+            asort($list, SORT_LOCALE_STRING);
+        }
+
+        if (!empty($attrib['type']) && $attrib['type'] == 'list') {
+            // define list of cols to be displayed
+            $a_show_cols = array('name');
+
+            if ($list) {
+                foreach ($list as $idx => $set) {
+                    $scripts['S'.$idx] = $set;
+                    $result[] = array(
+                        'name' => $set,
+                        'id' => 'S'.$idx,
+                        'class' => !in_array($set, $this->active) ? 'disabled' : '',
+                    );
+                }
+            }
+
+            // create XHTML table
+            $out = $this->rc->table_output($attrib, $result, $a_show_cols, 'id');
+
+            $this->rc->output->set_env('filtersets', $scripts);
+            $this->rc->output->include_script('list.js');
+        }
+        else {
+            $select = new html_select(array('name' => '_set', 'id' => $attrib['id'],
+                'onchange' => $this->rc->task != 'mail' ? 'rcmail.managesieve_set()' : ''));
+
+            if ($list) {
+                foreach ($list as $set)
+                    $select->add($set, $set);
+            }
+
+            $out = $select->show($this->sieve->current);
+        }
+
+        // set client env
+        if (!$no_env) {
+            $this->rc->output->add_gui_object('filtersetslist', $attrib['id']);
+            $this->rc->output->add_label('managesieve.setdeleteconfirm');
+        }
+
+        return $out;
+    }
+
+    function filter_frame($attrib)
+    {
+        return $this->rc->output->frame($attrib, true);
+    }
+
+    function filterset_editraw($attrib)
+    {
+        $script_name = isset($_GET['_set']) ? $_GET['_set'] : $_POST['_set'];
+        $script      = $this->sieve->get_script($script_name);
+        $script_post = $_POST['rawsetcontent'];
+
+        $out = '<form name="filtersetrawform" action="./" method="post" enctype="multipart/form-data">'."\n";
+
+        $hiddenfields = new html_hiddenfield();
+        $hiddenfields->add(array('name' => '_task',   'value' => $this->rc->task));
+        $hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-saveraw'));
+        $hiddenfields->add(array('name' => '_set',    'value' => $script_name));
+        $hiddenfields->add(array('name' => '_seteditraw', 'value' => 1));
+        $hiddenfields->add(array('name' => '_framed', 'value' => ($_POST['_framed'] || $_GET['_framed'] ? 1 : 0)));
+
+        $out .= $hiddenfields->show();
+
+        $txtarea = new html_textarea(array(
+                'id'   => 'rawfiltersettxt',
+                'name' => 'rawsetcontent',
+                'rows' => '15'
+        ));
+
+        $out .= $txtarea->show($script_post !== null ? $script_post : ($script !== false ? rtrim($script) : ''));
+
+        $this->rc->output->add_gui_object('sievesetrawform', 'filtersetrawform');
+        $this->plugin->include_stylesheet('codemirror/lib/codemirror.css');
+        $this->plugin->include_script('codemirror/lib/codemirror.js');
+        $this->plugin->include_script('codemirror/addon/selection/active-line.js');
+        $this->plugin->include_script('codemirror/mode/sieve/sieve.js');
+
+        if ($script === false) {
+            $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
+        }
+
+        return $out;
+    }
+
+    function filterset_form($attrib)
+    {
+        if (!$attrib['id'])
+            $attrib['id'] = 'rcmfiltersetform';
+
+        $out = '<form name="filtersetform" action="./" method="post" enctype="multipart/form-data">'."\n";
+
+        $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $this->rc->task));
+        $hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-save'));
+        $hiddenfields->add(array('name' => '_framed', 'value' => ($_POST['_framed'] || $_GET['_framed'] ? 1 : 0)));
+        $hiddenfields->add(array('name' => '_newset', 'value' => 1));
+
+        $out .= $hiddenfields->show();
+
+        $name     = rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST);
+        $copy     = rcube_utils::get_input_value('_copy', rcube_utils::INPUT_POST);
+        $selected = rcube_utils::get_input_value('_from', rcube_utils::INPUT_POST);
+
+        // filter set name input
+        $input_name = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30,
+            'class' => ($this->errors['name'] ? 'error' : '')));
+
+        $out .= sprintf('<label for="%s"><b>%s:</b></label> %s<br><br>',
+            '_name', rcube::Q($this->plugin->gettext('filtersetname')), $input_name->show($name));
+
+        $out .="\n<fieldset class=\"itemlist\"><legend>" . $this->plugin->gettext('filters') . ":</legend>\n";
+        $out .= html::tag('input', array(
+                'type'    => 'radio',
+                'id'      => 'from_none',
+                'name'    => '_from',
+                'value'   => 'none',
+                'checked' => !$selected || $selected == 'none'
+            ));
+        $out .= html::label('from_none', rcube::Q($this->plugin->gettext('none')));
+
+        // filters set list
+        $list   = $this->list_scripts();
+        $select = new html_select(array('name' => '_copy', 'id' => '_copy'));
+
+        if (is_array($list)) {
+            asort($list, SORT_LOCALE_STRING);
+
+            if (!$copy)
+                $copy = $_SESSION['managesieve_current'];
+
+            foreach ($list as $set) {
+                $select->add($set, $set);
+            }
+
+            $out .= '<br>';
+            $out .= html::tag('input', array(
+                    'type'    => 'radio',
+                    'id'      => 'from_set',
+                    'name'    => '_from',
+                    'value'   => 'set',
+                    'checked' => $selected == 'set',
+                ));
+            $out .= html::label('from_set', rcube::Q($this->plugin->gettext('fromset')));
+            $out .= $select->show($copy);
+        }
+
+        // script upload box
+        $upload = new html_inputfield(array('name' => '_file', 'id' => '_file', 'size' => 30,
+            'type' => 'file', 'class' => ($this->errors['file'] ? 'error' : '')));
+
+        $out .= '<br>';
+        $out .= html::tag('input', array(
+                'type'    => 'radio',
+                'id'      => 'from_file',
+                'name'    => '_from',
+                'value'   => 'file',
+                'checked' => $selected == 'file',
+            ));
+        $out .= html::label('from_file', rcube::Q($this->plugin->gettext('fromfile')));
+        $out .= $upload->show();
+        $out .= '</fieldset>';
+
+        $this->rc->output->add_gui_object('sieveform', 'filtersetform');
+
+        if ($this->errors['name'])
+            $this->add_tip('_name', $this->errors['name'], true);
+        if ($this->errors['file'])
+            $this->add_tip('_file', $this->errors['file'], true);
+
+        $this->print_tips();
+
+        return $out;
+    }
+
+
+    function filter_form($attrib)
+    {
+        if (!$attrib['id'])
+            $attrib['id'] = 'rcmfilterform';
+
+        $fid = rcube_utils::get_input_value('_fid', rcube_utils::INPUT_GPC);
+        $scr = isset($this->form) ? $this->form : $this->script[$fid];
+
+        $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $this->rc->task));
+        $hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-save'));
+        $hiddenfields->add(array('name' => '_framed', 'value' => ($_POST['_framed'] || $_GET['_framed'] ? 1 : 0)));
+        $hiddenfields->add(array('name' => '_fid', 'value' => $fid));
+
+        $out = '<form name="filterform" action="./" method="post">'."\n";
+        $out .= $hiddenfields->show();
+
+        // 'any' flag
+        if ((!isset($this->form) && empty($scr['tests']) && !empty($scr))
+            || (count($scr['tests']) == 1 && $scr['tests'][0]['test'] == 'true' && !$scr['tests'][0]['not'])
+        ) {
+            $any = true;
+        }
+
+        // filter name input
+        $field_id = '_name';
+        $input_name = new html_inputfield(array('name' => '_name', 'id' => $field_id, 'size' => 30,
+            'class' => ($this->errors['name'] ? 'error' : '')));
+
+        if ($this->errors['name'])
+            $this->add_tip($field_id, $this->errors['name'], true);
+
+        if (isset($scr))
+            $input_name = $input_name->show($scr['name']);
+        else
+            $input_name = $input_name->show();
+
+        $out .= sprintf("\n<label for=\"%s\"><b>%s:</b></label> %s\n",
+            $field_id, rcube::Q($this->plugin->gettext('filtername')), $input_name);
+
+        // filter set selector
+        if ($this->rc->task == 'mail') {
+            $out .= sprintf("\n&nbsp;<label for=\"%s\"><b>%s:</b></label> %s\n",
+                $field_id, rcube::Q($this->plugin->gettext('filterset')),
+                $this->filtersets_list(array('id' => 'sievescriptname'), true));
+        }
+
+        $out .= '<br><br><fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesrules')) . "</legend>\n";
+
+        // any, allof, anyof radio buttons
+        $field_id = '_allof';
+        $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'allof',
+            'onclick' => 'rule_join_radio(\'allof\')', 'class' => 'radio'));
+
+        if (isset($scr) && !$any)
+            $input_join = $input_join->show($scr['join'] ? 'allof' : '');
+        else
+            $input_join = $input_join->show();
+
+        $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterallof')));
+
+        $field_id = '_anyof';
+        $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'anyof',
+            'onclick' => 'rule_join_radio(\'anyof\')', 'class' => 'radio'));
+
+        if (isset($scr) && !$any)
+            $input_join = $input_join->show($scr['join'] ? '' : 'anyof');
+        else
+            $input_join = $input_join->show('anyof'); // default
+
+        $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filteranyof')));
+
+        $field_id = '_any';
+        $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'any',
+            'onclick' => 'rule_join_radio(\'any\')', 'class' => 'radio'));
+
+        $input_join = $input_join->show($any ? 'any' : '');
+
+        $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterany')));
+
+        $rows_num = !empty($scr['tests']) ? count($scr['tests']) : 1;
+
+        $out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
+        for ($x=0; $x<$rows_num; $x++)
+            $out .= $this->rule_div($fid, $x);
+        $out .= "</div>\n";
+
+        $out .= "</fieldset>\n";
+
+        // actions
+        $out .= '<fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesactions')) . "</legend>\n";
+
+        $rows_num = isset($scr) ? count($scr['actions']) : 1;
+
+        $out .= '<div id="actions">';
+        for ($x=0; $x<$rows_num; $x++)
+            $out .= $this->action_div($fid, $x);
+        $out .= "</div>\n";
+
+        $out .= "</fieldset>\n";
+
+        $this->print_tips();
+
+        if ($scr['disabled']) {
+            $this->rc->output->set_env('rule_disabled', true);
+        }
+        $this->rc->output->add_label(
+            'managesieve.ruledeleteconfirm',
+            'managesieve.actiondeleteconfirm'
+        );
+        $this->rc->output->add_gui_object('sieveform', 'filterform');
+
+        return $out;
+    }
+
+    function rule_div($fid, $id, $div=true)
+    {
+        $rule     = isset($this->form) ? $this->form['tests'][$id] : $this->script[$fid]['tests'][$id];
+        $rows_num = isset($this->form) ? count($this->form['tests']) : count($this->script[$fid]['tests']);
+
+        // headers select
+        $select_header = new html_select(array('name' => "_header[]", 'id' => 'header'.$id,
+            'onchange' => 'rule_header_select(' .$id .')'));
+
+        foreach ($this->headers as $index => $header) {
+            $header = $this->rc->text_exists($index) ? $this->plugin->gettext($index) : $header;
+            $select_header->add($header, $index);
+        }
+        $select_header->add($this->plugin->gettext('...'), '...');
+        if (in_array('body', $this->exts)) {
+            $select_header->add($this->plugin->gettext('body'), 'body');
+        }
+        $select_header->add($this->plugin->gettext('size'), 'size');
+        if (in_array('date', $this->exts)) {
+            $select_header->add($this->plugin->gettext('datetest'), 'date');
+            $select_header->add($this->plugin->gettext('currdate'), 'currentdate');
+        }
+        if (in_array('variables', $this->exts)) {
+            $select_header->add($this->plugin->gettext('string'), 'string');
+        }
+        if (in_array('duplicate', $this->exts)) {
+            $select_header->add($this->plugin->gettext('message'), 'message');
+        }
+
+        if (isset($rule['test'])) {
+            if (in_array($rule['test'], array('header', 'address', 'envelope'))) {
+                if (is_array($rule['arg1']) && count($rule['arg1']) == 1) {
+                    $rule['arg1'] = $rule['arg1'][0];
+                }
+
+                $matches = ($header = strtolower($rule['arg1'])) && isset($this->headers[$header]);
+                $test    = $matches ? $header : '...';
+            }
+            else if ($rule['test'] == 'exists') {
+                if (is_array($rule['arg']) && count($rule['arg']) == 1) {
+                    $rule['arg'] = $rule['arg'][0];
+                }
+
+                $matches = ($header = strtolower($rule['arg'])) && isset($this->headers[$header]);
+                $test    = $matches ? $header : '...';
+            }
+            else if (in_array($rule['test'], array('size', 'body', 'date', 'currentdate', 'string'))) {
+                $test = $rule['test'];
+            }
+            else if (in_array($rule['test'], array('duplicate'))) {
+                $test = 'message';
+            }
+            else if ($rule['test'] != 'true') {
+                $test = '...';
+            }
+        }
+
+        $aout = $select_header->show($test);
+
+        // custom headers input
+        if (isset($rule['test']) && in_array($rule['test'], array('header', 'address', 'envelope'))) {
+            $custom = (array) $rule['arg1'];
+            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
+                unset($custom);
+            }
+        }
+        else if (isset($rule['test']) && $rule['test'] == 'string') {
+            $customv = (array) $rule['arg1'];
+            if (count($customv) == 1 && isset($this->headers[strtolower($customv[0])])) {
+                unset($customv);
+            }
+        }
+        else if (isset($rule['test']) && $rule['test'] == 'exists') {
+            $custom = (array) $rule['arg'];
+            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
+                unset($custom);
+            }
+        }
+
+        // custom variable input
+        $tout = $this->list_input($id, 'custom_header', $custom, isset($custom),
+            $this->error_class($id, 'test', 'header', 'custom_header'), 15) . "\n";
+
+        $tout .= $this->list_input($id, 'custom_var', $customv, isset($customv),
+            $this->error_class($id, 'test', 'header', 'custom_var'), 15) . "\n";
+
+        // matching type select (operator)
+        $select_op = new html_select(array('name' => "_rule_op[]", 'id' => 'rule_op'.$id,
+            'style' => 'display:' .(!in_array($rule['test'], array('size', 'duplicate')) ? 'inline' : 'none'),
+            'class' => 'operator_selector',
+            'onchange' => 'rule_op_select(this, '.$id.')'));
+        $select_op->add(rcube::Q($this->plugin->gettext('filtercontains')), 'contains');
+        $select_op->add(rcube::Q($this->plugin->gettext('filternotcontains')), 'notcontains');
+        $select_op->add(rcube::Q($this->plugin->gettext('filteris')), 'is');
+        $select_op->add(rcube::Q($this->plugin->gettext('filterisnot')), 'notis');
+        $select_op->add(rcube::Q($this->plugin->gettext('filterexists')), 'exists');
+        $select_op->add(rcube::Q($this->plugin->gettext('filternotexists')), 'notexists');
+        $select_op->add(rcube::Q($this->plugin->gettext('filtermatches')), 'matches');
+        $select_op->add(rcube::Q($this->plugin->gettext('filternotmatches')), 'notmatches');
+        if (in_array('regex', $this->exts)) {
+            $select_op->add(rcube::Q($this->plugin->gettext('filterregex')), 'regex');
+            $select_op->add(rcube::Q($this->plugin->gettext('filternotregex')), 'notregex');
+        }
+        if (in_array('relational', $this->exts)) {
+            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthan')), 'count-gt');
+            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthanequal')), 'count-ge');
+            $select_op->add(rcube::Q($this->plugin->gettext('countislessthan')), 'count-lt');
+            $select_op->add(rcube::Q($this->plugin->gettext('countislessthanequal')), 'count-le');
+            $select_op->add(rcube::Q($this->plugin->gettext('countequals')), 'count-eq');
+            $select_op->add(rcube::Q($this->plugin->gettext('countnotequals')), 'count-ne');
+            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthan')), 'value-gt');
+            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthanequal')), 'value-ge');
+            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthan')), 'value-lt');
+            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthanequal')), 'value-le');
+            $select_op->add(rcube::Q($this->plugin->gettext('valueequals')), 'value-eq');
+            $select_op->add(rcube::Q($this->plugin->gettext('valuenotequals')), 'value-ne');
+        }
+
+        $test   = self::rule_test($rule);
+        $target = '';
+
+        // target(s) input
+        if (in_array($rule['test'], array('header', 'address', 'envelope','string'))) {
+            $target = $rule['arg2'];
+        }
+        else if (in_array($rule['test'], array('body', 'date', 'currentdate'))) {
+            $target = $rule['arg'];
+        }
+        else if ($rule['test'] == 'size') {
+            if (preg_match('/^([0-9]+)(K|M|G)?$/', $rule['arg'], $matches)) {
+                $sizetarget = $matches[1];
+                $sizeitem   = $matches[2];
+            }
+            else {
+                $sizetarget = $rule['arg'];
+                $sizeitem   = $rule['item'];
+            }
+        }
+
+        // (current)date part select
+        if (in_array('date', $this->exts) || in_array('currentdate', $this->exts)) {
+            $date_parts = array('date', 'iso8601', 'std11', 'julian', 'time',
+                'year', 'month', 'day', 'hour', 'minute', 'second', 'weekday', 'zone');
+            $select_dp = new html_select(array('name' => "_rule_date_part[]", 'id' => 'rule_date_part'.$id,
+                'style' => in_array($rule['test'], array('currentdate', 'date')) && !preg_match('/^(notcount|count)-/', $test) ? '' : 'display:none',
+                'class' => 'datepart_selector',
+            ));
+
+            foreach ($date_parts as $part) {
+                $select_dp->add(rcube::Q($this->plugin->gettext($part)), $part);
+            }
+
+            $tout .= $select_dp->show($rule['test'] == 'currentdate' || $rule['test'] == 'date' ? $rule['part'] : '');
+        }
+
+        // message test select (e.g. duplicate)
+        if (in_array('duplicate', $this->exts)) {
+            $select_msg = new html_select(array('name' => "_rule_message[]", 'id' => 'rule_message'.$id,
+                'style' => in_array($rule['test'], array('duplicate')) ? '' : 'display:none',
+                'class' => 'message_selector',
+            ));
+
+            $select_msg->add(rcube::Q($this->plugin->gettext('duplicate')), 'duplicate');
+            $select_msg->add(rcube::Q($this->plugin->gettext('notduplicate')), 'notduplicate');
+
+            $tout .= $select_msg->show($test);
+        }
+
+        $tout .= $select_op->show($test);
+        $tout .= $this->list_input($id, 'rule_target', $target,
+            $rule['test'] != 'size' && $rule['test'] != 'exists' && $rule['test'] != 'duplicate',
+            $this->error_class($id, 'test', 'target', 'rule_target')) . "\n";
+
+        $select_size_op = new html_select(array('name' => "_rule_size_op[]", 'id' => 'rule_size_op'.$id));
+        $select_size_op->add(rcube::Q($this->plugin->gettext('filterover')), 'over');
+        $select_size_op->add(rcube::Q($this->plugin->gettext('filterunder')), 'under');
+
+        $tout .= '<div id="rule_size' .$id. '" style="display:' . ($rule['test']=='size' ? 'inline' : 'none') .'">';
+        $tout .= $select_size_op->show($rule['test']=='size' ? $rule['type'] : '');
+        $tout .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_rule_size_target[]',
+                'id'    => 'rule_size_i'.$id,
+                'value' => $sizetarget,
+                'size'  => 10,
+                'class' => $this->error_class($id, 'test', 'sizetarget', 'rule_size_i'),
+            ));
+        foreach (array('', 'K', 'M', 'G') as $unit) {
+            $tout .= html::label(null, html::tag('input', array(
+                    'type'    => 'radio',
+                    'name'    => '_rule_size_item['.$id.']',
+                    'value'   => $unit,
+                    'checked' => $sizeitem == $unit,
+                    'class'   => 'radio',
+                )) . $this->rc->gettext($unit . 'B'));
+        }
+        $tout .= '</div>';
+
+        // Advanced modifiers (address, envelope)
+        $select_mod = new html_select(array('name' => "_rule_mod[]", 'id' => 'rule_mod_op'.$id,
+            'onchange' => 'rule_mod_select(' .$id .')'));
+        $select_mod->add(rcube::Q($this->plugin->gettext('none')), '');
+        $select_mod->add(rcube::Q($this->plugin->gettext('address')), 'address');
+        if (in_array('envelope', $this->exts)) {
+            $select_mod->add(rcube::Q($this->plugin->gettext('envelope')), 'envelope');
+        }
+
+        $select_type = new html_select(array('name' => "_rule_mod_type[]", 'id' => 'rule_mod_type'.$id));
+        $select_type->add(rcube::Q($this->plugin->gettext('allparts')), 'all');
+        $select_type->add(rcube::Q($this->plugin->gettext('domain')), 'domain');
+        $select_type->add(rcube::Q($this->plugin->gettext('localpart')), 'localpart');
+        if (in_array('subaddress', $this->exts)) {
+            $select_type->add(rcube::Q($this->plugin->gettext('user')), 'user');
+            $select_type->add(rcube::Q($this->plugin->gettext('detail')), 'detail');
+        }
+
+        $need_mod = !in_array($rule['test'], array('size', 'body', 'date', 'currentdate', 'duplicate', 'string'));
+        $mout = '<div id="rule_mod' .$id. '" class="adv"' . (!$need_mod ? ' style="display:none"' : '') . '>';
+        $mout .= ' <span class="label">' . rcube::Q($this->plugin->gettext('modifier')) . ' </span>';
+        $mout .= $select_mod->show($rule['test']);
+        $mout .= ' <span id="rule_mod_type' . $id . '"';
+        $mout .= ' style="display:' . (in_array($rule['test'], array('address', 'envelope')) ? 'inline' : 'none') .'">';
+        $mout .= rcube::Q($this->plugin->gettext('modtype')) . ' ';
+        $mout .= $select_type->show($rule['part']);
+        $mout .= '</span>';
+        $mout .= '</div>';
+
+        // Advanced modifiers (body transformations)
+        $select_mod = new html_select(array('name' => "_rule_trans[]", 'id' => 'rule_trans_op'.$id,
+            'onchange' => 'rule_trans_select(' .$id .')'));
+        $select_mod->add(rcube::Q($this->plugin->gettext('text')), 'text');
+        $select_mod->add(rcube::Q($this->plugin->gettext('undecoded')), 'raw');
+        $select_mod->add(rcube::Q($this->plugin->gettext('contenttype')), 'content');
+
+        $mout .= '<div id="rule_trans' .$id. '" class="adv"' . ($rule['test'] != 'body' ? ' style="display:none"' : '') . '>';
+        $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('modifier')) . '</span>';
+        $mout .= $select_mod->show($rule['part']);
+        $mout .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_rule_trans_type[]',
+                'id'    => 'rule_trans_type'.$id,
+                'value' => is_array($rule['content']) ? implode(',', $rule['content']) : $rule['content'],
+                'size'  => 20,
+                'style' => $rule['part'] != 'content' ? 'display:none' : '',
+                'class' => $this->error_class($id, 'test', 'part', 'rule_trans_type'),
+            ));
+        $mout .= '</div>';
+
+        // Advanced modifiers (body transformations)
+        $select_comp = new html_select(array('name' => "_rule_comp[]", 'id' => 'rule_comp_op'.$id));
+        $select_comp->add(rcube::Q($this->plugin->gettext('default')), '');
+        $select_comp->add(rcube::Q($this->plugin->gettext('octet')), 'i;octet');
+        $select_comp->add(rcube::Q($this->plugin->gettext('asciicasemap')), 'i;ascii-casemap');
+        if (in_array('comparator-i;ascii-numeric', $this->exts)) {
+            $select_comp->add(rcube::Q($this->plugin->gettext('asciinumeric')), 'i;ascii-numeric');
+        }
+
+        // Comparators
+        $need_comp = $rule['test'] != 'size' && $rule['test'] != 'duplicate';
+        $mout .= '<div id="rule_comp' .$id. '" class="adv"' . (!$need_comp ? ' style="display:none"' : '') . '>';
+        $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('comparator')) . '</span>';
+        $mout .= $select_comp->show($rule['comparator']);
+        $mout .= '</div>';
+
+        // Date header
+        if (in_array('date', $this->exts)) {
+            $mout .= '<div id="rule_date_header_div' .$id. '" class="adv"'. ($rule['test'] != 'date' ? ' style="display:none"' : '') .'>';
+            $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('dateheader')) . '</span>';
+            $mout .= html::tag('input', array(
+                    'type'  => 'text',
+                    'name'  => '_rule_date_header[]',
+                    'id'    => 'rule_date_header' . $id,
+                    'value' => $rule['test'] == 'date' ? $rule['header'] : '',
+                    'size'  => 15,
+                    'class' => $this->error_class($id, 'test', 'dateheader', 'rule_date_header'),
+                ));
+            $mout .= '</div>';
+        }
+
+        // Index
+        if (in_array('index', $this->exts)) {
+            $need_index = in_array($rule['test'], array('header', ', address', 'date'));
+            $mout .= '<div id="rule_index_div' .$id. '" class="adv"'. (!$need_index ? ' style="display:none"' : '') .'>';
+            $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('index')) . '</span>';
+            $mout .= html::tag('input', array(
+                    'type'  => 'text',
+                    'name'  => '_rule_index[]',
+                    'id'    => 'rule_index' . $id,
+                    'value' => $rule['index'] ? intval($rule['index']) : '',
+                    'size'  => 3,
+                    'class' => $this->error_class($id, 'test', 'index', 'rule_index'),
+                ));
+            $mout .= '&nbsp;' . html::tag('input', array(
+                    'type'    => 'checkbox',
+                    'name'    => '_rule_index_last[]',
+                    'id'      => 'rule_index_last' . $id,
+                    'value'   => 1,
+                    'checked' => !empty($rule['last']),
+                ))
+                . html::label('rule_index_last' . $id, rcube::Q($this->plugin->gettext('indexlast')));
+            $mout .= '</div>';
+        }
+
+        // Duplicate
+        if (in_array('duplicate', $this->exts)) {
+            $need_duplicate = $rule['test'] == 'duplicate';
+            $mout .= '<div id="rule_duplicate_div' .$id. '" class="adv"'. (!$need_duplicate ? ' style="display:none"' : '') .'>';
+
+            foreach (array('handle', 'header', 'uniqueid') as $unit) {
+                $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('duplicate.handle')) . '</span>';
+                $mout .= html::tag('input', array(
+                        'type'  => 'text',
+                        'name'  => '_rule_duplicate_' . $unit . '[]',
+                        'id'    => 'rule_duplicate_' . $unit . $id,
+                        'value' => $rule[$unit],
+                        'size'  => 30,
+                        'class' => $this->error_class($id, 'test', 'duplicate_' . $unit, 'rule_duplicate_' . $unit),
+                    ));
+                $mout .= '<br>';
+            }
+
+            $mout .= '<span class="label">' . rcube::Q($this->plugin->gettext('duplicate.seconds')) . '</span>';
+            $mout .= html::tag('input', array(
+                    'type'  => 'text',
+                    'name'  => '_rule_duplicate_seconds[]',
+                    'id'    => 'rule_duplicate_seconds' . $id,
+                    'value' => $rule['seconds'],
+                    'size'  => 6,
+                    'class' => $this->error_class($id, 'test', 'duplicate_seconds', 'rule_duplicate_seconds'),
+                ));
+            $mout .= '&nbsp;' . html::tag('input', array(
+                    'type'    => 'checkbox',
+                    'name'    => '_rule_duplicate_last[' . $id . ']',
+                    'id'      => 'rule_duplicate_last' . $id,
+                    'value'   => 1,
+                    'checked' => !empty($rule['last']),
+                ));
+            $mout .= html::label('rule_duplicate_last' . $id, rcube::Q($this->plugin->gettext('duplicate.last')));
+            $mout .= '</div>';
+        }
+
+        // Build output table
+        $out = $div ? '<div class="rulerow" id="rulerow' .$id .'">'."\n" : '';
+        $out .= '<table><tr>';
+        $out .= '<td class="advbutton">';
+        $out .= '<a href="#" id="ruleadv' . $id .'" title="'. rcube::Q($this->plugin->gettext('advancedopts')). '"
+            onclick="rule_adv_switch(' . $id .', this)" class="show">&nbsp;&nbsp;</a>';
+        $out .= '</td>';
+        $out .= '<td class="rowactions">' . $aout . '</td>';
+        $out .= '<td class="rowtargets">' . $tout . "\n";
+        $out .= '<div id="rule_advanced' .$id. '" style="display:none">' . $mout . '</div>';
+        $out .= '</td>';
+
+        // add/del buttons
+        $out .= '<td class="rowbuttons">';
+        $out .= '<a href="#" id="ruleadd' . $id .'" title="'. rcube::Q($this->plugin->gettext('add')). '"
+            onclick="rcmail.managesieve_ruleadd(' . $id .')" class="button add"></a>';
+        $out .= '<a href="#" id="ruledel' . $id .'" title="'. rcube::Q($this->plugin->gettext('del')). '"
+            onclick="rcmail.managesieve_ruledel(' . $id .')" class="button del' . ($rows_num<2 ? ' disabled' : '') .'"></a>';
+        $out .= '</td>';
+        $out .= '</tr></table>';
+
+        $out .= $div ? "</div>\n" : '';
+
+        return $out;
+    }
+
+    private static function rule_test(&$rule)
+    {
+        // first modify value/count tests with 'not' keyword
+        // we'll revert the meaning of operators
+        if ($rule['not'] && preg_match('/^(count|value)-([gteqnl]{2})/', $rule['type'], $m)) {
+            $rule['not'] = false;
+
+            switch ($m[2]) {
+            case 'gt': $rule['type'] = $m[1] . '-le'; break;
+            case 'ge': $rule['type'] = $m[1] . '-lt'; break;
+            case 'lt': $rule['type'] = $m[1] . '-ge'; break;
+            case 'le': $rule['type'] = $m[1] . '-gt'; break;
+            case 'eq': $rule['type'] = $m[1] . '-ne'; break;
+            case 'ne': $rule['type'] = $m[1] . '-eq'; break;
+            }
+        }
+        else if ($rule['not'] && $rule['test'] == 'size') {
+            $rule['not']  = false;
+            $rule['type'] = $rule['type'] == 'over' ? 'under' : 'over';
+        }
+
+        $set = array('header', 'address', 'envelope', 'body', 'date', 'currentdate', 'string');
+
+        // build test string supported by select element
+        if ($rule['size']) {
+            $test = $rule['type'];
+        }
+        else if (in_array($rule['test'], $set)) {
+            $test = ($rule['not'] ? 'not' : '') . ($rule['type'] ?: 'is');
+        }
+        else {
+            $test = ($rule['not'] ? 'not' : '') . $rule['test'];
+        }
+
+        return $test;
+    }
+
+    function action_div($fid, $id, $div=true)
+    {
+        $action   = isset($this->form) ? $this->form['actions'][$id] : $this->script[$fid]['actions'][$id];
+        $rows_num = isset($this->form) ? count($this->form['actions']) : count($this->script[$fid]['actions']);
+
+        $out = $div ? '<div class="actionrow" id="actionrow' .$id .'">'."\n" : '';
+
+        $out .= '<table><tr><td class="rowactions">';
+
+        // action select
+        $select_action = new html_select(array('name' => "_action_type[$id]", 'id' => 'action_type'.$id,
+            'onchange' => 'action_type_select(' .$id .')'));
+        if (in_array('fileinto', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagemoveto')), 'fileinto');
+        if (in_array('fileinto', $this->exts) && in_array('copy', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagecopyto')), 'fileinto_copy');
+        $select_action->add(rcube::Q($this->plugin->gettext('messageredirect')), 'redirect');
+        if (in_array('copy', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagesendcopy')), 'redirect_copy');
+        if (in_array('reject', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagediscard')), 'reject');
+        else if (in_array('ereject', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagediscard')), 'ereject');
+        if (in_array('vacation', $this->exts))
+            $select_action->add(rcube::Q($this->plugin->gettext('messagereply')), 'vacation');
+        $select_action->add(rcube::Q($this->plugin->gettext('messagedelete')), 'discard');
+        if (in_array('imapflags', $this->exts) || in_array('imap4flags', $this->exts)) {
+            $select_action->add(rcube::Q($this->plugin->gettext('setflags')), 'setflag');
+            $select_action->add(rcube::Q($this->plugin->gettext('addflags')), 'addflag');
+            $select_action->add(rcube::Q($this->plugin->gettext('removeflags')), 'removeflag');
+        }
+        if (in_array('variables', $this->exts)) {
+            $select_action->add(rcube::Q($this->plugin->gettext('setvariable')), 'set');
+        }
+        if (in_array('enotify', $this->exts) || in_array('notify', $this->exts)) {
+            $select_action->add(rcube::Q($this->plugin->gettext('notify')), 'notify');
+        }
+        $select_action->add(rcube::Q($this->plugin->gettext('messagekeep')), 'keep');
+        $select_action->add(rcube::Q($this->plugin->gettext('rulestop')), 'stop');
+
+        $select_type = $action['type'];
+        if (in_array($action['type'], array('fileinto', 'redirect')) && $action['copy']) {
+            $select_type .= '_copy';
+        }
+
+        $out .= $select_action->show($select_type);
+        $out .= '</td>';
+
+        // actions target inputs
+        $out .= '<td class="rowtargets">';
+
+        // force domain selection in redirect email input
+        $domains = (array) $this->rc->config->get('managesieve_domains');
+        if (!empty($domains)) {
+            sort($domains);
+
+            $domain_select = new html_select(array('name' => "_action_target_domain[$id]", 'id' => 'action_target_domain'.$id));
+            $domain_select->add(array_combine($domains, $domains));
+
+            if ($action['type'] == 'redirect') {
+                $parts = explode('@', $action['target']);
+                if (!empty($parts)) {
+                    $action['domain'] = array_pop($parts);
+                    $action['target'] = implode('@', $parts);
+                }
+            }
+        }
+
+        // redirect target
+        $out .= '<span id="redirect_target' . $id . '" style="white-space:nowrap;'
+            . ' display:' . ($action['type'] == 'redirect' ? 'inline' : 'none') . '">'
+            . html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_action_target[' . $id . ']',
+                'id'    => 'action_target' . $id,
+                'value' => $action['type'] == 'redirect' ? $action['target'] : '',
+                'size'  => !empty($domains) ? 20 : 35,
+                'class' => $this->error_class($id, 'action', 'target', 'action_target'),
+            ));
+        $out .= !empty($domains) ? ' @ ' . $domain_select->show($action['domain']) : '';
+        $out .= '</span>';
+
+        // (e)reject target
+        $out .= html::tag('textarea', array(
+                'name'  => '_action_target_area[' . $id . ']',
+                'id'    => 'action_target_area' . $id,
+                'rows'  => 3,
+                'cols'  => 35,
+                'class' => $this->error_class($id, 'action', 'targetarea', 'action_target_area'),
+                'style' => 'display:' . (in_array($action['type'], array('reject', 'ereject')) ? 'inline' : 'none'),
+            ), (in_array($action['type'], array('reject', 'ereject')) ? rcube::Q($action['target'], 'strict', false) : ''));
+
+        // vacation
+        $vsec      = in_array('vacation-seconds', $this->exts);
+        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');
+        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');
+
+        if (empty($action)) {
+            if ($auto_addr) {
+                $action['addresses'] = $this->user_emails();
+            }
+            if ($from_addr) {
+                $default_identity = $this->rc->user->list_emails(true);
+                $action['from'] = $default_identity['email'];
+            }
+        }
+
+        $out .= '<div id="action_vacation' .$id.'" style="display:' .($action['type']=='vacation' ? 'inline' : 'none') .'">';
+        $out .= '<span class="label">'. rcube::Q($this->plugin->gettext('vacationreason')) .'</span><br>';
+        $out .= html::tag('textarea', array(
+                'name'  => '_action_reason[' . $id . ']',
+                'id'   => 'action_reason' . $id,
+                'rows'  => 3,
+                'cols'  => 35,
+                'class' => $this->error_class($id, 'action', 'reason', 'action_reason'),
+            ), rcube::Q($action['reason'], 'strict', false));
+        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationsubject')) . '</span><br>';
+        $out .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_action_subject[' . $id . ']',
+                'id'    => 'action_subject' . $id,
+                'value' => is_array($action['subject']) ? implode(', ', $action['subject']) : $action['subject'],
+                'size'  => 35,
+                'class' => $this->error_class($id, 'action', 'subject', 'action_subject'),
+            ));
+        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationfrom')) . '</span><br>';
+        $out .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_action_from[' . $id . ']',
+                'id'    => 'action_from' . $id,
+                'value' => $action['from'],
+                'size'  => 35,
+                'class' => $this->error_class($id, 'action', 'from', 'action_from'),
+            ));
+        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationaddr')) . '</span><br>';
+        $out .= $this->list_input($id, 'action_addresses', $action['addresses'], true,
+                    $this->error_class($id, 'action', 'addresses', 'action_addresses'), 30)
+            . html::a(array('href' => '#', 'onclick' => rcmail_output::JS_OBJECT_NAME . ".managesieve_vacation_addresses($id)"),
+                rcube::Q($this->plugin->gettext('filladdresses')));
+        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext($vsec ? 'vacationinterval' : 'vacationdays')) . '</span><br>';
+        $out .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_action_interval[' . $id . ']',
+                'id'    => 'action_interval' . $id,
+                'value' => rcube_sieve_vacation::vacation_interval($action),
+                'size'  => 2,
+                'class' => $this->error_class($id, 'action', 'interval', 'action_interval'),
+            ));
+        if ($vsec) {
+            foreach (array('days', 'seconds') as $unit) {
+                $out .= '&nbsp;' . html::label(null, html::tag('input', array(
+                        'type'    => 'radio',
+                        'name'    => '_action_interval_type[' . $id . ']',
+                        'value'   => $unit,
+                        'checked' => ($unit == 'seconds' && isset($action['seconds'])
+                                        || $unit == 'deys' && !isset($action['seconds'])),
+                        'class'   => 'radio',
+                )) . $this->plugin->gettext($unit));
+            }
+        }
+        $out .= '</div>';
+
+        // flags
+        $flags = array(
+            'read'      => '\\Seen',
+            'answered'  => '\\Answered',
+            'flagged'   => '\\Flagged',
+            'deleted'   => '\\Deleted',
+            'draft'     => '\\Draft',
+        );
+        $flags_target = (array)$action['target'];
+
+        $flout = '';
+        foreach ($flags as $fidx => $flag) {
+            $flout .= html::tag('input', array(
+                    'type'    => 'checkbox',
+                    'name'    => '_action_flags[' .$id .'][]',
+                    'value'   => $flag,
+                    'checked' => in_array_nocase($flag, $flags_target),
+                ))
+                . rcube::Q($this->plugin->gettext('flag'.$fidx)) .'<br>';
+        }
+        $out .= html::div(array(
+                'id'    => 'action_flags' . $id,
+                'style' => 'display:' . (preg_match('/^(set|add|remove)flag$/', $action['type']) ? 'inline' : 'none'),
+                'class' => $this->error_class($id, 'action', 'flags', 'action_flags'),
+            ), $flout);
+
+        // set variable
+        $set_modifiers = array(
+            'lower',
+            'upper',
+            'lowerfirst',
+            'upperfirst',
+            'quotewildcard',
+            'length'
+        );
+
+        $out .= '<div id="action_set' .$id.'" style="display:' .($action['type']=='set' ? 'inline' : 'none') .'">';
+        foreach (array('name', 'value') as $unit) {
+            $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvar' . $unit)) . '</span><br>';
+            $out .= html::tag('input', array(
+                    'type'  => 'text',
+                    'name'  => '_action_var' . $unit . '[' . $id . ']',
+                    'id'    => 'action_var' . $unit . $id,
+                    'value' => $action[$unit],
+                    'size'  => 35,
+                    'class' => $this->error_class($id, 'action', $unit, 'action_var' . $unit),
+                ));
+            $out .= '<br>';
+        }
+        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvarmodifiers')) . '</span>';
+        foreach ($set_modifiers as $s_m) {
+            $s_m_id = 'action_varmods' . $id . $s_m;
+            $out .= '<br>' . html::tag('input', array(
+                    'type'    => 'checkbox',
+                    'name'    => '_action_varmods[' . $id . '][]',
+                    'value'   => $s_m,
+                    'id'      => $s_m_id,
+                    'checked' => array_key_exists($s_m, (array)$action) && $action[$s_m],
+                ))
+                .rcube::Q($this->plugin->gettext('var' . $s_m));
+        }
+        $out .= '</div>';
+
+        // notify
+        $notify_methods     = (array) $this->rc->config->get('managesieve_notify_methods');
+        $importance_options = $this->notify_importance_options;
+
+        if (empty($notify_methods)) {
+            $notify_methods = $this->notify_methods;
+        }
+
+        list($method, $target) = explode(':', $action['method'], 2);
+        $method = strtolower($method);
+
+        if ($method && !in_array($method, $notify_methods)) {
+            $notify_methods[] = $method;
+        }
+
+        $select_method = new html_select(array(
+            'name'  => "_action_notifymethod[$id]",
+            'id'    => "_action_notifymethod$id",
+            'class' => $this->error_class($id, 'action', 'method', 'action_notifymethod'),
+        ));
+        foreach ($notify_methods as $m_n) {
+            $select_method->add(rcube::Q($this->rc->text_exists('managesieve.notifymethod'.$m_n) ? $this->plugin->gettext('managesieve.notifymethod'.$m_n) : $m_n), $m_n);
+        }
+
+        $select_importance = new html_select(array(
+            'name'  => "_action_notifyimportance[$id]",
+            'id'    => "_action_notifyimportance$id",
+            'class' => $this->error_class($id, 'action', 'importance', 'action_notifyimportance')
+        ));
+        foreach ($importance_options as $io_v => $io_n) {
+            $select_importance->add(rcube::Q($this->plugin->gettext($io_n)), $io_v);
+        }
+
+        // @TODO: nice UI for mailto: (other methods too) URI parameters
+        $out .= '<div id="action_notify' .$id.'" style="display:' .($action['type'] == 'notify' ? 'inline' : 'none') .'">';
+        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('notifytarget')) . '</span><br>';
+        $out .= $select_method->show($method);
+        $out .= html::tag('input', array(
+                'type'  => 'text',
+                'name'  => '_action_notifytarget[' . $id . ']',
+                'id'    => 'action_notifytarget' . $id,
+                'value' => $target,
+                'size'  => 25,
+                'class' => $this->error_class($id, 'action', 'target', 'action_notifytarget'),
+            ));
+        $out .= '<br><span class="label">'. rcube::Q($this->plugin->gettext('notifymessage')) .'</span><br>';
+        $out .= html::tag('textarea', array(
+                'name'  => '_action_notifymessage[' . $id . ']',
+                'id'    => 'action_notifymessage' . $id,
+                'rows'  => 3,
+                'cols'  => 35,
+                'class' => $this->error_class($id, 'action', 'message', 'action_notifymessage'),
+            ), rcube::Q($action['message'], 'strict', false));
+        if (in_array('enotify', $this->exts)) {
+            $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('notifyfrom')) . '</span><br>';
+            $out .= html::tag('input', array(
+                    'type'  => 'text',
+                    'name'  => '_action_notifyfrom[' . $id . ']',
+                    'id'    => 'action_notifyfrom' . $id,
+                    'value' => $action['from'],
+                    'size'  => 35,
+                    'class' => $this->error_class($id, 'action', 'from', 'action_notifyfrom'),
+                ));
+        }
+        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext('notifyimportance')) . '</span><br>';
+        $out .= $select_importance->show($action['importance'] ? (int) $action['importance'] : 2);
+        $out .= '<div id="action_notifyoption_div' . $id  . '">'
+            .'<span class="label">' . rcube::Q($this->plugin->gettext('notifyoptions')) . '</span><br>'
+            .$this->list_input($id, 'action_notifyoption', (array)$action['options'], true,
+                $this->error_class($id, 'action', 'options', 'action_notifyoption'), 30) . '</div>';
+        $out .= '</div>';
+
+        // mailbox select
+        if ($action['type'] == 'fileinto') {
+            $mailbox = $this->mod_mailbox($action['target'], 'out');
+            // make sure non-existing (or unsubscribed) mailbox is listed (#1489956)
+            $additional = array($mailbox);
+        }
+        else {
+            $mailbox = '';
+        }
+
+        $select = $this->rc->folder_selector(array(
+            'realnames'  => false,
+            'maxlength'  => 100,
+            'id'         => 'action_mailbox' . $id,
+            'name'       => "_action_mailbox[$id]",
+            'style'      => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none'),
+            'additional' => $additional,
+        ));
+        $out .= $select->show($mailbox);
+        $out .= '</td>';
+
+        // add/del buttons
+        $out .= '<td class="rowbuttons">';
+        $out .= '<a href="#" id="actionadd' . $id .'" title="'. rcube::Q($this->plugin->gettext('add')). '"
+            onclick="rcmail.managesieve_actionadd(' . $id .')" class="button add"></a>';
+        $out .= '<a href="#" id="actiondel' . $id .'" title="'. rcube::Q($this->plugin->gettext('del')). '"
+            onclick="rcmail.managesieve_actiondel(' . $id .')" class="button del' . ($rows_num<2 ? ' disabled' : '') .'"></a>';
+        $out .= '</td>';
+
+        $out .= '</tr></table>';
+
+        $out .= $div ? "</div>\n" : '';
+
+        return $out;
+    }
+
+    protected function genid()
+    {
+        return preg_replace('/[^0-9]/', '', microtime(true));
+    }
+
+    protected function strip_value($str, $allow_html = false, $trim = true)
+    {
+        if (is_array($str)) {
+            foreach ($str as $idx => $val) {
+                $val = $this->strip_value($val, $allow_html, $trim);
+
+                if ($val === '') {
+                    unset($str[$idx]);
+                }
+            }
+
+            return $str;
+        }
+
+        if (!$allow_html) {
+            $str = strip_tags($str);
+        }
+
+        return $trim ? trim($str) : $str;
+    }
+
+    protected function error_class($id, $type, $target, $elem_prefix='')
+    {
+        // TODO: tooltips
+        if (($type == 'test' && ($str = $this->errors['tests'][$id][$target])) ||
+            ($type == 'action' && ($str = $this->errors['actions'][$id][$target]))
+        ) {
+            $this->add_tip($elem_prefix.$id, $str, true);
+            return 'error';
+        }
+
+        return '';
+    }
+
+    protected function add_tip($id, $str, $error=false)
+    {
+        if ($error) {
+            $str = html::span('sieve error', $str);
+        }
+
+        $this->tips[] = array($id, $str);
+    }
+
+    protected function print_tips()
+    {
+        if (empty($this->tips)) {
+            return;
+        }
+
+        $script = rcmail_output::JS_OBJECT_NAME.'.managesieve_tip_register('.json_encode($this->tips).');';
+        $this->rc->output->add_script($script, 'foot');
+    }
+
+    protected function list_input($id, $name, $value, $enabled, $class, $size=null)
+    {
+        $value = (array) $value;
+        $value = array_map(array('rcube', 'Q'), $value);
+        $value = implode("\n", $value);
+
+        return html::tag('textarea', array(
+                'data-type' => 'list',
+                'data-size' => $size,
+                'name'      => '_' . $name . '['. $id .']',
+                'id'        => $name.$id,
+                'disabled'  => !$enabled,
+                'class'     => $class,
+                'style'     => 'display:none',
+            ), $value);
+    }
+
+    /**
+     * Validate input for date part elements
+     */
+    protected function validate_date_part($type, $value)
+    {
+        // we do simple validation of date/part format
+        switch ($type) {
+            case 'date': // yyyy-mm-dd
+                return preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $value);
+            case 'iso8601':
+                return preg_match('/^[0-9: .,ZWT+-]+$/', $value);
+            case 'std11':
+                return preg_match('/^((Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?[0-9]{1,2}\s+'
+                    . '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+[0-9]{2,4}\s+'
+                    . '[0-9]{2}:[0-9]{2}(:[0-9]{2})?\s+([+-]*[0-9]{4}|[A-Z]{1,3})$', $value);
+            case 'julian':
+                return preg_match('/^[0-9]+$/', $value);
+            case 'time': // hh:mm:ss
+                return preg_match('/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $value);
+            case 'year':
+                return preg_match('/^[0-9]{4}$/', $value);
+            case 'month':
+                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 13;
+            case 'day':
+                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 32;
+            case 'hour':
+                return preg_match('/^[0-9]{2}$/', $value) && $value < 24;
+            case 'minute':
+                return preg_match('/^[0-9]{2}$/', $value) && $value < 60;
+            case 'second':
+                // According to RFC5260, seconds can be from 00 to 60
+                return preg_match('/^[0-9]{2}$/', $value) && $value < 61;
+            case 'weekday':
+                return preg_match('/^[0-9]$/', $value) && $value < 7;
+            case 'zone':
+                return preg_match('/^[+-][0-9]{4}$/', $value);
+        }
+    }
+
+    /**
+     * Converts mailbox name from/to UTF7-IMAP from/to internal Sieve encoding
+     * with delimiter replacement.
+     *
+     * @param string $mailbox Mailbox name
+     * @param string $mode    Conversion direction ('in'|'out')
+     *
+     * @return string Mailbox name
+     */
+    protected function mod_mailbox($mailbox, $mode = 'out')
+    {
+        $delimiter         = $_SESSION['imap_delimiter'];
+        $replace_delimiter = $this->rc->config->get('managesieve_replace_delimiter');
+        $mbox_encoding     = $this->rc->config->get('managesieve_mbox_encoding', 'UTF7-IMAP');
+
+        if ($mode == 'out') {
+            $mailbox = rcube_charset::convert($mailbox, $mbox_encoding, 'UTF7-IMAP');
+            if ($replace_delimiter && $replace_delimiter != $delimiter)
+                $mailbox = str_replace($replace_delimiter, $delimiter, $mailbox);
+        }
+        else {
+            $mailbox = rcube_charset::convert($mailbox, 'UTF7-IMAP', $mbox_encoding);
+            if ($replace_delimiter && $replace_delimiter != $delimiter)
+                $mailbox = str_replace($delimiter, $replace_delimiter, $mailbox);
+        }
+
+        return $mailbox;
+    }
+
+    /**
+     * List sieve scripts
+     *
+     * @return array Scripts list
+     */
+    public function list_scripts()
+    {
+        if ($this->list !== null) {
+            return $this->list;
+        }
+
+        $this->list = $this->sieve->get_scripts();
+
+        // Handle active script(s) and list of scripts according to Kolab's KEP:14
+        if ($this->rc->config->get('managesieve_kolab_master')) {
+            // Skip protected names
+            foreach ((array)$this->list as $idx => $name) {
+                $_name = strtoupper($name);
+                if ($_name == 'MASTER')
+                    $master_script = $name;
+                else if ($_name == 'MANAGEMENT')
+                    $management_script = $name;
+                else if($_name == 'USER')
+                    $user_script = $name;
+                else
+                    continue;
+
+                unset($this->list[$idx]);
+            }
+
+            // get active script(s), read USER script
+            if ($user_script) {
+                $extension = $this->rc->config->get('managesieve_filename_extension', '.sieve');
+                $filename_regex = '/'.preg_quote($extension, '/').'$/';
+                $_SESSION['managesieve_user_script'] = $user_script;
+
+                $this->sieve->load($user_script);
+
+                foreach ($this->sieve->script->as_array() as $rules) {
+                    foreach ($rules['actions'] as $action) {
+                        if ($action['type'] == 'include' && empty($action['global'])) {
+                            $name = preg_replace($filename_regex, '', $action['target']);
+                            // make sure the script exist
+                            if (in_array($name, $this->list)) {
+                                $this->active[] = $name;
+                            }
+                        }
+                    }
+                }
+            }
+            // create USER script if it doesn't exist
+            else {
+                $content = "# USER Management Script\n"
+                    ."#\n"
+                    ."# This script includes the various active sieve scripts\n"
+                    ."# it is AUTOMATICALLY GENERATED. DO NOT EDIT MANUALLY!\n"
+                    ."#\n"
+                    ."# For more information, see http://wiki.kolab.org/KEP:14#USER\n"
+                    ."#\n";
+                if ($this->sieve->save_script('USER', $content)) {
+                    $_SESSION['managesieve_user_script'] = 'USER';
+                    if (empty($this->master_file))
+                        $this->sieve->activate('USER');
+                }
+            }
+        }
+        else if (!empty($this->list)) {
+            // Get active script name
+            if ($active = $this->sieve->get_active()) {
+                $this->active = array($active);
+            }
+
+            // Hide scripts from config
+            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
+            if (!empty($exceptions)) {
+                $this->list = array_diff($this->list, (array)$exceptions);
+            }
+        }
+
+        // reindex
+        if (!empty($this->list)) {
+            $this->list = array_values($this->list);
+        }
+
+        return $this->list;
+    }
+
+    /**
+     * Removes sieve script
+     *
+     * @param string $name Script name
+     *
+     * @return bool True on success, False on failure
+     */
+    public function remove_script($name)
+    {
+        $result = $this->sieve->remove($name);
+
+        // Kolab's KEP:14
+        if ($result && $this->rc->config->get('managesieve_kolab_master')) {
+            $this->deactivate_script($name);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Activates sieve script
+     *
+     * @param string $name Script name
+     *
+     * @return bool True on success, False on failure
+     */
+    public function activate_script($name)
+    {
+        // Kolab's KEP:14
+        if ($this->rc->config->get('managesieve_kolab_master')) {
+            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
+            $user_script = $_SESSION['managesieve_user_script'];
+
+            // if the script is not active...
+            if ($user_script && array_search($name, $this->active) === false) {
+                // ...rewrite USER file adding appropriate include command
+                if ($this->sieve->load($user_script)) {
+                    $script = $this->sieve->script->as_array();
+                    $list   = array();
+                    $regexp = '/' . preg_quote($extension, '/') . '$/';
+
+                    // Create new include entry
+                    $rule = array(
+                        'actions' => array(
+                            0 => array(
+                                'target'   => $name.$extension,
+                                'type'     => 'include',
+                                'personal' => true,
+                    )));
+
+                    // get all active scripts for sorting
+                    foreach ($script as $rid => $rules) {
+                        foreach ($rules['actions'] as $action) {
+                            if ($action['type'] == 'include' && empty($action['global'])) {
+                                $target = $extension ? preg_replace($regexp, '', $action['target']) : $action['target'];
+                                $list[] = $target;
+                            }
+                        }
+                    }
+                    $list[] = $name;
+
+                    // Sort and find current script position
+                    asort($list, SORT_LOCALE_STRING);
+                    $list = array_values($list);
+                    $index = array_search($name, $list);
+
+                    // add rule at the end of the script
+                    if ($index === false || $index == count($list)-1) {
+                        $this->sieve->script->add_rule($rule);
+                    }
+                    // add rule at index position
+                    else {
+                        $script2 = array();
+                        foreach ($script as $rid => $rules) {
+                            if ($rid == $index) {
+                                $script2[] = $rule;
+                            }
+                            $script2[] = $rules;
+                        }
+                        $this->sieve->script->content = $script2;
+                    }
+
+                    $result = $this->sieve->save();
+                    if ($result) {
+                        $this->active[] = $name;
+                    }
+                }
+            }
+        }
+        else {
+            $result = $this->sieve->activate($name);
+            if ($result)
+                $this->active = array($name);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Deactivates sieve script
+     *
+     * @param string $name Script name
+     *
+     * @return bool True on success, False on failure
+     */
+    public function deactivate_script($name)
+    {
+        // Kolab's KEP:14
+        if ($this->rc->config->get('managesieve_kolab_master')) {
+            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
+            $user_script = $_SESSION['managesieve_user_script'];
+
+            // if the script is active...
+            if ($user_script && ($key = array_search($name, $this->active)) !== false) {
+                // ...rewrite USER file removing appropriate include command
+                if ($this->sieve->load($user_script)) {
+                    $script = $this->sieve->script->as_array();
+                    $name   = $name.$extension;
+
+                    foreach ($script as $rid => $rules) {
+                        foreach ($rules['actions'] as $action) {
+                            if ($action['type'] == 'include' && empty($action['global'])
+                                && $action['target'] == $name
+                            ) {
+                                break 2;
+                            }
+                        }
+                    }
+
+                    // Entry found
+                    if ($rid < count($script)) {
+                        $this->sieve->script->delete_rule($rid);
+                        $result = $this->sieve->save();
+                        if ($result) {
+                            unset($this->active[$key]);
+                        }
+                    }
+                }
+            }
+        }
+        else {
+            $result = $this->sieve->deactivate();
+            if ($result)
+                $this->active = array();
+        }
+
+        return $result;
+    }
+
+    /**
+     * Saves current script (adding some variables)
+     */
+    public function save_script($name = null)
+    {
+        // Kolab's KEP:14
+        if ($this->rc->config->get('managesieve_kolab_master')) {
+            $this->sieve->script->set_var('EDITOR', self::PROGNAME);
+            $this->sieve->script->set_var('EDITOR_VERSION', self::VERSION);
+        }
+
+        return $this->sieve->save($name);
+    }
+
+    /**
+     * Returns list of rules from the current script
+     *
+     * @return array List of rules
+     */
+    public function list_rules()
+    {
+        $result = array();
+        $i      = 1;
+
+        foreach ($this->script as $idx => $filter) {
+            if (empty($filter['actions'])) {
+                continue;
+            }
+            $fname = $filter['name'] ?: "#$i";
+            $result[] = array(
+                'id'    => $idx,
+                'name'  => $fname,
+                'class' => $filter['disabled'] ? 'disabled' : '',
+            );
+            $i++;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Initializes internal script data
+     */
+    protected function init_script()
+    {
+        if (!$this->sieve->script) {
+            return;
+        }
+
+        $this->script = $this->sieve->script->as_array();
+
+        $headers    = array();
+        $exceptions = array('date', 'currentdate', 'size', 'body');
+
+        // find common headers used in script, will be added to the list
+        // of available (predefined) headers (#1489271)
+        foreach ($this->script as $rule) {
+            foreach ((array) $rule['tests'] as $test) {
+                if ($test['test'] == 'header') {
+                    foreach ((array) $test['arg1'] as $header) {
+                        $lc_header = strtolower($header);
+
+                        // skip special names to not confuse UI
+                        if (in_array($lc_header, $exceptions)) {
+                            continue;
+                        }
+
+                        if (!isset($this->headers[$lc_header]) && !isset($headers[$lc_header])) {
+                            $headers[$lc_header] = $header;
+                        }
+                    }
+                }
+            }
+        }
+
+        ksort($headers);
+
+        $this->headers += $headers;
+    }
+
+    /**
+     * Get all e-mail addresses of the user
+     */
+    protected function user_emails()
+    {
+        $addresses = $this->rc->user->list_emails();
+
+        foreach ($addresses as $idx => $email) {
+            $addresses[$idx] = $email['email'];
+        }
+
+        $addresses = array_unique($addresses);
+        sort($addresses);
+
+        return $addresses;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1331 @@
+<?php
+
+/**
+ * Class for operations on Sieve scripts
+ *
+ * Copyright (C) 2008-2011, The Roundcube Dev Team
+ * Copyright (C) 2011, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sieve_script
+{
+    public $content = array();      // script rules array
+
+    private $vars      = array();   // "global" variables
+    private $prefix    = '';        // script header (comments)
+    private $supported = array(     // supported Sieve extensions:
+        'body',                     // RFC5173
+        'copy',                     // RFC3894
+        'date',                     // RFC5260
+        'duplicate',                // RFC7352
+        'enotify',                  // RFC5435
+        'envelope',                 // RFC5228
+        'ereject',                  // RFC5429
+        'fileinto',                 // RFC5228
+        'imapflags',                // draft-melnikov-sieve-imapflags-06
+        'imap4flags',               // RFC5232
+        'include',                  // RFC6609
+        'index',                    // RFC5260
+        'notify',                   // RFC5435
+        'regex',                    // draft-ietf-sieve-regex-01
+        'reject',                   // RFC5429
+        'relational',               // RFC3431
+        'subaddress',               // RFC5233
+        'vacation',                 // RFC5230
+        'vacation-seconds',         // RFC6131
+        'variables',                // RFC5229
+        // @TODO: spamtest+virustest, mailbox
+    );
+
+    /**
+     * Object constructor
+     *
+     * @param  string  Script's text content
+     * @param  array   List of capabilities supported by server
+     */
+    public function __construct($script, $capabilities=array())
+    {
+        $capabilities = array_map('strtolower', (array) $capabilities);
+
+        // disable features by server capabilities
+        if (!empty($capabilities)) {
+            foreach ($this->supported as $idx => $ext) {
+                if (!in_array($ext, $capabilities)) {
+                    unset($this->supported[$idx]);
+                }
+            }
+        }
+
+        // Parse text content of the script
+        $this->_parse_text($script);
+    }
+
+    /**
+     * Adds rule to the script (at the end)
+     *
+     * @param string Rule name
+     * @param array  Rule content (as array)
+     *
+     * @return int The index of the new rule
+     */
+    public function add_rule($content)
+    {
+        // TODO: check this->supported
+        array_push($this->content, $content);
+        return count($this->content) - 1;
+    }
+
+    public function delete_rule($index)
+    {
+        if (isset($this->content[$index])) {
+            unset($this->content[$index]);
+            return true;
+        }
+
+        return false;
+    }
+
+    public function size()
+    {
+        return count($this->content);
+    }
+
+    public function update_rule($index, $content)
+    {
+        // TODO: check this->supported
+        if ($this->content[$index]) {
+            $this->content[$index] = $content;
+            return $index;
+        }
+
+        return false;
+    }
+
+    /**
+     * Sets "global" variable
+     *
+     * @param string $name  Variable name
+     * @param string $value Variable value
+     * @param array  $mods  Variable modifiers
+     */
+    public function set_var($name, $value, $mods = array())
+    {
+        // Check if variable exists
+        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
+            if ($this->vars[$i]['name'] == $name) {
+                break;
+            }
+        }
+
+        $var = array_merge($mods, array('name' => $name, 'value' => $value));
+        $this->vars[$i] = $var;
+    }
+
+    /**
+     * Unsets "global" variable
+     *
+     * @param string $name  Variable name
+     */
+    public function unset_var($name)
+    {
+        // Check if variable exists
+        foreach ($this->vars as $idx => $var) {
+            if ($var['name'] == $name) {
+                unset($this->vars[$idx]);
+                break;
+            }
+        }
+    }
+
+    /**
+     * Gets the value of  "global" variable
+     *
+     * @param string $name  Variable name
+     *
+     * @return string Variable value
+     */
+    public function get_var($name)
+    {
+        // Check if variable exists
+        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
+            if ($this->vars[$i]['name'] == $name) {
+                return $this->vars[$i]['name'];
+            }
+        }
+    }
+
+    /**
+     * Sets script header content
+     *
+     * @param string $text  Header content
+     */
+    public function set_prefix($text)
+    {
+        $this->prefix = $text;
+    }
+
+    /**
+     * Returns script as text
+     */
+    public function as_text()
+    {
+        $output = '';
+        $exts   = array();
+        $idx    = 0;
+
+        if (!empty($this->vars)) {
+            if (in_array('variables', (array)$this->supported)) {
+                $has_vars = true;
+                array_push($exts, 'variables');
+            }
+            foreach ($this->vars as $var) {
+                if (empty($has_vars)) {
+                    // 'variables' extension not supported, put vars in comments
+                    $output .= sprintf("# %s %s\n", $var['name'], $var['value']);
+                }
+                else {
+                    $output .= 'set ';
+                    foreach (array_diff(array_keys($var), array('name', 'value')) as $opt) {
+                        $output .= ":$opt ";
+                    }
+                    $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\n";
+                }
+            }
+        }
+
+        $imapflags = in_array('imap4flags', $this->supported) ? 'imap4flags' : 'imapflags';
+        $notify    = in_array('enotify', $this->supported) ? 'enotify' : 'notify';
+
+        // rules
+        foreach ($this->content as $rule) {
+            $script    = '';
+            $tests     = array();
+            $i         = 0;
+
+            // header
+            if (!empty($rule['name']) && strlen($rule['name'])) {
+                $script .= '# rule:[' . $rule['name'] . "]\n";
+            }
+
+            // constraints expressions
+            if (!empty($rule['tests'])) {
+                foreach ($rule['tests'] as $test) {
+                    $tests[$i] = '';
+                    switch ($test['test']) {
+                    case 'size':
+                        $tests[$i] .= ($test['not'] ? 'not ' : '');
+                        $tests[$i] .= 'size :' . ($test['type']=='under' ? 'under ' : 'over ') . $test['arg'];
+                        break;
+
+                    case 'true':
+                        $tests[$i] .= ($test['not'] ? 'false' : 'true');
+                        break;
+
+                    case 'exists':
+                        $tests[$i] .= ($test['not'] ? 'not ' : '');
+                        $tests[$i] .= 'exists ' . self::escape_string($test['arg']);
+                        break;
+
+                    case 'header':
+                    case 'string':
+                        if ($test['test'] == 'string') {
+                            array_push($exts, 'variables');
+                        }
+
+                        $tests[$i] .= ($test['not'] ? 'not ' : '');
+                        $tests[$i] .= $test['test'];
+
+                        $this->add_index($test, $tests[$i], $exts);
+                        $this->add_operator($test, $tests[$i], $exts);
+
+                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
+                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
+                        break;
+
+                    case 'address':
+                    case 'envelope':
+                        if ($test['test'] == 'envelope') {
+                            array_push($exts, 'envelope');
+                        }
+
+                        $tests[$i] .= ($test['not'] ? 'not ' : '');
+                        $tests[$i] .= $test['test'];
+
+                        if ($test['test'] != 'envelope') {
+                            $this->add_index($test, $tests[$i], $exts);
+                        }
+
+                        // :all address-part is optional, skip it
+                        if (!empty($test['part']) && $test['part'] != 'all') {
+                            $tests[$i] .= ' :' . $test['part'];
+                            if ($test['part'] == 'user' || $test['part'] == 'detail') {
+                                array_push($exts, 'subaddress');
+                            }
+                        }
+
+                        $this->add_operator($test, $tests[$i], $exts);
+
+                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
+                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
+                        break;
+
+                    case 'body':
+                        array_push($exts, 'body');
+
+                        $tests[$i] .= ($test['not'] ? 'not ' : '') . 'body';
+
+                        if (!empty($test['part'])) {
+                            $tests[$i] .= ' :' . $test['part'];
+
+                            if (!empty($test['content']) && $test['part'] == 'content') {
+                                $tests[$i] .= ' ' . self::escape_string($test['content']);
+                            }
+                        }
+
+                        $this->add_operator($test, $tests[$i], $exts);
+
+                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
+                        break;
+
+                    case 'date':
+                    case 'currentdate':
+                        array_push($exts, 'date');
+
+                        $tests[$i] .= ($test['not'] ? 'not ' : '') . $test['test'];
+
+                        $this->add_index($test, $tests[$i], $exts);
+
+                        if (!empty($test['originalzone']) && $test['test'] == 'date') {
+                            $tests[$i] .= ' :originalzone';
+                        }
+                        else if (!empty($test['zone'])) {
+                            $tests[$i] .= ' :zone ' . self::escape_string($test['zone']);
+                        }
+
+                        $this->add_operator($test, $tests[$i], $exts);
+
+                        if ($test['test'] == 'date') {
+                            $tests[$i] .= ' ' . self::escape_string($test['header']);
+                        }
+
+                        $tests[$i] .= ' ' . self::escape_string($test['part']);
+                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
+
+                        break;
+
+                    case 'duplicate':
+                        array_push($exts, 'duplicate');
+
+                        $tests[$i] .= ($test['not'] ? 'not ' : '') . $test['test'];
+
+                        $tokens = array('handle', 'uniqueid', 'header');
+                        foreach ($tokens as $token)
+                            if ($test[$token] !== null && $test[$token] !== '') {
+                                $tests[$i] .= " :$token " . self::escape_string($test[$token]);
+                            }
+
+                        if (!empty($test['seconds'])) {
+                            $tests[$i] .= ' :seconds ' . intval($test['seconds']);
+                        }
+
+                        if (!empty($test['last'])) {
+                            $tests[$i] .= ' :last';
+                        }
+
+                        break;
+                    }
+
+                    $i++;
+                }
+            }
+
+            // disabled rule: if false #....
+            if (!empty($tests)) {
+                $script .= 'if ' . ($rule['disabled'] ? 'false # ' : '');
+
+                if (count($tests) > 1) {
+                    $tests_str = implode(', ', $tests);
+                }
+                else {
+                    $tests_str = $tests[0];
+                }
+
+                if ($rule['join'] || count($tests) > 1) {
+                    $script .= sprintf('%s (%s)', $rule['join'] ? 'allof' : 'anyof', $tests_str);
+                }
+                else {
+                    $script .= $tests_str;
+                }
+                $script .= "\n{\n";
+            }
+
+            // action(s)
+            if (!empty($rule['actions'])) {
+                foreach ($rule['actions'] as $action) {
+                    $action_script = '';
+
+                    switch ($action['type']) {
+
+                    case 'fileinto':
+                        array_push($exts, 'fileinto');
+                        $action_script .= 'fileinto ';
+                        if ($action['copy']) {
+                            $action_script .= ':copy ';
+                            array_push($exts, 'copy');
+                        }
+                        $action_script .= self::escape_string($action['target']);
+                        break;
+
+                    case 'redirect':
+                        $action_script .= 'redirect ';
+                        if ($action['copy']) {
+                            $action_script .= ':copy ';
+                            array_push($exts, 'copy');
+                        }
+                        $action_script .= self::escape_string($action['target']);
+                        break;
+
+                    case 'reject':
+                    case 'ereject':
+                        array_push($exts, $action['type']);
+                        $action_script .= $action['type'].' '
+                            . self::escape_string($action['target']);
+                        break;
+
+                    case 'addflag':
+                    case 'setflag':
+                    case 'removeflag':
+                        array_push($exts, $imapflags);
+                        $action_script .= $action['type'].' '
+                            . self::escape_string($action['target']);
+                        break;
+
+                    case 'keep':
+                    case 'discard':
+                    case 'stop':
+                        $action_script .= $action['type'];
+                        break;
+
+                    case 'include':
+                        array_push($exts, 'include');
+                        $action_script .= 'include ';
+                        foreach (array_diff(array_keys($action), array('target', 'type')) as $opt) {
+                            $action_script .= ":$opt ";
+                        }
+                        $action_script .= self::escape_string($action['target']);
+                        break;
+
+                    case 'set':
+                        array_push($exts, 'variables');
+                        $action_script .= 'set ';
+                        foreach (array_diff(array_keys($action), array('name', 'value', 'type')) as $opt) {
+                            $action_script .= ":$opt ";
+                        }
+                        $action_script .= self::escape_string($action['name']) . ' ' . self::escape_string($action['value']);
+                        break;
+
+                    case 'notify':
+                        array_push($exts, $notify);
+                        $action_script .= 'notify';
+
+                        $method = $action['method'];
+                        unset($action['method']);
+                        $action['options'] = (array) $action['options'];
+
+                        // Here we support draft-martin-sieve-notify-01 used by Cyrus
+                        if ($notify == 'notify') {
+                            switch ($action['importance']) {
+                                case 1: $action_script .= " :high"; break;
+                                //case 2: $action_script .= " :normal"; break;
+                                case 3: $action_script .= " :low"; break;
+                            }
+
+                            // Old-draft way: :method "mailto" :options "email@address"
+                            if (!empty($method)) {
+                                $parts = explode(':', $method, 2);
+                                $action['method'] = $parts[0];
+                                array_unshift($action['options'], $parts[1]);
+                            }
+
+                            unset($action['importance']);
+                            unset($action['from']);
+                            unset($method);
+                        }
+
+                        foreach (array('id', 'importance', 'method', 'options', 'from', 'message') as $n_tag) {
+                            if (!empty($action[$n_tag])) {
+                                $action_script .= " :$n_tag " . self::escape_string($action[$n_tag]);
+                            }
+                        }
+
+                        if (!empty($method)) {
+                            $action_script .= ' ' . self::escape_string($method);
+                        }
+
+                        break;
+
+                    case 'vacation':
+                        array_push($exts, 'vacation');
+                        $action_script .= 'vacation';
+                        if (isset($action['seconds'])) {
+                            array_push($exts, 'vacation-seconds');
+                            $action_script .= " :seconds " . intval($action['seconds']);
+                        }
+                        else if (!empty($action['days'])) {
+                            $action_script .= " :days " . intval($action['days']);
+                        }
+                        if (!empty($action['addresses']))
+                            $action_script .= " :addresses " . self::escape_string($action['addresses']);
+                        if (!empty($action['subject']))
+                            $action_script .= " :subject " . self::escape_string($action['subject']);
+                        if (!empty($action['handle']))
+                            $action_script .= " :handle " . self::escape_string($action['handle']);
+                        if (!empty($action['from']))
+                            $action_script .= " :from " . self::escape_string($action['from']);
+                        if (!empty($action['mime']))
+                            $action_script .= " :mime";
+                        $action_script .= " " . self::escape_string($action['reason']);
+                        break;
+                    }
+
+                    if ($action_script) {
+                        $script .= !empty($tests) ? "\t" : '';
+                        $script .= $action_script . ";\n";
+                    }
+                }
+            }
+
+            if ($script) {
+                $output .= $script . (!empty($tests) ? "}\n" : '');
+                $idx++;
+            }
+        }
+
+        // requires
+        if (!empty($exts)) {
+            $exts = array_unique($exts);
+
+            if (in_array('vacation-seconds', $exts) && ($key = array_search('vacation', $exts)) !== false) {
+                unset($exts[$key]);
+            }
+
+            sort($exts); // for convenience use always the same order
+
+            $output = 'require ["' . implode('","', $exts) . "\"];\n" . $output;
+        }
+
+        if (!empty($this->prefix)) {
+            $output = $this->prefix . "\n\n" . $output;
+        }
+
+        return $output;
+    }
+
+    /**
+     * Returns script object
+     *
+     */
+    public function as_array()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Returns array of supported extensions
+     *
+     */
+    public function get_extensions()
+    {
+        return array_values($this->supported);
+    }
+
+    /**
+     * Converts text script to rules array
+     *
+     * @param string Text script
+     */
+    private function _parse_text($script)
+    {
+        $prefix   = '';
+        $options  = array();
+        $position = 0;
+        $length   = strlen($script);
+
+        while ($position < $length) {
+            // skip whitespace chars
+            $position = self::ltrim_position($script, $position);
+            $rulename = '';
+
+            // Comments
+            while ($script[$position] === '#') {
+                $endl = strpos($script, "\n", $position) ?: $length;
+                $line = substr($script, $position, $endl - $position);
+
+                // Roundcube format
+                if (preg_match('/^# rule:\[(.*)\]/', $line, $matches)) {
+                    $rulename = $matches[1];
+                }
+                // KEP:14 variables
+                else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) {
+                    $this->set_var($matches[1], $matches[2]);
+                }
+                // Horde-Ingo format
+                else if (!empty($options['format']) && $options['format'] == 'INGO'
+                    && preg_match('/^# (.*)/', $line, $matches)
+                ) {
+                    $rulename = $matches[1];
+                }
+                else if (empty($options['prefix'])) {
+                    $prefix .= $line . "\n";
+                }
+
+                // skip empty lines after the comment (#5657)
+                $position = self::ltrim_position($script, $endl + 1);
+            }
+
+            // handle script header
+            if (empty($options['prefix'])) {
+                $options['prefix'] = true;
+                if ($prefix && strpos($prefix, 'horde.org/ingo')) {
+                    $options['format'] = 'INGO';
+                }
+            }
+
+            // Control structures/blocks
+            if (preg_match('/^(if|else|elsif)/i', substr($script, $position, 5))) {
+                $rule = $this->_tokenize_rule($script, $position);
+                if (strlen($rulename) && !empty($rule)) {
+                    $rule['name'] = $rulename;
+                }
+            }
+            // Simple commands
+            else {
+                $rule = $this->_parse_actions($script, $position, ';');
+                if (!empty($rule[0]) && is_array($rule)) {
+                    // set "global" variables
+                    if ($rule[0]['type'] == 'set') {
+                        unset($rule[0]['type']);
+                        $this->vars[] = $rule[0];
+                        unset($rule);
+                    }
+                    else {
+                        $rule = array('actions' => $rule);
+                    }
+                }
+            }
+
+            if (!empty($rule)) {
+                $this->content[] = $rule;
+            }
+        }
+
+        if (!empty($prefix)) {
+            $this->prefix = trim($prefix);
+        }
+    }
+
+    /**
+     * Convert text script fragment to rule object
+     *
+     * @param string $content   The whole script content
+     * @param int    &$position Start position in the script
+     *
+     * @return array Rule data
+     */
+    private function _tokenize_rule($content, &$position)
+    {
+        $cond = strtolower(self::tokenize($content, 1, $position));
+        if ($cond != 'if' && $cond != 'elsif' && $cond != 'else') {
+            return null;
+        }
+
+        $disabled = false;
+        $join     = false;
+        $join_not = false;
+        $length   = strlen($content);
+
+        // disabled rule (false + comment): if false # .....
+        if (preg_match('/^\s*false\s+#\s*/i', substr($content, $position, 20), $m)) {
+            $position += strlen($m[0]);
+            $disabled = true;
+        }
+
+        while ($position < $length) {
+            $tokens    = self::tokenize($content, true, $position);
+            $separator = array_pop($tokens);
+
+            if (!empty($tokens)) {
+                $token = array_shift($tokens);
+            }
+            else {
+                $token = $separator;
+            }
+
+            $token = strtolower($token);
+
+            if ($token == 'not') {
+                $not = true;
+                $token = strtolower(array_shift($tokens));
+            }
+            else {
+                $not = false;
+            }
+
+            // we support "not allof" as a negation of allof sub-tests
+            if ($join_not) {
+                $not = !$not;
+            }
+
+            switch ($token) {
+            case 'allof':
+                $join     = true;
+                $join_not = $not;
+                break;
+
+            case 'anyof':
+                break;
+
+            case 'size':
+                $test = array('test' => 'size', 'not' => $not);
+
+                $test['arg'] = array_pop($tokens);
+
+                for ($i=0, $len=count($tokens); $i<$len; $i++) {
+                    if (!is_array($tokens[$i])
+                        && preg_match('/^:(under|over)$/i', $tokens[$i])
+                    ) {
+                        $test['type'] = strtolower(substr($tokens[$i], 1));
+                    }
+                }
+
+                $tests[] = $test;
+                break;
+
+            case 'header':
+            case 'string':
+            case 'address':
+            case 'envelope':
+                $test = array('test' => $token, 'not' => $not);
+
+                $test['arg2'] = array_pop($tokens);
+                $test['arg1'] = array_pop($tokens);
+
+                $test += $this->test_tokens($tokens);
+
+                if ($token != 'header' && $token != 'string' && !empty($tokens)) {
+                    for ($i=0, $len=count($tokens); $i<$len; $i++) {
+                        if (!is_array($tokens[$i]) && preg_match('/^:(localpart|domain|all|user|detail)$/i', $tokens[$i])) {
+                            $test['part'] = strtolower(substr($tokens[$i], 1));
+                        }
+                    }
+                }
+
+                $tests[] = $test;
+                break;
+
+            case 'body':
+                $test = array('test' => 'body', 'not' => $not);
+
+                $test['arg'] = array_pop($tokens);
+
+                $test += $this->test_tokens($tokens);
+
+                for ($i=0, $len=count($tokens); $i<$len; $i++) {
+                    if (!is_array($tokens[$i]) && preg_match('/^:(raw|content|text)$/i', $tokens[$i])) {
+                        $test['part'] = strtolower(substr($tokens[$i], 1));
+
+                        if ($test['part'] == 'content') {
+                            $test['content'] = $tokens[++$i];
+                        }
+                    }
+                }
+
+                $tests[] = $test;
+                break;
+
+            case 'date':
+            case 'currentdate':
+                $test = array('test' => $token, 'not' => $not);
+
+                $test['arg']  = array_pop($tokens);
+                $test['part'] = array_pop($tokens);
+
+                if ($token == 'date') {
+                    $test['header']  = array_pop($tokens);
+                }
+
+                $test += $this->test_tokens($tokens);
+
+                for ($i=0, $len=count($tokens); $i<$len; $i++) {
+                    if (!is_array($tokens[$i]) && preg_match('/^:zone$/i', $tokens[$i])) {
+                        $test['zone'] = $tokens[++$i];
+                    }
+                    else if (!is_array($tokens[$i]) && preg_match('/^:originalzone$/i', $tokens[$i])) {
+                        $test['originalzone'] = true;
+                    }
+                }
+
+                $tests[] = $test;
+                break;
+
+            case 'duplicate':
+                $test = array('test' => $token, 'not' => $not);
+
+                for ($i=0, $len=count($tokens); $i<$len; $i++) {
+                    if (!is_array($tokens[$i])) {
+                        if (preg_match('/^:(handle|header|uniqueid|seconds)$/i', $tokens[$i], $m)) {
+                            $test[strtolower($m[1])] = $tokens[++$i];
+                        }
+                        else if (preg_match('/^:last$/i', $tokens[$i])) {
+                            $test['last'] = true;
+                        }
+                    }
+                }
+
+                $tests[] = $test;
+                break;
+
+            case 'exists':
+                $tests[] = array('test' => 'exists', 'not' => $not,
+                    'arg'  => array_pop($tokens));
+                break;
+
+            case 'true':
+                $tests[] = array('test' => 'true', 'not' => $not);
+                break;
+
+            case 'false':
+                $tests[] = array('test' => 'true', 'not' => !$not);
+                break;
+            }
+
+            // goto actions...
+            if ($separator == '{') {
+                break;
+            }
+        }
+
+        // ...and actions block
+        $actions = $this->_parse_actions($content, $position);
+
+        if ($tests && $actions) {
+            $result = array(
+                'type'     => $cond,
+                'tests'    => $tests,
+                'actions'  => $actions,
+                'join'     => $join,
+                'disabled' => $disabled,
+            );
+        }
+
+        return $result;
+    }
+
+    /**
+     * Parse body of actions section
+     *
+     * @param string $content   The whole script content
+     * @param int    &$position Start position in the script
+     * @param string $end       End of text separator
+     *
+     * @return array Array of parsed action type/target pairs
+     */
+    private function _parse_actions($content, &$position, $end = '}')
+    {
+        $result = null;
+        $length = strlen($content);
+
+        while ($position < $length) {
+            $tokens    = self::tokenize($content, true, $position);
+            $separator = array_pop($tokens);
+            $token     = !empty($tokens) ? array_shift($tokens) : $separator;
+
+            switch ($token) {
+            case 'if':
+                // nested 'if' conditions, ignore the whole rule (#5540)
+                $this->_parse_actions($content, $position);
+                continue 2;
+
+            case 'discard':
+            case 'keep':
+            case 'stop':
+                $result[] = array('type' => $token);
+                break;
+
+            case 'fileinto':
+            case 'redirect':
+                $action  = array('type' => $token, 'target' => array_pop($tokens));
+                $args    = array('copy');
+                $action += $this->action_arguments($tokens, $args);
+
+                $result[] = $action;
+                break;
+
+            case 'vacation':
+                $action  = array('type' => 'vacation', 'reason' => array_pop($tokens));
+                $args    = array('mime');
+                $vargs   = array('seconds', 'days', 'addresses', 'subject', 'handle', 'from');
+                $action += $this->action_arguments($tokens, $args, $vargs);
+
+                $result[] = $action;
+                break;
+
+            case 'reject':
+            case 'ereject':
+            case 'setflag':
+            case 'addflag':
+            case 'removeflag':
+                $result[] = array('type' => $token, 'target' => array_pop($tokens));
+                break;
+
+            case 'include':
+                $action  = array('type' => 'include', 'target' => array_pop($tokens));
+                $args    = array('once', 'optional', 'global', 'personal');
+                $action += $this->action_arguments($tokens, $args);
+
+                $result[] = $action;
+                break;
+
+            case 'set':
+                $action  = array('type' => 'set', 'value' => array_pop($tokens), 'name' => array_pop($tokens));
+                $args    = array('lower', 'upper', 'lowerfirst', 'upperfirst', 'quotewildcard', 'length');
+                $action += $this->action_arguments($tokens, $args);
+
+                $result[] = $action;
+                break;
+
+            case 'require':
+                // skip, will be build according to used commands
+                // $result[] = array('type' => 'require', 'target' => array_pop($tokens));
+                break;
+
+            case 'notify':
+                $action     = array('type' => 'notify');
+                $priorities = array('high' => 1, 'normal' => 2, 'low' => 3);
+                $vargs      = array('from', 'id', 'importance', 'options', 'message', 'method');
+                $args       = array_keys($priorities);
+                $action    += $this->action_arguments($tokens, $args, $vargs);
+
+                // Here we'll convert draft-martin-sieve-notify-01 into RFC 5435
+                if (!isset($action['importance'])) {
+                    foreach ($priorities as $key => $val) {
+                        if (isset($action[$key])) {
+                            $action['importance'] = $val;
+                            unset($action[$key]);
+                        }
+                    }
+                }
+
+                $action['options'] = (array) $action['options'];
+
+                // Old-draft way: :method "mailto" :options "email@address"
+                if (!empty($action['method']) && !empty($action['options'])) {
+                    $action['method'] .= ':' . array_shift($action['options']);
+                }
+                // unnamed parameter is a :method in enotify extension
+                else if (!isset($action['method'])) {
+                    $action['method'] = array_pop($tokens);
+                }
+
+                $result[] = $action;
+                break;
+            }
+
+            if ($separator == $end) {
+                break;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Add comparator to the test
+     */
+    private function add_comparator($test, &$out, &$exts)
+    {
+        if (empty($test['comparator'])) {
+            return;
+        }
+
+        if ($test['comparator'] == 'i;ascii-numeric') {
+            array_push($exts, 'relational');
+            array_push($exts, 'comparator-i;ascii-numeric');
+        }
+        else if (!in_array($test['comparator'], array('i;octet', 'i;ascii-casemap'))) {
+            array_push($exts, 'comparator-' . $test['comparator']);
+        }
+
+        // skip default comparator
+        if ($test['comparator'] != 'i;ascii-casemap') {
+            $out .= ' :comparator ' . self::escape_string($test['comparator']);
+        }
+    }
+
+    /**
+     * Add index argument to the test
+     */
+    private function add_index($test, &$out, &$exts)
+    {
+        if (!empty($test['index'])) {
+            array_push($exts, 'index');
+            $out .= ' :index ' . intval($test['index']) . ($test['last'] ? ' :last' : '');
+        }
+    }
+
+    /**
+     * Add operators to the test
+     */
+    private function add_operator($test, &$out, &$exts)
+    {
+        if (empty($test['type'])) {
+            return;
+        }
+
+        // relational operator
+        if (preg_match('/^(value|count)-([gteqnl]{2})/', $test['type'], $m)) {
+            array_push($exts, 'relational');
+
+            $out .= ' :' . $m[1] . ' "' . $m[2] . '"';
+        }
+        else {
+            if ($test['type'] == 'regex') {
+                array_push($exts, 'regex');
+            }
+
+            $out .= ' :' . $test['type'];
+        }
+
+        $this->add_comparator($test, $out, $exts);
+    }
+
+    /**
+     * Extract test tokens
+     */
+    private function test_tokens(&$tokens)
+    {
+        $test   = array();
+        $result = array();
+
+        for ($i=0, $len=count($tokens); $i<$len; $i++) {
+            if (!is_array($tokens[$i]) && preg_match('/^:comparator$/i', $tokens[$i])) {
+                $test['comparator'] = $tokens[++$i];
+            }
+            else if (!is_array($tokens[$i]) && preg_match('/^:(count|value)$/i', $tokens[$i])) {
+                $test['type'] = strtolower(substr($tokens[$i], 1)) . '-' . $tokens[++$i];
+            }
+            else if (!is_array($tokens[$i]) && preg_match('/^:(is|contains|matches|regex)$/i', $tokens[$i])) {
+                $test['type'] = strtolower(substr($tokens[$i], 1));
+            }
+            else if (!is_array($tokens[$i]) && preg_match('/^:index$/i', $tokens[$i])) {
+                $test['index'] = intval($tokens[++$i]);
+                if ($tokens[$i+1] && preg_match('/^:last$/i', $tokens[$i+1])) {
+                    $test['last'] = true;
+                    $i++;
+                }
+           }
+           else {
+               $result[] = $tokens[$i];
+           }
+        }
+
+        $tokens = $result;
+
+        return $test;
+    }
+
+    /**
+     * Extract action arguments
+     */
+    private function action_arguments(&$tokens, $bool_args, $val_args = array())
+    {
+        $action = array();
+        $result = array();
+
+        for ($i=0, $len=count($tokens); $i<$len; $i++) {
+            $tok = $tokens[$i];
+            if (!is_array($tok) && $tok[0] == ':') {
+                $tok = strtolower(substr($tok, 1));
+                if (in_array($tok, $bool_args)) {
+                    $action[$tok] = true;
+                }
+                else if (in_array($tok, $val_args)) {
+                    $action[$tok] = $tokens[++$i];
+                }
+                else {
+                    $result[] = $tok;
+                }
+            }
+            else {
+                $result[] = $tok;
+            }
+        }
+
+        $tokens = $result;
+
+        return $action;
+    }
+
+    /**
+     * Escape special chars into quoted string value or multi-line string
+     * or list of strings
+     *
+     * @param string $str Text or array (list) of strings
+     *
+     * @return string Result text
+     */
+    static function escape_string($str)
+    {
+        if (is_array($str) && count($str) > 1) {
+            foreach ($str as $idx => $val)
+                $str[$idx] = self::escape_string($val);
+
+            return '[' . implode(',', $str) . ']';
+        }
+        else if (is_array($str)) {
+            $str = array_pop($str);
+        }
+
+        // multi-line string
+        if (preg_match('/[\r\n\0]/', $str) || strlen($str) > 1024) {
+            return sprintf("text:\n%s\n.\n", self::escape_multiline_string($str));
+        }
+        // quoted-string
+        else {
+            return '"' . addcslashes($str, '\\"') . '"';
+        }
+    }
+
+    /**
+     * Escape special chars in multi-line string value
+     *
+     * @param string $str Text
+     *
+     * @return string Text
+     */
+    static function escape_multiline_string($str)
+    {
+        $str = preg_split('/(\r?\n)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
+
+        foreach ($str as $idx => $line) {
+            // dot-stuffing
+            if (isset($line[0]) && $line[0] == '.') {
+                $str[$idx] = '.' . $line;
+            }
+        }
+
+        return implode($str);
+    }
+
+    /**
+     * Splits script into string tokens
+     *
+     * @param string $str       The script
+     * @param mixed  $num       Number of tokens to return, 0 for all
+     *                          or True for all tokens until separator is found.
+     *                          Separator will be returned as last token.
+     * @param int    &$position Parsing start position
+     *
+     * @return mixed Tokens array or string if $num=1
+     */
+    static function tokenize($str, $num = 0, &$position = 0)
+    {
+        $result = array();
+        $length = strlen($str);
+
+        // remove spaces from the beginning of the string
+        while ($position < $length && (!$num || $num === true || count($result) < $num)) {
+            // skip whitespace chars
+            $position = self::ltrim_position($str, $position);
+
+            switch ($str[$position]) {
+
+            // Quoted string
+            case '"':
+                for ($pos = $position + 1; $pos < $length; $pos++) {
+                    if ($str[$pos] == '"') {
+                        break;
+                    }
+                    if ($str[$pos] == "\\") {
+                        if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") {
+                            $pos++;
+                        }
+                    }
+                }
+                if ($str[$pos] != '"') {
+                    // error
+                }
+
+                // we need to strip slashes for a quoted string
+                $result[] = stripslashes(substr($str, $position + 1, $pos - $position - 1));
+                $position = $pos + 1;
+                break;
+
+            // Parenthesized list
+            case '[':
+                $position++;
+                $result[] = self::tokenize($str, 0, $position);
+                break;
+            case ']':
+                $position++;
+                return $result;
+                break;
+
+            // list/test separator
+            case ',':
+            // command separator
+            case ';':
+            // block/tests-list
+            case '(':
+            case ')':
+            case '{':
+            case '}':
+                $sep = $str[$position];
+                $position++;
+                if ($num === true) {
+                    $result[] = $sep;
+                    break 2;
+                }
+                break;
+
+            // bracket-comment
+            case '/':
+                if ($str[$position + 1] == '*') {
+                    if ($end_pos = strpos($str, '*/', $position + 2)) {
+                        $position = $end_pos + 2;
+                    }
+                    else {
+                        // error
+                        $position = $length;
+                    }
+                }
+                break;
+
+            // hash-comment
+            case '#':
+                if ($lf_pos = strpos($str, "\n", $position)) {
+                    $position = $lf_pos + 1;
+                    break;
+                }
+                else {
+                    $position = $length;
+                }
+
+            // String atom
+            default:
+                // empty or one character
+                if ($position == $length) {
+                    break 2;
+                }
+                if ($length - $position < 2) {
+                    $result[] = substr($str, $position);
+                    $position = $length;
+                    break;
+                }
+
+                // tag/identifier/number
+                if (preg_match('/[a-zA-Z0-9:_]+/', $str, $m, PREG_OFFSET_CAPTURE, $position)
+                    && $m[0][1] == $position
+                ) {
+                    $atom      = $m[0][0];
+                    $position += strlen($atom);
+
+                    if ($atom != 'text:') {
+                        $result[] = $atom;
+                    }
+                    // multiline string
+                    else {
+                        // skip whitespace chars (except \r\n)
+                        $position = self::ltrim_position($str, $position, false);
+
+                        // possible hash-comment after "text:"
+                        if ($str[$position] === '#') {
+                            $endl     = strpos($str, "\n", $position);
+                            $position = $endl ?: $length;
+                        }
+
+                        // skip \n or \r\n
+                        if ($str[$position] == "\n") {
+                            $position++;
+                        }
+                        else if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
+                            $position += 2;
+                        }
+
+                        $text = '';
+
+                        // get text until alone dot in a line
+                        while ($position < $length) {
+                            $pos = strpos($str, "\n.", $position);
+                            if ($pos === false) {
+                                break;
+                            }
+
+                            $text    .= substr($str, $position, $pos - $position);
+                            $position = $pos + 2;
+
+                            if ($str[$position] == "\n") {
+                                break;
+                            }
+
+                            if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
+                                $position++;
+                                break;
+                            }
+
+                            $text .= "\n.";
+                        }
+
+                        // remove dot-stuffing
+                        $text = str_replace("\n..", "\n.", $text);
+
+                        $result[] = $text;
+                        $position++;
+                    }
+                }
+                // fallback, skip one character as infinite loop prevention
+                else {
+                    $position++;
+                }
+
+                break;
+            }
+        }
+
+        return $num === 1 ? (isset($result[0]) ? $result[0] : null) : $result;
+    }
+
+    /**
+     * Skip whitespace characters in a string from specified position.
+     */
+    static function ltrim_position($content, $position, $br = true)
+    {
+        $blanks = array("\t", "\0", "\x0B", " ");
+
+        if ($br) {
+            $blanks[] = "\r";
+            $blanks[] = "\n";
+        }
+
+        while (isset($content[$position]) && isset($content[$position + 1])
+            && in_array($content[$position], $blanks, true)
+        ) {
+            $position++;
+        }
+
+        return $position;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,935 @@
+<?php
+
+/**
+ * Managesieve Vacation Engine
+ *
+ * Engine part of Managesieve plugin implementing UI and backend access.
+ *
+ * Copyright (C) 2011-2014, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sieve_vacation extends rcube_sieve_engine
+{
+    protected $error;
+    protected $script_name;
+    protected $vacation = array();
+
+    function actions()
+    {
+        $error = $this->start('vacation');
+
+        // find current vacation rule
+        if (!$error) {
+            $this->vacation_rule();
+            $this->vacation_post();
+        }
+
+        $this->plugin->add_label('vacation.saving');
+        $this->rc->output->add_handlers(array(
+            'vacationform' => array($this, 'vacation_form'),
+        ));
+
+        $this->rc->output->set_pagetitle($this->plugin->gettext('vacation'));
+        $this->rc->output->send('managesieve.vacation');
+    }
+
+    /**
+     * Find and load sieve script with/for vacation rule
+     *
+     * @param string $script_name Optional script name
+     *
+     * @return int Connection status: 0 on success, >0 on failure
+     */
+    protected function load_script($script_name = null)
+    {
+        if ($this->script_name !== null) {
+            return 0;
+        }
+
+        $list     = $this->list_scripts();
+        $master   = $this->rc->config->get('managesieve_kolab_master');
+        $included = array();
+
+        $this->script_name = false;
+
+        // first try the active script(s)...
+        if (!empty($this->active)) {
+            // Note: there can be more than one active script on KEP:14-enabled server
+            foreach ($this->active as $script) {
+                if ($this->sieve->load($script)) {
+                    foreach ($this->sieve->script->as_array() as $rule) {
+                        if (!empty($rule['actions'])) {
+                            if ($rule['actions'][0]['type'] == 'vacation') {
+                                $this->script_name = $script;
+                                return 0;
+                            }
+                            else if (empty($master) && $rule['actions'][0]['type'] == 'include') {
+                                $included[] = $rule['actions'][0]['target'];
+                            }
+                        }
+                    }
+                }
+            }
+
+            // ...else try scripts included in active script (not for KEP:14)
+            foreach ($included as $script) {
+                if ($this->sieve->load($script)) {
+                    foreach ($this->sieve->script->as_array() as $rule) {
+                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+                            $this->script_name = $script;
+                            return 0;
+                        }
+                    }
+                }
+            }
+        }
+
+        // try all other scripts
+        if (!empty($list)) {
+            // else try included scripts
+            foreach (array_diff($list, $included, $this->active) as $script) {
+                if ($this->sieve->load($script)) {
+                    foreach ($this->sieve->script->as_array() as $rule) {
+                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+                            $this->script_name = $script;
+                            return 0;
+                        }
+                    }
+                }
+            }
+
+            // none of the scripts contains existing vacation rule
+            // use any (first) active or just existing script (in that order)
+            if (!empty($this->active)) {
+                $this->sieve->load($this->script_name = $this->active[0]);
+            }
+            else {
+                $this->sieve->load($this->script_name = $list[0]);
+            }
+        }
+
+        return $this->sieve->error();
+    }
+
+    private function vacation_rule()
+    {
+        if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
+            return;
+        }
+
+        $list   = array();
+        $active = in_array($this->script_name, $this->active);
+
+        // find (first) vacation rule
+        foreach ($this->script as $idx => $rule) {
+            if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+                foreach ($rule['actions'] as $act) {
+                    if ($act['type'] == 'discard' || $act['type'] == 'keep') {
+                        $action = $act['type'];
+                    }
+                    else if ($act['type'] == 'redirect') {
+                        $action = $act['copy'] ? 'copy' : 'redirect';
+                        $target = $act['target'];
+                    }
+                }
+
+                $this->vacation = array_merge($rule['actions'][0], array(
+                        'idx'      => $idx,
+                        'disabled' => $rule['disabled'] || !$active,
+                        'name'     => $rule['name'],
+                        'tests'    => $rule['tests'],
+                        'action'   => $action ?: 'keep',
+                        'target'   => $target,
+                ));
+            }
+            else if ($active) {
+                $list[$idx] = $rule['name'];
+            }
+        }
+
+        $this->vacation['list'] = $list;
+    }
+
+    private function vacation_post()
+    {
+        if (empty($_POST)) {
+            return;
+        }
+
+        $date_extension  = in_array('date', $this->exts);
+        $regex_extension = in_array('regex', $this->exts);
+
+        // set user's timezone
+        try {
+            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
+        }
+        catch (Exception $e) {
+            $timezone = new DateTimeZone('GMT');
+        }
+
+        $status        = rcube_utils::get_input_value('vacation_status', rcube_utils::INPUT_POST);
+        $from          = rcube_utils::get_input_value('vacation_from', rcube_utils::INPUT_POST);
+        $subject       = rcube_utils::get_input_value('vacation_subject', rcube_utils::INPUT_POST, true);
+        $reason        = rcube_utils::get_input_value('vacation_reason', rcube_utils::INPUT_POST, true);
+        $addresses     = rcube_utils::get_input_value('vacation_addresses', rcube_utils::INPUT_POST, true);
+        $interval      = rcube_utils::get_input_value('vacation_interval', rcube_utils::INPUT_POST);
+        $interval_type = rcube_utils::get_input_value('vacation_interval_type', rcube_utils::INPUT_POST);
+        $date_from     = rcube_utils::get_input_value('vacation_datefrom', rcube_utils::INPUT_POST);
+        $date_to       = rcube_utils::get_input_value('vacation_dateto', rcube_utils::INPUT_POST);
+        $time_from     = rcube_utils::get_input_value('vacation_timefrom', rcube_utils::INPUT_POST);
+        $time_to       = rcube_utils::get_input_value('vacation_timeto', rcube_utils::INPUT_POST);
+        $after         = rcube_utils::get_input_value('vacation_after', rcube_utils::INPUT_POST);
+        $action        = rcube_utils::get_input_value('vacation_action', rcube_utils::INPUT_POST);
+        $target        = rcube_utils::get_input_value('action_target', rcube_utils::INPUT_POST, true);
+        $target_domain = rcube_utils::get_input_value('action_domain', rcube_utils::INPUT_POST);
+
+        $interval_type                   = $interval_type == 'seconds' ? 'seconds' : 'days';
+        $vacation_action['type']         = 'vacation';
+        $vacation_action['reason']       = $this->strip_value(str_replace("\r\n", "\n", $reason));
+        $vacation_action['subject']      = trim($subject);
+        $vacation_action['from']         = trim($from);
+        $vacation_action['addresses']    = $addresses;
+        $vacation_action[$interval_type] = $interval;
+        $vacation_tests                  = (array) $this->vacation['tests'];
+
+        foreach ((array) $vacation_action['addresses'] as $aidx => $address) {
+            $vacation_action['addresses'][$aidx] = $address = trim($address);
+
+            if (empty($address)) {
+                unset($vacation_action['addresses'][$aidx]);
+            }
+            else if (!rcube_utils::check_email($address)) {
+                $error = 'noemailwarning';
+                break;
+            }
+        }
+
+        if (!empty($vacation_action['from']) && !rcube_utils::check_email($vacation_action['from'])) {
+            $error = 'noemailwarning';
+        }
+
+        if ($vacation_action['reason'] == '') {
+            $error = 'managesieve.emptyvacationbody';
+        }
+
+        if ($vacation_action[$interval_type] && !preg_match('/^[0-9]+$/', $vacation_action[$interval_type])) {
+            $error = 'managesieve.forbiddenchars';
+        }
+
+        // find and remove existing date/regex/true rules
+        foreach ((array) $vacation_tests as $idx => $t) {
+            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
+                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
+            ) {
+                unset($vacation_tests[$idx]);
+            }
+        }
+
+        if ($date_extension) {
+            $date_format = $this->rc->config->get('date_format', 'Y-m-d');
+            foreach (array('date_from', 'date_to') as $var) {
+                $time = ${str_replace('date', 'time', $var)};
+                $date = rcube_utils::format_datestr($$var, $date_format);
+                $date = trim($date . ' ' . $time);
+
+                if ($date && ($dt = rcube_utils::anytodatetime($date, $timezone))) {
+                    if ($time) {
+                        $vacation_tests[] = array(
+                            'test' => 'currentdate',
+                            'part' => 'iso8601',
+                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
+                            'zone' => $dt->format('O'),
+                            'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
+                        );
+                    }
+                    else {
+                        $vacation_tests[] = array(
+                            'test' => 'currentdate',
+                            'part' => 'date',
+                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
+                            'zone' => $dt->format('O'),
+                            'arg'  => $dt->format('Y-m-d'),
+                        );
+                    }
+                }
+            }
+        }
+        else if ($regex_extension) {
+            // Add date range rules if range specified
+            if ($date_from && $date_to) {
+                if ($tests = self::build_regexp_tests($date_from, $date_to, $error)) {
+                    $vacation_tests = array_merge($vacation_tests, $tests);
+                }
+            }
+        }
+
+        if ($action == 'redirect' || $action == 'copy') {
+            if ($target_domain) {
+                $target .= '@' . $target_domain;
+            }
+
+            if (empty($target) || !rcube_utils::check_email($target)) {
+                $error = 'noemailwarning';
+            }
+        }
+
+        if (empty($vacation_tests)) {
+            $vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
+        }
+
+        if (!$error) {
+            $rule               = $this->vacation;
+            $rule['type']       = 'if';
+            $rule['name']       = $rule['name'] ?: $this->plugin->gettext('vacation');
+            $rule['disabled']   = $status == 'off';
+            $rule['tests']      = $vacation_tests;
+            $rule['join']       = $date_extension ? count($vacation_tests) > 1 : false;
+            $rule['actions']    = array($vacation_action);
+            $rule['after']      = $after;
+
+            if ($action && $action != 'keep') {
+                $rule['actions'][] = array(
+                    'type'   => $action == 'discard' ? 'discard' : 'redirect',
+                    'copy'   => $action == 'copy',
+                    'target' => $action != 'discard' ? $target : '',
+                );
+            }
+
+            if ($this->save_vacation_script($rule)) {
+                $this->rc->output->show_message('managesieve.vacationsaved', 'confirmation');
+                $this->rc->output->send();
+            }
+        }
+
+        $this->rc->output->show_message($error ?: 'managesieve.saveerror', 'error');
+        $this->rc->output->send();
+    }
+
+    /**
+     * Independent vacation form
+     */
+    public function vacation_form($attrib)
+    {
+        // check supported extensions
+        $date_extension    = in_array('date', $this->exts);
+        $regex_extension   = in_array('regex', $this->exts);
+        $seconds_extension = in_array('vacation-seconds', $this->exts);
+
+        // build FORM tag
+        $form_id = $attrib['id'] ?: 'form';
+        $out     = $this->rc->output->request_form(array(
+            'id'      => $form_id,
+            'name'    => $form_id,
+            'method'  => 'post',
+            'task'    => 'settings',
+            'action'  => 'plugin.managesieve-vacation',
+            'noclose' => true
+            ) + $attrib);
+
+        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');
+        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');
+
+        if (count($this->vacation) < 2) {
+            if ($auto_addr) {
+                $this->vacation['addresses'] = $this->user_emails();
+            }
+            if ($from_addr) {
+                $default_identity = $this->rc->user->list_emails(true);
+                $this->vacation['from'] = $default_identity['email'];
+            }
+        }
+
+        // form elements
+        $from      = new html_inputfield(array('name' => 'vacation_from', 'id' => 'vacation_from', 'size' => 50));
+        $subject   = new html_inputfield(array('name' => 'vacation_subject', 'id' => 'vacation_subject', 'size' => 50));
+        $reason    = new html_textarea(array('name' => 'vacation_reason', 'id' => 'vacation_reason', 'cols' => 60, 'rows' => 8));
+        $interval  = new html_inputfield(array('name' => 'vacation_interval', 'id' => 'vacation_interval', 'size' => 5));
+        $addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">'
+            . rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) . '</textarea>';
+        $status    = new html_select(array('name' => 'vacation_status', 'id' => 'vacation_status'));
+        $action    = new html_select(array('name' => 'vacation_action', 'id' => 'vacation_action', 'onchange' => 'vacation_action_select()'));
+        $addresses_link = new html_inputfield(array(
+                'type'    => 'button',
+                'href'    => '#',
+                'class' => 'button',
+                'onclick' => rcmail_output::JS_OBJECT_NAME . '.managesieve_vacation_addresses()'
+            ));
+
+        $status->add($this->plugin->gettext('vacation.on'), 'on');
+        $status->add($this->plugin->gettext('vacation.off'), 'off');
+
+        $action->add($this->plugin->gettext('vacation.keep'), 'keep');
+        $action->add($this->plugin->gettext('vacation.discard'), 'discard');
+        $action->add($this->plugin->gettext('vacation.redirect'), 'redirect');
+        if (in_array('copy', $this->exts)) {
+            $action->add($this->plugin->gettext('vacation.copy'), 'copy');
+        }
+
+        if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) {
+            $after = new html_select(array('name' => 'vacation_after', 'id' => 'vacation_after'));
+
+            $after->add('', '');
+            foreach ($this->vacation['list'] as $idx => $rule) {
+                $after->add($rule, $idx);
+            }
+        }
+
+        $interval_txt = $interval->show(self::vacation_interval($this->vacation));
+        if ($seconds_extension) {
+            $interval_select = new html_select(array('name' => 'vacation_interval_type'));
+            $interval_select->add($this->plugin->gettext('days'), 'days');
+            $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
+            $interval_txt .= '&nbsp;' . $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days');
+        }
+        else {
+            $interval_txt .= '&nbsp;' . $this->plugin->gettext('days');
+        }
+
+        if ($date_extension || $regex_extension) {
+            $date_from   = new html_inputfield(array('name' => 'vacation_datefrom', 'id' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12));
+            $date_to     = new html_inputfield(array('name' => 'vacation_dateto', 'id' => 'vacation_dateto', 'class' => 'datepicker', 'size' => 12));
+            $date_format = $this->rc->config->get('date_format', 'Y-m-d');
+        }
+
+        if ($date_extension) {
+            $time_from   = new html_inputfield(array('name' => 'vacation_timefrom', 'id' => 'vacation_timefrom', 'size' => 7));
+            $time_to     = new html_inputfield(array('name' => 'vacation_timeto', 'id' => 'vacation_timeto', 'size' => 7));
+            $time_format = $this->rc->config->get('time_format', 'H:i');
+            $date_value  = array();
+
+            foreach ((array) $this->vacation['tests'] as $test) {
+                if ($test['test'] == 'currentdate') {
+                    $idx = $test['type'] == 'value-ge' ? 'from' : 'to';
+
+                    if ($test['part'] == 'date') {
+                        $date_value[$idx]['date'] = $test['arg'];
+                    }
+                    else if ($test['part'] == 'iso8601') {
+                        $date_value[$idx]['datetime'] = $test['arg'];
+                    }
+                }
+            }
+
+            foreach ($date_value as $idx => $value) {
+                $date = $value['datetime'] ?: $value['date'];
+                $date_value[$idx] = $this->rc->format_date($date, $date_format, false);
+
+                if (!empty($value['datetime'])) {
+                    $date_value['time_' . $idx] = $this->rc->format_date($date, $time_format, true);
+                }
+            }
+        }
+        else if ($regex_extension) {
+            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
+            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
+                $date_value['from'] = $this->rc->format_date($date_tests['from'], $date_format, false);
+                $date_value['to']   = $this->rc->format_date($date_tests['to'], $date_format, false);
+            }
+        }
+
+        // force domain selection in redirect email input
+        $domains  = (array) $this->rc->config->get('managesieve_domains');
+        $redirect = $this->vacation['action'] == 'redirect' || $this->vacation['action'] == 'copy';
+
+        if (!empty($domains)) {
+            sort($domains);
+
+            $domain_select = new html_select(array('name' => 'action_domain', 'id' => 'action_domain'));
+            $domain_select->add(array_combine($domains, $domains));
+
+            if ($redirect && $this->vacation['target']) {
+                $parts = explode('@', $this->vacation['target']);
+                if (!empty($parts)) {
+                    $this->vacation['domain'] = array_pop($parts);
+                    $this->vacation['target'] = implode('@', $parts);
+                }
+            }
+        }
+
+        // redirect target
+        $action_target = ' <span id="action_target_span" style="display:' . ($redirect ? 'inline' : 'none') . '">'
+            . '<input type="text" name="action_target" id="action_target"'
+            . ' value="' .($redirect ? rcube::Q($this->vacation['target'], 'strict', false) : '') . '"'
+            . (!empty($domains) ? ' size="20"' : ' size="35"') . '/>'
+            . (!empty($domains) ? ' @ ' . $domain_select->show($this->vacation['domain']) : '')
+            . '</span>';
+
+        // Message tab
+        $table = new html_table(array('cols' => 2));
+
+        $table->add('title', html::label('vacation_subject', $this->plugin->gettext('vacation.subject')));
+        $table->add(null, $subject->show($this->vacation['subject']));
+        $table->add('title', html::label('vacation_reason', $this->plugin->gettext('vacation.body')));
+        $table->add(null, $reason->show($this->vacation['reason']));
+
+        if ($date_extension || $regex_extension) {
+            $table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.start')));
+            $table->add(null, $date_from->show($date_value['from']) . ($time_from ? ' ' . $time_from->show($date_value['time_from']) : ''));
+            $table->add('title', html::label('vacation_dateto', $this->plugin->gettext('vacation.end')));
+            $table->add(null, $date_to->show($date_value['to']) . ($time_to ? ' ' . $time_to->show($date_value['time_to']) : ''));
+        }
+
+        $table->add('title', html::label('vacation_status', $this->plugin->gettext('vacation.status')));
+        $table->add(null, $status->show(!isset($this->vacation['disabled']) || $this->vacation['disabled'] ? 'off' : 'on'));
+
+        $out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.reply')) . $table->show($attrib));
+
+        // Advanced tab
+        $table = new html_table(array('cols' => 2));
+
+        $table->add('title', html::label('vacation_from', $this->plugin->gettext('vacation.from')));
+        $table->add(null, $from->show($this->vacation['from']));
+        $table->add('title', html::label('vacation_addresses', $this->plugin->gettext('vacation.addresses')));
+        $table->add(null, $addresses . $addresses_link->show($this->plugin->gettext('filladdresses')));
+        $table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval')));
+        $table->add(null, $interval_txt);
+
+        if ($after) {
+            $table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after')));
+            $table->add(null, $after->show($this->vacation['idx'] - 1));
+        }
+
+        $table->add('title', html::label('vacation_action', $this->plugin->gettext('vacation.action')));
+        $table->add('vacation', $action->show($this->vacation['action']) . $action_target);
+
+        $out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.advanced')) . $table->show($attrib));
+
+        $out .= '</form>';
+
+        $this->rc->output->add_gui_object('sieveform', $form_id);
+
+        if ($time_format) {
+            $this->rc->output->set_env('time_format', $time_format);
+        }
+
+        return $out;
+    }
+
+    public static function build_regexp_tests($date_from, $date_to, &$error)
+    {
+        $tests    = array();
+        $dt_from  = rcube_utils::anytodatetime($date_from);
+        $dt_to    = rcube_utils::anytodatetime($date_to);
+        $interval = $dt_from->diff($dt_to);
+
+        if ($interval->invert || $interval->days > 365) {
+            $error = 'managesieve.invaliddateformat';
+            return;
+        }
+
+        $dt_i     = $dt_from;
+        $interval = new DateInterval('P1D');
+        $matchexp = '';
+
+        while (!$dt_i->diff($dt_to)->invert) {
+            $days     = (int) $dt_i->format('d');
+            $matchexp .= $days < 10 ? "[ 0]$days" : $days;
+
+            if ($days == $dt_i->format('t') || $dt_i->diff($dt_to)->days == 0) {
+                $test = array(
+                    'test' => 'header',
+                    'type' => 'regex',
+                    'arg1' => 'received',
+                    'arg2' => '('.$matchexp.') '.$dt_i->format('M Y')
+                );
+
+                $tests[]  = $test;
+                $matchexp = '';
+            }
+            else {
+                $matchexp .= '|';
+            }
+
+            $dt_i->add($interval);
+        }
+
+        return $tests;
+    }
+
+    public static function parse_regexp_tests($tests)
+    {
+        $rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/';
+        $rx_to   = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/';
+        $result  = array();
+
+        foreach ((array) $tests as $test) {
+            if ($test['test'] == 'header' && $test['type'] == 'regex' && $test['arg1'] == 'received') {
+                $textexp = preg_replace('/\[ ([^\]]*)\]/', '0', $test['arg2']);
+
+                if (!$result['from'] && preg_match($rx_from, $textexp, $matches)) {
+                    $result['from'] = $matches[1]." ".$matches[2]." ".$matches[3];
+                }
+
+                if (preg_match($rx_to, $textexp, $matches)) {
+                    $result['to'] = $matches[1]." ".$matches[2]." ".$matches[3];
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Get current vacation interval
+     */
+    public static function vacation_interval(&$vacation)
+    {
+        $rcube = rcube::get_instance();
+
+        if (isset($vacation['seconds'])) {
+            $interval = $vacation['seconds'];
+        }
+        else if (isset($vacation['days'])) {
+            $interval = $vacation['days'];
+        }
+        else if ($interval_cfg = $rcube->config->get('managesieve_vacation_interval')) {
+            if (preg_match('/^([0-9]+)s$/', $interval_cfg, $m)) {
+                if ($seconds_extension) {
+                    $vacation['seconds'] = ($interval = intval($m[1])) ? $interval : null;
+                }
+                else {
+                    $vacation['days'] = $interval = ceil(intval($m[1])/86400);
+                }
+            }
+            else {
+                $vacation['days'] = $interval = intval($interval_cfg);
+            }
+        }
+
+        return $interval ?: '';
+    }
+
+    /**
+     * Saves vacation script (adding some variables)
+     */
+    protected function save_vacation_script($rule)
+    {
+        // if script does not exist create a new one
+        if ($this->script_name === null || $this->script_name === false) {
+            $this->script_name = $this->rc->config->get('managesieve_script_name');
+            if (empty($this->script_name)) {
+                $this->script_name = 'roundcube';
+            }
+
+            // use default script contents
+            if (!$this->rc->config->get('managesieve_kolab_master')) {
+                $script_file = $this->rc->config->get('managesieve_default');
+                if ($script_file && is_readable($script_file)) {
+                    $content = file_get_contents($script_file);
+                }
+            }
+
+            // create and load script
+            if ($this->sieve->save_script($this->script_name, $content)) {
+                $this->sieve->load($this->script_name);
+            }
+        }
+
+        $script_active = in_array($this->script_name, $this->active);
+
+        // re-order rules if needed
+        if (isset($rule['after']) && $rule['after'] !== '') {
+            // reset original vacation rule
+            if (isset($this->vacation['idx'])) {
+                $this->script[$this->vacation['idx']] = null;
+            }
+
+            // add at target position
+            if ($rule['after'] >= count($this->script) - 1) {
+                $this->script[] = $rule;
+            }
+            else {
+                $script = array();
+
+                foreach ($this->script as $idx => $r) {
+                    if ($r) {
+                        $script[] = $r;
+                    }
+
+                    if ($idx == $rule['after']) {
+                        $script[] = $rule;
+                    }
+                }
+
+                $this->script = $script;
+            }
+
+            $this->script = array_values(array_filter($this->script));
+        }
+        // update original vacation rule if it exists
+        else if (isset($this->vacation['idx'])) {
+            $this->script[$this->vacation['idx']] = $rule;
+        }
+        // otherwise put vacation rule on top
+        else {
+            array_unshift($this->script, $rule);
+        }
+
+        // if the script was not active, we need to de-activate
+        // all rules except the vacation rule, but only if it is not disabled
+        if (!$script_active && !$rule['disabled']) {
+            foreach ($this->script as $idx => $r) {
+                if (empty($r['actions']) || $r['actions'][0]['type'] != 'vacation') {
+                    $this->script[$idx]['disabled'] = true;
+                }
+            }
+        }
+
+        if (!$this->sieve->script) {
+            return false;
+        }
+
+        $this->sieve->script->content = $this->script;
+
+        // save the script
+        $saved = $this->save_script($this->script_name);
+
+        // activate the script
+        if ($saved && !$script_active && !$rule['disabled']) {
+            $this->activate_script($this->script_name);
+        }
+
+        return $saved;
+    }
+
+    /**
+     * API: get vacation rule
+     *
+     * @return array Vacation rule information
+     */
+    public function get_vacation()
+    {
+        $this->exts = $this->sieve->get_extensions();
+        $this->init_script();
+        $this->vacation_rule();
+
+        // check supported extensions
+        $date_extension    = in_array('date', $this->exts);
+        $regex_extension   = in_array('regex', $this->exts);
+        $seconds_extension = in_array('vacation-seconds', $this->exts);
+
+        // set user's timezone
+        try {
+            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
+        }
+        catch (Exception $e) {
+            $timezone = new DateTimeZone('GMT');
+        }
+
+        if ($date_extension) {
+            $date_value = array();
+            foreach ((array) $this->vacation['tests'] as $test) {
+                if ($test['test'] == 'currentdate') {
+                    $idx = $test['type'] == 'value-ge' ? 'start' : 'end';
+
+                    if ($test['part'] == 'date') {
+                        $date_value[$idx]['date'] = $test['arg'];
+                    }
+                    else if ($test['part'] == 'iso8601') {
+                        $date_value[$idx]['datetime'] = $test['arg'];
+                    }
+                }
+            }
+
+            foreach ($date_value as $idx => $value) {
+                $$idx = new DateTime($value['datetime'] ?: $value['date'], $timezone);
+            }
+        }
+        else if ($regex_extension) {
+            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
+            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
+                $from = new DateTime($date_tests['from'] . ' ' . '00:00:00', $timezone);
+                $to   = new DateTime($date_tests['to'] . ' ' . '23:59:59', $timezone);
+            }
+        }
+
+        if (isset($this->vacation['seconds'])) {
+            $interval = $this->vacation['seconds'] . 's';
+        }
+        else if (isset($this->vacation['days'])) {
+            $interval = $this->vacation['days'] . 'd';
+        }
+
+        $vacation = array(
+            'supported' => $this->exts,
+            'interval'  => $interval,
+            'start'     => $start,
+            'end'       => $end,
+            'enabled'   => $this->vacation['reason'] && empty($this->vacation['disabled']),
+            'message'   => $this->vacation['reason'],
+            'subject'   => $this->vacation['subject'],
+            'action'    => $this->vacation['action'],
+            'target'    => $this->vacation['target'],
+            'addresses' => $this->vacation['addresses'],
+            'from'      => $this->vacation['from'],
+        );
+
+        return $vacation;
+    }
+
+    /**
+     * API: set vacation rule
+     *
+     * @param array $vacation Vacation rule information (see self::get_vacation())
+     *
+     * @return bool True on success, False on failure
+     */
+    public function set_vacation($data)
+    {
+        $this->exts  = $this->sieve->get_extensions();
+        $this->error = false;
+
+        $this->init_script();
+        $this->vacation_rule();
+
+        // check supported extensions
+        $date_extension    = in_array('date', $this->exts);
+        $regex_extension   = in_array('regex', $this->exts);
+        $seconds_extension = in_array('vacation-seconds', $this->exts);
+
+        $vacation['type']      = 'vacation';
+        $vacation['reason']    = $this->strip_value(str_replace("\r\n", "\n", $data['message']));
+        $vacation['addresses'] = $data['addresses'];
+        $vacation['subject']   = trim($data['subject']);
+        $vacation['from']      = trim($data['from']);
+        $vacation_tests        = (array) $this->vacation['tests'];
+
+        foreach ((array) $vacation['addresses'] as $aidx => $address) {
+            $vacation['addresses'][$aidx] = $address = trim($address);
+
+            if (empty($address)) {
+                unset($vacation['addresses'][$aidx]);
+            }
+            else if (!rcube_utils::check_email($address)) {
+                $this->error = "Invalid address in vacation addresses: $address";
+                return false;
+            }
+        }
+
+        if (!empty($vacation['from']) && !rcube_utils::check_email($vacation['from'])) {
+            $this->error = "Invalid address in 'from': " . $vacation['from'];
+            return false;
+        }
+
+        if ($vacation['reason'] == '') {
+            $this->error = "No vacation message specified";
+            return false;
+        }
+
+        if ($data['interval']) {
+            if (!preg_match('/^([0-9]+)\s*([sd])$/', $data['interval'], $m)) {
+                $this->error = "Invalid vacation interval value: " . $data['interval'];
+                return false;
+            }
+            else if ($m[1]) {
+                $vacation[strtolower($m[2]) == 's' ? 'seconds' : 'days'] = $m[1];
+            }
+        }
+
+        // find and remove existing date/regex/true rules
+        foreach ((array) $vacation_tests as $idx => $t) {
+            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
+                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
+            ) {
+                unset($vacation_tests[$idx]);
+            }
+        }
+
+        if ($date_extension) {
+            foreach (array('start', 'end') as $var) {
+                if ($dt = $data[$var]) {
+                    $vacation_tests[] = array(
+                        'test' => 'currentdate',
+                        'part' => 'iso8601',
+                        'type' => 'value-' . ($var == 'start' ? 'ge' : 'le'),
+                        'zone' => $dt->format('O'),
+                        'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
+                    );
+                }
+            }
+        }
+        else if ($regex_extension) {
+            // Add date range rules if range specified
+            if ($data['start'] && $data['end']) {
+                if ($tests = self::build_regexp_tests($data['start'], $data['end'], $error)) {
+                    $vacation_tests = array_merge($vacation_tests, $tests);
+                }
+
+                if ($error) {
+                    $this->error = "Invalid dates specified or unsupported period length";
+                    return false;
+                }
+            }
+        }
+
+        if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
+            if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
+                $this->error = "Invalid address in action taget: " . $data['target'];
+                return false;
+            }
+        }
+        else if ($data['action'] && $data['action'] != 'keep' && $data['action'] != 'discard') {
+            $this->error = "Unsupported vacation action: " . $data['action'];
+            return false;
+        }
+
+        if (empty($vacation_tests)) {
+            $vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
+        }
+
+        $rule             = $this->vacation;
+        $rule['type']     = 'if';
+        $rule['name']     = $rule['name'] ?: 'Out-of-Office';
+        $rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
+        $rule['tests']    = $vacation_tests;
+        $rule['join']     = $date_extension ? count($vacation_tests) > 1 : false;
+        $rule['actions']  = array($vacation);
+
+        if ($data['action'] && $data['action'] != 'keep') {
+            $rule['actions'][] = array(
+                'type'   => $data['action'] == 'discard' ? 'discard' : 'redirect',
+                'copy'   => $data['action'] == 'copy',
+                'target' => $data['action'] != 'discard' ? $data['target'] : '',
+            );
+        }
+
+        return $this->save_vacation_script($rule);
+    }
+
+    /**
+     * API: connect to managesieve server
+     */
+    public function connect($username, $password)
+    {
+        $error = parent::connect($username, $password);
+
+        if ($error) {
+            return $error;
+        }
+
+        return $this->load_script();
+    }
+
+    /**
+     * API: Returns last error
+     *
+     * @return string Error message
+     */
+    public function get_error()
+    {
+        return $this->error;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,186 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'تصÙية';
+$labels['managefilters'] = 'ادارة تصÙية البريد الوارد';
+$labels['filtername'] = 'اسم التصÙية';
+$labels['newfilter'] = 'تصÙية جديدة';
+$labels['filteradd'] = 'اضاÙØ© تصÙية';
+$labels['filterdel'] = 'حذ٠تصÙية';
+$labels['moveup'] = 'نقل الى الاعلى ';
+$labels['movedown'] = 'نقل الى الاسÙÙ„';
+$labels['filterallof'] = 'مطابقة جميع القواعد التالية';
+$labels['filteranyof'] = 'مطابقة اي القواعد التالية';
+$labels['filterany'] = 'كل الرسائل';
+$labels['filtercontains'] = 'محتوى';
+$labels['filternotcontains'] = 'بدون محتوى';
+$labels['filteris'] = 'مساوي الى';
+$labels['filterisnot'] = 'لا يساوي';
+$labels['filterexists'] = 'موجود';
+$labels['filternotexists'] = 'غير موجود';
+$labels['filtermatches'] = 'يطابق التعبير';
+$labels['filternotmatches'] = 'لا يطابق التعبير';
+$labels['filterregex'] = 'يطابق التعبير العادي';
+$labels['filternotregex'] = 'لا يطابق التعبير العادي';
+$labels['filterunder'] = 'تحت';
+$labels['filterover'] = 'خلال';
+$labels['addrule'] = 'اضاÙØ© قاعدة';
+$labels['delrule'] = 'حذ٠قاعدة';
+$labels['messagemoveto'] = 'نقل الرساله الى ';
+$labels['messageredirect'] = 'إعادة توجيه الرسالة الى ';
+$labels['messagecopyto'] = 'نسخ الرسالة الى ';
+$labels['messagesendcopy'] = 'ارسال نسخة من الرسالة الى ';
+$labels['messagereply'] = 'الرد مع رسالة';
+$labels['messagedelete'] = 'حذ٠الرسالة';
+$labels['messagediscard'] = 'تجاهل مع الرسالة';
+$labels['messagekeep'] = 'إبقاء الرسالة ÙÙŠ علبة الوارد';
+$labels['messagesrules'] = 'للبريد الوارد:';
+$labels['messagesactions'] = '...تنÙيذ المهام التالية:';
+$labels['add'] = 'إضاÙØ©';
+$labels['del'] = 'حذÙ';
+$labels['sender'] = 'المرسل';
+$labels['recipient'] = 'مستلم';
+$labels['vacationdays'] = 'ÙÙŠ الغالب كم رسالة ترسل (بالايام):';
+$labels['vacationinterval'] = 'كم عدد الرسائل المرسلة عادةً:';
+$labels['vacationreason'] = 'نص الرسالة (بسبب الاجازة):';
+$labels['vacationsubject'] = 'موضوع الرسالة:';
+$labels['days'] = 'ايام';
+$labels['seconds'] = 'ثواني';
+$labels['rulestop'] = 'ايقا٠تقييم القواعد';
+$labels['enable'] = 'تÙعيل/تعطيل';
+$labels['filterset'] = 'مجموعة مصÙياة';
+$labels['filtersets'] = 'مجموعة تصÙية';
+$labels['filtersetadd'] = 'اضاÙØ© مجموعة تصÙية';
+$labels['filtersetdel'] = 'حذ٠مجموعة التصÙية الحالية';
+$labels['filtersetact'] = 'تÙعيل مجموعة التصÙية الحالية ';
+$labels['filtersetdeact'] = 'تعطيل مجموعة التصÙية الحالية ';
+$labels['filterdef'] = 'تعري٠التصÙية ';
+$labels['filtersetname'] = 'اسم مجموعة التصÙية';
+$labels['newfilterset'] = 'مجموعة تصÙية جديدة';
+$labels['active'] = 'نشط';
+$labels['none'] = 'لاشيء';
+$labels['fromset'] = 'من مجموعة';
+$labels['fromfile'] = 'من ملÙ';
+$labels['filterdisabled'] = 'تعطيل التصÙية';
+$labels['countisgreaterthan'] = 'العدد اكبر من ';
+$labels['countisgreaterthanequal'] = 'العدد اكبر من او يساوي ';
+$labels['countislessthan'] = 'العدد اقل من ';
+$labels['countislessthanequal'] = 'العدد اقل من او يساوي';
+$labels['countequals'] = 'العدد يساوي ';
+$labels['countnotequals'] = 'العدد لا يساوي';
+$labels['valueisgreaterthan'] = 'القيمة اكبر من ';
+$labels['valueisgreaterthanequal'] = 'القيمة اكبر من او تساوي';
+$labels['valueislessthan'] = 'القيمة اقل من ';
+$labels['valueislessthanequal'] = 'القيمة اقل من او يساوي';
+$labels['valueequals'] = 'القيمة تساوي';
+$labels['valuenotequals'] = 'القيمة لا تساوي';
+$labels['setflags'] = 'ضع وسم على هذه الرسالة ';
+$labels['addflags'] = 'اض٠وسم على هذه الرسالة ';
+$labels['removeflags'] = 'احذ٠الوسم الموجود على هذه الرسالة ';
+$labels['flagread'] = 'قراءة ';
+$labels['flagdeleted'] = 'محذوÙ';
+$labels['flaganswered'] = 'مجابة';
+$labels['flagflagged'] = 'موسوم';
+$labels['flagdraft'] = 'مسودة';
+$labels['setvariable'] = 'تعيين متغير';
+$labels['setvarname'] = 'اسم المتغير:';
+$labels['setvarvalue'] = 'قيمة المتغير:';
+$labels['setvarmodifiers'] = 'تعديلات:';
+$labels['varquotewildcard'] = 'أقتبس أحر٠خاصة';
+$labels['varlength'] = 'الطول';
+$labels['notify'] = 'ارسل تنبية';
+$labels['notifyimportance'] = 'اهمية:';
+$labels['notifyimportancelow'] = 'منخÙض';
+$labels['notifyimportancenormal'] = 'عادي';
+$labels['notifyimportancehigh'] = 'مرتÙع';
+$labels['filtercreate'] = 'انشئ تصÙية';
+$labels['usedata'] = 'استخدم البيانات التالية ÙÙŠ الÙلتر:';
+$labels['nextstep'] = 'الخطوة التالية';
+$labels['...'] = '...';
+$labels['currdate'] = 'التاريخ الحالي';
+$labels['datetest'] = 'التاريخ';
+$labels['dateheader'] = 'الراس:';
+$labels['year'] = 'السنة';
+$labels['month'] = 'شهر';
+$labels['day'] = 'يوم';
+$labels['date'] = 'التاريخ (yyyy-mm-dd)';
+$labels['julian'] = 'التاريخ (يوليان)';
+$labels['hour'] = 'ساعات';
+$labels['minute'] = 'دقائق';
+$labels['second'] = 'ثواني';
+$labels['time'] = 'الوقت (hh:mm:ss)';
+$labels['iso8601'] = 'التاريخ (ISO8601)';
+$labels['std11'] = 'التاريخ (RFC2822)';
+$labels['zone'] = 'المنطقة الزمنية';
+$labels['weekday'] = 'ايام العمل (0-6)';
+$labels['advancedopts'] = 'خيارات متقدّمة';
+$labels['body'] = 'نص';
+$labels['address'] = 'العنوان';
+$labels['modifier'] = 'تعديل:';
+$labels['text'] = 'نص';
+$labels['contenttype'] = 'نوع المحتوى';
+$labels['modtype'] = 'نوع:';
+$labels['allparts'] = 'الكل';
+$labels['domain'] = 'المجال';
+$labels['localpart'] = 'الجزء المحلي';
+$labels['user'] = 'مستخدم';
+$labels['detail'] = 'تÙاصيل';
+$labels['default'] = 'اÙتراضي';
+$labels['index'] = 'الوارد:';
+$labels['indexlast'] = 'تراجع';
+$labels['vacation'] = 'اجازة ';
+$labels['vacation.advanced'] = 'اعدادات متقدمة';
+$labels['vacation.subject'] = 'موضوع';
+$labels['vacation.body'] = 'محتوى ';
+$labels['vacation.status'] = 'الحالة ';
+$labels['vacation.on'] = 'تشغيل';
+$labels['vacation.off'] = 'ايقاÙ';
+$labels['vacation.saving'] = 'يتم Ø­Ùظ البيانات...';
+$messages['filterunknownerror'] = 'خطا غير معرو٠من الخادم.';
+$messages['filterconnerror'] = 'لا يمكن الاتصال بالخادم.';
+$messages['filterdeleteerror'] = 'لا يمكن حذ٠التصÙية.خطا ÙÙŠ الخادم.';
+$messages['filterdeleted'] = 'تم حذ٠التصÙية بنجاح.';
+$messages['filtersaved'] = 'تم Ø­Ùظ التصÙية بنجاح.';
+$messages['filtersaveerror'] = 'لا يمكن Ø­Ùظ التصÙية.خطا ÙÙŠ الخادم.';
+$messages['filterdeleteconfirm'] = 'هل تريد Ùعلاً حذ٠التصÙية المحددة؟';
+$messages['ruledeleteconfirm'] = 'هل تريد Ùعلاً حذ٠القواعد المحددة؟';
+$messages['actiondeleteconfirm'] = 'هل تريد Ùعلاً حذ٠الاجراءات المحددة؟';
+$messages['forbiddenchars'] = 'احر٠محظورة ÙÙŠ هذا الحقل.';
+$messages['cannotbeempty'] = 'لا يمكن ترك الحقل Ùارغاً';
+$messages['ruleexist'] = 'اسم هذة التصÙية موجود مسبقاً';
+$messages['setactivateerror'] = 'لا يمكن تÙعيل مجموعة التصÙية المحددة.خطا ÙÙŠ الخادم.';
+$messages['setdeactivateerror'] = 'لا يمكن تعطيل مجموعة التصÙية المحددة.خطا ÙÙŠ الخادم.';
+$messages['setdeleteerror'] = 'لا يمكن حذ٠مجموعة التصÙية المحددة.خطا ÙÙŠ الخادم.';
+$messages['setactivated'] = 'تم تÙعيل مجموعة التصÙية بنجاح.';
+$messages['setdeactivated'] = 'تم تعطيل مجموعة التصÙية بنجاح.';
+$messages['setdeleted'] = 'تم حذ٠مجموعة التصÙية بنجاح.';
+$messages['setdeleteconfirm'] = 'هل تريد Ùعلاً حذ٠مجموعات التصÙية المحددة؟';
+$messages['setcreateerror'] = 'لا يمكن انشاء مجموعة تصÙية.خطا ÙÙŠ الخادم.';
+$messages['setcreated'] = 'تم انشاء مجموعة التصÙية بنجاح.';
+$messages['activateerror'] = 'لا يمكن تمكين التصÙية(ـات) المحددة .خطا ÙÙŠ الخادم.';
+$messages['deactivateerror'] = 'لا يمكن تعطيل التصÙية(ـات) المحددة .خطا ÙÙŠ الخادم.';
+$messages['deactivated'] = 'تم تعطيل المصÙيـ(ـاة) بنجاح.';
+$messages['activated'] = 'تم تÙعيل المصÙيـ(ـاة) بنجاح.';
+$messages['moved'] = 'تم نقل التصÙية بنجاح.';
+$messages['moveerror'] = 'لا يمكن نقل التصÙياة المحددة.خطا ÙÙŠ الخادم.';
+$messages['nametoolong'] = 'الإسم طويل جداً';
+$messages['setexist'] = 'المجموعة موجودة مسبقا.';
+$messages['nodata'] = 'يجب تحديد موضع واحد على الأقل!';
+$messages['invaliddateformat'] = 'تاريخ غير صحيح او يوجد خطا ÙÙŠ تنسق اجزاء التاريخ';
+$messages['saveerror'] = 'لا يمكن Ø­Ùظ البيانات. خطا ÙÙŠ الخادم.';
+$messages['vacationsaved'] = 'تم Ø­Ùظ تاريخ الاجازة بنجاح.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Alministrar filtros de corréu entrante';
+$labels['filtername'] = 'Nome del filtru';
+$labels['newfilter'] = 'Filtru nuevu';
+$labels['filteradd'] = 'Amestar filtru';
+$labels['filterdel'] = 'Desaniciar filtru';
+$labels['moveup'] = 'Mover arriba';
+$labels['movedown'] = 'Mover abaxo';
+$labels['filterany'] = 'tolos mensaxes';
+$labels['filtercontains'] = 'contien';
+$labels['filternotcontains'] = 'nun contien';
+$labels['filteris'] = 'ye igual a';
+$labels['filterisnot'] = 'nun ye igual a';
+$labels['filterexists'] = 'esiste';
+$labels['filternotexists'] = 'nun esiste';
+$labels['filtermatches'] = 'espresiones que concasen';
+$labels['filternotmatches'] = 'espresiones que nun concasen';
+$labels['addrule'] = 'Amestar regla';
+$labels['delrule'] = 'Desaniciar regla';
+$labels['messagemoveto'] = 'Mover mensaxe a';
+$labels['messageredirect'] = 'Redireicionar mensaxe a';
+$labels['messagecopyto'] = 'Copiar mensaxe a';
+$labels['messagedelete'] = 'Desaniciar mensaxe';
+$labels['messagesrules'] = 'Pa corréu entrante:';
+$labels['messagesactions'] = '...executar les aiciones siguientes:';
+$labels['add'] = 'Amestar';
+$labels['del'] = 'Desaniciar';
+$labels['sender'] = 'Remitente';
+$labels['enable'] = 'Habilitar/Deshabilitar';
+$labels['flagread'] = 'Lleer';
+$labels['flagdeleted'] = 'Desaniciáu';
+$labels['flaganswered'] = 'Respondíu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,187 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Süzgəclər';
+$labels['managefilters'] = 'Gələn məktub üçün süzgəclərin idarəsi';
+$labels['filtername'] = 'Süzgəcin adı';
+$labels['newfilter'] = 'Yeni süzgəc';
+$labels['filteradd'] = 'Süzgəc əlavə et';
+$labels['filterdel'] = 'Süzgəci sil';
+$labels['moveup'] = 'Yuxarı apar';
+$labels['movedown'] = 'Aşağı apar';
+$labels['filterallof'] = 'göstərilən bütün qaydalara uyur';
+$labels['filteranyof'] = 'verilmiş istənilən qaydaya uyur';
+$labels['filterany'] = 'bütün məktublar';
+$labels['filtercontains'] = 'daxildir';
+$labels['filternotcontains'] = 'daxil deyil';
+$labels['filteris'] = 'uyÄŸundur';
+$labels['filterisnot'] = 'uyÄŸun deyil';
+$labels['filterexists'] = 'mövcuddur';
+$labels['filternotexists'] = 'mövcud deyil';
+$labels['filtermatches'] = 'ifadə ilə üst-üstə düşür';
+$labels['filternotmatches'] = 'ifadə ilə üst-üstə düşmür';
+$labels['filterregex'] = 'daimi ifadənin nəticəsi ilə üst-üstə düşür';
+$labels['filternotregex'] = 'daimi ifadə ilə üst-üstə düşmür';
+$labels['filterunder'] = 'altında';
+$labels['filterover'] = 'yuxarıda';
+$labels['addrule'] = 'Qayda əlavə et';
+$labels['delrule'] = 'Qaydanı sil';
+$labels['messagemoveto'] = 'Məktubu köçür';
+$labels['messageredirect'] = 'Məktubu yolla';
+$labels['messagecopyto'] = 'Məktubu kopyala';
+$labels['messagesendcopy'] = 'Məktubun kopyasını göndər';
+$labels['messagereply'] = 'Məktubla cavab ver';
+$labels['messagedelete'] = 'Sil';
+$labels['messagediscard'] = 'Məktubla rədd et';
+$labels['messagekeep'] = 'Məktubu gələnlərdə saxla';
+$labels['messagesrules'] = 'Daxil olan məktub üçün:';
+$labels['messagesactions'] = '...növbəti hərəkəti yerinə yetir:';
+$labels['add'] = 'ÆlavÉ™ et';
+$labels['del'] = 'Sil';
+$labels['sender'] = 'Göndərən';
+$labels['recipient'] = 'Qəbul edən';
+$labels['vacationdays'] = 'Məktub neçə müddətdən bir göndərilsin (gündə):';
+$labels['vacationinterval'] = 'Məktublar nə qədər sıx göndərilsin:';
+$labels['vacationreason'] = 'Məktubun mətni (səbəb yoxdur):';
+$labels['vacationsubject'] = 'Məktubun mövzusu:';
+$labels['days'] = 'günlər';
+$labels['seconds'] = 'saniyələr';
+$labels['rulestop'] = 'Yerinə yetirməyi dayandır';
+$labels['enable'] = 'Yandır/Söndür';
+$labels['filterset'] = 'Süzgəc dəsti';
+$labels['filtersets'] = 'Süzgəc dəstləri';
+$labels['filtersetadd'] = 'Süzgəc dəsti əlavə et';
+$labels['filtersetdel'] = 'İndiki sücgəc dəstini sil';
+$labels['filtersetact'] = 'İndiki sücgəc dəstini yandır';
+$labels['filtersetdeact'] = 'İndiki süzgəc dəstini söndür';
+$labels['filterdef'] = 'Süzgəcin təsviri';
+$labels['filtersetname'] = 'Süzgəc dəstinin adı';
+$labels['newfilterset'] = 'Yeni süzgəc dəsti';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'heç biri';
+$labels['fromset'] = 'dəstdən';
+$labels['fromfile'] = 'fayldan';
+$labels['filterdisabled'] = 'Süzgəci söndür';
+$labels['countisgreaterthan'] = 'sayı buradan daha çoxdur';
+$labels['countisgreaterthanequal'] = 'say çox və ya bərabərdir';
+$labels['countislessthan'] = 'say buradan azdır';
+$labels['countislessthanequal'] = 'say azdır və ya bərabərdir';
+$labels['countequals'] = 'say bərabərdir';
+$labels['countnotequals'] = 'say bərabər deyil';
+$labels['valueisgreaterthan'] = 'dəyər buradan daha böyükdür';
+$labels['valueisgreaterthanequal'] = 'dəyər çoxdur və ya bərabərdir';
+$labels['valueislessthan'] = 'dəyər buradan azdır';
+$labels['valueislessthanequal'] = 'dəyər azdır və ya bərabərdir';
+$labels['valueequals'] = 'dəyər bərabərdir';
+$labels['valuenotequals'] = 'dəyər bərabər deyil';
+$labels['setflags'] = 'Məktublara flaq quraşdır';
+$labels['addflags'] = 'Məktuba flaq əlavə et';
+$labels['removeflags'] = 'Məktubdan flaqları sil';
+$labels['flagread'] = 'Oxu';
+$labels['flagdeleted'] = 'Silindi';
+$labels['flaganswered'] = 'Cavab verilmiÅŸ';
+$labels['flagflagged'] = 'İşarəlilər';
+$labels['flagdraft'] = 'Qaralama';
+$labels['setvariable'] = 'Dəyişəni təyin et';
+$labels['setvarname'] = 'Dəyişənin adı:';
+$labels['setvarvalue'] = 'Dəyişənin dəyəri:';
+$labels['setvarmodifiers'] = 'Modifikatorlar';
+$labels['varlower'] = 'aşağı registr';
+$labels['varupper'] = 'yuxarı registr';
+$labels['varlowerfirst'] = 'aşağı registrdə birinci simvol';
+$labels['varupperfirst'] = 'yuxarı registrdə birinci simvol';
+$labels['varquotewildcard'] = 'dırnaq simvolu';
+$labels['varlength'] = 'uzunluq';
+$labels['notify'] = 'Bildiriş göndər';
+$labels['notifyimportance'] = 'Vaciblik';
+$labels['notifyimportancelow'] = 'aşağı';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'yuxarı';
+$labels['filtercreate'] = 'Süzgəc yarat';
+$labels['usedata'] = 'Süzgəcdə bu məlumatları istifadə et:';
+$labels['nextstep'] = 'Sonrakı';
+$labels['...'] = '...';
+$labels['currdate'] = 'Ä°ndiki tarix';
+$labels['datetest'] = 'Tarix';
+$labels['dateheader'] = 'başlıq:';
+$labels['year'] = 'il';
+$labels['month'] = 'ay';
+$labels['day'] = 'gün';
+$labels['date'] = 'tarix (iiii-aa-gg)';
+$labels['julian'] = 'tarix (yulian)';
+$labels['hour'] = 'saat';
+$labels['minute'] = 'dəqiqə';
+$labels['second'] = 'saniyÉ™';
+$labels['time'] = 'saat (sa:dd:sn)';
+$labels['iso8601'] = 'tarix (ISO8601)';
+$labels['std11'] = 'tarix (RFC2822)';
+$labels['zone'] = 'saat-zona';
+$labels['weekday'] = 'həftənin günü (0-6)';
+$labels['advancedopts'] = 'ÆlavÉ™ ayarlar';
+$labels['body'] = 'Məzmun';
+$labels['address'] = 'ünvan';
+$labels['envelope'] = 'zərf';
+$labels['modifier'] = 'modifikator:';
+$labels['text'] = 'mətn';
+$labels['undecoded'] = 'emal olunmamış (xammal)';
+$labels['contenttype'] = 'məzmun növü';
+$labels['modtype'] = 'növ:';
+$labels['allparts'] = 'hamısı';
+$labels['domain'] = 'domen';
+$labels['localpart'] = 'lokal hissÉ™';
+$labels['user'] = 'istifadəçi';
+$labels['detail'] = 'təfsilat';
+$labels['comparator'] = 'komparator:';
+$labels['default'] = 'ön qurğulu';
+$labels['octet'] = 'ciddi (oktet)';
+$labels['asciicasemap'] = 'qeydiyyat üzrə müstəqil (ascii-casemap)';
+$labels['asciinumeric'] = 'ədədi (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'arxaya';
+$messages['filterunknownerror'] = 'Serverin naməlum xətası.';
+$messages['filterconnerror'] = 'Serverə qoşulmaq alınmır';
+$messages['filterdeleteerror'] = 'Süzgəci silmək mümkün deyil. Server xətası.';
+$messages['filterdeleted'] = 'Süzgəc uğurla silindi.';
+$messages['filtersaved'] = 'Süzgəc uğurla saxlanıldı.';
+$messages['filtersaveerror'] = 'Süzgəci saxlamaq mümkün deyil. Server xətası.';
+$messages['filterdeleteconfirm'] = 'Siz həqiqətən süzgəci silmək istəyirsiniz?';
+$messages['ruledeleteconfirm'] = 'Bu qaydanı silməkdə əminsiniz?';
+$messages['actiondeleteconfirm'] = 'Bu hərəkəti silməkdə əminsiniz?';
+$messages['forbiddenchars'] = 'Sahədə qadağan edilən işarələr.';
+$messages['cannotbeempty'] = 'Sahə boş ola bilməz.';
+$messages['ruleexist'] = 'Bu adla süzgəc artıq mövcuddur.';
+$messages['setactivateerror'] = 'Seçilmiş süzgəcləri aktiv etmək mümkün deyil. Server xətası.';
+$messages['setdeactivateerror'] = 'Seçilmiş süzgəcləri deaktiv mümkün deyil. Server xətası.';
+$messages['setdeleteerror'] = 'Seçilmiş süzgəcləri silmək mümkün deyil. Server xətası.';
+$messages['setactivated'] = 'Süzgəc dəsti yandırıldı.';
+$messages['setdeactivated'] = 'Süzgəc dəsti söndürüldü.';
+$messages['setdeleted'] = 'Süzgəc dəsti silindi.';
+$messages['setdeleteconfirm'] = 'Bu süzgəc dəstini silməkdə əminsiniz?';
+$messages['setcreateerror'] = 'Süzgəcləri yaratmaq mümkün deyil. Server xətası.';
+$messages['setcreated'] = 'Süzgəc dəsti uğurla yaradıldı.';
+$messages['activateerror'] = 'Seçilmiş süzgəc(lər)i yandırmaq mümkün deyil. Server xətası.';
+$messages['deactivateerror'] = 'Seçilmiş süzgəc(lər)i söndürmək mümkün deyil. Server xətası.';
+$messages['deactivated'] = 'Süzgəc(lər) uğurla yandırıldı.';
+$messages['activated'] = 'Süzgəc(lər) uğurla söndürüldü.';
+$messages['moved'] = 'Süzgəc uğurla köçürüldü.';
+$messages['moveerror'] = 'Süzgəci köçürmək mümkün deyil. Server xətası.';
+$messages['nametoolong'] = 'Süzgəc dəstini yaratmaq mümkün deyil. Ad çox uzundur.';
+$messages['namereserved'] = 'Rezerv edilmiÅŸ ad.';
+$messages['setexist'] = 'Dəst artıq mövcuddur.';
+$messages['nodata'] = 'Heç olmasa bir mövqe tutmaq lazımdır!';
+$messages['invaliddateformat'] = 'Tarix və ya tarix formatının bir hissəsi səhvdir';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,187 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Фільтры';
+$labels['managefilters'] = 'Парадкаваць фільтры атрыманай пошты';
+$labels['filtername'] = 'Ðазва фільтра';
+$labels['newfilter'] = 'Ðовы фільтр';
+$labels['filteradd'] = 'Дадаць фільтр';
+$labels['filterdel'] = 'Выдаліць фільтр';
+$labels['moveup'] = 'ПаÑунуць уверх';
+$labels['movedown'] = 'ПаÑунуць уніз';
+$labels['filterallof'] = 'выконваюцца ÑžÑе наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð²Ñ–Ð»Ñ‹';
+$labels['filteranyof'] = 'выконваецца любое з наÑтупных правіл';
+$labels['filterany'] = 'уÑе паведамленні';
+$labels['filtercontains'] = 'змÑшчае';
+$labels['filternotcontains'] = 'не змÑшчае';
+$labels['filteris'] = 'роўна';
+$labels['filterisnot'] = 'не роўна';
+$labels['filterexists'] = 'Ñ–Ñнуе';
+$labels['filternotexists'] = 'не Ñ–Ñнуе';
+$labels['filtermatches'] = 'задавальнÑе выразу';
+$labels['filternotmatches'] = 'не задавальнÑе выразу';
+$labels['filterregex'] = 'задавальнÑе Ñ€ÑгулÑрнаму выразу';
+$labels['filternotregex'] = 'не задавальнÑе Ñ€ÑгулÑрнаму выразу';
+$labels['filterunder'] = 'менш';
+$labels['filterover'] = 'больш';
+$labels['addrule'] = 'Дадаць правіла';
+$labels['delrule'] = 'Выдаліць правіла';
+$labels['messagemoveto'] = 'ПерамÑÑціць паведамленне Ñž';
+$labels['messageredirect'] = 'Перанакіраваць паведамленне на';
+$labels['messagecopyto'] = 'СкапіÑваць паведамленне Ñž';
+$labels['messagesendcopy'] = 'ДаÑлаць копію на';
+$labels['messagereply'] = 'Ðдказаць наÑтупнае';
+$labels['messagedelete'] = 'Выдаліць паведамленне';
+$labels['messagediscard'] = 'СкаÑаваць з паведамленнем';
+$labels['messagekeep'] = 'Пакінуць паведамленне Ñž Ðтрыманых';
+$labels['messagesrules'] = 'Ð”Ð»Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½Ð°Ð¹ пошты:';
+$labels['messagesactions'] = '...выконваць наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð´Ð·ÐµÑнні:';
+$labels['add'] = 'Дадаць';
+$labels['del'] = 'Выдаліць';
+$labels['sender'] = 'Ðд каго';
+$labels['recipient'] = 'Каму';
+$labels['vacationdays'] = 'Як чаÑта даÑылаць паведамленні (у днÑÑ…):';
+$labels['vacationinterval'] = 'Як чаÑта даÑылаць паведамленні:';
+$labels['vacationreason'] = 'Цела Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ (прычына вакацый):';
+$labels['vacationsubject'] = 'ТÑма паведамленнÑ:';
+$labels['days'] = 'дзён';
+$labels['seconds'] = 'Ñекунд';
+$labels['rulestop'] = 'ПераÑтаць выконваць праверку правілаў';
+$labels['enable'] = 'Уключыць/Выключыць';
+$labels['filterset'] = 'Ðабор фільтраў';
+$labels['filtersets'] = 'Ðаборы фільтраў';
+$labels['filtersetadd'] = 'Дадаць набор фільтраў';
+$labels['filtersetdel'] = 'Выдаліць бÑгучы набор фільтраў';
+$labels['filtersetact'] = 'Ðктываваць бÑгучы набор фільтраў';
+$labels['filtersetdeact'] = 'ДÑактываваць бÑгучы набор фільтраў';
+$labels['filterdef'] = 'ВызначÑнне фільтра';
+$labels['filtersetname'] = 'Ðазва набору фільтраў';
+$labels['newfilterset'] = 'Ðовы набор фільтраў';
+$labels['active'] = 'актыўны';
+$labels['none'] = 'нÑма';
+$labels['fromset'] = 'з набору';
+$labels['fromfile'] = 'з файла';
+$labels['filterdisabled'] = 'Фільтр адключаны';
+$labels['countisgreaterthan'] = 'лік большы за';
+$labels['countisgreaterthanequal'] = 'лік большы за альбо роўны';
+$labels['countislessthan'] = 'лік меншы за';
+$labels['countislessthanequal'] = 'лік меншы за альбо роўны';
+$labels['countequals'] = 'лік роўны';
+$labels['countnotequals'] = 'лік не роўны';
+$labels['valueisgreaterthan'] = 'значÑнне большае за';
+$labels['valueisgreaterthanequal'] = 'значÑнне большае за альбо роўнае';
+$labels['valueislessthan'] = 'значÑнне меншае за';
+$labels['valueislessthanequal'] = 'значÑнне меншае за альбо роўнае';
+$labels['valueequals'] = 'значÑнне роўнае';
+$labels['valuenotequals'] = 'значÑнне не роўнае';
+$labels['setflags'] = 'УÑтанавіць флагі на паведамленне';
+$labels['addflags'] = 'Дадаць флагі да паведамленнÑ';
+$labels['removeflags'] = 'Выдаліць флагі з паведамленнÑ';
+$labels['flagread'] = 'Прачытана';
+$labels['flagdeleted'] = 'Выдалена';
+$labels['flaganswered'] = 'З адказам';
+$labels['flagflagged'] = 'Пазначана';
+$labels['flagdraft'] = 'Чарнавік';
+$labels['setvariable'] = 'УÑтанавіць зменную';
+$labels['setvarname'] = 'Ð†Ð¼Ñ Ð·Ð¼ÐµÐ½Ð½Ð°Ð¹:';
+$labels['setvarvalue'] = 'ЗначÑнне зменнай:';
+$labels['setvarmodifiers'] = 'Мадыфікатары:';
+$labels['varlower'] = 'ніжні Ñ€ÑгіÑÑ‚Ñ€';
+$labels['varupper'] = 'верхні Ñ€ÑгіÑÑ‚Ñ€';
+$labels['varlowerfirst'] = 'першы знак у ніжнім Ñ€ÑгіÑтры';
+$labels['varupperfirst'] = 'першы знак у верхнім Ñ€ÑгіÑтры';
+$labels['varquotewildcard'] = 'ÑÐ»ÑƒÐ¶Ð±Ð¾Ð²Ñ‹Ñ Ð·Ð½Ð°ÐºÑ– забіраць у апоÑтрафы';
+$labels['varlength'] = 'даўжынÑ';
+$labels['notify'] = 'ПаÑлаць апавÑшчÑнне';
+$labels['notifyimportance'] = 'ВажнаÑць:';
+$labels['notifyimportancelow'] = 'нізкаÑ';
+$labels['notifyimportancenormal'] = 'звычайнаÑ';
+$labels['notifyimportancehigh'] = 'выÑокаÑ';
+$labels['filtercreate'] = 'Стварыць фільтр';
+$labels['usedata'] = 'Ужываць наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð´Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ Ñž фільтры:';
+$labels['nextstep'] = 'ÐаÑтупны крок';
+$labels['...'] = '...';
+$labels['currdate'] = 'БÑÐ³ÑƒÑ‡Ð°Ñ Ð´Ð°Ñ‚Ð°';
+$labels['datetest'] = 'Дата';
+$labels['dateheader'] = 'загаловак:';
+$labels['year'] = 'год';
+$labels['month'] = 'меÑÑц';
+$labels['day'] = 'дзень';
+$labels['date'] = 'дата (гггг-мм-дд)';
+$labels['julian'] = 'дата (юліÑнÑкаÑ)';
+$labels['hour'] = 'гадзіна';
+$labels['minute'] = 'мінута';
+$labels['second'] = 'Ñекунда';
+$labels['time'] = 'Ñ‡Ð°Ñ (гг:мм:ÑÑ)';
+$labels['iso8601'] = 'дата (ISO8601)';
+$labels['std11'] = 'дата (RFC2822)';
+$labels['zone'] = 'чаÑÐ°Ð²Ð°Ñ Ð·Ð¾Ð½Ð°';
+$labels['weekday'] = 'дзень Ñ‚Ñ‹Ð´Ð½Ñ (0-6)';
+$labels['advancedopts'] = 'Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹';
+$labels['body'] = 'Цела';
+$labels['address'] = 'адраÑ';
+$labels['envelope'] = 'канверт';
+$labels['modifier'] = 'мадыфікатар:';
+$labels['text'] = 'Ñ‚ÑкÑÑ‚';
+$labels['undecoded'] = 'неапрацаваны (Ñыры)';
+$labels['contenttype'] = 'тып змеÑціва';
+$labels['modtype'] = 'пошук у адраÑах:';
+$labels['allparts'] = 'уÑюль';
+$labels['domain'] = 'у імені дамена';
+$labels['localpart'] = 'толькі Ñž імені карыÑтальніка, без дамена';
+$labels['user'] = 'у поўным імені карыÑтальніка';
+$labels['detail'] = 'у дадатковых звеÑтках';
+$labels['comparator'] = 'ÑпоÑаб параўнаннÑ:';
+$labels['default'] = 'Ñтандартны';
+$labels['octet'] = 'Ñтрогі (octet)';
+$labels['asciicasemap'] = 'без уліку Ñ€ÑгіÑтру (ascii-casemap)';
+$labels['asciinumeric'] = 'лікавы (ascii-numeric)';
+$labels['index'] = 'індÑкÑ:';
+$labels['indexlast'] = 'назад';
+$messages['filterunknownerror'] = 'ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñервера.';
+$messages['filterconnerror'] = 'Ðе ўдалоÑÑ Ð·Ð»ÑƒÑ‡Ñ‹Ñ†Ñ†Ð° з Ñерверам.';
+$messages['filterdeleteerror'] = 'Ðе ўдалоÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ фільтр. Памылка на Ñерверы.';
+$messages['filterdeleted'] = 'Фільтр выдалены.';
+$messages['filtersaved'] = 'Фільтр захаваны.';
+$messages['filtersaveerror'] = 'Ðе ўдалоÑÑ Ð·Ð°Ñ…Ð°Ð²Ð°Ñ†ÑŒ фільтр. Памылка на Ñерверы.';
+$messages['filterdeleteconfirm'] = 'Ðапраўду выдаліць абраны фільтр?';
+$messages['ruledeleteconfirm'] = 'Ðапраўду выдаліць абранае правіла?';
+$messages['actiondeleteconfirm'] = 'Ðапраўду выдаліць абранае дзеÑнне?';
+$messages['forbiddenchars'] = 'Ð—Ð°Ð±Ð°Ñ€Ð¾Ð½ÐµÐ½Ñ‹Ñ Ð·Ð½Ð°ÐºÑ– Ñž полі.';
+$messages['cannotbeempty'] = 'Поле не можа быць пуÑтым.';
+$messages['ruleexist'] = 'Фільтр з гÑтай назвай ужо Ñ–Ñнуе.';
+$messages['setactivateerror'] = 'Ðе ўдалоÑÑ ÑžÐºÐ»ÑŽÑ‡Ñ‹Ñ†ÑŒ абраны набор фільтраў. Памылка на Ñерверы.';
+$messages['setdeactivateerror'] = 'Ðе ўдалоÑÑ Ð°Ð´ÐºÐ»ÑŽÑ‡Ñ‹Ñ†ÑŒ абраны набор фільтраў. Памылка на Ñерверы.';
+$messages['setdeleteerror'] = 'Ðе ўдалоÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ абраны набор фільтраў. Памылка на Ñерверы.';
+$messages['setactivated'] = 'Ðабор фільтраў актываваны.';
+$messages['setdeactivated'] = 'Ðабор фільтраў дÑактываваны.';
+$messages['setdeleted'] = 'Ðабор фільтраў выдалены.';
+$messages['setdeleteconfirm'] = 'Ðапраўду выдаліць абраны набор фільтраў?';
+$messages['setcreateerror'] = 'Ðе ўдалоÑÑ Ñтварыць набор фільтраў. Памылка на Ñерверы.';
+$messages['setcreated'] = 'Ðабор фільтраў Ñтвораны.';
+$messages['activateerror'] = 'Ðе ўдалоÑÑ ÑžÐºÐ»ÑŽÑ‡Ñ‹Ñ†ÑŒ абраны(Ñ) фільтры. Памылка на Ñерверы.';
+$messages['deactivateerror'] = 'Ðе ўдалоÑÑ Ð°Ð´ÐºÐ»ÑŽÑ‡Ñ‹Ñ†ÑŒ абраны(Ñ) фільтры. Памылка на Ñерверы.';
+$messages['deactivated'] = 'Фільтр(ы) адключаны.';
+$messages['activated'] = 'Фільтр(ы) уключаны.';
+$messages['moved'] = 'Фільтр перамешчаны.';
+$messages['moveerror'] = 'Ðе ўдалоÑÑ Ð¿ÐµÑ€Ð°Ð¼ÑÑціць абраны фільтр. Памылка на Ñерверы.';
+$messages['nametoolong'] = 'Ð—Ð°Ð´Ð°ÑžÐ³Ð°Ñ Ð½Ð°Ð·Ð²Ð°.';
+$messages['namereserved'] = 'ЗарÑÐ·ÐµÑ€Ð²Ð°Ð²Ð°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð°.';
+$messages['setexist'] = 'Ðабор ужо Ñ–Ñнуе.';
+$messages['nodata'] = 'Мінімум адна Ð¿Ð°Ð·Ñ–Ñ†Ñ‹Ñ Ð¿Ð°Ð²Ñ–Ð½Ð½Ð° быць вылучана!';
+$messages['invaliddateformat'] = 'ÐÑÑÐ»ÑƒÑˆÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° альбо фармат даты';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Филтри';
+$labels['managefilters'] = 'Управление на филтри за входÑща поща';
+$labels['filtername'] = 'Име на филтър';
+$labels['newfilter'] = 'Ðов филтър';
+$labels['filteradd'] = 'ДобавÑне на филтър';
+$labels['filterdel'] = 'Изтриване на филтър';
+$labels['moveup'] = 'ПремеÑтване нагоре';
+$labels['movedown'] = 'ПремеÑтване надолу';
+$labels['filterallof'] = 'коÑто изпълнÑва вÑички уÑловиÑ';
+$labels['filteranyof'] = 'коÑто изпълнÑва нÑкое от уÑловиÑта';
+$labels['filterany'] = 'за вÑички пиÑма';
+$labels['filtercontains'] = 'Ñъдържа';
+$labels['filternotcontains'] = 'не Ñъдържа';
+$labels['filteris'] = 'е равно на';
+$labels['filterisnot'] = 'не е равно на';
+$labels['filterexists'] = 'ÑъщеÑтвува';
+$labels['filternotexists'] = 'не ÑъщеÑтвува';
+$labels['filtermatches'] = 'Ñъвпада Ñ Ð¸Ð·Ñ€Ð°Ð·';
+$labels['filternotmatches'] = 'не Ñъвпада Ñ Ð¸Ð·Ñ€Ð°Ð·';
+$labels['filterregex'] = 'Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° регулÑрен израз';
+$labels['filternotregex'] = 'не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° регулÑрен израз';
+$labels['filterunder'] = 'под';
+$labels['filterover'] = 'над';
+$labels['addrule'] = 'Ðово уÑловие';
+$labels['delrule'] = 'Изтриване на уÑловие';
+$labels['messagemoveto'] = 'ПремеÑти пиÑмото във';
+$labels['messageredirect'] = 'ПренаÑочи пиÑмото до';
+$labels['messagecopyto'] = 'Копирай пиÑмото във';
+$labels['messagesendcopy'] = 'Изпрати копие на пиÑмото до';
+$labels['messagereply'] = 'Отговори Ñ Ð¿Ð¸Ñмо';
+$labels['messagedelete'] = 'Изтрий пиÑмото';
+$labels['messagediscard'] = 'Отхвърли Ñ Ð¿Ð¸Ñмо';
+$labels['messagekeep'] = 'ОÑтави пиÑмото във Ð’Ñ…. поща';
+$labels['messagesrules'] = 'При получаване на поща...';
+$labels['messagesactions'] = '...изпълни Ñледните дейÑтвиÑ:';
+$labels['add'] = 'Добави';
+$labels['del'] = 'Изтрий';
+$labels['sender'] = 'Подател';
+$labels['recipient'] = 'Получател';
+$labels['vacationaddr'] = 'Мои адреÑи на ел. поща:';
+$labels['vacationdays'] = 'Колко чеÑто да праща пиÑма (в дни):';
+$labels['vacationinterval'] = 'Колко чеÑто да праща пиÑма:';
+$labels['vacationreason'] = 'ТекÑÑ‚ на пиÑмото (причина за отпуÑк)';
+$labels['vacationfrom'] = 'ÐÐ´Ñ€ÐµÑ Ð·Ð° отговор на подателÑ:';
+$labels['vacationsubject'] = 'Заглавие на пиÑмото';
+$labels['days'] = 'дни';
+$labels['seconds'] = 'Ñекунди';
+$labels['rulestop'] = 'Спри проверка на други уÑловиÑ';
+$labels['enable'] = 'Включи/Изключи';
+$labels['filterset'] = 'Ðабор филтри';
+$labels['filtersets'] = 'Ðабори филтри';
+$labels['filtersetadd'] = 'Ðов набор филтри';
+$labels['filtersetdel'] = 'Изтриване на текущ набор филтри';
+$labels['filtersetact'] = 'Ðктивиране на текущ набор филтри';
+$labels['filtersetdeact'] = 'Деактивиране на текущ набор филтри';
+$labels['filterseteditraw'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ филтри';
+$labels['filterdef'] = 'Дефиниране на филтър';
+$labels['filtersetname'] = 'Име на набор филтри';
+$labels['newfilterset'] = 'Ðов набор филтри';
+$labels['active'] = 'активен';
+$labels['none'] = 'нÑма';
+$labels['fromset'] = 'от набор';
+$labels['fromfile'] = 'от файл';
+$labels['filterdisabled'] = 'Изключен филтър';
+$labels['countisgreaterthan'] = 'брой е по-голÑм от';
+$labels['countisgreaterthanequal'] = 'брой е по-голÑм или равен на';
+$labels['countislessthan'] = 'брой е по-малък от';
+$labels['countislessthanequal'] = 'брой е по-малък или равен на';
+$labels['countequals'] = 'брой е равен на';
+$labels['countnotequals'] = 'брой не е равен на';
+$labels['valueisgreaterthan'] = 'ÑтойноÑÑ‚ е по-голÑма от';
+$labels['valueisgreaterthanequal'] = 'ÑтойноÑÑ‚ е по-голÑма или равна на';
+$labels['valueislessthan'] = 'ÑтойноÑÑ‚ е по-малка от';
+$labels['valueislessthanequal'] = 'ÑтойноÑÑ‚ е по-малка или равна на';
+$labels['valueequals'] = 'ÑтойноÑÑ‚ е равна на';
+$labels['valuenotequals'] = 'ÑтойноÑÑ‚ не е равна на';
+$labels['setflags'] = 'УÑтанови флагове на пиÑмо';
+$labels['addflags'] = 'Добави флагове към пиÑмо';
+$labels['removeflags'] = 'Премахни флагове от пиÑмо';
+$labels['flagread'] = 'Прочетено';
+$labels['flagdeleted'] = 'Изтрито';
+$labels['flaganswered'] = 'Отговорено';
+$labels['flagflagged'] = 'ОтбелÑзано';
+$labels['flagdraft'] = 'Чернова';
+$labels['setvariable'] = 'УÑтанови променлива';
+$labels['setvarname'] = 'Име на променлива:';
+$labels['setvarvalue'] = 'СтойноÑÑ‚ на променлива:';
+$labels['setvarmodifiers'] = 'Модификатори:';
+$labels['varlower'] = 'малки букви';
+$labels['varupper'] = 'главни букви';
+$labels['varlowerfirst'] = 'първи знак Ñ Ð¼Ð°Ð»ÐºÐ° буква';
+$labels['varupperfirst'] = 'първи знак Ñ Ð³Ð»Ð°Ð²Ð½Ð° буква';
+$labels['varquotewildcard'] = 'цитиране на Ñпециални знаци';
+$labels['varlength'] = 'дължина';
+$labels['notify'] = 'Изпрати извеÑтие';
+$labels['notifytarget'] = 'ИзвеÑтие към:';
+$labels['notifymessage'] = 'Съдържание на извеÑтие (опционално):';
+$labels['notifyoptions'] = 'Опции на извеÑтие (опционално):';
+$labels['notifyfrom'] = 'ИзвеÑтие от (опционално):';
+$labels['notifyimportance'] = 'Приоритет:';
+$labels['notifyimportancelow'] = 'ниÑък';
+$labels['notifyimportancenormal'] = 'нормален';
+$labels['notifyimportancehigh'] = 'виÑок';
+$labels['notifymethodmailto'] = 'Ел. поща';
+$labels['notifymethodtel'] = 'Телефон';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Използвай за нов филтър';
+$labels['usedata'] = 'Използвай Ñледните данни във филтъра:';
+$labels['nextstep'] = 'Следваща Ñтъпка';
+$labels['...'] = '...';
+$labels['string'] = 'Ðиз';
+$labels['currdate'] = 'Текуща дата';
+$labels['datetest'] = 'Дата';
+$labels['dateheader'] = 'заглавен блок:';
+$labels['year'] = 'година';
+$labels['month'] = 'меÑец';
+$labels['day'] = 'ден';
+$labels['date'] = 'дата (гггг-мм-дд)';
+$labels['julian'] = 'дата (юлианÑка)';
+$labels['hour'] = 'чаÑ';
+$labels['minute'] = 'минута';
+$labels['second'] = 'Ñекунда';
+$labels['time'] = 'време (чч:мм:ÑÑ)';
+$labels['iso8601'] = 'дата (ISO8601)';
+$labels['std11'] = 'дата (RFC2822)';
+$labels['zone'] = 'чаÑова зона';
+$labels['weekday'] = 'ден от Ñедмицата (0-6)';
+$labels['advancedopts'] = 'Разширени наÑтройки';
+$labels['body'] = 'ОÑновен текÑÑ‚';
+$labels['address'] = 'адреÑ';
+$labels['envelope'] = 'плик';
+$labels['modifier'] = 'модификатор:';
+$labels['text'] = 'текÑÑ‚';
+$labels['undecoded'] = 'недекодиран (Ñуров)';
+$labels['contenttype'] = 'тип на Ñъдържанието';
+$labels['modtype'] = 'тип:';
+$labels['allparts'] = 'вÑичко';
+$labels['domain'] = 'домейн';
+$labels['localpart'] = 'локална чаÑÑ‚';
+$labels['user'] = 'потребител';
+$labels['detail'] = 'датайли';
+$labels['comparator'] = 'Ñравнител:';
+$labels['default'] = 'по подразбиране';
+$labels['octet'] = 'Ñтриктно (октет)';
+$labels['asciicasemap'] = 'без значение малки/големи букви';
+$labels['asciinumeric'] = 'цифрово';
+$labels['index'] = 'индекÑ:';
+$labels['indexlast'] = 'наобратно';
+$labels['vacation'] = 'ОтпуÑк';
+$labels['vacation.reply'] = 'ПиÑмо отговор';
+$labels['vacation.advanced'] = 'Разширени наÑтройки';
+$labels['vacation.from'] = 'ÐÐ´Ñ€ÐµÑ Ð·Ð° отговор на подателÑ:';
+$labels['vacation.subject'] = 'ОтноÑно';
+$labels['vacation.body'] = 'Съдържание';
+$labels['vacation.start'] = 'Ðачало на отпуÑк';
+$labels['vacation.end'] = 'Край на отпуÑк';
+$labels['vacation.status'] = 'СтатуÑ';
+$labels['vacation.on'] = 'Вкл.';
+$labels['vacation.off'] = 'Изкл.';
+$labels['vacation.addresses'] = 'Мои адреÑи на ел. поща';
+$labels['vacation.interval'] = 'Интервал на отговор';
+$labels['vacation.after'] = 'ПоÑтави правило за отпуÑк Ñлед';
+$labels['vacation.saving'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° данни...';
+$labels['vacation.action'] = 'ДейÑтвие при получаване на пиÑмо';
+$labels['vacation.keep'] = 'Задръж';
+$labels['vacation.discard'] = 'Изхвърли';
+$labels['vacation.redirect'] = 'Препрати на';
+$labels['vacation.copy'] = 'Прати копие на';
+$labels['filladdresses'] = 'Попълни Ñ Ð²Ñички мои адреÑи';
+$labels['arialabelfiltersetactions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð° набор от филтри';
+$labels['arialabelfilteractions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð° филтър';
+$labels['arialabelfilterform'] = 'СвойÑтва на филтър';
+$labels['ariasummaryfilterslist'] = 'СпиÑък филтри';
+$labels['ariasummaryfiltersetslist'] = 'СпиÑък набори от филтри';
+$labels['filterstitle'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° филтри вх. поща';
+$labels['vacationtitle'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° правило за извън офиÑа';
+$labels['message'] = 'ПиÑмо';
+$labels['duplicate'] = 'е дубликат';
+$labels['notduplicate'] = 'не е дубликат';
+$labels['duplicate.handle'] = 'манипулатор:';
+$labels['duplicate.header'] = 'заглавен блок:';
+$labels['duplicate.uniqueid'] = 'идентификатор:';
+$labels['duplicate.seconds'] = 'време за отказ (Ñекунди)';
+$labels['duplicate.last'] = 'ÑпрÑмо поÑледното изпълнение';
+$messages['filterunknownerror'] = 'ÐеизвеÑтна Ñървърна грешка.';
+$messages['filterconnerror'] = 'ÐеуÑпешно Ñвързване Ñ managesieve Ñървъра.';
+$messages['filterdeleteerror'] = 'Ðевъзможно изтриване на филтъра. Възникна Ñървърна грешка.';
+$messages['filterdeleted'] = 'Филтърът е изтрит уÑпешно.';
+$messages['filtersaved'] = 'Филтърът е запиÑан уÑпешно.';
+$messages['filtersaveerror'] = 'Ðевъзможно запиÑване на филтъра. Възникна Ñървърна грешка.';
+$messages['filterformerror'] = 'Филтър формата Ñъдържа грешки.';
+$messages['filterdeleteconfirm'] = 'ÐаиÑтина ли желаете да изтриете Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñ„Ð¸Ð»Ñ‚ÑŠÑ€?';
+$messages['ruledeleteconfirm'] = 'Сигурни ли Ñте, че желаете да изтриете избраното уÑловие?';
+$messages['actiondeleteconfirm'] = 'Сигурни ли Ñте, че желаете да изтриете избраното дейÑтвие?';
+$messages['forbiddenchars'] = 'Забранени Ñимволи в полето.';
+$messages['cannotbeempty'] = 'Полето не може да бъде празно.';
+$messages['ruleexist'] = 'Вече има филтър Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾Ñ‚Ð¾ име.';
+$messages['setactivateerror'] = 'Ðевъзможно активиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ от филтри. Възникна Ñървърна грешка.';
+$messages['setdeactivateerror'] = 'Ðевъзможно деактивиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ от филтри. Възникна Ñървърна грешка.';
+$messages['setdeleteerror'] = 'Ðевъзможно изтриване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ от филтри. Възникна Ñървърна грешка.';
+$messages['setactivated'] = 'Ðаборът от филтри е активиран уÑпешно.';
+$messages['setdeactivated'] = 'Ðаборът от филтри е деактивиран уÑпешно.';
+$messages['setdeleted'] = 'Ðаборът от филтри е изтрит уÑпешно.';
+$messages['setupdated'] = 'Ðаборът филтри е променен уÑпешно';
+$messages['setdeleteconfirm'] = 'Сигурни ли Ñте, че желаете да изтриете Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ от филтри?';
+$messages['setcreateerror'] = 'Ðевъзможно Ñъздаване на набор от филтри. Възникна Ñървърна грешка.';
+$messages['setcreated'] = 'Ðаборът от филтри е Ñъздаден уÑпешно.';
+$messages['activateerror'] = 'Ðевъзможно включване на филтъра. Възникна Ñървърна грешка.';
+$messages['deactivateerror'] = 'Ðевъзможно изключване на филтъра. Възникна Ñървърна грешка.';
+$messages['deactivated'] = 'Филтърът е изключен уÑпешно.';
+$messages['activated'] = 'Филтърът е включен уÑпешно.';
+$messages['moved'] = 'Филтърът е премеÑтен уÑпешно.';
+$messages['moveerror'] = 'Ðевъзможно премеÑтване на филтъра. Възникна Ñървърна грешка.';
+$messages['nametoolong'] = 'Името е прекалено дълго.';
+$messages['namereserved'] = 'Резервирано име.';
+$messages['setexist'] = 'Вече има такъв набор филтри.';
+$messages['nodata'] = 'Поне една Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ñ‚Ñ€Ñбва да е избрана!';
+$messages['invaliddateformat'] = 'невалидна дата или формат на чаÑÑ‚ от дата';
+$messages['saveerror'] = 'Ðевъзможен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° данни. Грешка при доÑтъп до Ñървър.';
+$messages['vacationsaved'] = 'Данните за отпуÑк Ñа запиÑани уÑпешно.';
+$messages['emptyvacationbody'] = 'ЛипÑва текÑÑ‚ на пиÑмо при отпуÑк!';
+$messages['duplicate.conflict.err'] = 'Ðе е позволено едновременното използване на заглавен блок и уникален идентификатор.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,237 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Siloù';
+$labels['managefilters'] = 'Ardeiñ siloù ar posteloù o tont tre';
+$labels['filtername'] = 'Anv ar sil';
+$labels['newfilter'] = 'Sil nevez';
+$labels['filteradd'] = 'Ouzhpennañ ur sil';
+$labels['filterdel'] = 'Dilemel ar sil';
+$labels['moveup'] = 'Dilec\'hiañ da grec\'h ';
+$labels['movedown'] = 'Dilec\'hiañ d\'an traoñ';
+$labels['filterallof'] = 'o kenglotañ gant an holl reolennoù da heul';
+$labels['filteranyof'] = 'o kenglotañ gant unan eus ar reolennoù da heul';
+$labels['filterany'] = 'An holl posteloù';
+$labels['filtercontains'] = 'a endalc\'h';
+$labels['filternotcontains'] = 'na endalc\'h ket';
+$labels['filteris'] = 'a zo kevatal da';
+$labels['filterisnot'] = 'n\'eo ket kevatal da';
+$labels['filterexists'] = 'a zo dioutañ/diouti';
+$labels['filternotexists'] = 'n\'eus ket dioutañ/diouti';
+$labels['filtermatches'] = 'a genglot gant ar riñvenn';
+$labels['filternotmatches'] = 'ne genglot ket gant ar riñvenn';
+$labels['filterregex'] = 'a genglot gant ar bomm reol';
+$labels['filternotregex'] = 'ne genglot ket gant ar bomm reol';
+$labels['filterunder'] = 'dindan';
+$labels['filterover'] = 'a-us';
+$labels['addrule'] = 'Ouzhpennañ ur reolenn';
+$labels['delrule'] = 'Dilemel ar reolenn';
+$labels['messagemoveto'] = 'Dilec\'hiañ ar gemennadenn da';
+$labels['messageredirect'] = 'Adheñchañ ar gemennadenn da';
+$labels['messagecopyto'] = 'Eilañ ar postel e';
+$labels['messagesendcopy'] = 'Kas un eilenn da';
+$labels['messagereply'] = 'Respont gant ur gemennadenn';
+$labels['messagedelete'] = 'Dilemel ar postel';
+$labels['messagediscard'] = 'Dilezel gant ur gemennadenn';
+$labels['messagekeep'] = 'Mirout ar gemennadenn er voest degemer';
+$labels['messagesrules'] = 'Evit ar postel o tont-tre:';
+$labels['messagesactions'] = '...erounit ar gweredoù da heul:';
+$labels['add'] = 'Ouzhpennañ';
+$labels['del'] = 'Dilemel';
+$labels['sender'] = 'Kaser';
+$labels['recipient'] = 'Degemerer';
+$labels['vacationaddr'] = 'Ma chomlec\'hioù postel';
+$labels['vacationdays'] = 'Feur kas ar c\'hemennadennoù (e devezhioù):';
+$labels['vacationinterval'] = 'Feur kas ar c\'hemennadennoù:';
+$labels['vacationreason'] = 'Korf ar gemennadenn (abeg an ezvezañs):';
+$labels['vacationfrom'] = 'Chomlec\'h kaser ar respont:';
+$labels['vacationsubject'] = 'Danvez';
+$labels['days'] = 'a zevezhioù';
+$labels['seconds'] = 'eilenn';
+$labels['rulestop'] = 'Paouez da briziañ ar reolennoù';
+$labels['enable'] = '(Di)weredekaat';
+$labels['filterset'] = 'Strollad siloù';
+$labels['filtersets'] = 'Strolladoù sil';
+$labels['filtersetadd'] = 'Ouzhpennañ ur strollad siloù';
+$labels['filtersetdel'] = 'Dilemel ar strollad siloù bremanel';
+$labels['filtersetact'] = 'Gweredekaat ar strollad siloù bremanel';
+$labels['filtersetdeact'] = 'Diweredekaat ar strollad siloù bremanel';
+$labels['filterdef'] = 'Despizadur ar sil';
+$labels['filtersetname'] = 'Anv ar strollad siloù';
+$labels['newfilterset'] = 'Strollad siloù nevez';
+$labels['active'] = 'gweredekaet';
+$labels['none'] = 'hini ebet';
+$labels['fromset'] = 'eus ar strollad';
+$labels['fromfile'] = 'eus ur restr';
+$labels['filterdisabled'] = 'Sil diweredekaet';
+$labels['countisgreaterthan'] = 'an niver a zo ouzhpenn';
+$labels['countisgreaterthanequal'] = 'an niver a zo ouzhpenn pe kevatal da';
+$labels['countislessthan'] = 'An niver a zo nebeutoc\'h eget';
+$labels['countislessthanequal'] = 'an niver a zo nebeutoc\'h pe kevatal da';
+$labels['countequals'] = 'an niver a zo kevatal da';
+$labels['countnotequals'] = 'an niver a zo dishenvel diouzh';
+$labels['valueisgreaterthan'] = 'ar werzh a zo brasoc\'h eget';
+$labels['valueisgreaterthanequal'] = 'ar gwerzh a zo brasoc\'h pe kevatal da';
+$labels['valueislessthan'] = 'ar gwerzh a zo nebeutoc\'h eget';
+$labels['valueislessthanequal'] = 'ar gwerzh a zo nebeutoc\'h pe kevatal da';
+$labels['valueequals'] = 'ar gwerzh a zo kevatal da';
+$labels['valuenotequals'] = 'ar gwerzh n\'eo ket kevatal da';
+$labels['setflags'] = 'Lakaat bannieloù d\'ar gemennadenn';
+$labels['addflags'] = 'Ouzhpennañ bannieloù d\'ar gemennadenn';
+$labels['removeflags'] = 'Dilemel bannieloù diouzh ar gemennaenn';
+$labels['flagread'] = 'Lennet';
+$labels['flagdeleted'] = 'Dilamet';
+$labels['flaganswered'] = 'Repsontet';
+$labels['flagflagged'] = 'Bannielet';
+$labels['flagdraft'] = 'Brouilhed';
+$labels['setvariable'] = 'Lakaat un argemenn';
+$labels['setvarname'] = 'Anv an argemenn';
+$labels['setvarvalue'] = 'Gwerzh an argemenn';
+$labels['setvarmodifiers'] = 'Daskemmerien:';
+$labels['varlower'] = 'lizherennoù munut';
+$labels['varupper'] = 'pennlizherennoù';
+$labels['varlowerfirst'] = 'lizherenn gentañ munut';
+$labels['varupperfirst'] = 'lizherenn gentañ bras';
+$labels['varquotewildcard'] = 'menegiñ arouezennoù dibar';
+$labels['varlength'] = 'hirder';
+$labels['notify'] = 'Kas ur rebuziñ';
+$labels['notifytarget'] = 'Bukenn ar rebuziñ:';
+$labels['notifymessage'] = 'Kemennadenn rebuziñ (diret):';
+$labels['notifyoptions'] = 'Dibarzhioù rebuziñ (diret):';
+$labels['notifyfrom'] = 'Kaser rebuzi (diret):';
+$labels['notifyimportance'] = 'Pouezusted:';
+$labels['notifyimportancelow'] = 'izel';
+$labels['notifyimportancenormal'] = 'reoliek';
+$labels['notifyimportancehigh'] = 'uhel';
+$labels['notifymethodmailto'] = 'Chomlec\'h postel';
+$labels['notifymethodtel'] = 'Pellgomz';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Krouiñ ur sil';
+$labels['usedata'] = 'Ober gant ar roadennoù da heul er sil';
+$labels['nextstep'] = 'Pazenn da heul';
+$labels['...'] = '...';
+$labels['currdate'] = 'Deiziad bremanel';
+$labels['datetest'] = 'Deiziad';
+$labels['dateheader'] = 'talbenn:';
+$labels['year'] = 'bloavezh';
+$labels['month'] = 'miz';
+$labels['day'] = 'devezh';
+$labels['date'] = 'deiziad (bbbb-mm-dd)';
+$labels['julian'] = 'deiziad (julian)';
+$labels['hour'] = 'eur';
+$labels['minute'] = 'munutenn';
+$labels['second'] = 'eilenn';
+$labels['time'] = 'eur (eur:miz:eilennoù)';
+$labels['iso8601'] = 'deiziad (ISO8601)';
+$labels['std11'] = 'deiziad (RFC2822)';
+$labels['zone'] = 'gwerzhid-eur';
+$labels['weekday'] = 'devezh ar sizhun (0-6)';
+$labels['advancedopts'] = 'Dibarzhioù kempleshoc\'h';
+$labels['body'] = 'Korf';
+$labels['address'] = 'chomlec\'h';
+$labels['envelope'] = 'golo-lizher';
+$labels['modifier'] = 'dazkemmer:';
+$labels['text'] = 'testenn';
+$labels['undecoded'] = 'dienboneget (diaoz)';
+$labels['contenttype'] = 'rizh an endalc\'had';
+$labels['modtype'] = 'rizh:';
+$labels['allparts'] = 'an holl';
+$labels['domain'] = 'domani';
+$labels['localpart'] = 'lodenn lec\'hel';
+$labels['user'] = 'arveriad';
+$labels['detail'] = 'munud';
+$labels['comparator'] = 'keñverier';
+$labels['default'] = 'dre ziouer';
+$labels['octet'] = 'strizh (eizhbit)';
+$labels['asciicasemap'] = 'chom hep teurel evezh ouzh an direnneg (ascii-casemap)';
+$labels['asciinumeric'] = 'niverel (ascii-numeric)';
+$labels['index'] = 'ibil:';
+$labels['indexlast'] = 'war-gil';
+$labels['vacation'] = 'Ezvezañs';
+$labels['vacation.reply'] = 'Kemennadenn respont';
+$labels['vacation.advanced'] = 'Arventennoù kempleshoc\'h';
+$labels['vacation.from'] = 'Chomlec\'h kaser ar respont';
+$labels['vacation.subject'] = 'Danvez';
+$labels['vacation.body'] = 'Korf';
+$labels['vacation.start'] = 'Deroù an ezvezañs';
+$labels['vacation.end'] = 'Dibenn an ezvezañs';
+$labels['vacation.status'] = 'Stad';
+$labels['vacation.on'] = 'Ya';
+$labels['vacation.off'] = 'Ket';
+$labels['vacation.addresses'] = 'Ma chomlec\'hioù postel';
+$labels['vacation.interval'] = 'Etremez respont';
+$labels['vacation.after'] = 'Lakaat ar reolenn ezvezañs goude';
+$labels['vacation.saving'] = 'Oc\'h enrollañ ar roadennoù';
+$labels['vacation.action'] = 'Gwered kemennadenn o tont-tre';
+$labels['vacation.keep'] = 'Mirout';
+$labels['vacation.discard'] = 'Dilezel';
+$labels['vacation.redirect'] = 'Adheñchañ da';
+$labels['vacation.copy'] = 'Kas un eilenn da';
+$labels['filladdresses'] = 'Leuniañ gant ma holl chomlec\'hioù';
+$labels['arialabelfiltersetactions'] = 'Gweredeoù ar strollad siloù';
+$labels['arialabelfilteractions'] = 'Gweredoù ar sil';
+$labels['arialabelfilterform'] = 'Perzhioù ar sil';
+$labels['ariasummaryfilterslist'] = 'Roll ar siloù';
+$labels['ariasummaryfiltersetslist'] = 'Roll ar strolladoù siloù';
+$labels['filterstitle'] = 'Embann ar siloù posteloù o tont-tre';
+$labels['vacationtitle'] = 'Embann ar reolenn maez-ar-burev';
+$labels['message'] = 'Kemennadenn';
+$labels['duplicate'] = 'a zo un eilad';
+$labels['notduplicate'] = 'n\'eo ket un eilad';
+$labels['duplicate.handle'] = 'merañ:';
+$labels['duplicate.header'] = 'talbenn:';
+$labels['duplicate.uniqueid'] = 'naoudi:';
+$labels['duplicate.seconds'] = 'diamzeret (eilennoù):';
+$labels['duplicate.last'] = 'daveel d\'an erounezadur kent';
+$messages['filterunknownerror'] = 'Fazi dafariad dianav.';
+$messages['filterconnerror'] = 'N\'haller ket kennaskañ d\'an dafariad';
+$messages['filterdeleteerror'] = 'N\'haller ket dilemel ar sil. Ur fazi dafariad a zo c\'hoavezet.';
+$messages['filterdeleted'] = 'Sil dilamet gant berzh.';
+$messages['filtersaved'] = 'Sil enrollet gant berzh.';
+$messages['filtersaveerror'] = 'N\'haller ket enrollañ ar sil. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['filterformerror'] = 'Fazio a zo e furmskrid ar sil.';
+$messages['filterdeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar sil dibabet?';
+$messages['ruledeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar reolenn diuzet?';
+$messages['actiondeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar gwered diuzet?';
+$messages['forbiddenchars'] = 'Arouezennoù difennet er vaezienn.';
+$messages['cannotbeempty'] = 'N\'hall ket ar vaezienn bezañ goullo.';
+$messages['ruleexist'] = 'Ur sil gant an anv erspizet an zo dioutañ endeo.';
+$messages['setactivateerror'] = 'N\'haller ket gweredekaat ar siloù diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['setdeactivateerror'] = 'N\'haller ket diweredekaat ar siloù diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['setdeleteerror'] = 'N\'haller ket dilemel ar siloù diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['setactivated'] = 'Strollad siloù gweredekaet gant berzh.';
+$messages['setdeactivated'] = 'Strollad siloù diweredekaet gant berzh.';
+$messages['setdeleted'] = 'Siloù dilamet gant berzh.';
+$messages['setdeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar strollad siloù diuzet?';
+$messages['setcreateerror'] = 'N\'haller ket krouiñ ar strollad siloù. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['setcreated'] = 'Strollad siloù krouet gant berzh.';
+$messages['activateerror'] = 'N\'haller ket gweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['deactivateerror'] = 'N\'haller ket diweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['deactivated'] = 'Sil(où) diweredekaet gant berzh.';
+$messages['activated'] = 'Sil(où) diweredekaet gant berzh.';
+$messages['moved'] = 'Sil(où) dilec\'hiet gant berzh.';
+$messages['moveerror'] = 'N\'haller ket dilec\'hiañ ar sil diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['nametoolong'] = 'Re hir eo an anv.';
+$messages['namereserved'] = 'Miret eo an anv.';
+$messages['setexist'] = 'Ar strollad a zo anezhañ endeo.';
+$messages['nodata'] = 'Ul lec\'hiadur a rank bezañ diuzet d\'an nebeutañ!';
+$messages['invaliddateformat'] = 'Mentrezh deiziad pe lodenn deiziad didalvoudek';
+$messages['saveerror'] = 'N\'haller ket enrollañ ar roadennoù. Ur fazi dafariad a zo c\'hoarvezet.';
+$messages['vacationsaved'] = 'Roadennoù ezvezañs enrollet gant berzh.';
+$messages['emptyvacationbody'] = 'Dleet eo korf ar gemennadenn ezvezañs!';
+$messages['duplicate.conflict.err'] = 'Un talbenn hag un naoudi unel n\'int ket aotreet.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,223 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filteri';
+$labels['managefilters'] = 'Upravljanje dolaznim email filterima';
+$labels['filtername'] = 'Naziv filtera';
+$labels['newfilter'] = 'Novi filter';
+$labels['filteradd'] = 'Dodaj filter';
+$labels['filterdel'] = 'Obriši filter';
+$labels['moveup'] = 'Pomjeri gore';
+$labels['movedown'] = 'Pomjeri dole';
+$labels['filterallof'] = 'poklapa se sa svim sljedećim pravilima';
+$labels['filteranyof'] = 'poklapa se sa bilo kojim od sljedećih pravila';
+$labels['filterany'] = 'sve poruke';
+$labels['filtercontains'] = 'sadrži';
+$labels['filternotcontains'] = 'ne sadrži';
+$labels['filteris'] = 'jednako';
+$labels['filterisnot'] = 'nije jednako';
+$labels['filterexists'] = 'postoji';
+$labels['filternotexists'] = 'ne postoji';
+$labels['filtermatches'] = 'poklapa se sa izrazom';
+$labels['filternotmatches'] = 'ne poklapa se sa izrazom';
+$labels['filterregex'] = 'poklapa se sa regularnim izrazom';
+$labels['filternotregex'] = 'ne poklapa se sa regularnim izrazom';
+$labels['filterunder'] = 'ispod';
+$labels['filterover'] = 'iznad';
+$labels['addrule'] = 'Dodaj pravilo';
+$labels['delrule'] = 'Obriši pravilo';
+$labels['messagemoveto'] = 'Premjesti poruku u';
+$labels['messageredirect'] = 'Preusmjeri poruku ka';
+$labels['messagecopyto'] = 'Kopiraj poruku u';
+$labels['messagesendcopy'] = 'Pošalji kopiju poruke';
+$labels['messagereply'] = 'Odgovori';
+$labels['messagedelete'] = 'Obriši poruku';
+$labels['messagediscard'] = 'Odbaci sa porukom';
+$labels['messagekeep'] = 'Zadrži poruku u sanduÄetu';
+$labels['messagesrules'] = 'Za dolazne emailove:';
+$labels['messagesactions'] = '...izvrši sljedeće akcije:';
+$labels['add'] = 'Dodaj';
+$labels['del'] = 'Obriši';
+$labels['sender'] = 'Pošiljaoc';
+$labels['recipient'] = 'Primaoc';
+$labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
+$labels['vacationinterval'] = 'Frekvencija slanja poruka:';
+$labels['vacationreason'] = 'Tijelo poruke (razlog za odmor):';
+$labels['vacationsubject'] = 'Naslov poruke:';
+$labels['days'] = 'dana';
+$labels['seconds'] = 'sekundi';
+$labels['rulestop'] = 'Prestani procjenjivati pravila';
+$labels['enable'] = 'Omogući/Onemogući';
+$labels['filterset'] = 'Set filtera';
+$labels['filtersets'] = 'Setovi filtera';
+$labels['filtersetadd'] = 'Dodaj set filtera';
+$labels['filtersetdel'] = 'Obriši trenutni set filtera';
+$labels['filtersetact'] = 'Aktiviraj trenutni set filtera';
+$labels['filtersetdeact'] = 'Deaktiviraj trenutni set filtera';
+$labels['filterdef'] = 'Definicija filtera';
+$labels['filtersetname'] = 'Naziv seta filtera';
+$labels['newfilterset'] = 'Novi set filtera';
+$labels['active'] = 'aktivno';
+$labels['none'] = 'ništa';
+$labels['fromset'] = 'iz seta';
+$labels['fromfile'] = 'iz datoteke';
+$labels['filterdisabled'] = 'Filter je onemogućen';
+$labels['countisgreaterthan'] = 'brojaÄ je veći od';
+$labels['countisgreaterthanequal'] = 'brojaÄ je veći ili jednak';
+$labels['countislessthan'] = 'brojaÄ je manji od';
+$labels['countislessthanequal'] = 'brojaÄ je manji ili jednak';
+$labels['countequals'] = 'brojaÄ je jednak';
+$labels['countnotequals'] = 'zbir nije jednak';
+$labels['valueisgreaterthan'] = 'vrijednost je veća od';
+$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka';
+$labels['valueislessthan'] = 'vrijednost je manja od';
+$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka';
+$labels['valueequals'] = 'vrijednost je jednaka';
+$labels['valuenotequals'] = 'vrijednost nije jednaka';
+$labels['setflags'] = 'Postavi oznake za poruku';
+$labels['addflags'] = 'Dodaj oznake u poruku';
+$labels['removeflags'] = 'Ukloni oznake iz poruke';
+$labels['flagread'] = 'ProÄitano';
+$labels['flagdeleted'] = 'Obrisano';
+$labels['flaganswered'] = 'Odgovoreno';
+$labels['flagflagged'] = 'Važno';
+$labels['flagdraft'] = 'Skica';
+$labels['setvariable'] = 'Postavi promjenjivu';
+$labels['setvarname'] = 'Naziv promjenjive:';
+$labels['setvarvalue'] = 'Vrijednost promjenjive:';
+$labels['setvarmodifiers'] = 'Parametri:';
+$labels['varlower'] = 'mala slova';
+$labels['varupper'] = 'velika slova';
+$labels['varlowerfirst'] = 'prvi znak malim slovom';
+$labels['varupperfirst'] = 'prvi znak velikim slovom';
+$labels['varquotewildcard'] = 'citiraj specijalne znakove';
+$labels['varlength'] = 'dužina';
+$labels['notify'] = 'Pošalji napomenu';
+$labels['notifytarget'] = 'Odredište napomene:';
+$labels['notifymessage'] = 'Poruka napomene (neobavezno):';
+$labels['notifyoptions'] = 'Opcije napomene (neobavezno):';
+$labels['notifyfrom'] = 'Pošiljalac napomene (neobavezno):';
+$labels['notifyimportance'] = 'Prioritet:';
+$labels['notifyimportancelow'] = 'mali';
+$labels['notifyimportancenormal'] = 'obiÄni';
+$labels['notifyimportancehigh'] = 'veliki';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Kreiraj filter';
+$labels['usedata'] = 'Koristite sljedeće podatke u filteru:';
+$labels['nextstep'] = 'Sljedeći korak';
+$labels['...'] = '...';
+$labels['currdate'] = 'Trenutni datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'zaglavlje:';
+$labels['year'] = 'godina';
+$labels['month'] = 'mjesec';
+$labels['day'] = 'dan';
+$labels['date'] = 'datum (gggg-mm-dd)';
+$labels['julian'] = 'datum (julijanski)';
+$labels['hour'] = 'sat';
+$labels['minute'] = 'minuta';
+$labels['second'] = 'sekunda';
+$labels['time'] = 'vrijeme (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'vremenska zona';
+$labels['weekday'] = 'sedmica (0-6)';
+$labels['advancedopts'] = 'Napredne opcije';
+$labels['body'] = 'Tijelo';
+$labels['address'] = 'adresa';
+$labels['envelope'] = 'koverta';
+$labels['modifier'] = 'prilagođavanje:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'nekodiran (obiÄni)';
+$labels['contenttype'] = 'vrsta sadržaja';
+$labels['modtype'] = 'vrsta:';
+$labels['allparts'] = 'sve';
+$labels['domain'] = 'domena';
+$labels['localpart'] = 'lokalni dio';
+$labels['user'] = 'korisnik';
+$labels['detail'] = 'detalji';
+$labels['comparator'] = 'uporeÄ‘ivaÄ:';
+$labels['default'] = 'poÄetno';
+$labels['octet'] = 'striktno (oktet)';
+$labels['asciicasemap'] = 'osjetljivo na velika/mala slova (ascii-casemap)';
+$labels['asciinumeric'] = 'numeriÄki (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'unazad';
+$labels['vacation'] = 'Odmor';
+$labels['vacation.reply'] = 'Poruka sa odgovorom';
+$labels['vacation.advanced'] = 'Napredmen postavke';
+$labels['vacation.subject'] = 'Naslov';
+$labels['vacation.body'] = 'Tijelo';
+$labels['vacation.start'] = 'PoÄetak odmora';
+$labels['vacation.end'] = 'Kraj odmora';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'UkljuÄeno';
+$labels['vacation.off'] = 'IskljuÄeno';
+$labels['vacation.interval'] = 'Interval odgovora';
+$labels['vacation.after'] = 'Pravilo za odmor stavi nakon';
+$labels['vacation.saving'] = 'Snimam podatke...';
+$labels['vacation.action'] = 'Akcija za dolazne poruke';
+$labels['vacation.keep'] = 'Zadrži';
+$labels['vacation.discard'] = 'Odbaci';
+$labels['vacation.redirect'] = 'Preusmeri ka';
+$labels['vacation.copy'] = 'Pošalji kopiju na';
+$labels['filladdresses'] = 'Popuni svim mojim adresama';
+$labels['arialabelfiltersetactions'] = 'Akcije za filterske setove';
+$labels['arialabelfilteractions'] = 'Filterske akcije';
+$labels['arialabelfilterform'] = 'Svojstva filtera';
+$labels['ariasummaryfilterslist'] = 'Lista filtera';
+$labels['ariasummaryfiltersetslist'] = 'Lista filterskih setova';
+$labels['filterstitle'] = 'Uredi filtere za dolazni email';
+$labels['vacationtitle'] = 'Uredi pravila kada nisam na poslu';
+$messages['filterunknownerror'] = 'Nepoznata serverska greška.';
+$messages['filterconnerror'] = 'Nije se moguće povezati na server.';
+$messages['filterdeleteerror'] = 'Nije moguće obrisati filter. Desila se serverska greška.';
+$messages['filterdeleted'] = 'Filter je uspješno obrisan.';
+$messages['filtersaved'] = 'Filter je uspjeÅ¡no saÄuvan.';
+$messages['filtersaveerror'] = 'Nije moguće saÄuvati filter. Desila se serverska greÅ¡ka.';
+$messages['filterdeleteconfirm'] = 'Da li zaista želite obrisati oznaÄeni filter?';
+$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati oznaÄeno pravilo?';
+$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati oznaÄenu akciju?';
+$messages['forbiddenchars'] = 'U polje su uneseni nedozvoljeni znakovi.';
+$messages['cannotbeempty'] = 'Polje ne može biti prazno.';
+$messages['ruleexist'] = 'Filter s tim imenom već postoji.';
+$messages['setactivateerror'] = 'Nije moguće aktivirati oznaÄeni set filtera. Desila se serverska greÅ¡ka.';
+$messages['setdeactivateerror'] = 'Nije moguće deaktivirati oznaÄeni set filtera. Desila se serverska greÅ¡ka.';
+$messages['setdeleteerror'] = 'Nije moguće obrisati oznaÄeni set filtera. Desila se serverska greÅ¡ka.';
+$messages['setactivated'] = 'Set filtera je uspješno aktiviran.';
+$messages['setdeactivated'] = 'Set filtera je uspješno deaktiviran.';
+$messages['setdeleted'] = 'Set filtera je uspješno obrisan.';
+$messages['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati oznaÄeni set filtera?';
+$messages['setcreateerror'] = 'Nije moguće kreirati set filtera. Desila se serverska greška.';
+$messages['setcreated'] = 'Set filtera je uspješno kreiran.';
+$messages['activateerror'] = 'Nije moguće omogućiti oznaÄene filtere. Desila se serverska greÅ¡ka.';
+$messages['deactivateerror'] = 'Nije moguće onemogućiti oznaÄene filtere. Desila se serverska greÅ¡ka.';
+$messages['deactivated'] = 'Filteri su uspješno omogućeni.';
+$messages['activated'] = 'Filteri su uspješno onemogućeni.';
+$messages['moved'] = 'Filteri su uspješno premješteni.';
+$messages['moveerror'] = 'Nije moguće premjestiti oznaÄeni filter. Desila se serverska greÅ¡ka.';
+$messages['nametoolong'] = 'Ime je predugo.';
+$messages['namereserved'] = 'Ime je rezervisano.';
+$messages['setexist'] = 'Set već postoji.';
+$messages['nodata'] = 'Morate oznaÄiti barem jednu poziciju!';
+$messages['invaliddateformat'] = 'NetaÄan datum ili dio formata datuma';
+$messages['saveerror'] = 'Nije moguće snimiti podatke. Desila se serverska greška.';
+$messages['vacationsaved'] = 'Podaci o odmoru su uspješno snimljeni.';
+$messages['emptyvacationbody'] = 'Tijelo poruke za odmor je neophodno!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,238 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtres';
+$labels['managefilters'] = 'Gestiona els filtres dels missatges d\'entrada';
+$labels['filtername'] = 'Nom del filtre';
+$labels['newfilter'] = 'Filtre Nou';
+$labels['filteradd'] = 'Afegeix un filtre';
+$labels['filterdel'] = 'Suprimeix el filtre';
+$labels['moveup'] = 'Mou amunt';
+$labels['movedown'] = 'Mou avall';
+$labels['filterallof'] = 'que coincideixi amb totes les regles següents';
+$labels['filteranyof'] = 'que coincideixi amb qualsevol de les regles següents';
+$labels['filterany'] = 'tots els missatges';
+$labels['filtercontains'] = 'conté';
+$labels['filternotcontains'] = 'no conté';
+$labels['filteris'] = 'és igual a';
+$labels['filterisnot'] = 'és diferent de';
+$labels['filterexists'] = 'existeix';
+$labels['filternotexists'] = 'no existeix';
+$labels['filtermatches'] = 'coincideix amb l\'expressió';
+$labels['filternotmatches'] = 'no coincideix amb l\'expressió';
+$labels['filterregex'] = 'coincideix amb l\'expressió regular';
+$labels['filternotregex'] = 'no coincideix amb l\'expressió regular';
+$labels['filterunder'] = 'sota';
+$labels['filterover'] = 'sobre';
+$labels['addrule'] = 'Afegeix una regla';
+$labels['delrule'] = 'Suprimeix una regla';
+$labels['messagemoveto'] = 'Mou el missatge a';
+$labels['messageredirect'] = 'Redirigeix el missatge cap a';
+$labels['messagecopyto'] = 'Copia el missatge a';
+$labels['messagesendcopy'] = 'Envia una còpia del missatge a';
+$labels['messagereply'] = 'Respon amb un missatge';
+$labels['messagedelete'] = 'Suprimeix missatge';
+$labels['messagediscard'] = 'Descarta amb un missatge';
+$labels['messagekeep'] = 'Deixa el missatge a la bústia';
+$labels['messagesrules'] = 'Pels missatges entrants:';
+$labels['messagesactions'] = '..executa les següents accions:';
+$labels['add'] = 'Afegeix';
+$labels['del'] = 'Suprimeix';
+$labels['sender'] = 'Remitent';
+$labels['recipient'] = 'Destinatari';
+$labels['vacationaddr'] = 'Les meves adreces de correu electrònic:';
+$labels['vacationdays'] = 'Cada quan enviar un missatge (en dies):';
+$labels['vacationinterval'] = 'Amb quina freqüència s\'han d\'enviar els missatges:';
+$labels['vacationreason'] = 'Cos del missatge (raó de l\'absència):';
+$labels['vacationfrom'] = 'Respon a l\'adreça del remitent:';
+$labels['vacationsubject'] = 'Assumpte del missatge:';
+$labels['days'] = 'dies';
+$labels['seconds'] = 'segons';
+$labels['rulestop'] = 'Deixa d\'avaluar regles';
+$labels['enable'] = 'Habilita/Deshabilita';
+$labels['filterset'] = 'Conjunt de filtres';
+$labels['filtersets'] = 'Conjunts de filtres';
+$labels['filtersetadd'] = 'Afegeix un conjunt de filtres';
+$labels['filtersetdel'] = 'Suprimeix el conjunt de filtres actual';
+$labels['filtersetact'] = 'Activa el conjunt de filtres actual';
+$labels['filtersetdeact'] = 'Desactiva el conjunt de filtres actual';
+$labels['filterseteditraw'] = 'Edita el conjunt de filtres';
+$labels['filterdef'] = 'Definició del filtre';
+$labels['filtersetname'] = 'Nom del conjunt de filtres';
+$labels['newfilterset'] = 'Nou conjunt de filtres';
+$labels['active'] = 'actiu';
+$labels['none'] = 'cap';
+$labels['fromset'] = 'des del conjunt';
+$labels['fromfile'] = 'des del fitxer';
+$labels['filterdisabled'] = 'Filtre deshabilitat';
+$labels['countisgreaterthan'] = 'el recompte és més gran de';
+$labels['countisgreaterthanequal'] = 'el recompte és més gran o igual a';
+$labels['countislessthan'] = 'el recompte és menor de';
+$labels['countislessthanequal'] = 'el recompte és menor o igual a';
+$labels['countequals'] = 'el recompte és igual que';
+$labels['countnotequals'] = 'el recompte és diferent de';
+$labels['valueisgreaterthan'] = 'el valor és més gran de';
+$labels['valueisgreaterthanequal'] = 'el valor és major o igual que';
+$labels['valueislessthan'] = 'el valor és menor que';
+$labels['valueislessthanequal'] = 'el valor és menor o igual de';
+$labels['valueequals'] = 'el valor és igual a';
+$labels['valuenotequals'] = 'el valor és diferent de';
+$labels['setflags'] = 'Posa indicadors al missatge';
+$labels['addflags'] = 'Afegeix indicadors al missatge';
+$labels['removeflags'] = 'Suprimeix indicadors del missatge';
+$labels['flagread'] = 'Llegit';
+$labels['flagdeleted'] = 'Suprimit';
+$labels['flaganswered'] = 'Respost';
+$labels['flagflagged'] = 'Marcat';
+$labels['flagdraft'] = 'Esborrany';
+$labels['setvariable'] = 'Ajusta la variable';
+$labels['setvarname'] = 'Nom de la variable:';
+$labels['setvarvalue'] = 'Valor de la variable:';
+$labels['setvarmodifiers'] = 'Modificadors:';
+$labels['varlower'] = 'minúscules';
+$labels['varupper'] = 'majúscules';
+$labels['varlowerfirst'] = 'el primer caràcter en minúscula';
+$labels['varupperfirst'] = 'el primer caràcter en majúscula';
+$labels['varquotewildcard'] = 'engloba els caràcters especials amb cometes';
+$labels['varlength'] = 'llargada';
+$labels['notify'] = 'Envia notificació';
+$labels['notifytarget'] = 'Objectiu de la notificació:';
+$labels['notifymessage'] = 'Missatge de notificació (opcional):';
+$labels['notifyoptions'] = 'Opcions de notificació (opcional):';
+$labels['notifyfrom'] = 'Remitent de la notificació (opcional):';
+$labels['notifyimportance'] = 'Importància:';
+$labels['notifyimportancelow'] = 'baixa';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correu electrònic';
+$labels['notifymethodtel'] = 'Telèfon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crea filtre';
+$labels['usedata'] = 'Fes servir les següents dades al filtre:';
+$labels['nextstep'] = 'Següent pas';
+$labels['...'] = '...';
+$labels['string'] = 'Cadena de text';
+$labels['currdate'] = 'Data actual';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'capçalera:';
+$labels['year'] = 'any';
+$labels['month'] = 'mes';
+$labels['day'] = 'dia';
+$labels['date'] = 'data (aaaa-mm-dd)';
+$labels['julian'] = 'data (calendari julià)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minut';
+$labels['second'] = 'segon';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fus horari';
+$labels['weekday'] = 'dia de la setmana (0-6)';
+$labels['advancedopts'] = 'Opcions avançades';
+$labels['body'] = 'Cos';
+$labels['address'] = 'adreça';
+$labels['envelope'] = 'sobre';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'descodificat (en brut)';
+$labels['contenttype'] = 'tipus de contingut';
+$labels['modtype'] = 'tipus:';
+$labels['allparts'] = 'tots';
+$labels['domain'] = 'domini';
+$labels['localpart'] = 'part local';
+$labels['user'] = 'usuari';
+$labels['detail'] = 'detall';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'per defecte';
+$labels['octet'] = 'estricte (octet)';
+$labels['asciicasemap'] = 'No distingeix entre majúscules i minúscules  (ascii-casemap)';
+$labels['asciinumeric'] = 'numèric (ascii-numèric)';
+$labels['index'] = 'índex:';
+$labels['indexlast'] = 'cap enrere';
+$labels['vacation'] = 'Vacances';
+$labels['vacation.reply'] = 'Missatge de resposta';
+$labels['vacation.advanced'] = 'Paràmetres avançats';
+$labels['vacation.from'] = 'Respon a l\'adreça del remitent';
+$labels['vacation.subject'] = 'Assumpte';
+$labels['vacation.body'] = 'Cos';
+$labels['vacation.start'] = 'Inici de vacances';
+$labels['vacation.end'] = 'Finalització de vacances';
+$labels['vacation.status'] = 'Estat';
+$labels['vacation.on'] = 'Activat';
+$labels['vacation.off'] = 'Desactivat';
+$labels['vacation.addresses'] = 'Les meves adreces de correu electrònic';
+$labels['vacation.interval'] = 'Interval de resposta';
+$labels['vacation.after'] = 'Posa la regla de vacances després';
+$labels['vacation.saving'] = 'S\'estan desant les dades...';
+$labels['vacation.action'] = 'Acció pel missatge entrant';
+$labels['vacation.keep'] = 'Conserva';
+$labels['vacation.discard'] = 'Descarta';
+$labels['vacation.redirect'] = 'Redirigeix cap a';
+$labels['vacation.copy'] = 'Envia còpia a';
+$labels['filladdresses'] = 'Emplena-ho amb totes les meves adreces de correu electrònic';
+$labels['arialabelfiltersetactions'] = 'Accions pel conjunt de filtres';
+$labels['arialabelfilteractions'] = 'Accions del filtre';
+$labels['arialabelfilterform'] = 'Propietats del filtre';
+$labels['ariasummaryfilterslist'] = 'Llistat de filtres';
+$labels['ariasummaryfiltersetslist'] = 'Llistat de conjunts de filtres';
+$labels['filterstitle'] = 'Edita els filtres pels missatges entrants';
+$labels['vacationtitle'] = 'Edita la norma "fora de l\'oficina"';
+$labels['message'] = 'Missatge';
+$labels['duplicate'] = 'està duplicat';
+$labels['notduplicate'] = 'no està duplicat';
+$labels['duplicate.header'] = 'capçalera:';
+$labels['duplicate.uniqueid'] = 'Identificador:';
+$labels['duplicate.seconds'] = 'temps d\'espera (en segons):';
+$labels['duplicate.last'] = 'relatiu a la darrera execució';
+$messages['filterunknownerror'] = 'Hi ha hagut un error desconegut al servidor.';
+$messages['filterconnerror'] = 'No s\'ha pogut connectar al servidor.';
+$messages['filterdeleteerror'] = 'No s\'ha pogut suprimir el filtre. Hi ha hagut un error al servidor.';
+$messages['filterdeleted'] = 'El filtre s\'ha suprimit correctament.';
+$messages['filtersaved'] = 'El filtre s\'ha desat correctament.';
+$messages['filtersaveerror'] = 'No s\'ha pogut desar el filtre. Hi ha hagut un error al servidor.';
+$messages['filterformerror'] = 'El formulari de filtres conté errors.';
+$messages['filterdeleteconfirm'] = 'Esteu segurs de voler suprimir el filtre seleccionat?';
+$messages['ruledeleteconfirm'] = 'Esteu segurs que voleu suprimir la regla seleccionada?';
+$messages['actiondeleteconfirm'] = 'Esteu segurs que voleu suprimir l\'acció seleccionada?';
+$messages['forbiddenchars'] = 'El camp conté caràcters prohibits.';
+$messages['cannotbeempty'] = 'El camp no pot estar buit.';
+$messages['ruleexist'] = 'Ja existeix un filtre amb aquest nom.';
+$messages['setactivateerror'] = 'No s\'ha pogut activar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
+$messages['setdeactivateerror'] = 'No s\'ha pogut desactivar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
+$messages['setdeleteerror'] = 'No s\'ha pogut suprimir el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
+$messages['setactivated'] = 'El conjunt de filtres s\'ha activat correctament.';
+$messages['setdeactivated'] = 'El conjunt de filtres s\'ha desactivat correctament.';
+$messages['setdeleted'] = 'El conjunt de filtres s\'ha suprimit correctament.';
+$messages['setupdated'] = 'El conjunt de filtres s\'ha actualitzat correctament.';
+$messages['setdeleteconfirm'] = 'Esteu segurs que voleu suprimir el conjunt de filtres seleccionats?';
+$messages['setcreateerror'] = 'No s\'ha pogut crear el conjunt de filtres. Hi ha hagut un error al servidor.';
+$messages['setcreated'] = 'S\'ha creat correctament el conjunt de filtres.';
+$messages['activateerror'] = 'No s\'ha pogut habilitar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
+$messages['deactivateerror'] = 'No s\'ha pogut deshabilitar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
+$messages['deactivated'] = 'Filtre(s) deshabilitat(s) correctament.';
+$messages['activated'] = 'Filtre(s) habilitat(s) correctament.';
+$messages['moved'] = 'S\'ha mogut correctament el filtre.';
+$messages['moveerror'] = 'No s\'ha pogut moure el filtre seleccionat. Hi ha hagut un error al servidor.';
+$messages['nametoolong'] = 'El nom és massa llarg.';
+$messages['namereserved'] = 'Nom reservat.';
+$messages['setexist'] = 'El conjunt ja existeix.';
+$messages['nodata'] = 'S\'ha de seleccionar com a mínim una posició!';
+$messages['invaliddateformat'] = 'data no vàlida o format no vàlid';
+$messages['saveerror'] = 'No s\'han pogut desar les dades. Hi ha hagut un error al servidor.';
+$messages['vacationsaved'] = 'Les dades de les vacances s\'han desat correctament.';
+$messages['emptyvacationbody'] = 'És obligatori definir el cos del missatge de vacances';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,229 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtry';
+$labels['managefilters'] = 'Nastavení filtrů';
+$labels['filtername'] = 'Název filtru';
+$labels['newfilter'] = 'Nový filtr';
+$labels['filteradd'] = 'Přidej filtr';
+$labels['filterdel'] = 'Smaž filtr';
+$labels['moveup'] = 'Posunout nahoru';
+$labels['movedown'] = 'Posunout dolů';
+$labels['filterallof'] = 'Odpovídají všechna pravidla';
+$labels['filteranyof'] = 'Odpovídá kterékoliv pravidlo';
+$labels['filterany'] = 'Všechny zprávy';
+$labels['filtercontains'] = 'obsahuje';
+$labels['filternotcontains'] = 'neobsahuje';
+$labels['filteris'] = 'odpovídá';
+$labels['filterisnot'] = 'neodpovídá';
+$labels['filterexists'] = 'existuje';
+$labels['filternotexists'] = 'neexistuje';
+$labels['filtermatches'] = 'odpovídá výrazu';
+$labels['filternotmatches'] = 'neodpovídá výrazu';
+$labels['filterregex'] = 'odpovídá regulárnímu výrazu';
+$labels['filternotregex'] = 'neodpovídá regulárnímu výrazu';
+$labels['filterunder'] = 'pod';
+$labels['filterover'] = 'nad';
+$labels['addrule'] = 'Přidej pravidlo';
+$labels['delrule'] = 'Smaž pravidlo';
+$labels['messagemoveto'] = 'Přesuň zprávu do';
+$labels['messageredirect'] = 'Přeposlat zprávu na';
+$labels['messagecopyto'] = 'Zkopírovat zprávu do';
+$labels['messagesendcopy'] = 'Odeslat kopii zprávy na';
+$labels['messagereply'] = 'Odpovědět se zprávou';
+$labels['messagedelete'] = 'Smazat zprávu';
+$labels['messagediscard'] = 'Zahodit a informovat odesilatele';
+$labels['messagekeep'] = 'Ponechat zprávu v doruÄené poÅ¡tÄ›';
+$labels['messagesrules'] = 'Pravidla pro příchozí zprávu:';
+$labels['messagesactions'] = '...vykonej následující akce:';
+$labels['add'] = 'Přidej';
+$labels['del'] = 'Smaž';
+$labels['sender'] = 'Sender';
+$labels['recipient'] = 'Příjemce';
+$labels['vacationaddr'] = 'Mé e-mailové adresy:';
+$labels['vacationdays'] = 'PoÄet dnů mezi automatickými odpovÄ›Ämi:';
+$labels['vacationinterval'] = 'Prodleva mezi automatickými odpovÄ›Ämi:';
+$labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):';
+$labels['vacationfrom'] = 'Adresa odesilatele odpovědi:';
+$labels['vacationsubject'] = 'Předmět zprávy:';
+$labels['days'] = 'dnů';
+$labels['seconds'] = 'sekund';
+$labels['rulestop'] = 'Zastavit pravidla';
+$labels['enable'] = 'Zapnout/Vypnout';
+$labels['filterset'] = 'Sada filtrů';
+$labels['filtersets'] = 'Sady filtrů';
+$labels['filtersetadd'] = 'Přidat sadu filtrů';
+$labels['filtersetdel'] = 'Odebrat tuto sadu filtrů';
+$labels['filtersetact'] = 'Activate current filters set';
+$labels['filtersetdeact'] = 'Vypnout tuto sadu filtrů';
+$labels['filterdef'] = 'Definice filtru';
+$labels['filtersetname'] = 'Nastavit název sady filtrů';
+$labels['newfilterset'] = 'Nová sada filtrů';
+$labels['active'] = 'aktivní';
+$labels['none'] = 'nic';
+$labels['fromset'] = 'ze sady';
+$labels['fromfile'] = 'ze souboru';
+$labels['filterdisabled'] = 'Filtr neaktivní';
+$labels['countisgreaterthan'] = 'poÄet je vÄ›tší než';
+$labels['countisgreaterthanequal'] = 'poÄet je vÄ›tší nebo roven';
+$labels['countislessthan'] = 'poÄet je nižší než';
+$labels['countislessthanequal'] = 'poÄet je nižší nebo roven';
+$labels['countequals'] = 'poÄet je roven';
+$labels['countnotequals'] = 'poÄet není roven';
+$labels['valueisgreaterthan'] = 'hodnota je větší než';
+$labels['valueisgreaterthanequal'] = 'hodnota je větší nebo stejná jako';
+$labels['valueislessthan'] = 'hodnota je nižší než';
+$labels['valueislessthanequal'] = 'hodnota je nižší nebo stejná jako';
+$labels['valueequals'] = 'hodnota odpovídá';
+$labels['valuenotequals'] = 'hodnota neodpovídá';
+$labels['setflags'] = 'Nastavit vlajky u zprávy';
+$labels['addflags'] = 'Přidat vlajky ke zprávě';
+$labels['removeflags'] = 'Odstranit vlajky ze zprávy';
+$labels['flagread'] = 'PÅ™eÄteno';
+$labels['flagdeleted'] = 'Smazáno';
+$labels['flaganswered'] = 'Odpovězené';
+$labels['flagflagged'] = 'OznaÄeno';
+$labels['flagdraft'] = 'Koncept';
+$labels['setvariable'] = 'Nastavit proměnnou';
+$labels['setvarname'] = 'Název proměnné:';
+$labels['setvarvalue'] = 'Hodnota proměnné:';
+$labels['setvarmodifiers'] = 'Modifikátory:';
+$labels['varlower'] = 'malá písmena';
+$labels['varupper'] = 'velká písmena';
+$labels['varlowerfirst'] = 'první písmeno malé';
+$labels['varupperfirst'] = 'první písmeno velké';
+$labels['varquotewildcard'] = 'uvodit speciální znaky uvozovkama';
+$labels['varlength'] = 'délka';
+$labels['notify'] = 'Odeslat oznámení';
+$labels['notifytarget'] = 'Cíl oznámení:';
+$labels['notifymessage'] = 'Zpráva oznámení (nepovinné):';
+$labels['notifyoptions'] = 'Možnosti oznámení (nepovinné):';
+$labels['notifyfrom'] = 'Odesílatel oznámení (nepovinné):';
+$labels['notifyimportance'] = 'Důležitost:';
+$labels['notifyimportancelow'] = 'nízká';
+$labels['notifyimportancenormal'] = 'normální';
+$labels['notifyimportancehigh'] = 'vysoká';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Vytvořit filtr';
+$labels['usedata'] = 'Použít následující údaje ve filtru:';
+$labels['nextstep'] = 'Další krok';
+$labels['...'] = '...';
+$labels['currdate'] = 'Aktuální datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'hlaviÄka:';
+$labels['year'] = 'rok';
+$labels['month'] = 'měsíc';
+$labels['day'] = 'den';
+$labels['date'] = 'datum (rrrr-mm-dd)';
+$labels['julian'] = 'datum (juliánské)';
+$labels['hour'] = 'hodina';
+$labels['minute'] = 'minuta';
+$labels['second'] = 'sekunda';
+$labels['time'] = 'Äas (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'Äasová zóna';
+$labels['weekday'] = 'všední den (0-6)';
+$labels['advancedopts'] = 'PokroÄilá nastavení';
+$labels['body'] = 'Tělo';
+$labels['address'] = 'adresa';
+$labels['envelope'] = 'obálka';
+$labels['modifier'] = 'mÄ›niÄ:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'nedekódované (surové)';
+$labels['contenttype'] = 'typ obsahu';
+$labels['modtype'] = 'typ:';
+$labels['allparts'] = 'vše';
+$labels['domain'] = 'doména';
+$labels['localpart'] = 'místní Äást';
+$labels['user'] = 'uživatel';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'porovnávaÄ:';
+$labels['default'] = 'výchozí';
+$labels['octet'] = 'striktní (oktet)';
+$labels['asciicasemap'] = 'necitlivé na velikost písmen (ascii-casemap)';
+$labels['asciinumeric'] = 'Äíslené (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'pozpátku';
+$labels['vacation'] = 'Dovolená';
+$labels['vacation.reply'] = 'Odpověd';
+$labels['vacation.advanced'] = 'PokroÄilá nastavení';
+$labels['vacation.from'] = 'Adresa odesilatele odpovědi';
+$labels['vacation.subject'] = 'Předmět';
+$labels['vacation.body'] = 'Tělo';
+$labels['vacation.start'] = 'ZaÄátek dovolené';
+$labels['vacation.end'] = 'Konec dovolené';
+$labels['vacation.status'] = 'Stav';
+$labels['vacation.on'] = 'Zapnuto';
+$labels['vacation.off'] = 'Vypnuto';
+$labels['vacation.addresses'] = 'Mé e-mailové adresy';
+$labels['vacation.interval'] = 'Doba mezi odpovÄ›Ämi';
+$labels['vacation.after'] = 'Uložit pravidlo o dovolené za';
+$labels['vacation.saving'] = 'Ukládám data...';
+$labels['vacation.action'] = 'Akce pro příchozí zprávu';
+$labels['vacation.keep'] = 'Zachovat';
+$labels['vacation.discard'] = 'Zahodit';
+$labels['vacation.redirect'] = 'Přesměrovat na';
+$labels['vacation.copy'] = 'Odeslat kopii zprávy na';
+$labels['filladdresses'] = 'Vyplnit všemi mými adresami';
+$labels['arialabelfiltersetactions'] = 'Nastavit akce filtru';
+$labels['arialabelfilteractions'] = 'Akce filtru';
+$labels['arialabelfilterform'] = 'Vlastnosti filtru';
+$labels['ariasummaryfilterslist'] = 'Seznam filtrů';
+$labels['ariasummaryfiltersetslist'] = 'Seznam sad filtrů';
+$labels['filterstitle'] = 'Upravit filtry příchozích emailů';
+$labels['vacationtitle'] = 'Upravit pravidlo mimo-kancelář';
+$labels['message'] = 'Zprávy';
+$labels['duplicate.uniqueid'] = 'Identifikátor:';
+$messages['filterunknownerror'] = 'Neznámá chyba serveru';
+$messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru';
+$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Došlo k chybě serveru.';
+$messages['filterdeleted'] = 'Filtr byl smazán';
+$messages['filtersaved'] = 'Filtr byl uložen';
+$messages['filtersaveerror'] = 'Nebylo možné uložit filtr. Došlo k chybě serveru.';
+$messages['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?';
+$messages['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?';
+$messages['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?';
+$messages['forbiddenchars'] = 'Zakázané znaky v poli';
+$messages['cannotbeempty'] = 'Pole nemůže být prázdné';
+$messages['ruleexist'] = 'Filtr s uvedeným názvem již existuje.';
+$messages['setactivateerror'] = 'Nelze zapnout vybranou sadu filtrů. Došlo k chybě serveru.';
+$messages['setdeactivateerror'] = 'Nelze vypnout vybranou sadu filtrů. Došlo k chybě serveru.';
+$messages['setdeleteerror'] = 'Nelze odstranit vybranou sadu filtrů. Došlo k chybě serveru.';
+$messages['setactivated'] = 'Sada filtrů úspěšně zapnuta.';
+$messages['setdeactivated'] = 'Sada filtrů úspěšně vypnuta.';
+$messages['setdeleted'] = 'Sada filtrů úspěšně odstraněna.';
+$messages['setdeleteconfirm'] = 'Opravdu si přejete odebrat vybranou sadu filtrů.';
+$messages['setcreateerror'] = 'Nelze vytvořit sadu filtrů. Došlo k chybě serveru.';
+$messages['setcreated'] = 'Sada filtrů úspěšně vytvořena.';
+$messages['activateerror'] = 'Nelze zapnout vybrané filtr/y. Došlo k chybě serveru.';
+$messages['deactivateerror'] = 'Nelze vypnout vybrané filtr/y. Došlo k chybě serveru.';
+$messages['deactivated'] = 'Filtr(y) úspěšně vypnuty.';
+$messages['activated'] = 'Filtr/y úspěšně zapnuty.';
+$messages['moved'] = 'Filtr byl úspěšně přesunut.';
+$messages['moveerror'] = 'Nelze přesunout vybraný filtr. Došlo k chybě serveru.';
+$messages['nametoolong'] = 'Příliš dlouhý název.';
+$messages['namereserved'] = 'Vyhrazený název.';
+$messages['setexist'] = 'Sada již existuje.';
+$messages['nodata'] = 'Musí být vybrána minimálně jedna pozice!';
+$messages['invaliddateformat'] = 'Neplatné datum nebo Äást data';
+$messages['saveerror'] = 'Nebylo možné uložit data. Došlo k chybě serveru.';
+$messages['vacationsaved'] = 'Data o dovolené byla uložena.';
+$messages['emptyvacationbody'] = 'Tělo zprávy';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Hidlyddion';
+$labels['managefilters'] = 'Rheoli hidlyddion ebost i fewn';
+$labels['filtername'] = 'Enw hidlydd';
+$labels['newfilter'] = 'Hidlydd newydd';
+$labels['filteradd'] = 'Ychwanegu hidlydd';
+$labels['filterdel'] = 'Dileu hidlydd';
+$labels['moveup'] = 'Symud i fyny';
+$labels['movedown'] = 'Symud i lawr';
+$labels['filterallof'] = 'sy\'n cyfateb i\'r holl reolau canlynol';
+$labels['filteranyof'] = 'sy\'n cyfateb i unrhyw un i\'r rheolau canlynol';
+$labels['filterany'] = 'pob neges';
+$labels['filtercontains'] = 'yn cynnwys';
+$labels['filternotcontains'] = 'ddim yn cynnwys';
+$labels['filteris'] = 'yn hafal i';
+$labels['filterisnot'] = 'ddim yn hafal i';
+$labels['filterexists'] = 'yn bodoli';
+$labels['filternotexists'] = 'ddim yn bodoli';
+$labels['filtermatches'] = 'yn cyfateb i\'r mynegiant';
+$labels['filternotmatches'] = 'ddim yn cyfateb i\'r mynegiant';
+$labels['filterregex'] = 'yn cyfateb i\'r mynegiant rheolaidd';
+$labels['filternotregex'] = 'ddim yn cyfateb i\'r mynegiant rheolaidd';
+$labels['filterunder'] = 'o dan';
+$labels['filterover'] = 'dros';
+$labels['addrule'] = 'Ychwanegu rheol';
+$labels['delrule'] = 'Dileu rheol';
+$labels['messagemoveto'] = 'Symud neges i';
+$labels['messageredirect'] = 'Ail-gyfeirio neges i';
+$labels['messagecopyto'] = 'Copio neges i';
+$labels['messagesendcopy'] = 'Danfon copi o\'r neges i';
+$labels['messagereply'] = 'Ymateb gyda\'r neges';
+$labels['messagedelete'] = 'Dileu neges';
+$labels['messagediscard'] = 'Gwaredu gyda neges';
+$labels['messagekeep'] = 'Cadw\'r neges yn y Mewnflwch';
+$labels['messagesrules'] = 'Ar gyfer ebost i fewn:';
+$labels['messagesactions'] = '...rhedeg y gweithredoedd canlynol:';
+$labels['add'] = 'Ychwanegu';
+$labels['del'] = 'Dileu';
+$labels['sender'] = 'Anfonwr';
+$labels['recipient'] = 'Derbynnwr';
+$labels['vacationaddr'] = 'Fy nghyfeiriadau ebost:';
+$labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
+$labels['vacationinterval'] = 'Pa mor aml i ddanfon negeseuon:';
+$labels['vacationreason'] = 'Corff neges (rheswm ar wyliau):';
+$labels['vacationfrom'] = 'Cyfeiriad ymateb anfonwr:';
+$labels['vacationsubject'] = 'Pwnc neges:';
+$labels['days'] = 'dyddiau';
+$labels['seconds'] = 'eiliadau';
+$labels['rulestop'] = 'Stopio gwerthuso rheolau';
+$labels['enable'] = 'Galluogi/Analluogi';
+$labels['filterset'] = 'Set hidlyddion';
+$labels['filtersets'] = 'Setiau hidlyddion';
+$labels['filtersetadd'] = 'Ychwanegu set hidlyddion';
+$labels['filtersetdel'] = 'Dileu set hidlyddion cyfredol';
+$labels['filtersetact'] = 'Dileu set hidlyddion gweithredol';
+$labels['filtersetdeact'] = 'Analluogi set hidlyddion cyfredol';
+$labels['filterseteditraw'] = 'Golygu set hidlo';
+$labels['filterdef'] = 'Diffiniad hidlydd';
+$labels['filtersetname'] = 'Enw set hidlyddion';
+$labels['newfilterset'] = 'Set hidlyddion newydd';
+$labels['active'] = 'gweithredol';
+$labels['none'] = 'dim';
+$labels['fromset'] = 'o set';
+$labels['fromfile'] = 'o ffeil';
+$labels['filterdisabled'] = 'Analluogwyd hidlydd';
+$labels['countisgreaterthan'] = 'rhif yn fwy na';
+$labels['countisgreaterthanequal'] = 'rhif yn fwy na neu hafal i';
+$labels['countislessthan'] = 'rhif yn llai na';
+$labels['countislessthanequal'] = 'rhif yn llai na neu hafal i';
+$labels['countequals'] = 'rhif yn hafal i';
+$labels['countnotequals'] = 'rhif ddim yn hafal i';
+$labels['valueisgreaterthan'] = 'gwerth yn fwy na';
+$labels['valueisgreaterthanequal'] = 'gwerth yn fwy na neu hafal i';
+$labels['valueislessthan'] = 'gwerth yn llai na';
+$labels['valueislessthanequal'] = 'gwerth yn llai neu hafal i';
+$labels['valueequals'] = 'gwerth yn hafal i';
+$labels['valuenotequals'] = 'gwerth ddim yn hafal i';
+$labels['setflags'] = 'Rhoi fflag ar y neges';
+$labels['addflags'] = 'Ychwanegu fflag i\'r neges';
+$labels['removeflags'] = 'Dileu fflag o\'r neges';
+$labels['flagread'] = 'Darllen';
+$labels['flagdeleted'] = 'Dilewyd';
+$labels['flaganswered'] = 'Atebwyd';
+$labels['flagflagged'] = 'Nodwyd';
+$labels['flagdraft'] = 'Drafft';
+$labels['setvariable'] = 'Gosod newidyn';
+$labels['setvarname'] = 'Enw newidyn:';
+$labels['setvarvalue'] = 'Gwerth newidyn:';
+$labels['setvarmodifiers'] = 'Addasydd:';
+$labels['varlower'] = 'llythrennau bychain';
+$labels['varupper'] = 'priflythrennau';
+$labels['varlowerfirst'] = 'llythyren gyntaf yn fach';
+$labels['varupperfirst'] = 'llythyren gyntaf yn briflythyren';
+$labels['varquotewildcard'] = 'dyfynnu nodau arbennig';
+$labels['varlength'] = 'hyd';
+$labels['notify'] = 'Anfon hysbysiad';
+$labels['notifytarget'] = 'Target hysbysu:';
+$labels['notifymessage'] = 'Neges hysbysu (dewisol):';
+$labels['notifyoptions'] = 'Dewisiadau hysbysu (dewisol):';
+$labels['notifyfrom'] = 'Anfonwr hysbysiad (dewisol):';
+$labels['notifyimportance'] = 'Pwysigrwydd:';
+$labels['notifyimportancelow'] = 'isel';
+$labels['notifyimportancenormal'] = 'arferol';
+$labels['notifyimportancehigh'] = 'uchel';
+$labels['notifymethodmailto'] = 'Ebost';
+$labels['notifymethodtel'] = 'Ffôn';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Creu hidlydd';
+$labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:';
+$labels['nextstep'] = 'Cam nesaf';
+$labels['...'] = '...';
+$labels['string'] = 'Llinyn';
+$labels['currdate'] = 'Dyddiad cyfredol';
+$labels['datetest'] = 'Dyddiad';
+$labels['dateheader'] = 'pennawd:';
+$labels['year'] = 'blwyddyn';
+$labels['month'] = 'mis';
+$labels['day'] = 'dydd';
+$labels['date'] = 'dyddiad (bbbb-mm-dd)';
+$labels['julian'] = 'dyddiad (julian)';
+$labels['hour'] = 'awr';
+$labels['minute'] = 'munud';
+$labels['second'] = 'eiliad';
+$labels['time'] = 'amser (aa:mm:ee)';
+$labels['iso8601'] = 'dyddiad (ISO8601)';
+$labels['std11'] = 'dyddiad (RFC2822)';
+$labels['zone'] = 'parth-amser';
+$labels['weekday'] = 'dydd yr wythnos (0-6)';
+$labels['advancedopts'] = 'Dewisiadau uwch';
+$labels['body'] = 'Corff';
+$labels['address'] = 'cyfeiriad';
+$labels['envelope'] = 'amlen';
+$labels['modifier'] = 'newidydd:';
+$labels['text'] = 'testun';
+$labels['undecoded'] = 'heb ei ddatgodi (amrwd)';
+$labels['contenttype'] = 'math cynnwys';
+$labels['modtype'] = 'math:';
+$labels['allparts'] = 'popeth';
+$labels['domain'] = 'parth';
+$labels['localpart'] = 'darn lleol';
+$labels['user'] = 'defnyddiwr';
+$labels['detail'] = 'manylion';
+$labels['comparator'] = 'cymharydd';
+$labels['default'] = 'rhagosodiad';
+$labels['octet'] = 'llym (octet)';
+$labels['asciicasemap'] = 'maint llythrennau (ascii-casemap)';
+$labels['asciinumeric'] = 'rhifau (ascii-numeric)';
+$labels['index'] = 'mynegai:';
+$labels['indexlast'] = 'o chwith';
+$labels['vacation'] = 'Gwyliau';
+$labels['vacation.reply'] = 'Neges ymateb';
+$labels['vacation.advanced'] = 'Gosodiadau uwch';
+$labels['vacation.from'] = 'Cyfeiriad ymateb anfonwr';
+$labels['vacation.subject'] = 'Pwnc';
+$labels['vacation.body'] = 'Corff';
+$labels['vacation.start'] = 'Dechrau gwyliau';
+$labels['vacation.end'] = 'Diwedd gwyliau';
+$labels['vacation.status'] = 'Statws';
+$labels['vacation.on'] = 'Ymlaen';
+$labels['vacation.off'] = 'I ffwrdd';
+$labels['vacation.addresses'] = 'Fy nghyfeiriadau ebost:';
+$labels['vacation.interval'] = 'Cyfnod ymateb';
+$labels['vacation.after'] = 'Rhoi rheol gwyliau ar ôl';
+$labels['vacation.saving'] = 'Yn cadw\'r data...';
+$labels['vacation.action'] = 'Gweithred neges i fewn';
+$labels['vacation.keep'] = 'Cadw';
+$labels['vacation.discard'] = 'Gwaredu';
+$labels['vacation.redirect'] = 'Ailgyfeirio i';
+$labels['vacation.copy'] = 'Danfon copi i';
+$labels['filladdresses'] = 'Llenwi gyda fy nghyfeiriadau ychwanegol';
+$labels['arialabelfiltersetactions'] = 'Gweithrediadau set hidlydd';
+$labels['arialabelfilteractions'] = 'Gweithrediadau hidlydd';
+$labels['arialabelfilterform'] = 'Nodweddion hidlydd';
+$labels['ariasummaryfilterslist'] = 'Rhestr o hidlyddion';
+$labels['ariasummaryfiltersetslist'] = 'Rhestr o setiau hidlyddion';
+$labels['filterstitle'] = 'Golygu hidlyddion ebost i fewn';
+$labels['vacationtitle'] = 'Golygu rheol allan-o\'r-swyddfa';
+$labels['message'] = 'Neges';
+$labels['duplicate'] = 'wedi dyblygu';
+$labels['notduplicate'] = 'ddim wedi dyblygu';
+$labels['duplicate.handle'] = 'dolen:';
+$labels['duplicate.header'] = 'pennawd:';
+$labels['duplicate.uniqueid'] = 'dynodwr:';
+$labels['duplicate.seconds'] = 'terfyn amser (eiliadau):';
+$labels['duplicate.last'] = 'yn berthnol i\'r gweithrediad diwethaf';
+$messages['filterunknownerror'] = 'Gwall gweinydd anhysbys.';
+$messages['filterconnerror'] = 'Methwyd cysylltu a\'r gweinydd.';
+$messages['filterdeleteerror'] = 'Methwyd dileu hidlydd. Cafwydd gwall gweinydd.';
+$messages['filterdeleted'] = 'Dilëuwyd hidlydd yn llwyddiannus.';
+$messages['filtersaved'] = 'Cadwyd hidlydd yn llwyddiannus.';
+$messages['filtersaveerror'] = 'Methwyd cadw hidlydd. Cafwyd gwall gweinydd.';
+$messages['filterformerror'] = 'Mae gwallau yn y ffurflen hidlo.';
+$messages['filterdeleteconfirm'] = 'Ydych chi wir am ddileu yr hidlydd ddewiswyd?';
+$messages['ruledeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r rheol ddewiswyd?';
+$messages['actiondeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r weithred ddewiswyd?';
+$messages['forbiddenchars'] = 'Llythrennau gwaharddedig yn y maes.';
+$messages['cannotbeempty'] = 'Ni all y maes fod yn wag.';
+$messages['ruleexist'] = 'Mae hidlydd gyda\'r enw yma yn bodoli\'n barod.';
+$messages['setactivateerror'] = 'Methwyd galluogi y hidlyddion dewiswyd. Cafwyd gwall gweinydd.';
+$messages['setdeactivateerror'] = 'Methwyd analluogi y hidlyddion dewiswyd. Cafwyd gwall gweinydd.';
+$messages['setdeleteerror'] = 'Methwyd dileu y set hidlyddion ddewiswyd. Cafwyd gwall gweinydd.';
+$messages['setactivated'] = 'Bywiogwyd y set hidlydd yn llwyddiannus.';
+$messages['setdeactivated'] = 'Dadfywiogwyd y set hidlydd yn llwyddiannus.';
+$messages['setdeleted'] = 'Dilëuwyd y set hidlydd yn llwyddiannus.';
+$messages['setupdated'] = 'Diweddarwyd y set hidlo yn llwyddiannus.';
+$messages['setdeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r set hidlydd ddewiswyd?';
+$messages['setcreateerror'] = 'Methwyd creu set hidlydd. Cafwyd gwall gweinydd.';
+$messages['setcreated'] = 'Crëuwyd y set hidlydd yn llwyddiannus.';
+$messages['activateerror'] = 'Methwyd galluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
+$messages['deactivateerror'] = 'Methwyd analluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
+$messages['deactivated'] = 'Galluogwyd y hidlydd(ion) yn llwyddiannus.';
+$messages['activated'] = 'Analluogwyd y hidlydd(ion) yn llwyddiannus.';
+$messages['moved'] = 'Symudwyd y hidlydd yn llwyddiannus.';
+$messages['moveerror'] = 'Methwyd symud y hidlydd dewiswyd. Cafwyd gwall gweinydd.';
+$messages['nametoolong'] = 'Enw yn rhy hir.';
+$messages['namereserved'] = 'Enw neilltuedig.';
+$messages['setexist'] = 'Mae\'r set yn bodoli\'n barod.';
+$messages['nodata'] = 'Rhaid dewis o leia un safle!';
+$messages['invaliddateformat'] = 'Dyddiad neu fformat dyddiad annilys';
+$messages['saveerror'] = 'Methwyd cadw\'r data. Cafwyd gwall gweinydd.';
+$messages['vacationsaved'] = 'Cadwyd y data gwyliau yn llwyddiannus.';
+$messages['emptyvacationbody'] = 'Mae angen rhoi corff y neges wyliau!';
+$messages['duplicate.conflict.err'] = 'Ni ganiateir defnyddio pennawd a dynodwr unigryw.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,204 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtre';
+$labels['managefilters'] = 'Ændre indgående mail filtreing';
+$labels['filtername'] = 'Filter navn';
+$labels['newfilter'] = 'Nyt filter';
+$labels['filteradd'] = 'Tilføj filter';
+$labels['filterdel'] = 'Slet filter';
+$labels['moveup'] = 'Flyt op';
+$labels['movedown'] = 'Flyt ned';
+$labels['filterallof'] = 'matcher alle af de følgende regler';
+$labels['filteranyof'] = 'matcher en af følgende regler';
+$labels['filterany'] = 'alle meddelelser';
+$labels['filtercontains'] = 'indeholder';
+$labels['filternotcontains'] = 'indeholder ikke';
+$labels['filteris'] = 'er ens med';
+$labels['filterisnot'] = 'er ikke ens med';
+$labels['filterexists'] = 'findes';
+$labels['filternotexists'] = 'ikke eksisterer';
+$labels['filtermatches'] = 'matcher udtryk';
+$labels['filternotmatches'] = 'matcher ikke udtryk';
+$labels['filterregex'] = 'matcher regulært udtryk';
+$labels['filternotregex'] = 'matcher ikke regulært udtryk';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Tilføj regel';
+$labels['delrule'] = 'Slet regel';
+$labels['messagemoveto'] = 'Flyt besked til';
+$labels['messageredirect'] = 'Redirriger besked til';
+$labels['messagecopyto'] = 'Kopier besked til';
+$labels['messagesendcopy'] = 'Send kopi af besked til';
+$labels['messagereply'] = 'Svar med besked';
+$labels['messagedelete'] = 'Slet besked';
+$labels['messagediscard'] = 'Slet med besked';
+$labels['messagekeep'] = 'Behold besked i Inbox';
+$labels['messagesrules'] = 'For indkomne besked:';
+$labels['messagesactions'] = '...udfør følgende aktioner:';
+$labels['add'] = 'Tilføje';
+$labels['del'] = 'Fjern';
+$labels['sender'] = 'Afsender';
+$labels['recipient'] = 'Modtager';
+$labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
+$labels['vacationinterval'] = 'Hvor tit skal besked sendes:';
+$labels['vacationreason'] = 'Besked (ved ferie):';
+$labels['vacationsubject'] = 'Besked emne:';
+$labels['days'] = 'dage';
+$labels['seconds'] = 'sekunder';
+$labels['rulestop'] = 'Stop behandling af regler';
+$labels['enable'] = 'Aktivér/Deaktivér';
+$labels['filterset'] = 'Filter sæt';
+$labels['filtersets'] = 'Filtre sæt';
+$labels['filtersetadd'] = 'Tilføj filter sæt';
+$labels['filtersetdel'] = 'Slet aktuel filter sæt';
+$labels['filtersetact'] = 'Aktiver nuværende filter sæt';
+$labels['filtersetdeact'] = 'Deaktiver nuværende filter sæt';
+$labels['filterdef'] = 'Filter definition';
+$labels['filtersetname'] = 'Filter sæt navn';
+$labels['newfilterset'] = 'Nyt filter sæt';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'ingen';
+$labels['fromset'] = 'fra sæt';
+$labels['fromfile'] = 'fra fil';
+$labels['filterdisabled'] = 'Filter deaktiveret';
+$labels['countisgreaterthan'] = 'antal er større end';
+$labels['countisgreaterthanequal'] = 'antal er større end eller lig med';
+$labels['countislessthan'] = 'antal er mindre end';
+$labels['countislessthanequal'] = 'antal er mindre end eller lig med';
+$labels['countequals'] = 'antal er lig med';
+$labels['countnotequals'] = 'antal er ikke lig med';
+$labels['valueisgreaterthan'] = 'værdi er større end';
+$labels['valueisgreaterthanequal'] = 'værdi er større end eller lig med';
+$labels['valueislessthan'] = 'værdi er mindre end';
+$labels['valueislessthanequal'] = 'værdi er mindre end eller lig med';
+$labels['valueequals'] = 'værdi er lig med';
+$labels['valuenotequals'] = 'værdi er ikke lig med';
+$labels['setflags'] = 'Sæt flag i beskeden';
+$labels['addflags'] = 'Tilføj flag til beskeden';
+$labels['removeflags'] = 'Fjern flag fra beskeden';
+$labels['flagread'] = 'Læs';
+$labels['flagdeleted'] = 'Slettede';
+$labels['flaganswered'] = 'Besvaret';
+$labels['flagflagged'] = 'Markeret';
+$labels['flagdraft'] = 'Kladde';
+$labels['setvariable'] = 'Skriv variablen';
+$labels['setvarname'] = 'Variabel navn:';
+$labels['setvarvalue'] = 'Variabel værdi:';
+$labels['setvarmodifiers'] = 'Modifikator';
+$labels['varlower'] = 'små bogstaver';
+$labels['varupper'] = 'store bogstaver';
+$labels['varlowerfirst'] = 'første bogstav lille';
+$labels['varupperfirst'] = 'Første bogstav stort';
+$labels['varquotewildcard'] = 'Sæt specialle tegn i citationstegn ';
+$labels['varlength'] = 'længde';
+$labels['notify'] = 'Send meddelelse';
+$labels['notifyimportance'] = 'Vigtighed:';
+$labels['notifyimportancelow'] = 'lav';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'høj';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Opret filter';
+$labels['usedata'] = 'Brug følgende data i filteret:';
+$labels['nextstep'] = 'Næste trin';
+$labels['...'] = '...';
+$labels['currdate'] = 'Aktuel dato';
+$labels['datetest'] = 'Dato';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'Ã¥r';
+$labels['month'] = 'måned';
+$labels['day'] = 'dag';
+$labels['date'] = 'dato (åååå-mm-dd)';
+$labels['julian'] = 'dato (juliansk)';
+$labels['hour'] = 'time';
+$labels['minute'] = 'minut';
+$labels['second'] = 'sekund';
+$labels['time'] = 'tid (tt:mm:ss)';
+$labels['iso8601'] = 'dato (ISO8601)';
+$labels['std11'] = 'dato (RFC2822)';
+$labels['zone'] = 'tidszone';
+$labels['weekday'] = 'ugedag (0-6)';
+$labels['advancedopts'] = 'Advancerede muligheder';
+$labels['body'] = 'Brødtekst';
+$labels['address'] = 'adresse';
+$labels['envelope'] = 'kuvert';
+$labels['modifier'] = 'modificerer:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'udekodet (råt):';
+$labels['contenttype'] = 'indholdstype';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'alle';
+$labels['domain'] = 'domæne';
+$labels['localpart'] = 'lokal del';
+$labels['user'] = 'bruger';
+$labels['detail'] = 'detalje';
+$labels['comparator'] = 'sammenligner:';
+$labels['default'] = 'standard';
+$labels['octet'] = 'præcis (oktet)';
+$labels['asciicasemap'] = 'store og små bogstaver (ascii-bogstaver)';
+$labels['asciinumeric'] = 'numerisk (ascii-numerisk)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'baglends';
+$labels['vacation'] = 'Ferie';
+$labels['vacation.reply'] = 'Svar besked';
+$labels['vacation.advanced'] = 'Avanceret indstillinger ';
+$labels['vacation.subject'] = 'Emne';
+$labels['vacation.start'] = 'Ferie star';
+$labels['vacation.end'] = 'Ferie slut';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.saving'] = 'Gemmer data...';
+$labels['vacation.keep'] = 'Behold';
+$labels['vacation.discard'] = 'Kasser';
+$labels['vacation.redirect'] = 'Omdiriger til ';
+$labels['vacation.copy'] = 'Send kopi til';
+$messages['filterunknownerror'] = 'Ukendt server fejl.';
+$messages['filterconnerror'] = 'Kan ikke forbinde til server.';
+$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Serverfejl opstod.';
+$messages['filterdeleted'] = 'Filter slettet.';
+$messages['filtersaved'] = 'Filter gemt.';
+$messages['filtersaveerror'] = 'Kunne ikke gemme filter. Serverfejl.';
+$messages['filterdeleteconfirm'] = 'Vil du slette det valgte filter?';
+$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette den valgte regel?';
+$messages['actiondeleteconfirm'] = 'Er du sikker på du vil slette den valgte handling?';
+$messages['forbiddenchars'] = 'Ulovlige tegn i feltet';
+$messages['cannotbeempty'] = 'Feltet kan ikke være tomt.';
+$messages['ruleexist'] = 'Filter med dette navn eksisterer allerede.';
+$messages['setactivateerror'] = 'Kan ikke aktiverer valgt filter sæt. Server fejl.';
+$messages['setdeactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
+$messages['setdeleteerror'] = 'Kan ikke slette valgt filter sæt. Server fejl.';
+$messages['setactivated'] = 'Filter sæt aktiveret.';
+$messages['setdeactivated'] = 'Filter sæt deaktiveret.';
+$messages['setdeleted'] = 'Filter sæt slettet.';
+$messages['setdeleteconfirm'] = 'Er du sikker på du vil slette valgt filter sæt?';
+$messages['setcreateerror'] = 'Kan ikke oprette filter sæt. Server fejl.';
+$messages['setcreated'] = 'Filter sæt oprettet.';
+$messages['activateerror'] = 'Kan ikke aktivere valgt filter sæt. Server fejl.';
+$messages['deactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
+$messages['deactivated'] = 'Filter(filtre) aktiveret.';
+$messages['activated'] = 'Filter(filtre) deaktiveret.';
+$messages['moved'] = 'Filter flyttet.';
+$messages['moveerror'] = 'Kan ikke flytte valgt filter. Server fejl.';
+$messages['nametoolong'] = 'Navn er for langt.';
+$messages['namereserved'] = 'Reserveret navn.';
+$messages['setexist'] = 'Filterv sæt eksisterer allerede';
+$messages['nodata'] = 'Mindst en position skal vælges!';
+$messages['invaliddateformat'] = 'Ugyldigt dato- eller tidsformat';
+$messages['saveerror'] = 'Kunne ikke gemme data. Server fejl';
+$messages['vacationsaved'] = 'Ferie data gemt';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filter';
+$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
+$labels['filtername'] = 'Filtername';
+$labels['newfilter'] = 'Neuer Filter';
+$labels['filteradd'] = 'Filter hinzufügen';
+$labels['filterdel'] = 'Filter löschen';
+$labels['moveup'] = 'Nach oben';
+$labels['movedown'] = 'Nach unten';
+$labels['filterallof'] = 'UND (alle Regeln müssen zutreffen)';
+$labels['filteranyof'] = 'ODER (eine der Regeln muss zutreffen';
+$labels['filterany'] = 'Für alle Nachrichten';
+$labels['filtercontains'] = 'enthält';
+$labels['filternotcontains'] = 'enthält nicht';
+$labels['filteris'] = 'ist gleich';
+$labels['filterisnot'] = 'ist ungleich';
+$labels['filterexists'] = 'ist vorhanden';
+$labels['filternotexists'] = 'nicht vorhanden';
+$labels['filtermatches'] = 'entspricht Ausdruck';
+$labels['filternotmatches'] = 'entspricht nicht Ausdruck';
+$labels['filterregex'] = 'trifft regulären Ausdruck';
+$labels['filternotregex'] = 'entspricht regulärem Ausdruck';
+$labels['filterunder'] = 'unter';
+$labels['filterover'] = 'über';
+$labels['addrule'] = 'Regel hinzufügen';
+$labels['delrule'] = 'Regel löschen';
+$labels['messagemoveto'] = 'Verschiebe Nachricht nach';
+$labels['messageredirect'] = 'Leite Nachricht um nach';
+$labels['messagecopyto'] = 'Kopiere Nachricht nach';
+$labels['messagesendcopy'] = 'Sende Kopie an';
+$labels['messagereply'] = 'Antworte mit Nachricht';
+$labels['messagedelete'] = 'Nachricht löschen';
+$labels['messagediscard'] = 'Discard with message';
+$labels['messagekeep'] = 'Im Posteingang behalten';
+$labels['messagesrules'] = 'Für eingehende Nachrichten:';
+$labels['messagesactions'] = 'Führe folgende Aktionen aus:';
+$labels['add'] = 'Hinzufügen';
+$labels['del'] = 'Löschen';
+$labels['sender'] = 'Absender';
+$labels['recipient'] = 'Empfänger';
+$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
+$labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
+$labels['vacationinterval'] = 'Wie oft senden:';
+$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
+$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
+$labels['vacationsubject'] = 'Betreff';
+$labels['days'] = 'Tage';
+$labels['seconds'] = 'Sekunden';
+$labels['rulestop'] = 'Regelauswertung anhalten';
+$labels['enable'] = 'Aktivieren/Deaktivieren';
+$labels['filterset'] = 'Filtersätze';
+$labels['filtersets'] = 'Filtersätze';
+$labels['filtersetadd'] = 'Filtersatz anlegen';
+$labels['filtersetdel'] = 'Aktuellen Filtersatz löschen';
+$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
+$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
+$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
+$labels['filterdef'] = 'Filterdefinition';
+$labels['filtersetname'] = 'Filtersatzname';
+$labels['newfilterset'] = 'Neuer Filtersatz';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'keine';
+$labels['fromset'] = 'aus Filtersatz';
+$labels['fromfile'] = 'aus Datei';
+$labels['filterdisabled'] = 'Filter deaktiviert';
+$labels['countisgreaterthan'] = 'Anzahl ist grösser als';
+$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder grösser als';
+$labels['countislessthan'] = 'Anzahl ist kleiner als';
+$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
+$labels['countequals'] = 'Anzahl ist gleich';
+$labels['countnotequals'] = 'Anzahl ist ungleich';
+$labels['valueisgreaterthan'] = 'Wert ist grösser als';
+$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder grösser als';
+$labels['valueislessthan'] = 'Wert ist kleiner';
+$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
+$labels['valueequals'] = 'Wert ist gleich';
+$labels['valuenotequals'] = 'Wert ist ungleich';
+$labels['setflags'] = 'Setze Markierungen';
+$labels['addflags'] = 'Füge Markierung hinzu';
+$labels['removeflags'] = 'Entferne Markierung';
+$labels['flagread'] = 'gelesen';
+$labels['flagdeleted'] = 'Gelöscht';
+$labels['flaganswered'] = 'Beantwortet';
+$labels['flagflagged'] = 'Markiert';
+$labels['flagdraft'] = 'Entwurf';
+$labels['setvariable'] = 'Setze Variable';
+$labels['setvarname'] = 'Variablenname:';
+$labels['setvarvalue'] = 'Variablenwert:';
+$labels['setvarmodifiers'] = 'Umwandler:';
+$labels['varlower'] = 'Kleinschreibung';
+$labels['varupper'] = 'Grossschreibung';
+$labels['varlowerfirst'] = 'Erster Buchstabe klein';
+$labels['varupperfirst'] = 'Erster Buchstabe gross';
+$labels['varquotewildcard'] = 'Sonderzeichen auszeichnen';
+$labels['varlength'] = 'Länge';
+$labels['notify'] = 'Mitteilung senden';
+$labels['notifytarget'] = 'Mitteilungsempfänger:';
+$labels['notifymessage'] = 'Mitteilungstext (optional):';
+$labels['notifyoptions'] = 'Mitteilungsoptionen (optional):';
+$labels['notifyfrom'] = 'Absender (optional):';
+$labels['notifyimportance'] = 'Wichtigkeit:';
+$labels['notifyimportancelow'] = 'tief';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'hoch';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Filter erstellen';
+$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
+$labels['nextstep'] = 'Nächster Schritt';
+$labels['...'] = '...';
+$labels['string'] = 'Zeichenkette';
+$labels['currdate'] = 'Aktuelles Datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'Kopfzeile:';
+$labels['year'] = 'Jahr';
+$labels['month'] = 'Monat';
+$labels['day'] = 'Tag';
+$labels['date'] = 'Datum (JJJJ-MM-TT)';
+$labels['julian'] = 'Datum (julianisch)';
+$labels['hour'] = 'Stunde';
+$labels['minute'] = 'Minute';
+$labels['second'] = 'Sekunde';
+$labels['time'] = 'Zeit (hh:mm:ss)';
+$labels['iso8601'] = 'Datum (ISO-8601)';
+$labels['std11'] = 'Datum (RFC 2822)';
+$labels['zone'] = 'Zeitzone';
+$labels['weekday'] = 'Wochentag (0-6)';
+$labels['advancedopts'] = 'Erweiterte Optionen';
+$labels['body'] = 'Inhalt';
+$labels['address'] = 'Adresse';
+$labels['envelope'] = 'Umschlag';
+$labels['modifier'] = 'Wandler';
+$labels['text'] = 'Text';
+$labels['undecoded'] = 'kodiert (roh)';
+$labels['contenttype'] = 'Inhaltstyp';
+$labels['modtype'] = 'Typ:';
+$labels['allparts'] = 'alle';
+$labels['domain'] = 'Domain';
+$labels['localpart'] = 'lokaler Teil';
+$labels['user'] = 'Benutzer';
+$labels['detail'] = 'Detail';
+$labels['comparator'] = 'Komparator';
+$labels['default'] = 'Vorgabewert';
+$labels['octet'] = 'strikt (Oktet)';
+$labels['asciicasemap'] = 'Gross-/Kleinschreibung ignorieren';
+$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
+$labels['index'] = 'Index:';
+$labels['indexlast'] = 'rückwärts';
+$labels['vacation'] = 'Abwesenheit';
+$labels['vacation.reply'] = 'Antworte mit Nachricht';
+$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
+$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
+$labels['vacation.subject'] = 'Betreff';
+$labels['vacation.body'] = 'Inhalt';
+$labels['vacation.start'] = 'Beginn der Abwesenheit';
+$labels['vacation.end'] = 'Ende der Abwesenheit';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'Ein';
+$labels['vacation.off'] = 'Aus';
+$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
+$labels['vacation.interval'] = 'Antwort-Intervall';
+$labels['vacation.after'] = 'Abwesenheitsregel einfügen nach';
+$labels['vacation.saving'] = 'Speichere Daten...';
+$labels['vacation.action'] = 'Aktion für eingehende Nachrichten';
+$labels['vacation.keep'] = 'Behalten';
+$labels['vacation.discard'] = 'Verwerfen';
+$labels['vacation.redirect'] = 'Weiterleiten an';
+$labels['vacation.copy'] = 'Kopie an';
+$labels['filladdresses'] = 'Mit allen meiner Adressen ausfüllen';
+$labels['arialabelfiltersetactions'] = 'Filtersatz-Aktionen';
+$labels['arialabelfilteractions'] = 'Filteraktionen';
+$labels['arialabelfilterform'] = 'Filtereigenschaften';
+$labels['ariasummaryfilterslist'] = 'Filterliste';
+$labels['ariasummaryfiltersetslist'] = 'Filtersatzliste';
+$labels['filterstitle'] = 'Eingehende Nachrichtenfilter bearbeiten';
+$labels['vacationtitle'] = 'Abwesenheitsregel bearbeiten';
+$labels['message'] = 'Nachricht';
+$labels['duplicate'] = 'ist doppelt';
+$labels['notduplicate'] = 'ist nicht doppelt';
+$labels['duplicate.handle'] = 'verarbeiten:';
+$labels['duplicate.header'] = 'Kopfzeile:';
+$labels['duplicate.uniqueid'] = 'Bezeichner:';
+$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
+$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
+$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
+$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
+$messages['filterdeleteerror'] = 'Serverfehler beim Löschen des Filters.';
+$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
+$messages['filtersaved'] = 'Filter gespeichert';
+$messages['filtersaveerror'] = 'Serverfehler beim Speichern des Filters.';
+$messages['filterformerror'] = 'Filter-Formular enthält Fehler.';
+$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?';
+$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?';
+$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?';
+$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld';
+$messages['cannotbeempty'] = 'Feld darf nicht leer sein';
+$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
+$messages['setactivateerror'] = 'Serverfehler beim Aktivieren des gewählten Filtersatzes.';
+$messages['setdeactivateerror'] = 'Serverfehler beim Deaktivieren des gewählten Filtersatzes.';
+$messages['setdeleteerror'] = 'Serverfehler beim Löschen des gewählten Filtersatzes.';
+$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
+$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
+$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
+$messages['setupdated'] = 'Filtersatz erfolgreich gespeichert.';
+$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
+$messages['setcreateerror'] = 'Serverfehler beim Erstellen des Filtersatzes.';
+$messages['setcreated'] = 'Filter erfolgreich erstellt.';
+$messages['activateerror'] = 'Serverfehler beim Aktivieren des/der gewählten Filter(s).';
+$messages['deactivateerror'] = 'Serverfehler beim Deaktivieren des/der gewählten Filter(s).';
+$messages['deactivated'] = 'Filter erfolgreich aktiviert.';
+$messages['activated'] = 'Filter erfolgreich deaktiviert.';
+$messages['moved'] = 'Filter erfolgreich verschoben.';
+$messages['moveerror'] = 'Serverfehler beim Verschieben des gewählten Filters.';
+$messages['nametoolong'] = 'Filtersatz kann nicht erstellt werden. Name zu lang.';
+$messages['namereserved'] = 'Reservierter Name.';
+$messages['setexist'] = 'Filtersatz existiert bereits.';
+$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
+$messages['invaliddateformat'] = 'Ungültiges Datumsformat';
+$messages['saveerror'] = 'Fehler beim Speichern (Serverfehler)';
+$messages['vacationsaved'] = 'Abwesenheitsnotiz erfolgreich gespeichert.';
+$messages['emptyvacationbody'] = 'Mitteilungstext ist erforderlich!';
+$messages['duplicate.conflict.err'] = 'Kopfzeile und eindeutiger Bezeichner sind nicht zusammen erlaubt.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filter';
+$labels['managefilters'] = 'Filter für eingehende Nachrichten verwalten';
+$labels['filtername'] = 'Filtername';
+$labels['newfilter'] = 'Neuer Filter';
+$labels['filteradd'] = 'Filter hinzufügen';
+$labels['filterdel'] = 'Filter löschen';
+$labels['moveup'] = 'Nach oben';
+$labels['movedown'] = 'Nach unten';
+$labels['filterallof'] = 'trifft auf alle folgenden Regeln zu';
+$labels['filteranyof'] = 'trifft auf eine der folgenden Regeln zu';
+$labels['filterany'] = 'alle Nachrichten';
+$labels['filtercontains'] = 'enthält';
+$labels['filternotcontains'] = 'enthält nicht';
+$labels['filteris'] = 'ist gleich';
+$labels['filterisnot'] = 'ist ungleich';
+$labels['filterexists'] = 'existiert';
+$labels['filternotexists'] = 'existiert nicht';
+$labels['filtermatches'] = 'trifft auf Ausdruck zu';
+$labels['filternotmatches'] = 'trifft nicht auf Ausdruck zu';
+$labels['filterregex'] = 'trifft auf regulären Ausdruck zu';
+$labels['filternotregex'] = 'trifft nicht auf regulären Ausdruck zu';
+$labels['filterunder'] = 'unter';
+$labels['filterover'] = 'über';
+$labels['addrule'] = 'Regel hinzufügen';
+$labels['delrule'] = 'Regel löschen';
+$labels['messagemoveto'] = 'Nachricht verschieben nach';
+$labels['messageredirect'] = 'Nachricht umleiten an';
+$labels['messagecopyto'] = 'Nachricht kopieren nach';
+$labels['messagesendcopy'] = 'Kopie senden an';
+$labels['messagereply'] = 'Mit Nachricht antworten';
+$labels['messagedelete'] = 'Nachricht löschen';
+$labels['messagediscard'] = 'Abweisen mit Nachricht';
+$labels['messagekeep'] = 'Behalte Nachricht im Posteingang';
+$labels['messagesrules'] = 'Für eingehende Nachrichten:';
+$labels['messagesactions'] = '...führe folgende Aktionen aus:';
+$labels['add'] = 'Hinzufügen';
+$labels['del'] = 'Löschen';
+$labels['sender'] = 'Absender';
+$labels['recipient'] = 'Empfänger';
+$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
+$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
+$labels['vacationinterval'] = 'Wie oft sollen Nachrichten gesendet werden:';
+$labels['vacationreason'] = 'Nachrichteninhalt (Abwesenheitsgrund):';
+$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
+$labels['vacationsubject'] = 'Nachrichtenbetreff';
+$labels['days'] = 'Tage';
+$labels['seconds'] = 'Sekunden';
+$labels['rulestop'] = 'Regelauswertung anhalten';
+$labels['enable'] = 'Aktivieren/Deaktivieren';
+$labels['filterset'] = 'Filtersätze';
+$labels['filtersets'] = 'Filtersätze';
+$labels['filtersetadd'] = 'Filtersatz anlegen';
+$labels['filtersetdel'] = 'Aktuellen Filtersatz löschen';
+$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
+$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
+$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
+$labels['filterdef'] = 'Filterdefinition';
+$labels['filtersetname'] = 'Filtersatzname';
+$labels['newfilterset'] = 'Neuer Filtersatz';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'keine';
+$labels['fromset'] = 'aus Filtersatz';
+$labels['fromfile'] = 'aus Datei';
+$labels['filterdisabled'] = 'Filter deaktiviert';
+$labels['countisgreaterthan'] = 'Anzahl ist größer als';
+$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder größer als';
+$labels['countislessthan'] = 'Anzahl ist kleiner als';
+$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
+$labels['countequals'] = 'Anzahl ist gleich';
+$labels['countnotequals'] = 'Anzahl ist nicht gleich';
+$labels['valueisgreaterthan'] = 'Wert ist größer als';
+$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder größer als';
+$labels['valueislessthan'] = 'Wert ist kleiner';
+$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
+$labels['valueequals'] = 'Wert ist gleich';
+$labels['valuenotequals'] = 'Wert ist nicht gleich';
+$labels['setflags'] = 'Markierung an der Nachricht setzen';
+$labels['addflags'] = 'Markierung zur Nachricht hinzufügen';
+$labels['removeflags'] = 'Markierungen von der Nachricht entfernen';
+$labels['flagread'] = 'Gelesen';
+$labels['flagdeleted'] = 'Gelöscht';
+$labels['flaganswered'] = 'Beantwortet';
+$labels['flagflagged'] = 'Markiert';
+$labels['flagdraft'] = 'Entwurf';
+$labels['setvariable'] = 'Variable setzen';
+$labels['setvarname'] = 'Name der Variable:';
+$labels['setvarvalue'] = 'Wert der Variable:';
+$labels['setvarmodifiers'] = 'Modifikatoren:';
+$labels['varlower'] = 'Kleinschreibung';
+$labels['varupper'] = 'Großschreibung';
+$labels['varlowerfirst'] = 'Erster Buchstabe kleingeschrieben';
+$labels['varupperfirst'] = 'Erster Buchstabe großgeschrieben';
+$labels['varquotewildcard'] = 'maskiere Sonderzeichen';
+$labels['varlength'] = 'Länge';
+$labels['notify'] = 'Sende Benachrichtigung';
+$labels['notifytarget'] = 'Benachrichtigungs-Empfänger:';
+$labels['notifymessage'] = 'Inhalt der Benachrichtigung (optional):';
+$labels['notifyoptions'] = 'Optionen für die Benachrichtigung (optional)';
+$labels['notifyfrom'] = 'Absender der Benachrichtigung (optional):';
+$labels['notifyimportance'] = 'Priorität:';
+$labels['notifyimportancelow'] = 'niedrig';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'hoch';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Filter erstellen';
+$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
+$labels['nextstep'] = 'Nächster Schritt';
+$labels['...'] = '...';
+$labels['string'] = 'Zeichenkette';
+$labels['currdate'] = 'Aktuelles Datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'Kopfzeile:';
+$labels['year'] = 'jahr';
+$labels['month'] = 'monat';
+$labels['day'] = 'tag';
+$labels['date'] = 'datum (yyyy-mm-dd)';
+$labels['julian'] = 'datum (julian)';
+$labels['hour'] = 'stunde';
+$labels['minute'] = 'minute';
+$labels['second'] = 'sekunde';
+$labels['time'] = 'zeit (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'Zeitzone';
+$labels['weekday'] = 'wochentag (0-6)';
+$labels['advancedopts'] = 'Erweiterte Optionen';
+$labels['body'] = 'Textkörper';
+$labels['address'] = 'Adresse';
+$labels['envelope'] = 'Umschlag';
+$labels['modifier'] = 'Modifikator:';
+$labels['text'] = 'Text';
+$labels['undecoded'] = 'Nicht dekodiert';
+$labels['contenttype'] = 'Inhaltstyp';
+$labels['modtype'] = 'Typ:';
+$labels['allparts'] = 'Alle';
+$labels['domain'] = 'Domäne';
+$labels['localpart'] = 'lokaler Teil';
+$labels['user'] = 'Benutzer';
+$labels['detail'] = 'Detail';
+$labels['comparator'] = 'Komparator:';
+$labels['default'] = 'Vorgabewert';
+$labels['octet'] = 'strikt (Oktett)';
+$labels['asciicasemap'] = 'Groß-/Kleinschreibung ignorieren';
+$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'rückwärts';
+$labels['vacation'] = 'Urlaub';
+$labels['vacation.reply'] = 'Antwort';
+$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
+$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
+$labels['vacation.subject'] = 'Betreff';
+$labels['vacation.body'] = 'Hauptteil';
+$labels['vacation.start'] = 'Beginn des Urlaubs';
+$labels['vacation.end'] = 'Ende des Urlaubs';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'An';
+$labels['vacation.off'] = 'Aus';
+$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
+$labels['vacation.interval'] = 'Antwort Intervall';
+$labels['vacation.after'] = 'Setze Urlaubsregel nach';
+$labels['vacation.saving'] = 'Speichere Daten...';
+$labels['vacation.action'] = 'Eingehende Nachrichtaktion';
+$labels['vacation.keep'] = 'Behalten';
+$labels['vacation.discard'] = 'Verwerfen';
+$labels['vacation.redirect'] = 'Weiterleiten an';
+$labels['vacation.copy'] = 'Kopie senden an';
+$labels['filladdresses'] = 'Mit allen meinen Adressen ausfüllen';
+$labels['arialabelfiltersetactions'] = 'Aktionen für Filtersätze';
+$labels['arialabelfilteractions'] = 'Aktionen für Filter';
+$labels['arialabelfilterform'] = 'Filtereigenschaften';
+$labels['ariasummaryfilterslist'] = 'Liste von Filtern';
+$labels['ariasummaryfiltersetslist'] = 'Liste von Filtersätzen';
+$labels['filterstitle'] = 'Eingehende Mailfilter bearbeiten';
+$labels['vacationtitle'] = 'Abwesendheitsregel bearbeiten';
+$labels['message'] = 'Nachricht';
+$labels['duplicate'] = 'ist doppelt';
+$labels['notduplicate'] = 'ist nicht doppelt';
+$labels['duplicate.handle'] = 'verarbeiten:';
+$labels['duplicate.header'] = 'Kopfzeile:';
+$labels['duplicate.uniqueid'] = 'Bezeichner:';
+$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
+$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
+$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
+$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen';
+$messages['filterdeleteerror'] = 'Filter kann nicht gelöscht werden. Ein Serverfehler ist aufgetreten.';
+$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
+$messages['filtersaved'] = 'Filter erfolgreich gespeichert';
+$messages['filtersaveerror'] = 'Filter kann nicht gespeichert werden. Ein Serverfehler ist aufgetreten.';
+$messages['filterformerror'] = 'Filterformular enthält Fehler.';
+$messages['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?';
+$messages['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?';
+$messages['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?';
+$messages['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld';
+$messages['cannotbeempty'] = 'Eingabefeld darf nicht leer sein';
+$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
+$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
+$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
+$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
+$messages['setactivated'] = 'Filtersatz wurde erfolgreich aktiviert';
+$messages['setdeactivated'] = 'Filtersatz wurde erfolgreich deaktiviert';
+$messages['setdeleted'] = 'Filtersatz wurde erfolgreich gelöscht';
+$messages['setupdated'] = 'Filtersatz wurde erfolgreich aktualisiert';
+$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
+$messages['setcreateerror'] = 'Erstellen von Filter Sätzen nicht möglich. Es ist ein Serverfehler aufgetreten.';
+$messages['setcreated'] = 'Filtersatz wurde erfolgreich erstellt';
+$messages['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.';
+$messages['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.';
+$messages['deactivated'] = 'Filter erfolgreich deaktiviert.';
+$messages['activated'] = 'Filter erfolgreich aktiviert.';
+$messages['moved'] = 'Filter erfolgreich verschoben.';
+$messages['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.';
+$messages['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang';
+$messages['namereserved'] = 'Reservierter Name.';
+$messages['setexist'] = 'Filtersatz existiert bereits.';
+$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
+$messages['invaliddateformat'] = 'Ungültiges Datum oder Teil-Format';
+$messages['saveerror'] = 'Ein Serverfehler ist aufgetreten, Speicherung war nicht möglich.';
+$messages['vacationsaved'] = 'Urlaubsdaten erfolgreich gespeichert.';
+$messages['emptyvacationbody'] = 'Inhalt der Abwesenheitsbenachrichtigung wird benötigt!';
+$messages['duplicate.conflict.err'] = 'Beides, Kopfzeilen und eindeutige Kennzeichner, sind nicht erlaubt.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,237 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'ΦίλτÏα';
+$labels['managefilters'] = 'ΔιαχείÏιση φίλτÏων εισεÏχόμενων';
+$labels['filtername'] = 'Ονομασία φίλτÏου';
+$labels['newfilter'] = 'ΔημιουÏγία φίλτÏου';
+$labels['filteradd'] = 'ΠÏοσθήκη φίλτÏου';
+$labels['filterdel'] = 'ΔιαγÏαφή φίλτÏου';
+$labels['moveup'] = 'Μετακίνηση πάνω';
+$labels['movedown'] = 'Μετακίνηση κάτω';
+$labels['filterallof'] = 'ταιÏιάζουν με όλους τους παÏακάτω κανόνες';
+$labels['filteranyof'] = 'ταιÏιάζουν με οποιονδήποτε από τους παÏακάτω κανόνες';
+$labels['filterany'] = 'όλα τα μηνÏματα';
+$labels['filtercontains'] = 'πεÏιέχει';
+$labels['filternotcontains'] = 'δεν πεÏιέχει';
+$labels['filteris'] = 'είναι ίσο με';
+$labels['filterisnot'] = 'δεν είναι ίσο με';
+$labels['filterexists'] = 'υπάÏχει';
+$labels['filternotexists'] = 'δεν υπάÏχει';
+$labels['filtermatches'] = 'ταιÏιάζει με την έκφÏαση ';
+$labels['filternotmatches'] = 'Δεν ταιÏιάζει με την έκφÏαση';
+$labels['filterregex'] = 'ταιÏιάζει με κανονική έκφÏαση';
+$labels['filternotregex'] = 'δεν ταιÏιάζει με κανονική έκφÏαση';
+$labels['filterunder'] = 'κάτω';
+$labels['filterover'] = 'πάνω';
+$labels['addrule'] = 'ΠÏοσθήκη κανόνα';
+$labels['delrule'] = 'ΔιαγÏαφή κανόνα';
+$labels['messagemoveto'] = 'Μετακίνηση μηνÏματος στο';
+$labels['messageredirect'] = 'ΠÏοώθηση μηνÏματος στο';
+$labels['messagecopyto'] = 'ΑντιγÏαφη μυνηματος σε';
+$labels['messagesendcopy'] = 'Αποστολη της αντιγÏαφης μυνηματος σε';
+$labels['messagereply'] = 'Απάντηση με μήνυμα';
+$labels['messagedelete'] = 'ΔιαγÏαφή μηνÏματος';
+$labels['messagediscard'] = 'ΑπόÏÏιψη με μήνυμα';
+$labels['messagekeep'] = 'ΔιατήÏηση μηνÏματος στα ΕισεÏχόμενα';
+$labels['messagesrules'] = 'Για εισεÏχόμενα μηνÏματα που:';
+$labels['messagesactions'] = '...εκτέλεση των παÏακάτω ενεÏγειών:';
+$labels['add'] = 'ΠÏοσθήκη';
+$labels['del'] = 'ΔιαγÏαφή';
+$labels['sender'] = 'Αποστολέας';
+$labels['recipient'] = 'ΠαÏαλήπτης';
+$labels['vacationaddr'] = 'Οι e-mail διευθÏνσεις μου:';
+$labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέÏες):';
+$labels['vacationinterval'] = 'Συχνότητα αποστολής μηνυμάτων:';
+$labels['vacationreason'] = 'Σώμα μηνÏματος (λόγος απουσίας):';
+$labels['vacationfrom'] = 'ΔιεÏθυνση απάντησης στον αποστολέα:';
+$labels['vacationsubject'] = 'Θέμα μηνÏματος: ';
+$labels['days'] = 'ημέÏες';
+$labels['seconds'] = 'δευτεÏόλεπτα';
+$labels['rulestop'] = 'ΠαÏση επαλήθευσης κανόνων';
+$labels['enable'] = 'ΕνεÏγοποίηση/ΑπενεÏγοποίηση';
+$labels['filterset'] = 'ΦίλτÏα';
+$labels['filtersets'] = 'ΦίλτÏο';
+$labels['filtersetadd'] = 'ΠÏοσθήκη φίλτÏων';
+$labels['filtersetdel'] = 'ΔιαγÏαφή φίλτÏων';
+$labels['filtersetact'] = 'ΕνεÏγοποίηση φιλτÏων';
+$labels['filtersetdeact'] = 'ΑπενεÏγοποίηση φιλτÏων';
+$labels['filterdef'] = 'ΟÏισμος φιλτÏου';
+$labels['filtersetname'] = 'Ονομασία φίλτÏων';
+$labels['newfilterset'] = 'Îεα φιλτÏα';
+$labels['active'] = 'ενεÏγο';
+$labels['none'] = 'κανένα';
+$labels['fromset'] = 'από το σÏνολο ';
+$labels['fromfile'] = 'απο αÏχειο';
+$labels['filterdisabled'] = 'ΑπενεÏγοποιημενο φιλτÏο';
+$labels['countisgreaterthan'] = 'αÏίθμηση είναι μεγαλÏτεÏη από';
+$labels['countisgreaterthanequal'] = 'η μετÏηση είναι μεγαλÏτεÏη ή ίση Ï€Ïος';
+$labels['countislessthan'] = 'η μετÏηση είναι μικÏότεÏη απο';
+$labels['countislessthanequal'] = 'η μετÏηση είναι μικÏότεÏη ή ίση Ï€Ïος';
+$labels['countequals'] = 'η μέτÏηση είναι ίση Ï€Ïος ';
+$labels['countnotequals'] = 'η μέτÏηση δεν είναι ίση Ï€Ïος ';
+$labels['valueisgreaterthan'] = 'η τιμη είναι μεγαλÏτεÏη από';
+$labels['valueisgreaterthanequal'] = 'η τιμη είναι μεγαλÏτεÏη ή ίση Ï€Ïος';
+$labels['valueislessthan'] = 'η τιμη είναι μικÏότεÏη απο';
+$labels['valueislessthanequal'] = 'η τιμη είναι μικÏότεÏη ή ίση Ï€Ïος';
+$labels['valueequals'] = 'η τιμη είναι ίση με';
+$labels['valuenotequals'] = 'η τιμη δεν είναι ίση με';
+$labels['setflags'] = 'ΟÏισμός σημαίων στο μήνυμα';
+$labels['addflags'] = 'ΠÏοσθήκη σημαίων στο μήνυμα';
+$labels['removeflags'] = 'ΑφαιÏέση σημαίων από το μήνυμα';
+$labels['flagread'] = 'Αναγνωση';
+$labels['flagdeleted'] = 'ΔιεγÏαμμένο';
+$labels['flaganswered'] = 'Απαντήθηκε ';
+$labels['flagflagged'] = 'Σημειωμένο';
+$labels['flagdraft'] = 'ΠÏόχειÏα';
+$labels['setvariable'] = 'ΟÏισμός μεταβλητής';
+$labels['setvarname'] = 'Όνομα μεταβλητης:';
+$labels['setvarvalue'] = 'Τιμη μεταβλητης:';
+$labels['setvarmodifiers'] = 'ΤÏοποποιητές: ';
+$labels['varlower'] = 'ΜικÏογÏάμματη γÏαφή';
+$labels['varupper'] = 'κεφαλαία γÏάμματα ';
+$labels['varlowerfirst'] = 'Ï€Ïώτος χαÏακτήÏας πεζός ';
+$labels['varupperfirst'] = 'Ï€Ïώτος χαÏακτήÏας κεφαλαία γÏάμματα';
+$labels['varquotewildcard'] = 'παÏαθέση ειδικων χαÏακτήÏων';
+$labels['varlength'] = 'Μήκος';
+$labels['notify'] = 'Αποστολή ειδοποίησης ';
+$labels['notifytarget'] = 'ΠαÏαλήπτης ειδοποίησης:';
+$labels['notifymessage'] = 'Μήνυμα ειδοποίησης (Ï€ÏοαιÏετικά):';
+$labels['notifyoptions'] = 'Επιλογές ειδοποίησης (Ï€ÏοαιÏετικά):';
+$labels['notifyfrom'] = 'Αποστολέας ειδοποίησης (Ï€ÏοαιÏετικά):';
+$labels['notifyimportance'] = 'Σημασία: ';
+$labels['notifyimportancelow'] = 'Χαμηλή';
+$labels['notifyimportancenormal'] = 'Κανονική';
+$labels['notifyimportancehigh'] = 'Υψηλή';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Τηλέφωνο';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'ΔημιουÏγία φίλτÏου';
+$labels['usedata'] = 'ΧÏησιμοποιηση ακολουθων δεδομενων στο φιλτÏο:';
+$labels['nextstep'] = 'Επομενο βημα';
+$labels['...'] = '...';
+$labels['currdate'] = 'ΤÏέχουσα ημεÏομηνία';
+$labels['datetest'] = 'ΗμεÏομηνία';
+$labels['dateheader'] = 'επικεφαλίδα:';
+$labels['year'] = 'χÏονος';
+$labels['month'] = 'μηνας';
+$labels['day'] = 'ημεÏα';
+$labels['date'] = 'ημεÏομηνία (yyyy-mm-dd)';
+$labels['julian'] = 'ημεÏομηνία (Ιουλιανό ημ/γιο)';
+$labels['hour'] = 'ωÏα';
+$labels['minute'] = 'λεπτο';
+$labels['second'] = 'δευτεÏόλεπτο';
+$labels['time'] = 'ωÏα (hh:mm:ss)';
+$labels['iso8601'] = 'ημεÏομηνία (ISO8601)';
+$labels['std11'] = 'ημεÏομηνία (RFC2822)';
+$labels['zone'] = 'Ζώνη ÎÏας';
+$labels['weekday'] = 'ημέÏα της εβδομάδας (0-6)';
+$labels['advancedopts'] = 'ΠÏοχωÏημένες Ïυθμίσεις';
+$labels['body'] = 'Κείμενο';
+$labels['address'] = 'ΔιεÏθυνση';
+$labels['envelope'] = 'φάκελος';
+$labels['modifier'] = 'ΤÏοποποιηση: ';
+$labels['text'] = 'κειμενο';
+$labels['undecoded'] = 'αποκωδικοποιημένο (raw)';
+$labels['contenttype'] = 'ΤÏπος πεÏιεχομένου ';
+$labels['modtype'] = 'τυπος:';
+$labels['allparts'] = 'Όλα';
+$labels['domain'] = 'τομέας';
+$labels['localpart'] = 'τοπικό τμήμα ';
+$labels['user'] = 'χÏηστης';
+$labels['detail'] = 'λεπτομεÏειες';
+$labels['comparator'] = 'σÏγκÏιση:';
+$labels['default'] = 'Ï€Ïοεπιλογή';
+$labels['octet'] = 'αυστηÏή (οκτάδα) ';
+$labels['asciicasemap'] = 'πεζά ή κεφαλαία (ascii-casemap)';
+$labels['asciinumeric'] = 'αÏιθμητικό (ascii-αÏιθμητικο)';
+$labels['index'] = 'ευÏετήÏιο:';
+$labels['indexlast'] = 'Ï€Ïος τα πίσω';
+$labels['vacation'] = 'Διακοπές';
+$labels['vacation.reply'] = 'Μήνυμα απάντησης';
+$labels['vacation.advanced'] = 'ΠÏοηγμένες Ïυθμίσεις';
+$labels['vacation.from'] = 'ΔιεÏθυνση απάντησης αποστολέα';
+$labels['vacation.subject'] = 'Θέμα';
+$labels['vacation.body'] = 'Σώμα';
+$labels['vacation.start'] = 'ΈναÏξη διακοπών';
+$labels['vacation.end'] = 'Λήξη διακοπών';
+$labels['vacation.status'] = 'Κατάσταση';
+$labels['vacation.on'] = 'ΕνεÏγό';
+$labels['vacation.off'] = 'ΑνενεÏγό';
+$labels['vacation.addresses'] = 'Οι e-mail διευθÏνσεις μου';
+$labels['vacation.interval'] = 'Διάστημα απάντησης';
+$labels['vacation.after'] = 'Εισαγωγή κανόνα διακοπών μετά από';
+$labels['vacation.saving'] = 'Αποθήκευση δεδομένων...';
+$labels['vacation.action'] = 'ΕνέÏγεια εισεÏχόμενου μηνÏματος';
+$labels['vacation.keep'] = 'ΔιατήÏηση';
+$labels['vacation.discard'] = 'ΔιαγÏαφή';
+$labels['vacation.redirect'] = 'ΑνακατεÏθυνση σε';
+$labels['vacation.copy'] = 'Αποστολή αντιγÏάφου σε';
+$labels['filladdresses'] = 'ΣυμπλήÏωση με όλες τις email διευθÏνσεις μου';
+$labels['arialabelfiltersetactions'] = 'ΕνέÏγειες ομάδας φίλτÏων';
+$labels['arialabelfilteractions'] = 'ΕνέÏγειες φίλτÏων';
+$labels['arialabelfilterform'] = 'Ιδιότητες φίλτÏων';
+$labels['ariasummaryfilterslist'] = 'Λίστα φίλτÏων';
+$labels['ariasummaryfiltersetslist'] = 'Λίστα ομάδων φίλτÏων';
+$labels['filterstitle'] = 'ΕπεξεÏγασία φίλτÏων εισεÏχόμενης αλληλογÏαφίας';
+$labels['vacationtitle'] = 'ΕπεξεÏγασία κανόνα εκτός-γÏαφείου';
+$labels['message'] = 'Μήνυμα';
+$labels['duplicate'] = 'είναι διπλότυπο';
+$labels['notduplicate'] = 'δεν είναι διπλότυπο';
+$labels['duplicate.handle'] = 'λαβή:';
+$labels['duplicate.header'] = 'κεφαλίδα:';
+$labels['duplicate.uniqueid'] = 'αναγνωÏιστικό:';
+$labels['duplicate.seconds'] = 'λήξη χÏόνου (δευτεÏόλεπτα):';
+$labels['duplicate.last'] = 'σχετικό με την τελευταία εκτέλεση';
+$messages['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή';
+$messages['filterconnerror'] = 'Αδυναμία σÏνδεσης στον διακομιστή.';
+$messages['filterdeleteerror'] = 'Αδυναμία διαγÏαφής φίλτÏου. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['filterdeleted'] = 'Το φίλτÏο διαγÏάφηκε επιτυχώς.';
+$messages['filtersaved'] = 'Το φίλτÏο αποθηκεÏτηκε επιτυχώς.';
+$messages['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτÏου. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['filterformerror'] = 'Η φόÏμα των φίλτÏων πεÏιέχει σφάλματα.';
+$messages['filterdeleteconfirm'] = 'Είστε σίγουÏοι ότι θέλετε να διαγÏάψετε το επιλεγμένο φίλτÏο? ';
+$messages['ruledeleteconfirm'] = 'Θέλετε όντως να διαγÏάψετε τον επιλεγμένο κανόνα;';
+$messages['actiondeleteconfirm'] = 'Θέλετε όντως να διαγÏάψετε την επιλεγμένη ενέÏγεια;';
+$messages['forbiddenchars'] = 'Μη επιτÏεπτοί χαÏακτήÏες στο πεδίο.';
+$messages['cannotbeempty'] = 'Το πεδίο δεν μποÏεί να είναι κενό.';
+$messages['ruleexist'] = 'ΦιλτÏο με αυτο το όνομα υπάÏχει ήδη. ';
+$messages['setactivateerror'] = 'Αδυναμία ενεÏγοποίησης επιλεγμένων ομάδων φίλτÏων. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['setdeactivateerror'] = 'Αδυναμία απενεÏγοποίησης επιλεγμένων ομάδων φίλτÏων. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['setdeleteerror'] = 'Αδυναμία διαγÏαφής των επιλεγμένων ομάδων φίλτÏων. ΠÏοέκυψε σφάλμα στον διακομιστή';
+$messages['setactivated'] = 'Τα φίλτÏα ενεÏγοποιήθηκαν με επιτυχία.';
+$messages['setdeactivated'] = 'Τα φίλτÏα απενεÏγοποιήθηκαν με επιτυχία.';
+$messages['setdeleted'] = 'Τα φίλτÏα διαγÏάφηκαν επιτυχώς.';
+$messages['setdeleteconfirm'] = 'Θέλετε όντως να διαγÏάψετε τα επιλεγμένα φιλτÏα?';
+$messages['setcreateerror'] = 'Αδυναμία δημιουÏγίας ομάδας φίλτÏων. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['setcreated'] = 'Τα φιλτÏα δημιουÏγηθηκαν επιτυχως.';
+$messages['activateerror'] = 'Αδυναμία ενεÏγοποίησης επιλεγμένου φίλτÏου(ων). ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['deactivateerror'] = 'Αδυναμία απενεÏγοποίησης επιλεγμένου φίλτÏου(ων). ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['deactivated'] = 'Το φιλτÏο(α) απενεÏγοποιηθηκαν επιτυχως.';
+$messages['activated'] = 'Το φίλτÏο(α) ενεÏγοποιηθηκαν επιτυχώς.';
+$messages['moved'] = 'Το φίλτÏο μετακινηθηκε επιτυχώς.';
+$messages['moveerror'] = 'Αδυναμία μετακίνησης επιλεγμένου φίλτÏου. ΠÏοέκυψε σφάλμα στον διακομιστή.';
+$messages['nametoolong'] = 'Το όνομα είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿.';
+$messages['namereserved'] = 'Δεσμευμένο όνομα. ';
+$messages['setexist'] = 'Η ομάδα υπάÏχει ήδη. ';
+$messages['nodata'] = 'ΠÏέπει να επιλεγεί τουλάχιστον μία θέση!';
+$messages['invaliddateformat'] = 'Μη έγκυÏη ημεÏομηνία ή η ημεÏομηνία μοÏφής τμήμα';
+$messages['saveerror'] = 'ΑδÏνατη η αποθήκευση δεδομένων. ΠÏοέκυψε σφάλμα στον διακομιστή';
+$messages['vacationsaved'] = 'Τα δεδομένα διακοπών αποθηκεÏτηκαν επιτυχώς.';
+$messages['emptyvacationbody'] = 'Απαιτείται κείμενο για το μήνυμα διακοπών!';
+$messages['duplicate.conflict.err'] = 'Το μοναδικό αναγνωÏιστικό και το αναγνωÏιστικό κεφαλίδας δεν επιτÏέπονται.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,207 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filters';
+$labels['managefilters'] = 'Manage incoming mail filters';
+$labels['filtername'] = 'Filter name';
+$labels['newfilter'] = 'New filter';
+$labels['filteradd'] = 'Add filter';
+$labels['filterdel'] = 'Delete filter';
+$labels['moveup'] = 'Move up';
+$labels['movedown'] = 'Move down';
+$labels['filterallof'] = 'matching all of the following rules';
+$labels['filteranyof'] = 'matching any of the following rules';
+$labels['filterany'] = 'all messages';
+$labels['filtercontains'] = 'contains';
+$labels['filternotcontains'] = 'not contains';
+$labels['filteris'] = 'is equal to';
+$labels['filterisnot'] = 'is not equal to';
+$labels['filterexists'] = 'exists';
+$labels['filternotexists'] = 'not exists';
+$labels['filtermatches'] = 'matches expression';
+$labels['filternotmatches'] = 'not matches expression';
+$labels['filterregex'] = 'matches regular expression';
+$labels['filternotregex'] = 'not matches regular expression';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Add rule';
+$labels['delrule'] = 'Delete rule';
+$labels['messagemoveto'] = 'Move message to';
+$labels['messageredirect'] = 'Redirect message to';
+$labels['messagecopyto'] = 'Copy message to';
+$labels['messagesendcopy'] = 'Send message copy to';
+$labels['messagereply'] = 'Reply with message';
+$labels['messagedelete'] = 'Delete message';
+$labels['messagediscard'] = 'Discard with message';
+$labels['messagekeep'] = 'Keep message in Inbox';
+$labels['messagesrules'] = 'For incoming mail:';
+$labels['messagesactions'] = '...execute the following actions:';
+$labels['add'] = 'Add';
+$labels['del'] = 'Delete';
+$labels['sender'] = 'Sender';
+$labels['recipient'] = 'Recipient';
+$labels['vacationdays'] = 'How often send messages (in days):';
+$labels['vacationinterval'] = 'How often send messages:';
+$labels['vacationreason'] = 'Message body (vacation reason):';
+$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
+$labels['rulestop'] = 'Stop evaluating rules';
+$labels['enable'] = 'Enable/Disable';
+$labels['filterset'] = 'Filters set';
+$labels['filtersets'] = 'Filter sets';
+$labels['filtersetadd'] = 'Add filters set';
+$labels['filtersetdel'] = 'Delete current filters set';
+$labels['filtersetact'] = 'Activate current filters set';
+$labels['filtersetdeact'] = 'Deactivate current filters set';
+$labels['filterdef'] = 'Filter definition';
+$labels['filtersetname'] = 'Filters set name';
+$labels['newfilterset'] = 'New filters set';
+$labels['active'] = 'active';
+$labels['none'] = 'none';
+$labels['fromset'] = 'from set';
+$labels['fromfile'] = 'from file';
+$labels['filterdisabled'] = 'Filter disabled';
+$labels['countisgreaterthan'] = 'count is greater than';
+$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
+$labels['countislessthan'] = 'count is less than';
+$labels['countislessthanequal'] = 'count is less than or equal to';
+$labels['countequals'] = 'count is equal to';
+$labels['countnotequals'] = 'count is not equal to';
+$labels['valueisgreaterthan'] = 'value is greater than';
+$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
+$labels['valueislessthan'] = 'value is less than';
+$labels['valueislessthanequal'] = 'value is less than or equal to';
+$labels['valueequals'] = 'value is equal to';
+$labels['valuenotequals'] = 'value is not equal to';
+$labels['setflags'] = 'Set flags to the message';
+$labels['addflags'] = 'Add flags to the message';
+$labels['removeflags'] = 'Remove flags from the message';
+$labels['flagread'] = 'Read';
+$labels['flagdeleted'] = 'Deleted';
+$labels['flaganswered'] = 'Answered';
+$labels['flagflagged'] = 'Flagged';
+$labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
+$labels['varlower'] = 'lower-case';
+$labels['varupper'] = 'upper-case';
+$labels['varlowerfirst'] = 'first character lower-case';
+$labels['varupperfirst'] = 'first character upper-case';
+$labels['varquotewildcard'] = 'quote special characters';
+$labels['varlength'] = 'length';
+$labels['notify'] = 'Send notification';
+$labels['notifytarget'] = 'Notification target:';
+$labels['notifymessage'] = 'Notification message (optional):';
+$labels['notifyoptions'] = 'Notification options (optional):';
+$labels['notifyfrom'] = 'Notification sender (optional):';
+$labels['notifyimportance'] = 'Importance:';
+$labels['notifyimportancelow'] = 'low';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'high';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Phone';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Create filter';
+$labels['usedata'] = 'Use following data in the filter:';
+$labels['nextstep'] = 'Next Step';
+$labels['...'] = '...';
+$labels['currdate'] = 'Current date';
+$labels['datetest'] = 'Date';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'year';
+$labels['month'] = 'month';
+$labels['day'] = 'day';
+$labels['date'] = 'date (yyyy-mm-dd)';
+$labels['julian'] = 'date (julian)';
+$labels['hour'] = 'hour';
+$labels['minute'] = 'minute';
+$labels['second'] = 'second';
+$labels['time'] = 'time (hh:mm:ss)';
+$labels['iso8601'] = 'date (ISO8601)';
+$labels['std11'] = 'date (RFC2822)';
+$labels['zone'] = 'time-zone';
+$labels['weekday'] = 'weekday (0-6)';
+$labels['advancedopts'] = 'Advanced options';
+$labels['body'] = 'Body';
+$labels['address'] = 'address';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'modifier:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'undecoded (raw)';
+$labels['contenttype'] = 'content type';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'all';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'local part';
+$labels['user'] = 'user';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'comparator:';
+$labels['default'] = 'default';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
+$messages['filterunknownerror'] = 'Unknown server error.';
+$messages['filterconnerror'] = 'Unable to connect to server.';
+$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
+$messages['filterdeleted'] = 'Filter deleted successfully.';
+$messages['filtersaved'] = 'Filter saved successfully.';
+$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
+$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
+$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
+$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
+$messages['forbiddenchars'] = 'Forbidden characters in field.';
+$messages['cannotbeempty'] = 'Field cannot be empty.';
+$messages['ruleexist'] = 'Filter with specified name already exists.';
+$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occurred.';
+$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occurred.';
+$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occurred.';
+$messages['setactivated'] = 'Filters set activated successfully.';
+$messages['setdeactivated'] = 'Filters set deactivated successfully.';
+$messages['setdeleted'] = 'Filters set deleted successfully.';
+$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
+$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
+$messages['setcreated'] = 'Filters set created successfully.';
+$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
+$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
+$messages['deactivated'] = 'Filter(s) disabled successfully.';
+$messages['activated'] = 'Filter(s) enabled successfully.';
+$messages['moved'] = 'Filter moved successfully.';
+$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
+$messages['nametoolong'] = 'Name too long.';
+$messages['namereserved'] = 'Reserved name.';
+$messages['setexist'] = 'Set already exists.';
+$messages['nodata'] = 'At least one position must be selected!';
+$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filters';
+$labels['managefilters'] = 'Manage incoming mail filters';
+$labels['filtername'] = 'Filter name';
+$labels['newfilter'] = 'New filter';
+$labels['filteradd'] = 'Add filter';
+$labels['filterdel'] = 'Delete filter';
+$labels['moveup'] = 'Move up';
+$labels['movedown'] = 'Move down';
+$labels['filterallof'] = 'matching all of the following rules';
+$labels['filteranyof'] = 'matching any of the following rules';
+$labels['filterany'] = 'all messages';
+$labels['filtercontains'] = 'contains';
+$labels['filternotcontains'] = 'not contains';
+$labels['filteris'] = 'is equal to';
+$labels['filterisnot'] = 'is not equal to';
+$labels['filterexists'] = 'exists';
+$labels['filternotexists'] = 'not exists';
+$labels['filtermatches'] = 'matches expression';
+$labels['filternotmatches'] = 'not matches expression';
+$labels['filterregex'] = 'matches regular expression';
+$labels['filternotregex'] = 'not matches regular expression';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Add rule';
+$labels['delrule'] = 'Delete rule';
+$labels['messagemoveto'] = 'Move message to';
+$labels['messageredirect'] = 'Redirect message to';
+$labels['messagecopyto'] = 'Copy message to';
+$labels['messagesendcopy'] = 'Send message copy to';
+$labels['messagereply'] = 'Reply with message';
+$labels['messagedelete'] = 'Delete message';
+$labels['messagediscard'] = 'Discard with message';
+$labels['messagekeep'] = 'Keep message in Inbox';
+$labels['messagesrules'] = 'For incoming mail:';
+$labels['messagesactions'] = '...execute the following actions:';
+$labels['add'] = 'Add';
+$labels['del'] = 'Delete';
+$labels['sender'] = 'Sender';
+$labels['recipient'] = 'Recipient';
+$labels['vacationaddr'] = 'My e-mail addresses:';
+$labels['vacationdays'] = 'How often send messages (in days):';
+$labels['vacationinterval'] = 'How often send messages:';
+$labels['vacationreason'] = 'Message body (vacation reason):';
+$labels['vacationfrom'] = 'Reply sender address:';
+$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
+$labels['rulestop'] = 'Stop evaluating rules';
+$labels['enable'] = 'Enable/Disable';
+$labels['filterset'] = 'Filters set';
+$labels['filtersets'] = 'Filter sets';
+$labels['filtersetadd'] = 'Add filters set';
+$labels['filtersetdel'] = 'Delete current filters set';
+$labels['filtersetact'] = 'Activate current filters set';
+$labels['filtersetdeact'] = 'Deactivate current filters set';
+$labels['filterseteditraw'] = 'Edit filter set';
+$labels['filterdef'] = 'Filter definition';
+$labels['filtersetname'] = 'Filters set name';
+$labels['newfilterset'] = 'New filters set';
+$labels['active'] = 'active';
+$labels['none'] = 'none';
+$labels['fromset'] = 'from set';
+$labels['fromfile'] = 'from file';
+$labels['filterdisabled'] = 'Filter disabled';
+$labels['countisgreaterthan'] = 'count is greater than';
+$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
+$labels['countislessthan'] = 'count is less than';
+$labels['countislessthanequal'] = 'count is less than or equal to';
+$labels['countequals'] = 'count is equal to';
+$labels['countnotequals'] = 'count is not equal to';
+$labels['valueisgreaterthan'] = 'value is greater than';
+$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
+$labels['valueislessthan'] = 'value is less than';
+$labels['valueislessthanequal'] = 'value is less than or equal to';
+$labels['valueequals'] = 'value is equal to';
+$labels['valuenotequals'] = 'value is not equal to';
+$labels['setflags'] = 'Set flags to the message';
+$labels['addflags'] = 'Add flags to the message';
+$labels['removeflags'] = 'Remove flags from the message';
+$labels['flagread'] = 'Read';
+$labels['flagdeleted'] = 'Deleted';
+$labels['flaganswered'] = 'Answered';
+$labels['flagflagged'] = 'Flagged';
+$labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
+$labels['varlower'] = 'lower-case';
+$labels['varupper'] = 'upper-case';
+$labels['varlowerfirst'] = 'first character lower-case';
+$labels['varupperfirst'] = 'first character upper-case';
+$labels['varquotewildcard'] = 'quote special characters';
+$labels['varlength'] = 'length';
+$labels['notify'] = 'Send notification';
+$labels['notifytarget'] = 'Notification target:';
+$labels['notifymessage'] = 'Notification message (optional):';
+$labels['notifyoptions'] = 'Notification options (optional):';
+$labels['notifyfrom'] = 'Notification sender (optional):';
+$labels['notifyimportance'] = 'Importance:';
+$labels['notifyimportancelow'] = 'low';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'high';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Phone';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Create filter';
+$labels['usedata'] = 'Use following data in the filter:';
+$labels['nextstep'] = 'Next Step';
+$labels['...'] = '...';
+$labels['string'] = 'String';
+$labels['currdate'] = 'Current date';
+$labels['datetest'] = 'Date';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'year';
+$labels['month'] = 'month';
+$labels['day'] = 'day';
+$labels['date'] = 'date (yyyy-mm-dd)';
+$labels['julian'] = 'date (julian)';
+$labels['hour'] = 'hour';
+$labels['minute'] = 'minute';
+$labels['second'] = 'second';
+$labels['time'] = 'time (hh:mm:ss)';
+$labels['iso8601'] = 'date (ISO8601)';
+$labels['std11'] = 'date (RFC2822)';
+$labels['zone'] = 'time-zone';
+$labels['weekday'] = 'weekday (0-6)';
+$labels['advancedopts'] = 'Advanced options';
+$labels['body'] = 'Body';
+$labels['address'] = 'address';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'modifier:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'undecoded (raw)';
+$labels['contenttype'] = 'content type';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'all';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'local part';
+$labels['user'] = 'user';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'comparator:';
+$labels['default'] = 'default';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.from'] = 'Reply sender address';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.start'] = 'Vacation start';
+$labels['vacation.end'] = 'Vacation end';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'My e-mail addresses';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
+$labels['vacation.action'] = 'Incoming message action';
+$labels['vacation.keep'] = 'Keep';
+$labels['vacation.discard'] = 'Discard';
+$labels['vacation.redirect'] = 'Redirect to';
+$labels['vacation.copy'] = 'Send copy to';
+$labels['filladdresses'] = 'Fill with all my addresses';
+$labels['arialabelfiltersetactions'] = 'Filter set actions';
+$labels['arialabelfilteractions'] = 'Filter actions';
+$labels['arialabelfilterform'] = 'Filter properties';
+$labels['ariasummaryfilterslist'] = 'List of filters';
+$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
+$labels['filterstitle'] = 'Edit incoming mail filters';
+$labels['vacationtitle'] = 'Edit out-of-office rule';
+$labels['message'] = 'Message';
+$labels['duplicate'] = 'is duplicate';
+$labels['notduplicate'] = 'is not duplicate';
+$labels['duplicate.handle'] = 'handle:';
+$labels['duplicate.header'] = 'header:';
+$labels['duplicate.uniqueid'] = 'identifier:';
+$labels['duplicate.seconds'] = 'timeout (seconds):';
+$labels['duplicate.last'] = 'relative to the last execution';
+$messages['filterunknownerror'] = 'Unknown server error';
+$messages['filterconnerror'] = 'Unable to connect to managesieve server';
+$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
+$messages['filterdeleted'] = 'Filter deleted successfully';
+$messages['filtersaved'] = 'Filter saved successfully';
+$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
+$messages['filterformerror'] = 'Filter form contains errors.';
+$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
+$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
+$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
+$messages['forbiddenchars'] = 'Forbidden characters in field';
+$messages['cannotbeempty'] = 'Field cannot be empty';
+$messages['ruleexist'] = 'Filter with specified name already exists.';
+$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occurred.';
+$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occurred.';
+$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occurred.';
+$messages['setactivated'] = 'Filters set activated successfully.';
+$messages['setdeactivated'] = 'Filters set deactivated successfully.';
+$messages['setdeleted'] = 'Filters set deleted successfully.';
+$messages['setupdated'] = 'Filters set updated successfully.';
+$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
+$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
+$messages['setcreated'] = 'Filters set created successfully.';
+$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
+$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
+$messages['deactivated'] = 'Filter(s) disabled successfully.';
+$messages['activated'] = 'Filter(s) enabled successfully.';
+$messages['moved'] = 'Filter moved successfully.';
+$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
+$messages['nametoolong'] = 'Name too long.';
+$messages['namereserved'] = 'Reserved name.';
+$messages['setexist'] = 'Set already exists.';
+$messages['nodata'] = 'At least one position must be selected!';
+$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
+$messages['emptyvacationbody'] = 'Body of vacation message is required!';
+$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,245 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+
+
+$labels['filters'] = 'Filters';
+$labels['managefilters'] = 'Manage incoming mail filters';
+$labels['filtername'] = 'Filter name';
+$labels['newfilter'] = 'New filter';
+$labels['filteradd'] = 'Add filter';
+$labels['filterdel'] = 'Delete filter';
+$labels['moveup'] = 'Move up';
+$labels['movedown'] = 'Move down';
+$labels['filterallof'] = 'matching all of the following rules';
+$labels['filteranyof'] = 'matching any of the following rules';
+$labels['filterany'] = 'all messages';
+$labels['filtercontains'] = 'contains';
+$labels['filternotcontains'] = 'not contains';
+$labels['filteris'] = 'is equal to';
+$labels['filterisnot'] = 'is not equal to';
+$labels['filterexists'] = 'exists';
+$labels['filternotexists'] = 'not exists';
+$labels['filtermatches'] = 'matches expression';
+$labels['filternotmatches'] = 'not matches expression';
+$labels['filterregex'] = 'matches regular expression';
+$labels['filternotregex'] = 'not matches regular expression';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Add rule';
+$labels['delrule'] = 'Delete rule';
+$labels['messagemoveto'] = 'Move message to';
+$labels['messageredirect'] = 'Redirect message to';
+$labels['messagecopyto'] = 'Copy message to';
+$labels['messagesendcopy'] = 'Send message copy to';
+$labels['messagereply'] = 'Reply with message';
+$labels['messagedelete'] = 'Delete message';
+$labels['messagediscard'] = 'Discard with message';
+$labels['messagekeep'] = 'Keep message in Inbox';
+$labels['messagesrules'] = 'For incoming mail:';
+$labels['messagesactions'] = '...execute the following actions:';
+$labels['add'] = 'Add';
+$labels['del'] = 'Delete';
+$labels['sender'] = 'Sender';
+$labels['recipient'] = 'Recipient';
+$labels['vacationaddr'] = 'My e-mail addresses:';
+$labels['vacationdays'] = 'How often send messages (in days):';
+$labels['vacationinterval'] = 'How often send messages:';
+$labels['vacationreason'] = 'Message body (vacation reason):';
+$labels['vacationfrom'] = 'Reply sender address:';
+$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
+$labels['rulestop'] = 'Stop evaluating rules';
+$labels['enable'] = 'Enable/Disable';
+$labels['filterset'] = 'Filters set';
+$labels['filtersets'] = 'Filter sets';
+$labels['filtersetadd'] = 'Add filters set';
+$labels['filtersetdel'] = 'Delete current filters set';
+$labels['filtersetact'] = 'Activate current filters set';
+$labels['filtersetdeact'] = 'Deactivate current filters set';
+$labels['filterseteditraw'] = 'Edit filter set';
+$labels['filterdef'] = 'Filter definition';
+$labels['filtersetname'] = 'Filters set name';
+$labels['newfilterset'] = 'New filters set';
+$labels['active'] = 'active';
+$labels['none'] = 'none';
+$labels['fromset'] = 'from set';
+$labels['fromfile'] = 'from file';
+$labels['filterdisabled'] = 'Filter disabled';
+$labels['countisgreaterthan'] = 'count is greater than';
+$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
+$labels['countislessthan'] = 'count is less than';
+$labels['countislessthanequal'] = 'count is less than or equal to';
+$labels['countequals'] = 'count is equal to';
+$labels['countnotequals'] = 'count is not equal to';
+$labels['valueisgreaterthan'] = 'value is greater than';
+$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
+$labels['valueislessthan'] = 'value is less than';
+$labels['valueislessthanequal'] = 'value is less than or equal to';
+$labels['valueequals'] = 'value is equal to';
+$labels['valuenotequals'] = 'value is not equal to';
+$labels['setflags'] = 'Set flags to the message';
+$labels['addflags'] = 'Add flags to the message';
+$labels['removeflags'] = 'Remove flags from the message';
+$labels['flagread'] = 'Read';
+$labels['flagdeleted'] = 'Deleted';
+$labels['flaganswered'] = 'Answered';
+$labels['flagflagged'] = 'Flagged';
+$labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
+$labels['varlower'] = 'lower-case';
+$labels['varupper'] = 'upper-case';
+$labels['varlowerfirst'] = 'first character lower-case';
+$labels['varupperfirst'] = 'first character upper-case';
+$labels['varquotewildcard'] = 'quote special characters';
+$labels['varlength'] = 'length';
+$labels['notify'] = 'Send notification';
+$labels['notifytarget'] = 'Notification target:';
+$labels['notifymessage'] = 'Notification message (optional):';
+$labels['notifyoptions'] = 'Notification options (optional):';
+$labels['notifyfrom'] = 'Notification sender (optional):';
+$labels['notifyimportance'] = 'Importance:';
+$labels['notifyimportancelow'] = 'low';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'high';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Phone';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Create filter';
+$labels['usedata'] = 'Use following data in the filter:';
+$labels['nextstep'] = 'Next Step';
+$labels['...'] = '...';
+$labels['string'] = 'String';
+$labels['currdate'] = 'Current date';
+$labels['datetest'] = 'Date';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'year';
+$labels['month'] = 'month';
+$labels['day'] = 'day';
+$labels['date'] = 'date (yyyy-mm-dd)';
+$labels['julian'] = 'date (julian)';
+$labels['hour'] = 'hour';
+$labels['minute'] = 'minute';
+$labels['second'] = 'second';
+$labels['time'] = 'time (hh:mm:ss)';
+$labels['iso8601'] = 'date (ISO8601)';
+$labels['std11'] = 'date (RFC2822)';
+$labels['zone'] = 'time-zone';
+$labels['weekday'] = 'weekday (0-6)';
+$labels['advancedopts'] = 'Advanced options';
+$labels['body'] = 'Body';
+$labels['address'] = 'address';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'modifier:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'undecoded (raw)';
+$labels['contenttype'] = 'content type';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'all';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'local part';
+$labels['user'] = 'user';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'comparator:';
+$labels['default'] = 'default';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.from'] = 'Reply sender address';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.start'] = 'Vacation start';
+$labels['vacation.end'] = 'Vacation end';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'My e-mail addresses';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
+$labels['vacation.action'] = 'Incoming message action';
+$labels['vacation.keep'] = 'Keep';
+$labels['vacation.discard'] = 'Discard';
+$labels['vacation.redirect'] = 'Redirect to';
+$labels['vacation.copy'] = 'Send copy to';
+$labels['filladdresses'] = 'Fill with all my addresses';
+$labels['arialabelfiltersetactions'] = 'Filter set actions';
+$labels['arialabelfilteractions'] = 'Filter actions';
+$labels['arialabelfilterform'] = 'Filter properties';
+$labels['ariasummaryfilterslist'] = 'List of filters';
+$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
+$labels['filterstitle'] = 'Edit incoming mail filters';
+$labels['vacationtitle'] = 'Edit out-of-office rule';
+$labels['message'] = 'Message';
+$labels['duplicate'] = 'is duplicate';
+$labels['notduplicate'] = 'is not duplicate';
+$labels['duplicate.handle'] = 'handle:';
+$labels['duplicate.header'] = 'header:';
+$labels['duplicate.uniqueid'] = 'identifier:';
+$labels['duplicate.seconds'] = 'timeout (seconds):';
+$labels['duplicate.last'] = 'relative to the last execution';
+
+$messages = array();
+$messages['filterunknownerror'] = 'Unknown server error.';
+$messages['filterconnerror'] = 'Unable to connect to server.';
+$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
+$messages['filterdeleted'] = 'Filter deleted successfully.';
+$messages['filtersaved'] = 'Filter saved successfully.';
+$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
+$messages['filterformerror'] = 'Filter form contains errors.';
+$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
+$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
+$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
+$messages['forbiddenchars'] = 'Forbidden characters in field.';
+$messages['cannotbeempty'] = 'Field cannot be empty.';
+$messages['ruleexist'] = 'Filter with specified name already exists.';
+$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occurred.';
+$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occurred.';
+$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occurred.';
+$messages['setactivated'] = 'Filters set activated successfully.';
+$messages['setdeactivated'] = 'Filters set deactivated successfully.';
+$messages['setdeleted'] = 'Filters set deleted successfully.';
+$messages['setupdated'] = 'Filters set updated successfully.';
+$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
+$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
+$messages['setcreated'] = 'Filters set created successfully.';
+$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
+$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
+$messages['deactivated'] = 'Filter(s) disabled successfully.';
+$messages['activated'] = 'Filter(s) enabled successfully.';
+$messages['moved'] = 'Filter moved successfully.';
+$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
+$messages['nametoolong'] = 'Name too long.';
+$messages['namereserved'] = 'Reserved name.';
+$messages['setexist'] = 'Set already exists.';
+$messages['nodata'] = 'At least one position must be selected!';
+$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
+$messages['emptyvacationbody'] = 'Body of vacation message is required!';
+$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtriloj';
+$labels['managefilters'] = 'Mastrumi filtrilojn pri enirantaj mesaÄoj';
+$labels['filtername'] = 'Nomo de filtrilo';
+$labels['newfilter'] = 'Nova filtrilo';
+$labels['filteradd'] = 'Aldoni filtrilon';
+$labels['filterdel'] = 'Forigi filtrilon';
+$labels['moveup'] = 'Movi supren';
+$labels['movedown'] = 'Movi malsupren';
+$labels['filterany'] = 'ĉiuj mesaÄoj';
+$labels['filtercontains'] = 'enhavas';
+$labels['filternotcontains'] = 'ne enhavas';
+$labels['filteris'] = 'egalas al';
+$labels['filterisnot'] = 'ne egalas al';
+$labels['filterexists'] = 'ekzistas';
+$labels['filternotexists'] = 'ne ekzistas';
+$labels['filtermatches'] = 'kongruas esprimon';
+$labels['filternotmatches'] = 'ne kongruas esprimon';
+$labels['filterregex'] = 'kongruas regularan esprimon';
+$labels['filternotregex'] = 'ne kongruas regularan esprimon';
+$labels['filterunder'] = 'sub';
+$labels['filterover'] = 'preter';
+$labels['addrule'] = 'Aldoni regulon';
+$labels['delrule'] = 'Forigi regulon';
+$labels['messagemoveto'] = 'Movi mesaÄon al';
+$labels['messageredirect'] = 'Aidirekti mesaÄon al';
+$labels['messagecopyto'] = 'Kopii mesaÄo en';
+$labels['messagesendcopy'] = 'Sendi kopion de mesaÄo al';
+$labels['messagereply'] = 'Respondi per mesaÄo';
+$labels['messagedelete'] = 'Forigi mesaÄon';
+$labels['add'] = 'Aldoni';
+$labels['del'] = 'Forigi';
+$labels['sender'] = 'Sendanto';
+$labels['recipient'] = 'Ricevanto';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,222 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Administrar filtros de correos entrantes';
+$labels['filtername'] = 'Nombre del filtro';
+$labels['newfilter'] = 'Filtro nuevo';
+$labels['filteradd'] = 'Agregar filtro';
+$labels['filterdel'] = 'Eliminar filtro';
+$labels['moveup'] = 'Mover hacia arriba';
+$labels['movedown'] = 'Mover hacia abajo';
+$labels['filterallof'] = 'coincide con todas las reglas siguientes';
+$labels['filteranyof'] = 'coincide con cualquiera de las reglas siguientes';
+$labels['filterany'] = 'todos los mensajes';
+$labels['filtercontains'] = 'contiene';
+$labels['filternotcontains'] = 'no contiene';
+$labels['filteris'] = 'es igual a';
+$labels['filterisnot'] = 'no es igual a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'no existe';
+$labels['filtermatches'] = 'coincide con la expresión';
+$labels['filternotmatches'] = 'no coincide con la expresión';
+$labels['filterregex'] = 'coincide con la expresión regular';
+$labels['filternotregex'] = 'no coincide con la expresión regular';
+$labels['filterunder'] = 'bajo';
+$labels['filterover'] = 'sobre';
+$labels['addrule'] = 'Agregar regla';
+$labels['delrule'] = 'Eliminar regla';
+$labels['messagemoveto'] = 'Mover mensaje a';
+$labels['messageredirect'] = 'Redireccionar mensaje a';
+$labels['messagecopyto'] = 'Copiar mensaje a';
+$labels['messagesendcopy'] = 'Enviar una copia del mensaje a ';
+$labels['messagereply'] = 'Responder con el mensaje';
+$labels['messagedelete'] = 'Eliminar mensaje';
+$labels['messagediscard'] = 'Descartar el mensaje';
+$labels['messagekeep'] = 'Mantener mensaje en la bandeja de entrada';
+$labels['messagesrules'] = 'Para correo entrante:';
+$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
+$labels['add'] = 'Agregar';
+$labels['del'] = 'Eliminar';
+$labels['sender'] = 'Remitente';
+$labels['recipient'] = 'Destinatario';
+$labels['vacationdays'] = 'Cuan a menudo enviar mensajes (en días):';
+$labels['vacationinterval'] = '¿Con qué frecuencia enviar mensajes?:';
+$labels['vacationreason'] = 'Cuerpo del mensaje (motivo de las vacaciones):';
+$labels['vacationsubject'] = 'Asunto del mensaje:';
+$labels['days'] = 'días';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Detener la evaluación de reglas';
+$labels['enable'] = 'Habilitar/Deshabilitar';
+$labels['filterset'] = 'Set de filtros';
+$labels['filtersets'] = 'Filtro acciona';
+$labels['filtersetadd'] = 'Agregar set de filtros';
+$labels['filtersetdel'] = 'Eliminar set de filtros actual';
+$labels['filtersetact'] = 'Activar set de filtros actual';
+$labels['filtersetdeact'] = 'Desactivar set de filtros actual';
+$labels['filterdef'] = 'Definición del filtro';
+$labels['filtersetname'] = 'Nombre del set de filtros';
+$labels['newfilterset'] = 'Nuevo set de filtros';
+$labels['active'] = 'activo';
+$labels['none'] = 'ninguno';
+$labels['fromset'] = 'desde set';
+$labels['fromfile'] = 'desde archivo';
+$labels['filterdisabled'] = 'filtro deshabilitado';
+$labels['countisgreaterthan'] = 'la cuenta es mayor a';
+$labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a ';
+$labels['countislessthan'] = 'la cuenta es menor que';
+$labels['countislessthanequal'] = 'la cuenta es menor o igual que';
+$labels['countequals'] = 'la cuenta es igual a ';
+$labels['countnotequals'] = 'la cuenta no es menor a';
+$labels['valueisgreaterthan'] = 'el valor es mayor que';
+$labels['valueisgreaterthanequal'] = 'el balor es mayor o igual que ';
+$labels['valueislessthan'] = 'el valor es menor que ';
+$labels['valueislessthanequal'] = 'el valor es menor o igual que ';
+$labels['valueequals'] = 'el valor es igual a ';
+$labels['valuenotequals'] = 'el valor no es igual a';
+$labels['setflags'] = 'Colocar etiquetas al mensaje';
+$labels['addflags'] = 'Agrega etiquetas al mensaje';
+$labels['removeflags'] = 'Eliminar etiquetas al mensaje';
+$labels['flagread'] = 'Leido';
+$labels['flagdeleted'] = 'Eliminado';
+$labels['flaganswered'] = 'Respondido';
+$labels['flagflagged'] = 'Etiquetado';
+$labels['flagdraft'] = 'Borrador';
+$labels['setvariable'] = 'Establecer variable';
+$labels['setvarname'] = 'Nombre de la variable:';
+$labels['setvarvalue'] = 'Valor de la variable:';
+$labels['setvarmodifiers'] = 'Modificadores:';
+$labels['varlower'] = 'minúscula';
+$labels['varupper'] = 'mayúscula';
+$labels['varlowerfirst'] = 'primer carácter en minúscula';
+$labels['varupperfirst'] = 'primer carácter en mayúscula';
+$labels['varquotewildcard'] = 'citar carácteres especiales';
+$labels['varlength'] = 'largo';
+$labels['notify'] = 'Enviar notificación';
+$labels['notifytarget'] = 'Destinatario de la notificación:';
+$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
+$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
+$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
+$labels['notifyimportance'] = 'Importancia:';
+$labels['notifyimportancelow'] = 'baja';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correo electrónico';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'Mensaje de texto';
+$labels['filtercreate'] = 'Crear filtro';
+$labels['usedata'] = 'Usar los datos siguientes en el filtro:';
+$labels['nextstep'] = 'Paso siguiente';
+$labels['...'] = '...';
+$labels['currdate'] = 'Fecha actual';
+$labels['datetest'] = 'Fecha';
+$labels['dateheader'] = 'encabezado:';
+$labels['year'] = 'año';
+$labels['month'] = 'mes';
+$labels['day'] = 'día';
+$labels['date'] = 'fecha(aaaa-mm-dd)';
+$labels['julian'] = 'fecha (julian)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'fecha (ISO8601)';
+$labels['std11'] = 'fecha (RFC2822)';
+$labels['zone'] = 'zona horaria';
+$labels['weekday'] = 'día de la semana (0-6)';
+$labels['advancedopts'] = 'Opciones avanzadas';
+$labels['body'] = 'Cuerpo';
+$labels['address'] = 'dirección';
+$labels['envelope'] = 'sobre';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'decodificado (crudo)';
+$labels['contenttype'] = 'tipo de contenido';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todo';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'usuario';
+$labels['detail'] = 'detalle';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'predeterminado';
+$labels['octet'] = 'estricto (octeto)';
+$labels['asciicasemap'] = 'no sensible a mayúsculas y minúsculas (mapero-ascii)';
+$labels['asciinumeric'] = 'numérico (ascii-numérico)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'hacia atrás';
+$labels['vacation'] = 'Vacaciones';
+$labels['vacation.reply'] = 'Responder mensaje';
+$labels['vacation.advanced'] = 'Opciones avanzadas';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Cuerpo';
+$labels['vacation.start'] = 'Inicio de vacaciones';
+$labels['vacation.end'] = 'Final de vacaciones';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Encendido';
+$labels['vacation.off'] = 'Apagado';
+$labels['vacation.interval'] = 'Intervalo de respuesta';
+$labels['vacation.after'] = 'Colocar regla de vacaciones luego';
+$labels['vacation.saving'] = 'Guardando información...';
+$labels['vacation.action'] = 'Acción para mensaje entrante';
+$labels['vacation.keep'] = 'Mantener';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redireccionar a';
+$labels['vacation.copy'] = 'Enviar una copia a';
+$labels['arialabelfiltersetactions'] = 'Acciones del set de filtros';
+$labels['arialabelfilteractions'] = 'Acciones de filtros';
+$labels['arialabelfilterform'] = 'Propiedades de filtros';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de set de filtros';
+$labels['filterstitle'] = 'Administrar filtros de correos entrantes';
+$labels['vacationtitle'] = 'Editar regla de fuera de oficina';
+$messages['filterunknownerror'] = 'Error de servidor desconocido.';
+$messages['filterconnerror'] = 'No se puede conectar al servidor.';
+$messages['filterdeleteerror'] = 'No se puede eliminar el filtro. Ocurrió un error de servidor.';
+$messages['filterdeleted'] = 'Filtro eliminado exitosamente.';
+$messages['filtersaved'] = 'Filtro guardado exitosamente.';
+$messages['filtersaveerror'] = 'No es posible guardar el filtro. Ha ocurrido un error de servidor.';
+$messages['filterdeleteconfirm'] = '¿Estás seguro que quieres eliminar el filtro seleccionado?';
+$messages['ruledeleteconfirm'] = '¿Estás seguro que quieres eliminar la regla seleccionada?';
+$messages['actiondeleteconfirm'] = '¿Estás seguro que queires eliminar la acción seleccionada?';
+$messages['forbiddenchars'] = 'Carácteres ilegales en el campo.';
+$messages['cannotbeempty'] = 'El campo no puede estar vacio.';
+$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
+$messages['setactivateerror'] = 'No es posible activar el set de filtros seleccionado. Ha ocurrido un error de servidor.';
+$messages['setdeactivateerror'] = 'No es posible desactivar el set de filtros selecciona. Ha ocurrido un error de servidor.';
+$messages['setdeleteerror'] = 'No es posible eliminar el set de filtros seleccionado. Ha ocurrido un error de servidor.';
+$messages['setactivated'] = 'Set de filtros activado exitosamente.';
+$messages['setdeactivated'] = 'Set de filtros desactivado exitosamente.';
+$messages['setdeleted'] = 'Set de filtroseliminado exitosamente.';
+$messages['setdeleteconfirm'] = '¿Estas seguro que deseas eliminar el set de filtros seleccionado?';
+$messages['setcreateerror'] = 'No es posible crear el set de filtros. Ha ocurrido un error de servidor.';
+$messages['setcreated'] = 'Set de filtros creado exitosamente.';
+$messages['activateerror'] = 'No es posible habilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
+$messages['deactivateerror'] = 'No es posible deshabilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
+$messages['deactivated'] = 'Filtro(s) deshabilitado(s) exitosamente.';
+$messages['activated'] = 'Filtro(s) habilitado(s) exitosamente.';
+$messages['moved'] = 'Filtro movido exitosamente.';
+$messages['moveerror'] = 'No es posible mover los filtros seleccionados. Ha ocurrido un error de servidor.';
+$messages['nametoolong'] = 'Nombre demasiado largo.';
+$messages['namereserved'] = 'Nombre reservado.';
+$messages['setexist'] = 'Set ya existe.';
+$messages['nodata'] = 'Debes seleccionar al menos una posición.';
+$messages['invaliddateformat'] = 'Fecha o parte del formato no válido';
+$messages['saveerror'] = 'No es posible guardar la información. Ha ocurrido un error de servidor.';
+$messages['vacationsaved'] = 'Información de vacaciones guardada exitosamente.';
+$messages['emptyvacationbody'] = 'Cuerpo del mensaje de vacaciones es requerido!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,222 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Administrar filtros de correo entrante';
+$labels['filtername'] = 'Nombre del filtro';
+$labels['newfilter'] = 'Nuevo filtro';
+$labels['filteradd'] = 'Agregar filtro';
+$labels['filterdel'] = 'Eliminar filtro';
+$labels['moveup'] = 'Mover arriba';
+$labels['movedown'] = 'Mover abajo';
+$labels['filterallof'] = 'coinidir con todas las reglas siguientes';
+$labels['filteranyof'] = 'coincidir con alguna de las reglas siguientes';
+$labels['filterany'] = 'todos los mensajes';
+$labels['filtercontains'] = 'contiene';
+$labels['filternotcontains'] = 'no contiene';
+$labels['filteris'] = 'es igual a';
+$labels['filterisnot'] = 'no es igual a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'no existe';
+$labels['filtermatches'] = 'coincide con la expresión';
+$labels['filternotmatches'] = 'no coindice con la expresión';
+$labels['filterregex'] = 'coincide con la expresión regular';
+$labels['filternotregex'] = 'no coincide con la expresión regular';
+$labels['filterunder'] = 'bajo';
+$labels['filterover'] = 'sobre';
+$labels['addrule'] = 'Agregar regla';
+$labels['delrule'] = 'Eliminar regla';
+$labels['messagemoveto'] = 'Mover mensaje a';
+$labels['messageredirect'] = 'Redirigir mensaje a';
+$labels['messagecopyto'] = 'Copiar mensaje a';
+$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
+$labels['messagereply'] = 'Responder con un mensaje';
+$labels['messagedelete'] = 'Eliminar mensaje';
+$labels['messagediscard'] = 'Descartar con un mensaje';
+$labels['messagekeep'] = 'Mantener mensajes en bandeja de entrada';
+$labels['messagesrules'] = 'Para el correo entrante:';
+$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
+$labels['add'] = 'Agregar';
+$labels['del'] = 'Eliminar';
+$labels['sender'] = 'Remitente';
+$labels['recipient'] = 'Destinatario';
+$labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
+$labels['vacationinterval'] = 'Enviar mensajes cada:';
+$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
+$labels['vacationsubject'] = 'Asunto del mensaje:';
+$labels['days'] = 'dias';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Parar de evaluar reglas';
+$labels['enable'] = 'Habilitar/Deshabilitar';
+$labels['filterset'] = 'Conjunto de filtros';
+$labels['filtersets'] = 'Filtro activa';
+$labels['filtersetadd'] = 'Agregar conjunto de filtros';
+$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
+$labels['filtersetact'] = 'Activar conjunto de filtros';
+$labels['filtersetdeact'] = 'Deactivar conjunto de filtros';
+$labels['filterdef'] = 'Definicion del conjunto de filtros';
+$labels['filtersetname'] = 'Nombre del conjunto de filtros';
+$labels['newfilterset'] = 'Nuevo conjunto de filtros';
+$labels['active'] = 'Activar';
+$labels['none'] = 'none';
+$labels['fromset'] = 'desde conjunto';
+$labels['fromfile'] = 'desde archivo';
+$labels['filterdisabled'] = 'Filtro deshabilitado';
+$labels['countisgreaterthan'] = 'la cuenta es mayor a';
+$labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a';
+$labels['countislessthan'] = 'la cuenta es menor a';
+$labels['countislessthanequal'] = 'la cuenta es menor o igual a';
+$labels['countequals'] = 'la cuenta es igual a';
+$labels['countnotequals'] = 'la cuenta no es igual a';
+$labels['valueisgreaterthan'] = 'el valor es mayor a';
+$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual a';
+$labels['valueislessthan'] = 'el valor es menor a';
+$labels['valueislessthanequal'] = 'el valor es menor o igual a';
+$labels['valueequals'] = 'el valor es igual a';
+$labels['valuenotequals'] = 'el valor no es igual a';
+$labels['setflags'] = 'Configurar marcas del mensaje';
+$labels['addflags'] = 'Agregar marcas al mensaje';
+$labels['removeflags'] = 'Eliminar marcas del mensaje';
+$labels['flagread'] = 'Leer';
+$labels['flagdeleted'] = 'Eliminado';
+$labels['flaganswered'] = 'Respondido';
+$labels['flagflagged'] = 'Marcado';
+$labels['flagdraft'] = 'Borrador';
+$labels['setvariable'] = 'Setear variable';
+$labels['setvarname'] = 'Nombre de variable:';
+$labels['setvarvalue'] = 'Valor de variable:';
+$labels['setvarmodifiers'] = 'Modificadores:';
+$labels['varlower'] = 'minúscula';
+$labels['varupper'] = 'mayúscula';
+$labels['varlowerfirst'] = 'primer caracter en minúscula';
+$labels['varupperfirst'] = 'primer caracter en mayúscula';
+$labels['varquotewildcard'] = 'citar caracteres especiales';
+$labels['varlength'] = 'longitud';
+$labels['notify'] = 'Enviar notificación';
+$labels['notifytarget'] = 'Objetivo de la notificación:';
+$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
+$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
+$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
+$labels['notifyimportance'] = 'Importancia:';
+$labels['notifyimportancelow'] = 'baja';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crear filtro';
+$labels['usedata'] = 'Usar la siguiente información en el filtro:';
+$labels['nextstep'] = 'Siguiente paso';
+$labels['...'] = '...';
+$labels['currdate'] = 'Fecha actual';
+$labels['datetest'] = 'Fecha';
+$labels['dateheader'] = 'encabezado:';
+$labels['year'] = 'año';
+$labels['month'] = 'mes';
+$labels['day'] = 'dia';
+$labels['date'] = 'fecha (yyyy-mm-dd)';
+$labels['julian'] = 'fecha (juliano)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'fecha (ISO8601)';
+$labels['std11'] = 'fecha (RFC2822)';
+$labels['zone'] = 'zona horaria';
+$labels['weekday'] = 'día de la semana (0-6)';
+$labels['advancedopts'] = 'Opciones avanzadas';
+$labels['body'] = 'Cuerpo';
+$labels['address'] = 'dirección';
+$labels['envelope'] = 'envoltura';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'sin decodificar (crudo)';
+$labels['contenttype'] = 'tipo de contenido';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todo';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'usuario';
+$labels['detail'] = 'detalle';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'por defecto';
+$labels['octet'] = 'estricto (octeto)';
+$labels['asciicasemap'] = 'no sensible a minúsculas o mayúsculas (ascii-casemap)';
+$labels['asciinumeric'] = 'numérico (ascii-numeric)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'hacia atrás';
+$labels['vacation'] = 'Vacaciones';
+$labels['vacation.reply'] = 'Responder mensaje';
+$labels['vacation.advanced'] = 'Opciones avanzdas';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Cuerpo';
+$labels['vacation.start'] = 'Inicio de vacaciones';
+$labels['vacation.end'] = 'Final de vacaciones';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.interval'] = 'Intervalo de respuesta';
+$labels['vacation.after'] = 'Colocar luego regla de vacaciones ';
+$labels['vacation.saving'] = 'Guardando información...';
+$labels['vacation.action'] = 'Acción para mensaje entrante';
+$labels['vacation.keep'] = 'Mantener';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Reenviar a';
+$labels['vacation.copy'] = 'Enviar copia a';
+$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
+$labels['arialabelfilteractions'] = 'Filtrar acciones';
+$labels['arialabelfilterform'] = 'Filtrar propiedades';
+$labels['ariasummaryfilterslist'] = 'Listado de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Listado de conjunto de filtros';
+$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
+$labels['vacationtitle'] = 'Editar reglas "fuera de la oficina"';
+$messages['filterunknownerror'] = 'Error desconocido de servidor';
+$messages['filterconnerror'] = 'Imposible conectar con el servidor managesieve';
+$messages['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor';
+$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente';
+$messages['filtersaved'] = 'Filtro guardado satisfactoriamente';
+$messages['filtersaveerror'] = 'Imposible guardar ell filtro. Ha ocurrido un error en el servidor';
+$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
+$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
+$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
+$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo';
+$messages['cannotbeempty'] = 'El campo no puede estar vacío';
+$messages['ruleexist'] = 'El filtro con el nombre especificado ya existe.';
+$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
+$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
+$messages['setdeleteerror'] = 'Imposible eliminar el conjunto de filtros. Error en el servidor.';
+$messages['setactivated'] = 'Conjunto de filtros activados correctamente';
+$messages['setdeactivated'] = 'Conjunto de filtros desactivados correctamente';
+$messages['setdeleted'] = 'Conjunto de filtros eliminados correctamente';
+$messages['setdeleteconfirm'] = '¿Esta seguro, que quiere eliminar el conjunto de filtros seleccionado?';
+$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros. Error en el servidor.';
+$messages['setcreated'] = 'Conjunto de filtros creados correctamente';
+$messages['activateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
+$messages['deactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
+$messages['deactivated'] = 'Filtro deshabilitado satisfactoriamente';
+$messages['activated'] = 'Filtro habilitado satisfactoriamente';
+$messages['moved'] = 'Filtro movido satisfactoriamente';
+$messages['moveerror'] = 'Imposible mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
+$messages['nametoolong'] = 'El nombre es demasiado largo.';
+$messages['namereserved'] = 'Nombre reservado.';
+$messages['setexist'] = 'Conjunto ya existe.';
+$messages['nodata'] = 'Al menos una posición debe ser seleccionada!';
+$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
+$messages['saveerror'] = 'Imposible guardar la información. Ha ocurrido un error con el servidor.';
+$messages['vacationsaved'] = 'Información de vacaciones guardada satisfactoriamente.';
+$messages['emptyvacationbody'] = '¡Se requiere un cuerpo para el mensaje por vacaciones!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Administrar filtros de correo entrante';
+$labels['filtername'] = 'Nombre del filtro';
+$labels['newfilter'] = 'Nuevo filtro';
+$labels['filteradd'] = 'Añadir filtro';
+$labels['filterdel'] = 'Eliminar filtro';
+$labels['moveup'] = 'Mover arriba';
+$labels['movedown'] = 'Mover abajo';
+$labels['filterallof'] = 'que coincida con todas las reglas siguientes';
+$labels['filteranyof'] = 'que coincida con cualquiera de las reglas siguientes';
+$labels['filterany'] = 'todos los mensajes';
+$labels['filtercontains'] = 'contiene';
+$labels['filternotcontains'] = 'no contiene';
+$labels['filteris'] = 'es igual a';
+$labels['filterisnot'] = 'no es igual a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'no existe';
+$labels['filtermatches'] = 'coincide con la expresión';
+$labels['filternotmatches'] = 'no coincide con la expresión';
+$labels['filterregex'] = 'coincide con la expresión regular';
+$labels['filternotregex'] = 'no coincide con la expresión regular';
+$labels['filterunder'] = 'bajo';
+$labels['filterover'] = 'sobre';
+$labels['addrule'] = 'Añadir regla';
+$labels['delrule'] = 'Eliminar regla';
+$labels['messagemoveto'] = 'Mover mensaje a';
+$labels['messageredirect'] = 'Redirigir mensaje a';
+$labels['messagecopyto'] = 'Copiar mensaje a';
+$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
+$labels['messagereply'] = 'Responder con un mensaje';
+$labels['messagedelete'] = 'Eliminar mensaje';
+$labels['messagediscard'] = 'Descartar con un mensaje';
+$labels['messagekeep'] = 'Mantener el mensaje en la bandeja de entrada';
+$labels['messagesrules'] = 'Para el correo entrante:';
+$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
+$labels['add'] = 'Añadir';
+$labels['del'] = 'Eliminar';
+$labels['sender'] = 'Remitente';
+$labels['recipient'] = 'Destinatario';
+$labels['vacationaddr'] = 'Mis direcciones de email:';
+$labels['vacationdays'] = 'Cada cuánto enviar mensajes (en días):';
+$labels['vacationinterval'] = 'Cada cuánto enviar mensajes:';
+$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
+$labels['vacationfrom'] = 'Responder a la dirección del remitente:';
+$labels['vacationsubject'] = 'Asunto del mensaje:';
+$labels['days'] = 'días';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Parar de evaluar reglas';
+$labels['enable'] = 'Habilitar/Deshabilitar';
+$labels['filterset'] = 'Conjunto de filtros';
+$labels['filtersets'] = 'Conjuntos de filtros';
+$labels['filtersetadd'] = 'Agregar conjunto de filtros';
+$labels['filtersetdel'] = 'Eliminar conjunto de filtros actual';
+$labels['filtersetact'] = 'Activar conjunto de filtros actual';
+$labels['filtersetdeact'] = 'Desactivar conjunto de filtros actual';
+$labels['filterseteditraw'] = 'Editar conjunto de filtros';
+$labels['filterdef'] = 'Definición de filtros';
+$labels['filtersetname'] = 'Nombre del conjunto de filtros';
+$labels['newfilterset'] = 'Nuevo conjunto de filtros';
+$labels['active'] = 'activo';
+$labels['none'] = 'ninguno';
+$labels['fromset'] = 'de conjunto';
+$labels['fromfile'] = 'de archivo';
+$labels['filterdisabled'] = 'Filtro deshabilitado';
+$labels['countisgreaterthan'] = 'contiene más que';
+$labels['countisgreaterthanequal'] = 'contiene más o igual que';
+$labels['countislessthan'] = 'contiene menos que';
+$labels['countislessthanequal'] = 'contiene menos o igual que';
+$labels['countequals'] = 'contiene igual que';
+$labels['countnotequals'] = 'la cuenta no es igual a';
+$labels['valueisgreaterthan'] = 'el valor es mayor que';
+$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual que';
+$labels['valueislessthan'] = 'el valor es menor que';
+$labels['valueislessthanequal'] = 'el valor es menor o igual que';
+$labels['valueequals'] = 'el valor es igual que';
+$labels['valuenotequals'] = 'el valor no es igual a';
+$labels['setflags'] = 'Etiquetar el mensaje';
+$labels['addflags'] = 'Agregar etiquetas al mensaje';
+$labels['removeflags'] = 'Eliminar etiquetas del mensaje';
+$labels['flagread'] = 'Leído';
+$labels['flagdeleted'] = 'Eliminado';
+$labels['flaganswered'] = 'Respondido';
+$labels['flagflagged'] = 'Marcado';
+$labels['flagdraft'] = 'Borrador';
+$labels['setvariable'] = 'Establecer variable';
+$labels['setvarname'] = 'Nombre de la variable:';
+$labels['setvarvalue'] = 'Valor de la variable:';
+$labels['setvarmodifiers'] = 'Modificadores';
+$labels['varlower'] = 'minúsculas';
+$labels['varupper'] = 'mayúsculas';
+$labels['varlowerfirst'] = 'primer caracter en minúsculas';
+$labels['varupperfirst'] = 'primer caracter en mayúsculas';
+$labels['varquotewildcard'] = 'entrecomillar caracteres especiales';
+$labels['varlength'] = 'longitud';
+$labels['notify'] = 'Enviar notificación';
+$labels['notifytarget'] = 'Destino de la notificación:';
+$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
+$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
+$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
+$labels['notifyimportance'] = 'Importancia:';
+$labels['notifyimportancelow'] = 'baja';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correo electrónico';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crear filtro';
+$labels['usedata'] = 'Usar los siguientes datos en el filtro:';
+$labels['nextstep'] = 'Siguiente paso';
+$labels['...'] = '...';
+$labels['string'] = 'Secuencia';
+$labels['currdate'] = 'Fecha actual';
+$labels['datetest'] = 'Fecha';
+$labels['dateheader'] = 'cabecera:';
+$labels['year'] = 'año';
+$labels['month'] = 'mes';
+$labels['day'] = 'día';
+$labels['date'] = 'fecha (aaaa-mm-dd)';
+$labels['julian'] = 'fecha (juliano)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'fecha (ISO8601)';
+$labels['std11'] = 'fecha (RFC2822)';
+$labels['zone'] = 'zona horaria';
+$labels['weekday'] = 'día de la semana (0-6)';
+$labels['advancedopts'] = 'Opciones avanzadas';
+$labels['body'] = 'Cuerpo del mensaje';
+$labels['address'] = 'dirección';
+$labels['envelope'] = 'envoltura';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'decodificar (en bruto)';
+$labels['contenttype'] = 'tipo de contenido';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todo';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'usuario';
+$labels['detail'] = 'detalle';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'predeterminado';
+$labels['octet'] = 'estricto (octeto)';
+$labels['asciicasemap'] = 'no sensible a mayúsculas (ascii-casemap)';
+$labels['asciinumeric'] = 'numerico (ascii-numeric)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'hacia atrás';
+$labels['vacation'] = 'Vacaciones';
+$labels['vacation.reply'] = 'Mensaje de respuesta';
+$labels['vacation.advanced'] = 'Configuración avanzada';
+$labels['vacation.from'] = 'Responder a la dirección del remitente';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Cuerpo';
+$labels['vacation.start'] = 'Comienzo de las vacaciones';
+$labels['vacation.end'] = 'Final de las vacaciones';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Activado';
+$labels['vacation.off'] = 'Desactivado';
+$labels['vacation.addresses'] = 'Mis direcciones de email';
+$labels['vacation.interval'] = 'Intervalo de respuesta';
+$labels['vacation.after'] = 'Poner regla de vacaciones después de';
+$labels['vacation.saving'] = 'Guardando datos...';
+$labels['vacation.action'] = 'Acción de mensaje entrante';
+$labels['vacation.keep'] = 'Mantener';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redireccionar a';
+$labels['vacation.copy'] = 'Enviar copia a';
+$labels['filladdresses'] = 'Rellenar con todas mis direcciones';
+$labels['arialabelfiltersetactions'] = 'Acciones de un paquete de filtros';
+$labels['arialabelfilteractions'] = 'Acciones de filtro';
+$labels['arialabelfilterform'] = 'Propiedades de filtro';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de paquetes de filtros';
+$labels['filterstitle'] = 'Editar filtros de mensajes entrantes';
+$labels['vacationtitle'] = 'Editar la regla fuera-de-la-oficina';
+$labels['message'] = 'Mensaje';
+$labels['duplicate'] = 'está duplicado';
+$labels['notduplicate'] = 'no está duplicado';
+$labels['duplicate.handle'] = 'manejar:';
+$labels['duplicate.header'] = 'encabezamiento:';
+$labels['duplicate.uniqueid'] = 'identificador:';
+$labels['duplicate.seconds'] = 'tiempo (segundos):';
+$labels['duplicate.last'] = 'relativo a la última ejecución';
+$messages['filterunknownerror'] = 'Error desconocido en el servidor.';
+$messages['filterconnerror'] = 'No se pudo conectar con el servidor managesieve.';
+$messages['filterdeleteerror'] = 'No se pudo borrar el filtro. Ha ocurrido un error en el servidor.';
+$messages['filterdeleted'] = 'Filtro borrado correctamente.';
+$messages['filtersaved'] = 'Filtro guardado correctamente.';
+$messages['filtersaveerror'] = 'No se pudo guardar el filtro. Ha ocurrido un error en el servidor.';
+$messages['filterformerror'] = 'El formulario de filtrado contiene errores.';
+$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
+$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
+$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
+$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo.';
+$messages['cannotbeempty'] = 'El campo no puede estar vacío.';
+$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
+$messages['setactivateerror'] = 'No se pudo activar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor.';
+$messages['setdeactivateerror'] = 'No se pudo desactivar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor.';
+$messages['setdeleteerror'] = 'No se pudo borrar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor.';
+$messages['setactivated'] = 'Conjunto de filtros activado correctamente.';
+$messages['setdeactivated'] = 'Conjunto de filtros desactivado correctamente.';
+$messages['setdeleted'] = 'Conjunto de filtros borrado correctamente.';
+$messages['setupdated'] = 'El conjunto de filtros se ha actualizado correctamente.';
+$messages['setdeleteconfirm'] = '¿Está seguro de que desea borrar el conjunto de filtros seleccionado?';
+$messages['setcreateerror'] = 'No se ha podido crear el conjunto de filtros. Ha ocurrido un error en el servidor.';
+$messages['setcreated'] = 'Conjunto de filtros creado correctamente.';
+$messages['activateerror'] = 'No se pudo habilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
+$messages['deactivateerror'] = 'No se pudo deshabilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
+$messages['deactivated'] = 'Filtro(s) deshabilitado(s) correctamente.';
+$messages['activated'] = 'Filtro(s) habilitado(s) correctamente.';
+$messages['moved'] = 'Filtro movido correctamente.';
+$messages['moveerror'] = 'No se pudo mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
+$messages['nametoolong'] = 'Nombre demasiado largo.';
+$messages['namereserved'] = 'Nombre reservado.';
+$messages['setexist'] = 'El conjunto ya existe.';
+$messages['nodata'] = '¡Al menos una posición debe ser seleccionada!';
+$messages['invaliddateformat'] = 'Fecha o formato de parte de la fecha no válido';
+$messages['saveerror'] = 'No se pudo guardar los datos. Ha ocurrido un error en el servidor.';
+$messages['vacationsaved'] = 'Datos de vacaciones guardados correctamente.';
+$messages['emptyvacationbody'] = '¡Hace falta un texto en el mensaje de vacaciones!';
+$messages['duplicate.conflict.err'] = 'Tanto el encabezameinto, como el identificador único no están permitidos.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,177 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtrid';
+$labels['managefilters'] = 'Halda sisenevate kirjade filtreid';
+$labels['filtername'] = 'Filtri nimi';
+$labels['newfilter'] = 'Uus filter';
+$labels['filteradd'] = 'Lisa filter';
+$labels['filterdel'] = 'Kustuta filter';
+$labels['moveup'] = 'Liiguta üles';
+$labels['movedown'] = 'Liiguta alla';
+$labels['filterallof'] = 'vastab kõikidele järgnevatele reeglitele';
+$labels['filteranyof'] = 'vastab mõnele järgnevatest reeglitest';
+$labels['filterany'] = 'kõik kirjad';
+$labels['filtercontains'] = 'sisaldab';
+$labels['filternotcontains'] = 'ei sisalda';
+$labels['filteris'] = 'on võrdne kui';
+$labels['filterisnot'] = 'ei ole võrdne kui';
+$labels['filterexists'] = 'on olemas';
+$labels['filternotexists'] = 'pole olemas';
+$labels['filtermatches'] = 'vastab avaldisele';
+$labels['filternotmatches'] = 'ei vasta avaldisele';
+$labels['filterregex'] = 'vastab regulaaravaldisele';
+$labels['filternotregex'] = 'ei vasta regulaaravaldisele';
+$labels['filterunder'] = 'alt';
+$labels['filterover'] = 'üle';
+$labels['addrule'] = 'Lisa reegel';
+$labels['delrule'] = 'Kustuta reegel';
+$labels['messagemoveto'] = 'Liiguta kiri';
+$labels['messageredirect'] = 'Suuna kiri ümber';
+$labels['messagecopyto'] = 'Kopeeri kiri';
+$labels['messagesendcopy'] = 'Saada kirja koopia';
+$labels['messagereply'] = 'Vasta kirjaga';
+$labels['messagedelete'] = 'Kustuta kiri';
+$labels['messagediscard'] = 'Viska ära teatega';
+$labels['messagesrules'] = 'Siseneva kirja puhul, mis:';
+$labels['messagesactions'] = '...käivita järgnevad tegevused:';
+$labels['add'] = 'Lisa';
+$labels['del'] = 'Kustuta';
+$labels['sender'] = 'Saatja';
+$labels['recipient'] = 'Saaja';
+$labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
+$labels['vacationinterval'] = 'Kui tihti kirju saata:';
+$labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):';
+$labels['vacationsubject'] = 'Kirja teema:';
+$labels['days'] = 'päeva';
+$labels['seconds'] = 'sekundit';
+$labels['rulestop'] = 'Peata reeglite otsimine';
+$labels['enable'] = 'Luba/keela';
+$labels['filterset'] = 'Filtrite kogum';
+$labels['filtersets'] = 'Filtri kogum';
+$labels['filtersetadd'] = 'Lisa filtrite kogum';
+$labels['filtersetdel'] = 'Kustuta praegune filtrite kogum';
+$labels['filtersetact'] = 'Aktiveeri praegune filtrite kogum';
+$labels['filtersetdeact'] = 'De-aktiveeri praegune filtrite kogum';
+$labels['filterdef'] = 'Filtri definitsioon';
+$labels['filtersetname'] = 'Filtrite kogumi nimi';
+$labels['newfilterset'] = 'Uus filtrite kogum';
+$labels['active'] = 'aktiivne';
+$labels['none'] = 'puudub';
+$labels['fromset'] = 'kogumist';
+$labels['fromfile'] = 'failist';
+$labels['filterdisabled'] = 'Filter keelatud';
+$labels['countisgreaterthan'] = 'koguarv on suurem kui';
+$labels['countisgreaterthanequal'] = 'koguarv on suurem kui või võrdne';
+$labels['countislessthan'] = 'koguarv on väiksem';
+$labels['countislessthanequal'] = 'koguarv on väiksem kui või võrdne';
+$labels['countequals'] = 'koguarv on võrdne';
+$labels['countnotequals'] = 'summa ei ole võrdne';
+$labels['valueisgreaterthan'] = 'väärtus on suurem kui';
+$labels['valueisgreaterthanequal'] = 'väärtus on suurem kui või võrdne';
+$labels['valueislessthan'] = 'väärtus on väiksem kui';
+$labels['valueislessthanequal'] = 'väärtus on väiksem kui või võrdne';
+$labels['valueequals'] = 'väärtus on võrdne';
+$labels['valuenotequals'] = 'väärtus ei ole võrdne';
+$labels['setflags'] = 'Sea kirjale lipik';
+$labels['addflags'] = 'Lisa kirjale lipikuid';
+$labels['removeflags'] = 'Eemalda kirjalt lipikud';
+$labels['flagread'] = 'Loetud';
+$labels['flagdeleted'] = 'Kustutatud';
+$labels['flaganswered'] = 'Vastatud';
+$labels['flagflagged'] = 'Märgistatud';
+$labels['flagdraft'] = 'Mustand';
+$labels['setvariable'] = 'Määra muutuja';
+$labels['setvarname'] = 'Muutuja nimi:';
+$labels['setvarvalue'] = 'Muutuja väärtus:';
+$labels['setvarmodifiers'] = 'Muutjad:';
+$labels['varlower'] = 'väiketähed';
+$labels['varupper'] = 'suurtähed';
+$labels['varlowerfirst'] = 'esimene märk on väiketäht';
+$labels['varupperfirst'] = 'esimene märk on suurtäht';
+$labels['varquotewildcard'] = 'tsiteeri erimärke';
+$labels['varlength'] = 'pikkus';
+$labels['notify'] = 'Saada teavitus';
+$labels['notifyimportance'] = 'Tähtsus:';
+$labels['notifyimportancelow'] = 'madal';
+$labels['notifyimportancenormal'] = 'tavaline';
+$labels['notifyimportancehigh'] = 'kõrge';
+$labels['filtercreate'] = 'Loo filter';
+$labels['usedata'] = 'Kasuta filtris järgmisi andmeid:';
+$labels['nextstep'] = 'Järgmine samm';
+$labels['...'] = '…';
+$labels['currdate'] = 'Praegune kuupäev';
+$labels['datetest'] = 'Kuupäev';
+$labels['dateheader'] = 'päis:';
+$labels['year'] = 'aasta';
+$labels['month'] = 'kuu';
+$labels['day'] = 'päev';
+$labels['date'] = 'kuupäev (aaaa-kk-pp)';
+$labels['julian'] = 'kuupäev (Juliuse)';
+$labels['hour'] = 'tund';
+$labels['minute'] = 'minut';
+$labels['second'] = 'sekund';
+$labels['time'] = 'aeg (tt:mm:ss)';
+$labels['iso8601'] = 'kuupäev (ISO8601)';
+$labels['std11'] = 'kuupäev (RCF2822)';
+$labels['zone'] = 'ajatsoon';
+$labels['weekday'] = 'nädalapäev (0-6)';
+$labels['advancedopts'] = 'Lisaseadistused';
+$labels['body'] = 'Põhitekst';
+$labels['address'] = 'aadress';
+$labels['envelope'] = 'ümbrik';
+$labels['modifier'] = 'muutja:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'kodeerimata (toor)';
+$labels['contenttype'] = 'sisu tüüp';
+$labels['modtype'] = 'tüüp:';
+$labels['allparts'] = 'kõik';
+$labels['domain'] = 'domeen';
+$labels['localpart'] = 'kohalik osa';
+$labels['user'] = 'kasutaja';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'võrdleja:';
+$labels['default'] = 'vaikimisi';
+$labels['octet'] = 'range (octet)';
+$labels['asciicasemap'] = 'tõstutundetu (ascii-casemap)';
+$labels['asciinumeric'] = 'numbriline (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'tagasisuunas';
+$messages['filterunknownerror'] = 'Tundmatu serveri tõrge';
+$messages['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus';
+$messages['filterdeleted'] = 'Filter edukalt kustutatud';
+$messages['filtersaved'] = 'Filter edukalt salvestatud';
+$messages['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?';
+$messages['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?';
+$messages['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?';
+$messages['forbiddenchars'] = 'Väljal on lubamatu märk';
+$messages['cannotbeempty'] = 'Väli ei või tühi olla';
+$messages['ruleexist'] = 'Määratud nimega filter on juba olemas';
+$messages['setactivated'] = 'Filtrite kogumi aktiveerimine õnnestus.';
+$messages['setdeactivated'] = 'Filtrite kogumi deaktiveerimine õnnestus.';
+$messages['setdeleted'] = 'Filtrite kogumi kustutamine õnnestus.';
+$messages['setdeleteconfirm'] = 'Oled kindel, et soovid valitud filtrite kogumi kustutada?';
+$messages['setcreated'] = 'Filtrite kogumi loomine õnnestus.';
+$messages['deactivated'] = 'Filter edukalt lubatud.';
+$messages['activated'] = 'Filter edukalt keelatud.';
+$messages['moved'] = 'Filter edukalt liigutatud.';
+$messages['nametoolong'] = 'Nimi on liiga pikk.';
+$messages['namereserved'] = 'Nimi on reserveeritud.';
+$messages['setexist'] = 'Kogum on juba olemas.';
+$messages['nodata'] = 'Valitud peab olema vähemalt üks asukoht!';
+$messages['invaliddateformat'] = 'Vigane kuupäev või kuupäeva formaat';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Iragazkiak';
+$labels['managefilters'] = 'Kudeatu sarrerako posta-iragazkiak';
+$labels['filtername'] = 'Iragazkiaren izena';
+$labels['newfilter'] = 'Iragazki berria';
+$labels['filteradd'] = 'Gehitu iragazkia';
+$labels['filterdel'] = 'Ezabatu iragazkia';
+$labels['moveup'] = 'Mugitu gora';
+$labels['movedown'] = 'Mugitu behera';
+$labels['filterallof'] = 'datozen arau guztiak parekatzen';
+$labels['filteranyof'] = 'datozen arauetako batzuk parekatzen';
+$labels['filterany'] = 'mezu guztiak';
+$labels['filtercontains'] = 'badu';
+$labels['filternotcontains'] = 'ez du';
+$labels['filteris'] = 'honen berdina da';
+$labels['filterisnot'] = 'ez da honen berdina';
+$labels['filterexists'] = 'badago';
+$labels['filternotexists'] = 'ez dago';
+$labels['filtermatches'] = 'bat datorren espresioa';
+$labels['filternotmatches'] = 'bat ez datorren espresioa';
+$labels['filterregex'] = 'bat datozen adierazpen erregularra';
+$labels['filternotregex'] = 'bat ez datorren espresio erregularra';
+$labels['filterunder'] = 'azpian';
+$labels['filterover'] = 'gainean';
+$labels['addrule'] = 'Gehitu araua';
+$labels['delrule'] = 'Ezabatu araua';
+$labels['messagemoveto'] = 'Mugitu mezua hona';
+$labels['messageredirect'] = 'Birbideratu mezua hona ';
+$labels['messagecopyto'] = 'Kopiatu mezua hona';
+$labels['messagesendcopy'] = 'Bidali mezuaren kopia hona';
+$labels['messagereply'] = 'Erantzun mezuarekin';
+$labels['messagedelete'] = 'Ezabatu mezua';
+$labels['messagediscard'] = 'Baztertu mezuarekin';
+$labels['messagekeep'] = 'Mantendu mezua Sarrera-ontzian';
+$labels['messagesrules'] = 'Sarrerako postarako:';
+$labels['messagesactions'] = '...exekutatu datozen ekintzak:';
+$labels['add'] = 'Gehitu';
+$labels['del'] = 'Ezabatu';
+$labels['sender'] = 'Bidaltzailea';
+$labels['recipient'] = 'Hartzailea';
+$labels['vacationaddr'] = 'Nire eposta helbideak:';
+$labels['vacationdays'] = 'Zenbatero bidali mezuak (egunak)';
+$labels['vacationinterval'] = 'Zenbatero bidali mezuak:';
+$labels['vacationreason'] = 'Mezuaren gorputza (oporrak direla medio):';
+$labels['vacationfrom'] = 'Erantzun bidaltzailearen helbidera:';
+$labels['vacationsubject'] = 'Mezuaren gaia:';
+$labels['days'] = 'egun';
+$labels['seconds'] = 'segundo';
+$labels['rulestop'] = 'Gelditu arauak ebaluatzen';
+$labels['enable'] = 'Gaitu/Ezgaitu';
+$labels['filterset'] = 'Iragazki-paketea';
+$labels['filtersets'] = 'Iragazki-paketeak';
+$labels['filtersetadd'] = 'Gehitu iragazki-paketea';
+$labels['filtersetdel'] = 'Ezabatu uneko iragazki-paketea';
+$labels['filtersetact'] = 'Gaitu uneko iragazki-paketea';
+$labels['filtersetdeact'] = 'Ezgaitu uneko iragazki-paketea';
+$labels['filterseteditraw'] = 'Editatu iragazki multzoa';
+$labels['filterdef'] = 'Iragazkiaren definizioa';
+$labels['filtersetname'] = 'Iragazki-paketearen izena';
+$labels['newfilterset'] = 'Iragazki-pakete berria';
+$labels['active'] = 'aktiboa';
+$labels['none'] = 'Bat ere ez';
+$labels['fromset'] = 'paketetik';
+$labels['fromfile'] = 'fitxategitik';
+$labels['filterdisabled'] = 'Iragazki ezgaitua';
+$labels['countisgreaterthan'] = 'kopurua handiagoa da hau baino';
+$labels['countisgreaterthanequal'] = 'kopurua hau baino handiagoa edo berdina da';
+$labels['countislessthan'] = 'kopurua hau baino txikiagoa da';
+$labels['countislessthanequal'] = 'kopurua hau baino txikiagoa edo berdina da';
+$labels['countequals'] = 'kopurua honen berdina da';
+$labels['countnotequals'] = 'kopurua ez da honen berdina';
+$labels['valueisgreaterthan'] = 'balioa hau baino handiagoa da';
+$labels['valueisgreaterthanequal'] = 'balioa hau baino handiagoa edo berdina da';
+$labels['valueislessthan'] = 'balioa hau baino txikiagoa da';
+$labels['valueislessthanequal'] = 'balioa hau baino txikiagoa edo berdina da';
+$labels['valueequals'] = 'balioa honen berdina da';
+$labels['valuenotequals'] = 'balioa ez da honen berdina';
+$labels['setflags'] = 'Jarri banderak mezuarik';
+$labels['addflags'] = 'Gehitu banderak mezuari';
+$labels['removeflags'] = 'Ezabatu banderak mezutik';
+$labels['flagread'] = 'Irakurri';
+$labels['flagdeleted'] = 'Ezabatuta';
+$labels['flaganswered'] = 'Erantzunda';
+$labels['flagflagged'] = 'Bandera jarrita';
+$labels['flagdraft'] = 'Ziriborroa';
+$labels['setvariable'] = 'Ezarri aldagaia';
+$labels['setvarname'] = 'Aldagaiaren izena:';
+$labels['setvarvalue'] = 'Aldagaiaren balioa:';
+$labels['setvarmodifiers'] = 'Modifikatzaileak:';
+$labels['varlower'] = 'minuskulan';
+$labels['varupper'] = 'maiuskulan';
+$labels['varlowerfirst'] = 'lehenengo karakterea minuskulan';
+$labels['varupperfirst'] = 'lehenengo karakterea maiuskulan';
+$labels['varquotewildcard'] = 'aipatu karaktere bereziak';
+$labels['varlength'] = 'luzera';
+$labels['notify'] = 'Bidali jakinarazpena';
+$labels['notifytarget'] = 'Jakinarazpenaren xedea:';
+$labels['notifymessage'] = 'Jakinarazpenaren mezua (aukerakoa):';
+$labels['notifyoptions'] = 'Jakinarazpenaren aukerak (aukerakoa):';
+$labels['notifyfrom'] = 'Jakinarazpenaren bidaltzailea (aukerakoa):';
+$labels['notifyimportance'] = 'Garrantzia:';
+$labels['notifyimportancelow'] = 'baxua';
+$labels['notifyimportancenormal'] = 'normala';
+$labels['notifyimportancehigh'] = 'altua';
+$labels['notifymethodmailto'] = 'Helbide elektronikoa';
+$labels['notifymethodtel'] = 'Telefonoa';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Sortu iragazkia';
+$labels['usedata'] = 'Erabili datorren data iragazkian:';
+$labels['nextstep'] = 'Hurrengo urratsa';
+$labels['...'] = '...';
+$labels['string'] = 'Katea';
+$labels['currdate'] = 'Uneko data';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'goiburua:';
+$labels['year'] = 'urte';
+$labels['month'] = 'hilabete';
+$labels['day'] = 'egun';
+$labels['date'] = 'data (yyyy-mm-dd)';
+$labels['julian'] = 'data (juliarra)';
+$labels['hour'] = 'ordu';
+$labels['minute'] = 'minutu';
+$labels['second'] = 'segundo';
+$labels['time'] = 'ordua  (hh:mm:ss)';
+$labels['iso8601'] = 'data  (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'ordu-zona';
+$labels['weekday'] = 'asteguna (0-6)';
+$labels['advancedopts'] = 'Aukera aurreratuak';
+$labels['body'] = 'Gorputza';
+$labels['address'] = 'helbidea';
+$labels['envelope'] = 'gutun-azala';
+$labels['modifier'] = 'modifikatzailea:';
+$labels['text'] = 'testua';
+$labels['undecoded'] = 'kodetu gabe (gordina)';
+$labels['contenttype'] = 'eduki mota';
+$labels['modtype'] = 'mota:';
+$labels['allparts'] = 'denak';
+$labels['domain'] = 'domeinua';
+$labels['localpart'] = 'zati lokala';
+$labels['user'] = 'erabiltzailea';
+$labels['detail'] = 'xehetasuna';
+$labels['comparator'] = 'alderatzailea:';
+$labels['default'] = 'lehenetsia';
+$labels['octet'] = 'zorrotza (zortzikotea)';
+$labels['asciicasemap'] = 'minuskulak eta maiuskulak (ascii-casemap)';
+$labels['asciinumeric'] = 'numerikoa  (ascii-numeric)';
+$labels['index'] = 'indexatu:';
+$labels['indexlast'] = 'atzeraka';
+$labels['vacation'] = 'Oporraldia';
+$labels['vacation.reply'] = 'Erantzun mezua';
+$labels['vacation.advanced'] = 'Ezarpen aurreratuak';
+$labels['vacation.from'] = 'Erantzun bidaltzailearen helbidera';
+$labels['vacation.subject'] = 'Gaia';
+$labels['vacation.body'] = 'Gorputza';
+$labels['vacation.start'] = 'Oporraldiaren hasiera';
+$labels['vacation.end'] = 'Oporraldiaren bukaera';
+$labels['vacation.status'] = 'Egoera';
+$labels['vacation.on'] = 'Piztuta';
+$labels['vacation.off'] = 'Itzalita';
+$labels['vacation.addresses'] = 'Nire e-posta helbideak';
+$labels['vacation.interval'] = 'Erantzun tartea';
+$labels['vacation.after'] = 'Jarri oporren erregela honen ondoren';
+$labels['vacation.saving'] = 'Datuak gordetzen...';
+$labels['vacation.action'] = 'Sarrerako mezuaren ekintza';
+$labels['vacation.keep'] = 'Mantendu';
+$labels['vacation.discard'] = 'Baztertu';
+$labels['vacation.redirect'] = 'Birbideratu hona';
+$labels['vacation.copy'] = 'Bidali kopia hona';
+$labels['filladdresses'] = 'Bete nire helbide guztiekin';
+$labels['arialabelfiltersetactions'] = 'Iragazki-paketearen ekintzak';
+$labels['arialabelfilteractions'] = 'Iragazki-ekintzak';
+$labels['arialabelfilterform'] = 'Iragazkiaren ezaugarriak';
+$labels['ariasummaryfilterslist'] = 'Iragazkien zerrenda';
+$labels['ariasummaryfiltersetslist'] = 'Iragazki-paketeen zerrenda';
+$labels['filterstitle'] = 'Editatu postaren sarrera-iragazkiak';
+$labels['vacationtitle'] = 'Bulegotik-kanpo -erantzun automatiko- araua';
+$labels['message'] = 'Mezua';
+$labels['duplicate'] = 'bikoiztuta dago';
+$labels['notduplicate'] = 'ez dago bikoiztuta';
+$labels['duplicate.handle'] = 'heldulekua:';
+$labels['duplicate.header'] = 'goiburua:';
+$labels['duplicate.uniqueid'] = 'Identifikatzailea:';
+$labels['duplicate.seconds'] = 'Denbora-muga (segundo)';
+$labels['duplicate.last'] = 'azken exekuzioari dagokiona';
+$messages['filterunknownerror'] = 'Zerbitzari ezezaguna errorea';
+$messages['filterconnerror'] = 'Ezin da konektatu zerbitzariarekin.';
+$messages['filterdeleteerror'] = 'Ezin da ezabatu iragazkia. Errore bat gertatu da zerbitzarian.';
+$messages['filterdeleted'] = 'Iragazkia ongi ezabatu da.';
+$messages['filtersaved'] = 'Iragazkia ongi ezabatu da.';
+$messages['filtersaveerror'] = 'Ezin da gorde iragazkia. Zerbitzarian errore bat gertatu da.';
+$messages['filterformerror'] = 'Iragazkien formularioa erroreak ditu.';
+$messages['filterdeleteconfirm'] = 'Seguru zaude hautatutako iragazkiak ezabatu nahi dituzula?';
+$messages['ruledeleteconfirm'] = 'Seguru zaude hautatutako arauak ezabatu nahi dituzula?';
+$messages['actiondeleteconfirm'] = 'Seguru zaude hautatutako ekintzak ezabatu nahi dituzula?';
+$messages['forbiddenchars'] = 'Debekatutako karaktereak eremuan.';
+$messages['cannotbeempty'] = 'Eremua ezin da hutsik egon.';
+$messages['ruleexist'] = 'Lehendik badago izen hori duen iragazki bat.';
+$messages['setactivateerror'] = 'Ezin da aktibatu hautatutako iragazki paketea. Zerbitzarian errore bat gertatu da.';
+$messages['setdeactivateerror'] = 'Ezin da ezgaitu hautatutako iragazki-paketea. Zerbitzarian errore bat gertatu da.';
+$messages['setdeleteerror'] = 'Ezin da ezabatu hautatutako iragazki-paketea. Zerbitzarian errore bat gertatu da.';
+$messages['setactivated'] = 'Iragazki paketea ongi aktibatu da.';
+$messages['setdeactivated'] = 'Iragazki paketea ongi desaktibatu da.';
+$messages['setdeleted'] = 'Iragazki paketea ongi ezabatu da.';
+$messages['setupdated'] = 'Iragazkien multzoa ongi eguneratu da.';
+$messages['setdeleteconfirm'] = 'Seguru zaude hautatutako iragazki paketea ezabatu nahi duzula?';
+$messages['setcreateerror'] = 'Ezin da iragazki-paketea sortu. Zerbitzarian errore bat gertatu da.';
+$messages['setcreated'] = 'Iragazki paketea ongi sortu da.';
+$messages['activateerror'] = 'Ezin da gaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
+$messages['deactivateerror'] = 'Ezin da ezgaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
+$messages['deactivated'] = 'Iragazkia(k) ongi ezgaitu da.';
+$messages['activated'] = 'Iragazkia(k) ongi gaitu da.';
+$messages['moved'] = 'Iragazkia ongi mugitu da.';
+$messages['moveerror'] = 'Ezin da mugitu hautatutako iragazkia. Zerbitzarian errore bat gertatu da.';
+$messages['nametoolong'] = 'Izen luzeegia.';
+$messages['namereserved'] = 'Izen erreserbatua.';
+$messages['setexist'] = 'Lehendik badago pakete hori.';
+$messages['nodata'] = 'Gutxienez posizio bat hautatu behar da!';
+$messages['invaliddateformat'] = 'Dataren edo dataren zati baten formatua ez da baliozkoa ';
+$messages['saveerror'] = 'Ezin dira datuak gorde. Errorea gertatu da zerbitzarian.';
+$messages['vacationsaved'] = 'Oporren data ongi gorde da.';
+$messages['emptyvacationbody'] = 'Beharrezkoa da oporraldiko mezua jartzea!';
+$messages['duplicate.conflict.err'] = 'Goiburua eta identifikatzaile bakarra ez dira onartzen.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Ùیلترها';
+$labels['filtername'] = 'نام Ùیلتر';
+$labels['newfilter'] = 'Ùیلتر جدید';
+$labels['filteranyof'] = 'تطبیق با هر کدام از رول های زیر';
+$labels['filterany'] = 'تمام پیام ها';
+$labels['filtercontains'] = 'شامل';
+$labels['filteris'] = 'مساوی با';
+$labels['filterunder'] = 'زیر';
+$labels['filterover'] = 'بالای';
+$labels['addrule'] = 'اÙزودن نقش';
+$labels['delrule'] = 'حذ٠نقش';
+$labels['messagereply'] = 'پاسخ توسط پیام';
+$labels['messagedelete'] = 'حذ٠پیام';
+$labels['add'] = 'اÙزودن';
+$labels['del'] = 'حذÙ';
+$labels['sender'] = 'Ùرستنده';
+$labels['recipient'] = 'گیرنده';
+$labels['days'] = 'روز';
+$labels['filtersets'] = 'مجموعه Ùیلتر';
+$labels['filterdef'] = 'تعری٠Ùیلتر';
+$labels['newfilterset'] = 'مجموعه Ùیلترهای جدید';
+$labels['active'] = 'Ùعال';
+$labels['none'] = 'هیچ کدام';
+$labels['flagread'] = 'خواندن';
+$labels['flagdeleted'] = 'حذ٠شد';
+$labels['flagflagged'] = 'نشانه گذاری شده';
+$labels['flagdraft'] = 'پیش نویس';
+$labels['varlength'] = 'طول';
+$labels['notifyimportancenormal'] = 'عادی';
+$labels['notifymethodmailto'] = 'ایمیل';
+$labels['nextstep'] = 'مرحله بعدی';
+$labels['...'] = '...';
+$labels['currdate'] = 'تاریخ کنونی';
+$labels['datetest'] = 'تاریخ';
+$labels['dateheader'] = 'سرایند:';
+$labels['year'] = 'سال';
+$labels['month'] = 'ماه';
+$labels['day'] = 'روز';
+$labels['second'] = 'ثانیه';
+$labels['address'] = 'آدرس';
+$labels['envelope'] = 'پاکت نامه';
+$labels['modifier'] = 'ویرایش کننده:';
+$labels['text'] = 'متن';
+$labels['contenttype'] = 'نوع محتوا';
+$labels['allparts'] = 'همه';
+$labels['domain'] = 'دامنه';
+$labels['localpart'] = 'جز محلی';
+$labels['user'] = 'کاربر';
+$labels['detail'] = 'جزئیات';
+$labels['comparator'] = 'مقایسه کننده:';
+$labels['default'] = 'پیش Ùرض';
+$labels['index'] = 'اندیس';
+$labels['vacation'] = 'تعطیلات';
+$labels['vacation.reply'] = 'پیام پاسخ';
+$labels['vacation.advanced'] = 'تنظیمات پیشرÙته';
+$labels['vacation.subject'] = 'موضوع';
+$labels['vacation.body'] = 'متن پیام';
+$labels['vacation.status'] = 'وضعیت';
+$labels['vacation.on'] = 'Ùعال';
+$labels['vacation.off'] = 'غیرÙعال';
+$labels['arialabelfilterform'] = 'خصوصیات Ùیلترها';
+$labels['ariasummaryfilterslist'] = 'لیست Ùیلترها';
+$messages['filterdeleted'] = 'Ùیلتر با موÙقیت حذ٠شد.';
+$messages['filtersaved'] = 'Ùیلتر با موÙقیت ذخیره شد.';
+$messages['deactivated'] = 'Ùیلتر(ها) با موÙقیت غیر Ùعال شدند';
+$messages['nametoolong'] = 'نام بسیار بلند است.';
+$messages['namereserved'] = 'نام  رزرو شده.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,222 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'پالایه‌ها';
+$labels['managefilters'] = 'مدیریت پالایه‌های نامه ورودی';
+$labels['filtername'] = 'نام پالایه';
+$labels['newfilter'] = 'پالایه جدید';
+$labels['filteradd'] = 'اÙزودن پالایه';
+$labels['filterdel'] = 'حذ٠پالایه';
+$labels['moveup'] = 'انتقال به بالا';
+$labels['movedown'] = 'انتقال به پایین';
+$labels['filterallof'] = 'مطابقت همه قوانین ذیل';
+$labels['filteranyof'] = 'مطابقت هر کدام از قوانین ذیل';
+$labels['filterany'] = 'همه پیام ها';
+$labels['filtercontains'] = 'دربرگیرنده';
+$labels['filternotcontains'] = 'بدون';
+$labels['filteris'] = 'برابر است با';
+$labels['filterisnot'] = 'برابر نیست با';
+$labels['filterexists'] = 'وجود دارد';
+$labels['filternotexists'] = 'وجود ندارد';
+$labels['filtermatches'] = 'با عبارت تطابق دارد';
+$labels['filternotmatches'] = 'با عبارت تطابق ندارد';
+$labels['filterregex'] = 'با عبارت عمومی تطابق دارد';
+$labels['filternotregex'] = 'با عبارت عمومی تطابق ندارد';
+$labels['filterunder'] = 'زیر';
+$labels['filterover'] = 'بالا';
+$labels['addrule'] = 'اÙزودن قانون';
+$labels['delrule'] = 'حذ٠قانون';
+$labels['messagemoveto'] = 'انتقال پیام به';
+$labels['messageredirect'] = 'بازگردانی پیام به';
+$labels['messagecopyto'] = 'رونوشت پیام به';
+$labels['messagesendcopy'] = 'ارسال رونوشت پیام به';
+$labels['messagereply'] = 'پاسخ همراه پیام';
+$labels['messagedelete'] = 'حذ٠پیام';
+$labels['messagediscard'] = 'دور ریختن با پیام';
+$labels['messagekeep'] = 'پیام را در صندوق ورودی نگه دار';
+$labels['messagesrules'] = 'برای  صندوق ورودی:';
+$labels['messagesactions'] = '...انجام اعمال ذیل:';
+$labels['add'] = 'اÙزودن';
+$labels['del'] = 'حذÙ';
+$labels['sender'] = 'Ùرستنده';
+$labels['recipient'] = 'گیرنده';
+$labels['vacationdays'] = 'پیام ها در Ú†Ù‡ مواقعی Ùرستاده شدند (در روزهای):';
+$labels['vacationinterval'] = 'مواقعی که پیام‌ها ارسال می‌شوند:';
+$labels['vacationreason'] = 'بدنه پیام (علت مساÙرت):';
+$labels['vacationsubject'] = 'موضوع پیام:';
+$labels['days'] = 'روزها';
+$labels['seconds'] = 'ثانیه‌ها';
+$labels['rulestop'] = 'توق٠قوانین ارزیابی';
+$labels['enable'] = 'Ùعال/غیرÙعال‌سازی';
+$labels['filterset'] = 'مجموعه پالایه‌ها';
+$labels['filtersets'] = 'مجموعه‌های پالایه‌ها';
+$labels['filtersetadd'] = 'اÙزودن مجموعه پالایه‌ها';
+$labels['filtersetdel'] = 'حذ٠مجموعه پالایه‌های جاری';
+$labels['filtersetact'] = 'Ùعال کردن مجموعه پالایه‌های جاری';
+$labels['filtersetdeact'] = 'غیرÙعال کردن مجموعه پالایه‌های جاری';
+$labels['filterdef'] = 'تعری٠پالایه';
+$labels['filtersetname'] = 'نام مجموعه پالایه‌ها';
+$labels['newfilterset'] = 'مجموعه پالایه‌های جدید';
+$labels['active'] = 'Ùعال';
+$labels['none'] = 'هیچ‌کدام';
+$labels['fromset'] = 'از مجموعه';
+$labels['fromfile'] = 'از پرونده';
+$labels['filterdisabled'] = 'پالایه غیرÙعال شد';
+$labels['countisgreaterthan'] = 'تعداد بیشتر است از';
+$labels['countisgreaterthanequal'] = 'تعداد بیشتر یا مساوی است با';
+$labels['countislessthan'] = 'تعداد کمتر است از';
+$labels['countislessthanequal'] = 'تعداد کمتر یا مساوی است با';
+$labels['countequals'] = 'تعداد مساوی است با';
+$labels['countnotequals'] = 'تعداد برابر نیست با';
+$labels['valueisgreaterthan'] = 'مقدار بیشتر است از';
+$labels['valueisgreaterthanequal'] = 'مقدار بیشتر یا مساوی است با';
+$labels['valueislessthan'] = 'مقدار کمتر است از';
+$labels['valueislessthanequal'] = 'مقدار کمتر یا مساوی است با';
+$labels['valueequals'] = 'مقدار مساوی است با';
+$labels['valuenotequals'] = 'مقدار برابر نیست با';
+$labels['setflags'] = 'انتخاب پرچم‌ها برای پیام';
+$labels['addflags'] = 'اÙزودن پرچم‌ها برای پیام';
+$labels['removeflags'] = 'حذ٠پرچم‌ها از پیام';
+$labels['flagread'] = 'خوانده‌‌شده';
+$labels['flagdeleted'] = 'حذ٠شده';
+$labels['flaganswered'] = 'جواب داده شده';
+$labels['flagflagged'] = 'پرچم‌دار';
+$labels['flagdraft'] = 'پیش‌نویس';
+$labels['setvariable'] = 'تنظیم متغیر';
+$labels['setvarname'] = 'نام متغییر';
+$labels['setvarvalue'] = 'مقدار متغیر:';
+$labels['setvarmodifiers'] = 'اصلاح:';
+$labels['varlower'] = 'حرو٠کوچک';
+$labels['varupper'] = 'حرو٠بزرگ';
+$labels['varlowerfirst'] = 'حر٠اول کوچک';
+$labels['varupperfirst'] = 'حر٠اول بزرگ';
+$labels['varquotewildcard'] = 'نقل قول کاراکترهای خاص';
+$labels['varlength'] = 'طول';
+$labels['notify'] = 'ارسال تذکر';
+$labels['notifytarget'] = 'مقصد آگاه‌سازی:';
+$labels['notifymessage'] = 'متن آگاه‌سازی (تختیاری):';
+$labels['notifyoptions'] = 'گزینه‌های آگاه‌سازی (اختیاری):';
+$labels['notifyfrom'] = 'Ùرستنده آگاه‌سازی (اختیاری):';
+$labels['notifyimportance'] = 'اهمیت:';
+$labels['notifyimportancelow'] = 'Ú©Ù…';
+$labels['notifyimportancenormal'] = 'معمولی';
+$labels['notifyimportancehigh'] = 'زیاد';
+$labels['notifymethodmailto'] = 'رایانامه';
+$labels['notifymethodtel'] = 'تلÙÙ†';
+$labels['notifymethodsms'] = 'پیامک';
+$labels['filtercreate'] = 'ایجاد پالایه';
+$labels['usedata'] = 'استÙاده از داده ذیل در پالایه:';
+$labels['nextstep'] = 'مرحله بعدی';
+$labels['...'] = '...';
+$labels['currdate'] = 'تاریخ جاری';
+$labels['datetest'] = 'تاریخ';
+$labels['dateheader'] = 'سربرگ:';
+$labels['year'] = 'سال';
+$labels['month'] = 'ماه';
+$labels['day'] = 'روز';
+$labels['date'] = 'تاریخ (yyyy-mm-dd)';
+$labels['julian'] = 'تاریخ (میلادی)';
+$labels['hour'] = 'ساعت';
+$labels['minute'] = 'دقیقه';
+$labels['second'] = 'ثانیه';
+$labels['time'] = 'ساعت (hh:mm:ss)';
+$labels['iso8601'] = 'تاریخ (ISO8601)';
+$labels['std11'] = 'تاریخ (RFC2822)';
+$labels['zone'] = 'منطقه زمانی';
+$labels['weekday'] = 'روز Ù‡Ùته (0-6)';
+$labels['advancedopts'] = 'گزینه‌های پیشرÙته';
+$labels['body'] = 'بدنه';
+$labels['address'] = 'نشانی';
+$labels['envelope'] = 'پاکت';
+$labels['modifier'] = 'تغییر دهنده:';
+$labels['text'] = 'متن‌';
+$labels['undecoded'] = 'کد نشده (خام)';
+$labels['contenttype'] = 'نوع محتوا';
+$labels['modtype'] = 'نوع';
+$labels['allparts'] = 'همه';
+$labels['domain'] = 'دامنه';
+$labels['localpart'] = 'قسمت محلی';
+$labels['user'] = 'کاربر';
+$labels['detail'] = 'جزئیات';
+$labels['comparator'] = 'مقایسه:';
+$labels['default'] = 'پیش‌Ùرض';
+$labels['octet'] = 'سخت (octet)';
+$labels['asciicasemap'] = 'حساس به حروه کوچک و بزرگ (ascii-casemap)';
+$labels['asciinumeric'] = 'عددی (ascii-numeric)';
+$labels['index'] = 'Ùهرست:';
+$labels['indexlast'] = 'به عقب';
+$labels['vacation'] = 'مساÙرت';
+$labels['vacation.reply'] = 'پاسخ به یغام';
+$labels['vacation.advanced'] = 'تنظیمات پیشرÙته';
+$labels['vacation.subject'] = 'موضوع';
+$labels['vacation.body'] = 'بدنه';
+$labels['vacation.start'] = 'شروع تعطیلی';
+$labels['vacation.end'] = 'پایان تعطیلی';
+$labels['vacation.status'] = 'وضعیت';
+$labels['vacation.on'] = 'روشن';
+$labels['vacation.off'] = 'خاموش';
+$labels['vacation.interval'] = 'Ùاصله پاسخ';
+$labels['vacation.after'] = 'قرار دادن قانون مساÙرت بعد از';
+$labels['vacation.saving'] = 'ذخیره داده‌ها...';
+$labels['vacation.action'] = 'کنش عملکرد ورودی';
+$labels['vacation.keep'] = 'نگه داشتن';
+$labels['vacation.discard'] = 'دور انداختن';
+$labels['vacation.redirect'] = 'بازگردانی به';
+$labels['vacation.copy'] = 'ارسال رونوشت به';
+$labels['arialabelfiltersetactions'] = 'کنش‌های مجموعه پالایه';
+$labels['arialabelfilteractions'] = 'کنش‌های پالایه';
+$labels['arialabelfilterform'] = 'خصوصیات پالایه';
+$labels['ariasummaryfilterslist'] = 'Ùهرست پالایه‌ها';
+$labels['ariasummaryfiltersetslist'] = 'Ùهرست مجموعه پالایه‌ها';
+$labels['filterstitle'] = 'ویرایش پالایه‌های پست ورودی';
+$labels['vacationtitle'] = 'ویرایش نقش بیرون از دÙتر';
+$messages['filterunknownerror'] = 'خطای سرور نامعلوم.';
+$messages['filterconnerror'] = 'ناتوانی در اتصال به سرور.';
+$messages['filterdeleteerror'] = 'ناتوانی در حذ٠پالایه. خطای سرور رخ داد.';
+$messages['filterdeleted'] = 'پالایه با کام‌یابی حذ٠شد.';
+$messages['filtersaved'] = 'پالایه با کام‌یابی ذخیره شد.';
+$messages['filtersaveerror'] = 'ناتوانی در ذخیره Ùیلتر. خطای سرور رخ داد.';
+$messages['filterdeleteconfirm'] = 'آیا مطمئن به حذ٠پالایه انتخاب شده هستید؟';
+$messages['ruledeleteconfirm'] = 'آیا مطمئن هستید که می خواهید قانون انتخاب شده را حذ٠کنید؟';
+$messages['actiondeleteconfirm'] = 'آیا مطمئن هستید که می خواهید عمل انتخاب شده را حذ٠کنید.';
+$messages['forbiddenchars'] = 'حرو٠ممنوعه در Ùیلد.';
+$messages['cannotbeempty'] = 'Ùیلد نمی تواند خالی باشد.';
+$messages['ruleexist'] = 'پالایه با این نام مشخص وجود دارد.';
+$messages['setactivateerror'] = 'ناتوان در Ùعال کردن مجموعه پالایه‌ها انتخاب شده. خطای سرور رخ داد.';
+$messages['setdeactivateerror'] = 'ناتوان در غیرÙعال کردن مجموعه پالایه‌ها انتخاب شده. خطای سرور رخ داد.';
+$messages['setdeleteerror'] = 'ناتوان در حذ٠مجموعه پالایه‌ها انتخاب شده. خطای سرور رخ داد.';
+$messages['setactivated'] = 'مجموعه پالایه‌ها با کام‌یابی Ùعال شد.';
+$messages['setdeactivated'] = 'مجموعه پالایه‌ها با کام‌یابی غیرÙعال شد.';
+$messages['setdeleted'] = 'مجموعه پالایه‌ها با کام‌یابی حذ٠شد.';
+$messages['setdeleteconfirm'] = 'آیا مطمئن هستید که می‌خواهید مجموعه پالایه‌ها انتخاب شده را حذ٠کنید؟';
+$messages['setcreateerror'] = 'ناتوانی در ایجاد مجموعه پالایه‌ها. خطای سرور رخ داد.';
+$messages['setcreated'] = 'مجموعه پالایه‌ها با کام‌یابی ایجاد شد.';
+$messages['activateerror'] = 'ناتوانی در Ùعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
+$messages['deactivateerror'] = 'ناتوانی در غیرÙعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
+$messages['deactivated'] = 'پالایه(ها) با کام‌یابی Ùعال شدند.';
+$messages['activated'] = 'پالایه(ها) با کام‌یابی غیرÙعال شدند.';
+$messages['moved'] = 'پالایه با کام‌یابی منتقل شد.';
+$messages['moveerror'] = 'ناتوانی در انتقال پالایه انتخاب شده. خطای سرور رخ داد.';
+$messages['nametoolong'] = 'نام خیلی بلند.';
+$messages['namereserved'] = 'نام رزرو شده.';
+$messages['setexist'] = 'مجموعه در حال حاضر موجود است.';
+$messages['nodata'] = 'حداقل باید یک موقعیت باید انتخاب شود.';
+$messages['invaliddateformat'] = 'قالب تاریخ اشتباه';
+$messages['saveerror'] = 'ناتوانی در ذخیره اطلاعات. خطای سرور رخ داد.';
+$messages['vacationsaved'] = 'اطلاعات مساÙرت با کام‌یابی ذخیره شد.';
+$messages['emptyvacationbody'] = 'متن پیام تعطیلی لازم است!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,230 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Suodattimet';
+$labels['managefilters'] = 'Hallitse saapuvan sähköpostin suodattimia';
+$labels['filtername'] = 'Suodattimen nimi';
+$labels['newfilter'] = 'Uusi suodatin';
+$labels['filteradd'] = 'Lisää suodatin';
+$labels['filterdel'] = 'Poista suodatin';
+$labels['moveup'] = 'Siirrä ylös';
+$labels['movedown'] = 'Siirrä alas';
+$labels['filterallof'] = 'Täsmää kaikkiin seuraaviin sääntöihin';
+$labels['filteranyof'] = 'Täsmää mihin tahansa seuraavista säännöistä';
+$labels['filterany'] = 'Kaikki viestit';
+$labels['filtercontains'] = 'Sisältää';
+$labels['filternotcontains'] = 'Ei sisällä';
+$labels['filteris'] = 'on samanlainen kuin';
+$labels['filterisnot'] = 'ei ole samanlainen kuin';
+$labels['filterexists'] = 'on olemassa';
+$labels['filternotexists'] = 'ei ole olemassa';
+$labels['filtermatches'] = 'vastaa lauseketta';
+$labels['filternotmatches'] = 'ei vastaa lauseketta';
+$labels['filterregex'] = 'vastaa säännöllistä lauseketta';
+$labels['filternotregex'] = 'ei vastaa säännöllistä lauseketta';
+$labels['filterunder'] = 'alle';
+$labels['filterover'] = 'yli';
+$labels['addrule'] = 'Lisää sääntö';
+$labels['delrule'] = 'Poista sääntö';
+$labels['messagemoveto'] = 'Siirrä viesti';
+$labels['messageredirect'] = 'Lähetä viesti edelleen';
+$labels['messagecopyto'] = 'Kopioi viesti';
+$labels['messagesendcopy'] = 'Lähetä kopio viestistä';
+$labels['messagereply'] = 'Vastaa viestillä';
+$labels['messagedelete'] = 'Poista viesti';
+$labels['messagediscard'] = 'Hylkää viestillä';
+$labels['messagekeep'] = 'Säilytä viesti saapuneissa';
+$labels['messagesrules'] = 'Saapuville viesteille:';
+$labels['messagesactions'] = '...suorita seuraavat toiminnot:';
+$labels['add'] = 'Lisää';
+$labels['del'] = 'Poista';
+$labels['sender'] = 'Lähettäjä';
+$labels['recipient'] = 'Vastaanottaja';
+$labels['vacationaddr'] = 'Sähköpostiosoitteeni:';
+$labels['vacationdays'] = 'Viestien lähetysväli (päivissä):';
+$labels['vacationinterval'] = 'Viestien lähetysväli:';
+$labels['vacationreason'] = 'Viestin runko (loman syy):';
+$labels['vacationfrom'] = 'Vastauksen lähetysosoite:';
+$labels['vacationsubject'] = 'Viestin aihe:';
+$labels['days'] = 'päivää';
+$labels['seconds'] = 'sekuntia';
+$labels['rulestop'] = 'Lopeta sääntöjen arviointi';
+$labels['enable'] = 'Ota käyttöön/poista käytöstä';
+$labels['filterset'] = 'Suodattimien asetus';
+$labels['filtersets'] = 'Suodattimen asetus';
+$labels['filtersetadd'] = 'Lisää suodatinasetus';
+$labels['filtersetdel'] = 'Poista nykyiset suodatinasetukset';
+$labels['filtersetact'] = 'Aktivoi nykyinen suodattimien asetus';
+$labels['filtersetdeact'] = 'Poista käytöstä nykyinen suodattimien asetus';
+$labels['filterseteditraw'] = 'Muokkaa suodatinasetusta';
+$labels['filterdef'] = 'Suodattimen määrittely';
+$labels['filtersetname'] = 'Suodattimien asetuksen nimi';
+$labels['newfilterset'] = 'Uusi suodatinasetus';
+$labels['active'] = 'aktiivinen';
+$labels['none'] = 'Ei mikään';
+$labels['fromset'] = 'sarjasta';
+$labels['fromfile'] = 'tiedostosta';
+$labels['filterdisabled'] = 'Suodatin poistettu käytöstä';
+$labels['countisgreaterthan'] = 'määrä on suurempi kuin';
+$labels['countisgreaterthanequal'] = 'määrä on suurempi tai yhtä suuri kuin';
+$labels['countislessthan'] = 'määrä on vähemmän kuin';
+$labels['countislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
+$labels['countequals'] = 'määrä on yhtä suuri kuin';
+$labels['countnotequals'] = 'määrä ei ole yhtä suuri kuin';
+$labels['valueisgreaterthan'] = 'arvo on suurempi kuin';
+$labels['valueisgreaterthanequal'] = 'arvo on suurempi kuin tai yhtä suuri kuin';
+$labels['valueislessthan'] = 'arvo on vähemmän kuin';
+$labels['valueislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
+$labels['valueequals'] = 'arvo on yhtä suuri kuin';
+$labels['valuenotequals'] = 'arvo ei ole yhtä suuri kuin';
+$labels['setflags'] = 'Aseta liput viestiin';
+$labels['addflags'] = 'Lisää liput viestiin';
+$labels['removeflags'] = 'Poista liput viestistä';
+$labels['flagread'] = 'Lue';
+$labels['flagdeleted'] = 'Poistettu';
+$labels['flaganswered'] = 'Vastattu';
+$labels['flagflagged'] = 'Liputettu';
+$labels['flagdraft'] = 'Luonnos';
+$labels['setvariable'] = 'Aseta muuttuja';
+$labels['setvarname'] = 'Muuttujan nimi:';
+$labels['setvarvalue'] = 'Muuttujan arvo:';
+$labels['setvarmodifiers'] = 'Muuntimet:';
+$labels['varlower'] = 'pienellä kirjoitettu';
+$labels['varupper'] = 'isolla kirjoitettu';
+$labels['varlowerfirst'] = 'ensimmäinen merkki pienellä kirjoitettuna';
+$labels['varupperfirst'] = 'ensimmäinen merkki isolla kirjoitettuna';
+$labels['varquotewildcard'] = 'lainaa erikoismerkit';
+$labels['varlength'] = 'pituus';
+$labels['notify'] = 'Lähetä ilmoitus';
+$labels['notifytarget'] = 'Ilmoituksen kohde:';
+$labels['notifymessage'] = 'Ilmoituksen viesti (valinnainen):';
+$labels['notifyoptions'] = 'Ilmoituksen valinnat (valinnainen)';
+$labels['notifyfrom'] = 'Ilmoituksen lähettäjä (valinnainen):';
+$labels['notifyimportance'] = 'Tärkeysaste:';
+$labels['notifyimportancelow'] = 'matala';
+$labels['notifyimportancenormal'] = 'normaali';
+$labels['notifyimportancehigh'] = 'korkea';
+$labels['notifymethodmailto'] = 'Sähköposti';
+$labels['notifymethodtel'] = 'Puhelin';
+$labels['notifymethodsms'] = 'Tekstiviesti';
+$labels['filtercreate'] = 'Luo suodatin';
+$labels['usedata'] = 'Käytä seuraavaa dataa suodattimessa:';
+$labels['nextstep'] = 'Seuraava vaihe';
+$labels['...'] = '...';
+$labels['string'] = 'Merkkijono';
+$labels['currdate'] = 'Nykyinen päivämäärä';
+$labels['datetest'] = 'Päivämäärä';
+$labels['dateheader'] = 'otsikko:';
+$labels['year'] = 'vuosi';
+$labels['month'] = 'kuukausi';
+$labels['day'] = 'päivä';
+$labels['date'] = 'päivämäärä (vvvv-kk-pp)';
+$labels['julian'] = 'päivämäärä (juliaaninen)';
+$labels['hour'] = 'tunti';
+$labels['minute'] = 'minuutti';
+$labels['second'] = 'sekunti';
+$labels['time'] = 'aika (hh:mm:ss)';
+$labels['iso8601'] = 'päivämäärä (ISO8601)';
+$labels['std11'] = 'päivämäärä (RFC2882)';
+$labels['zone'] = 'aikavyöhyke';
+$labels['weekday'] = 'viikonpäivä (0-6)';
+$labels['advancedopts'] = 'Lisävalinnat';
+$labels['body'] = 'Runko';
+$labels['address'] = 'osoite';
+$labels['envelope'] = 'kirjekuori';
+$labels['modifier'] = 'muuntaja:';
+$labels['text'] = 'teksti';
+$labels['undecoded'] = 'dekoodaamaton (raaka)';
+$labels['contenttype'] = 'sisällön tyyppi';
+$labels['modtype'] = 'tyyppi:';
+$labels['allparts'] = 'kaikki';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'paikallinen osa';
+$labels['user'] = 'käyttäjä';
+$labels['detail'] = 'yksityiskohta';
+$labels['comparator'] = 'vertailija:';
+$labels['default'] = 'oletus';
+$labels['octet'] = 'tarkka (tavuina)';
+$labels['asciicasemap'] = 'kirjainkoosta riippumaton (ascii-merkistö)';
+$labels['asciinumeric'] = 'numeerinen (ascii-numerot)';
+$labels['indexlast'] = 'taaksepäin';
+$labels['vacation'] = 'Loma';
+$labels['vacation.reply'] = 'Vastausviesti';
+$labels['vacation.advanced'] = 'Lisäasetukset';
+$labels['vacation.from'] = 'Vastauksen lähetysosoite';
+$labels['vacation.subject'] = 'Aihe';
+$labels['vacation.body'] = 'Sisältö';
+$labels['vacation.start'] = 'Loman alku';
+$labels['vacation.end'] = 'Loman loppu';
+$labels['vacation.status'] = 'Tila';
+$labels['vacation.on'] = 'Päällä';
+$labels['vacation.off'] = 'Pois';
+$labels['vacation.addresses'] = 'Omat osoitteeni';
+$labels['vacation.interval'] = 'Vastausväli';
+$labels['vacation.after'] = 'Lisää lomavastaaja tämän säännön jälkeen';
+$labels['vacation.saving'] = 'Tallennetaan tietoja...';
+$labels['vacation.action'] = 'Toiminto saapuvalle viestille';
+$labels['vacation.keep'] = 'Säilytä';
+$labels['vacation.discard'] = 'Hylkää';
+$labels['vacation.redirect'] = 'Ohjaa uudelleen osoitteeseen';
+$labels['vacation.copy'] = 'Lähetä kopio osoitteeseen';
+$labels['filladdresses'] = 'Lisää kaikki osoitteeni';
+$labels['arialabelfiltersetactions'] = 'Suodatinasetuksen toiminnot';
+$labels['ariasummaryfilterslist'] = 'Suodatinlista';
+$labels['ariasummaryfiltersetslist'] = 'Suodatinasetuslista';
+$labels['filterstitle'] = 'Muokkaa saapuvan postin suodattimia';
+$labels['vacationtitle'] = 'Muokkaa poissaolosääntöä';
+$labels['message'] = 'Viesti';
+$labels['duplicate'] = 'on kopio';
+$labels['notduplicate'] = 'ei ole kopio';
+$labels['duplicate.seconds'] = 'aikakatkaisu (sekuntia):';
+$messages['filterunknownerror'] = 'Tuntematon palvelinvirhe.';
+$messages['filterconnerror'] = 'Yhteys palvelimeen epäonnistui.';
+$messages['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Tapahtui palvelinvirhe.';
+$messages['filterdeleted'] = 'Suodatin poistettu onnistuneesti.';
+$messages['filtersaved'] = 'Suodatin tallennettu onnistuneesti.';
+$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui palvelinvirheen vuoksi.';
+$messages['filterformerror'] = 'Suodatinlomake sisältää virheitä.';
+$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?';
+$messages['ruledeleteconfirm'] = 'Haluatko varmasti poistaa valitun säännön?';
+$messages['actiondeleteconfirm'] = 'Haluatko varmasti poistaa valitun toimenpiteen?';
+$messages['forbiddenchars'] = 'Virheellisiä merkkejä kentässä.';
+$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.';
+$messages['ruleexist'] = 'Suodatin samalla nimellä on jo olemassa.';
+$messages['setactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu tallentaa.';
+$messages['setdeactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu kytkeä pois päältä.';
+$messages['setdeleteerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu poistaa.';
+$messages['setactivated'] = 'Suodatinasetukset kytketty päälle.';
+$messages['setdeactivated'] = 'Suodatinasetukset kytketty pois päältä.';
+$messages['setdeleted'] = 'Suodatinasetukset poistettu.';
+$messages['setupdated'] = 'Suodatinasetukset päivitetty.';
+$messages['setdeleteconfirm'] = 'Oletko varma että haluat poistaa valitut suodatinasetukset?';
+$messages['setcreateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu luoda.';
+$messages['setcreated'] = 'Suodatinasetukset luotiin onnistuneesti.';
+$messages['activateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu ottaa käyttöön.';
+$messages['deactivateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu kytkeä pois käytöstä.';
+$messages['deactivated'] = 'Suodattimet kytketty pois käytöstä.';
+$messages['activated'] = 'Suodattimet otettu käyttöön.';
+$messages['moved'] = 'Suodatin siirretty onnistuneesti.';
+$messages['moveerror'] = 'Palvelinvirheestä johtuen suodatinta ei voitu siirtää.';
+$messages['nametoolong'] = 'Nimi on liian pitkä.';
+$messages['namereserved'] = 'Varattu nimi.';
+$messages['setexist'] = 'Suodatinasetus on jo olemassa.';
+$messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.';
+$messages['vacationsaved'] = 'Lomatiedot tallennettu onnistuneesti.';
+$messages['emptyvacationbody'] = 'Lomaviestin sisältö vaaditaan!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,225 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtur';
+$labels['managefilters'] = 'Umsit mótakandi teldupost filtur';
+$labels['filtername'] = 'Navn á filtri';
+$labels['newfilter'] = 'Nýtt filtur';
+$labels['filteradd'] = 'Nýtt filtur';
+$labels['filterdel'] = 'Strika filtur';
+$labels['moveup'] = 'Flyt upp';
+$labels['movedown'] = 'Flyt niður';
+$labels['filterallof'] = 'samsvarar allar fylgjandi reglur';
+$labels['filteranyof'] = 'samsvarar onkrar av fylgjandi reglum';
+$labels['filterany'] = 'øll boð';
+$labels['filtercontains'] = 'inniheldur';
+$labels['filternotcontains'] = 'inniheldur ikki';
+$labels['filteris'] = 'er tað sama sum';
+$labels['filterisnot'] = 'er ikki tað sama sum';
+$labels['filterexists'] = 'er til';
+$labels['filternotexists'] = 'er ikki til';
+$labels['filtermatches'] = 'samsvarar við orðafelli';
+$labels['filternotmatches'] = 'Samsvarar ikki við orðafelli';
+$labels['filterregex'] = 'Samsvarar við "regular expression"';
+$labels['filternotregex'] = 'Samsvarar ikki við "regular expression"';
+$labels['filterunder'] = 'undur';
+$labels['filterover'] = 'yvir';
+$labels['addrule'] = 'Stovna regul';
+$labels['delrule'] = 'Strika regul';
+$labels['messagemoveto'] = 'Flyt boð til';
+$labels['messageredirect'] = 'Leið boð til';
+$labels['messagecopyto'] = 'Tvítak boð til';
+$labels['messagesendcopy'] = 'Send boð avrit til';
+$labels['messagereply'] = 'Svara við boðum';
+$labels['messagedelete'] = 'Strika boð';
+$labels['messagediscard'] = 'Strika boð við boðum';
+$labels['messagekeep'] = 'Goym boð í postkassa';
+$labels['messagesrules'] = 'Fyri móttiknan post:';
+$labels['messagesactions'] = '...koyr fylgjandi gerðir';
+$labels['add'] = 'Legg aftrat';
+$labels['del'] = 'Strika';
+$labels['sender'] = 'Avsendari';
+$labels['recipient'] = 'Móttakari';
+$labels['vacationdays'] = 'Hvussu ofta skal sendast (í døgum):';
+$labels['vacationinterval'] = 'Hvussu ofta skulu boðini sendast:';
+$labels['vacationreason'] = 'Boð innihald (feriu orsøk):';
+$labels['vacationfrom'] = 'Svara sendara bústaði:';
+$labels['vacationsubject'] = 'Evni á boðum:';
+$labels['days'] = 'dagar';
+$labels['seconds'] = 'sekund';
+$labels['rulestop'] = 'Steðga við at eftirmeta reglur';
+$labels['enable'] = 'Tendra/Sløkk';
+$labels['filterset'] = 'Sílu set';
+$labels['filtersets'] = 'Sílu sett';
+$labels['filtersetadd'] = 'Stovna sílu sett';
+$labels['filtersetdel'] = 'Strika verandi sílu sett';
+$labels['filtersetact'] = 'Tendra verandi sílu sett';
+$labels['filtersetdeact'] = 'Sløkk verandi sílu sett';
+$labels['filterdef'] = 'Sílu avmarking ';
+$labels['filtersetname'] = 'Navn á sílu sett';
+$labels['newfilterset'] = 'Nýtt sílu sett';
+$labels['active'] = 'tendra';
+$labels['none'] = 'einki';
+$labels['fromset'] = 'frá sett';
+$labels['fromfile'] = 'frá fílu';
+$labels['filterdisabled'] = 'Síla óvirkin';
+$labels['countisgreaterthan'] = 'talið er hægri enn';
+$labels['countisgreaterthanequal'] = 'talið er stórri ella tað sama sum';
+$labels['countislessthan'] = 'talið er minni enn';
+$labels['countislessthanequal'] = 'talið er minni enn ella tað sama sum';
+$labels['countequals'] = 'talið er tað sama sum';
+$labels['countnotequals'] = 'talið er ikki tað sama sum';
+$labels['valueisgreaterthan'] = 'virði er hægri enn';
+$labels['valueisgreaterthanequal'] = 'virði er hægri enn ella tað sama sum';
+$labels['valueislessthan'] = 'virði er minnni enn';
+$labels['valueislessthanequal'] = 'virði er minni enn ella tað sama sum';
+$labels['valueequals'] = 'virði er tað sama sum';
+$labels['valuenotequals'] = 'virði er ikki tað sama sum';
+$labels['setflags'] = 'Set mørk á boðini';
+$labels['addflags'] = 'Legg mørk á boðini';
+$labels['removeflags'] = 'Strika mørk frá boðunum';
+$labels['flagread'] = 'Les';
+$labels['flagdeleted'] = 'Strika';
+$labels['flaganswered'] = 'Svara';
+$labels['flagflagged'] = 'Markera';
+$labels['flagdraft'] = 'Kladda';
+$labels['setvariable'] = 'Set variabu';
+$labels['setvarname'] = 'Navn á variabli';
+$labels['setvarvalue'] = 'Virði á variabli';
+$labels['setvarmodifiers'] = 'Avmarkari:';
+$labels['varlower'] = 'við lítlum';
+$labels['varupper'] = 'við stórum';
+$labels['varlowerfirst'] = 'fyrsti bókstavur við lítlum';
+$labels['varupperfirst'] = 'fyrsti bókstavur við stórum';
+$labels['varquotewildcard'] = 'kvota fyri serlig tekin';
+$labels['varlength'] = 'longd';
+$labels['notify'] = 'send kunngerð';
+$labels['notifytarget'] = 'Kunngerð mál:';
+$labels['notifymessage'] = 'Boð í kunngerð (ikki oblikatorist):';
+$labels['notifyoptions'] = 'Kunngerðis møguleikar (valmøguligt):';
+$labels['notifyfrom'] = 'Sendari av kunngerð (valfríur):';
+$labels['notifyimportance'] = 'Týdningur:';
+$labels['notifyimportancelow'] = 'lágt';
+$labels['notifyimportancenormal'] = 'vanligt';
+$labels['notifyimportancehigh'] = 'høgt';
+$labels['notifymethodmailto'] = 'Teldupost';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Stovna sílu';
+$labels['usedata'] = 'Brúka fylgjandi dátu í sílu';
+$labels['nextstep'] = 'Næsta stig';
+$labels['...'] = '...';
+$labels['currdate'] = 'dagsins dato';
+$labels['datetest'] = 'Dato';
+$labels['dateheader'] = 'Teksthøvd ';
+$labels['year'] = 'ár';
+$labels['month'] = 'mánið';
+$labels['day'] = 'dagur';
+$labels['date'] = 'dato (yyyy-mm-dd)';
+$labels['julian'] = 'dato (julianskur)';
+$labels['hour'] = 'tími';
+$labels['minute'] = 'minuttur';
+$labels['second'] = 'sekund';
+$labels['time'] = 'klokkan (tt:mm:ss)';
+$labels['iso8601'] = 'dato (ISO8601)';
+$labels['std11'] = 'dato (RFC2822)';
+$labels['zone'] = 'tíðarøki';
+$labels['weekday'] = 'vikudagur (0-6)';
+$labels['advancedopts'] = 'Víðkaðir valmøguleikar';
+$labels['body'] = 'Innihald';
+$labels['address'] = 'Bústaður';
+$labels['envelope'] = 'brævbjálvi ';
+$labels['modifier'] = 'Broytari:';
+$labels['text'] = 'tekstur';
+$labels['undecoded'] = 'umskriva (raw)';
+$labels['contenttype'] = 'innihalds slag';
+$labels['modtype'] = 'slag:';
+$labels['allparts'] = 'alt';
+$labels['domain'] = 'økisnavn';
+$labels['localpart'] = 'heima partur';
+$labels['user'] = 'brúkari';
+$labels['detail'] = 'detaljur';
+$labels['comparator'] = 'Comparator:';
+$labels['default'] = 'vanligt';
+$labels['octet'] = 'strangt (octet)';
+$labels['asciicasemap'] = 'stavbundin (asciii-casemap)';
+$labels['asciinumeric'] = 'tøl (ascii-numeric)';
+$labels['index'] = 'skrá:';
+$labels['indexlast'] = 'aftureftir';
+$labels['vacation'] = 'Feriu';
+$labels['vacation.reply'] = 'Svar innihald';
+$labels['vacation.advanced'] = 'Víðkaðir valmøguleikar';
+$labels['vacation.from'] = 'Svara sendara bústaði';
+$labels['vacation.subject'] = 'Evni';
+$labels['vacation.body'] = 'Innihald';
+$labels['vacation.start'] = 'Feriu byrjan';
+$labels['vacation.end'] = 'Feriu endi';
+$labels['vacation.status'] = 'Støða';
+$labels['vacation.on'] = 'Tendra';
+$labels['vacation.off'] = 'Sløkt';
+$labels['vacation.interval'] = 'Svar millumbil';
+$labels['vacation.after'] = 'Tendra feriu reglar eftir';
+$labels['vacation.saving'] = 'Goymur dáta...';
+$labels['vacation.action'] = 'Ger fyri móttikin boð';
+$labels['vacation.keep'] = 'Goym';
+$labels['vacation.discard'] = 'Strika';
+$labels['vacation.redirect'] = 'Leið ti';
+$labels['vacation.copy'] = 'Send avrit ti';
+$labels['filladdresses'] = 'Fyll við øllum mínum bústaðum';
+$labels['arialabelfiltersetactions'] = 'Sílu sett gerðir';
+$labels['arialabelfilteractions'] = 'Sílu gerðir';
+$labels['arialabelfilterform'] = 'Sílu skilvísi';
+$labels['ariasummaryfilterslist'] = 'Listi yvir sílur';
+$labels['ariasummaryfiltersetslist'] = 'Skrá av sílu sett';
+$labels['filterstitle'] = 'Broyt mótakandi sílur fyri móttiknan post';
+$labels['vacationtitle'] = 'Broyt out-of-office regul';
+$messages['filterunknownerror'] = 'Ókendur ambætara feilur';
+$messages['filterconnerror'] = 'Einki samband við ambætara.';
+$messages['filterdeleteerror'] = 'Tað bar ikki til at strika sílu. Ambætara feilur kom fyri';
+$messages['filterdeleted'] = 'Sílan var strika';
+$messages['filtersaved'] = 'Sílan var goymd';
+$messages['filtersaveerror'] = 'Tað ber ikki til at goyma valdu sílur. Ambætara feilur kom fyri.';
+$messages['filterdeleteconfirm'] = 'Ert tú vísur í at tú vilt strika valdu sílu?';
+$messages['ruledeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valda regul?';
+$messages['actiondeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valdu gerð?';
+$messages['forbiddenchars'] = 'Óloyvd tekin í feltinum.';
+$messages['cannotbeempty'] = 'Felt kann ikki verða tómt';
+$messages['ruleexist'] = 'Síla við givna navni er longu til';
+$messages['setactivateerror'] = 'Tað bar ikki til at tendra valdu sílu sett. Ambætara feilur kom fyri.';
+$messages['setdeactivateerror'] = 'Tað bar ikki til at sløkkja valdu sílu sett. Ambætara feilur kom fyri';
+$messages['setdeleteerror'] = 'Tað bar ikki til at strika valdu sílu sett. Ambætara feilur kom fyri.';
+$messages['setactivated'] = 'Síiu sett tendra.';
+$messages['setdeactivated'] = 'Sílu sett sløkt';
+$messages['setdeleted'] = 'Sílu sett var strika';
+$messages['setdeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valdu sílu sett?';
+$messages['setcreateerror'] = 'Tað ber ikki til at stovna sílu sett. Ambætara feilur kom fyri.';
+$messages['setcreated'] = 'Set av sílu stovna.';
+$messages['activateerror'] = 'Tað ber ikki til at tendra valdu sílur. Ambætara feilur kom fyri.';
+$messages['deactivateerror'] = 'Tað ber ikki til at sløkkja valdu sílur. Ambætara feilur kom fyri.';
+$messages['deactivated'] = 'Filtur sløkt';
+$messages['activated'] = 'Filtur tendra.';
+$messages['moved'] = 'Síla flutt.';
+$messages['moveerror'] = 'Tað ber ikki til at flyta valdu sílur. Ambætara feilur kom fyri.';
+$messages['nametoolong'] = 'Navni er ov langt';
+$messages['namereserved'] = 'Reservera navn.';
+$messages['setexist'] = 'Sett er longu til';
+$messages['nodata'] = 'Minst eitt stað má verða valt!';
+$messages['invaliddateformat'] = 'Ógildugt dato ella formulering av dato';
+$messages['saveerror'] = 'Tað bar ikki til at goyma dáta. Ambætara feilur kom fyri.';
+$messages['vacationsaved'] = 'Feriu dáta goymd.';
+$messages['emptyvacationbody'] = 'Innihaldi í feriu boðinum er kraft!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtres';
+$labels['managefilters'] = 'Gérer les filtres de courriels entrants';
+$labels['filtername'] = 'Nom du filtre';
+$labels['newfilter'] = 'Nouveau filtre';
+$labels['filteradd'] = 'Ajouter un filtre';
+$labels['filterdel'] = 'Supprimer le filtre';
+$labels['moveup'] = 'Monter';
+$labels['movedown'] = 'Descendre';
+$labels['filterallof'] = 'correspondant à toutes les règles suivantes';
+$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
+$labels['filterany'] = 'tous les courriels';
+$labels['filtercontains'] = 'contient';
+$labels['filternotcontains'] = 'ne contient pas';
+$labels['filteris'] = 'est égal à';
+$labels['filterisnot'] = 'est différent de';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'n\'existe pas';
+$labels['filtermatches'] = 'correspond à l\'expression';
+$labels['filternotmatches'] = 'ne correspond pas à l\'expression';
+$labels['filterregex'] = 'correspond à l\'expression rationnelle';
+$labels['filternotregex'] = 'ne correspond pas à l\'expression rationnelle';
+$labels['filterunder'] = 'plus petit que';
+$labels['filterover'] = 'plus grand que';
+$labels['addrule'] = 'Ajouter une règle';
+$labels['delrule'] = 'Supprimer une règle';
+$labels['messagemoveto'] = 'Déplacer le courriel vers';
+$labels['messageredirect'] = 'Rediriger le courriel vers';
+$labels['messagecopyto'] = 'Copier le courriel vers';
+$labels['messagesendcopy'] = 'Envoyer une copie du courriel à';
+$labels['messagereply'] = 'Répondre avec le courriel';
+$labels['messagedelete'] = 'Supprimer le courriel';
+$labels['messagediscard'] = 'Rejeter avec le courriel';
+$labels['messagekeep'] = 'Conserver le courriel dans la boîte de réception';
+$labels['messagesrules'] = 'Pour les courriels entrants :';
+$labels['messagesactions'] = '...exécuter les actions suivantes :';
+$labels['add'] = 'Ajouter';
+$labels['del'] = 'Supprimer';
+$labels['sender'] = 'Expéditeur';
+$labels['recipient'] = 'Destinataire';
+$labels['vacationaddr'] = 'Mes adresses courriel :';
+$labels['vacationdays'] = 'Fréquence d\'envoi des courriels (en jours) :';
+$labels['vacationinterval'] = 'Fréquence d\'envoi des courriels :';
+$labels['vacationreason'] = 'Corps du courriel (raison de l\'absence) :';
+$labels['vacationfrom'] = 'Adresse de réponse de l\'expéditeur :';
+$labels['vacationsubject'] = 'Objet du courriel :';
+$labels['days'] = 'jours';
+$labels['seconds'] = 'secondes';
+$labels['rulestop'] = 'Arrêter l\'évaluation des règles';
+$labels['enable'] = 'Activer/désactiver';
+$labels['filterset'] = 'Jeu de filtres';
+$labels['filtersets'] = 'Jeux de filtres';
+$labels['filtersetadd'] = 'Ajouter un jeu de filtres';
+$labels['filtersetdel'] = 'Supprimer le jeu de filtres actuel';
+$labels['filtersetact'] = 'Activer le jeu de filtres actuel';
+$labels['filtersetdeact'] = 'Désactiver le jeu de filtres actuel';
+$labels['filterseteditraw'] = 'Modifier le jeu de filtres';
+$labels['filterdef'] = 'Définition du filtre';
+$labels['filtersetname'] = 'Nom du jeu de filtres';
+$labels['newfilterset'] = 'Nouveau jeu de filtres';
+$labels['active'] = 'activer';
+$labels['none'] = 'aucun';
+$labels['fromset'] = 'à partir du jeu';
+$labels['fromfile'] = 'à partir du fichier';
+$labels['filterdisabled'] = 'Filtre désactivé';
+$labels['countisgreaterthan'] = 'total supérieur à';
+$labels['countisgreaterthanequal'] = 'total supérieur ou égal à';
+$labels['countislessthan'] = 'total inférieur à';
+$labels['countislessthanequal'] = 'total inférieur ou égal à';
+$labels['countequals'] = 'total égal à';
+$labels['countnotequals'] = 'le nombre n\'est pas égal à';
+$labels['valueisgreaterthan'] = 'valeur supérieure à';
+$labels['valueisgreaterthanequal'] = 'valeur supérieure ou égale à';
+$labels['valueislessthan'] = 'valeur inférieure à';
+$labels['valueislessthanequal'] = 'valeur inférieure ou égale à';
+$labels['valueequals'] = 'valeur égale à';
+$labels['valuenotequals'] = 'la valeur n\'est pas égale à';
+$labels['setflags'] = 'Définir les drapeaux pour le courriel';
+$labels['addflags'] = 'Ajouter les drapeaux au courriel';
+$labels['removeflags'] = 'Supprimer les drapeaux du courriel';
+$labels['flagread'] = 'Lu';
+$labels['flagdeleted'] = 'Supprimé';
+$labels['flaganswered'] = 'Réponse envoyée';
+$labels['flagflagged'] = 'Signalé';
+$labels['flagdraft'] = 'Brouillon';
+$labels['setvariable'] = 'Définir une variable';
+$labels['setvarname'] = 'Nom de la variable :';
+$labels['setvarvalue'] = 'Valeur de la variable :';
+$labels['setvarmodifiers'] = 'Modificateurs :';
+$labels['varlower'] = 'minuscule';
+$labels['varupper'] = 'majuscule';
+$labels['varlowerfirst'] = 'premier caractère en minuscule';
+$labels['varupperfirst'] = 'premier caractère en majuscule';
+$labels['varquotewildcard'] = 'citer les caractères spéciaux';
+$labels['varlength'] = 'longueur';
+$labels['notify'] = 'Envoyer la notification';
+$labels['notifytarget'] = 'Cible de la notification :';
+$labels['notifymessage'] = 'Courriel de notification (optionnel) :';
+$labels['notifyoptions'] = 'Options de notification (optionnel) :';
+$labels['notifyfrom'] = 'Expéditeur de la notification (optionnel) :';
+$labels['notifyimportance'] = 'Importance :';
+$labels['notifyimportancelow'] = 'faible';
+$labels['notifyimportancenormal'] = 'normale';
+$labels['notifyimportancehigh'] = 'haute';
+$labels['notifymethodmailto'] = 'Courriel';
+$labels['notifymethodtel'] = 'Téléphone';
+$labels['notifymethodsms'] = 'Texto';
+$labels['filtercreate'] = 'Créer un filtre';
+$labels['usedata'] = 'Utiliser les données suivantes dans le filtre :';
+$labels['nextstep'] = 'Étape suivante';
+$labels['...'] = '...';
+$labels['string'] = 'Chaîne';
+$labels['currdate'] = 'Date actuelle';
+$labels['datetest'] = 'Date';
+$labels['dateheader'] = 'en-tête :';
+$labels['year'] = 'année';
+$labels['month'] = 'mois';
+$labels['day'] = 'jour';
+$labels['date'] = 'date (aaaa-mm-jj)';
+$labels['julian'] = 'date (julien)';
+$labels['hour'] = 'heure';
+$labels['minute'] = 'minute';
+$labels['second'] = 'seconde';
+$labels['time'] = 'heure (hh:mm:ss)';
+$labels['iso8601'] = 'date (ISO8601)';
+$labels['std11'] = 'date (RFC2822)';
+$labels['zone'] = 'fuseau horaire';
+$labels['weekday'] = 'jour de la semaine (0-6)';
+$labels['advancedopts'] = 'Options avancées';
+$labels['body'] = 'Corps';
+$labels['address'] = 'adresse';
+$labels['envelope'] = 'enveloppe';
+$labels['modifier'] = 'modificateur :';
+$labels['text'] = 'texte';
+$labels['undecoded'] = 'non décodé (brut)';
+$labels['contenttype'] = 'type de contenu';
+$labels['modtype'] = 'type :';
+$labels['allparts'] = 'tout';
+$labels['domain'] = 'domaine';
+$labels['localpart'] = 'partie locale';
+$labels['user'] = 'utilisateur';
+$labels['detail'] = 'détail';
+$labels['comparator'] = 'comparateur :';
+$labels['default'] = 'par défaut';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'insensible à la casse (ascii-casemap)';
+$labels['asciinumeric'] = 'numérique (ascii-numeric)';
+$labels['index'] = 'index :';
+$labels['indexlast'] = 'à l\'envers';
+$labels['vacation'] = 'Vacances';
+$labels['vacation.reply'] = 'Courriel de réponse';
+$labels['vacation.advanced'] = 'Paramètres avancés';
+$labels['vacation.from'] = 'Adresse de réponse de l\'expéditeur';
+$labels['vacation.subject'] = 'Objet';
+$labels['vacation.body'] = 'Corps';
+$labels['vacation.start'] = 'Début de vacances';
+$labels['vacation.end'] = 'Fin de vacances';
+$labels['vacation.status'] = 'État';
+$labels['vacation.on'] = 'Marche';
+$labels['vacation.off'] = 'Arrêt';
+$labels['vacation.addresses'] = 'Mes adresses courriel';
+$labels['vacation.interval'] = 'Plage de réponse';
+$labels['vacation.after'] = 'Mettre en place la règle de vacances après';
+$labels['vacation.saving'] = 'Enregistrement des données...';
+$labels['vacation.action'] = 'Action pour courriel entrant';
+$labels['vacation.keep'] = 'Garder';
+$labels['vacation.discard'] = 'Rejeter';
+$labels['vacation.redirect'] = 'Réacheminer à';
+$labels['vacation.copy'] = 'Envoyer une copie à';
+$labels['filladdresses'] = 'Remplir avec toutes mes adresses';
+$labels['arialabelfiltersetactions'] = 'Actions des jeux de filtrage';
+$labels['arialabelfilteractions'] = 'Actions de filtrage';
+$labels['arialabelfilterform'] = 'Propriété du filtrage';
+$labels['ariasummaryfilterslist'] = 'Liste des filtres';
+$labels['ariasummaryfiltersetslist'] = 'Liste des jeux de filtrage';
+$labels['filterstitle'] = 'Modifier les filtres de courriels entrants';
+$labels['vacationtitle'] = 'Modifier la règle d\'absence du bureau';
+$labels['message'] = 'Message';
+$labels['duplicate'] = 'est un doublon';
+$labels['notduplicate'] = 'n\'est pas un doublon';
+$labels['duplicate.handle'] = 'descripteur :';
+$labels['duplicate.header'] = 'en-tête :';
+$labels['duplicate.uniqueid'] = 'identifiant :';
+$labels['duplicate.seconds'] = 'temporisation (secondes) :';
+$labels['duplicate.last'] = 'par rapport à la dernière exécution';
+$messages['filterunknownerror'] = 'Erreur de serveur inconnue';
+$messages['filterconnerror'] = 'Connexion au serveur impossible.';
+$messages['filterdeleteerror'] = 'Impossible de supprimer le filtre. Une erreur de serveur est survenue.';
+$messages['filterdeleted'] = 'Le filtre a été supprimé avec succès.';
+$messages['filtersaved'] = 'Le filtre a été enregistré avec succès.';
+$messages['filtersaveerror'] = 'Impossible d\'enregistrer le filtre. Une erreur de serveur est survenue.';
+$messages['filterformerror'] = 'Le formulaire de filtrage contient des erreurs.';
+$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné ?';
+$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée ?';
+$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l\'action sélectionnée ?';
+$messages['forbiddenchars'] = 'Caractères interdits dans le champ';
+$messages['cannotbeempty'] = 'Le champ ne peut pas être vide';
+$messages['ruleexist'] = 'Un filtre existe déjà avec ce nom.';
+$messages['setactivateerror'] = 'Impossible d\'activer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setdeactivateerror'] = 'Impossible de désactiver le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setdeleteerror'] = 'Impossible de supprimer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setactivated'] = 'Le jeu de filtres a été activé avec succès.';
+$messages['setdeactivated'] = 'Le jeu de filtres a été désactivé avec succès.';
+$messages['setdeleted'] = 'Le jeu de filtres a été supprimé avec succès.';
+$messages['setupdated'] = 'Le jeu de filtres a été mis à jour avec succès.';
+$messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le jeu de filtres sélectionné ?';
+$messages['setcreateerror'] = 'Impossible de créer un jeu de filtres. Une erreur de serveur est survenue.';
+$messages['setcreated'] = 'Le jeu de filtres a été créé avec succès.';
+$messages['activateerror'] = 'Impossible d\'activer le/les filtre(s) sélectionné(s). Une erreur de serveur est survenue.';
+$messages['deactivateerror'] = 'Impossible de désactiver le/les filtre(s) sélectionné(s). Une erreur de serveur est survenue.';
+$messages['deactivated'] = 'Filtres désactivés avec succès.';
+$messages['activated'] = 'Filtres activés avec succès.';
+$messages['moved'] = 'Filtre déplacé avec succès.';
+$messages['moveerror'] = 'Impossible de déplacer le filtre sélectionné. Une erreur de serveur est survenue.';
+$messages['nametoolong'] = 'Nom trop long.';
+$messages['namereserved'] = 'Nom réservé.';
+$messages['setexist'] = 'Le jeu existe déjà.';
+$messages['nodata'] = 'Au moins un élément doit être sélectionné !';
+$messages['invaliddateformat'] = 'Format de date ou d\'une partie de la date invalide';
+$messages['saveerror'] = 'Impossible d\'enregistrer les données. Une erreur du serveur est survenue.';
+$messages['vacationsaved'] = 'Les données de vacances ont été enregistrées avec succès.';
+$messages['emptyvacationbody'] = 'Le corps du courriel de vacances est exigé !';
+$messages['duplicate.conflict.err'] = 'L\'en-tête et l\'identifiant unique ne sont pas permis.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['messagedelete'] = 'Berjocht fuortsmite';
+$labels['del'] = 'Fuortsmite';
+$labels['none'] = 'gjin';
+$labels['notifyimportance'] = 'Prioriteit:';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodsms'] = 'SMS';
+$labels['...'] = '...';
+$labels['datetest'] = 'Date';
+$labels['year'] = 'jier';
+$labels['month'] = 'moanne';
+$labels['day'] = 'dei';
+$labels['hour'] = 'oerre';
+$labels['minute'] = 'minút';
+$labels['second'] = 'sekonde';
+$labels['time'] = 'tiid (oo:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'tiidsône';
+$labels['text'] = 'tekst';
+$labels['modtype'] = 'type:';
+$labels['domain'] = 'domein';
+$labels['user'] = 'brûker';
+$labels['vacation.status'] = 'Status';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,153 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Scagairí';
+$labels['managefilters'] = 'Bainistigh na scagairí do theachtaireachtaí isteach';
+$labels['filtername'] = 'Ainm an scagaire';
+$labels['newfilter'] = 'Scagaire nua';
+$labels['filteradd'] = 'Cuir scagaire leis';
+$labels['filterdel'] = 'Scrios an scagaire';
+$labels['moveup'] = 'Bog suas';
+$labels['movedown'] = 'Bog síos';
+$labels['filterany'] = 'gach teachtaireacht';
+$labels['filtercontains'] = 'ina bhfuil';
+$labels['filternotcontains'] = 'níl seo ann';
+$labels['filteris'] = 'cothrom le';
+$labels['filterisnot'] = 'níl sé cothrom le';
+$labels['filterunder'] = 'faoi';
+$labels['filterover'] = 'thar';
+$labels['addrule'] = 'Cuir rial leis';
+$labels['delrule'] = 'Scrios an rial';
+$labels['messagemoveto'] = 'Bog teachtaireacht chuig';
+$labels['messageredirect'] = 'Atreoraigh an teachtaireacht chuig';
+$labels['messagecopyto'] = 'Macasamhlaigh an teachtaireacht chuig';
+$labels['messagesendcopy'] = 'Seol macasamhail den teachtaireacht chuig';
+$labels['messagereply'] = 'Freagair le teachtaireacht';
+$labels['messagedelete'] = 'Scrios an teachtaireacht';
+$labels['messagediscard'] = 'Cuileáil leis an teachtaireacht';
+$labels['messagekeep'] = 'Coinnigh an teachtaireacht sa Bhosca Isteach';
+$labels['messagesrules'] = 'I gcomhair teachtaireachtaí isteach:';
+$labels['add'] = 'Cuir leis';
+$labels['del'] = 'Scrios';
+$labels['sender'] = 'Seoltóir';
+$labels['recipient'] = 'Faighteoir';
+$labels['vacationaddr'] = 'Mo sheoltaí ríomhphoist:';
+$labels['vacationdays'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh (i laetheanta):';
+$labels['vacationinterval'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh:';
+$labels['vacationfrom'] = 'Seoladh fhreagair an tseoltóra:';
+$labels['vacationsubject'] = 'Ãbhar na teachtaireachta:';
+$labels['days'] = 'lá';
+$labels['seconds'] = 'soicind';
+$labels['enable'] = 'Cumasaigh/Díchumasaigh';
+$labels['filterset'] = 'Tacair scagairí';
+$labels['filtersets'] = 'Tacair scagairí';
+$labels['filtersetadd'] = 'Cuir scagairí socraithe leis';
+$labels['filterdef'] = 'Sainmhíniú an fhillteáin';
+$labels['active'] = 'gníomhach';
+$labels['none'] = 'dada';
+$labels['fromset'] = 'ón tacair';
+$labels['fromfile'] = 'ón gcomhad';
+$labels['filterdisabled'] = 'Díchumasaíodh an scagaire';
+$labels['valueisgreaterthan'] = 'tá an luach níos mó ná';
+$labels['valueisgreaterthanequal'] = 'tá an luach níos mó ná nó cothrom le';
+$labels['valueislessthan'] = 'tá an luach níos lú ná';
+$labels['valueequals'] = 'tá an luach cothrom le';
+$labels['removeflags'] = 'Bain bratacha ón teachtaireacht';
+$labels['flagread'] = 'Léite';
+$labels['flagdeleted'] = 'Scriosta';
+$labels['flaganswered'] = 'Freagartha';
+$labels['flagflagged'] = 'Bratach curtha leis';
+$labels['flagdraft'] = 'Cum teachtaireacht';
+$labels['setvariable'] = 'Socraigh athraitheach';
+$labels['setvarmodifiers'] = 'Mionathraitheoirí:';
+$labels['varlower'] = 'cás íochtar';
+$labels['varupper'] = 'cás uachtar';
+$labels['varlength'] = 'fad';
+$labels['notify'] = 'Seol fógra';
+$labels['notifyimportance'] = 'Tábhacht:';
+$labels['notifyimportancelow'] = 'íseal';
+$labels['notifyimportancenormal'] = 'gnáth';
+$labels['notifyimportancehigh'] = 'ard';
+$labels['notifymethodmailto'] = 'Seoladh ríomhphoist';
+$labels['notifymethodtel'] = 'Guthán';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Cruthaigh scagaire';
+$labels['nextstep'] = 'An chéad chéim eile';
+$labels['...'] = '...';
+$labels['string'] = 'Teaghrán';
+$labels['currdate'] = 'An dáta reatha';
+$labels['datetest'] = 'Dáta';
+$labels['dateheader'] = 'ceanntásc:';
+$labels['year'] = 'bliain';
+$labels['month'] = 'mí';
+$labels['day'] = 'lá';
+$labels['date'] = 'dáta (bbbb-mm-ll)';
+$labels['julian'] = 'dáta (Iúil)';
+$labels['hour'] = 'uair';
+$labels['minute'] = 'nóiméad';
+$labels['second'] = 'soicind';
+$labels['time'] = 'am (uu:nn:ss)';
+$labels['iso8601'] = 'dáta (ISO8601)';
+$labels['std11'] = 'dáta (RFC2822)';
+$labels['zone'] = 'crios ama';
+$labels['weekday'] = 'lá oibre (0-6)';
+$labels['advancedopts'] = 'Ardroghanna';
+$labels['body'] = 'Corp';
+$labels['address'] = 'seoladh';
+$labels['envelope'] = 'clúdach litreach';
+$labels['modifier'] = 'mionathraitheoir:';
+$labels['text'] = 'téacs';
+$labels['modtype'] = 'cineál:';
+$labels['allparts'] = 'uile';
+$labels['domain'] = 'fearann';
+$labels['localpart'] = 'páirt logánta';
+$labels['user'] = 'úsáideoir';
+$labels['detail'] = 'mionsonra';
+$labels['default'] = 'réamhshocrú';
+$labels['index'] = 'Treorán:';
+$labels['indexlast'] = 'siar';
+$labels['vacation'] = 'Saoire';
+$labels['vacation.reply'] = 'Freagair an teachtaireacht';
+$labels['vacation.advanced'] = 'Ardsocruithe';
+$labels['vacation.subject'] = 'Ãbhar';
+$labels['vacation.body'] = 'Corp';
+$labels['vacation.status'] = 'Treo';
+$labels['vacation.on'] = 'Ar siúl';
+$labels['vacation.off'] = 'As';
+$labels['vacation.addresses'] = 'Mo sheoltaí ríomhphoist';
+$labels['vacation.keep'] = 'Coinnigh';
+$labels['vacation.discard'] = 'Cuileáil';
+$labels['vacation.redirect'] = 'Atreoraigh chuig';
+$labels['vacation.copy'] = 'Seol macasamhail chuig';
+$labels['filladdresses'] = 'Líon le mo sheoltaí uile';
+$labels['arialabelfilteractions'] = 'Gníomhartha an scagaire';
+$labels['arialabelfilterform'] = 'Airíonna an fhillteáin';
+$labels['ariasummaryfilterslist'] = 'Liosta de na fillteáin';
+$labels['message'] = 'Teachtaireacht';
+$labels['duplicate.uniqueid'] = 'aitheantóir:';
+$messages['filterdeleted'] = 'Scriosadh an fillteán go ráthúil.';
+$messages['filterdeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an scagaire roghnaithe a scriosadh?';
+$messages['actiondeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an gníomh roghnaithe a scriosadh?';
+$messages['cannotbeempty'] = 'Ní féidir leis an réimse bheith folamh.';
+$messages['ruleexist'] = 'Tá an scagaire leis an ainm sonraithe ann cheana.';
+$messages['setcreated'] = 'Cruthaíodh tacair de scagairí go ráthúil.';
+$messages['moved'] = 'Bogadh an scagaire go ráthúil.';
+$messages['nametoolong'] = 'Tá an t-ainm rófhada.';
+$messages['namereserved'] = 'Ainm curtha in áirithe.';
+$messages['setexist'] = 'Tá an tacair sin ann cheana.';
+$messages['nodata'] = 'Caithfear ar a laghad suíomh amháin a roghnú!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,205 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Xestionar os filtros de correo entrante';
+$labels['filtername'] = 'Nome do filtro';
+$labels['newfilter'] = 'Novo filtro';
+$labels['filteradd'] = 'Engadir filtro';
+$labels['filterdel'] = 'Eliminar filtro';
+$labels['moveup'] = 'Mover arriba';
+$labels['movedown'] = 'Mover abaixo';
+$labels['filterallof'] = 'coincidir con todas as regras seguintes';
+$labels['filteranyof'] = 'coincidir con algunha das regras seguintes';
+$labels['filterany'] = 'todas as mensaxes';
+$labels['filtercontains'] = 'contén';
+$labels['filternotcontains'] = 'non contén';
+$labels['filteris'] = 'é igual a';
+$labels['filterisnot'] = 'non é igual a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'non existe';
+$labels['filtermatches'] = 'casa coa expresión';
+$labels['filternotmatches'] = 'non casa coa expresión';
+$labels['filterregex'] = 'casa coa expresión regular';
+$labels['filternotregex'] = 'non casa coa expresión regular';
+$labels['filterunder'] = 'baixo';
+$labels['filterover'] = 'sobre';
+$labels['addrule'] = 'Engadir regra';
+$labels['delrule'] = 'Eliminar regra';
+$labels['messagemoveto'] = 'Mover a mensaxe a';
+$labels['messageredirect'] = 'Redirixir a mensaxe a';
+$labels['messagecopyto'] = 'Copiar a mensaxe a';
+$labels['messagesendcopy'] = 'Enviar copia da mensaxe a';
+$labels['messagereply'] = 'Respostar con unha mensaxe';
+$labels['messagedelete'] = 'Eliminar a mensaxe';
+$labels['messagediscard'] = 'Descartar con unha mensaxe';
+$labels['messagekeep'] = 'Manter mensaxe na caixa de entrada';
+$labels['messagesrules'] = 'Para o correo entrante:';
+$labels['messagesactions'] = '... executar as seguintes accións:';
+$labels['add'] = 'Engadir';
+$labels['del'] = 'Eliminar';
+$labels['sender'] = 'Remite';
+$labels['recipient'] = 'Persoa destinataria';
+$labels['vacationdays'] = 'Cada canto enviar mensaxes (en días):';
+$labels['vacationinterval'] = 'Con que frecuencia se van enviar mensaxes:';
+$labels['vacationreason'] = 'Corpo da mensaxe (por vacacións):';
+$labels['vacationsubject'] = 'Asunto da mensaxe:';
+$labels['days'] = 'días';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Parar de avaliar regras';
+$labels['enable'] = 'Activar/Desactivar';
+$labels['filterset'] = 'Conxunto de filtros';
+$labels['filtersets'] = 'Conxunto de filtros';
+$labels['filtersetadd'] = 'Engadir un conxunto de filtros';
+$labels['filtersetdel'] = 'Eliminar o conxunto de filtros actual';
+$labels['filtersetact'] = 'Activar o conxunto de filtros actual';
+$labels['filtersetdeact'] = 'Desactivar o conxunto de filtros actual';
+$labels['filterdef'] = 'Definición de filtros';
+$labels['filtersetname'] = 'Nome do conxunto de filtros';
+$labels['newfilterset'] = 'Novo conxunto de filtros';
+$labels['active'] = 'activo';
+$labels['none'] = 'ningún';
+$labels['fromset'] = 'de conxunto';
+$labels['fromfile'] = 'de arquivo';
+$labels['filterdisabled'] = 'Filtro desactivado';
+$labels['countisgreaterthan'] = 'a conta é maior que';
+$labels['countisgreaterthanequal'] = 'a conta é maior ou igual a';
+$labels['countislessthan'] = 'a conta é menor que';
+$labels['countislessthanequal'] = 'a conta é menor ou igual a';
+$labels['countequals'] = 'a conta é igual a';
+$labels['countnotequals'] = 'a conta non é igual a';
+$labels['valueisgreaterthan'] = 'o valor é meirande que ';
+$labels['valueisgreaterthanequal'] = 'o valor é maior ou igual a';
+$labels['valueislessthan'] = 'o valor é menor que';
+$labels['valueislessthanequal'] = 'o valor é menor ou igual a';
+$labels['valueequals'] = 'o valor é igual a';
+$labels['valuenotequals'] = 'o valor non é igual a';
+$labels['setflags'] = 'Marcar a mensaxe';
+$labels['addflags'] = 'Engadir marcas á mensaxe';
+$labels['removeflags'] = 'Desmarcar as mensaxes';
+$labels['flagread'] = 'Lidas';
+$labels['flagdeleted'] = 'Eliminadas';
+$labels['flaganswered'] = 'Respostadas';
+$labels['flagflagged'] = 'Marcadas';
+$labels['flagdraft'] = 'Borrador';
+$labels['setvariable'] = 'Estabelecer variábel';
+$labels['setvarname'] = 'Nome da variábel:';
+$labels['setvarvalue'] = 'Valor da variábel:';
+$labels['setvarmodifiers'] = 'Modificadores:';
+$labels['varlower'] = 'minúscula';
+$labels['varupper'] = 'maiúscula';
+$labels['varlowerfirst'] = 'primeira letra minúscula';
+$labels['varupperfirst'] = 'primeira letra maiúscula';
+$labels['varquotewildcard'] = 'poñer entre aspas caracteres especiais';
+$labels['varlength'] = 'lonxitude';
+$labels['notify'] = 'Enviar notificación';
+$labels['notifyimportance'] = 'Importancia:';
+$labels['notifyimportancelow'] = 'baixa';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correo electrónico';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crear filtro';
+$labels['usedata'] = 'Usar os seguintes datos no filtro:';
+$labels['nextstep'] = 'Seguinte paso';
+$labels['...'] = '...';
+$labels['currdate'] = 'Data actual';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'cabeceira:';
+$labels['year'] = 'ano';
+$labels['month'] = 'mes';
+$labels['day'] = 'día';
+$labels['date'] = 'data (aaaa-mm-dd)';
+$labels['julian'] = 'data (xuliano)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'tempo (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fuso-horario';
+$labels['weekday'] = 'día da semana (0-6)';
+$labels['advancedopts'] = 'Opcións avanzadas';
+$labels['body'] = 'Corpo';
+$labels['address'] = 'enderezo';
+$labels['envelope'] = 'sobre';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'sen codificar (en bruto)';
+$labels['contenttype'] = 'tipo de contido';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todos';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'utente';
+$labels['detail'] = 'detalle';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'predeterminado';
+$labels['octet'] = 'estricto (octeto)';
+$labels['asciicasemap'] = 'non sensíbel a maiúsculas/minúsculas (ascii-casemap)';
+$labels['asciinumeric'] = 'numérico (ascii-numerico)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'atrás';
+$labels['vacation.reply'] = 'Respostar á mensaxe';
+$labels['vacation.advanced'] = 'Opcións avanzadas';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Corpo';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Activar';
+$labels['vacation.off'] = 'Desactivar';
+$labels['vacation.saving'] = 'Gardando datos...';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redirixir a';
+$labels['vacation.copy'] = 'Enviar copia a';
+$labels['arialabelfilteractions'] = 'Accións de filtrado';
+$labels['arialabelfilterform'] = 'Propiedades dos filtros';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$messages['filterunknownerror'] = 'Erro descoñecido do servidor';
+$messages['filterconnerror'] = 'Imposíbel conectar co servidor.';
+$messages['filterdeleteerror'] = 'Non se pode eliminar filtro. Produciuse un erro de servidor.';
+$messages['filterdeleted'] = 'Filtro borrado con éxito';
+$messages['filtersaved'] = 'Filtro gardado con éxito';
+$messages['filtersaveerror'] = 'Non se puido gardar filtro. Produciuse un erro de servidor.';
+$messages['filterdeleteconfirm'] = 'Realmente queres eliminar o filtro seleccionado?';
+$messages['ruledeleteconfirm'] = 'Seguro que queres eliminar a regra seleccionada?';
+$messages['actiondeleteconfirm'] = 'Seguro que queres eliminar a acción seleccionada?';
+$messages['forbiddenchars'] = 'Caracteres non permitidos no campo';
+$messages['cannotbeempty'] = 'O campo non pode estar baleiro';
+$messages['ruleexist'] = 'Xa existe un filtro co nome especificado.';
+$messages['setactivateerror'] = 'Non se poden activar os filtros seleccionados. Produciuse un erro de servidor.';
+$messages['setdeactivateerror'] = 'Non foi posíbel desactivar os filtros seleccionados. Produciuse un erro de servidor.';
+$messages['setdeleteerror'] = 'Non é posíbel eliminar os filtros seleccionados. Produciuse un erro de servidor.';
+$messages['setactivated'] = 'O conxunto de filtros activouse con éxito';
+$messages['setdeactivated'] = 'O conxunto de filtros desactivouse con éxito';
+$messages['setdeleted'] = 'O Conxunto de filtros borrouse con éxito';
+$messages['setdeleteconfirm'] = 'Seguro que queres eliminar o conxunto de filtros seleccionado?';
+$messages['setcreateerror'] = 'Non é posíbel crear filtros. Produciuse un erro de servidor.';
+$messages['setcreated'] = 'Conxunto de filtros creado con éxito';
+$messages['activateerror'] = 'Non é posíbel activar o(s) filtro(s) seleccionado(s). Produciuse un erro de servidor.';
+$messages['deactivateerror'] = 'Incapaz de desactivar filtro(s) seleccionado(s). Produciuse un erro de servidor.';
+$messages['deactivated'] = 'Desactiváronse os filtros correctamente.';
+$messages['activated'] = 'Activáronse os filtros correctamente';
+$messages['moved'] = 'Moveuse correctamente o filtro.';
+$messages['moveerror'] = 'Non se pode mover o filtro seleccionado. Produciuse un erro de servidor.';
+$messages['nametoolong'] = 'Imposíbel crear o conxunto de filtros. O nome é longo de máis';
+$messages['namereserved'] = 'Nome reservado';
+$messages['setexist'] = 'Xa existe o conxunto';
+$messages['nodata'] = 'É preciso seleccionar polo menos unha posición!';
+$messages['invaliddateformat'] = 'Formato de data ou parte dos datos non válidos';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'מסנני×';
+$labels['managefilters'] = 'ניהול ×ž×¡× × ×™× ×œ×“×•×ר נכנס';
+$labels['filtername'] = '×©× ×”×ž×¡× ×Ÿ';
+$labels['newfilter'] = 'מסנן חדש';
+$labels['filteradd'] = 'הוספת מסנן';
+$labels['filterdel'] = 'מחיקת מסנן';
+$labels['moveup'] = 'הזזה מעלה';
+$labels['movedown'] = 'הזזה מטה';
+$labels['filterallof'] = 'ת×ימות לכל ×”×›×œ×œ×™× ×©×œ×”×œ×Ÿ';
+$labels['filteranyof'] = 'ת×ימות לחלק ×ž×”×›×œ×œ×™× ×©×œ×”×œ×Ÿ';
+$labels['filterany'] = 'כל ההודעות';
+$labels['filtercontains'] = 'מכיל';
+$labels['filternotcontains'] = '×œ× ×ž×›×™×œ';
+$labels['filteris'] = 'שווה ערך ל-';
+$labels['filterisnot'] = '×ינו שווה ערך ל-';
+$labels['filterexists'] = 'קיי×';
+$labels['filternotexists'] = '×œ× ×§×™×™×';
+$labels['filtermatches'] = 'תו×× ×‘×™×˜×•×™';
+$labels['filternotmatches'] = '×œ× ×ª×•×× ×‘×™×˜×•×™';
+$labels['filterregex'] = 'תו×× ×‘×™×˜×•×™ מורכב';
+$labels['filternotregex'] = '×œ× ×ª×•×× ×‘×™×˜×•×™ מורכב';
+$labels['filterunder'] = 'תחת';
+$labels['filterover'] = 'מעל';
+$labels['addrule'] = 'הוספת כלל';
+$labels['delrule'] = 'מחיקת כלל';
+$labels['messagemoveto'] = 'העברת הודעה ×ל';
+$labels['messageredirect'] = 'השמה חדשה של ההודעה ×ל';
+$labels['messagecopyto'] = 'העתקת ההודעה ×ל';
+$labels['messagesendcopy'] = 'משלוח העתק מההודעה ×ל';
+$labels['messagereply'] = 'מענה ×¢× ×”×•×“×¢×”';
+$labels['messagedelete'] = 'מחיקת הודעה';
+$labels['messagediscard'] = 'ביטול ההודעה';
+$labels['messagekeep'] = 'שמירת הודעה בדו×ר נכנס';
+$labels['messagesrules'] = 'עבור דו×ר נכנס:';
+$labels['messagesactions'] = '...מבצע הפעולות הב×ות:';
+$labels['add'] = 'הוספה';
+$labels['del'] = 'מחיקה';
+$labels['sender'] = 'השולח';
+$labels['recipient'] = 'הנמען';
+$labels['vacationaddr'] = 'כתובות הדו×"ל שלי:';
+$labels['vacationdays'] = 'ב×יזו תדירות ( ×‘×™×ž×™× ) לשלוח הודעות:';
+$labels['vacationinterval'] = 'ב×יזו תדירות לשלוח ההודעה';
+$labels['vacationreason'] = 'גוף ההודעה (סיבת החופשה):';
+$labels['vacationfrom'] = 'כתובת שולח התשובה:';
+$labels['vacationsubject'] = '× ×•×©× ×”×”×•×“×¢×”:';
+$labels['days'] = 'ימי×';
+$labels['seconds'] = 'שניות';
+$labels['rulestop'] = 'עצירה של בחינת הכללי×';
+$labels['enable'] = '×פשור/ניטרול';
+$labels['filterset'] = 'קבוצת מסנני×';
+$labels['filtersets'] = 'קבוצות מסנני×';
+$labels['filtersetadd'] = 'הוספה של קבוצת מסנני×';
+$labels['filtersetdel'] = 'מחיקה של ×ž×¡× × ×™× × ×•×›×—×™×™×';
+$labels['filtersetact'] = 'הפעלה של ×ž×¡× × ×™× × ×•×›×—×™×™×';
+$labels['filtersetdeact'] = 'השבתה של ×ž×¡× × ×™× × ×•×›×—×™×™×';
+$labels['filterseteditraw'] = 'עריכת סינון';
+$labels['filterdef'] = 'הגדרת מסנן';
+$labels['filtersetname'] = '×©× ×©×œ קבוצת מסנני×';
+$labels['newfilterset'] = 'קבוצת ×ž×¡× × ×™× ×—×“×©×”';
+$labels['active'] = 'פעיל';
+$labels['none'] = '××£ ×חד מ×לה';
+$labels['fromset'] = 'מקבוצה';
+$labels['fromfile'] = 'מקובץ';
+$labels['filterdisabled'] = 'מסנן מושבת';
+$labels['countisgreaterthan'] = 'המספר גדול מ-';
+$labels['countisgreaterthanequal'] = 'המספר גדול ×ו שווה ל-';
+$labels['countislessthan'] = 'המספר קטן מ-';
+$labels['countislessthanequal'] = 'המספר קטן ×ו שווה ל-';
+$labels['countequals'] = 'המספר שווה ל-';
+$labels['countnotequals'] = 'המספר ×ינו שווה ל ';
+$labels['valueisgreaterthan'] = 'הערך גדול מ-';
+$labels['valueisgreaterthanequal'] = 'הערך גדול ×ו שווה ל-';
+$labels['valueislessthan'] = 'הערך קטן מ-';
+$labels['valueislessthanequal'] = 'הערך קטן ×ו שווה ל-';
+$labels['valueequals'] = 'הערך שווה ל-';
+$labels['valuenotequals'] = 'הערך ×ינו שוה ל ';
+$labels['setflags'] = 'סימון ×“×’×œ×™× ×œ×”×•×“×¢×”';
+$labels['addflags'] = 'הוספת ×“×’×œ×™× ×œ×”×•×“×¢×”';
+$labels['removeflags'] = 'הסרת ×“×’×œ×™× ×ž×”×”×•×“×¢×”';
+$labels['flagread'] = 'נקר×';
+$labels['flagdeleted'] = 'נמחק';
+$labels['flaganswered'] = '× ×¢× ×”';
+$labels['flagflagged'] = 'סומן בדגל';
+$labels['flagdraft'] = 'טיוטה';
+$labels['setvariable'] = 'הגדרת משתנה';
+$labels['setvarname'] = '×©× ×”×ž×©×ª× ×”:';
+$labels['setvarvalue'] = 'ערך המשתנה:';
+$labels['setvarmodifiers'] = '×’×•×¨× ×ž×©× ×”:';
+$labels['varlower'] = '×ותיות קטנות';
+$labels['varupper'] = '×ותיות גדולות';
+$labels['varlowerfirst'] = 'התו הר×שון ×ות קטנה';
+$labels['varupperfirst'] = 'התו הר×שון ×ות גדולה';
+$labels['varquotewildcard'] = 'תו מיוחד יש ×œ×©×™× ×‘×™×Ÿ מרכ×ות';
+$labels['varlength'] = '×ורך';
+$labels['notify'] = 'משלוח התר××”';
+$labels['notifytarget'] = 'יעד התר××”:';
+$labels['notifymessage'] = 'הודעת התר××” (רשות):';
+$labels['notifyoptions'] = '×פשרויות התר××” (רשות):';
+$labels['notifyfrom'] = 'שולח התר××” (רשות):';
+$labels['notifyimportance'] = 'חשיובת:';
+$labels['notifyimportancelow'] = 'נמוכה';
+$labels['notifyimportancenormal'] = 'רגילה';
+$labels['notifyimportancehigh'] = 'גבוהה';
+$labels['notifymethodmailto'] = 'דו×״ל';
+$labels['notifymethodtel'] = 'טלפון';
+$labels['notifymethodsms'] = 'מסרון';
+$labels['filtercreate'] = 'יצירת מסנן';
+$labels['usedata'] = 'שימוש במידע שלהלן ליצירת המסנן:';
+$labels['nextstep'] = 'הצעד הב×';
+$labels['...'] = '...';
+$labels['string'] = 'מחרוזת';
+$labels['currdate'] = 'ת×ריך נוכחי';
+$labels['datetest'] = 'ת×ריך';
+$labels['dateheader'] = 'כותרת:';
+$labels['year'] = 'שנה';
+$labels['month'] = 'חודש';
+$labels['day'] = 'יו×';
+$labels['date'] = 'ת×ריך (שנה-חודש-יו×)';
+$labels['julian'] = 'ת×ריך (יולי×× ×™)';
+$labels['hour'] = 'שעה';
+$labels['minute'] = 'דקה';
+$labels['second'] = 'שניה';
+$labels['time'] = 'זמן (שעה:דקה:שניה)';
+$labels['iso8601'] = 'ת×ריך (ISO8601)';
+$labels['std11'] = 'ת×ריך (RFC2822)';
+$labels['zone'] = '×יזור זמן';
+$labels['weekday'] = '×™×•× ×‘×©×‘×•×¢ (0-6)';
+$labels['advancedopts'] = '×פשרויות מתקדמות';
+$labels['body'] = 'גוף ההודעה';
+$labels['address'] = 'כתובת';
+$labels['envelope'] = 'מעטפה';
+$labels['modifier'] = '×’×•×¨× ×©×™× ×•×™:';
+$labels['text'] = 'תמליל';
+$labels['undecoded'] = '×œ× ×ž×§×•×“×“ ( גולמי )';
+$labels['contenttype'] = 'סוג התוכן';
+$labels['modtype'] = 'סוג:';
+$labels['allparts'] = 'הכל';
+$labels['domain'] = 'מתח×';
+$labels['localpart'] = 'חלק מקומי';
+$labels['user'] = 'משתמש';
+$labels['detail'] = 'פרטי×';
+$labels['comparator'] = 'משווה:';
+$labels['default'] = 'ברירת מחדל';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = '×ינדקס:';
+$labels['indexlast'] = 'בחזרה';
+$labels['vacation'] = 'חופשה';
+$labels['vacation.reply'] = 'הודעת תשובה';
+$labels['vacation.advanced'] = 'הגדרות מתקדמות';
+$labels['vacation.from'] = 'כתובת שולח התשובה';
+$labels['vacation.subject'] = 'נוש×';
+$labels['vacation.body'] = 'גוף ההודעה';
+$labels['vacation.start'] = 'ת×ריך התחלה';
+$labels['vacation.end'] = 'ת×ריך סיו×';
+$labels['vacation.status'] = 'מצב';
+$labels['vacation.on'] = 'מופעל';
+$labels['vacation.off'] = 'כבוי';
+$labels['vacation.addresses'] = 'כתובות הדו×"ל שלי';
+$labels['vacation.interval'] = 'מרווח בין תשובות';
+$labels['vacation.after'] = 'העתקת סרגל החופשה ×חרי';
+$labels['vacation.saving'] = 'שמירת מידע...';
+$labels['vacation.action'] = 'פעולה על הודעה נכנסת';
+$labels['vacation.keep'] = 'להש×יר';
+$labels['vacation.discard'] = 'להפטר';
+$labels['vacation.redirect'] = 'הפניה ×ל';
+$labels['vacation.copy'] = 'שליחת העתק ×ל';
+$labels['filladdresses'] = 'שימוש בכל כתובת הדו×"ל שלי';
+$labels['arialabelfiltersetactions'] = 'פעולות על קבוצה של חוקי סינון';
+$labels['arialabelfilteractions'] = 'פעולות מסנן';
+$labels['arialabelfilterform'] = 'מ×פייני מסנן';
+$labels['ariasummaryfilterslist'] = 'רשימה של מסנני×';
+$labels['ariasummaryfiltersetslist'] = 'רשימת קבוצות של חוקי סינון';
+$labels['filterstitle'] = 'ערוך מסנני דו×ר נכנס';
+$labels['vacationtitle'] = 'ערוך כלל מחוץ-×ל-משרדי';
+$labels['message'] = 'הודעה';
+$labels['duplicate'] = 'מוכפל';
+$labels['notduplicate'] = '×œ× ×ž×•×›×¤×œ';
+$labels['duplicate.handle'] = 'כינוי';
+$labels['duplicate.header'] = 'כותרת';
+$labels['duplicate.uniqueid'] = 'מזהה';
+$labels['duplicate.seconds'] = '×ª× ×”×–×ž×Ÿ שהוקצה (שניות):';
+$labels['duplicate.last'] = 'יחסית לזמן הביצוע ×”×חרון';
+$messages['filterunknownerror'] = 'שגי×ת שרת בלתי מוכרת.';
+$messages['filterconnerror'] = '×œ× × ×™×ª×Ÿ להתחבר לשרת.';
+$messages['filterdeleteerror'] = '×œ× × ×™×ª×Ÿ למחוק סינון. שגי×ת שרת.';
+$messages['filterdeleted'] = 'המסנן נמחק בהצלחה.';
+$messages['filtersaved'] = 'המסנן נשמר בהצלחה.';
+$messages['filtersaveerror'] = '×œ× × ×™×ª×Ÿ לשמור סינון. שגי×ת שרת.';
+$messages['filterformerror'] = 'טופס הסינון מכיל שגי×ות';
+$messages['filterdeleteconfirm'] = '×”×× ×כן ברצונך למחוק ×ת המסנן הנבחר?';
+$messages['ruledeleteconfirm'] = '×”×× ×כן ברצונך למחוק ×ת הכלל הנבחר?';
+$messages['actiondeleteconfirm'] = '×”×× ×כן ברצונך למחוק ×ת הפעולה הנבחרת?';
+$messages['forbiddenchars'] = '×ª×•×•×™× ××¡×•×¨×™× ×‘×©×“×”.';
+$messages['cannotbeempty'] = 'השדה ×œ× ×™×›×•×œ להיש×ר ריק.';
+$messages['ruleexist'] = 'כבר ×§×™×™× ×ž×¡× ×Ÿ ×‘×©× ×›×–×”.';
+$messages['setactivateerror'] = '×œ× × ×™×ª×Ÿ להפעיל ×ת ערכת ×”×ž×¡× × ×™× ×”× ×‘×—×¨×ª. ×ירעה שגי××” בצד השרת.';
+$messages['setdeactivateerror'] = '×œ× × ×™×ª×Ÿ להשבית רשימת ×ž×¡× × ×™× ×©× ×‘×—×¨×”. שגי×ת שרת.';
+$messages['setdeleteerror'] = '×œ× × ×™×ª×Ÿ למחוק רשימת ×ž×¡× × ×™× ×©× ×‘×—×¨×”. שגי×ת שרת.';
+$messages['setactivated'] = 'ערכת ×”×ž×¡× × ×™× ×”×•×¤×¢×œ×” בהצלחה.';
+$messages['setdeactivated'] = 'ערכת ×”×ž×¡× × ×™× × ×•×˜×¨×œ×” בהצלחה.';
+$messages['setdeleted'] = 'ערכת ×”×ž×¡× × ×™× × ×ž×—×§×” בהצלחה.';
+$messages['setupdated'] = 'הסינון נשמר';
+$messages['setdeleteconfirm'] = '×”×× ×כן ברצונך למחוק ×ת ערכת ×”×ž×¡× × ×™× ×”× ×‘×—×¨×ª?';
+$messages['setcreateerror'] = '×œ× × ×™×ª×Ÿ ליצור ערכת מסנני×. ×ירעה שגי××” בצד השרת.';
+$messages['setcreated'] = 'ערכת ×”×ž×¡× × ×™× × ×•×¦×¨×” בהצלחה.';
+$messages['activateerror'] = '×œ× × ×™×ª×Ÿ להפעיל ×ת ×”×ž×¡× × ×™× ×”× ×‘×—×¨×™×. ×ירעה שגי××” בצד השרת.';
+$messages['deactivateerror'] = '×œ× × ×™×ª×Ÿ לנטרל ×ת ×”×ž×¡× × ×™× ×”× ×‘×—×¨×™×. ×ירעה שגי××” בצד השרת.';
+$messages['deactivated'] = '×”×ž×¡× × ×™× ×”×•×¤×¢×œ×• בהצלחה.';
+$messages['activated'] = '×”×ž×¡× × ×™× × ×•×˜×¨×œ×• בהצלחה.';
+$messages['moved'] = 'המסנן הועבר בהצלחה.';
+$messages['moveerror'] = '×œ× × ×™×ª×Ÿ להעביר ×ת המסנן הנבחר. ×ירעה שגי××” בצד השרת.';
+$messages['nametoolong'] = '×”×©× ×רוך מדי.';
+$messages['namereserved'] = '×”×©× ×”×–×” שמור.';
+$messages['setexist'] = 'הערכה כבר קיימת.';
+$messages['nodata'] = 'חובה לבחור ×‘×ž×™×§×•× ×חד לפחות!';
+$messages['invaliddateformat'] = 'ת×ריך ×œ× ×—×•×§×™ ×ן פורמט ×œ× ×ª×§×™×Ÿ';
+$messages['saveerror'] = '×œ× × ×™×ª×Ÿ לשמור המידע בשל שגי××” של השרת';
+$messages['vacationsaved'] = 'הודעת החופשה נשמרה בהצלחה';
+$messages['emptyvacationbody'] = 'גוף של הודעת חופשה נדרש!';
+$messages['duplicate.conflict.err'] = '×œ× × ×™×ª×Ÿ להוסיף כותרת ×¢× ×ž×–×”×” יחודי';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,193 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filteri';
+$labels['managefilters'] = 'Uredi filtere za pristiglu poštu';
+$labels['filtername'] = 'Naziv filtera';
+$labels['newfilter'] = 'Novi filter';
+$labels['filteradd'] = 'Dodaj filter';
+$labels['filterdel'] = 'Obriši filter';
+$labels['moveup'] = 'Pomakni gore';
+$labels['movedown'] = 'Pomakni dolje';
+$labels['filterallof'] = 'koje odgovaraju svim sljedećim pravilima';
+$labels['filteranyof'] = 'koje odgovaraju bilo kojem od sljedećih pravila';
+$labels['filterany'] = 'sve poruke';
+$labels['filtercontains'] = 'sadrži';
+$labels['filternotcontains'] = 'ne sadrži';
+$labels['filteris'] = 'jednako je';
+$labels['filterisnot'] = 'nije jednako';
+$labels['filterexists'] = 'postoji';
+$labels['filternotexists'] = 'ne postoji';
+$labels['filtermatches'] = 'odgovara izrazu';
+$labels['filternotmatches'] = 'ne odgovara izrazu';
+$labels['filterregex'] = 'odgovara regularnom izrazu';
+$labels['filternotregex'] = 'ne odgovara regularnom izrazu';
+$labels['filterunder'] = 'ispod';
+$labels['filterover'] = 'iznad';
+$labels['addrule'] = 'Dodaj pravilo';
+$labels['delrule'] = 'Obriši pravilo';
+$labels['messagemoveto'] = 'Premjesti poruku u';
+$labels['messageredirect'] = 'Preusmjeri poruku na';
+$labels['messagecopyto'] = 'Kopiraju poruku u';
+$labels['messagesendcopy'] = 'Pošalji kopiju poruke na';
+$labels['messagereply'] = 'Odgovori sa porukom';
+$labels['messagedelete'] = 'Obriši poruku';
+$labels['messagediscard'] = 'Otkaži sa porukom';
+$labels['messagekeep'] = 'Zadrži poruku u mapi Inbox';
+$labels['messagesrules'] = 'Za pristigle poruke:';
+$labels['messagesactions'] = '...primijeni sljedeće akcije:';
+$labels['add'] = 'Dodaj';
+$labels['del'] = 'Obriši';
+$labels['sender'] = 'Pošiljatelj';
+$labels['recipient'] = 'Primatelj';
+$labels['vacationdays'] = 'Koliko Äesto slati poruku (u danima):';
+$labels['vacationinterval'] = 'Koliko Äesto slati poruku:';
+$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
+$labels['vacationsubject'] = 'Naslov poruke:';
+$labels['days'] = 'dana';
+$labels['seconds'] = 'sekundi';
+$labels['rulestop'] = 'Prekini izvođenje filtera';
+$labels['enable'] = 'Omogući/Onemogući';
+$labels['filterset'] = 'Grupa filtera';
+$labels['filtersets'] = 'Filteri';
+$labels['filtersetadd'] = 'Dodaj grupu filtera';
+$labels['filtersetdel'] = 'Obriši odabranu grupu filtera';
+$labels['filtersetact'] = 'Aktiviraj odabranu grupu filtera';
+$labels['filtersetdeact'] = 'Deaktiviraj odabranu grupu filtera';
+$labels['filterdef'] = 'Definicije filtera';
+$labels['filtersetname'] = 'Naziv grupe filtera';
+$labels['newfilterset'] = 'Nova grupa filtera';
+$labels['active'] = 'aktivan';
+$labels['none'] = 'nijedan';
+$labels['fromset'] = 'iz grupe';
+$labels['fromfile'] = 'iz datoteke';
+$labels['filterdisabled'] = 'Deaktiviraj filter';
+$labels['countisgreaterthan'] = 'brojaÄ je veći od';
+$labels['countisgreaterthanequal'] = 'brojaÄ je veći ili jednak od';
+$labels['countislessthan'] = 'brojaÄ je manji od';
+$labels['countislessthanequal'] = 'brojaÄ je manji ili jednak od';
+$labels['countequals'] = 'brojaÄ je jednak';
+$labels['countnotequals'] = 'brojaÄ nije jednak';
+$labels['valueisgreaterthan'] = 'vrijednost je veća od';
+$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka od';
+$labels['valueislessthan'] = 'vrijednost je manja od';
+$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka od';
+$labels['valueequals'] = 'vrijednost je jednaka';
+$labels['valuenotequals'] = 'vrijednost nije jednaka';
+$labels['setflags'] = 'Postavi oznake na poruku';
+$labels['addflags'] = 'Dodaj oznake na poruku';
+$labels['removeflags'] = 'Ukloni oznake sa poruke';
+$labels['flagread'] = 'ProÄitana';
+$labels['flagdeleted'] = 'Obrisana';
+$labels['flaganswered'] = 'Odgovorena';
+$labels['flagflagged'] = 'OznaÄena';
+$labels['flagdraft'] = 'Predložak';
+$labels['setvariable'] = 'Postavi varijablu';
+$labels['setvarname'] = 'Ime varijable:';
+$labels['setvarvalue'] = 'Vrijednost varijable:';
+$labels['setvarmodifiers'] = 'Modifikatori:';
+$labels['varlower'] = 'mala slova';
+$labels['varupper'] = 'velika slova';
+$labels['varlowerfirst'] = 'prvo slovo malo';
+$labels['varupperfirst'] = 'prvo slovo veliko';
+$labels['varquotewildcard'] = 'Citiraj specijalne znakove';
+$labels['varlength'] = 'duljina';
+$labels['notify'] = 'Pošalji obavijest';
+$labels['notifyimportance'] = 'Važnost:';
+$labels['notifyimportancelow'] = 'niska';
+$labels['notifyimportancenormal'] = 'normalna';
+$labels['notifyimportancehigh'] = 'visoka';
+$labels['filtercreate'] = 'Stvori filter';
+$labels['usedata'] = 'Koristi podatke za filter:';
+$labels['nextstep'] = 'Idući korak';
+$labels['...'] = '…';
+$labels['currdate'] = 'Današnji datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'zaglavlje:';
+$labels['year'] = 'godina';
+$labels['month'] = 'mjesec';
+$labels['day'] = 'dan';
+$labels['date'] = 'datum (yyyy-mm-dd)';
+$labels['julian'] = 'datum (julijanski)';
+$labels['hour'] = 'sat';
+$labels['minute'] = 'minute';
+$labels['second'] = 'sekunde';
+$labels['time'] = 'vrijeme (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'vremenska zona';
+$labels['weekday'] = 'dan u tjednu (0-6)';
+$labels['advancedopts'] = 'Napredne postavke';
+$labels['body'] = 'Tijelo poruke';
+$labels['address'] = 'adresa';
+$labels['envelope'] = 'omotnica';
+$labels['modifier'] = 'modificirao:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'nedekodirano (raw)';
+$labels['contenttype'] = 'tip sadržaja';
+$labels['modtype'] = 'tip:';
+$labels['allparts'] = 'sve';
+$labels['domain'] = 'domena';
+$labels['localpart'] = 'lokalni dio';
+$labels['user'] = 'korisnik';
+$labels['detail'] = 'detalj';
+$labels['comparator'] = 'usporedio:';
+$labels['default'] = 'preddefinirano';
+$labels['octet'] = 'strogo (oktet)';
+$labels['asciicasemap'] = 'neosjetljivo na veliÄinu slova (ascii-casemap)';
+$labels['asciinumeric'] = 'numeriÄki (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'unatrag';
+$labels['vacation.advanced'] = 'Napredne postavke';
+$labels['vacation.subject'] = 'Naslov';
+$labels['vacation.body'] = 'Tijelo poruke';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.saving'] = 'Spremanje podataka...';
+$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju';
+$messages['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)';
+$messages['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju.';
+$messages['filterdeleted'] = 'Filter je uspješno obrisan';
+$messages['filtersaved'] = 'Filter je uspješno spremljen';
+$messages['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju.';
+$messages['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?';
+$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?';
+$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?';
+$messages['forbiddenchars'] = 'Nedozvoljeni znakovi u polju';
+$messages['cannotbeempty'] = 'Polje nesmije biti prazno';
+$messages['ruleexist'] = 'Filter sa zadanim imenom već postoji.';
+$messages['setactivateerror'] = 'Nemoguće aktivirati odabranu grupu filtera. Greška na poslužitelju.';
+$messages['setdeactivateerror'] = 'Nemoguće deaktivirati odabranu grupu filtera. Greška na poslužitelju.';
+$messages['setdeleteerror'] = 'Nemoguće obrisati odabranu grupu filtera. Greška na poslužitelju.';
+$messages['setactivated'] = 'Grupa filtera je uspješno aktivirana';
+$messages['setdeactivated'] = 'Grupa filtera je uspješno deaktivirana';
+$messages['setdeleted'] = 'Grupa filtera je uspješno obrisana';
+$messages['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabranu grupu filtera?';
+$messages['setcreateerror'] = 'Nemoguće stvoriti grupu filtera. Greška na poslužitelju.';
+$messages['setcreated'] = 'Grupa filtera je uspješno stvorena';
+$messages['activateerror'] = 'Nije moguće omogućiti odabrani filter(e). Greška poslužitelja.';
+$messages['deactivateerror'] = 'Nije moguće onemogućiti odabrane filter(e). Greška poslužitelja.';
+$messages['deactivated'] = 'Filter(i) omogućen(i) uspješno.';
+$messages['activated'] = 'Filter(i) onemogućen(i) uspješno.';
+$messages['moved'] = 'Filter uspješno premješten.';
+$messages['moveerror'] = 'Nije moguće premjestiti odabrani filter. Greška poslužitelja.';
+$messages['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugaÄak';
+$messages['namereserved'] = 'Rezervirano ime.';
+$messages['setexist'] = 'Skup već postoji.';
+$messages['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
+$messages['invaliddateformat'] = 'Neispravan datum ili dio datuma';
+$messages['saveerror'] = 'Nemoguće spremiti podatke. Greška na poslužitelju.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Üzenetszűrők';
+$labels['managefilters'] = 'Bejövő üzenetek szűrői';
+$labels['filtername'] = 'Szűrő neve';
+$labels['newfilter'] = 'Új szűrő';
+$labels['filteradd'] = 'Szűrő hozzáadása';
+$labels['filterdel'] = 'Szűrő törlése';
+$labels['moveup'] = 'Mozgatás felfelé';
+$labels['movedown'] = 'Mozgatás lefelé';
+$labels['filterallof'] = 'A következők szabályok mind illeszkedjenek';
+$labels['filteranyof'] = 'A következő szabályok bármelyike illeszkedjen';
+$labels['filterany'] = 'Minden üzenet illeszkedjen';
+$labels['filtercontains'] = 'tartalmazza';
+$labels['filternotcontains'] = 'nem tartalmazza';
+$labels['filteris'] = 'megegyezik';
+$labels['filterisnot'] = 'nem egyezik meg';
+$labels['filterexists'] = 'létezik';
+$labels['filternotexists'] = 'nem létezik';
+$labels['filtermatches'] = 'kifejezéssel egyezők';
+$labels['filternotmatches'] = 'kifejezéssel nem egyezők';
+$labels['filterregex'] = 'reguláris kifejezéssel egyezők';
+$labels['filternotregex'] = 'reguláris kifejezéssel nem egyezők';
+$labels['filterunder'] = 'alatta';
+$labels['filterover'] = 'felette';
+$labels['addrule'] = 'Szabály hozzáadása';
+$labels['delrule'] = 'Szabály törlése';
+$labels['messagemoveto'] = 'Üzenet áthelyezése ide:';
+$labels['messageredirect'] = 'Üzenet továbbítása ide:';
+$labels['messagecopyto'] = 'Üzenet másolása';
+$labels['messagesendcopy'] = 'Másolat kűldése az üzenetből';
+$labels['messagereply'] = 'Válaszüzenet küldése (autoreply)';
+$labels['messagedelete'] = 'Üzenet törlése';
+$labels['messagediscard'] = 'Válaszüzenet küldése, a levél törlése';
+$labels['messagekeep'] = 'Tartsa az üzenetet a beérkező leveleknél';
+$labels['messagesrules'] = 'Az adott tulajdonságú beérkezett üzenetekre:';
+$labels['messagesactions'] = '... a következő műveletek végrehajtása:';
+$labels['add'] = 'Hozzáadás';
+$labels['del'] = 'Törlés';
+$labels['sender'] = 'Feladó';
+$labels['recipient'] = 'Címzett';
+$labels['vacationaddr'] = 'Saját e-mail címeim:';
+$labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
+$labels['vacationinterval'] = 'Milyen gyakran küld üzeneteket:';
+$labels['vacationreason'] = 'Levél szövege (automatikus válasz):';
+$labels['vacationfrom'] = 'Válasz küldőjének címe:';
+$labels['vacationsubject'] = 'Üzenet tárgya:';
+$labels['days'] = 'napok';
+$labels['seconds'] = 'másodpercek';
+$labels['rulestop'] = 'Műveletek végrehajtásának befejezése';
+$labels['enable'] = 'Bekapcsol/Kikapcsol';
+$labels['filterset'] = 'Szűrök készlet';
+$labels['filtersets'] = 'Szűrő készletek';
+$labels['filtersetadd'] = 'Szűrő hozzáadása a készlethez';
+$labels['filtersetdel'] = 'Az aktuális szűrő készlet  törlése';
+$labels['filtersetact'] = 'Az aktuális szűrő készlet engedélyezése';
+$labels['filtersetdeact'] = 'Az aktuális szűrő készlet tiltása';
+$labels['filterseteditraw'] = 'Szűrőkészlet beállítás';
+$labels['filterdef'] = 'Szűrő definíció';
+$labels['filtersetname'] = 'Szűrő készlet neve';
+$labels['newfilterset'] = 'Új szűrő készlet';
+$labels['active'] = 'aktív';
+$labels['none'] = 'nincs';
+$labels['fromset'] = 'készletből';
+$labels['fromfile'] = 'fájlból';
+$labels['filterdisabled'] = 'Szűrő kikapcsolása';
+$labels['countisgreaterthan'] = 'a számláló nagyobb mint';
+$labels['countisgreaterthanequal'] = 'a számláló nagyobb vagy egyenlő';
+$labels['countislessthan'] = 'a számláló kissebb mint';
+$labels['countislessthanequal'] = 'a számláló kissebb vagy egyenlő';
+$labels['countequals'] = 'a számláló egyenlő';
+$labels['countnotequals'] = 'össze számolva nem egyenlő';
+$labels['valueisgreaterthan'] = 'az érték nagyobb mint';
+$labels['valueisgreaterthanequal'] = 'az érték nagyobb vagy egyenlő';
+$labels['valueislessthan'] = 'az érték kisebb mint';
+$labels['valueislessthanequal'] = 'az érték kisebb vagy egyenlő';
+$labels['valueequals'] = 'az érték megegyzik';
+$labels['valuenotequals'] = 'az értéke nem azonos';
+$labels['setflags'] = 'Jelzők beállítása az üzeneten';
+$labels['addflags'] = 'Jelző hozzáadása az üzenethez';
+$labels['removeflags'] = 'Jelzők eltávolítása az üzenetből';
+$labels['flagread'] = 'Olvasás';
+$labels['flagdeleted'] = 'Törölt';
+$labels['flaganswered'] = 'Megválaszolt';
+$labels['flagflagged'] = 'Megjelölt';
+$labels['flagdraft'] = 'Vázlat';
+$labels['setvariable'] = 'Változó beállítása';
+$labels['setvarname'] = 'Változó neve:';
+$labels['setvarvalue'] = 'Változó értéke:';
+$labels['setvarmodifiers'] = 'Módosítók';
+$labels['varlower'] = 'kisbetű';
+$labels['varupper'] = 'nagybetű';
+$labels['varlowerfirst'] = 'első karakter kisbetű';
+$labels['varupperfirst'] = 'első karakter nagybetű';
+$labels['varquotewildcard'] = 'speciális karakterek idézése';
+$labels['varlength'] = 'hossz';
+$labels['notify'] = 'Értesítés küldése';
+$labels['notifytarget'] = 'Értesítés célja:';
+$labels['notifymessage'] = 'Értesítési üzenet (opcionális):';
+$labels['notifyoptions'] = 'Értesítés opcióik (opcionális):';
+$labels['notifyfrom'] = 'Értesítés feladója (opcionális):';
+$labels['notifyimportance'] = 'Fontosság:';
+$labels['notifyimportancelow'] = 'alacsony';
+$labels['notifyimportancenormal'] = 'normál';
+$labels['notifyimportancehigh'] = 'magas';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefonszám';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Szűrő létrehozása';
+$labels['usedata'] = 'A következő adatok használata a szűrőben';
+$labels['nextstep'] = 'Következő lépés';
+$labels['...'] = '…';
+$labels['string'] = 'Szöveg';
+$labels['currdate'] = 'Mai dátum';
+$labels['datetest'] = 'Dátum';
+$labels['dateheader'] = 'fejléc:';
+$labels['year'] = 'év';
+$labels['month'] = 'hónap';
+$labels['day'] = 'nap';
+$labels['date'] = 'dátum (éééé-hh-nn)';
+$labels['julian'] = 'dátum ( julián)';
+$labels['hour'] = 'óra';
+$labels['minute'] = 'perc';
+$labels['second'] = 'másodperc';
+$labels['time'] = 'idő (óó:pp:ms)';
+$labels['iso8601'] = 'dátum (ISO8601)';
+$labels['std11'] = 'dátum (RFC2822)';
+$labels['zone'] = 'idő-zóna';
+$labels['weekday'] = 'hét napjai (0-6)';
+$labels['advancedopts'] = 'Haladó beállítások';
+$labels['body'] = 'Levéltörzs';
+$labels['address'] = 'cím';
+$labels['envelope'] = 'boriték';
+$labels['modifier'] = 'módosító:';
+$labels['text'] = 'szöveg';
+$labels['undecoded'] = 'kódolatlan(nyers)';
+$labels['contenttype'] = 'tartalom tipusa';
+$labels['modtype'] = 'típus:';
+$labels['allparts'] = 'összes';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'név rész';
+$labels['user'] = 'felhasználó';
+$labels['detail'] = 'részlet';
+$labels['comparator'] = 'összehasonlító';
+$labels['default'] = 'alapértelmezett';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'kis-nagybetüre nem érzékeny (ascii-casemap)';
+$labels['asciinumeric'] = 'számszerü (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'visszafelé';
+$labels['vacation'] = 'Vakáció';
+$labels['vacation.reply'] = 'Válasz az üzenetre';
+$labels['vacation.advanced'] = 'Haladó beállítások';
+$labels['vacation.from'] = 'Reply sender address';
+$labels['vacation.subject'] = 'Tárgy';
+$labels['vacation.body'] = 'Törzs';
+$labels['vacation.start'] = 'Szünidő kezdete';
+$labels['vacation.end'] = 'Szünidő vége';
+$labels['vacation.status'] = 'Ãllapot';
+$labels['vacation.on'] = 'Be';
+$labels['vacation.off'] = 'Ki';
+$labels['vacation.addresses'] = 'Saját e-mail címeim';
+$labels['vacation.interval'] = 'Válasz intervallum';
+$labels['vacation.after'] = 'Rakd a szabadság szabályt ez után ';
+$labels['vacation.saving'] = 'Adatok mentése...';
+$labels['vacation.action'] = 'Beérkező üzenet akció';
+$labels['vacation.keep'] = 'Megtartás';
+$labels['vacation.discard'] = 'Érvénytelenít';
+$labels['vacation.redirect'] = 'Ãtírányítás ide';
+$labels['vacation.copy'] = 'Másolat kűldése ide';
+$labels['filladdresses'] = 'Töltsd ki mindent a címeimmel';
+$labels['arialabelfiltersetactions'] = 'Szűrő készlet müveletek';
+$labels['arialabelfilteractions'] = 'Szűrő müveletek';
+$labels['arialabelfilterform'] = 'Szűrő tulajdonságai';
+$labels['ariasummaryfilterslist'] = 'Szűrők listája';
+$labels['ariasummaryfiltersetslist'] = 'Szűrő készletek listája';
+$labels['filterstitle'] = 'Bejövő üzenetek szűrőinek szerkesztése';
+$labels['vacationtitle'] = 'Irodán kiívül szabász szerkesztése';
+$labels['message'] = 'Ãœzenet';
+$labels['duplicate'] = 'duplikált';
+$labels['notduplicate'] = 'nem duplikált';
+$labels['duplicate.handle'] = 'kezelő:';
+$labels['duplicate.header'] = 'fejléc:';
+$labels['duplicate.uniqueid'] = 'azonsító:';
+$labels['duplicate.seconds'] = 'timeout (másodperc):';
+$labels['duplicate.last'] = 'relatív az utolsó végrehajtástól';
+$messages['filterunknownerror'] = 'Ismeretlen szerverhiba';
+$messages['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni';
+$messages['filterdeleteerror'] = 'A szűrőt nem lehet törölni. Szerverhiba történt';
+$messages['filterdeleted'] = 'A szűrő törlése sikeres';
+$messages['filtersaved'] = 'A szűrő mentése sikeres';
+$messages['filtersaveerror'] = 'A szűrő mentése sikertelen. Szerverhiba történt';
+$messages['filterformerror'] = 'A szűrő űrlapon hibák vannak.';
+$messages['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?';
+$messages['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?';
+$messages['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?';
+$messages['forbiddenchars'] = 'Érvénytelen karakter a mezőben';
+$messages['cannotbeempty'] = 'A mező nem lehet üres';
+$messages['ruleexist'] = 'Már van ilyen névvel elmentett szűrő.';
+$messages['setactivateerror'] = 'A kiválasztott szűrő készletet nem sikerült engedélyezni. Szerver hiba történt.';
+$messages['setdeactivateerror'] = 'A kiválasztott szűrő készletet nem sikerült tiltani. Szerver hiba történt.';
+$messages['setdeleteerror'] = 'Nem sikerült a kiválasztott szűrő készletet törölni. Szerver hiba történt.';
+$messages['setactivated'] = 'A filter készlet engedélyezése sikeresen végrehajtódott.';
+$messages['setdeactivated'] = 'A filter készlet tiltása sikeresen végrehajtódott.';
+$messages['setdeleted'] = 'A filter készlet törlése sikeresen végrehajtódott.';
+$messages['setupdated'] = 'A szűrőkészlet sikeresen frissítve';
+$messages['setdeleteconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott szűrő készleteket?';
+$messages['setcreateerror'] = 'Nem sikerült létrehozni a szűrő készletet. Szerver hiba történt.';
+$messages['setcreated'] = 'A szűrő készlet sikeresen létrejött.';
+$messages['activateerror'] = 'Nem sikerült engedélyezni a kiválasztott szűrö(k)et. Szerver hiba történt.';
+$messages['deactivateerror'] = 'Nem sikerült kikapcsolni a kiválasztott szűrő(ke)t. Szerver hiba történt.';
+$messages['deactivated'] = 'Szűrő(k) sikeresen bekapcsolva.';
+$messages['activated'] = 'Szűrő(k) sikeresen kikapcsolva.';
+$messages['moved'] = 'A szűrő sikeresen áthelyezve.';
+$messages['moveerror'] = 'Az áthelyezés nem sikerült. Szerver hiba történt.';
+$messages['nametoolong'] = 'Túll hosszu név';
+$messages['namereserved'] = 'Nem használható (foglalt) név-';
+$messages['setexist'] = 'A készlet már létezik.';
+$messages['nodata'] = 'Legalább egyet ki kell választani.';
+$messages['invaliddateformat'] = 'hibás dátum formátum';
+$messages['saveerror'] = 'Az adat mentése sikertelen. Szerverhiba történt';
+$messages['vacationsaved'] = 'Vakáció adatai sikeresen elmentve.';
+$messages['emptyvacationbody'] = 'A vakácíó üzenet szövegtörzse kötelező!';
+$messages['duplicate.conflict.err'] = 'Egyszerre fejléc és egyedi azonosító nem engedélyezett.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€';
+$labels['managefilters'] = 'Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬ Õ½Õ¿Õ¡ÖÕ¾Õ¸Õ² Õ¶Õ¡Õ´Õ¡Õ¯Õ¶Õ¥Ö€Õ« Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ¨';
+$labels['filtername'] = 'Ô¶Õ¿Õ«Õ¹Õ« Õ¡Õ¶Õ¸Ö‚Õ¶';
+$labels['newfilter'] = 'Õ†Õ¸Ö€ Õ¦Õ¿Õ«Õ¹';
+$labels['filteradd'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ Õ¦Õ¿Õ«Õ¹';
+$labels['filterdel'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ Õ¦Õ¿Õ«Õ¹Õ¨';
+$labels['moveup'] = 'Ô²Õ¡Ö€Õ±Ö€Õ¡ÖÕ¶Õ¥Õ¬';
+$labels['movedown'] = 'Ô»Õ»Õ¥ÖÕ¶Õ¥Õ¬';
+$labels['filterallof'] = 'Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€ ÕºÕ¡Õ°Õ¡Õ¶Õ»Õ¶Õ¥Ö€Õ«Õ¶ Õ°Õ¡Õ´Õ¡ÕºÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶Õ¸Õ²';
+$labels['filteranyof'] = 'Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ ÕºÕ¡Õ°Õ¡Õ¶Õ»Õ¶Õ¥Ö€Õ«Ö ÖÕ¡Õ¶Õ¯Õ¡ÖÕ¡Õ®Õ«Õ¶ Õ°Õ¡Õ´Õ¡ÕºÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶Õ¸Õ²';
+$labels['filterany'] = 'Õ¢Õ¸Õ¬Õ¸Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+$labels['filtercontains'] = 'ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§';
+$labels['filternotcontains'] = 'Õ¹Õ« ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´';
+$labels['filteris'] = 'Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['filterisnot'] = 'Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ¹Õ§';
+$labels['filterexists'] = 'Õ£Õ¸ÕµÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ¸Ö‚Õ¶Õ«';
+$labels['filternotexists'] = 'Õ£Õ¸ÕµÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ¹Õ¸Ö‚Õ¶Õ«';
+$labels['filtermatches'] = 'Õ¢Õ¡Õ¾Õ¡Ö€Õ¡Ö€Õ¸Ö‚Õ´ Õ§ Õ¡Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨';
+$labels['filternotmatches'] = 'Õ¹Õ« Õ¢Õ¡Õ¾Õ¡Ö€Õ¡Ö€Õ¸Ö‚Õ´ Õ¡Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨';
+$labels['filterregex'] = 'Õ¢Õ¡Õ¾Õ¡Ö€Õ¡Ö€Õ¸Ö‚Õ´ Õ§ Õ¯Õ¡Õ¶Õ¸Õ¶Õ¡Õ¾Õ¸Ö€ Õ¡Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨';
+$labels['filternotregex'] = 'Õ¹Õ« Õ¢Õ¡Õ¾Õ¡Ö€Õ¡Ö€Õ¸Ö‚Õ´ Õ¯Õ¡Õ¶Õ¸Õ¶Õ¡Õ¾Õ¸Ö€ Õ¡Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨';
+$labels['filterunder'] = 'Õ¿Õ¡Õ¯';
+$labels['filterover'] = 'Õ¾Ö€Õ¡';
+$labels['addrule'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¨';
+$labels['delrule'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¨';
+$labels['messagemoveto'] = 'ÕÕ¥Õ²Õ¡ÖƒÕ¸Õ­Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['messageredirect'] = 'ÕŽÕ¥Ö€Õ¡Õ°Õ¡Õ½ÖÕ¥Õ¾Õ¸Ö€Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['messagecopyto'] = 'ÕŠÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['messagesendcopy'] = 'ÕˆÖ‚Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ÕºÕ¡Õ¿Õ³Õ¥Õ¶';
+$labels['messagereply'] = 'ÕŠÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢';
+$labels['messagedelete'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['messagediscard'] = 'Õ€Õ¥Õ¼Õ¡ÖÕ¶Õ¥Õ¬, Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢';
+$labels['messagesrules'] = 'ÕÕ¿Õ¡ÖÕ¾Õ¸Õ² Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€';
+$labels['messagesactions'] = '…կատարել հետևյալ գործողությունները.';
+$labels['add'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬';
+$labels['del'] = 'Õ‹Õ¶Õ»Õ¥Õ¬';
+$labels['sender'] = 'ÕˆÖ‚Õ²Õ¡Ö€Õ¯Õ¸Õ²';
+$labels['recipient'] = 'ÕÕ¿Õ¡ÖÕ¸Õ²';
+$labels['vacationdays'] = 'Ô»Õ¶Õ¹ Õ°Õ¡Õ³Õ¡Õ­Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¸Ö‚Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ (Ö…Ö€Õ¥Ö€)`';
+$labels['vacationreason'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¢Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ (Õ¡Ö€Õ±Õ¡Õ¯Õ¸Ö‚Ö€Õ¤Õ« ÕºÕ¡Õ¿Õ³Õ¡Õ¼)`';
+$labels['vacationsubject'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¾Õ¥Ö€Õ¶Õ¡Õ£Õ«Ö€`';
+$labels['rulestop'] = 'Ô´Õ¡Õ¤Õ¡Ö€Õ¥Õ¬ ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¶Õ¥Ö€Õ« Õ½Õ¿Õ¸Ö‚Õ£Õ¸Ö‚Õ´Õ¨';
+$labels['enable'] = 'Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬/Ô±Õ¶Õ»Õ¡Õ¿Õ¥Õ¬';
+$labels['filterset'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€';
+$labels['filtersets'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¶Õ¥Ö€';
+$labels['filtersetadd'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€';
+$labels['filtersetdel'] = 'Õ‹Õ¶Õ»Õ¥Õ¬ Õ¡Õ¼Õ¯Õ¡ Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨';
+$labels['filtersetact'] = 'Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¯Õ¡ Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨';
+$labels['filtersetdeact'] = 'Ô±Õ¶Õ»Õ¡Õ¿Õ¥Õ¬ Õ¡Õ¼Õ¯Õ¡ Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨';
+$labels['filterdef'] = 'Ô¶Õ¿Õ«Õ¹Õ« Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´';
+$labels['filtersetname'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ« Õ¡Õ¶Õ¸Ö‚Õ¶';
+$labels['newfilterset'] = 'Õ†Õ¸Ö€ Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€';
+$labels['active'] = 'Õ¡Õ¯Õ¿Õ«Õ¾';
+$labels['none'] = 'Õ¸Õ¹ Õ´Õ¥Õ¯Õ¨';
+$labels['fromset'] = 'Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ«Ö';
+$labels['fromfile'] = 'Ö†Õ¡ÕµÕ¬Õ«Ö';
+$labels['filterdisabled'] = 'Ô¶Õ¿Õ«Õ¹Õ¨ Õ¡Õ¶Õ»Õ¡Õ¿Õ¾Õ¡Õ® Õ§';
+$labels['countisgreaterthan'] = 'Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ Õ£Õ¥Ö€Õ¡Õ¦Õ¡Õ¶ÖÕ¸Ö‚Õ´ Õ§';
+$labels['countisgreaterthanequal'] = 'Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ Õ£Õ¥Ö€Õ¡Õ¦Õ¡Õ¶ÖÕ¸Ö‚Õ´ Õ§ Õ¯Õ¡Õ´ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['countislessthan'] = 'Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ ÕºÕ¡Õ¯Õ¡Õ½ Õ§';
+$labels['countislessthanequal'] = 'Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ ÕºÕ¡Õ¯Õ¡Õ½ Õ§ Õ¯Õ¡Õ´ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['countequals'] = 'Ö„Õ¡Õ¶Õ¡Õ¯Õ¨ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['valueisgreaterthan'] = 'Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ£Õ¥Ö€Õ¡Õ¦Õ¡Õ¶ÖÕ¸Ö‚Õ´ Õ§';
+$labels['valueisgreaterthanequal'] = 'Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ£Õ¥Ö€Õ¡Õ¦Õ¡Õ¶ÖÕ¸Ö‚Õ´ Õ§ Õ¯Õ¡Õ´ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['valueislessthan'] = 'Õ¡Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¡Õ¯Õ¡Õ½ Õ§';
+$labels['valueislessthanequal'] = 'Õ¡Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¡Õ¯Õ¡Õ½ Õ§ Õ¯Õ¡Õ´ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['valueequals'] = 'Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§';
+$labels['setflags'] = 'Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¶Õ·Õ¥Õ¬ Õ¸Ö€ÕºÕ¥Õ½';
+$labels['addflags'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ Õ¶Õ·Õ¡Õ¶Õ¶Õ¥Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨';
+$labels['removeflags'] = 'Õ€Õ¥Õ¼Õ¡ÖÕ¶Õ¥Õ¬ Õ¶Õ·Õ¡Õ¶Õ¶Õ¥Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ«Ö';
+$labels['flagread'] = 'Ô¸Õ¶Õ©Õ¥Ö€ÖÕ¾Õ¡Õ®';
+$labels['flagdeleted'] = 'Õ‹Õ¶Õ»Õ¾Õ¡Õ®';
+$labels['flaganswered'] = 'ÕŠÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶Õ¾Õ¡Õ®';
+$labels['flagflagged'] = 'Õ†Õ·Õ¾Õ¡Õ®';
+$labels['flagdraft'] = 'ÕÖ‡Õ¡Õ£Õ«Ö€';
+$labels['filtercreate'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¦Õ¿Õ«Õ¹';
+$labels['usedata'] = 'Ô¶Õ¿Õ«Õ¹Õ¸Ö‚Õ´ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ¿Õ¥Õ²Õ¥Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨.';
+$labels['nextstep'] = 'Õ€Õ¡Õ»Õ¸Ö€Õ¤ Ö„Õ¡ÕµÕ¬';
+$labels['...'] = '…';
+$labels['advancedopts'] = 'Õ€Õ¡Õ¾Õ¥Õ¬ÕµÕ¡Õ¬ Õ¨Õ¶Õ¿Ö€Õ¡Õ¶Ö„Õ¶Õ¥Ö€';
+$labels['body'] = 'Õ„Õ¡Ö€Õ´Õ«Õ¶';
+$labels['address'] = 'Õ°Õ¡Õ½ÖÕ¥';
+$labels['envelope'] = 'Õ®Ö€Õ¡Ö€';
+$labels['modifier'] = 'ÖƒÕ¸ÖƒÕ¸Õ­Õ«Õ¹`';
+$labels['text'] = 'Õ¿Õ¥Ö„Õ½Õ¿';
+$labels['undecoded'] = 'Õ´Õ¡Ö„Õ¸Ö‚Ö€';
+$labels['contenttype'] = 'Õ¢Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¿Õ«Õº';
+$labels['modtype'] = 'Õ¿Õ«Õº`';
+$labels['allparts'] = 'Õ¢Õ¸Õ¬Õ¸Ö€Õ¨';
+$labels['domain'] = 'Õ¿Õ«Ö€Õ¸Ö‚ÕµÕ©';
+$labels['localpart'] = 'Õ¬Õ¸Õ¯Õ¡Õ¬ Õ´Õ¡Õ½';
+$labels['user'] = 'Ö…Õ£Õ¿Õ¾Õ¸Õ²';
+$labels['detail'] = 'Õ´Õ¡Õ½';
+$labels['comparator'] = 'Õ°Õ¡Õ´Õ¥Õ´Õ¡Õ¿Õ«Õ¹`';
+$labels['default'] = 'Õ¬Õ¼Õ¡Õ¯ÕµÕ¡Ö';
+$labels['octet'] = 'Õ¡Õ¶ÖƒÕ¸ÖƒÕ¸Õ­ (Ö…Õ¯Õ¿Õ¥Õ¿)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$messages['filterunknownerror'] = 'ÕÕ¥Ö€Õ¾Õ¥Ö€Õ« Õ¡Õ¶Õ°Õ¡ÕµÕ¿ Õ½Õ­Õ¡Õ¬';
+$messages['filterconnerror'] = 'ÕÕ¥Ö€Õ¾Õ¥Ö€Õ« Õ°Õ¥Õ¿ Õ¯Õ¡ÕºÕ« Õ­Õ¶Õ¤Õ«Ö€Ö‰';
+$messages['filterdeleted'] = 'Ô¶Õ¿Õ«Õ¹Õ¨ Õ»Õ¶Õ»Õ¾Õ¥ÖÖ‰';
+$messages['filtersaved'] = 'Ô¶Õ¿Õ«Õ¹Õ¨ ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¾Õ¥ÖÖ‰';
+$messages['filterdeleteconfirm'] = 'Ô´Õ¸Ö‚Ö„ Õ«Õ½Õ¯Õ¡ÕºÕ¥ÕžÕ½ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¾Õ¡Õ® Õ¦Õ¿Õ«Õ¹Õ¨Ö‰';
+$messages['ruledeleteconfirm'] = 'Ô´Õ¸Ö‚Ö„ Õ«Õ½Õ¯Õ¡ÕºÕ¥ÕžÕ½ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¾Õ¡Õ® ÕºÕ¡ÕµÕ´Õ¡Õ¶Õ¨Ö‰';
+$messages['actiondeleteconfirm'] = 'Ô´Õ¸Ö‚Ö„ Õ«Õ½Õ¯Õ¡ÕºÕ¥ÕžÕ½ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¾Õ¡Õ® Õ£Õ¸Ö€Õ®Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨Ö‰';
+$messages['forbiddenchars'] = 'Ô´Õ¡Õ·Õ¿Õ¸Ö‚Õ´ Õ¡Õ¼Õ¯Õ¡ Õ¥Õ¶ Õ¡Ö€Õ£Õ¥Õ¬Õ¾Õ¡Õ® Õ¶Õ«Õ·Õ¥Ö€Ö‰';
+$messages['cannotbeempty'] = 'Ô´Õ¡Õ·Õ¿Õ¨ Õ¤Õ¡Õ¿Õ¡Ö€Õ¯ Õ¹Õ« Õ¯Õ¡Ö€Õ¸Õ² Õ¬Õ«Õ¶Õ¥Õ¬Ö‰';
+$messages['ruleexist'] = 'ÕÖ€Õ¾Õ¡Õ® Õ¡Õ¶Õ¸Ö‚Õ¶Õ¸Õ¾ Õ¦Õ¿Õ«Õ¹ Õ¡Ö€Õ¤Õ¥Õ¶ Õ£Õ¸ÕµÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ¸Ö‚Õ¶Õ«Ö‰';
+$messages['setactivated'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨ Õ´Õ«Õ¡ÖÕ¾Õ¡Õ® Õ§Ö‰';
+$messages['setdeactivated'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨ Õ¡Õ¶Õ»Õ¡Õ¿Õ¾Õ¡Õ® Õ§Ö‰';
+$messages['setdeleted'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨ Õ»Õ¶Õ»Õ¾Õ¡Õ® Õ§Ö‰';
+$messages['setdeleteconfirm'] = 'Ô´Õ¸Ö‚Ö„ Õ«Õ½Õ¯Õ¡ÕºÕ¥ÕžÕ½ ÖÕ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¶Õ»Õ¥Õ¬ Õ¶Õ·Õ¾Õ¡Õ® Õ¦Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨Ö‰';
+$messages['setcreated'] = 'Ô¶Õ¿Õ«Õ¹Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¡Õ® Õ§Ö‰';
+$messages['deactivated'] = 'Ô¶Õ¿Õ«Õ¹Õ« Õ´Õ«Õ¡ÖÕ¾Õ¡Õ® Õ§Ö‰';
+$messages['activated'] = 'Ô¶Õ¿Õ«Õ¹Õ« Õ¡Õ¶Õ»Õ¡Õ¿Õ¾Õ¡Õ® Õ§Ö‰';
+$messages['moved'] = 'Ô¶Õ¿Õ«Õ¹Õ« Õ¿Õ¥Õ²Õ¡ÖƒÕ¸Õ­Õ¾Õ¡Õ® Õ§Ö‰';
+$messages['nametoolong'] = 'Ô±Õ¶Õ¸Ö‚Õ¶Õ¨ Õ¹Õ¡ÖƒÕ¡Õ¦Õ¡Õ¶Ö Õ¥Ö€Õ¯Õ¡Ö€ Õ§Ö‰';
+$messages['namereserved'] = 'Ô±Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ¡Õ¶Õ¸Ö‚Õ¶Ö‰';
+$messages['setexist'] = 'Õ€Õ¡Õ´Õ¡Õ¬Õ«Ö€Õ¨ Õ¡Ö€Õ¤Õ¥Õ¶ Õ£Õ¸ÕµÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ¸Ö‚Õ¶Õ«Ö‰';
+$messages['nodata'] = 'ÕŠÕ¡Õ°Õ¡Õ¶Õ»Õ¾Õ¸Ö‚Õ´ Õ§ Õ¶Õ·Õ¥Õ¬ Õ£Õ¸Õ¶Õ¥ Õ´Õ¥Õ¯ Õ¤Õ«Ö€Ö„Ö‰';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,232 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Gerer filtros de e-mail entrante';
+$labels['filtername'] = 'Nomine de filtro';
+$labels['newfilter'] = 'Nove filtro';
+$labels['filteradd'] = 'Adder filtro';
+$labels['filterdel'] = 'Deler filtro';
+$labels['moveup'] = 'Displaciar in alto';
+$labels['movedown'] = 'Displaciar a basso';
+$labels['filterallof'] = 'que satisface tote le sequente regulas';
+$labels['filteranyof'] = 'que satisface un del sequente regulas';
+$labels['filterany'] = 'tote le messages';
+$labels['filtercontains'] = 'contine';
+$labels['filternotcontains'] = 'non contine';
+$labels['filteris'] = 'es equal a';
+$labels['filterisnot'] = 'non es equal a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'non existe';
+$labels['filtermatches'] = 'corresponde al expression';
+$labels['filternotmatches'] = 'non corresponde al expression';
+$labels['filterregex'] = 'corresponde al expression regular';
+$labels['filternotregex'] = 'non corresponde al expression regular';
+$labels['filterunder'] = 'sub';
+$labels['filterover'] = 'super';
+$labels['addrule'] = 'Adder regula';
+$labels['delrule'] = 'Deler regula';
+$labels['messagemoveto'] = 'Displaciar message a';
+$labels['messageredirect'] = 'Rediriger message a';
+$labels['messagecopyto'] = 'Copiar message a';
+$labels['messagesendcopy'] = 'Inviar copia del message a';
+$labels['messagereply'] = 'Responder con message';
+$labels['messagedelete'] = 'Deler message';
+$labels['messagediscard'] = 'Abandonar con message';
+$labels['messagekeep'] = 'Conservar message in cassa de entrata';
+$labels['messagesrules'] = 'Pro messages entrante:';
+$labels['messagesactions'] = '...exequer le sequente actiones:';
+$labels['add'] = 'Adder';
+$labels['del'] = 'Deler';
+$labels['sender'] = 'Expeditor';
+$labels['recipient'] = 'Destinatario';
+$labels['vacationaddr'] = 'Mi adresses de e-mail:';
+$labels['vacationdays'] = 'Frequentia de invio de messages (in dies):';
+$labels['vacationinterval'] = 'Frequentia de invio de messages:';
+$labels['vacationreason'] = 'Texto del message (motivo del absentia):';
+$labels['vacationsubject'] = 'Subjecto del message:';
+$labels['days'] = 'dies';
+$labels['seconds'] = 'secundas';
+$labels['rulestop'] = 'Cessar de evalutar regulas';
+$labels['enable'] = 'Activar/Disactivar';
+$labels['filterset'] = 'Gruppo de filtros';
+$labels['filtersets'] = 'Gruppos de filtros';
+$labels['filtersetadd'] = 'Adder gruppo de filtros';
+$labels['filtersetdel'] = 'Deler le gruppo de filtros actual';
+$labels['filtersetact'] = 'Activar le gruppo de filtros actual';
+$labels['filtersetdeact'] = 'Disactivar le gruppo de filtros actual';
+$labels['filterseteditraw'] = 'Modificar gruppo de filtros';
+$labels['filterdef'] = 'Definition del filtro';
+$labels['filtersetname'] = 'Nomine del gruppo de filtros';
+$labels['newfilterset'] = 'Nove gruppo de filtros';
+$labels['active'] = 'active';
+$labels['none'] = 'nulle';
+$labels['fromset'] = 'ab gruppo';
+$labels['fromfile'] = 'ab file';
+$labels['filterdisabled'] = 'Filtro disactivate';
+$labels['countisgreaterthan'] = 'numero es superior a';
+$labels['countisgreaterthanequal'] = 'numero es superior o equal a';
+$labels['countislessthan'] = 'numero es inferior a';
+$labels['countislessthanequal'] = 'numero es inferior o equal a';
+$labels['countequals'] = 'numero es equal a';
+$labels['countnotequals'] = 'numero non es equal a';
+$labels['valueisgreaterthan'] = 'valor es superior a';
+$labels['valueisgreaterthanequal'] = 'valor es superior o equal a';
+$labels['valueislessthan'] = 'valor es inferior a';
+$labels['valueislessthanequal'] = 'valor es inferior o equal a';
+$labels['valueequals'] = 'valor es equal a';
+$labels['valuenotequals'] = 'valor non es equal a';
+$labels['setflags'] = 'Mitter signales al message';
+$labels['addflags'] = 'Adder signales al message';
+$labels['removeflags'] = 'Remover signales del message';
+$labels['flagread'] = 'Legite';
+$labels['flagdeleted'] = 'Delite';
+$labels['flaganswered'] = 'Respondite';
+$labels['flagflagged'] = 'Signalate';
+$labels['flagdraft'] = 'Version provisori';
+$labels['setvariable'] = 'Definir variabile';
+$labels['setvarname'] = 'Nomine del variabile:';
+$labels['setvarvalue'] = 'Valor del variabile:';
+$labels['setvarmodifiers'] = 'Modificatores:';
+$labels['varlower'] = 'minusculas';
+$labels['varupper'] = 'majusculas';
+$labels['varlowerfirst'] = 'prime character es minuscula';
+$labels['varupperfirst'] = 'prime character es majuscula';
+$labels['varquotewildcard'] = 'mitter characteres special inter virgulettas';
+$labels['varlength'] = 'longitude';
+$labels['notify'] = 'Inviar notification';
+$labels['notifytarget'] = 'Scopo del notification:';
+$labels['notifymessage'] = 'Message del notification (optional):';
+$labels['notifyoptions'] = 'Optiones de notification (optional):';
+$labels['notifyfrom'] = 'Expeditor del notification (optional):';
+$labels['notifyimportance'] = 'Importantia:';
+$labels['notifyimportancelow'] = 'basse';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alte';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telephono';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crear filtro';
+$labels['usedata'] = 'Usar le sequente datos in le filtro:';
+$labels['nextstep'] = 'Proxime passo';
+$labels['...'] = '...';
+$labels['currdate'] = 'Data actual';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'capite:';
+$labels['year'] = 'anno';
+$labels['month'] = 'mense';
+$labels['day'] = 'die';
+$labels['date'] = 'data (aaaa-mm-dd)';
+$labels['julian'] = 'data (julian)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuta';
+$labels['second'] = 'secunda';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fuso horari';
+$labels['weekday'] = 'die del septimana (0-6)';
+$labels['advancedopts'] = 'Optiones avantiate';
+$labels['body'] = 'Texto';
+$labels['address'] = 'adresse';
+$labels['envelope'] = 'inveloppe';
+$labels['modifier'] = 'modificator:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'non decodificate (crude)';
+$labels['contenttype'] = 'typo de contento';
+$labels['modtype'] = 'typo:';
+$labels['allparts'] = 'totes';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'usator';
+$labels['detail'] = 'detalio';
+$labels['comparator'] = 'comparator:';
+$labels['default'] = 'predefinite';
+$labels['octet'] = 'stricte (octetto)';
+$labels['asciicasemap'] = 'non sensibile al differentia inter majusculas e minusculas (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'indice:';
+$labels['indexlast'] = 'a retro';
+$labels['vacation'] = 'Vacantias';
+$labels['vacation.reply'] = 'Message de responsa';
+$labels['vacation.advanced'] = 'Configuration avantiate';
+$labels['vacation.subject'] = 'Subjecto';
+$labels['vacation.body'] = 'Texto';
+$labels['vacation.start'] = 'Initio del vacantias';
+$labels['vacation.end'] = 'Fin del vacantias';
+$labels['vacation.status'] = 'Stato';
+$labels['vacation.on'] = 'Active';
+$labels['vacation.off'] = 'Non active';
+$labels['vacation.addresses'] = 'Mi adresses de e-mail';
+$labels['vacation.interval'] = 'Intervallo de responsa';
+$labels['vacation.after'] = 'Mitter le regula de vacantias post';
+$labels['vacation.saving'] = 'Salveguarda datos...';
+$labels['vacation.action'] = 'Action pro message entrante';
+$labels['vacation.keep'] = 'Conservar';
+$labels['vacation.discard'] = 'Abandonar';
+$labels['vacation.redirect'] = 'Rediriger a';
+$labels['vacation.copy'] = 'Inviar copia a';
+$labels['filladdresses'] = 'Plenar con tote mi adresses';
+$labels['arialabelfiltersetactions'] = 'Actiones de gruppo de filtros';
+$labels['arialabelfilteractions'] = 'Actiones de filtro';
+$labels['arialabelfilterform'] = 'Proprietates de filtro';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de gruppos de filtros';
+$labels['filterstitle'] = 'Modificar filtros de e-mail entrante';
+$labels['vacationtitle'] = 'Modificar regula de absentia';
+$labels['message'] = 'Message';
+$labels['duplicate'] = 'es duplicate';
+$labels['notduplicate'] = 'non es duplicate';
+$labels['duplicate.uniqueid'] = 'identificator:';
+$messages['filterunknownerror'] = 'Error de servitor incognite.';
+$messages['filterconnerror'] = 'Impossibile connecter al servitor.';
+$messages['filterdeleteerror'] = 'Impossibile deler le filtro. Un error de servitor ha occurrite.';
+$messages['filterdeleted'] = 'Le filtro ha essite delite.';
+$messages['filtersaved'] = 'Le filtro ha essite salveguardate.';
+$messages['filtersaveerror'] = 'Impossibile salveguardar le filtro. Un error de servitor ha occurrite.';
+$messages['filterformerror'] = 'Le forma del filtro contine errores.';
+$messages['filterdeleteconfirm'] = 'Es vos secur de voler deler le filtro seligite?';
+$messages['ruledeleteconfirm'] = 'Es vos secur de voler deler le regula seligite?';
+$messages['actiondeleteconfirm'] = 'Es vos secur de voler deler le action seligite?';
+$messages['forbiddenchars'] = 'Le campo contine characteres interdicte.';
+$messages['cannotbeempty'] = 'Le campo non pote esser vacue.';
+$messages['ruleexist'] = 'Un filtro con le nomine specificate jam existe.';
+$messages['setactivateerror'] = 'Impossibile activar le gruppo de filtros seligite. Un error de servitor ha occurrite.';
+$messages['setdeactivateerror'] = 'Impossibile disactivar le gruppo de filtros seligite. Un error de servitor ha occurrite.';
+$messages['setdeleteerror'] = 'Impossibile deler le gruppo de filtros seligite. Un error de servitor ha occurrite.';
+$messages['setactivated'] = 'Le gruppo de filtros ha essite activate.';
+$messages['setdeactivated'] = 'Le gruppo de filtros ha essite disactivate.';
+$messages['setdeleted'] = 'Le gruppo de filtros ha essite delite.';
+$messages['setdeleteconfirm'] = 'Es vos secur de voler deler le gruppo de filtros seligite?';
+$messages['setcreateerror'] = 'Impossibile crear le gruppo de filtros. Un error de servitor ha occurrite.';
+$messages['setcreated'] = 'Le gruppo de filtros ha essite create.';
+$messages['activateerror'] = 'Impossibile activar le filtro(s) seligite. Un error de servitor ha occurrite.';
+$messages['deactivateerror'] = 'Impossibile disactivar le filtro(s) seligite. Un error de servitor ha occurrite.';
+$messages['deactivated'] = 'Le filtro(s) ha essite disactivate.';
+$messages['activated'] = 'Le filtro(s) ha essite activate.';
+$messages['moved'] = 'Le filtro ha essite displaciate.';
+$messages['moveerror'] = 'Impossibile displaciar le filtro seligite. Un error de servitor ha occurrite.';
+$messages['nametoolong'] = 'Le nomine es troppo longe.';
+$messages['namereserved'] = 'Nomine reservate.';
+$messages['setexist'] = 'Le gruppo jam existe.';
+$messages['nodata'] = 'Al minus un position debe esser seligite.';
+$messages['invaliddateformat'] = 'Le formato del data o del parte de data non es valide';
+$messages['saveerror'] = 'Impossibile salveguardar le datos. Un error de servitor ha occurrite.';
+$messages['vacationsaved'] = 'Le datos del vacantias ha essite salveguardate.';
+$messages['emptyvacationbody'] = 'Le texto del message de vacantias es obligatori.';
+$messages['duplicate.conflict.err'] = 'Ambe le capite e le identificator unic non es permittite.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filter';
+$labels['managefilters'] = 'Atur filter email masuk';
+$labels['filtername'] = 'Nama filter';
+$labels['newfilter'] = 'Filter baru';
+$labels['filteradd'] = 'Tambah filter';
+$labels['filterdel'] = 'Hapus filter';
+$labels['moveup'] = 'Pindah ke atas';
+$labels['movedown'] = 'Pindah ke bawah';
+$labels['filterallof'] = 'cocok dengan semua aturan berikut ini';
+$labels['filteranyof'] = 'cocok dengan aturan manapun';
+$labels['filterany'] = 'semua pesan';
+$labels['filtercontains'] = 'berisi';
+$labels['filternotcontains'] = 'tidak berisi';
+$labels['filteris'] = 'sama dengan';
+$labels['filterisnot'] = 'tidak sama dengan';
+$labels['filterexists'] = 'ada';
+$labels['filternotexists'] = 'tidak ada';
+$labels['filtermatches'] = 'ekspresi yg cocok';
+$labels['filternotmatches'] = 'ekspresi yg tidak cocok';
+$labels['filterregex'] = 'cocok dengan ekspresi reguler';
+$labels['filternotregex'] = 'tidak cocok dengan ekspresi reguler';
+$labels['filterunder'] = 'di bawah';
+$labels['filterover'] = 'di atas';
+$labels['addrule'] = 'Tambah aturan';
+$labels['delrule'] = 'Hapus aturan';
+$labels['messagemoveto'] = 'Pindah pesan ke';
+$labels['messageredirect'] = 'Alihkan pesan ke';
+$labels['messagecopyto'] = 'Salin pesan ke';
+$labels['messagesendcopy'] = 'Kirim salinan pesan ke';
+$labels['messagereply'] = 'balas dengan pesan';
+$labels['messagedelete'] = 'Hapus pesan';
+$labels['messagediscard'] = 'Buang dengan pesan';
+$labels['messagekeep'] = 'Biarkan pesan tetap didalam kotak surat';
+$labels['messagesrules'] = 'Untuk email masuk:';
+$labels['messagesactions'] = '...lakukan tindakan berikut';
+$labels['add'] = 'Tambah';
+$labels['del'] = 'Hapus';
+$labels['sender'] = 'Pengirim';
+$labels['recipient'] = 'Penerima';
+$labels['vacationaddr'] = 'Alamat email saya:';
+$labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
+$labels['vacationinterval'] = 'Seberapa sering untuk pengiriman pesan:';
+$labels['vacationreason'] = 'Isi pesan (alasan liburan):';
+$labels['vacationfrom'] = 'Alamat pengirim balasan:';
+$labels['vacationsubject'] = 'Judul pesan:';
+$labels['days'] = 'hari';
+$labels['seconds'] = 'detik';
+$labels['rulestop'] = 'Berhenti mengevaluasi aturan';
+$labels['enable'] = 'Aktifkan/Non-Aktifkan';
+$labels['filterset'] = 'Himpunan filter';
+$labels['filtersets'] = 'Himpunan banyak filter';
+$labels['filtersetadd'] = 'Tambahkan himpunan filter';
+$labels['filtersetdel'] = 'Hapus himpunan filter yang sekarang';
+$labels['filtersetact'] = 'Aktifkan himpunan filter ayng sekarang';
+$labels['filtersetdeact'] = 'Matikan himpunan filter ayng sekarang';
+$labels['filterseteditraw'] = 'Sunting set penyaring';
+$labels['filterdef'] = 'Definisi filter';
+$labels['filtersetname'] = 'Nama himpunan filter';
+$labels['newfilterset'] = 'Himpunan filter baru';
+$labels['active'] = 'aktif';
+$labels['none'] = 'nihil';
+$labels['fromset'] = 'dari himpunan';
+$labels['fromfile'] = 'dari berkas';
+$labels['filterdisabled'] = 'Filter dimatikan';
+$labels['countisgreaterthan'] = 'penghitungan lebih besar dari';
+$labels['countisgreaterthanequal'] = 'penghitungan lebih besa dari atau sama dengan';
+$labels['countislessthan'] = 'penghitungan lebih kecil dari';
+$labels['countislessthanequal'] = 'penghitungan lebih kecil dari atau sama dengan';
+$labels['countequals'] = 'penghitungan sama dengan';
+$labels['countnotequals'] = 'penghitungan tidak sama dengan';
+$labels['valueisgreaterthan'] = 'nilai lebih besar dari';
+$labels['valueisgreaterthanequal'] = 'nilai lebih besar dari atau sama dengan';
+$labels['valueislessthan'] = 'nilai lebih kecil dari';
+$labels['valueislessthanequal'] = 'nilai lebih kecil dari atau sama dengan';
+$labels['valueequals'] = 'nilai sama dengan';
+$labels['valuenotequals'] = 'nilai tidak sadengan';
+$labels['setflags'] = 'Atur tanda pada pesan';
+$labels['addflags'] = 'Berikan tanda pada pesan';
+$labels['removeflags'] = 'Cabut tanda dari pesan';
+$labels['flagread'] = 'Baca';
+$labels['flagdeleted'] = 'Terhapus';
+$labels['flaganswered'] = 'Terjawab';
+$labels['flagflagged'] = 'Ditandai';
+$labels['flagdraft'] = 'Konsep';
+$labels['setvariable'] = 'Set variabel';
+$labels['setvarname'] = 'Nama variabel:';
+$labels['setvarvalue'] = 'Nilai variabel';
+$labels['setvarmodifiers'] = 'Pengubah';
+$labels['varlower'] = 'huruf kecil';
+$labels['varupper'] = 'huruf besar';
+$labels['varlowerfirst'] = 'karakter pertama huruf kecil';
+$labels['varupperfirst'] = 'karakter pertama huruf besar';
+$labels['varquotewildcard'] = 'kutip karakter khusus';
+$labels['varlength'] = 'panjang';
+$labels['notify'] = 'Kirim pemberitahuan';
+$labels['notifytarget'] = 'Pemberitahuan yang dituju:';
+$labels['notifymessage'] = 'Pemberitahuan pesan (pilihan):';
+$labels['notifyoptions'] = 'Pemberitahuan untuk beberapa pilihan (pilihan):';
+$labels['notifyfrom'] = 'Pemberitahuan ke pengirim (tidak harus):';
+$labels['notifyimportance'] = 'Tingkat kepentingan:';
+$labels['notifyimportancelow'] = 'rendah';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'tinggi';
+$labels['notifymethodmailto'] = 'Surat Elektronik / Email';
+$labels['notifymethodtel'] = 'Telepon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Buat filter';
+$labels['usedata'] = 'Gunakan data berikut dalam filter:';
+$labels['nextstep'] = 'Langkah Selanjutnya';
+$labels['...'] = '...';
+$labels['string'] = 'String';
+$labels['currdate'] = 'Tanggal sekarang';
+$labels['datetest'] = 'Tanggal';
+$labels['dateheader'] = 'header / tajuk:';
+$labels['year'] = 'tahun';
+$labels['month'] = 'bulan';
+$labels['day'] = 'hari';
+$labels['date'] = 'tanggal (yyyy-mm-dd)';
+$labels['julian'] = 'tanggal (kalender julian)';
+$labels['hour'] = 'jam';
+$labels['minute'] = 'menit';
+$labels['second'] = 'detik';
+$labels['time'] = 'waktu :(hh:mm:ss)';
+$labels['iso8601'] = 'tanggal (ISO8601)';
+$labels['std11'] = 'tanggal (RFC2822)';
+$labels['zone'] = 'zona-waktu';
+$labels['weekday'] = 'hari kerja (0-6)';
+$labels['advancedopts'] = 'Pilihan lanjutan';
+$labels['body'] = 'Isi';
+$labels['address'] = 'alamat';
+$labels['envelope'] = 'amplop';
+$labels['modifier'] = 'peubah:';
+$labels['text'] = 'teks';
+$labels['undecoded'] = 'praterjemahan (mentah)';
+$labels['contenttype'] = 'tipe isi';
+$labels['modtype'] = 'tipe:';
+$labels['allparts'] = 'semua';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'bagian lokal';
+$labels['user'] = 'pengguna';
+$labels['detail'] = 'rinci';
+$labels['comparator'] = 'pembanding:';
+$labels['default'] = 'standar';
+$labels['octet'] = 'ketat (oktet)';
+$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'mundur:';
+$labels['vacation'] = 'Liburan';
+$labels['vacation.reply'] = 'Balas pesan';
+$labels['vacation.advanced'] = 'Pengaturan Lanjutan';
+$labels['vacation.from'] = 'Alamat pengirim balasan';
+$labels['vacation.subject'] = 'Judul';
+$labels['vacation.body'] = 'Isi';
+$labels['vacation.start'] = 'Mulai libur';
+$labels['vacation.end'] = 'Akhir libur';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'Nyala';
+$labels['vacation.off'] = 'Mati';
+$labels['vacation.addresses'] = 'Alamat email saya';
+$labels['vacation.interval'] = 'Balas secara interval';
+$labels['vacation.after'] = 'Atur untuk pengaturan cuti setelah';
+$labels['vacation.saving'] = 'Menyimpan data...';
+$labels['vacation.action'] = 'Tindakan untuk pesan masuk';
+$labels['vacation.keep'] = 'Simpan';
+$labels['vacation.discard'] = 'Buang';
+$labels['vacation.redirect'] = 'Alihkan ke';
+$labels['vacation.copy'] = 'Kirim salinan ke';
+$labels['filladdresses'] = 'Isi dengan semua alamat saya';
+$labels['arialabelfiltersetactions'] = 'Tindakan untuk penyaringan';
+$labels['arialabelfilteractions'] = 'Tindakan penyaringan';
+$labels['arialabelfilterform'] = 'Properti untuk penyaringan';
+$labels['ariasummaryfilterslist'] = 'Daftar penyaringan';
+$labels['ariasummaryfiltersetslist'] = 'Daftar penyaringan yang telah di set';
+$labels['filterstitle'] = 'Ubah penyaringan untuk email masuk';
+$labels['vacationtitle'] = 'Ubah aturan untuk sedang-diluar-kantor';
+$labels['message'] = 'Pesan';
+$labels['duplicate'] = 'duplikat';
+$labels['notduplicate'] = 'tidak duplikat';
+$labels['duplicate.handle'] = 'handle:';
+$labels['duplicate.header'] = 'header:';
+$labels['duplicate.uniqueid'] = 'identifier:';
+$labels['duplicate.seconds'] = 'tenggat waktu (detik):';
+$labels['duplicate.last'] = 'relatif terhadap eksekusi terakhir';
+$messages['filterunknownerror'] = 'Error pada server tak dikenali.';
+$messages['filterconnerror'] = 'Tidak dapat menyambung ke server.';
+$messages['filterdeleteerror'] = 'Tidak dapat menghapus penyaringan. Terjadi kesalahan pada server.';
+$messages['filterdeleted'] = 'Penyaringan berhasil dihapus.';
+$messages['filtersaved'] = 'Penyaringan berhasil disimpan.';
+$messages['filtersaveerror'] = 'Tidak dapat menyimpan penyaringan. Terjadi kesalahan pada server.';
+$messages['filterformerror'] = 'Formulir penyaring memuat kesalahan.';
+$messages['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?';
+$messages['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?';
+$messages['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?';
+$messages['forbiddenchars'] = 'Karakter terlarang pada isian.';
+$messages['cannotbeempty'] = 'Isian tidak bisa kosong.';
+$messages['ruleexist'] = 'Penyaringan dengan nama tersebut sudah ada.';
+$messages['setactivateerror'] = 'Tidak dapat mengaktivkan kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
+$messages['setdeactivateerror'] = 'Tidak bisa mematikan kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
+$messages['setdeleteerror'] = 'Tidak dapat menghapus kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
+$messages['setactivated'] = 'Kumpulan penyaringan berhasil dihidupkan.';
+$messages['setdeactivated'] = 'Kumpulan penyaringan berhasil dimatikan.';
+$messages['setdeleted'] = 'Kumpulan penyaringan berhasil dihapus.';
+$messages['setupdated'] = 'Set penyaring sukses dimutakhirkan.';
+$messages['setdeleteconfirm'] = 'Yakin ingin menghapus kumpulan penyaringan terpilih?';
+$messages['setcreateerror'] = 'Tidak bisa membuat kumpulan penyaringan. Terjadi kesalahan pada server';
+$messages['setcreated'] = 'Kumpulan penyaringan berhasul dibuat.';
+$messages['activateerror'] = 'Tidak dapat mengaktifkan penyaringan terpilih. Terjadi kesalahan pada server';
+$messages['deactivateerror'] = 'Tidak dapat mematikan penyaringan terpilih. Terjadi kesalahan pada server';
+$messages['deactivated'] = 'Berhasil menghidupkan penyaringan.';
+$messages['activated'] = 'Berhasil mematikan penyaringan.';
+$messages['moved'] = 'Berhasil memindahkan penyaringan.';
+$messages['moveerror'] = 'Tidak bisa memindahkan penyaringan terpilih. Ada kesalahan di server.';
+$messages['nametoolong'] = 'Nama terlalu panjang.';
+$messages['namereserved'] = 'Nama sudah terpesan.';
+$messages['setexist'] = 'Kumpulan sudah ada.';
+$messages['nodata'] = 'Setidaknya satu posisi harus dipilih!';
+$messages['invaliddateformat'] = 'Format tanggal atau bagian dari tanggal salah';
+$messages['saveerror'] = 'Tidak dapat menyimpan data. Terjadi kesalahan pada server.';
+$messages['vacationsaved'] = 'Data untuk cuti berhasil disimpan.';
+$messages['emptyvacationbody'] = 'Tubuh pesan liburan diperlukan!';
+$messages['duplicate.conflict.err'] = 'Header dan identifier unik keduanya tidak diijinkan.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Síur';
+$labels['filtername'] = 'Heiti síu';
+$labels['moveup'] = 'Færa upp';
+$labels['movedown'] = 'Færa niður';
+$labels['filterany'] = 'öll skeyti';
+$labels['add'] = 'Bæta við';
+$labels['del'] = 'Eyða';
+$labels['sender'] = 'Sendandi';
+$labels['recipient'] = 'Viðtakandi';
+$labels['vacationaddr'] = 'Tölvupóstföngin mín:';
+$labels['days'] = 'dagar';
+$labels['seconds'] = 'sekúndur';
+$labels['flagread'] = 'Lesið';
+$labels['flagdeleted'] = 'Eytt';
+$labels['flagdraft'] = 'Drög';
+$labels['notifymethodmailto'] = 'Tölvupóstfang';
+$labels['notifymethodtel'] = 'Sími';
+$labels['notifymethodsms'] = 'SMS';
+$labels['nextstep'] = 'Næsta skref';
+$labels['...'] = '...';
+$labels['currdate'] = 'Dagsetning núna';
+$labels['datetest'] = 'Dagsetning';
+$labels['year'] = 'ár';
+$labels['month'] = 'mánuður';
+$labels['day'] = 'dagur';
+$labels['date'] = 'dagsetning (yyyy-mm-dd)';
+$labels['julian'] = 'dagsetning (júlíönsk)';
+$labels['hour'] = 'klukkustund';
+$labels['minute'] = 'mínúta';
+$labels['second'] = 'sekúnda';
+$labels['time'] = 'tími (hh:mm:ss)';
+$labels['iso8601'] = 'dagsetning (ISO8601)';
+$labels['std11'] = 'dagsetning (RFC2822)';
+$labels['zone'] = 'tímabelti';
+$labels['weekday'] = 'vikudagur (0-6)';
+$labels['advancedopts'] = 'Ãtarlegir valkostir';
+$labels['body'] = 'Meginmál';
+$labels['address'] = 'heimilisfang';
+$labels['envelope'] = 'umslag';
+$labels['text'] = 'texti';
+$labels['allparts'] = 'allt';
+$labels['domain'] = 'lén';
+$labels['user'] = 'notandi';
+$labels['detail'] = 'nánar';
+$labels['indexlast'] = 'afturábak';
+$labels['vacation'] = 'Leyfi';
+$labels['vacation.reply'] = 'Svarskeyti';
+$labels['vacation.advanced'] = 'Flóknari stillingar';
+$labels['vacation.subject'] = 'Viðfangsefni';
+$labels['vacation.body'] = 'Meginmál';
+$labels['vacation.start'] = 'Leyfi hefst';
+$labels['vacation.end'] = 'Leyfi endar';
+$labels['vacation.status'] = 'Staða';
+$labels['vacation.on'] = 'Kveikt';
+$labels['vacation.off'] = 'Slökkt';
+$labels['vacation.saving'] = 'Vista gögn...';
+$labels['vacation.keep'] = 'Halda';
+$labels['vacation.discard'] = 'Henda';
+$labels['vacation.redirect'] = 'Endurbeina til';
+$labels['vacation.copy'] = 'Senda afrit á';
+$labels['message'] = 'Skilaboð';
+$messages['namereserved'] = 'Nafn er frátekið.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtri';
+$labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo';
+$labels['filtername'] = 'Nome del filtro';
+$labels['newfilter'] = 'Nuovo filtro';
+$labels['filteradd'] = 'Aggiungi filtro';
+$labels['filterdel'] = 'Elimina filtro';
+$labels['moveup'] = 'Sposta sopra';
+$labels['movedown'] = 'Sposta sotto';
+$labels['filterallof'] = 'che soddisfa tutte le regole seguenti';
+$labels['filteranyof'] = 'che soddisfa una qualsiasi delle regole seguenti';
+$labels['filterany'] = 'tutti i messaggi';
+$labels['filtercontains'] = 'contiene';
+$labels['filternotcontains'] = 'non contiene';
+$labels['filteris'] = 'è uguale a';
+$labels['filterisnot'] = 'è diverso da';
+$labels['filterexists'] = 'esiste';
+$labels['filternotexists'] = 'non esiste';
+$labels['filtermatches'] = 'e` in accordo con l\'espressione';
+$labels['filternotmatches'] = 'non e` in accordo con l\'espressione';
+$labels['filterregex'] = 'e` in accordo con l\'espressione regolare';
+$labels['filternotregex'] = 'non e` in accordo con l\'espressione regolare';
+$labels['filterunder'] = 'sotto';
+$labels['filterover'] = 'sopra';
+$labels['addrule'] = 'Aggiungi regola';
+$labels['delrule'] = 'Elimina regola';
+$labels['messagemoveto'] = 'Sposta il messaggio in';
+$labels['messageredirect'] = 'Inoltra il messaggio a';
+$labels['messagecopyto'] = 'copia a';
+$labels['messagesendcopy'] = 'Invia copia a';
+$labels['messagereply'] = 'Rispondi con il messaggio';
+$labels['messagedelete'] = 'Elimina il messaggio';
+$labels['messagediscard'] = 'Rifiuta con messaggio';
+$labels['messagekeep'] = 'Mantieni il messaggio in Posta ricevuta';
+$labels['messagesrules'] = 'Per la posta in arrivo';
+$labels['messagesactions'] = '...esegui le seguenti azioni:';
+$labels['add'] = 'Aggiungi';
+$labels['del'] = 'Elimina';
+$labels['sender'] = 'Mittente';
+$labels['recipient'] = 'Destinatario';
+$labels['vacationaddr'] = 'I miei indirizzi email:';
+$labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
+$labels['vacationinterval'] = 'Ogni quanto tempo inviare i messaggi:';
+$labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):';
+$labels['vacationfrom'] = 'Indirizzo di risposta del mittente:';
+$labels['vacationsubject'] = 'Oggetto del messaggio';
+$labels['days'] = 'giorni';
+$labels['seconds'] = 'secondi';
+$labels['rulestop'] = 'Non valutare le regole successive';
+$labels['enable'] = 'Abilita/disabilita';
+$labels['filterset'] = 'Gruppi di filtri';
+$labels['filtersets'] = 'gruppo di filtri';
+$labels['filtersetadd'] = 'Aggiungi gruppo';
+$labels['filtersetdel'] = 'Cancella gruppo selezionato';
+$labels['filtersetact'] = 'Attiva gruppo selezionato';
+$labels['filtersetdeact'] = 'Disattiva gruppo selezionato';
+$labels['filterseteditraw'] = 'Modifica set di filtri';
+$labels['filterdef'] = 'Definizione del filtro';
+$labels['filtersetname'] = 'Nome del Gruppo di filtri';
+$labels['newfilterset'] = 'Nuovo gruppo di filri';
+$labels['active'] = 'attivo';
+$labels['none'] = 'nessuno';
+$labels['fromset'] = 'dal set';
+$labels['fromfile'] = 'dal file';
+$labels['filterdisabled'] = 'Filtro disabilitato';
+$labels['countisgreaterthan'] = 'somma maggiore di';
+$labels['countisgreaterthanequal'] = 'somma maggiore uguale  a';
+$labels['countislessthan'] = 'somma minore di';
+$labels['countislessthanequal'] = 'somma minore o uguale a';
+$labels['countequals'] = 'somma uguale a';
+$labels['countnotequals'] = 'il conteggio non è uguale a';
+$labels['valueisgreaterthan'] = 'valore maggiore di';
+$labels['valueisgreaterthanequal'] = 'valore maggiore uguale a';
+$labels['valueislessthan'] = 'valore minore di';
+$labels['valueislessthanequal'] = 'valore minore uguale di';
+$labels['valueequals'] = 'valore uguale a';
+$labels['valuenotequals'] = 'il valore non è uguale a';
+$labels['setflags'] = 'Contrassegna il messaggio';
+$labels['addflags'] = 'aggiungi flag al messaggio';
+$labels['removeflags'] = 'togli flag dal messaggio';
+$labels['flagread'] = 'Letto';
+$labels['flagdeleted'] = 'Cancellato';
+$labels['flaganswered'] = 'Risposto';
+$labels['flagflagged'] = 'Contrassegna';
+$labels['flagdraft'] = 'Bozza';
+$labels['setvariable'] = 'Imposta variabile';
+$labels['setvarname'] = 'Nome variabile:';
+$labels['setvarvalue'] = 'Valore variabile:';
+$labels['setvarmodifiers'] = 'Modificatori:';
+$labels['varlower'] = 'minuscole';
+$labels['varupper'] = 'maiuscole';
+$labels['varlowerfirst'] = 'primo carattere minuscolo';
+$labels['varupperfirst'] = 'primo carattere maiuscolo';
+$labels['varquotewildcard'] = 'caratteri speciali di quoting';
+$labels['varlength'] = 'lunghezza';
+$labels['notify'] = 'Invia notifica';
+$labels['notifytarget'] = 'Destinatario della notifica';
+$labels['notifymessage'] = 'Messaggio di notifica (opzionale):';
+$labels['notifyoptions'] = 'Opzioni di notifica (opzionale):';
+$labels['notifyfrom'] = 'Mittente della notifica (opzionale):';
+$labels['notifyimportance'] = 'Importanza:';
+$labels['notifyimportancelow'] = 'bassa';
+$labels['notifyimportancenormal'] = 'normale';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefono';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crea filtro';
+$labels['usedata'] = 'utilizza i seguenti dati nel filtro';
+$labels['nextstep'] = 'passo successivo';
+$labels['...'] = '...';
+$labels['string'] = 'Stringa';
+$labels['currdate'] = 'Data attuale';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'intestazione:';
+$labels['year'] = 'anno';
+$labels['month'] = 'mese';
+$labels['day'] = 'giorno';
+$labels['date'] = 'data (aaaa-mm-gg)';
+$labels['julian'] = 'data (Giuliana)';
+$labels['hour'] = 'ora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'secondo';
+$labels['time'] = 'tempo (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fuso orario';
+$labels['weekday'] = 'giorno della settimana (0-6)';
+$labels['advancedopts'] = 'Opzioni avanzate';
+$labels['body'] = 'Corpo';
+$labels['address'] = 'indirizzo';
+$labels['envelope'] = 'busta';
+$labels['modifier'] = 'modificatore:';
+$labels['text'] = 'testo';
+$labels['undecoded'] = 'non decodificato (raw)';
+$labels['contenttype'] = 'tipo di contenuto';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'tutto';
+$labels['domain'] = 'dominio';
+$labels['localpart'] = 'parte locale';
+$labels['user'] = 'user';
+$labels['detail'] = 'dettaglio';
+$labels['comparator'] = 'comparatore';
+$labels['default'] = 'predefinito';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'non differenziare maiuscole/minuscole (ascii-casemap)';
+$labels['asciinumeric'] = 'numerico';
+$labels['index'] = 'indice:';
+$labels['indexlast'] = 'indietro';
+$labels['vacation'] = 'Vacanza';
+$labels['vacation.reply'] = 'Messaggio di risposta';
+$labels['vacation.advanced'] = 'Impostazioni avanzate';
+$labels['vacation.from'] = 'Indirizzo di risposta del mittente:';
+$labels['vacation.subject'] = 'Oggetto';
+$labels['vacation.body'] = 'Testo';
+$labels['vacation.start'] = 'Inizio vacanza';
+$labels['vacation.end'] = 'Fine vacanza';
+$labels['vacation.status'] = 'Stato';
+$labels['vacation.on'] = 'Attivato';
+$labels['vacation.off'] = 'Disattivato';
+$labels['vacation.addresses'] = 'I miei indirizzi email';
+$labels['vacation.interval'] = 'Intervallo di risposta';
+$labels['vacation.after'] = 'Imposta regola di vacanza dopo';
+$labels['vacation.saving'] = 'Salvataggio...';
+$labels['vacation.action'] = 'Azione messaggio in arrivo';
+$labels['vacation.keep'] = 'Mantieni';
+$labels['vacation.discard'] = 'Elimina';
+$labels['vacation.redirect'] = 'Ridireziona a';
+$labels['vacation.copy'] = 'Invia copia a';
+$labels['filladdresses'] = 'Riempire con tutti i miei indirizzi';
+$labels['arialabelfiltersetactions'] = 'Azione settaggio dei filtri ';
+$labels['arialabelfilteractions'] = 'Azione Filtri';
+$labels['arialabelfilterform'] = 'Proprietà filtri';
+$labels['ariasummaryfilterslist'] = 'Lista dei filtri';
+$labels['ariasummaryfiltersetslist'] = 'Lista settaggio dei filtri';
+$labels['filterstitle'] = 'Modifica filtri dei messaggio in arrivo';
+$labels['vacationtitle'] = 'Modifica le regole del Risponditore automatico';
+$labels['message'] = 'Messaggio';
+$labels['duplicate'] = 'è duplicat';
+$labels['notduplicate'] = 'non è duplicato';
+$labels['duplicate.handle'] = 'gestore:';
+$labels['duplicate.header'] = 'intestazione:';
+$labels['duplicate.uniqueid'] = 'identificatore:';
+$labels['duplicate.seconds'] = 'timeout (secondi):';
+$labels['duplicate.last'] = 'rispetto all\'ultima esecuzione';
+$messages['filterunknownerror'] = 'Errore sconosciuto del server';
+$messages['filterconnerror'] = 'Collegamento al server managesieve fallito';
+$messages['filterdeleteerror'] = 'Eliminazione del filtro fallita. Si è verificato un errore nel server.';
+$messages['filterdeleted'] = 'Filtro eliminato con successo';
+$messages['filtersaved'] = 'Filtro salvato con successo';
+$messages['filtersaveerror'] = 'Salvataggio del filtro fallito. Si è verificato un errore nel server.';
+$messages['filterformerror'] = 'Il modulo del filtro contiene errori.';
+$messages['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?';
+$messages['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?';
+$messages['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?';
+$messages['forbiddenchars'] = 'Caratteri non consentiti nel campo';
+$messages['cannotbeempty'] = 'Il campo non può essere vuoto';
+$messages['ruleexist'] = 'Esiste già un filtro con questo nome';
+$messages['setactivateerror'] = 'Impossibile attivare il filtro. Errore del server.';
+$messages['setdeactivateerror'] = 'Impossibile disattivare i filtri selezionati. Errore del server.';
+$messages['setdeleteerror'] = 'Impossibile cancellare i filtri selezionati. Errore del server.';
+$messages['setactivated'] = 'Filtro attivato';
+$messages['setdeactivated'] = 'Filtro disattivato';
+$messages['setdeleted'] = 'Filtro cancellato';
+$messages['setupdated'] = 'Set di filtri aggiornato con successo.';
+$messages['setdeleteconfirm'] = 'Sei sicuro di voler cancellare il gruppo di filtri';
+$messages['setcreateerror'] = 'Impossibile creare il gruppo di filtri. Errore del server.';
+$messages['setcreated'] = 'Gruppo di filtri creato';
+$messages['activateerror'] = 'Impossibile abilitare i filtri selzionati. Errore del server.';
+$messages['deactivateerror'] = 'impossibile disabilitare i filtri selezionati. Errore del server.';
+$messages['deactivated'] = 'filtro abilitato';
+$messages['activated'] = 'filtro disabilitato';
+$messages['moved'] = 'filtro spostato';
+$messages['moveerror'] = 'impossibile spostare il filtro selezionato. Errore del server.';
+$messages['nametoolong'] = 'Impossibile creare il gruppo: Nome troppo lungo';
+$messages['namereserved'] = 'nome riservato';
+$messages['setexist'] = 'Il gruppo esiste già';
+$messages['nodata'] = 'selezionare almeno una posizione';
+$messages['invaliddateformat'] = 'Formato della data non valido';
+$messages['saveerror'] = 'Impossibile salvare i dati. Errore del server.';
+$messages['vacationsaved'] = 'Dati di vacanza salvati correttamente.';
+$messages['emptyvacationbody'] = 'Il testo del messaggio non puo\' essere vuoto!';
+$messages['duplicate.conflict.err'] = 'Non sono consentiti intestazione e identificatore univoci.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'フィルター';
+$labels['managefilters'] = 'å—信メールã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’管ç†';
+$labels['filtername'] = 'フィルターå';
+$labels['newfilter'] = 'æ–°ã—ã„フィルター';
+$labels['filteradd'] = 'フィルターを追加';
+$labels['filterdel'] = 'フィルターを削除';
+$labels['moveup'] = '上ã«ç§»å‹•';
+$labels['movedown'] = '下ã«ç§»å‹•';
+$labels['filterallof'] = '次ã®ãƒ«ãƒ¼ãƒ«ã®ã™ã¹ã¦ã«ä¸€è‡´';
+$labels['filteranyof'] = '次ã®ãƒ«ãƒ¼ãƒ«ã®ã„ãšã‚Œã‹ã«ä¸€è‡´';
+$labels['filterany'] = 'ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸';
+$labels['filtercontains'] = 'å«ã‚€';
+$labels['filternotcontains'] = 'å«ã¾ãªã„';
+$labels['filteris'] = '次ã«ç­‰ã—ã„';
+$labels['filterisnot'] = '次ã«ç­‰ã—ããªã„';
+$labels['filterexists'] = 'ãŒå­˜åœ¨';
+$labels['filternotexists'] = 'ãŒå­˜åœ¨ã—ãªã„';
+$labels['filtermatches'] = '次ã®å¼ã«ä¸€è‡´';
+$labels['filternotmatches'] = '次ã®å¼ã«ä¸€è‡´ã—ãªã„';
+$labels['filterregex'] = '次ã®æ­£è¦è¡¨ç¾ã«ä¸€è‡´';
+$labels['filternotregex'] = '次ã®æ­£è¦è¡¨ç¾ã«ä¸€è‡´ã—ãªã„';
+$labels['filterunder'] = 'より下';
+$labels['filterover'] = 'より上';
+$labels['addrule'] = 'ルールを追加';
+$labels['delrule'] = 'ルールを削除';
+$labels['messagemoveto'] = '次ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’移動';
+$labels['messageredirect'] = '次ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«è»¢é€';
+$labels['messagecopyto'] = '次ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’コピー';
+$labels['messagesendcopy'] = '次ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ã‚³ãƒ”ーをé€ä¿¡';
+$labels['messagereply'] = 'メッセージを返信';
+$labels['messagedelete'] = 'メッセージを削除';
+$labels['messagediscard'] = 'メッセージを破棄';
+$labels['messagekeep'] = 'メッセージをå—ä¿¡ç®±ã«ä¿æŒ';
+$labels['messagesrules'] = 'å—ä¿¡ã—ãŸãƒ¡ãƒ¼ãƒ«ã®å‡¦ç†:';
+$labels['messagesactions'] = '以下ã®æ“作を実行:';
+$labels['add'] = '追加';
+$labels['del'] = '削除';
+$labels['sender'] = 'é€ä¿¡è€…';
+$labels['recipient'] = '宛先';
+$labels['vacationaddr'] = 'ç§ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹:';
+$labels['vacationdays'] = 'メッセージを(1æ—¥ã«)é€ä¿¡ã™ã‚‹é »åº¦:';
+$labels['vacationinterval'] = 'メッセージをé€ä¿¡ã™ã‚‹é »åº¦:';
+$labels['vacationreason'] = 'メッセージ本体(休暇ã®ç†ç”±):';
+$labels['vacationfrom'] = '返信ã™ã‚‹é€ä¿¡è€…ã®ã‚¢ãƒ‰ãƒ¬ã‚¹:';
+$labels['vacationsubject'] = 'メッセージã®ä»¶å:';
+$labels['days'] = 'æ—¥';
+$labels['seconds'] = '秒';
+$labels['rulestop'] = 'ルールã®è©•ä¾¡ã‚’åœæ­¢';
+$labels['enable'] = '有効/無効';
+$labels['filterset'] = 'フィルターセット';
+$labels['filtersets'] = 'フィルターセット';
+$labels['filtersetadd'] = 'フィルターセットを追加';
+$labels['filtersetdel'] = 'ç¾åœ¨ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚»ãƒƒãƒˆã‚’削除';
+$labels['filtersetact'] = 'ç¾åœ¨ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ セットを有効';
+$labels['filtersetdeact'] = 'ç¾åœ¨ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ セットを無効';
+$labels['filterseteditraw'] = 'フィルターセットを編集';
+$labels['filterdef'] = 'フィルターã®å®šç¾©';
+$labels['filtersetname'] = 'フィルターセットã®åå‰';
+$labels['newfilterset'] = 'æ–°ã—ã„フィルターセット';
+$labels['active'] = '有効';
+$labels['none'] = 'ãªã—';
+$labels['fromset'] = 'セットã‹ã‚‰';
+$labels['fromfile'] = 'ファイルã‹ã‚‰';
+$labels['filterdisabled'] = 'フィルターを無効ã«ã—ã¾ã—ãŸã€‚';
+$labels['countisgreaterthan'] = 'より大ãã„回数';
+$labels['countisgreaterthanequal'] = '以上ã®å›žæ•°';
+$labels['countislessthan'] = '未満ã®å›žæ•°';
+$labels['countislessthanequal'] = '以下ã®å›žæ•°';
+$labels['countequals'] = '次ã¨ç­‰ã—ã„回数';
+$labels['countnotequals'] = '次ã¨ç­‰ã—ããªã„回数';
+$labels['valueisgreaterthan'] = 'より大ãã„値';
+$labels['valueisgreaterthanequal'] = '以上ã®å€¤';
+$labels['valueislessthan'] = '未満ã®å€¤';
+$labels['valueislessthanequal'] = '以下ã®å€¤';
+$labels['valueequals'] = '次ã¨ç­‰ã—ã„値';
+$labels['valuenotequals'] = '次ã¨ç­‰ã—ããªã„値';
+$labels['setflags'] = 'メッセージã«ãƒ•ãƒ©ã‚°ã‚’設定';
+$labels['addflags'] = 'メッセージã«ãƒ•ãƒ©ã‚°ã‚’追加';
+$labels['removeflags'] = 'メッセージã‹ã‚‰ãƒ•ãƒ©ã‚°ã‚’削除';
+$labels['flagread'] = '既読';
+$labels['flagdeleted'] = '削除済ã¿';
+$labels['flaganswered'] = '返信済ã¿';
+$labels['flagflagged'] = 'フラグ付ã';
+$labels['flagdraft'] = '下書ã';
+$labels['setvariable'] = '変数を設定';
+$labels['setvarname'] = '変数ã®åå‰:';
+$labels['setvarvalue'] = '変数ã®å€¤:';
+$labels['setvarmodifiers'] = '修飾å­:';
+$labels['varlower'] = 'å°æ–‡å­—';
+$labels['varupper'] = '大文字';
+$labels['varlowerfirst'] = '最åˆã®æ–‡å­—ã‚’å°æ–‡å­—';
+$labels['varupperfirst'] = '最åˆã®æ–‡å­—を大文字';
+$labels['varquotewildcard'] = '特殊文字を引用処ç†';
+$labels['varlength'] = 'é•·ã•';
+$labels['notify'] = '通知をé€ä¿¡';
+$labels['notifytarget'] = '通知ã®å¯¾è±¡:';
+$labels['notifymessage'] = '通知ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸(ä»»æ„):';
+$labels['notifyoptions'] = '通知ã®ã‚ªãƒ—ション(ä»»æ„):';
+$labels['notifyfrom'] = '通知ã®é€ä¿¡è€…(ä»»æ„):';
+$labels['notifyimportance'] = 'é‡è¦åº¦:';
+$labels['notifyimportancelow'] = '低';
+$labels['notifyimportancenormal'] = '通常';
+$labels['notifyimportancehigh'] = '高';
+$labels['notifymethodmailto'] = 'é›»å­ãƒ¡ãƒ¼ãƒ«';
+$labels['notifymethodtel'] = '電話';
+$labels['notifymethodsms'] = 'ショートメッセージ';
+$labels['filtercreate'] = 'フィルターを作æˆ';
+$labels['usedata'] = 'フィルターã§æ¬¡ã®ãƒ‡ãƒ¼ã‚¿ã‚’使用';
+$labels['nextstep'] = '次ã®æ®µéšŽ';
+$labels['...'] = '...';
+$labels['string'] = '文字列';
+$labels['currdate'] = 'ç¾åœ¨ã®æ—¥ä»˜';
+$labels['datetest'] = '日付';
+$labels['dateheader'] = 'ヘッダー:';
+$labels['year'] = 'å¹´';
+$labels['month'] = '月';
+$labels['day'] = 'æ—¥';
+$labels['date'] = '日付(年-月-日)';
+$labels['julian'] = '日付(ユリウス歴)';
+$labels['hour'] = '時';
+$labels['minute'] = '分';
+$labels['second'] = '秒';
+$labels['time'] = '時刻 (時:分:秒)';
+$labels['iso8601'] = '日付(ISO8601)';
+$labels['std11'] = '日付(RFC2822)';
+$labels['zone'] = 'タイムゾーン';
+$labels['weekday'] = '平日(0-6)';
+$labels['advancedopts'] = '高度ãªã‚ªãƒ—ション';
+$labels['body'] = '本文';
+$labels['address'] = 'メールアドレス';
+$labels['envelope'] = 'エンベロープ';
+$labels['modifier'] = '修正:';
+$labels['text'] = 'テキスト';
+$labels['undecoded'] = '未デコード(ãã®ã¾ã¾)';
+$labels['contenttype'] = 'コンテント・タイプ';
+$labels['modtype'] = '種類:';
+$labels['allparts'] = 'ã™ã¹ã¦';
+$labels['domain'] = 'ドメイン';
+$labels['localpart'] = 'ローカルパート';
+$labels['user'] = 'ユーザー';
+$labels['detail'] = '詳細';
+$labels['comparator'] = '比較器:';
+$labels['default'] = 'åˆæœŸå€¤';
+$labels['octet'] = '厳密(オクテット)';
+$labels['asciicasemap'] = '大文字å°æ–‡å­—を区別ã—ãªã„(ascii-casemap)';
+$labels['asciinumeric'] = '数値(ascii-numeric)';
+$labels['index'] = 'インデックス:';
+$labels['indexlast'] = '後方';
+$labels['vacation'] = '休暇';
+$labels['vacation.reply'] = '返信ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸';
+$labels['vacation.advanced'] = '詳細ãªè¨­å®š';
+$labels['vacation.from'] = 'é€ä¿¡è€…ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«è¿”ä¿¡';
+$labels['vacation.subject'] = '件å';
+$labels['vacation.body'] = '本文';
+$labels['vacation.start'] = '休暇ã®é–‹å§‹';
+$labels['vacation.end'] = '休暇ã®çµ‚了';
+$labels['vacation.status'] = '状態';
+$labels['vacation.on'] = 'オン';
+$labels['vacation.off'] = 'オフ';
+$labels['vacation.addresses'] = 'ç§ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹';
+$labels['vacation.interval'] = '返信ã®é–“éš”';
+$labels['vacation.after'] = '後ã«ä¼‘暇ã®ãƒ«ãƒ¼ãƒ«ã‚’記入';
+$labels['vacation.saving'] = 'データをä¿å­˜ä¸­...';
+$labels['vacation.action'] = '届ã„ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ“作';
+$labels['vacation.keep'] = 'ä¿æŒ';
+$labels['vacation.discard'] = '破棄';
+$labels['vacation.redirect'] = '次ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«è»¢é€';
+$labels['vacation.copy'] = '次ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡';
+$labels['filladdresses'] = 'ã™ã¹ã¦ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§æº€ãŸã™';
+$labels['arialabelfiltersetactions'] = 'フィルターセットã®å‹•ä½œ';
+$labels['arialabelfilteractions'] = 'フィルターã®å‹•ä½œ';
+$labels['arialabelfilterform'] = 'フィルターã®ç‰¹æ€§';
+$labels['ariasummaryfilterslist'] = 'フィルターã®ä¸€è¦§';
+$labels['ariasummaryfiltersetslist'] = 'フィルターセットã®ä¸€è¦§';
+$labels['filterstitle'] = '届ã„ãŸãƒ¡ãƒ¼ãƒ«ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’編集';
+$labels['vacationtitle'] = '勤務時間外ã®ãƒ«ãƒ¼ãƒ«ã‚’編集';
+$labels['message'] = 'メッセージ';
+$labels['duplicate'] = 'ã¯é‡è¤‡';
+$labels['notduplicate'] = 'ã¯éžé‡è¤‡';
+$labels['duplicate.handle'] = 'ãƒãƒ³ãƒ‰ãƒ«:';
+$labels['duplicate.header'] = 'ヘッダー:';
+$labels['duplicate.uniqueid'] = '識別å­:';
+$labels['duplicate.seconds'] = '時間切れ(秒):';
+$labels['duplicate.last'] = '最後ã®å®Ÿè¡Œã‹ã‚‰ç›¸å¯¾çš„';
+$messages['filterunknownerror'] = 'ä¸æ˜Žãªã‚µãƒ¼ãƒãƒ¼ã®ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚';
+$messages['filterconnerror'] = 'サーãƒã«æŽ¥ç¶šã§ãã¾ã›ã‚“。';
+$messages['filterdeleteerror'] = 'フィルターを削除ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['filterdeleted'] = 'フィルターを削除ã—ã¾ã—ãŸã€‚';
+$messages['filtersaved'] = 'フィルターをä¿å­˜ã—ã¾ã—ãŸã€‚';
+$messages['filtersaveerror'] = 'フィルターã®ä¿å­˜ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['filterformerror'] = 'フィルターã®ãƒ•ã‚©ãƒ¼ãƒ ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚';
+$messages['filterdeleteconfirm'] = '本当ã«é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’削除ã—ã¾ã™ã‹?';
+$messages['ruledeleteconfirm'] = '本当ã«é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹?';
+$messages['actiondeleteconfirm'] = '本当ã«é¸æŠžã—ãŸæ“作を削除ã—ã¾ã™ã‹?';
+$messages['forbiddenchars'] = 'é …ç›®ã«ç¦æ­¢ã—ã¦ã„る文字ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚';
+$messages['cannotbeempty'] = 'é …ç›®ã¯ç©ºæ¬„ã«ã§ãã¾ã›ã‚“。';
+$messages['ruleexist'] = '指定ã—ãŸåå‰ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚';
+$messages['setactivateerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚»ãƒƒãƒˆã‚’有効ã«ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['setdeactivateerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚»ãƒƒãƒˆã‚’無効ã«ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['setdeleteerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚»ãƒƒãƒˆã‚’削除ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['setactivated'] = 'フィルターセットを有効ã«ã—ã¾ã—ãŸã€‚';
+$messages['setdeactivated'] = 'フィルターセットを無効ã«ã—ã¾ã—ãŸã€‚';
+$messages['setdeleted'] = 'フィルターセットを削除ã—ã¾ã—ãŸã€‚';
+$messages['setupdated'] = 'フィルターセットを更新ã—ã¾ã—ãŸã€‚';
+$messages['setdeleteconfirm'] = '本当ã«é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚»ãƒƒãƒˆã‚’削除ã—ã¾ã™ã‹?';
+$messages['setcreateerror'] = 'フィルターセットを作æˆã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['setcreated'] = 'フィルターセットを作æˆã—ã¾ã—ãŸã€‚';
+$messages['activateerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’有効ã«ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['deactivateerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’無効ã«ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['deactivated'] = 'フィルターを有効ã«ã—ã¾ã—ãŸã€‚';
+$messages['activated'] = 'フィルターを無効ã«ã—ã¾ã—ãŸã€‚';
+$messages['moved'] = 'フィルターを移動ã—ã¾ã—ãŸã€‚';
+$messages['moveerror'] = 'é¸æŠžã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’移動ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['nametoolong'] = 'åå‰ãŒé•·ã™ãŽã¾ã™ã€‚';
+$messages['namereserved'] = '予約ã•ã‚Œã¦ã„ã‚‹åå‰ã§ã™ã€‚';
+$messages['setexist'] = 'フィルターセットãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚';
+$messages['nodata'] = 'å°‘ãªãã¨ã‚‚1ã¤ã®å ´æ‰€ã‚’é¸æŠžã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“!';
+$messages['invaliddateformat'] = '無効ãªæ—¥ä»˜ã¾ãŸã¯æ—¥ä»˜éƒ¨åˆ†ã®æ›¸å¼';
+$messages['saveerror'] = 'フィルターã®ä¿å­˜ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚';
+$messages['vacationsaved'] = '休暇ã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã—ã¾ã—ãŸã€‚';
+$messages['emptyvacationbody'] = '休暇ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ¬æ–‡ãŒå¿…è¦ã§ã™!';
+$messages['duplicate.conflict.err'] = 'ヘッダーã¨ä¸€æ„ãªè­˜åˆ¥å­ã®ä¸¡æ–¹ã¯åŒæ™‚ã«ä½¿ç”¨ã§ãã¾ã›ã‚“。';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ka_GE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['sender'] = 'გáƒáƒ›áƒ’ზáƒáƒ•áƒœáƒ”ლი';
+$labels['flagread'] = 'წáƒáƒ™áƒ˜áƒ—ხვáƒ';
+$labels['body'] = 'შეტყáƒáƒ‘ინების ტექსტი';
+$labels['vacation.body'] = 'შეტყáƒáƒ‘ინების ტექსტი';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'ážáž˜áŸ’ážšáž„';
+$labels['managefilters'] = 'គ្រប់គ្រង​ážáž˜áŸ’រប​សំបុážáŸ’រ​ចូល';
+$labels['filtername'] = 'ឈ្មោះ​ážáž˜áŸ’ážšáž„';
+$labels['newfilter'] = 'ážáž˜áŸ’រង​ážáŸ’មី';
+$labels['filteradd'] = 'បន្ážáŸ‚ម​ážáž˜áŸ’ážšáž„';
+$labels['filterdel'] = 'លុប​ážáž˜áŸ’ážšáž„';
+$labels['moveup'] = 'រុញ​ទៅ​លើ';
+$labels['movedown'] = 'រុញ​ចុះ​ក្រោម';
+$labels['filterallof'] = 'ážáŸ’រូវ​គ្នា​ទៅ​នឹង​លក្ážážážŽáŸ’ឌ​ទាំង​នáŸáŸ‡';
+$labels['filteranyof'] = 'ážáŸ’រូវ​គ្នា​ទៅ​នឹង​លក្ážážážŽáŸ’ឌ​ណាមួយ';
+$labels['filterany'] = 'សារ​ទាំង​អស់';
+$labels['filtercontains'] = 'មាន​ផ្ទុក';
+$labels['filternotcontains'] = 'មិន​មាន';
+$labels['filteris'] = 'ស្មើ​នឹង';
+$labels['filterisnot'] = 'មិន​ស្មើ​នឹង';
+$labels['filterexists'] = 'មាន';
+$labels['filternotexists'] = 'មិន​មាន';
+$labels['filtermatches'] = 'សញ្ញាណ​ដែល​ážáŸ’រូវ';
+$labels['filterunder'] = 'ក្រោម';
+$labels['filterover'] = 'លើ';
+$labels['addrule'] = 'បន្ážáŸ‚ម​លក្ážážážŽáŸ’ឌ';
+$labels['delrule'] = 'លុប​លក្ážážážŽáŸ’ឌ';
+$labels['messagemoveto'] = 'ផ្លាស់​ទី​សារ​ទៅ';
+$labels['messageredirect'] = 'ប្ដូរ​ទិសដៅ​សារ​ទៅ';
+$labels['messagecopyto'] = 'ចម្លង​សារ​ទៅ';
+$labels['messagesendcopy'] = 'ផ្ញើ​ការ​ចម្លង​សារ​ទៅ';
+$labels['messagereply'] = 'ឆ្លើយ​ážáž”​ជាមួយ​សារ';
+$labels['messagedelete'] = 'លុប​សារ';
+$labels['messagediscard'] = 'បោះបង់​ជាមួយ​នឹង​សារ';
+$labels['messagesrules'] = 'សម្រាប់​សំបុážáŸ’រ​ចូល៖';
+$labels['messagesactions'] = '...ប្រážáž·áž”ážáŸ’ážáž·â€‹ážŸáž€áž˜áŸ’មភាព​ទាំង​នáŸáŸ‡áŸ–';
+$labels['add'] = 'បន្ážáŸ‚ម';
+$labels['del'] = 'លុប';
+$labels['sender'] = 'អ្នក​ផ្ញើ';
+$labels['recipient'] = 'អ្នក​ទទួល';
+$labels['vacationdays'] = 'ážáž¾â€‹áž•áŸ’ញើ​សារ​ញឹកញាប់​ប៉ុណ្ណា (ក្នុង​មួយ​ážáŸ’ងៃ)៖';
+$labels['vacationreason'] = 'ážáž½â€‹ážŸáž¶ážš (áž áŸážáž»áž•áž›â€‹ážœáž·ážŸáŸ’សមកាល)៖';
+$labels['vacationsubject'] = 'ប្រធានបទ​សារ៖';
+$labels['days'] = 'ážáŸ’ងៃ';
+$labels['seconds'] = 'វិនាទី';
+$labels['rulestop'] = 'ឈប់​គិážâ€‹áž‘ៅ​លើ​លក្ážážážŽáŸ’ឌ';
+$labels['enable'] = 'បើក/បិទ';
+$labels['filterdef'] = 'អážáŸ’ážáž“áŸáž™â€‹ážáž˜áŸ’ážšáž„';
+$labels['active'] = 'សកម្ម';
+$labels['none'] = 'គ្មាន';
+$labels['fromfile'] = 'ពី​ឯកសារ';
+$labels['filterdisabled'] = 'បាន​បិទ​ážáž˜áŸ’ážšáž„';
+$labels['valuenotequals'] = 'ážáž˜áŸ’លៃ​មិន​ស្មើ​នឹង';
+$labels['flagread'] = 'បាន​អាន';
+$labels['flagdeleted'] = 'បាន​លុប';
+$labels['flaganswered'] = 'បាន​ឆ្លើយ';
+$labels['flagflagged'] = 'បាន​ដាក់​ទង់';
+$labels['flagdraft'] = 'ការ​ព្រាង';
+$labels['setvariable'] = 'កំណážáŸ‹â€‹áž¢ážáŸážš';
+$labels['setvarname'] = 'ឈ្មោះ​អážáŸážšáŸ–';
+$labels['setvarvalue'] = 'ážáž˜áŸ’លៃ​អážáŸážšáŸ–';
+$labels['varlower'] = 'អក្សរ​ážáž¼áž…';
+$labels['varupper'] = 'អក្សរ​ធំ';
+$labels['varlength'] = 'ប្រវែង';
+$labels['notify'] = 'ផ្ញើ​ការ​ជូន​ដំណឹង';
+$labels['notifyimportance'] = 'សំážáž¶áž“់៖';
+$labels['notifyimportancelow'] = 'ទាប';
+$labels['notifyimportancenormal'] = 'ធម្មážáž¶';
+$labels['notifyimportancehigh'] = 'ážáŸ’ពស់';
+$labels['filtercreate'] = 'បង្កើážâ€‹ážáž˜áŸ’ážšáž„';
+$labels['usedata'] = 'ប្រើ​ទិន្ននáŸáž™â€‹áž‘ាំង​នáŸáŸ‡â€‹áž€áŸ’នុង​ážáž˜áŸ’រង៖';
+$labels['nextstep'] = 'ជំហាន​បន្ទាប់';
+$labels['...'] = '...';
+$labels['currdate'] = 'កាលបរិច្ឆáŸáž‘​បច្ចុប្បន្ន';
+$labels['datetest'] = 'កាលបរិច្ឆáŸáž‘';
+$labels['dateheader'] = 'ក្បាល៖';
+$labels['year'] = 'ឆ្នាំ';
+$labels['month'] = 'ážáŸ‚';
+$labels['day'] = 'ážáŸ’ងៃ';
+$labels['date'] = 'កាល​បរិច្ឆáŸáž‘ (yyyy-mm-dd)';
+$labels['julian'] = 'កាល​បរិច្ឆáŸáž‘ (julian)';
+$labels['hour'] = 'ម៉ោង';
+$labels['minute'] = 'នាទី';
+$labels['second'] = 'វិនាទី';
+$labels['time'] = 'ម៉ោង (hh:mm:ss)';
+$labels['iso8601'] = 'កាល​បរិច្ឆáŸáž‘ (ISO8601)';
+$labels['std11'] = 'កាល​បរិច្ឆáŸáž‘ (RFC2822)';
+$labels['zone'] = 'ážáŸ†áž”ន់​ម៉ោង';
+$labels['weekday'] = 'ážáŸ’ងៃ​សប្ដាហ០(0-6)';
+$labels['advancedopts'] = 'ជម្រើស​កម្រិážâ€‹ážáŸ’ពស់';
+$labels['body'] = 'ážáž½';
+$labels['address'] = 'អាសយដ្ឋាន';
+$labels['envelope'] = 'ស្រោម​សំបុážáŸ’ážš';
+$labels['text'] = 'អážáŸ’ážáž”áž‘';
+$labels['contenttype'] = 'ប្រភáŸáž‘​មាážáž·áž€áž¶';
+$labels['modtype'] = 'ប្រភáŸáž‘៖';
+$labels['allparts'] = 'ទាំងអស់';
+$labels['domain'] = 'ដូមáŸáž“';
+$labels['localpart'] = 'ផ្នែក​មូលដ្ឋាន';
+$labels['user'] = 'អ្នកប្រើ';
+$labels['detail'] = 'លម្អិáž';
+$labels['index'] = 'លិបិក្រម៖';
+$labels['indexlast'] = 'បកក្រោយ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'í•„í„°';
+$labels['managefilters'] = '수신 ë©”ì¼ í•„í„° 관리';
+$labels['filtername'] = '필터명';
+$labels['newfilter'] = '새로운 필터';
+$labels['filteradd'] = '필터 추가';
+$labels['filterdel'] = '필터 삭제';
+$labels['moveup'] = '위로 ì´ë™';
+$labels['movedown'] = '아래로 ì´ë™';
+$labels['filterallof'] = 'ë‹¤ìŒ ëª¨ë“  규칙과 ì¼ì¹˜í•¨';
+$labels['filteranyof'] = 'ë‹¤ìŒ ê·œì¹™ 중 하나ë¼ë„ ì¼ì¹˜í•¨';
+$labels['filterany'] = '모든 메시지';
+$labels['filtercontains'] = '다ìŒì„ í¬í•¨í•¨';
+$labels['filternotcontains'] = '다ìŒì„ í¬í•¨í•˜ì§€ ì•ŠìŒ';
+$labels['filteris'] = '다ìŒê³¼ ì¼ì¹˜í•¨';
+$labels['filterisnot'] = '다ìŒê³¼ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ';
+$labels['filterexists'] = '다ìŒì´ 존재함';
+$labels['filternotexists'] = '다ìŒì´ 존재하지 ì•ŠìŒ';
+$labels['filtermatches'] = 'ë‹¤ìŒ í‘œí˜„ì‹ê³¼ ì¼ì¹˜í•¨';
+$labels['filternotmatches'] = 'ë‹¤ìŒ í‘œí˜„ì‹ê³¼ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ';
+$labels['filterregex'] = 'ë‹¤ìŒ ì •ê·œ 표현ì‹ê³¼ ì¼ì¹˜í•¨';
+$labels['filternotregex'] = 'ë‹¤ìŒ ì •ê·œ 표현ì‹ê³¼ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ';
+$labels['filterunder'] = '다ìŒë³´ë‹¤ 아래임';
+$labels['filterover'] = '다ìŒë³´ë‹¤ 위임';
+$labels['addrule'] = '규칙 추가';
+$labels['delrule'] = '규칙 삭제';
+$labels['messagemoveto'] = '메시지를 ë‹¤ìŒ ìœ„ì¹˜ë¡œ ì´ë™';
+$labels['messageredirect'] = '메시지를 ë‹¤ìŒ ì£¼ì†Œë¡œ 재전송';
+$labels['messagecopyto'] = '메시지를 ë‹¤ìŒ ìœ„ì¹˜ë¡œ 복사';
+$labels['messagesendcopy'] = '메시지 ì‚¬ë³¸ì„ ë‹¤ìŒ ëŒ€ìƒì—게 보내기';
+$labels['messagereply'] = 'ë‹¤ìŒ ë©”ì‹œì§€ë¡œ 회신';
+$labels['messagedelete'] = '메시지 삭제';
+$labels['messagediscard'] = 'ë‹¤ìŒ ë©”ì‹œì§€ì™€ 함께 í기';
+$labels['messagekeep'] = '메시지를 ë°›ì€ íŽ¸ì§€í•¨ì— ë³´ê´€';
+$labels['messagesrules'] = '해당 ë°›ì€ ë©”ì¼:';
+$labels['messagesactions'] = '...ë‹¤ìŒ ë™ìž‘ì„ ì‹¤í–‰:';
+$labels['add'] = '추가';
+$labels['del'] = '삭제';
+$labels['sender'] = '발송ìž';
+$labels['recipient'] = '수신ìž';
+$labels['vacationaddr'] = 'ë‚´ ì´ë©”ì¼ ì£¼ì†Œ:';
+$labels['vacationdays'] = '메시지 발신 주기 (ì¼):';
+$labels['vacationinterval'] = '메시지 발신 주기:';
+$labels['vacationreason'] = '메시지 본문 (휴가 사유):';
+$labels['vacationfrom'] = '회신 시 보내는 사람 주소:';
+$labels['vacationsubject'] = '메시지 제목:';
+$labels['days'] = 'ì¼';
+$labels['seconds'] = 'ì´ˆ';
+$labels['rulestop'] = '규칙 í‰ê°€ë¥¼ 중단';
+$labels['enable'] = '활성화/비활성화';
+$labels['filterset'] = '필터 세트';
+$labels['filtersets'] = '필터 세트';
+$labels['filtersetadd'] = '필터 세트 추가';
+$labels['filtersetdel'] = '현재 필터 세트를 삭제';
+$labels['filtersetact'] = '현재 필터 세트 활성화';
+$labels['filtersetdeact'] = '현재 필터 세트 비활성화';
+$labels['filterseteditraw'] = '필터 세트 편집';
+$labels['filterdef'] = 'í•„í„° ì •ì˜';
+$labels['filtersetname'] = '필터 세트명';
+$labels['newfilterset'] = '새 필터 세트';
+$labels['active'] = '활성화ë¨';
+$labels['none'] = 'ì—†ìŒ';
+$labels['fromset'] = '세트로부터';
+$labels['fromfile'] = '파ì¼ë¡œë¶€í„°';
+$labels['filterdisabled'] = 'í•„í„°ê°€ 비활성화ë¨';
+$labels['countisgreaterthan'] = '개수가 다ìŒë³´ë‹¤ í¼';
+$labels['countisgreaterthanequal'] = '개수가 다ìŒë³´ë‹¤ í¬ê±°ë‚˜ ê°™ìŒ';
+$labels['countislessthan'] = '개수가 다ìŒë³´ë‹¤ ìž‘ìŒ';
+$labels['countislessthanequal'] = '개수가 작거나 ê°™ìŒ';
+$labels['countequals'] = '개수가 다ìŒê³¼ ê°™ìŒ';
+$labels['countnotequals'] = '개수가 다ìŒê³¼ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ';
+$labels['valueisgreaterthan'] = 'ê°’ì´ ë‹¤ìŒë³´ë‹¤ í¼';
+$labels['valueisgreaterthanequal'] = 'ê°’ì´ ë‹¤ìŒë³´ë‹¤ í¬ê±°ë‚˜ ê°™ìŒ';
+$labels['valueislessthan'] = 'ê°’ì´ ë‹¤ìŒë³´ë‹¤ ìž‘ìŒ';
+$labels['valueislessthanequal'] = 'ê°’ì´ ë‹¤ìŒë³´ë‹¤ 작거나 ê°™ìŒ';
+$labels['valueequals'] = 'ê°’ì´ ë‹¤ìŒê³¼ ê°™ìŒ';
+$labels['valuenotequals'] = 'ê°’ì´ ë‹¤ìŒê³¼ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ';
+$labels['setflags'] = '메시지를 깃발로 표시';
+$labels['addflags'] = 'ë©”ì‹œì§€ì— ê¹ƒë°œì„ ì¶”ê°€';
+$labels['removeflags'] = '메시지ì—ì„œ ê¹ƒë°œì„ ì œê±°';
+$labels['flagread'] = 'ì½ìŒ';
+$labels['flagdeleted'] = 'ì‚­ì œë¨';
+$labels['flaganswered'] = 'ì‘답함';
+$labels['flagflagged'] = '깃발로 표시함';
+$labels['flagdraft'] = '임시 보관함';
+$labels['setvariable'] = '변수 설정';
+$labels['setvarname'] = '변수명:';
+$labels['setvarvalue'] = '변수 값:';
+$labels['setvarmodifiers'] = '수ì‹ìž:';
+$labels['varlower'] = '소문ìž';
+$labels['varupper'] = '대문ìž';
+$labels['varlowerfirst'] = '첫 문ìžë¥¼ 소문ìžë¡œ';
+$labels['varupperfirst'] = '첫 문ìžë¥¼ 대문ìžë¡œ';
+$labels['varquotewildcard'] = '특수 기호를 ì¸ìš©';
+$labels['varlength'] = '길ì´';
+$labels['notify'] = '알림 메시지 보내기';
+$labels['notifytarget'] = '알림 대ìƒ:';
+$labels['notifymessage'] = '알림 메시지(옵션):';
+$labels['notifyoptions'] = '알림 옵션(옵션):';
+$labels['notifyfrom'] = '알림 발송ìž(옵션):';
+$labels['notifyimportance'] = '중요ë„:';
+$labels['notifyimportancelow'] = 'ë‚®ìŒ';
+$labels['notifyimportancenormal'] = '보통';
+$labels['notifyimportancehigh'] = '높ìŒ';
+$labels['notifymethodmailto'] = 'ì´ë©”ì¼';
+$labels['notifymethodtel'] = 'ì „í™”';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'í•„í„° ìƒì„±';
+$labels['usedata'] = 'í•„í„°ì—ì„œ ë‹¤ìŒ ë°ì´í„°ë¥¼ 사용:';
+$labels['nextstep'] = 'ë‹¤ìŒ ë‹¨ê³„';
+$labels['...'] = '...';
+$labels['string'] = '스티ë§';
+$labels['currdate'] = '오늘 날짜';
+$labels['datetest'] = '날짜';
+$labels['dateheader'] = '머리글:';
+$labels['year'] = 'ë…„';
+$labels['month'] = 'ì›”';
+$labels['day'] = 'ì¼';
+$labels['date'] = '날짜 (yyyy-mm-dd)';
+$labels['julian'] = '날짜 (율리우스력)';
+$labels['hour'] = '시';
+$labels['minute'] = '분';
+$labels['second'] = 'ì´ˆ';
+$labels['time'] = '시간 (hh:mm:ss)';
+$labels['iso8601'] = '날짜 (ISO8601)';
+$labels['std11'] = '날짜 (RFC2822)';
+$labels['zone'] = '시간대';
+$labels['weekday'] = '주중 (0-6)';
+$labels['advancedopts'] = '고급 설정';
+$labels['body'] = '본문';
+$labels['address'] = '주소';
+$labels['envelope'] = '봉투';
+$labels['modifier'] = '수ì‹ìž:';
+$labels['text'] = 'í…스트';
+$labels['undecoded'] = '암호화ë˜ì§€ ì•ŠìŒ(ì›ìƒíƒœ)';
+$labels['contenttype'] = '내용 유형';
+$labels['modtype'] = '유형:';
+$labels['allparts'] = '모ë‘';
+$labels['domain'] = 'ë„ë©”ì¸';
+$labels['localpart'] = '로컬 부분';
+$labels['user'] = '사용ìž';
+$labels['detail'] = '세부사항';
+$labels['comparator'] = '비êµê¸°:';
+$labels['default'] = '기본';
+$labels['octet'] = '엄격 (8진수)';
+$labels['asciicasemap'] = '대/ì†Œë¬¸ìž êµ¬ë¶„ (ascii-casemap)';
+$labels['asciinumeric'] = 'ìˆ«ìž (ascii-numeric)';
+$labels['index'] = '색ì¸:';
+$labels['indexlast'] = 'ì—­ë°©í–¥';
+$labels['vacation'] = '휴가';
+$labels['vacation.reply'] = '메시지 회신';
+$labels['vacation.advanced'] = '고급 설정';
+$labels['vacation.from'] = '회신 시 보내는 사람 주소';
+$labels['vacation.subject'] = '제목';
+$labels['vacation.body'] = '본문';
+$labels['vacation.start'] = '휴가 시작';
+$labels['vacation.end'] = '휴가 ë';
+$labels['vacation.status'] = 'ìƒíƒœ';
+$labels['vacation.on'] = '켬';
+$labels['vacation.off'] = 'ë”';
+$labels['vacation.addresses'] = 'ë‚´ ì´ë©”ì¼ ì£¼ì†Œ';
+$labels['vacation.interval'] = '회신 주기';
+$labels['vacation.after'] = 'ë‹¤ìŒ ì´í›„ì— íœ´ê°€ ê·œì¹™ì„ ìœ„ì¹˜í•¨';
+$labels['vacation.saving'] = 'ë°ì´í„°ë¥¼ 저장하는 중...';
+$labels['vacation.action'] = '수신 메시지 ë™ìž‘';
+$labels['vacation.keep'] = 'ë³´ê´€';
+$labels['vacation.discard'] = 'í기';
+$labels['vacation.redirect'] = '재전송';
+$labels['vacation.copy'] = 'ì‚¬ë³¸ì„ ë‹¤ìŒ ëŒ€ìƒì—게 전송';
+$labels['filladdresses'] = 'ë‚´ ì´ë©”ì¼ ì£¼ì†Œë¡œ ëª¨ë‘ ì±„ìš°ê¸°';
+$labels['arialabelfiltersetactions'] = 'í•„í„° 세트 ë™ìž‘';
+$labels['arialabelfilteractions'] = 'í•„í„° ë™ìž‘';
+$labels['arialabelfilterform'] = 'í•„í„° ì†ì„±';
+$labels['ariasummaryfilterslist'] = 'í•„í„° 목ë¡';
+$labels['ariasummaryfiltersetslist'] = 'í•„í„° 세트 목ë¡';
+$labels['filterstitle'] = '수신 ë©”ì¼ í•„í„° 편집';
+$labels['vacationtitle'] = 'ìžë¦¬ë¹„움 규칙 편집';
+$labels['message'] = '메시지';
+$labels['duplicate'] = '중복임';
+$labels['notduplicate'] = '중복 아님';
+$labels['duplicate.handle'] = '취급';
+$labels['duplicate.header'] = '머리글:';
+$labels['duplicate.uniqueid'] = 'ì‹ë³„ìž:';
+$labels['duplicate.seconds'] = '타임아웃 (초):';
+$labels['duplicate.last'] = '마지막 실행과 관련';
+$messages['filterunknownerror'] = '알수 없는 서버 오류.';
+$messages['filterconnerror'] = 'ì„œë²„ì— ì—°ê²°í•  수 없습니다.';
+$messages['filterdeleteerror'] = '필터를 삭제할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['filterdeleted'] = 'í•„í„°ê°€ 성공ì ìœ¼ë¡œ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['filtersaved'] = 'í•„í„°ê°€ 성공ì ìœ¼ë¡œ 저장ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['filtersaveerror'] = '필터를 저장할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['filterformerror'] = 'í•„í„° ì–‘ì‹ì— 오류가 í¬í•¨ë˜ì–´ 있ìŒ.';
+$messages['filterdeleteconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ 필터를 삭제하시겠습니까?';
+$messages['ruledeleteconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ ê·œì¹™ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$messages['actiondeleteconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ ë™ìž‘ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$messages['forbiddenchars'] = 'í•„ë“œì— ê¸ˆì§€ëœ ë¬¸ìžê°€ 존재합니다.';
+$messages['cannotbeempty'] = '필드는 비어둘 수 없습니다.';
+$messages['ruleexist'] = '지정한 ì´ë¦„ì˜ í•„í„°ê°€ ì´ë¯¸ 존재합니다.';
+$messages['setactivateerror'] = 'ì„ íƒí•œ í•„í„° 세트를 활성화할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['setdeactivateerror'] = 'ì„ íƒí•œ í•„í„° 세트를 비활성화할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['setdeleteerror'] = 'ì„ íƒí•œ í•„í„° 세트를 삭제할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['setactivated'] = 'í•„í„° 세트가 성공ì ìœ¼ë¡œ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['setdeactivated'] = 'í•„í„° 세트가 성공ì ìœ¼ë¡œ 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['setdeleted'] = 'í•„í„° 세트가 성공ì ìœ¼ë¡œ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['setupdated'] = 'í•„í„° 세트가 성공ì ìœ¼ë¡œ ì—…ë°ì´íŠ¸ ë¨.';
+$messages['setdeleteconfirm'] = 'ì •ë§ë¡œ ì„ íƒí•œ í•„í„° 세트를 삭제하시겠습니까?';
+$messages['setcreateerror'] = 'ì„ íƒí•œ í•„í„° 세트를 ìƒì„±í•  수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['setcreated'] = 'í•„í„° 세트가 성공ì ìœ¼ë¡œ ìƒì„±ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['activateerror'] = 'ì„ íƒí•œ 필터를 활성화할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['deactivateerror'] = 'ì„ íƒí•œ 필터를 비활성화할 수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['deactivated'] = 'í•„í„°ê°€ 성공ì ìœ¼ë¡œ 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['activated'] = 'í•„í„°ê°€ 성공ì ìœ¼ë¡œ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['moved'] = 'í•„í„°ê°€ 성공ì ìœ¼ë¡œ ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['moveerror'] = 'ì„ íƒí•œ 필터를 ì´ë™í•  수 없습니다. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['nametoolong'] = 'ì´ë¦„ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤.';
+$messages['namereserved'] = 'ì˜ˆì•½ëœ ì´ë¦„입니다.';
+$messages['setexist'] = '세트가 ì´ë¯¸ 존재합니다.';
+$messages['nodata'] = '최소 í•˜ë‚˜ì˜ ìœ„ì¹˜ê°€ ì„ íƒë˜ì–´ì•¼ 합니다!';
+$messages['invaliddateformat'] = '유효하지 ì•Šì€ ë‚ ì§œ ë˜ëŠ” 날짜 ì¼ë¶€ 형ì‹';
+$messages['saveerror'] = 'ë°ì´í„°ë¥¼ 저장할 수 없습니다.. 서버 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.';
+$messages['vacationsaved'] = '휴가 ë°ì´í„°ê°€ 성공ì ìœ¼ë¡œ 저장ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['emptyvacationbody'] = '휴가 ë©”ì‹œì§€ì˜ ë³¸ë¬¸ì´ í•„ìš”í•©ë‹ˆë‹¤!';
+$messages['duplicate.conflict.err'] = '머리글 ë° ìœ ì¼ ì‹ë³„ìžê°€ 허용ë˜ì§€ ì•ŠìŒ.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filterany'] = 'hemû peyam';
+$labels['filtercontains'] = 'dihewîne';
+$labels['filternotcontains'] = 'nahebîne';
+$labels['filteris'] = 'weke';
+$labels['filterisnot'] = 'ne weke';
+$labels['filterexists'] = 'heye';
+$labels['filternotexists'] = 'tune ye';
+$labels['filterunder'] = 'bin';
+$labels['filterover'] = 'ser';
+$labels['messagemoveto'] = 'Peyamê bibe ';
+$labels['messageredirect'] = 'Peyamê vegerîne';
+$labels['messagereply'] = 'Bi peyamekê bibersivîne';
+$labels['messagedelete'] = 'Peyamê jê bibe';
+$labels['add'] = 'Tev bike';
+$labels['del'] = 'Jê bibe';
+$labels['sender'] = 'Åžandyar';
+$labels['vacationsubject'] = 'Mijara peyamê:';
+$labels['days'] = 'roj';
+$labels['seconds'] = 'saniye';
+$labels['enable'] = 'Veke/Bigire';
+$labels['active'] = 'çalak';
+$labels['none'] = 'qet';
+$labels['fromfile'] = 'ji dosyeyê';
+$labels['filterdisabled'] = 'Parzing girtî ye';
+$labels['countisgreaterthan'] = 'hejmar mezintir e ji';
+$labels['countisgreaterthanequal'] = 'hejmar weke an jî mezintir e ji';
+$labels['countislessthan'] = 'hejmar kêmtir e ji';
+$labels['countequals'] = 'hejmar weke ';
+$labels['countnotequals'] = 'hejmar ne weke';
+$labels['flagread'] = 'Xwendî';
+$labels['flagdeleted'] = 'Jêbirî';
+$labels['flaganswered'] = 'Nebersivandî';
+$labels['flagflagged'] = 'Bialakirî';
+$labels['varlength'] = 'Dirêjahî';
+$labels['notify'] = 'Agahiyê bişîne';
+$labels['notifyimportance'] = 'Girîng:';
+$labels['notifyimportancelow'] = 'nizm';
+$labels['notifyimportancehigh'] = 'bilind';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Parzingek çêke';
+$labels['nextstep'] = 'Gava pêşde';
+$labels['...'] = '...';
+$labels['currdate'] = 'Dîroka niha';
+$labels['datetest'] = 'Dîrok';
+$labels['year'] = 'sal';
+$labels['month'] = 'meh';
+$labels['day'] = 'roj';
+$labels['date'] = 'dîrok (ssss-mm--rr)';
+$labels['julian'] = 'dîrok (julian)';
+$labels['hour'] = 'saet';
+$labels['minute'] = 'deqîqe';
+$labels['second'] = 'saniye';
+$labels['time'] = 'dem (ss:dd:ss)';
+$labels['iso8601'] = 'dem (ISO8601)';
+$labels['zone'] = 'qada demê';
+$labels['weekday'] = 'rojên hefteyê (0-6)';
+$labels['address'] = 'navnîşan';
+$labels['text'] = 'nivîs';
+$labels['contenttype'] = 'cûreya naverokê';
+$labels['modtype'] = 'cûre';
+$labels['allparts'] = 'hemû';
+$labels['user'] = 'bikarhêner';
+$labels['detail'] = 'detay';
+$labels['vacation.reply'] = 'Peyamê bibersivîne';
+$labels['vacation.advanced'] = 'Mihengên pêşketî';
+$labels['vacation.subject'] = 'Mijar';
+$labels['vacation.status'] = 'RewÅŸ';
+$labels['vacation.on'] = 'Vekirî';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filteren';
+$labels['managefilters'] = 'Filtere geréieren fir Mailen déi erakommen';
+$labels['filtername'] = 'Numm vum Filter';
+$labels['newfilter'] = 'Neie Filter';
+$labels['filteradd'] = 'Filter dobäisetzen';
+$labels['filterdel'] = 'Filter läschen';
+$labels['moveup'] = 'Eropréckelen';
+$labels['movedown'] = 'Erofréckelen';
+$labels['filterallof'] = 'all dës Reegele mussen zoutreffen';
+$labels['filteranyof'] = 'just eng vun de Reegele muss zoutreffen';
+$labels['filterany'] = 'all d\'Messagen';
+$labels['filtercontains'] = 'enthält';
+$labels['filternotcontains'] = 'enthält net';
+$labels['filteris'] = 'ass gläich';
+$labels['filterisnot'] = 'ass net gläich';
+$labels['filterexists'] = 'existéiert';
+$labels['filternotexists'] = 'existéiert net';
+$labels['filterunder'] = 'ënner';
+$labels['filterover'] = 'iwwer';
+$labels['addrule'] = 'Reegel dobäisetzen';
+$labels['delrule'] = 'Reegel läschen';
+$labels['messagemoveto'] = 'Message verréckelen an';
+$labels['messageredirect'] = 'Message ëmleeden an';
+$labels['messagecopyto'] = 'Message kopéieren an';
+$labels['messagesendcopy'] = 'Kopie vum Message schécken un';
+$labels['messagereply'] = 'Mat dësem Message äntweren';
+$labels['messagedelete'] = 'Message läschen';
+$labels['add'] = 'Dobäisetzen';
+$labels['del'] = 'Läschen';
+$labels['sender'] = 'Ofsender';
+$labels['recipient'] = 'Empfänger';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtrai';
+$labels['managefilters'] = 'Tvarkyti gaunamų laiškų filtrus';
+$labels['filtername'] = 'Filtro pavadinimas';
+$labels['newfilter'] = 'Naujas filtras';
+$labels['filteradd'] = 'PridÄ—ti filtrÄ…';
+$labels['filterdel'] = 'Pašalinti filtrą';
+$labels['moveup'] = 'Pakelti aukštyn';
+$labels['movedown'] = 'Nuleisti žemyn';
+$labels['filterallof'] = 'atitinka visas Å¡ias taisykles';
+$labels['filteranyof'] = 'atitinka bet kurią šių taisyklių';
+$labels['filterany'] = 'visi laiškai';
+$labels['filtercontains'] = 'savyje turi';
+$labels['filternotcontains'] = 'savyje neturi';
+$labels['filteris'] = 'yra lygus';
+$labels['filterisnot'] = 'nÄ—ra lygus';
+$labels['filterexists'] = 'egzistuoja';
+$labels['filternotexists'] = 'neegzistuoja';
+$labels['filtermatches'] = 'atitinka Å¡ablonÄ…';
+$labels['filternotmatches'] = 'neatitinka Å¡ablono';
+$labels['filterregex'] = 'atitinka reguliarųjį reiškinį';
+$labels['filternotregex'] = 'neatitinka reguliariojo reiškinio';
+$labels['filterunder'] = 'nesiekia';
+$labels['filterover'] = 'viršija';
+$labels['addrule'] = 'PridÄ—ti taisyklÄ™';
+$labels['delrule'] = 'Pašalinti taisyklę';
+$labels['messagemoveto'] = 'Perkelti laišką į';
+$labels['messageredirect'] = 'Peradresuoti laišką';
+$labels['messagecopyto'] = 'Kopijuoti laišką į';
+$labels['messagesendcopy'] = 'Nusiųsti laiško kopiją';
+$labels['messagereply'] = 'Atsakyti laišku';
+$labels['messagedelete'] = 'Pašalinti laišką';
+$labels['messagediscard'] = 'Panaikinti su laišku';
+$labels['messagekeep'] = 'Palikti laišką gautųjų aplanke';
+$labels['messagesrules'] = 'Gaunamiems laiškams:';
+$labels['messagesactions'] = '…vykdyti šiuos veiksmus:';
+$labels['add'] = 'PridÄ—ti';
+$labels['del'] = 'Pašalinti';
+$labels['sender'] = 'SiuntÄ—jas';
+$labels['recipient'] = 'GavÄ—jas';
+$labels['vacationaddr'] = 'Mano el. pašto adresai:';
+$labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):';
+$labels['vacationinterval'] = 'Kaip dažnai siųsti laiškus:';
+$labels['vacationreason'] = 'Laiško tekstas';
+$labels['vacationfrom'] = 'Atsakymo siuntÄ—jo adresas:';
+$labels['vacationsubject'] = 'Laiško tema:';
+$labels['days'] = 'd.';
+$labels['seconds'] = 'sek.';
+$labels['rulestop'] = 'Nutraukti taisyklių vykdymą';
+$labels['enable'] = 'Įjungti / išjungti';
+$labels['filterset'] = 'Filtrų rinkinys';
+$labels['filtersets'] = 'Filtrų rinkiniai';
+$labels['filtersetadd'] = 'Pridėti filtrų rinkinį';
+$labels['filtersetdel'] = 'Pašalinti šį filtrų rinkinį';
+$labels['filtersetact'] = 'Įgalinti šį filtrų rinkinį';
+$labels['filtersetdeact'] = 'Išjungti šį filtrų rinkinį';
+$labels['filterseteditraw'] = 'Taisyti filtrų rinkinį';
+$labels['filterdef'] = 'Filtro aprašas';
+$labels['filtersetname'] = 'Filtrų rinkinio pavadinimas';
+$labels['newfilterset'] = 'Naujas filtrų rinkinys';
+$labels['active'] = 'aktyvus';
+$labels['none'] = 'joks';
+$labels['fromset'] = 'iš rinkinio';
+$labels['fromfile'] = 'iš failo';
+$labels['filterdisabled'] = 'Filtras išjungtas';
+$labels['countisgreaterthan'] = 'kiekis didesnis nei';
+$labels['countisgreaterthanequal'] = 'kiekis didesnis arba lygus';
+$labels['countislessthan'] = 'kiekis mažesnis nei';
+$labels['countislessthanequal'] = 'kiekis mažesnis arba lygus';
+$labels['countequals'] = 'kiekis lygus';
+$labels['countnotequals'] = 'kiekis nÄ—ra lygus';
+$labels['valueisgreaterthan'] = 'reikšmė didesnė nei';
+$labels['valueisgreaterthanequal'] = 'reikšmė didesnė arba lygi';
+$labels['valueislessthan'] = 'reikšmė mažesnė nei';
+$labels['valueislessthanequal'] = 'reikšmė mažesnė arba lygi';
+$labels['valueequals'] = 'reikšmė lygi';
+$labels['valuenotequals'] = 'reikšmė nėra lygi';
+$labels['setflags'] = 'Nustatyti laiško požymius';
+$labels['addflags'] = 'Pridėti laiško požymius';
+$labels['removeflags'] = 'Pašalinti laiško požymius';
+$labels['flagread'] = 'Skaitytas';
+$labels['flagdeleted'] = 'Pašalintas';
+$labels['flaganswered'] = 'Atsakytas';
+$labels['flagflagged'] = 'Pažymėtas gairele';
+$labels['flagdraft'] = 'Juodraštis';
+$labels['setvariable'] = 'Nustatyti kintamąjį';
+$labels['setvarname'] = 'Kintamojo vardas:';
+$labels['setvarvalue'] = 'Kintamojo vertÄ—:';
+$labels['setvarmodifiers'] = 'Modifikatoriai:';
+$labels['varlower'] = 'mažosios raidės';
+$labels['varupper'] = 'didžiosios raidės';
+$labels['varlowerfirst'] = 'pirmoji raidė mažoji';
+$labels['varupperfirst'] = 'pirmoji raidė didžioji';
+$labels['varquotewildcard'] = 'cituoti specialius simbolius';
+$labels['varlength'] = 'ilgis';
+$labels['notify'] = 'Siųsti priminimą';
+$labels['notifytarget'] = 'Priminimo gavÄ—jas:';
+$labels['notifymessage'] = 'Priminimo laiškas (nebūtina):';
+$labels['notifyoptions'] = 'Priminimo nustatymai (nebūtina):';
+$labels['notifyfrom'] = 'Priminimo siuntėjas (nebūtina):';
+$labels['notifyimportance'] = 'Svarbumas';
+$labels['notifyimportancelow'] = 'žemas';
+$labels['notifyimportancenormal'] = 'normalus';
+$labels['notifyimportancehigh'] = 'aukštas';
+$labels['notifymethodmailto'] = 'El. paštas';
+$labels['notifymethodtel'] = 'Telefono numeris';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Kurti filtrÄ…';
+$labels['usedata'] = 'Filtrui naudoti Å¡iuos duomenis:';
+$labels['nextstep'] = 'Kitas žingsnis';
+$labels['...'] = '…';
+$labels['string'] = 'EilutÄ—';
+$labels['currdate'] = 'Å iandienos data';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'antraštė:';
+$labels['year'] = 'metai';
+$labels['month'] = 'mÄ—nuo';
+$labels['day'] = 'diena';
+$labels['date'] = 'data (yyyy-mm-dd)';
+$labels['julian'] = 'data (Julijaus)';
+$labels['hour'] = 'valanda';
+$labels['minute'] = 'minutÄ—';
+$labels['second'] = 'sekundÄ—';
+$labels['time'] = 'laikas (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'laiko-zona';
+$labels['weekday'] = 'savaitÄ—s diena (0-6)';
+$labels['advancedopts'] = 'Papildomi nustatymai';
+$labels['body'] = 'Laiško tekstas';
+$labels['address'] = 'adresas';
+$labels['envelope'] = 'vokas';
+$labels['modifier'] = 'midifikatorius:';
+$labels['text'] = 'tekstas';
+$labels['undecoded'] = 'neiškoduotas (pirminis) tekstas';
+$labels['contenttype'] = 'turinio tipas';
+$labels['modtype'] = 'tipas:';
+$labels['allparts'] = 'visi';
+$labels['domain'] = 'sritis';
+$labels['localpart'] = 'vietinÄ— adreso dalis';
+$labels['user'] = 'naudotojas';
+$labels['detail'] = 'detalÄ—';
+$labels['comparator'] = 'palyginimo algoritmas:';
+$labels['default'] = 'numatytasis';
+$labels['octet'] = 'griežtas („octet“)';
+$labels['asciicasemap'] = 'nepaisantis raidžių registro („ascii-casemap“)';
+$labels['asciinumeric'] = 'skaitinis („ascii-numeric“)';
+$labels['index'] = 'turinys:';
+$labels['indexlast'] = 'atbulai';
+$labels['vacation'] = 'Atostogos';
+$labels['vacation.reply'] = 'Atsakyti laišku';
+$labels['vacation.advanced'] = 'Papildomos nuostatos';
+$labels['vacation.from'] = 'Atsakymo siuntÄ—jo adresas';
+$labels['vacation.subject'] = 'Tema';
+$labels['vacation.body'] = 'Laiško tekstas';
+$labels['vacation.start'] = 'Atostogų pradžia';
+$labels['vacation.end'] = 'Atostogų pabaiga';
+$labels['vacation.status'] = 'BÅ«sena';
+$labels['vacation.on'] = 'Įjungta';
+$labels['vacation.off'] = 'IÅ¡jungta';
+$labels['vacation.addresses'] = 'Mano el. pašto adresai';
+$labels['vacation.interval'] = 'Atsakymo intervalas';
+$labels['vacation.after'] = 'Atostogų taisyklę pastatyti po';
+$labels['vacation.saving'] = 'IÅ¡saugomi duomenys...';
+$labels['vacation.action'] = 'Veiksmas su gaunamais laiškais';
+$labels['vacation.keep'] = 'Palikti';
+$labels['vacation.discard'] = 'Panaikinti';
+$labels['vacation.redirect'] = 'Peradresuoti kam';
+$labels['vacation.copy'] = 'Siųsti kopiją kam';
+$labels['filladdresses'] = 'Įterpti visus mano el. pašto adresus';
+$labels['arialabelfiltersetactions'] = 'Filtrų rinkinio veiksmai';
+$labels['arialabelfilteractions'] = 'Filtro veiksmai';
+$labels['arialabelfilterform'] = 'Filtro nustatymai';
+$labels['ariasummaryfilterslist'] = 'Filtrų sąrašas';
+$labels['ariasummaryfiltersetslist'] = 'Filtrų rinkinių sąrašas';
+$labels['filterstitle'] = 'Tvarkyti gaunamų laiškų filtrus';
+$labels['vacationtitle'] = 'Redaguoti ne-biure taisyklÄ™';
+$labels['message'] = 'Laiškas';
+$labels['duplicate'] = 'yra dubliuojamas';
+$labels['notduplicate'] = 'nÄ—ra dubliuojamas';
+$labels['duplicate.handle'] = 'doroklÄ—:';
+$labels['duplicate.header'] = 'antraštė:';
+$labels['duplicate.uniqueid'] = 'identifikatorius:';
+$labels['duplicate.seconds'] = 'laiko limitas (sekundžių):';
+$labels['duplicate.last'] = 'santykinai paskutinio vykdymo';
+$messages['filterunknownerror'] = 'Nežinoma serverio klaida.';
+$messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.';
+$messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.';
+$messages['filterdeleted'] = 'Filtras panaikintas sÄ—kmingai.';
+$messages['filtersaved'] = 'Filtras sėkmingai išsaugotas';
+$messages['filtersaveerror'] = 'Nepavyksta išsaugoti filtro. Įvyko serverio klaida.';
+$messages['filterformerror'] = 'Filtrų formoje yra klaidų.';
+$messages['filterdeleteconfirm'] = 'Ar jūs esate įsitikinęs, jog norite panaikinti pasirinktus filtrus(-ą)?';
+$messages['ruledeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą taisyklę?';
+$messages['actiondeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą veiksmą?';
+$messages['forbiddenchars'] = 'Laukelyje yra draudžiamų simbolių.';
+$messages['cannotbeempty'] = 'Laukelis negali bÅ«ti tuÅ¡Äias';
+$messages['ruleexist'] = 'Filtras tokiu vardu jau yra.';
+$messages['setactivateerror'] = 'Neįmanoma aktyvuoti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setdeactivateerror'] = 'Neįmanoma išjungti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setdeleteerror'] = 'Neįmanoma panaikinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setactivated'] = 'Filtrų rinkinys sėkmingai aktyvuotas.';
+$messages['setdeactivated'] = 'Filtrų rinkinys sėkmingai deaktyvuotas.';
+$messages['setdeleted'] = 'Filtrų rinkinys sėkmingai panaikintas.';
+$messages['setupdated'] = 'Filtrų rinkinys sėkmingai atnaujintas.';
+$messages['setdeleteconfirm'] = 'Ar jūs esate tikri, jog norite panaikinti pasirinktą filtrų rinkinį?';
+$messages['setcreateerror'] = 'Neįmanoma sukurti filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setcreated'] = 'Filtrų rinkinys sėkmingai sukurtas.';
+$messages['activateerror'] = 'Neįmanoma įjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
+$messages['deactivateerror'] = 'Neįmanoma išjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
+$messages['deactivated'] = 'Filtras(-as) sėkmingai išjungti.';
+$messages['activated'] = 'Filtras(-as) sėkmingai įjungti.';
+$messages['moved'] = 'Filtrai perkelti sÄ—kmingai.';
+$messages['moveerror'] = 'Pasirinkto filtro perkelti neįmanoma. Įvyko serverio klaida.';
+$messages['nametoolong'] = 'Vardas per ilgas.';
+$messages['namereserved'] = 'Rezervuotas vardas.';
+$messages['setexist'] = 'Rinkinys jau yra sukurtas.';
+$messages['nodata'] = 'BÅ«tina pasirinkti bent vienÄ… pozicijÄ…!';
+$messages['invaliddateformat'] = 'Neteisingas datos ar jos dalies formatas';
+$messages['saveerror'] = 'Nepavyksta išsaugoti duomenų. Įvyko serverio klaida.';
+$messages['vacationsaved'] = 'Sėkmingai išsaugoti atostogų duomenys.';
+$messages['emptyvacationbody'] = 'Atostogų pranešimui turinys būtinas!';
+$messages['duplicate.conflict.err'] = 'Naudojimas antraštės ir identifikatoriaus kartu yra draudžiamas, negalimas.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Vēstuļu filtri';
+$labels['managefilters'] = 'PÄrvaldÄ«t ienÄkoÅ¡o vÄ“stuļu filtrus';
+$labels['filtername'] = 'Filtra nosaukums';
+$labels['newfilter'] = 'Jauns filtrs';
+$labels['filteradd'] = 'Pievienot filtru';
+$labels['filterdel'] = 'Dzēst filtru';
+$labels['moveup'] = 'PÄrvietot augÅ¡up';
+$labels['movedown'] = 'PÄrvietot lejup';
+$labels['filterallof'] = 'jÄatbilst visiem sekojoÅ¡ajiem nosacÄ«jumiem';
+$labels['filteranyof'] = 'jÄatbilst jebkuram no sekojoÅ¡ajiem nosacÄ«jumiem';
+$labels['filterany'] = 'visÄm vÄ“stulÄ“m';
+$labels['filtercontains'] = 'satur';
+$labels['filternotcontains'] = 'nesatur';
+$labels['filteris'] = 'ir vienÄds ar';
+$labels['filterisnot'] = 'nav vienÄds ar';
+$labels['filterexists'] = 'eksistē';
+$labels['filternotexists'] = 'neeksistē';
+$labels['filtermatches'] = 'jÄatbilst izteiksmei';
+$labels['filternotmatches'] = 'neatbilst izteiksmei';
+$labels['filterregex'] = 'jÄatbilst regulÄrai izteiksmei';
+$labels['filternotregex'] = 'neatbilst regulÄrai izteiksmei';
+$labels['filterunder'] = 'zem';
+$labels['filterover'] = 'virs';
+$labels['addrule'] = 'Pievienot nosacījumu';
+$labels['delrule'] = 'Dzēst nosacījumu';
+$labels['messagemoveto'] = 'PÄrvietot vÄ“stuli uz';
+$labels['messageredirect'] = 'PÄradresÄ“t vÄ“stuli uz';
+$labels['messagecopyto'] = 'Kopēt vēstuli uz';
+$labels['messagesendcopy'] = 'PÄrsÅ«tÄ«t vÄ“stules kopiju uz';
+$labels['messagereply'] = 'Atbildēt ar vēstuli';
+$labels['messagedelete'] = 'Dzēst vēstuli';
+$labels['messagediscard'] = 'Dzēst vēstuli un atbildēt';
+$labels['messagekeep'] = 'Paturēt ziņu Iesūtnē';
+$labels['messagesrules'] = 'IenÄkoÅ¡ajÄm vÄ“stulÄ“m:';
+$labels['messagesactions'] = '...izpildÄ«t sekojoÅ¡Äs darbÄ«bas:';
+$labels['add'] = 'Pievienot';
+$labels['del'] = 'Dzēst';
+$labels['sender'] = 'SÅ«tÄ«tÄjs';
+$labels['recipient'] = 'Saņēmējs';
+$labels['vacationaddr'] = 'Manas e-pasta adreses:';
+$labels['vacationdays'] = 'Cik bieži sÅ«tÄ« ziņojumus (dienÄs):';
+$labels['vacationinterval'] = 'Cik bieži sūtīt vēstules:';
+$labels['vacationreason'] = 'AtvaļinÄjuma paziņojuma teksts:';
+$labels['vacationfrom'] = 'AtbildÄ“tÄja e-pasta adrese:';
+$labels['vacationsubject'] = 'Vēstules tēma:';
+$labels['days'] = 'dienas';
+$labels['seconds'] = 'sekundes';
+$labels['rulestop'] = 'ApturÄ“t nosacÄ«jumu pÄrbaudi';
+$labels['enable'] = 'Ieslēgt/Izslēgt';
+$labels['filterset'] = 'Filtru kopa';
+$labels['filtersets'] = 'Filtru kopas';
+$labels['filtersetadd'] = 'Pievienot filtru kopu';
+$labels['filtersetdel'] = 'Dzēst pašreizējo filtru kopu';
+$labels['filtersetact'] = 'Aktivizēt pašreizējo filtru kopu';
+$labels['filtersetdeact'] = 'Deaktivizēt pašreizējo filtru kopu';
+$labels['filterseteditraw'] = 'Rediģēt filtru kopu';
+$labels['filterdef'] = 'Filtra apraksts';
+$labels['filtersetname'] = 'Filtru kopas nosaukums';
+$labels['newfilterset'] = 'Jauna filtru kopa';
+$labels['active'] = 'aktīvs';
+$labels['none'] = 'nav';
+$labels['fromset'] = 'no kopas';
+$labels['fromfile'] = 'no faila';
+$labels['filterdisabled'] = 'Filtrs atslēgts';
+$labels['countisgreaterthan'] = 'skaits ir lielÄks kÄ';
+$labels['countisgreaterthanequal'] = 'skaits ir vienÄds vai lielÄks kÄ';
+$labels['countislessthan'] = 'skaits ir mazÄks kÄ';
+$labels['countislessthanequal'] = 'skaits ir vienÄds vai mazÄks kÄ';
+$labels['countequals'] = 'skaits ir vienÄds ar';
+$labels['countnotequals'] = 'skaits nav vienÄds ar';
+$labels['valueisgreaterthan'] = 'vÄ“rtÄ«ba ir lielÄka kÄ';
+$labels['valueisgreaterthanequal'] = 'vÄ“rtÄ«ba ir vienÄda vai lielÄka kÄ';
+$labels['valueislessthan'] = 'vÄ“rtÄ«ba ir mazÄka kÄ';
+$labels['valueislessthanequal'] = 'vÄ“rtÄ«ba ir vienÄda vai mazÄka kÄ';
+$labels['valueequals'] = 'vÄ“rtÄ«ba ir vienÄda ar';
+$labels['valuenotequals'] = 'vÄ“rtÄ«ba nav vienÄda ar';
+$labels['setflags'] = 'Marķēt vēstuli';
+$labels['addflags'] = 'Pievienot vēstulei marķierus';
+$labels['removeflags'] = 'Noņemt vēstulei marķierus';
+$labels['flagread'] = 'Lasītas';
+$labels['flagdeleted'] = 'Dzēstas';
+$labels['flaganswered'] = 'Atbildētas';
+$labels['flagflagged'] = 'MarÄ·Ä“tas';
+$labels['flagdraft'] = 'Melnraksts';
+$labels['setvariable'] = 'Iestatīt mainīgo';
+$labels['setvarname'] = 'MainÄ«gÄ nosaukums:';
+$labels['setvarvalue'] = 'MainÄ«gÄ vÄ“rtÄ«ba:';
+$labels['setvarmodifiers'] = 'Modifikatori:';
+$labels['varlower'] = 'mazie burti';
+$labels['varupper'] = 'lielie burti';
+$labels['varlowerfirst'] = 'pirmais burts kÄ mazais burts';
+$labels['varupperfirst'] = 'pirmais burts kÄ lielais burts';
+$labels['varquotewildcard'] = '"citÄ“t" speciÄlÄs rakstzÄ«mes';
+$labels['varlength'] = 'garums';
+$labels['notify'] = 'Sūtīt paziņojumus';
+$labels['notifytarget'] = 'Paziņojuma mērķis:';
+$labels['notifymessage'] = 'Paziņojuma teksts (neobligÄts):';
+$labels['notifyoptions'] = 'Paziņojuma opcijas (neobligÄts):';
+$labels['notifyfrom'] = 'Paziņojuma sÅ«tÄ«tÄjs (neobligÄts):';
+$labels['notifyimportance'] = 'Svarīgums:';
+$labels['notifyimportancelow'] = 'zems';
+$labels['notifyimportancenormal'] = 'parasts';
+$labels['notifyimportancehigh'] = 'augsts';
+$labels['notifymethodmailto'] = 'E-pasts';
+$labels['notifymethodtel'] = 'Telefons';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Izveidot filtru';
+$labels['usedata'] = 'FiltrÄ izmantot sekojoÅ¡us datus';
+$labels['nextstep'] = 'NÄkamais solis';
+$labels['...'] = '...';
+$labels['string'] = 'Teksts';
+$labels['currdate'] = 'Pašreizējais datums';
+$labels['datetest'] = 'Datums';
+$labels['dateheader'] = 'galvene:';
+$labels['year'] = 'gads';
+$labels['month'] = 'mēnesis';
+$labels['day'] = 'diena';
+$labels['date'] = 'datums (gggg-mm-dd)';
+$labels['julian'] = 'datums (JÅ«lija kalendÄrs)';
+$labels['hour'] = 'stunda';
+$labels['minute'] = 'minūte';
+$labels['second'] = 'sekunde';
+$labels['time'] = 'laiks (hh:mm:ss)';
+$labels['iso8601'] = 'datums (ISO8601)';
+$labels['std11'] = 'datums (RFC2822)';
+$labels['zone'] = 'laikajosla';
+$labels['weekday'] = 'nedēļas diena (0-6)';
+$labels['advancedopts'] = 'PaplaÅ¡inÄtie iestatÄ«jumi';
+$labels['body'] = 'Pamatteksts';
+$labels['address'] = 'adresÄts';
+$labels['envelope'] = 'aploksne';
+$labels['modifier'] = 'modifikators:';
+$labels['text'] = 'teksts';
+$labels['undecoded'] = 'neatkodÄ“ts (neapstrÄdÄti dati)';
+$labels['contenttype'] = 'satura tips';
+$labels['modtype'] = 'tips:';
+$labels['allparts'] = 'viss';
+$labels['domain'] = 'domēns';
+$labels['localpart'] = 'lokÄlÄ daļa';
+$labels['user'] = 'lietotÄjs';
+$labels['detail'] = 'detaļas';
+$labels['comparator'] = 'salÄ«dzinÄtÄjs';
+$labels['default'] = 'noklusÄ“tÄ vÄ“rtÄ«ba';
+$labels['octet'] = 'precīzs (oktets)';
+$labels['asciicasemap'] = 'reģistrnejutīgs (ascii tabula)';
+$labels['asciinumeric'] = 'skaitļu (ascii skaitļu)';
+$labels['index'] = 'indekss:';
+$labels['indexlast'] = 'atpakaļ';
+$labels['vacation'] = 'Brīvdienas';
+$labels['vacation.reply'] = 'Atbildes e-pasts';
+$labels['vacation.advanced'] = 'PaplaÅ¡inÄtie iestatÄ«jumi';
+$labels['vacation.from'] = 'Atbildes sÅ«tÄ«tÄja e-pasta adrese';
+$labels['vacation.subject'] = 'TÄ“ma';
+$labels['vacation.body'] = 'Saturs';
+$labels['vacation.start'] = 'BrÄ«vdienu sÄkuma datums';
+$labels['vacation.end'] = 'Brīvdienu beigu datums';
+$labels['vacation.status'] = 'Statuss';
+$labels['vacation.on'] = 'Ieslēgts';
+$labels['vacation.off'] = 'Izslēgts';
+$labels['vacation.addresses'] = 'Manas e-pasta adreses';
+$labels['vacation.interval'] = 'AtbildÄ“Å¡anas intervÄls';
+$labels['vacation.after'] = 'AtvaļinÄjuma noteikumu ievietot pÄ“c';
+$labels['vacation.saving'] = 'Dati tiek saglabÄti...';
+$labels['vacation.action'] = 'DarbÄ«bas, kuras jÄveic, kad tiek atsÅ«tÄ«ta jauna vÄ“stule';
+$labels['vacation.keep'] = 'SaglabÄt';
+$labels['vacation.discard'] = 'NesaglabÄt';
+$labels['vacation.redirect'] = 'PÄrsÅ«tÄ«t uz';
+$labels['vacation.copy'] = 'Sūtīt kopiju uz';
+$labels['filladdresses'] = 'AizpildÄ«t ar visÄm manÄm e-pasta adresÄ“m';
+$labels['arialabelfiltersetactions'] = 'Filtra kopas darbības';
+$labels['arialabelfilteractions'] = 'Filtra darbības';
+$labels['arialabelfilterform'] = 'Filtra iestatījumi';
+$labels['ariasummaryfilterslist'] = 'Filtru saraksts';
+$labels['ariasummaryfiltersetslist'] = 'Filtru kopu saraksts';
+$labels['filterstitle'] = 'Rediģēt ienÄkoÅ¡o e-pastu filtrus';
+$labels['vacationtitle'] = 'Rediģēt "neesmu ofisÄ" nosacÄ«jumu';
+$labels['message'] = 'VÄ“stule';
+$labels['duplicate'] = 'ir dublikÄts';
+$labels['notduplicate'] = 'nav dublikÄts';
+$labels['duplicate.handle'] = 'atslēga:';
+$labels['duplicate.header'] = 'galvene:';
+$labels['duplicate.uniqueid'] = 'identifikators:';
+$labels['duplicate.seconds'] = 'pÄrtraukums (sekundes):';
+$labels['duplicate.last'] = 'relatīvs pēdējai izpildei';
+$messages['filterunknownerror'] = 'NezinÄma servera kļūda.';
+$messages['filterconnerror'] = 'NeizdevÄs pieslÄ“gties ManageSieve serverim.';
+$messages['filterdeleteerror'] = 'NeizdevÄs izdzÄ“st filtru - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['filterdeleted'] = 'Filtrs veiksmīgi izdzēsts.';
+$messages['filtersaved'] = 'Filtrs veiksmÄ«gi saglabÄts.';
+$messages['filtersaveerror'] = 'NeizdevÄs saglabÄt filtru - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['filterformerror'] = 'Filtra forma ir kļūdaina.';
+$messages['filterdeleteconfirm'] = 'Vai JÅ«s tieÅ¡Äm vÄ“laties dzÄ“st atzÄ«mÄ“to filtru?';
+$messages['ruledeleteconfirm'] = 'Vai JÅ«s tieÅ¡Äm vÄ“laties dzÄ“st atzÄ«mÄ“to nosacÄ«jumu?';
+$messages['actiondeleteconfirm'] = 'Vai JÅ«s tieÅ¡Äm vÄ“laties dzÄ“st atzÄ«mÄ“to darbÄ«bu?';
+$messages['forbiddenchars'] = 'Lauks satur aizliegtus simbolus.';
+$messages['cannotbeempty'] = 'Lauks nedrīkst būt tukšs.';
+$messages['ruleexist'] = 'Filtrs ar tÄdu nosaukumu jau pastÄv.';
+$messages['setactivateerror'] = 'NeizdevÄs aktivizÄ“t atzÄ«mÄ“to filtru kopu - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['setdeactivateerror'] = 'NeizdevÄs deaktivizÄ“t atzÄ«mÄ“to filtru kopu - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['setdeleteerror'] = 'NeizdevÄs izdzÄ“st atzÄ«mÄ“to filtru kopu - atgadÄ«jÄs servera ieksÄ“jÄ kļūda.';
+$messages['setactivated'] = 'Filtru kopa veiksmīgi aktivizēta.';
+$messages['setdeactivated'] = 'Filtru kopa veiksmīgi deaktivizēta.';
+$messages['setdeleted'] = 'Filtru kopa veiksmīgi izdzēsta.';
+$messages['setupdated'] = 'Filtru kopa atjaunota veiksmīgi.';
+$messages['setdeleteconfirm'] = 'Vai tieÅ¡Äm JÅ«s vÄ“laties dzÄ“st atzÄ«mÄ“to filtru kopu?';
+$messages['setcreateerror'] = 'NeizdevÄs izveidot filtru kopu - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['setcreated'] = 'Filtru kopa veiksmīgi izveidota.';
+$messages['activateerror'] = 'Nav iespÄ“jams ieslÄ“gt izvÄ“lÄ“to(s) filtru(s) - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['deactivateerror'] = 'Nav iespÄ“jams atslÄ“gt izvÄ“lÄ“to(s) filtru(s) - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['deactivated'] = 'Filtrs(i) veiksmīgi atslēgts(i).';
+$messages['activated'] = 'Filtrs(i) veiksmīgi ieslēgts(i).';
+$messages['moved'] = 'Filtrs veiksmÄ«gi pÄrvietots.';
+$messages['moveerror'] = 'Nav iespÄ“jams pÄrvietot izvÄ“lÄ“to filtru - atgadÄ«jÄs servera iekÅ¡Ä“jÄ kļūda.';
+$messages['nametoolong'] = 'NeizdevÄs izveidot filtru kopu. PÄrÄk garÅ¡ kopas nosaukums.';
+$messages['namereserved'] = 'Rezervētais nosaukums.';
+$messages['setexist'] = 'Kopa jau eksistē.';
+$messages['nodata'] = 'Ir jÄbÅ«t atzÄ«mÄ“tai vismaz vienai pozÄ«cijai!';
+$messages['invaliddateformat'] = 'NederÄ«gs datums vai datuma formÄts';
+$messages['saveerror'] = 'Nav iespÄ“jams saglabÄt datus. Servera kļūda.';
+$messages['vacationsaved'] = 'BrÄ«vdienu iestatÄ«jumi veiksmÄ«gi saglabÄti.';
+$messages['emptyvacationbody'] = 'BrÄ«vdienu e-pastam obligÄti jÄnorÄda vÄ“stules teksts!';
+$messages['duplicate.conflict.err'] = 'Gan galvenes, gan unikÄlais identifikators nav atļauts.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Филтри ';
+$labels['managefilters'] = 'Управувај филтри за дојдовна пошта';
+$labels['filtername'] = 'Име на филтер ';
+$labels['newfilter'] = 'Ðов филтер ';
+$labels['filteradd'] = 'Додај филтер ';
+$labels['filterdel'] = 'Избришај филтер ';
+$labels['moveup'] = 'ПомеÑти нагоре ';
+$labels['movedown'] = 'ПомеÑти надолу ';
+$labels['filterallof'] = 'Појавување на Ñите од Ñледниве правила';
+$labels['filteranyof'] = 'Појавување на било кои од Ñледниве правила';
+$labels['filterany'] = 'Сите пораки ';
+$labels['filtercontains'] = 'Содржи';
+$labels['filternotcontains'] = 'Ðе Ñодржи';
+$labels['filteris'] = 'Е еднакво на ';
+$labels['filterisnot'] = 'Ðе е еднакво на ';
+$labels['filterexists'] = 'ПоÑтои ';
+$labels['filternotexists'] = 'Ðе поÑтои ';
+$labels['filtermatches'] = 'Се Ñовпаѓаат изразувањата ';
+$labels['filternotmatches'] = 'Ðе Ñе Ñовпаѓаат изразувањата';
+$labels['filterregex'] = 'Се Ñовпаѓаат регуларни изразувања';
+$labels['filternotregex'] = 'Ðе Ñе Ñовпаѓаат регуларни изразувања';
+$labels['filterunder'] = 'Под ';
+$labels['filterover'] = 'Ðад';
+$labels['addrule'] = 'Додај правило';
+$labels['delrule'] = 'Избришај правило';
+$labels['messagemoveto'] = 'ПремеÑти порака во ';
+$labels['messageredirect'] = 'ПренаÑочи порака до ';
+$labels['messagecopyto'] = 'Копирај порака до ';
+$labels['messagesendcopy'] = 'Прати порака до ';
+$labels['messagereply'] = 'Врати Ñо порака ';
+$labels['messagedelete'] = 'Избриши порака ';
+$labels['messagediscard'] = 'Отфрли Ñо порака ';
+$labels['messagekeep'] = 'Задржи ја пораката во дојдовно Ñандаче ';
+$labels['messagesrules'] = 'За дојдовна пошта:';
+$labels['messagesactions'] = '...Изврши ги Ñледните акции:';
+$labels['add'] = 'Додај';
+$labels['del'] = 'Избриши';
+$labels['sender'] = 'Праќач';
+$labels['recipient'] = 'Примач';
+$labels['vacationaddr'] = 'Мојата електорнÑка пошта:';
+$labels['vacationdays'] = 'Колку чеÑто праќа пораки (дневно):';
+$labels['vacationinterval'] = 'Колку чеÑто праќа пораки:';
+$labels['vacationreason'] = 'Тело на порака (причина за одмор)';
+$labels['vacationfrom'] = 'Врати адреÑа на иÑпраќач:';
+$labels['vacationsubject'] = 'Предмет на порака ';
+$labels['days'] = 'Денови';
+$labels['seconds'] = 'Секунди';
+$labels['rulestop'] = 'ПреÑтани да евалуираш правила ';
+$labels['enable'] = 'Овозможи/Оневозможи';
+$labels['filterset'] = 'Сет на филтер ';
+$labels['filtersets'] = 'Сетови филтри';
+$labels['filtersetadd'] = 'ПоÑтави Ñет на филтри';
+$labels['filtersetdel'] = 'Избриши го тековниот Ñет на филтри ';
+$labels['filtersetact'] = 'Ðктивирај го тековниот Ñет на филтри ';
+$labels['filtersetdeact'] = 'Деактивирај го тековниот Ñет на филтри ';
+$labels['filterseteditraw'] = 'Уреди го филтер Ñетот ';
+$labels['filterdef'] = 'Дефиниција на филтер ';
+$labels['filtersetname'] = 'Име на филтер Ñет ';
+$labels['newfilterset'] = 'Ðов Ñет на филтри ';
+$labels['active'] = 'Ðктивен';
+$labels['none'] = 'Ðема ';
+$labels['fromset'] = 'од Ñет ';
+$labels['fromfile'] = 'од папка';
+$labels['filterdisabled'] = 'Филтер иÑклучен';
+$labels['countisgreaterthan'] = 'Бројот е поголем од ';
+$labels['countisgreaterthanequal'] = 'бројот е поголем од или еднаков на ';
+$labels['countislessthan'] = 'бројот е помал од ';
+$labels['countislessthanequal'] = 'бројот е помл од или еднаков на ';
+$labels['countequals'] = 'бројот е еднаков на ';
+$labels['countnotequals'] = 'бројот не е еднаков на ';
+$labels['valueisgreaterthan'] = 'вредноÑта е поголема од ';
+$labels['valueisgreaterthanequal'] = 'вредноÑта е поголема од или еднаква на ';
+$labels['valueislessthan'] = 'вредноÑта е помала од ';
+$labels['valueislessthanequal'] = 'вредноÑта е помало од или еднаква на ';
+$labels['valueequals'] = 'вредноÑта е еднаква на ';
+$labels['valuenotequals'] = 'вредноÑта не е еднаква на ';
+$labels['setflags'] = 'ПоÑтави знамиња на пораката ';
+$labels['addflags'] = 'Додај знамиња на пораката ';
+$labels['removeflags'] = 'Тргни знамиња од пораката ';
+$labels['flagread'] = 'Читај';
+$labels['flagdeleted'] = 'Избришани';
+$labels['flaganswered'] = 'Одговорени';
+$labels['flagflagged'] = 'Означени';
+$labels['flagdraft'] = 'Предлог';
+$labels['setvariable'] = 'ПоÑтави променлива';
+$labels['setvarname'] = 'Име на променлива:';
+$labels['setvarvalue'] = 'ВредноÑÑ‚ на променлива:';
+$labels['setvarmodifiers'] = 'Модификатори:';
+$labels['varlower'] = 'мали букви';
+$labels['varupper'] = 'големи букви';
+$labels['varlowerfirst'] = 'мала прва буква';
+$labels['varupperfirst'] = 'голем прва буква';
+$labels['varquotewildcard'] = 'цитирај Ñпецијален карактер ';
+$labels['varlength'] = 'должина';
+$labels['notify'] = 'ИÑпрати извеÑтување';
+$labels['notifytarget'] = 'Цел на извеÑтување:';
+$labels['notifymessage'] = 'Порака за извеÑтување (незадолжително):';
+$labels['notifyoptions'] = 'Опции за извеÑтување (незадолжително):';
+$labels['notifyfrom'] = 'ИзвеÑтување за иÑпраќачот (незадолжително):';
+$labels['notifyimportance'] = 'ВажноÑÑ‚:';
+$labels['notifyimportancelow'] = 'ниÑко';
+$labels['notifyimportancenormal'] = 'нормално';
+$labels['notifyimportancehigh'] = 'виÑоко';
+$labels['notifymethodmailto'] = 'ЕлектронÑка пошта';
+$labels['notifymethodtel'] = 'Телефон';
+$labels['notifymethodsms'] = 'СМС';
+$labels['filtercreate'] = 'Креирај филтер';
+$labels['usedata'] = 'ИÑкориÑти ги Ñледните податоци за филтер:';
+$labels['nextstep'] = 'Следен чекор';
+$labels['...'] = '...';
+$labels['string'] = 'Ðиза';
+$labels['currdate'] = 'Денешна дата ';
+$labels['datetest'] = 'Дата ';
+$labels['dateheader'] = 'Заглавие';
+$labels['year'] = 'година';
+$labels['month'] = 'меÑец';
+$labels['day'] = 'ден';
+$labels['date'] = 'дата (гггг-мм-дд)';
+$labels['julian'] = 'дата (јулијанÑки календар)';
+$labels['hour'] = 'чаÑ';
+$labels['minute'] = 'минута';
+$labels['second'] = 'Ñекунда';
+$labels['time'] = 'време (чч:мм:ÑÑ)';
+$labels['iso8601'] = 'дата (ISO8601)';
+$labels['std11'] = 'дата (RFC2822)';
+$labels['zone'] = 'временÑка зона';
+$labels['weekday'] = 'ден од неделата (0-6)';
+$labels['advancedopts'] = 'Ðапредни опции';
+$labels['body'] = 'Тело';
+$labels['address'] = 'адреÑа';
+$labels['envelope'] = 'плик';
+$labels['modifier'] = 'модификатор:';
+$labels['text'] = 'текÑÑ‚';
+$labels['undecoded'] = 'Ðедекодирано (Ñурово)';
+$labels['contenttype'] = 'тип на Ñодржина';
+$labels['modtype'] = 'Тип:';
+$labels['allparts'] = 'Ñите ';
+$labels['domain'] = 'домен';
+$labels['localpart'] = 'локален дел';
+$labels['user'] = 'кориÑник';
+$labels['detail'] = 'детал';
+$labels['comparator'] = 'Компаратор:';
+$labels['default'] = 'Ñтандардно';
+$labels['octet'] = 'Ñтрог (октет)';
+$labels['asciicasemap'] = 'ÐечуÑтвителен за големи и мали букви (ascii-csemap)';
+$labels['asciinumeric'] = 'Ðумерички (ascii-numeric)';
+$labels['index'] = 'ИндекÑ:';
+$labels['indexlast'] = 'наназад';
+$labels['vacation'] = 'Одмор';
+$labels['vacation.reply'] = 'Порака за одговор ';
+$labels['vacation.advanced'] = 'Ðапредни подеÑувања';
+$labels['vacation.from'] = 'Одговори на адреÑата на иÑпраќачот';
+$labels['vacation.subject'] = 'Предмет';
+$labels['vacation.body'] = 'Тело';
+$labels['vacation.start'] = 'Почеток на одмор';
+$labels['vacation.end'] = 'Крај на одмор';
+$labels['vacation.status'] = 'Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ';
+$labels['vacation.on'] = 'Вклучи';
+$labels['vacation.off'] = 'ИÑклучи';
+$labels['vacation.addresses'] = 'Моите електронÑки пошти';
+$labels['vacation.interval'] = 'Интервал на враќање ';
+$labels['vacation.after'] = 'Стави правило за одмор по';
+$labels['vacation.saving'] = 'Зачувување на податок...';
+$labels['vacation.action'] = 'Ðкција за дојдовна порака';
+$labels['vacation.keep'] = 'Задржи';
+$labels['vacation.discard'] = 'Отфрли';
+$labels['vacation.redirect'] = 'ПренаÑочи до';
+$labels['vacation.copy'] = 'ИÑпрати копија до ';
+$labels['filladdresses'] = 'Пополни Ñо Ñите мои адреÑи ';
+$labels['arialabelfiltersetactions'] = 'Ðкции на филтер Ñет ';
+$labels['arialabelfilteractions'] = 'Ðкции на филтер ';
+$labels['arialabelfilterform'] = 'СвојÑтва на филтер ';
+$labels['ariasummaryfilterslist'] = 'ИÑта од филтри';
+$labels['ariasummaryfiltersetslist'] = 'ЛиÑта од филтер Ñетови';
+$labels['filterstitle'] = 'Уреди ги дојдовните филтри за пошта ';
+$labels['vacationtitle'] = 'Уреди го надвор од канцеларија правилото';
+$labels['message'] = 'Порака ';
+$labels['duplicate'] = 'е дупликат ';
+$labels['notduplicate'] = 'не е дупликат';
+$labels['duplicate.handle'] = 'Справи Ñе Ñо:';
+$labels['duplicate.header'] = 'заглавие:';
+$labels['duplicate.uniqueid'] = 'идентификатор:';
+$labels['duplicate.seconds'] = 'ИÑтек на време (Ñекунди):';
+$labels['duplicate.last'] = 'Во Ð¾Ð´Ð½Ð¾Ñ Ð½Ð° поÑледното извршување';
+$messages['filterunknownerror'] = 'Ðепозната грешка на Ñерверот.';
+$messages['filterconnerror'] = 'Ðе може да Ñе поврзе Ñо Ñерверот .';
+$messages['filterdeleteerror'] = 'Ðе може да Ñе избришат филтри. ÐаÑтана грешка Ñо Ñерверот  ';
+$messages['filterdeleted'] = 'Филтерот е уÑпешно избришан';
+$messages['filtersaved'] = 'Филтерот е уÑпешно зачуван';
+$messages['filtersaveerror'] = 'Ðе може да Ñе зачува филтерот. ÐаÑтана грешка Ñо Ñерверот ';
+$messages['filterformerror'] = 'Формата за филтер Ñодржи грешка';
+$messages['filterdeleteconfirm'] = 'Дали навиÑтина Ñакате да го избришате избраниот филтер?';
+$messages['ruledeleteconfirm'] = 'Дали Ñте Ñигурни дека Ñакате да го избришате избраното правило?';
+$messages['actiondeleteconfirm'] = 'Дали Ñте Ñигурни дека Ñакате да го избришате избранота акција?';
+$messages['forbiddenchars'] = 'Забранет карактер во полето.';
+$messages['cannotbeempty'] = 'Полето не може да биде празно.';
+$messages['ruleexist'] = 'Веќе поÑтои филтер Ñо избраното поле.';
+$messages['setactivateerror'] = 'Ðе може да Ñе активираат избраните филтер Ñетови. ÐаÑтана грешка Ñо Ñерверот.';
+$messages['setdeactivateerror'] = 'Ðе може да Ñе деактивираат избраните филтер Ñетови. ÐаÑтана грешка Ñо Ñерверот.';
+$messages['setdeleteerror'] = 'Ðе може да Ñе избришаат избраните филтер Ñетови. ÐаÑтана грешка Ñо Ñерверот.';
+$messages['setactivated'] = 'Филтер Ñетовите Ñе уÑпешно активирани.';
+$messages['setdeactivated'] = 'Филтер Ñетовите Ñе уÑпешно деактивирани.';
+$messages['setdeleted'] = 'Филтер Ñетовите Ñе уÑпешно избришани.';
+$messages['setupdated'] = 'Филтер Ñетовите Ñе уÑпешно ажирирани.';
+$messages['setdeleteconfirm'] = 'Дали Ñте Ñигурни дека Ñакате да ги избришате избраните филтер Ñетови?';
+$messages['setcreateerror'] = 'Ðе мозе да Ñе Ñоздадат филтер Ñетови. наÑтана грешка Ñо Ñерверот.';
+$messages['setcreated'] = 'Филтер Ñетовите Ñе уÑпешно креирани.';
+$messages['activateerror'] = 'Ðе може да Ñе овозможи Ñелектираниот филтер(и). наÑтана грешка Ñо Ñерверот.';
+$messages['deactivateerror'] = 'Ðе може да Ñе оневозможи избраниот филтер(и). ÐаÑтана грешка Ñо Ñерверот.';
+$messages['deactivated'] = 'Филтер(и) е уÑпешно оневозможен.';
+$messages['activated'] = 'Филтер(и) е уÑпешно овозможен.';
+$messages['moved'] = 'Филтерот е уÑпешно премеÑтен.';
+$messages['moveerror'] = 'Ðе може да Ñе премеÑти избраниот филтер. ÐаÑтана грешка Ñо Ñерверот.';
+$messages['nametoolong'] = 'Името е премногу долго.';
+$messages['namereserved'] = 'Резервирано име.';
+$messages['setexist'] = 'Сетот веќе поÑтои.';
+$messages['nodata'] = 'Мора барем една позиција да биде Ñелектирана!';
+$messages['invaliddateformat'] = 'Ðевалиден датум или дел од форматот за датум';
+$messages['saveerror'] = 'Податокот не може да Ñе зачува. ÐаÑтана грешка Ñо Ñерверот.';
+$messages['vacationsaved'] = 'Датата за одмор е уÑпешно зачивана.';
+$messages['emptyvacationbody'] = 'Потребно е тело на пораката за одмор!';
+$messages['duplicate.conflict.err'] = 'Заглавје и единÑтвен идентификатор не Ñе дозволени.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,147 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµâ€';
+$labels['managefilters'] = 'à´…à´•à´¤àµà´¤àµ‹à´Ÿàµà´Ÿàµà´³àµà´³ ഇമെയിലàµâ€ à´…à´°à´¿à´ªàµà´ªà´•à´³àµâ€ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•';
+$labels['filtername'] = 'à´…à´°à´¿à´ªàµà´ªà´¯àµà´Ÿàµ† പേരàµ';
+$labels['newfilter'] = 'à´ªàµà´¤à´¿à´¯ à´…à´°à´¿à´ªàµà´ª';
+$labels['filteradd'] = 'à´…à´°à´¿à´ªàµà´ª ചേരàµâ€à´•àµà´•àµà´•';
+$labels['filterdel'] = 'à´…à´°à´¿à´ªàµà´ª നീകàµà´•à´‚ചെയàµà´¯àµà´•';
+$labels['moveup'] = 'à´®àµà´•à´³à´¿à´²àµ‡à´•àµà´•àµ നീകàµà´•àµà´•';
+$labels['movedown'] = 'താഴേകàµà´•àµ നീകàµà´•àµà´•';
+$labels['filterallof'] = 'കീഴàµà´ªà´±à´žàµà´ž à´Žà´²àµà´²à´¾ നിയമങàµà´™à´³àµà´‚ പാലികàµà´•àµà´¨àµà´¨à´µ';
+$labels['filteranyof'] = 'കീഴàµà´ªà´±à´žàµà´ž à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ നിയമം പാലികàµà´•àµà´¨àµà´¨à´µ';
+$labels['filterany'] = 'à´Žà´²àµà´²à´¾ സനàµà´¦àµ‡à´¶à´™àµà´™à´³àµà´‚';
+$labels['filtercontains'] = 'à´…à´Ÿà´™àµà´™àµà´¨àµà´¨à´¤àµ';
+$labels['filternotcontains'] = 'à´²àµâ€ à´…à´Ÿà´™àµà´™àµà´¨àµà´¨à´¿à´²àµà´²';
+$labels['filteris'] = 'നൠതàµà´²àµà´¯à´‚';
+$labels['filterisnot'] = 'നൠതàµà´²àµà´¯à´®à´²àµà´²';
+$labels['filterexists'] = 'നിലവിലàµà´£àµà´Ÿàµ';
+$labels['filternotexists'] = 'നിലവിലിലàµà´²';
+$labels['filtermatches'] = 'à´Žà´•àµà´¸àµà´ªàµà´°à´·à´¨àµâ€ ചേരàµà´¨àµà´¨àµà´£àµà´Ÿàµ';
+$labels['filternotmatches'] = 'à´Žà´•àµà´¸àµà´ªàµà´°à´·à´¨àµâ€ ചേരàµà´¨àµà´¨à´¿à´²àµà´²';
+$labels['filterregex'] = 'റെഗàµà´²à´°àµâ€ à´Žà´•àµà´¸àµà´ªàµà´°à´·à´¨àµâ€ ചേരàµà´¨àµà´¨àµà´£àµà´Ÿàµ';
+$labels['filternotregex'] = 'റെഗàµà´²à´°àµâ€ à´Žà´•àµà´¸àµà´ªàµà´°à´·à´¨àµâ€ ചേരàµà´¨àµà´¨à´¿à´²àµà´²';
+$labels['filterunder'] = 'കീഴിലàµâ€';
+$labels['filterover'] = 'à´®àµà´•à´³à´¿à´²àµâ€';
+$labels['addrule'] = 'നിയമം ചേരàµâ€à´•àµà´•àµà´•';
+$labels['delrule'] = 'നിയമം നീകàµà´•à´‚ ചെയàµà´¯àµà´•';
+$labels['messagemoveto'] = 'സനàµà´¦àµ‡à´¶à´‚ നികàµà´•àµ :';
+$labels['messageredirect'] = 'സനàµà´¦àµ‡à´¶à´‚ മാറàµà´±à´¿à´µà´¿à´Ÿàµ :';
+$labels['messagecopyto'] = 'സനàµà´¦àµ‡à´¶à´‚ പകരàµâ€à´¤àµà´¤àµ :';
+$labels['messagesendcopy'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´¨àµà´±àµ† പകരàµâ€à´ªàµà´ªàµ അയകàµà´•àµ :';
+$labels['messagereply'] = 'സനàµà´¦àµ‡à´¶à´‚ വെചàµà´šàµ മറàµà´ªà´Ÿà´¿ അയകàµà´•àµ';
+$labels['messagedelete'] = 'സനàµà´¦àµ‡à´¶à´‚ മായàµà´•àµà´•àµ';
+$labels['messagediscard'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤àµ‹à´Ÿàµ† നിരാകരികàµà´•àµà´•';
+$labels['messagekeep'] = 'സനàµà´¦àµ‡à´¶à´‚ ഇൻബോകàµà´¸à´¿àµ½ സൂകàµà´·à´¿à´•àµà´•àµà´•';
+$labels['messagesrules'] = 'ആഗമന സനàµà´¦àµ‡à´¶à´™àµà´™à´³àµâ€à´•àµà´•àµ:';
+$labels['messagesactions'] = '...à´ˆ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´™àµà´™à´³àµâ€ ചെയàµà´¯àµà´•:';
+$labels['add'] = 'ചേരàµâ€à´•àµà´•àµ';
+$labels['del'] = 'നീകàµà´•à´‚ ചെയàµà´¯àµà´•';
+$labels['sender'] = 'അയചയാളàµâ€';
+$labels['recipient'] = 'à´¸àµà´µàµ€à´•à´°àµâ€à´¤àµà´¤à´¾à´µàµ';
+$labels['vacationdays'] = 'à´Žà´¤àµà´° ഭിവസം കൂടàµà´®àµà´ªàµ‹à´³àµâ€ സനàµà´¦àµ‡à´¶à´‚ അയകàµà´•à´£à´‚:';
+$labels['vacationinterval'] = 'à´Žà´¤àµà´° സമയം കൂടàµà´®àµà´ªàµ‹àµ¾ സനàµà´¦àµ‡à´¶à´™àµà´™àµ¾ അയയàµà´•àµà´•à´£à´‚:';
+$labels['vacationreason'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´¨àµà´±àµ† ഉളàµà´³à´Ÿà´•àµà´•à´‚ (അവധിയàµà´Ÿàµ† കാരണം):';
+$labels['vacationsubject'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´¨àµà´±àµ† വിഷയം:';
+$labels['days'] = 'ദിവസങàµà´™àµ¾';
+$labels['seconds'] = 'സെകàµà´•à´¨àµà´±àµà´•àµ¾';
+$labels['rulestop'] = 'നിയമങàµà´™à´³àµâ€ വിലയിരàµà´¤àµà´¤àµà´¨àµà´¨à´¤àµ നിരàµâ€à´¤àµà´¤àµà´•';
+$labels['enable'] = 'à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´‚/രഹിതം';
+$labels['filterset'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´‚';
+$labels['filtersets'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´™àµà´™à´³àµâ€';
+$labels['filtersetadd'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´‚ ചേരàµâ€à´•àµà´•àµà´•';
+$labels['filtersetdel'] = 'ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´‚ മായàµà´•àµà´•àµà´•';
+$labels['filtersetact'] = 'ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´‚ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•';
+$labels['filtersetdeact'] = 'ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´‚ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´‚ അവസാനിപàµà´ªà´¿à´•àµà´•àµà´•';
+$labels['filterdef'] = 'à´…à´°à´¿à´ªàµà´ªà´¯àµà´Ÿàµ† നിരàµâ€à´µàµà´µà´šà´¨à´‚';
+$labels['filtersetname'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤à´¿à´¨àµà´±àµ† പേരàµ';
+$labels['newfilterset'] = 'à´ªàµà´¤à´¿à´¯ à´…à´°à´¿à´ªàµà´ªà´¯àµà´Ÿ കൂടàµà´Ÿà´‚';
+$labels['active'] = 'സജീവം';
+$labels['none'] = 'à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²';
+$labels['fromset'] = 'സെറàµà´±à´¿à´²àµâ€ നിനàµà´¨àµ';
+$labels['fromfile'] = 'ഫയലിലàµâ€ നിനàµà´¨àµ';
+$labels['filterdisabled'] = 'à´…à´°à´¿à´ªàµà´ª à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•à´¿';
+$labels['countisgreaterthan'] = 'à´Žà´£àµà´£à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ à´•àµà´Ÿàµà´¤à´²àµâ€';
+$labels['countisgreaterthanequal'] = 'à´Žà´£àµà´£à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ കൂടàµà´¤à´²àµâ€ ഇലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€ സമം';
+$labels['countislessthan'] = 'à´Žà´£àµà´£à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ à´•àµà´±à´µàµ';
+$labels['countislessthanequal'] = 'à´Žà´£àµà´£à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ കൂറവൠഇലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€ സമം';
+$labels['countequals'] = 'à´Žà´£àµà´£à´‚ ഇതിനോടൠസമം';
+$labels['countnotequals'] = 'à´Žà´£àµà´£à´‚ ഇതിനോടൠതàµà´²àµà´¯à´®à´²àµà´²';
+$labels['valueisgreaterthan'] = 'മൂലàµà´¯à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ à´•àµà´Ÿàµà´¤à´²àµâ€';
+$labels['valueisgreaterthanequal'] = 'à´®àµà´²àµà´¯à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ കൂടàµà´¤à´²àµâ€ ഇലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€ സമം';
+$labels['valueislessthan'] = 'മൂലàµà´¯à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ à´•àµà´±à´µàµ';
+$labels['valueislessthanequal'] = 'മൂലàµà´¯à´‚ ഇതിനെകàµà´•à´¾à´³àµâ€ കൂറവൠഇലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¤àµà´²àµà´¯à´‚';
+$labels['valueequals'] = 'മൂലàµà´¯à´‚ ഇതിനോടൠസമം';
+$labels['valuenotequals'] = 'മൂലàµà´¯à´‚ ഇതിനോടൠതàµà´²àµà´¯à´®à´²àµà´²';
+$labels['setflags'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ അടയാളമിടàµà´•';
+$labels['addflags'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ അടയാളം ചേരàµâ€à´•àµà´•àµà´•';
+$labels['removeflags'] = 'സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ നിനàµà´¨àµà´‚ അടയാളം മാറàµà´±àµà´•';
+$labels['flagread'] = 'വായിചàµà´šà´µ';
+$labels['flagdeleted'] = 'നീകàµà´•à´‚ ചെയàµà´¤à´µ';
+$labels['flaganswered'] = 'മറàµà´ªà´Ÿà´¿ നലàµâ€à´•à´¿à´¯à´µ';
+$labels['flagflagged'] = 'അടയാളപàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´¿à´¯à´µ';
+$labels['flagdraft'] = 'à´•à´°à´Ÿàµ';
+$labels['setvariable'] = 'വേരിയബിൾ à´¸àµà´¥à´¿à´°à´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´•';
+$labels['setvarname'] = 'വേരിയബിളിനàµà´±àµ† പേരàµ';
+$labels['setvarvalue'] = 'വേരിയബിളിനàµà´±àµ† മൂലàµà´¯à´‚';
+$labels['filtercreate'] = 'à´…à´°à´¿à´ªàµà´ª ഉണàµà´Ÿà´¾à´•àµà´•àµà´•';
+$labels['usedata'] = 'à´ˆ വിവരങàµà´™à´³àµâ€ à´…à´°à´¿à´ªàµà´ªà´¯à´¿à´²àµâ€ ഉപയോഗികàµà´•àµà´•:';
+$labels['nextstep'] = 'à´…à´Ÿàµà´¤àµà´¤ പടി';
+$labels['...'] = '...';
+$labels['advancedopts'] = 'വിപàµà´²àµ€à´•àµà´°à´¿à´¤à´®à´¾à´¯ à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™à´³àµâ€';
+$labels['body'] = 'ഉളàµà´³à´Ÿà´•àµà´•à´‚';
+$labels['address'] = 'മേലàµâ€à´µà´¿à´²à´¾à´¸à´‚';
+$labels['envelope'] = 'à´Žà´¨àµâ€à´µà´²à´ªàµà´ªàµ';
+$labels['modifier'] = 'മോഡിഫയരàµâ€:';
+$labels['text'] = 'വാചകം';
+$labels['undecoded'] = 'ഡീകàµà´•àµ‹à´¡àµ ചെയàµà´¯à´¾à´¤àµà´¤à´¤àµ (റോ)';
+$labels['contenttype'] = 'ഉളàµà´³à´Ÿà´•àµà´•à´¤àµà´¤à´¿à´¨àµà´±àµ† തരം';
+$labels['modtype'] = 'തരം:';
+$labels['allparts'] = 'à´Žà´²àµà´²à´¾à´‚';
+$labels['domain'] = 'ഡൊമൈനàµâ€';
+$labels['localpart'] = 'à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´• ഭാഗം';
+$labels['user'] = 'ഉപയോകàµà´¤à´¾à´µàµàµ';
+$labels['detail'] = 'വിശദാംശം';
+$labels['comparator'] = 'താരതമàµà´¯à´•à´¨àµâ€:';
+$labels['default'] = 'സഹജമായ';
+$labels['octet'] = 'à´•à´°àµâ€à´¶à´¨à´‚ (octet)';
+$labels['asciicasemap'] = 'വലിയ-ചെറിയകàµà´·à´°à´™àµà´™à´³àµâ€ തമàµà´®à´¿à´²àµâ€ à´µàµà´¯à´¤àµà´¯à´¾à´¸à´®à´¿à´²àµà´²à´¾à´¤àµà´¤ (ascii-casemap)';
+$labels['asciinumeric'] = 'സംഖàµà´¯à´•à´³àµâ€ (ascii-numeric)';
+$messages['filterunknownerror'] = 'à´…à´œàµà´žà´¾à´¤à´®à´¾à´¯ സെരàµâ€à´µàµà´µà´°àµâ€ പിശകàµ.';
+$messages['filterconnerror'] = 'സെരàµâ€à´µàµà´µà´±àµà´®à´¾à´¯à´¿ ബനàµà´§à´ªàµà´ªàµ†à´Ÿà´¾à´¨àµâ€ സാധികàµà´•àµà´¨àµà´¨à´¿à´²àµà´².';
+$messages['filterdeleted'] = 'à´…à´°à´¿à´ªàµà´ª വിജകരമായി മായàµà´šàµà´šàµ.';
+$messages['filtersaved'] = 'à´…à´°à´¿à´ªàµà´ª വിജകരമായി സൂകàµà´·à´¿à´šàµà´šàµ.';
+$messages['filterdeleteconfirm'] = 'തെരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´…à´°à´¿à´ªàµà´ª നീകàµà´•à´‚ ചെയàµà´¯à´£à´®àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´£àµ‹?';
+$messages['ruledeleteconfirm'] = 'തെരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ നിയമം നീകàµà´•à´‚ ചെയàµà´¯à´£à´®àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´£àµ‹?';
+$messages['actiondeleteconfirm'] = 'തെരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿ നീകàµà´•à´‚ ചെയàµà´¯à´£à´®àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´£àµ‹?';
+$messages['forbiddenchars'] = 'à´«à´¿à´²àµâ€à´¡à´¿à´²àµâ€ സാധàµà´µà´²àµà´²à´¾à´¤àµà´¤ à´…à´•àµà´·à´°à´™àµà´™à´³àµâ€.';
+$messages['cannotbeempty'] = 'ഫീലàµâ€à´¡àµ ശൂനàµà´¯à´®à´¾à´•à´¾à´¨àµâ€ പാടിലàµà´².';
+$messages['ruleexist'] = 'à´ˆ പേരിലàµà´³àµà´³ à´…à´°à´¿à´ªàµà´ª ഇപàµà´ªàµ‹à´³àµâ€ തനàµà´¨àµ† ഉണàµà´Ÿàµ.';
+$messages['setactivated'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤àµ† വിജയകരമായി à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´®à´¾à´•àµà´•à´¿.';
+$messages['setdeactivated'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤àµ† വിജയകരമായി à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•à´¿.';
+$messages['setdeleted'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤àµ† വിജയകരമായി മായàµà´šàµà´šàµ.';
+$messages['setdeleteconfirm'] = 'തെരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤àµ† നീകàµà´•à´‚ ചെയàµà´¯à´£à´®àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´£àµ‹?';
+$messages['setcreated'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿà´¤àµà´¤àµ† വിജയകരമായി നിരàµâ€à´®àµà´®à´¿à´šàµà´šàµ.';
+$messages['deactivated'] = 'à´…à´°à´¿à´ªàµà´ª വിജകരമായി à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´®à´¾à´•àµà´•à´¿.';
+$messages['activated'] = 'à´…à´°à´¿à´ªàµà´ªà´•à´³àµâ€ നിരàµâ€à´µàµ€à´°àµà´¯à´‚ ആകàµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ';
+$messages['moved'] = 'à´…à´°à´¿à´ªàµà´ª വിജകരമായി മാറàµà´±à´¿.';
+$messages['nametoolong'] = 'പേരിനൠനീളം കൂടàµà´¤à´²àµâ€.';
+$messages['namereserved'] = 'നീകàµà´•à´¿à´µàµ†à´šàµà´š വാകàµà´•àµ.';
+$messages['setexist'] = 'കൂടàµà´Ÿà´‚ നേരതàµà´¤àµ† തനàµà´¨àµ† ഉണàµà´Ÿàµ.';
+$messages['nodata'] = 'ഒരൠസàµà´¥à´¾à´¨à´®àµ†à´™àµà´•à´¿à´²àµà´‚ തെരഞàµà´žàµ†à´Ÿàµà´•àµà´•à´£à´‚!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Шүүлтүүр';
+$labels['managefilters'] = 'ИрÑÑ… мÑйлийн шүүлтүүр зохицуулах';
+$labels['filtername'] = 'Шүүх нÑÑ€';
+$labels['newfilter'] = 'Ð¨Ð¸Ð½Ñ ÑˆÒ¯Ò¯Ð»Ñ‚Ò¯Ò¯Ñ€';
+$labels['filteradd'] = 'Шүүлтүүр нÑмÑÑ…';
+$labels['filterdel'] = 'Шүүлтүүр уÑтгах';
+$labels['moveup'] = 'ДÑÑш зөөх';
+$labels['movedown'] = 'Доош зөөх';
+$labels['filterallof'] = 'Дараах дүрмүүдтÑй бүгдтÑй нь таарч байна';
+$labels['filteranyof'] = 'дараах дүрмүүдтÑй таарч байна';
+$labels['filterany'] = 'бүх зурваÑ';
+$labels['filtercontains'] = 'агуулÑан';
+$labels['filternotcontains'] = 'агуулаагүй';
+$labels['filteris'] = 'Ñ‚Ñнцүү';
+$labels['filterisnot'] = 'нь Ñ‚Ñнцүү биш';
+$labels['filterexists'] = 'байна';
+$labels['filternotexists'] = 'байхгүй';
+$labels['filtermatches'] = 'таарÑан';
+$labels['filternotmatches'] = 'таараагүй';
+$labels['filterregex'] = 'хайлтад таарÑан';
+$labels['filternotregex'] = 'хайлт таараагүй';
+$labels['filterunder'] = 'доор';
+$labels['addrule'] = 'ДүрÑм нÑмÑÑ…';
+$labels['delrule'] = 'ДүрÑм уÑтгах';
+$labels['messagemoveto'] = 'Захиа зөөх';
+$labels['messageredirect'] = 'Захиаг дамжуулах';
+$labels['messagecopyto'] = 'Захиа хуулж Ñвуулах';
+$labels['messagesendcopy'] = 'Захианы хуулбарыг илгÑÑÑ…';
+$labels['messagereply'] = 'Захианд хариулах';
+$labels['messagedelete'] = 'Захиа уÑтгах';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'चाळणà¥à¤¯à¤¾';
+$labels['moveup'] = 'वर हलवा';
+$labels['movedown'] = 'खाली हलवा';
+$labels['filterallof'] = 'खालील सरà¥à¤µ नियम जà¥à¤³à¤¤ आहेत';
+$labels['filterany'] = 'सरà¥à¤µ संदेश';
+$labels['filteris'] = 'चà¥à¤¯à¤¾ बरोबर आहे';
+$labels['filterisnot'] = 'चà¥à¤¯à¤¾ बरोबर नाही';
+$labels['filterexists'] = 'असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे';
+$labels['filternotexists'] = 'असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ नाही';
+$labels['filterunder'] = 'खाली';
+$labels['filterover'] = 'वरती';
+$labels['messagedelete'] = 'संदेश काढून टाका';
+$labels['messagesactions'] = 'खालील कृती आमलात आणा :';
+$labels['add'] = 'समावेश करा';
+$labels['del'] = 'नषà¥à¤Ÿ करा';
+$labels['sender'] = 'पà¥à¤°à¥‡à¤·à¤•';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,187 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtre';
+$labels['managefilters'] = 'Rediger filter for innkommende e-post';
+$labels['filtername'] = 'Filternavn';
+$labels['newfilter'] = 'Nytt filter';
+$labels['filteradd'] = 'Legg til filter';
+$labels['filterdel'] = 'Slett filter';
+$labels['moveup'] = 'Flytt opp';
+$labels['movedown'] = 'Flytt ned';
+$labels['filterallof'] = 'som treffer alle følgende regler';
+$labels['filteranyof'] = 'som treffer en av følgende regler';
+$labels['filterany'] = 'alle meldinger';
+$labels['filtercontains'] = 'inneholder';
+$labels['filternotcontains'] = 'ikke inneholder';
+$labels['filteris'] = 'er lik';
+$labels['filterisnot'] = 'er ulik';
+$labels['filterexists'] = 'eksisterer';
+$labels['filternotexists'] = 'ikke eksisterer';
+$labels['filtermatches'] = 'treffer uttrykk';
+$labels['filternotmatches'] = 'ikke treffer uttrykk';
+$labels['filterregex'] = 'treffer regulært uttrykk';
+$labels['filternotregex'] = 'ikke treffer regulært uttrykk';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Legg til regel';
+$labels['delrule'] = 'Slett regel';
+$labels['messagemoveto'] = 'Flytt meldingen til';
+$labels['messageredirect'] = 'Videresend meldingen til';
+$labels['messagecopyto'] = 'Kopier meldingen til';
+$labels['messagesendcopy'] = 'Send en kopi av meldingen til';
+$labels['messagereply'] = 'Svar med melding';
+$labels['messagedelete'] = 'Slett melding';
+$labels['messagediscard'] = 'Avvis med melding';
+$labels['messagekeep'] = 'Behold melding i innboks';
+$labels['messagesrules'] = 'For innkommende e-post';
+$labels['messagesactions'] = '... gjør følgende:';
+$labels['add'] = 'Legg til';
+$labels['del'] = 'Slett';
+$labels['sender'] = 'Avsender';
+$labels['recipient'] = 'Mottaker';
+$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
+$labels['vacationinterval'] = 'Periode mellom meldinger:';
+$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
+$labels['vacationsubject'] = 'Meldingsemne:';
+$labels['days'] = 'dager';
+$labels['seconds'] = 'sekunder';
+$labels['rulestop'] = 'Stopp evaluering av regler';
+$labels['enable'] = 'Aktiver/Deaktiver';
+$labels['filterset'] = 'Filtersett';
+$labels['filtersets'] = 'Filtersett';
+$labels['filtersetadd'] = 'Nytt filtersett';
+$labels['filtersetdel'] = 'Slett gjeldende filtersett';
+$labels['filtersetact'] = 'Aktiver gjeldende filtersett';
+$labels['filtersetdeact'] = 'Deaktiver gjeldende filtersett';
+$labels['filterdef'] = 'Filterdefinisjon';
+$labels['filtersetname'] = 'Navn på filtersett';
+$labels['newfilterset'] = 'Nytt filtersett';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'ingen';
+$labels['fromset'] = 'fra sett';
+$labels['fromfile'] = 'fra fil';
+$labels['filterdisabled'] = 'Filter deaktivert';
+$labels['countisgreaterthan'] = 'antall er flere enn';
+$labels['countisgreaterthanequal'] = 'antall er flere enn eller lik';
+$labels['countislessthan'] = 'antall er færre enn';
+$labels['countislessthanequal'] = 'antall er færre enn eller lik';
+$labels['countequals'] = 'antall er lik';
+$labels['countnotequals'] = 'tallet er ikke det samme som';
+$labels['valueisgreaterthan'] = 'verdien er høyrere enn';
+$labels['valueisgreaterthanequal'] = 'verdien er høyere eller lik';
+$labels['valueislessthan'] = 'verdien er lavere enn';
+$labels['valueislessthanequal'] = 'verdien er lavere eller lik';
+$labels['valueequals'] = 'verdien er lik';
+$labels['valuenotequals'] = 'verdien er ikke den samme som';
+$labels['setflags'] = 'Sett meldingsflagg';
+$labels['addflags'] = 'Legg til flagg på meldingen';
+$labels['removeflags'] = 'Fjern flagg fra meldingen';
+$labels['flagread'] = 'Lese';
+$labels['flagdeleted'] = 'Slettet';
+$labels['flaganswered'] = 'Besvart';
+$labels['flagflagged'] = 'Flagget';
+$labels['flagdraft'] = 'Utkast';
+$labels['setvariable'] = 'Set variabel';
+$labels['setvarname'] = 'Variabelnavn:';
+$labels['setvarvalue'] = 'Variabel verdi:';
+$labels['setvarmodifiers'] = 'Modifikator:';
+$labels['varlower'] = 'med små bokstaver';
+$labels['varupper'] = 'med store bokstaver';
+$labels['varlowerfirst'] = 'første tegn liten bokstav';
+$labels['varupperfirst'] = 'første tegn stor bokstav';
+$labels['varquotewildcard'] = 'sitér spesialtegn';
+$labels['varlength'] = 'lengde';
+$labels['notify'] = 'Send melding';
+$labels['notifyimportance'] = 'Viktighet:';
+$labels['notifyimportancelow'] = 'lav';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'høy';
+$labels['filtercreate'] = 'Opprett filter';
+$labels['usedata'] = 'Bruk følgende data i filteret:';
+$labels['nextstep'] = 'Neste steg';
+$labels['...'] = '…';
+$labels['currdate'] = 'Nåværende dato';
+$labels['datetest'] = 'Dato';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'Ã¥r';
+$labels['month'] = 'måned';
+$labels['day'] = 'dag';
+$labels['date'] = 'dato (yyyy-mm-dd)';
+$labels['julian'] = 'dato (juliansk)';
+$labels['hour'] = 'time';
+$labels['minute'] = 'minutt';
+$labels['second'] = 'sekund';
+$labels['time'] = 'tid (hh:mm:ss)';
+$labels['iso8601'] = 'dato (ISO8601)';
+$labels['std11'] = 'dato (RFC2822)';
+$labels['zone'] = 'tidssone';
+$labels['weekday'] = 'ukedag (0-6)';
+$labels['advancedopts'] = 'Avanserte alternativer';
+$labels['body'] = 'Meldingstekst';
+$labels['address'] = 'adresse';
+$labels['envelope'] = 'konvolutt';
+$labels['modifier'] = 'modifikator:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'ikke dekodet (rå)';
+$labels['contenttype'] = 'innholdstype';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'alle';
+$labels['domain'] = 'domene';
+$labels['localpart'] = 'lokal del (local part)';
+$labels['user'] = 'bruker';
+$labels['detail'] = 'detalj';
+$labels['comparator'] = 'sammenligning:';
+$labels['default'] = 'standard';
+$labels['octet'] = 'streng (oktett)';
+$labels['asciicasemap'] = 'ikke skill store og små bokstaver (ascii-casemap)';
+$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'baklengs';
+$messages['filterunknownerror'] = 'Ukjent problem med tjener.';
+$messages['filterconnerror'] = 'Kunne ikke koble til tjeneren.';
+$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Fikk feilmelding fra server.';
+$messages['filterdeleted'] = 'Filteret er blitt slettet.';
+$messages['filtersaved'] = 'Filteret er blitt lagret.';
+$messages['filtersaveerror'] = 'Kunne ikke lagre filter. Fikk feilmelding fra server.';
+$messages['filterdeleteconfirm'] = 'Vil du virkelig slette det valgte filteret?';
+$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?';
+$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?';
+$messages['forbiddenchars'] = 'Ugyldige tegn i felt.';
+$messages['cannotbeempty'] = 'Feltet kan ikke stå tomt.';
+$messages['ruleexist'] = 'Det finnes allerede et filter med dette navnet.';
+$messages['setactivateerror'] = 'Kunne ikke aktivere valgte filtersett. Fikk feilmelding fra server.';
+$messages['setdeactivateerror'] = 'Kunne ikke deaktivere valgte filtersett. Fikk feilmelding fra server.';
+$messages['setdeleteerror'] = 'Kunne ikke slette valgte filtersett. Fikk feilmelding fra server.';
+$messages['setactivated'] = 'Filtersett aktivert.';
+$messages['setdeactivated'] = 'Filtersett deaktivert.';
+$messages['setdeleted'] = 'Filtersett slettet.';
+$messages['setdeleteconfirm'] = 'Er du sikker på at du vil slette det valgte filtersettet?';
+$messages['setcreateerror'] = 'Kunne ikke opprette filtersett. Fikk feilmelding fra server.';
+$messages['setcreated'] = 'Filtersett opprettet.';
+$messages['activateerror'] = 'Kunne ikke aktivere valgte filter(e). Fikk feilmelding fra server.';
+$messages['deactivateerror'] = 'Kunne ikke deaktivere valgte filter(e). Fikk feilmelding fra server.';
+$messages['deactivated'] = 'Filter skrudd på.';
+$messages['activated'] = 'Filter skrudd av.';
+$messages['moved'] = 'Filter ble flyttet.';
+$messages['moveerror'] = 'Kunne ikke flytte valgte filter. Fikk feilmelding fra server.';
+$messages['nametoolong'] = 'Navnet er for langt.';
+$messages['namereserved'] = 'Navnet er reservert.';
+$messages['setexist'] = 'Settet eksisterer allerede.';
+$messages['nodata'] = 'Du må velge minst én posisjon!';
+$messages['invaliddateformat'] = 'Ugyldig dato eller datoformat';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['add'] = 'Toevoegen';
+$labels['notifymethodtel'] = 'Telefoonnummer';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filters';
+$labels['managefilters'] = 'Beheer filters voor inkomende e-mail';
+$labels['filtername'] = 'Filternaam';
+$labels['newfilter'] = 'Nieuw filter';
+$labels['filteradd'] = 'Filter toevoegen';
+$labels['filterdel'] = 'Verwijder filter';
+$labels['moveup'] = 'Verplaats omhoog';
+$labels['movedown'] = 'Verplaats omlaag';
+$labels['filterallof'] = 'die voldoet aan alle volgende regels';
+$labels['filteranyof'] = 'die voldoet aan één van de volgende regels';
+$labels['filterany'] = 'alle berichten';
+$labels['filtercontains'] = 'bevat';
+$labels['filternotcontains'] = 'bevat niet';
+$labels['filteris'] = 'is gelijk aan';
+$labels['filterisnot'] = 'is niet gelijk aan';
+$labels['filterexists'] = 'bestaat';
+$labels['filternotexists'] = 'bestaat niet';
+$labels['filtermatches'] = 'komt overeen met expressie';
+$labels['filternotmatches'] = 'komt niet overeen met expressie';
+$labels['filterregex'] = 'komt overeen met de reguliere expressie';
+$labels['filternotregex'] = 'komt niet overeen met de reguliere expressie';
+$labels['filterunder'] = 'onder';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Regel toevoegen';
+$labels['delrule'] = 'Regel verwijderen';
+$labels['messagemoveto'] = 'Verplaats bericht naar';
+$labels['messageredirect'] = 'Bericht doorsturen naar';
+$labels['messagecopyto'] = 'Kopieer bericht naar';
+$labels['messagesendcopy'] = 'Verstuur een kopie naar';
+$labels['messagereply'] = 'Beantwoord met bericht';
+$labels['messagedelete'] = 'Verwijder bericht';
+$labels['messagediscard'] = 'Met bericht negeren';
+$labels['messagekeep'] = 'Bewaar bericht in Postvak IN';
+$labels['messagesrules'] = 'Voor binnenkomende e-mail:';
+$labels['messagesactions'] = '...voer de volgende acties uit';
+$labels['add'] = 'Toevoegen';
+$labels['del'] = 'Verwijderen';
+$labels['sender'] = 'Afzender';
+$labels['recipient'] = 'Ontvanger';
+$labels['vacationaddr'] = 'Mijn e-mailadressen:';
+$labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):';
+$labels['vacationinterval'] = 'Hoe vaak moet een bericht verstuurd worden:';
+$labels['vacationreason'] = 'Bericht (vakantiereden):';
+$labels['vacationfrom'] = 'Antwoord-afzender adres:';
+$labels['vacationsubject'] = 'Onderwerp:';
+$labels['days'] = 'dagen';
+$labels['seconds'] = 'seconden';
+$labels['rulestop'] = 'Stop met regels uitvoeren';
+$labels['enable'] = 'In-/uitschakelen';
+$labels['filterset'] = 'Filterset';
+$labels['filtersets'] = 'Filtersets';
+$labels['filtersetadd'] = 'Nieuwe filterset';
+$labels['filtersetdel'] = 'Verwijder huidige filterset';
+$labels['filtersetact'] = 'Huidige filterset activeren';
+$labels['filtersetdeact'] = 'Huidige filterset uitschakelen';
+$labels['filterseteditraw'] = 'Filterset bewerken';
+$labels['filterdef'] = 'Filterdefinitie';
+$labels['filtersetname'] = 'Filtersetnaam';
+$labels['newfilterset'] = 'Nieuwe filterset';
+$labels['active'] = 'actief';
+$labels['none'] = 'geen';
+$labels['fromset'] = 'van set';
+$labels['fromfile'] = 'van bestand';
+$labels['filterdisabled'] = 'Filter uitgeschakeld';
+$labels['countisgreaterthan'] = 'aantal is groter dan';
+$labels['countisgreaterthanequal'] = 'aantal is groter dan of gelijk aan';
+$labels['countislessthan'] = 'aantal is kleiner dan';
+$labels['countislessthanequal'] = 'aantal is kleiner dan of gelijk aan';
+$labels['countequals'] = 'aantal is gelijk aan';
+$labels['countnotequals'] = 'aantal is niet gelijk aan';
+$labels['valueisgreaterthan'] = 'waarde is groter dan';
+$labels['valueisgreaterthanequal'] = 'waarde is groter dan of gelijk aan';
+$labels['valueislessthan'] = 'waarde is minder dan';
+$labels['valueislessthanequal'] = 'waarde is minder dan of gelijk aan';
+$labels['valueequals'] = 'waarde is gelijk aan';
+$labels['valuenotequals'] = 'waarde is niet gelijk aan';
+$labels['setflags'] = 'Stel markeringen in op bericht';
+$labels['addflags'] = 'Voeg markeringen toe aan bericht';
+$labels['removeflags'] = 'Verwijder markeringen van bericht';
+$labels['flagread'] = 'Lezen';
+$labels['flagdeleted'] = 'Verwijderd';
+$labels['flaganswered'] = 'Beantwoord';
+$labels['flagflagged'] = 'Gemarkeerd';
+$labels['flagdraft'] = 'Concept';
+$labels['setvariable'] = 'Variabele instellen';
+$labels['setvarname'] = 'Naam variabele:';
+$labels['setvarvalue'] = 'Waarde:';
+$labels['setvarmodifiers'] = 'Waarde wijzigen:';
+$labels['varlower'] = 'kleine letters';
+$labels['varupper'] = 'hoofdletters';
+$labels['varlowerfirst'] = 'eerste karakter als kleine letter';
+$labels['varupperfirst'] = 'eerste karakter als hoofdletter';
+$labels['varquotewildcard'] = 'speciale karakters quoten';
+$labels['varlength'] = 'lengte';
+$labels['notify'] = 'Stuur melding';
+$labels['notifytarget'] = 'Meldingsdoel:';
+$labels['notifymessage'] = 'Meldingsbericht (optioneel):';
+$labels['notifyoptions'] = 'Meldingsopties (optioneel):';
+$labels['notifyfrom'] = 'Meldingsafzender (optioneel):';
+$labels['notifyimportance'] = 'Prioriteit:';
+$labels['notifyimportancelow'] = 'laag';
+$labels['notifyimportancenormal'] = 'normaal';
+$labels['notifyimportancehigh'] = 'hoog';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefoon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Filter aanmaken';
+$labels['usedata'] = 'Gebruik de volgende gegevens in het filter:';
+$labels['nextstep'] = 'Volgende stap';
+$labels['...'] = '...';
+$labels['string'] = 'Karakterreeks';
+$labels['currdate'] = 'Huidige datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'jaar';
+$labels['month'] = 'maand';
+$labels['day'] = 'dag';
+$labels['date'] = 'datum (jjjj-mm-dd)';
+$labels['julian'] = 'datum (juliaanse kalender)';
+$labels['hour'] = 'uur';
+$labels['minute'] = 'minuut';
+$labels['second'] = 'seconde';
+$labels['time'] = 'tijd (uu:mm:ss)';
+$labels['iso8601'] = 'datum (ISO-8601)';
+$labels['std11'] = 'datum (RFC 2822)';
+$labels['zone'] = 'tijdzone';
+$labels['weekday'] = 'weekdag (0-6)';
+$labels['advancedopts'] = 'Geavanceerde opties';
+$labels['body'] = 'Inhoud';
+$labels['address'] = 'adres';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'toets op:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'undecoded (raw)';
+$labels['contenttype'] = 'content type';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'Alle';
+$labels['domain'] = 'domein';
+$labels['localpart'] = 'lokaal gedeelte';
+$labels['user'] = 'gebruiker';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'vergelijkingswijze:';
+$labels['default'] = 'standaard';
+$labels['octet'] = 'strikt (octet)';
+$labels['asciicasemap'] = 'hoofdletterongevoelig (ascii-casemap)';
+$labels['asciinumeric'] = 'numeriek (ascii-numeriek)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'terugwaarts';
+$labels['vacation'] = 'Vakantie';
+$labels['vacation.reply'] = 'Antwoordbericht';
+$labels['vacation.advanced'] = 'Geavanceerde instellingen';
+$labels['vacation.from'] = 'Antwoord-afzender adres';
+$labels['vacation.subject'] = 'Onderwerp';
+$labels['vacation.body'] = 'Inhoud';
+$labels['vacation.start'] = 'Begin van vakantie';
+$labels['vacation.end'] = 'Einde van vakantie';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'Aan';
+$labels['vacation.off'] = 'Uit';
+$labels['vacation.addresses'] = 'Mijn e-mailadressen';
+$labels['vacation.interval'] = 'Antwoordinterval';
+$labels['vacation.after'] = 'Voeg een vakantieregel toe na';
+$labels['vacation.saving'] = 'Gegevens worden opgeslagen...';
+$labels['vacation.action'] = 'Actie voor inkomend bericht';
+$labels['vacation.keep'] = 'Bewaren';
+$labels['vacation.discard'] = 'Weggooien';
+$labels['vacation.redirect'] = 'Doorsturen naar';
+$labels['vacation.copy'] = 'Kopie sturen naar';
+$labels['filladdresses'] = 'Vullen met al mijn adressen';
+$labels['arialabelfiltersetactions'] = 'Filtersetacties';
+$labels['arialabelfilteractions'] = 'Filteracties';
+$labels['arialabelfilterform'] = 'Filtereigenschappen';
+$labels['ariasummaryfilterslist'] = 'Filterlijst';
+$labels['ariasummaryfiltersetslist'] = 'Lijst met filtersets';
+$labels['filterstitle'] = 'Bewerk filters voor inkomende berichten';
+$labels['vacationtitle'] = 'Bewerk vakantieregel';
+$labels['message'] = 'Bericht';
+$labels['duplicate'] = 'is duplicaat';
+$labels['notduplicate'] = 'is geen duplicaat';
+$labels['duplicate.handle'] = 'handle:';
+$labels['duplicate.header'] = 'header:';
+$labels['duplicate.uniqueid'] = 'identificatie:';
+$labels['duplicate.seconds'] = 'timeout (seconden):';
+$labels['duplicate.last'] = 'relatief aan de laatste uitvoering';
+$messages['filterunknownerror'] = 'Onbekende fout';
+$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server';
+$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er trad een serverfout op.';
+$messages['filterdeleted'] = 'Filter succesvol verwijderd';
+$messages['filtersaved'] = 'Filter succesvol opgeslagen';
+$messages['filtersaveerror'] = 'Kan filter niet opslaan. Er trad een serverfout op.';
+$messages['filterformerror'] = 'Filterformulier bevat fouten.';
+$messages['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?';
+$messages['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?';
+$messages['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?';
+$messages['forbiddenchars'] = 'Verboden karakters in het veld';
+$messages['cannotbeempty'] = 'Veld mag niet leeg zijn';
+$messages['ruleexist'] = 'Er bestaat al een filter met deze naam.';
+$messages['setactivateerror'] = 'Filterset kon niet geactiveerd worden. Er trad een serverfout op.';
+$messages['setdeactivateerror'] = 'Filterset kon niet gedeactiveerd worden. Er trad een serverfout op.';
+$messages['setdeleteerror'] = 'Filterset kon niet verwijderd worden. Er trad een serverfout op.';
+$messages['setactivated'] = 'Filterset succesvol geactiveerd.';
+$messages['setdeactivated'] = 'Filterset succesvol gedeactiveerd.';
+$messages['setdeleted'] = 'Filterset succesvol verwijderd.';
+$messages['setupdated'] = 'Filterset succesvol bijgewerkt.';
+$messages['setdeleteconfirm'] = 'Weet u zeker dat u de geselecteerde filterset wilt verwijderen?';
+$messages['setcreateerror'] = 'Filterset kon niet aangemaakt worden. Er trad een serverfout op.';
+$messages['setcreated'] = 'Filterset succesvol aangemaakt.';
+$messages['activateerror'] = 'Geselecteerde filter(s) konden niet ingeschakeld worden. Er trad een serverfout op.';
+$messages['deactivateerror'] = 'Geselecteerde filter(s) konden niet uitgeschakeld worden. Er trad een serverfout op.';
+$messages['deactivated'] = 'Filter(s) succesvol ingeschakeld.';
+$messages['activated'] = 'Filter(s) succesvol uitgeschakeld.';
+$messages['moved'] = 'Filter succesvol verplaatst.';
+$messages['moveerror'] = 'Het geselecteerde filter kon niet verplaatst worden. Er trad een serverfout op.';
+$messages['nametoolong'] = 'Naam is te lang.';
+$messages['namereserved'] = 'Gereserveerde naam.';
+$messages['setexist'] = 'Filterset bestaat al.';
+$messages['nodata'] = 'Tenminste één positie moet geselecteerd worden!';
+$messages['invaliddateformat'] = 'Ongeldige datum of datumformaat';
+$messages['saveerror'] = 'Opslaan van de gegevens is mislukt. Er trad een serverfout op.';
+$messages['vacationsaved'] = 'Vakantiegegevens succesvol opgeslagen.';
+$messages['emptyvacationbody'] = 'Inhoud van vakantiebericht is verplicht!';
+$messages['duplicate.conflict.err'] = 'Zowel header en unieke identificatie opgeven is niet toegestaan.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,152 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filter';
+$labels['managefilters'] = 'Rediger filter for innkommande e-post';
+$labels['filtername'] = 'Filternamn';
+$labels['newfilter'] = 'Nytt filter';
+$labels['filteradd'] = 'Legg til filter';
+$labels['filterdel'] = 'Slett filter';
+$labels['moveup'] = 'Flytt opp';
+$labels['movedown'] = 'Flytt ned';
+$labels['filterallof'] = 'som treffer alle følgjande regler';
+$labels['filteranyof'] = 'som treffer ein av følgjande regler';
+$labels['filterany'] = 'alle meldingar';
+$labels['filtercontains'] = 'inneheld';
+$labels['filternotcontains'] = 'ikkje inneheld';
+$labels['filteris'] = 'er lik';
+$labels['filterisnot'] = 'er ikkje lik';
+$labels['filterexists'] = 'eksisterer';
+$labels['filternotexists'] = 'ikkje eksisterer';
+$labels['filtermatches'] = 'treffer uttrykk';
+$labels['filternotmatches'] = 'ikkje treffer uttrykk';
+$labels['filterregex'] = 'treffer regulært uttrykk';
+$labels['filternotregex'] = 'ikkje treffer regulært uttrykk';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'over';
+$labels['addrule'] = 'Legg til regel';
+$labels['delrule'] = 'Slett regel';
+$labels['messagemoveto'] = 'Flytt meldinga til';
+$labels['messageredirect'] = 'Vidaresend meldinga til';
+$labels['messagecopyto'] = 'Kopier meldinga til';
+$labels['messagesendcopy'] = 'Send ein kopi av meldinga til';
+$labels['messagereply'] = 'Svar med melding';
+$labels['messagedelete'] = 'Slett melding';
+$labels['messagediscard'] = 'Avvis med melding';
+$labels['messagesrules'] = 'For innkommande e-post';
+$labels['messagesactions'] = '…gjer følgjande:';
+$labels['add'] = 'Legg til';
+$labels['del'] = 'Slett';
+$labels['sender'] = 'Avsendar';
+$labels['recipient'] = 'Mottakar';
+$labels['vacationdays'] = 'Periode mellom meldingar (i dagar):';
+$labels['vacationreason'] = 'Innhald (grunngjeving for fråvær)';
+$labels['vacationsubject'] = 'Meldingsemne:';
+$labels['rulestop'] = 'Stopp evaluering av regler';
+$labels['enable'] = 'Aktiver/Deaktiver';
+$labels['filterset'] = 'Filtersett';
+$labels['filtersets'] = 'Filtersett';
+$labels['filtersetadd'] = 'Nytt filtersett';
+$labels['filtersetdel'] = 'Slett gjeldande filtersett';
+$labels['filtersetact'] = 'Aktiver gjeldande filtersett';
+$labels['filtersetdeact'] = 'Deaktiver gjeldande filtersett';
+$labels['filterdef'] = 'Filterdefinisjon';
+$labels['filtersetname'] = 'Namn på filtersett';
+$labels['newfilterset'] = 'Nytt filtersett';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'ingen';
+$labels['fromset'] = 'frå sett';
+$labels['fromfile'] = 'frå fil';
+$labels['filterdisabled'] = 'Filter deaktivert';
+$labels['countisgreaterthan'] = 'mengd er fleire enn';
+$labels['countisgreaterthanequal'] = 'mengd er fleire enn eller lik';
+$labels['countislessthan'] = 'mengd er færre enn';
+$labels['countislessthanequal'] = 'mengd er færre enn eller lik';
+$labels['countequals'] = 'mengd er lik';
+$labels['valueisgreaterthan'] = 'verdien er høgare enn';
+$labels['valueisgreaterthanequal'] = 'verdien er høgare eller lik';
+$labels['valueislessthan'] = 'verdien er lågare enn';
+$labels['valueislessthanequal'] = 'verdien er lågare eller lik';
+$labels['valueequals'] = 'verdien er lik';
+$labels['setflags'] = 'Sett meldingsflagg';
+$labels['addflags'] = 'Legg til flagg på meldinga';
+$labels['removeflags'] = 'Fjern flagg fra meldinga';
+$labels['flagread'] = 'Lese';
+$labels['flagdeleted'] = 'Sletta';
+$labels['flaganswered'] = 'Svart på';
+$labels['flagflagged'] = 'Flagga';
+$labels['flagdraft'] = 'Skisse';
+$labels['setvariable'] = 'Sett variabel:';
+$labels['setvarname'] = 'Variabelnamn:';
+$labels['setvarvalue'] = 'Variabelverdi:';
+$labels['setvarmodifiers'] = 'Modifikator:';
+$labels['varlower'] = 'med små bokstavar';
+$labels['varupper'] = 'med store bokstavar';
+$labels['varlowerfirst'] = 'med liten forbokstav';
+$labels['varupperfirst'] = 'med stor forbokstav';
+$labels['varlength'] = 'lengde';
+$labels['notify'] = 'Send varsel';
+$labels['notifyimportance'] = 'Betyding:';
+$labels['notifyimportancelow'] = 'låg';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'høg';
+$labels['filtercreate'] = 'Opprett filter';
+$labels['usedata'] = 'Bruk følgande data i filteret:';
+$labels['nextstep'] = 'Neste steg';
+$labels['...'] = '…';
+$labels['advancedopts'] = 'Avanserte val';
+$labels['body'] = 'Meldingstekst';
+$labels['address'] = 'adresse';
+$labels['envelope'] = 'konvolutt';
+$labels['modifier'] = 'modifikator:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'ikkje dekoda (rå)';
+$labels['contenttype'] = 'innhaldstype';
+$labels['modtype'] = 'type:';
+$labels['allparts'] = 'alle';
+$labels['domain'] = 'domene';
+$labels['localpart'] = 'lokal del (local part)';
+$labels['user'] = 'brukar';
+$labels['detail'] = 'detalj';
+$labels['comparator'] = 'samanlikning:';
+$labels['default'] = 'standard';
+$labels['octet'] = 'streng (oktett)';
+$labels['asciicasemap'] = 'ikkje skil mellom store og små bokstavar (ascii-casemap)';
+$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
+$messages['filterunknownerror'] = 'Ukjent problem med tenar.';
+$messages['filterconnerror'] = 'Kunne ikkje kople til tenaren.';
+$messages['filterdeleted'] = 'Filteret er blitt sletta.';
+$messages['filtersaved'] = 'Filteret er blitt lagra.';
+$messages['filterdeleteconfirm'] = 'Vil du verkeleg slette det valde filteret?';
+$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette vald regel?';
+$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette vald hending?';
+$messages['forbiddenchars'] = 'Ugyldige teikn i felt.';
+$messages['cannotbeempty'] = 'Feltet kan ikkje stå tomt.';
+$messages['ruleexist'] = 'Det finst alt eit filter med dette namnet.';
+$messages['setactivated'] = 'Filtersett aktivert.';
+$messages['setdeactivated'] = 'Filtersett deaktivert.';
+$messages['setdeleted'] = 'Filtersett sletta.';
+$messages['setdeleteconfirm'] = 'Er du sikker på at du vil slette det valde filtersettet?';
+$messages['setcreated'] = 'Filtersett oppretta.';
+$messages['deactivated'] = 'Filter skrudd på.';
+$messages['activated'] = 'Filter skrudd av.';
+$messages['moved'] = 'Filter vart flytta.';
+$messages['nametoolong'] = 'Namnet er for langt.';
+$messages['namereserved'] = 'Namnet er reservert.';
+$messages['setexist'] = 'Settet eksisterer alt.';
+$messages['nodata'] = 'Du må velje minst éin posisjon!';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtry';
+$labels['managefilters'] = 'ZarzÄ…dzanie filtrami poczty przychodzÄ…cej';
+$labels['filtername'] = 'Nazwa filtru';
+$labels['newfilter'] = 'Nowy filtr';
+$labels['filteradd'] = 'Dodaj filtr';
+$labels['filterdel'] = 'Usuń filtr';
+$labels['moveup'] = 'W górę';
+$labels['movedown'] = 'W dół';
+$labels['filterallof'] = 'spełniających wszystkie poniższe kryteria';
+$labels['filteranyof'] = 'spełniających dowolne z poniższych kryteriów';
+$labels['filterany'] = 'wszystkich';
+$labels['filtercontains'] = 'zawiera';
+$labels['filternotcontains'] = 'nie zawiera';
+$labels['filteris'] = 'jest równe';
+$labels['filterisnot'] = 'nie jest równe';
+$labels['filterexists'] = 'istnieje';
+$labels['filternotexists'] = 'nie istnieje';
+$labels['filtermatches'] = 'pasuje do wyrażenia';
+$labels['filternotmatches'] = 'nie pasuje do wyrażenia';
+$labels['filterregex'] = 'pasuje do wyrażenia regularnego';
+$labels['filternotregex'] = 'nie pasuje do wyrażenia regularnego';
+$labels['filterunder'] = 'poniżej';
+$labels['filterover'] = 'ponad';
+$labels['addrule'] = 'Dodaj regułę';
+$labels['delrule'] = 'Usuń regułę';
+$labels['messagemoveto'] = 'Przenieś wiadomość do';
+$labels['messageredirect'] = 'Przekaż wiadomość na konto';
+$labels['messagecopyto'] = 'Skopiuj wiadomość do';
+$labels['messagesendcopy'] = 'Wyślij kopię do';
+$labels['messagereply'] = 'Odpowiedz wiadomością o treści';
+$labels['messagedelete'] = 'Usuń wiadomość';
+$labels['messagediscard'] = 'Odrzuć z komunikatem';
+$labels['messagekeep'] = 'Zachowaj wiadomość w Odebranych';
+$labels['messagesrules'] = 'W stosunku do przychodzÄ…cej poczty:';
+$labels['messagesactions'] = '...wykonaj następujące czynności:';
+$labels['add'] = 'Dodaj';
+$labels['del'] = 'Usuń';
+$labels['sender'] = 'Nadawca';
+$labels['recipient'] = 'Odbiorca';
+$labels['vacationaddr'] = 'Moje adresy e-mail:';
+$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):';
+$labels['vacationinterval'] = 'Jak często wysyłać wiadomości:';
+$labels['vacationreason'] = 'Treść (przyczyna nieobecności):';
+$labels['vacationfrom'] = 'Adres nadawcy odpowiedzi:';
+$labels['vacationsubject'] = 'Temat wiadomości:';
+$labels['days'] = 'dni';
+$labels['seconds'] = 'sekundy';
+$labels['rulestop'] = 'Przerwij przetwarzanie reguł';
+$labels['enable'] = 'Włącz/Wyłącz';
+$labels['filterset'] = 'Zbiór filtrów';
+$labels['filtersets'] = 'Zbiory fitrów';
+$labels['filtersetadd'] = 'Dodaj zbiór filtrów';
+$labels['filtersetdel'] = 'Usuń bieżący zbiór filtrów';
+$labels['filtersetact'] = 'Aktywuj bieżący zbiór filtrów';
+$labels['filtersetdeact'] = 'Deaktywuj bieżący zbiór filtrów';
+$labels['filterseteditraw'] = 'Edytuj zbiór filtrów';
+$labels['filterdef'] = 'Definicja filtra';
+$labels['filtersetname'] = 'Nazwa zbioru';
+$labels['newfilterset'] = 'Nowy zbiór filtrów';
+$labels['active'] = 'aktywny';
+$labels['none'] = 'brak';
+$labels['fromset'] = 'ze zbioru';
+$labels['fromfile'] = 'z pliku';
+$labels['filterdisabled'] = 'Filtr wyłączony';
+$labels['countisgreaterthan'] = 'ilość jest większa od';
+$labels['countisgreaterthanequal'] = 'ilość jest równa lub większa od';
+$labels['countislessthan'] = 'ilość jest mniejsza od';
+$labels['countislessthanequal'] = 'ilość jest równa lub mniejsza od';
+$labels['countequals'] = 'ilość jest równa';
+$labels['countnotequals'] = 'ilość nie jest równa';
+$labels['valueisgreaterthan'] = 'wartość jest większa od';
+$labels['valueisgreaterthanequal'] = 'wartość jest równa lub większa od';
+$labels['valueislessthan'] = 'wartość jest mniejsza od';
+$labels['valueislessthanequal'] = 'wartość jest równa lub mniejsza od';
+$labels['valueequals'] = 'wartość jest równa';
+$labels['valuenotequals'] = 'wartość nie jest równa';
+$labels['setflags'] = 'Ustaw flagi wiadomości';
+$labels['addflags'] = 'Dodaj flagi do wiadomości';
+$labels['removeflags'] = 'Usuń flagi wiadomości';
+$labels['flagread'] = 'Przeczytana';
+$labels['flagdeleted'] = 'Usunięta';
+$labels['flaganswered'] = 'Z odpowiedziÄ…';
+$labels['flagflagged'] = 'Oflagowana';
+$labels['flagdraft'] = 'Szkic';
+$labels['setvariable'] = 'Ustaw zmiennÄ…';
+$labels['setvarname'] = 'Nazwa zmiennej:';
+$labels['setvarvalue'] = 'Wartość zmiennej:';
+$labels['setvarmodifiers'] = 'Modyfikatory:';
+$labels['varlower'] = 'małe litery';
+$labels['varupper'] = 'wielkie litery';
+$labels['varlowerfirst'] = 'pierwsza mała litera';
+$labels['varupperfirst'] = 'pierwsza wielka litera';
+$labels['varquotewildcard'] = 'zamień znaki specjalne';
+$labels['varlength'] = 'długość';
+$labels['notify'] = 'Wyślij powiadomienie';
+$labels['notifytarget'] = 'Odbiorca powiadomienia:';
+$labels['notifymessage'] = 'Wiadomość powiadomienia (opcjonalne):';
+$labels['notifyoptions'] = 'Opcje powiadomienia (opcjonalne):';
+$labels['notifyfrom'] = 'Nadawca powiadomienia (opcjonalne):';
+$labels['notifyimportance'] = 'Priorytet:';
+$labels['notifyimportancelow'] = 'niski';
+$labels['notifyimportancenormal'] = 'normalny';
+$labels['notifyimportancehigh'] = 'wysoki';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Utwórz filtr';
+$labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:';
+$labels['nextstep'] = 'Następny krok';
+$labels['...'] = '...';
+$labels['string'] = 'Ciąg znaków';
+$labels['currdate'] = 'Bieżąca data';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'nagłówek:';
+$labels['year'] = 'rok';
+$labels['month'] = 'miesiÄ…c';
+$labels['day'] = 'dzień';
+$labels['date'] = 'data (rrrr-mm-dd)';
+$labels['julian'] = 'data (kalendarz juliański)';
+$labels['hour'] = 'godzina';
+$labels['minute'] = 'minuta';
+$labels['second'] = 'sekunda';
+$labels['time'] = 'czas (gg:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'Strefa czasowa';
+$labels['weekday'] = 'dzień tygodnia (0-6)';
+$labels['advancedopts'] = 'Zaawansowane opcje';
+$labels['body'] = 'Treść';
+$labels['address'] = 'adres';
+$labels['envelope'] = 'koperta (envelope)';
+$labels['modifier'] = 'modyfikator:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'nieprzetworzony (raw)';
+$labels['contenttype'] = 'typ części (content type)';
+$labels['modtype'] = 'typ:';
+$labels['allparts'] = 'wszystkie';
+$labels['domain'] = 'domena';
+$labels['localpart'] = 'część lokalna';
+$labels['user'] = 'użytkownik';
+$labels['detail'] = 'detal';
+$labels['comparator'] = 'komparator:';
+$labels['default'] = 'domyślny';
+$labels['octet'] = 'dokładny (octet)';
+$labels['asciicasemap'] = 'nierozróżniający wielkości liter (ascii-casemap)';
+$labels['asciinumeric'] = 'numeryczny (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'wstecz';
+$labels['vacation'] = 'Nieobecność';
+$labels['vacation.reply'] = 'Odpowiedź';
+$labels['vacation.advanced'] = 'Ustawienia zaawansowane';
+$labels['vacation.from'] = 'Adres nadawcy odpowiedzi';
+$labels['vacation.subject'] = 'Temat';
+$labels['vacation.body'] = 'Treść';
+$labels['vacation.start'] = 'Początek nieobecności';
+$labels['vacation.end'] = 'Koniec nieobecności';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'włączone';
+$labels['vacation.off'] = 'wyłączone';
+$labels['vacation.addresses'] = 'Moje adresy e-mail';
+$labels['vacation.interval'] = 'Częstotliwość odpowiedzi';
+$labels['vacation.after'] = 'Umieść regułę odpowiedzi po';
+$labels['vacation.saving'] = 'Zapisywanie danych...';
+$labels['vacation.action'] = 'Akcje wiadomości przychodzących';
+$labels['vacation.keep'] = 'Zachowaj';
+$labels['vacation.discard'] = 'Odrzuć';
+$labels['vacation.redirect'] = 'Przekaż do';
+$labels['vacation.copy'] = 'Wyślij kopię do';
+$labels['filladdresses'] = 'Wypełnij wszystkimi moimi adresami';
+$labels['arialabelfiltersetactions'] = 'Zbiór filtrów akcji';
+$labels['arialabelfilteractions'] = 'Akcje filtrów';
+$labels['arialabelfilterform'] = 'Ustawienia filtrów';
+$labels['ariasummaryfilterslist'] = 'Spis filtrów';
+$labels['ariasummaryfiltersetslist'] = 'Lista zbiorów filtrów';
+$labels['filterstitle'] = 'Zarządzaj filtrami wiadomości przychodzących';
+$labels['vacationtitle'] = 'Zarządzaj asystentem nieobecności';
+$labels['message'] = 'Wiadomość';
+$labels['duplicate'] = 'jest duplikatem';
+$labels['notduplicate'] = 'nie jest duplikatem';
+$labels['duplicate.handle'] = 'uchwyt:';
+$labels['duplicate.header'] = 'nagłówek:';
+$labels['duplicate.uniqueid'] = 'identyfikator:';
+$labels['duplicate.seconds'] = 'Limit czasu (sekundy):';
+$labels['duplicate.last'] = 'względem ostatniego wykonania';
+$messages['filterunknownerror'] = 'Nieznany błąd serwera.';
+$messages['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem.';
+$messages['filterdeleteerror'] = 'Nie można usunąć filtra. Błąd serwera.';
+$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie.';
+$messages['filtersaved'] = 'Filtr został zapisany pomyślnie.';
+$messages['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.';
+$messages['filterformerror'] = 'Formularz zawiera błędy.';
+$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?';
+$messages['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?';
+$messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?';
+$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki.';
+$messages['cannotbeempty'] = 'Pole nie może być puste.';
+$messages['ruleexist'] = 'Filtr o podanej nazwie już istnieje.';
+$messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera.';
+$messages['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera.';
+$messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera.';
+$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.';
+$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.';
+$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.';
+$messages['setupdated'] = 'Zbiór filtrów został zaktualizowany pomyślnie.';
+$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?';
+$messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera.';
+$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.';
+$messages['activateerror'] = 'Nie można włączyć wybranych filtrów. Błąd serwera.';
+$messages['deactivateerror'] = 'Nie można wyłączyć wybranych filtrów. Błąd serwera.';
+$messages['deactivated'] = 'Filtr(y) wyłączono pomyślnie.';
+$messages['activated'] = 'Filtr(y) włączono pomyślnie.';
+$messages['moved'] = 'Filter został przeniesiony pomyślnie.';
+$messages['moveerror'] = 'Nie można przenieść wybranego filtra. Błąd serwera.';
+$messages['nametoolong'] = 'Zbyt długa nazwa.';
+$messages['namereserved'] = 'Nazwa zarezerwowana.';
+$messages['setexist'] = 'Zbiór już istnieje.';
+$messages['nodata'] = 'Należy wybrać co najmniej jedną pozycję!';
+$messages['invaliddateformat'] = 'Nieprawidłowy format daty lub fragmentu daty';
+$messages['saveerror'] = 'Nie można zapisać danych. Wystąpił błąd serwera.';
+$messages['vacationsaved'] = 'Dane nieobecności zapisano pomyślnie.';
+$messages['emptyvacationbody'] = 'Treść wiadomości jest wymagana!';
+$messages['duplicate.conflict.err'] = 'Nagłówek i identyfikator nie mogą być używane równocześnie.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail';
+$labels['filtername'] = 'Nome do filtro';
+$labels['newfilter'] = 'Novo filtro';
+$labels['filteradd'] = 'Adicionar filtro';
+$labels['filterdel'] = 'Excluir filtro';
+$labels['moveup'] = 'Mover para cima';
+$labels['movedown'] = 'Mover para baixo';
+$labels['filterallof'] = 'casando todas as seguintes regras';
+$labels['filteranyof'] = 'casando qualquer das seguintes regras';
+$labels['filterany'] = 'todas as mensagens';
+$labels['filtercontains'] = 'contem';
+$labels['filternotcontains'] = 'não contem';
+$labels['filteris'] = 'é igual a';
+$labels['filterisnot'] = 'não é igual a';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'não existe';
+$labels['filtermatches'] = 'expressão combina';
+$labels['filternotmatches'] = 'expressão não combina';
+$labels['filterregex'] = 'combina com expressão regular';
+$labels['filternotregex'] = 'não combina com a expressão regular';
+$labels['filterunder'] = 'inferior a';
+$labels['filterover'] = 'superior a';
+$labels['addrule'] = 'Adicionar regra';
+$labels['delrule'] = 'Excluir regra';
+$labels['messagemoveto'] = 'Mover mensagem para';
+$labels['messageredirect'] = 'Redirecionar mensagem para';
+$labels['messagecopyto'] = 'Copiar mensagem para';
+$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
+$labels['messagereply'] = 'Responder com mensagem';
+$labels['messagedelete'] = 'Excluir mensagem';
+$labels['messagediscard'] = 'Descartar com mensagem';
+$labels['messagekeep'] = 'Manter mensagens na caixa';
+$labels['messagesrules'] = 'Para e-mails recebidos:';
+$labels['messagesactions'] = '...execute as seguintes ações:';
+$labels['add'] = 'Adicionar';
+$labels['del'] = 'Excluir';
+$labels['sender'] = 'Remetente';
+$labels['recipient'] = 'Destinatário';
+$labels['vacationaddr'] = 'Meus endereços de e-mail:';
+$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
+$labels['vacationinterval'] = 'Como geralmente enviam mensagens:';
+$labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):';
+$labels['vacationfrom'] = 'Responder endereço do remetente:';
+$labels['vacationsubject'] = 'Título da mensagem:';
+$labels['days'] = 'dias';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Parar de avaliar regras';
+$labels['enable'] = 'Habilitar/Desabilitar';
+$labels['filterset'] = 'Conjunto de filtros';
+$labels['filtersets'] = 'Conjuntos de filtro';
+$labels['filtersetadd'] = 'Adicionar conjunto de filtros';
+$labels['filtersetdel'] = 'Excluir conjunto de filtros atual';
+$labels['filtersetact'] = 'Ativar conjunto de filtros atual';
+$labels['filtersetdeact'] = 'Desativar conjunto de filtros atual';
+$labels['filterseteditraw'] = 'Editar conjunto de filtros';
+$labels['filterdef'] = 'Definição de filtro';
+$labels['filtersetname'] = 'Nome do conjunto de filtros';
+$labels['newfilterset'] = 'Novo conjunto de filtros';
+$labels['active'] = 'ativo';
+$labels['none'] = 'nenhum';
+$labels['fromset'] = 'Do conjunto';
+$labels['fromfile'] = 'Do arquivo';
+$labels['filterdisabled'] = 'Filtro desativado';
+$labels['countisgreaterthan'] = 'contagem é maior que';
+$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
+$labels['countislessthan'] = 'contagem é menor que';
+$labels['countislessthanequal'] = 'contagem é menor ou igual a';
+$labels['countequals'] = 'contagem é igual a';
+$labels['countnotequals'] = 'contagem não é igual a';
+$labels['valueisgreaterthan'] = 'valor é maior que';
+$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
+$labels['valueislessthan'] = 'valor é menor que';
+$labels['valueislessthanequal'] = 'valor é menor ou igual a';
+$labels['valueequals'] = 'valor é igual a';
+$labels['valuenotequals'] = 'valor não é igual a';
+$labels['setflags'] = 'Definir marcadores à mensagem';
+$labels['addflags'] = 'Adicionar marcadores à mensagem';
+$labels['removeflags'] = 'Remover marcadores da mensagem';
+$labels['flagread'] = 'Lida';
+$labels['flagdeleted'] = 'Excluída';
+$labels['flaganswered'] = 'Respondida';
+$labels['flagflagged'] = 'Marcada';
+$labels['flagdraft'] = 'Rascunho';
+$labels['setvariable'] = 'Definir variável';
+$labels['setvarname'] = 'Nome da variável:';
+$labels['setvarvalue'] = 'Valor da variável:';
+$labels['setvarmodifiers'] = 'Modificadores:';
+$labels['varlower'] = 'minúsculas';
+$labels['varupper'] = 'maiúsculas';
+$labels['varlowerfirst'] = 'primeiro caractere minúsculo';
+$labels['varupperfirst'] = 'primeiro caractere maiúsculo';
+$labels['varquotewildcard'] = 'caracteres especiais de citação';
+$labels['varlength'] = 'tamanho';
+$labels['notify'] = 'Enviar notificação';
+$labels['notifytarget'] = 'Destino da notificação:';
+$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
+$labels['notifyoptions'] = 'Opções de notificação (opcional):';
+$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
+$labels['notifyimportance'] = 'Importância';
+$labels['notifyimportancelow'] = 'baixa';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefone';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Criar filtro';
+$labels['usedata'] = 'Usar os seguintes dados no filtro:';
+$labels['nextstep'] = 'Próximo Passo';
+$labels['...'] = '...';
+$labels['string'] = 'Texto';
+$labels['currdate'] = 'Data atual';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'cabeçalho:';
+$labels['year'] = 'ano';
+$labels['month'] = 'mês';
+$labels['day'] = 'dia';
+$labels['date'] = 'data (aaaa-mm-dd)';
+$labels['julian'] = 'data (calendário juliano)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fuso horário';
+$labels['weekday'] = 'dia da semana (0-6)';
+$labels['advancedopts'] = 'Opções avançadas';
+$labels['body'] = 'Corpo';
+$labels['address'] = 'endereço';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'texto';
+$labels['undecoded'] = 'decodificado (bruto)';
+$labels['contenttype'] = 'tipo de conteúdo';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todas';
+$labels['domain'] = 'domínio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'usuário';
+$labels['detail'] = 'detalhes';
+$labels['comparator'] = 'comparador:';
+$labels['default'] = 'padrão';
+$labels['octet'] = 'estrito (octeto)';
+$labels['asciicasemap'] = 'caso insensível (mapa de caracteres ascii)';
+$labels['asciinumeric'] = 'numérico (ascii-numeric)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'retroceder';
+$labels['vacation'] = 'Férias';
+$labels['vacation.reply'] = 'Responder mensagem';
+$labels['vacation.advanced'] = 'Opções avançadas';
+$labels['vacation.from'] = 'Responder endereço do remetente';
+$labels['vacation.subject'] = 'Assunto';
+$labels['vacation.body'] = 'Conteúdo';
+$labels['vacation.start'] = 'Início das férias';
+$labels['vacation.end'] = 'Término das férias';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Ligado';
+$labels['vacation.off'] = 'Desligado';
+$labels['vacation.addresses'] = 'Meus endereços de e-mail';
+$labels['vacation.interval'] = 'Intervalo de resposta';
+$labels['vacation.after'] = 'Colocar regra de férias após';
+$labels['vacation.saving'] = 'Salvando dados...';
+$labels['vacation.action'] = 'Ações para mensagens recebidas';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redirecionar para';
+$labels['vacation.copy'] = 'Enviar cópia para';
+$labels['filladdresses'] = 'Preencher com todos os meus endereços';
+$labels['arialabelfiltersetactions'] = 'Ações do grupo de filtros';
+$labels['arialabelfilteractions'] = 'Ações do filtro';
+$labels['arialabelfilterform'] = 'Propriedades do filtro';
+$labels['ariasummaryfilterslist'] = 'Lista dos filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de grupo de filtros';
+$labels['filterstitle'] = 'Editar filtro dos e-mails recebidos';
+$labels['vacationtitle'] = 'Editar regra de ausência';
+$labels['message'] = 'Mensagem';
+$labels['duplicate'] = 'está duplicada';
+$labels['notduplicate'] = 'não está duplicada';
+$labels['duplicate.handle'] = 'tratar:';
+$labels['duplicate.header'] = 'cabeçalho:';
+$labels['duplicate.uniqueid'] = 'identificador:';
+$labels['duplicate.seconds'] = 'tempo limite (segundos):';
+$labels['duplicate.last'] = 'relativo à última execução';
+$messages['filterunknownerror'] = 'Erro desconhecido de servidor';
+$messages['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve';
+$messages['filterdeleteerror'] = 'Impossível excluir o filtro. Ocorreu um erro no servidor.';
+$messages['filterdeleted'] = 'Filtro excluído com sucesso';
+$messages['filtersaved'] = 'Filtro gravado com sucesso';
+$messages['filtersaveerror'] = 'Impossível salvar o filtro. Ocorreu um erro no servidor.';
+$messages['filterformerror'] = 'Formulário de filtro contém erros.';
+$messages['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?';
+$messages['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?';
+$messages['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?';
+$messages['forbiddenchars'] = 'Caracteres não permitidos no campo';
+$messages['cannotbeempty'] = 'Campo não pode ficar em branco';
+$messages['ruleexist'] = 'O filtro com o nome especificado já existe.';
+$messages['setactivateerror'] = 'Impossível ativar o conjunto de filtros selecionados. Ocorreu um erro no servidor.';
+$messages['setdeactivateerror'] = 'Impossível desativar o conjunto de filtros selecionados. Ocorreu um erro no servidor.';
+$messages['setdeleteerror'] = 'Impossível excluir o conjunto de filtros selecionados. Ocorreu um erro no servidor.';
+$messages['setactivated'] = 'Conjunto de filtros ativados com sucesso.';
+$messages['setdeactivated'] = 'Conjunto de filtros desativados com sucesso.';
+$messages['setdeleted'] = 'Conjunto de filtros excluídos com sucesso.';
+$messages['setupdated'] = 'Conjunto de filtros atualizado com sucesso.';
+$messages['setdeleteconfirm'] = 'Você está certo que deseja excluir o conjunto de filtros selecionados?';
+$messages['setcreateerror'] = 'Impossível criar o conjunto de filtros. Ocorreu um erro no servidor.';
+$messages['setcreated'] = 'Conjunto de filtros criado com sucesso.';
+$messages['activateerror'] = 'Impossível habilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
+$messages['deactivateerror'] = 'Impossível desabilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
+$messages['deactivated'] = 'Filtro(s) habilitado(s) com sucesso.';
+$messages['activated'] = 'Filtro(s) desabilitado(s) com sucesso.';
+$messages['moved'] = 'Filtro movido com sucesso.';
+$messages['moveerror'] = 'Impossível mover o filtro selecionado. Ocorreu um erro no servidor.';
+$messages['nametoolong'] = 'Nome muito longo.';
+$messages['namereserved'] = 'Nome reservado.';
+$messages['setexist'] = 'Conjunto já existe.';
+$messages['nodata'] = 'Pelo menos uma posição precisa ser selecionada!';
+$messages['invaliddateformat'] = 'Data inválida';
+$messages['saveerror'] = 'Impossível salvar dados. Ocorreu um erro no servidor.';
+$messages['vacationsaved'] = 'Dados de férias salvos com sucesso.';
+$messages['emptyvacationbody'] = 'Conteúdo da mensagem de férias necessário!';
+$messages['duplicate.conflict.err'] = 'Ambos cabeçalho e identificador único não são permitidos.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtros';
+$labels['managefilters'] = 'Gerir filtros';
+$labels['filtername'] = 'Nome do filtro';
+$labels['newfilter'] = 'Novo filtro';
+$labels['filteradd'] = 'Adicionar filtro';
+$labels['filterdel'] = 'Eliminar filtro';
+$labels['moveup'] = 'Mover para cima';
+$labels['movedown'] = 'Mover para baixo';
+$labels['filterallof'] = 'corresponde a todas as seguintes regras';
+$labels['filteranyof'] = 'corresponde a uma das seguintes regras';
+$labels['filterany'] = 'todas as mensagens';
+$labels['filtercontains'] = 'contém';
+$labels['filternotcontains'] = 'não contém';
+$labels['filteris'] = 'é igual a';
+$labels['filterisnot'] = 'é diferente de';
+$labels['filterexists'] = 'existe';
+$labels['filternotexists'] = 'não existe';
+$labels['filtermatches'] = 'expressão corresponde';
+$labels['filternotmatches'] = 'expressão não corresponde';
+$labels['filterregex'] = 'corresponde à expressão';
+$labels['filternotregex'] = 'não corresponde à expressão';
+$labels['filterunder'] = 'é inferior a';
+$labels['filterover'] = 'é superior a';
+$labels['addrule'] = 'Adicionar regra';
+$labels['delrule'] = 'Eliminar regra';
+$labels['messagemoveto'] = 'Mover mensagem para';
+$labels['messageredirect'] = 'Redirecionar mensagem para';
+$labels['messagecopyto'] = 'Copiar mensagem para';
+$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
+$labels['messagereply'] = 'Responder com a mensagem';
+$labels['messagedelete'] = 'Eliminar mensagem';
+$labels['messagediscard'] = 'Rejeitar mensagem';
+$labels['messagekeep'] = 'Manter mensagem na Caixa de entrada';
+$labels['messagesrules'] = 'Regras para Filtros';
+$labels['messagesactions'] = 'Acções para Filtros';
+$labels['add'] = 'Adicionar';
+$labels['del'] = 'Eliminar';
+$labels['sender'] = 'Remetente';
+$labels['recipient'] = 'Destinatário';
+$labels['vacationaddr'] = 'Os meus endereços de e-mail:';
+$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
+$labels['vacationinterval'] = 'Com que frequência envia mensagens:';
+$labels['vacationreason'] = 'Conteúdo da mensagem (motivo da ausência):';
+$labels['vacationfrom'] = 'Endereço de resposta do remetente:';
+$labels['vacationsubject'] = 'Assunto da mensagem:';
+$labels['days'] = 'dias';
+$labels['seconds'] = 'segundos';
+$labels['rulestop'] = 'Parar de avaliar regras';
+$labels['enable'] = 'Activar/Desactivar';
+$labels['filterset'] = 'Filtros definidos';
+$labels['filtersets'] = 'Filtros definidos';
+$labels['filtersetadd'] = 'Adicionar definição de filtros';
+$labels['filtersetdel'] = 'Eliminar definição de filtros actuais';
+$labels['filtersetact'] = 'Activar definição de filtros actuais';
+$labels['filtersetdeact'] = 'Desactivar definição de filtros actuais';
+$labels['filterseteditraw'] = 'Editar conjunto de filtros';
+$labels['filterdef'] = 'Definição de filtros';
+$labels['filtersetname'] = 'Nome da definição de filtros';
+$labels['newfilterset'] = 'Nova definição de filtros';
+$labels['active'] = 'activo';
+$labels['none'] = 'nehnum';
+$labels['fromset'] = 'definição de';
+$labels['fromfile'] = 'a partir do ficheiro';
+$labels['filterdisabled'] = 'Filtro desactivado';
+$labels['countisgreaterthan'] = 'contagem é maior que';
+$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
+$labels['countislessthan'] = 'contagem é menor que';
+$labels['countislessthanequal'] = 'contagem é menor ou igual a';
+$labels['countequals'] = 'contagem é igual a';
+$labels['countnotequals'] = 'a contagem não é igual a';
+$labels['valueisgreaterthan'] = 'valor é maior que';
+$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
+$labels['valueislessthan'] = 'valor é menor que';
+$labels['valueislessthanequal'] = 'valor é menor ou igual a';
+$labels['valueequals'] = 'valor é igual a';
+$labels['valuenotequals'] = 'o valor não é igual a';
+$labels['setflags'] = 'Definir indicadores para a mensagem';
+$labels['addflags'] = 'Adicionar indicadores para a mensagem';
+$labels['removeflags'] = 'Eliminar indicadores da mensagem';
+$labels['flagread'] = 'Lida';
+$labels['flagdeleted'] = 'Eliminada';
+$labels['flaganswered'] = 'Respondida';
+$labels['flagflagged'] = 'Marcada';
+$labels['flagdraft'] = 'Rascunho';
+$labels['setvariable'] = 'Definir variável';
+$labels['setvarname'] = 'Nome da Variável:';
+$labels['setvarvalue'] = 'Valor da Variável:';
+$labels['setvarmodifiers'] = 'Modificadores:';
+$labels['varlower'] = 'minúscula';
+$labels['varupper'] = 'maiúscula';
+$labels['varlowerfirst'] = 'primeira letra em minúscula';
+$labels['varupperfirst'] = 'primeira letra em maiúscula';
+$labels['varquotewildcard'] = 'citar caracteres especiais';
+$labels['varlength'] = 'tamanho';
+$labels['notify'] = 'Enviar notificação';
+$labels['notifytarget'] = 'Destino da notificação:';
+$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
+$labels['notifyoptions'] = 'Opções de notificação (opcional):';
+$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
+$labels['notifyimportance'] = 'Importância:';
+$labels['notifyimportancelow'] = 'baixa';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefone';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Criar filtro';
+$labels['usedata'] = 'Usar os seguintes dados no filtro:';
+$labels['nextstep'] = 'Próximo passo';
+$labels['...'] = '...';
+$labels['string'] = 'Cadeia';
+$labels['currdate'] = 'Data atual';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'cabeçalho:';
+$labels['year'] = 'ano';
+$labels['month'] = 'mês';
+$labels['day'] = 'dia';
+$labels['date'] = 'data (yyyy-mm-dd)';
+$labels['julian'] = 'data (juliano)';
+$labels['hour'] = 'hora';
+$labels['minute'] = 'minuto';
+$labels['second'] = 'segundo';
+$labels['time'] = 'hora (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fuso horário';
+$labels['weekday'] = 'dia da semana (0-6)';
+$labels['advancedopts'] = 'Opções avançadas';
+$labels['body'] = 'Corpo';
+$labels['address'] = 'endereço';
+$labels['envelope'] = 'envelope';
+$labels['modifier'] = 'modificador:';
+$labels['text'] = 'Texto';
+$labels['undecoded'] = 'não descodificado (raw)';
+$labels['contenttype'] = 'tipo de conteúdo';
+$labels['modtype'] = 'tipo:';
+$labels['allparts'] = 'todos';
+$labels['domain'] = 'domínio';
+$labels['localpart'] = 'parte local';
+$labels['user'] = 'utilizador';
+$labels['detail'] = 'detalhe';
+$labels['comparator'] = 'Comparador';
+$labels['default'] = 'predefinido';
+$labels['octet'] = 'estrito (octeto)';
+$labels['asciicasemap'] = 'não sensível a maiúsculas/minúsculas (caracteres ascii)';
+$labels['asciinumeric'] = 'numérico (numérico ascii)';
+$labels['index'] = 'índice:';
+$labels['indexlast'] = 'retroceder';
+$labels['vacation'] = 'Férias';
+$labels['vacation.reply'] = 'Mensagem de resposta';
+$labels['vacation.advanced'] = 'Definições avançadas';
+$labels['vacation.from'] = 'Endereço de resposta do remetente';
+$labels['vacation.subject'] = 'Assunto';
+$labels['vacation.body'] = 'Corpo da mensagem';
+$labels['vacation.start'] = 'Início de férias';
+$labels['vacation.end'] = 'Fim de férias';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Ligar';
+$labels['vacation.off'] = 'Desligar';
+$labels['vacation.addresses'] = 'Os meus endereços de e-mail';
+$labels['vacation.interval'] = 'Intervalo de resposta';
+$labels['vacation.after'] = 'Coloque regra de férias depois';
+$labels['vacation.saving'] = 'A guardar dados...';
+$labels['vacation.action'] = 'Acção para mensagem recebida';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Rejeitar';
+$labels['vacation.redirect'] = 'Redireccionar para';
+$labels['vacation.copy'] = 'Enviar cópia para';
+$labels['filladdresses'] = 'Preencher com todos os meus endereços';
+$labels['arialabelfiltersetactions'] = 'Acções do conjunto de filtros';
+$labels['arialabelfilteractions'] = 'Acções dos filtros';
+$labels['arialabelfilterform'] = 'Propriedades dos filtro';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de conjuntos de filtros';
+$labels['filterstitle'] = 'Editar filtros de mensagens recebidas';
+$labels['vacationtitle'] = 'Editar regra de ausência do escritório';
+$labels['message'] = 'Mensagem';
+$labels['duplicate'] = 'é duplicado';
+$labels['notduplicate'] = 'não é duplicado';
+$labels['duplicate.handle'] = 'identificador:';
+$labels['duplicate.header'] = 'cabeçalho:';
+$labels['duplicate.uniqueid'] = 'identificador:';
+$labels['duplicate.seconds'] = 'tempo esgotado (segundos):';
+$labels['duplicate.last'] = 'relativamente à última execução';
+$messages['filterunknownerror'] = 'Erro de servidor desconhecido';
+$messages['filterconnerror'] = 'Não é possível ligar ao servidor Sieve';
+$messages['filterdeleteerror'] = 'Não foi possível eliminar o filtro.  Ocorreu um erro no servidor.';
+$messages['filterdeleted'] = 'Filtro eliminado com sucesso';
+$messages['filtersaved'] = 'Filtro guardado com sucesso';
+$messages['filtersaveerror'] = 'Não foi possível guardar o filtro.  Ocorreu um erro no servidor.';
+$messages['filterformerror'] = 'O formulário de filtro contém erros.';
+$messages['filterdeleteconfirm'] = 'Tem a certeza que pretende eliminar este filtro?';
+$messages['ruledeleteconfirm'] = 'Tem a certeza que pretende eliminar esta regra?';
+$messages['actiondeleteconfirm'] = 'Tem a certeza que pretende eliminar esta acção?';
+$messages['forbiddenchars'] = 'Caracteres inválidos no campo.';
+$messages['cannotbeempty'] = 'Este campo não pode estar vazio.';
+$messages['ruleexist'] = 'Já existe um Filtro com o nome especificado.';
+$messages['setactivateerror'] = 'Não foi possível ativar os filtros selecionados.  Ocorreu um erro no servidor.';
+$messages['setdeactivateerror'] = 'Não foi possível desativar os filtros selecionados.  Ocorreu um erro no servidor.';
+$messages['setdeleteerror'] = 'Não foi possível eliminar os filtros selecionados.  Ocorreu um erro no servidor.';
+$messages['setactivated'] = 'Filtros ativados com sucesso.';
+$messages['setdeactivated'] = 'Filtros desativados com sucesso.';
+$messages['setdeleted'] = 'Filtros eliminados com sucesso.';
+$messages['setupdated'] = 'Conjunto de filtros actualizado com sucesso.';
+$messages['setdeleteconfirm'] = 'Tem a certeza que pretende eliminar os filtros selecionados?';
+$messages['setcreateerror'] = 'Não foi possível criar o conjunto de filtros. Ocorreu um erro no servidor.';
+$messages['setcreated'] = 'Conjunto de filtros criado com sucesso.';
+$messages['activateerror'] = 'Não foi possível ativar os filtros selecionados. Ocorreu um erro no servidor.';
+$messages['deactivateerror'] = 'Não foi possível desativar os filtros selecionados. Ocorreu um erro no servidor.';
+$messages['deactivated'] = 'Filtro(s) ativado(s) com sucesso.';
+$messages['activated'] = 'Filtro(s) desativado(s) com sucesso.';
+$messages['moved'] = 'Filtro movido com sucesso.';
+$messages['moveerror'] = 'Não foi possível mover o filtro selecionado. Ocorreu um erro no servidor.';
+$messages['nametoolong'] = 'Nome demasiado longo.';
+$messages['namereserved'] = 'Nome invertido.';
+$messages['setexist'] = 'O conjunto já existe.';
+$messages['nodata'] = 'Deve selecionar pelo menos uma posição.';
+$messages['invaliddateformat'] = 'Data ou formato de data inválido.';
+$messages['saveerror'] = 'Não foi possível guardar os dados. Ocorreu um erro no servidor.';
+$messages['vacationsaved'] = 'Dados de férias guardados com sucesso.';
+$messages['emptyvacationbody'] = 'É necessário o corpo da mensagem de férias!';
+$messages['duplicate.conflict.err'] = 'Ambos, cabeçalho e identificador único, não são permitidos.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,239 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtre';
+$labels['managefilters'] = 'Administreaza filtrele pentru mesaje primite.';
+$labels['filtername'] = 'Nume filtru';
+$labels['newfilter'] = 'Filtru nou';
+$labels['filteradd'] = 'Adauga un filtru';
+$labels['filterdel'] = 'Sterge filtru.';
+$labels['moveup'] = 'Muta mai sus';
+$labels['movedown'] = 'Muta mai jos';
+$labels['filterallof'] = 'se potriveste cu toate regulile urmatoare';
+$labels['filteranyof'] = 'se potriveste cu oricare din regulile urmatoare';
+$labels['filterany'] = 'toate mesajele';
+$labels['filtercontains'] = 'contine';
+$labels['filternotcontains'] = 'nu contine';
+$labels['filteris'] = 'este egal cu';
+$labels['filterisnot'] = 'este diferit de';
+$labels['filterexists'] = 'exista';
+$labels['filternotexists'] = 'nu exista';
+$labels['filtermatches'] = 'se potriveste cu expresia';
+$labels['filternotmatches'] = 'nu se potriveste cu expresia';
+$labels['filterregex'] = 'se potriveste cu expresia regulata';
+$labels['filternotregex'] = 'nu se potriveste cu expresia regulata';
+$labels['filterunder'] = 'sub';
+$labels['filterover'] = 'peste';
+$labels['addrule'] = 'Adauga regula';
+$labels['delrule'] = 'Sterge regula';
+$labels['messagemoveto'] = 'Muta mesajul in';
+$labels['messageredirect'] = 'Redirectioneaza mesajul catre';
+$labels['messagecopyto'] = 'Copiaza mesajul in';
+$labels['messagesendcopy'] = 'Trimite o copie a mesajului catre';
+$labels['messagereply'] = 'Raspunde cu mesajul';
+$labels['messagedelete'] = 'Sterge mesajul';
+$labels['messagediscard'] = 'Respinge cu mesajul';
+$labels['messagekeep'] = 'Pastreaza mesajele in Inbox';
+$labels['messagesrules'] = 'Pentru e-mail primit:';
+$labels['messagesactions'] = '...executa urmatoarele actiuni:';
+$labels['add'] = 'Adauga';
+$labels['del'] = 'Sterge';
+$labels['sender'] = 'Expeditor';
+$labels['recipient'] = 'Destinatar';
+$labels['vacationaddr'] = 'Adresele mele de e-mail ';
+$labels['vacationdays'] = 'Cat de des sa trimit mesajele (in zile):';
+$labels['vacationinterval'] = 'Cât de des să trimit mesaje:';
+$labels['vacationreason'] = 'Corpul mesajului (motivul vacantei):';
+$labels['vacationfrom'] = 'Adresa expeditorului răspunsului:';
+$labels['vacationsubject'] = 'Subiectul mesajului:';
+$labels['days'] = 'zile';
+$labels['seconds'] = 'secunde';
+$labels['rulestop'] = 'Nu mai evalua reguli';
+$labels['enable'] = 'Activeaza/Dezactiveaza';
+$labels['filterset'] = 'Filtre setate';
+$labels['filtersets'] = 'Filtrul seteaza';
+$labels['filtersetadd'] = 'Adauga set de filtre';
+$labels['filtersetdel'] = 'Sterge setul curent de filtre';
+$labels['filtersetact'] = 'Activeaza setul curent de filtre';
+$labels['filtersetdeact'] = 'Dezactiveaza setul curent de filtre';
+$labels['filterseteditraw'] = 'Modifică set filtre';
+$labels['filterdef'] = 'Definiţie filtru';
+$labels['filtersetname'] = 'Nume set filtre';
+$labels['newfilterset'] = 'Set filtre nou';
+$labels['active'] = 'activ';
+$labels['none'] = 'niciunul';
+$labels['fromset'] = 'din setul';
+$labels['fromfile'] = 'din fiÅŸier';
+$labels['filterdisabled'] = 'Filtru dezactivat';
+$labels['countisgreaterthan'] = 'numărul este mai mare ca';
+$labels['countisgreaterthanequal'] = 'numărul este mai mare sau egal cu';
+$labels['countislessthan'] = 'numărul este mai mic decât';
+$labels['countislessthanequal'] = 'numărul este mai mic sau egal cu';
+$labels['countequals'] = 'numărul este egal cu';
+$labels['countnotequals'] = 'numaratoarea nu este egala cu';
+$labels['valueisgreaterthan'] = 'valoarea este egală cu';
+$labels['valueisgreaterthanequal'] = 'valoarea este mai mare sau egala cu';
+$labels['valueislessthan'] = 'valoarea este mai mică decât';
+$labels['valueislessthanequal'] = 'valoarea este mai mică sau egală cu';
+$labels['valueequals'] = 'valoarea este egală cu';
+$labels['valuenotequals'] = 'valoarea nu este egala cu';
+$labels['setflags'] = 'Pune marcaje mesajului';
+$labels['addflags'] = 'Adaugă marcaje mesajului';
+$labels['removeflags'] = 'Åžterge marcajele mesajului';
+$labels['flagread'] = 'Citit';
+$labels['flagdeleted'] = 'Șters';
+$labels['flaganswered'] = 'Răspuns';
+$labels['flagflagged'] = 'Marcat';
+$labels['flagdraft'] = 'Schiță';
+$labels['setvariable'] = 'Setare variabilă';
+$labels['setvarname'] = 'Nume variabilă:';
+$labels['setvarvalue'] = 'Valoare variabilă:';
+$labels['setvarmodifiers'] = 'Modificatori:';
+$labels['varlower'] = 'cu litere mici';
+$labels['varupper'] = 'cu litere mari';
+$labels['varlowerfirst'] = 'primul caracter cu litre mici';
+$labels['varupperfirst'] = 'primul caracter cu litre mari';
+$labels['varquotewildcard'] = 'caracterele speciale in citat';
+$labels['varlength'] = 'lungime';
+$labels['notify'] = 'Notificare trimitere';
+$labels['notifytarget'] = 'Scopul notificării:';
+$labels['notifymessage'] = 'Mesaj notificare (opțional)';
+$labels['notifyoptions'] = 'Opțiuni notificare (opțional)';
+$labels['notifyfrom'] = 'Expeditor notificare (opțional)';
+$labels['notifyimportance'] = 'Importanța:';
+$labels['notifyimportancelow'] = 'mică';
+$labels['notifyimportancenormal'] = 'normală';
+$labels['notifyimportancehigh'] = 'mare';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Crează filtru';
+$labels['usedata'] = 'Foloseşte următoarele date în filtru:';
+$labels['nextstep'] = 'Următorul Pas';
+$labels['...'] = '...';
+$labels['string'] = 'Text';
+$labels['currdate'] = 'Data curenta';
+$labels['datetest'] = 'Data';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'an';
+$labels['month'] = 'luna';
+$labels['day'] = 'zi';
+$labels['date'] = 'data (AAAA-LL-ZZ)';
+$labels['julian'] = 'data (calendar iulian)';
+$labels['hour'] = 'ora';
+$labels['minute'] = 'minut';
+$labels['second'] = 'secunda';
+$labels['time'] = 'ora (hh:mm:ss)';
+$labels['iso8601'] = 'data (ISO8601)';
+$labels['std11'] = 'data (RFC2822)';
+$labels['zone'] = 'fus orar';
+$labels['weekday'] = 'zi saptamana (0-6)';
+$labels['advancedopts'] = 'Opţiuni avansate';
+$labels['body'] = 'Corp';
+$labels['address'] = 'adresă';
+$labels['envelope'] = 'plic';
+$labels['modifier'] = 'modificator:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'nedecodat (brut)';
+$labels['contenttype'] = 'tip conţinut';
+$labels['modtype'] = 'tip:';
+$labels['allparts'] = 'toate';
+$labels['domain'] = 'domeniu';
+$labels['localpart'] = 'partea locală';
+$labels['user'] = 'utilizator';
+$labels['detail'] = 'detaliu';
+$labels['comparator'] = 'comparator:';
+$labels['default'] = 'implicit';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'ignoră majusculele (ascii-casemap)';
+$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'invers';
+$labels['vacation'] = 'Vacanta';
+$labels['vacation.reply'] = 'Raspunde mesajului';
+$labels['vacation.advanced'] = 'Setari avansate';
+$labels['vacation.from'] = 'Adresa expeditorului răspunsului';
+$labels['vacation.subject'] = 'Subiect';
+$labels['vacation.body'] = 'Corp';
+$labels['vacation.start'] = 'Începere vacanță';
+$labels['vacation.end'] = 'Sfârșit vacanță';
+$labels['vacation.status'] = 'Statut';
+$labels['vacation.on'] = 'Pe';
+$labels['vacation.off'] = 'De pe';
+$labels['vacation.addresses'] = 'Adresele mele de e-mail';
+$labels['vacation.interval'] = 'Interval de raspundere';
+$labels['vacation.after'] = 'Pune regula de vacanta dupa';
+$labels['vacation.saving'] = 'Salvez datele...';
+$labels['vacation.action'] = 'Acțiune mesaj primit';
+$labels['vacation.keep'] = 'Păstrează';
+$labels['vacation.discard'] = 'Renunță';
+$labels['vacation.redirect'] = 'Redirecționează către';
+$labels['vacation.copy'] = 'Trimite o copie către';
+$labels['filladdresses'] = 'Completează cu toate adresele mele';
+$labels['arialabelfiltersetactions'] = 'Acțiuni set filtre';
+$labels['arialabelfilteractions'] = 'Acțiuni filtru';
+$labels['arialabelfilterform'] = 'Propretăți filtru';
+$labels['ariasummaryfilterslist'] = 'Listă filtre';
+$labels['ariasummaryfiltersetslist'] = 'Listă seturi filtre';
+$labels['filterstitle'] = 'Modifică filtre de mesaje primite';
+$labels['vacationtitle'] = 'Modifică regulă out-of-office';
+$labels['message'] = 'Mesaj';
+$labels['duplicate'] = 'este duplicat';
+$labels['notduplicate'] = 'nu este duplicat';
+$labels['duplicate.header'] = 'antet:';
+$labels['duplicate.uniqueid'] = 'identificator:';
+$labels['duplicate.seconds'] = 'timeout (secunde):';
+$labels['duplicate.last'] = 'relativ ultimei execuții';
+$messages['filterunknownerror'] = 'Eroare necunoscută la server:';
+$messages['filterconnerror'] = 'Nu mă pot conecta la server.';
+$messages['filterdeleteerror'] = 'Nu pot ÅŸterge filtrul. S-a produs o eroare la server.';
+$messages['filterdeleted'] = 'Filtrul a fost ÅŸters cu succes.';
+$messages['filtersaved'] = 'Filtrul a fost salvat cu succes.';
+$messages['filtersaveerror'] = 'Nu am putut salva filtrul. S-a produs o eroare la server.';
+$messages['filterformerror'] = 'Formularul de filtre conține erori.';
+$messages['filterdeleteconfirm'] = 'Chiar vrei să ştergi filtrul selectat?';
+$messages['ruledeleteconfirm'] = 'Eşti sigur că vrei să ştergi regula selectată?';
+$messages['actiondeleteconfirm'] = 'Eşti sigur că vrei să ştergi acţiunea selectată?';
+$messages['forbiddenchars'] = 'Caractere nepermise în câmp.';
+$messages['cannotbeempty'] = 'Câmpul nu poate fi gol.';
+$messages['ruleexist'] = 'Filtrul cu numele specificat există deja.';
+$messages['setactivateerror'] = 'Nu pot activa setul de filtre selectat. S-a produs o eroare la server.';
+$messages['setdeactivateerror'] = 'Nu pot dezactiva setul de filtre selectat. S-a produs o eroare la server.';
+$messages['setdeleteerror'] = 'Nu pot ÅŸterge setul de filtre selectat. S-a produs o eroare la server.';
+$messages['setactivated'] = 'Setul de filtre activat cu succes.';
+$messages['setdeactivated'] = 'Setul de filtre dezactivat cu succes.';
+$messages['setdeleted'] = 'Setul de filtre ÅŸters cu succes.';
+$messages['setupdated'] = 'Setul de filtre a fost actualizat cu succes';
+$messages['setdeleteconfirm'] = 'Eşti sigur(ă) că vrei să ştergi setul de filtre selectat?';
+$messages['setcreateerror'] = 'Nu am putut crea setul de filtre. S-a produs o eroare la server.';
+$messages['setcreated'] = 'Setul de filtre creat cu succes.';
+$messages['activateerror'] = 'Nu am putut activa filtrul (filtrele) selectate. S-a produs o eroare la server.';
+$messages['deactivateerror'] = 'Nu am putut dezactiva filtrele (filtrele) selectate. S-a produs o eroare la server.';
+$messages['deactivated'] = 'Filtrele au fost activate cu succes.';
+$messages['activated'] = 'Filtrele au fost dezactivate cu succes.';
+$messages['moved'] = 'Filtrele au fost mutate cu succes.';
+$messages['moveerror'] = 'Nu am putut muta filtrul selectat. S-a produs o eroare la server.';
+$messages['nametoolong'] = 'Numele este prea lung.';
+$messages['namereserved'] = 'Nume rezervat.';
+$messages['setexist'] = 'Setul există deja.';
+$messages['nodata'] = 'Trebuie selectată cel putin o poziţie!';
+$messages['invaliddateformat'] = 'Data sau parte din data in format invalid';
+$messages['saveerror'] = 'Nu am putut salva datele. A aparut o eroare de server.';
+$messages['vacationsaved'] = 'Data de vacanta salvata cu succes';
+$messages['emptyvacationbody'] = 'Corpul mesajului de vacanță este obligatoriu!';
+$messages['duplicate.conflict.err'] = 'Atât antetul, cât și identificatorul unic nu sunt permise.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Фильтры';
+$labels['managefilters'] = 'Управление фильтрами Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñщей почты';
+$labels['filtername'] = 'Ðазвание фильтра';
+$labels['newfilter'] = 'Ðовый фильтр';
+$labels['filteradd'] = 'Добавить фильтр';
+$labels['filterdel'] = 'Удалить фильтр';
+$labels['moveup'] = 'Сдвинуть вверх';
+$labels['movedown'] = 'Сдвинуть вниз';
+$labels['filterallof'] = 'ÑоответÑтвует вÑем указанным правилам';
+$labels['filteranyof'] = 'ÑоответÑтвует любому из указанных правил';
+$labels['filterany'] = 'вÑе ÑообщениÑ';
+$labels['filtercontains'] = 'Ñодержит';
+$labels['filternotcontains'] = 'не Ñодержит';
+$labels['filteris'] = 'ÑоответÑтвует';
+$labels['filterisnot'] = 'не ÑоответÑтвует';
+$labels['filterexists'] = 'ÑущеÑтвует';
+$labels['filternotexists'] = 'не ÑущеÑтвует';
+$labels['filtermatches'] = 'Ñовпадает Ñ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼';
+$labels['filternotmatches'] = 'не Ñовпадает Ñ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼';
+$labels['filterregex'] = 'Ñовпадает Ñ Ñ€ÐµÐ³ÑƒÐ»Ñрным выражением';
+$labels['filternotregex'] = 'не Ñовпадает Ñ Ñ€ÐµÐ³ÑƒÐ»Ñрным выражением';
+$labels['filterunder'] = 'меньше';
+$labels['filterover'] = 'больше';
+$labels['addrule'] = 'Добавить правило';
+$labels['delrule'] = 'Удалить правило';
+$labels['messagemoveto'] = 'ПеремеÑтить Ñообщение в';
+$labels['messageredirect'] = 'Перенаправить Ñообщение на';
+$labels['messagecopyto'] = 'Скопировать Ñообщение в';
+$labels['messagesendcopy'] = 'Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð°';
+$labels['messagereply'] = 'Ответить Ñ Ñообщением';
+$labels['messagedelete'] = 'Удалить Ñообщение';
+$labels['messagediscard'] = 'ОтброÑить Ñ Ñообщением';
+$labels['messagekeep'] = 'ОÑтавить Ñообщение во ВходÑщих';
+$labels['messagesrules'] = 'Ð”Ð»Ñ Ð²Ñ…Ð¾Ð´Ñщей почты:';
+$labels['messagesactions'] = '...выполнить Ñледующие дейÑтвиÑ:';
+$labels['add'] = 'Добавить';
+$labels['del'] = 'Удалить';
+$labels['sender'] = 'Отправитель';
+$labels['recipient'] = 'Получатель';
+$labels['vacationaddr'] = 'Мои адреÑа Ñл. почты:';
+$labels['vacationdays'] = 'Как чаÑто отправлÑÑ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ (в днÑÑ…):';
+$labels['vacationinterval'] = 'Как чаÑто отправлÑÑ‚ÑŒ ÑообщениÑ:';
+$labels['vacationreason'] = 'ТекÑÑ‚ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ (причина отÑутÑтвиÑ):';
+$labels['vacationfrom'] = 'Обратный Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ:';
+$labels['vacationsubject'] = 'Тема ÑообщениÑ:';
+$labels['days'] = 'дней';
+$labels['seconds'] = 'Ñекунд';
+$labels['rulestop'] = 'Закончить выполнение';
+$labels['enable'] = 'Включить/Выключить';
+$labels['filterset'] = 'Ðабор фильтров';
+$labels['filtersets'] = 'Ðаборы фильтров';
+$labels['filtersetadd'] = 'Добавить набор фильтров';
+$labels['filtersetdel'] = 'Удалить текущий набор фильтров';
+$labels['filtersetact'] = 'Включить текущий набор фильтров';
+$labels['filtersetdeact'] = 'Отключить текущий набор фильтров';
+$labels['filterseteditraw'] = 'Изменить набор фильтров';
+$labels['filterdef'] = 'ОпиÑание фильтра';
+$labels['filtersetname'] = 'Ðазвание набора фильтров';
+$labels['newfilterset'] = 'Ðовый набор фильтров';
+$labels['active'] = 'иÑпользуетÑÑ';
+$labels['none'] = 'нет';
+$labels['fromset'] = 'из набора';
+$labels['fromfile'] = 'из файла';
+$labels['filterdisabled'] = 'Отключить фильтр';
+$labels['countisgreaterthan'] = 'количеÑтво больше, чем';
+$labels['countisgreaterthanequal'] = 'количеÑтво больше или равно';
+$labels['countislessthan'] = 'количеÑтво меньше, чем';
+$labels['countislessthanequal'] = 'количеÑтво меньше или равно';
+$labels['countequals'] = 'количеÑтво равно';
+$labels['countnotequals'] = 'количеÑтво не равно';
+$labels['valueisgreaterthan'] = 'значение больше, чем';
+$labels['valueisgreaterthanequal'] = 'значение больше или равно';
+$labels['valueislessthan'] = 'значение меньше, чем';
+$labels['valueislessthanequal'] = 'значение меньше или равно';
+$labels['valueequals'] = 'значение равно';
+$labels['valuenotequals'] = 'значение не равно';
+$labels['setflags'] = 'УÑтановить флаги на Ñообщение';
+$labels['addflags'] = 'Добавить флаги к Ñообщению';
+$labels['removeflags'] = 'Убрать флаги из ÑообщениÑ';
+$labels['flagread'] = 'Прочитано';
+$labels['flagdeleted'] = 'Удалено';
+$labels['flaganswered'] = 'Отвечено';
+$labels['flagflagged'] = 'Помечено';
+$labels['flagdraft'] = 'Черновик';
+$labels['setvariable'] = 'Задать переменную';
+$labels['setvarname'] = 'Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹:';
+$labels['setvarvalue'] = 'Значение переменной:';
+$labels['setvarmodifiers'] = 'Модификаторы:';
+$labels['varlower'] = 'нижний региÑÑ‚Ñ€';
+$labels['varupper'] = 'верхний региÑÑ‚Ñ€';
+$labels['varlowerfirst'] = 'первый Ñимвол в нижнем региÑтре';
+$labels['varupperfirst'] = 'первый Ñимвол в верхнем региÑтре';
+$labels['varquotewildcard'] = 'Ñимвол кавычек';
+$labels['varlength'] = 'длина';
+$labels['notify'] = 'Отправить уведомление';
+$labels['notifytarget'] = 'Объект уведомлениÑ:';
+$labels['notifymessage'] = 'Сообщение ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ (не обÑзательно):';
+$labels['notifyoptions'] = 'Параметры ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ (не обÑзательно):';
+$labels['notifyfrom'] = 'Отправитель ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ (не обÑзательно):';
+$labels['notifyimportance'] = 'ВажноÑÑ‚ÑŒ:';
+$labels['notifyimportancelow'] = 'низкаÑ';
+$labels['notifyimportancenormal'] = 'нормальнаÑ';
+$labels['notifyimportancehigh'] = 'выÑокаÑ';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Телефон';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Создать фильтр';
+$labels['usedata'] = 'ИÑпользовать Ñледующие данные в фильтре:';
+$labels['nextstep'] = 'Далее';
+$labels['...'] = '...';
+$labels['string'] = 'Строка';
+$labels['currdate'] = 'Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð´Ð°Ñ‚Ð°';
+$labels['datetest'] = 'Дата';
+$labels['dateheader'] = 'заголовок:';
+$labels['year'] = 'год';
+$labels['month'] = 'меÑÑц';
+$labels['day'] = 'день';
+$labels['date'] = 'дата (гггг-мм-дд)';
+$labels['julian'] = 'дата (юлианÑкаÑ)';
+$labels['hour'] = 'чаÑ';
+$labels['minute'] = 'минута';
+$labels['second'] = 'Ñекунда';
+$labels['time'] = 'Ð²Ñ€ÐµÐ¼Ñ (чч:мм:ÑÑ)';
+$labels['iso8601'] = 'дата (ISO8601)';
+$labels['std11'] = 'дата (RFC2822)';
+$labels['zone'] = 'чаÑовой поÑÑ';
+$labels['weekday'] = 'день недели (0-6)';
+$labels['advancedopts'] = 'Дополнительные параметры';
+$labels['body'] = 'Тело пиÑьма';
+$labels['address'] = 'адреÑ';
+$labels['envelope'] = 'конверт';
+$labels['modifier'] = 'модификатор облаÑти поиÑка:';
+$labels['text'] = 'текÑÑ‚';
+$labels['undecoded'] = 'необработанный (Ñырой)';
+$labels['contenttype'] = 'тип Ñодержимого';
+$labels['modtype'] = 'поиÑк в адреÑах:';
+$labels['allparts'] = 'везде';
+$labels['domain'] = 'в имени домена';
+$labels['localpart'] = 'только в имени пользователÑ, без домена';
+$labels['user'] = 'в полном имени пользователÑ';
+$labels['detail'] = 'в дополнительных ÑведениÑÑ…';
+$labels['comparator'] = 'ÑпоÑоб ÑравнениÑ:';
+$labels['default'] = 'по умолчанию';
+$labels['octet'] = 'Строгий (octet)';
+$labels['asciicasemap'] = 'РегиÑтронезавиÑимый (ascii-casemap)';
+$labels['asciinumeric'] = 'ЧиÑловой (ascii-numeric)';
+$labels['index'] = 'индекÑ:';
+$labels['indexlast'] = 'наоборот';
+$labels['vacation'] = 'ОтпуÑк';
+$labels['vacation.reply'] = 'Ответное Ñообщение';
+$labels['vacation.advanced'] = 'Дополнительные наÑтройки';
+$labels['vacation.from'] = 'Обратный Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ';
+$labels['vacation.subject'] = 'Тема';
+$labels['vacation.body'] = 'Тело пиÑьма';
+$labels['vacation.start'] = 'Ðачало отпуÑка';
+$labels['vacation.end'] = 'Конец отпуÑка';
+$labels['vacation.status'] = 'СоÑтоÑние';
+$labels['vacation.on'] = 'Вкл.';
+$labels['vacation.off'] = 'Выкл.';
+$labels['vacation.addresses'] = 'Мои адреÑа Ñл. почты';
+$labels['vacation.interval'] = 'Интервал ответа';
+$labels['vacation.after'] = 'ПомеÑтить правило отпуÑка поÑле';
+$labels['vacation.saving'] = 'Сохранение данных...';
+$labels['vacation.action'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ñ Ð²Ñ…Ð¾Ð´Ñщим Ñообщением';
+$labels['vacation.keep'] = 'ОÑтавить';
+$labels['vacation.discard'] = 'Отменить';
+$labels['vacation.redirect'] = 'Перенаправить на';
+$labels['vacation.copy'] = 'Отправить копию на';
+$labels['filladdresses'] = 'Заполнить вÑеми моими адреÑами';
+$labels['arialabelfiltersetactions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° фильтров';
+$labels['arialabelfilteractions'] = 'ДейÑÑ‚Ð²Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°';
+$labels['arialabelfilterform'] = 'СвойÑтва фильтра';
+$labels['ariasummaryfilterslist'] = 'СпиÑок фильтров';
+$labels['ariasummaryfiltersetslist'] = 'СпиÑок набора фильтров';
+$labels['filterstitle'] = 'Редактировать фильтры Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñщей почты';
+$labels['vacationtitle'] = 'Изменить правило "Ðе в офиÑе"';
+$labels['message'] = 'Сообщение';
+$labels['duplicate'] = 'дублируетÑÑ';
+$labels['notduplicate'] = 'не дублируетÑÑ';
+$labels['duplicate.handle'] = 'деÑкриптор:';
+$labels['duplicate.header'] = 'заголовок:';
+$labels['duplicate.uniqueid'] = 'идентификатор:';
+$labels['duplicate.seconds'] = 'тайм-аут (Ñекунд):';
+$labels['duplicate.last'] = 'отноÑительно поÑледнего запуÑка';
+$messages['filterunknownerror'] = 'ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñервера.';
+$messages['filterconnerror'] = 'Ðевозможно подключитьÑÑ Ðº Ñерверу.';
+$messages['filterdeleteerror'] = 'Ðевозможно удалить фильтр. Ошибка Ñервера.';
+$messages['filterdeleted'] = 'Фильтр уÑпешно удалён.';
+$messages['filtersaved'] = 'Фильтр уÑпешно Ñохранён.';
+$messages['filtersaveerror'] = 'Ðевозможно Ñохранить фильтр. Ошибка Ñервера.';
+$messages['filterformerror'] = 'Форма фильтра Ñодержит ошибки.';
+$messages['filterdeleteconfirm'] = 'Ð’Ñ‹ дейÑтвительно хотите удалить выделенный фильтр?';
+$messages['ruledeleteconfirm'] = 'Вы уверенны, что хотите удалить выделенное правило?';
+$messages['actiondeleteconfirm'] = 'Ð’Ñ‹ уверенны, что хотите удалить выделенное дейÑтвие?';
+$messages['forbiddenchars'] = 'ÐедопуÑтимые Ñимволы в поле.';
+$messages['cannotbeempty'] = 'Поле не может быть пуÑтым.';
+$messages['ruleexist'] = 'Фильтр Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует.';
+$messages['setactivateerror'] = 'Ðевозможно включить выбранный набор фильтров. Ошибка Ñервера.';
+$messages['setdeactivateerror'] = 'Ðевозможно отключить выбранный набор фильтров. Ошибка Ñервера.';
+$messages['setdeleteerror'] = 'Ðевозможно удалить выбранный набор фильтров. Ошибка Ñервера.';
+$messages['setactivated'] = 'Ðабор фильтров уÑпешно включён.';
+$messages['setdeactivated'] = 'Ðабор фильтров уÑпешно отключён.';
+$messages['setdeleted'] = 'Ðабор фильтров уÑпешно удалён.';
+$messages['setupdated'] = 'Ðабор фильтров уÑпешно обновлён.';
+$messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?';
+$messages['setcreateerror'] = 'Ðевозможно Ñоздать набор фильтров. Ошибка Ñервера.';
+$messages['setcreated'] = 'Ðабор фильтров уÑпешно Ñоздан.';
+$messages['activateerror'] = 'Ðевозможно включить выбранный(е) фильтр(Ñ‹). Ошибка Ñервера.';
+$messages['deactivateerror'] = 'Ðевозможно выключить выбранный(е) фильтр(Ñ‹). Ошибка Ñервера.';
+$messages['deactivated'] = 'Фильтр(Ñ‹) уÑпешно отключен(Ñ‹).';
+$messages['activated'] = 'Фильтр(Ñ‹) уÑпешно включен(Ñ‹).';
+$messages['moved'] = 'Фильтр уÑпешно перемещён.';
+$messages['moveerror'] = 'Ðевозможно перемеÑтить фильтр. Ошибка Ñервера.';
+$messages['nametoolong'] = 'Слишком длинное имÑ.';
+$messages['namereserved'] = 'Зарезервированное имÑ.';
+$messages['setexist'] = 'Ðабор уже ÑущеÑтвует.';
+$messages['nodata'] = 'Ðужно выбрать Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одну позицию!';
+$messages['invaliddateformat'] = 'ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° или формат чаÑти даты';
+$messages['saveerror'] = 'Ðевозможно Ñохранить данные. Ошибка Ñервера.';
+$messages['vacationsaved'] = 'Данные об отпуÑке уÑпешно Ñохранены.';
+$messages['emptyvacationbody'] = 'Сообщение о причине отÑутÑÑ‚Ð²Ð¸Ñ Ð½Ðµ может быть пуÑтым!';
+$messages['duplicate.conflict.err'] = 'Ðе разрешено иÑпользовать заголовок и уникальный идентификатор вмеÑте.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/si_LK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'පෙරහණ';
+$labels['moveup'] = 'ඉහළට ගෙනයන්න';
+$labels['movedown'] = 'පහළට ගෙනයන්න';
+$labels['filterany'] = 'සියලු පණිවිඩ';
+$labels['filtercontains'] = 'අඩංගු';
+$labels['messagedelete'] = 'පණිවිඩය මකන්න';
+$labels['add'] = 'එක් කරන්න';
+$labels['del'] = 'මකන්න';
+$labels['sender'] = 'යවන්නà·';
+$labels['recipient'] = 'ලබන්නà·';
+$labels['vacationsubject'] = 'පණිවිඩයේ මà·à¶­à·˜à¶šà·à·€:';
+$labels['enable'] = 'සක්â€à¶»à·“ය කරන්න/අක්â€à¶»à·“ය කරන්න';
+$labels['active'] = 'සක්â€à¶»à·“ය';
+$labels['none'] = 'කිසිවක් නà·à¶­';
+$labels['flagread'] = 'කියවන්න';
+$labels['flagdeleted'] = 'මකන ලදී';
+$labels['flagdraft'] = 'කටු සටහන';
+$labels['nextstep'] = 'මීලග පියවර';
+$labels['...'] = '...';
+$labels['address'] = 'ලිපිනය';
+$labels['envelope'] = 'ලියුම් කවරය';
+$labels['modtype'] = 'වර්ගය:';
+$labels['allparts'] = 'සියල්ල';
+$messages['nametoolong'] = 'නම දිග à·€à·à¶©à·’ය.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtre';
+$labels['managefilters'] = 'Správa filtrov prichádzajúcej pošty';
+$labels['filtername'] = 'Názov filtra';
+$labels['newfilter'] = 'Nový filter';
+$labels['filteradd'] = 'Pridať filter';
+$labels['filterdel'] = 'Vymazať filter';
+$labels['moveup'] = 'Presunúť nahor';
+$labels['movedown'] = 'Presunúť nadol';
+$labels['filterallof'] = 'vyhovujúca všetkým z nasledujúcich pravidiel';
+$labels['filteranyof'] = 'vyhovujúca ľubovoľnému z nasledujúcich pravidiel';
+$labels['filterany'] = 'všetky správy';
+$labels['filtercontains'] = 'obsahuje';
+$labels['filternotcontains'] = 'neobsahuje';
+$labels['filteris'] = 'sa rovná';
+$labels['filterisnot'] = 'sa nerovná';
+$labels['filterexists'] = 'existuje';
+$labels['filternotexists'] = 'neexistuje';
+$labels['filtermatches'] = 'vyhovuje výrazu';
+$labels['filternotmatches'] = 'nevyhovuje výrazu';
+$labels['filterregex'] = 'vyhovuje regulárnemu výrazu';
+$labels['filternotregex'] = 'nevyhovuje regulárnemu výrazu';
+$labels['filterunder'] = 'pod';
+$labels['filterover'] = 'nad';
+$labels['addrule'] = 'Pridať pravidlo';
+$labels['delrule'] = 'Vymazať pravidlo';
+$labels['messagemoveto'] = 'Presunúť správu do';
+$labels['messageredirect'] = 'Presmerovať správu na';
+$labels['messagecopyto'] = 'Kopírovať správu do';
+$labels['messagesendcopy'] = 'Poslať kópiu správy na adresu';
+$labels['messagereply'] = 'Odpovedať správou';
+$labels['messagedelete'] = 'Vymazať správu';
+$labels['messagediscard'] = 'Vymazať a poslať správu na';
+$labels['messagekeep'] = 'PonechaÅ¥ správu v DoruÄenej poÅ¡te';
+$labels['messagesrules'] = 'Pre prichádzajúcu poštu:';
+$labels['messagesactions'] = '...vykonať tieto akcie:';
+$labels['add'] = 'Pridať';
+$labels['del'] = 'Vymazať';
+$labels['sender'] = 'Odosielateľ';
+$labels['recipient'] = 'Príjemca';
+$labels['vacationaddr'] = 'Moje e-mailové adresy:';
+$labels['vacationdays'] = 'Ako Äasto odosielaÅ¥ správy (v dňoch):';
+$labels['vacationinterval'] = 'Ako Äasto odosielaÅ¥ správy:';
+$labels['vacationreason'] = 'Telo správy (dôvod neprítomnosti):';
+$labels['vacationfrom'] = 'Adresa odosielateľa pre odpoveÄ:';
+$labels['vacationsubject'] = 'Predmet správy:';
+$labels['days'] = 'dní';
+$labels['seconds'] = 'sekúnd';
+$labels['rulestop'] = 'Koniec pravidiel';
+$labels['enable'] = 'Zapnúť/vypnúť';
+$labels['filterset'] = 'Súprava filtrov';
+$labels['filtersets'] = 'Súpravy filtrov';
+$labels['filtersetadd'] = 'Pridať súpravu filtrov';
+$labels['filtersetdel'] = 'Vymazať aktuálnu súpravu filtrov';
+$labels['filtersetact'] = 'Aktivovať aktuálnu súpravu filtrov';
+$labels['filtersetdeact'] = 'Deaktivovať aktuálnu súpravu filtrov';
+$labels['filterseteditraw'] = 'Upraviť súpravu filtrov';
+$labels['filterdef'] = 'Definícia filtra';
+$labels['filtersetname'] = 'Názov súpravy filtrov';
+$labels['newfilterset'] = 'Nová súprava filtrov';
+$labels['active'] = 'aktívna';
+$labels['none'] = 'žiadne';
+$labels['fromset'] = 'zo súpravy';
+$labels['fromfile'] = 'zo súboru';
+$labels['filterdisabled'] = 'Filter vypnutý';
+$labels['countisgreaterthan'] = 'poÄet je väÄší ako';
+$labels['countisgreaterthanequal'] = 'poÄet je väÄší alebo rovný ako';
+$labels['countislessthan'] = 'poÄet je menší ako';
+$labels['countislessthanequal'] = 'poÄet je menší alebo rovný ako';
+$labels['countequals'] = 'poÄet je rovný';
+$labels['countnotequals'] = 'poÄet sa nerovná';
+$labels['valueisgreaterthan'] = 'hodnota je väÄÅ¡ia ako';
+$labels['valueisgreaterthanequal'] = 'hodnota je väÄÅ¡ia alebo rovná ako';
+$labels['valueislessthan'] = 'hodnota je menšia ako';
+$labels['valueislessthanequal'] = 'hodnota je menšia alebo rovná ako';
+$labels['valueequals'] = 'hodnota je rovná ako';
+$labels['valuenotequals'] = 'hodnota sa nerovná';
+$labels['setflags'] = 'Nastaviť príznaky správy';
+$labels['addflags'] = 'Pridať príznaky správy';
+$labels['removeflags'] = 'Odstrániť príznaky zo správy';
+$labels['flagread'] = 'PreÄítané';
+$labels['flagdeleted'] = 'Vymazané';
+$labels['flaganswered'] = 'Odpovedané';
+$labels['flagflagged'] = 'OznaÄené príznakom';
+$labels['flagdraft'] = 'Koncept';
+$labels['setvariable'] = 'Nastaviť premennú';
+$labels['setvarname'] = 'Názov premennej:';
+$labels['setvarvalue'] = 'Hodnota premennej:';
+$labels['setvarmodifiers'] = 'Modifikátory:';
+$labels['varlower'] = 'malé písmená';
+$labels['varupper'] = 'VEĽKÉ PÃSMENÃ';
+$labels['varlowerfirst'] = 'prvé písmeno malé';
+$labels['varupperfirst'] = 'prvé písmeno veľké';
+$labels['varquotewildcard'] = 'k špeciálnym znakom pridať úvodzovky';
+$labels['varlength'] = 'dĺžka';
+$labels['notify'] = 'Odoslať oznámenie';
+$labels['notifytarget'] = 'Cieľ notifikácie:';
+$labels['notifymessage'] = 'NotifikaÄná správa (voliteľne):';
+$labels['notifyoptions'] = 'Nastavenia notifikácie (voliteľné):';
+$labels['notifyfrom'] = 'Odosielateľ notifikácie (voliteľne):';
+$labels['notifyimportance'] = 'Priorita:';
+$labels['notifyimportancelow'] = 'nízka';
+$labels['notifyimportancenormal'] = 'normálna';
+$labels['notifyimportancehigh'] = 'vysoká';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefón';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Vytvoriť filter';
+$labels['usedata'] = 'Použiť tieto údaje vo filtri:';
+$labels['nextstep'] = 'Ďalší krok';
+$labels['...'] = '...';
+$labels['string'] = 'Reťazec';
+$labels['currdate'] = 'Aktuálny dátum';
+$labels['datetest'] = 'Dátum';
+$labels['dateheader'] = 'záhlavie:';
+$labels['year'] = 'rok';
+$labels['month'] = 'mesiac';
+$labels['day'] = 'deň';
+$labels['date'] = 'dátum (rrrr-mm-dd)';
+$labels['julian'] = 'dátum (podľa Juliánskeho kalendára)';
+$labels['hour'] = 'hod.';
+$labels['minute'] = 'min.';
+$labels['second'] = 'sek.';
+$labels['time'] = 'Äas (hh:mm:ss)';
+$labels['iso8601'] = 'dátum (ISO8601)';
+$labels['std11'] = 'dátum (RFC2822)';
+$labels['zone'] = 'Äasové pásmo';
+$labels['weekday'] = 'deň v týždni (0-6)';
+$labels['advancedopts'] = 'Rozšírené nastavenia';
+$labels['body'] = 'Telo';
+$labels['address'] = 'adresa';
+$labels['envelope'] = 'obálka';
+$labels['modifier'] = 'modifikátor:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'nedekódované (raw)';
+$labels['contenttype'] = 'typ obsahu';
+$labels['modtype'] = 'typ:';
+$labels['allparts'] = 'všetko';
+$labels['domain'] = 'doména';
+$labels['localpart'] = 'lokálna ÄasÅ¥';
+$labels['user'] = 'používateľ';
+$labels['detail'] = 'detail';
+$labels['comparator'] = 'porovnávaÄ:';
+$labels['default'] = 'predvolené';
+$labels['octet'] = 'striktný (osmiÄkový)';
+$labels['asciicasemap'] = 'nerozlišuje veľké a malé písmená (ascii tabuľka znakov)';
+$labels['asciinumeric'] = 'numerické (ascii Äísla)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'dozadu';
+$labels['vacation'] = 'Dovolenka';
+$labels['vacation.reply'] = 'OdpoveÄ na správu';
+$labels['vacation.advanced'] = 'PokroÄilé nastavenia';
+$labels['vacation.from'] = 'Adresa odosielateľa pre odpoveÄ';
+$labels['vacation.subject'] = 'Predmet';
+$labels['vacation.body'] = 'Telo';
+$labels['vacation.start'] = 'ZaÄiatok dovolenky';
+$labels['vacation.end'] = 'Koniec dovolenky';
+$labels['vacation.status'] = 'Stav';
+$labels['vacation.on'] = 'Zap.';
+$labels['vacation.off'] = 'Vyp.';
+$labels['vacation.addresses'] = 'Moje e-mailové adresy';
+$labels['vacation.interval'] = 'Interval odpovedania';
+$labels['vacation.after'] = 'Nastaviť pravidlo pre dovolenku po';
+$labels['vacation.saving'] = 'Ukladanie údajov...';
+$labels['vacation.action'] = 'Akcia pre prichádzajúcu správu';
+$labels['vacation.keep'] = 'Zachovať';
+$labels['vacation.discard'] = 'Vyhodiť do koša';
+$labels['vacation.redirect'] = 'Presmerovať na';
+$labels['vacation.copy'] = 'Poslať kópiu na';
+$labels['filladdresses'] = 'Vyplniť všetko mojimi adresami';
+$labels['arialabelfiltersetactions'] = 'Akcie zo súpravy filtrov';
+$labels['arialabelfilteractions'] = 'Akcie filtra';
+$labels['arialabelfilterform'] = 'Nastavenia filtra';
+$labels['ariasummaryfilterslist'] = 'Zoznam filtrov';
+$labels['ariasummaryfiltersetslist'] = 'Zoznam súprav s filtrami';
+$labels['filterstitle'] = 'Upraviť filtre prichádzajúcich e-mailov';
+$labels['vacationtitle'] = 'UpraviÅ¥ pravidlo pre Äas mimo kancelárie';
+$labels['message'] = 'Správa';
+$labels['duplicate'] = 'je duplikátom';
+$labels['notduplicate'] = 'nie je duplikátom';
+$labels['duplicate.handle'] = 'postup:';
+$labels['duplicate.header'] = 'záhlavie:';
+$labels['duplicate.uniqueid'] = 'identifikátor:';
+$labels['duplicate.seconds'] = 'Äasový limit (sek.):';
+$labels['duplicate.last'] = 'relatívne voÄi poslednému spusteniu';
+$messages['filterunknownerror'] = 'Neznáma chyba servera.';
+$messages['filterconnerror'] = 'Nepodarilo sa pripojiť k serveru.';
+$messages['filterdeleteerror'] = 'Nemožno vymazať filter. Nastala chyba servera.';
+$messages['filterdeleted'] = 'Filter bol úspešne vymazaný.';
+$messages['filtersaved'] = 'Filter bol úspešne uložený.';
+$messages['filtersaveerror'] = 'Nemožno uložiť filter. Nastala chyba servera.';
+$messages['filterformerror'] = 'Formulár pre filtrovanie obsahuje chyby.';
+$messages['filterdeleteconfirm'] = 'Naozaj chcete vymazať vybraný filter?';
+$messages['ruledeleteconfirm'] = 'Naozaj chcete vymazať vybrané pravidlo?';
+$messages['actiondeleteconfirm'] = 'Naozaj chcete vymazať vybranú akciu?';
+$messages['forbiddenchars'] = 'Pole obsahuje nepovolené znaky.';
+$messages['cannotbeempty'] = 'Pole nemôže byť prázdne.';
+$messages['ruleexist'] = 'Filter so zadaným názvom už existuje.';
+$messages['setactivateerror'] = 'Nemožno aktivovať vybranú súpravu filtrov. Nastala chyba servera.';
+$messages['setdeactivateerror'] = 'Nemožno deaktivovať vybranú súpravu filtrov. Nastala chyba servera.';
+$messages['setdeleteerror'] = 'Nemožno vymazať vybranú súpravu filtrov. Nastala chyba servera.';
+$messages['setactivated'] = 'Súprava filtrov bola úspešne aktivovaná.';
+$messages['setdeactivated'] = 'Súprava filtrov bola úspešne deaktivovaná.';
+$messages['setdeleted'] = 'Súprava filtrov bola úspešne vymazaná.';
+$messages['setupdated'] = 'Súprava filtrov bola úspešne aktualizovaná.';
+$messages['setdeleteconfirm'] = 'Naozaj chcete vymazať vybranú súpravu filtrov?';
+$messages['setcreateerror'] = 'Nemožno vytvoriť súpravu filtrov. Nastala chyba servera.';
+$messages['setcreated'] = 'Súprava filtrov bola úspešne vytvorená.';
+$messages['activateerror'] = 'Nemožno aktivovať vybraný filter (vybrané filtre). Nastala chyba servera.';
+$messages['deactivateerror'] = 'Nemožno vypnúť vybraný filter (vybrané filtre). Nastala chyba servera.';
+$messages['deactivated'] = 'Filtre boli úspešne vypnuté.';
+$messages['activated'] = 'Filtre boli úspešne zapnuté.';
+$messages['moved'] = 'Filter bol úspešne presunutý.';
+$messages['moveerror'] = 'Nemožno presunúť vybraný filter. Nastala chyba servera.';
+$messages['nametoolong'] = 'Názov je príliš dlhý.';
+$messages['namereserved'] = 'Rezervovaný názov.';
+$messages['setexist'] = 'Súprava už existuje.';
+$messages['nodata'] = 'Aspoň jedna pozícia musí byť zvolená!';
+$messages['invaliddateformat'] = 'Neplatný formát dátumu alebo Äasti dátumu';
+$messages['saveerror'] = 'Údaje nemožno uložiť. Nastala chyba servera.';
+$messages['vacationsaved'] = 'Údaje o dovolenke boli úspešne uložené.';
+$messages['emptyvacationbody'] = 'Musíte zadaÅ¥ telo správy, zobrazovanej v Äase neprítomnosti!';
+$messages['duplicate.conflict.err'] = 'HlaviÄka a aj unikátny identifikátor nie sú povolené.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtri';
+$labels['managefilters'] = 'Uredi filtre za dohodno pošto';
+$labels['filtername'] = 'Ime filtra';
+$labels['newfilter'] = 'Nov filter';
+$labels['filteradd'] = 'Dodaj filter';
+$labels['filterdel'] = 'Izbriši filter';
+$labels['moveup'] = 'Pomakni se navzgor';
+$labels['movedown'] = 'Pomakni se navzdol';
+$labels['filterallof'] = 'izpolnjeni morajo biti vsi pogoji';
+$labels['filteranyof'] = 'izpolnjen mora biti vsaj eden od navedenih pogojev';
+$labels['filterany'] = 'pogoj velja za vsa sporoÄila';
+$labels['filtercontains'] = 'vsebuje';
+$labels['filternotcontains'] = 'ne vsebuje';
+$labels['filteris'] = 'je enak/a';
+$labels['filterisnot'] = 'ni enak/a';
+$labels['filterexists'] = 'obstaja';
+$labels['filternotexists'] = 'ne obstaja';
+$labels['filtermatches'] = 'ustreza izrazu';
+$labels['filternotmatches'] = 'ne ustreza izrazu';
+$labels['filterregex'] = 'ustreza regularnemu izrazu';
+$labels['filternotregex'] = 'ne ustreza regularnemu izrazu';
+$labels['filterunder'] = 'pod';
+$labels['filterover'] = 'nad';
+$labels['addrule'] = 'Dodaj pravilo';
+$labels['delrule'] = 'Izbriši pravilo';
+$labels['messagemoveto'] = 'Premakni sporoÄilo v';
+$labels['messageredirect'] = 'Preusmeri sporoÄilo v';
+$labels['messagecopyto'] = 'Kopiraj sporoÄila na';
+$labels['messagesendcopy'] = 'PoÅ¡lji kopijo sporoÄila na';
+$labels['messagereply'] = 'Odgovori s sporoÄilom';
+$labels['messagedelete'] = 'IzbriÅ¡i sporoÄilo';
+$labels['messagediscard'] = 'Zavrži s sporoÄilom';
+$labels['messagekeep'] = 'Ohrani sporoÄila v mapi Prejeto';
+$labels['messagesrules'] = 'DoloÄi pravila za dohodno poÅ¡to:';
+$labels['messagesactions'] = '...izvrši naslednja dejanja:';
+$labels['add'] = 'Dodaj';
+$labels['del'] = 'Izbriši';
+$labels['sender'] = 'Pošiljatelj';
+$labels['recipient'] = 'Prejemnik';
+$labels['vacationaddr'] = 'Moji elektronski naslovi:';
+$labels['vacationdays'] = 'Kako pogosto naj bodo sporoÄila poslana (v dnevih):';
+$labels['vacationinterval'] = 'SporoÄila poÅ¡lji na:';
+$labels['vacationreason'] = 'Vsebina sporoÄila (vzrok za odsotnost):';
+$labels['vacationfrom'] = 'Naslov za odgovor:';
+$labels['vacationsubject'] = 'Zadeva sporoÄila';
+$labels['days'] = 'dni';
+$labels['seconds'] = 'sekund';
+$labels['rulestop'] = 'Prekini z izvajanjem pravil';
+$labels['enable'] = 'OmogoÄi/OnemogoÄi';
+$labels['filterset'] = 'Nastavitev filtrov';
+$labels['filtersets'] = 'Nastavitve filtrov';
+$labels['filtersetadd'] = 'Dodaj nastavitev filtrov';
+$labels['filtersetdel'] = 'Izbriši trenutne nastavitve filtriranja';
+$labels['filtersetact'] = 'VkljuÄi trenutno nastavitev filtriranja';
+$labels['filtersetdeact'] = 'OnemogoÄi trenutno nastavitev filtriranja';
+$labels['filterseteditraw'] = 'Uredi nabor filtrov';
+$labels['filterdef'] = 'Opis filtra';
+$labels['filtersetname'] = 'Ime filtra';
+$labels['newfilterset'] = 'Nov filter';
+$labels['active'] = 'aktiven';
+$labels['none'] = 'brez';
+$labels['fromset'] = 'iz nastavitve';
+$labels['fromfile'] = 'iz dokumenta';
+$labels['filterdisabled'] = 'Filter onemogoÄen';
+$labels['countisgreaterthan'] = 'seÅ¡tevek je veÄji od';
+$labels['countisgreaterthanequal'] = 'seÅ¡tevek je veÄji ali enak';
+$labels['countislessthan'] = 'seštevek je manjši od';
+$labels['countislessthanequal'] = 'seštevel je manjši ali enak';
+$labels['countequals'] = 'seštevek je enak';
+$labels['countnotequals'] = 'vsota ne ustreza';
+$labels['valueisgreaterthan'] = 'vrednost je veÄja od';
+$labels['valueisgreaterthanequal'] = 'vrednost je veÄja ali enaka';
+$labels['valueislessthan'] = 'vrednost je manjša od';
+$labels['valueislessthanequal'] = 'vrednost je manjša ali enaka';
+$labels['valueequals'] = 'vrednost je enaka';
+$labels['valuenotequals'] = 'vrednost ni enaka';
+$labels['setflags'] = 'OznaÄi sporoÄilo';
+$labels['addflags'] = 'OznaÄi sporoÄilo';
+$labels['removeflags'] = 'Odstrani zaznamke s sporoÄil';
+$labels['flagread'] = 'Prebrano';
+$labels['flagdeleted'] = 'Izbrisano';
+$labels['flaganswered'] = 'Odgovorjeno';
+$labels['flagflagged'] = 'OznaÄeno';
+$labels['flagdraft'] = 'Osnutek';
+$labels['setvariable'] = 'Nastavi spremenljivko';
+$labels['setvarname'] = 'Ime spremenljivke:';
+$labels['setvarvalue'] = 'Vrednost spremenljivke:';
+$labels['setvarmodifiers'] = 'Modifikator:';
+$labels['varlower'] = 'majhne Ärke';
+$labels['varupper'] = 'velike Ärke';
+$labels['varlowerfirst'] = 'prvi znak velika zaÄetnica';
+$labels['varupperfirst'] = 'prvi znak velika zaÄetnica';
+$labels['varquotewildcard'] = 'citiraj posebne znake';
+$labels['varlength'] = 'dolžina';
+$labels['notify'] = 'Poštlji obvestilo';
+$labels['notifytarget'] = 'Cilj obvestila:';
+$labels['notifymessage'] = 'Besedilo obvestila (ni obvezno):';
+$labels['notifyoptions'] = 'Možnosti obvestila (ni obvezno):';
+$labels['notifyfrom'] = 'Pošiljatelj obvestila (ni obvezno):';
+$labels['notifyimportance'] = 'Pomembnost:';
+$labels['notifyimportancelow'] = 'nizko';
+$labels['notifyimportancenormal'] = 'obiÄajno';
+$labels['notifyimportancehigh'] = 'visoko';
+$labels['notifymethodmailto'] = 'E-Pošta';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Ustvari filter';
+$labels['usedata'] = 'Pri stvarjanju filtra uporabi naslednje podatke';
+$labels['nextstep'] = 'Naslednji korak';
+$labels['...'] = '...';
+$labels['string'] = 'Niz';
+$labels['currdate'] = 'Današnji datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'glava:';
+$labels['year'] = 'leto';
+$labels['month'] = 'mesec';
+$labels['day'] = 'dan';
+$labels['date'] = 'datum(yyyy-mm-dd)';
+$labels['julian'] = 'datum (julijanski)';
+$labels['hour'] = 'ura';
+$labels['minute'] = 'minuta';
+$labels['second'] = 'sekunda';
+$labels['time'] = 'Äas';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'Äasovni pas';
+$labels['weekday'] = 'dan v tednu (0-6)';
+$labels['advancedopts'] = 'Dodatne možnosti';
+$labels['body'] = 'Vsebina';
+$labels['address'] = 'naslov';
+$labels['envelope'] = 'ovojnica';
+$labels['modifier'] = 'modifikator';
+$labels['text'] = 'besedilo';
+$labels['undecoded'] = 'neobdelano';
+$labels['contenttype'] = 'tip vsebine';
+$labels['modtype'] = 'tip';
+$labels['allparts'] = 'vse';
+$labels['domain'] = 'domena';
+$labels['localpart'] = 'lokalni del';
+$labels['user'] = 'uporabnik';
+$labels['detail'] = 'podrobnosti';
+$labels['comparator'] = 'primerjalnik';
+$labels['default'] = 'privzeto';
+$labels['octet'] = 'strict (octet)';
+$labels['asciicasemap'] = 'ni obÄutljiv na velike/male Ärke (ascii-casemap)';
+$labels['asciinumeric'] = 'numeriÄno (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'obraten vrstni red';
+$labels['vacation'] = 'Odsotnost';
+$labels['vacation.reply'] = 'SporoÄilo za odgovor';
+$labels['vacation.advanced'] = 'Napredne nastavitve';
+$labels['vacation.from'] = 'Naslov za odgovor';
+$labels['vacation.subject'] = 'Zadeva';
+$labels['vacation.body'] = 'Vsebina';
+$labels['vacation.start'] = 'ZaÄetek odsotnosti';
+$labels['vacation.end'] = 'Konec odsotnosti';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'VkljuÄeno';
+$labels['vacation.off'] = 'IzkljuÄeno';
+$labels['vacation.addresses'] = 'Moji elektronski naslovi';
+$labels['vacation.interval'] = 'Interval za odgovor';
+$labels['vacation.after'] = 'Nastavi obvestilo o odsotnost po';
+$labels['vacation.saving'] = 'Shranjevanje podatkov...';
+$labels['vacation.action'] = 'Operacije za dohodna sporoÄila';
+$labels['vacation.keep'] = 'Ohrani';
+$labels['vacation.discard'] = 'Zavrži';
+$labels['vacation.redirect'] = 'Preusmeri na';
+$labels['vacation.copy'] = 'Pošlji kopijo na';
+$labels['filladdresses'] = 'Dopolni z mojimi naslovi';
+$labels['arialabelfiltersetactions'] = 'Nastavitve operacij filtrov';
+$labels['arialabelfilteractions'] = 'Operacije filtrov';
+$labels['arialabelfilterform'] = 'Lastnosti filtra';
+$labels['ariasummaryfilterslist'] = 'Seznam filtrov';
+$labels['ariasummaryfiltersetslist'] = 'Seznam filtrov';
+$labels['filterstitle'] = 'Uredi filtre za dohodno pošto';
+$labels['vacationtitle'] = 'Uredi sporoÄilo o odsotnosti';
+$labels['message'] = 'SporoÄilo';
+$labels['duplicate'] = 'je podvojen';
+$labels['notduplicate'] = 'ni podvojen';
+$labels['duplicate.handle'] = 'ukrep:';
+$labels['duplicate.header'] = 'glava sporoÄila:';
+$labels['duplicate.uniqueid'] = 'oznaÄevalnik:';
+$labels['duplicate.seconds'] = 'Äasovna omejitev (sekunde):';
+$labels['duplicate.last'] = 'relativno glede na zadnjo izvedbo';
+$messages['filterunknownerror'] = 'Prišlo je do neznane napake.';
+$messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoÄe vzpostaviti';
+$messages['filterdeleteerror'] = 'Pravila ni bilo mogoÄe izbrisati. PriÅ¡lo je do napake.';
+$messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.';
+$messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno';
+$messages['filtersaveerror'] = 'Pravila ni bilo mogoÄe shraniti. PriÅ¡lo je do napake.';
+$messages['filterformerror'] = 'Filter vsebuje napake.';
+$messages['filterdeleteconfirm'] = 'Ste prepriÄani, da želite izbrisati izbrano pravilo?';
+$messages['ruledeleteconfirm'] = 'Ste prepriÄani, da želite izbrisati izbrano pravilo?';
+$messages['actiondeleteconfirm'] = 'Ste prepriÄani, da želite izbrisati izbrano dejanje?';
+$messages['forbiddenchars'] = 'V polju so neveljavni znaki';
+$messages['cannotbeempty'] = 'Polje ne sme biti prazno';
+$messages['ruleexist'] = 'Filer s tem imenom že obstaja';
+$messages['setactivateerror'] = 'Izbranih filtrov ni bilo mogoÄe vkljuÄiti. PriÅ¡lo je do napake na strežniku.';
+$messages['setdeactivateerror'] = 'Izbranih filtrov ni bilo mogoÄe izkljuÄiti. PriÅ¡lo je do napake na strežniku.';
+$messages['setdeleteerror'] = 'Izbranih filtrov ni bilo mogoÄe izbrisati. PriÅ¡lo je do napake na strežniku.';
+$messages['setactivated'] = 'Filter je bil uspeÅ¡no vkljuÄen.';
+$messages['setdeactivated'] = 'Filter je bil uspeÅ¡no onemogoÄen.';
+$messages['setdeleted'] = 'Filter je bil uspešno izbrisan.';
+$messages['setupdated'] = 'Filtri so bili uspešno posodobljeni.';
+$messages['setdeleteconfirm'] = 'Ste prepriÄani, da želite izbrisati ta filter?';
+$messages['setcreateerror'] = 'Nabora filtrov ni bilo mogoÄe ustvariti. PriÅ¡lo je do napake na strežniku.';
+$messages['setcreated'] = 'Filter je bil uspešno ustvarjen.';
+$messages['activateerror'] = 'Izbranega/ih filtra/ov ni bilo mogoÄe vkljuÄiti. PriÅ¡lo je do napake na strežniku.';
+$messages['deactivateerror'] = 'Izbranega/ih fitra/ov ni bilo mogoÄe izkljuÄiti. PriÅ¡lo je do napake na strežniku.';
+$messages['deactivated'] = 'Filtri so bili uspeÅ¡no omogoÄeni.';
+$messages['activated'] = 'Filtri so bili uspeÅ¡no onemogoÄeni.';
+$messages['moved'] = 'Filter je bil uspešno premaknjen.';
+$messages['moveerror'] = 'Izbranega filtra ni bilo mogoÄe premakniti. PriÅ¡lo je do napake na strežniku.';
+$messages['nametoolong'] = 'Ime je predolgo.';
+$messages['namereserved'] = 'Rezervirano ime.';
+$messages['setexist'] = 'Nastavitev filtra že obstaja.';
+$messages['nodata'] = 'Izbrana mora biti vsaj ena nastavitev!';
+$messages['invaliddateformat'] = 'Neveljaven datum ali oblika zapisa datuma';
+$messages['saveerror'] = 'Podatkov ni bilo mogoÄe shraniti. PriÅ¡lo je do napake na strežniku.';
+$messages['vacationsaved'] = 'Podatki o odsotnosti so bili uspešno shranjeni.';
+$messages['emptyvacationbody'] = 'Zahtevana je vsebina sporoÄila o odsotnosti';
+$messages['duplicate.conflict.err'] = 'Tako glava sporoÄila kot enoliÄen oznaÄevalnik nista dovoljena.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,234 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filtra';
+$labels['managefilters'] = 'Administroni filtra për postë ardhëse';
+$labels['filtername'] = 'Emër filtri';
+$labels['newfilter'] = 'Filtër i ri';
+$labels['filteradd'] = 'Shtoni filtër';
+$labels['filterdel'] = 'Fshije filtrin';
+$labels['moveup'] = 'Ngjitu sipër';
+$labels['movedown'] = 'Ulu poshtë';
+$labels['filterallof'] = 'që ka përputhje me krejt rregullat vijues';
+$labels['filteranyof'] = 'që ka përputhje me cilindo nga rregullat vijues';
+$labels['filterany'] = 'të gjitha mesazhet';
+$labels['filtercontains'] = 'përmban';
+$labels['filternotcontains'] = 'nuk përmban';
+$labels['filteris'] = 'është baras me';
+$labels['filterisnot'] = 's’është baras me';
+$labels['filterexists'] = 'ekziston';
+$labels['filternotexists'] = 's’ekziston';
+$labels['filtermatches'] = 'ka përputhje me shprehjen';
+$labels['filternotmatches'] = 's’ka përputhje me shprehjen';
+$labels['filterregex'] = 'ka përputhje me shprehjen rregullt';
+$labels['filternotregex'] = 's’ka përputhje me shprehjen e rregullt';
+$labels['filterunder'] = 'nën';
+$labels['filterover'] = 'mbi';
+$labels['addrule'] = 'Shtoni rregull';
+$labels['delrule'] = 'Fshije rregullin';
+$labels['messagemoveto'] = 'Kaloje mesazhin te';
+$labels['messageredirect'] = 'Ridrejtoje mesazhin te';
+$labels['messagecopyto'] = 'Kopjoje mesazhin te';
+$labels['messagesendcopy'] = 'Dërgo kopje mesazhi te';
+$labels['messagereply'] = 'Përgjigju me mesazh';
+$labels['messagedelete'] = 'Fshije mesazhin';
+$labels['messagediscard'] = 'Hidhe tej mesazhin';
+$labels['messagekeep'] = 'Mbaje mesazhin te Të marrët';
+$labels['messagesrules'] = 'Për postë ardhëse:';
+$labels['messagesactions'] = '…përmbush veprimet vijuese:';
+$labels['add'] = 'Shtoje';
+$labels['del'] = 'Fshije';
+$labels['sender'] = 'Dërgues';
+$labels['recipient'] = 'Marrës';
+$labels['vacationaddr'] = 'Adresat e mia email:';
+$labels['vacationdays'] = 'Sa shpesh dërgon mesazhe (në ditë):';
+$labels['vacationinterval'] = 'Sa shpesh të dërgohen mesazhet:';
+$labels['vacationreason'] = 'Lëndë mesazhi (arsye për pushime):';
+$labels['vacationsubject'] = 'Subjekt mesazhi:';
+$labels['days'] = 'ditë';
+$labels['seconds'] = 'sekonda';
+$labels['rulestop'] = 'Ndale mbikëqyrjen e rregullave';
+$labels['enable'] = 'Aktivizoje/Çaktivizoje';
+$labels['filterset'] = 'Grup filtrash';
+$labels['filtersets'] = 'Grupe filtrash';
+$labels['filtersetadd'] = 'Shto grup filtrash';
+$labels['filtersetdel'] = 'Fshije grupin e tanishëm të filtrave';
+$labels['filtersetact'] = 'Aktivizo grupin e tanishëm të filtrave';
+$labels['filtersetdeact'] = 'Çaktivizo grupin e tanishëm të filtrave';
+$labels['filterseteditraw'] = 'Përpunoni grup filtrash';
+$labels['filterdef'] = 'Përkufizim filtri';
+$labels['filtersetname'] = 'Emër grupi filtrash';
+$labels['newfilterset'] = 'Grup i ri filtrash';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'asnjë';
+$labels['fromset'] = 'prej grupi';
+$labels['fromfile'] = 'prej skedari';
+$labels['filterdisabled'] = 'Filtër i çaktivizuar';
+$labels['countisgreaterthan'] = 'numri është më i madh se';
+$labels['countisgreaterthanequal'] = 'numri është më i madh ose baras me';
+$labels['countislessthan'] = 'numri është më i vogël se';
+$labels['countislessthanequal'] = 'numri është më i vogël ose baras me';
+$labels['countequals'] = 'numri është baras me';
+$labels['countnotequals'] = 'numri s’është baras me';
+$labels['valueisgreaterthan'] = 'vlera është më e madhe se';
+$labels['valueisgreaterthanequal'] = 'vlera është më e madh ose baras me';
+$labels['valueislessthan'] = 'vlera është më e vogël se';
+$labels['valueislessthanequal'] = 'vlera është më e vogël ose baras me';
+$labels['valueequals'] = 'vlera është baras me';
+$labels['valuenotequals'] = 'vlera s’është baras me';
+$labels['setflags'] = 'Caktoni shenja për mesazhin';
+$labels['addflags'] = 'Shtoni shenja te mesazhi';
+$labels['removeflags'] = 'Hiqni shenja prej mesazhit';
+$labels['flagread'] = 'I lexuar';
+$labels['flagdeleted'] = 'I fshirë';
+$labels['flaganswered'] = 'Me përgjigje';
+$labels['flagflagged'] = 'Me shenjë';
+$labels['flagdraft'] = 'Skicë';
+$labels['setvarname'] = 'Emër ndryshoreje:';
+$labels['setvarvalue'] = 'Vlerë ndryshoreje:';
+$labels['setvarmodifiers'] = 'Modifikues:';
+$labels['varlower'] = 'me të vogla';
+$labels['varupper'] = 'me të mëdha';
+$labels['varlowerfirst'] = 'Shenja e parë me të vogla';
+$labels['varupperfirst'] = 'shenja e parë me të mëdha';
+$labels['varlength'] = 'gjatësi';
+$labels['notify'] = 'Dërgo njoftim';
+$labels['notifytarget'] = 'Objektiv njoftimi:';
+$labels['notifymessage'] = 'Mesazh njoftimi (opsionale):';
+$labels['notifyoptions'] = 'Opsione njoftimi (opsionale):';
+$labels['notifyfrom'] = 'Dërgues njoftimi (opsionale):';
+$labels['notifyimportance'] = 'Rëndësi:';
+$labels['notifyimportancelow'] = 'e ulët';
+$labels['notifyimportancenormal'] = 'normale';
+$labels['notifyimportancehigh'] = 'e lartë';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Krijoje filtrin';
+$labels['usedata'] = 'Përdor të dhënat vijuese te filtri:';
+$labels['nextstep'] = 'Hapi Pasues';
+$labels['...'] = '…';
+$labels['string'] = 'Varg';
+$labels['currdate'] = 'Datë e tanishme';
+$labels['datetest'] = 'Datë';
+$labels['dateheader'] = 'krye:';
+$labels['year'] = 'vit';
+$labels['month'] = 'muaj';
+$labels['day'] = 'ditë';
+$labels['date'] = 'datë (yyyy-mm-dd)';
+$labels['julian'] = 'datë (sipas kalendarit julian)';
+$labels['hour'] = 'orë';
+$labels['minute'] = 'minutë';
+$labels['second'] = 'sekondë';
+$labels['time'] = 'kohë (hh:mm:ss)';
+$labels['iso8601'] = 'datë (ISO8601)';
+$labels['std11'] = 'datë (RFC2822)';
+$labels['zone'] = 'brez orar';
+$labels['weekday'] = 'ditë e javës (0-6)';
+$labels['advancedopts'] = 'Mundësi të mëtejshme';
+$labels['body'] = 'Lëndë';
+$labels['address'] = 'adresë';
+$labels['envelope'] = 'zarf';
+$labels['modifier'] = 'modifikues:';
+$labels['text'] = 'tekst';
+$labels['undecoded'] = 'i pakoduar (i papërpunuar)';
+$labels['contenttype'] = 'lloj lënde';
+$labels['modtype'] = 'lloj:';
+$labels['allparts'] = 'krejt';
+$labels['domain'] = 'përkatësi';
+$labels['user'] = 'përdorues';
+$labels['detail'] = 'hollësi';
+$labels['comparator'] = 'krahasues:';
+$labels['default'] = 'parazgjedhje';
+$labels['octet'] = 'strikt (tetëshe)';
+$labels['asciicasemap'] = 'i pavarur nga shkrimi me të mëdha apo të vogla (ascii-casemap)';
+$labels['asciinumeric'] = 'numerike (ascii-numeric)';
+$labels['index'] = 'tregues:';
+$labels['indexlast'] = 'mbrapsht';
+$labels['vacation'] = 'Pushime';
+$labels['vacation.reply'] = 'Mesazh përgjigjeje';
+$labels['vacation.advanced'] = 'Rregullime të mëtejshme';
+$labels['vacation.subject'] = 'Subjekt';
+$labels['vacation.body'] = 'Lëndë';
+$labels['vacation.start'] = 'Pushimet fillojnë';
+$labels['vacation.end'] = 'Pushimet mbarojnë';
+$labels['vacation.status'] = 'Gjendje';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'Adresat e mia email';
+$labels['vacation.interval'] = 'Interval përgjigjeje';
+$labels['vacation.after'] = 'Vendose rregullin për pushimet pas';
+$labels['vacation.saving'] = 'Po ruhen të dhënat…';
+$labels['vacation.action'] = 'Veprim për mesazh ardhës';
+$labels['vacation.keep'] = 'Mbaje';
+$labels['vacation.discard'] = 'Hidhe tej';
+$labels['vacation.redirect'] = 'Ridrejtoje te';
+$labels['vacation.copy'] = 'Dërgo kopje te';
+$labels['filladdresses'] = 'Plotësoje me krejt adresat e mia';
+$labels['arialabelfiltersetactions'] = 'Veprime grupi filtrash';
+$labels['arialabelfilteractions'] = 'Veprime filtri';
+$labels['arialabelfilterform'] = 'Veti filtri';
+$labels['ariasummaryfilterslist'] = 'Listë filtrash';
+$labels['ariasummaryfiltersetslist'] = 'Listë grupe filtrash';
+$labels['filterstitle'] = 'Përpunoni filtra për postë ardhëse';
+$labels['vacationtitle'] = 'Përpunoni rregullin jashtë-zyre';
+$labels['message'] = 'Mesazh';
+$labels['duplicate'] = 'është përsëdytje';
+$labels['notduplicate'] = 's’është përsëdytje';
+$labels['duplicate.header'] = 'krye:';
+$labels['duplicate.uniqueid'] = 'identifikues:';
+$labels['duplicate.seconds'] = 'mbarim kohe (sekonda):';
+$labels['duplicate.last'] = 'relative ndaj përmbushjes së fundit';
+$messages['filterunknownerror'] = 'Gabim i panjohur shërbyesi.';
+$messages['filterconnerror'] = 'S’arrihet të lidhet me shërbyesin.';
+$messages['filterdeleteerror'] = 'S’arrihet të fshihet filtri. Ndodhi gabim shërbyesi.';
+$messages['filterdeleted'] = 'Grupi u fshi me sukses.';
+$messages['filtersaved'] = 'Filtri u ruajt me sukses.';
+$messages['filtersaveerror'] = 'S’arrihet të ruhet filtri. Ndodhi një gabim shërbyesi.';
+$messages['filterformerror'] = 'Formulari i filtrit përmban gabime.';
+$messages['filterdeleteconfirm'] = 'Doni vërtet të fshihet filtri i përzgjedhur?';
+$messages['ruledeleteconfirm'] = 'Jeni i sigurt se doni të fshihet rregulli i përzgjedhur?';
+$messages['actiondeleteconfirm'] = 'Jeni i sigurt se doni të fshihet veprimi i përzgjedhur?';
+$messages['forbiddenchars'] = 'Shenja të ndaluara te fusha.';
+$messages['cannotbeempty'] = 'Fusha s’mund të jetë e zbrazët.';
+$messages['ruleexist'] = 'Ka tashmë një filtër me emrin e treguar.';
+$messages['setactivateerror'] = 'S’arrihet të aktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
+$messages['setdeactivateerror'] = 'S’arrihet të çaktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
+$messages['setdeleteerror'] = 'S’arrihet të fshihet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
+$messages['setactivated'] = 'Grupi i filtrave u aktivizua me sukses.';
+$messages['setdeactivated'] = 'Grupi i filtrave u çaktivizua me sukses.';
+$messages['setdeleted'] = 'Grupi i filtrave u fshi me sukses.';
+$messages['setupdated'] = 'Grupi i filtrave u përditësua me sukses.';
+$messages['setdeleteconfirm'] = 'Jeni i sigurt se doni të fshihet grupi i përzgjedhur i filtrave?';
+$messages['setcreateerror'] = 'S’arrihet të krijohet grup filtrash. Ndodhi gabim shërbyesi.';
+$messages['setcreated'] = 'Grupi i filtrave u krijua me sukses.';
+$messages['activateerror'] = 'S’arrihet të aktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
+$messages['deactivateerror'] = 'S’arrihet të çaktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
+$messages['deactivated'] = 'Filtri(at) u çaktivizua me sukses.';
+$messages['activated'] = 'Filtri(at) u aktivizua me sukses.';
+$messages['moved'] = 'Filtri u lëviz me sukses.';
+$messages['moveerror'] = 'S’arrihet të lëvizet filtri i përzgjedhur. Ndodhi një gabim shërbyesi.';
+$messages['nametoolong'] = 'Emër shumë i gjatë.';
+$messages['namereserved'] = 'Emër i rezervuar.';
+$messages['setexist'] = 'Ka tashmë një grup të tillë.';
+$messages['nodata'] = 'Duhet përzgjedhur të paktën një pozicion!';
+$messages['invaliddateformat'] = 'Format i pavlefshëm date ose pjese date';
+$messages['saveerror'] = 'S’arrihet të ruhen të dhëna. Ndodhi një gabim shërbyesi.';
+$messages['vacationsaved'] = 'Data e pushimeve u ruajt me sukses.';
+$messages['emptyvacationbody'] = 'Lënda e mesazhit të pushimeve është e domosdoshme!';
+$messages['duplicate.conflict.err'] = 'S’lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Филтери';
+$labels['managefilters'] = 'Управљај филтерима долазне поште';
+$labels['filtername'] = 'Ðазив филтера';
+$labels['newfilter'] = 'Ðови филтер';
+$labels['filteradd'] = 'Додај филтер';
+$labels['filterdel'] = 'Обриши филтер';
+$labels['moveup'] = 'Помери горе';
+$labels['movedown'] = 'Помери доле';
+$labels['filterallof'] = 'поклопи Ñва ова правила';
+$labels['filteranyof'] = 'поклопи било које од ових правила';
+$labels['filterany'] = 'Ñве поруке';
+$labels['filtercontains'] = 'Ñадржи';
+$labels['filternotcontains'] = 'не Ñадржи';
+$labels['filteris'] = 'је једнак';
+$labels['filterisnot'] = 'није једнак';
+$labels['filterexists'] = 'поÑтоји';
+$labels['filternotexists'] = 'не поÑтоји';
+$labels['filtermatches'] = 'поклапа израз';
+$labels['filternotmatches'] = 'не поклапа израз';
+$labels['filterregex'] = 'поклапа регуларни израз';
+$labels['filternotregex'] = 'не поклапа регуларни израз';
+$labels['filterunder'] = 'иÑпод';
+$labels['filterover'] = 'преко';
+$labels['addrule'] = 'Додај правило';
+$labels['delrule'] = 'Обриши правило';
+$labels['messagemoveto'] = 'ПремеÑти поруку у';
+$labels['messageredirect'] = 'ПреуÑмери поруку у';
+$labels['messagecopyto'] = 'Копирај поруку у';
+$labels['messagesendcopy'] = 'Пошаљи копију поруке за';
+$labels['messagereply'] = 'Одговори поруком';
+$labels['messagedelete'] = 'Обриши поруку';
+$labels['messagediscard'] = 'Одбаци поруком';
+$labels['messagekeep'] = 'Задржи поруку у примљеним';
+$labels['messagesrules'] = 'За долазну пошту:';
+$messages['filterunknownerror'] = 'Ðепозната грешка Ñервера.';
+$messages['filterconnerror'] = 'Ðе могу да Ñе повежем на Ñервер.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Filter';
+$labels['managefilters'] = 'Administrera filter';
+$labels['filtername'] = 'Filternamn';
+$labels['newfilter'] = 'Nytt filter';
+$labels['filteradd'] = 'Nytt filter';
+$labels['filterdel'] = 'Ta bort filter';
+$labels['moveup'] = 'Flytta upp filter';
+$labels['movedown'] = 'Flytta ner filter';
+$labels['filterallof'] = 'Filtrera på alla följande regler';
+$labels['filteranyof'] = 'Filtrera på någon av följande regler';
+$labels['filterany'] = 'Filtrera alla meddelanden';
+$labels['filtercontains'] = 'innehåller';
+$labels['filternotcontains'] = 'inte innehåller';
+$labels['filteris'] = 'är lika med';
+$labels['filterisnot'] = 'är inte lika med';
+$labels['filterexists'] = 'finns';
+$labels['filternotexists'] = 'inte finns';
+$labels['filtermatches'] = 'matchar uttryck';
+$labels['filternotmatches'] = 'inte matchar uttryck';
+$labels['filterregex'] = 'matchar reguljärt uttryck';
+$labels['filternotregex'] = 'inte matchar reguljärt uttryck';
+$labels['filterunder'] = 'under';
+$labels['filterover'] = 'över';
+$labels['addrule'] = 'Lägg till regel';
+$labels['delrule'] = 'Ta bort regel';
+$labels['messagemoveto'] = 'Flytta meddelande till';
+$labels['messageredirect'] = 'Ändra mottagare till';
+$labels['messagecopyto'] = 'Kopiera meddelande till';
+$labels['messagesendcopy'] = 'Skicka kopia av meddelande till';
+$labels['messagereply'] = 'Besvara meddelande';
+$labels['messagedelete'] = 'Ta bort meddelande';
+$labels['messagediscard'] = 'Avböj med felmeddelande';
+$labels['messagekeep'] = 'Behåll meddelande i Inkorg';
+$labels['messagesrules'] = 'För inkommande meddelande';
+$labels['messagesactions'] = 'Utför följande åtgärd';
+$labels['add'] = 'Lägg till';
+$labels['del'] = 'Ta bort';
+$labels['sender'] = 'Avsändare';
+$labels['recipient'] = 'Mottagare';
+$labels['vacationaddr'] = 'Mina mottagaradresser:';
+$labels['vacationdays'] = 'Antal dagar mellan auto-svar:';
+$labels['vacationinterval'] = 'Tid mellan auto-svar:';
+$labels['vacationreason'] = 'Meddelandetext (frånvaroanledning):';
+$labels['vacationfrom'] = 'Svarsadress:';
+$labels['vacationsubject'] = 'Meddelandeämne:';
+$labels['days'] = 'Dagar';
+$labels['seconds'] = 'Sekunder';
+$labels['rulestop'] = 'Avsluta filtrering';
+$labels['enable'] = 'Aktivera/avaktivera';
+$labels['filterset'] = 'Filtergrupp';
+$labels['filtersets'] = 'Filtergrupper';
+$labels['filtersetadd'] = 'Ny filtergrupp';
+$labels['filtersetdel'] = 'Ta bort filtergrupp';
+$labels['filtersetact'] = 'Aktivera filtergrupp';
+$labels['filtersetdeact'] = 'Avaktivera filtergrupp';
+$labels['filterseteditraw'] = 'Ändra filtergrupp';
+$labels['filterdef'] = 'Filterdefinition';
+$labels['filtersetname'] = 'Filtergruppsnamn';
+$labels['newfilterset'] = 'Ny filtergrupp';
+$labels['active'] = 'aktiv';
+$labels['none'] = 'ingen';
+$labels['fromset'] = 'från grupp';
+$labels['fromfile'] = 'från fil';
+$labels['filterdisabled'] = 'Filter avaktiverat';
+$labels['countisgreaterthan'] = 'antal är större än';
+$labels['countisgreaterthanequal'] = 'antal är större än eller lika med';
+$labels['countislessthan'] = 'antal är mindre än';
+$labels['countislessthanequal'] = 'antal är mindre än eller lika med';
+$labels['countequals'] = 'antal är lika med';
+$labels['countnotequals'] = 'antal är inte lika med';
+$labels['valueisgreaterthan'] = 'värde är större än';
+$labels['valueisgreaterthanequal'] = 'värde är större än eller lika med';
+$labels['valueislessthan'] = 'värde är mindre än';
+$labels['valueislessthanequal'] = 'värde är mindre än eller lika med';
+$labels['valueequals'] = 'värde är lika med';
+$labels['valuenotequals'] = 'värde är inte lika med';
+$labels['setflags'] = 'Flagga meddelande';
+$labels['addflags'] = 'Lägg till meddelandeflaggor';
+$labels['removeflags'] = 'Ta bort meddelandeflaggor';
+$labels['flagread'] = 'Läst';
+$labels['flagdeleted'] = 'Borttaget';
+$labels['flaganswered'] = 'Besvarat';
+$labels['flagflagged'] = 'Flaggat';
+$labels['flagdraft'] = 'Utkast';
+$labels['setvariable'] = 'Sätt variabel';
+$labels['setvarname'] = 'Variabelnamn:';
+$labels['setvarvalue'] = 'Variabelvärde:';
+$labels['setvarmodifiers'] = 'Modifierare:';
+$labels['varlower'] = 'Gemener';
+$labels['varupper'] = 'Versaler';
+$labels['varlowerfirst'] = 'Första tecken gement';
+$labels['varupperfirst'] = 'Första tecken versalt';
+$labels['varquotewildcard'] = 'Koda specialtecken';
+$labels['varlength'] = 'Längd';
+$labels['notify'] = 'Skicka avisering';
+$labels['notifytarget'] = 'Aviseringsmål:';
+$labels['notifymessage'] = 'Aviseringsmeddelande (valfritt):';
+$labels['notifyoptions'] = 'Aviseringstillval (valfritt):';
+$labels['notifyfrom'] = 'Aviseringsavsändare (valfri):';
+$labels['notifyimportance'] = 'Prioritet:';
+$labels['notifyimportancelow'] = 'LÃ¥g';
+$labels['notifyimportancenormal'] = 'Normal';
+$labels['notifyimportancehigh'] = 'Hög';
+$labels['notifymethodmailto'] = 'E-post';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Skapa filter';
+$labels['usedata'] = 'Använd följande information i filtret:';
+$labels['nextstep'] = 'Nästa steg';
+$labels['...'] = '...';
+$labels['string'] = 'Textsträng';
+$labels['currdate'] = 'Dagens datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'huvud:';
+$labels['year'] = 'Ã¥r';
+$labels['month'] = 'månad';
+$labels['day'] = 'dag';
+$labels['date'] = 'datum (åååå-mm-dd)';
+$labels['julian'] = 'datum (Julianskt)';
+$labels['hour'] = 'timme';
+$labels['minute'] = 'minut';
+$labels['second'] = 'sekund';
+$labels['time'] = 'tid (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO 8601)';
+$labels['std11'] = 'datum (RFC 2822)';
+$labels['zone'] = 'tidszon';
+$labels['weekday'] = 'veckodag (0-6)';
+$labels['advancedopts'] = 'Avancerade inställningar';
+$labels['body'] = 'Meddelandeinnehåll';
+$labels['address'] = 'adress';
+$labels['envelope'] = 'kuvert';
+$labels['modifier'] = 'modifierare:';
+$labels['text'] = 'text';
+$labels['undecoded'] = 'obearbetat (rå)';
+$labels['contenttype'] = 'innehållstyp';
+$labels['modtype'] = 'typ:';
+$labels['allparts'] = 'allt';
+$labels['domain'] = 'domän';
+$labels['localpart'] = 'lokal del';
+$labels['user'] = 'användare';
+$labels['detail'] = 'detalj';
+$labels['comparator'] = 'jämförelse:';
+$labels['default'] = 'standard';
+$labels['octet'] = 'strikt (oktalt)';
+$labels['asciicasemap'] = 'teckenlägesokänslig (ascii-casemap)';
+$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'omvänd';
+$labels['vacation'] = 'Frånvaro';
+$labels['vacation.reply'] = 'Besvara meddelande';
+$labels['vacation.advanced'] = 'Avancerade inställningar';
+$labels['vacation.from'] = 'Svarsadress';
+$labels['vacation.subject'] = 'Ämne';
+$labels['vacation.body'] = 'Innehåll';
+$labels['vacation.start'] = 'Frånvaron börjar';
+$labels['vacation.end'] = 'Frånvaron slutar';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'PÃ¥';
+$labels['vacation.off'] = 'Av';
+$labels['vacation.addresses'] = 'Mina mottagaradresser';
+$labels['vacation.interval'] = 'Svarsintervall';
+$labels['vacation.after'] = 'Placera frånvaroregel efter';
+$labels['vacation.saving'] = 'Sparar data...';
+$labels['vacation.action'] = 'Hantering av inkommande meddelanden';
+$labels['vacation.keep'] = 'Behåll';
+$labels['vacation.discard'] = 'Förkasta';
+$labels['vacation.redirect'] = 'Ändra mottagare till';
+$labels['vacation.copy'] = 'Skicka kopia till';
+$labels['filladdresses'] = 'Fyll i alla mina mottagaradresser';
+$labels['arialabelfiltersetactions'] = 'Hantera filtergrupper';
+$labels['arialabelfilteractions'] = 'Hantera filter';
+$labels['arialabelfilterform'] = 'Filteregenskaper';
+$labels['ariasummaryfilterslist'] = 'Lista med filter';
+$labels['ariasummaryfiltersetslist'] = 'Lista med filtergrupper';
+$labels['filterstitle'] = 'Ändra filter för inkommande meddelanden';
+$labels['vacationtitle'] = 'Ändra regel för frånvaromeddelande';
+$labels['message'] = 'Meddelande';
+$labels['duplicate'] = 'är duplikat';
+$labels['notduplicate'] = 'är inte duplikat';
+$labels['duplicate.handle'] = 'hantera:';
+$labels['duplicate.header'] = 'huvud:';
+$labels['duplicate.uniqueid'] = 'identifikation:';
+$labels['duplicate.seconds'] = 'vänta (sekunder):';
+$labels['duplicate.last'] = 'i förhållande till senaste körningen';
+$messages['filterunknownerror'] = 'Okänt serverfel';
+$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades';
+$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel';
+$messages['filterdeleted'] = 'Filtret är borttaget';
+$messages['filtersaved'] = 'Filtret har sparats';
+$messages['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel';
+$messages['filterformerror'] = 'Filterformuläret innehåller fel.';
+$messages['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?';
+$messages['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?';
+$messages['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?';
+$messages['forbiddenchars'] = 'Otillåtet tecken i fältet';
+$messages['cannotbeempty'] = 'Fältet kan inte lämnas tomt';
+$messages['ruleexist'] = 'Ett filter med angivet namn finns redan.';
+$messages['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av serverfel';
+$messages['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel';
+$messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel';
+$messages['setactivated'] = 'Filtergruppen är aktiverad';
+$messages['setdeactivated'] = 'Filtergruppen är avaktiverad';
+$messages['setdeleted'] = 'Filtergruppen är borttagen';
+$messages['setupdated'] = 'Filtergruppen är ändrad';
+$messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?';
+$messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel';
+$messages['setcreated'] = 'Filtergruppen har lagts till';
+$messages['activateerror'] = 'Kunde inte aktivera filter på grund av serverfel.';
+$messages['deactivateerror'] = 'Kunde inte avaktivera filter på grund av serverfel.';
+$messages['deactivated'] = 'Filter aktiverat.';
+$messages['activated'] = 'Filter avaktiverat.';
+$messages['moved'] = 'Filter flyttat.';
+$messages['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.';
+$messages['nametoolong'] = 'För långt namn.';
+$messages['namereserved'] = 'Reserverat namn.';
+$messages['setexist'] = 'Filtergrupp finns redan.';
+$messages['nodata'] = 'Minst en position måste väljas!';
+$messages['invaliddateformat'] = 'Ogiltigt datum eller del av datumformat';
+$messages['saveerror'] = 'Datan kunde inte sparas på grund av serverfel.';
+$messages['vacationsaved'] = 'Frånvarodatan har sparats.';
+$messages['emptyvacationbody'] = 'Text för frånvaromeddelande saknas!';
+$messages['duplicate.conflict.err'] = 'Både huvud och unik identifikation är inte tillåtet.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'ตัวà¸à¸£à¸­à¸‡à¸‚้อมูล';
+$labels['filtername'] = 'ชื่อตัวà¸à¸£à¸­à¸‡à¸‚้อมูล';
+$labels['newfilter'] = 'สร้างตัวà¸à¸£à¸­à¸‡à¸‚้อมูลใหม่';
+$labels['filteradd'] = 'เพิ่มตัวà¸à¸£à¸­à¸‡à¸‚้อมูล';
+$labels['filterdel'] = 'ลบตัวà¸à¸£à¸­à¸‡à¸‚้อมูล';
+$labels['moveup'] = 'เลื่อนขึ้น';
+$labels['movedown'] = 'เลื่อนลง';
+$labels['filterany'] = 'ข้อความทั้งหมด';
+$labels['filtercontains'] = 'ที่มีคำว่า';
+$labels['filternotcontains'] = 'ไม่มีคำว่า';
+$labels['filteris'] = 'ที่มีค่าเท่าà¸à¸±à¸š';
+$labels['filterisnot'] = 'ที่มีค่าไม่เท่าà¸à¸±à¸š';
+$labels['addrule'] = 'เพิ่มà¸à¸';
+$labels['delrule'] = 'ลบà¸à¸';
+$labels['messagemoveto'] = 'ย้ายข้อความไปที่';
+$labels['messageredirect'] = 'เปลียนเส้นทางข้อความไปที่';
+$labels['messagecopyto'] = 'คัดลอà¸à¸‚้อความไปที่';
+$labels['messagesendcopy'] = 'ส่งข้อความคัดลอà¸à¹„ปที่';
+$labels['messagedelete'] = 'ลบข้อความ';
+$labels['messagediscard'] = 'ยà¸à¹€à¸¥à¸´à¸à¸‚้อความ';
+$labels['messagesrules'] = 'สำหรับอีเมลขาเข้า:';
+$labels['add'] = 'เพิ่ม';
+$labels['del'] = 'ลบ';
+$labels['sender'] = 'ผู้ส่ง';
+$labels['recipient'] = 'ผู้รับ';
+$labels['vacationsubject'] = 'หัวเรื่องข้อความ:';
+$labels['enable'] = 'เปิดใช้งาน/ปิดใช้งาน';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Süzgeçler';
+$labels['managefilters'] = 'Gelen e-posta süzgeçleri yönetimi';
+$labels['filtername'] = 'Süzgeç adı';
+$labels['newfilter'] = 'Yeni süzgeç';
+$labels['filteradd'] = 'Süzgeç ekle';
+$labels['filterdel'] = 'Süzgeci Sil';
+$labels['moveup'] = 'Yukarı taşı';
+$labels['movedown'] = 'Aşağı taşı';
+$labels['filterallof'] = 'Aşağıdaki kuralların hepsine uyan';
+$labels['filteranyof'] = 'Aşağıdaki kuralların herhangi birine uyan';
+$labels['filterany'] = 'Tüm iletiler';
+$labels['filtercontains'] = 'içeren';
+$labels['filternotcontains'] = 'içermeyen';
+$labels['filteris'] = 'eÅŸittir';
+$labels['filterisnot'] = 'eÅŸit deÄŸil';
+$labels['filterexists'] = 'var';
+$labels['filternotexists'] = 'yok';
+$labels['filtermatches'] = 'ifadeye uyan';
+$labels['filternotmatches'] = 'ifadeye uymayan';
+$labels['filterregex'] = 'kurallı ifadeye uyan';
+$labels['filternotregex'] = 'kurallı ifadeye uymayan';
+$labels['filterunder'] = 'altında';
+$labels['filterover'] = 'üzerinde';
+$labels['addrule'] = 'Kural ekle';
+$labels['delrule'] = 'Kuralı sil';
+$labels['messagemoveto'] = 'İletiyi şuraya taşı';
+$labels['messageredirect'] = 'İletiyi şuraya yönlendir';
+$labels['messagecopyto'] = 'Ä°letiyi ÅŸuraya kopyala';
+$labels['messagesendcopy'] = 'İletinin kopyasını şuraya gönder';
+$labels['messagereply'] = 'İletiyle birlikte yanıtla';
+$labels['messagedelete'] = 'Ä°letiyi sil';
+$labels['messagediscard'] = 'Ä°letiyi yoksay';
+$labels['messagekeep'] = 'Ä°letiyi Gelen Kutusunda tut';
+$labels['messagesrules'] = 'Gelen iletiler için:';
+$labels['messagesactions'] = '...aşağıdaki işlemleri yürüt:';
+$labels['add'] = 'Ekle';
+$labels['del'] = 'Sil';
+$labels['sender'] = 'Gönderici';
+$labels['recipient'] = 'Alıcı';
+$labels['vacationaddr'] = 'E-Posta adreslerim:';
+$labels['vacationdays'] = 'İleti gönderme sıklığı (gün):';
+$labels['vacationinterval'] = 'İleti gönderme sıklığı:';
+$labels['vacationreason'] = 'İleti gövdesi (tatil nedeni):';
+$labels['vacationfrom'] = 'Yanıt Adresi:';
+$labels['vacationsubject'] = 'Ä°leti konusu:';
+$labels['days'] = 'günler';
+$labels['seconds'] = 'saniye';
+$labels['rulestop'] = 'Kuralları değerlendirmeyi bitir';
+$labels['enable'] = 'Etkinleştir/Devre Dışı Bırak';
+$labels['filterset'] = 'Süzgeç kümesi';
+$labels['filtersets'] = 'Süzgeç kümeleri';
+$labels['filtersetadd'] = 'Süzgeç kümesi ekle';
+$labels['filtersetdel'] = 'Geçerli süzgeç kümesini sil';
+$labels['filtersetact'] = 'Geçerli süzgeç kümesini etkinleştir';
+$labels['filtersetdeact'] = 'Geçerli süzgeç kümesini devre dışı bırak';
+$labels['filterseteditraw'] = 'Süzgeç kümesini düzenle';
+$labels['filterdef'] = 'Süzgeç tanımı';
+$labels['filtersetname'] = 'Süzgeç kümesi adı';
+$labels['newfilterset'] = 'Yeni süzgeç kümesi ';
+$labels['active'] = 'etkin';
+$labels['none'] = 'hiçbiri';
+$labels['fromset'] = 'gönderi seti';
+$labels['fromfile'] = 'gönderici dosya';
+$labels['filterdisabled'] = 'Süzgeç devre dışı';
+$labels['countisgreaterthan'] = 'toplamı büyük';
+$labels['countisgreaterthanequal'] = 'toplamı büyük ya da eşit';
+$labels['countislessthan'] = 'toplamı az';
+$labels['countislessthanequal'] = 'toplamı küçük ya da eşit';
+$labels['countequals'] = 'toplamı eşit';
+$labels['countnotequals'] = 'sayısı şuna eşit olmayan';
+$labels['valueisgreaterthan'] = 'değeri büyük';
+$labels['valueisgreaterthanequal'] = 'değeri büyük ya da eşit';
+$labels['valueislessthan'] = 'deÄŸer az';
+$labels['valueislessthanequal'] = 'değer küçük ya da  eşit';
+$labels['valueequals'] = 'deÄŸer eÅŸit';
+$labels['valuenotequals'] = 'deÄŸeri ÅŸuna eÅŸit olmayan';
+$labels['setflags'] = 'Ä°letiyi iÅŸaretle';
+$labels['addflags'] = 'Ä°letiye iÅŸaret ekle';
+$labels['removeflags'] = 'İleti işaretlerini kaldır';
+$labels['flagread'] = 'Oku';
+$labels['flagdeleted'] = 'Silindi';
+$labels['flaganswered'] = 'Yanıtlanmış';
+$labels['flagflagged'] = 'Ä°ÅŸaretli';
+$labels['flagdraft'] = 'Taslak';
+$labels['setvariable'] = 'Değişken tanımla';
+$labels['setvarname'] = 'Değişken adı:';
+$labels['setvarvalue'] = 'DeÄŸiÅŸken deÄŸeri:';
+$labels['setvarmodifiers'] = 'Alanlar:';
+$labels['varlower'] = 'küçük harf';
+$labels['varupper'] = 'büyük harf';
+$labels['varlowerfirst'] = 'İlk karakter küçük harf';
+$labels['varupperfirst'] = 'İlk karakter büyük harf';
+$labels['varquotewildcard'] = 'özel karakterleri tırnak içine al';
+$labels['varlength'] = 'uzunluk';
+$labels['notify'] = 'Bildirim gönder';
+$labels['notifytarget'] = 'Bildirim hedefi:';
+$labels['notifymessage'] = 'Bildirim iletisi (isteğe bağlı):';
+$labels['notifyoptions'] = 'Bildirim ayarları (isteğe bağlı):';
+$labels['notifyfrom'] = 'Bildirim göndericisi (isteğebağlı):';
+$labels['notifyimportance'] = 'Önem derecesi:';
+$labels['notifyimportancelow'] = 'düşük';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'yüksek';
+$labels['notifymethodmailto'] = 'E-posta';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Süzgeç oluştur';
+$labels['usedata'] = 'Süzgeçte şu veriler kullanılsın:';
+$labels['nextstep'] = 'Sonraki Adım';
+$labels['...'] = '...';
+$labels['string'] = 'Dizge';
+$labels['currdate'] = 'Geçerli tarih';
+$labels['datetest'] = 'Tarih';
+$labels['dateheader'] = 'başlık:';
+$labels['year'] = 'yıl';
+$labels['month'] = 'ay';
+$labels['day'] = 'gün';
+$labels['date'] = 'tarih (yyyy-aa-gg)';
+$labels['julian'] = 'tarih (julian)';
+$labels['hour'] = 'saat';
+$labels['minute'] = 'dakika';
+$labels['second'] = 'saniye';
+$labels['time'] = 'saat (ss:dd:ss)';
+$labels['iso8601'] = 'tarih (ISO8601)';
+$labels['std11'] = 'tarih (RFC2822)';
+$labels['zone'] = 'saat-dilimi';
+$labels['weekday'] = 'haftanın günleri (0-6)';
+$labels['advancedopts'] = 'GeliÅŸmiÅŸ ayarlar';
+$labels['body'] = 'Metin';
+$labels['address'] = 'adres';
+$labels['envelope'] = 'zarf';
+$labels['modifier'] = 'alan:';
+$labels['text'] = 'metin';
+$labels['undecoded'] = 'kodu çözülmemiş (ham)';
+$labels['contenttype'] = 'içerik türü';
+$labels['modtype'] = 'tür:';
+$labels['allparts'] = 'tümü';
+$labels['domain'] = 'alan adı';
+$labels['localpart'] = 'yerel parça';
+$labels['user'] = 'kullanıcı';
+$labels['detail'] = 'ayrıntı';
+$labels['comparator'] = 'karşılaştırıcı:';
+$labels['default'] = 'varsayılan';
+$labels['octet'] = 'sıkı (sekizli)';
+$labels['asciicasemap'] = 'büyük küçük harfe duyarsız (ascii-casemap)';
+$labels['asciinumeric'] = 'sayı (ascii-numeric)';
+$labels['index'] = 'Dizin:';
+$labels['indexlast'] = 'geriye yönelik';
+$labels['vacation'] = 'Tatil';
+$labels['vacation.reply'] = 'İletiyi yanıtla';
+$labels['vacation.advanced'] = 'GeliÅŸmiÅŸ ayarlar';
+$labels['vacation.from'] = 'Yanıt Adresi';
+$labels['vacation.subject'] = 'Konu';
+$labels['vacation.body'] = 'Metin';
+$labels['vacation.start'] = 'Tatil başlangıcı';
+$labels['vacation.end'] = 'Tatil bitiÅŸi';
+$labels['vacation.status'] = 'Durum';
+$labels['vacation.on'] = 'Etkin';
+$labels['vacation.off'] = 'Devre dışı';
+$labels['vacation.addresses'] = 'E-Posta adreslerim';
+$labels['vacation.interval'] = 'Yanıt aralığı';
+$labels['vacation.after'] = 'Şundan sonra tatil kuralı koy';
+$labels['vacation.saving'] = 'Veriler kaydediliyor...';
+$labels['vacation.action'] = 'Gelen ileti iÅŸlemi';
+$labels['vacation.keep'] = 'Koru';
+$labels['vacation.discard'] = 'Yoksay';
+$labels['vacation.redirect'] = 'Şuraya yönlendir';
+$labels['vacation.copy'] = 'Şuraya kopya gönder';
+$labels['filladdresses'] = 'Benim adreslerimle doldur';
+$labels['arialabelfiltersetactions'] = 'Süzgeç kümesi işlemleri';
+$labels['arialabelfilteractions'] = 'Süzgeç işlemleri';
+$labels['arialabelfilterform'] = 'Süzgeç özellikleri';
+$labels['ariasummaryfilterslist'] = 'Süzgeç listesi';
+$labels['ariasummaryfiltersetslist'] = 'Süzgeç kümesi listesi';
+$labels['filterstitle'] = 'Gelen e-posta süzgeçlerini düzenle';
+$labels['vacationtitle'] = 'Ofis dışında kuralını düzenle';
+$labels['message'] = 'Ä°leti';
+$labels['duplicate'] = 'yinelenen';
+$labels['notduplicate'] = 'yinelenmeyen';
+$labels['duplicate.handle'] = 'iÅŸle:';
+$labels['duplicate.header'] = 'başlık:';
+$labels['duplicate.uniqueid'] = 'Tanımı:';
+$labels['duplicate.seconds'] = 'Zaman aşımı (saniye):';
+$labels['duplicate.last'] = 'son yapılanlara göre';
+$messages['filterunknownerror'] = 'Bilinmeyen sunucu sorunu.';
+$messages['filterconnerror'] = 'Sunucuya bağlanılamıyor.';
+$messages['filterdeleteerror'] = 'Süzgeç silinemedi. Sunucuda bir sorun çıktı.';
+$messages['filterdeleted'] = 'Süzgeç silindi.';
+$messages['filtersaved'] = 'Süzgeç kaydedildi.';
+$messages['filtersaveerror'] = 'Süzgeç kaydedilemedi. Sunucuda bir sorun çıktı.';
+$messages['filterformerror'] = 'Süzgeç formunda sorunlar var.';
+$messages['filterdeleteconfirm'] = 'Seçilmiş süzgeçleri silmek istediğinize emin misiniz?';
+$messages['ruledeleteconfirm'] = 'Seçilmiş kuralları silmek istediğinize emin misiniz?';
+$messages['actiondeleteconfirm'] = 'Seçilmiş işlemleri silmek istediğinize emin misiniz?';
+$messages['forbiddenchars'] = 'Alanda izin verilmeyen karakterler var.';
+$messages['cannotbeempty'] = 'Alan boÅŸ olamaz';
+$messages['ruleexist'] = 'Aynı adlı bir süzgeç zaten var.';
+$messages['setactivateerror'] = 'Seçilmiş süzgeç kümesi etkinleştirilemedi. Sunucuda bir sorun çıktı.';
+$messages['setdeactivateerror'] = 'Seçilmiş süzgeç kümesi devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
+$messages['setdeleteerror'] = 'Seçilmiş süzgeç kümeleri silinemedi. Sunucuda bir sorun çıktı.';
+$messages['setactivated'] = 'Süzgeç kümesi etkinleştirildi.';
+$messages['setdeactivated'] = 'Süzgeç kümesi devre dışı bırakıldı.';
+$messages['setdeleted'] = 'Süzgeç kümesi silindi.';
+$messages['setupdated'] = 'Süzgeç kümesi güncellendi.';
+$messages['setdeleteconfirm'] = 'Seçilmiş süzgeç kümelerini silmek istediğinize emin misiniz?';
+$messages['setcreateerror'] = 'Süzgeç kümeleri oluşturulamadı. Sunucuda bir sorun çıktı.';
+$messages['setcreated'] = 'Süzgeç kümesi oluşturuldu.';
+$messages['activateerror'] = 'Seçilmiş süzgeç(ler) etkinleştirilemedi. Sunucuda bir sorun çıktı.';
+$messages['deactivateerror'] = 'Seçilmiş süzgeç(ler) devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
+$messages['deactivated'] = 'Süzgeç(ler) devre dışı bırakıldı.';
+$messages['activated'] = 'Süzgeç(ler) etkinleştirildi.';
+$messages['moved'] = 'Süzgeç taşındı.';
+$messages['moveerror'] = 'Seçilmiş süzgeç taşınamadı. Sunucuda bir sorun çıktı.';
+$messages['nametoolong'] = 'Ad çok uzun.';
+$messages['namereserved'] = 'Bu ad ayırtılmış.';
+$messages['setexist'] = 'Küme zaten var.';
+$messages['nodata'] = 'En az bir konum seçilmelidir!';
+$messages['invaliddateformat'] = 'Tarih ya da tarih biçimi geçersiz';
+$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda bir sorun çıktı.';
+$messages['vacationsaved'] = 'Tatil verisi kaydedildi.';
+$messages['emptyvacationbody'] = 'Tatil iletisi metnini yazmalısınız!';
+$messages['duplicate.conflict.err'] = 'Üst bilgi ve tekil belirteç aynı anda kullanılamaz.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/tzl.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Strecureirs';
+$labels['del'] = 'Zeletarh';
+$labels['days'] = 'ziuas';
+$labels['seconds'] = 'secunds';
+$labels['active'] = 'actíu';
+$labels['notifymethodmailto'] = 'Telepost';
+$labels['...'] = '...';
+$labels['datetest'] = 'Däts';
+$labels['year'] = 'ar';
+$labels['month'] = 'mes';
+$labels['day'] = 'ziua';
+$labels['date'] = 'däts (aaaa-mm-zz)';
+$labels['hour'] = 'þora';
+$labels['minute'] = 'míut';
+$labels['second'] = 'secund';
+$labels['iso8601'] = 'däts (ISO8601)';
+$labels['std11'] = 'däts (RFC2822)';
+$labels['text'] = 'text';
+$labels['domain'] = 'bain';
+$labels['user'] = 'uçeir';
+$labels['vacation.subject'] = 'Subxhect';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,238 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Фільтри';
+$labels['managefilters'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ð¼Ð¸ вхідної пошти';
+$labels['filtername'] = 'Ðазва фільтру';
+$labels['newfilter'] = 'Ðовий фільтр';
+$labels['filteradd'] = 'Додати фільтр';
+$labels['filterdel'] = 'Вилучити фільтр';
+$labels['moveup'] = 'ПереÑунути вгору';
+$labels['movedown'] = 'ПереÑунути вниз';
+$labels['filterallof'] = 'задовольнÑÑ” уÑÑ– наÑтупні умови';
+$labels['filteranyof'] = 'задовольнÑÑ” будь-Ñку з умов';
+$labels['filterany'] = 'вÑÑ– повідомленнÑ';
+$labels['filtercontains'] = 'міÑтить';
+$labels['filternotcontains'] = 'не міÑтить';
+$labels['filteris'] = 'ідентичний до';
+$labels['filterisnot'] = 'не ідентичний до';
+$labels['filterexists'] = 'Ñ–Ñнує';
+$labels['filternotexists'] = 'не Ñ–Ñнує';
+$labels['filtermatches'] = 'відповідає виразу';
+$labels['filternotmatches'] = 'не відповідає виразу';
+$labels['filterregex'] = 'відповідає регулÑрному виразу';
+$labels['filternotregex'] = 'не відповідає регулÑрному виразу';
+$labels['filterunder'] = 'менше, ніж';
+$labels['filterover'] = 'більше, ніж';
+$labels['addrule'] = 'Додати правило';
+$labels['delrule'] = 'Видалити правило';
+$labels['messagemoveto'] = 'ПереÑунути Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾';
+$labels['messageredirect'] = 'Перенаправити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾';
+$labels['messagecopyto'] = 'Копіювати лиÑта до';
+$labels['messagesendcopy'] = 'ÐадÑилати копію лиÑта на';
+$labels['messagereply'] = 'Ðвтовідповідач';
+$labels['messagedelete'] = 'Видалити повідомленнÑ';
+$labels['messagediscard'] = 'Відхилити з повідомленнÑм';
+$labels['messagekeep'] = 'Залишити лиÑÑ‚ у Вхідних';
+$labels['messagesrules'] = 'Ð”Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— пошти: ';
+$labels['messagesactions'] = '... виконати такі дії: ';
+$labels['add'] = 'Додати';
+$labels['del'] = 'Видалити';
+$labels['sender'] = 'Відправник';
+$labels['recipient'] = 'Отримувач';
+$labels['vacationaddr'] = 'Мої електронні адреÑи:';
+$labels['vacationdays'] = 'Як чаÑто повторювати (у днÑÑ…):';
+$labels['vacationinterval'] = 'Як чаÑто надÑилати повідомленнÑ: ';
+$labels['vacationreason'] = 'ТекÑÑ‚ повідомленнÑ:';
+$labels['vacationfrom'] = 'ÐдреÑа відправника відповіді:';
+$labels['vacationsubject'] = 'Тема лиÑта:';
+$labels['days'] = 'дні(в)';
+$labels['seconds'] = 'Ñекунд';
+$labels['rulestop'] = 'Зупинити перевірку правил';
+$labels['enable'] = 'Увімкнути/Вимкнути';
+$labels['filterset'] = 'Ðабір фільтрів';
+$labels['filtersets'] = 'Ðабори фільтрів';
+$labels['filtersetadd'] = 'Додати набір фільтрів';
+$labels['filtersetdel'] = 'Видалити поточний набір фільтрів';
+$labels['filtersetact'] = 'Ðктивувати поточний набір фільтрів';
+$labels['filtersetdeact'] = 'Деактивувати поточний набір фільтрів';
+$labels['filterdef'] = 'Параметри фільтру';
+$labels['filtersetname'] = 'Ðазва набору фільтрів';
+$labels['newfilterset'] = 'Ðовий набір фільтрів';
+$labels['active'] = 'активний';
+$labels['none'] = 'нічого';
+$labels['fromset'] = 'з набору';
+$labels['fromfile'] = 'з файлу';
+$labels['filterdisabled'] = 'Фільтр вимкнено';
+$labels['countisgreaterthan'] = 'лічильник більший за';
+$labels['countisgreaterthanequal'] = 'лічильник більший або рівний ';
+$labels['countislessthan'] = 'лічильник менший';
+$labels['countislessthanequal'] = 'льчильник менший або рівний';
+$labels['countequals'] = 'лічильник рівний';
+$labels['countnotequals'] = 'лічильник рівний';
+$labels['valueisgreaterthan'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ за';
+$labels['valueisgreaterthanequal'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ або рівне';
+$labels['valueislessthan'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼ÐµÐ½ÑˆÐµ за';
+$labels['valueislessthanequal'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼ÐµÐ½ÑˆÐµ або рівне';
+$labels['valueequals'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ñ–Ð²Ð½Ðµ';
+$labels['valuenotequals'] = 'Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ рівне';
+$labels['setflags'] = 'Позначити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñми';
+$labels['addflags'] = 'Додати прапорці до Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ';
+$labels['removeflags'] = 'Вилучити прапорці з Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ';
+$labels['flagread'] = 'Прочитано';
+$labels['flagdeleted'] = 'Вилучено';
+$labels['flaganswered'] = 'З відповіддю';
+$labels['flagflagged'] = 'Позначено';
+$labels['flagdraft'] = 'Чернетка';
+$labels['setvariable'] = 'Ð’Ñтановити змінну';
+$labels['setvarname'] = 'Ðазва змінної:';
+$labels['setvarvalue'] = 'Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—:';
+$labels['setvarmodifiers'] = 'Модифікатори:';
+$labels['varlower'] = 'нижній регіÑÑ‚Ñ€';
+$labels['varupper'] = 'верхній регіÑÑ‚Ñ€';
+$labels['varlowerfirst'] = 'перший Ñимвол у нижньому регіÑтрі';
+$labels['varupperfirst'] = 'перший Ñимвол у верхньому регіÑтрі';
+$labels['varquotewildcard'] = 'цитувати Ñпеціальні Ñимволи';
+$labels['varlength'] = 'довжина';
+$labels['notify'] = 'ÐадÑилати ÑповіщеннÑ';
+$labels['notifytarget'] = 'Ціль ÑповіщеннÑ: ';
+$labels['notifymessage'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ (необов\'Ñзково): ';
+$labels['notifyoptions'] = 'Опції ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ (необов\'Ñзково): ';
+$labels['notifyfrom'] = 'Відправник ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ (необов\'Ñзково): ';
+$labels['notifyimportance'] = 'ВажливіÑÑ‚ÑŒ: ';
+$labels['notifyimportancelow'] = 'низька';
+$labels['notifyimportancenormal'] = 'звичайна';
+$labels['notifyimportancehigh'] = 'виÑока';
+$labels['notifymethodmailto'] = 'Електронна адреÑа';
+$labels['notifymethodtel'] = 'Телефон';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = 'Створити фільтр';
+$labels['usedata'] = 'ВикориÑтати у фільтрі такі дані: ';
+$labels['nextstep'] = 'ÐаÑтупний крок';
+$labels['...'] = '...';
+$labels['string'] = 'РÑдок';
+$labels['currdate'] = 'Поточна дата';
+$labels['datetest'] = 'Дата';
+$labels['dateheader'] = 'шапка:';
+$labels['year'] = 'рік';
+$labels['month'] = 'міÑÑць';
+$labels['day'] = 'день';
+$labels['date'] = 'дата (рррр-мм-дд)';
+$labels['julian'] = 'дата (юліанÑький календар)';
+$labels['hour'] = 'година';
+$labels['minute'] = 'хвилина';
+$labels['second'] = 'Ñекунда';
+$labels['time'] = 'Ñ‡Ð°Ñ (гг:Ñ…Ñ…:ÑÑ)';
+$labels['iso8601'] = 'дата (ISO8601)';
+$labels['std11'] = 'дата (RFC2822)';
+$labels['zone'] = 'чаÑовий поÑÑ';
+$labels['weekday'] = 'робочий день (0-6)';
+$labels['advancedopts'] = 'Розширені параметри';
+$labels['body'] = 'Тіло';
+$labels['address'] = 'адреÑа';
+$labels['envelope'] = 'конверт';
+$labels['modifier'] = 'модифікатор: ';
+$labels['text'] = 'текÑÑ‚';
+$labels['undecoded'] = 'недекодований (Ñирий)';
+$labels['contenttype'] = 'тип вміÑту';
+$labels['modtype'] = 'тип:';
+$labels['allparts'] = 'вÑе';
+$labels['domain'] = 'домен';
+$labels['localpart'] = 'локальна чаÑтина';
+$labels['user'] = 'кориÑтувач';
+$labels['detail'] = 'деталь';
+$labels['comparator'] = 'компаратор:';
+$labels['default'] = 'типово';
+$labels['octet'] = 'Ñтрогий (octet)';
+$labels['asciicasemap'] = 'чутливий до регіÑтру (ascii-casemap)';
+$labels['asciinumeric'] = 'чиÑловий (ascii-numeric)';
+$labels['index'] = 'індекÑ:';
+$labels['indexlast'] = 'назад';
+$labels['vacation'] = 'ВідпуÑтка';
+$labels['vacation.reply'] = 'ПовідомленнÑ-відповідь';
+$labels['vacation.advanced'] = 'Розширені налаштуваннÑ';
+$labels['vacation.from'] = 'ÐдреÑа відправника відповіді';
+$labels['vacation.subject'] = 'Тема';
+$labels['vacation.body'] = 'Тіло ';
+$labels['vacation.start'] = 'Початок відпуÑтки';
+$labels['vacation.end'] = 'Кінець відпуÑтки';
+$labels['vacation.status'] = 'СтатуÑ';
+$labels['vacation.on'] = 'Увімкнено';
+$labels['vacation.off'] = 'Вимкнено';
+$labels['vacation.addresses'] = 'Мої електронні адреÑи';
+$labels['vacation.interval'] = 'Інтервал відповіді';
+$labels['vacation.after'] = 'ЗаÑтоÑувати правило відпуÑтки піÑÐ»Ñ ';
+$labels['vacation.saving'] = 'Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…â€¦';
+$labels['vacation.action'] = 'Ð”Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ вхідного повідомленнÑ';
+$labels['vacation.keep'] = 'Залишити';
+$labels['vacation.discard'] = 'Відкинути';
+$labels['vacation.redirect'] = 'Перенаправити до ';
+$labels['vacation.copy'] = 'ÐадÑилати копію до ';
+$labels['filladdresses'] = 'Заповнити уÑіма моїми адреÑами ';
+$labels['arialabelfiltersetactions'] = 'Дії набору фільтрів';
+$labels['arialabelfilteractions'] = 'Дії фільтра';
+$labels['arialabelfilterform'] = 'ВлаÑтивоÑÑ‚Ñ– фільтра';
+$labels['ariasummaryfilterslist'] = 'СпиÑок фільтрів';
+$labels['ariasummaryfiltersetslist'] = 'СпиÑок наборів фільтрів';
+$labels['filterstitle'] = 'Редагувати фільтри вхідної пошти';
+$labels['vacationtitle'] = 'Редагувати правило поза-офіÑом';
+$labels['message'] = 'ЛиÑÑ‚';
+$labels['duplicate'] = 'є дублікатем';
+$labels['notduplicate'] = 'не є дублікатем';
+$labels['duplicate.handle'] = 'оброблювач:';
+$labels['duplicate.header'] = 'заголовок:';
+$labels['duplicate.uniqueid'] = 'ідентифікатор:';
+$labels['duplicate.seconds'] = 'таймаут (Ñекунд):';
+$labels['duplicate.last'] = 'відноÑно оÑтатнього виконаннÑ';
+$messages['filterunknownerror'] = 'Ðевідома помилка Ñервера.';
+$messages['filterconnerror'] = 'Ðеможливо з\'єднатиÑÑ Ð· Ñервером.';
+$messages['filterdeleteerror'] = 'Ðеможливо вилучити фільтр. СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñервера.';
+$messages['filterdeleted'] = 'Фільтр уÑпішно видалено.';
+$messages['filtersaved'] = 'Фільтр уÑпішно збережено.';
+$messages['filtersaveerror'] = 'Ðеможливо зберегти фільтр. СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñервера.';
+$messages['filterformerror'] = 'Форма фільтрів міÑтить помилки.';
+$messages['filterdeleteconfirm'] = 'Ви дійÑно хочете видалити обраний фільтр?';
+$messages['ruledeleteconfirm'] = 'Ви дійÑно хочете видалити обране правило?';
+$messages['actiondeleteconfirm'] = 'Ви дійÑно хочете видалити обрану дію?';
+$messages['forbiddenchars'] = 'Введено заборонені Ñимволи.';
+$messages['cannotbeempty'] = 'Поле не може бути пуÑтим.';
+$messages['ruleexist'] = 'Фільтр з такою назвою вже Ñ–Ñнує.';
+$messages['setactivateerror'] = 'Ðеможливо активувати обраний набір фільтрів. Помилка Ñервера.';
+$messages['setdeactivateerror'] = 'Ðеможливо деактивувати обраний набір фільтрів. Помилка Ñервера.';
+$messages['setdeleteerror'] = 'Ðеможливо вилучити обраний набір фільтрів. Помилка Ñервера.';
+$messages['setactivated'] = 'Ðабір фільтрів активовано уÑпішно';
+$messages['setdeactivated'] = 'Ðабір фільтрів деактивовано уÑпішно.';
+$messages['setdeleted'] = 'Ðабір фільтрів видалено уÑпішно';
+$messages['setdeleteconfirm'] = 'Ви впевнені, що хочете видалити обраний набір?';
+$messages['setcreateerror'] = 'Ðеможливо Ñтворити набір фільтрів. СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñервера.';
+$messages['setcreated'] = 'Ðабір фільтрів Ñтворено уÑпішно';
+$messages['activateerror'] = 'Ðеможливо увімкнути обраний фільтр (фільтри). Помилка Ñервера.';
+$messages['deactivateerror'] = 'Ðеможливо вимкнути обраний фільтр (фільтр). Помилка Ñервера.';
+$messages['deactivated'] = 'Фільтр(и) уÑпішно вимкнено.';
+$messages['activated'] = 'Фільтр(и) уÑпішно увімкнено.';
+$messages['moved'] = 'Фільтр уÑпішно переміщено.';
+$messages['moveerror'] = 'Ðеможливо переміÑтити обраний фільтр. Помилка Ñервера.';
+$messages['nametoolong'] = 'Занадто довга назва.';
+$messages['namereserved'] = 'Зарезервована назва.';
+$messages['setexist'] = 'Ðабір уже Ñ–Ñнує.';
+$messages['nodata'] = 'Має бути обрано хоча б один варіант!';
+$messages['invaliddateformat'] = 'ÐедійÑний формат дати або чаÑтини дати';
+$messages['saveerror'] = 'Ðеможливо зберегти дані. СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñервера.';
+$messages['vacationsaved'] = 'Дані про відпуÑтку уÑпішно збережено.';
+$messages['emptyvacationbody'] = 'Тіло Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ відпуÑтку обов\'Ñзкове!';
+$messages['duplicate.conflict.err'] = 'Заголовок та унікальний ідентифікатор не допуÑкаютьÑÑ Ñ€Ð°Ð·Ð¾Ð¼.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,207 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'Bá»™ lá»c';
+$labels['managefilters'] = 'Quản lý bá»™ lá»c thÆ° đến';
+$labels['filtername'] = 'Lá»c tên';
+$labels['newfilter'] = 'Bá»™ lá»c má»›i';
+$labels['filteradd'] = 'Thêm bá»™ lá»c';
+$labels['filterdel'] = 'Xóa bá»™ lá»c';
+$labels['moveup'] = 'Chuyển lên';
+$labels['movedown'] = 'Chuyển xuống';
+$labels['filterallof'] = 'Phù hợp với tất cả các qui luật sau đây';
+$labels['filteranyof'] = 'Phù hợp với bất kỳ qui luật nào sau đây';
+$labels['filterany'] = 'Tất cả tin nhắn';
+$labels['filtercontains'] = 'Bao gồm';
+$labels['filternotcontains'] = 'Không bao gồm';
+$labels['filteris'] = 'Bằng với';
+$labels['filterisnot'] = 'Không bằng với';
+$labels['filterexists'] = 'Tồn tại';
+$labels['filternotexists'] = 'Không tồn tại';
+$labels['filtermatches'] = 'Tương ứng với cách diễn đạt';
+$labels['filternotmatches'] = 'Không tương ứng với cách diễn đạt';
+$labels['filterregex'] = 'TÆ°Æ¡ng ứng vá»›i cách diá»…n đạt thông thÆ°á»ng';
+$labels['filternotregex'] = 'Không phù  hợp vá»›i cách diá»…n đạt thông thÆ°á»ng';
+$labels['filterunder'] = 'DÆ°á»›i';
+$labels['filterover'] = 'HÆ¡n';
+$labels['addrule'] = 'Thêm qui luật';
+$labels['delrule'] = 'Xóa qui luật';
+$labels['messagemoveto'] = 'Chuyển tin nhắn tới';
+$labels['messageredirect'] = 'Gửi lại tin nhắn tới';
+$labels['messagecopyto'] = 'Sao chép tin nhắn tới';
+$labels['messagesendcopy'] = 'Gửi bản sao chép tin nhắn tới';
+$labels['messagereply'] = 'Trả lá»i tin nhắn';
+$labels['messagedelete'] = 'Xóa thư';
+$labels['messagediscard'] = 'Loại bỠvới tin nhắn';
+$labels['messagekeep'] = 'Giữ thư ở Hộp thư chính';
+$labels['messagesrules'] = 'Với thư đến';
+$labels['messagesactions'] = 'Thực hiện các hành động sau:';
+$labels['add'] = 'Thêm';
+$labels['del'] = 'Xoá';
+$labels['sender'] = 'NgÆ°á»i gá»­i';
+$labels['recipient'] = 'NgÆ°á»i nhận';
+$labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
+$labels['vacationinterval'] = 'Tần suất gửi thư:';
+$labels['vacationreason'] = 'Nội dung chính';
+$labels['vacationsubject'] = 'Tiêu đỠthư';
+$labels['days'] = 'ngày';
+$labels['seconds'] = 'giây';
+$labels['rulestop'] = 'Ngừng đánh giá qui luật';
+$labels['enable'] = 'Kích hoạt/Không kích hoạt';
+$labels['filterset'] = 'Äặt các bá»™ lá»c';
+$labels['filtersets'] = 'Thiết lập bá»™ lá»c';
+$labels['filtersetadd'] = 'Thêm bá»™ lá»c';
+$labels['filtersetdel'] = 'Xóa bá»™ lá»c hiện tại';
+$labels['filtersetact'] = 'Kích hoạt bá»™ lá»c hiện tại';
+$labels['filtersetdeact'] = 'Ngừng kích hoạt bá»™ lá»c hiện tai';
+$labels['filterdef'] = 'Äịnh nghÄ©a bá»™ lá»c';
+$labels['filtersetname'] = 'Tên bá»™ lá»c';
+$labels['newfilterset'] = 'Thiết lập bá»™ lá»c má»›i';
+$labels['active'] = 'Kích hoạt';
+$labels['none'] = 'Không có';
+$labels['fromset'] = 'Từ thiết lập';
+$labels['fromfile'] = 'Từ hồ sơ';
+$labels['filterdisabled'] = 'Bá»™ lá»c được ngừng hoạt Ä‘á»™ng';
+$labels['countisgreaterthan'] = 'Äếm lá»›n hÆ¡n';
+$labels['countisgreaterthanequal'] = 'Äếm lá»›n hÆ¡n hoặc bằng';
+$labels['countislessthan'] = 'Äếm ít hÆ¡n';
+$labels['countislessthanequal'] = 'Äếm ít hÆ¡n hoặc bằng';
+$labels['countequals'] = 'Äếm bằng';
+$labels['countnotequals'] = 'đếm không bằng với';
+$labels['valueisgreaterthan'] = 'Giá trị lớn hơn';
+$labels['valueisgreaterthanequal'] = 'Giá trị lớn hơn hoặc bằng';
+$labels['valueislessthan'] = 'Giá trị nhỠhơn';
+$labels['valueislessthanequal'] = 'Giá trị nhỠhơn hoặc bằng';
+$labels['valueequals'] = 'Giá trị bằng';
+$labels['valuenotequals'] = 'giá trị không bằng với';
+$labels['setflags'] = 'Thiết lập đánh dấu cho thư';
+$labels['addflags'] = 'Thêm đánh dấu cho thư';
+$labels['removeflags'] = 'BỠđánh dấu khá»i thÆ°';
+$labels['flagread'] = 'Äá»c';
+$labels['flagdeleted'] = 'Äã được xóa';
+$labels['flaganswered'] = 'Äã trả lá»i';
+$labels['flagflagged'] = 'Äã đánh dấu';
+$labels['flagdraft'] = 'Nháp';
+$labels['setvariable'] = 'Äặt biến';
+$labels['setvarname'] = 'Tên biến:';
+$labels['setvarvalue'] = 'Giá trị biến:';
+$labels['setvarmodifiers'] = 'Bá»™ chia:';
+$labels['varlower'] = 'viết thÆ°á»ng';
+$labels['varupper'] = 'viết hoa';
+$labels['varlowerfirst'] = 'chữ cái đầu viết thÆ°á»ng';
+$labels['varupperfirst'] = 'chữ cái đầu viết hoa';
+$labels['varquotewildcard'] = 'trích dẫn ký tự đặc biệt';
+$labels['varlength'] = 'độ dài';
+$labels['notify'] = 'Gửi thông báo';
+$labels['notifytarget'] = 'Mục tiêu thông báo:';
+$labels['notifymessage'] = 'Ná»™i dung thông báo (tuỳ chá»n):';
+$labels['notifyoptions'] = 'Lá»±a chá»n thông báo (tuỳ chá»n):';
+$labels['notifyfrom'] = 'NgÆ°á»i gá»­i thông báo (tuỳ chá»n):';
+$labels['notifyimportance'] = 'Mức Ä‘á»™ quan trá»ng:';
+$labels['notifyimportancelow'] = 'thấp';
+$labels['notifyimportancenormal'] = 'vừa phải';
+$labels['notifyimportancehigh'] = 'cao';
+$labels['notifymethodmailto'] = 'Thư điện tử';
+$labels['notifymethodtel'] = 'Äiện thoại';
+$labels['notifymethodsms'] = 'Tin nhắn';
+$labels['filtercreate'] = 'Tạo bá»™ lá»c';
+$labels['usedata'] = 'Dùng dữ liệu trong bá»™ lá»c sau:';
+$labels['nextstep'] = 'Bước tiếp theo';
+$labels['...'] = '…';
+$labels['currdate'] = 'Ngày hiện tại';
+$labels['datetest'] = 'Ngày';
+$labels['dateheader'] = 'tiêu Ä‘á»:';
+$labels['year'] = 'năm';
+$labels['month'] = 'tháng';
+$labels['day'] = 'ngày';
+$labels['date'] = 'ngày (cú pháp: năm-tháng-ngày)';
+$labels['julian'] = 'ngày (theo kiểu Julian)';
+$labels['hour'] = 'giá»';
+$labels['minute'] = 'phút';
+$labels['second'] = 'giây';
+$labels['time'] = 'giá» (cú pháp: giá»:phút:giây)';
+$labels['iso8601'] = 'ngày (theo chuẩn ISO 8601)';
+$labels['std11'] = 'ngày (theo chuẩn RFC 2822)';
+$labels['zone'] = 'vùng thá»i gian';
+$labels['weekday'] = 'ngày trog tuần (0-6)';
+$labels['advancedopts'] = 'Tùy chá»n tính năng cao hÆ¡n';
+$labels['body'] = 'Ná»™i dung';
+$labels['address'] = 'Äịa chỉ';
+$labels['envelope'] = 'Phong bì';
+$labels['modifier'] = 'Bổ nghĩa';
+$labels['text'] = 'Văn bản';
+$labels['undecoded'] = 'Chưa được giải mã (nguyên bản)';
+$labels['contenttype'] = 'Kiểu mẫu nội dung';
+$labels['modtype'] = 'Kiểu:';
+$labels['allparts'] = 'Tất cả';
+$labels['domain'] = 'Phạm vi';
+$labels['localpart'] = 'Phần nội bộ';
+$labels['user'] = 'NgÆ°á»i dùng';
+$labels['detail'] = 'Chi tiết';
+$labels['comparator'] = 'Vật so sánh';
+$labels['default'] = 'Mặc định';
+$labels['octet'] = 'Khắt khe';
+$labels['asciicasemap'] = 'Không phân biệt chữ hoa chữ thÆ°á»ng';
+$labels['asciinumeric'] = 'Bảng mã ASCII';
+$labels['index'] = 'chỉ mục:';
+$labels['indexlast'] = 'ngược';
+$labels['vacation'] = 'Thiết lập tá»± Ä‘á»™ng trả lá»i trong kỳ nghỉ';
+$labels['vacation.reply'] = 'Trả lá»i thÆ°';
+$labels['vacation.advanced'] = 'Tùy chá»n tính năng cao hÆ¡n';
+$labels['vacation.subject'] = 'Tiêu Ä‘á»';
+$labels['vacation.body'] = 'Ná»™i dung thÆ°';
+$labels['vacation.status'] = 'Trạng thái';
+$labels['vacation.on'] = 'Bật';
+$labels['vacation.off'] = 'Tắt';
+$labels['vacation.interval'] = 'Khoảng thá»i gian trả lá»i';
+$labels['vacation.after'] = 'Äặt quy định kỳ nghỉ sau';
+$labels['vacation.saving'] = 'Lưu lại dữ liệu...';
+$messages['filterunknownerror'] = 'Không tìm được lỗi máy chủ';
+$messages['filterconnerror'] = 'Không kết nối được với máy chủ.';
+$messages['filterdeleteerror'] = 'Không thể xóa bá»™ lá»c. Xuất hiện lá»—i ở máy chủ';
+$messages['filterdeleted'] = 'Xóa bá»™ lá»c thành công';
+$messages['filtersaved'] = 'LÆ°u bá»™ lá»c thành công';
+$messages['filtersaveerror'] = 'Không thể lÆ°u bá»™ lá»c. Xuất hiện lá»—i ở máy chủ';
+$messages['filterdeleteconfirm'] = 'Bạn có thá»±c sá»± muốn xóa bá»™ lá»c được chá»n?';
+$messages['ruledeleteconfirm'] = 'Bạn có chắc chắn muốn xóa qui luật được chá»n?';
+$messages['actiondeleteconfirm'] = 'Bạn có chắc chắn muốn xóa hành Ä‘á»™ng được chá»n?';
+$messages['forbiddenchars'] = 'Ký tự bị cấm trong ô';
+$messages['cannotbeempty'] = 'Ô không thể bị bỠtrống';
+$messages['ruleexist'] = 'Äã tồn tại bá»™ lá»c vá»›i tên cụ thế';
+$messages['setactivateerror'] = 'Không thể kích hoạt bá»™ lá»c được lá»±a chá»n. Xuất hiện lá»—i ở máy chủ';
+$messages['setdeactivateerror'] = 'Không thể tắt bá»™ lá»c được lá»±a chá»n. Xuất hiện lá»—i ở máy chủ';
+$messages['setdeleteerror'] = 'Không thể xóa bá»™ lá»c được lá»±a chá»n. Xuất hiện lá»—i ở máy chủ.';
+$messages['setactivated'] = 'Bá»™ lá»c được khởi Ä‘á»™ng thành công';
+$messages['setdeactivated'] = 'Ngừng kích hoạt bá»™ lá»c thành công';
+$messages['setdeleted'] = 'Xóa bá»™ lá»c thành công';
+$messages['setdeleteconfirm'] = 'Bạn có chắc bạn muốn xóa thiết lập bá»™ lá»c được chá»n?';
+$messages['setcreateerror'] = 'Không thể tạo thiết lập bá»™ lá»c. Có lá»—i xuất hiện ở máy chủ';
+$messages['setcreated'] = 'Thiết lập bá»™ lá»c được tạo thành công';
+$messages['activateerror'] = 'Không thể khởi Ä‘á»™ng (các) bá»™ lá»c được chá»n. Có lá»—i xuất hiện ở máy chủ';
+$messages['deactivateerror'] = 'Không thể tắt (các) bá»™ lá»c đã chá»n. Có lá»—i xuất hiện ở máy chủ';
+$messages['deactivated'] = 'Bá»™ lá»c được khởi Ä‘á»™ng thành công';
+$messages['activated'] = 'Bá»™ lá»c được tắt thành công';
+$messages['moved'] = 'Bá»™ lá»c được chuyển Ä‘i thành công';
+$messages['moveerror'] = 'Không thể chuyển bá»™ lá»c đã chá»n. Có lá»—i xuất hiện ở máy chủ.';
+$messages['nametoolong'] = 'Tên quá dài';
+$messages['namereserved'] = 'Tên đã được bảo vệ';
+$messages['setexist'] = 'Thiết lập đã tồn tại';
+$messages['nodata'] = 'Ãt nhất má»™t vị trí phải được chá»n';
+$messages['invaliddateformat'] = 'Lỗi không đúng cú pháp ngày hoặc nhập ngày sai';
+$messages['saveerror'] = 'Không thể lưu trữ dữ liệu. Xuất hiện lỗi ở máy chủ.';
+$messages['vacationsaved'] = 'Thiết lập kỳ nghỉ đã được lưu lại thành công.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = '过滤器';
+$labels['managefilters'] = '管ç†é‚®ä»¶è¿‡æ»¤è§„则';
+$labels['filtername'] = '过滤规则å称';
+$labels['newfilter'] = '新建过滤规则';
+$labels['filteradd'] = '添加过滤规则';
+$labels['filterdel'] = '删除过滤规则';
+$labels['moveup'] = '上移';
+$labels['movedown'] = '下移';
+$labels['filterallof'] = '匹é…所有规则';
+$labels['filteranyof'] = '匹é…ä»»æ„一æ¡è§„则';
+$labels['filterany'] = '所有邮件';
+$labels['filtercontains'] = '包å«';
+$labels['filternotcontains'] = 'ä¸åŒ…å«';
+$labels['filteris'] = '等于';
+$labels['filterisnot'] = 'ä¸ç­‰äºŽ';
+$labels['filterexists'] = '存在';
+$labels['filternotexists'] = 'ä¸å­˜åœ¨';
+$labels['filtermatches'] = '匹é…表达å¼';
+$labels['filternotmatches'] = 'ä¸åŒ¹é…表达å¼';
+$labels['filterregex'] = '匹é…正则表达å¼';
+$labels['filternotregex'] = 'ä¸åŒ¹é…正则表达å¼';
+$labels['filterunder'] = 'å°äºŽ';
+$labels['filterover'] = '大于';
+$labels['addrule'] = '新建规则';
+$labels['delrule'] = '删除规则';
+$labels['messagemoveto'] = '将邮件移至';
+$labels['messageredirect'] = '将邮件转å‘至';
+$labels['messagecopyto'] = 'å¤åˆ¶é‚®ä»¶è‡³';
+$labels['messagesendcopy'] = 'å‘é€å¤åˆ¶é‚®ä»¶è‡³';
+$labels['messagereply'] = '回å¤ä»¥ä¸‹å†…容';
+$labels['messagedelete'] = '删除邮件';
+$labels['messagediscard'] = 'èˆå¼ƒé‚®ä»¶å¹¶å›žå¤ä»¥ä¸‹å†…容';
+$labels['messagekeep'] = 'ä¿ç•™é‚®ä»¶åœ¨æ”¶ä»¶ç®±';
+$labels['messagesrules'] = '对新收å–的邮件应用规则:';
+$labels['messagesactions'] = '执行以下æ“作:';
+$labels['add'] = '添加';
+$labels['del'] = '删除';
+$labels['sender'] = 'å‘件人';
+$labels['recipient'] = '收件人';
+$labels['vacationaddr'] = '我的电å­é‚®ä»¶åœ°å€ï¼š';
+$labels['vacationdays'] = 'å‘é€é‚®ä»¶é¢‘率(å•ä½ï¼šå¤©):';
+$labels['vacationinterval'] = 'å‘é€é‚®ä»¶é¢‘率:';
+$labels['vacationreason'] = '邮件正文(å‡æœŸåŽŸå› )';
+$labels['vacationfrom'] = '回å¤å‘件人地å€ï¼š';
+$labels['vacationsubject'] = '邮件主题';
+$labels['days'] = '天';
+$labels['seconds'] = '秒';
+$labels['rulestop'] = 'åœæ­¢è¯„价规则';
+$labels['enable'] = 'å¯ç”¨/ç¦ç”¨';
+$labels['filterset'] = '过滤器设置';
+$labels['filtersets'] = '过滤器设置集';
+$labels['filtersetadd'] = '增加过滤器设置集';
+$labels['filtersetdel'] = '删除当å‰çš„过滤器设置集';
+$labels['filtersetact'] = '激活当å‰çš„过滤器设置集';
+$labels['filtersetdeact'] = 'åœç”¨å½“å‰çš„过滤器设置集';
+$labels['filterseteditraw'] = '编辑过滤器设置集';
+$labels['filterdef'] = '过滤器定义';
+$labels['filtersetname'] = '过滤器集的å称';
+$labels['newfilterset'] = '新的过滤器集';
+$labels['active'] = 'å¯ç”¨';
+$labels['none'] = 'æ— ';
+$labels['fromset'] = '从设置集';
+$labels['fromfile'] = '从文件';
+$labels['filterdisabled'] = '过滤器已ç¦ç”¨';
+$labels['countisgreaterthan'] = '计数大于';
+$labels['countisgreaterthanequal'] = '计数大于或等于';
+$labels['countislessthan'] = '计数å°äºŽ';
+$labels['countislessthanequal'] = '计数å°äºŽæˆ–等于';
+$labels['countequals'] = '计数等于';
+$labels['countnotequals'] = '计数器ä¸ç­‰äºŽ';
+$labels['valueisgreaterthan'] = '值大于';
+$labels['valueisgreaterthanequal'] = '值大于或等于';
+$labels['valueislessthan'] = '值å°äºŽ';
+$labels['valueislessthanequal'] = '值å°äºŽæˆ–等于';
+$labels['valueequals'] = '值等于';
+$labels['valuenotequals'] = '值ä¸ç­‰äºŽ';
+$labels['setflags'] = '设定邮件的标识';
+$labels['addflags'] = '增加邮件的标识';
+$labels['removeflags'] = '删除邮件的标识';
+$labels['flagread'] = '读å–';
+$labels['flagdeleted'] = '删除';
+$labels['flaganswered'] = '已答å¤';
+$labels['flagflagged'] = '已标记';
+$labels['flagdraft'] = 'è‰ç¨¿';
+$labels['setvariable'] = '设置å˜é‡';
+$labels['setvarname'] = 'å˜é‡å:';
+$labels['setvarvalue'] = '值:';
+$labels['setvarmodifiers'] = '修改:';
+$labels['varlower'] = 'å°å†™';
+$labels['varupper'] = '大写';
+$labels['varlowerfirst'] = '首字æ¯å°å†™';
+$labels['varupperfirst'] = '首字æ¯å¤§å†™';
+$labels['varquotewildcard'] = '引用特殊字符';
+$labels['varlength'] = '长度';
+$labels['notify'] = 'å‘é€é€šçŸ¥';
+$labels['notifytarget'] = '通知目标:';
+$labels['notifymessage'] = '通知消æ¯ï¼ˆå¯é€‰ï¼‰ï¼š';
+$labels['notifyoptions'] = '通知选项(å¯é€‰ï¼‰ï¼š';
+$labels['notifyfrom'] = '通知å‘件人(å¯é€‰ï¼‰ï¼š';
+$labels['notifyimportance'] = '优先级:';
+$labels['notifyimportancelow'] = '低';
+$labels['notifyimportancenormal'] = '中';
+$labels['notifyimportancehigh'] = '高';
+$labels['notifymethodmailto'] = '电å­é‚®ä»¶';
+$labels['notifymethodtel'] = '手机';
+$labels['notifymethodsms'] = '短信';
+$labels['filtercreate'] = '创建过滤规则';
+$labels['usedata'] = '在过滤器中使用下列数æ®';
+$labels['nextstep'] = '下一步';
+$labels['...'] = '...';
+$labels['string'] = '字符串';
+$labels['currdate'] = '当å‰æ—¥æœŸ';
+$labels['datetest'] = '日期';
+$labels['dateheader'] = '头:';
+$labels['year'] = 'å¹´';
+$labels['month'] = '月';
+$labels['day'] = '天';
+$labels['date'] = '日期 (年-月-日)';
+$labels['julian'] = '日期 (儒略日)';
+$labels['hour'] = 'å°æ—¶';
+$labels['minute'] = '分钟';
+$labels['second'] = '秒';
+$labels['time'] = '时间 (hh:mm:ss)';
+$labels['iso8601'] = '日期 (ISO8601)';
+$labels['std11'] = '日期 (RFC2822)';
+$labels['zone'] = '时区';
+$labels['weekday'] = 'éžå‘¨æœ« (0-6)';
+$labels['advancedopts'] = '高级选项';
+$labels['body'] = '正文';
+$labels['address'] = '地å€';
+$labels['envelope'] = 'ä¿¡å°';
+$labels['modifier'] = '修饰符:';
+$labels['text'] = '文本';
+$labels['undecoded'] = '未解ç ï¼ˆRAW)';
+$labels['contenttype'] = '内容类型';
+$labels['modtype'] = '类型:';
+$labels['allparts'] = '全部';
+$labels['domain'] = '域';
+$labels['localpart'] = '本地部份';
+$labels['user'] = '用户';
+$labels['detail'] = '细节';
+$labels['comparator'] = '比较:';
+$labels['default'] = '默认';
+$labels['octet'] = '严格模å¼(字节)';
+$labels['asciicasemap'] = 'ä¸åŒºåˆ†å¤§å°å†™(ascii 字符)';
+$labels['asciinumeric'] = '数字类型(ascii 数字)';
+$labels['index'] = '索引:';
+$labels['indexlast'] = 'å‘åŽ';
+$labels['vacation'] = 'å‡æœŸ';
+$labels['vacation.reply'] = '回å¤æ¶ˆæ¯';
+$labels['vacation.advanced'] = '高级设置';
+$labels['vacation.from'] = '回å¤å‘件人地å€';
+$labels['vacation.subject'] = '主题';
+$labels['vacation.body'] = '正文';
+$labels['vacation.start'] = 'å‡æœŸå¼€å§‹';
+$labels['vacation.end'] = 'å‡æœŸç»“æŸ';
+$labels['vacation.status'] = '状æ€';
+$labels['vacation.on'] = 'å¼€';
+$labels['vacation.off'] = 'å…³';
+$labels['vacation.addresses'] = '我的电å­é‚®ä»¶åœ°å€';
+$labels['vacation.interval'] = '回å¤é—´éš”';
+$labels['vacation.after'] = 'å°†å‡æœŸè§„则放在...之åŽ';
+$labels['vacation.saving'] = '正在ä¿å­˜æ•°æ®...';
+$labels['vacation.action'] = '传入邮件æ“作';
+$labels['vacation.keep'] = 'ä¿ç•™';
+$labels['vacation.discard'] = '丢弃';
+$labels['vacation.redirect'] = 'é‡å®šå‘到';
+$labels['vacation.copy'] = 'å‘é€å‰¯æœ¬åˆ°';
+$labels['filladdresses'] = '填入我的所有地å€';
+$labels['arialabelfiltersetactions'] = '过滤器集æ“作';
+$labels['arialabelfilteractions'] = '过滤器æ“作';
+$labels['arialabelfilterform'] = '过滤器属性';
+$labels['ariasummaryfilterslist'] = '过滤器列表';
+$labels['ariasummaryfiltersetslist'] = '过滤器集列表';
+$labels['filterstitle'] = '编辑传入邮件过滤器';
+$labels['vacationtitle'] = '编辑éžåŠžå…¬å®¤è§„则';
+$labels['message'] = '消æ¯';
+$labels['duplicate'] = '是é‡å¤';
+$labels['notduplicate'] = '是éžé‡å¤';
+$labels['duplicate.handle'] = '头:';
+$labels['duplicate.header'] = '头:';
+$labels['duplicate.uniqueid'] = '标识符:';
+$labels['duplicate.seconds'] = '超时(秒):';
+$labels['duplicate.last'] = '相对于最åŽä¸€æ¬¡æ‰§è¡Œ';
+$messages['filterunknownerror'] = '未知的æœåŠ¡å™¨é”™è¯¯';
+$messages['filterconnerror'] = '无法连接至æœåŠ¡å™¨';
+$messages['filterdeleteerror'] = '无法删除过滤器。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['filterdeleted'] = '过滤器已æˆåŠŸåˆ é™¤';
+$messages['filtersaved'] = '过滤器已æˆåŠŸä¿å­˜ã€‚';
+$messages['filtersaveerror'] = '无法ä¿å­˜è¿‡æ»¤å™¨ã€‚å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['filterformerror'] = '过滤器表å•åŒ…å«é”™è¯¯ã€‚';
+$messages['filterdeleteconfirm'] = '您确定è¦åˆ é™¤æ‰€é€‰æ‹©çš„过滤器å—?';
+$messages['ruledeleteconfirm'] = '您确定è¦åˆ é™¤æ‰€é€‰æ‹©çš„规则å—?';
+$messages['actiondeleteconfirm'] = '您确定è¦åˆ é™¤æ‰€é€‰æ‹©çš„æ“作å—?';
+$messages['forbiddenchars'] = '内容包å«ç¦ç”¨å­—符';
+$messages['cannotbeempty'] = '内容ä¸èƒ½ä¸ºç©º';
+$messages['ruleexist'] = '指定过滤器å称已存在。';
+$messages['setactivateerror'] = '无法激活选定过滤器集。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['setdeactivateerror'] = '无法å–消激活选定过滤器集。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['setdeleteerror'] = '无法删除选定过滤器集。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['setactivated'] = 'å¯ç”¨è¿‡æ»¤å™¨é›†æˆåŠŸã€‚';
+$messages['setdeactivated'] = 'ç¦ç”¨è¿‡æ»¤å™¨é›†æˆåŠŸã€‚';
+$messages['setdeleted'] = '删除过滤器æˆåŠŸã€‚';
+$messages['setupdated'] = '过滤器设置更新æˆåŠŸã€‚';
+$messages['setdeleteconfirm'] = '您确定è¦åˆ é™¤æŒ‡å®šçš„过滤器å—?';
+$messages['setcreateerror'] = '无法创建过滤器集。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['setcreated'] = '过滤器æˆåŠŸåˆ›å»ºã€‚';
+$messages['activateerror'] = '无法å¯ç”¨é€‰å®šè¿‡æ»¤å™¨ã€‚å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['deactivateerror'] = '无法ç¦ç”¨é€‰å®šè¿‡æ»¤å™¨ã€‚å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['deactivated'] = 'å¯ç”¨è¿‡æ»¤å™¨æˆåŠŸã€‚';
+$messages['activated'] = 'ç¦ç”¨è¿‡æ»¤å™¨æˆåŠŸã€‚';
+$messages['moved'] = '移动过滤器æˆåŠŸã€‚';
+$messages['moveerror'] = '无法移动选定过滤器。å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['nametoolong'] = '无法创建过滤器集,å称太长。';
+$messages['namereserved'] = 'ä¿ç•™å称。';
+$messages['setexist'] = '设置已存在。';
+$messages['nodata'] = '至少选择一个ä½ç½®ï¼';
+$messages['invaliddateformat'] = '无效的日期或日期格å¼';
+$messages['saveerror'] = '无法ä¿å­˜æ•°æ®ã€‚å‘生æœåŠ¡å™¨é”™è¯¯ã€‚';
+$messages['vacationsaved'] = 'å‡æœŸæ•°æ®ä¿å­˜æˆåŠŸã€‚';
+$messages['emptyvacationbody'] = 'å‡æœŸæ¶ˆæ¯å¿…须有正文ï¼';
+$messages['duplicate.conflict.err'] = 'ä¸å…许头和唯一标识符。';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,240 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Managesieve plugin         |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = '篩é¸';
+$labels['managefilters'] = '設定篩é¸';
+$labels['filtername'] = '篩é¸å稱';
+$labels['newfilter'] = '建立新篩é¸';
+$labels['filteradd'] = '加入篩é¸';
+$labels['filterdel'] = '刪除篩é¸';
+$labels['moveup'] = '上移';
+$labels['movedown'] = '下移';
+$labels['filterallof'] = '符åˆæ‰€æœ‰è¦å‰‡';
+$labels['filteranyof'] = '符åˆä»»ä¸€æ¢è¦å‰‡';
+$labels['filterany'] = '所有郵件';
+$labels['filtercontains'] = '包å«';
+$labels['filternotcontains'] = 'ä¸åŒ…å«';
+$labels['filteris'] = '等於';
+$labels['filterisnot'] = 'ä¸ç­‰æ–¼';
+$labels['filterexists'] = '存在';
+$labels['filternotexists'] = 'ä¸å­˜åœ¨';
+$labels['filtermatches'] = '符åˆè¡¨é”å¼';
+$labels['filternotmatches'] = 'ä¸ç¬¦åˆè¡¨é”å¼';
+$labels['filterregex'] = '符åˆæ­£è¦è¡¨é”å¼';
+$labels['filternotregex'] = 'ä¸ç¬¦åˆæ­£è¦è¡¨é”å¼';
+$labels['filterunder'] = 'å°æ–¼';
+$labels['filterover'] = '大於';
+$labels['addrule'] = '加入è¦å‰‡';
+$labels['delrule'] = '刪除è¦å‰‡';
+$labels['messagemoveto'] = '將郵件移至';
+$labels['messageredirect'] = '將郵件轉寄至';
+$labels['messagecopyto'] = '將郵件複製至';
+$labels['messagesendcopy'] = '寄é€éƒµä»¶è¤‡æœ¬è‡³';
+$labels['messagereply'] = '用以下內容回覆';
+$labels['messagedelete'] = '刪除郵件';
+$labels['messagediscard'] = '刪除郵件並用以下內容回覆';
+$labels['messagekeep'] = '在收件匣ä¿ç•™éƒµä»¶';
+$labels['messagesrules'] = 'å°æ–°æ”¶åˆ°çš„郵件:';
+$labels['messagesactions'] = '執行以下動作:';
+$labels['add'] = '加入';
+$labels['del'] = '刪除';
+$labels['sender'] = '寄件者';
+$labels['recipient'] = '收件者';
+$labels['vacationaddr'] = '我的電郵ä½å€ï¼š';
+$labels['vacationdays'] = '多久回覆一次(單ä½ï¼šå¤©ï¼‰ï¼š';
+$labels['vacationinterval'] = '多久回覆一次:';
+$labels['vacationreason'] = '郵件內容(休å‡åŽŸå› ï¼‰ï¼š';
+$labels['vacationfrom'] = '回覆寄件者ä½å€ï¼š';
+$labels['vacationsubject'] = '郵件主旨:';
+$labels['days'] = '天';
+$labels['seconds'] = '秒';
+$labels['rulestop'] = 'åœæ­¢è©•ä¼°è¦å‰‡';
+$labels['enable'] = '啟用/åœç”¨';
+$labels['filterset'] = '篩é¸é›†åˆ';
+$labels['filtersets'] = '篩é¸é›†åˆ';
+$labels['filtersetadd'] = '加入篩é¸é›†åˆ';
+$labels['filtersetdel'] = '刪除目å‰çš„篩é¸é›†åˆ';
+$labels['filtersetact'] = '啟用目å‰çš„篩é¸é›†åˆ';
+$labels['filtersetdeact'] = 'åœç”¨ç›®å‰çš„篩é¸é›†åˆ';
+$labels['filterseteditraw'] = '編輯篩é¸é›†åˆ';
+$labels['filterdef'] = '篩é¸å®šç¾©';
+$labels['filtersetname'] = '篩é¸é›†åˆå稱';
+$labels['newfilterset'] = '建立篩é¸é›†åˆ';
+$labels['active'] = '啟用';
+$labels['none'] = 'ç„¡';
+$labels['fromset'] = '從集åˆ';
+$labels['fromfile'] = '從檔案';
+$labels['filterdisabled'] = '篩é¸å·²åœç”¨';
+$labels['countisgreaterthan'] = '數é‡å¤§æ–¼';
+$labels['countisgreaterthanequal'] = '數é‡å¤§æ–¼æˆ–等於';
+$labels['countislessthan'] = '數é‡å°æ–¼';
+$labels['countislessthanequal'] = '數é‡å°æ–¼æˆ–等於';
+$labels['countequals'] = '數é‡ç­‰æ–¼';
+$labels['countnotequals'] = '數é‡ä¸ç­‰æ–¼';
+$labels['valueisgreaterthan'] = '值大於';
+$labels['valueisgreaterthanequal'] = '值大於或等於';
+$labels['valueislessthan'] = '值å°æ–¼';
+$labels['valueislessthanequal'] = '值å°æ–¼æˆ–等於';
+$labels['valueequals'] = '值等於';
+$labels['valuenotequals'] = '值ä¸ç­‰æ–¼';
+$labels['setflags'] = '設定旗標';
+$labels['addflags'] = '新增旗標到郵件';
+$labels['removeflags'] = '移除郵件旗標';
+$labels['flagread'] = '已讀';
+$labels['flagdeleted'] = '已刪除';
+$labels['flaganswered'] = '已經回覆';
+$labels['flagflagged'] = '已加旗標';
+$labels['flagdraft'] = 'è‰ç¨¿';
+$labels['setvariable'] = '設定變數';
+$labels['setvarname'] = '變數å稱:';
+$labels['setvarvalue'] = '變數值:';
+$labels['setvarmodifiers'] = '修改:';
+$labels['varlower'] = 'å°æ¥·';
+$labels['varupper'] = '大楷';
+$labels['varlowerfirst'] = '第一個字æ¯å°æ¥·';
+$labels['varupperfirst'] = '第一個字æ¯å¤§æ¥·';
+$labels['varquotewildcard'] = '跳脫字元';
+$labels['varlength'] = '長度';
+$labels['notify'] = '寄é€é€šçŸ¥';
+$labels['notifytarget'] = '通知收件人';
+$labels['notifymessage'] = '通知內容訊æ¯(é¸å¡«):';
+$labels['notifyoptions'] = '通知項目(é¸å¡«):';
+$labels['notifyfrom'] = '通知寄件人(é¸å¡«):';
+$labels['notifyimportance'] = 'é‡è¦æ€§:';
+$labels['notifyimportancelow'] = '低';
+$labels['notifyimportancenormal'] = '一般';
+$labels['notifyimportancehigh'] = '高';
+$labels['notifymethodmailto'] = '電郵';
+$labels['notifymethodtel'] = '電話';
+$labels['notifymethodsms'] = 'SMS';
+$labels['filtercreate'] = '建立篩é¸';
+$labels['usedata'] = '於篩é¸ä½¿ç”¨ä»¥ä¸‹è³‡æ–™ï¼š';
+$labels['nextstep'] = '下一步';
+$labels['...'] = '…';
+$labels['string'] = '字串';
+$labels['currdate'] = 'ç¾åœ¨æ—¥æœŸ';
+$labels['datetest'] = '日期';
+$labels['dateheader'] = '標頭:';
+$labels['year'] = 'å¹´';
+$labels['month'] = '月';
+$labels['day'] = 'æ—¥';
+$labels['date'] = '日期 (yyyy-mm-dd)';
+$labels['julian'] = '日期 (儒略曆)';
+$labels['hour'] = 'å°æ™‚';
+$labels['minute'] = '分é˜';
+$labels['second'] = '秒';
+$labels['time'] = '時間 (hh:mm:ss)';
+$labels['iso8601'] = '日期 (ISO8601)';
+$labels['std11'] = '日期 (RFC2822)';
+$labels['zone'] = '時å€';
+$labels['weekday'] = '週幾 (0-6)';
+$labels['advancedopts'] = '進階é¸é …';
+$labels['body'] = '內文';
+$labels['address'] = '郵件ä½å€';
+$labels['envelope'] = 'ä¿¡å°';
+$labels['modifier'] = '修改:';
+$labels['text'] = '文字';
+$labels['undecoded'] = '未解碼 (原始)';
+$labels['contenttype'] = '內容類型';
+$labels['modtype'] = '類型:';
+$labels['allparts'] = '全部';
+$labels['domain'] = '網域';
+$labels['localpart'] = '本機部分';
+$labels['user'] = '使用者';
+$labels['detail'] = '細節';
+$labels['comparator'] = '比較:';
+$labels['default'] = 'é è¨­';
+$labels['octet'] = '嚴謹模å¼(å…«ä½å…ƒçµ„)';
+$labels['asciicasemap'] = 'ä¸å€åˆ†å¤§å°å¯«(採用ASCII-Casemap)';
+$labels['asciinumeric'] = '數字類型(ascii-numeric)';
+$labels['index'] = '索引:';
+$labels['indexlast'] = 'å‘後';
+$labels['vacation'] = '休å‡';
+$labels['vacation.reply'] = '回覆郵件';
+$labels['vacation.advanced'] = '進階設定';
+$labels['vacation.from'] = '回覆寄件者ä½å€';
+$labels['vacation.subject'] = '主旨';
+$labels['vacation.body'] = '內文';
+$labels['vacation.start'] = '休å‡é–‹å§‹';
+$labels['vacation.end'] = '休å‡çµæŸ';
+$labels['vacation.status'] = '狀態';
+$labels['vacation.on'] = 'é–‹';
+$labels['vacation.off'] = '關';
+$labels['vacation.addresses'] = '我的電å­éƒµä»¶ä½å€';
+$labels['vacation.interval'] = '回覆間隔';
+$labels['vacation.after'] = '將休å‡è¦å‰‡ç½®æ–¼æ­¤é …目之後:';
+$labels['vacation.saving'] = '正在儲存資料...';
+$labels['vacation.action'] = 'å°æ”¶åˆ°çš„郵件的動作';
+$labels['vacation.keep'] = 'ä¿ç•™';
+$labels['vacation.discard'] = '丟棄';
+$labels['vacation.redirect'] = 'é‡å®šå‘至';
+$labels['vacation.copy'] = '傳é€è¤‡æœ¬è‡³';
+$labels['filladdresses'] = '填入我所有的ä½å€';
+$labels['arialabelfiltersetactions'] = '篩é¸é›†åˆå‹•ä½œ';
+$labels['arialabelfilteractions'] = '篩é¸å‹•ä½œ';
+$labels['arialabelfilterform'] = '篩é¸å…§å®¹';
+$labels['ariasummaryfilterslist'] = '篩é¸æ¸…å–®';
+$labels['ariasummaryfiltersetslist'] = '篩é¸é›†åˆæ¸…å–®';
+$labels['filterstitle'] = '編輯「收到郵件的篩é¸ã€';
+$labels['vacationtitle'] = '編輯「ä¸åœ¨è¾¦å…¬å®¤ã€è¦å‰‡';
+$labels['message'] = '郵件';
+$labels['duplicate'] = 'é‡è¦†';
+$labels['notduplicate'] = 'ä¸æ˜¯é‡è¦†';
+$labels['duplicate.handle'] = '處ç†å¸¸å¼:';
+$labels['duplicate.header'] = '標頭:';
+$labels['duplicate.uniqueid'] = '識別碼:';
+$labels['duplicate.seconds'] = '逾時 (秒):';
+$labels['duplicate.last'] = '相å°æ–¼ä¸Šæ¬¡åŸ·è¡Œ';
+$messages['filterunknownerror'] = '未知的伺æœå™¨éŒ¯èª¤';
+$messages['filterconnerror'] = '無法與伺æœå™¨é€£ç·š';
+$messages['filterdeleteerror'] = '無法刪除篩é¸ã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['filterdeleted'] = 'æˆåŠŸåˆªé™¤ç¯©é¸å™¨';
+$messages['filtersaved'] = 'æˆåŠŸå„²å­˜ç¯©é¸å™¨ã€‚';
+$messages['filtersaveerror'] = '無法儲存篩é¸ã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['filterformerror'] = '篩é¸è¡¨å–®å‡ºéŒ¯';
+$messages['filterdeleteconfirm'] = '確定è¦åˆªé™¤æ‰€é¸çš„郵件è¦å‰‡å—Ž?';
+$messages['ruledeleteconfirm'] = '確定è¦åˆªé™¤æ‰€é¸çš„郵件è¦å‰‡å—Žï¼Ÿ';
+$messages['actiondeleteconfirm'] = '確定è¦åˆªé™¤æ‰€é¸çš„動作嗎?';
+$messages['forbiddenchars'] = '內容包å«ç¦ç”¨å­—å…ƒ';
+$messages['cannotbeempty'] = '內容ä¸èƒ½ç‚ºç©ºç™½';
+$messages['ruleexist'] = 'è¦å‰‡å稱é‡è¤‡';
+$messages['setactivateerror'] = '無法啟用所é¸çš„篩é¸é›†åˆã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['setdeactivateerror'] = '無法åœç”¨æ‰€é¸çš„篩é¸é›†åˆã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['setdeleteerror'] = '無法刪除所é¸çš„篩é¸é›†åˆã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['setactivated'] = '篩é¸å™¨é›†åˆæˆåŠŸå•Ÿç”¨';
+$messages['setdeactivated'] = '篩é¸å™¨é›†åˆæˆåŠŸåœç”¨';
+$messages['setdeleted'] = '篩é¸å™¨é›†åˆæˆåŠŸåˆªé™¤';
+$messages['setupdated'] = '篩é¸é›†åˆæˆåŠŸæ›´æ–°';
+$messages['setdeleteconfirm'] = '確定è¦åˆªé™¤æ‰€é¸çš„篩é¸é›†åˆå—Žï¼Ÿ';
+$messages['setcreateerror'] = '無法建立篩é¸é›†åˆã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['setcreated'] = '篩é¸å™¨é›†åˆæˆåŠŸå»ºç«‹';
+$messages['activateerror'] = '無法啟用所é¸çš„篩é¸ã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['deactivateerror'] = '無法åœç”¨æ‰€é¸çš„篩é¸ã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['deactivated'] = '篩é¸å™¨å·²åœç”¨';
+$messages['activated'] = '篩é¸å™¨å·²å•Ÿç”¨';
+$messages['moved'] = '篩é¸å™¨å·²ç§»å‹•';
+$messages['moveerror'] = '無法移動所é¸çš„篩é¸ã€‚伺æœå™¨å‡ºéŒ¯';
+$messages['nametoolong'] = 'å稱太長。';
+$messages['namereserved'] = 'ä¿ç•™å稱.';
+$messages['setexist'] = '集åˆå·²å­˜åœ¨';
+$messages['nodata'] = '至少è¦é¸æ“‡ä¸€å€‹ä½ç½®';
+$messages['invaliddateformat'] = '日期或時間部分格å¼ç„¡æ•ˆ';
+$messages['saveerror'] = '無法儲存資料。伺æœå™¨å‡ºéŒ¯';
+$messages['vacationsaved'] = 'æˆåŠŸå„²å­˜ä¼‘å‡è³‡æ–™ã€‚';
+$messages['emptyvacationbody'] = '休å‡éƒµä»¶è¦æœ‰å…§å®¹ï¼';
+$messages['duplicate.conflict.err'] = 'ä¸å…許標頭和識別碼都是ç¨ä¸€ç„¡äºŒçš„';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/managesieve.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1177 @@
+/**
+ * (Manage)Sieve Filters plugin
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+if (window.rcmail) {
+  rcmail.addEventListener('init', function(evt) {
+    // add managesieve-create command to message_commands array,
+    // so it's state will be updated on message selection/unselection
+    if (rcmail.env.task == 'mail') {
+      if (rcmail.env.action != 'show')
+        rcmail.env.message_commands.push('managesieve-create');
+      else
+        rcmail.enable_command('managesieve-create', true);
+    }
+
+    if (rcmail.env.task == 'mail' || rcmail.env.action.startsWith('plugin.managesieve')) {
+      // Create layer for form tips
+      if (!rcmail.env.framed) {
+        rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
+        rcmail.env.ms_tip_layer.appendTo(document.body);
+      }
+    }
+
+    // register commands
+    rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() });
+    rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() });
+    rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() });
+    rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() });
+    rcmail.register_command('plugin.managesieve-move', function() { rcmail.managesieve_move() });
+    rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() });
+    rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() });
+    rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() });
+    rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() });
+    rcmail.register_command('plugin.managesieve-seteditraw', function() { rcmail.managesieve_seteditraw() });
+
+    if (rcmail.env.action.startsWith('plugin.managesieve')) {
+      if (rcmail.gui_objects.sieveform) {
+        rcmail.enable_command('plugin.managesieve-save', true);
+        sieve_form_init();
+      }
+      else if (rcmail.gui_objects.sievesetrawform) {
+        rcmail.enable_command('plugin.managesieve-save', true);
+        sieve_raw_editor_init();
+      }
+      else {
+        rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
+      }
+
+      var setcnt, set = rcmail.env.currentset;
+
+      if (rcmail.gui_objects.filterslist) {
+        rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist,
+          {multiselect:false, draggable:true, keyboard:true});
+
+        rcmail.filters_list
+          .addEventListener('select', function(e) { rcmail.managesieve_select(e); })
+          .addEventListener('dragstart', function(e) { rcmail.managesieve_dragstart(e); })
+          .addEventListener('dragend', function(e) { rcmail.managesieve_dragend(e); })
+          .addEventListener('initrow', function(row) {
+            row.obj.onmouseover = function() { rcmail.managesieve_focus_filter(row); };
+            row.obj.onmouseout = function() { rcmail.managesieve_unfocus_filter(row); };
+          })
+          .init();
+      }
+
+      if (rcmail.gui_objects.filtersetslist) {
+        rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist,
+          {multiselect:false, draggable:false, keyboard:true});
+
+        rcmail.filtersets_list.init().focus();
+
+        if (set != null) {
+          set = rcmail.managesieve_setid(set);
+          rcmail.filtersets_list.select(set);
+        }
+
+        // attach select event after initial record was selected
+        rcmail.filtersets_list.addEventListener('select', function(e) { rcmail.managesieve_setselect(e); });
+
+        setcnt = rcmail.filtersets_list.rowcount;
+        rcmail.enable_command('plugin.managesieve-set', true);
+        rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt > 0);
+        rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1);
+        rcmail.enable_command('plugin.managesieve-seteditraw', setcnt > 0 && rcmail.env.raw_sieve_editor);
+
+        // Fix dragging filters over sets list
+        $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); });
+      }
+    }
+
+    if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled)
+      $('#disabled').attr('checked', true);
+  });
+};
+
+/*********************************************************/
+/*********       Managesieve UI methods          *********/
+/*********************************************************/
+
+rcube_webmail.prototype.managesieve_add = function()
+{
+  this.load_managesieveframe('', true);
+};
+
+rcube_webmail.prototype.managesieve_del = function()
+{
+  var id = this.filters_list.get_single_selection();
+  if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) {
+    var lock = this.set_busy(true, 'loading');
+    this.http_post('plugin.managesieve-action',
+      '_act=delete&_fid='+this.filters_list.rows[id].uid, lock);
+  }
+};
+
+rcube_webmail.prototype.managesieve_act = function()
+{
+  var id = this.filters_list.get_single_selection(),
+    lock = this.set_busy(true, 'loading');
+
+  this.http_post('plugin.managesieve-action',
+    '_act=act&_fid='+this.filters_list.rows[id].uid, lock);
+};
+
+// Filter selection
+rcube_webmail.prototype.managesieve_select = function(list)
+{
+  var id = list.get_single_selection();
+
+  if (id != null) {
+    id = list.rows[id].uid;
+    this.load_managesieveframe('_fid=' + id);
+  }
+
+  var has_id = typeof(id) != 'undefined' && id != null;
+  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', has_id);
+};
+
+// Set selection
+rcube_webmail.prototype.managesieve_setselect = function(list)
+{
+  this.show_contentframe(false);
+  this.filters_list.clear(true);
+  this.enable_command('plugin.managesieve-setdel', list.rowcount > 1);
+  this.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', list.rowcount > 0);
+  this.enable_command('plugin.managesieve-seteditraw', list.rowcount > 0 && this.env.raw_sieve_editor);
+
+  var id = list.get_single_selection();
+  if (id != null)
+    this.managesieve_list(this.env.filtersets[id]);
+};
+
+rcube_webmail.prototype.managesieve_rowid = function(id)
+{
+  var i, rows = this.filters_list.rows;
+
+  for (i in rows)
+    if (rows[i] != null && rows[i].uid == id)
+      return i;
+};
+
+// Returns set's identifier
+rcube_webmail.prototype.managesieve_setid = function(name)
+{
+  for (var i in this.env.filtersets)
+    if (this.env.filtersets[i] == name)
+      return i;
+};
+
+// Filters listing request
+rcube_webmail.prototype.managesieve_list = function(script)
+{
+  var lock = this.set_busy(true, 'loading');
+
+  this.http_post('plugin.managesieve-action', '_act=list&_set='+urlencode(script), lock);
+};
+
+// Script download request
+rcube_webmail.prototype.managesieve_setget = function()
+{
+  var id = this.filtersets_list.get_single_selection(),
+    script = this.env.filtersets[id];
+
+  this.goto_url('plugin.managesieve-action', {_act: 'setget', _set: script}, false, true);
+};
+
+// Set activate/deactivate request
+rcube_webmail.prototype.managesieve_setact = function()
+{
+  var id = this.filtersets_list.get_single_selection(),
+   lock = this.set_busy(true, 'loading'),
+    script = this.env.filtersets[id],
+    action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact';
+
+  this.http_post('plugin.managesieve-action', '_act='+action+'&_set='+urlencode(script), lock);
+};
+
+// Set delete request
+rcube_webmail.prototype.managesieve_setdel = function()
+{
+  if (!confirm(this.get_label('managesieve.setdeleteconfirm')))
+    return false;
+
+  var id = this.filtersets_list.get_single_selection(),
+    lock = this.set_busy(true, 'loading'),
+    script = this.env.filtersets[id];
+
+  this.http_post('plugin.managesieve-action', '_act=setdel&_set='+urlencode(script), lock);
+};
+
+// Set edit raw request
+rcube_webmail.prototype.managesieve_seteditraw = function()
+{
+  var id = this.filtersets_list.get_single_selection(),
+    script = this.env.filtersets[id];
+
+  this.load_managesieveframe('_seteditraw=1&_set=' + urlencode(script), true);
+}
+
+// Set add request
+rcube_webmail.prototype.managesieve_setadd = function()
+{
+  this.load_managesieveframe('_newset=1', true);
+};
+
+rcube_webmail.prototype.managesieve_updatelist = function(action, o)
+{
+  this.set_busy(true);
+
+  switch (action) {
+    // Delete filter row
+    case 'del':
+      var id = o.id, list = this.filters_list;
+
+      list.remove_row(this.managesieve_rowid(o.id));
+      this.show_contentframe(false);
+      this.reset_filters_list();
+
+      // filter identifiers changed, fix the list
+      $('tr', this.filters_list.list).each(function() {
+        // remove hidden (deleted) rows
+        if (this.style.display == 'none') {
+          $(this).detach();
+          return;
+        }
+
+        var rowid = this.id.substr(6);
+
+        // remove all attached events
+        $(this).off();
+
+        // update row id
+        if (rowid > id) {
+          this.uid = rowid - 1;
+          $(this).attr('id', 'rcmrow' + this.uid);
+        }
+      });
+      list.init();
+
+      break;
+
+    // Update filter row
+    case 'update':
+      var i, row = $('#rcmrow'+this.managesieve_rowid(o.id));
+
+      if (o.name)
+        $('td', row).text(o.name);
+      if (o.disabled)
+        row.addClass('disabled');
+      else
+        row.removeClass('disabled');
+
+      $('#disabled', $('iframe').contents()).prop('checked', o.disabled);
+
+      break;
+
+    // Add filter row to the list
+    case 'add':
+      var list = this.filters_list,
+        row = $('<tr><td class="name"></td></tr>');
+
+      $('td', row).text(o.name);
+      row.attr('id', 'rcmrow'+o.id);
+      if (o.disabled)
+        row.addClass('disabled');
+
+      list.insert_row(row.get(0));
+      list.highlight_row(o.id);
+
+      this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', true);
+
+      break;
+
+    // Filling rules list
+    case 'list':
+      var i, tr, td, el, list = this.filters_list;
+
+      if (o.clear)
+        list.clear();
+
+      for (i in o.list) {
+        el = o.list[i];
+        tr = document.createElement('TR');
+        td = document.createElement('TD');
+
+        $(td).text(el.name);
+        td.className = 'name';
+        tr.id = 'rcmrow' + el.id;
+        if (el['class'])
+            tr.className = el['class'];
+        tr.appendChild(td);
+
+        list.insert_row(tr);
+      }
+
+      if (o.set)
+        list.highlight_row(o.set);
+      else
+        this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false);
+
+      break;
+
+    // Sactivate/deactivate set
+    case 'setact':
+      var id = this.managesieve_setid(o.name), row = $('#rcmrow' + id);
+      if (o.active) {
+        if (o.all)
+          $('tr', this.gui_objects.filtersetslist).addClass('disabled');
+        row.removeClass('disabled');
+      }
+      else
+        row.addClass('disabled');
+
+      break;
+
+    // Delete set row
+    case 'setdel':
+      var id = this.managesieve_setid(o.name);
+
+      this.filtersets_list.remove_row(id);
+      this.filters_list.clear();
+      this.show_contentframe(false);
+      this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact', 'plugin.managesieve-setget', false);
+
+      delete this.env.filtersets[id];
+
+      break;
+
+    // Create set row
+    case 'setadd':
+      var id = 'S' + new Date().getTime(),
+        list = this.filtersets_list,
+        row = $('<tr class="disabled"><td class="name"></td></tr>');
+
+      $('td', row).text(o.name);
+      row.attr('id', 'rcmrow'+id);
+
+      this.env.filtersets[id] = o.name;
+      list.insert_row(row.get(0));
+
+      // move row into its position on the list
+      if (o.index != list.rowcount-1) {
+        row.detach();
+        var elem = $('tr:visible', list.list).get(o.index);
+        row.insertBefore(elem);
+      }
+
+      list.select(id);
+
+      // Fix dragging filters over sets list
+      this.managesieve_fixdragend(row);
+
+      break;
+
+    case 'refresh':
+      this.reset_filters_list(true);
+      break;
+  }
+
+  this.set_busy(false);
+};
+
+// Resets filters list state
+rcube_webmail.prototype.reset_filters_list = function(reload)
+{
+  this.filters_list.clear_selection();
+  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', false);
+
+  if (reload) {
+    var id = this.filtersets_list.get_single_selection();
+
+    this.filters_list.clear(true);
+    this.managesieve_list(this.env.filtersets[id]);
+  }
+};
+
+// load filter frame
+rcube_webmail.prototype.load_managesieveframe = function(add_url, reset)
+{
+  if (reset)
+    this.reset_filters_list();
+
+  if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+    var lock = this.set_busy(true, 'loading');
+
+    target = window.frames[this.env.contentframe];
+    target.location.href = this.env.comm_path
+      + '&_action=plugin.managesieve-action&_framed=1&_unlock=' + lock
+      + (add_url ? ('&' + add_url) : '');
+  }
+};
+
+// load filter frame
+rcube_webmail.prototype.managesieve_dragstart = function(list)
+{
+  var id = this.filters_list.get_single_selection();
+
+  this.drag_active = true;
+  this.drag_filter = id;
+};
+
+rcube_webmail.prototype.managesieve_dragend = function(e)
+{
+  if (this.drag_active) {
+    if (this.drag_filter_target) {
+      var lock = this.set_busy(true, 'loading');
+
+      this.show_contentframe(false);
+      this.http_post('plugin.managesieve-action', '_act=move&_fid='+this.drag_filter
+        +'&_to='+this.drag_filter_target, lock);
+    }
+    this.drag_active = false;
+  }
+};
+
+// Fixes filters dragging over sets list
+// @TODO: to be removed after implementing copying filters
+rcube_webmail.prototype.managesieve_fixdragend = function(elem)
+{
+  var p = this;
+  $(elem).on('mouseup' + ((bw.iphone || bw.ipad) ? ' touchend' : ''), function(e) {
+    if (p.drag_active)
+      p.filters_list.drag_mouse_up(e);
+  });
+};
+
+rcube_webmail.prototype.managesieve_focus_filter = function(row)
+{
+  var id = row.id.replace(/^rcmrow/, '');
+  if (this.drag_active && id != this.drag_filter) {
+    this.drag_filter_target = id;
+    $(row.obj).addClass(id < this.drag_filter ? 'filtermoveup' : 'filtermovedown');
+  }
+};
+
+rcube_webmail.prototype.managesieve_unfocus_filter = function(row)
+{
+  if (this.drag_active) {
+    $(row.obj).removeClass('filtermoveup filtermovedown');
+    this.drag_filter_target = null;
+  }
+};
+
+/*********************************************************/
+/*********          Filter Form methods          *********/
+/*********************************************************/
+
+// Form submition
+rcube_webmail.prototype.managesieve_save = function()
+{
+  if (this.env.action == 'plugin.managesieve-vacation') {
+    var data = $(this.gui_objects.sieveform).serialize();
+    this.http_post('plugin.managesieve-vacation', data, this.display_message(this.get_label('managesieve.vacation.saving'), 'loading'));
+    return;
+  }
+
+  if (this.gui_objects.sieveform) {
+    if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') {
+      var id = parent.rcmail.filters_list.get_single_selection();
+      if (id != null)
+        this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid;
+    }
+    this.gui_objects.sieveform.submit();
+  }
+  else if (this.gui_objects.sievesetrawform) {
+    this.gui_objects.sievesetrawform.submit();
+  }
+};
+
+// Operations on filters form
+rcube_webmail.prototype.managesieve_ruleadd = function(id)
+{
+  this.http_post('plugin.managesieve-action', '_act=ruleadd&_rid='+id);
+};
+
+rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
+{
+  if (content != '') {
+    // create new element
+    var div = document.getElementById('rules'),
+      row = document.createElement('div');
+
+    this.managesieve_insertrow(div, row, after);
+    // fill row after inserting (for IE)
+    row.setAttribute('id', 'rulerow'+id);
+    row.className = 'rulerow';
+    row.innerHTML = content;
+
+    // initialize smart list inputs
+    $('textarea[data-type="list"]', row).each(function() {
+      smart_field_init(this);
+    });
+
+    this.managesieve_formbuttons(div);
+  }
+};
+
+rcube_webmail.prototype.managesieve_ruledel = function(id)
+{
+  if ($('#ruledel'+id).hasClass('disabled'))
+    return;
+
+  if (confirm(this.get_label('managesieve.ruledeleteconfirm'))) {
+    var row = document.getElementById('rulerow'+id);
+    row.parentNode.removeChild(row);
+    this.managesieve_formbuttons(document.getElementById('rules'));
+  }
+};
+
+rcube_webmail.prototype.managesieve_actionadd = function(id)
+{
+  this.http_post('plugin.managesieve-action', '_act=actionadd&_aid='+id);
+};
+
+rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
+{
+  if (content != '') {
+    var div = document.getElementById('actions'),
+      row = document.createElement('div');
+
+    this.managesieve_insertrow(div, row, after);
+    // fill row after inserting (for IE)
+    row.className = 'actionrow';
+    row.setAttribute('id', 'actionrow'+id);
+    row.innerHTML = content;
+
+    // initialize smart list inputs
+    $('textarea[data-type="list"]', row).each(function() {
+      smart_field_init(this);
+    });
+
+    this.managesieve_formbuttons(div);
+  }
+};
+
+rcube_webmail.prototype.managesieve_actiondel = function(id)
+{
+  if ($('#actiondel'+id).hasClass('disabled'))
+    return;
+
+  if (confirm(this.get_label('managesieve.actiondeleteconfirm'))) {
+    var row = document.getElementById('actionrow'+id);
+    row.parentNode.removeChild(row);
+    this.managesieve_formbuttons(document.getElementById('actions'));
+  }
+};
+
+// insert rule/action row in specified place on the list
+rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
+{
+  for (var i=0; i<div.childNodes.length; i++) {
+    if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow')  + after)
+      break;
+  }
+
+  if (div.childNodes[i+1])
+    div.insertBefore(row, div.childNodes[i+1]);
+  else
+    div.appendChild(row);
+};
+
+// update Delete buttons status
+rcube_webmail.prototype.managesieve_formbuttons = function(div)
+{
+  var i, button, buttons = [];
+
+  // count and get buttons
+  for (i=0; i<div.childNodes.length; i++) {
+    if (div.id == 'rules' && div.childNodes[i].id) {
+      if (/rulerow/.test(div.childNodes[i].id))
+        buttons.push('ruledel' + div.childNodes[i].id.replace(/rulerow/, ''));
+    }
+    else if (div.childNodes[i].id) {
+      if (/actionrow/.test(div.childNodes[i].id))
+        buttons.push( 'actiondel' + div.childNodes[i].id.replace(/actionrow/, ''));
+    }
+  }
+
+  for (i=0; i<buttons.length; i++) {
+    button = document.getElementById(buttons[i]);
+    if (i>0 || buttons.length>1) {
+      $(button).removeClass('disabled');
+    }
+    else {
+      $(button).addClass('disabled');
+    }
+  }
+};
+
+// update vacation addresses field with user identities
+rcube_webmail.prototype.managesieve_vacation_addresses = function(id)
+{
+  var lock = this.set_busy(true, 'loading');
+  this.http_post('plugin.managesieve-action', {_act: 'addresses', _aid: id}, lock);
+};
+
+// update vacation addresses field with user identities
+rcube_webmail.prototype.managesieve_vacation_addresses_update = function(id, addresses)
+{
+  var field = $('#vacation_addresses,#action_addresses' + (id || ''));
+  smart_field_reset(field.get(0), addresses);
+};
+
+function rule_header_select(id)
+{
+  var obj = document.getElementById('header' + id),
+    size = document.getElementById('rule_size' + id),
+    msg = document.getElementById('rule_message' + id),
+    op = document.getElementById('rule_op' + id),
+    header = document.getElementById('custom_header' + id + '_list'),
+    custstr = document.getElementById('custom_var' + id + '_list'),
+    mod = document.getElementById('rule_mod' + id),
+    trans = document.getElementById('rule_trans' + id),
+    comp = document.getElementById('rule_comp' + id),
+    datepart = document.getElementById('rule_date_part' + id),
+    dateheader = document.getElementById('rule_date_header_div' + id),
+    rule = $('#rule_op' + id),
+    h = obj.value,
+    set = [op, header, custstr, mod, trans, comp, size];
+
+  if (h == 'size') {
+    if (msg) set.push(msg);
+    $.each(set, function() { this.style.display = 'none'; });
+    size.style.display = 'inline';
+  }
+  else if (h == 'message' && msg) {
+    $.each(set, function() { this.style.display = 'none'; });
+    msg.style.display = 'inline';
+  }
+  else {
+    header.style.display = h != '...' ? 'none' : 'inline-block';
+    custstr.style.display = h != 'string' ? 'none' : 'inline-block';
+    size.style.display = 'none';
+    op.style.display = 'inline';
+    comp.style.display = '';
+    mod.style.display = h == 'body' || h == 'currentdate' || h == 'date' || h == 'string' ? 'none' : 'block';
+    trans.style.display = h == 'body' ? 'block' : 'none';
+    if (msg)
+      msg.style.display = h == 'message' ? 'block' : 'none';
+  }
+
+  if (datepart)
+    datepart.style.display = h == 'currentdate' || h == 'date' ? 'inline' : 'none';
+  if (dateheader)
+    dateheader.style.display = h == 'date' ? '' : 'none';
+
+  $('[value="exists"],[value="notexists"]', rule).prop('disabled', h == 'string');
+  if (!rule.val())
+    rule.val('contains');
+
+  rule_op_select(op, id, h);
+  rule_mod_select(id, h);
+
+  obj.style.width = h == '...' ? '40px' : '';
+};
+
+function rule_op_select(obj, id, header)
+{
+  var target = document.getElementById('rule_target' + id + '_list');
+
+  if (!header)
+    header = document.getElementById('header' + id).value;
+
+  target.style.display = obj.value.match(/^(exists|notexists)$/) || header.match(/^(size|message)$/) ? 'none' : 'inline-block';
+};
+
+function rule_trans_select(id)
+{
+  var obj = document.getElementById('rule_trans_op' + id),
+    target = document.getElementById('rule_trans_type' + id);
+
+  target.style.display = obj.value != 'content' ? 'none' : 'inline';
+};
+
+function rule_mod_select(id, header)
+{
+  var obj = document.getElementById('rule_mod_op' + id),
+    target = document.getElementById('rule_mod_type' + id),
+    duplicate = document.getElementById('rule_duplicate_div' + id),
+    index = document.getElementById('rule_index_div' + id);
+
+  if (!header)
+    header = document.getElementById('header' + id).value;
+
+  target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : 'inline';
+
+  if (index)
+    index.style.display = !header.match(/^(body|currentdate|size|message|string)$/) && obj.value != 'envelope'  ? '' : 'none';
+
+  if (duplicate)
+    duplicate.style.display = header == 'message' ? '' : 'none';
+};
+
+function rule_join_radio(value)
+{
+  $('#rules').css('display', value == 'any' ? 'none' : 'block');
+};
+
+function rule_adv_switch(id, elem)
+{
+  var elem = $(elem), enabled = elem.hasClass('hide'), adv = $('#rule_advanced'+id);
+
+  if (enabled) {
+    adv.hide();
+    elem.removeClass('hide').addClass('show');
+  }
+  else {
+    adv.show();
+    elem.removeClass('show').addClass('hide');
+  }
+}
+
+function action_type_select(id)
+{
+  var obj = document.getElementById('action_type' + id),
+    v = obj.value, enabled = {},
+    elems = {
+      mailbox: document.getElementById('action_mailbox' + id),
+      target: document.getElementById('redirect_target' + id),
+      target_area: document.getElementById('action_target_area' + id),
+      flags: document.getElementById('action_flags' + id),
+      vacation: document.getElementById('action_vacation' + id),
+      set: document.getElementById('action_set' + id),
+      notify: document.getElementById('action_notify' + id)
+    };
+
+  if (v == 'fileinto' || v == 'fileinto_copy') {
+    enabled.mailbox = 1;
+  }
+  else if (v == 'redirect' || v == 'redirect_copy') {
+    enabled.target = 1;
+  }
+  else if (v.match(/^reject|ereject$/)) {
+    enabled.target_area = 1;
+  }
+  else if (v.match(/^(add|set|remove)flag$/)) {
+    enabled.flags = 1;
+  }
+  else if (v == 'vacation') {
+    enabled.vacation = 1;
+  }
+  else if (v == 'set') {
+    enabled.set = 1;
+  }
+  else if (v == 'notify') {
+    enabled.notify = 1;
+  }
+
+  for (var x in elems) {
+    elems[x].style.display = !enabled[x] ? 'none' : 'inline';
+  }
+};
+
+function vacation_action_select()
+{
+  var selected = $('#vacation_action').val();
+
+  $('#action_target_span')[selected == 'discard' || selected == 'keep' ? 'hide' : 'show']();
+};
+
+// Inititalizes smart list input
+function smart_field_init(field)
+{
+  var id = field.id + '_list',
+    area = $('<span class="listarea"></span>'),
+    list = field.value ? field.value.split("\n") : [''];
+
+  if ($('#'+id).length)
+    return;
+
+  // add input rows
+  $.each(list, function(i, v) {
+    area.append(smart_field_row(v, field.name, i, $(field).data('size')));
+  });
+
+  area.attr('id', id);
+  field = $(field);
+
+  if (field.attr('disabled'))
+    area.hide();
+  // disable the original field anyway, we don't want it in POST
+  else
+    field.prop('disabled', true);
+
+  field.after(area);
+
+  if (field.hasClass('error')) {
+    area.addClass('error');
+    rcmail.managesieve_tip_register([[id, field.data('tip')]]);
+  }
+};
+
+function smart_field_row(value, name, idx, size)
+{
+  // build row element content
+  var input, content = '<span class="listelement">'
+      + '<span class="reset"></span><input type="text"></span>',
+    elem = $(content),
+    attrs = {value: value, name: name + '[]'};
+
+  if (size)
+    attrs.size = size;
+
+  input = $('input', elem).attr(attrs).keydown(function(e) {
+    var input = $(this);
+
+    // element creation event (on Enter)
+    if (e.which == 13) {
+      var name = input.attr('name').replace(/\[\]$/, ''),
+        dt = (new Date()).getTime(),
+        elem = smart_field_row('', name, dt, size);
+
+      input.parent().after(elem);
+      $('input', elem).focus();
+    }
+    // backspace or delete: remove input, focus previous one
+    else if ((e.which == 8 || e.which == 46) && input.val() == '') {
+
+      var parent = input.parent(), siblings = parent.parent().children();
+
+      if (siblings.length > 1) {
+        if (parent.prev().length)
+          parent.prev().children('input').focus();
+        else
+          parent.next().children('input').focus();
+
+        parent.remove();
+        return false;
+      }
+    }
+  });
+
+  // element deletion event
+  $('span[class="reset"]', elem).click(function() {
+    var span = $(this.parentNode);
+
+    if (span.parent().children().length > 1)
+      span.remove();
+    else
+      $('input', span).val('').focus();
+  });
+
+  return elem;
+}
+
+// Reset and fill the smart list input with new data
+function smart_field_reset(field, data)
+{
+  var id = field.id + '_list',
+    list = data.length ? data : [''];
+    area = $('#' + id);
+
+  area.empty();
+
+  // add input rows
+  $.each(list, function(i, v) {
+    area.append(smart_field_row(v, field.name, i, $(field).data('size')));
+  });
+}
+
+// Register onmouse(leave/enter) events for tips on specified form element
+rcube_webmail.prototype.managesieve_tip_register = function(tips)
+{
+  var n, framed = parent.rcmail,
+    tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;
+
+  for (n in tips) {
+    $('#'+tips[n][0])
+      .data('tip', tips[n][1])
+      .mouseleave(function(e) { tip.hide(); })
+      .mouseenter(function(e) {
+        var elem = $(this),
+          offset = elem.offset(),
+          left = offset.left,
+          top = offset.top - 12,
+          minwidth = elem.width();
+
+        if (framed) {
+          offset = $((rcmail.env.task == 'mail'  ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
+          top  += offset.top;
+          left += offset.left;
+        }
+
+        tip.html(elem.data('tip'));
+        top -= tip.height();
+
+        tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show();
+      });
+  }
+};
+
+// format time string
+function sieve_formattime(hour, minutes)
+{
+  var i, c, h, time = '', format = rcmail.env.time_format || 'H:i';
+
+  for (i=0; i<format.length; i++) {
+    c = format.charAt(i);
+    switch (c) {
+      case 'a': time += hour >= 12 ? 'pm' : 'am'; break;
+      case 'A': time += hour >= 12 ? 'PM' : 'AM'; break;
+      case 'g':
+      case 'h':
+        h = hour == 0 ? 12 : hour > 12 ? hour - 12 : hour;
+        time += (c == 'h' && hour < 10 ? '0' : '') + hour;
+        break;
+      case 'G': time += hour; break;
+      case 'H': time += (hour < 10 ? '0' : '') + hour; break;
+      case 'i': time += (minutes < 10 ? '0' : '') + minutes; break;
+      case 's': time += '00';
+      default: time += c;
+    }
+  }
+
+  return time;
+}
+
+function sieve_form_init()
+{
+  var form = rcmail.gui_objects.sieveform;
+
+  // resize dialog window
+  if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
+    parent.rcmail.managesieve_dialog_resize(form);
+  }
+
+  $('input[type="text"]:first', form).focus();
+
+  // initialize smart list inputs
+  $('textarea[data-type="list"]', form).each(function() {
+    smart_field_init(this);
+  });
+
+  // initialize rules form(s)
+  $('[name="_header[]"]', form).each(function() {
+    if (/([0-9]+)$/.test(this.id)) {
+      rule_header_select(RegExp.$1);
+    }
+  });
+
+  // enable date pickers on date fields
+  if ($.datepicker && rcmail.env.date_format) {
+    $.datepicker.setDefaults({
+      dateFormat: rcmail.env.date_format,
+      changeMonth: true,
+      showOtherMonths: true,
+      selectOtherMonths: true,
+      onSelect: function(dateText) { $(this).focus().val(dateText); }
+    });
+    $('input.datepicker').datepicker();
+  }
+
+  // configure drop-down menu on time input fields based on jquery UI autocomplete
+  $('#vacation_timefrom, #vacation_timeto')
+    .attr('autocomplete', "off")
+    .autocomplete({
+      delay: 100,
+      minLength: 1,
+      source: function(p, callback) {
+        var h, result = [];
+        for (h = 0; h < 24; h++)
+          result.push(sieve_formattime(h, 0));
+        result.push(sieve_formattime(23, 59));
+
+        return callback(result);
+      },
+      open: function(event, ui) {
+        // scroll to current time
+        var $this = $(this), val = $this.val(),
+          widget = $this.autocomplete('widget').css('width', '10em'),
+          menu = $this.data('ui-autocomplete').menu;
+
+        if (val && val.length)
+          widget.children().each(function() {
+            var li = $(this);
+            if (li.text().indexOf(val) == 0)
+              menu._scrollIntoView(li);
+          });
+      },
+      select: function(event, ui) {
+        $(this).val(ui.item.value);
+        return false;
+      }
+    })
+    .click(function() {  // show drop-down upon clicks
+      $(this).autocomplete('search', $(this).val() || ' ');
+    })
+
+  // display advanced controls when contain errors
+  $('input.error').each(function() {
+    if (String(this.id).match(/([0-9]+)$/)) {
+      $('#ruleadv' + RegExp.$1 + '.show').click();
+    }
+  });
+}
+
+/*********************************************************/
+/*********        RAW editor methods             *********/
+/*********************************************************/
+
+var cmeditor;
+
+function cmCreateErrorElem(msg)
+{
+  var marker = document.createElement("div");
+  marker.style.color = "#822";
+  marker.innerHTML = "â—";
+  marker.title = msg;
+
+  return marker;
+}
+
+function cmScrollToError()
+{
+  var line = $('.CodeMirror-lines .line-error'),
+    scroll = $('.CodeMirror-scroll'),
+    h = line.parent();
+
+  scroll.scrollTop(line.offset().top - scroll.offset().top - Math.round(scroll.height()/2));
+}
+
+function sieve_raw_editor_init()
+{
+  var textArea = document.getElementById('rawfiltersettxt');
+  if (textArea && !cmeditor) {
+    cmeditor = CodeMirror.fromTextArea(textArea, {
+      mode: 'sieve',
+      lineNumbers: true,
+      gutters: ["CodeMirror-linenumbers", "errorGutter"],
+      styleActiveLine: true
+    });
+
+    // fetching errors from environment and setting the line background
+    // and a gutter element with the error message accordingly
+    $.each(rcmail.env.sieve_errors || [], function(i, err) {
+      var lineNo = Number(err.line) - 1;
+      cmeditor.addLineClass(lineNo, 'background', 'line-error');
+      cmeditor.setGutterMarker(lineNo, 'errorGutter', cmCreateErrorElem(err.msg));
+      if (!i) cmScrollToError();
+    });
+  }
+}
+
+
+/*********************************************************/
+/*********           Mail UI methods             *********/
+/*********************************************************/
+
+rcube_webmail.prototype.managesieve_create = function(force)
+{
+  if (!force && this.env.action != 'show') {
+    var uid = this.message_list.get_single_selection(),
+      lock = this.set_busy(true, 'loading');
+
+    this.http_post('plugin.managesieve-action', {_uid: uid}, lock);
+    return;
+  }
+
+  if (!this.env.sieve_headers || !this.env.sieve_headers.length)
+    return;
+
+  var i, html, buttons = {}, dialog = $("#sievefilterform");
+
+  // create dialog window
+  if (!dialog.length) {
+    dialog = $('<div id="sievefilterform"></div>');
+    $('body').append(dialog);
+  }
+
+  // build dialog window content
+  html = '<fieldset><legend>'+this.get_label('managesieve.usedata')+'</legend><ul>';
+  for (i in this.env.sieve_headers)
+    html += '<li><input type="checkbox" name="headers[]" id="sievehdr'+i+'" value="'+i+'" checked="checked" />'
+      +'<label for="sievehdr'+i+'">'+this.env.sieve_headers[i][0]+':</label> '+this.env.sieve_headers[i][1]+'</li>';
+  html += '</ul></fieldset>';
+
+  dialog.html(html);
+
+  // [Next Step] button action
+  buttons[this.get_label('managesieve.nextstep')] = function () {
+    // check if there's at least one checkbox checked
+    var hdrs = $('input[name="headers[]"]:checked', dialog);
+    if (!hdrs.length) {
+      alert(rcmail.get_label('managesieve.nodata'));
+      return;
+    }
+
+    // build frame URL
+    var url = rcmail.get_task_url('mail');
+    url = rcmail.add_url(url, '_action', 'plugin.managesieve');
+    url = rcmail.add_url(url, '_framed', 1);
+
+    hdrs.map(function() {
+      var val = rcmail.env.sieve_headers[this.value];
+      url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]);
+    });
+
+    // load form in the iframe
+    var frame = $('<iframe>').attr({src: url, frameborder: 0})
+    dialog.empty().append(frame).dialog('widget').resize();
+
+    // Change [Next Step] button with [Save] button
+    buttons = {};
+    buttons[rcmail.get_label('save')] = function() {
+      var win = $('iframe', dialog).get(0).contentWindow;
+      win.rcmail.managesieve_save();
+    };
+    dialog.dialog('option', 'buttons', buttons);
+  };
+
+  // show dialog window
+  dialog.dialog({
+    modal: false,
+    resizable: true,
+    closeOnEscape: true,
+    title: this.get_label('managesieve.newfilter'),
+    close: function() { rcmail.managesieve_dialog_close(); },
+    buttons: buttons,
+    minWidth: 600,
+    minHeight: 300,
+    height: 250
+  }).show();
+
+  this.env.managesieve_dialog = dialog;
+}
+
+rcube_webmail.prototype.managesieve_dialog_close = function()
+{
+  var dialog = this.env.managesieve_dialog;
+
+  // BUG(?): if we don't remove the iframe first, it will be reloaded
+  dialog.html('');
+  dialog.dialog('destroy').hide();
+}
+
+rcube_webmail.prototype.managesieve_dialog_resize = function(o)
+{
+  var dialog = this.env.managesieve_dialog,
+    win = $(window), form = $(o);
+    width = $('fieldset:first', o).width(), // fieldset width is more appropriate here
+    height = form.height(),
+    w = win.width(), h = win.height();
+
+  dialog.dialog('option', { height: Math.min(h-20, height+120), width: Math.min(w-20, width+65) });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/managesieve.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,68 @@
+/**
+ * (Manage)Sieve Filters plugin
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&rcmail.addEventListener("init",function(a){"mail"==rcmail.env.task&&("show"!=rcmail.env.action?rcmail.env.message_commands.push("managesieve-create"):rcmail.enable_command("managesieve-create",!0));"mail"!=rcmail.env.task&&!rcmail.env.action.startsWith("plugin.managesieve")||rcmail.env.framed||(rcmail.env.ms_tip_layer=$('<div id="managesieve-tip" class="popupmenu"></div>'),rcmail.env.ms_tip_layer.appendTo(document.body));rcmail.register_command("plugin.managesieve-save",function(){rcmail.managesieve_save()});
+rcmail.register_command("plugin.managesieve-act",function(){rcmail.managesieve_act()});rcmail.register_command("plugin.managesieve-add",function(){rcmail.managesieve_add()});rcmail.register_command("plugin.managesieve-del",function(){rcmail.managesieve_del()});rcmail.register_command("plugin.managesieve-move",function(){rcmail.managesieve_move()});rcmail.register_command("plugin.managesieve-setadd",function(){rcmail.managesieve_setadd()});rcmail.register_command("plugin.managesieve-setdel",function(){rcmail.managesieve_setdel()});
+rcmail.register_command("plugin.managesieve-setact",function(){rcmail.managesieve_setact()});rcmail.register_command("plugin.managesieve-setget",function(){rcmail.managesieve_setget()});rcmail.register_command("plugin.managesieve-seteditraw",function(){rcmail.managesieve_seteditraw()});rcmail.env.action.startsWith("plugin.managesieve")&&(rcmail.gui_objects.sieveform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_form_init()):rcmail.gui_objects.sievesetrawform?(rcmail.enable_command("plugin.managesieve-save",
+!0),sieve_raw_editor_init()):rcmail.enable_command("plugin.managesieve-add","plugin.managesieve-setadd",!rcmail.env.sieveconnerror),a=rcmail.env.currentset,rcmail.gui_objects.filterslist&&(rcmail.filters_list=new rcube_list_widget(rcmail.gui_objects.filterslist,{multiselect:!1,draggable:!0,keyboard:!0}),rcmail.filters_list.addEventListener("select",function(a){rcmail.managesieve_select(a)}).addEventListener("dragstart",function(a){rcmail.managesieve_dragstart(a)}).addEventListener("dragend",function(a){rcmail.managesieve_dragend(a)}).addEventListener("initrow",
+function(a){a.obj.onmouseover=function(){rcmail.managesieve_focus_filter(a)};a.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(a)}}).init()),rcmail.gui_objects.filtersetslist&&(rcmail.filtersets_list=new rcube_list_widget(rcmail.gui_objects.filtersetslist,{multiselect:!1,draggable:!1,keyboard:!0}),rcmail.filtersets_list.init().focus(),null!=a&&(a=rcmail.managesieve_setid(a),rcmail.filtersets_list.select(a)),rcmail.filtersets_list.addEventListener("select",function(a){rcmail.managesieve_setselect(a)}),
+a=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact","plugin.managesieve-setget",0<a),rcmail.enable_command("plugin.managesieve-setdel",1<a),rcmail.enable_command("plugin.managesieve-seteditraw",0<a&&rcmail.env.raw_sieve_editor),$("tr",rcmail.gui_objects.filtersetslist).each(function(a,c){rcmail.managesieve_fixdragend(c)})));rcmail.gui_objects.sieveform&&rcmail.env.rule_disabled&&$("#disabled").attr("checked",!0)});
+rcube_webmail.prototype.managesieve_add=function(){this.load_managesieveframe("",!0)};rcube_webmail.prototype.managesieve_del=function(){var a=this.filters_list.get_single_selection();if(confirm(this.get_label("managesieve.filterdeleteconfirm"))){var b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=delete&_fid="+this.filters_list.rows[a].uid,b)}};
+rcube_webmail.prototype.managesieve_act=function(){var a=this.filters_list.get_single_selection(),b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=act&_fid="+this.filters_list.rows[a].uid,b)};rcube_webmail.prototype.managesieve_select=function(a){var b=a.get_single_selection();null!=b&&(b=a.rows[b].uid,this.load_managesieveframe("_fid="+b));this.enable_command("plugin.managesieve-act","plugin.managesieve-del","undefined"!=typeof b&&null!=b)};
+rcube_webmail.prototype.managesieve_setselect=function(a){this.show_contentframe(!1);this.filters_list.clear(!0);this.enable_command("plugin.managesieve-setdel",1<a.rowcount);this.enable_command("plugin.managesieve-setact","plugin.managesieve-setget",0<a.rowcount);this.enable_command("plugin.managesieve-seteditraw",0<a.rowcount&&this.env.raw_sieve_editor);a=a.get_single_selection();null!=a&&this.managesieve_list(this.env.filtersets[a])};
+rcube_webmail.prototype.managesieve_rowid=function(a){var b,c=this.filters_list.rows;for(b in c)if(null!=c[b]&&c[b].uid==a)return b};rcube_webmail.prototype.managesieve_setid=function(a){for(var b in this.env.filtersets)if(this.env.filtersets[b]==a)return b};rcube_webmail.prototype.managesieve_list=function(a){var b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=list&_set="+urlencode(a),b)};
+rcube_webmail.prototype.managesieve_setget=function(){var a=this.filtersets_list.get_single_selection();this.goto_url("plugin.managesieve-action",{_act:"setget",_set:this.env.filtersets[a]},!1,!0)};rcube_webmail.prototype.managesieve_setact=function(){var a=this.filtersets_list.get_single_selection(),b=this.set_busy(!0,"loading"),c=this.env.filtersets[a];a=$("#rcmrow"+a).hasClass("disabled")?"setact":"deact";this.http_post("plugin.managesieve-action","_act="+a+"&_set="+urlencode(c),b)};
+rcube_webmail.prototype.managesieve_setdel=function(){if(!confirm(this.get_label("managesieve.setdeleteconfirm")))return!1;var a=this.filtersets_list.get_single_selection(),b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=setdel&_set="+urlencode(this.env.filtersets[a]),b)};rcube_webmail.prototype.managesieve_seteditraw=function(){var a=this.filtersets_list.get_single_selection();this.load_managesieveframe("_seteditraw=1&_set="+urlencode(this.env.filtersets[a]),!0)};
+rcube_webmail.prototype.managesieve_setadd=function(){this.load_managesieveframe("_newset=1",!0)};
+rcube_webmail.prototype.managesieve_updatelist=function(a,b){this.set_busy(!0);switch(a){case "del":var c=b.id;a=this.filters_list;a.remove_row(this.managesieve_rowid(b.id));this.show_contentframe(!1);this.reset_filters_list();$("tr",this.filters_list.list).each(function(){if("none"==this.style.display)$(this).detach();else{var a=this.id.substr(6);$(this).off();a>c&&(this.uid=a-1,$(this).attr("id","rcmrow"+this.uid))}});a.init();break;case "update":var d=$("#rcmrow"+this.managesieve_rowid(b.id));
+b.name&&$("td",d).text(b.name);b.disabled?d.addClass("disabled"):d.removeClass("disabled");$("#disabled",$("iframe").contents()).prop("checked",b.disabled);break;case "add":a=this.filters_list;d=$('<tr><td class="name"></td></tr>');$("td",d).text(b.name);d.attr("id","rcmrow"+b.id);b.disabled&&d.addClass("disabled");a.insert_row(d.get(0));a.highlight_row(b.id);this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!0);break;case "list":a=this.filters_list;b.clear&&a.clear();for(d in b.list){var e=
+b.list[d];var g=document.createElement("TR");var l=document.createElement("TD");$(l).text(e.name);l.className="name";g.id="rcmrow"+e.id;e["class"]&&(g.className=e["class"]);g.appendChild(l);a.insert_row(g)}b.set?a.highlight_row(b.set):this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!1);break;case "setact":c=this.managesieve_setid(b.name);d=$("#rcmrow"+c);b.active?(b.all&&$("tr",this.gui_objects.filtersetslist).addClass("disabled"),d.removeClass("disabled")):d.addClass("disabled");
+break;case "setdel":c=this.managesieve_setid(b.name);this.filtersets_list.remove_row(c);this.filters_list.clear();this.show_contentframe(!1);this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget",!1);delete this.env.filtersets[c];break;case "setadd":c="S"+(new Date).getTime();a=this.filtersets_list;d=$('<tr class="disabled"><td class="name"></td></tr>');$("td",d).text(b.name);d.attr("id","rcmrow"+c);this.env.filtersets[c]=b.name;a.insert_row(d.get(0));
+b.index!=a.rowcount-1&&(d.detach(),b=$("tr:visible",a.list).get(b.index),d.insertBefore(b));a.select(c);this.managesieve_fixdragend(d);break;case "refresh":this.reset_filters_list(!0)}this.set_busy(!1)};rcube_webmail.prototype.reset_filters_list=function(a){this.filters_list.clear_selection();this.enable_command("plugin.managesieve-act","plugin.managesieve-del",!1);a&&(a=this.filtersets_list.get_single_selection(),this.filters_list.clear(!0),this.managesieve_list(this.env.filtersets[a]))};
+rcube_webmail.prototype.load_managesieveframe=function(a,b){b&&this.reset_filters_list();this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(b=this.set_busy(!0,"loading"),target=window.frames[this.env.contentframe],target.location.href=this.env.comm_path+"&_action=plugin.managesieve-action&_framed=1&_unlock="+b+(a?"&"+a:""))};rcube_webmail.prototype.managesieve_dragstart=function(a){a=this.filters_list.get_single_selection();this.drag_active=!0;this.drag_filter=a};
+rcube_webmail.prototype.managesieve_dragend=function(a){this.drag_active&&(this.drag_filter_target&&(a=this.set_busy(!0,"loading"),this.show_contentframe(!1),this.http_post("plugin.managesieve-action","_act=move&_fid="+this.drag_filter+"&_to="+this.drag_filter_target,a)),this.drag_active=!1)};rcube_webmail.prototype.managesieve_fixdragend=function(a){var b=this;$(a).on("mouseup"+(bw.iphone||bw.ipad?" touchend":""),function(a){b.drag_active&&b.filters_list.drag_mouse_up(a)})};
+rcube_webmail.prototype.managesieve_focus_filter=function(a){var b=a.id.replace(/^rcmrow/,"");this.drag_active&&b!=this.drag_filter&&(this.drag_filter_target=b,$(a.obj).addClass(b<this.drag_filter?"filtermoveup":"filtermovedown"))};rcube_webmail.prototype.managesieve_unfocus_filter=function(a){this.drag_active&&($(a.obj).removeClass("filtermoveup filtermovedown"),this.drag_filter_target=null)};
+rcube_webmail.prototype.managesieve_save=function(){if("plugin.managesieve-vacation"==this.env.action){var a=$(this.gui_objects.sieveform).serialize();this.http_post("plugin.managesieve-vacation",a,this.display_message(this.get_label("managesieve.vacation.saving"),"loading"))}else this.gui_objects.sieveform?(parent.rcmail&&parent.rcmail.filters_list&&"filtersetform"!=this.gui_objects.sieveform.name&&(a=parent.rcmail.filters_list.get_single_selection(),null!=a&&(this.gui_objects.sieveform.elements._fid.value=
+parent.rcmail.filters_list.rows[a].uid)),this.gui_objects.sieveform.submit()):this.gui_objects.sievesetrawform&&this.gui_objects.sievesetrawform.submit()};rcube_webmail.prototype.managesieve_ruleadd=function(a){this.http_post("plugin.managesieve-action","_act=ruleadd&_rid="+a)};
+rcube_webmail.prototype.managesieve_rulefill=function(a,b,c){if(""!=a){var d=document.getElementById("rules"),e=document.createElement("div");this.managesieve_insertrow(d,e,c);e.setAttribute("id","rulerow"+b);e.className="rulerow";e.innerHTML=a;$('textarea[data-type="list"]',e).each(function(){smart_field_init(this)});this.managesieve_formbuttons(d)}};
+rcube_webmail.prototype.managesieve_ruledel=function(a){!$("#ruledel"+a).hasClass("disabled")&&confirm(this.get_label("managesieve.ruledeleteconfirm"))&&(a=document.getElementById("rulerow"+a),a.parentNode.removeChild(a),this.managesieve_formbuttons(document.getElementById("rules")))};rcube_webmail.prototype.managesieve_actionadd=function(a){this.http_post("plugin.managesieve-action","_act=actionadd&_aid="+a)};
+rcube_webmail.prototype.managesieve_actionfill=function(a,b,c){if(""!=a){var d=document.getElementById("actions"),e=document.createElement("div");this.managesieve_insertrow(d,e,c);e.className="actionrow";e.setAttribute("id","actionrow"+b);e.innerHTML=a;$('textarea[data-type="list"]',e).each(function(){smart_field_init(this)});this.managesieve_formbuttons(d)}};
+rcube_webmail.prototype.managesieve_actiondel=function(a){!$("#actiondel"+a).hasClass("disabled")&&confirm(this.get_label("managesieve.actiondeleteconfirm"))&&(a=document.getElementById("actionrow"+a),a.parentNode.removeChild(a),this.managesieve_formbuttons(document.getElementById("actions")))};
+rcube_webmail.prototype.managesieve_insertrow=function(a,b,c){for(var d=0;d<a.childNodes.length&&a.childNodes[d].id!=("rules"==a.id?"rulerow":"actionrow")+c;d++);a.childNodes[d+1]?a.insertBefore(b,a.childNodes[d+1]):a.appendChild(b)};
+rcube_webmail.prototype.managesieve_formbuttons=function(a){var b,c=[];for(b=0;b<a.childNodes.length;b++)"rules"==a.id&&a.childNodes[b].id?/rulerow/.test(a.childNodes[b].id)&&c.push("ruledel"+a.childNodes[b].id.replace(/rulerow/,"")):a.childNodes[b].id&&/actionrow/.test(a.childNodes[b].id)&&c.push("actiondel"+a.childNodes[b].id.replace(/actionrow/,""));for(b=0;b<c.length;b++)a=document.getElementById(c[b]),0<b||1<c.length?$(a).removeClass("disabled"):$(a).addClass("disabled")};
+rcube_webmail.prototype.managesieve_vacation_addresses=function(a){var b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_act:"addresses",_aid:a},b)};rcube_webmail.prototype.managesieve_vacation_addresses_update=function(a,b){a=$("#vacation_addresses,#action_addresses"+(a||""));smart_field_reset(a.get(0),b)};
+function rule_header_select(a){var b=document.getElementById("header"+a),c=document.getElementById("rule_size"+a),d=document.getElementById("rule_message"+a),e=document.getElementById("rule_op"+a),g=document.getElementById("custom_header"+a+"_list"),l=document.getElementById("custom_var"+a+"_list"),k=document.getElementById("rule_mod"+a),m=document.getElementById("rule_trans"+a),q=document.getElementById("rule_comp"+a),r=document.getElementById("rule_date_part"+a),t=document.getElementById("rule_date_header_div"+
+a),n=$("#rule_op"+a),f=b.value,p=[e,g,l,k,m,q,c];"size"==f?(d&&p.push(d),$.each(p,function(){this.style.display="none"}),c.style.display="inline"):"message"==f&&d?($.each(p,function(){this.style.display="none"}),d.style.display="inline"):(g.style.display="..."!=f?"none":"inline-block",l.style.display="string"!=f?"none":"inline-block",c.style.display="none",e.style.display="inline",q.style.display="",k.style.display="body"==f||"currentdate"==f||"date"==f||"string"==f?"none":"block",m.style.display=
+"body"==f?"block":"none",d&&(d.style.display="message"==f?"block":"none"));r&&(r.style.display="currentdate"==f||"date"==f?"inline":"none");t&&(t.style.display="date"==f?"":"none");$('[value="exists"],[value="notexists"]',n).prop("disabled","string"==f);n.val()||n.val("contains");rule_op_select(e,a,f);rule_mod_select(a,f);b.style.width="..."==f?"40px":""}
+function rule_op_select(a,b,c){var d=document.getElementById("rule_target"+b+"_list");c||(c=document.getElementById("header"+b).value);d.style.display=a.value.match(/^(exists|notexists)$/)||c.match(/^(size|message)$/)?"none":"inline-block"}function rule_trans_select(a){var b=document.getElementById("rule_trans_op"+a);document.getElementById("rule_trans_type"+a).style.display="content"!=b.value?"none":"inline"}
+function rule_mod_select(a,b){var c=document.getElementById("rule_mod_op"+a),d=document.getElementById("rule_mod_type"+a),e=document.getElementById("rule_duplicate_div"+a),g=document.getElementById("rule_index_div"+a);b||(b=document.getElementById("header"+a).value);d.style.display="address"!=c.value&&"envelope"!=c.value?"none":"inline";g&&(g.style.display=b.match(/^(body|currentdate|size|message|string)$/)||"envelope"==c.value?"none":"");e&&(e.style.display="message"==b?"":"none")}
+function rule_join_radio(a){$("#rules").css("display","any"==a?"none":"block")}function rule_adv_switch(a,b){b=$(b);var c=b.hasClass("hide");a=$("#rule_advanced"+a);c?(a.hide(),b.removeClass("hide").addClass("show")):(a.show(),b.removeClass("show").addClass("hide"))}
+function action_type_select(a){var b=document.getElementById("action_type"+a).value,c={};a={mailbox:document.getElementById("action_mailbox"+a),target:document.getElementById("redirect_target"+a),target_area:document.getElementById("action_target_area"+a),flags:document.getElementById("action_flags"+a),vacation:document.getElementById("action_vacation"+a),set:document.getElementById("action_set"+a),notify:document.getElementById("action_notify"+a)};"fileinto"==b||"fileinto_copy"==b?c.mailbox=1:"redirect"==
+b||"redirect_copy"==b?c.target=1:b.match(/^reject|ereject$/)?c.target_area=1:b.match(/^(add|set|remove)flag$/)?c.flags=1:"vacation"==b?c.vacation=1:"set"==b?c.set=1:"notify"==b&&(c.notify=1);for(var d in a)a[d].style.display=c[d]?"inline":"none"}function vacation_action_select(){var a=$("#vacation_action").val();$("#action_target_span")["discard"==a||"keep"==a?"hide":"show"]()}
+function smart_field_init(a){var b=a.id+"_list",c=$('<span class="listarea"></span>'),d=a.value?a.value.split("\n"):[""];$("#"+b).length||($.each(d,function(b,d){c.append(smart_field_row(d,a.name,b,$(a).data("size")))}),c.attr("id",b),a=$(a),a.attr("disabled")?c.hide():a.prop("disabled",!0),a.after(c),a.hasClass("error")&&(c.addClass("error"),rcmail.managesieve_tip_register([[b,a.data("tip")]])))}
+function smart_field_row(a,b,c,d){c=$('<span class="listelement"><span class="reset"></span><input type="text"></span>');a={value:a,name:b+"[]"};d&&(a.size=d);$("input",c).attr(a).keydown(function(a){var b=$(this);if(13==a.which){a=b.attr("name").replace(/\[\]$/,"");var c=(new Date).getTime();a=smart_field_row("",a,c,d);b.parent().after(a);$("input",a).focus()}else if((8==a.which||46==a.which)&&""==b.val()&&(b=b.parent(),1<b.parent().children().length))return b.prev().length?b.prev().children("input").focus():
+b.next().children("input").focus(),b.remove(),!1});$('span[class="reset"]',c).click(function(){var a=$(this.parentNode);1<a.parent().children().length?a.remove():$("input",a).val("").focus()});return c}function smart_field_reset(a,b){b=b.length?b:[""];area=$("#"+(a.id+"_list"));area.empty();$.each(b,function(b,d){area.append(smart_field_row(d,a.name,b,$(a).data("size")))})}
+rcube_webmail.prototype.managesieve_tip_register=function(a){var b,c=parent.rcmail,d=c?parent.rcmail.env.ms_tip_layer:rcmail.env.ms_tip_layer;for(b in a)$("#"+a[b][0]).data("tip",a[b][1]).mouseleave(function(a){d.hide()}).mouseenter(function(a){a=$(this);var b=a.offset(),e=b.left,k=b.top-12,m=a.width();c&&(b=$("mail"==rcmail.env.task?"#sievefilterform > iframe":"#filter-box",parent.document).offset(),k+=b.top,e+=b.left);d.html(a.data("tip"));k-=d.height();d.css({left:e,top:k,minWidth:m-2+"px"}).show()})};
+function sieve_formattime(a,b){var c,d="",e=rcmail.env.time_format||"H:i";for(c=0;c<e.length;c++){var g=e.charAt(c);switch(g){case "a":d+=12<=a?"pm":"am";break;case "A":d+=12<=a?"PM":"AM";break;case "g":case "h":d+=("h"==g&&10>a?"0":"")+a;break;case "G":d+=a;break;case "H":d+=(10>a?"0":"")+a;break;case "i":d+=(10>b?"0":"")+b;break;case "s":d+="00";default:d+=g}}return d}
+function sieve_form_init(){var a=rcmail.gui_objects.sieveform;"plugin.managesieve"==rcmail.env.action&&"mail"==rcmail.env.task&&parent.rcmail.managesieve_dialog_resize(a);$('input[type="text"]:first',a).focus();$('textarea[data-type="list"]',a).each(function(){smart_field_init(this)});$('[name="_header[]"]',a).each(function(){/([0-9]+)$/.test(this.id)&&rule_header_select(RegExp.$1)});$.datepicker&&rcmail.env.date_format&&($.datepicker.setDefaults({dateFormat:rcmail.env.date_format,changeMonth:!0,
+showOtherMonths:!0,selectOtherMonths:!0,onSelect:function(a){$(this).focus().val(a)}}),$("input.datepicker").datepicker());$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(a,c){var b=[];for(a=0;24>a;a++)b.push(sieve_formattime(a,0));b.push(sieve_formattime(23,59));return c(b)},open:function(a,c){a=$(this);var b=a.val();c=a.autocomplete("widget").css("width","10em");var e=a.data("ui-autocomplete").menu;b&&b.length&&c.children().each(function(){var a=
+$(this);0==a.text().indexOf(b)&&e._scrollIntoView(a)})},select:function(a,c){$(this).val(c.item.value);return!1}}).click(function(){$(this).autocomplete("search",$(this).val()||" ")});$("input.error").each(function(){String(this.id).match(/([0-9]+)$/)&&$("#ruleadv"+RegExp.$1+".show").click()})}var cmeditor;function cmCreateErrorElem(a){var b=document.createElement("div");b.style.color="#822";b.innerHTML="\u25cf";b.title=a;return b}
+function cmScrollToError(){var a=$(".CodeMirror-lines .line-error"),b=$(".CodeMirror-scroll");a.parent();b.scrollTop(a.offset().top-b.offset().top-Math.round(b.height()/2))}
+function sieve_raw_editor_init(){var a=document.getElementById("rawfiltersettxt");a&&!cmeditor&&(cmeditor=CodeMirror.fromTextArea(a,{mode:"sieve",lineNumbers:!0,gutters:["CodeMirror-linenumbers","errorGutter"],styleActiveLine:!0}),$.each(rcmail.env.sieve_errors||[],function(a,c){var b=Number(c.line)-1;cmeditor.addLineClass(b,"background","line-error");cmeditor.setGutterMarker(b,"errorGutter",cmCreateErrorElem(c.msg));a||cmScrollToError()}))}
+rcube_webmail.prototype.managesieve_create=function(a){if(!a&&"show"!=this.env.action){var b=this.message_list.get_single_selection();a=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_uid:b},a)}else if(this.env.sieve_headers&&this.env.sieve_headers.length){var c={},d=$("#sievefilterform");d.length||(d=$('<div id="sievefilterform"></div>'),$("body").append(d));a="<fieldset><legend>"+this.get_label("managesieve.usedata")+"</legend><ul>";for(b in this.env.sieve_headers)a+='<li><input type="checkbox" name="headers[]" id="sievehdr'+
+b+'" value="'+b+'" checked="checked" /><label for="sievehdr'+b+'">'+this.env.sieve_headers[b][0]+":</label> "+this.env.sieve_headers[b][1]+"</li>";d.html(a+"</ul></fieldset>");c[this.get_label("managesieve.nextstep")]=function(){var a=$('input[name="headers[]"]:checked',d);if(a.length){var b=rcmail.get_task_url("mail");b=rcmail.add_url(b,"_action","plugin.managesieve");b=rcmail.add_url(b,"_framed",1);a.map(function(){var a=rcmail.env.sieve_headers[this.value];b=rcmail.add_url(b,"r["+this.value+"]",
+a[0]+":"+a[1])});a=$("<iframe>").attr({src:b,frameborder:0});d.empty().append(a).dialog("widget").resize();c={};c[rcmail.get_label("save")]=function(){$("iframe",d).get(0).contentWindow.rcmail.managesieve_save()};d.dialog("option","buttons",c)}else alert(rcmail.get_label("managesieve.nodata"))};d.dialog({modal:!1,resizable:!0,closeOnEscape:!0,title:this.get_label("managesieve.newfilter"),close:function(){rcmail.managesieve_dialog_close()},buttons:c,minWidth:600,minHeight:300,height:250}).show();this.env.managesieve_dialog=
+d}};rcube_webmail.prototype.managesieve_dialog_close=function(){var a=this.env.managesieve_dialog;a.html("");a.dialog("destroy").hide()};rcube_webmail.prototype.managesieve_dialog_resize=function(a){var b=this.env.managesieve_dialog,c=$(window),d=$(a);width=$("fieldset:first",a).width();height=d.height();w=c.width();h=c.height();b.dialog("option",{height:Math.min(h-20,height+120),width:Math.min(w-20,width+65)})};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/managesieve.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,291 @@
+<?php
+
+/**
+ * Managesieve (Sieve Filters)
+ *
+ * Plugin that adds a possibility to manage Sieve filters in Thunderbird's style.
+ * It's clickable interface which operates on text scripts and communicates
+ * with server using managesieve protocol. Adds Filters tab in Settings.
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * Configuration (see config.inc.php.dist)
+ *
+ * Copyright (C) 2008-2013, The Roundcube Dev Team
+ * Copyright (C) 2011-2013, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class managesieve extends rcube_plugin
+{
+    public $task = 'mail|settings';
+    private $rc;
+    private $engine;
+
+    function init()
+    {
+        $this->rc = rcube::get_instance();
+
+        // register actions
+        $this->register_action('plugin.managesieve', array($this, 'managesieve_actions'));
+        $this->register_action('plugin.managesieve-action', array($this, 'managesieve_actions'));
+        $this->register_action('plugin.managesieve-vacation', array($this, 'managesieve_actions'));
+        $this->register_action('plugin.managesieve-save', array($this, 'managesieve_save'));
+        $this->register_action('plugin.managesieve-saveraw', array($this, 'managesieve_saveraw'));
+
+        if ($this->rc->task == 'settings') {
+            $this->add_hook('settings_actions', array($this, 'settings_actions'));
+            $this->init_ui();
+        }
+        else if ($this->rc->task == 'mail') {
+            // register message hook
+            if ($this->rc->action == 'show') {
+                $this->add_hook('message_headers_output', array($this, 'mail_headers'));
+            }
+
+            // inject Create Filter popup stuff
+            if (empty($this->rc->action) || $this->rc->action == 'show'
+                || strpos($this->rc->action, 'plugin.managesieve') === 0
+            ) {
+                $this->mail_task_handler();
+            }
+        }
+    }
+
+    /**
+     * Initializes plugin's UI (localization, js script)
+     */
+    function init_ui()
+    {
+        if ($this->ui_initialized) {
+            return;
+        }
+
+        // load localization
+        $this->add_texts('localization/');
+
+        $sieve_action = strpos($this->rc->action, 'plugin.managesieve') === 0;
+
+        if ($this->rc->task == 'mail' || $sieve_action) {
+            $this->include_script('managesieve.js');
+        }
+
+        // include styles
+        $skin_path = $this->local_skin_path();
+        if ($sieve_action || ($this->rc->task == 'settings' && empty($_REQUEST['_framed']))) {
+            $this->include_stylesheet("$skin_path/managesieve.css");
+        }
+        else if ($this->rc->task == 'mail') {
+            $this->include_stylesheet("$skin_path/managesieve_mail.css");
+        }
+
+        $this->ui_initialized = true;
+    }
+
+    /**
+     * Adds Filters section in Settings
+     */
+    function settings_actions($args)
+    {
+        $this->load_config();
+
+        $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
+
+        // register Filters action
+        if ($vacation_mode != 2) {
+            $args['actions'][] = array(
+                'action' => 'plugin.managesieve',
+                'class'  => 'filter',
+                'label'  => 'filters',
+                'domain' => 'managesieve',
+                'title'  => 'filterstitle',
+            );
+        }
+
+        // register Vacation action
+        if ($vacation_mode > 0) {
+            $args['actions'][] = array(
+                'action' => 'plugin.managesieve-vacation',
+                'class'  => 'vacation',
+                'label'  => 'vacation',
+                'domain' => 'managesieve',
+                'title'  => 'vacationtitle',
+            );
+        }
+
+        return $args;
+    }
+
+    /**
+     * Add UI elements to the 'mailbox view' and 'show message' UI.
+     */
+    function mail_task_handler()
+    {
+        // make sure we're not in ajax request
+        if ($this->rc->output->type != 'html') {
+            return;
+        }
+
+        // use jQuery for popup window
+        $this->require_plugin('jqueryui');
+
+        // include js script and localization
+        $this->init_ui();
+
+        // add 'Create filter' item to message menu
+        $this->api->add_content(html::tag('li', null, 
+            $this->api->output->button(array(
+                'command'  => 'managesieve-create',
+                'label'    => 'managesieve.filtercreate',
+                'type'     => 'link',
+                'classact' => 'icon filterlink active',
+                'class'    => 'icon filterlink',
+                'innerclass' => 'icon filterlink',
+            ))), 'messagemenu');
+
+        // register some labels/messages
+        $this->rc->output->add_label('managesieve.newfilter', 'managesieve.usedata',
+            'managesieve.nodata', 'managesieve.nextstep', 'save');
+
+        $this->rc->session->remove('managesieve_current');
+    }
+
+    /**
+     * Get message headers for popup window
+     */
+    function mail_headers($args)
+    {
+        // this hook can be executed many times
+        if ($this->mail_headers_done) {
+            return $args;
+        }
+
+        $this->mail_headers_done = true;
+
+        $headers = $this->parse_headers($args['headers']);
+
+        if ($this->rc->action == 'preview')
+            $this->rc->output->command('parent.set_env', array('sieve_headers' => $headers));
+        else
+            $this->rc->output->set_env('sieve_headers', $headers);
+
+        return $args;
+    }
+
+    /**
+     * Plugin action handler
+     */
+    function managesieve_actions()
+    {
+        // handle fetching email headers for the new filter form
+        if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST)) {
+            $uids    = rcmail::get_uids();
+            $mailbox = key($uids);
+            $message = new rcube_message($uids[$mailbox][0], $mailbox);
+            $headers = $this->parse_headers($message->headers);
+
+            $this->rc->output->set_env('sieve_headers', $headers);
+            $this->rc->output->command('managesieve_create', true);
+            $this->rc->output->send();
+        }
+
+        // handle other actions
+        $engine_type = $this->rc->action == 'plugin.managesieve-vacation' ? 'vacation' : '';
+        $engine      = $this->get_engine($engine_type);
+
+        $this->init_ui();
+        $engine->actions();
+    }
+
+    /**
+     * Forms save action handler
+     */
+    function managesieve_save()
+    {
+        // load localization
+        $this->add_texts('localization/', array('filters','managefilters'));
+
+        // include main js script
+        if ($this->api->output->type == 'html') {
+            $this->include_script('managesieve.js');
+        }
+
+        $engine = $this->get_engine();
+        $engine->save();
+    }
+
+    /**
+     * Raw form save action handler
+     */
+    function managesieve_saveraw()
+    {
+        $engine = $this->get_engine();
+
+        if (!$this->rc->config->get('managesieve_raw_editor', true)) {
+            return;
+        }
+
+        // load localization
+        $this->add_texts('localization/', array('filters','managefilters'));
+
+        $engine->saveraw();
+    }
+
+    /**
+     * Initializes engine object
+     */
+    public function get_engine($type = null)
+    {
+        if (!$this->engine) {
+            $this->load_config();
+
+            // Add include path for internal classes
+            $include_path = $this->home . '/lib' . PATH_SEPARATOR;
+            $include_path .= ini_get('include_path');
+            set_include_path($include_path);
+
+            $class_name = 'rcube_sieve_' . ($type ?: 'engine');
+            $this->engine = new $class_name($this);
+        }
+
+        return $this->engine;
+    }
+
+    /**
+     * Extract mail headers for new filter form
+     */
+    private function parse_headers($headers)
+    {
+        $result = array();
+
+        if ($headers->subject)
+            $result[] = array('Subject', rcube_mime::decode_header($headers->subject));
+
+        // @TODO: List-Id, others?
+        foreach (array('From', 'To') as $h) {
+            $hl = strtolower($h);
+            if ($headers->$hl) {
+                $list = rcube_mime::decode_address_list($headers->$hl);
+                foreach ($list as $item) {
+                    if ($item['mailto']) {
+                        $result[] = array($h, $item['mailto']);
+                    }
+                }
+            }
+        }
+
+        return $result;
+    }
+}
Binary file plugins/managesieve/skins/classic/images/add.png has changed
Binary file plugins/managesieve/skins/classic/images/del.png has changed
Binary file plugins/managesieve/skins/classic/images/down_small.gif has changed
Binary file plugins/managesieve/skins/classic/images/erase.png has changed
Binary file plugins/managesieve/skins/classic/images/filter.png has changed
Binary file plugins/managesieve/skins/classic/images/up_small.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/managesieve.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,481 @@
+#filtersetslistbox
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 195px;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#filtersscreen
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 205px;
+}
+
+#filterslistbox
+{
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  overflow: auto;
+}
+
+#filterslist,
+#filtersetslist
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#filterslist tbody td,
+#filtersetslist tbody td
+{
+  cursor: default;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#filterslist tbody tr.disabled td,
+#filtersetslist tbody tr.disabled td
+{
+  color: #999999;
+	text-decoration: line-through;
+}
+
+#filtersetslist tbody td
+{
+  font-weight: bold;
+}
+/*
+#filtersetslist tr.selected
+{
+  background-color: #929292;
+  border-bottom: 1px solid #898989;
+  color: #FFF;
+  font-weight: bold;
+}
+*/
+
+#filterslist tbody tr.filtermoveup td
+{
+  border-top: 2px dotted #555;
+  padding-top: 0px;
+}
+
+#filterslist tbody tr.filtermovedown td
+{
+  border-bottom: 2px dotted #555;
+  padding-bottom: 1px;
+}
+
+#filter-box
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  overflow: hidden;
+}
+
+#filter-frame
+{
+  border: none;
+}
+
+body.iframe
+{
+  min-width: 620px;
+  width: expression(Math.max(620, document.documentElement.clientWidth)+'px');
+  background-color: #F2F2F2;
+}
+
+#filter-form
+{
+  min-width: 550px;
+  width: expression(Math.max(550, document.documentElement.clientWidth)+'px');
+  white-space: nowrap;
+  padding: 20px 10px 10px 10px;
+}
+
+#filter-form legend, #filter-form label
+{
+  color: #666666;
+}
+
+#rules, #actions
+{
+  margin-top: 5px;
+  padding: 0;
+  border-collapse: collapse;
+}
+
+div.rulerow, div.actionrow
+{
+  width: auto;
+  padding: 2px;
+  white-space: nowrap;
+  border: 1px solid #F2F2F2;
+}
+
+div.rulerow:hover, div.actionrow:hover
+{
+  padding: 2px;
+  white-space: nowrap;
+  background: #F9F9F9;
+  border: 1px solid silver;
+}
+
+div.rulerow table, div.actionrow table
+{
+  padding: 0px;
+  min-width: 600px;
+  width: expression(Math.max(600, document.documentElement.clientWidth)+'px');
+}
+
+td
+{
+  vertical-align: top;
+}
+
+td.advbutton
+{
+  width: 1%;
+}
+
+td.advbutton a
+{
+  display: block;
+  padding-top: 14px;
+  height: 6px;
+  width: 12px;
+  text-decoration: none;
+}
+
+td.advbutton a.show
+{
+  background: url(images/down_small.gif?v=8629.106) center no-repeat;
+}
+
+td.advbutton a.hide
+{
+  background: url(images/up_small.gif?v=c56c.106) center no-repeat;
+}
+
+td.rowbuttons
+{
+  text-align: right;
+  white-space: nowrap;
+  width: 1%;
+}
+
+td.rowactions
+{
+  white-space: nowrap;
+  width: 1%;
+  padding-top: 2px;
+}
+
+td.rowtargets
+{
+  white-space: nowrap;
+  width: 98%;
+  padding-left: 3px;
+  padding-top: 2px;
+}
+
+td.rowtargets > div
+{
+  vertical-align: top;
+  margin-top: 2px;
+}
+
+td.rowtargets div.adv
+{
+  padding-top: 3px;
+}
+
+td.rowtargets div.adv span.label
+{
+  display: inline-block;
+  padding-right: 10px;
+  min-width: 65px;
+}
+
+td.rowtargets div a
+{
+  margin-left: 10px;
+}
+
+td.rowtargets div.adv input
+{
+  margin-bottom: 1px;
+}
+
+html.mozilla #filter-form select
+{
+  padding-top: 3px;
+  padding-bottom: 3px;
+}
+
+input.disabled, input.disabled:hover
+{
+  color: #999999;
+}
+
+input.error, textarea.error
+{
+  background-color: #FFFF88;
+}
+
+input.box,
+input.radio
+{
+  border: 0;
+  margin-top: 0;
+}
+
+select.operator_selector
+{
+  width: 200px;
+  vertical-align: top;
+}
+
+td.rowtargets span,
+td.rowtargets label,
+span.label
+{
+  color: #666666;
+  font-size: 10px;
+  white-space: nowrap;
+}
+
+td.rowtargets label
+{
+  color: black;
+}
+
+#footer
+{
+  padding-top: 5px;
+  width: 100%;
+}
+
+#footer .footerleft
+{
+  padding-left: 2px;
+  white-space: nowrap;
+  float: left;
+}
+
+#footer .footerright
+{
+  padding-right: 2px;
+  white-space: nowrap;
+  text-align: right;
+  float: right;
+}
+
+.itemlist
+{
+  line-height: 25px;
+}
+
+.itemlist input
+{
+  vertical-align: middle;
+}
+
+span.sieve.error
+{
+  color: red;
+}
+
+a.button.add
+{
+  background: url(images/add.png?v=a165.280) no-repeat;
+  width: 30px;
+  height: 20px;
+  margin-right: 4px;
+  display: inline-block;
+}
+
+a.button.del
+{
+  background: url(images/del.png?v=3c27.247) no-repeat;
+  width: 30px;
+  height: 20px;
+  display: inline-block;
+}
+
+a.button.disabled
+{
+  opacity: 0.35;
+  filter: alpha(opacity=35);
+  cursor: default;
+}
+
+#filter-form select,
+#filter-form input,
+#filter-form textarea
+{
+  font-size: 11px;
+  vertical-align: middle;
+}
+
+/* smart multi-row input field */
+.listarea
+{
+  border: 1px solid #666;
+  margin: 0;
+  padding: 1px;
+  display: inline-block;
+  max-height: 67px;
+  overflow-y: auto;
+  vertical-align: middle;
+}
+
+td.rowtargets > span.listarea
+{
+  vertical-align: top;
+  margin-top: 2px;
+}
+
+.listelement
+{
+  display: block;
+  white-space: nowrap;
+  background-color: #fff;
+  border-top: 1px solid #e2e2e2;
+  height: 16px;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  line-height: 16px;
+}
+
+.listarea.error .listelement
+{
+  background-color: #FFFFC4;
+}
+
+.listelement:first-child
+{
+  border-top: none;
+}
+
+#filter-form .listelement input
+{
+  border: none;
+  border-radius: 0;
+  box-shadow: none;
+  outline: none;
+  vertical-align: top;
+  height: 16px;
+  padding-top: 0;
+  padding-bottom: 0;
+  line-height: 16px;
+  background-color: transparent;
+}
+
+.listelement input:focus
+{
+  box-shadow: none;
+}
+
+.listelement .reset
+{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  background: url(images/erase.png?v=3052.453) -1px 0 no-repeat #eee;
+  cursor: pointer;
+}
+
+
+/* fixes for popup window */
+
+body.iframe.mail
+{
+  margin: 0;
+  padding: 0;
+}
+
+body.iframe.mail #filter-form
+{
+  padding: 10px 5px 5px 5px;
+}
+
+#vacationform .listarea {
+  max-height: 75px;
+}
+
+#vacationform .listelement,
+#vacationform .listelement .reset {
+  height: 18px;
+}
+
+#vacationform .listelement .reset {
+  background-position: -1px 1px;
+}
+
+#vacationform .listelement input {
+  vertical-align: top;
+  border: 0;
+}
+
+#vacationform input.button {
+  margin-left: 10px;
+}
+
+/* RAW editor and CodeMirror overrides */
+
+.raweditor textarea {
+  border: none;
+  border-radius: 0;
+  max-width: none !important;
+  box-shadow: none;
+  font-family: monospace;
+  width: 99%;
+  min-height: 300px;
+}
+
+.raweditor textarea,
+.raweditor .CodeMirror {
+  position: absolute;
+  top: 34px;
+  bottom: 45px;
+  right: 0;
+  left: 0;
+  height: auto;
+  background-color: #fdfdfd;
+  border-bottom: 1px solid #eee;
+}
+
+.raweditor .CodeMirror-linebackground.line-error {
+  background-color: #f00;
+  opacity: 0.4;
+}
+
+.raweditor .errorGutter {
+  width: 0.8em;
+}
+
+.raweditor #footer {
+  position: absolute;
+  bottom: 5px;
+}
+
+body.iframe.raweditor {
+  min-width: 100px;
+  overflow: hidden;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/managesieve.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#filtersetslistbox{position:absolute;top:0;bottom:0;left:0;width:195px;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#filtersscreen{position:absolute;top:0;right:0;bottom:0;left:205px}#filterslistbox{position:absolute;left:0;top:0;bottom:0;border:1px solid #999;overflow:auto}#filterslist,#filtersetslist{width:100%;table-layout:fixed}#filterslist tbody td,#filtersetslist tbody td{cursor:default;text-overflow:ellipsis;-o-text-overflow:ellipsis}#filterslist tbody tr.disabled td,#filtersetslist tbody tr.disabled td{color:#999;text-decoration:line-through}#filtersetslist tbody td{font-weight:bold}#filterslist tbody tr.filtermoveup td{border-top:2px dotted #555;padding-top:0}#filterslist tbody tr.filtermovedown td{border-bottom:2px dotted #555;padding-bottom:1px}#filter-box{position:absolute;top:0;right:0;bottom:0;border:1px solid #999;overflow:hidden}#filter-frame{border:0}body.iframe{min-width:620px;width:expression(Math.max(620,document.documentElement.clientWidth)+'px');background-color:#f2f2f2}#filter-form{min-width:550px;width:expression(Math.max(550,document.documentElement.clientWidth)+'px');white-space:nowrap;padding:20px 10px 10px 10px}#filter-form legend,#filter-form label{color:#666}#rules,#actions{margin-top:5px;padding:0;border-collapse:collapse}div.rulerow,div.actionrow{width:auto;padding:2px;white-space:nowrap;border:1px solid #f2f2f2}div.rulerow:hover,div.actionrow:hover{padding:2px;white-space:nowrap;background:#f9f9f9;border:1px solid silver}div.rulerow table,div.actionrow table{padding:0;min-width:600px;width:expression(Math.max(600,document.documentElement.clientWidth)+'px')}td{vertical-align:top}td.advbutton{width:1%}td.advbutton a{display:block;padding-top:14px;height:6px;width:12px;text-decoration:none}td.advbutton a.show{background:url(images/down_small.gif?v=8629.106) center no-repeat}td.advbutton a.hide{background:url(images/up_small.gif?v=c56c.106) center no-repeat}td.rowbuttons{text-align:right;white-space:nowrap;width:1%}td.rowactions{white-space:nowrap;width:1%;padding-top:2px}td.rowtargets{white-space:nowrap;width:98%;padding-left:3px;padding-top:2px}td.rowtargets>div{vertical-align:top;margin-top:2px}td.rowtargets div.adv{padding-top:3px}td.rowtargets div.adv span.label{display:inline-block;padding-right:10px;min-width:65px}td.rowtargets div a{margin-left:10px}td.rowtargets div.adv input{margin-bottom:1px}html.mozilla #filter-form select{padding-top:3px;padding-bottom:3px}input.disabled,input.disabled:hover{color:#999}input.error,textarea.error{background-color:#ff8}input.box,input.radio{border:0;margin-top:0}select.operator_selector{width:200px;vertical-align:top}td.rowtargets span,td.rowtargets label,span.label{color:#666;font-size:10px;white-space:nowrap}td.rowtargets label{color:black}#footer{padding-top:5px;width:100%}#footer .footerleft{padding-left:2px;white-space:nowrap;float:left}#footer .footerright{padding-right:2px;white-space:nowrap;text-align:right;float:right}.itemlist{line-height:25px}.itemlist input{vertical-align:middle}span.sieve.error{color:red}a.button.add{background:url(images/add.png?v=a165.280) no-repeat;width:30px;height:20px;margin-right:4px;display:inline-block}a.button.del{background:url(images/del.png?v=3c27.247) no-repeat;width:30px;height:20px;display:inline-block}a.button.disabled{opacity:.35;filter:alpha(opacity=35);cursor:default}#filter-form select,#filter-form input,#filter-form textarea{font-size:11px;vertical-align:middle}.listarea{border:1px solid #666;margin:0;padding:1px;display:inline-block;max-height:67px;overflow-y:auto;vertical-align:middle}td.rowtargets>span.listarea{vertical-align:top;margin-top:2px}.listelement{display:block;white-space:nowrap;background-color:#fff;border-top:1px solid #e2e2e2;height:16px;padding:0;margin:0;overflow:hidden;line-height:16px}.listarea.error .listelement{background-color:#ffffc4}.listelement:first-child{border-top:0}#filter-form .listelement input{border:0;border-radius:0;box-shadow:none;outline:0;vertical-align:top;height:16px;padding-top:0;padding-bottom:0;line-height:16px;background-color:transparent}.listelement input:focus{box-shadow:none}.listelement .reset{display:inline-block;width:16px;height:16px;background:url(images/erase.png?v=3052.453) -1px 0 no-repeat #eee;cursor:pointer}body.iframe.mail{margin:0;padding:0}body.iframe.mail #filter-form{padding:10px 5px 5px 5px}#vacationform .listarea{max-height:75px}#vacationform .listelement,#vacationform .listelement .reset{height:18px}#vacationform .listelement .reset{background-position:-1px 1px}#vacationform .listelement input{vertical-align:top;border:0}#vacationform input.button{margin-left:10px}.raweditor textarea{border:0;border-radius:0;max-width:none !important;box-shadow:none;font-family:monospace;width:99%;min-height:300px}.raweditor textarea,.raweditor .CodeMirror{position:absolute;top:34px;bottom:45px;right:0;left:0;height:auto;background-color:#fdfdfd;border-bottom:1px solid #eee}.raweditor .CodeMirror-linebackground.line-error{background-color:red;opacity:.4}.raweditor .errorGutter{width:.8em}.raweditor #footer{position:absolute;bottom:5px}body.iframe.raweditor{min-width:100px;overflow:hidden}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/managesieve_mail.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+#messagemenu li a.filterlink {
+  background-image: url(images/filter.png?v=b0fe.547);
+  background-position: 7px 1px;
+}
+
+#sievefilterform {
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  background-color: #F2F2F2;
+  border: 1px solid #999999;
+  padding: 0;
+  margin: 5px;
+}
+
+#sievefilterform iframe {
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  width: 100%;
+  min-height: 100%; /* Chrome 14 bug */
+  background-color: #F2F2F2;
+  border: 0;
+  padding: 0;
+  margin: 0;
+}
+
+#sievefilterform ul {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  margin-top: 5px;
+}
+
+#sievefilterform fieldset {
+  margin: 5px;
+}
+
+#sievefilterform ul li {
+  margin-bottom: 5px;
+  white-space: nowrap;
+}
+
+#sievefilterform ul li input {
+  margin-right: 5px;
+}
+
+#sievefilterform label {
+  font-weight: bold;
+}
+
+#managesieve-tip
+{
+  z-index: 100000;
+}
+
+span.sieve.error
+{
+  color: red;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/managesieve_mail.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#messagemenu li a.filterlink{background-image:url(images/filter.png?v=b0fe.547);background-position:7px 1px}#sievefilterform{top:0;bottom:0;left:0;right:0;background-color:#f2f2f2;border:1px solid #999;padding:0;margin:5px}#sievefilterform iframe{top:0;bottom:0;left:0;right:0;width:100%;min-height:100%;background-color:#f2f2f2;border:0;padding:0;margin:0}#sievefilterform ul{list-style:none;padding:0;margin:0;margin-top:5px}#sievefilterform fieldset{margin:5px}#sievefilterform ul li{margin-bottom:5px;white-space:nowrap}#sievefilterform ul li input{margin-right:5px}#sievefilterform label{font-weight:bold}#managesieve-tip{z-index:100000}span.sieve.error{color:red}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/templates/filteredit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe<roundcube:exp expression="env:task != 'mail' ? '' : ' mail'" />">
+
+<roundcube:if condition="env:task != 'mail'" />
+<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.filterdef" /></div>
+<roundcube:endif />
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filterform" />
+
+<roundcube:if condition="env:task != 'mail'" />
+<div id="footer">
+<div class="footerleft">
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+</div>
+<div class="footerright">
+<label for="disabled"><roundcube:label name="managesieve.filterdisabled" /></label>
+<input type="checkbox" id="disabled" name="_disabled" value="1" />
+</div>
+</div>
+<roundcube:endif />
+
+</form>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/templates/managesieve.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+
+<style type="text/css">
+#filterslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; }
+#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px; }
+#filtersetslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2-5 : 175" />px; }
+#filtersscreen { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185" />px; }
+</style>
+
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="filtersetslistbox">
+<div id="filtersetslist-title" class="boxtitle"><roundcube:label name="managesieve.filtersets" /></div>
+<div class="boxlistcontent">
+  <roundcube:object name="filtersetslist" id="filtersetslist" class="records-table" cellspacing="0" summary="Filters list" type="list" noheader="true" />
+</div>
+<div class="boxfooter">
+  <roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="buttonPas addfilterset" classAct="button addfilterset" content=" " />
+  <roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('filtersetmenu', undefined, {above:1});return false" content=" " />
+</div>
+</div>
+
+<div id="filtersscreen">
+<div id="filterslistbox">
+<div class="boxtitle"><roundcube:label name="managesieve.filters" /></div>
+<div class="boxlistcontent">
+  <roundcube:object name="filterslist" id="filterslist" class="records-table" cellspacing="0" summary="Filters list" noheader="true" />
+</div>
+<div class="boxfooter">
+  <roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="buttonPas addfilter" classAct="button addfilter" content=" " />
+  <roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('filtermenu', undefined, {above:1});return false" content=" " />
+</div>
+</div>
+
+<script type="text/javascript">
+  var sieveviewsplit2 = new rcube_splitter({id:'sieveviewsplitter2', p1: 'filtersetslistbox', p2: 'filtersscreen', orientation: 'v', relative: true, start: 200});
+  rcmail.add_onload('sieveviewsplit2.init()');
+
+  var sieveviewsplit = new rcube_splitter({id:'sieveviewsplitter', p1: 'filterslistbox', p2: 'filter-box', orientation: 'v', relative: true, start: 215});
+  rcmail.add_onload('sieveviewsplit.init()');
+</script>
+
+<div id="filter-box">
+  <roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+</div>
+
+<div id="filtersetmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
+    <li><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
+    <li class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
+    <roundcube:if condition="env:raw_sieve_editor != false" />
+    <li><roundcube:button command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" classAct="active" /></li>
+    <roundcube:endif />
+    <roundcube:container name="filtersetoptions" id="filtersetmenu" />
+  </ul>
+</div>
+
+<div id="filtermenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li>
+    <li><roundcube:button command="plugin.managesieve-del" label="delete" classAct="active" /></li>
+    <roundcube:container name="filteroptions" id="filtermenu" />
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/templates/setedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.newfilterset" /></div>
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filtersetform" />
+
+<p>
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+</p>
+
+</form>
+</div>
+
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/templates/seteditraw.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe raweditor">
+
+<div id="filtersetraw-title" class="boxtitle"><roundcube:label name="managesieve.filterseteditraw" /></div>
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filterseteditraw" />
+
+<p>
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+</p>
+
+</form>
+</div>
+
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/classic/templates/vacation.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+  <div class="box" style="height: 100%; overflow: auto">
+    <div id="prefs-title" class="boxtitle"><roundcube:label name="managesieve.vacation" /></div>
+    <roundcube:object name="vacationform" id="vacationform" style="margin: 10px 10px 0 10px" />
+    <div id="formfooter" style="padding: 0 10px">
+      <div class="footerleft">
+        <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+      </div>
+    </div>
+  </div>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
Binary file plugins/managesieve/skins/larry/images/add.png has changed
Binary file plugins/managesieve/skins/larry/images/del.png has changed
Binary file plugins/managesieve/skins/larry/images/down_small.gif has changed
Binary file plugins/managesieve/skins/larry/images/erase.png has changed
Binary file plugins/managesieve/skins/larry/images/up_small.gif has changed
Binary file plugins/managesieve/skins/larry/images/vacation_icons.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/managesieve.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,492 @@
+#filtersetslistbox
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 150px;
+}
+
+#filtersscreen
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 162px;
+}
+
+#filterslistbox
+{
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  width: 180px;
+}
+
+#filter-box
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 192px;
+}
+
+#filter-frame
+{
+  border-radius: 4px;
+}
+
+#filterslist,
+#filtersetslist
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#filterslist tbody td,
+#filtersetslist tbody td
+{
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+#filterslist tbody tr.disabled td,
+#filtersetslist tbody tr.disabled td
+{
+  color: #87A3AA;
+  text-decoration: line-through;
+}
+
+#filtersetslist tbody td
+{
+  font-weight: bold;
+}
+
+#filterslist tbody tr.filtermoveup td
+{
+  border-top: 2px dotted #555 !important;
+  padding-top: 5px;
+}
+
+#filterslist tbody tr.filtermovedown td
+{
+  border-bottom: 2px dotted #555 !important;
+  padding-bottom: 4px;
+}
+
+body.iframe
+{
+  min-width: 620px;
+}
+
+#filter-form
+{
+  min-width: 550px;
+  white-space: nowrap;
+  padding: 20px 10px 10px 10px;
+}
+
+#filter-form legend, #filter-form label
+{
+  color: #666666;
+  vertical-align: middle;
+}
+
+#rules, #actions
+{
+  margin-top: 5px;
+  padding: 0;
+  border-collapse: collapse;
+}
+
+div.rulerow, div.actionrow
+{
+  width: auto;
+  padding: 2px;
+  white-space: nowrap;
+  border: 1px solid white;
+}
+
+div.rulerow:hover, div.actionrow:hover
+{
+  padding: 2px;
+  white-space: nowrap;
+  background-color: #D9ECF4;
+  border: 1px solid #BBD3DA;
+  border-radius: 4px;
+}
+
+div.rulerow table, div.actionrow table
+{
+  padding: 0px;
+  min-width: 600px;
+}
+
+#filter-form td
+{
+  vertical-align: top;
+}
+
+td.advbutton
+{
+  width: 1%;
+}
+
+td.advbutton a
+{
+  display: block;
+  padding-top: 14px;
+  height: 6px;
+  width: 12px;
+  text-decoration: none;
+}
+
+td.advbutton a.show
+{
+  background: url(images/down_small.gif?v=8629.106) center no-repeat;
+}
+
+td.advbutton a.hide
+{
+  background: url(images/up_small.gif?v=c56c.106) center no-repeat;
+}
+
+td.rowbuttons
+{
+  text-align: right;
+  white-space: nowrap;
+  width: 1%;
+}
+
+td.rowactions
+{
+  white-space: nowrap;
+  width: 1%;
+  padding-top: 2px;
+}
+
+td.rowtargets
+{
+  white-space: nowrap;
+  width: 98%;
+  padding-left: 3px;
+  padding-top: 2px;
+}
+
+td.rowtargets > div
+{
+  vertical-align: top;
+  margin-top: 2px;
+}
+
+td.rowtargets div.adv
+{
+  padding-top: 3px;
+  font-size: 10px;
+}
+
+td.rowtargets div.adv span.label
+{
+  display: inline-block;
+  padding-right: 5px;
+  min-width: 70px;
+}
+
+td.rowtargets div a {
+  margin-left: 10px;
+}
+
+td.rowtargets div.adv input
+{
+  margin-bottom: 1px;
+}
+
+input.disabled, input.disabled:hover
+{
+  color: #999999;
+}
+
+input.error, textarea.error
+{
+  background-color: #FFFFC4;
+}
+
+input.box,
+input.radio
+{
+  border: 0;
+  margin-top: 0;
+}
+
+input.radio
+{
+  vertical-align: middle;
+}
+
+select.operator_selector
+{
+  width: 200px;
+  vertical-align: top;
+}
+
+td.rowtargets span,
+span.label
+{
+  color: #666666;
+  font-size: 10px;
+  white-space: nowrap;
+}
+
+td.rowtargets label
+{
+  color: black;
+}
+
+#footer
+{
+  padding-top: 5px;
+  width: 100%;
+}
+
+#footer .footerleft label
+{
+  margin-left: 40px;
+  white-space: nowrap;
+}
+
+.itemlist
+{
+  line-height: 25px;
+}
+
+.itemlist input
+{
+  vertical-align: middle;
+}
+
+span.sieve.error
+{
+  color: red;
+  white-space: nowrap;
+}
+
+#managesieve-tip
+{
+  padding: 3px;
+  background-color: #eee;
+}
+
+#filter-form a.button
+{
+  margin: 0;
+  padding: 0;
+}
+
+#filter-form a.button.add
+{
+  background: url(images/add.png?v=a165.280) no-repeat;
+  width: 30px;
+  height: 20px;
+  margin-right: 4px;
+  display: inline-block;
+}
+
+#filter-form a.button.del
+{
+  background: url(images/del.png?v=3c27.247) no-repeat;
+  width: 30px;
+  height: 20px;
+  display: inline-block;
+}
+
+#filter-form a.button.disabled
+{
+  opacity: 0.35;
+  filter: alpha(opacity=35);
+  cursor: default;
+}
+
+#filter-form select,
+#filter-form input,
+#filter-form textarea
+{
+  vertical-align: middle;
+  max-width: 280px;
+}
+/* revert larry style button */
+#filter-form input.button
+{
+  padding: 4px 12px;
+}
+
+fieldset
+{
+  border-radius: 4px;
+}
+
+/* smart multi-row input field */
+.listarea
+{
+  border: 1px solid #B2B2B2;
+  border-radius: 4px;
+  box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  -webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  margin: 0;
+  padding: 2px;
+  display: inline-block;
+  max-height: 59px;
+  overflow-y: auto;
+  vertical-align: middle;
+}
+
+td.rowtargets > span.listarea
+{
+  vertical-align: top;
+  margin-top: 2px;
+}
+
+.listelement
+{
+  display: block;
+  white-space: nowrap;
+  background-color: #fff;
+  border-top: 1px solid #e2e2e2;
+  height: 14px;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  line-height: 14px;
+}
+
+.listarea.error .listelement
+{
+  background-color: #FFFFC4;
+}
+
+.listelement:first-child
+{
+  border-top: none;
+}
+
+#vacationform .listelement input,
+#filter-form .listelement input
+{
+  border: none;
+  border-radius: 0;
+  box-shadow: none;
+  outline: none;
+  vertical-align: top;
+  height: 14px;
+  padding-top: 0;
+  padding-bottom: 0;
+  line-height: 14px;
+  background-color: transparent;
+}
+
+.listelement input:focus
+{
+  box-shadow: none;
+}
+
+.listelement .reset
+{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  background: url(images/erase.png?v=3052.453) -1px -1px no-repeat #eee;
+  cursor: pointer;
+}
+
+
+/* fixes for popup window */
+
+body.iframe.mail
+{
+  margin: 0;
+  padding: 0;
+}
+
+body.iframe.mail #filter-form
+{
+  padding: 10px 5px 5px 5px;
+}
+
+
+/* vacation form */
+#settings-sections .vacation a {
+  background-image: url(images/vacation_icons.png?v=e738.767);
+  background-repeat: no-repeat;
+  background-position: 7px 1px;
+}
+
+#settings-sections .vacation.selected a {
+  background-position: 7px -23px;
+}
+
+#managesieve-vacation {
+  position: absolute;
+  top: 0;
+  left: 212px;
+  right: 0;
+  bottom: 0;
+  overflow: auto;
+}
+
+#vacationform .listarea {
+  max-height: 91px;
+}
+
+#vacationform td.vacation {
+  white-space: nowrap;
+}
+
+#vacationform input.button {
+  margin-left: 10px;
+}
+
+/* RAW editor and CodeMirror overrides */
+
+.raweditor textarea {
+  border: none;
+  border-radius: 0;
+  max-width: none !important;
+  box-shadow: none;
+  font-family: monospace;
+  width: 99%;
+  min-height: 300px;
+}
+
+.raweditor textarea,
+.raweditor .CodeMirror {
+  position: absolute;
+  top: 34px;
+  bottom: 45px;
+  right: 0;
+  left: 0;
+  height: auto;
+  background-color: #fdfdfd;
+  border-bottom: 1px solid #eee;
+}
+
+.raweditor .CodeMirror-linebackground.line-error {
+  background-color: #f00;
+  opacity: 0.4;
+}
+
+.raweditor .errorGutter {
+  width: 0.8em;
+}
+
+.raweditor #footer {
+  position: absolute;
+  bottom: 5px;
+}
+
+body.iframe.raweditor {
+  min-width: 100px;
+  overflow: hidden;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/managesieve.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#filtersetslistbox{position:absolute;top:0;bottom:0;left:0;width:150px}#filtersscreen{position:absolute;top:0;right:0;bottom:0;left:162px}#filterslistbox{position:absolute;left:0;top:0;bottom:0;width:180px}#filter-box{position:absolute;top:0;right:0;bottom:0;left:192px}#filter-frame{border-radius:4px}#filterslist,#filtersetslist{width:100%;table-layout:fixed}#filterslist tbody td,#filtersetslist tbody td{width:100%;overflow:hidden;text-overflow:ellipsis}#filterslist tbody tr.disabled td,#filtersetslist tbody tr.disabled td{color:#87a3aa;text-decoration:line-through}#filtersetslist tbody td{font-weight:bold}#filterslist tbody tr.filtermoveup td{border-top:2px dotted #555 !important;padding-top:5px}#filterslist tbody tr.filtermovedown td{border-bottom:2px dotted #555 !important;padding-bottom:4px}body.iframe{min-width:620px}#filter-form{min-width:550px;white-space:nowrap;padding:20px 10px 10px 10px}#filter-form legend,#filter-form label{color:#666;vertical-align:middle}#rules,#actions{margin-top:5px;padding:0;border-collapse:collapse}div.rulerow,div.actionrow{width:auto;padding:2px;white-space:nowrap;border:1px solid white}div.rulerow:hover,div.actionrow:hover{padding:2px;white-space:nowrap;background-color:#d9ecf4;border:1px solid #bbd3da;border-radius:4px}div.rulerow table,div.actionrow table{padding:0;min-width:600px}#filter-form td{vertical-align:top}td.advbutton{width:1%}td.advbutton a{display:block;padding-top:14px;height:6px;width:12px;text-decoration:none}td.advbutton a.show{background:url(images/down_small.gif?v=8629.106) center no-repeat}td.advbutton a.hide{background:url(images/up_small.gif?v=c56c.106) center no-repeat}td.rowbuttons{text-align:right;white-space:nowrap;width:1%}td.rowactions{white-space:nowrap;width:1%;padding-top:2px}td.rowtargets{white-space:nowrap;width:98%;padding-left:3px;padding-top:2px}td.rowtargets>div{vertical-align:top;margin-top:2px}td.rowtargets div.adv{padding-top:3px;font-size:10px}td.rowtargets div.adv span.label{display:inline-block;padding-right:5px;min-width:70px}td.rowtargets div a{margin-left:10px}td.rowtargets div.adv input{margin-bottom:1px}input.disabled,input.disabled:hover{color:#999}input.error,textarea.error{background-color:#ffffc4}input.box,input.radio{border:0;margin-top:0}input.radio{vertical-align:middle}select.operator_selector{width:200px;vertical-align:top}td.rowtargets span,span.label{color:#666;font-size:10px;white-space:nowrap}td.rowtargets label{color:black}#footer{padding-top:5px;width:100%}#footer .footerleft label{margin-left:40px;white-space:nowrap}.itemlist{line-height:25px}.itemlist input{vertical-align:middle}span.sieve.error{color:red;white-space:nowrap}#managesieve-tip{padding:3px;background-color:#eee}#filter-form a.button{margin:0;padding:0}#filter-form a.button.add{background:url(images/add.png?v=a165.280) no-repeat;width:30px;height:20px;margin-right:4px;display:inline-block}#filter-form a.button.del{background:url(images/del.png?v=3c27.247) no-repeat;width:30px;height:20px;display:inline-block}#filter-form a.button.disabled{opacity:.35;filter:alpha(opacity=35);cursor:default}#filter-form select,#filter-form input,#filter-form textarea{vertical-align:middle;max-width:280px}#filter-form input.button{padding:4px 12px}fieldset{border-radius:4px}.listarea{border:1px solid #b2b2b2;border-radius:4px;box-shadow:inset 0 0 2px 1px rgba(0,0,0,0.1);-webkit-box-shadow:inset 0 0 2px 1px rgba(0,0,0,0.1);margin:0;padding:2px;display:inline-block;max-height:59px;overflow-y:auto;vertical-align:middle}td.rowtargets>span.listarea{vertical-align:top;margin-top:2px}.listelement{display:block;white-space:nowrap;background-color:#fff;border-top:1px solid #e2e2e2;height:14px;padding:0;margin:0;overflow:hidden;line-height:14px}.listarea.error .listelement{background-color:#ffffc4}.listelement:first-child{border-top:0}#vacationform .listelement input,#filter-form .listelement input{border:0;border-radius:0;box-shadow:none;outline:0;vertical-align:top;height:14px;padding-top:0;padding-bottom:0;line-height:14px;background-color:transparent}.listelement input:focus{box-shadow:none}.listelement .reset{display:inline-block;width:16px;height:16px;background:url(images/erase.png?v=3052.453) -1px -1px no-repeat #eee;cursor:pointer}body.iframe.mail{margin:0;padding:0}body.iframe.mail #filter-form{padding:10px 5px 5px 5px}#settings-sections .vacation a{background-image:url(images/vacation_icons.png?v=e738.767);background-repeat:no-repeat;background-position:7px 1px}#settings-sections .vacation.selected a{background-position:7px -23px}#managesieve-vacation{position:absolute;top:0;left:212px;right:0;bottom:0;overflow:auto}#vacationform .listarea{max-height:91px}#vacationform td.vacation{white-space:nowrap}#vacationform input.button{margin-left:10px}.raweditor textarea{border:0;border-radius:0;max-width:none !important;box-shadow:none;font-family:monospace;width:99%;min-height:300px}.raweditor textarea,.raweditor .CodeMirror{position:absolute;top:34px;bottom:45px;right:0;left:0;height:auto;background-color:#fdfdfd;border-bottom:1px solid #eee}.raweditor .CodeMirror-linebackground.line-error{background-color:red;opacity:.4}.raweditor .errorGutter{width:.8em}.raweditor #footer{position:absolute;bottom:5px}body.iframe.raweditor{min-width:100px;overflow:hidden}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/managesieve_mail.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+ul.toolbarmenu li span.filterlink {
+  background-position: 0 -2174px;
+}
+
+#sievefilterform {
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 0;
+  overflow: hidden;
+}
+
+#sievefilterform iframe {
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  width: 100%;
+  min-height: 100%; /* Chrome 14 bug */
+  border: 0;
+  padding: 0;
+  margin: 0;
+}
+
+#sievefilterform ul {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  margin-top: 5px;
+}
+
+#sievefilterform fieldset {
+  margin: 5px;
+  border-radius: 4px;
+}
+
+#sievefilterform ul li {
+  margin-bottom: 5px;
+  white-space: nowrap;
+}
+
+#sievefilterform ul li input {
+  margin-right: 5px;
+}
+
+#sievefilterform label {
+  font-weight: bold;
+}
+
+#managesieve-tip
+{
+  z-index: 100000;
+  padding: 3px;
+  background-color: #eee;
+}
+
+span.sieve.error
+{
+  color: red;
+  white-space: nowrap;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/managesieve_mail.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+ul.toolbarmenu li span.filterlink{background-position:0 -2174px}#sievefilterform{top:0;bottom:0;left:0;right:0;padding:0;overflow:hidden}#sievefilterform iframe{top:0;bottom:0;left:0;right:0;width:100%;min-height:100%;border:0;padding:0;margin:0}#sievefilterform ul{list-style:none;padding:0;margin:0;margin-top:5px}#sievefilterform fieldset{margin:5px;border-radius:4px}#sievefilterform ul li{margin-bottom:5px;white-space:nowrap}#sievefilterform ul li input{margin-right:5px}#sievefilterform label{font-weight:bold}#managesieve-tip{z-index:100000;padding:3px;background-color:#eee}span.sieve.error{color:red;white-space:nowrap}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/templates/filteredit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe<roundcube:exp expression="env:task != 'mail' ? ' floatingbuttons' : ' mail'" />">
+
+<roundcube:if condition="env:task != 'mail'" />
+<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.filterdef" /></div>
+<roundcube:endif />
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filterform" />
+
+<roundcube:if condition="env:task != 'mail'" />
+<div id="footer">
+<div class="footerleft formbuttons floating">
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+<label for="disabled">
+<input type="checkbox" id="disabled" name="_disabled" value="1" />
+<roundcube:label name="managesieve.filterdisabled" />
+</label>
+</div>
+</div>
+<roundcube:endif />
+
+</form>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/templates/managesieve.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,82 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.filters" /></h1>
+
+<div id="mainscreen" class="offset">
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="settings-right" role="main">
+<div id="filtersetslistbox" class="uibox listbox" aria-labelledby="aria-label-filtersets">
+<h2 class="boxtitle" id="aria-label-filtersets"><roundcube:label name="managesieve.filtersets" /></h2>
+<div class="scroller withfooter">
+  <roundcube:object name="filtersetslist" id="filtersetslist" class="listing" summary="managesieve.ariasummaryfiltersetslist" type="list" noheader="true" role="listbox" />
+</div>
+<div class="boxfooter">
+  <roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtersetmenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="filtersetmenu-menu" />
+</div>
+</div>
+
+<div id="filtersscreen">
+<div id="filterslistbox" class="uibox listbox" aria-labelledby="aria-label-filters">
+<h2 class="boxtitle" id="aria-label-filters"><roundcube:label name="managesieve.filters" /></h2>
+<div class="scroller withfooter">
+  <roundcube:object name="filterslist" id="filterslist" class="listing" summary="managesieve.ariasummaryfilterslist" noheader="true" role="listbox" />
+</div>
+<div class="boxfooter">
+  <roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtermenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="filtermenu-menu" />
+</div>
+</div>
+
+<div id="filter-box" class="uibox contentbox">
+  <div class="iframebox" role="complementary" aria-labelledby="aria-label-filterform">
+    <h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
+    <roundcube:object name="filterframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="managesieve.arialabelfilterform" />
+  </div>
+</div>
+
+</div>
+</div>
+</div>
+
+<div id="filtersetmenu" class="popupmenu" aria-hidden="true">
+  <h3 id="aria-label-setactions" class="voice"><roundcube:label name="managesieve.arialabelfiltersetactions" /></h3>
+  <ul class="toolbarmenu" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
+    <li role="menuitem"><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
+    <li role="menuitem"><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
+    <roundcube:if condition="env:raw_sieve_editor != false" />
+    <li role="menuitem"><roundcube:button command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" classAct="active" /></li>
+    <roundcube:endif />
+    <li role="menuitem" class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
+    <roundcube:container name="filtersetoptions" id="filtersetmenu" />
+  </ul>
+</div>
+
+<div id="filtermenu" class="popupmenu" aria-hidden="true">
+  <h3 id="aria-label-filteractions" class="voice"><roundcube:label name="managesieve.arialabelfilteractions" /></h3>
+  <ul class="toolbarmenu" id="filtermenu-menu" role="menu" aria-labelledby="aria-label-filteractions">
+    <li role="menuitem"><roundcube:button command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li>
+    <li role="menuitem"><roundcube:button command="plugin.managesieve-del" label="delete" classAct="active" /></li>
+    <roundcube:container name="filteroptions" id="filtermenu" />
+  </ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+<script type="text/javascript">
+  new rcube_splitter({ id:'managesievesplitter1', p1:'#filtersetslistbox', p2:'#filtersscreen',
+          orientation:'v', relative:true, start:156, min:120, size:12 }).init();
+  new rcube_splitter({ id:'managesievesplitter2', p1:'#filterslistbox', p2:'#filter-box',
+          orientation:'v', relative:true, start:186, min:120, size:12 }).init();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/templates/setedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe floatingbuttons">
+
+<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.newfilterset" /></div>
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filtersetform" />
+
+<div id="footer">
+<div class="footerleft formbuttons floating">
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+</div>
+</div>
+
+</form>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/templates/seteditraw.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe raweditor">
+
+<div id="filtersetraw-title" class="boxtitle"><roundcube:label name="managesieve.filterseteditraw" /></div>
+
+<div id="filter-form" class="boxcontent">
+<roundcube:object name="filterseteditraw" />
+
+<div id="footer">
+<div class="footerleft formbuttons">
+<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+</div>
+</div>
+
+</form>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/managesieve/skins/larry/templates/vacation.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="noscroll">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.vacation" /></h1>
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="managesieve-vacation" class="uibox contentbox" role="main" aria-labelledby="aria-label-vacationform">
+  <div>
+    <h2 class="boxtitle" id="aria-label-vacationform"><roundcube:label name="managesieve.vacation" /></h2>
+    <roundcube:object name="vacationform" id="vacationform" class="propform boxcontent tabbed" />
+  </div>
+  <div class="footerleft formbuttons">
+    <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+  </div>
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/markasjunk",
+    "type": "roundcube-plugin",
+    "description": "Adds a new button to the mailbox toolbar to mark the selected messages as Junk and move them to the configured Junk folder.",
+    "license": "GPLv3+",
+    "version": "1.2",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'غير المرغوب';
+$labels['buttontitle'] = 'حدد كغير مرغوب';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'غير المرغوب';
+$labels['buttontitle'] = 'وضع علامة كـ غير المرغوب Ùيه';
+$labels['reportedasjunk'] = 'تمت الاÙادة كـ غير مرغوب Ùية بنجاح';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Puxarra';
+$labels['buttontitle'] = 'Conseñar como puxarra';
+$labels['reportedasjunk'] = 'Reportáu con ésitu como Puxarra';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Spam qovluğuna köçür';
+$labels['reportedasjunk'] = 'Spam qovluğuna köçürüldü';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Спам';
+$labels['buttontitle'] = 'Пазначыць Ñк Ñпам';
+$labels['reportedasjunk'] = 'Пазначаны Ñк Ñпам';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Спам';
+$labels['buttontitle'] = 'Маркирай като Ñпам';
+$labels['reportedasjunk'] = 'ПиÑмото е маркирано като Ñпам уÑпешно';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Lastez';
+$labels['buttontitle'] = 'Merkañ evel lastez';
+$labels['reportedasjunk'] = 'Danevellet evel lastez gant berzh';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'OznaÄi kao spam';
+$labels['reportedasjunk'] = 'UspjeÅ¡no oznaÄeno kao spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Correu brossa';
+$labels['buttontitle'] = 'Marca com a correu brossa';
+$labels['reportedasjunk'] = 'S\'ha reportat correctament com a correu brossa';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'OznaÄit jako Spam';
+$labels['reportedasjunk'] = 'Úspěšně nahlášeno jako Spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Sothach';
+$labels['buttontitle'] = 'Nodi fel Sbwriel';
+$labels['reportedasjunk'] = 'Adroddwyd yn llwyddiannus fel Sbwriel';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Marker som spam mail';
+$labels['reportedasjunk'] = 'Successfuldt rapporteret som spam mail';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Als SPAM markieren';
+$labels['reportedasjunk'] = 'Erfolgreich als SPAM gemeldet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'als SPAM markieren';
+$labels['reportedasjunk'] = 'Erfolgreich als SPAM gemeldet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'ΑνεπιθÏμητα';
+$labels['buttontitle'] = 'Σήμανση ως ΑνεπιθÏμητου';
+$labels['reportedasjunk'] = 'ΑναφέÏθηκε ως Ανεπιθήμητο';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Junk';
+$labels['buttontitle'] = 'Mark as Junk';
+$labels['reportedasjunk'] = 'Successfully reported as Junk';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Junk';
+$labels['buttontitle'] = 'Mark as Junk';
+$labels['reportedasjunk'] = 'Successfully reported as Junk';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+
+$labels = array();
+$labels['buttontext'] = 'Junk';
+$labels['buttontitle'] = 'Mark as Junk';
+$labels['reportedasjunk'] = 'Successfully reported as Junk';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Rubaĵo';
+$labels['buttontitle'] = 'Marki kiel rubaĵo';
+$labels['reportedasjunk'] = 'Sukcese raportita kiel rubaĵo';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Basura';
+$labels['buttontitle'] = 'Marcar como basura';
+$labels['reportedasjunk'] = 'Reportado como basura exitosamente';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Correo no deseado';
+$labels['buttontitle'] = 'Marcar como SPAM';
+$labels['reportedasjunk'] = 'Mensaje reportado como SPAM';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'SPAM';
+$labels['buttontitle'] = 'Marcar como SPAM';
+$labels['reportedasjunk'] = 'Reportado como SPAM, correctamente';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Rämps';
+$labels['buttontitle'] = 'Märgista Rämpsuks';
+$labels['reportedasjunk'] = 'Edukalt Rämpsuks märgitud';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Zabor-mezua';
+$labels['buttontitle'] = 'Markatu zabor-mezu bezala';
+$labels['reportedasjunk'] = 'Zabor bezala markatu da';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'هرزنامه';
+$labels['buttontitle'] = 'نشانه گذاری به عنوان هرزنامه';
+$labels['reportedasjunk'] = 'با موÙقبت به عنوان هرزنامه گزارش شد';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'بنجل';
+$labels['buttontitle'] = 'علامت گذاری به عنوان بنجل';
+$labels['reportedasjunk'] = 'با کام‌یابی به عنوان بنجل گزارش شد';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Roskaposti';
+$labels['buttontitle'] = 'Merkitse roskapostiksi';
+$labels['reportedasjunk'] = 'Roskapostista on ilmoitettu onnistuneesti';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Møsn';
+$labels['buttontitle'] = 'Merk sum møsn';
+$labels['reportedasjunk'] = 'Melda sum møsn.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Pourriels';
+$labels['buttontitle'] = 'Marqué comme pourriel';
+$labels['reportedasjunk'] = 'Signalé comme pourriel avec succès';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Markearje as Spam';
+$labels['reportedasjunk'] = 'Mei sukses melden as Spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Bruscar';
+$labels['buttontitle'] = 'Rianaigh mar bhruscar é';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Correo lixo';
+$labels['buttontitle'] = 'Marcar como correo lixo';
+$labels['reportedasjunk'] = 'Mensaxe marcada como correo lixo';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'זבל';
+$labels['buttontitle'] = 'סמן כדו×ר זבל';
+$labels['reportedasjunk'] = 'דו×ר הזבל דווח בהצלחה';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Smeće (spam)';
+$labels['buttontitle'] = 'OznaÄi kao smeće (spam)';
+$labels['reportedasjunk'] = 'Uspješno prijavljeno kao smeće (spam)';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Levélszemét';
+$labels['buttontitle'] = 'Szemétnek jelölés';
+$labels['reportedasjunk'] = 'Sikeresen szemétnek jelentve';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Ô¹Õ¡ÖƒÕ¸Õ¶';
+$labels['buttontitle'] = 'Õ†Õ·Õ¥Õ¬ Õ¸Ö€ÕºÕ¥Õ½ Ô¹Õ¡ÖƒÕ¸Õ¶';
+$labels['reportedasjunk'] = 'Ô²Õ¡Ö€Õ¥Õ°Õ¡Õ»Õ¸Õ² Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¾Õ¥Ö Õ¸Ö€ÕºÕ¥Õ½ Ô¹Õ¡ÖƒÕ¸Õ¶';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Messages indesirate';
+$labels['buttontitle'] = 'Marcar como indesirate';
+$labels['reportedasjunk'] = 'Reportate como indesirate con successo';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Sampah';
+$labels['buttontitle'] = 'Tandai sebagai sampah';
+$labels['reportedasjunk'] = 'Berhasil dilaporkan sebagai sampah';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Ruslpóstur';
+$labels['buttontitle'] = 'Merkja sem ruslpóst';
+$labels['reportedasjunk'] = 'Tókst að tilkynna sem ruslpóst';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Marca come Spam';
+$labels['reportedasjunk'] = 'Messaggio marcato come Spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = '迷惑メール';
+$labels['buttontitle'] = '迷惑メールã¨ã—ã¦è¨­å®š';
+$labels['reportedasjunk'] = '迷惑メールã¨ã—ã¦å ±å‘Šã—ã¾ã—ãŸã€‚';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'សារ​ឥážâ€‹áž”ានការ';
+$labels['buttontitle'] = 'សម្គាល់​ជា​សារ​ឥážâ€‹áž”ានការ';
+$labels['reportedasjunk'] = 'បាន​រាយការណáŸâ€‹áž‡áž¶â€‹ážŸáž¶ážšâ€‹áž¥ážâ€‹áž”ាន​ការ​ដោយ​ជោគជáŸáž™';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = '스팸';
+$labels['buttontitle'] = '스팸으로 표시';
+$labels['reportedasjunk'] = '스팸으로 성공ì ìœ¼ë¡œ 보고함';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Gemar';
+$labels['buttontitle'] = 'Wekî Gemar nîşan bike';
+$labels['reportedasjunk'] = 'Bi serkeftin wekî Gemar hat nirxandi';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Als Spam markéieren';
+$labels['reportedasjunk'] = 'Erfollegräich als Spam gemellt';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Brukalas';
+$labels['buttontitle'] = 'Žymėti kaip brukalą';
+$labels['reportedasjunk'] = 'Sėkmingai pranešta, jog laiškas yra brukalas';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'MÄ“stules';
+$labels['buttontitle'] = 'AtzÄ«mÄ“t kÄ mÄ“stuli';
+$labels['reportedasjunk'] = 'SekmÄ«gi iatzÄ«mÄ“ta kÄ mÄ“stule';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Ѓубре ';
+$labels['buttontitle'] = 'Обележи како ѓубре ';
+$labels['reportedasjunk'] = 'УÑпешно пријавено како ѓубре ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'ചവർ';
+$labels['buttontitle'] = 'ചവർ ആയി അടയാളപàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´•';
+$labels['reportedasjunk'] = 'ചവർ ആയി അടയാളപàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´¿';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Спам';
+$labels['buttontitle'] = 'Спамаар Ñ‚ÑмдÑглÑÑ…';
+$labels['reportedasjunk'] = 'Ðмжилттай Ñпам гÑж мÑдÑгдлÑÑ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontitle'] = 'नको असलेला अशी खूण करा';
+$labels['reportedasjunk'] = 'नको आहे असे यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ नकà¥à¤•à¥€ केले';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Useriøs e-post';
+$labels['buttontitle'] = 'Marker som useriøs e-post';
+$labels['reportedasjunk'] = 'Rapportering av useriøs e-post var vellykket';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Ongewenste e-mail';
+$labels['buttontitle'] = 'Markeer als ongewenst';
+$labels['reportedasjunk'] = 'Succesvol als ongewenst gemarkeerd.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Markeer als spam';
+$labels['reportedasjunk'] = 'Succesvol gemarkeerd als spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Useriøs e-post';
+$labels['buttontitle'] = 'Marker som useriøs e-post';
+$labels['reportedasjunk'] = 'Rapportering av useriøs e-post var vellykka';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Oznacz jako SPAM';
+$labels['reportedasjunk'] = 'Pomyślnie oznaczono jako SPAM';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Marcar como Spam';
+$labels['reportedasjunk'] = 'Marcado como Spam com sucesso';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Lixo';
+$labels['buttontitle'] = 'Marcar como Lixo';
+$labels['reportedasjunk'] = 'Reportado como Lixo com sucesso';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Spam';
+$labels['buttontitle'] = 'Marchează ca Spam';
+$labels['reportedasjunk'] = 'Raportat cu succes ca Spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'СПÐÐœ';
+$labels['buttontitle'] = 'ПеремеÑтить в СПÐÐœ';
+$labels['reportedasjunk'] = 'Перемещено в СПÐÐœ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/si_LK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontitle'] = 'සුන්බුන් ලෙස සලකුණු කරන්න';
+$labels['reportedasjunk'] = 'සුන්බුන් ලෙස à·€à·à¶»à·Šà¶­à· කිරීම à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Nevyžiadaná pošta';
+$labels['buttontitle'] = 'OznaÄiÅ¥ ako nevyžiadané';
+$labels['reportedasjunk'] = 'Úspešne nahlásené ako nevyžiadaná pošta';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Nezaželena sporoÄila';
+$labels['buttontitle'] = 'OznaÄi kot spam';
+$labels['reportedasjunk'] = 'UspeÅ¡no oznaÄeno kot spam';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'I pavlerë';
+$labels['buttontitle'] = 'Vëri shenjë si I pavlerë';
+$labels['reportedasjunk'] = 'U raportua me sukses si I pavlerë';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Отпад';
+$labels['buttontitle'] = 'Означи као отпад';
+$labels['reportedasjunk'] = 'УÑпешно пријављено као отпад';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Skräp';
+$labels['buttontitle'] = 'Märk som skräp';
+$labels['reportedasjunk'] = 'Framgångsrikt rapporterat som skräp';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'จดหมายขยะ';
+$labels['buttontitle'] = 'มาร์คเป็นจดหมายขยะ';
+$labels['reportedasjunk'] = 'รายงานสำเร็จà¹à¸¥à¹‰à¸§à¸§à¹ˆà¸²à¹€à¸›à¹‡à¸™à¸‚ยะ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Ä°stenmeyen';
+$labels['buttontitle'] = 'Ä°stenmeyen olarak iÅŸaretle';
+$labels['reportedasjunk'] = 'Spam olarak bildirildi';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Спам';
+$labels['buttontitle'] = 'ПереміÑтити в Спам';
+$labels['reportedasjunk'] = 'Переміщено до "Спаму';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = 'Thư rác';
+$labels['buttontitle'] = 'Äánh dấu để được xem là thÆ° rác';
+$labels['reportedasjunk'] = 'Äánh dấu để được xem là thÆ° rác thành công';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = '垃圾邮件';
+$labels['buttontitle'] = '标记为垃圾邮件';
+$labels['reportedasjunk'] = 'æˆåŠŸæŠ¥å‘Šè¯¥é‚®ä»¶ä¸ºåžƒåœ¾é‚®ä»¶';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/markasjunk/localization/<lang>.inc                            |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
+*/
+$labels['buttontext'] = '垃圾郵件';
+$labels['buttontitle'] = '標示為垃圾信';
+$labels['reportedasjunk'] = 'æˆåŠŸå›žå ±åžƒåœ¾ä¿¡';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/markasjunk.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,43 @@
+/**
+ * Mark-as-Junk plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+function rcmail_markasjunk(prop)
+{
+  if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length))
+    return;
+  
+    var uids = rcmail.env.uid ? rcmail.env.uid : rcmail.message_list.get_selection().join(','),
+      lock = rcmail.set_busy(true, 'loading');
+
+    rcmail.http_post('plugin.markasjunk', '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), lock);
+}
+
+// callback for app-onload event
+if (window.rcmail) {
+  rcmail.addEventListener('init', function(evt) {
+    
+    // register command (directly enable in message view mode)
+    rcmail.register_command('plugin.markasjunk', rcmail_markasjunk, rcmail.env.uid);
+    
+    // add event-listener to message list
+    if (rcmail.message_list)
+      rcmail.message_list.addEventListener('select', function(list){
+        rcmail.enable_command('plugin.markasjunk', list.get_selection().length > 0);
+      });
+  })
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/markasjunk.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+/**
+ * Mark-as-Junk plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+function rcmail_markasjunk(a){if(rcmail.env.uid||rcmail.message_list&&rcmail.message_list.get_selection().length){a=rcmail.env.uid?rcmail.env.uid:rcmail.message_list.get_selection().join(",");var b=rcmail.set_busy(!0,"loading");rcmail.http_post("plugin.markasjunk","_uid="+a+"&_mbox="+urlencode(rcmail.env.mailbox),b)}}
+window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("plugin.markasjunk",rcmail_markasjunk,rcmail.env.uid);rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){rcmail.enable_command("plugin.markasjunk",0<a.get_selection().length)})});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/markasjunk.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * Mark as Junk
+ *
+ * Sample plugin that adds a new button to the mailbox toolbar
+ * to mark the selected messages as Junk and move them to the Junk folder
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ */
+class markasjunk extends rcube_plugin
+{
+    public $task = 'mail';
+
+    function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        $this->register_action('plugin.markasjunk', array($this, 'request_action'));
+        $this->add_hook('storage_init', array($this, 'storage_init'));
+
+        if ($rcmail->action == '' || $rcmail->action == 'show') {
+            $skin_path = $this->local_skin_path();
+
+            $this->add_texts('localization', true);
+            $this->include_script('markasjunk.js');
+
+            if (is_file($this->home . "/$skin_path/markasjunk.css")) {
+                $this->include_stylesheet("$skin_path/markasjunk.css");
+            }
+
+            $this->add_button(array(
+                    'type'     => 'link',
+                    'label'    => 'buttontext',
+                    'command'  => 'plugin.markasjunk',
+                    'class'    => 'button buttonPas junk disabled',
+                    'classact' => 'button junk',
+                    'title'    => 'buttontitle',
+                    'domain'   => 'markasjunk'
+                ),'toolbar');
+        }
+    }
+
+    function storage_init($args)
+    {
+        $flags = array(
+            'JUNK'    => 'Junk',
+            'NONJUNK' => 'NonJunk',
+        );
+
+        // register message flags
+        $args['message_flags'] = array_merge((array)$args['message_flags'], $flags);
+
+        return $args;
+    }
+
+    function request_action()
+    {
+        $this->add_texts('localization');
+
+        $rcmail  = rcmail::get_instance();
+        $storage = $rcmail->get_storage();
+
+        foreach (rcmail::get_uids() as $mbox => $uids) {
+            $storage->unset_flag($uids, 'NONJUNK', $mbox);
+            $storage->set_flag($uids, 'JUNK', $mbox);
+        }
+
+        if (($junk_mbox = $rcmail->config->get('junk_mbox'))) {
+            $rcmail->output->command('move_messages', $junk_mbox);
+        }
+
+        $rcmail->output->command('display_message', $this->gettext('reportedasjunk'), 'confirmation');
+        $rcmail->output->send();
+    }
+}
Binary file plugins/markasjunk/skins/classic/junk_act.png has changed
Binary file plugins/markasjunk/skins/classic/junk_pas.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/skins/classic/markasjunk.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+
+#messagetoolbar a.button.junk {
+	text-indent: -5000px;
+	background: url(junk_act.png) 0 0 no-repeat;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/markasjunk/skins/classic/markasjunk.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#messagetoolbar a.button.junk{text-indent:-5000px;background:url(junk_act.png) 0 0 no-repeat}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/new_user_dialog",
+    "type": "roundcube-plugin",
+    "description": "When a new user is created, this plugin checks the default identity and sets a session flag in case it is incomplete. An overlay box will appear on the screen until the user has reviewed/completed his identity.",
+    "license": "GPLv3+",
+    "version": "2.1",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'يرجى إكمال هوية المرسل';
+$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة Ùقط عند تسجيل الدخول أول مرة .';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'يرجى اكمال هوية المÙرسل.';
+$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة Ùقط عند أول الدخول';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor, completa la to identidá de remitente';
+$labels['identitydialoghint'] = 'Esta caxa namái apaecerá una vegada nel primer aniciu de sesión.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Lütfən, adınızı yazın.';
+$labels['identitydialoghint'] = 'Bu məlumat yalnız ilk girişdə göstərilir.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Калі лаÑка, запоўніце тоеÑнаÑць адпраўніка';
+$labels['identitydialoghint'] = 'ГÑтае акно з\'ÑўлÑецца толькі аднойчы, у Ñ‡Ð°Ñ Ð¿ÐµÑ€ÑˆÐ°Ð³Ð° ўваходу.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'ÐœÐ¾Ð»Ñ Ð¿Ð¾Ð¿ÑŠÐ»Ð½ÐµÑ‚Ðµ данни за Вашата ÑамоличноÑÑ‚ като подател';
+$labels['identitydialoghint'] = 'Този диалог Ñе поÑвÑва Ñамо при първоначално региÑтриране.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Bizskrivit hoc\'h anv kaser mar plij';
+$labels['identitydialoghint'] = 'Diskouezet eo ar boest e-pad ar c\'hentañ kennask.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Molimo vas da kompletirate vaš identitet pošiljaoca';
+$labels['identitydialoghint'] = 'Ovaj okvir se pojavljuje samo jednom prilikom prve prijave.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Si us plau, completeu la identitat del vostre remitent';
+$labels['identitydialoghint'] = 'Aquest quadre només apareix un cop a la primera entrada.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Prosím doplňte své jméno a e-mail';
+$labels['identitydialoghint'] = 'Tento dialog se objeví pouze při prvním přihlášení.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Cwblhewch eich enw danfonwr';
+$labels['identitydialoghint'] = 'Mae\'r bocs hwn yn ymddangos unwaith ar eich mewngofnodiad cyntaf.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Udfyld din afsender identitet';
+$labels['identitydialoghint'] = 'Denne boks vises kun én gang ved første login';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen';
+$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absenderkennung';
+$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Anmelden.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'ΠαÏακαλώ συμπληÏώστε την ταυτότητα του αποστολέα';
+$labels['identitydialoghint'] = 'Αυτό το πλαίσιο εμφανίζεται μια φοÏά κατά την Ï€Ïώτη σÏνδεση';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Please complete your sender identity';
+$labels['identitydialoghint'] = 'This box only appears once at the first login.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Please complete your sender identity.';
+$labels['identitydialoghint'] = 'This box only appears once at the first login.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+
+$labels = array();
+$labels['identitydialogtitle'] = 'Please complete your sender identity';
+$labels['identitydialoghint'] = 'This box only appears once at the first login.';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Bonvole plenumu vian identon pri sendanto';
+$labels['identitydialoghint'] = 'Ĉi tiu kesto aperas nur unufoje je la unua ensaluto.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor completa tu información de remitente';
+$labels['identitydialoghint'] = 'Esta sección solo aparece un vez en el primer login.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor, seleccione una identidad para los mensajes salientes';
+$labels['identitydialoghint'] = 'Este diálogo aparecerá sólo una vez durante el primer ingreso';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor, complete su identidad de remitente';
+$labels['identitydialoghint'] = 'Este diálogo sólo aparece la primera vez que inicia su sesión.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Palun täida oma saatja identiteet';
+$labels['identitydialoghint'] = 'See kast ilmub ainult esmasel sisselogimisel.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Osatu zure bidaltzaile-identitatea';
+$labels['identitydialoghint'] = 'Kutxa hau behin bakarri agertzen da lehenengoz sartzean.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'لطÙا مشخصات Ùرستنده را کامل کنید';
+$labels['identitydialoghint'] = 'این متن تنها هنگام اولین ورود نمایش داده خواهد شد';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'لطÙا شناسه ارسالی‌تان را کامل کنید';
+$labels['identitydialoghint'] = 'این جعبه Ùقط یک بار در اولین ورود ظاهر می‌شود.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Täydennä lähettäjätietosi';
+$labels['identitydialoghint'] = 'Tämä kohta näkyy vain ensimmäisellä kirjautumiskerralla.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Vinarliga fill út tín sendara samleika';
+$labels['identitydialoghint'] = 'Hesin kassin sæðst einans á fyrstu innriting.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Veuillez saisir votre identité d\'expéditeur';
+$labels['identitydialoghint'] = 'Ce champ n\'apparaît que lors de la première connexion.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Foltôgje jo stjoerder identiteit';
+$labels['identitydialoghint'] = 'Dit fak ferskynt allinnich by de earste kear ynloggen.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Críochnaigh do chéannacht seoltóra';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor, completa os teus datos persoais';
+$labels['identitydialoghint'] = 'Este diálogo só aparecerá a primera vez que te conectes ao correo.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = '× × ×œ×”×©×œ×™× ×ת פרטי זהותך';
+$labels['identitydialoghint'] = 'תיבה זו מופיעה ×¤×¢× ×חת בזמן הכניסה הר×שונה למערכת';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Molim dovršite vaš identitet za slanje poruka';
+$labels['identitydialoghint'] = 'Ova poruka će se pojaviti samo kod prve prijave.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Kérem töltse ki a küldő azonosítóját';
+$labels['identitydialoghint'] = 'Ez az ablak csak az első belépéskor jelenik meg.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Ô¼Ö€Õ¡ÖÖ€Õ¥Ö„ ÕÕ¥Ö€ Õ«Õ¶Ö„Õ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨';
+$labels['identitydialoghint'] = 'Ô±ÕµÕ½ Õ¶Õ·Õ¸Ö‚Õ´Õ¨ Õ¥Ö€Ö‡Õ¸Ö‚Õ´ Õ§ Õ´Õ«Õ¡ÕµÕ¶ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ´Õ¸Ö‚Õ¿Ö„Õ« ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯ Õ´Õ¥Õ¯ Õ¡Õ¶Õ£Õ¡Õ´';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Per favor, completa vostre identitate de expeditor';
+$labels['identitydialoghint'] = 'Iste quadro solmente appare un vice al prime apertura de session.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Tolong lengkapi identitas pengirim Anda';
+$labels['identitydialoghint'] = 'Kotak ini hanya muncul sekali saat masuk pertama kali.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Fylltu út auðkenni þín fyrir sendingar';
+$labels['identitydialoghint'] = 'Þessi reitur birtist einungis við fyrstu innskráningu.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Per favore completa le informazioni riguardo la tua identità';
+$labels['identitydialoghint'] = 'Questa finestra comparirà una volta sola al primo accesso';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'é€ä¿¡è€…情報ã®å…¥åŠ›ã‚’完了ã—ã¦ãã ã•ã„。';
+$labels['identitydialoghint'] = 'ã“ã®ãƒœãƒƒã‚¯ã‚¹ã¯æœ€åˆã®ãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ä¸€åº¦ã ã‘表示ã•ã‚Œã¾ã™ã€‚';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'សូម​បំពáŸáž‰â€‹áž¢ážáŸ’ážážŸáž‰áŸ’ញាណ​របស់​អ្នក​ផ្ញើ​របស់​អ្នក';
+$labels['identitydialoghint'] = 'ប្រអប់​នáŸáŸ‡â€‹áž”ង្ហាញ​ážáŸ‚​ម្ដង​នៅ​ពáŸáž›â€‹áž…ូល​​ដំបូង​ប៉ុណ្ណោះ។';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = '발송ìžì˜ ì‹ ì›ì„ 완성해주세요.';
+$labels['identitydialoghint'] = 'ì´ ìƒìžëŠ” 최초로 로그ì¸í•  때만 나타납니다.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'tkaya nawniÅŸani nenar ba tawawi bnwsa';
+$labels['identitydialoghint'] = 'am qtwia wadiara yak jar la sarata krawatawa';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'تکایە ناسنامەی نێرەری خۆت تەواوبکە';
+$labels['identitydialoghint'] = 'ئەم خانەیە تەنها لە یەکەم چوونەژوورەوە دەردەکەوێت.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Vervollstänneg w.e.gl deng Sender-Identitéit';
+$labels['identitydialoghint'] = 'Dës Këscht erschéngt just beim éischte Login.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Prašom užpildyti trūkstamą informaciją apie save';
+$labels['identitydialoghint'] = 'Šis langas rodomas tik prisijungus pirmąjį kartą.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'LÅ«dzu aizpildiet JÅ«su, kÄ sÅ«tÄ«tÄja, identitÄtes informÄciju';
+$labels['identitydialoghint'] = 'Å is logs parÄdÄ«sies tikai pirmajÄ autorizÄcijas reizÄ“.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Ве молиме пополнете го идентитетот на иÑпраќачот ';
+$labels['identitydialoghint'] = 'Оваа кутија Ñе појавува Ñамо еднаш на првото најавување ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'à´¸àµà´µàµ€à´•à´°àµâ€à´¤àµà´¤à´¾à´µà´¿à´¨àµà´±àµ† à´µàµà´¯à´•àµà´¤à´¿à´¤àµà´µà´‚ പൂരàµâ€à´¤àµà´¤àµ€à´•à´°à´¿à´•àµà´•àµà´•';
+$labels['identitydialoghint'] = 'ആദàµà´¯à´¤àµà´¤àµ† à´ªàµà´°à´µàµ‡à´¶à´¨à´¤àµà´¤à´¿à´²àµâ€ മാതàµà´°à´®àµ‡ à´ˆ പെടàµà´Ÿà´¿ വരികയàµà´³àµà´³àµ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'ИлгÑÑÑ…Ñд харагдах мÑдÑÑллÑÑ Ð¾Ñ€ÑƒÑƒÐ»Ð½Ð° уу';
+$labels['identitydialoghint'] = 'Ð­Ð½Ñ Ñ…Ð°Ð¹Ñ€Ñ†Ð°Ð³ анх нÑвтрÑÑ… үед нÑг л удаа харагдана.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'कृपया पाठवणा-याची ओळख पूरà¥à¤£ करा';
+$labels['identitydialoghint'] = 'हा चौकोन पहिलà¥à¤¯à¤¾à¤‚दा लॉगिन करताना à¤à¤•à¤¦à¤¾à¤š दिसेल.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Vennligst fullfør din avvsender identitet.';
+$labels['identitydialoghint'] = 'Denne boksen kommer kun ved første pålogging.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Gelieve uw verzend identiteit te vervolledigen';
+$labels['identitydialoghint'] = 'Dit scherm verschijnt enkel bij de eerste aanmelding.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Vul alstublieft uw afzendergegevens in.';
+$labels['identitydialoghint'] = 'Dit scherm verschijnt eenmalig bij uw eerste aanmelding.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Fullfør avsendaridentiteten din.';
+$labels['identitydialoghint'] = 'Denne boksen kjem berre fram ved første pålogging.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Uzupełnij tożsamość nadawcy';
+$labels['identitydialoghint'] = 'To okno pojawia siÄ™ tylko przy pierwszym logowaniu.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor complete a sua identidade';
+$labels['identitydialoghint'] = 'Esta tela aparece somente no primeiro acesso.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Por favor, complete a sua identidade';
+$labels['identitydialoghint'] = 'Esta caixa aparece apenas uma vez no primeiro acesso.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Te rog completează identitatea expeditorului.';
+$labels['identitydialoghint'] = 'Această căsuţă apare doar la prima autentificare.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'ПожалуйÑта, укажите Ваше имÑ.';
+$labels['identitydialoghint'] = 'Данное Ñообщение отображаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ при первом входе.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Doplňte prosím svoju identifikáciu odosielateľa';
+$labels['identitydialoghint'] = 'Toto okno sa zobrazí len raz, pri prvom prihlásení.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Izberite identiteto za pošiljanje';
+$labels['identitydialoghint'] = 'To okno se prikaže le ob prvi prijavi v spletno pošto.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Ju lutemi, plotësoni identitetin tuaj si dërgues';
+$labels['identitydialoghint'] = 'Kjo kuti shfaqet vetëm një herë gjatë hyrjes së parë.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Попуните Ñвој идентитет пошиљаоца';
+$labels['identitydialoghint'] = 'Ово Ñе појављује Ñамо једном при првом пријављивању';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Fyll i namn och avsändaradress under personliga inställningar';
+$labels['identitydialoghint'] = 'Informationen visas endast vid första inloggningen.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'โปรดà¸à¸£à¸­à¸à¸‚้อมูลประจำตัวของผู้ส่ง';
+$labels['identitydialoghint'] = 'ช่องนี้จะปราà¸à¸à¸‚ึ้นเพียงครั้งเดียวในà¸à¸²à¸£à¹€à¸‚้าสู่ระบบครั้งà¹à¸£à¸';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Lütfen gönderici kimliğinizi tamamlayın';
+$labels['identitydialoghint'] = 'Bu ekran oturum ilk kez açıldığın bir kere görüntülenir.';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Будь лаÑка, вкажіть Ваше ім’Ñ';
+$labels['identitydialoghint'] = 'Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶Ð°Ñ”Ñ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ входженнÑ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = 'Xin Ä‘iá»n nhận diện ngÆ°á»i gá»­i của bạn';
+$labels['identitydialoghint'] = 'Hộp này chỉ xuất hiện 1 lần khi đăng nhập lần đầu tiên';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = '请填写å‘é€äººèº«ä»½';
+$labels['identitydialoghint'] = '本æ示仅在第一次登录时显示。';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/new_user_dialog/localization/<lang>.inc                       |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New User Dialog plugin     |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
+*/
+$labels['identitydialogtitle'] = '請完æˆå¡«å¯«æ‚¨çš„身份資訊';
+$labels['identitydialoghint'] = '此視窗åªæœƒæ–¼ç¬¬ä¸€æ¬¡ç™»å…¥æ™‚出ç¾';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/new_user_dialog.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,174 @@
+<?php
+
+/**
+ * Present identities settings dialog to new users
+ *
+ * When a new user is created, this plugin checks the default identity
+ * and sets a session flag in case it is incomplete. An overlay box will appear
+ * on the screen until the user has reviewed/completed his identity.
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli
+ * @author Aleksander Machniak
+ */
+class new_user_dialog extends rcube_plugin
+{
+    public $task    = '';
+    public $noframe = true;
+
+
+    function init()
+    {
+        $this->add_hook('identity_create', array($this, 'create_identity'));
+        $this->register_action('plugin.newusersave', array($this, 'save_data'));
+
+        // register additional hooks if session flag is set
+        if ($_SESSION['plugin.newuserdialog']) {
+            $this->add_hook('render_page', array($this, 'render_page'));
+        }
+    }
+
+    /**
+     * Check newly created identity at first login
+     */
+    function create_identity($p)
+    {
+        // set session flag when a new user was created and the default identity seems to be incomplete
+        if ($p['login'] && !$p['complete']) {
+            $_SESSION['plugin.newuserdialog'] = true;
+        }
+    }
+
+    /**
+     * Callback function when HTML page is rendered
+     * We'll add an overlay box here.
+     */
+    function render_page($p)
+    {
+        if ($_SESSION['plugin.newuserdialog']) {
+            $this->add_texts('localization');
+
+            $rcmail           = rcmail::get_instance();
+            $identity         = $rcmail->user->get_identity();
+            $identities_level = intval($rcmail->config->get('identities_level', 0));
+
+            // compose user-identity dialog
+            $table = new html_table(array('cols' => 2));
+
+            $table->add('title', $this->gettext('name'));
+            $table->add(null, html::tag('input', array(
+                    'type'     => 'text',
+                    'name'     => '_name',
+                    'value'    => $identity['name'],
+                    'disabled' => $identities_level == 4
+            )));
+
+            $table->add('title', $this->gettext('email'));
+            $table->add(null, html::tag('input', array(
+                    'type'     => 'text',
+                    'name'     => '_email',
+                    'value'    => rcube_utils::idn_to_utf8($identity['email']),
+                    'disabled' => in_array($identities_level, array(1, 3, 4))
+            )));
+
+            $table->add('title', $this->gettext('organization'));
+            $table->add(null, html::tag('input', array(
+                    'type'     => 'text',
+                    'name'     => '_organization',
+                    'value'    => $identity['organization'],
+                    'disabled' => $identities_level == 4
+            )));
+
+            $table->add('title', $this->gettext('signature'));
+            $table->add(null, html::tag('textarea', array(
+                    'name' => '_signature',
+                    'rows' => '3',
+                ),
+                $identity['signature']
+            ));
+
+            // add overlay input box to html page
+            $rcmail->output->add_footer(html::tag('form', array(
+                    'id' => 'newuserdialog',
+                    'action' => $rcmail->url('plugin.newusersave'),
+                    'method' => 'post'
+                ),
+                html::p('hint', rcube::Q($this->gettext('identitydialoghint'))) .
+                    $table->show() .
+                    html::p(array('class' => 'formbuttons'),
+                        html::tag('input', array('type' => 'submit',
+                            'class' => 'button mainaction', 'value' => $this->gettext('save'))))
+            ));
+
+            $title  = rcube::JQ($this->gettext('identitydialogtitle'));
+            $script = "
+$('#newuserdialog').show()
+  .dialog({modal:true, resizable:false, closeOnEscape:false, width:450, title:'$title'})
+  .submit(function() {
+    var i, request = {}, form = $(this).serializeArray();
+    for (i in form)
+      request[form[i].name] = form[i].value;
+
+      rcmail.http_post('plugin.newusersave', request, true);
+      return false;
+  });
+
+$('input[name=_name]').focus();
+rcube_webmail.prototype.new_user_dialog_close = function() { $('#newuserdialog').dialog('close'); }
+";
+            // disable keyboard events for messages list (#1486726)
+            $rcmail->output->add_script($script, 'docready');
+
+            $this->include_stylesheet('newuserdialog.css');
+        }
+    }
+
+    /**
+     * Handler for submitted form (ajax request)
+     *
+     * Check fields and save to default identity if valid.
+     * Afterwards the session flag is removed and we're done.
+     */
+    function save_data()
+    {
+        $rcmail      = rcmail::get_instance();
+        $identity    = $rcmail->user->get_identity();
+        $ident_level = intval($rcmail->config->get('identities_level', 0));
+        $disabled    = array();
+
+        $save_data = array(
+            'name'         => rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST),
+            'email'        => rcube_utils::get_input_value('_email', rcube_utils::INPUT_POST),
+            'organization' => rcube_utils::get_input_value('_organization', rcube_utils::INPUT_POST),
+            'signature'    => rcube_utils::get_input_value('_signature', rcube_utils::INPUT_POST),
+        );
+
+        if ($ident_level == 4) {
+            $disabled = array('name', 'email', 'organization');
+        }
+        else if (in_array($ident_level, array(1, 3))) {
+            $disabled = array('email');
+        }
+
+        foreach ($disabled as $key) {
+            $save_data[$key] = $identity[$key];
+        }
+
+        if (empty($save_data['name']) || empty($save_data['email'])) {
+            $rcmail->output->show_message('formincomplete', 'error');
+        }
+        else if (!rcube_utils::check_email($save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']))) {
+            $rcmail->output->show_message('emailformaterror', 'error', array('email' => $save_data['email']));
+        }
+        else {
+            // save data
+            $rcmail->user->update_identity($identity['identity_id'], $save_data);
+            $rcmail->session->remove('plugin.newuserdialog');
+            // hide dialog
+            $rcmail->output->command('new_user_dialog_close');
+            $rcmail->output->show_message('successfullysaved', 'confirmation');
+        }
+
+        $rcmail->output->send();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/newuserdialog.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+/** Styles for the new-user-dialog box */
+
+#newuserdialog {
+	display: none;
+}
+
+#newuserdialog h3 {
+	color: #333;
+	font-size: normal;
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+#newuserdialog p.hint {
+	margin-top: 0.5em;
+	margin-bottom: 1em;
+	font-style: italic;
+}
+
+#newuserdialog table td.title {
+	color: #666;
+	text-align: right;
+	padding-right: 1em;
+	white-space: nowrap;
+}
+
+#newuserdialog table td input,
+#newuserdialog table td textarea {
+	width: 20em;
+}
+
+#newuserdialog .formbuttons {
+	margin-top: 1.5em;
+	text-align: center;
+}
+
+.ui-dialog-titlebar-close {
+	display: none;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_dialog/newuserdialog.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#newuserdialog{display:none}#newuserdialog h3{color:#333;font-size:normal;margin-top:0;margin-bottom:0}#newuserdialog p.hint{margin-top:.5em;margin-bottom:1em;font-style:italic}#newuserdialog table td.title{color:#666;text-align:right;padding-right:1em;white-space:nowrap}#newuserdialog table td input,#newuserdialog table td textarea{width:20em}#newuserdialog .formbuttons{margin-top:1.5em;text-align:center}.ui-dialog-titlebar-close{display:none}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_identity/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/new_user_identity",
+    "type": "roundcube-plugin",
+    "description": "Populates a new user's default identity from LDAP on their first visit.",
+    "license": "GPLv3+",
+    "version": "1.1",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_identity/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+<?php
+
+// The id of the address book to use to automatically set a
+// user's full name in their new identity. (This should be an
+// string, which refers to the $config['ldap_public'] array.)
+$config['new_user_identity_addressbook'] = 'People';
+
+// When automatically setting a user's full name in their
+// new identity, match the user's login name against this field.
+$config['new_user_identity_match'] = 'uid';
+
+// Determine whether to import user's identities on each login.
+// New user identity will be created for each e-mail address
+// present in address book, but not assigned to any identity.
+$config['new_user_identity_onlogin'] = false;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/new_user_identity/new_user_identity.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,132 @@
+<?php
+/**
+ * New user identity
+ *
+ * Populates a new user's default identity from LDAP on their first visit.
+ *
+ * This plugin requires that a working public_ldap directory be configured.
+ *
+ * @author Kris Steinhoff
+ * @license GNU GPLv3+
+ */
+class new_user_identity extends rcube_plugin
+{
+    public $task = 'login';
+
+    private $rc;
+    private $ldap;
+
+    function init()
+    {
+        $this->rc = rcmail::get_instance();
+
+        $this->add_hook('user_create', array($this, 'lookup_user_name'));
+        $this->add_hook('login_after', array($this, 'login_after'));
+    }
+
+    function lookup_user_name($args)
+    {
+        if ($this->init_ldap($args['host'])) {
+            $results = $this->ldap->search('*', $args['user'], true);
+
+            if (count($results->records) == 1) {
+                $user_name  = is_array($results->records[0]['name']) ? $results->records[0]['name'][0] : $results->records[0]['name'];
+                $user_email = is_array($results->records[0]['email']) ? $results->records[0]['email'][0] : $results->records[0]['email'];
+
+                $args['user_name']  = $user_name;
+                $args['email_list'] = array();
+
+                if (!$args['user_email'] && strpos($user_email, '@')) {
+                    $args['user_email'] = rcube_utils::idn_to_ascii($user_email);
+                }
+
+                foreach (array_keys($results[0]) as $key) {
+                    if (!preg_match('/^email($|:)/', $key)) {
+                        continue;
+                    }
+
+                    foreach ((array) $results->records[0][$key] as $alias) {
+                        if (strpos($alias, '@')) {
+                            $args['email_list'][] = rcube_utils::idn_to_ascii($alias);
+                        }
+                    }
+                }
+
+            }
+        }
+
+        return $args;
+    }
+
+    function login_after($args)
+    {
+        $this->load_config();
+
+        if ($this->ldap || !$this->rc->config->get('new_user_identity_onlogin')) {
+            return $args;
+        }
+
+        $identities = $this->rc->user->list_emails();
+        $ldap_entry = $this->lookup_user_name(array(
+                'user' => $this->rc->user->data['username'],
+                'host' => $this->rc->user->data['mail_host'],
+        ));
+
+        foreach ((array) $ldap_entry['email_list'] as $email) {
+            foreach ($identities as $identity) {
+                if ($identity['email'] == $email) {
+                    continue 2;
+                }
+            }
+
+            $plugin = $this->rc->plugins->exec_hook('identity_create', array(
+                'login'  => true,
+                'record' => array(
+                    'user_id'  => $this->rc->user->ID,
+                    'standard' => 0,
+                    'email'    => $email,
+                    'name'     => $ldap_entry['user_name']
+                ),
+            ));
+
+            if (!$plugin['abort'] && $plugin['record']['email']) {
+                $this->rc->user->insert_identity($plugin['record']);
+            }
+        }
+        return $args;
+    }
+
+    private function init_ldap($host)
+    {
+        if ($this->ldap) {
+            return $this->ldap->ready;
+        }
+
+        $this->load_config();
+
+        $addressbook = $this->rc->config->get('new_user_identity_addressbook');
+        $ldap_config = (array)$this->rc->config->get('ldap_public');
+        $match       = $this->rc->config->get('new_user_identity_match');
+
+        if (empty($addressbook) || empty($match) || empty($ldap_config[$addressbook])) {
+            return false;
+        }
+
+        $this->ldap = new new_user_identity_ldap_backend(
+            $ldap_config[$addressbook],
+            $this->rc->config->get('ldap_debug'),
+            $this->rc->config->mail_domain($host),
+            $match);
+
+        return $this->ldap->ready;
+    }
+}
+
+class new_user_identity_ldap_backend extends rcube_ldap
+{
+    function __construct($p, $debug, $mail_domain, $search)
+    {
+        parent::__construct($p, $debug, $mail_domain);
+        $this->prop['search_fields'] = (array)$search;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/newmail_notifier",
+    "type": "roundcube-plugin",
+    "description": "Supports three methods of notification: 1. Basic - focus browser window and change favicon 2. Sound - play wav file 3. Desktop - display desktop notification (using HTML5 Notification API feature).",
+    "license": "GPLv3+",
+    "version": "0.8",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+<?php
+
+// Enables basic notification
+$config['newmail_notifier_basic'] = false;
+
+// Enables sound notification
+$config['newmail_notifier_sound'] = false;
+
+// Enables desktop notification
+$config['newmail_notifier_desktop'] = false;
+
+// Desktop notification close timeout in seconds
+$config['newmail_notifier_desktop_timeout'] = 10;
+
+?>
Binary file plugins/newmail_notifier/favicon.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'إظهار رسالة تنبيه ÙÙ‰ المتصÙØ­ عند وصول رسالة جديدة';
+$labels['desktop'] = 'إظهار رسالة تنبيه على سطح المكتب عند وصول رسالة جديدة';
+$labels['sound'] = 'التنبيه الصوتى عند وصول رسالة جديدة';
+$labels['test'] = 'إختبار';
+$labels['title'] = 'رسالة جديدة';
+$labels['body'] = 'لديك رسالة جديدة';
+$labels['testbody'] = 'هذه رسالة تجربية';
+$labels['desktopdisabled'] = 'رسائل التنبيه على سطح المكتب غير Ù…Ùعلة ÙÙ‰ متصÙØ­ الانترنت الخاص بك';
+$labels['desktopunsupported'] = 'المتصÙØ­ الخاص بك لا يدعم رسائل سطح المكتب';
+$labels['desktoptimeout'] = 'اغلاق تنبيهات سطح المكتب';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Amosar notificaciones del restolador nun mensaxe nuevu';
+$labels['desktop'] = 'Amosar notificaciones d\'escritoriu nun mensaxe nuevu';
+$labels['sound'] = 'Reproducir el soníu nun mensaxe nuevu';
+$labels['test'] = 'Prueba';
+$labels['title'] = '¡Mensaxe nuevu!';
+$labels['body'] = 'Recibisti un mensaxe nuevu';
+$labels['testbody'] = 'Esta ye una notificación de prueba';
+$labels['desktopdisabled'] = 'Les notificaciones d\'escritoriu tán deshabilitaes nel to restolador.';
+$labels['desktopunsupported'] = 'El to restolador nun sofita notificaciones d\'escritoriu.';
+$labels['desktoptimeout'] = 'Zarrar notificación d\'escritoriu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Yeni məktubun gəlməsi haqda brauzerdə xəbər ver';
+$labels['desktop'] = 'Yeni məktubun gəlməsi haqda iş masasında xəbər ver';
+$labels['sound'] = 'Yeni məktubun gəlməsi haqda səs siqnalı ver';
+$labels['test'] = 'Sınaq';
+$labels['title'] = 'Yeni məktub!';
+$labels['body'] = 'Sizə məktub gəldi';
+$labels['testbody'] = 'Bu sınaq bildirişidir';
+$labels['desktopdisabled'] = 'Sizin brauzerdə iş masasında bildiriş söndürülüb';
+$labels['desktopunsupported'] = 'Sizin brauzer iş masasında bildiriş funksiyasını dəstəkləmir';
+$labels['desktoptimeout'] = 'Masaüstü bildirişi bağla';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Паказваць апавÑшчÑнні аб атрыманні новых паведамленнÑÑž у браўзеры';
+$labels['desktop'] = 'Паказваць апавÑшчÑнні аб атрыманні новых паведамленнÑÑž на працоўным Ñтале';
+$labels['sound'] = 'Ðгучваць атрыманне новых паведамленнÑÑž';
+$labels['test'] = 'Праверыць';
+$labels['title'] = 'Ðовы ліÑÑ‚!';
+$labels['body'] = 'Вы атрымалі новае паведамленне.';
+$labels['testbody'] = 'ГÑта Ñ‚ÑÑтавае апавÑшчÑнне.';
+$labels['desktopdisabled'] = 'ÐпавÑшчÑнні на працоўным Ñтале Ð°Ð´ÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ Ñž браўзеры.';
+$labels['desktopunsupported'] = 'Ваш браўзер не падтрымлівае апавÑшчÑнні на працоўным Ñтале.';
+$labels['desktoptimeout'] = 'Зачыніць апавÑшчÑнне на працоўным Ñтале';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Показва извеÑÑ‚Ð¸Ñ Ð² браузъра при ново пиÑмо';
+$labels['desktop'] = 'Показва извеÑÑ‚Ð¸Ñ Ð½Ð° Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚ при ново пиÑмо';
+$labels['sound'] = 'Възпроизведи звук при ново пиÑмо';
+$labels['test'] = 'ТеÑÑ‚';
+$labels['title'] = 'Ðово пиÑмо!';
+$labels['body'] = 'Получихте ново пиÑмо.';
+$labels['testbody'] = 'Това е теÑтово извеÑтие.';
+$labels['desktopdisabled'] = 'ИзвеÑтиÑта на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚ Ñа изключени за Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€.';
+$labels['desktopunsupported'] = 'ВашиÑÑ‚ браузър не поддържа извеÑÑ‚Ð¸Ñ Ð½Ð° Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚.';
+$labels['desktoptimeout'] = 'ЗатварÑне на извеÑтие на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Diskouez kemennoù ar merdeer evit kemennadennoù nevez';
+$labels['desktop'] = 'Diskouez kemennoù ar burev evit kemennadennoù nevez';
+$labels['sound'] = 'Seniñ ar son pa kemennadenn nevez';
+$labels['test'] = 'Taol-arnod';
+$labels['title'] = 'Kemennadenn nevez !';
+$labels['body'] = 'Resevet ho p\'eus ur postel nevez';
+$labels['testbody'] = 'An dra se a zo un taol arnod kemenn';
+$labels['desktopdisabled'] = 'Diweredekaet eo kemennoù ar burev en ho merdeer.';
+$labels['desktopunsupported'] = 'N\'eo ket skoret kemennoù ar burev gant ho merdeer.';
+$labels['desktoptimeout'] = 'Serr burev kemen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Prikaži obavijesti za nove poruke u pregledniku';
+$labels['desktop'] = 'Prikaži obavijesti za nove poruke na desktopu';
+$labels['sound'] = 'ZvuÄni signal za novu poruku';
+$labels['test'] = 'Testiraj';
+$labels['title'] = 'Novi email!';
+$labels['body'] = 'Dobili ste novu poruku.';
+$labels['testbody'] = 'Ovo je testna obavijest.';
+$labels['desktopdisabled'] = 'Desktop obavijesti su onemogućene u vašem pregledniku.';
+$labels['desktopunsupported'] = 'Vaš preglednik ne podržava desktop obavijesti.';
+$labels['desktoptimeout'] = 'Zatvori desktop obavijesti';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Mostra notificacions del navegador quan hi hagi un missatge nou';
+$labels['desktop'] = 'Mostra notificacions de l\'escriptori quan hi hagi un missatge nou';
+$labels['sound'] = 'Reprodueix el so quan hi hagi un missatge nou';
+$labels['test'] = 'Prova';
+$labels['title'] = 'Missatge nou!';
+$labels['body'] = 'Heu rebut un missatge nou.';
+$labels['testbody'] = 'Això és una notificació de prova.';
+$labels['desktopdisabled'] = 'Les notificacions d\'escriptori estan deshabilitades al vostre navegador.';
+$labels['desktopunsupported'] = 'El vostre navegador no permet les notificacions d\'escriptori.';
+$labels['desktoptimeout'] = 'Tanca la notificació de l\'escriptori';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Zobrazit upozornÄ›ní v prohlížeÄi pÅ™i příchozí zprávÄ›';
+$labels['desktop'] = 'Zobrazit upozornění na ploše při příchozí zprávě';
+$labels['sound'] = 'Přehrát zvuk při příchozí zprávě';
+$labels['test'] = 'Vyzkoušet';
+$labels['title'] = 'Nová zpráva!';
+$labels['body'] = 'Dostali jste novou zprávu.';
+$labels['testbody'] = 'Toto je zkouška upozornění.';
+$labels['desktopdisabled'] = 'UpozornÄ›ní na ploÅ¡e jsou ve vaÅ¡em prohlížeÄi vypnuté.';
+$labels['desktopunsupported'] = 'Váš prohlížeÄ nepodporuje upozornÄ›ní na ploÅ¡e.';
+$labels['desktoptimeout'] = 'Zavřít upozornění na ploše';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Dangos hysbysiadau porwr ar neges newydd';
+$labels['desktop'] = 'Dangos hysbysiadau penbwrdd ar neges newydd';
+$labels['sound'] = 'Chwarae sŵn ar neges newydd';
+$labels['test'] = 'Prawf';
+$labels['title'] = 'Ebost Newydd!';
+$labels['body'] = 'Rydych wedi derbyn neges newydd.';
+$labels['testbody'] = 'Hysbysiad prawf yw hwn.';
+$labels['desktopdisabled'] = 'Mae hysbysiadau penbwrdd wedi ei analluogi yn eich porwr';
+$labels['desktopunsupported'] = 'Nid yw eich porwr yn cefnogi hysbysiadau penbwrdd.';
+$labels['desktoptimeout'] = 'Cau hysbysiad penbwrdd';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Vis browserbesked ved ny besked';
+$labels['desktop'] = 'Vis skrivebordsbesked ved ny besked';
+$labels['sound'] = 'Afspil en lyd ved ny besked';
+$labels['test'] = 'Test';
+$labels['title'] = 'Ny besked!';
+$labels['body'] = 'Du har modtaget en ny besked.';
+$labels['testbody'] = 'Dette er en test meddelelse.';
+$labels['desktopdisabled'] = 'Skrivebordsbeskeder er deaktiveret i din browser.';
+$labels['desktopunsupported'] = 'Din browser understøtter ikke skrivebordsbeskeder.';
+$labels['desktoptimeout'] = 'Luk skrivebordsbesked';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Anzeige im Browser bei neuer Nachricht';
+$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
+$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
+$labels['test'] = 'Test';
+$labels['title'] = 'Neue E-Mail!';
+$labels['body'] = 'Sie haben eine neue Nachricht';
+$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
+$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
+$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
+$labels['desktoptimeout'] = 'Anzeige im Browser schliessen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Benachrichtigung im Browser bei neuer Nachricht';
+$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
+$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
+$labels['test'] = 'Test';
+$labels['title'] = 'Neue E-Mail!';
+$labels['body'] = 'Sie haben eine neue Nachricht';
+$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
+$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
+$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
+$labels['desktoptimeout'] = 'Desktop-Benachrichtigung geschlossen.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Εμφανίση ειδοποιήσεων Ï€ÏόγÏαμματος πεÏιήγησης στο νέο μήνυμα';
+$labels['desktop'] = 'Εμφάνιση ειδοποιήσεων στην επιφάνεια εÏγασίας για νέο μήνυμα ';
+$labels['sound'] = 'Ηχητική ειδοποίηση κατά την λήψη νέων μηνυμάτων';
+$labels['test'] = 'Δοκιμή';
+$labels['title'] = 'Nεο Email!';
+$labels['body'] = 'Έχετε λάβει ένα νέο μήνυμα.';
+$labels['testbody'] = 'Αυτή είναι μια δοκιμή ειδοποίησης.';
+$labels['desktopdisabled'] = 'Οι ειδοποιήσεις στην επιφάνεια εÏγασίας ειναι απενεÏγοποιημένες στον πεÏιηγητή σας.';
+$labels['desktopunsupported'] = 'Ο πεÏιηγητής σας δεν υποστηÏίζει ειδοποιήσεις στην επιφάνεια εÏγασίας.';
+$labels['desktoptimeout'] = 'Κλείσιμο ειδοποίησης επιφάνειας εÏγασίας';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Display browser notifications on new message';
+$labels['desktop'] = 'Display desktop notifications on new message';
+$labels['sound'] = 'Play the sound on new message';
+$labels['test'] = 'Test';
+$labels['title'] = 'New Email!';
+$labels['body'] = 'You\'ve received a new message.';
+$labels['testbody'] = 'This is a test notification.';
+$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
+$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
+$labels['desktoptimeout'] = 'Close desktop notification';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Display browser notifications on new message';
+$labels['desktop'] = 'Display desktop notifications on new message';
+$labels['sound'] = 'Play sound on new message';
+$labels['test'] = 'Test';
+$labels['title'] = 'New Email!';
+$labels['body'] = 'You\'ve received a new message.';
+$labels['testbody'] = 'This is a test notification.';
+$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
+$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
+$labels['desktoptimeout'] = 'Close desktop notification';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+
+$labels['basic'] = 'Display browser notifications on new message';
+$labels['desktop'] = 'Display desktop notifications on new message';
+$labels['sound'] = 'Play the sound on new message';
+$labels['test'] = 'Test';
+$labels['title'] = 'New Email!';
+$labels['body'] = 'You\'ve received a new message.';
+$labels['testbody'] = 'This is a test notification.';
+$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
+$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
+$labels['desktoptimeout'] = 'Close desktop notification';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Montri atentigojn de retumilo pri nova mesaÄo';
+$labels['desktop'] = 'Montri atentigojn de komputilo pri nova mesaÄo';
+$labels['sound'] = 'Ludi sonon por nova mesaÄo';
+$labels['test'] = 'Testi';
+$labels['title'] = 'Nova retmesaÄo!';
+$labels['body'] = 'Vi ricevis novan mesaÄon.';
+$labels['testbody'] = 'Tio estas testo pri atentigo.';
+$labels['desktopdisabled'] = 'Atentigoj de komputilo estas malÅaltitaj en via retumilo.';
+$labels['desktopunsupported'] = 'Via retumilo ne subtenas atentigojn de komputilo.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Mostrar notificaciones del navegador en nuevos mensajes';
+$labels['desktop'] = 'Mostrar notificaciones de escritorio en nuevos mensajes';
+$labels['sound'] = 'Ejecutar sonido en nuevos mensajes';
+$labels['test'] = 'Probar';
+$labels['title'] = '¡Nuevo correo electrónico!';
+$labels['body'] = 'Has recibido un nuevo correo electrónico.';
+$labels['testbody'] = 'Esta es una notificación de prueba.';
+$labels['desktopdisabled'] = 'Notificaciones de escritorio está deshabilitado en tu navegador.';
+$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones de escritorio.';
+$labels['desktoptimeout'] = 'Cerrar notificaciones de escritorio';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Mostrar notificación cuando haya nuevos mensajes';
+$labels['desktop'] = 'Mostrar notificación en escritorio cuando haya nuevos mensajes';
+$labels['sound'] = 'Reproducir sonido cuando haya nuevos mensajes';
+$labels['test'] = 'Prueba';
+$labels['title'] = 'Correo nuevo!';
+$labels['body'] = 'Has recibido correo nuevo';
+$labels['testbody'] = 'Esta es una notificación de prueba';
+$labels['desktopdisabled'] = 'Las notificaciones en escritorio están deshabilitadas en tu navegador';
+$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones en escritorio';
+$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Mostrar notificaciones del navegador al recibir un nuevo mensaje';
+$labels['desktop'] = 'Mostrar notificaciones de escritorio al recibir un nuevo mensaje';
+$labels['sound'] = 'Reproducir sonido al recibir un nuevo mensaje';
+$labels['test'] = 'Prueba';
+$labels['title'] = '¡Mensaje nuevo!';
+$labels['body'] = 'Ha recibido un mensaje nuevo.';
+$labels['testbody'] = 'Esta es una notificación de prueba.';
+$labels['desktopdisabled'] = 'Las notificaciones de escritorio están deshabilitadas en su navegador.';
+$labels['desktopunsupported'] = 'Su navegador no soporta notificaciones de escritorio.';
+$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Uue kirja saabumisel näita lehitsejas teavitust';
+$labels['desktop'] = 'Uue kirja saabumisel näita töölaua teavitust';
+$labels['sound'] = 'Uue kirja saabumisel mängi heli';
+$labels['test'] = 'Proovi';
+$labels['title'] = 'Uus kiri!';
+$labels['body'] = 'Saabus uus kiri.';
+$labels['testbody'] = 'See on teavituse proov.';
+$labels['desktopdisabled'] = 'Töölaua märguanded on su veebilehitsejas keelatud.';
+$labels['desktopunsupported'] = 'Sinu veebilehitseja ei toeta töölaua märguandeid.';
+$labels['desktoptimeout'] = 'Sulge töölaua teavitus';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Bistaratu nabigatzailearen jakinarazpenak mezu berrian';
+$labels['desktop'] = 'Bistaratu sistemaren jakinarazpenak mezu berrian';
+$labels['sound'] = 'Jo soinu bat mezu berriarekin';
+$labels['test'] = 'Testa';
+$labels['title'] = 'ePosta berria';
+$labels['body'] = 'Mezu berria jaso duzu';
+$labels['testbody'] = 'Hau jakinarazpen proba bat da';
+$labels['desktopdisabled'] = 'Sistemaren jakinarazpenak ezgaituak daude zure nabigatzailean';
+$labels['desktopunsupported'] = 'Zure nabigatzaileak ez ditu sistemaren jakinarazpenak onartzen.';
+$labels['desktoptimeout'] = 'Itxi mahaigaineko jakinarazpena';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'نمایش تذکرهای مرورگر برای پیام جدید';
+$labels['desktop'] = 'نمایش تذکرهای رومیزی برای پیام جدید';
+$labels['sound'] = 'پخش صدا برای پیام جدید';
+$labels['test'] = 'آزمایش';
+$labels['title'] = 'رایانامه‌ی جدید!';
+$labels['body'] = 'شما یک پیام جدید دریاÙت کرده‌اید.';
+$labels['testbody'] = 'این یک تذکر آزمایشی است.';
+$labels['desktopdisabled'] = 'تذکرهای رومیزی در مرورگر شما غیرÙعال شده‌اند.';
+$labels['desktopunsupported'] = 'مرورگر شما تذکرهای رومیزی را پشتیبانی نمی‌کند.';
+$labels['desktoptimeout'] = 'بستن تذکر دسکتاپ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Näytä selainilmoitus uuden viestin saapuessa';
+$labels['desktop'] = 'Näytä työpöytäilmoitus uuden viestin saapuessa';
+$labels['sound'] = 'Toista ääni uuden viestin saapuessa';
+$labels['test'] = 'Testaa';
+$labels['title'] = 'Uutta sähköpostia!';
+$labels['body'] = 'Sait uuden viestin.';
+$labels['testbody'] = 'Tämä on testi-ilmoitus.';
+$labels['desktopdisabled'] = 'Työpöytäilmoitukset on estetty selaimessa.';
+$labels['desktopunsupported'] = 'Selaimesi ei tue työpöytäilmoituksia.';
+$labels['desktoptimeout'] = 'Sulje työpöytäilmoitus';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Vís kaga kunngerðir tá ið nýtt boð verður stovna';
+$labels['desktop'] = 'Vís skrivaraborð kunngerðir tá ið nýtt boð er stovna';
+$labels['sound'] = 'Spæl ljóð tá ið nýtt boð verður móttikið';
+$labels['test'] = 'Roynd';
+$labels['title'] = 'Nýggjur teldupostur!';
+$labels['body'] = 'Tú hevur móttikið eini boð.';
+$labels['testbody'] = 'Hettar eru eini royndar boð.';
+$labels['desktopdisabled'] = 'Skrivaraborð kunngerðir eru sløktar í tínum kaga.';
+$labels['desktopunsupported'] = 'Tín kagi studlar ikki skriviborða kunngerðir.';
+$labels['desktoptimeout'] = 'Sløkk skriviborða kunngerðir';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Afficher les notifications du navigateur pour les nouveaux courriels';
+$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels ';
+$labels['sound'] = 'Jouer le son pour les nouveaux courriels';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nouveau courriel';
+$labels['body'] = 'Vous avez reçu un nouveau courriel.';
+$labels['testbody'] = 'Ceci est une notification de test.';
+$labels['desktopdisabled'] = 'Les notifications du bureau sont désactivées dans votre navigateur.';
+$labels['desktopunsupported'] = 'Votre navigateur ne prend pas en charge les notifications du bureau.';
+$labels['desktoptimeout'] = 'Fermer la notification du bureau';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Toan browser notifikaasjes op nij berjocht';
+$labels['desktop'] = 'Toan desktop notifikaasjes op nij berjocht';
+$labels['sound'] = 'Spylje it lûd op nij berjocht';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nije e-post!';
+$labels['body'] = 'Jo hawwe in nij berjocht.';
+$labels['testbody'] = 'Dit is in test notifikaasje.';
+$labels['desktopdisabled'] = 'Desktop notifikaasjes binne útskeakele yn jo browser.';
+$labels['desktopunsupported'] = 'Jo browser stipet gjin desktop notifikaasjes.';
+$labels['desktoptimeout'] = 'Slút desktop notifikaasje';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['sound'] = 'Seinn an fhuaim nuair a bhíonn teachtaireacht nua ann';
+$labels['test'] = 'Tástáil';
+$labels['title'] = 'Ríomhphost Nua!';
+$labels['body'] = 'Tá teachtaireacht nua agat.';
+$labels['desktoptimeout'] = 'Dún an fógra ar an ndeasc';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Amosar notificacións no navegador cando entre unha mensaxe nova';
+$labels['desktop'] = 'Amosar notificacións no escritorio cando chegue unha mensaxe nova';
+$labels['sound'] = 'Reproducir un son cando chegue unha nova mensaxe';
+$labels['test'] = 'Proba';
+$labels['title'] = 'Novo Correo!';
+$labels['body'] = 'Recibiches unha nova mensaxe';
+$labels['testbody'] = 'Esta é unha notificación de proba';
+$labels['desktopdisabled'] = 'As notificacións de escritorio están desactivadas no teu navegador';
+$labels['desktopunsupported'] = 'O teu navegador non soporta notificacións de escritorio.';
+$labels['desktoptimeout'] = 'Pechar notificación de escritorio';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = '×יתות מהדפדפן על הגעת הודעות חדשות';
+$labels['desktop'] = '×יתות משולחן העבודה על הגעת הודעות חדשות';
+$labels['sound'] = 'השמעת ×יתות קולי בעת ×”×’×¢×” של הודעה חדשה';
+$labels['test'] = 'בדיקה';
+$labels['title'] = 'הודעה חדשה !';
+$labels['body'] = 'התקבלה הודעה חדשה';
+$labels['testbody'] = '×–×” ×יתות לנסיון';
+$labels['desktopdisabled'] = '××™×ª×•×ª×™× ×ž×©×•×œ×—×Ÿ העבודה ××™× × ×¤×¢×™×œ×™× ×‘×“×¤×“×¤×Ÿ שלך';
+$labels['desktopunsupported'] = 'הדפדפן שלך ×ינו תומך ב××™×ª×•×ª×™× ×ž×©×•×œ×—×Ÿ העבודה';
+$labels['desktoptimeout'] = 'ביטול ×יתות משולחן העבודה על הגעת הודעות חדשות';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Prikaži dojave preglednika kada dođe nova poruka';
+$labels['desktop'] = 'Prikaži dojave na desktopu kada dođe nova poruka';
+$labels['sound'] = 'Pusti zvuk kada dođe nova poruka';
+$labels['test'] = 'Test';
+$labels['title'] = 'Novi Email!';
+$labels['body'] = 'Primili ste novu poruku';
+$labels['testbody'] = 'Ovo je probna dojava.';
+$labels['desktopdisabled'] = 'Dojave na desktopu su onemogućene u vašem pregledniku.';
+$labels['desktopunsupported'] = 'Vaš preglednik ne podržava dojave na desktopu.';
+$labels['desktoptimeout'] = 'Zatvori dojavu na desktopu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Értesítés megjelenítése böngészőben amikor új üzenet érkezik';
+$labels['desktop'] = 'Értesítés megjelenítése az asztalon amikor új üzenet érkezik';
+$labels['sound'] = 'Hang lejátszása új üzenet érkezésekor';
+$labels['test'] = 'Próba';
+$labels['title'] = 'Új üzenet!';
+$labels['body'] = 'Új üzenet érkezett.';
+$labels['testbody'] = 'Ez egy értesítési próba.';
+$labels['desktopdisabled'] = 'A böngészőben tiltva van az asztali értesítések megjelenítése.';
+$labels['desktopunsupported'] = 'A böngésző nem támogatja az asztali értesítések megjelenítését.';
+$labels['desktoptimeout'] = 'Az értesítés bezárása';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ¦Õ¶Õ¶Õ¡Ö€Õ¯Õ¹Õ« Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´ Õ¶Õ¸Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ½Õ¿Õ¡Õ¶Õ¡Õ¬Õ«Õ½';
+$labels['desktop'] = 'Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ½Õ¥Õ²Õ¡Õ¶Õ¡Õ¤Ö€Õ« Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´ Õ¶Õ¸Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ½Õ¿Õ¡Õ¶Õ¡Õ¬Õ«Õ½';
+$labels['sound'] = 'ÕÕ¡ÕµÕ¶ Õ°Õ¡Õ¶Õ¥Õ¬ Õ¶Õ¸Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ½Õ¿Õ¡Õ¶Õ¡Õ¬Õ«Õ½';
+$labels['test'] = 'ÖƒÕ¸Ö€Õ±Õ¡Ö€Õ¯Õ¸Ö‚Õ´';
+$labels['title'] = 'Õ†Õ¸Ö€ Õ§Õ¬ÖƒÕ¸Õ½Õ¿';
+$labels['body'] = 'Ô´Õ¸Ö‚Ö„ Õ½Õ¿Õ¡ÖÕ¡Ö„ Õ¶Õ¸Ö€ Õ°Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶';
+$labels['testbody'] = 'ÕÕ¡ ÖƒÕ¸Ö€Õ±Õ¶Õ¡Õ¯Õ¡Õ¶ Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´ Õ§';
+$labels['desktopdisabled'] = 'ÕÕ¥Õ²Õ¡Õ¶Õ¡Õ¤Ö€Õ« Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨ ÕÕ¥Ö€ Õ¦Õ¶Õ¶Õ¡Ö€Õ¯Õ¹Õ¸Ö‚Õ´ Õ¡Õ¶Õ»Õ¡Õ¿Õ¾Õ¡Õ® Õ¥Õ¶';
+$labels['desktopunsupported'] = 'ÕÕ¥Ö€ Õ¦Õ¶Õ¶Õ¡Ö€Õ¯Õ«Õ¹Õ¨ Õ¹Õ¸Ö‚Õ¶Õ« Õ½Õ¥Õ²Õ¡Õ¶Õ¡Õ¤Ö€Õ« Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Ö‰';
+$labels['desktoptimeout'] = 'Õ“Õ¡Õ¯Õ¥Õ¬ Õ½Õ¥Õ²Õ¡Õ¶Õ¡Õ¤Ö€Õ« Õ®Õ¡Õ¶Õ¸Ö‚ÖÕ¸Ö‚Õ´Õ¨';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Presentar notificationes de navigator quando un nove message arriva';
+$labels['desktop'] = 'Presentar notificationes de scriptorio quando un nove message arriva';
+$labels['sound'] = 'Facer sonar un sono quando un nove message arriva';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nove e-mail!';
+$labels['body'] = 'Vos ha recipite un nove message.';
+$labels['testbody'] = 'Iste es un notification de test.';
+$labels['desktopdisabled'] = 'Le notificationes de scriptorio ha essite disactivate in vostre navigator.';
+$labels['desktopunsupported'] = 'Vostre navigator non supporta le notificationes de scriptorio.';
+$labels['desktoptimeout'] = 'Clauder notification de scriptorio';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Tampilkan pemberitahuan pada peramban saat ada pesan baru';
+$labels['desktop'] = 'Tampilkan pemberitahuan pada desktop saat ada pesan baru';
+$labels['sound'] = 'Mainkan suara saat ada pesan baru';
+$labels['test'] = 'Uji';
+$labels['title'] = 'Email Baru!';
+$labels['body'] = 'Anda telah menerima sebuah pesan baru.';
+$labels['testbody'] = 'Ini adalah percobaan pemberitahuan.';
+$labels['desktopdisabled'] = 'Pemberitahuan di desktop dimatikan pada peramban Anda.';
+$labels['desktopunsupported'] = 'Peramban Anda tidak mendukung pemberitahuan pada desktop';
+$labels['desktoptimeout'] = 'Tutup pemberitahuan pada desktop';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Birta tilkynningu í vafra þegar ný skeyti berast';
+$labels['desktop'] = 'Birta tilkynningu á skjáborði þegar ný skeyti berast';
+$labels['sound'] = 'Spila hljóðið þegar ný skeyti berast';
+$labels['test'] = 'Prófa';
+$labels['title'] = 'Nýr tölvupóstur!';
+$labels['body'] = 'Þú hefur fengið nýtt skeyti.';
+$labels['testbody'] = 'Þetta er prufutilkynning.';
+$labels['desktopdisabled'] = 'Tilkynningar á skjáborði eru ekki virkar í vafranum þínum.';
+$labels['desktopunsupported'] = 'Vafrinn þinn styður ekki tilkynningar á skjáborði.';
+$labels['desktoptimeout'] = 'Loka tilkynningu á skjáborði';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'visualizza notifica nel browser per nuovi messaggi';
+$labels['desktop'] = 'visualizza notifiche sul desktop per nuovi messaggi';
+$labels['sound'] = 'riproduci il suono per nuovi messaggi';
+$labels['test'] = 'Prova';
+$labels['title'] = 'Nuovo Messaggio';
+$labels['body'] = 'Hai ricevuto un nuovo messaggio';
+$labels['testbody'] = 'Notifica di prova';
+$labels['desktopdisabled'] = 'Le notifiche sul desktop sono disabilitate nel tuo browser';
+$labels['desktopunsupported'] = 'il tuo browser non supporta le notifiche sul desktop';
+$labels['desktoptimeout'] = 'Chiudi la notifica visualizzata sul desktop';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'æ–°ã—ã„メッセージã®é€šçŸ¥ã‚’ブラウザーã«è¡¨ç¤º';
+$labels['desktop'] = 'æ–°ã—ã„メッセージã®é€šçŸ¥ã‚’デスクトップã«è¡¨ç¤º';
+$labels['sound'] = 'æ–°ã—ã„メッセージãŒå±Šãã¨éŸ³ã‚’å†ç”Ÿ';
+$labels['test'] = 'テスト';
+$labels['title'] = 'æ–°ã—ã„é›»å­ãƒ¡ãƒ¼ãƒ«ã§ã™!';
+$labels['body'] = 'æ–°ã—ã„メッセージをå—ä¿¡ã—ã¾ã—ãŸã€‚';
+$labels['testbody'] = 'ã“ã‚Œã¯ãƒ†ã‚¹ãƒˆã®é€šçŸ¥ã§ã™ã€‚';
+$labels['desktopdisabled'] = 'ブラウザーã§ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—通知ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚';
+$labels['desktopunsupported'] = 'ブラウザーãŒãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—通知をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。';
+$labels['desktoptimeout'] = 'デスクトップ通知を閉ã˜ã‚‹';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'បង្ហាញ​ការ​ជូនដំណឹង​កម្មវិធី​អ៊ីនធឺណិážâ€‹áž–áŸáž›â€‹áž˜áž¶áž“​សារ​ážáŸ’មី';
+$labels['desktop'] = 'បង្ហាញ​ការ​ជូនដំណឹង​ផ្ទៃážáž»â€‹áž–áŸáž›â€‹áž˜áž¶áž“​សារ​ážáŸ’មី';
+$labels['sound'] = 'បន្លឺ​សំឡáŸáž„​ពáŸáž›â€‹áž˜áž¶áž“​សារ​ážáŸ’មី';
+$labels['test'] = 'សាកល្បង';
+$labels['title'] = 'មាន​សារ​ážáŸ’មី!';
+$labels['body'] = 'អ្នក​បាន​ទទួល​សារ​ážáŸ’មី';
+$labels['testbody'] = 'áž“áŸáŸ‡â€‹áž‡áž¶â€‹áž€áž¶ážšâ€‹áž‡áž¼áž“ដំណឹង​សាកល្បង។';
+$labels['desktopdisabled'] = 'ការ​ជូនដំណឹង​ផ្ទៃážáž»â€‹ážáŸ’រូវ​បាន​បិទ​នៅ​ក្នុង​កម្មវិធី​អ៊ីនធឺណិážâ€‹ážšáž”ស់​អ្នក។';
+$labels['desktopunsupported'] = 'កម្មវិធី​អ៊ីនធឺណិážâ€‹ážšáž”ស់​អ្នក​មិន​គាំទ្រ​ការ​ជូនដំណឹង​ផ្ទៃážáž»áŸ”';
+$labels['desktoptimeout'] = 'បិទ​ការ​ជូនដំណឹង​ផ្ទៃážáž»';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = '새로운 메시지가 ë„착하면 브ë¼ìš°ì € 알림 표시';
+$labels['desktop'] = '새로운 메시지가 ë„착하면 바탕화면 알림 표시';
+$labels['sound'] = '새로운 메시지가 ë„착하면 소리 재ìƒ';
+$labels['test'] = '테스트';
+$labels['title'] = '새로운 ì´ë©”ì¼ ë„ì°©!';
+$labels['body'] = '새로운 메시지를 받았습니다.';
+$labels['testbody'] = 'ì´ê²ƒì€ 테스트 알림입니다.';
+$labels['desktopdisabled'] = ' 브ë¼ìš°ì €ì—ì„œ 바탕화면 ì•Œë¦¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$labels['desktopunsupported'] = '브ë¼ìš°ì €ê°€ 바탕화면 ì•Œë¦¼ì„ ì§€ì›í•˜ì§€ 않습니다.';
+$labels['desktoptimeout'] = '바탕화면 알림 닫기';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Agahdariyên gerokê li ser peyama nû bide nîşan';
+$labels['desktop'] = 'Agahdariyên sermasê li ser peyama nû bide nîşan';
+$labels['sound'] = 'Deng li ser peyameke nû veke';
+$labels['test'] = 'Test';
+$labels['title'] = 'Emaila Nû!';
+$labels['body'] = 'Peyameke te ya nû heye.';
+$labels['testbody'] = 'Ev agahdariyeke testê ye.';
+$labels['desktopdisabled'] = 'Agahdariyên sermasê di geroka te de girtî ne. ';
+$labels['desktopunsupported'] = 'Geroka te bi agahdariyên sermasê re ne ahengdar e.';
+$labels['desktoptimeout'] = 'Ahahadariya sermasê bigire';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['test'] = 'تاقیکردنەوە';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Browser-Notifikatioun bei neiem Message uweisen';
+$labels['desktop'] = 'Desktop-Notifikatioun bei neiem Message uweisen';
+$labels['sound'] = 'Dësen Toun bei neiem Message spillen';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nei E-Mail!';
+$labels['body'] = 'Du hues en neie Message kritt.';
+$labels['testbody'] = 'Dëst ass eng Test-Benoorichtegung.';
+$labels['desktopdisabled'] = 'Desktop-Notifikatioune sinn an dengem Browser ausgeschalt.';
+$labels['desktopunsupported'] = 'Däi Browser ënnerstëtzt keng Desktop-Notifikatiounen.';
+$labels['desktoptimeout'] = 'Browser-Notifikatioun zoumaachen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Pranešti apie naujus laiškus naršyklėje';
+$labels['desktop'] = 'Pranešti apie naujus laiškus sistemos pranešimu';
+$labels['sound'] = 'Pranešti apie naujus laiškus garsu';
+$labels['test'] = 'Bandymas';
+$labels['title'] = 'Naujas laiškas!';
+$labels['body'] = 'Jūs gavote naują laišką.';
+$labels['testbody'] = 'Tai – bandomasis pranešimas.';
+$labels['desktopdisabled'] = 'Jūsų naršyklėje sistemos pranešimai išjungti.';
+$labels['desktopunsupported'] = 'Jūsų naršyklėje sistemos pranešimai nepalaikomi.';
+$labels['desktoptimeout'] = 'Užverti sistemos pranešimą';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Saņemot jaunu vÄ“stuli, parÄdÄ«t paziņojumu';
+$labels['desktop'] = 'Saņemot jaunu vÄ“stuli, parÄdÄ«t darbavirsmas paziņojumu';
+$labels['sound'] = 'Saņemot jaunu vÄ“stuli, atskaņot skaņas signÄlu';
+$labels['test'] = 'PÄrbaudÄ«t';
+$labels['title'] = 'Jauns e-pasts!';
+$labels['body'] = 'Jūs esat saņēmis jaunu vēstuli.';
+$labels['testbody'] = 'Šis ir testa paziņojums.';
+$labels['desktopdisabled'] = 'Darbavirsmas paziņojumi JÅ«su pÄrlÅ«kprogrammÄ ir atslÄ“gti.';
+$labels['desktopunsupported'] = 'JÅ«su pÄrlÅ«kprogramma neatbalsta darbavirsmas paziņojumus.';
+$labels['desktoptimeout'] = 'Aizvērt darbavirsmas paziņojumu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Прикажи извеÑтувања на прелиÑтувачот за нова порака ';
+$labels['desktop'] = 'Прикажи извеÑтувања на работната површина за нова порака';
+$labels['sound'] = 'Пушти го звукот за нова порака ';
+$labels['test'] = 'ТеÑÑ‚';
+$labels['title'] = 'Ðова електронÑка пошта';
+$labels['body'] = 'Имаш нова порака ';
+$labels['testbody'] = 'Ова е теÑÑ‚ извеÑтување ';
+$labels['desktopdisabled'] = 'ИзвеÑтувањата на работната површина Ñе иÑклучени во твојот прелиÑтувач ';
+$labels['desktopunsupported'] = 'Твојот прелиÑтувач не подржува извеÑтувања на работната површина ';
+$labels['desktoptimeout'] = 'ИÑклучи извеÑтувања на работната површина';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'à´¬àµà´°àµŒà´¸à´°àµâ€ അറിയിപàµà´ªàµà´•à´³àµâ€ à´ªàµà´¤à´¿à´¯ സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ കാണികàµà´•àµà´•';
+$labels['desktop'] = 'ഡെസàµà´•àµà´•àµà´Ÿàµ‹à´ªàµà´ªàµ അറിയിപàµà´ªàµà´•à´³àµâ€ à´ªàµà´¤à´¿à´¯ സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ കാണികàµà´•àµà´•';
+$labels['sound'] = 'à´ªàµà´¤à´¿à´¯ സനàµà´¦àµ‡à´¶à´¤àµà´¤à´¿à´²àµâ€ സബàµà´¦à´‚ കേളàµâ€à´ªàµà´ªà´¿à´•àµà´•àµà´•';
+$labels['test'] = 'പരീകàµà´·à´¿à´•àµà´•àµà´•';
+$labels['title'] = 'à´ªàµà´¤à´¿à´¯ സനàµà´¦àµ‡à´¶à´‚ !';
+$labels['body'] = 'താങàµà´•à´³àµâ€à´•àµà´•àµ ഒരൠപàµà´¤à´¿à´¯ സനàµà´¦àµ‡à´¶à´‚ ലഭിചàµà´šàµ';
+$labels['testbody'] = 'ഇതൠഒരൠപരീകàµà´·à´£ അറിയിപàµà´ªà´¾à´£àµ.';
+$labels['desktopdisabled'] = 'താങàµà´•à´³àµà´Ÿàµ† à´¬àµà´°àµŒà´¸à´±à´¿à´²àµâ€ ഡെസàµà´•àµà´•àµà´Ÿàµ‹à´ªàµà´ªàµ നോടàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´·à´¨àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´£àµ.';
+$labels['desktopunsupported'] = 'താങàµà´•à´³àµà´Ÿàµ† à´¬àµà´°àµŒà´¸àµà´¸à´°àµâ€ ഡെസàµà´•àµà´Ÿàµ‹à´ªàµà´ªàµ അറിയിപàµà´ªàµà´•à´³àµâ€ പിനàµâ€à´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´².';
+$labels['desktoptimeout'] = 'ഡെസàµà´•àµà´Ÿàµ‹à´ªàµà´ªàµ അറിയിപàµà´ªàµà´•àµ¾ à´…à´Ÿà´¯àµà´•àµà´•àµà´•';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Ð¨Ð¸Ð½Ñ Ð¼ÐµÑÑеж ирÑÑ…Ñд мÑдÑгдÑл харуулах';
+$labels['desktop'] = 'Ð¨Ð¸Ð½Ñ Ð¼Ñйл ирÑÑ… үед ДÑлгÑц дÑÑÑ€ мÑдÑгдÑл харуулах';
+$labels['sound'] = 'Ð¨Ð¸Ð½Ñ Ð¼Ñйл ирÑÑ…Ñд дуугарч мÑдÑгдÑÑ…';
+$labels['test'] = 'Туршилт';
+$labels['title'] = 'Ð¨Ð¸Ð½Ñ Ð—Ð°Ñ…Ð¸Ð°!';
+$labels['body'] = 'Та ÑˆÐ¸Ð½Ñ Ð·Ð°Ñ…Ð¸Ð° хүлÑÑн авлаа';
+$labels['testbody'] = 'Ð­Ð½Ñ Ð±Ð¾Ð» туршилтын мÑдÑгдÑл.';
+$labels['desktopdisabled'] = 'Таны хөтчийн ДÑлгÑцийн мÑдÑгдÑл идÑвхгүй байна.';
+$labels['desktopunsupported'] = 'Таны вÑб хөтөч дÑлгÑцийн мÑдÑгдÑл зөвшөөрөхгүй байна.';
+$labels['desktoptimeout'] = 'ДÑлгÑцийн мÑдÑгдÑл хаах';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['sound'] = 'नवीन संदेश आलà¥à¤¯à¤¾à¤¸ नाद करा';
+$labels['test'] = 'चाचणी';
+$labels['title'] = 'नवीन ईमेल';
+$labels['body'] = 'तà¥à¤®à¤šà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ नवीन संदेश आला आहे';
+$labels['testbody'] = 'हा à¤à¤• चाचणी निरà¥à¤¦à¥‡à¤¶ आहे';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Vis varsel i nettleseren ved ny melding';
+$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
+$labels['sound'] = 'Spill av lyd ved ny melding';
+$labels['test'] = 'Test';
+$labels['title'] = 'Ny e-post!';
+$labels['body'] = 'Du har mottatt en ny melding';
+$labels['testbody'] = 'Dette er et testvarsel.';
+$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettleser.';
+$labels['desktopunsupported'] = 'Din nettleser støtter ikke visning av varsel på skrivebordet.';
+$labels['desktoptimeout'] = 'Lukk skrivebordsvarsling';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Geef browser melding weer bij een nieuw bericht';
+$labels['desktop'] = 'Geef desktop meldingen weer bij een nieuw bericht';
+$labels['sound'] = 'Speel het geluid af bij een nieuw bericht';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nieuwe e-mail!';
+$labels['body'] = 'Je hebt een nieuw bericht ontvangen.';
+$labels['testbody'] = 'Dit is een test melding.';
+$labels['desktopdisabled'] = 'Desktop meldingen zijn uitgeschakeld in uw browser.';
+$labels['desktopunsupported'] = 'Uw browser ondersteund geen desktop meldingen.';
+$labels['desktoptimeout'] = 'Sluit desktop melding';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Toon melding in browser bij nieuw bericht';
+$labels['desktop'] = 'Toon melding op bureaublad bij nieuw bericht';
+$labels['sound'] = 'Geluid afspelen bij nieuw bericht';
+$labels['test'] = 'Test';
+$labels['title'] = 'Nieuwe e-mail!';
+$labels['body'] = 'U heeft een nieuw bericht ontvangen.';
+$labels['testbody'] = 'Dit is een testmelding.';
+$labels['desktopdisabled'] = 'Bureaubladmeldingen zijn uitgeschakeld in uw browser.';
+$labels['desktopunsupported'] = 'Uw browser ondersteunt geen bureaubladmeldingen.';
+$labels['desktoptimeout'] = 'Sluit bureaubladmelding';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Vis varsel i nettlesaren ved ny melding';
+$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
+$labels['sound'] = 'Spill av lyd ved ny melding';
+$labels['test'] = 'Test';
+$labels['title'] = 'Ny e-post!';
+$labels['body'] = 'Du har mottatt ei ny melding.';
+$labels['testbody'] = 'Dette er eit testvarsel.';
+$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettlesar.';
+$labels['desktopunsupported'] = 'Din nettlesar støttar ikkje vising av varsel på skrivebordet.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości w przeglądarce';
+$labels['desktop'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości na pulpicie';
+$labels['sound'] = 'Odtwarzaj dźwięk o nadejściu nowej wiadomości';
+$labels['test'] = 'Testuj powiadomienie';
+$labels['title'] = 'Nowa wiadomość!';
+$labels['body'] = 'Nadeszła nowa wiadomość.';
+$labels['testbody'] = 'To jest testowe powiadomienie.';
+$labels['desktopdisabled'] = 'Powiadomienia na pulpicie zostały zablokowane w twojej przeglądarce.';
+$labels['desktopunsupported'] = 'Twoja przeglądarka nie obsługuje powiadomień na pulpicie.';
+$labels['desktoptimeout'] = 'Zamknij powiadomienie pulpitu';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Exibir notificação quando uma nova mensagem chegar';
+$labels['desktop'] = 'Exibir notificação no desktop quando uma nova mensagem chegar';
+$labels['sound'] = 'Alerta sonoro quando uma nova mensagem chegar';
+$labels['test'] = 'Testar';
+$labels['title'] = 'Novo Email!';
+$labels['body'] = 'Você recebeu uma nova mensagem.';
+$labels['testbody'] = 'Essa é uma notificação de teste.';
+$labels['desktopdisabled'] = 'As notificações no desktop estão desabilitadas no seu navegador.';
+$labels['desktopunsupported'] = 'Seu navegador não suporta notificações no desktop';
+$labels['desktoptimeout'] = 'Fechar notificação';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Mostrar notificação quando uma nova mensagem chegar';
+$labels['desktop'] = 'Mostrar alerta no ambiente de trabalho de nova mensagem';
+$labels['sound'] = 'Alerta sonoro para nova mensagem';
+$labels['test'] = 'Testar';
+$labels['title'] = 'Novo Email!';
+$labels['body'] = 'Você recebeu uma nova mensagem.';
+$labels['testbody'] = 'Isto é uma notificação de teste.';
+$labels['desktopdisabled'] = 'As notificações no ambiente de trabalho estão desactivadas no seu navegador.';
+$labels['desktopunsupported'] = 'O seu navegador não suporta notificações no ambiente de trabalho';
+$labels['desktoptimeout'] = 'Fechar notificação no ambiente de trabalho';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Afişează notificări în browser la mesaj nou.';
+$labels['desktop'] = 'Afişează notificări desktop la mesaj nou.';
+$labels['sound'] = 'Redă un sunet la mesaj nou.';
+$labels['test'] = 'Testează';
+$labels['title'] = 'E-mail nou!';
+$labels['body'] = 'Ai primit un mesaj nou.';
+$labels['testbody'] = 'Aceasta este o notificare de test.';
+$labels['desktopdisabled'] = 'Notificările desktop sunt dezactivate în browser.';
+$labels['desktopunsupported'] = 'Browser-ul dumneavoastră nu suportă notificări desktop.';
+$labels['desktoptimeout'] = 'ÃŽnchide notificarea de birou';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Показывать в браузере уведомление о приходе нового ÑообщениÑ';
+$labels['desktop'] = 'Показывать на рабочем Ñтоле уведомление о приходе нового ÑообщениÑ';
+$labels['sound'] = 'Подавать звуковой Ñигнал о приходе нового ÑообщениÑ';
+$labels['test'] = 'Проверить';
+$labels['title'] = 'Ð¡Ð²ÐµÐ¶Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°!';
+$labels['body'] = 'Ð’Ñ‹ получили новое Ñообщение.';
+$labels['testbody'] = 'Это теÑтовое уведомление.';
+$labels['desktopdisabled'] = 'Ð’ Вашем браузере отключены ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð½Ð° рабочем Ñтоле.';
+$labels['desktopunsupported'] = 'Ваш браузер не поддерживает ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð½Ð° рабочем Ñтоле.';
+$labels['desktoptimeout'] = 'Закрыть уведомление на рабочем Ñтоле';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/si_LK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['test'] = 'පිරික්සන්න';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'ZobraziÅ¥ upozornenie v prehliadaÄi pri novej správe';
+$labels['desktop'] = 'Zobraziť upozornenie na ploche pri novej správe';
+$labels['sound'] = 'Prehrať zvuk pri novej správe';
+$labels['test'] = 'Otestovať';
+$labels['title'] = 'Nová správa!';
+$labels['body'] = 'Máte novú správu.';
+$labels['testbody'] = 'Toto je skúšobné upozornenie.';
+$labels['desktopdisabled'] = 'Upozornenia na ploche sú vo vaÅ¡om prehliadaÄi vypnuté.';
+$labels['desktopunsupported'] = 'Váš prehliadaÄ nepodporuje upozornenia na ploche.';
+$labels['desktoptimeout'] = 'Zatvoriť notifikáciu na ploche';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Prikaži obvestilo za nova sporoÄila';
+$labels['desktop'] = 'Prikaži obvestila na namizju za vsa nova sporoÄila';
+$labels['sound'] = 'Ob novem sporoÄilu predvajaj zvok';
+$labels['test'] = 'Test';
+$labels['title'] = 'Novo sporoÄilo';
+$labels['body'] = 'Prejeli ste novo sporoÄilo.';
+$labels['testbody'] = 'To je testno obvestilo.';
+$labels['desktopdisabled'] = 'Obvestila na namizju so v vaÅ¡em brskalniku onemogoÄena.';
+$labels['desktopunsupported'] = 'Vaš brskalnik ne podpira izpis obvestil na namizju.';
+$labels['desktoptimeout'] = 'Zapri obvestila na namizju';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Shfaqni njoftime shfletuesi kur ka mesazhe të rinj';
+$labels['desktop'] = 'Shfaqni njoftime për desktop kur ka mesazhe të rinj';
+$labels['sound'] = 'Kur ka mesazhe të rinj, luaj tingullin';
+$labels['test'] = 'Test';
+$labels['title'] = 'Email i ri!';
+$labels['body'] = 'Morët një mesazh të ri.';
+$labels['testbody'] = 'Ky është një njoftim test.';
+$labels['desktopdisabled'] = 'Njoftimet për desktop janë të çaktivizuara te shfletuesi juaj.';
+$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për desktop.';
+$labels['desktoptimeout'] = 'Mbylle njoftimin për desktop';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Прикажи обавештења о новим порукама у прегледачу';
+$labels['desktop'] = 'Прикажи обавештења о новим порукама у ÑиÑтему';
+$labels['sound'] = 'ПуÑти звук при новој поруци';
+$labels['test'] = 'ИÑпробај';
+$labels['title'] = 'Ðова порука!';
+$labels['body'] = 'Примили Ñте нову поруку.';
+$labels['testbody'] = 'Ово је пробно обавештење.';
+$labels['desktopdisabled'] = 'Обавештења у ÑиÑтему Ñу иÑкључена у вашем прегледачу.';
+$labels['desktopunsupported'] = 'Ваш прегледач не подржава обавештења у ÑиÑтему.';
+$labels['desktoptimeout'] = 'Затвори обавештења у ÑиÑтему';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Avisera nytt meddelande i webbläsaren';
+$labels['desktop'] = 'Avisera nytt meddelande på skrivbordet';
+$labels['sound'] = 'Avisera nytt meddelande med ljudsignal';
+$labels['test'] = 'Prova';
+$labels['title'] = 'Nytt meddelande!';
+$labels['body'] = 'Du har mottagit ett nytt meddelande.';
+$labels['testbody'] = 'Denna avisering är ett prov.';
+$labels['desktopdisabled'] = 'Avisering på skrivbordet är avstängt i webbläsaren.';
+$labels['desktopunsupported'] = 'Avisering på skrivbordet stöds inte av webbläsaren.';
+$labels['desktoptimeout'] = 'Stäng avisering på skrivbordet';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'à¹à¸ªà¸”งà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸‚องเบราเซอร์ในข้อความใหม่';
+$labels['desktop'] = 'à¹à¸ªà¸”งà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸šà¸™à¹€à¸”สà¸à¹Œà¸—็อปในข้อความใหม่';
+$labels['sound'] = 'เล่นเสียงในข้อความใหม่';
+$labels['test'] = 'ทดสอบ';
+$labels['title'] = 'เมล์ใหม่!';
+$labels['body'] = 'คุณได้รับข้อความใหม่à¹à¸¥à¹‰à¸§';
+$labels['testbody'] = 'นี่คือà¸à¸²à¸£à¸—ดสอบà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™';
+$labels['desktopdisabled'] = 'ปิดà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸šà¸™à¹€à¸”สà¸à¹Œà¸—็อปในเบราว์เซอร์ของคุณ';
+$labels['desktopunsupported'] = 'เบราว์เซอร์ของคุณไม่สนับสนุนà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸šà¸™à¹€à¸”สà¸à¹Œà¸—็อป';
+$labels['desktoptimeout'] = 'ปิดà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸ˆà¸²à¸à¹€à¸”สà¸à¹Œà¸—็อป';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/ti.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'ሓዱሽ መሠእኽቲ ጠቆáˆá‰² አብ ጎስጓሲ ይርአ';
+$labels['desktop'] = 'ሓዱሽ መሠእኽቲ ጠቆáˆá‰² ኣብ ደስክቶᕠይርአ';
+$labels['sound'] = 'ሓዱሽ መሠእኽቲ áˆáˆµá‹áˆ˜áŒ½áŠ¥ ድáˆáŒº ይሰማዕ';
+$labels['test'] = 'áˆá‰°áŠ';
+$labels['title'] = 'ሓድሽ ኢደብዳበ!';
+$labels['body'] = 'ሓድሽ ኢደብዳበ በጺሑ አሎ::';
+$labels['testbody'] = 'እዚ ጥቆማ ንáˆá‰°áŠ• á‹á‰°áŒˆá‰¥áˆ¨ እዩ::';
+$labels['desktopdisabled'] = 'ናይ ደስክቶᕠጠቆáˆá‰² ተኸáˆáŠªáˆŽáˆ› አለዉ::';
+$labels['desktopunsupported'] = 'እዚ ጎስጓሲ ናይ ደስክቶᕠጠቆáˆá‰² ኣይተገጠመሉን::';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Yeni iletiler web tarayıcıdan bildirilsin';
+$labels['desktop'] = 'Yeni iletiler Masaüstünden bildirilsin';
+$labels['sound'] = 'Yeni ileti geldiğinde ses çalınsın';
+$labels['test'] = 'Deneme';
+$labels['title'] = 'Yeni Ä°leti!';
+$labels['body'] = 'Yeni bir iletiniz var.';
+$labels['testbody'] = 'Bu bir test bildirimidir.';
+$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi devre dışı bırakıldı.';
+$labels['desktopunsupported'] = 'Web tarayıcınız masaüstü bildirimlerini desteklemiyor';
+$labels['desktoptimeout'] = 'Masaüstü bildirimini kapat';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Показувати у браузері ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ нові повідомленнÑ';
+$labels['desktop'] = 'Показувати на робочому Ñтолі ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ нові повідомленнÑ';
+$labels['sound'] = 'Програвати звук при поÑвленні нового повідомленнÑ';
+$labels['test'] = 'ТеÑÑ‚';
+$labels['title'] = 'Ðова пошта!';
+$labels['body'] = 'Ви отримали нове повідомленнÑ.';
+$labels['testbody'] = 'Це теÑтове ÑповіщеннÑ';
+$labels['desktopdisabled'] = 'ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° робочому Ñтолі відключені у вашому браузері.';
+$labels['desktopunsupported'] = 'Ваш браузер не підтримує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° робочому Ñтолі.';
+$labels['desktoptimeout'] = 'Закрити ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‡Ð¾Ð³Ð¾ Ñтолу';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Yangi xat kelganda brauzer eslatmalarini tasvirlash';
+$labels['desktop'] = 'Yangi xat kelganda ish stoli eslatmalarini tasvirlash';
+$labels['sound'] = 'Yangi xat kelganda ovoz xabari berish';
+$labels['test'] = 'Test';
+$labels['title'] = 'Yangi xat!';
+$labels['body'] = 'Siz yangi xat qabul qildingiz.';
+$labels['testbody'] = 'Bu tekshirish maqsadida yuborilgan eslatma.';
+$labels['desktopdisabled'] = 'Sizning brauzeringizda eslatmalar o‘chirilgan.';
+$labels['desktopunsupported'] = 'Sizning brauzeringiz ish stoli eslatmalarini qo‘llab-quvvatla olmaydi.';
+$labels['desktoptimeout'] = 'Ish stoli eslatmalarini yopish';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = 'Hiển thị thông báo trên trình duyệt khi có thư mới';
+$labels['desktop'] = 'Hiển thị thông báo trên màn hình khi có thư mới';
+$labels['sound'] = 'Thông báo bằng âm thanh khi có thư mới';
+$labels['test'] = 'Kiểm tra';
+$labels['title'] = 'Có thư mới!';
+$labels['body'] = 'Bạn vừa nhận một thư mới';
+$labels['testbody'] = 'Äây là thông báo kiểm tra';
+$labels['desktopdisabled'] = 'Thông báo trên màn hình bị tắt ở trình duyệt của bạn';
+$labels['desktopunsupported'] = 'Trình duyệt của bạn không hỗ trợ thông báo trên màn hình.';
+$labels['desktoptimeout'] = 'Äóng hiển thị màn hình';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = '在æµè§ˆå™¨ä¸­æ˜¾ç¤ºæ–°é‚®ä»¶æ醒';
+$labels['desktop'] = '在桌é¢æ˜¾ç¤ºæ–°é‚®ä»¶æ醒';
+$labels['sound'] = '收到新邮件时播放声音';
+$labels['test'] = '测试';
+$labels['title'] = '您收到一å°æ–°é‚®ä»¶!';
+$labels['body'] = '您收到一å°æ–°é‚®ä»¶ã€‚';
+$labels['testbody'] = '这是一个æ醒测试。';
+$labels['desktopdisabled'] = '您的æµè§ˆå™¨å·²ç¦æ­¢æ¡Œé¢æ醒功能。';
+$labels['desktopunsupported'] = '您的æµè§ˆå™¨ä¸æ”¯æŒæ¡Œé¢æ醒功能。';
+$labels['desktoptimeout'] = '关闭桌é¢é€šçŸ¥';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/newmail_notifier/localization/<lang>.inc                      |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
+*/
+$labels['basic'] = '當有新郵件,顯示ç€è¦½å™¨é€šçŸ¥';
+$labels['desktop'] = '當有新郵件,顯示桌é¢é€šçŸ¥';
+$labels['sound'] = '當有新郵件,播放音效';
+$labels['test'] = '測試';
+$labels['title'] = '有新郵件ï¼';
+$labels['body'] = '收到一å°æ–°éƒµä»¶';
+$labels['testbody'] = '這是測試通知';
+$labels['desktopdisabled'] = '您的ç€è¦½å™¨å·²åœç”¨æ¡Œé¢é€šçŸ¥åŠŸèƒ½';
+$labels['desktopunsupported'] = '您的ç€è¦½å™¨ä¸æ”¯æ´æ¡Œé¢é€šçŸ¥åŠŸèƒ½';
+$labels['desktoptimeout'] = '關閉桌é¢é€šçŸ¥';
+?>
Binary file plugins/newmail_notifier/mail.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/newmail_notifier.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,160 @@
+/**
+ * New Mail Notifier plugin script
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+if (window.rcmail && rcmail.env.task == 'mail') {
+    rcmail.addEventListener('plugin.newmail_notifier', newmail_notifier_run)
+        .addEventListener('actionbefore', newmail_notifier_stop)
+        .addEventListener('init', function() {
+            // bind to messages list select event, so favicon will be reverted on message preview too
+            if (rcmail.message_list)
+                rcmail.message_list.addEventListener('select', newmail_notifier_stop);
+        });
+}
+
+// Executes notification methods
+function newmail_notifier_run(prop)
+{
+    if (prop.basic)
+        newmail_notifier_basic();
+    if (prop.sound)
+        newmail_notifier_sound();
+    if (prop.desktop)
+        newmail_notifier_desktop(rcmail.get_label('body', 'newmail_notifier'));
+}
+
+// Stops notification
+function newmail_notifier_stop(prop)
+{
+    // revert original favicon
+    if (rcmail.env.favicon_href && rcmail.env.favicon_changed && (!prop || prop.action != 'check-recent')) {
+        $('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]');
+        rcmail.env.favicon_changed = 0;
+    }
+
+    // Remove IE icon overlay if we're pinned to Taskbar
+    try {
+        if(window.external.msIsSiteMode()) {
+            window.external.msSiteModeClearIconOverlay();
+        }
+    } catch(e) {}
+}
+
+// Basic notification: window.focus and favicon change
+function newmail_notifier_basic()
+{
+    var w = rcmail.is_framed() ? window.parent : window,
+        path = rcmail.assets_path('plugins/newmail_notifier');
+
+    w.focus();
+
+    // we cannot simply change a href attribute, we must to replace the link element (at least in FF)
+    var link = $('<link rel="shortcut icon">').attr('href', path + '/favicon.ico'),
+        oldlink = $('link[rel="shortcut icon"]', w.document);
+
+    if (!rcmail.env.favicon_href)
+        rcmail.env.favicon_href = oldlink.attr('href');
+
+    rcmail.env.favicon_changed = 1;
+    link.replaceAll(oldlink);
+
+    // Add IE icon overlay if we're pinned to Taskbar
+    try {
+        if (window.external.msIsSiteMode()) {
+            window.external.msSiteModeSetIconOverlay(path + '/overlay.ico', rcmail.get_label('title', 'newmail_notifier'));
+        }
+    } catch(e) {}
+}
+
+// Sound notification
+function newmail_notifier_sound()
+{
+    var elem, src = rcmail.assets_path('plugins/newmail_notifier/sound'),
+        plugin = navigator.mimeTypes ? navigator.mimeTypes['audio/mp3'] : {};
+
+    // Internet Explorer does not support wav files,
+    // support in other browsers depends on enabled plugins,
+    // so we use wav as a fallback
+    src += bw.ie || (plugin && plugin.enabledPlugin) ? '.mp3' : '.wav';
+
+    // HTML5
+    try {
+        elem = $('<audio>').attr('src', src);
+        elem.get(0).play();
+    }
+    // old method
+    catch (e) {
+        elem = $('<embed id="sound" src="' + src + '" hidden=true autostart=true loop=false />');
+        elem.appendTo($('body'));
+        window.setTimeout("$('#sound').remove()", 5000);
+    }
+}
+
+// Desktop notification
+// - Require window.Notification API support (Chrome 22+ or Firefox 22+)
+function newmail_notifier_desktop(body, disabled_callback)
+{
+    var timeout = rcmail.env.newmail_notifier_timeout || 10,
+        icon = rcmail.assets_path('plugins/newmail_notifier/mail.png'),
+        success_callback = function() {
+            var popup = new window.Notification(rcmail.get_label('title', 'newmail_notifier'), {
+                dir: "auto",
+                lang: "",
+                body: body,
+                tag: "newmail_notifier",
+                icon: icon
+            });
+            popup.onclick = function() { this.close(); };
+            setTimeout(function() { popup.close(); }, timeout * 1000);
+        };
+
+    try {
+        window.Notification.requestPermission(function(perm) {
+            if (perm == 'granted')
+                success_callback();
+            else if (perm == 'denied' && disabled_callback)
+                disabled_callback();
+        });
+
+        return true;
+    }
+    catch (e) {
+        return false;
+    }
+}
+
+function newmail_notifier_test_desktop()
+{
+    var status = newmail_notifier_desktop(rcmail.get_label('testbody', 'newmail_notifier'), function() {
+        rcmail.display_message(rcmail.get_label('desktopdisabled', 'newmail_notifier'), 'error');
+    });
+
+    if (!status) {
+        rcmail.display_message(rcmail.get_label('desktopunsupported', 'newmail_notifier'), 'error');
+    }
+}
+
+function newmail_notifier_test_basic()
+{
+    newmail_notifier_basic();
+}
+
+function newmail_notifier_test_sound()
+{
+    newmail_notifier_sound();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/newmail_notifier.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+/**
+ * New Mail Notifier plugin script
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&"mail"==rcmail.env.task&&rcmail.addEventListener("plugin.newmail_notifier",newmail_notifier_run).addEventListener("actionbefore",newmail_notifier_stop).addEventListener("init",function(){rcmail.message_list&&rcmail.message_list.addEventListener("select",newmail_notifier_stop)});function newmail_notifier_run(a){a.basic&&newmail_notifier_basic();a.sound&&newmail_notifier_sound();a.desktop&&newmail_notifier_desktop(rcmail.get_label("body","newmail_notifier"))}
+function newmail_notifier_stop(a){!rcmail.env.favicon_href||!rcmail.env.favicon_changed||a&&"check-recent"==a.action||($('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]'),rcmail.env.favicon_changed=0);try{window.external.msIsSiteMode()&&window.external.msSiteModeClearIconOverlay()}catch(b){}}
+function newmail_notifier_basic(){var a=rcmail.is_framed()?window.parent:window,b=rcmail.assets_path("plugins/newmail_notifier");a.focus();var c=$('<link rel="shortcut icon">').attr("href",b+"/favicon.ico");a=$('link[rel="shortcut icon"]',a.document);rcmail.env.favicon_href||(rcmail.env.favicon_href=a.attr("href"));rcmail.env.favicon_changed=1;c.replaceAll(a);try{window.external.msIsSiteMode()&&window.external.msSiteModeSetIconOverlay(b+"/overlay.ico",rcmail.get_label("title","newmail_notifier"))}catch(d){}}
+function newmail_notifier_sound(){var a=rcmail.assets_path("plugins/newmail_notifier/sound"),b=navigator.mimeTypes?navigator.mimeTypes["audio/mp3"]:{};a+=bw.ie||b&&b.enabledPlugin?".mp3":".wav";try{var c=$("<audio>").attr("src",a);c.get(0).play()}catch(d){c=$('<embed id="sound" src="'+a+'" hidden=true autostart=true loop=false />'),c.appendTo($("body")),window.setTimeout("$('#sound').remove()",5E3)}}
+function newmail_notifier_desktop(a,b){var c=rcmail.env.newmail_notifier_timeout||10,d=rcmail.assets_path("plugins/newmail_notifier/mail.png"),e=function(){var b=new window.Notification(rcmail.get_label("title","newmail_notifier"),{dir:"auto",lang:"",body:a,tag:"newmail_notifier",icon:d});b.onclick=function(){this.close()};setTimeout(function(){b.close()},1E3*c)};try{return window.Notification.requestPermission(function(a){"granted"==a?e():"denied"==a&&b&&b()}),!0}catch(f){return!1}}
+function newmail_notifier_test_desktop(){newmail_notifier_desktop(rcmail.get_label("testbody","newmail_notifier"),function(){rcmail.display_message(rcmail.get_label("desktopdisabled","newmail_notifier"),"error")})||rcmail.display_message(rcmail.get_label("desktopunsupported","newmail_notifier"),"error")}function newmail_notifier_test_basic(){newmail_notifier_basic()}function newmail_notifier_test_sound(){newmail_notifier_sound()};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/newmail_notifier/newmail_notifier.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,215 @@
+<?php
+
+/**
+ * New Mail Notifier plugin
+ *
+ * Supports three methods of notification:
+ * 1. Basic   - focus browser window and change favicon
+ * 2. Sound   - play wav file
+ * 3. Desktop - display desktop notification (using window.Notification API)
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * Copyright (C) 2011-2016, Kolab Systems AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class newmail_notifier extends rcube_plugin
+{
+    public $task = 'mail|settings';
+
+    private $rc;
+    private $notified;
+    private $opt = array();
+    private $exceptions = array();
+
+
+    /**
+     * Plugin initialization
+     */
+    function init()
+    {
+        $this->rc = rcmail::get_instance();
+
+        // Preferences hooks
+        if ($this->rc->task == 'settings') {
+            $this->add_hook('preferences_list', array($this, 'prefs_list'));
+            $this->add_hook('preferences_save', array($this, 'prefs_save'));
+        }
+        else { // if ($this->rc->task == 'mail') {
+            // add script when not in ajax and not in frame and only in main window
+            if ($this->rc->output->type == 'html' && empty($_REQUEST['_framed']) && $this->rc->action == '') {
+                $this->add_texts('localization/');
+                $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.body');
+                $this->include_script('newmail_notifier.js');
+            }
+
+            if ($this->rc->action == 'refresh') {
+                // Load configuration
+                $this->load_config();
+
+                $this->opt['basic']   = $this->rc->config->get('newmail_notifier_basic');
+                $this->opt['sound']   = $this->rc->config->get('newmail_notifier_sound');
+                $this->opt['desktop'] = $this->rc->config->get('newmail_notifier_desktop');
+
+                if (!empty($this->opt)) {
+                    // Get folders to skip checking for
+                    $exceptions = array('drafts_mbox', 'sent_mbox', 'trash_mbox');
+                    foreach ($exceptions as $folder) {
+                        $folder = $this->rc->config->get($folder);
+                        if (strlen($folder) && $folder != 'INBOX') {
+                            $this->exceptions[] = $folder;
+                        }
+                    }
+
+                    $this->add_hook('new_messages', array($this, 'notify'));
+                }
+             }
+        }
+    }
+
+    /**
+     * Handler for user preferences form (preferences_list hook)
+     */
+    function prefs_list($args)
+    {
+        if ($args['section'] != 'mailbox') {
+            return $args;
+        }
+
+        // Load configuration
+        $this->load_config();
+
+        // Load localization and configuration
+        $this->add_texts('localization/');
+
+        if (!empty($_REQUEST['_framed'])) {
+            $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.testbody',
+                'newmail_notifier.desktopunsupported', 'newmail_notifier.desktopenabled', 'newmail_notifier.desktopdisabled');
+            $this->include_script('newmail_notifier.js');
+        }
+
+        // Check that configuration is not disabled
+        $dont_override = (array) $this->rc->config->get('dont_override', array());
+
+        foreach (array('basic', 'desktop', 'sound') as $type) {
+            $key = 'newmail_notifier_' . $type;
+            if (!in_array($key, $dont_override)) {
+                $field_id = '_' . $key;
+                $input    = new html_checkbox(array('name' => $field_id, 'id' => $field_id, 'value' => 1));
+                $content  = $input->show($this->rc->config->get($key))
+                    . ' ' . html::a(array('href' => '#', 'onclick' => 'newmail_notifier_test_'.$type.'()'),
+                        $this->gettext('test'));
+
+                $args['blocks']['new_message']['options'][$key] = array(
+                    'title' => html::label($field_id, rcube::Q($this->gettext($type))),
+                    'content' => $content
+                );
+            }
+        }
+
+        $type = 'desktop_timeout';
+        $key = 'newmail_notifier_' . $type;
+        if (!in_array($key, $dont_override)) {
+            $field_id = '_' . $key;
+            $select   = new html_select(array('name' => $field_id, 'id' => $field_id));
+
+            foreach (array(5, 10, 15, 30, 45, 60) as $sec) {
+                $label = $this->rc->gettext(array('name' => 'afternseconds', 'vars' => array('n' => $sec)));
+                $select->add($label, $sec);
+            }
+
+            $args['blocks']['new_message']['options'][$key] = array(
+                'title'   => html::label($field_id, rcube::Q($this->gettext('desktoptimeout'))),
+                'content' => $select->show((int) $this->rc->config->get($key))
+            );
+        }
+
+        return $args;
+    }
+
+    /**
+     * Handler for user preferences save (preferences_save hook)
+     */
+    function prefs_save($args)
+    {
+        if ($args['section'] != 'mailbox') {
+            return $args;
+        }
+
+        // Load configuration
+        $this->load_config();
+
+        // Check that configuration is not disabled
+        $dont_override = (array) $this->rc->config->get('dont_override', array());
+
+        foreach (array('basic', 'desktop', 'sound') as $type) {
+            $key = 'newmail_notifier_' . $type;
+            if (!in_array($key, $dont_override)) {
+                $args['prefs'][$key] = rcube_utils::get_input_value('_' . $key, rcube_utils::INPUT_POST) ? true : false;
+            }
+        }
+
+        $option = 'newmail_notifier_desktop_timeout';
+        if (!in_array($option, $dont_override)) {
+            if ($value = (int) rcube_utils::get_input_value('_' . $option, rcube_utils::INPUT_POST)) {
+                $args['prefs'][$option] = $value;
+            }
+        }
+
+        return $args;
+    }
+
+    /**
+     * Handler for new message action (new_messages hook)
+     */
+    function notify($args)
+    {
+        // Already notified or unexpected input
+        if ($this->notified || empty($args['diff']['new'])) {
+            return $args;
+        }
+
+        $mbox      = $args['mailbox'];
+        $storage   = $this->rc->get_storage();
+        $delimiter = $storage->get_hierarchy_delimiter();
+
+        // Skip exception (sent/drafts) folders (and their subfolders)
+        foreach ($this->exceptions as $folder) {
+            if (strpos($mbox.$delimiter, $folder.$delimiter) === 0) {
+                return $args;
+            }
+        }
+
+        // Check if any of new messages is UNSEEN
+        $deleted = $this->rc->config->get('skip_deleted') ? 'UNDELETED ' : '';
+        $search  = $deleted . 'UNSEEN UID ' . $args['diff']['new'];
+        $unseen  = $storage->search_once($mbox, $search);
+
+        if ($unseen->count()) {
+            $this->notified = true;
+
+            $this->rc->output->set_env('newmail_notifier_timeout', $this->rc->config->get('newmail_notifier_desktop_timeout'));
+            $this->rc->output->command('plugin.newmail_notifier',
+                array(
+                    'basic'   => $this->opt['basic'],
+                    'sound'   => $this->opt['sound'],
+                    'desktop' => $this->opt['desktop'],
+                ));
+        }
+
+        return $args;
+    }
+}
Binary file plugins/newmail_notifier/overlay.ico has changed
Binary file plugins/newmail_notifier/sound.mp3 has changed
Binary file plugins/newmail_notifier/sound.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,387 @@
+ -----------------------------------------------------------------------
+ Password Plugin for Roundcube
+ -----------------------------------------------------------------------
+ Plugin that adds a possibility to change user password using many
+ methods (drivers) via Settings/Password tab.
+ -----------------------------------------------------------------------
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+
+ @author Aleksander Machniak <alec@alec.pl>
+ @author <see driver files for driver authors>
+ -----------------------------------------------------------------------
+
+ 1. Configuration
+ 2. Drivers
+ 2.1.  Database (sql)
+ 2.2.  Cyrus/SASL (sasl)
+ 2.3.  Poppassd/Courierpassd (poppassd)
+ 2.4.  LDAP (ldap)
+ 2.5.  DirectAdmin Control Panel (directadmin)
+ 2.6.  cPanel
+ 2.6.1.  cPanel WHM (cpanel)
+ 2.6.2.  cPanel Webmail (cpanel_webmail)
+ 2.7.  XIMSS/Communigate (ximms)
+ 2.8.  Virtualmin (virtualmin)
+ 2.9.  hMailServer (hmail)
+ 2.10. PAM (pam)
+ 2.11. Chpasswd (chpasswd)
+ 2.12. LDAP - no PEAR (ldap_simple)
+ 2.13. XMail (xmail)
+ 2.14. Pw (pw_usermod)
+ 2.15. domainFACTORY (domainfactory)
+ 2.16. DBMail (dbmail)
+ 2.17. Expect (expect)
+ 2.18. Samba (smb)
+ 2.19. Vpopmail daemon (vpopmaild)
+ 2.20. Plesk (Plesk RPC-API)
+ 2.21. Kpasswd
+ 3. Driver API
+ 4. Sudo setup
+
+
+ 1. Configuration
+ ----------------
+
+ Copy config.inc.php.dist to config.inc.php and set the options as described
+ within the file.
+
+
+ 2. Drivers
+ ----------
+
+ Password plugin supports many password change mechanisms which are
+ handled by included drivers. Just pass driver name in 'password_driver' option.
+
+
+ 2.1. Database (sql)
+ -------------------
+
+ You can specify which database to connect by 'password_db_dsn' option and
+ what SQL query to execute by 'password_query'. See config.inc.php.dist file for
+ more info.
+
+ Example implementations of an update_passwd function:
+
+ - This is for use with LMS (http://lms.org.pl) database and postgres:
+
+    CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$
+    DECLARE
+            res integer;
+    BEGIN
+        UPDATE passwd SET password = hash
+        WHERE login = split_part(account, '@', 1)
+            AND domainid = (SELECT id FROM domains WHERE name = split_part(account, '@', 2))
+        RETURNING id INTO res;
+        RETURN res;
+    END;
+    $$ LANGUAGE plpgsql SECURITY DEFINER;
+
+ - This is for use with a SELECT update_passwd(%o,%c,%u) query
+   Updates the password only when the old password matches the MD5 password
+   in the database
+
+    CREATE FUNCTION update_password (oldpass text, cryptpass text, user text) RETURNS text
+        MODIFIES SQL DATA
+    BEGIN
+        DECLARE currentsalt varchar(20);
+        DECLARE error text;
+        SET error = 'incorrect current password';
+        SELECT substring_index(substr(user.password,4),_latin1'$',1) INTO currentsalt FROM users WHERE username=user;
+        SELECT '' INTO error FROM users WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
+        UPDATE users SET password=cryptpass WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
+        RETURN error;
+    END
+
+ Example SQL UPDATEs:
+
+ - Plain text passwords:
+    UPDATE users SET password=%p WHERE username=%u AND password=%o AND domain=%h LIMIT 1
+
+ - Crypt text passwords:
+    UPDATE users SET password=%c WHERE username=%u LIMIT 1
+
+ - Use a MYSQL crypt function (*nix only) with random 8 character salt
+    UPDATE users SET password=ENCRYPT(%p,concat(_utf8'$1$',right(md5(rand()),8),_utf8'$')) WHERE username=%u LIMIT 1
+
+ - MD5 stored passwords:
+    UPDATE users SET password=MD5(%p) WHERE username=%u AND password=MD5(%o) LIMIT 1
+
+
+ 2.2. Cyrus/SASL (sasl)
+ ----------------------
+
+ Cyrus SASL database authentication allows your Cyrus+Roundcube
+ installation to host mail users without requiring a Unix Shell account!
+
+ This driver only covers the "sasldb" case when using Cyrus SASL. Kerberos
+ and PAM authentication mechanisms will require other techniques to enable
+ user password manipulations.
+
+ Cyrus SASL includes a shell utility called "saslpasswd" for manipulating
+ user passwords in the "sasldb" database.  This plugin attempts to use
+ this utility to perform password manipulations required by your webmail
+ users without any administrative interaction. Unfortunately, this
+ scheme requires that the "saslpasswd" utility be run as the "cyrus"
+ user - kind of a security problem since we have chosen to SUID a small
+ script which will allow this to happen.
+
+ This driver is based on the Squirrelmail Change SASL Password Plugin.
+ See http://www.squirrelmail.org/plugin_view.php?id=107 for details.
+
+ Installation:
+
+ Change into the helpers directory. Edit the chgsaslpasswd.c file as is
+ documented within it.
+
+ Compile the wrapper program:
+    gcc -o chgsaslpasswd chgsaslpasswd.c
+
+ Chown the compiled chgsaslpasswd binary to the cyrus user and group
+ that your browser runs as, then chmod them to 4550.
+
+ For example, if your cyrus user is 'cyrus' and the apache server group is
+ 'nobody' (I've been told Redhat runs Apache as user 'apache'):
+
+    chown cyrus:nobody chgsaslpasswd
+    chmod 4550 chgsaslpasswd
+
+ Stephen Carr has suggested users should try to run the scripts on a test
+ account as the cyrus user eg;
+
+    su cyrus -c "./chgsaslpasswd -p test_account"
+
+ This will allow you to make sure that the script will work for your setup.
+ Should the script not work, make sure that:
+ 1) the user the script runs as has access to the saslpasswd|saslpasswd2
+   file and proper permissions
+ 2) make sure the user in the chgsaslpasswd.c file is set correctly.
+   This could save you some headaches if you are the paranoid type.
+
+
+ 2.3. Poppassd/Courierpassd (poppassd)
+ -------------------------------------
+
+ You can specify which host to connect to via 'password_pop_host' and
+ what port via 'password_pop_port'. See config.inc.php.dist file for more info.
+
+
+ 2.4. LDAP (ldap)
+ ----------------
+
+ See config.inc.php.dist file. Requires PEAR::Net_LDAP2 package.
+
+
+ 2.5. DirectAdmin Control Panel (directadmin)
+ --------------------------------------------
+
+ You can specify which host to connect to via 'password_directadmin_host' (don't 
+ forget to use tcp:// or ssl://) and what port via 'password_direactadmin_port'.
+ The password enforcement with plenty customization can be done directly by 
+ DirectAdmin, please see http://www.directadmin.com/features.php?id=910
+ See config.inc.php.dist file for more info.
+
+
+ 2.6. cPanel
+ -----------
+
+ cPanel offers various APIs. The `cpanel` driver is configured with and admin
+ account. It can change user's passwords without access to the current password.
+ See the next section.
+
+ The `cpanel_webmail` driver authenticates as the current user and does not need
+ an admin account. See 2.6.2.
+
+
+ 2.6.1. cPanel WHM (cpanel)
+ --------------------------
+
+ Install cPanel XMLAPI Client Class into Roundcube program/lib directory
+ or any other place in PHP include path. You can get the class from
+ https://raw.github.com/CpanelInc/xmlapi-php/master/xmlapi.php
+
+ You can configure parameters for connection to cPanel's API interface.
+ See config.inc.php.dist file for more info.
+
+
+ 2.6.2. cPanel Webmail (cpanel_webmail)
+ --------------------------------------
+
+ Specify the host to connect to via 'password_webmail_cpanel_host'. This driver
+ comes with a minimal UAPI implementation and does not use the external xmlapi
+ class. It requires php-curl extension.
+
+ See config.inc.php.dist file for more info.
+
+
+ 2.7. XIMSS/Communigate (ximms)
+ ------------------------------
+
+ You can specify which host and port to connect to via 'password_ximss_host' 
+ and 'password_ximss_port'. See config.inc.php.dist file for more info.
+
+
+ 2.8. Virtualmin (virtualmin)
+ ----------------------------
+
+ As in sasl driver this one allows to change password using shell
+ utility called "virtualmin". See helpers/chgvirtualminpasswd.c for
+ installation instructions. See also config.inc.php.dist file.
+
+
+ 2.9. hMailServer (hmail)
+ ------------------------
+
+ Requires PHP COM (Windows only). For access to hMail server on remote host
+ you'll need to define 'hmailserver_remote_dcom' and 'hmailserver_server'.
+ See config.inc.php.dist file for more info.
+
+
+ 2.10. PAM (pam)
+ ---------------
+
+ This driver is for changing passwords of shell users authenticated with PAM.
+ Requires PECL's PAM exitension to be installed (http://pecl.php.net/package/PAM).
+
+
+ 2.11. Chpasswd (chpasswd)
+ -------------------------
+
+ Driver that adds functionality to change the systems user password via 
+ the 'chpasswd' command. See config.inc.php.dist file.
+
+ Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes
+ to uids >= 1000 and can deny requests based on a blacklist.
+
+
+ 2.12.  LDAP - no PEAR (ldap_simple)
+ -----------------------------------
+
+ It's rewritten ldap driver that doesn't require the Net_LDAP2 PEAR extension.
+ It uses directly PHP's ldap module functions instead (as Roundcube does).
+
+ This driver is fully compatible with the ldap driver, but
+ does not require (or uses) the
+    $config['password_ldap_force_replace'] variable.
+ Other advantages:
+    * Connects only once with the LDAP server when using the search user.
+    * Does not read the DN, but only replaces the password within (that is
+      why the 'force replace' is always used).
+
+
+ 2.13.  XMail (xmail)
+ -----------------------------------
+
+ Driver for XMail (www.xmailserver.org). See config.inc.php.dist file
+ for configuration description.
+
+
+ 2.14.  Pw (pw_usermod)
+ -----------------------------------
+
+ Driver to change the systems user password via the 'pw usermod' command.
+ See config.inc.php.dist file for configuration description.
+
+
+ 2.15.  domainFACTORY (domainfactory)
+ -----------------------------------
+
+ Driver for the hosting provider domainFACTORY (www.df.eu).
+ No configuration options.
+
+
+ 2.16.  DBMail (dbmail)
+ -----------------------------------
+
+ Driver that adds functionality to change the users DBMail password.
+ It only works with dbmail-users on the same host where Roundcube runs
+ and requires shell access and gcc in order to compile the binary
+ (see instructions in chgdbmailusers.c file).
+ See config.inc.php.dist file for configuration description.
+
+ Note: DBMail users can also use sql driver.
+
+
+ 2.17.  Expect (expect)
+ -----------------------------------
+
+ Driver to change user password via the 'expect' command.
+ See config.inc.php.dist file for configuration description.
+
+
+ 2.18.  Samba (smb)
+ -----------------------------------
+
+ Driver to change Samba user password via the 'smbpasswd' command.
+ See config.inc.php.dist file for configuration description.
+
+
+ 2.19. Vpopmail daemon (vpopmaild)
+ -----------------------------------
+
+ Driver for the daemon of vpopmail. Vpopmail is used with qmail to
+ enable virtual users that are saved in a database and not in /etc/passwd.
+
+ Set $config['password_vpopmaild_host'] to the host where vpopmaild runs.
+
+ Set $config['password_vpopmaild_port'] to the port of vpopmaild.
+
+ Set $config['password_vpopmaild_timeout'] to the timeout used for the TCP 
+ connection to vpopmaild (You may want to set it higher on busy servers).
+
+
+ 2.20. Plesk (Plesk RPC-API)
+ ---------------------------
+
+ Driver for changing Passwords via Plesk RPC-API. This Driver also works with
+ Parallels Plesk Automation (PPA).
+
+ You need to allow the IP of the Roundcube-Server for RPC-Calls in the Panel.
+
+ Set $config['password_plesk_host'] to the Hostname / IP where Plesk runs
+ Set your Admin or RPC User: $config['password_plesk_user']
+ Set the Password of the User: $config['password_plesk_pass']
+ Set $config['password_plesk_rpc_port']  for the RPC-Port. Usually its 8443
+ Set the RPC-Path in $config['password_plesk_rpc_path']. Normally this is: enterprise/control/agent.php.
+
+
+ 2.21.  Kpasswd
+ -----------------------------------
+
+ Driver to change the password in Kerberos environments via the 'kpasswd' command.
+ See config.inc.php.dist file for configuration description.
+
+
+ 3. Driver API
+ -------------
+
+ Driver file (<driver_name>.php) must define rcube_<driver_name>_password class
+ with public save() method that has two arguments. First - current password, second - new password.
+ This method should return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR,
+ PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password.
+ Extended result (as a hash-array with 'message' and 'code' items) can be returned
+ too. See existing drivers in drivers/ directory for examples.
+
+ 4. Sudo setup
+ -------------
+
+ Some drivers that execute system commands (like chpasswd) require use of sudo command.
+ Here's a sample for CentOS 7:
+
+ # cat <<END >/etc/sudoers.d/99-roundcubemail
+ apache ALL=NOPASSWD:/usr/sbin/chpasswd
+ Defaults:apache !requiretty
+ <<END
+
+ Note: on different systems the username (here 'apache') may be different, e.g. www.
+ Note: on some systems the disabling tty line may not be needed.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/password",
+    "type": "roundcube-plugin",
+    "description": "Password Change for Roundcube. Plugin adds a possibility to change user password using many methods (drivers) via Settings/Password tab.",
+    "license": "GPLv3+",
+    "version": "4.2",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,483 @@
+<?php
+
+// Password Plugin options
+// -----------------------
+// A driver to use for password change. Default: "sql".
+// See README file for list of supported driver names.
+$config['password_driver'] = 'sql';
+
+// Determine whether current password is required to change password.
+// Default: false.
+$config['password_confirm_current'] = true;
+
+// Require the new password to be a certain length.
+// set to blank to allow passwords of any length
+$config['password_minimum_length'] = 0;
+
+// Require the new password to contain a letter and punctuation character
+// Change to false to remove this check.
+$config['password_require_nonalpha'] = false;
+
+// Enables logging of password changes into logs/password
+$config['password_log'] = false;
+
+// Comma-separated list of login exceptions for which password change
+// will be not available (no Password tab in Settings)
+$config['password_login_exceptions'] = null;
+
+// Array of hosts that support password changing.
+// Listed hosts will feature a Password option in Settings; others will not.
+// Example: array('mail.example.com', 'mail2.example.org');
+// Default is NULL (all hosts supported).
+$config['password_hosts'] = null;
+
+// Enables saving the new password even if it matches the old password. Useful
+// for upgrading the stored passwords after the encryption scheme has changed.
+$config['password_force_save'] = false;
+
+// Enables forcing new users to change their password at their first login.
+$config['password_force_new_user'] = false;
+
+// Default password hashing/crypting algorithm.
+// Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt,
+// sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, samba, ad, dovecot, clear.
+// For details see password::hash_password() method.
+$config['password_algorithm'] = 'clear';
+
+// Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated
+// using password_algorithm above. Default: empty.
+$config['password_algorithm_prefix'] = '';
+
+// Path for dovecotpw/doveadm-pw (if not in the $PATH).
+// Used for password_algorithm = 'dovecot'.
+// $config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
+$config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x
+
+// Dovecot password scheme.
+// Used for password_algorithm = 'dovecot'.
+$config['password_dovecotpw_method'] = 'CRAM-MD5';
+
+// Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/
+// when using password_algorithm=dovecot
+$config['password_dovecotpw_with_method'] = false;
+
+// Iteration count parameter for Blowfish-based hashing algo.
+// It must be between 4 and 31. Default: 12.
+// Be aware, the higher the value, the longer it takes to generate the password hashes.
+$config['password_blowfish_cost'] = 12;
+
+// Number of rounds for the sha256 and sha512 crypt hashing algorithms.
+// Must be at least 1000. If not set, then the number of rounds is left up
+// to the crypt() implementation. On glibc this defaults to 5000.
+// Be aware, the higher the value, the longer it takes to generate the password hashes.
+//$config['password_crypt_rounds'] = 50000;
+
+// This option temporarily disables the password change functionality.
+// Use it when the users database server is in maintenance mode or sth like that.
+// You can set it to TRUE/FALSE or a text describing the reason
+// which will replace the default.
+$config['password_disabled'] = false;
+
+
+// SQL Driver options
+// ------------------
+// PEAR database DSN for performing the query. By default
+// Roundcube DB settings are used.
+$config['password_db_dsn'] = '';
+
+// The SQL query used to change the password.
+// The query can contain the following macros that will be expanded as follows:
+//      %p is replaced with the plaintext new password
+//      %P is replaced with the crypted/hashed new password
+//         according to configured password_method
+//      %o is replaced with the old (current) password
+//      %O is replaced with the crypted/hashed old (current) password
+//         according to configured password_method
+//      %h is replaced with the imap host (from the session info)
+//      %u is replaced with the username (from the session info)
+//      %l is replaced with the local part of the username
+//         (in case the username is an email address)
+//      %d is replaced with the domain part of the username
+//         (in case the username is an email address)
+// Deprecated macros:
+//      %c is replaced with the crypt version of the new password, MD5 if available
+//         otherwise DES. More hash function can be enabled using the password_crypt_hash
+//         configuration parameter.
+//      %D is replaced with the dovecotpw-crypted version of the new password
+//      %n is replaced with the hashed version of the new password
+//      %q is replaced with the hashed password before the change
+// Escaping of macros is handled by this module.
+// Default: "SELECT update_passwd(%c, %u)"
+$config['password_query'] = 'SELECT update_passwd(%c, %u)';
+
+// By default the crypt() function which is used to create the %c
+// parameter uses the md5 algorithm (deprecated, use %P).
+// You can choose between: des, md5, blowfish, sha256, sha512.
+$config['password_crypt_hash'] = 'md5';
+
+// By default domains in variables are using unicode.
+// Enable this option to use punycoded names
+$config['password_idn_ascii'] = false;
+
+// Using a password hash for %n and %q variables (deprecated, use %P).
+// Determine which hashing algorithm should be used to generate
+// the hashed new and current password for using them within the
+// SQL query. Requires PHP's 'hash' extension.
+$config['password_hash_algorithm'] = 'sha1';
+
+// You can also decide whether the hash should be provided
+// as hex string or in base64 encoded format.
+$config['password_hash_base64'] = false;
+
+
+// Poppassd Driver options
+// -----------------------
+// The host which changes the password (default: localhost)
+// Supported replacement variables:
+//   %n - hostname ($_SERVER['SERVER_NAME'])
+//   %t - hostname without the first part
+//   %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
+//   %h - IMAP host
+//   %z - IMAP domain without first part
+//   %s - domain name after the '@' from e-mail address provided at login screen
+$config['password_pop_host'] = 'localhost';
+
+// TCP port used for poppassd connections (default: 106)
+$config['password_pop_port'] = 106;
+
+
+// SASL Driver options
+// -------------------
+// Additional arguments for the saslpasswd2 call
+$config['password_saslpasswd_args'] = '';
+
+
+// LDAP and LDAP_SIMPLE Driver options
+// -----------------------------------
+// LDAP server name to connect to. 
+// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
+// Exemple: array('ldap1.exemple.com', 'ldap2.exemple.com');
+// Default: 'localhost'
+$config['password_ldap_host'] = 'localhost';
+
+// LDAP server port to connect to
+// Default: '389'
+$config['password_ldap_port'] = '389';
+
+// TLS is started after connecting
+// Using TLS for password modification is recommended.
+// Default: false
+$config['password_ldap_starttls'] = false;
+
+// LDAP version
+// Default: '3'
+$config['password_ldap_version'] = '3';
+
+// LDAP base name (root directory)
+// Exemple: 'dc=exemple,dc=com'
+$config['password_ldap_basedn'] = 'dc=exemple,dc=com';
+
+// LDAP connection method
+// There are two connection methods for changing a user's LDAP password.
+// 'user': use user credential (recommended, require password_confirm_current=true)
+// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
+// Default: 'user'
+$config['password_ldap_method'] = 'user';
+
+// LDAP Admin DN
+// Used only in admin connection mode
+// Default: null
+$config['password_ldap_adminDN'] = null;
+
+// LDAP Admin Password
+// Used only in admin connection mode
+// Default: null
+$config['password_ldap_adminPW'] = null;
+
+// LDAP user DN mask
+// The user's DN is mandatory and as we only have his login,
+// we need to re-create his DN using a mask
+// '%login' will be replaced by the current roundcube user's login
+// '%name' will be replaced by the current roundcube user's name part
+// '%domain' will be replaced by the current roundcube user's domain part
+// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
+// Exemple: 'uid=%login,ou=people,dc=exemple,dc=com'
+$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=exemple,dc=com';
+
+// LDAP search DN
+// The DN roundcube should bind with to find out user's DN
+// based on his login. Note that you should comment out the default
+// password_ldap_userDN_mask setting for this to take effect.
+// Use this if you cannot specify a general template for user DN with
+// password_ldap_userDN_mask. You need to perform a search based on
+// users login to find his DN instead. A common reason might be that
+// your users are placed under different ou's like engineering or
+// sales which cannot be derived from their login only.
+$config['password_ldap_searchDN'] = 'cn=roundcube,ou=services,dc=example,dc=com';
+
+// LDAP search password
+// If password_ldap_searchDN is set, the password to use for
+// binding to search for user's DN. Note that you should comment out the default
+// password_ldap_userDN_mask setting for this to take effect.
+// Warning: Be sure to set approperiate permissions on this file so this password
+// is only accesible to roundcube and don't forget to restrict roundcube's access to
+// your directory as much as possible using ACLs. Should this password be compromised
+// you want to minimize the damage.
+$config['password_ldap_searchPW'] = 'secret';
+
+// LDAP search base
+// If password_ldap_searchDN is set, the base to search in using the filter below.
+// Note that you should comment out the default password_ldap_userDN_mask setting
+// for this to take effect.
+$config['password_ldap_search_base'] = 'ou=people,dc=example,dc=com';
+
+// LDAP search filter
+// If password_ldap_searchDN is set, the filter to use when
+// searching for user's DN. Note that you should comment out the default
+// password_ldap_userDN_mask setting for this to take effect.
+// '%login' will be replaced by the current roundcube user's login
+// '%name' will be replaced by the current roundcube user's name part
+// '%domain' will be replaced by the current roundcube user's domain part
+// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
+// Example: '(uid=%login)'
+// Example: '(&(objectClass=posixAccount)(uid=%login))'
+$config['password_ldap_search_filter'] = '(uid=%login)';
+
+// LDAP password hash type
+// Standard LDAP encryption type which must be one of: crypt,
+// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear.
+// Set to 'default' if you want to use method specified in password_algorithm option above.
+// Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt'
+// Default: 'crypt'.
+$config['password_ldap_encodage'] = 'crypt';
+
+// LDAP password attribute
+// Name of the ldap's attribute used for storing user password
+// Default: 'userPassword'
+$config['password_ldap_pwattr'] = 'userPassword';
+
+// LDAP password force replace
+// Force LDAP replace in cases where ACL allows only replace not read
+// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
+// Default: true
+$config['password_ldap_force_replace'] = true;
+
+// LDAP Password Last Change Date
+// Some places use an attribute to store the date of the last password change
+// The date is meassured in "days since epoch" (an integer value)
+// Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange)
+$config['password_ldap_lchattr'] = '';
+
+// LDAP Samba password attribute, e.g. sambaNTPassword
+// Name of the LDAP's Samba attribute used for storing user password
+$config['password_ldap_samba_pwattr'] = '';
+ 
+// LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet
+// Some places use an attribute to store the date of the last password change
+// The date is meassured in "seconds since epoch" (an integer value)
+// Whenever the password is changed, the attribute will be updated if set
+$config['password_ldap_samba_lchattr'] = '';
+
+// LDAP PPolicy Driver options
+// -----------------------------------
+
+// LDAP Change password command - filename of the perl script
+// Example: 'change_ldap_pass.pl'
+$config['password_ldap_ppolicy_cmd'] = 'change_ldap_pass.pl';
+
+// LDAP URI
+// Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/'
+$config['password_ldap_ppolicy_uri'] = 'ldap://localhost/';
+
+// LDAP base name (root directory)
+// Exemple: 'dc=exemple,dc=com'
+$config['password_ldap_ppolicy_basedn'] = 'dc=example,dc=com';
+
+$config['password_ldap_ppolicy_searchDN'] = 'cn=someuser,dc=example,dc=com';
+
+$config['password_ldap_ppolicy_searchPW'] = 'secret';
+
+// LDAP search filter
+// Example: '(uid=%login)'
+// Example: '(&(objectClass=posixAccount)(uid=%login))'
+$config['password_ldap_ppolicy_search_filter'] = '(uid=%login)';
+
+// CA Certificate file if in URI is LDAPS connection
+$config['password_ldap_ppolicy_cafile'] = '/etc/ssl/cacert.crt';
+
+
+
+// DirectAdmin Driver options
+// --------------------------
+// The host which changes the password
+// Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL.
+// The host can contain the following macros that will be expanded as follows:
+//     %h is replaced with the imap host (from the session info)
+//     %d is replaced with the domain part of the username (if the username is an email)
+$config['password_directadmin_host'] = 'tcp://localhost';
+
+// TCP port used for DirectAdmin connections
+$config['password_directadmin_port'] = 2222;
+
+
+// vpopmaild Driver options
+// -----------------------
+// The host which changes the password
+$config['password_vpopmaild_host'] = 'localhost';
+
+// TCP port used for vpopmaild connections
+$config['password_vpopmaild_port'] = 89;
+
+// Timeout used for the connection to vpopmaild (in seconds)
+$config['password_vpopmaild_timeout'] = 10;
+
+
+// cPanel Driver options
+// --------------------------
+// The cPanel Host name
+$config['password_cpanel_host'] = 'host.domain.com';
+
+// The cPanel admin username
+$config['password_cpanel_username'] = 'username';
+
+// The cPanel admin password
+$config['password_cpanel_password'] = 'password';
+
+// The cPanel admin hash
+// If you prefer to use a hash (Remote Access Key) instead of plain password, enter it below.
+// Hash takes precedence over password auth.
+// You can generate a Remote Access Key in WHM -> Clusters -> Remote Access Key
+$config['password_cpanel_hash'] = '';
+
+// The cPanel port to use
+$config['password_cpanel_port'] = 2087;
+
+
+// cPanel Webmail Driver options
+// -----------------------------
+// The cPanel Host name
+$config['password_cpanel_webmail_host'] = 'host.domain.com';
+
+// The cPanel port to use
+$config['password_cpanel_webmail_port'] = 2096;
+
+
+// XIMSS (Communigate server) Driver options
+// -----------------------------------------
+// Host name of the Communigate server
+$config['password_ximss_host'] = 'mail.example.com';
+
+// XIMSS port on Communigate server
+$config['password_ximss_port'] = 11024;
+
+
+// chpasswd Driver options
+// ---------------------
+// Command to use (see "Sudo setup" in README)
+$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null';
+
+
+// XMail Driver options
+// ---------------------
+$config['xmail_host'] = 'localhost';
+$config['xmail_user'] = 'YourXmailControlUser';
+$config['xmail_pass'] = 'YourXmailControlPass';
+$config['xmail_port'] = 6017;
+
+
+// hMail Driver options
+// -----------------------
+// Remote hMailServer configuration
+// true:  HMailserver is on a remote box (php.ini: com.allow_dcom = true)
+// false: Hmailserver is on same box as PHP
+$config['hmailserver_remote_dcom'] = false;
+// Windows credentials
+$config['hmailserver_server'] = array(
+    'Server'   => 'localhost',      // hostname or ip address
+    'Username' => 'administrator',  // windows username
+    'Password' => 'password'        // windows user password
+);
+
+
+// Virtualmin Driver options
+// -------------------------
+// Username format:
+// 0: username@domain
+// 1: username%domain
+// 2: username.domain
+// 3: domain.username
+// 4: username-domain
+// 5: domain-username
+// 6: username_domain
+// 7: domain_username
+$config['password_virtualmin_format'] = 0;
+
+
+// pw_usermod Driver options
+// --------------------------
+// Use comma delimited exlist to disable password change for users.
+// See "Sudo setup" in README file.
+$config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n';
+
+
+// DBMail Driver options
+// -------------------
+// Additional arguments for the dbmail-users call
+$config['password_dbmail_args'] = '-p sha512';
+
+
+// Expect Driver options
+// ---------------------
+// Location of expect binary
+$config['password_expect_bin'] = '/usr/bin/expect';
+
+// Location of expect script (see helpers/passwd-expect)
+$config['password_expect_script'] = '';
+
+// Arguments for the expect script. See the helpers/passwd-expect file for details.
+// This is probably a good starting default:
+//   -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
+$config['password_expect_params'] = '';
+
+
+// smb Driver options
+// ---------------------
+// Samba host (default: localhost)
+// Supported replacement variables:
+// %n - hostname ($_SERVER['SERVER_NAME'])
+// %t - hostname without the first part
+// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
+$config['password_smb_host'] = 'localhost';
+// Location of smbpasswd binary (default: /usr/bin/smbpasswd)
+$config['password_smb_cmd'] = '/usr/bin/smbpasswd';
+
+// gearman driver options
+// ---------------------
+// Gearman host (default: localhost)
+$config['password_gearman_host'] = 'localhost';
+
+
+// Plesk/PPA Driver options
+// --------------------
+// You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel 
+
+// Plesk RCP Host
+$config['password_plesk_host'] = '10.0.0.5';
+
+// Plesk RPC Username
+$config['password_plesk_user'] = 'admin';
+
+// Plesk RPC Password
+$config['password_plesk_pass'] = 'password';
+
+// Plesk RPC Port
+$config['password_plesk_rpc_port'] = '8443';
+
+// Plesk RPC Path
+$config['password_plesk_rpc_path'] = 'enterprise/control/agent.php';
+
+
+// kasswd Driver options
+// ---------------------
+// Command to use
+$config['password_kpasswd_cmd'] = '/usr/bin/kpasswd';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/chpasswd.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * chpasswd driver
+ *
+ * Driver that adds functionality to change the systems user password via
+ * the 'chpasswd' command.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 2.0
+ * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_chpasswd_password
+{
+    public function save($currpass, $newpass)
+    {
+        $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd');
+        $username = $_SESSION['username'];
+
+        $handle = popen($cmd, "w");
+        fwrite($handle, "$username:$newpass\n");
+
+        if (pclose($handle) == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $cmd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/cpanel.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * cPanel Password Driver
+ *
+ * Driver that adds functionality to change the users cPanel password.
+ * Originally written by Fulvio Venturelli <fulvio@venturelli.org>
+ *
+ * Completely rewritten using the cPanel API2 call Email::passwdpop
+ * as opposed to the original coding against the UI, which is a fragile method that
+ * makes the driver to always return a failure message for any language other than English
+ * see https://github.com/roundcube/roundcubemail/issues/3063
+ *
+ * This driver has been tested with o2switch hosting and seems to work fine.
+ *
+ * @version 3.1
+ * @author Christian Chech <christian@chech.fr>
+ *
+ * Copyright (C) 2005-2016, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_cpanel_password
+{
+    public function save($curpas, $newpass)
+    {
+        require_once 'xmlapi.php';
+
+        $rcmail = rcmail::get_instance();
+
+        $this->cuser = $rcmail->config->get('password_cpanel_username');
+        $cpanel_host = $rcmail->config->get('password_cpanel_host');
+        $cpanel_port = $rcmail->config->get('password_cpanel_port');
+        $cpanel_hash = $rcmail->config->get('password_cpanel_hash');
+        $cpanel_pass = $rcmail->config->get('password_cpanel_password');
+
+        // Setup the xmlapi connection
+        $this->xmlapi = new xmlapi($cpanel_host);
+        $this->xmlapi->set_port($cpanel_port);
+
+        // Hash auth
+        if (!empty($cpanel_hash)) {
+            $this->xmlapi->hash_auth($this->cuser, $cpanel_hash);
+        }
+        // Pass auth
+        else if (!empty($cpanel_pass)) {
+            $this->xmlapi->password_auth($this->cuser, $cpanel_pass);
+        }
+        else {
+            return PASSWORD_ERROR;
+        }
+
+        $this->xmlapi->set_output('json');
+        $this->xmlapi->set_debug(0);
+
+        return $this->setPassword($_SESSION['username'], $newpass);
+    }
+
+    /**
+     * Change email account password
+     *
+     * @param string $address  Email address/username
+     * @param string $password Email account password
+     *
+     * @return int|array Operation status
+     */
+    function setPassword($address, $password)
+    {
+        if (strpos($address, '@')) {
+            list($data['email'], $data['domain']) = explode('@', $address);
+        }
+        else {
+            list($data['email'], $data['domain']) = array($address, '');
+        }
+
+        $data['password'] = $password;
+
+        // Get the cPanel user
+        $query = $this->xmlapi->listaccts('domain', $data['domain']);
+        $query = json_decode($query, true);
+        if ( $query['status'] != 1) {
+            return false;
+        }
+        $cpanel_user = $query['acct'][0]['user'];
+
+        $query  = $this->xmlapi->api2_query($cpanel_user, 'Email', 'passwdpop', $data);
+        $query  = json_decode($query, true);
+        $result = $query['cpanelresult']['data'][0];
+
+        if ($result['result'] == 1) {
+            return PASSWORD_SUCCESS;
+        }
+
+        if ($result['reason']) {
+            return array(
+                'code'    => PASSWORD_ERROR,
+                'message' => $result['reason'],
+            );
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/cpanel_webmail.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * cPanel Webmail Password Driver
+ *
+ * It uses Cpanel's Webmail UAPI to change the users password.
+ *
+ * This driver has been tested successfully with Digital Pacific hosting.
+ *
+ * @author Maikel Linke <maikel@email.org.au>
+ *
+ * Copyright (C) 2005-2016, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_cpanel_webmail_password
+{
+    /**
+     * Changes the user's password. It is called by password.php.
+     * See "Driver API" README and password.php for the interface details.
+     *
+     * @param string $curpas  current (old) password
+     * @param string $newpass new requested password
+     *
+     * @return mixed int code or assoc array with 'code' and 'message', see
+     *                   "Driver API" README and password.php
+     */
+    public function save($curpas, $newpass)
+    {
+        $user    = $_SESSION['username'];
+        $userpwd = "$user:$curpas";
+        list($login) = explode('@', $user);
+
+        $data = array(
+            'email'    => $login,
+            'password' => $newpass
+        );
+
+        $url      = self::url();
+        $response = $this->curl_auth_post($userpwd, $url, $data);
+
+        return self::decode_response($response);
+    }
+
+    /**
+     * Provides the UAPI URL of the Email::passwd_pop function.
+     *
+     * @return string HTTPS URL
+     */
+    public static function url()
+    {
+        $config       = rcmail::get_instance()->config;
+        $storage_host = $_SESSION['storage_host'];
+
+        $host = $config->get('password_cpanel_webmail_host', $storage_host);
+        $port = $config->get('password_cpanel_webmail_port', 2096);
+
+        return "https://$host:$port/execute/Email/passwd_pop";
+    }
+
+    /**
+     * Converts a UAPI response to a password driver response.
+     *
+     * @param string $response JSON response by the Cpanel UAPI
+     *
+     * @return mixed response code or array, see <code>save</code>
+     */
+    public static function decode_response($response)
+    {
+        if (!$response) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // $result should be `null` or `stdClass` object
+        $result = json_decode($response);
+
+        // The UAPI may return HTML instead of JSON on missing authentication
+        if ($result && $result->status === 1) {
+            return PASSWORD_SUCCESS;
+        }
+
+        if ($result && is_array($result->errors) && count($result->errors) > 0) {
+            return array(
+                'code'    => PASSWORD_ERROR,
+                'message' => $result->errors[0],
+            );
+        }
+
+        return PASSWORD_ERROR;
+    }
+
+    /**
+     * Post data to the given URL using basic authentication.
+     *
+     * Example:
+     *
+     * <code>
+     * curl_auth_post('john:Secr3t', 'https://example.org', array(
+     *     'param' => 'value',
+     *     'param' => 'value'
+     * ));
+     * </code>
+     *
+     * @param string $userpwd  user name and password separated by a colon
+     *                         <code>:</code>
+     * @param string $url      the URL to post data to
+     * @param array  $postdata the data to post
+     *
+     * @return string|false The body of the reply, False on error
+     */
+    private function curl_auth_post($userpwd, $url, $postdata)
+    {
+        $ch = curl_init();
+        $postfields = http_build_query($postdata, '', '&');
+
+        // see http://php.net/manual/en/function.curl-setopt.php
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($ch, CURLOPT_BUFFERSIZE, 131072);
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
+        curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
+
+        $result = curl_exec($ch);
+        $error  = curl_error($ch);
+        curl_close($ch);
+
+        if ($result === false) {
+            rcube::raise_error("curl error: $error", true, false);
+        }
+
+        return $result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/dbmail.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * DBMail Password Driver
+ *
+ * Driver that adds functionality to change the users DBMail password.
+ * The code is derrived from the Squirrelmail "Change SASL Password" Plugin
+ * by Galen Johnson.
+ *
+ * It only works with dbmail-users on the same host where Roundcube runs
+ * and requires shell access and gcc in order to compile the binary.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 1.0
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_dbmail_password
+{
+    function save($currpass, $newpass)
+    {
+        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
+        $username = escapeshellarg($_SESSION['username']);
+        $password = escapeshellarg($newpass);
+        $args     = rcmail::get_instance()->config->get('password_dbmail_args', '');
+        $command  = "$curdir/chgdbmailusers -c $username -w $password $args";
+
+        exec($command, $output, $return_value);
+
+        if ($return_value == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $curdir/chgdbmailusers"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/directadmin.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,502 @@
+<?php
+
+/**
+ * DirectAdmin Password Driver
+ *
+ * Driver to change passwords via DirectAdmin Control Panel
+ *
+ * @version 2.1
+ * @author Victor Benincasa <vbenincasa@gmail.com>
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_directadmin_password
+{
+    public function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+        $Socket = new HTTPSocket;
+
+        $da_user    = $_SESSION['username'];
+        $da_curpass = $curpass;
+        $da_newpass = $passwd;
+        $da_host    = $rcmail->config->get('password_directadmin_host');
+        $da_port    = $rcmail->config->get('password_directadmin_port');
+
+        if (strpos($da_user, '@') === false) {
+            return array('code' => PASSWORD_ERROR, 'message' => 'Change the SYSTEM user password through control panel!');
+        }
+
+        $da_host = str_replace('%h', $_SESSION['imap_host'], $da_host);
+        $da_host = str_replace('%d', $rcmail->user->get_username('domain'), $da_host);
+
+        $Socket->connect($da_host,$da_port); 
+        $Socket->set_method('POST');
+        $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD',
+            array(
+                'email'         => $da_user,
+                'oldpassword'   => $da_curpass,
+                'password1'     => $da_newpass,
+                'password2'     => $da_newpass,
+                'api'           => '1'
+            ));
+        $response = $Socket->fetch_parsed_body();
+
+        //DEBUG
+        //rcube::console("Password Plugin: [USER: $da_user] [HOST: $da_host] - Response: [SOCKET: ".$Socket->result_status_code."] [DA ERROR: ".strip_tags($response['error'])."] [TEXT: ".$response[text]."]");
+
+        if($Socket->result_status_code != 200)
+            return array('code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]);
+        elseif($response['error'] == 1)
+            return array('code' => PASSWORD_ERROR, 'message' => strip_tags($response['text']));
+        else
+            return PASSWORD_SUCCESS;
+    }
+}
+
+
+/**
+ * Socket communication class.
+ *
+ * Originally designed for use with DirectAdmin's API, this class will fill any HTTP socket need.
+ *
+ * Very, very basic usage:
+ *   $Socket = new HTTPSocket;
+ *   echo $Socket->get('http://user:pass@somehost.com:2222/CMD_API_SOMEAPI?query=string&this=that');
+ *
+ * @author Phi1 'l0rdphi1' Stier <l0rdphi1@liquenox.net>
+ * @updates 2.7 and 2.8 by Victor Benincasa <vbenincasa @ gmail.com>
+ * @package HTTPSocket
+ * @version 2.8
+ */
+class HTTPSocket {
+
+    var $version = '2.8';
+
+    /* all vars are private except $error, $query_cache, and $doFollowLocationHeader */
+
+    var $method = 'GET';
+
+    var $remote_host;
+    var $remote_port;
+    var $remote_uname;
+    var $remote_passwd;
+
+    var $result;
+    var $result_header;
+    var $result_body;
+    var $result_status_code;
+
+    var $lastTransferSpeed;
+
+    var $bind_host;
+
+    var $error = array();
+    var $warn = array();
+    var $query_cache = array();
+
+    var $doFollowLocationHeader = TRUE;
+    var $redirectURL;
+
+    var $extra_headers = array();
+
+    /**
+     * Create server "connection".
+     *
+     */
+    function connect($host, $port = '' )
+    {
+        if (!is_numeric($port))
+        {
+            $port = 2222;
+        }
+
+        $this->remote_host = $host;
+        $this->remote_port = $port;
+    }
+
+    function bind( $ip = '' )
+    {
+        if ( $ip == '' )
+        {
+            $ip = $_SERVER['SERVER_ADDR'];
+        }
+
+        $this->bind_host = $ip;
+    }
+
+    /**
+     * Change the method being used to communicate.
+     *
+     * @param string|null request method. supports GET, POST, and HEAD. default is GET
+     */
+    function set_method( $method = 'GET' )
+    {
+        $this->method = strtoupper($method);
+    }
+
+    /**
+     * Specify a username and password.
+     *
+     * @param string|null username. default is null
+     * @param string|null password. default is null
+     */
+    function set_login( $uname = '', $passwd = '' )
+    {
+        if ( strlen($uname) > 0 )
+        {
+            $this->remote_uname = $uname;
+        }
+
+        if ( strlen($passwd) > 0 )
+        {
+            $this->remote_passwd = $passwd;
+        }
+
+    }
+
+    /**
+     * Query the server
+     *
+     * @param string containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too.
+     * @param string|array query to pass to url
+     * @param int if connection KB/s drops below value here, will drop connection
+     */
+    function query( $request, $content = '', $doSpeedCheck = 0 )
+    {
+        $this->error = $this->warn = array();
+        $this->result_status_code = NULL;
+
+        // is our request a http(s):// ... ?
+        if (preg_match('/^(http|https):\/\//i',$request))
+        {
+            $location = parse_url($request);
+            $this->connect($location['host'],$location['port']);
+            $this->set_login($location['user'],$location['pass']);
+
+            $request = $location['path'];
+            $content = $location['query'];
+
+            if ( strlen($request) < 1 )
+            {
+                $request = '/';
+            }
+
+        }
+
+        $array_headers = array(
+            'User-Agent' => "HTTPSocket/$this->version",
+            'Host' => ( $this->remote_port == 80 ? parse_url($this->remote_host,PHP_URL_HOST) : parse_url($this->remote_host,PHP_URL_HOST).":".$this->remote_port ),
+            'Accept' => '*/*',
+            'Connection' => 'Close' );
+
+        foreach ( $this->extra_headers as $key => $value )
+        {
+            $array_headers[$key] = $value;
+        }
+
+        $this->result = $this->result_header = $this->result_body = '';
+
+        // was content sent as an array? if so, turn it into a string
+        if (is_array($content))
+        {
+            $pairs = array();
+
+            foreach ( $content as $key => $value )
+            {
+                $pairs[] = "$key=".urlencode($value);
+            }
+
+            $content = join('&',$pairs);
+            unset($pairs);
+        }
+
+        $OK = TRUE;
+
+        // instance connection
+        if ($this->bind_host)
+        {
+            $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+            socket_bind($socket,$this->bind_host);
+
+            if (!@socket_connect($socket,$this->remote_host,$this->remote_port))
+            {
+                $OK = FALSE;
+            }
+
+        }
+        else
+        {
+            $socket = @fsockopen( $this->remote_host, $this->remote_port, $sock_errno, $sock_errstr, 10 );
+        }
+
+        if ( !$socket || !$OK )
+        {
+            $this->error[] = "Can't create socket connection to $this->remote_host:$this->remote_port.";
+            return 0;
+        }
+
+        // if we have a username and password, add the header
+        if ( isset($this->remote_uname) && isset($this->remote_passwd) )
+        {
+            $array_headers['Authorization'] = 'Basic '.base64_encode("$this->remote_uname:$this->remote_passwd");
+        }
+
+        // for DA skins: if $this->remote_passwd is NULL, try to use the login key system
+        if ( isset($this->remote_uname) && $this->remote_passwd == NULL )
+        {
+            $array_headers['Cookie'] = "session={$_SERVER['SESSION_ID']}; key={$_SERVER['SESSION_KEY']}";
+        }
+
+        // if method is POST, add content length & type headers
+        if ( $this->method == 'POST' )
+        {
+            $array_headers['Content-type'] = 'application/x-www-form-urlencoded';
+            $array_headers['Content-length'] = strlen($content);
+        }
+        // else method is GET or HEAD. we don't support anything else right now.
+        else
+        {
+            if ($content)
+            {
+                $request .= "?$content";
+            }
+        }
+
+        // prepare query
+        $query = "$this->method $request HTTP/1.0\r\n";
+        foreach ( $array_headers as $key => $value )
+        {
+            $query .= "$key: $value\r\n";
+        }
+        $query .= "\r\n";
+
+        // if POST we need to append our content
+        if ( $this->method == 'POST' && $content )
+        {
+            $query .= "$content\r\n\r\n";
+        }
+
+        // query connection
+        if ($this->bind_host)
+        {
+            socket_write($socket,$query);
+
+            // now load results
+            while ( $out = socket_read($socket,2048) )
+            {
+                $this->result .= $out;
+            }
+        }
+        else
+        {
+            fwrite( $socket, $query, strlen($query) );
+
+            // now load results
+            $this->lastTransferSpeed = 0;
+            $status = socket_get_status($socket);
+            $startTime = time();
+            $length = 0;
+            while ( !feof($socket) && !$status['timed_out'] )
+            {
+                $chunk = fgets($socket,1024);
+                $length += strlen($chunk);
+                $this->result .= $chunk;
+
+                $elapsedTime = time() - $startTime;
+
+                if ( $elapsedTime > 0 )
+                {
+                    $this->lastTransferSpeed = ($length/1024)/$elapsedTime;
+                }
+
+                if ( $doSpeedCheck > 0 && $elapsedTime > 5 && $this->lastTransferSpeed < $doSpeedCheck )
+                {
+                    $this->warn[] = "kB/s for last 5 seconds is below 50 kB/s (~".( ($length/1024)/$elapsedTime )."), dropping connection...";
+                    $this->result_status_code = 503;
+                    break;
+                }
+
+            }
+
+            if ( $this->lastTransferSpeed == 0 )
+            {
+                $this->lastTransferSpeed = $length/1024;
+            }
+
+        }
+
+        list($this->result_header,$this->result_body) = preg_split("/\r\n\r\n/",$this->result,2);
+
+        if ($this->bind_host)
+        {
+            socket_close($socket);
+        }
+        else
+        {
+            fclose($socket);
+        }
+
+        $this->query_cache[] = $query;
+
+
+        $headers = $this->fetch_header();
+
+        // what return status did we get?
+        if (!$this->result_status_code)
+        {
+            preg_match("#HTTP/1\.. (\d+)#",$headers[0],$matches);
+            $this->result_status_code = $matches[1];
+        }
+
+        // did we get the full file?
+        if ( !empty($headers['content-length']) && $headers['content-length'] != strlen($this->result_body) )
+        {
+            $this->result_status_code = 206;
+        }
+
+        // now, if we're being passed a location header, should we follow it?
+        if ($this->doFollowLocationHeader)
+        {
+            if ($headers['location'])
+            {
+                $this->redirectURL = $headers['location'];
+                $this->query($headers['location']);
+            }
+        }
+    }
+
+    function getTransferSpeed()
+    {
+        return $this->lastTransferSpeed;
+    }
+
+    /**
+     * The quick way to get a URL's content :)
+     *
+     * @param string URL
+     * @param boolean return as array? (like PHP's file() command)
+     * @return string result body
+     */
+    function get($location, $asArray = FALSE )
+    {
+        $this->query($location);
+
+        if ( $this->get_status_code() == 200 )
+        {
+            if ($asArray)
+            {
+                return preg_split("/\n/",$this->fetch_body());
+            }
+
+            return $this->fetch_body();
+        }
+
+        return FALSE;
+    }
+
+    /**
+     * Returns the last status code.
+     * 200 = OK;
+     * 403 = FORBIDDEN;
+     * etc.
+     *
+     * @return int status code
+     */
+    function get_status_code()
+    {
+        return $this->result_status_code;
+    }
+
+    /**
+     * Adds a header, sent with the next query.
+     *
+     * @param string header name
+     * @param string header value
+     */
+    function add_header($key,$value)
+    {
+        $this->extra_headers[$key] = $value;
+    }
+
+    /**
+     * Clears any extra headers.
+     *
+     */
+    function clear_headers()
+    {
+        $this->extra_headers = array();
+    }
+
+    /**
+     * Return the result of a query.
+     *
+     * @return string result
+     */
+    function fetch_result()
+    {
+        return $this->result;
+    }
+
+    /**
+     * Return the header of result (stuff before body).
+     *
+     * @param string (optional) header to return
+     * @return array result header
+     */
+    function fetch_header( $header = '' )
+    {
+        $array_headers = preg_split("/\r\n/",$this->result_header);
+        $array_return  = array( 0 => $array_headers[0] );
+        unset($array_headers[0]);
+
+        foreach ( $array_headers as $pair )
+        {
+            list($key,$value) = preg_split("/: /",$pair,2);
+            $array_return[strtolower($key)] = $value;
+        }
+
+        if ( $header != '' )
+        {
+            return $array_return[strtolower($header)];
+        }
+
+        return $array_return;
+    }
+
+    /**
+     * Return the body of result (stuff after header).
+     *
+     * @return string result body
+     */
+    function fetch_body()
+    {
+        return $this->result_body;
+    }
+
+    /**
+     * Return parsed body in array format.
+     *
+     * @return array result parsed
+     */
+    function fetch_parsed_body()
+    {
+        parse_str($this->result_body,$x);
+        return $x;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/domainfactory.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * domainFACTORY Password Driver
+ *
+ * Driver to change passwords with the hosting provider domainFACTORY.
+ * http://www.df.eu/
+ *
+ * @version 2.1
+ * @author Till Krüss <me@tillkruess.com>
+ * @link http://tillkruess.com/projects/roundcube/
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_domainfactory_password
+{
+    function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+
+        if (is_null($curpass)) {
+            $curpass = $rcmail->decrypt($_SESSION['password']);
+        }
+
+        if ($ch = curl_init()) {
+            // initial login
+            curl_setopt_array($ch, array(
+                CURLOPT_RETURNTRANSFER => true,
+                CURLOPT_URL        => 'https://ssl.df.eu/chmail.php',
+                CURLOPT_POST       => true,
+                CURLOPT_POSTFIELDS => http_build_query(array(
+                    'login'  => $rcmail->user->get_username(),
+                    'pwd'    => $curpass,
+                    'action' => 'change'
+                ))
+            ));
+
+            if ($result = curl_exec($ch)) {
+                // login successful, get token!
+                $postfields = array(
+                    'pwd1'           => $passwd,
+                    'pwd2'           => $passwd,
+                    'action[update]' => 'Speichern'
+                );
+
+                preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields);
+                foreach ($fields[1] as $field_key => $field_name) {
+                    $postfields[$field_name] = $fields[2][$field_key];
+                }
+
+                // change password
+                $ch = curl_copy_handle($ch);
+                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
+                if ($result = curl_exec($ch)) {
+                    // has the password been changed?
+                    if (strpos($result, 'Einstellungen erfolgreich') !== false) {
+                        return PASSWORD_SUCCESS;
+                    }
+
+                    // show error message(s) if possible
+                    if (strpos($result, '<div class="d-msg-text">') !== false) {
+                        preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
+                        if (isset($errors[1])) {
+                            $error_message = '';
+                            foreach ($errors[1] as $error) {
+                                $error_message .= trim(mb_convert_encoding( $error, 'UTF-8', 'ISO-8859-15' )).' ';
+                            }
+                            return array('code' => PASSWORD_ERROR, 'message' => $error_message);
+                        }
+                    }
+                }
+                else {
+                    return PASSWORD_CONNECT_ERROR;
+                }
+            }
+            else {
+                return PASSWORD_CONNECT_ERROR;
+            }
+        }
+        else {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/expect.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * expect driver
+ *
+ * Driver that adds functionality to change the systems user password via
+ * the 'expect' command.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 2.0
+ * @author Andy Theuninck <gohanman@gmail.com)
+ *
+ * Based on chpasswd roundcubemail password driver by
+ * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
+ * and expect horde passwd driver by
+ * @author  Gaudenz Steinlin <gaudenz@soziologie.ch>
+ *
+ * Configuration settings:
+ * password_expect_bin => location of expect (e.g. /usr/bin/expect)
+ * password_expect_script => path to "password-expect" file
+ * password_expect_params => arguments for the expect script
+ *   see the password-expect file for details. This is probably
+ *   a good starting default:
+ *   -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_expect_password
+{
+    public function save($currpass, $newpass)
+    {
+        $rcmail   = rcmail::get_instance();
+        $bin      = $rcmail->config->get('password_expect_bin');
+        $script   = $rcmail->config->get('password_expect_script');
+        $params   = $rcmail->config->get('password_expect_params');
+        $username = $_SESSION['username'];
+
+        $cmd = $bin . ' -f ' . $script . ' -- ' . $params;
+        $handle = popen($cmd, "w");
+        fwrite($handle, "$username\n");
+        fwrite($handle, "$currpass\n");
+        fwrite($handle, "$newpass\n");
+
+        if (pclose($handle) == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $cmd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/gearman.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Gearman Password Driver
+ *
+ * Payload is json string containing username, oldPassword and newPassword
+ * Return value is a json string saying result: true if success.
+ *
+ * @version 1.0
+ * @author Mohammad Anwari <mdamt@mdamt.net>
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_gearman_password
+{
+    function save($currpass, $newpass)
+    {
+        if (extension_loaded('gearman')) {
+            $rcmail  = rcmail::get_instance();
+            $user    = $_SESSION['username'];
+            $payload = array(
+                'username'    => $user,
+                'oldPassword' => $currpass,
+                'newPassword' => $newpass,
+            );
+
+            $gmc = new GearmanClient();
+            $gmc->addServer($rcmail->config->get('password_gearman_host', 'localhost'));
+
+            $result  = $gmc->doNormal('setPassword', json_encode($payload));
+            $success = json_decode($result);
+
+            if ($success && $success->result == 1) {
+                return PASSWORD_SUCCESS;
+            }
+            else {
+                rcube::raise_error(array(
+                    'code' => 600,
+                    'type' => 'php',
+                    'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: Gearman authentication failed for user $user: $error"
+                ), true, false);
+            }
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: PECL Gearman module not loaded"
+            ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/hmail.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * hMailserver password driver
+ *
+ * @version 2.0
+ * @author Roland 'rosali' Liebl <myroundcube@mail4us.net>
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_hmail_password
+{
+    public function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($curpass == '' || $passwd == '') {
+            return PASSWORD_ERROR;
+        }
+
+        try {
+            $remote = $rcmail->config->get('hmailserver_remote_dcom', false);
+            if ($remote)
+                $obApp = new COM("hMailServer.Application", $rcmail->config->get('hmailserver_server'));
+            else
+                $obApp = new COM("hMailServer.Application");
+        }
+        catch (Exception $e) {
+            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
+            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");
+            return PASSWORD_ERROR;
+        }
+
+        $username = $rcmail->user->data['username'];
+        if (strstr($username,'@')){
+            $temparr = explode('@', $username);
+            $domain = $temparr[1];
+        }
+        else {
+            $domain = $rcmail->config->get('username_domain',false);
+            if (!$domain) {
+                rcube::write_log('errors','Plugin password (hmail driver): $config[\'username_domain\'] is not defined.');
+                return PASSWORD_ERROR;
+            }
+            $username = $username . "@" . $domain;
+        }
+
+        $obApp->Authenticate($username, $curpass);
+        try {
+            $obDomain = $obApp->Domains->ItemByName($domain);
+            $obAccount = $obDomain->Accounts->ItemByAddress($username);
+            $obAccount->Password = $passwd;
+            $obAccount->Save();
+            return PASSWORD_SUCCESS;
+        }
+        catch (Exception $e) {
+            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
+            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");
+            return PASSWORD_ERROR;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/kpasswd.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * kpasswd Driver
+ *
+ * Driver that adds functionality to change the systems user password via
+ * the 'kpasswd' command.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 1.0
+ * @author Peter Allgeyer <peter.allgeyer@salzburgresearch.at>
+ *
+ * Based on chpasswd roundcubemail password driver by
+ * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
+ */
+
+class rcube_kpasswd_password
+{
+    public function save($currpass, $newpass)
+    {
+        $bin      = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd');
+        $username = $_SESSION['username'];
+        $cmd      = $bin . ' "' . $username . '" 2>&1';
+
+        $handle = popen($cmd, "w");
+        fwrite($handle, $currpass."\n");
+        fwrite($handle, $newpass."\n");
+        fwrite($handle, $newpass."\n");
+
+        if (pclose($handle) == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $cmd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/ldap.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,223 @@
+<?php
+
+/**
+ * LDAP Password Driver
+ *
+ * Driver for passwords stored in LDAP
+ * This driver use the PEAR Net_LDAP2 class (http://pear.php.net/package/Net_LDAP2).
+ *
+ * @version 2.0
+ * @author Edouard MOREAU <edouard.moreau@ensma.fr>
+ *
+ * method hashPassword based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
+ * method randomSalt based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_ldap_password
+{
+    public function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+        require_once 'Net/LDAP2.php';
+
+        // Building user DN
+        if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) {
+            $userDN = self::substitute_vars($userDN);
+        }
+        else {
+            $userDN = $this->search_userdn($rcmail);
+        }
+
+        if (empty($userDN)) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // Connection Method
+        switch($rcmail->config->get('password_ldap_method')) {
+            case 'admin':
+                $binddn = $rcmail->config->get('password_ldap_adminDN');
+                $bindpw = $rcmail->config->get('password_ldap_adminPW');
+                break;
+            case 'user':
+            default:
+                $binddn = $userDN;
+                $bindpw = $curpass;
+                break;
+        }
+
+        // Configuration array
+        $ldapConfig = array (
+            'binddn'    => $binddn,
+            'bindpw'    => $bindpw,
+            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
+            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
+            'port'      => $rcmail->config->get('password_ldap_port', '389'),
+            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
+            'version'   => $rcmail->config->get('password_ldap_version', '3'),
+        );
+
+        // Connecting using the configuration array
+        $ldap = Net_LDAP2::connect($ldapConfig);
+
+        // Checking for connection error
+        if (is_a($ldap, 'PEAR_Error')) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $force        = $rcmail->config->get('password_ldap_force_replace', true);
+        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
+        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
+        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
+        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
+        $samba        = $rcmail->config->get('password_ldap_samba');
+        $encodage     = $rcmail->config->get('password_ldap_encodage', 'crypt');
+
+        // Support multiple userPassword values where desired.
+        // multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha")
+        $encodages    = explode('+', $encodage);
+        $crypted_pass = array();
+
+        foreach ($encodages as $enc) {
+            if ($cpw = password::hash_password($passwd, $enc)) {
+                $crypted_pass[] = $cpw;
+            }
+        }
+
+        // Support password_ldap_samba option for backward compat.
+        if ($samba && !$smbpwattr) {
+            $smbpwattr  = 'sambaNTPassword';
+            $smblchattr = 'sambaPwdLastSet';
+        }
+
+        // Crypt new password
+        if (empty($crypted_pass)) {
+            return PASSWORD_CRYPT_ERROR;
+        }
+
+        // Crypt new samba password
+        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
+            return PASSWORD_CRYPT_ERROR;
+        }
+
+        // Writing new crypted password to LDAP
+        $userEntry = $ldap->getEntry($userDN);
+        if (Net_LDAP2::isError($userEntry)) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        if (!$userEntry->replace(array($pwattr => $crypted_pass), $force)) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // Updating PasswordLastChange Attribute if desired
+        if ($lchattr) {
+            $current_day = (int)(time() / 86400);
+            if (!$userEntry->replace(array($lchattr => $current_day), $force)) {
+                return PASSWORD_CONNECT_ERROR;
+            }
+        }
+
+        // Update Samba password and last change fields
+        if ($smbpwattr) {
+            $userEntry->replace(array($smbpwattr => $samba_pass), $force);
+        }
+        // Update Samba password last change field
+        if ($smblchattr) {
+            $userEntry->replace(array($smblchattr => time()), $force);
+        }
+
+        if (Net_LDAP2::isError($userEntry->update())) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // All done, no error
+        return PASSWORD_SUCCESS;
+    }
+
+    /**
+     * Bind with searchDN and searchPW and search for the user's DN.
+     * Use search_base and search_filter defined in config file.
+     * Return the found DN.
+     */
+    function search_userdn($rcmail)
+    {
+        $binddn = $rcmail->config->get('password_ldap_searchDN');
+        $bindpw = $rcmail->config->get('password_ldap_searchPW');
+
+        $ldapConfig = array (
+            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
+            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
+            'port'      => $rcmail->config->get('password_ldap_port', '389'),
+            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
+            'version'   => $rcmail->config->get('password_ldap_version', '3'),
+        );
+
+        // allow anonymous searches
+        if (!empty($binddn)) {
+            $ldapConfig['binddn'] = $binddn;
+            $ldapConfig['bindpw'] = $bindpw;
+        }
+
+        $ldap = Net_LDAP2::connect($ldapConfig);
+
+        if (is_a($ldap, 'PEAR_Error')) {
+            return '';
+        }
+
+        $base   = self::substitute_vars($rcmail->config->get('password_ldap_search_base'));
+        $filter = self::substitute_vars($rcmail->config->get('password_ldap_search_filter'));
+        $options = array (
+            'scope' => 'sub',
+            'attributes' => array(),
+        );
+
+        $result = $ldap->search($base, $filter, $options);
+        if (is_a($result, 'PEAR_Error') || ($result->count() != 1)) {
+            $ldap->done();
+            return '';
+        }
+        $userDN = $result->current()->dn();
+        $ldap->done();
+
+        return $userDN;
+    }
+
+    /**
+     * Substitute %login, %name, %domain, %dc in $str
+     * See plugin config for details
+     */
+    static function substitute_vars($str)
+    {
+        $str = str_replace('%login', $_SESSION['username'], $str);
+        $str = str_replace('%l', $_SESSION['username'], $str);
+
+        $parts = explode('@', $_SESSION['username']);
+
+        if (count($parts) == 2) {
+            $dc = 'dc='.strtr($parts[1], array('.' => ',dc=')); // hierarchal domain string
+
+            $str = str_replace('%name', $parts[0], $str);
+            $str = str_replace('%n', $parts[0], $str);
+            $str = str_replace('%dc', $dc, $str);
+            $str = str_replace('%domain', $parts[1], $str);
+            $str = str_replace('%d', $parts[1], $str);
+        }
+
+        return $str;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/ldap_ppolicy.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * ldap_ppolicy driver
+ *
+ * Driver that adds functionality to change the user password via
+ * the 'change_ldap_pass.pl' command respecting password policy (history) in LDAP.
+ *
+ * @version 1.0
+ * @author Zbigniew Szmyd <zbigniew.szmyd@linseco.pl>
+ *
+ */
+
+class rcube_ldap_ppolicy_password
+{
+    public function save($currpass, $newpass)
+    {
+        $rcmail = rcmail::get_instance();
+        $this->debug = $rcmail->config->get('ldap_debug');
+
+        $cmd    = $rcmail->config->get('password_ldap_ppolicy_cmd');
+        $uri    = $rcmail->config->get('password_ldap_ppolicy_uri');
+        $baseDN = $rcmail->config->get('password_ldap_ppolicy_basedn');
+        $filter = $rcmail->config->get('password_ldap_ppolicy_search_filter');
+        $bindDN = $rcmail->config->get('password_ldap_ppolicy_searchDN');
+        $bindPW = $rcmail->config->get('password_ldap_ppolicy_searchPW');
+        $cafile = $rcmail->config->get('password_ldap_ppolicy_cafile');
+
+        $log_dir = $rcmail->config->get('log_dir');
+
+        if (empty($log_dir)) {
+            $log_dir = RCUBE_INSTALL_PATH . 'logs';
+        }
+
+        // try to open specific log file for writing
+        $logfile = $log_dir.'/password_ldap_ppolicy.err';
+
+        $descriptorspec = array(
+            0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
+            1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
+            2 => array("file", $logfile, "a") // stderr is a file to write to
+        );
+
+        $cmd = 'plugins/password/helpers/'. $cmd;
+        $this->_debug("parameters:\ncmd:$cmd\nuri:$uri\nbaseDN:$baseDN\nfilter:$filter");
+        $process = proc_open($cmd, $descriptorspec, $pipes);
+
+        if (is_resource($process)) {
+            // $pipes now looks like this:
+            // 0 => writeable handle connected to child stdin
+            // 1 => readable handle connected to child stdout
+            // Any error output will be appended to /tmp/error-output.txt
+
+            fwrite($pipes[0], $uri."\n");
+            fwrite($pipes[0], $baseDN."\n");
+            fwrite($pipes[0], $filter."\n");
+            fwrite($pipes[0], $bindDN."\n");
+            fwrite($pipes[0], $bindPW."\n");
+            fwrite($pipes[0], $_SESSION['username']."\n");
+            fwrite($pipes[0], $currpass."\n");
+            fwrite($pipes[0], $newpass."\n");
+            fwrite($pipes[0], $cafile);
+            fclose($pipes[0]);
+
+            $result = stream_get_contents($pipes[1]);
+            fclose($pipes[1]);
+
+            $this->_debug('Result:'.$result);
+
+            switch ($result) {
+            case "OK":
+                return PASSWORD_SUCCESS;
+            case "Password is in history of old passwords":
+                return  PASSWORD_IN_HISTORY;
+            case "Cannot connect to any server":
+                return PASSWORD_CONNECT_ERROR;
+            default:
+                rcube::raise_error(array(
+                        'code' => 600,
+                        'type' => 'php',
+                        'file' => __FILE__, 'line' => __LINE__,
+                        'message' => $result
+                    ), true, false);
+            }
+
+            return PASSWORD_ERROR;
+        }
+    }
+
+    private function _debug($str)
+    {
+        if ($this->debug) {
+            rcube::write_log('password_ldap_ppolicy', $str);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/ldap_simple.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,245 @@
+<?php
+
+/**
+ * Simple LDAP Password Driver
+ *
+ * Driver for passwords stored in LDAP
+ * This driver is based on Edouard's LDAP Password Driver, but does not
+ * require PEAR's Net_LDAP2 to be installed
+ *
+ * @version 2.0
+ * @author Wout Decre <wout@canodus.be>
+ * @author Aleksander Machniak <machniak@kolabsys.com>
+ *
+ * Copyright (C) 2005-2014, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_ldap_simple_password
+{
+    private $debug = false;
+
+    function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+
+        $this->debug = $rcmail->config->get('ldap_debug');
+
+        $ldap_host = $rcmail->config->get('password_ldap_host', 'localhost');
+        $ldap_port = $rcmail->config->get('password_ldap_port', '389');
+
+        $this->_debug("C: Connect to $ldap_host:$ldap_port");
+
+        // Connect
+        if (!$ds = ldap_connect($ldap_host, $ldap_port)) {
+            $this->_debug("S: NOT OK");
+
+            rcube::raise_error(array(
+                    'code' => 100, 'type' => 'ldap',
+                    'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Could not connect to LDAP server"
+                ),
+                true);
+
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $this->_debug("S: OK");
+
+        // Set protocol version
+        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION,
+            $rcmail->config->get('password_ldap_version', '3'));
+
+        // Start TLS
+        if ($rcmail->config->get('password_ldap_starttls')) {
+            if (!ldap_start_tls($ds)) {
+                ldap_unbind($ds);
+                return PASSWORD_CONNECT_ERROR;
+            }
+        }
+
+        // include 'ldap' driver, we share some static methods with it
+        require_once INSTALL_PATH . 'plugins/password/drivers/ldap.php';
+
+        // other plugins might want to modify user DN
+        $plugin = $rcmail->plugins->exec_hook('password_ldap_bind', array(
+            'user_dn' => '', 'conn' => $ds));
+
+        // Build user DN
+        if (!empty($plugin['user_dn'])) {
+            $user_dn = $plugin['user_dn'];
+        }
+        else if ($user_dn = $rcmail->config->get('password_ldap_userDN_mask')) {
+            $user_dn = rcube_ldap_password::substitute_vars($user_dn);
+        }
+        else {
+            $user_dn = $this->search_userdn($rcmail, $ds);
+        }
+
+        if (empty($user_dn)) {
+            ldap_unbind($ds);
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // Connection method
+        switch ($rcmail->config->get('password_ldap_method')) {
+        case 'admin':
+            $binddn = $rcmail->config->get('password_ldap_adminDN');
+            $bindpw = $rcmail->config->get('password_ldap_adminPW');
+            break;
+        case 'user':
+        default:
+            $binddn = $user_dn;
+            $bindpw = $curpass;
+            break;
+        }
+
+        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
+        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
+        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
+        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
+        $samba        = $rcmail->config->get('password_ldap_samba');
+        $pass_mode    = $rcmail->config->get('password_ldap_encodage', 'crypt');
+        $crypted_pass = password::hash_password($passwd, $pass_mode);
+
+        // Support password_ldap_samba option for backward compat.
+        if ($samba && !$smbpwattr) {
+            $smbpwattr  = 'sambaNTPassword';
+            $smblchattr = 'sambaPwdLastSet';
+        }
+
+        // Crypt new password
+        if (!$crypted_pass) {
+            return PASSWORD_CRYPT_ERROR;
+        }
+
+        // Crypt new Samba password
+        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
+            return PASSWORD_CRYPT_ERROR;
+        }
+
+        $this->_debug("C: Bind $binddn, pass: **** [" . strlen($bindpw) . "]");
+
+        // Bind
+        if (!ldap_bind($ds, $binddn, $bindpw)) {
+            $this->_debug("S: ".ldap_error($ds));
+
+            ldap_unbind($ds);
+
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $this->_debug("S: OK");
+
+        $entry[$pwattr] = $crypted_pass;
+
+        // Update PasswordLastChange Attribute if desired
+        if ($lchattr) {
+            $entry[$lchattr] = (int)(time() / 86400);
+        }
+
+        // Update Samba password
+        if ($smbpwattr) {
+            $entry[$smbpwattr] = $samba_pass;
+        }
+
+        // Update Samba password last change
+        if ($smblchattr) {
+            $entry[$smblchattr] = time();
+        }
+
+        $this->_debug("C: Modify $user_dn: " . print_r($entry, true));
+
+        if (!ldap_modify($ds, $user_dn, $entry)) {
+            $this->_debug("S: ".ldap_error($ds));
+
+            $errno = ldap_errno($ds);
+
+            ldap_unbind($ds);
+
+            if ($errno == 0x13) {   // LDAP_CONSTRAINT_VIOLATION
+                return PASSWORD_CONSTRAINT_VIOLATION;
+            }
+
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $this->_debug("S: OK");
+
+        // All done, no error
+        ldap_unbind($ds);
+
+        return PASSWORD_SUCCESS;
+    }
+
+    /**
+     * Bind with searchDN and searchPW and search for the user's DN
+     * Use search_base and search_filter defined in config file
+     * Return the found DN
+     */
+    function search_userdn($rcmail, $ds)
+    {
+        $search_user   = $rcmail->config->get('password_ldap_searchDN');
+        $search_pass   = $rcmail->config->get('password_ldap_searchPW');
+        $search_base   = $rcmail->config->get('password_ldap_search_base');
+        $search_filter = $rcmail->config->get('password_ldap_search_filter');
+
+        if (empty($search_filter)) {
+            return false;
+        }
+
+        $this->_debug("C: Bind " . ($search_user ? $search_user : '[anonymous]'));
+
+        // Bind
+        if (!ldap_bind($ds, $search_user, $search_pass)) {
+            $this->_debug("S: ".ldap_error($ds));
+            return false;
+        }
+
+        $this->_debug("S: OK");
+
+        $search_base   = rcube_ldap_password::substitute_vars($search_base);
+        $search_filter = rcube_ldap_password::substitute_vars($search_filter);
+
+        $this->_debug("C: Search $search_base for $search_filter");
+
+        // Search for the DN
+        if (!$sr = ldap_search($ds, $search_base, $search_filter)) {
+            $this->_debug("S: ".ldap_error($ds));
+            return false;
+        }
+
+        $found = ldap_count_entries($ds, $sr);
+
+        $this->_debug("S: OK [found $found records]");
+
+        // If no or more entries were found, return false
+        if ($found != 1) {
+            return false;
+        }
+
+        return ldap_get_dn($ds, ldap_first_entry($ds, $sr));
+    }
+
+    /**
+     * Prints debug info to the log
+     */
+    private function _debug($str)
+    {
+        if ($this->debug) {
+            rcube::write_log('ldap', $str);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/pam.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * PAM Password Driver
+ *
+ * @version 2.0
+ * @author Aleksander Machniak
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_pam_password
+{
+    function save($currpass, $newpass)
+    {
+        $user  = $_SESSION['username'];
+        $error = '';
+
+        if (extension_loaded('pam') || extension_loaded('pam_auth')) {
+            if (pam_auth($user, $currpass, $error, false)) {
+                if (pam_chpass($user, $currpass, $newpass)) {
+                    return PASSWORD_SUCCESS;
+                }
+            }
+            else {
+                rcube::raise_error(array(
+                    'code' => 600,
+                    'type' => 'php',
+                    'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: PAM authentication failed for user $user: $error"
+                    ), true, false);
+            }
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: PECL-PAM module not loaded"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/plesk.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * Roundcube Password Driver for Plesk-RPC.
+ *
+ * This driver changes a E-Mail-Password via Plesk-RPC
+ * Deps: PHP-Curl, SimpleXML
+ *
+ * @author     Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
+ * @copyright  Adfinis SyGroup AG, 2014
+ *
+ * Config needed:
+ * $config['password_plesk_host']     = '10.0.0.5';
+ * $config['password_plesk_user']     = 'admin';
+ * $config['password_plesk_pass']     = 'pass';
+ * $config['password_plesk_rpc_port'] = 8443;
+ * $config['password_plesk_rpc_path'] = enterprise/control/agent.php;
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+/**
+ * Roundcube Password Driver Class
+ *
+ * See {ROUNDCUBE_ROOT}/plugins/password/README for API description
+ *
+ * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
+ */
+class rcube_plesk_password
+{
+    /**
+     * this method is called from roundcube to change the password
+     *
+     * roundcube allready validated the old password so we just need to change it at this point
+     *
+     * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
+     * @param string $curpass Current password
+     * @param string $newpass New password
+     * @returns int PASSWORD_SUCCESS|PASSWORD_ERROR
+     */
+    function save($currpass, $newpass)
+    {
+        // get config
+        $rcmail = rcmail::get_instance();
+        $host   = $rcmail->config->get('password_plesk_host');
+        $user   = $rcmail->config->get('password_plesk_user');
+        $pass   = $rcmail->config->get('password_plesk_pass');
+        $port   = $rcmail->config->get('password_plesk_rpc_port');
+        $path   = $rcmail->config->get('password_plesk_rpc_path');
+
+        // create plesk-object
+        $plesk = new plesk_rpc;
+        $plesk->init($host, $port, $path, $user, $pass);
+
+        // try to change password and return the status
+        $result = $plesk->change_mailbox_password($_SESSION['username'], $newpass);
+        //$plesk->destroy();
+
+        if ($result) {
+            return PASSWORD_SUCCESS;
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
+
+
+/**
+ * Plesk RPC-Class
+ *
+ * Striped down version of Plesk-RPC-Class
+ * Just functions for changing mail-passwords included
+ *
+ * Documentation of Plesk RPC-API: http://download1.parallels.com/Plesk/PP11/11.0/Doc/en-US/online/plesk-api-rpc/
+ *
+ * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
+ */
+class plesk_rpc
+{
+    /**
+     * init plesk-rpc via curl
+     *
+     * @param string $host plesk host
+     * @param string $port plesk rpc port
+     * @param string $path plesk rpc path
+     * @param string $user plesk user
+     * @param string $user plesk password
+     * @returns void
+     */
+    function init($host, $port, $path, $user, $pass)
+    {
+        $headers = array(
+            sprintf("HTTP_AUTH_LOGIN: %s", $user),
+            sprintf("HTTP_AUTH_PASSWD: %s", $pass),
+            "Content-Type: text/xml"
+        );
+
+        $url        = sprintf("https://%s:%s/%s", $host, $port, $path);
+        $this->curl = curl_init();
+
+        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
+        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
+        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
+        curl_setopt($this->curl, CURLOPT_HTTPHEADER     , $headers);
+        curl_setopt($this->curl, CURLOPT_URL            , $url);
+    }
+
+    /**
+     * send a request to the plesk
+     *
+     * @param string $packet XML-Packet to send to Plesk
+     * @returns bool request was successful or not
+     */
+    function send_request($packet)
+    {
+        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
+        $retval = curl_exec($this->curl);
+
+        return $retval;
+    }
+
+    /**
+     * close curl
+     */
+    function destroy(){
+        curl_close($this->curl);
+    }
+
+    /**
+     * Creates an Initial SimpleXML-Object for Plesk-RPC
+     *
+     * @returns object SimpleXML object
+     */
+    function get_request_obj()
+    {
+        $request = new SimpleXMLElement("<packet></packet>");
+        $request->addAttribute("version", "1.6.3.0");
+
+        return $request;
+    }
+
+    /**
+     * Get all hosting-information of a domain
+     *
+     * @param string $domain domain-name
+     * @returns object SimpleXML object
+     */
+    function domain_info($domain)
+    {
+        // build xml
+        $request = $this->get_request_obj();
+        $site    = $request->addChild("site");
+        $get     = $site->addChild("get");
+        $filter  = $get->addChild("filter");
+
+        $filter->addChild("name", utf8_encode($domain));
+        $dataset = $get->addChild("dataset");
+
+        $dataset->addChild("hosting");
+        $packet = $request->asXML();
+
+        // send the request
+        $res = $this->send_request($packet);
+
+        // make it to simple-xml-object
+        $xml = new SimpleXMLElement($res);
+
+        return $xml;
+    }
+
+    /**
+     * Get psa-id of a domain
+     *
+     * @param string $domain domain-name
+     *
+     * @returns bool|int false if failed and integer if successed
+     */
+    function get_domain_id($domain)
+    {
+        $xml = $this->domain_info($domain);
+        $id  = intval($xml->site->get->result->id);
+        $id  = (is_int($id)) ? $id : false;
+
+        return $id;
+    }
+
+    /**
+     * Change Password of a mailbox
+     *
+     * @param string $mailbox full email-address (user@domain.tld)
+     * @param string $newpass new password of mailbox
+     *
+     * @returns bool
+     */
+    function change_mailbox_password($mailbox, $newpass)
+    {
+        list($user, $domain) = explode("@", $mailbox);
+        $domain_id = $this->get_domain_id($domain);
+
+        // if domain cannot be resolved to an id, do not continue
+        if (!$domain_id) {
+            return false;
+        }
+
+        // build xml-packet
+        $request = $this    -> get_request_obj();
+        $mail    = $request -> addChild("mail");
+        $update  = $mail    -> addChild("update");
+        $add     = $update  -> addChild("set");
+        $filter  = $add     -> addChild("filter");
+        $filter->addChild("site-id", $domain_id);
+
+        $mailname = $filter->addChild("mailname");
+        $mailname->addChild("name", $user);
+
+        $password = $mailname->addChild("password");
+        $password->addChild("value", $newpass);
+        $password->addChild("type", "plain");
+
+        $packet = $request->asXML();
+
+        // send the request to plesk
+        $res = $this->send_request($packet);
+        $xml = new SimpleXMLElement($res);
+        $res = strval($xml->mail->update->set->result->status);
+
+        return $res == "ok";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/poppassd.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Poppassd Password Driver
+ *
+ * Driver to change passwords via Poppassd/Courierpassd
+ *
+ * @version 2.0
+ * @author Philip Weir
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_poppassd_password
+{
+    function format_error_result($code, $line)
+    {
+        if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
+            return array('code' => $code, 'message' => $matches[1]);
+        }
+
+        return $code;
+    }
+
+    function save($curpass, $passwd)
+    {
+        $rcmail   = rcmail::get_instance();
+        $poppassd = new Net_Socket();
+
+        $port = $rcmail->config->get('password_pop_port', 106);
+        $host = $rcmail->config->get('password_pop_host', 'localhost');
+        $host = rcube_utils::parse_host($host);
+
+        $result = $poppassd->connect($host, $port, null);
+
+        if (is_a($result, 'PEAR_Error')) {
+            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage());
+        }
+
+        $result = $poppassd->readLine();
+
+        if (!preg_match('/^2\d\d/', $result)) {
+            $poppassd->disconnect();
+            return $this->format_error_result(PASSWORD_ERROR, $result);
+        }
+
+        $poppassd->writeLine("user ". $_SESSION['username']);
+        $result = $poppassd->readLine();
+
+        if (!preg_match('/^[23]\d\d/', $result)) {
+            $poppassd->disconnect();
+            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result);
+        }
+
+        $poppassd->writeLine("pass ". $curpass);
+        $result = $poppassd->readLine();
+
+        if (!preg_match('/^[23]\d\d/', $result)) {
+            $poppassd->disconnect();
+            return $this->format_error_result(PASSWORD_ERROR, $result);
+        }
+
+        $poppassd->writeLine("newpass ". $passwd);
+        $result = $poppassd->readLine();
+        $poppassd->disconnect();
+
+        if (!preg_match('/^2\d\d/', $result)) {
+            return $this->format_error_result(PASSWORD_ERROR, $result);
+        }
+
+        return PASSWORD_SUCCESS;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/pw_usermod.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * pw_usermod Driver
+ *
+ * Driver that adds functionality to change the systems user password via
+ * the 'pw usermod' command.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 2.0
+ * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
+ * @author Adamson Huang <adomputer@gmail.com>
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_pw_usermod_password
+{
+    public function save($currpass, $newpass)
+    {
+        $username = $_SESSION['username'];
+        $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd');
+        $cmd .= " $username > /dev/null";
+
+        $handle = popen($cmd, "w");
+        fwrite($handle, "$newpass\n");
+
+        if (pclose($handle) == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $cmd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/sasl.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * SASL Password Driver
+ *
+ * Driver that adds functionality to change the users Cyrus/SASL password.
+ * The code is derrived from the Squirrelmail "Change SASL Password" Plugin
+ * by Galen Johnson.
+ *
+ * It only works with saslpasswd2 on the same host where Roundcube runs
+ * and requires shell access and gcc in order to compile the binary.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 2.0
+ * @author Thomas Bruederli
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sasl_password
+{
+    function save($currpass, $newpass)
+    {
+        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
+        $username = escapeshellarg($_SESSION['username']);
+        $args     = rcmail::get_instance()->config->get('password_saslpasswd_args', '');
+
+        if ($fh = popen("$curdir/chgsaslpasswd -p $args $username", 'w')) {
+            fwrite($fh, $newpass."\n");
+            $code = pclose($fh);
+
+            if ($code == 0)
+                return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $curdir/chgsaslpasswd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/smb.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * smb Driver
+ *
+ * Driver that adds functionality to change the systems user password via
+ * the 'smbpasswd' command.
+ *
+ * For installation instructions please read the README file.
+ *
+ * @version 2.0
+ * @author Andy Theuninck <gohanman@gmail.com)
+ *
+ * Based on chpasswd roundcubemail password driver by
+ * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
+ * and smbpasswd horde passwd driver by
+ * @author  Rene Lund Jensen <Rene@lundjensen.net>
+ *
+ * Configuration settings:
+ * password_smb_host    => samba host (default: localhost)
+ * password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd)
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_smb_password
+{
+
+    public function save($currpass, $newpass)
+    {
+        $host     = rcmail::get_instance()->config->get('password_smb_host','localhost');
+        $bin      = rcmail::get_instance()->config->get('password_smb_cmd','/usr/bin/smbpasswd');
+        $username = $_SESSION['username'];
+
+        $host     = rcube_utils::parse_host($host);
+        $tmpfile  = tempnam(sys_get_temp_dir(),'smb');
+        $cmd      = $bin . ' -r ' . $host . ' -s -U "' . $username . '" > ' . $tmpfile . ' 2>&1';
+        $handle   = @popen($cmd, 'w');
+
+        fputs($handle, $currpass."\n");
+        fputs($handle, $newpass."\n");
+        fputs($handle, $newpass."\n");
+        @pclose($handle);
+        $res = file($tmpfile);
+        unlink($tmpfile);
+
+        if (strstr($res[count($res) - 1], 'Password changed for user') !== false) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $cmd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/sql.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,172 @@
+<?php
+
+/**
+ * SQL Password Driver
+ *
+ * Driver for passwords stored in SQL database
+ *
+ * @version 2.0
+ * @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sql_password
+{
+    function save($curpass, $passwd)
+    {
+        $rcmail = rcmail::get_instance();
+
+        if (!($sql = $rcmail->config->get('password_query'))) {
+            $sql = 'SELECT update_passwd(%c, %u)';
+        }
+
+        if ($dsn = $rcmail->config->get('password_db_dsn')) {
+            $db = rcube_db::factory($dsn, '', false);
+            $db->set_debug((bool)$rcmail->config->get('sql_debug'));
+        }
+        else {
+            $db = $rcmail->get_dbh();
+        }
+
+        if ($db->is_error()) {
+            return PASSWORD_ERROR;
+        }
+
+        // new password - default hash method
+        if (strpos($sql, '%P') !== false) {
+            $password = password::hash_password($passwd);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%P',  $db->quote($password), $sql);
+        }
+
+        // old password - default hash method
+        if (strpos($sql, '%O') !== false) {
+            $password = password::hash_password($curpass);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%O',  $db->quote($password), $sql);
+        }
+
+        // crypted password (deprecated, use %P)
+        if (strpos($sql, '%c') !== false) {
+            $password = password::hash_password($passwd, 'crypt', false);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%c',  $db->quote($password), $sql);
+        }
+
+        // dovecotpw (deprecated, use %P)
+        if (strpos($sql, '%D') !== false) {
+            $password = password::hash_password($passwd, 'dovecot', false);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%D', $db->quote($password), $sql);
+        }
+
+        // hashed passwords (deprecated, use %P)
+        if (strpos($sql, '%n') !== false) {
+            $password = password::hash_password($passwd, 'hash', false);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%n', $db->quote($password, 'text'), $sql);
+        }
+
+        // hashed passwords (deprecated, use %P)
+        if (strpos($sql, '%q') !== false) {
+            $password = password::hash_password($curpass, 'hash', false);
+
+            if ($password === false) {
+                return PASSWORD_CRYPT_ERROR;
+            }
+
+            $sql = str_replace('%q', $db->quote($password, 'text'), $sql);
+        }
+
+        // Handle clear text passwords securely (#1487034)
+        $sql_vars = array();
+        if (preg_match_all('/%[p|o]/', $sql, $m)) {
+            foreach ($m[0] as $var) {
+                if ($var == '%p') {
+                    $sql = preg_replace('/%p/', '?', $sql, 1);
+                    $sql_vars[] = (string) $passwd;
+                }
+                else { // %o
+                    $sql = preg_replace('/%o/', '?', $sql, 1);
+                    $sql_vars[] = (string) $curpass;
+                }
+            }
+        }
+
+        $local_part  = $rcmail->user->get_username('local');
+        $domain_part = $rcmail->user->get_username('domain');
+        $username    = $_SESSION['username'];
+        $host        = $_SESSION['imap_host'];
+
+        // convert domains to/from punnycode
+        if ($rcmail->config->get('password_idn_ascii')) {
+            $domain_part = rcube_utils::idn_to_ascii($domain_part);
+            $username    = rcube_utils::idn_to_ascii($username);
+            $host        = rcube_utils::idn_to_ascii($host);
+        }
+        else {
+            $domain_part = rcube_utils::idn_to_utf8($domain_part);
+            $username    = rcube_utils::idn_to_utf8($username);
+            $host        = rcube_utils::idn_to_utf8($host);
+        }
+
+        // at least we should always have the local part
+        $sql = str_replace('%l', $db->quote($local_part, 'text'), $sql);
+        $sql = str_replace('%d', $db->quote($domain_part, 'text'), $sql);
+        $sql = str_replace('%u', $db->quote($username, 'text'), $sql);
+        $sql = str_replace('%h', $db->quote($host, 'text'), $sql);
+
+        $res = $db->query($sql, $sql_vars);
+
+        if (!$db->is_error()) {
+            if (strtolower(substr(trim($sql),0,6)) == 'select') {
+                if ($db->fetch_array($res)) {
+                    return PASSWORD_SUCCESS;
+                }
+            }
+            else {
+                // This is the good case: 1 row updated
+                if ($db->affected_rows($res) == 1)
+                    return PASSWORD_SUCCESS;
+                // @TODO: Some queries don't affect any rows
+                // Should we assume a success if there was no error?
+            }
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/virtualmin.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Virtualmin Password Driver
+ *
+ * Driver that adds functionality to change the users Virtualmin password.
+ * The code is derrived from the Squirrelmail "Change Cyrus/SASL Password" Plugin
+ * by Thomas Bruederli.
+ *
+ * It only works with virtualmin on the same host where Roundcube runs
+ * and requires shell access and gcc in order to compile the binary.
+ *
+ * @version 3.0
+ * @author Martijn de Munnik
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_virtualmin_password
+{
+    function save($currpass, $newpass)
+    {
+        $rcmail   = rcmail::get_instance();
+        $format   = $rcmail->config->get('password_virtualmin_format', 0);
+        $username = $_SESSION['username'];
+
+        switch ($format) {
+        case 1: // username%domain
+            $domain = substr(strrchr($username, "%"), 1);
+            break;
+        case 2: // username.domain (could be bogus)
+            $pieces = explode(".", $username);
+            $domain = $pieces[count($pieces)-2]. "." . end($pieces);
+            break;
+        case 3: // domain.username (could be bogus)
+            $pieces = explode(".", $username);
+            $domain = $pieces[0]. "." . $pieces[1];
+            break;
+        case 4: // username-domain
+            $domain = substr(strrchr($username, "-"), 1);
+            break;
+        case 5: // domain-username
+            $domain = str_replace(strrchr($username, "-"), "", $username);
+            break;
+        case 6: // username_domain
+            $domain = substr(strrchr($username, "_"), 1);
+            break;
+        case 7: // domain_username
+            $pieces = explode("_", $username);
+            $domain = $pieces[0];
+            break;
+        default: // username@domain
+            $domain = substr(strrchr($username, "@"), 1);
+        }
+
+        if (!$domain) {
+            $domain = $rcmail->user->get_username('domain');
+        }
+
+        $username = escapeshellarg($username);
+        $domain   = escapeshellarg($domain);
+        $newpass  = escapeshellarg($newpass);
+        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
+
+        exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue);
+
+        if ($returnvalue == 0) {
+            return PASSWORD_SUCCESS;
+        }
+        else {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd"
+                ), true, false);
+        }
+
+        return PASSWORD_ERROR;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/vpopmaild.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * vpopmail Password Driver
+ *
+ * Driver to change passwords via vpopmaild
+ *
+ * @version 2.0
+ * @author Johannes Hessellund
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_vpopmaild_password
+{
+    function save($curpass, $passwd)
+    {
+        $rcmail    = rcmail::get_instance();
+        $vpopmaild = new Net_Socket();
+        $host      = $rcmail->config->get('password_vpopmaild_host');
+        $port      = $rcmail->config->get('password_vpopmaild_port');
+
+        $result = $vpopmaild->connect($host, $port, null);
+        if (is_a($result, 'PEAR_Error')) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $vpopmaild->setTimeout($rcmail->config->get('password_vpopmaild_timeout'),0);
+
+        $result = $vpopmaild->readLine();
+        if(!preg_match('/^\+OK/', $result)) {
+            $vpopmaild->disconnect();
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        $vpopmaild->writeLine("slogin ". $_SESSION['username'] . " " . $curpass);
+        $result = $vpopmaild->readLine();
+
+        if(!preg_match('/^\+OK/', $result) ) {
+            $vpopmaild->writeLine("quit");
+            $vpopmaild->disconnect();
+            return PASSWORD_ERROR;
+        }
+
+        $vpopmaild->writeLine("mod_user ". $_SESSION['username']);
+        $vpopmaild->writeLine("clear_text_password ". $passwd);
+        $vpopmaild->writeLine(".");
+        $result = $vpopmaild->readLine();
+        $vpopmaild->writeLine("quit");
+        $vpopmaild->disconnect();
+
+        if (!preg_match('/^\+OK/', $result)) {
+            return PASSWORD_ERROR;
+        }
+
+        return PASSWORD_SUCCESS;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/ximss.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Communigate driver for the Password Plugin for Roundcube 
+ *
+ * Tested with Communigate Pro 5.1.2
+ *
+ * Configuration options:
+ *   password_ximss_host - Host name of Communigate server
+ *   password_ximss_port - XIMSS port on Communigate server
+ *
+ * References:
+ *   http://www.communigate.com/WebGuide/XMLAPI.html
+ *
+ * @version 2.0
+ * @author Erik Meitner <erik wanderings.us>
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_ximss_password
+{
+    function save($pass, $newpass)
+    {
+        $rcmail = rcmail::get_instance();
+
+        $host = $rcmail->config->get('password_ximss_host');
+        $port = $rcmail->config->get('password_ximss_port');
+        $sock = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);
+
+        if ($sock === FALSE) {
+            return PASSWORD_CONNECT_ERROR;
+        }
+
+        // send all requests at once(pipelined)
+        fwrite( $sock, '<login id="A001" authData="'.$_SESSION['username'].'" password="'.$pass.'" />'."\0");
+        fwrite( $sock, '<passwordModify id="A002" oldPassword="'.$pass.'" newPassword="'.$newpass.'"  />'."\0");
+        fwrite( $sock, '<bye id="A003" />'."\0");
+
+  //example responses
+  //  <session id="A001" urlID="4815-vN2Txjkggy7gjHRD10jw" userName="user@example.com"/>\0
+  //  <response id="A001"/>\0
+  //  <response id="A002"/>\0
+  //  <response id="A003"/>\0
+  // or an error:
+  //  <response id="A001" errorText="incorrect password or account name" errorNum="515"/>\0
+
+        $responseblob = '';
+        while (!feof($sock)) {
+            $responseblob .= fgets($sock, 1024);
+        }
+
+        fclose($sock);
+
+        foreach (explode( "\0",$responseblob) as $response) {
+            $resp = simplexml_load_string("<xml>".$response."</xml>");
+
+            if( $resp->response[0]['id'] == 'A001' ) {
+                if( isset( $resp->response[0]['errorNum'] ) ) {
+                    return PASSWORD_CONNECT_ERROR;
+                }
+            }
+            else if( $resp->response[0]['id'] == 'A002' ) {
+                if( isset( $resp->response[0]['errorNum'] )) {
+                    return PASSWORD_ERROR;
+                }
+            }
+            else if( $resp->response[0]['id'] == 'A003' ) {
+                if( isset($resp->response[0]['errorNum'] )) {
+                    //There was a problem during logout(This is probably harmless)
+                }
+            }
+        } //foreach
+
+        return PASSWORD_SUCCESS;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/drivers/xmail.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,119 @@
+<?php
+/**
+ * XMail Password Driver
+ *
+ * Driver for XMail password
+ *
+ * @version 2.0
+ * @author Helio Cavichiolo Jr <helio@hcsistemas.com.br>
+ *
+ * Setup xmail_host, xmail_user, xmail_pass and xmail_port into
+ * config.inc.php of password plugin as follows:
+ *
+ * $config['xmail_host'] = 'localhost';
+ * $config['xmail_user'] = 'YourXmailControlUser';
+ * $config['xmail_pass'] = 'YourXmailControlPass';
+ * $config['xmail_port'] = 6017;
+ *
+ * Copyright (C) 2005-2013, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_xmail_password
+{
+    function save($currpass, $newpass)
+    {
+        $rcmail = rcmail::get_instance();
+        list($user,$domain) = explode('@', $_SESSION['username']);
+
+        $xmail = new XMail;
+
+        $xmail->hostname = $rcmail->config->get('xmail_host');
+        $xmail->username = $rcmail->config->get('xmail_user');
+        $xmail->password = $rcmail->config->get('xmail_pass');
+        $xmail->port = $rcmail->config->get('xmail_port');
+
+        if (!$xmail->connect()) {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to connect to mail server"
+            ), true, false);
+            return PASSWORD_CONNECT_ERROR;
+        }
+        else if (!$xmail->send("userpasswd\t".$domain."\t".$user."\t".$newpass."\n")) {
+            $xmail->close();
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to change password"
+            ), true, false);
+            return PASSWORD_ERROR;
+        }
+        else {
+            $xmail->close();
+            return PASSWORD_SUCCESS;
+        }
+    }
+}
+
+class XMail {
+    var $socket;
+    var $hostname = 'localhost';
+    var $username = 'xmail';
+    var $password = '';
+    var $port = 6017;
+
+    function send($msg)
+    {
+        socket_write($this->socket,$msg);
+        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
+            return false;
+        }
+        return true;
+    }
+
+    function connect()
+    {
+        $this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
+        if ($this->socket < 0)
+            return false;
+
+        $result = socket_connect($this->socket, $this->hostname, $this->port);
+        if ($result < 0) {
+            socket_close($this->socket);
+            return false;
+        }
+
+        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
+            socket_close($this->socket);
+            return false;
+        }
+
+        if (!$this->send("$this->username\t$this->password\n")) {
+            socket_close($this->socket);
+            return false;
+        }
+        return true;
+    }
+
+    function close()
+    {
+        $this->send("quit\n");
+        socket_close($this->socket);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/change_ldap_pass.pl	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+=pod
+Script to change the LDAP password using the set_password method
+to proper setting the password policy attributes
+author: Zbigniew Szmyd (zbigniew.szmyd@linseco.pl)
+version 1.0 2016-02-22
+=cut
+
+use Net::LDAP;
+use Net::LDAP::Extension::SetPassword;
+use URI;
+use utf8;
+binmode(STDOUT, ':utf8');
+
+my %PAR = ();
+if (my $param = shift @ARGV){
+    print "Password change in LDAP\n\n";
+    print "Run script without any parameter and pass the following data:\n";
+    print "URI\nbaseDN\nFilter\nbindDN\nbindPW\nLogin\nuserPass\nnewPass\nCAfile\n";
+    exit;
+}
+
+foreach my $param ('uri','base','filter','binddn','bindpw','user','pass','new_pass','ca'){
+    $PAR{$param} = <>;
+    $PAR{$param} =~ s/\r|\n//g;
+}
+
+my @servers = split (/\s+/, $PAR{'uri'});
+my $active_server = 0;
+
+my $ldap;
+while ((my $serwer = shift @servers) && !($active_server)) {
+    my $ldap_uri = URI->new($serwer);
+    if ($ldap_uri->secure) {
+        $ldap = Net::LDAP->new($ldap_uri->as_string,
+            version => 3,
+            verify  => 'require',
+            sslversion => 'tlsv1',
+            cafile  => $PAR{'ca'});
+    } else {
+        $ldap = Net::LDAP->new($ldap_uri->as_string, version => 3);
+    }
+    $active_server = 1 if ($ldap);
+}
+
+if ($active_server) {
+    my $mesg = $ldap->bind($PAR{'binddn'}, password => $PAR{'bindpw'});
+    if ($mesg->code != 0) {
+        print "Cannot login: ". $mesg->error;
+    } else {
+        # Wyszukanie users wg filtra
+        $PAR{'filter'} =~ s/\%login/$PAR{'user'}/;
+        my @search_args = (
+            base => $PAR{'base'},
+            scope  => 'sub',
+            filter => $PAR{'filter'},
+            attrs  => ['1.1'],
+        );
+        my $result = $ldap->search(@search_args);
+        if ($result->code) {
+            print $result->error;
+        } else {
+            my $count = $result->count;
+            if ($count == 1) {
+                my @users = $result->entries;
+                my $dn = $users[0]->dn();
+                $result = $ldap->bind($dn, password => $PAR{'pass'});
+                if ($result->code){
+                    print $result->error;
+                } else {
+                    $result = $ldap->set_password(newpasswd => $PAR{'new_pass'});
+                    if ($result->code) {
+                        print $result->error;
+                    } else {
+                        print "OK";
+                    }
+                }
+            } else {
+                print "User not found in LDAP\n" if $count == 0;
+                print "Found $count users\n";
+            }
+        }
+    }
+    $ldap->unbind();
+} else {
+    print "Cannot connect to any server";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/chgdbmailusers.c	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <unistd.h>
+
+// set the UID this script will run as (root user)
+#define UID 0
+#define CMD "/usr/sbin/dbmail-users"
+
+/* INSTALLING:
+  gcc -o chgdbmailusers chgdbmailusers.c
+  chown root.apache chgdbmailusers
+  strip chgdbmailusers
+  chmod 4550 chgdbmailusers
+*/
+
+main(int argc, char *argv[])
+{
+  int rc, cc;
+
+  cc = setuid(UID);
+  rc = execvp(CMD, argv);
+
+  if ((rc != 0) || (cc != 0))
+  {
+    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
+    return 1;
+  }
+
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/chgsaslpasswd.c	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <unistd.h>
+
+// set the UID this script will run as (cyrus user)
+#define UID 96
+// set the path to saslpasswd or saslpasswd2
+#define CMD "/usr/sbin/saslpasswd2"
+
+/* INSTALLING:
+  gcc -o chgsaslpasswd chgsaslpasswd.c
+  chown cyrus.apache chgsaslpasswd
+  strip chgsaslpasswd
+  chmod 4550 chgsaslpasswd
+*/
+
+main(int argc, char *argv[])
+{
+  int rc,cc;
+
+  cc = setuid(UID);
+  rc = execvp(CMD, argv);
+  if ((rc != 0) || (cc != 0))
+  {
+    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
+    return 1;
+  }
+
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/chgvirtualminpasswd.c	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <unistd.h>
+
+// set the UID this script will run as (root user)
+#define UID 0
+#define CMD "/usr/sbin/virtualmin"
+
+/* INSTALLING:
+  gcc -o chgvirtualminpasswd chgvirtualminpasswd.c
+  chown root.apache chgvirtualminpasswd
+  strip chgvirtualminpasswd
+  chmod 4550 chgvirtualminpasswd
+*/
+
+main(int argc, char *argv[])
+{
+  int rc,cc;
+
+  cc = setuid(UID);
+  rc = execvp(CMD, argv);
+  if ((rc != 0) || (cc != 0))
+  {
+    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
+    return 1;
+  }
+
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/chpass-wrapper.py	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+import sys
+import pwd
+import subprocess
+
+BLACKLIST = (
+    # add blacklisted users here
+    #'user1',
+)
+
+try:
+    username, password = sys.stdin.readline().split(':', 1)
+except ValueError, e:
+    sys.exit('Malformed input')
+
+try:
+    user = pwd.getpwnam(username)
+except KeyError, e:
+    sys.exit('No such user: %s' % username)
+
+if user.pw_uid < 1000:
+    sys.exit('Changing the password for user id < 1000 is forbidden')
+
+if username in BLACKLIST:
+    sys.exit('Changing password for user %s is forbidden (user blacklisted)' %
+             username)
+
+handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE)
+handle.communicate('%s:%s' % (username, password))
+
+sys.exit(handle.returncode)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/dovecot_hmacmd5.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,191 @@
+<?php
+
+/**
+ *
+ * dovecot_hmacmd5.php V1.01
+ *
+ * Generates HMAC-MD5 'contexts' for Dovecot's password files.
+ *
+ * (C) 2008 Hajo Noerenberg
+ *
+ * http://www.noerenberg.de/hajo/pub/dovecot_hmacmd5.php.txt
+ *
+ * Most of the code has been shamelessly stolen from various sources:
+ *
+ * (C) Paul Johnston 1999 - 2000 / http://pajhome.org.uk/crypt/md5/
+ * (C) William K. Cole 2008 / http://www.scconsult.com/bill/crampass.pl
+ * (C) Borfast 2002 / http://www.zend.com/code/codex.php?ozid=962&single=1
+ * (C) Thomas Weber / http://pajhome.org.uk/crypt/md5/contrib/md5.java.txt
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3.0 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.txt>.
+ *
+ */
+
+/* Convert a 32-bit number to a hex string with ls-byte first
+ */
+
+function rhex($n) {
+	$hex_chr = "0123456789abcdef"; $r = '';
+	for($j = 0; $j <= 3; $j++)
+		$r .= $hex_chr[($n >> ($j * 8 + 4)) & 0x0F] . $hex_chr[($n >> ($j * 8)) & 0x0F];
+	return $r;
+}
+
+/* zeroFill() is needed because PHP doesn't have a zero-fill
+ * right shift operator like JavaScript's >>>
+ */
+
+function zeroFill($a, $b) {
+	$z = hexdec(80000000);
+	if ($z & $a) {
+		$a >>= 1;
+		$a &= (~$z);
+		$a |= 0x40000000;
+		$a >>= ($b-1);
+	} else {
+		$a >>= $b;
+	}
+	return $a;
+}
+
+/* Bitwise rotate a 32-bit number to the left
+ */
+
+function bit_rol($num, $cnt) {
+	return ($num << $cnt) | (zeroFill($num, (32 - $cnt)));
+}
+
+/* Add integers, wrapping at 2^32
+ */
+
+function safe_add($x, $y) {
+	return (($x&0x7FFFFFFF) + ($y&0x7FFFFFFF)) ^ ($x&0x80000000) ^ ($y&0x80000000);
+}
+
+/* These functions implement the four basic operations the algorithm uses.
+ */
+
+function md5_cmn($q, $a, $b, $x, $s, $t) {
+	return safe_add(bit_rol(safe_add(safe_add($a, $q), safe_add($x, $t)), $s), $b);
+}
+function md5_ff($a, $b, $c, $d, $x, $s, $t) {
+	return md5_cmn(($b & $c) | ((~$b) & $d), $a, $b, $x, $s, $t);
+}
+function md5_gg($a, $b, $c, $d, $x, $s, $t) {
+	return md5_cmn(($b & $d) | ($c & (~$d)), $a, $b, $x, $s, $t);
+}
+function md5_hh($a, $b, $c, $d, $x, $s, $t) {
+	return md5_cmn($b ^ $c ^ $d, $a, $b, $x, $s, $t);
+}
+function md5_ii($a, $b, $c, $d, $x, $s, $t) {
+	return md5_cmn($c ^ ($b | (~$d)), $a, $b, $x, $s, $t);
+}
+
+/* Calculate the first round of the MD5 algorithm
+ */
+
+function md5_oneround($s, $io) {
+
+	$s = str_pad($s, 64, chr(0x00));
+
+	$x = array_fill(0, 16, 0);
+
+	for($i = 0; $i < 64; $i++)
+		$x[$i >> 2] |= (($io ? 0x36 : 0x5c) ^ ord($s[$i])) << (($i % 4) * 8);
+
+	$a = $olda =  1732584193;
+	$b = $oldb = -271733879;
+	$c = $oldc = -1732584194;
+	$d = $oldd =  271733878;
+
+	$a = md5_ff($a, $b, $c, $d, $x[ 0], 7 , -680876936);
+	$d = md5_ff($d, $a, $b, $c, $x[ 1], 12, -389564586);
+	$c = md5_ff($c, $d, $a, $b, $x[ 2], 17,  606105819);
+	$b = md5_ff($b, $c, $d, $a, $x[ 3], 22, -1044525330);
+	$a = md5_ff($a, $b, $c, $d, $x[ 4], 7 , -176418897);
+	$d = md5_ff($d, $a, $b, $c, $x[ 5], 12,  1200080426);
+	$c = md5_ff($c, $d, $a, $b, $x[ 6], 17, -1473231341);
+	$b = md5_ff($b, $c, $d, $a, $x[ 7], 22, -45705983);
+	$a = md5_ff($a, $b, $c, $d, $x[ 8], 7 ,  1770035416);
+	$d = md5_ff($d, $a, $b, $c, $x[ 9], 12, -1958414417);
+	$c = md5_ff($c, $d, $a, $b, $x[10], 17, -42063);
+	$b = md5_ff($b, $c, $d, $a, $x[11], 22, -1990404162);
+	$a = md5_ff($a, $b, $c, $d, $x[12], 7 ,  1804603682);
+	$d = md5_ff($d, $a, $b, $c, $x[13], 12, -40341101);
+	$c = md5_ff($c, $d, $a, $b, $x[14], 17, -1502002290);
+	$b = md5_ff($b, $c, $d, $a, $x[15], 22,  1236535329);
+
+	$a = md5_gg($a, $b, $c, $d, $x[ 1], 5 , -165796510);
+	$d = md5_gg($d, $a, $b, $c, $x[ 6], 9 , -1069501632);
+	$c = md5_gg($c, $d, $a, $b, $x[11], 14,  643717713);
+	$b = md5_gg($b, $c, $d, $a, $x[ 0], 20, -373897302);
+	$a = md5_gg($a, $b, $c, $d, $x[ 5], 5 , -701558691);
+	$d = md5_gg($d, $a, $b, $c, $x[10], 9 ,  38016083);
+	$c = md5_gg($c, $d, $a, $b, $x[15], 14, -660478335);
+	$b = md5_gg($b, $c, $d, $a, $x[ 4], 20, -405537848);
+	$a = md5_gg($a, $b, $c, $d, $x[ 9], 5 ,  568446438);
+	$d = md5_gg($d, $a, $b, $c, $x[14], 9 , -1019803690);
+	$c = md5_gg($c, $d, $a, $b, $x[ 3], 14, -187363961);
+	$b = md5_gg($b, $c, $d, $a, $x[ 8], 20,  1163531501);
+	$a = md5_gg($a, $b, $c, $d, $x[13], 5 , -1444681467);
+	$d = md5_gg($d, $a, $b, $c, $x[ 2], 9 , -51403784);
+	$c = md5_gg($c, $d, $a, $b, $x[ 7], 14,  1735328473);
+	$b = md5_gg($b, $c, $d, $a, $x[12], 20, -1926607734);
+
+	$a = md5_hh($a, $b, $c, $d, $x[ 5], 4 , -378558);
+	$d = md5_hh($d, $a, $b, $c, $x[ 8], 11, -2022574463);
+	$c = md5_hh($c, $d, $a, $b, $x[11], 16,  1839030562);
+	$b = md5_hh($b, $c, $d, $a, $x[14], 23, -35309556);
+	$a = md5_hh($a, $b, $c, $d, $x[ 1], 4 , -1530992060);
+	$d = md5_hh($d, $a, $b, $c, $x[ 4], 11,  1272893353);
+	$c = md5_hh($c, $d, $a, $b, $x[ 7], 16, -155497632);
+	$b = md5_hh($b, $c, $d, $a, $x[10], 23, -1094730640);
+	$a = md5_hh($a, $b, $c, $d, $x[13], 4 ,  681279174);
+	$d = md5_hh($d, $a, $b, $c, $x[ 0], 11, -358537222);
+	$c = md5_hh($c, $d, $a, $b, $x[ 3], 16, -722521979);
+	$b = md5_hh($b, $c, $d, $a, $x[ 6], 23,  76029189);
+	$a = md5_hh($a, $b, $c, $d, $x[ 9], 4 , -640364487);
+	$d = md5_hh($d, $a, $b, $c, $x[12], 11, -421815835);
+	$c = md5_hh($c, $d, $a, $b, $x[15], 16,  530742520);
+	$b = md5_hh($b, $c, $d, $a, $x[ 2], 23, -995338651);
+
+	$a = md5_ii($a, $b, $c, $d, $x[ 0], 6 , -198630844);
+	$d = md5_ii($d, $a, $b, $c, $x[ 7], 10,  1126891415);
+	$c = md5_ii($c, $d, $a, $b, $x[14], 15, -1416354905);
+	$b = md5_ii($b, $c, $d, $a, $x[ 5], 21, -57434055);
+	$a = md5_ii($a, $b, $c, $d, $x[12], 6 ,  1700485571);
+	$d = md5_ii($d, $a, $b, $c, $x[ 3], 10, -1894986606);
+	$c = md5_ii($c, $d, $a, $b, $x[10], 15, -1051523);
+	$b = md5_ii($b, $c, $d, $a, $x[ 1], 21, -2054922799);
+	$a = md5_ii($a, $b, $c, $d, $x[ 8], 6 ,  1873313359);
+	$d = md5_ii($d, $a, $b, $c, $x[15], 10, -30611744);
+	$c = md5_ii($c, $d, $a, $b, $x[ 6], 15, -1560198380);
+	$b = md5_ii($b, $c, $d, $a, $x[13], 21,  1309151649);
+	$a = md5_ii($a, $b, $c, $d, $x[ 4], 6 , -145523070);
+	$d = md5_ii($d, $a, $b, $c, $x[11], 10, -1120210379);
+	$c = md5_ii($c, $d, $a, $b, $x[ 2], 15,  718787259);
+	$b = md5_ii($b, $c, $d, $a, $x[ 9], 21, -343485551);
+
+	$a = safe_add($a, $olda);
+	$b = safe_add($b, $oldb);
+	$c = safe_add($c, $oldc);
+	$d = safe_add($d, $oldd);
+
+	return rhex($a) . rhex($b) . rhex($c) . rhex($d);
+}
+
+function dovecot_hmacmd5 ($s) {
+	if (strlen($s) > 64) $s=pack("H*", md5($s));
+	return md5_oneround($s, 0) . md5_oneround($s, 1);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/passwd-expect	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,267 @@
+#
+# This scripts changes a password on the local system or a remote host.
+# Connections to the remote (this can also be localhost) are made by ssh, rsh,
+# telnet or rlogin.
+
+# @author  Gaudenz Steinlin <gaudenz@soziologie.ch>
+
+# For sudo support alter sudoers (using visudo) so that it contains the
+# following information (replace 'apache' if your webserver runs under another
+# user):
+# -----
+# # Needed for Horde's passwd module
+# Runas_Alias     REGULARUSERS = ALL, !root
+# apache ALL=(REGULARUSERS) NOPASSWD:/usr/bin/passwd
+# -----
+
+# @stdin              The username, oldpassword, newpassword (in this order)
+#                     will be taken from stdin
+# @param -prompt      regexp for the shell prompt
+# @param -password    regexp password prompt
+# @param -oldpassword regexp for the old password
+# @param -newpassword regexp for the new password
+# @param -verify      regexp for verifying the password
+# @param -success     regexp for success changing the password
+# @param -login       regexp for the telnet prompt for the loginname
+# @param -host        hostname to be connected
+# @param -timeout     timeout for each step
+# @param -log         file for writing error messages
+# @param -output      file for loging the output
+# @param -telnet      use telnet
+# @param -ssh         use ssh (default)
+# @param -rlogin      use rlogin
+# @param -slogin      use slogin
+# @param -sudo        use sudo
+# @param -program     command for changing passwords
+#
+# @return             0 on success, 1 on failure
+#
+
+
+# default values
+set host               "localhost"
+set login              "ssh"
+set program            "passwd"
+set prompt_string      "(%|\\\$|>)"
+set fingerprint_string "The authenticity of host.* can't be established.*\nRSA key fingerprint is.*\nAre you sure you want to continue connecting.*"
+set password_string    "(P|p)assword.*"
+set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*"
+set newpassword_string "(N|n)ew.* (P|p)assword.*"
+set badoldpassword_string "(Authentication token manipulation error).*"
+set badpassword_string "((passwd|BAD PASSWORD).*|(passwd|Bad:).*\r)"
+set verify_string      "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*"
+set success_string     "((P|p)assword.* changed|successfully)"
+set login_string       "(((L|l)ogin|(U|u)sername).*)"
+set timeout            20
+set log                "/tmp/passwd.out"
+set output             false
+set output_file        "/tmp/passwd.log"
+
+# read input from stdin
+fconfigure stdin -blocking 1
+
+gets stdin user
+gets stdin password(old)
+gets stdin password(new)
+
+# alternative: read input from command line
+#if {$argc < 3} {
+#    send_user "Too few arguments: Usage $argv0 username oldpass newpass"
+#    exit 1
+#}
+#set user [lindex $argv 0]
+#set password(old) [lindex $argv 1]
+#set password(new) [lindex $argv 2]
+
+# no output to the user
+log_user 0
+
+# read in other options
+for {set i 0} {$i<$argc} {incr i} {
+    set arg [lindex $argv $i]
+    switch -- $arg "-prompt" {
+        incr i
+        set prompt_string [lindex $argv $i]
+        continue
+    } "-password" {
+        incr i
+        set password_string [lindex $argv $i]
+        continue
+    } "-oldpassword" {
+        incr i
+        set oldpassword_string [lindex $argv $i]
+        continue
+    } "-newpassword" {
+        incr i
+        set newpassword_string [lindex $argv $i]
+        continue
+    } "-verify" {
+        incr i
+        set verify_string [lindex $argv $i]
+        continue
+    } "-success" {
+        incr i
+        set success_string [lindex $argv $i]
+        continue
+    } "-login" {
+        incr i
+        set login_string [lindex $argv $i]
+        continue
+    } "-host" {
+        incr i
+        set host [lindex $argv $i]
+        continue
+    } "-timeout" {
+        incr i
+        set timeout [lindex $argv $i]
+        continue
+    } "-log" {
+        incr i
+        set log [lindex $argv $i]
+        continue
+    } "-output" {
+        incr i
+        set output_file [lindex $argv $i]
+        set output true
+        continue
+    } "-telnet" {
+        set login "telnet"
+        continue
+    } "-ssh" {
+        set login "ssh"
+        continue
+    } "-ssh-exec" {
+        set login "ssh-exec"
+        continue
+    } "-rlogin" {
+        set login "rlogin"
+        continue
+    } "-slogin" {
+        set login "slogin"
+        continue
+    } "-sudo" {
+        set login "sudo"
+        continue
+    } "-program" {
+        incr i
+        set program [lindex $argv $i]
+        continue
+    }
+}
+
+# log session
+if {$output} {
+   log_file $output_file
+}
+
+set err [open $log "w" "0600"]
+
+# start remote session
+if {[string match $login "rlogin"]} {
+   set pid [spawn rlogin $host -l $user]
+} elseif {[string match $login "slogin"]} {
+   set pid [spawn slogin $host -l $user]
+} elseif {[string match $login "ssh"]} {
+   set pid [spawn ssh $host -l $user]
+} elseif {[string match $login "ssh-exec"]} {
+   set pid [spawn ssh $host -l $user $program]
+} elseif {[string match $login "sudo"]} {
+   set pid [spawn sudo -u $user $program]
+} elseif {[string match $login "telnet"]} {
+   set pid [spawn telnet $host]
+   expect -re $login_string {
+     sleep .5
+     send "$user\r"
+   }
+} else {
+   puts $err "Invalid login mode. Valid modes: rlogin, slogin, ssh, telnet, sudo\n"
+   close $err
+   exit 1
+}
+
+set old_password_notentered true
+
+if {![string match $login "sudo"]} {
+  # log in
+  expect {
+    -re $fingerprint_string {sleep .5
+                             send yes\r
+                             exp_continue}
+    -re $password_string    {sleep .5
+                             send $password(old)\r}
+    timeout                 {puts $err "Could not login to system (no password prompt)\n"
+                             close $err
+                             exit 1}
+  }
+
+  # start password changing program
+  expect {
+    -re $prompt_string      {sleep .5
+                             send $program\r}
+    # The following is for when passwd is the login shell or ssh-exec is used
+    -re $oldpassword_string {sleep .5
+                             send $password(old)\r
+                             set old_password_notentered false}
+    timeout                 {puts $err  "Could not login to system (bad old password?)\n"
+                             close $err
+                             exit 1}
+  }
+}
+
+# send old password
+if {$old_password_notentered} {
+  expect {
+    -re $oldpassword_string {sleep .5
+                             send $password(old)\r}
+    timeout                 {puts $err "Could not start passwd program (no old password prompt)\n"
+                             close $err
+                             exit 1}
+  }
+}
+
+# send new password
+expect {
+  -re $newpassword_string {sleep .5
+                           send $password(new)\r}
+  -re $badoldpassword_string {puts $err "Old password is incorrect\n"
+                           close $err
+                           exit 1}
+  timeout                 {puts "Could not change password (bad old password?)\n"
+                           close $err
+                           exit 1}
+}
+
+# send new password again
+expect {
+  -re $badpassword_string {puts $err "$expect_out(0,string)"
+                           close $err
+                           send \003
+                           sleep .5
+                           exit 1}
+  -re $verify_string      {sleep .5
+                           send $password(new)\r}
+  timeout                 {puts $err "New password not valid (too short, bad password, too similar, ...)\n"
+                           close $err
+                           send \003
+                           sleep .5
+                           exit 1}
+}
+
+# check response
+expect {
+  -re $success_string {sleep .5
+                       send exit\r}
+  -re $badpassword_string {puts $err "$expect_out(0,string)"
+                           close $err
+                           exit 1}
+  timeout             {puts $err "Could not change password.\n"
+                       close $err
+                       exit 1}
+}
+
+# exit succsessfully
+expect {
+  eof {close $err
+       exit 0}
+}
+close $err
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'كلمة المرور الحالية:';
+$labels['newpasswd']  = 'كلمة المرور الجديدة:';
+$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة:';
+$messages['nopassword'] = 'من Ùضلك أدخل كلمة المرور الجديدة.';
+$messages['nocurpassword'] = 'من Ùضلك أدخل كلمة المرور الحالية.';
+$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة.';
+$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة حاول مجددا';
+$messages['crypterror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة. وظيÙØ© التشÙير Ù…Ùقودة.';
+$messages['connecterror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة. خطأ بالإتصال.';
+$messages['internalerror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة.';
+$messages['passwordshort'] = 'كلمة المرور يجب على الأقل $length أحرÙ';
+$messages['passwordweak'] = ' كلمة المرور يجب أن تتضمن رقم واحد على الأقل وحر٠ترقيم واحد.';
+$messages['passwordforbidden'] = 'كلمة المرور تحتوى على أحر٠ممنوعة';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'كلمة المرور الحالية';
+$labels['newpasswd']  = 'كلمة المرور الجديدة';
+$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة';
+$messages['nopassword'] = 'من Ùضلك أدخل كلمة مرور جديدة';
+$messages['nocurpassword'] = 'من Ùضلك أدخل كلمة المرور الحالية';
+$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة';
+$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة, أعد المحاولة';
+$messages['crypterror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة. دالة التشÙير Ù…Ùقودة.';
+$messages['connecterror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة. خطأ ÙÙŠ الإتصال';
+$messages['internalerror'] = 'تعذر Ø­Ùظ كلمة المرور الجديدة';
+$messages['passwordshort'] = 'كلمة المرور يجب ان تحتوي على الاقل $length احرÙ.';
+$messages['passwordweak'] = 'كلمة المرور يجب ان تتضمن على الاقل رقم و علامة ترميز.';
+$messages['passwordforbidden'] = 'كلمة المرور تحتوي حروÙاً ممنوعة';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Contraseña actual:';
+$labels['newpasswd']  = 'Contraseña nueva:';
+$labels['confpasswd']  = 'Confirmar contraseña:';
+$messages['nopassword'] = 'Por favor, introduz una contraseña nueva.';
+$messages['nocurpassword'] = 'Por favor, introduz la contraseña actual.';
+$messages['passwordincorrect'] = 'La contraseña actual ye incorreuta.';
+$messages['passwordinconsistency'] = 'Les contraseñes nun concasen. Por favor, inténtalo otra vegada.';
+$messages['crypterror'] = 'Nun pudo guardase la contraseña nueva. Falta la función de cifráu.';
+$messages['connecterror'] = 'Nun pudo guardase la contraseña nueva. Fallu de conexón.';
+$messages['internalerror'] = 'Nun pudo guardase la contraseña nueva. ';
+$messages['passwordshort'] = 'La contraseña tien de tener polo menos $length caráuteres.';
+$messages['passwordweak'] = 'La contraseña tien de tener polo menos un númberu y un signu de puntuación.';
+$messages['passwordforbidden'] = 'La contraseña contien caráuteres prohibíos.';
+$messages['firstloginchange'] = 'Esti ye\'l to primer aniciu sesión. Por favor, camuda la to contraseña.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Hal-hazırki şifrə:';
+$labels['newpasswd']  = 'Yeni ÅŸifrÉ™:';
+$labels['confpasswd']  = 'Yeni şifrə: (təkrar)';
+$messages['nopassword'] = 'Yeni şifrəni daxil edin.';
+$messages['nocurpassword'] = 'Hal-hazırda istifadə etdiyiniz şifrəni daxil edin.';
+$messages['passwordincorrect'] = 'Yalnış şifrə daxil etdiniz.';
+$messages['passwordinconsistency'] = 'Yeni daxil etdiyiniz şifrələr bir-birinə uyğun deyildir.';
+$messages['crypterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Şifrələmə metodu tapılmadı.';
+$messages['connecterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Qoşulma səhvi.';
+$messages['internalerror'] = 'Yeni şifrənin saxlanılması mümkün olmadı.';
+$messages['passwordshort'] = 'Yeni şifrə $length simvoldan uzun olmalıdır.';
+$messages['passwordweak'] = 'Şifrədə heç olmasa minimum bir rəqəm və simvol olmalıdır.';
+$messages['passwordforbidden'] = 'Şifrədə icazə verilməyən simvollar vardır.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'ЗмÑніць пароль';
+$labels['curpasswd']  = 'БÑгучы пароль:';
+$labels['newpasswd']  = 'Ðовы пароль:';
+$labels['confpasswd']  = 'Паўтарыце новы пароль:';
+$messages['nopassword'] = 'УвÑдзіце новы пароль.';
+$messages['nocurpassword'] = 'УвÑдзіце бÑгучы пароль.';
+$messages['passwordincorrect'] = 'ÐÑÑлушны бÑгучы пароль.';
+$messages['passwordinconsistency'] = 'Паролі не Ñупадаюць. ПаÑпрабуйце ÑÑˆÑ‡Ñ Ñ€Ð°Ð·.';
+$messages['crypterror'] = 'Ðе ўдалоÑÑ Ð·Ð°Ñ…Ð°Ð²Ð°Ñ†ÑŒ новы пароль. Бракуе функцыі шыфраваннÑ.';
+$messages['connecterror'] = 'Ðе ўдалоÑÑ Ð·Ð°Ñ…Ð°Ð²Ð°Ñ†ÑŒ новы пароль. Памылка злучÑннÑ.';
+$messages['internalerror'] = 'Ðе ўдалоÑÑ Ð·Ð°Ñ…Ð°Ð²Ð°Ñ†ÑŒ новы пароль.';
+$messages['passwordshort'] = 'Пароль муÑіць быць мінімум $length знакаў.';
+$messages['passwordweak'] = 'Пароль муÑіць утрымліваць мінімум адну лічбу Ñ– адзін знак пунктуацыі.';
+$messages['passwordforbidden'] = 'Пароль утрымлівае Ð·Ð°Ð±Ð°Ñ€Ð¾Ð½ÐµÐ½Ñ‹Ñ Ð·Ð½Ð°ÐºÑ–.';
+$messages['firstloginchange'] = 'ГÑта ваш першы ўваход. ТрÑба змÑніць пароль.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'ПромÑна на парола';
+$labels['curpasswd']  = 'Текуща парола:';
+$labels['newpasswd']  = 'Ðова парола:';
+$labels['confpasswd']  = 'Повторно нова парола:';
+$messages['nopassword'] = 'ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ нова парола.';
+$messages['nocurpassword'] = 'ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ текущата парола.';
+$messages['passwordincorrect'] = 'Ðевалидна текуща парола.';
+$messages['passwordinconsistency'] = 'Паролите не Ñъвпадат, опитайте отново.';
+$messages['crypterror'] = 'Ðевъзможна промÑна на паролата. ЛипÑва PHP Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° криптиране.';
+$messages['connecterror'] = 'Ðевъзможна промÑна на паролата. Грешка при Ñвързване ÑÑŠÑ Ñървър.';
+$messages['internalerror'] = 'Паролата не може да бъде променена.';
+$messages['passwordshort'] = 'Паролата Ñ‚Ñ€Ñбва да е дълга поне $length знака.';
+$messages['passwordweak'] = 'Паролата Ñ‚Ñ€Ñбва да включва поне един цифра и поне един знак за пунктуациÑ.';
+$messages['passwordforbidden'] = 'Паролата Ñъдържа непозволени Ñимволи.';
+$messages['firstloginchange'] = 'Влизате за първи път. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÑ‚Ðµ Вашата парола.';
+$messages['disablednotice'] = 'СиÑтемата е в режим на поддръжка и не е възможна промÑна на паролата. Ð’Ñичко би Ñ‚Ñ€Ñбвало да Ñе нормализира ÑъвÑем Ñкоро. ИзвинÑваме Ñа за причиненото неудобÑтво.';
+$messages['passwinhistory'] = 'Тази парола вече е била използвана.';
+$messages['samepasswd'] = 'Ðовата парола Ñ‚Ñ€Ñбва да е различна от Ñтарата парола.';
+$messages['passwdexpirewarning'] = 'Внимание! Срокът на Вашата парола изтича ÑъвÑем Ñкоро и е препоръчително да Ñ Ñмените преди $expirationdatetime.';
+$messages['passwdexpired'] = 'Срокът на Вашата парола е изтекъл и Ñ‚Ñ€Ñбва да Ñ Ñмените точно Ñега!';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Kemmañ ar ger-tremen';
+$labels['curpasswd']  = 'Ger-tremen bremañ :';
+$labels['newpasswd']  = 'Ger-tremen nevez :';
+$labels['confpasswd']  = 'Kadarnaat ar ger-tremen :';
+$messages['nopassword'] = 'Roit ur ger-tremen nevez, mar plij.';
+$messages['nocurpassword'] = 'Roit ar ger-tremen red, mar plij.';
+$messages['passwordincorrect'] = 'Direizh eo ar ger-tremen red.';
+$messages['passwordinconsistency'] = 'Ar gerioù-tremen ne glotont ket an eil gant eben, roit anezhe en-dro.';
+$messages['crypterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Arc\'hwel enrinegañ o vank.';
+$messages['connecterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Fazi gant ar c\'hennask.';
+$messages['internalerror'] = 'N\'haller ket enrollañ ar ger-tremen nevez.';
+$messages['passwordshort'] = 'Ret eo d\'ar ger-tremen bezañ hiroc\'h eget $length arouezenn.';
+$messages['passwordweak'] = 'En ho ker-tremen e tle bezañ ur sifr hag un arouezenn boentaouiñ da nebeutañ';
+$messages['passwordforbidden'] = 'Arouezennoù difennet zo er ger-tremen.';
+$messages['firstloginchange'] = 'Emaoc\'h o kennaskañ evit ar wezh kentañ. Kemmit ho ker-tremen mar plij.';
+$messages['disablednotice'] = 'War drezalc\'h eo ar reizhiad evit ar mare ha n\'haller ket kemmañ gerioù-tremen. Pep tra a rankfe distreiñ d\'e stad orin a-benn nebeud. Digarezit ac\'hanomp.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Promijeni Å¡ifru';
+$labels['curpasswd']  = 'Trenutna Å¡ifra:';
+$labels['newpasswd']  = 'Nova Å¡ifra:';
+$labels['confpasswd']  = 'Potvrdite novu Å¡ifru:';
+$messages['nopassword'] = 'Molimo vas da upišete novu šifru.';
+$messages['nocurpassword'] = 'Molimo vas da upišete trenutnu šifru.';
+$messages['passwordincorrect'] = 'Trenutna Å¡ifra je netaÄna.';
+$messages['passwordinconsistency'] = 'Šifre se ne podudaraju, molimo vas da pokušate ponovo.';
+$messages['crypterror'] = 'Nije moguće saÄuvati Å¡ifre. Nedostaje funkcija za enkripciju.';
+$messages['connecterror'] = 'Nije moguće saÄuvati Å¡ifre. GreÅ¡ka u povezivanju.';
+$messages['internalerror'] = 'Nije moguće saÄuvati novu Å¡ifru.';
+$messages['passwordshort'] = 'Šifra mora sadržavati barem $length znakova.';
+$messages['passwordweak'] = 'Å ifra mora imati barem jedan broj i jedan interpunkcijski znak.';
+$messages['passwordforbidden'] = 'Šifra sadrži nedozvoljene znakove.';
+$messages['firstloginchange'] = 'Ovo je vaša prva prijava. Molimo vas da promijenite vašu šifru.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Canvia la contrasenya';
+$labels['curpasswd']  = 'Contrasenya actual:';
+$labels['newpasswd']  = 'Nova contrasenya:';
+$labels['confpasswd']  = 'Confirmeu la nova contrasenya:';
+$messages['nopassword'] = 'Si us plau, introduïu la nova contrasenya.';
+$messages['nocurpassword'] = 'Si us plau, introduïu la contrasenya actual.';
+$messages['passwordincorrect'] = 'Contrasenya actual incorrecta.';
+$messages['passwordinconsistency'] = 'La contrasenya nova no coincideix, torneu-ho a provar.';
+$messages['crypterror'] = 'No s\'ha pogut desar la nova contrasenya. No existeix la funció d\'encriptació.';
+$messages['connecterror'] = 'No s\'ha pogut desar la nova contrasenya. Error de connexió.';
+$messages['internalerror'] = 'No s\'ha pogut desar la nova contrasenya.';
+$messages['passwordshort'] = 'La nova contrasenya ha de tenir com a mínim $length caràcters.';
+$messages['passwordweak'] = 'La nova contrasenya ha d\'incloure com a mínim un nombre i un caràcter de puntuació.';
+$messages['passwordforbidden'] = 'La contrasenya conté caràcters no permesos.';
+$messages['firstloginchange'] = 'Aquest és el vostre primer accés. Si us plau, canvieu-vos la contrasenya.';
+$messages['disablednotice'] = 'El sistema és actualment sota manteniment i els canvis de contrasenya no són permesos en aquest moment. En breu tot tornarà a la normalitat. Us demanem disculpes pels inconvenients.';
+$messages['passwinhistory'] = 'Aquesta contrasenya ja es va fer servir anteriorment.';
+$messages['samepasswd'] = 'La nova contrasenya ha de ser diferent de l\'antiga.';
+$messages['passwdexpirewarning'] = 'Compte!, la vostra contrasenya caducarà aviat. Canvieu-la abans de $expirationdatetime.';
+$messages['passwdexpired'] = 'La vostra contrasenya ha caducat, l\'heu de canviar ara!';
+$messages['passwdconstraintviolation'] = 'Violació de restricció de les contrasenyes. La contrasenya és probablement massa feble.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Změna hesla';
+$labels['curpasswd']  = 'Aktuální heslo:';
+$labels['newpasswd']  = 'Nové heslo:';
+$labels['confpasswd']  = 'Nové heslo (pro kontrolu):';
+$messages['nopassword'] = 'Prosím zadejte nové heslo.';
+$messages['nocurpassword'] = 'Prosím zadejte aktuální heslo.';
+$messages['passwordincorrect'] = 'Zadané aktuální heslo není správné.';
+$messages['passwordinconsistency'] = 'Zadaná hesla se neshodují. Prosím zkuste to znovu.';
+$messages['crypterror'] = 'Heslo se nepodařilo uložit. Chybí šifrovací funkce.';
+$messages['connecterror'] = 'Heslo se nepodařilo uložit. Problém s připojením.';
+$messages['internalerror'] = 'Heslo se nepodařilo uložit.';
+$messages['passwordshort'] = 'Heslo musí mít alespoň $length znaků.';
+$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno Äíslo a jedno interpunkÄní znaménko.';
+$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
+$messages['firstloginchange'] = 'Vaše první přihlášení, změňte si prosím heslo.';
+$messages['disablednotice'] = 'Z důvodu údržby systému není momentálně možné změnit heslo. Za chvíli by mělo být vše v pořádku, omlouváme se za tuto nepříjemnost.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Newid cyfrinair';
+$labels['curpasswd']  = 'Cyfrinair Presennol:';
+$labels['newpasswd']  = 'Cyfrinair Newydd:';
+$labels['confpasswd']  = 'Cadarnhau Cyfrinair Newydd:';
+$messages['nopassword'] = 'Rhowch eich cyfrinair newydd.';
+$messages['nocurpassword'] = 'Rhowch eich cyfrinair presennol.';
+$messages['passwordincorrect'] = 'Roedd y cyfrinair presennol yn anghywir.';
+$messages['passwordinconsistency'] = 'Nid yw\'r cyfrineiriau yn cymharu, ceisiwch eto.';
+$messages['crypterror'] = 'Methwyd cadw\'r cyfrinair newydd. Ffwythiant amgodi ar goll.';
+$messages['connecterror'] = 'Methwyd cadw\'r cyfrinair newydd. Gwall cysylltiad.';
+$messages['internalerror'] = 'Methwyd cadw\'r cyfrinair newydd.';
+$messages['passwordshort'] = 'Rhaid i\'r cyfrinair fod o leia $length llythyren o hyd.';
+$messages['passwordweak'] = 'Rhaid i\'r cyfrinair gynnwys o leia un rhif a un cymeriad atalnodi.';
+$messages['passwordforbidden'] = 'Mae\'r cyfrinair yn cynnwys llythrennau wedi gwahardd.';
+$messages['firstloginchange'] = 'Dyma eich mewngofnodiad cynta. Newidiwch eich cyfrinair.';
+$messages['disablednotice'] = 'Mae gwaith cynnal a chadw ar y system ar hyn o bryd a nid yw\'n bosib newid y cyfrinair ar hyn o bryd. Fe ddylai fod popeth nol i\'r arfer yn fuan. Rydym yn ymddiheuro am yr anghyfleustra.';
+$messages['passwinhistory'] = 'Defnyddiwyd y cyfrinair hwn o\'r blaen.';
+$messages['samepasswd'] = 'Rhaid i\'r cyfrinair newydd fod yn wahanol i\'r hen un.';
+$messages['passwdexpirewarning'] = 'Rhybudd! Fe fydd eich cyfrinair yn dod i ben cyn hir, newidiwch e cyn $expirationdatetime.';
+$messages['passwdexpired'] = 'Mae\'ch cyfrinair wedi dod i ben, rhaid i chi ei newid nawr!';
+$messages['passwdconstraintviolation'] = 'Mae hwn yn torri cyfyngiad cyfrinair. Mae\'n bosib fod y cyfrinair yn rhy wan.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Ændre adgangskode ';
+$labels['curpasswd']  = 'Nuværende adgangskode:';
+$labels['newpasswd']  = 'Ny adgangskode:';
+$labels['confpasswd']  = 'Bekræft ny adgangskode:';
+$messages['nopassword'] = 'Indtast venligst en ny adgangskode.';
+$messages['nocurpassword'] = 'Indtast venligst nuværende adgangskode.';
+$messages['passwordincorrect'] = 'Nuværende adgangskode er forkert.';
+$messages['passwordinconsistency'] = 'Adgangskoderne er ikke ens, prøv igen.';
+$messages['crypterror'] = 'Kunne ikke gemme den nye adgangskode. Krypteringsfunktion mangler.';
+$messages['connecterror'] = 'Kunne ikke gemme den nye adgangskode. Fejl ved forbindelsen.';
+$messages['internalerror'] = 'Kunne ikke gemme den nye adgangskode.';
+$messages['passwordshort'] = 'Adgangskoden skal være mindst $length tegn lang.';
+$messages['passwordweak'] = 'Adgangskoden skal indeholde mindst et tal og et tegnsætningstegn (-.,)';
+$messages['passwordforbidden'] = 'Adgangskoden indeholder forbudte tegn.';
+$messages['firstloginchange'] = 'Dette er første gang du logger ind, ændre venligst din adgangskode';
+$messages['disablednotice'] = 'Systemet vedligeholdes i øjeblikket og det er pt. ikke muligt at skifte kodeord. Alt burde være oppe igen om lidt. Vi beklager ulejligheden. ';
+$messages['passwinhistory'] = 'Kodeordet har tidligere været anvendt. ';
+$messages['samepasswd'] = 'Det nye kodeord skal være forskelligt fra det gamle. ';
+$messages['passwdexpirewarning'] = 'Advarsel, Dit kodeord udløber snart. Du skal ændre det før $expirationdatetime.';
+$messages['passwdexpired'] = 'Dit kodeord er udløbet, du skal ændre det nu!';
+$messages['passwdconstraintviolation'] = 'Password er i strid med reglerne. Det er sikkert for svagt.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Passwort ändern';
+$labels['curpasswd']  = 'Aktuelles Passwort';
+$labels['newpasswd']  = 'Neues Passwort';
+$labels['confpasswd']  = 'Passwort Wiederholung';
+$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein';
+$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort an';
+$messages['passwordincorrect'] = 'Das aktuelle Passwort ist nicht korrekt';
+$messages['passwordinconsistency'] = 'Das neue Passwort und dessen Wiederholung stimmen nicht überein';
+$messages['crypterror'] = 'Neues Passwort nicht gespeichert: Verschlüsselungsfunktion fehlt';
+$messages['connecterror'] = 'Neues Passwort nicht gespeichert: Verbindungsfehler';
+$messages['internalerror'] = 'Neues Passwort nicht gespeichert';
+$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
+$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
+$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
+$messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
+$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Der normale Betrieb sollte bald wieder hergestellt sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
+$messages['passwinhistory'] = 'Dieses Passwort wurde bereits einmal verwendet.';
+$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
+$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
+$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, bitte ändern Sie es jetzt!';
+$messages['passwdconstraintviolation'] = 'Passwortrichtlinien nicht erfüllt. Das Passwort ist wahrscheinlich zu schwach.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Passwort ändern';
+$labels['curpasswd']  = 'Aktuelles Passwort:';
+$labels['newpasswd']  = 'Neues Passwort:';
+$labels['confpasswd']  = 'Neues Passwort bestätigen:';
+$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein.';
+$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort ein.';
+$messages['passwordincorrect'] = 'Aktuelles Passwort ist falsch.';
+$messages['passwordinconsistency'] = 'Passwörter stimmen nicht überein, bitte versuchen Sie es erneut.';
+$messages['crypterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verschlüsselungsfunktion fehlt.';
+$messages['connecterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verbindungsfehler.';
+$messages['internalerror'] = 'Neues Passwort konnte nicht gespeichert werden.';
+$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
+$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
+$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
+$messages['firstloginchange'] = 'Das ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
+$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Alles sollte bald wieder normal sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
+$messages['passwinhistory'] = 'Dieses Passwort wurde bereits zu einem früheren Zeitpunkt verwendet.';
+$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
+$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
+$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, ändern Sie es jetzt!';
+$messages['passwdconstraintviolation'] = 'Passwortbeschränkungsverletzung. Passwort wahrscheinlich zu schwach.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Αλλαγή κωδικοÏ';
+$labels['curpasswd']  = 'ΤÏέχων κωδικός Ï€Ïόσβασης:';
+$labels['newpasswd']  = 'Îέος κωδικός Ï€Ïόσβασης:';
+$labels['confpasswd']  = 'Επιβέβαιωση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης:';
+$messages['nopassword'] = 'Εισάγετε ένα νέο κωδικό.';
+$messages['nocurpassword'] = 'Εισάγετε τον Ï„Ïέχοντα κωδικό σας.';
+$messages['passwordincorrect'] = 'Ο Ï„Ïέχων κωδικός είναι λάθος.';
+$messages['passwordinconsistency'] = 'Οι κωδικοί Ï€Ïόσβασης δεν ταιÏιάζουν, Ï€Ïοσπαθήστε ξανά.';
+$messages['crypterror'] = 'Δεν μπόÏεσε να αποθηκευτεί ο νέος κωδικός Ï€Ïόσβασης. Η λειτουÏγία κÏυπτογÏάφησης λείπει.';
+$messages['connecterror'] = 'Δεν μποÏεσε να αποθηκευτεί ο νέος κωδικός Ï€Ïόσβασης. Σφάλμα σÏνδεσης.';
+$messages['internalerror'] = 'Δεν μποÏεσε να αποθηκευτεί ο νέος κωδικός Ï€Ïόσβασης. ';
+$messages['passwordshort'] = 'Ο κωδικός Ï€Ïόσβασης Ï€Ïέπει να είναι τουλάχιστον $length χαÏακτήÏων.';
+$messages['passwordweak'] = 'Ο κωδικός Ï€Ïόσβασης Ï€Ïέπει να πεÏιλαμβάνει τουλάχιστον έναν αÏιθμό και ένα σημείο στίξης. ';
+$messages['passwordforbidden'] = 'Ο κωδικός Ï€Ïόσβασης πεÏιέχει μη επιτÏεπτοÏÏ‚ χαÏακτήÏες. ';
+$messages['firstloginchange'] = 'Αυτή είναι η Ï€Ïώτη σας είσοδος. ΠαÏακαλώ αλλάξτε το συνθηματικό σας.';
+$messages['disablednotice'] = 'Το σÏστημα βÏίσκεται υπό συντήÏηση και η αλλαγή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης δεν είναι δυνατή αυτή τη στιγμή. Τα πάντα θα Ï€Ïέπει να επανέλθουν σε κανονική λειτουÏγία σÏντομα. ΖητοÏμε συγγνώμη για την όποια ταλαιπωÏία.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Current Password:';
+$labels['newpasswd']  = 'New Password:';
+$labels['confpasswd']  = 'Confirm New Password:';
+$messages['nopassword'] = 'Please input new password.';
+$messages['nocurpassword'] = 'Please input current password.';
+$messages['passwordincorrect'] = 'Current password incorrect.';
+$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
+$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
+$messages['connecterror'] = 'Could not save new password. Connection error.';
+$messages['internalerror'] = 'Could not save new password.';
+$messages['passwordshort'] = 'Password must be at least $length characters long.';
+$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
+$messages['passwordforbidden'] = 'Password contains forbidden characters.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Change password';
+$labels['curpasswd']  = 'Current Password:';
+$labels['newpasswd']  = 'New Password:';
+$labels['confpasswd']  = 'Confirm New Password:';
+$messages['nopassword'] = 'Please enter a new password.';
+$messages['nocurpassword'] = 'Please enter the current password.';
+$messages['passwordincorrect'] = 'Current password is incorrect.';
+$messages['passwordinconsistency'] = 'Passwords do not match.  Please try again.';
+$messages['crypterror'] = 'New password could not be saved.  The encryption function is missing.';
+$messages['connecterror'] = 'New password could not be saved.  There is a connection error.';
+$messages['internalerror'] = 'New password could not be saved.';
+$messages['passwordshort'] = 'Password must be at least $length characters long.';
+$messages['passwordweak'] = 'Password must include at least one number and one symbol.';
+$messages['passwordforbidden'] = 'Password contains forbidden characters.';
+$messages['firstloginchange'] = 'This is your first login. Please change your password.';
+$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologise for any inconvenience.';
+$messages['passwinhistory'] = 'This password has already been used previously.';
+$messages['samepasswd'] = 'The new password has to be different from the old one.';
+$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
+$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
+$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+
+$labels = array();
+$labels['changepasswd']  = 'Change password';
+$labels['curpasswd']  = 'Current Password:';
+$labels['newpasswd']  = 'New Password:';
+$labels['confpasswd']  = 'Confirm New Password:';
+
+$messages = array();
+$messages['nopassword'] = 'Please input new password.';
+$messages['nocurpassword'] = 'Please input current password.';
+$messages['passwordincorrect'] = 'Current password incorrect.';
+$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
+$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
+$messages['connecterror'] = 'Could not save new password. Connection error.';
+$messages['internalerror'] = 'Could not save new password.';
+$messages['passwordshort'] = 'Password must be at least $length characters long.';
+$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
+$messages['passwordforbidden'] = 'Password contains forbidden characters.';
+$messages['firstloginchange'] = 'This is your first login. Please change your password.';
+$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologize for any inconvenience.';
+$messages['passwinhistory'] = 'This password has already been used previously.';
+$messages['samepasswd'] = 'New password have to be different from the old one.';
+$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
+$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
+$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Nuna pasvorto:';
+$labels['newpasswd']  = 'Nova pasvorto:';
+$labels['confpasswd']  = 'Konfirmi novan pasvorton:';
+$messages['nopassword'] = 'Bonvole tajpu novan pasvorton.';
+$messages['nocurpassword'] = 'Bonvole tajpu nunan pasvorton.';
+$messages['passwordincorrect'] = 'Nuna pasvorto nekorekta.';
+$messages['passwordinconsistency'] = 'Pasvortoj ne kongruas, bonvole provu denove.';
+$messages['crypterror'] = 'Pasvorto ne konserveblas: funkcio de ĉifrado mankas.';
+$messages['connecterror'] = 'Pasvorto ne konserveblas: eraro de konekto.';
+$messages['internalerror'] = 'Nova pasvorto ne konserveblas.';
+$messages['passwordshort'] = 'Pasvorto longu almenaÅ­ $length signojn.';
+$messages['passwordweak'] = 'La pasvorto enhavu almenaÅ­ unu ciferon kaj unu interpunktan signon.';
+$messages['passwordforbidden'] = 'La pasvorto enhavas malpermesitajn signojn.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Cambiar contraseña';
+$labels['curpasswd']  = 'Contraseña actual: ';
+$labels['newpasswd']  = 'Contraseña nueva:';
+$labels['confpasswd']  = 'Confirmar contraseña nueva:';
+$messages['nopassword'] = 'Por favor, ingresa la nueva contraseña.';
+$messages['nocurpassword'] = 'Por favor, ingresa la contraseña actual.';
+$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
+$messages['passwordinconsistency'] = 'Las contraseñas no concuerdan, por favor intenta nuevamente.';
+$messages['crypterror'] = 'No se puedo guardar la nueva contraseña. No se encuentra la función de encriptación.';
+$messages['connecterror'] = 'No se puedo guardar la nueva contraseña. Error de conexión.';
+$messages['internalerror'] = 'No se puedo guardar la nueva contraseña.';
+$messages['passwordshort'] = 'La contraseña debe tener al menos $length carácteres.';
+$messages['passwordweak'] = 'La contraseña debe incluir por lo menos un número y un signo de puntuación.';
+$messages['passwordforbidden'] = 'La contraseña contiene carácteres ilegales.';
+$messages['firstloginchange'] = 'Esta es la primera vez que ingresas. Por favor cambia tu contraseña.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Cambiar contraseña';
+$labels['curpasswd']  = 'Contraseña Actual:';
+$labels['newpasswd']  = 'Contraseña Nueva:';
+$labels['confpasswd']  = 'Confirmar Contraseña:';
+$messages['nopassword'] = 'Por favor introduce una nueva contraseña.';
+$messages['nocurpassword'] = 'Por favor introduce la contraseña actual.';
+$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
+$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor inténtalo de nuevo.';
+$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
+$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión';
+$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
+$messages['passwordshort'] = 'Tu contraseña debe tener una longitud mínima de $length.';
+$messages['passwordweak'] = 'Tu nueva contraseña debe incluir al menos un número y un signo de puntuación.';
+$messages['passwordforbidden'] = 'La contraseña contiene caracteres inválidos.';
+$messages['firstloginchange'] = 'Este es tu primer inicio de sesión. Por favor, cambia tu contraseña.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Cambiar contraseña';
+$labels['curpasswd']  = 'Contraseña actual:';
+$labels['newpasswd']  = 'Contraseña nueva:';
+$labels['confpasswd']  = 'Confirmar contraseña:';
+$messages['nopassword'] = 'Por favor, introduzca una contraseña nueva.';
+$messages['nocurpassword'] = 'Por favor, introduzca la contraseña actual.';
+$messages['passwordincorrect'] = 'La contraseña actual es incorrecta.';
+$messages['passwordinconsistency'] = 'Las contraseñas no coinciden. Por favor, inténtelo de nuevo.';
+$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
+$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión.';
+$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
+$messages['passwordshort'] = 'La contraseña debe tener al menos $length caracteres.';
+$messages['passwordweak'] = 'La contraseña debe incluir al menos un número y un signo de puntuación.';
+$messages['passwordforbidden'] = 'La contraseña introducida contiene caracteres no permitidos.';
+$messages['firstloginchange'] = 'Este es su primer inicio de sesión. Por favor, cambie su contraseña.';
+$messages['disablednotice'] = 'El sistema actualmente está en mantenimiento y ahora no se puede cambiar la contraseña. Todo debería volver a la normalidad pronto. Disculpa las molestias.';
+$messages['passwinhistory'] = 'Esta contraseña ya se ha usado previamente.';
+$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la antigua.';
+$messages['passwdexpirewarning'] = '¡ Atención! Su nueva contraseña expirará pronto, cámbiela antes de $expirationdatetime.';
+$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Muuda parooli';
+$labels['curpasswd']  = 'Vana parool:';
+$labels['newpasswd']  = 'Uus parool:';
+$labels['confpasswd']  = 'Uus parool uuesti:';
+$messages['nopassword'] = 'Palun sisesta uus parool.';
+$messages['nocurpassword'] = 'Palun sisesta vana parool.';
+$messages['passwordincorrect'] = 'Vana parool on vale.';
+$messages['passwordinconsistency'] = 'Paroolid ei kattu, palun proovi uuesti.';
+$messages['crypterror'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
+$messages['connecterror'] = 'Parooli salvestamine nurjus. Ühenduse tõrge.';
+$messages['internalerror'] = 'Uue parooli andmebaasi salvestamine nurjus.';
+$messages['passwordshort'] = 'Parool peab olema vähemalt $length märki pikk.';
+$messages['passwordweak'] = 'Parool peab sisaldama vähemalt üht numbrit ja märki.';
+$messages['passwordforbidden'] = 'Parool sisaldab keelatud märki.';
+$messages['firstloginchange'] = 'See on sinu esimene sisselogimine, palun muuda oma parooli.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Pasahitza aldatu';
+$labels['curpasswd']  = 'Oraingo pasahitza:';
+$labels['newpasswd']  = 'Pasahitz berria:';
+$labels['confpasswd']  = 'Konfirmatu pasahitz berria:';
+$messages['nopassword'] = 'Sartu pasahitz berria.';
+$messages['nocurpassword'] = 'Sartu oraingo pasahitza.';
+$messages['passwordincorrect'] = 'Oraingo pasahitza ez da zuzena.';
+$messages['passwordinconsistency'] = 'Pasahitz berria ez datoz bat, saiatu berriz.';
+$messages['crypterror'] = 'Ezin izan da pasahitz berria gorde. Ez da enkriptazio funtziorik aurkitu.';
+$messages['connecterror'] = 'Ezin izan da pasahitz berria gorde. Konexio arazoak egon dira.';
+$messages['internalerror'] = 'Ezin izan da pasahitz berria gorde.';
+$messages['passwordshort'] = 'Gutxienez $length karakteretakoa izan behar du pasahitzak.';
+$messages['passwordweak'] = 'Gutxienez zenbaki bat eta puntuazio karaktere bat izan behar du pasahitzak.';
+$messages['passwordforbidden'] = 'Galarazitako karaktereak daude pasahitzean.';
+$messages['firstloginchange'] = 'Zure lehenengo sarrera da. Pasahitza aldatu mesedez.';
+$messages['disablednotice'] = 'Sistema mantentze lanetan dago eta oraintxe bertan ezin da pasahitzik aldatu. Laster denak bere onera itzuli beharko luke. Barkatu eragozpenenak.';
+$messages['passwinhistory'] = 'Pasahitz hori aurretik erabili izan da.';
+$messages['samepasswd'] = 'Pasahitz berria ezin da izan aurrekoaren berdina.';
+$messages['passwdexpirewarning'] = 'Kontuz! Zure pasahitza laster iraungiko da, aldatu $expirationdatetime baino lehen.';
+$messages['passwdexpired'] = 'Zure pasahitza iraungi da, aldatu behar duzu orain!';
+$messages['passwdconstraintviolation'] = 'Pasahitzen murriztapen-bortxaketa. Seguru aski ahulegia da.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'رمز عبور کنونی';
+$labels['newpasswd']  = 'رمز عبور جدید';
+$labels['confpasswd']  = 'تایید رمز عبور جدید';
+$messages['nopassword'] = 'لطÙا رمز عبور جدیدی وارد کنید';
+$messages['nocurpassword'] = 'لطÙا رمز عبور کنونی را وارد کنید';
+$messages['passwordincorrect'] = 'رمز عبور کنونی اشتباه است';
+$messages['passwordinconsistency'] = 'رمزهای عبور با هم مطابقت ندارند، لطÙا دوباره سعی کنید';
+$messages['crypterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. تابع رمزگذاری یاÙت نشد';
+$messages['connecterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. لطÙا دوباره سعی کنید';
+$messages['internalerror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد';
+$messages['passwordshort'] = 'طول رمز عبور می بایست حداقل به طول $length کاراکتر باشد';
+$messages['passwordweak'] = 'رمز عبور می بایست دارای حداقل یک عدد و یک کاراکتر علامت گذاری باشد';
+$messages['passwordforbidden'] = 'رمز عبور شامل کاراکترهای غیر مجاز است';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'تغییر گذرواژه';
+$labels['curpasswd']  = 'گذرواژه Ùعلی:';
+$labels['newpasswd']  = 'گذرواژه جدید:';
+$labels['confpasswd']  = 'تایید گذرواژه جدید:';
+$messages['nopassword'] = 'لطÙا گذرواژه جدید را وارد نمایید.';
+$messages['nocurpassword'] = ' لطÙا گذرواژه Ùعلی را وارد نمایید.';
+$messages['passwordincorrect'] = 'گذرواژه Ùعلی اشتباه است.';
+$messages['passwordinconsistency'] = 'گذرواژه‌ها با هم مطابقت ندارند، دوباره سعی نمایید.';
+$messages['crypterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. نبود تابع رمزگذاری.';
+$messages['connecterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. خطای ارتباط.';
+$messages['internalerror'] = 'گذرواژه جدید نتوانست ذخیره نشد.';
+$messages['passwordshort'] = 'گذرواژه باید حداقل $length کاراکتر طول داشته باشد.';
+$messages['passwordweak'] = 'گذرواژه باید شامل حداقل یک عدد و یک کاراکتر نشانه‌ای باشد.';
+$messages['passwordforbidden'] = 'گذرواژه شامل کاراکترهای غیرمجاز است.';
+$messages['firstloginchange'] = 'این اولین ورود شما است، لطÙا گذرواژه خود را تغییر دهید.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Vaihda salasana';
+$labels['curpasswd']  = 'Nykyinen salasana:';
+$labels['newpasswd']  = 'Uusi salasana:';
+$labels['confpasswd']  = 'Vahvista uusi salasana:';
+$messages['nopassword'] = 'Syötä uusi salasana.';
+$messages['nocurpassword'] = 'Syötä nykyinen salasana.';
+$messages['passwordincorrect'] = 'Nykyinen salasana on väärin.';
+$messages['passwordinconsistency'] = 'Salasanat eivät täsmää, yritä uudelleen.';
+$messages['crypterror'] = 'Uuden salasanan tallennus epäonnistui. Kryptausfunktio puuttuu.';
+$messages['connecterror'] = 'Uuden salasanan tallennus epäonnistui. Yhteysongelma.';
+$messages['internalerror'] = 'Uuden salasanan tallennus epäonnistui.';
+$messages['passwordshort'] = 'Salasanassa täytyy olla vähintään $length merkkiä.';
+$messages['passwordweak'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi välimerkki.';
+$messages['passwordforbidden'] = 'Salasana sisältää virheellisiä merkkejä.';
+$messages['firstloginchange'] = 'Tämä on ensimmäinen kirjautumiskertasi. Vaihda salasanasi.';
+$messages['disablednotice'] = 'Järjestelmä on parhaillaan huoltotilassa, joten salasanaa ei voi vaihtaa juuri nyt. Pahoittelemme aiheutunutta vaivaa. Kaiken pitäisi olla pian käytettävissä normaaliin tapaan.';
+$messages['passwinhistory'] = 'Tämä salasana on jo ollut käytössä aikaisemmin.';
+$messages['samepasswd'] = 'Uuden salasanan pitää olla eri kuin vanha salasana.';
+$messages['passwdexpirewarning'] = 'Varoitus! Salasanasi vanhenee pian, vaihda se ennen $expirationdatetime.';
+$messages['passwdexpired'] = 'Salasanasi on vanhentunut ja se pitää vaihtaa nyt!';
+$messages['passwdconstraintviolation'] = 'Salasanan rajoitevirhe. Salasana on todennäköisesti liian heikko.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Broyt loyniorð';
+$labels['curpasswd']  = 'Nú verandi loyniorð:';
+$labels['newpasswd']  = 'Nýtt loyniorð:';
+$labels['confpasswd']  = 'Endurtak nýggja loyniorð:';
+$messages['nopassword'] = 'Vinarliga skriva inn nýtt loyniorð.';
+$messages['nocurpassword'] = 'Vinarliga skriva inn núverandi loyniorð.';
+$messages['passwordincorrect'] = 'Verandi loyniorð er skeift.';
+$messages['passwordinconsistency'] = 'Loyniorðini eru ikki líka, vinarliga royn aftur.';
+$messages['crypterror'] = 'Kann ikki goyma nýggja loyniorð. Brongling manglar.';
+$messages['connecterror'] = 'Kann ikki goyma nýtt loyniorð. Sambands feilur.';
+$messages['internalerror'] = 'Kundi ikki goyma nýggja loyniorðið.';
+$messages['passwordshort'] = 'Loyniorði má hvørfall verða $length tekin langt.';
+$messages['passwordweak'] = 'Loyniorði má innihalda minst eitt nummar og eitt punktum tekin.';
+$messages['passwordforbidden'] = 'Loyniorð inniheldur ólóglig tekin.';
+$messages['firstloginchange'] = 'Hetta er tín fyrsta innriting. Vinarliga broyt títt loyniorð.';
+$messages['disablednotice'] = 'Skipanin er í verandi stunduni dagførd. Av tí sama, er ikki loyvt at broyta loyniorði í løtuni. Alt skuldi verið aftur til tað vanliga skjótt. Tað muga tygum orsaka. ';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Changer le mot de passe';
+$labels['curpasswd']  = 'Mot de passe actuel :';
+$labels['newpasswd']  = 'Nouveau mot de passe :';
+$labels['confpasswd']  = 'Confirmer le nouveau mot de passe :';
+$messages['nopassword'] = 'Veuillez saisir le nouveau mot de passe.';
+$messages['nocurpassword'] = 'Veuillez saisir le mot de passe actuel.';
+$messages['passwordincorrect'] = 'Le mot de passe actuel est erroné.';
+$messages['passwordinconsistency'] = 'Les mots de passe ne correspondent pas, veuillez ressayer.';
+$messages['crypterror'] = 'Impossible d\'enregistrer le nouveau mot de passe. La fonction de chiffrement est manquante.';
+$messages['connecterror'] = 'Impossible d\'enregistrer le nouveau mot de passe. Erreur de connexion.';
+$messages['internalerror'] = 'Impossible d\'enregistrer le nouveau mot de passe.';
+$messages['passwordshort'] = 'Le mot de passe doit comporter au moins $length caractères.';
+$messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre et un signe de ponctuation.';
+$messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.';
+$messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.';
+$messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour l\'instant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.';
+$messages['passwinhistory'] = 'Ce mot de passe a déjà été utilisé précédemment.';
+$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent de l\'ancien.';
+$messages['passwdexpirewarning'] = 'Avertissement ! Votre mot de passe arrivera prochainement à expiration. Changez-le avant le $expirationdatetime.';
+$messages['passwdexpired'] = 'Votre mot de passe est expiré, vous devez le changer maintenant !';
+$messages['passwdconstraintviolation'] = 'Contrainte non respectée. Le mot de passe est probablement trop faible.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Wachtwurd feroarje';
+$labels['curpasswd']  = 'Aktueel wachtwurd:';
+$labels['newpasswd']  = 'Nij wachtwurd:';
+$labels['confpasswd']  = 'Nij wachtwurd befêstigje:';
+$messages['nopassword'] = 'Fier in nij wachtwurd yn.';
+$messages['nocurpassword'] = 'Fier aktueel wachtwurd yn:';
+$messages['passwordincorrect'] = 'Ferkeard aktueel wachtwurd.';
+$messages['passwordinconsistency'] = 'Wachtwurden komme net oerien, besykje it nochris.';
+$messages['crypterror'] = 'Koe nij wachtwurd net bewarje. Fersifering funksje ûntbrekt.';
+$messages['connecterror'] = 'Koe nij wachtwurd net bewarje. Ferbining flater.';
+$messages['internalerror'] = 'Koe nij wachtwurd net bewarje.';
+$messages['passwordshort'] = 'Wachtwurd moat op syn minst $length tekens lang.';
+$messages['passwordweak'] = 'Wachtwurd moat op syn minst ien nûmer en ien lêstekens karakter befetsje.';
+$messages['passwordforbidden'] = 'Wachtwurd befettet ferbeane tekens.';
+$messages['firstloginchange'] = 'Dit is jo earste oanmelding. Wizigje asjobleaft jo wachtwurd.';
+$messages['disablednotice'] = 'It systeem is op dit stuit ûnder ûnderhâld en wachtwurd feroaring is net mooglik. Alles soe gau werom wêze moatte nei it normale. Sorry foar it ûngemak.';
+$messages['passwinhistory'] = 'Dit wachtwurd is al earder brûkt.';
+$messages['samepasswd'] = 'Nij wachtwurd moat oars wêze as it âlde.';
+$messages['passwdexpirewarning'] = 'Warskôging! Jo wachtwurd sil ynkoarten ferrinne, feroarje it foar $expirationdatetime.';
+$messages['passwdexpired'] = 'Jo wachtwurd is ferrûn, jo moatte it no feroarje!';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Athraigh an focal faire';
+$labels['curpasswd']  = 'An focal faire reatha:';
+$labels['newpasswd']  = 'An focal faire nua:';
+$labels['confpasswd']  = 'Deimhnigh an focal faire nua:';
+$messages['nopassword'] = 'Cuir isteach focal faire nua.';
+$messages['internalerror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce.';
+$messages['passwinhistory'] = 'Baineadh feidhm as an bhfocal faire seo cheana.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Cambiar contrasinal';
+$labels['curpasswd']  = 'Contrasinal actual:';
+$labels['newpasswd']  = 'Contrasinal novo:';
+$labels['confpasswd']  = 'Confirmar contrasinal:';
+$messages['nopassword'] = 'Por favor, introduce un contrasinal novo.';
+$messages['nocurpassword'] = 'Por favor, introduce o contrasinal actual.';
+$messages['passwordincorrect'] = 'O contrasinal actual é incorrecto.';
+$messages['passwordinconsistency'] = 'Os contrasinais non cadran. Por favor, inténtao outra vez.';
+$messages['crypterror'] = 'Non foi posíbel gardar o contrasinal novo. Falta a función de cifrado.';
+$messages['connecterror'] = 'Non foi posíbel gardar o contrasinal novo. Erro de conexión';
+$messages['internalerror'] = 'Non foi posíbel gardar o contrasinal novo.';
+$messages['passwordshort'] = 'O contrasinal debe ter polo menos $length caracteres.';
+$messages['passwordweak'] = 'O contrasinal debe incluir polo menos un número e un signo de puntuación.';
+$messages['passwordforbidden'] = 'O contrasinal contén caracteres non permitidos.';
+$messages['firstloginchange'] = 'É a primeira vez que se conecta. Por favor, troque o seu contrasinal.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'שנה סיסמה';
+$labels['curpasswd']  = 'סיסמה נוכחית:';
+$labels['newpasswd']  = 'סיסמה חדשה:';
+$labels['confpasswd']  = '×ימות הסיסמה החדשה:';
+$messages['nopassword'] = '× × ×œ×”×§×œ×™×“ סיסמה חדשה';
+$messages['nocurpassword'] = '× × ×œ×”×§×™×© הסיסמה הנוכחית';
+$messages['passwordincorrect'] = 'הוקשה סיסמה נוכחית שגויה';
+$messages['passwordinconsistency'] = 'הסיסמ×ות שהוקשו ×ינן תו×מות, × × ×œ× ×¡×•×ª שנית.';
+$messages['crypterror'] = '×œ× × ×©×ž×¨×” הסיסמה החדשה. חסר מנגנון הצפנה.';
+$messages['connecterror'] = '×œ× × ×©×ž×¨×” הסיסמה החדשה. שגי×ת תקשורת.';
+$messages['internalerror'] = '×œ× × ×™×ª×Ÿ לשמור על הסיסמה החדשה.';
+$messages['passwordshort'] = 'הסיסמה צריכה להיות לפחות בעלת $length תווי×';
+$messages['passwordweak'] = 'הסיסמה חייבת לכלול לפחות סיפרה ×חת ולפחות סימן פיסוק ×חד.';
+$messages['passwordforbidden'] = 'הסיסמה מכילה ×ª×•×•×™× ×סורי×.';
+$messages['firstloginchange'] = 'זוהי כניסתך הר×שונה. ×× × ×©× ×” ×ת סיסמתך.';
+$messages['disablednotice'] = '×œ× × ×™×ª×Ÿ לשנות סיסמה כעת ×›×™ המערכת התחזוקה.  המערכת תחזור בקרוב לפעולה רגילה. ×נו ×ž×ª× ×¦×œ×™× ×¢×œ ××™ הנוחות.';
+$messages['passwinhistory'] = 'הסיסמה היתה בשימוש מקוד×';
+$messages['samepasswd'] = 'הסיסמה החדשה צריכה להיות שונה מהישנה';
+$messages['passwdexpirewarning'] = '×זהרה! הסיסמה תפוג בקרוב. יש לשנותה לפני expirationdatetime$.';
+$messages['passwdexpired'] = 'פג תוקפה של הסיסמה. יש לשנותה כעת!';
+$messages['passwdconstraintviolation'] = 'סיסמה ×œ× ×—×•×§×™×ª. כנר××” חלשה מדי.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Promjena zaporke';
+$labels['curpasswd']  = 'Važeća zaporka:';
+$labels['newpasswd']  = 'Nova zaporka:';
+$labels['confpasswd']  = 'Potvrda nove zaporke:';
+$messages['nopassword'] = 'Molimo unesite novu zaporku.';
+$messages['nocurpassword'] = 'Molimo unesite trenutnu zaporku.';
+$messages['passwordincorrect'] = 'Trenutna zaporka je nevažeća.';
+$messages['passwordinconsistency'] = 'Zaporke su razliÄite, pokuÅ¡ajte ponovo.';
+$messages['crypterror'] = 'Nemoguće promijeniti zaporku. Nedostaje enkripcijska funkcija.';
+$messages['connecterror'] = 'Nemoguće promijeniti zaporku. Greška prilikom spajanja.';
+$messages['internalerror'] = 'Nemoguće promijeniti zaporku.';
+$messages['passwordshort'] = 'Zaporka mora sadržavati barem $length znakova.';
+$messages['passwordweak'] = 'Zaporka mora sadržavati barem jednu znamenku i jedan interpunkcijski znak.';
+$messages['passwordforbidden'] = 'Zaporka sadrži nedozvoljene znakove.';
+$messages['firstloginchange'] = 'Ovo je vaša prva prijava u sustav. Molimo promijenite vašu zaporku.';
+$messages['disablednotice'] = 'Sustav je trenutno u fazi održavanja i promjena zaporke trenutno nije moguća. Uskoro bi sve trebalo raditi ispravno. IspriÄavamo se zbog neugodnosti.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Jelszó módosítás';
+$labels['curpasswd']  = 'Jelenlegi jelszó:';
+$labels['newpasswd']  = 'Új jelszó:';
+$labels['confpasswd']  = 'Új jelszó mégegyszer:';
+$messages['nopassword'] = 'Kérjük adja meg az új jelszót.';
+$messages['nocurpassword'] = 'Kérjük adja meg a jelenlegi jelszót.';
+$messages['passwordincorrect'] = 'Érvénytelen a jelenlegi jelszó.';
+$messages['passwordinconsistency'] = 'A beírt jelszavak nem azonosak. Próbálja újra.';
+$messages['crypterror'] = 'Hiba történt a kérés feldolgozása során.';
+$messages['connecterror'] = 'Az új jelszó mentése nem sikerült. Hiba a kapcsolatban';
+$messages['internalerror'] = 'Hiba történt a kérés feldolgozása során.';
+$messages['passwordshort'] = 'A jelszónak legalább $length karakter hosszunak kell lennie.';
+$messages['passwordweak'] = 'A jelszónak mindenképpen kell tartalmaznia egy számot és egy írásjelet.';
+$messages['passwordforbidden'] = 'A jelszó tiltott karaktert is tartalmaz.';
+$messages['firstloginchange'] = 'Ez az első belépésed. Változtass jelszót.';
+$messages['disablednotice'] = 'A rendszer jelenleg karbantartás alatt van és a jelszó módosítás nem lehetséges ebben a pillanatban. Minden visszaáll normálisra hamarosan. A  kellemetlenségért elnézést kérünk.';
+$messages['passwinhistory'] = 'A megadott jelszó volt már használva.';
+$messages['samepasswd'] = 'Az új jelszó nem lehet azonos a régi jelszóval.';
+$messages['passwdexpirewarning'] = 'Figyelem! A jelszavad hamarosan lejár, változtasd meg még $expirationdatetime elött.';
+$messages['passwdexpired'] = 'A jelszavad lejárt, adj meg újat.';
+$messages['passwdconstraintviolation'] = 'Jelszó szabály megsértése. A jelszó valószínűleg túl gyenge.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Õ“Õ¸Õ­Õ¥Õ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨';
+$labels['curpasswd']  = 'Õ†Õ¥Ö€Õ¯Õ¡ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼`';
+$labels['newpasswd']  = 'Õ†Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼`';
+$labels['confpasswd']  = 'Ô¿Ö€Õ¯Õ¶Õ¥Ö„ Õ¶Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨`';
+$messages['nopassword'] = 'Õ†Õ¥Ö€Õ´Õ¸Ö‚ÖÕ¥Ö„ Õ¶Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨Ö‰';
+$messages['nocurpassword'] = 'Õ†Õ¥Ö€Õ´Õ¸Ö‚ÖÕ¥Ö„ Õ¡Õ¼Õ¯Õ¡ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨Ö‰';
+$messages['passwordincorrect'] = 'Ô±Õ¼Õ¯Õ¡ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ½Õ­Õ¡Õ¬ Õ§Ö‰';
+$messages['passwordinconsistency'] = 'Õ†Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö€Õ¨ Õ¹Õ¥Õ¶ Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´, Õ¯Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ¥Ö„Ö‰';
+$messages['crypterror'] = 'Õ†Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ« ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥ÖÖ‰ Ô²Õ¡ÖÕ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´ Õ§ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ£Ö€Õ´Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Ö‰';
+$messages['connecterror'] = 'Õ†Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ« ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥ÖÖ‰ Ô¿Õ¡ÕºÕ« Õ½Õ­Õ¡Õ¬Ö‰';
+$messages['internalerror'] = 'Õ†Õ¸Ö€ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ« ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥ÖÖ‰';
+$messages['passwordshort'] = 'Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö€Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ¥Õ¶ Õ¡Õ¼Õ¶Õ¾Õ¡Õ¦Õ¶ $length Õ¶Õ«Õ· Õ¥Ö€Õ¯Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢Ö‰';
+$messages['passwordweak'] = 'Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö€Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¶ Õ¡Õ¼Õ¶Õ¾Õ¡Õ¦Õ¶ Õ´Õ¥Õ¯ Õ©Õ«Õ¾ Ö‡ Õ´Õ¥Õ¯ Õ¯Õ¥Õ¿Õ¡Õ¤Ö€Õ¡Õ¯Õ¡Õ¶ Õ¶Õ«Õ·Ö‰';
+$messages['passwordforbidden'] = 'Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¡Ö€Õ£Õ¥Õ¬Õ¾Õ¡Õ® Õ¶Õ«Õ·Ö‰';
+$messages['firstloginchange'] = 'ÕÕ¡ Õ±Õ¥Ö€ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ´Õ¸Ö‚Õ¿Ö„Õ¶ Õ§Ö‰ Ô½Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ ÖƒÕ¸Õ­Õ¥Õ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨Ö‰';
+$messages['disablednotice'] = 'Õ†Õ¥Ö€Õ¯Õ¡ ÕºÕ¡Õ°Õ«Õ¶ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¨ Õ£Õ¿Õ¶Õ¾Õ¸Ö‚Õ´ Õ§ Õ¾Õ¥Ö€Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ´Õ¡Õ¶ ÖƒÕ¸Ö‚Õ¬Õ¸Ö‚Õ´, Ö‡ Õ¡ÕµÕ½ ÕºÕ¡Õ°Õ«Õ¶ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ ÖƒÕ¸Õ­Õ¥Õ¬: Ô±Õ´Õ¥Õ¶ Õ«Õ¶Õ¹ Õ·Õ¸Ö‚Õ¿Õ¸Õ¾ Õ¯Õ¾Õ¥Ö€Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¾Õ«: Ô½Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ ÕÕ¥Ö€ Õ¶Õ¥Ö€Õ¸Õ²Õ¡Õ´Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, ÕºÕ¡Õ¿Õ³Õ¡Õ¼Õ¾Õ¡Õ® Õ¡Õ¶Õ°Õ¡Ö€Õ´Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€:';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Cambiar contrasigno';
+$labels['curpasswd']  = 'Contrasigno actual:';
+$labels['newpasswd']  = 'Nove contrasigno:';
+$labels['confpasswd']  = 'Confirmar nove contrasigno:';
+$messages['nopassword'] = 'Entra un nove contrasigno.';
+$messages['nocurpassword'] = 'Entra le contrasigno actual.';
+$messages['passwordincorrect'] = 'Le contrasigno actual es incorrecte.';
+$messages['passwordinconsistency'] = 'Le contrasignos non es identic. Essaya lo de novo.';
+$messages['crypterror'] = 'Impossibile salveguardar le nove contrasigno. Le function de cryptographia manca.';
+$messages['connecterror'] = 'Impossibile salveguardar le nove contrasigno. Error de connexion.';
+$messages['internalerror'] = 'Impossibile salveguardar le nove contrasigno.';
+$messages['passwordshort'] = 'Le contrasigno debe haber al minus $length characteres.';
+$messages['passwordweak'] = 'Le contrasigno debe includer al minus un numero e un character de punctuation.';
+$messages['passwordforbidden'] = 'Le contrasigno contine characteres interdicte.';
+$messages['firstloginchange'] = 'Iste es vostre prime session. Per favor, cambia vostre contrasigno.';
+$messages['disablednotice'] = 'Le systema es sub mantenentia e non es possibile cambiar le contrasigno in iste momento. Le systema retornara al functionamento normal bentosto. Nos offere nostre excusas pro omne inconveniente.';
+$messages['passwinhistory'] = 'Iste contrasigno jam esseva usate previemente.';
+$messages['samepasswd'] = 'Un nove contrasigno debe esser differente del ancian.';
+$messages['passwdexpirewarning'] = 'Attention! Vostre contrasigno expirara proximemente, cambia lo ante $expirationdatetime.';
+$messages['passwdexpired'] = 'Vostre contrasigno ha expirate, vos debe cambiar lo ora!';
+$messages['passwdconstraintviolation'] = 'Le contrasigno non satisface le requisitos. Probabilemente es troppo insecur.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Ubah sandi';
+$labels['curpasswd']  = 'Sandi saat ini:';
+$labels['newpasswd']  = 'Sandi Baru:';
+$labels['confpasswd']  = 'Konfirmasi Sandi Baru:';
+$messages['nopassword'] = 'Masukkan sandi baru.';
+$messages['nocurpassword'] = 'Masukkan sandi saat ini.';
+$messages['passwordincorrect'] = 'Sandi saat ini salah.';
+$messages['passwordinconsistency'] = 'Sandi tidak cocok, harap coba lagi.';
+$messages['crypterror'] = 'Tidak dapat menyimpan sandi baru. Fungsi enkripsi tidak ditemukan.';
+$messages['connecterror'] = 'Tidak dapat menyimpan sandi baru. Koneksi error.';
+$messages['internalerror'] = 'Tidak dapat menyimpan sandi baru.';
+$messages['passwordshort'] = 'Panjang password minimal $length karakter';
+$messages['passwordweak'] = 'Sandi harus menyertakan setidaknya satu angka dan satu tanda baca.';
+$messages['passwordforbidden'] = 'Sandi mengandung karakter terlarang.';
+$messages['firstloginchange'] = 'Ini login pertama Anda. Harap ubah sandi Anda.';
+$messages['disablednotice'] = 'Sistem saat ini sedang dalam pemeliharaan dan perubahan sandi tidak mungkin saat ini. Semua mestinya segera kembali normal. Kami mohon maaf untuk ketidaknyamanan ini.';
+$messages['passwinhistory'] = 'Kata sandi sudah pernah digunakan';
+$messages['samepasswd'] = 'Kata sandi harus berbeda dengan yang sebelumnya';
+$messages['passwdexpirewarning'] = 'Peringatan! Masa kata sandi segera berakhir, ganti sebelum $expirationdatetime.';
+$messages['passwdexpired'] = 'Kata sandi kadaluarsa, harus diganti sekarang.';
+$messages['passwdconstraintviolation'] = 'Kata sandi melanggar aturan. Mungkin kata sandi terlalu lemah.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Breyta lykilorði';
+$labels['curpasswd']  = 'Núverandi lykilorð:';
+$labels['newpasswd']  = 'Nýtt lykilorð:';
+$labels['confpasswd']  = 'Staðfesta nýtt lykilorð:';
+$messages['nopassword'] = 'Settu inn nýtt lykilorð.';
+$messages['nocurpassword'] = 'Settu inn núverandi lykilorð.';
+$messages['passwordincorrect'] = 'Núverandi lykilorð er ekki rétt.';
+$messages['passwordinconsistency'] = 'Lykilorðin samsvara ekki, reyndu aftur.';
+$messages['crypterror'] = 'Gat ekki vistað nýtt lykilorð. Dulritunareiginleika vantar.';
+$messages['connecterror'] = 'Gat ekki vistað nýtt lykilorð. Villa í tengingu.';
+$messages['internalerror'] = 'Gat ekki vistað nýtt lykilorð.';
+$messages['passwordshort'] = 'Lykilorð þarf að vera að minnsta kosti $length stafa langt.';
+$messages['passwordweak'] = 'Lykilorð þarf að innihalda a.m.k. einn tölustaf og eitt greinamerki.';
+$messages['passwordforbidden'] = 'Lykilorð inniheldur óleyfilega stafi.';
+$messages['firstloginchange'] = 'Þetta er í fyrsta skipti sem þú skráir þig inn. Endilega breyttu lykilorðinu þínu.';
+$messages['disablednotice'] = 'Kerfið er í viðhaldsfasa og því er ekki hægt að breyta lykilorðum sem stendur. Allt ætti að vera komið í samt lag innan stundar. Við biðjumst afsökunar á þeim óþægindum sem af þessu geta hlotist.';
+$messages['passwinhistory'] = 'Þetta lykilorð hefur áður verið notað.';
+$messages['samepasswd'] = 'Nýja lykilorðið verður að vera frábrugðið hinu gamla.';
+$messages['passwdexpirewarning'] = 'Aðvörun! Lykilorðið þitt rennur út innan skamms, breyttu því fyrir $expirationdatetime.';
+$messages['passwdexpired'] = 'Lykilorðið þitt er runnið út, þú verður að breyta því núna!';
+$messages['passwdconstraintviolation'] = 'Lykilorðið rakst á skilyrði. Líklega er það of veikt.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Modifica la Password';
+$labels['curpasswd']  = 'Password corrente:';
+$labels['newpasswd']  = 'Nuova password:';
+$labels['confpasswd']  = 'Conferma la nuova Password:';
+$messages['nopassword'] = 'Per favore inserire la nuova password.';
+$messages['nocurpassword'] = 'Per favore inserire la password corrente.';
+$messages['passwordincorrect'] = 'La password corrente non è corretta.';
+$messages['passwordinconsistency'] = 'Le password non coincidono, per favore reinserire.';
+$messages['crypterror'] = 'Impossibile salvare la nuova password. Funzione di crittografia mancante.';
+$messages['connecterror'] = 'Impossibile salvare la nuova password. Errore di connessione.';
+$messages['internalerror'] = 'Impossibile salvare la nuova password.';
+$messages['passwordshort'] = 'La password deve essere lunga almeno $length caratteri.';
+$messages['passwordweak'] = 'La password deve includere almeno una cifra decimale e un carattere di punteggiatura.';
+$messages['passwordforbidden'] = 'La password contiene caratteri proibiti.';
+$messages['firstloginchange'] = 'Questo è il tuo primo accesso. Si prega di cambiare la propria password.';
+$messages['disablednotice'] = 'Il sistema è attualmente in manutenzione e pertanto al momento non è possibile effettuare il cambio della password. Presto tutto tornerà alla normalità. Ci scusiamo per il disagio.';
+$messages['passwinhistory'] = 'Questa password è già stata usata precedentemente';
+$messages['samepasswd'] = 'La nuova password deve essere differente da una usata precedentemente.';
+$messages['passwdexpirewarning'] = 'Attenzione! La tua password scadrà a breve, cambiala prima del $expiretiondatetime.';
+$messages['passwdexpired'] = 'La tua password è scaduta, devi cambiarla adesso.';
+$messages['passwdconstraintviolation'] = 'La password non soddisfa i requisiti di sicurezza.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'パスワードã®å¤‰æ›´';
+$labels['curpasswd']  = 'ç¾åœ¨ã®ãƒ‘スワード:';
+$labels['newpasswd']  = 'æ–°ã—ã„パスワード:';
+$labels['confpasswd']  = 'æ–°ã—ã„パスワード (確èª):';
+$messages['nopassword'] = 'æ–°ã—ã„パスワードを入力ã—ã¦ãã ã•ã„。';
+$messages['nocurpassword'] = 'ç¾åœ¨ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„。';
+$messages['passwordincorrect'] = 'ç¾åœ¨ã®ãƒ‘スワードãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚';
+$messages['passwordinconsistency'] = 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。もã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。';
+$messages['crypterror'] = 'パスワードをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚æš—å·åŒ–関数ãŒã¿ã‚ãŸã‚Šã¾ã›ã‚“。';
+$messages['connecterror'] = 'æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚接続エラーã§ã™ã€‚';
+$messages['internalerror'] = 'æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$messages['passwordshort'] = 'パスワードã¯å°‘ãªãã¨ã‚‚ $length 文字ã®é•·ã•ãŒå¿…è¦ã§ã™ã€‚';
+$messages['passwordweak'] = 'パスワードã¯å°‘ãªãã¨ã‚‚æ•°å­—ã® 1 文字ã¨è¨˜å·ã® 1 文字をå«ã‚“ã§ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。';
+$messages['passwordforbidden'] = 'パスワードã«ç¦æ­¢ã•ã‚ŒãŸæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚';
+$messages['firstloginchange'] = 'ã“ã‚Œã¯åˆã‚ã¦ã®ãƒ­ã‚°ã‚¤ãƒ³ã§ã™ã€‚パスワードを変更ã—ã¦ãã ã•ã„。';
+$messages['disablednotice'] = 'ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ä»Šã¯ä¿å®ˆä¸­ã§ã€ç¾åœ¨ã®ã¨ã“ã‚パスワードã®å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。ã—ã°ã‚‰ãã™ã‚Œã°ã€é€šå¸¸ã®çŠ¶æ…‹ã«å¾©å¸°ã™ã‚‹ã¯ãšã§ã™ã€‚ã”迷惑を掛ã‘ã¦ç”³ã—訳ã‚ã‚Šã¾ã›ã‚“。';
+$messages['passwinhistory'] = 'ã“ã®ãƒ‘スワードã¯ä»¥å‰ã«ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚';
+$messages['samepasswd'] = 'æ–°ã—ã„パスワードã¯ä»¥å‰ã®ã‚‚ã®ã¨ç•°ãªã£ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。';
+$messages['passwdexpirewarning'] = '警告!  パスワードã®æœ‰åŠ¹æœŸé™ãŒã™ãã«åˆ‡ã‚Œã¾ã™ã€$expirationdatetimeよりもå‰ã«å¤‰æ›´ã—ã¦ãã ã•ã„。';
+$messages['passwdexpired'] = 'パスワードã®æœŸé™ãŒåˆ‡ã‚Œã¦ã„ã¾ã™ã€ä»Šã™ã変更ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“!';
+$messages['passwdconstraintviolation'] = 'パスワードã®åˆ¶é™ã«é•åã—ã¾ã—ãŸã€‚ãŠãらãパスワードãŒã®å¼·åº¦ãŒå¼±ã™ãŽã¾ã™ã€‚';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'ពាក្យ​សម្ងាážáŸ‹â€‹áž”ច្ចុប្បន្ន៖';
+$labels['newpasswd']  = 'ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី៖';
+$labels['confpasswd']  = 'បញ្ជាក់​ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី៖';
+$messages['nopassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី។';
+$messages['nocurpassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាážáŸ‹â€‹áž”ច្ចុប្បន្ន​ឲ្យ​បាន​ážáŸ’រូវ។';
+$messages['passwordincorrect'] = 'ពាក្យ​សម្ងាážáŸ‹â€‹áž”ច្ចុប្បន្ន​គឺ​មិន​ážáŸ’រូវ​ឡើយ។';
+$messages['passwordinconsistency'] = 'ពាក្យ​សម្ងាážáŸ‹â€‹áž˜áž·áž“​ážáŸ’រូវ​គ្នា​ទ០សូម​ព្យាយាម​ម្ដង​ទៀážáŸ”';
+$messages['crypterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី​បាន​ទáŸáŸ” បាážáŸ‹â€‹áž˜áž»ážáž„ារ​កូដនីយកម្ម។';
+$messages['connecterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី​បាន​ទáŸáŸ” ការ​ážáž—្ជាប់​មាន​បញ្ហា។';
+$messages['internalerror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី​បាន​ទáŸáŸ”';
+$messages['passwordshort'] = 'ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’រូវ​ážáŸ‚​មាន​យ៉ាង​ážáž·áž… $length ážáž½áŸ”';
+$messages['passwordweak'] = 'ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’រូវ​ážáŸ‚​មាន​បញ្ចូល​យ៉ាង​ហោច​ណាស់​លáŸážâ€‹áž˜áž½áž™â€‹ážáž½ និង​អក្សរ​សញ្ញា​មួយ​ážáž½áŸ”';
+$messages['passwordforbidden'] = 'ពាក្យ​សម្ងាážáŸ‹â€‹áž˜áž¶áž“​អក្សរ​ដែល​ážáŸ’រូវហាម​ឃាážáŸ‹áŸ”';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = '암호 변경';
+$labels['curpasswd']  = '현재 암호:';
+$labels['newpasswd']  = '새로운 암호:';
+$labels['confpasswd']  = '새로운 암호 확ì¸:';
+$messages['nopassword'] = '새로운 암호를 입력하세요.';
+$messages['nocurpassword'] = '현재 사용 ì¤‘ì¸ ì•”í˜¸ë¥¼ 입력하세요.';
+$messages['passwordincorrect'] = '현재 사용 ì¤‘ì¸ ì•”í˜¸ê°€ 올바르지 않습니다.';
+$messages['passwordinconsistency'] = '암호가 ì¼ì¹˜í•˜ì§€ 않습니다. 다시 ì‹œë„해주세요.';
+$messages['crypterror'] = '새로운 암호를 저장할 수 없습니다. 암호화 ê¸°ëŠ¥ì´ ëˆ„ë½ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$messages['connecterror'] = '새로운 암호를 저장할 수 없습니다. 연결 오류입니다.';
+$messages['internalerror'] = '새로운 암호를 저장할 수 없습니다.';
+$messages['passwordshort'] = '암호는 문ìžê°€ $lengthê°œ ì´ìƒì´ì–´ì•¼ 합니다.';
+$messages['passwordweak'] = '암호는 ìˆ«ìž ë° íŠ¹ìˆ˜ë¬¸ìžë¥¼ ê°ê° í•œ ê°œ ì´ìƒ í¬í•¨í•´ì•¼ 합니다.';
+$messages['passwordforbidden'] = '암호가 ê¸ˆì§€ëœ ë¬¸ìžì„ í¬í•¨í•˜ê³  있습니다.';
+$messages['firstloginchange'] = 'ì²˜ìŒ ë¡œê·¸ì¸í•˜ì…¨ìŠµë‹ˆë‹¤. 암호를 변경해주세요.';
+$messages['disablednotice'] = 'ì‹œìŠ¤í…œì´ í˜„ìž¬ 유지보수 중ì´ë©° 암호 ë³€ê²½ì´ ì¼ì‹œì ìœ¼ë¡œ 불가능합니다. 모든 ê²ƒì´ ì¡°ë§Œê°„ ì •ìƒí™” ë  ì˜ˆì •ìž…ë‹ˆë‹¤. ë¶ˆíŽ¸ì„ ë¼ì³ë“œë ¤ 죄송합니다.';
+$messages['passwinhistory'] = 'ì´ ì•”í˜¸ëŠ” ì´ë¯¸ ì´ì „ì— ì‚¬ìš©ë습니다.';
+$messages['samepasswd'] = '새로운 암호는 예전 암호와 달ë¼ì•¼ 합니다.';
+$messages['passwdexpirewarning'] = '경고! 암호가 곧 만료ë©ë‹ˆë‹¤. $expirationdatetime ì´ì „ì— ë³€ê²½í•˜ì‹­ì‹œì˜¤.';
+$messages['passwdexpired'] = '암호가 만료ë습니다. 지금 변경하셔야 합니다!';
+$messages['passwdconstraintviolation'] = '암호 제약 위반. 암호가 취약한 것 ê°™ìŒ.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Şîfreyê biguherîne';
+$labels['curpasswd']  = 'Şîfreya niha:';
+$labels['newpasswd']  = 'Şîfreya nû:';
+$labels['confpasswd']  = 'Şîfreya nû bipejirîne:';
+$messages['nopassword'] = 'Şîfreya nû binivîse.';
+$messages['nocurpassword'] = 'Şîfreya niha binivîse.';
+$messages['passwordincorrect'] = 'Şîfreya niha xelet e.';
+$messages['passwordinconsistency'] = 'Şîfre hevdu nagirin, dîsa biceribîne.';
+$messages['crypterror'] = 'Şîfreya nû nehat tomarkirin. Fonksiyona şîfrekirinê hat jibîrkirin.';
+$messages['connecterror'] = 'Şîfreya nû nehat tomarkirin. Çewtiya girêdanê.';
+$messages['internalerror'] = 'Şîfre nehat tomarkirin.';
+$messages['passwordshort'] = 'Divê şîfre ji $length karakteran kêmtir nebe.';
+$messages['passwordweak'] = 'Divê di şîfreyê de herî kêm hejmarek û karakterekî xalbendiyê hebe.';
+$messages['passwordforbidden'] = 'Şîfre karakterên qedexe dihewîne.';
+$messages['firstloginchange'] = 'Ev têketina te ya yekemîn e. Ji kerema xwe şîfreya xwe biguherîne.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'گۆڕینی تێپەڕەوشە';
+$labels['curpasswd']  = 'تێپەڕەوشەی ئێستا:';
+$labels['newpasswd']  = 'تێپەڕەوشەی نوێ:';
+$labels['confpasswd']  = 'پشتڕاستکردنەوەی تێپەڕەوشەی نوێ:';
+$messages['nopassword'] = 'تکایە تێپەڕەوشەی نوێ بنووسە.';
+$messages['nocurpassword'] = 'تکایە تێپەڕەوشەی ئێستا بنووسە.';
+$messages['passwordincorrect'] = 'تێپەڕەوشەی ئێستا نادروستە.';
+$messages['passwordinconsistency'] = 'تێپەڕەوشەکان هاویەک نین، تکایە دووبارە هەوڵبدەوە.';
+$messages['connecterror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت. هەڵەی پەیوەندیکردن.';
+$messages['internalerror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت.';
+$messages['passwordforbidden'] = 'تێپەڕەوشە نووسەی ڕێپێنەدراوی تێدایە.';
+$messages['firstloginchange'] = 'ئەمە یەکەم چوونەژوورەوەتە. تکایە تێپەڕەوشەکەت بگۆڕە.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Aktuellt Passwuert:';
+$labels['newpasswd']  = 'Neit Passwuert:';
+$labels['confpasswd']  = 'Neit Passwuert bestätegen:';
+$messages['nopassword'] = 'Gëff wann ech gelift en neit Passwuert an.';
+$messages['nocurpassword'] = 'Gëff wann ech gelift dat aktuellt Passwuert an.';
+$messages['passwordincorrect'] = 'Aktuellt Passwuert net korrekt.';
+$messages['passwordinconsistency'] = 'D\'Passwierder passen net, probéier wann ech gelift nach eng Kéier.';
+$messages['crypterror'] = 'Passwuert konnt net gespäichert ginn. Verschlësselungs-Funktioun feelt.';
+$messages['connecterror'] = 'Passwuert konnt net gespäichert ginn. Connectiouns-Feeler.';
+$messages['internalerror'] = 'Neit Passwuert konnt net gespäichert ginn.';
+$messages['passwordshort'] = 'D\'Passwuert muss mindestens $length Zeeche laang sinn.';
+$messages['passwordweak'] = 'D\'Passwuert muss mindestens eng Zuel an ee Sazzeechen enthalen.';
+$messages['passwordforbidden'] = 'D\'Passwuert enthält verbueden Zeechen.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Keisti slaptažodį';
+$labels['curpasswd']  = 'Dabartinis slaptažodis:';
+$labels['newpasswd']  = 'Naujasis slaptažodis:';
+$labels['confpasswd']  = 'Pakartokite naująjį slaptažodį:';
+$messages['nopassword'] = 'Prašom įvesti naująjį slaptažodį.';
+$messages['nocurpassword'] = 'Prašom įvesti dabartinį slaptažodį.';
+$messages['passwordincorrect'] = 'Dabartinis slaptažodis neteisingas.';
+$messages['passwordinconsistency'] = 'Slaptažodžiai nesutapo. Bandykite dar kartą.';
+$messages['crypterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Trūksta šifravimo funkcijos.';
+$messages['connecterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Ryšio klaida.';
+$messages['internalerror'] = 'Nepavyko įrašyti naujojo slaptažodžio.';
+$messages['passwordshort'] = 'Slaptažodis turi būti sudarytas bent iš $length simbolių.';
+$messages['passwordweak'] = 'Slaptažodyje turi būti bent vienas skaitmuo ir vienas skyrybos ženklas.';
+$messages['passwordforbidden'] = 'Slaptažodyje rasta neleistinų simbolių.';
+$messages['firstloginchange'] = 'Tai yra pirmasis jūsų prisijungimas. Prašau, pasikeiskite savo slaptažodį.';
+$messages['disablednotice'] = 'Sistema šiuo metu tvarkoma ir slaptažodžio pakeitimas negalimas. Netrukus viskas turėtų grįžti į įprastą būseną. Atsiprašome dėl nepatogumų.';
+$messages['passwinhistory'] = 'Å is slaptažodis jau buvo naudotas anksÄiau.';
+$messages['samepasswd'] = 'Naujas slaptažodis turi būti kitoks nei senasis.';
+$messages['passwdexpirewarning'] = 'Įspėjimas! Jūsų slaptažodis greitai nustos galioti, pakeiskite jį iki $expirationdatetime.';
+$messages['passwdexpired'] = 'Jūsų slaptažodis nebegalioja, jūs turite pakeisti jį dabar!';
+$messages['passwdconstraintviolation'] = 'Slaptažodžio apribojimų pažeidimas. Tikriausiai, slaptažodis pernelyg silpnas.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Mainīt paroli';
+$labels['curpasswd']  = 'PaÅ¡reizÄ“jÄ parole:';
+$labels['newpasswd']  = 'JaunÄ parole:';
+$labels['confpasswd']  = 'ApstiprinÄt jauno paroli:';
+$messages['nopassword'] = 'LÅ«dzu ievadiet jauno paroli.';
+$messages['nocurpassword'] = 'Lūdzu ievadiet pašreizējo paroli.';
+$messages['passwordincorrect'] = 'PaÅ¡reizÄ“jÄ parole nav pareiza.';
+$messages['passwordinconsistency'] = 'Paroles nesakrīt. Lūdzu, ievadiet vēlreiz.';
+$messages['crypterror'] = 'NevarÄ“ja saglabÄt jauno paroli. TrÅ«kst kriptÄ“Å¡anas funkcijas.';
+$messages['connecterror'] = 'NevarÄ“ja saglabÄt jauno paroli. Savienojuma kļūda.';
+$messages['internalerror'] = 'NevarÄ“ja saglabÄt jauno paroli.';
+$messages['passwordshort'] = 'Jaunajai parolei jÄbÅ«t vismaz $length simbolu garai.';
+$messages['passwordweak'] = 'Jaunajai parolei jÄsatur vismaz viens cipars un speciÄlais simbols.';
+$messages['passwordforbidden'] = 'Parole satur neatļautus simbolus.';
+$messages['firstloginchange'] = 'Jūs autorizējaties pirmo reizi. Lūdzu nomainite savu paroli.';
+$messages['disablednotice'] = 'SistÄ“ma uz doto brÄ«di atrodas apkopes režīmÄ un paroles maiņa nav iespÄ“jama. LÅ«dzu mÄ“giniet vÄ“lÄk. Atvainojamies par sagÄdÄtajÄm neÄ“rtÄ«bÄm.';
+$messages['passwinhistory'] = 'Å Ä« parole agrÄk jau ir tikusi izmantota.';
+$messages['samepasswd'] = 'JaunÄ parole nedrÄ«kst bÅ«t tÄda pati kÄ vecÄ.';
+$messages['passwdexpirewarning'] = 'UZMANĪBU! Jūsu parolei drīz beigsies derīguma termiņš, lūdzu nomainiet to pirms $expirationdatetime.';
+$messages['passwdexpired'] = 'JÅ«su parolei ir beidzies derÄ«guma termiņš un Jums tÄ tagad ir jÄnomaina.';
+$messages['passwdconstraintviolation'] = 'Paroles veidoÅ¡anas nosacÄ«jumu pÄrkÄpums. Parole, iespÄ“jams, pÄrÄk nedroÅ¡a.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Променете лозинка';
+$labels['curpasswd']  = 'Сегашна лозинка';
+$labels['newpasswd']  = 'Ðова лозинка';
+$labels['confpasswd']  = 'Потврдете ја вашата лозинка';
+$messages['nopassword'] = 'Ве молиме внеÑете нова лозинка';
+$messages['nocurpassword'] = 'Ве молиме внеÑете ја вашата Ñегашна лозинка.';
+$messages['passwordincorrect'] = 'Сегашната лозинка е неточна.';
+$messages['passwordinconsistency'] = 'Лозинките не Ñе Ñовпаѓаат, ве молиме обидете Ñе повторно.';
+$messages['crypterror'] = 'Ðовата лозинка не е зачувана. функцијата за енкрипција недоÑтига.';
+$messages['connecterror'] = 'Сегашната лозинка неможе да Ñе зачува. Грешка при поврзувањето. ';
+$messages['internalerror'] = 'Сегашната лозинка неможе да Ñе зачува.';
+$messages['passwordshort'] = 'Лозинката мора да биде минимум $length карактери.';
+$messages['passwordweak'] = 'Лозинката мора да Ñодржи барем една бројка и еден интерпункциÑки знак.';
+$messages['passwordforbidden'] = 'Лозинката Ñодржи забранети карактери.';
+$messages['firstloginchange'] = 'Ова е вашето поÑледно логирање. Ве молиме променете ја вашата лозинка.';
+$messages['disablednotice'] = 'СиÑтемот Ñе ажурира и не е возможна промена на лозинка во моментов. Ве молиме обидете Ñе покаÑно. Се извинуваме за непријатноÑтите. ';
+$messages['passwinhistory'] = 'Лозинката е предходно употребувана.';
+$messages['samepasswd'] = 'Ðовата лозинка мора да биде различна од Ñтарата.';
+$messages['passwdexpirewarning'] = 'Предупредување ! Вашата лозинка наÑкоро иÑтекува, ве молиме изменете ја пред $expirationdatetime.';
+$messages['passwdexpired'] = 'Вашата лозинка е иÑтечена, морате да ја промените ! ';
+$messages['passwdconstraintviolation'] = 'ПаÑвордот е наришен. ПаÑвордот веројатно е Ñлаб';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'രഹസàµà´¯à´µà´¾à´•àµà´•àµ മാറàµà´±àµà´•';
+$labels['curpasswd']  = 'ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† രഹസàµà´¯à´µà´¾à´•àµà´•àµ';
+$labels['newpasswd']  = 'à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ';
+$labels['confpasswd']  = 'à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•àµà´•';
+$messages['nopassword'] = 'ദയവായി à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ നൽകàµà´•';
+$messages['nocurpassword'] = 'ദയവായി ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† രഹസàµà´¯à´µà´¾à´•àµà´•àµ നൽകàµà´•';
+$messages['passwordincorrect'] = 'ഇപàµà´ªàµ‹à´´à´¤àµà´¤àµ† രഹസàµà´¯à´µà´¾à´•àµà´•àµ തെറàµà´±à´¾à´£àµ.';
+$messages['passwordinconsistency'] = 'രഹസàµà´¯à´µà´¾à´•àµà´•àµà´•àµ¾ ചേരàµà´¨àµà´¨à´¿à´²àµà´², ദയവായി വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•';
+$messages['crypterror'] = 'à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ സൂകàµà´·à´¿à´•àµà´•à´¾àµ» സാധിചàµà´šà´¿à´²àµà´². എൻകàµà´°à´¿à´ªàµà´·àµ» à´«à´™àµà´™àµà´·àµ» ലഭàµà´¯à´®à´²àµà´².';
+$messages['connecterror'] = 'à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ സൂകàµà´·à´¿à´•àµà´•à´¾àµ» സാധിചàµà´šà´¿à´²àµà´². ബനàµà´§à´‚ à´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പിഴവàµ.';
+$messages['internalerror'] = 'à´ªàµà´¤à´¿à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµ സൂകàµà´·à´¿à´•àµà´•à´¾àµ» സാധിചàµà´šà´¿à´²àµà´².';
+$messages['passwordshort'] = 'രഹസàµà´¯à´µà´¾à´•àµà´•à´¿à´¨àµàµ à´•àµà´±à´žàµà´žà´¤àµ $length à´…à´•àµà´·à´°à´™àµà´™àµ¾ നീളം വേണം';
+$messages['passwordweak'] = 'രഹസàµà´¯à´µà´¾à´•àµà´•à´¿àµ½ à´•àµà´±à´žàµà´žà´¤àµ ഒരൠസംഖàµà´¯à´¯àµà´‚, ഒരൠപàµà´°à´¤àµà´¯àµ‡à´• à´…à´•àµà´·à´°à´µàµà´‚ വേണം';
+$messages['passwordforbidden'] = 'രഹസàµà´¯à´µà´¾à´•àµà´•à´¿àµ½ à´…à´¨àµà´µà´¦à´¨àµ€à´¯à´®à´²àµà´²à´¾à´¤àµà´¤ à´…à´•àµà´·à´°à´™àµà´™àµ¾ ഉണàµà´Ÿàµ';
+$messages['firstloginchange'] = 'ഇതൠതാങàµà´•à´³àµà´Ÿàµ† ആദàµà´¯à´¤àµà´¤àµ† à´ªàµà´°à´µàµ‡à´¶à´¨à´®à´¾à´£àµ. ദയവായി താങàµà´•à´³àµà´Ÿàµ† രഹസàµà´¯à´µà´¾à´•àµà´•àµ മാറàµà´±àµà´•.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Ðууц үг Ñолих';
+$labels['curpasswd']  = 'Одоогийн нууц үг:';
+$labels['newpasswd']  = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үг:';
+$labels['confpasswd']  = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үгийг батлах';
+$messages['nopassword'] = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үгÑÑ Ð¾Ñ€ÑƒÑƒÐ»Ð½Ð° уу.';
+$messages['nocurpassword'] = 'Одоогийн нууц үгÑÑ Ð¾Ñ€ÑƒÑƒÐ»Ð½Ð° уу.';
+$messages['passwordincorrect'] = 'Одоогийн нууц үг таарахгүй байна.';
+$messages['passwordinconsistency'] = 'Ðууц үгнүүд хоорондоо таарахгүй байна, дахин оролдоно уу.';
+$messages['crypterror'] = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үгийг хадгалж чадÑангүй. ШифрлÑлтийн функц олдоогүй.';
+$messages['connecterror'] = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үгийг хадгалж чадÑангүй. Холболтын алдаа.';
+$messages['internalerror'] = 'Ð¨Ð¸Ð½Ñ Ð½ÑƒÑƒÑ† үгийг хадгалж чадахгүй байна.';
+$messages['passwordshort'] = 'Ðууц үг хамгийн богинодоо $length урттай байх Ñ‘Ñтой.';
+$messages['passwordweak'] = 'Ðууц үг дор хаÑж нÑг тоо ба нÑг цÑг, таÑлал зÑÑ€Ñг Ñ‚ÑмдÑгт агуулах Ñ‘Ñтой.';
+$messages['passwordforbidden'] = 'Ðууц үг зөвшөөрөгдөөгүй Ñ‚ÑмдÑгт агуулж байна.';
+$messages['firstloginchange'] = 'Ð­Ð½Ñ Ð±Ð¾Ð» таны анхны нÑвтрÑлт. Ðууц үгÑÑ Ñолино уу.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Nåværende passord:';
+$labels['newpasswd']  = 'Nytt passord:';
+$labels['confpasswd']  = 'Bekreft nytt passord';
+$messages['nopassword'] = 'Vennligst skriv inn nytt passord';
+$messages['nocurpassword'] = 'Vennligst skriv inn nåværende passord';
+$messages['passwordincorrect'] = 'Nåværende passord er feil.';
+$messages['passwordinconsistency'] = 'Passordene er ikke like, vennligst prøv igjen.';
+$messages['crypterror'] = 'Kunne ikke lagre nytt passord. Krypteringsfunksjonen mangler.';
+$messages['connecterror'] = 'Kunne ikke lagre nytt passord. Tilkoblingsfeil.';
+$messages['internalerror'] = 'Kunne ikke lagre nytt passord';
+$messages['passwordshort'] = 'Passordet må minimum inneholde $length tegn.';
+$messages['passwordweak'] = 'Passordet må inneholde minst ett tall og ett tegnsettingssymbol.';
+$messages['passwordforbidden'] = 'Passordet inneholder forbudte tegn.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Wijzig wachtwoord';
+$labels['curpasswd']  = 'Huidig wachtwoord:';
+$labels['newpasswd']  = 'Nieuw wachtwoord:';
+$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
+$messages['nopassword'] = 'Voeg aub nieuw wachtwoord in.';
+$messages['nocurpassword'] = 'Voeg aub huidig wachtwoord in.';
+$messages['passwordincorrect'] = 'Huidig wachtwoord incorrect.';
+$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer nogmaals.';
+$messages['crypterror'] = 'Nieuw wachtwoord niet bewaard. Encryptie-functie ontbreekt.';
+$messages['connecterror'] = 'Nieuw wachtwoord niet bewaard. Verbindingsfout.';
+$messages['internalerror'] = 'Nieuw wachtwoord niet bewaard.';
+$messages['passwordshort'] = 'Wachtwoord moet ten minste $length tekens lang zijn.';
+$messages['passwordweak'] = 'Wachtwoord moet ten minste één getal en één leesteken bevatten.';
+$messages['passwordforbidden'] = 'Wachtwoord bevat ongeldige tekens.';
+$messages['firstloginchange'] = 'Dit is uw eerste login. Gelieve uw wachtwoord te wijzigen.';
+$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en het wijzigen van een wachtwoord is momenteel niet mogelijk. Alles zou binnenkort terug normaal moeten werken. We verontschuldigen ons voor het ongemak.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Wijzig wachtwoord';
+$labels['curpasswd']  = 'Huidig wachtwoord:';
+$labels['newpasswd']  = 'Nieuw wachtwoord:';
+$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
+$messages['nopassword'] = 'Vul uw nieuwe wachtwoord in.';
+$messages['nocurpassword'] = 'Vul uw huidige wachtwoord in.';
+$messages['passwordincorrect'] = 'Huidig wachtwoord is onjuist.';
+$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer het opnieuw.';
+$messages['crypterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; de server mist een versleutelfunctie.';
+$messages['connecterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; verbindingsfout.';
+$messages['internalerror'] = 'Uw nieuwe wachtwoord kan niet worden opgeslagen.';
+$messages['passwordshort'] = 'Het wachtwoord moet minimaal $length tekens lang zijn.';
+$messages['passwordweak'] = 'Het wachtwoord moet minimaal één cijfer en één leesteken bevatten.';
+$messages['passwordforbidden'] = 'Het wachtwoord bevat tekens die niet toegestaan zijn.';
+$messages['firstloginchange'] = 'Dit is uw eerste aanmelding. Verander uw wachtwoord alstublieft.';
+$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en wachtwoord wijzigen is op dit moment dus niet mogelijk. Alles werkt binnenkort weer naar behoren. Onze excuses voor het ongemak.';
+$messages['passwinhistory'] = 'Dit wachtwoord is al eerder gebruikt.';
+$messages['samepasswd'] = 'Het nieuwe paswoord dient verschillend ten opzichte van de oude te zijn.';
+$messages['passwdexpirewarning'] = 'Waarschuwing! je wachtwoord verloopt binnenkort, Wijzig het voor $vervaldatum.';
+$messages['passwdexpired'] = 'Je wachtwoord is verlopen, je dient het nu te wijzigen!';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Noverande passord:';
+$labels['newpasswd']  = 'Nytt passord:';
+$labels['confpasswd']  = 'Bekreft nytt passord';
+$messages['nopassword'] = 'Venlegast skriv inn nytt passord.';
+$messages['nocurpassword'] = 'Venlegast skriv inn noverande passord.';
+$messages['passwordincorrect'] = 'Noverande passord er feil.';
+$messages['passwordinconsistency'] = 'Passorda er ikkje like, venlegast prøv igjen.';
+$messages['crypterror'] = 'Kunne ikkje lagre nytt passord. Krypteringsfunksjonen manglar.';
+$messages['connecterror'] = 'Kunne ikkje lagre nytt passord. Tilkoblingsfeil.';
+$messages['internalerror'] = 'Kunne ikkje lagre nytt passord.';
+$messages['passwordshort'] = 'Passordet må minimum innehalde $length teikn.';
+$messages['passwordweak'] = 'Passordet må innehalde minst eitt tal og eitt skilleteikn.';
+$messages['passwordforbidden'] = 'Passordet inneheld forbodne teikn.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Zmiana hasła';
+$labels['curpasswd']  = 'Aktualne hasło:';
+$labels['newpasswd']  = 'Nowe hasło:';
+$labels['confpasswd']  = 'Potwierdź hasło:';
+$messages['nopassword'] = 'Wprowadź nowe hasło.';
+$messages['nocurpassword'] = 'Wprowadź aktualne hasło.';
+$messages['passwordincorrect'] = 'Błędne aktualne hasło, spróbuj ponownie.';
+$messages['passwordinconsistency'] = 'Hasła nie pasują, spróbuj ponownie.';
+$messages['crypterror'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
+$messages['connecterror'] = 'Nie udało się zapisać nowego hasła. Błąd połączenia.';
+$messages['internalerror'] = 'Nie udało się zapisać nowego hasła.';
+$messages['passwordshort'] = 'Hasło musi posiadać co najmniej $length znaków.';
+$messages['passwordweak'] = 'Hasło musi zawierać co najmniej jedną cyfrę i znak interpunkcyjny.';
+$messages['passwordforbidden'] = 'Hasło zawiera niedozwolone znaki.';
+$messages['firstloginchange'] = 'To jest twoje pierwsze logowanie. Proszę zmień hasło.';
+$messages['disablednotice'] = 'System jest w trakcie konserwacji i zmiana hasła w tym momencie nie jest możliwa. Wszystko powinno wrócić do normy w niedługim czasie. Przepraszamy za wszelkie niedogodności';
+$messages['passwinhistory'] = 'To hasło było już wcześniej użyte';
+$messages['samepasswd'] = 'Nowe hasło musi być różne od poprzednich.';
+$messages['passwdexpirewarning'] = 'Uwaga! Twoje hasło wkrótce wygaśnie, zmień je przed $expirationdatetime.';
+$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je zmienić.';
+$messages['passwdconstraintviolation'] = 'Naruszenie ograniczeń hasła. Prawdopodobnie jest zbyt słabe.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Alterar a senha';
+$labels['curpasswd']  = 'Senha atual:';
+$labels['newpasswd']  = 'Nova senha:';
+$labels['confpasswd']  = 'Confirmar nova senha:';
+$messages['nopassword'] = 'Por favor, informe a nova senha.';
+$messages['nocurpassword'] = 'Por favor, informe a senha atual.';
+$messages['passwordincorrect'] = 'Senha atual incorreta.';
+$messages['passwordinconsistency'] = 'Senhas não combinam, por favor tente novamente.';
+$messages['crypterror'] = 'Não foi possível gravar a nova senha. Função de criptografia ausente.';
+$messages['connecterror'] = 'Não foi possível gravar a nova senha. Erro de conexão.';
+$messages['internalerror'] = 'Não foi possível gravar a nova senha.';
+$messages['passwordshort'] = 'A senha precisa ter ao menos $length caracteres.';
+$messages['passwordweak'] = 'A senha precisa conter ao menos um número e um caractere de pontuação.';
+$messages['passwordforbidden'] = 'A senha contém caracteres proibidos.';
+$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor altere sua senha.';
+$messages['disablednotice'] = 'O sistema está em manutenção e a senha não pode ser alterada no momento. Tudo voltará ao normal em breve. Pedimos desculpas pelo inconveniente.';
+$messages['passwinhistory'] = 'Esta senha já foi usada antes.';
+$messages['samepasswd'] = 'A nova senha deve ser diferente da antiga.';
+$messages['passwdexpirewarning'] = 'Atenção! Sua senha vai expirar em breve, altere ela antes de $expirationdatetime.';
+$messages['passwdexpired'] = 'Sua senha expirou, você precisa alterá-la agora!';
+$messages['passwdconstraintviolation'] = 'Restrição de senha violada. Senha provavelmente muito fraca.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Alterar palavra-passe';
+$labels['curpasswd']  = 'Palavra-passe actual:';
+$labels['newpasswd']  = 'Nova palavra-passe:';
+$labels['confpasswd']  = 'Confirmar palavra-passe:';
+$messages['nopassword'] = 'Introduza a nova palavra-passe.';
+$messages['nocurpassword'] = 'Introduza a palavra-passe actual.';
+$messages['passwordincorrect'] = 'Palavra-passe actual incorrecta.';
+$messages['passwordinconsistency'] = 'As palavras-passe não combinam, tente novamente.';
+$messages['crypterror'] = 'Não foi possível gravar a nova palavra-passe. Função de criptografia inexistente.';
+$messages['connecterror'] = 'Não foi possível gravar a nova palavra-passe. Erro de ligação.';
+$messages['internalerror'] = 'Não foi possível gravar a nova palavra-passe.';
+$messages['passwordshort'] = 'A palavra-passe deve ter pelo menos $length caracteres';
+$messages['passwordweak'] = 'A palavra-passe deve incluir pelo menos um número e um sinal de pontuação.';
+$messages['passwordforbidden'] = 'A palavra-passe contém caracteres não suportados.';
+$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor, altere a sua palavra-passe.';
+$messages['disablednotice'] = 'O sistema está em manutenção e a alteração da password não é possível neste momento. Tudo deve volta ao normal em breve. Pedimos desculpas por qualquer inconveniente.';
+$messages['passwinhistory'] = 'Esta palavra-passe já foi usada anteriormente.';
+$messages['samepasswd'] = 'A nova palavra-passe tem de ser diferente da antiga.';
+$messages['passwdexpirewarning'] = 'Aviso! A sua palavra-passe irá expirar em breve. Deve alterá-la antes de $expirationdatetime.';
+$messages['passwdexpired'] = 'A sua palavra-passe expirou. Tem de alterá-la agora!';
+$messages['passwdconstraintviolation'] = 'Violação da limitação de palavra-passe. Palavra-passe provavelmente muito fraca.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Schimbă parola';
+$labels['curpasswd']  = 'Parola curentă:';
+$labels['newpasswd']  = 'Parola nouă:';
+$labels['confpasswd']  = 'Confirmare parola nouă:';
+$messages['nopassword'] = 'Te rog să introduci noua parolă.';
+$messages['nocurpassword'] = 'Te rog să introduci parola curentă';
+$messages['passwordincorrect'] = 'Parola curentă este incorectă.';
+$messages['passwordinconsistency'] = 'Parolele nu se potrivesc, te rog să mai încerci';
+$messages['crypterror'] = 'Nu am reușit să salvez noua parolă. Funcția de criptare lipsește.';
+$messages['connecterror'] = 'Nu am reușit să salvez noua parolă. Eroare connexiune.';
+$messages['internalerror'] = 'Nu am reușit să salvez noua parolă.';
+$messages['passwordshort'] = 'Parola trebuie să aibă minim $length caractere.';
+$messages['passwordweak'] = 'Parola trebuie să conțina cel puțin un număr si un semn de punctuație.';
+$messages['passwordforbidden'] = 'Parola conține caractere nepermise.';
+$messages['firstloginchange'] = 'Aceasta este prima autentificare. Te rugăm să schimbi parola.';
+$messages['disablednotice'] = 'Sistemul este în prezent în curs de întreținere, iar schimbarea parolei nu este posibilă în acest moment. Totul ar trebui să revină la normal în curând. Ne cerem scuze pentru orice inconveniență.';
+$messages['passwinhistory'] = 'Această parolă a fost folosită anterior.';
+$messages['samepasswd'] = 'Parola nouă trebuie să fie diferită față de cea veche.';
+$messages['passwdexpirewarning'] = 'Atenție! Parola dvs. va expira în curând, modificați-o înainte de $expirationdatetime.';
+$messages['passwdexpired'] = 'Parola dvs. a expirat, trebuie să o schimbați acum!';
+$messages['passwdconstraintviolation'] = 'Încălcare constrângere parolă. Parola probabil prea slabă.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Изменить пароль';
+$labels['curpasswd']  = 'Текущий пароль:';
+$labels['newpasswd']  = 'Ðовый пароль:';
+$labels['confpasswd']  = 'Подтвердите новый пароль:';
+$messages['nopassword'] = 'ПожалуйÑта, введите новый пароль.';
+$messages['nocurpassword'] = 'ПожалуйÑта, введите текущий пароль.';
+$messages['passwordincorrect'] = 'Текущий пароль неверен.';
+$messages['passwordinconsistency'] = 'Пароли не Ñовпадают, попробуйте ещё раз, пожалуйÑта.';
+$messages['crypterror'] = 'Ðе могу Ñохранить новый пароль. ОтÑутÑтвует криптографичеÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ.';
+$messages['connecterror'] = 'Ðе могу Ñохранить новый пароль. Ошибка ÑоединениÑ.';
+$messages['internalerror'] = 'Ðе могу Ñохранить новый пароль.';
+$messages['passwordshort'] = 'Длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть как минимум $length Ñимволов.';
+$messages['passwordweak'] = 'Пароль должен включать в ÑÐµÐ±Ñ ÐºÐ°Ðº минимум одну цифру и один знак пунктуации.';
+$messages['passwordforbidden'] = 'Пароль Ñодержит недопуÑтимые Ñимволы.';
+$messages['firstloginchange'] = 'Вы выполнили вход впервые. Измените ваш пароль.';
+$messages['disablednotice'] = 'Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑÑ Ð¾Ð±Ñлуживание ÑиÑтемы и изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ возможно в данный момент. Ð’Ñе должно вернутьÑÑ Ð² нормальное ÑоÑтоÑние в ближайшее времÑ. ПриноÑим Ñвои Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° причиненные неудобÑтва.';
+$messages['passwinhistory'] = 'Этот пароль уже иÑпользовалÑÑ Ñ€Ð°Ð½ÐµÐµ.';
+$messages['samepasswd'] = 'Ðовый пароль должен отличатьÑÑ Ð¾Ñ‚ Ñтарого.';
+$messages['passwdexpirewarning'] = 'Внимание! Ваш пароль иÑтекает в ближайшее времÑ, измените его до $expirationdatetime.';
+$messages['passwdexpired'] = 'Срок дейÑÑ‚Ð²Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñтек, вы должны изменить его ÑейчаÑ!';
+$messages['passwdconstraintviolation'] = 'Ðарушение Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ. ВероÑтно, Ñлишком Ñлабый пароль.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Zmeniť heslo';
+$labels['curpasswd']  = 'Aktuálne heslo:';
+$labels['newpasswd']  = 'Nové heslo:';
+$labels['confpasswd']  = 'PotvrÄte nové heslo:';
+$messages['nopassword'] = 'Prosím zadajte nové heslo.';
+$messages['nocurpassword'] = 'Prosím zadajte aktuálne heslo.';
+$messages['passwordincorrect'] = 'Aktuálne heslo je nesprávne.';
+$messages['passwordinconsistency'] = 'Heslá nie sú rovnaké, skúste to znova.';
+$messages['crypterror'] = 'Nové heslo nemožno uložiť. Chýba šifrovacia funkcia.';
+$messages['connecterror'] = 'Nové heslo nemožno uložiť. Chyba spojenia.';
+$messages['internalerror'] = 'Nové heslo nemožno uložiť.';
+$messages['passwordshort'] = 'Heslo musí mať najmenej $length znakov.';
+$messages['passwordweak'] = 'Heslo musí obsahovaÅ¥ aspoň jedno Äíslo a jedno interpunkÄné znamienko.';
+$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
+$messages['firstloginchange'] = 'Prihlásili ste sa po prvýkrát. Prosím zmeňte si prístupové heslo.';
+$messages['disablednotice'] = 'V systéme momentálne prebieha údržba a preto nie je teraz možné zmeniť heslo. Čoskoro by sa však situácia mala vrátiť do normálu. Ospravedlňujeme sa Vám za spôsobené nepríjemnosti.';
+$messages['passwinhistory'] = 'Toto heslo už bolo predtým použité.';
+$messages['samepasswd'] = 'Nové heslo by sa malo odlišovať od pôvodného hesla.';
+$messages['passwdexpirewarning'] = 'Pozor! PlatnosÅ¥ Vášho hesla Äoskoro vyprší, zmeňte ho pred $expirationdatetime.';
+$messages['passwdexpired'] = 'Platnosť Vášho hesla vypršala, teraz ho musíte zmeniť!';
+$messages['passwdconstraintviolation'] = 'Výnimka obmedzenia hesla. Heslo je pravdepodobne príliš ľahké.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Spremenjeno geslo';
+$labels['curpasswd']  = 'ObstojeÄe geslo:';
+$labels['newpasswd']  = 'Novo geslo:';
+$labels['confpasswd']  = 'Potrdi novo geslo:';
+$messages['nopassword'] = 'Vnesite novo geslo.';
+$messages['nocurpassword'] = 'Vnesite obstojeÄe geslo.';
+$messages['passwordincorrect'] = 'ObstojeÄe geslo ni veljavno.';
+$messages['passwordinconsistency'] = 'Gesli se ne ujemata, poskusite znova.';
+$messages['crypterror'] = 'Novega gesla ni bilo mogoÄe shraniti. PriÅ¡lo je do napake pri Å¡ifriranju.';
+$messages['connecterror'] = 'Novega gesla ni bilo mogoÄe shraniti. PriÅ¡lo je do napake v povezavi.';
+$messages['internalerror'] = 'Novega gesla ni bilo mogoÄe shraniti.';
+$messages['passwordshort'] = 'Geslo mora vsebovati vsaj $length znakov';
+$messages['passwordweak'] = 'Geslo mora vkljuÄevati vsaj eno Å¡tevilko in loÄilo.';
+$messages['passwordforbidden'] = 'Geslo vsebuje neveljavne znake.';
+$messages['firstloginchange'] = 'To je vaÅ¡a prva prijava. Spremenite zaÄetno geslo.';
+$messages['disablednotice'] = 'Sistem se trenutno posodablja, zato sprememba gesla v tem trenutku ni mogoÄa. Postopek bo mogoÄe opraviti v kratkem. Za nevÅ¡eÄnosti se opraviÄujemo.';
+$messages['passwinhistory'] = 'To geslo ste v preteklosti že uporabili.';
+$messages['samepasswd'] = 'Novo geslo se mora razlikovati od prejšnjega.';
+$messages['passwdexpirewarning'] = 'Opozorilo! Vaše geslo bo kmalu poteklo, spremenite ga pred $expirationdatetime.';
+$messages['passwdexpired'] = 'Vaše geslo je poteklo, spremenite ga!';
+$messages['passwdconstraintviolation'] = 'Geslo ne ustreza zahtevam. Verjetno je prešibko.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Ndrysho fjalëkalimin';
+$labels['curpasswd']  = 'Fjalëkalimi i Tanishëm';
+$labels['newpasswd']  = 'Fjalëkalimi i Ri:';
+$labels['confpasswd']  = 'Konfirmoni fjalëkalimin e ri:';
+$messages['nopassword'] = 'Ju lutemi, futni fjalëkalimin e ri.';
+$messages['nocurpassword'] = 'Ju lutemi, futni fjalëkalimin e tanishëm.';
+$messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm është i pasaktë.';
+$messages['passwordinconsistency'] = 'Fjalëkalimet nuk përputhen, ju lutemi, riprovoni.';
+$messages['crypterror'] = 'S’u ruajt dot fjalëkalimi i ri. Mungon funksioni i Fshehtëzimit.';
+$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjeje.';
+$messages['internalerror'] = 'S’u ruajt dot fjalëkalimi i ri.';
+$messages['passwordshort'] = 'Fjalëkalimi duhet të jetë të paktën $length shenja i gjatë.';
+$messages['passwordweak'] = 'Fjalëkalimi duhet të përmbajë të paktën një numër dhe një shenjë pikësimi.';
+$messages['passwordforbidden'] = 'Fjalëkalimi përmban shenja të ndaluara.';
+$messages['firstloginchange'] = 'Kjo është hyrja juaj e parë. Ju lutemi, ndryshoni fjalëkalimin tuaj.';
+$messages['disablednotice'] = 'Sistemi është hëpërhë nën gjendje punimesh mirëmbajtjeje dhe ndryshimi i fjalëkalimit s’është i mundur në këtë çast. Gjithçka do të duhej të ish kthyer në gjendje normale shumë shpejt. Kërkojmë ndjesë për çfarëdo siklet.';
+$messages['passwinhistory'] = 'Ky fjalëkalim është përdorur një herë më parë.';
+$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.';
+$messages['passwdexpirewarning'] = 'Kujdes! Fjalëkalimi juaj do të skadojë së shpejti, ndryshojeni para $expirationdatetime.';
+$messages['passwdexpired'] = 'Fjalëkalimi juaj ka skaduar, lypset ta ndryshoni tani!';
+$messages['passwdconstraintviolation'] = 'Cenim kufizimi fjalëkalimi. Mundet fjalëkalim shumë i dobët.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Измени лозинку';
+$labels['curpasswd']  = 'Тренутна лозинка:';
+$labels['newpasswd']  = 'Ðова лозинка:';
+$labels['confpasswd']  = 'Потврдите нову лозинку:';
+$messages['nopassword'] = 'УнеÑите нову лозинку.';
+$messages['nocurpassword'] = 'УнеÑите тренутну лозинку.';
+$messages['passwordincorrect'] = 'Тренутна лозинка је нетачна.';
+$messages['passwordinconsistency'] = 'Лозинке Ñе не поклапају. Покушајте поново.';
+$messages['crypterror'] = 'Ðије могуће Ñачувати нову лозинку. ÐедоÑтаје функција за шифровање.';
+$messages['connecterror'] = 'Ðије могуће Ñачувати нову лозинку. Грешка везе.';
+$messages['internalerror'] = 'Ðије могуће Ñачувати нову лозинку.';
+$messages['passwordshort'] = 'Лозинка мора имати најмање $lenght знакова.';
+$messages['passwordweak'] = 'Лозинка мора да Ñадржи најмање један број и један знак интерпункције.';
+$messages['passwordforbidden'] = 'Лозинка Ñадржи недозвољене знакове.';
+$messages['firstloginchange'] = 'Ово је ваше прво пријављивање. Измените лозинку.';
+$messages['disablednotice'] = 'СиÑтем је тренутно у фази ремонта и измена лозинке за Ñада није могућа. Све ће Ñе уÑкоро вратити у нормалу. Извињавамо Ñе због неугодноÑти.';
+$messages['passwinhistory'] = 'Лозинка је раније већ коришћена.';
+$messages['samepasswd'] = 'Ðова лозинка Ñе мора разликовати од Ñтаре.';
+$messages['passwdexpirewarning'] = 'Упозорење! Ваша лозинка иÑтиче уÑкоро. Промените је до $expirationdatetime.';
+$messages['passwdexpired'] = 'Ваша лозинка је иÑтекла. Морате је изменити одмах!';
+$messages['passwdconstraintviolation'] = 'Лозинка не иÑпуњава Ñмернице. Вероватно је превише Ñлаба.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Ändra lösenord';
+$labels['curpasswd']  = 'Nuvarande lösenord';
+$labels['newpasswd']  = 'Nytt lösenord';
+$labels['confpasswd']  = 'Bekräfta nytt lösenord';
+$messages['nopassword'] = 'Ange nytt lösenord.';
+$messages['nocurpassword'] = 'Ange nuvarande lösenord.';
+$messages['passwordincorrect'] = 'Felaktigt nuvarande lösenord.';
+$messages['passwordinconsistency'] = 'Bekräftelsen av lösenordet stämmer inte, försök igen.';
+$messages['crypterror'] = 'Lösenordet kunde inte ändras. Krypteringsfunktionen saknas.';
+$messages['connecterror'] = 'Lösenordet kunde inte ändras. Anslutningen misslyckades.';
+$messages['internalerror'] = 'Lösenordet kunde inte ändras.';
+$messages['passwordshort'] = 'Lösenordet måste vara minst $length tecken långt.';
+$messages['passwordweak'] = 'Lösenordet måste innehålla minst en siffra och ett specialtecken.';
+$messages['passwordforbidden'] = 'Lösenordet innehåller otillåtna tecken.';
+$messages['firstloginchange'] = 'Du loggar in för första gången. Vänligen ändra ditt lösenord.';
+$messages['disablednotice'] = 'Underhåll av systemet pågår och därför kan lösenord inte ändras för tillfället. Allt ska fungera normalt igen så snart som möjligt. Ursäkta den eventuella olägenheten underhållet orsakar.';
+$messages['passwinhistory'] = 'Lösenordet har redan använts tidigare.';
+$messages['samepasswd'] = 'Lösenordet får inte vara samma som det gamla.';
+$messages['passwdexpirewarning'] = 'Varning! Lösenordet blir snart ogiltigt, ändra det innan $expirationdatetime.';
+$messages['passwdexpired'] = 'Lösenordet är ogiltigt, du måste ändra det nu!';
+$messages['passwdconstraintviolation'] = 'Lösenordet uppfyller inte gällande kriterier. Lösenordet är troligtvis inte tillräckligt bra.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'เปลี่ยนรหัสผ่าน';
+$labels['curpasswd']  = 'รหัสผ่านปัจจุบัน';
+$labels['newpasswd']  = 'รหัสผ่านใหม่';
+$labels['confpasswd']  = 'ยืนยันรหัสผ่านใหม่';
+$messages['nopassword'] = 'à¸à¸£à¸¸à¸“าใส่รหัสผ่านใหม่';
+$messages['nocurpassword'] = 'à¸à¸£à¸¸à¸“าใส่รหัสผ่านปัจจุบัน';
+$messages['passwordincorrect'] = 'รหัสผ่านปัจจุบันไม่ถูà¸à¸•à¹‰à¸­à¸‡';
+$messages['passwordinconsistency'] = 'รหัสผ่านไม่ตรงà¸à¸±à¸™ à¸à¸£à¸¸à¸“าà¸à¸£à¸­à¸à¹ƒà¸«à¸¡à¹ˆà¸­à¸µà¸à¸„รััง';
+$messages['crypterror'] = 'ไม่สามารถบันทึà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹ƒà¸«à¸¡à¹ˆ. ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸à¸²à¸£à¹€à¸‚้ารหัสขาดหายไป.';
+$messages['connecterror'] = 'ไม่สามารถบันทึà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹ƒà¸«à¸¡à¹ˆ. เชื่อมต่อผิดพลาด.';
+$messages['internalerror'] = 'ไม่สามารถบันทึà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹ƒà¸«à¸¡à¹ˆ.';
+$messages['passwordshort'] = 'รหัสผ่านต้องมีอย่างน้อย $length ตัวอัà¸à¸©à¸£.';
+$messages['passwordweak'] = 'รหัสผ่านต้องมีอย่างน้อยหนึ่งตัวเลขà¹à¸¥à¸°à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸§à¸£à¸£à¸„ตอนหนึ่ง';
+$messages['passwordforbidden'] = 'รหัสผ่านมีอัà¸à¸‚ระต้องห้าม';
+$messages['firstloginchange'] = 'นี่คือครั้งà¹à¸£à¸à¹ƒà¸™à¸à¸²à¸£à¹€à¸‚้าระบบ à¸à¸£à¸¸à¸“าเปลี่ยนรหัสผ่านของคุณ';
+$messages['disablednotice'] = 'ระบบขณะนี้อยู่ระหว่างà¸à¸²à¸£à¸šà¸³à¸£à¸¸à¸‡à¸£à¸±à¸à¸©à¸²à¹à¸¥à¸°à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹€à¸›à¹‡à¸™à¹„ปไม่ได้ในขณะนี้ ทุà¸à¸­à¸¢à¹ˆà¸²à¸‡à¸„วรจะà¸à¸¥à¸±à¸šà¸¡à¸²à¹€à¸›à¹‡à¸™à¸›à¸à¸•à¸´à¹€à¸£à¹‡à¸§ ๆ นี้ เราต้องขออภัยในความไม่สะดวà¸.';
+$messages['passwinhistory'] = 'รหัสผ่านนี้ได้ถูà¸à¸™à¸³à¸¡à¸²à¹ƒà¸Šà¹‰à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰';
+$messages['samepasswd'] = 'รหัสผ่านใหม่จะต้องมีความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸ˆà¸²à¸à¹€à¸”ิม';
+$messages['passwdexpirewarning'] = 'คำเตือน! รหัสผ่านของคุณจะหมดอายุในเร็ว ๆ นี้ เปลี่ยนà¸à¹ˆà¸­à¸™ $expirationdatetime.';
+$messages['passwdexpired'] = 'รหัสผ่านของคุณหมดอายุà¹à¸¥à¹‰à¸§à¸„ุณมีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹ƒà¸™à¸‚ณะนี้!';
+$messages['passwdconstraintviolation'] = 'รหัสมีความปลอดภัยต่ำ';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/ti.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'ህáˆá‹ መሕለአቃáˆ:';
+$labels['newpasswd']  = 'ሓዱሽ መሕለአቃáˆ:';
+$labels['confpasswd']  = 'መረጋገႠሓዱሽ መሕለአቃሠ:';
+$messages['nopassword'] = 'ሓዱሽ መሕለአቃሠአብዚ ይእቶ::';
+$messages['nocurpassword'] = 'ህáˆá‹ መሕለአቃሠኣብዚ ይእቶ::';
+$messages['passwordincorrect'] = 'ህáˆá‹ መሕለአቃሠ ከáˆáŠ¡ ኣይኮáŠáŠ•::';
+$messages['passwordinconsistency'] = 'መሕለáቲ ቃላት ሓድ ኣይኮኑን ::ተá‹áˆ³áŠº áˆá‰°áŠ የድሊ::';
+$messages['crypterror'] = 'መመስጥሪ á‹áŠ•áŠ­áˆ½áŠ• ስለá‹áˆ³áŠ¥áŠ እቲ መሕለአቃሠኣይተá‰áˆ˜áŒ áŠ•::';
+$messages['connecterror'] = 'ናይ ርክብ ጸገሠስለዘሎ እቲ መሕለአቃሠኣይተá‰áˆ˜áŒ áŠ•::';
+$messages['internalerror'] = 'እቲ መሕለአቃሠኣይተá‰áˆ˜áŒ áŠ•::';
+$messages['passwordshort'] = 'ንá‹áˆ“ት መሕለአቃሠ$length áŠá‹³áˆ‹á‰µ ክኾን አለዎ::';
+$messages['passwordweak'] = 'መሕለአቃሠእንተá‹áˆ“á‹° ሓደ ኣሃá‹áŠ• ሓደ ስርዓተ áŠáŒ¥á‰¥áŠ• ከጠቓáˆáˆ አለዎ::';
+$messages['passwordforbidden'] = 'እቲ መሕለአቃሠá‹áŒ‰á‹³á‰µ áŠá‹³áˆ‹á‰µ አለá‹á‹Ž::';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Parola DeÄŸiÅŸtirme';
+$labels['curpasswd']  = 'Geçerli Parola:';
+$labels['newpasswd']  = 'Yeni Parola:';
+$labels['confpasswd']  = 'Yeni Parola Onayı:';
+$messages['nopassword'] = 'Yeni parolayı yazın.';
+$messages['nocurpassword'] = 'Geçerli parolayı yazın.';
+$messages['passwordincorrect'] = 'Geçerli parolayı yanlış yazdınız.';
+$messages['passwordinconsistency'] = 'Parola ile onayı aynı değil, lütfen yeniden deneyin.';
+$messages['crypterror'] = 'Yeni parola kaydedilemedi. Şifreleme işlevi bulunamadı.';
+$messages['connecterror'] = 'Yeni parola kaydedilemedi. Bağlantı sorunu.';
+$messages['internalerror'] = 'Yeni parola kaydedilemedi.';
+$messages['passwordshort'] = 'Parola en az $length karakterden oluşmalı.';
+$messages['passwordweak'] = 'Parola en az bir sayı ve bir noktalama işareti içermeli.';
+$messages['passwordforbidden'] = 'Parolada izin verilmeyen karakterler var.';
+$messages['firstloginchange'] = 'İlk kez oturum açıyorsunuz. Parolanızı değiştirin.';
+$messages['disablednotice'] = 'Sistem bakımda olduğundan parola değiştirilemez. Lütfen daha sonra yeniden deneyin. Verdiğimiz rahatsızlıktan dolayı özür dileriz.';
+$messages['passwinhistory'] = 'Bu parola daha önce kullanılmış.';
+$messages['samepasswd'] = 'Yeni parola eski paroladan farklı olmalıdır.';
+$messages['passwdexpirewarning'] = 'Uyarı! Parolanızın kullanma süresi yakında dolacak. $expirationdatetime tarihinden önce değiştirin.';
+$messages['passwdexpired'] = 'Parolanızın kullanma süresi dolmuş. Şimdi değiştirmelisiniz!';
+$messages['passwdconstraintviolation'] = 'Parola istenilen karmaşıklıkta değil. Büyük olasılıkla oldukça kolay.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Змінити пароль';
+$labels['curpasswd']  = 'Поточний пароль:';
+$labels['newpasswd']  = 'Ðовий пароль:';
+$labels['confpasswd']  = 'Підтвердіть новий пароль:';
+$messages['nopassword'] = 'Будь лаÑка, введіть новий пароль.';
+$messages['nocurpassword'] = 'Будь лаÑка, введіть поточний пароль.';
+$messages['passwordincorrect'] = 'Поточний пароль неправильний.';
+$messages['passwordinconsistency'] = 'Паролі не збігаютьÑÑ, Ñпробуйте ще раз.';
+$messages['crypterror'] = 'Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ новий пароль. Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÑутнÑ.';
+$messages['connecterror'] = 'Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ новий пароль. Помилка з\'єднаннÑ.';
+$messages['internalerror'] = 'Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ новий пароль.';
+$messages['passwordshort'] = 'Пароль повинен бути не менше $length Ñимволів.';
+$messages['passwordweak'] = 'Пароль повинен міÑтити Ñк мінімум одну цифру Ñ– один розділовий знак.';
+$messages['passwordforbidden'] = 'Пароль міÑтить заборонені Ñимволи.';
+$messages['firstloginchange'] = 'Це Ваше перше Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð² ÑиÑтему. Змініть, будь лаÑка, Ñвій пароль.';
+$messages['disablednotice'] = 'СиÑтема зараз в режимі обÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– змінити пароль наразі неможливо. Ðевдовзі вÑе має вернутиÑÑ Ð² норму. ПроÑимо Ð²Ð¸Ð±Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° будь-Ñкі незручноÑÑ‚Ñ–.';
+$messages['passwinhistory'] = 'Цей пароль вже викориÑтовувавÑÑ Ñ€Ð°Ð½Ñ–ÑˆÐµ.';
+$messages['samepasswd'] = 'Ðовий пароль повинен відрізнÑтиÑÑ Ð²Ñ–Ð´ Ñтарого.';
+$messages['passwdexpirewarning'] = 'УВÐГÐ! У вашого Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÑƒÑ”Ñ‚ÑŒÑÑ Ñ‚ÐµÑ€Ð¼Ñ–Ð½, змінити його Ñк омога Ñкоріше до $expirationdatetime.';
+$messages['passwdexpired'] = 'Ваш пароль закінчивÑÑ, ви повинні змінити це зараз!';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = 'Parolni almashtirish';
+$labels['curpasswd']  = 'Hozirgi parol';
+$labels['newpasswd']  = 'Yangi parol';
+$labels['confpasswd']  = 'Yangi parolni tasdiqlash';
+$messages['nopassword'] = 'Iltimos, yangi parolni kiriting';
+$messages['nocurpassword'] = 'Iltimos, yangi parolni kiriting';
+$messages['passwordincorrect'] = 'Hozirgi parol noto‘g‘ri yozildi';
+$messages['passwordinconsistency'] = 'Parollar mos emas, qaytadan urinub ko‘ring';
+$messages['crypterror'] = 'Yangi parol saqlanmadi. Shifrlash funksiyasi yoqilmagan';
+$messages['connecterror'] = 'Yangi parol saqlanmadi. Ulanishda xatolik.';
+$messages['internalerror'] = 'Yangi parol saqlanmadi.';
+$messages['passwordshort'] = 'Parol uzunligi kamida $length simvol bo‘lishi kerak.';
+$messages['passwordweak'] = 'Parol kamida bitta raqamga ega bo‘lishi va punktuatsiya simvollari mavjud bo‘lishi kerak.';
+$messages['passwordforbidden'] = 'Parol tarkibida ruxsat etilmagan simvol mavjud';
+$messages['firstloginchange'] = 'Bu sizning birinchi marta tizimga kirishingiz, iltimos parolingizni o‘zgartiring.';
+$messages['disablednotice'] = 'Hozir tizimga xizmat ko‘rsatilmoqda va parolni o‘zgartirish funksiyasi hozirda amalda emas. Barchasi tezda o‘z normal holatiga qaytadi. Noqulayliklar uchun uzr.';
+$messages['passwinhistory'] = 'Bu paroldan avval foydalanilgan.';
+$messages['samepasswd'] = 'Yangi parol avvalgisidan farqlanishi lozim.';
+$messages['passwdexpirewarning'] = 'Ogohlantirish! Sizning parolingiz muddati tugamoqda, bu $expirationdatetime muddatdan avval uni almashtiring.';
+$messages['passwdexpired'] = 'Sizning parolingiz eskirdi, uni hoziroq o‘zgartiring.';
+$messages['passwdconstraintviolation'] = 'Parol cheklovlari buzilgan, ehtimol parolingiz juda sodda.';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['curpasswd']  = 'Mật khẩu hiện tại';
+$labels['newpasswd']  = 'Mật khẩu mới:';
+$labels['confpasswd']  = 'XaÌc nhận mật khẩu mÆ¡Ìi';
+$messages['nopassword'] = 'MÆ¡Ì€i nhập mật khẩu mÆ¡Ìi';
+$messages['nocurpassword'] = 'Mời nhập mật khẩu hiện tại';
+$messages['passwordincorrect'] = 'Mật khẩu hiện thÆ¡Ì€i không Ä‘uÌng';
+$messages['passwordinconsistency'] = 'Mật khẩu không khÆ¡Ìp, hãy thử laÌ£i';
+$messages['crypterror'] = 'Không thể lÆ°u mật khẩu mÆ¡Ìi. ThiêÌu chÆ°Ìc năng mã hoÌa';
+$messages['connecterror'] = 'Không thể lưu mật mã mới. Lổi kết nối';
+$messages['internalerror'] = 'Không thể lÆ°u mật khẩu mÆ¡Ìi';
+$messages['passwordshort'] = 'Mật khẩu phải daÌ€i iÌt nhâÌt $ kyÌ tÆ°Ì£';
+$messages['passwordweak'] = 'Mật khẩu phải bao gồm ít nhất 1 con số và 1 ký tự dấu câu';
+$messages['passwordforbidden'] = 'Mật khẩu bao gồm ký tự không hợp lệ';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = '修改密ç ';
+$labels['curpasswd']  = '当å‰å¯†ç ï¼š';
+$labels['newpasswd']  = '新密ç ï¼š';
+$labels['confpasswd']  = '确认新密ç ï¼š';
+$messages['nopassword'] = '请输入新密ç ã€‚';
+$messages['nocurpassword'] = '请输入当å‰çš„密ç ã€‚';
+$messages['passwordincorrect'] = '当å‰å¯†ç ä¸æ­£ç¡®ã€‚';
+$messages['passwordinconsistency'] = '两次输入的密ç ä¸ä¸€è‡´ï¼Œè¯·é‡è¯•ã€‚';
+$messages['crypterror'] = '无法ä¿å­˜æ–°å¯†ç ï¼Œç¼ºå°‘加密功能。';
+$messages['connecterror'] = '无法ä¿å­˜æ–°å¯†ç ï¼Œè¿žæŽ¥å‡ºé”™ã€‚';
+$messages['internalerror'] = '无法ä¿å­˜æ–°å¯†ç ã€‚';
+$messages['passwordshort'] = '密ç è‡³å°‘为 $length ä½ã€‚';
+$messages['passwordweak'] = '密ç å¿…须至少包å«ä¸€ä¸ªæ•°å­—和一个标点符å·ã€‚';
+$messages['passwordforbidden'] = '密ç åŒ…å«ç¦æ­¢ä½¿ç”¨çš„字符。';
+$messages['firstloginchange'] = '这是你第一次登录邮箱,请修改邮箱密ç ã€‚';
+$messages['disablednotice'] = '系统目å‰æ­£åœ¨ç»´æŠ¤ï¼Œå¯†ç ä¿®æ”¹åŠŸèƒ½æ— æ³•ä½¿ç”¨ã€‚我们会很快回æ¥ï¼Œç»™æ‚¨å¸¦æ¥ä¸ä¾¿æ·±è¡¨æ­‰æ„。';
+$messages['passwinhistory'] = '此密ç ä»¥å‰ä½¿ç”¨è¿‡ã€‚';
+$messages['samepasswd'] = '新密ç ä¸èƒ½ä¸Žæ—§å¯†ç ç›¸åŒã€‚';
+$messages['passwdexpirewarning'] = '警告ï¼æ‚¨çš„密ç å³å°†è¿‡æœŸï¼Œè¯·åœ¨ $expirationdatetime å‰æ›´æ”¹ã€‚';
+$messages['passwdexpired'] = '您的密ç å·²è¿‡æœŸï¼Œæ‚¨çŽ°åœ¨å¿…须更改ï¼';
+$messages['passwdconstraintviolation'] = '密ç çº¦æŸè¿è§„。密ç å¯èƒ½å¤ªå¼±äº†ã€‚';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/password/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Password plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
+*/
+$labels['changepasswd']  = '更改密碼';
+$labels['curpasswd']  = 'ç›®å‰çš„密碼:';
+$labels['newpasswd']  = '新密碼';
+$labels['confpasswd']  = '確èªæ–°å¯†ç¢¼';
+$messages['nopassword'] = '請輸入新密碼';
+$messages['nocurpassword'] = '請輸入目å‰çš„密碼';
+$messages['passwordincorrect'] = 'ç›®å‰çš„密碼錯誤';
+$messages['passwordinconsistency'] = '密碼ä¸ç›¸ç¬¦ï¼Œè«‹é‡æ–°è¼¸å…¥';
+$messages['crypterror'] = '無法更新密碼:無加密機制';
+$messages['connecterror'] = '無法更新密碼:連線失敗';
+$messages['internalerror'] = '無法更新密碼';
+$messages['passwordshort'] = '密碼至少需 $length 個字元';
+$messages['passwordweak'] = '新密碼至少需å«æœ‰ä¸€å€‹æ•¸å­—與一個標點符號';
+$messages['passwordforbidden'] = '密碼å«æœ‰ç¦ç”¨å­—å…ƒ';
+$messages['firstloginchange'] = '這是你第一次登入。請更改密碼。';
+$messages['disablednotice'] = '系統正在進行ä¿é¤Šå·¥ä½œï¼Œæ•…此無法更改密碼。系統很快會回復正常。抱歉ï¼';
+$messages['passwinhistory'] = '此密碼之å‰å·²ç”¨éŽ';
+$messages['samepasswd'] = '新密碼è¦å’ŒèˆŠçš„ä¸åŒ';
+$messages['passwdexpirewarning'] = '警告ï¼æ‚¨çš„密碼很快會到期,請在 $expirationdatetime 之å‰æ›´æ”¹';
+$messages['passwdexpired'] = '您的密碼已到期,請馬上更改ï¼';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/password.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+/**
+ * Password plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+window.rcmail && rcmail.addEventListener('init', function(evt) {
+    if (rcmail.env.password_disabled) {
+        $('#password-form input').prop('disabled', true);
+        // reload page after ca. 3 minutes
+        rcmail.reload(3 * 60 * 1000 - 2000);
+        return;
+    }
+
+    // register command handler
+    rcmail.register_command('plugin.password-save', function() {
+        var input_curpasswd = rcube_find_object('_curpasswd'),
+            input_newpasswd = rcube_find_object('_newpasswd'),
+            input_confpasswd = rcube_find_object('_confpasswd');
+
+      if (input_curpasswd && input_curpasswd.value == '') {
+          alert(rcmail.get_label('nocurpassword', 'password'));
+          input_curpasswd.focus();
+      }
+      else if (input_newpasswd && input_newpasswd.value == '') {
+          alert(rcmail.get_label('nopassword', 'password'));
+          input_newpasswd.focus();
+      }
+      else if (input_confpasswd && input_confpasswd.value == '') {
+          alert(rcmail.get_label('nopassword', 'password'));
+          input_confpasswd.focus();
+      }
+      else if (input_newpasswd && input_confpasswd && input_newpasswd.value != input_confpasswd.value) {
+          alert(rcmail.get_label('passwordinconsistency', 'password'));
+          input_newpasswd.focus();
+      }
+      else {
+          rcmail.gui_objects.passform.submit();
+      }
+    }, true);
+
+    $('input:not(:hidden):first').focus();
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/password.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+/**
+ * Password plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&rcmail.addEventListener("init",function(d){rcmail.env.password_disabled?($("#password-form input").prop("disabled",!0),rcmail.reload(178E3)):(rcmail.register_command("plugin.password-save",function(){var c=rcube_find_object("_curpasswd"),a=rcube_find_object("_newpasswd"),b=rcube_find_object("_confpasswd");c&&""==c.value?(alert(rcmail.get_label("nocurpassword","password")),c.focus()):a&&""==a.value?(alert(rcmail.get_label("nopassword","password")),a.focus()):b&&""==b.value?(alert(rcmail.get_label("nopassword",
+"password")),b.focus()):a&&b&&a.value!=b.value?(alert(rcmail.get_label("passwordinconsistency","password")),a.focus()):rcmail.gui_objects.passform.submit()},!0),$("input:not(:hidden):first").focus())});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/password.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,677 @@
+<?php
+
+/**
+ * Password Plugin for Roundcube
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ *
+ * Copyright (C) 2005-2015, The Roundcube Dev Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+define('PASSWORD_CRYPT_ERROR', 1);
+define('PASSWORD_ERROR', 2);
+define('PASSWORD_CONNECT_ERROR', 3);
+define('PASSWORD_IN_HISTORY', 4);
+define('PASSWORD_CONSTRAINT_VIOLATION', 5);
+define('PASSWORD_SUCCESS', 0);
+
+/**
+ * Change password plugin
+ *
+ * Plugin that adds functionality to change a users password.
+ * It provides common functionality and user interface and supports
+ * several backends to finally update the password.
+ *
+ * For installation and configuration instructions please read the README file.
+ *
+ * @author Aleksander Machniak
+ */
+class password extends rcube_plugin
+{
+    public $task    = 'settings|login';
+    public $noframe = true;
+    public $noajax  = true;
+
+    private $newuser = false;
+
+    function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        $this->load_config();
+
+        if ($rcmail->task == 'settings') {
+            if (!$this->check_host_login_exceptions()) {
+                return;
+            }
+
+            $this->add_texts('localization/');
+
+            $this->add_hook('settings_actions', array($this, 'settings_actions'));
+
+            $this->register_action('plugin.password', array($this, 'password_init'));
+            $this->register_action('plugin.password-save', array($this, 'password_save'));
+        }
+        else if ($rcmail->config->get('password_force_new_user')) {
+            $this->add_hook('user_create', array($this, 'user_create'));
+            $this->add_hook('login_after', array($this, 'login_after'));
+        }
+    }
+
+    function settings_actions($args)
+    {
+        // register as settings action
+        $args['actions'][] = array(
+            'action' => 'plugin.password',
+            'class'  => 'password',
+            'label'  => 'password',
+            'title'  => 'changepasswd',
+            'domain' => 'password',
+        );
+
+        return $args;
+    }
+
+    function password_init()
+    {
+        $this->register_handler('plugin.body', array($this, 'password_form'));
+
+        $rcmail = rcmail::get_instance();
+        $rcmail->output->set_pagetitle($this->gettext('changepasswd'));
+
+        if (rcube_utils::get_input_value('_first', rcube_utils::INPUT_GET)) {
+            $rcmail->output->command('display_message', $this->gettext('firstloginchange'), 'notice');
+        }
+        else if (!empty($_SESSION['password_expires'])) {
+            if ($_SESSION['password_expires'] == 1) {
+                $rcmail->output->command('display_message', $this->gettext('passwdexpired'), 'error');
+            }
+            else {
+                $rcmail->output->command('display_message', $this->gettext(array(
+                        'name' => 'passwdexpirewarning',
+                        'vars' => array('expirationdatetime' => $_SESSION['password_expires'])
+                    )), 'warning');
+            }
+        }
+
+        $rcmail->output->send('plugin');
+    }
+
+    function password_save()
+    {
+        $this->register_handler('plugin.body', array($this, 'password_form'));
+
+        $rcmail = rcmail::get_instance();
+        $rcmail->output->set_pagetitle($this->gettext('changepasswd'));
+
+        $form_disabled   = $rcmail->config->get('password_disabled');
+        $confirm         = $rcmail->config->get('password_confirm_current');
+        $required_length = intval($rcmail->config->get('password_minimum_length'));
+        $check_strength  = $rcmail->config->get('password_require_nonalpha');
+
+        if (($confirm && !isset($_POST['_curpasswd'])) || !isset($_POST['_newpasswd'])) {
+            $rcmail->output->command('display_message', $this->gettext('nopassword'), 'error');
+        }
+        else {
+            $charset    = strtoupper($rcmail->config->get('password_charset', 'ISO-8859-1'));
+            $rc_charset = strtoupper($rcmail->output->get_charset());
+
+            $sespwd = $rcmail->decrypt($_SESSION['password']);
+            $curpwd = $confirm ? rcube_utils::get_input_value('_curpasswd', rcube_utils::INPUT_POST, true, $charset) : $sespwd;
+            $newpwd = rcube_utils::get_input_value('_newpasswd', rcube_utils::INPUT_POST, true);
+            $conpwd = rcube_utils::get_input_value('_confpasswd', rcube_utils::INPUT_POST, true);
+
+            // check allowed characters according to the configured 'password_charset' option
+            // by converting the password entered by the user to this charset and back to UTF-8
+            $orig_pwd = $newpwd;
+            $chk_pwd = rcube_charset::convert($orig_pwd, $rc_charset, $charset);
+            $chk_pwd = rcube_charset::convert($chk_pwd, $charset, $rc_charset);
+
+            // WARNING: Default password_charset is ISO-8859-1, so conversion will
+            // change national characters. This may disable possibility of using
+            // the same password in other MUA's.
+            // We're doing this for consistence with Roundcube core
+            $newpwd = rcube_charset::convert($newpwd, $rc_charset, $charset);
+            $conpwd = rcube_charset::convert($conpwd, $rc_charset, $charset);
+
+            if ($chk_pwd != $orig_pwd) {
+                $rcmail->output->command('display_message', $this->gettext('passwordforbidden'), 'error');
+            }
+            // other passwords validity checks
+            else if ($conpwd != $newpwd) {
+                $rcmail->output->command('display_message', $this->gettext('passwordinconsistency'), 'error');
+            }
+            else if ($confirm && $sespwd != $curpwd) {
+                $rcmail->output->command('display_message', $this->gettext('passwordincorrect'), 'error');
+            }
+            else if ($required_length && strlen($newpwd) < $required_length) {
+                $rcmail->output->command('display_message', $this->gettext(
+                    array('name' => 'passwordshort', 'vars' => array('length' => $required_length))), 'error');
+            }
+            else if ($check_strength && (!preg_match("/[0-9]/", $newpwd) || !preg_match("/[^A-Za-z0-9]/", $newpwd))) {
+                $rcmail->output->command('display_message', $this->gettext('passwordweak'), 'error');
+            }
+            // password is the same as the old one, warn user, return error
+            else if ($sespwd == $newpwd && !$rcmail->config->get('password_force_save')) {
+                $rcmail->output->command('display_message', $this->gettext('samepasswd'), 'error');
+            }
+            // try to save the password
+            else if (!($res = $this->_save($curpwd, $newpwd))) {
+                $rcmail->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation');
+
+                // allow additional actions after password change (e.g. reset some backends)
+                $plugin = $rcmail->plugins->exec_hook('password_change', array(
+                    'old_pass' => $curpwd, 'new_pass' => $newpwd));
+
+                // Reset session password
+                $_SESSION['password'] = $rcmail->encrypt($plugin['new_pass']);
+
+                // Log password change
+                if ($rcmail->config->get('password_log')) {
+                    rcube::write_log('password', sprintf('Password changed for user %s (ID: %d) from %s',
+                        $rcmail->get_user_name(), $rcmail->user->ID, rcube_utils::remote_ip()));
+                }
+
+                // Remove expiration date/time
+                $rcmail->session->remove('password_expires');
+            }
+            else {
+                $rcmail->output->command('display_message', $res, 'error');
+            }
+        }
+
+        $rcmail->overwrite_action('plugin.password');
+        $rcmail->output->send('plugin');
+    }
+
+    function password_form()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // add some labels to client
+        $rcmail->output->add_label(
+            'password.nopassword',
+            'password.nocurpassword',
+            'password.passwordinconsistency'
+        );
+
+        $form_disabled = $rcmail->config->get('password_disabled');
+
+        $rcmail->output->set_env('product_name', $rcmail->config->get('product_name'));
+        $rcmail->output->set_env('password_disabled', !empty($form_disabled));
+
+        $table = new html_table(array('cols' => 2));
+
+        if ($rcmail->config->get('password_confirm_current')) {
+            // show current password selection
+            $field_id = 'curpasswd';
+            $input_curpasswd = new html_passwordfield(array(
+                    'name'         => '_curpasswd',
+                    'id'           => $field_id,
+                    'size'         => 20,
+                    'autocomplete' => 'off',
+            ));
+
+            $table->add('title', html::label($field_id, rcube::Q($this->gettext('curpasswd'))));
+            $table->add(null, $input_curpasswd->show());
+        }
+
+        // show new password selection
+        $field_id = 'newpasswd';
+        $input_newpasswd = new html_passwordfield(array(
+                'name'         => '_newpasswd',
+                'id'           => $field_id,
+                'size'         => 20,
+                'autocomplete' => 'off',
+        ));
+
+        $table->add('title', html::label($field_id, rcube::Q($this->gettext('newpasswd'))));
+        $table->add(null, $input_newpasswd->show());
+
+        // show confirm password selection
+        $field_id = 'confpasswd';
+        $input_confpasswd = new html_passwordfield(array(
+                'name'         => '_confpasswd',
+                'id'           => $field_id,
+                'size'         => 20,
+                'autocomplete' => 'off',
+        ));
+
+        $table->add('title', html::label($field_id, rcube::Q($this->gettext('confpasswd'))));
+        $table->add(null, $input_confpasswd->show());
+
+        $rules = '';
+
+        $required_length = intval($rcmail->config->get('password_minimum_length'));
+        if ($required_length > 0) {
+            $rules .= html::tag('li', array('id' => 'required-length'), $this->gettext(array(
+                'name' => 'passwordshort',
+                'vars' => array('length' => $required_length)
+            )));
+        }
+
+        if ($rcmail->config->get('password_require_nonalpha')) {
+            $rules .= html::tag('li', array('id' => 'require-nonalpha'), $this->gettext('passwordweak'));
+        }
+
+        if (!empty($rules)) {
+            $rules = html::tag('ul', array('id' => 'ruleslist'), $rules);
+        }
+
+        $disabled_msg = '';
+        if ($form_disabled) {
+            $disabled_msg = is_string($form_disabled) ? $form_disabled : $this->gettext('disablednotice');
+            $disabled_msg = html::div(array('class' => 'boxwarning', 'id' => 'password-notice'), $disabled_msg);
+        }
+
+        $submit_button = $rcmail->output->button(array(
+                'command' => 'plugin.password-save',
+                'type'    => 'input',
+                'class'   => 'button mainaction',
+                'label'   => 'save',
+        ));
+        $form_buttons = html::p(array('class' => 'formbuttons'), $submit_button);
+
+        $out = html::div(array('class' => 'box'),
+            html::div(array('id' => 'prefs-title', 'class' => 'boxtitle'), $this->gettext('changepasswd'))
+            . html::div(array('class' => 'boxcontent'),
+                $disabled_msg . $table->show() . $rules . $form_buttons));
+
+        $rcmail->output->add_gui_object('passform', 'password-form');
+
+        $this->include_script('password.js');
+
+        return $rcmail->output->form_tag(array(
+            'id'     => 'password-form',
+            'name'   => 'password-form',
+            'method' => 'post',
+            'action' => './?_task=settings&_action=plugin.password-save',
+        ), $out);
+    }
+
+    private function _save($curpass, $passwd)
+    {
+        $config = rcmail::get_instance()->config;
+        $driver = $config->get('password_driver', 'sql');
+        $class  = "rcube_{$driver}_password";
+        $file   = $this->home . "/drivers/$driver.php";
+
+        if (!file_exists($file)) {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Unable to open driver file ($file)"
+            ), true, false);
+            return $this->gettext('internalerror');
+        }
+
+        include_once $file;
+
+        if (!class_exists($class, false) || !method_exists($class, 'save')) {
+            rcube::raise_error(array(
+                'code' => 600,
+                'type' => 'php',
+                'file' => __FILE__, 'line' => __LINE__,
+                'message' => "Password plugin: Broken driver $driver"
+            ), true, false);
+            return $this->gettext('internalerror');
+        }
+
+        $object = new $class;
+        $result = $object->save($curpass, $passwd);
+        $message = '';
+
+        if (is_array($result)) {
+            $message = $result['message'];
+            $result  = $result['code'];
+        }
+
+        switch ($result) {
+            case PASSWORD_SUCCESS:
+                return;
+            case PASSWORD_CRYPT_ERROR:
+                $reason = $this->gettext('crypterror');
+                break;
+            case PASSWORD_CONNECT_ERROR:
+                $reason = $this->gettext('connecterror');
+                break;
+            case PASSWORD_IN_HISTORY:
+                $reason = $this->gettext('passwdinhistory');
+                break;
+            case PASSWORD_CONSTRAINT_VIOLATION:
+                $reason = $this->gettext('passwdconstraintviolation');
+                break;
+            case PASSWORD_ERROR:
+            default:
+                $reason = $this->gettext('internalerror');
+        }
+
+        if ($message) {
+            $reason .= ' ' . $message;
+        }
+
+        return $reason;
+    }
+
+    function user_create($args)
+    {
+        $this->newuser = true;
+        return $args;
+    }
+
+    function login_after($args)
+    {
+        if ($this->newuser && $this->check_host_login_exceptions()) {
+            $args['_task']   = 'settings';
+            $args['_action'] = 'plugin.password';
+            $args['_first']  = 'true';
+        }
+
+        return $args;
+    }
+
+    // Check if host and login is allowed to change the password, false = not allowed, true = not allowed
+    private function check_host_login_exceptions()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // Host exceptions
+        $hosts = $rcmail->config->get('password_hosts');
+        if (!empty($hosts) && !in_array($_SESSION['storage_host'], (array) $hosts)) {
+            return false;
+        }
+
+        // Login exceptions
+        if ($exceptions = $rcmail->config->get('password_login_exceptions')) {
+            $exceptions = array_map('trim', (array) $exceptions);
+            $exceptions = array_filter($exceptions);
+            $username   = $_SESSION['username'];
+
+            foreach ($exceptions as $ec) {
+                if ($username === $ec) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Hashes a password and returns the hash based on the specified method
+     *
+     * Parts of the code originally from the phpLDAPadmin development team
+     * http://phpldapadmin.sourceforge.net/
+     *
+     * @param string      Clear password
+     * @param string      Hashing method
+     * @param bool|string Prefix string or TRUE to add a default prefix
+     *
+     * @return string Hashed password
+     */
+    static function hash_password($password, $method = '', $prefixed = true)
+    {
+        $method = strtolower($method);
+        $rcmail = rcmail::get_instance();
+        $prefix = '';
+        $crypted = '';
+        $default = false;
+
+        if (empty($method) || $method == 'default') {
+            $method   = $rcmail->config->get('password_algorithm');
+            $prefixed = $rcmail->config->get('password_algorithm_prefix');
+            $default  = true;
+        }
+        else if ($method == 'crypt') { // deprecated
+            if (!($method = $rcmail->config->get('password_crypt_hash'))) {
+                $method = 'md5';
+            }
+
+            if (!strpos($method, '-crypt')) {
+                $method .= '-crypt';
+            }
+        }
+
+        switch ($method) {
+        case 'des':
+        case 'des-crypt':
+            $crypted = crypt($password, rcube_utils::random_bytes(2));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'ext_des': // for BC
+        case 'ext-des-crypt':
+            $crypted = crypt($password, '_' . rcube_utils::random_bytes(8));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'md5crypt': // for BC
+        case 'md5-crypt':
+            $crypted = crypt($password, '$1$' . rcube_utils::random_bytes(9));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'sha256-crypt':
+            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
+            $prefix = '$5$';
+
+            if ($rounds > 1000) {
+                $prefix .= 'rounds=' . $rounds . '$';
+            }
+
+            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'sha512-crypt':
+            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
+            $prefix = '$6$';
+
+            if ($rounds > 1000) {
+                $prefix .= 'rounds=' . $rounds . '$';
+            }
+
+            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'blowfish': // for BC
+        case 'blowfish-crypt':
+            $cost   = (int) $rcmail->config->get('password_blowfish_cost');
+            $cost   = $cost < 4 || $cost > 31 ? 12 : $cost;
+            $prefix = sprintf('$2a$%02d$', $cost);
+
+            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(22));
+            $prefix  = '{CRYPT}';
+            break;
+
+        case 'md5':
+            $crypted = base64_encode(pack('H*', md5($password)));
+            $prefix  = '{MD5}';
+            break;
+
+        case 'sha':
+            if (function_exists('sha1')) {
+                $crypted = pack('H*', sha1($password));
+            }
+            else if (function_exists('hash')) {
+                $crypted = hash('sha1', $password, true);
+            }
+            else if (function_exists('mhash')) {
+                $crypted = mhash(MHASH_SHA1, $password);
+            }
+            else {
+                rcube::raise_error(array(
+                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: Your PHP install does not have the mhash()/hash() nor sha1() function"
+                ), true, true);
+            }
+
+            $crypted = base64_encode($crypted);
+            $prefix = '{SHA}';
+            break;
+
+        case 'ssha':
+            $salt = rcube_utils::random_bytes(8);
+
+            if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) {
+                $salt    = mhash_keygen_s2k(MHASH_SHA1, $password, $salt, 4);
+                $crypted = mhash(MHASH_SHA1, $password . $salt);
+            }
+            else if (function_exists('sha1')) {
+                $salt    = substr(pack("H*", sha1($salt . $password)), 0, 4);
+                $crypted = sha1($password . $salt, true);
+            }
+            else if (function_exists('hash')) {
+                $salt    = substr(pack("H*", hash('sha1', $salt . $password)), 0, 4);
+                $crypted = hash('sha1', $password . $salt, true);
+            }
+            else {
+                rcube::raise_error(array(
+                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: Your PHP install does not have the mhash()/hash() nor sha1() function"
+                ), true, true);
+            }
+
+            $crypted = base64_encode($crypted . $salt);
+            $prefix  = '{SSHA}';
+            break;
+
+        case 'smd5':
+            $salt = rcube_utils::random_bytes(8);
+
+            if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) {
+                $salt    = mhash_keygen_s2k(MHASH_MD5, $password, $salt, 4);
+                $crypted = mhash(MHASH_MD5, $password . $salt);
+            }
+            else if (function_exists('hash')) {
+                $salt    = substr(pack("H*", hash('md5', $salt . $password)), 0, 4);
+                $crypted = hash('md5', $password . $salt, true);
+            }
+            else {
+                $salt    = substr(pack("H*", md5($salt . $password)), 0, 4);
+                $crypted = md5($password . $salt, true);
+            }
+
+            $crypted = base64_encode($crypted . $salt);
+            $prefix  = '{SMD5}';
+            break;
+
+        case 'samba':
+            if (function_exists('hash')) {
+                $crypted = hash('md4', rcube_charset::convert($password, RCUBE_CHARSET, 'UTF-16LE'));
+                $crypted = strtoupper($crypted);
+            }
+            else {
+                rcube::raise_error(array(
+                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: Your PHP install does not have hash() function"
+                ), true, true);
+            }
+            break;
+
+        case 'ad':
+            $crypted = rcube_charset::convert('"' . $password . '"', RCUBE_CHARSET, 'UTF-16LE');
+            break;
+
+        case 'cram-md5': // deprecated
+            require_once __DIR__ . '/../helpers/dovecot_hmacmd5.php';
+            $crypted = dovecot_hmacmd5($password);
+            $prefix  = '{CRAM-MD5}';
+            break;
+
+        case 'dovecot':
+            if (!($dovecotpw = $rcmail->config->get('password_dovecotpw'))) {
+                $dovecotpw = 'dovecotpw';
+            }
+            if (!($method = $rcmail->config->get('password_dovecotpw_method'))) {
+                $method = 'CRAM-MD5';
+            }
+
+            $spec = array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('file', '/dev/null', 'a'));
+            $pipe = proc_open("$dovecotpw -s '$method'", $spec, $pipes);
+
+            if (!is_resource($pipe)) {
+                return false;
+            }
+
+            fwrite($pipes[0], $password . "\n", 1+strlen($password));
+            usleep(1000);
+            fwrite($pipes[0], $password . "\n", 1+strlen($password));
+
+            $crypted = trim(stream_get_contents($pipes[1]), "\n");
+
+            fclose($pipes[0]);
+            fclose($pipes[1]);
+            proc_close($pipe);
+
+            if (!preg_match('/^\{' . $method . '\}/', $crypted)) {
+                return false;
+            }
+
+            if (!$default) {
+                $prefixed = (bool) $rcmail->config->get('password_dovecotpw_with_method');
+            }
+
+            if (!$prefixed) {
+                $crypted = trim(str_replace('{' . $method . '}', '', $crypted));
+            }
+
+            $prefixed = false;
+
+            break;
+
+        case 'hash': // deprecated
+            if (!extension_loaded('hash')) {
+                rcube::raise_error(array(
+                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
+                    'message' => "Password plugin: 'hash' extension not loaded!"
+                ), true, true);
+            }
+
+            if (!($hash_algo = strtolower($rcmail->config->get('password_hash_algorithm')))) {
+                $hash_algo = 'sha1';
+            }
+
+            $crypted = hash($hash_algo, $password);
+
+            if ($rcmail->config->get('password_hash_base64')) {
+                $crypted = base64_encode(pack('H*', $crypted));
+            }
+
+            break;
+
+        case 'clear':
+            $crypted = $password;
+        }
+
+        if ($crypted === null || $crypted === false) {
+            return false;
+        }
+
+        if ($prefixed && $prefixed !== true) {
+            $prefix   = $prefixed;
+            $prefixed = true;
+        }
+
+        if ($prefixed === true && $prefix) {
+            $crypted = $prefix . $crypted;
+        }
+
+        return $crypted;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redundant_attachments/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+{
+    "name": "roundcube/redundant_attachments",
+    "type": "roundcube-plugin",
+    "description": "This plugin provides a redundant storage for temporary uploaded attachment files. They are stored in both the database backend as well as on the local file system. It provides also memcache store as a fallback.",
+    "license": "GPLv2",
+    "version": "1.1",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        },
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3",
+        "roundcube/filesystem_attachments": ">=1.0.0"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redundant_attachments/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+<?php
+
+// By default this plugin stores attachments in filesystem
+// and copies them into sql database.
+// In environments with replicated database it is possible
+// to use memcache as a fallback when write-master is unavailable.
+// ------------------------------------------------------------
+// WARNING: Remember to also set memcache_max_allowed_packet in
+//          config to match with expected max attachment size.
+// ------------------------------------------------------------
+$config['redundant_attachments_memcache'] = false;
+
+// Attachment data expires after specified TTL time in seconds (max.2592000).
+// Default is 12 hours.
+$config['redundant_attachments_cache_ttl'] = 12 * 60 * 60;
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redundant_attachments/redundant_attachments.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,237 @@
+<?php
+
+/**
+ * Redundant attachments
+ *
+ * This plugin provides a redundant storage for temporary uploaded
+ * attachment files. They are stored in both the database backend
+ * as well as on the local file system.
+ *
+ * It provides also memcache store as a fallback (see config file).
+ *
+ * This plugin relies on the core filesystem_attachments plugin
+ * and combines it with the functionality of the database_attachments plugin.
+ *
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ * @author Aleksander Machniak <machniak@kolabsys.com>
+ *
+ * Copyright (C) 2011, The Roundcube Dev Team
+ * Copyright (C) 2011, Kolab Systems AG
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+if (class_exists('filesystem_attachments', false) && !defined('TESTS_DIR')) {
+    die("Configuration issue. There can be only one enabled plugin for attachments handling");
+}
+
+require_once(RCUBE_PLUGINS_DIR . 'filesystem_attachments/filesystem_attachments.php');
+
+class redundant_attachments extends filesystem_attachments
+{
+    // A prefix for the cache key used in the session and in the key field of the cache table
+    const PREFIX = "ATTACH";
+
+    // rcube_cache instance for SQL DB
+    private $cache;
+
+    // rcube_cache instance for memcache
+    private $mem_cache;
+
+    private $loaded;
+
+
+    /**
+     * Loads plugin configuration and initializes cache object(s)
+     */
+    private function _load_drivers()
+    {
+        if ($this->loaded) {
+            return;
+        }
+
+        $rcmail = rcube::get_instance();
+
+        // load configuration
+        $this->load_config();
+
+        $ttl    = 12 * 60 * 60; // 12 hours
+        $ttl    = $rcmail->config->get('redundant_attachments_cache_ttl', $ttl);
+        $prefix = self::PREFIX;
+
+        if ($id = session_id()) {
+            $prefix .= $id;
+        }
+
+        // Init SQL cache (disable cache data serialization)
+        $this->cache = $rcmail->get_cache($prefix, 'db', $ttl, false);
+
+        // Init memcache (fallback) cache
+        if ($rcmail->config->get('redundant_attachments_memcache')) {
+            $this->mem_cache = $rcmail->get_cache($prefix, 'memcache', $ttl, false);
+        }
+
+        $this->loaded = true;
+    }
+
+    /**
+     * Helper method to generate a unique key for the given attachment file
+     */
+    private function _key($args)
+    {
+        $uname = $args['path'] ?: $args['name'];
+        return $args['group'] . md5(time() . $uname . $_SESSION['user_id']);
+    }
+
+    /**
+     * Save a newly uploaded attachment
+     */
+    function upload($args)
+    {
+        $args = parent::upload($args);
+
+        $this->_load_drivers();
+
+        $key  = $this->_key($args);
+        $data = base64_encode(file_get_contents($args['path']));
+
+        $status = $this->cache->write($key, $data);
+
+        if (!$status && $this->mem_cache) {
+            $status = $this->mem_cache->write($key, $data);
+        }
+
+        if ($status) {
+            $args['id'] = $key;
+            $args['status'] = true;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Save an attachment from a non-upload source (draft or forward)
+     */
+    function save($args)
+    {
+        $args = parent::save($args);
+
+        $this->_load_drivers();
+
+        $data = $args['path'] ? file_get_contents($args['path']) : $args['data'];
+
+        $args['data'] = null;
+
+        $key  = $this->_key($args);
+        $data = base64_encode($data);
+
+        $status = $this->cache->write($key, $data);
+
+        if (!$status && $this->mem_cache) {
+            $status = $this->mem_cache->write($key, $data);
+        }
+
+        if ($status) {
+            $args['id'] = $key;
+            $args['status'] = true;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Remove an attachment from storage
+     * This is triggered by the remove attachment button on the compose screen
+     */
+    function remove($args)
+    {
+        parent::remove($args);
+
+        $this->_load_drivers();
+
+        $status = $this->cache->remove($args['id']);
+
+        if (!$status && $this->mem_cache) {
+            $status = $this->cache->remove($args['id']);
+        }
+
+        // we cannot trust the result of any of the methods above
+        // assume true, attachments will be removed on cleanup
+        $args['status'] = true;
+
+        return $args;
+    }
+
+    /**
+     * When composing an html message, image attachments may be shown
+     * For this plugin, $this->get() will check the file and
+     * return it's contents
+     */
+    function display($args)
+    {
+        return $this->get($args);
+    }
+
+    /**
+     * When displaying or sending the attachment the file contents are fetched
+     * using this method. This is also called by the attachment_display hook.
+     */
+    function get($args)
+    {
+        // attempt to get file from local file system
+        $args = parent::get($args);
+
+        if ($args['path'] && ($args['status'] = file_exists($args['path'])))
+          return $args;
+
+        $this->_load_drivers();
+
+        // fetch from database if not found on FS
+        $data = $this->cache->read($args['id']);
+
+        // fetch from memcache if not found on FS and DB
+        if (($data === false || $data === null) && $this->mem_cache) {
+            $data = $this->mem_cache->read($args['id']);
+        }
+
+        if ($data) {
+            $args['data'] = base64_decode($data);
+            $args['status'] = true;
+        }
+
+        return $args;
+    }
+
+    /**
+     * Delete all temp files associated with this user
+     */
+    function cleanup($args)
+    {
+        $this->_load_drivers();
+
+        if ($this->cache) {
+            $this->cache->remove($args['group'], true);
+        }
+
+        if ($this->mem_cache) {
+            $this->mem_cache->remove($args['group'], true);
+        }
+
+        parent::cleanup($args);
+
+        $args['status'] = true;
+
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/show_additional_headers/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/show_additional_headers",
+    "type": "roundcube-plugin",
+    "description": "Proof-of-concept plugin which will fetch additional headers and display them in the message view.",
+    "license": "GPLv3+",
+    "version": "2.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/show_additional_headers/show_additional_headers.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Show additional message headers
+ *
+ * Proof-of-concept plugin which will fetch additional headers
+ * and display them in the message view.
+ *
+ * Enable the plugin in config.inc.php and add your desired headers:
+ *   $config['show_additional_headers'] = array('User-Agent');
+ *
+ * @author Thomas Bruederli
+ * @license GNU GPLv3+
+ */
+class show_additional_headers extends rcube_plugin
+{
+  public $task = 'mail';
+
+  function init()
+  {
+    $rcmail = rcmail::get_instance();
+    if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
+      $this->add_hook('storage_init', array($this, 'storage_init'));
+      $this->add_hook('message_headers_output', array($this, 'message_headers'));
+    } else if ($rcmail->action == '') {
+      // with enabled_caching we're fetching additional headers before show/preview
+      $this->add_hook('storage_init', array($this, 'storage_init'));
+    }
+  }
+
+  function storage_init($p)
+  {
+    $rcmail = rcmail::get_instance();
+    if ($add_headers = (array)$rcmail->config->get('show_additional_headers', array()))
+      $p['fetch_headers'] = trim($p['fetch_headers'].' ' . strtoupper(join(' ', $add_headers)));
+
+    return $p;
+  }
+
+  function message_headers($p)
+  {
+    $rcmail = rcmail::get_instance();
+    foreach ((array)$rcmail->config->get('show_additional_headers', array()) as $header) {
+      if ($value = $p['headers']->get($header))
+        $p['output'][$header] = array('title' => $header, 'value' => $value);
+    }
+
+    return $p;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/squirrelmail_usercopy/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/squirrelmail_usercopy",
+    "type": "roundcube-plugin",
+    "description": "Copy a new users identity and settings from a nearby Squirrelmail installation",
+    "license": "GPLv3+",
+    "version": "1.6",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/squirrelmail_usercopy/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<?php
+
+// Driver - 'file' or 'sql'
+$config['squirrelmail_driver'] = 'sql';
+
+// full path to the squirrelmail data directory
+$config['squirrelmail_data_dir'] = '';
+$config['squirrelmail_data_dir_hash_level'] = 0;
+
+// file charset - e.g. 'EUC-JP'. Leave empty for ASCII.
+$config['squirrelmail_file_charset'] = '';
+
+// 'mysql://dbuser:dbpass@localhost/database'
+$config['squirrelmail_dsn'] = 'mysql://user:password@localhost/webmail';
+$config['squirrelmail_db_charset'] = 'iso-8859-1';
+
+$config['squirrelmail_address_table'] = 'address';
+$config['squirrelmail_userprefs_table'] = 'userprefs';
+
+// identities_level option value for squirrelmail plugin
+// With this you can bypass/change identities_level checks
+// for operations inside this plugin. See #1486773
+$config['squirrelmail_identities_level'] = null;
+
+// Set to false if you don't want the email address of the default identity
+// (squirrelmail preference "email_address") to be saved as alias.
+// Recommended: set to false if your squirrelmail config setting $edit_identity has been true.
+$config['squirrelmail_set_alias'] = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,260 @@
+<?php
+
+/**
+ * Copy a new users identities and contacts from a nearby Squirrelmail installation
+ *
+ * @version 1.6
+ * @author Thomas Bruederli, Johannes Hessellund, pommi, Thomas Lueder
+ */
+class squirrelmail_usercopy extends rcube_plugin
+{
+    public $task = 'login';
+
+    private $prefs            = null;
+    private $identities_level = 0;
+    private $abook            = array();
+
+    public function init()
+    {
+        $this->add_hook('user_create', array($this, 'create_user'));
+        $this->add_hook('identity_create', array($this, 'create_identity'));
+    }
+
+    public function create_user($p)
+    {
+        $rcmail = rcmail::get_instance();
+
+        // Read plugin's config
+        $this->initialize();
+
+        // read prefs and add email address
+        $this->read_squirrel_prefs($p['user']);
+        if (($this->identities_level == 0 || $this->identities_level == 2)
+            && $rcmail->config->get('squirrelmail_set_alias')
+            && $this->prefs['email_address']
+        ) {
+            $p['user_email'] = $this->prefs['email_address'];
+        }
+
+        return $p;
+    }
+
+    public function create_identity($p)
+    {
+        $rcmail = rcmail::get_instance();
+
+        // prefs are set in create_user()
+        if ($this->prefs) {
+            if ($this->prefs['full_name']) {
+                $p['record']['name'] = $this->prefs['full_name'];
+            }
+
+            if (($this->identities_level == 0 || $this->identities_level == 2) && $this->prefs['email_address']) {
+                $p['record']['email'] = $this->prefs['email_address'];
+            }
+
+            if ($this->prefs['___signature___']) {
+                $p['record']['signature'] = $this->prefs['___signature___'];
+            }
+
+            if ($this->prefs['reply_to']) {
+                $p['record']['reply-to'] = $this->prefs['reply_to'];
+            }
+
+            if (($this->identities_level == 0 || $this->identities_level == 1)
+                && isset($this->prefs['identities']) && $this->prefs['identities'] > 1
+            ) {
+                for ($i = 1; $i < $this->prefs['identities']; $i++) {
+                    unset($ident_data);
+                    $ident_data = array('name' => '', 'email' => ''); // required data
+
+                    if ($this->prefs['full_name'.$i]) {
+                        $ident_data['name'] = $this->prefs['full_name'.$i];
+                    }
+
+                    if ($this->identities_level == 0 && $this->prefs['email_address'.$i]) {
+                        $ident_data['email'] = $this->prefs['email_address'.$i];
+                    }
+                    else {
+                        $ident_data['email'] = $p['record']['email'];
+                    }
+
+                    if ($this->prefs['reply_to'.$i]) {
+                        $ident_data['reply-to'] = $this->prefs['reply_to'.$i];
+                    }
+
+                    if ($this->prefs['___sig'.$i.'___']) {
+                        $ident_data['signature'] = $this->prefs['___sig'.$i.'___'];
+                    }
+
+                    // insert identity
+                    $rcmail->user->insert_identity($ident_data);
+                }
+            }
+
+            // copy address book
+            $contacts  = $rcmail->get_address_book(null, true);
+            $addresses = array();
+            $groups    = array();
+
+            if ($contacts && !empty($this->abook)) {
+                foreach ($this->abook as $rec) {
+                    // #1487096: handle multi-address and/or too long items
+                    // #1487858: convert multi-address contacts into groups
+                    $emails   = preg_split('/[;,]/', $rec['email'], -1, PREG_SPLIT_NO_EMPTY);
+                    $group_id = null;
+
+                    // create group for addresses
+                    if (count($emails) > 1) {
+                        if (!($group_id = $groups[$rec['name']])) {
+                            if ($group = $contacts->create_group($rec['name'])) {
+                                $group_id = $group['id'];
+                                $groups[$rec['name']] = $group_id;
+                            }
+                        }
+                    }
+
+                    // create contacts
+                    foreach ($emails as $email) {
+                        if (!($contact_id = $addresses[$email]) && rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) {
+                            $rec['email'] = rcube_utils::idn_to_utf8($email);
+                            if ($contact_id = $contacts->insert($rec, true)) {
+                                $addresses[$email] = $contact_id;
+                            }
+                        }
+
+                        if ($group_id && $contact_id) {
+                            $contacts->add_to_group($group_id, array($contact_id));
+                        }
+                    }
+                }
+            }
+
+            // mark identity as complete for following hooks
+            $p['complete'] = true;
+        }
+
+        return $p;
+    }
+
+    private function initialize()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // Load plugin's config file
+        $this->load_config();
+
+        // Set identities_level for operations of this plugin
+        $ilevel = $rcmail->config->get('squirrelmail_identities_level');
+        if ($ilevel === null) {
+            $ilevel = $rcmail->config->get('identities_level', 0);
+        }
+
+        $this->identities_level = intval($ilevel);
+    }
+
+    private function read_squirrel_prefs($uname)
+    {
+        $rcmail = rcmail::get_instance();
+
+        /**** File based backend ****/
+        if ($rcmail->config->get('squirrelmail_driver') == 'file' && ($srcdir = $rcmail->config->get('squirrelmail_data_dir'))) {
+            if (($hash_level = $rcmail->config->get('squirrelmail_data_dir_hash_level')) > 0) {
+                $srcdir = slashify($srcdir).chunk_split(substr(base_convert(crc32($uname), 10, 16), 0, $hash_level), 1, '/');
+            }
+            $file_charset = $rcmail->config->get('squirrelmail_file_charset');
+
+            $prefsfile = slashify($srcdir) . $uname . '.pref';
+            $abookfile = slashify($srcdir) . $uname . '.abook';
+            $sigfile   = slashify($srcdir) . $uname . '.sig';
+            $sigbase   = slashify($srcdir) . $uname . '.si';
+
+            if (is_readable($prefsfile)) {
+                $this->prefs = array();
+                foreach (file($prefsfile) as $line) {
+                    list($key, $value) = explode('=', $line);
+                    $this->prefs[$key] = $this->convert_charset(rtrim($value), $file_charset);
+                }
+
+                // also read signature file if exists
+                if (is_readable($sigfile)) {
+                    $sig = file_get_contents($sigfile);
+                    $this->prefs['___signature___'] = $this->convert_charset($sig, $file_charset);
+                }
+
+                if (isset($this->prefs['identities']) && $this->prefs['identities'] > 1) {
+                    for ($i=1; $i < $this->prefs['identities']; $i++) {
+                        // read signature file if exists
+                        if (is_readable($sigbase.$i)) {
+                            $sig = file_get_contents($sigbase.$i);
+                            $this->prefs['___sig'.$i.'___'] = $this->convert_charset($sig, $file_charset);
+                        }
+                    }
+                }
+
+                // parse address book file
+                if (filesize($abookfile)) {
+                    foreach (file($abookfile) as $line) {
+                        $line = $this->convert_charset(rtrim($line), $file_charset);
+                        list($rec['name'], $rec['firstname'], $rec['surname'], $rec['email']) = explode('|', $line);
+                        if ($rec['name'] && $rec['email']) {
+                            $this->abook[] = $rec;
+                        }
+                    }
+                }
+            }
+        }
+        // Database backend
+        else if ($rcmail->config->get('squirrelmail_driver') == 'sql') { 
+            $this->prefs = array();
+
+            // connect to squirrelmail database
+            $db = rcube_db::factory($rcmail->config->get('squirrelmail_dsn'));
+
+            $db->set_debug($rcmail->config->get('sql_debug'));
+            $db->db_connect('r'); // connect in read mode
+
+            // retrieve prefs
+            $userprefs_table = $rcmail->config->get('squirrelmail_userprefs_table');
+            $address_table   = $rcmail->config->get('squirrelmail_address_table');
+            $db_charset      = $rcmail->config->get('squirrelmail_db_charset');
+
+            if ($db_charset) {
+                $db->query('SET NAMES '.$db_charset);
+            }
+
+            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($userprefs_table)
+                .' WHERE `user` = ?', $uname); // ? is replaced with emailaddress
+
+            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
+                $this->prefs[$sql_array['prefkey']] = rcube_charset::convert(rtrim($sql_array['prefval']), $db_charset);
+            }
+
+            // retrieve address table data
+            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($address_table)
+                .' WHERE `owner` = ?', $uname); // ? is replaced with emailaddress
+
+            // parse address book
+            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
+                $rec['name']      = rcube_charset::convert(rtrim($sql_array['nickname']), $db_charset);
+                $rec['firstname'] = rcube_charset::convert(rtrim($sql_array['firstname']), $db_charset);
+                $rec['surname']   = rcube_charset::convert(rtrim($sql_array['lastname']), $db_charset);
+                $rec['email']     = rcube_charset::convert(rtrim($sql_array['email']), $db_charset);
+                $rec['notes']     = rcube_charset::convert(rtrim($sql_array['label']), $db_charset);
+
+                if ($rec['name'] && $rec['email']) {
+                    $this->abook[] = $rec;
+                }
+            }
+        } // end if 'sql'-driver
+    }
+
+    private function convert_charset($str, $charset = null)
+    {
+        if (!$charset) {
+            return utf8_encode($sig);
+        }
+
+        return rcube_charset::convert($str, $charset, RCMAIL_CHARSET);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/subscriptions_option",
+    "type": "roundcube-plugin",
+    "description": "A plugin which can enable or disable the use of imap subscriptions. It includes a toggle on the settings page under \"Server Settings\". The preference can also be locked.",
+    "license": "GPLv3+",
+    "version": "1.3",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Ziba Scott",
+            "email": "ziba@umich.edu",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'استخدم اشتراكات IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar soscripciones IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP göndərişi istifadə et';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ВыкарыÑтоўваць IMAP-падпіÑкі';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Използвай IMAP абонаменти';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Arverañ koumanantoù IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Fes servir Subscripcions IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Používat odebírání IMAP složek';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Defnyddio tanysgrifiadau IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Brug IMAP abonnementer';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ΧÏησιμοποιήστε IMAP ΣυνδÏομές';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+
+$labels = array();
+$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Uzi IMAP-abonojn';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar subscripciones IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar suscripción a carpetas IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Kasuta IMAP tellimusi';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Erabili IMAP harpidetzak';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'از ثبت نام های IMAP استÙاده کنید';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'استÙاده از عضویت IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Käytä IMAP-tilauksia';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Brúka IMAP tekningar';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Utiliser les abonnements IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Brûk IMAP Ynskriuwing';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Bain feidhm as siúntais IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar subscricións IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'שימוש ×‘×¨×™×©×•× ×œ×ª×™×§×™×•×ª IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP előfizetések használata.';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Õ•Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ IMAP-Õ« Õ¢Õ¡ÕªÕ¡Õ¶Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar subscriptiones IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Gunakan Langganan IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Nota IMAP-áskriftir';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usa sottoscrizioni IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP 購読リストを使ã†';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ប្រើ​ការ​ជាង IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP êµ¬ë… ì‚¬ìš©';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Abonetiyên IMAPê bi kar bîne';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP-Abonnementer benotzen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Naudoti IMAP prenumeratas';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Izmantot IMAP abonēšanas iestatījumus';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Употреби IMAP претплата ';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP വരിസംഖàµà´¯à´•àµ¾ ഉപയോഗികàµà´•àµà´•';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP захиалга Ñ…ÑÑ€ÑглÑÑ…';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnementer';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Gebruik IMAP-abonneringen';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnement';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Używaj subskrypcji IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Usar função de inscrição em pastas IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Use subscrições IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Utilizare abonări IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ИÑпользовать IMAP подпиÑки';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Použiť prihlásenia IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Uporabi IMAP-naroÄnino';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Përdor Pajtime IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'КориÑти ИМÐП претплате';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Använd IMAP-prenumerationer';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ใช้ IMAP à¸à¸²à¸£à¸ªà¸¡à¸±à¸„รสมาชิà¸';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP  Aboneliklerini kullan';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'ВикориÑтовувати IMAP ПідпиÑки';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'IMAP obunadan foydalanish';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = 'Äăng ký dùng cách thức IMAP';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = '使用 IMAP 订阅';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/subscriptions_option/localization/<lang>.inc                  |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Subscriptions plugin       |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
+*/
+$labels['useimapsubscriptions']  = '使用 IMAP 訂閱';
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/subscriptions_option/subscriptions_option.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Subscription Options
+ *
+ * A plugin which can enable or disable the use of imap subscriptions.
+ * It includes a toggle on the settings page under "Server Settings".
+ * The preference can also be locked
+ *
+ * Add it to the plugins list in config.inc.php to enable the user option
+ * The user option can be hidden and set globally by adding 'use_subscriptions'
+ * to the 'dont_override' configure line:
+ * $config['dont_override'] = array('use_subscriptions');
+ * and then set the global preference
+ * $config['use_subscriptions'] = true; // or false
+ *
+ * Roundcube caches folder lists.  When a user changes this option or visits
+ * their folder list, this cache is refreshed.  If the option is on the
+ * 'dont_override' list and the global option has changed, don't expect
+ * to see the change until the folder list cache is refreshed.
+ *
+ * @author Ziba Scott
+ * @license GNU GPLv3+
+ */
+class subscriptions_option extends rcube_plugin
+{
+    public $task = 'mail|settings';
+
+    function init()
+    {
+        $this->add_texts('localization/', false);
+        $dont_override = rcmail::get_instance()->config->get('dont_override', array());
+        if (!in_array('use_subscriptions', $dont_override)) {
+            $this->add_hook('preferences_list', array($this, 'settings_blocks'));
+            $this->add_hook('preferences_save', array($this, 'save_prefs'));
+        }
+        $this->add_hook('storage_folders', array($this, 'mailboxes_list'));
+        $this->add_hook('folders_list', array($this, 'folders_list'));
+    }
+
+    function settings_blocks($args)
+    {
+        if ($args['section'] == 'server') {
+            $use_subscriptions = rcmail::get_instance()->config->get('use_subscriptions');
+            $field_id = 'rcmfd_use_subscriptions';
+            $checkbox = new html_checkbox(array('name' => '_use_subscriptions', 'id' => $field_id, 'value' => 1));
+
+            $args['blocks']['main']['options']['use_subscriptions'] = array(
+                'title' => html::label($field_id, rcube::Q($this->gettext('useimapsubscriptions'))),
+                'content' => $checkbox->show($use_subscriptions?1:0),
+            );
+        }
+
+        return $args;
+    }
+
+    function save_prefs($args)
+    {
+        if ($args['section'] == 'server') {
+            $rcmail = rcmail::get_instance();
+            $use_subscriptions = $rcmail->config->get('use_subscriptions');
+
+            $args['prefs']['use_subscriptions'] = isset($_POST['_use_subscriptions']);
+
+            // if the use_subscriptions preference changes, flush the folder cache
+            if (($use_subscriptions && !isset($_POST['_use_subscriptions'])) ||
+                (!$use_subscriptions && isset($_POST['_use_subscriptions']))) {
+                    $storage = $rcmail->get_storage();
+                    $storage->clear_cache('mailboxes');
+            }
+        }
+        return $args;
+    }
+
+    function mailboxes_list($args)
+    {
+        $rcmail = rcmail::get_instance();
+        if (!$rcmail->config->get('use_subscriptions', true)) {
+            $args['folders'] = $rcmail->get_storage()->list_folders_direct();
+        }
+        return $args;
+    }
+
+    function folders_list($args)
+    {
+        $rcmail = rcmail::get_instance();
+        if (!$rcmail->config->get('use_subscriptions', true)) {
+            foreach ($args['list'] as $idx => $data) {
+                $args['list'][$idx]['content'] = preg_replace('/<input [^>]+>/', '', $data['content']);
+            }
+        }
+        return $args;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/.#thunderbird_labels.js#	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+root@markup.co.uk.2365
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/Changelog	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,72 @@
+v1.1.4
+---
+- added Dutch translation by Tobias Geerinckx-Rice
+- added Portuguese translation by Pedro Ribeiro
+
+v1.1.3
+---
+- dsoares pull request: Enable or disable the plugin button on message selection.
+- dsoares pull request: unecessary skin checks removed
+- dsoares pull request: deprecated code fixed
+- petrkle pull request: Czech translation fixes
+
+v1.0
+---
++ added Ukranian translation by Mykyta Solomko
+- completed German translation by thomas.cr82
++ Added Section for Roundcube Settings (Issue 14)
+- fixed issue 13: bullets below navigation in separate window
+- fixed issue 15: listing of adressbook was impaired by tb_labels
+
+v0.9.6
+---
++ added Spanish translation by JPL TSolucio, S.L. (Joe Bordes)
+
+v0.9.5
+---
++ added Italian translation by Samuele Tognini
++ added Bulgarian translation by Deyan Stoykov
++ added Catalan translation by Lluís Forns Puigmartí
++ added options for configuring the plugin by Stephane Martin
+
+v0.9
+---
++ added Latvian translation by Artem Ushakov
++ added good looking icon for skin "Larry" by Stephane Martin
+
+v0.6
+---
+- disable plugin output for print message mode, suggestion via email by Markus Neubauer
++ added Hungarian translation donated by Daniel P.
+
+v0.5
+---
++ added Polish translation donated by master771
++ show message color in headers table backgroundcolor (preview mode and
+  single-message view)
++ modify thunderbird label from single message view
++ fixed broken layout in Firefox when in single message view
+
+v0.4.1
+---
+- fixed issue 2 "preview pane is broken"
+
+v0.4
+---
++ Improved javascript to use native rcmail popup functionality
++ fixed label detection/setting for roundcube 0.6 while staying compatible to <0.5.4
+
+v0.3
+---
++ Added Russian Translation by Ðиколай Ðиколай
++ Labeling multiple messages now works exactly like in Thunderbird
++ Shortcut keys 0-5 added for quick labeling like in Thunderbird
++ attach a Thunderbird Label submenu for contextmenu plugin if it is available
+
+v0.2
+---
+- bugfix for Thunderbird versions using lowercase $labelX flags
+
+v0.1
+---
+- initial release
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/LICENSE.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,10 @@
+Copyright (c) Michael Kefeder (MK) and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY MK AND THE CONTRIBUTORS “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MK OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,60 @@
+## Thunderbird Labels Plugin for Roundcube Webmail
+
+### Features
+
+* Displays the message rows using the same colors as Thunderbird does
+* Label of a message can be changed/set exactly like in Thunderbird
+* Keyboard shortcuts on keys 0-5 work like in Thunderbird
+* Integrates into contextmenu plugin when available
+* Works for skins classic and larry
+* currently available translations:
+  * English
+  * French (Français)
+  * German (Deutsch)
+  * Polish (Polski)
+  * Russian (РуÑÑкий)
+  * Hungarian (Magyar)
+  * Czech (ÄŒesky)
+  * Bulgarian (българÑки език)
+  * Catalan (català)
+  * Latvian (latviešu)
+  * Italian (italiano)
+  * Spanish (español)
+  * Slovak (SlovenÄina)
+  * Ukranian (українÑька)
+  * Brazilian Portuguese (português do Brasil)
+  * Portuguese (português)
+  * Dutch (Nederlands)
+* [screenshot](http://mike-kfed.github.io/rcmail-thunderbird-labels/)
+
+### TODO
+- allow users to have an arbitrary number of labels
+
+### INSTALL
+1. unpack to plugins directory
+2. add `, 'thunderbird_labels'` to `$rcmail_config['plugins']` in main.inc.php
+3. if you run a custom skin, e.g. `silver` then you should also symlink or copy the skins folder
+   of the plugin to the corresponding skins name, for the example given:
+   `ln -s plugins/thunderbird_labels/skins/larry plugins/thunderbird_labels/skins/silver`
+
+### CONFIGURE
+
+See config.inc.php
+
+- `tb_label_enable = true/false` (can be changed by user in prefs UI)
+- `tb_label_modify_labels = true/false`
+- `tb_label_enable_contextmenu = true/false`
+- `tb_label_enable_shortcuts = true/false` (can be changed by user in prefs UI)
+- `tb_label_style = 'bullets'` or `'thunderbird'`
+
+### Author
+Michael Kefeder
+https://github.com/mike-kfed/rcmail-thunderbird-labels
+
+### History
+This plugin is based on a patch I found for roundcube 0.3 a long time ago.
+
+Since roundcube is now able to handle the labels without modification of its source I decided to create a plugin.
+
+There exists a "Tags plugin for RoundCube" http://sourceforge.net/projects/tagspluginrc/ which does something similar, my plugin emulates thunderbirds behaviour better I think (coloring the message rows for example)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+{
+    "name": "weird-birds/thunderbird_labels",
+    "type": "roundcube-plugin",
+    "keywords": ["mail","labels","tags"],
+    "license": "BSD-2-Clause",
+    "authors": [
+        {
+            "name": "Michael Kefeder",
+            "homepage": "https://github.com/mike-kfed/rcmail-thunderbird-labels",
+            "role": "Developer"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/config.inc.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+<?php
+  // whether to globally enable thunderbird labels
+  $rcmail_config['tb_label_enable'] = true;
+  // add labels to contextmenu (if contextmenu plugin is present)
+  $rcmail_config['tb_label_enable_contextmenu'] = true;
+  // enable kb shortcuts (1-5)
+  $rcmail_config['tb_label_enable_shortcuts'] = true;
+  // users can modify labels
+  $rcmail_config['tb_label_modify_labels'] = true;
+  // style for UI: 'bullets' or 'thunderbird'
+  $rcmail_config['tb_label_style'] = "bullets";
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/docs/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+# Thunderbird Labels
+
+![screenshot](screenshot.png)
+
Binary file plugins/thunderbird_labels/docs/screenshot.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+<?php
+/**
+* Author:
+* Deyan Stoykov
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Thunderbird етикети';
+$labels['label0'] = 'Без етикет';
+$labels['label1'] = 'Важно';
+$labels['label2'] = 'Работно';
+$labels['label3'] = 'Лично';
+$labels['label4'] = 'За изпълнение';
+$labels['label5'] = 'Отложено';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+<?php
+/**
+* Author:
+* Lluís Forns Puigmartí
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Etiquetes';
+$labels['label0'] = 'Cap etiqueta';
+$labels['label1'] = 'Important';
+$labels['label2'] = 'Feina';
+$labels['label3'] = 'Personal';
+$labels['label4'] = 'Per fer';
+$labels['label5'] = 'Més tard';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+$labels = array();
+$labels['label'] = 'Štítky';
+$labels['label0'] = 'Žádný štítek';
+$labels['label1'] = 'Důležité';
+$labels['label2'] = 'Pracovní';
+$labels['label3'] = 'Osobní';
+$labels['label4'] = 'Udělat';
+$labels['label5'] = 'Později';
+
+$labels['tb_label_options'] = 'Štítky';
+$labels['tb_label_enable_option'] = 'Povolit štítky';
+$labels['tb_label_enable_shortcuts_option'] = 'Povolit klávesové zkratky';
+$labels['tb_label_button_label'] = 'Štítky';
+$labels['tb_label_button_title'] = 'Nastavení štítků zprávy';
+$labels['tb_label_contextmenu_title'] = 'Štítky';
+$labels['tb_label_style_option'] = "Styl štítků";
+$labels['tb_label_label'] = "Štítek";
+$labels['thunderbird'] = "Thunderbird";
+$labels['bullets'] = "TeÄky";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Thunderbird Schlagwörter';
+$labels['label0'] = 'Alle Entfernen';
+$labels['label1'] = 'Wichtig';
+$labels['label2'] = 'Dienstlich';
+$labels['label3'] = 'Persönlich'; // grün
+$labels['label4'] = 'Zu Erledigen'; // blau
+$labels['label5'] = 'Später';
+
+$labels['tb_label_options'] = 'Thunderbird Labels';
+$labels['tb_label_enable_option'] = 'Aktiviere Labels';
+$labels['tb_label_enable_shortcuts_option'] = 'Aktiviere Tastaturkürzel';
+$labels['tb_label_button_label'] = 'Labels';
+$labels['tb_label_button_title'] = 'Nachricht Label`n';
+$labels['tb_label_contextmenu_title'] = 'Labels';
+$labels['tb_label_style_option'] = "UI Style für Labels";
+$labels['tb_label_label'] = "Label";
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Thunderbird Labels';
+$labels['label0'] = 'No Label';
+$labels['label1'] = 'Important';
+$labels['label2'] = 'Work';
+$labels['label3'] = 'Personal';
+$labels['label4'] = 'To do';
+$labels['label5'] = 'Later';
+
+$labels['tb_label_options'] = 'Thunderbird Labels Options';
+$labels['tb_label_enable_option'] = 'Enable labels';
+$labels['tb_label_enable_shortcuts_option'] = 'Enable keyboard shortcuts';
+$labels['tb_label_button_label'] = 'Labels';
+$labels['tb_label_button_title'] = 'Set labels on messages';
+$labels['tb_label_contextmenu_title'] = 'Labels';
+$labels['tb_label_style_option'] = "UI Style for labels";
+$labels['tb_label_label'] = "Label";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+| Localization file of the Roundcube Thunderbird Labels plugin          |
+| Copyright (C) 2013, JPL TSolucio, S.L. (Joe Bordes)                   |
+|                                                                       |
+| Licensed under the GNU General Public License version 3 or            |
+| any later version.                                                    |
+|                                                                       |
++-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['label'] = 'Etiquetas Thunderbird';
+$labels['label0'] = 'Eliminar Etiquetas';
+$labels['label1'] = 'Importante';
+$labels['label2'] = 'Trabajo';
+$labels['label3'] = 'Personal';
+$labels['label4'] = 'Por Hacer';
+$labels['label5'] = 'Más Tarde';
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Tags Thunderbird ';
+$labels['label0'] = 'Aucun tag';
+$labels['label1'] = 'Important';
+$labels['label2'] = 'Travail';
+$labels['label3'] = 'Personnel';
+$labels['label4'] = 'A faire';
+$labels['label5'] = 'Plus tard';
+
+$labels['tb_label_options'] = 'Options Tags Thunderbird';
+$labels['tb_label_enable_option'] = 'Activer les tags';
+$labels['tb_label_enable_shortcuts_option'] = 'Activer les raccourcis clavier';
+$labels['tb_label_button_label'] = 'Tags';
+$labels['tb_label_button_title'] = 'Affecter des tags aux messages';
+$labels['tb_label_contextmenu_title'] = 'Tags';
+$labels['tb_label_style_option'] = 'Style graphique';
+$labels['tb_label_label'] = "Tag";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+/**
+* Author:
+* Daniel P. 
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Thunderbird Cimkék';
+$labels['label0'] = 'Minden cimke törlése';
+$labels['label1'] = 'Fontos';
+$labels['label2'] = 'Munka';
+$labels['label3'] = 'Személyes';
+$labels['label4'] = 'Teendők';
+$labels['label5'] = 'Később';
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* Samuele Tognini <samuele@samuele.netsons.org>
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Etichette Thunderbird';
+$labels['label0'] = 'Nessuna etichetta';
+$labels['label1'] = 'Importante';
+$labels['label2'] = 'Lavoro';
+$labels['label3'] = 'Personale';
+$labels['label4'] = 'Da fare';
+$labels['label5'] = 'Piu\' tardi';
+
+$labels['tb_label_options'] = 'Opzioni Etichette Thunderbird';
+$labels['tb_label_enable_option'] = 'Abilita Etichette';
+$labels['tb_label_enable_shortcuts_option'] = 'Abilita tasti rapidi';
+$labels['tb_label_button_label'] = 'Etichette';
+$labels['tb_label_button_title'] = 'Assegna etichette al messaggio';
+$labels['tb_label_contextmenu_title'] = 'Etichette';
+$labels['tb_label_style_option'] = "Stile UI per etichette";
+$labels['tb_label_label'] = "Label";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+<?php
+/**
+* Author:
+* Artem Ushakov
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Vēstules atzīme';
+$labels['label0'] = 'Izdzēst visas atzīmes';
+$labels['label1'] = 'Svarīgs';
+$labels['label2'] = 'Darba';
+$labels['label3'] = 'PersonÄls';
+$labels['label4'] = 'Izpildei';
+$labels['label5'] = 'Atlikts';
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+/**
+* Author:
+* Tobias Geerinckx-Rice
+* https://github.com/mike-kfed/rcmail-thunderbird-labels
+*/
+
+$labels = array();
+$labels['label'] = 'Thunderbird-etiketten';
+$labels['label0'] = 'Geen etiket';
+$labels['label1'] = 'Belangrijk';
+$labels['label2'] = 'Werk';
+$labels['label3'] = 'Persoonlijk';
+$labels['label4'] = 'Te doen';
+$labels['label5'] = 'Later';
+
+$labels['tb_label_options'] = 'Thunderbird-etiketten';
+$labels['tb_label_enable_option'] = 'Thunderbird-etiketten tonen en beheren';
+$labels['tb_label_enable_shortcuts_option'] = 'Sneltoetsen voor etiketteren';
+$labels['tb_label_button_label'] = 'Etiketten';
+$labels['tb_label_button_title'] = 'Etiketteer berichten';
+$labels['tb_label_contextmenu_title'] = 'Etiketten';
+$labels['tb_label_style_option'] = "Weergavestijl van etiketten";
+$labels['tb_label_label'] = "Etiket";
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* master771
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Etykiety';
+$labels['label0'] = 'Brak';
+$labels['label1'] = 'Ważne';
+$labels['label2'] = 'Praca';
+$labels['label3'] = 'Osobiste';
+$labels['label4'] = 'Do zrobienia';
+$labels['label5'] = 'Później';
+
+$labels['tb_label_options'] = 'Opcje etykiet';
+$labels['tb_label_enable_option'] = 'WÅ‚Ä…cz etykiety';
+$labels['tb_label_enable_shortcuts_option'] = 'Włącz skróty klawiaturowe';
+$labels['tb_label_button_label'] = 'Etykiety';
+$labels['tb_label_button_title'] = 'Ustaw etykiety dla wiadomości';
+$labels['tb_label_contextmenu_title'] = 'Etykiety';
+$labels['tb_label_style_option'] = 'WyglÄ…d etykiet';
+$labels['tb_label_label'] = 'Etykieta';
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<?php
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Etiquetas do Thunderbird';
+$labels['label0'] = 'Sem etiqueta';
+$labels['label1'] = 'Importante';
+$labels['label2'] = 'Trabalho';
+$labels['label3'] = 'Pessoal';
+$labels['label4'] = 'Fazer';
+$labels['label5'] = 'Depois';
+
+$labels['tb_label_options'] = 'Opções das Etiquetas do Thunderbird';
+$labels['tb_label_enable_option'] = 'Habilitar etiquetas';
+$labels['tb_label_enable_shortcuts_option'] = 'Habilitar atalhos de teclado';
+$labels['tb_label_button_label'] = 'Etiquetas';
+$labels['tb_label_button_title'] = 'Definir etiquenas nas mensagens';
+$labels['tb_label_contextmenu_title'] = 'Etiquetas';
+$labels['tb_label_style_option'] = "Estilo de UI para as etiquetas";
+$labels['tb_label_label'] = "Etiqueta";
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* Pedro Ribeiro 
+* pribeiro@net.ipl.pt
+*/
+
+$labels = array();
+$labels['label'] = 'Etiquetas';
+$labels['label0'] = 'Sem etiqueta';
+$labels['label1'] = 'Importante';
+$labels['label2'] = 'Trabalho';
+$labels['label3'] = 'Pessoal';
+$labels['label4'] = 'A fazer';
+$labels['label5'] = 'Depois';
+
+$labels['tb_label_options'] = 'Opções de etiquetas';
+$labels['tb_label_enable_option'] = 'Usar etiquetas';
+$labels['tb_label_enable_shortcuts_option'] = 'Usar atalhos de teclado';
+$labels['tb_label_button_label'] = 'Etiquetas';
+$labels['tb_label_button_title'] = 'Aplicar etiquetas nas mensagens';
+$labels['tb_label_contextmenu_title'] = 'Etiquetas';
+$labels['tb_label_style_option'] = "Estilo de etiquetas";
+$labels['tb_label_label'] = "Etiqueta";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* Ðиколай Ðиколай
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Метка Thunderbird';
+$labels['label0'] = 'Удалить вÑе метки';
+$labels['label1'] = 'Важное';
+$labels['label2'] = 'Рабочее';
+$labels['label3'] = 'Личное';
+$labels['label4'] = 'К иÑполнению';
+$labels['label5'] = 'Отложено';
+
+$labels['tb_label_options'] = 'Метки Thunderbird';
+$labels['tb_label_enable_option'] = 'Включить метки';
+$labels['tb_label_enable_shortcuts_option'] = 'Включить горÑчие клавиши';
+$labels['tb_label_button_label'] = 'Метки';
+$labels['tb_label_button_title'] = 'ПриÑвоить Ñообщению метку';
+$labels['tb_label_contextmenu_title'] = 'Метки';
+$labels['tb_label_style_option'] = "Стиль меток";
+$labels['tb_label_label'] = "Метка";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+$labels = array();
+$labels['label'] = 'Štítky';
+$labels['label0'] = 'Žiadny štítok';
+$labels['label1'] = 'Uôležité';
+$labels['label2'] = 'Pracovné';
+$labels['label3'] = 'Osobné';
+$labels['label4'] = 'Urobiť';
+$labels['label5'] = 'Neskôr';
+
+$labels['tb_label_options'] = 'Štítky';
+$labels['tb_label_enable_option'] = 'Povoliť štítky';
+$labels['tb_label_enable_shortcuts_option'] = 'Povoliť klávesové skratky';
+$labels['tb_label_button_label'] = 'Štítky';
+$labels['tb_label_button_title'] = 'Nastavení štítků zprávy';
+$labels['tb_label_contextmenu_title'] = 'Štítky';
+$labels['tb_label_style_option'] = "Štýl štítkov";
+$labels['tb_label_label'] = "Štítek";
+$labels['thunderbird'] = "Thunderbird";
+$labels['bullets'] = "Bodky";
+
+$messages = array();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+<?php
+/**
+* Author:
+* Mykyta Solomko
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*/
+
+$labels = array();
+$labels['label'] = 'Мітки Thunderbird';
+$labels['label0'] = 'Без мітки';
+$labels['label1'] = 'Важливе';
+$labels['label2'] = 'Робоче';
+$labels['label3'] = 'ОÑобиÑте';
+$labels['label4'] = 'До виконаннÑ';
+$labels['label5'] = 'ВідÑунуте';
+
+$labels['tb_label_options'] = 'ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ñ‚Ð¾Ðº Thunderbird';
+$labels['tb_label_enable_option'] = 'Ввімкнути мітки';
+$labels['tb_label_enable_shortcuts_option'] = 'Клавіатурні ÑкорочннÑ';
+$labels['tb_label_button_label'] = 'Мітки';
+$labels['tb_label_button_title'] = 'Ð’Ñтановити мітки на повідомленнÑÑ…';
+$labels['tb_label_contextmenu_title'] = 'Мітки';
+$labels['tb_label_style_option'] = "Стиль інтерфейÑу міток";
+$labels['tb_label_label'] = "Мітка";
+
+$messages = array();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/skins/classic/tb_label.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,251 @@
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*
+* CSS is Based on a patch for roundcube 0.3 I found a long time ago
+*/
+
+#messagetoolbar #tb_label_popuplink,
+#tb_label_popuplink {
+  background-image: url(thunderbird_32.png);
+  background-repeat: no-repeat;
+  width: 32px;
+  height: 32px;
+  padding: 0px !important;
+  margin: 0px 5px 0px 5px;
+  text-indent: -5000px;
+}
+
+#tb_label_popup
+{
+  width: auto;
+  position: absolute;
+}
+
+#tb_label_popup a.active
+{
+  color: inherit; /* fix for firefox */
+}
+
+.toolbarmenu li.label0 a
+{
+  color: #CCC;
+}
+.toolbarmenu li.label0,
+.toolbarmenu li.label0 a.active
+{
+  color: #333;
+}
+.toolbarmenu li.label1 a
+{
+  color: #FCC;
+}
+.toolbarmenu li.label2 a
+{
+  color: #FC3;
+}
+.toolbarmenu li.label3 a
+{
+  color: #3C3;
+}
+.toolbarmenu li.label4 a
+{
+  color: #99F;
+}
+.toolbarmenu li.label5 a
+{
+  color: #C9C;
+}
+/* Colors for single/preview message window headers display */
+table.label1
+{
+  background-color: #FCC;
+}
+table.label2
+{
+  background-color: #FC3;
+}
+table.label3
+{
+  background-color: #3C3;
+}
+table.label4
+{
+  background-color: #99F;
+}
+table.label5
+{
+  background-color: #C9C;
+}
+
+/* Support for Thunderbird label: definition of the 5 label color */
+/* Unselected (unfocused) messages */
+#messagelist tr.label1 td,
+#messagelist tr.label1 td a,
+.toolbarmenu li.label1,
+.toolbarmenu li.label1 a.active,
+span.label1
+{
+  color: #FF0000;
+}
+
+#messagelist tr.label2 td,
+#messagelist tr.label2 td a,
+.toolbarmenu li.label2,
+.toolbarmenu li.label2 a.active,
+span.label2
+{
+  color: #FF9900;
+}
+
+#messagelist tr.label3 td,
+#messagelist tr.label3 td a,
+.toolbarmenu li.label3,
+.toolbarmenu li.label3 a.active,
+span.label3
+{
+  color: #009900;
+}
+
+#messagelist tr.label4 td,
+#messagelist tr.label4 td a,
+.toolbarmenu li.label4,
+.toolbarmenu li.label4 a.active,
+span.label4
+{
+  color: #3333FF;
+}
+
+#messagelist tr.label5 td,
+#messagelist tr.label5 td a,
+.toolbarmenu li.label5,
+.toolbarmenu li.label5 a.active,
+span.label5
+{
+  color: #993399;
+}
+
+/* Selected messages */
+#messagelist tr.selected.label1 td,
+#messagelist tr.selected.label1 td a
+{
+  color: #FFFFFF;
+  background-color: #FF0000;
+}
+
+#messagelist tr.selected.label2 td,
+#messagelist tr.selected.label2 td a
+{
+  color: #FFFFFF;
+  background-color: #FF9900;
+}
+
+#messagelist tr.selected.label3 td,
+#messagelist tr.selected.label3 td a
+{
+  color: #FFFFFF;
+  background-color: #009900;
+}
+
+#messagelist tr.selected.label4 td,
+#messagelist tr.selected.label4 td a
+{
+  color: #FFFFFF;
+  background-color: #3333FF;
+}
+
+#messagelist tr.selected.label5 td,
+#messagelist tr.selected.label5 td a
+{
+  color: #FFFFFF;
+  background-color: #993399;
+}
+
+span.tb_label_dots {
+float: right;
+height: 0px;
+display: block;
+position:relative;
+top: 6px;
+}
+
+/* hack for firefox : doesnt display the bullets at the correct height */
+@-moz-document url-prefix() {
+  span.tb_label_dots {
+    top: -12px;
+  }
+}
+
+span.tb_label_dots span {
+  font-size: 32px;
+  vertical-align: middle;
+  line-height: 0px;
+}
+
+
+div#labelbox {
+  white-space: nowrap;
+  position: absolute;
+  right: 5%;
+  top: 0px;
+}
+
+
+div#labelbox span {
+    margin: 0 3px;
+    padding: 2px;
+    border: 1px solid black;
+    border-radius: 3px;
+    color: #black;
+    font-weight: bold;
+    font-size: 11px;
+}
+  
+div#labelbox span.tb_label_span1 {
+  background-color: #FF2200;
+}
+
+div#labelbox span.tb_label_span2 {
+  background-color: #FF9900;
+}
+
+div#labelbox span.tb_label_span3 {
+  background-color: #00CC00;
+}
+
+div#labelbox span.tb_label_span4 {
+  background-color: #0CF;
+}
+
+div#labelbox span.tb_label_span5 {
+  background-color: #FF33FF;
+}  
+
+
+/* Non-labeled selected message: changed to make it look "like" Thunderbird */
+/*#messagelist tr.selected td
+{
+  color: #000000;
+  background-color: #F0CB82;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td
+{
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+*/
+/* Non specific message : changed to make it look like Thunderbird */
+/*#messagelist tr.selected td a
+{
+  color: #000000;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td a
+{
+  color: #FFFFFF;
+}
+*/
Binary file plugins/thunderbird_labels/skins/classic/thunderbird_32.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/skins/default/tb_label.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,183 @@
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*
+* CSS is Based on a patch for roundcube 0.3 I found a long time ago
+*/
+
+#tb_label_popuplink {
+  background-image: url(thunderbird_32.png);
+  background-repeat: no-repeat;
+  width: 32px;
+  height: 32px;
+  padding: 0px;
+  margin: 0px 5px 0px 5px;
+}
+
+#tb_label_popup
+{
+  width: auto;
+  position: absolute;
+}
+
+#tb_label_popup a.active
+{
+  color: inherit; /* fix for firefox */
+}
+
+.toolbarmenu li.label0 a
+{
+  color: #CCC;
+}
+.toolbarmenu li.label0,
+.toolbarmenu li.label0 a.active
+{
+  color: #333;
+}
+.toolbarmenu li.label1 a
+{
+  color: #FCC;
+}
+.toolbarmenu li.label2 a
+{
+  color: #FC3;
+}
+.toolbarmenu li.label3 a
+{
+  color: #3C3;
+}
+.toolbarmenu li.label4 a
+{
+  color: #99F;
+}
+.toolbarmenu li.label5 a
+{
+  color: #C9C;
+}
+/* Colors for single/preview message window headers display */
+table.label1
+{
+  background-color: #FCC;
+}
+table.label2
+{
+  background-color: #FC3;
+}
+table.label3
+{
+  background-color: #3C3;
+}
+table.label4
+{
+  background-color: #99F;
+}
+table.label5
+{
+  background-color: #C9C;
+}
+
+/* Support for Thunderbird label: definition of the 5 label color */
+/* Unselected (unfocused) messages */
+#messagelist tr.label1 td,
+#messagelist tr.label1 td a,
+.toolbarmenu li.label1,
+.toolbarmenu li.label1 a.active
+{
+  color: #FF0000;
+}
+
+#messagelist tr.label2 td,
+#messagelist tr.label2 td a,
+.toolbarmenu li.label2,
+.toolbarmenu li.label2 a.active
+{
+  color: #FF9900;
+}
+
+#messagelist tr.label3 td,
+#messagelist tr.label3 td a,
+.toolbarmenu li.label3,
+.toolbarmenu li.label3 a.active
+{
+  color: #009900;
+}
+
+#messagelist tr.label4 td,
+#messagelist tr.label4 td a,
+.toolbarmenu li.label4,
+.toolbarmenu li.label4 a.active
+{
+  color: #3333FF;
+}
+
+#messagelist tr.label5 td,
+#messagelist tr.label5 td a,
+.toolbarmenu li.label5,
+.toolbarmenu li.label5 a.active
+{
+  color: #993399;
+}
+
+/* Selected messages */
+#messagelist tr.selected.label1 td,
+#messagelist tr.selected.label1 td a
+{
+  color: #FFFFFF;
+  background-color: #FF0000;
+}
+
+#messagelist tr.selected.label2 td,
+#messagelist tr.selected.label2 td a
+{
+  color: #FFFFFF;
+  background-color: #FF9900;
+}
+
+#messagelist tr.selected.label3 td,
+#messagelist tr.selected.label3 td a
+{
+  color: #FFFFFF;
+  background-color: #009900;
+}
+
+#messagelist tr.selected.label4 td,
+#messagelist tr.selected.label4 td a
+{
+  color: #FFFFFF;
+  background-color: #3333FF;
+}
+
+#messagelist tr.selected.label5 td,
+#messagelist tr.selected.label5 td a
+{
+  color: #FFFFFF;
+  background-color: #993399;
+}
+
+/* Non-labeled selected message: changed to make it look "like" Thunderbird */
+/*#messagelist tr.selected td
+{
+  color: #000000;
+  background-color: #F0CB82;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td
+{
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+*/
+/* Non specific message : changed to make it look like Thunderbird */
+/*#messagelist tr.selected td a
+{
+  color: #000000;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td a
+{
+  color: #FFFFFF;
+}
+*/
Binary file plugins/thunderbird_labels/skins/default/thunderbird_32.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/skins/larry/tb_label.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,245 @@
+/**
+* Author:
+* Michael Kefeder
+* http://code.google.com/p/rcmail-thunderbird-labels/
+*
+* CSS is Based on a patch for roundcube 0.3 I found a long time ago
+*/
+
+#tb_label_popuplink {
+  background-image: url(thunderbird_32.png);
+  /*background-repeat: repeat;*/
+  background-position: 50% 0px;
+  width: 32px;
+  height: 13px;
+  padding: 28px 2px 0px 2px;
+  margin: 0px 5px 0px 5px;
+}
+
+#tb_label_popup
+{
+  width: auto;
+  position: absolute;
+}
+
+#tb_label_popup a.active
+{
+  color: inherit; /* fix for firefox */
+}
+
+.toolbarmenu li.label0,
+.toolbarmenu li.label0 a.active
+{
+  color: #EEE;
+}
+/* Colors for single/preview message window headers display */
+table.label1
+{
+  background-color: #FCC;
+}
+table.label2
+{
+  background-color: #FC3;
+}
+table.label3
+{
+  background-color: #3C3;
+}
+table.label4
+{
+  background-color: #99F;
+}
+table.label5
+{
+  background-color: #C9C;
+}
+
+/* Support for Thunderbird label: definition of the 5 label color */
+/* Unselected (unfocused) messages */
+#messagelist tr.label1 td,
+#messagelist tr.label1 td a,
+.toolbarmenu li.label1,
+.toolbarmenu li.label1 a.active,
+span.label1,
+.records-table tr.selected td span.label1
+{
+  color: #FF0000 !important;
+}
+
+#messagelist tr.label2 td,
+#messagelist tr.label2 td a,
+.toolbarmenu li.label2,
+.toolbarmenu li.label2 a.active,
+span.label2,
+.records-table tr.selected td span.label2
+{
+  color: #FF9900 !important;
+}
+
+
+#messagelist tr.label3 td,
+#messagelist tr.label3 td a,
+.toolbarmenu li.label3,
+.toolbarmenu li.label3 a.active,
+span.label3,
+.records-table tr.selected td span.label3
+{
+  color: #009900 !important;
+}
+
+#messagelist tr.label4 td,
+#messagelist tr.label4 td a,
+span.label4,
+.records-table tr.selected td span.label4
+{
+  color: #3333FF !important;
+}
+
+/* lighter blue for dark-grey popup... */
+.toolbarmenu li.label4,
+.toolbarmenu li.label4 a.active
+{
+  color: #0CF;
+}
+
+#messagelist tr.label5 td,
+#messagelist tr.label5 td a,
+span.label5,
+.records-table tr.selected td span.label5
+{
+  color: #993399 !important;
+}
+
+/* lighter purple for dark-grey popup... */
+.toolbarmenu li.label5,
+.toolbarmenu li.label5 a.active
+{
+  color: #B6F;
+}
+
+/* Selected messages */
+#messagelist tr.selected.label1 td,
+#messagelist tr.selected.label1 td a
+{
+  color: #FFFFFF;
+  background-color: #FF0000;
+}
+
+#messagelist tr.selected.label2 td,
+#messagelist tr.selected.label2 td a
+{
+  color: #FFFFFF;
+  background-color: #FF9900;
+}
+
+#messagelist tr.selected.label3 td,
+#messagelist tr.selected.label3 td a
+{
+  color: #FFFFFF;
+  background-color: #009900;
+}
+
+#messagelist tr.selected.label4 td,
+#messagelist tr.selected.label4 td a
+{
+  color: #FFFFFF;
+  background-color: #3333FF;
+}
+
+#messagelist tr.selected.label5 td,
+#messagelist tr.selected.label5 td a
+{
+  color: #FFFFFF;
+  background-color: #993399;
+}
+
+span.tb_label_dots {
+float: right;
+height: 0px;
+display: block;
+position:relative;
+}
+
+/* hack for firefox : doesnt display the bullets at the correct height */
+@-moz-document url-prefix() {
+  span.tb_label_dots {
+    top: -19px;
+  }
+}
+
+span.tb_label_dots span {
+  font-size: 32px;
+  vertical-align: middle;
+  line-height: 0px;
+}
+
+
+
+div#labelbox {
+  white-space: nowrap;
+  position: absolute;
+  right: 67px;
+  top: 40px;
+}
+
+div#labelbox span {
+    margin: 0 3px;
+    padding: 3px;
+    border: 1px solid black;
+    border-radius: 3px;
+    color: #black;
+    font-weight: bold;
+}
+  
+div#labelbox span.tb_label_span1 {
+  background-color: #FF2200;
+}
+
+div#labelbox span.tb_label_span2 {
+  background-color: #FF9900;
+}
+
+div#labelbox span.tb_label_span3 {
+  background-color: #00CC00;
+}
+
+div#labelbox span.tb_label_span4 {
+  background-color: #0CF;
+}
+
+div#labelbox span.tb_label_span5 {
+  background-color: #FF33FF;
+}  
+
+/* icon for settings-section */
+#sections-table tbody #rcmrowthunderbird_labels td.section {
+	background-image: url(thunderbird_24.png);
+	background-position: 3px 3px;
+}
+
+/* Non-labeled selected message: changed to make it look "like" Thunderbird */
+/*#messagelist tr.selected td
+{
+  color: #000000;
+  background-color: #F0CB82;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td
+{
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+*/
+/* Non specific message : changed to make it look like Thunderbird */
+/*#messagelist tr.selected td a
+{
+  color: #000000;
+}
+*/
+/* Addition for selected RCM "flagged" message */
+/*#messagelist tr.selected.flagged td a
+{
+  color: #FFFFFF;
+}
+*/
Binary file plugins/thunderbird_labels/skins/larry/thunderbird_24.png has changed
Binary file plugins/thunderbird_labels/skins/larry/thunderbird_32.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/tb_label.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,426 @@
+/**
+ * Version:
+ * $Revision$
+ * Author:
+ * Michael Kefeder
+ * http://code.google.com/p/rcmail-thunderbird-labels/
+ */
+
+// global variable for contextmenu actions
+rcmail.tb_label_no = '';
+
+function rcmail_tb_label_menu(p)
+{
+	if (typeof rcmail_ui == "undefined")
+		rcmail_ui = UI;
+	if (!rcmail_ui.check_tb_popup())
+		rcmail_ui.tb_label_popup_add();
+	
+	// Show the popup menu with tags
+	// -- skin larry vs classic
+	if (typeof rcmail_ui.show_popupmenu == "undefined")
+		rcmail_ui.show_popup('tb_label_popup');
+	else
+		rcmail_ui.show_popupmenu('tb_label_popup');
+
+	return false;
+}
+
+/**
+* Shows the colors based on flag info like in Thunderbird
+* (called when a new message in inserted in list of messages)
+* maybe slow ? called for each message in mailbox at init
+*/
+function rcm_tb_label_insert(uid, row)
+{
+	if (typeof rcmail.env == 'undefined' || typeof rcmail.env.messages == 'undefined')
+		return;
+	var message = rcmail.env.messages[uid];
+	var rowobj = $(row.obj);
+	// add span container for little colored bullets
+	rowobj.find("td.subject").append("<span class='tb_label_dots'></span>");
+	
+	if (message.flags && message.flags.tb_labels) {
+	  if (message.flags.tb_labels.length) {
+  	  var spanobj = rowobj.find("td.subject span.tb_label_dots");
+  	  message.flags.tb_labels.sort(function(a,b) {return a-b;});
+  	  if (rcmail.env.tb_label_style=='bullets') {
+  	    // bullets UI style
+        for (idx in message.flags.tb_labels) {
+          spanobj.append("<span class='label"+message.flags.tb_labels[idx]+"'>&#8226;</span>");
+        }
+      } else {
+        // thunderbird UI style
+        for (idx in message.flags.tb_labels) {
+          rowobj.addClass('label' + message.flags.tb_labels[idx]);
+        }
+      }
+		}
+	}
+}
+
+/**
+* Shows the submenu of thunderbird labels
+*/
+function rcm_tb_label_submenu(p)
+{
+	if (typeof rcmail_ui == "undefined")
+		rcmail_ui = UI;
+	// setup onclick and active/non active classes
+	rcm_tb_label_create_popupmenu();
+	
+	// -- create sensible popup, using roundcubes internals
+	if (!rcmail_ui.check_tb_popup())
+		rcmail_ui.tb_label_popup_add();
+	// -- skin larry vs classic
+	if (typeof rcmail_ui.show_popupmenu == "undefined")
+		rcmail_ui.show_popup('tb_label_popup');
+	else
+		rcmail_ui.show_popupmenu('tb_label_popup');
+	return false;
+}
+
+function rcm_tb_label_flag_toggle(flag_uids, toggle_label_no, onoff)
+{
+	var headers_table = $('table.headers-table');
+	var preview_frame = $('#messagecontframe');
+	// preview frame exists, simulate environment of single message view
+	if (preview_frame.length)
+	{
+		tb_labels_for_message = preview_frame.get(0).contentWindow.tb_labels_for_message;
+		headers_table = preview_frame.contents().find('table.headers-table');
+	}
+	
+	if (!rcmail.message_list
+		&& !headers_table)
+		return;
+	// for single message view
+	if (headers_table.length && flag_uids.length) {
+		if (onoff == true) {
+		  if (rcmail.env.tb_label_style=='bullets') {
+		    $('#labelbox').append("<span class='tb_label_span"+toggle_label_no+"'>" +
+			    rcmail.env.tb_label_custom_labels[toggle_label_no] + "</span>");
+		  } else {
+		    headers_table.addClass('label'+toggle_label_no);
+		  }
+			// add to flag list
+			tb_labels_for_message.push(toggle_label_no);
+			
+		}
+		else
+		{
+			if (rcmail.env.tb_label_style=='bullets') {
+			  $("span.tb_label_span"+toggle_label_no).remove();
+			} else {
+			  headers_table.removeClass('label'+toggle_label_no);
+			}
+			
+			var pos = jQuery.inArray(toggle_label_no, tb_labels_for_message);
+			if (pos > -1) {
+				tb_labels_for_message.splice(pos, 1);
+			}
+		}
+		// exit function when in detail mode. when preview is active keep going
+		if (!rcmail.env.messages) {
+			return;
+		}
+	}
+	jQuery.each(flag_uids, function (idx, uid) {
+			var message = rcmail.env.messages[uid];
+			var row = rcmail.message_list.rows[uid];
+			if (onoff == true)
+			{
+				// add colors
+				var rowobj = $(row.obj);
+				var spanobj = rowobj.find("td.subject span.tb_label_dots");
+				if (rcmail.env.tb_label_style=='bullets') {
+				  spanobj.append("<span class='label"+toggle_label_no+"'>&#8226;</span>");
+				} else {
+				  rowobj.addClass('label'+toggle_label_no);
+				}
+				
+				// add to flag list
+				message.flags.tb_labels.push(toggle_label_no);
+			}
+			else
+			{
+				// remove colors
+				var rowobj = $(row.obj);
+				if (rcmail.env.tb_label_style=='bullets') {
+				  rowobj.find("td.subject span.tb_label_dots span.label"+toggle_label_no).remove();
+				} else {
+				  rowobj.removeClass('label'+toggle_label_no);
+				}
+				
+				// remove from flag list
+				var pos = jQuery.inArray(toggle_label_no, message.flags.tb_labels);
+				if (pos > -1)
+					message.flags.tb_labels.splice(pos, 1);
+			}
+	});
+}
+
+function rcm_tb_label_flag_msgs(flag_uids, toggle_label_no)
+{
+	rcm_tb_label_flag_toggle(flag_uids, toggle_label_no, true);
+}
+
+function rcm_tb_label_unflag_msgs(unflag_uids, toggle_label_no)
+{
+	rcm_tb_label_flag_toggle(unflag_uids, toggle_label_no, false);
+}
+
+// helper function to get selected/active messages
+function rcm_tb_label_get_selection()
+{
+	var selection = rcmail.message_list ? rcmail.message_list.get_selection() : [];
+	if (selection.length == 0 && rcmail.env.uid)
+		selection = [rcmail.env.uid, ];
+	return selection;
+}
+
+function rcm_tb_label_create_popupmenu()
+{
+	for (i = 0; i < 6; i++)
+	{
+		var cur_a = $('li.label' + i +' a');
+		
+		// add/remove active class
+		var selection = rcm_tb_label_get_selection();
+		
+		if (selection.length == 0)
+			cur_a.removeClass('active');
+		else
+			cur_a.addClass('active');
+	}
+}
+
+function rcm_tb_label_init_onclick()
+{
+	for (i = 0; i < 6; i++)
+	{
+	  // find the "HTML a tags" of tb-label submenus
+		var cur_a = $('#tb_label_popup li.label' + i +' a');
+	
+		// TODO check if click event is defined instead of unbinding?
+		cur_a.unbind('click');
+		cur_a.click(function() {
+				var toggle_label = $(this).parent().attr('class');
+				var toggle_label_no = parseInt(toggle_label.replace('label', ''));
+				var selection = rcm_tb_label_get_selection();
+				
+				if (!selection.length)
+					return;
+				
+				var from = toggle_label_no;
+				var to = toggle_label_no + 1;
+				var unset_all = false;
+				// special case flag 0 means remove all flags
+				if (toggle_label_no == 0)
+				{
+					from = 1;
+					to = 6;
+					unset_all = true;
+				}
+				for (i = from; i < to; i++)
+				{
+					toggle_label = 'label' + i;
+					toggle_label_no = i;
+					// compile list of unflag and flag msgs and then send command
+					// Thunderbird modifies multiple message flags like it did the first in the selection
+					// e.g. first message has flag1, you click flag1, every message select loses flag1, the ones not having flag1 don't get it!
+					var first_toggle_mode = 'on';
+					if (rcmail.env.messages)
+					{
+						var first_message = rcmail.env.messages[selection[0]];
+						if (first_message.flags
+							&& jQuery.inArray(toggle_label_no,
+									first_message.flags.tb_labels) >= 0
+							)
+							first_toggle_mode = 'off';
+						else
+							first_toggle_mode = 'on';
+					}
+					else // single message display
+					{
+						// flag already set?
+						if (jQuery.inArray(toggle_label_no,
+									tb_labels_for_message) >= 0)
+							first_toggle_mode = 'off';
+					}
+					var flag_uids = [];
+					var unflag_uids = [];
+					jQuery.each(selection, function (idx, uid) {
+							// message list not available (example: in detailview)
+							if (!rcmail.env.messages)
+							{
+								if (first_toggle_mode == 'on')
+									flag_uids.push(uid);
+								else
+									unflag_uids.push(uid);
+								// make sure for unset all there is the single message id
+								if (unset_all && unflag_uids.length == 0)
+									unflag_uids.push(uid);
+								return;
+							}
+							var message = rcmail.env.messages[uid];
+							if (message.flags
+								&& jQuery.inArray(toggle_label_no,
+										message.flags.tb_labels) >= 0
+								)
+							{
+								if (first_toggle_mode == 'off')
+									unflag_uids.push(uid);
+							}
+							else
+							{
+								if (first_toggle_mode == 'on')
+									flag_uids.push(uid);
+							}
+					});
+					
+					if (unset_all)
+						flag_uids = [];
+					
+					// skip sending flags to backend that are not set anywhere
+					if (flag_uids.length == 0
+						&& unflag_uids.length == 0)
+							continue;
+					
+					var str_flag_uids = flag_uids.join(',');
+					var str_unflag_uids = unflag_uids.join(',');
+					
+					var lock = rcmail.set_busy(true, 'loading');
+					// call PHP set_flags to set the flags in IMAP server
+					rcmail.http_request('plugin.thunderbird_labels.set_flags', '_flag_uids=' + str_flag_uids + '&_unflag_uids=' + str_unflag_uids + '&_mbox=' + urlencode(rcmail.env.mailbox) + "&_toggle_label=" + toggle_label, lock);
+					
+					// remove/add classes and tb labels from messages in JS
+					rcm_tb_label_flag_msgs(flag_uids, toggle_label_no);
+					rcm_tb_label_unflag_msgs(unflag_uids, toggle_label_no);
+				}
+		});
+	}
+}
+
+function rcmail_ctxm_label(command, el, pos)
+{
+	// my code works only on selected rows, contextmenu also on unselected
+	// so if no selection is available, use the uid set by contextmenu plugin
+	var selection = rcmail.message_list ? rcmail.message_list.get_selection() : [];
+	
+	if (!selection.length && !rcmail.env.uid)
+		return;
+	if (!selection.length && rcmail.env.uid)
+		rcmail.message_list.select_row(rcmail.env.uid);
+	
+	var cur_a = $('#tb_label_popup li.label' + rcmail.tb_label_no +' a');
+	if (cur_a)
+	{
+		cur_a.click();
+	}
+	
+	return;
+}
+
+function rcmail_ctxm_label_set(which)
+{
+	// hack for my contextmenu submenu hack to propagate the selected label-no
+	rcmail.tb_label_no = which;
+}
+
+
+$(document).ready(function() {
+	rcm_tb_label_init_onclick();
+	// add keyboard shortcuts for keyboard and keypad if pref tb_label_enable_shortcuts=true
+	if (rcmail.env.tb_label_enable_shortcuts) {
+    $(document).keyup(function(e) {
+      //console.log('Handler for .keyup() called.' + e.which);
+      var k = e.which;
+      if ((k > 47 && k < 58) || (k > 95 && k < 106))
+      {
+        var label_no = k % 48;
+        var cur_a = $('#tb_label_popup li.label' + label_no + ' a');
+      
+        if (cur_a)
+        {
+          cur_a.click();
+        }
+      }
+    });
+  }
+	
+	// if exists add contextmenu entries
+	if (window.rcm_contextmenu_register_command) {
+		rcm_contextmenu_register_command('ctxm_tb_label', rcmail_ctxm_label, $('#tb_label_ctxm_mainmenu'), 'moreacts', 'after', true);
+	}
+	
+	// single message displayed?
+	if (window.tb_labels_for_message)
+	{
+	  var labelbox_parent = $('div.message-headers'); // larry skin
+	  if (!labelbox_parent.length) {
+	      labelbox_parent = $("table.headers-table tbody tr:first-child"); // classic skin
+	  }
+	  labelbox_parent.append("<div id='labelbox'></div>");
+	  tb_labels_for_message.sort(function(a,b) {return a-b;});
+		jQuery.each(tb_labels_for_message, function(idx, val)
+			{
+				rcm_tb_label_flag_msgs([-1,], val);
+			}
+		);
+	}
+	
+	// add roundcube events
+	rcmail.addEventListener('insertrow', function(event) { rcm_tb_label_insert(event.uid, event.row); });
+	
+	rcmail.addEventListener('init', function(evt) {
+		// create custom button, JS method, broken layout in Firefox 9 using PHP method now
+		/*var button = $('<A>').attr('href', '#').attr('id', 'tb_label_popuplink').attr('title', rcmail.gettext('label', 'thunderbird_labels')).html('');
+		
+		button.bind('click', function(e) {
+			rcmail.command('plugin.thunderbird_labels.rcm_tb_label_submenu', this);
+			return false;
+		});
+		
+		// add and register
+		rcmail.add_element(button, 'toolbar');
+		rcmail.register_button('plugin.thunderbird_labels.rcm_tb_label_submenu', 'tb_label_popuplink', 'link');
+		*/
+		//rcmail.register_command('plugin.thunderbird_labels.rcm_tb_label_submenu', rcm_tb_label_submenu, true);
+		rcmail.register_command('plugin.thunderbird_labels.rcm_tb_label_submenu', rcm_tb_label_submenu, rcmail.env.uid);
+
+		// add event-listener to message list		
+		if (rcmail.message_list) {
+		    rcmail.message_list.addEventListener('select', function(list){
+			    rcmail.enable_command('plugin.thunderbird_labels.rcm_tb_label_submenu', list.get_selection().length > 0);
+			});
+		}
+	});
+	
+	// -- add my submenu to roundcubes UI (for roundcube classic only?)
+	if (window.rcube_mail_ui)
+	rcube_mail_ui.prototype.tb_label_popup_add = function() {
+		add = {
+			tb_label_popup:     {id:'tb_label_popup'}
+		};
+		this.popups = $.extend(this.popups, add);
+		var obj = $('#'+this.popups.tb_label_popup.id);
+		if (obj.length)
+			this.popups.tb_label_popup.obj = obj;
+		else
+			delete this.popups.tb_label_popup;
+	};
+	
+	if (window.rcube_mail_ui)
+	rcube_mail_ui.prototype.check_tb_popup = function() {
+		// larry skin doesn't have that variable, popup works automagically, return true
+		if (typeof this.popups == 'undefined')
+			return true;
+		if (this.popups.tb_label_popup)
+			return true;
+		else
+			return false;
+	};
+	
+});
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/thunderbird_labels/thunderbird_labels.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,381 @@
+<?php
+/**
+ * Thunderbird Labels Plugin for Roundcube Webmail
+ *
+ * Plugin to show the 5 Message Labels Thunderbird Email-Client provides for IMAP
+ *
+ * @version $Revision$
+ * @author Michael Kefeder
+ * @url http://code.google.com/p/rcmail-thunderbird-labels/
+ */
+class thunderbird_labels extends rcube_plugin
+{
+	public $task = 'mail|settings';
+	private $rc;
+	private $map;
+	
+	function init()
+	{
+		$this->rc = rcmail::get_instance();
+		$this->load_config();
+		$this->add_texts('localization/', false);
+		
+		$this->setCustomLabels();
+
+		if ($this->rc->task == 'mail')
+		{
+			# -- disable plugin when printing message
+			if ($this->rc->action == 'print')
+				return;
+			
+			if (!$this->rc->config->get('tb_label_enable'))
+			// disable plugin according to prefs
+				return;
+      
+			// pass 'tb_label_enable_shortcuts' and 'tb_label_style' prefs to JS
+			$this->rc->output->set_env('tb_label_enable_shortcuts', $this->rc->config->get('tb_label_enable_shortcuts'));
+			$this->rc->output->set_env('tb_label_style', $this->rc->config->get('tb_label_style'));
+			
+			$this->include_script('tb_label.js');
+			$this->add_hook('messages_list', array($this, 'read_flags'));
+			$this->add_hook('message_load', array($this, 'read_single_flags'));
+			$this->add_hook('template_object_messageheaders', array($this, 'color_headers'));
+			$this->add_hook('render_page', array($this, 'tb_label_popup'));
+			$this->include_stylesheet($this->local_skin_path() . '/tb_label.css');
+			
+			$this->name = get_class($this);
+			# -- additional TB flags
+			$this->add_tb_flags = array(
+			'LABEL1' => '$Label1',
+			'LABEL2' => '$Label2',
+			'LABEL3' => '$Label3',
+			'LABEL4' => '$Label4',
+			'LABEL5' => '$Label5',
+			);
+			$this->message_tb_labels = array();
+			
+			$this->add_button(
+				array(
+					'command' => 'plugin.thunderbird_labels.rcm_tb_label_submenu',
+					'id' => 'tb_label_popuplink',
+					'title' => 'tb_label_button_title',
+					'domain' => $this->ID,
+					'type' => 'link',
+					'content' => $this->gettext('tb_label_button_label'), 
+					'class' => 'button buttonPas disabled',
+					'classact' => 'button',
+					),
+				'toolbar'
+			);
+    
+			// JS function "set_flags" => PHP function "set_flags"
+			$this->register_action('plugin.thunderbird_labels.set_flags', array($this, 'set_flags'));
+    
+    
+			if (method_exists($this, 'require_plugin')
+				&& in_array('contextmenu', $this->rc->config->get('plugins'))
+				&& $this->require_plugin('contextmenu')
+				&& $this->rc->config->get('tb_label_enable_contextmenu'))
+			{
+				if ($this->rc->action == '')
+					$this->add_hook('render_mailboxlist', array($this, 'show_tb_label_contextmenu'));
+			}
+		}
+		elseif ($this->rc->task == 'settings')
+		{
+			$this->include_stylesheet($this->local_skin_path() . '/tb_label.css');
+			$this->add_hook('preferences_list', array($this, 'prefs_list'));
+			$this->add_hook('preferences_sections_list', array($this, 'prefs_section'));
+			$this->add_hook('preferences_save', array($this, 'prefs_save'));
+		}
+	}
+
+	private function setCustomLabels()
+	{
+		$c = $this->rc->config->get('tb_label_custom_labels');
+		if (empty($c))
+		{
+			// if no user specific labels, use localized strings by default
+			$this->rc->config->set('tb_label_custom_labels', array(
+				0 => $this->getText('label0'),
+				1 => $this->getText('label1'),
+				2 => $this->getText('label2'),
+				3 => $this->getText('label3'),
+				4 => $this->getText('label4'),
+				5 => $this->getText('label5')
+			));
+		}
+		// pass label strings to JS
+		$this->rc->output->set_env('tb_label_custom_labels', $this->rc->config->get('tb_label_custom_labels'));
+	}
+
+	// create a section for the tb-labels Settings
+	public function prefs_section($args)
+    {
+        $args['list']['thunderbird_labels'] = array(
+    	        'id' => 'thunderbird_labels',
+	            'section' => rcube::Q($this->gettext('tb_label_options'))
+		);
+
+        return $args;
+    }
+
+	// display thunderbird-labels prefs in Roundcube Settings
+	public function prefs_list($args)
+	{
+		if ($args['section'] != 'thunderbird_labels')
+			return $args;
+
+		$this->load_config();
+		$dont_override = (array) $this->rc->config->get('dont_override', array());
+		
+		$args['blocks']['tb_label'] = array();
+		$args['blocks']['tb_label']['name'] = $this->gettext('tb_label_options');
+		
+		$key = 'tb_label_enable';
+		if (!in_array($key, $dont_override))
+		{
+			$input = new html_checkbox(array(
+				'name' => $key,
+				'id' => $key,
+				'value' => 1
+			));
+			$content = $input->show($this->rc->config->get($key));
+			$args['blocks']['tb_label']['options'][$key] = array(
+				'title' => $this->gettext('tb_label_enable_option'),
+				'content' => $content
+			);
+		}
+		
+		$key = 'tb_label_enable_shortcuts';
+		if (!in_array($key, $dont_override))
+		{
+			$input = new html_checkbox(array(
+				'name' => $key,
+				'id' => $key,
+				'value' => 1
+			));
+			$content = $input->show($this->rc->config->get($key));
+			$args['blocks']['tb_label']['options'][$key] = array(
+				'title' => $this->gettext('tb_label_enable_shortcuts_option'),
+				'content' => $content
+			);
+		}
+		
+		$key = 'tb_label_style';
+		if (!in_array($key, $dont_override))
+		{
+			$select = new html_select(array(
+				'name' => $key,
+				'id' => $key
+			));
+			$select->add(array($this->gettext('thunderbird'), $this->gettext('bullets')), array('thunderbird', 'bullets'));
+			$content = $select->show($this->rc->config->get($key));
+			
+			$args['blocks']['tb_label']['options'][$key] = array(
+				'title' => $this->gettext('tb_label_style_option'),
+				'content' => $content
+			);    
+		}
+		
+		$key = 'tb_label_custom_labels';
+		if (!in_array($key, $dont_override)
+			&& $this->rc->config->get('tb_label_modify_labels'))
+		{
+			$old = $this->rc->config->get($key);
+			for($i=1; $i<=5; $i++)
+			{
+				$input = new html_inputfield(array(
+					'name' => $key.$i,
+					'id' => $key.$i,
+					'type' => 'text',
+					'autocomplete' => 'off',
+					'value' => $old[$i]));
+			
+				$args['blocks']['tb_label']['options'][$key.$i] = array(
+					'title' => $this->gettext('tb_label_label')." ".$i,
+					'content' => $input->show()
+					);
+			}
+		}
+		
+		return $args;
+	}
+
+	// save prefs after modified in UI  
+	public function prefs_save($args)
+	{
+		if ($args['section'] != 'thunderbird_labels')
+		  return $args;
+
+		
+		$this->load_config();
+		$dont_override = (array) $this->rc->config->get('dont_override', array());
+		
+		if (!in_array('tb_label_enable', $dont_override))
+			$args['prefs']['tb_label_enable'] = rcube_utils::get_input_value('tb_label_enable', rcube_utils::INPUT_POST) ? true : false;
+		
+		if (!in_array('tb_label_enable_shortcuts', $dont_override))
+		  $args['prefs']['tb_label_enable_shortcuts'] = rcube_utils::get_input_value('tb_label_enable_shortcuts', rcube_utils::INPUT_POST) ? true : false;
+
+		if (!in_array('tb_label_style', $dont_override))  
+			$args['prefs']['tb_label_style'] = rcube_utils::get_input_value('tb_label_style', rcube_utils::INPUT_POST);
+	
+		if (!in_array('tb_label_custom_labels', $dont_override)
+			&& $this->rc->config->get('tb_label_modify_labels'))
+		{
+			$args['prefs']['tb_label_custom_labels'] = array(
+			0 => $this->gettext('label0'),
+			1 => rcube_utils::get_input_value('tb_label_custom_labels1', rcube_utils::INPUT_POST),
+			2 => rcube_utils::get_input_value('tb_label_custom_labels2', rcube_utils::INPUT_POST),
+			3 => rcube_utils::get_input_value('tb_label_custom_labels3', rcube_utils::INPUT_POST),
+			4 => rcube_utils::get_input_value('tb_label_custom_labels4', rcube_utils::INPUT_POST),
+			5 => rcube_utils::get_input_value('tb_label_custom_labels5', rcube_utils::INPUT_POST)
+			);
+		}
+	
+		return $args;
+	}
+	
+	public function show_tb_label_contextmenu($args)
+	{
+		#$this->api->output->add_label('copymessage.copyingmessage');
+
+		$li = html::tag('li',
+		  array('class' => 'submenu'),
+		  '<span>'.rcube::Q($this->gettext('tb_label_contextmenu_title')).'</span>' . $this->_gen_label_submenu($args, 'tb_label_ctxm_submenu'));
+		$out .= html::tag('ul', array('id' => 'tb_label_ctxm_mainmenu'), $li);
+		$this->api->output->add_footer(html::div(array('style' => 'display: none;'), $out));
+	}
+	
+	private function _gen_label_submenu($args, $id)
+	{
+		$out = '';
+		$custom_labels = $this->rc->config->get('tb_label_custom_labels');
+		for ($i = 0; $i < 6; $i++)
+		{
+			$separator = ($i == 0)? ' separator_below' :'';
+			$out .= '<li class="label'.$i.$separator.
+			  ' ctxm_tb_label"><a href="#ctxm_tb_label" class="active" onclick="rcmail_ctxm_label_set('.$i.')"><span>'.
+			  $i.' '.$custom_labels[$i].
+			  '</span></a></li>';
+		}
+		$out = html::tag('ul', array('class' => 'popupmenu toolbarmenu folders', 'id' => $id), $out);
+		return $out;
+	}
+	
+	public function read_single_flags($args)
+	{
+		#rcube::write_log($this->name, print_r(($args['object']), true));
+		if (!isset($args['object'])) {
+				return;
+		}
+		
+		if (is_array($args['object']->headers->flags))
+		{
+			$this->message_tb_labels = array();
+			foreach ($args['object']->headers->flags as $flagname => $flagvalue)
+			{
+				$flag = is_numeric("$flagvalue")? $flagname:$flagvalue;// for compatibility with < 0.5.4
+				$flag = strtolower($flag);
+				if (preg_match('/^\$?label/', $flag))
+				{
+					$flag_no = preg_replace('/^\$?label/', '', $flag);
+					#rcube::write_log($this->name, "Single message Flag: ".$flag." Flag_no:".$flag_no);
+					$this->message_tb_labels[] = (int)$flag_no;
+				}
+			}
+		}
+		# -- no return value for this hook
+	}
+	
+	/**
+	*	Writes labelnumbers for single message display
+	*	Coloring of Message header table happens via Javascript
+	*/
+	public function color_headers($p)
+	{
+		#rcube::write_log($this->name, print_r($p, true));
+		# -- always write array, even when empty
+		$p['content'] .= '<script type="text/javascript">
+		var tb_labels_for_message = ['.join(',', $this->message_tb_labels).'];
+		</script>';
+		return $p;
+	}
+	
+	public function read_flags($args)
+	{
+		#rcube::write_log($this->name, print_r($args, true));
+		// add color information for all messages
+		// dont loop over all messages if we dont have any highlights or no msgs
+		if (!isset($args['messages']) or !is_array($args['messages'])) {
+				return $args;
+		}
+
+		// loop over all messages and add $LabelX info to the extra_flags
+		foreach($args['messages'] as $message)
+		{
+			#rcube::write_log($this->name, print_r($message->flags, true));
+			$message->list_flags['extra_flags']['tb_labels'] = array(); # always set extra_flags, needed for javascript later!
+			if (is_array($message->flags))
+			foreach ($message->flags as $flagname => $flagvalue)
+			{
+				$flag = is_numeric("$flagvalue")? $flagname:$flagvalue;// for compatibility with < 0.5.4
+				$flag = strtolower($flag);
+				if (preg_match('/^\$?label/', $flag))
+				{
+					$flag_no = preg_replace('/^\$?label/', '', $flag);
+					#rcube::write_log($this->name, "Flag:".$flag." Flag_no:".$flag_no);
+					$message->list_flags['extra_flags']['tb_labels'][] = (int)$flag_no;
+				}
+			}
+		}
+		return($args);
+	}
+	
+	// set flags in IMAP server
+	function set_flags()
+	{
+		#rcube::write_log($this->name, print_r($_GET, true));
+
+		$imap = $this->rc->imap;
+		$cbox = rcube_utils::get_input_value('_cur', rcube_utils::INPUT_GET);
+		$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET);
+		$toggle_label = rcube_utils::get_input_value('_toggle_label', rcube_utils::INPUT_GET);
+		$flag_uids = rcube_utils::get_input_value('_flag_uids', rcube_utils::INPUT_GET);
+		$flag_uids = explode(',', $flag_uids);
+		$unflag_uids = rcube_utils::get_input_value('_unflag_uids', rcube_utils::INPUT_GET);
+		$unflag_uids = explode(',', $unflag_uids);
+		
+		$imap->conn->flags = array_merge($imap->conn->flags, $this->add_tb_flags);
+		
+		#rcube::write_log($this->name, print_r($flag_uids, true));
+		#rcube::write_log($this->name, print_r($unflag_uids, true));
+
+		if (!is_array($unflag_uids)
+			|| !is_array($flag_uids))
+			return false;
+
+		$imap->set_flag($flag_uids, $toggle_label, $mbox);
+		$imap->set_flag($unflag_uids, "UN$toggle_label", $mbox);
+
+		$this->api->output->send();
+	}
+	
+	function tb_label_popup()
+	{
+	  $custom_labels = $this->rc->config->get('tb_label_custom_labels');
+		$out = '<div id="tb_label_popup" class="popupmenu">
+			<ul class="toolbarmenu">';
+		for ($i = 0; $i < 6; $i++)
+		{
+			$separator = ($i == 0)? ' separator_below' :'';
+			$out .= '<li class="label'.$i.$separator.'"><a href="#" class="active">'.$i.' '.$custom_labels[$i].'</a></li>';
+		}
+		$out .= '</ul>
+		</div>';
+		$this->rc->output->add_gui_object('tb_label_popup_obj', 'tb_label_popup');
+    	$this->rc->output->add_footer($out);
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/userinfo",
+    "type": "roundcube-plugin",
+    "description": "Sample plugin that adds a new tab to the settings section to display some information about the current user.",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'معلومات المستخدم';
+$labels['lastlogin'] = 'أخر تسجيل دخول';
+$labels['defaultidentity'] = 'الهوية الاÙتراضية';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'معلومات المستخدم';
+$labels['created'] = 'Ø£Ùنشئ ÙÙŠ';
+$labels['lastlogin'] = 'آخر دخول';
+$labels['defaultidentity'] = 'الهوية الاÙتراضية';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Información d\'usuariu';
+$labels['created'] = 'Creáu';
+$labels['lastlogin'] = 'Aniciu de sesión caberu';
+$labels['defaultidentity'] = 'Identidá por defeutu';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Məlumat';
+$labels['created'] = 'Yaradılma tarixi';
+$labels['lastlogin'] = 'Sonuncu giriÅŸ';
+$labels['defaultidentity'] = 'Default profil';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ÐÑабіÑÑ‚Ñ‹Ñ Ð·Ð²ÐµÑткі';
+$labels['created'] = 'Створаны';
+$labels['lastlogin'] = 'Ðпошні ўваход';
+$labels['defaultidentity'] = 'Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ñ‚Ð¾ÐµÑнаÑць';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ПотребителÑка информациÑ';
+$labels['created'] = 'Създаден';
+$labels['lastlogin'] = 'ПоÑледен вход';
+$labels['defaultidentity'] = 'СамоличноÑÑ‚ по подразбиране';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Titouroù an arveriad';
+$labels['created'] = 'Krouet';
+$labels['lastlogin'] = 'Kennask diwezhañ';
+$labels['defaultidentity'] = 'Identelezh dre ziouer';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'KorisniÄke informacije';
+$labels['created'] = 'Kreirano';
+$labels['lastlogin'] = 'Zadnja prijava';
+$labels['defaultidentity'] = 'Glavni identitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informació de l\'usuari';
+$labels['created'] = 'Creat';
+$labels['lastlogin'] = 'Última connexió';
+$labels['defaultidentity'] = 'Identitat per defecte';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Uživatel';
+$labels['created'] = 'Vytvořen';
+$labels['lastlogin'] = 'Naspoledy přihlášen';
+$labels['defaultidentity'] = 'Výchozí identita';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Gwybodaeth defnyddiwr';
+$labels['created'] = 'Crëwyd';
+$labels['lastlogin'] = 'Mewngofnodiad diwethaf';
+$labels['defaultidentity'] = 'Personoliaeth arferol';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Brugerinfo';
+$labels['created'] = 'Oprettet';
+$labels['lastlogin'] = 'Sidste login';
+$labels['defaultidentity'] = 'Standardidentitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Benutzerinfo';
+$labels['created'] = 'Erstellt';
+$labels['lastlogin'] = 'Letztes Login';
+$labels['defaultidentity'] = 'Standard-Absender';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Benutzerinformation';
+$labels['created'] = 'Angelegt';
+$labels['lastlogin'] = 'Letzte Anmeldung';
+$labels['defaultidentity'] = 'Standardidentität';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ΠληÏοφοÏίες χÏήστη ';
+$labels['created'] = 'ΔημιουÏγηθηκε';
+$labels['lastlogin'] = 'Τελευταια συνδεση';
+$labels['defaultidentity'] = 'ΠÏοκαθοÏισμένη ταυτότητα';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'User info';
+$labels['created'] = 'Created';
+$labels['lastlogin'] = 'Last Login';
+$labels['defaultidentity'] = 'Default Identity';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'User info';
+$labels['created'] = 'Created';
+$labels['lastlogin'] = 'Last Login';
+$labels['defaultidentity'] = 'Default Identity';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+
+$labels = array();
+$labels['userinfo'] = 'User info';
+$labels['created'] = 'Created';
+$labels['lastlogin'] = 'Last Login';
+$labels['defaultidentity'] = 'Default Identity';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informoj pri uzanto';
+$labels['created'] = 'Kreita';
+$labels['lastlogin'] = 'Lasta ensaluto';
+$labels['defaultidentity'] = 'Apriora idento';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Información de usuario';
+$labels['created'] = 'Creado';
+$labels['lastlogin'] = 'Último login';
+$labels['defaultidentity'] = 'Identidad predetermidada';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Información de usuario';
+$labels['created'] = 'Creado';
+$labels['lastlogin'] = 'Ultimo ingreso';
+$labels['defaultidentity'] = 'Identidad por defecto';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Información de usuario';
+$labels['created'] = 'Creado';
+$labels['lastlogin'] = 'Último Ingreso';
+$labels['defaultidentity'] = 'Identidad predeterminada';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Kasutaja info';
+$labels['created'] = 'Loodud';
+$labels['lastlogin'] = 'Viimane logimine';
+$labels['defaultidentity'] = 'Vaikeidentiteet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Erabiltzailearen informazioa';
+$labels['created'] = 'Sortua';
+$labels['lastlogin'] = 'Azken saioa';
+$labels['defaultidentity'] = 'Lehenetsitako identitatea';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'اطلاعات کاربر';
+$labels['created'] = 'ایجاد شد';
+$labels['lastlogin'] = 'آخرین ورود';
+$labels['defaultidentity'] = 'هویت پیش Ùرض';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'اطلاعات کاربر';
+$labels['created'] = 'ایجاد شده';
+$labels['lastlogin'] = 'آخرین ورود';
+$labels['defaultidentity'] = 'شناسه پیش‌Ùرض';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Käyttäjätiedot';
+$labels['created'] = 'Luotu';
+$labels['lastlogin'] = 'Viimeisin kirjautuminen';
+$labels['defaultidentity'] = 'Oletushenkilöys';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Brúkara upplýsing';
+$labels['created'] = 'Stovnaður';
+$labels['lastlogin'] = 'Seinast innritaður';
+$labels['defaultidentity'] = 'Sjálvsett samleiki';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Infos utilisateur';
+$labels['created'] = 'Créé';
+$labels['lastlogin'] = 'Dernière connexion';
+$labels['defaultidentity'] = 'Identité par défaut';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Brûkersynformaasje';
+$labels['created'] = 'Oanmakke';
+$labels['lastlogin'] = 'Lêste kear ynlogge';
+$labels['defaultidentity'] = 'Standert Identiteit';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Faisnéis an úsáideora';
+$labels['created'] = 'Cruthaithe';
+$labels['defaultidentity'] = 'An chéannacht réamhshocraithe';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Información de persoa usuaria';
+$labels['created'] = 'Creado';
+$labels['lastlogin'] = 'Última conexión';
+$labels['defaultidentity'] = 'Identidade predeterminada';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'פרטי המשתמש';
+$labels['created'] = 'נוצר';
+$labels['lastlogin'] = 'הכמיסה ×”×חרונה למערכת';
+$labels['defaultidentity'] = 'זהות ברירת מחדל';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informacije o korisniku';
+$labels['created'] = 'Stvoreno';
+$labels['lastlogin'] = 'Zadnja prijava (login)';
+$labels['defaultidentity'] = 'Preddefinirani identitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Felhasználói információ';
+$labels['created'] = 'Létrehozva';
+$labels['lastlogin'] = 'Utolsó bejelentkezés';
+$labels['defaultidentity'] = 'Alapértelmezett azonosító';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Õ•Õ£Õ¿Õ¾Õ¸Õ²Õ« Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€';
+$labels['created'] = 'ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¡Õ®';
+$labels['lastlogin'] = 'ÕŽÕ¥Ö€Õ»Õ«Õ¶ Õ´Õ¸Ö‚Õ¿Ö„Õ¨`';
+$labels['defaultidentity'] = 'Ô¼Õ¼Õ¥Õ¬ÕµÕ¡Õ¬ Õ«Õ¶Ö„Õ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Information de usator';
+$labels['created'] = 'Create';
+$labels['lastlogin'] = 'Ultime session';
+$labels['defaultidentity'] = 'Identitate predefinite';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informasi pengguna';
+$labels['created'] = 'Telah dibuat';
+$labels['lastlogin'] = 'Masuk Terakhir';
+$labels['defaultidentity'] = 'Identitas Standar';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Notandaupplýsingar';
+$labels['created'] = 'Búið til';
+$labels['lastlogin'] = 'Síðasta innskráning';
+$labels['defaultidentity'] = 'Sjálfgefið auðkenni';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informazioni utente';
+$labels['created'] = 'Creato';
+$labels['lastlogin'] = 'Ultimo Login';
+$labels['defaultidentity'] = 'Identità predefinita';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ユーザー情報';
+$labels['created'] = '作æˆæ—¥æ™‚';
+$labels['lastlogin'] = '最後ã®ãƒ­ã‚°ã‚¤ãƒ³';
+$labels['defaultidentity'] = '既定ã®è­˜åˆ¥æƒ…å ±';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'áž–áŸážáŸŒáž˜áž¶áž“​អ្នក​ប្រើ';
+$labels['created'] = 'បាន​បង្កើáž';
+$labels['lastlogin'] = 'ចូល​ចុងក្រោយ';
+$labels['defaultidentity'] = 'អážáŸ’ážážŸáž‰áŸ’ញាណ​លំនាំដើម';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ì‚¬ìš©ìž ì •ë³´';
+$labels['created'] = 'ìƒì„±í•¨';
+$labels['lastlogin'] = '마지막 로그ì¸';
+$labels['defaultidentity'] = '기본 ì‹ ì›';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'nawniÅŸani bakar henar';
+$labels['created'] = 'Hat afirandin';
+$labels['lastlogin'] = 'axrin hatna jurawa';
+$labels['defaultidentity'] = 'Nasnameya Pêşsalixbûyî';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'زانیاری بەکارهێنەر';
+$labels['created'] = 'دروستکرا';
+$labels['lastlogin'] = 'دوایین چوونەژوورەوە';
+$labels['defaultidentity'] = 'ناسنامەی بنەڕەتی';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Benotzer-Info';
+$labels['created'] = 'Erstallt';
+$labels['lastlogin'] = 'Leschte Login';
+$labels['defaultidentity'] = 'Standard-Identitéit';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informacija apie naudotojÄ…';
+$labels['created'] = 'Sukurtas';
+$labels['lastlogin'] = 'Paskutinį kartą prisijungė';
+$labels['defaultidentity'] = 'Numatytoji tapatybÄ—';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'InformÄcija par lietotÄju';
+$labels['created'] = 'Izveidots';
+$labels['lastlogin'] = 'PÄ“dÄ“jÄ pieteikÅ¡anÄs';
+$labels['defaultidentity'] = 'NoklusÄ“tÄ identitÄte';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Информации за кориÑникот ';
+$labels['created'] = 'Создадени ';
+$labels['lastlogin'] = 'ПоÑледно најавување ';
+$labels['defaultidentity'] = 'Стандарден идентитет ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† വിവരം';
+$labels['created'] = 'നിരàµâ€à´®àµà´®à´¿à´šàµà´šàµ';
+$labels['lastlogin'] = 'അവസാന à´ªàµà´°à´µàµ‡à´¶à´¨à´‚';
+$labels['defaultidentity'] = 'സാധാരണ à´µàµà´¯à´•àµà´¤à´¿à´¤àµà´µà´‚';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Ð¥ÑÑ€ÑглÑгчийн мÑдÑÑлÑл';
+$labels['created'] = 'Ò®Ò¯ÑÑÑн';
+$labels['lastlogin'] = 'Сүүлчийн нÑвтрÑлт';
+$labels['defaultidentity'] = 'ҮндÑÑн мÑдÑÑлÑл';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥€ माहिती';
+$labels['created'] = 'निरà¥à¤®à¤¾à¤£ केलेले';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Brukerinformasjon';
+$labels['created'] = 'Opprettet';
+$labels['lastlogin'] = 'Sist logget inn';
+$labels['defaultidentity'] = 'Standard identitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/nl_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Gebruikersinformatie';
+$labels['created'] = 'Aangemaakt';
+$labels['lastlogin'] = 'Laatste aanmelding';
+$labels['defaultidentity'] = 'Standaard identiteit';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Gebruikersinformatie';
+$labels['created'] = 'Aangemaakt';
+$labels['lastlogin'] = 'Laatste aanmelding';
+$labels['defaultidentity'] = 'Standaardidentiteit';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Brukarinfo';
+$labels['created'] = 'Laga';
+$labels['lastlogin'] = 'Sist logga inn';
+$labels['defaultidentity'] = 'Standardidentitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informacje';
+$labels['created'] = 'Utworzony';
+$labels['lastlogin'] = 'Ostatnie logowanie';
+$labels['defaultidentity'] = 'Domyślna tożsamość';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informações do usuário';
+$labels['created'] = 'Criado';
+$labels['lastlogin'] = 'Último Login';
+$labels['defaultidentity'] = 'Identidade Padrão';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informação do utilizador';
+$labels['created'] = 'Criado';
+$labels['lastlogin'] = 'Último acesso';
+$labels['defaultidentity'] = 'Identidade pré-definida';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informații utilizator';
+$labels['created'] = 'Data creării';
+$labels['lastlogin'] = 'Ultima autentificare';
+$labels['defaultidentity'] = 'Identitate principală';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ИнформациÑ';
+$labels['created'] = 'Создан';
+$labels['lastlogin'] = 'ПоÑледний вход';
+$labels['defaultidentity'] = 'Профиль по умолчанию';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Informácie o používateľovi';
+$labels['created'] = 'Vytvorené';
+$labels['lastlogin'] = 'Posledné prihlásenie';
+$labels['defaultidentity'] = 'Predvolená identita';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Podatki o uporabniku';
+$labels['created'] = 'Ustvarjen';
+$labels['lastlogin'] = 'Zadnja prijava';
+$labels['defaultidentity'] = 'Privzeta identiteta';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Të dhëna Përdoruesi';
+$labels['created'] = 'Krijuar më';
+$labels['lastlogin'] = 'Hyrja e Fundit';
+$labels['defaultidentity'] = 'Identitet Parazgjedhje';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Подаци о кориÑнику';
+$labels['created'] = 'Ðаправљено';
+$labels['lastlogin'] = 'ПоÑледња пријава';
+$labels['defaultidentity'] = 'подразумевани идентитет';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Användarinfo';
+$labels['created'] = 'Skapad';
+$labels['lastlogin'] = 'Senast inloggad';
+$labels['defaultidentity'] = 'Standardidentitet';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ข้อมูลผู้ใช้';
+$labels['created'] = 'สร้าง';
+$labels['lastlogin'] = 'เข้าระบบล่าสุด';
+$labels['defaultidentity'] = 'รหัสประจำตัวเริ่มต้น';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/ti.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ሓብሬታ በዓሠዋና ';
+$labels['created'] = 'እዋን áጥረት';
+$labels['lastlogin'] = 'እዋን እታá‹';
+$labels['defaultidentity'] = 'ዘይተለወጠ መለለይ መንáŠá‰µ';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Kullanıcı bilgisi';
+$labels['created'] = 'OluÅŸturuldu';
+$labels['lastlogin'] = 'Son Oturum Açma';
+$labels['defaultidentity'] = 'Varsayılan Kimlik';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'ІнформаціÑ';
+$labels['created'] = 'Створено';
+$labels['lastlogin'] = 'ОÑтаннє входженнÑ';
+$labels['defaultidentity'] = 'Типовий профіль';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Foydalanuvchi haqida axborot';
+$labels['created'] = 'Yaratildi';
+$labels['lastlogin'] = 'So‘nggi kirish';
+$labels['defaultidentity'] = 'Odatdagi identifikator';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = 'Thông tin ngÆ°á»i dùng';
+$labels['created'] = 'Äược tạo';
+$labels['lastlogin'] = 'Lần đăng nhập cuối';
+$labels['defaultidentity'] = 'Nhận diện mặc định';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = '用户信æ¯';
+$labels['created'] = '创建于';
+$labels['lastlogin'] = '最近登录';
+$labels['defaultidentity'] = '默认身份';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/userinfo/localization/<lang>.inc                              |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Userinfo plugin            |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
+*/
+$labels['userinfo'] = '使用者資訊';
+$labels['created'] = '建立時間';
+$labels['lastlogin'] = '上次登入';
+$labels['defaultidentity'] = 'é è¨­èº«ä»½';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/userinfo.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+/* Show user-info plugin script */
+
+if (window.rcmail) {
+  rcmail.addEventListener('init', function() {
+    // <span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span>
+    var tab = $('<span>').attr('id', 'settingstabpluginuserinfo').addClass('tablink');
+
+    $('<a>').attr('href', rcmail.env.comm_path + '&_action=plugin.userinfo')
+      .text(rcmail.get_label('userinfo', 'userinfo'))
+      .click(function(e) { return rcmail.command('plugin.userinfo', '', this, e); })
+      .appendTo(tab);
+
+    // add button and register command
+    rcmail.add_element(tab, 'tabs');
+    rcmail.register_command('plugin.userinfo', function() { rcmail.goto_url('plugin.userinfo') }, true);
+  })
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/userinfo.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+window.rcmail&&rcmail.addEventListener("init",function(){var a=$("<span>").attr("id","settingstabpluginuserinfo").addClass("tablink");$("<a>").attr("href",rcmail.env.comm_path+"&_action=plugin.userinfo").text(rcmail.get_label("userinfo","userinfo")).click(function(a){return rcmail.command("plugin.userinfo","",this,a)}).appendTo(a);rcmail.add_element(a,"tabs");rcmail.register_command("plugin.userinfo",function(){rcmail.goto_url("plugin.userinfo")},!0)});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/userinfo/userinfo.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Sample plugin that adds a new tab to the settings section
+ * to display some information about the current user
+ */
+class userinfo extends rcube_plugin
+{
+    public $task    = 'settings';
+    public $noajax  = true;
+    public $noframe = true;
+
+    function init()
+    {
+        $this->add_texts('localization/', array('userinfo'));
+        $this->register_action('plugin.userinfo', array($this, 'infostep'));
+        $this->include_script('userinfo.js');
+    }
+
+    function infostep()
+    {
+        $this->register_handler('plugin.body', array($this, 'infohtml'));
+        rcmail::get_instance()->output->send('plugin');
+    }
+
+    function infohtml()
+    {
+        $rcmail   = rcmail::get_instance();
+        $user     = $rcmail->user;
+        $identity = $user->get_identity();
+
+        $table = new html_table(array('cols' => 2, 'cellpadding' => 3));
+
+        $table->add('title', 'ID');
+        $table->add('', rcube::Q($user->ID));
+
+        $table->add('title', rcube::Q($this->gettext('username')));
+        $table->add('', rcube::Q($user->data['username']));
+
+        $table->add('title', rcube::Q($this->gettext('server')));
+        $table->add('', rcube::Q($user->data['mail_host']));
+
+        $table->add('title', rcube::Q($this->gettext('created')));
+        $table->add('', rcube::Q($user->data['created']));
+
+        $table->add('title', rcube::Q($this->gettext('lastlogin')));
+        $table->add('', rcube::Q($user->data['last_login']));
+
+        $table->add('title', rcube::Q($this->gettext('defaultidentity')));
+        $table->add('', rcube::Q($identity['name'] . ' <' . $identity['email'] . '>'));
+
+        return html::tag('h4', null, rcube::Q('Infos for ' . $user->get_username())) . $table->show();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+{
+    "name": "roundcube/vcard_attachments",
+    "type": "roundcube-plugin",
+    "description": "Detects vCard attachments and allows to add them to address book. Also allows to attach vCards of your contacts to composed messages",
+    "license": "GPLv3+",
+    "version": "4.0",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'إضاÙØ© vCard إلى دÙتر العناوين';
+$labels['vcardsavefailed'] = 'غير قادر على Ø­Ùظ بصيغة vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'إضاÙØ© صيغة vCard إلى دÙتر العناوين';
+$labels['vcardsavefailed'] = 'غير قادر على الحÙظ بصيغة vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Amestar vCard a la llibreta de direiciones';
+$labels['vcardsavefailed'] = 'Nun pue guardase la vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCard-ı kontakta daxil et';
+$labels['vcardsavefailed'] = 'vCard-ı saxlamaq alınmadı';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Дадаць vCard у адраÑную кнігу';
+$labels['vcardsavefailed'] = 'Ðемагчыма захаваць vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'ДобавÑне на vCard към адреÑната книга';
+$labels['vcardsavefailed'] = 'Ðевъзможен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Ouzhpennañ ar vCard d\'ar c\'harned chomlec\'hioù';
+$labels['vcardsavefailed'] = 'N\'haller ket enrollañ ar vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Dodaj vCard u adresar';
+$labels['vcardsavefailed'] = 'Nije moguće saÄuvati vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Afegeix la vCard a la llibreta d\'adreces';
+$labels['vcardsavefailed'] = 'No s\'ha pogut desar la vCard';
+$labels['attachvcard'] = 'Adjunta la vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Přidat vCard do adresáře';
+$labels['vcardsavefailed'] = 'Nelze uložit vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Ychwanegu vCard i\'r llyfr cyfeiriadau';
+$labels['vcardsavefailed'] = 'Methwyd cadw\'r vCard';
+$labels['attachvcard'] = 'Atodi vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Tilføj vCard til adressebogen';
+$labels['vcardsavefailed'] = 'Kan ikke gemme dette vCard';
+$labels['attachvcard'] = 'Tilføj vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
+$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
+$labels['attachvcard'] = 'Als vCard anhängen';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
+$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
+$labels['attachvcard'] = 'vCard anhängen';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'ΠÏοσθήκη vCard στο βιβλίο διευθÏνσεων';
+$labels['vcardsavefailed'] = 'Δεν είναι δυνατή η αποθήκευση του vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Add vCard to addressbook';
+$labels['vcardsavefailed'] = 'Unable to save vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Add vCard to addressbook';
+$labels['vcardsavefailed'] = 'Unable to save vCard';
+$labels['attachvcard'] = 'Attach vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+
+$labels = array();
+$labels['addvcardmsg'] = 'Add vCard to addressbook';
+$labels['vcardsavefailed'] = 'Unable to save vCard';
+$labels['attachvcard'] = 'Attach vCard';
+$labels['vcard'] = 'vCard';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Aldoni vCard al adresaro';
+$labels['vcardsavefailed'] = 'vCard ne konserveblas';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
+$labels['vcardsavefailed'] = 'No se puede guardar la vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
+$labels['vcardsavefailed'] = 'Imposible guardar vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Añadir tarjeta vCard a la libreta de direcciones';
+$labels['vcardsavefailed'] = 'No se pudo guardar la tarjeta vCard';
+$labels['attachvcard'] = 'Adjuntar vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Lisa vCard aadressiraamatusse';
+$labels['vcardsavefailed'] = 'vCard salvestamine nurjus';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Gehitu vCard helbide-liburura';
+$labels['vcardsavefailed'] = 'Ezin da vCard gorde';
+$labels['attachvcard'] = 'Erantsi vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'اÙزودن vCard به دÙترچه نشانی';
+$labels['vcardsavefailed'] = 'ناتوان در ذخیره vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Lisää vCard osoitekirjaan';
+$labels['vcardsavefailed'] = 'vCardin tallennus epäonnistui';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Legg vCard til búðstaðar savn';
+$labels['vcardsavefailed'] = 'Kann ikki goyma vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Ajouter la vCard au carnet d\'adresses';
+$labels['vcardsavefailed'] = 'Impossible d\'enregistrer la vCard';
+$labels['attachvcard'] = 'Joindre la vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCard oan adresboek tafoegje';
+$labels['vcardsavefailed'] = 'Koe vCard net bewarje';
+$labels['attachvcard'] = 'vCard taheakje';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Cuir vCard leis an leabhar seoltaí';
+$labels['attachvcard'] = 'Ceangail vCard leis';
+$labels['vcard'] = 'vCárta';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Engadir vCard á Axenda de enderezos';
+$labels['vcardsavefailed'] = 'Non foi posíbel gardar a vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'הוספת כרטיס ביקור בפורמט vCard לספר הכתובות';
+$labels['vcardsavefailed'] = '×œ× × ×™×ª×Ÿ לשמור ×ת כרטיס הביקור  vCard';
+$labels['attachvcard'] = 'צרפ/י קובץ חתימה (vCard)';
+$labels['vcard'] = 'קובץ חתימה (vCard)';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Dodaj vCard u imenik';
+$labels['vcardsavefailed'] = 'Ne mogu pohraniti vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCard hozzáadása a címjegyzékhez';
+$labels['vcardsavefailed'] = 'Sikertelen a vCard mentése';
+$labels['attachvcard'] = 'vCard csatolása';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ vCard-Õ¨ Õ°Õ¡Õ½ÖÕ¥Õ¡Õ£Ö€Ö„Õ¸Ö‚Õ´';
+$labels['vcardsavefailed'] = 'vCard-Õ« ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¸Ö‚Õ´Õ¨ Õ±Õ¡Õ­Õ¸Õ²Õ¾Õ¥Ö';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Adder le vCard al adressario';
+$labels['vcardsavefailed'] = 'Impossibile salveguardar le vCard';
+$labels['attachvcard'] = 'Attachar vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Tambahkan vCard ke buku alamat';
+$labels['vcardsavefailed'] = 'Tidak dapat menyimpan vCard';
+$labels['attachvcard'] = 'Lampirkan vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Bæta vCard í nafnaskrá';
+$labels['vcardsavefailed'] = 'Tekst ekki að vista vCard';
+$labels['attachvcard'] = 'Hengja við vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Aggiungi vCard alla rubrica';
+$labels['vcardsavefailed'] = 'Impossibile salvare vCard';
+$labels['attachvcard'] = 'Allega vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCardをアドレス帳ã«è¿½åŠ ';
+$labels['vcardsavefailed'] = 'vCardã‚’ä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚';
+$labels['attachvcard'] = 'vCardを添付';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'បន្ážáŸ‚ម vCard ទៅ​សៀវភៅ​អាសយដ្ឋាន';
+$labels['vcardsavefailed'] = 'មិន​អាច​រក្សាទុក vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = '주소ë¡ì— vCard 추가';
+$labels['vcardsavefailed'] = 'vCard를 저장할 수 ì—†ìŒ';
+$labels['attachvcard'] = 'vCard 첨부';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCardê tevî deftera navnîşanan bike';
+$labels['vcardsavefailed'] = 'Tomarkirina vCard betal bike';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCard an d\'Adressbuch setzen';
+$labels['vcardsavefailed'] = 'vCard kann net gespäichert ginn';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Įtraukti vizitinę kortelę į adresų knygą';
+$labels['vcardsavefailed'] = 'Įrašyti vizitinės kortelės nepavyko';
+$labels['attachvcard'] = 'PridÄ—ti vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Pievienot vizÄ«tkarti adreÅ¡u grÄmatai';
+$labels['vcardsavefailed'] = 'NevarÄ“ja saglabÄt vizÄ«tkarti';
+$labels['attachvcard'] = 'Pievienot vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Додади виртуелна Ð±Ð¸Ð·Ð½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ñ‡ÐºÐ° во адреÑната книга ';
+$labels['vcardsavefailed'] = 'Ðе може да Ñе Ñочува виртуелна Ð±Ð¸Ð·Ð½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ñ‡ÐºÐ°';
+$labels['attachvcard'] = 'Прикачи виртуелна Ð±Ð¸Ð·Ð½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ñ‡ÐºÐ°';
+$labels['vcard'] = 'Виртуелна Ð±Ð¸Ð·Ð½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ñ‡ÐºÐ°';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'വിലാസപàµà´¸àµà´¤à´•à´¤àµà´¤à´¿à´²àµ‡à´•àµà´•àµ വികാരàµâ€à´¡àµ ചേരàµâ€à´•àµà´•àµà´•';
+$labels['vcardsavefailed'] = 'വികാരàµâ€à´¡àµ ചേരàµâ€à´•àµà´•à´¾à´¨àµâ€ പറàµà´±à´¿à´¯à´¿à´²àµà´²';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'ХаÑгийн дÑвтÑрт vCard нÑмÑÑ…';
+$labels['vcardsavefailed'] = 'vCard хадгалж чадахгүй байна';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/mr_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'वà¥à¤¹à¥€à¤•à¤¾à¤°à¥à¤¡ पतà¥à¤¤à¥‡ नोंदवहीत समाविषà¥à¤Ÿ करा';
+$labels['vcardsavefailed'] = 'वà¥à¤¹à¥€à¤•à¤¾à¤°à¥à¤¡ जतन करणà¥à¤¯à¤¾à¤¸ असमरà¥à¤¥';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Legg til vCard i adresseboken';
+$labels['vcardsavefailed'] = 'Ikke i stand til å lagre vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Voeg vCard toe aan adresboek';
+$labels['vcardsavefailed'] = 'Kan vCard niet opslaan';
+$labels['attachvcard'] = 'vCard toevoegen';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Legg til vCard i adresseboka';
+$labels['vcardsavefailed'] = 'Klarte ikkje lagra vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Dodaj wizytówkę (vCard) do kontaktów';
+$labels['vcardsavefailed'] = 'Nie można zapisać wizytówki (vCard)';
+$labels['attachvcard'] = 'Dołącz plik vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Adicionar o vCard ao Catálogo de Endereços';
+$labels['vcardsavefailed'] = 'Impossível salvar o vCard';
+$labels['attachvcard'] = 'Anexar vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Adicionar o vCard ao Livro de Endereços';
+$labels['vcardsavefailed'] = 'Não foi possível guardar o vCard';
+$labels['attachvcard'] = 'Anexar vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Adaugă vCard la agendă';
+$labels['vcardsavefailed'] = 'Nu pot salva vCard';
+$labels['attachvcard'] = 'Atașează vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Добавить в контакты';
+$labels['vcardsavefailed'] = 'Ðе удалоÑÑŒ Ñохранить vCard';
+$labels['attachvcard'] = 'Вложить vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/si_LK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCard පත ලිපින පොතට එක් කරන්න';
+$labels['vcardsavefailed'] = 'vCard පත සුරà·à¶šà·“ම අසà·à¶»à·Šà¶®à¶šà¶ºà·’';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Pridať vizitku vCard do adresára';
+$labels['vcardsavefailed'] = 'Vizitku vCard nemožno uložiť';
+$labels['attachvcard'] = 'Pripojiť vizitku vCard';
+$labels['vcard'] = 'Vizitka vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Dodaj vCard med Stike.';
+$labels['vcardsavefailed'] = 'Stika vCard ni bilo mogoÄe shraniti.';
+$labels['attachvcard'] = 'Pripni vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Shtoje vCard-in te libër adresash';
+$labels['vcardsavefailed'] = 'S’arrihet të ruhet vCard-i';
+$labels['attachvcard'] = 'Bashkëngjitni vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Додај в-картицу у адреÑар';
+$labels['vcardsavefailed'] = 'Ðе могу да Ñачувам в-картицу';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Lägg till vCard i adressbok';
+$labels['vcardsavefailed'] = 'Kunde inte spara vCard';
+$labels['attachvcard'] = 'Bifoga vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Add vCard to addressbook';
+$labels['vcardsavefailed'] = 'Unable to save vCard';
+$labels['attachvcard'] = 'Attach vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Adres defterine vCard ekle';
+$labels['vcardsavefailed'] = 'vCard kaydedilemedi';
+$labels['attachvcard'] = 'vCard Ekle';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Додати vCard до контактів';
+$labels['vcardsavefailed'] = 'Ðе вдалоÑÑŒ зберегти vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'vCardni manzillar kitobiga qo‘shing';
+$labels['vcardsavefailed'] = 'vCardni saqlash amalga oshirilmadi';
+$labels['attachvcard'] = 'vCard ni biriktirish';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = 'Thêm vCard vào sổ địa chỉ';
+$labels['vcardsavefailed'] = 'Không thể lưu vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = '添加 vCard 至地å€ç°¿ä¸­';
+$labels['vcardsavefailed'] = '无法ä¿å­˜ vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/vcard_attachments/localization/<lang>.inc                     |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
+*/
+$labels['addvcardmsg'] = '將 vCard 加入通訊錄';
+$labels['vcardsavefailed'] = '無法儲存 vCard';
+$labels['attachvcard'] = '附上 vCard';
+$labels['vcard'] = 'vCard';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/skins/classic/style.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+
+p.vcardattachment {
+	margin: 0.5em 1em;
+	border: 1px solid #999;
+	border-radius:4px;
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	width: auto;
+}
+
+p.vcardattachment a {
+	display: block;
+	background: url(vcard_add_contact.png) 4px 0px no-repeat;
+	padding: 0.7em 0.5em 0.3em 42px;
+	height: 22px;
+}
+
+#abookactions a.vcard span {
+	text-indent: -5000px;
+	display: inline-block;
+	height: 22px;
+	width: 15px;
+	background: url(../../../../skins/classic/images/messageicons.png) 0 -168px no-repeat;
+}
+
+#abookactions a.vcard.disabled span {
+	opacity: 0.5;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/skins/classic/style.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+p.vcardattachment{margin:.5em 1em;border:1px solid #999;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;width:auto}p.vcardattachment a{display:block;background:url(vcard_add_contact.png) 4px 0 no-repeat;padding:.7em .5em .3em 42px;height:22px}#abookactions a.vcard span{text-indent:-5000px;display:inline-block;height:22px;width:15px;background:url(../../../../skins/classic/images/messageicons.png) 0 -168px no-repeat}#abookactions a.vcard.disabled span{opacity:.5}
\ No newline at end of file
Binary file plugins/vcard_attachments/skins/classic/vcard.png has changed
Binary file plugins/vcard_attachments/skins/classic/vcard_add_contact.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/skins/larry/style.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+
+p.vcardattachment {
+	margin: 0.5em 1em;
+	width: auto;
+	background: #f9f9f9;
+	border: 1px solid #d3d3d3;
+	border-radius: 4px;
+}
+
+p.vcardattachment a {
+	display: block;
+	background: url(vcard_add_contact.png) 6px 2px no-repeat;
+	padding: 1.2em 0.5em 0.7em 46px;
+}
+
+a.listbutton.vcard .inner
+{
+	background-position: center -2107px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/skins/larry/style.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+p.vcardattachment{margin:.5em 1em;width:auto;background:#f9f9f9;border:1px solid #d3d3d3;border-radius:4px}p.vcardattachment a{display:block;background:url(vcard_add_contact.png) 6px 2px no-repeat;padding:1.2em .5em .7em 46px}a.listbutton.vcard .inner{background-position:center -2107px}
\ No newline at end of file
Binary file plugins/vcard_attachments/skins/larry/vcard.png has changed
Binary file plugins/vcard_attachments/skins/larry/vcard_add_contact.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/vcard_attachments.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,327 @@
+<?php
+
+/**
+ * Detects VCard attachments and show a button to add them to address book
+ * Adds possibility to attach a contact vcard to mail messages
+ *
+ * @license GNU GPLv3+
+ * @author Thomas Bruederli, Aleksander Machniak
+ */
+class vcard_attachments extends rcube_plugin
+{
+    public $task = 'mail';
+
+    private $message;
+    private $vcard_parts  = array();
+    private $vcard_bodies = array();
+
+    function init()
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
+            $this->add_hook('message_load', array($this, 'message_load'));
+            $this->add_hook('template_object_messagebody', array($this, 'html_output'));
+        }
+        else if ($rcmail->action == 'upload') {
+            $this->add_hook('attachment_from_uri', array($this, 'attach_vcard'));
+        }
+        else if ($rcmail->action == 'compose' && !$rcmail->output->framed) {
+            $skin_path = $this->local_skin_path();
+            $btn_class = strpos($skin_path, 'classic') ? 'button' : 'listbutton';
+
+            $this->add_texts('localization', true);
+            $this->include_stylesheet($skin_path . '/style.css');
+            $this->include_script('vcardattach.js');
+            $this->add_button(
+                array(
+                    'type'     => 'link',
+                    'label'    => 'vcard_attachments.vcard',
+                    'command'  => 'attach-vcard',
+                    'class'    => $btn_class . ' vcard disabled',
+                    'classact' => $btn_class . ' vcard',
+                    'title'    => 'vcard_attachments.attachvcard',
+                    'innerclass' => 'inner',
+                ),
+                'compose-contacts-toolbar');
+        }
+        else if (!$rcmail->output->framed && (!$rcmail->action || $rcmail->action == 'list')) {
+            $icon = 'plugins/vcard_attachments/' .$this->local_skin_path(). '/vcard.png';
+            $rcmail->output->set_env('vcard_icon', $icon);
+            $this->include_script('vcardattach.js');
+        }
+
+        $this->register_action('plugin.savevcard', array($this, 'save_vcard'));
+    }
+
+    /**
+     * Check message bodies and attachments for vcards
+     */
+    function message_load($p)
+    {
+        $this->message = $p['object'];
+
+        // handle attachments vcard attachments
+        foreach ((array)$this->message->attachments as $attachment) {
+            if ($this->is_vcard($attachment)) {
+                $this->vcard_parts[] = $attachment->mime_id;
+            }
+        }
+        // the same with message bodies
+        foreach ((array)$this->message->parts as $part) {
+            if ($this->is_vcard($part)) {
+                $this->vcard_parts[]  = $part->mime_id;
+                $this->vcard_bodies[] = $part->mime_id;
+            }
+        }
+
+        if ($this->vcard_parts) {
+            $this->add_texts('localization');
+        }
+    }
+
+    /**
+     * This callback function adds a box below the message content
+     * if there is a vcard attachment available
+     */
+    function html_output($p)
+    {
+        $attach_script = false;
+
+        foreach ($this->vcard_parts as $part) {
+            $vcards = rcube_vcard::import($this->message->get_part_content($part, null, true));
+
+            // successfully parsed vcards?
+            if (empty($vcards)) {
+                continue;
+            }
+
+            // remove part's body
+            if (in_array($part, $this->vcard_bodies)) {
+                $p['content'] = '';
+            }
+
+            foreach ($vcards as $idx => $vcard) {
+                // skip invalid vCards
+                if (empty($vcard->email) || empty($vcard->email[0])) {
+                    continue;
+                }
+
+                $display = $vcard->displayname . ' <'.$vcard->email[0].'>';
+
+                // add box below message body
+                $p['content'] .= html::p(array('class' => 'vcardattachment'),
+                    html::a(array(
+                        'href'    => "#",
+                        'onclick' => "return plugin_vcard_save_contact('" . rcube::JQ($part.':'.$idx) . "')",
+                        'title'   => $this->gettext('addvcardmsg'),
+                        ),
+                        html::span(null, rcube::Q($display)))
+                );
+            }
+
+            $attach_script = true;
+        }
+
+        if ($attach_script) {
+            $this->include_script('vcardattach.js');
+            $this->include_stylesheet($this->local_skin_path() . '/style.css');
+        }
+
+        return $p;
+    }
+
+    /**
+     * Handler for request action
+     */
+    function save_vcard()
+    {
+        $this->add_texts('localization', true);
+
+        $uid     = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
+        $mbox    = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
+        $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST);
+
+        $rcmail  = rcmail::get_instance();
+        $message = new rcube_message($uid, $mbox);
+
+        if ($uid && $mime_id) {
+            list($mime_id, $index) = explode(':', $mime_id);
+            $part = $message->get_part_content($mime_id, null, true);
+        }
+
+        $error_msg = $this->gettext('vcardsavefailed');
+
+        if ($part && ($vcards = rcube_vcard::import($part))
+            && ($vcard = $vcards[$index]) && $vcard->displayname && $vcard->email
+        ) {
+            $CONTACTS = $this->get_address_book();
+            $email    = $vcard->email[0];
+            $contact  = $vcard->get_assoc();
+            $valid    = true;
+
+            // skip entries without an e-mail address or invalid
+            if (empty($email) || !$CONTACTS->validate($contact, true)) {
+                $valid = false;
+            }
+            else {
+                // We're using UTF8 internally
+                $email = rcube_utils::idn_to_utf8($email);
+
+                // compare e-mail address
+                $existing = $CONTACTS->search('email', $email, 1, false);
+                // compare display name
+                if (!$existing->count && $vcard->displayname) {
+                    $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
+                }
+
+                if ($existing->count) {
+                    $rcmail->output->command('display_message', $this->gettext('contactexists'), 'warning');
+                    $valid = false;
+                }
+            }
+
+            if ($valid) {
+                $plugin = $rcmail->plugins->exec_hook('contact_create', array('record' => $contact, 'source' => null));
+                $contact = $plugin['record'];
+
+                if (!$plugin['abort'] && $CONTACTS->insert($contact))
+                    $rcmail->output->command('display_message', $this->gettext('addedsuccessfully'), 'confirmation');
+                else
+                    $rcmail->output->command('display_message', $error_msg, 'error');
+            }
+        }
+        else {
+            $rcmail->output->command('display_message', $error_msg, 'error');
+        }
+
+        $rcmail->output->send();
+    }
+
+    /**
+     * Checks if specified message part is a vcard data
+     *
+     * @param rcube_message_part Part object
+     *
+     * @return boolean True if part is of type vcard
+     */
+    function is_vcard($part)
+    {
+        return (
+            // Content-Type: text/vcard;
+            $part->mimetype == 'text/vcard' ||
+            // Content-Type: text/x-vcard;
+            $part->mimetype == 'text/x-vcard' ||
+            // Content-Type: text/directory; profile=vCard;
+            ($part->mimetype == 'text/directory' && (
+                ($part->ctype_parameters['profile'] &&
+                    strtolower($part->ctype_parameters['profile']) == 'vcard')
+            // Content-Type: text/directory; (with filename=*.vcf)
+                    || ($part->filename && preg_match('/\.vcf$/i', $part->filename))
+                )
+            )
+        );
+    }
+
+    /**
+     * Getter for default (writable) addressbook
+     */
+    private function get_address_book()
+    {
+        if ($this->abook) {
+            return $this->abook;
+        }
+
+        $rcmail = rcmail::get_instance();
+        $abook  = $rcmail->config->get('default_addressbook');
+
+        // Get configured addressbook
+        $CONTACTS = $rcmail->get_address_book($abook, true);
+
+        // Get first writeable addressbook if the configured doesn't exist
+        // This can happen when user deleted the addressbook (e.g. Kolab folder)
+        if ($abook === null || $abook === '' || !is_object($CONTACTS)) {
+            $source   = reset($rcmail->get_address_sources(true));
+            $CONTACTS = $rcmail->get_address_book($source['id'], true);
+        }
+
+        return $this->abook = $CONTACTS;
+    }
+
+    /**
+     * Attaches a contact vcard to composed mail
+     */
+    public function attach_vcard($args)
+    {
+        if (preg_match('|^vcard://(.+)$|', $args['uri'], $m)) {
+            list($cid, $source) = explode('-', $m[1]);
+
+            $vcard  = $this->get_contact_vcard($source, $cid, $filename);
+            $params = array(
+                'filename' => $filename,
+                'mimetype' => 'text/vcard',
+            );
+
+            if ($vcard) {
+                $args['attachment'] = rcmail_save_attachment($vcard, null, $args['compose_id'], $params);
+            }
+        }
+
+        return $args;
+    }
+
+    /**
+     * Get vcard data for specified contact
+     */
+    private function get_contact_vcard($source, $cid, &$filename = null)
+    {
+        $rcmail  = rcmail::get_instance();
+        $source  = $rcmail->get_address_book($source);
+        $contact = $source->get_record($cid, true);
+
+        if ($contact) {
+            $fieldmap = $source ? $source->vcard_map : null;
+
+            if (empty($contact['vcard'])) {
+                $vcard = new rcube_vcard('', RCUBE_CHARSET, false, $fieldmap);
+                $vcard->reset();
+
+                foreach ($contact as $key => $values) {
+                    list($field, $section) = explode(':', $key);
+                    // avoid unwanted casting of DateTime objects to an array
+                    // (same as in rcube_contacts::convert_save_data())
+                    if (is_object($values) && is_a($values, 'DateTime')) {
+                        $values = array($values);
+                    }
+
+                    foreach ((array) $values as $value) {
+                        if (is_array($value) || is_a($value, 'DateTime') || @strlen($value)) {
+                            $vcard->set($field, $value, strtoupper($section));
+                        }
+                    }
+                }
+
+                $contact['vcard'] = $vcard->export();
+            }
+
+            $name     = rcube_addressbook::compose_list_name($contact);
+            $filename = (self::parse_filename($name) ?: 'contact') . '.vcf';
+
+            // fix folding and end-of-line chars
+            $vcard = preg_replace('/\r|\n\s+/', '', $contact['vcard']);
+            $vcard = preg_replace('/\n/', rcube_vcard::$eol, $vcard);
+
+            return rcube_vcard::rfc2425_fold($vcard) . rcube_vcard::$eol;
+        }
+    }
+
+    /**
+     * Helper function to convert contact name into filename
+     */
+    static private function parse_filename($str)
+    {
+        $str = preg_replace('/[\t\n\r\0\x0B:\/]+\s*/', ' ', $str);
+
+        return trim($str, " ./_");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/vcardattach.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,72 @@
+/**
+ * vcard_attachments plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+function plugin_vcard_save_contact(mime_id)
+{
+  var lock = rcmail.set_busy(true, 'loading');
+  rcmail.http_post('plugin.savevcard', { _uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, _part: mime_id }, lock);
+
+  return false;
+}
+
+function plugin_vcard_insertrow(data)
+{
+  var ctype = data.row.ctype;
+
+  if (ctype == 'text/vcard' || ctype == 'text/x-vcard' || ctype == 'text/directory') {
+    $('#rcmrow' + rcmail.html_identifier(data.uid, true) + ' > td.attachment')
+      .html('<img src="' + rcmail.env.vcard_icon + '" alt="" />');
+  }
+}
+
+function plugin_vcard_attach()
+{
+  var id, n, contacts = [],
+    ts = new Date().getTime(),
+    args = {_uploadid: ts, _id: rcmail.env.compose_id};
+
+  for (n=0; n < rcmail.contact_list.selection.length; n++) {
+    id = rcmail.contact_list.selection[n];
+    if (id && id.charAt(0) != 'E' && rcmail.env.contactdata[id])
+      contacts.push(id);
+  }
+
+  if (!contacts.length)
+    return false;
+
+  args._uri = 'vcard://' + contacts.join(',');
+
+  // add to attachments list
+  if (!rcmail.add2attachment_list(ts, {name: '', html: rcmail.get_label('attaching'), classname: 'uploading', complete: false}))
+    rcmail.file_upload_id = rcmail.set_busy(true, 'attaching');
+
+  rcmail.http_post('upload', args);
+}
+
+window.rcmail && rcmail.addEventListener('init', function(evt) {
+  if (rcmail.gui_objects.messagelist)
+    rcmail.addEventListener('insertrow', function(data, evt) { plugin_vcard_insertrow(data); });
+
+  if (rcmail.env.action == 'compose' && rcmail.gui_objects.contactslist) {
+    rcmail.env.compose_commands.push('attach-vcard');
+    rcmail.register_command('attach-vcard', function() { plugin_vcard_attach(); });
+    rcmail.contact_list.addEventListener('select', function(list) {
+      // TODO: support attaching more than one at once
+      rcmail.enable_command('attach-vcard', list.selection.length == 1 && rcmail.contact_list.selection[0].charAt(0) != 'E');
+    });
+  }
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/vcard_attachments/vcardattach.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+/**
+ * vcard_attachments plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2012-2016, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+function plugin_vcard_save_contact(b){var a=rcmail.set_busy(!0,"loading");rcmail.http_post("plugin.savevcard",{_uid:rcmail.env.uid,_mbox:rcmail.env.mailbox,_part:b},a);return!1}function plugin_vcard_insertrow(b){var a=b.row.ctype;"text/vcard"!=a&&"text/x-vcard"!=a&&"text/directory"!=a||$("#rcmrow"+rcmail.html_identifier(b.uid,!0)+" > td.attachment").html('<img src="'+rcmail.env.vcard_icon+'" alt="" />')}
+function plugin_vcard_attach(){var b,a,c=[],d=(new Date).getTime(),e={_uploadid:d,_id:rcmail.env.compose_id};for(a=0;a<rcmail.contact_list.selection.length;a++)(b=rcmail.contact_list.selection[a])&&"E"!=b.charAt(0)&&rcmail.env.contactdata[b]&&c.push(b);if(!c.length)return!1;e._uri="vcard://"+c.join(",");rcmail.add2attachment_list(d,{name:"",html:rcmail.get_label("attaching"),classname:"uploading",complete:!1})||(rcmail.file_upload_id=rcmail.set_busy(!0,"attaching"));rcmail.http_post("upload",e)}
+window.rcmail&&rcmail.addEventListener("init",function(b){rcmail.gui_objects.messagelist&&rcmail.addEventListener("insertrow",function(a,b){plugin_vcard_insertrow(a)});"compose"==rcmail.env.action&&rcmail.gui_objects.contactslist&&(rcmail.env.compose_commands.push("attach-vcard"),rcmail.register_command("attach-vcard",function(){plugin_vcard_attach()}),rcmail.contact_list.addEventListener("select",function(a){rcmail.enable_command("attach-vcard",1==a.selection.length&&"E"!=rcmail.contact_list.selection[0].charAt(0))}))});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/virtuser_file/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/virtuser_file",
+    "type": "roundcube-plugin",
+    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in files.",
+    "license": "GPLv3+",
+    "version": "1.0",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/virtuser_file/virtuser_file.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * File based User-to-Email and Email-to-User lookup
+ *
+ * Add it to the plugins list in config.inc.php and set
+ * path to a virtuser table file to resolve user names and e-mail
+ * addresses
+ * $rcmail['virtuser_file'] = '';
+ *
+ * @license GNU GPLv3+
+ * @author Aleksander Machniak
+ */
+class virtuser_file extends rcube_plugin
+{
+    private $file;
+    private $app;
+
+    function init()
+    {
+        $this->app = rcmail::get_instance();
+        $this->file = $this->app->config->get('virtuser_file');
+
+        if ($this->file) {
+            $this->add_hook('user2email', array($this, 'user2email'));
+            $this->add_hook('email2user', array($this, 'email2user'));
+        }
+    }
+
+    /**
+     * User > Email
+     */
+    function user2email($p)
+    {
+        $r = $this->findinvirtual('/\s' . preg_quote($p['user'], '/') . '\s*$/');
+        $result = array();
+
+        for ($i=0; $i<count($r); $i++) {
+            $arr = preg_split('/\s+/', $r[$i]);
+
+            if (count($arr) > 0 && strpos($arr[0], '@')) {
+                $result[] = rcube_utils::idn_to_ascii(trim(str_replace('\\@', '@', $arr[0])));
+
+                if ($p['first']) {
+                    $p['email'] = $result[0];
+                    break;
+                }
+            }
+        }
+
+        $p['email'] = empty($result) ? NULL : $result;
+
+        return $p;
+    }
+
+    /**
+     * Email > User
+     */
+    function email2user($p)
+    {
+        $r = $this->findinvirtual('/^' . preg_quote($p['email'], '/') . '\s/');
+
+        for ($i=0; $i<count($r); $i++) {
+            $arr = preg_split('/\s+/', trim($r[$i]));
+
+            if (count($arr) > 0) {
+                $p['user'] = trim($arr[count($arr)-1]);
+                break;
+            }
+        }
+
+        return $p;
+    }
+
+    /**
+     * Find matches of the given pattern in virtuser file
+     *
+     * @param string Regular expression to search for
+     * @return array Matching entries
+     */
+    private function findinvirtual($pattern)
+    {
+        $result = array();
+        $virtual = null;
+
+        if ($this->file)
+            $virtual = file($this->file);
+
+        if (empty($virtual))
+            return $result;
+
+        // check each line for matches
+        foreach ($virtual as $line) {
+            $line = trim($line);
+            if (empty($line) || $line[0]=='#')
+                continue;
+
+            if (preg_match($pattern, $line))
+                $result[] = $line;
+        }
+
+        return $result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/virtuser_query/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+{
+    "name": "roundcube/virtuser_query",
+    "type": "roundcube-plugin",
+    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in SQL database.",
+    "license": "GPLv3+",
+    "version": "2.0",
+    "authors": [
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/virtuser_query/virtuser_query.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,164 @@
+<?php
+
+/**
+ * DB based User-to-Email and Email-to-User lookup
+ *
+ * Add it to the plugins list in config.inc.php and set
+ * SQL queries to resolve usernames, e-mail addresses and hostnames from the database
+ * %u will be replaced with the current username for login.
+ * %m will be replaced with the current e-mail address for login.
+ *
+ * Queries should select the user's e-mail address, username or the imap hostname as first column
+ * The email query could optionally select identity data columns in specified order:
+ *    name, organization, reply-to, bcc, signature, html_signature
+ *
+ * $config['virtuser_query'] = array('email' => '', 'user' => '', 'host' => '', 'alias' => '');
+ *
+ * The email query can return more than one record to create more identities.
+ * This requires identities_level option to be set to value less than 2.
+ *
+ * By default Roundcube database is used. To use different database (or host)
+ * you can specify DSN string in $config['virtuser_query_dsn'] option.
+ *
+ * @author Aleksander Machniak <alec@alec.pl>
+ * @author Steffen Vogel
+ * @author Tim Gerundt
+ * @license GNU GPLv3+
+ */
+class virtuser_query extends rcube_plugin
+{
+    private $config;
+    private $app;
+    private $db;
+
+    function init()
+    {
+        $this->app    = rcmail::get_instance();
+        $this->config = $this->app->config->get('virtuser_query');
+
+        if (!empty($this->config)) {
+            if (is_string($this->config)) {
+                $this->config = array('email' => $this->config);
+            }
+
+            if ($this->config['email']) {
+                $this->add_hook('user2email', array($this, 'user2email'));
+            }
+            if ($this->config['user']) {
+                $this->add_hook('email2user', array($this, 'email2user'));
+            }
+            if ($this->config['host']) {
+                $this->add_hook('authenticate', array($this, 'user2host'));
+            }
+            if ($this->config['alias']) {
+                $this->add_hook('authenticate', array($this, 'alias2user'));
+            }
+        }
+    }
+
+    /**
+     * User > Email
+     */
+    function user2email($p)
+    {
+        $dbh = $this->get_dbh();
+
+        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['email']));
+
+        while ($sql_arr = $dbh->fetch_array($sql_result)) {
+            if (strpos($sql_arr[0], '@')) {
+                if ($p['extended'] && count($sql_arr) > 1) {
+                    $result[] = array(
+                        'email'          => rcube_utils::idn_to_ascii($sql_arr[0]),
+                        'name'           => (string) $sql_arr[1],
+                        'organization'   => (string) $sql_arr[2],
+                        'reply-to'       => (string) rcube_utils::idn_to_ascii($sql_arr[3]),
+                        'bcc'            => (string) rcube_utils::idn_to_ascii($sql_arr[4]),
+                        'signature'      => (string) $sql_arr[5],
+                        'html_signature' => (int) $sql_arr[6],
+                    );
+                }
+                else {
+                    $result[] = $sql_arr[0];
+                }
+
+                if ($p['first']) {
+                    break;
+                }
+            }
+        }
+
+        $p['email'] = $result;
+
+        return $p;
+    }
+
+    /**
+     * EMail > User
+     */
+    function email2user($p)
+    {
+        $dbh = $this->get_dbh();
+
+        $sql_result = $dbh->query(preg_replace('/%m/', $dbh->escape($p['email']), $this->config['user']));
+
+        if ($sql_arr = $dbh->fetch_array($sql_result)) {
+            $p['user'] = $sql_arr[0];
+        }
+
+        return $p;
+    }
+
+    /**
+     * User > Host
+     */
+    function user2host($p)
+    {
+        $dbh = $this->get_dbh();
+
+        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['host']));
+
+        if ($sql_arr = $dbh->fetch_array($sql_result)) {
+            $p['host'] = $sql_arr[0];
+        }
+
+        return $p;
+    }
+
+    /**
+     * Alias > User
+     */
+    function alias2user($p)
+    {
+        $dbh = $this->get_dbh();
+
+        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['alias']));
+
+        if ($sql_arr = $dbh->fetch_array($sql_result)) {
+            $p['user'] = $sql_arr[0];
+        }
+
+        return $p;
+    }
+
+    /**
+     * Initialize database handler
+     */
+    function get_dbh()
+    {
+        if (!$this->db) {
+            if ($dsn = $this->app->config->get('virtuser_query_dsn')) {
+                // connect to the virtuser database
+                $this->db = rcube_db::factory($dsn);
+                $this->db->set_debug((bool)$this->app->config->get('sql_debug'));
+                $this->db->db_connect('r'); // connect in read mode
+            }
+            else {
+                $this->db = $this->app->get_dbh();
+            }
+        }
+
+        return $this->db;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+Roundcube Webmail ZipDownload
+=============================
+This plugin adds an option to download all attachments to a message in one zip
+file, when a message has multiple attachments. The plugin also allows the
+download of a selection of messages in 1 zip file.
+
+Requirements
+============
+* php_zip extension (including ZipArchive class)
+  Either install it via PECL or for PHP >= 5.2 compile with --enable-zip option
+
+License
+=======
+This plugin is released under the GNU General Public License Version 3
+or later (http://www.gnu.org/licenses/gpl.html).
+
+Even if skins might contain some programming work, they are not considered
+as a linked part of the plugin and therefore skins DO NOT fall under the
+provisions of the GPL license. See the README file located in the core skins
+folder for details on the skin license.
+
+Install
+=======
+* Place this plugin folder into plugins directory of Roundcube
+* Add zipdownload to $config['plugins'] in your Roundcube config
+
+NB: When downloading the plugin from GitHub you will need to create a
+directory called zipdownload and place the files in there, ignoring the
+root directory in the downloaded archive
+
+Config
+======
+The default config file is plugins/zipdownload/config.inc.php.dist
+Rename this to plugins/zipdownload/config.inc.php
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+{
+    "name": "roundcube/zipdownload",
+    "type": "roundcube-plugin",
+    "description": "Adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. Also allows the download of a selection of messages in one zip file. Supports mbox and maildir format.",
+    "license": "GPLv3+",
+    "version": "3.3",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "roundcube@gmail.com",
+            "role": "Lead"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl",
+            "role": "Lead"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://plugins.roundcube.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "roundcube/plugin-installer": ">=0.1.3",
+        "ext-zip": "*"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/config.inc.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * ZipDownload configuration file
+ */
+
+// Zip attachments
+// Only show the link when there are more than this many attachments
+// -1 to prevent downloading of attachments as zip
+$config['zipdownload_attachments'] = 1;
+
+// Zip selection of messages
+$config['zipdownload_selection'] = false;
+
+// Charset to use for filenames inside the zip
+$config['zipdownload_charset'] = 'ISO-8859-1';
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ar.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'تنزيل كل المرÙقات';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ar_SA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'تحميل جميع المرÙقات';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ast.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descargar tolos axuntos';
+$labels['download'] = 'Descargar...';
+$labels['downloadmbox'] = 'Formatu Mbox (.zip)';
+$labels['downloadmaildir'] = 'Formatu Maildir (.zip)';
+$labels['downloademl'] = 'Fonte (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/az_AZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Bütün qoşmaları endir';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/be_BE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Спампаваць уÑе далучÑнні';
+$labels['download'] = 'СцÑгнуць...';
+$labels['downloadmbox'] = 'Фармат mbox (.zip)';
+$labels['downloadmaildir'] = 'Фармат maildir (.zip)';
+$labels['downloademl'] = 'Выточны файл (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/bg_BG.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'ИзтеглÑне на вÑички прикачени файлове';
+$labels['download'] = 'ИзтеглÑне...';
+$labels['downloadmbox'] = 'Mbox формат (.zip)';
+$labels['downloadmaildir'] = 'Maildir формат (.zip)';
+$labels['downloademl'] = 'Outlook формат (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/br.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Pellgargañ an holl stagadennoù';
+$labels['download'] = 'Pellgargañ…';
+$labels['downloadmbox'] = 'Mentrezh Mbox (.zip)';
+$labels['downloadmaildir'] = 'Mentrezh Maildir (.zip)';
+$labels['downloademl'] = 'Tarzh (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/bs_BA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Preuzmi sve priloge';
+$labels['download'] = 'Preuzmi...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Izvorno (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ca_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descarrega tots els adjunts';
+$labels['download'] = 'Descarrega...';
+$labels['downloadmbox'] = 'Format mbox (.zip)';
+$labels['downloadmaildir'] = 'Format maildir (.zip)';
+$labels['downloademl'] = 'Codi font (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/cs_CZ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Stáhnout všechny přílohy';
+$labels['download'] = 'Stáhnout...';
+$labels['downloadmbox'] = 'Formát mbox (.zip)';
+$labels['downloadmaildir'] = 'Formát maildir (.zip)';
+$labels['downloademl'] = 'Zdroj (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/cy_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Lawrlwytho\'r holl atodiadau';
+$labels['download'] = 'Lawrlwytho...';
+$labels['downloadmbox'] = 'Fformat mbox (.zip)';
+$labels['downloadmaildir'] = 'Fformat maildir (.zip)';
+$labels['downloademl'] = 'Ffynhonnell (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/da_DK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Download alle som .zip-fil';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Kilde (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/de_CH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Alle Anhänge herunterladen';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox Format (.zip)';
+$labels['downloadmaildir'] = 'Maildir Format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/de_DE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Alle Anhänge herunterladen';
+$labels['download'] = 'Herunterladen...';
+$labels['downloadmbox'] = 'Mbox-Format (.zip)';
+$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
+$labels['downloademl'] = 'Quelltext (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/el_GR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Λήψη όλων των συνημμένων';
+$labels['download'] = 'Λήψη...';
+$labels['downloadmbox'] = 'ΜοÏφή mbox (.zip)';
+$labels['downloadmaildir'] = 'ΜοÏφή maildir (.zip)';
+$labels['downloademl'] = 'Πηγή (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/en_CA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Download all attachments';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/en_GB.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Download all attachments';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/en_US.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+
+$labels = array();
+$labels['downloadall'] = 'Download all attachments';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/eo.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'ElÅuti ĉiujn kunsendaĵojn';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/es_419.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descargar todos los archivos adjuntos';
+$labels['download'] = 'Descargando...';
+$labels['downloadmbox'] = 'Formato mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato maildir (.zip)';
+$labels['downloademl'] = 'Fuente (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/es_AR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descargar Todo';
+$labels['download'] = 'Descargar...';
+$labels['downloadmbox'] = 'Formato Mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
+$labels['downloademl'] = 'Original (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/es_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descargar todos los adjuntos';
+$labels['download'] = 'Descargar...';
+$labels['downloadmbox'] = 'Formato mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato maildir (.zip)';
+$labels['downloademl'] = 'Fuente (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/et_EE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Laadi alla kõik manused';
+$labels['download'] = 'lae arvutisse';
+$labels['downloadmbox'] = 'Mbox vorming (.zip)';
+$labels['downloadmaildir'] = 'Maildir vorming (.zip)';
+$labels['downloademl'] = 'Lähtetekst (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/eu_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Deskargatu eranskin guztiak';
+$labels['download'] = 'Deskargatu...';
+$labels['downloadmbox'] = 'Mbox formatua (.zip)';
+$labels['downloadmaildir'] = 'Maildir formatua (.zip)';
+$labels['downloademl'] = 'Iturburua (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fa_AF.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'بارگزاری همه ضمیمه ها';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fa_IR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'بارگیری همه پیوست‌ها';
+$labels['download'] = 'بارگیری';
+$labels['downloadmbox'] = 'قالب Mbox (.zip)';
+$labels['downloadmaildir'] = 'قالب Maildir (.zip)';
+$labels['downloademl'] = 'منبع (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fi_FI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Lataa kaikki liitteet';
+$labels['download'] = 'Lataa...';
+$labels['downloadmbox'] = 'Mbox-muoto (.zip)';
+$labels['downloadmaildir'] = 'Maildir-muoto (.zip)';
+$labels['downloademl'] = 'Lähde (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fo_FO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Heinta allar viðheftingar';
+$labels['download'] = 'Heinta...';
+$labels['downloadmbox'] = 'Mbox týpa (.zip)';
+$labels['downloadmaildir'] = 'Teldupost mappu format (.zip)';
+$labels['downloademl'] = 'Kelda (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fr_FR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Télécharger toutes les pièces jointes';
+$labels['download'] = 'Télécharger...';
+$labels['downloadmbox'] = 'Format mbox (.zip)';
+$labels['downloadmaildir'] = 'Format maildir (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/fy_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Alle taheaksels ynlade';
+$labels['download'] = 'Ynlade...';
+$labels['downloadmbox'] = 'Mbox formaat (.zip)';
+$labels['downloadmaildir'] = 'Maildir formaat (.zip)';
+$labels['downloademl'] = 'Boarne (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ga_IE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Ãosluchtaigh gach ceangaltán';
+$labels['download'] = 'Ãosluchtaigh...';
+$labels['downloadmbox'] = 'Formáid Mbox (.zip)';
+$labels['downloademl'] = 'Foinse (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/gl_ES.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descargar todos os adxuntos';
+$labels['download'] = 'Descargar';
+$labels['downloadmbox'] = 'En formato mbox (.zip)';
+$labels['downloadmaildir'] = 'En formato maildir (.zip)';
+$labels['downloademl'] = 'Código fonte (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/he_IL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'להוריד ×ת כל הצרופות';
+$labels['download'] = 'מוריד כעת...';
+$labels['downloadmbox'] = 'פורמט Mbox  &rlm;(zip.)';
+$labels['downloadmaildir'] = 'פורמט Maildir  &rlm;(zip.)';
+$labels['downloademl'] = 'מקור (eml.)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/hr_HR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Preuzmi sve privitke';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/hu_HU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Összes csatolmány letöltése';
+$labels['download'] = 'Letöltés...';
+$labels['downloadmbox'] = 'Mbox formátum (.zip)';
+$labels['downloadmaildir'] = 'Maildir formátum (.zip)';
+$labels['downloademl'] = 'Forrás (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/hy_AM.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Õ†Õ¥Ö€Õ¢Õ¥Õ¼Õ¶Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸ Õ¯ÖÕ¾Õ¡Õ® Õ¶Õ«Õ·Ö„Õ¥Ö€Õ¨';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ia.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Discargar tote le attachamentos';
+$labels['download'] = 'Discargar...';
+$labels['downloadmbox'] = 'Formato Mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
+$labels['downloademl'] = 'Fonte (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/id_ID.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Unduh semua lampiran';
+$labels['download'] = 'Unduh...';
+$labels['downloadmbox'] = 'Format Mbox (.zip)';
+$labels['downloadmaildir'] = 'Format Maildir (.zip)';
+$labels['downloademl'] = 'Sumber (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/is_IS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Niðurhala öllum viðhengjum';
+$labels['download'] = 'Hlaða niður...';
+$labels['downloadmbox'] = 'Mbox snið (.zip)';
+$labels['downloadmaildir'] = 'Maildir snið (.zip)';
+$labels['downloademl'] = 'Upprunalegt (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/it_IT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Scarica tutti gli allegati';
+$labels['download'] = 'Scarica...';
+$labels['downloadmbox'] = 'Formato mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato maildir (.zip)';
+$labels['downloademl'] = 'Sorgente (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ja_JP.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'ã™ã¹ã¦ã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ダウンロード';
+$labels['download'] = 'ダウンロード...';
+$labels['downloadmbox'] = 'mboxå½¢å¼(.zip)';
+$labels['downloadmaildir'] = 'Maildirå½¢å¼(.zip)';
+$labels['downloademl'] = 'ソース(.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/km_KH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'ទាញ​យក​ឯកសារ​ភ្ជាប់​ទាំងអស់';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ko_KR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = '모든 첨부파ì¼ì„ 다운로드';
+$labels['download'] = '다운로드...';
+$labels['downloadmbox'] = 'Mbox 형ì‹(.zip)';
+$labels['downloadmaildir'] = 'Maildir 형ì‹(.zip)';
+$labels['downloademl'] = '소스(.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ku.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Hemû pêvekan daxîne';
+$labels['download'] = 'Daxîne...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Çavkanî (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ku_IQ.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'داگرتنی هەموو هاوپێچەکان';
+$labels['download'] = 'داگرتن...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/lb_LU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'All d\'Unhäng eroflueden';
+$labels['download'] = 'Eroflueden...';
+$labels['downloadmbox'] = 'Mbox-Format (.zip)';
+$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/lt_LT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Atsisiųsti visus priedus';
+$labels['download'] = 'Parsisiųsti...';
+$labels['downloadmbox'] = 'Mbox formatas (.zip)';
+$labels['downloadmaildir'] = 'Maildir formatas (.zip)';
+$labels['downloademl'] = 'Kodas (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/lv_LV.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'LejupielÄdÄ“t visus pielikumus';
+$labels['download'] = 'LejupielÄdÄ“...';
+$labels['downloadmbox'] = 'Mbox formÄts(.zip)';
+$labels['downloadmaildir'] = 'Maildir formÄts (.zip)';
+$labels['downloademl'] = 'Izejas avots (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/mk_MK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Симни ги Ñите прикачувања ';
+$labels['download'] = 'Симни...';
+$labels['downloadmbox'] = 'Mbox формат(.zip)';
+$labels['downloadmaildir'] = 'Maildir формат(.zip)';
+$labels['downloademl'] = 'Извор(.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ml_IN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'à´Žà´²àµà´²à´¾ à´…à´±àµà´±à´¾à´šàµà´šàµà´®àµ†à´¨àµà´±àµà´•à´³àµà´‚ ഡൗൺലോഡൠചെയàµà´¯àµà´•';
+$labels['download'] = 'ഡൗൺലോഡàµ...';
+$labels['downloadmbox'] = 'എംബോകàµà´¸àµ രീതി (.zip)';
+$labels['downloadmaildir'] = 'മെയിൽഡിർ രീതി (.zip)';
+$labels['downloademl'] = 'à´¸àµà´°àµ‹à´¤à´¸àµà´¸àµ (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/mn_MN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Бүх хавÑралтыг татах';
+$labels['download'] = 'Татаж авах...';
+$labels['downloadmbox'] = 'Хайрцагны формат (.zip)';
+$labels['downloadmaildir'] = 'ÐœÑйлийн хавтаÑны формат (.zip)';
+$labels['downloademl'] = 'Эх код (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/nb_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Last ned alle vedlegg';
+$labels['download'] = 'Nedlaste...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Kildekode (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/nl_NL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Alle bijlagen downloaden';
+$labels['download'] = 'Download...';
+$labels['downloadmbox'] = 'Mbox-formaat (.zip)';
+$labels['downloadmaildir'] = 'Maildir-formaat (.zip)';
+$labels['downloademl'] = 'Bron (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/nn_NO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Last ned alle vedlegg';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/pl_PL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Pobierz wszystkie jako ZIP';
+$labels['download'] = 'Pobierz...';
+$labels['downloadmbox'] = 'Format mbox (.zip)';
+$labels['downloadmaildir'] = 'Format maildir (.zip)';
+$labels['downloademl'] = 'Źródło wiadomości (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/pt_BR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Baixar todos os anexos';
+$labels['download'] = 'Baixar...';
+$labels['downloadmbox'] = 'Formato mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato maildir (.zip)';
+$labels['downloademl'] = 'Original (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/pt_PT.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Transferir todos os anexos';
+$labels['download'] = 'Transferir...';
+$labels['downloadmbox'] = 'Formato Mbox (.zip)';
+$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
+$labels['downloademl'] = 'Original (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ro_RO.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Descarcă toate atașamentele';
+$labels['download'] = 'Descarcă...';
+$labels['downloadmbox'] = 'Format Mbox (.zip)';
+$labels['downloadmaildir'] = 'Format Maildir (.zip)';
+$labels['downloademl'] = 'Sursă (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/ru_RU.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Загрузить вÑе вложениÑ';
+$labels['download'] = 'Загрузка...';
+$labels['downloadmbox'] = 'Формат Mbox (.zip)';
+$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
+$labels['downloademl'] = 'ИÑходный формат (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/sk_SK.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Stiahnuť všetky prílohy';
+$labels['download'] = 'Stiahnuť...';
+$labels['downloadmbox'] = 'Formát Mbox (.zip)';
+$labels['downloadmaildir'] = 'Formát Maildir (.zip)';
+$labels['downloademl'] = 'Zdroj (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/sl_SI.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Prenesi vse priponke';
+$labels['download'] = 'Prenesi...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Vir (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/sq_AL.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Shkarkoji krejt bashkëngjitjet';
+$labels['download'] = 'Shkarkoni…';
+$labels['downloadmbox'] = 'Në format Mbox (.zip)';
+$labels['downloadmaildir'] = 'Në format Maildir (.zip)';
+$labels['downloademl'] = 'Burim (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/sr_CS.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Преузми Ñве прилоге';
+$labels['download'] = 'Преузимање...';
+$labels['downloadmbox'] = 'Mbox формат (.zip)';
+$labels['downloadmaildir'] = 'Maildir формат (.zip)';
+$labels['downloademl'] = 'Изворно (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/sv_SE.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Ladda ner alla bifogade filer';
+$labels['download'] = 'Hämta...';
+$labels['downloadmbox'] = 'Format Mbox (.zip)';
+$labels['downloadmaildir'] = 'Format Maildir (.zip)';
+$labels['downloademl'] = 'Källkod (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/th_TH.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'ดาวน์โหลดทุà¸à¹„ฟล์';
+$labels['download'] = 'ดาวน์โหลด...';
+$labels['downloadmbox'] = 'Mbox format (.zip)';
+$labels['downloadmaildir'] = 'Maildir format (.zip)';
+$labels['downloademl'] = 'Source (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/tr_TR.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Tüm ek dosyaları indir';
+$labels['download'] = 'Ä°ndir...';
+$labels['downloadmbox'] = 'Mbox biçimi (.zip)';
+$labels['downloadmaildir'] = 'Maildir biçimi (.zip)';
+$labels['downloademl'] = 'Kaynak (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/uk_UA.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Завантажити вÑÑ– вкладеннÑ';
+$labels['download'] = 'ЗавантаженнÑ…';
+$labels['downloadmbox'] = 'Формат Mbox (.zip)';
+$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
+$labels['downloademl'] = 'Джерело (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/uz.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Barcha ilovalarni ko‘chirib olish';
+$labels['download'] = 'Ko‘chirish...';
+$labels['downloadmbox'] = 'Mbox formati (.zip)';
+$labels['downloadmaildir'] = 'Maildir formati (.zip)';
+$labels['downloademl'] = 'Manba (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/vi_VN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = 'Tải tất cả tệp tin đính kèm';
+$labels['download'] = 'Tải xuống...';
+$labels['downloadmbox'] = 'Äịnh dạng mbox (.zip)';
+$labels['downloadmaildir'] = 'Äịnh dạng Maildir (.zip)';
+$labels['downloademl'] = 'Mã nguồn (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/zh_CN.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = '下载全部附件';
+$labels['download'] = '下载...';
+$labels['downloadmbox'] = 'Mbox æ ¼å¼ (.zip)';
+$labels['downloadmaildir'] = 'Maildir æ ¼å¼ (.zip)';
+$labels['downloademl'] = 'æºä»£ç  (.eml)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/localization/zh_TW.inc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/zipdownload/localization/<lang>.inc                           |
+ |                                                                       |
+ | Localization file of the Roundcube Webmail Zipdownload plugin         |
+ | Copyright (C) 2012-2014, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
+*/
+$labels['downloadall'] = '下載所有附件';
+$labels['download'] = '下載...';
+$labels['downloadmbox'] = 'Mbox æ ¼å¼ (.zip)';
+$labels['downloadmaildir'] = 'Maildir æ ¼å¼ (.zip)';
+$labels['downloademl'] = 'åŽŸå§‹æ ¼å¼ (.eml)';
Binary file plugins/zipdownload/skins/classic/zip.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/skins/classic/zipdownload.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+/* Roundcube Zipdownload plugin styles for classic skin */
+
+a.zipdownload {
+	display: inline-block;
+	padding: 0 0 2px 20px;
+	background: url(zip.png) 0 1px no-repeat;
+	font-style: italic;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/skins/classic/zipdownload.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+a.zipdownload{display:inline-block;padding:0 0 2px 20px;background:url(zip.png) 0 1px no-repeat;font-style:italic}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/skins/larry/zipdownload.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+/* Roundcube Zipdownload plugin styles for skin "Larry" */
+
+a.zipdownload {
+	display: inline-block;
+	margin-top: .5em;
+	padding: 3px 5px 4px 5px;
+}
+
+@media screen and (max-width: 800px) {
+	a.zipdownload {
+		margin-top: .15em;
+		margin-bottom: .2em;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/skins/larry/zipdownload.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+a.zipdownload{display:inline-block;margin-top:.5em;padding:3px 5px 4px 5px}@media screen and (max-width:800px){a.zipdownload{margin-top:.15em;margin-bottom:.2em}}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/zipdownload.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,99 @@
+/**
+ * ZipDownload plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+window.rcmail && rcmail.addEventListener('init', function(evt) {
+    // register additional actions
+    rcmail.register_command('download-eml', function() { rcmail_zipdownload('eml'); });
+    rcmail.register_command('download-mbox', function() { rcmail_zipdownload('mbox'); });
+    rcmail.register_command('download-maildir', function() { rcmail_zipdownload('maildir'); });
+
+    // commands status
+    rcmail.message_list && rcmail.message_list.addEventListener('select', function(list) {
+        var selected = list.get_selection().length;
+
+        rcmail.enable_command('download', selected > 0);
+        rcmail.enable_command('download-eml', selected == 1);
+        rcmail.enable_command('download-mbox', 'download-maildir', selected > 1);
+    });
+
+    // hook before default download action
+    rcmail.addEventListener('beforedownload', rcmail_zipdownload_menu);
+
+    // find and modify default download link/button
+    $.each(rcmail.buttons['download'] || [], function() {
+        var link = $('#' + this.id),
+            span = $('span', link);
+
+        if (!span.length) {
+            span = $('<span>');
+            link.html('').append(span);
+        }
+
+        span.text(rcmail.get_label('zipdownload.download'));
+        rcmail.env.download_link = link;
+    });
+});
+
+
+function rcmail_zipdownload(mode)
+{
+    // default .eml download of single message
+    if (mode == 'eml') {
+        var uid = rcmail.get_single_uid();
+        rcmail.goto_url('viewsource', rcmail.params_from_uid(uid, {_save: 1}), false, true);
+        return;
+    }
+
+    // multi-message download, use hidden form to POST selection
+    if (rcmail.message_list && rcmail.message_list.get_selection().length > 1) {
+        var inputs = [], form = $('#zipdownload-form'),
+            post = rcmail.selection_post_data();
+
+        post._mode = mode;
+        post._token = rcmail.env.request_token;
+
+        $.each(post, function(k, v) {
+            if (typeof v == 'object' && v.length > 1) {
+              for (var j=0; j < v.length; j++)
+                  inputs.push($('<input>').attr({type: 'hidden', name: k+'[]', value: v[j]}));
+            }
+            else {
+                inputs.push($('<input>').attr({type: 'hidden', name: k, value: v}));
+            }
+        });
+
+        if (!form.length)
+            form = $('<form>').attr({
+                    style: 'display: none',
+                    method: 'POST',
+                    action: '?_task=mail&_action=plugin.zipdownload.messages'
+                })
+                .appendTo('body');
+
+        form.html('').append(inputs).submit();
+    }
+}
+
+// display download options menu
+function rcmail_zipdownload_menu(e)
+{
+    // show (sub)menu for download selection
+    rcmail.command('menu-open', 'zipdownload-menu', e && e.target ? e.target : rcmail.env.download_link, e);
+
+    // abort default download action
+    return false;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/zipdownload.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+/**
+ * ZipDownload plugin script
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2013-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("download-eml",function(){rcmail_zipdownload("eml")});rcmail.register_command("download-mbox",function(){rcmail_zipdownload("mbox")});rcmail.register_command("download-maildir",function(){rcmail_zipdownload("maildir")});rcmail.message_list&&rcmail.message_list.addEventListener("select",function(b){b=b.get_selection().length;rcmail.enable_command("download",0<b);rcmail.enable_command("download-eml",1==b);rcmail.enable_command("download-mbox",
+"download-maildir",1<b)});rcmail.addEventListener("beforedownload",rcmail_zipdownload_menu);$.each(rcmail.buttons.download||[],function(){var b=$("#"+this.id),a=$("span",b);a.length||(a=$("<span>"),b.html("").append(a));a.text(rcmail.get_label("zipdownload.download"));rcmail.env.download_link=b})});
+function rcmail_zipdownload(a){if("eml"==a)a=rcmail.get_single_uid(),rcmail.goto_url("viewsource",rcmail.params_from_uid(a,{_save:1}),!1,!0);else if(rcmail.message_list&&1<rcmail.message_list.get_selection().length){var b=[],c=$("#zipdownload-form"),e=rcmail.selection_post_data();e._mode=a;e._token=rcmail.env.request_token;$.each(e,function(a,d){if("object"==typeof d&&1<d.length)for(var c=0;c<d.length;c++)b.push($("<input>").attr({type:"hidden",name:a+"[]",value:d[c]}));else b.push($("<input>").attr({type:"hidden",
+name:a,value:d}))});c.length||(c=$("<form>").attr({style:"display: none",method:"POST",action:"?_task=mail&_action=plugin.zipdownload.messages"}).appendTo("body"));c.html("").append(b).submit()}}function rcmail_zipdownload_menu(a){rcmail.command("menu-open","zipdownload-menu",a&&a.target?a.target:rcmail.env.download_link,a);return!1};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zipdownload/zipdownload.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,393 @@
+<?php
+
+/**
+ * ZipDownload
+ *
+ * Plugin to allow the download of all message attachments in one zip file
+ * and also download of many messages in one go.
+ *
+ * @requires php_zip extension (including ZipArchive class)
+ *
+ * @author Philip Weir
+ * @author Thomas Bruderli
+ * @author Aleksander Machniak
+ */
+class zipdownload extends rcube_plugin
+{
+    public $task = 'mail';
+
+    private $charset = 'ASCII';
+
+    private $names = [];
+
+    // RFC4155: mbox date format
+    const MBOX_DATE_FORMAT = 'D M d H:i:s Y';
+
+    /**
+     * Plugin initialization
+     */
+    public function init()
+    {
+        // check requirements first
+        if (!class_exists('ZipArchive', false)) {
+            rcmail::raise_error(array(
+                'code'    => 520,
+                'file'    => __FILE__,
+                'line'    => __LINE__,
+                'message' => "php_zip extension is required for the zipdownload plugin"), true, false);
+            return;
+        }
+
+        $rcmail = rcmail::get_instance();
+
+        $this->load_config();
+        $this->charset = $rcmail->config->get('zipdownload_charset', RCUBE_CHARSET);
+        $this->add_texts('localization');
+
+        if ($rcmail->config->get('zipdownload_attachments', 1) > -1 && ($rcmail->action == 'show' || $rcmail->action == 'preview')) {
+            $this->add_hook('template_object_messageattachments', array($this, 'attachment_ziplink'));
+        }
+
+        $this->register_action('plugin.zipdownload.attachments', array($this, 'download_attachments'));
+        $this->register_action('plugin.zipdownload.messages', array($this, 'download_messages'));
+
+        if (!$rcmail->action && $rcmail->config->get('zipdownload_selection')) {
+            $this->download_menu();
+        }
+    }
+
+    /**
+     * Place a link/button after attachments listing to trigger download
+     */
+    public function attachment_ziplink($p)
+    {
+        $rcmail = rcmail::get_instance();
+
+        // only show the link if there is more than the configured number of attachments
+        if (substr_count($p['content'], '<li') > $rcmail->config->get('zipdownload_attachments', 1)) {
+            $href = $rcmail->url(array(
+                '_action' => 'plugin.zipdownload.attachments',
+                '_mbox'   => $rcmail->output->env['mailbox'],
+                '_uid'    => $rcmail->output->env['uid'],
+            ), false, false, true);
+
+            $link = html::a(array('href' => $href, 'class' => 'button zipdownload'),
+                rcube::Q($this->gettext('downloadall'))
+            );
+
+            // append link to attachments list, slightly different in some skins
+            switch (rcmail::get_instance()->config->get('skin')) {
+                case 'classic':
+                    $p['content'] = str_replace('</ul>', html::tag('li', array('class' => 'zipdownload'), $link) . '</ul>', $p['content']);
+                    break;
+
+                default:
+                    $p['content'] .= $link;
+                    break;
+            }
+
+            $this->include_stylesheet($this->local_skin_path() . '/zipdownload.css');
+        }
+
+        return $p;
+    }
+
+    /**
+     * Adds download options menu to the page
+     */
+    public function download_menu()
+    {
+        $this->include_script('zipdownload.js');
+        $this->add_label('download');
+
+        $rcmail  = rcmail::get_instance();
+        $menu    = array();
+        $ul_attr = array('role' => 'menu', 'aria-labelledby' => 'aria-label-zipdownloadmenu');
+        if ($rcmail->config->get('skin') != 'classic') {
+            $ul_attr['class'] = 'toolbarmenu';
+        }
+
+        foreach (array('eml', 'mbox', 'maildir') as $type) {
+            $menu[] = html::tag('li', null, $rcmail->output->button(array(
+                    'command'  => "download-$type",
+                    'label'    => "zipdownload.download$type",
+                    'classact' => 'active',
+            )));
+        }
+
+        $rcmail->output->add_footer(html::div(array('id' => 'zipdownload-menu', 'class' => 'popupmenu', 'aria-hidden' => 'true'),
+            html::tag('h2', array('class' => 'voice', 'id' => 'aria-label-zipdownloadmenu'), "Message Download Options Menu") .
+            html::tag('ul', $ul_attr, implode('', $menu))));
+    }
+
+    /**
+     * Handler for attachment download action
+     */
+    public function download_attachments()
+    {
+        $rcmail = rcmail::get_instance();
+
+        // require CSRF protected request
+        $rcmail->request_security_check(rcube_utils::INPUT_GET);
+
+        $imap      = $rcmail->get_storage();
+        $temp_dir  = $rcmail->config->get('temp_dir');
+        $tmpfname  = tempnam($temp_dir, 'zipdownload');
+        $tempfiles = array($tmpfname);
+        $message   = new rcube_message(rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GET));
+
+        // open zip file
+        $zip = new ZipArchive();
+        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);
+
+        foreach ($message->attachments as $part) {
+            $pid      = $part->mime_id;
+            $part     = $message->mime_parts[$pid];
+            $disp_name = $this->_create_displayname($part);
+
+            $tmpfn       = tempnam($temp_dir, 'zipattach');
+            $tmpfp       = fopen($tmpfn, 'w');
+            $tempfiles[] = $tmpfn;
+
+            $message->get_part_body($part->mime_id, false, 0, $tmpfp);
+            $zip->addFile($tmpfn, $disp_name);
+            fclose($tmpfp);
+        }
+
+        $zip->close();
+
+        $filename = ($this->_filename_from_subject($message->subject) ?: 'attachments') . '.zip';
+
+        $this->_deliver_zipfile($tmpfname, $filename);
+
+        // delete temporary files from disk
+        foreach ($tempfiles as $tmpfn) {
+            unlink($tmpfn);
+        }
+
+        exit;
+    }
+
+    /**
+     * Handler for message download action
+     */
+    public function download_messages()
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($rcmail->config->get('zipdownload_selection') && !empty($_POST['_uid'])) {
+            $messageset = rcmail::get_uids();
+            if (count($messageset)) {
+                $this->_download_messages($messageset);
+            }
+        }
+    }
+
+    /**
+     * Create and get display name of attachment part to add on zip file
+     *
+     * @param $part stdClass Part of attachment on message
+     *
+     * @return string Display name of attachment part
+     */
+    private function _create_displayname($part)
+    {
+        $rcmail    = rcmail::get_instance();
+        $filename = $part->filename;
+
+        if ($filename === null || $filename === '') {
+            $ext      = (array) rcube_mime::get_mime_extensions($part->mimetype);
+            $ext      = array_shift($ext);
+            $filename = $rcmail->gettext('messagepart') . ' ' . $part->mime_id;
+            if ($ext) {
+                $filename .= '.' . $ext;
+            }
+        }
+
+        $displayname = $this->_convert_filename($filename);
+
+        /**
+         * Adding a number before dot of extension on a name of file with same name on zip
+         * Ext: attach(1).txt on attach filename that has a attach.txt filename on same zip
+         */
+        if (isset($this->name[$displayname])) {
+            list($filename, $ext) = preg_split("/\.(?=[^\.]*$)/", $displayname);
+            $displayname = $filename . '(' . ($this->names[$displayname]++) . ').' . $ext;
+            $this->names[$displayname] = 1;
+        }
+        else {
+            $this->names[$displayname] = 1;
+        }
+
+        return $displayname;
+    }
+
+    /**
+     * Helper method to packs all the given messages into a zip archive
+     *
+     * @param array List of message UIDs to download
+     */
+    private function _download_messages($messageset)
+    {
+        $rcmail    = rcmail::get_instance();
+        $imap      = $rcmail->get_storage();
+        $mode      = rcube_utils::get_input_value('_mode', rcube_utils::INPUT_POST);
+        $temp_dir  = $rcmail->config->get('temp_dir');
+        $tmpfname  = tempnam($temp_dir, 'zipdownload');
+        $tempfiles = array($tmpfname);
+        $folders   = count($messageset) > 1;
+
+        // @TODO: file size limit
+
+        // open zip file
+        $zip = new ZipArchive();
+        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);
+
+        if ($mode == 'mbox') {
+            $tmpfp = fopen($tmpfname . '.mbox', 'w');
+        }
+
+        foreach ($messageset as $mbox => $uids) {
+            $imap->set_folder($mbox);
+            $path = $folders ? str_replace($imap->get_hierarchy_delimiter(), '/', $mbox) . '/' : '';
+
+            if ($uids === '*') {
+                $index = $imap->index($mbox, null, null, true);
+                $uids  = $index->get();
+            }
+
+            foreach ($uids as $uid) {
+                $headers = $imap->get_message_headers($uid);
+
+                if ($mode == 'mbox') {
+                    // Sender address
+                    $from = rcube_mime::decode_address_list($headers->from, null, true, $headers->charset, true);
+                    $from = array_shift($from);
+                    $from = preg_replace('/\s/', '-', $from);
+
+                    // Received (internal) date
+                    $date = rcube_utils::anytodatetime($headers->internaldate);
+                    if ($date) {
+                        $date->setTimezone(new DateTimeZone('UTC'));
+                        $date = $date->format(self::MBOX_DATE_FORMAT);
+                    }
+
+                    // Mbox format header (RFC4155)
+                    $header = sprintf("From %s %s\r\n",
+                        $from ?: 'MAILER-DAEMON',
+                        $date ?: ''
+                    );
+
+                    fwrite($tmpfp, $header);
+
+                    // Use stream filter to quote "From " in the message body
+                    stream_filter_register('mbox_filter', 'zipdownload_mbox_filter');
+                    $filter = stream_filter_append($tmpfp, 'mbox_filter');
+                    $imap->get_raw_body($uid, $tmpfp);
+                    stream_filter_remove($filter);
+                    fwrite($tmpfp, "\r\n");
+                }
+                else { // maildir
+                    $subject = rcube_mime::decode_header($headers->subject, $headers->charset);
+                    $subject = $this->_filename_from_subject(mb_substr($subject, 0, 16));
+                    $subject = $this->_convert_filename($subject);
+
+                    $disp_name = $path . $uid . ($subject ? " $subject" : '') . '.eml';
+
+                    $tmpfn = tempnam($temp_dir, 'zipmessage');
+                    $tmpfp = fopen($tmpfn, 'w');
+                    $imap->get_raw_body($uid, $tmpfp);
+                    $tempfiles[] = $tmpfn;
+                    fclose($tmpfp);
+                    $zip->addFile($tmpfn, $disp_name);
+                }
+            }
+        }
+
+        $filename = $folders ? 'messages' : $imap->get_folder();
+
+        if ($mode == 'mbox') {
+            $tempfiles[] = $tmpfname . '.mbox';
+            fclose($tmpfp);
+            $zip->addFile($tmpfname . '.mbox', $filename . '.mbox');
+        }
+
+        $zip->close();
+
+        $this->_deliver_zipfile($tmpfname, $filename . '.zip');
+
+        // delete temporary files from disk
+        foreach ($tempfiles as $tmpfn) {
+            unlink($tmpfn);
+        }
+
+        exit;
+    }
+
+    /**
+     * Helper method to send the zip archive to the browser
+     */
+    private function _deliver_zipfile($tmpfname, $filename)
+    {
+        $browser = new rcube_browser;
+        $rcmail  = rcmail::get_instance();
+
+        $rcmail->output->nocacheing_headers();
+
+        if ($browser->ie)
+            $filename = rawurlencode($filename);
+        else
+            $filename = addcslashes($filename, '"');
+
+        // send download headers
+        header("Content-Type: application/octet-stream");
+        if ($browser->ie) {
+            header("Content-Type: application/force-download");
+        }
+
+        // don't kill the connection if download takes more than 30 sec.
+        @set_time_limit(0);
+        header("Content-Disposition: attachment; filename=\"". $filename ."\"");
+        header("Content-length: " . filesize($tmpfname));
+        readfile($tmpfname);
+    }
+
+    /**
+     * Helper function to convert filenames to the configured charset
+     */
+    private function _convert_filename($str)
+    {
+        $str = strtr($str, array(':' => '', '/' => '-'));
+
+        return rcube_charset::convert($str, RCUBE_CHARSET, $this->charset);
+    }
+
+    /**
+     * Helper function to convert message subject into filename
+     */
+    private function _filename_from_subject($str)
+    {
+        $str = preg_replace('/[\t\n\r\0\x0B]+\s*/', ' ', $str);
+
+        return trim($str, " ./_");
+    }
+}
+
+class zipdownload_mbox_filter extends php_user_filter
+{
+    function filter($in, $out, &$consumed, $closing)
+    {
+        while ($bucket = stream_bucket_make_writeable($in)) {
+            // messages are read line by line
+            if (preg_match('/^>*From /', $bucket->data)) {
+                $bucket->data     = '>' . $bucket->data;
+                $bucket->datalen += 1;
+            }
+
+            $consumed += $bucket->datalen;
+            stream_bucket_append($out, $bucket);
+        }
+
+        return PSFS_PASS_ON;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/program	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+/usr/share/roundcube/program
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/robots.txt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+/usr/share/roundcube/robots.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+ROUNDCUBE WEBMAIL DEFAULT SKIN
+==============================
+
+This skin package contains the current development theme of the Roundcube
+Webmail software. It can be used, modified and redistributed according to
+the terms described in the LICENSE section.
+
+For information about building or modifiying Roundcube skins please visit
+https://github.com/roundcube/roundcubemail/wiki/Skins
+
+The theme uses icons originally designed by Stephen Horlander and Kevin Gerich
+for Mozilla.org. In case of redistribution giving credit to these artwork
+creators is mandatory.
+
+
+LICENSE
+-------
+The contents of this folder are subject to the Creative Commons
+Attribution-ShareAlike License. It is allowed to copy, distribute,
+transmit and to adapt the work by keeping credits to the original
+autors in the README file.
+See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/addressbook.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,476 @@
+/***** Roundcube|Mail address book task styles *****/
+
+#abooktoolbar
+{
+  position: absolute;
+  top: 45px;
+  left: 225px;
+  height: 35px;
+}
+
+#abooktoolbar a
+{
+  padding-right: 10px;
+}
+
+#abooktoolbar a.button,
+#abooktoolbar a.buttonPas {
+  display: block;
+  float: left;
+  width: 32px;
+  height: 32px;
+  padding: 0;
+  margin: 0 5px;
+  overflow: hidden;
+  background: url(images/abook_toolbar.png?v=8259.4881) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#abooktoolbar a.buttonPas {
+  opacity: 0.35;
+}
+
+#abooktoolbar a.addcontactSel {
+  background-position: 0 -32px;
+}
+
+#abooktoolbar a.compose {
+  background-position: -32px 0;
+}
+
+#abooktoolbar a.composeSel {
+  background-position: -32px -32px;
+}
+
+#abooktoolbar a.print {
+  background: url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;
+  background-position: -256px 0;
+}
+
+#abooktoolbar a.printSel {
+  background: url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;
+  background-position: -256px -32px;
+}
+
+#abooktoolbar a.delete {
+  background-position: -64px 0;
+}
+
+#abooktoolbar a.deleteSel {
+  background-position: -64px -32px;
+}
+
+#abooktoolbar a.import {
+  background-position: -96px 0;
+}
+
+#abooktoolbar a.importSel {
+  background-position: -96px -32px;
+}
+
+#abooktoolbar a.export {
+  background-position: -128px 0;
+}
+
+#abooktoolbar a.exportSel {
+  background-position: -128px -32px;
+}
+
+#abooktoolbar a.exportAll {
+  background-position: -128px 0;
+}
+
+#abooktoolbar a.exportAllSel {
+  background-position: -128px -32px;
+}
+
+#abooktoolbar a.search {
+  background-position: -170px 0;
+}
+
+#abooktoolbar a.searchSel {
+  background-position: -170px -32px;
+}
+
+#abookcountbar
+{
+  margin-top: 4px;
+  margin-left: 4px;
+  min-width: 250px;
+}
+
+#addressscreen
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 205px;
+}
+
+#directorylistbox
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 195px;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#addresslist
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#contactgroupslist
+{
+  border-top: 1px solid #999;
+}
+
+#addresslist
+{
+  left: 0px;
+  width: 280px;
+}
+
+#directorylist li a,
+#savedsearchlist li a
+{
+  cursor: default;
+  display: block;
+  padding-left: 25px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  height: 16px;
+  text-decoration: none;
+  white-space: nowrap;
+  background-image: url(images/icons/folders.png?v=7c4f.5218);
+  background-position: 5px -108px;
+  background-repeat: no-repeat;
+}
+
+#directorylist ul li a
+{
+  padding-left: 45px;
+  background-position: 22px -108px;
+}
+
+#directorylist ul ul li a
+{
+  padding-left: 62px;
+  background-position: 39px -108px;
+}
+
+#directorylist ul ul ul li a
+{
+  padding-left: 79px;
+  background-position: 39px -108px;
+}
+
+#directorylist li.contactgroup a
+{
+  background-position: 5px -143px;
+}
+
+#directorylist ul li.contactgroup a
+{
+  background-position: 22px -143px;
+}
+
+#directorylist ul ul li.contactgroup a
+{
+  background-position: 39px -143px;
+}
+
+#directorylist ul ul ul li.contactgroup a
+{
+  background-position: 56px -143px;
+}
+
+#savedsearchlist li.contactsearch a
+{
+  background-position: 6px -162px;
+}
+
+#contacts-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#contacts-table tbody td
+{
+  cursor: default;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+/* This padding-left should be equal to the focused border-left + the focused padding-left */
+#contacts-table thead tr td:first-child,
+#contacts-table tbody tr td:first-child {
+	border-left: 0;
+	padding-left: 8px;
+}
+
+/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
+#contacts-table tbody tr.focused > td:first-child {
+	border-left: 2px solid #d4d4d4;
+	padding-left: 6px;
+}
+
+#contacts-table tbody tr.selected.focused > td:first-child {
+	border-left: 1px solid #ccc;
+	padding-left: 7px;
+}
+
+#contacts-table .contact.readonly td
+{
+  font-style: italic;
+}
+
+#contacts-table td.name
+{
+  width: 95%;
+}
+
+#contacts-table td.action
+{
+  width: 12px;
+  padding: 0px 6px 0 4px;
+  text-align: right;
+}
+
+#contacts-table td.action a
+{
+  font-size: 16px;
+  font-weight: bold;
+  font-style: normal;
+  text-decoration: none;
+  color: #333;
+}
+
+#contacts-table .selected td.action a
+{
+  color: #fff;
+}
+
+#contacts-box
+{
+  position: absolute;
+  top: 0px;
+  left: 290px;
+  right: 0px;
+  bottom: 0px;
+  border: 1px solid #999999;
+  overflow: hidden;
+}
+
+body.iframe,
+#contact-frame
+{
+  background-color: #F2F2F2;
+  border: none;
+  min-height: 100%; /* Chrome 14 bug */
+}
+
+#contacttabs
+{
+	position: relative;
+	padding-bottom: 12px;
+}
+
+#contacttabs div.tabsbar {
+	top: 0;
+	left: 2px;
+}
+
+#contacttabs fieldset.tabbed {
+	position: relative;
+	top: 22px;
+	min-height: 5em;
+}
+
+#contacthead
+{
+	margin-bottom: 1em;
+	border: 0;
+	padding: 0;
+}
+
+#contacthead > legend
+{
+	display: none;
+}
+
+#contacthead .names span.namefield,
+#contacthead .names input
+{
+	font-size: 140%;
+}
+
+#contacthead .displayname span.namefield
+{
+	font-size: 120%;
+}
+
+#contacthead span.nickname:before,
+#contacthead span.nickname:after,
+#contacthead input.ff_nickname:before,
+#contacthead input.ff_nickname:after
+{
+	content: '"';
+}
+
+#contacthead input
+{
+	margin-right: 6px;
+	margin-bottom: 0.2em;
+}
+
+#contacthead .names input,
+#contacthead .addnames input
+{
+	width: 180px;
+}
+
+#contacthead input.ff_prefix,
+#contacthead input.ff_suffix
+{
+	width: 90px;
+}
+
+#contacthead .addnames input.ff_name
+{
+	width: 374px;
+}
+
+#contactphoto
+{
+	float: right;
+	width: 60px;
+	margin-left: 3em;
+	margin-right: 4px;
+}
+
+#contactpic
+{
+	width: 60px;
+	min-height: 60px;
+	border: 1px solid #ccc;
+	background: white;
+}
+
+#contactpic img {
+	max-width: 60px;
+	max-height: 80px;
+}
+
+#contactpic.droptarget.hover {
+	background-color: #f0f0ee;
+	box-shadow: 0 0 5px 0 #999;
+	-moz-box-shadow: 0 0 5px 0 #999;
+	-o-box-shadow: 0 0 5px 0 #999;
+}
+
+#contactphoto .formlinks
+{
+	margin-top: 0.5em;
+	text-align: center;
+}
+
+fieldset.contactfieldgroup
+{
+	border: 0;
+	margin: 0.5em 0;
+	padding: 0.2em 2px;
+}
+
+fieldset.contactfieldgroupmulti
+{
+	padding: 0.5em 2px;
+}
+
+fieldset.contactfieldgroup legend
+{
+	font-size: 0.9em;
+}
+
+.contactfieldgroup .row
+{
+	position: relative;
+	margin: 0.2em 0;
+}
+
+.contactfieldgroup .contactfieldlabel
+{
+	position: absolute;
+	top: 0;
+	left: 2px;
+	width: 110px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	color: #666;
+	font-weight: bold;
+}
+
+.contactfieldgroup .contactfieldlabel select
+{
+	width: 100%;
+	background: none;
+	border: 0;
+	color: #666;
+	font-weight: bold;
+	padding-left: 0;
+}
+
+.contactfieldgroup .contactfieldcontent
+{
+	padding-left: 120px;
+	min-height: 1em;
+	line-height: 1.3em;
+}
+
+.contactfieldgroup .contactfield {
+	line-height: 1.3em;
+}
+
+.contactcontrolleraddress .contactfieldcontent input {
+	margin-bottom: 0.1em;
+}
+
+.contactfieldcontent .contactfieldbutton {
+	vertical-align: middle;
+	margin-left: 0.5em;
+}
+
+#upload-form
+{
+	padding: 6px;
+}
+
+#upload-form div
+{
+	padding: 2px;
+}
+
+#sourcename
+{
+  color: #666;
+  font-size: 10px;
+  margin: -5px 0 8px 2px;
+}
+
+#contact-title
+{
+  /* fixes issue where tabs were overlapping box title when scrolling */
+  z-index: 10;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/addressbook.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#abooktoolbar{position:absolute;top:45px;left:225px;height:35px}#abooktoolbar a{padding-right:10px}#abooktoolbar a.button,#abooktoolbar a.buttonPas{display:block;float:left;width:32px;height:32px;padding:0;margin:0 5px;overflow:hidden;background:url(images/abook_toolbar.png?v=8259.4881) 0 0 no-repeat transparent;opacity:.99}#abooktoolbar a.buttonPas{opacity:.35}#abooktoolbar a.addcontactSel{background-position:0 -32px}#abooktoolbar a.compose{background-position:-32px 0}#abooktoolbar a.composeSel{background-position:-32px -32px}#abooktoolbar a.print{background:url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;background-position:-256px 0}#abooktoolbar a.printSel{background:url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;background-position:-256px -32px}#abooktoolbar a.delete{background-position:-64px 0}#abooktoolbar a.deleteSel{background-position:-64px -32px}#abooktoolbar a.import{background-position:-96px 0}#abooktoolbar a.importSel{background-position:-96px -32px}#abooktoolbar a.export{background-position:-128px 0}#abooktoolbar a.exportSel{background-position:-128px -32px}#abooktoolbar a.exportAll{background-position:-128px 0}#abooktoolbar a.exportAllSel{background-position:-128px -32px}#abooktoolbar a.search{background-position:-170px 0}#abooktoolbar a.searchSel{background-position:-170px -32px}#abookcountbar{margin-top:4px;margin-left:4px;min-width:250px}#addressscreen{position:absolute;top:0;right:0;bottom:0;left:205px}#directorylistbox{position:absolute;top:0;bottom:0;left:0;width:195px;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#addresslist{position:absolute;top:0;bottom:0;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#contactgroupslist{border-top:1px solid #999}#addresslist{left:0;width:280px}#directorylist li a,#savedsearchlist li a{cursor:default;display:block;padding-left:25px;padding-top:2px;padding-bottom:2px;height:16px;text-decoration:none;white-space:nowrap;background-image:url(images/icons/folders.png?v=7c4f.5218);background-position:5px -108px;background-repeat:no-repeat}#directorylist ul li a{padding-left:45px;background-position:22px -108px}#directorylist ul ul li a{padding-left:62px;background-position:39px -108px}#directorylist ul ul ul li a{padding-left:79px;background-position:39px -108px}#directorylist li.contactgroup a{background-position:5px -143px}#directorylist ul li.contactgroup a{background-position:22px -143px}#directorylist ul ul li.contactgroup a{background-position:39px -143px}#directorylist ul ul ul li.contactgroup a{background-position:56px -143px}#savedsearchlist li.contactsearch a{background-position:6px -162px}#contacts-table{width:100%;table-layout:fixed}#contacts-table tbody td{cursor:default;text-overflow:ellipsis;-o-text-overflow:ellipsis}#contacts-table thead tr td:first-child,#contacts-table tbody tr td:first-child{border-left:0;padding-left:8px}#contacts-table tbody tr.focused>td:first-child{border-left:2px solid #d4d4d4;padding-left:6px}#contacts-table tbody tr.selected.focused>td:first-child{border-left:1px solid #ccc;padding-left:7px}#contacts-table .contact.readonly td{font-style:italic}#contacts-table td.name{width:95%}#contacts-table td.action{width:12px;padding:0 6px 0 4px;text-align:right}#contacts-table td.action a{font-size:16px;font-weight:bold;font-style:normal;text-decoration:none;color:#333}#contacts-table .selected td.action a{color:#fff}#contacts-box{position:absolute;top:0;left:290px;right:0;bottom:0;border:1px solid #999;overflow:hidden}body.iframe,#contact-frame{background-color:#f2f2f2;border:0;min-height:100%}#contacttabs{position:relative;padding-bottom:12px}#contacttabs div.tabsbar{top:0;left:2px}#contacttabs fieldset.tabbed{position:relative;top:22px;min-height:5em}#contacthead{margin-bottom:1em;border:0;padding:0}#contacthead>legend{display:none}#contacthead .names span.namefield,#contacthead .names input{font-size:140%}#contacthead .displayname span.namefield{font-size:120%}#contacthead span.nickname:before,#contacthead span.nickname:after,#contacthead input.ff_nickname:before,#contacthead input.ff_nickname:after{content:'"'}#contacthead input{margin-right:6px;margin-bottom:.2em}#contacthead .names input,#contacthead .addnames input{width:180px}#contacthead input.ff_prefix,#contacthead input.ff_suffix{width:90px}#contacthead .addnames input.ff_name{width:374px}#contactphoto{float:right;width:60px;margin-left:3em;margin-right:4px}#contactpic{width:60px;min-height:60px;border:1px solid #ccc;background:white}#contactpic img{max-width:60px;max-height:80px}#contactpic.droptarget.hover{background-color:#f0f0ee;box-shadow:0 0 5px 0 #999;-moz-box-shadow:0 0 5px 0 #999;-o-box-shadow:0 0 5px 0 #999}#contactphoto .formlinks{margin-top:.5em;text-align:center}fieldset.contactfieldgroup{border:0;margin:.5em 0;padding:.2em 2px}fieldset.contactfieldgroupmulti{padding:.5em 2px}fieldset.contactfieldgroup legend{font-size:.9em}.contactfieldgroup .row{position:relative;margin:.2em 0}.contactfieldgroup .contactfieldlabel{position:absolute;top:0;left:2px;width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666;font-weight:bold}.contactfieldgroup .contactfieldlabel select{width:100%;background:0;border:0;color:#666;font-weight:bold;padding-left:0}.contactfieldgroup .contactfieldcontent{padding-left:120px;min-height:1em;line-height:1.3em}.contactfieldgroup .contactfield{line-height:1.3em}.contactcontrolleraddress .contactfieldcontent input{margin-bottom:.1em}.contactfieldcontent .contactfieldbutton{vertical-align:middle;margin-left:.5em}#upload-form{padding:6px}#upload-form div{padding:2px}#sourcename{color:#666;font-size:10px;margin:-5px 0 8px 2px}#contact-title{z-index:10}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/common.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1621 @@
+/***** Roundcube|Mail basic styles *****/
+
+body
+{
+  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+  margin: 8px;
+  background-color: #F6F6F6;
+  color: #000;
+  font-size: 12px;
+}
+
+body.iframe
+{
+  margin: 20px 0 0 0;
+  background-color: #FFF;
+}
+
+body.extwin
+{
+  margin: 10px;
+}
+
+select, input, textarea, button
+{
+  font-size: inherit;
+  font-family: inherit;
+}
+
+th
+{
+  font-weight: normal;
+}
+
+h3
+{
+  font-size: 18px;
+}
+
+a, a:active, a:visited
+{
+  color: #000;
+  outline: none;
+}
+
+a.button, a.button:visited, a.tab, a.tab:visited, a.axislist
+{
+  color: #000;
+  text-decoration: none;
+}
+
+a.tab
+{
+  width: 80px;
+  display: block;
+  text-align: center;
+}
+
+a.disabled
+{
+  color: #999;
+  text-decoration: none;
+  cursor: default;
+}
+
+hr
+{
+  height: 1px;
+  background-color: #666;
+  border-style: none;
+}
+
+input[type="text"],
+input[type="button"],
+input[type="password"],
+textarea
+{
+  border: 1px solid #666;
+  color: #333;
+  background-color: #FFF;
+}
+
+input, textarea
+{
+  color: black;
+  padding: 1px 3px;
+}
+
+input.placeholder,
+textarea.placeholder,
+input:-moz-placeholder,
+textarea:-moz-placeholder
+{
+  color: #aaa;
+}
+
+input.button
+{
+  height: 20px;
+  color: #333333;
+  font-size: 12px;
+  padding-left: 8px;
+  padding-right: 8px;
+  background: url(images/buttons/bg.gif?v=0200.203) repeat-x #f0f0f0;
+  border: 1px solid #a4a4a4;
+}
+
+input.button:hover
+{
+  color: black;
+}
+
+input.button[disabled],
+input.button[disabled]:hover
+{
+  color: #aaa;
+  border-color: #ccc;
+}
+
+input.mainaction
+{
+  font-weight: bold;
+  border: 1px solid #999;
+}
+
+img
+{
+  border: 0;
+}
+
+.alttext
+{
+  font-size: 11px;
+}
+
+.hint
+{
+  color: #666;
+  font-size: 11px;
+}
+
+.formlinks a,
+.formlinks a:visited
+{
+  color: #CC0000;
+  font-size: 11px;
+  text-decoration: none;
+}
+
+.formlinks a.disabled,
+.formlinks a.disabled:visited
+{
+  color: #999999;
+}
+
+.voice
+{
+  display: none;
+}
+
+.noselect
+{
+  user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -ms-user-select: none;
+  -webkit-user-select: none;
+}
+
+/* fixes vertical alignment of checkboxes and labels */
+label input,
+label span
+{
+  vertical-align: middle;
+}
+
+
+/** common user interface objects */
+
+#mainscreen
+{
+  position: absolute;
+  top: 85px;
+  right: 20px;
+  bottom: 20px;
+  left: 20px;
+}
+
+.extwin #mainscreen
+{
+  top: 43px;
+}
+
+body > #logo
+{
+  margin-left: 12px;
+  cursor: pointer;
+}
+
+#taskbar
+{
+  position: absolute;
+  top: 0px;
+  right: 0px;
+  height: 24px;
+  left: 250px;
+  background: url(images/taskbar.png?v=11a3.1640) top right no-repeat;
+  padding: 10px 6px 5px 0px;
+  text-align: right;
+  white-space: nowrap;
+  z-index: 2;
+}
+
+#taskbar a
+{
+  font-size: 11px;
+  color: #666666;
+  text-decoration: none;
+  padding: 6px 12px 6px 26px;
+  background: url(images/taskicons.gif?v=9719.2207) no-repeat;
+}
+
+#taskbar a:hover
+{
+  color: #333333;
+}
+
+#taskbar a.button-mail
+{
+  background-position: 0 0;
+}
+
+#taskbar a.button-addressbook
+{
+  background-position: 0 -25px;
+}
+
+#taskbar a.button-settings
+{
+  background-position: 0 -50px;
+}
+
+#taskbar a.button-logout
+{
+  background-position: 0 -75px;
+}
+
+body > #message
+{
+  position: absolute;
+  display: none;
+  top: -1px;
+  margin-left: -225px;
+  left: 50%;
+  z-index: 5000;
+  opacity: 0.85;
+}
+
+body > #message div
+{
+  width: 400px;
+  margin: 0px;
+  min-height: 22px;
+  padding: 8px 10px 8px 46px;
+}
+
+body > #message div.notice,
+body > #messagebody .part-notice,
+body > #mainscreen #messagebody .part-notice,
+#message-objects div.notice
+{
+  background: url(images/display/icons.png?v=e866.4201) 6px 3px no-repeat;
+  background-color: #F7FDCB;
+  border: 1px solid #C2D071;
+}
+
+body > #message div.error,
+body > #message div.warning,
+#message-objects div.warning,
+#message-objects div.error
+{
+  background: url(images/display/icons.png?v=e866.4201) 6px -97px no-repeat;
+  background-color: #EF9398;
+  border: 1px solid #DC5757;
+}
+
+body > #message div.confirmation,
+#message-objects div.confirmation
+{
+  background: url(images/display/icons.png?v=e866.4201) 6px -47px no-repeat;
+  background-color: #A6EF7B;
+  border: 1px solid #76C83F;
+}
+
+body > #message div.loading,
+body > #message div.uploading,
+#message-objects div.loading
+{
+  background: url(images/display/loading.gif?v=9bae.2710) 6px 3px no-repeat;
+  background-color: #EBEBEB;
+  border: 1px solid #CCCCCC;
+}
+
+body > #message div.voice
+{
+  position: absolute;
+  top: -1000px;
+  clip: rect(0 0 0 0);
+}
+
+body > #message a
+{
+  cursor: pointer;
+  text-decoration: underline;
+}
+
+body.extwin #closelink
+{
+  position: absolute;
+  top: 5px;
+  right: 20px;
+  text-align: right;
+  z-index:100;
+}
+
+.box
+{
+  border: 1px solid #999;
+}
+
+.boxtitle
+{
+  height: 12px !important;
+  padding: 3px 10px 4px 5px;
+  border-bottom: 1px solid #999;
+  color: #333;
+  font-size: 11px;
+  font-weight: bold;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+  white-space: nowrap;
+  background: url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;
+}
+
+.boxtitle .rightalign
+{
+  float: right;
+}
+
+body.iframe .boxtitle
+{
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+}
+
+.boxcontent
+{
+  padding: 15px 10px 10px 10px;
+  background-color: #F2F2F2;
+}
+
+.boxcontent .boxwarning
+{
+  margin: 0 0 10px;
+  display: block;
+  min-height: 22px;
+  background: url(images/display/icons.png?v=e866.4201) #EF9398 6px -95px no-repeat;
+  border: 1px solid #DC5757;
+  padding: 8px 10px 8px 46px;
+}
+
+.boxcontent table td.title
+{
+  color: #666;
+  padding-right: 10px;
+}
+
+.boxlistcontent
+{
+  position: absolute;
+  top: 20px;
+  bottom: 22px;
+  left: 0;
+  right: 0;
+  width: 100%;
+  overflow-y: auto;
+  overflow-x: hidden;
+}
+
+.boxsubject
+{
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  right: 0px;
+  overflow: hidden;
+  height: 22px;
+  border-bottom: 1px solid #999;
+  background: url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;
+}
+
+.boxfooter
+{
+  position: absolute;
+  bottom: 0px;
+  left: 0px;
+  right: 0px;
+  overflow: hidden;
+  height: 22px;
+  border-top: 1px solid #999;
+  background: url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;
+}
+
+.boxfooter a.button,
+.boxfooter a.buttonPas
+{
+  display: block;
+  float: left;
+  width: 34px;
+  height: 22px;
+  padding: 0px;
+  margin: 0;
+  overflow: hidden;
+  background: url(images/icons/groupactions.png?v=6760.604) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+.boxfooter a.groupactions
+{
+  background-position: 0 -26px;
+}
+
+.boxfooter a.delgroup {
+  background-position: 0 -49px;
+}
+
+.boxfooter a.buttonPas
+{
+  opacity: 0.35;
+}
+
+.pagenav span
+{
+  color: #444;
+  font-size: 11px;
+  text-shadow: white 1px 1px;
+  white-space: nowrap;
+}
+
+.pagenav a.button,
+.pagenav a.buttonPas
+{
+  display: block;
+  float: left;
+  width: 11px;
+  height: 11px;
+  padding: 0;
+  margin: 1px;
+  overflow: hidden;
+  background: url(images/pagenav.gif?v=8464.1147) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+.pagenav a.buttonPas {
+  opacity: 0.35;
+}
+
+.pagenav a.firstpageSel {
+  background-position: 0 -11px;
+}
+
+.pagenav a.prevpage {
+  background-position: -11px 0;
+}
+
+.pagenav a.prevpageSel {
+  background-position: -11px -11px;
+}
+
+.pagenav a.nextpage {
+  background-position: -22px 0;
+}
+
+.pagenav a.nextpageSel {
+  background-position: -22px -11px;
+}
+
+.pagenav a.lastpage {
+  background-position: -33px 0;
+}
+
+.pagenav a.lastpageSel {
+  background-position: -33px -11px;
+}
+
+#rcmcountdisplay
+{
+  float: left;
+  margin-right: 10px;
+}
+
+#countcontrols #pagejumper
+{
+  margin: 0 5px;
+  float: right;
+  text-align: center;
+  padding: 0;
+  cursor: default;
+  font-size: 10px;
+}
+
+.toolbarseparator {
+  display: block;
+  float: left;
+  width: 5px;
+  height: 32px;
+  padding: 0;
+  margin: 0 5px;
+  overflow: hidden;
+  background: url(images/abook_toolbar.png?v=8259.4881) -162px 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+.splitter
+{
+  user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  position: absolute;
+  background: url(images/dimple.png?v=42a0.158) center no-repeat;
+}
+
+.splitter-h
+{
+  cursor: n-resize; cursor: row-resize;
+  background-position: center 2px;
+}
+
+.splitter-v
+{
+  cursor: e-resize; cursor: col-resize;
+  background-position: 2px center;
+}
+
+.popupmenu
+{
+  position: absolute;
+  top: 32px;
+  left: 90px;
+  width: auto;
+  max-height: 70%;
+  overflow: -moz-scrollbars-vertical;
+  overflow-y: auto;
+  display: none;
+  background-color: #fff;
+  background-color: rgba(255, 255, 255, 0.95);
+  border: 1px solid #999;
+  padding: 4px;
+  z-index: 240;
+  border-radius: 3px;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  box-shadow: 1px 1px 12px #999;
+  -moz-box-shadow: 1px 1px 12px #999;
+  -webkit-box-shadow: #999 1px 1px 12px;
+}
+
+.popupmenu ul
+{
+  margin: -4px 0;
+  padding: 0;
+  list-style: none;
+}
+
+.popupmenu ul li
+{
+  font-size: 11px;
+  white-space: nowrap;
+  min-width: 100px;
+  margin: 3px -4px;
+}
+
+.popupmenu li a,
+.popupmenu li label
+{
+  display: block;
+  color: #a0a0a0;
+  padding: 3px 16px 3px 10px;
+  text-decoration: none;
+  min-height: 14px;
+  line-height: 14px;
+  background: transparent;
+}
+
+.popupmenu li label.comment
+{
+  color: #999;
+  font-style: italic;
+  padding-top: 4px;
+  padding-bottom: 3px;
+}
+
+.popupmenu li a.active,
+.popupmenu li a.active:active,
+.popupmenu li a.active:visited
+{
+  color: #333;
+  cursor: pointer;
+}
+
+.popupmenu li a.active:hover,
+.popupmenu.selectable li a.selected:hover
+{
+  color: #fff;
+  background-color: #c00;
+}
+
+.popupmenu li.block input
+{
+  float: left;
+}
+
+.popupmenu.selectable li a.selected
+{
+  background: url(images/messageicons.png?v=c493.2511) 2px -372px no-repeat;
+}
+
+.popupmenu.selectable li a
+{
+  padding-left: 20px;
+}
+
+.darkbg
+{
+  background-color: #F2F2F2 !important;
+}
+
+.dropbutton,
+.dropbutton span
+{
+  float: left;
+  height: 32px;
+}
+
+.dropbutton:hover
+{
+/*  background: url(images/dbutton.png?v=4d5a.230) 0 0 no-repeat transparent; */
+}
+
+.dropbutton span
+{
+  width: 9px;
+  background: url(images/dbutton.png?v=4d5a.230) -53px 0 no-repeat transparent;
+}
+
+.dropbutton span:hover
+{
+  cursor: pointer;
+  background-position: -74px 0;
+}
+
+img.uploading
+{
+  width: 16px;
+  height: 16px;
+}
+
+.popup label > input {
+  margin-left: 10px;
+}
+
+/***** common table settings ******/
+
+table.records-table thead tr th,
+table.records-table thead tr td
+{
+  height: 20px;
+  padding: 0px 4px 0px 4px;
+  vertical-align: middle;
+  border-bottom: 1px solid #999999;
+  color: #333333;
+  background: url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;
+  font-size: 11px;
+  font-weight: bold;
+  text-align: left;
+}
+
+table.records-table tbody tr td
+{
+  height: 16px;
+  padding: 2px 4px 2px 4px;
+  font-size: 11px;
+  white-space: nowrap;
+  border-bottom: 1px solid #EBEBEB;
+  overflow: hidden;
+  text-align: left;
+  outline: none;
+}
+
+table.records-table tr
+{
+  background-color: #FFFFFF;
+}
+
+table.records-table tr.selected td
+{
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+
+table.records-table tr.selected td a
+{
+  color: #FFFFFF;
+}
+
+table.records-table tr.focused td
+{
+}
+
+table.records-table tr.unfocused td
+{
+  color: #FFFFFF;
+  background-color: #929292;
+}
+
+ul.treelist li
+{
+  position: relative;
+}
+
+ul.treelist li div.treetoggle
+{
+  position: absolute;
+  left: 8px;
+  top: 2px;
+  width: 14px;
+  height: 16px;
+  cursor: pointer;
+}
+
+ul.treelist ul li div.treetoggle
+{
+  left: 25px;
+}
+
+ul.treelist ul ul li div.treetoggle
+{
+  left: 42px;
+}
+
+ul.treelist li div.collapsed
+{
+  background: url(images/icons/collapsed.png?v=45aa.97) bottom right no-repeat;
+}
+
+ul.treelist li div.expanded
+{
+  background: url(images/icons/expanded.png?v=3a53.89) bottom right no-repeat;
+}
+
+ul.treelist,
+ul.treelist li ul
+{
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  background-color: #FFFFFF;
+}
+
+ul.treelist li ul
+{
+  border-top: 1px solid #EBEBEB;
+}
+
+ul.treelist li
+{
+  display: block;
+  font-size: 11px;
+  border-bottom: 1px solid #EBEBEB;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+ul.treelist li a
+{
+  cursor: default;
+  display: block;
+  padding-left: 25px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  height: 16px;
+  line-height: 16px;
+  text-decoration: none;
+  white-space: nowrap;
+}
+
+ul.treelist li ul li a
+{
+  padding-left: 45px;
+}
+
+ul.treelist ul ul li a
+{
+  padding-left: 65px;
+}
+
+ul.treelist li ul li:last-child
+{
+  border-bottom: 0;
+}
+
+ul.treelist li.selected > a,
+ul.treelist li.selected > div a
+{
+  color: #FFF;
+  font-weight: bold;
+  background-color: #929292;
+}
+
+ul.treelist li.droptarget
+{
+  background-color: #FFFFA6;
+}
+
+/***** folders list *****/
+
+.folderlist li ul li:last-child
+{
+  border-bottom: 0 none;
+}
+
+.folderlist li.inbox a
+{
+  background-position: 5px -18px;
+}
+
+.folderlist li.drafts a
+{
+  background-position: 5px -36px;
+}
+
+.folderlist li.sent a
+{
+  background-position: 5px -53px;
+}
+
+.folderlist li.junk a
+{
+  background-position: 5px -72px;
+}
+
+.folderlist li.trash a
+{
+  background-position: 5px -180px;
+}
+
+.folderlist li.trash.empty a
+{
+  background-position: 5px -90px;
+}
+
+.folderlist li a
+{
+  cursor: default;
+  display: block;
+  position: relative;
+  padding-left: 25px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  text-decoration: none;
+  height: 15px;
+  background: url(images/icons/folders.png?v=7c4f.5218) 5px 1px no-repeat;
+}
+
+.folderlist li.virtual > a
+{
+  color: #666;
+}
+
+.folderlist li.selected,
+.folderlist li.droptarget li.selected
+{
+  background-color: #929292;
+}
+
+.folderlist li.selected > a,
+.folderlist li.droptarget li.selected a
+{
+  color: #FFF;
+  font-weight: bold;
+}
+
+.folderlist li.droptarget
+{
+  background-color: #FFFFA6;
+}
+
+/* styles for nested folders */
+.folderlist ul {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  border-top: 1px solid #EBEBEB;
+  background-color: #FFF;
+  font-weight: normal;
+}
+
+.folderlist li.mailbox ul li a {
+  padding-left: 40px;  /* 24 + 1 x 16 */
+  background-position: 20px 1px;  /* 4 + 1 x 16 */
+}
+.folderlist li.mailbox ul li div.treetoggle {
+  left: 23px !important;
+}
+
+.folderlist li.mailbox ul ul li.mailbox a {
+  padding-left: 56px;  /* 2x */
+  background-position: 36px 1px;
+}
+.folderlist li.mailbox ul ul li div.treetoggle {
+  left: 39px !important;
+}
+
+.folderlist li.mailbox ul ul ul li.mailbox a {
+  padding-left: 72px;  /* 3x */
+  background-position: 52px 1px;
+}
+.folderlist li.mailbox ul ul ul li div.treetoggle {
+  left: 55px !important;
+}
+
+.folderlist li.mailbox ul ul ul ul li.mailbox a {
+  padding-left: 88px;  /* 4x */
+  background-position: 68px 1px;
+}
+.folderlist li.mailbox ul ul ul ul li div.treetoggle {
+  left: 71px !important;
+}
+
+/* indent folders on levels > 4 */
+.folderlist li.mailbox ul ul ul ul ul li {
+  padding-left: 16px;
+}
+.folderlist li.mailbox ul ul ul ul ul li div.treetoggle {
+  left: 87px !important;
+}
+
+.folderlist li.mailbox ul li.drafts a
+{
+  background-position: 21px -36px;
+}
+
+.folderlist li.mailbox ul li.sent a
+{
+  background-position: 21px -53px;
+}
+
+.folderlist li.mailbox ul li.junk a
+{
+  background-position: 21px -72px;
+}
+
+.folderlist li.mailbox ul li.trash a
+{
+  background-position: 21px -180px;
+}
+
+.folderlist li.mailbox ul li.trash.empty a
+{
+  background-position: 21px -90px;
+}
+
+
+/***** mac-style quicksearch field *****/
+
+div.searchbox,
+#quicksearchbar
+{
+  position: relative;
+  width: 190px;
+  height: 20px;
+  text-align: right;
+  background: url(images/searchfield.gif?v=36a5.397) top left no-repeat;
+}
+
+#quicksearchbar
+{
+  position: absolute;
+  top: 55px;
+  right: 10px;
+}
+
+#searchreset,
+div.searchbox a.searchreset
+{
+  position: absolute;
+  top: 3px;
+  right: 12px;
+  text-decoration: none;
+}
+
+#searchmenulink,
+div.searchbox a.searchmenu,
+div.searchbox a.searchicon
+{
+ position: absolute;
+ top: 3px;
+ right: 168px;
+}
+
+div.searchbox a.searchreset
+{
+  display: block;
+  width: 14px;
+  height: 14px;
+  overflow: hidden;
+  white-space: nowrap;
+  text-indent: 50000px;
+  background: url(images/icons/reset.gif?v=a31d.164) top left no-repeat;
+}
+
+div.searchbox a.searchicon
+{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  overflow: hidden;
+  background: url(images/icons/glass.png?v=dcbc.302) top left no-repeat;
+}
+
+#quicksearchbar img
+{
+  vertical-align: middle;
+}
+
+#quicksearchbox,
+div.searchbox > input
+{
+  position: absolute;
+  top: 2px;
+  left: 24px;
+  width: 140px;
+  height: 15px;
+  font-size: 11px;
+  padding: 0px;
+  border: none;
+  outline: none;
+}
+
+.propform div.prop
+{
+  margin-bottom: 0.5em;
+}
+
+.propform div.prop.block label
+{
+  display: block;
+  margin-bottom: 2px;
+}
+
+.propform div.prop.block input,
+.propform div.prop.block textarea
+{
+  width: 97%;
+}
+
+.listsearchbox
+{
+  border-bottom: solid 1px #ddd;
+  padding: 2px 4px 1px;
+  display: none;
+  background-color: #f2f2f2;
+}
+
+.listsearchbox a.iconbutton.reset
+{
+  background: url(images/icons/reset.gif?v=a31d.164) no-repeat 0 0;
+  width: 13px;
+  height: 13px;
+  text-indent: 50000px;
+  position: absolute;
+  top: 3px;
+  left: 165px;
+  overflow: hidden;
+}
+
+/***** roundcube webmail pre-defined classes *****/
+
+#rcmversion
+{
+  position: absolute;
+  bottom: 10px;
+  right: 20px;
+  text-align: right;
+  white-space: nowrap;
+  font-size: 8pt;
+  color: #999;
+}
+
+#rcmdraglayer
+{
+  min-width: 300px;
+  width: auto !important;
+  width: 300px;
+  border: 1px solid #999999;
+  background-color: #fff;
+  padding-left: 8px;
+  padding-right: 8px;
+  padding-top: 3px;
+  padding-bottom: 3px;
+  font-size: 11px;
+  white-space: nowrap;
+  opacity: 0.82;
+  border-radius: 3px;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  box-shadow: 1px 1px 12px #999;
+  -moz-box-shadow: 1px 1px 12px #999;
+  -webkit-box-shadow: #999 1px 1px 12px;
+}
+
+.draglayercopy:before
+{
+  position: absolute;
+  bottom: -5px;
+  left: -6px;
+  content: " ";
+  width: 14px;
+  height: 14px;
+  background: url(images/messageactions.png?v=8c64.2615) -2px -128px no-repeat;
+}
+
+a.rcmContactAddress
+{
+  text-decoration: none;
+}
+
+a.rcmContactAddress:hover
+{
+  text-decoration: underline;
+}
+
+#rcmKSearchpane
+{
+  background-color: #F9F9F9;
+  border: 1px solid #CCCCCC;
+}
+
+#rcmKSearchpane ul
+{
+  margin: 0px;
+  padding: 2px;
+  list-style-image: none;
+  list-style-type: none;
+}
+
+#rcmKSearchpane ul li
+{
+  display: block;
+  height: 16px;
+  font-size: 11px;
+  padding-left: 6px;
+  padding-top: 2px;
+  padding-right: 6px;
+  white-space: nowrap;
+  cursor: pointer;
+}
+
+#rcmKSearchpane ul li.selected,
+#pagejump-selector ul li.selected
+{
+  color: #ffffff;
+  background-color: #CC3333;
+}
+
+#login-form
+{
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: 50px;
+  width: 400px;
+  border: 1px solid #999;
+}
+
+#login-form table td.title
+{
+  text-align: right;
+  white-space: nowrap;
+}
+
+#login-form table
+{
+  width: 1%;
+  margin: auto;
+}
+
+#login-form table td.input input
+{
+  width: 200px;
+}
+
+#login-bottomline
+{
+	width: 400px;
+	margin: 5em auto;
+	font-size: 85%;
+	text-align: center;
+	color: #666;
+}
+
+#login-noscriptwarning
+{
+	margin: 2em auto 0 auto;
+	width: 400px;
+	color: #cf2734;
+	font-weight: bold;
+}
+
+.disabled,
+a.disabled
+{
+  color: #999;
+}
+
+font.bold
+{
+  font-weight: bold;
+}
+
+.formbuttons
+{
+  text-align: center;
+}
+
+/***** onclick menu list *****/
+
+ul.toolbarmenu
+{
+  margin: -4px 0 -4px 0;
+  padding: 0;
+  list-style: none;
+}
+
+ul.toolbarmenu li
+{
+  font-size: 11px;
+  white-space: nowrap;
+  min-width: 130px;
+  margin: 2px -4px;
+}
+
+ul.toolbarmenu li a
+{
+  display: block;
+  color: #a0a0a0;
+  padding: 3px 12px 3px 28px;
+  text-decoration: none;
+  min-height: 14px;
+  line-height: 14px;
+}
+
+ul.toolbarmenu li a.active,
+ul.toolbarmenu li a.active:active,
+ul.toolbarmenu li a.active:visited
+{
+  color: #333;
+}
+
+ul.toolbarmenu li input
+{
+  vertical-align: middle;
+}
+
+ul.toolbarmenu li hr
+{
+  color: #ccc;
+  width: 130px;
+  height: 1px;
+  margin: 2px 1px 2px 1px;
+}
+
+ul.toolbarmenu li img
+{
+  float: left;
+  margin: 0 2px;
+}
+
+div.popupmenu ul li.separator_below,
+ul.toolbarmenu li.separator_below
+{
+  border-bottom: 1px solid #ccc;
+  margin-bottom: 2px;
+  padding-bottom: 2px;
+}
+
+div.popupmenu ul li.separator_above,
+ul.toolbarmenu li.separator_above
+{
+  border-top: 1px solid #ccc;
+  margin-top: 2px;
+  padding-top: 2px;
+}
+
+#searchmenu
+{
+  width: 160px;
+}
+
+#searchmenu ul.toolbarmenu
+{
+  margin: 0;
+}
+
+#searchmenu ul.toolbarmenu li
+{
+  margin: 1px 4px 1px;
+}
+
+#searchmenu ul.toolbarmenu li label
+{
+  padding: 2px 0;
+  color: black;
+}
+
+#searchmenu ul.toolbarmenu li label.comment
+{
+  color: #999;
+}
+
+#searchmenu select
+{
+  width: 100%;
+}
+
+#pagejump-selector
+{
+  max-height: 250px;
+  overflow-x: hidden;
+}
+
+#pagejump-selector ul li
+{
+  min-width: 45px;
+  padding: 2px 5px;
+  cursor: default;
+}
+
+
+/*** folder selector ***/
+
+#folder-selector li a
+{
+  padding: 0;
+}
+
+#folder-selector li a span
+{
+  background: url(images/icons/folders.png?v=7c4f.5218) no-repeat 6px 0;
+  display: block;
+  height: 15px;
+  min-height: 14px;
+  padding: 2px 4px 2px 28px;
+  overflow: hidden;
+  max-width: 120px;
+  text-overflow: ellipsis;
+}
+
+#folder-selector li a.virtual
+{
+  color: #A0A0A0;
+}
+
+#folder-selector li a.active:hover span
+{
+  color: white;
+}
+
+#folder-selector li a.inbox span
+{
+  background-position: 6px -18px;
+}
+#folder-selector li a.drafts span
+{
+  background-position: 6px -37px;
+}
+#folder-selector li a.sent span
+{
+  background-position: 6px -54px;
+}
+#folder-selector li a.trash span
+{
+  background-position: 6px -91px;
+}
+#folder-selector li a.junk span
+{
+  background-position: 6px -73px;
+}
+
+
+/***** tabbed interface elements *****/
+
+div.tabsbar,
+#tabsbar
+{
+  position: absolute;
+  top: 50px;
+  left: 220px;
+  right: 20px;
+  height: 22px;
+  border-bottom: 1px solid #999999;
+  white-space: nowrap;
+}
+
+div.tabsbar
+{
+  top: 35px;
+  left: 12px;
+  right: 12px;
+}
+
+span.tablink,
+span.tablink-selected
+{
+  float: left;
+  height: 23px !important;
+  height: 22px;
+  overflow: hidden;
+  background: url(images/tabs-left.gif?v=d7b0.230) top left no-repeat;
+}
+
+span.tablink
+{
+  cursor: pointer;
+}
+
+span.tablink-selected
+{
+  cursor: default;
+  background-position: 0px -23px;
+}
+
+span.tablink a,
+span.tablink-selected a
+{
+  display: inline-block;
+  padding: 5px 10px 0 5px;
+  margin-left: 5px;
+  height: 23px;
+  color: #555555;
+  max-width: 185px;
+  text-decoration: none;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+  background: url(images/tabs-right.gif?v=5c83.1417) top right no-repeat;
+}
+
+span.tablink-selected a
+{
+  cursor: inherit;
+  color: #000000;
+  background-position: right -23px;
+}
+
+fieldset
+{
+  margin-bottom: 1em;
+  border: 1px solid #999999;
+  padding: 4px 8px 9px 8px; 
+}
+
+legend
+{
+  color: #999999;
+}
+
+fieldset.tabbed
+{
+  margin-top: 22px;
+  padding-top: 12px;
+}
+
+.quota_text {
+  text-align: center;
+  font-size: 10px;
+  color: #666;
+  border: 1px solid #999;
+  cursor: default;
+}
+.quota_bg { background-color: white; }
+.quota_high { background: url(images/quota-colors.png?v=e7fa.219) repeat-x 0 -28px #f90509; }
+.quota_mid { background: url(images/quota-colors.png?v=e7fa.219) repeat-x 0 -14px #e3e909; }
+.quota_low { background: url(images/quota-colors.png?v=e7fa.219) repeat-x 0 0px #05f905; }
+.quota_text_high { color: white; }
+.quota_text_mid { color: #666; }
+.quota_text_low { color: #666; }
+
+table.quota-info {
+	border-spacing: 0;
+	border-collapse: collapse;
+	table-layout: fixed;
+	margin: 2px;
+}
+
+table.quota-info td,
+table.quota-info th {
+	border: 1px solid #999;
+	padding: 2px 3px;
+	text-align: center;
+	min-width: 80px;
+	color: #333;
+	font-size: 11px;
+}
+
+table.quota-info th {
+	font-weight: bold;
+	background-color: #ddd;
+}
+
+table.quota-info td.name {
+	text-align: left;
+}
+
+table.quota-info td.root {
+	font-style: italic;
+}
+
+/********** TinyMCE styles **********/
+.mce-btn-small button
+{
+  height: 22px;
+}
+
+.mce-btn-small i
+{
+  line-height: 16px !important;
+  vertical-align: text-top !important;
+}
+
+.mce-combobox button
+{
+    padding: 6px 8px !important;
+}
+
+.mce-tinymce
+{
+  border-radius: 0 !important;
+{
+
+.mce-panel.mce-toolbar-grp
+{
+  border: 0 !important;
+}
+
+#image-selector-form.droptarget {
+  background: url(images/filedrop.png?v=080e.581) center bottom no-repeat;
+}
+
+#image-selector-form.droptarget.hover
+{
+  background-color: #F0F0EE;
+  box-shadow: 0 0 5px 0 #999;
+  -moz-box-shadow: 0 0 5px 0 #999;
+  -o-box-shadow: 0 0 5px 0 #999;
+}
+
+/** PGP key import dialog **/
+.pgpkeyimport div.key {
+  position: relative;
+  margin-bottom: 2px;
+  padding: 1em 1em 5px;
+  background-color: #ebebeb;
+}
+
+.pgpkeyimport div.key.revoked,
+.pgpkeyimport div.key.disabled {
+  color: #a0a0a0;
+}
+
+.pgpkeyimport div.key label {
+  display: inline-block;
+  margin-right: 0.5em;
+}
+
+.pgpkeyimport div.key label:after {
+  content: ":";
+}
+
+.pgpkeyimport div.key label + a,
+.pgpkeyimport div.key label + span {
+  display: inline-block;
+  margin-right: 2em;
+  white-space: nowrap;
+}
+
+.pgpkeyimport div.key label + a {
+  font-weight: bold;
+}
+
+.pgpkeyimport ul.uids {
+  margin: 5px 1em 0 1em;
+  padding: 0;
+}
+
+.pgpkeyimport li.uid {
+  border: 0;
+  padding: 2px;
+}
+
+.pgpkeyimport div.key input.button.importkey {
+  position: absolute;
+  top: 0.8em;
+  right: 0.8em;
+  padding: 2px 6px;
+}
+
+.pgpkeyimport div.key input.button[disabled] {
+  display: none;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/common.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;margin:8px;background-color:#f6f6f6;color:#000;font-size:12px}body.iframe{margin:20px 0 0 0;background-color:#FFF}body.extwin{margin:10px}select,input,textarea,button{font-size:inherit;font-family:inherit}th{font-weight:normal}h3{font-size:18px}a,a:active,a:visited{color:#000;outline:0}a.button,a.button:visited,a.tab,a.tab:visited,a.axislist{color:#000;text-decoration:none}a.tab{width:80px;display:block;text-align:center}a.disabled{color:#999;text-decoration:none;cursor:default}hr{height:1px;background-color:#666;border-style:none}input[type="text"],input[type="button"],input[type="password"],textarea{border:1px solid #666;color:#333;background-color:#FFF}input,textarea{color:black;padding:1px 3px}input.placeholder,textarea.placeholder,input:-moz-placeholder,textarea:-moz-placeholder{color:#aaa}input.button{height:20px;color:#333;font-size:12px;padding-left:8px;padding-right:8px;background:url(images/buttons/bg.gif?v=0200.203) repeat-x #f0f0f0;border:1px solid #a4a4a4}input.button:hover{color:black}input.button[disabled],input.button[disabled]:hover{color:#aaa;border-color:#ccc}input.mainaction{font-weight:bold;border:1px solid #999}img{border:0}.alttext{font-size:11px}.hint{color:#666;font-size:11px}.formlinks a,.formlinks a:visited{color:#c00;font-size:11px;text-decoration:none}.formlinks a.disabled,.formlinks a.disabled:visited{color:#999}.voice{display:none}.noselect{user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;-webkit-user-select:none}label input,label span{vertical-align:middle}#mainscreen{position:absolute;top:85px;right:20px;bottom:20px;left:20px}.extwin #mainscreen{top:43px}body>#logo{margin-left:12px;cursor:pointer}#taskbar{position:absolute;top:0;right:0;height:24px;left:250px;background:url(images/taskbar.png?v=11a3.1640) top right no-repeat;padding:10px 6px 5px 0;text-align:right;white-space:nowrap;z-index:2}#taskbar a{font-size:11px;color:#666;text-decoration:none;padding:6px 12px 6px 26px;background:url(images/taskicons.gif?v=9719.2207) no-repeat}#taskbar a:hover{color:#333}#taskbar a.button-mail{background-position:0 0}#taskbar a.button-addressbook{background-position:0 -25px}#taskbar a.button-settings{background-position:0 -50px}#taskbar a.button-logout{background-position:0 -75px}body>#message{position:absolute;display:none;top:-1px;margin-left:-225px;left:50%;z-index:5000;opacity:.85}body>#message div{width:400px;margin:0;min-height:22px;padding:8px 10px 8px 46px}body>#message div.notice,body>#messagebody .part-notice,body>#mainscreen #messagebody .part-notice,#message-objects div.notice{background:url(images/display/icons.png?v=e866.4201) 6px 3px no-repeat;background-color:#f7fdcb;border:1px solid #c2d071}body>#message div.error,body>#message div.warning,#message-objects div.warning,#message-objects div.error{background:url(images/display/icons.png?v=e866.4201) 6px -97px no-repeat;background-color:#ef9398;border:1px solid #dc5757}body>#message div.confirmation,#message-objects div.confirmation{background:url(images/display/icons.png?v=e866.4201) 6px -47px no-repeat;background-color:#a6ef7b;border:1px solid #76c83f}body>#message div.loading,body>#message div.uploading,#message-objects div.loading{background:url(images/display/loading.gif?v=9bae.2710) 6px 3px no-repeat;background-color:#ebebeb;border:1px solid #ccc}body>#message div.voice{position:absolute;top:-1000px;clip:rect(0 0 0 0)}body>#message a{cursor:pointer;text-decoration:underline}body.extwin #closelink{position:absolute;top:5px;right:20px;text-align:right;z-index:100}.box{border:1px solid #999}.boxtitle{height:12px !important;padding:3px 10px 4px 5px;border-bottom:1px solid #999;color:#333;font-size:11px;font-weight:bold;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;background:url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC}.boxtitle .rightalign{float:right}body.iframe .boxtitle{position:fixed;top:0;left:0;width:100%}.boxcontent{padding:15px 10px 10px 10px;background-color:#f2f2f2}.boxcontent .boxwarning{margin:0 0 10px;display:block;min-height:22px;background:url(images/display/icons.png?v=e866.4201) #ef9398 6px -95px no-repeat;border:1px solid #dc5757;padding:8px 10px 8px 46px}.boxcontent table td.title{color:#666;padding-right:10px}.boxlistcontent{position:absolute;top:20px;bottom:22px;left:0;right:0;width:100%;overflow-y:auto;overflow-x:hidden}.boxsubject{position:absolute;top:0;left:0;right:0;overflow:hidden;height:22px;border-bottom:1px solid #999;background:url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC}.boxfooter{position:absolute;bottom:0;left:0;right:0;overflow:hidden;height:22px;border-top:1px solid #999;background:url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC}.boxfooter a.button,.boxfooter a.buttonPas{display:block;float:left;width:34px;height:22px;padding:0;margin:0;overflow:hidden;background:url(images/icons/groupactions.png?v=6760.604) 0 0 no-repeat transparent;opacity:.99}.boxfooter a.groupactions{background-position:0 -26px}.boxfooter a.delgroup{background-position:0 -49px}.boxfooter a.buttonPas{opacity:.35}.pagenav span{color:#444;font-size:11px;text-shadow:white 1px 1px;white-space:nowrap}.pagenav a.button,.pagenav a.buttonPas{display:block;float:left;width:11px;height:11px;padding:0;margin:1px;overflow:hidden;background:url(images/pagenav.gif?v=8464.1147) 0 0 no-repeat transparent;opacity:.99}.pagenav a.buttonPas{opacity:.35}.pagenav a.firstpageSel{background-position:0 -11px}.pagenav a.prevpage{background-position:-11px 0}.pagenav a.prevpageSel{background-position:-11px -11px}.pagenav a.nextpage{background-position:-22px 0}.pagenav a.nextpageSel{background-position:-22px -11px}.pagenav a.lastpage{background-position:-33px 0}.pagenav a.lastpageSel{background-position:-33px -11px}#rcmcountdisplay{float:left;margin-right:10px}#countcontrols #pagejumper{margin:0 5px;float:right;text-align:center;padding:0;cursor:default;font-size:10px}.toolbarseparator{display:block;float:left;width:5px;height:32px;padding:0;margin:0 5px;overflow:hidden;background:url(images/abook_toolbar.png?v=8259.4881) -162px 0 no-repeat transparent;opacity:.99}.splitter{user-select:none;-moz-user-select:none;-khtml-user-select:none;position:absolute;background:url(images/dimple.png?v=42a0.158) center no-repeat}.splitter-h{cursor:n-resize;cursor:row-resize;background-position:center 2px}.splitter-v{cursor:e-resize;cursor:col-resize;background-position:2px center}.popupmenu{position:absolute;top:32px;left:90px;width:auto;max-height:70%;overflow:-moz-scrollbars-vertical;overflow-y:auto;display:none;background-color:#fff;background-color:rgba(255,255,255,0.95);border:1px solid #999;padding:4px;z-index:240;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:1px 1px 12px #999;-moz-box-shadow:1px 1px 12px #999;-webkit-box-shadow:#999 1px 1px 12px}.popupmenu ul{margin:-4px 0;padding:0;list-style:none}.popupmenu ul li{font-size:11px;white-space:nowrap;min-width:100px;margin:3px -4px}.popupmenu li a,.popupmenu li label{display:block;color:#a0a0a0;padding:3px 16px 3px 10px;text-decoration:none;min-height:14px;line-height:14px;background:transparent}.popupmenu li label.comment{color:#999;font-style:italic;padding-top:4px;padding-bottom:3px}.popupmenu li a.active,.popupmenu li a.active:active,.popupmenu li a.active:visited{color:#333;cursor:pointer}.popupmenu li a.active:hover,.popupmenu.selectable li a.selected:hover{color:#fff;background-color:#c00}.popupmenu li.block input{float:left}.popupmenu.selectable li a.selected{background:url(images/messageicons.png?v=c493.2511) 2px -372px no-repeat}.popupmenu.selectable li a{padding-left:20px}.darkbg{background-color:#f2f2f2 !important}.dropbutton,.dropbutton span{float:left;height:32px}.dropbutton span{width:9px;background:url(images/dbutton.png?v=4d5a.230) -53px 0 no-repeat transparent}.dropbutton span:hover{cursor:pointer;background-position:-74px 0}img.uploading{width:16px;height:16px}.popup label>input{margin-left:10px}table.records-table thead tr th,table.records-table thead tr td{height:20px;padding:0 4px 0 4px;vertical-align:middle;border-bottom:1px solid #999;color:#333;background:url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;font-size:11px;font-weight:bold;text-align:left}table.records-table tbody tr td{height:16px;padding:2px 4px 2px 4px;font-size:11px;white-space:nowrap;border-bottom:1px solid #ebebeb;overflow:hidden;text-align:left;outline:0}table.records-table tr{background-color:#fff}table.records-table tr.selected td{color:#fff;background-color:#c33}table.records-table tr.selected td a{color:#fff}table.records-table tr.unfocused td{color:#fff;background-color:#929292}ul.treelist li{position:relative}ul.treelist li div.treetoggle{position:absolute;left:8px;top:2px;width:14px;height:16px;cursor:pointer}ul.treelist ul li div.treetoggle{left:25px}ul.treelist ul ul li div.treetoggle{left:42px}ul.treelist li div.collapsed{background:url(images/icons/collapsed.png?v=45aa.97) bottom right no-repeat}ul.treelist li div.expanded{background:url(images/icons/expanded.png?v=3a53.89) bottom right no-repeat}ul.treelist,ul.treelist li ul{list-style:none;margin:0;padding:0;background-color:#fff}ul.treelist li ul{border-top:1px solid #ebebeb}ul.treelist li{display:block;font-size:11px;border-bottom:1px solid #ebebeb;white-space:nowrap;overflow:hidden}ul.treelist li a{cursor:default;display:block;padding-left:25px;padding-top:2px;padding-bottom:2px;height:16px;line-height:16px;text-decoration:none;white-space:nowrap}ul.treelist li ul li a{padding-left:45px}ul.treelist ul ul li a{padding-left:65px}ul.treelist li ul li:last-child{border-bottom:0}ul.treelist li.selected>a,ul.treelist li.selected>div a{color:#FFF;font-weight:bold;background-color:#929292}ul.treelist li.droptarget{background-color:#ffffa6}.folderlist li ul li:last-child{border-bottom:0 none}.folderlist li.inbox a{background-position:5px -18px}.folderlist li.drafts a{background-position:5px -36px}.folderlist li.sent a{background-position:5px -53px}.folderlist li.junk a{background-position:5px -72px}.folderlist li.trash a{background-position:5px -180px}.folderlist li.trash.empty a{background-position:5px -90px}.folderlist li a{cursor:default;display:block;position:relative;padding-left:25px;padding-top:2px;padding-bottom:2px;text-decoration:none;height:15px;background:url(images/icons/folders.png?v=7c4f.5218) 5px 1px no-repeat}.folderlist li.virtual>a{color:#666}.folderlist li.selected,.folderlist li.droptarget li.selected{background-color:#929292}.folderlist li.selected>a,.folderlist li.droptarget li.selected a{color:#FFF;font-weight:bold}.folderlist li.droptarget{background-color:#ffffa6}.folderlist ul{list-style:none;padding:0;margin:0;border-top:1px solid #ebebeb;background-color:#FFF;font-weight:normal}.folderlist li.mailbox ul li a{padding-left:40px;background-position:20px 1px}.folderlist li.mailbox ul li div.treetoggle{left:23px !important}.folderlist li.mailbox ul ul li.mailbox a{padding-left:56px;background-position:36px 1px}.folderlist li.mailbox ul ul li div.treetoggle{left:39px !important}.folderlist li.mailbox ul ul ul li.mailbox a{padding-left:72px;background-position:52px 1px}.folderlist li.mailbox ul ul ul li div.treetoggle{left:55px !important}.folderlist li.mailbox ul ul ul ul li.mailbox a{padding-left:88px;background-position:68px 1px}.folderlist li.mailbox ul ul ul ul li div.treetoggle{left:71px !important}.folderlist li.mailbox ul ul ul ul ul li{padding-left:16px}.folderlist li.mailbox ul ul ul ul ul li div.treetoggle{left:87px !important}.folderlist li.mailbox ul li.drafts a{background-position:21px -36px}.folderlist li.mailbox ul li.sent a{background-position:21px -53px}.folderlist li.mailbox ul li.junk a{background-position:21px -72px}.folderlist li.mailbox ul li.trash a{background-position:21px -180px}.folderlist li.mailbox ul li.trash.empty a{background-position:21px -90px}div.searchbox,#quicksearchbar{position:relative;width:190px;height:20px;text-align:right;background:url(images/searchfield.gif?v=36a5.397) top left no-repeat}#quicksearchbar{position:absolute;top:55px;right:10px}#searchreset,div.searchbox a.searchreset{position:absolute;top:3px;right:12px;text-decoration:none}#searchmenulink,div.searchbox a.searchmenu,div.searchbox a.searchicon{position:absolute;top:3px;right:168px}div.searchbox a.searchreset{display:block;width:14px;height:14px;overflow:hidden;white-space:nowrap;text-indent:50000px;background:url(images/icons/reset.gif?v=a31d.164) top left no-repeat}div.searchbox a.searchicon{display:inline-block;width:16px;height:16px;overflow:hidden;background:url(images/icons/glass.png?v=dcbc.302) top left no-repeat}#quicksearchbar img{vertical-align:middle}#quicksearchbox,div.searchbox>input{position:absolute;top:2px;left:24px;width:140px;height:15px;font-size:11px;padding:0;border:0;outline:0}.propform div.prop{margin-bottom:.5em}.propform div.prop.block label{display:block;margin-bottom:2px}.propform div.prop.block input,.propform div.prop.block textarea{width:97%}.listsearchbox{border-bottom:solid 1px #ddd;padding:2px 4px 1px;display:none;background-color:#f2f2f2}.listsearchbox a.iconbutton.reset{background:url(images/icons/reset.gif?v=a31d.164) no-repeat 0 0;width:13px;height:13px;text-indent:50000px;position:absolute;top:3px;left:165px;overflow:hidden}#rcmversion{position:absolute;bottom:10px;right:20px;text-align:right;white-space:nowrap;font-size:8pt;color:#999}#rcmdraglayer{min-width:300px;width:auto !important;width:300px;border:1px solid #999;background-color:#fff;padding-left:8px;padding-right:8px;padding-top:3px;padding-bottom:3px;font-size:11px;white-space:nowrap;opacity:.82;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:1px 1px 12px #999;-moz-box-shadow:1px 1px 12px #999;-webkit-box-shadow:#999 1px 1px 12px}.draglayercopy:before{position:absolute;bottom:-5px;left:-6px;content:" ";width:14px;height:14px;background:url(images/messageactions.png?v=8c64.2615) -2px -128px no-repeat}a.rcmContactAddress{text-decoration:none}a.rcmContactAddress:hover{text-decoration:underline}#rcmKSearchpane{background-color:#f9f9f9;border:1px solid #ccc}#rcmKSearchpane ul{margin:0;padding:2px;list-style-image:none;list-style-type:none}#rcmKSearchpane ul li{display:block;height:16px;font-size:11px;padding-left:6px;padding-top:2px;padding-right:6px;white-space:nowrap;cursor:pointer}#rcmKSearchpane ul li.selected,#pagejump-selector ul li.selected{color:#fff;background-color:#c33}#login-form{margin-left:auto;margin-right:auto;margin-top:50px;width:400px;border:1px solid #999}#login-form table td.title{text-align:right;white-space:nowrap}#login-form table{width:1%;margin:auto}#login-form table td.input input{width:200px}#login-bottomline{width:400px;margin:5em auto;font-size:85%;text-align:center;color:#666}#login-noscriptwarning{margin:2em auto 0 auto;width:400px;color:#cf2734;font-weight:bold}.disabled,a.disabled{color:#999}font.bold{font-weight:bold}.formbuttons{text-align:center}ul.toolbarmenu{margin:-4px 0 -4px 0;padding:0;list-style:none}ul.toolbarmenu li{font-size:11px;white-space:nowrap;min-width:130px;margin:2px -4px}ul.toolbarmenu li a{display:block;color:#a0a0a0;padding:3px 12px 3px 28px;text-decoration:none;min-height:14px;line-height:14px}ul.toolbarmenu li a.active,ul.toolbarmenu li a.active:active,ul.toolbarmenu li a.active:visited{color:#333}ul.toolbarmenu li input{vertical-align:middle}ul.toolbarmenu li hr{color:#ccc;width:130px;height:1px;margin:2px 1px 2px 1px}ul.toolbarmenu li img{float:left;margin:0 2px}div.popupmenu ul li.separator_below,ul.toolbarmenu li.separator_below{border-bottom:1px solid #ccc;margin-bottom:2px;padding-bottom:2px}div.popupmenu ul li.separator_above,ul.toolbarmenu li.separator_above{border-top:1px solid #ccc;margin-top:2px;padding-top:2px}#searchmenu{width:160px}#searchmenu ul.toolbarmenu{margin:0}#searchmenu ul.toolbarmenu li{margin:1px 4px 1px}#searchmenu ul.toolbarmenu li label{padding:2px 0;color:black}#searchmenu ul.toolbarmenu li label.comment{color:#999}#searchmenu select{width:100%}#pagejump-selector{max-height:250px;overflow-x:hidden}#pagejump-selector ul li{min-width:45px;padding:2px 5px;cursor:default}#folder-selector li a{padding:0}#folder-selector li a span{background:url(images/icons/folders.png?v=7c4f.5218) no-repeat 6px 0;display:block;height:15px;min-height:14px;padding:2px 4px 2px 28px;overflow:hidden;max-width:120px;text-overflow:ellipsis}#folder-selector li a.virtual{color:#a0a0a0}#folder-selector li a.active:hover span{color:white}#folder-selector li a.inbox span{background-position:6px -18px}#folder-selector li a.drafts span{background-position:6px -37px}#folder-selector li a.sent span{background-position:6px -54px}#folder-selector li a.trash span{background-position:6px -91px}#folder-selector li a.junk span{background-position:6px -73px}div.tabsbar,#tabsbar{position:absolute;top:50px;left:220px;right:20px;height:22px;border-bottom:1px solid #999;white-space:nowrap}div.tabsbar{top:35px;left:12px;right:12px}span.tablink,span.tablink-selected{float:left;height:23px !important;height:22px;overflow:hidden;background:url(images/tabs-left.gif?v=d7b0.230) top left no-repeat}span.tablink{cursor:pointer}span.tablink-selected{cursor:default;background-position:0 -23px}span.tablink a,span.tablink-selected a{display:inline-block;padding:5px 10px 0 5px;margin-left:5px;height:23px;color:#555;max-width:185px;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;background:url(images/tabs-right.gif?v=5c83.1417) top right no-repeat}span.tablink-selected a{cursor:inherit;color:#000;background-position:right -23px}fieldset{margin-bottom:1em;border:1px solid #999;padding:4px 8px 9px 8px}legend{color:#999}fieldset.tabbed{margin-top:22px;padding-top:12px}.quota_text{text-align:center;font-size:10px;color:#666;border:1px solid #999;cursor:default}.quota_bg{background-color:white}.quota_high{background:url(images/quota-colors.png?v=e7fa.219) repeat-x 0 -28px #f90509}.quota_mid{background:url(images/quota-colors.png?v=e7fa.219) repeat-x 0 -14px #e3e909}.quota_low{background:url(images/quota-colors.png?v=e7fa.219) repeat-x 0 0 #05f905}.quota_text_high{color:white}.quota_text_mid{color:#666}.quota_text_low{color:#666}table.quota-info{border-spacing:0;border-collapse:collapse;table-layout:fixed;margin:2px}table.quota-info td,table.quota-info th{border:1px solid #999;padding:2px 3px;text-align:center;min-width:80px;color:#333;font-size:11px}table.quota-info th{font-weight:bold;background-color:#ddd}table.quota-info td.name{text-align:left}table.quota-info td.root{font-style:italic}.mce-btn-small button{height:22px}.mce-btn-small i{line-height:16px !important;vertical-align:text-top !important}.mce-combobox button{padding:6px 8px !important}.mce-tinymce{border-radius:0 !important;{.mce-panel.mce-toolbar-grp{border:0 !important}#image-selector-form.droptarget{background:url(images/filedrop.png?v=080e.581) center bottom no-repeat}#image-selector-form.droptarget.hover{background-color:#f0f0ee;box-shadow:0 0 5px 0 #999;-moz-box-shadow:0 0 5px 0 #999;-o-box-shadow:0 0 5px 0 #999}.pgpkeyimport div.key{position:relative;margin-bottom:2px;padding:1em 1em 5px;background-color:#ebebeb}.pgpkeyimport div.key.revoked,.pgpkeyimport div.key.disabled{color:#a0a0a0}.pgpkeyimport div.key label{display:inline-block;margin-right:.5em}.pgpkeyimport div.key label:after{content:":"}.pgpkeyimport div.key label+a,.pgpkeyimport div.key label+span{display:inline-block;margin-right:2em;white-space:nowrap}.pgpkeyimport div.key label+a{font-weight:bold}.pgpkeyimport ul.uids{margin:5px 1em 0 1em;padding:0}.pgpkeyimport li.uid{border:0;padding:2px}.pgpkeyimport div.key input.button.importkey{position:absolute;top:.8em;right:.8em;padding:2px 6px}.pgpkeyimport div.key input.button[disabled]{display:none}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/embed.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+/**
+ * Roundcube webmail "embedded" stylesheets
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+.rcmail-inline-message {
+  font-family: sans-serif;
+  font-size: 14px;
+  color: #000;
+  margin-bottom: .8em;
+  min-height: 30px;
+  padding: 10px 10px 6px 46px;
+  background: url(images/display/icons.png?v=e866.4201) 6px 3px no-repeat #F7FDCB;
+  border: 1px solid #C2D071;
+}
+
+.rcmail-inline-warning {
+  background-position: 6px -92px;
+}
+
+.rcmail-inline-message > button {
+  margin-left: 1em;
+  vertical-align: baseline;
+}
+
+.rcmail-inline-message em {
+  font-size: 90%;
+  color: #666;
+}
+
+.rcmail-inline-buttons {
+  margin-bottom: 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/embed.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+.rcmail-inline-message{font-family:sans-serif;font-size:14px;color:#000;margin-bottom:.8em;min-height:30px;padding:10px 10px 6px 46px;background:url(images/display/icons.png?v=e866.4201) 6px 3px no-repeat #f7fdcb;border:1px solid #c2d071}.rcmail-inline-warning{background-position:6px -92px}.rcmail-inline-message>button{margin-left:1em;vertical-align:baseline}.rcmail-inline-message em{font-size:90%;color:#666}.rcmail-inline-buttons{margin-bottom:0}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/functions.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1110 @@
+/**
+ * Roundcube functions for default skin interface
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2006-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+
+/**
+ * Settings
+ */
+
+function rcube_init_settings_tabs()
+{
+  var el, cl, container = $('#tabsbar'),
+    last_tab = $('span:last', container),
+    tab = '#settingstabpreferences',
+    action = window.rcmail && rcmail.env.action ? rcmail.env.action : null;
+
+  // move About tab to the end
+  if (last_tab && last_tab.attr('id') != 'settingstababout' && (el = $('#settingstababout'))) {
+    cl = el.clone(true);
+    el.remove();
+    last_tab.after(cl);
+  }
+
+  // get selected tab
+  if (action)
+    tab = '#settingstab' + (action.indexOf('identity')>0 ? 'identities' : action.replace(/\./g, ''));
+
+  $(tab).addClass('tablink-selected');
+  $('a', tab).removeAttr('onclick').click(function() { return false; });
+}
+
+// Fieldsets-to-tabs converter
+// Warning: don't place "caller" <script> inside page element (id)
+function rcube_init_tabs(id, current)
+{
+  var content = $('#'+id),
+    fs = content.children('fieldset');
+
+  if (!fs.length)
+    return;
+
+  current = current ? current : 0;
+
+  // first hide not selected tabs
+  fs.each(function(idx) { if (idx != current) $(this).hide(); });
+
+  // create tabs container
+  var tabs = $('<div>').addClass('tabsbar').appendTo(content);
+
+  // convert fildsets into tabs
+  fs.each(function(idx) {
+    var tab, a, elm = $(this), legend = elm.children('legend');
+
+    // create a tab
+    a   = $('<a>').text(legend.text()).attr('href', '#');
+    tab = $('<span>').attr({'id': 'tab'+idx, 'class': 'tablink'})
+        .click(function() { rcube_show_tab(id, idx); return false })
+
+    // remove legend
+    legend.remove();
+    // style fieldset
+    elm.addClass('tabbed');
+    // style selected tab
+    if (idx == current)
+      tab.addClass('tablink-selected');
+
+    // add the tab to container
+    tab.append(a).appendTo(tabs);
+  });
+}
+
+function rcube_show_tab(id, index)
+{
+  var fs = $('#'+id).children('fieldset');
+
+  fs.each(function(idx) {
+    // Show/hide fieldset (tab content)
+    $(this)[index==idx ? 'show' : 'hide']();
+    // Select/unselect tab
+    $('#tab'+idx).toggleClass('tablink-selected', idx==index);
+  });
+}
+
+/**
+ * Mail UI
+ */
+
+function rcube_mail_ui()
+{
+  this.popups = {
+    markmenu:       {id:'markmessagemenu'},
+    replyallmenu:   {id:'replyallmenu'},
+    forwardmenu:    {id:'forwardmenu', editable:1},
+    searchmenu:     {id:'searchmenu', editable:1},
+    messagemenu:    {id:'messagemenu'},
+    attachmentmenu: {id:'attachmentmenu'},
+    dragmenu:       {id:'dragmenu', sticky:1},
+    groupmenu:      {id:'groupoptionsmenu', above:1},
+    mailboxmenu:    {id:'mailboxoptionsmenu', above:1},
+    composemenu:    {id:'composeoptionsmenu', editable:1, overlap:1},
+    spellmenu:      {id:'spellmenu'},
+    responsesmenu:  {id:'responsesmenu'},
+    // toggle: #1486823, #1486930
+    uploadmenu:     {id:'attachment-form', editable:1, above:1, toggle:!bw.ie&&!bw.linux },
+    uploadform:     {id:'upload-form', editable:1, toggle:!bw.ie&&!bw.linux }
+  };
+
+  var obj;
+  for (var k in this.popups) {
+    obj = $('#'+this.popups[k].id)
+    if (obj.length)
+      this.popups[k].obj = obj;
+    else {
+      delete this.popups[k];
+    }
+  }
+}
+
+rcube_mail_ui.prototype = {
+
+show_popup: function(popup, show, config)
+{
+  var obj;
+  // auto-register menu object
+  if (!this.popups[popup] && (obj = $('#'+popup)) && obj.length)
+    this.popups[popup] = $.extend(config, {id: popup, obj: obj});
+
+  if (typeof this[popup] == 'function')
+    return this[popup](show);
+  else
+    return this.show_popupmenu(popup, show);
+},
+
+show_popupmenu: function(popup, show)
+{
+  var obj = this.popups[popup].obj,
+    above = this.popups[popup].above,
+    ref = $(this.popups[popup].link ? this.popups[popup].link : rcube_find_object(popup+'link'));
+
+  if (typeof show == 'undefined')
+    show = obj.is(':visible') ? false : true;
+  else if (this.popups[popup].toggle && show && this.popups[popup].obj.is(':visible') )
+    show = false;
+
+  if (show && ref.length) {
+    var parent = ref.parent(),
+      win = $(window),
+      pos = parent.hasClass('dropbutton') ? parent.offset() : ref.offset();
+
+    if (!above && pos.top + ref.height() + obj.height() > win.height())
+      above = true;
+    if (pos.left + obj.width() > win.width())
+      pos.left = win.width() - obj.width() - 30;
+
+    obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.height())) });
+  }
+
+  obj[show?'show':'hide']();
+},
+
+dragmenu: function(show)
+{
+  this.popups.dragmenu.obj[show?'show':'hide']();
+},
+
+forwardmenu: function(show)
+{
+  $("input[name='forwardtype'][value="+(rcmail.env.forward_attachment ? 1 : 0)+"]", this.popups.forwardmenu.obj)
+    .prop('checked', true);
+  this.show_popupmenu('forwardmenu', show);
+},
+
+uploadmenu: function(show)
+{
+  if (typeof show == 'object') // called as event handler
+    show = false;
+
+  // clear upload form
+  if (!show) {
+    try { $('#attachment-form form')[0].reset(); }
+    catch(e){}  // ignore errors
+  }
+
+  if (rcmail.mailvelope_editor)
+    return;
+
+  this.show_popupmenu('uploadmenu', show);
+
+  if (!document.all && this.popups.uploadmenu.obj.is(':visible'))
+    $('#attachment-form input[type=file]').click();
+},
+
+searchmenu: function(show)
+{
+  var obj = this.popups.searchmenu.obj,
+    ref = rcube_find_object('searchmenulink');
+
+  if (typeof show == 'undefined')
+    show = obj.is(':visible') ? false : true;
+
+  if (show && ref) {
+    var pos = $(ref).offset();
+    obj.css({left:pos.left, top:(pos.top + ref.offsetHeight + 2)});
+
+    if (rcmail.env.search_mods) {
+      var n, all,
+        list = $('input:checkbox[name="s_mods[]"]', obj),
+        mbox = rcmail.env.mailbox,
+        mods = rcmail.env.search_mods,
+        scope = rcmail.env.search_scope || 'base';
+
+      if (rcmail.env.task == 'mail') {
+        mods = mods[mbox] ? mods[mbox] : mods['*'];
+        all = 'text';
+        $('input:radio[name="s_scope"]').prop('checked', false).filter('#s_scope_'+scope).prop('checked', true);
+      }
+      else {
+        all = '*';
+      }
+
+      if (mods[all])
+        list.map(function() {
+          this.checked = true;
+          this.disabled = this.value != all;
+        });
+      else {
+        list.prop('disabled', false).prop('checked', false);
+        for (n in mods)
+          $('#s_mod_' + n).prop('checked', true);
+      }
+    }
+  }
+  obj[show?'show':'hide']();
+},
+
+set_searchmod: function(elem)
+{
+  var all, m, task = rcmail.env.task,
+    mods = rcmail.env.search_mods,
+    mbox = rcmail.env.mailbox,
+    scope = $('input[name="s_scope"]:checked').val();
+
+  if (scope == 'all')
+    mbox = '*';
+
+  if (!mods)
+    mods = {};
+
+  if (task == 'mail') {
+    if (!mods[mbox])
+      mods[mbox] = rcube_clone_object(mods['*']);
+    m = mods[mbox];
+    all = 'text';
+  }
+  else { //addressbook
+    m = mods;
+    all = '*';
+  }
+
+  if (!elem.checked)
+    delete(m[elem.value]);
+  else
+    m[elem.value] = 1;
+
+  // mark all fields
+  if (elem.value == all) {
+    $('input:checkbox[name="s_mods[]"]').map(function() {
+      if (this == elem)
+        return;
+
+      this.checked = true;
+      if (elem.checked) {
+        this.disabled = true;
+        delete m[this.value];
+      }
+      else {
+        this.disabled = false;
+        m[this.value] = 1;
+      }
+    });
+  }
+
+  rcmail.set_searchmods(m);
+},
+
+show_listmenu: function(p)
+{
+  var self = this, buttons = {}, $dialog = $('#listmenu');
+
+  // close the dialog
+  if ($dialog.is(':visible')) {
+    $dialog.dialog('close', p.originalEvent);
+    return;
+  }
+
+  // set form values
+  $('input[name="sort_col"][value="'+rcmail.env.sort_col+'"]').prop('checked', true);
+  $('input[name="sort_ord"][value="DESC"]').prop('checked', rcmail.env.sort_order == 'DESC');
+  $('input[name="sort_ord"][value="ASC"]').prop('checked', rcmail.env.sort_order != 'DESC');
+  $('input[name="view"][value="thread"]').prop('checked', rcmail.env.threading ? true : false);
+  $('input[name="view"][value="list"]').prop('checked', rcmail.env.threading ? false : true);
+
+  // set checkboxes
+  $('input[name="list_col[]"]').each(function() {
+    $(this).prop('checked', $.inArray(this.value, rcmail.env.listcols) != -1);
+  });
+
+  $.each(['widescreen', 'desktop', 'list'], function() {
+    $('input[name="layout"][value="' + this + '"]').prop('checked', rcmail.env.layout == this);
+  });
+  $('#listoptions-columns', $dialog)[rcmail.env.layout == 'widescreen' ? 'hide' : 'show']();
+
+  buttons[rcmail.gettext('save')] = function(e) {
+    $dialog.dialog('close', e);
+    self.save_listmenu();
+  };
+
+  $dialog.dialog({
+    modal: true,
+    resizable: false,
+    closeOnEscape: true,
+    title: null,
+    open: function(e) {
+      var maxheight = 0;
+      $('#listmenu fieldset').each(function() {
+        var height = $(this).height();
+        if (height > maxheight) {
+          maxheight = height;
+        }
+      }).css("min-height", maxheight+"px").height(maxheight);
+
+      setTimeout(function() { $dialog.find('a, input:not(:disabled)').not('[aria-disabled=true]').first().focus(); }, 100);
+    },
+    close: function(e) {
+      $dialog.dialog('destroy').hide();
+      if (e.originalEvent && rcube_event.is_keyboard(e.originalEvent))
+        $('#listmenulink').focus();
+    },
+    buttons: buttons,
+    minWidth: 500,
+    width: $dialog.width()+20
+  }).show();
+},
+
+save_listmenu: function()
+{
+  var sort = $('input[name="sort_col"]:checked').val(),
+    ord = $('input[name="sort_ord"]:checked').val(),
+    thread = $('input[name="view"]:checked').val(),
+    layout = $('input[name="layout"]:checked').val(),
+    cols = $('input[name="list_col[]"]:checked')
+      .map(function(){ return this.value; }).get();
+
+  rcmail.set_list_options(cols, sort, ord, thread == 'thread' ? 1 : 0, layout);
+},
+
+spellmenu: function(show)
+{
+  var link, li,
+    lang = rcmail.spellcheck_lang(),
+    menu = this.popups.spellmenu.obj,
+    ul = $('ul', menu);
+
+  if (!ul.length) {
+    ul = $('<ul>');
+
+    for (i in rcmail.env.spell_langs) {
+      li = $('<li>');
+      link = $('<a href="#"></a>').text(rcmail.env.spell_langs[i])
+        .addClass('active').data('lang', i)
+        .click(function() {
+          rcmail.spellcheck_lang_set($(this).data('lang'));
+        });
+
+      link.appendTo(li);
+      li.appendTo(ul);
+    }
+
+    ul.appendTo(menu);
+  }
+
+  // select current language
+  $('li', ul).each(function() {
+    var el = $('a', this);
+    if (el.data('lang') == lang)
+      el.addClass('selected');
+    else if (el.hasClass('selected'))
+      el.removeClass('selected');
+  });
+
+  this.show_popupmenu('spellmenu', show);
+},
+
+show_attachmentmenu: function(elem, event)
+{
+  var id = elem.parentNode.id.replace(/^attach/, '');
+
+  $.each(['open', 'download', 'rename'], function() {
+    var action = this;
+    $('#attachmenu' + action).off('click').attr('onclick', '').click(function(e) {
+      return rcmail.command(action + '-attachment', id, this);
+    });
+  });
+
+  this.popups.attachmentmenu.link = elem;
+  rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}, elem, event);
+},
+
+menu_open: function(p)
+{
+  if (p && p.name == 'messagelistmenu')
+    this.show_listmenu();
+},
+
+body_mouseup: function(e)
+{
+  var target = e.target; ref = this;
+
+  $.each(this.popups, function(i, popup) {
+    if (popup.obj.is(':visible') && target != rcube_find_object(i + 'link')
+      && !popup.toggle
+      && target != popup.obj.get(0)  // check if scroll bar was clicked (#1489832)
+      && (!popup.editable || !ref.target_overlaps(target, popup.id))
+      && (!popup.sticky || !rcube_mouse_is_over(e, rcube_find_object(popup.id)))
+      && !$(target).is('.folder-selector-link') && !$(target).children('.folder-selector-link').length
+    ) {
+      window.setTimeout('rcmail_ui.show_popup("'+i+'",false);', 50);
+    }
+  });
+},
+
+target_overlaps: function (target, elementid)
+{
+  var element = rcube_find_object(elementid);
+  while (target.parentNode) {
+    if (target.parentNode == element)
+      return true;
+    target = target.parentNode;
+  }
+  return false;
+},
+
+body_keydown: function(e)
+{
+  if (e.keyCode == 27) {
+    for (var k in this.popups) {
+      if (this.popups[k].obj.is(':visible'))
+        this.show_popup(k, false);
+    }
+  }
+},
+
+// Mail view layout initialization and change handler
+set_layout: function(p)
+{
+  var layout = p ? p.new_layout : rcmail.env.layout,
+    top = $('#mailcontframe'),
+    bottom = $('#mailpreviewframe');
+
+  if (p)
+    $('#mailrightcontainer').removeClass().addClass(layout);
+
+  if (!this.mailviewsplitv) {
+    this.mailviewsplitv = new rcube_splitter({id:'mailviewsplitterv', p1: 'mailleftcontainer', p2: 'mailrightcontainer',
+      orientation: 'v', relative: true, start: 165, callback: rcube_render_mailboxlist });
+    this.mailviewsplitv.init();
+  }
+
+  $('#mailviewsplitter')[layout == 'desktop' ? 'show' : 'hide']();
+  $('#mailviewsplitter2')[layout == 'widescreen' ? 'show' : 'hide']();
+  $('#mailpreviewframe')[layout != 'list' ? 'show' : 'hide']();
+  rcmail.env.contentframe = layout == 'list' ? null : 'messagecontframe';
+
+  if (layout == 'widescreen') {
+    $('#countcontrols').detach().appendTo($('#messagelistheader'));
+    top.css({height: 'auto', width: 400});
+    bottom.css({top: 0, left: 410, height: 'auto'}).show();
+    if (!this.mailviewsplit2) {
+      this.mailviewsplit2 = new rcube_splitter({id:'mailviewsplitter2', p1: 'mailcontframe', p2: 'mailpreviewframe',
+        orientation: 'v', relative: true, start: 405});
+      this.mailviewsplit2.init();
+    }
+    else
+      this.mailviewsplit2.resize();
+  }
+  else if (layout == 'desktop') {
+    top.css({height: 200, width: '100%'});
+    bottom.css({left: 0, top: 210, height: 'auto'}).show();
+    if (!this.mailviewsplit) {
+      this.mailviewsplit = new rcube_splitter({id:'mailviewsplitter', p1: 'mailcontframe', p2: 'mailpreviewframe',
+        orientation: 'h', relative: true, start: 205});
+      this.mailviewsplit.init();
+    }
+    else
+      this.mailviewsplit.resize();
+  }
+  else { // layout == 'list'
+    top.css({height: 'auto', width: '100%'});
+    bottom.hide();
+  }
+
+  if (p && p.old_layout == 'widescreen') {
+    $('#countcontrols').detach().appendTo($('#messagelistfooter'));
+  }
+},
+
+
+/* Message composing */
+init_compose_form: function()
+{
+  var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto'],
+    div = document.getElementById('compose-div'),
+    headers_div = document.getElementById('compose-headers-div');
+
+  // Show input elements with non-empty value
+  for (f=0; f<fields.length; f++) {
+    v = fields[f]; field = $('#_'+v);
+    if (field.length) {
+      field.on('change', {v:v}, function(e) { if (this.value) rcmail_ui.show_header_form(e.data.v); });
+      if (field.val() != '')
+        rcmail_ui.show_header_form(v);
+    }
+  }
+
+  // prevent from form data loss when pressing ESC key in IE
+  if (bw.ie) {
+    var form = rcube_find_object('form');
+    form.onkeydown = function (e) {
+      if (rcube_event.get_keycode(e) == 27)
+        rcube_event.cancel(e);
+    };
+  }
+
+  $(window).resize(function() {
+    rcmail_ui.resize_compose_body();
+  });
+
+  $('#compose-container').resize(function() {
+    rcmail_ui.resize_compose_body();
+  });
+
+  div.style.top = (parseInt(headers_div.offsetHeight, 10) + 3) + 'px';
+  $(window).resize();
+
+  // fixes contacts-table position when there's more than one addressbook
+  $('#contacts-table').css('top', $('#directorylist').height() + 24 + 'px');
+
+  // contacts search submit
+  $('#quicksearchbox').keydown(function(e) {
+    if (rcube_event.get_keycode(e) == 13)
+      rcmail.command('search');
+  });
+},
+
+resize_compose_body: function()
+{
+  var div = $('#compose-div .boxlistcontent'),
+    w = div.width() - 6,
+    h = div.height() - 2,
+    x = bw.ie || bw.opera ? 4 : 0;
+
+  $('#compose-body_ifr').width(w + 6).height(h - 1 - $('div.mce-toolbar').height());
+  $('#compose-body').width(w-x).height(h);
+  $('#googie_edit_layer').width(w).height(h);
+},
+
+resize_compose_body_ev: function()
+{
+  window.setTimeout(function(){rcmail_ui.resize_compose_body();}, 100);
+},
+
+show_header_form: function(id)
+{
+  var row, s,
+    link = document.getElementById(id + '-link');
+
+  if ((s = this.next_sibling(link)))
+    s.style.display = 'none';
+  else if ((s = this.prev_sibling(link)))
+    s.style.display = 'none';
+
+  link.style.display = 'none';
+
+  if ((row = document.getElementById('compose-' + id))) {
+    var div = document.getElementById('compose-div'),
+      headers_div = document.getElementById('compose-headers-div');
+    $(row).show();
+    div.style.top = (parseInt(headers_div.offsetHeight, 10) + 3) + 'px';
+    this.resize_compose_body();
+  }
+
+  return false;
+},
+
+hide_header_form: function(id)
+{
+  var row, ns,
+    link = document.getElementById(id + '-link'),
+    parent = link.parentNode,
+    links = parent.getElementsByTagName('a');
+
+  link.style.display = '';
+
+  for (var i=0; i<links.length; i++)
+    if (links[i].style.display != 'none')
+      for (var j=i+1; j<links.length; j++)
+        if (links[j].style.display != 'none')
+          if ((ns = this.next_sibling(links[i]))) {
+            ns.style.display = '';
+            break;
+          }
+
+  document.getElementById('_' + id).value = '';
+
+  if ((row = document.getElementById('compose-' + id))) {
+    var div = document.getElementById('compose-div'),
+      headers_div = document.getElementById('compose-headers-div');
+    row.style.display = 'none';
+    div.style.top = (parseInt(headers_div.offsetHeight, 10) + 1) + 'px';
+    this.resize_compose_body();
+  }
+
+  return false;
+},
+
+next_sibling: function(elm)
+{
+  var ns = elm.nextSibling;
+  while (ns && ns.nodeType == 3)
+    ns = ns.nextSibling;
+  return ns;
+},
+
+prev_sibling: function(elm)
+{
+  var ps = elm.previousSibling;
+  while (ps && ps.nodeType == 3)
+    ps = ps.previousSibling;
+  return ps;
+},
+
+enable_command: function(p)
+{
+  if (p.command == 'reply-list' && rcmail.env.reply_all_mode == 1) {
+    var label = rcmail.gettext(p.status ? 'replylist' : 'replyall');
+    $('a.button.replyAll').attr('title', label);
+  }
+  else if (p.command == 'compose-encrypted') {
+    // show the toolbar button for Mailvelope
+    $('#messagetoolbar > a.encrypt').show();
+  }
+},
+
+folder_search_init: function(container)
+{
+  // animation to unfold list search box
+  $('.boxtitle a.search', container).click(function(e) {
+    var title = $('.boxtitle', container),
+      box = $('.listsearchbox', container),
+      dir = box.is(':visible') ? -1 : 1,
+      height = 24 + ($('select', box).length ? 24 : 0);
+
+    box.slideToggle({
+      duration: 160,
+      progress: function(animation, progress) {
+        if (dir < 0) progress = 1 - progress;
+          $('.boxlistcontent', container).css('top', (title.outerHeight() + height * progress) + 'px');
+      },
+      complete: function() {
+        box.toggleClass('expanded');
+        if (box.is(':visible')) {
+          box.find('input[type=text]').focus();
+        }
+        else {
+          $('a.reset', box).click();
+        }
+        // TODO: save state in cookie
+      }
+    });
+
+    return false;
+  });
+}
+
+};
+
+/**
+ * Roundcube generic layer (floating box) class
+ *
+ * @constructor
+ */
+function rcube_layer(id, attributes)
+{
+  this.name = id;
+
+  // create a new layer in the current document
+  this.create = function(arg)
+  {
+    var l = (arg.x) ? arg.x : 0,
+      t = (arg.y) ? arg.y : 0,
+      w = arg.width,
+      h = arg.height,
+      z = arg.zindex,
+      vis = arg.vis,
+      parent = arg.parent,
+      obj = document.createElement('DIV');
+
+    obj.id = this.name;
+    obj.style.position = 'absolute';
+    obj.style.visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
+    obj.style.left = l+'px';
+    obj.style.top = t+'px';
+    if (w)
+      obj.style.width = w.toString().match(/\%$/) ? w : w+'px';
+    if (h)
+      obj.style.height = h.toString().match(/\%$/) ? h : h+'px';
+    if (z)
+      obj.style.zIndex = z;
+
+    if (parent)
+      parent.appendChild(obj);
+    else
+      document.body.appendChild(obj);
+
+    this.elm = obj;
+  };
+
+  // create new layer
+  if (attributes != null) {
+    this.create(attributes);
+    this.name = this.elm.id;
+  }
+  else  // just refer to the object
+    this.elm = document.getElementById(id);
+
+  if (!this.elm)
+    return false;
+
+
+  // ********* layer object properties *********
+
+  this.css = this.elm.style;
+  this.event = this.elm;
+  this.width = this.elm.offsetWidth;
+  this.height = this.elm.offsetHeight;
+  this.x = parseInt(this.elm.offsetLeft);
+  this.y = parseInt(this.elm.offsetTop);
+  this.visible = (this.css.visibility=='visible' || this.css.visibility=='show' || this.css.visibility=='inherit') ? true : false;
+
+
+  // ********* layer object methods *********
+
+  // move the layer to a specific position
+  this.move = function(x, y)
+  {
+    this.x = x;
+    this.y = y;
+    this.css.left = Math.round(this.x)+'px';
+    this.css.top = Math.round(this.y)+'px';
+  };
+
+  // change the layers width and height
+  this.resize = function(w,h)
+  {
+    this.css.width  = w+'px';
+    this.css.height = h+'px';
+    this.width = w;
+    this.height = h;
+  };
+
+  // show or hide the layer
+  this.show = function(a)
+  {
+    if(a == 1) {
+      this.css.visibility = 'visible';
+      this.visible = true;
+    }
+    else if(a == 2) {
+      this.css.visibility = 'inherit';
+      this.visible = true;
+    }
+    else {
+      this.css.visibility = 'hidden';
+      this.visible = false;
+    }
+  };
+
+  // write new content into a Layer
+  this.write = function(cont)
+  {
+    this.elm.innerHTML = cont;
+  };
+
+};
+
+/**
+ * Scroller
+ *
+ * @deprecated Use treelist widget
+ */
+function rcmail_scroller(list, top, bottom)
+{
+  var ref = this;
+
+  this.list = $(list);
+  this.top = $(top);
+  this.bottom = $(bottom);
+  this.step_size = 6;
+  this.step_time = 20;
+  this.delay = 500;
+
+  this.top
+    .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); })
+    .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
+
+  this.bottom
+    .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); })
+    .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
+
+  this.scroll = function(dir)
+  {
+    var ref = this, size = this.step_size;
+
+    if (!rcmail.drag_active)
+      return;
+
+    if (dir == 'down')
+      size *= -1;
+
+    this.list.get(0).scrollTop += size;
+    this.ts = window.setTimeout(function() { ref.scroll(dir); }, this.step_time);
+  };
+};
+
+// Abbreviate mailbox names to fit width of the container
+function rcube_render_mailboxlist()
+{
+  var list = $('#mailboxlist > li > a, #mailboxlist ul:visible > li > a');
+
+  // it's too slow with really big number of folders
+  if (list.length > 100)
+    return;
+
+  list.each(function() {
+    var elem = $(this),
+      text = elem.data('text');
+
+    if (!text) {
+      text = elem.text().replace(/\s+\([0-9]+\)$/, '');
+      elem.data('text', text);
+    }
+
+    if (text.length < 6)
+      return;
+
+    var abbrev = fit_string_to_size(text, elem, elem.width() - elem.children('span.unreadcount').width() - 16);
+    if (abbrev != text)
+      elem.attr('title', text);
+    elem.contents().filter(function(){ return (this.nodeType == 3); }).get(0).data = abbrev;
+  });
+};
+
+// inspired by https://gist.github.com/24261/7fdb113f1e26111bd78c0c6fe515f6c0bf418af5
+function fit_string_to_size(str, elem, len)
+{
+  var w, span, $span, result = str, ellip = '...';
+
+  if (!rcmail.env.tmp_span) {
+    // it should be appended to elem to use the same css style
+    // but for performance reasons we'll append it to body (once)
+    span = $('<b>').css({visibility: 'hidden', padding: '0px',
+      'font-family': elem.css('font-family'),
+      'font-size': elem.css('font-size')})
+      .appendTo($('body', document)).get(0);
+    rcmail.env.tmp_span = span;
+  }
+  else {
+    span = rcmail.env.tmp_span;
+  }
+
+  $span = $(span);
+  $span.text(result);
+
+  // on first run, check if string fits into the length already.
+  w = span.offsetWidth;
+  if (w > len) {
+    var cut = Math.max(1, Math.floor(str.length * ((w - len) / w) / 2)),
+      mid = Math.floor(str.length / 2),
+      offLeft = mid,
+      offRight = mid;
+
+    while (true) {
+      offLeft = mid - cut;
+      offRight = mid + cut;
+      $span.text(str.substring(0,offLeft) + ellip + str.substring(offRight));
+
+      // break loop if string fits size
+      if (offLeft < 3 || span.offsetWidth)
+        break;
+
+      cut++;
+    }
+
+    // build resulting string
+    result = str.substring(0,offLeft) + ellip + str.substring(offRight);
+  }
+
+  return result;
+};
+
+function update_quota(data)
+{
+  percent_indicator(rcmail.gui_objects.quotadisplay, data);
+
+  if (data.table) {
+    var menu = $('#quotamenu');
+
+    if (!menu.length)
+      menu = $('<div id="quotamenu" class="popupmenu">').appendTo($('body'));
+
+    menu.html(data.table);
+    $('#quotaimg').css('cursor', 'pointer').off('click').on('click', function(e) {
+      return rcmail.command('menu-open', 'quotamenu', e.target, e);
+    });
+  }
+};
+
+// percent (quota) indicator
+function percent_indicator(obj, data)
+{
+  if (!data || !obj)
+    return false;
+
+  var limit_high = 80,
+    limit_mid  = 55,
+    width = data.width ? data.width : rcmail.env.indicator_width ? rcmail.env.indicator_width : 100,
+    height = data.height ? data.height : rcmail.env.indicator_height ? rcmail.env.indicator_height : 14,
+    quota = data.percent ? Math.abs(parseInt(data.percent)) : 0,
+    quota_width = parseInt(quota / 100 * width),
+    pos = $(obj).position();
+
+  // workarounds for Opera and Webkit bugs
+  pos.top = Math.max(0, pos.top);
+  pos.left = Math.max(0, pos.left);
+
+  rcmail.env.indicator_width = width;
+  rcmail.env.indicator_height = height;
+
+  // overlimit
+  if (quota_width > width) {
+    quota_width = width;
+    quota = 100;
+  }
+
+  if (data.title)
+    data.title = rcmail.get_label('quota') + ': ' +  data.title;
+
+  // main div
+  var main = $('<div>');
+  main.css({position: 'absolute', top: pos.top, left: pos.left,
+      width: width + 'px', height: height + 'px', zIndex: 100, lineHeight: height + 'px'})
+    .attr('title', data.title).addClass('quota_text').html(quota + '%');
+  // used bar
+  var bar1 = $('<div>');
+  bar1.css({position: 'absolute', top: pos.top + 1, left: pos.left + 1,
+      width: quota_width + 'px', height: height + 'px', zIndex: 99});
+  // background
+  var bar2 = $('<div>');
+  bar2.css({position: 'absolute', top: pos.top + 1, left: pos.left + 1,
+      width: width + 'px', height: height + 'px', zIndex: 98})
+    .addClass('quota_bg');
+
+  if (quota >= limit_high) {
+    main.addClass(' quota_text_high');
+    bar1.addClass('quota_high');
+  }
+  else if(quota >= limit_mid) {
+    main.addClass(' quota_text_mid');
+    bar1.addClass('quota_mid');
+  }
+  else {
+    main.addClass(' quota_text_low');
+    bar1.addClass('quota_low');
+  }
+
+  // replace quota image
+  $(obj).html('').append(bar1).append(bar2).append(main);
+  // update #quotaimg title
+  $('#quotaimg').attr('title', data.title);
+};
+
+function attachment_menu_append(item)
+{
+  $(item).append(
+    $('<a class="drop"></a>').on('click keypress', function(e) {
+      if (e.type != 'keypress' || e.which == 13) {
+        rcmail_ui.show_attachmentmenu(this, e);
+        return false;
+      }
+    })
+  );
+};
+
+// Optional parameters used by TinyMCE
+var rcmail_editor_settings = {};
+
+var rcmail_ui;
+
+function rcube_init_mail_ui()
+{
+  rcmail_ui = new rcube_mail_ui();
+
+  $(document.body).mouseup(function(e) { rcmail_ui.body_mouseup(e); })
+    .mousedown(function(e) { rcmail_ui.body_keydown(e); });
+
+  rcmail.addEventListener('init', function() {
+    if (rcmail.env.quota_content)
+      update_quota(rcmail.env.quota_content);
+    rcmail.addEventListener('setquota', update_quota);
+
+    rcube_webmail.set_iframe_events({mouseup: function(e) { return rcmail_ui.body_mouseup(e); }});
+
+    if (rcmail.env.task == 'mail') {
+      rcmail.addEventListener('enable-command', 'enable_command', rcmail_ui)
+        .addEventListener('menu-open', 'menu_open', rcmail_ui)
+        .addEventListener('aftersend-attachment', 'uploadmenu', rcmail_ui)
+        .addEventListener('aftertoggle-editor', 'resize_compose_body_ev', rcmail_ui)
+        .gui_object('dragmenu', 'dragmenu');
+
+      if (rcmail.gui_objects.mailboxlist) {
+        rcmail.treelist.addEventListener('expand', rcube_render_mailboxlist);
+        rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist)
+          .addEventListener('responseaftergetunread', rcube_render_mailboxlist)
+          .addEventListener('responseaftercheck-recent', rcube_render_mailboxlist)
+          .addEventListener('responseafterrefresh', rcube_render_mailboxlist)
+          .addEventListener('afterimport-messages', function(){ rcmail_ui.show_popup('uploadform', false); });
+      }
+
+      rcmail.init_pagejumper('#pagejumper');
+
+      // fix message list header on window resize (#1490213)
+      if (bw.ie && rcmail.message_list)
+        $(window).resize(function() {
+          setTimeout(function() { rcmail.message_list.resize(); }, 10);
+        });
+
+      if (rcmail.env.action == 'list' || !rcmail.env.action) {
+        rcmail.addEventListener('layout-change', 'set_layout', rcmail_ui);
+        rcmail_ui.set_layout();
+      }
+      else if (rcmail.env.action == 'compose') {
+        rcmail_ui.init_compose_form();
+        rcmail.addEventListener('compose-encrypted', function(e) {
+          $("a.button.encrypt")[(e.active ? 'addClass' : 'removeClass')]('selected');
+          $("select[name='editorSelector']").prop('disabled', e.active);
+          $('a.button.attach, a.button.responses, a.button.attach, #uploadmenulink')[(e.active ? 'addClass' : 'removeClass')]('buttonPas disabled');
+          $('#responseslist a.insertresponse')[(e.active ? 'removeClass' : 'addClass')]('active');
+        });
+        rcmail.addEventListener('fileappended', function(e) {
+          if (e.attachment.complete)
+            attachment_menu_append(e.item);
+        });
+
+        // add menu link for each attachment
+        $('#attachmentslist > li').each(function() {
+          attachment_menu_append(this);
+        });
+      }
+      else if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') {
+        // add menu link for each attachment
+        $('#attachment-list > li[id^="attach"]').each(function() {
+          attachment_menu_append(this);
+        });
+
+        $(window).resize(function() {
+          if (!$('#attachment-list > li[id^="attach"]').length)
+            $('#attachment-list').hide();
+
+          var mvlpe = $('#messagebody.mailvelope');
+          if (mvlpe.length) {
+            var content = $('#messageframe'),
+              h = (content.length ? content.height() + content.offset().top - 25 : $(this).height()) - mvlpe.offset().top - 20;
+            mvlpe.height(h);
+          }
+        });
+      }
+    }
+    else if (rcmail.env.task == 'addressbook') {
+      rcmail.addEventListener('afterupload-photo', function(){ rcmail_ui.show_popup('uploadform', false); })
+        .gui_object('dragmenu', 'dragmenu');
+    }
+    else if (rcmail.env.task == 'settings') {
+      if (rcmail.env.action == 'folders') {
+        rcmail_ui.folder_search_init($('#folder-manager'));
+      }
+    }
+  });
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/functions.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,59 @@
+/**
+ * Roundcube functions for default skin interface
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2006-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ */
+function rcube_init_settings_tabs(){var a;var b=$("#tabsbar");var d=$("span:last",b),c="#settingstabpreferences",f=window.rcmail&&rcmail.env.action?rcmail.env.action:null;d&&"settingstababout"!=d.attr("id")&&(a=$("#settingstababout"))&&(b=a.clone(!0),a.remove(),d.after(b));f&&(c="#settingstab"+(0<f.indexOf("identity")?"identities":f.replace(/\./g,"")));$(c).addClass("tablink-selected");$("a",c).removeAttr("onclick").click(function(){return!1})}
+function rcube_init_tabs(a,b){var d=$("#"+a),c=d.children("fieldset");if(c.length){b=b?b:0;c.each(function(a){a!=b&&$(this).hide()});var f=$("<div>").addClass("tabsbar").appendTo(d);c.each(function(d){var c=$(this),e=c.children("legend");var l=$("<a>").text(e.text()).attr("href","#");var h=$("<span>").attr({id:"tab"+d,"class":"tablink"}).click(function(){rcube_show_tab(a,d);return!1});e.remove();c.addClass("tabbed");d==b&&h.addClass("tablink-selected");h.append(l).appendTo(f)})}}
+function rcube_show_tab(a,b){$("#"+a).children("fieldset").each(function(a){$(this)[b==a?"show":"hide"]();$("#tab"+a).toggleClass("tablink-selected",a==b)})}
+function rcube_mail_ui(){this.popups={markmenu:{id:"markmessagemenu"},replyallmenu:{id:"replyallmenu"},forwardmenu:{id:"forwardmenu",editable:1},searchmenu:{id:"searchmenu",editable:1},messagemenu:{id:"messagemenu"},attachmentmenu:{id:"attachmentmenu"},dragmenu:{id:"dragmenu",sticky:1},groupmenu:{id:"groupoptionsmenu",above:1},mailboxmenu:{id:"mailboxoptionsmenu",above:1},composemenu:{id:"composeoptionsmenu",editable:1,overlap:1},spellmenu:{id:"spellmenu"},responsesmenu:{id:"responsesmenu"},uploadmenu:{id:"attachment-form",
+editable:1,above:1,toggle:!bw.ie&&!bw.linux},uploadform:{id:"upload-form",editable:1,toggle:!bw.ie&&!bw.linux}};var a;for(a in this.popups){var b=$("#"+this.popups[a].id);b.length?this.popups[a].obj=b:delete this.popups[a]}}
+rcube_mail_ui.prototype={show_popup:function(a,b,d){var c;!this.popups[a]&&(c=$("#"+a))&&c.length&&(this.popups[a]=$.extend(d,{id:a,obj:c}));return"function"==typeof this[a]?this[a](b):this.show_popupmenu(a,b)},show_popupmenu:function(a,b){var d=this.popups[a].obj,c=this.popups[a].above,f=$(this.popups[a].link?this.popups[a].link:rcube_find_object(a+"link"));"undefined"==typeof b?b=d.is(":visible")?!1:!0:this.popups[a].toggle&&b&&this.popups[a].obj.is(":visible")&&(b=!1);if(b&&f.length){var e=f.parent();
+a=$(window);e=e.hasClass("dropbutton")?e.offset():f.offset();!c&&e.top+f.height()+d.height()>a.height()&&(c=!0);e.left+d.width()>a.width()&&(e.left=a.width()-d.width()-30);d.css({left:e.left,top:e.top+(c?-d.height():f.height())})}d[b?"show":"hide"]()},dragmenu:function(a){this.popups.dragmenu.obj[a?"show":"hide"]()},forwardmenu:function(a){$("input[name='forwardtype'][value="+(rcmail.env.forward_attachment?1:0)+"]",this.popups.forwardmenu.obj).prop("checked",!0);this.show_popupmenu("forwardmenu",
+a)},uploadmenu:function(a){"object"==typeof a&&(a=!1);if(!a)try{$("#attachment-form form")[0].reset()}catch(b){}rcmail.mailvelope_editor||(this.show_popupmenu("uploadmenu",a),!document.all&&this.popups.uploadmenu.obj.is(":visible")&&$("#attachment-form input[type=file]").click())},searchmenu:function(a){var b=this.popups.searchmenu.obj,d=rcube_find_object("searchmenulink");"undefined"==typeof a&&(a=b.is(":visible")?!1:!0);if(a&&d){var c=$(d).offset();b.css({left:c.left,top:c.top+d.offsetHeight+2});
+if(rcmail.env.search_mods){var f;d=$('input:checkbox[name="s_mods[]"]',b);c=rcmail.env.mailbox;var e=rcmail.env.search_mods,g=rcmail.env.search_scope||"base";if("mail"==rcmail.env.task){e=e[c]?e[c]:e["*"];var k="text";$('input:radio[name="s_scope"]').prop("checked",!1).filter("#s_scope_"+g).prop("checked",!0)}else k="*";if(e[k])d.map(function(){this.checked=!0;this.disabled=this.value!=k});else for(f in d.prop("disabled",!1).prop("checked",!1),e)$("#s_mod_"+f).prop("checked",!0)}}b[a?"show":"hide"]()},
+set_searchmod:function(a){var b=rcmail.env.task;var d=rcmail.env.search_mods,c=rcmail.env.mailbox;"all"==$('input[name="s_scope"]:checked').val()&&(c="*");d||(d={});if("mail"==b){d[c]||(d[c]=rcube_clone_object(d["*"]));var f=d[c];b="text"}else f=d,b="*";a.checked?f[a.value]=1:delete f[a.value];a.value==b&&$('input:checkbox[name="s_mods[]"]').map(function(){this!=a&&(this.checked=!0,a.checked?(this.disabled=!0,delete f[this.value]):(this.disabled=!1,f[this.value]=1))});rcmail.set_searchmods(f)},show_listmenu:function(a){var b=
+this,d={},c=$("#listmenu");c.is(":visible")?c.dialog("close",a.originalEvent):($('input[name="sort_col"][value="'+rcmail.env.sort_col+'"]').prop("checked",!0),$('input[name="sort_ord"][value="DESC"]').prop("checked","DESC"==rcmail.env.sort_order),$('input[name="sort_ord"][value="ASC"]').prop("checked","DESC"!=rcmail.env.sort_order),$('input[name="view"][value="thread"]').prop("checked",rcmail.env.threading?!0:!1),$('input[name="view"][value="list"]').prop("checked",rcmail.env.threading?!1:!0),$('input[name="list_col[]"]').each(function(){$(this).prop("checked",
+-1!=$.inArray(this.value,rcmail.env.listcols))}),$.each(["widescreen","desktop","list"],function(){$('input[name="layout"][value="'+this+'"]').prop("checked",rcmail.env.layout==this)}),$("#listoptions-columns",c)["widescreen"==rcmail.env.layout?"hide":"show"](),d[rcmail.gettext("save")]=function(a){c.dialog("close",a);b.save_listmenu()},c.dialog({modal:!0,resizable:!1,closeOnEscape:!0,title:null,open:function(a){var b=0;$("#listmenu fieldset").each(function(){var a=$(this).height();a>b&&(b=a)}).css("min-height",
+b+"px").height(b);setTimeout(function(){c.find("a, input:not(:disabled)").not("[aria-disabled=true]").first().focus()},100)},close:function(a){c.dialog("destroy").hide();a.originalEvent&&rcube_event.is_keyboard(a.originalEvent)&&$("#listmenulink").focus()},buttons:d,minWidth:500,width:c.width()+20}).show())},save_listmenu:function(){var a=$('input[name="sort_col"]:checked').val(),b=$('input[name="sort_ord"]:checked').val(),d=$('input[name="view"]:checked').val(),c=$('input[name="layout"]:checked').val(),
+f=$('input[name="list_col[]"]:checked').map(function(){return this.value}).get();rcmail.set_list_options(f,a,b,"thread"==d?1:0,c)},spellmenu:function(a){var b=rcmail.spellcheck_lang(),d=this.popups.spellmenu.obj,c=$("ul",d);if(!c.length){c=$("<ul>");for(i in rcmail.env.spell_langs){var f=$("<li>");var e=$('<a href="#"></a>').text(rcmail.env.spell_langs[i]).addClass("active").data("lang",i).click(function(){rcmail.spellcheck_lang_set($(this).data("lang"))});e.appendTo(f);f.appendTo(c)}c.appendTo(d)}$("li",
+c).each(function(){var a=$("a",this);a.data("lang")==b?a.addClass("selected"):a.hasClass("selected")&&a.removeClass("selected")});this.show_popupmenu("spellmenu",a)},show_attachmentmenu:function(a,b){var d=a.parentNode.id.replace(/^attach/,"");$.each(["open","download","rename"],function(){var a=this;$("#attachmenu"+a).off("click").attr("onclick","").click(function(b){return rcmail.command(a+"-attachment",d,this)})});this.popups.attachmentmenu.link=a;rcmail.command("menu-open",{menu:"attachmentmenu",
+id:d},a,b)},menu_open:function(a){a&&"messagelistmenu"==a.name&&this.show_listmenu()},body_mouseup:function(a){var b=a.target;ref=this;$.each(this.popups,function(d,c){!c.obj.is(":visible")||b==rcube_find_object(d+"link")||c.toggle||b==c.obj.get(0)||c.editable&&ref.target_overlaps(b,c.id)||c.sticky&&rcube_mouse_is_over(a,rcube_find_object(c.id))||$(b).is(".folder-selector-link")||$(b).children(".folder-selector-link").length||window.setTimeout('rcmail_ui.show_popup("'+d+'",false);',50)})},target_overlaps:function(a,
+b){for(b=rcube_find_object(b);a.parentNode;){if(a.parentNode==b)return!0;a=a.parentNode}return!1},body_keydown:function(a){if(27==a.keyCode)for(var b in this.popups)this.popups[b].obj.is(":visible")&&this.show_popup(b,!1)},set_layout:function(a){var b=a?a.new_layout:rcmail.env.layout,d=$("#mailcontframe"),c=$("#mailpreviewframe");a&&$("#mailrightcontainer").removeClass().addClass(b);this.mailviewsplitv||(this.mailviewsplitv=new rcube_splitter({id:"mailviewsplitterv",p1:"mailleftcontainer",p2:"mailrightcontainer",
+orientation:"v",relative:!0,start:165,callback:rcube_render_mailboxlist}),this.mailviewsplitv.init());$("#mailviewsplitter")["desktop"==b?"show":"hide"]();$("#mailviewsplitter2")["widescreen"==b?"show":"hide"]();$("#mailpreviewframe")["list"!=b?"show":"hide"]();rcmail.env.contentframe="list"==b?null:"messagecontframe";"widescreen"==b?($("#countcontrols").detach().appendTo($("#messagelistheader")),d.css({height:"auto",width:400}),c.css({top:0,left:410,height:"auto"}).show(),this.mailviewsplit2?this.mailviewsplit2.resize():
+(this.mailviewsplit2=new rcube_splitter({id:"mailviewsplitter2",p1:"mailcontframe",p2:"mailpreviewframe",orientation:"v",relative:!0,start:405}),this.mailviewsplit2.init())):"desktop"==b?(d.css({height:200,width:"100%"}),c.css({left:0,top:210,height:"auto"}).show(),this.mailviewsplit?this.mailviewsplit.resize():(this.mailviewsplit=new rcube_splitter({id:"mailviewsplitter",p1:"mailcontframe",p2:"mailpreviewframe",orientation:"h",relative:!0,start:205}),this.mailviewsplit.init())):(d.css({height:"auto",
+width:"100%"}),c.hide());a&&"widescreen"==a.old_layout&&$("#countcontrols").detach().appendTo($("#messagelistfooter"))},init_compose_form:function(){var a,b=["cc","bcc","replyto","followupto"],d=document.getElementById("compose-div"),c=document.getElementById("compose-headers-div");for(a=0;a<b.length;a++){var f=b[a];var e=$("#_"+f);e.length&&(e.on("change",{v:f},function(a){this.value&&rcmail_ui.show_header_form(a.data.v)}),""!=e.val()&&rcmail_ui.show_header_form(f))}bw.ie&&(rcube_find_object("form").onkeydown=
+function(a){27==rcube_event.get_keycode(a)&&rcube_event.cancel(a)});$(window).resize(function(){rcmail_ui.resize_compose_body()});$("#compose-container").resize(function(){rcmail_ui.resize_compose_body()});d.style.top=parseInt(c.offsetHeight,10)+3+"px";$(window).resize();$("#contacts-table").css("top",$("#directorylist").height()+24+"px");$("#quicksearchbox").keydown(function(a){13==rcube_event.get_keycode(a)&&rcmail.command("search")})},resize_compose_body:function(){var a=$("#compose-div .boxlistcontent"),
+b=a.width()-6;a=a.height()-2;var d=bw.ie||bw.opera?4:0;$("#compose-body_ifr").width(b+6).height(a-1-$("div.mce-toolbar").height());$("#compose-body").width(b-d).height(a);$("#googie_edit_layer").width(b).height(a)},resize_compose_body_ev:function(){window.setTimeout(function(){rcmail_ui.resize_compose_body()},100)},show_header_form:function(a){var b,d=document.getElementById(a+"-link");if(b=this.next_sibling(d))b.style.display="none";else if(b=this.prev_sibling(d))b.style.display="none";d.style.display=
+"none";if(a=document.getElementById("compose-"+a))b=document.getElementById("compose-div"),d=document.getElementById("compose-headers-div"),$(a).show(),b.style.top=parseInt(d.offsetHeight,10)+3+"px",this.resize_compose_body();return!1},hide_header_form:function(a){var b,d=document.getElementById(a+"-link"),c=d.parentNode.getElementsByTagName("a");d.style.display="";for(d=0;d<c.length;d++)if("none"!=c[d].style.display)for(var f=d+1;f<c.length;f++)if("none"!=c[f].style.display&&(b=this.next_sibling(c[d]))){b.style.display=
+"";break}document.getElementById("_"+a).value="";if(a=document.getElementById("compose-"+a))b=document.getElementById("compose-div"),c=document.getElementById("compose-headers-div"),a.style.display="none",b.style.top=parseInt(c.offsetHeight,10)+1+"px",this.resize_compose_body();return!1},next_sibling:function(a){for(a=a.nextSibling;a&&3==a.nodeType;)a=a.nextSibling;return a},prev_sibling:function(a){for(a=a.previousSibling;a&&3==a.nodeType;)a=a.previousSibling;return a},enable_command:function(a){"reply-list"==
+a.command&&1==rcmail.env.reply_all_mode?(a=rcmail.gettext(a.status?"replylist":"replyall"),$("a.button.replyAll").attr("title",a)):"compose-encrypted"==a.command&&$("#messagetoolbar > a.encrypt").show()},folder_search_init:function(a){$(".boxtitle a.search",a).click(function(b){var d=$(".boxtitle",a),c=$(".listsearchbox",a),f=c.is(":visible")?-1:1,e=24+($("select",c).length?24:0);c.slideToggle({duration:160,progress:function(b,c){0>f&&(c=1-c);$(".boxlistcontent",a).css("top",d.outerHeight()+e*c+"px")},
+complete:function(){c.toggleClass("expanded");c.is(":visible")?c.find("input[type=text]").focus():$("a.reset",c).click()}});return!1})}};
+function rcube_layer(a,b){this.name=a;this.create=function(a){var b=a.x?a.x:0,d=a.y?a.y:0,e=a.width,g=a.height,k=a.zindex,l=a.vis;a=a.parent;var h=document.createElement("DIV");h.id=this.name;h.style.position="absolute";h.style.visibility=l?2==l?"inherit":"visible":"hidden";h.style.left=b+"px";h.style.top=d+"px";e&&(h.style.width=e.toString().match(/%$/)?e:e+"px");g&&(h.style.height=g.toString().match(/%$/)?g:g+"px");k&&(h.style.zIndex=k);a?a.appendChild(h):document.body.appendChild(h);this.elm=h};
+null!=b?(this.create(b),this.name=this.elm.id):this.elm=document.getElementById(a);if(!this.elm)return!1;this.css=this.elm.style;this.event=this.elm;this.width=this.elm.offsetWidth;this.height=this.elm.offsetHeight;this.x=parseInt(this.elm.offsetLeft);this.y=parseInt(this.elm.offsetTop);this.visible="visible"==this.css.visibility||"show"==this.css.visibility||"inherit"==this.css.visibility?!0:!1;this.move=function(a,b){this.x=a;this.y=b;this.css.left=Math.round(this.x)+"px";this.css.top=Math.round(this.y)+
+"px"};this.resize=function(a,b){this.css.width=a+"px";this.css.height=b+"px";this.width=a;this.height=b};this.show=function(a){1==a?(this.css.visibility="visible",this.visible=!0):2==a?(this.css.visibility="inherit",this.visible=!0):(this.css.visibility="hidden",this.visible=!1)};this.write=function(a){this.elm.innerHTML=a}}
+function rcmail_scroller(a,b,d){var c=this;this.list=$(a);this.top=$(b);this.bottom=$(d);this.step_size=6;this.step_time=20;this.delay=500;this.top.mouseenter(function(){c.ts=window.setTimeout(function(){c.scroll("down")},c.delay)}).mouseout(function(){c.ts&&window.clearTimeout(c.ts)});this.bottom.mouseenter(function(){c.ts=window.setTimeout(function(){c.scroll("up")},c.delay)}).mouseout(function(){c.ts&&window.clearTimeout(c.ts)});this.scroll=function(a){var b=this,c=this.step_size;rcmail.drag_active&&
+("down"==a&&(c*=-1),this.list.get(0).scrollTop+=c,this.ts=window.setTimeout(function(){b.scroll(a)},this.step_time))}}
+function rcube_render_mailboxlist(){var a=$("#mailboxlist > li > a, #mailboxlist ul:visible > li > a");100<a.length||a.each(function(){var a=$(this),d=a.data("text");d||(d=a.text().replace(/\s+\([0-9]+\)$/,""),a.data("text",d));if(!(6>d.length)){var c=fit_string_to_size(d,a,a.width()-a.children("span.unreadcount").width()-16);c!=d&&a.attr("title",d);a.contents().filter(function(){return 3==this.nodeType}).get(0).data=c}})}
+function fit_string_to_size(a,b,d){var c=a;rcmail.env.tmp_span?b=rcmail.env.tmp_span:(b=$("<b>").css({visibility:"hidden",padding:"0px","font-family":b.css("font-family"),"font-size":b.css("font-size")}).appendTo($("body",document)).get(0),rcmail.env.tmp_span=b);var f=$(b);f.text(c);var e=b.offsetWidth;if(e>d){d=Math.max(1,Math.floor((e-d)/e*a.length/2));c=Math.floor(a.length/2);for(var g;;){e=c-d;g=c+d;f.text(a.substring(0,e)+"..."+a.substring(g));if(3>e||b.offsetWidth)break;d++}c=a.substring(0,
+e)+"..."+a.substring(g)}return c}function update_quota(a){percent_indicator(rcmail.gui_objects.quotadisplay,a);if(a.table){var b=$("#quotamenu");b.length||(b=$('<div id="quotamenu" class="popupmenu">').appendTo($("body")));b.html(a.table);$("#quotaimg").css("cursor","pointer").off("click").on("click",function(a){return rcmail.command("menu-open","quotamenu",a.target,a)})}}
+function percent_indicator(a,b){if(!b||!a)return!1;var d=b.width?b.width:rcmail.env.indicator_width?rcmail.env.indicator_width:100,c=b.height?b.height:rcmail.env.indicator_height?rcmail.env.indicator_height:14,f=b.percent?Math.abs(parseInt(b.percent)):0,e=parseInt(f/100*d),g=$(a).position();g.top=Math.max(0,g.top);g.left=Math.max(0,g.left);rcmail.env.indicator_width=d;rcmail.env.indicator_height=c;e>d&&(e=d,f=100);b.title&&(b.title=rcmail.get_label("quota")+": "+b.title);var k=$("<div>");k.css({position:"absolute",
+top:g.top,left:g.left,width:d+"px",height:c+"px",zIndex:100,lineHeight:c+"px"}).attr("title",b.title).addClass("quota_text").html(f+"%");var l=$("<div>");l.css({position:"absolute",top:g.top+1,left:g.left+1,width:e+"px",height:c+"px",zIndex:99});e=$("<div>");e.css({position:"absolute",top:g.top+1,left:g.left+1,width:d+"px",height:c+"px",zIndex:98}).addClass("quota_bg");80<=f?(k.addClass(" quota_text_high"),l.addClass("quota_high")):55<=f?(k.addClass(" quota_text_mid"),l.addClass("quota_mid")):(k.addClass(" quota_text_low"),
+l.addClass("quota_low"));$(a).html("").append(l).append(e).append(k);$("#quotaimg").attr("title",b.title)}function attachment_menu_append(a){$(a).append($('<a class="drop"></a>').on("click keypress",function(a){if("keypress"!=a.type||13==a.which)return rcmail_ui.show_attachmentmenu(this,a),!1}))}var rcmail_editor_settings={},rcmail_ui;
+function rcube_init_mail_ui(){rcmail_ui=new rcube_mail_ui;$(document.body).mouseup(function(a){rcmail_ui.body_mouseup(a)}).mousedown(function(a){rcmail_ui.body_keydown(a)});rcmail.addEventListener("init",function(){rcmail.env.quota_content&&update_quota(rcmail.env.quota_content);rcmail.addEventListener("setquota",update_quota);rcube_webmail.set_iframe_events({mouseup:function(a){return rcmail_ui.body_mouseup(a)}});if("mail"==rcmail.env.task)if(rcmail.addEventListener("enable-command","enable_command",
+rcmail_ui).addEventListener("menu-open","menu_open",rcmail_ui).addEventListener("aftersend-attachment","uploadmenu",rcmail_ui).addEventListener("aftertoggle-editor","resize_compose_body_ev",rcmail_ui).gui_object("dragmenu","dragmenu"),rcmail.gui_objects.mailboxlist&&(rcmail.treelist.addEventListener("expand",rcube_render_mailboxlist),rcmail.addEventListener("responseaftermark",rcube_render_mailboxlist).addEventListener("responseaftergetunread",rcube_render_mailboxlist).addEventListener("responseaftercheck-recent",
+rcube_render_mailboxlist).addEventListener("responseafterrefresh",rcube_render_mailboxlist).addEventListener("afterimport-messages",function(){rcmail_ui.show_popup("uploadform",!1)})),rcmail.init_pagejumper("#pagejumper"),bw.ie&&rcmail.message_list&&$(window).resize(function(){setTimeout(function(){rcmail.message_list.resize()},10)}),"list"==rcmail.env.action||!rcmail.env.action)rcmail.addEventListener("layout-change","set_layout",rcmail_ui),rcmail_ui.set_layout();else if("compose"==rcmail.env.action)rcmail_ui.init_compose_form(),
+rcmail.addEventListener("compose-encrypted",function(a){$("a.button.encrypt")[a.active?"addClass":"removeClass"]("selected");$("select[name='editorSelector']").prop("disabled",a.active);$("a.button.attach, a.button.responses, a.button.attach, #uploadmenulink")[a.active?"addClass":"removeClass"]("buttonPas disabled");$("#responseslist a.insertresponse")[a.active?"removeClass":"addClass"]("active")}),rcmail.addEventListener("fileappended",function(a){a.attachment.complete&&attachment_menu_append(a.item)}),
+$("#attachmentslist > li").each(function(){attachment_menu_append(this)});else{if("show"==rcmail.env.action||"preview"==rcmail.env.action)$('#attachment-list > li[id^="attach"]').each(function(){attachment_menu_append(this)}),$(window).resize(function(){$('#attachment-list > li[id^="attach"]').length||$("#attachment-list").hide();var a=$("#messagebody.mailvelope");if(a.length){var b=$("#messageframe");b=(b.length?b.height()+b.offset().top-25:$(this).height())-a.offset().top-20;a.height(b)}})}else"addressbook"==
+rcmail.env.task?rcmail.addEventListener("afterupload-photo",function(){rcmail_ui.show_popup("uploadform",!1)}).gui_object("dragmenu","dragmenu"):"settings"==rcmail.env.task&&"folders"==rcmail.env.action&&rcmail_ui.folder_search_init($("#folder-manager"))})};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/googiespell.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,118 @@
+/***** modified styles for GoogieSpell *****/
+
+.googie_window {
+  font-size: 11px;
+  width: 185px;
+  margin: 0;
+  padding: 0;
+}
+
+.googie_edit_layer {
+  background-color: #ffffff;
+  padding: 1px 3px;
+  font-size: 9pt;
+  font-family: monospace;
+}
+
+.googie_edit_layer span {
+  font-family: monospace;
+}
+
+.googie_list {
+  width: 100%;
+  margin: 0;
+  padding: 0;
+}
+
+.googie_list td {
+  font-size: 11px;
+  padding-left: 10px;
+  padding-right: 10px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  cursor: pointer;
+  list-style-type: none;
+}
+
+.googie_list_onhover {
+  color: #FFFFFF;
+  background-color: #CC3333;
+}
+
+.googie_list_onout {
+  background-color: #fff;
+}
+
+.googie_list_selected {
+  background-color: #cccccc;
+  font-weight: bold;
+}
+
+.googie_list_close {
+  font-size: 11px;
+  color: #b91414;
+}
+
+.googie_list_onhover .googie_list_close {
+  color: #FFFFFF;
+}
+
+.googie_list_revert {
+  font-size: 11px;
+  color: #b91414;
+}
+
+.googie_list_revert:hover {
+  color: #fff;
+}
+
+.googie_link {
+  color: #b91414;
+  text-decoration: underline;
+  cursor: pointer;
+  font-size: 9pt;
+  font-family: monospace;
+}
+
+.googie_check_spelling_link {
+  color: #CC0000;
+  font-size: 11px;
+  text-decoration: none;
+  cursor: pointer;
+}
+
+.googie_check_spelling_link:hover {
+  text-decoration: underline;
+}
+
+.googie_no_style {
+  text-decoration: none;
+}
+
+.googie_check_spelling_ok,
+.googie_resume_editing {
+  color: green;
+  font-size: 11px;
+  cursor: pointer;
+}
+
+.googie_check_spelling_ok:hover,
+.googie_resume_editing:hover {
+  text-decoration: underline;
+}
+
+.googie_lang_3d_click img {
+  vertical-align: middle;
+  border-top: 1px solid #555;
+  border-left: 1px solid #555;
+  border-right: 1px solid #b1b1b1;
+  border-bottom: 1px solid #b1b1b1;
+}
+
+.googie_lang_3d_on img {
+  vertical-align: middle;
+  border-top: 1px solid #b1b1b1;
+  border-left: 1px solid #b1b1b1;
+  border-right: 1px solid #555;
+  border-bottom: 1px solid #555;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/googiespell.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+.googie_window{font-size:11px;width:185px;margin:0;padding:0}.googie_edit_layer{background-color:#fff;padding:1px 3px;font-size:9pt;font-family:monospace}.googie_edit_layer span{font-family:monospace}.googie_list{width:100%;margin:0;padding:0}.googie_list td{font-size:11px;padding-left:10px;padding-right:10px;padding-top:2px;padding-bottom:2px;cursor:pointer;list-style-type:none}.googie_list_onhover{color:#fff;background-color:#c33}.googie_list_onout{background-color:#fff}.googie_list_selected{background-color:#ccc;font-weight:bold}.googie_list_close{font-size:11px;color:#b91414}.googie_list_onhover .googie_list_close{color:#fff}.googie_list_revert{font-size:11px;color:#b91414}.googie_list_revert:hover{color:#fff}.googie_link{color:#b91414;text-decoration:underline;cursor:pointer;font-size:9pt;font-family:monospace}.googie_check_spelling_link{color:#c00;font-size:11px;text-decoration:none;cursor:pointer}.googie_check_spelling_link:hover{text-decoration:underline}.googie_no_style{text-decoration:none}.googie_check_spelling_ok,.googie_resume_editing{color:green;font-size:11px;cursor:pointer}.googie_check_spelling_ok:hover,.googie_resume_editing:hover{text-decoration:underline}.googie_lang_3d_click img{vertical-align:middle;border-top:1px solid #555;border-left:1px solid #555;border-right:1px solid #b1b1b1;border-bottom:1px solid #b1b1b1}.googie_lang_3d_on img{vertical-align:middle;border-top:1px solid #b1b1b1;border-left:1px solid #b1b1b1;border-right:1px solid #555;border-bottom:1px solid #555}
\ No newline at end of file
Binary file skins/classic/images/abook_toolbar.png has changed
Binary file skins/classic/images/buttons/add_act.png has changed
Binary file skins/classic/images/buttons/add_pas.png has changed
Binary file skins/classic/images/buttons/add_sel.png has changed
Binary file skins/classic/images/buttons/bg.gif has changed
Binary file skins/classic/images/cleardot.png has changed
Binary file skins/classic/images/contactgroup.png has changed
Binary file skins/classic/images/contactpic.png has changed
Binary file skins/classic/images/dbutton.png has changed
Binary file skins/classic/images/dimple.png has changed
Binary file skins/classic/images/display/icons.gif has changed
Binary file skins/classic/images/display/icons.png has changed
Binary file skins/classic/images/display/loading.gif has changed
Binary file skins/classic/images/display/loading_blue.gif has changed
Binary file skins/classic/images/favicon.ico has changed
Binary file skins/classic/images/filedrop.png has changed
Binary file skins/classic/images/googiespell/change_lang.gif has changed
Binary file skins/classic/images/googiespell/indicator.gif has changed
Binary file skins/classic/images/googiespell/ok.gif has changed
Binary file skins/classic/images/googiespell/spellc.gif has changed
Binary file skins/classic/images/icons/attachment.png has changed
Binary file skins/classic/images/icons/blank.gif has changed
Binary file skins/classic/images/icons/collapsed.png has changed
Binary file skins/classic/images/icons/columnpicker.gif has changed
Binary file skins/classic/images/icons/delete.png has changed
Binary file skins/classic/images/icons/deleted.png has changed
Binary file skins/classic/images/icons/dot.png has changed
Binary file skins/classic/images/icons/down_small.gif has changed
Binary file skins/classic/images/icons/expanded.png has changed
Binary file skins/classic/images/icons/extwin.png has changed
Binary file skins/classic/images/icons/flagged.png has changed
Binary file skins/classic/images/icons/folders.png has changed
Binary file skins/classic/images/icons/forwarded.png has changed
Binary file skins/classic/images/icons/forwarded_replied.png has changed
Binary file skins/classic/images/icons/glass.png has changed
Binary file skins/classic/images/icons/glass_roll.png has changed
Binary file skins/classic/images/icons/groupactions.png has changed
Binary file skins/classic/images/icons/html.png has changed
Binary file skins/classic/images/icons/minus.gif has changed
Binary file skins/classic/images/icons/plus.gif has changed
Binary file skins/classic/images/icons/rename.png has changed
Binary file skins/classic/images/icons/replied.png has changed
Binary file skins/classic/images/icons/reset.gif has changed
Binary file skins/classic/images/icons/silhouette.png has changed
Binary file skins/classic/images/icons/sort.gif has changed
Binary file skins/classic/images/icons/text.png has changed
Binary file skins/classic/images/icons/unflagged.png has changed
Binary file skins/classic/images/icons/unread.png has changed
Binary file skins/classic/images/icons/unread_children.png has changed
Binary file skins/classic/images/icons/up_small.gif has changed
Binary file skins/classic/images/listheader.gif has changed
Binary file skins/classic/images/mail_footer.png has changed
Binary file skins/classic/images/mail_toolbar.png has changed
Binary file skins/classic/images/messageactions.png has changed
Binary file skins/classic/images/messageicons.png has changed
Binary file skins/classic/images/pagenav.gif has changed
Binary file skins/classic/images/quota-colors.png has changed
Binary file skins/classic/images/quota.png has changed
Binary file skins/classic/images/roundcube_logo.png has changed
Binary file skins/classic/images/searchfield.gif has changed
Binary file skins/classic/images/tabs-left.gif has changed
Binary file skins/classic/images/tabs-right.gif has changed
Binary file skins/classic/images/taskbar.png has changed
Binary file skins/classic/images/taskicons.gif has changed
Binary file skins/classic/images/taskicons.png has changed
Binary file skins/classic/images/tree.gif has changed
Binary file skins/classic/images/watermark.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/includes/header.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" onclick="location.href='./?_page=1'" />
+<roundcube:object name="message" id="message" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/includes/links.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<link rel="index" href="$__comm_path" />
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/common.css" />
+<roundcube:if condition="in_array(env:task, array('mail', 'addressbook', 'settings'))" />
+<link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" />
+<roundcube:endif />
+<roundcube:if condition="browser:safari" />
+<link rel="stylesheet" type="text/css" href="/safari.css" />
+<roundcube:endif />
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/includes/messagetoolbar.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@
+<div id="messagetoolbar">
+<roundcube:if condition="template:name == 'message' && env:extwin" />
+<roundcube:button command="close" type="link" class="button back" classAct="button back" classSel="button backSel" title="close" content=" " />
+<roundcube:elseif condition="template:name == 'message'" />
+<roundcube:button command="list" type="link" class="button back" classAct="button back" classSel="button backSel" title="backtolist" content=" " />
+<roundcube:else />
+<roundcube:button command="checkmail" type="link" class="button checkmail" classAct="button checkmail" classSel="button checkmailSel" title="checkmail" content=" " />
+<roundcube:endif />
+<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " />
+<roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " />
+<span class="dropbutton">
+<roundcube:button command="reply-all" type="link" class="buttonPas replyAll" classAct="button replyAll" classSel="button replyAllSel" title="replytoallmessage" content=" " />
+<span id="replyallmenulink" onclick="rcmail_ui.show_popup('replyallmenu');return false"></span>
+</span>
+<span class="dropbutton">
+<roundcube:button command="forward" type="link" class="buttonPas forward" classAct="button forward" classSel="button forwardSel" title="forwardmessage" content=" " />
+<span id="forwardmenulink" onclick="rcmail_ui.show_popup('forwardmenu');return false"></span>
+</span>
+<roundcube:button command="delete" type="link" class="buttonPas delete" classAct="button delete" classSel="button deleteSel" title="deletemessage" content=" " />
+<roundcube:if condition="template:name == 'message'" />
+    <roundcube:button command="move" type="link" class="buttonPas move" classAct="button move" classSel="button moveSel" label="move" title="moveto" content=" " data-menu-pos="bottom" />
+    <roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" label="print" title="printmessage" content=" " />
+<roundcube:endif />
+<roundcube:container name="toolbar" id="messagetoolbar" />
+<roundcube:button name="markmenulink" id="markmenulink" type="link" class="button markmessage" title="markmessages" onclick="rcmail_ui.show_popup('markmenu');return false" content=" " />
+<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button messagemenu" title="moreactions" onclick="rcmail_ui.show_popup('messagemenu');return false" content=" " />
+</div>
+
+<div id="forwardmenu" class="popupmenu">
+    <ul id="forwardmenumenu">
+        <roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
+        <roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
+        <roundcube:container name="forwardmenu" id="forwardmenumenu" />
+    </ul>
+</div>
+
+<div id="replyallmenu" class="popupmenu">
+    <ul id="replyallmenumenu">
+        <roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" classAct="replyalllink active" class="replyalllink" />
+        <roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" classAct="replylistlink active" class="replylistlink" />
+        <roundcube:container name="replyallmenu" id="replyallmenumenu" />
+    </ul>
+</div>
+
+<div id="messagemenu" class="popupmenu">
+  <ul class="toolbarmenu" id="messagemenumenu">
+    <roundcube:button type="link-menuitem" class="printlink" command="print" label="printmessage" classAct="printlink active" />
+    <roundcube:button type="link-menuitem" class="downloadlink" command="download" label="emlsave" classAct="downloadlink active" />
+    <roundcube:button type="link-menuitem" class="editlink" command="edit" prop="new" label="editasnew" classAct="editlink active" />
+    <roundcube:button type="link-menuitem" class="movelink" command="move" label="moveto" classAct="movelink active" innerclass="folder-selector-link" />
+    <roundcube:button type="link-menuitem" class="copylink" command="copy" label="copyto" classAct="copylink active" innerclass="folder-selector-link" />
+    <roundcube:button type="link-menuitem" class="sourcelink" command="viewsource" label="viewsource" classAct="sourcelink active" menuitem-class="separator_below" />
+    <roundcube:button type="link-menuitem" class="openlink" command="open" label="openinextwin" target="_blank" classAct="openlink active" />
+    <roundcube:container name="messagemenu" id="messagemenumenu" />
+  </ul>
+</div>
+
+<div id="markmessagemenu" class="popupmenu">
+  <ul class="toolbarmenu" id="markmessagemenumenu">
+    <roundcube:button type="link-menuitem" command="mark" prop="read" label="markread" classAct="readlink active" class="readlink" />
+    <roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="unreadlink active" class="unreadlink" />
+    <roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" classAct="flaggedlink active" class="flaggedlink" />
+    <roundcube:button type="link-menuitem" command="mark" prop="unflagged" label="markunflagged" classAct="unflaggedlink active" class="unflaggedlink" />
+    <roundcube:container name="markmenu" id="markmessagemenumenu" />
+  </ul>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/includes/settingstabs.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+<div id="tabsbar">
+<roundcube:object name="settingstabs" class="tablink" selClass="tablink-selected" />
+<roundcube:container name="tabs" id="tabsbar" />
+<span id="settingstababout" class="tablink"><roundcube:button command="about" type="link" label="about" title="about" class="tablink" /></span>
+<script type="text/javascript"> if (window.rcmail) rcmail.add_onload(rcube_init_settings_tabs); </script>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/includes/taskbar.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+<div id="taskbar">
+<roundcube:button command="mail" label="mail" class="button-mail" />
+<roundcube:button command="addressbook" label="contacts" class="button-addressbook" />
+<roundcube:container name="taskbar" id="taskbar" />
+<roundcube:button command="settings" label="settings" class="button-settings" />
+<roundcube:button command="logout" label="logout" class="button-logout" />
+</div>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/mail.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1891 @@
+/***** Roundcube|Mail mail task styles *****/
+
+
+#messagetoolbar
+{
+  position: absolute;
+  top: 47px;
+  left: 205px;
+  right: 10px;
+  height: 35px;
+  min-width: 650px;
+  white-space: nowrap;
+/*  border: 1px solid #cccccc; */
+}
+
+.extwin #messagetoolbar
+{
+  top: 5px;
+  left: 20px;
+}
+
+#messagetoolbar a,
+#messagetoolbar select
+{
+  display: block;
+  float: left;
+  padding-right: 10px;
+}
+
+#messagetoolbar a.button,
+#messagetoolbar a.buttonPas {
+  display: block;
+  float: left;
+  width: 32px;
+  height: 32px;
+  padding: 0;
+  margin: 0 5px;
+  overflow: hidden;
+  background: url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#messagetoolbar a.buttonPas {
+  opacity: 0.35;
+}
+
+#messagetoolbar a.button.selected {
+  background-color: #ddd;
+  margin-left: 4px;
+  margin-right: 4px;
+  margin-top: -1px;
+  border: 1px solid #ccc;
+  border-radius: 3px;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+}
+
+#messagetoolbar a.checkmailSel {
+  background-position: 0 -32px;
+}
+
+#messagetoolbar a.back {
+  background-position: -32px 0;
+}
+
+#messagetoolbar a.backSel {
+  background-position: -32px -32px;
+}
+
+#messagetoolbar a.compose {
+  background-position: -64px 0;
+}
+
+#messagetoolbar a.composeSel {
+  background-position: -64px -32px;
+}
+
+#messagetoolbar a.reply {
+  background-position: -96px 0;
+}
+
+#messagetoolbar a.replySel {
+  background-position: -96px -32px;
+}
+
+#messagetoolbar a.replyAll {
+  background-position: -128px 0;
+}
+
+#messagetoolbar a.replyAllSel {
+  background-position: -128px -32px;
+}
+
+#messagetoolbar a.forward {
+  background-position: -160px 0;
+}
+
+#messagetoolbar a.forwardSel {
+  background-position: -160px -32px;
+}
+
+#messagetoolbar a.delete {
+  background-position: -192px 0;
+}
+
+#messagetoolbar a.deleteSel {
+  background-position: -192px -32px;
+}
+
+#messagetoolbar a.print {
+  background-position: -256px 0;
+}
+
+#messagetoolbar a.printSel {
+  background-position: -256px -32px;
+}
+
+#messagetoolbar a.markmessage {
+  background-position: -288px 0;
+}
+
+#messagetoolbar a.messagemenu {
+  background-position: -320px 0;
+  width: 34px;
+}
+
+#messagetoolbar a.spellcheck {
+  background-position: -418px 0;
+}
+
+#messagetoolbar a.spellcheckSel {
+  background-position: -418px -32px;
+}
+
+#messagetoolbar a.attach {
+  background-position: -386px 0;
+}
+
+#messagetoolbar a.attachSel {
+  background-position: -386px -32px;
+}
+
+#messagetoolbar a.insertsig {
+  background-position: -482px 0;
+}
+
+#messagetoolbar a.insertsigSel {
+  background-position: -482px -32px;
+}
+
+#messagetoolbar a.savedraft {
+  background-position: -354px 0;
+}
+
+#messagetoolbar a.savedraftSel {
+  background-position: -354px -32px;
+}
+
+#messagetoolbar a.send {
+  background-position: -450px 0;
+}
+
+#messagetoolbar a.sendSel {
+  background-position: -450px -32px;
+}
+
+#messagetoolbar a.move {
+  background-position: -580px 0;
+}
+
+#messagetoolbar a.moveSel {
+  background-position: -580px -32px;
+}
+
+#messagetoolbar a.download {
+  background-position: -514px 0;
+}
+
+#messagetoolbar a.downloadSel {
+  background-position: -514px -32px;
+}
+
+#messagetoolbar a.responses {
+  background-position: -548px 0;
+}
+
+#messagetoolbar a.encrypt {
+  background-position: -612px 0;
+}
+
+#messagetoolbar a.encryptSel {
+  background-position: -612px -32px;
+}
+
+#messagemenu li a.active:hover,
+#attachmentmenu li a.active:hover,
+#markmessagemenu li a.active:hover
+{
+  color: #fff;
+  background-color: #c00;
+}
+
+#messagemenu li a,
+#attachmentmenu li a
+{
+  background: url(images/messageactions.png?v=8c64.2615) no-repeat 7px 0;
+  background-position: 7px 20px;
+}
+
+#messagemenu li a.printlink
+{
+  background-position: 7px 1px;
+}
+
+#messagemenu li a.downloadlink,
+#attachmentmenu li a.downloadlink
+{
+  background-position: 7px -17px;
+}
+
+#attachmentmenu li a.renamelink
+{
+  background-position: 6px -69px;
+}
+
+#messagemenu li a.sourcelink
+{
+  background-position: 7px -34px;
+}
+
+#messagemenu li a.openlink,
+#attachmentmenu li a.openlink
+{
+  background-position: 7px -52px;
+}
+
+#messagemenu li a.editlink
+{
+  background-position: 6px -70px;
+}
+
+#messagemenu li a.movelink
+{
+  background-position: 6px -160px;
+}
+
+#messagemenu li a.copylink
+{
+  background-position: 6px -142px;
+}
+
+#markmessagemenu li a,
+#compose-attachments li a.delete,
+#compose-attachments li a.cancelupload
+{
+  background: url(images/messageicons.png?v=c493.2511) no-repeat;
+}
+
+#markmessagemenu li a.readlink
+{
+  background-position: 7px -51px;
+}
+
+#markmessagemenu li a.unreadlink
+{
+  background-position: 7px -119px;
+}
+
+#markmessagemenu li a.flaggedlink
+{
+  background-position: 7px -153px;
+}
+
+#markmessagemenu li a.unflaggedlink
+{
+  background-position: 7px -136px;
+}
+
+#searchfilter
+{
+  white-space: nowrap;
+  position: absolute;
+  right: 198px;
+  vertical-align: middle;
+}
+
+#searchfilter label
+{
+  font-size: 11px;
+}
+
+#mailleftcontainer
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  width: 160px;
+}
+
+#mailrightcontainer
+{
+  position: absolute;
+  top: 0;
+  left: 170px;
+  bottom: 0;
+  right: 0;
+  min-width: 600px;
+}
+
+#mailrightcontent
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+#messagepartcontainer
+{
+  position: absolute;
+  top: 0;
+  left: 170px;
+  right: 0;
+  bottom: 0;
+}
+
+#messagepartheader
+{
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 160px;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#messagepartheader table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#messagepartheader table td
+{
+  text-overflow: ellipsis;
+}
+
+#messagepartheader table td.title
+{
+  width: 60px;
+}
+
+#mailcontframe
+{
+  position: absolute;
+  width: 100%;
+  top: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+#mailpreviewframe
+{
+  position: absolute;
+  right: 0;
+  top: 205px;
+  bottom: 0px;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  display: none;
+}
+
+#messagecontframe
+{
+  position: relative;
+  top: 0px;
+  left: 0px;
+  right: 0px;
+  bottom: 0px;
+  width: 100%;
+  height: 100%;
+  min-height: 100%; /* Chrome 14 bug */
+}
+
+#messagepartframe
+{
+  width: 100%;
+  height: 100%;
+  min-height: 100%; /* Chrome 14 bug */
+  border: 1px solid #999999;
+  background-color: #fff;
+}
+
+
+/** mailbox list styles */
+
+#mailboxlist-container
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  bottom: 0;
+  border: 1px solid #999;
+  background-color: #F9F9F9;
+}
+
+#mailboxlist
+{
+  position:relative;
+  height: auto;
+  margin: 0px;
+  padding: 0px;
+  list-style-image: none;
+  list-style-type: none;
+  overflow: hidden;
+  white-space: nowrap;
+  background-color: #FFF;
+}
+
+#mailboxlist li.unread
+{
+  font-weight: bold;
+}
+
+#mailboxlist li.recent > a
+{
+  color: #0066FF;
+}
+
+#listcontrols
+{
+  position: relative;
+  white-space: nowrap;
+  line-height: 22px;
+  padding: 0 4px;
+  width: auto;
+  min-width: 300px;
+}
+
+#listcontrols a,
+#listcontrols span
+{
+  display: block;
+  float: left;
+  font-size: 11px;
+}
+
+#listcontrols span input
+{
+  vertical-align: middle;
+}
+
+#listcontrols a.button,
+#listcontrols a.buttonPas
+{
+  display: block;
+  float: left;
+  width: 15px;
+  height: 15px;
+  padding: 0;
+  margin-top: 4px;
+  margin-right: 2px;
+  overflow: hidden;
+  background: url(images/mail_footer.png?v=1c4b.774) 0 0 no-repeat transparent;
+  opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#listcontrols a.buttonPas
+{
+  opacity: 0.35;
+}
+
+#listcontrols a.all {
+  background-position: -30px 0;
+}
+
+#listcontrols a.allsel {
+  background-position: -30px -15px;
+}
+
+#listcontrols a.page {
+  background-position: -135px 0;
+}
+
+#listcontrols a.pagesel {
+  background-position: -135px -15px;
+}
+
+#listcontrols a.unread {
+  background-position: -45px 0;
+}
+
+#listcontrols a.unreadsel {
+  background-position: -45px -15px;
+}
+
+#listcontrols a.invert {
+  background-position: -60px 0;
+}
+
+#listcontrols a.invertsel {
+  background-position: -60px -15px;
+}
+
+#listcontrols a.none {
+  background-position: -75px 0;
+}
+
+#listcontrols a.nonesel {
+  background-position: -75px -15px;
+}
+
+#listcontrols a.expand-all {
+  background-position: -90px 0;
+}
+
+#listcontrols a.expand-allsel {
+  background-position: -90px -15px;
+}
+
+#listcontrols a.collapse-all {
+  background-position: -105px 0;
+}
+
+#listcontrols a.collapse-allsel {
+  background-position: -105px -15px;
+}
+
+#listcontrols a.expand-unread {
+  background-position: -120px 0;
+}
+
+#listcontrols a.expand-unreadsel {
+  background-position: -120px -15px;
+}
+
+#countcontrols
+{
+  position: absolute;
+  top: 4px;
+  right: 4px;
+  white-space: nowrap;
+  font-size: 11px;
+  line-height: 14px;
+}
+
+#countcontrols a.button,
+#countcontrols a.buttonPas
+{
+  float: right;
+}
+
+
+/** message list styles */
+
+body.messagelist
+{
+  margin: 0px;
+  background-color: #F9F9F9;
+}
+
+table.messagelist
+{
+  width: 100%;
+  display: table;
+  table-layout: fixed;
+  border-spacing: 0;
+  z-index: 1;
+}
+
+table.messagelist.fixedcopy
+{
+  z-index: 2;
+}
+
+.messagelist thead tr th,
+.messagelist thead tr td
+{
+  height: 20px;
+  padding: 0 4px 0 2px;
+  vertical-align: middle;
+  border-bottom: 1px solid #999999;
+  color: #333333;
+  background: url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;
+  font-size: 11px;
+  font-weight: bold;
+  text-align: left;
+}
+
+.messagelist thead tr > .sortedASC,
+.messagelist thead tr > .sortedDESC
+{
+  background-position: 0 -26px;
+}
+
+.messagelist thead tr > .sortedASC a
+{
+  background: url(images/icons/sort.gif?v=92aa.144) right 0 no-repeat;
+}
+
+.messagelist thead tr > .sortedDESC a
+{
+  background: url(images/icons/sort.gif?v=92aa.144) right -14px no-repeat;
+}
+
+.messagelist thead tr a
+{
+  display: block;
+  width: auto !important;
+  width: 100%;
+  color: #333333;
+  text-decoration: none;
+}
+
+.messagelist thead tr > .size.sortedASC a,
+.messagelist thead tr > .size.sortedDESC a
+{
+  padding-right: 18px;
+}
+
+.messagelist thead tr > .subject
+{
+  padding-left: 18px;
+  width: 99%;
+}
+
+.messagelist tbody tr th,
+.messagelist tbody tr td
+{
+  height: 20px;
+  padding: 0;
+  font-size: 11px;
+  overflow: hidden;
+  vertical-align: middle;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+  border-bottom: 1px solid #EBEBEB;
+  cursor: default;
+  outline: none;
+}
+
+.messagelist tbody tr td a
+{
+  color: #000;
+  text-decoration: none;
+  white-space: nowrap;
+  cursor: inherit;
+}
+
+.messagelist td img
+{
+  vertical-align: middle;
+  display: inline-block;
+}
+
+.messagelist tbody tr td.flag,
+.messagelist tbody tr td.status,
+.messagelist tbody tr td.subject span.status
+{
+  cursor: pointer;
+}
+
+.messagelist tr .flag span,
+.messagelist tr .status span,
+.messagelist tr .attachment span,
+.messagelist tr .priority span
+{
+  display: block;
+  width: 15px;
+  text-indent: -5000px;
+  overflow: hidden;
+}
+
+.messagelist tr td div.collapsed,
+.messagelist tr td div.expanded,
+.messagelist tr > .threads .listmenu,
+.messagelist tr .attachment span.attachment,
+.messagelist tr .attachment span.report,
+.messagelist tr .attachment span.encrypted,
+.messagelist tr > .priority span.priority,
+.messagelist tr > .priority span.prio1,
+.messagelist tr > .priority span.prio2,
+.messagelist tr > .priority span.prio3,
+.messagelist tr > .priority span.prio4,
+.messagelist tr > .priority span.prio5,
+.messagelist tr .flag span.flagged,
+.messagelist tr .flag span.unflagged,
+.messagelist tr:hover .flag span.unflagged,
+.messagelist tr > .status span.status,
+.messagelist tr > .status span.msgicon,
+.messagelist tr > .status span.deleted,
+.messagelist tr > .status span.unread,
+.messagelist tr > .status span.unreadchildren,
+.messagelist tr > .subject span.msgicon,
+.messagelist tr > .subject span.deleted,
+.messagelist tr > .subject span.unread,
+.messagelist tr > .subject span.replied,
+.messagelist tr > .subject span.forwarded,
+.messagelist tr > .subject span.unreadchildren
+{
+  display: inline-block;
+  vertical-align: middle;
+  height: 17px;
+  width: 15px;
+  background: url(images/messageicons.png?v=c493.2511) center no-repeat;
+}
+
+.messagelist tr .attachment span.attachment
+{
+  background-position: 0 -170px;
+}
+
+.messagelist tr .attachment span.report
+{
+  background-position: 0 -255px;
+}
+
+.messagelist tr .attachment span.encrypted
+{
+  background-position: 0 -418px;
+}
+
+.messagelist tr > .priority span.priority
+{
+  background-position: 0 -309px;
+}
+
+.messagelist tr > .priority span.prio5
+{
+  background-position: 0 -358px;
+}
+
+.messagelist tr > .priority span.prio4
+{
+  background-position: 0 -340px;
+}
+
+.messagelist tr > .priority span.prio3
+{
+  background-position: 0 -324px;
+}
+
+.messagelist tr > .priority span.prio2
+{
+  background-position: 0 -309px;
+}
+
+.messagelist tr > .priority span.prio1
+{
+  background-position: 0 -290px;
+}
+
+.messagelist tr .flag span.flagged
+{
+  background-position: 0 -153px;
+}
+
+.messagelist tr:hover .flag span.unflagged
+{
+  background-position: 0 -136px;
+}
+
+.messagelist tr.flaggedroot .flag span,
+.messagelist tr.flaggedroot .flag span.unflagged
+{
+  background-position: 0 -136px;
+}
+
+.messagelist tr > .subject span.msgicon,
+.messagelist tr > .subject span.unreadchildren
+{
+  background-position: 0 -51px;
+  margin: 0 2px;
+}
+
+.messagelist tr > .subject span.replied
+{
+  background-position: 0 -85px;
+}
+
+.messagelist tr > .subject span.forwarded
+{
+  background-position: 0 -68px;
+}
+
+.messagelist tr > .subject span.replied.forwarded
+{
+  background-position: 0 -102px;
+}
+
+.messagelist tr > .status span.msgicon,
+.messagelist tr .flag span.unflagged,
+.messagelist tr > .status span.unreadchildren
+{
+  background-position: 0 18px; /* no icon */
+}
+
+.messagelist tr > .status span.msgicon:hover
+{
+  background-position: 0 -272px;
+}
+
+.messagelist tr > .status span.deleted,
+.messagelist tr > .subject span.deleted
+{
+  background-position: 0 -187px;
+}
+
+.messagelist tr > .status span.status,
+.messagelist tr > .status span.unread,
+.messagelist tr > .subject span.unread
+{
+  background-position: 0 -119px;
+}
+
+.messagelist tr td div.collapsed
+{
+  background-position: 0 -221px;
+  cursor: pointer;
+}
+
+.messagelist tr td div.expanded
+{
+  background-position: 0 -204px;
+  cursor: pointer;
+}
+
+.messagelist tr > .threads .listmenu
+{
+  background-position: 0 -238px;
+  cursor: pointer;
+  overflow: hidden;
+  text-indent: -5000px;
+  display: block;
+}
+
+.messagelist tbody tr td.subject
+{
+  width: 99%;
+}
+
+.messagelist tbody tr td.subject a
+{
+  cursor: default;
+  vertical-align: middle; /* #1487091 */
+}
+
+/* thread parent message with unread children */
+.messagelist tbody tr.unroot td.subject a
+{
+  text-decoration: underline;
+}
+
+.messagelist tr > .attachment,
+.messagelist tr > .threads,
+.messagelist tr > .status,
+.messagelist tr > .flag,
+.messagelist tr > .priority
+{
+  width: 17px;
+  padding: 0 0 0 2px;
+}
+
+.messagelist tr > .size
+{
+  width: 60px;
+  text-align: right;
+  padding: 0 2px;
+}
+
+.messagelist tr > .fromto,
+.messagelist tr > .from,
+.messagelist tr > .to,
+.messagelist tr > .cc,
+.messagelist tr > .replyto
+{
+  width: 180px;
+  padding: 0 2px;
+}
+
+.messagelist tr > .date
+{
+  width: 135px;
+  padding: 0 2px;
+}
+
+.messagelist tr > .folder
+{
+  width: 135px;
+}
+
+.messagelist tr > .hidden
+{
+  display: none;
+}
+
+.messagelist tr.message
+{
+  background-color: #FFF;
+}
+
+.messagelist tr.unread
+{
+  font-weight: bold;
+  background-color: #FFFFFF;
+}
+
+.messagelist tr.flagged td,
+.messagelist tr.flagged td a
+{
+  color: #CC0000;
+}
+
+/* This padding-left minus the focused padding left should be half of the focused border-left */
+.messagelist thead tr th:first-child,
+.messagelist thead tr td:first-child,
+.messagelist tbody tr td:first-child {
+	border-left: 0;
+	padding-left: 6px;
+}
+
+/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
+.messagelist tbody tr.focused > td:first-child {
+	border-left: 2px solid #d4d4d4;
+	padding-left: 4px;
+}
+
+.messagelist tbody tr.selected.focused > td:first-child {
+	border-left: 2px solid #ccc;
+	padding-left: 5px;
+}
+
+.messagelist tr.selected td
+{
+  color: #FFFFFF;
+  background-color: #929292;
+}
+
+.messagelist.focus tr.selected td
+{
+  background-color: #CC3333;
+}
+
+.messagelist tr.selected td a
+{
+  color: #FFFFFF;
+}
+
+.messagelist tr.deleted td,
+.messagelist tr.deleted td a
+{
+  color: #CCCCCC;
+}
+
+#listmenu
+{
+  padding: 6px;
+  max-height: none;
+}
+
+#listmenu legend
+{
+  color: #999999;
+}
+
+#listmenu fieldset
+{
+  border: 1px solid #999999;
+  margin: 0 5px;
+  float: left;
+}
+
+#listmenu div
+{
+  padding: 8px 0 3px 0;
+  text-align: center;
+  clear: both;
+}
+
+/***** tree indicators *****/
+
+td span.branch div
+{
+  float: left;
+  height: 16px;
+}
+
+td span.branch div.tree
+{
+  height: 17px;
+  width: 15px;
+  background: url(images/tree.gif?v=9b73.92) 0px 0px no-repeat;
+}
+
+td span.branch div.l1
+{
+  background-position: 0px 0px; /* L */
+}
+
+td span.branch div.l2
+{
+  background-position: -30px 0px; /* | */
+}
+
+td span.branch div.l3
+{
+  background-position: -15px 0px; /* |- */
+}
+
+
+/** message view styles */
+
+#messageframe
+{
+  position: absolute;
+  top: 0;
+  left: 180px;
+  right: 0;
+  bottom: 0;
+  border: 1px solid #999;
+  background-color: #FFF;
+  overflow: auto;
+  z-index: 1;
+}
+
+.extwin #messageframe
+{
+	left: 0;
+}
+
+div.messageheaderbox
+{
+  margin: -14px 8px 0px 8px;
+  border: 1px solid #ccc;
+}
+
+table.headers-table
+{
+  width: 100%;
+  background-color: #EBEBEB;
+}
+
+#messagebody #full-headers,
+#messagebody table.headers-table
+{
+  width: auto;
+  margin: 6px 8px;
+  background-color: #F4F4F4;
+}
+
+#messagebody.mailvelope {
+  padding: 10px 8px;
+}
+
+#messagebody table.headers-table
+{
+  margin: 16px 6px 6px 6px;
+}
+
+div.message-partheaders + div.message-part
+{
+  border-top: 0;
+  padding-top: 4px;
+}
+
+table.headers-table tr td
+{
+  font-size: 11px;
+  border-bottom:1px solid #FFFFFF;
+}
+
+table.headers-table tr td.header-title
+{
+  width: 1%;
+  color: #666666;
+  font-weight: bold;
+  text-align: right;
+  white-space: nowrap;
+  padding: 0 4px 0 8px;
+}
+
+table.headers-table tr td.header
+{
+  width: 99%;
+}
+
+table.headers-table tr td.subject
+{
+  font-weight: bold;
+}
+
+table.headers-table tr td.header span
+{
+  white-space: nowrap;
+}
+
+#attachment-list
+{
+  margin: 0;
+  padding: 0 4px 0 8px;
+  min-height: 16px;
+  list-style-image: none;
+  list-style-type: none;
+  background: url(images/icons/attachment.png?v=ee4e.516) 4px 2px no-repeat #DFDFDF;
+}
+
+#messageframe #attachment-list
+{
+  border-bottom: 1px solid #ccc;
+}
+
+.messageheaderbox #attachment-list
+{
+  border-top: 1px solid #ccc;
+}
+
+#attachment-list:after
+{
+  content: ".";
+  display: block;
+  height: 0;
+  font-size: 0;
+  clear: both;
+  visibility: hidden;
+}
+
+#attachment-list li
+{
+  float: left;
+  height: 18px;
+  font-size: 11px;
+  padding: 2px 0px 0px 15px;
+  white-space: nowrap;
+}
+
+#attachment-list li a
+{
+  text-decoration: none;
+}
+
+#attachment-list li a:hover
+{
+  text-decoration: underline;
+}
+
+#attachment-list li a.drop {
+  background: url(images/icons/down_small.gif?v=f368.105) no-repeat center 6px;
+  width: 12px;
+  height: 16px;
+  cursor: pointer;
+  padding: 0;
+  margin-left: 3px;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+#messagebody
+{
+  position:relative;
+  padding-bottom: 10px;
+  background-color: #FFFFFF;
+}
+
+div.message-part,
+div.message-htmlpart
+{
+  padding: 10px 8px;
+  border-top: 1px solid #ccc;
+/*  overflow: hidden; */
+}
+
+#messagebody div:first-child
+{
+  border-top: 0;
+}
+
+div.message-part a,
+div.message-htmlpart a
+{
+  color: #0000CC;
+}
+
+div.message-part div.pre
+{
+  margin: 0px;
+  padding: 0px;
+  font-family: monospace;
+  font-size: 12px;
+}
+
+div.message-part span.sig
+{
+  color: #666666;
+}
+
+div.message-part blockquote
+{
+  color: blue;
+  border-left: 2px solid blue;
+  border-right: 2px solid blue;
+  background-color: #F6F6F6;
+  margin: 2px 0;
+  padding: 0 0.4em;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+div.message-part blockquote blockquote
+{
+  color: green;
+  border-left: 2px solid green;
+  border-right: 2px solid green;
+}
+
+div.message-part blockquote blockquote blockquote
+{
+  color: #990000;
+  border-left: 2px solid #bb0000;
+  border-right: 2px solid #bb0000;
+}
+
+#messagebody span.part-notice
+{
+  display: block;
+}
+
+#message-objects div,
+#messagebody span.part-notice
+{
+  margin: 8px;
+  min-height: 20px;
+  padding: 10px 10px 6px 46px;
+}
+
+#message-objects div a,
+#messagebody span.part-notice a
+{
+  color: #666666;
+  padding-left: 10px;
+}
+
+#message-objects div a:hover,
+#messagebody span.part-notice a:hover
+{
+  color: #333333;
+}
+
+#messagebody fieldset.image-attachment {
+  border: 0;
+  border-top: 1px solid #ccc;
+  margin: 1em 1em 0 1em;
+}
+
+#messagebody fieldset.image-attachment p > img
+{
+  max-width: 80%;
+}
+
+#messagebody legend.image-filename
+{
+  color: #999;
+  font-size: 0.9em;
+}
+
+#messagebody p.image-attachment
+{
+  margin: 0 1em;
+  padding: 1em;
+  border-top: 1px solid #ccc;
+}
+
+#messagebody p.image-attachment a.image-link
+{
+  float: left;
+  margin-right: 2em;
+  min-width: 160px;
+  min-height: 60px;
+  text-align: center;
+}
+
+#messagebody p.image-attachment .image-filename
+{
+  display: block;
+  font-weight: bold;
+  line-height: 1.6em;
+}
+
+#messagebody p.image-attachment .image-filesize
+{
+  font-size: 11px;
+  padding-right: 1em;
+}
+
+#messagebody p.image-attachment .attachment-links a
+{
+  margin-right: 0.6em;
+  color: #cc0000;
+  font-size: 11px;
+  text-decoration: none;
+}
+
+#messagebody p.image-attachment .attachment-links a:hover
+{
+  text-decoration: underline;
+}
+
+#messagelinks
+{
+  position: absolute;
+  top: 8px;
+  right: 10px;
+  height: 16px;
+  text-align: right;
+}
+
+#messageframe #messagelinks
+{
+  top: 2px;
+  right: 2px;
+}
+
+#compose-headers #openextwinlink
+{
+  position: absolute;
+  height: 15px;
+  top: 4px;
+  right: 2px;
+}
+
+#full-headers
+{
+  color: #666666;
+  text-align: center;
+  padding: 2px 6px;
+  border-bottom: 1px solid #ccc;
+  background-color: #EBEBEB;
+}
+
+.messageheaderbox #full-headers
+{
+  border-bottom: 0;
+}
+
+div.more-headers
+{
+  cursor: pointer;
+  height: 8px;
+  border-bottom: 0;
+}
+
+div.show-headers
+{
+  background: url(images/icons/down_small.gif?v=f368.105) no-repeat center;
+}
+
+div.hide-headers
+{
+  background: url(images/icons/up_small.gif?v=c56c.106) no-repeat center;
+}
+
+#headers-source
+{
+  margin: 2px 0;
+  padding: 0.5em;
+  height: 145px;
+  background: white;
+  overflow: auto;
+  font-size: 11px;
+  border: 1px solid #CCC;
+  display: none;
+  text-align: left;
+  color: #333;
+}
+
+
+/** message compose styles */
+
+#compose-container
+{
+  position: absolute;
+  top: 0;
+  left: 205px;
+  right: 0;
+  bottom: 0;
+  margin: 0;
+}
+
+#compose-div
+{
+  position: absolute;
+  top: 85px;
+  right: 0;
+  left: 0;
+  bottom: 0;
+  margin: 0;
+}
+
+#compose-body-div
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 175px;
+  border: 1px solid #999;
+}
+
+#compose-body-div .mce-tinymce {
+  border: 0 !important;
+}
+
+#compose-div .boxlistcontent
+{
+  bottom: 23px;
+}
+
+#compose-body
+{
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  margin: 0;
+  font-size: 9pt;
+  font-family: monospace;
+  resize: none;
+  border: none;
+  outline: none;
+}
+
+#compose-headers
+{
+  width: 100%;
+}
+
+#compose-headers td.editfield
+{
+  padding-right: 8px;
+  width: 95%;
+}
+
+#compose-headers td.top
+{
+  vertical-align: top;
+}
+
+#compose-headers td.title,
+#compose-subject td.title
+{
+  width: 80px !important;
+  font-size: 11px;
+  font-weight: bold;
+  padding-right: 10px;
+  white-space: nowrap;
+  color: #666;
+}
+
+#compose-headers td textarea,
+#compose-headers td input
+{
+  resize: none;
+  width: 100%;
+  border: 1px solid #999;
+}
+
+#compose-headers td textarea
+{
+  height: 32px;
+}
+
+input.from_address
+{
+  width: 80% !important;
+}
+
+#compose-cc,
+#compose-bcc,
+#compose-replyto,
+#compose-followupto
+{
+  display: none;
+}
+
+#compose-editorfooter
+{
+  position: absolute;
+  right: 5px;
+  bottom: 0;
+  text-align: right;
+  line-height: 20px;
+}
+
+#compose-editorfooter label
+{
+  font-size: 11px;
+  font-weight: bold;
+  color: #666;
+}
+
+#compose-buttons
+{
+  position: absolute;
+  left: 5px;
+  bottom: 1px;
+  width: auto;
+}
+
+#compose-contacts
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  width: 195px;
+  border: 1px solid #999;
+  background-color: #F9F9F9;
+}
+
+#compose-attachments
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  border: 1px solid #999;
+  background-color: #F9F9F9;
+}
+
+#compose-attachments.droptarget.hover
+{
+  background-color: #F0F0EE;
+  box-shadow: 0 0 5px 0 #999;
+  -moz-box-shadow: 0 0 5px 0 #999;
+  -o-box-shadow: 0 0 5px 0 #999;
+}
+
+#compose-attachments ul
+{
+  margin: 0px;
+  padding: 0px;
+  background-color: #FFF;
+  list-style-image: none;
+  list-style-type: none;
+}
+
+#compose-attachments ul li
+{
+  position: relative;
+  height: 18px;
+  line-height: 16px;
+  font-size: 11px;
+  padding: 2px 16px 1px 2px;
+  border-bottom: 1px solid #EBEBEB;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#compose-attachments li a.delete,
+#compose-attachments li a.cancelupload
+{
+  text-indent: -5000px;
+  width: 17px;
+  height: 16px;
+  padding-bottom: 2px;
+  display: inline-block;
+  text-decoration: none;
+  vertical-align: middle;
+  background-position: 0px -392px;
+}
+
+#compose-attachments li img
+{
+  vertical-align: middle;
+}
+
+#compose-attachments li span
+{
+  line-height: 18px;
+  vertical-align: middle;
+}
+
+#compose-attachments li a.drop {
+  background: url(images/icons/down_small.gif?v=f368.105) no-repeat center 8px;
+  width: 16px;
+  height: 22px;
+  cursor: pointer;
+  display: block;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+#upload-form,
+#attachment-form
+{
+  padding: 6px;
+}
+
+#upload-form div,
+#attachment-form div
+{
+  padding: 2px;
+}
+
+#upload-form div.buttons,
+#attachment-form div.buttons
+{
+  margin-top: 4px;
+}
+
+#quota
+{
+  position: absolute;
+  top: 3px;
+  right: 8px;
+  width: 100px;
+}
+
+#quotaimg
+{
+  position: absolute;
+  top: 3px;
+  right: 6px;
+  z-index: 101;
+}
+
+/* addressbook in compose - copy from addressbook.css */
+
+#directorylist
+{
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  background-color: #FFFFFF;
+}
+
+#directorylist li
+{
+  display: block;
+  font-size: 11px;
+  background: url(images/icons/folders.png?v=7c4f.5218) 5px -108px no-repeat;
+  border-bottom: 1px solid #EBEBEB;
+  white-space: nowrap;
+}
+
+#directorylist li a
+{
+  cursor: default;
+  display: block;
+  padding-left: 25px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  text-decoration: none;
+  white-space: nowrap;
+  height: 15px;
+}
+
+#directorylist li.selected
+{
+  background-color: #929292;
+  border-bottom: 1px solid #898989;
+}
+
+#directorylist li.selected a
+{
+  color: #FFF;
+  font-weight: bold;
+}
+
+#contacts-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#contacts-table tbody td
+{
+  cursor: default;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#contacts-table td span.email
+{
+  display: inline;
+  color: #ccc;
+  font-style: italic;
+  margin-left: 0.5em;
+}
+
+#abookcountbar
+{
+  margin-top: 4px;
+  margin-left: 4px;
+  position: absolute;
+  margin-right: 5px;
+  right: 0;
+  top: 0;
+}
+
+#abookactions
+{
+  position: absolute;
+  text-underline: none;
+}
+
+#abookactions a
+{
+  font-weight: bold;
+  line-height: 22px;
+  height: 22px;
+  width: auto;
+  margin: 0;
+  padding-left: 5px;
+  padding-right: 5px;
+  text-shadow: 1px 1px white;
+  background: url(images/icons/groupactions.png?v=6760.604) no-repeat right -70px;
+}
+
+#abookactions a.disabled
+{
+  color: #999;
+}
+
+#compose-contacts .searchbox
+{
+  top: 2px;
+  left: 7px;
+}
+
+#compose-contacts #directorylist
+{
+  width: 100%;
+  top: 23px;
+  position: absolute;
+  border-top: 1px solid #eee;
+}
+
+#compose-contacts #contacts-table
+{
+  top: 45px;
+  position: absolute;
+}
+
+/**** Styles for widescreen (3-column) view ****/
+
+.widescreen #mailview-top {
+  bottom: 0;
+  width: 400px;
+  height: auto;
+}
+
+.widescreen #mailview-bottom {
+  left: 412px;
+  top:0;
+  border: 1px solid #a3a3a3;
+}
+
+#messagelistheader,
+.widescreen #messagelistfooter #countcontrols,
+.widescreen .messagelist > thead,
+.widescreen .messagelist .branch,
+.widescreen table.fixedcopy {
+  display: none;
+}
+
+#messagelistcontainer {
+  top: 0;
+}
+
+.widescreen #messagelistcontainer {
+  top: 21px;
+  overflow-x: hidden;
+}
+
+.widescreen #mailpreviewframe {
+  top: 0;
+}
+
+.widescreen #messagelistheader {
+  display: block;
+  top: 0;
+  white-space: nowrap;
+  border-top: 0;
+  border-bottom: 1px solid #999;
+  height: 20px;
+}
+
+.widescreen #messagelistheader .listmenu {
+  display: inline-block;
+  vertical-align: middle;
+  line-height: 16px;
+  width: 15px;
+  background: url(images/messageicons.png?v=c493.2511) 4px -236px no-repeat;
+  cursor: pointer;
+  overflow: hidden;
+  text-indent: -5000px;
+  padding: 2px 4px;
+}
+
+.widescreen .messagelist td {
+  border-left: 0;
+  vertical-align: top;
+  padding: 3px 1px 1px !important;
+}
+
+.widescreen .messagelist td.subject {
+  width: 99%;
+  white-space: wrap;
+  position: relative; /* for span.date positioning in Firefox */
+}
+
+.widescreen .messagelist td.threads {
+  width: 14px;
+  vertical-align: middle;
+}
+
+.widescreen .messagelist td.flags {
+  width: 20px;
+}
+
+.widescreen .messagelist td.subject span {
+  line-height: 16px;
+}
+
+.widescreen .messagelist td.subject span.date {
+  right: 2px;
+  top: 3px;
+  position: absolute;
+  color: #666;
+}
+
+.widescreen .messagelist td.subject span.fromto {
+  padding-left: 18px;
+  display: block;
+  margin-right: 90px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #666;
+}
+
+.widescreen .messagelist tr.flagged td.subject span.date,
+.widescreen .messagelist tr.flagged td.subject span.fromto {
+  color: #ff0000;
+}
+
+.widescreen .messagelist tr.selected td.subject span.date,
+.widescreen .messagelist tr.selected td.subject span.fromto {
+  color: #fff;
+}
+
+.widescreen .messagelist tr.deleted td.subject span.date,
+.widescreen .messagelist tr.deleted td.subject span.fromto {
+  color: #ccc;
+}
+
+.widescreen .messagelist td.subject span.subject {
+  clear: both;
+  display: block;
+  font-size: 13px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.widescreen .messagelist td.flags span {
+  width: 20px;
+  height: 18px;
+  display: block;
+}
+
+.widescreen .messagelist td.flags span.flag {
+  cursor: pointer;
+}
+
+.widescreen .messagelist tr td.subject span.msgicon,
+.widescreen .messagelist tr td.subject span.unreadchildren {
+  width: 18px;
+  margin: 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/mail.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#messagetoolbar{position:absolute;top:47px;left:205px;right:10px;height:35px;min-width:650px;white-space:nowrap}.extwin #messagetoolbar{top:5px;left:20px}#messagetoolbar a,#messagetoolbar select{display:block;float:left;padding-right:10px}#messagetoolbar a.button,#messagetoolbar a.buttonPas{display:block;float:left;width:32px;height:32px;padding:0;margin:0 5px;overflow:hidden;background:url(images/mail_toolbar.png?v=2271.13035) 0 0 no-repeat transparent;opacity:.99}#messagetoolbar a.buttonPas{opacity:.35}#messagetoolbar a.button.selected{background-color:#ddd;margin-left:4px;margin-right:4px;margin-top:-1px;border:1px solid #ccc;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}#messagetoolbar a.checkmailSel{background-position:0 -32px}#messagetoolbar a.back{background-position:-32px 0}#messagetoolbar a.backSel{background-position:-32px -32px}#messagetoolbar a.compose{background-position:-64px 0}#messagetoolbar a.composeSel{background-position:-64px -32px}#messagetoolbar a.reply{background-position:-96px 0}#messagetoolbar a.replySel{background-position:-96px -32px}#messagetoolbar a.replyAll{background-position:-128px 0}#messagetoolbar a.replyAllSel{background-position:-128px -32px}#messagetoolbar a.forward{background-position:-160px 0}#messagetoolbar a.forwardSel{background-position:-160px -32px}#messagetoolbar a.delete{background-position:-192px 0}#messagetoolbar a.deleteSel{background-position:-192px -32px}#messagetoolbar a.print{background-position:-256px 0}#messagetoolbar a.printSel{background-position:-256px -32px}#messagetoolbar a.markmessage{background-position:-288px 0}#messagetoolbar a.messagemenu{background-position:-320px 0;width:34px}#messagetoolbar a.spellcheck{background-position:-418px 0}#messagetoolbar a.spellcheckSel{background-position:-418px -32px}#messagetoolbar a.attach{background-position:-386px 0}#messagetoolbar a.attachSel{background-position:-386px -32px}#messagetoolbar a.insertsig{background-position:-482px 0}#messagetoolbar a.insertsigSel{background-position:-482px -32px}#messagetoolbar a.savedraft{background-position:-354px 0}#messagetoolbar a.savedraftSel{background-position:-354px -32px}#messagetoolbar a.send{background-position:-450px 0}#messagetoolbar a.sendSel{background-position:-450px -32px}#messagetoolbar a.move{background-position:-580px 0}#messagetoolbar a.moveSel{background-position:-580px -32px}#messagetoolbar a.download{background-position:-514px 0}#messagetoolbar a.downloadSel{background-position:-514px -32px}#messagetoolbar a.responses{background-position:-548px 0}#messagetoolbar a.encrypt{background-position:-612px 0}#messagetoolbar a.encryptSel{background-position:-612px -32px}#messagemenu li a.active:hover,#attachmentmenu li a.active:hover,#markmessagemenu li a.active:hover{color:#fff;background-color:#c00}#messagemenu li a,#attachmentmenu li a{background:url(images/messageactions.png?v=8c64.2615) no-repeat 7px 0;background-position:7px 20px}#messagemenu li a.printlink{background-position:7px 1px}#messagemenu li a.downloadlink,#attachmentmenu li a.downloadlink{background-position:7px -17px}#attachmentmenu li a.renamelink{background-position:6px -69px}#messagemenu li a.sourcelink{background-position:7px -34px}#messagemenu li a.openlink,#attachmentmenu li a.openlink{background-position:7px -52px}#messagemenu li a.editlink{background-position:6px -70px}#messagemenu li a.movelink{background-position:6px -160px}#messagemenu li a.copylink{background-position:6px -142px}#markmessagemenu li a,#compose-attachments li a.delete,#compose-attachments li a.cancelupload{background:url(images/messageicons.png?v=c493.2511) no-repeat}#markmessagemenu li a.readlink{background-position:7px -51px}#markmessagemenu li a.unreadlink{background-position:7px -119px}#markmessagemenu li a.flaggedlink{background-position:7px -153px}#markmessagemenu li a.unflaggedlink{background-position:7px -136px}#searchfilter{white-space:nowrap;position:absolute;right:198px;vertical-align:middle}#searchfilter label{font-size:11px}#mailleftcontainer{position:absolute;top:0;left:0;bottom:0;width:160px}#mailrightcontainer{position:absolute;top:0;left:170px;bottom:0;right:0;min-width:600px}#mailrightcontent{position:absolute;top:0;left:0;right:0;bottom:0}#messagepartcontainer{position:absolute;top:0;left:170px;right:0;bottom:0}#messagepartheader{position:absolute;top:0;bottom:0;left:0;width:160px;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#messagepartheader table{width:100%;table-layout:fixed}#messagepartheader table td{text-overflow:ellipsis}#messagepartheader table td.title{width:60px}#mailcontframe{position:absolute;width:100%;top:0;bottom:0;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}#mailpreviewframe{position:absolute;right:0;top:205px;bottom:0;border:1px solid #999;background-color:#f9f9f9;display:none}#messagecontframe{position:relative;top:0;left:0;right:0;bottom:0;width:100%;height:100%;min-height:100%}#messagepartframe{width:100%;height:100%;min-height:100%;border:1px solid #999;background-color:#fff}#mailboxlist-container{position:absolute;top:0;left:0;width:100%;bottom:0;border:1px solid #999;background-color:#f9f9f9}#mailboxlist{position:relative;height:auto;margin:0;padding:0;list-style-image:none;list-style-type:none;overflow:hidden;white-space:nowrap;background-color:#FFF}#mailboxlist li.unread{font-weight:bold}#mailboxlist li.recent>a{color:#06f}#listcontrols{position:relative;white-space:nowrap;line-height:22px;padding:0 4px;width:auto;min-width:300px}#listcontrols a,#listcontrols span{display:block;float:left;font-size:11px}#listcontrols span input{vertical-align:middle}#listcontrols a.button,#listcontrols a.buttonPas{display:block;float:left;width:15px;height:15px;padding:0;margin-top:4px;margin-right:2px;overflow:hidden;background:url(images/mail_footer.png?v=1c4b.774) 0 0 no-repeat transparent;opacity:.99}#listcontrols a.buttonPas{opacity:.35}#listcontrols a.all{background-position:-30px 0}#listcontrols a.allsel{background-position:-30px -15px}#listcontrols a.page{background-position:-135px 0}#listcontrols a.pagesel{background-position:-135px -15px}#listcontrols a.unread{background-position:-45px 0}#listcontrols a.unreadsel{background-position:-45px -15px}#listcontrols a.invert{background-position:-60px 0}#listcontrols a.invertsel{background-position:-60px -15px}#listcontrols a.none{background-position:-75px 0}#listcontrols a.nonesel{background-position:-75px -15px}#listcontrols a.expand-all{background-position:-90px 0}#listcontrols a.expand-allsel{background-position:-90px -15px}#listcontrols a.collapse-all{background-position:-105px 0}#listcontrols a.collapse-allsel{background-position:-105px -15px}#listcontrols a.expand-unread{background-position:-120px 0}#listcontrols a.expand-unreadsel{background-position:-120px -15px}#countcontrols{position:absolute;top:4px;right:4px;white-space:nowrap;font-size:11px;line-height:14px}#countcontrols a.button,#countcontrols a.buttonPas{float:right}body.messagelist{margin:0;background-color:#f9f9f9}table.messagelist{width:100%;display:table;table-layout:fixed;border-spacing:0;z-index:1}table.messagelist.fixedcopy{z-index:2}.messagelist thead tr th,.messagelist thead tr td{height:20px;padding:0 4px 0 2px;vertical-align:middle;border-bottom:1px solid #999;color:#333;background:url(images/listheader.gif?v=ab42.314) top left repeat-x #CCC;font-size:11px;font-weight:bold;text-align:left}.messagelist thead tr>.sortedASC,.messagelist thead tr>.sortedDESC{background-position:0 -26px}.messagelist thead tr>.sortedASC a{background:url(images/icons/sort.gif?v=92aa.144) right 0 no-repeat}.messagelist thead tr>.sortedDESC a{background:url(images/icons/sort.gif?v=92aa.144) right -14px no-repeat}.messagelist thead tr a{display:block;width:auto !important;width:100%;color:#333;text-decoration:none}.messagelist thead tr>.size.sortedASC a,.messagelist thead tr>.size.sortedDESC a{padding-right:18px}.messagelist thead tr>.subject{padding-left:18px;width:99%}.messagelist tbody tr th,.messagelist tbody tr td{height:20px;padding:0;font-size:11px;overflow:hidden;vertical-align:middle;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;border-bottom:1px solid #ebebeb;cursor:default;outline:0}.messagelist tbody tr td a{color:#000;text-decoration:none;white-space:nowrap;cursor:inherit}.messagelist td img{vertical-align:middle;display:inline-block}.messagelist tbody tr td.flag,.messagelist tbody tr td.status,.messagelist tbody tr td.subject span.status{cursor:pointer}.messagelist tr .flag span,.messagelist tr .status span,.messagelist tr .attachment span,.messagelist tr .priority span{display:block;width:15px;text-indent:-5000px;overflow:hidden}.messagelist tr td div.collapsed,.messagelist tr td div.expanded,.messagelist tr>.threads .listmenu,.messagelist tr .attachment span.attachment,.messagelist tr .attachment span.report,.messagelist tr .attachment span.encrypted,.messagelist tr>.priority span.priority,.messagelist tr>.priority span.prio1,.messagelist tr>.priority span.prio2,.messagelist tr>.priority span.prio3,.messagelist tr>.priority span.prio4,.messagelist tr>.priority span.prio5,.messagelist tr .flag span.flagged,.messagelist tr .flag span.unflagged,.messagelist tr:hover .flag span.unflagged,.messagelist tr>.status span.status,.messagelist tr>.status span.msgicon,.messagelist tr>.status span.deleted,.messagelist tr>.status span.unread,.messagelist tr>.status span.unreadchildren,.messagelist tr>.subject span.msgicon,.messagelist tr>.subject span.deleted,.messagelist tr>.subject span.unread,.messagelist tr>.subject span.replied,.messagelist tr>.subject span.forwarded,.messagelist tr>.subject span.unreadchildren{display:inline-block;vertical-align:middle;height:17px;width:15px;background:url(images/messageicons.png?v=c493.2511) center no-repeat}.messagelist tr .attachment span.attachment{background-position:0 -170px}.messagelist tr .attachment span.report{background-position:0 -255px}.messagelist tr .attachment span.encrypted{background-position:0 -418px}.messagelist tr>.priority span.priority{background-position:0 -309px}.messagelist tr>.priority span.prio5{background-position:0 -358px}.messagelist tr>.priority span.prio4{background-position:0 -340px}.messagelist tr>.priority span.prio3{background-position:0 -324px}.messagelist tr>.priority span.prio2{background-position:0 -309px}.messagelist tr>.priority span.prio1{background-position:0 -290px}.messagelist tr .flag span.flagged{background-position:0 -153px}.messagelist tr:hover .flag span.unflagged{background-position:0 -136px}.messagelist tr.flaggedroot .flag span,.messagelist tr.flaggedroot .flag span.unflagged{background-position:0 -136px}.messagelist tr>.subject span.msgicon,.messagelist tr>.subject span.unreadchildren{background-position:0 -51px;margin:0 2px}.messagelist tr>.subject span.replied{background-position:0 -85px}.messagelist tr>.subject span.forwarded{background-position:0 -68px}.messagelist tr>.subject span.replied.forwarded{background-position:0 -102px}.messagelist tr>.status span.msgicon,.messagelist tr .flag span.unflagged,.messagelist tr>.status span.unreadchildren{background-position:0 18px}.messagelist tr>.status span.msgicon:hover{background-position:0 -272px}.messagelist tr>.status span.deleted,.messagelist tr>.subject span.deleted{background-position:0 -187px}.messagelist tr>.status span.status,.messagelist tr>.status span.unread,.messagelist tr>.subject span.unread{background-position:0 -119px}.messagelist tr td div.collapsed{background-position:0 -221px;cursor:pointer}.messagelist tr td div.expanded{background-position:0 -204px;cursor:pointer}.messagelist tr>.threads .listmenu{background-position:0 -238px;cursor:pointer;overflow:hidden;text-indent:-5000px;display:block}.messagelist tbody tr td.subject{width:99%}.messagelist tbody tr td.subject a{cursor:default;vertical-align:middle}.messagelist tbody tr.unroot td.subject a{text-decoration:underline}.messagelist tr>.attachment,.messagelist tr>.threads,.messagelist tr>.status,.messagelist tr>.flag,.messagelist tr>.priority{width:17px;padding:0 0 0 2px}.messagelist tr>.size{width:60px;text-align:right;padding:0 2px}.messagelist tr>.fromto,.messagelist tr>.from,.messagelist tr>.to,.messagelist tr>.cc,.messagelist tr>.replyto{width:180px;padding:0 2px}.messagelist tr>.date{width:135px;padding:0 2px}.messagelist tr>.folder{width:135px}.messagelist tr>.hidden{display:none}.messagelist tr.message{background-color:#FFF}.messagelist tr.unread{font-weight:bold;background-color:#fff}.messagelist tr.flagged td,.messagelist tr.flagged td a{color:#c00}.messagelist thead tr th:first-child,.messagelist thead tr td:first-child,.messagelist tbody tr td:first-child{border-left:0;padding-left:6px}.messagelist tbody tr.focused>td:first-child{border-left:2px solid #d4d4d4;padding-left:4px}.messagelist tbody tr.selected.focused>td:first-child{border-left:2px solid #ccc;padding-left:5px}.messagelist tr.selected td{color:#fff;background-color:#929292}.messagelist.focus tr.selected td{background-color:#c33}.messagelist tr.selected td a{color:#fff}.messagelist tr.deleted td,.messagelist tr.deleted td a{color:#ccc}#listmenu{padding:6px;max-height:none}#listmenu legend{color:#999}#listmenu fieldset{border:1px solid #999;margin:0 5px;float:left}#listmenu div{padding:8px 0 3px 0;text-align:center;clear:both}td span.branch div{float:left;height:16px}td span.branch div.tree{height:17px;width:15px;background:url(images/tree.gif?v=9b73.92) 0 0 no-repeat}td span.branch div.l1{background-position:0 0}td span.branch div.l2{background-position:-30px 0}td span.branch div.l3{background-position:-15px 0}#messageframe{position:absolute;top:0;left:180px;right:0;bottom:0;border:1px solid #999;background-color:#FFF;overflow:auto;z-index:1}.extwin #messageframe{left:0}div.messageheaderbox{margin:-14px 8px 0 8px;border:1px solid #ccc}table.headers-table{width:100%;background-color:#ebebeb}#messagebody #full-headers,#messagebody table.headers-table{width:auto;margin:6px 8px;background-color:#f4f4f4}#messagebody.mailvelope{padding:10px 8px}#messagebody table.headers-table{margin:16px 6px 6px 6px}div.message-partheaders+div.message-part{border-top:0;padding-top:4px}table.headers-table tr td{font-size:11px;border-bottom:1px solid #fff}table.headers-table tr td.header-title{width:1%;color:#666;font-weight:bold;text-align:right;white-space:nowrap;padding:0 4px 0 8px}table.headers-table tr td.header{width:99%}table.headers-table tr td.subject{font-weight:bold}table.headers-table tr td.header span{white-space:nowrap}#attachment-list{margin:0;padding:0 4px 0 8px;min-height:16px;list-style-image:none;list-style-type:none;background:url(images/icons/attachment.png?v=ee4e.516) 4px 2px no-repeat #dfdfdf}#messageframe #attachment-list{border-bottom:1px solid #ccc}.messageheaderbox #attachment-list{border-top:1px solid #ccc}#attachment-list:after{content:".";display:block;height:0;font-size:0;clear:both;visibility:hidden}#attachment-list li{float:left;height:18px;font-size:11px;padding:2px 0 0 15px;white-space:nowrap}#attachment-list li a{text-decoration:none}#attachment-list li a:hover{text-decoration:underline}#attachment-list li a.drop{background:url(images/icons/down_small.gif?v=f368.105) no-repeat center 6px;width:12px;height:16px;cursor:pointer;padding:0;margin-left:3px;display:inline-block;vertical-align:middle}#messagebody{position:relative;padding-bottom:10px;background-color:#fff}div.message-part,div.message-htmlpart{padding:10px 8px;border-top:1px solid #ccc}#messagebody div:first-child{border-top:0}div.message-part a,div.message-htmlpart a{color:#00c}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part span.sig{color:#666}div.message-part blockquote{color:blue;border-left:2px solid blue;border-right:2px solid blue;background-color:#f6f6f6;margin:2px 0;padding:0 .4em;overflow:hidden;text-overflow:ellipsis}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}#messagebody span.part-notice{display:block}#message-objects div,#messagebody span.part-notice{margin:8px;min-height:20px;padding:10px 10px 6px 46px}#message-objects div a,#messagebody span.part-notice a{color:#666;padding-left:10px}#message-objects div a:hover,#messagebody span.part-notice a:hover{color:#333}#messagebody fieldset.image-attachment{border:0;border-top:1px solid #ccc;margin:1em 1em 0 1em}#messagebody fieldset.image-attachment p>img{max-width:80%}#messagebody legend.image-filename{color:#999;font-size:.9em}#messagebody p.image-attachment{margin:0 1em;padding:1em;border-top:1px solid #ccc}#messagebody p.image-attachment a.image-link{float:left;margin-right:2em;min-width:160px;min-height:60px;text-align:center}#messagebody p.image-attachment .image-filename{display:block;font-weight:bold;line-height:1.6em}#messagebody p.image-attachment .image-filesize{font-size:11px;padding-right:1em}#messagebody p.image-attachment .attachment-links a{margin-right:.6em;color:#c00;font-size:11px;text-decoration:none}#messagebody p.image-attachment .attachment-links a:hover{text-decoration:underline}#messagelinks{position:absolute;top:8px;right:10px;height:16px;text-align:right}#messageframe #messagelinks{top:2px;right:2px}#compose-headers #openextwinlink{position:absolute;height:15px;top:4px;right:2px}#full-headers{color:#666;text-align:center;padding:2px 6px;border-bottom:1px solid #ccc;background-color:#ebebeb}.messageheaderbox #full-headers{border-bottom:0}div.more-headers{cursor:pointer;height:8px;border-bottom:0}div.show-headers{background:url(images/icons/down_small.gif?v=f368.105) no-repeat center}div.hide-headers{background:url(images/icons/up_small.gif?v=c56c.106) no-repeat center}#headers-source{margin:2px 0;padding:.5em;height:145px;background:white;overflow:auto;font-size:11px;border:1px solid #CCC;display:none;text-align:left;color:#333}#compose-container{position:absolute;top:0;left:205px;right:0;bottom:0;margin:0}#compose-div{position:absolute;top:85px;right:0;left:0;bottom:0;margin:0}#compose-body-div{position:absolute;top:0;left:0;bottom:0;right:175px;border:1px solid #999}#compose-body-div .mce-tinymce{border:0 !important}#compose-div .boxlistcontent{bottom:23px}#compose-body{position:absolute;left:0;right:0;top:0;bottom:0;margin:0;font-size:9pt;font-family:monospace;resize:none;border:0;outline:0}#compose-headers{width:100%}#compose-headers td.editfield{padding-right:8px;width:95%}#compose-headers td.top{vertical-align:top}#compose-headers td.title,#compose-subject td.title{width:80px !important;font-size:11px;font-weight:bold;padding-right:10px;white-space:nowrap;color:#666}#compose-headers td textarea,#compose-headers td input{resize:none;width:100%;border:1px solid #999}#compose-headers td textarea{height:32px}input.from_address{width:80% !important}#compose-cc,#compose-bcc,#compose-replyto,#compose-followupto{display:none}#compose-editorfooter{position:absolute;right:5px;bottom:0;text-align:right;line-height:20px}#compose-editorfooter label{font-size:11px;font-weight:bold;color:#666}#compose-buttons{position:absolute;left:5px;bottom:1px;width:auto}#compose-contacts{position:absolute;top:0;left:0;bottom:0;width:195px;border:1px solid #999;background-color:#f9f9f9}#compose-attachments{position:absolute;top:0;left:0;right:0;bottom:0;border:1px solid #999;background-color:#f9f9f9}#compose-attachments.droptarget.hover{background-color:#f0f0ee;box-shadow:0 0 5px 0 #999;-moz-box-shadow:0 0 5px 0 #999;-o-box-shadow:0 0 5px 0 #999}#compose-attachments ul{margin:0;padding:0;background-color:#FFF;list-style-image:none;list-style-type:none}#compose-attachments ul li{position:relative;height:18px;line-height:16px;font-size:11px;padding:2px 16px 1px 2px;border-bottom:1px solid #ebebeb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}#compose-attachments li a.delete,#compose-attachments li a.cancelupload{text-indent:-5000px;width:17px;height:16px;padding-bottom:2px;display:inline-block;text-decoration:none;vertical-align:middle;background-position:0 -392px}#compose-attachments li img{vertical-align:middle}#compose-attachments li span{line-height:18px;vertical-align:middle}#compose-attachments li a.drop{background:url(images/icons/down_small.gif?v=f368.105) no-repeat center 8px;width:16px;height:22px;cursor:pointer;display:block;position:absolute;right:0;top:0}#upload-form,#attachment-form{padding:6px}#upload-form div,#attachment-form div{padding:2px}#upload-form div.buttons,#attachment-form div.buttons{margin-top:4px}#quota{position:absolute;top:3px;right:8px;width:100px}#quotaimg{position:absolute;top:3px;right:6px;z-index:101}#directorylist{list-style:none;margin:0;padding:0;background-color:#fff}#directorylist li{display:block;font-size:11px;background:url(images/icons/folders.png?v=7c4f.5218) 5px -108px no-repeat;border-bottom:1px solid #ebebeb;white-space:nowrap}#directorylist li a{cursor:default;display:block;padding-left:25px;padding-top:2px;padding-bottom:2px;text-decoration:none;white-space:nowrap;height:15px}#directorylist li.selected{background-color:#929292;border-bottom:1px solid #898989}#directorylist li.selected a{color:#FFF;font-weight:bold}#contacts-table{width:100%;table-layout:fixed}#contacts-table tbody td{cursor:default;text-overflow:ellipsis;-o-text-overflow:ellipsis}#contacts-table td span.email{display:inline;color:#ccc;font-style:italic;margin-left:.5em}#abookcountbar{margin-top:4px;margin-left:4px;position:absolute;margin-right:5px;right:0;top:0}#abookactions{position:absolute;text-underline:none}#abookactions a{font-weight:bold;line-height:22px;height:22px;width:auto;margin:0;padding-left:5px;padding-right:5px;text-shadow:1px 1px white;background:url(images/icons/groupactions.png?v=6760.604) no-repeat right -70px}#abookactions a.disabled{color:#999}#compose-contacts .searchbox{top:2px;left:7px}#compose-contacts #directorylist{width:100%;top:23px;position:absolute;border-top:1px solid #eee}#compose-contacts #contacts-table{top:45px;position:absolute}.widescreen #mailview-top{bottom:0;width:400px;height:auto}.widescreen #mailview-bottom{left:412px;top:0;border:1px solid #a3a3a3}#messagelistheader,.widescreen #messagelistfooter #countcontrols,.widescreen .messagelist>thead,.widescreen .messagelist .branch,.widescreen table.fixedcopy{display:none}#messagelistcontainer{top:0}.widescreen #messagelistcontainer{top:21px;overflow-x:hidden}.widescreen #mailpreviewframe{top:0}.widescreen #messagelistheader{display:block;top:0;white-space:nowrap;border-top:0;border-bottom:1px solid #999;height:20px}.widescreen #messagelistheader .listmenu{display:inline-block;vertical-align:middle;line-height:16px;width:15px;background:url(images/messageicons.png?v=c493.2511) 4px -236px no-repeat;cursor:pointer;overflow:hidden;text-indent:-5000px;padding:2px 4px}.widescreen .messagelist td{border-left:0;vertical-align:top;padding:3px 1px 1px !important}.widescreen .messagelist td.subject{width:99%;white-space:wrap;position:relative}.widescreen .messagelist td.threads{width:14px;vertical-align:middle}.widescreen .messagelist td.flags{width:20px}.widescreen .messagelist td.subject span{line-height:16px}.widescreen .messagelist td.subject span.date{right:2px;top:3px;position:absolute;color:#666}.widescreen .messagelist td.subject span.fromto{padding-left:18px;display:block;margin-right:90px;overflow:hidden;text-overflow:ellipsis;color:#666}.widescreen .messagelist tr.flagged td.subject span.date,.widescreen .messagelist tr.flagged td.subject span.fromto{color:red}.widescreen .messagelist tr.selected td.subject span.date,.widescreen .messagelist tr.selected td.subject span.fromto{color:#fff}.widescreen .messagelist tr.deleted td.subject span.date,.widescreen .messagelist tr.deleted td.subject span.fromto{color:#ccc}.widescreen .messagelist td.subject span.subject{clear:both;display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis}.widescreen .messagelist td.flags span{width:20px;height:18px;display:block}.widescreen .messagelist td.flags span.flag{cursor:pointer}.widescreen .messagelist tr td.subject span.msgicon,.widescreen .messagelist tr td.subject span.unreadchildren{width:18px;margin:0}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/meta.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+{
+	"name": "Classic",
+	"author": "The Roundcube Dev Team",
+	"license": "Creative Commons Attribution-ShareAlike",
+	"license-url": "http://creativecommons.org/licenses/by-sa/3.0/"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/print.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,225 @@
+/***** Roundcube|Mail message print styles *****/
+
+body
+{
+  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+  background-color: #ffffff;
+  color: #000000;
+  margin: 2mm;
+}
+
+body, td, th, div, p
+{
+  font-size: 9pt;
+  color: #000000;
+}
+
+h3
+{
+  font-size: 18px;
+  color: #000000;
+}
+
+a, a:active, a:visited
+{
+  color: #000000;
+}
+
+body > #logo
+{
+  float: right;
+  margin: 0 5mm 3mm 5mm;
+}
+
+table.headers-table
+{
+  table-layout: fixed;
+  margin-top: 14px;
+}
+
+table.headers-table tr td
+{
+  font-size: 9pt;
+}
+
+table.headers-table td.header-title
+{
+  color: #666666;
+  font-weight: bold;
+  text-align: right;
+  vertical-align: top;
+  padding-right: 4mm;
+  white-space: nowrap;
+}
+
+table.headers-table tr td.subject
+{
+  width: 90%;
+  font-weight: bold;
+}
+
+#attachment-list
+{
+  margin-top: 3mm;
+  padding-top: 3mm;
+  border-top: 1pt solid #cccccc;
+}
+
+#attachment-list li
+{
+  font-size: 9pt;
+}
+
+#attachment-list li a
+{
+  text-decoration: none;
+}
+
+#attachment-list li a:hover
+{
+  text-decoration: underline;
+}
+
+#messagebody
+{
+  position: relative;
+  margin-top: 5mm;
+  border-top: none;
+}
+
+div.message-part
+{
+  padding: 2mm;
+  margin-top: 5mm;
+  margin-bottom: 5mm;
+  border-top: 1pt solid #cccccc;
+}
+
+div.message-part a
+{
+  color: #0000CC;
+}
+
+div.message-part div.pre
+{
+  margin: 0;
+  padding: 0;
+  font-family: monospace;
+  font-size: 12px;
+}
+
+div.message-part blockquote
+{
+  color: blue;
+  border-left: 2px solid blue;
+  border-right: 2px solid blue;
+  background-color: #F6F6F6;
+  margin: 2px 0;
+  padding: 0 0.4em;
+}
+
+div.message-part blockquote blockquote
+{
+  color: green;
+  border-left: 2px solid green;
+  border-right: 2px solid green;
+}
+
+div.message-part blockquote blockquote blockquote
+{
+  color: #990000;
+  border-left: 2px solid #bb0000;
+  border-right: 2px solid #bb0000;
+}
+
+p.image-attachment
+{
+  position: relative;
+  padding: 1em;
+  border-top: 1px solid #ccc;
+}
+
+p.image-attachment a.image-link
+{
+  float: left;
+  display: block;
+  margin-right: 2em;
+  min-width: 160px;
+  min-height: 60px;
+  text-align: center;
+}
+
+p.image-attachment .image-filename
+{
+  display: block;
+  line-height: 1.6em;
+}
+
+p.image-attachment .attachment-links
+{
+  display: none;
+}
+
+/* contact print */
+#contact-details fieldset {
+	color: #666;
+	border: 1px solid #999;
+	margin-top: 5px;
+}
+
+#contact-details fieldset.contactfieldgroup {
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+
+#contact-details div.row {
+	padding: 2px 0;
+}
+
+#contact-details .contactfieldlabel {
+	display: inline-block;
+	vertical-align: top;
+	width: 150px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#contact-details .contactfieldcontent {
+	display: inline-block;
+	vertical-align: top;
+	font-weight: bold;
+}
+
+#contact-details #contactphoto {
+	float: left;
+	margin: 5px 15px 5px 3px;
+	width: 112px;
+	border: 0;
+	padding: 0;
+}
+
+#contact-details #contactpic {
+	width: 112px;
+	background: white;
+}
+
+#contact-details #contactpic img {
+	max-width: 112px;
+	visibility: inherit;
+}
+
+#contact-details #contacthead {
+	border: 0;
+	margin: 0 16em 0 0;
+	padding: 0;
+}
+
+#contact-details #contacthead > legend {
+	display: none;
+}
+
+#contact-details #contacthead .names span.namefield {
+	font-size: 140%;
+	font-weight: bold;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/print.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;margin:2mm}body,td,th,div,p{font-size:9pt;color:#000}h3{font-size:18px;color:#000}a,a:active,a:visited{color:#000}body>#logo{float:right;margin:0 5mm 3mm 5mm}table.headers-table{table-layout:fixed;margin-top:14px}table.headers-table tr td{font-size:9pt}table.headers-table td.header-title{color:#666;font-weight:bold;text-align:right;vertical-align:top;padding-right:4mm;white-space:nowrap}table.headers-table tr td.subject{width:90%;font-weight:bold}#attachment-list{margin-top:3mm;padding-top:3mm;border-top:1pt solid #ccc}#attachment-list li{font-size:9pt}#attachment-list li a{text-decoration:none}#attachment-list li a:hover{text-decoration:underline}#messagebody{position:relative;margin-top:5mm;border-top:0}div.message-part{padding:2mm;margin-top:5mm;margin-bottom:5mm;border-top:1pt solid #ccc}div.message-part a{color:#00c}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part blockquote{color:blue;border-left:2px solid blue;border-right:2px solid blue;background-color:#f6f6f6;margin:2px 0;padding:0 .4em}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}p.image-attachment{position:relative;padding:1em;border-top:1px solid #ccc}p.image-attachment a.image-link{float:left;display:block;margin-right:2em;min-width:160px;min-height:60px;text-align:center}p.image-attachment .image-filename{display:block;line-height:1.6em}p.image-attachment .attachment-links{display:none}#contact-details fieldset{color:#666;border:1px solid #999;margin-top:5px}#contact-details fieldset.contactfieldgroup{border:0;padding:0;margin:0}#contact-details div.row{padding:2px 0}#contact-details .contactfieldlabel{display:inline-block;vertical-align:top;width:150px;overflow:hidden;text-overflow:ellipsis}#contact-details .contactfieldcontent{display:inline-block;vertical-align:top;font-weight:bold}#contact-details #contactphoto{float:left;margin:5px 15px 5px 3px;width:112px;border:0;padding:0}#contact-details #contactpic{width:112px;background:white}#contact-details #contactpic img{max-width:112px;visibility:inherit}#contact-details #contacthead{border:0;margin:0 16em 0 0;padding:0}#contact-details #contacthead>legend{display:none}#contact-details #contacthead .names span.namefield{font-size:140%;font-weight:bold}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/safari.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+body
+{
+  height: 100%;
+}
+
+html>body*#messagelist[id$="messagelist"]:not([class="none"]) { width: 99.8%; }
+html>body*#messagelist[id$="messagelist"]:not([class="none"]) tr td.flag,
+html>body*#messagelist[id$="messagelist"]:not([class="none"]) tr td.icon { width: 20px; }
+html>body*input[type$="file"]:not([class="none"]) { background-color: transparent; border: 0; }
+
+div.message-part pre,
+div.message-htmlpart pre,
+div.message-part div.pre
+{
+  word-wrap: break-word;
+}
+
+#messagelist thead tr td,
+#messagelist tbody tr td
+{
+  height: 18px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/safari.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+body{height:100%}html>body*#messagelist[id$="messagelist"]:not([class="none"]){width:99.8%}html>body*#messagelist[id$="messagelist"]:not([class="none"]) tr td.flag,html>body*#messagelist[id$="messagelist"]:not([class="none"]) tr td.icon{width:20px}html>body*input[type$="file"]:not([class="none"]){background-color:transparent;border:0}div.message-part pre,div.message-htmlpart pre,div.message-part div.pre{word-wrap:break-word}#messagelist thead tr td,#messagelist tbody tr td{height:18px}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/settings.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,281 @@
+/***** Roundcube|Mail settings task styles *****/
+
+#rcmfd_timezone
+{
+  width: 300px;
+}
+
+#folder-manager.droptarget
+{
+  border: 1px solid #CC3333;
+  background-color: #FFFFA6;
+}
+
+#folderlist-title a.iconbutton.search {
+  background: url(images/icons/glass.png?v=dcbc.302) no-repeat 0 0;
+  cursor: pointer;
+  position: absolute;
+  right: 4px;
+  top: 2px;
+  width: 16px;
+  text-indent: 50000px;
+}
+
+.listsearchbox select {
+  width: 100%;
+  margin: 1px 0;
+}
+
+#identities-table,
+#sections-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#identities-table tbody tr td,
+#sections-table tbody tr td
+{
+  cursor: default;
+}
+
+#identities-table tbody tr.readonly td
+{
+  font-style: italic;
+}
+
+#subscription-table li.root
+{
+  font-size: 5%;
+  line-height: 5px;
+  height: 5px;
+  padding: 2px;
+}
+
+#subscription-table li input {
+  position: absolute;
+  right: 0;
+  top: 2px;
+}
+
+#subscription-table li a {
+  padding-right: 20px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+#folder-box,
+#prefs-box,
+#identity-box
+{
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  overflow: hidden;
+  background-color: #F2F2F2;
+}
+
+#identity-details table td.title,
+#response-details table td.title,
+#folder-details table td.title
+{
+  font-weight: bold;
+  text-align: right;
+  width: 1%;
+  white-space: nowrap;
+}
+
+#response-details table td.title
+{
+  text-align: left;
+  vertical-align: top;
+  width: 140px;
+  padding-top: 5px;
+}
+
+#bottomboxes
+{
+  position: absolute;
+  width: 600px;
+  height: 95px;
+  left: 0;
+  bottom: 0;
+}
+
+#identities-list,
+#folder-manager,
+#sectionslist
+{
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  border: 1px solid #999999;
+  background-color: #F9F9F9;
+  overflow: hidden;
+}
+
+body.iframe,
+#prefs-frame,
+#folder-frame,
+#identity-frame
+{
+  background-color: #F2F2F2;
+  border: none;
+  min-height: 100%; /* Chrome 14 bug */
+}
+
+#prefs-title,
+#folder-title,
+#identity-title
+{
+  /* fixes issue where tabs were overlapping box title when scrolling */
+  z-index: 10;
+}
+
+#formfooter
+{
+  width: 100%;
+}
+
+#formfooter .footerleft
+{
+  padding: 0 2px 10px;
+  white-space: nowrap;
+  float: left;
+}
+
+#formfooter .footerright
+{
+  padding: 0 2px 10px;
+  white-space: nowrap;
+  text-align: right;
+  float: right;
+}
+
+#formfooter .footerindent
+{
+  padding: 10px 0;
+  margin-left: 155px;
+}
+
+#quota
+{
+  position: absolute;
+  top: 3px;
+  right: 8px;
+  width: 100px;
+}
+
+#quotaimg
+{
+  position: absolute;
+  top: 3px;
+  right: 6px;
+  z-index: 101;
+}
+
+#rcmfd_signature
+{
+  font-family: monospace;
+}
+
+div.readtext
+{
+  width: 42em;
+  padding: 20px;
+}
+
+#license
+{
+  min-height: 200px;
+  padding-bottom: 2em;
+  background: url(images/watermark.gif?v=61d5.11081) no-repeat center;
+}
+
+#license .sysname
+{
+  font-size: 18px;
+  font-weight: bold;
+}
+
+#license .copyright
+{
+  font-weight: bold;
+}
+
+#license .license,
+#license .links
+{
+  margin-top: 1.5em;
+}
+
+.skinselection
+{
+  display: block;
+  white-space: nowrap;
+  margin: 0.3em 0;
+}
+
+.skinselection span
+{
+  display: inline-block;
+  vertical-align: middle;
+  padding-right: 1em;
+}
+
+.skinselection .skinname
+{
+  font-weight: bold;
+}
+
+.skinselection .skinlicense,
+.skinselection .skinlicense a
+{
+  color: #999;
+  font-style: italic;
+  text-decoration: none;
+}
+
+.skinselection .skinlicense a:hover
+{
+  text-decoration: underline;
+}
+
+img.skinthumbnail
+{
+  width: 64px;
+  height: 64px;
+  border: 1px solid #999;
+  background: #fff;
+}
+
+#pluginlist
+{
+  border: 1px solid #999;
+  width: 100%;
+}
+
+#pluginlist td.version
+{
+  text-align: center;
+}
+
+div.crop
+{
+  overflow: auto;
+}
+
+#rcmfd_signature
+{
+  width: 99%;
+  min-width: 390px;
+}
+
+#rcmfd_signature_toolbar1 td,
+#rcmfd_signature_toolbar2 td
+{
+  width: auto;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/settings.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#rcmfd_timezone{width:300px}#folder-manager.droptarget{border:1px solid #c33;background-color:#ffffa6}#folderlist-title a.iconbutton.search{background:url(images/icons/glass.png?v=dcbc.302) no-repeat 0 0;cursor:pointer;position:absolute;right:4px;top:2px;width:16px;text-indent:50000px}.listsearchbox select{width:100%;margin:1px 0}#identities-table,#sections-table{width:100%;table-layout:fixed}#identities-table tbody tr td,#sections-table tbody tr td{cursor:default}#identities-table tbody tr.readonly td{font-style:italic}#subscription-table li.root{font-size:5%;line-height:5px;height:5px;padding:2px}#subscription-table li input{position:absolute;right:0;top:2px}#subscription-table li a{padding-right:20px;overflow:hidden;text-overflow:ellipsis}#folder-box,#prefs-box,#identity-box{position:absolute;top:0;right:0;bottom:0;border:1px solid #999;overflow:hidden;background-color:#f2f2f2}#identity-details table td.title,#response-details table td.title,#folder-details table td.title{font-weight:bold;text-align:right;width:1%;white-space:nowrap}#response-details table td.title{text-align:left;vertical-align:top;width:140px;padding-top:5px}#bottomboxes{position:absolute;width:600px;height:95px;left:0;bottom:0}#identities-list,#folder-manager,#sectionslist{position:absolute;top:0;left:0;bottom:0;border:1px solid #999;background-color:#f9f9f9;overflow:hidden}body.iframe,#prefs-frame,#folder-frame,#identity-frame{background-color:#f2f2f2;border:0;min-height:100%}#prefs-title,#folder-title,#identity-title{z-index:10}#formfooter{width:100%}#formfooter .footerleft{padding:0 2px 10px;white-space:nowrap;float:left}#formfooter .footerright{padding:0 2px 10px;white-space:nowrap;text-align:right;float:right}#formfooter .footerindent{padding:10px 0;margin-left:155px}#quota{position:absolute;top:3px;right:8px;width:100px}#quotaimg{position:absolute;top:3px;right:6px;z-index:101}#rcmfd_signature{font-family:monospace}div.readtext{width:42em;padding:20px}#license{min-height:200px;padding-bottom:2em;background:url(images/watermark.gif?v=61d5.11081) no-repeat center}#license .sysname{font-size:18px;font-weight:bold}#license .copyright{font-weight:bold}#license .license,#license .links{margin-top:1.5em}.skinselection{display:block;white-space:nowrap;margin:.3em 0}.skinselection span{display:inline-block;vertical-align:middle;padding-right:1em}.skinselection .skinname{font-weight:bold}.skinselection .skinlicense,.skinselection .skinlicense a{color:#999;font-style:italic;text-decoration:none}.skinselection .skinlicense a:hover{text-decoration:underline}img.skinthumbnail{width:64px;height:64px;border:1px solid #999;background:#fff}#pluginlist{border:1px solid #999;width:100%}#pluginlist td.version{text-align:center}div.crop{overflow:auto}#rcmfd_signature{width:99%;min-width:390px}#rcmfd_signature_toolbar1 td,#rcmfd_signature_toolbar2 td{width:auto}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/splitter.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,222 @@
+/**
+ * Roundcube splitter GUI class
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2006-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ *
+ * @constructor
+ */
+function rcube_splitter(attrib)
+{
+  this.p1id = attrib.p1;
+  this.p2id = attrib.p2;
+  this.id = attrib.id ? attrib.id : this.p1id + '_' + this.p2id + '_splitter';
+  this.orientation = attrib.orientation;
+  this.horizontal = (this.orientation == 'horizontal' || this.orientation == 'h');
+  this.pos = attrib.start ? attrib.start * 1 : 0;
+  this.relative = attrib.relative ? true : false;
+  this.drag_active = false;
+  this.callback = attrib.callback;
+
+  var me = this;
+
+  this.init = function()
+  {
+    this.p1 = document.getElementById(this.p1id);
+    this.p2 = document.getElementById(this.p2id);
+
+    // create and position the handle for this splitter
+    this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset();
+    this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset();
+
+    if (this.horizontal) {
+      var top = this.p1pos.top + this.p1.offsetHeight;
+      this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10,
+        width: '100%', vis: 1, parent: this.p1.parentNode});
+    }
+    else {
+      var left = this.p1pos.left + this.p1.offsetWidth;
+      this.layer = new rcube_layer(this.id, {x: left, y: 0, width: 10,
+        height: '100%', vis: 1,  parent: this.p1.parentNode});
+    }
+
+    this.elm = this.layer.elm;
+    this.elm.className = 'splitter '+(this.horizontal ? 'splitter-h' : 'splitter-v');
+    this.elm.unselectable = 'on';
+
+    // add the mouse event listeners
+    $(this.elm).mousedown(onDragStart);
+    if (bw.ie)
+      $(window).resize(onResize);
+
+    // read saved position from cookie
+    var cookie = rcmail.get_cookie(this.id);
+    if (cookie && !isNaN(cookie)) {
+      this.pos = parseFloat(cookie);
+      this.resize();
+    }
+    else if (this.pos) {
+      this.resize();
+      this.set_cookie();
+    }
+  };
+
+  /**
+   * Set size and position of all DOM objects
+   * according to the saved splitter position
+   */
+  this.resize = function()
+  {
+    if (this.horizontal) {
+      var lh = this.layer.height;
+      this.p1.style.height = Math.floor(this.pos - this.p1pos.top - lh / 2) + 'px';
+      this.p2.style.top = Math.ceil(this.pos + lh / 2) + 'px';
+      this.layer.move(this.layer.x, Math.round(this.pos - lh / 2 + 1));
+      if (bw.ie) {
+        var new_height = parseInt(this.p2.parentNode.offsetHeight, 10) - parseInt(this.p2.style.top, 10);
+        this.p2.style.height = (new_height > 0 ? new_height : 0) + 'px';
+      }
+    }
+    else {
+      this.p1.style.width = Math.floor(this.pos - this.p1pos.left - this.layer.width / 2) + 'px';
+      this.p2.style.left = Math.ceil(this.pos + this.layer.width / 2) + 'px';
+      this.layer.move(Math.round(this.pos - this.layer.width / 2 + 1), this.layer.y);
+      if (bw.ie) {
+        var new_width = parseInt(this.p2.parentNode.offsetWidth, 10) - parseInt(this.p2.style.left, 10) ;
+        this.p2.style.width = (new_width > 0 ? new_width : 0) + 'px';
+      }
+    }
+    $(this.p2).resize();
+    $(this.p1).resize();
+  };
+
+  /**
+   * Handler for mousedown events
+   */
+  function onDragStart(e)
+  {
+    me.drag_active = true;
+
+    // disable text selection while dragging the splitter
+    if (bw.konq || bw.chrome || bw.safari)
+      document.body.style.webkitUserSelect = 'none';
+
+    me.p1pos = me.relative ? $(me.p1).position() : $(me.p1).offset();
+    me.p2pos = me.relative ? $(me.p2).position() : $(me.p2).offset();
+
+    // start listening to mousemove events
+    $(document).on('mousemove.' + me.id, onDrag).on('mouseup.' + me.id, onDragStop);
+
+    // enable dragging above iframes
+    $('iframe').each(function() {
+      $('<div class="iframe-splitter-fix"></div>')
+        .css({background: '#fff',
+          width: this.offsetWidth+'px', height: this.offsetHeight+'px',
+          position: 'absolute', opacity: '0.001', zIndex: 1000
+        })
+        .css($(this).offset())
+        .appendTo('body');
+      });
+  };
+
+  /**
+   * Handler for mousemove events
+   */
+  function onDrag(e)
+  {
+    if (!me.drag_active)
+      return false;
+
+    // with timing events dragging action is more responsive
+    window.clearTimeout(me.ts);
+    me.ts = window.setTimeout(function() { onDragAction(e); }, 1);
+
+    return false;
+  };
+
+  function onDragAction(e)
+  {
+    var pos = rcube_event.get_mouse_pos(e);
+
+    if (me.relative) {
+      var parent = $(me.p1.parentNode).offset();
+      pos.x -= parent.left;
+      pos.y -= parent.top;
+    }
+
+    if (me.horizontal) {
+      if (((pos.y - me.layer.height * 1.5) > me.p1pos.top) && ((pos.y + me.layer.height * 1.5) < (me.p2pos.top + me.p2.offsetHeight))) {
+        me.pos = pos.y;
+        me.resize();
+      }
+    }
+    else if (((pos.x - me.layer.width * 1.5) > me.p1pos.left) && ((pos.x + me.layer.width * 1.5) < (me.p2pos.left + me.p2.offsetWidth))) {
+      me.pos = pos.x;
+      me.resize();
+    }
+
+    me.p1pos = me.relative ? $(me.p1).position() : $(me.p1).offset();
+    me.p2pos = me.relative ? $(me.p2).position() : $(me.p2).offset();
+  };
+
+  /**
+   * Handler for mouseup events
+   */
+  function onDragStop(e)
+  {
+    me.drag_active = false;
+
+    // resume the ability to highlight text
+    if (bw.konq || bw.chrome || bw.safari)
+      document.body.style.webkitUserSelect = 'auto';
+
+    // cancel the listening for drag events
+    $(document).off('.' + me.id);
+
+    // remove temp divs
+    $('div.iframe-splitter-fix').remove();
+
+    me.set_cookie();
+
+    if (typeof me.callback == 'function')
+      me.callback(me);
+
+    return bw.safari ? true : rcube_event.cancel(e);
+  };
+
+  /**
+   * Handler for window resize events
+   */
+  function onResize(e)
+  {
+    if (me.horizontal) {
+      var new_height = parseInt(me.p2.parentNode.offsetHeight, 10) - parseInt(me.p2.style.top, 10);
+      me.p2.style.height = (new_height > 0 ? new_height : 0) +'px';
+    }
+    else {
+      var new_width = parseInt(me.p2.parentNode.offsetWidth, 10) - parseInt(me.p2.style.left, 10);
+      me.p2.style.width = (new_width > 0 ? new_width : 0) + 'px';
+    }
+  };
+
+  /**
+   * Saves splitter position in cookie
+   */
+  this.set_cookie = function()
+  {
+    var exp = new Date();
+    exp.setYear(exp.getFullYear() + 1);
+    rcmail.set_cookie(this.id, this.pos, exp);
+  };
+
+} // end class rcube_splitter
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/splitter.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+/**
+ * Roundcube splitter GUI class
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (c) 2006-2014, The Roundcube Dev Team
+ *
+ * The JavaScript code in this page is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ *
+ * @constructor
+ */
+function rcube_splitter(b){function e(c){a.drag_active=!0;if(bw.konq||bw.chrome||bw.safari)document.body.style.webkitUserSelect="none";a.p1pos=a.relative?$(a.p1).position():$(a.p1).offset();a.p2pos=a.relative?$(a.p2).position():$(a.p2).offset();$(document).on("mousemove."+a.id,f).on("mouseup."+a.id,g);$("iframe").each(function(){$('<div class="iframe-splitter-fix"></div>').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo("body")})}
+function f(c){if(!a.drag_active)return!1;window.clearTimeout(a.ts);a.ts=window.setTimeout(function(){var d=rcube_event.get_mouse_pos(c);if(a.relative){var b=$(a.p1.parentNode).offset();d.x-=b.left;d.y-=b.top}a.horizontal?d.y-1.5*a.layer.height>a.p1pos.top&&d.y+1.5*a.layer.height<a.p2pos.top+a.p2.offsetHeight&&(a.pos=d.y,a.resize()):d.x-1.5*a.layer.width>a.p1pos.left&&d.x+1.5*a.layer.width<a.p2pos.left+a.p2.offsetWidth&&(a.pos=d.x,a.resize());a.p1pos=a.relative?$(a.p1).position():$(a.p1).offset();
+a.p2pos=a.relative?$(a.p2).position():$(a.p2).offset()},1);return!1}function g(c){a.drag_active=!1;if(bw.konq||bw.chrome||bw.safari)document.body.style.webkitUserSelect="auto";$(document).off("."+a.id);$("div.iframe-splitter-fix").remove();a.set_cookie();"function"==typeof a.callback&&a.callback(a);return bw.safari?!0:rcube_event.cancel(c)}function h(c){a.horizontal?(c=parseInt(a.p2.parentNode.offsetHeight,10)-parseInt(a.p2.style.top,10),a.p2.style.height=(0<c?c:0)+"px"):(c=parseInt(a.p2.parentNode.offsetWidth,
+10)-parseInt(a.p2.style.left,10),a.p2.style.width=(0<c?c:0)+"px")}this.p1id=b.p1;this.p2id=b.p2;this.id=b.id?b.id:this.p1id+"_"+this.p2id+"_splitter";this.orientation=b.orientation;this.horizontal="horizontal"==this.orientation||"h"==this.orientation;this.pos=b.start?1*b.start:0;this.relative=b.relative?!0:!1;this.drag_active=!1;this.callback=b.callback;var a=this;this.init=function(){this.p1=document.getElementById(this.p1id);this.p2=document.getElementById(this.p2id);this.p1pos=this.relative?$(this.p1).position():
+$(this.p1).offset();this.p2pos=this.relative?$(this.p2).position():$(this.p2).offset();this.layer=this.horizontal?new rcube_layer(this.id,{x:0,y:this.p1pos.top+this.p1.offsetHeight,height:10,width:"100%",vis:1,parent:this.p1.parentNode}):new rcube_layer(this.id,{x:this.p1pos.left+this.p1.offsetWidth,y:0,width:10,height:"100%",vis:1,parent:this.p1.parentNode});this.elm=this.layer.elm;this.elm.className="splitter "+(this.horizontal?"splitter-h":"splitter-v");this.elm.unselectable="on";$(this.elm).mousedown(e);
+bw.ie&&$(window).resize(h);var a=rcmail.get_cookie(this.id);a&&!isNaN(a)?(this.pos=parseFloat(a),this.resize()):this.pos&&(this.resize(),this.set_cookie())};this.resize=function(){if(this.horizontal){var a=this.layer.height;this.p1.style.height=Math.floor(this.pos-this.p1pos.top-a/2)+"px";this.p2.style.top=Math.ceil(this.pos+a/2)+"px";this.layer.move(this.layer.x,Math.round(this.pos-a/2+1));bw.ie&&(a=parseInt(this.p2.parentNode.offsetHeight,10)-parseInt(this.p2.style.top,10),this.p2.style.height=
+(0<a?a:0)+"px")}else this.p1.style.width=Math.floor(this.pos-this.p1pos.left-this.layer.width/2)+"px",this.p2.style.left=Math.ceil(this.pos+this.layer.width/2)+"px",this.layer.move(Math.round(this.pos-this.layer.width/2+1),this.layer.y),bw.ie&&(a=parseInt(this.p2.parentNode.offsetWidth,10)-parseInt(this.p2.style.left,10),this.p2.style.width=(0<a?a:0)+"px");$(this.p2).resize();$(this.p1).resize()};this.set_cookie=function(){var a=new Date;a.setYear(a.getFullYear()+1);rcmail.set_cookie(this.id,this.pos,
+a)}};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/about.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body>
+
+<roundcube:if condition="!request:_framed" />
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen" class="box darkbg crop">
+<roundcube:endif />
+
+<div class="readtext">
+<div id="license">
+<roundcube:object name="aboutcontent" />
+<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
+<p class="copyright">Copyright &copy; 2005-2017, The Roundcube Dev Team</p>
+<p class="license">This program is free software; you can redistribute it and/or modify
+it under the terms of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a>
+as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<br/>
+Some <a href="http://roundcube.net/license">exceptions</a> for skins &amp; plugins apply.
+</p>
+<p class="links"><roundcube:object name="supportlink" label="support" target="_blank" /></p>
+</div>
+
+<h3><roundcube:label name="installedplugins" /></h3>
+<roundcube:object name="pluginlist" id="pluginlist" class="records-table" cellspacing="0" />
+
+</div>
+
+<roundcube:if condition="!request:_framed" />
+</div>
+<roundcube:endif />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/addressbook.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+<style type="text/css">
+#addresslist { width: <roundcube:exp expression="!empty(cookie:addressviewsplitter) ? cookie:addressviewsplitter-5 : 245" />px; }
+#contacts-box { left: <roundcube:exp expression="!empty(cookie:addressviewsplitter) ? cookie:addressviewsplitter+5 : 255" />px; }
+#directorylistbox { width: <roundcube:exp expression="!empty(cookie:addressviewsplitterd) ? cookie:addressviewsplitterd-5 : 195" />px; }
+#addressscreen { left: <roundcube:exp expression="!empty(cookie:addressviewsplitterd) ? cookie:addressviewsplitterd+5 : 205" />px; }
+</style>
+
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="abooktoolbar">
+<roundcube:button command="add" type="link" class="buttonPas addcontact" classAct="button addcontact" classSel="button addcontactSel" title="newcontact" content=" " />
+<roundcube:button command="compose" type="link" class="buttonPas compose" classAct="button compose" classSel="button composeSel" title="composeto" content=" " />
+<roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" label="print" title="printcontact" content=" " />
+<roundcube:button command="delete" type="link" class="buttonPas delete" classAct="button delete" classSel="button deleteSel" title="deletecontact" content=" " />
+<span class="toolbarseparator">&nbsp;</span>
+<roundcube:button command="import" type="link" class="buttonPas import" classAct="button import" classSel="button importSel" title="importcontacts" content=" " />
+<span class="dropbutton">
+<roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="exportvcards" content=" " />
+<span id="exportmenulink" onclick="rcmail_ui.show_popup('exportmenu');return false"></span>
+</span>
+<roundcube:button command="advanced-search" type="link" class="buttonPas search" classAct="button search" classSel="button searchSel" title="advsearch" content=" " />
+<roundcube:container name="toolbar" id="abooktoolbar" />
+</div>
+
+<div id="quicksearchbar">
+<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass_roll.png" onclick="rcmail_ui.show_popup('searchmenu');return false" title="searchmod" width="16" height="16" />
+<roundcube:object name="searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" />
+</div>
+
+<div id="exportmenu" class="popupmenu">
+    <ul>
+        <li><roundcube:button command="export" label="exportall" prop="sub" classAct="exportalllink active" class="exportalllink" /></li>
+        <li><roundcube:button command="export-selected" label="exportsel" prop="sub" classAct="exportsellink active" class="exportsellink" /></li>
+    </ul>
+</div>
+
+<div id="searchmenu" class="popupmenu">
+  <ul class="toolbarmenu">
+    <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li>
+  </ul>
+</div>
+
+<div id="mainscreen">
+
+<div id="directorylistbox">
+<div id="directorylist-title" class="boxtitle"><roundcube:label name="groups" /></div>
+<div id="directorylist-content" class="boxlistcontent">
+  <roundcube:object name="directorylist" id="directorylist" class="treelist" />
+  <roundcube:object name="savedsearchlist" id="savedsearchlist" class="treelist" />
+</div>
+<div id="directorylist-footer" class="boxfooter">
+  <roundcube:button command="group-create" type="link" title="newgroup" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+  <roundcube:button name="groupmenulink" id="groupmenulink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('groupmenu');return false" content=" " />
+</div>
+</div>
+
+<div id="addressscreen">
+
+<div id="addresslist">
+<roundcube:object name="addresslisttitle" label="contacts" tag="div" class="boxtitle" />
+<div class="boxlistcontent">
+<roundcube:object name="addresslist" id="contacts-table" class="records-table" cellspacing="0" summary="Contacts list" noheader="true" />
+</div>
+<div class="boxfooter">
+<div id="abookcountbar" class="pagenav">
+  <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " />
+  <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " />
+  <roundcube:object name="recordsCountDisplay" style="padding:0 .5em; float:left" />
+  <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " />
+  <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " />
+</div>
+</div>
+</div>
+
+<script type="text/javascript">
+  var addrviewsplit = new rcube_splitter({id:'addressviewsplitter', p1: 'addresslist', p2: 'contacts-box', orientation: 'v', relative: true, start: 250});
+  rcmail.add_onload('addrviewsplit.init()');
+
+  var addrviewsplitd = new rcube_splitter({id:'addressviewsplitterd', p1: 'directorylistbox', p2: 'addressscreen', orientation: 'v', relative: true, start: 200});
+  rcmail.add_onload('addrviewsplitd.init()');
+</script>
+
+<div id="contacts-box">
+<roundcube:object name="addressframe" id="contact-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+</div>
+
+<div id="groupoptionsmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="group-rename" label="grouprename" classAct="active" /></li>
+    <li><roundcube:button command="group-delete" label="groupdelete" classAct="active" /></li>
+    <li><roundcube:button command="group-remove-selected" label="groupremoveselected" classAct="active" /></li>
+    <li class="separator_above"><roundcube:button command="search-create" label="searchsave" classAct="active" /></li>
+    <li><roundcube:button command="search-delete" label="searchdelete" classAct="active" /></li>
+    <roundcube:container name="groupoptions" id="groupoptionsmenu" />
+  </ul>
+</div>
+
+<div id="dragmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li>
+    <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li>
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/compose.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="productname" /> :: <roundcube:label name="compose" /></title>
+<roundcube:include file="/includes/links.html" />
+<roundcube:if condition="config:enable_spellcheck" />
+<link rel="stylesheet" type="text/css" href="/googiespell.css" />
+<roundcube:endif />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#compose-contacts { width: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1-5 : 195" />px; }
+#compose-container { left: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1+5 : 205" />px; }
+</style>
+</head>
+<roundcube:if condition="env:extwin" />
+<body class="extwin">
+<roundcube:object name="message" id="message" />
+<roundcube:else />
+<body>
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:endif />
+
+<div id="messagetoolbar">
+<roundcube:if condition="env:extwin" />
+    <roundcube:button command="close" type="link" class="button back" classAct="button back" classSel="button backSel" title="close" content=" " />
+<roundcube:else />
+    <roundcube:button command="list" type="link" class="button back" classAct="button back" classSel="button backSel" title="backtolist" content=" " />
+<roundcube:endif />
+    <roundcube:button command="send" type="link" class="buttonPas send" classAct="button send" classSel="button sendSel" title="sendmessage" content=" " />
+    <roundcube:button name="addattachment" type="link" class="button attach" classAct="button attach" classSel="button attachSel" title="addattachment" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " />
+    <roundcube:button command="insert-sig" type="link" class="buttonPas insertsig" classAct="button insertsig" classSel="button insertsigSel" title="insertsignature" content=" " />
+    <roundcube:button command="savedraft" type="link" class="buttonPas savedraft" classAct="button savedraft" classSel="button savedraftSel" title="savemessage" content=" " />
+<roundcube:if condition="config:enable_spellcheck" />
+    <span class="dropbutton">
+        <roundcube:button command="spellcheck" type="link" class="buttonPas spellcheck" classAct="button spellcheck" classSel="button spellcheckSel" title="checkspelling" content=" " />
+        <span id="spellmenulink" onclick="rcmail_ui.show_popup('spellmenu');return false"></span>
+    </span>
+<roundcube:endif />
+    <a href="#responses" class="button responses" label="responses" title="<roundcube:label name='insertresponse' />" id="responsesmenulink" unselectable="on" onmousedown="return false" onclick="rcmail_ui.show_popup('responsesmenu');return false">&nbsp;</a>
+    <roundcube:button command="compose-encrypted" type="link" class="buttonPas encrypt disabled" classAct="button encrypt" classSel="button encrypt" title="encryptmessagemailvelope" content=" " style="display:none" />
+    <roundcube:container name="toolbar" id="compose-toolbar" />
+    <roundcube:button name="messageoptions" id="composemenulink" type="link" class="button messagemenu" title="messageoptions" onclick="rcmail_ui.show_popup('composemenu', true);return false" content=" " />
+</div>
+
+<roundcube:form name="form" method="post">
+
+<div id="mainscreen">
+
+<div id="compose-contacts">
+<div class="boxtitle">
+    <roundcube:label name="contacts" />
+    <div id="abookcountbar" class="pagenav">
+        <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " />
+        <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " />
+        <span style="float:left">&nbsp;</span>
+        <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " />
+        <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " />
+    </div>
+</div>
+<div class="boxlistcontent">
+    <div class="searchbox">
+        <img id="searchmenulink" src="/images/icons/glass.png" width="16" height="16" />
+        <roundcube:object name="searchform" id="quicksearchbox" form="true" tabindex="13" />
+        <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" />
+    </div>
+    <roundcube:object name="addressbooks" id="directorylist" />
+    <roundcube:object name="addresslist" id="contacts-table" class="records-table" cellspacing="0" noheader="true" />
+</div>
+<div class="boxfooter">
+    <div id="abookactions">
+        <roundcube:button command="add-recipient" prop="to" type="link" title="to" class="button disabled" classAct="button" content="To &amp;raquo;" />
+        <roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="button disabled" classAct="button" content="Cc &amp;raquo;" />
+        <roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="button disabled" classAct="button" content="Bcc &amp;raquo;" />
+        <roundcube:container name="compose-contacts-toolbar" id="compose-contacts-toolbar" />
+    </div>
+</div>
+</div>
+
+<script type="text/javascript">
+  var composesplitv1 = new rcube_splitter({id:'composesplitterv1', p1: 'compose-contacts', p2: 'compose-container', orientation: 'v', relative: true, start: 200});
+  rcmail.add_onload('composesplitv1.init()');
+</script>
+
+<div id="compose-container">
+    <div id="compose-headers-div" style="width: 100%;">
+        <table border="0" cellspacing="0" cellpadding="1" id="compose-headers">
+        <tr>
+            <td class="title"><label for="_from"><roundcube:label name="from" /></label></td>
+            <td class="editfield formlinks">
+                <roundcube:object name="composeHeaders" part="from" form="form" id="_from" tabindex="1" />
+                <a href="#identities" onclick="return rcmail.command('identities')"><roundcube:label name="editidents" /></a>
+                <roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" condition="!env:extwin" />
+            </td>
+        </tr><tr>
+            <td class="title top"><label for="_to"><roundcube:label name="to" /></label></td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="to" form="form" id="_to" cols="70" rows="2" tabindex="2" /></td>
+        </tr><tr id="compose-cc">
+            <td class="title top">
+                <a href="#cc" onclick="return rcmail_ui.hide_header_form('cc');"><img src="/images/icons/minus.gif" alt="" width="13" height="11" title="<roundcube:label name='delete' />" /></a>
+                <label for="_cc"><roundcube:label name="cc" /></label>
+            </td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="cc" form="form" id="_cc" cols="70" rows="2" tabindex="3" /></td>
+        </tr><tr id="compose-bcc">
+            <td class="title top">
+                <a href="#bcc" onclick="return rcmail_ui.hide_header_form('bcc');"><img src="/images/icons/minus.gif" alt="" width="13" height="11" title="<roundcube:label name='delete' />" /></a>
+                <label for="_bcc"><roundcube:label name="bcc" /></label>
+            </td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="bcc" form="form" id="_bcc" cols="70" rows="2" tabindex="4" /></td>
+        </tr><tr id="compose-replyto">
+            <td class="title top">
+                <a href="#replyto" onclick="return rcmail_ui.hide_header_form('replyto');"><img src="/images/icons/minus.gif" alt="" width="13" height="11" title="<roundcube:label name='delete' />" /></a>
+                <label for="_replyto"><roundcube:label name="replyto" /></label>
+            </td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="replyto" form="form" id="_replyto" size="70" tabindex="5" /></td>
+        </tr><tr id="compose-followupto">
+            <td class="title top">
+                <a href="#followupto" onclick="return rcmail_ui.hide_header_form('followupto');"><img src="/images/icons/minus.gif" alt="" width="13" height="11" title="<roundcube:label name='delete' />" /></a>
+                <label for="_followupto"><roundcube:label name="followupto" /></label>
+            </td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="followupto" form="form" id="_followupto" size="70" tabindex="7" /></td>
+        </tr><tr>
+            <td></td>
+            <td class="formlinks">
+                <a href="#cc" onclick="return rcmail_ui.show_header_form('cc')" id="cc-link"><roundcube:label name="addcc" /></a>
+                <span class="separator">|</span>
+                <a href="#bcc" onclick="return rcmail_ui.show_header_form('bcc')" id="bcc-link"><roundcube:label name="addbcc" /></a>
+                <span class="separator">|</span>
+                <a href="#reply-to" onclick="return rcmail_ui.show_header_form('replyto')" id="replyto-link"><roundcube:label name="addreplyto" /></a>
+                <span class="separator">|</span>
+                <a href="#followup-to" onclick="return rcmail_ui.show_header_form('followupto')" id="followupto-link"><roundcube:label name="addfollowupto" /></a>
+            </td>
+        </tr><tr>
+            <td class="title"><label for="compose-subject"><roundcube:label name="subject" /></label></td>
+            <td class="editfield"><roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="8" /></td>
+        </tr>
+        </table>
+    </div>
+    <div id="compose-div">
+        <div id="compose-body-div">
+            <div id="compose-body-parent" class="boxlistcontent" style="overflow: hidden; top: 0">
+                <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" />
+            </div>
+            <div class="boxfooter">
+                <div id="compose-buttons">
+                    <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" />
+                    <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" />
+                </div>
+                <div id="compose-editorfooter" class="pagenav">
+                    <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
+                    <span>
+                        <label><roundcube:label name="editortype" /></label>
+                        <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" />
+                    </span>
+                    <roundcube:endif />
+                </div>
+            </div>
+        </div>
+<script type="text/javascript">
+  var composesplitv2 = new rcube_splitter({id:'composesplitterv2', p1: 'compose-body-div', p2: 'compose-attachments', orientation: 'v', relative: true, start: $('#compose-headers-div').width() - 175});
+  rcmail.add_onload('composesplitv2.init()');
+</script>
+        <div id="compose-attachments">
+            <div class="boxtitle"><roundcube:label name="attachments" /></div>
+            <div class="boxlistcontent">
+                <roundcube:object name="composeAttachmentList" id="attachmentslist" loadingIcon="/images/display/loading_blue.gif" icon_pos="left" />
+            </div>
+            <div class="boxfooter">
+                <roundcube:button name="uploadmenulink" id="uploadmenulink" type="link" title="addattachment" class="button addgroup" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " />
+            </div>
+        </div>
+        <roundcube:object name="fileDropArea" id="compose-attachments" />
+    </div>
+</div>
+
+</div>
+
+<div id="composeoptionsmenu" class="popupmenu">
+    <table>
+    <roundcube:if condition="!in_array('mdn_default', (array)config:dont_override)" />
+    <tr>
+        <td><label for="rcmcomposereceipt"><roundcube:label name="returnreceipt" />:</label></td>
+        <td><roundcube:object name="mdnCheckBox" form="form" id="rcmcomposereceipt" /></td>
+    </tr>
+    <roundcube:endif />
+    <roundcube:if condition="!in_array('dsn_default', (array)config:dont_override)" />
+    <tr>
+        <td><label for="rcmcomposedsn"><roundcube:label name="dsn" />:</label></td>
+        <td><roundcube:object name="dsnCheckBox" form="form" id="rcmcomposedsn" /></td>
+    </tr>
+    <roundcube:endif />
+    <tr>
+        <td><label for="rcmcomposepriority"><roundcube:label name="priority" />:</label></td>
+        <td><roundcube:object name="prioritySelector" form="form" id="rcmcomposepriority" /></td>
+    </tr>
+    <roundcube:if condition="!config:no_save_sent_messages" />
+    <tr>
+        <td><label><roundcube:label name="savesentmessagein" />:</label></td>
+        <td><roundcube:object name="storetarget" maxlength="30" /></td>
+    </tr>
+    <roundcube:endif />
+    </table>
+</div>
+
+<div id="responsesmenu" class="popupmenu">
+    <ul id="textresponsesmenu">
+        <li><label class="comment"><roundcube:label name="insertresponse" /></label></li>
+        <roundcube:object name="responseslist" id="responseslist" tagname="ul" itemclass="active" />
+        <li><label class="comment"><roundcube:label name="manageresponses" /></label></li>
+        <roundcube:button command="save-response" type="link-menuitem" label="newresponse" classAct="active" unselectable="on" />
+        <roundcube:button command="responses" type="link-menuitem" label="editresponses" classAct="active" />
+    </ul>
+</div>
+
+<div id="spellmenu" class="popupmenu selectable"></div>
+
+</form>
+
+<roundcube:object name="composeAttachmentForm" id="attachment-form" attachmentFieldSize="40" class="popupmenu" />
+
+<div id="attachmentmenu" class="popupmenu">
+  <ul class="toolbarmenu">
+    <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li>
+    <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li>
+    <li><roundcube:button command="rename-attachment" id="attachmenurename" type="link" label="rename" class="renamelink" classAct="renamelink active" innerclass="renamelink" /></li>
+    <roundcube:container name="attachmentmenu" id="attachmentmenu" />
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/contact.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="contact-title" class="boxtitle"><roundcube:label name="contactproperties" /></div>
+<div id="contact-details" class="boxcontent">
+  <roundcube:if condition="strlen(env:sourcename)" />
+    <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div>
+  <roundcube:endif />
+
+  <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
+  <roundcube:object name="contacthead" id="contacthead" />
+  <div style="clear:both"></div>
+  <div id="contacttabs">
+    <roundcube:object name="contactdetails" />
+  </div>
+  <p>
+    <roundcube:button command="edit" type="input" class="button" label="editcontact" condition="!ENV:readonly" />
+    <roundcube:if condition="env:qrcode" />
+    <roundcube:button command="qrcode" type="input" class="button" label="qrcode" />
+    <roundcube:endif />
+  </p>
+</div>
+<script type="text/javascript">rcube_init_tabs('contacttabs')</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/contactadd.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="contact-title" class="boxtitle"><roundcube:label name="addcontact" /></div>
+<div id="contact-details" class="boxcontent">
+<roundcube:form name="editform" method="post">
+  <roundcube:if condition="strlen(env:sourcename)" />
+    <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:object name="sourceselector" class="hint" id="sourceselect" /></div>
+  <roundcube:endif />
+  <div id="contactphoto">
+    <roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" />
+    <div class="formlinks">
+      <roundcube:button command="upload-photo" id="uploadformlink" type="link" label="addphoto" class="disabled" classAct="active" onclick="rcmail_ui.show_popup('uploadform', true);return false" condition="env:photocol" /><br/>
+      <roundcube:button command="delete-photo" type="link" label="delete" class="disabled" classAct="active" condition="env:photocol" />
+    </div>
+  </div>
+  <roundcube:object name="contactedithead" id="contacthead" size="16" form="editform" />
+  <div style="clear:both"></div>
+  <div id="contacttabs">
+    <roundcube:object name="contacteditform" size="40" textareacols="60" deleteIcon="/images/icons/delete.png" form="editform" />
+  </div>
+  <p>
+    <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />&nbsp;
+    <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+  </p>
+</form>
+</div>
+
+<roundcube:object name="photoUploadForm" id="upload-form" size="30" class="popupmenu" />
+<roundcube:object name="fileDropArea" id="contactpic" />
+
+<script type="text/javascript">
+rcube_init_tabs('contacttabs');
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/contactedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="contact-title" class="boxtitle"><roundcube:label name="editcontact" /></div>
+<div id="contact-details" class="boxcontent">
+<roundcube:form name="editform" method="post">
+  <roundcube:if condition="strlen(env:sourcename)" />
+    <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div>
+  <roundcube:endif />
+  <div id="contactphoto">
+    <roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" />
+    <div class="formlinks">
+      <roundcube:button command="upload-photo" id="uploadformlink" type="link" label="replacephoto" class="disabled" classAct="active" onclick="rcmail_ui.show_popup('uploadform', true);return false" condition="env:photocol" /><br/>
+      <roundcube:button command="delete-photo" type="link" label="delete" class="disabled" classAct="active" condition="env:photocol" />
+    </div>
+  </div>
+  <roundcube:object name="contactedithead" id="contacthead" size="16" form="editform" />
+  <div style="clear:both"></div>
+  <div id="contacttabs">
+    <roundcube:object name="contacteditform" size="40" textareacols="60" deleteIcon="/images/icons/delete.png" form="editform" />
+  </div>
+  <p>
+    <roundcube:button command="show" type="input" class="button" label="cancel" />&nbsp;
+    <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+  </p>
+</form>
+</div>
+
+<roundcube:object name="photoUploadForm" id="upload-form" size="30" class="popupmenu" />
+<roundcube:object name="fileDropArea" id="contactpic" />
+
+<script type="text/javascript">
+rcube_init_tabs('contacttabs');
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/contactprint.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/print.css" />
+</head>
+<body>
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" />
+
+<div id="contact-details">
+  <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
+  <roundcube:object name="contacthead" id="contacthead" />
+  <div style="clear:both"></div>
+  <roundcube:object name="contactdetails" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/contactsearch.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="contact-title" class="boxtitle"><roundcube:label name="advsearch" /></div>
+<div id="contact-details" class="boxcontent">
+  <roundcube:object name="searchform" id="advsearchform" size=30 />
+  <p><roundcube:button command="save" type="input" class="button mainaction" label="search" /></p>
+</div>
+<script type="text/javascript">rcube_init_tabs('advsearchform')</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/error.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="productname" /> :: ERROR</title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" />
+
+<div style="width:400px; margin:60px auto;">
+$__page_content
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/folderedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="folder-title" class="boxtitle"><roundcube:label name="folderproperties" /></div>
+
+<div id="folder-details" class="boxcontent">
+  <roundcube:object name="folderdetails" />
+  <div id="formfooter">
+    <div class="footerleft">
+      <roundcube:if condition="!strlen(request:_mbox)" />
+        <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />&nbsp;
+      <roundcube:endif />
+      <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+    </div>
+  </div>
+</div>
+<script type="text/javascript">rcube_init_tabs('folder-details > form')</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/folders.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#folder-manager { width: <roundcube:exp expression="!empty(cookie:folderviewsplitter) ? cookie:folderviewsplitter-5 : 295" />px; }
+#folder-box { left: <roundcube:exp expression="!empty(cookie:folderviewsplitter) ? cookie:folderviewsplitter+5 : 305" />px; }
+</style>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="folder-manager">
+<div id="folderlist-title" class="boxtitle">
+    <roundcube:label name="folders" />
+    <a href="#folders" class="iconbutton search" title="<roundcube:label name='findfolders' />" tabindex="0"><roundcube:label name='findfolders' /></a>
+</div>
+<div class="listsearchbox">
+    <roundcube:object name="folderfilter" id="folderlist-filter" />
+    <div class="searchbox" role="search">
+        <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" />
+        <a class="iconbutton searchicon"></a>
+        <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" width="13" height="13" />
+    </div>
+</div>
+<div id="folderlist-content" class="boxlistcontent">
+    <roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table"
+        summary="Folder subscription table" class="treelist folderlist" />
+</div>
+<div id="folderlist-footer" class="boxfooter">
+    <roundcube:button command="create-folder" type="link" title="createfolder" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+    <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="button groupactions" onclick="rcmail_ui.show_popup('mailboxmenu');return false" content=" " />
+
+    <roundcube:if condition="env:quota" />
+    <img id="quotaimg" src="/images/quota.png" alt="" width="102" height="16" />
+    <div id="quota">
+        <roundcube:object name="quotaDisplay" display="image" width="100" height="14" id="quotadisplay" />
+    </div>
+    <roundcube:endif />
+</div>
+</div>
+
+<script type="text/javascript">
+    var folderviewsplit = new rcube_splitter({id:'folderviewsplitter', p1: 'folder-manager', p2: 'folder-box', orientation: 'v', relative: true, start: 300 });
+    rcmail.add_onload('folderviewsplit.init()');
+</script>
+
+<div id="folder-box">
+    <roundcube:object name="folderframe" id="folder-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+
+<div id="mailboxoptionsmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="delete-folder" label="delete" classAct="active" /></li>
+    <li><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li>
+    <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/identities.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#identities-list { width: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter-5 : 295" />px; }
+#identity-box { left: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter+5 : 305" />px; }
+</style>
+
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="identities-list">
+<div id="identity-title" class="boxtitle"><roundcube:label name="identities" /></div>
+<div class="boxlistcontent">
+<roundcube:object name="identitiesList" id="identities-table" class="records-table" cellspacing="0" summary="Identities list" noheader="true" editIcon="" />
+</div>
+<div class="boxfooter">
+<roundcube:button command="add" type="link" title="newidentity" class="buttonPas addgroup" classAct="button addgroup" content=" " condition="config:identities_level:0<2" /><roundcube:button command="delete" type="link" title="delete" class="buttonPas delgroup" classAct="button delgroup" content=" " condition="config:identities_level:0<2" />
+</div>
+</div>
+
+<script type="text/javascript">
+  var identviewsplit = new rcube_splitter({id:'identviewsplitter', p1: 'identities-list', p2: 'identity-box', orientation: 'v', relative: true, start: 300 });
+  rcmail.add_onload('identviewsplit.init()');
+</script>
+
+<div id="identity-box">
+  <roundcube:object name="identityframe" id="identity-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/identityedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#identities-list { width: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter-5 : 295" />px; }
+#identity-details { left: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter+5 : 305" />px; }
+</style>
+
+</head>
+<body class="iframe">
+
+<div id="identity-title" class="boxtitle"><roundcube:object name="steptitle" /></div>
+
+<div id="identity-details" class="boxcontent">
+  <roundcube:object name="identityform" id="identity-form" size="40" textareacols="70" textarearows="6" />
+
+  <script type="text/javascript">rcube_init_tabs('identity-form')</script>
+
+  <div id="formfooter">
+    <div class="footerleft">
+      <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/importcontacts.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="box darkbg">
+<div class="boxtitle"><roundcube:label name="importcontacts" /></div>
+
+<div class="boxcontent">
+<roundcube:object name="importstep" />
+
+<p><br />
+<roundcube:object name="importnav" class="button" />
+</p>
+
+</div>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/login.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
+
+<roundcube:object name="message" id="message" />
+
+<div id="login-form">
+<div class="boxtitle"><roundcube:label name="welcome" /></div>
+<div class="boxcontent">
+
+<roundcube:form name="form" method="post">
+<roundcube:object name="loginform" form="form" submit=true />
+</form>
+
+</div>
+</div>
+
+<noscript>
+  <p id="login-noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
+</noscript>
+
+<div id="login-bottomline">
+  <roundcube:var name="config:product_name"> <roundcube:object name="version" condition="config:display_version" />
+  <roundcube:if condition="config:support_url" />
+    &nbsp;&#9679;&nbsp; <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
+  <roundcube:endif />
+  <roundcube:container name="loginfooter" id="bottomline" />
+</div>
+
+<roundcube:object name="preloader" images="
+    /images/icons/folders.png
+    /images/mail_footer.png
+    /images/taskicons.gif
+    /images/display/loading.gif
+    /images/pagenav.gif
+    /images/mail_toolbar.png
+    /images/searchfield.gif
+    /images/messageicons.png
+    /images/icons/reset.gif
+    /images/abook_toolbar.png
+    /images/icons/groupactions.png
+    /images/watermark.gif
+" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/mail.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+<style type="text/css">
+<roundcube:if condition="env:layout == 'widescreen'" />
+#mailcontframe { width: <roundcube:exp expression="!empty(cookie:mailviewsplitter2) ? cookie:mailviewsplitter2-5 : 395" />px; }
+#mailpreviewframe { left: <roundcube:exp expression="!empty(cookie:mailviewsplitter2) ? cookie:mailviewsplitter2+5 : 405" />px; display: block; }
+<roundcube:elseif condition="env:layout != 'list'" />
+#mailcontframe { height: <roundcube:exp expression="!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter-5 : 195" />px; }
+#mailpreviewframe { top: <roundcube:exp expression="!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter+5 : 205" />px; display: block; }
+<roundcube:endif />
+#mailleftcontainer { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 160" />px; }
+#mailrightcontainer { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 170" />px; }
+</style>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+<div id="mailleftcontainer">
+<div id="mailboxlist-container">
+<div id="mailboxlist-title" class="boxtitle"><roundcube:label name="mailboxlist" /></div>
+<div id="mailboxlist-content"  class="boxlistcontent">
+  <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist folderlist" folder_filter="mail" />
+</div>
+<div id="mailboxlist-footer" class="boxfooter">
+  <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="button groupactions" onclick="rcmail_ui.show_popup('mailboxmenu');return false" content=" " />
+
+<roundcube:if condition="env:quota" />
+<img id="quotaimg" src="/images/quota.png" alt="" width="102" height="16" />
+<div id="quota">
+  <roundcube:object name="quotaDisplay" display="image" width="100" height="14" id="quotadisplay" />
+</div>
+<roundcube:endif />
+
+</div>
+</div>
+</div>
+
+<div id="mailrightcontainer" class="<roundcube:var name="env:layout" />">
+<div id="mailrightcontent">
+<div id="mailcontframe">
+<div id="messagelistheader" class="boxfooter"><roundcube:object name="listmenulink" optionsmenuIcon="true" /></div>
+<div id="messagelistcontainer" class="boxlistcontent">
+<roundcube:object name="messages"
+  id="messagelist"
+  class="messagelist fixedheader"
+  cellspacing="0"
+  columns=""
+  summary="Message list"
+  optionsmenuIcon="true" />
+</div>
+<div id="messagelistfooter" class="boxfooter">
+    <div id="listcontrols" class="pagenav">
+        <span><roundcube:label name="select" />:&nbsp;</span>
+        <roundcube:button command="select-all" type="link" title="all" class="buttonPas all" classAct="button all" classSel="button allsel" content=" " />
+        <roundcube:button command="select-all" type="link" prop="page" title="currpage" class="buttonPas page" classAct="button page" classSel="button pagesel" content=" " />
+        <roundcube:button command="select-all" type="link" prop="unread" title="unread" class="buttonPas unread" classAct="button unread" classSel="button unreadsel" content=" " />
+        <roundcube:button command="select-all" type="link" prop="invert" title="invert" class="buttonPas invert" classAct="button invert" classSel="button invertsel" content=" " />
+        <roundcube:button command="select-none" type="link" title="none" class="buttonPas none" classAct="button none" classSel="button nonesel" content=" " />
+        <roundcube:container name="listcontrols" id="listcontrols" />
+    <roundcube:if condition="env:threads" />
+        <span style="margin-left: 12px"><roundcube:label name="threads" />:&nbsp;</span>
+        <roundcube:button command="expand-all" type="link" title="expand-all" class="buttonPas expand-all" classAct="button expand-all" classSel="button expand-allsel" content=" "  />
+        <roundcube:button command="expand-unread" type="link" title="expand-unread" class="buttonPas expand-unread" classAct="button expand-unread" classSel="button expand-unreadsel" content=" " />
+        <roundcube:button command="collapse-all" type="link" title="collapse-all" class="buttonPas collapse-all" classAct="button collapse-all" classSel="button collapse-allsel" content=" " />
+    <roundcube:endif />
+    </div>
+    <div id="countcontrols" class="pagenav">
+        <roundcube:object name="messageCountDisplay" />
+        <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " />
+        <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " />
+        <input id="pagejumper" class="pagejumper" type="text" size="3" disabled="disabled" title="<roundcube:label name="currpage" />" />
+        <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " />
+        <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " />
+    </div>
+</div>
+</div>
+
+<div id="mailpreviewframe">
+<roundcube:object name="messagecontentframe" id="messagecontframe" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+</div>
+</div>
+
+<roundcube:include file="/includes/messagetoolbar.html" />
+
+<div id="searchmenu" class="popupmenu">
+  <ul class="toolbarmenu">
+    <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="body" id="s_mod_body" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li>
+    <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li>
+    <li><label class="comment"><roundcube:label name="date" /></label></li>
+    <li><roundcube:object name="searchinterval" id="s_interval" onchange="rcmail.set_searchinterval($(this).val())" /></li>
+    <li><label class="comment"><roundcube:label name="searchscope" /></label></li>
+    <li><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
+    <li><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="subfolders" /></span></label></li>
+    <li><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allfolders" /></span></label></li>
+  </ul>
+</div>
+
+<div id="quicksearchbar">
+<div id="searchfilter">
+  <label for="rcmlistfilter"><roundcube:label name="filter" /></label>:
+  <roundcube:object name="searchfilter" class="searchfilter" />
+</div>
+<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass_roll.png" onclick="rcmail_ui.show_popup('searchmenu');return false" title="searchmod" width="16" height="16" />
+<roundcube:object name="searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" />
+</div>
+
+<div id="dragmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li>
+    <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li>
+  </ul>
+</div>
+
+<div id="mailboxoptionsmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="expunge" type="link" label="compact" classAct="active" /></li>
+    <li><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li>
+    <li><roundcube:button command="mark-all-read" type="link" label="markallread" classAct="active" /></li>
+    <li class="separator_below"><roundcube:button command="import-messages" name="messageimport" type="link" classAct="active" label="importmessages" id="uploadformlink" onclick="if(rcmail.command_enabled('import-messages'))rcmail_ui.show_popup('uploadform', true); return false" /></li>
+    <li><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
+    <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
+  </ul>
+</div>
+
+<div id="listmenu" style="display: none">
+<roundcube:if condition="!in_array('layout', (array)config:dont_override)" />
+<fieldset id="listoptions-layout"  class="floating"><legend><roundcube:label name="layout" /></legend>
+  <ul class="toolbarmenu">
+    <li><label><input type="radio" name="layout" value="widescreen" /> <span><roundcube:label name="layoutwidescreen" /></span></label></li>
+    <li><label><input type="radio" name="layout" value="desktop" /> <span><roundcube:label name="layoutdesktop" /></span></label></li>
+    <li><label><input type="radio" name="layout" value="list" /> <span><roundcube:label name="layoutlist" /></span></label></li>
+  </ul>
+</fieldset>
+<roundcube:endif />
+<roundcube:if condition="env:threads" />
+<fieldset id="listoptions-view"  class="thinbordered"><legend><roundcube:label name="listmode" /></legend>
+  <ul class="toolbarmenu">
+    <li><label><input type="radio" name="view" value="list" id="view_default" /> <span><roundcube:label name="list" /></span></label></li>
+    <li><label><input type="radio" name="view" value="thread" id="view_thread" /> <span><roundcube:label name="threads" /></span></label></li>
+  </ul>
+</fieldset>
+<roundcube:endif />
+<roundcube:if condition="!in_array('list_cols', (array)config:dont_override)" />
+<fieldset id="listoptions-columns" class="thinbordered"><legend><roundcube:label name="listcolumns" /></legend>
+  <ul class="toolbarmenu">
+    <li><label><input type="checkbox" name="list_col[]" value="threads" id="cols_threads" checked="checked" disabled="disabled" /> <span class="disabled"><roundcube:label name="threads" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="subject" id="cols_subject" checked="checked" disabled="disabled" /> <span class="disabled"><roundcube:label name="subject" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="fromto" id="cols_fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="from" id="cols_from" /> <span><roundcube:label name="from" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="to" id="cols_to" /> <span><roundcube:label name="to" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="replyto" id="cols_replyto" /> <span><roundcube:label name="replyto" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="cc" id="cols_cc" /> <span><roundcube:label name="cc" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="date" id="cols_date" /> <span><roundcube:label name="date" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="size" id="cols_size" /> <span><roundcube:label name="size" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="status" id="cols_status" /> <span><roundcube:label name="readstatus" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="attachment" id="cols_attachment" /> <span><roundcube:label name="attachment" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="flag" id="cols_flag" /> <span><roundcube:label name="flag" /></span></label></li>
+    <li><label><input type="checkbox" name="list_col[]" value="priority" id="cols_priority" /> <span><roundcube:label name="priority" /></span></label></li>
+  </ul>
+</fieldset>
+<roundcube:endif />
+<roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" />
+<fieldset id="listoptions-sortcol"  class="thinbordered"><legend><roundcube:label name="listsorting" /></legend>
+  <ul class="toolbarmenu">
+    <li><label><input type="radio" name="sort_col" value="" id="sort_default" /> <span><roundcube:label name="nonesort" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="arrival" id="sort_arrival" /> <span><roundcube:label name="arrival" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="date" id="sort_date" /> <span><roundcube:label name="sentdate" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="subject" id="sort_subject" /> <span><roundcube:label name="subject" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="fromto" id="sort_fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="from" id="sort_from" /> <span><roundcube:label name="from" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="to" id="sort_to" /> <span><roundcube:label name="to" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="to" id="sort_replyto" /> <span><roundcube:label name="replyto" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="cc" id="sort_cc" /> <span><roundcube:label name="cc" /></span></label></li>
+    <li><label><input type="radio" name="sort_col" value="size" id="sort_size" /> <span><roundcube:label name="size" /></span></label></li>
+  </ul>
+</fieldset>
+<roundcube:endif />
+<roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" />
+<fieldset id="listoptions-sortord" ><legend><roundcube:label name="listorder" /></legend> 
+  <ul class="toolbarmenu"> 
+    <li><label><input type="radio" name="sort_ord" value="ASC" id="sort_asc" /> <span><roundcube:label name="asc" /></span></label></li>
+    <li><label><input type="radio" name="sort_ord" value="DESC" id="sort_desc" /> <span><roundcube:label name="desc" /></span></label></li>
+  </ul>
+</fieldset>
+<roundcube:endif />
+</div>
+
+<roundcube:object name="messageimportform" id="upload-form" attachmentFieldSize="40" class="popupmenu" />
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/message.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+<style type="text/css">
+#mailboxlist-container { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 170" />px; }
+#messageframe { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 180" />px; }
+</style>
+</head>
+<roundcube:if condition="env:extwin" />
+<body class="extwin">
+<roundcube:object name="message" id="message" />
+<roundcube:else />
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:endif />
+
+<roundcube:include file="/includes/messagetoolbar.html" />
+
+<div id="mainscreen">
+<roundcube:if condition="!env:extwin" />
+<div id="mailleftcontainer">
+<div id="mailboxlist-container">
+<div id="mailboxlist-title" class="boxtitle"><roundcube:label name="mailboxlist" /></div>
+<div class="boxlistcontent">
+    <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist folderlist" folder_filter="mail" />
+</div>
+<div class="boxfooter"></div>
+</div>
+</div>
+<roundcube:else />
+<roundcube:object name="mailboxlist" folder_filter="mail" type="js" />
+<roundcube:endif />
+
+<div id="messageframe">
+<div class="boxlistcontent" style="top:0; overflow-x:auto">
+  <div id="messagelinks">
+    <roundcube:if condition="env:optional_format=='text'" />
+      <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" />
+    <roundcube:endif />
+    <roundcube:if condition="env:optional_format=='html'" />
+      <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" />
+    <roundcube:endif />
+  </div>
+<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />
+<roundcube:object name="messageFullHeaders" id="full-headers" />
+<roundcube:object name="messageAttachments" id="attachment-list" maxlength="50" />
+<roundcube:object name="messageObjects" id="message-objects" />
+<roundcube:object name="messageBody" id="messagebody" />
+</div>
+<div class="boxfooter">
+<div id="countcontrols" class="pagenav">
+  <roundcube:button command="lastmessage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastmessage" content=" " />
+  <roundcube:button command="nextmessage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextmessage" content=" " />
+  <roundcube:object name="messageCountDisplay" style="padding:0 .5em; float:right" />
+  <roundcube:button command="previousmessage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previousmessage" content=" " />
+  <roundcube:button command="firstmessage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstmessage" content=" " />
+</div>
+</div>
+</div>
+
+</div>
+
+<roundcube:if condition="!env:extwin" />
+<script type="text/javascript">
+    var mailviewsplitv = new rcube_splitter({id:'mailviewsplitterv', p1: 'mailboxlist-container', p2: 'messageframe', orientation: 'v', relative: true, start: 165});
+    rcmail.add_onload('mailviewsplitv.init()');
+</script>
+<roundcube:endif />
+
+<div id="attachmentmenu" class="popupmenu">
+  <ul class="toolbarmenu">
+    <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li>
+    <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li>
+    <roundcube:container name="attachmentmenu" id="attachmentmenu" />
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/messageerror.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name='productname' /> :: <roundcube:label name='servererror' /></title>
+<roundcube:include file="/includes/links.html" />
+
+<roundcube:if condition="env:action!='show'" />
+
+</head>
+<body class="iframe" style="background-color:#F2F2F2;">
+
+<div style="margin:20px auto; text-align:center">
+<img src="/images/watermark.gif" width="260" height="228" alt="" />
+</div>
+
+</body>
+
+<roundcube:else />
+
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+<style type="text/css">
+#mailboxlist-container { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 170" />px; }
+#messageframe { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 180" />px; }
+</style>
+</head>
+
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="messagetoolbar">
+<roundcube:button command="list" type="link" class="button back" classAct="button back" classSel="button backSel" title="backtolist" content=" " />
+<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " />
+</div>
+
+<div id="mainscreen">
+<div id="mailleftcontainer">
+<div id="mailboxlist-container">
+<div class="boxtitle"><roundcube:label name="mailboxlist" /></div>
+<div class="boxlistcontent">
+    <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" folder_filter="mail" />
+</div>
+<div class="boxfooter"></div>
+</div>
+</div>
+
+<div id="messageframe" style="background-color:#F2F2F2;">
+<div style="margin:20px auto; text-align:center">
+<img src="/images/watermark.gif" width="260" height="228" alt="" />
+</div>
+</div>
+
+</div>
+
+<script type="text/javascript">
+    var mailviewsplitv = new rcube_splitter({id:'mailviewsplitterv', p1: 'mailboxlist-container', p2: 'messageframe', orientation: 'v', relative: true, start: 165});
+    rcmail.add_onload('mailviewsplitv.init()');
+</script>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+<roundcube:endif />
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/messagepart.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+<style type="text/css">
+#messagepartheader { width: <roundcube:exp expression="!empty(cookie:mailpartsplitter) ? cookie:mailpartsplitter-5 : 170" />px; }
+#messagepartcontainer { left: <roundcube:exp expression="!empty(cookie:mailpartsplitter) ? cookie:mailpartsplitter+5 : 180" />px; }
+</style>
+</head>
+<body class="extwin">
+<roundcube:object name="message" id="message" />
+
+<div id="messagetoolbar">
+    <roundcube:button command="download" type="link" class="button download" classAct="button download" classSel="button downloadSel" title="download" content=" " />
+    <roundcube:button command="print" type="link" class="button print" classAct="button print" classSel="button printSel" title="print" content=" " />
+    <roundcube:container name="toolbar" id="messagetoolbar" />
+    <roundcube:if condition="env:is_message" />
+    <span class="toolbarseparator">&nbsp;</span>
+    <roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " />
+    <span class="dropbutton">
+        <roundcube:button command="reply-all" type="link" class="buttonPas replyAll" classAct="button replyAll" classSel="button replyAllSel" title="replytoallmessage" content=" " />
+        <span id="replyallmenulink" onclick="rcmail_ui.show_popup('replyallmenu');return false"></span>
+    </span>
+    <span class="dropbutton">
+        <roundcube:button command="forward" type="link" class="buttonPas forward" classAct="button forward" classSel="button forwardSel" title="forwardmessage" content=" " />
+        <span id="forwardmenulink" onclick="rcmail_ui.show_popup('forwardmenu');return false"></span>
+    </span>
+    <roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button messagemenu" title="moreactions" onclick="rcmail_ui.show_popup('messagemenu');return false" content=" " />
+    <roundcube:endif />
+</div>
+
+<div id="mainscreen">
+    <div id="messagepartheader">
+        <div class="boxtitle" /><roundcube:label name="properties" /></div>
+        <div class="boxlistcontent">
+            <roundcube:object name="messagePartControls" class="records-table" cellspacing="0" />
+        </div>
+    </div>
+    <div id="messagepartcontainer">
+        <roundcube:object name="messagePartFrame" id="messagepartframe" width="100%" height="100%" />
+    </div>
+</div>
+
+<roundcube:if condition="env:is_message" />
+<div id="forwardmenu" class="popupmenu">
+    <ul id="forwardmenumenu">
+        <roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
+        <roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
+        <roundcube:container name="forwardmenu" id="forwardmenumenu" />
+    </ul>
+</div>
+
+<div id="replyallmenu" class="popupmenu">
+    <ul id="replyallmenumenu">
+        <roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" classAct="replyalllink active" class="replyalllink" />
+        <roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" classAct="replylistlink active" class="replylistlink" />
+        <roundcube:container name="replyallmenu" id="replyallmenumenu" />
+    </ul>
+</div>
+
+<div id="messagemenu" class="popupmenu">
+  <ul class="toolbarmenu" id="messagemenumenu">
+    <roundcube:button type="link-menuitem" class="editlink" command="edit" prop="new" label="editasnew" classAct="editlink active" />
+    <roundcube:button type="link-menuitem" class="sourcelink" command="viewsource" label="viewsource" classAct="sourcelink active" />
+    <roundcube:container name="messagemenu" id="messagemenumenu" />
+  </ul>
+</div>
+<roundcube:endif />
+
+<script type="text/javascript">
+var mailpartsplit = new rcube_splitter({id:'mailpartsplitter', p1: 'messagepartheader', p2: 'messagepartcontainer', orientation: 'v', relative: true, start: 165});
+rcmail.add_onload('mailpartsplit.init()');
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/messagepreview.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/splitter.js"></script>
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div class="messageheaderbox">
+  <div id="messagelinks">
+    <roundcube:if condition="env:optional_format=='text'" />
+      <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" />
+    <roundcube:endif />
+    <roundcube:if condition="env:optional_format=='html'" />
+      <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" />
+    <roundcube:endif />
+    <roundcube:if condition="!env:message_context">
+      <roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" />
+    <roundcube:endif />
+  </div>
+<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />
+<roundcube:object name="messageFullHeaders" id="full-headers" />
+<roundcube:object name="messageAttachments" id="attachment-list" maxlength="50" />
+</div>
+
+<roundcube:object name="messageObjects" id="message-objects" />
+<roundcube:object name="messageBody" id="messagebody" />
+
+<div id="attachmentmenu" class="popupmenu">
+  <ul class="toolbarmenu">
+    <roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="openlink" classAct="openlink active" innerclass="openlink" />
+    <roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" />
+    <roundcube:container name="attachmentmenu" id="attachmentmenu" />
+  </ul>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/messageprint.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/print.css" />
+</head>
+<body>
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" />
+
+<div id="printmessageframe">
+<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" max="10" />
+<roundcube:object name="messageAttachments" id="attachment-list" />
+<roundcube:object name="messageBody" id="messagebody" showImages="false" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/plugin.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:if condition="env:task == 'settings'" />
+  <roundcube:include file="/includes/settingstabs.html" />
+<roundcube:endif />
+
+<div id="mainscreen">
+<roundcube:object name="plugin.body" />
+</div>
+  
+<roundcube:object name="plugin.footer" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/responseedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+
+</head>
+<body class="iframe">
+
+<div id="prefs-title" class="boxtitle"><roundcube:object name="steptitle" /></div>
+
+<div id="response-details" class="boxcontent">
+  <roundcube:object name="responseform" class="propform" size="60" textareacols="60" textarearows="18" />
+
+  <div id="formfooter">
+    <div class="footerindent">
+      <roundcube:button command="save" type="input" class="button mainaction" label="save" condition="!env:readonly" />
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/responses.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#identities-list { width: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter-5 : 295" />px; }
+#identity-box { left: <roundcube:exp expression="!empty(cookie:identviewsplitter) ? cookie:identviewsplitter+5 : 305" />px; }
+</style>
+
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="identities-list">
+<div id="identity-title" class="boxtitle"><roundcube:label name="responses" /></div>
+<div class="boxlistcontent">
+<roundcube:object name="responsesList" id="identities-table" class="records-table" cellspacing="0" summary="Responses list" noheader="true" editIcon="" />
+</div>
+<div class="boxfooter">
+<roundcube:button command="add" type="link" title="addresponse" class="buttonPas addgroup" classAct="button addgroup" content=" " /><roundcube:button command="delete" type="link" title="delete" class="buttonPas delgroup" classAct="button delgroup" content=" " />
+</div>
+</div>
+
+<script type="text/javascript">
+  var identviewsplit = new rcube_splitter({id:'identviewsplitter', p1: 'identities-list', p2: 'identity-box', orientation: 'v', relative: true, start: 300 });
+  rcmail.add_onload('identviewsplit.init()');
+</script>
+
+<div id="identity-box">
+  <roundcube:object name="responseframe" id="identity-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/settings.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+
+<style type="text/css">
+#sectionslist { width: <roundcube:exp expression="!empty(cookie:prefsviewsplitter) ? cookie:prefsviewsplitter-5 : 190" />px; }
+#prefs-box { left: <roundcube:exp expression="!empty(cookie:prefsviewsplitter) ? cookie:prefsviewsplitter+5 : 200" />px; }
+</style>
+
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="sectionslist">
+<roundcube:object name="sectionslist" id="sections-table" class="records-table" cellspacing="0" />
+</div>
+
+<script type="text/javascript">
+  var prefviewsplit = new rcube_splitter({id:'prefsviewsplitter', p1: 'sectionslist', p2: 'prefs-box', orientation: 'v', relative: true, start: 195});
+  rcmail.add_onload('prefviewsplit.init()');
+</script>
+
+<div id="prefs-box">
+<roundcube:object name="prefsframe" id="prefs-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/templates/settingsedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="prefs-title" class="boxtitle"><roundcube:object name="sectionname" /></div>
+
+<div id="prefs-details" class="boxcontent">
+  <roundcube:object name="userprefs" form="form" />
+  <div id="formfooter">
+    <div class="footerleft">
+      <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+    </div>
+  </div>
+</div>
+
+</body>
+</html>
Binary file skins/classic/thumbnail.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/classic/watermark.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title></title>
+  <style type="text/css">
+    html, body { height: 100%; background-color: #F2F2F2; margin: 0; }
+    div { height: 100%; display: flex; align-items: center; justify-content: center; }
+  </style>
+</head>
+<body>
+  <div>
+    <img src="images/watermark.gif" width="260" height="228" alt="" />
+  </div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+Roundcube Webmail Skin "Larry"
+==============================
+
+This skin package contains the default theme of the Roundcube Webmail
+software. It can be used, modified and redistributed according to
+the terms described in the LICENSE section.
+
+For information about building or modifiying Roundcube skins please visit
+https://github.com/roundcube/roundcubemail/wiki/Skins
+
+Screendesign by FLINT / Büro für Gestaltung, Bern, Switzerland
+http://bueroflint.com
+
+
+LICENSE
+-------
+The contents of this folder are subject to the Creative Commons
+Attribution-ShareAlike License. It is allowed to copy, distribute,
+transmit and to adapt the work by keeping credits to the original
+autors in the README file.
+See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/addressbook.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,405 @@
+/**
+ * Roundcube webmail styles for the Address Book section
+ *
+ * Copyright (c) 2012-2017, The Roundcube Dev Team
+ * Screendesign by FLINT / B�ro f�r Gestaltung, bueroflint.com
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+#addressview-left {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 200px;
+	bottom: 0;
+	z-index: 2;
+}
+
+#addressview-right {
+	position: absolute;
+	top: 0;
+	left: 212px;
+	right: 0;
+	bottom: 0;
+	z-index: 3;
+}
+
+#addressbooktoolbar {
+	position: absolute;
+	top: -6px;
+	left: 0;
+	height: 40px;
+	white-space: nowrap;
+	z-index: 10;
+}
+
+#directorylistbox {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0;
+}
+
+#addresslist {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 260px;
+	bottom: 0;
+}
+
+#contacts-box {
+	position: absolute;
+	top: 0;
+	left: 272px;
+	right: 0;
+	bottom: 0;
+}
+
+#addressview-left #quicksearchbar input {
+	width: 156px;
+}
+
+#directorylist li a,
+.treelist li.contactsearch a,
+#contacts-table .contact td.name {
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-position: -100px 0;
+	background-repeat: no-repeat;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#directorylist li.addressbook a {
+	background-position: 6px -766px;
+}
+
+#directorylist ul li.addressbook a {
+	background-position: 32px -766px;
+}
+
+#directorylist ul ul li.addressbook a {
+	background-position: 58px -766px;
+}
+
+#directorylist li.addressbook.selected > a {
+	background-position: 6px -791px;
+}
+
+#directorylist ul li.addressbook.selected > a {
+	background-position: 32px -791px;
+}
+
+#directorylist ul ul li.addressbook.selected > a {
+	background-position: 58px -791px;
+}
+
+#directorylist li.contactgroup a {
+	background-position: 6px -1554px;
+}
+
+#directorylist ul li.contactgroup a {
+	background-position: 32px -1554px;
+}
+
+#directorylist ul ul li.contactgroup a {
+	background-position: 58px -1554px;
+}
+
+#directorylist ul ul ul li.contactgroup a {
+	background-position: 84px -1554px;
+}
+
+#directorylist li.contactgroup.selected a {
+	background-position: 32px -1578px;
+}
+
+#directorylist ul ul li.contactgroup.selected a {
+	background-position: 58px -1578px;
+}
+
+#directorylist ul ul ul li.contactgroup.selected a {
+	background-position: 84px -1578px;
+}
+
+.treelist li.contactsearch a {
+	background-position: 6px -1651px;
+}
+
+.treelist li.contactsearch.selected a {
+	background-position: 6px -1675px;
+}
+
+#directorylist li.addressbook div.collapsed,
+#directorylist li.addressbook div.expanded {
+	top: 15px;
+}
+
+#contacts-table .contact.readonly td {
+	font-style: italic;
+}
+
+#contacts-table td.name {
+	width: 95%;
+}
+
+#contacts-table td.action {
+	width: 24px;
+	padding: 4px;
+}
+
+#contacts-table td.action a {
+	display: block;
+	width: 16px;
+	height: 14px;
+	text-indent: -5000px;
+	overflow: hidden;
+	background: url(images/listicons.png?v=c458.10409) -2px -1180px no-repeat;
+}
+
+#contacts-table .contact td.name {
+	background-position: 4px -1601px;
+}
+
+#contacts-table .contact.selected td.name {
+	background-position: 4px -1625px;
+	font-weight: bold;
+}
+
+#contacts-table .group td.name {
+	background-position: 4px -1555px;
+}
+
+#contacts-table .group.selected td.name {
+	background-position: 4px -1578px;
+	font-weight: bold;
+}
+
+#contacts-table.focus .group.selected.focused td.name {
+	background-position: 4px -1578px;
+}
+
+#addresslist .boxtitle {
+	padding-right: 95px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#addresslist .boxtitle a.poplink {
+	color: #004458;
+	font-size: 14px;
+	line-height: 12px;
+	text-decoration: none;
+}
+
+#contact-frame {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0px;
+	border: 0;
+	border-radius: 4px;
+}
+
+#headerbuttons {
+	position: absolute;
+	top: 48px;
+	right: 10px;
+	width: auto;
+	z-index: 10;
+}
+
+#sourcename {
+	color: #999;
+	font-size: 10px;
+	margin: -5px 0 8px 2px;
+}
+
+#contactphoto {
+	float: left;
+	margin: 0 18px 20px 0;
+	width: 112px;
+	border: 0;
+	padding: 0;
+}
+
+#contactpic {
+	width: 112px;
+	min-height: 112px;
+	background: white;
+}
+
+#contactpic img {
+	max-width: 112px;
+	visibility: inherit;
+}
+
+#contactpic.droptarget {
+	background-image: url(images/filedrop.png?v=be5d.415);
+	background-position: center;
+	background-repeat: no-repeat;
+}
+
+#contactpic.droptarget.hover {
+	background-color: #d9ecf4;
+	box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+}
+
+#contactpic.droptarget.active img {
+	opacity: 0.15;
+}
+
+#contactpic.droptarget.hover img {
+	opacity: 0.05;
+}
+
+#contactphoto .formlinks a[aria-disabled='true'] {
+	visibility: hidden;
+}
+
+#contacthead {
+	border: 0;
+	margin: 0 16em 1em 0;
+	padding: 0;
+	line-height: 1.5em;
+	font-size: 12px;
+}
+
+#contacthead > legend {
+	display: none;
+}
+
+form #contacthead {
+	margin-right: 0;
+}
+
+#contacthead .names span.namefield,
+#contacthead .names input {
+	font-size: 140%;
+	font-weight: bold;
+}
+
+#contacthead .displayname span.namefield {
+	font-size: 120%;
+	font-weight: bold;
+}
+
+#contacthead span.nickname:before,
+#contacthead span.nickname:after {
+	content: '"';
+}
+
+#contacthead input {
+	margin-right: 6px;
+	margin-bottom: 0.2em;
+}
+
+#contacthead .names input,
+#contacthead .addnames input {
+	width: 180px;
+}
+
+#contacthead input.ff_prefix,
+#contacthead input.ff_suffix {
+	width: 90px;
+}
+
+.contactfieldgroup {
+	border: 0;
+	border-radius: 0;
+	background: #f7f7f7;
+	margin: 0 0 12px 0;
+	padding: 8px;
+}
+
+.contactfieldgroup legend {
+	display: block;
+	margin: 0 -8px;
+	width: 100%;
+	font-weight: bold;
+	padding: 8px 8px 6px 8px;
+	background: #e9e9e9;
+	border-bottom: 1px solid #dfdfdf;
+	border-radius: 0;
+}
+
+.contactfieldgroup .row {
+	position: relative;
+	margin: 0.2em 0;
+}
+
+.contactfieldgroup .contactfieldlabel {
+	position: absolute;
+	top: 0;
+	left: 2px;
+	width: 110px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	color: #666;
+}
+
+.contactfieldgroup .contactfieldlabel select {
+	width: 100%;
+	color: #666;
+}
+
+.contactfieldgroup .contactfieldcontent {
+	padding-left: 120px;
+	min-height: 1em;
+	line-height: 1.3em;
+}
+
+.contactfieldgroup .contactfield {
+	line-height: 1.3em;
+}
+
+.contactcontrolleraddress .contactfieldcontent input {
+	margin-bottom: 0.1em;
+}
+
+.contactfieldcontent.composite {
+	padding-bottom: 8px;
+}
+
+.contactfieldcontent .contactfieldbutton {
+	vertical-align: middle;
+	margin-left: 0.5em;
+}
+
+.contactfield .ff_notes {
+	width: 99%;
+}
+
+a.deletebutton {
+	position: relative;
+	left: 5px;
+	top: -3px;
+	display: inline-block;
+	width: 24px;
+	height: 18px;
+	text-decoration: none;
+	text-indent: -5000px;
+	background: url(images/buttons.png?v=d70c.9130) -7px -377px no-repeat;
+}
+
+#import-box {
+	position: absolute;
+	bottom: 0px;
+	top: 34px;
+	left: 0;
+	right: 0;
+	overflow: auto;
+	padding: 10px;
+}
+
+#import-box p,
+#import-box .propform {
+  max-width: 50em;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/addressbook.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#addressview-left{position:absolute;top:0;left:0;width:200px;bottom:0;z-index:2}#addressview-right{position:absolute;top:0;left:212px;right:0;bottom:0;z-index:3}#addressbooktoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap;z-index:10}#directorylistbox{position:absolute;top:0;left:0;width:100%;bottom:0}#addresslist{position:absolute;top:0;left:0;width:260px;bottom:0}#contacts-box{position:absolute;top:0;left:272px;right:0;bottom:0}#addressview-left #quicksearchbar input{width:156px}#directorylist li a,.treelist li.contactsearch a,#contacts-table .contact td.name{background-image:url(images/listicons.png?v=c458.10409);background-position:-100px 0;background-repeat:no-repeat;overflow:hidden;text-overflow:ellipsis}#directorylist li.addressbook a{background-position:6px -766px}#directorylist ul li.addressbook a{background-position:32px -766px}#directorylist ul ul li.addressbook a{background-position:58px -766px}#directorylist li.addressbook.selected>a{background-position:6px -791px}#directorylist ul li.addressbook.selected>a{background-position:32px -791px}#directorylist ul ul li.addressbook.selected>a{background-position:58px -791px}#directorylist li.contactgroup a{background-position:6px -1554px}#directorylist ul li.contactgroup a{background-position:32px -1554px}#directorylist ul ul li.contactgroup a{background-position:58px -1554px}#directorylist ul ul ul li.contactgroup a{background-position:84px -1554px}#directorylist li.contactgroup.selected a{background-position:32px -1578px}#directorylist ul ul li.contactgroup.selected a{background-position:58px -1578px}#directorylist ul ul ul li.contactgroup.selected a{background-position:84px -1578px}.treelist li.contactsearch a{background-position:6px -1651px}.treelist li.contactsearch.selected a{background-position:6px -1675px}#directorylist li.addressbook div.collapsed,#directorylist li.addressbook div.expanded{top:15px}#contacts-table .contact.readonly td{font-style:italic}#contacts-table td.name{width:95%}#contacts-table td.action{width:24px;padding:4px}#contacts-table td.action a{display:block;width:16px;height:14px;text-indent:-5000px;overflow:hidden;background:url(images/listicons.png?v=c458.10409) -2px -1180px no-repeat}#contacts-table .contact td.name{background-position:4px -1601px}#contacts-table .contact.selected td.name{background-position:4px -1625px;font-weight:bold}#contacts-table .group td.name{background-position:4px -1555px}#contacts-table .group.selected td.name{background-position:4px -1578px;font-weight:bold}#contacts-table.focus .group.selected.focused td.name{background-position:4px -1578px}#addresslist .boxtitle{padding-right:95px;overflow:hidden;text-overflow:ellipsis}#addresslist .boxtitle a.poplink{color:#004458;font-size:14px;line-height:12px;text-decoration:none}#contact-frame{position:absolute;top:0;left:0;right:0;bottom:0;border:0;border-radius:4px}#headerbuttons{position:absolute;top:48px;right:10px;width:auto;z-index:10}#sourcename{color:#999;font-size:10px;margin:-5px 0 8px 2px}#contactphoto{float:left;margin:0 18px 20px 0;width:112px;border:0;padding:0}#contactpic{width:112px;min-height:112px;background:white}#contactpic img{max-width:112px;visibility:inherit}#contactpic.droptarget{background-image:url(images/filedrop.png?v=be5d.415);background-position:center;background-repeat:no-repeat}#contactpic.droptarget.hover{background-color:#d9ecf4;box-shadow:0 0 5px 2px rgba(71,135,177,0.9)}#contactpic.droptarget.active img{opacity:.15}#contactpic.droptarget.hover img{opacity:.05}#contactphoto .formlinks a[aria-disabled='true']{visibility:hidden}#contacthead{border:0;margin:0 16em 1em 0;padding:0;line-height:1.5em;font-size:12px}#contacthead>legend{display:none}form #contacthead{margin-right:0}#contacthead .names span.namefield,#contacthead .names input{font-size:140%;font-weight:bold}#contacthead .displayname span.namefield{font-size:120%;font-weight:bold}#contacthead span.nickname:before,#contacthead span.nickname:after{content:'"'}#contacthead input{margin-right:6px;margin-bottom:.2em}#contacthead .names input,#contacthead .addnames input{width:180px}#contacthead input.ff_prefix,#contacthead input.ff_suffix{width:90px}.contactfieldgroup{border:0;border-radius:0;background:#f7f7f7;margin:0 0 12px 0;padding:8px}.contactfieldgroup legend{display:block;margin:0 -8px;width:100%;font-weight:bold;padding:8px 8px 6px 8px;background:#e9e9e9;border-bottom:1px solid #dfdfdf;border-radius:0}.contactfieldgroup .row{position:relative;margin:.2em 0}.contactfieldgroup .contactfieldlabel{position:absolute;top:0;left:2px;width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666}.contactfieldgroup .contactfieldlabel select{width:100%;color:#666}.contactfieldgroup .contactfieldcontent{padding-left:120px;min-height:1em;line-height:1.3em}.contactfieldgroup .contactfield{line-height:1.3em}.contactcontrolleraddress .contactfieldcontent input{margin-bottom:.1em}.contactfieldcontent.composite{padding-bottom:8px}.contactfieldcontent .contactfieldbutton{vertical-align:middle;margin-left:.5em}.contactfield .ff_notes{width:99%}a.deletebutton{position:relative;left:5px;top:-3px;display:inline-block;width:24px;height:18px;text-decoration:none;text-indent:-5000px;background:url(images/buttons.png?v=d70c.9130) -7px -377px no-repeat}#import-box{position:absolute;bottom:0;top:34px;left:0;right:0;overflow:auto;padding:10px}#import-box p,#import-box .propform{max-width:50em}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/embed.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+/**
+ * Roundcube webmail "embedded" stylesheets
+ *
+ * Copyright (c) 2012, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+.rcmail-inline-message {
+	font-family: sans-serif;
+	font-size: 11px;
+	font-weight: bold;
+	color: #996600;
+	border: 1px solid #ffdf0e;
+	background: url(images/messages.png?v=72e9.1264) no-repeat scroll 5px -83px #fef893;
+	padding: 6px 12px 4px 30px;
+	margin-bottom: 0.8em;
+}
+
+.rcmail-inline-message > button {
+	margin-left: 1em;
+	vertical-align: baseline;
+}
+
+.rcmail-inline-message em {
+	font-size: 90%;
+}
+
+.rcmail-inline-buttons {
+	margin-bottom: 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/embed.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+.rcmail-inline-message{font-family:sans-serif;font-size:11px;font-weight:bold;color:#960;border:1px solid #ffdf0e;background:url(images/messages.png?v=72e9.1264) no-repeat scroll 5px -83px #fef893;padding:6px 12px 4px 30px;margin-bottom:.8em}.rcmail-inline-message>button{margin-left:1em;vertical-align:baseline}.rcmail-inline-message em{font-size:90%}.rcmail-inline-buttons{margin-bottom:0}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/googiespell.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,94 @@
+/***** modified styles for GoogieSpell *****/
+
+.googie_window {
+  font-size: 11px;
+  width: 185px;
+  margin: 0;
+  padding: 0;
+}
+
+.googie_edit_layer {
+  padding: 4px;
+  font-size: 9pt;
+  font-family: monospace;
+  background-color: #fff;
+  border: 0;
+}
+
+.googie_edit_layer span {
+  font-family: monospace;
+}
+
+.googie_list {
+  width: 100%;
+  margin: 0;
+  padding: 0;
+  border-spacing: 0;
+}
+
+.googie_list td {
+  min-width: 80px;
+  width: auto;
+}
+
+.googie_list td.googie_list_selected {
+  background: #4db0d2;
+}
+
+.googie_list_close {
+  font-size: 11px;
+  color: #b91414;
+}
+
+.googie_list_onhover .googie_list_close {
+  color: #fff;
+}
+
+.googie_list_revert {
+  font-size: 11px;
+  color: #b91414;
+}
+
+.googie_list_revert:hover {
+  color: #fff;
+}
+
+.googie_link {
+  color: #b91414;
+  text-decoration: underline;
+  cursor: pointer;
+  font-size: 9pt;
+  font-family: monospace;
+}
+
+.googie_check_spelling_link {
+  color: #0069A6;
+  font-size: 11px;
+  text-decoration: underline;
+  cursor: pointer;
+}
+
+.googie_no_style {
+  text-decoration: none;
+}
+
+.googie_check_spelling_ok,
+.googie_resume_editing {
+  color: green;
+  font-size: 11px;
+  cursor: pointer;
+  text-decoration: underline;
+}
+
+.googie_check_spelling_ok:hover,
+.googie_resume_editing:hover {
+  text-decoration: underline;
+}
+
+.googie_lang_3d_click img,
+.googie_lang_3d_on img {
+  vertical-align: middle;
+  cursor: pointer;
+  border: 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/googiespell.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+.googie_window{font-size:11px;width:185px;margin:0;padding:0}.googie_edit_layer{padding:4px;font-size:9pt;font-family:monospace;background-color:#fff;border:0}.googie_edit_layer span{font-family:monospace}.googie_list{width:100%;margin:0;padding:0;border-spacing:0}.googie_list td{min-width:80px;width:auto}.googie_list td.googie_list_selected{background:#4db0d2}.googie_list_close{font-size:11px;color:#b91414}.googie_list_onhover .googie_list_close{color:#fff}.googie_list_revert{font-size:11px;color:#b91414}.googie_list_revert:hover{color:#fff}.googie_link{color:#b91414;text-decoration:underline;cursor:pointer;font-size:9pt;font-family:monospace}.googie_check_spelling_link{color:#0069a6;font-size:11px;text-decoration:underline;cursor:pointer}.googie_no_style{text-decoration:none}.googie_check_spelling_ok,.googie_resume_editing{color:green;font-size:11px;cursor:pointer;text-decoration:underline}.googie_check_spelling_ok:hover,.googie_resume_editing:hover{text-decoration:underline}.googie_lang_3d_click img,.googie_lang_3d_on img{vertical-align:middle;cursor:pointer;border:0}
\ No newline at end of file
Binary file skins/larry/images/addcontact.png has changed
Binary file skins/larry/images/ajaxloader.gif has changed
Binary file skins/larry/images/ajaxloader_dark.gif has changed
Binary file skins/larry/images/buttons.png has changed
Binary file skins/larry/images/contactgroup.png has changed
Binary file skins/larry/images/contactpic.png has changed
Binary file skins/larry/images/contactpic_32px.png has changed
Binary file skins/larry/images/contactpic_48px.png has changed
Binary file skins/larry/images/favicon.ico has changed
Binary file skins/larry/images/filedrop.png has changed
Binary file skins/larry/images/filetypes.png has changed
Binary file skins/larry/images/googiespell/change_lang.gif has changed
Binary file skins/larry/images/googiespell/indicator.gif has changed
Binary file skins/larry/images/googiespell/ok.gif has changed
Binary file skins/larry/images/googiespell/spellc.gif has changed
Binary file skins/larry/images/listicons.png has changed
Binary file skins/larry/images/messages.png has changed
Binary file skins/larry/images/messages_dark.png has changed
Binary file skins/larry/images/overflowshadow.png has changed
Binary file skins/larry/images/quota.png has changed
Binary file skins/larry/images/roundcube_logo.png has changed
Binary file skins/larry/images/selector.png has changed
Binary file skins/larry/images/splitter.png has changed
Binary file skins/larry/images/watermark.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/includes/footer.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,5 @@
+<roundcube:object name="message" id="messagestack" condition="env:task != 'login'" />
+
+<script type="text/javascript">
+if (!window.UI) { var UI = new rcube_mail_ui(); }
+</script>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/includes/header.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+<script type="text/javascript">
+var UI = new rcube_mail_ui();
+</script>
+
+<div id="header">
+<div id="topline" role="banner" aria-labelledby="aria-label-topnav">
+	<h2 id="aria-label-topnav" class="voice"><roundcube:label name="arialabeltopnav" /></h2>
+	<div class="topleft">
+		<roundcube:container name="topline-left" id="topline-left" />
+		<roundcube:if condition="template:name != 'error'" />
+			<roundcube:button name="about" type="link" label="about" class="about-link" onclick="UI.show_about(this);return false" condition="!env:extwin" />
+		<roundcube:endif />
+		<roundcube:if condition="config:support_url" />
+		<a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link" id="supportlink"><roundcube:label name="support" /></a>
+		<roundcube:endif />
+	</div>
+	<roundcube:container name="topline-center" id="topline-center" />
+	<div class="topright">
+	<roundcube:container name="topline-right" id="topline-right" />
+	<roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
+		<span class="username"><roundcube:object name="username" /></span>
+		<roundcube:button command="logout" label="logout" class="button-logout" />
+	<roundcube:elseif condition="env:extwin" />
+		<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
+	<roundcube:endif />
+	</div>
+</div>
+<roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
+<div id="topnav">
+	<h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
+	<div id="taskbar" class="topright" role="navigation" aria-labelledby="aria-label-tasknav">
+		<roundcube:button command="mail" label="mail" class="button-mail" classSel="button-mail button-selected" innerClass="button-inner" />
+		<roundcube:button command="addressbook" label="contacts" class="button-addressbook" classSel="button-addressbook button-selected" innerClass="button-inner" />
+		<roundcube:container name="taskbar" id="taskbar" />
+		<roundcube:button command="settings" label="settings" class="button-settings" classSel="button-settings button-selected" innerClass="button-inner" />
+		<roundcube:button command="logout" label="logout" class="button-logout" classSel="button-logout" innerClass="button-inner" />
+		<span class="minmodetoggle" role="presentation"></span>
+	</div>
+	<roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" alt="Logo" onclick="if(window.rcmail)rcmail.command('switch-task','mail')" />
+</div>
+<roundcube:endif />
+
+<br style="clear:both" />
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/includes/links.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<meta name="viewport" content="" id="viewport" />
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/styles.css" />
+<roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" />
+<link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" />
+<roundcube:endif />
+<script type="text/javascript" src="/ui.js"></script>
+<roundcube:add_label name="errortitle" />
+<roundcube:add_label name="toggleadvancedoptions" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/includes/mailtoolbar.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
+<span class="spacer"></span>
+<roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
+<span class="dropbutton">
+	<roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" />
+	<a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="replyallmenu-menu" tabindex="0"><roundcube:label name="arialabelreplyalloptions" /></a>
+</span>
+<span class="dropbutton">
+	<roundcube:button command="forward" type="link" class="button forward disabled" classAct="button forward" classSel="button forward pressed" label="forward" title="forwardmessage" />
+	<a href="#forward" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="forwardmenu-menu" tabindex="0"><roundcube:label name="arialabelforwardingoptions" /></a>
+</span>
+<roundcube:button command="delete" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="delete" title="deletemessage" />
+<roundcube:if condition="template:name == 'message'" />
+<roundcube:button command="move" type="link" class="button move disabled" classAct="button move" classSel="button move pressed" label="move" title="moveto" data-menu-pos="bottom" />
+<roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="printmessage" />
+<roundcube:endif />
+<roundcube:container name="toolbar" id="mailtoolbar" />
+<roundcube:button name="markmenulink" id="markmessagemenulink" type="link" class="button markmessage" label="mark" title="markmessages" onclick="UI.toggle_popup('markmessagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="markmessagemenu-menu" />
+<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="messagemenu-menu" />
+
+<div id="forwardmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
+	<ul id="forwardmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-forwardmenu">
+		<roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
+		<roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
+		<roundcube:container name="forwardmenu" id="forwardmenu-menu" />
+	</ul>
+</div>
+
+<div id="replyallmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
+	<ul id="replyallmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-replyallmenu">
+		<roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="replyalllink" classAct="replyalllink active" />
+		<roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="replylistlink" classAct="replylistlink active" />
+		<roundcube:container name="replyallmenu" id="replyallmenu-menu" />
+	</ul>
+</div>
+
+<div id="messagemenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
+	<ul id="messagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-messagemenu">
+		<roundcube:button type="link-menuitem" command="print" label="printmessage" class="icon" classAct="icon active" innerclass="icon print" />
+		<roundcube:button type="link-menuitem" command="download" label="emlsave" class="icon" classAct="icon active" innerclass="icon download" />
+		<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="icon" classAct="icon active" innerclass="icon edit" />
+		<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="icon" classAct="icon active" innerclass="icon viewsource" />
+		<roundcube:button type="link-menuitem" command="move" label="moveto" class="icon" classAct="icon active" innerclass="icon move folder-selector-link" />
+		<roundcube:button type="link-menuitem" command="copy" label="copyto" class="icon" classAct="icon active" innerclass="icon copy folder-selector-link" />
+		<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="icon" classAct="icon active" innerclass="icon extwin" />
+		<roundcube:container name="messagemenu" id="messagemenu-menu" />
+	</ul>
+</div>
+
+<div id="markmessagemenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-markmessagemenu" class="voice"><roundcube:label name="arialabelmarkmessagesas" /></h3>
+	<ul id="markmessagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-markmessagemenu">
+		<roundcube:button type="link-menuitem" command="mark" prop="read" label="markread" classAct="icon active" class="icon" innerclass="icon read" />
+		<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="icon active" class="icon" innerclass="icon unread" />
+		<roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" classAct="icon active" class="icon" innerclass="icon flagged" />
+		<roundcube:button type="link-menuitem" command="mark" prop="unflagged" label="markunflagged" classAct="icon active" class="icon" innerclass="icon unflagged" />
+		<roundcube:container name="markmenu" id="markmessagemenu-menu" />
+	</ul>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/includes/settingstabs.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+<div id="settings-sections" class="uibox listbox" role="navigation" aria-labelledby="aria-label-settingstabs">
+<h2 class="boxtitle" id="aria-label-settingstabs"><roundcube:label name="settings" /></h2>
+<div id="settings-tabs" class="scroller">
+	<ul class="listing iconized">
+		<roundcube:object name="settingstabs" class="listitem" tagname="li" />
+	</ul>
+	<roundcube:container name="tabs" id="settings-tabs" />
+</div>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/mail.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1555 @@
+/**
+ * Roundcube webmail styles for the Email section
+ *
+ * Copyright (c) 2012-2017, The Roundcube Dev Team
+ * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+#mailview-left {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 200px;
+	bottom: 0;
+	z-index: 1; /* fixes scrolling in Edge (#5750) */
+}
+
+#mailview-right {
+	position: absolute;
+	top: 0;
+	left: 212px;
+	right: 0;
+	bottom: 0;
+}
+
+#mailview-right.fullwidth {
+	left: 0;
+}
+
+#mailview-top {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0px;
+}
+
+html.ie #mailview-top {
+	overflow: visible; /* fixes display issues of fixed list header in IE */
+}
+
+#mailview-bottom {
+	display: none;
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	height: 0;
+	border-radius: 4px;
+	border-top: none;
+}
+
+#composeview-right #mailview-bottom {
+	border-radius: 0 0 4px 4px;
+}
+
+#mailboxcontainer,
+#messagelistcontainer {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0;
+	outline: none;
+}
+
+#messagelistcontainer {
+	top: 0;
+	bottom: 30px;
+	overflow: auto;
+}
+
+/* Real browsers accept this (not IE) */
+html>/**/body #messagelist {
+	overflow: auto;
+	overflow-x: hidden;
+}
+
+#messagelistfooter {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 22px;
+	padding: 5px 6px 3px;
+	border-top: 1px solid #ddd;
+	background: #eaeaea;
+	border-radius: 0 0 4px 4px;
+	white-space: nowrap;
+}
+
+#messagelistfooter.rightalign {
+	text-align: right;
+}
+
+#messagelistfooter #countcontrols {
+	display: inline-block;
+}
+
+#messagelistfooter #listcontrols,
+#messagelistfooter #listselectors {
+	display: inline-block;
+	margin-right: 2em;
+	vertical-align: middle;
+}
+
+#messagelistfooter #listselectors .menuselector {
+	margin-top: -2px;
+}
+
+a.iconbutton.listmode {
+	width: 26px;
+	height: 20px;
+	background-position: 0 -477px;
+}
+
+a.iconbutton.threadmode {
+	width: 26px;
+	height: 20px;
+	background-position: 0 -497px;
+}
+
+a.iconbutton.listmode.selected {
+	background-position: -26px -477px;
+}
+
+a.iconbutton.threadmode.selected {
+	background-position: -26px -497px;
+}
+
+#mailboxlist > li:first-child {
+	border-top: 0;
+}
+
+html.mozilla #mailboxlist > li:first-child {
+	border-radius: 4px 4px 0 0;
+}
+
+.folderlist li.mailbox.unread > a {
+	padding-right: 36px;
+}
+
+.folderlist li.unread {
+	font-weight: bold;
+}
+
+.folderlist li.recent > a {
+	color: #017cb4;
+}
+
+.folderlist li.mailbox .unreadcount {
+	position: absolute;
+	top: 3px;
+	right: 6px;
+	min-width: 1.8em;
+	line-height: 15px;
+	padding: 2px 4px;
+	background: #6a939f;
+	border-radius: 9px;
+	color: #fff;
+	text-align: center;
+	font-weight: bold;
+	text-shadow: none;
+}
+
+.folderlist li.mailbox.selected > a .unreadcount {
+	background: #005d76;
+}
+
+.folderlist li.mailbox.recent > a .unreadcount {
+	background: #006ca4;
+}
+
+#searchfilter {
+	position: absolute;
+	right: 256px;
+	width: auto;
+	top: 2px;
+}
+
+#searchfilter select {
+	height: 26px;
+}
+
+#mailview-left select.mailboxlist {
+	position: relative;
+	top: 10px;
+	width: 100%;
+}
+
+#messagetoolbar {
+	position: absolute;
+	top: -6px;
+	left: 0;
+	height: 40px;
+	white-space: nowrap;
+}
+
+#messagetoolbar.fullwidth {
+	right: 0;
+}
+
+#messagesearchtools {
+	position: absolute;
+	right: 0;
+	top: 0;
+}
+
+#s_interval {
+	margin: 3px 8px;
+}
+
+/*** message list ***/
+
+table.messagelist {
+	z-index: 1;
+}
+
+table.messagelist.fixedcopy {
+	z-index: 2;
+}
+
+.messagelist thead th:first-child {
+	border-radius: 4px 0 0 0; /* for Chrome */
+}
+
+.messagelist tr > .attachment,
+.messagelist tr > .threads,
+.messagelist tr > .status,
+.messagelist tr > .flag,
+.messagelist tr > .priority {
+	width: 20px;
+	padding: 2px 3px !important;
+}
+
+.messagelist tr > .threads {
+	width: 26px;
+}
+
+.messagelist tr > .threads + td,
+.messagelist tr > .threads + th {
+	border-left: 0;
+}
+
+.messagelist tr > .size {
+	width: 60px;
+	text-align: right;
+}
+
+.messagelist thead tr th.size {
+	text-align: left;
+}
+
+.messagelist tr > .fromto,
+.messagelist tr > .from,
+.messagelist tr > .to,
+.messagelist tr > .cc,
+.messagelist tr > .replyto {
+	width: 200px;
+}
+
+.messagelist tr > .date {
+	width: 155px;
+}
+
+.messagelist tr > .folder {
+	width: 135px;
+}
+
+.messagelist tr > .hidden {
+	display: none;
+}
+
+.messagelist tr.message {
+/*	background-color: #fff; */
+}
+
+.messagelist tr.thread.expanded:not(.selected) td {
+	background-color: #ededed;
+}
+
+.messagelist tr.unread {
+	font-weight: bold;
+/*	background-color: #fff; */
+}
+
+.messagelist tr.flagged th,
+.messagelist tr.flagged td,
+.messagelist tr.flagged td a {
+	color: #f30;
+}
+
+.messagelist thead tr th.sortedASC a,
+.messagelist thead tr th.sortedDESC a {
+	color: #004458;
+	text-decoration: underline;
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-repeat: no-repeat;
+	background-position: right -912px;
+}
+
+.messagelist thead tr th.sortedASC a {
+	background-position: right -944px;
+}
+
+.messagelist td img {
+	vertical-align: middle;
+	display: inline-block;
+}
+
+.messagelist tbody td a {
+	color: #333;
+	text-decoration: none;
+	white-space: nowrap;
+	cursor: default;
+}
+
+.messagelist tbody tr td.flag,
+.messagelist tbody tr td.status,
+.messagelist tbody tr td.subject span.status {
+	cursor: pointer;
+}
+
+.messagelist tr > .flag span,
+.messagelist tr > .status span,
+.messagelist tr > .attachment span,
+.messagelist tr > .priority span {
+	display: block;
+	width: 20px;
+	text-indent: -5000px;
+	overflow: hidden;
+}
+
+.messagelist tr td div.collapsed,
+.messagelist tr td div.expanded,
+.messagelist tr > .threads .listmenu,
+.messagelist tr .attachment span.attachment,
+.messagelist tr .attachment span.report,
+.messagelist tr .attachment span.encrypted,
+.messagelist tr > .priority span.priority,
+.messagelist tr > .priority span.prio1,
+.messagelist tr > .priority span.prio2,
+.messagelist tr > .priority span.prio3,
+.messagelist tr > .priority span.prio4,
+.messagelist tr > .priority span.prio5,
+.messagelist tr .flag span.flagged,
+.messagelist tr .flag span.unflagged,
+.messagelist tr .flag span.unflagged:hover,
+.messagelist tr > .status span.status,
+.messagelist tr > .status span.msgicon,
+.messagelist tr > .status span.deleted,
+.messagelist tr > .status span.unread,
+.messagelist tr > .status span.unreadchildren,
+.messagelist tr > .subject span.msgicon,
+.messagelist tr > .subject span.deleted,
+.messagelist tr > .subject span.unread,
+.messagelist tr > .subject span.replied,
+.messagelist tr > .subject span.forwarded,
+.messagelist tr > .subject span.unreadchildren {
+	display: inline-block;
+	vertical-align: middle;
+	height: 18px;
+	width: 20px;
+	padding: 0;
+	background: url(images/listicons.png?v=c458.10409) -100px 0 no-repeat;
+}
+
+.messagelist tbody tr .attachment span.attachment {
+	background-position: 0 -996px;
+}
+
+.messagelist thead tr .attachment span.attachment {
+	background-position: -24px -996px;
+}
+
+.messagelist tbody tr .attachment span.report {
+	background-position: -24px -1116px;
+}
+
+.messagelist tbody tr .attachment span.encrypted {
+	background-position: 0 -2272px;
+}
+
+.messagelist thead tr th.priority span.priority {
+	background-position: -25px -1845px;
+}
+
+.messagelist tr td.priority span.prio5 {
+	background-position: -2px -1905px;
+}
+
+.messagelist tr td.priority span.prio4 {
+	background-position: -2px -1885px;
+}
+
+.messagelist tr td.priority span.prio2 {
+	background-position: -2px -1865px;
+}
+
+.messagelist tr td.priority span.prio1 {
+	background-position: -2px -1845px;
+}
+
+/* thread parent message with flagged children */
+.messagelist tbody tr.flaggedroot .flag span {
+	background-position: -23px -1076px;
+}
+
+.messagelist tbody tr .flag span.flagged {
+	background-position: 0 -1036px;
+}
+
+.messagelist thead tr th.flag span.flagged {
+	background-position: -22px -1037px;
+}
+
+.messagelist tr:hover td.status span.msgicon {
+	background-position: -23px -1057px;
+}
+
+.messagelist tr:hover .flag span.unflagged {
+	background-position: -23px -1076px;
+}
+
+.messagelist tr td.subject span.msgicon,
+.messagelist tr td.subject span.unreadchildren {
+	background-position: 0 -1056px;
+	margin: 0 1px 0 0;
+	width: 24px;
+}
+
+.messagelist tr td.subject span.replied {
+	background-position: 0 -1076px;
+}
+
+.messagelist tr td.subject span.forwarded {
+	background-position: 0 -1096px;
+}
+
+.messagelist tr td.subject span.replied.forwarded {
+	background-position: 0 -1116px;
+}
+
+.messagelist tr td.status span.msgicon,
+.messagelist tr td.flag span.unflagged,
+.messagelist tr td.status span.unreadchildren {
+	background-position: 0 1056px; /* no icon */
+}
+/*
+.messagelist tr td.status span.msgicon:hover {
+	background-position: 0 -272px;
+}
+*/
+.messagelist tr td.status span.deleted,
+.messagelist tr:hover td.status span.deleted,
+.messagelist tr td.subject span.deleted {
+	background-position: -21px -1096px;
+}
+
+.messagelist tr td.status span.status,
+.messagelist tr td.status span.unread,
+.messagelist tr td.subject span.unread,
+.messagelist tr td.status span.unread:hover {
+	background-position: 0 -1017px !important;
+}
+
+.messagelist thead tr th.status span.status {
+	background-position: -23px -1017px;
+}
+
+.messagelist tr td div.collapsed {
+	background-position: 0 -1137px;
+	cursor: pointer;
+}
+
+.messagelist tr td div.expanded {
+	background-position: 0 -1157px;
+	cursor: pointer;
+}
+
+.messagelist tr th.threads .listmenu {
+	background-position: 4px -972px;
+	cursor: pointer;
+	width: 24px;
+	height: 21px;
+	overflow: hidden;
+	text-indent: -5000px;
+	margin: -3px -5px -2px -6px;
+	padding: 3px  5px  2px  6px;
+}
+
+.messagelist tr th.threads .listmenu:focus {
+	background-color: rgba(73,180,210,0.7);
+	outline: none;
+}
+
+.messagelist thead tr th.subject,
+.messagelist tbody tr td.subject {
+	width: 99%;
+	white-space: nowrap;
+}
+
+.messagelist tbody tr td.subject a {
+	cursor: default;
+	vertical-align: middle; /* #1487091 */
+}
+
+/* thread parent message with unread children */
+.messagelist tbody tr.unroot td.subject a {
+	text-decoration: underline;
+}
+
+/**** tree indicators ****/
+
+.messagelist tbody tr td span.branch div {
+	display: inline-block;
+}
+
+.messagelist tbody tr td span.branch div.tree {
+	width: 15px;
+}
+
+#listoptions ul.proplist {
+	min-width: 16em;
+}
+
+/**** message view ****/
+
+#mailpreviewframe {
+	display: none;
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0px;
+}
+
+#messagecontframe {
+	border: 0;
+	border-radius: 4px;
+}
+
+#messagecontent {
+	position: absolute;
+	top: 110px;
+	left: 0;
+	width: 100%;
+	bottom: 1px;
+	overflow: auto;
+	-webkit-overflow-scrolling: touch;
+}
+
+#messageheader,
+#composeheaders {
+	position: relative;
+	padding: 3px 0;
+	background: #f9f9f9;
+	border-bottom: 1px solid #dfdfdf;
+}
+
+#mailview-right #messageheader {
+	border-radius: 4px 4px 0 0;
+	padding-left: 78px;
+	/* avoid headers eating up all the vertical space */
+	max-height: 50%;
+	overflow: auto;
+}
+
+h2.subject {
+	font-size: 15px;
+	margin: 0 15em 0 0;
+	padding: 4px 8px 2px 8px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#mailview-right #messageheader h2.subject {
+	margin-left: -56px;
+}
+
+h3.subject {
+	font-size: 14px;
+	margin: 0 15em 0 0;
+	padding: 8px 8px 4px 8px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.headers-table td {
+	color: #666;
+	padding: 1px 8px;
+}
+
+.headers-table td.header,
+.ui-dialog-content.popup span.adr {
+	font-weight: bold;
+}
+
+.headers-table td.header-title {
+	white-space: nowrap;
+}
+
+.headers-table td.header a,
+.ui-dialog-content.popup span.adr a {
+	color: #666;
+	text-decoration: none;
+}
+
+.headers-table td.header a:hover,
+.ui-dialog-content.popup span.adr a:hover {
+	text-decoration: underline;
+}
+
+.headers-table td.subject {
+	color: #333;
+	font-weight: bold;
+}
+
+.headers-table td.header span,
+.ui-dialog-content.popup span.adr {
+	white-space: nowrap;
+}
+
+.headers-table td.header a.morelink {
+	color: #0069a6;
+	white-space: nowrap;
+	font-weight: normal;
+}
+
+.rcmaddcontact {
+	position: relative;
+	top: 1px;
+	margin-left: 0.5em;
+}
+
+.rcmaddcontact imp {
+	width: 20px;
+	height: 13px;
+}
+
+#preview-allheaders {
+	display: none;
+}
+
+#preview-allheaders td.header-title,
+#preview-shortheaders td.header-title {
+	padding-left: 0;
+}
+
+#preview-shortheaders td.header {
+	padding-right: 18px;
+}
+
+.moreheaderstoggle {
+	display: block;
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 18px;
+	padding: 0;
+	outline: none;
+	background: #e9e9e9;
+	border-right: 1px solid #dfdfdf;
+	border-radius: 3px 0 0 0; /* for Opera */
+}
+
+.moreheaderstoggle:focus {
+	background: #66bcd9;
+	border-right-color: #66bcd9;
+}
+
+.moreheaderstoggle .iconlink {
+	display: inline-block;
+	position: absolute;
+	top: 8px;
+	left: 0;
+	width: 18px;
+	height: 16px;
+	background: url(images/buttons.png?v=d70c.9130) -27px -242px no-repeat;
+}
+
+.moreheaderstoggle.remove .iconlink {
+	top: auto;
+	bottom: 5px;
+	background-position: -5px -242px;
+}
+
+#full-headers {
+	position: relative;
+}
+
+div.more-headers {
+	position: absolute;
+	top: -12px;
+	right: 10px;
+	width: 12px;
+	height: 10px;
+	cursor: pointer;
+	background: url(images/buttons.png?v=d70c.9130) center -1579px no-repeat;
+}
+
+div.hide-headers {
+	background-position: center -1590px;
+}
+
+#all-headers {
+	position: relative;
+	margin: 4px 10px;
+	padding: 0;
+	height: 180px;
+	border: 1px solid #ccc;
+	border-radius: 4px;
+	background: #fdfdfd;
+}
+
+#headers-source {
+	display: none;
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	padding: 3px 6px;
+	overflow: auto;
+	text-align: left;
+	color: #333;
+}
+
+#messageheader.previewheader #all-headers {
+	margin-left: 0;
+}
+
+#messageheader.previewheader {
+	position: relative;
+	height: auto;
+	min-height: 52px;
+	padding: 0 0 3px 72px;
+}
+
+#messageheader.previewheader h3.subject {
+	padding: 8px 8px 2px 0;
+}
+
+#messageheader.previewheader #contactphoto {
+	display: block;
+	position: absolute;
+	top: 11px;
+	left: 30px;
+	width: 32px;
+	height: 32px;
+	overflow: hidden;
+	background: url(images/contactpic_32px.png?v=ee80.246) center center no-repeat #fff;
+	border-radius: 3px;
+}
+
+#messageheader.previewheader #contactphoto img {
+	width: 32px;
+	height: auto;
+	border-radius: 3px;
+}
+
+#messageheader .message-headers {
+	min-height: 60px;
+}
+
+#messageheader #contactphoto {
+	display: block;
+	position: absolute;
+	top: 34px;
+	left: 30px;
+	width: 48px;
+	height: 48px;
+	overflow: hidden;
+	border-radius: 4px;
+	border: 1px solid #e6e6e6;
+	background: url(images/contactpic_48px.png?v=1bc4.353) center center no-repeat #fff;
+}
+
+#messageheader #contactphoto img {
+	width: 48px;
+	height: auto;
+	border-radius: 4px;
+}
+
+#messageheader #countcontrols,
+#messageheader #formatcontrols {
+	position: absolute;
+	top: 8px;
+	right: 8px;
+	text-align: right;
+	white-space: nowrap;
+}
+
+#messageheader #formatcontrols {
+	top: 38px;
+	right: 8px;
+}
+
+#messageheader .pagenav .countdisplay {
+	padding-right: 0.5em;
+	white-space: nowrap;
+}
+
+#messagecontent .leftcol,
+#messagepreview .leftcol {
+	margin-right: 252px;
+}
+
+#messagecontent .rightcol,
+#messagepreview .rightcol {
+	position: absolute;
+	right: 8px;
+	width: 230px;
+	min-height: 200px;
+	background: #f0f0f0;
+	padding: 8px;
+	border-radius: 4px;
+	z-index: 1;
+}
+
+#messagecontent .rightcol {
+	margin-top: 8px;
+}
+
+#messagebody {
+	position: relative;
+	margin: 8px;
+}
+
+#messagebody.mailvelope {
+	margin: 0;
+}
+
+#message-objects div,
+#messagebody span.part-notice {
+	margin: 8px;
+}
+
+#message-objects div.notice {
+	display: block;
+	color: #960;
+	border: 1px solid #ffdf0e;
+	background-color: #fef893;
+	background-position: 5px -83px;
+	padding: 6px 12px 6px 30px;
+	white-space: normal;
+}
+
+#message-objects div a.button,
+#messagebody span.part-notice a.button {
+	margin-left: 10px;
+	margin-top: -1px;
+}
+
+div.message-part,
+div.message-htmlpart,
+div.message-partheaders {
+	padding: 10px 2px;
+	border-top: 1px solid #ccc;
+}
+
+#messagebody div:first-child {
+	padding-top: 0;
+	border-top: 0;
+}
+
+div.message-part div.pre {
+	margin: 0;
+	padding: 0;
+	font-family: monospace;
+	font-size: 12px;
+}
+
+div.message-part span.sig {
+	color: #666;
+}
+
+div.message-part blockquote {
+	color: blue;
+	border-left: 2px solid blue;
+	border-right: 2px solid blue;
+	background-color: #F6F6F6;
+	margin: 2px 0;
+	padding: 0 0.4em;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+div.message-part blockquote blockquote {
+	color: green;
+	border-left: 2px solid green;
+	border-right: 2px solid green;
+}
+
+div.message-part blockquote blockquote blockquote {
+	color: #900;
+	border-left: 2px solid #b00;
+	border-right: 2px solid #b00;
+}
+
+div.message-partheaders {
+	margin-top: 8px;
+	padding: 8px 0;
+}
+
+div.message-partheaders .headers-table {
+	width: 100%;
+}
+
+div.message-partheaders .headers-table td.header-title {
+	width: 1%;
+	padding-left: 0;
+	vertical-align: top;
+}
+
+div.message-partheaders .headers-table td.header {
+	width: 99%;
+}
+
+#messagebody > hr {
+	color: #fff;
+	background: #fff;
+	border: 0;
+	border-bottom: 2px solid #f0f0f0;
+}
+
+#messagebody fieldset.image-attachment {
+	border: 0;
+	border-top: 1px solid #ccc;
+	margin-top: 1em;
+}
+
+#messagebody fieldset.image-attachment p > img {
+	max-width: 80%;
+}
+
+#messagebody legend.image-filename {
+	color: #999;
+	font-size: 0.9em;
+	margin: 0 1em;
+}
+
+#messagebody p.image-attachment {
+	position: relative;
+	padding: 1em;
+	margin-bottom: 0;
+	border-top: 1px solid #ccc;
+}
+
+#messagebody p.image-attachment a.image-link {
+	float: left;
+	display: block;
+	margin-right: 2em;
+	min-width: 160px;
+	min-height: 60px;
+	text-align: center;
+}
+
+#messagebody p.image-attachment .image-filename {
+	display: block;
+	font-weight: bold;
+	line-height: 1.6em;
+}
+
+#messagebody p.image-attachment .image-filesize {
+	padding-right: 1em;
+}
+
+#messagebody p.image-attachment .attachment-links a {
+	margin-right: 0.6em;
+}
+
+#messagepartcontainer {
+	position: absolute;
+	top: 0;
+	left: 232px;
+	right: 0;
+	bottom: 0;
+}
+
+#messagepartframe {
+	border: 0;
+	width: 100%;
+	height: 100%;
+}
+
+#messagepartheader {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 220px;
+	bottom: 0;
+}
+
+#messagepartheader table {
+	table-layout: fixed;
+	overflow: hidden;
+}
+
+#messagepartheader table td {
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+#messagepartheader table td.title {
+	width: 60px;
+	padding-right: 0;
+}
+
+
+/*** message composition ***/
+
+#composeview-left {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 200px;
+	bottom: 0;
+}
+
+#composeview-right {
+	position: absolute;
+	top: 0;
+	left: 212px;
+	right: 0;
+	bottom: 0;
+}
+
+#compose-contacts {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0;
+}
+
+#compose-contacts .listsearchbox {
+	display: block;
+}
+
+#compose-contacts #directorylist {
+	border-bottom: 4px solid #c7e3ef;
+}
+
+#compose-contacts .scroller {
+	top: 65px;
+}
+
+#contacts-table {
+	table-layout: fixed;
+}
+
+#contacts-table td {
+	width: 100%;
+}
+
+#contacts-table td span {
+	display: block;
+}
+
+#contacts-table td span.email {
+	display: inline;
+	color: #69939e;
+	font-style: italic;
+	margin-left: 0.5em;
+}
+
+#compose-contacts li a,
+#contacts-table td {
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-position: -100px 0;
+	background-repeat: no-repeat;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#compose-contacts li a {
+	padding-left: 36px;
+}
+
+#contacts-table td.contactgroup a {
+	color: #376572;
+	text-decoration: none;
+}
+
+#contacts-table td.contactgroup a span {
+	display: inline-block;
+	font-size: 16px;
+	font-weight: bold;
+	line-height: 11px;
+	margin-left: 0.3em;
+}
+
+#contacts-table tr:first-child td {
+	border-top: 0;
+}
+
+#compose-contacts li.addressbook a {
+	background-position: 6px -766px;
+}
+
+#compose-contacts li.addressbook a:focus,
+#compose-contacts li.addressbook.selected a {
+	background-position: 6px -791px;
+}
+
+#contacts-table td.contactgroup {
+	background-position: 6px -1553px;
+}
+
+#contacts-table tr.selected td.contactgroup {
+	background-position: 6px -1577px;
+}
+
+#contacts-table td.contact {
+	background-position: 6px -1601px;
+}
+
+#contacts-table tr.selected td.contact {
+	background-position: 6px -1625px;
+}
+
+#compose-content {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0px;
+	overflow: hidden;
+}
+
+#composeheaders {
+	border-radius: 4px 4px 0 0;
+	padding-left: 19px;
+}
+
+#composebuttons {
+	position: absolute;
+	top: 6px;
+	right: 6px;
+	width: auto;
+	white-space: nowrap;
+	z-index: 100;
+}
+
+#composebuttons a.button.extwin {
+	padding: 2px 3px;
+}
+
+.compose-headers {
+	width: 99%;
+	margin-bottom: 2px;
+}
+
+.compose-headers td {
+	padding: 2px 4px;
+}
+
+.compose-headers td.title {
+	width: 11%;
+	white-space: nowrap;
+	padding-left: 6px;
+}
+
+.compose-headers td.title label {
+	float: left;
+}
+
+.compose-headers td.title a.iconbutton {
+	float: right;
+	position: relative;
+	top: -2px;
+	width: 15px;
+}
+
+.compose-headers td.editfield {
+	width: 90%;
+	padding-left: 4px;
+}
+
+.compose-headers td.editfield a.iconlink {
+	margin-left: 0.5em;
+}
+
+.compose-headers td.formlinks {
+	padding: 0 4px;
+}
+
+.compose-headers td.top {
+	vertical-align: top;
+	padding-top: 10px;
+}
+
+.compose-headers td textarea,
+.compose-headers td input {
+	width: 100%;
+	resize: none;
+}
+
+#compose-cc, #compose-bcc, #compose-replyto, #compose-followupto {
+	display: none;
+}
+
+#composeoptions {
+	display: none;
+	padding: 2px 0 0 8px;
+	white-space: normal;
+	border-top: 1px solid #dfdfdf;
+}
+
+.composeoption {
+	color: #666;
+	padding-right: 22px;
+	white-space: nowrap;
+}
+
+#composeoptions .composeoption {
+	display: inline-block;
+	padding: 4px 22px 4px 0;
+}
+
+#composeoptions .composeoption:last-child {
+	padding-right: 4px;
+}
+
+.mozilla .composeoption input {
+	vertical-align: -3px;
+}
+
+#composeview-bottom {
+	position: relative;
+	width: 100%;
+	height: 200px;
+}
+
+#composebodycontainer {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 260px;
+	bottom: 0;
+	border-radius: 0 0 0 4px;
+}
+
+#composebodycontainer.buttons {
+	bottom: 42px;
+}
+
+#composebodycontainer.mailvelope {
+	right: 0;
+	z-index: 10;
+}
+
+#composebodycontainer.mailvelope > iframe[scrolling='no'] {
+	position: relative;
+	top: -12px;
+}
+
+#composebody {
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 99%;
+	border: 0;
+	border-radius: 0 0 0 4px;
+	padding: 4px;
+	resize: none;
+	font-family: monospace;
+	font-size: 9pt;
+	outline: none;
+}
+
+#composebody:active,
+#composebody:focus {
+	box-shadow: inset 0 0 3px 2px rgba(71,135,177, 0.9);
+}
+
+#compose-attachments {
+	position: absolute;
+	right: 0;
+	top: 1px;
+	bottom: 0;
+	width: 240px;
+	background: #f0f0f0;
+	border-style: solid;
+	border-color: #f0f0f0 #f0f0f0 #f0f0f0 #ddd;
+	border-width: 1px;
+	padding: 8px;
+	overflow: auto;
+}
+
+#compose-attachments.droptarget {
+	background-image: url(images/filedrop.png?v=be5d.415);
+	background-position: center bottom;
+	background-repeat: no-repeat;
+}
+
+#compose-attachments.droptarget.hover,
+#compose-attachments.droptarget.active {
+	border-color: #017db4;
+	box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
+}
+
+#compose-attachments.droptarget.hover {
+	background-color: #d9ecf4;
+	box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+}
+
+#compose-attachments .attachment-size {
+	color: #888;
+}
+
+#compose-attachments .hint {
+	color: #666;
+	margin: 0 0 8px;
+}
+
+#composeview-bottom .formbuttons.floating {
+	position: absolute;
+	width: auto;
+	right: 260px;
+	z-index: 200;
+	padding-bottom: 8px;
+}
+
+#composebodycontainer .mce-tinymce {
+	border: 0 !important;
+	margin-top: 1px;
+}
+
+#composebodycontainer .mce-panel {
+	border-color: #ccc !important;
+	background: #f0f0f0;
+}
+
+#composebody_toolbargroup {
+	border-bottom: 1px solid #ddd;
+}
+
+#uploadform a.iconlink {
+	margin-left: 1em;
+	text-indent: -5000px;
+}
+
+#uploadform form div {
+	margin: 4px 0;
+}
+
+
+/**** Styles for widescreen (3-column) view ****/
+
+.widescreen #mailview-top {
+	bottom: 0;
+	width: 400px;
+	height: auto;
+}
+
+.widescreen #mailview-bottom {
+	left: 412px;
+	top:0;
+	border: 1px solid #b2b8bf;
+}
+
+#messagelistheader,
+.widescreen #messagelistfooter #countcontrols,
+.widescreen .messagelist > thead,
+.widescreen .messagelist .branch,
+.widescreen table.fixedcopy {
+	display: none;
+}
+
+.widescreen #messagelistcontainer {
+	top: 34px;
+	overflow-x: hidden;
+}
+
+.widescreen #messagelistheader {
+	display: block;
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	height: 34px;
+	padding: 6px 6px;
+	background: #efefef;
+	border-radius: 4px 4px 0 0;
+	white-space: nowrap;
+	border-bottom: 1px solid #dfdfdf;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.widescreen #messagelistheader .listmenu {
+	margin-right: 8px;
+	vertical-align: middle;
+	line-height: 24px;
+	width: 28px;
+	padding: 0;
+	text-indent: -5000px;
+	overflow: hidden;
+	display: inline-block;
+	background: url(images/listicons.png?v=c458.10409) 0 -2328px no-repeat;
+}
+
+.widescreen #messagelistheader .listmenu:focus {
+	background-color: rgba(128,128,128,0.55);
+	outline: none;
+}
+
+.widescreen #countcontrols {
+	line-height: 24px;
+	display: inline;
+	min-width: 0;
+}
+
+.widescreen #countcontrols span {
+	padding: 0;
+}
+
+.widescreen .pagenavbuttons {
+	position: absolute;
+	top: 4px;
+	right: 6px;
+}
+
+.widescreen .pagenavbuttons a.button {
+	background: none;
+	border: 0;
+	padding: 2px;
+	margin: 0;
+	height: 20px;
+}
+
+.widescreen .pagenavbuttons a.button.pressed {
+	background: inherit;
+}
+
+.widescreen a.listmenu:focus,
+.widescreen .pagenav a.button:focus {
+	border-color: #017db6;
+	outline: none;
+}
+
+.widescreen .messagelist td {
+	border-left: 0;
+	vertical-align: top;
+	padding: 3px 2px !important;
+}
+
+.widescreen .messagelist td.subject {
+	width: 99%;
+	white-space: wrap;
+	position: relative; /* for span.date positioning in Firefox */
+}
+
+.widescreen .messagelist td.threads {
+	width: 20px;
+	vertical-align: bottom;
+}
+
+.widescreen .messagelist td.threads div {
+	padding-bottom: 1px;
+}
+
+.widescreen .messagelist td.flags {
+	width: 22px;
+}
+
+.widescreen .messagelist td.subject span {
+	line-height: 20px;
+}
+
+.widescreen .messagelist td.subject span.date {
+	right: 2px;
+	top: 3px;
+	position: absolute;
+	color: #666;
+}
+
+.widescreen .messagelist td.subject span.fromto {
+	padding-left: 22px;
+	display: block;
+	margin-right: 10em;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	color: #666;
+}
+
+.widescreen .messagelist tr.flagged td.subject span.date,
+.widescreen .messagelist tr.flagged td.subject span.fromto {
+	color: #ff5c33;
+}
+
+.widescreen .messagelist tr.deleted td.subject span.date,
+.widescreen .messagelist tr.deleted td.subject span.fromto {
+	color: #ccc;
+}
+
+.widescreen .messagelist td.subject span.subject {
+	clear: both;
+	display: block;
+	font-size: 12px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.widescreen .messagelist td.flags span {
+	width: 20px;
+	height: 20px;
+	display: block;
+	margin-left: 1px;
+}
+
+.widescreen .messagelist td.flags span.flag {
+	cursor: pointer;
+}
+
+.widescreen .messagelist tr td.subject span.msgicon,
+.widescreen .messagelist tr td.subject span.unreadchildren {
+	width: 20px;
+	height: 20px;
+}
+
+/* move attachments list to the bottom on narrow mail preview page */
+@media screen and (max-width: 800px) {
+  #messagepreview .leftcol {
+    margin-right: 0;
+  }
+  #messagepreview .rightcol {
+    min-height: 0;
+    width: auto;
+    right: 0;
+    position: relative;
+    border-radius: 0;
+    border-bottom: 1px solid #dfdfdf;
+    background-color: #f9f9f9;
+    padding: 5px;
+  }
+  ul.attachmentslist,
+  ul.attachmentslist > li,
+  div.rightcol > div > a.button {
+    vertical-align: middle;
+    display: inline-block;
+    margin-top: 0;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/mail.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#mailview-left{position:absolute;top:0;left:0;width:200px;bottom:0;z-index:1}#mailview-right{position:absolute;top:0;left:212px;right:0;bottom:0}#mailview-right.fullwidth{left:0}#mailview-top{position:absolute;top:0;left:0;right:0;bottom:0}html.ie #mailview-top{overflow:visible}#mailview-bottom{display:none;position:absolute;left:0;bottom:0;right:0;height:0;border-radius:4px;border-top:0}#composeview-right #mailview-bottom{border-radius:0 0 4px 4px}#mailboxcontainer,#messagelistcontainer{position:absolute;top:0;left:0;width:100%;bottom:0;outline:0}#messagelistcontainer{top:0;bottom:30px;overflow:auto}html>/**/body #messagelist{overflow:auto;overflow-x:hidden}#messagelistfooter{position:absolute;bottom:0;left:0;right:0;height:22px;padding:5px 6px 3px;border-top:1px solid #ddd;background:#eaeaea;border-radius:0 0 4px 4px;white-space:nowrap}#messagelistfooter.rightalign{text-align:right}#messagelistfooter #countcontrols{display:inline-block}#messagelistfooter #listcontrols,#messagelistfooter #listselectors{display:inline-block;margin-right:2em;vertical-align:middle}#messagelistfooter #listselectors .menuselector{margin-top:-2px}a.iconbutton.listmode{width:26px;height:20px;background-position:0 -477px}a.iconbutton.threadmode{width:26px;height:20px;background-position:0 -497px}a.iconbutton.listmode.selected{background-position:-26px -477px}a.iconbutton.threadmode.selected{background-position:-26px -497px}#mailboxlist>li:first-child{border-top:0}html.mozilla #mailboxlist>li:first-child{border-radius:4px 4px 0 0}.folderlist li.mailbox.unread>a{padding-right:36px}.folderlist li.unread{font-weight:bold}.folderlist li.recent>a{color:#017cb4}.folderlist li.mailbox .unreadcount{position:absolute;top:3px;right:6px;min-width:1.8em;line-height:15px;padding:2px 4px;background:#6a939f;border-radius:9px;color:#fff;text-align:center;font-weight:bold;text-shadow:none}.folderlist li.mailbox.selected>a .unreadcount{background:#005d76}.folderlist li.mailbox.recent>a .unreadcount{background:#006ca4}#searchfilter{position:absolute;right:256px;width:auto;top:2px}#searchfilter select{height:26px}#mailview-left select.mailboxlist{position:relative;top:10px;width:100%}#messagetoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap}#messagetoolbar.fullwidth{right:0}#messagesearchtools{position:absolute;right:0;top:0}#s_interval{margin:3px 8px}table.messagelist{z-index:1}table.messagelist.fixedcopy{z-index:2}.messagelist thead th:first-child{border-radius:4px 0 0 0}.messagelist tr>.attachment,.messagelist tr>.threads,.messagelist tr>.status,.messagelist tr>.flag,.messagelist tr>.priority{width:20px;padding:2px 3px !important}.messagelist tr>.threads{width:26px}.messagelist tr>.threads+td,.messagelist tr>.threads+th{border-left:0}.messagelist tr>.size{width:60px;text-align:right}.messagelist thead tr th.size{text-align:left}.messagelist tr>.fromto,.messagelist tr>.from,.messagelist tr>.to,.messagelist tr>.cc,.messagelist tr>.replyto{width:200px}.messagelist tr>.date{width:155px}.messagelist tr>.folder{width:135px}.messagelist tr>.hidden{display:none}.messagelist tr.thread.expanded:not(.selected) td{background-color:#ededed}.messagelist tr.unread{font-weight:bold}.messagelist tr.flagged th,.messagelist tr.flagged td,.messagelist tr.flagged td a{color:#f30}.messagelist thead tr th.sortedASC a,.messagelist thead tr th.sortedDESC a{color:#004458;text-decoration:underline;background-image:url(images/listicons.png?v=c458.10409);background-repeat:no-repeat;background-position:right -912px}.messagelist thead tr th.sortedASC a{background-position:right -944px}.messagelist td img{vertical-align:middle;display:inline-block}.messagelist tbody td a{color:#333;text-decoration:none;white-space:nowrap;cursor:default}.messagelist tbody tr td.flag,.messagelist tbody tr td.status,.messagelist tbody tr td.subject span.status{cursor:pointer}.messagelist tr>.flag span,.messagelist tr>.status span,.messagelist tr>.attachment span,.messagelist tr>.priority span{display:block;width:20px;text-indent:-5000px;overflow:hidden}.messagelist tr td div.collapsed,.messagelist tr td div.expanded,.messagelist tr>.threads .listmenu,.messagelist tr .attachment span.attachment,.messagelist tr .attachment span.report,.messagelist tr .attachment span.encrypted,.messagelist tr>.priority span.priority,.messagelist tr>.priority span.prio1,.messagelist tr>.priority span.prio2,.messagelist tr>.priority span.prio3,.messagelist tr>.priority span.prio4,.messagelist tr>.priority span.prio5,.messagelist tr .flag span.flagged,.messagelist tr .flag span.unflagged,.messagelist tr .flag span.unflagged:hover,.messagelist tr>.status span.status,.messagelist tr>.status span.msgicon,.messagelist tr>.status span.deleted,.messagelist tr>.status span.unread,.messagelist tr>.status span.unreadchildren,.messagelist tr>.subject span.msgicon,.messagelist tr>.subject span.deleted,.messagelist tr>.subject span.unread,.messagelist tr>.subject span.replied,.messagelist tr>.subject span.forwarded,.messagelist tr>.subject span.unreadchildren{display:inline-block;vertical-align:middle;height:18px;width:20px;padding:0;background:url(images/listicons.png?v=c458.10409) -100px 0 no-repeat}.messagelist tbody tr .attachment span.attachment{background-position:0 -996px}.messagelist thead tr .attachment span.attachment{background-position:-24px -996px}.messagelist tbody tr .attachment span.report{background-position:-24px -1116px}.messagelist tbody tr .attachment span.encrypted{background-position:0 -2272px}.messagelist thead tr th.priority span.priority{background-position:-25px -1845px}.messagelist tr td.priority span.prio5{background-position:-2px -1905px}.messagelist tr td.priority span.prio4{background-position:-2px -1885px}.messagelist tr td.priority span.prio2{background-position:-2px -1865px}.messagelist tr td.priority span.prio1{background-position:-2px -1845px}.messagelist tbody tr.flaggedroot .flag span{background-position:-23px -1076px}.messagelist tbody tr .flag span.flagged{background-position:0 -1036px}.messagelist thead tr th.flag span.flagged{background-position:-22px -1037px}.messagelist tr:hover td.status span.msgicon{background-position:-23px -1057px}.messagelist tr:hover .flag span.unflagged{background-position:-23px -1076px}.messagelist tr td.subject span.msgicon,.messagelist tr td.subject span.unreadchildren{background-position:0 -1056px;margin:0 1px 0 0;width:24px}.messagelist tr td.subject span.replied{background-position:0 -1076px}.messagelist tr td.subject span.forwarded{background-position:0 -1096px}.messagelist tr td.subject span.replied.forwarded{background-position:0 -1116px}.messagelist tr td.status span.msgicon,.messagelist tr td.flag span.unflagged,.messagelist tr td.status span.unreadchildren{background-position:0 1056px}.messagelist tr td.status span.deleted,.messagelist tr:hover td.status span.deleted,.messagelist tr td.subject span.deleted{background-position:-21px -1096px}.messagelist tr td.status span.status,.messagelist tr td.status span.unread,.messagelist tr td.subject span.unread,.messagelist tr td.status span.unread:hover{background-position:0 -1017px !important}.messagelist thead tr th.status span.status{background-position:-23px -1017px}.messagelist tr td div.collapsed{background-position:0 -1137px;cursor:pointer}.messagelist tr td div.expanded{background-position:0 -1157px;cursor:pointer}.messagelist tr th.threads .listmenu{background-position:4px -972px;cursor:pointer;width:24px;height:21px;overflow:hidden;text-indent:-5000px;margin:-3px -5px -2px -6px;padding:3px 5px 2px 6px}.messagelist tr th.threads .listmenu:focus{background-color:rgba(73,180,210,0.7);outline:0}.messagelist thead tr th.subject,.messagelist tbody tr td.subject{width:99%;white-space:nowrap}.messagelist tbody tr td.subject a{cursor:default;vertical-align:middle}.messagelist tbody tr.unroot td.subject a{text-decoration:underline}.messagelist tbody tr td span.branch div{display:inline-block}.messagelist tbody tr td span.branch div.tree{width:15px}#listoptions ul.proplist{min-width:16em}#mailpreviewframe{display:none;position:absolute;top:0;left:0;width:100%;bottom:0}#messagecontframe{border:0;border-radius:4px}#messagecontent{position:absolute;top:110px;left:0;width:100%;bottom:1px;overflow:auto;-webkit-overflow-scrolling:touch}#messageheader,#composeheaders{position:relative;padding:3px 0;background:#f9f9f9;border-bottom:1px solid #dfdfdf}#mailview-right #messageheader{border-radius:4px 4px 0 0;padding-left:78px;max-height:50%;overflow:auto}h2.subject{font-size:15px;margin:0 15em 0 0;padding:4px 8px 2px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#mailview-right #messageheader h2.subject{margin-left:-56px}h3.subject{font-size:14px;margin:0 15em 0 0;padding:8px 8px 4px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.headers-table td{color:#666;padding:1px 8px}.headers-table td.header,.ui-dialog-content.popup span.adr{font-weight:bold}.headers-table td.header-title{white-space:nowrap}.headers-table td.header a,.ui-dialog-content.popup span.adr a{color:#666;text-decoration:none}.headers-table td.header a:hover,.ui-dialog-content.popup span.adr a:hover{text-decoration:underline}.headers-table td.subject{color:#333;font-weight:bold}.headers-table td.header span,.ui-dialog-content.popup span.adr{white-space:nowrap}.headers-table td.header a.morelink{color:#0069a6;white-space:nowrap;font-weight:normal}.rcmaddcontact{position:relative;top:1px;margin-left:.5em}.rcmaddcontact imp{width:20px;height:13px}#preview-allheaders{display:none}#preview-allheaders td.header-title,#preview-shortheaders td.header-title{padding-left:0}#preview-shortheaders td.header{padding-right:18px}.moreheaderstoggle{display:block;position:absolute;top:0;left:0;bottom:0;width:18px;padding:0;outline:0;background:#e9e9e9;border-right:1px solid #dfdfdf;border-radius:3px 0 0 0}.moreheaderstoggle:focus{background:#66bcd9;border-right-color:#66bcd9}.moreheaderstoggle .iconlink{display:inline-block;position:absolute;top:8px;left:0;width:18px;height:16px;background:url(images/buttons.png?v=d70c.9130) -27px -242px no-repeat}.moreheaderstoggle.remove .iconlink{top:auto;bottom:5px;background-position:-5px -242px}#full-headers{position:relative}div.more-headers{position:absolute;top:-12px;right:10px;width:12px;height:10px;cursor:pointer;background:url(images/buttons.png?v=d70c.9130) center -1579px no-repeat}div.hide-headers{background-position:center -1590px}#all-headers{position:relative;margin:4px 10px;padding:0;height:180px;border:1px solid #ccc;border-radius:4px;background:#fdfdfd}#headers-source{display:none;position:absolute;top:0;left:0;right:0;bottom:0;padding:3px 6px;overflow:auto;text-align:left;color:#333}#messageheader.previewheader #all-headers{margin-left:0}#messageheader.previewheader{position:relative;height:auto;min-height:52px;padding:0 0 3px 72px}#messageheader.previewheader h3.subject{padding:8px 8px 2px 0}#messageheader.previewheader #contactphoto{display:block;position:absolute;top:11px;left:30px;width:32px;height:32px;overflow:hidden;background:url(images/contactpic_32px.png?v=ee80.246) center center no-repeat #fff;border-radius:3px}#messageheader.previewheader #contactphoto img{width:32px;height:auto;border-radius:3px}#messageheader .message-headers{min-height:60px}#messageheader #contactphoto{display:block;position:absolute;top:34px;left:30px;width:48px;height:48px;overflow:hidden;border-radius:4px;border:1px solid #e6e6e6;background:url(images/contactpic_48px.png?v=1bc4.353) center center no-repeat #fff}#messageheader #contactphoto img{width:48px;height:auto;border-radius:4px}#messageheader #countcontrols,#messageheader #formatcontrols{position:absolute;top:8px;right:8px;text-align:right;white-space:nowrap}#messageheader #formatcontrols{top:38px;right:8px}#messageheader .pagenav .countdisplay{padding-right:.5em;white-space:nowrap}#messagecontent .leftcol,#messagepreview .leftcol{margin-right:252px}#messagecontent .rightcol,#messagepreview .rightcol{position:absolute;right:8px;width:230px;min-height:200px;background:#f0f0f0;padding:8px;border-radius:4px;z-index:1}#messagecontent .rightcol{margin-top:8px}#messagebody{position:relative;margin:8px}#messagebody.mailvelope{margin:0}#message-objects div,#messagebody span.part-notice{margin:8px}#message-objects div.notice{display:block;color:#960;border:1px solid #ffdf0e;background-color:#fef893;background-position:5px -83px;padding:6px 12px 6px 30px;white-space:normal}#message-objects div a.button,#messagebody span.part-notice a.button{margin-left:10px;margin-top:-1px}div.message-part,div.message-htmlpart,div.message-partheaders{padding:10px 2px;border-top:1px solid #ccc}#messagebody div:first-child{padding-top:0;border-top:0}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part span.sig{color:#666}div.message-part blockquote{color:blue;border-left:2px solid blue;border-right:2px solid blue;background-color:#f6f6f6;margin:2px 0;padding:0 .4em;overflow:hidden;text-overflow:ellipsis}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}div.message-partheaders{margin-top:8px;padding:8px 0}div.message-partheaders .headers-table{width:100%}div.message-partheaders .headers-table td.header-title{width:1%;padding-left:0;vertical-align:top}div.message-partheaders .headers-table td.header{width:99%}#messagebody>hr{color:#fff;background:#fff;border:0;border-bottom:2px solid #f0f0f0}#messagebody fieldset.image-attachment{border:0;border-top:1px solid #ccc;margin-top:1em}#messagebody fieldset.image-attachment p>img{max-width:80%}#messagebody legend.image-filename{color:#999;font-size:.9em;margin:0 1em}#messagebody p.image-attachment{position:relative;padding:1em;margin-bottom:0;border-top:1px solid #ccc}#messagebody p.image-attachment a.image-link{float:left;display:block;margin-right:2em;min-width:160px;min-height:60px;text-align:center}#messagebody p.image-attachment .image-filename{display:block;font-weight:bold;line-height:1.6em}#messagebody p.image-attachment .image-filesize{padding-right:1em}#messagebody p.image-attachment .attachment-links a{margin-right:.6em}#messagepartcontainer{position:absolute;top:0;left:232px;right:0;bottom:0}#messagepartframe{border:0;width:100%;height:100%}#messagepartheader{position:absolute;top:0;left:0;width:220px;bottom:0}#messagepartheader table{table-layout:fixed;overflow:hidden}#messagepartheader table td{text-overflow:ellipsis;overflow:hidden}#messagepartheader table td.title{width:60px;padding-right:0}#composeview-left{position:absolute;top:0;left:0;width:200px;bottom:0}#composeview-right{position:absolute;top:0;left:212px;right:0;bottom:0}#compose-contacts{position:absolute;top:0;left:0;width:100%;bottom:0}#compose-contacts .listsearchbox{display:block}#compose-contacts #directorylist{border-bottom:4px solid #c7e3ef}#compose-contacts .scroller{top:65px}#contacts-table{table-layout:fixed}#contacts-table td{width:100%}#contacts-table td span{display:block}#contacts-table td span.email{display:inline;color:#69939e;font-style:italic;margin-left:.5em}#compose-contacts li a,#contacts-table td{background-image:url(images/listicons.png?v=c458.10409);background-position:-100px 0;background-repeat:no-repeat;overflow:hidden;text-overflow:ellipsis}#compose-contacts li a{padding-left:36px}#contacts-table td.contactgroup a{color:#376572;text-decoration:none}#contacts-table td.contactgroup a span{display:inline-block;font-size:16px;font-weight:bold;line-height:11px;margin-left:.3em}#contacts-table tr:first-child td{border-top:0}#compose-contacts li.addressbook a{background-position:6px -766px}#compose-contacts li.addressbook a:focus,#compose-contacts li.addressbook.selected a{background-position:6px -791px}#contacts-table td.contactgroup{background-position:6px -1553px}#contacts-table tr.selected td.contactgroup{background-position:6px -1577px}#contacts-table td.contact{background-position:6px -1601px}#contacts-table tr.selected td.contact{background-position:6px -1625px}#compose-content{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}#composeheaders{border-radius:4px 4px 0 0;padding-left:19px}#composebuttons{position:absolute;top:6px;right:6px;width:auto;white-space:nowrap;z-index:100}#composebuttons a.button.extwin{padding:2px 3px}.compose-headers{width:99%;margin-bottom:2px}.compose-headers td{padding:2px 4px}.compose-headers td.title{width:11%;white-space:nowrap;padding-left:6px}.compose-headers td.title label{float:left}.compose-headers td.title a.iconbutton{float:right;position:relative;top:-2px;width:15px}.compose-headers td.editfield{width:90%;padding-left:4px}.compose-headers td.editfield a.iconlink{margin-left:.5em}.compose-headers td.formlinks{padding:0 4px}.compose-headers td.top{vertical-align:top;padding-top:10px}.compose-headers td textarea,.compose-headers td input{width:100%;resize:none}#compose-cc,#compose-bcc,#compose-replyto,#compose-followupto{display:none}#composeoptions{display:none;padding:2px 0 0 8px;white-space:normal;border-top:1px solid #dfdfdf}.composeoption{color:#666;padding-right:22px;white-space:nowrap}#composeoptions .composeoption{display:inline-block;padding:4px 22px 4px 0}#composeoptions .composeoption:last-child{padding-right:4px}.mozilla .composeoption input{vertical-align:-3px}#composeview-bottom{position:relative;width:100%;height:200px}#composebodycontainer{position:absolute;top:0;left:0;right:260px;bottom:0;border-radius:0 0 0 4px}#composebodycontainer.buttons{bottom:42px}#composebodycontainer.mailvelope{right:0;z-index:10}#composebodycontainer.mailvelope>iframe[scrolling='no']{position:relative;top:-12px}#composebody{position:absolute;top:0;left:0;bottom:0;width:99%;border:0;border-radius:0 0 0 4px;padding:4px;resize:none;font-family:monospace;font-size:9pt;outline:0}#composebody:active,#composebody:focus{box-shadow:inset 0 0 3px 2px rgba(71,135,177,0.9)}#compose-attachments{position:absolute;right:0;top:1px;bottom:0;width:240px;background:#f0f0f0;border-style:solid;border-color:#f0f0f0 #f0f0f0 #f0f0f0 #ddd;border-width:1px;padding:8px;overflow:auto}#compose-attachments.droptarget{background-image:url(images/filedrop.png?v=be5d.415);background-position:center bottom;background-repeat:no-repeat}#compose-attachments.droptarget.hover,#compose-attachments.droptarget.active{border-color:#017db4;box-shadow:0 0 3px 2px rgba(71,135,177,0.5)}#compose-attachments.droptarget.hover{background-color:#d9ecf4;box-shadow:0 0 5px 2px rgba(71,135,177,0.9)}#compose-attachments .attachment-size{color:#888}#compose-attachments .hint{color:#666;margin:0 0 8px}#composeview-bottom .formbuttons.floating{position:absolute;width:auto;right:260px;z-index:200;padding-bottom:8px}#composebodycontainer .mce-tinymce{border:0 !important;margin-top:1px}#composebodycontainer .mce-panel{border-color:#ccc !important;background:#f0f0f0}#composebody_toolbargroup{border-bottom:1px solid #ddd}#uploadform a.iconlink{margin-left:1em;text-indent:-5000px}#uploadform form div{margin:4px 0}.widescreen #mailview-top{bottom:0;width:400px;height:auto}.widescreen #mailview-bottom{left:412px;top:0;border:1px solid #b2b8bf}#messagelistheader,.widescreen #messagelistfooter #countcontrols,.widescreen .messagelist>thead,.widescreen .messagelist .branch,.widescreen table.fixedcopy{display:none}.widescreen #messagelistcontainer{top:34px;overflow-x:hidden}.widescreen #messagelistheader{display:block;position:absolute;top:0;left:0;right:0;height:34px;padding:6px 6px;background:#efefef;border-radius:4px 4px 0 0;white-space:nowrap;border-bottom:1px solid #dfdfdf;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widescreen #messagelistheader .listmenu{margin-right:8px;vertical-align:middle;line-height:24px;width:28px;padding:0;text-indent:-5000px;overflow:hidden;display:inline-block;background:url(images/listicons.png?v=c458.10409) 0 -2328px no-repeat}.widescreen #messagelistheader .listmenu:focus{background-color:rgba(128,128,128,0.55);outline:0}.widescreen #countcontrols{line-height:24px;display:inline;min-width:0}.widescreen #countcontrols span{padding:0}.widescreen .pagenavbuttons{position:absolute;top:4px;right:6px}.widescreen .pagenavbuttons a.button{background:0;border:0;padding:2px;margin:0;height:20px}.widescreen .pagenavbuttons a.button.pressed{background:inherit}.widescreen a.listmenu:focus,.widescreen .pagenav a.button:focus{border-color:#017db6;outline:0}.widescreen .messagelist td{border-left:0;vertical-align:top;padding:3px 2px !important}.widescreen .messagelist td.subject{width:99%;white-space:wrap;position:relative}.widescreen .messagelist td.threads{width:20px;vertical-align:bottom}.widescreen .messagelist td.threads div{padding-bottom:1px}.widescreen .messagelist td.flags{width:22px}.widescreen .messagelist td.subject span{line-height:20px}.widescreen .messagelist td.subject span.date{right:2px;top:3px;position:absolute;color:#666}.widescreen .messagelist td.subject span.fromto{padding-left:22px;display:block;margin-right:10em;overflow:hidden;text-overflow:ellipsis;color:#666}.widescreen .messagelist tr.flagged td.subject span.date,.widescreen .messagelist tr.flagged td.subject span.fromto{color:#ff5c33}.widescreen .messagelist tr.deleted td.subject span.date,.widescreen .messagelist tr.deleted td.subject span.fromto{color:#ccc}.widescreen .messagelist td.subject span.subject{clear:both;display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis}.widescreen .messagelist td.flags span{width:20px;height:20px;display:block;margin-left:1px}.widescreen .messagelist td.flags span.flag{cursor:pointer}.widescreen .messagelist tr td.subject span.msgicon,.widescreen .messagelist tr td.subject span.unreadchildren{width:20px;height:20px}@media screen and (max-width:800px){#messagepreview .leftcol{margin-right:0}#messagepreview .rightcol{min-height:0;width:auto;right:0;position:relative;border-radius:0;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;padding:5px}ul.attachmentslist,ul.attachmentslist>li,div.rightcol>div>a.button{vertical-align:middle;display:inline-block;margin-top:0}}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/meta.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+{
+	"name": "Larry",
+	"author": "FLINT / Büro für Gestaltung, Switzerland",
+	"license": "Creative Commons Attribution-ShareAlike",
+	"license-url": "http://creativecommons.org/licenses/by-sa/3.0/"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/print.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,206 @@
+/**
+ * Roundcube webmail styles for message printing
+ *
+ * Copyright (c) 2012, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+body {
+	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	background-color: #fff;
+	color: #000;
+	margin: 2mm;
+}
+
+body, td, th, div, p {
+	font-size: 9pt;
+	color: #000;
+}
+
+h3 {
+	font-size: 18px;
+	color: #000;
+}
+
+a, a:active, a:visited {
+	color: #000;
+}
+
+#header {
+	float: right;
+	margin: 0 5mm 3mm 5mm;
+}
+
+table.headers-table {
+	table-layout: fixed;
+	margin-top: 14px;
+}
+
+table.headers-table tr td {
+	font-size: 9pt;
+	vertical-align: top;
+}
+
+table.headers-table td.header-title {
+	color: #666;
+	padding-right: 4mm;
+	white-space: nowrap;
+}
+
+table.headers-table tr td.subject {
+	font-weight: bold;
+}
+
+#attachment-list {
+	margin-top: 2mm;
+	padding-top: 2mm;
+	border-top: 1pt solid #ccc;
+}
+
+#attachment-list li {
+	font-size: 9pt;
+}
+
+#attachment-list li a {
+	text-decoration: none;
+}
+
+#attachment-list li a:hover {
+	text-decoration: underline;
+}
+
+#messagebody {
+	position: relative;
+	border-top: none;
+}
+
+div.message-part,
+div.message-htmlpart {
+	padding: 2mm 1mm;
+	margin-top: 2mm;
+	margin-bottom: 5mm;
+	border-top: 1pt solid #ccc;
+}
+
+div.message-part a {
+	color: #00c;
+}
+
+div.message-part div.pre {
+	margin: 0;
+	padding: 0;
+	font-family: monospace;
+	font-size: 12px;
+}
+
+div.message-part blockquote {
+	color: blue;
+	border-left: 2px solid blue;
+	border-right: 2px solid blue;
+	background-color: #F6F6F6;
+	margin: 2px 0;
+	padding: 0 0.4em;
+}
+
+div.message-part blockquote blockquote {
+	color: green;
+	border-left: 2px solid green;
+	border-right: 2px solid green;
+}
+
+div.message-part blockquote blockquote blockquote {
+	color: #900;
+	border-left: 2px solid #b00;
+	border-right: 2px solid #b00;
+}
+
+p.image-attachment {
+	position: relative;
+	padding: 1em;
+	border-top: 1px solid #ccc;
+}
+
+p.image-attachment a.image-link {
+	float: left;
+	display: block;
+	margin-right: 2em;
+	min-width: 160px;
+	min-height: 60px;
+	text-align: center;
+}
+
+p.image-attachment .image-filename {
+	display: block;
+	line-height: 1.6em;
+}
+
+p.image-attachment .attachment-links {
+	display: none;
+}
+
+/* contact print */
+#contact-details fieldset {
+	color: #666;
+	border: 1px solid #999;
+	margin-top: 5px;
+}
+
+#contact-details fieldset.contactfieldgroup {
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+
+#contact-details div.row {
+	padding: 2px 0;
+}
+
+#contact-details .contactfieldlabel {
+	display: inline-block;
+	vertical-align: top;
+	width: 150px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#contact-details .contactfieldcontent {
+	display: inline-block;
+	vertical-align: top;
+	font-weight: bold;
+}
+
+#contact-details #contactphoto {
+	float: left;
+	margin: 5px 15px 5px 3px;
+	width: 112px;
+	border: 0;
+	padding: 0;
+}
+
+#contact-details #contactpic {
+	width: 112px;
+	background: white;
+}
+
+#contact-details #contactpic img {
+	max-width: 112px;
+	visibility: inherit;
+}
+
+#contact-details #contacthead {
+	border: 0;
+	margin: 0 16em 0 0;
+	padding: 0;
+}
+
+#contact-details #contacthead > legend {
+	display: none;
+}
+
+#contact-details #contacthead .names span.namefield {
+	font-size: 140%;
+	font-weight: bold;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/print.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;margin:2mm}body,td,th,div,p{font-size:9pt;color:#000}h3{font-size:18px;color:#000}a,a:active,a:visited{color:#000}#header{float:right;margin:0 5mm 3mm 5mm}table.headers-table{table-layout:fixed;margin-top:14px}table.headers-table tr td{font-size:9pt;vertical-align:top}table.headers-table td.header-title{color:#666;padding-right:4mm;white-space:nowrap}table.headers-table tr td.subject{font-weight:bold}#attachment-list{margin-top:2mm;padding-top:2mm;border-top:1pt solid #ccc}#attachment-list li{font-size:9pt}#attachment-list li a{text-decoration:none}#attachment-list li a:hover{text-decoration:underline}#messagebody{position:relative;border-top:0}div.message-part,div.message-htmlpart{padding:2mm 1mm;margin-top:2mm;margin-bottom:5mm;border-top:1pt solid #ccc}div.message-part a{color:#00c}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part blockquote{color:blue;border-left:2px solid blue;border-right:2px solid blue;background-color:#f6f6f6;margin:2px 0;padding:0 .4em}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}p.image-attachment{position:relative;padding:1em;border-top:1px solid #ccc}p.image-attachment a.image-link{float:left;display:block;margin-right:2em;min-width:160px;min-height:60px;text-align:center}p.image-attachment .image-filename{display:block;line-height:1.6em}p.image-attachment .attachment-links{display:none}#contact-details fieldset{color:#666;border:1px solid #999;margin-top:5px}#contact-details fieldset.contactfieldgroup{border:0;padding:0;margin:0}#contact-details div.row{padding:2px 0}#contact-details .contactfieldlabel{display:inline-block;vertical-align:top;width:150px;overflow:hidden;text-overflow:ellipsis}#contact-details .contactfieldcontent{display:inline-block;vertical-align:top;font-weight:bold}#contact-details #contactphoto{float:left;margin:5px 15px 5px 3px;width:112px;border:0;padding:0}#contact-details #contactpic{width:112px;background:white}#contact-details #contactpic img{max-width:112px;visibility:inherit}#contact-details #contacthead{border:0;margin:0 16em 0 0;padding:0}#contact-details #contacthead>legend{display:none}#contact-details #contacthead .names span.namefield{font-size:140%;font-weight:bold}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/settings.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,368 @@
+/**
+ * Roundcube webmail styles for the Settings section
+ *
+ * Copyright (c) 2017-2017, The Roundcube Dev Team
+ * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+#settings-sections {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 200px;
+	bottom: 0;
+}
+
+#pluginbody,
+#settings-right {
+	position: absolute;
+	top: 0;
+	left: 212px;
+	right: 0;
+	bottom: 0;
+}
+
+#sectionslist {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 260px;
+	bottom: 0;
+}
+
+#preferences-box {
+	position: absolute;
+	top: 0;
+	left: 272px;
+	right: 0;
+	bottom: 0;
+}
+
+#preferences-frame {
+	border: 0;
+	border-radius: 4px;
+}
+
+#preferences-details fieldset.advanced legend {
+	position: relative;
+	display: block;
+	width: 100%;
+	cursor: pointer;
+}
+
+#preferences-details fieldset.advanced .propform {
+	display: none;
+}
+
+#preferences-details fieldset.advanced .advanced-toggle {
+	position: absolute;
+	display: block;
+	top: 0px;
+	right: 6px;
+	text-decoration: none;
+	color: #666;
+	font-size: 11px;
+	width: 20px;
+	height: 18px;
+	background: url(images/listicons.png?v=c458.10409) 0 -1157px no-repeat;
+	text-indent: -5000px;
+	overflow: hidden;
+}
+
+#preferences-details fieldset.advanced .collapsed .advanced-toggle {
+	background-position: -24px -1137px;
+}
+
+#sections-table tbody td,
+#sections-table .listitem span,
+#settings-sections .listitem a,
+#settings-sections .tablink a {
+	padding-left: 36px;
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-position: -100px 0;
+	background-repeat: no-repeat;
+}
+
+/* note: support span.tablink because this is used by plugins */
+#settings-sections .listitem a,
+#settings-sections .tablink a {
+	background-position: 6px -862px;
+}
+
+#settings-sections .selected a,
+#settings-sections .tablink.selected a {
+	background-position: 6px -887px;
+}
+
+#settings-sections .preferences a {
+	background-position: 6px -431px;
+}
+
+#settings-sections .preferences.selected a {
+	background-position: 6px -455px;
+}
+
+#settings-sections .folders a {
+	background-position: 6px 2px;
+}
+
+#settings-sections .folders.selected a {
+	background-position: 6px -22px;
+}
+
+#sections-table #rcmrowfolders .section {
+	background-position: 4px 2px;
+}
+
+#sections-table #rcmrowfolders.selected .section {
+	background-position: 4px -22px;
+}
+
+#settings-sections .identities a {
+	background-position: 6px -478px;
+}
+
+#settings-sections .identities.selected a {
+	background-position: 6px -502px;
+}
+
+#settings-sections .filter a {
+	background-position: 6px -1746px;
+}
+
+#settings-sections .filter.selected a {
+	background-position: 6px -1770px;
+}
+
+#settings-sections .password a {
+	background-position: 6px -1795px;
+}
+
+#settings-sections .password.selected a {
+	background-position: 6px -1819px;
+}
+
+#settings-sections .responses a {
+	background-position: 6px -1972px;
+}
+
+#settings-sections .responses.selected a {
+	background-position: 6px -1996px;
+}
+
+#sections-table #rcmrowgeneral .section {
+	background-position: 4px -573px;
+}
+
+#sections-table #rcmrowgeneral.selected .section {
+	background-position: 4px -598px;
+}
+
+#sections-table #rcmrowmailbox .section {
+	background-position: 4px -621px;
+}
+
+#sections-table #rcmrowmailbox.selected .section {
+	background-position: 4px -646px;
+}
+
+#sections-table #rcmrowcompose .section {
+	background-position: 4px -670px;
+}
+
+#sections-table #rcmrowcompose.selected .section {
+	background-position: 4px -695px;
+}
+
+#sections-table #rcmrowmailview .section {
+	background-position: 4px -718px;
+}
+
+#sections-table #rcmrowmailview.selected .section {
+	background-position: 4px -742px;
+}
+
+#sections-table #rcmrowaddressbook .section {
+	background-position: 4px -766px;
+}
+
+#sections-table #rcmrowaddressbook.selected .section {
+	background-position: 4px -791px;
+}
+
+#sections-table #rcmrowserver .section {
+	background-position: 4px -814px;
+}
+
+#sections-table #rcmrowserver.selected .section {
+	background-position: 4px -838px;
+}
+
+#sections-table #rcmrowcalendar .section {
+	background-position: 4px -526px;
+}
+
+#sections-table #rcmrowcalendar.selected .section {
+	background-position: 4px -550px;
+}
+
+#folderslist .boxtitle a.iconbutton.search {
+	background-position: -2px -317px;
+	cursor: pointer;
+	position: absolute;
+	right: 8px;
+	top: 8px;
+	width: 16px;
+}
+
+#folderslist .listsearchbox + .scroller {
+	top: 34px;
+}
+
+.listsearchbox select {
+	width: 100%;
+	margin: 0 0 4px 0;
+}
+
+#folderslist,
+#identitieslist {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 260px;
+	bottom: 0;
+}
+
+#identities-table {
+	width: 100%;
+	table-layout: fixed;
+}
+
+#identities-table tbody td.mail {
+	width: 100%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#identities-table tbody tr.readonly td {
+	font-style: italic;
+}
+
+#folder-details,
+#identity-details {
+	position: absolute;
+	top: 0;
+	left: 272px;
+	right: 0;
+	bottom: 0;
+}
+
+#subscription-table li.root {
+	font-size: 5%;
+	line-height: 5px;
+	height: 5px;
+	padding: 2px;
+}
+
+#subscription-table li input {
+	position: absolute;
+	right: 8px;
+	top: 4px;
+	margin-right: 0;
+}
+
+#subscription-table li a {
+	padding-right: 28px;
+}
+
+.skinselection {
+	display: block;
+}
+
+.skinselection span {
+	display: inline-block;
+	vertical-align: middle;
+	padding-right: 1em;
+}
+
+.skinselection .skinname {
+	font-weight: bold;
+}
+
+.skinselection .skinlicense,
+.skinselection .skinlicense a {
+	font-style: italic;
+	color: #666;
+	text-decoration: none;
+}
+
+.skinselection .skinlicense a:hover {
+	text-decoration: underline;
+}
+
+img.skinthumbnail {
+	width: 64px;
+	height: 64px;
+	border: 1px solid #ccc;
+	background: #fff;
+	border-radius: 4px;
+}
+
+#pluginlist td.version {
+	width: 5em;
+}
+
+.webkit #pluginlist td.version {
+	width: 6em;
+}
+
+#pluginlist td.license,
+#pluginlist td.source {
+	width: 8em;
+}
+
+.webkit #pluginlist td.license,
+.webkit #pluginlist td.source {
+	width: 9em;
+}
+
+#rcmfd_signature {
+	width: 99%;
+	min-width: 390px;
+	font-family: monospace;
+}
+
+#rcmfd_signature_toolbar1 td,
+#rcmfd_signature_toolbar2 td {
+	width: auto;
+}
+
+.mailtoprotohandler-status {
+	padding-left: 1em;
+	font-style: italic;
+}
+
+#pluginlist {
+	table-layout: auto;
+}
+
+#pluginlist th.version {
+	width: 1%;
+}
+
+.readtext {
+	width: 45em;
+	padding: 12px;
+	font-size: 12px;
+}
+
+.readtext > h1,
+.readtext > h2,
+.readtext > h3 {
+	margin-top: 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/settings.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+#settings-sections{position:absolute;top:0;left:0;width:200px;bottom:0}#pluginbody,#settings-right{position:absolute;top:0;left:212px;right:0;bottom:0}#sectionslist{position:absolute;top:0;left:0;width:260px;bottom:0}#preferences-box{position:absolute;top:0;left:272px;right:0;bottom:0}#preferences-frame{border:0;border-radius:4px}#preferences-details fieldset.advanced legend{position:relative;display:block;width:100%;cursor:pointer}#preferences-details fieldset.advanced .propform{display:none}#preferences-details fieldset.advanced .advanced-toggle{position:absolute;display:block;top:0;right:6px;text-decoration:none;color:#666;font-size:11px;width:20px;height:18px;background:url(images/listicons.png?v=c458.10409) 0 -1157px no-repeat;text-indent:-5000px;overflow:hidden}#preferences-details fieldset.advanced .collapsed .advanced-toggle{background-position:-24px -1137px}#sections-table tbody td,#sections-table .listitem span,#settings-sections .listitem a,#settings-sections .tablink a{padding-left:36px;background-image:url(images/listicons.png?v=c458.10409);background-position:-100px 0;background-repeat:no-repeat}#settings-sections .listitem a,#settings-sections .tablink a{background-position:6px -862px}#settings-sections .selected a,#settings-sections .tablink.selected a{background-position:6px -887px}#settings-sections .preferences a{background-position:6px -431px}#settings-sections .preferences.selected a{background-position:6px -455px}#settings-sections .folders a{background-position:6px 2px}#settings-sections .folders.selected a{background-position:6px -22px}#sections-table #rcmrowfolders .section{background-position:4px 2px}#sections-table #rcmrowfolders.selected .section{background-position:4px -22px}#settings-sections .identities a{background-position:6px -478px}#settings-sections .identities.selected a{background-position:6px -502px}#settings-sections .filter a{background-position:6px -1746px}#settings-sections .filter.selected a{background-position:6px -1770px}#settings-sections .password a{background-position:6px -1795px}#settings-sections .password.selected a{background-position:6px -1819px}#settings-sections .responses a{background-position:6px -1972px}#settings-sections .responses.selected a{background-position:6px -1996px}#sections-table #rcmrowgeneral .section{background-position:4px -573px}#sections-table #rcmrowgeneral.selected .section{background-position:4px -598px}#sections-table #rcmrowmailbox .section{background-position:4px -621px}#sections-table #rcmrowmailbox.selected .section{background-position:4px -646px}#sections-table #rcmrowcompose .section{background-position:4px -670px}#sections-table #rcmrowcompose.selected .section{background-position:4px -695px}#sections-table #rcmrowmailview .section{background-position:4px -718px}#sections-table #rcmrowmailview.selected .section{background-position:4px -742px}#sections-table #rcmrowaddressbook .section{background-position:4px -766px}#sections-table #rcmrowaddressbook.selected .section{background-position:4px -791px}#sections-table #rcmrowserver .section{background-position:4px -814px}#sections-table #rcmrowserver.selected .section{background-position:4px -838px}#sections-table #rcmrowcalendar .section{background-position:4px -526px}#sections-table #rcmrowcalendar.selected .section{background-position:4px -550px}#folderslist .boxtitle a.iconbutton.search{background-position:-2px -317px;cursor:pointer;position:absolute;right:8px;top:8px;width:16px}#folderslist .listsearchbox+.scroller{top:34px}.listsearchbox select{width:100%;margin:0 0 4px 0}#folderslist,#identitieslist{position:absolute;top:0;left:0;width:260px;bottom:0}#identities-table{width:100%;table-layout:fixed}#identities-table tbody td.mail{width:100%;overflow:hidden;text-overflow:ellipsis}#identities-table tbody tr.readonly td{font-style:italic}#folder-details,#identity-details{position:absolute;top:0;left:272px;right:0;bottom:0}#subscription-table li.root{font-size:5%;line-height:5px;height:5px;padding:2px}#subscription-table li input{position:absolute;right:8px;top:4px;margin-right:0}#subscription-table li a{padding-right:28px}.skinselection{display:block}.skinselection span{display:inline-block;vertical-align:middle;padding-right:1em}.skinselection .skinname{font-weight:bold}.skinselection .skinlicense,.skinselection .skinlicense a{font-style:italic;color:#666;text-decoration:none}.skinselection .skinlicense a:hover{text-decoration:underline}img.skinthumbnail{width:64px;height:64px;border:1px solid #ccc;background:#fff;border-radius:4px}#pluginlist td.version{width:5em}.webkit #pluginlist td.version{width:6em}#pluginlist td.license,#pluginlist td.source{width:8em}.webkit #pluginlist td.license,.webkit #pluginlist td.source{width:9em}#rcmfd_signature{width:99%;min-width:390px;font-family:monospace}#rcmfd_signature_toolbar1 td,#rcmfd_signature_toolbar2 td{width:auto}.mailtoprotohandler-status{padding-left:1em;font-style:italic}#pluginlist{table-layout:auto}#pluginlist th.version{width:1%}.readtext{width:45em;padding:12px;font-size:12px}.readtext>h1,.readtext>h2,.readtext>h3{margin-top:0}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/styles.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3069 @@
+/**
+ * Roundcube webmail styles for skin "Larry"
+ *
+ * Copyright (c) 2012-2017, The Roundcube Dev Team
+ * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+body {
+	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	font-size: 11px;
+	color: #333;
+	background: #cad2d9;
+	margin: 0;
+}
+
+body.noscroll {
+	/* also avoids bounce effect in Chrome and Safari */
+	overflow: hidden;
+}
+
+.iphone body.noscroll {
+	/* revert on iPhone (#1490551) */
+	overflow: auto;
+}
+
+a {
+	color: #0069a6;
+}
+
+a:visited {
+	color: #0186ba;
+}
+
+img {
+  border: 0;
+}
+
+.voice {
+	position: absolute;
+	border: 0;
+	clip: rect(0 0 0 0);
+	width: 1px;
+	height: 1px;
+	margin: -1px;
+	padding: 0;
+	overflow: hidden;
+}
+
+input,
+textarea,
+select,
+button {
+	font-family: inherit;
+	font-size: inherit;
+	vertical-align: middle;
+}
+
+input[type="text"],
+input[type="password"],
+textarea {
+	margin: 0; /* Safari by default adds a margin */
+	padding: 4px;
+	border: 1px solid #b2b2b2;
+	border-radius: 4px;
+}
+
+input[type="text"]:focus,
+input[type="password"]:focus,
+input.button:focus,
+textarea:focus {
+	border-color: #4787b1;
+	box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+	outline: none;
+}
+
+input[type="text"]:required,
+input[type="password"]:required {
+	border-color: #4787b1;
+}
+
+input.placeholder,
+textarea.placeholder {
+	color: #aaa;
+}
+
+.bold {
+	font-weight: bold;
+}
+
+/* fixes vertical alignment of checkboxes and labels */
+label input + span {
+	vertical-align: middle;
+}
+
+.noselect {
+	user-select: none;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	-ms-user-select: none;
+	-webkit-user-select: none;
+}
+
+/*** buttons ***/
+
+input.button {
+	display: inline-block;
+	margin: 0 2px;
+	padding: 4px 8px;
+	color: #525252;
+	border: 1px solid #c0c0c0;
+	border-radius: 4px;
+	background: #f7f7f7;
+	text-decoration: none;
+	outline: none;
+}
+
+.formbuttons input.button {
+	color: #ddd;
+	font-size: 110%;
+	padding: 4px 12px;
+	border-color: #465864;
+	border-radius: 5px;
+	background: #666666;
+	box-shadow: 0 1px 1px 0 #ccc;
+}
+
+.formbuttons input.button:hover,
+.formbuttons input.button:focus,
+input.button.mainaction:hover,
+input.button.mainaction:focus {
+	color: #f2f2f2;
+	border-color: #465864;
+	box-shadow: 0 0 5px 2px rgba(71,135,177, 0.6);
+}
+
+.formbuttons input.button:active {
+	color: #fff;
+	background: #5f5f5f;
+}
+
+input.button.mainaction {
+	color: #ededed;
+	border-color: #1f262c;
+	background: #2c2f33;
+}
+
+input.button.mainaction:active {
+	color: #fff;
+	background: #515151;
+	background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
+	background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
+	background: linear-gradient(to bottom, #2a2e31 0%, #505050 100%);
+}
+
+input.button[disabled],
+input.button[disabled]:hover,
+input.button.mainaction[disabled] {
+	color: #aaa !important;
+}
+
+input.mainaction {
+	font-weight: bold;
+}
+
+form.smart-upload,
+input.smart-upload {
+	visibility: hidden;
+	width: 1px;
+	height: 1px;
+	opacity: 0;
+}
+
+/** link buttons **/
+
+a.button,
+.buttongroup {
+	display: inline-block;
+	margin: 0 2px;
+	padding: 2px 5px;
+	color: #525252;
+	border: 1px solid #c6c6c6;
+	border-radius: 4px;
+	background: #e6e6e6;
+	text-decoration: none;
+}
+
+.buttongroup {
+	padding: 0;
+	white-space: nowrap;
+}
+
+a.button:focus,
+input.button:focus {
+	border-color: #017db6;
+	box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+	outline: none;
+}
+
+label.disabled,
+a.button.disabled {
+	color: #999;
+}
+
+a.button.disabled,
+input.button.disabled,
+input.button[disabled],
+a.button.disabled:hover,
+input.button.disabled:hover,
+input.button[disabled]:hover {
+	border-color: #c6c6c6;
+}
+
+a.button.disabled span.inner {
+	opacity: 0.4;
+}
+
+.buttongroup a.button {
+	margin: 0;
+	border-width: 0 1px 0 0;
+	border-radius: 0;
+	background: none;
+}
+
+.buttongroup a.button.first,
+.buttongroup a.button:first-child {
+	border-radius: 4px 0 0 4px;
+	border-left: 0;
+}
+
+.buttongroup a.button.last,
+.buttongroup a.button:last-child {
+	border-radius: 0 4px 4px 0;
+	border-right: 0;
+}
+
+a.button.pressed,
+a.button:active,
+input.button:active {
+	background: #f7f7f7;
+}
+
+.pagenav.dark a.button {
+	font-weight: bold;
+	border: 0;
+	background: transparent;
+	margin: 0;
+}
+
+.pagenav.dark a.button.pressed {
+	background: #d8d8d8;
+}
+
+.buttongroup a.button.selected,
+.buttongroup a.button.selected:hover {
+	background: #8a8a8a;
+	border-right-color: #8a8a8a;
+	border-left-color: #555;
+}
+
+.buttongroup a.button:focus,
+.buttongroup a.button.selected:focus {
+	background: #f2f2f2;
+	background: -moz-linear-gradient(top, #49b3d2 0, #66bcd9 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0,#49b3d2), color-stop(100%,#66bcd9));
+	background: -ms-linear-gradient(top, #49b3d2 0, #66bcd9 100%);
+	background: linear-gradient(to bottom, #49b3d2 0, #66bcd9 100%);
+}
+
+.pagenav a.button {
+	padding: 1px 3px;
+	height: 16px;
+	vertical-align: middle;
+	margin-bottom: 1px;
+}
+
+.pagenav .buttongroup a.button,
+.pagenav .buttongroup a.button:hover {
+	padding: 1px 5px;
+	margin-bottom: 0;
+}
+
+a.button span.icon,
+.pagenav a.button span.inner {
+	display: inline-block;
+	width: 16px;
+	height: 13px;
+	text-indent: 1000px;
+	overflow: hidden;
+	background: url(images/buttons.png?v=d70c.9130) -6px -211px no-repeat;
+}
+
+a.button.prevpage span.icon,
+.pagenav a.prevpage span.inner {
+	background-position: -7px -226px;
+}
+
+a.button.nextpage span.icon,
+.pagenav a.nextpage span.inner {
+	background-position: -28px -226px;
+}
+
+a.button.lastpage span.icon,
+.pagenav a.lastpage span.inner {
+	background-position: -28px -211px;
+}
+
+a.button.pageup span.icon,
+.pagenav a.pageup span.inner {
+	background-position: -7px -241px;
+}
+
+a.button.pagedown span.icon,
+.pagenav a.pagedown span.inner {
+	background-position: -29px -241px;
+}
+
+a.button.reply span.icon,
+.pagenav a.reply span.inner {
+	background-position: -7px -256px;
+}
+
+a.button.forward span.icon,
+.pagenav a.forward span.inner {
+	background-position: -29px -256px;
+}
+
+a.button.replyall span.icon,
+.pagenav a.replyall span.inner {
+	background-position: -7px -271px;
+}
+
+a.button.extwin span.icon,
+.pagenav a.extwin span.inner {
+	background-position: -29px -271px;
+}
+
+a.button.changeformat.html span.icon,
+.pagenav a.changeformat.html span.inner {
+	background-position: -7px -1859px;
+}
+a.button.changeformat.html.selected span.icon,
+.pagenav a.changeformat.html.selected span.inner {
+	background-position: -29px -1859px;
+}
+
+a.button.changeformat.text span.icon,
+.pagenav a.changeformat.text span.inner {
+	background-position: -7px -1874px;
+}
+a.button.changeformat.text.selected span.icon,
+.pagenav a.changeformat.text.selected span.inner {
+	background-position: -29px -1874px;
+}
+
+a.button.add span.icon {
+	background-position: -7px -2009px;
+}
+
+a.button.delete span.icon {
+	background-position: -29px -2009px;
+}
+
+.pagenav .countdisplay {
+	display: inline-block;
+	padding: 3px 1em 0 1em;
+	min-width: 16em;
+}
+
+.pagenavbuttons {
+	position: relative;
+	top: -2px;
+}
+
+.pagenav .pagejumper {
+	text-align: center;
+	padding: 3px 0;
+	cursor: default;
+}
+
+a.iconbutton {
+	display: inline-block;
+	width: 20px;
+	height: 18px;
+	text-decoration: none;
+	text-indent: -5000px;
+	background: url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat;
+}
+
+a.iconbutton.disabled {
+	opacity: 0.4;
+	cursor: default;
+}
+
+a.iconbutton.searchicon,
+a.iconbutton.searchoptions {
+	width: 24px;
+	background-position: -2px -317px;
+}
+
+a.iconbutton.searchicon {
+	width: 15px;
+}
+
+a.iconbutton.reset {
+	width: 24px;
+	background-position: -25px -317px;
+}
+
+a.iconbutton.remove,
+a.iconbutton.cancel {
+	background-position: -7px -378px;
+}
+
+a.iconbutton.delete {
+	background-position: -7px -338px;
+}
+
+a.iconbutton.add {
+	background-position: -7px -358px;
+}
+
+a.iconbutton.remove {
+	background-position: -7px -379px;
+}
+
+a.iconbutton.cancel {
+	background-position: -7px -398px;
+}
+
+a.iconbutton.edit {
+	background-position: -7px -418px;
+}
+
+a.iconbutton.upload {
+	background-position: -6px -438px;
+}
+
+
+a.iconlink {
+	display: inline-block;
+	color: #888;
+	text-decoration: none;
+	white-space: nowrap;
+	padding: 2px 8px 2px 20px;
+	background: url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat;
+}
+
+a.iconlink:hover {
+	text-decoration: underline;
+}
+
+a.iconlink.delete {
+	background-position: -7px -337px;
+}
+
+a.iconlink.add {
+	background-position: -7px -357px;
+}
+
+a.iconlink.remove {
+	background-position: -7px -378px;
+}
+
+a.iconlink.cancel {
+	background-position: -7px -397px;
+}
+
+a.iconlink.edit {
+	background-position: -7px -417px;
+}
+
+a.iconlink.upload {
+	background-position: -6px -437px;
+}
+
+
+/*** message bar ***/
+
+#message div.loading,
+#message div.uploading,
+#message div.warning,
+#message div.error,
+#message div.notice,
+#message div.confirmation,
+#message-objects div.notice {
+	color: #555;
+	font-weight: bold;
+	padding: 6px 30px 6px 25px;
+	display: inline-block;
+	white-space: nowrap;
+	background: url(images/messages.png?v=72e9.1264) 0 5px no-repeat;
+	cursor: default;
+}
+
+#message div.warning {
+	color: #960;
+	background-position: 0 -86px;
+}
+
+#message div.error {
+	color: #cf2734;
+	background-position: 0 -57px;
+}
+
+#message div.confirmation {
+	color: #093;
+	background-position: 0 -25px;
+}
+
+#message div.loading {
+	background: url(images/ajaxloader.gif?v=c252.1434) 2px 6px no-repeat;
+}
+
+#message div a,
+#message div span {
+	padding-right: 0.5em;
+	text-decoration: none;
+}
+
+#message div a:hover {
+	text-decoration: underline;
+	cursor: pointer;
+}
+
+#message.statusbar {
+	display: none;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 27px;
+	padding-left: 8px;
+	border-top: 1px solid #ddd;
+	border-radius: 0 0 4px 4px;
+	background: #eaeaea;
+	background: -moz-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eaeaea), color-stop(100%,#c8c8c8));
+	background: -ms-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	background: linear-gradient(to bottom, #eaeaea 0%, #c8c8c8 100%);
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#messagestack {
+	position: absolute;
+	bottom: 20px;
+	right: 12px;
+	z-index: 50000;
+	width: auto;
+	height: auto;
+	max-height: 85%;
+	overflow-y: auto;
+	padding: 2px;
+}
+
+#messagestack div {
+	display: block;
+	position: relative;
+	width: 280px;
+	height: auto;
+	min-height: 16px;
+	margin: 3px 2px 5px 2px;
+	padding: 8px 10px 7px 30px;
+	cursor: default;
+	font-size: 12px;
+	font-weight: bold;
+	border-radius: 4px;
+	border: 1px solid #444;
+	color: #ebebeb;
+
+	background: rgba(64,64,64,0.85);
+	background: -moz-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.9) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(64,64,64,0.85)), color-stop(100%,rgba(48,48,48,0.9)));
+	background: -webkit-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
+	background: -ms-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
+	background: linear-gradient(to bottom, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
+}
+
+#messagestack div:after {
+	content: "";
+	position: absolute;
+	display: block;
+	top: 0;
+	left: 4px;
+	width: 20px;
+	height: 24px;
+	background: url(images/messages_dark.png?v=8e53.601) 0 7px no-repeat;
+}
+
+#messagestack div.error {
+	color: #ff615d;
+}
+
+#messagestack div.error:after {
+	background-position: 0 -55px;
+}
+
+#messagestack div.warning {
+	color: #f4bf0e;
+}
+
+#messagestack div.warning:after {
+	background-position: 0 -84px;
+}
+
+#messagestack div.confirmation {
+	color: #00e05a;
+}
+
+#messagestack div.confirmation:after {
+	background-position: 0 -25px;
+}
+
+#messagestack div.uploading,
+#messagestack div.loading {
+	color: #ddd;
+}
+
+#messagestack div.uploading:after,
+#messagestack div.loading:after {
+	top: 4px;
+	left: 6px;
+	background: url(images/ajaxloader_dark.gif?v=cf1b.1849) 0 4px no-repeat;
+}
+
+#messagestack div.voice {
+	position: absolute;
+	top: -1000px;
+}
+
+#messagestack div a {
+	color: #94c0da;
+}
+
+#messagestack div a:hover {
+	text-decoration: underline;
+	cursor: pointer;
+}
+
+.ui-dialog.error .ui-dialog-title,
+.ui-dialog.warning .ui-dialog-title,
+.ui-dialog.confirmation .ui-dialog-title {
+	padding-left: 25px;
+	background: url(images/messages.png?v=72e9.1264) 0 5px no-repeat;
+}
+
+.ui-dialog.warning .ui-dialog-title {
+	color: #960;
+	background-position: 0 -91px;
+}
+
+.ui-dialog.error .ui-dialog-title {
+	color: #cf2734;
+	background-position: 0 -62px;
+}
+
+.ui-dialog.confirmation .ui-dialog-title {
+	color: #093;
+	background-position: 0 -32px;
+}
+
+.ui-autocomplete {
+	max-height: 160px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+
+/*** basic page layout ***/
+
+#header {
+	overflow-x: hidden; /* Chrome bug #1488851 */
+}
+
+#topline {
+	height: 18px;
+	background-color: #333333;
+	border-bottom: 1px solid #383838;
+	padding: 2px 0 2px 10px;
+	color: #aaa;
+	text-align: center;
+}
+
+#topnav {
+	position: relative;
+	height: 46px;
+	margin-bottom: 10px;
+	padding: 0 0 0 10px;
+	background: #1c1c1c;
+}
+
+#topline a,
+#topnav a {
+	color: #eee;
+	text-decoration: none;
+}
+
+#topline a:hover {
+	text-decoration: underline;
+}
+
+#toplogo {
+	padding-top: 2px;
+	cursor: pointer;
+	border: none;
+}
+
+.topleft {
+	float: left;
+}
+
+.topright {
+	float: right;
+}
+
+.closelink {
+	display: inline-block;
+	padding: 2px 10px 2px 20px;
+}
+
+#topline span.username {
+	padding-right: 1em;
+}
+
+#topline .topleft a {
+	display: inline-block;
+	padding: 2px 0.8em 0 0;
+	color: #aaa;
+}
+
+#topline a.button-logout {
+	display: inline-block;
+	padding: 2px 10px 2px 20px;
+	background: url(images/buttons.png?v=d70c.9130) -6px -193px no-repeat;
+	color: #fff;
+}
+
+#taskbar .button-logout {
+	display: none;
+}
+
+#taskbar a.button-logout span.button-inner {
+	background-position: -2px -1791px;
+}
+
+#taskbar a.button-logout:hover span.button-inner {
+	background-position: -2px -1829px;
+}
+
+
+/*** minimal version of the page header ***/
+
+.minimal #topline {
+	position: fixed;
+	top: -18px;
+	background: #444;
+	z-index: 5000;
+	width: 100%;
+	height: 22px;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.minimal #topline:hover {
+	top: 0px;
+	opacity: 0.94;
+	-webkit-transition: top 0.3s ease-in-out;
+	-moz-transition: top 0.3s ease-in-out;
+	transition: top 0.3s ease-in-out;
+}
+
+.extwin #topline,
+.extwin #topline:hover {
+	position: static;
+	top: 0px;
+	height: 18px;
+	width: auto;
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+	opacity: 0.999;
+}
+
+.minimal #topline a.button-logout {
+	display: none;
+}
+
+.minimal #topline span.username {
+	display: inline-block;
+	padding-top: 2px;
+}
+
+.minimal #topnav {
+	position: relative;
+	top: 4px;
+	height: 42px;
+}
+
+.minimal #taskbar a {
+	position: relative;
+	padding: 10px 10px 0 6px;
+	height: 32px;
+}
+
+.minimal #taskbar .button-logout {
+	display: inline-block;
+}
+
+.minimal #taskbar .button-inner {
+	top: -4px;
+	padding: 0;
+	height: 24px !important;
+	width: 27px;
+	text-indent: -5000px;
+}
+
+#taskbar .tooltip {
+	display: none;
+}
+
+.minimal #taskbar .tooltip {
+	position: absolute;
+	top: -500px;
+	right: 2px;
+	display: inline-block;
+	padding: 2px 8px 3px 8px;
+	background: #444;
+	color: #eee;
+	font-weight: bold;
+	white-space: nowrap;
+	box-shadow: 0 1px 4px 0 #333;
+	z-index: 200;
+	white-space: nowrap;
+}
+
+.minimal #taskbar .tooltip:after {
+	content: "";
+	position: absolute;
+	top: -4px;
+	right: 15px;
+	border-style: solid;
+	border-width: 0 4px 4px;
+	border-color: #444 transparent;
+	/* reduce the damage in FF3.0 */
+	display: block;
+	width: 0;
+	z-index: 251;
+}
+
+.minimal #taskbar a:hover .tooltip {
+	display: block;
+	top: 39px;
+}
+
+
+/*** taskbar ***/
+
+#taskbar {
+	position: relative;
+	padding-right: 18px;
+}
+
+#taskbar a {
+	display: inline-block;
+	height: 34px;
+	padding: 12px 10px 0 6px;
+}
+
+#taskbar a span.button-inner {
+	display: inline-block;
+	font-size: 110%;
+	font-weight: normal;
+	padding: 5px 0 0 34px;
+	height: 19px;
+	background: url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat;
+}
+
+#taskbar a:focus {
+	color: #fff;
+	background-color: rgba(73,180,210,0.7);
+	outline: none;
+}
+
+#taskbar a.button-selected {
+	color: #20a6fb;
+	background-color: #2c2c2c;
+}
+
+#taskbar a.button-mail span.button-inner {
+	background-position: 0 2px;
+}
+
+#taskbar a.button-mail:hover span.button-inner,
+#taskbar a.button-mail.button-selected span.button-inner {
+	background-position: 0 -22px;
+}
+
+#taskbar a.button-addressbook span.button-inner {
+	background-position: 0 -48px;
+}
+
+#taskbar a.button-addressbook:hover span.button-inner,
+#taskbar a.button-addressbook.button-selected span.button-inner {
+	background-position: 0 -72px;
+}
+
+#taskbar a.button-settings span.button-inner {
+	background-position: 0 -96px;
+}
+
+#taskbar a.button-settings:hover span.button-inner,
+#taskbar a.button-settings.button-selected span.button-inner {
+	background-position: 0 -120px;
+}
+
+#taskbar a.button-calendar span.button-inner {
+	background-position: 0 -144px;
+}
+
+#taskbar a.button-calendar:hover span.button-inner,
+#taskbar a.button-calendar.button-selected span.button-inner {
+	background-position: 0 -168px;
+}
+
+#taskbar .minmodetoggle {
+	position: absolute;
+	top: 0;
+	right: 0;
+	display: block;
+	width: 19px;
+	height: 46px;
+	cursor: pointer;
+	background: url(images/buttons.png?v=d70c.9130) -35px -1778px no-repeat;
+}
+
+.minimal #taskbar .minmodetoggle {
+	height: 42px;
+	background-position: -35px -1820px;
+}
+
+#mainscreen {
+	position: absolute;
+	top: 88px;
+	left: 10px;
+	right: 10px;
+	bottom: 20px;
+}
+
+#mainscreencontent {
+	position: absolute;
+	top: 42px;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+
+#mainscreen.offset {
+	top: 132px;
+}
+
+#mainscreen .offset {
+	top: 42px;
+}
+
+.minimal #mainscreen {
+	top: 62px;
+}
+
+.minimal #mainscreen.offset {
+	top: 102px;
+}
+
+.extwin #mainscreen {
+	top: 40px;
+}
+
+.extwin #mainscreen.offset {
+	top: 86px;
+}
+
+.uibox {
+	border: 1px solid #b2b8bf;
+	border-radius: 4px;
+	overflow: hidden;
+	background: #fff;
+}
+
+.minwidth {
+	min-width: 1024px;
+}
+
+.scroller {
+	overflow: auto;
+}
+
+.watermark {
+	background-image: url(images/watermark.jpg?v=e784.5000);
+	background-position: center;
+	background-repeat: no-repeat;
+}
+
+/* fix scrolling within iframes in webkit browsers on touch devices */
+@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px) {
+	.iframebox {
+		overflow: auto;
+		-webkit-overflow-scrolling: touch;
+	}
+}
+
+
+/*** lists ***/
+
+.listbox {
+	background: #d9ecf4;
+	overflow: hidden;
+}
+
+.listbox .scroller {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+.listbox .scroller.withfooter {
+	bottom: 42px;
+}
+
+.listbox .boxtitle + .scroller {
+	top: 34px;
+}
+
+.boxtitle,
+.uibox .listing thead th,
+.uibox .listing thead td {
+	font-size: 12px;
+	font-weight: bold;
+	padding: 7px 8px 6px 8px;
+	line-height: 20px;
+	margin: 0;
+	border-bottom: 1px solid #bbd3da;
+	white-space: nowrap;
+}
+
+.uibox .listing thead th,
+.uibox .listing thead td {
+	padding-bottom: 8px;
+	height: auto;
+}
+
+.uibox .boxtitle,
+.uibox .listing thead th,
+.uibox .listing thead td {
+	background: #b0ccd7;
+	color: #004458;
+	border-radius: 4px 4px 0 0;
+}
+
+.listbox .listitem,
+.listbox .tablink,
+.listing tbody td,
+.listing li {
+	display: block;
+	border-bottom: 1px solid #bbd3da;
+	cursor: default;
+	font-weight: normal;
+}
+
+.listbox .listitem a,
+.listbox .listitem span,
+.listbox .tablink a,
+.listing tbody td,
+.listing li a {
+	display: block;
+	color: #376572;
+	text-decoration: none;
+	cursor: default;
+	padding: 5px 8px;
+	line-height: 17px;
+	height: 17px;
+	white-space: nowrap;
+}
+
+.listing tbody td {
+	display: table-cell;
+	min-height: 14px;
+	outline: none;
+}
+
+.listing tbody td a {
+	color: #376572;
+	text-decoration: none;
+}
+
+.webkit .listing tbody td {
+	height: 14px;
+}
+
+/* This padding-left minus the focused padding left should be half of the focused border-left */
+.listing thead tr td:first-child,
+.listing tbody tr td:first-child {
+	border-left: 2px solid transparent;
+	padding-left: 6px;
+}
+
+.listing.iconized thead tr td:first-child,
+.listing.iconized tbody tr td:first-child {
+	padding-left: 34px;
+}
+
+/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
+.listing.focus tbody tr.focused > td:first-child {
+	border-left: 2px solid #739da8;
+}
+
+.listbox .listitem.selected,
+.listbox .tablink.selected,
+.listbox .listitem.selected > a,
+.listbox .tablink.selected > a,
+.listing tbody tr.selected td,
+.listing li.selected,
+.listing li.selected > a {
+	color: #004458;
+	font-weight: bold;
+	background-color: #c7e3ef;
+}
+
+ul.listing {
+	display: block;
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+ul.listing li {
+	background-color: #d9ecf4;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+ul.listing li ul {
+	border-top: 1px solid #bbd3da;
+}
+
+ul.listing li.droptarget,
+table.listing tr.droptarget td {
+	background-color: #e8e798;
+}
+
+.listbox table.listing {
+	background-color: #d9ecf4;
+}
+
+table.listing,
+table.layout {
+	border: 0;
+	width: 100%;
+	border-spacing: 0;
+}
+
+table.layout td {
+	vertical-align: top;
+}
+
+ul.treelist li {
+	position: relative;
+}
+
+ul.treelist li ul {
+	margin: 0;
+	padding: 0;
+}
+
+ul.treelist li ul li:last-child {
+	border-bottom: 0;
+}
+
+ul.treelist li a {
+	display: block;
+	padding-left: 20px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+ul.treelist li a:focus,
+ul.listing .listitem a:focus,
+ul.listing .listitem span:focus,
+ul.listing.focus .listitem.focused span {
+	color: #fff !important;
+	background-color: rgba(73,180,210,0.6);
+	outline: none;
+}
+
+ul.treelist ul li a {
+	padding-left: 38px;
+}
+
+ul.treelist ul ul li a {
+	padding-left: 54px;
+}
+
+ul.treelist.iconized li a {
+	padding-left: 36px;
+}
+
+ul.treelist.iconized ul li a {
+	padding-left: 62px;
+}
+
+ul.treelist.iconized ul ul li a {
+	padding-left: 88px;
+}
+
+ul.treelist.iconized ul ul ul li a {
+	padding-left: 114px;
+}
+
+ul.treelist li div.treetoggle {
+	position: absolute;
+	top: 7px;
+	left: 4px;
+	width: 13px;
+	height: 13px;
+	background: url(images/listicons.png?v=c458.10409) -3px -144px no-repeat;
+	cursor: pointer;
+}
+
+ul.treelist li ul li div.treetoggle {
+	left: 22px;
+}
+
+ul.treelist.iconized li div.treetoggle {
+	top: 13px;
+	left: 19px;
+}
+
+ul.treelist.iconized ul li div.treetoggle {
+	left: 45px;
+}
+
+ul.treelist.iconized ul ul li div.treetoggle {
+	left: 71px;
+}
+
+ul.treelist li div.treetoggle.expanded {
+	background-position: -3px -168px;
+}
+
+ul.treelist li.selected > div.collapsed {
+	background-position: -23px -144px;
+}
+
+ul.treelist li.selected > div.expanded {
+	background-position: -23px -168px;
+}
+
+.listbox .boxfooter {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 42px;
+	border-top: 1px solid #bbd3da;
+	background: #d9ecf4;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.uibox .boxfooter {
+	border-radius: 0 0 4px 4px;
+}
+
+.boxfooter .listbutton {
+	display: inline-block;
+	text-decoration: none;
+	width: 48px;
+	border-right: 1px solid #fff;
+	background: #c7e3ef;
+	padding: 3px 0;
+	margin-top: 1px;
+}
+
+.boxfooter a.listbutton:focus {
+	color: #fff;
+	background-color: rgba(73,180,210,0.6);
+	outline: none;
+}
+
+.uibox .boxfooter .listbutton:first-child {
+	border-radius: 0 0 0 4px;
+}
+
+.boxfooter .listbutton .inner {
+	display: inline-block;
+	width: 48px;
+	height: 35px;
+	text-indent: -5000px;
+	background-image: url(images/buttons.png?v=d70c.9130);
+	background-position: -1000px 0;
+	background-repeat: no-repeat;
+}
+
+.boxfooter .listbutton.add .inner {
+	background-position: 10px -1301px;
+}
+
+.boxfooter .listbutton.delete .inner {
+	background-position: 10px -1342px;
+}
+
+.boxfooter .listbutton.groupactions .inner {
+	background-position: 5px -1382px;
+}
+
+.boxfooter .listbutton.addto .inner {
+	background-position: 5px -1422px;
+}
+
+.boxfooter .listbutton.addcc .inner {
+	background-position: 5px -1462px;
+}
+
+.boxfooter .listbutton.addbcc {
+	width: 54px;
+}
+
+.boxfooter .listbutton.addbcc .inner {
+	width: 54px;
+	background-position: 2px -1502px;
+}
+
+.boxfooter .listbutton.removegroup .inner {
+	background-position: 5px -1540px;
+}
+
+.boxfooter .listbutton.disabled .inner {
+	opacity: 0.4;
+}
+
+.boxfooter .countdisplay {
+	display: inline-block;
+	position: relative;
+	top: 10px;
+	color: #69929e;
+	padding: 3px 6px;
+}
+
+.boxpagenav {
+	position: absolute;
+	top: 10px;
+	right: 6px;
+	width: auto;
+}
+
+.boxpagenav a.icon {
+	display: inline-block;
+	padding: 1px 3px;
+	height: 13px;
+	width: 14px;
+	text-indent: 1000px;
+	vertical-align: bottom;
+	overflow: hidden;
+	background: url(images/buttons.png?v=d70c.9130) -4px -286px no-repeat;
+}
+
+.boxpagenav a.icon.prevpage {
+	background-position: -4px -301px;
+}
+
+.boxpagenav a.icon.nextpage {
+	background-position: -28px -301px;
+}
+
+.boxpagenav a.icon.lastpage {
+	background-position: -28px -286px;
+}
+
+.boxpagenav a.icon.disabled {
+	opacity: 0.4;
+}
+
+.centerbox {
+	width: 40em;
+	margin: 16px auto;
+}
+
+.errorbox {
+	width: 40em;
+	padding: 20px;
+}
+
+.errorbox h3 {
+	font-size: 16px;
+	margin-top: 0;
+}
+
+
+/*** Records table ***/
+
+table.records-table {
+	display: table;
+	width: 100%;
+	table-layout: fixed;
+	border-spacing: 0;
+	border: 1px solid #bbd3da;
+}
+
+.boxlistcontent .records-table {
+	border: 0;
+}
+
+.records-table thead th,
+.records-table thead td {
+	color: #69939e;
+	font-size: 11px;
+	font-weight: bold;
+	background: #d6eaf3;
+	border-left: 1px solid #bbd3da;
+	padding: 8px 7px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	text-align: left;
+}
+
+.records-table.sortheader thead th,
+.records-table.sortheader thead td {
+	padding: 0;
+}
+
+.records-table thead th a,
+.records-table thead td a,
+.records-table thead th span,
+.records-table thead td span {
+	display: block;
+	padding: 7px 7px;
+	color: #69939e;
+	text-decoration: none;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.records-table thead th a:focus,
+.records-table thead td a:focus {
+	color: #fff;
+	background-color: rgba(73,180,210,0.7);
+	outline: none;
+}
+
+.records-table tbody td {
+	padding: 2px 7px;
+	border-bottom: 1px solid #ddd;
+	border-left: 1px dotted #bbd3da;
+	white-space: nowrap;
+	cursor: default;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	background-color: #fff;
+	outline: none;
+}
+
+/* This padding-left minus the focused padding left should be half of the focused border-left */
+.records-table thead tr th:first-child,
+.records-table thead tr td:first-child,
+.records-table tbody tr td:first-child {
+	border-left: 2px solid transparent;
+	padding-left: 4px;
+}
+
+/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
+.records-table.focus tbody tr.focused > td:first-child {
+	border-left: 2px solid #49b3d2;
+}
+
+.records-table tr.selected td {
+	color: #fff !important;
+	background-color: #4db0d2;
+}
+
+.records-table.focus tr.selected td {
+	background-color: #017db6 !important;
+}
+
+.records-table tr.selected td a,
+.records-table tr.selected td span {
+	color: #fff !important;
+}
+
+.records-table tr.deleted td,
+.records-table tr.deleted td a {
+	color: #ccc !important;
+}
+
+/*** iFrames ***/
+
+#aboutframe {
+	width: 97%;
+	height: 100%;
+	border: 0;
+	padding: 0;
+}
+
+body.iframe {
+	background: #fff;
+	margin: 38px 0 10px 0;
+}
+
+body.iframe.error {
+	background: #ededed;
+}
+
+body.iframe.floatingbuttons {
+	margin-bottom: 40px;
+}
+
+body.iframe.fullheight {
+	margin: 0;
+}
+
+.contentbox .boxtitle,
+body.iframe .boxtitle {
+	color: #777;
+	background: #efefef;
+	border-bottom: 1px solid #d0d0d0;
+}
+
+body.iframe .boxtitle {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	z-index: 100;
+}
+
+body.iframe .footerleft.floating,
+#composeview-bottom .formbuttons.floating {
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	z-index: 110;
+	background: #fff;
+	padding-top: 8px;
+	padding-bottom: 12px;
+}
+
+body.iframe .footerleft.floating:before,
+#composeview-bottom .formbuttons.floating:before {
+	content: " ";
+	position: absolute;
+	top: -6px;
+	left: 0;
+	width: 100%;
+	height: 6px;
+	background: url(images/overflowshadow.png?v=ac21.201) top center no-repeat;
+}
+
+.boxcontent {
+	padding: 10px;
+}
+
+.boxcontent .boxwarning {
+	margin: 0 0 10px;
+	display: block;
+	color: #960;
+	border: 1px solid #ffdf0e;
+	background: url(images/messages.png?v=72e9.1264) #fef893 5px -85px no-repeat;
+	padding: 6px 12px 6px 30px;
+}
+
+.contentbox .scroller {
+	position: absolute;
+	top: 34px;
+	left: 0;
+	right: 0;
+	bottom: 0px;
+	overflow: auto;
+}
+
+.iframebox {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0px;
+}
+
+.footerleft {
+	padding: 0 12px 4px 12px;
+}
+
+.propform fieldset {
+	margin-bottom: 20px;
+	border: 0;
+	padding: 0;
+}
+
+.propform fieldset legend {
+	display: block;
+	font-size: 14px;
+	font-weight: bold;
+	padding-bottom: 10px;
+	margin-bottom: 0;
+}
+
+.propform fieldset fieldset legend {
+	color: #666;
+	font-size: 12px;
+}
+
+.propform div.prop {
+	margin-bottom: 0.5em;
+}
+
+.propform div.prop.block label {
+	display: block;
+	margin-bottom: 0.3em;
+}
+
+.propform div.prop.block input,
+.propform div.prop.block textarea {
+	width: 95%;
+}
+
+.propform a.disabled {
+	color: #999;
+	text-decoration: none;
+	cursor: default;
+}
+
+fieldset.floating {
+	float: left;
+	margin-right: 10px;
+	margin-bottom: 10px;
+}
+
+table.propform {
+	width: 100%;
+	border-spacing: 0;
+	border-collapse: collapse;
+}
+
+ul.proplist li,
+table.propform td {
+	width: 80%;
+	padding: 4px 10px;
+	background: #eee;
+	border-bottom: 2px solid #fff;
+}
+
+table.propform td.title {
+	width: 20%;
+	color: #333;
+	padding-right: 20px;
+	white-space: nowrap;
+}
+
+table.propform .mceLayout td {
+	padding: 0;
+	border-bottom: 0;
+}
+
+ul.proplist {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+ul.proplist li {
+	width: auto;
+}
+
+#pluginbody {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+
+
+/*** Login form ***/
+
+#login-form {
+	position: relative;
+	width: 580px;
+	margin: 20ex auto 2ex auto;
+}
+
+#login-form .box-inner {
+	width: 430px;
+	background: #404040;
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #404040), color-stop(100%, #2e2e2e));
+	background: -ms-linear-gradient(top, #404040 0%, #2e2e2e 100%);
+	background: linear-gradient(to bottom, #404040 0%, #2e2e2e 100%);
+	margin: 0 50px;
+	padding: 10px 24px 24px 24px;
+	border-radius: 6px;
+}
+
+#login-form .box-bottom {
+	margin-top: -3px;
+	padding-top: 10px;
+}
+
+#login-form .noscriptwarning {
+	margin: 0 auto;
+	width: 430px;
+	color: #cf2734;
+	font-size: 110%;
+	font-weight: bold;
+}
+
+#login-form td.input {
+	width: 80%;
+	padding: 8px;
+}
+
+#login-form input[type="text"],
+#login-form input[type="password"] {
+	width: 100%;
+	border-color: #666;
+}
+
+#login-form input.button {
+	color: #444;
+	border-color: #f9f9f9;
+	background-color: #f9f9f9;
+}
+
+#login-form input.button:active {
+	color: #333;
+	background-color: #dcdcdc;
+}
+
+#login-form form table {
+	width: 98%;
+}
+
+#login-form td.title {
+	width: 20%;
+	white-space: nowrap;
+	color: #cecece;
+	text-align: right;
+	padding-right: 1em;
+}
+
+#login-form p.formbuttons {
+	margin-top: 2em;
+	text-align: center;
+}
+
+#login-form #logo {
+	margin-bottom: 20px;
+	border: none;
+}
+
+#login-form #message {
+	min-height: 40px;
+	padding: 5px 25px;
+	text-align: center;
+	font-size: 1.1em;
+}
+
+#login-form #message div {
+	display: inline-block;
+	padding-right: 0;
+	font-size: 12px;
+}
+
+#bottomline {
+	font-size: 90%;
+	text-align: center;
+	margin-top: 2em;
+}
+
+
+
+/*** quicksearch **/
+
+.searchbox {
+	position: relative;
+}
+
+#quicksearchbar {
+	position: absolute;
+	right: 2px;
+	top: 2px;
+	width: 240px;
+}
+
+.searchbox input,
+#quicksearchbar input {
+	width: 176px;
+	margin: 0;
+	padding: 3px 30px 3px 34px;
+	height: 18px;
+	background: #f1f1f1;
+	border-color: #ababab;
+	font-weight: bold;
+	font-size: 11px;
+}
+
+.searchbox .searchicon,
+.searchbox #searchmenulink,
+#quicksearchbar #searchmenulink {
+	position: absolute;
+	top: 5px;
+	left: 6px;
+}
+
+.searchbox #searchreset,
+.searchbox .iconbutton.reset,
+#quicksearchbar #searchreset {
+	position: absolute;
+	top: 4px;
+	right: 1px;
+}
+
+.listsearchbox {
+	padding: 4px;
+	background: #c7e3ef;
+	display: none;
+}
+
+.listsearchbox input {
+	width: 100%;
+	height: 26px;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+/*** toolbar ***/
+
+.toolbar .spacer {
+	display: inline-block;
+	width: 24px;
+	height: 40px;
+	padding: 0;
+}
+
+.toolbar a.button {
+	text-align: center;
+	font-size: 10px;
+	color: #555;
+	min-width: 50px;
+	max-width: 70px;
+	height: 13px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	padding: 28px 2px 0 2px;
+	background: url(images/buttons.png?v=d70c.9130) -100px 0 no-repeat transparent;
+	border: 0;
+	border-radius: 0;
+}
+
+.dropbutton .dropbuttontip:focus,
+.toolbar a.button:focus {
+	color: #fff;
+	background-color: rgba(30,150,192, 0.5);
+	border-radius: 3px;
+}
+
+.toolbar a.button.disabled {
+	opacity: 0.4;
+}
+
+.toolbar a.button.selected {
+	color: #1978a1;
+}
+
+.toolbar a.button.selected:focus {
+	color: #fff;
+}
+
+.toolbar a.button.hidden {
+	display: none;
+}
+
+.dropbutton {
+	display: inline-block;
+	position: relative;
+}
+
+.dropbutton .dropbuttontip {
+	display: block;
+	position: absolute;
+	right: 0;
+	top: 0;
+	height: 41px;
+	width: 18px;
+	overflow: hidden;
+	text-indent: -5000px;
+	background: url(images/buttons.png?v=d70c.9130) 0 -1255px no-repeat;
+	cursor: pointer;
+	outline: none;
+}
+
+.dropbutton .dropbuttontip:focus,
+.dropbutton .dropbuttontip:hover {
+	background-position: -26px -1255px;
+}
+
+.dropbutton a.button.disabled + .dropbuttontip {
+	opacity: 0.5;
+}
+
+.dropbutton a.button.disabled + .dropbuttontip:hover {
+	background-position: 0 -1255px;
+}
+
+.dropbutton a.button {
+    margin-left: 0;
+    padding-left: 0;
+    margin-right: 0;
+    padding-right: 0;
+}
+
+.toolbar a.button.back {
+	background-position: 0 -1216px;
+}
+
+.toolbar a.button.checkmail {
+	background-position: center -1176px;
+}
+
+.toolbar a.button.compose {
+	background-position: center -530px;
+}
+
+.toolbar a.button.reply {
+	background-position: center -570px;
+}
+
+.toolbar a.button.reply-all {
+	min-width: 64px;
+	background-position: 0 -610px;
+}
+
+.toolbar a.button.forward {
+	min-width: 64px;
+	background-position: 0 -650px;
+}
+
+.toolbar a.button.delete {
+	background-position: center -690px;
+}
+
+.toolbar a.button.archive {
+	background-position: center -730px;
+}
+
+.toolbar a.button.junk {
+	background-position: center -770px;
+}
+
+.toolbar a.button.print {
+	background-position: center -810px;
+}
+
+.toolbar a.button.markmessage {
+	background-position: center -1094px;
+}
+
+.toolbar a.button.move {
+	background-position: center -1971px;
+}
+
+.toolbar a.button.more {
+	background-position: center -850px;
+}
+
+.toolbar a.button.attach {
+	background-position: center -890px;
+}
+
+.toolbar a.button.spellcheck {
+	min-width: 64px;
+	background-position: 0 -930px;
+}
+
+.toolbar a.button.spellcheck.selected {
+	background-position: 0 -1620px;
+	color: #1978a1;
+}
+
+.toolbar a.button.insertsig {
+	background-position: center -1135px;
+}
+
+.toolbar a.button.search {
+	background-position: center -970px;
+}
+
+.toolbar a.button.import {
+	background-position: center -1012px;
+}
+
+.toolbar a.button.export {
+	min-width: 64px;
+	background-position: 0 -1054px;
+}
+
+.toolbar a.button.send {
+	background-position: center -1660px;
+}
+
+.toolbar a.button.savedraft {
+	background-position: center -1700px;
+}
+
+.toolbar a.button.close {
+	background-position: 0 -1745px;
+}
+
+.toolbar a.button.download {
+	background-position: center -1892px;
+}
+
+.toolbar a.button.responses {
+	background-position: center -1932px;
+}
+
+.toolbar a.button.encrypt {
+	background-position: center -2025px;
+}
+
+.toolbar a.button.encrypt.selected {
+	background-position: center -2065px;
+}
+
+a.menuselector {
+	display: inline-block;
+	border: 1px solid #ababab;
+	border-radius: 4px;
+	background: #f1f1f1;
+	text-decoration: none;
+	color: #333;
+	cursor: pointer;
+	white-space: nowrap;
+}
+
+a.menuselector .handle {
+	display: inline-block;
+	padding: 0 32px 0 6px;
+	height: 20px;
+	line-height: 19px;
+	background: url(images/selector.png?v=0d5b.118) right center no-repeat;
+	border-radius: 4px;
+}
+
+a.menuselector:active {
+	background: #dddddd;
+	background: -moz-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dddddd), color-stop(100%,#f8f8f8));
+	background: -ms-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	background: linear-gradient(to bottom, #dddddd 0%, #f8f8f8 100%);
+	text-decoration: none;
+}
+
+select.decorated {
+	position: relative;
+	z-index: 10;
+	opacity: 0;
+	height: 22px;
+	cursor: pointer;
+	-khtml-appearance: none;
+	-webkit-appearance: none;
+	border: 0;
+}
+
+html.opera select.decorated {
+	opacity: 1;
+}
+
+select.decorated option {
+	color: #fff;
+	background: #444;
+	border: 0;
+	border-top: 1px solid #5a5a5a;
+	border-bottom: 1px solid #333;
+	padding: 4px 6px;
+	outline: none;
+	cursor: default;
+}
+
+
+a.menuselector:focus,
+a.menuselector.focus,
+a.iconbutton:focus,
+.pagenav a.button:focus {
+	border-color: #0883d0;
+	box-shadow: 0 0 4px 2px rgba(71,135,177, 0.8);
+	outline: none;
+}
+
+
+/*** quota indicator ***/
+
+#quotadisplay {
+	left: 6px;
+	height: 18px;
+	font-size: 12px;
+	font-weight: bold;
+	padding-left: 30px;
+	background: url(images/quota.png?v=aaa4.1389) -100px 0 no-repeat;
+}
+
+#quotadisplay.p90,
+#quotadisplay.p100 {
+    color: #e03221;
+}
+
+table.quota-info {
+	border-spacing: 0;
+	border-collapse: collapse;
+	table-layout: fixed;
+	margin: 5px;
+}
+
+table.quota-info td,
+table.quota-info th {
+	color: white;
+	border: 1px solid lightgrey;
+	padding: 2px 3px;
+	text-align: center;
+	min-width: 80px;
+}
+
+table.quota-info td.name {
+	text-align: left;
+}
+
+table.quota-info td.root {
+	font-style: italic;
+}
+
+/*** popup menus ***/
+
+.popupmenu,
+#rcmKSearchpane {
+	display: none;
+	position: absolute;
+	top: 32px;
+	left: 90px;
+	width: auto;
+	max-height: 70%;
+	overflow: -moz-scrollbars-vertical;
+	overflow-y: auto;
+	background: #444;
+	z-index: 240;
+	border-radius: 4px;
+	box-shadow: 0 2px 6px 0 #333;
+}
+
+.popupmenu.dropdown {
+	border-radius: 0 0 4px 4px;
+	border-top: 0;
+}
+
+.popupmenu > .buttons {
+	border-top: 1px solid #5a5a5a;
+	height: 25px;
+	padding-top: 5px;
+	text-align: center;
+}
+
+ul.toolbarmenu,
+ul.toolbarmenu ul,
+#rcmKSearchpane ul {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+
+.googie_list td,
+ul.toolbarmenu li,
+#rcmKSearchpane ul li {
+	color: #fff;
+	white-space: nowrap;
+	min-width: 130px;
+	margin: 0;
+	border-top: 1px solid #5a5a5a;
+}
+
+.googie_list tr:first-child td,
+ul.toolbarmenu > li:first-child,
+select.decorated option:first-child {
+	border-top: 0;
+}
+
+.googie_list tr:last-child td,
+ul.toolbarmenu > li:last-child,
+select.decorated option:last-child {
+	border-bottom: 0;
+}
+
+.googie_list td span,
+ul.toolbarmenu li a {
+	display: block;
+	color: #666;
+	text-decoration: none;
+	min-height: 14px;
+	padding: 6px 16px 6px 10px;
+}
+
+.googie_list td span {
+	padding: 3px 10px;
+}
+
+.googie_list td span,
+ul.toolbarmenu li a.active {
+	color: #fff;
+	cursor: default;
+}
+
+.googie_list td.googie_list_onhover,
+ul.toolbarmenu li a.active:hover,
+ul.toolbarmenu li a.active:focus,
+#rcmKSearchpane ul li.selected,
+#pagejump-selector ul li.selected,
+select.decorated option:hover,
+select.decorated option[selected='selected'] {
+	background-color: #0883d0;
+	outline: none;
+}
+
+ul.toolbarmenu.iconized li a,
+ul.toolbarmenu.selectable li a {
+	padding-left: 30px;
+}
+
+ul.toolbarmenu.selectable li a.selected {
+	background: url(images/messages.png?v=72e9.1264) 4px -27px no-repeat;
+}
+
+ul.toolbarmenu li label {
+	display: block;
+	color: #fff;
+	padding: 4px 8px;
+}
+
+ul.toolbarmenu li.separator label {
+	color: #bbb;
+	font-style: italic;
+	padding: 0 8px;
+	line-height: 17px;
+}
+
+ul.toolbarmenu li input {
+	margin: 0;
+}
+
+ul.toolbarmenu li a.icon {
+	color: #eee;
+	padding: 2px 6px;
+}
+
+ul.toolbarmenu li span.icon,
+#rcmKSearchpane ul li i.icon {
+	display: block;
+	min-height: 14px;
+	padding: 4px 4px 1px 24px;
+	height: 17px;
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-position: -100px 0;
+	background-repeat: no-repeat;
+	opacity: 0.2;
+}
+
+ul.toolbarmenu li a.active span.icon {
+	opacity: 0.99;
+}
+
+ul.toolbarmenu li span.read {
+	background-position: 0 -1220px;
+}
+
+ul.toolbarmenu li span.unread {
+	background-position: 0 -1196px;
+}
+
+ul.toolbarmenu li span.flagged {
+	background-position: 0 -1244px;
+}
+
+ul.toolbarmenu li span.unflagged {
+	background-position: 0 -1268px;
+}
+
+ul.toolbarmenu li span.mail {
+	background-position: 0 -1293px;
+}
+
+ul.toolbarmenu li span.list {
+	background-position: 0 -1317px;
+}
+
+ul.toolbarmenu li span.invert {
+	background-position: 0 -1340px;
+}
+
+ul.toolbarmenu li span.cross {
+	background-position: 0 -1365px;
+}
+
+ul.toolbarmenu li span.print {
+	background-position: 0 -1436px;
+}
+
+ul.toolbarmenu li span.download {
+	background-position: 0 -1412px;
+}
+
+ul.toolbarmenu li span.rename {
+	background-position: 0 -2295px;
+}
+
+ul.toolbarmenu li span.edit {
+	background-position: 0 -1388px;
+}
+
+ul.toolbarmenu li span.viewsource {
+	background-position: 0 -1460px;
+}
+
+ul.toolbarmenu li span.extwin {
+	background-position: 0 -1484px;
+}
+
+ul.toolbarmenu li span.conversation {
+	background-position: 0 -1532px;
+}
+
+ul.toolbarmenu li span.move {
+	background-position: 0 -2126px;
+}
+
+ul.toolbarmenu li span.copy {
+	background-position: 0 -2150px;
+}
+
+#pagejump-selector {
+	max-height: 250px;
+	overflow-x: hidden;
+}
+
+#pagejump-selector ul li {
+	min-width: 45px;
+	padding: 4px 6px;
+	cursor: default;
+}
+
+#snippetslist {
+	max-width: 200px;
+}
+
+#snippetslist li a {
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#rcmKSearchpane {
+	border-radius: 0 0 4px 4px;
+	border-top: 0;
+}
+
+#rcmKSearchpane ul li {
+	text-decoration: none;
+	min-height: 14px;
+	padding: 6px 10px 6px 28px;
+	border: 0;
+	cursor: default;
+	position: relative;
+}
+
+#rcmKSearchpane ul li i.icon {
+	opacity: 0.99;
+	position: absolute;
+	top: 4px;
+	left: 5px;
+	width: 18px;
+	height: 18px;
+	padding: 0;
+	background-position: -1px -2223px;
+}
+
+#rcmKSearchpane ul li.group i.icon {
+	background-position: -1px -2247px;
+}
+
+.popupdialog {
+	display: none;
+	padding: 10px;
+}
+
+.popupdialog .formbuttons {
+	margin: 20px 0 4px 0;
+}
+
+.ui-dialog .prompt input {
+	display: block;
+	margin: 8px 0;
+}
+
+.hint {
+	margin: 4px 0;
+	color: #999;
+}
+
+.splitter {
+	user-select: none;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	position: absolute;
+	background: url(images/splitter.png?v=6d32.134) center no-repeat;
+}
+
+.splitter-h {
+	height: 10px;
+	width: 100%;
+	cursor: n-resize;
+	cursor: row-resize;
+	background-position: center 0;
+}
+
+.splitter-v {
+	width: 10px;
+	height: 100%;
+	cursor: e-resize;
+	cursor: col-resize;
+	background-position: 0 center;
+}
+
+#rcmdraglayer {
+	min-width: 260px;
+	width: auto !important;
+	width: 260px;
+	padding: 6px 8px;
+	background: #444;
+	border: 1px solid #555;
+	border-radius: 4px;
+	box-shadow: 0 2px 6px 0 #333;
+	z-index: 250;
+	color: #ccc;
+	white-space: nowrap;
+	opacity: 0.92;
+}
+
+#rcmdraglayer:after {
+	content: "";
+	position: absolute;
+	top: 6px;
+	left: -6px;
+	border-style: solid;
+	border-width: 6px 6px 6px 0;
+	border-color: transparent #444;
+	/* reduce the damage in FF3.0 */
+	display: block; 
+	width: 0;
+	z-index: 251;
+}
+
+.draglayercopy:before {
+	position: absolute;
+	bottom: -6px;
+	left: -6px;
+	content: " ";
+	width: 16px;
+	height: 16px;
+	background: url(images/buttons.png?v=d70c.9130) -7px -358px no-repeat;
+	z-index: 255;
+}
+
+.popup label > input {
+	margin-left: 10px;
+}
+
+/*** folder selector ***/
+
+#folder-selector {
+	z-index: 1000;
+}
+
+#folder-selector li a span {
+	background: url(images/listicons.png?v=c458.10409) 4px -2021px no-repeat;
+	display: block;
+	height: 17px;
+	min-height: 14px;
+	padding: 4px 4px 1px 28px;
+	overflow: hidden;
+	max-width: 120px;
+	text-overflow: ellipsis;
+}
+
+#folder-selector li a.virtual {
+	opacity: .2;
+}
+
+#folder-selector li a.inbox span {
+	background-position: 4px -2049px;
+}
+#folder-selector li a.drafts span {
+	background-position: 4px -1388px;
+}
+#folder-selector li a.sent span {
+	background-position: 4px -2074px;
+}
+#folder-selector li a.trash span {
+	background-position: 4px -1508px;
+}
+#folder-selector li a.junk span {
+	background-position: 4px -2100px;
+}
+
+/*** folders list ***/
+
+.folderlist li.mailbox a {
+	padding-left: 36px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	background-image: url(images/listicons.png?v=c458.10409);
+	background-repeat: no-repeat;
+	background-position: 6px 3px;
+}
+
+.folderlist li.mailbox.unread > a {
+	padding-right: 36px;
+}
+
+.folderlist li.mailbox > a:focus,
+.folderlist li.mailbox.selected > a {
+	background-position: 6px -21px;
+}
+
+.folderlist li.mailbox.inbox > a {
+	background-position: 6px -189px;
+}
+
+.folderlist li.mailbox.inbox > a:focus,
+.folderlist li.mailbox.inbox.selected > a {
+	background-position: 6px -213px;
+}
+
+.folderlist li.mailbox.drafts > a {
+	background-position: 6px -238px;
+}
+
+.folderlist li.mailbox.drafts > a:focus,
+.folderlist li.mailbox.drafts.selected > a {
+	background-position: 6px -262px;
+}
+
+.folderlist li.mailbox.sent > a {
+	background-position: 6px -286px;
+}
+
+.folderlist li.mailbox.sent > a:focus,
+.folderlist li.mailbox.sent.selected > a {
+	background-position: 6px -310px;
+}
+
+.folderlist li.mailbox.junk > a {
+	background-position: 6px -334px;
+}
+
+.folderlist li.mailbox.junk > a:focus,
+.folderlist li.mailbox.junk.selected > a {
+	background-position: 6px -358px;
+}
+
+.folderlist li.mailbox.trash > a {
+	background-position: 6px -382px;
+}
+
+.folderlist li.mailbox.trash > a:focus,
+.folderlist li.mailbox.trash.selected > a {
+	background-position: 6px -406px;
+}
+
+.folderlist li.mailbox.trash.empty > a {
+	background-position: 6px -1924px;
+}
+
+.folderlist li.mailbox.trash.empty > a:focus,
+.folderlist li.mailbox.trash.empty.selected > a {
+	background-position: 6px -1948px;
+}
+
+.folderlist li.mailbox.archive > a {
+	background-position: 6px -1699px;
+}
+
+.folderlist li.mailbox.archive > a:focus,
+.folderlist li.mailbox.archive.selected > a {
+	background-position: 6px -1723px;
+}
+
+.folderlist li.mailbox ul li.drafts > a {
+	background-position: 23px -238px;
+}
+
+.folderlist li.mailbox ul li.drafts > a:focus,
+.folderlist li.mailbox ul li.drafts.selected > a {
+	background-position: 23px -262px;
+}
+
+.folderlist li.mailbox ul li.sent > a {
+	background-position: 23px -286px;
+}
+
+.folderlist li.mailbox ul li.sent > a:focus,
+.folderlist li.mailbox ul li.sent.selected > a {
+	background-position: 23px -310px;
+}
+
+.folderlist li.mailbox ul li.junk > a {
+	background-position: 23px -334px;
+}
+
+.folderlist li.mailbox ul li.junk > a:focus,
+.folderlist li.mailbox ul li.junk.selected > a {
+	background-position: 23px -358px;
+}
+
+.folderlist li.mailbox ul li.trash > a {
+	background-position: 23px -382px;
+}
+
+.folderlist li.mailbox ul li.trash > a:focus,
+.folderlist li.mailbox ul li.trash.selected > a {
+	background-position: 23px -406px;
+}
+
+.folderlist li.mailbox ul li.trash.empty > a {
+	background-position: 23px -1924px;
+}
+
+.folderlist li.mailbox ul li.trash.empty > a:focus,
+.folderlist li.mailbox ul li.trash.empty.selected > a {
+	background-position: 23px -1948px;
+}
+
+.folderlist li.mailbox ul li.archive > a {
+	background-position: 23px -1699px;
+}
+
+.folderlist li.mailbox ul li.archive > a:focus,
+.folderlist li.mailbox ul li.archive.selected > a {
+	background-position: 23px -1723px;
+}
+
+.folderlist li.virtual > a {
+	color: #aaa;
+}
+
+.folderlist li.mailbox div.treetoggle {
+	top: 13px;
+	left: 19px;
+}
+
+.folderlist li.mailbox ul li:last-child {
+	border-bottom: 0;
+}
+
+/* nested mailboxes */
+
+.folderlist li.mailbox ul {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+	border-top: 1px solid #bbd3da;
+}
+
+.folderlist li.mailbox ul li a {
+	padding-left: 52px;  /* 36 + 1 x 16 */
+	background-position: 22px -93px;  /* 6 + 1 x 16 */
+}
+.folderlist li.mailbox ul li > a:focus,
+.folderlist li.mailbox ul li.selected > a {
+	background-position: 22px -117px;
+}
+.folderlist li.mailbox ul li div.treetoggle {
+	left: 33px;
+	top: 14px;
+}
+
+.folderlist li.mailbox ul ul li.mailbox a {
+	padding-left: 68px;  /* 2x */
+	background-position: 38px -93px;
+}
+.folderlist li.mailbox ul ul li > a:focus,
+.folderlist li.mailbox ul ul li.selected > a {
+	background-position: 38px -117px;
+}
+.folderlist li.mailbox ul ul li div.treetoggle {
+	left: 48px;
+}
+
+.folderlist li.mailbox ul ul ul li.mailbox a {
+	padding-left: 84px;  /* 3x */
+	background-position: 54px -93px;
+}
+.folderlist li.mailbox ul ul ul li > a:focus,
+.folderlist li.mailbox ul ul ul li.selected > a {
+	background-position: 54px -117px;
+}
+.folderlist li.mailbox ul ul ul li div.treetoggle {
+	left: 64px;
+}
+
+.folderlist li.mailbox ul ul ul ul li.mailbox a {
+	padding-left: 100px;  /* 4x */
+	background-position: 70px -93px;
+}
+.folderlist li.mailbox ul ul ul ul li > a:focus,
+.folderlist li.mailbox ul ul ul ul li.selected > a {
+	background-position: 70px -117px;
+}
+.folderlist li.mailbox ul ul ul ul li div.treetoggle {
+	left: 80px;
+}
+
+/* indent folders on levels > 4 */
+.folderlist li.mailbox ul ul ul ul ul li {
+	padding-left: 16px;
+}
+.folderlist li.mailbox ul ul ul ul ul li div.treetoggle {
+	left: 96px;
+}
+
+
+/*** attachment list ***/
+
+.attachmentslist {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.attachmentslist li {
+	display: block;
+	position: relative;
+	background: url(images/filetypes.png?v=a0f5.4718) 0 0 no-repeat;
+	margin-bottom: 1px;
+	line-height: 24px;
+}
+
+.attachmentslist li.txt,
+.attachmentslist li.text {
+	background-position: 0 -416px;
+}
+
+.attachmentslist li.pdf {
+	background-position: 0 -26px;
+}
+
+.attachmentslist li.doc,
+.attachmentslist li.docx,
+.attachmentslist li.msword {
+	background-position: 0 -52px;
+}
+
+.attachmentslist li.odt {
+	background-position: 0 -78px;
+}
+
+.attachmentslist li.xls,
+.attachmentslist li.xlsx,
+.attachmentslist li.msexcel {
+	background-position: 0 -104px;
+}
+
+.attachmentslist li.ods {
+	background-position: 0 -130px;
+}
+
+.attachmentslist li.zip,
+.attachmentslist li.gz {
+	background-position: 0 -156px;
+}
+
+.attachmentslist li.rar {
+	background-position: 0 -182px;
+}
+
+.attachmentslist li.image {
+	background-position: 0 -208px;
+}
+
+.attachmentslist li.jpg,
+.attachmentslist li.jpeg {
+	background-position: 0 -234px;
+}
+
+.attachmentslist li.png {
+	background-position: 0 -260px;
+}
+
+.attachmentslist li.m4p {
+	background-position: 0 -286px;
+}
+
+.attachmentslist li.mp3,
+.attachmentslist li.audio {
+	background-position: 0 -312px;
+}
+
+.attachmentslist li.video {
+	background-position: 0 -338px;
+}
+
+.attachmentslist li.ics,
+.attachmentslist li.calendar {
+	background-position: 0 -364px;
+}
+
+.attachmentslist li.vcard {
+	background-position: 0 -390px;
+}
+
+.attachmentslist li.sig,
+.attachmentslist li.pgp-signature,
+.attachmentslist li.pkcs7-signature {
+	background-position: 0 -442px;
+}
+
+.attachmentslist li.html {
+	background-position: 0 -468px;
+}
+
+.attachmentslist li.eml,
+.attachmentslist li.rfc822 {
+	background-position: 0 -494px;
+}
+
+.attachmentslist li.ppt,
+.attachmentslist li.pptx,
+.attachmentslist li.ppsx,
+.attachmentslist li.vnd.mspowerpoint {
+	background-position: 0 -520px;
+}
+
+.attachmentslist li.odp,
+.attachmentslist li.otp {
+	background-position: 0 -546px;
+}
+
+.attachmentslist li.application.asc {
+	background-position: 0 -598px;
+}
+
+.attachmentslist li.application.pgp-keys {
+	background-position: 0 -572px;
+}
+
+
+.attachmentslist li a {
+	display: block;
+	color: #333;
+	font-weight: bold;
+	padding: 3px 15px 3px 30px;
+	text-decoration: none;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	line-height: 20px;
+	outline: none;
+}
+
+.attachmentslist li a.drop {
+	background: url(images/buttons.png?v=d70c.9130) no-repeat scroll center -1570px;
+	width: 14px;
+	height: 20px;
+	cursor: pointer;
+	position: absolute;
+	right: 0;
+	top: 0;
+	padding: 0;
+	overflow: hidden;
+	text-indent: -5000px;
+	outline: none;
+}
+
+#compose-attachments .attachmentslist li a.drop {
+	right: 24px;
+}
+
+.attachmentslist li a:focus,
+.attachmentslist li a.drop:focus {
+	background-color: rgba(30,150,192, 0.5);
+	border-radius: 2px;
+}
+
+#compose-attachments ul li {
+	padding-right: 24px;
+}
+
+.attachmentslist li a:hover {
+	text-decoration: underline;
+}
+
+.attachmentslist li.uploading {
+	background: url(images/ajaxloader.gif?v=c252.1434) 4px 4px no-repeat;
+	padding-left: 30px;
+}
+
+.attachmentslist li a.delete,
+.attachmentslist li a.cancelupload {
+	position: absolute;
+	top: 4px;
+	right: 0;
+	width: 20px;
+	height: 18px;
+	padding: 0;
+	text-decoration: none;
+	text-indent: -5000px;
+	background-image: url(images/buttons.png?v=d70c.9130);
+	background-position: -6px -338px;
+	background-repeat: no-repeat;
+}
+
+.attachmentslist li a.cancelupload {
+	background-position: -6px -378px;
+}
+
+/*** fieldset tabs ***/
+
+.tabbed.ui-tabs {
+	padding: 0;
+	border: 0 !important;
+	background: none;
+}
+
+.ui-dialog .tabbed.ui-tabs {
+	margin: -12px -8px 0 -8px;
+}
+
+.boxcontent.tabbed.ui-tabs {
+	padding: 10px;
+}
+
+.ui-tabs .tabsbar.ui-tabs-nav {
+	margin-bottom: 4px;
+}
+
+.ui-dialog-content .ui-tabs .tabsbar.ui-tabs-nav {
+	margin-bottom: 0;
+}
+
+.tabsbar .tablink:last-child {
+	background: none;
+}
+
+.tabsbar .tablink:last-child a {
+	border-right: 0;
+}
+
+.ui-tabs .ui-tabs-nav li.tablink a {
+	background: #fff;
+}
+
+.ui-tabs fieldset.ui-tabs-panel {
+	border: 0;
+	padding: 0;
+	margin-left: 0;
+	background: none;
+}
+
+.ui-dialog .propform .ui-tabs-panel {
+	display: block;
+	background: #efefef;
+	padding: 0.5em 1em;
+}
+
+#image-selector-form.droptarget {
+	background: url(images/filedrop.png?v=be5d.415) center bottom no-repeat;
+}
+
+/** Common TinyMCE fixes **/
+.mce-btn-small .mce-ico {
+	display: inline; /* for old Firefox */
+}
+
+.mce-btn-small i {
+	line-height: 16px !important;
+	vertical-align: text-top !important;
+}
+
+_:not(), _:-moz-handler-blocked, .mozilla .mce-btn-small i {
+	line-height: 20px !important;
+}
+
+.mce-textbox {
+	border-radius: 0;
+	box-shadow: none;
+}
+
+.mce-textbox:focus {
+	box-shadow: none;
+	outline: none;
+}
+
+/** PGP Key import dialog **/
+.pgpkeyimport div.key {
+	position: relative;
+	margin-bottom: 2px;
+	padding: 1em;
+	background-color: #ebebeb;
+}
+
+.pgpkeyimport div.key.revoked,
+.pgpkeyimport div.key.disabled {
+	color: #a0a0a0;
+}
+
+.pgpkeyimport div.key label {
+	display: inline-block;
+	margin-right: 0.5em;
+}
+
+.pgpkeyimport div.key label:after {
+	content: ":";
+}
+
+.pgpkeyimport div.key label + a,
+.pgpkeyimport div.key label + span {
+	display: inline-block;
+	margin-right: 2em;
+	white-space: nowrap;
+}
+
+.pgpkeyimport div.key label + a {
+	font-weight: bold;
+}
+
+.pgpkeyimport ul.uids {
+	margin: 1em 0 0 0;
+	padding: 0;
+}
+
+.pgpkeyimport li.uid {
+	border: 0;
+	padding: 0.3em;
+}
+
+.pgpkeyimport div.key input.button.importkey {
+	position: absolute;
+	top: 0.8em;
+	right: 0.8em;
+	padding: 4px 6px;
+}
+
+.pgpkeyimport div.key input.button[disabled] {
+	display: none;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/styles.min.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;font-size:11px;color:#333;background:#cad2d9;margin:0}body.noscroll{overflow:hidden}.iphone body.noscroll{overflow:auto}a{color:#0069a6}a:visited{color:#0186ba}img{border:0}.voice{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}input,textarea,select,button{font-family:inherit;font-size:inherit;vertical-align:middle}input[type="text"],input[type="password"],textarea{margin:0;padding:4px;border:1px solid #b2b2b2;border-radius:4px}input[type="text"]:focus,input[type="password"]:focus,input.button:focus,textarea:focus{border-color:#4787b1;box-shadow:0 0 5px 2px rgba(71,135,177,0.9);outline:0}input[type="text"]:required,input[type="password"]:required{border-color:#4787b1}input.placeholder,textarea.placeholder{color:#aaa}.bold{font-weight:bold}label input+span{vertical-align:middle}.noselect{user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;-webkit-user-select:none}input.button{display:inline-block;margin:0 2px;padding:4px 8px;color:#525252;border:1px solid silver;border-radius:4px;background:#f7f7f7;text-decoration:none;outline:0}.formbuttons input.button{color:#ddd;font-size:110%;padding:4px 12px;border-color:#465864;border-radius:5px;background:#666;box-shadow:0 1px 1px 0 #ccc}.formbuttons input.button:hover,.formbuttons input.button:focus,input.button.mainaction:hover,input.button.mainaction:focus{color:#f2f2f2;border-color:#465864;box-shadow:0 0 5px 2px rgba(71,135,177,0.6)}.formbuttons input.button:active{color:#fff;background:#5f5f5f}input.button.mainaction{color:#ededed;border-color:#1f262c;background:#2c2f33}input.button.mainaction:active{color:#fff;background:#515151;background:-moz-linear-gradient(top,#2a2e31 0,#505050 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2a2e31),color-stop(100%,#505050));background:-ms-linear-gradient(top,#2a2e31 0,#505050 100%);background:linear-gradient(to bottom,#2a2e31 0,#505050 100%)}input.button[disabled],input.button[disabled]:hover,input.button.mainaction[disabled]{color:#aaa !important}input.mainaction{font-weight:bold}form.smart-upload,input.smart-upload{visibility:hidden;width:1px;height:1px;opacity:0}a.button,.buttongroup{display:inline-block;margin:0 2px;padding:2px 5px;color:#525252;border:1px solid #c6c6c6;border-radius:4px;background:#e6e6e6;text-decoration:none}.buttongroup{padding:0;white-space:nowrap}a.button:focus,input.button:focus{border-color:#017db6;box-shadow:0 0 2px 1px rgba(71,135,177,0.6);outline:0}label.disabled,a.button.disabled{color:#999}a.button.disabled,input.button.disabled,input.button[disabled],a.button.disabled:hover,input.button.disabled:hover,input.button[disabled]:hover{border-color:#c6c6c6}a.button.disabled span.inner{opacity:.4}.buttongroup a.button{margin:0;border-width:0 1px 0 0;border-radius:0;background:0}.buttongroup a.button.first,.buttongroup a.button:first-child{border-radius:4px 0 0 4px;border-left:0}.buttongroup a.button.last,.buttongroup a.button:last-child{border-radius:0 4px 4px 0;border-right:0}a.button.pressed,a.button:active,input.button:active{background:#f7f7f7}.pagenav.dark a.button{font-weight:bold;border:0;background:transparent;margin:0}.pagenav.dark a.button.pressed{background:#d8d8d8}.buttongroup a.button.selected,.buttongroup a.button.selected:hover{background:#8a8a8a;border-right-color:#8a8a8a;border-left-color:#555}.buttongroup a.button:focus,.buttongroup a.button.selected:focus{background:#f2f2f2;background:-moz-linear-gradient(top,#49b3d2 0,#66bcd9 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#49b3d2),color-stop(100%,#66bcd9));background:-ms-linear-gradient(top,#49b3d2 0,#66bcd9 100%);background:linear-gradient(to bottom,#49b3d2 0,#66bcd9 100%)}.pagenav a.button{padding:1px 3px;height:16px;vertical-align:middle;margin-bottom:1px}.pagenav .buttongroup a.button,.pagenav .buttongroup a.button:hover{padding:1px 5px;margin-bottom:0}a.button span.icon,.pagenav a.button span.inner{display:inline-block;width:16px;height:13px;text-indent:1000px;overflow:hidden;background:url(images/buttons.png?v=d70c.9130) -6px -211px no-repeat}a.button.prevpage span.icon,.pagenav a.prevpage span.inner{background-position:-7px -226px}a.button.nextpage span.icon,.pagenav a.nextpage span.inner{background-position:-28px -226px}a.button.lastpage span.icon,.pagenav a.lastpage span.inner{background-position:-28px -211px}a.button.pageup span.icon,.pagenav a.pageup span.inner{background-position:-7px -241px}a.button.pagedown span.icon,.pagenav a.pagedown span.inner{background-position:-29px -241px}a.button.reply span.icon,.pagenav a.reply span.inner{background-position:-7px -256px}a.button.forward span.icon,.pagenav a.forward span.inner{background-position:-29px -256px}a.button.replyall span.icon,.pagenav a.replyall span.inner{background-position:-7px -271px}a.button.extwin span.icon,.pagenav a.extwin span.inner{background-position:-29px -271px}a.button.changeformat.html span.icon,.pagenav a.changeformat.html span.inner{background-position:-7px -1859px}a.button.changeformat.html.selected span.icon,.pagenav a.changeformat.html.selected span.inner{background-position:-29px -1859px}a.button.changeformat.text span.icon,.pagenav a.changeformat.text span.inner{background-position:-7px -1874px}a.button.changeformat.text.selected span.icon,.pagenav a.changeformat.text.selected span.inner{background-position:-29px -1874px}a.button.add span.icon{background-position:-7px -2009px}a.button.delete span.icon{background-position:-29px -2009px}.pagenav .countdisplay{display:inline-block;padding:3px 1em 0 1em;min-width:16em}.pagenavbuttons{position:relative;top:-2px}.pagenav .pagejumper{text-align:center;padding:3px 0;cursor:default}a.iconbutton{display:inline-block;width:20px;height:18px;text-decoration:none;text-indent:-5000px;background:url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat}a.iconbutton.disabled{opacity:.4;cursor:default}a.iconbutton.searchicon,a.iconbutton.searchoptions{width:24px;background-position:-2px -317px}a.iconbutton.searchicon{width:15px}a.iconbutton.reset{width:24px;background-position:-25px -317px}a.iconbutton.remove,a.iconbutton.cancel{background-position:-7px -378px}a.iconbutton.delete{background-position:-7px -338px}a.iconbutton.add{background-position:-7px -358px}a.iconbutton.remove{background-position:-7px -379px}a.iconbutton.cancel{background-position:-7px -398px}a.iconbutton.edit{background-position:-7px -418px}a.iconbutton.upload{background-position:-6px -438px}a.iconlink{display:inline-block;color:#888;text-decoration:none;white-space:nowrap;padding:2px 8px 2px 20px;background:url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat}a.iconlink:hover{text-decoration:underline}a.iconlink.delete{background-position:-7px -337px}a.iconlink.add{background-position:-7px -357px}a.iconlink.remove{background-position:-7px -378px}a.iconlink.cancel{background-position:-7px -397px}a.iconlink.edit{background-position:-7px -417px}a.iconlink.upload{background-position:-6px -437px}#message div.loading,#message div.uploading,#message div.warning,#message div.error,#message div.notice,#message div.confirmation,#message-objects div.notice{color:#555;font-weight:bold;padding:6px 30px 6px 25px;display:inline-block;white-space:nowrap;background:url(images/messages.png?v=72e9.1264) 0 5px no-repeat;cursor:default}#message div.warning{color:#960;background-position:0 -86px}#message div.error{color:#cf2734;background-position:0 -57px}#message div.confirmation{color:#093;background-position:0 -25px}#message div.loading{background:url(images/ajaxloader.gif?v=c252.1434) 2px 6px no-repeat}#message div a,#message div span{padding-right:.5em;text-decoration:none}#message div a:hover{text-decoration:underline;cursor:pointer}#message.statusbar{display:none;position:absolute;bottom:0;left:0;right:0;height:27px;padding-left:8px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#eaeaea;background:-moz-linear-gradient(top,#eaeaea 0,#c8c8c8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#eaeaea),color-stop(100%,#c8c8c8));background:-ms-linear-gradient(top,#eaeaea 0,#c8c8c8 100%);background:linear-gradient(to bottom,#eaeaea 0,#c8c8c8 100%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#messagestack{position:absolute;bottom:20px;right:12px;z-index:50000;width:auto;height:auto;max-height:85%;overflow-y:auto;padding:2px}#messagestack div{display:block;position:relative;width:280px;height:auto;min-height:16px;margin:3px 2px 5px 2px;padding:8px 10px 7px 30px;cursor:default;font-size:12px;font-weight:bold;border-radius:4px;border:1px solid #444;color:#ebebeb;background:rgba(64,64,64,0.85);background:-moz-linear-gradient(top,rgba(64,64,64,0.85) 0,rgba(48,48,48,0.9) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(64,64,64,0.85)),color-stop(100%,rgba(48,48,48,0.9)));background:-webkit-linear-gradient(top,rgba(64,64,64,0.85) 0,rgba(48,48,48,0.85) 100%);background:-ms-linear-gradient(top,rgba(64,64,64,0.85) 0,rgba(48,48,48,0.85) 100%);background:linear-gradient(to bottom,rgba(64,64,64,0.85) 0,rgba(48,48,48,0.85) 100%)}#messagestack div:after{content:"";position:absolute;display:block;top:0;left:4px;width:20px;height:24px;background:url(images/messages_dark.png?v=8e53.601) 0 7px no-repeat}#messagestack div.error{color:#ff615d}#messagestack div.error:after{background-position:0 -55px}#messagestack div.warning{color:#f4bf0e}#messagestack div.warning:after{background-position:0 -84px}#messagestack div.confirmation{color:#00e05a}#messagestack div.confirmation:after{background-position:0 -25px}#messagestack div.uploading,#messagestack div.loading{color:#ddd}#messagestack div.uploading:after,#messagestack div.loading:after{top:4px;left:6px;background:url(images/ajaxloader_dark.gif?v=cf1b.1849) 0 4px no-repeat}#messagestack div.voice{position:absolute;top:-1000px}#messagestack div a{color:#94c0da}#messagestack div a:hover{text-decoration:underline;cursor:pointer}.ui-dialog.error .ui-dialog-title,.ui-dialog.warning .ui-dialog-title,.ui-dialog.confirmation .ui-dialog-title{padding-left:25px;background:url(images/messages.png?v=72e9.1264) 0 5px no-repeat}.ui-dialog.warning .ui-dialog-title{color:#960;background-position:0 -91px}.ui-dialog.error .ui-dialog-title{color:#cf2734;background-position:0 -62px}.ui-dialog.confirmation .ui-dialog-title{color:#093;background-position:0 -32px}.ui-autocomplete{max-height:160px;overflow-x:hidden;overflow-y:auto}#header{overflow-x:hidden}#topline{height:18px;background-color:#333;border-bottom:1px solid #383838;padding:2px 0 2px 10px;color:#aaa;text-align:center}#topnav{position:relative;height:46px;margin-bottom:10px;padding:0 0 0 10px;background:#1c1c1c}#topline a,#topnav a{color:#eee;text-decoration:none}#topline a:hover{text-decoration:underline}#toplogo{padding-top:2px;cursor:pointer;border:0}.topleft{float:left}.topright{float:right}.closelink{display:inline-block;padding:2px 10px 2px 20px}#topline span.username{padding-right:1em}#topline .topleft a{display:inline-block;padding:2px .8em 0 0;color:#aaa}#topline a.button-logout{display:inline-block;padding:2px 10px 2px 20px;background:url(images/buttons.png?v=d70c.9130) -6px -193px no-repeat;color:#fff}#taskbar .button-logout{display:none}#taskbar a.button-logout span.button-inner{background-position:-2px -1791px}#taskbar a.button-logout:hover span.button-inner{background-position:-2px -1829px}.minimal #topline{position:fixed;top:-18px;background:#444;z-index:5000;width:100%;height:22px;-moz-box-sizing:border-box;box-sizing:border-box}.minimal #topline:hover{top:0;opacity:.94;-webkit-transition:top .3s ease-in-out;-moz-transition:top .3s ease-in-out;transition:top .3s ease-in-out}.extwin #topline,.extwin #topline:hover{position:static;top:0;height:18px;width:auto;-moz-box-sizing:content-box;box-sizing:content-box;opacity:.999}.minimal #topline a.button-logout{display:none}.minimal #topline span.username{display:inline-block;padding-top:2px}.minimal #topnav{position:relative;top:4px;height:42px}.minimal #taskbar a{position:relative;padding:10px 10px 0 6px;height:32px}.minimal #taskbar .button-logout{display:inline-block}.minimal #taskbar .button-inner{top:-4px;padding:0;height:24px !important;width:27px;text-indent:-5000px}#taskbar .tooltip{display:none}.minimal #taskbar .tooltip{position:absolute;top:-500px;right:2px;display:inline-block;padding:2px 8px 3px 8px;background:#444;color:#eee;font-weight:bold;white-space:nowrap;box-shadow:0 1px 4px 0 #333;z-index:200;white-space:nowrap}.minimal #taskbar .tooltip:after{content:"";position:absolute;top:-4px;right:15px;border-style:solid;border-width:0 4px 4px;border-color:#444 transparent;display:block;width:0;z-index:251}.minimal #taskbar a:hover .tooltip{display:block;top:39px}#taskbar{position:relative;padding-right:18px}#taskbar a{display:inline-block;height:34px;padding:12px 10px 0 6px}#taskbar a span.button-inner{display:inline-block;font-size:110%;font-weight:normal;padding:5px 0 0 34px;height:19px;background:url(images/buttons.png?v=d70c.9130) -1000px 0 no-repeat}#taskbar a:focus{color:#fff;background-color:rgba(73,180,210,0.7);outline:0}#taskbar a.button-selected{color:#20a6fb;background-color:#2c2c2c}#taskbar a.button-mail span.button-inner{background-position:0 2px}#taskbar a.button-mail:hover span.button-inner,#taskbar a.button-mail.button-selected span.button-inner{background-position:0 -22px}#taskbar a.button-addressbook span.button-inner{background-position:0 -48px}#taskbar a.button-addressbook:hover span.button-inner,#taskbar a.button-addressbook.button-selected span.button-inner{background-position:0 -72px}#taskbar a.button-settings span.button-inner{background-position:0 -96px}#taskbar a.button-settings:hover span.button-inner,#taskbar a.button-settings.button-selected span.button-inner{background-position:0 -120px}#taskbar a.button-calendar span.button-inner{background-position:0 -144px}#taskbar a.button-calendar:hover span.button-inner,#taskbar a.button-calendar.button-selected span.button-inner{background-position:0 -168px}#taskbar .minmodetoggle{position:absolute;top:0;right:0;display:block;width:19px;height:46px;cursor:pointer;background:url(images/buttons.png?v=d70c.9130) -35px -1778px no-repeat}.minimal #taskbar .minmodetoggle{height:42px;background-position:-35px -1820px}#mainscreen{position:absolute;top:88px;left:10px;right:10px;bottom:20px}#mainscreencontent{position:absolute;top:42px;left:0;right:0;bottom:0}#mainscreen.offset{top:132px}#mainscreen .offset{top:42px}.minimal #mainscreen{top:62px}.minimal #mainscreen.offset{top:102px}.extwin #mainscreen{top:40px}.extwin #mainscreen.offset{top:86px}.uibox{border:1px solid #b2b8bf;border-radius:4px;overflow:hidden;background:#fff}.minwidth{min-width:1024px}.scroller{overflow:auto}.watermark{background-image:url(images/watermark.jpg?v=e784.5000);background-position:center;background-repeat:no-repeat}@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px){.iframebox{overflow:auto;-webkit-overflow-scrolling:touch}}.listbox{background:#d9ecf4;overflow:hidden}.listbox .scroller{position:absolute;top:0;left:0;width:100%;bottom:0;overflow-x:hidden;overflow-y:auto}.listbox .scroller.withfooter{bottom:42px}.listbox .boxtitle+.scroller{top:34px}.boxtitle,.uibox .listing thead th,.uibox .listing thead td{font-size:12px;font-weight:bold;padding:7px 8px 6px 8px;line-height:20px;margin:0;border-bottom:1px solid #bbd3da;white-space:nowrap}.uibox .listing thead th,.uibox .listing thead td{padding-bottom:8px;height:auto}.uibox .boxtitle,.uibox .listing thead th,.uibox .listing thead td{background:#b0ccd7;color:#004458;border-radius:4px 4px 0 0}.listbox .listitem,.listbox .tablink,.listing tbody td,.listing li{display:block;border-bottom:1px solid #bbd3da;cursor:default;font-weight:normal}.listbox .listitem a,.listbox .listitem span,.listbox .tablink a,.listing tbody td,.listing li a{display:block;color:#376572;text-decoration:none;cursor:default;padding:5px 8px;line-height:17px;height:17px;white-space:nowrap}.listing tbody td{display:table-cell;min-height:14px;outline:0}.listing tbody td a{color:#376572;text-decoration:none}.webkit .listing tbody td{height:14px}.listing thead tr td:first-child,.listing tbody tr td:first-child{border-left:2px solid transparent;padding-left:6px}.listing.iconized thead tr td:first-child,.listing.iconized tbody tr td:first-child{padding-left:34px}.listing.focus tbody tr.focused>td:first-child{border-left:2px solid #739da8}.listbox .listitem.selected,.listbox .tablink.selected,.listbox .listitem.selected>a,.listbox .tablink.selected>a,.listing tbody tr.selected td,.listing li.selected,.listing li.selected>a{color:#004458;font-weight:bold;background-color:#c7e3ef}ul.listing{display:block;list-style:none;margin:0;padding:0}ul.listing li{background-color:#d9ecf4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ul.listing li ul{border-top:1px solid #bbd3da}ul.listing li.droptarget,table.listing tr.droptarget td{background-color:#e8e798}.listbox table.listing{background-color:#d9ecf4}table.listing,table.layout{border:0;width:100%;border-spacing:0}table.layout td{vertical-align:top}ul.treelist li{position:relative}ul.treelist li ul{margin:0;padding:0}ul.treelist li ul li:last-child{border-bottom:0}ul.treelist li a{display:block;padding-left:20px;overflow:hidden;text-overflow:ellipsis}ul.treelist li a:focus,ul.listing .listitem a:focus,ul.listing .listitem span:focus,ul.listing.focus .listitem.focused span{color:#fff !important;background-color:rgba(73,180,210,0.6);outline:0}ul.treelist ul li a{padding-left:38px}ul.treelist ul ul li a{padding-left:54px}ul.treelist.iconized li a{padding-left:36px}ul.treelist.iconized ul li a{padding-left:62px}ul.treelist.iconized ul ul li a{padding-left:88px}ul.treelist.iconized ul ul ul li a{padding-left:114px}ul.treelist li div.treetoggle{position:absolute;top:7px;left:4px;width:13px;height:13px;background:url(images/listicons.png?v=c458.10409) -3px -144px no-repeat;cursor:pointer}ul.treelist li ul li div.treetoggle{left:22px}ul.treelist.iconized li div.treetoggle{top:13px;left:19px}ul.treelist.iconized ul li div.treetoggle{left:45px}ul.treelist.iconized ul ul li div.treetoggle{left:71px}ul.treelist li div.treetoggle.expanded{background-position:-3px -168px}ul.treelist li.selected>div.collapsed{background-position:-23px -144px}ul.treelist li.selected>div.expanded{background-position:-23px -168px}.listbox .boxfooter{position:absolute;bottom:0;left:0;width:100%;height:42px;border-top:1px solid #bbd3da;background:#d9ecf4;white-space:nowrap;overflow:hidden}.uibox .boxfooter{border-radius:0 0 4px 4px}.boxfooter .listbutton{display:inline-block;text-decoration:none;width:48px;border-right:1px solid #fff;background:#c7e3ef;padding:3px 0;margin-top:1px}.boxfooter a.listbutton:focus{color:#fff;background-color:rgba(73,180,210,0.6);outline:0}.uibox .boxfooter .listbutton:first-child{border-radius:0 0 0 4px}.boxfooter .listbutton .inner{display:inline-block;width:48px;height:35px;text-indent:-5000px;background-image:url(images/buttons.png?v=d70c.9130);background-position:-1000px 0;background-repeat:no-repeat}.boxfooter .listbutton.add .inner{background-position:10px -1301px}.boxfooter .listbutton.delete .inner{background-position:10px -1342px}.boxfooter .listbutton.groupactions .inner{background-position:5px -1382px}.boxfooter .listbutton.addto .inner{background-position:5px -1422px}.boxfooter .listbutton.addcc .inner{background-position:5px -1462px}.boxfooter .listbutton.addbcc{width:54px}.boxfooter .listbutton.addbcc .inner{width:54px;background-position:2px -1502px}.boxfooter .listbutton.removegroup .inner{background-position:5px -1540px}.boxfooter .listbutton.disabled .inner{opacity:.4}.boxfooter .countdisplay{display:inline-block;position:relative;top:10px;color:#69929e;padding:3px 6px}.boxpagenav{position:absolute;top:10px;right:6px;width:auto}.boxpagenav a.icon{display:inline-block;padding:1px 3px;height:13px;width:14px;text-indent:1000px;vertical-align:bottom;overflow:hidden;background:url(images/buttons.png?v=d70c.9130) -4px -286px no-repeat}.boxpagenav a.icon.prevpage{background-position:-4px -301px}.boxpagenav a.icon.nextpage{background-position:-28px -301px}.boxpagenav a.icon.lastpage{background-position:-28px -286px}.boxpagenav a.icon.disabled{opacity:.4}.centerbox{width:40em;margin:16px auto}.errorbox{width:40em;padding:20px}.errorbox h3{font-size:16px;margin-top:0}table.records-table{display:table;width:100%;table-layout:fixed;border-spacing:0;border:1px solid #bbd3da}.boxlistcontent .records-table{border:0}.records-table thead th,.records-table thead td{color:#69939e;font-size:11px;font-weight:bold;background:#d6eaf3;border-left:1px solid #bbd3da;padding:8px 7px;overflow:hidden;text-overflow:ellipsis;text-align:left}.records-table.sortheader thead th,.records-table.sortheader thead td{padding:0}.records-table thead th a,.records-table thead td a,.records-table thead th span,.records-table thead td span{display:block;padding:7px 7px;color:#69939e;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.records-table thead th a:focus,.records-table thead td a:focus{color:#fff;background-color:rgba(73,180,210,0.7);outline:0}.records-table tbody td{padding:2px 7px;border-bottom:1px solid #ddd;border-left:1px dotted #bbd3da;white-space:nowrap;cursor:default;overflow:hidden;text-overflow:ellipsis;background-color:#fff;outline:0}.records-table thead tr th:first-child,.records-table thead tr td:first-child,.records-table tbody tr td:first-child{border-left:2px solid transparent;padding-left:4px}.records-table.focus tbody tr.focused>td:first-child{border-left:2px solid #49b3d2}.records-table tr.selected td{color:#fff !important;background-color:#4db0d2}.records-table.focus tr.selected td{background-color:#017db6 !important}.records-table tr.selected td a,.records-table tr.selected td span{color:#fff !important}.records-table tr.deleted td,.records-table tr.deleted td a{color:#ccc !important}#aboutframe{width:97%;height:100%;border:0;padding:0}body.iframe{background:#fff;margin:38px 0 10px 0}body.iframe.error{background:#ededed}body.iframe.floatingbuttons{margin-bottom:40px}body.iframe.fullheight{margin:0}.contentbox .boxtitle,body.iframe .boxtitle{color:#777;background:#efefef;border-bottom:1px solid #d0d0d0}body.iframe .boxtitle{position:fixed;top:0;left:0;width:100%;z-index:100}body.iframe .footerleft.floating,#composeview-bottom .formbuttons.floating{position:fixed;left:0;bottom:0;width:100%;z-index:110;background:#fff;padding-top:8px;padding-bottom:12px}body.iframe .footerleft.floating:before,#composeview-bottom .formbuttons.floating:before{content:" ";position:absolute;top:-6px;left:0;width:100%;height:6px;background:url(images/overflowshadow.png?v=ac21.201) top center no-repeat}.boxcontent{padding:10px}.boxcontent .boxwarning{margin:0 0 10px;display:block;color:#960;border:1px solid #ffdf0e;background:url(images/messages.png?v=72e9.1264) #fef893 5px -85px no-repeat;padding:6px 12px 6px 30px}.contentbox .scroller{position:absolute;top:34px;left:0;right:0;bottom:0;overflow:auto}.iframebox{position:absolute;top:0;left:0;right:0;bottom:0}.footerleft{padding:0 12px 4px 12px}.propform fieldset{margin-bottom:20px;border:0;padding:0}.propform fieldset legend{display:block;font-size:14px;font-weight:bold;padding-bottom:10px;margin-bottom:0}.propform fieldset fieldset legend{color:#666;font-size:12px}.propform div.prop{margin-bottom:.5em}.propform div.prop.block label{display:block;margin-bottom:.3em}.propform div.prop.block input,.propform div.prop.block textarea{width:95%}.propform a.disabled{color:#999;text-decoration:none;cursor:default}fieldset.floating{float:left;margin-right:10px;margin-bottom:10px}table.propform{width:100%;border-spacing:0;border-collapse:collapse}ul.proplist li,table.propform td{width:80%;padding:4px 10px;background:#eee;border-bottom:2px solid #fff}table.propform td.title{width:20%;color:#333;padding-right:20px;white-space:nowrap}table.propform .mceLayout td{padding:0;border-bottom:0}ul.proplist{list-style:none;margin:0;padding:0}ul.proplist li{width:auto}#pluginbody{position:absolute;top:0;left:0;right:0;bottom:0}#login-form{position:relative;width:580px;margin:20ex auto 2ex auto}#login-form .box-inner{width:430px;background:#404040;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#404040),color-stop(100%,#2e2e2e));background:-ms-linear-gradient(top,#404040 0,#2e2e2e 100%);background:linear-gradient(to bottom,#404040 0,#2e2e2e 100%);margin:0 50px;padding:10px 24px 24px 24px;border-radius:6px}#login-form .box-bottom{margin-top:-3px;padding-top:10px}#login-form .noscriptwarning{margin:0 auto;width:430px;color:#cf2734;font-size:110%;font-weight:bold}#login-form td.input{width:80%;padding:8px}#login-form input[type="text"],#login-form input[type="password"]{width:100%;border-color:#666}#login-form input.button{color:#444;border-color:#f9f9f9;background-color:#f9f9f9}#login-form input.button:active{color:#333;background-color:#dcdcdc}#login-form form table{width:98%}#login-form td.title{width:20%;white-space:nowrap;color:#cecece;text-align:right;padding-right:1em}#login-form p.formbuttons{margin-top:2em;text-align:center}#login-form #logo{margin-bottom:20px;border:0}#login-form #message{min-height:40px;padding:5px 25px;text-align:center;font-size:1.1em}#login-form #message div{display:inline-block;padding-right:0;font-size:12px}#bottomline{font-size:90%;text-align:center;margin-top:2em}.searchbox{position:relative}#quicksearchbar{position:absolute;right:2px;top:2px;width:240px}.searchbox input,#quicksearchbar input{width:176px;margin:0;padding:3px 30px 3px 34px;height:18px;background:#f1f1f1;border-color:#ababab;font-weight:bold;font-size:11px}.searchbox .searchicon,.searchbox #searchmenulink,#quicksearchbar #searchmenulink{position:absolute;top:5px;left:6px}.searchbox #searchreset,.searchbox .iconbutton.reset,#quicksearchbar #searchreset{position:absolute;top:4px;right:1px}.listsearchbox{padding:4px;background:#c7e3ef;display:none}.listsearchbox input{width:100%;height:26px;-moz-box-sizing:border-box;box-sizing:border-box}.toolbar .spacer{display:inline-block;width:24px;height:40px;padding:0}.toolbar a.button{text-align:center;font-size:10px;color:#555;min-width:50px;max-width:70px;height:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:28px 2px 0 2px;background:url(images/buttons.png?v=d70c.9130) -100px 0 no-repeat transparent;border:0;border-radius:0}.dropbutton .dropbuttontip:focus,.toolbar a.button:focus{color:#fff;background-color:rgba(30,150,192,0.5);border-radius:3px}.toolbar a.button.disabled{opacity:.4}.toolbar a.button.selected{color:#1978a1}.toolbar a.button.selected:focus{color:#fff}.toolbar a.button.hidden{display:none}.dropbutton{display:inline-block;position:relative}.dropbutton .dropbuttontip{display:block;position:absolute;right:0;top:0;height:41px;width:18px;overflow:hidden;text-indent:-5000px;background:url(images/buttons.png?v=d70c.9130) 0 -1255px no-repeat;cursor:pointer;outline:0}.dropbutton .dropbuttontip:focus,.dropbutton .dropbuttontip:hover{background-position:-26px -1255px}.dropbutton a.button.disabled+.dropbuttontip{opacity:.5}.dropbutton a.button.disabled+.dropbuttontip:hover{background-position:0 -1255px}.dropbutton a.button{margin-left:0;padding-left:0;margin-right:0;padding-right:0}.toolbar a.button.back{background-position:0 -1216px}.toolbar a.button.checkmail{background-position:center -1176px}.toolbar a.button.compose{background-position:center -530px}.toolbar a.button.reply{background-position:center -570px}.toolbar a.button.reply-all{min-width:64px;background-position:0 -610px}.toolbar a.button.forward{min-width:64px;background-position:0 -650px}.toolbar a.button.delete{background-position:center -690px}.toolbar a.button.archive{background-position:center -730px}.toolbar a.button.junk{background-position:center -770px}.toolbar a.button.print{background-position:center -810px}.toolbar a.button.markmessage{background-position:center -1094px}.toolbar a.button.move{background-position:center -1971px}.toolbar a.button.more{background-position:center -850px}.toolbar a.button.attach{background-position:center -890px}.toolbar a.button.spellcheck{min-width:64px;background-position:0 -930px}.toolbar a.button.spellcheck.selected{background-position:0 -1620px;color:#1978a1}.toolbar a.button.insertsig{background-position:center -1135px}.toolbar a.button.search{background-position:center -970px}.toolbar a.button.import{background-position:center -1012px}.toolbar a.button.export{min-width:64px;background-position:0 -1054px}.toolbar a.button.send{background-position:center -1660px}.toolbar a.button.savedraft{background-position:center -1700px}.toolbar a.button.close{background-position:0 -1745px}.toolbar a.button.download{background-position:center -1892px}.toolbar a.button.responses{background-position:center -1932px}.toolbar a.button.encrypt{background-position:center -2025px}.toolbar a.button.encrypt.selected{background-position:center -2065px}a.menuselector{display:inline-block;border:1px solid #ababab;border-radius:4px;background:#f1f1f1;text-decoration:none;color:#333;cursor:pointer;white-space:nowrap}a.menuselector .handle{display:inline-block;padding:0 32px 0 6px;height:20px;line-height:19px;background:url(images/selector.png?v=0d5b.118) right center no-repeat;border-radius:4px}a.menuselector:active{background:#ddd;background:-moz-linear-gradient(top,#ddd 0,#f8f8f8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ddd),color-stop(100%,#f8f8f8));background:-ms-linear-gradient(top,#ddd 0,#f8f8f8 100%);background:linear-gradient(to bottom,#ddd 0,#f8f8f8 100%);text-decoration:none}select.decorated{position:relative;z-index:10;opacity:0;height:22px;cursor:pointer;-khtml-appearance:none;-webkit-appearance:none;border:0}html.opera select.decorated{opacity:1}select.decorated option{color:#fff;background:#444;border:0;border-top:1px solid #5a5a5a;border-bottom:1px solid #333;padding:4px 6px;outline:0;cursor:default}a.menuselector:focus,a.menuselector.focus,a.iconbutton:focus,.pagenav a.button:focus{border-color:#0883d0;box-shadow:0 0 4px 2px rgba(71,135,177,0.8);outline:0}#quotadisplay{left:6px;height:18px;font-size:12px;font-weight:bold;padding-left:30px;background:url(images/quota.png?v=aaa4.1389) -100px 0 no-repeat}#quotadisplay.p90,#quotadisplay.p100{color:#e03221}table.quota-info{border-spacing:0;border-collapse:collapse;table-layout:fixed;margin:5px}table.quota-info td,table.quota-info th{color:white;border:1px solid lightgrey;padding:2px 3px;text-align:center;min-width:80px}table.quota-info td.name{text-align:left}table.quota-info td.root{font-style:italic}.popupmenu,#rcmKSearchpane{display:none;position:absolute;top:32px;left:90px;width:auto;max-height:70%;overflow:-moz-scrollbars-vertical;overflow-y:auto;background:#444;z-index:240;border-radius:4px;box-shadow:0 2px 6px 0 #333}.popupmenu.dropdown{border-radius:0 0 4px 4px;border-top:0}.popupmenu>.buttons{border-top:1px solid #5a5a5a;height:25px;padding-top:5px;text-align:center}ul.toolbarmenu,ul.toolbarmenu ul,#rcmKSearchpane ul{margin:0;padding:0;list-style:none}.googie_list td,ul.toolbarmenu li,#rcmKSearchpane ul li{color:#fff;white-space:nowrap;min-width:130px;margin:0;border-top:1px solid #5a5a5a}.googie_list tr:first-child td,ul.toolbarmenu>li:first-child,select.decorated option:first-child{border-top:0}.googie_list tr:last-child td,ul.toolbarmenu>li:last-child,select.decorated option:last-child{border-bottom:0}.googie_list td span,ul.toolbarmenu li a{display:block;color:#666;text-decoration:none;min-height:14px;padding:6px 16px 6px 10px}.googie_list td span{padding:3px 10px}.googie_list td span,ul.toolbarmenu li a.active{color:#fff;cursor:default}.googie_list td.googie_list_onhover,ul.toolbarmenu li a.active:hover,ul.toolbarmenu li a.active:focus,#rcmKSearchpane ul li.selected,#pagejump-selector ul li.selected,select.decorated option:hover,select.decorated option[selected='selected']{background-color:#0883d0;outline:0}ul.toolbarmenu.iconized li a,ul.toolbarmenu.selectable li a{padding-left:30px}ul.toolbarmenu.selectable li a.selected{background:url(images/messages.png?v=72e9.1264) 4px -27px no-repeat}ul.toolbarmenu li label{display:block;color:#fff;padding:4px 8px}ul.toolbarmenu li.separator label{color:#bbb;font-style:italic;padding:0 8px;line-height:17px}ul.toolbarmenu li input{margin:0}ul.toolbarmenu li a.icon{color:#eee;padding:2px 6px}ul.toolbarmenu li span.icon,#rcmKSearchpane ul li i.icon{display:block;min-height:14px;padding:4px 4px 1px 24px;height:17px;background-image:url(images/listicons.png?v=c458.10409);background-position:-100px 0;background-repeat:no-repeat;opacity:.2}ul.toolbarmenu li a.active span.icon{opacity:.99}ul.toolbarmenu li span.read{background-position:0 -1220px}ul.toolbarmenu li span.unread{background-position:0 -1196px}ul.toolbarmenu li span.flagged{background-position:0 -1244px}ul.toolbarmenu li span.unflagged{background-position:0 -1268px}ul.toolbarmenu li span.mail{background-position:0 -1293px}ul.toolbarmenu li span.list{background-position:0 -1317px}ul.toolbarmenu li span.invert{background-position:0 -1340px}ul.toolbarmenu li span.cross{background-position:0 -1365px}ul.toolbarmenu li span.print{background-position:0 -1436px}ul.toolbarmenu li span.download{background-position:0 -1412px}ul.toolbarmenu li span.rename{background-position:0 -2295px}ul.toolbarmenu li span.edit{background-position:0 -1388px}ul.toolbarmenu li span.viewsource{background-position:0 -1460px}ul.toolbarmenu li span.extwin{background-position:0 -1484px}ul.toolbarmenu li span.conversation{background-position:0 -1532px}ul.toolbarmenu li span.move{background-position:0 -2126px}ul.toolbarmenu li span.copy{background-position:0 -2150px}#pagejump-selector{max-height:250px;overflow-x:hidden}#pagejump-selector ul li{min-width:45px;padding:4px 6px;cursor:default}#snippetslist{max-width:200px}#snippetslist li a{overflow:hidden;text-overflow:ellipsis}#rcmKSearchpane{border-radius:0 0 4px 4px;border-top:0}#rcmKSearchpane ul li{text-decoration:none;min-height:14px;padding:6px 10px 6px 28px;border:0;cursor:default;position:relative}#rcmKSearchpane ul li i.icon{opacity:.99;position:absolute;top:4px;left:5px;width:18px;height:18px;padding:0;background-position:-1px -2223px}#rcmKSearchpane ul li.group i.icon{background-position:-1px -2247px}.popupdialog{display:none;padding:10px}.popupdialog .formbuttons{margin:20px 0 4px 0}.ui-dialog .prompt input{display:block;margin:8px 0}.hint{margin:4px 0;color:#999}.splitter{user-select:none;-moz-user-select:none;-khtml-user-select:none;position:absolute;background:url(images/splitter.png?v=6d32.134) center no-repeat}.splitter-h{height:10px;width:100%;cursor:n-resize;cursor:row-resize;background-position:center 0}.splitter-v{width:10px;height:100%;cursor:e-resize;cursor:col-resize;background-position:0 center}#rcmdraglayer{min-width:260px;width:auto !important;width:260px;padding:6px 8px;background:#444;border:1px solid #555;border-radius:4px;box-shadow:0 2px 6px 0 #333;z-index:250;color:#ccc;white-space:nowrap;opacity:.92}#rcmdraglayer:after{content:"";position:absolute;top:6px;left:-6px;border-style:solid;border-width:6px 6px 6px 0;border-color:transparent #444;display:block;width:0;z-index:251}.draglayercopy:before{position:absolute;bottom:-6px;left:-6px;content:" ";width:16px;height:16px;background:url(images/buttons.png?v=d70c.9130) -7px -358px no-repeat;z-index:255}.popup label>input{margin-left:10px}#folder-selector{z-index:1000}#folder-selector li a span{background:url(images/listicons.png?v=c458.10409) 4px -2021px no-repeat;display:block;height:17px;min-height:14px;padding:4px 4px 1px 28px;overflow:hidden;max-width:120px;text-overflow:ellipsis}#folder-selector li a.virtual{opacity:.2}#folder-selector li a.inbox span{background-position:4px -2049px}#folder-selector li a.drafts span{background-position:4px -1388px}#folder-selector li a.sent span{background-position:4px -2074px}#folder-selector li a.trash span{background-position:4px -1508px}#folder-selector li a.junk span{background-position:4px -2100px}.folderlist li.mailbox a{padding-left:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-image:url(images/listicons.png?v=c458.10409);background-repeat:no-repeat;background-position:6px 3px}.folderlist li.mailbox.unread>a{padding-right:36px}.folderlist li.mailbox>a:focus,.folderlist li.mailbox.selected>a{background-position:6px -21px}.folderlist li.mailbox.inbox>a{background-position:6px -189px}.folderlist li.mailbox.inbox>a:focus,.folderlist li.mailbox.inbox.selected>a{background-position:6px -213px}.folderlist li.mailbox.drafts>a{background-position:6px -238px}.folderlist li.mailbox.drafts>a:focus,.folderlist li.mailbox.drafts.selected>a{background-position:6px -262px}.folderlist li.mailbox.sent>a{background-position:6px -286px}.folderlist li.mailbox.sent>a:focus,.folderlist li.mailbox.sent.selected>a{background-position:6px -310px}.folderlist li.mailbox.junk>a{background-position:6px -334px}.folderlist li.mailbox.junk>a:focus,.folderlist li.mailbox.junk.selected>a{background-position:6px -358px}.folderlist li.mailbox.trash>a{background-position:6px -382px}.folderlist li.mailbox.trash>a:focus,.folderlist li.mailbox.trash.selected>a{background-position:6px -406px}.folderlist li.mailbox.trash.empty>a{background-position:6px -1924px}.folderlist li.mailbox.trash.empty>a:focus,.folderlist li.mailbox.trash.empty.selected>a{background-position:6px -1948px}.folderlist li.mailbox.archive>a{background-position:6px -1699px}.folderlist li.mailbox.archive>a:focus,.folderlist li.mailbox.archive.selected>a{background-position:6px -1723px}.folderlist li.mailbox ul li.drafts>a{background-position:23px -238px}.folderlist li.mailbox ul li.drafts>a:focus,.folderlist li.mailbox ul li.drafts.selected>a{background-position:23px -262px}.folderlist li.mailbox ul li.sent>a{background-position:23px -286px}.folderlist li.mailbox ul li.sent>a:focus,.folderlist li.mailbox ul li.sent.selected>a{background-position:23px -310px}.folderlist li.mailbox ul li.junk>a{background-position:23px -334px}.folderlist li.mailbox ul li.junk>a:focus,.folderlist li.mailbox ul li.junk.selected>a{background-position:23px -358px}.folderlist li.mailbox ul li.trash>a{background-position:23px -382px}.folderlist li.mailbox ul li.trash>a:focus,.folderlist li.mailbox ul li.trash.selected>a{background-position:23px -406px}.folderlist li.mailbox ul li.trash.empty>a{background-position:23px -1924px}.folderlist li.mailbox ul li.trash.empty>a:focus,.folderlist li.mailbox ul li.trash.empty.selected>a{background-position:23px -1948px}.folderlist li.mailbox ul li.archive>a{background-position:23px -1699px}.folderlist li.mailbox ul li.archive>a:focus,.folderlist li.mailbox ul li.archive.selected>a{background-position:23px -1723px}.folderlist li.virtual>a{color:#aaa}.folderlist li.mailbox div.treetoggle{top:13px;left:19px}.folderlist li.mailbox ul li:last-child{border-bottom:0}.folderlist li.mailbox ul{list-style:none;margin:0;padding:0;border-top:1px solid #bbd3da}.folderlist li.mailbox ul li a{padding-left:52px;background-position:22px -93px}.folderlist li.mailbox ul li>a:focus,.folderlist li.mailbox ul li.selected>a{background-position:22px -117px}.folderlist li.mailbox ul li div.treetoggle{left:33px;top:14px}.folderlist li.mailbox ul ul li.mailbox a{padding-left:68px;background-position:38px -93px}.folderlist li.mailbox ul ul li>a:focus,.folderlist li.mailbox ul ul li.selected>a{background-position:38px -117px}.folderlist li.mailbox ul ul li div.treetoggle{left:48px}.folderlist li.mailbox ul ul ul li.mailbox a{padding-left:84px;background-position:54px -93px}.folderlist li.mailbox ul ul ul li>a:focus,.folderlist li.mailbox ul ul ul li.selected>a{background-position:54px -117px}.folderlist li.mailbox ul ul ul li div.treetoggle{left:64px}.folderlist li.mailbox ul ul ul ul li.mailbox a{padding-left:100px;background-position:70px -93px}.folderlist li.mailbox ul ul ul ul li>a:focus,.folderlist li.mailbox ul ul ul ul li.selected>a{background-position:70px -117px}.folderlist li.mailbox ul ul ul ul li div.treetoggle{left:80px}.folderlist li.mailbox ul ul ul ul ul li{padding-left:16px}.folderlist li.mailbox ul ul ul ul ul li div.treetoggle{left:96px}.attachmentslist{list-style:none;margin:0;padding:0;overflow:hidden;text-overflow:ellipsis}.attachmentslist li{display:block;position:relative;background:url(images/filetypes.png?v=a0f5.4718) 0 0 no-repeat;margin-bottom:1px;line-height:24px}.attachmentslist li.txt,.attachmentslist li.text{background-position:0 -416px}.attachmentslist li.pdf{background-position:0 -26px}.attachmentslist li.doc,.attachmentslist li.docx,.attachmentslist li.msword{background-position:0 -52px}.attachmentslist li.odt{background-position:0 -78px}.attachmentslist li.xls,.attachmentslist li.xlsx,.attachmentslist li.msexcel{background-position:0 -104px}.attachmentslist li.ods{background-position:0 -130px}.attachmentslist li.zip,.attachmentslist li.gz{background-position:0 -156px}.attachmentslist li.rar{background-position:0 -182px}.attachmentslist li.image{background-position:0 -208px}.attachmentslist li.jpg,.attachmentslist li.jpeg{background-position:0 -234px}.attachmentslist li.png{background-position:0 -260px}.attachmentslist li.m4p{background-position:0 -286px}.attachmentslist li.mp3,.attachmentslist li.audio{background-position:0 -312px}.attachmentslist li.video{background-position:0 -338px}.attachmentslist li.ics,.attachmentslist li.calendar{background-position:0 -364px}.attachmentslist li.vcard{background-position:0 -390px}.attachmentslist li.sig,.attachmentslist li.pgp-signature,.attachmentslist li.pkcs7-signature{background-position:0 -442px}.attachmentslist li.html{background-position:0 -468px}.attachmentslist li.eml,.attachmentslist li.rfc822{background-position:0 -494px}.attachmentslist li.ppt,.attachmentslist li.pptx,.attachmentslist li.ppsx,.attachmentslist li.vnd.mspowerpoint{background-position:0 -520px}.attachmentslist li.odp,.attachmentslist li.otp{background-position:0 -546px}.attachmentslist li.application.asc{background-position:0 -598px}.attachmentslist li.application.pgp-keys{background-position:0 -572px}.attachmentslist li a{display:block;color:#333;font-weight:bold;padding:3px 15px 3px 30px;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px;outline:0}.attachmentslist li a.drop{background:url(images/buttons.png?v=d70c.9130) no-repeat scroll center -1570px;width:14px;height:20px;cursor:pointer;position:absolute;right:0;top:0;padding:0;overflow:hidden;text-indent:-5000px;outline:0}#compose-attachments .attachmentslist li a.drop{right:24px}.attachmentslist li a:focus,.attachmentslist li a.drop:focus{background-color:rgba(30,150,192,0.5);border-radius:2px}#compose-attachments ul li{padding-right:24px}.attachmentslist li a:hover{text-decoration:underline}.attachmentslist li.uploading{background:url(images/ajaxloader.gif?v=c252.1434) 4px 4px no-repeat;padding-left:30px}.attachmentslist li a.delete,.attachmentslist li a.cancelupload{position:absolute;top:4px;right:0;width:20px;height:18px;padding:0;text-decoration:none;text-indent:-5000px;background-image:url(images/buttons.png?v=d70c.9130);background-position:-6px -338px;background-repeat:no-repeat}.attachmentslist li a.cancelupload{background-position:-6px -378px}.tabbed.ui-tabs{padding:0;border:0 !important;background:0}.ui-dialog .tabbed.ui-tabs{margin:-12px -8px 0 -8px}.boxcontent.tabbed.ui-tabs{padding:10px}.ui-tabs .tabsbar.ui-tabs-nav{margin-bottom:4px}.ui-dialog-content .ui-tabs .tabsbar.ui-tabs-nav{margin-bottom:0}.tabsbar .tablink:last-child{background:0}.tabsbar .tablink:last-child a{border-right:0}.ui-tabs .ui-tabs-nav li.tablink a{background:#fff}.ui-tabs fieldset.ui-tabs-panel{border:0;padding:0;margin-left:0;background:0}.ui-dialog .propform .ui-tabs-panel{display:block;background:#efefef;padding:.5em 1em}#image-selector-form.droptarget{background:url(images/filedrop.png?v=be5d.415) center bottom no-repeat}.mce-btn-small .mce-ico{display:inline}.mce-btn-small i{line-height:16px !important;vertical-align:text-top !important}_:not(),_:-moz-handler-blocked,.mozilla .mce-btn-small i{line-height:20px !important}.mce-textbox{border-radius:0;box-shadow:none}.mce-textbox:focus{box-shadow:none;outline:0}.pgpkeyimport div.key{position:relative;margin-bottom:2px;padding:1em;background-color:#ebebeb}.pgpkeyimport div.key.revoked,.pgpkeyimport div.key.disabled{color:#a0a0a0}.pgpkeyimport div.key label{display:inline-block;margin-right:.5em}.pgpkeyimport div.key label:after{content:":"}.pgpkeyimport div.key label+a,.pgpkeyimport div.key label+span{display:inline-block;margin-right:2em;white-space:nowrap}.pgpkeyimport div.key label+a{font-weight:bold}.pgpkeyimport ul.uids{margin:1em 0 0 0;padding:0}.pgpkeyimport li.uid{border:0;padding:.3em}.pgpkeyimport div.key input.button.importkey{position:absolute;top:.8em;right:.8em;padding:4px 6px}.pgpkeyimport div.key input.button[disabled]{display:none}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/about.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="request:_framed" />
+<body class="iframe fullheight">
+<roundcube:else />
+<body class="ui-widget-content">
+<roundcube:endif />
+
+<div class="readtext">
+<roundcube:object name="aboutcontent" />
+
+<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
+<p class="copyright">Copyright &copy; 2005-2017, The Roundcube Dev Team</p>
+<p class="license">This program is free software; you can redistribute it and/or modify
+it under the terms of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a>
+as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<br/>
+Some <a href="https://roundcube.net/license" target="_blank">exceptions</a> for skins &amp; plugins apply.
+</p>
+
+</div>
+
+<div class="readtext">
+<h3><roundcube:label name="installedplugins" /></h3>
+<roundcube:object name="pluginlist" id="pluginlist" class="records-table" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/addressbook.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,145 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:label name="addressbook" /></h1>
+
+<!-- toolbar -->
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="addressbooktoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="importcontacts" />
+	<span class="dropbutton">
+		<roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" />
+		<a href="#export" class="dropbuttontip" id="exportmenulink" onclick="return UI.toggle_popup('exportmenu',event)" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0"><roundcube:label name="arialabelcontactexportoptions" /></a>
+	</span>
+
+	<span class="spacer"></span>
+	<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
+	<roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="printcontact" />
+	<roundcube:button command="advanced-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="advanced" title="advsearch" />
+	<roundcube:container name="toolbar" id="addressbooktoolbar" />
+
+	<div id="exportmenu" class="popupmenu" aria-hidden="true">
+		<h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="arialabelcontactexportoptions" /></h3>
+		<ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu">
+			<roundcube:button type="link-menuitem" command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" />
+			<roundcube:button type="link-menuitem" command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" />
+		</ul>
+	</div>
+
+</div>
+
+<!-- search box -->
+<div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
+<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelcontactsearchform" /></h2>
+<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label>
+<roundcube:button command="menu-open" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" />
+<roundcube:object name="searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
+
+<div id="searchmenu" class="popupmenu" data-editable="true">
+	<h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3>
+	<ul class="toolbarmenu" id="searchmenu-menu" role="menu" aria-labelledby="aria-label-searchmenu">
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li>
+	</ul>
+	<div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
+</div>
+</div>
+
+<div id="mainscreencontent">
+
+<div id="addressview-left">
+
+<!-- sources/groups list -->
+<div id="directorylistbox" class="uibox listbox" role="navigation" aria-labelledby="directorylist-header">
+<h2 id="directorylist-header" class="boxtitle"><roundcube:label name="groups" /></h2>
+<div id="directorylist-content" class="scroller withfooter">
+	<roundcube:object name="directorylist" id="directorylist" class="treelist listing iconized" />
+	<h3 class="boxtitle voice"><roundcube:label name="savedsearches" /></h3>
+	<roundcube:object name="savedsearchlist" id="savedsearchlist" class="treelist listing iconized" />
+</div>
+<div id="directorylist-footer" class="boxfooter">
+	<roundcube:button command="group-create" type="link" title="newgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addgroup" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('groupoptions',event)" innerClass="inner" label="arialabelabookgroupoptions" aria-haspopup="true" aria-expanded="false" aria-owns="groupoptionsmenu" />
+</div>
+</div>
+
+<div id="groupoptions" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-groupoptions" class="voice"><roundcube:label name="arialabelabookgroupoptions" /></h3>
+	<ul id="groupoptionsmenu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-groupoptions">
+		<roundcube:button type="link-menuitem" command="group-rename" label="grouprename" classAct="active" />
+		<roundcube:button type="link-menuitem" command="group-delete" label="groupdelete" classAct="active" />
+		<roundcube:button type="link-menuitem" command="search-create" label="searchsave" classAct="active" />
+		<roundcube:button type="link-menuitem" command="search-delete" label="searchdelete" classAct="active" />
+		<roundcube:container name="groupoptions" id="groupoptionsmenu" />
+	</ul>
+</div>
+
+</div><!-- end addressview-left -->
+
+<div id="addressview-right" role="main" aria-labelledby="aria-label-contactslist">
+
+<!-- contacts list -->
+<div id="addresslist" class="uibox listbox">
+<roundcube:object name="addresslisttitle" label="contacts" tag="h2" class="boxtitle" id="aria-label-contactslist" />
+<div class="scroller withfooter">
+<roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" />
+</div>
+<div class="boxpagenav">
+	<roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
+	<roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
+	<roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
+	<roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
+</div>
+<div class="boxfooter">
+	<roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addcontact" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="deletecontact" /><roundcube:button command="group-remove-selected" type="link" title="groupremoveselected" class="listbutton removegroup disabled" classAct="listbutton removegroup" innerClass="inner" label="groupremoveselected" />
+	<span class="countdisplay" aria-live="polite" aria-relevant="text">
+		<span class="voice"><roundcube:label name="contacts" /></span>
+		<roundcube:object name="recordsCountDisplay" label="fromtoshort" />
+	</span>
+</div>
+</div>
+
+<div class="voice" role="note">
+<h3><roundcube:label name="helplistnavigation" /></h3>
+<pre>
+<roundcube:label name="helplistkeyboardnavigation" />
+<roundcube:label name="helplistkeyboardnavcontacts" />
+</pre>
+</div>
+
+
+<div id="contacts-box" class="uibox">
+	<div class="iframebox">
+		<roundcube:object name="addressframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="contactproperties" />
+	</div>
+</div>
+
+</div><!-- end addressview-right -->
+
+</div><!-- end mainscreencontent -->
+
+</div><!-- end mainscreen -->
+
+<div id="dragcontactmenu" class="popupmenu" aria-hidden="true">
+	<ul class="toolbarmenu" role="menu">
+		<roundcube:button type="link-menuitem" command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" />
+		<roundcube:button type="link-menuitem" command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" />
+	</ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/compose.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,229 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<roundcube:if condition="config:enable_spellcheck" />
+<link rel="stylesheet" type="text/css" href="/googiespell.css" />
+<roundcube:endif />
+</head>
+<roundcube:if condition="env:extwin" /><body class="extwin"><roundcube:else /><body><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:object name="pagetitle" /></h1>
+
+<!-- toolbar -->
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" label="cancel" condition="!env:extwin" tabindex="2" />
+	<roundcube:button command="close" type="link" class="button close disabled" classAct="button close" label="cancel" condition="env:extwin" tabindex="2" />
+	<span class="spacer"></span>
+	<roundcube:button command="send" type="link" class="button send disabled" classAct="button send" label="send" title="sendmessage" tabindex="2" />
+	<roundcube:button command="savedraft" type="link" class="button savedraft disabled" classAct="button savedraft" label="save" title="savemessage" tabindex="2" />
+	<span class="spacer"></span>
+	<roundcube:if condition="config:enable_spellcheck" />
+	<span class="dropbutton">
+		<roundcube:button command="spellcheck" type="link" class="button spellcheck disabled" classAct="button spellcheck" classSel="button spellcheck pressed" label="spellcheck" title="checkspelling" tabindex="2" />
+		<a href="#languages" class="dropbuttontip" id="spellmenulink" onclick="UI.toggle_popup('spellmenu',event);return false" aria-haspopup="true" aria-expanded="false" tabindex="2">Select Spell Language</a>
+	</span>
+	<roundcube:endif />
+	<roundcube:button name="addattachment" type="link" class="button attach" label="attach" title="addattachment" onclick="rcmail.upload_input('uploadform')" aria-haspopup="true" aria-expanded="false" tabindex="2" />
+	<roundcube:button command="insert-sig" type="link" class="button insertsig disabled" classAct="button insertsig" label="signature" title="insertsignature" tabindex="2" />
+	<a href="#responses" class="button responses" label="responses" title="<roundcube:label name='insertresponse' />" id="responsesmenulink" unselectable="on" onmousedown="return false" onclick="UI.toggle_popup('responsesmenu',event);return false" tabindex="2" aria-haspopup="true" aria-expanded="false" aria-owns="textresponsesmenu"><roundcube:label name="responses" /></a>
+	<roundcube:button command="compose-encrypted" type="link" class="button encrypt disabled" classAct="button encrypt" classSel="button encrypt selected" label="encrypt" title="encryptmessagemailvelope" tabindex="2" style="display:none" />
+	<roundcube:container name="toolbar" id="compose-toolbar" />
+</div>
+
+<div id="mainscreencontent">
+
+<div id="composeview-left">
+
+<!-- inline address book -->
+<div id="compose-contacts" class="uibox listbox" role="region" aria-labelledby="aria-label-composecontacts">
+<h2 id="aria-label-composecontacts" class="boxtitle"><roundcube:label name="contacts" /></h2>
+	<div class="listsearchbox" role="search" aria-labelledby="aria-label-composequicksearch">
+		<h3 id="aria-label-composequicksearch" class="voice"><roundcube:label name="arialabelcontactquicksearch" /></h3>
+		<div class="searchbox">
+			<label for="contactsearchbox" class="voice"><roundcube:label name="arialabelcontactsearchbox" /></label>
+			<roundcube:object name="searchform" id="contactsearchbox" />
+			<a id="searchmenulink" class="iconbutton searchicon"> </a>
+			<roundcube:button command="reset-search" class="iconbutton reset" title="resetsearch" content=" " />
+		</div>
+	</div>
+	<roundcube:object name="addressbooks" id="directorylist" class="treelist listing" summary="ariasummarycomposecontacts" />
+	<div class="scroller withfooter" tabindex="-1">
+		<roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" />
+	</div>
+<div class="boxfooter">
+	<roundcube:button command="add-recipient" prop="to" type="link" title="to" class="listbutton addto disabled" classAct="listbutton addto" innerClass="inner" content="To+" /><roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="listbutton addcc disabled" classAct="listbutton addcc" innerClass="inner" content="Cc+" /><roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="listbutton addbcc disabled" classAct="listbutton addbcc" innerClass="inner" content="Bcc+" /><roundcube:container name="compose-contacts-toolbar" id="compose-contacts-toolbar" />
+</div>
+<div class="boxpagenav">
+	<roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
+	<roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
+	<roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
+	<roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
+</div>
+</div>
+
+</div>
+
+<div id="composeview-right" role="main">
+
+<roundcube:form name="form" method="post" id="compose-content" class="uibox">
+
+<!-- message headers -->
+<div id="composeheaders" role="region" aria-labelledby="aria-label-composeheaders">
+<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
+
+<a href="#options" id="composeoptionstoggle" class="moreheaderstoggle" title="<roundcube:label name='togglecomposeoptions' />" aria-expanded="false"><span class="iconlink"></span></a>
+
+<table class="headers-table compose-headers">
+<tbody>
+	<tr>
+		<td class="title"><label for="_from"><roundcube:label name="from" /></label></td>
+		<td class="editfield">
+			<roundcube:object name="composeHeaders" part="from" form="form" id="_from" tabindex="1" />
+			<a href="#identities" onclick="return rcmail.command('identities')" class="iconlink edit" tabindex="0"><roundcube:label name="editidents" /></a>
+		</td>
+	</tr><tr>
+		<td class="title top"><label for="_to"><roundcube:label name="to" /></label></td>
+		<td class="editfield"><roundcube:object name="composeHeaders" part="to" form="form" id="_to" cols="70" rows="1" tabindex="1" aria-required="true" /></td>
+	</tr><tr id="compose-cc">
+		<td class="title top">
+			<label for="_cc"><roundcube:label name="cc" /></label>
+			<a href="#cc" onclick="return UI.hide_header_row('cc');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="cc" /></a>
+		</td>
+		<td class="editfield"><roundcube:object name="composeHeaders" part="cc" form="form" id="_cc" cols="70" rows="1" tabindex="1" /></td>
+	</tr><tr id="compose-bcc">
+		<td class="title top">
+			<label for="_bcc"><roundcube:label name="bcc" /></label>
+			<a href="#bcc" onclick="return UI.hide_header_row('bcc');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="bcc" /></a>
+		</td>
+		<td class="editfield"><roundcube:object name="composeHeaders" part="bcc" form="form" id="_bcc" cols="70" rows="1" tabindex="1" /></td>
+	</tr><tr id="compose-replyto">
+		<td class="title top">
+			<label for="_replyto"><roundcube:label name="replyto" /></label>
+			<a href="#replyto" onclick="return UI.hide_header_row('replyto');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="replyto" /></a>
+		</td>
+		<td class="editfield"><roundcube:object name="composeHeaders" part="replyto" form="form" id="_replyto" size="70" tabindex="1" /></td>
+	</tr><tr id="compose-followupto">
+		<td class="title top">
+			<label for="_followupto"><roundcube:label name="followupto" /></label>
+			<a href="#followupto" onclick="return UI.hide_header_row('followupto');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="followupto" /></a>
+		</td>
+		<td class="editfield"><roundcube:object name="composeHeaders" part="followupto" form="form" id="_followupto" size="70" tabindex="1" /></td>
+	</tr><tr>
+		<td></td>
+		<td class="formlinks">
+			<a href="#cc" onclick="return UI.show_header_row('cc')" id="cc-link" class="iconlink add" tabindex="3"><roundcube:label name="addcc" /></a>
+			<a href="#bcc" onclick="return UI.show_header_row('bcc')" id="bcc-link" class="iconlink add" tabindex="3"><roundcube:label name="addbcc" /></a>
+			<a href="#reply-to" onclick="return UI.show_header_row('replyto')" id="replyto-link" class="iconlink add" tabindex="3"><roundcube:label name="addreplyto" /></a>
+			<a href="#followup-to" onclick="return UI.show_header_row('followupto')" id="followupto-link" class="iconlink add" tabindex="3"><roundcube:label name="addfollowupto" /></a>
+		</td>
+	</tr><tr>
+		<td class="title"><label for="compose-subject"><roundcube:label name="subject" /></label></td>
+		<td class="editfield"><roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="1" /></td>
+	</tr>
+</tbody>
+</table>
+
+<div id="composebuttons" class="formbuttons">
+	<roundcube:button command="extwin" type="link" class="button extwin" classSel="button extwin pressed" innerClass="icon" title="openinextwin" label="openinextwin" condition="!env:extwin" />
+</div>
+
+<!-- (collapsible) message options -->
+<div id="composeoptions" role="region" aria-labelledby="aria-label-composeoptions">
+	<h2 id="aria-label-composeoptions" class="voice"><roundcube:label name="arialabelcomposeoptions" /></h2>
+	<roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
+	<span class="composeoption">
+		<label><roundcube:label name="editortype" />
+			<roundcube:object name="editorSelector" editorid="composebody" tabindex="4" /></label>
+	</span>
+	<roundcube:endif />
+	<span class="composeoption">
+		<label for="rcmcomposepriority"><roundcube:label name="priority" />
+			<roundcube:object name="prioritySelector" form="form" id="rcmcomposepriority" tabindex="4" /></label>
+	</span>
+	<roundcube:if condition="!in_array('mdn_default', (array)config:dont_override)" />
+	<span class="composeoption">
+		<label><roundcube:object name="mdnCheckBox" form="form" id="rcmcomposereceipt" tabindex="4" /> <roundcube:label name="returnreceipt" /></label>
+	</span>
+	<roundcube:endif />
+	<roundcube:if condition="!in_array('dsn_default', (array)config:dont_override)" />
+	<span class="composeoption">
+		<label><roundcube:object name="dsnCheckBox" form="form" id="rcmcomposedsn" tabindex="4" /> <roundcube:label name="dsn" /></label>
+	</span>
+	<roundcube:endif />
+	<roundcube:if condition="!config:no_save_sent_messages" />
+	<span class="composeoption">
+		<label><roundcube:label name="savesentmessagein" /> <roundcube:object name="storetarget" maxlength="30" style="max-width:12em" tabindex="4" /></label>
+	</span>
+	<roundcube:endif />
+	<roundcube:container name="composeoptions" id="composeoptions" />
+</div>
+
+</div>
+
+<!-- message compose body -->
+<div id="composeview-bottom">
+	<div id="composebodycontainer">
+		<label for="composebody" class="voice"><roundcube:label name="arialabelmessagebody" /></label>
+		<roundcube:object name="composeBody" id="composebody" form="form" cols="70" rows="20" tabindex="1" />
+	</div>
+	<div id="compose-attachments" class="rightcol" role="region" aria-labelledby="aria-label-composeattachments">
+		<h2 id="aria-label-composeattachments" class="voice"><roundcube:label name="attachments" /></h2>
+		<div style="text-align:center; margin-bottom:10px">
+            <roundcube:object name="composeAttachmentForm" mode="hint" />
+			<a class="button" tabindex="1" href="#" onclick="rcmail.upload_input('uploadform')"><roundcube:label name="addattachment" /></a>
+		</div>
+		<roundcube:object name="composeAttachmentList" id="attachment-list" class="attachmentslist" tabindex="1" />
+		<roundcube:object name="fileDropArea" id="compose-attachments" />
+	</div>
+<!--
+	<div id="composeformbuttons" class="footerleft formbuttons floating">
+		<roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="11" />
+		<roundcube:button type="input" command="savedraft" class="button" label="savemessage" tabindex="12" />
+		<roundcube:button type="input" command="list" class="button" label="cancel" tabindex="13" />
+	</div>
+-->
+</div>
+
+</form>
+
+</div><!-- end mailview-right -->
+
+</div><!-- end mainscreencontent -->
+
+</div><!-- end mainscreen -->
+
+<roundcube:object name="composeAttachmentForm" id="uploadform" mode="smart" />
+
+<div id="spellmenu" class="popupmenu" aria-hidden="true"></div>
+
+<div id="responsesmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-responsesmenu" class="voice"><roundcube:label name="arialabelresponsesmenu" /></h3>
+	<ul class="toolbarmenu" id="textresponsesmenu" role="menu" aria-labelledby="aria-label-responsesmenu">
+		<li role="separator" class="separator" id=""><label><roundcube:label name="insertresponse" /></label></li>
+		<roundcube:object name="responseslist" id="responseslist" tagname="ul" itemclass="active" />
+		<li role="separator" class="separator"><label><roundcube:label name="manageresponses" /></label></li>
+		<roundcube:button command="save-response" type="link-menuitem" label="newresponse" classAct="active" unselectable="on" />
+		<roundcube:button command="responses" type="link-menuitem" label="editresponses" classAct="active" />
+	</ul>
+</div>
+
+<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
+	<ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
+		<roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
+		<roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
+		<roundcube:button command="rename-attachment" id="attachmenurename" type="link-menuitem" label="rename" class="icon" classAct="icon active" innerclass="icon rename" />
+		<roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
+	</ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/contact.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:label name="contactproperties" /></h1>
+
+<div id="contact-details" class="boxcontent">
+	<roundcube:if condition="strlen(env:sourcename)" />
+		<div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div>
+	<roundcube:endif />
+
+	<div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
+	<roundcube:object name="contacthead" id="contacthead" />
+	<br style="clear:both" />
+
+	<div id="contacttabs" class="tabbed">
+		<roundcube:object name="contactdetails" />
+	</div>
+
+</div>
+
+<div id="headerbuttons" class="formbuttons">
+	<roundcube:button command="edit" type="input" class="button mainaction" label="editcontact" condition="!ENV:readonly" />
+	<roundcube:if condition="env:qrcode" />
+	<roundcube:button command="qrcode" type="input" class="button" label="qrcode" />
+	<roundcube:endif />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/contactedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,48 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
+
+<roundcube:form name="editform" method="post" id="contact-details" class="boxcontent">
+	<roundcube:if condition="strlen(env:sourcename)" />
+		<div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" condition="env:action!='add'" /><roundcube:object name="sourceselector" id="sourceselect" condition="env:action=='add'" /></div>
+	<roundcube:endif />
+
+	<fieldset id="contactphoto">
+		<legend class="voice"><roundcube:label name="contactphoto" /></legend>
+		<roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" />
+		<roundcube:if condition="env:photocol" />
+		<roundcube:object name="fileDropArea" id="contactpic" />
+		<div class="formlinks">
+			<roundcube:button command="upload-photo" id="uploadformlink" type="link" label="replacephoto" class="iconlink upload disabled" classAct="iconlink upload active" onclick="rcmail.upload_input('upload-form')" condition="env:photocol" /><br/>
+			<roundcube:button command="delete-photo" type="link" label="delete" class="iconlink delete disabled" classAct="iconlink delete active" condition="env:photocol" />
+		</div>
+		<roundcube:endif />
+	</fieldset>
+
+	<roundcube:object name="contactedithead" id="contacthead" size="16" form="editform" />
+	<br style="clear:both" />
+
+	<div id="contacttabs" class="tabbed">
+		<roundcube:object name="contacteditform" size="40" textareacols="60" form="editform" />
+	</div>
+
+</form>
+
+<div class="footerleft formbuttons">
+	<roundcube:button command="save" type="input" class="button mainaction" label="save" />
+	<roundcube:button command="show" type="input" class="button" label="cancel" condition="env:action=='edit'" />
+	<roundcube:button name="cancel" type="input" class="button" label="cancel" onclick="history.back()" condition="env:action=='add'" />
+</div>
+
+<roundcube:object name="photoUploadForm" id="upload-form" mode="smart" />
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/contactprint.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/print.css" />
+</head>
+<body>
+
+<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /></div>
+
+<div id="contact-details" class="boxcontent">
+	<div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
+	<roundcube:object name="contacthead" id="contacthead" />
+	<br style="clear:both" />
+	<roundcube:object name="contactdetails" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/contactsearch.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:label name="advsearch" /></h1>
+
+<div id="contact-details" class="boxcontent">
+	<roundcube:object name="searchform" id="advsearchform" class="tabbed" size=30 />
+	<p class="formbuttons">
+		<roundcube:button command="save" type="input" class="button mainaction" label="search" />
+	</p>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/error.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="!env:framed" />
+<roundcube:if condition="env:extwin" /><body class="error extwin"><roundcube:else /><body class="error"><roundcube:endif />
+<roundcube:include file="/includes/header.html" />
+<roundcube:else />
+<body class="error iframe">
+<roundcube:endif />
+
+<div class="uibox centerbox errorbox">
+$__page_content
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/folderedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:label name="folderproperties" /></h1>
+
+<div class="boxcontent">
+<roundcube:object name="folderdetails" class="propform" />
+</div>
+
+<div class="footerleft formbuttons">
+	<roundcube:button command="save" type="input" class="button mainaction" label="save" />
+	<roundcube:if condition="!strlen(request:_mbox)" />
+	<input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />&nbsp;
+	<roundcube:endif />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/folders.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="folders" /></h1>
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="settings-right" role="main">
+
+<div id="folderslist" class="uibox listbox">
+<h2 id="folderslist-header" class="boxtitle">
+	<roundcube:label name="folders" />
+	<a href="#folders" class="iconbutton search" title="<roundcube:label name='findfolders' />" tabindex="0"><roundcube:label name='findfolders' /></a>
+</h2>
+<div class="listsearchbox">
+	<roundcube:object name="folderfilter" id="folderlist-filter" />
+	<div class="searchbox" role="search" aria-labelledby="aria-label-foldersearchform">
+		<h3 id="aria-label-foldersearchform" class="voice"><roundcube:label name="arialabelfoldersearchform" /></h3>
+		<label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label>
+		<input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" />
+		<a class="iconbutton searchicon"></a>
+		<roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
+	</div>
+</div>
+<div id="folderslist-content" class="scroller withfooter">
+	<roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table" class="treelist listing folderlist" />
+</div>
+<div id="folderslist-footer" class="boxfooter">
+	<roundcube:button command="create-folder" type="link" title="createfolder" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="createfolder" /><roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="return UI.toggle_popup('mailboxmenu',event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="mailboxoptionsmenu" />
+	<roundcube:if condition="env:quota" />
+		<span class="voice"><roundcube:label name="quota"></span>
+		<roundcube:object name="quotaDisplay" id="quotadisplay" class="countdisplay" display="text" />
+	<roundcube:endif />
+</div>
+
+<div id="mailboxmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-mailboxmenu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
+	<ul class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu">
+		<roundcube:button command="delete-folder" type="link-menuitem" label="delete" classAct="active" />
+		<roundcube:button command="purge" type="link-menuitem" label="empty" classAct="active" />
+		<roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
+	</ul>
+</div>
+
+</div>
+
+<div id="folder-details" class="uibox contentbox">
+	<div class="iframebox">
+		<roundcube:object name="folderframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" />
+	</div>
+</div>
+
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/identities.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="identities" /></h1>
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="settings-right" role="main" aria-labelledby="aria-label-identitieslist">
+<div id="identitieslist" class="uibox listbox">
+<h2 class="boxtitle" id="aria-label-identitieslist"><roundcube:label name="identities" /></h2>
+<div class="scroller withfooter">
+<roundcube:object name="identitiesList" id="identities-table" class="listing" noheader="true" editIcon="" role="listbox" />
+</div>
+<div class="boxfooter">
+<roundcube:button command="add" type="link" title="newidentity" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addidentity" condition="config:identities_level:0<2" /><roundcube:button command="delete" type="link" title="delete" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="delete" condition="config:identities_level:0<2" />
+</div>
+</div>
+
+<div id="identity-details" class="uibox contentbox">
+	<div class="iframebox">
+		<roundcube:object name="identityframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelidentityeditfrom" />
+	</div>
+</div>
+
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/identityedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
+
+<div id="preferences-details" class="boxcontent">
+<roundcube:object name="identityform" class="propform" size="40" textareacols="40" textarearows="6" />
+</div>
+
+<div class="footerleft formbuttons">
+	<roundcube:button command="save" type="input" class="button mainaction" label="save" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/importcontacts.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="extwin"><roundcube:else /><body><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="importcontacts" /></h1>
+
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="addressbooktoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
+</div>
+
+<div id="mainscreencontent" class="uibox contentbox">
+	<h2 class="boxtitle"><roundcube:label name="importcontacts" /></h2>
+
+	<div id="import-box" class="boxcontent">
+		<roundcube:object name="importstep" class="propform" />
+		<br/>
+		<p class="formbuttons">
+		<roundcube:object name="importnav" class="button" />
+		</p>
+	</div>
+
+</div>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/login.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,55 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<h1 class="voice"><roundcube:object name="productname" /> <roundcube:label name="login" /></h1>
+
+<div id="login-form">
+<div class="box-inner" role="main">
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" />
+
+<roundcube:form name="form" method="post">
+<roundcube:object name="loginform" form="form" size="40" submit=true />
+</form>
+
+</div>
+
+<div class="box-bottom" role="complementary">
+	<roundcube:object name="message" id="message" />
+	<noscript>
+		<p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
+	</noscript>
+</div>
+
+<div id="bottomline" role="contentinfo">
+	<roundcube:object name="productname" /> <roundcube:object name="version" condition="config:display_version" />
+	<roundcube:if condition="config:support_url" />
+		&nbsp;&#9679;&nbsp; <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
+	<roundcube:endif />
+	<roundcube:container name="loginfooter" id="bottomline" />
+</div>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+<roundcube:object name="preloader" images="
+  /images/ajaxloader.gif
+  /images/ajaxloader_dark.gif
+  /images/buttons.png
+  /images/addcontact.png
+  /images/filetypes.png
+  /images/listicons.png
+  /images/messages.png
+  /images/messages_dark.png
+  /images/quota.png
+  /images/selector.png
+  /images/splitter.png
+  /images/watermark.jpg
+" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/mail.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,270 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<style type="text/css">
+<roundcube:if condition="env:layout != 'list'" />
+	#mailview-top { height: 270px; }
+	#mailview-bottom { top: 284px; height: auto; display: block; }
+	#mailpreviewframe { display: block; }
+<roundcube:endif />
+</style>
+</head>
+<body class="minwidth">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:label name="mail" /></h1>
+
+<!-- toolbar -->
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="messagetoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="checkmail" type="link" class="button checkmail disabled" classAct="button checkmail" classSel="button checkmail pressed" label="refresh" title="checkmail" />
+	<roundcube:include file="/includes/mailtoolbar.html" />
+</div>
+
+<div id="messagesearchtools">
+
+<!-- search filter -->
+<div id="searchfilter">
+	<label for="messagessearchfilter" class="voice"><roundcube:label name="arialabelmessagessearchfilter" /></label>
+	<roundcube:object name="searchfilter" class="searchfilter decorated" id="messagessearchfilter" aria-controls="messagelist" />
+</div>
+
+<!-- search box -->
+<div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
+<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelmailsearchform" /></h2>
+<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelmailquicksearchbox" /></label>
+<roundcube:button command="menu-open" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" />
+<roundcube:object name="searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
+
+<div id="searchmenu" class="popupmenu" data-editable="true">
+	<h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3>
+	<ul class="toolbarmenu" id="searchmenu-menu" role="menu" aria-labelledby="aria-label-searchmenu">
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="body" id="s_mod_body" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li>
+		<li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li>
+		<li role="separator" class="separator"><label><roundcube:label name="date" /></label></li>
+		<li role="menuitem"><roundcube:object name="searchinterval" id="s_interval" onchange="rcmail.set_searchinterval($(this).val())" /></li>
+		<li role="separator" class="separator"><label><roundcube:label name="searchscope" /></label></li>
+		<li role="menuitem"><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
+		<li role="menuitem"><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="subfolders" /></span></label></li>
+		<li role="menuitem"><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="allfolders" /></span></label></li>
+	</ul>
+	<div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
+</div>
+
+</div>
+
+</div>
+
+<div id="mainscreencontent" class="<roundcube:var name="env:layout" />">
+<div id="mailview-left">
+
+<!-- folders list -->
+<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
+<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
+<div id="folderlist-content" class="scroller withfooter">
+	<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
+</div>
+<div id="folderlist-footer" class="boxfooter">
+	<roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.toggle_popup('mailboxmenu',event);return false" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="mailboxoptionsmenu" />
+	<roundcube:if condition="env:quota" />
+		<span class="voice"><roundcube:label name="quota"></span>
+		<roundcube:object name="quotaDisplay" id="quotadisplay" class="countdisplay" display="text" />
+	<roundcube:endif />
+</div>
+</div>
+
+</div>
+
+<div id="mailview-right" role="main">
+
+<roundcube:if condition="env:layout == 'desktop'" />
+<div id="mailview-top" class="uibox">
+<roundcube:else />
+<div id="mailview-top" class="uibox fullheight">
+<roundcube:endif />
+
+<!-- messagelist -->
+<div id="messagelistheader"><roundcube:object name="listmenulink" optionsmenuIcon="true" /></div>
+<div id="messagelistcontainer" class="boxlistcontent" tabindex="-1">
+<h2 id="aria-label-messagelist" class="voice"><roundcube:label name="arialabelmessagelist" /></h2>
+<roundcube:object name="messages"
+	id="messagelist"
+	class="records-table messagelist sortheader fixedheader"
+	optionsmenuIcon="true"
+	aria-labelledby="aria-label-messagelist" />
+</div>
+
+<div class="voice" role="note">
+<h3><roundcube:label name="helplistnavigation" /></h3>
+<pre>
+<roundcube:label name="helplistkeyboardnavigation" />
+<roundcube:label name="helplistkeyboardnavmessages" />
+</pre>
+</div>
+
+<!-- list footer -->
+<div id="messagelistfooter">
+	<div id="listcontrols">
+		<roundcube:button href="#list" command="set-listmode" prop="list" class="iconbutton listmode disabled" classAct="iconbutton listmode" id="maillistmode" title="list" content="List" />
+		<roundcube:button href="#threads" command="set-listmode" prop="threads" class="iconbutton threadmode disabled" classAct="iconbutton threadmode" id="mailthreadmode" title="threads" content="Threads" />
+	</div>
+	
+	<div id="listselectors">
+	<a href="#select" id="listselectmenulink" class="menuselector" onclick="UI.toggle_popup('listselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="listselectmenu-menu"><span class="handle"><roundcube:label name="select" /></span></a>
+	<roundcube:if condition="env:threads" />
+		&nbsp; <a href="#threads" id="threadselectmenulink" class="menuselector" onclick="UI.toggle_popup('threadselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="threadselectmenu-menu"><span class="handle"><roundcube:label name="threads" /></span></a>
+	<roundcube:endif />
+	</div>
+
+	<div id="countcontrols" class="pagenav dark">
+		<roundcube:object name="messageCountDisplay" class="countdisplay" aria-live="polite" aria-relevant="text" />
+		<span class="pagenavbuttons">
+		<roundcube:button command="firstpage" type="link" class="button firstpage disabled" classAct="button firstpage" classSel="button firstpage pressed" innerClass="inner" title="firstpage" label="first" />
+		<roundcube:button command="previouspage" type="link" class="button prevpage disabled" classAct="button prevpage" classSel="button prevpage pressed" innerClass="inner" title="previouspage" label="previous" />
+		<input id="pagejumper" class="pagejumper" type="text" size="3" disabled title="<roundcube:label name="currpage" />" />
+		<roundcube:button command="nextpage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextpage" label="next" />
+		<roundcube:button command="lastpage" type="link" class="button lastpage disabled" classAct="button lastpage" classSel="button lastpage pressed" innerClass="inner" title="lastpage" label="last" />
+		</span>
+	</div>
+
+	<roundcube:container name="listcontrols" id="listcontrols" />
+</div>
+
+</div><!-- end mailview-top -->
+
+<div id="mailview-bottom" class="uibox">
+
+<div id="mailpreviewframe" class="iframebox" role="complementary" aria-labelledby="aria-label-mailpreviewframe">
+<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
+<roundcube:object name="messagecontentframe" id="messagecontframe" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelmailpreviewframe" />
+</div>
+
+</div><!-- end mailview-bottom -->
+
+</div><!-- end mailview-right -->
+
+</div><!-- end mainscreencontent -->
+
+</div><!-- end mainscreen -->
+
+<div id="dragmessagemenu" class="popupmenu" aria-hidden="true">
+	<ul class="toolbarmenu" role="menu">
+		<roundcube:button command="move" type="link-menuitem" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" />
+		<roundcube:button command="copy" type="link-menuitem" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" />
+	</ul>
+</div>
+
+<div id="mailboxmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-mailboxmenu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
+	<ul class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu">
+		<roundcube:button command="expunge" type="link-menuitem" label="compact" classAct="active" />
+		<roundcube:button command="purge" type="link-menuitem" label="empty" classAct="active" />
+		<roundcube:button command="mark-all-read" type="link-menuitem" label="markallread" classAct="active" />
+		<roundcube:button command="import-messages" type="link-menuitem" name="messageimport" classAct="active" label="importmessages" onclick="if (rcmail.command_enabled('import-messages')) rcmail.upload_input('uploadform')" />
+		<roundcube:button command="folders" task="settings" type="link-menuitem" label="managefolders" classAct="active" />
+		<roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
+	</ul>
+</div>
+
+<div id="listselectmenu" class="popupmenu dropdown" aria-hidden="true">
+	<h3 id="aria-label-listselectmenu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
+	<ul id="listselectmenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-listselectmenu">
+		<roundcube:button command="select-all" type="link-menuitem" label="all" class="icon" classAct="icon active" innerclass="icon mail" />
+		<roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="icon" classAct="icon active" innerclass="icon list" />
+		<roundcube:button command="select-all" type="link-menuitem" prop="unread" label="unread" class="icon" classAct="icon active" innerclass="icon unread" />
+		<roundcube:button command="select-all" type="link-menuitem" prop="flagged" label="flagged" class="icon" classAct="icon active" innerclass="icon flagged" />
+		<roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="icon" classAct="icon active" innerclass="icon invert" />
+		<roundcube:button command="select-none" type="link-menuitem" label="none" class="icon" classAct="icon active" innerclass="icon cross" />
+	</ul>
+</div>
+
+<div id="threadselectmenu" class="popupmenu dropdown" aria-hidden="true">
+	<h3 id="aria-label-threadselectmenu" class="voice"><roundcube:label name="arialabelthreadselectmenu" /></h3>
+	<ul id="threadselectmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-threadselectmenu">
+		<roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="icon" classAct="icon active" innerclass="icon conversation" />
+		<roundcube:button command="expand-unread" type="link-menuitem" label="expand-unread" class="icon" classAct="icon active" innerclass="icon conversation" />
+		<roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="icon" classAct="icon active" innerclass="icon conversation" />
+	</ul>
+</div>
+
+<div id="listoptions" class="propform popupdialog" role="dialog" aria-labelledby="aria-label-listoptions" aria-hidden="true">
+<h2 id="aria-label-listoptions" class="voice"><roundcube:label name="arialabelmessagelistoptions" /></h2>
+	<roundcube:if condition="!in_array('layout', (array)config:dont_override)" />
+	<fieldset id="listoptions-layout" class="floating">
+		<legend><roundcube:label name="layout" /></legend>
+		<ul class="proplist">
+			<li><label><input type="radio" name="layout" value="widescreen" /> <span><roundcube:label name="layoutwidescreen" /></span></label></li>
+			<li><label><input type="radio" name="layout" value="desktop" /> <span><roundcube:label name="layoutdesktop" /></span></label></li>
+			<li><label><input type="radio" name="layout" value="list" /> <span><roundcube:label name="layoutlist" /></span></label></li>
+		</ul>
+	</fieldset>
+	<roundcube:endif />
+	<roundcube:if condition="!in_array('list_cols', (array)config:dont_override)" />
+	<fieldset id="listoptions-columns" class="floating">
+		<legend><roundcube:label name="listcolumns" /></legend>
+		<ul class="proplist">
+			<li><label class="disabled"><input type="checkbox" name="list_col[]" value="threads" checked disabled /> <span><roundcube:label name="threads" /></span></label></li>
+			<li><label class="disabled"><input type="checkbox" name="list_col[]" value="subject" checked disabled /> <span><roundcube:label name="subject" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="from" /> <span><roundcube:label name="from" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="to" /> <span><roundcube:label name="to" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="replyto" /> <span><roundcube:label name="replyto" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="date" /> <span><roundcube:label name="date" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="size" /> <span><roundcube:label name="size" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="status" /> <span><roundcube:label name="readstatus" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="attachment" /> <span><roundcube:label name="attachment" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="flag" /> <span><roundcube:label name="flag" /></span></label></li>
+			<li><label><input type="checkbox" name="list_col[]" value="priority" /> <span><roundcube:label name="priority" /></span></label></li>
+		</ul>
+	</fieldset>
+	<roundcube:endif />
+	<roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" />
+	<fieldset id="listoptions-sortcol" class="floating">
+		<legend><roundcube:label name="listsorting" /></legend>
+		<ul class="proplist">
+			<li><label><input type="radio" name="sort_col" value="" /> <span><roundcube:label name="nonesort" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="arrival" /> <span><roundcube:label name="arrival" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="date" /> <span><roundcube:label name="sentdate" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="subject" /> <span><roundcube:label name="subject" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="from" /> <span><roundcube:label name="from" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="to" /> <span><roundcube:label name="to" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
+			<li><label><input type="radio" name="sort_col" value="size" /> <span><roundcube:label name="size" /></span></label></li>
+		</ul>
+	</fieldset>
+	<roundcube:endif />
+	<roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" />
+	<fieldset id="listoptions-sortord" class="floating">
+		<legend><roundcube:label name="listorder" /></legend>
+		<ul class="proplist">
+			<li><label><input type="radio" name="sort_ord" value="ASC" /> <span><roundcube:label name="asc" /></span></label></li>
+			<li><label><input type="radio" name="sort_ord" value="DESC" /> <span><roundcube:label name="desc" /></span></label></li>
+		</ul>
+	</fieldset>
+	<roundcube:endif />
+	<br style="clear:both" />
+	<div class="formbuttons">
+		<roundcube:button command="menu-save" id="listmenusave" type="input" class="button mainaction" label="save" />
+		<roundcube:button command="menu-close" prop="messagelistmenu" id="listmenucancel" type="input" class="button" label="cancel" />
+	</div>
+</div>
+
+<roundcube:object name="messageimportform" id="uploadform" mode="smart" />
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/message.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,112 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:object name="messageHeaders" valueOf="subject" /></h1>
+
+<!-- toolbar -->
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+<roundcube:if condition="!env:extwin" />
+	<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
+<roundcube:endif />
+	<roundcube:include file="/includes/mailtoolbar.html" />
+</div>
+
+<roundcube:if condition="!env:extwin" />
+
+<div id="mainscreencontent">
+
+<div id="mailview-left">
+
+<!-- folders list -->
+<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
+<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
+<div class="scroller">
+<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
+</div>
+</div>
+
+</div>
+
+<div id="mailview-right" class="uibox" role="main">
+<roundcube:else />
+<roundcube:object name="mailboxlist" folder_filter="mail" type="js" />
+
+<div id="mailview-right" class="offset fullwidth uibox" role="main">
+<roundcube:endif />
+
+<div id="messageheader">
+<span class="moreheaderstoggle"></span>
+
+<!-- record navigation -->
+<div id="countcontrols" class="pagenav" role="navigation" aria-labelledby="aria-label-countcontrols">
+	<h2 id="aria-label-countcontrols" class="voice"><roundcube:label name="arialabelmessagenav" /></h2>
+	<roundcube:object name="messageCountDisplay" class="countdisplay" />
+	<roundcube:button command="previousmessage" type="link" class="button prevpage disabled" classAct="button prevpage" classSel="button prevpage pressed" innerClass="inner" title="previousmessage" label="previous" />
+	<roundcube:button command="nextmessage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextmessage" label="next" />
+</div>
+
+<roundcube:if condition="env:optional_format=='text'" />
+<div id="formatcontrols">
+	<span class="buttongroup">
+		<roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="icon" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button last changeformat text pressed" innerClass="icon" title="changeformattext" />
+	</span>
+</div>
+<roundcube:elseif condition="env:optional_format=='html'" />
+<div id="formatcontrols">
+	<span class="buttongroup">
+		<roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button first changeformat html pressed" innerClass="icon" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="icon" title="changeformattext" />
+	</span>
+</div>
+<roundcube:endif />
+
+<h2 class="subject"><span onmouseover="rcube_webmail.long_subject_title(this)"><span class="voice"><roundcube:label name="subject" />: </span><roundcube:object name="messageHeaders" valueOf="subject" /></span></h2>
+<div class="message-headers">
+<roundcube:object name="messageHeaders" class="headers-table" addicon="/images/addcontact.png" exclude="subject" max="20" />
+</div>
+<roundcube:object name="messageFullHeaders" id="full-headers" />
+
+<div id="contactphoto"><roundcube:object name="contactphoto" /></div>
+</div>
+
+<div id="messagecontent">
+<div class="rightcol" role="region" aria-labelledby="aria-label-messageattachments">
+<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
+<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
+</div>
+<div class="leftcol" role="region" aria-labelledby="aria-label-messagebody">
+<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
+<roundcube:object name="messageObjects" id="message-objects" />
+<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
+</div>
+</div>
+
+</div><!-- end mailview-right -->
+
+<roundcube:if condition="!env:extwin" />
+</div><!-- end mainscreencontent -->
+<roundcube:endif />
+
+</div><!-- end mainscreen -->
+
+<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
+	<ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
+		<roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
+		<roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
+		<roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
+	</ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/messageerror.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:action != 'show'" />
+<body class="iframe fullheight">
+
+<div id="mainscreen" class="watermark" style="top:0"></div>
+
+<roundcube:else />
+<body class="<roundcube:exp expression="env:extwin ? 'extwin' : ''" />">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:label name="messageopenerror" /></h1>
+
+<!-- toolbar -->
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
+</div>
+
+<div id="mainscreencontent">
+
+<div id="mailview-left">
+
+<!-- folders list -->
+<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
+<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
+<div class="scroller">
+	<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" />
+</div>
+</div>
+
+</div>
+
+<div id="mailview-right" class="uibox">
+
+<div id="messagecontent" class="watermark" style="top:0"></div>
+
+</div><!-- end mailview-right -->
+
+</div><!-- end mainscreencontent -->
+
+</div><!-- end mainscreen -->
+
+<roundcube:include file="/includes/footer.html" />
+
+<roundcube:endif />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/messagepart.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,86 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="extwin noscroll">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen">
+
+<h1 class="voice"><roundcube:label name="attachment" />: <roundcube:var name="env:filename" /></h1>
+
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="download" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
+	<roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
+	<roundcube:container name="toolbar" id="messagetoolbar" />
+	<roundcube:if condition="env:is_message" />
+	<span class="spacer"></span>
+	<roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
+	<span class="dropbutton">
+		<roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" />
+		<a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="replyallmenu-menu" tabindex="0">Reply-all options</a>
+	</span>
+	<span class="dropbutton">
+		<roundcube:button command="forward" type="link" class="button forward disabled" classAct="button forward" classSel="button forward pressed" label="forward" title="forwardmessage" />
+		<a href="#forward" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="forwardmenu-menu" tabindex="0">Forwarding options</a>
+	</span>
+	<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="messagemenu-menu" />
+	<roundcube:endif />
+</div>
+
+<div id="mainscreencontent">
+
+<div id="messagepartheader" class="uibox listbox" role="contentinfo" aria-labelledby="aria-label-contentinfo">
+	<h2 class="boxtitle" id="aria-label-contentinfo"><roundcube:label name="properties" /></h2>
+	<div class="scroller">
+		<roundcube:object name="messagePartControls" class="listing" />
+	</div>
+</div>
+
+<div id="messagepartcontainer" class="uibox" role="main" aria-labelledby="aria-label-messagepart">
+	<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
+	<div class="iframebox">
+	<roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" title="arialabelattachmentpreview" />
+	</div>
+</div>
+
+</div>
+</div>
+
+<roundcube:if condition="env:is_message" />
+<div id="forwardmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
+	<ul id="forwardmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-forwardmenu">
+		<roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
+		<roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
+		<roundcube:container name="forwardmenu" id="forwardmenu-menu" />
+	</ul>
+</div>
+
+<div id="replyallmenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
+	<ul id="replyallmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-replyallmenu">
+		<roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="replyalllink" classAct="replyalllink active" />
+		<roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="replylistlink" classAct="replylistlink active" />
+		<roundcube:container name="replyallmenu" id="replyallmenu-menu" />
+	</ul>
+</div>
+
+<div id="messagemenu" class="popupmenu" aria-hidden="true">
+	<h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
+	<ul id="messagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-messagemenu">
+		<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="icon" classAct="icon active" innerclass="icon edit" />
+		<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="icon" classAct="icon active" innerclass="icon viewsource" />
+		<roundcube:container name="messagemenu" id="messagemenu-menu" />
+	</ul>
+</div>
+<roundcube:endif />
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/messagepreview.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,82 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe fullheight">
+
+<div id="messageheader" class="previewheader">
+
+<!-- record navigation -->
+<div id="countcontrols" role="toolbar" aria-labelledby="aria-label-messagetoolbar">
+<h2 id="aria-label-messagetoolbar" class="voice"><roundcube:label name="arialabelmessageactions" /></h2>
+<roundcube:if condition="env:optional_format=='text'" />
+	<span class="buttongroup">
+		<roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="icon" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button changeformat text pressed" innerClass="icon" title="changeformattext" content="Text" />
+	</span>
+<roundcube:elseif condition="env:optional_format=='html'" />
+	&nbsp;
+	<span class="buttongroup">
+		<roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button changeformat html pressed" innerClass="icon" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="icon" title="changeformattext" content="Text" />
+	</span>
+<roundcube:endif />
+<roundcube:if condition="env:mailbox != config:drafts_mbox || env:message_context">
+	&nbsp;
+	<roundcube:button command="reply" type="link" class="button reply" classSel="button reply pressed" innerClass="icon" title="replytomessage" label="replytomessage" />
+	<roundcube:button command="reply-all" type="link" class="button replyall" classSel="button replyall pressed" innerClass="icon" title="replytoallmessage" label="replytoallmessage" />
+	<roundcube:button command="forward" type="link" class="button forward" classSel="button forward pressed" innerClass="icon" title="forwardmessage" label="forwardmessage" />
+<roundcube:endif />
+<roundcube:if condition="!env:message_context">
+	&nbsp;
+	<roundcube:button command="extwin" type="link" class="button extwin" classSel="button extwin pressed" innerClass="icon" title="openinextwin" label="openinextwin" />
+<roundcube:endif />
+</div>
+
+<h3 class="subject"><span onmouseover="rcube_webmail.long_subject_title(this)"><span class="voice"><roundcube:label name="subject" />: </span><roundcube:object name="messageHeaders" valueOf="subject" /></span></h3>
+
+<a href="#details" id="previewheaderstoggle" class="moreheaderstoggle" aria-expanded="false"><span class="iconlink" title="<roundcube:label name='togglemoreheaders' />"></span></a>
+<div id="contactphoto"><roundcube:object name="contactphoto" /></div>
+
+<table class="headers-table" id="preview-shortheaders"><tbody><tr>
+<roundcube:if condition="env:mailbox == config:drafts_mbox || env:mailbox == config:sent_mbox">
+	<td class="header-title"><roundcube:label name="to" /></td>
+	<td class="header from"><roundcube:object name="messageHeaders" valueOf="to" max="3" addicon="/images/addcontact.png" /></td>
+<roundcube:else />
+	<td class="header-title"><roundcube:label name="from" /></td>
+	<td class="header from"><roundcube:object name="messageHeaders" valueOf="from" addicon="/images/addcontact.png" /></td>
+<roundcube:endif />
+	<td class="header-title"><roundcube:label name="date" /></td>
+	<td class="header date"><span><roundcube:object name="messageHeaders" valueOf="date" /></span></td>
+</tr></tbody></table>
+
+<roundcube:object name="messageHeaders" id="preview-allheaders" class="headers-table" addicon="/images/addcontact.png" max="10" exclude="subject,replyto" />
+
+<roundcube:object name="messageFullHeaders" id="full-headers" />
+
+</div>
+
+<div id="messagepreview" role="main">
+<div class="rightcol" role="region" aria-labelledby="aria-label-messageattachments">
+<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
+<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
+</div>
+<div class="leftcol" role="region" aria-labelledby="aria-label-messagebody">
+<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
+<roundcube:object name="messageObjects" id="message-objects" />
+<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
+</div>
+</div>
+
+<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
+	<ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
+		<roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
+		<roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
+		<roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
+	</ul>
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/messageprint.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<link rel="shortcut icon" href="/images/favicon.ico"/>
+<link rel="stylesheet" type="text/css" href="/print.css" />
+</head>
+<body>
+
+<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /></div>
+
+<div id="printmessageframe">
+<roundcube:object name="messageHeaders" class="headers-table" max="10" />
+<roundcube:object name="messageAttachments" id="attachment-list" />
+<roundcube:object name="messageBody" id="messagebody" showImages="false" />
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/plugin.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="noscroll">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<roundcube:if condition="env:task == 'settings'" />
+	<roundcube:include file="/includes/settingstabs.html" />
+<roundcube:endif />
+
+<div id="pluginbody" class="uibox contentbox">
+<roundcube:object name="plugin.body" />
+</div>
+
+</div>
+
+<roundcube:object name="plugin.footer" />
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/responseedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
+
+<div id="preferences-details" class="boxcontent">
+<roundcube:object name="responseform" class="propform" size="60" textareacols="60" textarearows="18" />
+</div>
+
+<div class="footerleft formbuttons">
+	<roundcube:button command="save" type="input" class="button mainaction" label="save" condition="!env:readonly" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/responses.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="identities" /></h1>
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="settings-right" role="main" aria-labelledby="aria-label-responseslist">
+
+<div id="identitieslist" class="uibox listbox">
+<h2 class="boxtitle" id="aria-label-responseslist"><roundcube:label name="responses" /></h2>
+<div class="scroller withfooter">
+<roundcube:object name="responsesList" id="identities-table" class="listing" cellspacing="0" noheader="true" role="listbox" />
+</div>
+<div class="boxfooter">
+<roundcube:button command="add" type="link" title="newresponse" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addresponse" /><roundcube:button command="delete" type="link" title="delete" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="delete" />
+</div>
+</div>
+
+<div id="identity-details" class="uibox contentbox">
+	<div class="iframebox">
+		<roundcube:object name="responseframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelresonseeditfrom" />
+	</div>
+</div>
+
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/settings.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="preferences" /></h1>
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="settings-right">
+
+<div id="sectionslist" class="uibox listbox" role="navigation" aria-labelledby="aria-label-pefsection">
+<h2 id="aria-label-pefsection" class="boxtitle"><roundcube:label name="section" /></h2>
+<div class="scroller">
+	<roundcube:object name="sectionslist" id="sections-table" class="listing iconized" noheader="true" />
+</div>
+</div>
+
+<div id="preferences-box" class="uibox contentbox" role="main">
+	<div class="iframebox">
+		<roundcube:object name="prefsframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelpreferencesform" />
+	</div>
+</div>
+
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/templates/settingsedit.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+
+<h1 class="boxtitle"><roundcube:object name="sectionname" /></h1>
+
+<div id="preferences-details" class="boxcontent">
+<roundcube:object name="userprefs" form="form" class="propform" />
+</div>
+
+<div class="footerleft formbuttons">
+	<roundcube:button command="save" type="input" class="button mainaction" label="save" />
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
Binary file skins/larry/thumbnail.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/ui.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1515 @@
+/**
+ * Roundcube functions for default skin interface
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ *
+ * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
+ */
+
+function rcube_mail_ui()
+{
+  var env = {};
+  var popups = {};
+  var popupconfig = {
+    forwardmenu:        { editable:1 },
+    searchmenu:         { editable:1, callback:searchmenu },
+    attachmentmenu:     { },
+    listoptions:        { editable:1 },
+    groupmenu:          { above:1 },
+    mailboxmenu:        { above:1 },
+    spellmenu:          { callback: spellmenu },
+    'folder-selector':  { iconized:1 }
+  };
+
+  var me = this;
+  var mailviewsplit;
+  var mailviewsplit2;
+  var compose_headers = {};
+  var prefs;
+
+  // export public methods
+  this.set = setenv;
+  this.init = init;
+  this.init_tabs = init_tabs;
+  this.show_about = show_about;
+  this.show_popup = show_popup;
+  this.toggle_popup = toggle_popup;
+  this.add_popup = add_popup;
+  this.set_searchmod = set_searchmod;
+  this.set_searchscope = set_searchscope;
+  this.show_uploadform = show_uploadform;
+  this.show_header_row = show_header_row;
+  this.hide_header_row = hide_header_row;
+  this.update_quota = update_quota;
+  this.get_pref = get_pref;
+  this.save_pref = save_pref;
+  this.folder_search_init = folder_search_init;
+
+
+  // set minimal mode on small screens (don't wait for document.ready)
+  if (window.$ && document.body) {
+    var minmode = get_pref('minimalmode');
+    if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) {
+      $(document.body).addClass('minimal');
+    }
+
+    if (bw.tablet) {
+      $('#viewport').attr('content', "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");
+    }
+
+    $(document).ready(function() { me.init(); });
+  }
+
+
+  /**
+   *
+   */
+  function setenv(key, val)
+  {
+    env[key] = val;
+  }
+
+  /**
+   * Get preference stored in browser
+   */
+  function get_pref(key)
+  {
+    if (!prefs) {
+      prefs = rcmail.local_storage_get_item('prefs.larry', {});
+    }
+
+    // fall-back to cookies
+    if (prefs[key] == null) {
+      var cookie = rcmail.get_cookie(key);
+      if (cookie != null) {
+        prefs[key] = cookie;
+
+        // copy value to local storage and remove cookie (if localStorage is supported)
+        if (rcmail.local_storage_set_item('prefs.larry', prefs)) {
+          rcmail.set_cookie(key, cookie, new Date());  // expire cookie
+        }
+      }
+    }
+
+    return prefs[key];
+  }
+
+  /**
+   * Saves preference value to browser storage
+   */
+  function save_pref(key, val)
+  {
+    prefs[key] = val;
+
+    // write prefs to local storage (if supported)
+    if (!rcmail.local_storage_set_item('prefs.larry', prefs)) {
+      // store value in cookie
+      var exp = new Date();
+      exp.setYear(exp.getFullYear() + 1);
+      rcmail.set_cookie(key, val, exp);
+    }
+  }
+
+  /**
+   * Initialize UI
+   * Called on document.ready
+   */
+  function init()
+  {
+    rcmail.addEventListener('message', message_displayed);
+
+    /*** prepare minmode functions ***/
+    $('#taskbar a').each(function(i,elem){
+      $(elem).append('<span class="tooltip">' + $('.button-inner', this).html() + '</span>')
+    });
+
+    $('#taskbar .minmodetoggle').click(function(e){
+      var ismin = $(document.body).toggleClass('minimal').hasClass('minimal');
+      save_pref('minimalmode', ismin?1:0);
+      $(window).resize();
+    });
+
+    /***  mail task  ***/
+    if (rcmail.env.task == 'mail') {
+      rcmail.addEventListener('menu-open', menu_toggle)
+        .addEventListener('menu-close', menu_toggle)
+        .addEventListener('menu-save', save_listoptions)
+        .addEventListener('enable-command', enable_command)
+        .addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) })
+        .addEventListener('responseaftersearch', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) });
+
+      var dragmenu = $('#dragmessagemenu');
+      if (dragmenu.length) {
+        rcmail.gui_object('dragmenu', 'dragmessagemenu');
+        popups.dragmenu = dragmenu;
+      }
+
+      if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') {
+        rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); })
+          .addEventListener('afterhide-headers', function() { layout_messageview(); });
+
+        $('#previewheaderstoggle').click(function(e) {
+            toggle_preview_headers();
+            if (this.blur && !rcube_event.is_keyboard(e))
+                this.blur();
+            return false;
+        });
+
+        // add menu link for each attachment
+        $('#attachment-list > li').each(function() {
+          attachmentmenu_append(this);
+        });
+
+        if (get_pref('previewheaders') == '1') {
+          toggle_preview_headers();
+        }
+
+        if (rcmail.env.action == 'show') {
+          $('#messagecontent').focus();
+        }
+      }
+      else if (rcmail.env.action == 'compose') {
+        rcmail.addEventListener('aftersend-attachment', show_uploadform)
+          .addEventListener('fileappended', function(e) { if (e.attachment.complete) attachmentmenu_append(e.item); })
+          .addEventListener('aftertoggle-editor', function(e) {
+            window.setTimeout(function() { layout_composeview() }, 200);
+            if (e && e.mode)
+              $("select[name='editorSelector']").val(e.mode);
+          })
+          .addEventListener('compose-encrypted', function(e) {
+            $("select[name='editorSelector']").prop('disabled', e.active);
+            $('a.button.attach, a.button.responses')[(e.active?'addClass':'removeClass')]('disabled');
+            $('#responseslist a.insertresponse')[(e.active?'removeClass':'addClass')]('active');
+          });
+
+        // Show input elements with non-empty value
+        var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto'];
+        for (f=0; f < fields.length; f++) {
+          v = fields[f]; field = $('#_'+v);
+          if (field.length) {
+            field.on('change', {v: v}, function(e) { if (this.value) show_header_row(e.data.v, true); });
+            if (field.val() != '')
+              show_header_row(v, true);
+          }
+        }
+
+        $('#composeoptionstoggle').click(function(e){
+          var expanded = $('#composeoptions').toggle().is(':visible');
+          $('#composeoptionstoggle').toggleClass('remove').attr('aria-expanded', expanded ? 'true' : 'false');
+          layout_composeview();
+          save_pref('composeoptions', expanded ? '1' : '0');
+          if (!rcube_event.is_keyboard(e))
+            this.blur();
+          return false;
+        }).css('cursor', 'pointer');
+
+        if (get_pref('composeoptions') !== '0') {
+          $('#composeoptionstoggle').click();
+        }
+
+        // adjust hight when textarea starts to scroll
+        $("textarea[name='_to'], textarea[name='_cc'], textarea[name='_bcc']").change(function(e){ adjust_compose_editfields(this); }).change();
+        rcmail.addEventListener('autocomplete_insert', function(p){ adjust_compose_editfields(p.field); });
+
+        // toggle compose options if opened in new window and they were visible before
+        var opener_rc = rcmail.opener();
+        if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove'))
+          $('#composeoptionstoggle').click();
+
+        new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right',
+          orientation:'v', relative:true, start:206, min:170, size:12, render:layout_composeview }).init();
+
+        // add menu link for each attachment
+        $('#attachment-list > li').each(function() {
+          attachmentmenu_append(this);
+        });
+      }
+      else if (rcmail.env.action == 'list' || !rcmail.env.action) {
+        mail_layout();
+
+        $('#maillistmode').addClass(rcmail.env.threading ? '' : 'selected').click(function(e) { switch_view_mode('list'); return false; });
+        $('#mailthreadmode').addClass(rcmail.env.threading ? 'selected' : '').click(function(e) { switch_view_mode('thread'); return false; });
+
+        rcmail.init_pagejumper('#pagejumper');
+
+        rcmail.addEventListener('setquota', update_quota)
+          .addEventListener('layout-change', mail_layout)
+          .addEventListener('afterimport-messages', show_uploadform);
+      }
+      else if (rcmail.env.action == 'get') {
+        new rcube_splitter({ id:'mailpartsplitterv', p1:'#messagepartheader', p2:'#messagepartcontainer',
+          orientation:'v', relative:true, start:226, min:150, size:12}).init();
+      }
+
+      if ($('#mailview-left').length) {
+        new rcube_splitter({ id:'mailviewsplitterv', p1:'#mailview-left', p2:'#mailview-right',
+          orientation:'v', relative:true, start:206, min:150, size:12, callback:render_mailboxlist, render:resize_leftcol }).init();
+      }
+    }
+    /***  settings task  ***/
+    else if (rcmail.env.task == 'settings') {
+      rcmail.addEventListener('init', function(){
+        var tab = '#settingstabpreferences';
+        if (rcmail.env.action)
+          tab = '#settingstab' + (rcmail.env.action.indexOf('identity')>0 ? 'identities' : rcmail.env.action.replace(/\./g, ''));
+
+        $(tab).addClass('selected')
+          .children().first().removeAttr('onclick').click(function() { return false; });
+      });
+
+      if (rcmail.env.action == 'folders') {
+        new rcube_splitter({ id:'folderviewsplitter', p1:'#folderslist', p2:'#folder-details',
+          orientation:'v', relative:true, start:266, min:180, size:12 }).init();
+
+        rcmail.addEventListener('setquota', update_quota);
+
+        folder_search_init($('#folderslist'));
+      }
+      else if (rcmail.env.action == 'identities') {
+        new rcube_splitter({ id:'identviewsplitter', p1:'#identitieslist', p2:'#identity-details',
+          orientation:'v', relative:true, start:266, min:180, size:12 }).init();
+      }
+      else if (rcmail.env.action == 'responses') {
+        new rcube_splitter({ id:'responseviewsplitter', p1:'#identitieslist', p2:'#identity-details',
+          orientation:'v', relative:true, start:266, min:180, size:12 }).init();
+      }
+      else if (rcmail.env.action == 'preferences' || !rcmail.env.action) {
+        new rcube_splitter({ id:'prefviewsplitter', p1:'#sectionslist', p2:'#preferences-box',
+          orientation:'v', relative:true, start:266, min:180, size:12 }).init();
+      }
+      else if (rcmail.env.action == 'edit-prefs') {
+        var legend = $('#preferences-details fieldset.advanced legend'),
+          toggle = $('<a href="#toggle"></a>')
+            .text(rcmail.gettext('toggleadvancedoptions'))
+            .attr('title', rcmail.gettext('toggleadvancedoptions'))
+            .addClass('advanced-toggle');
+
+        legend.click(function(e) {
+          toggle.html($(this).hasClass('collapsed') ? '&#9650;' : '&#9660;');
+
+          $(this).toggleClass('collapsed')
+            .closest('fieldset').children('.propform').toggle()
+        }).append(toggle).addClass('collapsed')
+
+        // this magically fixes incorrect position of toggle link created above in Firefox 3.6
+        if (bw.mz)
+          legend.parents('form').css('display', 'inline');
+      }
+    }
+    /***  addressbook task  ***/
+    else if (rcmail.env.task == 'addressbook') {
+      rcmail.addEventListener('afterupload-photo', show_uploadform)
+        .addEventListener('beforepushgroup', push_contactgroup)
+        .addEventListener('beforepopgroup', pop_contactgroup)
+        .addEventListener('menu-open', menu_toggle)
+        .addEventListener('menu-close', menu_toggle);
+
+      if (rcmail.env.action == '') {
+        new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right',
+          orientation:'v', relative:true, start:206, min:150, size:12, render:resize_leftcol }).init();
+        new rcube_splitter({ id:'addressviewsplitter', p1:'#addresslist', p2:'#contacts-box',
+          orientation:'v', relative:true, start:266, min:260, size:12 }).init();
+      }
+
+      var dragmenu = $('#dragcontactmenu');
+      if (dragmenu.length) {
+        rcmail.gui_object('dragmenu', 'dragcontactmenu');
+        popups.dragmenu = dragmenu;
+      }
+    }
+
+    // turn a group of fieldsets into tabs
+    $('.tabbed').each(function(idx, elem){ init_tabs(elem); })
+
+    // decorate select elements
+    $('select.decorated').each(function(){
+      if (bw.opera) {
+        $(this).removeClass('decorated');
+        return;
+      }
+
+      var select = $(this),
+        parent = select.parent(),
+        height = Math.max(select.height(), 26) - 2,
+        width = select.width() - 22,
+        title = $('option', this).first().text();
+
+      if ($('option:selected', this).val() != '')
+        title = $('option:selected', this).text();
+
+      var overlay = $('<a class="menuselector" tabindex="-1"><span class="handle">' + title + '</span></a>')
+        .css('position', 'absolute')
+        .offset(select.position())
+        .insertAfter(select);
+
+      overlay.children().width(width).height(height).css('line-height', (height - 1) + 'px');
+
+      if (parent.css('position') != 'absolute')
+        parent.css('position', 'relative');
+
+      // re-set original select width to fix click action and options width in some browsers
+      select.width(overlay.width())
+        .on(bw.mz ? 'change keyup' : 'change', function() {
+          var val = $('option:selected', this).text();
+          $(this).next().children().text(val);
+        });
+
+      select
+        .on('focus', function(e){ overlay.addClass('focus'); })
+        .on('blur', function(e){ overlay.removeClass('focus'); });
+    });
+
+    // set min-width to show all toolbar buttons
+    var screen = $('body.minwidth');
+    if (screen.length) {
+      screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').width() + $('#searchfilter').width() + 30);
+    }
+
+    // don't use $(window).resize() due to some unwanted side-effects
+    window.onresize = resize;
+    resize();
+  }
+
+  /**
+   * Update UI on window resize
+   */
+  function resize(e)
+  {
+    // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005)
+    var interval = e ? 10 : 0;
+
+    if (rcmail.resize_timeout)
+      window.clearTimeout(rcmail.resize_timeout);
+
+    rcmail.resize_timeout = window.setTimeout(function() {
+      if (rcmail.env.task == 'mail') {
+        if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
+          layout_messageview();
+        else if (rcmail.env.action == 'compose')
+          layout_composeview();
+      }
+
+      // make iframe footer buttons float if scrolling is active
+      $('body.iframe .footerleft').each(function(){
+        var footer = $(this),
+          body = $(document.body),
+          floating = footer.hasClass('floating'),
+          overflow = body.outerHeight(true) > $(window).height();
+
+        if (overflow != floating) {
+          var action = overflow ? 'addClass' : 'removeClass';
+          footer[action]('floating');
+          body[action]('floatingbuttons');
+        }
+      });
+    }, interval);
+  }
+
+  /**
+   * Triggered when a new user message is displayed
+   */
+  function message_displayed(p)
+  {
+    var siblings = $(p.object).siblings('div');
+    if (siblings.length)
+      $(p.object).insertBefore(siblings.first());
+
+    // show a popup dialog on errors
+    if (p.type == 'error' && rcmail.env.task != 'login') {
+      // hide original message object, we don't want both
+      rcmail.hide_message(p.object);
+
+      if (me.message_timer) {
+        window.clearTimeout(me.message_timer);
+      }
+
+      if (!me.messagedialog) {
+        me.messagedialog = $('<div>').addClass('popupdialog').hide();
+      }
+
+      var msg = p.message,
+        dialog_close = function() {
+          // check if dialog is still displayed, to prevent from js error
+          me.messagedialog.is(':visible') && me.messagedialog.dialog('destroy').hide();
+        };
+
+      if (me.messagedialog.is(':visible') && me.messagedialog.text() != msg)
+        msg = me.messagedialog.html() + '<p>' + p.message + '</p>';
+
+      me.messagedialog.html(msg)
+        .dialog({
+          resizable: false,
+          closeOnEscape: true,
+          dialogClass: p.type,
+          title: rcmail.gettext('errortitle'),
+          close: dialog_close,
+          hide: {effect: 'fadeOut'},
+          width: 420,
+          minHeight: 90
+        }).show();
+
+      me.messagedialog.closest('div[role=dialog]').attr('role', 'alertdialog');
+
+      if (p.timeout > 0)
+        me.message_timer = window.setTimeout(dialog_close, p.timeout);
+    }
+  }
+
+  // Mail view layout initialization and change handler
+  function mail_layout(p)
+  {
+    var layout = p ? p.new_layout : rcmail.env.layout,
+      top = $('#mailview-top'),
+      bottom = $('#mailview-bottom');
+
+    if (p)
+      $('#mainscreencontent').removeClass().addClass(layout);
+
+    $('#mailviewsplitter')[layout == 'desktop' ? 'show' : 'hide']();
+    $('#mailviewsplitter2')[layout == 'widescreen' ? 'show' : 'hide']();
+    $('#mailpreviewframe')[layout != 'list' ? 'show' : 'hide']();
+    rcmail.env.contentframe = layout == 'list' ? null : 'messagecontframe';
+
+    if (layout == 'widescreen') {
+      $('#countcontrols').detach().appendTo($('#messagelistheader'));
+      top.css({height: 'auto', width: 394});
+      bottom.css({top: 0, left: 406, height: 'auto'}).show();
+      if (!mailviewsplit2) {
+        mailviewsplit2 = new rcube_splitter({ id:'mailviewsplitter2', p1:'#mailview-top', p2:'#mailview-bottom',
+          orientation:'v', relative:true, start:416, min:400, size:12});
+        mailviewsplit2.init();
+      }
+      else
+        mailviewsplit2.resize();
+    }
+    else if (layout == 'desktop') {
+      top.css({height: 270, width: 'auto'});
+      bottom.css({left: 0, top: 284, height: 'auto'}).show();
+      if (!mailviewsplit) {
+        mailviewsplit = new rcube_splitter({ id:'mailviewsplitter', p1:'#mailview-top', p2:'#mailview-bottom',
+          orientation:'h', relative:true, start:276, min:150, size:12, offset:4 });
+        mailviewsplit.init();
+      }
+      else
+        mailviewsplit.resize();
+    }
+    else { // layout == 'list'
+      top.css({height: 'auto', width: 'auto'});
+      bottom.hide();
+    }
+
+    if (p && p.old_layout == 'widescreen') {
+      $('#countcontrols').detach().appendTo($('#messagelistfooter'));
+    }
+  }
+
+  /**
+   * Adjust UI objects of the mail view screen
+   */
+  function layout_messageview()
+  {
+    $('#messagecontent').css('top', ($('#messageheader').outerHeight() + 1) + 'px');
+    $('#message-objects div a').addClass('button');
+
+    if (!$('#attachment-list li').length) {
+      $('div.rightcol').hide().attr('aria-hidden', 'true');
+      $('div.leftcol').css('margin-right', '0');
+    }
+
+    var mvlpe = $('#messagebody.mailvelope, #messagebody > .mailvelope');
+    if (mvlpe.length) {
+      var h = $('#messagecontent').length ?
+        $('#messagecontent').height() - 16 :
+        $(window).height() - mvlpe.offset().top - 2;
+      mvlpe.height(h);
+    }
+  }
+
+
+  function render_mailboxlist(splitter)
+  {
+    // TODO: implement smart shortening of long folder names
+  }
+
+
+  function resize_leftcol(splitter)
+  {
+    // STUB
+  }
+
+  function adjust_compose_editfields(elem)
+  {
+    if (elem.nodeName == 'TEXTAREA') {
+      var $elem = $(elem), line_height = 14,  // hard-coded because some browsers only provide the outer height in elem.clientHeight
+        content_height = elem.scrollHeight,
+        rows = elem.value.length > 80 && content_height > line_height*1.5 ? 2 : 1;
+      $elem.css('height', (line_height*rows) + 'px');
+      layout_composeview();
+    }
+  }
+
+  function layout_composeview()
+  {
+    var body = $('#composebody'),
+      form = $('#compose-content'),
+      bottom = $('#composeview-bottom'),
+      w, h, bh, ovflw, btns = 0,
+      minheight = 300,
+
+    bh = form.height() - bottom.position().top;
+    ovflw = minheight - bh;
+    btns = ovflw > -100 ? 0 : 40;
+    bottom.height(Math.max(minheight, bh));
+    form.css('overflow', ovflw > 0 ? 'auto' : 'hidden');
+
+    w = body.parent().width() - 5;
+    h = body.parent().height() - 8;
+    body.width(w).height(h);
+
+    $('#composebodycontainer > div').width(w+8);
+    $('#composebody_ifr').height(h + 4 - $('div.mce-toolbar').height());
+    $('#googie_edit_layer').width(w).height(h);
+//    $('#composebodycontainer')[(btns ? 'addClass' : 'removeClass')]('buttons');
+//    $('#composeformbuttons')[(btns ? 'show' : 'hide')]();
+
+    var abooks = $('#directorylist');
+    if (abooks.length)
+      $('#compose-contacts .scroller').css('top', abooks.position().top + abooks.outerHeight());
+  }
+
+
+  function update_quota(p)
+  {
+    var element = $('#quotadisplay'), menu = $('#quotamenu'),
+      step = 24, step_count = 20,
+      y = p.total ? Math.ceil(p.percent / 100 * step_count) * step : 0;
+
+    // never show full-circle if quota is close to 100% but below.
+    if (p.total && y == step * step_count && p.percent < 100)
+      y -= step;
+
+    element.css('background-position', '0 -' + y + 'px');
+    element.attr('class', 'countdisplay p' + (Math.round(p.percent / 10) * 10));
+
+    if (p.table) {
+      if (!menu.length)
+        menu = $('<div id="quotamenu" class="popupmenu">').appendTo($('body'));
+
+      menu.html(p.table);
+      element.css('cursor', 'pointer').off('click').on('click', function(e) {
+        return rcmail.command('menu-open', 'quotamenu', e.target, e);
+      });
+    }
+  }
+
+  function folder_search_init(container)
+  {
+    // animation to unfold list search box
+    $('.boxtitle a.search', container).click(function(e) {
+      var title = $('.boxtitle', container),
+        box = $('.listsearchbox', container),
+        dir = box.is(':visible') ? -1 : 1,
+        height = 34 + ($('select', box).length ? 22 : 0);
+
+      box.slideToggle({
+        duration: 160,
+        progress: function(animation, progress) {
+          if (dir < 0) progress = 1 - progress;
+            $('.scroller', container).css('top', (title.outerHeight() + height * progress) + 'px');
+        },
+        complete: function() {
+          box.toggleClass('expanded');
+          if (box.is(':visible')) {
+            box.find('input[type=text]').focus();
+            height = 34 + ($('select', box).length ? $('select', box).outerHeight() + 4 : 0);
+            $('.scroller', container).css('top', (title.outerHeight() + height) + 'px');
+          }
+          else {
+            $('a.reset', box).click();
+          }
+          // TODO: save state in localStorage
+        }
+      });
+
+      return false;
+    });
+  }
+
+  function enable_command(p)
+  {
+    if (p.command == 'reply-list' && rcmail.env.reply_all_mode == 1) {
+      var label = rcmail.gettext(p.status ? 'replylist' : 'replyall');
+      if (rcmail.env.action == 'preview')
+        $('a.button.replyall').attr('title', label);
+      else
+        $('a.button.reply-all').text(label).attr('title', label);
+    }
+    else if (p.command == 'compose-encrypted') {
+      // show the toolbar button for Mailvelope
+      $('a.button.encrypt').show();
+    }
+  }
+
+
+  /**
+   * Register a popup menu
+   */
+  function add_popup(popup, config)
+  {
+    var obj = popups[popup] = $('#'+popup);
+    obj.appendTo(document.body);  // move it to top for proper absolute positioning
+
+    if (obj.length)
+      popupconfig[popup] = $.extend(popupconfig[popup] || {}, config || {});
+  }
+
+  /**
+   * Trigger for popup menus
+   */
+  function toggle_popup(popup, e, config)
+  {
+    // auto-register menu object
+    if (config || !popupconfig[popup])
+      add_popup(popup, config);
+
+    return rcmail.command('menu-open', popup, e.target, e);
+  }
+
+  /**
+   * (Deprecated) trigger for popup menus
+   */
+  function show_popup(popup, show, config)
+  {
+    // auto-register menu object
+    if (config || !popupconfig[popup])
+      add_popup(popup, config);
+
+    config = popupconfig[popup] || {};
+    var ref = $(config.link ? config.link : '#'+popup+'link'),
+      pos = ref.offset();
+    if (ref.has('.inner'))
+      ref = ref.children('.inner');
+
+    // fire command with simulated mouse click event
+    return rcmail.command('menu-open',
+      { menu:popup, show:show },
+      ref.get(0),
+      $.Event('click', { target:ref.get(0), pageX:pos.left, pageY:pos.top, clientX:pos.left, clientY:pos.top }));
+  }
+
+  /**
+   * Switch between short and full headers display in message preview
+   */
+  function toggle_preview_headers()
+  {
+    $('#preview-shortheaders').toggle();
+    var full = $('#preview-allheaders').toggle(),
+      button = $('a#previewheaderstoggle');
+
+    // add toggle button to full headers table
+    if (full.is(':visible'))
+      button.attr('href', '#hide').removeClass('add').addClass('remove').attr('aria-expanded', 'true');
+    else
+      button.attr('href', '#details').removeClass('remove').addClass('add').attr('aria-expanded', 'false');
+
+    save_pref('previewheaders', full.is(':visible') ? '1' : '0');
+  }
+
+
+  /**
+   *
+   */
+  function switch_view_mode(mode, force)
+  {
+    if (force || !$('#mail'+mode+'mode').hasClass('disabled')) {
+      $('#maillistmode, #mailthreadmode').removeClass('selected').attr('tabindex', '0').attr('aria-disabled', 'false');
+      $('#mail'+mode+'mode').addClass('selected').attr('tabindex', '-1').attr('aria-disabled', 'true');
+    }
+  }
+
+
+  /**** popup menu callbacks ****/
+
+  /**
+   * Handler for menu-open and menu-close events
+   */
+  function menu_toggle(p)
+  {
+    if (p && p.name == 'messagelistmenu') {
+      show_listoptions(p);
+    }
+    else if (p) {
+      // adjust menu position according to config
+      var config = popupconfig[p.name] || {},
+        ref = $(config.link || '#'+p.name+'link'),
+        visible = p.obj && p.obj.is(':visible'),
+        above = config.above;
+
+      // fix position according to config
+      if (p.obj && visible && ref.length) {
+        var parent = ref.parent(),
+          win = $(window), pos;
+
+        if (parent.hasClass('dropbutton'))
+          ref = parent;
+
+        if (config.above || ref.hasClass('dropbutton')) {
+          pos = ref.offset();
+          p.obj.css({ left:pos.left+'px', top:(pos.top + (config.above ? -p.obj.height() : ref.outerHeight()))+'px' });
+        }
+      }
+
+      // add the right classes
+      if (p.obj && config.iconized) {
+        p.obj.children('ul').addClass('iconized');
+      }
+
+      // apply some data-attributes from menu config
+      if (p.obj && config.editable)
+        p.obj.attr('data-editable', 'true');
+
+      // trigger callback function
+      if (typeof config.callback == 'function') {
+        config.callback(visible, p);
+      }
+    }
+  }
+
+  function searchmenu(show)
+  {
+    if (show && rcmail.env.search_mods) {
+      var n, all,
+        obj = popups['searchmenu'],
+        list = $('input:checkbox[name="s_mods[]"]', obj),
+        mbox = rcmail.env.mailbox,
+        mods = rcmail.env.search_mods,
+        scope = rcmail.env.search_scope || 'base';
+
+      if (rcmail.env.task == 'mail') {
+        if (scope == 'all')
+          mbox = '*';
+        mods = mods[mbox] ? mods[mbox] : mods['*'];
+        all = 'text';
+        $('input:radio[name="s_scope"]').prop('checked', false).filter('#s_scope_'+scope).prop('checked', true);
+      }
+      else {
+        all = '*';
+      }
+
+      if (mods[all])
+        list.map(function() {
+          this.checked = true;
+          this.disabled = this.value != all;
+        });
+      else {
+        list.prop('disabled', false).prop('checked', false);
+        for (n in mods)
+          $('#s_mod_' + n).prop('checked', true);
+      }
+    }
+  }
+
+  function attachmentmenu(elem, event)
+  {
+    var id = elem.parentNode.id.replace(/^attach/, '');
+
+    $.each(['open', 'download', 'rename'], function() {
+      var action = this;
+      $('#attachmenu' + action).off('click').attr('onclick', '').click(function(e) {
+        return rcmail.command(action + '-attachment', id, this);
+      });
+    });
+
+    popupconfig.attachmentmenu.link = elem;
+    rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}, elem, event);
+  }
+
+  function spellmenu(show, p)
+  {
+    var k, link, li,
+      lang = rcmail.spellcheck_lang(),
+      ul = $('ul', p.obj);
+
+    if (!ul.length) {
+      ul = $('<ul class="toolbarmenu selectable" role="menu">');
+
+      for (k in rcmail.env.spell_langs) {
+        li = $('<li role="menuitem">');
+        link = $('<a href="#'+k+'" tabindex="0"></a>').text(rcmail.env.spell_langs[k])
+          .addClass('active').data('lang', k)
+          .on('click keypress', function(e) {
+              if (e.type != 'keypress' || rcube_event.get_keycode(e) == 13) {
+                  rcmail.spellcheck_lang_set($(this).data('lang'));
+                  rcmail.hide_menu('spellmenu', e);
+                  return false;
+              }
+          });
+
+        link.appendTo(li);
+        li.appendTo(ul);
+      }
+
+      ul.appendTo(p.obj);
+    }
+
+    // select current language
+    $('li', ul).each(function() {
+      var el = $('a', this);
+      if (el.data('lang') == lang)
+        el.addClass('selected').attr('aria-selected', 'true');
+      else if (el.hasClass('selected'))
+        el.removeClass('selected').removeAttr('aria-selected');
+    });
+  }
+
+  // append drop-icon to attachments list item (to invoke attachment menu)
+  function attachmentmenu_append(item)
+  {
+    item = $(item);
+
+    if (!item.children('.drop').length)
+      item.append($('<a class="drop skip-content" tabindex="0" aria-haspopup="true">Show options</a>')
+          .on('click keypress', function(e) {
+            if (e.type != 'keypress' || rcube_event.get_keycode(e) == 13) {
+              attachmentmenu(this, e);
+              return false;
+            }
+          }));
+  }
+
+  /**
+   *
+   */
+  function show_listoptions(p)
+  {
+    var $dialog = $('#listoptions');
+
+    // close the dialog
+    if ($dialog.is(':visible')) {
+      $dialog.dialog('close', p.originalEvent);
+      return;
+    }
+
+    // set form values
+    $('input[name="sort_col"][value="'+rcmail.env.sort_col+'"]').prop('checked', true);
+    $('input[name="sort_ord"][value="DESC"]').prop('checked', rcmail.env.sort_order == 'DESC');
+    $('input[name="sort_ord"][value="ASC"]').prop('checked', rcmail.env.sort_order != 'DESC');
+
+    $.each(['widescreen', 'desktop', 'list'], function() {
+      $('input[name="layout"][value="' + this + '"]').prop('checked', rcmail.env.layout == this);
+    });
+    $('#listoptions-columns', $dialog)[rcmail.env.layout == 'widescreen' ? 'hide' : 'show']();
+
+    // set checkboxes
+    $('input[name="list_col[]"]').each(function() {
+      $(this).prop('checked', $.inArray(this.value, rcmail.env.listcols) != -1);
+    });
+
+    $dialog.dialog({
+      modal: true,
+      resizable: false,
+      closeOnEscape: true,
+      title: null,
+      open: function(e) {
+        setTimeout(function(){ $dialog.find('a, input:not(:disabled)').not('[aria-disabled=true]').first().focus(); }, 100);
+      },
+      close: function(e) {
+        $dialog.dialog('destroy').hide();
+        if (e.originalEvent && rcube_event.is_keyboard(e.originalEvent))
+          $('#listmenulink').focus();
+      },
+      minWidth: 500,
+      width: $dialog.width()+25
+    }).show();
+  }
+
+
+  /**
+   *
+   */
+  function save_listoptions(p)
+  {
+    $('#listoptions').dialog('close');
+
+    if (rcube_event.is_keyboard(p.originalEvent))
+      $('#listmenulink').focus();
+
+    var sort = $('input[name="sort_col"]:checked').val(),
+      ord = $('input[name="sort_ord"]:checked').val(),
+      layout = $('input[name="layout"]:checked').val(),
+      cols = $('input[name="list_col[]"]:checked')
+        .map(function(){ return this.value; }).get();
+
+    rcmail.set_list_options(cols, sort, ord, rcmail.env.threading, layout);
+  }
+
+
+  /**
+   *
+   */
+  function set_searchmod(elem)
+  {
+    var all, m, task = rcmail.env.task,
+      mods = rcmail.env.search_mods,
+      mbox = rcmail.env.mailbox,
+      scope = $('input[name="s_scope"]:checked').val();
+
+    if (scope == 'all')
+      mbox = '*';
+
+    if (!mods)
+      mods = {};
+
+    if (task == 'mail') {
+      if (!mods[mbox])
+        mods[mbox] = rcube_clone_object(mods['*']);
+      m = mods[mbox];
+      all = 'text';
+    }
+    else { //addressbook
+      m = mods;
+      all = '*';
+    }
+
+    if (!elem.checked)
+      delete(m[elem.value]);
+    else
+      m[elem.value] = 1;
+
+    // mark all fields
+    if (elem.value == all) {
+      $('input:checkbox[name="s_mods[]"]').map(function() {
+        if (this == elem)
+          return;
+
+        this.checked = true;
+        if (elem.checked) {
+          this.disabled = true;
+          delete m[this.value];
+        }
+        else {
+          this.disabled = false;
+          m[this.value] = 1;
+        }
+      });
+    }
+
+    rcmail.set_searchmods(m);
+  }
+
+  function set_searchscope(elem)
+  {
+    rcmail.set_searchscope(elem.value);
+  }
+
+  function push_contactgroup(p)
+  {
+    // lets the contacts list swipe to the left, nice!
+    var table = $('#contacts-table'),
+      scroller = table.parent().css('overflow', 'hidden');
+
+    table.clone()
+      .css({ position:'absolute', top:'0', left:'0', width:table.width()+'px', 'z-index':10 })
+      .appendTo(scroller)
+      .animate({ left: -(table.width()+5) + 'px' }, 300, 'swing', function(){
+        $(this).remove();
+        scroller.css('overflow', 'auto')
+      });
+  }
+
+  function pop_contactgroup(p)
+  {
+    // lets the contacts list swipe to the left, nice!
+    var table = $('#contacts-table'),
+      scroller = table.parent().css('overflow', 'hidden'),
+      clone = table.clone().appendTo(scroller);
+
+      table.css({ position:'absolute', top:'0', left:-(table.width()+5) + 'px', width:table.width()+'px', height:table.height()+'px', 'z-index':10 })
+        .animate({ left:'0' }, 300, 'linear', function(){
+        clone.remove();
+        $(this).css({ position:'relative', left:'0', width:'100%', height:'auto', 'z-index':1 });
+        scroller.css('overflow', 'auto')
+      });
+  }
+
+  function show_uploadform(e)
+  {
+    var $dialog = $('#upload-dialog');
+
+    // close the dialog
+    if ($dialog.is(':visible')) {
+      $dialog.dialog('close');
+      return;
+    }
+
+    // do nothing if mailvelope editor is active
+    if (rcmail.mailvelope_editor)
+      return;
+
+    // add icons to clone file input field
+    if (rcmail.env.action == 'compose' && !$dialog.data('extended')) {
+      $('<a>')
+        .addClass('iconlink add')
+        .attr('href', '#add')
+        .html('Add')
+        .appendTo($('input[type="file"]', $dialog).parent())
+        .click(add_uploadfile);
+      $dialog.data('extended', true);
+    }
+
+    $dialog.dialog({
+      modal: true,
+      resizable: false,
+      closeOnEscape: true,
+      title: $dialog.attr('title'),
+      open: function(e) {
+        if (!document.all)
+          $('input[type=file]', $dialog).first().click();
+      },
+      close: function() {
+        try { $('#upload-dialog form').get(0).reset(); }
+        catch(e){ }  // ignore errors
+
+        $dialog.dialog('destroy').hide();
+        $('div.addline', $dialog).remove();
+      },
+      width: 480
+    }).show();
+  }
+
+  function add_uploadfile(e)
+  {
+    var div = $(this).parent();
+    var clone = div.clone().addClass('addline').insertAfter(div);
+    clone.children('.iconlink').click(add_uploadfile);
+    clone.children('input').val('');
+
+    if (!document.all)
+      $('input[type=file]', clone).click();
+  }
+
+
+  /**
+   *
+   */
+  function show_header_row(which, updated)
+  {
+    var row = $('#compose-' + which);
+    if (row.is(':visible'))
+      return;  // nothing to be done here
+
+    if (compose_headers[which] && !updated)
+      $('#_' + which).val(compose_headers[which]);
+
+    row.show();
+    $('#' + which + '-link').hide();
+
+    layout_composeview();
+    $('input,textarea', row).focus();
+
+    return false;
+  }
+
+  /**
+   *
+   */
+  function hide_header_row(which)
+  {
+    // copy and clear field value
+    var field = $('#_' + which);
+    compose_headers[which] = field.val();
+    field.val('');
+
+    $('#compose-' + which).hide();
+    $('#' + which + '-link').show();
+    layout_composeview();
+    return false;
+  }
+
+
+  /**
+   * Fieldsets-to-tabs converter
+   */
+  function init_tabs(elem, current)
+  {
+    var content = $(elem),
+      id = content.get(0).id,
+      fs = content.children('fieldset');
+
+    if (!fs.length)
+      return;
+
+    if (!id) {
+      id = 'rcmtabcontainer';
+      content.attr('id', id);
+    }
+
+    // create tabs container
+    var tabs = $('<ul>').addClass('tabsbar').prependTo(content);
+
+    // convert fildsets into tabs
+    fs.each(function(idx) {
+      var tab, a, elm = $(this),
+        legend = elm.children('legend'),
+        tid = id + '-t' + idx;
+
+      // create a tab
+      a   = $('<a>').text(legend.text()).attr('href', '#' + tid);
+      tab = $('<li>').addClass('tablink');
+
+      // remove legend
+      legend.remove();
+
+      // link fieldset with tab item
+      elm.attr('id', tid);
+
+      // add the tab to container
+      tab.append(a).appendTo(tabs);
+    });
+
+    // use jquery UI tabs widget to do the interaction and styling
+    content.tabs({
+      active: current || 0,
+      heightStyle: 'content',
+      activate: function(e, ui) {resize(); }
+    });
+  }
+
+  /**
+   * Show about page as jquery UI dialog
+   */
+  function show_about(elem)
+  {
+    var frame = $('<iframe>').attr({id: 'aboutframe', src: rcmail.url('settings/about'), frameborder: '0'});
+      h = Math.floor($(window).height() * 0.75),
+      buttons = {},
+      supportln = $('#supportlink');
+
+    if (supportln.length && (env.supporturl = supportln.attr('href')))
+      buttons[supportln.html()] = function(e){ env.supporturl.indexOf('mailto:') < 0 ? window.open(env.supporturl) : location.href = env.supporturl };
+
+    frame.dialog({
+      modal: true,
+      resizable: false,
+      closeOnEscape: true,
+      title: elem ? elem.title || elem.innerHTML : null,
+      close: function() {
+        frame.dialog('destroy').remove();
+      },
+      buttons: buttons,
+      width: 640,
+      height: h
+    }).width(640);
+  }
+}
+
+
+/**
+ * Roundcube Scroller class
+ *
+ * @deprecated Use treelist widget
+ */
+function rcube_scroller(list, top, bottom)
+{
+  var ref = this;
+
+  this.list = $(list);
+  this.top = $(top);
+  this.bottom = $(bottom);
+  this.step_size = 6;
+  this.step_time = 20;
+  this.delay = 500;
+
+  this.top
+    .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); })
+    .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
+
+  this.bottom
+    .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); })
+    .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
+
+  this.scroll = function(dir)
+  {
+    var ref = this, size = this.step_size;
+
+    if (!rcmail.drag_active)
+      return;
+
+    if (dir == 'down')
+      size *= -1;
+
+    this.list.get(0).scrollTop += size;
+    this.ts = window.setTimeout(function() { ref.scroll(dir); }, this.step_time);
+  };
+};
+
+
+/**
+ * Roundcube UI splitter class
+ *
+ * @constructor
+ */
+function rcube_splitter(p)
+{
+  this.p = p;
+  this.id = p.id;
+  this.horizontal = (p.orientation == 'horizontal' || p.orientation == 'h');
+  this.halfsize = (p.size !== undefined ? p.size : 10) / 2;
+  this.pos = p.start || 0;
+  this.min = p.min || 20;
+  this.offset = p.offset || 0;
+  this.relative = p.relative ? true : false;
+  this.drag_active = false;
+  this.render = p.render;
+  this.callback = p.callback;
+
+  var me = this;
+  rcube_splitter._instances[this.id] = me;
+
+  this.init = function()
+  {
+    this.p1 = $(this.p.p1);
+    this.p2 = $(this.p.p2);
+    this.parent = this.p1.parent();
+
+    // check if referenced elements exist, otherwise abort
+    if (!this.p1.length || !this.p2.length)
+      return;
+
+    // create and position the handle for this splitter
+    this.p1pos = this.relative ? this.p1.position() : this.p1.offset();
+    this.p2pos = this.relative ? this.p2.position() : this.p2.offset();
+    this.handle = $('<div>')
+      .attr('id', this.id)
+      .attr('unselectable', 'on')
+      .attr('role', 'presentation')
+      .addClass('splitter ' + (this.horizontal ? 'splitter-h' : 'splitter-v'))
+      .appendTo(this.parent)
+      .mousedown(onDragStart);
+
+    if (this.horizontal) {
+      var top = this.p1pos.top + this.p1.outerHeight();
+      this.handle.css({ left:'0px', top:top+'px' });
+    }
+    else {
+      var left = this.p1pos.left + this.p1.outerWidth();
+      this.handle.css({ left:left+'px', top:'0px' });
+    }
+
+    // listen to window resize on IE
+    if (bw.ie)
+      $(window).resize(onResize);
+
+    // read saved position from cookie
+    var cookie = this.get_cookie();
+    if (cookie && !isNaN(cookie)) {
+      this.pos = parseFloat(cookie);
+      this.resize();
+    }
+    else if (this.pos) {
+      this.resize();
+      this.set_cookie();
+    }
+  };
+
+  /**
+   * Set size and position of all DOM objects
+   * according to the saved splitter position
+   */
+  this.resize = function()
+  {
+    if (this.horizontal) {
+      this.p1.css('height', Math.floor(this.pos - this.p1pos.top - Math.floor(this.halfsize)) + 'px');
+      this.p2.css('top', Math.ceil(this.pos + Math.ceil(this.halfsize) + 2) + 'px');
+      this.handle.css('top', Math.round(this.pos - this.halfsize + this.offset)+'px');
+      if (bw.ie) {
+        var new_height = parseInt(this.parent.outerHeight(), 10) - parseInt(this.p2.css('top'), 10);
+        this.p2.css('height', (new_height > 0 ? new_height : 0) + 'px');
+      }
+    }
+    else {
+      this.p1.css('width', Math.floor(this.pos - this.p1pos.left - Math.floor(this.halfsize)) + 'px');
+      this.p2.css('left', Math.ceil(this.pos + Math.ceil(this.halfsize)) + 'px');
+      this.handle.css('left', Math.round(this.pos - this.halfsize + this.offset + 3)+'px');
+      if (bw.ie) {
+        var new_width = parseInt(this.parent.outerWidth(), 10) - parseInt(this.p2.css('left'), 10) ;
+        this.p2.css('width', (new_width > 0 ? new_width : 0) + 'px');
+      }
+    }
+
+    this.p2.resize();
+    this.p1.resize();
+
+    // also resize iframe covers
+    if (this.drag_active) {
+      $('iframe').each(function(i, elem) {
+        var pos = $(this).offset();
+        $('#iframe-splitter-fix-'+i).css({ top: pos.top+'px', left: pos.left+'px', width:elem.offsetWidth+'px', height: elem.offsetHeight+'px' });
+      });
+    }
+
+    if (typeof this.render == 'function')
+      this.render(this);
+  };
+
+  /**
+   * Handler for mousedown events
+   */
+  function onDragStart(e)
+  {
+    // disable text selection while dragging the splitter
+    if (bw.konq || bw.chrome || bw.safari)
+      document.body.style.webkitUserSelect = 'none';
+
+    me.p1pos = me.relative ? me.p1.position() : me.p1.offset();
+    me.p2pos = me.relative ? me.p2.position() : me.p2.offset();
+    me.drag_active = true;
+
+    // start listening to mousemove events
+    $(document).on('mousemove.' + this.id, onDrag).on('mouseup.' + this.id, onDragStop);
+
+    // hack messages list so it will propagate the mouseup event over the list
+    if (rcmail.message_list)
+      rcmail.message_list.drag_active = true;
+
+    // enable dragging above iframes
+    $('iframe').each(function(i, elem) {
+      $('<div>')
+        .attr('id', 'iframe-splitter-fix-'+i)
+        .addClass('iframe-splitter-fix')
+        .css({ background: '#fff',
+          width: elem.offsetWidth+'px', height: elem.offsetHeight+'px',
+          position: 'absolute', opacity: '0.001', zIndex: 1000
+        })
+        .css($(this).offset())
+        .appendTo('body');
+      });
+  };
+
+  /**
+   * Handler for mousemove events
+   */
+  function onDrag(e)
+  {
+    if (!me.drag_active)
+      return false;
+
+    // with timing events dragging action is more responsive
+    window.clearTimeout(me.ts);
+    me.ts = window.setTimeout(function() { onDragAction(e); }, 1);
+
+    return false;
+  };
+
+  /**
+   * Dragging action (see onDrag())
+   */
+  function onDragAction(e)
+  {
+    var pos = rcube_event.get_mouse_pos(e);
+
+    if (me.relative) {
+      var parent = me.parent.offset();
+      pos.x -= parent.left;
+      pos.y -= parent.top;
+    }
+
+    if (me.horizontal) {
+      if (((pos.y - me.halfsize) > me.p1pos.top) && ((pos.y + me.halfsize) < (me.p2pos.top + me.p2.outerHeight()))) {
+        me.pos = Math.max(me.min, pos.y - Math.max(0, me.offset));
+        if (me.pos > me.min)
+          me.pos = Math.min(me.pos, me.parent.height() - me.min);
+
+        me.resize();
+      }
+    }
+    else {
+      if (((pos.x - me.halfsize) > me.p1pos.left) && ((pos.x + me.halfsize) < (me.p2pos.left + me.p2.outerWidth()))) {
+        me.pos = Math.max(me.min, pos.x - Math.max(0, me.offset));
+        if (me.pos > me.min)
+          me.pos = Math.min(me.pos, me.parent.width() - me.min);
+
+        me.resize();
+      }
+    }
+
+    me.p1pos = me.relative ? me.p1.position() : me.p1.offset();
+    me.p2pos = me.relative ? me.p2.position() : me.p2.offset();
+  };
+
+  /**
+   * Handler for mouseup events
+   */
+  function onDragStop(e)
+  {
+    // resume the ability to highlight text
+    if (bw.konq || bw.chrome || bw.safari)
+      document.body.style.webkitUserSelect = 'auto';
+
+    // cancel the listening for drag events
+    $(document).off('.' + me.id);
+    me.drag_active = false;
+
+    if (rcmail.message_list)
+      rcmail.message_list.drag_active = false;
+
+    // remove temp divs
+    $('div.iframe-splitter-fix').remove();
+
+    me.set_cookie();
+
+    if (typeof me.callback == 'function')
+      me.callback(me);
+
+    return bw.safari ? true : rcube_event.cancel(e);
+  };
+
+  /**
+   * Handler for window resize events
+   */
+  function onResize(e)
+  {
+    if (me.horizontal) {
+      var new_height = parseInt(me.parent.outerHeight(), 10) - parseInt(me.p2[0].style.top, 10);
+      me.p2.css('height', (new_height > 0 ? new_height : 0) +'px');
+    }
+    else {
+      var new_width = parseInt(me.parent.outerWidth(), 10) - parseInt(me.p2[0].style.left, 10);
+      me.p2.css('width', (new_width > 0 ? new_width : 0) + 'px');
+    }
+  };
+
+  /**
+   * Get saved splitter position from cookie
+   */
+  this.get_cookie = function()
+  {
+    return window.UI ? UI.get_pref(this.id) : null;
+  };
+
+  /**
+   * Saves splitter position in cookie
+   */
+  this.set_cookie = function()
+  {
+    if (window.UI)
+      UI.save_pref(this.id, this.pos);
+  };
+
+} // end class rcube_splitter
+
+
+// static getter for splitter instances
+rcube_splitter._instances = {};
+
+rcube_splitter.get_instance = function(id)
+{
+  return rcube_splitter._instances[id];
+};
+
+// @license-end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/ui.min.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,68 @@
+/**
+ * Roundcube functions for default skin interface
+ *
+ * Copyright (c) 2013, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ *
+ * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
+ */
+/*
+ magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
+*/
+function rcube_mail_ui(){function e(a){p||(p=rcmail.local_storage_get_item("prefs.larry",{}));if(null==p[a]){var c=rcmail.get_cookie(a);null!=c&&(p[a]=c,rcmail.local_storage_set_item("prefs.larry",p)&&rcmail.set_cookie(a,c,new Date))}return p[a]}function q(a,c){p[a]=c;if(!rcmail.local_storage_set_item("prefs.larry",p)){var d=new Date;d.setYear(d.getFullYear()+1);rcmail.set_cookie(a,c,d)}}function r(a){a=a?10:0;rcmail.resize_timeout&&window.clearTimeout(rcmail.resize_timeout);rcmail.resize_timeout=
+window.setTimeout(function(){"mail"==rcmail.env.task&&("show"==rcmail.env.action||"preview"==rcmail.env.action?b():"compose"==rcmail.env.action&&t());$("body.iframe .footerleft").each(function(){var a=$(this),d=$(document.body),b=a.hasClass("floating"),f=d.outerHeight(!0)>$(window).height();f!=b&&(b=f?"addClass":"removeClass",a[b]("floating"),d[b]("floatingbuttons"))})},a)}function k(a){var c=$(a.object).siblings("div");c.length&&$(a.object).insertBefore(c.first());if("error"==a.type&&"login"!=rcmail.env.task){rcmail.hide_message(a.object);
+l.message_timer&&window.clearTimeout(l.message_timer);l.messagedialog||(l.messagedialog=$("<div>").addClass("popupdialog").hide());c=a.message;var d=function(){l.messagedialog.is(":visible")&&l.messagedialog.dialog("destroy").hide()};l.messagedialog.is(":visible")&&l.messagedialog.text()!=c&&(c=l.messagedialog.html()+"<p>"+a.message+"</p>");l.messagedialog.html(c).dialog({resizable:!1,closeOnEscape:!0,dialogClass:a.type,title:rcmail.gettext("errortitle"),close:d,hide:{effect:"fadeOut"},width:420,
+minHeight:90}).show();l.messagedialog.closest("div[role=dialog]").attr("role","alertdialog");0<a.timeout&&(l.message_timer=window.setTimeout(d,a.timeout))}}function w(a){var c=a?a.new_layout:rcmail.env.layout,d=$("#mailview-top"),b=$("#mailview-bottom");a&&$("#mainscreencontent").removeClass().addClass(c);$("#mailviewsplitter")["desktop"==c?"show":"hide"]();$("#mailviewsplitter2")["widescreen"==c?"show":"hide"]();$("#mailpreviewframe")["list"!=c?"show":"hide"]();rcmail.env.contentframe="list"==c?
+null:"messagecontframe";"widescreen"==c?($("#countcontrols").detach().appendTo($("#messagelistheader")),d.css({height:"auto",width:394}),b.css({top:0,left:406,height:"auto"}).show(),x?x.resize():(x=new rcube_splitter({id:"mailviewsplitter2",p1:"#mailview-top",p2:"#mailview-bottom",orientation:"v",relative:!0,start:416,min:400,size:12}),x.init())):"desktop"==c?(d.css({height:270,width:"auto"}),b.css({left:0,top:284,height:"auto"}).show(),y?y.resize():(y=new rcube_splitter({id:"mailviewsplitter",p1:"#mailview-top",
+p2:"#mailview-bottom",orientation:"h",relative:!0,start:276,min:150,size:12,offset:4}),y.init())):(d.css({height:"auto",width:"auto"}),b.hide());a&&"widescreen"==a.old_layout&&$("#countcontrols").detach().appendTo($("#messagelistfooter"))}function b(){$("#messagecontent").css("top",$("#messageheader").outerHeight()+1+"px");$("#message-objects div a").addClass("button");$("#attachment-list li").length||($("div.rightcol").hide().attr("aria-hidden","true"),$("div.leftcol").css("margin-right","0"));var a=
+$("#messagebody.mailvelope, #messagebody > .mailvelope");if(a.length){var c=$("#messagecontent").length?$("#messagecontent").height()-16:$(window).height()-a.offset().top-2;a.height(c)}}function n(a){}function I(a){}function J(a){if("TEXTAREA"==a.nodeName){var c=$(a),d=a.scrollHeight;c.css("height",14*(80<a.value.length&&21<d?2:1)+"px");t()}}function t(){var a=$("#composebody"),c=$("#compose-content"),d=$("#composeview-bottom");var b=c.height()-d.position().top;var f=300-b;d.height(Math.max(300,b));
+c.css("overflow",0<f?"auto":"hidden");c=a.parent().width()-5;d=a.parent().height()-8;a.width(c).height(d);$("#composebodycontainer > div").width(c+8);$("#composebody_ifr").height(d+4-$("div.mce-toolbar").height());$("#googie_edit_layer").width(c).height(d);a=$("#directorylist");a.length&&$("#compose-contacts .scroller").css("top",a.position().top+a.outerHeight())}function D(a){var c=$("#quotadisplay"),d=$("#quotamenu"),b=a.total?24*Math.ceil(a.percent/100*20):0;a.total&&480==b&&100>a.percent&&(b-=
+24);c.css("background-position","0 -"+b+"px");c.attr("class","countdisplay p"+10*Math.round(a.percent/10));a.table&&(d.length||(d=$('<div id="quotamenu" class="popupmenu">').appendTo($("body"))),d.html(a.table),c.css("cursor","pointer").off("click").on("click",function(a){return rcmail.command("menu-open","quotamenu",a.target,a)}))}function K(a){$(".boxtitle a.search",a).click(function(c){var d=$(".boxtitle",a),b=$(".listsearchbox",a),f=b.is(":visible")?-1:1,m=34+($("select",b).length?22:0);b.slideToggle({duration:160,
+progress:function(c,b){0>f&&(b=1-b);$(".scroller",a).css("top",d.outerHeight()+m*b+"px")},complete:function(){b.toggleClass("expanded");b.is(":visible")?(b.find("input[type=text]").focus(),m=34+($("select",b).length?$("select",b).outerHeight()+4:0),$(".scroller",a).css("top",d.outerHeight()+m+"px")):$("a.reset",b).click()}});return!1})}function P(a){"reply-list"==a.command&&1==rcmail.env.reply_all_mode?(a=rcmail.gettext(a.status?"replylist":"replyall"),"preview"==rcmail.env.action?$("a.button.replyall").attr("title",
+a):$("a.button.reply-all").text(a).attr("title",a)):"compose-encrypted"==a.command&&$("a.button.encrypt").show()}function E(a,c){var b=z[a]=$("#"+a);b.appendTo(document.body);b.length&&(u[a]=$.extend(u[a]||{},c||{}))}function L(){$("#preview-shortheaders").toggle();var a=$("#preview-allheaders").toggle(),c=$("a#previewheaderstoggle");a.is(":visible")?c.attr("href","#hide").removeClass("add").addClass("remove").attr("aria-expanded","true"):c.attr("href","#details").removeClass("remove").addClass("add").attr("aria-expanded",
+"false");q("previewheaders",a.is(":visible")?"1":"0")}function A(a,c){if(c||!$("#mail"+a+"mode").hasClass("disabled"))$("#maillistmode, #mailthreadmode").removeClass("selected").attr("tabindex","0").attr("aria-disabled","false"),$("#mail"+a+"mode").addClass("selected").attr("tabindex","-1").attr("aria-disabled","true")}function B(a){if(a&&"messagelistmenu"==a.name)Q(a);else if(a){var c=u[a.name]||{},b=$(c.link||"#"+a.name+"link"),g=a.obj&&a.obj.is(":visible");if(a.obj&&g&&b.length){var f=b.parent();
+$(window);f.hasClass("dropbutton")&&(b=f);if(c.above||b.hasClass("dropbutton"))f=b.offset(),a.obj.css({left:f.left+"px",top:f.top+(c.above?-a.obj.height():b.outerHeight())+"px"})}a.obj&&c.iconized&&a.obj.children("ul").addClass("iconized");a.obj&&c.editable&&a.obj.attr("data-editable","true");"function"==typeof c.callback&&c.callback(g,a)}}function R(a,c){var b=a.parentNode.id.replace(/^attach/,"");$.each(["open","download","rename"],function(){var a=this;$("#attachmenu"+a).off("click").attr("onclick",
+"").click(function(c){return rcmail.command(a+"-attachment",b,this)})});u.attachmentmenu.link=a;rcmail.command("menu-open",{menu:"attachmentmenu",id:b},a,c)}function F(a){a=$(a);a.children(".drop").length||a.append($('<a class="drop skip-content" tabindex="0" aria-haspopup="true">Show options</a>').on("click keypress",function(a){if("keypress"!=a.type||13==rcube_event.get_keycode(a))return R(this,a),!1}))}function Q(a){var b=$("#listoptions");b.is(":visible")?b.dialog("close",a.originalEvent):($('input[name="sort_col"][value="'+
+rcmail.env.sort_col+'"]').prop("checked",!0),$('input[name="sort_ord"][value="DESC"]').prop("checked","DESC"==rcmail.env.sort_order),$('input[name="sort_ord"][value="ASC"]').prop("checked","DESC"!=rcmail.env.sort_order),$.each(["widescreen","desktop","list"],function(){$('input[name="layout"][value="'+this+'"]').prop("checked",rcmail.env.layout==this)}),$("#listoptions-columns",b)["widescreen"==rcmail.env.layout?"hide":"show"](),$('input[name="list_col[]"]').each(function(){$(this).prop("checked",
+-1!=$.inArray(this.value,rcmail.env.listcols))}),b.dialog({modal:!0,resizable:!1,closeOnEscape:!0,title:null,open:function(a){setTimeout(function(){b.find("a, input:not(:disabled)").not("[aria-disabled=true]").first().focus()},100)},close:function(a){b.dialog("destroy").hide();a.originalEvent&&rcube_event.is_keyboard(a.originalEvent)&&$("#listmenulink").focus()},minWidth:500,width:b.width()+25}).show())}function S(a){$("#listoptions").dialog("close");rcube_event.is_keyboard(a.originalEvent)&&$("#listmenulink").focus();
+a=$('input[name="sort_col"]:checked').val();var b=$('input[name="sort_ord"]:checked').val(),d=$('input[name="layout"]:checked').val(),g=$('input[name="list_col[]"]:checked').map(function(){return this.value}).get();rcmail.set_list_options(g,a,b,rcmail.env.threading,d)}function T(a){a=$("#contacts-table");var b=a.parent().css("overflow","hidden");a.clone().css({position:"absolute",top:"0",left:"0",width:a.width()+"px","z-index":10}).appendTo(b).animate({left:-(a.width()+5)+"px"},300,"swing",function(){$(this).remove();
+b.css("overflow","auto")})}function U(a){a=$("#contacts-table");var b=a.parent().css("overflow","hidden"),d=a.clone().appendTo(b);a.css({position:"absolute",top:"0",left:-(a.width()+5)+"px",width:a.width()+"px",height:a.height()+"px","z-index":10}).animate({left:"0"},300,"linear",function(){d.remove();$(this).css({position:"relative",left:"0",width:"100%",height:"auto","z-index":1});b.css("overflow","auto")})}function C(a){var b=$("#upload-dialog");b.is(":visible")?b.dialog("close"):rcmail.mailvelope_editor||
+("compose"!=rcmail.env.action||b.data("extended")||($("<a>").addClass("iconlink add").attr("href","#add").html("Add").appendTo($('input[type="file"]',b).parent()).click(M),b.data("extended",!0)),b.dialog({modal:!0,resizable:!1,closeOnEscape:!0,title:b.attr("title"),open:function(a){document.all||$("input[type=file]",b).first().click()},close:function(){try{$("#upload-dialog form").get(0).reset()}catch(d){}b.dialog("destroy").hide();$("div.addline",b).remove()},width:480}).show())}function M(a){a=
+$(this).parent();a=a.clone().addClass("addline").insertAfter(a);a.children(".iconlink").click(M);a.children("input").val("");document.all||$("input[type=file]",a).click()}function G(a,b){var c=$("#compose-"+a);if(!c.is(":visible"))return H[a]&&!b&&$("#_"+a).val(H[a]),c.show(),$("#"+a+"-link").hide(),t(),$("input,textarea",c).focus(),!1}function N(a,b){a=$(a);var c=a.get(0).id,g=a.children("fieldset");if(g.length){c||(c="rcmtabcontainer",a.attr("id",c));var f=$("<ul>").addClass("tabsbar").prependTo(a);
+g.each(function(a){var b=$(this),d=b.children("legend"),m=c+"-t"+a;var g=$("<a>").text(d.text()).attr("href","#"+m);a=$("<li>").addClass("tablink");d.remove();b.attr("id",m);a.append(g).appendTo(f)});a.tabs({active:b||0,heightStyle:"content",activate:function(a,b){r()}})}}var v={},z={},u={forwardmenu:{editable:1},searchmenu:{editable:1,callback:function(a){if(a&&rcmail.env.search_mods){var b;a=$('input:checkbox[name="s_mods[]"]',z.searchmenu);var d=rcmail.env.mailbox,g=rcmail.env.search_mods,f=rcmail.env.search_scope||
+"base";if("mail"==rcmail.env.task){"all"==f&&(d="*");g=g[d]?g[d]:g["*"];var m="text";$('input:radio[name="s_scope"]').prop("checked",!1).filter("#s_scope_"+f).prop("checked",!0)}else m="*";if(g[m])a.map(function(){this.checked=!0;this.disabled=this.value!=m});else for(b in a.prop("disabled",!1).prop("checked",!1),g)$("#s_mod_"+b).prop("checked",!0)}}},attachmentmenu:{},listoptions:{editable:1},groupmenu:{above:1},mailboxmenu:{above:1},spellmenu:{callback:function(a,b){var c,g=rcmail.spellcheck_lang(),
+f=$("ul",b.obj);if(!f.length){f=$('<ul class="toolbarmenu selectable" role="menu">');for(c in rcmail.env.spell_langs){var m=$('<li role="menuitem">');a=$('<a href="#'+c+'" tabindex="0"></a>').text(rcmail.env.spell_langs[c]).addClass("active").data("lang",c).on("click keypress",function(a){if("keypress"!=a.type||13==rcube_event.get_keycode(a))return rcmail.spellcheck_lang_set($(this).data("lang")),rcmail.hide_menu("spellmenu",a),!1});a.appendTo(m);m.appendTo(f)}f.appendTo(b.obj)}$("li",f).each(function(){var a=
+$("a",this);a.data("lang")==g?a.addClass("selected").attr("aria-selected","true"):a.hasClass("selected")&&a.removeClass("selected").removeAttr("aria-selected")})}},"folder-selector":{iconized:1}},l=this,y,x,H={},p;this.set=function(a,b){v[a]=b};this.init=function(){rcmail.addEventListener("message",k);$("#taskbar a").each(function(a,b){$(b).append('<span class="tooltip">'+$(".button-inner",this).html()+"</span>")});$("#taskbar .minmodetoggle").click(function(a){a=$(document.body).toggleClass("minimal").hasClass("minimal");
+q("minimalmode",a?1:0);$(window).resize()});if("mail"==rcmail.env.task){rcmail.addEventListener("menu-open",B).addEventListener("menu-close",B).addEventListener("menu-save",S).addEventListener("enable-command",P).addEventListener("responseafterlist",function(a){A(rcmail.env.threading?"thread":"list",!0)}).addEventListener("responseaftersearch",function(a){A(rcmail.env.threading?"thread":"list",!0)});var a=$("#dragmessagemenu");a.length&&(rcmail.gui_object("dragmenu","dragmessagemenu"),z.dragmenu=
+a);if("show"==rcmail.env.action||"preview"==rcmail.env.action)rcmail.addEventListener("aftershow-headers",function(){b()}).addEventListener("afterhide-headers",function(){b()}),$("#previewheaderstoggle").click(function(a){L();this.blur&&!rcube_event.is_keyboard(a)&&this.blur();return!1}),$("#attachment-list > li").each(function(){F(this)}),"1"==e("previewheaders")&&L(),"show"==rcmail.env.action&&$("#messagecontent").focus();else if("compose"==rcmail.env.action){rcmail.addEventListener("aftersend-attachment",
+C).addEventListener("fileappended",function(a){a.attachment.complete&&F(a.item)}).addEventListener("aftertoggle-editor",function(a){window.setTimeout(function(){t()},200);a&&a.mode&&$("select[name='editorSelector']").val(a.mode)}).addEventListener("compose-encrypted",function(a){$("select[name='editorSelector']").prop("disabled",a.active);$("a.button.attach, a.button.responses")[a.active?"addClass":"removeClass"]("disabled");$("#responseslist a.insertresponse")[a.active?"removeClass":"addClass"]("active")});
+var c=["cc","bcc","replyto","followupto"];for(a=0;a<c.length;a++){var d=c[a];var g=$("#_"+d);g.length&&(g.on("change",{v:d},function(a){this.value&&G(a.data.v,!0)}),""!=g.val()&&G(d,!0))}$("#composeoptionstoggle").click(function(a){var b=$("#composeoptions").toggle().is(":visible");$("#composeoptionstoggle").toggleClass("remove").attr("aria-expanded",b?"true":"false");t();q("composeoptions",b?"1":"0");rcube_event.is_keyboard(a)||this.blur();return!1}).css("cursor","pointer");"0"!==e("composeoptions")&&
+$("#composeoptionstoggle").click();$("textarea[name='_to'], textarea[name='_cc'], textarea[name='_bcc']").change(function(a){J(this)}).change();rcmail.addEventListener("autocomplete_insert",function(a){J(a.field)});(a=rcmail.opener())&&"compose"==a.env.action&&$("#composeoptionstoggle",opener.document).hasClass("remove")&&$("#composeoptionstoggle").click();(new rcube_splitter({id:"composesplitterv",p1:"#composeview-left",p2:"#composeview-right",orientation:"v",relative:!0,start:206,min:170,size:12,
+render:t})).init();$("#attachment-list > li").each(function(){F(this)})}else"list"!=rcmail.env.action&&rcmail.env.action?"get"==rcmail.env.action&&(new rcube_splitter({id:"mailpartsplitterv",p1:"#messagepartheader",p2:"#messagepartcontainer",orientation:"v",relative:!0,start:226,min:150,size:12})).init():(w(),$("#maillistmode").addClass(rcmail.env.threading?"":"selected").click(function(a){A("list");return!1}),$("#mailthreadmode").addClass(rcmail.env.threading?"selected":"").click(function(a){A("thread");
+return!1}),rcmail.init_pagejumper("#pagejumper"),rcmail.addEventListener("setquota",D).addEventListener("layout-change",w).addEventListener("afterimport-messages",C));$("#mailview-left").length&&(new rcube_splitter({id:"mailviewsplitterv",p1:"#mailview-left",p2:"#mailview-right",orientation:"v",relative:!0,start:206,min:150,size:12,callback:n,render:I})).init()}else if("settings"==rcmail.env.task)if(rcmail.addEventListener("init",function(){var a="#settingstabpreferences";rcmail.env.action&&(a="#settingstab"+
+(0<rcmail.env.action.indexOf("identity")?"identities":rcmail.env.action.replace(/\./g,"")));$(a).addClass("selected").children().first().removeAttr("onclick").click(function(){return!1})}),"folders"==rcmail.env.action)(new rcube_splitter({id:"folderviewsplitter",p1:"#folderslist",p2:"#folder-details",orientation:"v",relative:!0,start:266,min:180,size:12})).init(),rcmail.addEventListener("setquota",D),K($("#folderslist"));else if("identities"==rcmail.env.action)(new rcube_splitter({id:"identviewsplitter",
+p1:"#identitieslist",p2:"#identity-details",orientation:"v",relative:!0,start:266,min:180,size:12})).init();else if("responses"==rcmail.env.action)(new rcube_splitter({id:"responseviewsplitter",p1:"#identitieslist",p2:"#identity-details",orientation:"v",relative:!0,start:266,min:180,size:12})).init();else if("preferences"==rcmail.env.action||!rcmail.env.action)(new rcube_splitter({id:"prefviewsplitter",p1:"#sectionslist",p2:"#preferences-box",orientation:"v",relative:!0,start:266,min:180,size:12})).init();
+else{if("edit-prefs"==rcmail.env.action){a=$("#preferences-details fieldset.advanced legend");var f=$('<a href="#toggle"></a>').text(rcmail.gettext("toggleadvancedoptions")).attr("title",rcmail.gettext("toggleadvancedoptions")).addClass("advanced-toggle");a.click(function(a){f.html($(this).hasClass("collapsed")?"&#9650;":"&#9660;");$(this).toggleClass("collapsed").closest("fieldset").children(".propform").toggle()}).append(f).addClass("collapsed");bw.mz&&a.parents("form").css("display","inline")}}else"addressbook"==
+rcmail.env.task&&(rcmail.addEventListener("afterupload-photo",C).addEventListener("beforepushgroup",T).addEventListener("beforepopgroup",U).addEventListener("menu-open",B).addEventListener("menu-close",B),""==rcmail.env.action&&((new rcube_splitter({id:"addressviewsplitterd",p1:"#addressview-left",p2:"#addressview-right",orientation:"v",relative:!0,start:206,min:150,size:12,render:I})).init(),(new rcube_splitter({id:"addressviewsplitter",p1:"#addresslist",p2:"#contacts-box",orientation:"v",relative:!0,
+start:266,min:260,size:12})).init()),a=$("#dragcontactmenu"),a.length&&(rcmail.gui_object("dragmenu","dragcontactmenu"),z.dragmenu=a));$(".tabbed").each(function(a,b){N(b)});$("select.decorated").each(function(){if(bw.opera)$(this).removeClass("decorated");else{var a=$(this),b=a.parent(),c=Math.max(a.height(),26)-2,d=a.width()-22,f=$("option",this).first().text();""!=$("option:selected",this).val()&&(f=$("option:selected",this).text());var g=$('<a class="menuselector" tabindex="-1"><span class="handle">'+
+f+"</span></a>").css("position","absolute").offset(a.position()).insertAfter(a);g.children().width(d).height(c).css("line-height",c-1+"px");"absolute"!=b.css("position")&&b.css("position","relative");a.width(g.width()).on(bw.mz?"change keyup":"change",function(){var a=$("option:selected",this).text();$(this).next().children().text(a)});a.on("focus",function(a){g.addClass("focus")}).on("blur",function(a){g.removeClass("focus")})}});a=$("body.minwidth");a.length&&a.css("min-width",$(".toolbar").width()+
+$("#quicksearchbar").width()+$("#searchfilter").width()+30);window.onresize=r;r()};this.init_tabs=N;this.show_about=function(a){var b=$("<iframe>").attr({id:"aboutframe",src:rcmail.url("settings/about"),frameborder:"0"});h=Math.floor(.75*$(window).height());buttons={};supportln=$("#supportlink");supportln.length&&(v.supporturl=supportln.attr("href"))&&(buttons[supportln.html()]=function(a){0>v.supporturl.indexOf("mailto:")?window.open(v.supporturl):location.href=v.supporturl});b.dialog({modal:!0,
+resizable:!1,closeOnEscape:!0,title:a?a.title||a.innerHTML:null,close:function(){b.dialog("destroy").remove()},buttons:buttons,width:640,height:h}).width(640)};this.show_popup=function(a,b,d){!d&&u[a]||E(a,d);d=u[a]||{};d=$(d.link?d.link:"#"+a+"link");var c=d.offset();d.has(".inner")&&(d=d.children(".inner"));return rcmail.command("menu-open",{menu:a,show:b},d.get(0),$.Event("click",{target:d.get(0),pageX:c.left,pageY:c.top,clientX:c.left,clientY:c.top}))};this.toggle_popup=function(a,b,d){!d&&u[a]||
+E(a,d);return rcmail.command("menu-open",a,b.target,b)};this.add_popup=E;this.set_searchmod=function(a){var b=rcmail.env.task;var d=rcmail.env.search_mods,g=rcmail.env.mailbox;"all"==$('input[name="s_scope"]:checked').val()&&(g="*");d||(d={});if("mail"==b){d[g]||(d[g]=rcube_clone_object(d["*"]));var f=d[g];b="text"}else f=d,b="*";a.checked?f[a.value]=1:delete f[a.value];a.value==b&&$('input:checkbox[name="s_mods[]"]').map(function(){this!=a&&(this.checked=!0,a.checked?(this.disabled=!0,delete f[this.value]):
+(this.disabled=!1,f[this.value]=1))});rcmail.set_searchmods(f)};this.set_searchscope=function(a){rcmail.set_searchscope(a.value)};this.show_uploadform=C;this.show_header_row=G;this.hide_header_row=function(a){var b=$("#_"+a);H[a]=b.val();b.val("");$("#compose-"+a).hide();$("#"+a+"-link").show();t();return!1};this.update_quota=D;this.get_pref=e;this.save_pref=q;this.folder_search_init=K;if(window.$&&document.body){var O=e("minimalmode");(parseInt(O)||null===O&&850>$(window).height())&&$(document.body).addClass("minimal");
+bw.tablet&&$("#viewport").attr("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");$(document).ready(function(){l.init()})}}
+function rcube_scroller(e,q,r){var k=this;this.list=$(e);this.top=$(q);this.bottom=$(r);this.step_size=6;this.step_time=20;this.delay=500;this.top.mouseenter(function(){rcmail.drag_active&&(k.ts=window.setTimeout(function(){k.scroll("down")},k.delay))}).mouseout(function(){k.ts&&window.clearTimeout(k.ts)});this.bottom.mouseenter(function(){rcmail.drag_active&&(k.ts=window.setTimeout(function(){k.scroll("up")},k.delay))}).mouseout(function(){k.ts&&window.clearTimeout(k.ts)});this.scroll=function(e){var b=
+this,n=this.step_size;rcmail.drag_active&&("down"==e&&(n*=-1),this.list.get(0).scrollTop+=n,this.ts=window.setTimeout(function(){b.scroll(e)},this.step_time))}}
+function rcube_splitter(e){function q(n){if(bw.konq||bw.chrome||bw.safari)document.body.style.webkitUserSelect="none";b.p1pos=b.relative?b.p1.position():b.p1.offset();b.p2pos=b.relative?b.p2.position():b.p2.offset();b.drag_active=!0;$(document).on("mousemove."+this.id,r).on("mouseup."+this.id,k);rcmail.message_list&&(rcmail.message_list.drag_active=!0);$("iframe").each(function(b,n){$("<div>").attr("id","iframe-splitter-fix-"+b).addClass("iframe-splitter-fix").css({background:"#fff",width:n.offsetWidth+
+"px",height:n.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo("body")})}function r(n){if(!b.drag_active)return!1;window.clearTimeout(b.ts);b.ts=window.setTimeout(function(){var e=rcube_event.get_mouse_pos(n);if(b.relative){var k=b.parent.offset();e.x-=k.left;e.y-=k.top}b.horizontal?e.y-b.halfsize>b.p1pos.top&&e.y+b.halfsize<b.p2pos.top+b.p2.outerHeight()&&(b.pos=Math.max(b.min,e.y-Math.max(0,b.offset)),b.pos>b.min&&(b.pos=Math.min(b.pos,b.parent.height()-
+b.min)),b.resize()):e.x-b.halfsize>b.p1pos.left&&e.x+b.halfsize<b.p2pos.left+b.p2.outerWidth()&&(b.pos=Math.max(b.min,e.x-Math.max(0,b.offset)),b.pos>b.min&&(b.pos=Math.min(b.pos,b.parent.width()-b.min)),b.resize());b.p1pos=b.relative?b.p1.position():b.p1.offset();b.p2pos=b.relative?b.p2.position():b.p2.offset()},1);return!1}function k(e){if(bw.konq||bw.chrome||bw.safari)document.body.style.webkitUserSelect="auto";$(document).off("."+b.id);b.drag_active=!1;rcmail.message_list&&(rcmail.message_list.drag_active=
+!1);$("div.iframe-splitter-fix").remove();b.set_cookie();"function"==typeof b.callback&&b.callback(b);return bw.safari?!0:rcube_event.cancel(e)}function w(e){b.horizontal?(e=parseInt(b.parent.outerHeight(),10)-parseInt(b.p2[0].style.top,10),b.p2.css("height",(0<e?e:0)+"px")):(e=parseInt(b.parent.outerWidth(),10)-parseInt(b.p2[0].style.left,10),b.p2.css("width",(0<e?e:0)+"px"))}this.p=e;this.id=e.id;this.horizontal="horizontal"==e.orientation||"h"==e.orientation;this.halfsize=(void 0!==e.size?e.size:
+10)/2;this.pos=e.start||0;this.min=e.min||20;this.offset=e.offset||0;this.relative=e.relative?!0:!1;this.drag_active=!1;this.render=e.render;this.callback=e.callback;var b=this;rcube_splitter._instances[this.id]=b;this.init=function(){this.p1=$(this.p.p1);this.p2=$(this.p.p2);this.parent=this.p1.parent();if(this.p1.length&&this.p2.length){this.p1pos=this.relative?this.p1.position():this.p1.offset();this.p2pos=this.relative?this.p2.position():this.p2.offset();this.handle=$("<div>").attr("id",this.id).attr("unselectable",
+"on").attr("role","presentation").addClass("splitter "+(this.horizontal?"splitter-h":"splitter-v")).appendTo(this.parent).mousedown(q);if(this.horizontal){var b=this.p1pos.top+this.p1.outerHeight();this.handle.css({left:"0px",top:b+"px"})}else b=this.p1pos.left+this.p1.outerWidth(),this.handle.css({left:b+"px",top:"0px"});bw.ie&&$(window).resize(w);(b=this.get_cookie())&&!isNaN(b)?(this.pos=parseFloat(b),this.resize()):this.pos&&(this.resize(),this.set_cookie())}};this.resize=function(){if(this.horizontal){if(this.p1.css("height",
+Math.floor(this.pos-this.p1pos.top-Math.floor(this.halfsize))+"px"),this.p2.css("top",Math.ceil(this.pos+Math.ceil(this.halfsize)+2)+"px"),this.handle.css("top",Math.round(this.pos-this.halfsize+this.offset)+"px"),bw.ie){var b=parseInt(this.parent.outerHeight(),10)-parseInt(this.p2.css("top"),10);this.p2.css("height",(0<b?b:0)+"px")}}else this.p1.css("width",Math.floor(this.pos-this.p1pos.left-Math.floor(this.halfsize))+"px"),this.p2.css("left",Math.ceil(this.pos+Math.ceil(this.halfsize))+"px"),this.handle.css("left",
+Math.round(this.pos-this.halfsize+this.offset+3)+"px"),bw.ie&&(b=parseInt(this.parent.outerWidth(),10)-parseInt(this.p2.css("left"),10),this.p2.css("width",(0<b?b:0)+"px"));this.p2.resize();this.p1.resize();this.drag_active&&$("iframe").each(function(b,e){var k=$(this).offset();$("#iframe-splitter-fix-"+b).css({top:k.top+"px",left:k.left+"px",width:e.offsetWidth+"px",height:e.offsetHeight+"px"})});"function"==typeof this.render&&this.render(this)};this.get_cookie=function(){return window.UI?UI.get_pref(this.id):
+null};this.set_cookie=function(){window.UI&&UI.save_pref(this.id,this.pos)}}rcube_splitter._instances={};rcube_splitter.get_instance=function(e){return rcube_splitter._instances[e]};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/larry/watermark.html	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title></title>
+<style type="text/css">
+
+html, body {
+	 height: 95%;
+}
+
+body {
+	background: url(images/watermark.jpg?v=e784.5000) center no-repeat #fff;
+}
+
+</style>
+</head>
+<body>
+
+</body>
+</html>
\ No newline at end of file
Binary file temp/js_cache/codemirror-5.21.0.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/temp/js_cache/jquery-3.2.1.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},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?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=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)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.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)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(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(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},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){while(p){m=b;while(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){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?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===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!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!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.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}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(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)ya(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=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.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),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(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||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.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 Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(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&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(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&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.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 Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},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:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.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):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.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=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.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=r.find.attr(a,b),
+null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.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=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.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)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(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):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.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(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.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||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!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(Rb[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()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.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 r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/temp/js_cache/jstz-1.0.6.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+/* jstz.min.js Version: 1.0.6 Build date: 2015-11-04 */
+!function(e){var a=function(){"use strict";var e="s",s={DAY:864e5,HOUR:36e5,MINUTE:6e4,SECOND:1e3,BASELINE_YEAR:2014,MAX_SCORE:864e6,AMBIGUITIES:{"America/Denver":["America/Mazatlan"],"Europe/London":["Africa/Casablanca"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Europe/Helsinki","Asia/Damascus","Africa/Cairo","Asia/Gaza","Europe/Minsk"],"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]}},i=function(e){var a=-e.getTimezoneOffset();return null!==a?a:0},r=function(){var a=i(new Date(s.BASELINE_YEAR,0,2)),r=i(new Date(s.BASELINE_YEAR,5,2)),n=a-r;return 0>n?a+",1":n>0?r+",1,"+e:a+",0"},n=function(){var e,a;if("undefined"!=typeof Intl&&"undefined"!=typeof Intl.DateTimeFormat&&(e=Intl.DateTimeFormat(),"undefined"!=typeof e&&"undefined"!=typeof e.resolvedOptions))return a=e.resolvedOptions().timeZone,a&&(a.indexOf("/")>-1||"UTC"===a)?a:void 0},o=function(e){for(var a=new Date(e,0,1,0,0,1,0).getTime(),s=new Date(e,12,31,23,59,59).getTime(),i=a,r=new Date(i).getTimezoneOffset(),n=null,o=null;s-864e5>i;){var t=new Date(i),A=t.getTimezoneOffset();A!==r&&(r>A&&(n=t),A>r&&(o=t),r=A),i+=864e5}return n&&o?{s:u(n).getTime(),e:u(o).getTime()}:!1},u=function l(e,a,i){"undefined"==typeof a&&(a=s.DAY,i=s.HOUR);for(var r=new Date(e.getTime()-a).getTime(),n=e.getTime()+a,o=new Date(r).getTimezoneOffset(),u=r,t=null;n-i>u;){var A=new Date(u),c=A.getTimezoneOffset();if(c!==o){t=A;break}u+=i}return a===s.DAY?l(t,s.HOUR,s.MINUTE):a===s.HOUR?l(t,s.MINUTE,s.SECOND):t},t=function(e,a,s,i){if("N/A"!==s)return s;if("Asia/Beirut"===a){if("Africa/Cairo"===i.name&&13983768e5===e[6].s&&14116788e5===e[6].e)return 0;if("Asia/Jerusalem"===i.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===a){if("America/Asuncion"===i.name&&14124816e5===e[6].s&&1397358e6===e[6].e)return 0;if("America/Campo_Grande"===i.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===a){if("America/Sao_Paulo"===i.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===a&&"Pacific/Fiji"===i.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return s},A=function(e,i){for(var r=function(a){for(var r=0,n=0;n<e.length;n++)if(a.rules[n]&&e[n]){if(!(e[n].s>=a.rules[n].s&&e[n].e<=a.rules[n].e)){r="N/A";break}if(r=0,r+=Math.abs(e[n].s-a.rules[n].s),r+=Math.abs(a.rules[n].e-e[n].e),r>s.MAX_SCORE){r="N/A";break}}return r=t(e,i,r,a)},n={},o=a.olson.dst_rules.zones,u=o.length,A=s.AMBIGUITIES[i],c=0;u>c;c++){var m=o[c],l=r(o[c]);"N/A"!==l&&(n[m.name]=l)}for(var f in n)if(n.hasOwnProperty(f))for(var d=0;d<A.length;d++)if(A[d]===f)return f;return i},c=function(e){var s=function(){for(var e=[],s=0;s<a.olson.dst_rules.years.length;s++){var i=o(a.olson.dst_rules.years[s]);e.push(i)}return e},i=function(e){for(var a=0;a<e.length;a++)if(e[a]!==!1)return!0;return!1},r=s(),n=i(r);return n?A(r,e):e},m=function(){var e=n();return e||(e=a.olson.timezones[r()],"undefined"!=typeof s.AMBIGUITIES[e]&&(e=c(e))),{name:function(){return e}}};return{determine:m}}();a.olson=a.olson||{},a.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-660,1,s":"Pacific/Apia","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Argentina/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,s":"Africa/Windhoek","120,1":"Asia/Beirut","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Kolkata","345,0":"Asia/Kathmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Majuro","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},a.olson.dst_rules={years:[2008,2009,2010,2011,2012,2013,2014],zones:[{name:"Africa/Cairo",rules:[{e:12199572e5,s:12090744e5},{e:1250802e6,s:1240524e6},{e:12858804e5,s:12840696e5},!1,!1,!1,{e:14116788e5,s:1406844e6}]},{name:"Africa/Casablanca",rules:[{e:12202236e5,s:12122784e5},{e:12508092e5,s:12438144e5},{e:1281222e6,s:12727584e5},{e:13120668e5,s:13017888e5},{e:13489704e5,s:1345428e6},{e:13828392e5,s:13761e8},{e:14142888e5,s:14069448e5}]},{name:"America/Asuncion",rules:[{e:12050316e5,s:12243888e5},{e:12364812e5,s:12558384e5},{e:12709548e5,s:12860784e5},{e:13024044e5,s:1317528e6},{e:1333854e6,s:13495824e5},{e:1364094e6,s:1381032e6},{e:13955436e5,s:14124816e5}]},{name:"America/Campo_Grande",rules:[{e:12032172e5,s:12243888e5},{e:12346668e5,s:12558384e5},{e:12667212e5,s:1287288e6},{e:12981708e5,s:13187376e5},{e:13302252e5,s:1350792e6},{e:136107e7,s:13822416e5},{e:13925196e5,s:14136912e5}]},{name:"America/Goose_Bay",rules:[{e:122559486e4,s:120503526e4},{e:125704446e4,s:123648486e4},{e:128909886e4,s:126853926e4},{e:13205556e5,s:129998886e4},{e:13520052e5,s:13314456e5},{e:13834548e5,s:13628952e5},{e:14149044e5,s:13943448e5}]},{name:"America/Havana",rules:[{e:12249972e5,s:12056436e5},{e:12564468e5,s:12364884e5},{e:12885012e5,s:12685428e5},{e:13211604e5,s:13005972e5},{e:13520052e5,s:13332564e5},{e:13834548e5,s:13628916e5},{e:14149044e5,s:13943412e5}]},{name:"America/Mazatlan",rules:[{e:1225008e6,s:12074724e5},{e:12564576e5,s:1238922e6},{e:1288512e6,s:12703716e5},{e:13199616e5,s:13018212e5},{e:13514112e5,s:13332708e5},{e:13828608e5,s:13653252e5},{e:14143104e5,s:13967748e5}]},{name:"America/Mexico_City",rules:[{e:12250044e5,s:12074688e5},{e:1256454e6,s:12389184e5},{e:12885084e5,s:1270368e6},{e:1319958e6,s:13018176e5},{e:13514076e5,s:13332672e5},{e:13828572e5,s:13653216e5},{e:14143068e5,s:13967712e5}]},{name:"America/Miquelon",rules:[{e:12255984e5,s:12050388e5},{e:1257048e6,s:12364884e5},{e:12891024e5,s:12685428e5},{e:1320552e6,s:12999924e5},{e:13520016e5,s:1331442e6},{e:13834512e5,s:13628916e5},{e:14149008e5,s:13943412e5}]},{name:"America/Santa_Isabel",rules:[{e:12250116e5,s:1207476e6},{e:12564612e5,s:12389256e5},{e:12885156e5,s:12703752e5},{e:13199652e5,s:13018248e5},{e:13514148e5,s:13332744e5},{e:13828644e5,s:13653288e5},{e:1414314e6,s:13967784e5}]},{name:"America/Santiago",rules:[{e:1206846e6,s:1223784e6},{e:1237086e6,s:12552336e5},{e:127035e7,s:12866832e5},{e:13048236e5,s:13138992e5},{e:13356684e5,s:13465584e5},{e:1367118e6,s:13786128e5},{e:13985676e5,s:14100624e5}]},{name:"America/Sao_Paulo",rules:[{e:12032136e5,s:12243852e5},{e:12346632e5,s:12558348e5},{e:12667176e5,s:12872844e5},{e:12981672e5,s:1318734e6},{e:13302216e5,s:13507884e5},{e:13610664e5,s:1382238e6},{e:1392516e6,s:14136876e5}]},{name:"Asia/Amman",rules:[{e:1225404e6,s:12066552e5},{e:12568536e5,s:12381048e5},{e:12883032e5,s:12695544e5},{e:13197528e5,s:13016088e5},!1,!1,{e:14147064e5,s:13959576e5}]},{name:"Asia/Damascus",rules:[{e:12254868e5,s:120726e7},{e:125685e7,s:12381048e5},{e:12882996e5,s:12701592e5},{e:13197492e5,s:13016088e5},{e:13511988e5,s:13330584e5},{e:13826484e5,s:1364508e6},{e:14147028e5,s:13959576e5}]},{name:"Asia/Dubai",rules:[!1,!1,!1,!1,!1,!1,!1]},{name:"Asia/Gaza",rules:[{e:12199572e5,s:12066552e5},{e:12520152e5,s:12381048e5},{e:1281474e6,s:126964086e4},{e:1312146e6,s:130160886e4},{e:13481784e5,s:13330584e5},{e:13802292e5,s:1364508e6},{e:1414098e6,s:13959576e5}]},{name:"Asia/Irkutsk",rules:[{e:12249576e5,s:12068136e5},{e:12564072e5,s:12382632e5},{e:12884616e5,s:12697128e5},!1,!1,!1,!1]},{name:"Asia/Jerusalem",rules:[{e:12231612e5,s:12066624e5},{e:1254006e6,s:1238112e6},{e:1284246e6,s:12695616e5},{e:131751e7,s:1301616e6},{e:13483548e5,s:13330656e5},{e:13828284e5,s:13645152e5},{e:1414278e6,s:13959648e5}]},{name:"Asia/Kamchatka",rules:[{e:12249432e5,s:12067992e5},{e:12563928e5,s:12382488e5},{e:12884508e5,s:12696984e5},!1,!1,!1,!1]},{name:"Asia/Krasnoyarsk",rules:[{e:12249612e5,s:12068172e5},{e:12564108e5,s:12382668e5},{e:12884652e5,s:12697164e5},!1,!1,!1,!1]},{name:"Asia/Omsk",rules:[{e:12249648e5,s:12068208e5},{e:12564144e5,s:12382704e5},{e:12884688e5,s:126972e7},!1,!1,!1,!1]},{name:"Asia/Vladivostok",rules:[{e:12249504e5,s:12068064e5},{e:12564e8,s:1238256e6},{e:12884544e5,s:12697056e5},!1,!1,!1,!1]},{name:"Asia/Yakutsk",rules:[{e:1224954e6,s:120681e7},{e:12564036e5,s:12382596e5},{e:1288458e6,s:12697092e5},!1,!1,!1,!1]},{name:"Asia/Yekaterinburg",rules:[{e:12249684e5,s:12068244e5},{e:1256418e6,s:1238274e6},{e:12884724e5,s:12697236e5},!1,!1,!1,!1]},{name:"Asia/Yerevan",rules:[{e:1224972e6,s:1206828e6},{e:12564216e5,s:12382776e5},{e:1288476e6,s:12697272e5},{e:13199256e5,s:13011768e5},!1,!1,!1]},{name:"Australia/Lord_Howe",rules:[{e:12074076e5,s:12231342e5},{e:12388572e5,s:12545838e5},{e:12703068e5,s:12860334e5},{e:13017564e5,s:1317483e6},{e:1333206e6,s:13495374e5},{e:13652604e5,s:1380987e6},{e:139671e7,s:14124366e5}]},{name:"Australia/Perth",rules:[{e:12068136e5,s:12249576e5},!1,!1,!1,!1,!1,!1]},{name:"Europe/Helsinki",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Europe/Minsk",rules:[{e:12249792e5,s:12068352e5},{e:12564288e5,s:12382848e5},{e:12884832e5,s:12697344e5},!1,!1,!1,!1]},{name:"Europe/Moscow",rules:[{e:12249756e5,s:12068316e5},{e:12564252e5,s:12382812e5},{e:12884796e5,s:12697308e5},!1,!1,!1,!1]},{name:"Pacific/Apia",rules:[!1,!1,!1,{e:13017528e5,s:13168728e5},{e:13332024e5,s:13489272e5},{e:13652568e5,s:13803768e5},{e:13967064e5,s:14118264e5}]},{name:"Pacific/Fiji",rules:[!1,!1,{e:12696984e5,s:12878424e5},{e:13271544e5,s:1319292e6},{e:1358604e6,s:13507416e5},{e:139005e7,s:1382796e6},{e:14215032e5,s:14148504e5}]},{name:"Europe/London",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]}]},"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a:"undefined"!=typeof define&&null!==define&&null!=define.amd?define([],function(){return a}):"undefined"==typeof e?window.jstz=a:e.jstz=a}();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/temp/js_cache/openpgp-1.6.2.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+/*! OpenPGPjs.org  this is LGPL licensed code, see LICENSE/our website for more information.- v1.6.2 - 2016-06-08 */!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.openpgp=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d=a("./promise/promise").Promise,e=a("./promise/polyfill").polyfill;c.Promise=d,c.polyfill=e},{"./promise/polyfill":5,"./promise/promise":6}],2:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){e(a,b)}}function e(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&f(g.then)?g.then(d(j),c):e(j,g)})}var e=a("./utils").isArray,f=a("./utils").isFunction;c.all=d},{"./utils":10}],3:[function(a,b,c){(function(a,b){"use strict";function d(){return function(){a.nextTick(g)}}function e(){var a=0,b=new k(g),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function f(){return function(){l.setTimeout(g,1)}}function g(){for(var a=0;a<m.length;a++){var b=m[a],c=b[0],d=b[1];c(d)}m=[]}function h(a,b){var c=m.push([a,b]);1===c&&i()}var i,j="undefined"!=typeof window?window:{},k=j.MutationObserver||j.WebKitMutationObserver,l="undefined"!=typeof b?b:void 0===this?window:this,m=[];i="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?d():k?e():f(),c.asap=h}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:11}],4:[function(a,b,c){"use strict";function d(a,b){return 2!==arguments.length?e[a]:void(e[a]=b)}var e={instrument:!1};c.config=e,c.configure=d},{}],5:[function(a,b,c){(function(b){"use strict";function d(){var a;a="undefined"!=typeof b?b:"undefined"!=typeof window&&window.document?window:self;var c="Promise"in a&&"resolve"in a.Promise&&"reject"in a.Promise&&"all"in a.Promise&&"race"in a.Promise&&function(){var b;return new a.Promise(function(a){b=a}),f(b)}();c||(a.Promise=e)}var e=a("./promise").Promise,f=a("./utils").isFunction;c.polyfill=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./promise":6,"./utils":10}],6:[function(a,b,c){"use strict";function d(a){if(!q(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof d))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],e(a,this)}function e(a,b){function c(a){j(b,a)}function d(a){l(b,a)}try{a(c,d)}catch(e){d(e)}}function f(a,b,c,d){var e,f,g,h,k=q(c);if(k)try{e=c(d),g=!0}catch(m){h=!0,f=m}else e=d,g=!0;i(b,e)||(k&&g?j(b,e):h?l(b,f):a===y?j(b,e):a===z&&l(b,e))}function g(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+y]=c,e[f+z]=d}function h(a,b){for(var c,d,e=a._subscribers,g=a._detail,h=0;h<e.length;h+=3)c=e[h],d=e[h+b],f(b,c,d,g);a._subscribers=null}function i(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(p(b)&&(d=b.then,q(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?j(a,d):k(a,d)))},function(b){return c?!0:(c=!0,void l(a,b))}),!0}catch(e){return c?!0:(l(a,e),!0)}return!1}function j(a,b){a===b?k(a,b):i(a,b)||k(a,b)}function k(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(m,a))}function l(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(n,a))}function m(a){h(a,a._state=y)}function n(a){h(a,a._state=z)}var o=a("./config").config,p=(a("./config").configure,a("./utils").objectOrFunction),q=a("./utils").isFunction,r=(a("./utils").now,a("./all").all),s=a("./race").race,t=a("./resolve").resolve,u=a("./reject").reject,v=a("./asap").asap;o.async=v;var w=void 0,x=0,y=1,z=2;d.prototype={constructor:d,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;o.async(function(){f(c._state,d,e[c._state-1],c._detail)})}else g(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},d.all=r,d.race=s,d.resolve=t,d.reject=u,c.Promise=d},{"./all":2,"./asap":3,"./config":4,"./race":7,"./reject":8,"./resolve":9,"./utils":10}],7:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var e=a("./utils").isArray;c.race=d},{"./utils":10}],8:[function(a,b,c){"use strict";function d(a){var b=this;return new b(function(b,c){c(a)})}c.reject=d},{}],9:[function(a,b,c){"use strict";function d(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}c.resolve=d},{}],10:[function(a,b,c){"use strict";function d(a){return e(a)||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"[object Array]"===Object.prototype.toString.call(a)}var g=Date.now||function(){return(new Date).getTime()};c.objectOrFunction=d,c.isFunction=e,c.isArray=f,c.now=g},{}],11:[function(a,b,c){function d(){k=!1,h.length?j=h.concat(j):l=-1,j.length&&e()}function e(){if(!k){var a=setTimeout(d);k=!0;for(var b=j.length;b;){for(h=j,j=[];++l<b;)h&&h[l].run();l=-1,b=j.length}h=null,k=!1,clearTimeout(a)}}function f(a,b){this.fun=a,this.array=b}function g(){}var h,i=b.exports={},j=[],k=!1,l=-1;i.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];j.push(new f(a,b)),1!==j.length||k||setTimeout(e,0)},f.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.binding=function(a){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(a){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],12:[function(a,b,c){"use strict";function d(a,b){return this instanceof d?(this.text=a.replace(/\r/g,"").replace(/[\t ]+\n/g,"\n").replace(/\n/g,"\r\n"),void(this.packets=b||new h.List)):new d(a,b)}function e(a){var b=j.decode(a);if(b.type!==i.armor.signed)throw new Error("No cleartext signed message.");var c=new h.List;c.read(b.data),f(b.headers,c);var e=new d(b.text,c);return e}function f(a,b){for(var c=function(a){for(var c=0;c<b.length;c++)if(b[c].tag===i.packet.signature&&!a.some(function(a){return b[c].hashAlgorithm===a}))return!1;return!0},d=null,e=[],f=0;f<a.length;f++){if(d=a[f].match(/Hash: (.+)/),!d)throw new Error('Only "Hash" header allowed in cleartext signed message');d=d[1].replace(/\s/g,""),d=d.split(","),d=d.map(function(a){a=a.toLowerCase();try{return i.write(i.hash,a)}catch(b){throw new Error("Unknown hash algorithm in armor header: "+a)}}),e=e.concat(d)}if(!e.length&&!c([i.hash.md5]))throw new Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');if(!c(e))throw new Error("Hash algorithm mismatch in armor header and signature")}var g=a("./config"),h=a("./packet"),i=a("./enums.js"),j=a("./encoding/armor.js");d.prototype.getSigningKeyIds=function(){var a=[],b=this.packets.filterByTag(i.packet.signature);return b.forEach(function(b){a.push(b.issuerKeyId)}),a},d.prototype.sign=function(a){var b=new h.List,c=new h.Literal;c.setText(this.text);for(var d=0;d<a.length;d++){if(a[d].isPublic())throw new Error("Need private key for signing");var e=new h.Signature;e.signatureType=i.signature.text,e.hashAlgorithm=g.prefer_hash_algorithm;var f=a[d].getSigningKeyPacket();if(e.publicKeyAlgorithm=f.algorithm,!f.isDecrypted)throw new Error("Private key is not decrypted.");e.sign(f,c),b.push(e)}this.packets=b},d.prototype.verify=function(a){var b=[],c=this.packets.filterByTag(i.packet.signature),d=new h.Literal;d.setText(this.text);for(var e=0;e<c.length;e++){for(var f=null,g=0;g<a.length&&!(f=a[g].getSigningKeyPacket(c[e].issuerKeyId));g++);var j={};f?(j.keyid=c[e].issuerKeyId,j.valid=c[e].verify(f,d)):(j.keyid=c[e].issuerKeyId,j.valid=null),b.push(j)}return b},d.prototype.getText=function(){return this.text.replace(/\r\n/g,"\n")},d.prototype.armor=function(){var a={hash:i.read(i.hash,g.prefer_hash_algorithm).toUpperCase(),text:this.text,data:this.packets.write()};return j.encode(i.armor.signed,a)},c.CleartextMessage=d,c.readArmored=e},{"./config":17,"./encoding/armor.js":41,"./enums.js":43,"./packet":55}],13:[function(a,b,c){(function(){"use strict";function a(a,b){var c=a.split("."),d=n;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===l?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a,b){if(this.index="number"==typeof b?b:0,this.d=0,this.buffer=a instanceof(o?Uint8Array:Array)?a:new(o?Uint8Array:Array)(32768),2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&c(this)}function c(a){var b,c=a.buffer,d=c.length,e=new(o?Uint8Array:Array)(d<<1);if(o)e.set(c);else for(b=0;d>b;++b)e[b]=c[b];return a.buffer=e}function d(a){this.buffer=new(o?Uint16Array:Array)(2*a),this.length=0}function e(a,b){this.e=w,this.f=0,this.input=o&&a instanceof Array?new Uint8Array(a):a,this.c=0,b&&(b.lazy&&(this.f=b.lazy),"number"==typeof b.compressionType&&(this.e=b.compressionType),b.outputBuffer&&(this.b=o&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.c=b.outputIndex)),this.b||(this.b=new(o?Uint8Array:Array)(32768))}function f(a,b){this.length=a,this.g=b}function g(a,b){function c(a,b){var c,d=a.g,e=[],f=0;c=z[a.length],e[f++]=65535&c,e[f++]=c>>16&255,e[f++]=c>>24;var g;switch(m){case 1===d:g=[0,d-1,0];break;case 2===d:g=[1,d-2,0];break;case 3===d:g=[2,d-3,0];break;case 4===d:g=[3,d-4,0];break;case 6>=d:g=[4,d-5,1];break;case 8>=d:g=[5,d-7,1];break;case 12>=d:g=[6,d-9,2];break;case 16>=d:g=[7,d-13,2];break;case 24>=d:g=[8,d-17,3];break;case 32>=d:g=[9,d-25,3];break;case 48>=d:g=[10,d-33,4];break;case 64>=d:g=[11,d-49,4];break;case 96>=d:g=[12,d-65,5];break;case 128>=d:g=[13,d-97,5];break;case 192>=d:g=[14,d-129,6];break;case 256>=d:g=[15,d-193,6];break;case 384>=d:g=[16,d-257,7];break;case 512>=d:g=[17,d-385,7];break;case 768>=d:g=[18,d-513,8];break;case 1024>=d:g=[19,d-769,8];break;case 1536>=d:g=[20,d-1025,9];break;case 2048>=d:g=[21,d-1537,9];break;case 3072>=d:g=[22,d-2049,10];break;case 4096>=d:g=[23,d-3073,10];break;case 6144>=d:g=[24,d-4097,11];break;case 8192>=d:g=[25,d-6145,11];break;case 12288>=d:g=[26,d-8193,12];break;case 16384>=d:g=[27,d-12289,12];break;case 24576>=d:g=[28,d-16385,13];break;case 32768>=d:g=[29,d-24577,13];break;default:throw"invalid distance"}c=g,e[f++]=c[0],e[f++]=c[1],e[f++]=c[2];var h,i;for(h=0,i=e.length;i>h;++h)r[s++]=e[h];u[e[0]]++,v[e[3]]++,t=a.length+b-1,n=null}var d,e,f,g,i,j,k,n,p,q={},r=o?new Uint16Array(2*b.length):[],s=0,t=0,u=new(o?Uint32Array:Array)(286),v=new(o?Uint32Array:Array)(30),w=a.f;if(!o){for(f=0;285>=f;)u[f++]=0;for(f=0;29>=f;)v[f++]=0}for(u[256]=1,d=0,e=b.length;e>d;++d){for(f=i=0,g=3;g>f&&d+f!==e;++f)i=i<<8|b[d+f];if(q[i]===l&&(q[i]=[]),j=q[i],!(0<t--)){for(;0<j.length&&32768<d-j[0];)j.shift();if(d+3>=e){for(n&&c(n,-1),f=0,g=e-d;g>f;++f)p=b[d+f],r[s++]=p,++u[p];break}0<j.length?(k=h(b,d,j),n?n.length<k.length?(p=b[d-1],r[s++]=p,++u[p],c(k,0)):c(n,-1):k.length<w?n=k:c(k,0)):n?c(n,-1):(p=b[d],r[s++]=p,++u[p])}j.push(d)}return r[s++]=256,u[256]++,a.j=u,a.i=v,o?r.subarray(0,s):r}function h(a,b,c){var d,e,g,h,i,j,k=0,l=a.length;h=0,j=c.length;a:for(;j>h;h++){if(d=c[j-h-1],g=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;g=k}for(;258>g&&l>b+g&&a[d+g]===a[b+g];)++g;if(g>k&&(e=d,k=g),258===g)break}return new f(k,b-e)}function i(a,b){var c,e,f,g,h,i=a.length,k=new d(572),l=new(o?Uint8Array:Array)(i);if(!o)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0<a[g]&&k.push(g,a[g]);if(c=Array(k.length/2),e=new(o?Uint32Array:Array)(k.length/2),1===c.length)return l[k.pop().index]=1,l;for(g=0,h=k.length/2;h>g;++g)c[g]=k.pop(),e[g]=c[g].value;for(f=j(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function j(a,b,c){function d(a){var c=n[a][p[a]];c===b?(d(a+1),d(a+1)):--l[c],++p[a]}var e,f,g,h,i,j=new(o?Uint16Array:Array)(c),k=new(o?Uint8Array:Array)(c),l=new(o?Uint8Array:Array)(b),m=Array(c),n=Array(c),p=Array(c),q=(1<<c)-b,r=1<<c-1;for(j[c-1]=b,f=0;c>f;++f)r>q?k[f]=0:(k[f]=1,q-=r),q<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;g<j[c-1];++g)m[c-1][g]=a[g],n[c-1][g]=g;for(e=0;c>e;++e)p[e]=0;for(1===k[c-1]&&(--l[0],++p[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=p[f+1],g=0;g<j[f];g++)h=m[f+1][i]+m[f+1][i+1],h>a[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);p[f]=0,1===k[f]&&d(f)}return l}function k(a){var b,c,d,e,f=new(o?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}var l=void 0,m=!0,n=this,o="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;b.prototype.a=function(a,b,d){var e,f=this.buffer,g=this.index,h=this.d,i=f[g];if(d&&b>1&&(a=b>8?(u[255&a]<<24|u[a>>>8&255]<<16|u[a>>>16&255]<<8|u[a>>>24&255])>>32-b:u[a]>>8-b),8>b+h)i=i<<b|a,h+=b;else for(e=0;b>e;++e)i=i<<1|a>>b-e-1&1,8===++h&&(h=0,f[g++]=u[i],i=0,g===f.length&&(f=c(this)));f[g]=i,this.buffer=f,this.d=h,this.index=g},b.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0<this.d&&(b[c]<<=8-this.d,b[c]=u[b[c]],c++),o?a=b.subarray(0,c):(b.length=c,a=b),a};var p,q=new(o?Uint8Array:Array)(256);for(p=0;256>p;++p){for(var r=p,s=r,t=7,r=r>>>1;r;r>>>=1)s<<=1,s|=1&r,--t;q[p]=(s<<t&255)>>>0}var u=q;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2<this.length&&f[d+2]>f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var v,w=2,x=[];for(v=0;288>v;v++)switch(m){case 143>=v:x.push([v+48,8]);break;case 255>=v:x.push([v-144+400,9]);break;case 279>=v:x.push([v-256+0,7]);break;case 287>=v:x.push([v-280+192,8]);break;default:throw"invalid literal: "+v}e.prototype.h=function(){var a,c,d,e,f=this.input;switch(this.e){case 0:for(d=0,e=f.length;e>d;){c=o?f.subarray(d,d+65535):f.slice(d,d+65535),d+=c.length;var h=c,j=d===e,n=l,p=l,q=l,r=l,s=l,t=this.b,u=this.c;if(o){for(t=new Uint8Array(this.b.buffer);t.length<=u+h.length+5;)t=new Uint8Array(t.length<<1);t.set(this.b)}if(n=j?1:0,t[u++]=0|n,p=h.length,q=~p+65536&65535,t[u++]=255&p,t[u++]=p>>>8&255,t[u++]=255&q,t[u++]=q>>>8&255,o)t.set(h,u),u+=h.length,t=t.subarray(0,u);else{for(r=0,s=h.length;s>r;++r)t[u++]=h[r];t.length=u}this.c=u,this.b=t}break;case 1:var v=new b(o?new Uint8Array(this.b.buffer):this.b,this.c);v.a(1,1,m),v.a(1,2,m);var y,z,A,B=g(this,f);for(y=0,z=B.length;z>y;y++)if(A=B[y],b.prototype.a.apply(v,x[A]),A>256)v.a(B[++y],B[++y],m),v.a(B[++y],5),v.a(B[++y],B[++y],m);else if(256===A)break;this.b=v.finish(),this.c=this.b.length;break;case w:var C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R=new b(o?new Uint8Array(this.b.buffer):this.b,this.c),S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],T=Array(19);for(C=w,R.a(1,1,m),R.a(C,2,m),D=g(this,f),H=i(this.j,15),I=k(H),J=i(this.i,7),K=k(J),E=286;E>257&&0===H[E-1];E--);for(F=30;F>1&&0===J[F-1];F--);var U,V,W,X,Y,Z,$=E,_=F,aa=new(o?Uint32Array:Array)($+_),ba=new(o?Uint32Array:Array)(316),ca=new(o?Uint8Array:Array)(19);for(U=V=0;$>U;U++)aa[V++]=H[U];for(U=0;_>U;U++)aa[V++]=J[U];if(!o)for(U=0,X=ca.length;X>U;++U)ca[U]=0;for(U=Y=0,X=aa.length;X>U;U+=V){for(V=1;X>U+V&&aa[U+V]===aa[U];++V);if(W=V,0===aa[U])if(3>W)for(;0<W--;)ba[Y++]=0,ca[0]++;else for(;W>0;)Z=138>W?W:138,Z>W-3&&W>Z&&(Z=W-3),10>=Z?(ba[Y++]=17,ba[Y++]=Z-3,ca[17]++):(ba[Y++]=18,ba[Y++]=Z-11,ca[18]++),W-=Z;else if(ba[Y++]=aa[U],ca[aa[U]]++,W--,3>W)for(;0<W--;)ba[Y++]=aa[U],ca[aa[U]]++;else for(;W>0;)Z=6>W?W:6,Z>W-3&&W>Z&&(Z=W-3),ba[Y++]=16,ba[Y++]=Z-3,ca[16]++,W-=Z}for(a=o?ba.subarray(0,Y):ba.slice(0,Y),L=i(ca,7),P=0;19>P;P++)T[P]=L[S[P]];for(G=19;G>4&&0===T[G-1];G--);for(M=k(L),R.a(E-257,5,m),R.a(F-1,5,m),R.a(G-4,4,m),P=0;G>P;P++)R.a(T[P],3,m);for(P=0,Q=a.length;Q>P;P++)if(N=a[P],R.a(M[N],L[N],m),N>=16){switch(P++,N){case 16:O=2;break;case 17:O=3;break;case 18:O=7;break;default:throw"invalid code: "+N}R.a(a[P],O,m)}var da,ea,fa,ga,ha,ia,ja,ka,la=[I,H],ma=[K,J];for(ha=la[0],ia=la[1],ja=ma[0],ka=ma[1],da=0,ea=D.length;ea>da;++da)if(fa=D[da],R.a(ha[fa],ia[fa],m),fa>256)R.a(D[++da],D[++da],m),ga=D[++da],R.a(ja[ga],ka[ga],m),R.a(D[++da],D[++da],m);else if(256===fa)break;this.b=R.finish(),this.c=this.b.length;break;default:throw"invalid compression type"}return this.b};var y=function(){function a(a){switch(m){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a}}var b,c,d=[];for(b=3;258>=b;b++)c=a(b),d[b]=c[2]<<24|c[1]<<16|c[0];return d}(),z=o?new Uint32Array(y):y;a("Zlib.RawDeflate",e),a("Zlib.RawDeflate.prototype.compress",e.prototype.h);var A,B,C,D,E={NONE:0,FIXED:1,DYNAMIC:w};if(Object.keys)A=Object.keys(E);else for(B in A=[],C=0,E)A[C++]=B;for(C=0,D=A.length;D>C;++C)B=A[C],a("Zlib.RawDeflate.CompressionType."+B,E[B])}).call(this)},{}],14:[function(a,b,c){(function(){"use strict";function a(a,b){var c=a.split("."),d=g;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a){var b,c,d,e,f,g,i,j,k,l,m=a.length,n=0,o=Number.POSITIVE_INFINITY;for(j=0;m>j;++j)a[j]>n&&(n=a[j]),a[j]<o&&(o=a[j]);for(b=1<<n,c=new(h?Uint32Array:Array)(b),d=1,e=0,f=2;n>=d;){for(j=0;m>j;++j)if(a[j]===d){for(g=0,i=e,k=0;d>k;++k)g=g<<1|1&i,i>>=1;for(l=d<<16|j,k=g;b>k;k+=f)c[k]=l;++e}++d,e<<=1,f<<=1}return[c,n,o]}function c(a,b){switch(this.g=[],this.h=32768,this.c=this.f=this.d=this.k=0,this.input=h?new Uint8Array(a):a,this.l=!1,this.i=j,this.q=!1,(b||!(b={}))&&(b.index&&(this.d=b.index),b.bufferSize&&(this.h=b.bufferSize),b.bufferType&&(this.i=b.bufferType),b.resize&&(this.q=b.resize)),this.i){case i:this.a=32768,this.b=new(h?Uint8Array:Array)(32768+this.h+258);break;case j:this.a=0,this.b=new(h?Uint8Array:Array)(this.h),this.e=this.v,this.m=this.s,this.j=this.t;break;default:throw Error("invalid inflate mode")}}function d(a,b){for(var c,d=a.f,e=a.c,f=a.input,g=a.d,h=f.length;b>e;){if(g>=h)throw Error("input buffer is broken");d|=f[g++]<<e,e+=8}return c=d&(1<<b)-1,a.f=d>>>b,a.c=e-b,a.d=g,c}function e(a,b){for(var c,d,e=a.f,f=a.c,g=a.input,h=a.d,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<<f,f+=8;return c=j[e&(1<<k)-1],d=c>>>16,a.f=e>>d,a.c=f-d,a.d=h,65535&c}function f(a){function c(a,b,c){var f,g,h,i=this.p;for(h=0;a>h;)switch(f=e(this,b)){case 16:for(g=3+d(this,2);g--;)c[h++]=i;break;case 17:for(g=3+d(this,3);g--;)c[h++]=0;i=0;break;case 18:for(g=11+d(this,7);g--;)c[h++]=0;i=0;break;default:i=c[h++]=f}return this.p=i,c}var f,g,i,j,k=d(a,5)+257,l=d(a,5)+1,m=d(a,4)+4,o=new(h?Uint8Array:Array)(n.length);for(j=0;m>j;++j)o[n[j]]=d(a,3);if(!h)for(j=m,m=o.length;m>j;++j)o[n[j]]=0;f=b(o),g=new(h?Uint8Array:Array)(k),i=new(h?Uint8Array:Array)(l),a.p=0,a.j(b(c.call(a,k,f,g)),b(c.call(a,l,f,i)))}var g=this,h="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView,i=0,j=1;c.prototype.u=function(){for(;!this.l;){var a=d(this,3);switch(1&a&&(this.l=!0),a>>>=1){case 0:var b=this.input,c=this.d,e=this.b,g=this.a,k=b.length,l=void 0,m=void 0,n=e.length,o=void 0;if(this.c=this.f=0,c+1>=k)throw Error("invalid uncompressed block header: LEN");if(l=b[c++]|b[c++]<<8,c+1>=k)throw Error("invalid uncompressed block header: NLEN");if(m=b[c++]|b[c++]<<8,l===~m)throw Error("invalid uncompressed block header: length verify");if(c+l>b.length)throw Error("input buffer is broken");switch(this.i){case i:for(;g+l>e.length;){if(o=n-g,l-=o,h)e.set(b.subarray(c,c+o),g),g+=o,c+=o;else for(;o--;)e[g++]=b[c++];this.a=g,e=this.e(),g=this.a}break;case j:for(;g+l>e.length;)e=this.e({o:2});break;default:throw Error("invalid inflate mode")}if(h)e.set(b.subarray(c,c+l),g),g+=l,c+=l;else for(;l--;)e[g++]=b[c++];this.d=c,this.a=g,this.b=e;break;case 1:this.j(z,B);break;case 2:f(this);break;default:throw Error("unknown BTYPE: "+a)}}return this.m()};var k,l,m=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=h?new Uint16Array(m):m,o=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],p=h?new Uint16Array(o):o,q=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],r=h?new Uint8Array(q):q,s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t=h?new Uint16Array(s):s,u=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],v=h?new Uint8Array(u):u,w=new(h?Uint8Array:Array)(288);for(k=0,l=w.length;l>k;++k)w[k]=143>=k?8:255>=k?9:279>=k?7:8;var x,y,z=b(w),A=new(h?Uint8Array:Array)(30);for(x=0,y=A.length;y>x;++x)A[x]=5;var B=b(A);c.prototype.j=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length-258;256!==(g=e(this,a));)if(256>g)f>=k&&(this.a=f,c=this.e(),f=this.a),c[f++]=g;else for(h=g-257,j=p[h],0<r[h]&&(j+=d(this,r[h])),g=e(this,b),i=t[g],0<v[g]&&(i+=d(this,v[g])),f>=k&&(this.a=f,c=this.e(),f=this.a);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.t=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length;256!==(g=e(this,a));)if(256>g)f>=k&&(c=this.e(),k=c.length),c[f++]=g;else for(h=g-257,j=p[h],0<r[h]&&(j+=d(this,r[h])),g=e(this,b),i=t[g],0<v[g]&&(i+=d(this,v[g])),f+j>k&&(c=this.e(),k=c.length);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.e=function(){var a,b,c=new(h?Uint8Array:Array)(this.a-32768),d=this.a-32768,e=this.b;if(h)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.g.push(c),this.k+=c.length,h)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.a=32768,e},c.prototype.v=function(a){var b,c,d,e,f=this.input.length/this.d+1|0,g=this.input,i=this.b;return a&&("number"==typeof a.o&&(f=a.o),"number"==typeof a.r&&(f+=a.r)),2>f?(c=(g.length-this.d)/this.n[2],e=258*(c/2)|0,d=e<i.length?i.length+e:i.length<<1):d=i.length*f,h?(b=new Uint8Array(d),b.set(i)):b=i,this.b=b},c.prototype.m=function(){var a,b,c,d,e,f=0,g=this.b,i=this.g,j=new(h?Uint8Array:Array)(this.k+(this.a-32768));if(0===i.length)return h?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);for(b=0,c=i.length;c>b;++b)for(a=i[b],d=0,e=a.length;e>d;++d)j[f++]=a[d];for(b=32768,c=this.a;c>b;++b)j[f++]=g[b];return this.g=[],this.buffer=j},c.prototype.s=function(){var a,b=this.a;return h?this.q?(a=new Uint8Array(b),a.set(this.b.subarray(0,b))):a=this.b.subarray(0,b):(this.b.length>b&&(this.b.length=b),a=this.b),this.buffer=a},a("Zlib.RawInflate",c),a("Zlib.RawInflate.prototype.decompress",c.prototype.u);var C,D,E,F,G={ADAPTIVE:j,BLOCK:i};if(Object.keys)C=Object.keys(G);else for(D in C=[],E=0,G)C[E++]=D;for(E=0,F=C.length;F>E;++E)D=C[E],a("Zlib.RawInflate.BufferType."+D,G[D])}).call(this)},{}],15:[function(a,b,c){(function(){"use strict";function a(a){throw a}function b(a,b){var c=a.split("."),d=w;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===u?d=d[e]?d[e]:d[e]={}:d[e]=b}function c(b,c){this.index="number"==typeof c?c:0,this.i=0,this.buffer=b instanceof(x?Uint8Array:Array)?b:new(x?Uint8Array:Array)(32768),2*this.buffer.length<=this.index&&a(Error("invalid index")),this.buffer.length<=this.index&&this.f()}function d(a){this.buffer=new(x?Uint16Array:Array)(2*a),this.length=0}function e(a){var b,c,d,e,f,g,h,i,j,k,l=a.length,m=0,n=Number.POSITIVE_INFINITY;for(i=0;l>i;++i)a[i]>m&&(m=a[i]),a[i]<n&&(n=a[i]);for(b=1<<m,c=new(x?Uint32Array:Array)(b),d=1,e=0,f=2;m>=d;){for(i=0;l>i;++i)if(a[i]===d){for(g=0,h=e,j=0;d>j;++j)g=g<<1|1&h,h>>=1;for(k=d<<16|i,j=g;b>j;j+=f)c[j]=k;++e}++d,e<<=1,f<<=1}return[c,m,n]}function f(a,b){this.h=F,this.w=0,this.input=x&&a instanceof Array?new Uint8Array(a):a,this.b=0,b&&(b.lazy&&(this.w=b.lazy),"number"==typeof b.compressionType&&(this.h=b.compressionType),b.outputBuffer&&(this.a=x&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.b=b.outputIndex)),this.a||(this.a=new(x?Uint8Array:Array)(32768))}function g(a,b){this.length=a,this.H=b}function h(b,c){function d(b,c){var d,e=b.H,f=[],g=0;d=J[b.length],f[g++]=65535&d,f[g++]=d>>16&255,f[g++]=d>>24;var h;switch(v){case 1===e:h=[0,e-1,0];break;case 2===e:h=[1,e-2,0];break;case 3===e:h=[2,e-3,0];break;case 4===e:h=[3,e-4,0];break;case 6>=e:h=[4,e-5,1];break;case 8>=e:h=[5,e-7,1];break;case 12>=e:h=[6,e-9,2];break;case 16>=e:h=[7,e-13,2];break;case 24>=e:h=[8,e-17,3];break;case 32>=e:h=[9,e-25,3];break;case 48>=e:h=[10,e-33,4];break;case 64>=e:h=[11,e-49,4];break;case 96>=e:h=[12,e-65,5];break;case 128>=e:h=[13,e-97,5];break;case 192>=e:h=[14,e-129,6];break;case 256>=e:h=[15,e-193,6];break;case 384>=e:h=[16,e-257,7];break;case 512>=e:h=[17,e-385,7];break;case 768>=e:h=[18,e-513,8];break;case 1024>=e:h=[19,e-769,8];break;case 1536>=e:h=[20,e-1025,9];break;case 2048>=e:h=[21,e-1537,9];break;case 3072>=e:h=[22,e-2049,10];break;case 4096>=e:h=[23,e-3073,10];break;case 6144>=e:h=[24,e-4097,11];break;case 8192>=e:h=[25,e-6145,11];break;case 12288>=e:h=[26,e-8193,12];break;case 16384>=e:h=[27,e-12289,12];break;case 24576>=e:h=[28,e-16385,13];break;case 32768>=e:h=[29,e-24577,13];break;default:a("invalid distance")}d=h,f[g++]=d[0],f[g++]=d[1],f[g++]=d[2];var i,j;for(i=0,j=f.length;j>i;++i)p[q++]=f[i];s[f[0]]++,t[f[3]]++,r=b.length+c-1,m=null}var e,f,g,h,j,k,l,m,n,o={},p=x?new Uint16Array(2*c.length):[],q=0,r=0,s=new(x?Uint32Array:Array)(286),t=new(x?Uint32Array:Array)(30),w=b.w;if(!x){for(g=0;285>=g;)s[g++]=0;for(g=0;29>=g;)t[g++]=0}for(s[256]=1,e=0,f=c.length;f>e;++e){for(g=j=0,h=3;h>g&&e+g!==f;++g)j=j<<8|c[e+g];if(o[j]===u&&(o[j]=[]),k=o[j],!(0<r--)){for(;0<k.length&&32768<e-k[0];)k.shift();if(e+3>=f){for(m&&d(m,-1),g=0,h=f-e;h>g;++g)n=c[e+g],p[q++]=n,++s[n];break}0<k.length?(l=i(c,e,k),m?m.length<l.length?(n=c[e-1],p[q++]=n,++s[n],d(l,0)):d(m,-1):l.length<w?m=l:d(l,0)):m?d(m,-1):(n=c[e],p[q++]=n,++s[n])}k.push(e)}return p[q++]=256,s[256]++,b.M=s,b.L=t,x?p.subarray(0,q):p}function i(a,b,c){var d,e,f,h,i,j,k=0,l=a.length;h=0,j=c.length;a:for(;j>h;h++){if(d=c[j-h-1],f=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;f=k}for(;258>f&&l>b+f&&a[d+f]===a[b+f];)++f;if(f>k&&(e=d,k=f),258===f)break}return new g(k,b-e)}function j(a,b){var c,e,f,g,h,i=a.length,j=new d(572),l=new(x?Uint8Array:Array)(i);if(!x)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0<a[g]&&j.push(g,a[g]);if(c=Array(j.length/2),e=new(x?Uint32Array:Array)(j.length/2),1===c.length)return l[j.pop().index]=1,l;for(g=0,h=j.length/2;h>g;++g)c[g]=j.pop(),e[g]=c[g].value;for(f=k(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function k(a,b,c){function d(a){var c=n[a][o[a]];c===b?(d(a+1),d(a+1)):--l[c],++o[a]}var e,f,g,h,i,j=new(x?Uint16Array:Array)(c),k=new(x?Uint8Array:Array)(c),l=new(x?Uint8Array:Array)(b),m=Array(c),n=Array(c),o=Array(c),p=(1<<c)-b,q=1<<c-1;for(j[c-1]=b,f=0;c>f;++f)q>p?k[f]=0:(k[f]=1,p-=q),p<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;g<j[c-1];++g)m[c-1][g]=a[g],n[c-1][g]=g;for(e=0;c>e;++e)o[e]=0;for(1===k[c-1]&&(--l[0],++o[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=o[f+1],g=0;g<j[f];g++)h=m[f+1][i]+m[f+1][i+1],h>a[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);o[f]=0,1===k[f]&&d(f)}return l}function l(a){var b,c,d,e,f=new(x?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}function m(b,c){switch(this.l=[],this.m=32768,this.e=this.g=this.c=this.q=0,this.input=x?new Uint8Array(b):b,this.s=!1,this.n=L,this.C=!1,(c||!(c={}))&&(c.index&&(this.c=c.index),c.bufferSize&&(this.m=c.bufferSize),c.bufferType&&(this.n=c.bufferType),c.resize&&(this.C=c.resize)),this.n){case K:this.b=32768,this.a=new(x?Uint8Array:Array)(32768+this.m+258);break;case L:this.b=0,this.a=new(x?Uint8Array:Array)(this.m),this.f=this.K,this.t=this.I,this.o=this.J;break;default:a(Error("invalid inflate mode"))}}function n(b,c){for(var d,e=b.g,f=b.e,g=b.input,h=b.c,i=g.length;c>f;)h>=i&&a(Error("input buffer is broken")),e|=g[h++]<<f,f+=8;return d=e&(1<<c)-1,b.g=e>>>c,b.e=f-c,b.c=h,d}function o(a,b){for(var c,d,e=a.g,f=a.e,g=a.input,h=a.c,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<<f,f+=8;return c=j[e&(1<<k)-1],d=c>>>16,a.g=e>>d,a.e=f-d,a.c=h,65535&c}function p(a){function b(a,b,c){var d,e,f,g=this.z;for(f=0;a>f;)switch(d=o(this,b)){case 16:for(e=3+n(this,2);e--;)c[f++]=g;break;case 17:for(e=3+n(this,3);e--;)c[f++]=0;g=0;break;case 18:for(e=11+n(this,7);e--;)c[f++]=0;g=0;break;default:g=c[f++]=d}return this.z=g,c}var c,d,f,g,h=n(a,5)+257,i=n(a,5)+1,j=n(a,4)+4,k=new(x?Uint8Array:Array)(Q.length);for(g=0;j>g;++g)k[Q[g]]=n(a,3);if(!x)for(g=j,j=k.length;j>g;++g)k[Q[g]]=0;c=e(k),d=new(x?Uint8Array:Array)(h),f=new(x?Uint8Array:Array)(i),a.z=0,a.o(e(b.call(a,h,c,d)),e(b.call(a,i,c,f)))}function q(a){if("string"==typeof a){var b,c,d=a.split("");for(b=0,c=d.length;c>b;b++)d[b]=(255&d[b].charCodeAt(0))>>>0;a=d}for(var e,f=1,g=0,h=a.length,i=0;h>0;){e=h>1024?1024:h,h-=e;do f+=a[i++],g+=f;while(--e);f%=65521,g%=65521}return(g<<16|f)>>>0}function r(b,c){var d,e;switch(this.input=b,this.c=0,(c||!(c={}))&&(c.index&&(this.c=c.index),c.verify&&(this.N=c.verify)),d=b[this.c++],e=b[this.c++],15&d){case da:this.method=da;break;default:a(Error("unsupported compression method"))}0!==((d<<8)+e)%31&&a(Error("invalid fcheck flag:"+((d<<8)+e)%31)),
+32&e&&a(Error("fdict flag is not supported")),this.B=new m(b,{index:this.c,bufferSize:c.bufferSize,bufferType:c.bufferType,resize:c.resize})}function s(a,b){this.input=a,this.a=new(x?Uint8Array:Array)(32768),this.h=ea.k;var c,d={};!b&&(b={})||"number"!=typeof b.compressionType||(this.h=b.compressionType);for(c in b)d[c]=b[c];d.outputBuffer=this.a,this.A=new f(this.input,d)}function t(a,c){var d,e,f,g;if(Object.keys)d=Object.keys(c);else for(e in d=[],f=0,c)d[f++]=e;for(f=0,g=d.length;g>f;++f)e=d[f],b(a+"."+e,c[e])}var u=void 0,v=!0,w=this,x="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;c.prototype.f=function(){var a,b=this.buffer,c=b.length,d=new(x?Uint8Array:Array)(c<<1);if(x)d.set(b);else for(a=0;c>a;++a)d[a]=b[a];return this.buffer=d},c.prototype.d=function(a,b,c){var d,e=this.buffer,f=this.index,g=this.i,h=e[f];if(c&&b>1&&(a=b>8?(D[255&a]<<24|D[a>>>8&255]<<16|D[a>>>16&255]<<8|D[a>>>24&255])>>32-b:D[a]>>8-b),8>b+g)h=h<<b|a,g+=b;else for(d=0;b>d;++d)h=h<<1|a>>b-d-1&1,8===++g&&(g=0,e[f++]=D[h],h=0,f===e.length&&(e=this.f()));e[f]=h,this.buffer=e,this.i=g,this.index=f},c.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0<this.i&&(b[c]<<=8-this.i,b[c]=D[b[c]],c++),x?a=b.subarray(0,c):(b.length=c,a=b),a};var y,z=new(x?Uint8Array:Array)(256);for(y=0;256>y;++y){for(var A=y,B=A,C=7,A=A>>>1;A;A>>>=1)B<<=1,B|=1&A,--C;z[y]=(B<<C&255)>>>0}var D=z;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2<this.length&&f[d+2]>f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var E,F=2,G={NONE:0,r:1,k:F,O:3},H=[];for(E=0;288>E;E++)switch(v){case 143>=E:H.push([E+48,8]);break;case 255>=E:H.push([E-144+400,9]);break;case 279>=E:H.push([E-256+0,7]);break;case 287>=E:H.push([E-280+192,8]);break;default:a("invalid literal: "+E)}f.prototype.j=function(){var b,d,e,f,g=this.input;switch(this.h){case 0:for(e=0,f=g.length;f>e;){d=x?g.subarray(e,e+65535):g.slice(e,e+65535),e+=d.length;var i=d,k=e===f,m=u,n=u,o=u,p=u,q=u,r=this.a,s=this.b;if(x){for(r=new Uint8Array(this.a.buffer);r.length<=s+i.length+5;)r=new Uint8Array(r.length<<1);r.set(this.a)}if(m=k?1:0,r[s++]=0|m,n=i.length,o=~n+65536&65535,r[s++]=255&n,r[s++]=n>>>8&255,r[s++]=255&o,r[s++]=o>>>8&255,x)r.set(i,s),s+=i.length,r=r.subarray(0,s);else{for(p=0,q=i.length;q>p;++p)r[s++]=i[p];r.length=s}this.b=s,this.a=r}break;case 1:var t=new c(x?new Uint8Array(this.a.buffer):this.a,this.b);t.d(1,1,v),t.d(1,2,v);var w,y,z,A=h(this,g);for(w=0,y=A.length;y>w;w++)if(z=A[w],c.prototype.d.apply(t,H[z]),z>256)t.d(A[++w],A[++w],v),t.d(A[++w],5),t.d(A[++w],A[++w],v);else if(256===z)break;this.a=t.finish(),this.b=this.a.length;break;case F:var B,C,D,E,G,I,J,K,L,M,N,O,P,Q,R,S=new c(x?new Uint8Array(this.a.buffer):this.a,this.b),T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],U=Array(19);for(B=F,S.d(1,1,v),S.d(B,2,v),C=h(this,g),I=j(this.M,15),J=l(I),K=j(this.L,7),L=l(K),D=286;D>257&&0===I[D-1];D--);for(E=30;E>1&&0===K[E-1];E--);var V,W,X,Y,Z,$,_=D,aa=E,ba=new(x?Uint32Array:Array)(_+aa),ca=new(x?Uint32Array:Array)(316),da=new(x?Uint8Array:Array)(19);for(V=W=0;_>V;V++)ba[W++]=I[V];for(V=0;aa>V;V++)ba[W++]=K[V];if(!x)for(V=0,Y=da.length;Y>V;++V)da[V]=0;for(V=Z=0,Y=ba.length;Y>V;V+=W){for(W=1;Y>V+W&&ba[V+W]===ba[V];++W);if(X=W,0===ba[V])if(3>X)for(;0<X--;)ca[Z++]=0,da[0]++;else for(;X>0;)$=138>X?X:138,$>X-3&&X>$&&($=X-3),10>=$?(ca[Z++]=17,ca[Z++]=$-3,da[17]++):(ca[Z++]=18,ca[Z++]=$-11,da[18]++),X-=$;else if(ca[Z++]=ba[V],da[ba[V]]++,X--,3>X)for(;0<X--;)ca[Z++]=ba[V],da[ba[V]]++;else for(;X>0;)$=6>X?X:6,$>X-3&&X>$&&($=X-3),ca[Z++]=16,ca[Z++]=$-3,da[16]++,X-=$}for(b=x?ca.subarray(0,Z):ca.slice(0,Z),M=j(da,7),Q=0;19>Q;Q++)U[Q]=M[T[Q]];for(G=19;G>4&&0===U[G-1];G--);for(N=l(M),S.d(D-257,5,v),S.d(E-1,5,v),S.d(G-4,4,v),Q=0;G>Q;Q++)S.d(U[Q],3,v);for(Q=0,R=b.length;R>Q;Q++)if(O=b[Q],S.d(N[O],M[O],v),O>=16){switch(Q++,O){case 16:P=2;break;case 17:P=3;break;case 18:P=7;break;default:a("invalid code: "+O)}S.d(b[Q],P,v)}var ea,fa,ga,ha,ia,ja,ka,la,ma=[J,I],na=[L,K];for(ia=ma[0],ja=ma[1],ka=na[0],la=na[1],ea=0,fa=C.length;fa>ea;++ea)if(ga=C[ea],S.d(ia[ga],ja[ga],v),ga>256)S.d(C[++ea],C[++ea],v),ha=C[++ea],S.d(ka[ha],la[ha],v),S.d(C[++ea],C[++ea],v);else if(256===ga)break;this.a=S.finish(),this.b=this.a.length;break;default:a("invalid compression type")}return this.a};var I=function(){function b(b){switch(v){case 3===b:return[257,b-3,0];case 4===b:return[258,b-4,0];case 5===b:return[259,b-5,0];case 6===b:return[260,b-6,0];case 7===b:return[261,b-7,0];case 8===b:return[262,b-8,0];case 9===b:return[263,b-9,0];case 10===b:return[264,b-10,0];case 12>=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272,b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:a("invalid length: "+b)}}var c,d,e=[];for(c=3;258>=c;c++)d=b(c),e[c]=d[2]<<24|d[1]<<16|d[0];return e}(),J=x?new Uint32Array(I):I,K=0,L=1,M={F:K,D:L};m.prototype.p=function(){for(;!this.s;){var b=n(this,3);switch(1&b&&(this.s=v),b>>>=1){case 0:var c=this.input,d=this.c,e=this.a,f=this.b,g=c.length,h=u,i=u,j=e.length,k=u;switch(this.e=this.g=0,d+1>=g&&a(Error("invalid uncompressed block header: LEN")),h=c[d++]|c[d++]<<8,d+1>=g&&a(Error("invalid uncompressed block header: NLEN")),i=c[d++]|c[d++]<<8,h===~i&&a(Error("invalid uncompressed block header: length verify")),d+h>c.length&&a(Error("input buffer is broken")),this.n){case K:for(;f+h>e.length;){if(k=j-f,h-=k,x)e.set(c.subarray(d,d+k),f),f+=k,d+=k;else for(;k--;)e[f++]=c[d++];this.b=f,e=this.f(),f=this.b}break;case L:for(;f+h>e.length;)e=this.f({v:2});break;default:a(Error("invalid inflate mode"))}if(x)e.set(c.subarray(d,d+h),f),f+=h,d+=h;else for(;h--;)e[f++]=c[d++];this.c=d,this.b=f,this.a=e;break;case 1:this.o(aa,ca);break;case 2:p(this);break;default:a(Error("unknown BTYPE: "+b))}}return this.t()};var N,O,P=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q=x?new Uint16Array(P):P,R=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],S=x?new Uint16Array(R):R,T=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],U=x?new Uint8Array(T):T,V=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],W=x?new Uint16Array(V):V,X=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Y=x?new Uint8Array(X):X,Z=new(x?Uint8Array:Array)(288);for(N=0,O=Z.length;O>N;++N)Z[N]=143>=N?8:255>=N?9:279>=N?7:8;var $,_,aa=e(Z),ba=new(x?Uint8Array:Array)(30);for($=0,_=ba.length;_>$;++$)ba[$]=5;var ca=e(ba);m.prototype.o=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length-258;256!==(e=o(this,a));)if(256>e)d>=i&&(this.b=d,c=this.f(),d=this.b),c[d++]=e;else for(f=e-257,h=S[f],0<U[f]&&(h+=n(this,U[f])),e=o(this,b),g=W[e],0<Y[e]&&(g+=n(this,Y[e])),d>=i&&(this.b=d,c=this.f(),d=this.b);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.J=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length;256!==(e=o(this,a));)if(256>e)d>=i&&(c=this.f(),i=c.length),c[d++]=e;else for(f=e-257,h=S[f],0<U[f]&&(h+=n(this,U[f])),e=o(this,b),g=W[e],0<Y[e]&&(g+=n(this,Y[e])),d+h>i&&(c=this.f(),i=c.length);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.f=function(){var a,b,c=new(x?Uint8Array:Array)(this.b-32768),d=this.b-32768,e=this.a;if(x)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.l.push(c),this.q+=c.length,x)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.b=32768,e},m.prototype.K=function(a){var b,c,d,e,f=this.input.length/this.c+1|0,g=this.input,h=this.a;return a&&("number"==typeof a.v&&(f=a.v),"number"==typeof a.G&&(f+=a.G)),2>f?(c=(g.length-this.c)/this.u[2],e=258*(c/2)|0,d=e<h.length?h.length+e:h.length<<1):d=h.length*f,x?(b=new Uint8Array(d),b.set(h)):b=h,this.a=b},m.prototype.t=function(){var a,b,c,d,e,f=0,g=this.a,h=this.l,i=new(x?Uint8Array:Array)(this.q+(this.b-32768));if(0===h.length)return x?this.a.subarray(32768,this.b):this.a.slice(32768,this.b);for(b=0,c=h.length;c>b;++b)for(a=h[b],d=0,e=a.length;e>d;++d)i[f++]=a[d];for(b=32768,c=this.b;c>b;++b)i[f++]=g[b];return this.l=[],this.buffer=i},m.prototype.I=function(){var a,b=this.b;return x?this.C?(a=new Uint8Array(b),a.set(this.a.subarray(0,b))):a=this.a.subarray(0,b):(this.a.length>b&&(this.a.length=b),a=this.a),this.buffer=a},r.prototype.p=function(){var b,c,d=this.input;return b=this.B.p(),this.c=this.B.c,this.N&&(c=(d[this.c++]<<24|d[this.c++]<<16|d[this.c++]<<8|d[this.c++])>>>0,c!==q(b)&&a(Error("invalid adler-32 checksum"))),b};var da=8,ea=G;s.prototype.j=function(){var b,c,d,e,f,g,h,i=0;switch(h=this.a,b=da){case da:c=Math.LOG2E*Math.log(32768)-8;break;default:a(Error("invalid compression method"))}switch(d=c<<4|b,h[i++]=d,b){case da:switch(this.h){case ea.NONE:f=0;break;case ea.r:f=1;break;case ea.k:f=2;break;default:a(Error("unsupported compression type"))}break;default:a(Error("invalid compression method"))}return e=f<<6|0,h[i++]=e|31-(256*d+e)%31,g=q(this.input),this.A.b=i,h=this.A.j(),i=h.length,x&&(h=new Uint8Array(h.buffer),h.length<=i+4&&(this.a=new Uint8Array(h.length+4),this.a.set(h),h=this.a),h=h.subarray(0,i+4)),h[i++]=g>>24&255,h[i++]=g>>16&255,h[i++]=g>>8&255,h[i++]=255&g,h},b("Zlib.Inflate",r),b("Zlib.Inflate.prototype.decompress",r.prototype.p),t("Zlib.Inflate.BufferType",{ADAPTIVE:M.D,BLOCK:M.F}),b("Zlib.Deflate",s),b("Zlib.Deflate.compress",function(a,b){return new s(a,b).j()}),b("Zlib.Deflate.prototype.compress",s.prototype.j),t("Zlib.Deflate.CompressionType",{NONE:ea.NONE,FIXED:ea.r,DYNAMIC:ea.k})}).call(this)},{}],16:[function(a,b,c){var d=a("../enums.js");b.exports={prefer_hash_algorithm:d.hash.sha256,encryption_cipher:d.symmetric.aes256,compression:d.compression.zip,integrity_protect:!0,ignore_mdc_error:!1,rsa_blinding:!0,useWebCrypto:!0,show_version:!0,show_comment:!0,versionstring:"OpenPGP.js v1.6.2",commentstring:"http://openpgpjs.org",keyserver:"https://keyserver.ubuntu.com",node_store:"./openpgp.store",debug:!1}},{"../enums.js":43}],17:[function(a,b,c){b.exports=a("./config.js")},{"./config.js":16}],18:[function(a,b,c){"use strict";var d=a("../util.js"),e=a("./cipher");b.exports={encrypt:function(a,b,c,f,g){b=new e[b](f);var h=b.blockSize,i=new Uint8Array(h),j=new Uint8Array(h);a=a+a.charAt(h-2)+a.charAt(h-1);var k,l,m,n=new Uint8Array(c.length+2+2*h),o=g?0:2;for(k=0;h>k;k++)i[k]=0;for(j=b.encrypt(i),k=0;h>k;k++)n[k]=j[k]^a.charCodeAt(k);for(i.set(n.subarray(0,h)),j=b.encrypt(i),n[h]=j[0]^a.charCodeAt(h),n[h+1]=j[1]^a.charCodeAt(h+1),g?i.set(n.subarray(2,h+2)):i.set(n.subarray(0,h)),j=b.encrypt(i),k=0;h>k;k++)n[h+2+k]=j[k+o]^c.charCodeAt(k);for(l=h;l<c.length+o;l+=h)for(m=l+2-o,i.set(n.subarray(m,m+h)),j=b.encrypt(i),k=0;h>k;k++)n[h+m+k]=j[k]^c.charCodeAt(l+k-o);return n=n.subarray(0,c.length+2+h),d.Uint8Array2str(n)},mdc:function(a,b,c){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g);for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];return i=a.encrypt(i),d.bin2str(h)+String.fromCharCode(i[0]^c.charCodeAt(g))+String.fromCharCode(i[1]^c.charCodeAt(g+1))},decrypt:function(a,b,c,d){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g),j="",k=[];for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];if(i=a.encrypt(i),h[g-2]!=(i[0]^c.charCodeAt(g))||h[g-1]!=(i[1]^c.charCodeAt(g+1)))throw new Error("CFB decrypt: invalid key");if(d){for(f=0;g>f;f++)h[f]=c.charCodeAt(f+2);for(j=g+2;j<c.length;j+=g)for(i=a.encrypt(h),f=0;g>f&&f+j<c.length;f++)h[f]=c.charCodeAt(j+f),k.push(String.fromCharCode(i[f]^h[f]))}else{for(f=0;g>f;f++)h[f]=c.charCodeAt(f);for(j=g;j<c.length;j+=g)for(i=a.encrypt(h),f=0;g>f&&f+j<c.length;f++)h[f]=c.charCodeAt(j+f),k.push(String.fromCharCode(i[f]^h[f]))}return d||k.splice(0,2),k.splice(c.length-g-2),k},normalEncrypt:function(a,b,c,f){a=new e[a](b);var g=a.blockSize,h="",i="",j=0,k="",l="";for(i=f.substring(0,g);c.length>g*j;){var m=a.encrypt(d.str2bin(i));h=c.substring(j*g,j*g+g);for(var n=0;n<h.length;n++)l+=String.fromCharCode(h.charCodeAt(n)^m[n]);i=l,l="",k+=i,j++}return k},normalDecrypt:function(a,b,c,f){a=new e[a](b);var g,h=a.blockSize,i="",j=0,k="",l=0;if(null===f)for(g=0;h>g;g++)i+=String.fromCharCode(0);else i=f.substring(0,h);for(;c.length>h*j;){var m=a.encrypt(d.str2bin(i));for(i=c.substring(j*h+l,j*h+h+l),g=0;g<i.length;g++)k+=String.fromCharCode(i.charCodeAt(g)^m[g]);j++}return k}}},{"../util.js":76,"./cipher":23}],19:[function(a,b,c){"use strict";function d(a){return 255&a}function e(a){return a>>8&255}function f(a){return a>>16&255}function g(a){return a>>24&255}function h(a,b,c,d){return e(p[255&a])|e(p[b>>8&255])<<8|e(p[c>>16&255])<<16|e(p[d>>>24])<<24}function i(a){var b,c,d=a.length,e=new Array(d/4);if(a&&!(d%4)){for(b=0,c=0;d>c;c+=4)e[b++]=a[c]|a[c+1]<<8|a[c+2]<<16|a[c+3]<<24;return e}}function j(a){var b,c=0,h=a.length,i=new Array(4*h);for(b=0;h>b;b++)i[c++]=d(a[b]),i[c++]=e(a[b]),i[c++]=f(a[b]),i[c++]=g(a[b]);return i}function k(a){var b,c,h,i,j,k,l=new Array(u+1),m=a.length,p=new Array(t),q=new Array(t),r=0;if(16==m)k=10,b=4;else if(24==m)k=12,b=6;else{if(32!=m)throw new Error("Invalid key-length for AES key:"+m);k=14,b=8}for(c=0;u+1>c;c++)l[c]=new Uint32Array(4);for(c=0,h=0;m>h;h++,c+=4)p[h]=a.charCodeAt(c)|a.charCodeAt(c+1)<<8|a.charCodeAt(c+2)<<16|a.charCodeAt(c+3)<<24;for(h=b-1;h>=0;h--)q[h]=p[h];for(i=0,j=0,h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}for(;k+1>i;){var s=q[b-1];if(q[0]^=o[e(s)]|o[f(s)]<<8|o[g(s)]<<16|o[d(s)]<<24,q[0]^=n[r++],8!=b)for(h=1;b>h;h++)q[h]^=q[h-1];else{for(h=1;b/2>h;h++)q[h]^=q[h-1];for(s=q[b/2-1],q[b/2]^=o[d(s)]|o[e(s)]<<8|o[f(s)]<<16|o[g(s)]<<24,h=b/2+1;b>h;h++)q[h]^=q[h-1]}for(h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}}return{rounds:k,rk:l}}function l(a,b,c){var d,e,f;for(f=i(a),e=b.rounds,d=0;e-1>d;d++)c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=p[255&c[0]]^q[c[1]>>8&255]^r[c[2]>>16&255]^s[c[3]>>>24],f[1]=p[255&c[1]]^q[c[2]>>8&255]^r[c[3]>>16&255]^s[c[0]>>>24],f[2]=p[255&c[2]]^q[c[3]>>8&255]^r[c[0]>>16&255]^s[c[1]>>>24],f[3]=p[255&c[3]]^q[c[0]>>8&255]^r[c[1]>>16&255]^s[c[2]>>>24];return d=e-1,c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=h(c[0],c[1],c[2],c[3])^b.rk[e][0],f[1]=h(c[1],c[2],c[3],c[0])^b.rk[e][1],f[2]=h(c[2],c[3],c[0],c[1])^b.rk[e][2],f[3]=h(c[3],c[0],c[1],c[2])^b.rk[e][3],j(f)}function m(a){var b=function(a){this.key=k(a),this._temp=new Uint32Array(this.blockSize/4),this.encrypt=function(a){return l(a,this.key,this._temp)}};return b.blockSize=b.prototype.blockSize=16,b.keySize=b.prototype.keySize=a/8,b}var n=(a("../../util.js"),new Uint8Array([1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145])),o=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),p=new Uint32Array([2774754246,2222750968,2574743534,2373680118,234025727,3177933782,2976870366,1422247313,1345335392,50397442,2842126286,2099981142,436141799,1658312629,3870010189,2591454956,1170918031,2642575903,1086966153,2273148410,368769775,3948501426,3376891790,200339707,3970805057,1742001331,4255294047,3937382213,3214711843,4154762323,2524082916,1539358875,3266819957,486407649,2928907069,1780885068,1513502316,1094664062,49805301,1338821763,1546925160,4104496465,887481809,150073849,2473685474,1943591083,1395732834,1058346282,201589768,1388824469,1696801606,1589887901,672667696,2711000631,251987210,3046808111,151455502,907153956,2608889883,1038279391,652995533,1764173646,3451040383,2675275242,453576978,2659418909,1949051992,773462580,756751158,2993581788,3998898868,4221608027,4132590244,1295727478,1641469623,3467883389,2066295122,1055122397,1898917726,2542044179,4115878822,1758581177,0,753790401,1612718144,536673507,3367088505,3982187446,3194645204,1187761037,3653156455,1262041458,3729410708,3561770136,3898103984,1255133061,1808847035,720367557,3853167183,385612781,3309519750,3612167578,1429418854,2491778321,3477423498,284817897,100794884,2172616702,4031795360,1144798328,3131023141,3819481163,4082192802,4272137053,3225436288,2324664069,2912064063,3164445985,1211644016,83228145,3753688163,3249976951,1977277103,1663115586,806359072,452984805,250868733,1842533055,1288555905,336333848,890442534,804056259,3781124030,2727843637,3427026056,957814574,1472513171,4071073621,2189328124,1195195770,2892260552,3881655738,723065138,2507371494,2690670784,2558624025,3511635870,2145180835,1713513028,2116692564,2878378043,2206763019,3393603212,703524551,3552098411,1007948840,2044649127,3797835452,487262998,1994120109,1004593371,1446130276,1312438900,503974420,3679013266,168166924,1814307912,3831258296,1573044895,1859376061,4021070915,2791465668,2828112185,2761266481,937747667,2339994098,854058965,1137232011,1496790894,3077402074,2358086913,1691735473,3528347292,3769215305,3027004632,4199962284,133494003,636152527,2942657994,2390391540,3920539207,403179536,3585784431,2289596656,1864705354,1915629148,605822008,4054230615,3350508659,1371981463,602466507,2094914977,2624877800,555687742,3712699286,3703422305,2257292045,2240449039,2423288032,1111375484,3300242801,2858837708,3628615824,84083462,32962295,302911004,2741068226,1597322602,4183250862,3501832553,2441512471,1489093017,656219450,3114180135,954327513,335083755,3013122091,856756514,3144247762,1893325225,2307821063,2811532339,3063651117,572399164,2458355477,552200649,1238290055,4283782570,2015897680,2061492133,2408352771,4171342169,2156497161,386731290,3669999461,837215959,3326231172,3093850320,3275833730,2962856233,1999449434,286199582,3417354363,4233385128,3602627437,974525996]),q=new Uint32Array([1667483301,2088564868,2004348569,2071721613,4076011277,1802229437,1869602481,3318059348,808476752,16843267,1734856361,724260477,4278118169,3621238114,2880130534,1987505306,3402272581,2189565853,3385428288,2105408135,4210749205,1499050731,1195871945,4042324747,2913812972,3570709351,2728550397,2947499498,2627478463,2762232823,1920132246,3233848155,3082253762,4261273884,2475900334,640044138,909536346,1061125697,4160222466,3435955023,875849820,2779075060,3857043764,4059166984,1903288979,3638078323,825320019,353708607,67373068,3351745874,589514341,3284376926,404238376,2526427041,84216335,2593796021,117902857,303178806,2155879323,3806519101,3958099238,656887401,2998042573,1970662047,151589403,2206408094,741103732,437924910,454768173,1852759218,1515893998,2694863867,1381147894,993752653,3604395873,3014884814,690573947,3823361342,791633521,2223248279,1397991157,3520182632,0,3991781676,538984544,4244431647,2981198280,1532737261,1785386174,3419114822,3200149465,960066123,1246401758,1280088276,1482207464,3486483786,3503340395,4025468202,2863288293,4227591446,1128498885,1296931543,859006549,2240090516,1162185423,4193904912,33686534,2139094657,1347461360,1010595908,2678007226,2829601763,1364304627,2745392638,1077969088,2408514954,2459058093,2644320700,943222856,4126535940,3166462943,3065411521,3671764853,555827811,269492272,4294960410,4092853518,3537026925,3452797260,202119188,320022069,3974939439,1600110305,2543269282,1145342156,387395129,3301217111,2812761586,2122251394,1027439175,1684326572,1566423783,421081643,1936975509,1616953504,2172721560,1330618065,3705447295,572671078,707417214,2425371563,2290617219,1179028682,4008625961,3099093971,336865340,3739133817,1583267042,185275933,3688607094,3772832571,842163286,976909390,168432670,1229558491,101059594,606357612,1549580516,3267534685,3553869166,2896970735,1650640038,2442213800,2509582756,3840201527,2038035083,3890730290,3368586051,926379609,1835915959,2374828428,3587551588,1313774802,2846444e3,1819072692,1448520954,4109693703,3941256997,1701169839,2054878350,2930657257,134746136,3132780501,2021191816,623200879,774790258,471611428,2795919345,3031724999,3334903633,3907570467,3722289532,1953818780,522141217,1263245021,3183305180,2341145990,2324303749,1886445712,1044282434,3048567236,1718013098,1212715224,50529797,4143380225,235805714,1633796771,892693087,1465364217,3115936208,2256934801,3250690392,488454695,2661164985,3789674808,4177062675,2560109491,286335539,1768542907,3654920560,2391672713,2492740519,2610638262,505297954,2273777042,3924412704,3469641545,1431677695,673730680,3755976058,2357986191,2711706104,2307459456,218962455,3216991706,3873888049,1111655622,1751699640,1094812355,2576951728,757946999,252648977,2964356043,1414834428,3149622742,370551866]),r=new Uint32Array([1673962851,2096661628,2012125559,2079755643,4076801522,1809235307,1876865391,3314635973,811618352,16909057,1741597031,727088427,4276558334,3618988759,2874009259,1995217526,3398387146,2183110018,3381215433,2113570685,4209972730,1504897881,1200539975,4042984432,2906778797,3568527316,2724199842,2940594863,2619588508,2756966308,1927583346,3231407040,3077948087,4259388669,2470293139,642542118,913070646,1065238847,4160029431,3431157708,879254580,2773611685,3855693029,4059629809,1910674289,3635114968,828527409,355090197,67636228,3348452039,591815971,3281870531,405809176,2520228246,84545285,2586817946,118360327,304363026,2149292928,3806281186,3956090603,659450151,2994720178,1978310517,152181513,2199756419,743994412,439627290,456535323,1859957358,1521806938,2690382752,1386542674,997608763,3602342358,3011366579,693271337,3822927587,794718511,2215876484,1403450707,3518589137,0,3988860141,541089824,4242743292,2977548465,1538714971,1792327274,3415033547,3194476990,963791673,1251270218,1285084236,1487988824,3481619151,3501943760,4022676207,2857362858,4226619131,1132905795,1301993293,862344499,2232521861,1166724933,4192801017,33818114,2147385727,1352724560,1014514748,2670049951,2823545768,1369633617,2740846243,1082179648,2399505039,2453646738,2636233885,946882616,4126213365,3160661948,3061301686,3668932058,557998881,270544912,4293204735,4093447923,3535760850,3447803085,202904588,321271059,3972214764,1606345055,2536874647,1149815876,388905239,3297990596,2807427751,2130477694,1031423805,1690872932,1572530013,422718233,1944491379,1623236704,2165938305,1335808335,3701702620,574907938,710180394,2419829648,2282455944,1183631942,4006029806,3094074296,338181140,3735517662,1589437022,185998603,3685578459,3772464096,845436466,980700730,169090570,1234361161,101452294,608726052,1555620956,3265224130,3552407251,2890133420,1657054818,2436475025,2503058581,3839047652,2045938553,3889509095,3364570056,929978679,1843050349,2365688973,3585172693,1318900302,2840191145,1826141292,1454176854,4109567988,3939444202,1707781989,2062847610,2923948462,135272456,3127891386,2029029496,625635109,777810478,473441308,2790781350,3027486644,3331805638,3905627112,3718347997,1961401460,524165407,1268178251,3177307325,2332919435,2316273034,1893765232,1048330814,3044132021,1724688998,1217452104,50726147,4143383030,236720654,1640145761,896163637,1471084887,3110719673,2249691526,3248052417,490350365,2653403550,3789109473,4176155640,2553000856,287453969,1775418217,3651760345,2382858638,2486413204,2603464347,507257374,2266337927,3922272489,3464972750,1437269845,676362280,3752164063,2349043596,2707028129,2299101321,219813645,3211123391,3872862694,1115997762,1758509160,1099088705,2569646233,760903469,253628687,2960903088,1420360788,3144537787,371997206]),s=new Uint32Array([3332727651,4169432188,4003034999,4136467323,4279104242,3602738027,3736170351,2438251973,1615867952,33751297,3467208551,1451043627,3877240574,3043153879,1306962859,3969545846,2403715786,530416258,2302724553,4203183485,4011195130,3001768281,2395555655,4211863792,1106029997,3009926356,1610457762,1173008303,599760028,1408738468,3835064946,2606481600,1975695287,3776773629,1034851219,1282024998,1817851446,2118205247,4110612471,2203045068,1750873140,1374987685,3509904869,4178113009,3801313649,2876496088,1649619249,708777237,135005188,2505230279,1181033251,2640233411,807933976,933336726,168756485,800430746,235472647,607523346,463175808,3745374946,3441880043,1315514151,2144187058,3936318837,303761673,496927619,1484008492,875436570,908925723,3702681198,3035519578,1543217312,2767606354,1984772923,3076642518,2110698419,1383803177,3711886307,1584475951,328696964,2801095507,3110654417,0,3240947181,1080041504,3810524412,2043195825,3069008731,3569248874,2370227147,1742323390,1917532473,2497595978,2564049996,2968016984,2236272591,3144405200,3307925487,1340451498,3977706491,2261074755,2597801293,1716859699,294946181,2328839493,3910203897,67502594,4269899647,2700103760,2017737788,632987551,1273211048,2733855057,1576969123,2160083008,92966799,1068339858,566009245,1883781176,4043634165,1675607228,2009183926,2943736538,1113792801,540020752,3843751935,4245615603,3211645650,2169294285,403966988,641012499,3274697964,3202441055,899848087,2295088196,775493399,2472002756,1441965991,4236410494,2051489085,3366741092,3135724893,841685273,3868554099,3231735904,429425025,2664517455,2743065820,1147544098,1417554474,1001099408,193169544,2362066502,3341414126,1809037496,675025940,2809781982,3168951902,371002123,2910247899,3678134496,1683370546,1951283770,337512970,2463844681,201983494,1215046692,3101973596,2673722050,3178157011,1139780780,3299238498,967348625,832869781,3543655652,4069226873,3576883175,2336475336,1851340599,3669454189,25988493,2976175573,2631028302,1239460265,3635702892,2902087254,4077384948,3475368682,3400492389,4102978170,1206496942,270010376,1876277946,4035475576,1248797989,1550986798,941890588,1475454630,1942467764,2538718918,3408128232,2709315037,3902567540,1042358047,2531085131,1641856445,226921355,260409994,3767562352,2084716094,1908716981,3433719398,2430093384,100991747,4144101110,470945294,3265487201,1784624437,2935576407,1775286713,395413126,2572730817,975641885,666476190,3644383713,3943954680,733190296,573772049,3535497577,2842745305,126455438,866620564,766942107,1008868894,361924487,3374377449,2269761230,2868860245,1350051880,2776293343,59739276,1509466529,159418761,437718285,1708834751,3610371814,2227585602,3501746280,2193834305,699439513,1517759789,504434447,2076946608,2835108948,1842789307,742004246]),t=8,u=14;b.exports={};var v=[128,192,256];for(var w in v)b.exports[v[w]]=m(v[w])},{"../../util.js":76}],20:[function(a,b,c){function d(){}function e(a){this.bf=new d,this.bf.init(f.str2bin(a)),this.encrypt=function(a){return this.bf.encrypt_block(a)}}d.prototype.BLOCKSIZE=8,d.prototype.SBOXES=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]],
+d.prototype.PARRAY=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],d.prototype.NN=16,d.prototype._clean=function(a){if(0>a){var b=2147483647&a;a=b+2147483648}return a},d.prototype._F=function(a){var b,c,d,e,f;return e=255&a,a>>>=8,d=255&a,a>>>=8,c=255&a,a>>>=8,b=255&a,f=this.sboxes[0][b]+this.sboxes[1][c],f^=this.sboxes[2][d],f+=this.sboxes[3][e]},d.prototype._encrypt_block=function(a){var b,c=a[0],d=a[1];for(b=0;b<this.NN;++b){c^=this.parray[b],d=this._F(c)^d;var e=c;c=d,d=e}c^=this.parray[this.NN+0],d^=this.parray[this.NN+1],a[0]=this._clean(d),a[1]=this._clean(c)},d.prototype.encrypt_block=function(a){var b,c=[0,0],d=this.BLOCKSIZE/2;for(b=0;b<this.BLOCKSIZE/2;++b)c[0]=c[0]<<8|255&a[b+0],c[1]=c[1]<<8|255&a[b+d];this._encrypt_block(c);var e=[];for(b=0;b<this.BLOCKSIZE/2;++b)e[b+0]=c[0]>>>24-8*b&255,e[b+d]=c[1]>>>24-8*b&255;return e},d.prototype._decrypt_block=function(a){var b,c=a[0],d=a[1];for(b=this.NN+1;b>1;--b){c^=this.parray[b],d=this._F(c)^d;var e=c;c=d,d=e}c^=this.parray[1],d^=this.parray[0],a[0]=this._clean(d),a[1]=this._clean(c)},d.prototype.init=function(a){var b,c=0;for(this.parray=[],b=0;b<this.NN+2;++b){var d,e=0;for(d=0;4>d;++d)e=e<<8|255&a[c],++c>=a.length&&(c=0);this.parray[b]=this.PARRAY[b]^e}for(this.sboxes=[],b=0;4>b;++b)for(this.sboxes[b]=[],c=0;256>c;++c)this.sboxes[b][c]=this.SBOXES[b][c];var f=[0,0];for(b=0;b<this.NN+2;b+=2)this._encrypt_block(f),this.parray[b+0]=f[0],this.parray[b+1]=f[1];for(b=0;4>b;++b)for(c=0;256>c;c+=2)this._encrypt_block(f),this.sboxes[b][c+0]=f[0],this.sboxes[b][c+1]=f[1]};var f=a("../../util.js");b.exports=e,b.exports.keySize=e.prototype.keySize=16,b.exports.blockSize=e.prototype.blockSize=16},{"../../util.js":76}],21:[function(a,b,c){function d(){function a(a,b,c){var d=b+a,e=d<<c|d>>>32-c;return(f[0][e>>>24]^f[1][e>>>16&255])-f[2][e>>>8&255]+f[3][255&e]}function b(a,b,c){var d=b^a,e=d<<c|d>>>32-c;return f[0][e>>>24]-f[1][e>>>16&255]+f[2][e>>>8&255]^f[3][255&e]}function c(a,b,c){var d=b-a,e=d<<c|d>>>32-c;return(f[0][e>>>24]+f[1][e>>>16&255]^f[2][e>>>8&255])-f[3][255&e]}this.BlockSize=8,this.KeySize=16,this.setKey=function(a){if(this.masking=new Array(16),this.rotate=new Array(16),this.reset(),a.length!=this.KeySize)throw new Error("CAST-128: keys must be 16 bytes");return this.keySchedule(a),!0},this.reset=function(){for(var a=0;16>a;a++)this.masking[a]=0,this.rotate[a]=0},this.getBlockSize=function(){return BlockSize},this.encrypt=function(d){for(var e=new Array(d.length),f=0;f<d.length;f+=8){var g,h=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3],i=d[f+4]<<24|d[f+5]<<16|d[f+6]<<8|d[f+7];g=i,i=h^a(i,this.masking[0],this.rotate[0]),h=g,g=i,i=h^b(i,this.masking[1],this.rotate[1]),h=g,g=i,i=h^c(i,this.masking[2],this.rotate[2]),h=g,g=i,i=h^a(i,this.masking[3],this.rotate[3]),h=g,g=i,i=h^b(i,this.masking[4],this.rotate[4]),h=g,g=i,i=h^c(i,this.masking[5],this.rotate[5]),h=g,g=i,i=h^a(i,this.masking[6],this.rotate[6]),h=g,g=i,i=h^b(i,this.masking[7],this.rotate[7]),h=g,g=i,i=h^c(i,this.masking[8],this.rotate[8]),h=g,g=i,i=h^a(i,this.masking[9],this.rotate[9]),h=g,g=i,i=h^b(i,this.masking[10],this.rotate[10]),h=g,g=i,i=h^c(i,this.masking[11],this.rotate[11]),h=g,g=i,i=h^a(i,this.masking[12],this.rotate[12]),h=g,g=i,i=h^b(i,this.masking[13],this.rotate[13]),h=g,g=i,i=h^c(i,this.masking[14],this.rotate[14]),h=g,g=i,i=h^a(i,this.masking[15],this.rotate[15]),h=g,e[f]=i>>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>>16&255,e[f+6]=h>>>8&255,e[f+7]=255&h}return e},this.decrypt=function(d){for(var e=new Array(d.length),f=0;f<d.length;f+=8){var g,h=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3],i=d[f+4]<<24|d[f+5]<<16|d[f+6]<<8|d[f+7];g=i,i=h^a(i,this.masking[15],this.rotate[15]),h=g,g=i,i=h^c(i,this.masking[14],this.rotate[14]),h=g,g=i,i=h^b(i,this.masking[13],this.rotate[13]),h=g,g=i,i=h^a(i,this.masking[12],this.rotate[12]),h=g,g=i,i=h^c(i,this.masking[11],this.rotate[11]),h=g,g=i,i=h^b(i,this.masking[10],this.rotate[10]),h=g,g=i,i=h^a(i,this.masking[9],this.rotate[9]),h=g,g=i,i=h^c(i,this.masking[8],this.rotate[8]),h=g,g=i,i=h^b(i,this.masking[7],this.rotate[7]),h=g,g=i,i=h^a(i,this.masking[6],this.rotate[6]),h=g,g=i,i=h^c(i,this.masking[5],this.rotate[5]),h=g,g=i,i=h^b(i,this.masking[4],this.rotate[4]),h=g,g=i,i=h^a(i,this.masking[3],this.rotate[3]),h=g,g=i,i=h^c(i,this.masking[2],this.rotate[2]),h=g,g=i,i=h^b(i,this.masking[1],this.rotate[1]),h=g,g=i,i=h^a(i,this.masking[0],this.rotate[0]),h=g,e[f]=i>>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>16&255,e[f+6]=h>>8&255,e[f+7]=255&h}return e};var d=new Array(4);d[0]=new Array(4),d[0][0]=new Array(4,0,13,15,12,14,8),d[0][1]=new Array(5,2,16,18,17,19,10),d[0][2]=new Array(6,3,23,22,21,20,9),d[0][3]=new Array(7,1,26,25,27,24,11),d[1]=new Array(4),d[1][0]=new Array(0,6,21,23,20,22,16),d[1][1]=new Array(1,4,0,2,1,3,18),d[1][2]=new Array(2,5,7,6,5,4,17),d[1][3]=new Array(3,7,10,9,11,8,19),d[2]=new Array(4),d[2][0]=new Array(4,0,13,15,12,14,8),d[2][1]=new Array(5,2,16,18,17,19,10),d[2][2]=new Array(6,3,23,22,21,20,9),d[2][3]=new Array(7,1,26,25,27,24,11),d[3]=new Array(4),d[3][0]=new Array(0,6,21,23,20,22,16),d[3][1]=new Array(1,4,0,2,1,3,18),d[3][2]=new Array(2,5,7,6,5,4,17),d[3][3]=new Array(3,7,10,9,11,8,19);var e=new Array(4);e[0]=new Array(4),e[0][0]=new Array(24,25,23,22,18),e[0][1]=new Array(26,27,21,20,22),e[0][2]=new Array(28,29,19,18,25),e[0][3]=new Array(30,31,17,16,28),e[1]=new Array(4),e[1][0]=new Array(3,2,12,13,8),e[1][1]=new Array(1,0,14,15,13),e[1][2]=new Array(7,6,8,9,3),e[1][3]=new Array(5,4,10,11,7),e[2]=new Array(4),e[2][0]=new Array(19,18,28,29,25),e[2][1]=new Array(17,16,30,31,28),e[2][2]=new Array(23,22,24,25,18),e[2][3]=new Array(21,20,26,27,22),e[3]=new Array(4),e[3][0]=new Array(8,9,7,6,3),e[3][1]=new Array(10,11,5,4,7),e[3][2]=new Array(12,13,3,2,8),e[3][3]=new Array(14,15,1,0,13),this.keySchedule=function(a){var b,c,g=new Array(8),h=new Array(32);for(b=0;4>b;b++)c=4*b,g[b]=a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3];for(var i,j=[6,7,4,5],k=0,l=0;2>l;l++)for(var m=0;4>m;m++){for(c=0;4>c;c++){var n=d[m][c];i=g[n[1]],i^=f[4][g[n[2]>>>2]>>>24-8*(3&n[2])&255],i^=f[5][g[n[3]>>>2]>>>24-8*(3&n[3])&255],i^=f[6][g[n[4]>>>2]>>>24-8*(3&n[4])&255],i^=f[7][g[n[5]>>>2]>>>24-8*(3&n[5])&255],i^=f[j[c]][g[n[6]>>>2]>>>24-8*(3&n[6])&255],g[n[0]]=i}for(c=0;4>c;c++){var o=e[m][c];i=f[4][g[o[0]>>>2]>>>24-8*(3&o[0])&255],i^=f[5][g[o[1]>>>2]>>>24-8*(3&o[1])&255],i^=f[6][g[o[2]>>>2]>>>24-8*(3&o[2])&255],i^=f[7][g[o[3]>>>2]>>>24-8*(3&o[3])&255],i^=f[4+c][g[o[4]>>>2]>>>24-8*(3&o[4])&255],h[k]=i,k++}}for(b=0;16>b;b++)this.masking[b]=h[b],this.rotate[b]=31&h[16+b]};var f=new Array(8);f[0]=new Array(821772500,2678128395,1810681135,1059425402,505495343,2617265619,1610868032,3483355465,3218386727,2294005173,3791863952,2563806837,1852023008,365126098,3269944861,584384398,677919599,3229601881,4280515016,2002735330,1136869587,3744433750,2289869850,2731719981,2714362070,879511577,1639411079,575934255,717107937,2857637483,576097850,2731753936,1725645e3,2810460463,5111599,767152862,2543075244,1251459544,1383482551,3052681127,3089939183,3612463449,1878520045,1510570527,2189125840,2431448366,582008916,3163445557,1265446783,1354458274,3529918736,3202711853,3073581712,3912963487,3029263377,1275016285,4249207360,2905708351,3304509486,1442611557,3585198765,2712415662,2731849581,3248163920,2283946226,208555832,2766454743,1331405426,1447828783,3315356441,3108627284,2957404670,2981538698,3339933917,1669711173,286233437,1465092821,1782121619,3862771680,710211251,980974943,1651941557,430374111,2051154026,704238805,4128970897,3144820574,2857402727,948965521,3333752299,2227686284,718756367,2269778983,2731643755,718440111,2857816721,3616097120,1113355533,2478022182,410092745,1811985197,1944238868,2696854588,1415722873,1682284203,1060277122,1998114690,1503841958,82706478,2315155686,1068173648,845149890,2167947013,1768146376,1993038550,3566826697,3390574031,940016341,3355073782,2328040721,904371731,1205506512,4094660742,2816623006,825647681,85914773,2857843460,1249926541,1417871568,3287612,3211054559,3126306446,1975924523,1353700161,2814456437,2438597621,1800716203,722146342,2873936343,1151126914,4160483941,2877670899,458611604,2866078500,3483680063,770352098,2652916994,3367839148,3940505011,3585973912,3809620402,718646636,2504206814,2914927912,3631288169,2857486607,2860018678,575749918,2857478043,718488780,2069512688,3548183469,453416197,1106044049,3032691430,52586708,3378514636,3459808877,3211506028,1785789304,218356169,3571399134,3759170522,1194783844,1523787992,3007827094,1975193539,2555452411,1341901877,3045838698,3776907964,3217423946,2802510864,2889438986,1057244207,1636348243,3761863214,1462225785,2632663439,481089165,718503062,24497053,3332243209,3344655856,3655024856,3960371065,1195698900,2971415156,3710176158,2115785917,4027663609,3525578417,2524296189,2745972565,3564906415,1372086093,1452307862,2780501478,1476592880,3389271281,18495466,2378148571,901398090,891748256,3279637769,3157290713,2560960102,1447622437,4284372637,216884176,2086908623,1879786977,3588903153,2242455666,2938092967,3559082096,2810645491,758861177,1121993112,215018983,642190776,4169236812,1196255959,2081185372,3508738393,941322904,4124243163,2877523539,1848581667,2205260958,3180453958,2589345134,3694731276,550028657,2519456284,3789985535,2973870856,2093648313,443148163,46942275,2734146937,1117713533,1115362972,1523183689,3717140224,1551984063),f[1]=new Array(522195092,4010518363,1776537470,960447360,4267822970,4005896314,1435016340,1929119313,2913464185,1310552629,3579470798,3724818106,2579771631,1594623892,417127293,2715217907,2696228731,1508390405,3994398868,3925858569,3695444102,4019471449,3129199795,3770928635,3520741761,990456497,4187484609,2783367035,21106139,3840405339,631373633,3783325702,532942976,396095098,3548038825,4267192484,2564721535,2011709262,2039648873,620404603,3776170075,2898526339,3612357925,4159332703,1645490516,223693667,1567101217,3362177881,1029951347,3470931136,3570957959,1550265121,119497089,972513919,907948164,3840628539,1613718692,3594177948,465323573,2659255085,654439692,2575596212,2699288441,3127702412,277098644,624404830,4100943870,2717858591,546110314,2403699828,3655377447,1321679412,4236791657,1045293279,4010672264,895050893,2319792268,494945126,1914543101,2777056443,3894764339,2219737618,311263384,4275257268,3458730721,669096869,3584475730,3835122877,3319158237,3949359204,2005142349,2713102337,2228954793,3769984788,569394103,3855636576,1425027204,108000370,2736431443,3671869269,3043122623,1750473702,2211081108,762237499,3972989403,2798899386,3061857628,2943854345,867476300,964413654,1591880597,1594774276,2179821409,552026980,3026064248,3726140315,2283577634,3110545105,2152310760,582474363,1582640421,1383256631,2043843868,3322775884,1217180674,463797851,2763038571,480777679,2718707717,2289164131,3118346187,214354409,200212307,3810608407,3025414197,2674075964,3997296425,1847405948,1342460550,510035443,4080271814,815934613,833030224,1620250387,1945732119,2703661145,3966000196,1388869545,3456054182,2687178561,2092620194,562037615,1356438536,3409922145,3261847397,1688467115,2150901366,631725691,3840332284,549916902,3455104640,394546491,837744717,2114462948,751520235,2221554606,2415360136,3999097078,2063029875,803036379,2702586305,821456707,3019566164,360699898,4018502092,3511869016,3677355358,2402471449,812317050,49299192,2570164949,3259169295,2816732080,3331213574,3101303564,2156015656,3705598920,3546263921,143268808,3200304480,1638124008,3165189453,3341807610,578956953,2193977524,3638120073,2333881532,807278310,658237817,2969561766,1641658566,11683945,3086995007,148645947,1138423386,4158756760,1981396783,2401016740,3699783584,380097457,2680394679,2803068651,3334260286,441530178,4016580796,1375954390,761952171,891809099,2183123478,157052462,3683840763,1592404427,341349109,2438483839,1417898363,644327628,2233032776,2353769706,2201510100,220455161,1815641738,182899273,2995019788,3627381533,3702638151,2890684138,1052606899,588164016,1681439879,4038439418,2405343923,4229449282,167996282,1336969661,1688053129,2739224926,1543734051,1046297529,1138201970,2121126012,115334942,1819067631,1902159161,1941945968,2206692869,1159982321),f[2]=new Array(2381300288,637164959,3952098751,3893414151,1197506559,916448331,2350892612,2932787856,3199334847,4009478890,3905886544,1373570990,2450425862,4037870920,3778841987,2456817877,286293407,124026297,3001279700,1028597854,3115296800,4208886496,2691114635,2188540206,1430237888,1218109995,3572471700,308166588,570424558,2187009021,2455094765,307733056,1310360322,3135275007,1384269543,2388071438,863238079,2359263624,2801553128,3380786597,2831162807,1470087780,1728663345,4072488799,1090516929,532123132,2389430977,1132193179,2578464191,3051079243,1670234342,1434557849,2711078940,1241591150,3314043432,3435360113,3091448339,1812415473,2198440252,267246943,796911696,3619716990,38830015,1526438404,2806502096,374413614,2943401790,1489179520,1603809326,1920779204,168801282,260042626,2358705581,1563175598,2397674057,1356499128,2217211040,514611088,2037363785,2186468373,4022173083,2792511869,2913485016,1173701892,4200428547,3896427269,1334932762,2455136706,602925377,2835607854,1613172210,41346230,2499634548,2457437618,2188827595,41386358,4172255629,1313404830,2405527007,3801973774,2217704835,873260488,2528884354,2478092616,4012915883,2555359016,2006953883,2463913485,575479328,2218240648,2099895446,660001756,2341502190,3038761536,3888151779,3848713377,3286851934,1022894237,1620365795,3449594689,1551255054,15374395,3570825345,4249311020,4151111129,3181912732,310226346,1133119310,530038928,136043402,2476768958,3107506709,2544909567,1036173560,2367337196,1681395281,1758231547,3641649032,306774401,1575354324,3716085866,1990386196,3114533736,2455606671,1262092282,3124342505,2768229131,4210529083,1833535011,423410938,660763973,2187129978,1639812e3,3508421329,3467445492,310289298,272797111,2188552562,2456863912,310240523,677093832,1013118031,901835429,3892695601,1116285435,3036471170,1337354835,243122523,520626091,277223598,4244441197,4194248841,1766575121,594173102,316590669,742362309,3536858622,4176435350,3838792410,2501204839,1229605004,3115755532,1552908988,2312334149,979407927,3959474601,1148277331,176638793,3614686272,2083809052,40992502,1340822838,2731552767,3535757508,3560899520,1354035053,122129617,7215240,2732932949,3118912700,2718203926,2539075635,3609230695,3725561661,1928887091,2882293555,1988674909,2063640240,2491088897,1459647954,4189817080,2302804382,1113892351,2237858528,1927010603,4002880361,1856122846,1594404395,2944033133,3855189863,3474975698,1643104450,4054590833,3431086530,1730235576,2984608721,3084664418,2131803598,4178205752,267404349,1617849798,1616132681,1462223176,736725533,2327058232,551665188,2945899023,1749386277,2575514597,1611482493,674206544,2201269090,3642560800,728599968,1680547377,2620414464,1388111496,453204106,4156223445,1094905244,2754698257,2201108165,3757000246,2704524545,3922940700,3996465027),f[3]=new Array(2645754912,532081118,2814278639,3530793624,1246723035,1689095255,2236679235,4194438865,2116582143,3859789411,157234593,2045505824,4245003587,1687664561,4083425123,605965023,672431967,1336064205,3376611392,214114848,4258466608,3232053071,489488601,605322005,3998028058,264917351,1912574028,756637694,436560991,202637054,135989450,85393697,2152923392,3896401662,2895836408,2145855233,3535335007,115294817,3147733898,1922296357,3464822751,4117858305,1037454084,2725193275,2127856640,1417604070,1148013728,1827919605,642362335,2929772533,909348033,1346338451,3547799649,297154785,1917849091,4161712827,2883604526,3968694238,1469521537,3780077382,3375584256,1763717519,136166297,4290970789,1295325189,2134727907,2798151366,1566297257,3672928234,2677174161,2672173615,965822077,2780786062,289653839,1133871874,3491843819,35685304,1068898316,418943774,672553190,642281022,2346158704,1954014401,3037126780,4079815205,2030668546,3840588673,672283427,1776201016,359975446,3750173538,555499703,2769985273,1324923,69110472,152125443,3176785106,3822147285,1340634837,798073664,1434183902,15393959,216384236,1303690150,3881221631,3711134124,3960975413,106373927,2578434224,1455997841,1801814300,1578393881,1854262133,3188178946,3258078583,2302670060,1539295533,3505142565,3078625975,2372746020,549938159,3278284284,2620926080,181285381,2865321098,3970029511,68876850,488006234,1728155692,2608167508,836007927,2435231793,919367643,3339422534,3655756360,1457871481,40520939,1380155135,797931188,234455205,2255801827,3990488299,397000196,739833055,3077865373,2871719860,4022553888,772369276,390177364,3853951029,557662966,740064294,1640166671,1699928825,3535942136,622006121,3625353122,68743880,1742502,219489963,1664179233,1577743084,1236991741,410585305,2366487942,823226535,1050371084,3426619607,3586839478,212779912,4147118561,1819446015,1911218849,530248558,3486241071,3252585495,2886188651,3410272728,2342195030,20547779,2982490058,3032363469,3631753222,312714466,1870521650,1493008054,3491686656,615382978,4103671749,2534517445,1932181,2196105170,278426614,6369430,3274544417,2913018367,697336853,2143000447,2946413531,701099306,1558357093,2805003052,3500818408,2321334417,3567135975,216290473,3591032198,23009561,1996984579,3735042806,2024298078,3739440863,569400510,2339758983,3016033873,3097871343,3639523026,3844324983,3256173865,795471839,2951117563,4101031090,4091603803,3603732598,971261452,534414648,428311343,3389027175,2844869880,694888862,1227866773,2456207019,3043454569,2614353370,3749578031,3676663836,459166190,4132644070,1794958188,51825668,2252611902,3084671440,2036672799,3436641603,1099053433,2469121526,3059204941,1323291266,2061838604,1018778475,2233344254,2553501054,334295216,3556750194,1065731521,183467730),f[4]=new Array(2127105028,745436345,2601412319,2788391185,3093987327,500390133,1155374404,389092991,150729210,3891597772,3523549952,1935325696,716645080,946045387,2901812282,1774124410,3869435775,4039581901,3293136918,3438657920,948246080,363898952,3867875531,1286266623,1598556673,68334250,630723836,1104211938,1312863373,613332731,2377784574,1101634306,441780740,3129959883,1917973735,2510624549,3238456535,2544211978,3308894634,1299840618,4076074851,1756332096,3977027158,297047435,3790297736,2265573040,3621810518,1311375015,1667687725,47300608,3299642885,2474112369,201668394,1468347890,576830978,3594690761,3742605952,1958042578,1747032512,3558991340,1408974056,3366841779,682131401,1033214337,1545599232,4265137049,206503691,103024618,2855227313,1337551222,2428998917,2963842932,4015366655,3852247746,2796956967,3865723491,3747938335,247794022,3755824572,702416469,2434691994,397379957,851939612,2314769512,218229120,1380406772,62274761,214451378,3170103466,2276210409,3845813286,28563499,446592073,1693330814,3453727194,29968656,3093872512,220656637,2470637031,77972100,1667708854,1358280214,4064765667,2395616961,325977563,4277240721,4220025399,3605526484,3355147721,811859167,3069544926,3962126810,652502677,3075892249,4132761541,3498924215,1217549313,3250244479,3858715919,3053989961,1538642152,2279026266,2875879137,574252750,3324769229,2651358713,1758150215,141295887,2719868960,3515574750,4093007735,4194485238,1082055363,3417560400,395511885,2966884026,179534037,3646028556,3738688086,1092926436,2496269142,257381841,3772900718,1636087230,1477059743,2499234752,3811018894,2675660129,3285975680,90732309,1684827095,1150307763,1723134115,3237045386,1769919919,1240018934,815675215,750138730,2239792499,1234303040,1995484674,138143821,675421338,1145607174,1936608440,3238603024,2345230278,2105974004,323969391,779555213,3004902369,2861610098,1017501463,2098600890,2628620304,2940611490,2682542546,1171473753,3656571411,3687208071,4091869518,393037935,159126506,1662887367,1147106178,391545844,3452332695,1891500680,3016609650,1851642611,546529401,1167818917,3194020571,2848076033,3953471836,575554290,475796850,4134673196,450035699,2351251534,844027695,1080539133,86184846,1554234488,3692025454,1972511363,2018339607,1491841390,1141460869,1061690759,4244549243,2008416118,2351104703,2868147542,1598468138,722020353,1027143159,212344630,1387219594,1725294528,3745187956,2500153616,458938280,4129215917,1828119673,544571780,3503225445,2297937496,1241802790,267843827,2694610800,1397140384,1558801448,3782667683,1806446719,929573330,2234912681,400817706,616011623,4121520928,3603768725,1761550015,1968522284,4053731006,4192232858,4005120285,872482584,3140537016,3894607381,2287405443,1963876937,3663887957,1584857e3,2975024454,1833426440,4025083860),f[5]=new Array(4143615901,749497569,1285769319,3795025788,2514159847,23610292,3974978748,844452780,3214870880,3751928557,2213566365,1676510905,448177848,3730751033,4086298418,2307502392,871450977,3222878141,4110862042,3831651966,2735270553,1310974780,2043402188,1218528103,2736035353,4274605013,2702448458,3936360550,2693061421,162023535,2827510090,687910808,23484817,3784910947,3371371616,779677500,3503626546,3473927188,4157212626,3500679282,4248902014,2466621104,3899384794,1958663117,925738300,1283408968,3669349440,1840910019,137959847,2679828185,1239142320,1315376211,1547541505,1690155329,739140458,3128809933,3933172616,3876308834,905091803,1548541325,4040461708,3095483362,144808038,451078856,676114313,2861728291,2469707347,993665471,373509091,2599041286,4025009006,4170239449,2149739950,3275793571,3749616649,2794760199,1534877388,572371878,2590613551,1753320020,3467782511,1405125690,4270405205,633333386,3026356924,3475123903,632057672,2846462855,1404951397,3882875879,3915906424,195638627,2385783745,3902872553,1233155085,3355999740,2380578713,2702246304,2144565621,3663341248,3894384975,2502479241,4248018925,3094885567,1594115437,572884632,3385116731,767645374,1331858858,1475698373,3793881790,3532746431,1321687957,619889600,1121017241,3440213920,2070816767,2833025776,1933951238,4095615791,890643334,3874130214,859025556,360630002,925594799,1764062180,3920222280,4078305929,979562269,2810700344,4087740022,1949714515,546639971,1165388173,3069891591,1495988560,922170659,1291546247,2107952832,1813327274,3406010024,3306028637,4241950635,153207855,2313154747,1608695416,1150242611,1967526857,721801357,1220138373,3691287617,3356069787,2112743302,3281662835,1111556101,1778980689,250857638,2298507990,673216130,2846488510,3207751581,3562756981,3008625920,3417367384,2198807050,529510932,3547516680,3426503187,2364944742,102533054,2294910856,1617093527,1204784762,3066581635,1019391227,1069574518,1317995090,1691889997,3661132003,510022745,3238594800,1362108837,1817929911,2184153760,805817662,1953603311,3699844737,120799444,2118332377,207536705,2282301548,4120041617,145305846,2508124933,3086745533,3261524335,1877257368,2977164480,3160454186,2503252186,4221677074,759945014,254147243,2767453419,3801518371,629083197,2471014217,907280572,3900796746,940896768,2751021123,2625262786,3161476951,3661752313,3260732218,1425318020,2977912069,1496677566,3988592072,2140652971,3126511541,3069632175,977771578,1392695845,1698528874,1411812681,1369733098,1343739227,3620887944,1142123638,67414216,3102056737,3088749194,1626167401,2546293654,3941374235,697522451,33404913,143560186,2595682037,994885535,1247667115,3859094837,2699155541,3547024625,4114935275,2968073508,3199963069,2732024527,1237921620,951448369,1898488916,1211705605,2790989240,2233243581,3598044975),f[6]=new Array(2246066201,858518887,1714274303,3485882003,713916271,2879113490,3730835617,539548191,36158695,1298409750,419087104,1358007170,749914897,2989680476,1261868530,2995193822,2690628854,3443622377,3780124940,3796824509,2976433025,4259637129,1551479e3,512490819,1296650241,951993153,2436689437,2460458047,144139966,3136204276,310820559,3068840729,643875328,1969602020,1680088954,2185813161,3283332454,672358534,198762408,896343282,276269502,3014846926,84060815,197145886,376173866,3943890818,3813173521,3545068822,1316698879,1598252827,2633424951,1233235075,859989710,2358460855,3503838400,3409603720,1203513385,1193654839,2792018475,2060853022,207403770,1144516871,3068631394,1121114134,177607304,3785736302,326409831,1929119770,2983279095,4183308101,3474579288,3200513878,3228482096,119610148,1170376745,3378393471,3163473169,951863017,3337026068,3135789130,2907618374,1183797387,2015970143,4045674555,2182986399,2952138740,3928772205,384012900,2454997643,10178499,2879818989,2596892536,111523738,2995089006,451689641,3196290696,235406569,1441906262,3890558523,3013735005,4158569349,1644036924,376726067,1006849064,3664579700,2041234796,1021632941,1374734338,2566452058,371631263,4007144233,490221539,206551450,3140638584,1053219195,1853335209,3412429660,3562156231,735133835,1623211703,3104214392,2738312436,4096837757,3366392578,3110964274,3956598718,3196820781,2038037254,3877786376,2339753847,300912036,3766732888,2372630639,1516443558,4200396704,1574567987,4069441456,4122592016,2699739776,146372218,2748961456,2043888151,35287437,2596680554,655490400,1132482787,110692520,1031794116,2188192751,1324057718,1217253157,919197030,686247489,3261139658,1028237775,3135486431,3059715558,2460921700,986174950,2661811465,4062904701,2752986992,3709736643,367056889,1353824391,731860949,1650113154,1778481506,784341916,357075625,3608602432,1074092588,2480052770,3811426202,92751289,877911070,3600361838,1231880047,480201094,3756190983,3094495953,434011822,87971354,363687820,1717726236,1901380172,3926403882,2481662265,400339184,1490350766,2661455099,1389319756,2558787174,784598401,1983468483,30828846,3550527752,2716276238,3841122214,1765724805,1955612312,1277890269,1333098070,1564029816,2704417615,1026694237,3287671188,1260819201,3349086767,1016692350,1582273796,1073413053,1995943182,694588404,1025494639,3323872702,3551898420,4146854327,453260480,1316140391,1435673405,3038941953,3486689407,1622062951,403978347,817677117,950059133,4246079218,3278066075,1486738320,1417279718,481875527,2549965225,3933690356,760697757,1452955855,3897451437,1177426808,1702951038,4085348628,2447005172,1084371187,3516436277,3068336338,1073369276,1027665953,3284188590,1230553676,1368340146,2226246512,267243139,2274220762,4070734279,2497715176,2423353163,2504755875),f[7]=new Array(3793104909,3151888380,2817252029,895778965,2005530807,3871412763,237245952,86829237,296341424,3851759377,3974600970,2475086196,709006108,1994621201,2972577594,937287164,3734691505,168608556,3189338153,2225080640,3139713551,3033610191,3025041904,77524477,185966941,1208824168,2344345178,1721625922,3354191921,1066374631,1927223579,1971335949,2483503697,1551748602,2881383779,2856329572,3003241482,48746954,1398218158,2050065058,313056748,4255789917,393167848,1912293076,940740642,3465845460,3091687853,2522601570,2197016661,1727764327,364383054,492521376,1291706479,3264136376,1474851438,1685747964,2575719748,1619776915,1814040067,970743798,1561002147,2925768690,2123093554,1880132620,3151188041,697884420,2550985770,2607674513,2659114323,110200136,1489731079,997519150,1378877361,3527870668,478029773,2766872923,1022481122,431258168,1112503832,897933369,2635587303,669726182,3383752315,918222264,163866573,3246985393,3776823163,114105080,1903216136,761148244,3571337562,1690750982,3166750252,1037045171,1888456500,2010454850,642736655,616092351,365016990,1185228132,4174898510,1043824992,2023083429,2241598885,3863320456,3279669087,3674716684,108438443,2132974366,830746235,606445527,4173263986,2204105912,1844756978,2532684181,4245352700,2969441100,3796921661,1335562986,4061524517,2720232303,2679424040,634407289,885462008,3294724487,3933892248,2094100220,339117932,4048830727,3202280980,1458155303,2689246273,1022871705,2464987878,3714515309,353796843,2822958815,4256850100,4052777845,551748367,618185374,3778635579,4020649912,1904685140,3069366075,2670879810,3407193292,2954511620,4058283405,2219449317,3135758300,1120655984,3447565834,1474845562,3577699062,550456716,3466908712,2043752612,881257467,869518812,2005220179,938474677,3305539448,3850417126,1315485940,3318264702,226533026,965733244,321539988,1136104718,804158748,573969341,3708209826,937399083,3290727049,2901666755,1461057207,4013193437,4066861423,3242773476,2421326174,1581322155,3028952165,786071460,3900391652,3918438532,1485433313,4023619836,3708277595,3678951060,953673138,1467089153,1930354364,1533292819,2492563023,1346121658,1685000834,1965281866,3765933717,4190206607,2052792609,3515332758,690371149,3125873887,2180283551,2903598061,3933952357,436236910,289419410,14314871,1242357089,2904507907,1616633776,2666382180,585885352,3471299210,2699507360,1432659641,277164553,3354103607,770115018,2303809295,3741942315,3177781868,2853364978,2269453327,3774259834,987383833,1290892879,225909803,1741533526,890078084,1496906255,1111072499,916028167,243534141,1252605537,2204162171,531204876,290011180,3916834213,102027703,237315147,209093447,1486785922,220223953,2758195998,4175039106,82940208,3127791296,2569425252,518464269,1353887104,3941492737,2377294467,3935040926)}function e(a){this.cast5=new d,this.cast5.setKey(f.str2bin(a)),this.encrypt=function(a){return this.cast5.encrypt(a)}}var f=a("../../util.js");b.exports=e,b.exports.blockSize=e.prototype.blockSize=8,b.exports.keySize=e.prototype.keySize=16},{"../../util.js":76}],22:[function(a,b,c){"use strict";function d(a,b,c,d,e,h){var i,j,k,l,m,n,o,p,q,r,s,t,u,v,w=new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756),x=new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344),y=new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584),z=new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928),A=new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080),B=new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312),C=new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154),D=new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696),E=0,F=b.length,G=0,H=32==a.length?3:9;
+p=3==H?c?new Array(0,32,2):new Array(30,-2,-2):c?new Array(0,32,2,62,30,-2,64,96,2):new Array(94,62,-2,32,64,2,30,-2,-2),c&&(b=f(b,h),F=b.length);var I="",J="";for(1==d&&(q=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),s=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),E=0);F>E;){for(n=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),o=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),1==d&&(c?(n^=q,o^=s):(r=q,t=s,q=n,s=o)),k=252645135&(n>>>4^o),o^=k,n^=k<<4,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,n=n<<1|n>>>31,o=o<<1|o>>>31,j=0;H>j;j+=3){for(u=p[j+1],v=p[j+2],i=p[j];i!=u;i+=v)l=o^a[i],m=(o>>>4|o<<28)^a[i+1],k=n,n=o,o=k^(x[l>>>24&63]|z[l>>>16&63]|B[l>>>8&63]|D[63&l]|w[m>>>24&63]|y[m>>>16&63]|A[m>>>8&63]|C[63&m]);k=n,n=o,o=k}n=n>>>1|n<<31,o=o>>>1|o<<31,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=252645135&(n>>>4^o),o^=k,n^=k<<4,1==d&&(c?(q=n,s=o):(n^=r,o^=t)),J+=String.fromCharCode(n>>>24,n>>>16&255,n>>>8&255,255&n,o>>>24,o>>>16&255,o>>>8&255,255&o),G+=8,512==G&&(I+=J,J="",G=0)}return I+=J,c||(I=g(I,h)),I}function e(a){for(var b,c,d,e=new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964),f=new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697),g=new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272),h=new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144),i=new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256),j=new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488),k=new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746),l=new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568),m=new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578),n=new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488),o=new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800),p=new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744),q=new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128),r=new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261),s=a.length>8?3:1,t=new Array(32*s),u=new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0),v=0,w=0,x=0;s>x;x++){var y=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++),z=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++);d=252645135&(y>>>4^z),z^=d,y^=d<<4,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=858993459&(y>>>2^z),z^=d,y^=d<<2,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=16711935&(z>>>8^y),y^=d,z^=d<<8,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=y<<8|z>>>20&240,y=z<<24|z<<8&16711680|z>>>8&65280|z>>>24&240,z=d;for(var A=0;A<u.length;A++)u[A]?(y=y<<2|y>>>26,z=z<<2|z>>>26):(y=y<<1|y>>>27,z=z<<1|z>>>27),y&=-15,z&=-15,b=e[y>>>28]|f[y>>>24&15]|g[y>>>20&15]|h[y>>>16&15]|i[y>>>12&15]|j[y>>>8&15]|k[y>>>4&15],c=l[z>>>28]|m[z>>>24&15]|n[z>>>20&15]|o[z>>>16&15]|p[z>>>12&15]|q[z>>>8&15]|r[z>>>4&15],d=65535&(c>>>16^b),t[w++]=b^d,t[w++]=c^d<<16}return t}function f(a,b){var c=8-a.length%8;return 2==b&&8>c?a+="        ".substr(0,c):1==b?a+=String.fromCharCode(c,c,c,c,c,c,c,c).substr(0,c):!b&&8>c&&(a+="\x00\x00\x00\x00\x00\x00\x00\x00".substr(0,c)),a}function g(a,b){if(2==b)a=a.replace(/ *$/g,"");else if(1==b){var c=a.charCodeAt(a.length-1);a=a.substr(0,a.length-c)}else b||(a=a.replace(/\0*$/g,""));return a}function h(a){this.key=[];for(var b=0;3>b;b++)this.key.push(a.substr(8*b,8));this.encrypt=function(a){return j.str2bin(d(e(this.key[2]),d(e(this.key[1]),d(e(this.key[0]),j.bin2str(a),!0,0,null,null),!1,0,null,null),!0,0,null,null))}}function i(a){this.key=a,this.encrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!0,0,null,b))},this.decrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!1,0,null,b))}}var j=a("../../util.js");h.keySize=h.prototype.keySize=24,h.blockSize=h.prototype.blockSize=8,b.exports={des:h,originalDes:i}},{"../../util.js":76}],23:[function(a,b,c){var d=a("./des.js");b.exports={des:d.originalDes,tripledes:d.des,cast5:a("./cast5.js"),twofish:a("./twofish.js"),blowfish:a("./blowfish.js"),idea:function(){throw new Error("IDEA symmetric-key algorithm not implemented")}};var e=a("./aes.js");for(var f in e)b.exports["aes"+f]=e[f]},{"./aes.js":19,"./blowfish.js":20,"./cast5.js":21,"./des.js":22,"./twofish.js":24}],24:[function(a,b,c){function d(a,b){return(a<<b|a>>>32-b)&k}function e(a,b){return a[b]|a[b+1]<<8|a[b+2]<<16|a[b+3]<<24}function f(a,b,c){a.splice(b,4,255&c,c>>>8&255,c>>>16&255,c>>>24&255)}function g(a,b){return a>>>8*b&255}function h(){function a(a){function b(a){return a^a>>2^[0,90,180,238][3&a]}function c(a){return a^a>>1^a>>2^[0,238,180,90][3&a]}function f(a,b){var c,d,e;for(c=0;8>c;c++)d=b>>>24,b=b<<8&k|a>>>24,a=a<<8&k,e=d<<1,128&d&&(e^=333),b^=d^e<<16,e^=d>>>1,1&d&&(e^=166),b^=e<<24|e<<8;return b}function h(a,b){var c,d,e,f;return c=b>>4,d=15&b,e=A[a][c^d],f=B[a][E[d]^F[c]],D[a][E[f]^F[e]]<<4|C[a][e^f]}function i(a,b){var c=g(a,0),d=g(a,1),e=g(a,2),f=g(a,3);switch(q){case 4:c=G[1][c]^g(b[3],0),d=G[0][d]^g(b[3],1),e=G[0][e]^g(b[3],2),f=G[1][f]^g(b[3],3);case 3:c=G[1][c]^g(b[2],0),d=G[1][d]^g(b[2],1),e=G[0][e]^g(b[2],2),f=G[0][f]^g(b[2],3);case 2:c=G[0][G[0][c]^g(b[1],0)]^g(b[0],0),d=G[0][G[1][d]^g(b[1],1)]^g(b[0],1),e=G[1][G[0][e]^g(b[1],2)]^g(b[0],2),f=G[1][G[1][f]^g(b[1],3)]^g(b[0],3)}return H[0][c]^H[1][d]^H[2][e]^H[3][f]}o=a;var j,l,m,n,p,q,r,u,v,w=[],x=[],y=[],z=[],A=[[8,1,7,13,6,15,3,2,0,11,5,9,14,12,10,4],[2,8,11,13,15,7,6,14,3,1,9,4,0,10,12,5]],B=[[14,12,11,8,1,2,3,5,15,4,10,6,7,0,9,13],[1,14,2,11,4,12,3,7,6,13,10,5,15,9,0,8]],C=[[11,10,5,14,6,13,9,0,12,8,15,3,2,4,7,1],[4,12,7,5,1,6,9,10,0,14,13,8,2,11,3,15]],D=[[13,7,15,4,1,2,6,14,9,11,3,0,8,5,12,10],[11,9,5,1,12,3,13,14,6,4,7,15,2,0,8,10]],E=[0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15],F=[0,9,2,11,4,13,6,15,8,1,10,3,12,5,14,7],G=[[],[]],H=[[],[],[],[]];for(o=o.slice(0,32),j=o.length;16!=j&&24!=j&&32!=j;)o[j++]=0;for(j=0;j<o.length;j+=4)y[j>>2]=e(o,j);for(j=0;256>j;j++)G[0][j]=h(0,j),G[1][j]=h(1,j);for(j=0;256>j;j++)r=G[1][j],u=b(r),v=c(r),H[0][j]=r+(u<<8)+(v<<16)+(v<<24),H[2][j]=u+(v<<8)+(r<<16)+(v<<24),r=G[0][j],u=b(r),v=c(r),H[1][j]=v+(v<<8)+(u<<16)+(r<<24),H[3][j]=u+(r<<8)+(v<<16)+(u<<24);for(q=y.length/2,j=0;q>j;j++)l=y[j+j],w[j]=l,m=y[j+j+1],x[j]=m,z[q-j-1]=f(l,m);for(j=0;40>j;j+=2)l=16843009*j,m=l+16843009,l=i(l,w),m=d(i(m,x),8),s[j]=l+m&k,s[j+1]=d(l+2*m,9);for(j=0;256>j;j++)switch(l=m=n=p=j,q){case 4:l=G[1][l]^g(z[3],0),m=G[0][m]^g(z[3],1),n=G[0][n]^g(z[3],2),p=G[1][p]^g(z[3],3);case 3:l=G[1][l]^g(z[2],0),m=G[1][m]^g(z[2],1),n=G[0][n]^g(z[2],2),p=G[0][p]^g(z[2],3);case 2:t[0][j]=H[0][G[0][G[0][l]^g(z[1],0)]^g(z[0],0)],t[1][j]=H[1][G[0][G[1][m]^g(z[1],1)]^g(z[0],1)],t[2][j]=H[2][G[1][G[0][n]^g(z[1],2)]^g(z[0],2)],t[3][j]=H[3][G[1][G[1][p]^g(z[1],3)]^g(z[0],3)]}}function b(a){return t[0][g(a,0)]^t[1][g(a,1)]^t[2][g(a,2)]^t[3][g(a,3)]}function c(a){return t[0][g(a,3)]^t[1][g(a,0)]^t[2][g(a,1)]^t[3][g(a,2)]}function h(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2]^f+g+s[4*a+8]&k,31),e[3]=d(e[3],1)^f+2*g+s[4*a+9]&k,f=b(e[2]),g=c(e[3]),e[0]=d(e[0]^f+g+s[4*a+10]&k,31),e[1]=d(e[1],1)^f+2*g+s[4*a+11]&k}function i(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2],1)^f+g+s[4*a+10]&k,e[3]=d(e[3]^f+2*g+s[4*a+11]&k,31),f=b(e[2]),g=c(e[3]),e[0]=d(e[0],1)^f+g+s[4*a+8]&k,e[1]=d(e[1]^f+2*g+s[4*a+9]&k,31)}function j(){s=[],t=[[],[],[],[]]}function l(a,b){p=a,q=b;for(var c=[e(p,q)^s[0],e(p,q+4)^s[1],e(p,q+8)^s[2],e(p,q+12)^s[3]],d=0;8>d;d++)h(d,c);return f(p,q,c[2]^s[4]),f(p,q+4,c[3]^s[5]),f(p,q+8,c[0]^s[6]),f(p,q+12,c[1]^s[7]),q+=16,p}function m(a,b){p=a,q=b;for(var c=[e(p,q)^s[4],e(p,q+4)^s[5],e(p,q+8)^s[6],e(p,q+12)^s[7]],d=7;d>=0;d--)i(d,c);f(p,q,c[2]^s[0]),f(p,q+4,c[3]^s[1]),f(p,q+8,c[0]^s[2]),f(p,q+12,c[1]^s[3]),q+=16}function n(){return p}var o=null,p=null,q=-1,r=null;r="twofish";var s=[],t=[[],[],[],[]];return{name:"twofish",blocksize:16,open:a,close:j,encrypt:l,decrypt:m,finalize:n}}function i(a){this.tf=h(),this.tf.open(l.str2bin(a),0),this.encrypt=function(a){return this.tf.encrypt(j(a),0)}}function j(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b}var k=4294967295,l=a("../../util.js");b.exports=i,b.exports.keySize=i.prototype.keySize=32,b.exports.blockSize=i.prototype.blockSize=16},{"../../util.js":76}],25:[function(a,b,c){var d=a("./random.js"),e=a("./cipher"),f=a("./public_key"),g=a("../type/mpi.js");b.exports={publicKeyEncrypt:function(a,b,c){var d=function(){var d;switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":var e=new f.rsa,g=b[0].toBigInteger(),h=b[1].toBigInteger();return d=c.toBigInteger(),[e.encrypt(d,h,g)];case"elgamal":var i=new f.elgamal,j=b[0].toBigInteger(),k=b[1].toBigInteger(),l=b[2].toBigInteger();return d=c.toBigInteger(),i.encrypt(d,k,j,l);default:return[]}}();return d.map(function(a){var b=new g;return b.fromBigInteger(a),b})},publicKeyDecrypt:function(a,b,c){var d,e=function(){switch(a){case"rsa_encrypt_sign":case"rsa_encrypt":var e=new f.rsa,g=b[0].toBigInteger(),h=b[1].toBigInteger(),i=b[2].toBigInteger();d=b[3].toBigInteger();var j=b[4].toBigInteger(),k=b[5].toBigInteger(),l=c[0].toBigInteger();return e.decrypt(l,g,h,i,d,j,k);case"elgamal":var m=new f.elgamal,n=b[3].toBigInteger(),o=c[0].toBigInteger(),p=c[1].toBigInteger();return d=b[0].toBigInteger(),m.decrypt(o,p,d,n);default:return null}}(),h=new g;return h.fromBigInteger(e),h},getPrivateMpiCount:function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":return 4;case"elgamal":return 1;case"dsa":return 1;default:throw new Error("Unknown algorithm")}},getPublicMpiCount:function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":return 2;case"elgamal":return 3;case"dsa":return 4;default:throw new Error("Unknown algorithm.")}},generateMpi:function(a,b){function c(a){return a.map(function(a){var b=new g;return b.fromBigInteger(a),b})}switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":case"rsa_sign":var d=new f.rsa;return d.generate(b,"10001").then(function(a){var b=[];return b.push(a.n),b.push(a.ee),b.push(a.d),b.push(a.p),b.push(a.q),b.push(a.u),c(b)});default:throw new Error("Unsupported algorithm for key generation.")}},getPrefixRandom:function(a){return d.getRandomBytes(e[a].blockSize)},generateSessionKey:function(a){return d.getRandomBytes(e[a].keySize)}}},{"../type/mpi.js":74,"./cipher":23,"./public_key":36,"./random.js":39}],26:[function(a,b,c){var d=b.exports={},e=a("./forge_util.js"),f=null,g=!1,h=null,i=function(){f=String.fromCharCode(128),f+=e.fillString(String.fromCharCode(0),64),h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],g=!0},j=function(a,b,c){for(var d,e,f,g,i,j,k,l,m,n,o,p,q,r,s,t=c.length();t>=64;){for(k=0;16>k;++k)b[k]=c.getInt32();for(;64>k;++k)d=b[k-2],d=(d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10,e=b[k-15],e=(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3,b[k]=d+b[k-7]+e+b[k-16]&4294967295;for(l=a.h0,m=a.h1,n=a.h2,o=a.h3,p=a.h4,q=a.h5,r=a.h6,s=a.h7,k=0;64>k;++k)g=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7),i=r^p&(q^r),f=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),j=l&m|n&(l^m),d=s+g+i+h[k]+b[k],e=f+j,s=r,r=q,q=p,p=o+d&4294967295,o=n,n=m,m=l,l=d+e&4294967295;a.h0=a.h0+l&4294967295,a.h1=a.h1+m&4294967295,a.h2=a.h2+n&4294967295,a.h3=a.h3+o&4294967295,a.h4=a.h4+p&4294967295,a.h5=a.h5+q&4294967295,a.h6=a.h6+r&4294967295,a.h7=a.h7+s&4294967295,t-=64}};d.create=function(){g||i();var a=null,b=e.createBuffer(),c=new Array(64),d={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0};return d.start=function(){return d.messageLength=0,b=e.createBuffer(),a={h0:1779033703,h1:3144134277,h2:1013904242,h3:2773480762,h4:1359893119,h5:2600822924,h6:528734635,h7:1541459225},d},d.start(),d.update=function(f,g){return"utf8"===g&&(f=e.encodeUtf8(f)),d.messageLength+=f.length,b.putBytes(f),j(a,c,b),(b.read>2048||0===b.length())&&b.compact(),d},d.digest=function(){var g=d.messageLength,h=e.createBuffer();h.putBytes(b.bytes()),h.putBytes(f.substr(0,64-(g+8)%64)),h.putInt32(g>>>29&255),h.putInt32(g<<3&4294967295);var i={h0:a.h0,h1:a.h1,h2:a.h2,h3:a.h3,h4:a.h4,h5:a.h5,h6:a.h6,h7:a.h7};j(i,c,h);var k=e.createBuffer();return k.putInt32(i.h0),k.putInt32(i.h1),k.putInt32(i.h2),k.putInt32(i.h3),k.putInt32(i.h4),k.putInt32(i.h5),k.putInt32(i.h6),k.putInt32(i.h7),k},d}},{"./forge_util.js":27}],27:[function(a,b,c){var d=b.exports={};d.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},d.isArrayBuffer=function(a){return"undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer};var e=[];"undefined"!=typeof Int8Array&&e.push(Int8Array),"undefined"!=typeof Uint8Array&&e.push(Uint8Array),"undefined"!=typeof Uint8ClampedArray&&e.push(Uint8ClampedArray),"undefined"!=typeof Int16Array&&e.push(Int16Array),"undefined"!=typeof Uint16Array&&e.push(Uint16Array),"undefined"!=typeof Int32Array&&e.push(Int32Array),"undefined"!=typeof Uint32Array&&e.push(Uint32Array),"undefined"!=typeof Float32Array&&e.push(Float32Array),"undefined"!=typeof Float64Array&&e.push(Float64Array),d.isArrayBufferView=function(a){for(var b=0;b<e.length;++b)if(a instanceof e[b])return!0;return!1},d.ByteBuffer=function(a){if(this.data="",this.read=0,"string"==typeof a)this.data=a;else if(d.isArrayBuffer(a)||d.isArrayBufferView(a)){var b=new Uint8Array(a);try{this.data=String.fromCharCode.apply(null,b)}catch(c){for(var e=0;e<b.length;++e)this.putByte(b[e])}}},d.ByteBuffer.prototype.length=function(){return this.data.length-this.read},d.ByteBuffer.prototype.isEmpty=function(){return this.length()<=0},d.ByteBuffer.prototype.putByte=function(a){return this.data+=String.fromCharCode(a),this},d.ByteBuffer.prototype.fillWithByte=function(a,b){a=String.fromCharCode(a);for(var c=this.data;b>0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return this.data=c,this},d.ByteBuffer.prototype.putBytes=function(a){return this.data+=a,this},d.ByteBuffer.prototype.putString=function(a){return this.data+=d.encodeUtf8(a),this},d.ByteBuffer.prototype.putInt16=function(a){return this.data+=String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt24=function(a){return this.data+=String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt32=function(a){return this.data+=String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt16Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255),this},d.ByteBuffer.prototype.putInt24Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255),this},d.ByteBuffer.prototype.putInt32Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>24&255),this},d.ByteBuffer.prototype.putInt=function(a,b){do b-=8,this.data+=String.fromCharCode(a>>b&255);while(b>0);return this},d.ByteBuffer.prototype.putSignedInt=function(a,b){return 0>a&&(a+=2<<b-1),this.putInt(a,b)},d.ByteBuffer.prototype.putBuffer=function(a){return this.data+=a.getBytes(),this},d.ByteBuffer.prototype.getByte=function(){return this.data.charCodeAt(this.read++)},d.ByteBuffer.prototype.getInt16=function(){var a=this.data.charCodeAt(this.read)<<8^this.data.charCodeAt(this.read+1);return this.read+=2,a},d.ByteBuffer.prototype.getInt24=function(){var a=this.data.charCodeAt(this.read)<<16^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2);return this.read+=3,a},d.ByteBuffer.prototype.getInt32=function(){var a=this.data.charCodeAt(this.read)<<24^this.data.charCodeAt(this.read+1)<<16^this.data.charCodeAt(this.read+2)<<8^this.data.charCodeAt(this.read+3);return this.read+=4,a},d.ByteBuffer.prototype.getInt16Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8;return this.read+=2,a},d.ByteBuffer.prototype.getInt24Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16;return this.read+=3,a},d.ByteBuffer.prototype.getInt32Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16^this.data.charCodeAt(this.read+3)<<24;return this.read+=4,a},d.ByteBuffer.prototype.getInt=function(a){var b=0;do b=(b<<8)+this.data.charCodeAt(this.read++),a-=8;while(a>0);return b},d.ByteBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},d.ByteBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},d.ByteBuffer.prototype.bytes=function(a){return"undefined"==typeof a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},d.ByteBuffer.prototype.at=function(a){return this.data.charCodeAt(this.read+a)},d.ByteBuffer.prototype.setAt=function(a,b){return this.data=this.data.substr(0,this.read+a)+String.fromCharCode(b)+this.data.substr(this.read+a+1),this},d.ByteBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},d.ByteBuffer.prototype.copy=function(){var a=d.createBuffer(this.data);return a.read=this.read,a},d.ByteBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},d.ByteBuffer.prototype.clear=function(){return this.data="",this.read=0,this},d.ByteBuffer.prototype.truncate=function(a){var b=Math.max(0,this.length()-a);return this.data=this.data.substr(this.read,b),this.read=0,this},d.ByteBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.length;++b){var c=this.data.charCodeAt(b);16>c&&(a+="0"),a+=c.toString(16)}return a},d.ByteBuffer.prototype.toString=function(){return d.decodeUtf8(this.bytes())},d.createBuffer=function(a,b){return b=b||"raw",void 0!==a&&"utf8"===b&&(a=d.encodeUtf8(a)),new d.ByteBuffer(a)},d.fillString=function(a,b){for(var c="";b>0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return c},d.xorBytes=function(a,b,c){for(var d="",e="",f="",g=0,h=0;c>0;--c,++g)e=a.charCodeAt(g)^b.charCodeAt(g),h>=10&&(d+=f,f="",h=0),f+=String.fromCharCode(e),++h;return d+=f},d.hexToBytes=function(a){var b="",c=0;for(a.length&!0&&(c=1,b+=String.fromCharCode(parseInt(a[0],16)));c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},d.bytesToHex=function(a){return d.createBuffer(a).toHex()},d.int32ToBytes=function(a){return String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a)};var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];d.encode64=function(a,b){for(var c,d,e,g="",h="",i=0;i<a.length;)c=a.charCodeAt(i++),d=a.charCodeAt(i++),e=a.charCodeAt(i++),g+=f.charAt(c>>2),g+=f.charAt((3&c)<<4|d>>4),isNaN(d)?g+="==":(g+=f.charAt((15&d)<<2|e>>6),g+=isNaN(e)?"=":f.charAt(63&e)),b&&g.length>b&&(h+=g.substr(0,b)+"\r\n",g=g.substr(b));return h+=g},d.decode64=function(a){a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var b,c,d,e,f="",h=0;h<a.length;)b=g[a.charCodeAt(h++)-43],c=g[a.charCodeAt(h++)-43],d=g[a.charCodeAt(h++)-43],e=g[a.charCodeAt(h++)-43],f+=String.fromCharCode(b<<2|c>>4),64!==d&&(f+=String.fromCharCode((15&c)<<4|d>>2),64!==e&&(f+=String.fromCharCode((3&d)<<6|e)));return f},d.encodeUtf8=function(a){return unescape(encodeURIComponent(a))},d.decodeUtf8=function(a){return decodeURIComponent(escape(a))}},{}],28:[function(a,b,c){var d=a("./sha.js"),e=a("./forge_sha256.js");b.exports={md5:a("./md5.js"),sha1:d.sha1,sha224:d.sha224,sha256:d.sha256,sha384:d.sha384,sha512:d.sha512,ripemd:a("./ripe-md.js"),digest:function(a,b){switch(a){case 1:return this.md5(b);case 2:return this.sha1(b);case 3:return this.ripemd(b);case 8:var c=e.create();return c.update(b),c.digest().getBytes();case 9:return this.sha384(b);case 10:return this.sha512(b);case 11:return this.sha224(b);default:throw new Error("Invalid hash function.")}},getHashByteLength:function(a){switch(a){case 1:return 16;case 2:case 3:return 20;case 8:return 32;case 9:return 48;case 10:return 64;case 11:return 28;default:throw new Error("Invalid hash algorithm.")}}}},{"./forge_sha256.js":26,"./md5.js":29,"./ripe-md.js":30,"./sha.js":31}],29:[function(a,b,c){function d(a,b){var c=a[0],d=a[1],e=a[2],j=a[3];c=f(c,d,e,j,b[0],7,-680876936),j=f(j,c,d,e,b[1],12,-389564586),e=f(e,j,c,d,b[2],17,606105819),d=f(d,e,j,c,b[3],22,-1044525330),c=f(c,d,e,j,b[4],7,-176418897),j=f(j,c,d,e,b[5],12,1200080426),e=f(e,j,c,d,b[6],17,-1473231341),d=f(d,e,j,c,b[7],22,-45705983),c=f(c,d,e,j,b[8],7,1770035416),j=f(j,c,d,e,b[9],12,-1958414417),e=f(e,j,c,d,b[10],17,-42063),d=f(d,e,j,c,b[11],22,-1990404162),c=f(c,d,e,j,b[12],7,1804603682),j=f(j,c,d,e,b[13],12,-40341101),e=f(e,j,c,d,b[14],17,-1502002290),d=f(d,e,j,c,b[15],22,1236535329),c=g(c,d,e,j,b[1],5,-165796510),j=g(j,c,d,e,b[6],9,-1069501632),e=g(e,j,c,d,b[11],14,643717713),d=g(d,e,j,c,b[0],20,-373897302),c=g(c,d,e,j,b[5],5,-701558691),j=g(j,c,d,e,b[10],9,38016083),e=g(e,j,c,d,b[15],14,-660478335),d=g(d,e,j,c,b[4],20,-405537848),c=g(c,d,e,j,b[9],5,568446438),j=g(j,c,d,e,b[14],9,-1019803690),e=g(e,j,c,d,b[3],14,-187363961),d=g(d,e,j,c,b[8],20,1163531501),c=g(c,d,e,j,b[13],5,-1444681467),j=g(j,c,d,e,b[2],9,-51403784),e=g(e,j,c,d,b[7],14,1735328473),d=g(d,e,j,c,b[12],20,-1926607734),c=h(c,d,e,j,b[5],4,-378558),j=h(j,c,d,e,b[8],11,-2022574463),e=h(e,j,c,d,b[11],16,1839030562),d=h(d,e,j,c,b[14],23,-35309556),c=h(c,d,e,j,b[1],4,-1530992060),j=h(j,c,d,e,b[4],11,1272893353),e=h(e,j,c,d,b[7],16,-155497632),d=h(d,e,j,c,b[10],23,-1094730640),c=h(c,d,e,j,b[13],4,681279174),j=h(j,c,d,e,b[0],11,-358537222),e=h(e,j,c,d,b[3],16,-722521979),d=h(d,e,j,c,b[6],23,76029189),c=h(c,d,e,j,b[9],4,-640364487),j=h(j,c,d,e,b[12],11,-421815835),e=h(e,j,c,d,b[15],16,530742520),d=h(d,e,j,c,b[2],23,-995338651),c=i(c,d,e,j,b[0],6,-198630844),j=i(j,c,d,e,b[7],10,1126891415),e=i(e,j,c,d,b[14],15,-1416354905),d=i(d,e,j,c,b[5],21,-57434055),c=i(c,d,e,j,b[12],6,1700485571),j=i(j,c,d,e,b[3],10,-1894986606),e=i(e,j,c,d,b[10],15,-1051523),d=i(d,e,j,c,b[1],21,-2054922799),c=i(c,d,e,j,b[8],6,1873313359),j=i(j,c,d,e,b[15],10,-30611744),e=i(e,j,c,d,b[6],15,-1560198380),d=i(d,e,j,c,b[13],21,1309151649),c=i(c,d,e,j,b[4],6,-145523070),j=i(j,c,d,e,b[11],10,-1120210379),e=i(e,j,c,d,b[2],15,718787259),d=i(d,e,j,c,b[9],21,-343485551),a[0]=o(c,a[0]),a[1]=o(d,a[1]),a[2]=o(e,a[2]),a[3]=o(j,a[3])}function e(a,b,c,d,e,f){return b=o(o(b,a),o(d,f)),o(b<<e|b>>>32-e,c)}function f(a,b,c,d,f,g,h){return e(b&c|~b&d,a,b,f,g,h)}function g(a,b,c,d,f,g,h){return e(b&d|c&~d,a,b,f,g,h)}function h(a,b,c,d,f,g,h){return e(b^c^d,a,b,f,g,h)}function i(a,b,c,d,f,g,h){return e(c^(b|~d),a,b,f,g,h)}function j(a){var b,c=a.length,e=[1732584193,-271733879,-1732584194,271733878];for(b=64;b<=a.length;b+=64)d(e,k(a.substring(b-64,b)));a=a.substring(b-64);var f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;b<a.length;b++)f[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(f[b>>2]|=128<<(b%4<<3),b>55)for(d(e,f),b=0;16>b;b++)f[b]=0;return f[14]=8*c,d(e,f),e}function k(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c}function l(a){for(var b="",c=0;4>c;c++)b+=q[a>>8*c+4&15]+q[a>>8*c&15];return b}function m(a){for(var b=0;b<a.length;b++)a[b]=l(a[b]);return a.join("")}function n(a){return m(j(a))}function o(a,b){return a+b&4294967295}function o(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}var p=a("../../util.js");b.exports=function(a){var b=n(a),c=p.hex2bin(b);return c};var q="0123456789abcdef".split("");"5d41402abc4b2a76b9719d911017c592"!=n("hello")},{"../../util.js":76}],30:[function(a,b,c){function d(a,b){return new Number(a<<b|a>>>32-b)}function e(a,b,c){return new Number(a^b^c)}function f(a,b,c){return new Number(a&b|~a&c)}function g(a,b,c){return new Number((a|~b)^c)}function h(a,b,c){return new Number(a&c|b&~c)}function i(a,b,c){return new Number(a^(b|~c))}function j(a,b,c,j,k,l,m,n){switch(n){case 0:a+=e(b,c,j)+l+0;break;case 1:a+=f(b,c,j)+l+1518500249;break;case 2:a+=g(b,c,j)+l+1859775393;break;case 3:a+=h(b,c,j)+l+2400959708;break;case 4:a+=i(b,c,j)+l+2840853838;break;case 5:a+=i(b,c,j)+l+1352829926;break;case 6:a+=h(b,c,j)+l+1548603684;break;case 7:a+=g(b,c,j)+l+1836072691;break;case 8:a+=f(b,c,j)+l+2053994217;break;case 9:a+=e(b,c,j)+l+0;break;default:throw new Error("Bogus round number")}a=d(a,m)+k,c=d(c,10),a&=4294967295,b&=4294967295,c&=4294967295,j&=4294967295,k&=4294967295;var o=[];return o[0]=a,o[1]=b,o[2]=c,o[3]=j,o[4]=k,o[5]=l,o[6]=m,o}function k(a){a[0]=1732584193,a[1]=4023233417,a[2]=2562383102,a[3]=271733878,a[4]=3285377520}function l(a,b){var c,d,e,f=[],g=[];for(d=0;5>d;d++)f[d]=new Number(a[d]),g[d]=new Number(a[d]);var h=0;for(e=0;5>e;e++)for(d=0;16>d;d++)c=j(f[(h+0)%5],f[(h+1)%5],f[(h+2)%5],f[(h+3)%5],f[(h+4)%5],b[t[e][d]],s[e][d],e),f[(h+0)%5]=c[0],f[(h+1)%5]=c[1],f[(h+2)%5]=c[2],f[(h+3)%5]=c[3],f[(h+4)%5]=c[4],h+=4;for(h=0,e=5;10>e;e++)for(d=0;16>d;d++)c=j(g[(h+0)%5],g[(h+1)%5],g[(h+2)%5],g[(h+3)%5],g[(h+4)%5],b[t[e][d]],s[e][d],e),g[(h+0)%5]=c[0],g[(h+1)%5]=c[1],g[(h+2)%5]=c[2],g[(h+3)%5]=c[3],g[(h+4)%5]=c[4],h+=4;g[3]+=f[2]+a[1],a[1]=a[2]+f[3]+g[4],a[2]=a[3]+f[4]+g[0],a[3]=a[4]+f[0]+g[1],a[4]=a[0]+f[1]+g[2],a[0]=g[3]}function m(a){for(var b=0;16>b;b++)a[b]=0}function n(a,b,c,d){var e=new Array(16);m(e);for(var f=0,g=0;(63&c)>g;g++)e[g>>>2]^=(255&b.charCodeAt(f++))<<8*(3&g);e[c>>>2&15]^=1<<8*(3&c)+7,(63&c)>55&&(l(a,e),e=new Array(16),m(e)),e[14]=c<<3,e[15]=c>>>29|d<<3,l(a,e)}function o(a){var b=(255&a.charCodeAt(3))<<24;return b|=(255&a.charCodeAt(2))<<16,b|=(255&a.charCodeAt(1))<<8,b|=255&a.charCodeAt(0)}function p(a){var b,c,d=new Array(r/32),e=new Array(r/8);k(d),b=a.length;var f=new Array(16);m(f);var g,h=0;for(c=b;c>63;c-=64){for(g=0;16>g;g++)f[g]=o(a.substr(h,4)),h+=4;l(d,f)}for(n(d,a.substr(h),b,0),g=0;r/8>g;g+=4)e[g]=255&d[g>>>2],e[g+1]=d[g>>>2]>>>8&255,e[g+2]=d[g>>>2]>>>16&255,e[g+3]=d[g>>>2]>>>24&255;return e}function q(a){for(var b=p(a),c="",d=0;r/8>d;d++)c+=String.fromCharCode(b[d]);return c}var r=160,s=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12],[11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5],[11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12],[9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6],[9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11],[9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5],[15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8],[8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]],t=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8],[3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12],[1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2],[4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12],[6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2],[15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13],[8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14],[12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]];b.exports=q},{}],31:[function(a,b,c){var d=function(){var a=8,b="",c=0,d=function(a,b){this.highOrder=a,this.lowOrder=b},e=function(b){var c,d=[],e=(1<<a)-1,f=b.length*a;for(c=0;f>c;c+=a)d[c>>5]|=(b.charCodeAt(c/a)&e)<<32-a-c%32;return d},f=function(a){var b,c,d=[],e=a.length;for(b=0;e>b;b+=2){if(c=parseInt(a.substr(b,2),16),isNaN(c))throw new Error("INVALID HEX STRING");d[b>>3]|=c<<24-4*(b%8)}return d},g=function(a){var b,d,e=c?"0123456789ABCDEF":"0123456789abcdef",f="",g=4*a.length;for(b=0;g>b;b+=1)d=a[b>>2]>>8*(3-b%4),f+=e.charAt(d>>4&15)+e.charAt(15&d);return f},h=function(a){var c,d,e,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",g="",h=4*a.length;for(c=0;h>c;c+=3)for(e=(a[c>>2]>>8*(3-c%4)&255)<<16|(a[c+1>>2]>>8*(3-(c+1)%4)&255)<<8|a[c+2>>2]>>8*(3-(c+2)%4)&255,d=0;4>d;d+=1)g+=8*c+6*d<=32*a.length?f.charAt(e>>6*(3-d)&63):b;return g},i=function(a){for(var b="",c=255,d=0;d<32*a.length;d+=8)b+=String.fromCharCode(a[d>>5]>>>24-d%32&c);return b},j=function(a,b){return a<<b|a>>>32-b},k=function(a,b){return a>>>b|a<<32-b},l=function(a,b){return 32>=b?new d(a.highOrder>>>b|a.lowOrder<<32-b,a.lowOrder>>>b|a.highOrder<<32-b):new d(a.lowOrder>>>b|a.highOrder<<32-b,a.highOrder>>>b|a.lowOrder<<32-b)},m=function(a,b){return a>>>b},n=function(a,b){return 32>=b?new d(a.highOrder>>>b,a.lowOrder>>>b|a.highOrder<<32-b):new d(0,a.highOrder<<32-b)},o=function(a,b,c){return a^b^c},p=function(a,b,c){return a&b^~a&c},q=function(a,b,c){return new d(a.highOrder&b.highOrder^~a.highOrder&c.highOrder,a.lowOrder&b.lowOrder^~a.lowOrder&c.lowOrder)},r=function(a,b,c){return a&b^a&c^b&c},s=function(a,b,c){return new d(a.highOrder&b.highOrder^a.highOrder&c.highOrder^b.highOrder&c.highOrder,a.lowOrder&b.lowOrder^a.lowOrder&c.lowOrder^b.lowOrder&c.lowOrder)},t=function(a){return k(a,2)^k(a,13)^k(a,22)},u=function(a){var b=l(a,28),c=l(a,34),e=l(a,39);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},v=function(a){return k(a,6)^k(a,11)^k(a,25)},w=function(a){var b=l(a,14),c=l(a,18),e=l(a,41);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},x=function(a){return k(a,7)^k(a,18)^m(a,3)},y=function(a){var b=l(a,1),c=l(a,8),e=n(a,7);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},z=function(a){return k(a,17)^k(a,19)^m(a,10)},A=function(a){var b=l(a,19),c=l(a,61),e=n(a,6);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},B=function(a,b){var c=(65535&a)+(65535&b),d=(a>>>16)+(b>>>16)+(c>>>16);return(65535&d)<<16|65535&c},C=function(a,b,c,d){var e=(65535&a)+(65535&b)+(65535&c)+(65535&d),f=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16);return(65535&f)<<16|65535&e},D=function(a,b,c,d,e){var f=(65535&a)+(65535&b)+(65535&c)+(65535&d)+(65535&e),g=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16)+(f>>>16);return(65535&g)<<16|65535&f},E=function(a,b){var c,e,f,g;return c=(65535&a.lowOrder)+(65535&b.lowOrder),e=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c>>>16),f=(65535&e)<<16|65535&c,c=(65535&a.highOrder)+(65535&b.highOrder)+(e>>>16),e=(a.highOrder>>>16)+(b.highOrder>>>16)+(c>>>16),g=(65535&e)<<16|65535&c,new d(g,f)},F=function(a,b,c,e){
+var f,g,h,i;return f=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder),g=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f>>>16),h=(65535&g)<<16|65535&f,f=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(g>>>16),g=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f>>>16),i=(65535&g)<<16|65535&f,new d(i,h)},G=function(a,b,c,e,f){var g,h,i,j;return g=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder)+(65535&f.lowOrder),h=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f.lowOrder>>>16)+(g>>>16),i=(65535&h)<<16|65535&g,g=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(65535&f.highOrder)+(h>>>16),h=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f.highOrder>>>16)+(g>>>16),j=(65535&h)<<16|65535&g,new d(j,i)},H=function(a,b){var c,d,e,f,g,h,i,k,l,m=[],n=p,q=o,s=r,t=j,u=B,v=D,w=[1732584193,4023233417,2562383102,271733878,3285377520],x=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];for(a[b>>5]|=128<<24-b%32,a[(b+65>>9<<4)+15]=b,l=a.length,i=0;l>i;i+=16){for(c=w[0],d=w[1],e=w[2],f=w[3],g=w[4],k=0;80>k;k+=1)16>k?m[k]=a[k+i]:m[k]=t(m[k-3]^m[k-8]^m[k-14]^m[k-16],1),h=20>k?v(t(c,5),n(d,e,f),g,x[k],m[k]):40>k?v(t(c,5),q(d,e,f),g,x[k],m[k]):60>k?v(t(c,5),s(d,e,f),g,x[k],m[k]):v(t(c,5),q(d,e,f),g,x[k],m[k]),g=f,f=e,e=t(d,30),d=c,c=h;w[0]=u(c,w[0]),w[1]=u(d,w[1]),w[2]=u(e,w[2]),w[3]=u(f,w[3]),w[4]=u(g,w[4])}return w},I=function(a,b,c){var e,f,g,h,i,j,k,l,m,n,o,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z=[];for("SHA-224"===c||"SHA-256"===c?(H=64,I=(b+65>>9<<4)+15,L=16,M=1,W=Number,N=B,O=C,P=D,Q=x,R=z,S=t,T=v,V=r,U=p,X=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],o="SHA-224"===c?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]):("SHA-384"===c||"SHA-512"===c)&&(H=80,I=(b+128>>10<<5)+31,L=32,M=2,W=d,N=E,O=F,P=G,Q=y,R=A,S=u,T=w,V=s,U=q,X=[new W(1116352408,3609767458),new W(1899447441,602891725),new W(3049323471,3964484399),new W(3921009573,2173295548),new W(961987163,4081628472),new W(1508970993,3053834265),new W(2453635748,2937671579),new W(2870763221,3664609560),new W(3624381080,2734883394),new W(310598401,1164996542),new W(607225278,1323610764),new W(1426881987,3590304994),new W(1925078388,4068182383),new W(2162078206,991336113),new W(2614888103,633803317),new W(3248222580,3479774868),new W(3835390401,2666613458),new W(4022224774,944711139),new W(264347078,2341262773),new W(604807628,2007800933),new W(770255983,1495990901),new W(1249150122,1856431235),new W(1555081692,3175218132),new W(1996064986,2198950837),new W(2554220882,3999719339),new W(2821834349,766784016),new W(2952996808,2566594879),new W(3210313671,3203337956),new W(3336571891,1034457026),new W(3584528711,2466948901),new W(113926993,3758326383),new W(338241895,168717936),new W(666307205,1188179964),new W(773529912,1546045734),new W(1294757372,1522805485),new W(1396182291,2643833823),new W(1695183700,2343527390),new W(1986661051,1014477480),new W(2177026350,1206759142),new W(2456956037,344077627),new W(2730485921,1290863460),new W(2820302411,3158454273),new W(3259730800,3505952657),new W(3345764771,106217008),new W(3516065817,3606008344),new W(3600352804,1432725776),new W(4094571909,1467031594),new W(275423344,851169720),new W(430227734,3100823752),new W(506948616,1363258195),new W(659060556,3750685593),new W(883997877,3785050280),new W(958139571,3318307427),new W(1322822218,3812723403),new W(1537002063,2003034995),new W(1747873779,3602036899),new W(1955562222,1575990012),new W(2024104815,1125592928),new W(2227730452,2716904306),new W(2361852424,442776044),new W(2428436474,593698344),new W(2756734187,3733110249),new W(3204031479,2999351573),new W(3329325298,3815920427),new W(3391569614,3928383900),new W(3515267271,566280711),new W(3940187606,3454069534),new W(4118630271,4000239992),new W(116418474,1914138554),new W(174292421,2731055270),new W(289380356,3203993006),new W(460393269,320620315),new W(685471733,587496836),new W(852142971,1086792851),new W(1017036298,365543100),new W(1126000580,2618297676),new W(1288033470,3409855158),new W(1501505948,4234509866),new W(1607167915,987167468),new W(1816402316,1246189591)],o="SHA-384"===c?[new W(3418070365,3238371032),new W(1654270250,914150663),new W(2438529370,812702999),new W(355462360,4144912697),new W(1731405415,4290775857),new W(41048885895,1750603025),new W(3675008525,1694076839),new W(1203062813,3204075428)]:[new W(1779033703,4089235720),new W(3144134277,2227873595),new W(1013904242,4271175723),new W(2773480762,1595750129),new W(1359893119,2917565137),new W(2600822924,725511199),new W(528734635,4215389547),new W(1541459225,327033209)]),a[b>>5]|=128<<24-b%32,a[I]=b,Y=a.length,J=0;Y>J;J+=L){for(e=o[0],f=o[1],g=o[2],h=o[3],i=o[4],j=o[5],k=o[6],l=o[7],K=0;H>K;K+=1)16>K?Z[K]=new W(a[K*M+J],a[K*M+J+1]):Z[K]=O(R(Z[K-2]),Z[K-7],Q(Z[K-15]),Z[K-16]),m=P(l,T(i),U(i,j,k),X[K],Z[K]),n=N(S(e),V(e,f,g)),l=k,k=j,j=i,i=N(h,m),h=g,g=f,f=e,e=N(m,n);o[0]=N(e,o[0]),o[1]=N(f,o[1]),o[2]=N(g,o[2]),o[3]=N(h,o[3]),o[4]=N(i,o[4]),o[5]=N(j,o[5]),o[6]=N(k,o[6]),o[7]=N(l,o[7])}switch(c){case"SHA-224":return[o[0],o[1],o[2],o[3],o[4],o[5],o[6]];case"SHA-256":return o;case"SHA-384":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder];case"SHA-512":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder,o[6].highOrder,o[6].lowOrder,o[7].highOrder,o[7].lowOrder];default:throw new Error("Unknown SHA variant")}},J=function(b,c){if(this.sha1=null,this.sha224=null,this.sha256=null,this.sha384=null,this.sha512=null,this.strBinLen=null,this.strToHash=null,"HEX"===c){if(0!==b.length%2)throw new Error("TEXT MUST BE IN BYTE INCREMENTS");this.strBinLen=4*b.length,this.strToHash=f(b)}else{if("ASCII"!==c&&"undefined"!=typeof c)throw new Error("UNKNOWN TEXT INPUT TYPE");this.strBinLen=b.length*a,this.strToHash=e(b)}};return J.prototype={getHash:function(a,b){var c=null,d=this.strToHash.slice();switch(b){case"HEX":c=g;break;case"B64":c=h;break;case"ASCII":c=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(a){case"SHA-1":return null===this.sha1&&(this.sha1=H(d,this.strBinLen)),c(this.sha1);case"SHA-224":return null===this.sha224&&(this.sha224=I(d,this.strBinLen,a)),c(this.sha224);case"SHA-256":return null===this.sha256&&(this.sha256=I(d,this.strBinLen,a)),c(this.sha256);case"SHA-384":return null===this.sha384&&(this.sha384=I(d,this.strBinLen,a)),c(this.sha384);case"SHA-512":return null===this.sha512&&(this.sha512=I(d,this.strBinLen,a)),c(this.sha512);default:throw new Error("HASH NOT RECOGNIZED")}},getHMAC:function(b,c,d,j){var k,l,m,n,o,p,q,r,s,t=[],u=[];switch(j){case"HEX":k=g;break;case"B64":k=h;break;case"ASCII":k=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(d){case"SHA-1":m=64,s=160;break;case"SHA-224":m=64,s=224;break;case"SHA-256":m=64,s=256;break;case"SHA-384":m=128,s=384;break;case"SHA-512":m=128,s=512;break;default:throw new Error("HASH NOT RECOGNIZED")}if("HEX"===c){if(0!==b.length%2)throw new Error("KEY MUST BE IN BYTE INCREMENTS");l=f(b),r=4*b.length}else{if("ASCII"!==c)throw new Error("UNKNOWN KEY INPUT TYPE");l=e(b),r=b.length*a}for(n=8*m,q=m/4-1,r/8>m?(l="SHA-1"===d?H(l,r):I(l,r,d),l[q]&=4294967040):m>r/8&&(l[q]&=4294967040),o=0;q>=o;o+=1)t[o]=909522486^l[o],u[o]=1549556828^l[o];return"SHA-1"===d?(p=H(t.concat(this.strToHash),n+this.strBinLen),p=H(u.concat(p),n+s)):(p=I(t.concat(this.strToHash),n+this.strBinLen,d),p=I(u.concat(p),n+s,d)),k(p)}},J}();b.exports={sha1:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-1","ASCII")},sha224:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-224","ASCII")},sha256:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-256","ASCII")},sha384:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-384","ASCII")},sha512:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-512","ASCII")}}},{}],32:[function(a,b,c){b.exports={cipher:a("./cipher"),hash:a("./hash"),cfb:a("./cfb.js"),publicKey:a("./public_key"),signature:a("./signature.js"),random:a("./random.js"),pkcs1:a("./pkcs1.js")};var d=a("./crypto.js");for(var e in d)b.exports[e]=d[e]},{"./cfb.js":18,"./cipher":23,"./crypto.js":25,"./hash":28,"./pkcs1.js":33,"./public_key":36,"./random.js":39,"./signature.js":40}],33:[function(a,b,c){function d(a){for(var b,c="";c.length<a;)b=f.getSecureRandomOctet(),0!==b&&(c+=String.fromCharCode(b));return c}var e=[];e[1]=[48,32,48,12,6,8,42,134,72,134,247,13,2,5,5,0,4,16],e[2]=[48,33,48,9,6,5,43,14,3,2,26,5,0,4,20],e[3]=[48,33,48,9,6,5,43,36,3,2,1,5,0,4,20],e[8]=[48,49,48,13,6,9,96,134,72,1,101,3,4,2,1,5,0,4,32],e[9]=[48,65,48,13,6,9,96,134,72,1,101,3,4,2,2,5,0,4,48],e[10]=[48,81,48,13,6,9,96,134,72,1,101,3,4,2,3,5,0,4,64],e[11]=[48,45,48,13,6,9,96,134,72,1,101,3,4,2,4,5,0,4,28];var f=(a("./crypto.js"),a("./random.js")),g=a("../util.js"),h=a("./public_key/jsbn.js"),i=a("./hash");b.exports={eme:{encode:function(a,b){var c=a.length;if(c>b-11)throw new Error("Message too long");var e=d(b-c-3),f=String.fromCharCode(0)+String.fromCharCode(2)+e+String.fromCharCode(0)+a;return f},decode:function(a){0!==a.charCodeAt(0)&&(a=String.fromCharCode(0)+a);for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=2;0!==a.charCodeAt(d)&&d<a.length;)d++;var e=d-2,f=a.charCodeAt(d++);if(0===b&&2===c&&e>=8&&0===f)return a.substr(d);throw new Error("Decryption error")}},emsa:{encode:function(a,b,c){var d,f=i.digest(a,b);if(f.length!==i.getHashByteLength(a))throw new Error("Invalid hash length");var j="";for(d=0;d<e[a].length;d++)j+=String.fromCharCode(e[a][d]);j+=f;var k=j.length;if(k+11>c)throw new Error("Intended encoded message length too short");var l="";for(d=0;c-k-3>d;d++)l+=String.fromCharCode(255);var m=String.fromCharCode(0)+String.fromCharCode(1)+l+String.fromCharCode(0)+j;return new h(g.hexstrdump(m),16)}}}},{"../util.js":76,"./crypto.js":25,"./hash":28,"./public_key/jsbn.js":37,"./random.js":39}],34:[function(a,b,c){function d(){function a(a,b,c,d,i,j){for(var k,l,m,n=h.getLeftNBits(g.digest(a,b),i.bitLength()),o=new e(h.hexstrdump(n),16);;)if(k=f.getRandomBigIntegerInRange(e.ONE,i.subtract(e.ONE)),l=c.modPow(k,d).mod(i),m=k.modInverse(i).multiply(o.add(j.multiply(l))).mod(i),0!=l&&0!=m)break;var p=[];return p[0]=l.toMPI(),p[1]=m.toMPI(),p}function b(a){var b=i.prefer_hash_algorithm;switch(Math.round(a.bitLength()/8)){case 20:return 2!=b&&b>11&&10!=b&&8>b?2:b;case 28:return b>11&&8>b?11:b;case 32:return b>10&&8>b?8:b;default:return h.print_debug("DSA select hash algorithm: returning null for an unknown length of q"),null}}function c(a,b,c,d,f,i,j,k){var l=h.getLeftNBits(g.digest(a,d),i.bitLength()),m=new e(h.hexstrdump(l),16);if(e.ZERO.compareTo(b)>=0||b.compareTo(i)>=0||e.ZERO.compareTo(c)>=0||c.compareTo(i)>=0)return h.print_debug("invalid DSA Signature"),null;var n=c.modInverse(i);if(0==e.ZERO.compareTo(n))return h.print_debug("invalid DSA Signature"),null;var o=m.multiply(n).mod(i),p=b.multiply(n).mod(i);return j.modPow(o,f).multiply(k.modPow(p,f)).mod(f).mod(i)}this.select_hash_algorithm=b,this.sign=a,this.verify=c}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../hash"),h=a("../../util.js"),i=a("../../config");b.exports=d},{"../../config":17,"../../util.js":76,"../hash":28,"../random.js":39,"./jsbn.js":37}],35:[function(a,b,c){function d(){function a(a,b,c,d){var g=c.subtract(e.TWO),h=f.getRandomBigIntegerInRange(e.ONE,g);h=h.mod(g).add(e.ONE);var i=[];return i[0]=b.modPow(h,c),i[1]=d.modPow(h,c).multiply(a).mod(c),i}function b(a,b,c,d){return g.print_debug("Elgamal Decrypt:\nc1:"+g.hexstrdump(a.toMPI())+"\nc2:"+g.hexstrdump(b.toMPI())+"\np:"+g.hexstrdump(c.toMPI())+"\nx:"+g.hexstrdump(d.toMPI())),a.modPow(d,c).modInverse(c).multiply(b).mod(c)}this.encrypt=a,this.decrypt=b}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../../util.js");b.exports=d},{"../../util.js":76,"../random.js":39,"./jsbn.js":37}],36:[function(a,b,c){b.exports={rsa:a("./rsa.js"),elgamal:a("./elgamal.js"),dsa:a("./dsa.js")}},{"./dsa.js":34,"./elgamal.js":35,"./rsa.js":38}],37:[function(a,b,c){function d(a,b,c){null!=a&&("number"==typeof a?this.fromNumber(a,b,c):null==b&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function e(){return new d(null)}function f(a,b,c,d,e,f){for(;--f>=0;){var g=b*this[a++]+c[d]+e;e=Math.floor(g/67108864),c[d++]=67108863&g}return e}function g(a){return fb.charAt(a)}function h(a,b){var c=gb[a.charCodeAt(b)];return null==c?-1:c}function i(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t,a.s=this.s}function j(a){this.t=1,this.s=0>a?-1:0,a>0?this[0]=a:-1>a?this[0]=a+this.DV:this.t=0}function k(a){var b=e();return b.fromInt(a),b}function l(a,b){var c;if(16==b)c=4;else if(8==b)c=3;else if(256==b)c=8;else if(2==b)c=1;else if(32==b)c=5;else{if(4!=b)return void this.fromRadix(a,b);c=2}this.t=0,this.s=0;for(var e=a.length,f=!1,g=0;--e>=0;){var i=8==c?255&a[e]:h(a,e);0>i?"-"==a.charAt(e)&&(f=!0):(f=!1,0==g?this[this.t++]=i:g+c>this.DB?(this[this.t-1]|=(i&(1<<this.DB-g)-1)<<g,this[this.t++]=i>>this.DB-g):this[this.t-1]|=i<<g,g+=c,g>=this.DB&&(g-=this.DB))}8==c&&0!=(128&a[0])&&(this.s=-1,g>0&&(this[this.t-1]|=(1<<this.DB-g)-1<<g)),this.clamp(),f&&d.ZERO.subTo(this,this)}function m(){for(var a=this.s&this.DM;this.t>0&&this[this.t-1]==a;)--this.t}function n(a){if(this.s<0)return"-"+this.negate().toString(a);var b;if(16==a)b=4;else if(8==a)b=3;else if(2==a)b=1;else if(32==a)b=5;else{if(4!=a)return this.toRadix(a);b=2}var c,d=(1<<b)-1,e=!1,f="",h=this.t,i=this.DB-h*this.DB%b;if(h-- >0)for(i<this.DB&&(c=this[h]>>i)>0&&(e=!0,f=g(c));h>=0;)b>i?(c=(this[h]&(1<<i)-1)<<b-i,c|=this[--h]>>(i+=this.DB-b)):(c=this[h]>>(i-=b)&d,0>=i&&(i+=this.DB,--h)),c>0&&(e=!0),e&&(f+=g(c));return e?f:"0"}function o(){var a=e();return d.ZERO.subTo(this,a),a}function p(){return this.s<0?this.negate():this}function q(a){var b=this.s-a.s;if(0!=b)return b;var c=this.t;if(b=c-a.t,0!=b)return this.s<0?-b:b;for(;--c>=0;)if(0!=(b=this[c]-a[c]))return b;return 0}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function s(){return this.t<=0?0:this.DB*(this.t-1)+r(this[this.t-1]^this.s&this.DM)}function t(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a,b.s=this.s}function u(a,b){for(var c=a;c<this.t;++c)b[c-a]=this[c];b.t=Math.max(this.t-a,0),b.s=this.s}function v(a,b){var c,d=a%this.DB,e=this.DB-d,f=(1<<e)-1,g=Math.floor(a/this.DB),h=this.s<<d&this.DM;for(c=this.t-1;c>=0;--c)b[c+g+1]=this[c]>>e|h,h=(this[c]&f)<<d;for(c=g-1;c>=0;--c)b[c]=0;b[g]=h,b.t=this.t+g+1,b.s=this.s,b.clamp()}function w(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)return void(b.t=0);var d=a%this.DB,e=this.DB-d,f=(1<<d)-1;b[0]=this[c]>>d;for(var g=c+1;g<this.t;++g)b[g-c-1]|=(this[g]&f)<<e,b[g-c]=this[g]>>d;d>0&&(b[this.t-c-1]|=(this.s&f)<<e),b.t=this.t-c,b.clamp()}function x(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);e>c;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d-=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d-=a[c],b[c++]=d&this.DM,d>>=this.DB;d-=a.s}b.s=0>d?-1:0,-1>d?b[c++]=this.DV+d:d>0&&(b[c++]=d),b.t=c,b.clamp()}function y(a,b){var c=this.abs(),e=a.abs(),f=c.t;for(b.t=f+e.t;--f>=0;)b[f]=0;for(f=0;f<e.t;++f)b[f+c.t]=c.am(0,e[f],b,f,0,c.t);b.s=0,b.clamp(),this.s!=a.s&&d.ZERO.subTo(b,b)}function z(a){for(var b=this.abs(),c=a.t=2*b.t;--c>=0;)a[c]=0;for(c=0;c<b.t-1;++c){var d=b.am(c,b[c],a,2*c,0,1);(a[c+b.t]+=b.am(c+1,2*b[c],a,2*c+1,d,b.t-c-1))>=b.DV&&(a[c+b.t]-=b.DV,a[c+b.t+1]=1)}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1)),a.s=0,a.clamp()}function A(a,b,c){var f=a.abs();if(!(f.t<=0)){var g=this.abs();if(g.t<f.t)return null!=b&&b.fromInt(0),void(null!=c&&this.copyTo(c));null==c&&(c=e());var h=e(),i=this.s,j=a.s,k=this.DB-r(f[f.t-1]);k>0?(f.lShiftTo(k,h),g.lShiftTo(k,c)):(f.copyTo(h),g.copyTo(c));var l=h.t,m=h[l-1];if(0!=m){var n=m*(1<<this.F1)+(l>1?h[l-2]>>this.F2:0),o=this.FV/n,p=(1<<this.F1)/n,q=1<<this.F2,s=c.t,t=s-l,u=null==b?e():b;for(h.dlShiftTo(t,u),c.compareTo(u)>=0&&(c[c.t++]=1,c.subTo(u,c)),d.ONE.dlShiftTo(l,u),u.subTo(h,h);h.t<l;)h[h.t++]=0;for(;--t>=0;){var v=c[--s]==m?this.DM:Math.floor(c[s]*o+(c[s-1]+q)*p);if((c[s]+=h.am(0,v,c,t,0,l))<v)for(h.dlShiftTo(t,u),c.subTo(u,c);c[s]<--v;)c.subTo(u,c)}null!=b&&(c.drShiftTo(l,b),i!=j&&d.ZERO.subTo(b,b)),c.t=l,c.clamp(),k>0&&c.rShiftTo(k,c),0>i&&d.ZERO.subTo(c,c)}}}function B(a){var b=e();return this.abs().divRemTo(a,null,b),this.s<0&&b.compareTo(d.ZERO)>0&&a.subTo(b,b),b}function C(a){this.m=a}function D(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function E(a){return a}function F(a){a.divRemTo(this.m,null,a)}function G(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function H(a,b){a.squareTo(b),this.reduce(b)}function I(){if(this.t<1)return 0;var a=this[0];if(0==(1&a))return 0;var b=3&a;return b=b*(2-(15&a)*b)&15,b=b*(2-(255&a)*b)&255,b=b*(2-((65535&a)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV,b>0?this.DV-b:-b}function J(a){this.m=a,this.mp=a.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<a.DB-15)-1,this.mt2=2*a.t}function K(a){var b=e();return a.abs().dlShiftTo(this.m.t,b),b.divRemTo(this.m,null,b),a.s<0&&b.compareTo(d.ZERO)>0&&this.m.subTo(b,b),b}function L(a){var b=e();return a.copyTo(b),this.reduce(b),b}function M(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b<this.m.t;++b){var c=32767&a[b],d=c*this.mpl+((c*this.mph+(a[b]>>15)*this.mpl&this.um)<<15)&a.DM;for(c=b+this.m.t,a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp(),a.drShiftTo(this.m.t,a),a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function N(a,b){a.squareTo(b),this.reduce(b)}function O(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function P(){return 0==(this.t>0?1&this[0]:this.s)}function Q(a,b){if(a>4294967295||1>a)return d.ONE;var c=e(),f=e(),g=b.convert(this),h=r(a)-1;for(g.copyTo(c);--h>=0;)if(b.sqrTo(c,f),(a&1<<h)>0)b.mulTo(f,g,c);else{var i=c;c=f,f=i}return b.revert(c)}function R(a,b){var c;return c=256>a||b.isEven()?new C(b):new J(b),this.exp(a,c)}function S(){var a=e();return this.copyTo(a),a}function T(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function U(){return 0==this.t?this.s:this[0]<<24>>24}function V(){return 0==this.t?this.s:this[0]<<16>>16}function W(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function X(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function Y(a){if(null==a&&(a=10),0==this.signum()||2>a||a>36)return"0";var b=this.chunkSize(a),c=Math.pow(a,b),d=k(c),f=e(),g=e(),h="";for(this.divRemTo(d,f,g);f.signum()>0;)h=(c+g.intValue()).toString(a).substr(1)+h,f.divRemTo(d,f,g);return g.intValue().toString(a)+h}function Z(a,b){this.fromInt(0),null==b&&(b=10);for(var c=this.chunkSize(b),e=Math.pow(b,c),f=!1,g=0,i=0,j=0;j<a.length;++j){var k=h(a,j);0>k?"-"==a.charAt(j)&&0==this.signum()&&(f=!0):(i=b*i+k,++g>=c&&(this.dMultiply(e),this.dAddOffset(i,0),g=0,i=0))}g>0&&(this.dMultiply(Math.pow(b,g)),this.dAddOffset(i,0)),f&&d.ZERO.subTo(this,this)}function $(a,b,c){if("number"==typeof b)if(2>a)this.fromInt(1);else for(this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(d.ONE.shiftLeft(a-1),ga,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(d.ONE.shiftLeft(a-1),this);else{var e=new Array,f=7&a;e.length=(a>>3)+1,b.nextBytes(e),f>0?e[0]&=(1<<f)-1:e[0]=0,this.fromString(e,256)}}function _(){var a=this.t,b=new Array;b[0]=this.s;var c,d=this.DB-a*this.DB%8,e=0;if(a-- >0)for(d<this.DB&&(c=this[a]>>d)!=(this.s&this.DM)>>d&&(b[e++]=c|this.s<<this.DB-d);a>=0;)8>d?(c=(this[a]&(1<<d)-1)<<8-d,c|=this[--a]>>(d+=this.DB-8)):(c=this[a]>>(d-=8)&255,0>=d&&(d+=this.DB,--a)),(e>0||c!=this.s)&&(b[e++]=c);return b}function aa(a){return 0==this.compareTo(a)}function ba(a){return this.compareTo(a)<0?this:a}function ca(a){return this.compareTo(a)>0?this:a}function da(a,b,c){var d,e,f=Math.min(a.t,this.t);for(d=0;f>d;++d)c[d]=b(this[d],a[d]);if(a.t<this.t){for(e=a.s&this.DM,d=f;d<this.t;++d)c[d]=b(this[d],e);c.t=this.t}else{for(e=this.s&this.DM,d=f;d<a.t;++d)c[d]=b(e,a[d]);c.t=a.t}c.s=b(this.s,a.s),c.clamp()}function ea(a,b){return a&b}function fa(a){var b=e();return this.bitwiseTo(a,ea,b),b}function ga(a,b){return a|b}function ha(a){var b=e();return this.bitwiseTo(a,ga,b),b}function ia(a,b){return a^b}function ja(a){var b=e();return this.bitwiseTo(a,ia,b),b}function ka(a,b){return a&~b}function la(a){var b=e();return this.bitwiseTo(a,ka,b),b}function ma(){for(var a=e(),b=0;b<this.t;++b)a[b]=this.DM&~this[b];return a.t=this.t,a.s=~this.s,a}function na(a){var b=e();return 0>a?this.rShiftTo(-a,b):this.lShiftTo(a,b),b}function oa(a){var b=e();return 0>a?this.lShiftTo(-a,b):this.rShiftTo(a,b),b}function pa(a){if(0==a)return-1;var b=0;return 0==(65535&a)&&(a>>=16,b+=16),0==(255&a)&&(a>>=8,b+=8),0==(15&a)&&(a>>=4,b+=4),0==(3&a)&&(a>>=2,b+=2),0==(1&a)&&++b,b}function qa(){for(var a=0;a<this.t;++a)if(0!=this[a])return a*this.DB+pa(this[a]);return this.s<0?this.t*this.DB:-1}function ra(a){for(var b=0;0!=a;)a&=a-1,++b;return b}function sa(){for(var a=0,b=this.s&this.DM,c=0;c<this.t;++c)a+=ra(this[c]^b);return a}function ta(a){var b=Math.floor(a/this.DB);return b>=this.t?0!=this.s:0!=(this[b]&1<<a%this.DB)}function ua(a,b){var c=d.ONE.shiftLeft(a);return this.bitwiseTo(c,b,c),c}function va(a){return this.changeBit(a,ga)}function wa(a){return this.changeBit(a,ka)}function xa(a){return this.changeBit(a,ia)}function ya(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);e>c;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d+=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d+=a[c],b[c++]=d&this.DM,d>>=this.DB;d+=a.s}b.s=0>d?-1:0,d>0?b[c++]=d:-1>d&&(b[c++]=this.DV+d),b.t=c,b.clamp()}function za(a){var b=e();return this.addTo(a,b),b}function Aa(a){var b=e();return this.subTo(a,b),b}function Ba(a){var b=e();return this.multiplyTo(a,b),b}function Ca(){var a=e();return this.squareTo(a),a}function Da(a){var b=e();return this.divRemTo(a,b,null),b}function Ea(a){var b=e();return this.divRemTo(a,null,b),b}function Fa(a){var b=e(),c=e();return this.divRemTo(a,b,c),new Array(b,c)}function Ga(a){this[this.t]=this.am(0,a-1,this,0,0,this.t),++this.t,this.clamp()}function Ha(a,b){if(0!=a){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function Ia(){}function Ja(a){return a}function Ka(a,b,c){a.multiplyTo(b,c)}function La(a,b){a.squareTo(b)}function Ma(a){return this.exp(a,new Ia)}function Na(a,b,c){var d=Math.min(this.t+a.t,b);for(c.s=0,c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;e>d;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);e>d;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function Oa(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d<a.t;++d)c[this.t+d-b]=this.am(b-d,a[d],c,0,0,this.t+d-b);c.clamp(),c.drShiftTo(1,c)}function Pa(a){this.r2=e(),this.q3=e(),d.ONE.dlShiftTo(2*a.t,this.r2),this.mu=this.r2.divide(a),this.m=a}function Qa(a){if(a.s<0||a.t>2*this.m.t)return a.mod(this.m);if(a.compareTo(this.m)<0)return a;var b=e();return a.copyTo(b),this.reduce(b),b}function Ra(a){return a}function Sa(a){for(a.drShiftTo(this.m.t-1,this.r2),a.t>this.m.t+1&&(a.t=this.m.t+1,a.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function Ta(a,b){a.squareTo(b),this.reduce(b)}function Ua(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function Va(a,b){var c,d,f=a.bitLength(),g=k(1);if(0>=f)return g;c=18>f?1:48>f?3:144>f?4:768>f?5:6,d=8>f?new C(b):b.isEven()?new Pa(b):new J(b);var h=new Array,i=3,j=c-1,l=(1<<c)-1;if(h[1]=d.convert(this),c>1){var m=e();for(d.sqrTo(h[1],m);l>=i;)h[i]=e(),d.mulTo(m,h[i-2],h[i]),i+=2}var n,o,p=a.t-1,q=!0,s=e();for(f=r(a[p])-1;p>=0;){for(f>=j?n=a[p]>>f-j&l:(n=(a[p]&(1<<f+1)-1)<<j-f,p>0&&(n|=a[p-1]>>this.DB+f-j)),i=c;0==(1&n);)n>>=1,--i;if((f-=i)<0&&(f+=this.DB,--p),q)h[n].copyTo(g),q=!1;else{for(;i>1;)d.sqrTo(g,s),d.sqrTo(s,g),i-=2;i>0?d.sqrTo(g,s):(o=g,g=s,s=o),d.mulTo(s,h[n],g)}for(;p>=0&&0==(a[p]&1<<f);)d.sqrTo(g,s),o=g,g=s,s=o,--f<0&&(f=this.DB-1,--p)}return d.revert(g)}function Wa(a){var b=this.s<0?this.negate():this.clone(),c=a.s<0?a.negate():a.clone();if(b.compareTo(c)<0){var d=b;b=c,c=d}var e=b.getLowestSetBit(),f=c.getLowestSetBit();if(0>f)return b;for(f>e&&(f=e),f>0&&(b.rShiftTo(f,b),c.rShiftTo(f,c));b.signum()>0;)(e=b.getLowestSetBit())>0&&b.rShiftTo(e,b),(e=c.getLowestSetBit())>0&&c.rShiftTo(e,c),b.compareTo(c)>=0?(b.subTo(c,b),b.rShiftTo(1,b)):(c.subTo(b,c),c.rShiftTo(1,c));return f>0&&c.lShiftTo(f,c),c}function Xa(a){if(0>=a)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(0==b)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}function Ya(a){var b=a.isEven();if(this.isEven()&&b||0==a.signum())return d.ZERO;for(var c=a.clone(),e=this.clone(),f=k(1),g=k(0),h=k(0),i=k(1);0!=c.signum();){for(;c.isEven();)c.rShiftTo(1,c),b?(f.isEven()&&g.isEven()||(f.addTo(this,f),g.subTo(a,g)),f.rShiftTo(1,f)):g.isEven()||g.subTo(a,g),g.rShiftTo(1,g);for(;e.isEven();)e.rShiftTo(1,e),b?(h.isEven()&&i.isEven()||(h.addTo(this,h),i.subTo(a,i)),h.rShiftTo(1,h)):i.isEven()||i.subTo(a,i),i.rShiftTo(1,i);c.compareTo(e)>=0?(c.subTo(e,c),b&&f.subTo(h,f),g.subTo(i,g)):(e.subTo(c,e),b&&h.subTo(f,h),i.subTo(g,i))}return 0!=e.compareTo(d.ONE)?d.ZERO:i.compareTo(a)>=0?i.subtract(a):i.signum()<0?(i.addTo(a,i),i.signum()<0?i.add(a):i):i}function Za(a){var b,c=this.abs();if(1==c.t&&c[0]<=hb[hb.length-1]){for(b=0;b<hb.length;++b)if(c[0]==hb[b])return!0;return!1}if(c.isEven())return!1;for(b=1;b<hb.length;){for(var d=hb[b],e=b+1;e<hb.length&&ib>d;)d*=hb[e++];for(d=c.modInt(d);e>b;)if(d%hb[b++]==0)return!1}return c.millerRabin(a)}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function $a(){var a=this.toByteArray(),b=8*(a.length-1)+r(a[0]),c="";return c+=String.fromCharCode((65280&b)>>8),c+=String.fromCharCode(255&b),c+=bb.bin2str(a)}function _a(a){var b=this.subtract(d.ONE),c=b.getLowestSetBit();if(0>=c)return!1;var f=b.shiftRight(c);a=a+1>>1,a>hb.length&&(a=hb.length);for(var g,h=e(),i=[],j=0;a>j;++j){for(;g=hb[Math.floor(Math.random()*hb.length)],-1!=i.indexOf(g););i.push(g),h.fromInt(g);var k=h.modPow(f,this);if(0!=k.compareTo(d.ONE)&&0!=k.compareTo(b)){for(var g=1;g++<c&&0!=k.compareTo(b);)if(k=k.modPowInt(2,this),0==k.compareTo(d.ONE))return!1;if(0!=k.compareTo(b))return!1}}return!0}var ab,bb=a("../../util.js");d.prototype.am=f,ab=26,d.prototype.DB=ab,d.prototype.DM=(1<<ab)-1,d.prototype.DV=1<<ab;var cb=52;d.prototype.FV=Math.pow(2,cb),d.prototype.F1=cb-ab,d.prototype.F2=2*ab-cb;var db,eb,fb="0123456789abcdefghijklmnopqrstuvwxyz",gb=new Array;for(db="0".charCodeAt(0),eb=0;9>=eb;++eb)gb[db++]=eb;for(db="a".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;for(db="A".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;C.prototype.convert=D,C.prototype.revert=E,C.prototype.reduce=F,C.prototype.mulTo=G,C.prototype.sqrTo=H,J.prototype.convert=K,J.prototype.revert=L,J.prototype.reduce=M,J.prototype.mulTo=O,J.prototype.sqrTo=N,d.prototype.copyTo=i,d.prototype.fromInt=j,d.prototype.fromString=l,d.prototype.clamp=m,d.prototype.dlShiftTo=t,d.prototype.drShiftTo=u,d.prototype.lShiftTo=v,d.prototype.rShiftTo=w,d.prototype.subTo=x,d.prototype.multiplyTo=y,d.prototype.squareTo=z,d.prototype.divRemTo=A,d.prototype.invDigit=I,d.prototype.isEven=P,d.prototype.exp=Q,d.prototype.toString=n,d.prototype.negate=o,d.prototype.abs=p,d.prototype.compareTo=q,d.prototype.bitLength=s,d.prototype.mod=B,d.prototype.modPowInt=R,d.ZERO=k(0),d.ONE=k(1),d.TWO=k(2),b.exports=d,Ia.prototype.convert=Ja,Ia.prototype.revert=Ja,Ia.prototype.mulTo=Ka,Ia.prototype.sqrTo=La,Pa.prototype.convert=Qa,Pa.prototype.revert=Ra,Pa.prototype.reduce=Sa,Pa.prototype.mulTo=Ua,Pa.prototype.sqrTo=Ta;var hb=[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],ib=(1<<26)/hb[hb.length-1],d=a("./jsbn.js");d.prototype.chunkSize=W,d.prototype.toRadix=Y,d.prototype.fromRadix=Z,d.prototype.fromNumber=$,d.prototype.bitwiseTo=da,d.prototype.changeBit=ua,d.prototype.addTo=ya,d.prototype.dMultiply=Ga,d.prototype.dAddOffset=Ha,d.prototype.multiplyLowerTo=Na,d.prototype.multiplyUpperTo=Oa,d.prototype.modInt=Xa,d.prototype.millerRabin=_a,d.prototype.clone=S,d.prototype.intValue=T,d.prototype.byteValue=U,d.prototype.shortValue=V,d.prototype.signum=X,d.prototype.toByteArray=_,d.prototype.equals=aa,d.prototype.min=ba,d.prototype.max=ca,d.prototype.and=fa,d.prototype.or=ha,d.prototype.xor=ja,d.prototype.andNot=la,d.prototype.not=ma,d.prototype.shiftLeft=na,d.prototype.shiftRight=oa,d.prototype.getLowestSetBit=qa,d.prototype.bitCount=sa,d.prototype.testBit=ta,d.prototype.setBit=va,d.prototype.clearBit=wa,d.prototype.flipBit=xa,d.prototype.add=za,d.prototype.subtract=Aa,d.prototype.multiply=Ba,d.prototype.divide=Da,d.prototype.remainder=Ea,d.prototype.divideAndRemainder=Fa,d.prototype.modPow=Va,d.prototype.modInverse=Ya,d.prototype.pow=Ma,d.prototype.gcd=Wa,d.prototype.isProbablePrime=Za,d.prototype.toMPI=$a,d.prototype.square=Ca},{"../../util.js":76,"./jsbn.js":37}],38:[function(a,b,c){function d(){function a(a){for(var b=0;b<a.length;b++)a[b]=j.getSecureRandomOctet();
+}this.nextBytes=a}function e(a,b,c){return m=m.bitLength()===b.bitLength()?m.square().mod(b):j.getRandomBigIntegerInRange(h.TWO,b),l=m.modInverse(b).modPow(c,b),a.multiply(l).mod(b)}function f(a,b){return a.multiply(m).mod(b)}function g(){function a(a,b,c,d,g,j,l){k.rsa_blinding&&(a=e(a,b,c));var m=a.mod(g).modPow(d.mod(g.subtract(h.ONE)),g),n=a.mod(j).modPow(d.mod(j.subtract(h.ONE)),j);i.print_debug("rsa.js decrypt\nxpn:"+i.hexstrdump(m.toMPI())+"\nxqn:"+i.hexstrdump(n.toMPI()));var o=n.subtract(m);return 0===o[0]?(o=m.subtract(n),o=o.multiply(l).mod(j),o=j.subtract(o)):o=o.multiply(l).mod(j),o=o.multiply(g).add(m),k.rsa_blinding&&(o=f(o,b)),o}function b(a,b,c){return a.modPowInt(b,c)}function c(a,b,c){return a.modPow(b,c)}function g(a,b,c){return a.modPowInt(b,c)}function j(){this.n=null,this.e=0,this.ee=null,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.u=null}function l(a,b){function c(a){var b=g.exportKey("jwk",a.privateKey);return"function"!=typeof b.then&&(b=f(b,"Error exporting RSA key pair.")),b}function e(a){function c(a){var b=a.replace(/\-/g,"+").replace(/_/g,"/"),c=i.hexstrdump(atob(b));return new h(c,16)}var d=new j;return d.n=c(a.n),d.ee=new h(b,16),d.d=c(a.d),d.p=c(a.p),d.q=c(a.q),d.u=d.p.modInverse(d.q),d}function f(a,b){return new Promise(function(c,d){a.onerror=function(a){d(new Error(b))},a.oncomplete=function(a){c(a.target.result)}})}var g=i.getWebCrypto();if(g){var k,l,m=new Uint32Array([parseInt(b,16)]),n=new Uint8Array(m.buffer);return window.crypto&&window.crypto.webkitSubtle?(k={name:"RSA-OAEP",modulusLength:a,publicExponent:n.subarray(0,3)},l=g.generateKey(k,!0,["encrypt","decrypt"])):(k={name:"RSASSA-PKCS1-v1_5",modulusLength:a,publicExponent:n.subarray(0,3),hash:{name:"SHA-1"}},l=g.generateKey(k,!0,["sign","verify"]),"function"!=typeof l.then&&(l=f(l,"Error generating RSA key pair."))),l.then(c).then(function(a){return e(a instanceof ArrayBuffer?JSON.parse(String.fromCharCode.apply(null,new Uint8Array(a))):a)})}return new Promise(function(c){var e=new j,f=new d,g=a>>1;for(e.e=parseInt(b,16),e.ee=new h(b,16);;){for(;e.p=new h(a-g,1,f),0!==e.p.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.p.isProbablePrime(10););for(;e.q=new h(g,1,f),0!==e.q.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.q.isProbablePrime(10););if(e.p.compareTo(e.q)<=0){var i=e.p;e.p=e.q,e.q=i}var k=e.p.subtract(h.ONE),l=e.q.subtract(h.ONE),m=k.multiply(l);if(0===m.gcd(e.ee).compareTo(h.ONE)){e.n=e.p.multiply(e.q),e.d=e.ee.modInverse(m),e.dmp1=e.d.mod(k),e.dmq1=e.d.mod(l),e.u=e.p.modInverse(e.q);break}}c(e)})}this.encrypt=b,this.decrypt=a,this.verify=g,this.sign=c,this.generate=l,this.keyObject=j}var h=a("./jsbn.js"),i=a("../../util.js"),j=a("../random.js"),k=a("../../config"),l=h.ZERO,m=h.ZERO;b.exports=g},{"../../config":17,"../../util.js":76,"../random.js":39,"./jsbn.js":37}],39:[function(a,b,c){function d(){this.buffer=null,this.size=null}var e=a("../type/mpi.js"),f=null;"undefined"==typeof window&&(f=a("crypto")),b.exports={getRandomBytes:function(a){for(var b="",c=0;a>c;c++)b+=String.fromCharCode(this.getSecureRandomOctet());return b},getSecureRandom:function(a,b){for(var c=this.getSecureRandomUint(),d=(b-a).toString(2).length;(c&Math.pow(2,d)-1)>b-a;)c=this.getSecureRandomUint();return a+Math.abs(c&Math.pow(2,d)-1)},getSecureRandomOctet:function(){var a=new Uint8Array(1);return this.getRandomValues(a),a[0]},getSecureRandomUint:function(){var a=new Uint8Array(4),b=new DataView(a.buffer);return this.getRandomValues(a),b.getUint32(0)},getRandomValues:function(a){if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if("undefined"!=typeof window&&window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(a);else if("undefined"!=typeof window&&"object"==typeof window.msCrypto&&"function"==typeof window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(a);else if(f){var b=f.randomBytes(a.length);a.set(b)}else{if(!this.randomBuffer.buffer)throw new Error("No secure random number generator available.");this.randomBuffer.get(a)}},getRandomBigInteger:function(a){if(1>a)throw new Error("Illegal parameter value: bits < 1");var b=Math.floor((a+7)/8),c=this.getRandomBytes(b);a%8>0&&(c=String.fromCharCode(Math.pow(2,a%8)-1&c.charCodeAt(0))+c.substring(1));var d=new e;return d.fromBytes(c),d.toBigInteger()},getRandomBigIntegerInRange:function(a,b){if(b.compareTo(a)<=0)throw new Error("Illegal parameter value: max <= min");for(var c=b.subtract(a),d=this.getRandomBigInteger(c.bitLength());d.compareTo(c)>0;)d=this.getRandomBigInteger(c.bitLength());return a.add(d)},randomBuffer:new d},d.prototype.init=function(a){this.buffer=new Uint8Array(a),this.size=0},d.prototype.set=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");var b=this.buffer.length-this.size;a.length>b&&(a=a.subarray(0,b)),this.buffer.set(a,this.size),this.size+=a.length},d.prototype.get=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if(this.size<a.length)throw new Error("Random number buffer depleted");for(var b=0;b<a.length;b++)a[b]=this.buffer[--this.size],this.buffer[this.size]=0}},{"../type/mpi.js":74,crypto:"crypto"}],40:[function(a,b,c){var d=a("./public_key"),e=a("./pkcs1.js");a("./hash");b.exports={verify:function(a,b,c,f,g){switch(a){case 1:case 2:case 3:var h=new d.rsa,i=f[0].toBigInteger(),j=f[0].byteLength(),k=f[1].toBigInteger(),l=c[0].toBigInteger(),m=h.verify(l,k,i),n=e.emsa.encode(b,g,j);return 0===m.compareTo(n);case 16:throw new Error("signing with Elgamal is not defined in the OpenPGP standard.");case 17:var o=new d.dsa,p=c[0].toBigInteger(),q=c[1].toBigInteger(),r=f[0].toBigInteger(),s=f[1].toBigInteger(),t=f[2].toBigInteger(),u=f[3].toBigInteger(),l=g,v=o.verify(b,p,q,l,r,s,t,u);return 0===v.compareTo(p);default:throw new Error("Invalid signature algorithm.")}},sign:function(a,b,c,f){var g;switch(b){case 1:case 2:case 3:var h=new d.rsa,i=c[2].toBigInteger(),j=c[0].toBigInteger();return g=e.emsa.encode(a,f,c[0].byteLength()),h.sign(g,i,j).toMPI();case 17:var k=new d.dsa,l=c[0].toBigInteger(),m=c[1].toBigInteger(),n=c[2].toBigInteger(),o=(c[3].toBigInteger(),c[4].toBigInteger());g=f;var p=k.sign(a,g,n,l,m,o);return p[0].toString()+p[1].toString();case 16:throw new Error("Signing with Elgamal is not defined in the OpenPGP standard.");default:throw new Error("Invalid signature algorithm.")}}}},{"./hash":28,"./pkcs1.js":33,"./public_key":36}],41:[function(a,b,c){function d(a){var b=/^-----BEGIN PGP (MESSAGE, PART \d+\/\d+|MESSAGE, PART \d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$\n/m,c=a.match(b);if(!c)throw new Error("Unknown ASCII armor type");return/MESSAGE, PART \d+\/\d+/.test(c[1])?o.armor.multipart_section:/MESSAGE, PART \d+/.test(c[1])?o.armor.multipart_last:/SIGNED MESSAGE/.test(c[1])?o.armor.signed:/MESSAGE/.test(c[1])?o.armor.message:/PUBLIC KEY BLOCK/.test(c[1])?o.armor.public_key:/PRIVATE KEY BLOCK/.test(c[1])?o.armor.private_key:void 0}function e(){var a="";return p.show_version&&(a+="Version: "+p.versionstring+"\r\n"),p.show_comment&&(a+="Comment: "+p.commentstring+"\r\n"),a+="\r\n"}function f(a){var b=h(a),c=""+String.fromCharCode(b>>16)+String.fromCharCode(b>>8&255)+String.fromCharCode(255&b);return n.encode(c)}function g(a,b){var c=f(a),d=b;return c[0]==d[0]&&c[1]==d[1]&&c[2]==d[2]&&c[3]==d[3]}function h(a){for(var b=11994318,c=0;a.length-c>16;)b=b<<8^q[255&(b>>16^a.charCodeAt(c))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+1))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+2))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+3))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+4))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+5))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+6))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+7))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+8))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+9))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+10))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+11))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+12))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+13))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+14))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+15))],c+=16;for(var d=c;d<a.length;d++)b=b<<8^q[255&(b>>16^a.charCodeAt(c++))];return 16777215&b}function i(a){var b=/^[ \f\r\t\u00a0\u2000-\u200a\u202f\u205f\u3000]*\n/m,c="",d=a,e=b.exec(a);if(null===e)throw new Error("Mandatory blank line missing between armor headers and armor data");return c=a.slice(0,e.index),d=a.slice(e.index+e[0].length),c=c.split("\n"),c.pop(),{headers:c,body:d}}function j(a){for(var b=0;b<a.length;b++)if(!/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(a[b]))throw new Error("Improperly formatted armor header: "+a[b])}function k(a){var b=/^=/m,c=a,d="",e=b.exec(a);return null!==e&&(c=a.slice(0,e.index),d=a.slice(e.index+1)),{body:c,checksum:d}}function l(a){var b=/^-----[^-]+-----$\n/m;a=a.replace(/[\t\r ]+\n/g,"\n");var c,e,h,l=d(a),m=a.split(b),o=1;if(a.search(b)!=m[0].length&&(o=0),2!=l){h=i(m[o]);var p=k(h.body);c={data:n.decode(p.body),headers:h.headers,type:l},e=p.checksum}else{h=i(m[o].replace(/^- /gm,""));var q=i(m[o+1].replace(/^- /gm,""));j(q.headers);var r=k(q.body);c={text:h.body.replace(/\n$/,"").replace(/\n/g,"\r\n"),data:n.decode(r.body),headers:h.headers,type:l},e=r.checksum}if(e=e.substr(0,4),!g(c.data,e))throw new Error("Ascii armor integrity check on message failed: '"+e+"' should be '"+f(c.data)+"'");return j(c.headers),c}function m(a,b,c,d){var g=[];switch(a){case o.armor.multipart_section:g.push("-----BEGIN PGP MESSAGE, PART "+c+"/"+d+"-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE, PART "+c+"/"+d+"-----\r\n");break;case o.armor.multipart_last:g.push("-----BEGIN PGP MESSAGE, PART "+c+"-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE, PART "+c+"-----\r\n");break;case o.armor.signed:g.push("\r\n-----BEGIN PGP SIGNED MESSAGE-----\r\n"),g.push("Hash: "+b.hash+"\r\n\r\n"),g.push(b.text.replace(/\n-/g,"\n- -")),g.push("\r\n-----BEGIN PGP SIGNATURE-----\r\n"),g.push(e()),g.push(n.encode(b.data)),g.push("\r\n="+f(b.data)+"\r\n"),g.push("-----END PGP SIGNATURE-----\r\n");break;case o.armor.message:g.push("-----BEGIN PGP MESSAGE-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP MESSAGE-----\r\n");break;case o.armor.public_key:g.push("-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP PUBLIC KEY BLOCK-----\r\n\r\n");break;case o.armor.private_key:g.push("-----BEGIN PGP PRIVATE KEY BLOCK-----\r\n"),g.push(e()),g.push(n.encode(b)),g.push("\r\n="+f(b)+"\r\n"),g.push("-----END PGP PRIVATE KEY BLOCK-----\r\n")}return g.join("")}var n=a("./base64.js"),o=a("../enums.js"),p=a("../config"),q=[0,8801531,25875725,17603062,60024545,51751450,35206124,44007191,128024889,120049090,103502900,112007375,70412248,78916387,95990485,88014382,264588937,256049778,240098180,248108927,207005800,215016595,232553829,224014750,140824496,149062475,166599357,157832774,200747345,191980970,176028764,184266919,520933865,529177874,512099556,503334943,480196360,471432179,487973381,496217854,414011600,405478443,422020573,430033190,457094705,465107658,448029500,439496647,281648992,273666971,289622637,298124950,324696449,333198714,315665548,307683447,392699481,401494690,383961940,375687087,352057528,343782467,359738805,368533838,1041867730,1050668841,1066628831,1058355748,1032471859,1024199112,1006669886,1015471301,968368875,960392720,942864358,951368477,975946762,984451313,1000411399,992435708,836562267,828023200,810956886,818967725,844041146,852051777,868605623,860066380,914189410,922427545,938981743,930215316,904825475,896059e3,878993294,887231349,555053627,563297984,547333942,538569677,579245274,570480673,588005847,596249900,649392898,640860153,658384399,666397428,623318499,631331096,615366894,606833685,785398962,777416777,794487231,802989380,759421523,767923880,751374174,743392165,695319947,704115056,687564934,679289981,719477610,711202705,728272487,737067676,2083735460,2092239711,2109313705,2101337682,2141233477,2133257662,2116711496,2125215923,2073216669,2064943718,2048398224,2057199467,2013339772,2022141063,2039215473,2030942602,1945504045,1936737750,1920785440,1929023707,1885728716,1893966647,1911503553,1902736954,1951893524,1959904495,1977441561,1968902626,2009362165,2000822798,1984871416,1992881923,1665111629,1673124534,1656046400,1647513531,1621913772,1613380695,1629922721,1637935450,1688082292,1679317903,1695859321,1704103554,1728967061,1737211246,1720132760,1711368291,1828378820,1820103743,1836060105,1844855090,1869168165,1877963486,1860430632,1852155859,1801148925,1809650950,1792118e3,1784135691,1757986588,1750004711,1765960209,1774462698,1110107254,1118611597,1134571899,1126595968,1102643863,1094667884,1077139354,1085643617,1166763343,1158490548,1140961346,1149762745,1176011694,1184812885,1200772771,1192499800,1307552511,1298785796,1281720306,1289958153,1316768798,1325007077,1341561107,1332794856,1246636998,1254647613,1271201483,1262662192,1239272743,1230733788,1213667370,1221678289,1562785183,1570797924,1554833554,1546300521,1588974462,1580441477,1597965939,1605978760,1518843046,1510078557,1527603627,1535847760,1494504007,1502748348,1486784330,1478020017,1390639894,1382365165,1399434779,1408230112,1366334967,1375129868,1358579962,1350304769,1430452783,1438955220,1422405410,1414423513,1456544974,1448562741,1465633219,1474135352];b.exports={encode:m,decode:l}},{"../config":17,"../enums.js":43,"./base64.js":42}],42:[function(a,b,c){function d(a,b){var c,d,e,g=b?b:[],h=0,i=0,j=a.length;for(e=0;j>e;e++)d=a.charCodeAt(e),0===i?(g.push(f.charAt(d>>2&63)),c=(3&d)<<4):1==i?(g.push(f.charAt(c|d>>4&15)),c=(15&d)<<2):2==i&&(g.push(f.charAt(c|d>>6&3)),h+=1,h%60===0&&g.push("\n"),g.push(f.charAt(63&d))),h+=1,h%60===0&&g.push("\n"),i+=1,3==i&&(i=0);return i>0&&(g.push(f.charAt(c)),h+=1,h%60===0&&g.push("\n"),g.push("="),h+=1),1==i&&(h%60===0&&g.push("\n"),g.push("=")),b?void 0:g.join("")}function e(a){var b,c,d=[],e=0,g=0,h=a.length;for(c=0;h>c;c++)b=f.indexOf(a.charAt(c)),b>=0&&(e&&d.push(String.fromCharCode(g|b>>6-e&255)),e=e+2&7,g=b<<e&255);return d.join("")}var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";b.exports={encode:d,decode:e}},{}],43:[function(a,b,c){"use strict";b.exports={s2k:{simple:0,salted:1,iterated:3,gnu:101},publicKey:{rsa_encrypt_sign:1,rsa_encrypt:2,rsa_sign:3,elgamal:16,dsa:17},symmetric:{plaintext:0,idea:1,tripledes:2,cast5:3,blowfish:4,aes128:7,aes192:8,aes256:9,twofish:10},compression:{uncompressed:0,zip:1,zlib:2,bzip2:3},hash:{md5:1,sha1:2,ripemd:3,sha256:8,sha384:9,sha512:10,sha224:11},packet:{publicKeyEncryptedSessionKey:1,signature:2,symEncryptedSessionKey:3,onePassSignature:4,secretKey:5,publicKey:6,secretSubkey:7,compressed:8,symmetricallyEncrypted:9,marker:10,literal:11,trust:12,userid:13,publicSubkey:14,userAttribute:17,symEncryptedIntegrityProtected:18,modificationDetectionCode:19},literal:{binary:"b".charCodeAt(),text:"t".charCodeAt(),utf8:"u".charCodeAt()},signature:{binary:0,text:1,standalone:2,cert_generic:16,cert_persona:17,cert_casual:18,cert_positive:19,cert_revocation:48,subkey_binding:24,key_binding:25,key:31,key_revocation:32,subkey_revocation:40,timestamp:64,third_party:80},signatureSubpacket:{signature_creation_time:2,signature_expiration_time:3,exportable_certification:4,trust_signature:5,regular_expression:6,revocable:7,key_expiration_time:9,placeholder_backwards_compatibility:10,preferred_symmetric_algorithms:11,revocation_key:12,issuer:16,notation_data:20,preferred_hash_algorithms:21,preferred_compression_algorithms:22,key_server_preferences:23,preferred_key_server:24,primary_user_id:25,policy_uri:26,key_flags:27,signers_user_id:28,reason_for_revocation:29,features:30,signature_target:31,embedded_signature:32},keyFlags:{certify_keys:1,sign_data:2,encrypt_communication:4,encrypt_storage:8,split_private_key:16,authentication:32,shared_private_key:128},keyStatus:{invalid:0,expired:1,revoked:2,valid:3,no_self_cert:4},armor:{multipart_section:0,multipart_last:1,signed:2,message:3,public_key:4,private_key:5},write:function(a,b){if("number"==typeof b&&(b=this.read(a,b)),void 0!==a[b])return a[b];throw new Error("Invalid enum value.")},read:function(a,b){for(var c in a)if(a[c]==b)return c;throw new Error("Invalid enum value.")}}},{}],44:[function(a,b,c){"use strict";function d(b){this._baseUrl=b?b:e.keyserver,this._fetch="undefined"!=typeof window?window.fetch:a("node-fetch")}b.exports=d;var e=a("../config");d.prototype.lookup=function(a){var b=this._baseUrl+"/pks/lookup?op=get&options=mr&search=",c=this._fetch;if(a.keyId)b+="0x"+encodeURIComponent(a.keyId);else{if(!a.query)throw new Error("You must provide a query parameter!");b+=encodeURIComponent(a.query)}return c(b).then(function(a){return 200===a.status?a.text():void 0}).then(function(a){return!a||a.indexOf("-----END PGP PUBLIC KEY BLOCK-----")<0?void 0:a.trim()})},d.prototype.upload=function(a){var b=this._baseUrl+"/pks/add",c=this._fetch;return c(b,{method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:"keytext="+encodeURIComponent(a)})}},{"../config":17,"node-fetch":"node-fetch"}],45:[function(a,b,c){b.exports=a("./hkp.js")},{"./hkp.js":44}],46:[function(a,b,c){"use strict";b.exports=a("./openpgp.js"),b.exports.key=a("./key.js"),b.exports.message=a("./message.js"),b.exports.cleartext=a("./cleartext.js"),b.exports.util=a("./util.js"),b.exports.packet=a("./packet"),b.exports.MPI=a("./type/mpi.js"),b.exports.S2K=a("./type/s2k.js"),b.exports.Keyid=a("./type/keyid.js"),b.exports.armor=a("./encoding/armor.js"),b.exports.enums=a("./enums.js"),b.exports.config=a("./config/config.js"),b.exports.crypto=a("./crypto"),b.exports.Keyring=a("./keyring"),b.exports.AsyncProxy=a("./worker/async_proxy.js"),b.exports.HKP=a("./hkp")},{"./cleartext.js":12,"./config/config.js":16,"./crypto":32,"./encoding/armor.js":41,"./enums.js":43,"./hkp":45,"./key.js":47,"./keyring":48,"./message.js":51,"./openpgp.js":52,"./packet":55,"./type/keyid.js":73,"./type/mpi.js":74,"./type/s2k.js":75,"./util.js":76,"./worker/async_proxy.js":77}],47:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);if(this.primaryKey=null,this.revocationSignature=null,this.directSignatures=null,this.users=null,this.subKeys=null,this.packetlist2structure(a),!this.primaryKey||!this.users)throw new Error("Invalid key: need at least key and user ID packet")}function e(a,b){return a.algorithm!==o.read(o.publicKey,o.publicKey.dsa)&&a.algorithm!==o.read(o.publicKey,o.publicKey.rsa_sign)&&(!b.keyFlags||0!==(b.keyFlags[0]&o.keyFlags.encrypt_communication)||0!==(b.keyFlags[0]&o.keyFlags.encrypt_storage))}function f(a,b){return!(a.algorithm!=o.read(o.publicKey,o.publicKey.dsa)&&a.algorithm!=o.read(o.publicKey,o.publicKey.rsa_sign)&&a.algorithm!=o.read(o.publicKey,o.publicKey.rsa_encrypt_sign)||b.keyFlags&&0===(b.keyFlags[0]&o.keyFlags.sign_data))}function g(a,b){return 3==a.version&&0!==a.expirationTimeV3?new Date(a.created.getTime()+24*a.expirationTimeV3*3600*1e3):4==a.version&&b.keyNeverExpires===!1?new Date(a.created.getTime()+1e3*b.keyExpirationTime):null}function h(a,b,c,d){a=a[c],a&&(b[c]?a.forEach(function(a){a.isExpired()||d&&!d(a)||b[c].some(function(b){return b.signature===a.signature})||b[c].push(a)}):b[c]=a)}function i(a){return this instanceof i?(this.userId=a.tag==o.packet.userid?a:null,this.userAttribute=a.tag==o.packet.userAttribute?a:null,this.selfCertifications=null,this.otherCertifications=null,void(this.revocationCertifications=null)):new i(a)}function j(a){return this instanceof j?(this.subKey=a,this.bindingSignature=null,void(this.revocationSignature=null)):new j(a)}function k(a){var b={};b.keys=[];try{var c=p.decode(a);if(c.type!=o.armor.public_key&&c.type!=o.armor.private_key)throw new Error("Armored text not of type key");var e=new n.List;e.read(c.data);var f=e.indexOfTag(o.packet.publicKey,o.packet.secretKey);if(0===f.length)throw new Error("No key packet found in armored text");for(var g=0;g<f.length;g++){var h=e.slice(f[g],f[g+1]);try{var i=new d(h);b.keys.push(i)}catch(j){b.err=b.err||[],b.err.push(j)}}}catch(j){b.err=b.err||[],b.err.push(j)}return b}function l(a){function b(){return g=new n.SecretKey,g.algorithm=o.read(o.publicKey,a.keyType),g.generate(a.numBits)}function c(){return k=new n.SecretSubkey,k.algorithm=o.read(o.publicKey,a.keyType),k.generate(a.numBits)}function e(){return a.passphrase&&(g.encrypt(a.passphrase),k.encrypt(a.passphrase)),f=new n.List,f.push(g),a.userId.forEach(function(b,c){h=new n.Userid,h.read(b),i={},i.userid=h,i.key=g,j=new n.Signature,j.signatureType=o.signature.cert_generic,j.publicKeyAlgorithm=a.keyType,j.hashAlgorithm=q.prefer_hash_algorithm,j.keyFlags=[o.keyFlags.certify_keys|o.keyFlags.sign_data],j.preferredSymmetricAlgorithms=[],j.preferredSymmetricAlgorithms.push(o.symmetric.aes256),j.preferredSymmetricAlgorithms.push(o.symmetric.aes192),j.preferredSymmetricAlgorithms.push(o.symmetric.aes128),j.preferredSymmetricAlgorithms.push(o.symmetric.cast5),j.preferredSymmetricAlgorithms.push(o.symmetric.tripledes),j.preferredHashAlgorithms=[],j.preferredHashAlgorithms.push(o.hash.sha256),j.preferredHashAlgorithms.push(o.hash.sha1),j.preferredHashAlgorithms.push(o.hash.sha512),j.preferredCompressionAlgorithms=[],j.preferredCompressionAlgorithms.push(o.compression.zlib),j.preferredCompressionAlgorithms.push(o.compression.zip),0===c&&(j.isPrimaryUserID=!0),q.integrity_protect&&(j.features=[],j.features.push(1)),j.sign(g,i),f.push(h),f.push(j)}),i={},i.key=g,i.bind=k,l=new n.Signature,l.signatureType=o.signature.subkey_binding,l.publicKeyAlgorithm=a.keyType,l.hashAlgorithm=q.prefer_hash_algorithm,l.keyFlags=[o.keyFlags.encrypt_communication|o.keyFlags.encrypt_storage],l.sign(g,i),f.push(k),f.push(l),a.unlocked||(g.clearPrivateMPIs(),k.clearPrivateMPIs()),new d(f)}var f,g,h,i,j,k,l;if(a.keyType=a.keyType||o.publicKey.rsa_encrypt_sign,a.keyType!==o.publicKey.rsa_encrypt_sign)throw new Error("Only RSA Encrypt or Sign supported");a.passphrase||(a.unlocked=!0),(String.prototype.isPrototypeOf(a.userId)||"string"==typeof a.userId)&&(a.userId=[a.userId]);var m=b(),p=c();return Promise.all([m,p]).then(e)}function m(a){for(var b={},c=0;c<a.length;c++){var d=a[c].getPrimaryUser();if(!d||!d.selfCertificate.preferredSymmetricAlgorithms)return q.encryption_cipher;d.selfCertificate.preferredSymmetricAlgorithms.forEach(function(a,c){var d=b[a]||(b[a]={prio:0,count:0,algo:a});d.prio+=64>>c,d.count++})}var e={prio:0,algo:q.encryption_cipher};for(var f in b)try{f!==o.symmetric.plaintext&&f!==o.symmetric.idea&&o.read(o.symmetric,f)&&b[f].count===a.length&&b[f].prio>e.prio&&(e=b[f])}catch(g){}return e.algo}var n=a("./packet"),o=a("./enums.js"),p=a("./encoding/armor.js"),q=a("./config"),r=a("./util");d.prototype.packetlist2structure=function(a){for(var b,c,d,e=0;e<a.length;e++)switch(a[e].tag){case o.packet.publicKey:case o.packet.secretKey:this.primaryKey=a[e],c=this.primaryKey.getKeyId();break;case o.packet.userid:case o.packet.userAttribute:b=new i(a[e]),this.users||(this.users=[]),this.users.push(b);break;case o.packet.publicSubkey:case o.packet.secretSubkey:b=null,this.subKeys||(this.subKeys=[]),d=new j(a[e]),this.subKeys.push(d);break;case o.packet.signature:switch(a[e].signatureType){case o.signature.cert_generic:case o.signature.cert_persona:case o.signature.cert_casual:case o.signature.cert_positive:if(!b){r.print_debug("Dropping certification signatures without preceding user packet");continue}a[e].issuerKeyId.equals(c)?(b.selfCertifications||(b.selfCertifications=[]),b.selfCertifications.push(a[e])):(b.otherCertifications||(b.otherCertifications=[]),b.otherCertifications.push(a[e]));break;case o.signature.cert_revocation:b?(b.revocationCertifications||(b.revocationCertifications=[]),b.revocationCertifications.push(a[e])):(this.directSignatures||(this.directSignatures=[]),this.directSignatures.push(a[e]));break;case o.signature.key:this.directSignatures||(this.directSignatures=[]),this.directSignatures.push(a[e]);break;case o.signature.subkey_binding:if(!d){r.print_debug("Dropping subkey binding signature without preceding subkey packet");continue}d.bindingSignature=a[e];break;case o.signature.key_revocation:this.revocationSignature=a[e];break;case o.signature.subkey_revocation:if(!d){r.print_debug("Dropping subkey revocation signature without preceding subkey packet");continue}d.revocationSignature=a[e]}}},d.prototype.toPacketlist=function(){var a=new n.List;a.push(this.primaryKey),a.push(this.revocationSignature),a.concat(this.directSignatures);var b;for(b=0;b<this.users.length;b++)a.concat(this.users[b].toPacketlist());if(this.subKeys)for(b=0;b<this.subKeys.length;b++)a.concat(this.subKeys[b].toPacketlist());return a},d.prototype.getSubkeyPackets=function(){var a=[];if(this.subKeys)for(var b=0;b<this.subKeys.length;b++)a.push(this.subKeys[b].subKey);return a},d.prototype.getAllKeyPackets=function(){return[this.primaryKey].concat(this.getSubkeyPackets())},d.prototype.getKeyIds=function(){for(var a=[],b=this.getAllKeyPackets(),c=0;c<b.length;c++)a.push(b[c].getKeyId());return a},d.prototype.getKeyPacket=function(a){for(var b=this.getAllKeyPackets(),c=0;c<b.length;c++)for(var d=b[c].getKeyId(),e=0;e<a.length;e++)if(d.equals(a[e]))return b[c];return null},d.prototype.getUserIds=function(){for(var a=[],b=0;b<this.users.length;b++)this.users[b].userId&&a.push(this.users[b].userId.write());return a},d.prototype.isPublic=function(){return this.primaryKey.tag==o.packet.publicKey},d.prototype.isPrivate=function(){return this.primaryKey.tag==o.packet.secretKey},d.prototype.toPublic=function(){for(var a,b=new n.List,c=this.toPacketlist(),e=0;e<c.length;e++)switch(c[e].tag){case o.packet.secretKey:a=c[e].writePublicKey();var f=new n.PublicKey;f.read(a),b.push(f);break;case o.packet.secretSubkey:a=c[e].writePublicKey();var g=new n.PublicSubkey;g.read(a),b.push(g);break;default:b.push(c[e])}return new d(b)},d.prototype.armor=function(){var a=this.isPublic()?o.armor.public_key:o.armor.private_key;return p.encode(a,this.toPacketlist().write())},d.prototype.getSigningKeyPacket=function(a){var b=this.getPrimaryUser();if(b&&f(this.primaryKey,b.selfCertificate)&&(!a||this.primaryKey.getKeyId().equals(a)))return this.primaryKey;if(this.subKeys)for(var c=0;c<this.subKeys.length;c++)if(this.subKeys[c].isValidSigningKey(this.primaryKey)&&(!a||this.subKeys[c].subKey.getKeyId().equals(a)))return this.subKeys[c].subKey;return null},d.prototype.getPreferredHashAlgorithm=function(){var a=this.getPrimaryUser();return a&&a.selfCertificate.preferredHashAlgorithms?a.selfCertificate.preferredHashAlgorithms[0]:q.prefer_hash_algorithm},d.prototype.getEncryptionKeyPacket=function(){if(this.subKeys)for(var a=0;a<this.subKeys.length;a++)if(this.subKeys[a].isValidEncryptionKey(this.primaryKey))return this.subKeys[a].subKey;var b=this.getPrimaryUser();return b&&e(this.primaryKey,b.selfCertificate)?this.primaryKey:null},d.prototype.decrypt=function(a){if(!this.isPrivate())throw new Error("Nothing to decrypt in a public key");for(var b=this.getAllKeyPackets(),c=0;c<b.length;c++){var d=b[c].decrypt(a);if(!d)return!1}return!0},d.prototype.decryptKeyPacket=function(a,b){if(!this.isPrivate())throw new Error("Nothing to decrypt in a public key");for(var c=this.getAllKeyPackets(),d=0;d<c.length;d++)for(var e=c[d].getKeyId(),f=0;f<a.length;f++)if(e.equals(a[f])){var g=c[d].decrypt(b);if(!g)return!1}return!0},d.prototype.verifyPrimaryKey=function(){if(this.revocationSignature&&!this.revocationSignature.isExpired()&&(this.revocationSignature.verified||this.revocationSignature.verify(this.primaryKey,{key:this.primaryKey})))return o.keyStatus.revoked;if(3==this.primaryKey.version&&0!==this.primaryKey.expirationTimeV3&&Date.now()>this.primaryKey.created.getTime()+24*this.primaryKey.expirationTimeV3*3600*1e3)return o.keyStatus.expired;for(var a=!1,b=0;b<this.users.length;b++)this.users[b].userId&&this.users[b].selfCertifications&&(a=!0);if(!a)return o.keyStatus.no_self_cert;var c=this.getPrimaryUser();return c?4==this.primaryKey.version&&c.selfCertificate.keyNeverExpires===!1&&Date.now()>this.primaryKey.created.getTime()+1e3*c.selfCertificate.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid},d.prototype.getExpirationTime=function(){if(3==this.primaryKey.version)return g(this.primaryKey);if(4==this.primaryKey.version){var a=this.getPrimaryUser();return a?g(this.primaryKey,a.selfCertificate):null}},d.prototype.getPrimaryUser=function(){for(var a=[],b=0;b<this.users.length;b++)if(this.users[b].userId&&this.users[b].selfCertifications)for(var c=0;c<this.users[b].selfCertifications.length;c++)a.push({user:this.users[b],selfCertificate:this.users[b].selfCertifications[c]});a=a.sort(function(a,b){return a.selfCertificate.isPrimaryUserID>b.selfCertificate.isPrimaryUserID?-1:a.selfCertificate.isPrimaryUserID<b.selfCertificate.isPrimaryUserID?1:a.selfCertificate.created>b.selfCertificate.created?-1:a.selfCertificate.created<b.selfCertificate.created?1:0});for(var b=0;b<a.length;b++)if(a[b].user.isValidSelfCertificate(this.primaryKey,a[b].selfCertificate))return a[b];return null},d.prototype.update=function(a){var b=this;if(a.verifyPrimaryKey()!==o.keyStatus.invalid){if(this.primaryKey.getFingerprint()!==a.primaryKey.getFingerprint())throw new Error("Key update method: fingerprints of keys not equal");if(this.isPublic()&&a.isPrivate()){var c=(this.subKeys&&this.subKeys.length)===(a.subKeys&&a.subKeys.length)&&(!this.subKeys||this.subKeys.every(function(b){return a.subKeys.some(function(a){return b.subKey.getFingerprint()===a.subKey.getFingerprint()})}));if(!c)throw new Error("Cannot update public key with private key if subkey mismatch");this.primaryKey=a.primaryKey}this.revocationSignature||!a.revocationSignature||a.revocationSignature.isExpired()||!a.revocationSignature.verified&&!a.revocationSignature.verify(a.primaryKey,{key:a.primaryKey})||(this.revocationSignature=a.revocationSignature),h(a,this,"directSignatures"),a.users.forEach(function(a){for(var c=!1,d=0;d<b.users.length;d++)if(a.userId&&a.userId.userid===b.users[d].userId.userid||a.userAttribute&&a.userAttribute.equals(b.users[d].userAttribute)){b.users[d].update(a,b.primaryKey),c=!0;break}c||b.users.push(a)}),a.subKeys&&a.subKeys.forEach(function(a){for(var c=!1,d=0;d<b.subKeys.length;d++)if(a.subKey.getFingerprint()===b.subKeys[d].subKey.getFingerprint()){b.subKeys[d].update(a,b.primaryKey),c=!0;break}c||b.subKeys.push(a)})}},d.prototype.revoke=function(){},i.prototype.toPacketlist=function(){var a=new n.List;return a.push(this.userId||this.userAttribute),a.concat(this.revocationCertifications),a.concat(this.selfCertifications),a.concat(this.otherCertifications),a},i.prototype.isRevoked=function(a,b){if(this.revocationCertifications){var c=this;return this.revocationCertifications.some(function(d){return d.issuerKeyId.equals(a.issuerKeyId)&&!d.isExpired()&&(d.verified||d.verify(b,{userid:c.userId||c.userAttribute,key:b}))})}return!1},i.prototype.getValidSelfCertificate=function(a){if(!this.selfCertifications)return null;for(var b=this.selfCertifications.sort(function(a,b){return a=a.created,b=b.created,a>b?-1:b>a?1:0}),c=0;c<b.length;c++)if(this.isValidSelfCertificate(a,b[c]))return b[c];return null},i.prototype.isValidSelfCertificate=function(a,b){return this.isRevoked(b,a)?!1:b.isExpired()||!b.verified&&!b.verify(a,{userid:this.userId||this.userAttribute,key:a})?!1:!0},i.prototype.verify=function(a){if(!this.selfCertifications)return o.keyStatus.no_self_cert;for(var b,c=0;c<this.selfCertifications.length;c++)if(this.isRevoked(this.selfCertifications[c],a))b=o.keyStatus.revoked;else if(this.selfCertifications[c].verified||this.selfCertifications[c].verify(a,{userid:this.userId||this.userAttribute,
+key:a})){if(!this.selfCertifications[c].isExpired()){b=o.keyStatus.valid;break}b=o.keyStatus.expired}else b=o.keyStatus.invalid;return b},i.prototype.update=function(a,b){var c=this;h(a,this,"selfCertifications",function(a){return a.verified||a.verify(b,{userid:c.userId||c.userAttribute,key:b})}),h(a,this,"otherCertifications"),h(a,this,"revocationCertifications")},j.prototype.toPacketlist=function(){var a=new n.List;return a.push(this.subKey),a.push(this.revocationSignature),a.push(this.bindingSignature),a},j.prototype.isValidEncryptionKey=function(a){return this.verify(a)==o.keyStatus.valid&&e(this.subKey,this.bindingSignature)},j.prototype.isValidSigningKey=function(a){return this.verify(a)==o.keyStatus.valid&&f(this.subKey,this.bindingSignature)},j.prototype.verify=function(a){return this.revocationSignature&&!this.revocationSignature.isExpired()&&(this.revocationSignature.verified||this.revocationSignature.verify(a,{key:a,bind:this.subKey}))?o.keyStatus.revoked:3==this.subKey.version&&0!==this.subKey.expirationTimeV3&&Date.now()>this.subKey.created.getTime()+24*this.subKey.expirationTimeV3*3600*1e3?o.keyStatus.expired:this.bindingSignature?this.bindingSignature.isExpired()?o.keyStatus.expired:this.bindingSignature.verified||this.bindingSignature.verify(a,{key:a,bind:this.subKey})?4==this.subKey.version&&this.bindingSignature.keyNeverExpires===!1&&Date.now()>this.subKey.created.getTime()+1e3*this.bindingSignature.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid:o.keyStatus.invalid},j.prototype.getExpirationTime=function(){return g(this.subKey,this.bindingSignature)},j.prototype.update=function(a,b){if(a.verify(b)!==o.keyStatus.invalid){if(this.subKey.getFingerprint()!==a.subKey.getFingerprint())throw new Error("SubKey update method: fingerprints of subkeys not equal");this.subKey.tag===o.packet.publicSubkey&&a.subKey.tag===o.packet.secretSubkey&&(this.subKey=a.subKey),!this.bindingSignature&&a.bindingSignature&&(a.bindingSignature.verified||a.bindingSignature.verify(b,{key:b,bind:this.subKey}))&&(this.bindingSignature=a.bindingSignature),this.revocationSignature||!a.revocationSignature||a.revocationSignature.isExpired()||!a.revocationSignature.verified&&!a.revocationSignature.verify(b,{key:b,bind:this.subKey})||(this.revocationSignature=a.revocationSignature)}},c.Key=d,c.readArmored=k,c.generate=l,c.getPreferredSymAlgo=m},{"./config":17,"./encoding/armor.js":41,"./enums.js":43,"./packet":55,"./util":76}],48:[function(a,b,c){b.exports=a("./keyring.js"),b.exports.localstore=a("./localstore.js")},{"./keyring.js":49,"./localstore.js":50}],49:[function(a,b,c){function d(b){this.storeHandler=b||new(a("./localstore.js")),this.publicKeys=new e(this.storeHandler.loadPublic()),this.privateKeys=new e(this.storeHandler.loadPrivate())}function e(a){this.keys=a}function f(a,b){a=a.toLowerCase();for(var c=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp("<"+c+">"),e=b.getUserIds(),f=0;f<e.length;f++){var g=e[f].toLowerCase();if(a===g||d.test(g))return!0}return!1}function g(a,b){return 16===a.length?a===b.getKeyId().toHex():a===b.getFingerprint()}var h=(a("../enums.js"),a("../key.js"));a("../util.js");b.exports=d,d.prototype.store=function(){this.storeHandler.storePublic(this.publicKeys.keys),this.storeHandler.storePrivate(this.privateKeys.keys)},d.prototype.clear=function(){this.publicKeys.keys=[],this.privateKeys.keys=[]},d.prototype.getKeysForId=function(a,b){var c=[];return c=c.concat(this.publicKeys.getForId(a,b)||[]),c=c.concat(this.privateKeys.getForId(a,b)||[]),c.length?c:null},d.prototype.removeKeysForId=function(a){var b=[];return b=b.concat(this.publicKeys.removeForId(a)||[]),b=b.concat(this.privateKeys.removeForId(a)||[]),b.length?b:null},d.prototype.getAllKeys=function(){return this.publicKeys.keys.concat(this.privateKeys.keys)},e.prototype.getForAddress=function(a){for(var b=[],c=0;c<this.keys.length;c++)f(a,this.keys[c])&&b.push(this.keys[c]);return b},e.prototype.getForId=function(a,b){for(var c=0;c<this.keys.length;c++){if(g(a,this.keys[c].primaryKey))return this.keys[c];if(b&&this.keys[c].subKeys)for(var d=0;d<this.keys[c].subKeys.length;d++)if(g(a,this.keys[c].subKeys[d].subKey))return this.keys[c]}return null},e.prototype.importKey=function(a){var b=h.readArmored(a),c=this;return b.keys.forEach(function(a){var b=a.primaryKey.getKeyId().toHex(),d=c.getForId(b);d?d.update(a):c.push(a)}),b.err?b.err:null},e.prototype.push=function(a){return this.keys.push(a)},e.prototype.removeForId=function(a){for(var b=0;b<this.keys.length;b++)if(g(a,this.keys[b].primaryKey))return this.keys.splice(b,1)[0];return null}},{"../enums.js":43,"../key.js":47,"../util.js":76,"./localstore.js":50}],50:[function(a,b,c){function d(b){b=b||"openpgp-",this.publicKeysItem=b+this.publicKeysItem,this.privateKeysItem=b+this.privateKeysItem,"undefined"!=typeof window&&window.localStorage?this.storage=window.localStorage:this.storage=new(a("node-localstorage").LocalStorage)(g.node_store)}function e(a,b){var c=JSON.parse(a.getItem(b)),d=[];if(null!==c&&0!==c.length)for(var e,f=0;f<c.length;f++)e=h.readArmored(c[f]),e.err?i.print_debug("Error reading armored key from keyring index: "+f):d.push(e.keys[0]);return d}function f(a,b,c){var d=[];if(c.length){for(var e=0;e<c.length;e++)d.push(c[e].armor());a.setItem(b,JSON.stringify(d))}else a.removeItem(b)}b.exports=d;var g=a("../config"),h=a("../key.js"),i=a("../util.js");d.prototype.publicKeysItem="public-keys",d.prototype.privateKeysItem="private-keys",d.prototype.loadPublic=function(){return e(this.storage,this.publicKeysItem)},d.prototype.loadPrivate=function(){return e(this.storage,this.privateKeysItem)},d.prototype.storePublic=function(a){f(this.storage,this.publicKeysItem,a)},d.prototype.storePrivate=function(a){f(this.storage,this.privateKeysItem,a)}},{"../config":17,"../key.js":47,"../util.js":76,"node-localstorage":"node-localstorage"}],51:[function(a,b,c){"use strict";function d(a){return this instanceof d?void(this.packets=a||new i.List):new d(a)}function e(a){var b=k.decode(a).data,c=new i.List;return c.read(b),new d(c)}function f(a,b){var c=new i.Literal;c.setBytes(a,j.read(j.literal,j.literal.binary));var e=new i.List;e.push(c);var f=k.decode(b).data;return e.read(f),new d(e)}function g(a){var b=new i.Literal;b.setText(a);var c=new i.List;return c.push(b),new d(c)}function h(a,b){var c=new i.Literal;b&&c.setFilename(b),c.setBytes(a,j.read(j.literal,j.literal.binary));var e=new i.List;return e.push(c),new d(e)}var i=a("./packet"),j=a("./enums.js"),k=a("./encoding/armor.js"),l=a("./config"),m=a("./crypto"),n=a("./key.js");d.prototype.getEncryptionKeyIds=function(){var a=[],b=this.packets.filterByTag(j.packet.publicKeyEncryptedSessionKey);return b.forEach(function(b){a.push(b.publicKeyId)}),a},d.prototype.getSigningKeyIds=function(){var a=[],b=this.unwrapCompressed(),c=b.packets.filterByTag(j.packet.onePassSignature);if(c.forEach(function(b){a.push(b.signingKeyId)}),!a.length){var d=b.packets.filterByTag(j.packet.signature);d.forEach(function(b){a.push(b.issuerKeyId)})}return a},d.prototype.decrypt=function(a){var b=this.getEncryptionKeyIds();if(!b.length)return this;var c=a.getKeyPacket(b);if(!c.isDecrypted)throw new Error("Private key is not decrypted.");for(var e,f=this.packets.filterByTag(j.packet.publicKeyEncryptedSessionKey),g=0;g<f.length;g++)if(f[g].publicKeyId.equals(c.getKeyId())){e=f[g],e.decrypt(c);break}if(e){var h=this.packets.filterByTag(j.packet.symmetricallyEncrypted,j.packet.symEncryptedIntegrityProtected);if(0!==h.length){var k=h[0];k.decrypt(e.sessionKeyAlgorithm,e.sessionKey);var l=new d(k.packets);return k.packets=new i.List,l}}},d.prototype.getLiteralData=function(){var a=this.packets.findPacket(j.packet.literal);return a&&a.data||null},d.prototype.getFilename=function(){var a=this.packets.findPacket(j.packet.literal);return a&&a.getFilename()||null},d.prototype.getText=function(){var a=this.packets.findPacket(j.packet.literal);return a?a.getText():null},d.prototype.encrypt=function(a){var b=new i.List,c=n.getPreferredSymAlgo(a),e=m.generateSessionKey(j.read(j.symmetric,c));a.forEach(function(a){var d=a.getEncryptionKeyPacket();if(!d)throw new Error("Could not find valid key packet for encryption in key "+a.primaryKey.getKeyId().toHex());var f=new i.PublicKeyEncryptedSessionKey;f.publicKeyId=d.getKeyId(),f.publicKeyAlgorithm=d.algorithm,f.sessionKey=e,f.sessionKeyAlgorithm=j.read(j.symmetric,c),f.encrypt(d),b.push(f)});var f;return f=l.integrity_protect?new i.SymEncryptedIntegrityProtected:new i.SymmetricallyEncrypted,f.packets=this.packets,f.encrypt(j.read(j.symmetric,c),e),b.push(f),f.packets=new i.List,new d(b)},d.prototype.symEncrypt=function(a){if(!a)throw new Error("The passphrase cannot be empty!");var b=j.read(j.symmetric,l.encryption_cipher),c=new i.List,e=new i.SymEncryptedSessionKey;e.sessionKeyAlgorithm=b,e.decrypt(a),c.push(e);var f=new i.SymEncryptedIntegrityProtected;return f.packets=this.packets,f.encrypt(b,e.sessionKey),c.push(f),f.packets=new i.List,new d(c)},d.prototype.symDecrypt=function(a){var b=this.packets.filterByTag(j.packet.symEncryptedSessionKey,j.packet.symEncryptedIntegrityProtected),c=b[0];c.decrypt(a);var e=b[1];e.decrypt(c.sessionKeyAlgorithm,c.sessionKey);var f=new d(e.packets);return e.packets=new i.List,f},d.prototype.sign=function(a){var b=new i.List,c=this.packets.findPacket(j.packet.literal);if(!c)throw new Error("No literal data packet to sign.");var e,f,g=j.write(j.literal,c.format),h=g==j.literal.binary?j.signature.binary:j.signature.text;for(e=0;e<a.length;e++){if(a[e].isPublic())throw new Error("Need private key for signing");var k=new i.OnePassSignature;if(k.type=h,k.hashAlgorithm=l.prefer_hash_algorithm,f=a[e].getSigningKeyPacket(),!f)throw new Error("Could not find valid key packet for signing in key "+a[e].primaryKey.getKeyId().toHex());k.publicKeyAlgorithm=f.algorithm,k.signingKeyId=f.getKeyId(),b.push(k)}for(b.push(c),e=a.length-1;e>=0;e--){var m=new i.Signature;if(m.signatureType=h,m.hashAlgorithm=l.prefer_hash_algorithm,m.publicKeyAlgorithm=f.algorithm,!f.isDecrypted)throw new Error("Private key is not decrypted.");m.sign(f,c),b.push(m)}return new d(b)},d.prototype.verify=function(a){var b=[],c=this.unwrapCompressed(),d=c.packets.filterByTag(j.packet.literal);if(1!==d.length)throw new Error("Can only verify message with one literal data packet.");for(var e=c.packets.filterByTag(j.packet.signature),f=0;f<e.length;f++){for(var g=null,h=0;h<a.length&&!(g=a[h].getSigningKeyPacket(e[f].issuerKeyId));h++);var i={};g?(i.keyid=e[f].issuerKeyId,i.valid=e[f].verify(g,d[0])):(i.keyid=e[f].issuerKeyId,i.valid=null),b.push(i)}return b},d.prototype.unwrapCompressed=function(){var a=this.packets.filterByTag(j.packet.compressed);return a.length?new d(a[0].packets):this},d.prototype.armor=function(){return k.encode(j.armor.message,this.packets.write())},c.Message=d,c.readArmored=e,c.readSignedContent=f,c.fromText=g,c.fromBinary=h},{"./config":17,"./crypto":32,"./encoding/armor.js":41,"./enums.js":43,"./key.js":47,"./packet":55}],52:[function(a,b,c){"use strict";function d(a,b){return b&&b.worker||"undefined"!=typeof window&&window.Worker?(b=b||{},b.config=this.config,x=new w(a,b),!0):!1}function e(){return x}function f(a,b,c,d){return a.length||(a=[a]),x?x.encryptMessage(a,b,c,d):m(function(){var e,f;return e=o(b,c,d),e=e.encrypt(a),f=q.encode(r.armor.message,e.packets.write())},"Error encrypting message!")}function g(a,b,c,d,e){return a.length||(a=[a]),x?x.signAndEncryptMessage(a,b,c,d,e):m(function(){var f,g;return f=o(c,d,e),f=f.sign([b]),f=f.encrypt(a),g=q.encode(r.armor.message,f.packets.write())},"Error signing and encrypting message!")}function h(a,b,c){return x?x.decryptMessage(a,b,c):m(function(){return b=b.decrypt(a),c?p(b,c):p(b).text},"Error decrypting message!")}function i(a,b,c,d){return b.length||(b=[b]),x?x.decryptAndVerifyMessage(a,b,c,d):m(function(){var e={};return c=c.decrypt(a),e=p(c,d),e.text?(e.signatures=c.verify(b),e):null},"Error decrypting and verifying message!")}function j(a,b){return a.length||(a=[a]),x?x.signClearMessage(a,b):m(function(){var c=new t.CleartextMessage(b);return c.sign(a),c.armor()},"Error signing cleartext message!")}function k(a,b){return a.length||(a=[a]),x?x.verifyClearSignedMessage(a,b):m(function(){var c={};if(!(b instanceof t.CleartextMessage))throw new Error("Parameter [message] needs to be of type CleartextMessage.");return c.text=b.getText(),c.signatures=b.verify(a),c},"Error verifying cleartext signed message!")}function l(a){return!v.getWebCrypto()&&x?x.generateKeyPair(a):u.generate(a).then(function(a){var b={};return b.key=a,b.privateKeyArmored=a.armor(),b.publicKeyArmored=a.toPublic().armor(),b})["catch"](function(b){if(console.error(b),!v.getWebCrypto())throw new Error("Error generating keypair using js fallback!");return console.log("Error generating keypair using native WebCrypto... falling back back to js!"),x.generateKeyPair(a)})["catch"](n.bind(null,"Error generating keypair!"))}function m(a,b){var c=new Promise(function(b){var c=a();b(c)});return c["catch"](n.bind(null,b))}function n(a,b){throw console.error(b.stack),new Error(a)}function o(a,b,c){var d;return d="binary"===b?s.fromBinary(a,c):s.fromText(a)}function p(a,b){return"binary"===b?{text:a.getLiteralData(),filename:a.getFilename()}:{text:a.getText()}}var q=a("./encoding/armor.js"),r=a("./enums.js"),s=a("./message.js"),t=a("./cleartext.js"),u=a("./key.js"),v=a("./util"),w=a("./worker/async_proxy.js");a("es6-promise").polyfill();var x=null;c.initWorker=d,c.getWorker=e,c.encryptMessage=f,c.signAndEncryptMessage=g,c.decryptMessage=h,c.decryptAndVerifyMessage=i,c.signClearMessage=j,c.verifyClearSignedMessage=k,c.generateKeyPair=l},{"./cleartext.js":12,"./encoding/armor.js":41,"./enums.js":43,"./key.js":47,"./message.js":51,"./util":76,"./worker/async_proxy.js":77,"es6-promise":1}],53:[function(a,b,c){function d(a){return a.substr(0,1).toUpperCase()+a.substr(1)}var e=a("../enums.js");b.exports={Compressed:a("./compressed.js"),SymEncryptedIntegrityProtected:a("./sym_encrypted_integrity_protected.js"),PublicKeyEncryptedSessionKey:a("./public_key_encrypted_session_key.js"),SymEncryptedSessionKey:a("./sym_encrypted_session_key.js"),Literal:a("./literal.js"),PublicKey:a("./public_key.js"),SymmetricallyEncrypted:a("./symmetrically_encrypted.js"),Marker:a("./marker.js"),PublicSubkey:a("./public_subkey.js"),UserAttribute:a("./user_attribute.js"),OnePassSignature:a("./one_pass_signature.js"),SecretKey:a("./secret_key.js"),Userid:a("./userid.js"),SecretSubkey:a("./secret_subkey.js"),Signature:a("./signature.js"),Trust:a("./trust.js"),newPacketFromTag:function(a){return new(this[d(a)])},fromStructuredClone:function(a){var b=e.read(e.packet,a.tag),c=this.newPacketFromTag(b);for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);return c.postCloneTypeFix&&c.postCloneTypeFix(),c}}},{"../enums.js":43,"./compressed.js":54,"./literal.js":56,"./marker.js":57,"./one_pass_signature.js":58,"./public_key.js":61,"./public_key_encrypted_session_key.js":62,"./public_subkey.js":63,"./secret_key.js":64,"./secret_subkey.js":65,"./signature.js":66,"./sym_encrypted_integrity_protected.js":67,"./sym_encrypted_session_key.js":68,"./symmetrically_encrypted.js":69,"./trust.js":70,"./user_attribute.js":71,"./userid.js":72}],54:[function(a,b,c){function d(){this.tag=e.packet.compressed,this.packets=null,this.algorithm="zip",this.compressed=null}b.exports=d;var e=a("../enums.js"),f=a("../util.js"),g=a("../compression/zlib.min.js"),h=a("../compression/rawinflate.min.js"),i=a("../compression/rawdeflate.min.js");d.prototype.read=function(a){this.algorithm=e.read(e.compression,a.charCodeAt(0)),this.compressed=a.substr(1),this.decompress()},d.prototype.write=function(){return null===this.compressed&&this.compress(),String.fromCharCode(e.write(e.compression,this.algorithm))+this.compressed},d.prototype.decompress=function(){var a;switch(this.algorithm){case"uncompressed":a=this.compressed;break;case"zip":var b=new h.Zlib.RawInflate(f.str2Uint8Array(this.compressed));a=f.Uint8Array2str(b.decompress());break;case"zlib":var b=new g.Zlib.Inflate(f.str2Uint8Array(this.compressed));a=f.Uint8Array2str(b.decompress());break;case"bzip2":throw new Error("Compression algorithm BZip2 [BZ2] is not implemented.");default:throw new Error("Compression algorithm unknown :"+this.alogrithm)}this.packets.read(a)},d.prototype.compress=function(){var a,b;switch(a=this.packets.write(),this.algorithm){case"uncompressed":this.compressed=a;break;case"zip":b=new i.Zlib.RawDeflate(f.str2Uint8Array(a)),this.compressed=f.Uint8Array2str(b.compress());break;case"zlib":b=new g.Zlib.Deflate(f.str2Uint8Array(a)),this.compressed=f.Uint8Array2str(b.compress());break;case"bzip2":throw new Error("Compression algorithm BZip2 [BZ2] is not implemented.");default:throw new Error("Compression algorithm unknown :"+this.type)}}},{"../compression/rawdeflate.min.js":13,"../compression/rawinflate.min.js":14,"../compression/zlib.min.js":15,"../enums.js":43,"../util.js":76}],55:[function(a,b,c){a("../enums.js");b.exports={List:a("./packetlist.js")};var d=a("./all_packets.js");for(var e in d)b.exports[e]=d[e]},{"../enums.js":43,"./all_packets.js":53,"./packetlist.js":60}],56:[function(a,b,c){function d(){this.tag=f.packet.literal,this.format="utf8",this.data="",this.date=new Date,this.filename="msg.txt"}b.exports=d;var e=a("../util.js"),f=a("../enums.js");d.prototype.setText=function(a){a=a.replace(/\r/g,"").replace(/\n/g,"\r\n"),this.data="utf8"==this.format?e.encode_utf8(a):a},d.prototype.getText=function(){var a=e.decode_utf8(this.data);return a.replace(/\r\n/g,"\n")},d.prototype.setBytes=function(a,b){this.format=b,this.data=a},d.prototype.getBytes=function(){return this.data},d.prototype.setFilename=function(a){this.filename=a},d.prototype.getFilename=function(){return this.filename},d.prototype.read=function(a){var b=f.read(f.literal,a.charCodeAt(0)),c=a.charCodeAt(1);this.filename=e.decode_utf8(a.substr(2,c)),this.date=e.readDate(a.substr(2+c,4));var d=a.substring(6+c);this.setBytes(d,b)},d.prototype.write=function(){var a=e.encode_utf8(this.filename),b=this.getBytes(),c="";return c+=String.fromCharCode(f.write(f.literal,this.format)),c+=String.fromCharCode(a.length),c+=a,c+=e.writeDate(this.date),c+=b}},{"../enums.js":43,"../util.js":76}],57:[function(a,b,c){function d(){this.tag=e.packet.marker}b.exports=d;var e=a("../enums.js");d.prototype.read=function(a){return 80==a.charCodeAt(0)&&71==a.charCodeAt(1)&&80==a.charCodeAt(2)?!0:!1}},{"../enums.js":43}],58:[function(a,b,c){function d(){this.tag=e.packet.onePassSignature,this.version=null,this.type=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signingKeyId=null,this.flags=null}b.exports=d;var e=a("../enums.js"),f=a("../type/keyid.js");d.prototype.read=function(a){var b=0;return this.version=a.charCodeAt(b++),this.type=e.read(e.signature,a.charCodeAt(b++)),this.hashAlgorithm=e.read(e.hash,a.charCodeAt(b++)),this.publicKeyAlgorithm=e.read(e.publicKey,a.charCodeAt(b++)),this.signingKeyId=new f,this.signingKeyId.read(a.substr(b)),b+=8,this.flags=a.charCodeAt(b++),this},d.prototype.write=function(){var a="";return a+=String.fromCharCode(3),a+=String.fromCharCode(e.write(e.signature,this.type)),a+=String.fromCharCode(e.write(e.hash,this.hashAlgorithm)),a+=String.fromCharCode(e.write(e.publicKey,this.publicKeyAlgorithm)),a+=this.signingKeyId.write(),a+=String.fromCharCode(this.flags)},d.prototype.postCloneTypeFix=function(){this.signingKeyId=f.fromClone(this.signingKeyId)}},{"../enums.js":43,"../type/keyid.js":73}],59:[function(a,b,c){var d=(a("../enums.js"),a("../util.js"));b.exports={readSimpleLength:function(a){var b,c=0,e=a.charCodeAt(0);return 192>e?(c=a.charCodeAt(0),b=1):255>e?(c=(a.charCodeAt(0)-192<<8)+a.charCodeAt(1)+192,b=2):255==e&&(c=d.readNumber(a.substr(1,4)),b=5),{len:c,offset:b}},writeSimpleLength:function(a){var b="";return 192>a?b+=String.fromCharCode(a):a>191&&8384>a?(b+=String.fromCharCode((a-192>>8)+192),b+=String.fromCharCode(a-192&255)):(b+=String.fromCharCode(255),b+=d.writeNumber(a,4)),b},writeHeader:function(a,b){var c="";return c+=String.fromCharCode(192|a),c+=this.writeSimpleLength(b)},writeOldHeader:function(a,b){var c="";return 256>b?(c+=String.fromCharCode(128|a<<2),c+=String.fromCharCode(b)):65536>b?(c+=String.fromCharCode(128|a<<2|1),c+=d.writeNumber(b,2)):(c+=String.fromCharCode(128|a<<2|2),c+=d.writeNumber(b,4)),c},read:function(a,b,c){if(null===a||a.length<=b||a.substring(b).length<2||0===(128&a.charCodeAt(b)))throw new Error("Error during parsing. This message / key is probably not containing a valid OpenPGP format.");var e,f=b,g=-1,h=-1;h=0,0!==(64&a.charCodeAt(f))&&(h=1);var i;h?g=63&a.charCodeAt(f):(g=(63&a.charCodeAt(f))>>2,i=3&a.charCodeAt(f)),f++;var j=null,k=-1;if(h)if(a.charCodeAt(f)<192)e=a.charCodeAt(f++),d.print_debug("1 byte length:"+e);else if(a.charCodeAt(f)>=192&&a.charCodeAt(f)<224)e=(a.charCodeAt(f++)-192<<8)+a.charCodeAt(f++)+192,d.print_debug("2 byte length:"+e);else if(a.charCodeAt(f)>223&&a.charCodeAt(f)<255){e=1<<(31&a.charCodeAt(f++)),d.print_debug("4 byte length:"+e);var l=f+e;j=a.substring(f,f+e);for(var m;;){if(a.charCodeAt(l)<192){m=a.charCodeAt(l++),e+=m,j+=a.substring(l,l+m),l+=m;break}if(a.charCodeAt(l)>=192&&a.charCodeAt(l)<224){m=(a.charCodeAt(l++)-192<<8)+a.charCodeAt(l++)+192,e+=m,j+=a.substring(l,l+m),l+=m;break}if(!(a.charCodeAt(l)>223&&a.charCodeAt(l)<255)){l++,m=a.charCodeAt(l++)<<24|a.charCodeAt(l++)<<16|a.charCodeAt(l++)<<8|a.charCodeAt(l++),j+=a.substring(l,l+m),e+=m,l+=m;break}m=1<<(31&a.charCodeAt(l++)),e+=m,j+=a.substring(l,l+m),l+=m}k=l-f}else f++,e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);else switch(i){case 0:e=a.charCodeAt(f++);break;case 1:e=a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;case 2:e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;default:e=c}return-1==k&&(k=e),null===j&&(j=a.substring(f,f+k)),{tag:g,packet:j,offset:f+k}}}},{"../enums.js":43,"../util.js":76}],60:[function(a,b,c){function d(){this.length=0}b.exports=d;var e=a("./packet.js"),f=a("./all_packets.js"),g=a("../enums.js");d.prototype.read=function(a){for(var b=0;b<a.length;){var c=e.read(a,b,a.length-b);b=c.offset;var d=!1;try{var h=g.read(g.packet,c.tag),i=f.newPacketFromTag(h);this.push(i),d=!0,i.read(c.packet)}catch(j){d&&this.pop()}}},d.prototype.write=function(){for(var a="",b=0;b<this.length;b++){var c=this[b].write();a+=e.writeHeader(this[b].tag,c.length),a+=c}return a},d.prototype.push=function(a){a&&(a.packets=a.packets||new d,this[this.length]=a,this.length++)},d.prototype.pop=function(){if(0!==this.length){var a=this[this.length-1];return delete this[this.length-1],this.length--,a}},d.prototype.filter=function(a){for(var b=new d,c=0;c<this.length;c++)a(this[c],c,this)&&b.push(this[c]);return b},d.prototype.filterByTag=function(){for(var a=Array.prototype.slice.call(arguments),b=new d,c=this,e=0;e<this.length;e++)a.some(function(a){return c[e].tag==a})&&b.push(this[e]);return b},d.prototype.forEach=function(a){for(var b=0;b<this.length;b++)a(this[b])},d.prototype.findPacket=function(a){var b=this.filterByTag(a);if(b.length)return b[0];for(var c=null,d=0;d<this.length;d++)if(this[d].packets.length&&(c=this[d].packets.findPacket(a)))return c;return null},d.prototype.indexOfTag=function(){for(var a=Array.prototype.slice.call(arguments),b=[],c=this,d=0;d<this.length;d++)a.some(function(a){return c[d].tag==a})&&b.push(d);return b},d.prototype.slice=function(a,b){b||(b=this.length);for(var c=new d,e=a;b>e;e++)c.push(this[e]);return c},d.prototype.concat=function(a){if(a)for(var b=0;b<a.length;b++)this.push(a[b])},b.exports.fromStructuredClone=function(a){for(var b=new d,c=0;c<a.length;c++)b.push(f.fromStructuredClone(a[c])),0!==b[c].packets.length?b[c].packets=this.fromStructuredClone(b[c].packets):b[c].packets=new d;return b}},{"../enums.js":43,"./all_packets.js":53,"./packet.js":59}],61:[function(a,b,c){function d(){this.tag=h.packet.publicKey,this.version=4,this.created=new Date,this.mpi=[],this.algorithm="rsa_sign",this.expirationTimeV3=0,this.fingerprint=null,this.keyid=null}b.exports=d;var e=a("../util.js"),f=a("../type/mpi.js"),g=a("../type/keyid.js"),h=a("../enums.js"),i=a("../crypto");d.prototype.read=function(a){var b=0;if(this.version=a.charCodeAt(b++),3==this.version||4==this.version){this.created=e.readDate(a.substr(b,4)),b+=4,3==this.version&&(this.expirationTimeV3=e.readNumber(a.substr(b,2)),b+=2),this.algorithm=h.read(h.publicKey,a.charCodeAt(b++));var c=i.getPublicMpiCount(this.algorithm);this.mpi=[];for(var d=a.substr(b),g=0,j=0;c>j&&g<d.length;j++)if(this.mpi[j]=new f,g+=this.mpi[j].read(d.substr(g)),g>d.length)throw new Error("Error reading MPI @:"+g);return g+6}throw new Error("Version "+this.version+" of the key packet is unsupported.")},d.prototype.readPublicKey=d.prototype.read,d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=e.writeDate(this.created),3==this.version&&(a+=e.writeNumber(this.expirationTimeV3,2)),a+=String.fromCharCode(h.write(h.publicKey,this.algorithm));for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].write();return a},d.prototype.writePublicKey=d.prototype.write,d.prototype.writeOld=function(){var a=this.writePublicKey();return String.fromCharCode(153)+e.writeNumber(a.length,2)+a},d.prototype.getKeyId=function(){return this.keyid?this.keyid:(this.keyid=new g,4==this.version?this.keyid.read(e.hex2bin(this.getFingerprint()).substr(12,8)):3==this.version&&this.keyid.read(this.mpi[0].write().substr(-8)),this.keyid)},d.prototype.getFingerprint=function(){if(this.fingerprint)return this.fingerprint;var a="";if(4==this.version)a=this.writeOld(),this.fingerprint=i.hash.sha1(a);else if(3==this.version){for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].toBytes();this.fingerprint=i.hash.md5(a)}return this.fingerprint=e.hexstrdump(this.fingerprint),this.fingerprint},d.prototype.getBitSize=function(){return 8*this.mpi[0].byteLength()},d.prototype.postCloneTypeFix=function(){for(var a=0;a<this.mpi.length;a++)this.mpi[a]=f.fromClone(this.mpi[a]);this.keyid&&(this.keyid=g.fromClone(this.keyid))}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76}],62:[function(a,b,c){function d(){this.tag=h.packet.publicKeyEncryptedSessionKey,this.version=3,this.publicKeyId=new e,this.publicKeyAlgorithm="rsa_encrypt",this.sessionKey=null,this.sessionKeyAlgorithm="aes256",this.encrypted=[]}b.exports=d;var e=a("../type/keyid.js"),f=a("../util.js"),g=a("../type/mpi.js"),h=a("../enums.js"),i=a("../crypto");d.prototype.read=function(a){this.version=a.charCodeAt(0),this.publicKeyId.read(a.substr(1)),this.publicKeyAlgorithm=h.read(h.publicKey,a.charCodeAt(9));var b=10,c=function(a){switch(a){case"rsa_encrypt":case"rsa_encrypt_sign":return 1;case"elgamal":return 2;default:throw new Error("Invalid algorithm.")}}(this.publicKeyAlgorithm);this.encrypted=[];for(var d=0;c>d;d++){var e=new g;b+=e.read(a.substr(b)),this.encrypted.push(e)}},d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=this.publicKeyId.write(),a+=String.fromCharCode(h.write(h.publicKey,this.publicKeyAlgorithm));for(var b=0;b<this.encrypted.length;b++)a+=this.encrypted[b].write();return a},d.prototype.encrypt=function(a){var b=String.fromCharCode(h.write(h.symmetric,this.sessionKeyAlgorithm));b+=this.sessionKey;var c=f.calc_checksum(this.sessionKey);b+=f.writeNumber(c,2);var d=new g;d.fromBytes(i.pkcs1.eme.encode(b,a.mpi[0].byteLength())),this.encrypted=i.publicKeyEncrypt(this.publicKeyAlgorithm,a.mpi,d)},d.prototype.decrypt=function(a){var b=i.publicKeyDecrypt(this.publicKeyAlgorithm,a.mpi,this.encrypted).toBytes(),c=f.readNumber(b.substr(b.length-2)),d=i.pkcs1.eme.decode(b);if(a=d.substring(1,d.length-2),c!=f.calc_checksum(a))throw new Error("Checksum mismatch");this.sessionKey=a,this.sessionKeyAlgorithm=h.read(h.symmetric,d.charCodeAt(0))},d.prototype.postCloneTypeFix=function(){this.publicKeyId=e.fromClone(this.publicKeyId);for(var a=0;a<this.encrypted.length;a++)this.encrypted[a]=g.fromClone(this.encrypted[a])}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76}],63:[function(a,b,c){function d(){e.call(this),this.tag=f.packet.publicSubkey}b.exports=d;var e=a("./public_key.js"),f=a("../enums.js");d.prototype=new e,d.prototype.constructor=d},{"../enums.js":43,"./public_key.js":61}],64:[function(a,b,c){function d(){j.call(this),this.tag=k.packet.secretKey,this.encrypted=null,this.isDecrypted=!1}function e(a){return"sha1"==a?20:2}function f(a){return"sha1"==a?m.hash.sha1:function(a){return l.writeNumber(l.calc_checksum(a),2)}}function g(a,b,c){var d=e(a),g=f(a),h=b.substr(b.length-d);b=b.substr(0,b.length-d);var i=g(b);if(i!=h)return new Error("Hash mismatch.");for(var j=m.getPrivateMpiCount(c),k=0,l=[],o=0;j>o&&k<b.length;o++)l[o]=new n,k+=l[o].read(b.substr(k));return l}function h(a,b,c){for(var d="",e=m.getPublicMpiCount(b),g=e;g<c.length;g++)d+=c[g].write();return d+=f(a)(d)}function i(a,b,c){return a.produce_key(b,m.cipher[c].keySize)}b.exports=d;var j=a("./public_key.js"),k=a("../enums.js"),l=a("../util.js"),m=a("../crypto"),n=a("../type/mpi.js"),o=a("../type/s2k.js");d.prototype=new j,d.prototype.constructor=d,d.prototype.read=function(a){var b=this.readPublicKey(a);a=a.substr(b);var c=a.charCodeAt(0);if(c)this.encrypted=a;else{var d=g("mod",a.substr(1),this.algorithm);if(d instanceof Error)throw d;this.mpi=this.mpi.concat(d),this.isDecrypted=!0}},d.prototype.write=function(){var a=this.writePublicKey();return this.encrypted?a+=this.encrypted:(a+=String.fromCharCode(0),a+=h("mod",this.algorithm,this.mpi)),a},d.prototype.encrypt=function(a){if(this.isDecrypted&&!a)return void(this.encrypted=null);if(!a)throw new Error("The key must be decrypted before removing passphrase protection.");var b=new o,c="aes256",d=h("sha1",this.algorithm,this.mpi),e=i(b,a,c),f=m.cipher[c].blockSize,g=m.random.getRandomBytes(f);this.encrypted="",this.encrypted+=String.fromCharCode(254),this.encrypted+=String.fromCharCode(k.write(k.symmetric,c)),this.encrypted+=b.write(),this.encrypted+=g,this.encrypted+=m.cfb.normalEncrypt(c,e,d,g)},d.prototype.decrypt=function(a){if(this.isDecrypted)return!0;var b,c,d=0,e=this.encrypted.charCodeAt(d++);if(255==e||254==e){b=this.encrypted.charCodeAt(d++),b=k.read(k.symmetric,b);var f=new o;d+=f.read(this.encrypted.substr(d)),c=i(f,a,b)}else b=e,b=k.read(k.symmetric,b),c=m.hash.md5(a);var h=this.encrypted.substr(d,m.cipher[b].blockSize);d+=h.length;var j,l=this.encrypted.substr(d);j=m.cfb.normalDecrypt(b,c,l,h);var n=254==e?"sha1":"mod",p=g(n,j,this.algorithm);return p instanceof Error?!1:(this.mpi=this.mpi.concat(p),this.isDecrypted=!0,!0)},d.prototype.generate=function(a){var b=this;return m.generateMpi(b.algorithm,a).then(function(a){b.mpi=a,b.isDecrypted=!0})},d.prototype.clearPrivateMPIs=function(){if(!this.encrypted)throw new Error("If secret key is not encrypted, clearing private MPIs is irreversible.");this.mpi=this.mpi.slice(0,m.getPublicMpiCount(this.algorithm)),this.isDecrypted=!1}},{"../crypto":32,"../enums.js":43,"../type/mpi.js":74,"../type/s2k.js":75,"../util.js":76,"./public_key.js":61}],65:[function(a,b,c){function d(){e.call(this),this.tag=f.packet.secretSubkey}b.exports=d;var e=a("./secret_key.js"),f=a("../enums.js");d.prototype=new e,d.prototype.constructor=d},{"../enums.js":43,"./secret_key.js":64}],66:[function(a,b,c){function d(){this.tag=h.packet.signature,this.version=4,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signatureData=null,this.unhashedSubpackets=null,this.signedHashValue=null,this.created=new Date,this.signatureExpirationTime=null,this.signatureNeverExpires=!0,this.exportable=null,this.trustLevel=null,this.trustAmount=null,this.regularExpression=null,this.revocable=null,this.keyExpirationTime=null,this.keyNeverExpires=null,
+this.preferredSymmetricAlgorithms=null,this.revocationKeyClass=null,this.revocationKeyAlgorithm=null,this.revocationKeyFingerprint=null,this.issuerKeyId=new k,this.notation=null,this.preferredHashAlgorithms=null,this.preferredCompressionAlgorithms=null,this.keyServerPreferences=null,this.preferredKeyServer=null,this.isPrimaryUserID=null,this.policyURI=null,this.keyFlags=null,this.signersUserId=null,this.reasonForRevocationFlag=null,this.reasonForRevocationString=null,this.features=null,this.signatureTargetPublicKeyAlgorithm=null,this.signatureTargetHashAlgorithm=null,this.signatureTargetHash=null,this.embeddedSignature=null,this.verified=!1}function e(a,b){var c="";return c+=g.writeSimpleLength(b.length+1),c+=String.fromCharCode(a),c+=b}b.exports=d;var f=a("../util.js"),g=a("./packet.js"),h=a("../enums.js"),i=a("../crypto"),j=a("../type/mpi.js"),k=a("../type/keyid.js");d.prototype.read=function(a){function b(a){for(var b=f.readNumber(a.substr(0,2)),c=2;2+b>c;){var d=g.readSimpleLength(a.substr(c));c+=d.offset,this.read_sub_packet(a.substr(c,d.len)),c+=d.len}return c}var c=0;switch(this.version=a.charCodeAt(c++),this.version){case 3:5!=a.charCodeAt(c++)&&f.print_debug("packet/signature.js\ninvalid One-octet length of following hashed material.MUST be 5. @:"+(c-1));var d=c;this.signatureType=a.charCodeAt(c++),this.created=f.readDate(a.substr(c,4)),c+=4,this.signatureData=a.substring(d,c),this.issuerKeyId.read(a.substring(c,c+8)),c+=8,this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++);break;case 4:this.signatureType=a.charCodeAt(c++),this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++),c+=b.call(this,a.substr(c),!0),this.signatureData=a.substr(0,c);var e=c;c+=b.call(this,a.substr(c),!1),this.unhashedSubpackets=a.substr(e,c-e);break;default:throw new Error("Version "+this.version+" of the signature is unsupported.")}this.signedHashValue=a.substr(c,2),c+=2,this.signature=a.substr(c)},d.prototype.write=function(){var a="";switch(this.version){case 3:a+=String.fromCharCode(3),a+=String.fromCharCode(5),a+=this.signatureData,a+=this.issuerKeyId.write(),a+=String.fromCharCode(this.publicKeyAlgorithm),a+=String.fromCharCode(this.hashAlgorithm);break;case 4:a+=this.signatureData,a+=this.unhashedSubpackets?this.unhashedSubpackets:f.writeNumber(0,2)}return a+=this.signedHashValue+this.signature},d.prototype.sign=function(a,b){var c=h.write(h.signature,this.signatureType),d=h.write(h.publicKey,this.publicKeyAlgorithm),e=h.write(h.hash,this.hashAlgorithm),f=String.fromCharCode(4);f+=String.fromCharCode(c),f+=String.fromCharCode(d),f+=String.fromCharCode(e),this.issuerKeyId=a.getKeyId(),f+=this.write_all_sub_packets(),this.signatureData=f;var g=this.calculateTrailer(),j=this.toSign(c,b)+this.signatureData+g,k=i.hash.digest(e,j);this.signedHashValue=k.substr(0,2),this.signature=i.signature.sign(e,d,a.mpi,j)},d.prototype.write_all_sub_packets=function(){var a=h.signatureSubpacket,b="",c="";if(null!==this.created&&(b+=e(a.signature_creation_time,f.writeDate(this.created))),null!==this.signatureExpirationTime&&(b+=e(a.signature_expiration_time,f.writeNumber(this.signatureExpirationTime,4))),null!==this.exportable&&(b+=e(a.exportable_certification,String.fromCharCode(this.exportable?1:0))),null!==this.trustLevel&&(c=String.fromCharCode(this.trustLevel)+String.fromCharCode(this.trustAmount),b+=e(a.trust_signature,c)),null!==this.regularExpression&&(b+=e(a.regular_expression,this.regularExpression)),null!==this.revocable&&(b+=e(a.revocable,String.fromCharCode(this.revocable?1:0))),null!==this.keyExpirationTime&&(b+=e(a.key_expiration_time,f.writeNumber(this.keyExpirationTime,4))),null!==this.preferredSymmetricAlgorithms&&(c=f.bin2str(this.preferredSymmetricAlgorithms),b+=e(a.preferred_symmetric_algorithms,c)),null!==this.revocationKeyClass&&(c=String.fromCharCode(this.revocationKeyClass),c+=String.fromCharCode(this.revocationKeyAlgorithm),c+=this.revocationKeyFingerprint,b+=e(a.revocation_key,c)),this.issuerKeyId.isNull()||(b+=e(a.issuer,this.issuerKeyId.write())),null!==this.notation)for(var d in this.notation)if(this.notation.hasOwnProperty(d)){var g=this.notation[d];c=String.fromCharCode(128),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=f.writeNumber(d.length,2),c+=f.writeNumber(g.length,2),c+=d+g,b+=e(a.notation_data,c)}return null!==this.preferredHashAlgorithms&&(c=f.bin2str(this.preferredHashAlgorithms),b+=e(a.preferred_hash_algorithms,c)),null!==this.preferredCompressionAlgorithms&&(c=f.bin2str(this.preferredCompressionAlgorithms),b+=e(a.preferred_compression_algorithms,c)),null!==this.keyServerPreferences&&(c=f.bin2str(this.keyServerPreferences),b+=e(a.key_server_preferences,c)),null!==this.preferredKeyServer&&(b+=e(a.preferred_key_server,this.preferredKeyServer)),null!==this.isPrimaryUserID&&(b+=e(a.primary_user_id,String.fromCharCode(this.isPrimaryUserID?1:0))),null!==this.policyURI&&(b+=e(a.policy_uri,this.policyURI)),null!==this.keyFlags&&(c=f.bin2str(this.keyFlags),b+=e(a.key_flags,c)),null!==this.signersUserId&&(b+=e(a.signers_user_id,this.signersUserId)),null!==this.reasonForRevocationFlag&&(c=String.fromCharCode(this.reasonForRevocationFlag),c+=this.reasonForRevocationString,b+=e(a.reason_for_revocation,c)),null!==this.features&&(c=f.bin2str(this.features),b+=e(a.features,c)),null!==this.signatureTargetPublicKeyAlgorithm&&(c=String.fromCharCode(this.signatureTargetPublicKeyAlgorithm),c+=String.fromCharCode(this.signatureTargetHashAlgorithm),c+=this.signatureTargetHash,b+=e(a.signature_target,c)),null!==this.embeddedSignature&&(b+=e(a.embedded_signature,this.embeddedSignature.write())),b=f.writeNumber(b.length,2)+b},d.prototype.read_sub_packet=function(a){function b(a,b){this[a]=[];for(var c=0;c<b.length;c++)this[a].push(b.charCodeAt(c))}var c,e=0,g=127&a.charCodeAt(e++);switch(g){case 2:this.created=f.readDate(a.substr(e));break;case 3:c=f.readNumber(a.substr(e)),this.signatureNeverExpires=0===c,this.signatureExpirationTime=c;break;case 4:this.exportable=1==a.charCodeAt(e++);break;case 5:this.trustLevel=a.charCodeAt(e++),this.trustAmount=a.charCodeAt(e++);break;case 6:this.regularExpression=a.substr(e);break;case 7:this.revocable=1==a.charCodeAt(e++);break;case 9:c=f.readNumber(a.substr(e)),this.keyExpirationTime=c,this.keyNeverExpires=0===c;break;case 11:b.call(this,"preferredSymmetricAlgorithms",a.substr(e));break;case 12:this.revocationKeyClass=a.charCodeAt(e++),this.revocationKeyAlgorithm=a.charCodeAt(e++),this.revocationKeyFingerprint=a.substr(e,20);break;case 16:this.issuerKeyId.read(a.substr(e));break;case 20:if(128==a.charCodeAt(e)){e+=4;var h=f.readNumber(a.substr(e,2));e+=2;var j=f.readNumber(a.substr(e,2));e+=2;var k=a.substr(e,h),l=a.substr(e+h,j);this.notation=this.notation||{},this.notation[k]=l}else f.print_debug("Unsupported notation flag "+a.charCodeAt(e));break;case 21:b.call(this,"preferredHashAlgorithms",a.substr(e));break;case 22:b.call(this,"preferredCompressionAlgorithms",a.substr(e));break;case 23:b.call(this,"keyServerPreferencess",a.substr(e));break;case 24:this.preferredKeyServer=a.substr(e);break;case 25:this.isPrimaryUserID=0!==a[e++];break;case 26:this.policyURI=a.substr(e);break;case 27:b.call(this,"keyFlags",a.substr(e));break;case 28:this.signersUserId+=a.substr(e);break;case 29:this.reasonForRevocationFlag=a.charCodeAt(e++),this.reasonForRevocationString=a.substr(e);break;case 30:b.call(this,"features",a.substr(e));break;case 31:this.signatureTargetPublicKeyAlgorithm=a.charCodeAt(e++),this.signatureTargetHashAlgorithm=a.charCodeAt(e++);var m=i.getHashByteLength(this.signatureTargetHashAlgorithm);this.signatureTargetHash=a.substr(e,m);break;case 32:this.embeddedSignature=new d,this.embeddedSignature.read(a.substr(e));break;default:f.print_debug("Unknown signature subpacket type "+g+" @:"+e)}},d.prototype.toSign=function(a,b){var c=h.signature;switch(a){case c.binary:case c.text:return b.getBytes();case c.standalone:return"";case c.cert_generic:case c.cert_persona:case c.cert_casual:case c.cert_positive:case c.cert_revocation:var d,e;if(void 0!==b.userid)e=180,d=b.userid;else{if(void 0===b.userattribute)throw new Error("Either a userid or userattribute packet needs to be supplied for certification.");e=209,d=b.userattribute}var g=d.write();if(4==this.version)return this.toSign(c.key,b)+String.fromCharCode(e)+f.writeNumber(g.length,4)+g;if(3==this.version)return this.toSign(c.key,b)+g;break;case c.subkey_binding:case c.subkey_revocation:case c.key_binding:return this.toSign(c.key,b)+this.toSign(c.key,{key:b.bind});case c.key:if(void 0===b.key)throw new Error("Key packet is required for this signature.");return b.key.writeOld();case c.key_revocation:return this.toSign(c.key,b);case c.timestamp:return"";case c.third_party:throw new Error("Not implemented");default:throw new Error("Unknown signature type.")}},d.prototype.calculateTrailer=function(){var a="";return 3==this.version?a:(a+=String.fromCharCode(4),a+=String.fromCharCode(255),a+=f.writeNumber(this.signatureData.length,4))},d.prototype.verify=function(a,b){var c=h.write(h.signature,this.signatureType),d=h.write(h.publicKey,this.publicKeyAlgorithm),e=h.write(h.hash,this.hashAlgorithm),f=this.toSign(c,b),g=this.calculateTrailer(),k=0;d>0&&4>d?k=1:17==d&&(k=2);for(var l=[],m=0,n=0;k>n;n++)l[n]=new j,m+=l[n].read(this.signature.substr(m));return this.verified=i.signature.verify(d,e,l,a.mpi,f+this.signatureData+g),this.verified},d.prototype.isExpired=function(){return this.signatureNeverExpires?!1:Date.now()>this.created.getTime()+1e3*this.signatureExpirationTime},d.prototype.postCloneTypeFix=function(){this.issuerKeyId=k.fromClone(this.issuerKeyId)}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76,"./packet.js":59}],67:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedIntegrityProtected,this.encrypted=null,this.modification=!1,this.packets=null}b.exports=d;var e=(a("../util.js"),a("../crypto")),f=a("../enums.js");d.prototype.read=function(a){var b=a.charCodeAt(0);if(1!=b)throw new Error("Invalid packet version.");this.encrypted=a.substr(1)},d.prototype.write=function(){return String.fromCharCode(1)+this.encrypted},d.prototype.encrypt=function(a,b){var c=this.packets.write(),d=e.getPrefixRandom(a),f=d+d.charAt(d.length-2)+d.charAt(d.length-1),g=c;g+=String.fromCharCode(211),g+=String.fromCharCode(20),g+=e.hash.sha1(f+g),this.encrypted=e.cfb.encrypt(d,a,g,b,!1),f.length+g.length!=this.encrypted.length&&(this.encrypted=this.encrypted.substring(0,f.length+g.length))},d.prototype.decrypt=function(a,b){var c=e.cfb.decrypt(a,b,this.encrypted,!1),d=c.slice(c.length-20,c.length).join("");if(c.splice(c.length-20),this.hash=e.hash.sha1(e.cfb.mdc(a,b,this.encrypted)+c.join("")),this.hash!=d)throw new Error("Modification detected.");c.splice(c.length-2),this.packets.read(c.join(""))}},{"../crypto":32,"../enums.js":43,"../util.js":76}],68:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedSessionKey,this.version=4,this.sessionKeyEncryptionAlgorithm=null,this.sessionKeyAlgorithm="aes256",this.encrypted=null,this.s2k=new e}var e=a("../type/s2k.js"),f=a("../enums.js"),g=a("../crypto");b.exports=d,d.prototype.read=function(a){this.version=a.charCodeAt(0);var b=f.read(f.symmetric,a.charCodeAt(1)),c=this.s2k.read(a.substr(2)),d=c+2;d<a.length?(this.encrypted=a.substr(d),this.sessionKeyEncryptionAlgorithm=b):this.sessionKeyAlgorithm=b},d.prototype.write=function(){var a=null===this.encrypted?this.sessionKeyAlgorithm:this.sessionKeyEncryptionAlgorithm,b=String.fromCharCode(this.version)+String.fromCharCode(f.write(f.symmetric,a))+this.s2k.write();return null!==this.encrypted&&(b+=this.encrypted),b},d.prototype.decrypt=function(a){var b=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm,c=g.cipher[b].keySize,d=this.s2k.produce_key(a,c);if(null===this.encrypted)this.sessionKey=d;else{var e=g.cfb.decrypt(this.sessionKeyEncryptionAlgorithm,d,this.encrypted,!0);e=e.join(""),this.sessionKeyAlgorithm=f.read(f.symmetric,e[0].keyCodeAt()),this.sessionKey=e.substr(1)}},d.prototype.encrypt=function(a){var b=g.getKeyLength(this.sessionKeyEncryptionAlgorithm),c=this.s2k.produce_key(a,b),d=String.fromCharCode(f.write(f.symmetric,this.sessionKeyAlgorithm))+g.getRandomBytes(g.getKeyLength(this.sessionKeyAlgorithm));this.encrypted=g.cfb.encrypt(g.getPrefixRandom(this.sessionKeyEncryptionAlgorithm),this.sessionKeyEncryptionAlgorithm,c,d,!0)},d.prototype.postCloneTypeFix=function(){this.s2k=e.fromClone(this.s2k)}},{"../crypto":32,"../enums.js":43,"../type/s2k.js":75}],69:[function(a,b,c){function d(){this.tag=f.packet.symmetricallyEncrypted,this.encrypted=null,this.packets=null,this.ignore_mdc_error=g.ignore_mdc_error}b.exports=d;var e=a("../crypto"),f=a("../enums.js"),g=a("../config");d.prototype.read=function(a){this.encrypted=a},d.prototype.write=function(){return this.encrypted},d.prototype.decrypt=function(a,b){var c=e.cfb.decrypt(a,b,this.encrypted,!0);if(!this.ignore_mdc_error&&("aes128"===a||"aes192"===a||"aes256"===a))throw new Error("Decryption failed due to missing MDC in combination with modern cipher.");this.packets.read(c.join(""))},d.prototype.encrypt=function(a,b){var c=this.packets.write();this.encrypted=e.cfb.encrypt(e.getPrefixRandom(a),a,c,b,!0)}},{"../config":17,"../crypto":32,"../enums.js":43}],70:[function(a,b,c){function d(){this.tag=e.packet.trust}b.exports=d;var e=a("../enums.js");d.prototype.read=function(a){}},{"../enums.js":43}],71:[function(a,b,c){function d(){this.tag=f.packet.userAttribute,this.attributes=[]}var e=(a("../util.js"),a("./packet.js")),f=a("../enums.js");b.exports=d,d.prototype.read=function(a){for(var b=0;b<a.length;){var c=e.readSimpleLength(a.substr(b));b+=c.offset,this.attributes.push(a.substr(b,c.len)),b+=c.len}},d.prototype.write=function(){for(var a="",b=0;b<this.attributes.length;b++)a+=e.writeSimpleLength(this.attributes[b].length),a+=this.attributes[b];return a},d.prototype.equals=function(a){return a&&a instanceof d?this.attributes.every(function(b,c){return b===a.attributes[c]}):!1}},{"../enums.js":43,"../util.js":76,"./packet.js":59}],72:[function(a,b,c){function d(){this.tag=f.packet.userid,this.userid=""}b.exports=d;var e=a("../util.js"),f=a("../enums.js");d.prototype.read=function(a){this.userid=e.decode_utf8(a)},d.prototype.write=function(){return e.encode_utf8(this.userid)}},{"../enums.js":43,"../util.js":76}],73:[function(a,b,c){function d(){this.bytes=""}b.exports=d;var e=a("../util.js");d.prototype.read=function(a){this.bytes=a.substr(0,8)},d.prototype.write=function(){return this.bytes},d.prototype.toHex=function(){return e.hexstrdump(this.bytes)},d.prototype.equals=function(a){return this.bytes==a.bytes},d.prototype.isNull=function(){return""===this.bytes},b.exports.mapToHex=function(a){return a.toHex()},b.exports.fromClone=function(a){var b=new d;return b.bytes=a.bytes,b},b.exports.fromId=function(a){var b=new d;return b.read(e.hex2bin(a)),b}},{"../util.js":76}],74:[function(a,b,c){function d(){this.data=null}b.exports=d;var e=a("../crypto/public_key/jsbn.js"),f=a("../util.js");d.prototype.read=function(a){var b=a.charCodeAt(0)<<8|a.charCodeAt(1),c=Math.ceil(b/8),d=a.substr(2,c);return this.fromBytes(d),2+c},d.prototype.fromBytes=function(a){this.data=new e(f.hexstrdump(a),16)},d.prototype.toBytes=function(){return this.write().substr(2)},d.prototype.byteLength=function(){return this.toBytes().length},d.prototype.write=function(){return this.data.toMPI()},d.prototype.toBigInteger=function(){return this.data.clone()},d.prototype.fromBigInteger=function(a){this.data=a.clone()},b.exports.fromClone=function(a){a.data.copyTo=e.prototype.copyTo;var b=new e;a.data.copyTo(b);var c=new d;return c.data=b,c}},{"../crypto/public_key/jsbn.js":37,"../util.js":76}],75:[function(a,b,c){function d(){this.algorithm="sha256",this.type="iterated",this.c=96,this.salt=g.random.getRandomBytes(8)}b.exports=d;var e=a("../enums.js"),f=a("../util.js"),g=a("../crypto");d.prototype.get_count=function(){var a=6;return 16+(15&this.c)<<(this.c>>4)+a},d.prototype.read=function(a){var b=0;switch(this.type=e.read(e.s2k,a.charCodeAt(b++)),this.algorithm=e.read(e.hash,a.charCodeAt(b++)),this.type){case"simple":break;case"salted":this.salt=a.substr(b,8),b+=8;break;case"iterated":this.salt=a.substr(b,8),b+=8,this.c=a.charCodeAt(b++);break;case"gnu":if("GNU"!=a.substr(b,3))throw new Error("Unknown s2k type.");b+=3;var c=1e3+a.charCodeAt(b++);if(1001!=c)throw new Error("Unknown s2k gnu protection mode.");this.type=c;break;default:throw new Error("Unknown s2k type.")}return b},d.prototype.write=function(){var a=String.fromCharCode(e.write(e.s2k,this.type));switch(a+=String.fromCharCode(e.write(e.hash,this.algorithm)),this.type){case"simple":break;case"salted":a+=this.salt;break;case"iterated":a+=this.salt,a+=String.fromCharCode(this.c);break;case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}return a},d.prototype.produce_key=function(a,b){function c(b,c){var d=e.write(e.hash,c.algorithm);switch(c.type){case"simple":return g.hash.digest(d,b+a);case"salted":return g.hash.digest(d,b+c.salt+a);case"iterated":for(var f=[],h=c.get_count(),i=c.salt+a;f.length*i.length<h;)f.push(i);return f=f.join(""),f.length>h&&(f=f.substr(0,h)),g.hash.digest(d,b+f);case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}}a=f.encode_utf8(a);for(var d="",h="";d.length<=b;)d+=c(h,this),h+=String.fromCharCode(0);return d.substr(0,b)},b.exports.fromClone=function(a){var b=new d;return this.algorithm=a.algorithm,this.type=a.type,this.c=a.c,this.salt=a.salt,b}},{"../crypto":32,"../enums.js":43,"../util.js":76}],76:[function(a,b,c){"use strict";var d=a("./config");b.exports={readNumber:function(a){for(var b=0,c=0;c<a.length;c++)b<<=8,b+=a.charCodeAt(c);return b},writeNumber:function(a,b){for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a>>8*(b-d-1)&255);return c},readDate:function(a){var b=this.readNumber(a),c=new Date;return c.setTime(1e3*b),c},writeDate:function(a){var b=Math.round(a.getTime()/1e3);return this.writeNumber(b,4)},emailRegEx:/^[+a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,6}$/,hexdump:function(a){for(var b,c=[],d=a.length,e=0,f=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(" "+b),f++,f%32===0&&c.push("\n           ")}return c.join("")},hexstrdump:function(a){if(null===a)return"";for(var b,c=[],d=a.length,e=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},hex2bin:function(a){for(var b="",c=0;c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},hexidump:function(a){for(var b,c=[],d=a.length,e=0;d>e;){for(b=a[e++].toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},encode_utf8:function(a){return unescape(encodeURIComponent(a))},decode_utf8:function(a){if("string"!=typeof a)throw new Error('Parameter "utf8" is not of type string');try{return decodeURIComponent(escape(a))}catch(b){return a}},bin2str:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")},str2bin:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b},str2Uint8Array:function(a){for(var b=new Uint8Array(a.length),c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b},Uint8Array2str:function(a){for(var b=[],c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")},calc_checksum:function(a){for(var b={s:0,add:function(a){this.s=(this.s+a)%65536}},c=0;c<a.length;c++)b.add(a.charCodeAt(c));return b.s},print_debug:function(a){d.debug&&console.log(a)},print_debug_hexstr_dump:function(a,b){d.debug&&(a+=this.hexstrdump(b),console.log(a))},getLeftNBits:function(a,b){var c=b%8;if(0===c)return a.substring(0,b/8);var d=(b-c)/8+1,e=a.substring(0,d);return this.shiftRight(e,8-c)},shiftRight:function(a,b){var c=util.str2bin(a);if(b%8===0)return a;for(var d=c.length-1;d>=0;d--)c[d]>>=b%8,d>0&&(c[d]|=c[d-1]<<8-b%8&255);return util.bin2str(c)},get_hashAlgorithmString:function(a){switch(a){case 1:return"MD5";case 2:return"SHA1";case 3:return"RIPEMD160";case 8:return"SHA256";case 9:return"SHA384";case 10:return"SHA512";case 11:return"SHA224"}return"unknown"},getWebCrypto:function(){if(d.useWebCrypto!==!1&&"undefined"!=typeof window){if(window.crypto)return window.crypto.subtle||window.crypto.webkitSubtle;if(window.msCrypto)return window.msCrypto.subtle}}}},{"./config":17}],77:[function(a,b,c){"use strict";function d(a,b){b&&b.worker?this.worker=b.worker:this.worker=new Worker(a||"openpgp.worker.js"),this.worker.onmessage=this.onMessage.bind(this),this.worker.onerror=function(a){throw new Error("Unhandled error in openpgp worker: "+a.message+" ("+a.filename+":"+a.lineno+")")},this.seedRandom(i),this.tasks=[],b&&b.config&&this.worker.postMessage({event:"configure",config:b.config})}var e=a("../crypto"),f=a("../packet"),g=a("../key.js"),h=a("../type/keyid.js"),i=5e4,j=2e4;d.prototype.execute=function(a){var b=this,c=new Promise(function(c,d){a(),b.tasks.push({resolve:c,reject:d})});return c},d.prototype.onMessage=function(a){var b=a.data;switch(b.event){case"method-return":b.err?this.tasks.shift().reject(new Error(b.err)):this.tasks.shift().resolve(b.data);break;case"request-seed":this.seedRandom(j);break;default:throw new Error("Unknown Worker Event.")}},d.prototype.seedRandom=function(a){var b=this.getRandomBuffer(a);this.worker.postMessage({event:"seed-random",buf:b})},d.prototype.getRandomBuffer=function(a){if(!a)return null;var b=new Uint8Array(a);return e.random.getRandomValues(b),b},d.prototype.terminate=function(){this.worker.terminate()},d.prototype.encryptMessage=function(a,b,c,d){var e=this;return e.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"encrypt-message",keys:a,text:b,format:c,filename:d})})},d.prototype.signAndEncryptMessage=function(a,b,c,d,e){var f=this;return f.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),b=b.toPacketlist(),f.worker.postMessage({event:"sign-and-encrypt-message",publicKeys:a,privateKey:b,text:c,format:d,filename:e})})},d.prototype.decryptMessage=function(a,b,c){var d=this;return d.execute(function(){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-message",privateKey:a,message:b,format:c})})},d.prototype.decryptAndVerifyMessage=function(a,b,c,d){var e=this,f=new Promise(function(f,g){a=a.toPacketlist(),b.length||(b=[b]),b=b.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"decrypt-and-verify-message",privateKey:a,publicKeys:b,message:c,format:d}),e.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),f(a)},reject:g})});return f},d.prototype.signClearMessage=function(a,b){var c=this;return c.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"sign-clear-message",privateKeys:a,text:b})})},d.prototype.verifyClearSignedMessage=function(a,b){var c=this,d=new Promise(function(d,e){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"verify-clear-signed-message",publicKeys:a,message:b}),c.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),d(a)},reject:e})});return d},d.prototype.generateKeyPair=function(a){var b=this,c=new Promise(function(c,d){b.worker.postMessage({event:"generate-key-pair",options:a}),b.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a.key);a.key=new g.Key(b),c(a)},reject:d})});return c},d.prototype.decryptKey=function(a,b){var c=this,d=new Promise(function(d,e){a=a.toPacketlist(),c.worker.postMessage({event:"decrypt-key",privateKey:a,password:b}),c.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);d(a)},reject:e})});return d},d.prototype.decryptKeyPacket=function(a,b,c){var d=this,e=new Promise(function(e,h){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-key-packet",privateKey:a,keyIds:b,password:c}),d.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);e(a)},reject:h})});return e},b.exports=d},{"../crypto":32,"../key.js":47,"../packet":55,"../type/keyid.js":73}]},{},[46])(46)});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/temp/js_cache/publickey-0e011cb.js	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,456 @@
+"use strict";
+
+(function(context){
+    /*
+        Default keyservers (HTTPS and CORS enabled)
+    */
+    var DEFAULT_KEYSERVERS = [
+        "https://keys.fedoraproject.org/",
+        "https://keybase.io/",
+    ];
+
+    /*
+        Initialization to create an PublicKey object.
+
+        Arguments:
+
+        * keyservers - Array of keyserver domains, default is:
+            ["https://keys.fedoraproject.org/", "https://keybase.io/"]
+
+        Examples:
+
+        //Initialize with the default keyservers
+        var hkp = new PublicKey();
+
+        //Initialize only with a specific keyserver
+        var hkp = new PublicKey(["https://key.ip6.li/"]);
+    */
+    var PublicKey = function(keyservers){
+        this.keyservers = keyservers || DEFAULT_KEYSERVERS;
+    };
+
+    /*
+        Get a public key from any keyserver based on keyId.
+
+        Arguments:
+
+        * keyId - String key id of the public key (this is usually a fingerprint)
+
+        * callback - Function that is called when finished. Two arguments are
+                passed to the callback: publicKey and errorCode. publicKey is
+                an ASCII armored OpenPGP public key. errorCode is the error code
+                (either HTTP status code or keybase error code) returned by the
+                last keyserver that was tried. If a publicKey was found,
+                errorCode is null. If no publicKey was found, publicKey is null
+                and errorCode is not null.
+
+        Examples:
+
+        //Get a valid public key
+        var hkp = new PublicKey();
+        hkp.get("F75BE4E6EF6E9DD203679E94E7F6FAD172EFEE3D", function(publicKey, errorCode){
+            errorCode !== null ? console.log(errorCode) : console.log(publicKey);
+        });
+
+        //Try to get an invalid public key
+        var hkp = new PublicKey();
+        hkp.get("bogus_id", function(publicKey, errorCode){
+            errorCode !== null ? console.log(errorCode) : console.log(publicKey);
+        });
+    */
+    PublicKey.prototype.get = function(keyId, callback, keyserverIndex, err){
+        //default starting point is at the first keyserver
+        if(keyserverIndex === undefined){
+            keyserverIndex = 0;
+        }
+
+        //no more keyservers to check, so no key found
+        if(keyserverIndex >= this.keyservers.length){
+            return callback(null, err || 404);
+        }
+
+        //set the keyserver to try next
+        var ks = this.keyservers[keyserverIndex];
+        var _this = this;
+
+        //special case for keybase
+        if(ks.indexOf("https://keybase.io/") === 0){
+
+            //don't need 0x prefix for keybase searches
+            if(keyId.indexOf("0x") === 0){
+                keyId = keyId.substr(2);
+            }
+
+            //request the public key from keybase
+            var xhr = new XMLHttpRequest();
+            xhr.open("get", "https://keybase.io/_/api/1.0/user/lookup.json" +
+                "?fields=public_keys&key_fingerprint=" + keyId);
+            xhr.onload = function(){
+                if(xhr.status === 200){
+                    var result = JSON.parse(xhr.responseText);
+
+                    //keybase error returns HTTP 200 status, which is silly
+                    if(result['status']['code'] !== 0){
+                        return _this.get(keyId, callback, keyserverIndex + 1, result['status']['code']);
+                    }
+
+                    //no public key found
+                    if(result['them'].length === 0){
+                        return _this.get(keyId, callback, keyserverIndex + 1, 404);
+                    }
+
+                    //found the public key
+                    var publicKey = result['them'][0]['public_keys']['primary']['bundle'];
+                    return callback(publicKey, null);
+                }
+                else{
+                    return _this.get(keyId, callback, keyserverIndex + 1, xhr.status);
+                }
+            };
+            xhr.send();
+        }
+
+        //normal HKP keyserver
+        else{
+            //add the 0x prefix if absent
+            if(keyId.indexOf("0x") !== 0){
+                keyId = "0x" + keyId;
+            }
+
+            //request the public key from the hkp server
+            var xhr = new XMLHttpRequest();
+            xhr.open("get", ks + "pks/lookup?op=get&options=mr&search=" + keyId);
+            xhr.onload = function(){
+                if(xhr.status === 200){
+                    return callback(xhr.responseText, null);
+                }
+                else{
+                    return _this.get(keyId, callback, keyserverIndex + 1, xhr.status);
+                }
+            };
+            xhr.send();
+        }
+    };
+
+    /*
+        Search for a public key in the keyservers.
+
+        Arguments:
+
+        * query - String to search for (usually an email, name, or username).
+
+        * callback - Function that is called when finished. Two arguments are
+                passed to the callback: results and errorCode. results is an
+                Array of users that were returned by the search. errorCode is
+                the error code (either HTTP status code or keybase error code)
+                returned by the last keyserver that was tried. If any results
+                were found, errorCode is null. If no results are found, results
+                is null and errorCode is not null.
+
+        Examples:
+
+        //Search for diafygi's key id
+        var hkp = new PublicKey();
+        hkp.search("diafygi", function(results, errorCode){
+            errorCode !== null ? console.log(errorCode) : console.log(results);
+        });
+
+        //Search for a nonexistent key id
+        var hkp = new PublicKey();
+        hkp.search("doesntexist123", function(results, errorCode){
+            errorCode !== null ? console.log(errorCode) : console.log(results);
+        });
+    */
+    PublicKey.prototype.search = function(query, callback, keyserverIndex, results, err){
+        //default starting point is at the first keyserver
+        if(keyserverIndex === undefined){
+            keyserverIndex = 0;
+        }
+
+        //initialize the results array
+        if(results === undefined){
+            results = [];
+        }
+
+        //no more keyservers to check
+        if(keyserverIndex >= this.keyservers.length){
+
+            //return error if no results
+            if(results.length === 0){
+                return callback(null, err || 404);
+            }
+
+            //return results
+            else{
+
+                //merge duplicates
+                var merged = {};
+                for(var i = 0; i < results.length; i++){
+                    var k = results[i];
+
+                    //see if there's duplicate key ids to merge
+                    if(merged[k['keyid']] !== undefined){
+
+                        for(var u = 0; u < k['uids'].length; u++){
+                            var has_this_uid = false;
+
+                            for(var m = 0; m < merged[k['keyid']]['uids'].length; m++){
+                                if(merged[k['keyid']]['uids'][m]['uid'] === k['uids'][u]){
+                                    has_this_uid = true;
+                                    break;
+                                }
+                            }
+
+                            if(!has_this_uid){
+                                merged[k['keyid']]['uids'].push(k['uids'][u])
+                            }
+                        }
+                    }
+
+                    //no duplicate found, so add it to the dict
+                    else{
+                        merged[k['keyid']] = k;
+                    }
+                }
+
+                //return a list of the merged results in the same order
+                var merged_list = [];
+                for(var i = 0; i < results.length; i++){
+                    var k = results[i];
+                    if(merged[k['keyid']] !== undefined){
+                        merged_list.push(merged[k['keyid']]);
+                        delete(merged[k['keyid']]);
+                    }
+                }
+                return callback(merged_list, null);
+            }
+        }
+
+        //set the keyserver to try next
+        var ks = this.keyservers[keyserverIndex];
+        var _this = this;
+
+        //special case for keybase
+        if(ks.indexOf("https://keybase.io/") === 0){
+
+            //request a list of users from keybase
+            var xhr = new XMLHttpRequest();
+            xhr.open("get", "https://keybase.io/_/api/1.0/user/autocomplete.json?q=" + encodeURIComponent(query));
+            xhr.onload = function(){
+                if(xhr.status === 200){
+                    var kb_json = JSON.parse(xhr.responseText);
+
+                    //keybase error returns HTTP 200 status, which is silly
+                    if(kb_json['status']['code'] !== 0){
+                        return _this.search(query, callback, keyserverIndex + 1, results, kb_json['status']['code']);
+                    }
+
+                    //no public key found
+                    if(kb_json['completions'].length === 0){
+                        return _this.search(query, callback, keyserverIndex + 1, results, 404);
+                    }
+
+                    //compose keybase user results
+                    var kb_results = [];
+                    for(var i = 0; i < kb_json['completions'].length; i++){
+                        var user = kb_json['completions'][i]['components'];
+
+                        //skip if no public key fingerprint
+                        if(user['key_fingerprint'] === undefined){
+                            continue;
+                        }
+
+                        //build keybase user result
+                        var kb_result = {
+                            "keyid": user['key_fingerprint']['val'].toUpperCase(),
+                            "href": "https://keybase.io/" + user['username']['val'] + "/key.asc",
+                            "info": "https://keybase.io/" + user['username']['val'],
+                            "algo": user['key_fingerprint']['algo'],
+                            "keylen": user['key_fingerprint']['nbits'],
+                            "creationdate": null,
+                            "expirationdate": null,
+                            "revoked": false,
+                            "disabled": false,
+                            "expired": false,
+                            "uids": [{
+                                "uid": user['username']['val'] +
+                                    " on Keybase <https://keybase.io/" +
+                                    user['username']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            }]
+                        };
+
+                        //add full name
+                        if(user['full_name'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": "Full Name: " + user['full_name']['val'],
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add twitter
+                        if(user['twitter'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": user['twitter']['val'] +
+                                    " on Twitter <https://twitter.com/" +
+                                    user['twitter']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add github
+                        if(user['github'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": user['github']['val'] +
+                                    " on Github <https://github.com/" +
+                                    user['github']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add reddit
+                        if(user['reddit'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": user['reddit']['val'] +
+                                    " on Github <https://reddit.com/u/" +
+                                    user['reddit']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add hackernews
+                        if(user['hackernews'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": user['hackernews']['val'] +
+                                    " on Hacker News <https://news.ycombinator.com/user?id=" +
+                                    user['hackernews']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add coinbase
+                        if(user['coinbase'] !== undefined){
+                            kb_result['uids'].push({
+                                "uid": user['coinbase']['val'] +
+                                    " on Coinbase <https://www.coinbase.com/" +
+                                    user['coinbase']['val'] + ">",
+                                "creationdate": null,
+                                "expirationdate": null,
+                                "revoked": false,
+                                "disabled": false,
+                                "expired": false,
+                            });
+                        }
+
+                        //add websites
+                        if(user['websites'] !== undefined){
+                            for(var w = 0; w < user['websites'].length; w++){
+                                kb_result['uids'].push({
+                                    "uid": "Owns " + user['websites'][w]['val'],
+                                    "creationdate": null,
+                                    "expirationdate": null,
+                                    "revoked": false,
+                                    "disabled": false,
+                                    "expired": false,
+                                });
+                            }
+                        }
+
+                        kb_results.push(kb_result);
+                    }
+
+                    results = results.concat(kb_results);
+                    return _this.search(query, callback, keyserverIndex + 1, results, null);
+                }
+                else{
+                    return _this.search(query, callback, keyserverIndex + 1, results, xhr.status);
+                }
+            };
+            xhr.send();
+        }
+
+        //normal HKP keyserver
+        else{
+            var xhr = new XMLHttpRequest();
+            xhr.open("get", ks + "pks/lookup?op=index&options=mr&fingerprint=on&search=" + encodeURIComponent(query));
+            xhr.onload = function(){
+                if(xhr.status === 200){
+                    var ks_results = [];
+                    var raw = xhr.responseText.split("\n");
+                    var curKey = undefined;
+                    for(var i = 0; i < raw.length; i++){
+                        var line = raw[i].trim();
+
+                        //pub:<keyid>:<algo>:<keylen>:<creationdate>:<expirationdate>:<flags>
+                        if(line.indexOf("pub:") == 0){
+                            if(curKey !== undefined){
+                                ks_results.push(curKey);
+                            }
+                            var vals = line.split(":");
+                            curKey = {
+                                "keyid": vals[1],
+                                "href": ks + "pks/lookup?op=get&options=mr&search=0x" + vals[1],
+                                "info": ks + "pks/lookup?op=vindex&search=0x" + vals[1],
+                                "algo": vals[2] === "" ? null : parseInt(vals[2]),
+                                "keylen": vals[3] === "" ? null : parseInt(vals[3]),
+                                "creationdate": vals[4] === "" ? null : parseInt(vals[4]),
+                                "expirationdate": vals[5] === "" ? null : parseInt(vals[5]),
+                                "revoked": vals[6].indexOf("r") !== -1,
+                                "disabled": vals[6].indexOf("d") !== -1,
+                                "expired": vals[6].indexOf("e") !== -1,
+                                "uids": [],
+                            }
+                        }
+
+                        //uid:<escaped uid string>:<creationdate>:<expirationdate>:<flags>
+                        if(line.indexOf("uid:") == 0){
+                            var vals = line.split(":");
+                            curKey['uids'].push({
+                                "uid": decodeURIComponent(vals[1]),
+                                "creationdate": vals[2] === "" ? null : parseInt(vals[2]),
+                                "expirationdate": vals[3] === "" ? null : parseInt(vals[3]),
+                                "revoked": vals[4].indexOf("r") !== -1,
+                                "disabled": vals[4].indexOf("d") !== -1,
+                                "expired": vals[4].indexOf("e") !== -1,
+                            });
+                        }
+                    }
+                    ks_results.push(curKey);
+
+                    results = results.concat(ks_results);
+                    return _this.search(query, callback, keyserverIndex + 1, results, null);
+                }
+                else{
+                    return _this.search(query, callback, keyserverIndex + 1, results, xhr.status);
+                }
+            };
+            xhr.send();
+        }
+    };
+
+    context.PublicKey = PublicKey;
+})(typeof exports === "undefined" ? this : exports);
Binary file temp/js_cache/tinymce-4.5.8.zip has changed
Binary file temp/js_cache/tinymce-langs-4.5.8.tmp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/autoload.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitd52cd7aa2b1301e6e89413f57235d2fc::getLoader();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bin/crypt-gpg-pinentry	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+../pear/crypt_gpg/scripts/crypt-gpg-pinentry
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bin/rcubeinitdb.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+../roundcube/plugin-installer/src/bin/rcubeinitdb.sh
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/ClassLoader.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+    private $classMapAuthoritative = false;
+    private $missingClasses = array();
+    private $apcuPrefix;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath.'\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        $length = $this->prefixLengthsPsr4[$first][$search];
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+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.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/autoload_classmap.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Net_Sieve' => $vendorDir . '/pear/net_sieve/Sieve.php',
+    'SieveTest' => $vendorDir . '/pear/net_sieve/tests/SieveTest.php',
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/autoload_namespaces.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Roundcube\\Composer' => array($vendorDir . '/roundcube/plugin-installer/src'),
+    'PEAR' => array($vendorDir . '/pear/pear_exception'),
+    'Net' => array($vendorDir . '/pear/net_idna2', $vendorDir . '/pear/net_socket', $vendorDir . '/pear/net_smtp'),
+    'Mail' => array($vendorDir . '/pear/mail_mime'),
+    'Crypt' => array($vendorDir . '/pear/crypt_gpg'),
+    'Console' => array($vendorDir . '/pear/console_commandline', $vendorDir . '/pear/console_getopt'),
+    'Auth' => array($vendorDir . '/pear/auth_sasl'),
+    '' => array($vendorDir . '/pear/pear-core-minimal/src'),
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/autoload_psr4.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qrcode/src'),
+    'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'),
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/autoload_real.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitd52cd7aa2b1301e6e89413f57235d2fc
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInitd52cd7aa2b1301e6e89413f57235d2fc', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInitd52cd7aa2b1301e6e89413f57235d2fc', 'loadClassLoader'));
+
+        $includePaths = require __DIR__ . '/include_paths.php';
+        array_push($includePaths, get_include_path());
+        set_include_path(implode(PATH_SEPARATOR, $includePaths));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        return $loader;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/autoload_static.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,103 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc
+{
+    public static $prefixLengthsPsr4 = array (
+        'E' => 
+        array (
+            'Endroid\\QrCode\\' => 15,
+        ),
+        'C' => 
+        array (
+            'Composer\\Semver\\' => 16,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'Endroid\\QrCode\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/endroid/qrcode/src',
+        ),
+        'Composer\\Semver\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/composer/semver/src',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'R' => 
+        array (
+            'Roundcube\\Composer' => 
+            array (
+                0 => __DIR__ . '/..' . '/roundcube/plugin-installer/src',
+            ),
+        ),
+        'P' => 
+        array (
+            'PEAR' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/pear_exception',
+            ),
+        ),
+        'N' => 
+        array (
+            'Net' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/net_idna2',
+                1 => __DIR__ . '/..' . '/pear/net_socket',
+                2 => __DIR__ . '/..' . '/pear/net_smtp',
+            ),
+        ),
+        'M' => 
+        array (
+            'Mail' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/mail_mime',
+            ),
+        ),
+        'C' => 
+        array (
+            'Crypt' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/crypt_gpg',
+            ),
+            'Console' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/console_commandline',
+                1 => __DIR__ . '/..' . '/pear/console_getopt',
+            ),
+        ),
+        'A' => 
+        array (
+            'Auth' => 
+            array (
+                0 => __DIR__ . '/..' . '/pear/auth_sasl',
+            ),
+        ),
+    );
+
+    public static $fallbackDirsPsr0 = array (
+        0 => __DIR__ . '/..' . '/pear/pear-core-minimal/src',
+    );
+
+    public static $classMap = array (
+        'Net_Sieve' => __DIR__ . '/..' . '/pear/net_sieve/Sieve.php',
+        'SieveTest' => __DIR__ . '/..' . '/pear/net_sieve/tests/SieveTest.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInitd52cd7aa2b1301e6e89413f57235d2fc::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/include_paths.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+<?php
+
+// include_paths.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    $vendorDir . '/pear/pear_exception',
+    $vendorDir . '/pear/auth_sasl',
+    $vendorDir . '/pear/net_idna2',
+    $vendorDir . '/pear/console_commandline',
+    $vendorDir . '/pear/crypt_gpg',
+    $vendorDir . '/pear/net_socket',
+    $vendorDir . '/pear/console_getopt',
+    $vendorDir . '/pear/pear-core-minimal/src',
+    $vendorDir . '/pear/mail_mime',
+    $vendorDir . '/pear/net_smtp',
+);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/installed.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,914 @@
+[
+    {
+        "name": "composer/semver",
+        "version": "1.4.2",
+        "version_normalized": "1.4.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/composer/semver.git",
+            "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
+            "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+            "shasum": ""
+        },
+        "require": {
+            "php": "^5.3.2 || ^7.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^4.5 || ^5.0.5",
+            "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+        },
+        "time": "2016-08-30T16:08:34+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Composer\\Semver\\": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Nils Adermann",
+                "email": "naderman@naderman.de",
+                "homepage": "http://www.naderman.de"
+            },
+            {
+                "name": "Jordi Boggiano",
+                "email": "j.boggiano@seld.be",
+                "homepage": "http://seld.be"
+            },
+            {
+                "name": "Rob Bast",
+                "email": "rob.bast@gmail.com",
+                "homepage": "http://robbast.nl"
+            }
+        ],
+        "description": "Semver library that offers utilities, version constraint parsing and validation.",
+        "keywords": [
+            "semantic",
+            "semver",
+            "validation",
+            "versioning"
+        ]
+    },
+    {
+        "name": "roundcube/plugin-installer",
+        "version": "0.1.9",
+        "version_normalized": "0.1.9.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/roundcube/plugin-installer.git",
+            "reference": "782420af7fb3f24295a61101d7e9296110c894e4"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/782420af7fb3f24295a61101d7e9296110c894e4",
+            "reference": "782420af7fb3f24295a61101d7e9296110c894e4",
+            "shasum": ""
+        },
+        "require": {
+            "composer/semver": "^1.4.2",
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "composer/composer": "*"
+        },
+        "time": "2017-10-29T16:13:28+00:00",
+        "bin": [
+            "src/bin/rcubeinitdb.sh"
+        ],
+        "type": "composer-installer",
+        "extra": {
+            "class": "Roundcube\\Composer\\PluginInstaller"
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Roundcube\\Composer": "src/"
+            }
+        },
+        "notification-url": "https://plugins.roundcube.net/downloads/",
+        "license": [
+            "GPL-3.0+"
+        ],
+        "authors": [
+            {
+                "name": "Till Klampaeckel",
+                "email": "till@php.net"
+            },
+            {
+                "name": "Thomas Bruederli",
+                "email": "thomas@roundcube.net"
+            }
+        ],
+        "description": "A composer-installer for Roundcube plugins."
+    },
+    {
+        "name": "pear/pear_exception",
+        "version": "v1.0.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/PEAR_Exception.git",
+            "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
+            "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=4.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "*"
+        },
+        "time": "2015-02-10T20:07:52+00:00",
+        "type": "class",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "PEAR": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "."
+        ],
+        "license": [
+            "BSD-2-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Helgi Thormar",
+                "email": "dufuz@php.net"
+            },
+            {
+                "name": "Greg Beaver",
+                "email": "cellog@php.net"
+            }
+        ],
+        "description": "The PEAR Exception base class.",
+        "homepage": "https://github.com/pear/PEAR_Exception",
+        "keywords": [
+            "exception"
+        ]
+    },
+    {
+        "name": "pear/auth_sasl",
+        "version": "v1.1.0",
+        "version_normalized": "1.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Auth_SASL.git",
+            "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Auth_SASL/zipball/db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
+            "reference": "db1ead3dc0bf986d2bab0dbc04d114800cf91dee",
+            "shasum": ""
+        },
+        "require": {
+            "pear/pear_exception": "@stable"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "@stable"
+        },
+        "time": "2017-03-07T14:37:05+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Auth": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "BSD"
+        ],
+        "authors": [
+            {
+                "name": "Anish Mistry",
+                "email": "amistry@am-productions.biz",
+                "role": "Lead"
+            },
+            {
+                "name": "Richard Heyes",
+                "email": "richard@php.net",
+                "role": "Lead"
+            },
+            {
+                "name": "Michael Bretterklieber",
+                "email": "michael@bretterklieber.com",
+                "role": "Lead"
+            }
+        ],
+        "description": "Abstraction of various SASL mechanism responses"
+    },
+    {
+        "name": "pear/net_idna2",
+        "version": "v0.2.0",
+        "version_normalized": "0.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Net_IDNA2.git",
+            "reference": "51734eaf8be2df58e8aad5835b9966459b2fb37c"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Net_IDNA2/zipball/51734eaf8be2df58e8aad5835b9966459b2fb37c",
+            "reference": "51734eaf8be2df58e8aad5835b9966459b2fb37c",
+            "shasum": ""
+        },
+        "require": {
+            "pear/pear_exception": "@stable"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^4"
+        },
+        "time": "2017-03-06T20:46:41+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Net": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "LGPL"
+        ],
+        "authors": [
+            {
+                "name": "Stefan Neufeind",
+                "email": "pear.neufeind@speedpartner.de",
+                "role": "Lead"
+            },
+            {
+                "name": "Daniel O'Connor",
+                "email": "daniel.oconnor@gmail.com",
+                "role": "Lead"
+            }
+        ],
+        "description": "More info available on: https://pear.php.net/package/Net_IDNA2"
+    },
+    {
+        "name": "pear/console_commandline",
+        "version": "v1.2.2",
+        "version_normalized": "1.2.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Console_CommandLine.git",
+            "reference": "7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Console_CommandLine/zipball/7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67",
+            "reference": "7a8afa50bdc8dbfdc0cf394f1101106e8b8f8e67",
+            "shasum": ""
+        },
+        "require": {
+            "ext-dom": "*",
+            "ext-xml": "*",
+            "pear/pear_exception": "^1.0.0",
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "*"
+        },
+        "time": "2016-07-14T06:00:57+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Console": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Richard Quadling",
+                "email": "RQuadling@GMail.com"
+            },
+            {
+                "name": "David Jean Louis",
+                "email": "izimobil@gmail.com"
+            }
+        ],
+        "description": "A full featured command line options and arguments parser.",
+        "homepage": "https://github.com/pear/Console_CommandLine",
+        "keywords": [
+            "console"
+        ]
+    },
+    {
+        "name": "pear/crypt_gpg",
+        "version": "v1.6.2",
+        "version_normalized": "1.6.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Crypt_GPG.git",
+            "reference": "43066ee0f1cad38aa6cf41ed13db34a2792e527d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Crypt_GPG/zipball/43066ee0f1cad38aa6cf41ed13db34a2792e527d",
+            "reference": "43066ee0f1cad38aa6cf41ed13db34a2792e527d",
+            "shasum": ""
+        },
+        "require": {
+            "ext-mbstring": "*",
+            "pear/console_commandline": "*",
+            "pear/pear_exception": "*",
+            "php": ">=5.4.8"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "*"
+        },
+        "suggest": {
+            "ext-posix": "May require the posix PHP extension"
+        },
+        "time": "2017-09-03T07:55:02+00:00",
+        "bin": [
+            "scripts/crypt-gpg-pinentry"
+        ],
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Crypt": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "LGPL-2.1"
+        ],
+        "authors": [
+            {
+                "name": "Michael Gauthier",
+                "email": "mike@silverorange.com"
+            },
+            {
+                "name": "Nathan Fredrickson",
+                "email": "nathan@silverorange.com"
+            },
+            {
+                "name": "Aleksander Machniak",
+                "email": "alec@alec.pl"
+            }
+        ],
+        "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
+        "homepage": "https://github.com/pear/Crypt_GPG",
+        "keywords": [
+            "PGP",
+            "encryption",
+            "gnupg",
+            "gpg"
+        ]
+    },
+    {
+        "name": "pear/net_socket",
+        "version": "v1.2.1",
+        "version_normalized": "1.2.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Net_Socket.git",
+            "reference": "f31d75ac352d49908f8987bbb1496c02a409812a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a",
+            "reference": "f31d75ac352d49908f8987bbb1496c02a409812a",
+            "shasum": ""
+        },
+        "require": {
+            "pear/pear_exception": "@stable",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^4"
+        },
+        "time": "2017-04-06T15:16:38+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Net": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "BSD-2-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Chuck Hagenbuch",
+                "email": "chuck@horde.org",
+                "role": "Lead"
+            },
+            {
+                "name": "Aleksander Machniak",
+                "email": "alec@php.net",
+                "role": "Lead"
+            },
+            {
+                "name": "Stig Bakken",
+                "email": "stig@php.net",
+                "role": "Lead"
+            }
+        ],
+        "description": "More info available on: http://pear.php.net/package/Net_Socket"
+    },
+    {
+        "name": "pear/console_getopt",
+        "version": "v1.4.1",
+        "version_normalized": "1.4.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Console_Getopt.git",
+            "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
+            "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
+            "shasum": ""
+        },
+        "time": "2015-07-20T20:28:12+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Console": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "BSD-2-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Greg Beaver",
+                "email": "cellog@php.net",
+                "role": "Helper"
+            },
+            {
+                "name": "Andrei Zmievski",
+                "email": "andrei@php.net",
+                "role": "Lead"
+            },
+            {
+                "name": "Stig Bakken",
+                "email": "stig@php.net",
+                "role": "Developer"
+            }
+        ],
+        "description": "More info available on: http://pear.php.net/package/Console_Getopt"
+    },
+    {
+        "name": "pear/pear-core-minimal",
+        "version": "v1.10.3",
+        "version_normalized": "1.10.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/pear-core-minimal.git",
+            "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115",
+            "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115",
+            "shasum": ""
+        },
+        "require": {
+            "pear/console_getopt": "~1.4",
+            "pear/pear_exception": "~1.0"
+        },
+        "replace": {
+            "rsky/pear-core-min": "self.version"
+        },
+        "time": "2017-02-28T16:46:11+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "src/"
+        ],
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Christian Weiske",
+                "email": "cweiske@php.net",
+                "role": "Lead"
+            }
+        ],
+        "description": "Minimal set of PEAR core files to be used as composer dependency"
+    },
+    {
+        "name": "pear/net_sieve",
+        "version": "1.4.0",
+        "version_normalized": "1.4.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Net_Sieve.git",
+            "reference": "0058a5e3c84841fe841c055e118fbee4ed239a8f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Net_Sieve/zipball/0058a5e3c84841fe841c055e118fbee4ed239a8f",
+            "reference": "0058a5e3c84841fe841c055e118fbee4ed239a8f",
+            "shasum": ""
+        },
+        "require": {
+            "pear/net_socket": "*",
+            "pear/pear-core-minimal": "*"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7.15"
+        },
+        "suggest": {
+            "pear/auth_sasl": "Install optionally via your project's composer.json"
+        },
+        "time": "2017-05-21T10:17:48+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "./"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD"
+        ],
+        "authors": [
+            {
+                "name": "Anish Mistry",
+                "email": "amistry@am-productions.biz",
+                "role": "Lead"
+            },
+            {
+                "name": "Richard Heyes",
+                "email": "richard@php.net",
+                "role": "Lead"
+            },
+            {
+                "name": "Jan Schneider",
+                "email": "jan@horde.org",
+                "role": "lead"
+            },
+            {
+                "name": "Damian Fernandez Sosa",
+                "email": "damlists@cnba.uba.ar",
+                "role": "Lead"
+            }
+        ],
+        "description": "More info available on: http://pear.php.net/package/Net_Sieve"
+    },
+    {
+        "name": "pear/mail_mime",
+        "version": "1.10.2",
+        "version_normalized": "1.10.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Mail_Mime.git",
+            "reference": "7b2f93fa5219da99e9997f497b916b5bb27eb57a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/7b2f93fa5219da99e9997f497b916b5bb27eb57a",
+            "reference": "7b2f93fa5219da99e9997f497b916b5bb27eb57a",
+            "shasum": ""
+        },
+        "require": {
+            "pear/pear-core-minimal": "*"
+        },
+        "time": "2017-11-17T09:21:45+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Mail": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "BSD-3-clause"
+        ],
+        "authors": [
+            {
+                "name": "Cipriano Groenendal",
+                "email": "cipri@php.net",
+                "role": "Lead"
+            },
+            {
+                "name": "Aleksander Machniak",
+                "email": "alec@php.net",
+                "role": "Lead"
+            }
+        ],
+        "description": "Mail_Mime provides classes to create MIME messages",
+        "homepage": "http://pear.php.net/package/Mail_Mime"
+    },
+    {
+        "name": "pear/net_smtp",
+        "version": "1.7.3",
+        "version_normalized": "1.7.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/pear/Net_SMTP.git",
+            "reference": "e066e5ee011ae056c03db1a95d210fc09649b477"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477",
+            "reference": "e066e5ee011ae056c03db1a95d210fc09649b477",
+            "shasum": ""
+        },
+        "require": {
+            "pear/net_socket": "*",
+            "pear/pear-core-minimal": "*",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "*"
+        },
+        "suggest": {
+            "pear/auth_sasl": "Install optionally via your project's composer.json"
+        },
+        "time": "2017-01-14T18:19:55+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Net": "./"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "./"
+        ],
+        "license": [
+            "PHP-3.01"
+        ],
+        "authors": [
+            {
+                "name": "Jon Parise",
+                "email": "jon@php.net",
+                "homepage": "http://www.indelible.org",
+                "role": "Lead"
+            },
+            {
+                "name": "Chuck Hagenbuch",
+                "email": "chuck@horde.org",
+                "role": "Lead"
+            }
+        ],
+        "description": "An implementation of the SMTP protocol",
+        "homepage": "http://pear.github.io/Net_SMTP/",
+        "keywords": [
+            "email",
+            "mail",
+            "smtp"
+        ]
+    },
+    {
+        "name": "endroid/qrcode",
+        "version": "1.6.6",
+        "version_normalized": "1.6.6.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/endroid/qr-code.git",
+            "reference": "cef5d5b7b904d7bb0708eb744c35316364b65fa0"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/endroid/qr-code/zipball/cef5d5b7b904d7bb0708eb744c35316364b65fa0",
+            "reference": "cef5d5b7b904d7bb0708eb744c35316364b65fa0",
+            "shasum": ""
+        },
+        "require": {
+            "ext-gd": "*",
+            "php": ">=5.3.0"
+        },
+        "time": "2016-05-29T07:37:18+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Endroid\\QrCode\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jeroen van den Enden",
+                "email": "info@endroid.nl",
+                "homepage": "http://endroid.nl/"
+            }
+        ],
+        "description": "Endroid QR Code",
+        "homepage": "https://github.com/endroid/QrCode",
+        "keywords": [
+            "code",
+            "endroid",
+            "qr",
+            "qrcode"
+        ],
+        "abandoned": "endroid/qr-code"
+    },
+    {
+        "name": "weird-birds/thunderbird_labels",
+        "version": "v1.1.4",
+        "version_normalized": "1.1.4.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/mike-kfed/rcmail-thunderbird-labels.git",
+            "reference": "eef4c17068b2228e1379f321a6f2923e4185b950"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/mike-kfed/rcmail-thunderbird-labels/zipball/eef4c17068b2228e1379f321a6f2923e4185b950",
+            "reference": "eef4c17068b2228e1379f321a6f2923e4185b950",
+            "shasum": ""
+        },
+        "require": {
+            "roundcube/plugin-installer": ">=0.1.3"
+        },
+        "time": "2017-11-17T09:55:56+00:00",
+        "type": "roundcube-plugin",
+        "installation-source": "dist",
+        "notification-url": "https://plugins.roundcube.net/downloads/",
+        "license": [
+            "BSD-2-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Michael Kefeder",
+                "homepage": "https://github.com/mike-kfed/rcmail-thunderbird-labels",
+                "role": "Developer"
+            }
+        ],
+        "keywords": [
+            "labels",
+            "mail",
+            "tags"
+        ]
+    },
+    {
+        "name": "johndoh/contextmenu",
+        "version": "2.3",
+        "version_normalized": "2.3.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/JohnDoh/roundcube-contextmenu.git",
+            "reference": "7a03909260638a6ae05567b091dc120b653b1330"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/JohnDoh/roundcube-contextmenu/zipball/7a03909260638a6ae05567b091dc120b653b1330",
+            "reference": "7a03909260638a6ae05567b091dc120b653b1330",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.2.1",
+            "roundcube/plugin-installer": ">=0.1.2"
+        },
+        "time": "2017-06-14T05:37:14+00:00",
+        "type": "roundcube-plugin",
+        "extra": {
+            "roundcube": {
+                "min-version": "1.3"
+            }
+        },
+        "installation-source": "dist",
+        "notification-url": "https://plugins.roundcube.net/downloads/",
+        "license": [
+            "GPL-3.0"
+        ],
+        "authors": [
+            {
+                "name": "Philip Weir",
+                "email": "roundcube@tehinterweb.co.uk",
+                "role": "Developer"
+            }
+        ],
+        "description": "Adds context menus with common tasks to various parts of Roundcube",
+        "homepage": "http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/",
+        "keywords": [
+            "context",
+            "menu",
+            "right-click"
+        ]
+    },
+    {
+        "name": "roundcube/filters",
+        "version": "dev-filters-2.1.6",
+        "version_normalized": "dev-filters-2.1.6",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/6ec123321/filters.git",
+            "reference": "5077a4abb7e13a2e98d2c8d648f576af23a6ddee"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/6ec123321/filters/zipball/5077a4abb7e13a2e98d2c8d648f576af23a6ddee",
+            "reference": "5077a4abb7e13a2e98d2c8d648f576af23a6ddee",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0",
+            "roundcube/plugin-installer": ">=0.1.3"
+        },
+        "time": "2017-05-10T13:29:46+00:00",
+        "type": "roundcube-plugin",
+        "extra": {
+            "roundcube": {
+                "min-version": "1.0-rc"
+            }
+        },
+        "installation-source": "source",
+        "notification-url": "https://plugins.roundcube.net/downloads/",
+        "license": [
+            "GNU GPLv3+"
+        ],
+        "authors": [
+            {
+                "name": "Artur Petrov",
+                "email": "admin@gtn18.ru",
+                "role": "Developer"
+            },
+            {
+                "name": "Roberto Zarrelli",
+                "email": "zarrelli@unimol.it",
+                "role": "Author"
+            }
+        ],
+        "description": "Plugin that adds a new tab to the settings section to create client-side e-mail filtering.",
+        "homepage": "https://github.com/6ec123321/filters/archive/master.zip",
+        "keywords": [
+            "client-side",
+            "filters",
+            "rules",
+            "spam"
+        ]
+    }
+]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/CHANGELOG.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning](http://semver.org/).
+
+### [1.4.2] 2016-08-30
+
+  * Fixed: collapsing of complex constraints lead to buggy constraints
+
+### [1.4.1] 2016-06-02
+
+  * Changed: branch-like requirements no longer strip build metadata - [composer/semver#38](https://github.com/composer/semver/pull/38).
+
+### [1.4.0] 2016-03-30
+
+  * Added: getters on MultiConstraint - [composer/semver#35](https://github.com/composer/semver/pull/35).
+
+### [1.3.0] 2016-02-25
+
+  * Fixed: stability parsing - [composer/composer#1234](https://github.com/composer/composer/issues/4889).
+  * Changed: collapse contiguous constraints when possible.
+
+### [1.2.0] 2015-11-10
+
+  * Changed: allow multiple numerical identifiers in 'pre-release' version part.
+  * Changed: add more 'v' prefix support.
+
+### [1.1.0] 2015-11-03
+
+  * Changed: dropped redundant `test` namespace.
+  * Changed: minor adjustment in datetime parsing normalization.
+  * Changed: `ConstraintInterface` relaxed, setPrettyString is not required anymore.
+  * Changed: `AbstractConstraint` marked deprecated, will be removed in 2.0.
+  * Changed: `Constraint` is now extensible.
+
+### [1.0.0] 2015-09-21
+
+  * Break: `VersionConstraint` renamed to `Constraint`.
+  * Break: `SpecificConstraint` renamed to `AbstractConstraint`.
+  * Break: `LinkConstraintInterface` renamed to `ConstraintInterface`.
+  * Break: `VersionParser::parseNameVersionPairs` was removed.
+  * Changed: `VersionParser::parseConstraints` allows (but ignores) build metadata now.
+  * Changed: `VersionParser::parseConstraints` allows (but ignores) prefixing numeric versions with a 'v' now.
+  * Changed: Fixed namespace(s) of test files.
+  * Changed: `Comparator::compare` no longer throws `InvalidArgumentException`.
+  * Changed: `Constraint` now throws `InvalidArgumentException`.
+
+### [0.1.0] 2015-07-23
+
+  * Added: `Composer\Semver\Comparator`, various methods to compare versions.
+  * Added: various documents such as README.md, LICENSE, etc.
+  * Added: configuration files for Git, Travis, php-cs-fixer, phpunit.
+  * Break: the following namespaces were renamed:
+    - Namespace: `Composer\Package\Version` -> `Composer\Semver`
+    - Namespace: `Composer\Package\LinkConstraint` -> `Composer\Semver\Constraint`
+    - Namespace: `Composer\Test\Package\Version` -> `Composer\Test\Semver`
+    - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint`
+  * Changed: code style using php-cs-fixer.
+
+[1.4.1]: https://github.com/composer/semver/compare/1.4.0...1.4.1
+[1.4.0]: https://github.com/composer/semver/compare/1.3.0...1.4.0
+[1.3.0]: https://github.com/composer/semver/compare/1.2.0...1.3.0
+[1.2.0]: https://github.com/composer/semver/compare/1.1.0...1.2.0
+[1.1.0]: https://github.com/composer/semver/compare/1.0.0...1.1.0
+[1.0.0]: https://github.com/composer/semver/compare/0.1.0...1.0.0
+[0.1.0]: https://github.com/composer/semver/compare/5e0b9a4da...0.1.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+Copyright (C) 2015 Composer
+
+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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,70 @@
+composer/semver
+===============
+
+Semver library that offers utilities, version constraint parsing and validation.
+
+Originally written as part of [composer/composer](https://github.com/composer/composer),
+now extracted and made available as a stand-alone library.
+
+[![Build Status](https://travis-ci.org/composer/semver.svg?branch=master)](https://travis-ci.org/composer/semver)
+
+
+Installation
+------------
+
+Install the latest version with:
+
+```bash
+$ composer require composer/semver
+```
+
+
+Requirements
+------------
+
+* PHP 5.3.2 is required but using the latest version of PHP is highly recommended.
+
+
+Version Comparison
+------------------
+
+For details on how versions are compared, refer to the [Versions](https://getcomposer.org/doc/articles/versions.md)
+article in the documentation section of the [getcomposer.org](https://getcomposer.org) website.
+
+
+Basic usage
+-----------
+
+### Comparator
+
+The `Composer\Semver\Comparator` class provides the following methods for comparing versions:
+
+* greaterThan($v1, $v2)
+* greaterThanOrEqualTo($v1, $v2)
+* lessThan($v1, $v2)
+* lessThanOrEqualTo($v1, $v2)
+* equalTo($v1, $v2)
+* notEqualTo($v1, $v2)
+
+Each function takes two version strings as arguments. For example:
+
+```php
+use Composer\Semver\Comparator;
+
+Comparator::greaterThan('1.25.0', '1.24.0'); // 1.25.0 > 1.24.0
+```
+
+### Semver
+
+The `Composer\Semver\Semver` class provides the following methods:
+
+* satisfies($version, $constraints)
+* satisfiedBy(array $versions, $constraint)
+* sort($versions)
+* rsort($versions)
+
+
+License
+-------
+
+composer/semver is licensed under the MIT License, see the LICENSE file for details.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+{
+    "name": "composer/semver",
+    "description": "Semver library that offers utilities, version constraint parsing and validation.",
+    "type": "library",
+    "license": "MIT",
+    "keywords": [
+        "semver",
+        "semantic",
+        "versioning",
+        "validation"
+    ],
+    "authors": [
+        {
+            "name": "Nils Adermann",
+            "email": "naderman@naderman.de",
+            "homepage": "http://www.naderman.de"
+        },
+        {
+            "name": "Jordi Boggiano",
+            "email": "j.boggiano@seld.be",
+            "homepage": "http://seld.be"
+        },
+        {
+            "name": "Rob Bast",
+            "email": "rob.bast@gmail.com",
+            "homepage": "http://robbast.nl"
+        }
+    ],
+    "support": {
+        "irc": "irc://irc.freenode.org/composer",
+        "issues": "https://github.com/composer/semver/issues"
+    },
+    "require": {
+        "php": "^5.3.2 || ^7.0"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^4.5 || ^5.0.5",
+        "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "Composer\\Semver\\": "src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Composer\\Semver\\": "tests"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.x-dev"
+        }
+    },
+    "scripts": {
+        "test": "phpunit"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Comparator.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver;
+
+use Composer\Semver\Constraint\Constraint;
+
+class Comparator
+{
+    /**
+     * Evaluates the expression: $version1 > $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function greaterThan($version1, $version2)
+    {
+        return self::compare($version1, '>', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 >= $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function greaterThanOrEqualTo($version1, $version2)
+    {
+        return self::compare($version1, '>=', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 < $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function lessThan($version1, $version2)
+    {
+        return self::compare($version1, '<', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 <= $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function lessThanOrEqualTo($version1, $version2)
+    {
+        return self::compare($version1, '<=', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 == $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function equalTo($version1, $version2)
+    {
+        return self::compare($version1, '==', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 != $version2.
+     *
+     * @param string $version1
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function notEqualTo($version1, $version2)
+    {
+        return self::compare($version1, '!=', $version2);
+    }
+
+    /**
+     * Evaluates the expression: $version1 $operator $version2.
+     *
+     * @param string $version1
+     * @param string $operator
+     * @param string $version2
+     *
+     * @return bool
+     */
+    public static function compare($version1, $operator, $version2)
+    {
+        $constraint = new Constraint($operator, $version2);
+
+        return $constraint->matches(new Constraint('==', $version1));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Constraint/AbstractConstraint.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver\Constraint;
+
+trigger_error('The ' . __CLASS__ . ' abstract class is deprecated, there is no replacement for it, it will be removed in the next major version.', E_USER_DEPRECATED);
+
+/**
+ * Base constraint class.
+ */
+abstract class AbstractConstraint implements ConstraintInterface
+{
+    /** @var string */
+    protected $prettyString;
+
+    /**
+     * @param ConstraintInterface $provider
+     *
+     * @return bool
+     */
+    public function matches(ConstraintInterface $provider)
+    {
+        if ($provider instanceof $this) {
+            // see note at bottom of this class declaration
+            return $this->matchSpecific($provider);
+        }
+
+        // turn matching around to find a match
+        return $provider->matches($this);
+    }
+
+    /**
+     * @param string $prettyString
+     */
+    public function setPrettyString($prettyString)
+    {
+        $this->prettyString = $prettyString;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrettyString()
+    {
+        if ($this->prettyString) {
+            return $this->prettyString;
+        }
+
+        return $this->__toString();
+    }
+
+    // implementations must implement a method of this format:
+    // not declared abstract here because type hinting violates parameter coherence (TODO right word?)
+    // public function matchSpecific(<SpecificConstraintType> $provider);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Constraint/Constraint.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,219 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver\Constraint;
+
+/**
+ * Defines a constraint.
+ */
+class Constraint implements ConstraintInterface
+{
+    /* operator integer values */
+    const OP_EQ = 0;
+    const OP_LT = 1;
+    const OP_LE = 2;
+    const OP_GT = 3;
+    const OP_GE = 4;
+    const OP_NE = 5;
+
+    /**
+     * Operator to integer translation table.
+     *
+     * @var array
+     */
+    private static $transOpStr = array(
+        '=' => self::OP_EQ,
+        '==' => self::OP_EQ,
+        '<' => self::OP_LT,
+        '<=' => self::OP_LE,
+        '>' => self::OP_GT,
+        '>=' => self::OP_GE,
+        '<>' => self::OP_NE,
+        '!=' => self::OP_NE,
+    );
+
+    /**
+     * Integer to operator translation table.
+     *
+     * @var array
+     */
+    private static $transOpInt = array(
+        self::OP_EQ => '==',
+        self::OP_LT => '<',
+        self::OP_LE => '<=',
+        self::OP_GT => '>',
+        self::OP_GE => '>=',
+        self::OP_NE => '!=',
+    );
+
+    /** @var string */
+    protected $operator;
+
+    /** @var string */
+    protected $version;
+
+    /** @var string */
+    protected $prettyString;
+
+    /**
+     * @param ConstraintInterface $provider
+     *
+     * @return bool
+     */
+    public function matches(ConstraintInterface $provider)
+    {
+        if ($provider instanceof $this) {
+            return $this->matchSpecific($provider);
+        }
+
+        // turn matching around to find a match
+        return $provider->matches($this);
+    }
+
+    /**
+     * @param string $prettyString
+     */
+    public function setPrettyString($prettyString)
+    {
+        $this->prettyString = $prettyString;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrettyString()
+    {
+        if ($this->prettyString) {
+            return $this->prettyString;
+        }
+
+        return $this->__toString();
+    }
+
+    /**
+     * Get all supported comparison operators.
+     *
+     * @return array
+     */
+    public static function getSupportedOperators()
+    {
+        return array_keys(self::$transOpStr);
+    }
+
+    /**
+     * Sets operator and version to compare with.
+     *
+     * @param string $operator
+     * @param string $version
+     *
+     * @throws \InvalidArgumentException if invalid operator is given.
+     */
+    public function __construct($operator, $version)
+    {
+        if (!isset(self::$transOpStr[$operator])) {
+            throw new \InvalidArgumentException(sprintf(
+                'Invalid operator "%s" given, expected one of: %s',
+                $operator,
+                implode(', ', self::getSupportedOperators())
+            ));
+        }
+
+        $this->operator = self::$transOpStr[$operator];
+        $this->version = $version;
+    }
+
+    /**
+     * @param string $a
+     * @param string $b
+     * @param string $operator
+     * @param bool $compareBranches
+     *
+     * @throws \InvalidArgumentException if invalid operator is given.
+     *
+     * @return bool
+     */
+    public function versionCompare($a, $b, $operator, $compareBranches = false)
+    {
+        if (!isset(self::$transOpStr[$operator])) {
+            throw new \InvalidArgumentException(sprintf(
+                'Invalid operator "%s" given, expected one of: %s',
+                $operator,
+                implode(', ', self::getSupportedOperators())
+            ));
+        }
+
+        $aIsBranch = 'dev-' === substr($a, 0, 4);
+        $bIsBranch = 'dev-' === substr($b, 0, 4);
+
+        if ($aIsBranch && $bIsBranch) {
+            return $operator === '==' && $a === $b;
+        }
+
+        // when branches are not comparable, we make sure dev branches never match anything
+        if (!$compareBranches && ($aIsBranch || $bIsBranch)) {
+            return false;
+        }
+
+        return version_compare($a, $b, $operator);
+    }
+
+    /**
+     * @param Constraint $provider
+     * @param bool $compareBranches
+     *
+     * @return bool
+     */
+    public function matchSpecific(Constraint $provider, $compareBranches = false)
+    {
+        $noEqualOp = str_replace('=', '', self::$transOpInt[$this->operator]);
+        $providerNoEqualOp = str_replace('=', '', self::$transOpInt[$provider->operator]);
+
+        $isEqualOp = self::OP_EQ === $this->operator;
+        $isNonEqualOp = self::OP_NE === $this->operator;
+        $isProviderEqualOp = self::OP_EQ === $provider->operator;
+        $isProviderNonEqualOp = self::OP_NE === $provider->operator;
+
+        // '!=' operator is match when other operator is not '==' operator or version is not match
+        // these kinds of comparisons always have a solution
+        if ($isNonEqualOp || $isProviderNonEqualOp) {
+            return !$isEqualOp && !$isProviderEqualOp
+                || $this->versionCompare($provider->version, $this->version, '!=', $compareBranches);
+        }
+
+        // an example for the condition is <= 2.0 & < 1.0
+        // these kinds of comparisons always have a solution
+        if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) {
+            return true;
+        }
+
+        if ($this->versionCompare($provider->version, $this->version, self::$transOpInt[$this->operator], $compareBranches)) {
+            // special case, e.g. require >= 1.0 and provide < 1.0
+            // 1.0 >= 1.0 but 1.0 is outside of the provided interval
+            if ($provider->version === $this->version
+                && self::$transOpInt[$provider->operator] === $providerNoEqualOp
+                && self::$transOpInt[$this->operator] !== $noEqualOp) {
+                return false;
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @return string
+     */
+    public function __toString()
+    {
+        return self::$transOpInt[$this->operator] . ' ' . $this->version;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Constraint/ConstraintInterface.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver\Constraint;
+
+interface ConstraintInterface
+{
+    /**
+     * @param ConstraintInterface $provider
+     *
+     * @return bool
+     */
+    public function matches(ConstraintInterface $provider);
+
+    /**
+     * @return string
+     */
+    public function getPrettyString();
+
+    /**
+     * @return string
+     */
+    public function __toString();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Constraint/EmptyConstraint.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver\Constraint;
+
+/**
+ * Defines the absence of a constraint.
+ */
+class EmptyConstraint implements ConstraintInterface
+{
+    /** @var string */
+    protected $prettyString;
+
+    /**
+     * @param ConstraintInterface $provider
+     *
+     * @return bool
+     */
+    public function matches(ConstraintInterface $provider)
+    {
+        return true;
+    }
+
+    /**
+     * @param $prettyString
+     */
+    public function setPrettyString($prettyString)
+    {
+        $this->prettyString = $prettyString;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrettyString()
+    {
+        if ($this->prettyString) {
+            return $this->prettyString;
+        }
+
+        return $this->__toString();
+    }
+
+    /**
+     * @return string
+     */
+    public function __toString()
+    {
+        return '[]';
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Constraint/MultiConstraint.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,120 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver\Constraint;
+
+/**
+ * Defines a conjunctive or disjunctive set of constraints.
+ */
+class MultiConstraint implements ConstraintInterface
+{
+    /** @var ConstraintInterface[] */
+    protected $constraints;
+
+    /** @var string */
+    protected $prettyString;
+
+    /** @var bool */
+    protected $conjunctive;
+
+    /**
+     * @param ConstraintInterface[] $constraints A set of constraints
+     * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive
+     */
+    public function __construct(array $constraints, $conjunctive = true)
+    {
+        $this->constraints = $constraints;
+        $this->conjunctive = $conjunctive;
+    }
+
+    /**
+     * @return ConstraintInterface[]
+     */
+    public function getConstraints()
+    {
+        return $this->constraints;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isConjunctive()
+    {
+        return $this->conjunctive;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isDisjunctive()
+    {
+        return !$this->conjunctive;
+    }
+
+    /**
+     * @param ConstraintInterface $provider
+     *
+     * @return bool
+     */
+    public function matches(ConstraintInterface $provider)
+    {
+        if (false === $this->conjunctive) {
+            foreach ($this->constraints as $constraint) {
+                if ($constraint->matches($provider)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        foreach ($this->constraints as $constraint) {
+            if (!$constraint->matches($provider)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * @param string $prettyString
+     */
+    public function setPrettyString($prettyString)
+    {
+        $this->prettyString = $prettyString;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrettyString()
+    {
+        if ($this->prettyString) {
+            return $this->prettyString;
+        }
+
+        return $this->__toString();
+    }
+
+    /**
+     * @return string
+     */
+    public function __toString()
+    {
+        $constraints = array();
+        foreach ($this->constraints as $constraint) {
+            $constraints[] = (string) $constraint;
+        }
+
+        return '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']';
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/Semver.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,127 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver;
+
+use Composer\Semver\Constraint\Constraint;
+
+class Semver
+{
+    const SORT_ASC = 1;
+    const SORT_DESC = -1;
+
+    /** @var VersionParser */
+    private static $versionParser;
+
+    /**
+     * Determine if given version satisfies given constraints.
+     *
+     * @param string $version
+     * @param string $constraints
+     *
+     * @return bool
+     */
+    public static function satisfies($version, $constraints)
+    {
+        if (null === self::$versionParser) {
+            self::$versionParser = new VersionParser();
+        }
+
+        $versionParser = self::$versionParser;
+        $provider = new Constraint('==', $versionParser->normalize($version));
+        $constraints = $versionParser->parseConstraints($constraints);
+
+        return $constraints->matches($provider);
+    }
+
+    /**
+     * Return all versions that satisfy given constraints.
+     *
+     * @param array $versions
+     * @param string $constraints
+     *
+     * @return array
+     */
+    public static function satisfiedBy(array $versions, $constraints)
+    {
+        $versions = array_filter($versions, function ($version) use ($constraints) {
+            return Semver::satisfies($version, $constraints);
+        });
+
+        return array_values($versions);
+    }
+
+    /**
+     * Sort given array of versions.
+     *
+     * @param array $versions
+     *
+     * @return array
+     */
+    public static function sort(array $versions)
+    {
+        return self::usort($versions, self::SORT_ASC);
+    }
+
+    /**
+     * Sort given array of versions in reverse.
+     *
+     * @param array $versions
+     *
+     * @return array
+     */
+    public static function rsort(array $versions)
+    {
+        return self::usort($versions, self::SORT_DESC);
+    }
+
+    /**
+     * @param array $versions
+     * @param int $direction
+     *
+     * @return array
+     */
+    private static function usort(array $versions, $direction)
+    {
+        if (null === self::$versionParser) {
+            self::$versionParser = new VersionParser();
+        }
+
+        $versionParser = self::$versionParser;
+        $normalized = array();
+
+        // Normalize outside of usort() scope for minor performance increase.
+        // Creates an array of arrays: [[normalized, key], ...]
+        foreach ($versions as $key => $version) {
+            $normalized[] = array($versionParser->normalize($version), $key);
+        }
+
+        usort($normalized, function (array $left, array $right) use ($direction) {
+            if ($left[0] === $right[0]) {
+                return 0;
+            }
+
+            if (Comparator::lessThan($left[0], $right[0])) {
+                return -$direction;
+            }
+
+            return $direction;
+        });
+
+        // Recreate input array, using the original indexes which are now in sorted order.
+        $sorted = array();
+        foreach ($normalized as $item) {
+            $sorted[] = $versions[$item[1]];
+        }
+
+        return $sorted;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/composer/semver/src/VersionParser.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,548 @@
+<?php
+
+/*
+ * This file is part of composer/semver.
+ *
+ * (c) Composer <https://github.com/composer>
+ *
+ * For the full copyright and license information, please view
+ * the LICENSE file that was distributed with this source code.
+ */
+
+namespace Composer\Semver;
+
+use Composer\Semver\Constraint\ConstraintInterface;
+use Composer\Semver\Constraint\EmptyConstraint;
+use Composer\Semver\Constraint\MultiConstraint;
+use Composer\Semver\Constraint\Constraint;
+
+/**
+ * Version parser.
+ *
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class VersionParser
+{
+    /**
+     * Regex to match pre-release data (sort of).
+     *
+     * Due to backwards compatibility:
+     *   - Instead of enforcing hyphen, an underscore, dot or nothing at all are also accepted.
+     *   - Only stabilities as recognized by Composer are allowed to precede a numerical identifier.
+     *   - Numerical-only pre-release identifiers are not supported, see tests.
+     *
+     *                        |--------------|
+     * [major].[minor].[patch] -[pre-release] +[build-metadata]
+     *
+     * @var string
+     */
+    private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?';
+
+    /** @var array */
+    private static $stabilities = array('stable', 'RC', 'beta', 'alpha', 'dev');
+
+    /**
+     * Returns the stability of a version.
+     *
+     * @param string $version
+     *
+     * @return string
+     */
+    public static function parseStability($version)
+    {
+        $version = preg_replace('{#.+$}i', '', $version);
+
+        if ('dev-' === substr($version, 0, 4) || '-dev' === substr($version, -4)) {
+            return 'dev';
+        }
+
+        preg_match('{' . self::$modifierRegex . '(?:\+.*)?$}i', strtolower($version), $match);
+        if (!empty($match[3])) {
+            return 'dev';
+        }
+
+        if (!empty($match[1])) {
+            if ('beta' === $match[1] || 'b' === $match[1]) {
+                return 'beta';
+            }
+            if ('alpha' === $match[1] || 'a' === $match[1]) {
+                return 'alpha';
+            }
+            if ('rc' === $match[1]) {
+                return 'RC';
+            }
+        }
+
+        return 'stable';
+    }
+
+    /**
+     * @param string $stability
+     *
+     * @return string
+     */
+    public static function normalizeStability($stability)
+    {
+        $stability = strtolower($stability);
+
+        return $stability === 'rc' ? 'RC' : $stability;
+    }
+
+    /**
+     * Normalizes a version string to be able to perform comparisons on it.
+     *
+     * @param string $version
+     * @param string $fullVersion optional complete version string to give more context
+     *
+     * @throws \UnexpectedValueException
+     *
+     * @return string
+     */
+    public function normalize($version, $fullVersion = null)
+    {
+        $version = trim($version);
+        if (null === $fullVersion) {
+            $fullVersion = $version;
+        }
+
+        // strip off aliasing
+        if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) {
+            $version = $match[1];
+        }
+
+        // match master-like branches
+        if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
+            return '9999999-dev';
+        }
+
+        // if requirement is branch-like, use full name
+        if ('dev-' === strtolower(substr($version, 0, 4))) {
+            return 'dev-' . substr($version, 4);
+        }
+
+        // strip off build metadata
+        if (preg_match('{^([^,\s+]++)\+[^\s]++$}', $version, $match)) {
+            $version = $match[1];
+        }
+
+        // match classical versioning
+        if (preg_match('{^v?(\d{1,5})(\.\d++)?(\.\d++)?(\.\d++)?' . self::$modifierRegex . '$}i', $version, $matches)) {
+            $version = $matches[1]
+                . (!empty($matches[2]) ? $matches[2] : '.0')
+                . (!empty($matches[3]) ? $matches[3] : '.0')
+                . (!empty($matches[4]) ? $matches[4] : '.0');
+            $index = 5;
+        // match date(time) based versioning
+        } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) {
+            $version = preg_replace('{\D}', '.', $matches[1]);
+            $index = 2;
+        }
+
+        // add version modifiers if a version was matched
+        if (isset($index)) {
+            if (!empty($matches[$index])) {
+                if ('stable' === $matches[$index]) {
+                    return $version;
+                }
+                $version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? ltrim($matches[$index + 1], '.-') : '');
+            }
+
+            if (!empty($matches[$index + 2])) {
+                $version .= '-dev';
+            }
+
+            return $version;
+        }
+
+        // match dev branches
+        if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) {
+            try {
+                return $this->normalizeBranch($match[1]);
+            } catch (\Exception $e) {
+            }
+        }
+
+        $extraMessage = '';
+        if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
+            $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
+        } elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
+            $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
+        }
+
+        throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
+    }
+
+    /**
+     * Extract numeric prefix from alias, if it is in numeric format, suitable for version comparison.
+     *
+     * @param string $branch Branch name (e.g. 2.1.x-dev)
+     *
+     * @return string|false Numeric prefix if present (e.g. 2.1.) or false
+     */
+    public function parseNumericAliasPrefix($branch)
+    {
+        if (preg_match('{^(?P<version>(\d++\\.)*\d++)(?:\.x)?-dev$}i', $branch, $matches)) {
+            return $matches['version'] . '.';
+        }
+
+        return false;
+    }
+
+    /**
+     * Normalizes a branch name to be able to perform comparisons on it.
+     *
+     * @param string $name
+     *
+     * @return string
+     */
+    public function normalizeBranch($name)
+    {
+        $name = trim($name);
+
+        if (in_array($name, array('master', 'trunk', 'default'))) {
+            return $this->normalize($name);
+        }
+
+        if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) {
+            $version = '';
+            for ($i = 1; $i < 5; ++$i) {
+                $version .= isset($matches[$i]) ? str_replace(array('*', 'X'), 'x', $matches[$i]) : '.x';
+            }
+
+            return str_replace('x', '9999999', $version) . '-dev';
+        }
+
+        return 'dev-' . $name;
+    }
+
+    /**
+     * Parses a constraint string into MultiConstraint and/or Constraint objects.
+     *
+     * @param string $constraints
+     *
+     * @return ConstraintInterface
+     */
+    public function parseConstraints($constraints)
+    {
+        $prettyConstraint = $constraints;
+
+        if (preg_match('{^([^,\s]*?)@(' . implode('|', self::$stabilities) . ')$}i', $constraints, $match)) {
+            $constraints = empty($match[1]) ? '*' : $match[1];
+        }
+
+        if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraints, $match)) {
+            $constraints = $match[1];
+        }
+
+        $orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));
+        $orGroups = array();
+        foreach ($orConstraints as $constraints) {
+            $andConstraints = preg_split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $constraints);
+            if (count($andConstraints) > 1) {
+                $constraintObjects = array();
+                foreach ($andConstraints as $constraint) {
+                    foreach ($this->parseConstraint($constraint) as $parsedConstraint) {
+                        $constraintObjects[] = $parsedConstraint;
+                    }
+                }
+            } else {
+                $constraintObjects = $this->parseConstraint($andConstraints[0]);
+            }
+
+            if (1 === count($constraintObjects)) {
+                $constraint = $constraintObjects[0];
+            } else {
+                $constraint = new MultiConstraint($constraintObjects);
+            }
+
+            $orGroups[] = $constraint;
+        }
+
+        if (1 === count($orGroups)) {
+            $constraint = $orGroups[0];
+        } elseif (2 === count($orGroups)
+            // parse the two OR groups and if they are contiguous we collapse
+            // them into one constraint
+            && $orGroups[0] instanceof MultiConstraint
+            && $orGroups[1] instanceof MultiConstraint
+            && 2 === count($orGroups[0]->getConstraints())
+            && 2 === count($orGroups[1]->getConstraints())
+            && ($a = (string) $orGroups[0])
+            && substr($a, 0, 3) === '[>=' && (false !== ($posA = strpos($a, '<', 4)))
+            && ($b = (string) $orGroups[1])
+            && substr($b, 0, 3) === '[>=' && (false !== ($posB = strpos($b, '<', 4)))
+            && substr($a, $posA + 2, -1) === substr($b, 4, $posB - 5)
+        ) {
+            $constraint = new MultiConstraint(array(
+                new Constraint('>=', substr($a, 4, $posA - 5)),
+                new Constraint('<', substr($b, $posB + 2, -1)),
+            ));
+        } else {
+            $constraint = new MultiConstraint($orGroups, false);
+        }
+
+        $constraint->setPrettyString($prettyConstraint);
+
+        return $constraint;
+    }
+
+    /**
+     * @param string $constraint
+     *
+     * @throws \UnexpectedValueException
+     *
+     * @return array
+     */
+    private function parseConstraint($constraint)
+    {
+        if (preg_match('{^([^,\s]+?)@(' . implode('|', self::$stabilities) . ')$}i', $constraint, $match)) {
+            $constraint = $match[1];
+            if ($match[2] !== 'stable') {
+                $stabilityModifier = $match[2];
+            }
+        }
+
+        if (preg_match('{^v?[xX*](\.[xX*])*$}i', $constraint)) {
+            return array(new EmptyConstraint());
+        }
+
+        $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?' . self::$modifierRegex . '(?:\+[^\s]+)?';
+
+        // Tilde Range
+        //
+        // Like wildcard constraints, unsuffixed tilde constraints say that they must be greater than the previous
+        // version, to ensure that unstable instances of the current version are allowed. However, if a stability
+        // suffix is added to the constraint, then a >= match on the current version is used instead.
+        if (preg_match('{^~>?' . $versionRegex . '$}i', $constraint, $matches)) {
+            if (substr($constraint, 0, 2) === '~>') {
+                throw new \UnexpectedValueException(
+                    'Could not parse version constraint ' . $constraint . ': ' .
+                    'Invalid operator "~>", you probably meant to use the "~" operator'
+                );
+            }
+
+            // Work out which position in the version we are operating at
+            if (isset($matches[4]) && '' !== $matches[4]) {
+                $position = 4;
+            } elseif (isset($matches[3]) && '' !== $matches[3]) {
+                $position = 3;
+            } elseif (isset($matches[2]) && '' !== $matches[2]) {
+                $position = 2;
+            } else {
+                $position = 1;
+            }
+
+            // Calculate the stability suffix
+            $stabilitySuffix = '';
+            if (!empty($matches[5])) {
+                $stabilitySuffix .= '-' . $this->expandStability($matches[5]) . (!empty($matches[6]) ? $matches[6] : '');
+            }
+
+            if (!empty($matches[7])) {
+                $stabilitySuffix .= '-dev';
+            }
+
+            if (!$stabilitySuffix) {
+                $stabilitySuffix = '-dev';
+            }
+
+            $lowVersion = $this->manipulateVersionString($matches, $position, 0) . $stabilitySuffix;
+            $lowerBound = new Constraint('>=', $lowVersion);
+
+            // For upper bound, we increment the position of one more significance,
+            // but highPosition = 0 would be illegal
+            $highPosition = max(1, $position - 1);
+            $highVersion = $this->manipulateVersionString($matches, $highPosition, 1) . '-dev';
+            $upperBound = new Constraint('<', $highVersion);
+
+            return array(
+                $lowerBound,
+                $upperBound,
+            );
+        }
+
+        // Caret Range
+        //
+        // Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple.
+        // In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for
+        // versions 0.X >=0.1.0, and no updates for versions 0.0.X
+        if (preg_match('{^\^' . $versionRegex . '($)}i', $constraint, $matches)) {
+            // Work out which position in the version we are operating at
+            if ('0' !== $matches[1] || '' === $matches[2]) {
+                $position = 1;
+            } elseif ('0' !== $matches[2] || '' === $matches[3]) {
+                $position = 2;
+            } else {
+                $position = 3;
+            }
+
+            // Calculate the stability suffix
+            $stabilitySuffix = '';
+            if (empty($matches[5]) && empty($matches[7])) {
+                $stabilitySuffix .= '-dev';
+            }
+
+            $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1));
+            $lowerBound = new Constraint('>=', $lowVersion);
+
+            // For upper bound, we increment the position of one more significance,
+            // but highPosition = 0 would be illegal
+            $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev';
+            $upperBound = new Constraint('<', $highVersion);
+
+            return array(
+                $lowerBound,
+                $upperBound,
+            );
+        }
+
+        // X Range
+        //
+        // Any of X, x, or * may be used to "stand in" for one of the numeric values in the [major, minor, patch] tuple.
+        // A partial version range is treated as an X-Range, so the special character is in fact optional.
+        if (preg_match('{^v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.[xX*])++$}', $constraint, $matches)) {
+            if (isset($matches[3]) && '' !== $matches[3]) {
+                $position = 3;
+            } elseif (isset($matches[2]) && '' !== $matches[2]) {
+                $position = 2;
+            } else {
+                $position = 1;
+            }
+
+            $lowVersion = $this->manipulateVersionString($matches, $position) . '-dev';
+            $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev';
+
+            if ($lowVersion === '0.0.0.0-dev') {
+                return array(new Constraint('<', $highVersion));
+            }
+
+            return array(
+                new Constraint('>=', $lowVersion),
+                new Constraint('<', $highVersion),
+            );
+        }
+
+        // Hyphen Range
+        //
+        // Specifies an inclusive set. If a partial version is provided as the first version in the inclusive range,
+        // then the missing pieces are replaced with zeroes. If a partial version is provided as the second version in
+        // the inclusive range, then all versions that start with the supplied parts of the tuple are accepted, but
+        // nothing that would be greater than the provided tuple parts.
+        if (preg_match('{^(?P<from>' . $versionRegex . ') +- +(?P<to>' . $versionRegex . ')($)}i', $constraint, $matches)) {
+            // Calculate the stability suffix
+            $lowStabilitySuffix = '';
+            if (empty($matches[6]) && empty($matches[8])) {
+                $lowStabilitySuffix = '-dev';
+            }
+
+            $lowVersion = $this->normalize($matches['from']);
+            $lowerBound = new Constraint('>=', $lowVersion . $lowStabilitySuffix);
+
+            $empty = function ($x) {
+                return ($x === 0 || $x === '0') ? false : empty($x);
+            };
+
+            if ((!$empty($matches[11]) && !$empty($matches[12])) || !empty($matches[14]) || !empty($matches[16])) {
+                $highVersion = $this->normalize($matches['to']);
+                $upperBound = new Constraint('<=', $highVersion);
+            } else {
+                $highMatch = array('', $matches[10], $matches[11], $matches[12], $matches[13]);
+                $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[11]) ? 1 : 2, 1) . '-dev';
+                $upperBound = new Constraint('<', $highVersion);
+            }
+
+            return array(
+                $lowerBound,
+                $upperBound,
+            );
+        }
+
+        // Basic Comparators
+        if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
+            try {
+                $version = $this->normalize($matches[2]);
+
+                if (!empty($stabilityModifier) && $this->parseStability($version) === 'stable') {
+                    $version .= '-' . $stabilityModifier;
+                } elseif ('<' === $matches[1] || '>=' === $matches[1]) {
+                    if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) {
+                        if (substr($matches[2], 0, 4) !== 'dev-') {
+                            $version .= '-dev';
+                        }
+                    }
+                }
+
+                return array(new Constraint($matches[1] ?: '=', $version));
+            } catch (\Exception $e) {
+            }
+        }
+
+        $message = 'Could not parse version constraint ' . $constraint;
+        if (isset($e)) {
+            $message .= ': ' . $e->getMessage();
+        }
+
+        throw new \UnexpectedValueException($message);
+    }
+
+    /**
+     * Increment, decrement, or simply pad a version number.
+     *
+     * Support function for {@link parseConstraint()}
+     *
+     * @param array $matches Array with version parts in array indexes 1,2,3,4
+     * @param int $position 1,2,3,4 - which segment of the version to increment/decrement
+     * @param int $increment
+     * @param string $pad The string to pad version parts after $position
+     *
+     * @return string The new version
+     */
+    private function manipulateVersionString($matches, $position, $increment = 0, $pad = '0')
+    {
+        for ($i = 4; $i > 0; --$i) {
+            if ($i > $position) {
+                $matches[$i] = $pad;
+            } elseif ($i === $position && $increment) {
+                $matches[$i] += $increment;
+                // If $matches[$i] was 0, carry the decrement
+                if ($matches[$i] < 0) {
+                    $matches[$i] = $pad;
+                    --$position;
+
+                    // Return null on a carry overflow
+                    if ($i === 1) {
+                        return;
+                    }
+                }
+            }
+        }
+
+        return $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4];
+    }
+
+    /**
+     * Expand shorthand stability string to long version.
+     *
+     * @param string $stability
+     *
+     * @return string
+     */
+    private function expandStability($stability)
+    {
+        $stability = strtolower($stability);
+
+        switch ($stability) {
+            case 'a':
+                return 'alpha';
+            case 'b':
+                return 'beta';
+            case 'p':
+            case 'pl':
+                return 'patch';
+            case 'rc':
+                return 'RC';
+            default:
+                return $stability;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+/bin/
+/vendor/
+/composer.lock
+/composer.phar
+/phpunit.xml
+
+/.idea/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - hhvm
+  
+before_script:
+  - composer install --dev
+
+script: phpunit -c phpunit.xml.dist
+
+notifications:
+  email:
+    - info@endroid.nl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+Copyright (c) Jeroen van den Enden
+
+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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,57 @@
+QR Code
+=======
+
+*By [endroid](http://endroid.nl/)*
+
+[![Latest Stable Version](http://img.shields.io/packagist/v/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode)
+[![Build Status](http://img.shields.io/travis/endroid/QrCode.svg)](http://travis-ci.org/endroid/QrCode)
+[![Total Downloads](http://img.shields.io/packagist/dt/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode)
+[![License](http://img.shields.io/packagist/l/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode)
+
+This library based on QRcode Perl CGI & PHP scripts by Y. Swetake helps you generate images containing a QR code.
+
+## Installation
+
+Use [Composer](https://getcomposer.org/) to install the library.
+
+``` bash
+$ composer require endroid/qrcode
+```
+
+## Usage
+
+```php
+<?php
+
+use Endroid\QrCode\QrCode;
+
+$qrCode = new QrCode();
+$qrCode
+    ->setText("Life is too short to be generating QR codes")
+    ->setSize(300)
+    ->setPadding(10)
+    ->setErrorCorrection('high')
+    ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
+    ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
+    ->setLabel('My label')
+    ->setLabelFontSize(16)
+    ->render()
+;
+```
+
+![QR Code](http://endroid.nl/qrcode/Life%20is%20too%20short%20to%20be%20generating%20QR%20codes.png)
+
+## Symfony
+
+You can use [`EndroidQrCodeBundle`](https://github.com/endroid/EndroidQrCodeBundle) to integrate this service in your Symfony application.
+
+## Versioning
+
+Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatible
+changes will be kept to a minimum but be aware that these can occur. Lock
+your dependencies for production and test your code when upgrading.
+
+## License
+
+This bundle is under the MIT license. For the full copyright and license
+information please view the LICENSE file that was distributed with this source code.
Binary file vendor/endroid/qrcode/assets/data/qrv10_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv10_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv10_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv10_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv11_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv11_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv11_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv11_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv12_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv12_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv12_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv12_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv13_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv13_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv13_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv13_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv14_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv14_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv14_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv14_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv15_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv15_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv15_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv15_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv16_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv16_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv16_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv16_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv17_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv17_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv17_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv17_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv18_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv18_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv18_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv18_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv19_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv19_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv19_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv19_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv1_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv1_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv1_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv1_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv20_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv20_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv20_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv20_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv21_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv21_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv21_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv21_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv22_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv22_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv22_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv22_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv23_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv23_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv23_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv23_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv24_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv24_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv24_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv24_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv25_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv25_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv25_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv25_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv26_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv26_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv26_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv26_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv27_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv27_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv27_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv27_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv28_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv28_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv28_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv28_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv29_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv29_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv29_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv29_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv2_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv2_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv2_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv2_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv30_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv30_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv30_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv30_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv31_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv31_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv31_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv31_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv32_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv32_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv32_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv32_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv33_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv33_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv33_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv33_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv34_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv34_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv34_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv34_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv35_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv35_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv35_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv35_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv36_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv36_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv36_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv36_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv37_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv37_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv37_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv37_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv38_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv38_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv38_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv38_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv39_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv39_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv39_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv39_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv3_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv3_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv3_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv3_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv40_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv40_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv40_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv40_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv4_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv4_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv4_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv4_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv5_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv5_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv5_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv5_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv6_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv6_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv6_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv6_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv7_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv7_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv7_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv7_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv8_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv8_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv8_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv8_3.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv9_0.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv9_1.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv9_2.dat has changed
Binary file vendor/endroid/qrcode/assets/data/qrv9_3.dat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr1.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+111111100000001111111
+100000100000001000001
+101110100000001011101
+101110100000001011101
+101110100000001011101
+100000100000001000001
+111111101010101111111
+000000000000000000000
+000000100000000000000
+000000000000000000000
+000000100000000000000
+000000000000000000000
+000000100000000000000
+000000001000000000000
+111111100000000000000
+100000100000000000000
+101110100000000000000
+101110100000000000000
+101110100000000000000
+100000100000000000000
+111111100000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr10.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,57 @@
+111111100000000000000000000000000000000000000011001111111
+100000100000000000000000000000000000000000000001001000001
+101110100000000000000000000000000000000000000011001011101
+101110100000000000000000000000000000000000000001001011101
+101110100000000000000000001111100000000000000001001011101
+100000100000000000000000001000100000000000000010001000001
+111111101010101010101010101010101010101010101010101111111
+000000000000000000000000001000100000000000000000000000000
+000000100000000000000000001111100000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000111110000
+000010001000000000000000001000100000000000000000100010000
+000010101000000000000000001010100000000000000000101010000
+000010001000000000000000001000100000000000000000100010000
+000011111000000000000000001111100000000000000000111110000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000
+101001100000000000000000000000000000000000000000000000000
+111110000000000000000000000000000000000000000000000000000
+000000100000000000000000001111100000000000000000111110000
+000000001000000000000000001000100000000000000000100010000
+111111100000000000000000001010100000000000000000101010000
+100000100000000000000000001000100000000000000000100010000
+101110100000000000000000001111100000000000000000111110000
+101110100000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr11.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,61 @@
+1111111000000000000000000000000000000000000000000001101111111
+1000001000000000000000000000000000000000000000000001101000001
+1011101000000000000000000000000000000000000000000011101011101
+1011101000000000000000000000000000000000000000000010101011101
+1011101000000000000000000000111110000000000000000011001011101
+1000001000000000000000000000100010000000000000000010001000001
+1111111010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000000000000
+0000001000000000000000000000111110000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000
+0011111000000000000000000000000000000000000000000000000000000
+1110100000000000000000000000000000000000000000000000000000000
+1111001000000000000000000000111110000000000000000000111110000
+0000000010000000000000000000100010000000000000000000100010000
+1111111000000000000000000000101010000000000000000000101010000
+1000001000000000000000000000100010000000000000000000100010000
+1011101000000000000000000000111110000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr12.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,65 @@
+11111110000000000000000000000000000000000000000000000001001111111
+10000010000000000000000000000000000000000000000000000000101000001
+10111010000000000000000000000000000000000000000000000010101011101
+10111010000000000000000000000000000000000000000000000011001011101
+10111010000000000000000000000011111000000000000000000000101011101
+10000010000000000000000000000010001000000000000000000010001000001
+11111110101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000000010001000000000000000000000000000000
+00000010000000000000000000000011111000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000
+00110110000000000000000000000000000000000000000000000000000000000
+10010000000000000000000000000000000000000000000000000000000000000
+01101010000000000000000000000011111000000000000000000000111110000
+00000000100000000000000000000010001000000000000000000000100010000
+11111110000000000000000000000010101000000000000000000000101010000
+10000010000000000000000000000010001000000000000000000000100010000
+10111010000000000000000000000011111000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr13.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+111111100000000000000000000000000000000000000000000000000011101111111
+100000100000000000000000000000000000000000000000000000000000001000001
+101110100000000000000000000000000000000000000000000000000010001011101
+101110100000000000000000000000000000000000000000000000000000101011101
+101110100000000000000000000000001111100000000000000000000010101011101
+100000100000000000000000000000001000100000000000000000000010001000001
+111111101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000000001000100000000000000000000000000000000
+000000100000000000000000000000001111100000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000
+101011100000000000000000000000000000000000000000000000000000000000000
+100000000000000000000000000000000000000000000000000000000000000000000
+100110100000000000000000000000001111100000000000000000000000111110000
+000000001000000000000000000000001000100000000000000000000000100010000
+111111100000000000000000000000001010100000000000000000000000101010000
+100000100000000000000000000000001000100000000000000000000000100010000
+101110100000000000000000000000001111100000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr14.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,73 @@
+1111111000000000000000000000000000000000000000000000000000000010101111111
+1000001000000000000000000000000000000000000000000000000000000010001000001
+1011101000000000000000000000000000000000000000000000000000000000001011101
+1011101000000000000000000000000000000000000000000000000000000011001011101
+1011101000000000000000001111100000000000000011111000000000000001101011101
+1000001000000000000000001000100000000000000010001000000000000010001000001
+1111111010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000001000100000000000000010001000000000000000000000000
+0000001000000000000000001111100000000000000011111000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000001111100000000000000011111000000000000000111110000
+0000100010000000000000001000100000000000000010001000000000000000100010000
+0000101010000000000000001010100000000000000010101000000000000000101010000
+0000100010000000000000001000100000000000000010001000000000000000100010000
+0000111110000000000000001111100000000000000011111000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000001111100000000000000011111000000000000000111110000
+0000100010000000000000001000100000000000000010001000000000000000100010000
+0000101010000000000000001010100000000000000010101000000000000000101010000
+0000100010000000000000001000100000000000000010001000000000000000100010000
+0000111110000000000000001111100000000000000011111000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000
+1101011000000000000000000000000000000000000000000000000000000000000000000
+0001100000000000000000000000000000000000000000000000000000000000000000000
+1000101000000000000000001111100000000000000011111000000000000000111110000
+0000000010000000000000001000100000000000000010001000000000000000100010000
+1111111000000000000000001010100000000000000010101000000000000000101010000
+1000001000000000000000001000100000000000000010001000000000000000100010000
+1011101000000000000000001111100000000000000011111000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr15.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,77 @@
+11111110000000000000000000000000000000000000000000000000000000000000001111111
+10000010000000000000000000000000000000000000000000000000000000000010101000001
+10111010000000000000000000000000000000000000000000000000000000000000101011101
+10111010000000000000000000000000000000000000000000000000000000000000101011101
+10111010000000000000000011111000000000000000001111100000000000000011101011101
+10000010000000000000000010001000000000000000001000100000000000000010001000001
+11111110101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000010001000000000000000001000100000000000000000000000000
+00000010000000000000000011111000000000000000001111100000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000001111100000000000000000111110000
+00001000100000000000000010001000000000000000001000100000000000000000100010000
+00001010100000000000000010101000000000000000001010100000000000000000101010000
+00001000100000000000000010001000000000000000001000100000000000000000100010000
+00001111100000000000000011111000000000000000001111100000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000001111100000000000000000111110000
+00001000100000000000000010001000000000000000001000100000000000000000100010000
+00001010100000000000000010101000000000000000001010100000000000000000101010000
+00001000100000000000000010001000000000000000001000100000000000000000100010000
+00001111100000000000000011111000000000000000001111100000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000
+01001110000000000000000000000000000000000000000000000000000000000000000000000
+00001000000000000000000000000000000000000000000000000000000000000000000000000
+01111010000000000000000011111000000000000000001111100000000000000000111110000
+00000000100000000000000010001000000000000000001000100000000000000000100010000
+11111110000000000000000010101000000000000000001010100000000000000000101010000
+10000010000000000000000010001000000000000000001000100000000000000000100010000
+10111010000000000000000011111000000000000000001111100000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr16.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,81 @@
+111111100000000000000000000000000000000000000000000000000000000000000000001111111
+100000100000000000000000000000000000000000000000000000000000000000000011101000001
+101110100000000000000000000000000000000000000000000000000000000000000010101011101
+101110100000000000000000000000000000000000000000000000000000000000000010101011101
+101110100000000000000000111110000000000000000000111110000000000000000000001011101
+100000100000000000000000100010000000000000000000100010000000000000000001001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000100010000000000000000000100010000000000000000000000000000
+000000100000000000000000111110000000000000000000111110000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000
+011100100000000000000000000000000000000000000000000000000000000000000000000000000
+010001000000000000000000000000000000000000000000000000000000000000000000000000000
+011100100000000000000000111110000000000000000000111110000000000000000000111110000
+000000001000000000000000100010000000000000000000100010000000000000000000100010000
+111111100000000000000000101010000000000000000000101010000000000000000000101010000
+100000100000000000000000100010000000000000000000100010000000000000000000100010000
+101110100000000000000000111110000000000000000000111110000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr17.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,85 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000010101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000011001000001
+1011101000000000000000000000000000000000000000000000000000000000000000000010001011101
+1011101000000000000000000000000000000000000000000000000000000000000000000001001011101
+1011101000000000000000000000111110000000000000000000111110000000000000000010001011101
+1000001000000000000000000000100010000000000000000000100010000000000000000001001000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000100010000000000000000000000000000
+0000001000000000000000000000111110000000000000000000111110000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1110101000000000000000000000000000000000000000000000000000000000000000000000000000000
+0101010000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000010000000000000000000100010000000000000000000100010000000000000000000100010000
+1111111000000000000000000000101010000000000000000000101010000000000000000000101010000
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr18.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000011101111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000001001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000001011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000010101011101
+10111010000000000000000000001111100000000000000000000011111000000000000000000001001011101
+10000010000000000000000000001000100000000000000000000010001000000000000000000001001000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000001000100000000000000000000010001000000000000000000000000000000
+00000010000000000000000000001111100000000000000000000011111000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10010010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11001100000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10010010000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000100000000000000000001000100000000000000000000010001000000000000000000000100010000
+11111110000000000000000000001010100000000000000000000010101000000000000000000000101010000
+10000010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+10111010000000000000000000001111100000000000000000000011111000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr19.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,93 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000001001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000001101000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+101110100000000000000000000011111000000000000000000000001111100000000000000000000011001011101
+100000100000000000000000000010001000000000000000000000001000100000000000000000000001001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+000000100000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+110111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+011000100000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000001000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+111111100000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr2.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+1111111000000000001111111
+1000001000000000001000001
+1011101000000000001011101
+1011101000000000001011101
+1011101000000000001011101
+1000001000000000001000001
+1111111010101010101111111
+0000000000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000001000000000111110000
+0000000010000000100010000
+1111111000000000101010000
+1000001000000000100010000
+1011101000000000111110000
+1011101000000000000000000
+1011101000000000000000000
+1000001000000000000000000
+1111111000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr20.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,97 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+1011101000000000000000000000000011111000000000000000000000001111100000000000000000000000101011101
+1000001000000000000000000000000010001000000000000000000000001000100000000000000000000001001000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+0000001000000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111101000000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+1111111000000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+1000001000000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+1011101000000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr21.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,101 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+10111010000000000000000000111110000000000000000011111000000000000000001111100000000000000010101011101
+10000010000000000000000000100010000000000000000010001000000000000000001000100000000000000001001000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000100010000000000000000010001000000000000000001000100000000000000000000000000
+00000010000000000000000000111110000000000000000011111000000000000000001111100000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000
+00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001010000000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+00000000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+11111110000000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000
+10000010000000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000
+10111010000000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr22.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,105 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000001101011101
+100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000001001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000
+000000100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+111111100000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr23.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,109 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000011101011101
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000001001000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000
+0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1110101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr24.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,113 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101
+10111010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000001011101
+10000010000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+00000010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00110110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10010010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+11111110000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+10000010000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+10111010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr25.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,117 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101
+101110100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000010001011101
+100000100000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+000000100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+011000100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+111111100000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+100000100000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+101110100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr26.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,121 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101
+1011101000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000001001011101
+1000001000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000011001000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+0000001000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1101011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0111001000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+0000000010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+1111111000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+1000001000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+1011101000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr27.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,125 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101
+10111010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000011001011101
+10000010000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000011001000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+00000010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+01001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+11111110000000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+10000010000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+10111010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr28.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,129 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000101011101
+100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000011001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000
+000000100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+110101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+000000001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+111111100000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr29.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,133 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000010101011101
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000011001000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000
+0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1110101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr3.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+11111110000000000000001111111
+10000010000000000000001000001
+10111010000000000000001011101
+10111010000000000000001011101
+10111010000000000000001011101
+10000010000000000000001000001
+11111110101010101010101111111
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000000000000
+00000000000000000000000000000
+00000010000000000000111110000
+00000000100000000000100010000
+11111110000000000000101010000
+10000010000000000000100010000
+10111010000000000000111110000
+10111010000000000000000000000
+10111010000000000000000000000
+10000010000000000000000000000
+11111110000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr30.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,137 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+10111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000001101011101
+10000010000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+00000010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10100110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+01011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+11111110000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+10000010000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+10111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr31.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,141 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101
+101110100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000011101011101
+100000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+000000100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+001111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000010100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+111111100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+100000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+101110100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr32.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,145 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+1011101000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000001011101
+1000001000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+0000001000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011011000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+1111111000000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+1000001000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+1011101000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr33.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,149 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+10111010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000010001011101
+10000010000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+00000010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+01110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+01000110000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+11111110000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+10000010000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+10111010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr34.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,153 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+101110100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000001001011101
+100000100000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+000000100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010101100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+111111100000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+100000100000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+101110100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr35.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,157 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000011001011101
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000101000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000
+0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1010011000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000
+1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000
+1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr36.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,161 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101
+10111010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000101011101
+10000010000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+00000010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00111110000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+00000000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+11111110000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+10000010000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+10111010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr37.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,165 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+101110100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000010101011101
+100000100000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+000000100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+110011100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+000000001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+111111100000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+100000100000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+101110100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr38.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,169 @@
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101
+1011101000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000001101011101
+1000001000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001
+1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+0000000000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000
+0000001000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1101111000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+0000000010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+1111111000000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000
+1000001000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000
+1011101000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr39.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,173 @@
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101
+10111010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000011101011101
+10000010000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001
+11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+00000000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+00000010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00101110000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+00000000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+11111110000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+10000010000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+10111010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr4.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+111111100000000000000000001111111
+100000100000000000000000001000001
+101110100000000000000000001011101
+101110100000000000000000001011101
+101110100000000000000000001011101
+100000100000000000000000001000001
+111111101010101010101010101111111
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000000000000
+000000000000000000000000000000000
+000000100000000000000000111110000
+000000001000000000000000100010000
+111111100000000000000000101010000
+100000100000000000000000100010000
+101110100000000000000000111110000
+101110100000000000000000000000000
+101110100000000000000000000000000
+100000100000000000000000000000000
+111111100000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr40.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,177 @@
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101
+101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000001011101
+100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000010101000001
+111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111
+000000000000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000
+000000100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+010101100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+000000001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+111111100000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000
+100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000
+101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr5.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+1111111000000000000000000000001111111
+1000001000000000000000000000001000001
+1011101000000000000000000000001011101
+1011101000000000000000000000001011101
+1011101000000000000000000000001011101
+1000001000000000000000000000001000001
+1111111010101010101010101010101111111
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000000000000
+0000000000000000000000000000000000000
+0000001000000000000000000000111110000
+0000000010000000000000000000100010000
+1111111000000000000000000000101010000
+1000001000000000000000000000100010000
+1011101000000000000000000000111110000
+1011101000000000000000000000000000000
+1011101000000000000000000000000000000
+1000001000000000000000000000000000000
+1111111000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr6.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+11111110000000000000000000000000001111111
+10000010000000000000000000000000001000001
+10111010000000000000000000000000001011101
+10111010000000000000000000000000001011101
+10111010000000000000000000000000001011101
+10000010000000000000000000000000001000001
+11111110101010101010101010101010101111111
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000000000000
+00000000000000000000000000000000000000000
+00000010000000000000000000000000111110000
+00000000100000000000000000000000100010000
+11111110000000000000000000000000101010000
+10000010000000000000000000000000100010000
+10111010000000000000000000000000111110000
+10111010000000000000000000000000000000000
+10111010000000000000000000000000000000000
+10000010000000000000000000000000000000000
+11111110000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr7.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,45 @@
+111111100000000000000000000000000000101111111
+100000100000000000000000000000000001001000001
+101110100000000000000000000000000001001011101
+101110100000000000000000000000000001101011101
+101110100000000000001111100000000011101011101
+100000100000000000001000100000000000001000001
+111111101010101010101010101010101010101111111
+000000000000000000001000100000000000000000000
+000000100000000000001111100000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000011111000000000001111100000000000111110000
+000010001000000000001000100000000000100010000
+000010101000000000001010100000000000101010000
+000010001000000000001000100000000000100010000
+000011111000000000001111100000000000111110000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000100000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000010100000000000000000000000000000000000000
+011110000000000000000000000000000000000000000
+100110100000000000001111100000000000111110000
+000000001000000000001000100000000000100010000
+111111100000000000001010100000000000101010000
+100000100000000000001000100000000000100010000
+101110100000000000001111100000000000111110000
+101110100000000000000000000000000000000000000
+101110100000000000000000000000000000000000000
+100000100000000000000000000000000000000000000
+111111100000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr8.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+1111111000000000000000000000000000000000101111111
+1000001000000000000000000000000000000011101000001
+1011101000000000000000000000000000000001101011101
+1011101000000000000000000000000000000001001011101
+1011101000000000000000111110000000000000001011101
+1000001000000000000000100010000000000010001000001
+1111111010101010101010101010101010101010101111111
+0000000000000000000000100010000000000000000000000
+0000001000000000000000111110000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000111110000000000000111110000000000000111110000
+0000100010000000000000100010000000000000100010000
+0000101010000000000000101010000000000000101010000
+0000100010000000000000100010000000000000100010000
+0000111110000000000000111110000000000000111110000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0000001000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000
+0100011000000000000000000000000000000000000000000
+0111000000000000000000000000000000000000000000000
+1110001000000000000000111110000000000000111110000
+0000000010000000000000100010000000000000100010000
+1111111000000000000000101010000000000000101010000
+1000001000000000000000100010000000000000100010000
+1011101000000000000000111110000000000000111110000
+1011101000000000000000000000000000000000000000000
+1011101000000000000000000000000000000000000000000
+1000001000000000000000000000000000000000000000000
+1111111000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/qrvfr9.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,53 @@
+11111110000000000000000000000000000000000010001111111
+10000010000000000000000000000000000000000011001000001
+10111010000000000000000000000000000000000001001011101
+10111010000000000000000000000000000000000010101011101
+10111010000000000000000011111000000000000010001011101
+10000010000000000000000010001000000000000010001000001
+11111110101010101010101010101010101010101010101111111
+00000000000000000000000010001000000000000000000000000
+00000010000000000000000011111000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00001111100000000000000011111000000000000000111110000
+00001000100000000000000010001000000000000000100010000
+00001010100000000000000010101000000000000000101010000
+00001000100000000000000010001000000000000000100010000
+00001111100000000000000011111000000000000000111110000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+00000010000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000
+11011110000000000000000000000000000000000000000000000
+01100000000000000000000000000000000000000000000000000
+00010010000000000000000011111000000000000000111110000
+00000000100000000000000010001000000000000000100010000
+11111110000000000000000010101000000000000000101010000
+10000010000000000000000010001000000000000000100010000
+10111010000000000000000011111000000000000000111110000
+10111010000000000000000000000000000000000000000000000
+10111010000000000000000000000000000000000000000000000
+10000010000000000000000000000000000000000000000000000
+11111110000000000000000000000000000000000000000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc10.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+ØŸoÇ^_qÁØŸoÇ^_qÁ­™#Þ“¼¾â'Ÿu[¼±Tâᓺ^G/F¡;eaÙN#ŸíÙÎü;>¨Óâê¶e¨Ùß;i¼2túo‡€Jô}Ž^Œ_vʯœFVœ0±”Þ‡#ǯåv|M»Ùû0î"(#<&ÉqÊþM¯£vÒe³U‘ŠñüO¤dèé Þ”õú¼*vOMBåh;¼¾ì‰™C%ŒÙ~šÑ+×Æ2¸M¬%&`5'¡t繸kxПÒF“C×ìøšk¯žQÜp²§ëönë
+`ÁDPFxL03Èÿ®ƒ	Ññâ‰ášC[ì¹ÊW Ž]$"{ª?	ÿåžUú¹5PΡº”ÈÍÏ@¡&:5÷éP/fxeDj(eTìž2š„×Ðv½–sñõÄÛ¦M·e
+aÅ/†JÚ§•Qp÷×įü)¿V³‘dmšw>¶Ð‘íÎð[EJLÀþjN_&ˆÓ¯94.™çèÓomÖð½#¹0ðqªˆ¯Ì¾xŒ;†>³Åí)ÖCTùQt›²XK‚!¢¥à ySËñÜù`:ç'ºlËÀŸˆ Œð˜`Ö_ðOþÓ¡fãA2¿ÿ¾O|.ÜBmc">Ùß)†¶Åo‰Û°îØé´òH®@,º:'Hv‚³n}dWVÕ×DöI~ã×!ªœ4ÖÕ½ˆm¼kéoj _iþ51­õÏF6›ô‡ƒ€_LtjóÏUEï˜+n  ^ÌðʈÔPøÜ?1®•ùI‘ʨÅ!d)³½ìjZN£wJ -g1æÿ÷•«Qšs¿óy0Ëô ²Ê—^”
+Ü‹­P@`	Ë©S7¢àó³•q‘¨sÃü¿‚.TCåRc¬{?ÈÚ)›'Ík%`¹Gèî|q½?Ç*ý¶6¾îÒø™Þ[`wŠ”˜áÔœ¾LRVò&ŠÃÏ•'
»Crh"\/ÓÿÏ$,µ6}-²Í»Þ<Ú±ýgFoyASï¢Û®`"ýâI
C…að¸àbŽSôü1v|{—ÇR±†Ý´Ž¼É˜#,G¨ï2¢è+y°–p-­Í/u&ÁØBYWÝ@ò¦‹ÿ¥š›È²‡¬ùúbdïÀtÓNiØ:7ëlGEû‹(#
]ý-ÀSêLÊZŒ°&±¾ýžá»
+_þs!’Y¿än—žÌÛ‚68d$cãÅDíñf;Uþ"ažø\¥„ÚÆD|¹\g3bÚ…·Ù½¯£Rq—ÞÞmÌ•O.æCΫ6=}Á­Ïuùsô¢ódQA€XitN,™BÇm®*O?
íì{ÜúÈ®¬·³4Ûä³=–ñÝ*rˆñ’ü$Û³8BIP3
“ã…ìI߈%h±"·g
ÚeÖýª.Mp9R«øÏÞÔ]¾ÒájK2Øà‘«bG÷ƒŒl+õº…hìK\3r¶4¾˜èÔûƒßÑ„ryÆ·¥fBªŠ8Ã-$V6ÜrH§¬êz	GAÝ@<]¼…ý‰
µ ˜þÂÓB£Ö|(aí¥~bA7ï’?5gá
Ñhžþ‰M—BÈR*{gÅQ-u
+ú$Ô´œ[î”™@Zü+óœ°ËèÝ›ÎbÑãó7K¢)æ NŒ4iÓ´'cûò=`‹õ@y»9mR§Õª1“¸‰(™3<¼"5ÐK·öôbãS¨Õ¥G €À‹}Ò”(gÞ]±JO¦n8YÝû{7—dñWÏ‚Šæöâ?Mæ›åc\¨:ýÒ‰\»<hÁi†×¤ÆEö~©R^;©‚¨!ü4“+N‡ÖJÀoŽÍóŒwŸÁøâg~“Tçq:}¹Í@%z°laÁ¹í/¡¶Àî´£^Ö*qþÇ]/	5-'ßµ%a˜Ñ÷²HëzY¤¬ùL	›ƒ7|n‘–‹WÄòªÆNk†äÐD¸^»–Øôé#ŽÉÃzãƒHXwlúZy$;A×7°2¥+äå‡k¡x©çÎŒÞ_©>n!¸¿*ò‚¦:ÃY,«Aò0Éý]6€ÀDçÙ’†Âý†x¶UDÙf_<mÝĦ8õåbµ[hÆøg„x£
+ì"øö3“¤Ò.½—1mÌÕâЧu&e-FXŽ·žI¢Ñr7ÅOMÃdYÍVò}12•û6
+­¬óàZG‡^êLŸ­8˜Øè™´î‹l„²®§€ùQãW\p1ÈG§z~–)+yEïéÄÈñéÔ°˜Y	Ã軜0Ò­t_wi|Âo£0µnËØ( Ž0Šë¶ÆT·ï~ÑA*P'Fº
+çZÓ’¸)ÝäU–Ç\¦É˜‰´}~›÷NXëtàÃLaç!ßk>¾”½þˆæ4O‰áæB9²cÕÜ3!9$ÝVu=Š­®à…«lpÈHÆÛ]Ì4v«.—9[(—ˆÇÿÌvªáDðU¨8’)Û|…Â!í¸W©‘ˆøãr×Köà9o¸ÎfÄ©s¯g·zQ	÷H2¦C<[¤"â3¡Ô£4c|½B<ß¡Ú…7ž\цy€êðÀ @KlzúŸGƒêï=“®å•XÜ›rüæõY$û=È¢>7ÆKË¥byUc‚°Òè œ=XZß/k¶í ™/„“ÚATž~Ç÷Fµ†
+Á‡Å2ö¥éAEs{ðiÊ.Ó4îºh«Õ{z1ÿ§Tä°iJ½o ÖÉ%
ÿ9åH«{p„’Õ=¦Šõ$S f;ÛÅ’£
x¤…TIšã>ÌJÐDsΩʱ’à+´EØWpçI\šàr¤Kí.?‹Ãõ',û:pµº>a¹ßÔ[c*Õù?æ®….8–d­Ý=?Köú	jƒXL¢ŠÄŽóØV÷LltÂZ‡wË6iÐÅ–¸fäqh±ÕOªQæ9•ì©&6:a-͵ëÖä©U¦s’ÄvÚ£¿äò‘sWÌ„{}Š‹5Ï,&QEI	p›ZH¬l¥8‘Ëïôó8ùäSEÉôŽ‚§<RÌ*ªMÿf€xºeçw]Xº%
+йPkêœ-á™»„[±øPÂõ#ÔCî‰ÍÇWüÄ,‚nÃ9~•c«ëÜ1²¤¿jÎß¿>Ð!á²@ux`Pƒ š3„¤TöΗ×X¬ëJú‡SV¢ZêézÁ5ÙFµetÉHµu%¶Á5/€´wêJqŸj^uå,Vû%}‹Í§+=îÉ”â#Ô¼:êÄ¿Ûûn–YRÑY ´<0É(Ï,]œhÒ(»uNôŸj¯ŒwÊèÆëùzÀ÷€ò)fU¨ñ3krÚ¤S·Ib;m³°E˔馬
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc13.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+‰Iã±4
.+S„x‰Iã±4
.+S„x’Û""h\V¦ð†Û83Î3\r}õ‘ˆ9«DþDÐ4¸¬Q*ý—pHUOUä9–‡®…«pff¸.äú÷?
˜â“w0wŒ#ÊѤ»u<rKˆáˆ½hmE¢Tçµ;¨™P™‰eCnñП3ઞªÕr1Aº©s»/»á8WÅo"KàÌÌm\Õéó~«Ý®ÝYQû úb-Ù;î`îF‰¿Ukê¤ØÿÑÿ1K§”ï’xä–
ß
gÐÚŠY¨Óñ­unSÝô¡
+,«wvM/ /ʆÜÿ½#þ?®>>;Ǩ÷¬9[fÝ=I!I·äb&‚.ï”ÞXXƒéL
[ViOæk^kßþ>p®—Þàzïzëó[ý¦D–Ý…>…Ú¸·Ïûü4Íß>””îµ™ä¨xLK§A§²¢ë™]éÄÂMå¶ð¶†¯Å²m¼Z¯vÁÀÁ
+ŒcªÖÉÓæ•ÐqÐ>!HùR±U=­ã¿ãb–S5Ã9ÜtNòòV›}_GAðÕ1£ν©	²M»yœÒú°‡"áÉÃÿGê8Ü8¦§õ_XKv	)m)’ªÛtGÜ3îìš^]^‰¥ãgFg¥yOìO*„?Ž°ã>á~A|"|v“MóEr¶h7¢m“mBžcØöÎ̧z’B’sÕÄL\EóƒGØêgC$Ã5¡°=°Ϙ¶¬J|B¡Œ¡/¶1åˆÔÒžÑÖ¼Ö£á|àA3¡[×2Ç
Ç—ìRË·ÙÝ
+ôÃôËû ¶ç&QTEéåråÿö´¢)ˆ1§|©msƒëåhxDÍ`]¨¸a‡£|55Áw/ÕMð˜êŸ$²$õzþtà–S‚SyYË/ºÏ•AïB3BMTåéK홚×qýqC—yÚeÓ4`L`%N¹RO^´C쟟ÆI±=
+Ž,Ž 0í5÷»Ñ7½â½|Bï¤2˜Ô¬S¬Hl»¼ ªzGÛcÛÄ1¦j›r#3¤ÊÒÊð<ˆAK
+¥èœùù¬+ú<¾Ž‚,¡è­è˜&Ôí
+úý·b4[4gOyšktþ%ê%µja9*ò%¹$é}Dß›{lZ•Ýp=oŒããŽÉp¥pQS÷¾(°–jÇ*aae^Ù•{4îìRÚR9I«èŽ¥feUñCkC
D…ÃÝ!ÁÅ)¼º¼<"WÛÎŒHŒÊ­­|ˆJôÎWòžÅžT~}Û|Gt`P*._ßü‚øDøì;šûŠäqVµaéõéØ6´ÐÙ`	ÐnYÚ;Ú„!Æ­,ñY'ºËŠË°,è†uù…Sô9„9æ·•˜ 2¸(5(Òº»³s¶ÀŠÁ/ûŽ­ÉΆ'HˆÌ
+J
+º çåÕ£0›j_}z}6ƒ-4qE#¼lËlŽ"œ=”ø„__^™qb×
µ±gN´Nj”_I„‰Í¹!¿±e±[ßøÝ‚f_0h\ Ô oÒÖöÑâ'¶³d““3Ť‹$s¯?ú‡‚«‚ÈŠ w÷קõ›õ‹ë@qÓL¢.Q÷ä*ä¿ænZ€ÈÚ¨ŠÏ×ä×ãñ'uYR!Ã,ÆUÆ×ü2&Ý*
bS.ø.OÚæË×Є+°?I?{×È0˜S¨ðˆ‡'ÀºMm ‹¹k6Í”f>FX[øjjŸî^·šý-š{·{«ãpœÉyUÉ#HyH÷ôá<èÝ•€ÀYÈYÃù,Êol¥1¦¦ò²‹^iƒ7¸Yû·¨·Æ¿¥u:O>‚Äf„š¨×Ï–Ç·Ë •×•®¥ù#œ¿/)³âçâ"†3ò8©Ê¦`PóVó‹Ùk-² »hÀ˜ÀJœo¤ž¼:©ò‹Ñ)Ñ~‘AÍ8Bu†Å#'#(
+<‘’üÏ&2–2ºÁû{zX@`Ç4jóó]ýétNìgî‹k¿ngÙgø>„=ÃUþâövhvÌ3ªцd-µE¦E$Øke@ídVTT¤)ö@6ÄvIôŽ«Æ«•bQÔ0+äÀ½mºwº¡oÿc¯œFfU‰¹‰ýx
‚–>Ï/¶˜˜Éu#©ÅºlWÍ%ï8ïEVéxaÞ„Æþ‰þq[ÇS2…aX_þÍGÍ-Lµ.ÇéÑÜöÜA›”‘çsÄh¶hΞ$ò)Ön:'yy+ð¡­®èáJÉJwÔÂrT<&a¨ü[x[CÙìY¸^ùJo,H,Ïú&ˆ£+pŒ=ù=û÷£ð‡SöØ´7§àzÞÛ‘W†“íTõV’£ÛàWࢦóaP}1RHlñæñ–«ÝJùIÔ“TÂ(Âʼ¯7öhÁ]Ú·Ó™Óþ±¥ì¹Å8$¤©¤r’KÍWÌLqǵµFŸeæRӴʪÿ†Ö†ˆ›§B<Cã—g—.…9°ôÆDŸ—ReiexD®«Þ±tØtLj…ø}‰GGø
”õLjV§V$	6Ó^®ù!—!¨*üú«øç0&0œ'Ò)©/€Ž<"èÀ0 T\¾uÁYô=Ž:p£åíˆíÅv)ë	Õâ*¬úü9üñ{ÀZQš¬wÂÏ÷Ï­lu½¯À%>!ÞFÞ™a[–üDj½Ü²©v©B‘GXÿ4•Q¸Ç¸!O¿l{g²Ni‹	‹}XÍþêï;Šš¸šIUã:­n—¦õrrÑs7-@dmžïc¤cå~à4.PjP¹ik{æq‘}ÍAÛAdEPµõå	Ÿ^6ë6GN€Ö½'Z'5J¡ªBÊè
…”i]Ó×·[`Df%]Pýüäß+Ô¾úôúlZhâ0Š¢]ëEëXtC±´ò$FeØ‹Ø>D%z­†É:É0(¡5í¾
+¾¼/âijw¼¤ö¯»¯ˆ"Ìïàž:ÎœuœÔ5¾’‡³6-Äà8¹F‹ÿoBcʶ£í§̾æ€n{n‚®ÃŒJHÆ`и]µ]Þ¹±ñ¿ÙNé™[LLê´ŸÚì]6q{È;4;f—UHæCø2+*…*Rš{ b;~éK	]îó³÷ ðú:€'v½wËS0(÷+÷ˀ⻘YÚyËæšæ?Æ®Éè!\¢óÕTÕcÑÜ´©ÕëÄåÄWÜòŸN	ÑM	ƒ³Õ³Ûÿ8N겤Ä@`¢d¢ïòe¹6ÜB›X‘ª‘³ådL§TËÒ»€€‡èJ3#,Ħ\í\ž©Ñ6‹³½“EM\Mª¤ÿØ7ÅV}~’~ö³`-¦Mœžo#o¾£K~"5ý
NišÚ™@´î	¢	zG±‰8oÖ:l:&‡5Ì|Œ°‚&5+Ý+Šç/È&¶íÔÔ#Á¼s)çZ¯ÿŽÅÌ’Xzc")$6ösöKÛà%òª mÕçÂçÖÎÜvÒ8Fòóõßxͧ±Æ¥CÇø*ô+Iß7²²›ïX‰ÞØW¾T~£<£¯âv¢\/b 0Q2Qùy¼ÒnëiÓ@ƒ@Ít%—Ÿm²ësMs‘cWêtžäûbüb¥nyÁ'Šæ|›Ì)M³ƒ1“õPx}@;еës‹@7³7AWïF%$cú£&&uZÁmv ^R{ÙÓÙDfùpO‰×˜ÈbÈpHÒ#ËñQÀ û¬û,:¯ÖZy؉Cêê„…Þ@kÐ-”%ÞU!etÉ"3ŒœŒ (ð~ráOù¿R¿ü?‚‡p„Æ°è®ã®È2¬(Ôôüê—FNFPx?9þcXtWÿWdVjz~åƒLd1d8$iŸëölʯu€u
+BÌoŽô(<°€ À“hÔû}aß´-î¸;Pƒûºç Ï è:œÅÎÁró1~1Ü7²îEsÖcÜίÎí|z›ªá_*?ßßÙq;QÈ.™ÙñìÐì…fI,=¿P¸äýaý±kgn;iÈZwŠQŠ=H­ÖÊ€A”›à›	Eƒý™dÇȬ¨.¨URñ€l•ìNO¹Ÿ¹a_ß«?”’õK‘K7Ä¢µ`VÕ¼âZ ZÉŒž3Ò­gÚiîi_ÞþãÆC%.9x_xkÓÐÈ•Ç]ŒÌªoçð1|(…IÞÓý42bøPƒ^q--êFO—iØ
+’<¡<»çhdÄí ®‡JÃpʬÏðÂ2'ΩÒÁÒ¾¡áÛ‘†J¡‘ááⶓ¦dÂ(\rð¾ðÖ»½7“º°¾á‡Ž‡Z˜w\“(Ï9÷–?–n•YwÀ¬·¿,:¥ñ¥2‚+
+5=?6eÙ´@´!f¹G
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc15.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+Äo£pJ
+ii‹„— †Äo£pJ
+ii‹„— †:•Þ[à”ÒÒ3@4'Q±øÞ»»€‘¤`—.t7¡¶Ý5(¹¹*f€"hióέ"ÐЮñ ¤rN¢í=¡<kk?UÀ3\SfNMë6–»ÂàµFèn_q§jPoo,TÌDÐõª0Ò× Z§Ð[=ÂÊÒû*GþD½½'Aÿ]UäÏ?î‰7´NÔÔ¬Åh}ÓþœYþÇz_xÖÖ:~ªf¸‘d
+r¿¿±ú=½à¢¦Ì œšËl1k™ÝwŒ»O?êfmmºïýñ–ÍܾâSÔ ÞÞX¨…:ˆ½ÐÑA#žª··Ó,§÷I`¹³@´S½¶z™‰êÃ
+¾eeØ9!Z“¹ëTŽáˆggN‚㺪դ/p÷þ«‚Åtš,σ~ÁnuœµµE—Ðú»ážº®¬?–ÜÜÎGÚ=û%²á“ô¾ð±±tüI'Ìm8vŽ0„ôúØØÿxÞJw'?È*äccézgÝYãPkd`î
+
+ômíG[CQ…@%)‹ØbÖ/§îLA/†YÁÒaaéR¸‡hkž~ÉÌÚÚiÃçÿ1vÔñݹUƳ³âG‹Çy+‡¥aÙ¦µ]¡¡°Mt
gšazÖÿWÈÈ;É€T‹}½0¿‚F!Iss»X$4S ôÐ!6kC0ܳšIó’Ào{€u¦gqô/îV¯ÌÊqq-ãæÔ©É4›aÊÊ­rB´>;ÔÃq—ë^k££&öÕ”¸!oË>¨ß
ÎÎœÛiI·rQq•§§LIÏ­U^àóáK—è)XƒHšP‘uuˆ	Þ™üŸÜê%wwŠ3½ékß8𽬠/·*ÉíÅ!iAE<~1¥¥&Ž©zë<­.æL4;ÌÌ
+¢‰üñJyß;õaýèå’N…ÚW½°˜…+÷canÀpì`õé­­ãð¡”îm(nÃe¿ãÄÄht6.ô>N~(TÕÆÆþÏôΧ²#Š.X߯¯uKcî!¨Û ÖÈÀÁõÚÇŽ¶†Ïu¸ŠË}}~^P®0œ¢€JR­ı^SÁ
+¿Óïé"A§yyO5ÉsG˜‚^²Ÿ¹ÂÂϤmÐ>…F1²ÂÕ³««D ú3V$Ö !ü>…©©Ò›8ÓãbËäN_ÿtÀÀY¯óexìµÿ§oª‘{{ÙŽ“òVñqà›R
+œ³tLW¯Qwº__}š.èΓ­!=°66ö¹ÈœÔ)Âô±ã®v¨ú4sWÁ©¤ääýŠˆàg`cŒB’ææk°Hh8¦z¤ºü˜à4ßH¾¼]õ½BlÖ†44`¥{()’@1Òᜌ]]ë!쯈û9Þöê00QÎâõ^æýò}†WàYYÚJuÕØÁ¬C…‰þââZÛѵO*Üh,&fÃô‹‹Ñ_F•É0<h+(‰‰Gä„u|v’ÊSË[bÈààÌ`Uúlµ›â3˼Ö[[Lñ·5mB¨_»öÜ22Çu ëXÞ‹|M£%2«Ò’sÃOîréè讶<òiä¢â7SS.'˜’ƒGùÚ͵’}::¥£²]ª¼Ýûß–2883ÍR°·x²X¯Ü8QQ¸œZr6) ?&êê8
þ¡/ílOH,ƒƒ³‰i2'56å#<¥ÉJîî	fgÏÖ£+!LŸÕƒ@‡‡‚âðïP¹pýgE]^<<sTÇ—´’Ä5TUU‰÷ïABÒ‚ŠxübWWLOôË_í)¶h>>”È–orÑxG\јhv……Y2åÿeƒ3rè"|ììŸÝ¥/cå”ò£v÷ÂçþþÍ×9œ©‰6ÌÕ‡ˆí——FS®¼‘³®g}-Vó,,ÆÂ
+ܳ£ŽgùEEMFü€‡àÅÀ*÷ÏGGÛý_5ÁýmcZ½Å..PyÈ<³ÛÚPÜ›ÊcÛ••Ðèl\$õÇ”³8º)Ñüü[lû|¢ï|œüP¨·‘‘áƒõSyaX“¤ â½øøjb¡ÕcF	"\°<£CCê–ÆÁBM[ÍMÿÀv©**aQáÄW«]±Ÿ((÷©“qo2ýוAA|-!÷2>ƒêm	‹úúü¼ A`%/úìIC““w87aæ?Y.”¤G  •¼¦ŸDêr7Ô\MIIû+†c»ÃÏD‚SòòžjæŽ ~¬l4ÈY››îÆ:-¼"y#o™™ƒUÚ&½|0ÝÓ	ieððÑM;fŒby™·{KKˆ@éf¬H
+H
Úéýq""Ä~F*R±@Bå|OO¹+p»ÛĬ„-Fs6&&2¯ç›]Þ‹Õœ¾ãè²>CûÊð–ó“¢	ôô9ºÔÛLêÅwãSÞI?öö¯;ù¬Ø³Œð®5ŸŸ$…¶ÿâ=>Ý+$$¤%{è˜â&R«N—!MM/²[n‚&®™C¢îi¾¾ú)\Í4;jöàÒ¤c××q­Ëí²›;GBz}llñ<o%µÿ(»20wz¸ø­£¯R™8õÛAì:MéO]WV‘Knng‡­móh殟OUÕÕç	
Ýuȉ
ï_¼¼l’ž-ÇÎÀÆ2„9ÑÑÖ}ÐpQÓ©‘uÎ3¸¸]ùðöKôUiå-Ýh£aeé‘wÊ•Z'jjVì4°çº÷g„رhhÀWöPR9§3'¨ûKÓapÔ#€b¹ß8%ººËBÅC
¦Ö|HoÓÓ@ÆR0Åër'¡ñ:É``¢Ù÷¼<ö¶HpÃ		)N×:&Ñçùú®Ý²²©”ê·­Ì#–Yaä×ÛÛ"}—+ŸE†,áÙÙ´«¿wžT‚é´\Eë°°?/(WN¥ÐXLÌ›õ¿¾Œ7`¸7ï¼Ñÿbb4:	zxÐVP™ŽÕêøìØs&“ffQ‚Ê~ö9‰¦‹¶ÄÝÝ…À&ªéØ$MÉ(ÆŽ‡´´D±ŠoÂw+Ùf‹e±¶¶˜ÿsjÚ„jï¶Åû/»ßß{äJ\žM¾=kñ¥dd“ê@*Ë°Pzhž»¯

n×
+Mª¡øš[4JdK¹9æ¼Ï—9t>vvÁàÜ™¿ü›ž&ÁäÏ ÍÍAqxù(Ò†ZIb”…*¤¤ÊõïÙ®ÈÕ<Y,Ùn¦¦\N-9ŽÈø6©$ÏÏ×ʺ”漢w9úttW[y
+ºòmèÔI°Ü߉YŒ Ie§ë£1dppf0‡¤}6T¡ÈHÓ{ní´„û,sðy°C¥p¢¢m%´äln43ïzËËæ¡#Äê=R]~LÉÉpá$_^ –iþNF  ûžvÙDÇØžX{ÒdNj·¥îÚRrrð‹EDÈpl×FxW”ÁÁÌ΃±[q)Û'Åž¨¨™HY£7AVB˜#·€ÙýàoK†÷€ÇQŠzz’]jã&uàçΊº¼xx樓3$ˆmúð¶b?#)"u9•j.¨ªªó›C‚?±V6d¢ÃÄwc„¹	ðåÄ®®>˜žõ‹™}vª€¯ÎÇǵ•¾s‘¾,ÇRqÐ||51Þä¿£è¨ñ`;Ú¾	¦þb¥ðŽ¸¿-Ðì(²d×ãíJ×]šæ~~£6ó>QùÊfäÍDøÅÅ#§W^Æ××ß	G½ò¬¬¨#À~@Í5ù[ìó™Óáᇳr%.O(=4OƒÓÙˆˆ7å¨Ul…·
Ç33Œ¦Ae?{¨êcGÍZZ"ÖE¹aAÎúZ.¬ûXX‘™¥'\
+•ù^æñ11ƒ…Š={[$Î8šŒ'åfŸK¢¾råãã°Å›	Ý—T󃎎«ç¾8jŸÀSk>$¹‰çç c)ì…çÚÆ´g—\\ òx{«úƵeÄ-55+vXý±© ¥+‰Æ«77½ÍظH÷´dʈùŒ¡^^6IO˜Îí“5{piR¿åå¶ØëøYÃŽñÓµŒŒ=\|ØßÙø%å Ms??ß÷¦òåክÐyVVTŸ`? è°;U@ÙgííÔÄ_·ÆßtTö0“m„„_ŠS1ÜŒD¸}x[††É1‘Ÿ„š‘Ö+
2QïïBµ¿€¶‡šãìOTTÂ$¢ß•®«Cõ@í¦E==I 5ÿ´Kº'#PPóO;â"
ÕÜwm)99xˬ"d8*Þd$ç³7‚‚øZBó7‡—ù=ëësÞŸbud|ÉÚééåe]‚ÀJy¸tjªX€€náÊ¢FP^éÅ’:†;;îpnÂÑ~C-ª1JÌRReôùâWd²\:5U,Ž@@7þeQ#(¯˜U–%f„))¼zòq¥2ˆÉänµ¸š’’<ëV2•
‹ÍÅòûû·oÁ1´Æk›ƒˆ¦ùù!ÔÑ@Û¯ô øS¬ªP”ñ‡ZüþEØh²++*Á0‘tá:*{ǸBB¡E§±–nZ2eDòFÞ//ª©LgøGö
+ç‚ÔFF.>láâ`§»ÒÊýý¿švÌ}cÔ¼b˜À””›;
,ðÖ.Äò/sö––
€ÏÌE3Á«Q_9üÿÿ†XìÊ©ÏçâDD•üŒT¤	Tu
+¿­è--k¬Ò¾€„×ø.žžoVàk«•bDëtv²$÷÷äÒwK-EZŒæl:LLdCÓ+º¡XÑ5/–&0%%ïÇD<»·%aÛÍ''y|†ë‰ýsJ«‡NNòøËç1"û:;Yõõriµ«˜É,æ”™Kœœùí"‹Ó—îÛ¦¡’~ññC,vïEŠ*´ÑØt˜˜È†»Vi_­{ýAj##H6þq°¿j^1L`JJÓˆxkãÙz|§VHHU(JöÍ-þ³í\!!Þ¬ÝÖK7ÙL¤Kœ3Bšš^=y¶ÜĈËèìyHóóÕ¹î–Z
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc16.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+;
h½DÑ£A)åb2$;;
h½DÑ£A)åb2$;vÐgˆ¿<[‚R×ÄdHvM¸ÚÌn"øÃ{2¦VlMì4½Î
cx ¶¤³•Èì×9ÕsI²f(XV÷ú´×š.m©…ÜD0í›ödQ¬Øš¡#Á
Z8NÚß3žü¡ÅhgÆð@q2U{7=Åþe<^îHÒs|žU¿þ³r·æ’yÌP*°¬óéu³ˆß[Ö¨ÒX‰ñ.I‘ÛQˆ)\ÚO¥ˆ`Ç+ñÈ¢E­)Q²òSt–hdjØ-Àw‰_F
+(Ÿ´pœ©£f!å_dKb•Û˪x?èŠúÁd—ÐÎ4‘ý€âdªönz—¬Ý¦¢p@ãˆA%ƒ5^¬áÊx¼.Á¹æø!ªc2áÚÇvÅøÿߘ§ÑÄÈQÚ{äsÑ9ò… T}EûÏê{@él}#›¨÷<' ™ýÎ@
þ£¶±M¹°ÿ\’?«¢
6óËõœ§¸¬¾uw]™†6R¸©ž.W
À“VÿYŠGRiµÁ#j†È0Öh;¸ci$¢yù¦è1ÐÈÔ­Zî$¯Dâ9/Øk•„¿ÿÜ+¾ŒP#4uà%O[>ÌB×¾…|ígåkè†rÛ®pó…È–Ä7«‹Ið~Í	é&ŸÈ󛬊ïZWøÝŒ j»ó3½>h?çÙÈIñÜô3°éƒ,îùz‰`¾<ÐE§QYà€Û
‚J&j¼E~ª9ä¤QÅ!2ÃzX˜~߉<ðe\Ÿ=oÑíBIÆdßä„TM!5Ìħ+ô@ä©“ì—íã£-4S¿•¢,©’ž„*©2½%—–pï’öÕæ¿rù]¨úŠëƒÉöÍØŽ6(	U»5o‰±íÍ€Ï6ØúF+MóxN]/瀻Â^e¾—5EP9g¸MÕ¥»á[qšo}ã¸9~KY!ì3Ì;Kqu½¢‘Üy}!lû‹÷%SmEaêîº/lWö㫳ôMeæ ÃØ5W¤mO!\®;¬ã²	Ž¤Ÿ`'œ•˜íÊâÐ;ªŸÒwŸFÔ&`.±ÐvmÆÒéz÷ûÀ8…Ão˜5_âéHYòïQÍb½µG´'ÁHsTšR|µ.ônQEó:s>C"ˆÙr^­Ö7cã¥V>NJ5£@¥uv<†—ra( FhêÝJž¶|…„³aZ@¹ôÕéߟ™ç¶—ZøÇÎ×ÖÍä«Aàû,zŠÈŲ]ÍN#Òß,1•nK’ýü‡ÏL#¶<ýÓÚŒõ_Æ;*r~¶û+E	ô®í§@Ô(kûÀ&-´‡e°åDiý¶OÀfg|Ð~Ó:¯’ÿ¥õf]jwÁ”¯Í2Ì»Ç.Ñ]}ÏXÁï*ôÀ(ax½+p§¦ñ"WNéÍJ™+ŠS¢²Ý«”6L0ÔeŠ±^ʙ̵ºÕ©RæA±üIrÕU¢—
+Bd›ô°-üÇDhs‰áWM~–‚	Ç£xýʸ#zÞ¿Ç„’‘È£˜@Ži=r}þîað£ì˜Õ¨šBj…=•SVõ€ÕîÀ'Öb&|¼¶4ǤîO;Å3ÇÛ[Zh¦c7YXOt6­Žƒ
+ERËçJÒek|t9!TOdgJ3$1àÃ=9,}éµyBe¡4ñ·Ñcäï.ºMé8	Ëñʺ¹Þ >0²î¨ì©)«Ê‡­lPªkjÞLJ¼ i¹(¢µ*C;mM㼃l­éŒVšûðœº^Ó&Ž­]H’X±µ_<á;&k™¼Êa3jŠ rÎmš·WkP”Ôw%ât‚3çˆø…sP4߶âþ)Þú<Ûmrü–²4ÒÞ_ºøÀòŸšD—ž¤–BÅf…v–âêgY?¥8òúByÈ82GüâÄ@ZÀÞyØë,óJ¦ÚŠÂÉÁi^"Øãæc‘·›¸Ò)ƒà$lã®ñÛK{õšÊÑ@›­:j®•ü³ö?$„Âr²óÏN•UÚžB¸A4'vEÛyUn×öÿü*/Õòë %n#ÀN%0þ7-ljٽvI#Í&˜t/?Ž† <ßDm¹î#Œµ"LÀ\½ìÚ‘¹‚ãK1ñóRcVXŽèµ‚Ïôóë=p›Þ-j(¾ÙÏôù›VyLn8ŸJŒýô²ùâ‡ÄgwŽuNŸ<«¿‘~æVÚo¤6§,­«æ¨)¤*8øw\õÜ¢ŠûtæÝ¥Anéæÿ´õGèÉPÝ|†D
¯ä¼G±n*ÆÛW¬|G‹,°ë5¢O/#¹eˆG
+œ”j'[€Wêìx3ä
+1‘ü×cŠž_I­Qô}À1Â
+P]ŒÐɧ”!qø{Âù8àÈׯ7`Xu'_ù´€:oõ·Ï£#/Óq3´è‡@¾ë¿lâ
+ʱC.>퓳±‡"8ÕK‚Ýë.3….Åb¯yü®àïÏX$=ô	—yº‡œF¹£Xc)UIMÝ“ŸÚû®y$‹‡cb7Ü–9çå$ƒ ˜F<o_aÒÇ'ïFR
fBªb<qx绩÷¾‘vTäüqJuZxÿÐ_±†Î*JëVŠ›uAÇS
+€0µPÖëÐ[â¯ß¤_ÏðK©Õ×bòÐLZuÊ}׈Òçq4ž¦A2ÈWcß«Éûº¦ÌÎ>ø½ü»tC9ãW8÷Ì÷ÃVEù-¥|àF5
+Ó÷ºÔîŸ5C‡d…k4“\¿ºÙ†"q’™l»ÄBÑñn› úƒ6°ŸÃTõPÂðg ÷ë‹ôNÝ\V_´µ ÂCVàSQ8 ÿD®œÏ‡”/Vmí;ì|ñáL
Ýæbd¦m	¦Yy§:K425l˜`µÊ	2«1ÄãëU<‘tE}‡î2¼‰/…w$i·>O¤Ñ‚D±á£kTi,ÊöªÆã¦Då’ä·ªY3„,È+õ}ZåÞŸŒ
+îˆ-'máΗO~Þ“ˆ4Ð"æß®šü1“¨…\mf7|ï³S+6¨[ðç‰mFô¡c“9?[`˜ZͼXü"ºð[
©`- €ÒzäúáÁÂý[Å-	H=EdìY è'Ÿiá·*M)„>Ôz7¦¬÷·Œ'%”Àß Ü´;CÎÅ9ŒÁ0N±ÄLøeqh“UÁú=õóH`Ìï¹L”
+¡qúžv—f“«¶´ÐQÆn²°ž¥{ÿÛ×z¨¼sï‹l€”¥èlGŠ¤‹Ó”¹ÊÖøèÓa/¼_Å”¬(’½\¨äÜÓrB*¨žÈΔfHbÝ›z rIOBÚÐœÅ	K8ùHIXúÏwò„=Ê0
+_h?U’rR¦ìŒž‹ï=,L?ÿs¿ÆÕÃ\išÏp‹6ÿÄ~×{‘Ba9ŽY÷é'ĉio¡]|`yÁM"ÅORK‰²d­~qb -`o²GØ $I,ÖÔ¡þ“(Jjµœq:A—ýD|Ì·(e]ÒoPYwT†vÚšÛe^PºÒÎQÔ¯“¸¨ÿ^:ØGϬ)ëý%i¼»>:°ú‹Ô²!H¼ŒÞ‰L Gº9°w¾xßvLw`kŽ1>^[íRwÖ/e‰ÂfÔ	]äÚ)s®Öí"
4†·Êþ¥¨?KAŠí 5µîJÙèfÓ
íæ ›8ÝSö¥'úè%›h£qÙáR¡éx«Úäå1yhS®d¥ƒ¿áÛêó‡]S¹¡¾iíù#)ˆ3!U1%´É-<ƒñ€h¡ÖCg%„—Ìì1ÙÉβ~Wpùé„¿š¤ª¨àÇÁmóW²ËÍ¿òpdŽåÙ•0,€´¡òÉ€tÍ _ûÑ6qeÖ¯…É­ËXû”Q©	™ŸÒ¼D­–Æ~å¿EO¡ªØ¦z°Ž`–ÛÑÆ?s+m¹RÝHØÛàÜ®‚7ús±ñZô­tê(àAÿ«–ö÷)‰¿€+,GtÔAzòÃ+²&7ÁÉ%Fðz7å{ñ~H™äyûƒœ7èL:™‘GCPá"¸ª©!„m‚hN슫ò$ª‘¤I9)SvFOË‚ù&‘ܳñãå=T^·ùË6@JÜç¾™^¡ìJVIÐ.TrnçFœJ`ánZ“¯gì’F}ô÷$0fùÒ&JÞ¶}0‡L-è^,~]x£ˆÚ0Š$¬2v¢PtÁºþoÁFwD˜¸þgÅ©?oTÌ.¸3•†>ùׂ§›TÛ–bÿû¤Æ:¬°Íw"Öþß»*ºe{…UcÿS"ƒõûËz'à.+¡ZÔPa¯ƒ¸ø“v>öþ&ˆàs12S‹¸õï+¬ò˜Ü>p#”çõÎâC¶IÂ6Ób!æö7ÃÎ=yï›Y•Îîêœ#x=t‡&‹ƭ¯(þ\Kc?üѬ©ÞUlS=XG0KpnWA•}·Öö-zØ:upÑMRUTpíî¸÷¥Y	ëèÑê@:è¡ó涌¼kÙÌê§W‚2ÜÏÑþãu÷ŽÍ §œZê˜Ïö@4Þk¯½„œøˆCÕeŽÜT‘«®EøÃà§{†Ü}tÉœaÃŽX}ËjYž$^FoÊ
Žµ0À»G–‡/£
ø)µ%5ÔN¶®ÉÅð">fÕ/(]i
+g¦j„ÙÇ\Tñ/b?å³Æ	!¾’G¢õúbY2‚Ø?¶1‹˜0¹Y™ º½S5Bâí.*ö™¢ÈAl‘[–ËLÒ¢ïpݳCnÀ°:êN¾ïÔ`ÉÓ­K͙߈|šÔu tÞ÷sƒ[F^»âfuN-uÉLé{ o»ÙÐBN:Í€aËcØÙ‰†.87¥®Ä°Õk{˜=l´
+8\|Ç;{Dp·–§Ë\gq¯†[ªaç1žs{•ïg*f\—ÄCòåAÝÃ*káÓ]¼³Ì¤¿ñ§°Hzõ3òi%Œo[°‹EHVÉ;Q(:Àî]‹ÆRª’š§;#©ëAòHÆý_Â/Þv%+
+ªh*97ýÄn¥1,rÓ×&H@-Œ5ÉuýlÛtgaþ"¨5x޾¹“NÃŒ¤Ì„IÄxCÓÖýBPË/å3)æ{àCâðÓk<O
+óa?ì¨ÕåâÙý»ÖxžûÂ~ÅM·×8Ù”ê´ð6ã:½¾T”¯çk±ð!(ë™ü—šs³p¯Ë¬	$+ê‚“¦`w ±Ëð¡a™o;œ›U4…’•ð½¶ÙC£U¾ƒý–O·³Äù½†»±þç„ ‹^×fRÑö݆'˜´ê&‰ú³
¹Óâh!'•ÜWbX仳L6€ZQ‚d®6Æ£Kë&iQj0êçØ«èÎÂáD>Mj
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc17.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+wBSxwÅSù)†U5}cOwBSxwÅSù)†U5}cOðî,—¦ïRªjúÆž™Æõˆ™:Rõ{Œ—ÿ_‡¥ÑÁQýÁX3Qä"IÔé‘!¶W…¶Nö:‰¤á”òn/‘÷
/t¤÷,ö3ã¾W¿XÓ¤uXba¤Õߊµ¶‹n4ðŸ*¢çŸ°f¢›UD’µÏ?BèhñŸè¦£ñb|ƒÂÇ€²\
q®qœñtU8ß5ùÜìWoŠ4W.€ÓmêHš“^?ó^èUóXñ
+fÛa&®c)} b)þ ¡Ø…àŽT[Í,°»Uê°ÄÂU·£	wqÜhýÇù’ÇÒNŠ†ñ$>¡²#TYÓ#}ÌY+ªˆ9wƒ~„T
+«Tk	
+Òƒ—lBþËÍÐÿ#ÍQ[ÿÄø™“y¸º’¬[ºGž¬=Ñ”Æ(ÛUâA.â%ÿèªp£j凌[V•3:['‘,%–ŒêÅ®Þ	h®\»ÚÉ);{‡ý¦{­ýþu’=üíJt¼~û4¼Íªû°ÿÌ«ÂLAÆË<¨LËÛo¨IÖ›Jþ÷1"‰Rú]ÄRá=]_­Ý¨¶‡X%¸¼%÷ø¦„˜[TËä}kªÉ}•™ªs[îâ¥Ðç
+)ù±
+ƒ\ùŠrh·#س¨“ï9“¹œ	ÿH|_yä­_Aä¯Ë_e žyI"u6F¨²»Fú…²VI0
rîü1êáÃ1ì@á¯`¿‹'ÛfŸZ¨,K¨Ö¹3Ø„á:‹ßnG3ßÀ×G@2¼š±œYć½ãF‡¢¶ã•í6/;:òm4ðÿ°>ð´s°lĹ©n{i9E¶iŽ!Ez¿5>‘P«ª{Θ䃖º¸ÄeuÈåÙ‚\ÙJãÍ<Ià[ÔÃW®ÀC$®\&C45³Ïµn© 7¶¬7ft¶"N?XJ1.É@DåÔ@p±åÛg°ÞSf†—A¡ÐA¸:k©=RvoÕÙo÷‘µíüº@19öçQö>Gçáê9zåÇ”èQ´)(‚´öüVк÷§eüëhe‡Ië}ã(…K™˜‚‘¾¸‘Œ¸„ʧ¬åáÞ‹xM˜‹«ÞM’±+”áóbDü:àü½k˜¤´Æ'@¤éº•¤ßzº¾G.§Mq°Ó«éíÓÉ¿éGn¡!WxpÿJmeJóíQ-¶¨'‹Õ.=/O=å(O¨<¢0ýö¶aúÖIú7/Iæ¶$ÁÙ,W½Ó”÷!꟫GŒ*ÞœRï¸ï	ä'ÐsF­{Mc¼c
}¼ðͨV&sÐ;Ãr;o%"ãø¾,òLK
+LyÙKÜ;­eÅÍÃO½ÕG¾‚ÕC‹¾Ê@!ò:’Dêl¢íú¢UNí3i®to§9‰#ŒMykŒéy¬’`äÁ6å*û*ûÿÒ*U»ïœ±ôK†ebÉß›bÅ€ßCÀcN«Ì#´‹ŒãÓEŒºéìž±@ûMX(–M±$(o6f8­ßt:{î:§á{–é¾ø ¢D£ÜŽf£³Ž€de)%²•ÔžÝÔ‹vÝyMê¯RJXÑÚgÛŒYqÛ7Çl^vtùÚhd%ˆôdO´ˆÎîãØ#A„¹'ýã}|ýuæ}Ø•oOÜöŠ¡.Šc#.!¼àɉ+~¹ÒrŠqÒBŠôcj|? KI¥0Ù	¥‡Ù
Jåúj•m(<ö,<-Õ,1im•Êê×K´ùK;âæëÀÿ— ¸¯”Û ‡8x’ݶµ›®Ø[sÀØ‚s~÷ˆƒÈøáA†HA¸L†hj{ƒwÜO]06ßÕ06®‰Õ‘Cô"é2>nqEnÌèqDœ~°”b\
+N"=Ú-"½µñ6ÁW!iÀ€ˆ×µ€à׫Î}¡>¦Ì÷Ê„Í÷öº„Rçò'k=Û¯^03‚_0$½‚mtÖOz¤ìGqÑ'G2xÑåDûP6Ç£Þ·$¯Þ*$ó?wÇåi€br©õwשïw
+øA°\ý=ñ&Ó¢ñ|ŽÓßÉrôד5͆d€Ú†jK€&àýrSâîV‚¢uRPu0›q嬽ióShà&*hFÜ&ɲþcùˆÊåËÐÊ’ËúÛP–/-?½§˜¨½W˜òß‘ÃPzp$am $?m‰S<E×ß¡S#>XS)À>ì Ü€ipª¼îðš-K¡š9V5ßûĈ|²ÉU|]dÉÀVÙ³ŠÎ¹ëQåt<Ýåg6<Ö-U$u‘>N€’6o¥’qóo/Ú¢ ¤C-ÏUÏi7U£ôiaŽ\Sšâ&}":O"µ1:˜§ÓÕQ¯ŸE2»KÏÇ»cÏŽÜ_B®ðàãÌ	œ¿Ì™¦œwõÐÄûÅeƒ¬”Ú8Ê”ûÇ8¢*ZqMN·\ã˜k²ãík[Õ÷{vÔz^ž:z×PžMxY`ç$ñqÂ
ÍB
Á•Í´QÖ沌鱒én^’ÑqHŸ¯X®g»žóÁ{žx›Á(XÇúmÓô54óBÉ4>#KŽ2T¡%pwg‹pTgÇ
+ÄP)Âj(¤Ãþ(6mÃÕN½æŒGöš_æ†_ ¨ëüÁ;³¹:•ÕÆ eÆúeý‡M¬Læ½0±b6v±?6®Â*ÓÀSKv›0ävÞ80J$DÛ=íaXùÙcœÈýc³
Ë]hØ;¶˜–˜ò¯–¥vGÊ—‡›žgï]ÅlïäjÅ\_ÈL²æý(·Ža·†a‰€Bùt9ˆÉØÀÌ2aÀÎ2p©Í!õª—Y
+ÇéYªœÇfÒAèÞSrF.H”‘.¼Y”ŸûÎn‹fl	šòÖÏ.òE9À4ÕŸl×TrØ¡®rÙ롼O²€ª´ëT&ëã¹TªkÃ%õ–Êœ\^œõ|SBL£*Àër…Ä£+Ä—£†ÆœK…Fu³ÍðS³Øð´IÉ~ø%:*Û*»ŠiÏÅ6!€ë]IV£]­OVæJc㤚°P1šHPÞlÌpG*£èíòIíi'ECöÞ‹Yt4öÁtSßö1>Ïaí@Y.ˆv¥¹E¥È@ç¸u$MÇ[¥Ì['{ÈÊRþJy7,çR´,1¾RäáEÔ[Ë7xµ!§<µì§òšÉC¤”°¿©ÂcôDÂ)ô³FÅñ¡ÍÜæ&Ϋ&²â«n“ؼìèï©ÐQŒø}Q¤'ø—ºW:¹Ý’ÊŸÈJ
õÈžu
ÁÛ­F‚oN¿^¿ˆ°^xèT+·hçÛúøçêÑú­7Þž¥<8ñ™©€ü©TQð	{[¾	_\	ÆF\BeÝVüþo~p~Ѓ»LR	Zc ¹ä	⹄	õÆÔø~] –’ΦZšÎAZï[~+h]õÝW`¯W.¯”×éÔ7ÚP "üj 8Öüã½Xo§3CxñXxZ·X6bÒÚ7‰É³³gLrÏK]\b¼´dü–uþï–v þÙ0ÑËã3Á-á7­—á`å­ ^MÈÖN¢bC2@mC5«@pð9§qw+A4p4#nêY¿òD
+H­¶æ­<æü"ó(
íßÚôµåÚùµ|®X.ðŽ‚'‚m˜ÐÔöº`õeBèõ{]B)ýy»ãÙ/l£·`lA·?†õ
+DÏd|þáäWÊäƯzŒú±ÜâŠÜ…Íâˆ%ü}5ĸ«Z±ò«“±qsû`ñÅwL2œDz2©ZDgwÿlŸ®BÒEÞE¿Ÿž^pêÊ›?±Ò
³wÝþ³Kú_|Q…"jOàjË;ನuÙ)%,æmó‰‡óñi¤ÓùNÖz«C¼„ËFÿ„ç¬F]úvȃOÖ ó`f¾`Hg8Ú豞ôUÅ$JÆ^¢JÁóg7Ë3‰6ŠŽâ¿NŽdð¿×ˆë 4l“[ù ì6ùr5ì.¡d&aYsð¡sHC¡THû~î“×ÒÄäÖ1;Ö‘Wa‚ç`§«O÷î³O<Ãî,í‚}¸çz8µ½Ë8*½íb(ša5ÿL»Yÿø»£äõ³;j‡ˆè!ˆîÄèZ¦ksY†F	ÈÈ©Ô–LÝçä¦ÙÁ¬fŠNÑfÂSNµôhbóì¼ÏV>Yê¤> 2ê`+â×EgÒû¦I¹ÜI¶÷¹™mQR¯˜éÐÝLTÐŒ¥LyáÆï
(=8§Ÿ,§š`vPn@º8U^w‰×‹½‰&9‹é« .1^Z2~þ•ØÅþ0üØ‚/¨dk'Q1gS-Mg
+®-ù£?›4 ôà~5k~ÿÐ,¹ÎÝ—¯HÂÚ@H~
+Ú*¦xŠ³£_?€‰8?hωÓ&)Š-¿ÎÀ¦F|°¦R|Å]¥ÒàIeÁÑ/ÈÑDX/<t*›‡Õ4Žý)Z–_)rþ¬j£ë•
<a¿z"a€šz‹×#ìöÞènsøyªøºÈ¬¯{	oË¢;ÜÒ¬
Üd… ý\´¨í×èx§×Îlx±ZªHê?|œ ª+ß Ø©+Hs%ο
+ÿR9lÞW9âûÞ^©Y@U†ZƒN./Nô>§!&ß`û9̪ƒÒnª[õÒ¸¦)ÙLúÝÁÝM0;(7 ]¤/µDtžDwbt-S»·¢C#Šd3E'æ3a§'Ôz41÷v^é+k–ƒ“kƃ¥¾„Aý0ÝÛÔÐëÐøŒ1ÈM¾”…%c…/Q%î÷½•ë—ÊEòPvò9”vÞ2¾¢·x
+5©p‰5ë“pYT´âšœs¸Bë#ñBýV# };dÏ©k÷Û-ÖyÛÇÖ¶·ó0öìµ&¬o…¬ÑÁ…O/8ueÑÖiô¼!tô³ !šð²ÀÓHÿ♃þrƒ¥ercÙ=F†}‚Ö8‡„Ÿ7‡u¢±Ñy"$mzÔüm‰òÔŒ‹>W,xGHÏ9Ïܼ9¿â#C°AÎk¸=j~¸ÊyjFË¥…<­$!ûŸö!ð+ŸP°“2éÚ»õV¹ÌŽVæîÌ©™´¼ïÆkºjhû„h|F–
+d¨_Jy(;ƒy’J;…o‡_QÕ<àîÎà¨Γ• R™Ô—¬s—¾Ýj=–õ;/ú›PU›áPlÚ›$·œgÑŽñ)'È™'zÈÝžá„0ó’f¾Ñ=¾@M=ËåŸv{ot7·É“niÉVˆn2Ìð.Z	Tø‘@Ê‘4éÊçšE˜Ñg`æ™dæ",™:ÃÍäGÄlì~lA™T2»¦–†?”»?ñhÒgŽàÅÙì+`Õì¡p`”Hˆ«zÇ°ï›i3­›·µ3ma-/ò¿Ó ¯Æ%çÆ{‹ºÐ­8vquí•]u›"•‚3<…˜E>->1(-ùC1W쎉3+!ÎZ|bPZï†b®Åf&VBú—ØÃÕÔ—¸¾˜™yÑçP´øÄ ´ÃÄA—ÌL¬„sÂ2s„ïèr
­C‘JÓ‘ö4i½Gpìâ…dÂ=dàO‡þB÷I3êÇ7ºê+D7fx-Š*|²“ϲI%“̹‚Í¡¦äŒÅVÀ·Å_àÀ5
Kô“™}Ã\5?\e²5#ëÜÌØ+ÒfG+swfÚÂZ^ùc»]
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc18.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+ïû·q•¯Ç×ðÜIR­K CÙ’ïû·q•¯Ç×ðÜIR­K CÙ’Ãësâ7C“³ý¥’¤G–@†¯9,Ä“¢ìTd
yÛöêÝ`Åv«›ËæÙn†;{çW9UŽ1€Crt0Q¨û)ü¬‹p#z RšàX •;YŨÈò«ñɧÀ—ìK·Û"JÌjoê.â£dìàÔ5Ù+‹Ñ¯ÜvöÓ®rªb"†äÄpfÞI¾±!#r;ø¬)=a_vè`¢MëRåE.àFô]¤)Ý›<~ý"’Þש\ë¿}çðO°@7v²—M4ùKÿS3Å–_»€'8ŠZÄ%­"½ps«D”…ÔÞ>É\Ù[ÈÅݵj¯œPóå{é9€	eŽýö³=V¿C¥"ìñ»AäIÄ:DÕ¹ð20+&K­¯ÈG•àÌ¡’aBFävíERz¾ìz{Ð蕶8?¿èZg~ÍÀYšË¤×Š\ÝŒõºUR§";îë^]¬Ê”N!¾š‹5+*xüçD9¡³O¸ËcúÓýžáÐ	iHƒîQoêf(Ú$}€nìy3šhï–ã¦'f—1’{Ùìœ]И3ß±®í%N£¾kNp	´•JGD0gà8QªÛßÎce–Mé{G£ášæKˆ5µ¡|¸¯¶—§wÔC	°?D‚f«dæä ܇4
Ñ% û× ö2Ïr=Êçñ{zÊ[L¦µYõ‚Át@gJDz¢è¬c†WDÅÿk‚Õ’•tˆ"·CíÔ÷Âë(›^œÀ©ÞTËû%oýd`VL–'G6C4Ž€§õ¨‘›fûdîHMT7Ý…_9Âþ„ŒÕìÇŠ¤ô™aÅØ&2.¬m9S|	¥•'ïÔÚ¸Wô6ö½m7qp~cÍ2´ÎüÍAÌ›.ªà¬71`y”\n‡²)‹U³	¸,§8÷iª¤ShfXútÞHðîj¨¼Ié}ÁDvÁ˼ ºE‰5œBa),j«vº)¹çmµU|Îï*	oÒøVTðåÓˆr_{žm‹Æé»ç!ó­ãp|O¥¯§×?&Éø>³ß½'ÒÁ¢ÞÉÌP©=H0FcG?ÜRE›a‰~‘ŠúÜÅòf)ÐÃ1ÛQNÌ3bæk´gÉîÙ x‰«nêð9ö¯'Å%º½-f£AÇJœ[Ö
VPŠ}jݺê-ìŒ.	EÉaÖ:œàu7”Žˆ`ÎÝpŽ-m	OÕ¢ÇHAÜ%+îž©‚¢=Iþ«£ÆÊ1š*ÏöŽ[ß)MÆþ>F:íÓxb½®»Ñ–
j.w_ømCq3S>mº»Ø˜/ó±
+#ªxs­l}~ˆ4ÌKþÈÑÕ@¥h¿ý†ÉùŒ›œ˜‡íî3+Ã-J]ë³@ñdƒä:z$‰Óÿöô¥¦\ÂÕ^£Tæ3v$Ió¼/f‰¶˜Qw²÷0Ÿè€Î”“yYÍfM/ â0çéC¡Òcß³:€_E,Æ®ˆ—ãÖ·97è
Dsª×q`;'P4&Åþk¥|ÈNá†Çµó™ËP+¼%O¡¨‹ëJi<‚dÇÛ`lÏâêˆÈ2ØÞç ÈÀ¬˜1NŽl†h1—¹U¡kOÁ’Ç>+MH_Þ“S*÷M?+ÌëÈÁ(š¨8ò÷ä[bâøü<7UšlÛÙqªn§¾r™á·Å“	Uõ/—\ Ïç6&ÂõkŒÁ¤Õl­Ld\EÚr¦øW7Nõ©m®B·Ó-ÐuµqÎe㈕ê´<õlñgÚnâàüƇdu>å—F‰°¹<µ”*/U}Xw6‡‚…+\IÝEnbÀò5¸.ÜÙ|5ô¾óŽ
+ï™'0m¹û÷N'yRª{mXSp
+óÒIU¦üÜÎ#ž¼Å„"§¸ò
+Œ4ÐÌ
+°<éè¡ýÁÔMe’ÏúŸ?7½Á©F/v`!ˆ†à.²Œ#
ˆìŸ‹e,@iŠj%„ÂRXÔg(úðƒ‡¾zÓ#w)‰rÏFKìiRoÓÚwªøÃTÞ¹í¤ü[ÇÀ
‡v±Ón2`8¬¨ý×»
ä¾ö!Ú‘ÏkÓB×WŒBÊ3N*hˆ¦Úï(
+ÐûGÛàøžWCS³~Lí|{¼lnuWY€³ú,áL¯®¥é£gN$¹=6ŸY¡… Oz0LœùU,’ñH©}QÝ(ëo9I¢`Œ=ÆŽ~¥,¤Š+Â6ü?	wŠ·ÑbûTØÃyo}/¿æ›é:¥—ùÌR½›b«¢œ…fÄÁælc•ËMG+ù¡é¼Æ¿V*ÑÖuÎÁ¯@>ðK4ÜÉýÅ*a[ x°â¹]æü@orñCN—JigZÌ[þ‚“”%¶
+ô?å®°ª¬/Ø<×ü$±0¬ 	úÔ§iÉZÅ\Š^á‡Ý5¦=Wµ€hN|QS±t8%Ý$ên5
À§à -JÃI°rã=žéYS ‹¡ä9²ZÚž·Y“‚¥JVÁ!Oî¡°«‡1pŽcLË÷çáb–‹Yz’áK[‘‰b)Tƒñ¶£R¶%ÞôØFy¾`.º!õzÀš‘á|Œ"tÇ»ðÄgA0kujVré·Kõ„ò¢i,asÕù¿1Ô\î¾íÚ†âf¦ÁwPÊ­¥ÉAy:öÏ°£-†‚®ƒ|Úi6k­-^ûFIðæGØ(“!ÞGþꉣ]ä»Æº$úü
2h…–á¿·€W&Ð4cËK|§ÇBAQöå-“íñçï+%(-ÇÁfV›Zê8ž„ÑòìôdAjŠFBÈ”ºË{€ÿÈÕtôH»ãñõ{A|
+PÌ%¨½¢O› (gWQ¸™·¼[¨(ÑfìH’ûe^̸ªè"œØ
/¾åÙÛ&‡^q-¢îyó`2#Í5;ò²‡àŠšÓ{Ö4·Âÿ„O,~±kÌš^@Ù:`Óφ_¹Æ£{t¾#aé1L•§?Zëkè[7Ä,ŠX‘"A
3Û±2srn͈æe£&SÔ¢ôAî: ½%íYQtI³âÀvN hL—áÖWøœ'ߦHU±ãág¿¼K¨„ú³­ßþM“wû/‹ VeJ'ž_MË”þhÀŠº$Ïw¦¹u3mHÒxÈ›«À؃ÙÉ
d­=ƒ³hg\Ä[‘Ñt‚-ν?¡Ó@E-bœØÐ8N(÷ü³‚ú’@HŠ¼Gð{×b83oª_ÖžŸ9“|Vš¾¡;Ä?ðIoåÚ.ûÑ°ýx©:¦Tóš~V…Ë8Ÿ=P)MpÕã%f5¹uqß2vpj”âùóÕ¶ÄÙíåxnª)Ø«¯âIbÇQv*2ˆ²ã{uà0ì;ÛÜS.aä/ß*
+s—;ª÷^™33¨™q€ýú¯Þi¿á×@¡¸]ƒÓlL™÷ÖŸU<·Ø6
+ðCêòFËN
+LÍøw—›ï˜G˜È¸Š©äQí$®nœ›wOÚA¨cÉ#†øç<1ÐWÓ„s»Z½êwâ<ÊÛ
7Éuxkˆ+(E°5à]u˜vFŠ¬ê÷ØÿÎ8>©ÜÙÝå‘Èê|×#H¿­‘n)¬Ã¾ƒÊ?ÆE43Œ,}:o$xw5T^ªú°îÛÈ;]šÒý¸Ô¤>gùŠ¹i|lV¸’§>ŠÜÄùjm\¥ƒè®fÃUpÎV•–0²J.…7¯øjõaûÃ/N`Úo*ëóœ@Ý„ôTÆÃ3ó2w$
+¨*&Nò¤Iö$Ú°¦àû¹’ªQɵEÕƒæ1ó*lï²¹°™ÑsÃå¥F!
+e—'4DSmùh
+^67´¥¢@×É}þ&ÙWÜú½…}xÏÍ_=矵šÊ9ƒé#R~£í`
+ˆÍ;Öç7À0±~ngŸOŒ^ìÀB
Ý\yF‘•ÐîÚ#™;0žDCpYFŸˆ
Å#ÊX€Ò	ÔJ™¤°,µâ>”z_÷Gù¸҄óõ'Î.Péýaô»FîRä6ƒŒ!Õç˜h´Ô¶g¼ÿDÄuZ–ÅÒ¤Þ»©îI훨$¡oÇyõr£1q|~•¤M6ãâ¶UUå¶0“(ì»Ü>d'ÀþºA2ïÍã06équDdlpEMç³kÕañB©?ƒÖ»„Ÿ¾ú–&ÄÝ‘-û»t£•b³®>„(‰fœTÐ
Q©ÃP½\U‰t‡N±lˆ™_üâãÍ/뎫>Ýí!®†¦{ü˜ÇøöuOHBæyvz2®5E#„!d(eØÜꮲ{éXߘCAWÏÇžo­uÊ‹ß 
+rÓcŽ][ÎœHozl#²_0]žô=`´5+9úÕ«ôBƒyQº¾·äò˜%ïªX9ÿOú¢§PËÞr’YwÞXÛÍ–8G¿&ëõý€þ1KËÀz‘üWXU	V™lå~/þÍà”S¥Ô@4'>¦§€î	s6¿Ä먭›òÞú^cÑ+ì¾£<XqÒ s±~ ¹ÏtW3ï…¤8g+ÄKY%Ì• àBz*cï—÷µTŸ$ÑØÆ7‹šŽVï_Ïe‘c¬ãd“ Mið\jR½ò„EÒº>T¿±êŸC€|ý–h¥ç»D›¬X”p ´L;#…EVu—T¶@ð}ÙoºÑþå€ Þx¯uy#ïË'&è|µÅÃùLäÿ†œ3”Òδ…¶á;85Jq1í¦;DYÿ³´pv“ã'õ~×A}I $E^­x³åHÈïB‘x†ª¹ümóæXð<Ú4`E]éµSÒ´—
+¸$	Ï×4Ƚ.b£Ææ:A˜gБ¼ß§jQz®wÐœø¢¦:S$¤Öÿþ½Ñ^«TB}×ØᨙèpJ§HÉÜj SÝ@v„_ß,¶iP·Ö?ÒZ”›’}äÛz!ϲ¦]_Õryµo,ãèK­Ñûôð@–«ë´©$!s²;=W”¬ŸBž2íO¹Ø±Ž´eËáP9ç¿G Á_}KbàƘ‹óÓ:ßÄ1.¤Ê:†Í'Ö6D¡~qÿ‡è™²ô9ß–¶>?ÄR¨ÿq[¤]Ž®ùèÿú¶´"2‚6qJ=¡õ­ŒòaÀ\iB÷ôžäýL4Zj[½‰^ñ"b´-)?ßø0Dè“ký•Î‚`ÖÆÄhwmŸÂ“O"¯8…¢#ÁDêÔ¬äÏs–÷6ùYÒXÂæ·ï/•ZÜQ åê°â¥n}cb4µ¸ÁaÇ©ÙÌQŸî"Œ™ƒÄ-n¦üuX‹±‡qÜ7° ‰GW‚òtñƒ}[ZAOrð&-5£ÐÊ/ö1Z˜‰ø©ÒlÖGZ¼ëþ(Œ’ýÑŽ­PReCèk"aÞ?¶ñÍtÂ;B¡ŽáÉ[º(Õk‘iÔ¹ÿt«Øæ‡ózx ±KÛûHéådÐ1ßcs®L½hƧRkñÐæ/Û*!°ålþ±T‹–øS“„‚"¢ñ×Z8;Çÿdù!‰Æ<CUÒ~¸…÷s,xmÓ"Ã
+V,J8PZ&“ŸÌ¬+´<Ù´²ŸùëÈŒt>Ôìïò&Ép!=¿ùÅõÈ‚Ô	Œ*„ÿ2ÇP¨ºx.5)ÐyB¬i]5i‹öã6·èõkÛÿ÷Ú’<‡ˆLJáG4¼Â³CK˜&eö‚ø* …JMg4Yž+]PÎyOe¿ÙRº‘.fôÕ‰\®¢m/se¶MP¿ÌÅ9ëʼ…AYÚ^æÊqš c…—=rˉemIÍD&%þ­^aׯ«L¼‚²©¼Ñ‰â)]Æ3zä‹Ê.âZYÁòûÀdF‡:jvùyñí(T]<”šÎh²!Vº Ý	)»ö±hs™ãžXü6Ö*2òžÊc¯¤i?\Ìõ·<¸…)¼€¯tÀ»ƒ¾o‘[öè:ajÒñ:ÛlsÍ÷=<Ö«ãóFÂÏb˜7S~´,ËÖͶn•X©9x
˜”ߎhe™{†–-LÊ
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc20.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+˜¹ðocÜp–E$»äÆyy¥®˜¹ðocÜp–E$»äÆyy¥®-oý
+ÞÆ¥à1ŠHk,Õ‘òòWAµÖ
±¥
+y§ÏlÐ:1W‹‹òïZÞç¡‘WÝb	ÖX·?ùù®‚ÂgÎò‹­ôL´mNSù€€,w±Wò=SƒØ½tb®ùÃïê4.MÅÆüb†hrr\m´¡Ó(_?0®§Ä=±°s~ïïA,#-0\6r×RW
+¦—¸––ä·™Î."ù<Gõ˜uÚœ¦ïXwÞ'îš:×7cÝQaŠB)dd³öî4<þ®(ùz¦­gèÄAï›vÆÄ9‘Í.%
+0^‰Üþ ‡ooJ5ÃÉ6 h$\š—‘åÄÐää¸Ú[©93O"€êÔÁ·Òõtu_»P¾~`AS•$z}æüÃÂ2íæKUÑf#a^Äk:ºº'œX0FZ`¸l䳤®2Q3m11ÕsÀ‰¶_Ûj8Ã2ë¯G׫HHpÝ/\DïxŽ÷-ê©%QÃ::,°·8¬ApŒ~ÊþahÎ3µCC‰î¡NÁ)t³nƧ¢Â	„RÈÈ{ñšWQK®JroPâ†y`”±±Þ_ÁþhxáAPïôQ6GÎÍ•‚,,Ã+YG˜}Ž"V3„ÇscuÛqDUUf…ì‘•r?‡\J`¼¥á@ÞÞ”jt(ewPäZ–döù+÷¤Õ§§1Ä› l@ÐH¸)3?ו"½ÕÕm©™i/³NdY¥zó£ƒÆ{¬¬È¶OrfžDɵŸs¹÷,'':è.ö‚cñuBÁ¹”ð»È¯ê^^ŸFê¾k aüÀ‚¦7HôþúÑå››dr›¥ŸÆ^Ö¡
ÐEì5#ââ¼ÊÇÑ–ª¿:Ì'F¼•ÖtiiN%_hf¯ÐYÊû6‡˜.Àà²ë‹°`Œ´ÀmØÕ{UAd(¢fÚbb·æ(Ù|±¯Þ	Ã@“´‚Hq¾«Ôp›dË,CŽ³K৶»qÈÒ¬ëòŽø˜WééE	^¸ˆ>Ãð,óZÉOJ¢›ttX}ƦHQ öðqeíô\F]

ýÓspE‚àü‰áÂÐ$fw
+††<ëɵ‡fúU‘T•¥Ÿp“Ìÿÿª’Á_œŸRè{Ü‘SY™¤öÿœx¯™ð1}"ñbôôSQ)®¢–A”äÞ< Ùò>À5¡¾±R“.÷âL6œ5I($óŸáÐðß‚ Ãõ¢lŽ‡7XX›VX õ°á¦…4)ª:‘Óß!!>ø²Ž-úD¬f“æÆê«âˆªªÌ*7Ýÿn'ªºe£âQ½NÓÓi¹Å?7ä~¸”(ÀeW߀&¡¡5Ô]†Çáp¾HXV :ìÉdàØØzèPÊî Õ´1ÈñïV<óU·SSb•pé:ë϶²í¸gªr‡å±q**Ç;+@Ø€½mRf~³07Dg··ÚO³ùóÝïÞ–±"ð;—‹! ¡ÎÎá/þÒ^{œÈ²Wôû[‘öEEž–×1šÂÁ±ßà
u0<<( qžäÌ!,ˆ:w#æoóXNNtÍé'ÉNOŽæÿ’2]yž77Ñc\ñÆÿê„Ÿo5ýkC&ɼ¼#ŒÄHéÉ‚C£¸O6UÂÅņ"ÉaÖ]ÂåQnõáé¿×++2ÈQØ&X­†›Å!øÕÑZÿ[RR—fä+W#‘¼±_½ŠÅjFÙÙe‰|·ÛRs@—`ÁÉ_™1ÓŽ€  À'“¿1Ict…NŒ™e7±èÒÒœJÁLƒ’üšÜAŒ§ì.««9ä¾ÐÌC½²‰ël=-\Ýy  Ë&i<FÒÑ7«V	ç‹9¿YYn¥}ÀuÚ­·öª‚ÈPYÌ©ÄÄsÑåyõpò¹«k†<ÇìëO(o½½ÖP¯øC¡›€;u866$Èz,§Îf
M¤€cýþOO>'âa<Kµà+È‹X†{–==ÝS¿§dS(³<[^Î|=ŸPDDxý
+qkâ¹EËùí-®ÏÏŠ’Èïnî¿™»oD4V;JÁ¶¶/¼¼>m
|›ýXû´ž”Y+èè°ú$‡øû„rmñ«%‚½í‘‘T‘Q¢]ñýâÊ>Çõ¸Œºç»	è`Í>÷!’\{ãN®h|ccBæàŠÝ
+åß™½HÌîx~Yz²iãÓ¯ø;óÚ
+Òhh»ÖËwÌéª?¨7W#à;…ããI9S6‡l¯ïvO>rs˜ößCššì—Ÿ¾%#¤Íö¥?¦²/$*Uñã&N LÇË*Õ©ã–”2Γ~~TM%ðC/ýbÁSE,úDÿÄõõ¦¢½I³*’Ç5˜iÞÿŒŒRAY1‚5Õ¡x]¯"ù|jþþ_aÊø©4íVÓ}ËêBjy¬‡‡úÏ.¤;\óÙ˜l%j’PHû ç—T>3ßØèú`N)F¬=uu­Ž#ß½ý£]›÷YØn2°°+¬»fMøÌz[G‡Ï%¤ŠôÉÉŽ°@÷}ßQ>hRIt?»£BB|í–	°ò¼WâgþmÏ)_e;;ÙCyZéˆEÌ*;Ñ‘ÉKÙ
II….ḪìmëCZ­”µr]=Ë00 €Tn§ãÜNIiÊ
+[Ù¢gœ»»ÒoÌ×Wæ³-OµºœýqèZÂÂwÁ—~nÕü&m5PÊ<®£L__jµǞГEké µùŠ&&Ϻ“ß"àa°¬@tÅÈÝ­­=ô"¨cÚMƒgLÀ:P~™,ÔÔ˜ZÍ ‰Á]·ubÿìxûªs¦¦Ä7UyÄ2Ôs¾ýi†ˆÃíNµßßa™àÏt˃qyÇmÎIä×âTT“vxv„ÎìXÀ¨Á›$--6ØV€­g=Ú¤Ìü{`nˆÎss©žÎ9ö¨r;ÔZ¹_Ûxl
+
+0{ïû§Ã¡1Dýv3B]_þßãV¢¬Â7£4k3°T¹™øø[q^á¹¼ö%y®õë¶6?ñŠŠ”ç¼Ó•#Q	8°Ï
 Û7óó¢²!1³b0)(™Ÿ£Ýê`xxP]¹ˆì¶
S/ôé	:‡f¦õóâ!Õ…BX
tîFÑÞû°œœè‡z˜%€-;¨sž«bjÈvååM)ÏN(œžÑã9dºò.!nn¿ÆW÷ØŠóý
“¯!*äÊçh¸ÿ2‘ãÉ#ÞjçÖ†LeeF F”Œªÿ®ü¢ò¼¨Iã«•Ï›=†>[mžlª™——D
)?žRlZNÍ(º×¼}Øîî´ê±º™×'2¢Ü=÷ßÏc³VVd{A¿ö´!îÒJxÓdÙ‡u//Á#¢­L°G+—Bí·¿´ã¶"¤¤3Ì:¼µ(r-K2{ò›õRäÝÝ–bÕV®8F?e¾4g	—ÔŒ¯¯ÊM¥¦«W%9¹(qC²0JÖÖo¡øs«¤æ€3ÀŸ¾/b»]]N`Ê[¡‰ã5ïûÙ­åÛ$$8à;cb’Æèœ/Ên͹¹%”£Ú’—©‹@uŽjîÕiôÀÀ€:Ÿ˜.9å)¥‚SÅ\KKrÕŽµowM啿াE!š22×{a½…†gyËØz&Z¸'§ò@@‹ùuƒ	¨ìc~1C499.¸LÒxŒ¹¿n8K¬Órc²²ÜWÔkˆ‰ÖܲHÝé6h–¥ËËyùú
+ê'©GsñI ²…O••æ¿b$úïHÊA¯ß\©¤a‰ììC×ò÷àùoKÖx“ÅËžPÞgg±þOKå–M
+aîÖápˆ´P Cíþ†8_$,+vê2pllH=8úûé[Yø\½U9ÍüÖ¶í“,ôXþSÌšUÆçážž|•àñ7U]¼Œßq¦Ð'ççºÒN<ÙÂx–wÝV°ö1zz§¦Ö…)Çõq&N”ª÷cS$ȦP{x¶¼øz.# ˆˆðçûêÔÍÉ3}¤Æ*ÄÜÁ8ÇfññUIâ>ÖÙoŠ‹ï ÇZAƒƒ	$Œ[ÎÓ¶diVûyG|L¥Èúú¬Š9ÃÜÁc/kÞˆh¬v”Ÿqq^e¡43Ùh¢eóHÍL`pYûËe|Úø+ç°ëu!5²VÍÍ}éýÅ*—Hált}0'š#V´´ØGH'&íëäÚÿKJgÇ??*¨Ðª×IŽíÉ”LºoñƒFF?¢=YºÿçÙ‰|“÷mi44Ók§Í6Ùù;©9·L{á¯MMvÅÍÀ‡|óB9¸öÛœAÐøÆÆ„*Št0èõžI.³ÿ'W4>¿¿!„ÑÝ	2§×£/g>…Á(""<ðIdù7ÈwÑÂÓ¹"+“%î[[™^ü²ô8yÒÛ»Cívû©¹ÐÐk±d=±Ýg3ˆ¨R@¿ð©©Î‹î&…ÏI~Mn®FÝvÛÛ’rº#iæÉ•Û+ŠýË’Ñ¢¢7ܦl,ØCÃìž|äæ-ñ£†))Å3>Õã)· Å0îê¡Â–çG@PP`#aJFU‡ñW~Qy^HTªÿÛˆš‘O)6-'è]å^°lwwZu=Lœ@˜“‹T·OÛ15d;üü¨š¥õlE÷ðˆÇÙžŽreý……
4Jý†^çÄŸ¦ŠXéˆã•÷÷QYÒDv[ˆ§™zúŠÍ3SŽŽô÷g’{T9“j-Ò¡ã<6ÿ+‹QVa•ß»—…X*ÒÂ||£¶¤‚²bj·_ðºCDïø'Ôáá¾Â<;Bgv	±ƒ€,`Tîؘl‰íOhǬ»ú‹É„ÔòEéƒT¿m¨Ï½&`Œ(?ƒjjL-þ\Uv¸û¯-ØJÔ9 ë@få¥sט©Ô]Nð‚¶t-aaµîÓ3¨|f=£­ÍéÀœRŒEzêêGKŠXy	^¥q½…¸éš¡¼““â¯F£gç[2º+ó²­>&Üd}}VEÞ—â4Q¼÷ƒ$è&…08¢óëkÌší…ô¶Žƒ'JU
+	õóujèê—°Rcbnîí3öö¤ª}€óú£¢|.Ф’è~k[„„øÇ„Äpö•À¤ ^Fá¶Shýý]i1}ù$e®ÙÎá.ÚƒR¾Êvv¯†©«üK¨¾wkþ8DZ
+(ò´Ï
Š…Tv¿?–¯’’\j»DÊknŒY$àú4€KÜëë²òßmIÅÚˆ ´G5wäºz‹``@GÔ¹Àµ¨€üÄÑpS_¬žM峨ÜSÛ¥œ’Ò‰¶¯YÎ%kk¹Þ0e£ÞÊÿ”ù‚ó‹âØüãp…³®Ñ{Zžwi%<ç2âÍ´™™îŸ
+^Ô9˜«³yÉô)rààK13üÜ·åLÚj '‰xA[:˜¾¾Ôw«E,²Š/ܶбÌ\úMÞ^ÇÇqÙ“!½;ŠÖÏ@0*wï	LLƒ6†*ѸTéÐ0€F‘aÏ55&˜i";£DÝÂ=}E€è—§GGzõñ›Ë¦+¾Äá
ÓÅÌ,ia>>ß[DMÆ©šΘt
+ ü/X6µµ-´Üô6¬õxÈDíâO„G9¼ðÌ̈‡]ŸºsêÄã›EðëIæQQ•näÿšÕìwuÞaKý­ ((0Àª2ò•dµæaçÒ
›Çœw££Â/2‹ÖབྷDT) Ñx±ÚÚg݃è‹âò“Ú’Õ&³þÙ¨¨;ìE:ŽtôOª×ñ¥ÑÑžBðìÅ$þ6:°MŸ+HZZl­hU優GøêJ&]¹ö‰ÏŽ##ɬG:Îz©U…åöÀÜ
ææO!4¤üBU­|u% Ò{ÊéGŸŸêrñMävµ´o¾«ðØ`ËH‹kpÐÅ"*šæ<Ömm½ÎöÃëS›_bþˆçìf„º¾á£nzVô<d"øq©B­’^xffD
Û¬YE™n[hÖf.}¨o/íí¶âCæ\*úh‡@#
+ƾ‹é””L¼ßoeñJòA÷Ëql~ÿ		8€/j
+’LۂײïÊzš9pp«–5Ó"e»7F¢p}ƒ@«nûûYy­jÒ`ÔT@~bæ8§¡VO¨‚‚ü×Bb8{Ä`RP/#þ[§4ÉÀðð ºÚÛÈ~«TŒ_µ»"-‰‰o
Åq¦^õÏtÌQ÷û÷´5tuÅX)¿„17wø—{{RUÙB·„°èÁŒ¿¡ë}%%ÍAûGëÓ4v†„¨·»\\h½ô-JZvMæ!KÄÔ>ì×ךRl”º5‘–·ào›Ú*®®?üƒœP%!¿ÛrÈiù\BÜÜc‘% JBc«ä8Ò︄¥¥Æ?®ó­	ûç;CBTÕ‰Ó..4Ð6J]”„ÆKÕp¹ÃmWW‘~mãd?Û*F¡ÔÓ±˜ÊÊŒ
+õZ”:´ì,šÑB–•µ|ų³)¤@Œ™5I&ãAåYùe=M’88ÛKØ5i0j* ?1sÝÞ+©TAA~å7=ƒ+z2|¶Ú!ØI/<33"ˆ¯„s.}4Í Ÿc_ËúJJ‡&R~!¤Ø>´œ‡Pi³eú­ÁÁuÉ‚ëŽ$Ë»8hìMsk¸¸Ðg
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc22.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+Y³ƒ°¶ô½E(‰{CýVÚæ‘õY³ƒ°¶ô½E(‰{CýVÚæ‘õ²{}qõ&gŠP8:ö†ç¬©Ñ4?÷ëȘÍÇ5ÚÏx$†'Åús7.®yö6úâ÷LÎ	 ptñÓEO¿h~ó EµJT_sLˆl—iŠR.•YrïË-‡“j©ƒðHN—4éæn\A’>®7%öyÆØT˜S|ÔÉ¿<ˆFÐñòñléÙó˜]à<èÿ"»ŠžcÐüû«BïYo‹<Wuüµõ„aFÜD…Êm@Šw”¨¾æ˜
Ø3Ò	¤\&7²äÃ9ô$ò­[Ý%ĺÏrç¡píTþRù‹Z;ÔOý"œ3hÏÑܸ‚Ò´Ù£ðÇò^ÕŒ«up•™:¢ý9|AnJñò(‘­¨-¦øµcx
Œ½ÿ`ÏÂÞüá•Ô…´¤»ƒör5¢ë–,
+ùÿØϯû-$ºÝxÍãDk	!ƽåë L[>¢a’ÁñИ–_û §tK„òÞx®êåw÷ÂŒ¥ˆ‰Ú7@húÅëÂùþênqóRñ“Ké€	î5MaÑ-­f¹U¸LnyÕ›Ùºm…ûørlh2±ï¤iE´ŸÏ
+í2rõH<ùG¶§J•iƒäÓ_àǨá¤ïkÁvøŠ
Tâb‰àžŸ¢¶Nû5´&vµž6ç=D%fЃ¿¥mR½7–Àü¦#sÏ!Í8g%-ÕeCwˆå¹u¯[ý“ù¼·Kêà7/tY&çàÆ,ë±	€DùŸÂ‘£ÊyÌ’C·rø‚Ü”ÿùP?GMZQíwÆðgã+Kl"êízoQÓL–4þ*üöÀƒ™¡å
+ß7µuUkñäjYË1X™0SþÌŠð?iÜv`²<ƒ-+Éáïã­ƒCëZ>Hi§ð‡ÛˆÖB‘g×˶P.3õIƒ
A»yš Ë+D˜w}F>]˜¶þ2|YÂ9Ÿÿ½-1¾ë@Sè<+5N„êo䇃v VMÌè1¦IyÉ–›y¡ðAÉ×îó*™W
.©8ϦÉèMáËgîQÚø×È8Í$n€Ðé0—Ë™ïáÉÜâû¤ÿ;–Ï}Ý´f#*Ž±óhÔ§\­~!:Ájš¿Z4GÌo$ªm˜Üò·+0D¡BÚ,ìÑ[Er_éέºÅ¯iÚëíäØÐdÃUÒ,Š4u#ƒÇöÚY§]÷e•LcJH©owb¯Å™…2dä÷xïŽqS”7ÒÕ»¾Ý“MßUÃ=Wt Î̼+[®øC‹I«ÅÄ6ÖŸìí	¨ÙÄÝ!#=Yq:œëj4,o]¿î»«œìT<X~¤'àzñûÁuLìw!lÓzˆJ8̽cWÚ2 O¯öüZädœ)ûfWC@M¹±À£Õ¤gn1åQFæƒB‡pÎJZ·Ê†î
×ýÔí+Bû£«^mµ	§á`ôœ"oêC¶ç;ïes
+–>ÉÝn^,è²LÓ6YÀ¸(R [#²ž“ö¨Ý&Ý‘Xˈï#2™?[‰ò…9†s$„"Û{Éæ5ª.Dt¤_ßœâÑäí¥5ãï ~Žš´¢Çî‘ý4
+ÎÛ½^šƒü;¦†=¿¼­ûÇ'Ò_.V–ØDÉÇôÞ¢»˜1há=Tå>ñ,%hòâÚz±ö¾2…J+kŽ$`Ù/_×£nw.êªÖ6ÿÕÔ²‹b°(Ĩ¬ïaà°Ó2ö#ËM¼(‚hmx!Ý/`4"¦á…	ý~Ò¥ìÀy2xZVßvÓ·’–´¸VÎ,ñ»:Ï.Á¼L*ÃÛG†Ë´|ÒSý«
±$„?γ‹šhÄ«0?§ÁÕúOtÐNLr^ÙÔ"~q \f÷>’‚kò)]‹Vˆ-îúŒ|(ßÖAʦ_ªw{4&È«Þ÷à‰º-qád<ø²™r#ãgZbaË€¦ÍxãžòQÒÈëÜZ?jz!_Ÿ7f¼\VjœÉÞÕ"ì]¬š…ÍbQ’òQåé,£=ÍhV
+e@×Ùx›¸·ˆcz1*+ò_8,ý‚³ÁûT/
+®\Oph™¨BéÌ?@ǧ¯Hæ/l÷øÀºÞ…ƒQ0.Í
+šß‹ÎÁ¢©í³*p‡Úâ³?˜9'M÷—GÜÙêTik0árHܽÏ`3‹/Ãߥ>ÙëUãv1ƒož¸;sŽÎßV’Þ}$½l vú§uÌ:FTûеS¸>Gü2Bt£…ÅzÎUéDWçY¨(ûÃ&ÔXŸ:$ŸÔ)0™c´hŽ…ÞHIÚ-¥ùsV`c—dŸÄŠÞñ@’Ã3
+'{iÇ•ˆ_„©XÅ¿>8¶Šä¾Ï=(Gi—Ñìî1¬¹{ªùÅŒÀ×ÖÎ]øbCÒ©.ËÇÕ­½Èþ›ª¹X	hêF(“a*ž}3Æøàâ·Âô>0 ¹fñ©²Sº2óÊ7˜Æ”OÞîÄC—/d¨1ãÆàwr°Ú4’™q5†‘ÈÕó=ðÃâ¦5n¹6·ka§;š£ª›‘fpF7_ãr0+Ì(œñá|¹;nz®è@6'…,eV¶A톒K—•l#kð7Â48iMJ?:®{]H­™±#ÅÇ4M,¯•§BFz²ât%ËÔhèFw¤À^‘ê½._=9O´®ÃÑEXÞºcÁkK%Å&¨x°üUNÝôÿëŸZë]
+Õ5xö`í:!eË¿¨åzj,8ê˜Å îBØ»ô
”p…g6Æ®©d@u‹i(sÔýÿ“脉Æš`H³õµžCñå´ÕÈ%RëÌ®†€šo[·ÇðrU!Û˜ÃЋ³ý@}̵™‡ÊBUÎÜb'×¢ŒÑ„à”´s‰Á³}_Ò‘#±1”3˜šýú×I%S÷Û‹FçµÇV"„ë[K¼ÚwSß Àõ%D¾D¯àÖ—Vc •ÇQ®‰ú&ï´±ÞɆqÓvÃÊæ1|§Ü¼XÍy˜»‡zÁª'e~θaôä!ê‚+c	Nl²m&P¤@¶,>Fy!;ñM§L5¼ÛÒCž0·[bÆF+úW6¹§?°‹þ$:
ÃFd/~¶ùræHþŒ3;HÐ)°†nx¦õò¯Í”w½D«öÑjI\ 2ˆ0èU¾£%Ù¿L÷(F9%×>@©/ósdE?HJÕÇ2WjÛÃ]ü)uY“Á?çh«Œt±çÜ/Ðà¹)5üDè‚ñi=Ž^g¼)*.å:vQzceGë“N¹ ¾\>ªš­Úö‡3y
ó~Å”_:/©¬1­ˆ,“õ¡Yk-bÐßz¨×|ÿXõ‚‡>Øœ.°‰Eâ0“",r1fn­JÐùÙ©ôñad”V8ÖHÀ¯Gùœ`O-ºI:Ù}í
+ïÅ€ÛàRQZ'6^¾³([Üî\ÉI±lã·µyÄ}P~…ÝÜHa«tÕÀ¬ Jã£íÞ쥕MEÃÂÝ}»dñF‹šePÐÚðB§ÌþÆst)n!$íÏ–á&­O
+<êÓR^ÀhDQßçü¹WÅòdð6´¬£sëôç+¯¢Ô¥ÞØæ±™¦ìR¶’Vì»s9 *1um¬Xÿktƒ\Ÿe˜<Tµð‰–Þ"È(„Ñâ7~
+Eƒ‚­¡›«Ž6‹uø=¹¦ç&KH~{Â
†§fEx‘ºn;0Y‚Ϙ›êþ)ЕK`~SŸ·éžè½œ˜ä¼¯µDüpcûÖŠ@"òÁ‚aÆße²fI¯Õ	â]¸Ìó|964ÖùRº¬
ZÁéø»î;|Eˆ*‹q1ÊpOÁHQ[€'ó”
P&£±‚‰Q¾IîöhLK¡óÝ:	• 4}ìûaòu7ζ÷)öÇ«úiZâßÈxíy/äFÛδ8Ä‹Q‡ð0éao~ŒþÄjÌZRÓÏ{9”QûKÛ!ù¢¹Ë¥´~ÔôB¾#n"Ìe¸‚’zyØ£àœb]é9ýÞ8ø*)ò¬Ô%*¡·&D6źE)‡Ä¢9ùIW•œ{²
+cl*L§>jêÑD#hö¢×ÏX[z‡Ð¬Ê€³¯ð+ms
ÆôûdLè펔mé<CÈì
}·•WbTVù¾pXç{Ÿë¨^A4¸<žà;çÕI„KZ\+göÓéî^&Ð/M„Ï…~€“SCÑ^Øóíi¡‰œÎ4yqm=Ö{_Ì%›»G0â¢`\‡)£ŸYOÇ{TàBã³ês”U‹‚":R¡áNqæ©Ù{~-r2Nšó3Ž¥¯É ¨ÒÖ`ßäðjøΛ†!óßÛ/¸ÔŠÝþ0zN¥:gƒÀf^›£W|¯ËªÛìbɹ ÑwÓÛNv‡*,?Rp=öóî"Þ!mv棬9¡úHg
+Ø]ì{m¢Ý ‚õ¼Ä&¿%$Ú¹µ1ÙìÂÌéSê…tŒ¨þë½w¦m|Žåd„è°àZ3€ŸGÖ÷4jÝ.Ø?‚ž[(—ôªÏˆ®Ó²MPë›"Lµ°#›”'Bu¹r͆Ï;P+¨ft–Sª²êtH#µR`/ÆuС’©ZWïæ¬À-û ä”<{0øž¼ëÑT	ü=5Æ38È#•	¡ÿ€9›fNöþ>Ò“7Ÿ€»x•aº¨%‘†W³ $ØÈÂ
¾O°—c|pq	ÕaƒzPŽÒ3T
–ÿcpµ9Xm€ÈÀ‡I¶”CÆ¿Å2ÁbEoö Iï—³±ºíÄæv‚w–VÒ³UòìF`åkg |1†¹O\‹“·Ggá+Io°ÐÉŒ6P;ß
+Ìì=g¤ú"¥ý¢Tóï†j,ÁÎ4ÂT!úf‘ íÝÙ$s™6õ|`]oÌmqבL’‚¨õÅ­nâu*º»þ9ÿOy¦idû‰n-‘5=ž¡Á•†3^.Ȧüúßè4+¼ åâ<Ã\ÕD¿=M4bÛ‘Ýîä}©:h'&9/âj?‡ák®eÎS¡Uµ³dÛoõp€Ê·ûzý›ÙQjÜolsÖÂSv)[I+ÔxÊKodBÀæq•?¬ÏAØÞ?ÌàŒn$¾Û:ä`V…P%ÿßøovÜfc·:š7žøéKþØ©uç)ôAÍ€lNXʬq‚Ç9–37Ø­òN0©˜]ªâ°øù„ì@ãp)¦-F:Öýn™hpÒš”~"tAöºG/‰UMØm{Í—²ˆ÷?ìJ¡™ÚF—“$hšXC7<S„ŒôyÙèJ‹µÐ&õ#’œ‰å Ú™÷·„2¬‘$%Í=ŒîU¼?Ég\¾zržuA›¿Š'”Ž^ãi¯‚ŒOÕ£1c#›}¥Ò°¡iÆŸÖ–J—LMð}媜§õãË#_"ÙpkÅ+¿PÄí¦WÊ}ùZִ˺·jðñÀÇtBÊ‹cM0$×ôÔíx9¤žãL…ïhË×ð °fÔÂÍe!XpÉ-—@Á„­kõ5àÎl‘AOÈ€ÃJ!´Ò9èCé“(›T3:K§UYuêÒPæµçã';Í‘)À8{÷w³¸QàPAô^bÑœmÒÔ–âvaf‚!†ÿ×u·J¤Ë…A)Þþ'¶sx5|gÃCž÷áã™\jEà='†“ýäªB«-.›½{ç€ú…w/‰„ÊNg²¶¸k³¡‚fœÃÓ­É	qª¥ÄN³Y¿6&Ý5uæ"Ÿ4{ó2&tøGJ¸ú	¯Àdvˆ°ÕÄ…¥Žú¾¹?Fb5f-)çé³’J¦ó«ŒAI=	‰²lßpN1 ú’ðo|±šyÓw“>¬D˶–e8©î$¦£@÷JˆŠÄŽ°vó¾y±´•g[õš{íÛ}aˆCݱ3¬<Æ]7“¢AéLÃu8¿ókE yîA¾Žcá¼Y3ªÙ䊡â8»ì›‰Ñ(bøS¥e°‡ò-kø<’RŽOÿ&Ìù4ëåxX3ja輞ô
+ŸINÊümÂõÕBÉVÆœJG‰/ÿºÙAF©äߎ–¿ŸÃ°ÜƒiØy'ÚL U€qX|ŒòBv ÿ8šS˜Ê¤¨l¸³èÅYDõ‘‰‹v%Þ€Âmj<e«¹†2
+!`s¶Ä‘ŒVé®lo3±¿ÕM•O	|ú«‡lÚŒ´ýšS~}áHt›ŒÈ^üqï.ä"Ñ
+Íþ»W¼g§Þ¤Ô×
‡2ã¹ô8@eáfv½R}ÜðQ*
+÷ùC‡5îg¸¶åÆ&IAÀTôìØ7q´]Ó’*ˆKñ¿8Ô’,¸@d
`ͪa[J¯cs;ÈAµK+iפÉyv#0ü»½P>–˜óPŒrJ³|€O^ûæ*ÈŠ~”Á@Ó<ľ
]TœÆC€¥×Plda·“d®Ô«›ºåRê²;Ÿ~ÓÐ(Kî çb_ˆ *Nc¯@Üå(	62Ž¾èÓ¥^½ÝoRjåˆÍÿÒz ¼\[ücª®`*zvl•¶Z„ ç±IÎeRT6\×tì¢"ôÆÊŽË;œo@a¸—ÖÑ䀨ÄÉ©Š>}Û±Í6mF‰ZðM|I)G©ñfòûü<,—5¾t^O%­Ê™ñ]â®#ÚráGKÑÁïXnϺEbG
X;÷_²ÖZĽ£ôM³øã°Ñ‹÷»¬†²w®_G¿þ^¢—UârE÷:|­%\}ŠÙ`2;DXäbÌÜG®ªŠÊY6á8'–P}Ix¹>„ÖM²<”>½ï¯OõþÿÂÈ.5¬p±Ce'½
Y[\H»×ÞA3NïçØêŠ¶Žï%ÀžZi’t¯úÇÃ*—«Ý¤¢´×\¦p(®z/1‡æN	¸ijKq;¾3ANl¼a{P¶¥Á¸’ØÛswò•ú ß?Ñͤ¥„“b£˜Ž!(ðkUü§
+¥ÂKè·E.]”Û[Ç¡ÅW¥¤$¬¼QƒÀ«XUi!»T¢7šŠ›™§úkÈÿŒ)Ê 2½©ý„Sn)	+/SéÖ0ãR‰]dgO禅á‘æèRÜBHǃ1ßLGžxÉ»¤ÜRV^¦Ï±`Û
+,¤ºÈΞÓ*Q¼Ðˆ¢£.$Óåo®—'ùÈýluE[å.S8W=™–Ís'Š\º5«¶“_—®æËõÓVCYµW¡­Ñ/QŤq9¬WUHEe¢þK(°ª<ÒBk¨YÅkær@TbêÚE°ãÖè¸#Ê-x¨œØeÂö qWŸm9þ­«æîù,7é]wý1¡DP'¿Ù nüŠG_.£~¿‡UW0=;6Ä[-BPýÖª
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc24.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+zv©F²íØfs–åI‚H=+Îí÷Ùuzv©F²íØfs–åI‚H=+Îí÷ÙuôìOŒyÇ­Ìæ1×’zVÇóþ¯=ꎚæÊË*uª•§2Û›ØG}O*v­ŸõÅžò“G…Ñb³92=ô¬“ûáCzɳ7C@~Ÿã¢ôVp°uɇÑ~žšê¼)щ‹TêI7Sd«+­ŽúžTìG#{_xÏ9¹2/DÅâ©å³ÑP¹ÿ`5×V÷—!
+ù;Ž¿Ä{rdzõE>;ë߆ôáˆLKÖVqÌRž;æ2Ènð	Ö _dú{n†€ü#ÛYõ¬à}ê¿
+ü!)Éey
ÇÀ2û½*cI©ÿ¢²8qï^ðYR¿¨É’n¦ÈKVGé!¨>ÅŽFx$I¹Eô0-Ô<Âï
EçA3ö¾ðƒrod^ˆ—ÙO×{¿ oãÀj³¬ŒÈYÅÀ‚¼8ûúÍŸF”n‚¿³#Ùó3Bïv.c•öäÈô÷Š|vË£õ‰EëR]›ÙH­J¼Ê¡²›<ÜÈevß
˜–±¬â…¤!vÑdÜý±8]¾Èé}©¤Þ$\t„ö2Ä?S,°÷3\Ï"gXœöÜåF«²÷EÝúÉ&cå0BRÊ|€uW¯žÍÁa ”x>
­Ç=‹¿ò“d"ëgTÆ’OãYypâ"üý² ˆl:ÛÖÏ3'PwaD[,Ï4Ã$"U¤cM9ÜQ–¬ŽÏBM |—Œ~ÒÊX¤ W_¯Çhß.Æ?䌠×N‘ùðH,’oŠ"õ:`Zµx™ÃŠÓ‚8<fŠ>…ÔÝgú“Iö¿M7VE²
g$ýá¬ñaýäÞȼ
3>¯ž³öc]ÞÛÔ{E‹T]V3Ú~¥ÛæûËH“3,â
ë0²—epëé=‡#Œ5Ü(c{F¯ûÑ/ô½˜”tk±ôߢÖÚûf„(Ãì\Æ7ñÕõó	ø ì‹["÷-nqÚ:µ¡œ½Î"6!|$ûgsŠË¤º+¯ &G”e‰_y"+x¥ÊìuübâÆwöSÃ-´t·#ÆÚTZ™£-1EÙUBì¿È¥ç$pºaÏtÕ³kƒ’¿dç¥=€:Ž)%’‡Å¸ºúOU¡H¸èñd•~¦X}óf&¸ƒDΰ%€9üçúU0s‚òp7$@ب'Ut; Pñ¥":׌KyóŠ§éLÆ(×`„¤‰v‡dˆ:T-
+eoîkÇ;g):—û}“üøê®C!‡ŸÂ]5ð|G*“z>c‚kCèñýùáìT¸|rWA1‰+ýdÒ®ù4;'ÈDËΨ‘9žÛ²òàÙ,D›eçy@ƒB’az©¨ÛÜ×YúÏË-©l>é5
Øt«±ƒfN îÂ"ˆ¶X.ƒh›HDªw®Ýín¾d=6E@jµ–/nŸä‘ÔßUÆ<,šr¥¢1Eƒ„0š@ø3r#ozžwÛÖ4âxÇI9¨J1w·‡ê’pü¹‰°U]®¾C“У\‘~Õ2]³œ?ï†Ï öç°vØ05êÞÙCþË3°DyE¯šýX9Þ	D÷tÀ´w<ð/›4	»pẋæñl䜑VQAõtÍU5äLf©è¹	|µ§Îé;’ñcšn¬Šy6ÎHçßE&s
+¾ó#1]ág†Óìä·RÔ7#¿˜ÕSÿÂç6Õ¡ef|C!{ñƺ8¡«'µöŠ…´NpgLUið™
+£3Ìít9L\Xlfÿ.¨º¬f ©üW«Ñ8ë‹;:fXÙË`qXü‹øÏÁN˜º£¶»õ;‹¯¦Ã[
+y3'2ÊàËÏzFj¥<2PÆöŒCpqÐu•ß†¸’*3‘8Ak=ߧ¹/6þë6¿^õg,-5è
+Ö<$>õ£8Y±©„Ÿùì¿J^£ý¡ˆžBê?TG€!ÜëÌP›Å¸‘nÿ·÷ûí@ŶDó‘º¼)(ÜÞâøþ…¿Æ9#A(üÉcy ZÜâ©tw_(%gDlBøHëÎæeVóšPïqÉÍlœ/¼o¢Cï72^“	‹UiVC=@LŽ5ʾòDVðW‰Åd"Û»›[3š©Ç·‚2•<E»(Þ°êåÄÙ‘îñ¦=›,ZuèsF‘©¨´/“mŸ¢|6—Õ«~U®HýG|ôÖq$Z[4ZbþŠ¯.ª„ÅcWÓHþàiƒf-ÐRÉ]<aŒáÅ3|I—öè·{Ö9'cÈ›SWztRJ9—m:i’ÁÒ©Ôÿ»
¶øUI*œKÔäè´ª鞪_mÍ*ÿÈ7üQ°úûÌLmˆ}J“è"€LŒ^ÒµÓøÇÐM€ì÷Xí?råÓéª`æùànH €­MNªèv.@ gL•[G¸€jo'Êh½†ƒOG	÷ÐÕÿWDt³–òû	SÏ˜‘P³ÀUb‰þÆ^ÝðmìMK1³_Q^7jŒ–zìÈ
t¨ZÊÞÁÖ“vÎRt3ëú;å–e±Ž¿™p<g\;ˆTÛKåÞS™Ä”#«í:ÉA† B#™ºjý>ø4ŽT ;ô|Æ—L`4ÍšuP_#vÅ@UÍÌ‹Ïì³Ö†ÍÿçïßŨmø䮂bVçÈ
+¹A,c /‹M
+7¹¶>ˆ±fæ¿IÁW
+?u`ÑYïhvNˆ‹M?r!«yùݯXˆ+ÊÓò€•ß?eSç>©—h)1ÄöaYeܵ
+bõ„9ÂôO&M«¥³²éƒ‹.ZOØ4|Ïjaò„F¢þ+ؘ@ú0¡¾ à[¢/K¥_­èKÌœ]Á™D
q°\Ð+ˆI`ÛA
ÍöbïË$Q0Z~]ö'TI<îA§ÇÜaÈzlŠ€Ôw'1^Ü#Õ?µ£”7´1¹®	úóÃœJÿ_1Ôªæ%Öª‘xX)äWYbŠ`)€íf
+jÜ8>êÄÞ‚$Ïë+J50ÛaÄw’¿”äFÞô!î«(±hÙð“’rM”bîsÉ9àž0w²“sNÂþ<¹ÚOfZc„l©•åo}ªºAa†;½[¸?ü·
+dº{%~ߦ;W™õ­X:wÁœÄeWŒsü@ñÓ}ì­`
+jÉ¡¯†á‹f}ˆòŠC)kõé·a4Ëœ€#ç»ÊEgSÓ\ç=°r¡ˆóèuîxý^+hk2àð…K4ÿP•›Yl0ÀuåiÿœM9`ðÑÿþØÕ%?¬¢‚÷自jÕ˜ÌOÍoi§V¸j8ýY}:GËu º#dk8o³–]ø.wSÏv9ÿÆ)ÜE	ò4lÓ£ŠLhŽ‡1álJi#`^
4Ùúmlg¬z9æaû*FbºßλÅÕs¤µnFc-·¦œbȽ˜«ºÜ¬XôòGN{o«”RÕ'Óã™Ól·_Ê4Ìø†Böÿ‘ip_KNwñ	™ïz*²ß¬GZÏÀ¾Âº§q²¼1®a|uœàΘªÒý/[f…Çèr˜¸°ØÌãm5¦|ur`¡kÊ]Ù.¸ì&suOÏ\–\MiEÌ@Oå®K¿pË=vtÌ°¯4‹Àl*ä/÷!˜)–8®öòƒ6¸u!GÐíµâ°å<탟œ-i[qk÷vCQ›¶*˜Æ«£Žæ5åp	ydëL@9wæ´.B&_òfNd‰Ý‹ƒô&Œ
+ÔWxd ‘ñ†nx[ ü‰Q»øžf½¤Ä7ÿ™y‰Wî(•óàâ½ê7£$m9Tf?p‚Öz£So^8lš”¬…Nüw¯±/½TM©{N¤‡¨áËlc¼÷ÎXZj0ͱþxH|÷[p²O›½Å%>)üÕ„–ùÃS†}¬kï:'#ïÅ0c”¼[ç_
!„.É~0¨ŽB¥oQŠ©wÝ»òÏÍi¹Ý_ñÄÒÐË…* +—m?Üãsóë$Ç€—qˆû±óƒæ™zÐLJ:Œ»Ö	záQkm?ie,RP¥¡Ùí4ác‘rF‚På'ÆòEÌjà½}Ǫ{Ѩ•+¬Yˆƒ½ðþV‡>@´¥ÙOèî¾PJ<Έ؄íËÑD6ãké—Ž(µ¾†"£…éï¤Ê¬û) Ãâ$‡Ø%^eÞY†Ãnd¼;°ÚRo.:B{b‘§Xõ—‡.é½,N<ªÒ¬†z€˜j‰aùˆ¬ý®—Fd¢ì`A^óŽ}HèÁ#J7‰A
+ÑןâÈþD&«k+¶f)O“sd7xŠkP¡2}²ˆí`†óпªÚñQY¶‹†ù/x¢Éו¯ ?ÁÿQz+8X´êÍæŒ?OMu^³¡<é’Ò™"ìÎqÚü×æ(Òñ0”å+=;Ú#Yøl3·KüªA$›gŽøõ±âH´GMseë´UÄÝãÃl­°©Î;ØÁ8¶h´Äá	C\I—Æ®»áÝÒ™BÀÁòvÑ%/ßðÞDO!…u‘*­@žnÌZ'8½&¤ºxÂß—fø:’&.,63ñ¶,Ž~Ë|éÉî'L]ß[Óô“ËÙSÍsö±6rNÆ+¦®ô:褔r&3ÚtÒ·_÷„Ÿ– þ½CçvrÕ)j•ŸÑLä§9Ÿ¹=Oµã
+kq<íª’T%–µÕÍuI8Cé{ýX;lŒ”uoâ¯ë—X"²¬ÙMÏ!I¾=Ú‡Tãnå¢}éë…˜Ú6
ú”µWàø7_2‹¬ 5ÔÀK™7ÁrÆjá;Í2D*˜¼¹w»í“½šÅó°Ç~A»¯töðòþv*\>9¥®–Ê›ð2ŒiW:ä×»ÏIÀÑ2ïÝÜ@GšœIÍì\€]@’~ý}¤·Ay8• lT¤:“…(Θ7¶ŽmÔÞ
+N‰ÐgžŽ>ó½·´~1qcµ{§Hï˜Z:ÕŸcÉm*-Â0㮈è{
+1ù릃-? {*ªJ•ÎZ–ÒWŠ}÷ïN%ñ¡–jUsœkÄᑼ§ýÚÅ4š–b{¾¢¼nÔ1ô¾yHB#Q›lL }Þ_Pp£Q™«Ü¡Å&0èM´(‰¡Ÿ±;ì ¤èfËév׿P™Ë¨•Ò[DÖ3sѪ´0æ¢1Êc/àxθv
¨«–ס¦/•5FK=K¼ÖGÑÂ8½.“D*ã«üo§ÂbJŸÛHÇt‚@„&F/iÔç|íh¨@võ,ø‘½&Ä£­\@5¹Œe4ÐCÏ©­Šõhä3˜Àh‡)ê ¾Fþì—>€ª‡…ƒÅ{IîiHÚjñŒÓˆ[|¤ªN«jrtZU2±‡ãÓã—MÚíÕAĬÓo‚XHǸÁQ>ÅäÛ?¤W	$ïЭ>zk¶-Æ]^šnoq|
ÌÑc’Ÿ®~êÀ¿²¼+÷M(ù¶	êè6N™^¹Q¯ù‰•/ÇÃÐìœ
š~äBKòï§C°
V‰»ù¹¦EÚµàÓyéèɺҌ±à¡öbih7<£~ʦÓ|O3ÐRb•ñ²ʥwÄ÷MJ
+VÌ'~µÙÖ™Ð*¨Ú³'RÍT‚6r™õžLšKW{yÏ\´ž­høƒÔLcÛßGs”ü8Š²2û‡& ’µsZ!¡Âù=ŒYáV­-€é`_a]ݶY^–W¾>¸”S>´90Þ»e â\v·´©éŽ.K4GÍ–þ6…%ºŸ0/ˆâ}¸6½V=
’N1dÐLÛ]nV,zy­À'ɳ¹ÛJ)äçÀ«‚‡ñ(ÄËH¢6`´üºñN¨’0xºÝ+\5𢰭ë´P]Ÿ2»¹×K 
Á‚S“¥ÂôØ,	µîNb¼¥F·~w[»ôúÕ¾Hë‡NÉ@ŸýÓe¬½H±È§ç.5nuboAéû›%”ã¾bµIÑJ±OµYÇ·'aÒ†m©3-¿B6ÚÄ I?ð°RÕ®²Ä	6*ÀRÇÌZ?–¶¿Ô³Ý$ù‹L-äÁ¿ê¸˜aÔ¥p|É•¡HƒËV”j`«Â•î9c5þ®ÓÙ:{xy;.’ÜWKeÃxFº¥‹ÕŒ¡õBÁKPЯý;9äš5ÄÁæ&rݯú³ð,“6FJ´¹qÙ±ûÅ,YVâ¨!`îy;朙áxo"©žÌ´ÆØ O7[G?‰ë>úêw& á£çzÇëâ§ùßB×ÞúIi‚Âvg¶m~åsÈiöJü›­¨·¼û„Z¤bà‚ÿï6ØXÚÉ„g“lî#2Qv0®/÷G°$tîŸ%•Ê®æåÁqYDø0‚C÷h„ÑUmö¦¢[ËCò™<Q"€ÿ»úÅGÀÔ_CßÌú
ù	†RXm)¹	!³‚1ÆÝ,ôÅÍú†Ð'Ö÷ÏsÂ=h‹&%FÓk‰ŠÎ=þ¦»¸¬f5pаíU³æTÄ›V¢DÏÐ	x+ÍÓz}ä_$
ûÍ'ê Áðç¼VÐ$ÖdÝý©Ô¢íÉÕ¾±iC¸Ú—˜ÑÉ!mb'–2h&ã 7+=²Ø`ê×Òã%šrÀý]à›.”xQX€ØûZ( ÁÓÒå«Pˆ&¿ãá­·J~EYóÍIÔ·-…ž‡Þ\ÉJ§Z’oÓ¼Pq….;‡ÕZÚúG«ÒS¬mÔpç²útŽ‹ê]iFÈÖpÞ{1º4¨%+f?Ô‰âkÂhTm×)è*A$í\ìrã‘R¥ŠùhØ=»[	˜^›õ¨ò[Šut'Â/Ò¦ÙòÊÄ‚™íÐbßØ. ”ÒFÀ¼h¯éÚØÎEô4rªwº$m5öFçD£‰>RU„'Û59:-¤Ñ(ÂëTŒÄi£"k—·æUwÜŒÆZsQ«^k­æaÐÇ"ÿÛ~¹Ýa1%Áã$%Äg-Ki¥E°õùŽ'œöÞK5¤·N»_²$!Ÿ¦±Ã6&°o¡(8ߦÂÛnÞÎÛ/»Øs¾‰h…í„ñã?Òྖœîÿ¡YžÁSÖïX¹ÞáSaã7og/ÃôT
+y£EŽ´:ƒa™iSâyebAÂøUµ]¸”{#ý"ßÊ)¤Bã”’˜R.ê%Ý-I¹ç^(¶Ì“Íä-m}­…ÛTœŒ›3À‘jÊq»a4„*¸åÀšt®ÚjQøêäÀ_Ö‰º¯\mÅLæꞃ¸1 pÃJ<¦,@ló-Pî‚çiüÛ(D,¸šÒŠ…€ž×A–cà‹zìè…}ChVÎ3”8hXø¤×s*bÃ+Q"éhŠ<±›èØTÕ^óB-R1pAñùl,mêBŽ½Ç6w¢"|A¯õ4B椸{SQ£ë¯y¦Ù}×xÇ#%ZÒ¶âÖó솢+qT£­‘Êû}uµÀPþßý=íûqÝòá!-‘K[Ñj×àòÈË&˜€rîÑu\„L¾Wçâ³<²±“„In¥«¼ï<‚#]ÜË(ù̜ȧõLµ®ðÈ]?ÿ
+RjPŠ.%×Áx†þ¼ÎM)ž`ñ%ª@&šdÜð¶@å¢kí!ÌgU•nã/ò®ÁP7û¦†Wâz
ž·).×ÝSÈáóâY¾‰§ŽÝÙgÉn[H"Úr¨Ì~8à±ô[¦Þ¼pا¯ÎܶD©äM…üpÝ2õ¶Q¡eà­)5(Eœåî<C^g¨šO0öœU M2SC¥q=ˆOÕšåà§dþ÷q¢_ÊÝGß‹ØÆeó°´Ô`‡(áðøó¶àyþž¥ýq€×YÖÇB…Ϊ7ÜÛ^ùAŸ në+g—J4,|Rå·1ú4EÖÃtQ>®Ùô!sR\³§¦ßûÙ²aS*NF×`Æ5e¶Ó¾B\ü`M:„WP8ï…%S 6÷˜
+(wAýº~ã"Þ¢	Oî§kùƒ‡,Òo
+þ§¾ÿ•¹½¤Ô 	\J³ŸðáešR!ÀÿJI€L)È
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc26.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+ö3·ˆbǘM8Α(Ñué*‡DF’M+^ö3·ˆbǘM8Α(Ñué*‡DF’M+^ñfs
Ä“-šp0?P¿êÏTˆŒ=9šV¼UÄ…¦Tµ×HO(®xnŸ&~”ÌÊ­«×}âÿÌæ•;Z)à`~ cɃ¨&
zr)¬e	ÿQ’÷üÂdØÑx¼j‚¡ICêàd‡;ª•Q¨w³žPAðÜ#Lü5…‰GK³úÙø™"Ÿ3oïþ¨PHÐØ
V¥Ö²ÁÏ×Ùþчã…Ñ 47v´RÝ>Àü]ÆML
+ôäREʶf$¼U±,åðØmuúògË^Ldvn”ã¢(9óå™È­¿ðÃ
yeÔ_’†ÉÝÈväÐ,±‘"…•qèR%¨=3ØÖÀYO…8(I70.¢Mî{=! ‚ý¥F˜åjŽ–{é¯êz€4¦ÀŠv6ï¸Õt3qÏíSI6Âñí/D8#fÞÃáM ½­¬W±yŸƒ³¯á¿ó<«[¬unˆ,…ËÙ¾›þÛÅ#=¬”MÛ¿@hnìu¤§|庑6š˜4õÕ¤Š‰-$Dà+í韲…t’@vß°pReGé¡×*qÌHeªX>×ý­Úê.éù΋¼˜Èì>Ü5ÜB{LíȸÀsï3µKÂÿœäøÞX~s÷k$ÛYPrû×/Gcý›òʵ2¾9§&ìÒèîTú™·À­å
+2#¿\9}W5À
²Õ½*X?D7âͤJM zf­±²žpP#Ž\÷]ƒšZ,Õ5bœU“L*õÛ"Z[8’n`\YšÁözB]çWŒ-×Ô.1öÏCΡÙdÔ;]Y»BŒEˆÏ†ùÄýSjX‘£»äÉôhQ	ìl
+Ãm&·èfâƒÇ¦’<l™ÿ?ǪlÙÿÎt!2
u·Ÿ9©@âÔ¬š!²¡Ç^ˆpFÌ¡›ßš]=gG4E®ò#{Cßc&1m?tήf’¢“%öoå0GUug]ëÑ’Hx68ûxK2¶EêÜ
X‹¯a+á«—FzE5šÀL|Ãjõ.ÒÉ?ZÚˆfïÑÖèÄ«.c€ÐÜÅêUSø'×i?l)-h(÷·U	]Ô„X¾rk6?FAîs…ª,ng%"QZHˆÝVÇÏ#yè9€ì£}>à¤ÊŽÏ_³¬{§ŒUz‘_‚·yQ™JW¹¤âZ‚tíTâ…ÊIþ°|³çG©É\Ïïe-Å|¥j¢Ñ2”B+9(1‹)_8ẫŒ!kW1Ž4¥„ö˜ÇmæÃfw–™ã% Õí¡°üæóÖS·AœO磌û¨o±2PÉÿŸ©ç n«ØˆH«² äë³^ŽÆç+4ù‰wdar"SLž˜¤l‰tÆJ¶ÿº(üžNæ6d“ÁJg›¹ÍÁ¨é/ sþG×dFc¸0rú®>jyOþv¬aMçëÐƉυL—Qõ¾è®øÐ1'·gT°þ~ˆ.nÙ‡U”š@ôÌG'y!.à ATã´vOœcVŸÄ¼K5æÀ;aé³cËþF'¸óº)´X·jÄ%ª;˜T÷«D´¶°2¼{Øܱù&–¯ûìôßÒ²Ó³íÔŠùBp9ÜÀ¸²)Ÿñô„º2Ó®Z³µ\<bñƒ††
+kÄ0Ðî¼ÌJ¢£ûp³™2z’ð¼¨Ø_¯Èµvº²k„Š
ƒï•ç¦Ô°?[kÕ:wlÌ=}*&¼Ë’œ«Àš|Í!ö¯É&þdõ:Т'ÅØ›ÚLsÍÌÙ“Q9xØ/ãyÆÔ*EÕ]•,UÂÝ[¹01è‚•½~“IدãèBdês#r&O€ÙµE)By_ˆ þÜ'Fp\Ôòâ£SÿeóÕ»R“¼
àŒ…_+£)ºzÎŽhŠAþùF6ö†£ÆLeºä瘳îtb_¦¹ÿ¨Ô~pfîíbÚ~èAÌ9Y;JñÞ×`Žªêκ˿9ð”éÉì	#žtaõR`ög€mŠü[-t»®lpëð–dqŠÉ¥°.CÂVßK3ŒôŠj)šC\ôr£éÇñk!Ú6+|XufÇAw˜ø›Ô÷\¹$*~´©
Ìÿ±Í<•k%/ü¶0Ä]ê2VeÜä(K‡ù!_]ËK\ƽ¥—ɪ¦íN³Ò~ØRZÐPósª½oq5ÇPQçž#V"ú¯y1xÝ”cáç9@º:µ°aä0Öl~Œ‚ÁæIXÜÎJ0D¢L	8Ã|}î¢fª“þ,Κ^Ø}oü´ 
§0¬“ƒFò.ÍrÅ[ú|ÝU‰ƒ¾{B£—	/RkÎ~<6\ZÌ°²Ðû™“Ε%EöSªô?¾6sò"¢/”®oUÙ´8èdzÅä"–ø&T½c
+sZ}„èŸ$ªTÙ¨Ù=‰’á}ø{ÓŽO¸ƒÃÊZ—øWÔ^ê 9ð&åµC–Þ§iö*5‘Ž—µ|ŠY¿d5„VrPbR¾pßiKBÖ:®bh¯ŒÓ14µÈ/3œ¦á÷Öåa‚ª</*6Wñ-“Ú'Ñ›Ìî1/ÛJ@·0Ç_}åÑû±¡&F)e¿œ£ö 
+?©·ƒíwœÐï¦s‚%žÃI
+KëMÞd ã#OÓ@ÜK­
P@5!¡Ž’ӃƟWµÕfɤ•ÐN†SKy]ÕË{¼‘ÓVhïîÈÂäD¦˜—fxÎY]©¼$C9_ËÇ@>zâE –4C³Éa-
+UØè‘”qãi8På!œÑlÈ;Ÿ”Î+—½QPm/	ÙIÞûøȶV(Ž«
Ùåuo‡ŸMÏ^@æ'Ꮃ(ÈŒÆm`äéA|Ô'4ò™´(IG<‡~jÙ@«¹à]³„Jc­ìFj¬žáìEšÓ˽‘ƒ˜3,¢4÷aÍAí½bNhÒ[AJøSð©Á›†°âYKp%‹ÑðIsΨ}áü
\ܯª5)€õ…ŽþNòB\Ý]…ýyižÊäa;øõ¯	ºbÐö‚¨Ûuì8ž%Ƭ.#•e–j:ÑvÂÏ{Æ‹át›lqdZY½‹”à;MGÓû2„_é‹ ¿ŒNmûi6Ru<°sÔ•JIv-¨óKˆ0uq8z1ùisñÊ8~kE½›<Ÿ/·
¢8Zf}d=eö­¥ïL1CëÅõ£¹y»{ǵ	ï'„‹WŠa~Ïbç¢tÿ[zí$ÖPS<?%›¢Úàr¥myR#ÿõid»A
+´{w¸xÄÿA™å•»²ÍÛqõ“]Qðü>”V²0OÖ•`½Áe…”Y[ëþà{/d0ô9ýeM­ç'a‘èß–(½ZAÊÃ/•’ãt²©o(fó¾CwìiyÖ
+	"Ã7ÓQµ}~¶Ö·téô‰ÿŽ®á›-Ä‹3ó¶ÞùÖñ;î$›œ*îØ0…z(úTLe‹9%K)ø‡B=ñCLáÈë‡òJ=Ì]E!´cL\­Åy·ÓÊ–÷t½YN$—­(+©˜æ‡…¯6;¢rð ­^ÛõÄùÑ,ãàå±	ÎVðF¼æ4`²àu…ò‘µTŠ·º7Xª™§¶8o`b(*þÍ7g¢°±Üèp"z`d6žé‰H¯n¸]‹z#9ü;’­CÛÍ„È4ÉæFäL,ž¯wŠR„ò¾
+%©Ë¹ØUÉðúÑwn59Å´šë1ÀÉÙà
]á¥NŒà¸µùÙ[¦ãÊ'û·k¤ûnV¡Æ}KxS€{áH>ŠÓ
+à‰c½'ùS\;eݾV[RiôÐ	‚áïŒlñ[‘˜ÍV­ÙuyÎj§ì)|kËhÈ*aƒºÆÊiÕÓ-{Á"èľQoãMµüàÌ(ÁÇ$<0ÞÑ€±êãŒ&Ü/y¾–¤Ÿ{@¦\ºŒìzÄ©üÍ‚…r²v”ÿ¡³ÀIÉi‹cr=ý2šKÉ—àB”?Š¸Œn‰bµècNÅ/ñ?£5ÏÅF!èÂ÷¤Àñ*ÎÚ	å¶ZèkAÃü8Áš$ѹ¥ú9¼QÙÝ_'7]M£&È¥@ØàËý1 Èâ	W4}\†™¬£–fõ	ÔR.Ó|ù¹BzD·™,ìtÇóp†$Ò •gDÿ)†¸õ<ä[Ï“ÿÖB©lVø°ê8Ì“‚îßµñ´†œWÞÇÓ$x¿Ò7Z¬¨^Þ©°',-í+µó¸ oHTüuO…›c‡ x7Ñšé£×4 mW†L’Ô¤:ó.ß%ïmSiÖJ^å&q`•ºÉd<¬Ê¥ÕP–ïB¾º.‹ yéᮧ
÷'|­„Ð<zW©Ò,÷Õ–¸‘:gW3IQÇœ{¹ü­¤´½ ûæI$<`‹&>ï5ôi	„ê‘-mDŽ3ùæktbgÞâ2j“ ¢Ó!F¬DéCòbð§5,ÆßÓr€‘íU6âñg:žˆ´ÕÁ’‡‹Ú qjVMžYÞitw*}ÂÕ`±ØüŸÑ.’°¥”`ˆYŸGÀ.õ ÏM-‰ä”1N¤Ç&ôã-£˜"p›øúÁYÌ:I ;áX8)¼­úÞån!³&ød\`·ù—Ô«añNr|o,?·õ»u=@S`E;Œù\‡ä:—¶éø§ªaöƒ÷Û‚£V´7DÌëâ_ÃãìŸVJ¨„[3^¤Öüxl¸´…}y½ë/&2;7Jrh„ÖÆŽÌĶt)œT—lk`¢©ÌŠñ¦
+Iõ~a2læ<ùDY^5AÞª¯up2Í“|ÂÁ—¹ùT($hlˆ+ÜkYîéåâæÍ{—ÕD1íL¨gÆæ´úÍ"#HI¨›/¤bÌS*Ôå$©W<7Á?JfeØÛå°qM¯.z9ßúíö»žm›>,‰´3í®µ»œ™~‡[b Îu+¼nr«Íòž¡ …ë¼É]rýL×w†:1¡SÒñTj?83
+wø	JúêvŠŸ‹O:¾ô)0{„½@¸E~£˜:ÓW²cÈj¬ä Ä¤aà£Ò–
+„±tAÄÐDPnÎ#8‰.jyq‹ß§ñ¼À÷äÓ‰)ŽC»bhw^f%Qßó±8×Â=Ix^Tlµ6f
+°^ëINÛ`M>èžH{Ùê2®*ÿZ;©N¿+…Áb^«”€s`“¾ú׿ëXH^³lnÖòKÙóvzáiYç×øjEòÀ!_LŒR6Ê:c%[ñ]~O's2Çî%½Ã©;V¾¨ýûhcÊéÌ&Ŧ
ô_tW|h–QæJ!›’–Ëš¡þÈ]ÛFž»€¥–G§Õ®N©ùUŒÛóT¹Ö(êñÁÚý7ÛlD €jB,_9»‘#®w·ÌU7½œ¦V³ÝF¤=Æ¡AƒÕ‰²†¦Â%¥ÒRq-A:ø=–òº·‹öe?»¬ÐÃÁ™ÕˆQ-3Ë¥E¾?é1ýQ:ñ£=øk(§‘ÎœÃQmÌð²ºOeH†r¾‹“€|ôÙŠ]1h†{:Ã6¶2-¢ÐËJp“¨­çó
B¡úËPÑÂZª­Í?5â ÛÒp ×B%¿Øv#5V4i£®%|
+§xÚîÃCXq¢«8œËæ±xª3<g¢ Ú^¯’¡ëí =q¬PK¯×êÅЦ(¸™Šâªoó|ÎHd[+GÛˆâü´Þ#šƒ¼€ÑNß{P‘ÚÀÕÏ‚øµNhù( ”žÞGIçÏcÁ¥Ôä3êR‹Äh'C§/uP’ŽxüÔ¯€Koݺ{”ÆGÅŒÔ>EÙFç–Ôd™—NSþõkü¾AHU™!ßÅŠ™)»‹g?.-fXYhó‡‚ÇgÄœ×ìrŽK|*п·-°Bt†ÁU*ïÂ鶂”í(¦ýOŸ+}Ù²–<àJ¿þý’ &Š†ï>°wQ3€UÇgM/l°¹~æMúß帥C&IjR÷áœù„¸§º²úþW‡Ýˆõ>ØBƒh=†¥ÚiõŒäç>òÒ!‰="ÕÂv:í÷8CiĽ"ñáÔ‰öZCN¥oíç<‚Ñi•-VT/oÚXM«êÅp!J‘E\F7Ê1Ôt¿'왃ö‘ßï~îMæÒÜ}’^¦âà¡• ¨ßdÜ è+ØâÈ´²g5ÝvšŽ>»ë4d¾Ï]coæ@ÖuÿF
n™²_KRÁ³ S.]Fv=œÚëÒl¤êx}æµ7”’ìZMû–
`êâpó7+Þc°«<§@³þ$EçpÊ¿Ðò§É.ôbïÒæÿ‰püÖŠg+x#^s0Yp´ÌQXÖnt8=02ÎOú
Ê$Ù7\ Ë=Ÿ’úÈzÊñGWþØb†Ë—÷[oòkö“wÃNûÍÎy%fŽ ¬žZ¿&.†Øì²Õ瀎eK®	ÂüƒÄÓYèã¶ôÇH± ¦x~J+Y©ý¾ÆtáKÐ-®eï™ÄIŒÿ:YÚ¹3÷ÝäW'Úò¤Fã÷*ÒÈk‚uöîmð•ã6"+×à#RcÞ®ÏäÊYCSaœÜi)¶˜®|,‚$/×67ky‡«â÷;=þº¢ýå|5¬y`žÚ±“+_Tðó4¿eúfì‹Sˆz¡:¥>4KÀ"(±7ÀgŸÊ5²¶ËáÝö^È`õrçÊšGÔ3HX„‡/ûª'ã0¨tO$³âu‡±ÓNÂ?Í£1Pg´‚‰›^79
+ÛèyOÞPÌû%}u;EÁË©_zš³BÐ \¬?ßLç¥>a†îÅÒò±*46D›n»¢wúüq±sèÈR1f§jüÚ
+¥•î‡‘%3¼lãüX¶ÏõãAß+Z•"fûq¡ï±ÿvÁH+%T94Bkc†Gfb[:šN*HÅ6»0QÚf
+Á­`ôP騘ÊrJ–'Rí„zÿ†˜ß7ž×|2.0ÕòÅjÛ¾ö'9>¹‘ÕôÓ0Ëù”z…ºŠBuƘ¸"G—òs»:‰1Æø¤qö½O‚DZäîIÍËm¶5+¨O¢oóèg²œH3GPVO-ÑClvYäý@G¼«ðÀ_c:þ«
+h˜W¼ùÂbªFñ¢mÒ
+—õ÷•›o¿XÛÝ ×¬ýŒ8eÑhÀyÝê¦,k7:†gƒ©}ˆeâ•.PëÁIù?w¨	sin°I/SqpÞÀÄPTá‡2nÎ¹s k´ñ#ˆ‡7ÂY¡«)îק #;Y}¥ÍàDôÀÈl!Ï4CÜmºôFrþjÊ{-¯'ܹøý	AæºÄ˜+*™¹m,åv9G†«>‡hь՘X!:Cî	¤ùaEŽCÉùXµ¦—@¤í±½¨™6XÒ?JO‹o­ªýé¿îÜjr—u)Ëb4¯Ýâ#ýK
j2ÂÅ'§ô»~_®$¤„ƒºßWœ>Ý<mwï¯,¶QÛ‰NësÖ<Uì‰hS\ÂEqU¹÷>g$2£›
+­ãDq~Zëܬ_‘ú–ð¦öß|	»ÝÆgN隸ï[˜Qhë%8ÇTØÎý÷ˆ‚!Þ}ë(ævÊ4§
+.a¬¶¤Òõ½ßÃØÿ"¶?-€ùƒ£‚L¦4ûœíŽ*lgðõDAžo°ûs‡¬G¯êò,ÔSÅ RøÖ‹ÐTÂ,i‘qŸð«ˆ5aìݱzÓ?¡WÉR‰aBωÒ·»ZöŸDÍ•a¢ÞÛšwåÝ…PŸ“H5e³˜ÙnÒ|ðŠ®s]bL›ÂÒ¸x`¡¿ÉÛ4L¥^òa1U#ö€Q¸iÅôŽS»•CH‚½ÏÚ°D¼	qÄ(ûHOå‡>äyì5ã_{’ÒÆäzçc|Rƒ¶{Ѐ©A"-rwªèë¸[”›T©Q¹d)–3Ý„5~	mÜÄwÍÆœ—^6ÿ~,[’!‹»¿C­31£M'$ìÓ¦m3jƒ—$Œ,BÍ™óUÿT:©×q´ÍÖ‚œ°´“¬îëÚ€¡=M×É!h.V‘á&€ýÜ›åpŸ)H¿oWére¢¯§¾Nnºš[LW€>mÖÇ›¡*x÷Ѽ}3‡v˧D=ÞÜ«`­Ý‹çb@Ù®hú¸,/E[1Ì
+÷µ¤[î<ãê"JA_;`pkýdÆoÜuŠše_žú\»øïo„ôˆs/XÅè“ûàH¹@7ΈãªˆOëçæÙlÅKá@TÀBŽ	;Ïý§\ÅÈFRm÷xÕ¶ƒ;㱄Oجí}<Ép…;Á¤"Úóð·qvÛ0ž­EÇúxàv2Ÿ£wÿu%®¡“08»Hð2c¹n´EM¼¡O}UD©ûýsâ6ì«þ *`!GŠ“éðÝ.ìd#NXZÇVwûm@Þ¨åêž4+Æþ@ðn¸kíÃÞ<õ
æ^°—Í;ëÝ"o€n
Û0¿>)Ï[³h@Ú®˜9µUtû\£JÃ*Ú¦ÒI
žËÓѯؗ–߀¨„vƒçS¸—Œ±”¼×LâÀ7i>ÈxE‰W· 1&Äai\G§ÓÄ€¯$AÐémX"^Š¶b…ó$wU@òÏßA&SóNøG6½xô"®O¹Xó
+·¶ÁxÛÉD”‚¾vÀàÖ=çÈ‘Þ¥ê	)ʾ!é
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc28.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+ü	
ûЖg®d)§÷8uwéµdy“°J:Åü	
ûЖg®d)§÷8uwéµdy“°J:Åå8$ë½1ÎAÈRSópêîÏþwÈò;}”t—$6m§©ï¬{ôHŸ™&¬‹¨ÍÞNR×$p4HËgb‚¤¦0ûàÉÁƒáîùvú5è3+-l9Z0·ôæ,é<ؼ¶jž[é€åJÒö26H.l ÚSOÃEöõ(#/L™EM‡¡œ¤Î?T#~Û
+Å(m!ßR$ÿ¨VX¥`,!rÞ7ë¦a³Hàh‹ÎÄUQ`ëÝŸßÁïìéjÍfOAüe‚pRx·c|ölåúèò tc–Y ÷£VZØr´`sõÑXÏx­eqÔ!¶Ï×”þ¹ñªSĦ›£c¶ö«.¥tï•=^«dD$´ƒ4dl\Ø@©¦ž›Šñ÷P=F^˜>/Šš_%U˜eŒQÊ»y0ù5îØP\ç3)qAšîo	£~¨Fü«—PÚB£¤HãM¬°WÀXBä¡nËQÂ}w´KîPÄ7t&ŠDuÙǾ¿í&2Þk{ÝÐ=•>2ª¢À˧#6£ŸÃÅÏԇ̇™ÁÝ/ðQYœjƒÌ<ŸvTßÜ*jºVž½	ž‚åÊà<¤ðsÆøñØ8×éÍù]èÆ1þ²@ó[b‹ùÇì2—Ý¢ÑVÔÏ"]¢Hm
+Éž¬´­äuÀæ÷¿°ƒð0GÊâµBqƒ:³5áoÿP½±ég;6aØç'£üÇ¿•\=ÄçC …«U:I¦•þQ+[ÆqñK\WèÃ7 z¼KȈHuhµ¯‰óCЋP_/uðä4U{“ó/±ø?!­ÈØ=¸­€OQ!+	ÿó  zŒ¼-|^	,)&¾Jª4Ñ!µ¿{ŸÇF…mÖT¬×BùËÄëmUº–ôpo-Ê¢‰kò`ïjÁ­ ¸Ó
+fRâ‚)ÁÞ[*>=Ñï›"öˆÄ¥„´$2%ýœ¥§ë`øüMŒåK(3 ©„[UÛšE}®°„Õ_Ü‹¢™ãõQ÷°ø¥Çàròœ,¢0
+Gâà¬ÌlÁ˜\úîu–Á •nèL	ˆ(ꯓacÇL'd¡Öçi›Ó[E”	F( ¡„ßÒÚäˆr(^÷UìËö=§½z7|dIY‹SFl[#›—ƒµ…
+4»°híÏ¡Êx`þ‘|ks1…$–xâ3ÿ)@/Ÿ§^ý¢²%Ô
+…x#쨣¥TÔi¬þ!gï&ƒªLrÕ‹°2­‰™ßJÚá°?Nk]×!׉2ÝxUýæ‘íÿ­p³Ï‡ïºÍ‘báy€û¶ÝË„ &¨ÃšHõÄX¡‡‹ºðÅxõrÉÊÁsÄï“6Åd3§Y¿¬µƒÃ%i DºYÚ!8óžÍòT	=–¹tûPÉ;=éI´^µäEuGÕêÑóc}ý`Ž‰Ùw„ât{jßÞã¹|[ØøfeÓ5¯ñ—¶ü®žûW
èÚ•ä& gÏÎvl­<ÓN[å“þc7¸z•Ó†@Kªt\ncÂܼTÊ’·güédÆ@Q ·ÿÓ§±’Q7á¢V¶‘âÿ–¸®Í›n@ôe–
ê6ÐnX+ì°­f…Qò‘	ÁlV5o¹òôž  wCû†½ ,¾^êýÕhªö;›{^6í~BG‹Jö”FÛ6K:ÃZÙŸ&ßÒäÎ:¥]4x‚­zmGž¢BVãû]@ôeZø¼XRLa”Iq¤f`UæN4%øvÊ\Q·Ìp³‡	v!Áü+®Œh¿Bwcö#“ŒÚ±¨E³„ï‹•ËÚªi1õàÞ”¶^zq
óë¹¾˜ID¼šü|y~¾Óú¿ÚZ‰
+YÖùÀÃÔŸG]m»̤ÙRŸ¡$¶T|z¦€T-)V¤zûnúaL,¹Ó0fçûØ·F¿¿›2C+=Dñ
•WuHd&Jç%WSËÀíC’.N9Æ”gj;3<©y¿\S=ÿ˜3*Œ{Š2(>åš×–Pf]O¶ª=«)ŠúA'}·¾¥Y/Âì†Åm€ð:áqŸ
1\ÿ¨XÈqÎ-AcêÛ÷¢ó}íW“Ýäù%XY`ŽÙ
+ÝE…ØŸ-¸'þ¾á†=Áô ¹Í^)¯acg¦¿¹<hÕ}éÁê1Ÿ]7Ü͘
PÉC;ÂÆ“˜NÈ_>±Èö<¦ç’»cü;«§ñ6L+¹&ü7[ït‹ÙÓÒ+»¶Š5ŒP@_£¹©Õ
8äP¼ó"ªÅ‹ðÚÎ&©MZ£u"4iøTÜ¢äGQ4Å`’àÿNñzSgô,>nøÈ8’²'¦ŒØ¶F8+3w&
sOjæ×îøŸf\»+üžyû1Éó\R «=Òhk}Ðǃ_6‰ðÀá?øÖæbH1ðÙfãR€èawpÂ<SÉQ'”éF3î“þ7„” ›Ö©hE&^#S¼çYyJµ6ðFÅM[W¨µÒEáBÎ$ÚW?^®‰šäѳ~°:²(Ñ«ÖQôáÃLI˜ä=·}dG6/£”©ß} ~œÖº³?EDŠ÷4«Ð¥MàôZÔ}ÖjYí,œ€vB2³d§ðªçÑ?ÇãGà{ƒÃi‡?Äßòëq¾;¯v\ <€[îDKCöd*2[½LBWÑ´§ ‹@LM›)÷•°_iý—ð÷6䉟æ[)—R·
N>“¼Sä3ŠåèE“Ow?Ã¥#•Ã;,l—ÈfS²cEw›JÒ@ˆi²=©(Biß6>—G^ýÖJâ{ì£?¥©÷ÜÖD:¸b9‡pû!‡*ù¨z1oèë <vzÏ’u¼wÕŒ
ç,|úoϼ±cÓÕKf	«¶ÅöMŠêŽ·É'¿ûÆú68çÀ¯îÙ6èöÔ£¡Ûvã’ºÛÜom¡TR·ë79zØjlR‘edé›oø¶­íÌÊ»þjCÿ3qåA!ë®þÍ©7ÕL“ñª ÿ7Ò\ošCäóÄI6È”šc^}ï‰]ÎþƒìØ™Gx»œ¶×;áÆnmô7»€.–Iè¡Ç⎓ ÖßµÛÌÙ³„‹‚ßhžÜs-¸ÜÆ™¥e¨‰9sÎåÏÈ‘,€¢
+@sã»S=DÕÚ”·üµ>î—çBÃ?©Y÷Kuõš(ãHº9¢nßY¬q?Ùã1mA‡+Ü€0õÊ1=Él½Å«rÒKW¡©¾MUDæ‹ÜäõGµ­U~‰ƒVxÜ°VÅ}GÌ¢ù?ŸØ¬jÞ:4oùõ!@]* ¹JÈo¼˜pµ“/”©ÓKÚŒ²ð"ïî†ëg]Xa¼Éç·Ð<Iñv+ö¼þlÇü„ŽæœÆË?ÏØà@»'<†ŸTC؇ÿw¶¾K”&ñ5Œ«l– t›´¯#L£¹ÕtWºhð÷:ü'w{úñŽ²£ÔtÖhPª4uÄ
+"ÊÜGôÚŽ:!Y„¬$Û뺀õ
+Ê´íe$°¤˜Â5’ûNèלÁñÏã@òL¶wͽ]’Ð@É7(ˆWâUÌÀªÑœhJí쉸¢s…à${ìBŸåVA\Ð͸*Lþ-Cˆ ®„½•S’l§ˆ;U{ÀÐc„îÆñF;.©MŠ{Ã7‹©IÒb÷Ý¡,j˜ãÔ
+–­b€ÍVꆌ-¶|Þs>Í0AÒ½çd5q¼ôâû
+Ëoa-’ˆe)åøòüa»éc©6Éx ùðá+œ¬Á¹ž]\’IÂz¯)“󴲱#ŽºÚk(…U¯2¤#_Hq¨øôH¿J?üG§Öœð"FMG&ÛÁâÂ1Q,¨:ZR¬UôëÜé˜Xo»`ÌÓë­s<Œc­0¥(¡‚:2ZõNÎo`̉³fÔà¼v¶¦c+d†Vzˆÿ7®*êÈL”,ÓJ®¦>‹ÇŸ"x‹DXi}™Ê»ægð9ãŬÿÊß­;×*†9\œr‘5ÎÔvfxOòc¸¦zã-=fTö	dPz0@‘`jåX³ØQèþ”€Ó
+Rˆ-–FC^•|×)
+³1 Ìºž*qIzKR	é‚Nú*saW²^€Þ5¡ÊpZÝ0NXîv¼j|žk1ON
+òç\ˆ›™Å—Úýtßâ#b¸"ãM°âZ*‚ÆÉeÌ
…!Íkq†
+½nO–p¤Ï8†øÉšÈü«óY>ûúÇ®;§ÕïJ°²À(¯§Š­#ZmWúE3é8\²ÃüHFGŠµ_èСÃó„i`¨Náa$ßzŸõ]o‡¼RCÂ*ÆÎQcox,з.ú²è})Íêª	’ó®^´ú_±'.Ö¿`ý?ÏŸÉb#ºn¥‡-$ †v™‘;-œ¾|83–Õo1A¾žÂ)I
¿W·ópîŽIå6Eý*ñxQÓ9kÆåvKSÿl˜VoLån¶Ãè¯Ö„íuª¯h_ì¤Çï¿ù%s¢1j»¹Vkq	j$ €¾*[oO·pÕ eûDI—ä²¥[yŠÙüC«Ä©&¬W:Àó`Ähô­Îý©LOš´[êDhÒí2¨¥YÕŽ¢h—À9Ý㜠A]adÍêûJ>_'Ð.<ñîS‰—ÙYÿô¦ÎõX|Üíp9yNQ­qŒpVf6îL.ýºÃ磬JŠ#ÞBáimrD9/õ†¤vëæžÔѳÁí#̸k*Vå!òëbû¸¤]Kz8¹æï‚ÙÃH{DbÜBZ‡œ‹ðNÜÝÎû0|(ÐÖú½“¾lýß~í±ÑÄ.bý¯ÌÛ¤ÔÙÊ÷¯hË(¡™´xr‰¤³Çï×™Öƒ|‘žØÍÂîà™x¦¢N5ÏŒfÁ;*án5]+±OЊ1Ëò틃vÅàQæ+jéùN] Q$¸êOL¼F¦eÓ²ò”wl(.ýŒ—š¶®Mw¹Šß„H°µZ«w(bŽ•:E"
+´âí_ÑøÀoλ©®~¼A8)<Õ¿>{6ü}tyP:¿K±¢õßU§b±SÃß¿[{ÛÜ:ùÄ/Û2"ZÏ›˜6’-ÕzsúÈŽl^[5O£ú@ü%±i{g‘*Ÿ?ã츞á)ñT+,Ü0ž9o•ûS¾~Šˆ	óhK½W2šÝõ´µú±Ô2²ÇX%삃…¸ÝÚùV³z
+$ÁÂÎaVËTèo')„d{ÈSýIÓ¿~“ÛŽÝö&›Ò~•£ù:ËâxmgÚ¨-ß´º|‚*ÎnQr­¦ì0Ipñ'avCì¸@xþ¶Áˆ–.†ñÈT,d¶g˜„®¿u_	þCîzPÒè/šÙ¾„¿½SÑÒ4ä…°S@*€˜š+R=ó7}¾&Òç3ýólÕ#ѯI'’cJ½5“—Ú²Ñ.§ñLH—F³E¶R30¤s'œ|;e.¦Õf8	×ÍŠ;žî~›WFJ[/=¶ˆ÷ŒûÒ_L‰ª"^M~>²?_ç}ÎÑmƒ7,›vXØ3̦yÆŠî6+”¹€
ÒyzOP„Ë%‡{J#ã«ï-âÁáÎirgÜ <AÒ>£l|3Ž¼ç±”ÙöÅ[~WO󥱈tmÄr.7¿anÈ^*eIÕ½~ú2c ¦ŒÕñçÝŽHÖàëBTïM$ôb,ÞÍË]xì<ôƒ9êeî·÷Oè„y*ŠK‹Ò:ó(꓉úªZ/ÔrÓX4øéÞƒe<0Æ>»·–ÌK<q—ñš ùÏU&9HäËXØÊɃÂá%mþX‘'» å	ÉsNcë‘élp ÓCÁ*¯lÍñµ[_«õÀ~µ³}öGY‡ßj:k4(U´benìÛ9i«¥ÞÚ_¨¤"sËnrô­Ôؤ?ÊÈÏ+<Ò%d¹^L8ÀÔÇ™JÚç«mÀFYx…ùÞíqGÇ…‰káÔ†ãfâׂBËAá4‡On·˜"ämJÕ~ÔwÅ…ý!ï‘Ú¢õ«´ô…Mÿ$];ÿI]ãn¹¸Þ*)†Õû•’=l56)Ƽ2úÃÇöUPñ•i.¹„M¯r÷bªHdJƒM¿/‚°ùʺáÅ­/Žðk%q³vß‘ÜÚõnk"\1’ÍFˆý
>}¹é^Ö¿çä«3ŠÛ[Žì{¨_“Ù;.@±£w"«…¯{2£Ð&!¥æZ£šÅ)ÕÀˆ'Ç^…§r—Eüt¬Ç©µ‘ïÜŸm¥‘/WÊMræ׃?XY€æÛk¦zþ‘¬"EõÛhÜ‚¨pz-j°k5‚¢øN@;ˆ·©5såw|Á3.Ó„›~O²ó–ê÷.)PÛit¾µ8a§ê¦Jú#—‰wÇ„•BJPÃkÚ4¬rYÜ£²Eâ~¯ÛbÚ‚V¥`÷‰0b4zØgŽPÀ® ¾2èÈuó%¡hö…w§ÊÅ⢗Kä¹–®_OašªˆÑ¥Õ÷Ž8wGªü¬ðkBø´„UÙ4ΡvRí‚ùÑòÎ…œ·Q–5¥}¬—úŽ….Yï~$#­EÔ¡thÞï÷B€º0TYt°šèuUŠI÷‹Wƒ/Z}¡Ök‹ŽÑ0ð
+‘@o”Þe8-à',w;^5>O»–©'yý.Düfˆ€Ìžè»‡¶CÐ7©
K8RéC|êMd~Á<Ë"Î,º°ÂeÓs½x’ÿìVñeáØ“å= Æ05ü,×l¦tJ@çˆ)D˜K#¯/Ä$Ñ%‘‹~ƒ­Ý€kNx#¨†­ãîqa–Ø
+ÜÞA-Éô'g¹0
fÊ×3Éjp^;[S5LÿjKØ1@è+uCF˜[>o·è®iÐý2ê<Pòxþ›NVîŒÒO± .I†ÈªŒa=ÙšÇ÷ó'tåNîöéÿ y&[µè±Ð Ih ê•D‰¥.hè\&˜¯DPWBÐħI6ÝD“¤³`Žõ©tB²EH«Ëi÷‰uÇÊH}U-™j9ò‡é¤’$rë,‚leêÏaþœ¸,ÆÓPüëœÍ³%ŸÿƒÛ€ù˜qî‡þgº9½€nP
®•Ñ¾7d/¼ªäÐ?}¿‹SFäöýàG$kÙª…I¿%ДÇÅmYæÝHö&$Å„#׬‚
+%£™[DõFói¡&ÊU/¨?Y‘¡ý°gæ¸Ï<¸½‡mT˜áZ†
]>Ag7¦9ØS
vª8öÀ±¡Š¯Hw=(it™Mâ_BÑЧæi‹rÌX½ÆÁ‘ÿŒv
+\Oþš	ö*›nO’¹Äó§_AÏ	̃\àmò+×=îa‡g¾+ë*t¹šXÔ-Ûµ1Gć¬ÉZqø¡æ|‡`‚¹gÓȤÝ1Ö§ïáÑ£³ã…nòbH™Éã	-é
jâeõÙ4ë‹ÞÂZ<9
ÊR×íùåÂkÏ>ÆOl–ëyøËÏ;‚ìp¦s›5úò' †P¦\ŽŒu©ð]ïýßV%EŸ
+o!þº¸9"’
+™ôCR;ûsùAâï$†³"1n!È-	‚ÍNËx'nàgó>u(y<Ã'+wFi©ÖPªCdUF¾âMíõ‰4t.„±LÙ"(Î¥!hbݪà"ÇR×0c”~å6ŽS:±% ýDŒš"ŽL«ŸÙ™bln
+o®€‚˜êz½Òˆ3eå—ê58/“£§¢:XMt´¤Eªõ˥ϙ-°ÞkÀ…»ËGæxÆ^3D@fOtÓÍ[¯Œh•Úˆ«)ú¯>u¨2?G(`WP_td´÷œÞÀ4…{̵ÝeìqQ»!|ZB¤ÉâgÞ;)øAòæygÌNÕ¦K”ÆVȬô
ã4nAT8É=˜5X»”AQ|' “:_Ô¾ÝuSÀ%}ŸÅʵíB±Ä!%(ï»mV#Dðˆ°Òú/‰kÑÎýrÛ—E㉣Gv³TßMìšä`Dí/ÌÝ9Ŭ~:VíÚÔÆùnÁr¸%ä?jµìÌðžùÆmQôÛZz̨
+ñÈ í{¤(öĺÒB¨Ù9õ1U$ƒ2%ϨљAXòeô`€?ÀÔ×°{­¢Íá5»¤
Z1Œ†¼7iœ2Ò/&`‹jíÂ%ÎmýÛ¸`#¢<̆òø³R{b]…i!Tâ’ô–¤ÏœéTæ®,y¼ºNi™0Ë5øaœg¸ðã\0ŸQfCy¡j_‰à´§`œ°ÁìeÔø!ÖbžœùÓ¸
+á¨vMr0"ÀÎø™fà’ìV?+ømjcò7î/—" 3©:çè£ÙF4ÄmDÛš}Ù´T‘Óž>-!Rêq
½o“Èš|®ys²½f'äS«JÊ…:B‡Ö&âgÜž41àUƒpí)å6Œ7¹W@ALu=ÀÐiD—¼üÅu”™ÇßÝKû²|ëé“Av8S·Ã”}yPC(S	.GF´Ú·ò®qùC×–7žd˜ŠAè'ë<7p½÷Ž®éŠfÏ.p¸y›åŒŽ	w¾Í½_›û:ÒÀMRà–kÝùþæß×ÿÌ7€y1É$Âêÿ‚†Š˜úˆœßÂH£"ô#÷ºÞe¤†™T‘¢ÆÞðX½s\é`ÖÞE±Ù$µº:¨q¡!æhÝsº‰Ë
9f,yÍúR‡ÉI9ûA6¼ué¾N\±cÀç(~…Äæ_•2™„^Urh‘°‚Ñ˧#r{ðp­»ƒ#ÄFiÜWZH04]ì/?vZ%aøþp*“ÉT’†0½>a—8ª;d›Æ@Ã>\”Ѳĵf1·Þb‚a!™R’c,®sûàÁ’×<lŠçš8«Ópy±·þüö3Ä YKŽu	¾´ö®¯¬&°"Tÿð¢»rÖ‘×ì–¦ãØ-¬Þ˜×Üq›ÍC¨ãýYkä±?³Å1QÛ­ZE¡-³¥â+‡,†±Çê*ICоÅU“2Ãc ï.JæYbÔMÛç8²ÖÕ~{—b¢«G´Š_Z{WÙVX0ko¬ÖâÔH
+]aT¶Þžs4à·]Ê눒3Ìbs¡ÄÂB/¤94ÆXAæëÝŸ9³x8Ø	ÓÕyW¶ò	¯å†K•O2LE®tûÀ•8ÐõG)pK»àòsáåñf•@²–êauñACEL}DçO˜ž)u¶ÉˆÐ¹ÇdM>W²·YÐ3r§Û%F•ŒÒ¥ ®&´`hº"Å^~ì´JÂíáà]'‚ºÂȇÉë”|¾N½\xÿ.Á¦3¯²þT;¨9`g|Â3pIvÈ+‘€›|¸5¿y•w
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc30.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+ÔöMIÃÀKbFg±ÙŠ3µöH.äJØÃj‚–ÔöMIÃÀKbFg±ÙŠ3µöH.äJØÃj‚–µñš’›–Ä
+ŒÎ,¯	fwñ2$\Õ”­›Ô1a×ÛX]ݦÊ©Î:vƒUÂØ+6r1ÞuX¾›§wÿ)9+'1•þXCÌîÿ=dH¸·5G+,µ2b£	dpèçz÷CæONš˜ÿ[	u}Z–SŸè'ß°ô³«°º§Q‰Ot쪙­Vläb¡ê°:a+Søþâszì3Ï(0b5‘™,øåO~ʆë2s1©ÅîãRrVNb7(
+á°†$…ÁãzÈmsjŽVXwdÄ:;•Ž)U-LxP¦_®¶t2Ñ‚C— V•SæR[ÈàÍÓôó"†Ñžœ)-ã¶êú´1¦þ#ÍN£}õä…©¿‘'À¶/Šð§Ðä¢ã¦B´ûEÉÿc™{K}iS¢<žèÅ6I/G¬ØÕÄ_É}tÂV¦Mê6¾©À9Iù®þ¼zšêµÊû ¾¨Ô0,íáÙæôÅf6ƒP`Äj?/Xíמü‰ËdæbO—ø¬%4Ž3Å7ÑÒ³µíŸ‡î§õ¼%i|ÍÁۤ䬜ÄnP>ß}HŸÛô=ÚæÔ¬°îÈ•-é­o\URYnkÈÂ$*-¼”/ôžÙo»„Jt*>v7RªZ˜ð Q¾Aqè*d¿†3@¬7¦:Ѥ Üs?ôÁÈ_Þ—GgËB]Ü,¦¨×
+tô­PS2¶$݇»õûD¿!%RZÛq$ÉéubQáF‡œ[ú÷bÒÀ”D{¾™AWØ3‹ÐèÄÒðgLµ«žD—1xaÕO&c?Nq^	ýS½ÕYÛQ>„uëŠãÆ×#Zßæ(]KÛï$ÙŽ³#ÂC`?3ßåaP/8ö–úÒ¦Yx!>Í—l’^8ŽE­·•¾ú虬Qûλß9í;}XFÛNæ¡ëÎÆ\¿™qôW9ãó.ÇšÉlaO0r’ïAá8eô)Éw‰ë@*"aþMµ`N?!M¢{ÿwÔˆð÷áïÇœ?Vn›Å¤`ú¢õ'7öXÇ߯Ñõ—Ìl À•Ô~^°Ç³!å"‹ÈÑÄ,ž3Œ1’æ5Ü®i]Çqƒ
ôm1û8÷!ÆÁÏF¥í6E=Jhf—n¿¹{w8Ç6#ÁS÷eJÒø‡9Àt‰¨JjcÑ	¯¢ýrÀk
+Ó}U½‰Ù’”Ÿ«UÕE%•Ü (|£ú".#«õz©ÑµE}Á7K]œ†åÞ¾¥nìû–]½h‡5ÿÚ†v«¡*ZÏGÞ¸ª¤²ÜÖ™HTZe5^õ!¯Þk”þ¬‚xHz¯âÕmÀT{á¬-,LÛàkw`èT|ìn¤I´-ý]¢a‚âÍTÈc2f€EnQt¿U<¢1¥­Âï+±kšì´¸Ñx¢€z ?‚Ê­Z=Ã]¥æ~õŸ2¾¡3"ŽÎ‹„º¥XQM³èõG ¦d‰S«76_yï»çT“˜·SHcW^06LÊ$òqH§k÷ëˆ"cBJ¤´«âHÏêĢߌ%¶éó¥¾JîЫ¼‰dó\}>˜W¾ÇÖøêF•TÐ.ÜkeĹ5ˆöa/‚®­=f½Í•¹ýΘwK!ˆ3bðÂOÐ|K6*M‡èÊŒpÒ7þ OWäܶ“ùK8rT·.ž8LÆ~œ'â¼ç¦g·²«¢|êË8	Û‘ÒAc×ûŒ™a…
>,T¹Aú²°Rñ ûiY³F´£ÑPº–«,Ã>H¯{F"™† À~f£× g°ùE`Ø“íKr(‘%2ΰj€”$4¾`½@6^pñ1é¹Q²ð<B|‡3Ø9¼pŠGs7aéÍ/E¢Š†¼x*yÐõz%Í‘êR
+	†I“U]Ó+Û*ÆEÇ4ëk£r$Çvú°Œ«œÑ_Ë‘¸c/âõ®rÛû\“?w&ê±äŒÿöë²½E[l~wÙ¡q¿v±Ð‘Þ)Øž`'ä9ÂßpÊõR<îË€TDÂášwÀýy•A^+Eá¤3É©@Æçyt÷ådœêðõVœ~BšYöãîµ
ýóßÓ%~¬Ü+—UÀéY÷NnñHˆӚýëójLåI ˆäÅ9¹±Š1šü$ìg°“£C¿÷3…Ø6]7µü¼}“{B×D¿•X!fdeî
+|7xçÝp:,!lvÈe3[Å0 AU|ž2£ðb9Ñ$j¥AÒº“âõÚ
+bëpóB‘Ÿ $ƒŒ8WÑ”t˜çªî#×üôS
Ãé¿”£iáluÕøçˆæºÁÇlŠz”ÐÌ3Ücoöîp“lF&Ÿ¦ó>Ê”¹íšÇ3WIrÉu»Òy/dC&š?ˆtW²‡‘’rèM”ÔÆ¿CYçäÖ»ú&ªg¯9
+5¦k]¡Ì߶Ãùu­U€m%Qkž
©ÔÂà¿Ì¤Sˆ£#Kª·ŠJ7¥]Pø[éD=\FK÷ôO¿wŠúŸn÷½çþIŠ|ÇXŸêÿ·oó½¿æa[=ÜIñõ…ø–º0%סaWÜ6$Åë4:1ºg<Ðjã©ìK_BL}lÒêRšQ•Ó2¾	„L/%Â=Ž©qÒç!œÉT´ƒŽ¡m0IUy¥±/¨´Êj¼÷BC¡Ö*5€BÎÇb­MRL§Þ¥£B‚s®Ùì›bÝ@·šáE:ðôCÙ·Ú¨&ößEZX˜«ÝÖî:Àþ,=5³TUù0Û–FŸÐk‹q¬Åj³AŠ…9œ6ùË”®«Í¨øÅÜU’uZçºYÂÙ‡¨Æd"ÌŠÜ¢ècª^µŒÄðp€O“ê2^Åßv(WR©‚á<xYbWG™ÃVÖ)Åum¿ðYô@~‰'G´<z›¬¯/„Yˆ4zNtc´šŒE¯UíRPýÃÿ„¿Vø
ºWÑü÷#da_fDiW°¢,š{(Í÷Ž]QÈn¡œµ4ã/edõX&Ü¡ø»>´Ÿb4…7Ó^¦Knl¾òÃkÓ¨;-.s¦ Æ®¼`l˜‰HùÛP'¯~¹¡n•ÏŠ;÷ˆ@«Ph‰èJö¸¯“ãÊoâS&ÖóË
DÆ„”UuKكɕY£&JqÏû6fC帩¡5‚ŒÿxlfKšÛ»½éÝåAMmWa”Á½KeÈû¸ú|-®a“±íÉŒ7¨½\¥Öʃ—Ùˆ~‹.mŽoJ®#ö—Û¨ÿçh}p~WÏT\•o'j
ñÂ^AGzÌg‡7o>ç-î–B
fÄý™A™j#Î1‰< ËÚÏí´‚™vþ“
+ÜšÎm® ž½ø–lTš͉à¹ná@ž®Õ¥q;ï–pä¨ôhð±U¬ø‹î´ö`äÒõhæÌ·_ßH7U{zf>s\!p˜‘ü%NÙe$ÓQÎsyKYø*É‹p«?Ø…h³XÚž ¾Ô2
+Ûý­…1RKÖ΃S³l)©¹‚Ƴë8/Â|X¨o‚éy}¤ÿ]&ëÒ²mt‹ú(ÅLZ*„p«¥Ò›Út¡`oŠþ(¸0˜{Œu[¿ i1KX›|CöŒD/@üÌ[>³™]¯z8Q˜ë4
?*jIÉ1Cz6ny¶˜5ÙËÎ}ïŠÀ"6­;Ç–äP?Jd}Ô5HhaÀ(g€l‹¢Ãâ}Ï>ñUFæÀW4‹œ'2¬"¹#
ú¼àÿbÏo¢yýx„øf­reà	ŽænÂχ^ŠYh²+¯éø>ãI¿'AÐJœÈŠˆÞŒ4Ï	eðTò4½÷ôJ‡?ɤ’;ªº»V«T‘Š“hÝç(¹—2ßò²-6).'§çÚ"¸”_s—šàþËÖ[äH“ìé}K%¿¾‹?mÆ^Ù÷Aä«ë¸;é›'ˆØŽì;b·]ü5>éwtÔp=½™' :­~îLÉÕ(ãñËygŠ¶Øüî¯_âcì½?¡
+ª€¼NJæ·¬ÈqS<ëIçFð,è)4¼¶U#œR­™!ÀNÕr›£à‰÷¤xÁ‹¨ˆ™ß)î†õàYZá‹,Ð4ü¨µ9Äõ0Ø¥ùâPZÔClçò7‚¼VŠßþUfO€‘Óòèó:×È<%Éý÷¬3zËÁ|èÚ¸2×™–
+¢f ê(ù,výÁ—u:%ü„)²ñÛÁwçû£›;JüE¥V3ªÏ²óœÜÿñ
+É`qƺ¹Ä1}Vízÿ
+
¼DN×qøö^i
»)›gËûÔ˜×’]=
Õ—ro	b)åHÅÎDûSòê[,}ν³)ÁÕnˆûŽ`A›Cºêî"GX};[†cóf­lº'nwåeú;ö„³<ˆc7°BÌ©ÍÏ 3-u¨*Ý–x®oVO;¡l\ß <ÚÀZÈÊÁønðÓ§àtXBØìÊf¶—`]‚ªø!d[ý<Œ];®»±¢¦éTf08<.¯…N¹Èr;*Ùk
+Är¿HÔW‚¹i;Ù64÷©ÄËàû„?#@Hp®Þ2?ö‹à¼/\h í}š¡2ƒùéªÛi˜‹oò8¿5è-ÓIÁF³åõ¦›þÏc5[ÒßØê·íÓ
ÑiŸkÃ¥d‰Š$¶£’BtüÖÃËÍöý5»ë	“Ø	ô5½ …f¥ÆÞñÁà;ØŒL#Qû|‰5oÇ&G.D½ö}OB€ ÂwÈ(KÓŽ.ÄU16Qöd­¤ž&)“f® ’äêk¹ò^ȆL)~
.è$®y?9òßÞ/màÙ†Š¬ä‡BµùßTg#Ê¢ümry½¯ä' Íš5µ‘c$8†²Ó,Õ'±(kéLIÎCrj0Ñm„ÝZ~×”%C‰kY`Ñù1yǨÝH–üQÖº_…£q›ïêGªÚJ¢Ö!Oµ™Ýc…U¦
[… ÷FÇèž©ö¼ÄPy i]›}—»F^ÌÍF–Is	”nWº í¶Ïˆz¸Œ–óõžcî	é#Ü’`:ÊT%5¿æŠÙQð‹9`»ç°‡¤ÐÊâIŒJógÓá’	ø“°,#Éã'sÞûgc.Ѷz¥’ÿ÷í'‘ž¨QɳñµjDxõþùíN‘+7ÃìR0}Qô•{1i`J"³_®¥lH—ËhtbiÎx½&ÔÛO"Å–<¾åŸ-ás «ãùâGן†a¯0‘—áÎü¾(„˜úع.ɤ)¢7»da˜^J™zOâ¹ÓB%Pn·‘zî‚d¡oņ­½ë! nS‹Tå:zØ(§¨u_Ú`’ªòW^=Mu‰Ôeó„†_±Tj|ƒVHœG—ì•æi×ÔøƒÁÍwÝôÎ^œº>莄“ÄGš¤˜&<(S¡W[:„æA¯Å+ħ€s)ÉrÌÚ‡ÑÆ`[™ExÝhrQÿS!Zó¬êñ¿ßŠ28tý=õ†¯s©'MLñ£Š´°-K§±ÁtáXz|q·=v—ƒé1”ÆÂ|ü©?eCû·–‹Úìj{¨ªï`«1Œ#½ÖâE—Ô{$‚	r%lï‹5AK¾åã, àS‰eÚg;Ϥal›9–o´,€_Ã݇Mí—¥ª9ê´Ói²™2¯M‘ÈD…:	¥YÍÆIS» ÞfÈá[ïò´Ø¤@¸œ¦»OˆÚjapÑfR§Dß2¼w>•<ýà8ž6;Éd¼—£ìP®¤>OßxæJ:LýUwŸå~z§ˆï±úÑJߺþ6´ä|ýDs]îð²Ä®Ž/›¬þ±R—êÚ cý²:õ€ü2NŽuxô+$D‰çMïÐÎû÷5&üªPHDrì’ÒÖE–M~v½EC^<²
hô=œèÆu)ŠCªÇ¤ ç›ãc¬í‘µuÖrF
+ñ{ûYЬ£6?µâÞ¶ŽÑ;ÖhÆoŒi®¿åóFȾ̈*Ò®}YX)öP‡óº¢½Xò¬0†ƒlÇø«9ÆœgX5@J_0
+Ð Ü_%whÛ^ÊÈ2÷.°L¥_ík|u#Ä*hn»¼©h>«¨ÍteF8i•©¥rn[ÇŽò«9*Q–ÜØaù›Ö»MvZ\æ<Q@=‘AeÀØ-ïʧە¡²ùÓý*ÇL…ŽÕ‰§$¿¥/&ey« NCüo_Ü7ƒ	vó
€K Ð4Í”ñmC;Û‰ÞVA€<$=Ùqä¸`*‡³þV˜&ãp»µ€0±HÙ=¦L±û‹ˆ‘5ªê–¯=7²[
+LӉđ
ËQïq°éÎö¤#s`¥ËNVÒŸˆ}l̆4×,mO_jãðØÌ–)«kgϧׂ6šÚ¸:Ë}ì&-B8ÛÜiÃm:Þ0¹Eƒ…‰\L®Â5Ÿg–ÊëméøZAÂ;ÇnMg¸W±‰z4xÖ¤V|ËwZ{0riô4sfÕ¡á$•¤³=33¯
ü\ÚÞ”AFñ<63«MãÓÐúàü®ƒ¨¸ÏÅâD?˸G¹%WŸ{ƒÅãTñý4°8?¥é*.7ÞNÔÿ™¼2‚Žô…,ÎnÞ|ÓZÁ1„Ì•ç/ã(Ù?ÒÞ7ÄéE“õD Û(4Ê
t%{\ÙÇÿe¹‚/ÔFbx8@‹©ƒÇu/ìá;¥)ÚAþVÙ™B¢D=H':¿ZMF¬Ù¤ø)(ðïñBÑ+|ˆ@!gí1ب)&‡
+ÝoÜ߀!A·WâvÃ1à ÕM”×*¤òãK#Áh»Ë¶Vì5×	®EÌ’NòëJWÛõÐýªE>í,ÁuñÀÕ¹÷ÐÑ…s¾£nªöôÌ|!&°6i…u)M¦Äç_ŠB&™œaGÚ¶iýžNêæ¸Bà-?åJœ¯ÊH»¢0æò–²íTà$K~Ìõ#ít‡OÚÈ{^b(²…º Ã°ÅÓ#/fÉè­"Ð{°©!@aµd«çGb¤–±¦{2ØROyáo™¸pâCEVrÍ!Ôòá*½„ŸeQ~¸9²ÐÙo‘{Ë
+p^™.4ø°MÞÏòúUãºL˹y»ïÜ2ÊE[ßI…!:~kï‡ëè{ð”ÓûŠÚèéP—˜´TàK<W¹+©è_ÀÞ	6.áPm`-F “WÓÖQS‡ú*Ž3ÙÌ'Òd9“â»öê0¶c]Òb–°+ø=†ñˆ^"€'å…¶|{/º"ó§yu£°gÐךîä7DóÀG0®Ã¯]uw­,Côp¢-þËh~TÔ’b†ôlÜòq(-j¯6‹—=ëî>€tm\åÂKQ3Può;ðîaÅ´úÃ	DlGv“1Õ ~”Èúµ:j8ÐÂPÎØUŽ@^„'%sÕVd¶§ûªý#xtš^[¤ŸN4Y›Ùúƒ|ÿªŒÑ®h%NdEDoFéàýÒűáyY˜šÝým\J¡·ÅMp†eÝãăÞYòçðí&ÌGäÊÝÑÜ™ƒ¼	²±+®@â¶r\0Í×+Lÿ8ÓÔ@Ö‹$Ð,yVCÏ6í|Û’
+cN‚½,” %	
¡hƒÚ4Ûƒ„Tè:¼#ºÄ±ÚÜ97£íGyÛ’"Êý¨ùhgóõ”~U($"9vIik¬K¨?	;ÐÆÔ‡´k9#ö³ó¢hVß‘Ôqo[Gæ“k4c¹F§ÓPo3dþ£ùyZlR \NSÓ©Dm5¾8æ3)Ý"ás%&ð¤µÁü?=ÝDùÖ}æ%á]Zr>ð"· w‹>±¶Õ;ÅÏú
+–Jca>~Ú‘¼¯ó‚ÕKËmv_ÈüÿPp§Ê¼m½€“éR¾È6Ã’K¹Z@¡ïà>Ï+$N
­ÅvÄsºåj|Ïîèµàzg/N]tGê9fmÍæcÀ0£Â¬<à4É9¦ñ§Îž-÷VuöÑüÁ˜þ·
+PÛÿ‹òÎ	q­åÁC¾ÙÆÅþg~_(7ÕÆ=wA2Þ¹ìCØÐûžP7§Ë*üŒ=lÝ‚I0e*œ”ÑsEâ¦xË’0ÓŒýXÍRheqªF%ÆOT¦ê×öÔ5"<ôòø'Æ›•ïv)°¦zÀij¤G /Bœ·ä+2[ÝóUðŸ<:M
/£RÁ'pð
+iì‚Öþ²¢LƒM…Ààð¸†.%ÞÕì¨8C±÷ݲ´ßX½håMwr•"÷`­WïÙ ´µ†ØÅûw@:¸.‚üa«Œ¦—(´
+y“xw¾ìZ€Óùne¬	£áªÌž?»ùÍût³xJçóE#PÇ¥çk¦§Í}G—…âfi2’Ç„qÓfô‹Ÿø:Í©md³/1YÌ]ÉPïXì矙3êt²þ¹Â\8q¯¬+9èžjyþÐBÁ¼¦?\’YhâJåRyÿ«Ÿî4Óë[+v”åŠW¬fI'ƒyû%¥ãžXºÌ´Éš¨Sbý‚¡E!ÂN¾H­m[ºðO'uÿÀâ‘io•bú¬Çô"ãeˆ:œ³.âíñ¼Ò+â‰!Q"
$Ñ-¨#VâR|šxùö!æ›>D=<kR+Î>‹ëµ-³9ºz·3äÞþÄR×—éìq"‘ë…\Ž­Òœ¥Á³‰Ïìÿ*öðX‘Üúˆë¦ùɶXúg{RŸ·0Ü
ë'À‚+†iÉÁDŽ°\ë°
+v˜„!ã‰nºï¸oÒ¬Ï̱
+Ê.&úv¶ÆûÌ.GØiNÜî×Êévñ{x
,Æn}„….€ûX;‡LBžÿÊ7]ù\€¹iVéfÖeO‡,ƒ]fZêMT§1ðAÞ¬ž‡a'_$ظ£]x©´›qaÊž¦ˆHÀ€æ˜TŸ+q)>M
+<ò{žsÃ"‰Ÿ(íÜý»SÝè°„­Å‰Ìq3ÀºIíBȶçYÒa.¶ÙV›’tO5²„h!î^S‘.I¢4q8xºvAkYQ&ϨÌ`px\CœoävT¯ÖìŽHóµ \A~¾ÛFSÅŽZ²‹Ç<µ_v-@•äcµ®oÒv¯lhóO(•‹Ýë~F€6
+àAÀc©*Suå{j”z±y|cÃÄù;šXS=`bסd~ñ(8Ýe^¸Ð@Çú)_dïÏI«Ò- Þùpu’3¸Èès¿`ßaVpê’SöÝgO˜õÈ+´{æcjÍZ»’ŸŒ{×÷Q4+áƒÆj¶¹£­ÉsÇ»¿Ò#·œ€xRÔî~‘à"òk°sœþ ±ƒ-9xÕPµÖ›WÈ 	Hq[9.„èå±›&‹‡ñçj kËmãÏB*t^Ÿ]bÖmn’•ßø­²ãI„;­õjg@ÌW‘¡ÿŸÝv­˜F¢ëøjÞ“Lï[_¼©§C"Š0 ·&îÃ[MTŒ²×©ÕùΆŽ\ˆgñúž„@™îP–»\•ªbþ>l¢ñÈGU!ZªÅ.2:Õæþ_›‰ˆ´ªÝ³pÐÚ&z2Ã-×·LR;ÌA@9ÕÉÖoù¼˜R8ü\ÍHAò&~r˜¤v…‚€r·±Þïe"-¤på4¸‡‚ùLüäù£¡^Úݯ	EÕ„wÎ*F‰YåÚäògC-Uìäs¡ÃÊDZUà×8hm=ï˜åÕÕN@‡<)jw?ÆHpy»X·NPÖϘ’<†ä(Ô¸
Îÿé!:€/Á 1k¸7IÄá|ØYÿŽªB`¿Ú§´ü³5J†=Ö²>À¿ïbò“M,§01å´I—\dt·Ñ0á¾+8
uI§{ཀྵLôd›Z³s¢±i¾[â+ÃÉŽI:©”Y±B4žw/§ÆªQ¶vG$÷Ô΀.…®?_ã#§ìG
+-ŒYËíÔ¡;˜ @ó,Œ“Í&!Oñe• ò.@Òº+ú3kŒ¼…‡Ã¶¾eOS†D$	`@sL*Á›¶š¨y³O·ï
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc32.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+t@4®6~¢!!°Åá;7ý䔹³¹ŠýŽ7¬Xt@4®6~¢!!°Åá;7ý䔹³¹ŠýŽ7¬Xè€hAlü ™YBB'}—ßvnçÕ5o{o0	ç(nE°œÀ\ïZ‚0[ûccºÍR>MY1¡ÖÈÖ(ƒ<YéèÍЂØå@/²„„Nú3£0ìÜÓ·jÞöÞ`ÓPÜŠ}¹]ä,î›Pí¥¥ÓJöB<×ë.SþgEgx˜.DŒë&%%¸Ã´`¶ëÆÆi‡¤|(š²4b_±±P4x²ÏÍQÝŒm‚gptIççô7a$¡…ɆË>H‘Él…c•‡:½­×€^yœéf[`Å¥»sÔ¡ñ¡À$» ¥	úóz‰·›©œÛ44Y£ºlþ’F—@BØ®F´Š’¥¢oºÕXÁ+ Ç WW»”ñ„x³Ë\¦áΊÎð-\ˆËLJúáö÷U°‚vv&$4etˆü¡Buw9w觡œ‹üàJ'm›u2ÀqË‘‘ÒUøP)yhľ 6hðyƒ‡>gY5CLгi°°O£\N• *ƴƸ¼•äˆN/ߢ§ÚÎàè’ÓÓõnÂ'H_‹|?ØÆ7Öç1t/°ð*0òòhÞÆDd rõ©Ï©ˆµr̉ jotg2G³¼ò**%Ï̶À—Wkæµ_ÿ_Hk]Wég4SœqÍ
~P¸	W̬`–!æLæ…–I†`¾±ûôs+O=%«hh²[iØá9Œ3€0„0­AŒu	9WY´;Ý1-ç	IIŸžˆÔÚq׉7‰µËqa‡ûÞi·°ŸV]“@®®k5ÿð{‹¸Qß	ýZ¸
+‹˜”ª)ƒ©(MQâö…:ôü@¼EµK8º8åÐE„¼4Ì6éßñóª}
+ììLHhÊè
å_„êîrîÍS_%åÝ$B©ë_ÅÔmÈ»ÍÍÑø­+ä6Ò¢`~WÁWÕÙ¢1…Òq|”NÚ+êdâ‹??¹&ªí RòЕaþþ]lÐýòàî…Ü )$–o¬iÅ-qõG½GEæ-é‚Å·K|βj†˜½{Ò}}ž[=2¸$œ7@T‘u‘me7Õ
œ^£Ž†Ä°æ­¹p\\ëøÓ´«Ê¤À(Æ(uïÊÁƒ«òûYS
+©2ÝÍ9»»÷Ü™N¾." ø =~­.‘n->ÿÍ›ššjl\¯œ…þÆŸ™K™%ôþ¹€=6±Óbè^}ýT`ùùС‘ˆÈ@ä÷>OƒO
wä…@ÔÞÅ“VFhí–ÂØØMËp„ówªö0öý‘wx†&èÎdŽ{:eùTTJƒ…q3®ÖÑw¾ã¾'Öº®$ÏR¨úʸ*§[uu×3@‘™+5ãP?+®ž™ˆ—Îh¦%â‡ü mþ®…EÀ1BјÑ™1’Àaº(’‹Ôù
+>77ðN×O‰~÷ÌàÖh+h̆Ÿ÷Í'ëõæVžzJKÐÐy¶Ò­ßrf``G‚êr®²Ÿµ*H`àjˆéññ™És3¡äEø‚‰Ù¦Ù_øþœEêuv§:bZÓ’’#!
µ©â³(nw‹âÂëw5B	J°³³¾´äì¹’+W¼¶Ý¶oÖ+GZ¡Òs}#¬º;€AAÖjã*ýöm¢£ç´m-5Õ’GÓÒªù"``KÚ&ËñÍ<F7¦¡¦ÿ>š<mIR<OPš¢Ùñtõå€eŠw–pip×½Š2eh…=/’y.Š`{""l§±é»Rw“ÉÚÉÏ7w&›RÄÝlÏ£ÿûIú2ÅŘЉÍ×¾ÉÁäÁ‡¦¾JקH—QÍ7êÖää hÁ!àCñ]xWxŸ,C^˜à„O˾—µÚk‡‡¿íGVÕl¹YÀü®Ÿ®·¯Yb¹âøðÿ¡ËÊOɦ¦"]‚·ÙWŽ¤$h,¯%¤v™ŽN 5œ©VÉÈ'Ù~~oLIÇ]¤ù½7ÂááºØ½çù6&AÜøÿ¶7©__òüŒ&QŸÎ@ÓVX¯X¢R@ó–Κ~ÝÁ¥4@R<<H1ÞEÒ—Zâ÷ŽgŽŠÑZÏ—s–©\õ¹“J‚ðÕùIé §c7Ô7’[§Û— ßÎøyÔ-gö¹úú!¶zdmH%n€¨?ê?ÚÊn·%¼[ŒÁMz'Sw4ÛÛ¼¿…as“d<†Y†Â@“£”•}ÑGoุËí»u>K‰UP‘PêÉŸKùëdA%;K¯W­B™™›{(Zy|t±	é"éòIt‹•|U³²¦Od§‡rkkó¥/œ=a\D@í@züG\?ÜÆæ áRa·EÐJJnê}1Zkû ‚ù^ùbvûS’k“„Z&|ã‡+))ÔظC%2á‘#/–/Jõáo2zl.fH >—܉Ih}¢),u·–%–R{“Ö4»Äͼúç¨Àïï½_?
€Õó|žžîÕ€µ¡ûðcŠ„÷jbÎÎ ïÙÞ¶·(è'¨'d(·ù—;¬ŒÐÇ1™­­š"‹àûî2&Iñ`ñ*ç2?îðã{˜"æx×ó;ŒŒ’NÀÙÏÂÝHÓH2mÏ+‘Ù\ILÍÈötÊ﨨”â'fA±¿îaÛaN=±i AHƒ8µf7ˆdM‰‰	«Ò+]vL[zØhØV·L}®väÛ¤Mé‰m
+TS¶êê³f€=?/VjÛ ~4VA!/
3Ð
Ý'[tD‘ËË.ÖEÜ3+«ŽO··f¾«U¯¡kÐQJÙ4å],,Úá$AŠb„¿-¿./b9"Âþõeäïm$'ÿ

GQá ±ªŸìž6¥Ÿ-¬ªn¦iP9µï|nnýœ³žüó…ݱÐVÐ&…#ó‡N
¥ƒ‘¾¦OO`,vÇÄx9%iåi¬x­Ä+Ë÷<Ѭ!ô”–½½òq¹G£ä
+Ì:À*ÀŽ
+É$äAy¿·š_äV4œœ•B´XK˜Ó÷(®y™y–“÷ݪÓí!#wTÀÝÔ
Ïÿÿ/æf_ÕŠí¯Q¯¾íá%ŠÉW7`>ö£ÄÏmÞÞ²?#‡Sî½ý›â¦šõ«½¨‘êìStÄ´»$99FBwO8Ù{PÜîÙ™&8ËrªØýBº¤y†Û¸‡û{t$ŸÄ§o§ö$¨g\îj„8”"}{{auÕÅo9V>®eq§qÞ>±'VŽ´š*°¼.F„àßZZüÅ$caÃJñÈÈƈå©a"ì_¹æúFEiv‚‚±ÔÛTçñÚY[>$>ÓuÚ4(Zj+ùÒTp;y´¿££,dµëÊ!'½Ï‡—‡Ëÿ' ¦!ö2·9Ž»*¹IïDÀÀ–©L‹ÿ‡x=ŒnQ_Qã|=)xÚÃyºÇY-æáá‰jó¼OÀhúèìèûöÀ§O³‚’¤6xž )Y¯ÿ.è÷×Ê	î1àÒà³g	d*ÊÐæäÖ¨Þ9›
''bž-Û&ýô
+¥YaY«íôp¤ý|Oz$^9ò\	ÀöDDØS(Ïk¤î;©ƒnîL+¤•§dj—Ä"TeeEãºÉÃP“ß66›äX¥“9ÿ؃[ãë’é(d——-=½‡4³a*ŸÕŸQa”,³S¬ÃoMÝìùêƶ¶°xî‹„œÎ&f&Ûœ€¢„ÿÈ03¢‡nɱ=ÕÕ
+@*ПB݆ÿºð®ð#X†¼-Ý DC±ÙsŸôô—ðï1“yê{.II;Ò{¨£êºxž‹a3w©ÖcÇŽ¬·Øo²åA#AsC²Ä.oÙíaÞ¿Ï	¹Åt22þwKM»ãXOyqøøkÉOРXuµýã _‹‰žQQDºs¯®UHÐ.X.CJUì/œ]‰^׎iõ™\-ppÙ
+Ü’£•6¨¬D—ë—[À¨ø¡60j%O¬N¯üüÞ˜’“ºUïgn™ß8ßi­gÓ0ïlLe{¹ó^m´ÝÝC(Wr¶nØšŠ
f‹fq'šÇ¾ØÀ‚¥'íãqn6O¾¾ùåL¢#€»¬°C°Y¤€û1)üöåCÕ~ôퟟdUÀ­®¶}_8	ð	A.}￶…¤§8Ÿ.Wh€¤xxb¡0Š¹3´ÙóÎ	¿´ƒ23æ1Óx«€aBYY
Òdц‚I=g¸}¸5I—¼JiO¸÷o;”.ý::·6ï’Ï]SÆnµn9¶S«3]£;øÃÁ
ê>Û_*¯óžôj®èR××!<®¿½jÙíòµ"ZÎñoééBqôÈÚJÜM~É~©‰Üs4Je¶™_Æ$Þ3ÍÈÈßÁ1)Ö«}!ùÙÇzDZ!gº}ÉôN¦îh6««ecÂæ$;Èx²™€;[5$ qß®ZxØþª”ŠŠø¼¦öÎÝÆ,쨨
+ÆO»Œ^ "7ú¿ŽÞÝmm‹Çkê|–ª' ? É›#6–ïËTB™ÌÁžLL‘;ŠæG¡òN³ŒÑò7¸¡C“È‚Jv–C®G„//+öP´ò
+øèÏDÏù’è7øª{¼Â~Ø =¾…&¶F•Uþ1Ï›†v÷vá¹Ï#yQ(žÈ>SäÖÖûW^%z¸ˆ,€Ç€ôåŽ8¸~¥
0þ@CÑF÷÷fç›Ävùñl¸9t9ìoñš¶Òý‘Ñ@ߤÂsŠ½””Ü*Éúb´Öë]ï¼ïÄìë¦9Ö;å‘tq’¼cHµµAšná¹VVÜf²·á—M´LøÛ<VRRµ­m†J.dß?F^1^”÷ßÞ:dôØÀ̲&¥þôss(¨gFS"ÛÒç‚çŒ}"Ê´SX€\Ì]|'3¥’ÐúYRX
+8ês1J1¤þ8ö;
+±h(Œ¤óJY#g­11`?¸^c=Åçˆùˆ¼tÅâµ=0þk•‡eéÓMÃÃg¾8~·ûø!6!4Á·.<w_Š+¡)S—Ã?ââúýŸ<*Jl˜…˜,KJ:²*ÛëýÆ	óÔÄ@ï¡qsP.ÍNMNÈP=s2ïb«Éh?kãf  Ýsj@JD­ÊY÷þ÷B­³Dž·3vE½“b/GG)DÝ*ëÁdL’ÿÀÿTÓd~>Áý"G6q«‹rƒ ff´ôÎ<&Ðö™¨FsFLY™j°öQzÛö-DÑð³ûv9œ2¯ƒ™§»dÚƒV?¯¸’¯¶ê玣9Ô$$“‰Yã>¦˜~}3))|P~B±˜ʘ‡ñè‰ÃMM56.ÙNÌ‚cÁ«œzÒ@‚ìÇ+#4øKall¨†ë8B÷µ‚‡U{{„ð‚Æε<CpwÌn
ÈšK¹Vºì˜¶ô­Ð­¬s˜úAìÕ«GCbXsØÒ8..û|çZÛeR`c´ùeîÏÛyóUšÏÚ¨¦qÉÉ{Ìz~ ^¬Ô«]üh¬‚B^f!Úû¡ìj¸dÓèèæ|Ø›riQ0?¥î¥äâQ–Ìi¶>½§N¶èˆ?(‹‹\±Š¥fV0Kžs&sÌaKªC0_ÖÉZ“à€–˜ýŠªªÁODjm¶å
+Ê•ÊÔ붾Í󎽢”¯&h׺XX©ßH‚.	'ÄcZc\^ÄrD'™áký–:™Xxyy4oc"29ôÚéÚDÔ9fÊ5¹÷=ÊÕÃÚHN㎢ß]6I#Å !lW#ZEIÜQƒ}þ{õ¤XŒA;;¼:D~Þ!´µ’µtÝÞNË~p	Ò rwÃ(øÜÜç%{!åû§½¬½<L"Fûœ¦àF¸A½8:ªýýz•¾ÀÞÌêCë$Æê6ÈÌ¿Ä: W?aQžžÀXìþ“•ðrJÒ×ÒEð
+G•V,N`.ù-A£ó¿¿]è)
+¨¢
–ÞkdkÏ
É¢út‹óx¿EBõ51ggùâoŽ[Õ…tT2HÕ‚òÿ³Ls<å÷“FFI'Ž‚`âéaà$ç$¸é›Æâ.ªcsþ)¾Õ¬h%%7„u°–-»óPAò/ò1;ó§I»ÇB3$PÀÅnʪ4°QšŒ´ÕKœK)±³ÇŒkFî¨=§µƒãã^Ñ̾·	Ç2C¢Ca ÇßJ	2®œ“«Ù¥Ø!ÂÂó-²Œ>:ÖŠúúyª:ËÄ>¤×®nÀ|ñ[•ƒÚ¡¡y~F¦Ág ç+,Ù,Q) ÷KgM?Ú.ôÒÇ%…Ax€€ä΃òªúPÝ¿•j•I£ÝãÅPágÉŦè•ukHrrŒ„4îžp¯ö <¥<Á¯/Lp‹x‰ñÞëe©êSS AÕâ¥GR4……ÙœR;ÂG'PäI­ç„iUò00«mëöèH#•SÞSñHMθ	™I²E0³6ÝÖ
+úÓ)µÇêmê镵Ã)bàÁÔ$0p5DúööÂê·—Þr¬|AÊâSâ¡|N¬uµ”!Š%†X××_ZrvÒI›¥^[à[¹ŽkÀ›­-)T}e\ŒÝ£´´å— HÆ›”ÿ(‘
›WOÂDÅ]IËjò••x'å©Ê?õfpk4›4‰‡fCÁõè¾oÑ錊Òì:µ«¨Óÿ,©²¶|H|»ê©hP,´ÔÊ/åGºôÂ.˜88ânIßÄTV"ÅûÅ£`T|ÞŒV﹨àvòuc[[XÈ<wˉBNgƒ3‹ãN@QBñd"¯Öâ·ÁzzÅxù–Dzu³ƒª€ª“i³Tßu]<srkTo’È1O˜ãðzÜ¢¾¢Ûøz8Rð>©25Åb‚*¼¼¬ÿ]êï(LJáH
Ãr‡,ÜÇ’ñ›òi*8“²ZÑßß2ÔûežÐéÍÅÍëñSž{ï²]„í¢˜sþþ‹‚Ê5÷^©`4}tvtó{`Ý©×A9Ulð!]R²Cã\Íó³:‰ÁbݹÝ{ÎÈT‰½.MX^#Bpá--~쿾ï%öd
+dcDïÜÚ¾vÑÕ±M¡r+NNÄ!Z,«LçõW²Â²KÇõàUçøž¥•0{ßbé¸ooY‘ŸÍ§wÐðÃqSMôÛÐTÆôH¼rù¸ñˆˆ­¦þPƒÖUÁvOÜÁ˜VU7S€ˆÜÏÆ_S©©0;±íb<’œºüºV<ŒØb›ÈÔ3•D2¨ÊÊŠÛi› ;&£=l4l+Õ&°W;rãhˆà£:"Æ
+ëëk¬n—›ÛG©Õ‡Õ3_Û¤ÙÞ»­¶ÛË9ÏPÈ33Zzgh{ÂT#·#&¢Â5X{¦=Ù[‚uýGß’jÇÊ¢ÿSL?°—šš>(?!ÖL
+eE›Þš§ÅïÉ‘qq}ðÁ%6LÌL«%Yã1Ûê4‘»ÿ3PPà·5 %"Øe¢õõ!Ø	×"OÕ`fYÜz··€T½#„§ãiýAýF°eZ§,@FR÷%¢Ÿ½Ø––‰0‘\/¿ìýDòD^:ìqÔ€ˆ† ¯æ#õõ3ýÃb;òÉö6\’:’v¹öM[ÉiðüÆ:¶I^¿$ÔÔ®Mƒ7ÉþÒÈ+‰+n3YÕþŨ*!ÂfîO±&&Æ“Es­Þy'ׂF‚æ†y•\Þ¯Ç^a?lP_Ì[#Ĥ–é„ÃC;õ;þ„ÒéŸÂ¡cƒ
+o—èddáî–škÛ°žòâí=íÖž½]°êw¶áW-<lUJEE|^S{gà‡cvTŽTÎc©Ó‡F/ç<Û@¾!¢¢ˆi2æCAª½\°\†”ªÅ^%º“|ïîˆu㡃ƒÙ÷Oz5Wt)ååžWÑÐ5‰â¼³Ò÷/¸Zà௥9[7lMEˆ3Ë3¶Mí_l`
+{ü‡¯ä‰?zøÁÁ2¤`ØW[°¡ŠxŠ®°ùÑ[ÌRÔJžEœC,åå¡-9;iªÃÎÜ/£p£ÒGλ`Ãؘ 
+ªë5yŒŽÄÄ<üÚe‘ô38»ÃÊÍ3¯îôtÀ<Êöoû¼Úu§§†P®äqÜ­)	ÌÌâN)“a­(HŠÂªY…¬׆†àk}çšÔíŽu¸uúÄÔ‡ïš1pWNÇÛâÜlžaaï×
+˜YFkE}†}²UëbRåmziíœÌ®<@@rgÏyU}(àÑÄ5Īßàÿì(þ½ñ×&†·üõÇ##ȪGA0qú¾pý‚\úÃcqU…—(`ì7eUX¦MFZä«N«šÖ×íF»
Sp#\®ÐUðð=Ä_`	ofu¯ûcudfÑb'0ò˜®ß÷ÑÑ tšTQˆKo»2»
+éˆêQ}:»ðKÂ,<„²²¹È¿’zÎmúm"j’3e”ÒÏ°³ôR,F®““‡	
^"?ožZÔIÔ:ào'ë?8ŠžmóÞv5\2çtts>lÃ9ƒº¦‘ÜwÜrq¦Kfº[ê-Çp@KLðEUU"5¸[üeÄejû[_è÷Gv훟É|«¾66TCû!õÔAͤ³³BxAcgÔ¯­¯1,·liÉó>ý-Îã¼)0
+¿
+Zò¼wéã²÷Ç>ùwD´ÿÞÏÏ„âõ©=”¥:šüüO¥æh”Êq³~ÍÙrÊ‘=|îîR0l¥£XÞE<EW…Xòæ£f)/¾‘6(H¡f‡£ŸbR±KúBﯓô“BÎiúÁ[þ¥˜6±¤%¬¬>/§³½pÍ¿;*G*gŒ¿ÚçÍ#™
+#)õœQÁÐlKKÊÆ.™ÑHvð"y"/v¶jH@~c[ª/ÑÎjjW¨Ï•ê‹id›Ê›7—‹¢äìTâ£A´ð­áI5		íeQñ§&‘XÅMM‘žk&¼–ãuÆÓñ‹—((pÕ”œl¼Qô±ôžlŠå©ä@Dnéc¡§ÚÚ“ÖÉø1IN]~]+Fl1Ë4DpÀßcûû…»V7ÅÃã­ÚäÍä—¡ãRâoÓ¨„,/…Ÿ!8þ˜˜?v	ÑŽ_ùœ{22¿"ùnm_†;Üijá1ú\¹¹¢ÆÁèݵhx‹§¨zãh*c”ì1†AŽ^^Vñ uùíÍþ$ƒˆƒï9ÍníIöùY BøQL·ËAe”õ/Ú0°:;:÷³0àÚå®e™ü­]zaLqŒ7ªábƒ*+ìóìß0*>oƒFÙÈkqÕî==ì<òKíY´×Ï…U@UǺ×*á´ ò¢P!|¦&Õ±±ë®¼Jô™m
X“õ×pmüW†âd»¶äwvy«ø¢Zåé̤ ¤í]åþZP"8`ဆ¿ŒóóÌÓ+•ìïÿØmrèrÅÞÿ)q¹çnbÎ×þ–}.ÒÒQcîtàÔ4<ùË[ËÝT=ÿ4¿?¿€£U™æ	g55¥TéÄu±Ëº2ÃeÕÅËQr±v*Kÿ´
cçöËÅ8äJÈN†6^¦zÖzO6Eü†Úr×?èâ9eÆ>ww‚)6Üß,o¬¬¥Ì,ysß3š£ÜLÖRœVV™Ý×Ð8èÑ‹“­½FÑmýèŸÂu˜í8 «&x¬¤¤wGÚ”\È£~Œ¼b¼5ó£¡tÈõ­ØÙ–Õ6º……ê÷ð˜gÿ^šÑ-y^µúÿYõ…yLWáõææP:MÎŒ*¦D«¹ÓÓúD‰u¦°éX±×z)#WÇÇÍŠˆ/€‘¹O-jªjp¹û‘E¸…=ºøNfW  9½é²¤°pÉæb”bUápñvÐÌÅ	Î0v•¼¤
,S¨‹#-rÛ'ÛMkåø#ÓˆPUû”²FÎGbbÀ~m¼Æz—Ó
ï
eè—Ùwz:`$EaU¢ÌVåCCƒp»Œ°ýMjøG´\´}bjÍùM–8áÖ7ÊÏ»š'››Îapü4:sëíBlBhŸs\x:–½ü±«X…ººSѵ85
ŽyûßûpŽHö
Bæ	V_R¦3›~ÙÙéç#,xT”>Ø--X–”tyT«}küM‹ÁÜøøt¬" CciÚL”¤”@i`÷cV,Ëç‘*ûµ•€›C_âæ \‡œšœ zædÃX‹Ó?$Tëw7>>+†¾ÙÑ]¸%)%]ôÑÈ›ÄKÐ~ÖÛ,Ì]]§æÔ€”ˆG‰²óáó8„G${ˆ!s°»~H¨Ëîn||:Va¯¿ºm&JRJ º0õ¿+fìŠ
+g;Ä^ŽŽRˆ§T˟Ș9ã㨻Èü|ŸçD¬¾¤Qf+ü¯¯Ï8ÓFXð¨5|­Z.Z°15èò¨KŽlâKä]ÌÌuõxL½ñ/MŒæŒ˜²/Ô}ñ¢ôú,Öå=šŸ¥ííèED™@†ÆÒ©˜5U5€8ÒÀóƬ«ñZˆ¿ý{ëì
+
+r%d'C/S=k=È©¬~Cm9ß±n&‰ƒk)N++ÂàåhtæËÇ„Ø„Ð#æ¸ðtÁaCq2ÉÓ[rµHH;²Û|Q-üúfRRø ü„-(‰71gåK°ii¦¿w:pjòë£ëà*ñ„Ñ
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc34.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+Î<šquÐZq±„c3i·z+ˆ]^>oÄ~‡CÞ
+Î<šquÐZq±„c3i·z+ˆ]^>oÄ~‡CÞ
+x)âê½´4â>2ÆfÒsô,V
º¼|Þ•.ü†¡.OD³“
+Ÿmî.“!+Α¥U»ÄŽ:}…çâB±Q9‚”Å9ðRÙÉguhÙ|dþ*‘̹æõX¬ieø¡7\å&_\(ÑÌȨ¼·/r¨c}O®òÿÐQN‡’4;ÆÎóK›¡RK"žˆ{;#ÚÁ\;BV?Wªk•túÓÙ„¢r5—þr<P´áJV
+›FJ]O0»4™"{bÑŸŽ‡ºfeg²Ô e6>ý¤¯0ÎêЯøÈáT?…oÑ÷°E4ÒÊí_n¸×L"¾¸PðÁ>Þ6ú°ÊÞçÑPÐ\¶f¦n¼”Ó0ª¯©Ëa`¯Z¿…M<es^äMÆúžAùã½¢œ9hv‘û–+_¤–Dq¹<:£þ<Ùã/ÅšÐÔyŠ8±5(¯î?UØçÁN!
öv(F©Ÿ¸v„¬~®IÖ7èé.»¯þYä2j3áäxï1l.3yÅ¢›µ®úÍz¿€xþ¦æñ+‘óLíp?ór uß”$¬+Œ”ºž`kh/DöÄ¿#i ÌÊÎyµ@ÊlnIEå"ÙÄq–奇ÑïmóŒÒ”«\MWOÝ°þöžÝf|çUC`ɽCíߨ~Þ¿ó}Šh¹‰Ç¾Üm³˜Dam ²ÛÏ2fvQ“§2ò”n,$·‰k¡àä×ùÑzÍ¿zªýŸ|¡lé<}‰¡Ó¿ ½¸qÌQÜe5»`ICO‹ÂÀC´3£æÐjœì'“Ð̦9ÛBe{}G÷í^k…T1T¾cšxÊæ¼Õš‘é!‚ïÛgY%&rÐì?ë1V¾U>1ˆ­+ë~¿6æÏëŽðŒèî|3
ú²p/&(9à&‚âo.xt [áx¯Û^—)½µ*ò	pjPCÁ~ª­ÓŸœ,S´	rU‹Rû	°ÂïJŽÜˆ[÷7}®ºÔ*A–BñìPŒO#mìE>üA’±nÍÏ\kC*á²ÕdÔfßÕðŒ&kVùŸyw
+\x"¡ØÙ~ÛäÔ6ŽvÂS%ÂúÃbØ\fò—Y+wAé‡ôcðá™QÑÿV?'û˜Çà~ûä
^BZ"ÍC4nðmäÇ
+ªŠ÷²ÙŒ¡hPãìæ@£ ìî]ê£5HE(V5i!ÀÖÐ^ˆñ•cF&Ò@…‰òw€‰Ø“Ö9DN0øDv8qR³ma?‹ƒHÎ_xì/Ažÿu4^žÒÜ’Š×D¯•â1×W¿Ã8Úû¹5K¸š®ž§}áñ!§Ì®¦BÚE¸+¦H
+Gu³L¯ÃåÄñÔ°f²ÿ°ÆøÓª†Àg†Ç£Mü.¡cûú	Ðo“a¥Ú{-ˆÂÚ]6ï0÷ÆsÏÕ}÷ØÉŸÈÔì"X2Q­aͪËÍWy«ƒdÌì¢;Sdù5ÜX:HsÖ_ÝÕ³ï¿0ô‡>côI·—Ê™raIæ,mÜY{§uÀtUˆíÑÐôãù¹M½ãCç#ø_ØÏxú_»c]gmâ…¢¥ÊjkÀ’†ž™†u)b.Þº¨ .¤zìãÑq2t´ŽB[4U¯V‘àŒÚC‘f[ѽÔ%ÅN;½…Q"r«„ÊöúŽóǼÖ¨b<¨a¨gKÌÒP!ÌšH“öÈ·£A€˜ØOáˆ)qÿŸ\â¿kÆ.)ð‰Ñe·)?ÏBëβJLä½Å~>Ëb¬aª|b
”Xöü?­X Ö󠘧v\glà›@QuÒæé¢uGV'ËüclуËý=ÍÁøféyà^LPr,ÝL‰j½ºú¼‹™º䌈fþuv‚p1aZ'<š[.õo[ÙÞ\ðè@¶ßðC«¼3RgwTùàþÔ †Ÿü>IG»#>%âÆî5fJÅ\²
·1TãƒËv‰þ¸ð8)7Àøý)/X¦u䪤ë}™Ã&”¥'
>¶ónúAiµT=‚1–šïcâßÛþñcb€r¢÷2Ìw({3BÄ.­ËÓ~\;„4ÿÅ žFÚÅ*Š|å‚9܇ƒ¸Ö†Tßy·ÈµÌ£·ýJe´¦pNÀ´5“Íaá
+kr‘¨0‹Øj°½ ¶2} ÷LÖ'¬ï#òî'¸ðD_­¯ü«Õµl:(ì™4¦J™éËpLVªšó¨ôV¡²t'lĆ½þ=1dn(ŽJ!	ÜŽã›Ä­¸Ìù3²Vî‚ÏõÆ:ýß/¢¿ã¬~Në-“ÝüëÕUø7m¾¹)i¨mI÷3KpƯ‡É*â½’ŠüSž"üß¼„þ´&D‡†þhÜýÚÕ“I	óy¯_РÛÅÑ€[]ÅÁÔ€²S”ÝœwÅL^¶ }þsåR'XîÏÒ¯ƒÒ˺É[jŠP¬
+jÒB±½¼
ÿ7ÆŒL¹€ùî­tõÁ–ÿ€öÍ[,5Þyº…!íY‡ïÓa~­Ã§;±rˆœ`í>ˆìpâ¤{ÚÂ~¾ðÅ^‚!ãêh¼!¹õèùš=B$ùóiS é«Éq
»	ã®û1F6m+b6³¥9	³ˆC7Ùb³®&c›,p©ë
+oj–m)A! SúßÿBS…k“ÂŽ6çƒx±?ÒOCÀ\pyA0wNäD„X¼œD$A Q„©ŠmVQŽê{˜þC<›×•=ÿµ}Ìyã}‘ê}º ‚ÜZ7L 
­
+‰%/„UŠËqjxK:=j›í»I>Γ[šå\_Æëé½Þ;ÂW©öZ
™©º#‡Ó`›yîYÔ`Œê†o6q‘ÿ95ƒ@­“¾ˆÝNG¾°lÃ`ó‘惷úó­<$#:µÅD°d¢G‡
+I‹8‡®¢ÿú‚—“Síà‚²%•@	äeÓo89üystÎÈæ¤òKÈ…ÅYv¦Èïj¥°tæ ±¾§·{Ãc`õ|Æõ’<w¹ƒ°‰,¼¹ðs4£—d§•/ê%ý¤âmû_â˜s32*‰/äÂ’*ÑXÚ¥²ö4Sêèª
Ç¿½õÛïošgÛ†½¨[Z4˜ˆ[ÎAk!ÑÅ]ä‹Ã"P™Ò1Ì‘èٹ̌ÓFí¾­ƒðé¾kƺÎÚÙ0YW‰ÔÖ9!/'êzwÏ«ö ³ÏtßJ¹êY fO|QŠèòý_‘lùàR>Ä\¡iM]*\UôÅÛ¿âdèu„¶hªC¬?Ý©†?þœ^-§0-Jít_Œ‹Ó’c*ë6”,h(£‚êX(ô̶¿gµJ—œvg¢DäK‰ñéû“e±.<MÄ0>xMŠ%³?GÆl»õ`(&àF“Ð8ïSÊZº·}¦ZÈMΖ…¹ *(B…);ñs[‚-­žß
Râ›c8#¸ÙcÖƒòô¿ÕúrXô6‰Šuî@25g;†‚Sl_tF¤ûtÜ‘\Rý¿ÊsR~ƒ„2›Ky”˜Õg—ü|‹ÄEÂIøÄ_`†#ûzoi#aš5¶øxèÎb‚³]:ÉÂOÓ;E
+&Ó$5°ñå~G°@±û']-S
+ì¸ÎØÝ+€¢ê¹ÑÏYêÞ¯Á÷Ò$]Á_¨J£>:½–®åP€u¾ÍÚýÇVŒ‡ýŽ¬N‹åÆØ¿‹çz
+‡8ŸíÌ4Ïòݼ˜ äX§˜2@Ôúã³åúþËœi´Q(—ÚGS¬:²xÞcy8Ôgié,e/i<Õ
Ìáêìàb´Nx)¶\÷Þ¶&ÁèýïYµQ5#Ì´‰¯Òƒ[cöIJéFlí¡"pØ¡,¯¡¸ýÍ€q £ý†Kef¤Îî¨ï$Ýáµ]#å|’ŽkF|Ja"ŒËõ¡z¹Œ™RÔâÇý‡•2öiè/L!kì	(˜k@.Ù‘ÁjÌ”—¸ysb¨<Û‹ìámýpRníçR^àånÇÎn§`«÷›Ula dR¿S’´E®9ET°Qê$ÕIUË$ú/›L5WN|qûÜ8é‚Ò w¨z b~mpUÓ<ÆÑUå6*ÈV1>ù`jZsf×í7	/9Ç7h1)ÃÆÙ£«áÿÆÄäYód…=îP'öf„•\G‹»ü¸vÿY·ßÖ{»å·ÛUÝW슔F~;Ú«3ƒõ<¿f|hã—]
+!Œ©—T	ø×rþ¥m±¨£òsw…[sçÛTyæ[ñÖ³æKISzA—j0åìO–Ì6dóðÆ…dí”ÊuQàœ8uj;‡Âß,Öä?M`­Ô}g]qdú]óZ,PW•Lb‡u"6F¼'Eaž)fèVóê£Jã@$Jù
+˜±NEÃFùÁN(mýˆ¾GCåK·wØtPÅ/hQ”/ÏĤ+?C¶–£Û?7t·yë.ôŸ]œÿ…*nm8Ö×Ú8Å‹à˜¬I)ûMõ¬_yèNØ•0gázbÈ,ÜP”B¥ÛEÜÝO\+ïÝ	FÈl-ëü‡kqÊò?–³”êÅQ{Ñ+•G8m…ïfy8¬Áƒ&÷‘tç£^YcÛEüœËZ;§åË·å©ÝIkð?<cI³Ø¨EÄøõuÑ>…{“XÜ$¼ä;ܽªínÚaoRÒMÚ’óf–à‘CTÙg9"	å¦(!Då£dÑô«g‚ˆW«ê׃¢*°i™#Ü„9MÍòدbšò©4eáuLˆáХ穷;(’ûòC
+¾½]«—¿¶º—ŸúYs9XIϼV-ÔA%híÙËWàƒ2o€Ášõd€•µ<y¦5§%î—˜¼q]úáæפN°Áƒ>¹C0¹‹{!¦rÓåý?rñŽ)8n“VœÁÆí\ÿìú®=‰sÅ®i¶Ô=	 EÔ¹„'ge ãn‘˜o.>ïÁ:G§³,¥;|p¥¦–ûVI­™xºUÆQrê	@h‚ä	Mè÷Ÿ61ãñ 6‡¶Xj¡òiBDz$û0ÂüG›0S&ËG7–Í«:G˜¯éîÂ0›ÞmTì€ïz-¬'¼{E'Yvä
%ÀÇ0|
ÅàÙUö©™ü6=aý—¼BÛÉÐeBo¸C~|#µjf|ÚùhÑ•šðKl —<£©ÓÝU¥N“»Ue÷Íï)*z„HïûÒ¦@0ÏKâkÛAëbŒl'ÚVÄl{9;Wž/_ªÞRžäËÄSü"8˜@š†Õ
H{Y]{qWr{
†n¯Ä{ALÆ+XàOËÞÔ1ÚR‚B@¦é£ã„¦™Nˆ
+ó¾õÞ
+^Uw¯;Ó&|nÈÿ¹‡¼-„±—$ Z±Ö
+;™lÓð™~¹>ž†¸àò‚<`îþœÕˆ°e%ˆ6¡èAêè`gºýµôšä©´=°ÀóŸk7&ûŸ	H‚@¢O	Ú¬¢=(8É,ö-á†x+³7zãwú…òÛú?†¾ÚÓ:Ù€¶Ó"1‰…ªŸš›S£îiDŒ³ír±í5Éúi@¥´n˜@GJ$^ª.&	‹=âÔð–tzÔ+Æó1Ðd4‚1ölyMéo¼®TÕ8R&ÃŽ7¤Ã!Çk’"'|";¶)׸¾‘ËÏ$g¡<v™®Oñ´/Oi	WS!m¬\›S$­´‹×&±ÙïübHöjX3YñXcF»À+òÁ²µÀ.É<Þlâ?ãrj€
+G;a
§œŽa}ˆ/!±-‡诱7x¸ríUEõYâFÞ4(ÿvs ßPvwØ›Àû?ÑséûGxHFtw>—ˆ}ÈYŽ8™’pA§ZŠ9¤Ë)óŠXaù‡%GnÀD£õ•°W]jH®KYãé3;¦ÇÝyJ7€ÕÊ»Þpråòæ=èÑ=U—ßsh5NvÇhfS†’ã!¼³°­õø/»Ì‰È*–Î*_ù–6—²ìQÃÔW}è=Ñ@<aSsö›ÆÀ÷&ø8‘÷97ª¬üâb¶KüÜÍæù‹¸÷FiJÛ.¨¥©àX{Oà3xîo}Xeoýæ(h.[3ÈS7^ÉJçUÙÚë¾0Ù-¶Ò…ßâÿ™ìMhj„²EÖ”Ùw‘ΤlýîÎ'æfdT^Õ™9T¿°©Wyñh¦É'ÍI“cg÷«ÃÞ)Ϋ(Zþ%	+Ã#% ©Ó³1æÁGÍ]3¼½Yj¼gM¶´h-
¶‚ÖB¿—ºÕ=›D /¹b…?ͯo…©"×ÇÁ¸wÇž›gÆܤÓbG°Ìýq!Ö¦’AJì±’»ŒÇaGýÏ<aÖ‘i©¯`.8²®µ±'r"B,^N"Éu°]An-•&ɈØÊœ	™B¤…‡EëH¶5<«5Ã:ôîƒKñ@{ƒè£”oɲ]Ìžø¢	Íùç¾?ØïÝôÈtòM„!ò÷º§úÛ궈ӊÿWó–#À¸›1פ|•¸_ÒšºT¸ªõ—«8cÙÈÍêqÐI†E~§
+O~áj@ÉY§JàNɵì&/[P°·ü),ŽwéiÙÏië%¼ZS8'`Z”Çè¾þ»9ÆTËl5XÐP[É°Põë8&+UM÷Tz+‹ÞY:6bCЖ27G%žŠnGÿ…qcÎw”3%ìÎ.YˆÕ–*ÿÏë;Ê\xš•`|ðš™KMù¿qáãö¿1@9QõfHµÀ³—!bØëç?.“	J,{~Ž‘Ø,k÷ÀPLÝŒ;.½6pà ¦‰´isúQ´Ê5Ð]}^ËÂ]rFD3´;A8–¾-ÉM£ô¹£‡š1o]TP„R=vÿæ¶:ZG!£¤Ù+ÆpFm¯Æ±T½«fi(„
+žfM$Ç{dÕß®@Ll©þDš¶ïÑÁ.qÑ»ùõc·éä°õl	êÁ€djÎv,¦Ø¾èŒUëè¥ÕÅ‚„eÂ9¾ª„s¸n¢³
Ý´`:¤DøæhzÿòÒ¨Ðÿ¯?¸8¤çc‰æ¤üd+–ò05-·Î3åø•Š™’í•4ñ„¢Õák³ÓüÕã¤àH¥vEJ#?“mÛ—Ï‚ôÑ3‚>¾ÀFëôÞ=ÒFÂ)jqíðÍÄ{ºt™&ž»vŠL» pü‹7ígÈ7Ý0ÛõŽÃ¤6¾P2)ѧIZ¬
W’¬* Hj}ÿ×üŽ}€ëNºZ¦Åm­§VY<Éo¿ƒ²Éîtðù¢Ô¦”ŸfZÊÙiÏ£¿{ª%ú#6øÞ8ÀlÞ¡0CŸó=¹HºŸ¾M”[|<tg1A× êa‡©ç“¬çoÙîõHi î¡T%ßÐKWü(@´_èmðí+FÍðEœב­c6Óô0p#Ç…hƒù§e-]Õ°S-dÏyzÑä}9,zÊE´w ”½“CA§6È¡:#Ró:n€=µéÛ{×é:á‹%Òu¢P3©>Ž¦Etyð¡Æ6òpN/˜ÝÀ˜%ø:¡±FËçI¿ûJ4ßAu,zµÎÒÏXÊ^Òx·
+…ßÉÅ2ÝÄ™uœðRq¸ó¡qLЉT£É-LD£g®»žæì rHËï(ÂÎi–fÆtâÒfFŸÍç0òw¢j0F…uC¹¶Æñ’”Ï ŒØÇ_Dà'­_XQñ}AÅǧøpAYœÄ‹ Šr¼ç¹’~²·H:gdsHRC_mç‡â@[ç–ÊÌUÁMÃH§ßwº"F×ø9ÖŒø”c÷–h2A–{H6²¨ú¹^ŒW*ä)ïG†•RïžÂ'D‹÷_ôo/¤µÙ“ç>7dñÒÍ^˜BÖÅP-Ö€Þt‚®ut0½]ðÔz‰MrÚZX`÷†Á»•óÁŠ\¯?>ŸÔ…53>mò4æÄMx«6ÅßÚçà¤Ü'ÇÓ¤¼’“¥O™¡Uo)Orë…b§~L MCäˆ$³¢ „
³¶Ý×Ü“>8ÜSÀKó+ªØÂ<]Ȥc¦9uŠ 4ArŠ¨댭•KèÛ­LÙúwaÃo¸*v@ù=˜V±^³¬¢}¢ÉH·’,ª‹Hé^+˜j®œ4øâë¥pϹ@îMô2@ijžS9±çüð‘9öGš	7Ç+NîÉcø.ñv}WÊ·ìWÎüÚ઻x‘¿ª×lT¬b|ïÀÔ´æ̳Ç,n^r“nÐ2æzÛ½
AD¥ÛÈuå	ÏQXºÂŸnB’¨èylÙ1MyÚbR›‘¯[Kßã‘•:Õ²ûÈzÁ NñÌ7¸Žkåmì¬nà©.›…ùàŠ#d6˜û~Í»¶ey‘K	×Ju즳æã*²s£±ök×s«ª§=®Å	5Œüv©Kf2÷xcÌ2ø-(¥Ä&1Í´#^¬¾Oš3t+÷u	ß%‰ÿ %ò*ÐÛ3ºBO3¨í³2äáW &6Ú"M[ùæî¶æÓäìAB¼a’_UB·\7Q׈àZ0R"|s4=ñyiThñÙ«¨òѶþÿ±{Ñ– ’¦ô‚3$Ô
+`×Åž1…lÈûý‘ÈÇe”h °‹/ëa ‰9#"—±Z“®K_˜Àê¨ß…zÒÉßÍ5 ‰ê¢Ý%p'êÔv™£(X±Õ~šÀGµúκâÈéºûû›¤¨õ*=›Ëo¢À1¯h±HK‹•
+­œOE7­ñ´X ®7˜ÄêDlŒeNŠÂ!RÌͬûÉ$[”Û€H”ïzd:y¨BHž	yõ]Ý}ãu[DçEñ¥÷KŸƒ`\Öƒå-œŠ›ŒïŸœPÚç
aŽ†×–sî­è —^Т5^ƒÚåíŒî\µ…íOýcnRç1­€Xfð¶žkSI®%vÖI‰•UV~†q1[«~nèsòË\õ#º%ãTÜÚp,±³©p—[iÌ€á±qñÂv¨45BY¬kJ
+âµÆgR6ðwgÝ-E’Rëš÷E,¾òÍœ­7`"ÎßôÄX¥ 5„$W«Åá·4”';Àí43§CIÿž^×XØô|™ÓfÊdKg‰¡Š¥§ž¸V.çŒØZËåÖâ‰ù~1${5,É—¢ö,¿D™žÖ˜Í†tÙÖ
•<\9øŒ¤¬ô¢q#oñ;·á(;µV7ŽpÚÃÌòpEŸ2Ló?èÓ[¼²Æ«Šå%‹´vS׋s˜Üb–èZ†ƒŸ/ÀV_©M—:›õ´ŠáœÊñ	œy×O§’Öý~xÆ’{­MŠ•í›'wê¿|ö;°¥HeÕv¥gs=ãЈ®"Üãd´üŠé¦„,]aÁ7!IÈTt²6â–¨²mIÇÜ©ÂÞ¤¹š©9ûÌ1Ý?†&¨¯ÎrD×QPBˆ×[‡ûFØÄ«tã€Ø&â}µ¾ï¹\; òL+ÖÀ/×VÀQÈ¿õKÎ4
®Kɳ$YT}Ò/F¥rš‡ù­CÄ)ùOƒo:ÈAÉW´:Рxj=ʨ9m-H,0õCîÓć÷îEhÊ*ßê˜
&"ß½WÓOsvP9$ëù†agºK3c:qi3#¦ö°®ìíÝ|8®¢NbËE9Ž^ýÒI?YÕ$½2·$)é²=ær°’=ƒe¬Zµ‚JÐǯ‹®ÝdÞŸ)÷È7'Ž™Là`ÈLœ|ÞÖ#ëýªÑ„óƒ%
+á®´
+=w:xòQjSJÁ3-eâºéßѳUœ}Ÿ|o†`6o¹âwô$º	PwÞ*œá‰€h«¥~ Z¡t¸xø›#èxöBQäþ»×ç~äÿRp$Ü;¬%Ÿ‘ǸãÅéAzæ—A8~Ë•øνd•àãôGïR_‰(šæݪ-Vˆ¥IVÒqµz]Š(µoNþÎÊ@4ÛÜ?
+-Þ:\<|ßt<Ž?ëÄ|gÐ2Äpÿz­ù)ƒ¡Ê‚MsàU˜+Dܪ+„S{XWvøà>WQ'1묒G/ðiª‘¢äÉ€ÐÕšGÂ&p0d&N>€okŸûðUæB÷Ïœ‹
þWZÍó#lbÛ:ÿ@lq°Ô_ùÒ.„“yH&›k`™åŽ+`¦Ϲd®ê¥ZhP<5eT’¸˜$ô¯wçbÍõw¬L‹
+Žn1‡KtŽ-CÏÁ™`+¡Ú¨ÅÃôZEþNeöŠN²‚·ÿhDWnÿ2Z~EúSB ¾î•žªd*:YqKTY¸ìþÕJ“`ø—ݯªñO/å,lz>Âç3e2„«½Ê„Þ"ÂOkLèC:âkˆÄ.’|FRVzQ¶Ÿ¹
+ö“Õþ“Ôm†üøFw.ÔÌø©ïп7)ý–Ø@,3x[O»§ªWœ;kªÊ£ºf‰@þŽÖ‰¶öa;T”!¢V»%qÔc½)xµ½Àó‡ÃRTôÃë¹Q€`ƒ–Ù4Ö$«‚ËÄØN©¬•Øö=2²T!$OŠ²ô à°ÿ´£"ý¬öÜõ«ÁÏ0.ïKÏürv®!^¾I¡¤!Õ‹.•¦åDp-€)>·ö²º*4öâ¼J4PXË™û¾PÊ’ŸÅÖ-ÇW«¡L`‰uTáÌ=iêáè®ä$öÜC•ö‚˜‘V°Ýž‹(¡µb©¤„€QÏ[ÛQ.`ؾ‡d‡ ÒÓî÷<R·žêôú'ëDF±Ü˜ËF$/œ
ûa÷¡¼ªîCv»LøÜãoeZ3H]´:á —eŽ±­»e£³_Lj%O¦›ÈçNF[5ÑhMÏjh0±v/Ø»6ý/þüo|!'mÝùxÀÁá%·
*}ÊJ
(ì^­klç^áåÞøB"NÚ§ï2ðŸßJsTú‰”0l_Í2‚ÉÍÀÎiçwõ)ÕOuz}û"#ÖnLë#þPżGÖØÓ¼ßסí„Dœ©SÃdý'#£”æ4¨é54€Y*ž©EYzPpXñZßðV{nôÛîéù«é~^%(,ëÂó_(eIÁ†ìk˜í¥ÛÞ&0Ê´*þfºuþta©»&t¯q»DbI>#)+=¦[ÁÒˆ{Çä
+Çjß]3Ê GkÊ[{¾“*
JžQ+ÓœŒ¶j¿Ðšƒ<ÔÐ`éÒ€2WuÜ-€4Ž(”H¼*I\LzÙµý1èôµVAÕHñ4"¥†7ñ-?¬}§!P_wÄOU2¢ƒ¶«*¢\‘ûb>½Èhb8ñ=ØòšÏÞe
+A¨·p¤L›"nU›BÀ­a8È2'@¹»Áóx¤s!ÉõéNˈŒ¥-‹ŒH
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc36.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,73 @@
+ÄCL{ÀÏû¹I|~Ih-¡+JYÛ;‰vÈíØó`;ÄCL{ÀÏû¹I|~Ih-¡+JYÛ;‰vÈíØó`;8•†˜öƒëo’øü’>6ÐZ_V”þ²4«vìÇ­>ûÀv$QÅÔ]LÖÛ„‚Û!-¸wþ}Þë.pM†šE*u! Mp7-ñ'ËÞ9íå9|l,½´¾¬5áyhKìÅ“G|ëìlóRaŠçÔ0gp‘›pcw'Õ™‡ž r×—³Ï~Ÿcý×H¢—µº˜ ±««BZ:mîáú¡Ë\àš)ŠTêB]šTfÔù|zWÛâigâ]A1Ã@Ñë`’F;¡˜_B¹2]ã=¡àn"ZÿN6‹¡rÇ×røØXguaEjßòЖÅ<—;ŽøË'Åüªa„Žùp;»	©;çÃSXÀn  «ÊMþµáÆÖVç8GþØû¤Â	Óµ`Îà?
++àÆîN·/>þ!@ä=³3{ƒü#Æ0ç³Ä?çŽrz›w©CU©ÙõEߟ8´^þ戺
+KûÙLjY3wi-@K*2K„´tÚÁßé_>‹¸Ý)"R	¨É„ º)Œp;u©â»ÆV
+L›¯²ì~ÂAÒ¢«$ÁE›Óڨ̵ïøô®«ÙÒÎÙº‚b
+›€¿ËÀ9Œv_-¾„odºÛz_´ö£ƒ4aP©®°¥™ib¶!”¿`–­d¤ÈL‚¼¥(dÝÜD´ãœl_䓳äí­°ÎêŠԣù½1—x3ví‹N—Áø˜\£ðæ­ïÍ­ò¶»¦Çc¡žÜ §ê¬ñEÔ›Ùòx.¬åIÂ,ïà0vkOvÓ›¦°Ü@]K‰šáwß‘±¬ÓpŽáù`nÁ ‰?1?Ì€­v<÷
+"“AÚþ©Y\t̃îÚ­ëU™»wÀÝ~VÝ‘Áœs^|&áB€Õz{föåF‘`Ó{±/Õi{¸;8”(”ŽÚ—sÝ
+«=ÙÏ¡@ï€ÓžŽ“³@•~Óä&ô+îO†ªO¯÷Š£#pu¼2áÑ
+i–"믛
+‰ºMŸæ;ÐWúÔ°ìË)‚[?Ãkû
+6àl^Ï3°hs6=²fîÒZ€þ–Td–uè©Ÿ£Ï¾|m§RD¤M@iR!v%¢g•{Gß(ß
+nãÁ²äôRw|iÍÒÚ W
+³	i'àvêOÙk‘¬˜+CþyÅü™*‚¹Y$KHŸŠ"+»©$ã£:‘(MÐæM4Xõè]²`ýàC×Â>Wgú4HÉM…wÃíõAK ¯¹¯iÄ+c‹rì¾ZaÞÈi«ô¾QA4–5Ž°™æÅÿævÏ|¼HÁâ+7…ÓÝ3vX”…uñ[h O=A}=W/ÒÄqB5cÀ1GÈU˜eWP4ÈiÔ²`¨
+[öt=tH4Ù¬\ãU™+œóÜûPô½H£T󧥈uÛ%ؾÕ; {ÕÇG}É™	µ[ïgb3ðf8ìÇœ3»aË9 åíœG!œØ\véä8"ÿ$¶}¹yðÚØøüŸ0í-¸[ýÑGÃ"‡GùqkQ“Æ_!¥]SÉEÿŠµ+¯ùð\EƒôM¡Vx”h¿#ùæj`9¾gtkÚI~vü}Æwæ<~×’™X*ÃÝ`ìÖ$žì»+Q<}'¥€º–)ßî£?E»àßËVÚQÂ&Ù¥ª%।0ZTP†ŽÊÅÏòägÕ÷’¤aäïÀÜŸ@6~.&b~…Gì'xóD$;‚©áO²¸è…Á©óÃ\Œ§_Ͷ7R'7šL„
+ÙØ^;}!Y’h9zU0šè¡’G˪/$kî§ü(¬§?Ÿ%æ¼øLß„·ôöÌñ6׌?À»ö[éc_«!f¦î€)Òî „.Ž‘Yg•ûD­/ÍE‡þ:T 3ÛÍ^,·Òömvp5*P5©36æ§Kz¯ƒ_€Ã»!;{€cšoû©6¢É|x+.|²8^Ë1ö™„»JksýùÈ»7ü»ÕLõVÁž,IžCó	[Fàêedß¿Ò41DËC+&+8øN®Œ:­x×m-7×\è3%çË =Åd![Bù©\ØF!i=š#Ñv½®é.µ}Å‹R¶~›ÖëlÝؼƒf}Ðæl­~ÖX¹FE•/ËEbÞã¸4äñÏWT®tn¾b#†WzyÌÁ8¹´á1¨0È1*êÍO#[ƒaøÚS¤ˆU$š*€Ò¤f½Cy{æXxÔ1¶x5ñÆ'ú¨+‡OÀˆŸ#ìwÛ5s²ŸBìJYÎ$7öŽ£P24£ÜÛŸyÕõ¤îøÒ‡¹©]®{Ò^(	µäø
+7ê,3JêÇÐ÷T¥þ¿yýô#éÏa°vˆré
+NÝìÉž¯Ö?E4-V†áò—å/To²H–#	DVkOHŠž ²^`-†A95SAIꚺDf6¨ÃsæëäœI˜/s2Û[t?,=Pš½6Ñšh°÷"ͺyÀç݆³>™|®Îéh>.8DÃãÆéÓÁ7¯Ów«üJàRŠ˜„œh
+f#1wcïšî›Ç÷‚–@Co8CÒ2•(V:Æ'ä
+Åa´Â*¡ÒKõa†Ó­×¼7Mmù
+9a
+Í)ž@{›íAX½Z=´âLU͸•Z¢‚h1j}/Ñ—:ãÑìƒøeŸÙV>n».§f ì°5¾F+OJªÎ†–˜ë;˜óˆ!Ļզ$µ,2Xo‹øóCU,ê ÿ¶6Й]žz‚<úz®^¹•â„j>ÆbŽª-2Ê® höä¼úMV¦'3þ=„3±E²ýÏ%At¹ÄxU¶#qåß±S¶Òµy.ÀM¶ñèz>èh¯E¸Û<ª8/V%û¥ë õg[¨ûÎq:b»ÕMH¡?x¡s¤-•zàGvLþÀ,h¿¨ÈÀSW
+ê«J­,a·v@ö·“Žú/w¶ÃÎÄfýÌpÅ“%fO“N¦ÐŠb×Øþ
+AˆþŒ•ñw¢Ž9=ÉšÔ]tº¸(ÜŒåE]k‹r]×.Ç%ŽB
+%­¸ìÏÕpDãHqúoò ý©­íåwÈ>&á<·lòCtl²£ç§øÑo©7(à´+{V5ïq²…+#`ÇZm¶ç¿Ž›DŽïâÖ¢;‘¾BWº¦Šã	wVCïý¸Š?¤_‹!­yÇçEmÇðùÝÊ0•(ã¼T±j¿»›ðرõš_¬ð5ÐcFïÑÔÀraÎèÖ©’$üìåú‘îÑxü1Ù×0ú÷iUG‘UÎÏËLoÃœÖQˆÿÇe“2|6Îõdz9/°T›§ÀűH!ÅkV¢xúNWi1R£Á[~þŠkÝ£¯ýlü/ÄT\yŒÍI_ŒtM©×ï|Wh‰˜H-¶Rt.b˜‹¬©(¢™L¯WIJÝWU`´¨ ‰—ƒ*ùÕηó9'U&ÂÕ—hêdÙY×·5K£J{¿À°*ÃèÚ0"îGÁ;ÔÿJÕ¢îÃ>¥#€lü\LÄü:ŽÅNðû(ˆHvOßžymÍ6ŸOßÊ}ÑÞãO—§µ Mºµ!…­cQÐb÷lÂtVè±€Åÿtû›¸S¾‡qn¤N8n)˜¯­¼vúB²9Ðrôª`)Í_9ç_ûI(~Ì|È'ØOF'6“}9†ö	£XiY<G¸6>?Ž‹I^HÖÁ'>SåPES~#JÑe혣:sõñ…ÿl³~kñ’O
+3܇™Q;a8A¹HL³éjci.Ê‰¤^ÝanʶÏƾKBÌQÁR¹Á@\?²Î7ëˆG^‡Šát¨@f«‡ªÚŒŠÅ‹7èˆaSLj_Wiå}”Ñ]…¼e)™p_•Ë¼þ¼Xs¹ñÚìàjT jOflÑS4–ôC¾›:k Bvöâx?Â1Y#tUÞ#TmüòÜ‹e&L£Íš…–&Æ)ÞëOlYøðV\ø<yp¼‹b
+ñ/k”Öæçï<6kÚí§4¬–ü6±ŒW"±#b{Ô¦­IHu¨5ÎP .
+7#~VPnåk·˜÷¬Ÿ!"X’!†û¶ŒÝÉÊÈ£c4¹hbˆ‹†VL4r!(HÌX8W&h^Yìh™àÞ=-öƒµ‘¹¸0ªeS™¥,VpíœAtGð³ÚZn³¸ÍfJÓ‹]4z—ÈB¶„ïO&¸­ŒBJ´®Ð:Å»¼Iú¦[ú§Ögr K#y?ò'¢þ§^ìyÒz)F¿ìgAÏ\wú—>¤2qü+±Ë(ا­eÌú½ÑØ9e=#œøQ³]	QåŒ5c‰“Z¶TèÑóã.Û­öåN±ã&Gü±°"oŒ.Š7^‹ŠÄ¡(Ûþm'hÕÿƒ®¨AèÜaÄF®:ƒ¿ýËâ w—ÃK_õÃÛº#³ÓÌ"ªZåX•!7 1¹Ûµq•ôò…Ÿpou:ßbM`bTɇžF¶Âí,©¦U
+ªH)T¹Uè6ÆÓ¯ºÁf+1aó+KÒŒök0ˆ’u³}n„Ü€ÄÞKîÙnÌg†òöÑ°ðµbqðjÿ‘NéMVž
+#FÅî«jæy#У@Ký29*	¹Éc¹uäš&1HflLJÖ‹0
+su„Å”²Hnñ[ dh[(¥«#ò·÷UÁí¹oOºA(ö$¹˜×þúˆ¡
+¸Üe7¾ Kß©œ½sÛ6‚š‡W™7D‚¼P*wÕínÉXf”É“½ó¨WácòçõFσÂ}ì
+äÏ ”Qf"á×€$gê€	ˆ¶›…öÊ)¾ïô•õ
+4	þ„ôœ§Å!C±~ŠhZ¬ßù3×^¨2Þy01=Fˆ¬ÖžXä‰ôáŒJÇYöi$Y³
+Ô‘vuâM‡c뫸KŽÿP³%þ«,	!]y¼ÀZ‚rj¦‚’'É)iˆ<ÌlM›æ>ÑËÕ%’-^æ0Íb|¡¨ËkØË<ÂAD)#v³5W@Ý·§8ýÞ>Ýd«¶è~Xz )gl¿)Ð}óD‡iòÓ§{|/øAÏÐ=|xoõ¤Æ—`mÁ`Ïfø,ªÈÙ׬þ G¦Ž‰lÏÎcG\>0pˆ›Û‘Ï»ŸnC»îKå”Ý6¤	-%Ð
+ ÌFbîÆÃ
+@ús<ó[jvòão=òñPîüð—CRL?1©b«ºñ5£1).Á+“ó1€†Þp>†¹d7P¬t‘NÕ—Âu™T_¹–÷Â5ê‚gè3ÖÊ9Ï¢q@Ϧ<8Õº\1ŒLùüߦe—ù»G³enšÚï&r‡R!€ö+Ç‚°g <´zuÙ˜ª‡m7´
+ÿ®U!V]Zs¼]˜I*èÛŠìÈÏ>:çóur˜žWYÐbÔú^¿3tÛ¿ÅíÊ=#¯¬|Ü.k\SÌ@Å}j.EÝ“JÍçöOu¥öÚ…5kiÐõfâ*›!˜ÚŽ
+aŒVž”I1-Ëv'-û>
+=B•k·QHwXd°Þíû†ªX}HÒï‰Nêˆd·wYdä%Uo4@ý.GR¬cíÆæ5äuÊcÉ@ãql½/º!ôxéôA¼o7ÙÔ|‘'ÄIZd‰A]ÐÕ„ =}àA˜½ey—½^§d_ô´ÿ6î~ÞÚ<Àx’‰Q^®°<ñÕeéš ¬QNfázfŠyçƒJ‚èo•ðªqFâ×£$¦qí&¥áàcª÷/{k/`‘r®ë©¢ÌêqJÏ”Nü`UpJ¹wò\š4qÿÍô|Í=ÐCŠm«xIp^¬JëWË]÷Î=¶M륳±æZûŠF„ˆ}r„"ËHâ@
+S¶‘ÐÞ½•"E-ÐâtÄk·š_~ð_æUZ7ô.ÝŽì˜áX'Ð0cM&7ˆÇxa)pŽý^2U—ñµ‚:¦ÑQÝ»¾í¦¦®ÉK”GXÂsì€ñs;é>^$îq›•Ìç…à—;,J̺jY…0Tˆ£{::$âV.ÿ¤›N÷nó(zÐ$ß*÷ž;œQ½	ij­á‚
+á7ÿîYrz)µ>ºèimP¥׊º‚ÿßÆÉH¨hƒs¨,ô†t Y0ðp¯åa¥½}$êÖ™亳\“J„JGmŃ·àˆÛâéÞ ù@çOGÇ× Ê]H¨Ás“h¥}…jXvÎëšA£‘ï»óp6/é—X4·î|L.ßxsØù†èØy[ÓSí¿ÞOnPÝuVö¬jÃây<VòÈÎ07îƒÊ‘…‡–‘f@Ø;Àõ	Ç®mÚ¢.:fÏwmFÀ8“´ÚqÓc+ˆ&ÃÙ±Yv?a„®iQ	ÛÃçm	Z{ßϾ(ÚHW‰XHܺ1[žJÎÑ0KØ2Rd&A^Ü
+2~U¾BGò8“ÓŠÚ“ý柳,`7PÛe¨Ôþck+ý­b‘ýG9‡=õگ‹¤Úâô¬áÁZ/‚sD]ˆ«†óâïÍD6÷)¾Eýj½8ÆŒÃ8¿µäÂͱO9HåÅ×é?Á¿ðå*3jò>=¥ãqº½q ®–Œï æû0I#“ÞL¡!Ò ÿÞb¯&³`éóÒª>Ž?ªƒ‹4˜Þ›%±¢
+ã“Ê;døl÷0“¦ìjÈ &kãBA㞘€\µ°oÎû8¨CM¬´žP¨{r^}¨+S—B—Ö¬Yð霮:Òb<¤[Ÿ¶üá	Ö§[g¶1ÓÈä¨$Þ‘<ÞÉ·R˜Ä=…p­;&`À4ÑÉTd`CçØå^•¨¸ò‡’¾èšO ³Ãø®,Ð-Zq&¤è\Ä-_#›©%UgCKLû“ÀL÷DHžbÓäS‰Ô,¹Ë|÷¯¤EOPY/0˜C®’”§®ªÀuM]"3Tï·sûrNªL™·"ïÿcúçî•ÙçµÛ~%pƒ)ELBN4Œ3Ÿ–µ¿ùŒ3ÐÉȯ²³s,<j–[<”öc}T›Í©`DÁŽŸvµã”·YÁ/Š„Ôr|ˆ•u—%u‹íhõ*ÜѲðzŸúé¾X;‹D9ú›|'WFØ<帘•å.t—œýëP
+ì2ž£!òÚ‡.l#ž‡Ø?k,†Ò#…¬Ä™ë¬1o
+ÿ±\ÀrÉöé¥*W:7_1ŸC¥£‰ú¿¡Ûž3Sw@šiwBGÆ¢½Äó"Ø™è¬Í*—ãè¿M¹óÚQÈê><›>Y/ë–ŽŒ{ÂBÓ%»·ðòdƒÓë+m
+¦aâÜUœpÜR-*(CGeìé„yr½äõIÀR‡¾r÷ï.FÝ¡Éè[•)•M&Bâl/“°ž¢I4’=¤MtÞIÓ¾ë’Pü…øN­žŒNl.;úrñ[°Ò²xŽml|~Ïz¨Þ+<J4ÑŸòs50’_½:»mª	?;~°cµs?’¼±ŸN|¦× Š¦üF”¿ÊÇ-[*tæ÷ÿãØ{
+ü'ÖÿÏÑðëqPµÅï«¡ôïã]Ÿ×çfU-ü,Äž•–ÒãÔ¶Ä9ž$f,¥4/¢v4Âp‚o˜{ÏÔÆÒ\‰U¼§Â܉%ZWhìÓ^ª}S£}Ýk‰½9P…«ŸÈ‡²‘yQÝ/v²q<ƒ‘a–„…¢Ÿ:¤oŸ€*¸~ynË
+Ž¼	&ßèM€ÌKmøÀÝVK~ÖF¥ÖŸ1³jSت$´T”g(€P•Ÿ?+(I©	—nÍ
+¦“
+¾®Ò$&×ú5¿ºeÊR/à¾7‹eUmFEìËÈ•tD¾§íD¡¥º	‡ü°Jæ Ì^¼šÂ8¡Äë^áe°æoÿ©ÅÝÔ¨]ÔžÌØ¿¦h1õ†6a:+tÖ@„ìñ:ý¡óª?f>dl©#…Ç°’C{Šß,º¢­\‘Ùð6~™b*.²F誡F:¨Úåù>¥4ÊL$˜[‡):1LÅ4u2â¢åÕ”«ß%³Ñ`ÈXïtmw­î“jñ%äQw‘R¡ËžØ²íý¬¸íxòàeÄÿ^*Ö5±ÑÓÃxlÖ–â‡å}õº¤­Æ¤géë
+&¹ïNk¦Dñí¼Ç>gôí©Ç'ShE1ål®DFÄöµQG’êMj :]\nFü¬ µd…þÕ6y¯:6YßýÝ|æ¹Ú•pZ›³+”ù¶YÌ›Ü×Ös-óE#BD°9Bë$q §‰[ÆhoÐÄ
+¬˜hÀ•Dí<¾š8±Gð/
+¤ŒÅöÔASæ¦àÓ_øSäBP…°p®Lм²ÅÐ/Ý2¡zZñw?om`<Iʦ/WXø†Üþp¿Uõ™À³»™0Æ9ÉWûÚQfu¶%éJ'~0¤8%¬àÇ%‚
+èŽý{©´Ü{m‡Ì”»ºhô3„qÞLmG„°$„iùÊ'uD2Õµ¢2rœ¤¹ ð­)V¿øcs”r´e¿”uA½t—ke’éQ¶ éS±Îä].–F&ò~ùNYáS¼Åòˆ±ñW¤ž+ -·^ LªtãEvdéýÉ÷†´9LO¥É<¹ôRŒcÅ΂0ƒ¸î0é3|UdâåV‹P­SGÊ6…ég¿­ }·÷£
+5;yÿ¹yö(w~xÅɯ)&‘‹–Ú1Û]ö”ß–,rÊzþF%í¢{º¢×jÆ;´q¨Í¿ûÛ\«Gñ(לÛè1†>‰ÞTë»lëÈa®"šŸ;×”¥ àÕÝðÈoàLŽå}DÞ\	n¼	•_P«áÚNзãAM‚ͥ•Œ"APJ¦3„þå@½u@ŠD[ÃÌ{ešÈ_ùÀzÄôHŠBztcç‹Ù]î3›–¾÷›«iF{»…DI´×°7Bn@bo«wâ7hß «ð’ŠÒ꿉ҴrM–$36íÍkˈ·´„‚õù#àÞêt£ÄšÀĨ!Œq6™ÇXOQªIR¨:oªé=To›%æÁy·”I¡ÐÓ¸UŠ‘“?X¿Ô·É‘Íl‘»CiŸÌVbÂûV–¹ñÖ.`
+9ê{úÜ¥•¡–Á¯ÜѨÒ÷mƒ¦duÃ…‰¢™ûKGF³a!çœÓÕxy‰2Ïç…Îùñ¿}ýwÄâýÔã?œ8Ïš¬&!'FŒ—ÁKÔÑòF™
+EBj9>DÄ´Åœ´Ëø4ôn±æYx=Á}ú_,“Ë"’}½[€–çdrToÆoêÕ)LbÌ8Ø“±0`æê*20¡ŸÃÚœ¤½¯«&óÇ`&õÎ"$O1çr§Ê	j‚Òë>õÙR—5yÜÿ¶]ÈжPWKFùsóªŸÇo&Þži‚PñHo	Sv5dP»ÿ!É®ÿOL@.Ô±X¹gó…T¯¨V„ZO(T-³áé
+_m$¥Ê,$na]–£O%gæ«l)2®/n
+ˆ1Æð­’ÍïÔmÙËRmqzVþŽî-™A±·" DÛC÷qùè"e $Tî·Ç4Ü°Ì5,;gûM®ßÆùÓ÷Œƒ8™úÅ,Õƒydg•wÏeÆÌÍKÆ3 l“`ôŒ†ŠíW¸±mQ3鵸]5¢Ì*Dß³HÎÉ
+q+ñ‰RaÃ'õ7÷=háõAñá€cê‹$
+T4Ï·T
+zC:P¢x8ÙüξÜа
+uÎ(%S—B†ü 	д E"£ïf³¼Md¡ò`=bzŒ$
+E±!=4áÛx‚I„EiuÑÊiZ9¨‡K—øè»ëDÉÕZBA°Õõß”“²ñÒH²{µ?<ìêÙšÆËKm–ã {JáKt–CŽÊo*ûÓ6ûd¾WMÁ“åJÜpäàÉxd¹pXBºòe´"äÔQ9NRÒ
+x…Øš+Ñ|¿‹·J9Z¼ÑDÖö‰¥RO›P˜Õ/P&U„:ÿ¬;2ú€ðêõÉCZ’&©Üê`‡Ä"ø_M‹Ö­‹x™‚ˆRFì{j®€§sSpç¡|§|C‡n8ѤôÂ`×ÓÂc’ê¥óm¦3´[œú%Î?RœÈKqÍü°ô]RÎØcR½úûˆÒù'»S"öø^킃½zøÔ2‡Ìä²Ù¢áðà>sÒmÄ
+8-Ã×›Jò[¢‰fÃðÞ÷U
+‘32À6ÚŸÀƒÌíXI¯³Eá]ŽQØ.ƒÆŽì´qQü䋉JÛቜ×æ0d,„ù:¸†µØwÇ5öœr¦µ¸|`à
++«?ƒk#܆kÁ–×5§lUZ*J½@(…ŒÄÁ‘›¤¸#¬vëdÄ:"_Ýø"ÞÜ]ŠÍ~X%sPf/É^MaÞbû/€éæxû¶(ÔìùÛÞzùÿ Áåý3†¤˜~bOÄKiÿj[bœ-¥4€vç/U°§ß°à»ÊÐ’(ÌÛÁdÍYƲÀ¦±à™;YR\ŸV;û2b¡à|oÈn Eè?,œ·(3™ê/¨¾o1ó™N˜Ü@;ý™¤XÝáXpÓeÈhIfãî2è¢cY`SÖp“¢jÉÎÍf±‰rƒY Qþxp·i¸b˜ïåÃ%y£QÊ3ïv
+Z‚¶¦~rËÊ%ãþÊNås2Bò\CÔlµí”{N9SÔ"kŽ{ÊÜ)©Ã(Lä™(¤BñV“}Î@xuôê¯-IÚnu>¯Í7±æRza0åça¿IuÜ÷¸S—Z£N}œgÀ‘)Nþã<AªB¬º´æeº-’TÍ«	Ń|tÓû"êä-!®:K¯Ge¹óÈçó2‰_¥†¨îÇü%n8rpê<2ÒÎ8²2½ĵé¼cfè«c—6Ç0‰zFCEø¥\Ö¸¦…€—úÔ\®öþ@¿uË*éÕ*ˆ=¯(Q<â~g_ÎnhXˆ	´gŠ§;”2(‡ÓñžêWñ©& jÖ,Ò½÷Ì*ÙT+B-©*–cxØIèHùj¸âë)¸¶=+Gw˜Â®ÖÕP"ã¯õ¶òt¬!5’"bZ‹ìNZë|z„7Ös¢<î°È}¡ÇëI°ÞÁïmNRÐÙÛ÷í0ôg©–ý9ÝeŠ5‹Aiûôâ)‹ú*¹ÃœÉ
+Èsî²ÈÕJªÞh€ç\Ž¤EÆÇ‘,ÑjÕê‰ÆæTiõ¸ÏS2´ïÌÊQÂóÉ«­#×¾žýNçä<²Êéý€ÛâØg^iBõ2ðÏõ‚eÞn¯*µø?N•’´È‚º½“D˜®£§‘’û¼Nñ±¼~Õ‚‹ž²@Ù5j|%×IÝ5·]z.úÝ‚-gÊò3g¼SȾõuãlÁü¡©xð9¢¼A}x«Ñ6U:y”.¶óM.£HÃÖØÔÈ&¾¥»rC†ñâz£²Cÿ·ÊÏ)@E¢œÌßô*Ìþ	òÓ”ÍÞ7ýIâŒÙ³[HþQ âãs‰ƒR€ŠY%…£õT…áù»652‡¡nç’Ù¯{¶á¢@ÙÇ"LWßÝÆIó^'öÖ^À?äAËOY …É┃5>œåÀªà”Ûæ¤	²J[÷¨ß$ïkljd_ÜÓ9¯
+Cöq=ßY€¯oîù¸')hâã‡õø‡z½†	ÚKð’à¼E”Ë®‹ºózqšËs*ºô\é§ZΉùfÎe¦a÷êÛØŸå_Oð'ýrYe‚úðW{ Ñ´ë	Œ
+úäD‹Ù€¦q?½¡g74,DŠZ½K¿<lªt$ò5\qûš\[›±­µLaWkä†(ÿÙô[y:†Ùè•Ös)=¾üý¾Ѫ´nõ\§Å-ß'°N½`Æš'«Ù­Î¼Ò„÷dýƒ÷Ê¡ÜCTwí~œ798uig'Ln
+ “ðÂR,àþ,8ç¼d4ª
+3ÿwtQ¿¢0§k8aÇQ;ˆ-A[S?9ëeœÿe'ü·!y€.¯j6ÔøJ³'’§j
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc40.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+ÒøðÑ­C…§…уºc]ë4(ÜñH
×€ÿœ1>þÔ#c3Úe´÷(œ&ÒøðÑ­C…§…уºc]ë4(ÜñH
×€ÿœ1>þÔ#c3Úe´÷(œ&¹íý¿G†S¿iƺËhP¥ÿ³ã%b|áµFÆf©ÊuóP%Lk
nêÅ’ô’n˜Ó¥ç \x
+yØd¹SBae¥Us¯Áx¹joÇçcŽ.¦.c6Ò‘i‹Ð Wã=4{:ÛJÄøßwŒ‘ÌO‰êû J˜½?²#R««²µhò4`䈋u9¬º$ÖõÆ!£¯òÿ•ì^ˆÖ¾Ö*ÜÉ—9õ9Ü-»WÓ@¸ðò­.È'8o¦„>ÂÊWªæCŸðoÔÒê
dÔ¼R¼
®4Ž«ŒØ.íå#§Çó—ºÀé4™<&+ÿØóòÞ“ÓÆ"\Q\Æl¹?Ò½]0®Ûzhöt«”•í£î?…žÉë]”-k#¬aÙöÙï\à‰u6r*2e!ôT¤Ó]:&\¶Dj}ug~.yF¤KKywÐùhÀÕ
<$êrEiH±÷‘B[Cùã7ż
±aµ†Þ¨ëçΥΨôjš5+á%:×Õ¢’é·-Ư¼`šÐí ï%-G±T4¥3r÷r¥Zk®»€mý(ù8G\NpÞQ|™‰®Iц#ýÞµc¬Ät"p÷P÷tÙÑÍækYÕ.%ÉQZÎB`+‚MªÍzã—çÕB“¹Éȵe¤eAhK­$\Ç×F>S“û3i,Ïh/xLVã­ûùÚA9Ëeöàà˸\ 1…"€6ŸKéÓlgWcøì¢)â…gß¡;»‘D¸¢¸‘Øo~¹gº`A«ôÐñèK57Ç[Á
+~!˺5ZsÃK@¯==@[ÕäýS’fZ¼Ý&h´©ù¥)$û{;<’©|ÖF.E¯ñ¯.øÝêläTdÊBõ¨U»ºtL¸qˆÔú8êÊ.¶ÿè*V*ÿ@¼Û^6;Âj8¥,Ç•uWŒd…D oÛBR±NÏÂŒ0Îü\òŒU––òî½ïзxHÉäŠÒó?„¶†ïÛn—e0¬#!£#mŒvƒ2~ʹé]RoãÂzb¥Œè´òÑÇ2ãäw¡MËÓWMõÔ)jVßJt³·Yþ9ÏsZ‘CeÀ)½Ç]ÃJZŽ¥éQœfðœvnJ7½ëbroFóîOŒÆ }›×ãJŽ8¤4bƨ¨hWfäóäW´ÖAkÚçPïpŽ¸œà¡¢*ø/A’¿F ç¡w­P˜†®%aTa†7l"6öîÏV3ƵÐ=“û,"¡etò×Ï=QÆE•èDàó ó诿‡ÑÖ²·\J¢´„ÀVšI‡ôÛ3Ó·„;½e9é£vv9,äŒ=†ŸZ–~V¯cüñhçNjäÇ̾‡$Ÿo4wÊUÊ4‚Ж
+GH¸“³Œ|¦;ëfÒ'XƒÐ^ð˜¬ÛGëï—å 4OòOå¾³_}>oNdbû«&ÄwWìÙŒ ³m*ý,owÉ©‚r‹ÊñÝÝ‹™m¸]bDl#–Ï»ØήÆíÅ8YRÙ(Σ{z‚Zg²X¡XZ×uå¶V?BÁk›;'R589æuƒ7mß?R…_vk?ˆmYm?­Þüo,ÎiÀ‚Kõ½ÿÍ–jn“¶Ÿü.B<‹ij´Ž›î©Ëèþèî.dŸ2ÇúAÆ^º½°(Miö_­HK7Ÿ˜Y·|Aö’æ›–€Cz
+z€¶·:Õç¦9Ì'´e§LÐuOïW*R:Hëövx9Oø4cfQîMÿ­ÿQ5
Yˆ’ÊûE-ª›PŠÓ=Ñ©þqY{1“ÂÓÞ0±Œ\Š™CÿC\›m§ÉØըȉ„÷M ªkiè˜mâ
µépÉ ,âI|'ÚÆXƶ[L*áÞ	Y€„Sw²¼›U—<»Ñ×Ð]‡á¼
+‰\qãÍT¬Tã€e«¼lv™ÔpWX“7ê®Èˆ]Þ«„¤œƒ™`[¤2`\ÑÑ2ßÈá‡B±Ò¬¦žàjQ™ù)v‰ýÈ·~(t±™Få¸ùª11ùÁgý's4ð,Õ	¹=þû~qëÜ3Ê`4þ™SH(¨é´¯´(BÝ àÌGöðaÇØÞ9ÂbÊ@ë¥2 ˜V~—b¿8EFB,&[&FÚìdü‰oϺ¤ÞÛ™ôÄWÍuù¿“dÛÕêðµ—ïo£ü£—Y´fZ/LúUžWÂm$!G¨<
+tfþ¯œdLGóî"_š‹»®š÷µRÔ¬£”è{s²árƒæ´?†ÊRg“º ›”´<Ú¯K&øš	šKt1‰G—¼î§‚úì¥(¸4Ò¾1TIß”l¼('WÏ¢%Ì=ý%ìÜ”ngËÄäÞŒ"ûÁž‘]ú+³Û”:pUhÄ‘M…7Rôa~Zôof÷3Œÿìâ}jöú
lÄÕgø÷2àáŸì
kþMЮÌÕûÕ®u±‚Ö:©Ó Ãàm%Ý_YTí^‚9c"Œ@Ó_î,µ «P\Pöá‹Ñû¦I`Ù¥"ÃhjŠ=á
+¹G8·ûÃÈG -AJ¨ÂnØDlñÁƒ¬f‘w½8>z;(ëXD_Êèù³ƒz¢•XÝÀì	GGÀíb'1õ«ªºîÙzj¸Áæ
+ò?{'lMD«æ„‘Š7͈Ýû]ûÍCc¿±ys¸”<Yu¬2)’õ,«f»svCrÇ%ž~ú~ÀÙpâZM[¾HòtT¢Ÿù‰¬’Ìý±pÆöÎÒL[‰P(gÊrÏ[ììrX
+Õz#´1ü¬CÆå0ÿÐÓœÔÕ“…aH#0:úŸ:£bi©i£Û°¶X‘%²í
äN‚¬Îî-H÷¶ _§¿¬ Þh‰h½1Žm;{øQvË̹N°½¼ý-E«ŽËÃò&󹪭
¹š²ÞYÚ ¦–±Ê3/щWý‡°d8Þ'Hñ\¦Wå™3þ×@hžùž×a{¾ú|ÞœÈÄëKL•î®Å¯]{ÚTç0XÞîKËí+^ÛãHöš5£œÌjrŸûQÑ~鎂„¯ör©Oä‰ÿ§§/Ú,mºÄ.ˆ:ØF1ƒk­A‘Ç—,p²¤¯P.[áÚ$¼"«"Ú¬`O0QðŽæ)<TëR9o´OChÁ§}öô´Îy°_°´4³ê×q¬~„Ÿ'Ö+0vN¤j=prÑênÚ£~¤$éec:5ø5e·	‰Šš˜V‚CÖž&çö±8[Ž¦ò‰%ÁnTV81¾ìÖ~
Ú²Ú~G¡åÞXÒ–÷gã‡1ÔÜ;q#(å\„xÒÔul&¯¥N__¯Ä†ƒ³µú›Åg¿j4ÎHí÷†o^²üúHS+ÁO‹ÍáÍÁ\È#d“é‚‘¼ig}PšÒñ¾G–n#:-²sø‚ñ9ÕùÛâÈHFHßr@9xݪ—`˜/p‡-mynBM@	÷×ǪmÑ+1†ôôqst·ÓQr…NuÊS˜½êžîT¤tËñìðržíÓÁÌ+_q³qÌòÉê8eZƒ’„‚^O=)ýP€‡£”XZËhÆÌ¢ÁšãGã¢j²
9"‰ëŠZI+ 	»z¿Oáâ²öb;™"»¡º><slÙfàfsé ÑPó
+7{Dü ö'K±5ÁÑŸ^-ô
+'‡`¸	/†ã†¸+ÚS<­·Móš@IÖÒÍ-ÚÙwÏà@X²‡õi¤lDi¨¢¹Q¸§«k¼ÅÂseÜxè,¹êÀ{§Ü~Ù’øN©‘°‘0q¶˜Tß¡²¦îye+ª3xk¿³½ºßejÖãêÖ³Ëës`÷§ÎCUqn†ù”ͬHŒiØä÷ù2¸âÛ‡>¨E¨ÛÊKeØì/µà®°;nÉA
+.
º¡KUþ%/
+ÀÝ@
+*}-â-
+žp(83س<_ø6¹I¾–¼ón‚(&›‘ì–æ¶UdÀ¸¿¿d£ß„¹EQ !ÝÔ¢/ïRìçsü4Pè/Œd­ïµmû:±:µ…î‚ø°W¿™ h,
+T]³ÞlÛÄî@&QäW³ª×mï
+IbbïŸÎ›gNæhýX=·ozáëü*â"›K¥f‰Àhá/Í/>§
+ç·ç>tø:¥Ò@û„ÌKºÅï…}ÚÂÔ6øx=7@}	¦:PMÏuCuP„§]Ý…Ž8ñý“­¡r™Ä‰€ËWd]-¬ü38ÄctÂ`àŒðäð>€nº÷!3Û vòfX¸¾5ƒG>ÖÉHÄXEpŠŒ„XL¶LŒ©
+Å6ÈåÞ>ƒiU¡«/õ•®
+‡êïc;È«·¢èz])ÉÉ]*¦iS.àãÓ/vŽ¾Õ^7:Ai´0Š×Ìà7‘Éýw3ÃÞ[å[3²uÌ´^˜éª!®™ÚHBŽMx èÌáC%ȘŽû‡ânÞBÞâ1ϯéåj°ïvÐæ”
Ƚ|Fêô˯ҙ@¢?°ÝÁD¾)k>A>)ów¤µE[5ÍöæyßäÑu~‰'¤Î;i@+5u¼Nø¦(»æ»øpÍÇè®oË*1Ò3›.éO/wØÇýáôÜé$x©C–Lí))–èbŽ3eÁSéÅW2Pmh¹ab¨’£5ØePNªQ³Gᮬµ¬Gk¤ReMÇè¡È€†ÍÌ-S–mB›HÆ/MÌh®ƒYJ…zçJÅ¥5Ü΋•Õ¡DëŸ!
+?ºéV{«5tàªÐ•?š|{©›(9•@•›FV%¿½Ó}ôæH¡õ£‹×¨¯ˆV1®…'½£¼n¤õÂü´õÞÌófãÅÙúÔñ,<éØ•·ÎíódÝ*ß#ÅÖÅ–T$o¿‚‚$]v;î×íßØœüû¼†é«IÎWOkÔí†ðáš½A…·ë·Aê±tO»]›ÝÚJ§¾²¨Ç¼<rÆD€»¾Á3bM¡Æ2L2iÅzìŸ{“[G,J×ËÊX"ƒ–9hzA!±w“"çXw@þK ¸ þñß¿'ëQ>"’À¯WD›ÐÔ&	zßoŽps뛊°/æ@%%/r¬¼VTÃWâÓÚÍx×»áêØÝY¼'µëĄëŽ]Z"‚”™M™"Ü­ˆØÿŸEÌ>?îgp|ôvPË°ˆ¾‰Íï{ôY\¥ªó/×êó_ë…«3CÏwã°ðƒhGnæ“ëS¨[Œ3h7°§ÅŽŽÇÄNb4÷KIiÁ¯ôÔmŸÑ,ù~öNØ šˆKÑåHWLhQ¹LD~-?ßÃcOµ0çùí`M%ªÕ-ëúb.cM3?	n‡
§ëºë‡†Æ&còæm5x²ê>*'EdR9&÷XKÌkæ*ìíñžV ännV|E>”ÆÎké÷0¿=¾ó¶{š†EÄ‚.xœÎ¶Ê†ä“8J!üéü8¯àÙ´š¶aùè¨Y#ïE9…çà‘ñ¹˜¶ TcéçbyNy郄_®žgL ¥Ž£“t{3\ƒ¢+ä
ož“†PΉ䃶ÅÅä°·
+ô"FubåE†‘×`ã½»%µ·;Â&F`t‚6y5.õ@»@53®ÔWns¾
‹F„(üÒƒEñ–Ôͧ’gnüRé#t[Ä0ÒOÒ[«}q°?JyÇÕœ"4EÁZóq]¾ScE8;Û„ŠisWèWŠ(ÇíÔ~>ë‘õ™ËÙ°ÿ¤DÐndmç”>Ù@¡ÐÁIÐ2gb(=Úvö
+í¢ì‹…oœ}6geçZŠK‹›’Yö£‚ŠîŠ±ªU‰);‡¾:"´Qb©V=?>¼)½ùLûoIGo)y¡²©@Q1‰f^¿®ç}Èp¡Nÿ¸Q®×+´¾ä½¾ªÃÂïBty7£x.‰?ð2Ö-ƒSÂ0”õKOy2ñ/fá³€Ð!ï!³Âöaéø¡%•Ë>–˜7ÁA—C
+ºö©¨Ó`°¡Áýžb-“¤H¤b‡x•<̉#Qdƒ3AÈ]p©½Þ™•šr¶ÔG‰]%–‹ÇV6¼6«0Û"ñ)(j[$%…Ôä#뢿ü0ÏCñäODsìÝj³³ÝœS†É¤Ù/ô›)ò+xÕ\kßSüÛ|¡´Ùxiž2ÕãSS^©XÚi•\
t­ŒbÖG‚?“3XàyUC \¶LÊ%Ç¢ Ö¿ÖÇÝ;‡‚¡t¨\ÄoÌV¸ƒ!¼ÁG;Ó£0÷Wtƒ'ß(©HeDKD©EÀž`¢ýÑRx¨Ë¤:rþÞ&už†ÐŸ6S:úõ'Øxå&ÁìÁxÆzý=IÉ$
£TuK[¦CÀ òVýµ
+ú‚¤$¦Üñõ2uò}¾}uh{ɳâEü#N±V`ìœUÔzàä¿É,6Ü©[üU.#
¤,±øø¤ëÁªî	qÔÿ¿ù[·lcÉåD0œªì¹¬ÔÉHÏÊÆtjíjÊs	)-¬†±!LÓñp¶QùJŸܨ¬pbšà?k7ïJïð¨lT„Z@iAq€ì‡8ÿ…ÚlyEsh_„ìDaűü©y©üŽ_ס°¹'21óÎÛbµ¥vâFP׸ð¹µê³=A-½Y,Þ,-
å´ü[+‘!îÀ»Ã“)”H’s´‹Ï•¸á‘)ÌØ(LCWœ¾*¾C•6{wé+—ÎcÔhÇ
+óÞ¼:yåé¦
+м’úß;;’ŒrFCÁ-K?+Ù¿Ž~ö4ý'5ríf_ÍÁ€VŸž‡ß‡Ÿ¸FÈ;Ï?eÒÎú )¹ÿaŽ=1ÜFtZyæíÿrÜú¦N3HxN;7%•Ðû19¹#†÷w©FcP°Ãåÿ%G€R1cT·ï« ÙŒ £ä€rð§I3À-^à4ZÚòÜ„š€ó³“IÚ>e[ñtÎ+ñ ^ã/“a5ÜíÄ´¥F2Ì"P¹ã!)Ö'éaF¿Vb:8õ(õ:âæès»¢äœê‰¦-gÉ!0›A¨Uè=‹ÿÅýä!Çm®’ë¼{ppëa\‹.P–Ì@Á«úç6½¥¿|v‹Qšq
+̽ở…V¾â{â…ù.ÉpÊ´9¼žz*Rç .["5°´‹ÔCoTûýgÜgTz5M”›þœåäQ±IúÕ˜cÙ^É0MhøPùœ˜­Ð‘…YŸ)ÛŽÛYÔ4y0rDË	´’V]kôcžßÙyñÄv/Dk_iuˆ2j^)^ˆWŽGÛFl	øüŸÝí÷Å]`ú›ñl÷yi|xæدÌÝÌæÏ]¿ ûnö$ˆå@ñN–jŸ¿—m¼ZõN»„ˆ7uìIzI7LçÜý.<²l…2ÀÒ§!¾¼Ü¤·Ùî<Ò5Àþ
+m^ÛmV0©¦xGsš*û)€’±¹‡Z©¯4îƒÝ€°ú¼¿”|”¼ÕŠÊEML+A¯kOý{Ö£GSyÊœî‹7*+–y÷ÒU؈ÒMYo¢mSKÖe—™æÊ¥ðÍX2oÉ$ö.S¥ü«ëø›ƒ/ƒÎãÿ†${M
+”ß	Nf59Áó¦æ?úGABÙ{9Ú¯9íœO?}?`â8q-¨£_$y:*QÁòÊVIfðÖ8c{gi&£Ê(}Áß1ºÚºßãX[,Æœ‹Yøˆr'†A
Vgw˜$õ[P¡ÝÑ‹VÔ±ÛÉ(.(±{‹þËæÀóS†ª0âÜï45‡EþÒ­ÕóïdÄ,à`vŠ­‰­`ø1–
ôÛU]wâ=5\îsy‘³6Ȩ"ÛsBmÙ«|MŠM«:‰–Ê­Å^wÝA}vÜ‚\i_–*ªáJ6^Ì•)z¾?È-Èz¹3õ—Fñvq°5{}ˆ6bä½|õp„þÁvˆ»§€$TúZÙZ!àPpf­{x¾ílo’a1e ûÜPL+?Å1ÑuxÔÅù¹ß~ßÅ¢Z3-™&}¤O¥a¸ž­T:3ÙN‹2&­÷qª>Èmc,cÈ[£&þoŠ¢@B§µY^äÅÓæåh Íþ^£RÎ0.æ‹æádþÍ!ÖiVSOp5¦Âòš;ÊðdÕ?
:ÖÂ#ÈGÃwÚëttw2Áí}®c/]ÐX¨º{¡Ø$«•Á€L¢Õ>®{I¿3¦w¨ñØñ¦”ˆ¢DI†eó¬˜UÃ(EçæÚ¶¢³–ÇaɆço>³ÚÃ’Ä ÄÃ#+ÎœÑÐç°zs$ÞôßËåTÙD+–WÌÐß^ìK*¹ÑA‡A ;H“wåøál‹N~ó^CúÛª
gH¥©»jøCx‡^'|SÓsÓ|8èítW¹€ë…–i—Ãú©™µlíðþzn€úU¦×­þWVÔV­»RŽ)¼¨íÉtÞd@Cèf˜§K¸!ŽÃ$cΙ¨f4Qt= šƒê†ê Sº§pÿç™;G_ä/•‹®ÈºZEåfp•ÆƒŒÍq7Ào!oq–éÙúü5Xù;hsJˆdÐ	>#uzëÙi Q‘X	àè™ÀÝýÕý:|Üi óBf«]ìùÌ°majŽ|<±• °Š:a0ÎpFxrx΀@7]õž—ãP;y3,\_”Ï­kê$b,¬à 	°˜q˜O8—lס|Òª_K^÷7AÉÃÆvKs2ØùÔ¸óÖÔÌ‚wA|X¥ÑÂP4* ×o6	ãbw ¦r¥×UYÍôºR6"ºTQÒ¦\ÝÛ»^ìa·¼n<t‚Òu`	³…Ýn?‹5kÿu
+…
+k×ë±û·0õÝg¯¤¶7Cò
JèV$±Fºlrõòçîf›¡¶×¶fyê…u¼-ÏIBA/©„šð(@ͅ߆J,-ë]·6â3p3·úPæ(÷ˆÉ•³	"~{«ÎÖ”îæì\/˜zÍ6
+ÙÜ'¡„¡ÙbƒCÏ×Ô}Ãì½Ñ5g$øŒÉõ‹C¹/€Y~}$§äòãqd$#$á9 ’<àUÅ0L™8Í
˜¸É²7!¨ Šõåí‰U¸ŸˆaRÖ|‚|RûîUwŠ¶j‡ñÑò£Õ6¿êü"NUvÒ€VjêMp‘ƒ»•ù%ùƒxT6*a‚B- º®¶@vÍñÌm6²¬·4¡Bv"&eœíQPkÑkíà‡“ÍAÞ:‹T.b¹f+\Ïž^î­“çßõ¥:ÏHôl<üîvî<c=ðªêˆß*´±«£S¯`y+ðÔ}ARSnðO†1˜ÇR$R1Í<ÄfÊŸ¦2Ï—®d 8ÚÐoÂÄM9[j­Ê œ"·và5„׃×àN†§CêRâ™zÇšyŒ›<	ä.»á§~ã>ÞZâ<ºI¢{ŽßAEwEŽÖU¤Êš“Í_‡…Z¦1Ú„+‘^š…ЛZ‹_rÀÐÀ_Uïaù!:²•ß<€Ê‘xk˜Ï§aJô«©²öA²”ô Ó ”—Wj¥7·_
+ˆË#B~iϬöKjèÝI½7~)“ãBEº·¥t¥Eí	øj?±ƒûÀÆôÂëâXñR"h	72¸ýJâøöO+Pr7€7+Œ>¬Jcg»úõÑ_÷[³MC
¬bA<Ng[e*¿úý1²'²ú„ÏB¡WO½&PÜGßÇ:³—.ÏQ›rˆ¹OÇC.ÜU÷™åu÷¡…ûÌ
+Û—¯éµÿXxÏ4­7sÇûȧT£F—4±ü$¥&4¦‹Ò‹&"?˜‘áï¿©Ôýòø0¨œ	Uä˜û}1±¿¨——1¨HÞc&Hºì=vÁ³Ç£­%åëe,ÏK’4=®žÖµÇýEÉX™s œœ™9V^+*‡ï¥qçmè<åÓþulà¢^ÔûbBïÛß)g‚sËs‚Éþ2èžkº+§©8”SayM“ex2䑈
+kaŸ
Ñ—SµTölöSJDQ"ªC¼÷VL¤ï¬ýHsm±[Q×Kí¾êCý¹fÄš=_‘d˜d=Ò—ôÅ#ö;¶ŽX”³‹‰°D1rÐ>ô‚8Bî;DÓ´<jìòÒá?áìQ-—˜È°R©Ü¾\	OØ*Œ—±â'ËØõ°î€á–]m]áÿ,£cNË¢|D9C®ˆ+½µLô£(ÞàæË+bp0;EØÊØ0|–ÀKˆz㤠µq”.w·Œ‹²Æ×ÀdTã·!	}^Ñ€J>J^äEe¬¨&›®Ù»©‡ð³kßÉ­§²eNwË•›KÛû|ÃÏ™ÏgÿñC³¨JáŠ'3”’î÷Ss‘}­®!â³’mº´D5/š/D¥G
­ã#6Š…|~ÁÎàøõì 0‹}
a‡Ãö6õ²ÓBD•´vª=ª•&ýnðŒY6Ì`iÝžÎ_^nRÕâwi”¸WIû^³8É8û¾.Ë(Kf† ƒîÛ}ýÐŽÜÑ>;˦M¶fÐþj¯¹*óð½n½*=”¨JÃN€ür¦Öª}äL¿â/ê¨4|(òNLØn}S'—$<'“•œÄhó–’ÒŸCõµÚ#¿(Xïüñœ­@)
–¿*¼…£ö:g„›„ö/ÿ™ƒÇ¾”nøbZÜ#f(Òÿžškú¾#×®˜Ð¢o˜ˆüZ~£›Æžw`ÓïÇÀšJ$I·ZËéÄ\þÆšfh^I}á“È“IF9#H¯î˜«‘›âÑG?{ð”9ø3¡è	î@~ÜSËiË‘LÆþùÑÚjðyÉ|TNŠÈ¤rLó°–…ÖÑTŬê,·NÎNÂ’+/›Íùܶý¸tüçÈ´6pQ/Àjó1!ùÈãÇÿ!¬]ÕÜ:ܬ
+øŠ|5‘ÖÏó`czaûq,ö)4Š•\ð%q‰Ñ}ð–YY}‰Bé!Þ¥©Ð(n­áíÈ×Åé¦Ã9DÒ©í¯Õ;p”BåÏåp'Cݯu)qÂ=ïÍM²FÊrÓþÝ?ÿo-q]Ã-Ë¡9`h`¡¤ù¾òžYÄá…@eÆ<‚»Léݾ%zÛÚY‚{¨8ÆÏÓÄòœòÏ<*¾A!Θ]W[ ;èöf¸YVÕÞ!;zÀ6~‡w;w¿xHUu	ÈDáZÖÛߧÙ0²›xjŒ°®)	§7 Õq—8—Õ}(sõDŒêÄ׊?³ÀÛgkJwsv.™L=ŒÀèryÿ¶2Ÿþ’Ip¤ì&ÂèˆL\êY•žTEôüøʤ\Îlòj\÷€k€jfAµ®>,Üæa(ŒP幊ÿ1µ‡S9ÎÜå¤Ë”»ñ´Ì»åûÖóÕôà½ÙR[•¯yˆ%t+Ö#]69ôy‚ÏF趕`¹ž¹¶Kúâ}~”,ò“4·%D2hŠŸ´=ûâºa¦Æ,Šp¾g8#<9<gÈ@ • ôOÅÿ(“²—.¡Jé؉»u1Vv«	Òæ®Í®	P“$ǵü|þ6Ë'?÷/‹¯}ãUˆ½$ÜÈÚÓ5|¯<¤SåØ¥+j+ØÓ)Gš^ÈTøê:o2 ¯t3LÝ«\žGï¿gÂT3€_½Ÿ’½d ÎÄPz©ìñÇYÅÞ%úlÎÊÓ´	–+R§ül±Ü›5›lçš­M/d*|u¹Ù:—&àÛ.O­ù	ѽa*—
9²ñ[	Á	Iª8RvatD&.u¢ÄO*¬z~|eR.gëJÓöZŒfŒÓüók÷äzpÐâ)£ÄÙ²Dœ:›	kŸ È’z²Aï˜ëÞ’Ž040ÞRò_yO€¢bþÌ ¼cAÓ&úà_œ=ãm¢A³=`?͵“µÑH<$¤´Šd"þ„-kãáÝâYÃ<5FXWšŠÝ•VuaÕ'g'aI›™Ã„èòn[ð\:~ýd±Z8¦™`5÷–žòdÿ„æ°xK¢À¢°Ê!úžoÜÚh‡7Øþø€dåì…úSï’"iÚøÙ^Ìß{½BÃB{™ñÂÏí_J7‹|1-nŸ‚3†iñOM»À}_ŸŒ4/ª°þÇdǪ‹#’Ÿ$ÙwLÛÆÃqæ­‘³
xÀJ’|—ÞtŠw ç!"ÄZ;UUÄð7x…F¢Èf‚0ºàOg¡/7)äqµŽºJ5ÙÒ÷xÐ7ÐJT%ï±'@~9SkU°r&Ñq™uT>y'&l18“¬lel>K`«D=ÿRPÔ¶HJµÕFËYcå`ƒ2*†ÿÕžãóÈÉ>ïéÂéɽñö¯	×TŒ%þE—JIwõ§·Æ°ØWžq×I¸ˆæŧÔ*{6{§%"¦U¯^õ+&Rù
+Vð$·¸Ö£¦å«ø_u¯ðÒZ5vyiþ‘þv¦˜ÅLda‡X)Ún_.Š©l‰F€ÅÖq낇lô!d·,Û¦0¦,¼O°©Ò7¸èGÄ6±Ž> ~;f°Ýòª†]¸>qóœGý³˜#—#ý?õÓô94¶MÉá1q¢'€ïEÓî(Ï2ª¢W˜‰J“Y]±c±“§&v_èM¸•Þ…¬mBeŸŽ v»[`ó®è=JqºBô4Ä4B$œNòkÀ‘IÝÓR,’‡s[aZˆGYÀ‡N£POʈ–ˆOŠ!ÀY翤8ðM‹Utäá¡Lê!½#l¦téœ[ ž=‰
1
ž	'B²Ó0cUpýšªèÕß_˜ÉB"gFØQ0èÏ÷N­ð×LŸÅŸð‘ôçz’H[¨êþ–¶Q†@ù¬çwéUHQ¥%¶]!zb!N„'y»`ƪàç)IÍ·£¾-„DÎŒ­¢`̓ÿ÷dêùúaúêÐö{ÙŠå*Fœ¬ÀÅ%ªµôÝÕcXl¥O¶åª\-”;²ºÆ;SLì&2¾Í,šm7¡EÚ6„Ê#@ìk¶ÀûAÍ6zF™UXí2íUËŸIÁâµ&ãcï¶sØÆ׈<`%I>Åo:Eµ”âi„õ<h•h„H%*œùÖ ?’§»¤X9æ¶Â´*

+Ž²60ƒ‰‘èÔÇÔ‰æ$RZE2B˜»ÿþàq¢ï”#,¥MEàÄBÈsX<«Q`QXež}O¹nm4ÍŽ
+•l|@2üvÌ}§ùIºm|â)Ý~6ÖnÔÃ6ýMب™2>´€Ò‚âÅpã©ØòŠæоňû%Žç{-F3Fç~÷»õr=8hqšßbâY"NÊ»ÁPƒdI=Y®
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc42.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,43 @@
+lˆEô-žõi°EAgkô¥4Ù)&\BN"	5"ò‹Ž8ų¿2íÙlˆEô-žõi°EAgkô¥4Ù)&\BN"	5"ò‹Ž8ų¿2íÙØ
ŠõZ!÷Ò}Š‚ÎÖõ:Wh¯RL¸„œDjDùp—{cdÇ
+¯´…Ïw¿»ÍÏé½'ò\v{jäÆÒf_f€HRÈÜV*v­	÷´Bó ¹ú	±÷t®ÐC¤˜m%ˆ$Ôˆï8à3öÆÈ“CÁ’L™Ü(ÐJLXæÚiäš¾1Wkª-áª6ŒØöEyú~šuƒ
+îc0k‡ƒ›OgNù¸ìöÔÕ‘¹Ì6¾Ì$¤¥¬TìŸÆö	Ãýñ87ÆÚ(öS\Œ5ßò‰Ó÷î?‹îä*–¨a>ž¹5G4óu„û@oé2óèA½†U-Ú*J
Hµ
Ãp,Ýfñ‘;(†+¼WX	HYWsxõä‰_|†h/A€/1~§Šå£B.¿Ö-_Ÿ9˜/¥
+P½”˜°Ñ©ÒÕ)ab®ÖIZßI:l'­ñŠòéü")ó±Ýò;ùXÔ$Ýñ¶Âòϳáð.G>ì˜kSêkÈb¬‹•49MÛ'ðê.ÁÆ`Ö+žÎœïmÅñµ·?o…la…,H:=UWE¨<ņ¦^ðìXý
h¿£^jù¥ðJYØ“ë}!§eT§ÞF±ˆ´èwE92#‘ñ›çÿpn‘©Pñ¦¸j£ù»óÁ~ÁÕT1MÂ|4!o6j^«Ô¶y
+xmÞÔè7s»1³ŠßSù½ãw>ã'Zº‰uÏ‹‚3³Žh$û0êë€ÞÏ$d>þûÍ‚gªZ©T”w›àX§Ìÿ?vPâàa3Ç‹ˆ·a%Y•Ð'Sȃ|õÚ8™B8iîÓ†Ÿ	L€5›UÈVe®6°4²®æð(÷Õ¾øÐ^‚^büS	×[„\c±Z¾:íëú5ªé˜e맗Cúêp;gÑ0M’F|‹(|ò؇ïž7ãQ\_g#r-<^W g5-}¿O¹,·RÂÄA±’´£’tØN
+Gÿ	ùÏåDROúhø?sÉí¨…h<Ø$ø¤‰ƒ‹'ä˜ÿ°½–°†ÖÅ„:ºFýA‹û§ù:vï°µH§ÿq™ùƒ{ßý\Ž|Å-Ö¦ÉÖÄE7hrš«"Ný—÷â
9)è¸Üøâ¾ò
žÞë$u¨ ‡cô¯üôÊÎ…­Á%™ÏK$É\6(Ÿ‘À±&6V!%ÃÚ—ÿws~ÞØÂXtzª®ŠMx—¥Ôsü+²åÈØ–sFêü8fîNÖQ/<5Ñ÷5ªžÿ‚Bo½¸ }NQ¼ý.Å°çÐc[¼ÔïWý”²8­;ËúBSʨS¡Œ
+=uÍîŠr8}Ùù	-è.Ø
+ëù•ˆ<	1†á„—¸qÃqS‚ôƒ2øÆrÜgwádF?ÿ$+ÓãàÜ?O 0ÿQm
+Ô[ïkûŸüŸ·¨bš™øhBÞlÔÎz'MèalzÇ[LÈ>
rÉB)µ½õ#½E¦é€¢\K×p3i
¼Kµ
+"qòðÚ¡µÍnæ
+k:b{	£¦ïgÛî|ÛN´iêƒ&f{ÐÃðþ!\láø³ðŒ	þvŸV¢ …ú­)ùçIù¼ºâÒË0´ôc¢ÐHë`É*Ë ¡ƒHÈ|áë‡Î"I´O¨54=î4+Ý°S…ã~ì "mX
cä´>!È3
‰Šš¼úû`’ê{4ÛÙÓ;žk@PÁ<¥ûÙÝÂf“<"
sþÂJ²7½N¦ø÷,©p/„pÒÁ»#˜j+ªµU‡êe¾•É#N‡Õ\ê ë’T2Þ«nçR&±R Ï0Ÿ×+¢XƯT¬ÊAl}h8$=yAÑýPó·aí,"½¼:¼Ä妳¶¸Æ´aÀBèoPöÍ%5qÉš;èî*¸Ä
+~ÿ^žž6ë-œ‹s¦ô’±¸tÇËéj'IÏ&-ÊËS3†éÉàvο`š9ŒøPø=ù­Ã!nÛ¢¸¾ÎOŽi
+×:'%£´ŽTíÔEB–FÆ{ÂÚeÚÏ÷&ûäÝdU»FäZx¼®0(]ÎjZúcžoXs¤™•‚9u[9è­œŽãïƒ×ˆ¤*lì{‘0Å)U§Ú»õìrýG}5¿ÉÀ1|n£š¶&¡P±:}žéÐí~æÇ*MÐx­HíUNÕ-ã}g1}±—þtiŒç‚òa•}Ë2+Eu§•9Ê#Hª/ÒgóqD­_n_㿛ƱÚ3Õý‡ÒëþSïtìÃ,}wSãâ/ïö£ç¸ø—Z±Q±•ŠnÐä)KDœç‡vw%r6-u ¢…DS—>‘'¤Õ“Xº“õ›˜VW–y©™>3óÙrRÍ4.m¥íÙa,ù!¡ËHêM@ÆõCåõþ‰GŸJ/ƒ–H_{œîqSÁ/eÌ]œ K’î<ÿ‘ÃkQˆ×JÐ×‡
+™&‚,õn“‘¸lP#? 0Ll¬BJ›©3ãîæü¡.­™.°=èôIA	šð3ã0)äS¡Õ1•ü)í%täW>êÊȺ¾ï¤¬B3c–ÌŒ¯þ;wõêWµæåVy×2­1æ.ŒÉåpÌÁœ±¢^x=j¿ójI!ã„Þg"m]úœ;=£UT€"3…Ä£oë¢miõE˜„:sH¶ÆH»/h—¼Ô_°ÿE"¢eç\—}Ó4½Æ¶eµÃ®ç>5ypGv‹é„¦‰M¦_þzê‡Á	äpN* _ºã&5µ¯ ô¤Å#M©nP׫ʄ€x„­u”,¿Y8óäá©ú¯ïZÍ\$6­Ëï7
xbß:3mâ›'â¦õdí‘ä¥Îîß–'ªæYàÂÑ7¥}{ªvjæÇ%<o/VÀ’ÀT~•\("[—#ëÈŒ~ãHV»Û8Ý¥~ž]`ã¢Úµ¶Ã<Öë#å,#sMÄ)/íЄ¡Øµ¤;K{%.9Õy;ß:¿ lŸå`”¥ìCO’ê^o¶LÝlôNš,:ÍÂØô“¶˜|ä„Rwg÷FgŠQÏY¸–³àfÒ|	±âM!Ù;Å«h±]ôÝâ…(HÃÍ©Ø9EþsEx_D“a}%Ò‹×Ãe–wDâù(<ý©_w‡ÜÑÖtÄö[QÃΫÁø«œuÒÉL2Ìö	2àGÏgÝ=õÀï2Æ»ºàËÑð/;}
€‰È͉n{YñÙ¨©~ßÉ/½›ýáB¸Øß>í{"ýáì#¬Y@éGRïÓ’ïeiÙ¹‹`u(õÆYѸA•F*?å’¸Dulñ†˜€i1µÍڧ͗gR‘NÓÊÀ½ËÀT‹@:_øßË2D’užMjhzÁhV§} ¦ÛüÅ]Dn5Õ?âÊ~A26«ÕÌŸ´?—µ»SÂ$JsôJ¤©ö®žÒhC.(XÚ°>ÆÕu|B*f6	>)eéëÀ9&Éö,h«,¯»v!Ö€ ŸxWë¶8_ÊÅøë‰C"äÖ_NQbÊ4ÀÝ2éz‹¸až]µý¯îE JïR2¯§™<Ì;xDæá™”yn<gœQ6íóXOà^๟k"F$-:ÔVIÃ/ÜÈψEQÜÕÈz9eÞ˯ÂW ÂK‘à¬~áž…æ»LÞwªÉÊa7F
+4œ·¸É]Ë9¨d¡KÜÓ¤L¤@ƒ`#6³VY°‘C¨"V=ÉL©zG],VWÐÓ=@n
qM‡ž†EJ†²ë­våæ‚|FqE‰‚8ØúÐpHz0ò‚¿ç 8ûs<ÂÇXDg e2te•×Q${q*m‘þuÂ)ÇÌÛ×N…IrYBÇþ€ËÌæÖî~%nG;AGgÙÚªC´™Ò£p„ÍÞ ñ‡Jjâ=)vÍÁ$Tm•üã¼! !lËZ%æQõ9mñM9ÝorKb‹?M|N9Ü`´¼2 ¡ò)+žÅÑ«3#â±ÇÔz´è“‹ÏÔN’ƒLZ‰‹¦fÏÝìcÀ)rí ízïG&›BÜ«Yma„Î;×cvMRà¸Îçz;’xØXJæu0Kϕψą́£‡ok€dX0ž:Ò³tNJ[u$¨Ç:µŠ„.1Œ‘ö™©Ê©ƒóL'ëÕ§È=ªk.\DÎÑ9-OB2ÅDeϬΨ/°÷ªÍ´×‹
ÿ‹qýÇ©ÓwGn÷ŒÕ´0ðeA`PºÔ´éÆ!0Þ°æU8/7þrê¶rÍG%(Û$ó
Uà]ñÄóHß•Q²èdñ¨¡JÄÃÒŒ	k[°PãƒP?I®¦9—|)^ŒTØ>Åö?`—RªS©>k÷ÅäçŽújcb6øÜ64[.)qL_ tú8P{1õþbS¢:{*oœ1ùBº#CEÓß,ñéÆU¥§I‰ìM™#!ϽÇüÑ“Tš8.½ðGǪ6œ·ZÛúÎbú"3*áèÒÓ MGø3ÿüfU’Qžø± û3·»ϵ‘N•ØÇWØÐq¸¤Ù-aºáÍÏùÂ72ú‹"dVŠêS7r‰F2I^¹ÎûâˆG¾Ü¾Ûc8+‘©f·ç¹•JrÆù¦¼‘W‚ƒãr3î-Æìj`çݾÊ	œÕ=œ)m³¥©ºÙ…
+`Ëá¦ÃèÅ›Xúî=¦ÛÙ^Ã6ñ[Ómí3´¢7	,ܽÕR–ˆ%Ó§iã7ë=[nYò‡ãš¾57+To
+D$±qú]«6]ü9‚¢äxfí¤e 
+ì,6îJälZê<@,Yˆ6¦3|?NU·(;°i;÷+-¬*®1òO/|diÂígz™[âUðipãÂ¥h	õf¹\%‰£”ïŽÀ¢*¥fû¯4䤇h\ÚWǯÂXï4B_‹Éš€&‘÷†×÷á.<Ž#”^1
+sêÀç‰]Ò>wêƒ?„À_ú¿Ià¼ÜdßÕâÕ” K+lö4I¾ö%Áâþ¦Ÿ^Ê…º%@–9Áxã?›Ö8¢
³”½³/LX÷:Ü;?Ò~`5áÓ8j_Âì
+`ñR5e­×æ²ðdàC‘ˆ‘꟡tÜëH1>æmØ  F~@`'þ˜ØE„> ”+OfÛÁÑå_\G/\}zÍ0õ’8‚)ýfoåÔ£kàµa/—(ãUÔ‰Ž{¿òç§~N~tF¾ÍW‹= Äø¿Û`RÕ¦_·b7,åRÇJèÕ®|'ɉiaÃUE„fÆ1…Cávî÷É·è!¥1ÁBc?EU†-ƒ!³Ù «5#:\p:vhM¿½Àð^Dò®wÑ׬ò<³dGbÑ\×à…Ÿ%Y¼ðzÔcûÔ’BÛ2¡ÎDÚºé%Âÿ”#¯ß¢Fe.Ò”bä#ý «üVà²4öjÎö`LP¼-d}ûèWìüvz["ª¨Df•[ÞËY"ÚÒ÷Š-tæq‘k^Ð3e6µ'¾}ãŠòÖ©…ƒ±gü¯Ÿ¬2ÖÇwÃS3X6¨²x¤²™P[½]ó˜ŒæSDYÊÓ¸3ú»hg‘qÊw›AÓ|jòàŽìÏQšQ¾
+á4(ôÉŸÕà(Ñ'»dNioøÁ6ü*'aÏÆ9§ÊW[s¯sLjº1z¬­ÿÐ9œT@&¾iÛLjwC@õU—&F=šOÜ ³K‰ðGê5Xc²pûÕßOðÜÒ½DE¹k*¼´2üÒ[˜®–õ†ï	Ç7Å7µa»`¦ÏÉ8Ú–éCÃ$´‡¸HlG(‹Ãnð$Ä"£*tfÚ0Ù+NÙQ2÷6ÈÇ?ÕWÁ£…ˆзª&½mOA;†/}›ÐazR:˜~û"{û£<|¸ðŒjelÄz1NIѲݙ¿nWúöIìÔ&Ñ2“Jx8Þ^¬9$¨.ü7¸PD¶3FË]Æ%±ðJo_“F­³M%/6~ÕQ‚â¿0¿Z w¹€•÷	«ÎÕüÛ¬k«p§ Wü!ºÀÛY©(wq›x±ËF×XFæš•8R^ǽ_­wá¹/“õ^q¯Iç¹`Ý«/D®X½$ó…dÞmd”¶j›t'²¨®Uv.–öJ\r·ò*v£t.cþ@Ø#×À5WÅ2†ž9"ɼÞq˜§Ø9€3Ú•ÛÔ©s¿›š3â}Ú~[t
+ñœw Ì íˆ·aCu¢ õ,œ)Xt‡™­õ8;q,-ø4Õ¤îÎóŒÎ	¢ƒ:²m1{Ý̹4L—°ØŸ5·­uð°y\Ø0¢Ìíü%Iæ ìú¹ìû¬´Š¨‚Äï!¼íøÙšB¯v—Kкõ§ÙP›‡O­ rŠáæŠð¾ˆ;ÂúJ¹³›”š:-™o–ZwŸ"`:û’Ì-
+õ¤B®iñb<¨èÓ¨°µú?ù§‹æ¶BÊ1î(ˆÙïPxçO¾î¥¿(±è•ñ$¶¢›KŸíK%ê¹<86,˜d…ñ¦¹«Ü‹ôq¥yï&«RÂÔܬM¡(
þÙÏi–Øi×ä2²·ý…“ª‰€(<dÝŽƒÎ§z÷Ãd‘kiÝ‹¿ý^vú‡Üö²=ÿ¯MOü£^~´!)®PR{ÿôs!Ð)–ɇ_ÜF]S-„²-.ø9³ÇjþðÎNŠ‡g+çß„m­£|ÇöDç
+$ßÅFE²€.ÏŽ¤Ã»9ÃÊÒ¯>oÀêP÷‘²£¢+‡@3V}ÏŸô¢KCe+Øãqk©“Ìêá²á8Ü$°WÎsUb”k¿&m*‚7ŒT~×$9mˆêØ*ÿ-Òbw
+8‡©S‡3Τ?œ»‰40›Ó®(Þ¡ßM‰(ɳÞâ´ÄûD+Hv¥ f¥ÁÀ/±'Y6ÝžÄg=‹¨€t¾6=í£‹&dˆ9ê!šÔÐôŸÐ¬Sú@Q.«å8—ºˆhïxž.6þ|׆xFŠÈ;Á+QÌ}Øšòýªò^]qÎiëZ
+z¿QÜj·~›Y‰ü‚dlK·…#u~3w'k¦™H”æõ”UOñA!¹Ð†\P°'°âòŠ˜t	ƒlûòÄDŠ–CþB€Å\¶ïÀ¶§AzÏ|c9n½µþ©}4|‘·êø„TÌ4l|RÊÏËrLñXÐKXCkìB±]#ð®ËÅõqˆ’št
…\n|q_yˆOoû´TÍ¿zÙ~z±eg̉ØîœÂé«qp¾‰—íˆDÕ±¾œ¢Ä‰h§dÏ>ômÂ!ºwçCÁŠ&@”ädøû}”ÀUú‡L¼ûÝů}u8“½æ¨I#>Ë>HylÍùO•ÿ¦.¡½CS/x…v,ðˆ4Ñß/5òÜxÎ%¢lÇû°žÝ¼*Ýo#ÖDŒHZtµ¬’/ÛjŒ†[²‰<¸ojt•·ŒÓ€–×Eá§òÐÿµÿ-]Ê´éˇA—×›^¥ƒ,
Š$¢¥·<
+ôrÊ¡>‹C4™®@™–?ÝEüß!Ñk˜¡÷Öày€“ò‹,jàö[ayé×þx­vL»§u»d1VËÄ’¨ã†xîI&‰ÂnŒh%&,smº‹rMÈ_–¥»U˜þU€ÀFl{¬²}?†M‚Ác{Šïðö•cm{§.F”áyÊçõw‘ËwrKÈT¾
OÒƒ”6D¬z˜OôŽºX¬®½»z€Üâš.!'Š”yËGì×ÑøŒâZÌ鎌µÑÓèéïÚÐŽy.;³5rci3ƒ¡3‹	@É$)dn+‰;Šp­é½àô`ùcÓ]pëæx™“°ˆÎ@ÊdèÊ7³¢HöâTÚ?áê™æ‡\„®Ä#‘ü	I\"´6„öCL@º–ÔŒèmÝèŽ)ÆÎ'çe
ï@R“…«³œ’䲄“á‹…ѱ6Áü0JÜŽv‚ŽÎ¯©I†u/¹[&à6>ŠÖq¨žâ“ìÛ4Ö zàqÌ$ïèÚl’¬·¬<¡"Ǿ°œiËåï'‡¡]ÿ”ÔÙzR쇟H¨Ú7(åÛeB@<BØ‹´JÑ¢÷rþÚKUs¢paæ•Ü°³U;5‡s‚휹™+`I	`*…?Ä.£ÅŸûÿšr§Þä–Ä~šøœ:r¥Àued]_ùRV!—¿KfFÙ“µôu“߆¤*@—ÌbÎß¹ûQ†¸ºô¬LB·$[c$Ó™4Å^ƒjÀ¡Xñ¬Í;ƒµœ9˜´QÌ"ƒ§ÅÆRä
+Ç,]ÇôÃŽL+„¥K²Ú¡³Nw¶±§î™¼f N«IwñÆﻦDå%håÍÂAô€7ÇÆ6v³Æ욤ÝmÓôv9ð­°”Ñê`–ƒ>7ƒ
ß…M[Þ(ÖÈ°y¾Ä‚°ë†›¬´ÝÄ’eŸ‚$U™i½÷¶"Ø¡7¡ÿÑÃcÖm—äðÍi`!t¹({蜔¶êHM“tw	\b?ñ/O‰Oû˜NË·SzIÖ\©G€ºåœßZG	*ø€j¬!…K#c³am¼méõÀórà2H¤Ó…¸,ˆ¿rZž„d—ˆÊƒEM^}ó0I‡u³ãâç“O» (îŽÜóÔ¤Íu¼_ÄꟌ
'Í‹ä.uPûI*oÛ7ý)Ö)éÁƒå›Q,cÙ*·u`ýÊ‚À iµuÏ‘B`¡}Ѫp^n2áäÉq䇎JP«H›6{ªi?0”þç5¡av0Žö)”¼ØåsYx2p¯ÆÀDÆu€ÁÞ:nû$–sݺÿ•û£7¢yÍÈÿM_”•›*¹"Ö¶} Û ~’AQr<3øR¼±2ºaø½=£q¤xº8ÿa†Ü4Šô3‚Ò.‚ŒœÊßJù€G`Qܨ­|—ñ~À3¤I¦O|Öó—ÕÓéÔÆ'Älí¥lh¶\R☾]þèéÄ%9còS^Æ¥AÏÿ9—w˜cÈv50ýà_eŠNäNš¸×ÜÚ]
âÌ0p öb÷$áĦYt2öTÞ%bï„iF†Š»£X(ÿÏ(‘ªWS’Å>š/F(³–ô	1§Q‚³¹N–ò!]Ÿ¯¬çá
+öú
+c¤ÜݪÊv¨ÂŸBƒg“å¿;¨)p\gýŽ=“I<l,%s´«éÄéDþfTß͹
+»@2,."g撘Ω!ì"¼éVgT™XõUèZåˈñ˶ðíÚç
+µ‰­7õšŽífãå'̪9¢!í@ëfskƒw?œ7­“®­½âmU¯ZÂi߇8ƒö¨’àȹ9«1Ë‘¨>'€’nÎ0Z^PÞyš›OìæÛ—ŸqÖíj=Zï™ndéDȬ	ɦnäŒd=’¼oëÙ
Ža¥a«ÆpV?þOÌsÓ&oƒ+ê&Ú=­ +¥hç 7ˆ¶¨Í…OÀC¬%CYÈûØ;üsA>#¶7”ä‘ïQe?®ÛäfÁZ‘ÅÔÀÓ§a‰%·z%RÚ{WOi4¯,À[¡eì|ûʯrk¡'¦1e`àú=Ë\¾O ÔðÙw¬‡%ù)‹ßQ›Í —+°éÁzQ«¯¼›lÿ¶»ÚÇfuþYþnX¥g·¤1
J»çWoÎ
	Þ±á¨ÊêÈ×oqZ‚bó"›$;ÜP3Üî`™Ö¢àObSÒÛnËz¶Ü²ùÛ)ajnV¨ÞˆHâéºKlºårYÕðÌÇUÊ@?ZžšÈW()³ñz·žhšK
êÍ¡n# §˜BY˜|’×í5xg'EÍ&ÅXlÁ”ÕØ´Éx€X².
lQfø~œªsPv}ÒvóVZETAbùž^øJM˜Â¹K-µÁ0óIf˜ôR!Wºö1TtçTXÔ}‘òÝËs[!þÈÒ™ÇÎô/¶ÙªýÒ0àÛ™"W,Ð÷Ì2o¸2
+J[5Ã:YTW’@—mÄãjÚ·ÑÃM—q‡°m?£:ŽöNµ‚føD„Õ
‰¾¯´QŽÌëChÕUи©®“C™°Ãh„¾=)L?ó³óß>\xF5¼6b= cœÖx%¹¡Ç#Øרœ™?ä¦AqцÑ-µÒ@ÄõŠŽÛgäæÉÓ2'º¹|îÉ~¾éc’Ýe¥È£·Ù·&5]–=VØñh’xnŒiÐ"¬Ò»±^ŒZ~i£LWKôCùŠí•
+ì•Ô¾Ó0SŽéêmKañJŸÙáQ#¼‰iJ€1rŸðÛ~+±pY{5g{0&(^˜2°ót¥v~
ykÚÌÏÖ½~ÙÁVkíµï§—,TY<RYÂ(£Ð ÷LFHs§¹üÀjß»pÔ¾™ÅÀÿ¤jÊG³ÑyýÈ݆?'
?É:#_è¥Ëb|ÑÕt…žÜ–î!¿‘¬¤…C˜Ïž×â‡PÛ”ŸÈ.8;4¨ÑÐ`x/"yÚ­@]Œü€ÀNá-­Š|@5VžÌ«Ÿ¿×¾¸Ž^¸úô‡`÷9p$RçÌjRè´^¡buÁFˆèËr´(󪂹ã•ðš‡kšúîÏüæ¿âÞ×'µ[ÖÝwÂ^3P'ÛªµöcùÓS"üœ4üèŒa‡®z@•íc²_bAXûC‚ÃVZàbI¼ÁA¤ÂºÐõ[lÞ•Þñæï¿k¸Årx身À¤·Q8¾sÄnXפ“”Í·AøNÒ›0ªŠ0Ì‘b
+†ßìÁóÇHáCR †Åf1gáÒó¦C\]zV&!Ž€Õ£¿çÂì/Ï5`Þ,öVsÍ.BWbŸ„Æ~Šª.ZB{¯& ]KjFt¸àtìКcgý¼ˆù Ek¶TOqÇvãkP=p¶f
+ùtm6IV±ÕVÞí_XNºëüùAEùx{ÈŽÄ¿¸
+³Ý#Jþ²eýôµÆëµ9„«d*_ˆ©iÏJ-fúGFÔæŽÉçtúùmhGÀ²“×”9¿º—ÏÞ—ËŠ êš27›„Ê“™ã5FC£YŒÊ\¹5:ÄÕFç@Kå¬þÝyhñÔñÀ˜ eZÈúëÍ®Ååõkp²@ŽÇyË5	p{£¾²úå<…Ø;&ÓÝ´Ó2–+ëb
ITÿCÀ<ìô¶DIM:ˆÌ.7>¶¡‹²D©¹ó	Z*èÑ=â?=Ö¼½fÊlwNaúÛ	€|ó°J`¤}Í&^ŽóàìÙ°´ÇÐsTªŸë
+$²6èò©ÄñSÞÐ4ù<±OÎ>åC<#Ed±“f°lMyðUy/ ¶gºû-=ѦXqyEL:…ŠÏ6Œóyb"EŽK¯!@ì.[ù`[Ý®=é‚>¿’7ÐÔˆ²‰»mfékÐÎ?â‰î+‚»øÔùÝŃ*¢)¢aßhPõ&#$·Ýä:ÌOnKwžÑÆVR̯LéOåqÍ(ãJÁd€€“Tæh0<™ɲP¿Nk<ÈœÒÞíŸlåTNƒ‘rS‰®¶æCæ˜Ôi bôEGã½r<7FºhViÓÖ„/F-‚?ºß&¥«z¯òEøÄvÄj_ç§Gúu¸«%¨€LaÒ«˜Ô÷ª3LŒz)ž¥]{–*:ý*Ž,Éj°Æyàë·£žI Ÿbÿ5mÕæï¨Å¶ÍX¸‘ßGŒ{'ÔA3È|"BäˆÊ_ÙZ¦Gý¥
+¹gˆŠoÖþTe
+ud并-A1÷Ón(—nw0ÂkÀQƒp©1‘-OMd¥š×ö=ÕO4ŽM«ˆuèÞ7ŸPÝL!¢L…>Iåø”±<½¬èφ›HumØŽP›Ü4ýH•D[TèÌ©`¯Vœ¯¢dól“~·®Ÿ[£Þ¼v>óeÙ†9»ÞS–¼
0p‚}Îë._©PjxâµVÍœòš‚‹½sILgÚž‚v^ú+½*Â,ô¤t-üëDöë[xømýÔÊØ•ô{TIpdÒ’Û–ëÆT@I7g-/‚(o²ÉMÃÉ©vsãÅÁ¶kø5-bœ’¿y§/cÜ®éñ’ŵL¿d;”ðp¡¼E'rH'M\ånm ˆqfŒ‹×KzŠ±–ݦ€AׄÒ'Kyž ÁÙVýþ{}¿RnàUe;ÎTaŽÁº‘Jý”Þ¾;ŒG{šJ^lü·¢<8Ùc`"c´@îo7óK·Ö]¾|Ða߶R<]ñ¾CÉÈn‹Ez—AiAFNeá%ò@­0¦„n
+å«=EÖKàS@®åBi«²OPîâ+ð‹Œ³°ŒÑ)7p¤¼“g*¾Gîk‚ _>hH¾á[) ö_¯êd7Ë
¬=Å®º…®#'¼þœy ØSB7ßo^;÷¼âC’ÓoÀ§K^ˆ8A°gHûÈ¡ÚÈ(5<qÔ+èNyMA³*ª82iIãKûc*À ª•½˜™A¹Yê¨ïêÚ;·ÿìî[»|”H˜ªì\1ñ”¸äsùTì[è,\ÆိF³j®—d>!rDe¡â-S­Æ˜©¨2Ü
+Må{ä©G¨ÛD´to•Á(à&žQ&̪ü|JÖÐÀVtrf©7«µOæc+)fÙ&ú©ü¶èÿ%î2@…@Ç
*s4†êY•#]4†+ºçkB™#˜A‘]áÜÛ=Ùy¬|bŒ;b5¡ýÝ­}´\Û@>÷X%0R°è/G÷pvâXZíh·*UÁûYtyÚbö§…oh,¶²¬&ÌEéF÷²1‰¬G«Ù±ž v£ò0£àWúAÑI•hj±˜3}­#jsGêý:}ò¸4­`Y…ÇåJ’Ñ]ÅéoÅëEu	M•ÃBeÇô»8Y Gí²ë”Š8³ß_Y}ü±ÌlΓçàZçK›û1ˆª*ñ¯`í$þ¯)„Cì3–½þi÷S¯. =+žG@ä	ßÑ	ýa
v™é”0o{+¬»[*©Ž¶í;ÿ
»(8[3	ò:¸ª+Öä+o†ø¡,']û~ò5)tZ/Þ1´î#DÀtë9…Z÷U„AÒÿÄxMÍ»M}wé~ïSÑq„Y¡1®,ó¯Aï+-p1ª^î®	Ra]hô£†6oÄŽoösùÑ»\ì9<t]‰bÁP
¯Ã ðÓžaÁ&WcPÍ7ÿHqY+–#Ç–JÉoxplX-Èÿåꄤ‚]UñÛ÷Ñ„g0¤bh&aWiQ´*ò´¸Çäö;µßç%&QoK¥õâWòÃLK¤™µ¥Eš_P=ᯃÒ1­Ò³Õdysç;IP=çQØ|¢óË%¬åþÞQX?k‰3½íÍð8˜ðAÛï÷K"¤„{â‰$xȧSôó'›È?ÖÒ§cç¼ìé4>:¥ñyzãCšžå[¼HðS6¦õûN+~±¹SÆÓeÅÏh|t<&<WÿòôÛ†)!׶eüuBRA ¤öãõæB½R14¾¥Œº¦ZyZ\ír{“Ôáýœ	ý¦l>Q÷ëœVüo¦,‘»Ê—ƒÐøèxLx®ãùõ«RB³qÊÎVÓ£ÚG[ø“ñˆÓH£—ŒŠy\ƒU›kr›‰¹C|ÞÉ ó?y¢Þ–W÷Ù®ù›˜8–U/wWŠ)¾ 4zßC¹bG¹{·ÈòæÓ.v’: [YV€f¬úƒ#õY–†ÊV­ÛâÖO;…Éßyßp¥H}®æªÄ45ÖzÓ¢­øYû‹JE×á¡¢°~Öf6gLJýp-ý‚«Ãó–DUöÙ0cLÚTn¨ü³HrÚ
É­Tã"Z:¹ÄîpO¦fU~>%kh`+:ÄŸ C›]ý»!ŸL®Æ þ‡nãâ²V>1F“1”ÞðàØ°Z.ã»AP¡4$_þ£šP{¡Ùu2•ëˆVìW]ÌWŸ^N²l§!•×ÉUºªÿ«ó¿Î`UÄÐL®
+Ò¢uTùum“Õñvw£Ó>J$L
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc44.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,45 @@
+®€ov¼Ï/ ü¥á}AeÅ:MƒîxTÞfÇ>™c2›)ÝåJ.DÊ1®€ov¼Ï/ ü¥á}AeÅ:MƒîxTÞfÇ>™c2›)ÝåJ.DÊ1AÞìeƒ^]åWßú‚Ê—tš&Áð¨¡$Ì“|/Æ(d+R§×”\>ˆ‰bﱚÙLqýò>‡Ã¯RN×5˜/ˆü6ªTB¶¥<V°{z2Þr!ÌCS‚:¡Åʼº×®£é‰3è)L6,ŸýM_H…;ø^‘PÈV¤S³5¸|
Ä,ºÎ³vÔ“+B”XìöÒd_µ
+'q…ZãüÆÇòDúÍŽV–cIÅõÃ')¯˜âç2ù|›
+C¤œ³j-:^
åþlI¨„qWx¬}öôd¡äB…†¦m§_WÍGÎ\nÚ	&a¦þy®1°u± ~/oºè4lžæß)ëÊ]ÁL—t_—‰6ei³A[Ï2fÍR˜lX#çš¾ví¼? ¬U¦{jmø•·ô0á5ùJÉO亲sj£÷‹ïSÍŸÎ`‚q±Ó%\´¿7|{ž Cç^Ô¤Xi{ìµ;4V„5°Åñ¹È¾wNâ2´Ûå‘“ùˆé‡¬þ1Æ’—÷öéî
Pz”ª³eHñ 4ƒ…­ôEofÁ¦½"¯
+šœÛ.ÜI´ÙÖ]Æ›NþRC-ÙÓdïø&+†U%{ÔZt¼×áØ’Mâ®ðEúñõÈ_Õ„Q5Α$ÿâös˜J[jã6ÇÙRbƒ?ÊôŠ+{ÍäwaØ(-û›SÛ`ÚS ¾&®‡Ž¸'Ü©LÂQáòAb}ê@ü^ÞiÍhØ!Ñ£RˉºŸ˜3tÓOÈša¨.}Æ¡è)k¬áÂi“’+žî8WTÌJŠú§¥ÛR2è¾3lÊÒ{‚¶ƒd0̇¤-Ø °FÓ)a=.ìÇe~]EªQöÔÚí4<7œhÑE³£år‡'Wþ%3{	½é>["»¨«}¿/H+ùüI5ÞƒŒžôòpösõ`ßjÕiyæ6Ô[ó>Ã$¦‡#Àâ»J¸ucnøö!@†Ó¼µUÝu©Ö »/bpˆ§5±žÉs@&­i[Õ„¸…ÓÛaQõÑ+Ä
+¨Ìød°ÒöÅwvh¬,j}<—ÿoaî(œÙ.d>u«×?;ï
ÏEáb‘93óRp€y¸YÈP‰ô<?ò:UÀrm*—7V0àgÍ¢Œýˆ'ß «LŽ}ùÂñÏÁ ô(5I{Êÿ:]hGõ,ŠÞÌŸQgDC)%«8\¥’u>¯±º‘_O®l;•µÞ+í¾98­!ZTv.ö¦˜ACƒ}J1™£uxw?°õp +œá¤†Z¯»ÈÃíLV(ªJöµ´0èe4³ß­9š*ÙAýŠéÿ÷¾·."¢…ŽÒ:•€4f1+top»¦72ã‹Lç¿_]@"é¸rÖ*hô™
+jè“j?HãÙñæ-”2¶Ô.Û=>l“¯4þ¤Ä~‰õ	Vö‡Õî­PZ*ë+¦«ÀÄP>_ÞFÑ1ÓË•-¾ø!€,6õJ¼O ›“ÎhoäÁÜY„¿`Å4âañ©¦@aLAmN¥O$˜™¢ßù‚8ÄúÉþ€å¼¡Ò‡Ð­B¿[¤>‹i#-f&/ðŽ<¡ãȯØ'ý\˜’ê:ϱª^÷Úfì³¹p$ryÛÁ!vgçW軞)ÂM\ú:‘_Í"RÖEß™<Ò;9V!Áp2®¨…&”	éSW«¤F;ñû•
büŸp"Œ!7ËìÌ>ÙÕAÿÓõ1u‘ ÞU}Hïn5dÍaf؉¹öqÈ`<…UZ­@}Œ»RÂz\Å“ÊüºŠI¢ñµ©ÇhxnÊM¢¦
+¼f‰cY@)I.BvbÃh:­SŸ®<`ÿ‡Ø,²_%пŠ{[×äN®áJfögÏ|¶DkMKúc^Vïå:’j¡&!õùàñ‹PÐüÇ”øDïëOœe“×]‚o5F`£3®½Lö‘Ñ|Y†X:2ØÃkÛæ¤;=æ÷À£ÔÃ5!·ÒòÑlµ¶û|›HQF2Ùþk”mêÆÜíñB€»ewªHw¯Õh£Ý3oÐsÁ1JZý>KC ¿9U
þôGÄ,§Ê?¤!½›§êO±@k^Äà
Sj!æ0€LGÒ¶·<m»«Â¢÷¿V•M…íþÈ	jq9
Dþ8Eìui䵫#NL<Îãâsª)"ÈÖl–‹p^cš©4ù}¹>ñ—îìÐEX*Ôúx3ãÞÂÁP%¯\È|êK³~vÃ&ŠßÄ?rfûÓ9Q‡+!Ãp¹ýË©»{V&äJÑBR.A$œ¢ø-t@ï ±½5Ùo•ê 6¬Ê<¤àòm² õ.x~ùtªäÚT3n¬`Ý· Y2ç
N£]K˜úï™’$kN¢-\ªS9}œ±Ð÷YV8€Ô4Üáç<Àf&Õ–g~¸¶¾%¨ÿƒŸ4]õPj’ö‰=ãtºÐ6.Ž÷X	0¡…#¢Îˆ†(RJKp¸W9ê|Ci?QðBá:ÊnSh@¢wßctZÞÙÑý°¨O¸±1^yë‘ŠÜ R\;£¾žAØ8v7w¡VÇarpGB´¨ì\ñQ-‚†ú”b/[êðî~ }÷à].®„¹!—‹·º q‚xù»o^)y\”dÜÄž÷vÀÃ-4b³*lV%ßU´Ck›Ç˜¬P"I”ñwu`ÍÊh{£Gr)T¯‚ç	Ïãóas*\DYø¥°#­{lËq>&åíSGŒ®¼döbÆ$/}Uîj6áó;TÊ.â+]5Žh8¹t76hÌb.VèÞàkQndÛ˜Óc¾º(€DÏmä±TÐõ/ÔÍ;¹¸nÏÈø2–”iùoUÚ&BífÐåà‡ÜqØ}'Û_˜‰5¿
+Ô~Û¯ÿÑZ5dqµ\«z|Ø;CháU•6ü÷¬ñ·Á™G ´TËVQKzŸæg`Ðq¦…ô_οF•(Àjê»íb"‘Õ’hp£ón}QåI¬• |¾,¡Œ¿b»‹7ZaíBXl÷”ež]+;ÐÞÕŸ¥²cÀ—hÙÂÿ;‚Ï
+ãŽ,CÇZövY(2Ûnüzʃ9]FîG¶‹—)<Ú†Š¹wÎOQ€Â˜‚&>ÚœWžH-/Y£ïp•éá×e_¹½G„c¶U|ÒFZÌáÑï´$M	¢Â}*ßKHêcîüšrž÷µÃ؇ŠÞS¶øŸˆ™A0ÍýL^.ýx_ÛC­Nç¸-9Étƒ(I¼ó©ÌÅ<{oàHäò«ŸBìÎÓ® Ì1XAÎWÿ'(¢Ð]M‚}tÚvˆÆbáÏû¥{ÒÓÍ/NÕlóŠŸÍk!R™š¸ét?¾‡D¤±Š£/x¹vr¬BŸàdAM,L5Ï>¦®KUcëNqîVµÑÞÃÆGÁÙ‹Ç°¬z²˜
+øœ†£ÔO~®;Û*tˆ±Ÿ9Œvÿë7Äå#àDBn‹Å…4|¯·‚ã»,÷=bê?(@¡ªúÃÜj"ö‹ÕëEð†9DANÿ]–·~¤YúP=©J0û‰+…i|ýàÔ‡[ȇÂÌ<­oñ2â6Àx&ª´G€úk¤™ô¸—;‰åi	’YÿwO“ÐðÜf­º€b Ï
—KÌÃÒç§Ä‚ñëðGæÞP†}.’»„=aŒ”:퉚 Y.Q2e=ÌƲ€R0’\„ìÄ›8ÐtG¦#Ax"Àþ(ã­Xy¾'sVåá~’èÀܱNÅ×Eh}߆ç*ãXæÂÃy?@UJ¹é#Í©=²³J½c	ö¶³Õ&œAß”Ìñ$΃øqˆÖš–éƼ=¬Ã×t9Ô_6
+LB÷ïÝÿä=JyœuÚ9 ¢ÕÏ”áôÎëòŠÝtî½®[kýN-æÄשÙð™5) ½å“5íˆÃËž%Ê;³ºÞjŒÀ[fAg˜ñ?¿ø²°td­›Ö«ÑUvz¥ Ò“/úÂ(?nXWÉ^v€TÍéŽËµ¹Š—øaÑ‚ïMp~œ…μKÑó[µ›jBs¹ù¿Øwqëø,+¢&Œ>'d¯áÖ5ÚÉ‘¥Çÿ„"kÊîIsò-	TE¦¾ÖX„þ۴ѵ?¨’©ÈôjùvÉ&謹ݣ>î"aWtŽ$xîC·Ð4[§$f=Þ½æŸb
+0”´ç|–†@crªáõŽ•XS‰~UBg+>n,Ál×û[‡~|ÝØ#¥/³–¿	ÂXRµ”ƒõǼ…¶ÃPJ­SÉ<ž€Ö¼•Ý¦ÔþBÑ`˜Ž¹qsx,*Ú.kK™Yóc¬7(šÇáýISèÃOùixûmç×›‡9œsžš…W	'¦>Lò(khJqÒb´ƒ+¼ÔârˆápŠÅê$Ò4ÕwKFœ˜xÛÙæIRD±=Ø1à¼Æ)Ohï¼T¦Ì§AŒ/$—eÑQMU…ž“–ù€ŽlÝî¥CÖöè6¢Þúo|ÿ3ÁŽŠ°TµéðfÛ¡™Ÿ JC¸øÉ–{üì›4L8	£•~äÌëTï‰êvµÈ¨ó›CŠ¢A­ÀÙ&Ûð¼Âuø )×Õìé»a Ú»r¢VB›àoç‹Okö¬LÕ”¿„¤\‚H%YíZè€Ã]gj¯Þ7É@lE‰òÍeê´@“Bj2*õɉïÙ¬¦Wl0q‡ÿ</¾Z>MüCr;}ç_(¸xUÝ:ùÚy]÷\ðüïèI'Õ©¨fÜEÀ§@²
+dÓœ[º–-éÃ/ÖÕ²LEV§¡»!±ÿŠ-sjÆ*ªm2=”y“u‡:+ipᵆ_Ü­	9HÖœY'Z¸I(¦rú%=½ó²¬pµh¥ßÓxÌL·1Îümq<aJM—Èl  –úDìÉÛ3ù@ºðà1®{óÍ<Ø·¹F¯X…ªç!ˆH_#%€|ã#hº÷ Ô9ñzÛèi½l\ó°`_FY
P¤”–àm®rÉø†þÒ~M›L8tÅTîšëxVp²Ž'C˜KçÊ/ÉÇ€¤{Ds—ƒÖ™ºO¢ý„ßtþ‰Ü¦Ð€Yî£*Æ'è´¡¯¿ç}Mžmb¼òË?	¥]¤¸v[†’òc»Ñ) 1ýíÆï"‹4k¶O×ë9o+YSæ¨ÀPÔ@Š§2‘-a!‚­pìnî_¬“ÂäàŽ„uMŸ>ÿ¢Z6é5Ä^¶ÉýÁü@úóݺϡíÛÌ#3ÎúMîƒç…K¾8^Fº5ÚÇbñ×—VÐl-à $¶nå·‹ <\AoB3si@â*ðïkÞ¼(>Rò¸5È¥•!óì:›ZhÄ{TØŽ¼37© m“÷­’áOÜÊ¢x]¾#Ð*¦f'®b«¸ø²‡ó"2Û?žé¬J£ª"u†Ö+“-E D’5ÿîêÀ‡‰Ðö[ŽäR¨CÓƒÛûÂæT¸ˆ²ÊÌÜžº©vûŽrP£!W²ýiÂŒg¨¢…œ‚•–ÚzÇ ò&ëˆÈKüBƒíW}FGöØ‹â|L×ǦŽAeÈñÄ‘H ^úª(ÁÔlßûv¨‰\ÙVºj0ÐC×0û9÷+Ù­ª†¥ëÀ{(ÛrÆš¦X
+$¸Nêõ¼ïD3 <”utËá.poèn:lÐ…0Ä\¬Í¡ÝÖ¢ÜÈ«-»ÆaiPˆƒÚÕ¨½÷^(µ‡v€ðmT¡Ì, ѹ¯¨dç›±_Ê øUïÚÔ®n„ë—èNVuX½p7ñMGom܃íd15Òï>Þª6©L„Ç̽×Ý¥â­ú,2N«¾þ-jc=Áí³õ1"K‘ÉwCŸ©bó“—Dζ9¥G{ðË=«-¿ŒeÒ),	yÄ%µ>ü=«Cã¿´jÈâw¸Kôø­v†Ðߪ7låó$Eÿ&sŸ/Ž]u¨‹¬¢–'¾“KŒÌHÏ)Ÿ6».1ÂàeÒÔDO8;•ã{fEg­´§€â¥³æ\ô#"ÑÎÀ½âQ=õ¾cŒ7PÔÉkÇÄD:?·9Ðà[ûÜú¢<×’*EZ£M§r’B­˜öe´½ä¦¶zCÖÂ…¿š(YpIƒOÉŸõ'GvùnÕt7]øaX_cÄkn´ÂÇ„:°Øó5Ê!ºVv½¡·#Wy*Æ3Я™ã™„2ŽÝ—p¥ŸaŠv/·§*É)3ÚøÛ²udD؃8Ô7eâÓ#×ÏëSÒvƒÛX†“´ñì²Pd«Üåô:‰rºŒÁŽq3Rx©	oî'Ø™ìb¸.øz6UŒ­±m•^S(ÞîBÝÅ`ÜKÿÉQtôCAñcÚ°ž¢™-L|©%®!Z^²[Ã2à7Ïß:³Ê¾o&gŽÆqªø<¹Œ´…0"rï‘Öc¤€ÄÓ`“?›ˆбâ<!{‹ä¡¬yQ¿š']Xw\¦È~´ß¿ÃuHšY™þúT£–ÉÆÁå)ä!ów›—-	¡¦qí#
/‚`‡=çq?¬ôU=ùe[)â•õüŒöªæ*à‹#E…`ê-²Cv
+ÐÊÈN˜@÷Ö˜¼\ç𾫆G8œÓmZrèPþ’eûO…—xöÞÝÕùK#„Å»A²Ó*[ÍßW¢g:yŸ¶¨`?œ‡ê¾†Æ»é)B©á•Êïü$®iªÚÅqp]…b°‚®ãNPY½ºšú.è©ì
‘:Ä߃ëW0ö¹»‡^œ·Øû	2#ó
Æ>NC²õ¸Àû™|?¥ºœîvnÍåÑÕÎSâ‹ ®ƒyýöäMø‡ÖB¤/)mÏè~aˆU8	[^ðoìäE„#ÝÈ‚šX.˜j$ƒ|QA–ª)V-xàÍ3MŸR‹0ýEDHÝòdœZ1»¼;:ªñ
Ñf6^Ò`!ÆËœâÁ¬w0*¿¡›‘ŽŸ¯“}Eôy-í%[þµžüAv«Tè
#rhKó”}cXÖ@æÐúj1ÞnÆörÃl¹ûwœÀ,ýÎÚ_v±¢#`ZéCìãËn4•×F݈
+„Ü— høCsÛkXózÄÉ~P<€_0Ié=›¥Ô«lŒ½Òûºwäã<õK‡¹Î­mëúHa\y>4D]ªjb§©‚ÕÇ"ßoåDñ='·ËŠýrˆ‚œãº1süU²é zO”`ëV4Òøçݵ,¶êqRQ·xä*´ãÉsYÙ÷"ðþ^\‘ô¤]ò§8rlBŒû%—›W懙…xGÞÿdÙlð.LIuŽé
+ÖU/õm3v×Ò89²ãîž;½ý¥#“öóĈ1~Á8Fž•ëvf
âä®ñçôH–´Æ
+‰o¤°$ù7”ÌGiÄ@ƒ3–…›:¹8ÓS•ÿË&ýŽÑ¡ 
+ ú\9k4zÂ5tÇbŽ(¡o#æ–çëĘ_|ž@ô%^©PÃÇg4¹rîn¢BÈÑ0ìq¾ö)8@²\¢d(Êz…‘y¤`9¸Å•+p½èŽQF‚ðDáPÛ&G°òa¡©W6“ÄÔo›ø_’Øž-*;Î{SL®¯ŽÏ°È%–Âß´<µ‘Xô8PN4æ¬×ßü9Í¥œ—³ŠÐú£ÓTÛ°Ñ™$›ò~€ª”oÏF‡Ozy8{à´‰ÚkÓ™18DÝ”ÖOê· غ£ä‹B\Ìç㾦ôæ›bTf|±2”gÆñq{·L%‚£5…ÿHíâ
±)1Ï‘ezE›³èrµ¾l˜„óçã0:ç©dM¾T°€cÞt†š»VþaºÇI›Ow‚¥*‹f‡%EÉ}ÎÝÜã)Õzþ”ò%ê©r]Y·ƒ5ßõËù	§èÁg0A¶Öçœ.ZÑ•>³O¯ý/jR{úwˆ(=
+JU×¼$ö€PÏÌØz¬¹3îSÐÙMNãnªZâk c]g×;jÇ
›‹!J,‰v{i2¡Ô¶Ì‚Î-ÿ~cíy"}èÈG+±K¿ªìô¸Ý¡‡¥è­g.À7mŠ¾S²W–X´Ö?™¹]t6OsášÎûe î&ÅW@¹;^é™P~Üþ°®¼ì¨‡Ï‹w<*o	3í¿
+Úàü%"e–ùÀÖMâ&¶ð‚yÍïŒÙ)'å”L€™D~±U*![Ü+X³=o9žf¯§¿û'¶w+Ô„æoïc­îâËíXV=YL|NÈCß±j©?W“ã:DÖ‰Á’{HÀËäû¬xCŽ’"®‹'ñ KÕ?R¢}(Ú%óÊ›
̺>ðpjÉÍ£þæùZ¨ŠQa±°á«$u¿w~M9OõÔïìLÍEo§[|ÁD®èHðPf–,®g¥ñQh ¨A°…:mÎ;Dc€1þé‹óÜ³içè™'ä6÷E‚Á=Á†s½0h¶SHÌz¡gÑ#Ä`5uÓø1€ÆäI48ß÷7°¦üª„ÎV“AéÿG¯í-{;¢‰ã7~=€eÏ’ #w­[ËÅšmCEÒµÀg|ÜXŸØ³6ë¶üø§­FW^2{1c™°¤
+w5þ÷“*eq› ”G4Ò\7éd|KJºò¹¤Èƒm!ø3hüpÍn¶l°‚㡱Lʔю‹H¦x!þ±e7§4 Qµá„¿À:-oâæðXT©\Ö–/²ûÆEnP).“ßWBÒžÅËÕ]¶„A<òÓ¹/
+š².J2nbOõ;€`1×6璦͛žï8ÒðëÚÓ³+r%æ!)®NQ|˜: ùPÖДâ¹ÄuVeIÉ»'QÀ˜.U
+§’°NÖHhõ¢+@jnþý`3äK½?\Ž[_œT$µÙä4
ßà	—ÉH¹h·î–Œ%-ð«¯Ñ’¤ˆz­bÝe‘RžÐÊ5¶’ˆÉ"¬v´	º
rÔÛŸ'&gÿq·UšdkH6KË8/¿MÚòe¨Q…S‚^H3Ê¿¢ šª!;1ï4اÁW†0±
+ñÍlY¡Ë(h~íJ|"ùû©N‹¼Çå A¹”#0ß—WÐ&{Ææ>¢C,lï»ãsR“éÞøãfŸ—g	}¨wÏýÌ«_/#]”†mí1öåÅ+h6˜p[7üÕ…ËG^—•ÚP¸ÇõØI
+Žþ©neQ< _ŸhS3W1Û\H|YÍ÷ã‘Oú¨Ã&É:ì*wMû<+†	8Y‚G¯L«ýe™êí@R³"·ÅÏkÂ]©CIy¿Óæš–ðøcùË»[‰©åû’¹›¢§sŽT`(j …EÝƘkäY&¬„+ÝÞÓžÖñE˜·5cU¸J²Ç´Í›º8þÎÔC¡n€ØŠÅd6PK}"vêã—ò ]xp–W³÷èlÕÒ
+#Ù,ÌUýžD$¡Ÿœ@>*ù‡ÊÉu€;„ÔdT÷ïEQ®Ø`âãx^a´|šå†ävúÓ¾Pm„yè¼uÈZ Ç!5ôêÊùâVS¥6¶Íñ™_-¨~¯9“°ý¡É\ðª§tï©òº<ó¸ýåÃÍ’N·OMÌ¥ŠS&€yÈ»4%¶i1ZÏ›^^*ÈSfÝ®F™żæ¦¨¤ÌOÇKòÉ
@G6àw܉¯kŒ{t‹Qo±·y˜Š*¬S_k,Bã	ZæÔ‘TIÚdz5ò;êtVÒàßw¾¥:G<7î6åƒó£ÎÍ?>àlŸÜ™‚×KÑŠa,)ŒÔJϱôí„^Ì[ï(%Ø
r±%²N´m’PQäéJþzgûyEà:wÐW£»ð'…˜sbåÚâx”šÜiÇ™}a‘7±,¥ê/;@*èúGëÔ„ÒEÅ|ξæŒAù¨8?NÌg†^«3Ø]@1éˆÅ«fï€iýÝbAöû‡x­so(ŒC°IÓB
¾FJø
·+üþ?It`nÖ'ìå¬4°ÎáCýÿ,sa	ﲑ ¤%ÒúŸèÚY×ÉÛ6FÐió]µrÿô«ÍÒgظû}$À¾.Œ²" U51ÝÚAäíá¹üu¶)¦Õ<rŽZÿ‰êη¢âõx/.ÆzR yÝ96!FóœÅÃ¥sÍš+˜<pè—¨Á)Ëð¬"$ày2N†-–Ó‰^“Uöˆæ3±/i0ž4«÷J°¿,Hk
 shÈ}5–o7c{9ï6Òó„µN`ð	gm¡;ÖQŸ0-ú¯Yç£èá¥Q½²Á[T0‘NÍu_CcÓúš!ÚþÄeù‹~WºUmì¶8÷Œˆc'ίYô\`óÂ>‘
+Ü]Nw±;7
èüæäg§qËWϲð{r¨|	9ùÆk¿R@bç0Ç‘ÃDhÖqž³ËrÞV²¦ÑM ,µ€.	Sd?Z¶‘Vz¤ò¼£ƒšqÄô~F{UspËŸ¬Ì0u˜HaY¯;hed'L õkÂBGàÅ8ÜÁ¾E;™ÕÝêš—m|ãY´2"lÏj•¼qçŸå€éû§ilÂv1\
+|=¤FØÖ¸Ä/§‰ow
!àì0n«ñ…	Žê¦:z¯®ö¿mXƒ_Ç«…Ff$éšÁÓ–ap¼Œij"©“Äÿ³3¬½ØZÝ@HqÜ×s.-ߨÝ9‰I!ØL{¼ZÐrS[=¯kaÌÑHM¢8ªÏ©êÁô­;òÈ7ä:@x¸‚*Þ„fæÒ€ÙT2ýÃÖ¡eP|¤ùmjW7BûÅt'+´,Ð8•ö¨­îø×ô–«Æ굯ÁÚ1÷ÇŽÅ"g[’Ü­³xë	Û˜ÑF¼iÉšŠ²bœefnO]Ú;óG9(ßž¥‰YðºaF½TQÌNAÄKm=íyûDd«~!ϯå	ó’õ›âØUCÜû`³ã9cMS,\'uô^ù"—PÎJ´:ëþE”[IDê±V;ZŠ]ˆ9jãÁɽñ¶Õ¤M†2»$«ë™Ñ¨m
yë4?ø%>òóÚ'Ë^íüP®ÒJŸáÅ¥h³csQ¯€‚6ùÓÿ·)ÇH‰…¥!iOìëä [B®yçÒ™ÎMY%71©ô“@0ùLË
–優	êÓ¦`L¤ÝIX'k$4ôQ› 5
É7ð0—‡r«Ð‘.G£‰¡N*Ç®úŒŽñ­Ùø˜³“Q
+‚Êÿ•?@¼éIPŸµØ£ëìM¸¯¬iÔ`½i.•ú2>‚«%]yÎÒRdϸ‡ž|—4~8è7[6X‹AÀÿÞÖ&eJæGË$ÈŒ†³$`ëróV<¯GIWËöP«ä‘)Q°HmœÉ÷eÈf]x85êè‹ß(3KW½ÜöÀ
+¦4PT®X̸g“"¿È@–úË÷n׺ýtÂrõ¬Aî\àÞÍÜtؽ`•¸E‡_§±Y¥K,Zk‘ÂÒ :
©·þMgó¼Pwìò`k¨q[xA²èùFâšüJ&@Â"?Öƒ¤ž£n›,ׂ¹’O3ÙÝýÚ2¨_*…X@¿o:CMÈÓ+¾‰]íªÃ©µAÜË3Íœ¬ê°gànÿšŽ³}µD%¤å^{@(
éfl=‹VÒ—w§h†âŒ¨'ÿ…7U-Îq»P¿ÞÚ¥ÇÈbj¹Ã|¡IlO˜“…g³§&WÙGéXdœKaáZÔÆ,z(pZÊm»ç–"àJk©uÕ‡l]ßr‰Ë!.fýÿ_SzsÃ1Œ*3>ÖŸÇ{÷bD–?î†#OÄû;3ˆqrWŽöý‹z$KZcʹRXò•J1GÞ‹¹ŸsKýûbL¡>O ƒzœ/Ú(ïí½Ò9w7Q!dæv
¶_{w|åzK†ÛcuÔÙîm–õíGì½£InØ×<ûHŠãLæ#^ºêMEY1NÙüŠ÷IôÉql¤¯nó0×
+ÿ’¿¨§Œ	.´z/òÅ(g%Zû6a;–.…>ƒR#lk\b™ÝÊ
+¹µˆžpv7ÛöÌŠÎGuS=ÙW{Ѹ,˜áTà’ʪžl&³^-h9§£Ù‰»¾fæ$¨
+QÈUéÚuîzÀØ“yd•rõFD¿gÙ¢z.0÷aÆn 'µÖ“•ˆt~sr½Ý¶ë¥éYx³9T>Š[Æ+É=RHy^ßÏM¶bz?#³¤·„8ëÁVf´L$¾¢Ù“Œ4¼2&ô»´[šSä9„G-ñÊugÕQqô†<±™c=)P²à’ž#÷NŽìïÜ·èÛõ%XÑ$»ˆ·4d°”K¹•¿³’ùi÷BÔ'0xŠ½¸Þ“k¦Á˜}Ùnºí°¾
+Æ•ÖÜu™“ t}­ûj‰Bi¬ì>g_sF®òT‘'f½C/ÛÀˆÕ›~‘ª:07kvüVXgþ¯ð„ñ·¾ŠùYÆRœi}ÁtmH¢åê/d§3àW#Â	ì^sSTRf©í«yêȈ ­pµnÊÙ»F³:ƒË¦¹•wüÏ÷ßgè‘p6ÁnÂAå«æE¾šFj%éÖzøB/f£ùœlˆì2(«°;uÿÅy È<8K¥×õt6äiŸâf¤ðO"ÞÁN B²t^´d-íž”‚„zueòq+ȧÜ[èö¡˜T?Ù’ÇXðÞ
+ê.­/ÅÄm(\íôlªGÚ7¼¦P¡Á4„§—À¥–ã.$>¢èõ†‚ÿÆ©}¯ª²ÑçsMÉKx|¿ò†ë
Ó£ÊÚüóIÒÃQÝ·G*0‹5̬à‚cL!Y:/Z2˜øOJAB=´¼y¶›dÝnƒ£t{‰aÞLÎ*‘âIí,xouÙUYæý·¨ê«<>ÑyCûˆçßem~÷ªiï¦àÕ­
+Ë”fVpA¿&`DäÃ?±ÆU•»À;~+
,½ÙxBöÕ_Eò¢c)Nº°î:¸$QüuÎÄ‹µƒ~éõá½tÆ8î7a®üÛs¬Ž_M#5œúk=|!™3ßò
+NÉ6D£c›ê)$²/áé¨[1=‘Ÿ×RÕBûî+3Z&_QâÇF^ÀzÓ
ãôœ,æÓDÕ2XJ«ÒÄÑ×Iòƒºõ!j‹<EÐ\oÇ»SîL°ââ~Eõªzïʶ6RÙ7÷åñIÑTÝFŠÀÉZ=™y†ì½‰œ-€ó±Lþ*pIeUO6×/˜4’ÝßHâÊÓ_3sT¦d¤úm´w=`lDz2Ä9€8-e¸ÓýaKŽp%»Ú´äÍ6 á9Êëž3ðñ¡§=·ï–F—k‚–­
+ÎoËÒÁ·«ðó1&ÞŽ©‹Ï=N™mùøÐ
i’µ•¦ž2s;ˆ[¡³y0»T¶‡£<®YÎtò#qMÀ~%É a‘kÏR„Oß7‰ÃåHAÒI©—âà×°Ô"
+HŒœRü/	³ ˆú36Ë+iŵÝ4CqFTñÌ•¤˜g¶Ó(ѺÄ}AÛœ ²gi)2é\ÍO>Å?t•£,Ë®`ñok¼%s­ëdF—«¥Ðn{`S(*W,f€\½ÇÑd K±}ëõ7å]ð:aÀ9ƒôV®wû
+‘|œ†y÷më/ø~(Wi%ÁþìÜ4‡×¿·¦Ù@AòçñÕší$UŠuçÀS0&…RŒàª,»z¦Ã”ˆê•±x‰ÅÍ9ÛhÆ­ßÊÞ'±„U^RÚƒÍüÂ&
ªpþ¶¼ýÞÅÕŠF§)°\-ÔHø¢‚1I ½1ëjé‘}zh¿gϵÄ_¥?ÿÕ+­ÞËTÁJ'°ÓHOaÅþ²ŒuƒR¬Zð0Ý‡fš#8¤`犈§ùÈ%"´bkevtIÿ¿Ìlþ¼¹ÀBü,5†Œ#'š?ÂEå"°Åƒ$ûÃê]vjp
Ù[Ÿ`{d3b)&Уý
+s‘‹%ÙŸEî`Tc_+?#C;úŠõòZ(ÇJ"¶áw!å‚ìK¨Íþ<Fä?J¯#ŠÁÀ¨Æ¾V~F†,vé	÷ù´P“”DqßîB×Å–M‡4áxŒÕЖû5úÆ°=±4€Ñ½éÔb¡Ü‘ñä›Øoë*î%Xç$©¾ìYFÀ´Ï†~”CF	ŸM‘a¬üŒXìÏóïu ;58ˆâ£Á„0³2—1šhßð·
+ÅÛ‹Üh7³0Œ§
¥3@.Ðí†æ2«Ö°ûô•ü x¾`’Ïz+Wµ¤E´ý`§Ì)FpUÀÓ	
=SïJDuÄÖ<Êìè’ã4c…Øáeo„KØg¹ëiîÕÛx÷–oGÚËé'¸
+ò|hˆºIÔÄSO·“D£Þ×åXj$FN)~™Š×
+D}—Hë›ÉºìÔ௶#*ÀöÈfÄRL½[çæˆÿzNs‹	ç"ä
,%ÛibæåªyÏ]ôž5Àˬh.¹íÓ§w&Xq&8ª¼¤©‡å™LIàá$qeç¡—·	*ŒS2R}¸Zµ06íYb’@É⤢sðÕTuÛ沯óDýἸ?õUºùSpäØ„ëJ3+8®ÑgbËÔÏ?úôþÐ:c΃w•¾W~ã·VG¡‹¨Ÿ”N}»>žÂ—áy'ê"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc46.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,47 @@
+qþGp|܆á PîiL©Ãå²%Ù¹XÊ
û6é“ñÕwp	ZÓ&qþGp|܆á PîiL©Ãå²%Ù¹XÊ
û6é“ñÕwp	ZÓ&âáŽ$àø¥ß@ >.ÁÒ˜O›×yJ ¯o°‰ë:lÏ;ÿ(·$îà´»Lž“žÉ6„y—>`ð!9/»ÔæX2Ëo0vÖèC'Z&¨<b6™îhj>Ùß>HÝíW"£€]|\Ÿ¹-ž+³ò”@CÞ}4Ët؃vãPsHÁÝ$uk˜¿¨!¿FZ­‘‹¤B 
cKqÐa7èV@±
+Pšg%Å90iîjåD¦Z¶­-/¸¾!;>!l=ò3|ÀýBr^kµÑ°d‹Þ`ì±Í†. N´LMx
+Äl/=6ÁÐÔ JÀ È~Mi.µà­]e°ùxs9ûp5•L#ÛS‚¥Þíl	~XM?›ò|¯£|§Ç®D[ºø¸#oZ!V{ù5€†¡úh‹è­ìÛ 柧HêÖ-ýÞ]ýE‚×»rº=êç¯Íˆ•žK_¢Ôepõ›ò*´3‚è×A°cMBcŒ´G?U„]Æ–â½Ânͬ€ )ÎJ—r`ÒÁÔ×$ˆQ´qGZ^maâ<¼â˦7C×Óe}JÙÔŽÇI2Z°ðw]›Ï÷=DÕœ„¦7S¾GBv|BØz*ùføç„ä¼Öw¿}È¡ÀŇ\@œu˜š8ð•Ø^zlŸ½µÃ‚ÃDÊ
+V%ཷ›óR¿;¾-¹„ÐÆßÛQ»Cq	Éä@Ê)
+eÅn“]”]üšÒ\w'ÝGºÊ}ïðærëàj7˜F«¦W¡ÇØ"ü°š~+ùÜåcÜÊîꮀñÆý¥Ý“m£Y%úÀÎð³©oRKP»/¾26Ì÷îÇêwqÕßøC[ø=S“Aˆ¶:iímFÞ´B¬öïj _é<ÐÍG6Å«]0Ñ=#SɱZy2¥yC/#ïW9òz¨·øëo]O"
Èæ±öÝðÐqßVZI3/T#™“b|硺犳kä™izÉÓC‡,
7!– $=¾0YµÊà÷+ùþTu6fͳ‚}
+fÐDfÍÃ8ˆZ™ÌTie`¤ôÄ$&-g‰Çêm¥a5³ºÃ‹'Ù0Æš„ÆuŽ~ªº4‘1Ùg™Ü‡Eþ(]R”3äÀ¹Ÿµ³H
<¢u⎴¼ÚÂGëzGBgþÊ,ôšdŽ&7ÕuD ¯Û*M‹8Ìùé;¤©\ ¹?wg•þ½æ	äÙxeÙ‹Qn†³»Êú”¯µ“’d´,}ýî$ºþ+ƒózˆ·%:Qn¦aŽX	›XÌCúo=+ÚÄ°öÜM:ßwÖ‘.m$W|póОœF19ÀC{¯R²¨„ìø„­ôTïÌí'ÓÕe±îcú_0—þ"¸€%ê-)pý(7­¼ôØ#gwA¿„(3Jƒ
+‹آÊ9h¤z2NGKèµ{8Üĺé+â¿Ë„Ñy´Q››ˆ‰¬JÝ2gs+û¤cv,aZo4½8‘£«¢k†âÕ.€‰RÊ—Ü;çÏ›dЖ[ÓG#4ìJ
+:…¢¿Ý06­á(ûa¯°~Á-U›%dÃͺ5'ºå)¹¸îN§Ži‰úÃýÑ>äË8ÝÔ n-ŒKQ2®_“­$Då})üVï;DÙ;@÷YÅdh¯‡ÞvžaTÛVî:Í
™6ç°LGÌb¹'‘÷
+YõßÉ¥×Æ¥‰ÁÉAÿ‘ç.W§;Ú[²Jé<ý{OÞ¤– k^adl…"óÁ“Éîâ·£$¦8$ÎÓ¹=ÁypÇ~H°Õ³‰/¤>í¢ö†n›[vhˆ÷‘!&Óä¹ç¸d…톶íz¦;‚
qtÒÇÚŒ¡u„EñÃÔ@:"¾Ïx½‡Žl—Kº`¿zF¦=´l÷HlOhÖG^‹T‚ØÍbÈ9-†qñB*û—²°íš¸…º®cjh1Ö4Õ¬’òdWò†^FÃ'®4rùôMsíËÞ&ºžDÑñ§ý½â£¬´’f^¨F/;Äøs©sÁL6¿ûšO"æ㣡bûF
+Th';ª ÔJ?E†eÝLß6&aÞÓ_iÓ	2{ÖÕ/Òô»†XnB1@Hza`²w‰ÝóVïá¨êlÌ2‡{ú,R.—RN ª	©3Ôߤ‘ýq³­§ƒeJj¸Ù꽄&î`rYþo ð Ç
+̽ˆÌ‡›.p>
´/…¨ÒÊÀUõ•H
+LZÎþ“6É: ÚWÂj{i›N¯`MÌvMÀëR¬¸ì”š¿<£Œü6pú/NJ¶Z4žÍÔÉI¦Öi®ë|F‘)‘
+êü,I*ih?b¯Î/¥Š:áPº¤5fÕo#w{xYêÙue©™XëMøq€ðÏËI8 uA§cÐoˆÄRª}¦m¬Øfržèa{Œø®q|?z¿ŽËôŽ„Îá‰Xõ)ÈLn·êˆ]C«Tšp…ïÏvUO¸@o2~îÎ7ágÑÕº
+ÃÜ‘xUÞ	˜[€uûCK¸ñŽVŠÒÉÝ%ÂHyQÓž&};Ü@‘n‹Áó¯ðʯ¢Ü{k‰é5C>0w;89ÈuXúçÁHiáVûô
sJt*¢ÜQÂ.4.L°¬m§íhÉe\)ÞN’ûÜzPZê>x£ì­Íž‚^wÿ°o¬XJ'°+°…†<éÞzV©•}ñ¥št£î±?\ÚH®øàû½!—;6Œbr†ö<C¤yM1cÕ1”L•ü·‰ÅbÌÖÝ`^Ê‘ *öF<¡Ò¥}vqH”LJþªkÅíGõ¨Ã…ÇN»*·ÊÁÆé,¾`'3á&DmJÉZRàçPnGeõ­FÎî”´”KU…Ô&në5 $o*âž›b7êX~Ž`æWÿ³ÁóS»U…¤È
+'
+‚cPf”™­Y‰rÐUôdœŽ–Íwöp¥•iÏVÙc‹¿òu¢‹Vò‹Åqe,ºù.KŽåÄ ±5çÑfE7Îz
m“|úîÛUqüe¶¨¦„+2+
(E”§dÎæVëUÆìX´Þ*hgp?[KYÖ>Ù$·\¤(‰3¥vªm̪JX9H!…î¶Iü»¯ ñQljw©†T-#'0·ò£_ÈÓX€ivP4þÓ4ƒ+Ƚ1¶»ŽFhÅ”tYc§`lGßPëÂC=}üŸZª+JÈ›‡:µ-µÄ9¸Áí0Z®wÒz}8¾š†EnWé³NÆKÿŒ
‹Y9=¸’ÝÍijNi×RomÁœSÒé›ç¿|Õ‹p§µ@ÜZ–¢dA¾;GHˆ×úRå¬Ãè°èIÅ"±G}sQÍy×N|™g®r·lù„m¿R¨-ÊSK]Å"ìöËåvˆ¯v€ó²—ÈÐC¡ì!(¨$«¬Át‡/lÓ}˜Ž…ÄoN?ó²÷£÷ùQ÷ÇáÂëV¢3ñó6Æ«OçNäv—Ö4†…>g5{MêácÂþBp©W³‘WŸ‚:ã?Ó\®Sv©¶y”Ï'xçöž¡U1]Ö¼ÂÈØDûŸ;ÁÙs[ÖÂoÖHÿþæeÞó±D˜ÀúÐW*•:z÷/'ùŸ<¦ËŠ+[)G.Lÿȃ }HQpH»ozŸòà“ü}·{.6^U|ÇYñÜ+¶ìÐ
ó'?BL»ÕoÓmÈÉ ŽÉÆ©Ct³¬jYbŸÌýìp~×€HI&Mñæä`Ö+A™©¢Ú71ÇqÇôQvâ蹓©_êŠÿ›µ€tDaƒðg,Ø3–iÀcôŒQzþuF`FWæ!
+ÅœÈ錾ë6¦¼I)‚dØÛ:j×71 g}öæû!sY-SØó؞бŽ¼=¨­‡ÄrZ(âÿ„Të3y}Ç)miAÆÔÐb±h·E9Y‚nYÙÂÁò`܈I²*ä>óÒÍPÚ†D2·k³p<4[þ›˜UÅÂÁaí–ùÈ®ù¼Œ›N8AhäïõšæÇ‹¡Li!ˆ4¿þÿSçgÙ[Eu9̼MŒ^v•íx¹PxV®üç’¾ H´ðât‹"b©ÛŠ$Þ¦5^zï²Ö„-ÏÅ®:üW,FËæ*O柘lcë)ž(DÑÛ[4_Ä:›kŒ¨ÐNvI]µ”~Šʧ˜£lLÂ.¡g[±gØŠ7¯Î̵]mù~¢NŽqi¼D÷@ƒ}í{ÉrŠÔE˜ý‡»¾Ò»dö±·^¹õk&0°4Ü„b€ôÂÀyî§û¬ÃßMÉØ…dö2é(X:Ï,:Uv†ÍkØXÕStÈYüaÐ¥’äy!$\æš*L¼ÝÛPvd†;³û~¤\3¤œ@IOfµ£U?çâ({GSÊ”Ôm¯ÉgLÁÀä²áÞ2@ý ]“%-Í%ÛRf5Îɇ•óJ(	‹dÒ„¶©ï–Ä´‘­·ÜöåwCõÝçRŠf)@2…g
…,+\à|u^M¹‰ª÷7˜´á;lt@©®™Ôö,Ò+œCÀóT>[ <úûUZWàÑ4Ò"1š¤X§\+6—’B©:_×#>¥[Ææš…ìšˤEmÅ5þ)cx[ålàé^œ”.q´h!‡µ’Q±ÒA<Ë(øŒôڻؙë$®6t–2IL¯[{ž„÷Èì¢,|¨.f ¥Ñ”K»
r+ª?R*?ÉåX’TÒÐ~ÄC^W&	tß iU>jÌ·'ÞFîö=4ð²É¯êÊO/¾#Ô¾SÛr™„µò€aÓ­èþåìÆú¢yŒ‡2ºÜÃpeÌ ógÛØrãœ	 °Ë šíâýƒ‹’p@ê‚SƽÞ
•¤IúQÚE­Ìä*!ÍÂöíAâø~ôc¡Á5¡Ýÿ’a!j² _ýl:Š±~;¿°¦Y#è‚ 7ùÈ^3õÐÿ6’ñ$'E‹õß°÷R˜Ü8sÉ
º†K¨)àÃ쪞m€ÞdüÁnßο$·€ú€R“¯tÓ6rÝ2Q?`Î_4nª9ÏYO	Ž·¨„/pÿ“¯Çå÷‘i›¥?ðª¡(-<¶ê놖mÿ¬	¹§J™ò¢»!Lúv¥€?ÜŸûŸêŸÜ·OŒv'É2}#¡óƒ§/UˆM$®`6ÿ€”üÄK(ÐXù£·÷OÕQLÝCý‰CY¥"öÖÏj†|`îvprê°éÓŸÒ߬6ëõæ”èTY0¥¢ ™ÂŒwÂQKÕ^*Pîï:™kŽ‡Hß³—?ϲù
+&ÈÒW+݉€ëKGÕ«zJ$\h\˜}EÚSÇÐʸR¡<œ9ë¥ô ´É|ð [ÅG‡:!¼îã}ÞE°”"NÝn–Ýßo5¦A1¯š§EOUÐ(@F…¶Ù¥Ix‘ȼ±Ó²è¨í6o©5¹Îñh}$V}xÏ¡ô¬O7ú ÿW)è[Á~¸©AíÝëgB3vlÄä'ñx†UòšüU¨üP³}rMogå7>eA˜$Í[º¹Iøµæœ_ŸÿôÐçò†!¼bÆ·b™5˜7ås—Ä>…±§À4¼‰?.]TñŒx_¹Wúìâ5˜”áIÖã·IãÞ'èKØc’/ÇÛÐìý󴾙旞üweiPÄøáE'h軚ð*—Ç*Ž÷M›“œkTs‰þŸ‘ÏXaÀNfßLˆÚ:”´¤ÝÓ ÜŽÊ÷GŒÁ«æ9«_œ‡1G‘r¼;Kdg—Ó8ëêDÂ^¿fB×Á‰¹]7,Ç£	œ½‡NÖRç5u&5–ªµ>LÜËj]H,ÞTÙ!+ÄnÉ°üÀÑ®ã{Ÿ"û¦kª$U8:´شѸgÉ‭ü›uJ¦EKw—<“Æ~	¤ËÍ*³Õ’Ó量¸Sg\bé«NÆ* Ì506(/G²佪õÈ%1‡îñàW7Ò>ƒ¬¯Æ*cùêY•?æ•^ÔZܳÑ<f78ø.þ¦'XÐÊü¸iMã
+ýaÞAÏ—¯zÔ|Zj£9¬ù—âÊXi$ï\–ו*@jÓ¿Ì.ŠnôÚ;øéÁ«ªâåÊqMQŠÝŠÐðº$µ¢|Æ	9üfé¼ašÎ>S×ÙÄùáÇ
z0¿©Íð’ºx‚3V8dVPŠ5SÈѬ˪‘Å°™u¡TÐÎà~¶–²±|"¯Hs¸:UPfWì×Iš×] öéÕ)¡³ÜDø‰ZqÒÞ9Çî\¿JaFÛ÷g»ï" <„ÊIÚ…I”:°rBÁq’åkC]ÿ¢ØÔîO¨ZFN`sù[¾:»°Òì È«{ÈÓ(ÀLÄöá!ò…*VÁGj;Öþ–¨^Õ¥¡[x‰àO½X(ÌÀˆ?†há»hVgbqkŒÐ—5(è.²ÆSÀØŽ£ Ë™†zú,>å#´IV”+<téEé\Dý¾÷Š!ÜÏ€ÛA¤‡q#áåÚžz“S‹ÌÅ­7·œDãý"IïRwZw•rmŸÇ`´A,î¹ôúpa)*ŠÜ®Ï{œ‘2–ã²þrzm9§‡8ör¤öÒ`ãæUa|ñ®“<Èêô˜¯Þ¾Õv#Ú‘j/ 
+–ë±+`
0ýTÒԜҳ¤ÞÚŸ%¦¹Ï +Ócø·àSw€¥´
+1YÈ‚avŽ
³é¤×E0›S¥bS[¡Ô¢ĆR¦	!Igz .âC®9ý~ÊDþkò‡š“Ø¡žÔÞã½Í6}Í’—D&Žú梇0ò³œø/ÎAäsØï=Úc¤MZ‰¦–º—DÅñ‹×LGƒLÕ…4Z£Æò˜'à›ÿ5;Ê|dæcVM÷!~’¤Éx²•o…p4Ì«Xñì
Cìûy3½†&_ÅBP™MHKEŸè4^Ø»>ú-•Þœ~û(yó0[m|½mZé	OQ;gÚU¾ðJä‹®÷ºêíç€q30&è„dÊŸ«é_	újˆ%óï¢ó“ß™Ë(¬Yfÿûl‘KžÓœ<Õì3›1h2$|Î,jöšÉßÆ™á„àOrž\rÔÍé·ô*¸F¯ä{"Ò«yŽðî#Bˆ0ø)ê
+J'¿›â™ͱéèÞ3i®{?®#tÛ~»¸A¦ìOqò5ƒN>ðÓñ!_ªbº±e™­.ˆë#vŸ¯æ¶/
+Á/Y1se¨]Ÿ›è^±&=[öfüòÃ(˜`oA¬Sp\:‹>1s–õ5±™Þ±ãáÑÊ¡ûˆ-é½®T7tôó^Nï#xQ‹	V¶RŽ\˜ã]ú0è 0ד
L@ÛH`ŸÃô¥m±…Qöã‡÷·éuª–?¿%£‰ï“„AŽÜ¢àkÞô#ùÝ;å=úsö\l0¼ªø“²ÿ"¥VqŽûN~„˜k·Þ»Ú.ÓXy®ˆÿ<µ"íŸÅÝÕúƒkFzo[ŠØ‹óh¿j‡MyÀ®²€^@‘O>†è{EÔ²$Ä#…çÅàü³’,LšÿÑÕÀ±V‚/OY>©n6b1ÿÖ]NpZnã[Ã\MˆŠFwÅþ£Ä)ÊæAaâç<S@Bú].N 4åD“"â“ õ¢ì24ÙÍo;O
+¾É*	ã+wèˆÂýÎX&­f1ÒÆõ¢ôáêSgçÒî²8í?$Xä×…ƒÊ™RøQ{C7ã;4DõÀÆžçrÒý\2ÌŒÀŒ®ÑB—%ÏaËlQe’4R=È'­«tÔ³nb]Îú›qÑëBæ²Z¦
±ý
éÃ2hK£ç­Ÿv%ÌQÑàØþó¾ÙHX‹Î?Ü2ï艀­û=­!½ezM2G•ä´"PÙã¨Ëfòú“RÚ.Ò‚‘µ½ÄÐsŠr,ŠÃ,f¯}¹›mbX{n¨áµkƸ¥>8÷hOìǃ#–’`¯³Ù)YT²ܲ¯™ŸùÀ¥
’y=TÕ|û¹‡ ©ˆdsÖ{àxh¶á+-ª—™*ŸÂÇ1>3h"3è‹ï…D-Âf*º¼0RzbŒ˜½ÊŽ±íƒu€¸Ü¾”׋]ïËâïAï"e+œp‚ÐÕÃ÷)Ñ“_˜ÒB
hcáã¦Óί¶Šêr… eš¼ì7Çnü¿newuW@öcð…ÜàǸߢœ}`gx×Ú¹)«(Ó™_f†õwíuµ¶äáðo ð¬AåÓ9a]uýÙèDÄO«	H¡Qj¼8ôÃy±Zƒ—Atå®XŒ‹q^qëS•¯åç¼°%âÎjGíª-Xxµ	 ±Ãéõ"äN€BS•§_­ÑTžÑ#-ØÆËR!Pˆ¿«¶h¾•t+ Ö(M½œì’ºw5ü	"‰S-[ؘ™\_P%`Pd?¨ºÔÀpØ ¼Xò<·Î’ó8”Ä&Ÿã§AÜoø6Š†?,¨‘Ãyζέ	8>nCþ(…wº&ÚïüYœâÒ,eˆó€úÇö
+ä	µ8Š-çOÇOêHB²Å0xž’™Ójs,ë¹;kt¯…-TŒ1ÂHƒw45ka¹k$Èñs¼o÷Ö"L`}h¥Ä=õ™òÁSëE›£š­È&ñdÏP°êGêcÚ¯:Ž×VÉ5¢	1Áfðv8?å@$ª¨ösr0k›®ÂÚQm•ƒ–tƒXtªì‡Ö­°·¦è²å'>½W9Õ6òBH¸Ñ)T˜e§« ìÈv{ëüõò¦õíþaû
++Q—ö÷cÛ©Žý'r;ÅïK‚	C̽”³¨uþ¿a!8ÚU¸fU%€,’$žÌw[ª~ÓÙPöŽ¦6‰5µÚCÎ*˜ŸÕyß¡d€ç,@º;(ÔɘÔb’\îø-Wµi=°_MC„¬7¥ú×'c‚«ñFˆË¢±’\IàèJZ‡J«¤Ìj7û”PȹqOÃ1•u,?G0s¥ñ×î†÷§Ó¤	ÌR€dË+yË춼]	ò«‹Güb„Ö”ýæ3…¬•g=ˆ¸Ç>}w㤶~¼[TSBÎ&XV¸Ýø4ê¼.šo'Ión=(-u<ßvØè€OA/µñX¹V,%†–¿ä–aJ&Ä~ÕÊì1fkà0‹
/eÆ…P{#ÞiÜ°;¶$JÎ&%U»,û¨|¶@xé몴®Ý¿h¹Db)U°S¸Vl39„Ot¾³F|W¶>‘=щ]‰ïnÆ<¤o
+ŠL£@´ó¯«\öG+EiêàœaÈ$²¦çO°“n Æ7Ëî÷)Å)'‹UŠÚ—jáRÆð¶
+×ØÝϼ%5\âuÐBw09¢¹‚x‹Pí¨f;¨`û)V\vJ±MÑßF~8}™'%…[-OèjêªSkºWû
+>#6õ$6©4k­/ËH*Alè1d’˜C
+¶ö!óÅYXøM\Ì]W¿54–käVI·„Ú·î&ÑóM©
+sÿß
Þ1€ïÓ#*4“UPj%‘¬C¼à&á¾…o~¤T~(×°9¨¹½ü•†¼®Lè£]Òª|Ô…sN¡ŒÁñzhýyCɉž^ÿÕªÿot«l¿I™íã‚hvð÷Z†_ÂsÅŒO~µ¼º(b‹|þ¬4tÀÓMxaFµa¦«ä/(wù»GÍ$á×Å‘éYòdi¥›àÊ…@ûΫ­äÛ=%à7Kàá¹”SÉ®–ÙMݬ©¤hH #Ì[âܪ<Æd^†ÖçYtTø¹Ú”Ògö4@}‹@)ÇÙ:ç9à€É¦‘0g¡7U’颩ŠG…ÕTB‡™8ñ
+Ç‚ÙíüõÆÁuÁnÕ©F;ê°ŸÞ÷ÏÝ™¤D¨W‚0ñ@J~Èb«h,òßÕõ©ä¦&à_Ÿj_§ã9ÂB
+Ôy@¾çØt	üvc}Q²FÍ]nï8¼f÷½ãl9ÿHNŠÞî”ÞàñI¾žŒ5Y¡ð6EÖ?“ÑXS¢ŸtAÉP•òd/—ôhñIö¬÷*£}ó¤-¥pæi–MR,Ý.›ÅI!Ú¡ÈåŸÜ£cHsƒz	ƒm
ÓlÂû„W:Kª&ÙŒ£³OBõdvQ>T3ŽPÜæJ
«Óˆ9›Ué¤;Cè»l,ä§:d¢~À¾hÜIrƒ²ž.sM&^àã(;2C“×ó?œ˜èœã)3”gêÍÄ÷%ŠË2iB[ÚùKbZÆØÕn{üµ¯ôàý)E3š <Ò(<+W~ýI_P$Zxq:ÉË1ÚãEoS”/=ùYkB˜éìW~¥#ë½£Ö½lE•Ù±
+gfÔ ‡¸ò?Q'G¶º^"õ Ï°ø³Œê9Ej¬LðÍ#0É#¥sžìNdúF_ûS^ª
šHA2Àlã5å•–P½°ï[sóž·¢˜§¢A7¢âaîy0ÈnDªYHr÷iè(mC"Õ»×8£ÃL¤ìŽa„î¾øK†ç†,²WDñ±ƒÔøÀÁìàäÉ}Ï»#=¹£ElË÷4Ñ5ͨ²`WY@/–ñk '8-7ÿ£„ï.¨DE#µìßbšes®¾qý§ !Î} 'Pü"™–·¼T ÁÃt/Ö£{3~ƒyïL0¹®V§8.Ë–Ž·Kô”Htå„ÇÀˆ& ã$0ÁïzÜ
+¸Ö̦{ÿÍõÕú´UK‘Ñœß	ÈÊ„ùÇB®Gn¸>и-úŠ©¦“½‰m¤_x%rËWõ]uøý@¶—ŽtB2eÁÛú¡Š}5Dœ9O.9jèúÕz\#Ùr³±iÛ²GxwŸ!D|šu%ÑÃqÂèÖúto—º§Ü1§£ÞjQ‚bC)SŠžª½=P€Œq¯W’ð?e"»yÍMÇlÞOjoÿÐ&­Ï&äÌ-߃cyLpÃñ”“e>2s¿Ž+¨õ€ž?IRê<YĹÌ8fÛ,öúH¬ú."ðƒ_õEžné@ã®RͶŸþümO=‚ǧË΄fìØ
+•ÕN"ÿðªù){9R{i0€ÿƒs¤¾>öW
ÇduzLÙo_ä;ŸmÆ5™PKûÖ›0ˆ€ð*åªMå {úäšÞÎ×n"|Ê‚-H‡¶io’íw.Ñ%¾
+#ãõ½ÓùBedÛ³dç`&b{þžÈy̆+î­5“kKT/äÜÞ£<Êp©Ð,f`
+D‘CÄ‘sÄ/j-n×æ3•|S,he~\º¨ÿð¾o®éÅÙ=j>-5ß’±EàEhx]ÔQ>cŠ’~3ú^ɾMg§åâbòþ툆=ÑÚèxI]<…A—Ûs’Û¡NÍ–­Æ9^“«2½Åçûu"a/Ñ3
+!åîÊÒ •íߊNÐÍ'k)ýZlZæ\½êq@Ø~ô%S¬«µÅÇc?ŠRëè×äIçùÜ_\§½.1úÛT3“T0óš+.;%Ö¨æá#?ƒ°ÂœÌ£˜
©t5uU§»]¥‰óŽŸÕBmÕwƒæ÷¨Ú†·ñáˆo–@ù矌ÀǤ(5œÆV¯^pþƒ‡_̹KÑrK¾%bŽ?äev–ÈÎ3»pËɈ™¼cÌ(„³ŸoºnX“[%gœ±¤ÓÊ ŒÊù7cR¹E&‰ß Z÷ÙÛ.{­›¬ºupN¾dYSý©‡XÇ7c•ëwõjêLj1I.w|˜¥‹ÔºX¡¨¯BV•Ü}å¿AÛö#DëQÖIH.ªpt뛲ëv[^ Šy…ÛË­~1BkJðs—ÌVĽÈD\í°µÿR[?^£*§!u­u¿mÎÙGå+ê”QŠ–î3x;‘ü U‹‡T{·9»ÃWam¦Î¸ÄÏKôySôø¾ó›¦Å{õƒ¿ãÚGð‰9“ìù«
AŠ¯fЋJ×T´Ѿ±žm(œ0(2‘T]…j`8lP^,ŽyÕgI÷JbÁÿÝ®n¹|EC‘TÆïɲ©íΩuƒ$!Yì<OIÂç5·‚ûÒ“»:ÙÌÀ˜‡*F–ƒa$ϵ”7~Ñ7¼µ´¥ {¿xÌnpí\áQN°0½‰<åmÒšÛç¡‚ƒ3Côµø´Ô[rþ¶/¶û§ÄÙüý^Xœqg5­øU‚˜‹,<ÔŠPÖïúôHr'@!§ÄÝ¡ØEï3Ù‰°ÒHø1,³7T€þÔ»c…\	Üõ4©víÏŸKI0Ù׉⚢*—4—tËùÌÎ"˜a3]^)=1	F‡LÐeGÖøÏ´@\n_JåË ùëÀq	§	½ýiHwYø‘,råÌÏeÂ)|¦³¯•ïß“"ô`cO‡ý9ið.fˆÖðˆúï4«ßýØÁ
;œŒ€f¦æpƒl
+÷_â$Ž,Ëg‘wLRïNùtÊ@¬pȬ4< 	j¦¿E‹I?—}/ê_¨½Ýüq1yøDCæmt<ª Ì®Å-6-s.Ðu¶ l?ïZœ§VÛÔìí¿‘E)ût„årªýòn¡.ÝЖ}ã³’)³º@ñÏ·R_{¥ˆí2´=&⹡r“Á¸c”Â(Œ«óÎkÃD@x‰2ã×2ý
+01³Od²f„C›wؔǻ±«*™rnoße8Úh
+30"Ư’©’5t}ä=„.Ÿâ9×Ö†ºãY­<µÁž">M´ŒœÀæï¶atk}:¹Å]Øérf
˜áÏ¿²&À8ïöJǼ·ÑG›Tô@O‘ª)u¢bÒf
3ã{Kö»P˜•ñßBùT"¬ŸŽÔv±á1M¼·W_¶ðÝžg°P…(
~:üBí`Dÿîù=n\kfS³ñèôä}Z¤«ÆæNáŠdeBòí!W­7ÐßkÐ6¬ÎÄâÖ½3jPÍ\y‘¦­[]‹/ôéX|×Fu’¬5V&xèQ®•Qq¾w²d7"U¢$„9õºt¸¯‚äÓå
ß±ï&RvG¾Bw_|«ÎÏ=ŠÏ¸ˆç6aó	B¥ƒ«‚UâFßש!ô2;¦*…—G(ns%ˆÛçD’äNLtNÿš—J½uèbõœ
+Eëº!£mò«1-‹clä7³~ÔÙzp𚬗MÈ‚î´î7äÚ#“Àu‚XÁoõéàÂR"T	¥Aƒö %?d1Û
+4yáäôÚrSpowJopöª_OF”¢Þx€¬k‘Çæ,§QÁ:®ê(Äy2™Åz4öƒª{	ÀVñäUñ¹À:Û6ѪÂøÿA4;xÉõ-C¡a·ìF©?Ô^]1Ë>VÀ:`ç¨<p•«pþÒJ§êWKâ¨àVÚR4$
+Ÿf£qnUc2/Cký¢:*|ƒÒmJi½{¹µ%¹8{U¡©#JQo<ƒ@V»ÆísݦîWub²Âì={ÏU³Š`+8ÄÛ8i%Ýu¥«qTp+m)Á3߶7¤¿™¯»ðQ>Ïi¸%ºÐ³
¦WĦ¶_µY2•¤QB’Îô]:
+\Ù†Arçü‰ˆáÖù);­_!µ¡>Ûg'&:'ñMÅ%дt1ôN¬û‚]žß¸yÛ–˜Ë¿6r•×?jâ=8xMVŨdA‡lú‡93ˆLþéÑY`ù{%í^‚Õæ­Ã*z ©ÆUš´Q1i3ˆ—ÿ³~!ø0"‡ñ	wò7Œ.»3§×ötzr°-RÛcs'þE2¼!yøž¥Ø•˜Ž˜·h´[6‘ù-NÝ+ãjv‰øÈÑƬšó:Bü9Uðy7Þàh…K°ÿÿåðȇ–×±©2Y3B¯ÃµlJíÓÖÛÂ97¹á¼m4—ŒcÙņÅ:ëòfgL¾—„ /š–Š#Í&h¼­k|éZ .7¡%üëPòû`¶DkxD}ù‚ÛáðlNF@3Ss8Ï6±õ¡qGë½Æµ&)ù'‚ò:e ÚøgÚ´Ïž¢vÎ©ªaý”ÕAóiÉÇÓâf`LÍȉ#KϾéÔ
J[‰™[óÝbâ~ð/,N¶½”Ø|ȤALËjE(kù}z$†9 žÝÉbàŽÞlûÃYû;£/‹PE²ÌãëØ?–!»%x·Åf+bÐdH".øXÔñ)£‘/ßÝžz²§z|±_÷ŒÃSì³ôÏÑÿm­xÀÊ’ÇvòÛˆ®EÙ3ÎhË%å*Z±æ_ÖO¸ä!¸äµ‡ÏsõTmŒCÕöþD¹K òýÁF„
`íRÉ”Nc+Ù/8‡ÏÍ¡fÒePFeò•¿)ÒŒ¬Êá-õâã³ØÃV]´8'_2	¢§ðÚÍ,í•¿ÄûµôAö~A<F2è«ükm‚QÅžâùjœ|ý»ÿB¾IÄiÊ/G\
ËFì#CÑqÀ‡€À{TvN4-K=F+÷®P©þ.Yÿ«&ûæƒÉ’büÆ”¶HT›v*W^Ÿ^²bæÊMº#+ͼLz¶ñÌå6ù›P-ÀÞ‚E¦à<¸t|bæ1÷j=ßeaßõp–¶‘<£hê%62)Wû‹‰”V
+ÓyX	¯I`©pu–8­¹/¡=Ûß¿‰_ë0þ
Z'ÏgA¨nèõû¼œÃFð¢¬q¤¸-Û6ºéþ^_þz«£c¾Ë`á´NƒÎ‚MÜÍ÷ëe%›ŒýY$EâUmZ«liÏ`Í@`³*;'˜€«À#›õW(Ú¢ñÛósÏêI1~cJ[$*Ã;‚¥á¼¾áô8K[Æa‹Àß4uœš¥‡óËÊJ+ç²,HŠÙª0Ú8´KØÒƒ=YÝ=>Ö¡õFï§v×zéæñ¸Ø<`eIí;yãDW¬â—g4ëœü-Ös¡k©\¼(#¼yÄщšiFV‡eþ˜ôqÿ…×lï+ Z¡ŠQÝxmèøÄÑbóÔz"»<"°òA
ãþx6wDÇ'# —§·éÖŒôÞ¶	­ûÐcÔšòAy¼£Ê£÷à1q?x™'[ÐÉJl>dR®&ë5¬»ò°=C’ÀOàê1pGo6€?ž|ÍöŠµyH•FÓ—Ýå{:=9X˜)ã¿·¬^ž²|OÜlÄ‚ñü‚xŒdÍKåÖÚ¢—!ÙïÔ6%øçkã„a’•Òþ‰^Ž¸‹ŒÅF†¿âb㱺œà´ÜÛ¶*8›¸š
	Œî—á[•R‰Ñ‚ÂÙÓx¦€„éº\œ]h׈ö¨ìœhZ:–z'ŒVóA Oá\²ãKLëÑ9Äå‘5q<¨+ìT2®
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc48.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+=È.²š¹Øß5D,o«¡ŸÅ|-EΩæb§hSâU;•£uƒä„Aèqkc5NÐ=È.²š¹Øß5D,o«¡ŸÅ|-EΩæb§hSâU;•£uƒä„Aèqkc5NÐz\y)o­£jˆXÞK_#—øZŠOÑÄSЦ٪v7[êÕ‚Íâ=Ö
+Æjœ½GEr˳֌u|_Ìt±àþ¼R„wÏOæ7¦ô¸õ;ÿM¢øŸ˜1‘Ã%“­½¥_Òmô¸òRÞG[Ô
°¡–¾F3í´	ž¿•¦½Q¯Iìn¶É6·*,‡Ùz±‘Ô%gÉÏ–@Èg‰Ÿ„áIœÎ=Ùö‘™LÑ7Y÷ÕM×û¼µS®'Xo¨êÚòák·Ž
+Šä‹{±êø¾…èÝáe¤ÑnQõm÷vãšYí#-b?:›J;GgW¾¹Ú³	BÊ9áŠ2'‹ÁÄv@úaiÃÆPxˆ3R¤”¶¡ÌNV®†»1Ú¢J×4‹÷
+õmù¤¡Ž¶µ}_1aŒfÇu>!c7Qg¢C’ÅÜqlsTX2¯ô(?µJÎÈÆCK>ƒVi€^Q0šÀ£»XWðˆ…Uöñ¡ÇþIÒúï—ÐSsûÞd-\€ƒ1€Î#ß’%z>¯ñ?/˜¿n²ó·š8³ë*ew¦AN°ÞMÉ©"ùßÖs²K2w€ûÊêÖ	îÑŸ04CÝqÇT‘¥ßWxmˆ~‰ôBÅEñ6<YÂ'šê˜£	Õö
+ÉíaÍþ§ßÊU*Á!¿Ü¢÷ÚóìÛ)²ÇFZÄ~t+”vŽÎ<®ao©<Áû¹lÆ…2TSá‘~UVì^ï:ÀP² Ž'd3Ù új|¥9ÍT!y{„‰rß	dNŸ• ì€éÂÒ›‘ ð
f¤
+U5q_…œ¬Akb©Y”³6hóFL§ÀE©†¼‘>Û¹OG!v®¶ÔnYëb×$d?ÙÂõïiè±å#s3>½Ä÷0ÚïU_qw4ú¾bÂÌ“ê$|BÆn¢ÎY†9—¥âØ樰d&CõþP~w”Ê3Ôô]Ïæ—Ù®BpÖÑÉcš	ïÇa²ë ¦
+dl¬0Av[,»%Î2e•UBÚQ6‘†–|0¬Ò¼¢`)&[k°®ý
ªñÿ_“á’¹éÃ3½¦æë¡È(Z¸<°5Y¨$扔t
(øŽ‚<¹žë3¤ñÈVv¬½ÆÚœ@×9­§ÐXC_Û(Fì<bF*£9Jô|Cÿ~^-cÜyûs)p{ËTÊîQ‚œ}¡šODæ>?ÓL¯8‘žõ–}fp_ÝÜ:sh­uŸ™£[Ë%@^÷¿mµ—<Ië$AŒ–ÿ6y:–>d.îë‰É±Á¿#`h†§â“¨?W£®ðÚ
ü õ„—Šÿlx²™N)É-[D9^Ö´W’3Vüõ>®‚ÿ­ú)â,:N]ðËý6i¬Uv`¾„	"òKJüc‹(·ñþÇÂ.‡áS£‰ªTŸ6Bc¥Yó©ûÅ«Ry“Œ´•üèV5ìxAÂÞO?+Ú™¤kG›W÷j«Žøo(²sŒÊC;TÁ¨'þiì0ù7qxãÝ‘ê}"÷Ÿx.ŸëoØ‘"d¨¦ß?üª=¬Å¼Ã,t y]$NÈf¯@éþÔø<Wr‡¨BòE-WÅÝB(˜ú»âóP³]5øÐèù
…’ÿþTÛk,¤mõ•¬<wä"ö$ä£ Èœ#7@ÅÏ™¹+?]ýÌUªjâ¾%E‚"ÖÄO²5{0lÐû(Ë'Ý!V9™C#g/n¼P\Åz“Tü®ò|ùˆ·…‚†0ÆRÏZDë[i³#µøŒ"˜SŠOe?|«ožŽBìAqµÜ²ËÄ³HÈ ~¯™÷ÃÒÍ×Fæf|g•±!P}/öž½àIïCñ%ãsË=\ð-j¡¬_QóµÝÚGÙŒ—¦ÖcuI)Eó`8©Ãª¾0âîhéaÄ™
+…;ÉHø„‘ÜY²r3WÙ­ÑM}ÈL†÷á üî5Îcð‡q0¿Ú=Û,Åo8•@Gä
6-w¾þéáó'Âzs.5Év‰¤÷gŠ¥ŸÛ{ωfµõºƒÑ3¯A„౿Æ)ÓÂyË@
+QÈØE`‚ì¶XkJdÊ7ª:„©¢´e}Ûh¼wž±¤Ð$g¶×¿¾‡·b¦z­9G*~õ!™5àÜ`iZ\¯Y±çrl?1ø`6E¹:eYÀR'L¶Ö}Aç.Iÿ<ã¾;ß9oÏ›fgQÑË_P´m:x:o÷?ƒbÙ¹f!u¯ù†ÓsªP)³È+XT°\nä¬Ìº‚ãZ#.;±^¨}j²MHÑ5èPíxo!.'ËfUÿ¬ìEg‘©4%€³rGS½°†¾«PŒÅ@izcúK¶º0Åe©-q²ÙðäR
+Ž¨üï„…Ä’›—PWöLîÌ í»ÈeÂx6Ä:<ŒT[r”>õø†ãü¼ZÆ¥òëæRàö‹¨‰Á¢%ú_)žˆÃ[Ñ;{þꈔ¦³T‹n6¸Q^Y&€‘‰¯ŽC°µÍüBF.»·X“õ n1|~»˜C'p?!÷1úÌྦྷ¥tæÐGê#/[6¶‹J€¼ócÚw3x’Ë>H‚1ãlA}s¶ñ½É°ù(¾à:±xË•‰CÅMü^åi»)PY“ˆ89zº®#‡f­¼òt1|È\Á:Ë$ŸcFÀÐSÙ;M~®[Aý©å@÷3	ãØðy/œRZ¶ÏwùRzÆxµк;ðÈç_m%’«	3ü!p½5tñ·¢0éD™1ºfˆr¼ ±u®9f¬å÷|A(ãGéRÙXtœºý‹ç$lÒEªìÀ&aDù–”åƵqtﶾsгP.ƒ¸|‚•œ–ÝzØZã´ÆVWGæßo$¢ ýcÔ’“÷ЈÛP$s,ÿá(“™\ߦ[I¨#l„ÆW²ûOë—K¤ò;u7åͬjÅð‚™¡ž9Sì]žeX§ÛL¬?°
úŒÔ)Jo±Ð\'¸uŸg˜pöÓaÆí‚´’tõá¬ïN~V©/UÖŽ+®0óÔKí,ÞPy扆v¨ŸMNáÒÅ`ïnâðÛ.§'?ÉúDó=#CUaçL7¤vïÆgnF¥³,T£Ë `÷¬´éPÚítÐoOV¯¢ÿ'Æsóð\#ËÞ­?.DÈMQ£~0åIzE—e›Xè']òº8HœÌC€Ïáµíx®äM„ùÍ_ëål7†¡œx›DÖ¿9º UñEúšéÚWs	.¹ÀdKêômèÅápxÊ)ŠZ®—§„P-ék'Ùû {ºjí½Íï9ã"á¨>«Ö&XUÚ÷7 þExîÕ'D·Yf¹é¢1´×ÏÐõ(ÁàªÔ¾ß©JOý>uSÛ±^üvÈÕë¶V”ñH*Õ[@$%,Fn€—:ƒ/oV~ºç4…ª(IÔÙa.JŠD±•žyjö`ؽ,ëPÌKâ0gÁù«UúBï<›ê{;tNÒç
@6ŒZ»éÿš 5žß‘fÝÞ¥€‹N§B¬r/' †FÎ6^Üe ¸—ô;¨åAùøï
s`‘¤ƒ´ˆË¶Ò{Fwí¶Molè–¨øYsŠ1wÄ?}ë!±õ#^¼ï&,Œ²u ˆ]\ù[Ý×s9=D-¦'	ž"Ê~øKÞ!„Å‚âw¥y‹•{@üC/󛹇þ³ŒÑÌ,øÎ78G刕“'­¡ÍòNª%ZÙþÏ2kÐmr«ýK™Å¶Õ_6¬²ÆºÉOÍ€çB ú^ ñ!gݒÆÿJÛæ‹z¸ý$6ZÔ_E¾¢:ûw§©4&Ž¯3Q±Æê’RŠBAhÔìºH®¿§‡ªázyN•¸êŸ¼¶ø-í@oÀâÜ·Â
+¤DÛ !lɧZûÀpO›Ia`ÙÁÐÏ•/ví?¥²y"äf®¯G¿šú˜óß]åÁj>Æøa)ÓØïÜô”ã­>Ž‹Ò
+¢Õ#¼ÙÇw*À±];yÄ[ñÌp`c´X†ô$îÆýâ`c©z«X—Þp7€ŽÕlZîaáÏßûN™ôæ\jìUóÎ	W#«öƒ¼Å5=Pú·ìq¥ž»suѨEòø_¢óF§Œ+W“ߎçN½‚^bR@ž¸SÌw÷i¿fC‚Ýc‘R$›;™ò‹€0¢(­ŠÀÅq°Ö”ȉnItOY2Ï¿ÙÛé›] ™S¨0ÍáçÜ<"fR³Ê{oø±Uº°òì4ÝÕ÷¹L ‰uÊú«2Ðeî!U'½HÎq³casÄQôGrŽTü÷B/jÝ¥ÀÒ*´¸C²ÓäHÉ2…¢¨iê6þJÒãoîvLV½m·–àݶRÇbáZé9!ËW:[$ÓFÑJ4Ø~"bíÀlŠotʲ¤N˜q±ú‚Ó4\’ãxÛav£rÞƒ+Ì΢¿‹¾ uÚt ð3Û¶ÐwyãR°AŽžòï´Í×ǺðDˆƒ#˜ç}ö¨(J©þcÏ—Ëp¹An tÞó~įo'ÌBêCï»æI R{V°¨}¸ÜÕE…i0Û´=F\:v¼MIÝ;P©^àÿ+Æ,D°$#5MœÒk4À.Z‰îÐ&³ý_¿|®-ªz+òúÔyš¿jÍ4 Ç<2ðÞB\N‹ÌªãEÅŠÎ?OhJ{䎦g}aK —Ç×±´"%§å땃.S™QA‡ cÎeâ­Ù,jt‰Ë?žŸ`…çäízd(•KG€ÒôÆé–qi`—ÊOZây¯ýÕ¤Må2Ã,•9+3 ®ñ˜$Á…@ÇkÊ™*½Ñ<è[Èæ¸HÿvÒbØ9DƒLÔ¡±}õÀ¾Õ…Ju“e)ôЬnîÿ×úðl•t>x¨¶ä5|÷íÛåe´‘WùËÑ ¤ÝñMŸY2Jé¾R!
›¶þ¿1ó¤»Æ†‡÷Ýwƒ \LŽ™Hñ_þ©·¹sFˆÊžîz½¶A¨V#–Jøƒ°ovöáÉ
5Q{¨Ülm¢¼²2L?>(C†}w‡<å„Œ'\ks°;÷]ÜbKõ)翯èôpÔé(AÍ­‰a{Þ±ÎmäiÕŸ"¼©µh£W*›Á«œ>é,Òøük-†Nà~Bóbé…ÝaSWèѽŽÉF^¶lq”eûÆ©îfð9‹|
+bÛØÅÿ£4ÔYñš,W­©²ÊòÈ-tüø@` <"éÁ&ðX³*
+œm±ÑúìûiW•‚úæqÿg}ïPaÝ*tð‹7†—šå¼×Ò>kR ,²;
prôiAFÌGe¿ù._Mý6ò7=%ñl­ëºŒ¦rÁ/qøBÔ„0kPÇY1߉{3Ñ-¯=	µùèbø¸Ÿt‹þH#ÆŒ½"¦¯všüA¶‚çO4×<€ó*fÛ­ýò^%¤´qÄëªÖ?"&ûSÁ6ºdLm-x^=ãaß|žæÞÑBŸõpÎâšEŒb5 Ç6ú¡ƒîï¤ô‘ðw&½ivýÓ¾*ÚJ,.9K8f$>åBàgjèÿsY`ψ/bi(̾í'ŠFIøþb\2<’&r!ï¦già­ZµwÜ°yuÄk÷ˆn_ã*\f
äe@êArÌE×óø‚P2ێϤ¯°è%içÓHعŠIÅL>Â*$ˆï15ב0ç­nÍpøýšâ·Ôíû“DK³‰ê~AÃ@c€ªSã,)<FyÈ5ƒÂU„4VâßÆwâèÃ.qaæ½{ \mø7þ%1§ô­´Ûu‘¬®ŽÑ£ÞHY(@çƵ9;ó½
«Já 2´Y—þ¹9ˆ?Œ3°ÌgÜKÓ`ÿϳ&sù•rÖ]¬Ý#·%R>ˆC{ HæXãßP;/¸&£Q¶’MFØ‘®yëžË3–Uùv
+ênׇEÔ—>ý/_!5£€ÈêyfßÞäü
+ÌúW1kÛ8HLö˜ÑÃnlÕiŠSŒ<æ”Uøzñr¦Åº!Ê°S«˜E0~}é=µR”Þ½¸Nmê<#Î-àñ»Â‘Çu9è÷ßEÃœO¥
”“P	ÜsGptR±H¢ÀÉ1Zw™ß&>i[Ž•r_Fš†ñ©ƒò¼pLü¬O^ª±VA`ûµ–ÇX¡ òÑ
+ìM#šœß¹—ÀÃÜÙý«\SN~éˆûzFÁ¯‡p+¸Ù™¿Îñºml©ÇdÜߔĦ÷ŽêKÉ~Š‚c¶_=y »?îäìëÎ4–†ªÂÓ˜nUìÑ=ÎÜŒW{6X¨[‹@À(ó<EuÏ ›)Çè½Þž¬CYãN‘æû»©
+,a×Ú4¤yâ³'öäó$…Eé&J¹›o§ ô58\Dèl¶ŸvÝÓ2æ-¤¨+ý¸F‹¡G~\ˆš¢[ü`×’ôŠ3Ê+°ÍNºùip%…†ƒßwÇ8ðAÕ&šïÀ»Ž¥ÝÇÓPR¯æw“Ëv
1öå+,‘:’Q«°¤ðùÔ6/I`*ÐE¯[?‡¾Ë×Øn_%.ð*"+ˆ±cri@ªÿŠé)Ï©®æ\oÈ–Éõ
+ÚÍ—ßàð‰Rº½ùjô¨ÐýñÅn/M€).¦DdVúèNAœKû݇ÿ,´â«]üÚƒÅÇ‚	´A3S ZÏÖN¯ë]öiÔÇg‡Ã4.rÛD8ßM|K±L°ª©ón@áŠðÁ·N0ˆ4·‰áÕ	{ëÇ2]ÈKª†ú‡”¹»,k=GÞ93N-ø/¨›ÄÔ{~Xs²Ìo*<ÏYbu$'³ƒ½6÷PŸÝIµa£O”žç
+|ꦫ¼åì·&Ëq$¬5N±A˜¦vÖºªcŸì—h•ãð{ÈE}èüÍä²1éIÓ(›8î­er'MÎâåÿT<·¶€HJXŒÜ3t^Þ¬üiÓhIP’µ¯Â\”	2ˆ7!òÔñÀ­gXˠ“œ,9Çß•mÈðr˜Õ„›¢¹§zŽuî8ÁWúùÉ7|±lû<`¥a«¨m…p…–Ù`ΟïKªé2„Ãx+8É&öv蜹Ó€4l´kÏã)]j!£?6̧¡2W¸•N|VÄr6@¨¬ÓŠ§ZÛ3&5_±½ègŽPþl–ª¹î*â×G\}¢ÂÍœS„Eä^N@Œl¼¥Ê]m3õvMׂïíÃæ.2"À?U8u
‹q¹öŒîÇ6Ÿ›ª÷~çÁ˜Î¹Å@Ók¨O5°¸ä1àH…ø³§µ‡ÛÑy|¼•¹ qšÞØ<Í1Mí²æ	4bî•~úËB÷F¼=eÃLXy*ê@
º¸ï¶§³0ærzL™öŽWˆÂ5mÓM
E4á?·o:9«à$U6!cÚ_œÄûPž&̶SÓ<ª
+ˆZQN!D‰üí–¡B—8ÙîWò 70ö=€å†^û+oá{¿…Xín7‹’üˆ˜ËQ#ØÒ-©´ýeô«™[íB¿_ch<FóݯdR	
+•Ô€;ØϾpŽ×
7;NG$_‡ùœIJ´¯áƒdÖ½ÚäKç–/—q·¾lE.>y‘,™8iž‡ÓM#…¡÷Èü€²ZÕóâë+j®!<†ìÅÍÂJ"ÆʺrÐÄ訊ý²Sþ„]é¼@ÿBΧ9›㔫ÑômçHl´µ¾ŠaYtëîSOhLC
+f¢‘É9¤	Ç•ÇÚFÍxß=Œ?
+NΈ@¢†ÅR×â2»!Ð{ð:먅HKŽÓïe”ªêÙ„‚еÅiAcSI=ßôòœ7mÉ#eqíZÇ€ÞÙ¥s™Uˆ«@BØ›S8´¹›wó)λÛfWeRtUmYp(ŠƒJ2”b‹¦L«Ðð}^ÉC1Ò³žlfvdëàž+’ÂÀ¯Ÿ½ƒ™7^(.ì=Ç*~Wy>òDÕÌACŽc)é-"û£º×ŸÔ|Öž(°™{OÐpªù¯öœÿ·ë.x	ƒ˜5ÞV¡¦€÷Ôàm
‡­âFÅSkÈ¿´ªš¬‘›mÂR»­Ã¥õ5ÛG|¹Y·Fe¯“*îTºvò•¶<ÿ…àÀÆu°õHÁ¬˜¥ìà!L}ÓÀq÷(× ”|htòˆÌIñ†*㻇R¸ôıVµrÀ‘ç&ÙÀÆOôK°38¡àn·4Ø´ÁÂ߃£ëœ /õѸÔŪû®FKñ"’/kZ¥I—+~ôW
+AñØ}šq' xëð	ɺV¤;0‡Î_BŠy«%~¿Ëe—jz ésÅâW!8kæê¿MŠùí¾YûŒS26V®;£Óœg¼Ä¤€!m¦X”¢TsÊJ:ˆ|G‰AÒO…Àû—Röd+;VÐcm
N å’ØÝh,¯¡ã#v…îóÒ6c̆*§þÆ?¤H+v/ù`(YPG	2—â}±5>Ü’è*ž²#†&Ý`¬ÚC^ÆãÒ©­ž;W[j7¢û1å2‘âaôùºtÖüŸ·—‹Ðbdƒc¯«Ï+º@/¦M`‡ßÓ,¥xD̤{‰öÞíªi}ùÅh§·óo2
+˜.@Y€«…µ@óeukŠwæÁ¯à¶í*ÆÜá¥<¸D?Êz!ì¬ö¢aMuLßê‰éK d½ÊÁBþªNgâ{ÆÂ&æ•¢õŽä¨åó„^Ô§W,¹Tum†yþ»Õ׊!e’þEËîb; }¾ºïc(<D—)ŒRJ[Þf'+WCÓ–mQ%åƒËõdYMÒÉlá”"¹ÛÞÁì>˜¬gÚs1Ý4§q¤“Äß´ÏrB‹®t¶H»Œ¿”'h­Œ¬9ë×kF´>¡f:Öp^)Bµé©s•Sz\ô“ñ¨Q|ÁL–Æ€ïœÇØЉܡi¸­üDÄÇØ	Þè‰y'Uœ-âé»h¸9Ûð«Âì[ä¡V…Yca]ê©è@ý!®4jv]$WÑÝÍUHþ=²'Ä\uÁ^[|˜ø ¹`qnÕaR"ãž6ïÊÝ-f«q½îòÛ¤}‚!ùÃu‡³“:'iýˆ 
F-ÓúñMP”Oáƃ3‹ào‚Ü@[¨¹6tKT|¢·E
–µb‘°ûžÖôŽŸ/H^ùFY„δD .ò£àå·’è¡ûü6•CÞN…<„ɆÃ"kÑ’]¤ö¬}Múm¥·ŠÒ`2«uzŒ¸tìþ8<ešÕ¢3Ò„úQ–Z	ÀåéhƒôîpUj_áÎÚ%©ðŒ´§ãÖ/~;dÉä‡û[	+J’§v O¼,Ýã&V‘Xˆ}HFjš%¹Öh.\´Á½L8{ç¾cøAZI:ôþVù'¯¤¾Žý&•R;ùcH½7#Ü׃*ßë0
+‰õVZú(ïMø:h¹©+ÙQñc·÷éµò)=c<Ô‡h]“xdý¡„¸œ…IÛŠ—	~ž8Д:öÕQÎú"–]
+3Ô¶:ù…[_·h×(Ï\>AıNKà=l-ÿZc+¥­sá¹Q
+ð¿jIÇõhD㓳uDJS×*Ë7\¦/¢‚@Æ
+ÊÙG¯XÔè‹~!#ÀÓÕ,ÇôÈP7–Ž®°·[öÐêXò_pÉ„Ö<ëÄʯì¨~/üºÓš(¢ÇD’=]WŸÍ3Ø^¹õ‘Ï1âÒÀ3‰ž´ÙòCç·U(š×d›,*X.7rVf]Aÿ-HŸ€“Ö‰/T º=¿}«[]ì¼Ú˜¶Yâxr)GT~‚ù‹BÌbIÃÅ(¥{&	wføÓd¼a„g¿xͶÑmãì¹Ä ­rˆ˜µ_úþ÷a=·”ê;ÊRõ½EÜÁã³éZ¼°ã‚4^µOÖRÀh½[åÑ_ÍÕ1S=Ø’­È?ôžÂ”pn0‹º„-.Ù¢Öý9ýØ7è8|ð
+MqÕjøóÇ"«×Êu?®ï‹ ¿@U§ÿš#²d”Ïa¤B+qác%þZ¢ÅÒ’D‘F—Xf½n«ç0ñ	é‡×·òă9k VàŸŽ‰Õœ)HD¯³bûUk‘ó§î]2&¸˜</ÿ¾á>OsoæŒ
‰!Áô8gq‚M¬F1”í}Þ_øE#‹ª|1.I9žùS½ºpHØ-ÔµnX²´b»ƒõ‰D7¡ÿŽ.3ìñßj¢öM¥ØÚYeyd˜:~| 0P†úîx,×N¸Öæ}vóº¥ÄÑò¡¨ðy•Éœö6ÎØû]FS9|!jB»(í¢–áʳ—æ˜ÙŠÔ–÷RÓcCÍõàµÏP‚‡.&GÂ$ö¡ÚÕÒ·#DeOw=Ð[®T+ŸK%|ÏX¹«ôšýÑÙtz8jú®è…‡Øʾ	³oÖg¸rºäÁ^ÚÔH4ߥÃîÛNúiíåÖZœÝü„ûÄϧ¦®Í¿gŒ¼qØâ5:Êë‘OÁ0Ìýrø=2Ä«­Ðæt£ds\$ñ‹;Èi1l’"Ï&jÞÖ°±ô`_HäÌ%´Ç¼šzhV7wñå}—ã[hµ²ÿ)X®GOy‰ùZèåí€À]x"DÏŸLý°{T%Ú¿éÅë8Ò®7ªà“(Ú/pñ‡›c"XŸ”ȨNi»…`-Êwh×ð¡Ñ>W˜U€=±›yÀéÑâãÎúà§Tèþýn3)×e³¹|Ö¤]XyvàäõÒ‚Œ&…ŽÊ$êÌQTºu%†‹iÿ¹w;&+иÕKp
à[)í1þ-ú’žë¥£ç#æ%Àcï\¾šçlùnzJÿØGËiQäŸ^â턵`Ö “²b£öf80¿Z,Czw^ì”(}Õv¶ÜOÓ·´æT¬y|¡Q÷#ÝF‚ƒ›¥ÇáG‹ý'ÐA/1) O\§ïÍÄím#è<áF‘'gD QCì)å‚qÓžh³xûTÌ$«Gçù¼JUuâÒÎõ÷šgÓã3¥¼):¤¸¢8
Eχ%J1ËS&Ûhx°H/ꯖi×O63;2•ËI±~DL릟liȘÚZð¼zÛ£ø!Ñ¡¿
+4„#÷àÙ2)ŠÄj@“lé_¨ÈŸÌÞõd~@Y-ä÷qû›5ÀWž
+CvÉìèa%€‚ce]9hbtTEðY§ÁÃUõ?ýîLgÒì ç»aT©”X\r–p$ÌH|ׄÝÎÔÍãæ²À>ƒ
^ÄÒP…&Â{G¥Da”¸ç¨ˆ¬þ‘Õ¹’Ûpƒ¤ž‚¿Hm¡Nbó(Of[§çUaÇN	Œ’íáĸdx9LäBÃQÎÒÝ=G´wî¥}òê•>Ö6ó0
ܾÛT¸Ì8\Ć'>Œ+b9 TVçEÝ-ã—”¡ÖÐt½G(É6KUÒwqå­.°Qa‚èÕÊ€þÉ‚ä…Š³ûí d«ƒUC}ÍJÒÓ»­o	’—'˜|™TH
Ãbj³?,'Ö®LS;k]U†¿ÁvÅ4Äÿx³d¬°t~èrY–úªçÃwؼ9¨g	†qü`ÓG܇àíç()ÙsµÇë;ˆ–{Éü‚›€ÆI¦ÛXRxŒòj™ª0h¬Ù£‘]Ðò5zThðöì7™¨@šS"Œ2+}t'®N«óàÍñ
	aZqÛ ~mÏìíAîÙÍ8›\âÂÑgö]¸6Úí2náJbSõGu«ê?EA¿[¡²P€Ó‘wrvûgKÓÚ¾åmR²q×{r÷̬ú%ÒùÝz”."t6[Á;àçs˜RT›”ß@du²3áor
~f}…Î¥–»Àã$ƒ&{Læï76䱺E§FsJ¤|=
†ö©ÜˆJÇ(Šn·­8:)	Ö$Q`ê–…-µÂáº£GÄ9¡#MCöÚÏy^8È&]Ñ°Û£ v^mL[¢q<9šŒ­*?AòË!‹f1ªïìÉܳŠµ3|ç2^¾B-^XÿA/Ô©k)`4	Уüæ¡èä–§lIØ„d‘zOaJ87Ë]B˜âQkð’j[ÉòÌ£¡Õ4å…é.®bÖ'«p6˜ñ-¿›ÜØ·þÒ	¦xÑ5ªíô4"ÿWXÕ£{hu,y
+¡8êB€kûbeÙvT?™~]ÎçM‹Qí"I ¥Áè—l/äQ—iB‰}¦K-Š`üú4Ïz
+w8¤5¡þgmœÚÉxFZÝÿk™?“2êrÍ󣊛%ÙR_GðÄ)“ò¿$ЕŸnåÏáûÊô‰+-}ù¨|4ÒÚ›â¦öÀ¿ÕõžW5; ¥æŽàè¤$Yb.´î/£>L|Ò0¶7侌)ÿOùeà˜£TÒ‰:«*>QÕ¬ˆKÔ1ÆXóOkzGÉÁ™$/ò‡#¢BgZ"PyßpüÕIHåEž¼I¬‚Àëw1“°_]ù¿"ÅšF)%£o3›¥¯çK¸¦œüÏ
ëôŒØFV’ûå»#ZÞ3k8±/š!Ôúڷħ=.zÇöT¦>î&Kc@ùNílhÊnÞº\ŸCà0Vm¯/cÿiÚØO“È¥£5•QóÉ–ü	Æq¾zò]:k~ÁÕÅËh1¢@Û΂ÌÔ ÷¼´»Eµsî
ÙŽp[øcnþÜ\"‘e=žvV{ƒQ¾À¨´&áI™»-ܪś?z¥®öl°M¶€P<ûxŠêƒ]+R“Íg¡!E†²Ûœ?Ñë,JQ*	·e%D
+>­Ê®i©Ì`óÅ){2›“+h¿¸Èˆ'üIlàÉ4ÙÞÿ
+Ÿ;kOX³©h8UòÙ{NñÕûH<ŠÏL”o+ÞS@õjp¸ˆÍØq#짻dÑZUMVVLÜvpž
+&°ç`¶õåPJ>4:yDfªöÈC±ÎÿÓÍ)\zbÖ+Ô9`†çmŒ_Žü¸
)Y¶åÀ³9õ	f‰V}‡œiïÒà=J:£î“pý‚·L)*ÃÚnD%íE7ÕØšŠk¦0uK̘Ôaþ·]ß­b’ÞŸ¨¯{mé²/dkW&§“» ¤CÑî;‹ìbñ<×2VX:?t9¢K}Uý
+ïµl^’ÀT½ŠC¶~ hÉy”=*4x{v•ÂT M…§F›°:W'Û÷pèöˆ‰Š¾-¶ãP?¸évø®a‹³­Ü"¾J\ýTDV
ÆäÒ€Iã8	ÏRƒOAÑ$¸Þ'1÷©‡3£Ýý¤.bCF›1’ƒÈ*+ý¬à˜ÿŇJÞkh:Э걫¤iµ„¶üØX¦¾ÈAtigïÔõM½çÿ—Ü^šR\Qˆ
+ȬéÍœ‚%–ë§ã4<X$™uÙKºå©—“TdÎÁfoô2? ¢˜rõ¶óÔ`¥O¯;êvt¾œ†@A¿¼ ’41:*Ž¬x¢ÝÉu‚f¦*]´ƒ±œC˺ñÒµ“Λh\ä«8ˆp£šø–˜}IOûÜ€ß	ýŸsœ`
/vJH°ä;[n©çÕZs*V²>Þ¦õÉŸà#AÏÃÜíþ­Ëðh®™–š©.Ýhs:ß2·.öË“dº–6Ié5okXÖz0Ž¡$rfœZí^M=4+•µöü°UpÇm™‹8öÍÿ,	ÁJdT'ºÓ
Ì0…˜eµ4‡åxÞæ¥L¤@Öò`æy…ÞTxƒ²ÄêHN{gló #§’wÂ[>ž5!ÓøÉQKþe×ÅsL‹âHEjÛzMðæâ:=5}
+WtÌÍle_Š×¹k½\9]rî†/mj$ÈáÜ„ïwã'Ž}ºœ‚-Qì±iI"Æ#Å,3Ð7ÛýöŠúÍå‡ÕybÏ’»P+pÁGÊäNš$"Ùס|À¬ŸËU>±–‚ª‡’Oò§Ð]8$l˜jÔ7,YZ1ÎÓÏôÊ"•Þñ„G—ã=¨xsq”°¥:fè6¼¡EåÒ»Ð.’ 9wC™¸5d
þnBùµÿGΰ‹]Þ>`VÁë¤ÖK…A‰UÍI©yÝh 6L5Èj•¢-–gçézeÄoöB­…Å™;%$
+Xr“£7Úýä-·+YoSôêÁpŸ®éïnøØëxÀ4WÂKMÚà¤8í
+¸ÂË{èïÉÑ‹†Šî%2*]çˆfÌL¼ÔÍü<osÜ&R HkïY01¯À#ÖIÏd›ðVpLñìÍ%o»4hØ
+uÖƒÛRºÔB[~l…,S_d®:*2gî3¹z‘QL9ô[÷ïJ0Ü©Œ‰Ù“u;:_NC ®Ñ^PI–GV<Qàêm7"œø
+¬•äl€ME»	S´«fLj¾gÍΠáØ1IoÁTÙ³Ž¸úY™2‡P4ê²J<³;Äa*¨ÌÝȆ#‚ÃXÀ¥ãõ8t{DÊ‹E_˜[ÿ(‘\ú;|W%¦ŠÕ¼œ€"ØeW‰ºÚf0÷ìš³ÃÇ›4Ñ\dD~ª6pêâoñÁ“+&n;8OXý0[ô
+ü(%²"3U{d¯ÈÖ„gñçè‹š.=1k›‰j’0Cl#+IóüÓŸ-o—€»Ö™Mžj}mÕbÝ=í{*Sw«¿ ò'ø64e7o].Q ãgAfjõ^ZÓ¬Ô·wˆâG8£|„¿7n.ƼO;+³Ï‰¦_`TZþâ)¡­x‡bšÇyÑhÄÁ7üé‹„þóŒezÊ›˜°
+òT>É€imÃqS{`Ñäôß*iƒÊÛ¦äVD«j–c,÷©»=­êî™yÍ‹ŸQ!½-(…²á8~äª$˜/,ñ®
™jÚ»š0Šhß~sÞtrKÝH6ªlB2Æ=©¾%•ë !L…q¦»xI¥,äß³4´²ŽÞu!É@»ó1¼â;*‘Â? gý¨
+˦øªHPÜîtÅŽ6™
´¢œ$BˆåÇ1_„*3p2¯Á®ù@0n`ñz×¼ëVÞ&ßö
+c°ÇÜ)|Œ.¾û×:òus믋¬µN‚„`Pð"—3/5ˆtd?ÒÕg7‡šÓòQn9þå
-‹¢F­¹ZOuçÊõK/¶Ç„c¾Æ(Ðx*Œû§>CȤ7µv­ƒaSñÐW—”z™˜ý+5äÔ"¶Øá!æÄÖ•Ê…C¿/Ž$ÚÇÃåúe§Þ˜Í±à³nvœŽH¾<ï%’”uCßȱg©Õ–Ó1^3âsaØŠ\|ò?X/pÒ!:»Ý{4Üì%a&xÃJ95ꆣ6ÎO·1»b¼fÙæ­	¸øù~°^à¹B&tkš>F_óåy´·ûÙËVÔ'AB0(xÅ—‡™”D:2‘‰i何ÍM	çy¦§öh¥ÅJ=ÂLð›”rjÉ[lþžsbkÄe̯љGmíïü}¼Ýo„LèÖáºÏe€ã„Sr+"Û5K¿õÚÓØuwa	²èËÁ¦žÐ˜†ÌYþ?rUÜrá×ZYŒGo´žê Ó‰÷–^q“Æa‘P½ðTëS|†U$(nw:ìG›7“©Œ‡,ð£z~œ
€Y—¤³2ÙdkB½öýtËM–»ÃÊ5Iɯ¦ÿ½®35ô/-çVjÕµDq­ß>BÑ•±7‰†c^H©“›×éÊS¡0*-‡½w—Ò=‚Ʀ&’z£õù%nÚFÊâÇ´“¡'¯Wæ/(ª
K€„­+¦pu(uY%H„
דb¾TfàdCŸAï,€`ÜÀÿô:³"eˬ¡L£ñÆ.}“>¥o0+îûRk«Ì®Ê¤èªÚ²à4P	&”d5ÄQ˜K½ýú=¼†b¹{!ØÌìÈRø\aë³tùêæËCEwœÀ ýD3f&^j
èÈ~¹·În)$»ù¢
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc50.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+÷3ÕÑÆ:ÇŸ¢†àœ¢Îd°à$Ÿ‡æf¢.æ°ï°<µW¾—/=>ëÿ—×ï÷m§÷3ÕÑÆ:ÇŸ¢†àœ¢Îd°à$Ÿ‡æf¢.æ°ï°<µW¾—/=>ëÿ—×ï÷m§óf·¿‘t“#YÝ2%YÈ}ÝH#'ÑÌY\Ñ}Ã}xw®'>a3^z|Ëã3³ÃóÚSUbnWNT¼û—=+¹ûO¬Í=l¼”º7ªûr7Í,ÍDÂùº!ߤqGB ¤d,·ôûÌsc?è;F²"§dJ ²ú§F&N¿…²¸¿ú›ú<ðîAN|Âf¼ôø‹Ûf{›û©¦ÿ¦²ùÒüÙ¤G}Ö(ÑéJG´Ù¡ÓYã–YJtJ3Ì[Óc|ñ“ÉÆ`$ñ¬tĪÄÜ®œ¨eë3zVo0ëžE‡zØe5inIëän‡X‡"ˆ™ïiB£U⎄@8UÈXsõÿ™
h¦oúIµšOó8IP!7šüú²ôˆ/Iʈ7·7-´,¸ô]Âͳº«Ç·ÿRë…æÆ~ÍvŒyDSÈ”@y>éS=ŒLœcymcé+éxýÁ‚œø™Ìeõí«Ìö+ëOQ¶3¸÷±Û³ÑHÛðcY³Ë…qÛC…YÄYwÁtÕç'[JÈÓàT[!Ä"öãQyï¹å¯ UŽú±P ¿Ï”Žu¯_»²Û 1²”è”f…¶,»Æøÿ;‘ÀHÿEè•ïЄ¨)ƒ"0‚Ónã-X‚q«$nQ0Ø&T½‚T$$i¹{&ÙFh²¯+·h’ïø¥I•¥A%MÊËfô¬Þ`Ë!Šô­ÊjÒÜ’ËÕÜ°D
/ÃÒ„[ªÙ€pª°æ÷çz@t‡ŠUiàµBhiïUíO:ôiû:£_£K1š”O›å=ö<+k=Z_ç‹Pã/"ÐQÞé’w)žûp’ Bn)åéyõ
^’‰
nsnZuXmõº:™‡{iK“™>sã<¤÷Ëkv0ñɇgx0n&ÞÉÁvþhë80§ëÞœÞUIí:h¥„¨FW léœQËÑ‘ü‡ìòˆ¦5€ò|Ϧz˜%Æ.òÚÆÏVÏðçŸ%í/…Ê÷ÇK…ñVËž¢<$@:½+šPF”©ˆP²jF^š¸ HPô ¹ÿÛ*N¸ò‘åÊùý´&¹<ó8qf.mó&«™{¿«ýƲ{2&‹⫆²•²îŸè·ÓN¶”»Ý¨¶B•8DñÏB³ÿ«É¸¹	›¦Œ˜	3¢›¹Ÿñ„	¨ñzá£]àŸÌð!»°…6W!•zÏ)V0Û¢òÃo×C@ªé @cƒ5êC¾ky«@by5Í5ÌqXk‘íãv?ãŠÍ07Çèw#UÜâ,áðã¨â­ç…áÎÜ9öŸÍâLŸ…"…Ã+ÄöŽStY>vot]"ÇZ£Ã½MRD`»ÜÛZ°âKHÜ¢`­L¨g>¨HHÒoöL¯ŒÐ(yCVsÐ9ÃíW4ŽÀœ”!ƒÿ»=<ÂƸ»,/ø<†ÿ*ÑN»NøáøÝS³¡Ñ°2GD}½ŒGîá4€ð ’7W‚Jš‰‹ÌõE¡À‹B	&õG‰Ô¹¥9‹·¥&}&ˆ^›¹¶I¯*àI} Ñóסâ†Dp])J\=È)Œm–cS$C_)™C–’–‡&ëÌ$
+Þ€?öÞÐ’×¼TÓô€è>	ªÒÝ(w„ÐÒÃÁ[(ªÇžtõÒët[¾[–b)5ž+×zñxVÖz´¾Ó $ÇU9ÕÎ5p[ÈnØp
¥ëÈ+5@’“pÅ’ëQë™^œb4iíÞEh=üícQ$fÛ^D4½¢¡Ï9îR!ëà9]„ÜR×Ïò÷¼9ÜæÜ´ê°Ú÷it/öÒ–;/|æÛxU,m‘å{˜fP›h²8w蛓àl²óPujüÚ›!ül	l»Öjvʸ<Ëì}ĸ«	,ò(8ó‹,Ö2ì`ÿÎð`ÜL¡ŸìáÐËp`SË¡%¡ª’ÇtÐWMŒ®]ØÏ%(¢ß&ZêìõsÂyo
+RøÂ(o»sfM-Â}-Ê¥®r#MH«‹b±¶'‹ÊßÏ¡‹.¿?åÅ
+ù
QjùøƒQô
+-J‘\ù©‘ƒ¬ƒýÓ#2JÇ^‰ó“,–ÿ¬‹!Y|jî#)•[‹±ö[6x3±Ð•ª×w:[‡w3C3òï–e×Øà€¦Î­Çi€(C|LþxH€tgV) Œ5O
 yÔþŒ¼)>m@ õ@þoþã«Tœmù?$׉ïçu$Loxû
+{ÝQ²]‘¶šl,Ó·°Nl˜¶¹ð¦öÛ¦N€Nì—áËðæ³ø´ÑŠ³›€–­pâÌ\ÚûþLK/öc =Kç‘yödL.ÙK.y7yÁ#Ís»œq5k§Mq„7pˆÿ‡ÑÁ9Óé©z¼5é)õÉ@ÓŒ™È¿é?ÈÉØÉÎx$™¤"æ:UL²æS؇åXƒ„{ãKmo>+Q-fY+,o#ÿMÿôß[ºÝ#…ýBk}l®B7ôƒR¬t·®2µªð°¸ËH™%°¨=´ËðŸ¾s°c´´ÐgŠ¾šCÕD@)‡QÕàt?`«Yù›Þ³†€IÏþ]€ÆjɆaÖòK€Äòj‡j….â°Ö?ÇÛì~'=Û	‡`n—˜Œ(]ät"ÏâÖbU"ÚâíæK-"êÚhÚŠWçK yLÃ;@ÌÂLÞh—¯“ÍîF
+ª ¥ÙXßýÛMÙGÓߥrñ#‡Ù˜#D›V•ñ¦è²|ìÞèºD“´[dþ;—Ìç:{Þ?äGE{‰·§?¥:õlÅá{¶Å§«§”j IlA<!m«dÙü›g*š¤6ˆÀ2k¥«´}2Ù–¥YÀG˜MÎ2|M¹Þñ˜C½Pò†¬æ½r›Ç®lTÿKbO_íE²(uò E}_À«¨R« ó ¶â¹¦\»*ϸG*¥ólª	h%5Bãkzx™‘mkX^íxãT¿œk œíßí§¦{_¿}dŽˆúgŽÁßhýŸ2HôóxÜ|Éü˜€
eÉ–:]˜5|Ó"zdÉz]0]¨šÎ"bÚ!µÄŒú0ŸpZ@9n®”)…÷Š_„L÷ŽµoWrsWLúL
4¼+o*q’CT:Ý’ú@¿û·
+»ß®î©“Õ©Jvüª2ò±©]±üü	|ò5Ïl9jÑ"Ù·Ò\³_Ùˆàº,R”*¸zRÚ1*Æ,¦H†¾R/†191LË…H¡~(ñ>¡½9³e¨DlÀNÚ}³ðÊ¡æ…ð˾Êâ³!Õ`Øð`Öp~ÒÕ®62CÁ6jÖD»õÍ&|I¹§Pî½¹›Ÿ¶PI“!è÷¹Ëè¶a¶1ÄRj!V³ôÿð¬±ôua»]LÆÈàFÕÖ!°÷‰µUû°:Ö¼‘åŽ>øç=¼I
cÐÍ’Zùc¢ŽL{úH“ªr·jà¶Ü0­àWËVj€9;à—9Ë¢Ë/¼%ÄhÒÇ¡ŠÐzåÇÆ¢HÌ¿ £q2FõB0mŬ¥BÔ3{mrõ›ß]B¹ß{M{ €“›wlPŽ·î‘PM¿¡©«¼ˆhgY_ƒrÁ¤BËÝrº¥¤³ƒùó4er4¥Ñ¥uÉ}©óÒè^&ñ¹1v^øÑ«ðª\]¹¡c˜ÐGD[WÕÐtqD—~nÒÐ0Ò>zõÈþnÍVÉ	̇ډÉ/>\
XÚ?×ö-Ì +ÐypîÍ+;ÝØyû êÔå©+BåØØk±
+Ôì‰mx‹Åú•mKX*ù¯éê0?‰V™irʼnõ¹h™ß?mIωlhýhd¿PIó7úW¶ûjúœý¯G^PpûX±dÅÀã&ýÀ¥˜_#Åß½‹àÀ¦‹_J_I9“è½®*8šAº­8ƒJPY§C.Úž‹£Zbeã?õbküïãZX m†bˆmï¥ïF&¿ ±”¯µ8QR¯T¥§4«£L´ÉÅ÷æ™òÞ¤í™$P"ÞkæÌšZ,™úZ"‰"WAäFšKÄ=qN0‰£ƒ_T%™eÿ0y;t>
8å;ê4’>OyK¼J;Ô¼’f’X}QõœëBš±œçfTîø\c~×&—ï¢Ô:ïí8¢õZ”?¸ïO?Eç»Fd”“¼.û;X1.ãEB²üo¶¯P‹MœBH2M#\«BÑ‹Ý	ÙÞMaÙ«ª«è‡ó3	Œ¹ Ƴι4ªü/ø:ÔÁFR7¶<ñ*¶lðf½7I³ît¶îf†fùÃ1ʳ­ÝQG“ÒP†ø˜á	€hèŸ%m"¢”ÖŸ™¨Î.=ÖiÖöÿ„.²cŠ~¼yx-Š‡iõFðèάR]8jž]òµáeR|Ú€=]÷€áÞáÛK¨%Úï~H³ÃÓêH˜Þðë£ÅÌ.ôkÍÿ¾åsÿ<ÑQåAÍûGf[ÿÙfQ1QÔwrGðÀßœ2ý8ßO1†³ö§¢yº?q)ØX»
+s}œØ-qoýQñ«QœœÅ3ß‹ýÑ{íu¿	{+1GôÅrs¿€ø8A'¦½,8	îè`·—¦…·,ò,ÊjÜ`ΡìÂHóöìüòô\ààÙ…¸©ëᘖ^ñÆ@z–Ó?òñȘ\¯–"\ònòŸF‡æk%âjÖSšânà
ãêPioÑ&4ØßÜr4[Bì‘•ºÉ4ºBBz2±•t›uE3è¸euÂ`D¿28Ÿr»ÏO,ôejÏR÷,€»/cÏ~­>ðH/UDÑ4tª˜yѦ­×°äŒçÖþ¥µ$mÉÌíùbmœ“?̤$‚²kmPk?B?ŽE²JúFI”s†FqBäºöÛ–ÚÞ$|V¢
+Z$̲VXÞ0Fã*$šãõ£¶i§Fç„Öú.ØA„nõ¤Eì&#
+P9A†ú¶»–R†Ö¸¶|A·ÛL†´¸¸¬ŠÜðÛYùÇ3¾¹ìÉâèsAdwIý}m‹/J}Mzu‹ý#a2æ}Æ2u6u½Î	a)†·ˆ€R¢·Ý6è~@”µÁMŽbßëk‰³B߃Åk4b¤üÔ€ßèÔÅÙŲò«^ü68 §½lø] 
+Ù±ÀK²ï+¡{’ƒáº‘6Ô±ù–•ùÔÔ\Ù}±~“«ÅüNz«ÀÜ7xg>훼Ž¿äš}²¿_Rdä«ŽE,ð¿»düd`l*,a-<ê1Â¥…<Åü7±·3-PºÕè2DƒÙ±ÄªDþ©ÙÇ2Ñ–(ZDÉ(©Ð©	$®Ó–@ò˜›v€…™˜¡Ð3CÄÐ|ï/­æ9¨X¢æÞš9ã­VÎ<æçÎ?„_L´K¾nfv?Äkä;‡ÁŒI@W¯°£ç«š¯Ž».£WäÿF¯-F.ˆ.+¬7<ÿQÍyøÅ¡Íiˆ;u¶Ì´]Òs‡È
6Cþ7’
@ßžC;Ècb u
 žgž$‚kbïZVÅ:.^Z¾gÌÈáv3…=Ótö¡~ÕŽŠösS~Wt÷Ø—ßöq—SKS5Ô@’Ø<0þ'‚xBþÚKȯå?Ò£âCëT'žÌ‚TÁãžsëpEq¹T_qã¤ã:èõÅE#Ži¿Få½i
¤?ÂB+ÎT)Ul
dÖWKuúd¯1=W²Ž-šdøš=8=o¡ÿ-†
+g ùEÑgä8+“AÜýø“VÊÆP·RéòÆaU·–	°|çÆÖ|×`­¨°™´ðÄ/®.ð3×Üþæبã–Äž¾=ÇŠyPê=.ù@Šú¾
+KM=¤K@û@qÙoQ
+¸kTþƒmŽ2TWûØI/›6G"Y!ŸAj`ÌâŸàðjÞ!—­+ŸŠ­ðð~åÚ—§ÕÃѾSeÍÀ/$µÐ'Jj„6ÛÖôð/?ÚÖ°¼Çð"Û¨c%Ö@%Ç£ÇSQö¾cúÈ
éÎ
+Ÿ£Ð:ç'1ò›¬¾ñDtr6£Òt~ØwD/þÃbtnÃwLw\mCéþåv–30×%õ–HL'W@#dõûð¥øå-Ê1tº-jø»DôÈôº`ºM)DÄ©2Bw•é2,`#à´ÔWE$=Êbg-c͆Â-ÿ
+ÍNg<Ù®-2
+
+B4GÙÛ¥mJ«î¥ûÔ€rÜA25Ró	¾'$˜ówÞ®ä殘é˜heVÞTâ9†¨t§9é€cëwA	ô•´‘"/´Û@(%ðCH‚´ÈH((TÐCK\®©5–ŸX®ËwLskþ£AÁ=O.;›7O”ìå.I=dù(Oºå*åøùjƒ
+ØrÔ¿D
+¯*s¹¸„'¾/e{¢í€Î"?íZˆUÎm¢ãd™Ní”™UÅU,§¯du=÷OêT»xÅ„Ô{¾¯"
ÝiX¤5Tmô¤
+©bT‘XQa¤^brb&˜‹( _:üPÿ|_gr{ÊMŒzóËç®Ç³´thÄÍÒ´µÇÖ
÷p÷ÒÒ)¤>@
7žÈÁnƒÈ°Œ§êˆØœ©ú{ý$‰_Ñý‹a‰Ù{B·À­ýÀ±8àü¹·Ald†,4ŸlÔ±ˆëÍLZ“=ä_¢iFM_E¯iýäÅ*&Ë_,&¯^¯7ÜIî*	ÿûK»ß`û^}¹k÷:‡Lø$’oS Á*go+#q <’;BÍóo‹ÍqÂqb•¤ÔB¬{õãýEõêÂk,ºœÄïVŠÂã
ÍÕ@ضoÍåGÁ@
¼ß+•Í¥+Á-Ám©ƒß³ÅbÌÀ{”ób=-œA˜‘8ÝŒ·±6B}ów6ªë}t±(e?6×|íÓze’ƽ‡9´ïÆY˜öéo¢Xé¶p.”Äê“”d¼P.¯øúY”ùú¼î¼sÑf-ø¤Q’º_QŽîo›N;IäsÔÝq¥`GÝ4®‹¬ÔrvÝ3r‹Y‹^eJ•й“_	½ôד‘Y…gœ5µ*ØK÷ç¼üOúÊ;çˆKš‘””;¶;QYÿ‘Ïp4ƒ(F¶gè»c]þ[âdŒ÷„`Ú—EW„µföÚä÷+£º„o£öšö@=;+îØ sÁ?4 "šc_O”n+Š$^Kh&æ:ŽÙ_&{F:Àh‰¶EÜ&AEFuFO!ˆl¶ñf7.NÿÔË7õu”2èKe
Ðβ¾äŸU„‹§äi*WU{ïûhÊä<hW¿WêúOû¹Í¼Lÿobì¼í¿KýI¼V؈y„Fµ¯F§Nçµ_„hfŽ¬FŽçPçå³Of¦s+cÂQ‰+:P¼î¸ºo_Æ-8½Žˆ¶®·½èâ*ˆ38üܹ½`¹*|*ô÷á܇¬…©^|¸'O0o¾™üê§h¯2¿&†šh§{A_`N_š“šûË8¶A˜=¸-Bð‰“OJ½°©~³ñZ…]V½òàÁ‡Vv§­òë]ɵ×OV„×­$­ÖµÅÚð—é7Ú–$°TïGš«b7`BÂô;ù]ô¸ÃÏÂN(1)ôª1ËÙC¡Y(Ú±Mß6©ÈMAËG9HCÏÉ`.~¬/Òä—÷oÐ/£~Ú’ƒØÐçÐÈc ’ûné®që"Ôé%çCŽ¼´üݦÑá­*ÏËxŸ­9`χá]àå­öà``Ç;Ö÷äÐ~LÕÉ+~ò´ã àë°È—ÛLçW-¾F—£gÝQ¾”¾’r;ÍgATp)
+‚iGp” ²WÓ>ÇvE?]æUƒï?™Iæb$úí»?í{NŽšú^êç7¼‚¸çÌ{Wß¿S†\©![´ÄÊÛ~:÷ÄÖåÃÛ´°@ÚÄ
ÚÃWÃŒ
+Lc@5Cwpþ¢¤C¨WShK¤µ‰xç1œ+fL;g¦ÿfs;*+7Ý<wf#<s¸sƒ6ù4Ý`‹ÔXMÀI[Ô¸¤ì[,˜u—óÑ/ù¡(UÇ/H D¡ÖÑ…)´X/é´DD®‚ÕŒ)=–•þzâœ`[¾¬M¤I­4NA1ÉφÄôAòN´R>ÇRôàô¡¾`Û´"(ºÃD	c·à¬v¨J/Êã`òvè|p×vÉh9|žò–e”vµe9Ì9°ú¢"÷%Ë„)%Ǫ́Áí_yúØÙ§mÔnœìßÔ‰œºm“ƒòÔ›ƒ‰#‰¿Æu“I²ä¹8€²#_¬J¸Æü³L3(Ã4YµtÃÇp6Y÷(´5~mÞ~6Š6ÓkŒÈ5;e\ëv°b\ÛŠ„yá‹-uvô·a²¹)|a	†¹Ó·3¨˜a°˜†e†ÜW9Ÿ¨$ÛË1ÖH[ËeáéÞåÞqC"8 š%„.dšF¸K„¿§¯¡šÂ¯KIKÍûfo@‘
+{ohIå^*í¤’äg”8£d7l8ˆÜûd›” IÇ8ìIû¦ûÂ/N1ºøo¬4~ø¿¦3ítµŸŒ¤nqþxÿTqØýÌþgn’{Áèq&ÁÌÌï›b‰{G§:¢Ž;¹: í-ßG`NJžÏñÓac\Ó™|Cñæ'ŽÓ'|þ|à§×ÞæX­"°ÐF­wþ@x ЛM(#JÚD(Y5±#/M\$(z±Ò±ñã'\yÆ	üeòðZ	Ò÷Œé!×ñÛê\ÒŠÃSFLŠ—QÃÒÁöBŠTö=þß pÁfxžÓXÌ¥žÄ=éš+ý= :ÍE¤ºp
+Ô!4ºùwß
+ʤø©zºóß¡ß«–MJ©Ãü{›»É-¡ýË(
+õ뻂;öêͽ<7oêî;4ûÝûoNo¤ªø4ÜBT#¥P6úN
+¦[—…\õÖ‡ãa×æ$ãx¿¢×‚‡ëŽÌ¶ã¯Ì¢b¢µî:äŽý£%dçp*£žb{ùhBTšÏAç7ÿ˜,A¶Û7¦l*ÐA*ºÒ³â#4
+YÙ›Õ4Iù|ÜñSYòi~âR­°kæú%­ZâÞç¢ÿK¢%:%—f£ç¿>öÇêc0öV:bŽñ†ˆ4S¹}ªÔM©÷ª(ž•M~}YzD™ªeD•Õ•˜Z\z €aè×]ÛíaÕñ)õ—äæcíÁQCp‚NQg2XpÁÍÀs3QsXùX‰Ô¥À_Å™ûñÅåùõ¸Ý¤17¥'*^óÅ›Òó©Vè6^J]•Uó9•èè†"aò]žáR¶­!R2ÕzݯmOËß-1¼ÿ‘€ô1»~ùÿ-,¸C1D¸ùÜù#ŒÑÖJÙÔ±¦)Ù*ÜÝÛ*œÂ¼‰ñ²“:ˆü“uI©²«^%“j^I3I,°¦†ÉôNû!MÖNý3*w|.É ÒÞ¿Lh­"£¥äh:¶„"Å?7ihi„„=ôd7è+êŠfÍmÊê™.ÀˆÙúu…‹‘Ê+º9ìÊôÒ4ÂᑸªéÊ64ð42ÈÑ(ª÷•}¥[ó†5}NðÙ­/&cdp#äkƒžXõÊÔƒ¤óXk
+^ƃüG|ý^ªˆ¿hèI-ò¿QG&³}ÑP±ß¶#ô!¸ìVÜ!j—³¸9ôÃá !Ò᳨³@HÇõ6(GÕwÆ
(†¨ÑÞÚÕÓ±áWwHÚ…ÇïÄÚ%;~…UHyÖ
+Ú Ö~„~Š>y”éŒ6’5æŒâ„Õi."6`'m°×x	eÞsÌxë_Îeqמä0lxŽ0ÎkÎ8?iä‹W¯
î5k"‰6*ñ«1©¡Hø¬Y´H…y¬°¡`ŒÛTH)Û÷[qÒSŒ.Ó±é\­‚Ü÷6UŠÁ$z÷<n>ê~L@ˆ¼êK L”>ç=2ê=  TMg1m‚žÔbF}‚Á8-ÅLF r:‚éqk1¤±mqø‚s«
+˜u
+m4mE	¥ý«²&ï“ fa&o4ÅÙ2“ÅfHý³o‘r­¬³ÊÕÝ‘Üô6ìþ³[ìÝÛÝJ5ª6±À®ž±¸Û2â~Íæ‚Èî’çúÚ=^”úšôê çFÂdÑú‘dêlêg<ÂRs
¤&Ys§lÍü,:ÕWÈÔUxX\ë$ÂœXTZëxÁ_‚·X¿‚ZƒZh½‰E_M¯ä" šÍ¦äpƒ:‘‹>€5wŸšÄ£ËÖ{„£<—ÖhÄU嵣͵—¯—yùK¼ålp@SgØíº@¯>&ɳà¦Y Æ[M6çŒÕX'6L[ÒxS{ãS'@'vÅþëxsÎ×|ZæE×Ã@ÉKØ–yÃV_ö":9ßi:?lµ"™ï1:7ïµ&µ.¸¯úü;K—åœôK$&¥ j¥¬e1½˜¿èCa˜ñè'½â	W˜	É!„­âã…ܸ%ÛwÜóÉjȇnðÎ|Ç+ec(Õ)úyc¾¤ÈÕKŠX>ýck>ÈåÈ0ÀØTXÂZxÉb™Wx—åns™Ã­¢žÁ®50fqÁpÀx5ož
ÅØ›ÁEØx
+x?ümÅÝäïæ_§¼èï@
+™ÔfZ
+ i·Ídˆ¯•Iˆ áO¯“d¿1P´ˆPO½OHA»1€ù-+ì/-_½f†‘ißq¯
+û*Of	A*î…ÿO·û8¬¶Ò*¡¶ÿRÿtô쬟GºÑ#üкˆR‘a!•<½øÃ^GÑ
+rM°YÑ¡)2rÛG¬xÑÓ2~206¾˜u–aÜÌì~•ÖÕbhÎ>ù™ØsŒ’T,QsoM‚’ÿØ+‹gsýg‚‘‚ƒB‹¡&‰Z«_73‰;‘b»rvŸ(’€®C}[ÓK)Ck\[>®ÕãŒ&CZŒ\
\VEnx㢇òí—_‡Ò
vêq JÔî¨G1áû»Ê×!áÏì»1R~j@átjìâìYyÛ/~ÝÐ6| â‡Ö…u(º¹æl†án9€£!†vÆÄ]ê]!Î!H=ÖÄ:ô¬—t\¼´aÎ…0"rFýkÜÔ¸êføò1¸NÇ‘fRAY»Œ¸(»‘!‘G¬Y%}#ƒªJ·C#¶!r]…ßìfz»èñ_ü·	ñæ¦ü®èó­3£ñâ3¦–¦jµ€9­x`áNð„á©–C×zì9·Ñ@|wSÙ®SЂŠwt0ÕÅSÌÕye‰5n0gÞva$Î÷{v~yz.p~¹[Ù†(˨N!…$¨Ÿ.Û!æËàŠâo¨¾âÛUÛtÍ÷—ŠFÒcŒ×gÒU~™„‰ŠŽ@4ïT
+ÈÁœ¸
+QJkÁÂTg	
+kºk{ñBÀY¿E?^²<˜Eͺ‰ô#V¨RªØ'ȱ®–êéÈCbz®y'Z)Èí)zpzÞ_0ãZÎ]ï"Š¿ÎÕpV;‚¡²}ƒlâݸj7NvájÊN]¸†ÇÏyjÃÏÊŸÊÑc…´ÇªYrÒa@YŸ¡V%¥çí;¬‰‘ s¤Ïù‘ªs1}øÓ‘±ø³À'GM}/uý•^A\ýf³¥áÑRÔÊ<ý–N›3&“½Sñ3η“›•àµ3Ÿ·\·Ïòà0Ëj,¨`ª£j±\RŒv­MÛ1•0!az“	ò Éz\ï€	éa'–šzU–€ë€â¯Þ¢mÖ¨áÚd¨®ë­’$Z~àS
+æþØéë<ÁØ’‹0éÍþ ‰püØ{p00í“kõ‰rh?Î&äê›?yZÿƒ^+lŽD²B#‚ÔÀ…Ù#Ý'ýÔ¡B43GV#	Gý(ýüש3S·›¿a¦Ê‡›(^Hw©¹_Â~uÝ4ÙÑCM4…ݳ®¡0'¡MÇMóë[®L	\˜!xÊÇ©%нN”Ôl«±õý^~©±}e“ýD«MÆJ±€J“[“¦¢ñaÆé8Ï#[½tÓJ7›E/«4sG⡳#`4Ê[¬n®¬#´#©žD6[ö3•'ñjë•ô´JtNbù+Eaÿˆèä l[¹èü­î ˆ^á›ÄèÜ›î˜î¸Ú†Ïá×ì1f`³J÷1˜N®€¹Q,úƒ[8JbÀuDZJ2É^À(Ù|}¢Jò}^w^·æ3˜|ÈR¦I]¡¦Gw¹Ã'FÈ=÷ëýWí×Z:4‰bèiZÔíkˆõ8õiÀišR ˆ•Od„î7
+ÏdXÀFÝu±ûè&-Çr¡Qº#¨¡¬ŒÙºðrìë¡Ù/Ù•nªwŠñó«Ó	á0ó/±°Òµ®ŠHz‰ÄÎZƇ™Zã ‡œÎx¯$AZd$„*hŽ¯«.WÚ”KÁ,Wëµ&B_™¼³Qø@g‘ø-D¤g¸Qÿ2Â'øJ¤줋ÝÙ2´Àõ©u*ÓÀ<ìBj䥂dj¤<,.ûaN,*H-û<î¡AÕ,ÑA-Ï-4Ðʬ¡¨ÙrMèSr8ÏÆËê×pS¢Pc£Ž¨ýFŽä,&£i<§³Žÿ§ ;ìû<·gå>-s¬åï ê«lî‚=õ7u?& D^u«€P&Jý†uPP*¨½†–¸AOj1#°A‹Çì3$ð€×¹Æ9ØV×eäàÆn€zv×£vàãà%”U‰Ö`WÈOÖ\ãq?æ(Öá[‚Ÿzž\v+nž5Å×\’zÈïþPžiþ×T× $íïÔ­äµcˆCTæom0¸Xå<Š¼o·f<û¡g¼¶åOr6<Gg»g‘ºrË¥ƒ‚Ù‹ˆwƒ”»ÊNa^ÊöYÇD~Ç´
ªÚYÛÈ/œÇ5/ª—ªXSCÈêz'óžÉ¨k'ð—µ>â}´ÌËÆe›a]’veziaþÆ\UÉúeÉxdæUõÄ°Ü£÷C”°'xâØ™öaCD§Ò°Uj¨ÚõUOĨ?°¢="ÂU¼"ÄäÄL-.=P@¾tå ãø¾Îäö‰šR–•Ü/÷ìHÃi÷Ú+tH/% Ä¤÷’ÄttC¾y Oþ)[Øž)ä=ôû‹ÓA“{uèÐ•‡¹uw“±óàó¹'¹RU|€n!*ŸÜ(}'SÉò4!*Mé†®ý•ñL®[ã	•S6‡h®Î	È	]iÉׇqŸ¢âÃäªÈò>n
­0'%OéöçH¾¿.çÂ>¯ö„sGç>>pÝåos,‚ØÈXh#ص
 <úžåöãu.iEÎï§#&EŦŽï‹iî{!E*{ŽŽáP8î3<Oç,fƒÜObúM›þˇ˜´;zÕ¾YÒŒš>¾Š
+CÒçÕ—TL‹¾XLC¼Cn¥’ÁTãë–k$£Àë¼þúo	øRIr½Jß2•6Dnó2ÃJɪívªóSóa™'–É
]|¹VH?|ÑS	—ÈÖót˜íH9Þ¦]ŸTÎÞVFâ]x9v„‡ûÞ‡â™âÄ7Uµ„Eö÷ÛçŠþ÷É™ÖXi!À¡Â^צ| ½†ÈÆ|˜"R½\¦ña|%aRvRËàâZH`ôÚ´ç`v!5Î%•Ã¬	™Û‡·€­qއ׎Ÿ€0e£V7‡WVŸZŸÚO"£{—Ä…ö5ûÄzZ%‚:Ò¦}Ï£…%1`´íÖ%ê/`…â>°Q%y°/µ/Õs—L>d)Sª ÈÞS­µÒï-?p§sl„úûîlIËúèPÊ8~l³8øÇ»ôÊ94‘gruѲ-ñÏÚÒ¡a?´àÎâ‚æ·¯¨Ìà×WÞÎÞ¨í¨÷û£W&ŠH.Lž<eíÚœhÞY°Ï6qà\5•'É;þ5Èe' \Cíé²5ïéeÁeæ¿ÌZíU¢9i¾ ¢ÁÞ+œ)jeðK'×ÇЧö—gÕÇ„ÃÄpÔ—ÁÕ.Õéƒy
pë5T0Uß5Ö.)F;=v’Õæ >µ§âWÀŽ§hAEµ:äì§f䲼ʔ7½o;¾gõ³;?²=8ÊEG ù*dîN\†¦%»îa*½…ŠH»]»³ö!`…¢Ñ¬‘/YL¬è]ÊzŸÎ%jwT­–þóÓeåžþé‰vÓ
–)?5 þ:5vqv¢²ã™?ƒàh>PŒqÎÍk9#ð»±nj	\u3|y–\'íÆ3)	®¢ÓF\ÓƞƭŽV΢œ°ŸÏU%Õ¯Ÿ[ž9 Ìƺá¶ÙÈóÀ©3Š®wÌñ©ÕóV[iÞ[ñ)ñ€:zvVÁ­]æŸ~h]D)ƾž1‰4gòÂl·FI*¦·¹¨AIñl›Ë½·ð½AÆAÏ!ËÞÊ-Û¡•—Ê“Æ1Ó95ÜV	H¼–ÐLÑt¯¾LöŒtÐqŠ¥L‚ŠŒêŒžB
ØqÿÌn\œãµ‹n÷ê5dÍÂïƒØŽ†QOîW”3¶î8`<”¹OˆìlÃî¬l<<‘~¸ìàrùs¡Ý^tù Â	j–ʽya6Õ#ªSÕÒT®ªö6ÃëЉÕxЮc®Ééžëo‡e˜ãÞÄÅeÇc–ç’aùÏlGC¦©w¥J—[w0JÒ©Dv6ïwV6ŒÆ?\Évp9ò·Þà/:òŒaŠ5e¬­
òŒ2w'.CŒSœÓw¾ÐÌEŒ$Ó Ó×{ž0ÌQæVÆ™¢&Vt e=Á’ŸxÓÖ75Š.´—>²K.øc—šŠWQç#.
+çcOcØG+gQNXÁ餜äÙÁ£O’PfmiÞ¾‘Zpg
qAsgÍÙT
fpå¥ogÀoTøTõóߥE$&O¼ømN4š5¼x«ïŇíhÝ{ŽäíBïb8‰jÅî‰ääúϲˆ8û”*¤á”kš#“ž`Þa/åÉS>ÐCdc>L)Ð.Sö‚¾À>œ¾);)ë‹pq‚-$0zmZ„ý0;ž”giS°éßÌœ–0Zøkœ‚u™0
+ÌqX¦œ²X™Ô™ä·Å&2š§UPdo§ØÔiùÀ}Oü{ÿ´º¬gùÝŸ¬ìSGù˺w³ž¬³GHG±þ(w—©ý3Ïn©1H}¨ÃŠ|)ª9ŽÐ%áÄ"7÷ï%êUø;U÷§÷¾ÂKꈠ>Ò+
$‘>槊ÅdŽ)KÄnÀ„™õv$ïºõm›:$ƒ™œPbRõIb:‹:¯†_²P©š£lOš‚‹Žryž¨úCWðÄö&W£ÿŠÄ§Í„4Wg„ŠdŠ ºêåͶÁ
ŒQqïr
Udy7†ƒÀ\,üE^¹Õ3óÞ½^[ü©9­½Ó½Æ]9ëÜÏAâËDµÏJÓ†eq°ZÉfëc¼Ã¾ I;¼=º
¾c.¤ê}¼ƒê
<
‚2s
+¤ôbXnßõ¯JX<qlÂuå8§Q(¿ßGTƒ‹ð#GrÀƒߺÝ×GñÝÀÀ“v±óÕ½ü˜·VüùuÛ6‚Öív—x@åÒc’l+å¼rpc7@=ƒ;±åß;pÿpœJ¤ƒÊk0¥‰d©k.ÿ‚¶‘]ÝË,}þ3'«˜>Ó'®ZaŒ3[Χ'¢a5a9äv‡Î‚¨àRÒŽà65]y0ªîý»ÄJ¬…-ì¢Û…`>Ñ쨬ÜSðÁ…ŒðÑÚÑ6ØÃÐSw})'9qwáÚª—®»|“ìŠ~ºÑªÃ~/’ÑÄHéÇk~þÇö'œ)é¼ÉÓnemÓ…ö®£cYˆ©B*°ÙÜ<1³‡ËÜáö¬1àÏt!
ÜÐ!¬¬( ´~t£wD#S[ò’DRYÎĦ¸OB¶u•‰«ütó•±×›«u}€©"•©›®›˜Æ€þj†îàáYU†M®¦Ð–Q"mž„,qê7Kåèû7³+K8êúOD74O+A+
+(-‘áÔÁÝß²ªšAQ½1UwðÓb%V̘vÎQãÌ0ævTVn§xîÌFxæmælïh§Àµ°š’¶µþmU
+Å¢DÚ!XâÉn–×Íënþ{V–pÉé:žˆnhžV‚VPZ?:ßµ"Ÿ§£yI")‚¢gb¶X-ê3û¿^ï_Pª“^]ˆ_±¿Ru°^ÏuˆˆA·Rz1,7áôÙ%,À¶6aAkø;Å	< üi¿I6›ü^98¿• Ï“Öüá“8ñ8N%RÏe»ÜÊ2Ú»ñA[ÆE>šU’Ghœþ‚bƒ•õ‚ùœu¤|“¤õÝõ_aÀ«uDPi›ˆÆsÝEì2²
O„T}¯¥xb{‹¥ßñEb݃èB¥½BE2EP]uüè[îˆF¦¶ù9ˆ¤2²•M”^‰<ÛÀùìÍø4à³ìÐrø!ù1Ê5ìwÊr…r}éYDóJ‹RþJ»…MŸÇº§‹XúáfNK-|»NA´Âf¶,SNY,ÂjÂrÕìMݤ(2¹Ýljºò`¾òé6­¯SÚµÜ%Å£µ%iÚ";ùµ+Fc‘.ê;8’yÕop™yF¾E”IÁ<çk•”EZÅY«À|¿ÅME¥¦ýŸý¿©¿l­›½¦',îúRNrâîß©I(3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc52.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,106 @@
+ø±n¬Øá‚Ÿ±Ì—Z•óªïêÒMJ°àÚŽá®qÒ¾—óëv걯5°¬"'Žø
+ø±n¬Øá‚Ÿ±Ì—Z•óªïêÒMJ°àÚŽá®qÒ¾—óëv걯5°¬"'Žø

+Ü
+E­ß#…3´7ûIÃÉ&¹š”}Ý©ßAâ¹a3>"ûËìÉ<Cj}8EDN,íβéu>›¼ÎI¤î¢ã,#5k×ÞÍ=s>ï“kߤ!3 š#"Îì_Í$éfi:Çþ¥ŠG£2Fþfunë’›Lo)5ú§O£‚ÙoÂf|Dë‹Åxþ†ÔúpŠˆœXÇ(?OË&ŸB°ÙOÛñ/û8te_½dJG•ŒB,¨½|ñcU`³efO)áJl&ª»NŒ?"*yÏê|+e’UÁYÛXFjÖ³¡‡zæ|Ã;Ö£UBf@)FDž‡HÏÌÒt*<Ò0c2©ú0^›Ìãq·¬yþë7š<mJÂ]wã«_¬Z0j‹7TcîõbÒ6“(áW(	Ž[dŒá.ÌêÜË9+˜ÞRjéSž[¯Þ™ÌøˆË—ðáµéà	
+%°“Pk-P9-¥VºæPâ[°I8“Äé‹ Y³DŠº·Þ'[ç™8àáéîP¾€Yü¥/¦ŠkZ~"ž‹"L#„}¯ž«ÿ^ë0pèʾgÈþ”Ž7„XMgøÿƪ0À{ÊÌžRß”ØLIkœ~D†'/å'àûeÿ0/gh~ÃÚ ­µ…´$ní‹eö<µFhÙ»Ã+
+ Ò/ýê$ÄàkLŠ‹†NT<ò<ƒÉøVÊ9ªŸ² «°ŒÔ±{_ôÑø›v±[ª„Ì €RŒˆ—aƒ…¹èTx¬9®œ9/ÔU®õ=Å'Ó_fÇc6£ˆ5cå=›ÝÓk$f–®8T£Œ/§žþˆ¬r¹6`.6Æd'Oé`¼™+…ÛâsEòáËn)x'Ú”:™ºîÛK¾E´`Ôn¨ÆÁ÷ĹlA3Ñ@3j¼ÆÍvÑpq(Hœ¯áÚ¬ÞÉ¢‰ÆtåÚ„¥ÿ( È¯ªÑ{>Þ´jãÐÒ‰Af;Pß®P¶Èß\…É¥‹rV-¡¤ÔϦ!¶2C¡/…í
+‹3ýß"wÏÝJ}; ÃUnÀU¾ÙWJšn“0xعì>séžFû†Wœ2s‘òxýEìãnBÁ¾8mk†ÃªÖZ rZW¬iÑ& Ù¶}’p;•Ï>@²{ˆ	is¡N¶Ó/pÝßÏÁ a²åW^Q	Ö´.__ûtˆS¹!'ƒ‘z%Ês
+›R‡ˆÝÐÊð!Ì>ƒ6©%ßÎ(ùû|#G‡.¾üD!D˜FúC!Kã¼Ë`à͉aÎá5n
+°šÎíã‘I`ö‰…!¤£5­˜’Ö%
+üˆAeA4žôx܇tæ^“J"crÀ«…á´„ôëStŽX“v€c›–…±4°ñ3„‚N^×NÝëÊã`^ÎÐü›©@GwuHÜÇÊñxwŒÐ¯k›V@¹^çÉH•ÝÖ˜	œéKï¹Kq3+aÿïGRiháªT¥Z?ø<…+_	¥2G°zh½lª§ïHüø‰qô¿…é–¨x>ùxí¬‰>rI#y@K}µö¾&õ¿í+ì¶I…@¤
+>3Â&=oÍ¨ðP}—}·W.¾Þyì³á’玲»ô–e‚…­Þ
+”³öÒïœ÷–!·5HÛ‚PúErA%r^"2µªA÷z—N»¾Ì“Æl*[(
+2jÆ×z+§»ÖHÌ1Ap¨[^S!á
+Eä½wðKwòúÓ75ð;íÍÛH¨Q&€!`ëÈ̃ÓÄií4¶H=>&/ðßëòq÷ƒ½îolÀ\l‘ÈNžÏÀe/V«ÙæŠùß‹ÜRðN©5t/iÁ«–aŠuÀµÜM‘Ÿó•oØ—iq2i=¯Pq©¸‚Xs	`êÂ’Ál²*€¯DÂʸvÐX}`kq#lQ=½Ôƒ€—Ò‚f¿€fÔe‘‡ì¿àâ P%Cß©E¡Y‘èשWãP]CI¿ö|¡uÔÛ½¹‚Ìzcîcx½ps,‹¸µ£:Ê©Ì{UoƒpF¦{«‹Hò£¶û©WYIixùš¯zÆv £A $q
+£¸Wä¬Z_UµƒQBqd†_^Ç,fç£D$4”úv]Ž¥/¥ˆÚ•t€ÕÂøNCæIÿ3±˜žÊ÷à€ØøÇæùëÛ3»ˆ³ìžŽW›ªÜªa¯®”)Ü=$;`ð­oÅ|æÏ!þŒë®%dæ?$ù8ðçŠÅÛÜ„þŸapÚÖ›Ic¯mó¯ÍwO¶mñ³aõ€/o4‚kNl1ŸO‹4³æ)ü/Åm¨±NƒÍRýÀŸcC±´]ä´®EÒ¿L]¯qú9àv7ƒ0|€yö
+Òæ_0œq»^ৣƒŸ]Â:y×®¼¢±uI±ìŠ±3=Óìcæ ¬ÜØiâ1ÊÉל3H.â"æ¤OLÕiìmÉËž/´œI\¾"8¾ëè
+¦o"*BN?ôJ0‰æ+¤
+§½‰ýB…|lOJ£"PïëøFŽ\a¤»“V»G0ì$ð“æ՛蕠#[«^´Ë~ì	Ì[CÕšmè‡9 ½“.e´óGÚa˜¤kåˆBˆ-Œ*é†B–Ûe‹À݇ÂßjÜ*})ÇÛ?’À'ñBU[jG-9±Jå
+óxTËkóZL?3whåÑSJ•ÚâšËÓXSyL ƒ3̇å	óúnÚ[–\š‚=Ê‚h!õð¥=èѼ;”DÆä8Kßuõ<Ë8¦è°;ìÆ+=1h}ÿfð‡Œ¤‡Äùr:Œß‹)È>«,÷êЧ?¯›’ºê¡Èk,5Œ¹§cÄ_Øp›ð"œ¼³œ§Ë‰ÛÀ¼½å+O€Žî.꥓‰ÿðî½CÖ+¬4€o¼Ó7§±-"%Ú™
+ݙhY_
+M*JpØåój<c  EI˜hQ<»*\ÇØGBjq
+|º +“
+˜Ú/Ï–Ão–âfVÂãÃŽ¤ÒÐßI¨W´~íx:V¾WdŽ}ôÐgØISÃåíâõc>Ï17“r“N¾·@|rÈþG#¬0£»…ù4]˜à™·c…Úbå#Œ®£Mr?Ð]N×D(™7;Mð|ïð6ÇE|ä’Fò€–ú
+wþñaL÷cÇVÅþq’*€:U
+|f™Lz6.Þ‡MýµõÍõšÛ&ÇÍ(gs<àd,¼+ü¹–&ø´,Ï5sÑ#àÍɬüfšù‘–µ÷ ú3ús®\,a¡òÅ{ß9ÃQGkõ1*Ê'G¡5{ñ¹Ã&%ó1Bsj« éXÿ²]ÿßvùÞ³²­6¨PˆuÖ)B•&¿Ê—ù¹V•®6$ˆÏ)8²ŠÆ^ßH·½—XãŠä‚Jä¼DdwI‚óô3œka…;‘ØT¶P,dÔ‘³ôVSk±…b‚àM¶
+¼¦BߊÕrá3$ᜅõÖ3?ci	˜®Žo(C•°ö”…zmC
+cIB˜Zæo|3Ox„eÉ”rßgîý–îùé»njývLJ«M¢L(BÀË…»•þ(ÒÇhqz|L^ý£'Ë2ùâógÁŸëLøëU1ZìõLºPÝ>cçM¦úŠ{m_•Z;úlPw`c‘
+¦@L{.UÀ+å•ŸËÞظØ?œ!ƒÊ^¬.K¯Ñ	ï £¥¤ýœOj è^ÒŸK1Â	êw,¥š?#û7Þ­&Ý,ÖÝ“U}£,Éö»¸>ãüòîAD'’}áòVÉÍŽ¸Ú´ãô,؆“Ü!’&§3ÒâdÒz C8 âOm°æÀÉ™9ŸØyTCˆ™‰mì½°ú.ÀÖâ4FØ¢zgµ3¹Ë×S
+×Öø¢º?SƒúBŒCLý*ÚKtÕh™Ž“¢ ùK7úó¬CX*ÈS›sh¾ÖE’
+“˳Ìc̵Ê?ÅcÝ8Ù@ =J†£OŠ>_²?ͳO*8®Û º†’cñø_굫go…áÉÒsÉÞ‘ZÒ¯ƒÕS—¥l°ÇtïãhÞc”¯±ÊSQqlŒÒ^Íïö‰@yáôÆÁÆðgà
+æXmw[t‰O…öª"ÞàŒQöKù[qëO®²’"Òðï)Cô‘í¯Ã\¿ˆy­”œ7â¨Þf¥–$]à’>Á‘" $õœè¨š¥°­§’Î\ÍU‘›ì][‚]Hâ[m.®ÕE´¾ªw¢„ âȾ¼.“4XÌÓ[ˆÁSHh5é ìºXêìXäÜ…‹ê¡¹Y;åªò§lç=«B^®f`l¹Œ%峺òÍê'ô«OäJÿ®°W$^W
+©=7$跙휆ђ0ãf-!=‰óÝ­í“ Ñï$Ë«fk
+,{Å!®ùR•0R¡qÜœ¨•$Ší6i;Õ}©ÖŸ÷¯Ü'‚ÕcŠ²xV;ñ•džÖw¡\Ó¯ù¤+I¥'IÂCA5R¥zHvÀýGÞ—øуBáË"AJÈÑ~HïpýÓ	—«¥á#Âੱ"+’ÓLILn› ·Í¶ß,Uí1}ëÎQ嬠ä¹Àßða8}µ¡ Q?nÂŽ§¬Ó˜ÆCÚûC‡îž,qÚÿ{Â÷^ÞhÖœØb#ž*h{ÑRå^—ÚMœ‡¤ç#Ɔ>Fk•F+6®îk3ì˜bõ¤ò´ÍºTœ,8¸­¥[º¡ìÎCõó“´‰kâJ,+†À‹­>ŒuºÕuAŠ¹c˜ºCâérÝìn,`øòñ$¹Ñ¾`%âk¼ÝS[#º™tò³AeY$ê‡p»píRXáu³ç.Fñ?²µWBÀªXϲ›ut­.¸-ñ=6AB¯íG7Oª‡à’Å	'fz»ÅÆÑ]E&¥­Ò
+Ùb‰,³%f\ÙDÑUž&˜·ÒÅÚ‹!^u%’þjztgz¨ÿ‡ø$t
+FÐÕB8/Ã?Ìi«‡>-úFJÕsÁ8tu+?—¨yc«jô¸aDpaËÍQÞDT„œ6~õ”`Ñ(VU&Sgç„ø6Øž”[D ÃËíŒ&¸Â@dõdgûÓAõ˜ƉÅÔ~sÝœb¸¶¨ûýÝYéÅ3è~Eõ°•¸ßgÏ«¨@ÈUk;¬kŽ`ÅHý;Ñ·(+Í76]F¶K¼u‹ü'Å…¶†·)ÚÍr]g;\ÊuûŽ©Â-'UÖ­nŠÂn"¸$ÊbŠ r¾>Ù·UdöÅk&©$¼ôd8 6Ë>ø·yŠóÿÅç"‹å;©­Ü×
+„,
+ZTÏ„1«Ê§™£Ô¥(TúR“«~9Nÿ.„ª¶ÔŽZr”(×/5BöݵMŽ5ý<žn
+üôŠÍCéd䦵T#Í-<a(n¥‰ô05ƒd’öPX‚¦/:ûð¨‹Ö2û´˜~<fîÐ׿¦”7©Ù)‹»°¦ò˜@f…×ûéÜ©¶61¸):ÂJž³pjT­Jx$©•D?=¬tÙ}9Ö§jÁtL_
+•ne=JF骳®§Âz‰ÐB÷ýWz&Í¿ev5ˆ‘Õp'–.£ê*÷x‹pQÍ}vÅ:‘Vz,b.þÐúãÌ*2èËç|šÈËêZåð…Ÿg{Æ¢jÜžC0¤Öú¢ïZl….L{H˃Wžâ|ØÄÚ¤è8ýU•ï(ät£þR|KXóɽS~C+(9iÉ0þ<_ÖXjoSÆ•¾­à+ý&´;97Éfë´oiQÇ~Ö¤²àðHãž™¥É—Ži#N~å ²t´À=ãÚ9œŠö¥,D%e{%S‹«eg ×Vž8Á\É=W;,ãýÁ
+g†±VEhÞe»=nSZ$,DJ¼ Ô ÿSî)ÔÓðzB¥4×÷ƒ·á¢îMŒ´ð™ ¥®÷ÀÔ6rÿ]}2¢¼@©/§/&в¾šT”à­×ûÔ'xÆ]@Š’-ТxkT¸“­Ž„Ôâøi@V;-©^Q*«É*ºþ10!«VÃÎu^}>4ª‹ðjH£1nªÕç‚^eò>ü«W\ðJº3£QTƒ1›Þ1Ù̬™Û›U¹½£’M®uüÇðt.¬a$®Èúõ½Î­’¦›=×ÇÙ÷Æ|.ƒb{4*°4uMD*Ä–,N¦Lx^|8¶w® MÏU|v–åäN%Ûx¸*’âwuÕáj {hn;ä;œas€øä2áŽFE`[kïhº-Ý/s Æ©2Ä×FA[šä~½º&œ³ˆP/nv–>Ul>0¹’gUA¥»µï±xÅ¢"
+Í¡’Ž·Å¥ÛƵî7±„Uш
+:0‘¯F¡–|šýøÃýl“ŠøÕ9Œù1éîáÿ˜óÆ0“¬—áâ9T.tª4øÌ/˜ôl\¡0šçbøI­øÀÞrI®Ölî›þý3²ˆ(¾ræ3\®K?îŸÜþ*Ic(èÀ~†¾bíw÷‡÷)«L“=‡P
+8Îæx*ÝÈXeVå.o1LíuXƒ
+jæ¿F݇EåÌ)ï?1wóò6qò…s­¢6œb[ÒÅ7ÛŠ(Uε¿­CŠ=uT076 pUÐ…:È)¿ù]éféæA0¸XÂ_ù—ö£r›¢ŽÖ÷bT‰20.NŽ _(jöÿo›LJûb„æÔ=K2]Ï¥ì·ìJ™Ñ:Ç·È£	q±\›½Ò´S¼Ñ€?\žÈ7{qR·åÎÒ˜Jö]¼¥Å°ãyºã£ìï¡{yGlM 
+ê±R„7Lc‰ 3ïo¬7AlH
+4ƒRpy	‘¼£sg3°ÛHæÈÔæ4#äÈ‹û5þ@^¸—å)¯iú½ÁÝåÿû	Yþßõ¸nȦ¤¯ ²Tq½HÑ	Õ”ÕeˆÈî’ûõf%ÖÂv?­¨q X4ȵ8?{õ¬¦Ö=ÄÝšqeQ„£4	·ñШúÐÉP)l
+¨7b<°%¢-ýeíàâÁ@‚º)IíÅb³·%”KýÚ¨r¯ÁÉs£µºñ½äßfHß %÷±f~ÆÒ-AÞP†7<}ñ5ôچƒ„-´ÑÞøfžð, Ê5ä£Ú×&ÚŒýöu.ײQˆ‡Þëî4CTzv¼+»öZ«T¤Q•Þ_§4æ×1ż0Œ7í™»©ÎÁç1ÁïÏkÜÔçì“K=šY˜:P„‹6k7áP¹“Ðâ=ôø˜¼ç[N‹dïÙû6Ο6ÄV_ÄCŠ^KV IÞÎ0¶r)‚É×;ç͸Š™‚ÏóÎŽr¢Vô{;xCû?í¸6•#˘í˪b´Å÷˜i §|ÆÓšQé	öÚ¾7´véØ îÀÆ?Q€˜$ö\ªV×7#‹ÛÎ)ƒÎºUGh)¥7ýé5yu»;SCF:d¹UØr;f7ñÑ5Ôb»ž)·F@¿qÁ¹Û¡­'m­~%B'‰¼E\–C¿Ã@[WUç8%žÔ@ͼ¹#–b™É'îXW)~Fën8¡GY¨–¨ÒßÄÀ„–E+ÉeéPøÐ’\çµ=¶Ä0¥’s+¦2e‰ïø×–Amç5ÒdÌx¶YML§X±§;ªú[8Xñkm
+|ÛåùÁ‚*ˆN9úß6ù¬‡m©uÛõX­2*;¥B9LS´¢éߢ—rÙ§éÀ«þž “1ö+ŒÈšh”·qG+˜žB1ëéš
+— ‚T·´Yf¹Ùȹô@†p]ÙžÚ02}Ñ$/r#­ò¨:†
+/ÚÅg}é\±ÙhŒ­YôÎw6:fož¼h¦¼X˜gòÂhRMj§Ž{Ëwœý?ir´g²|ý±MÚvŽ*w¯hǹEXìP ´že‹³¦³±íYi~¦é„†˜çT©–è·Ð/;Y]ï–néûE†"°T¦+æÐa±Š9;‹{s¶z¶5¸ëá×~Þu2¾ºD¥ý`ÏÛµ¸óžDÐ~äTuÉƾ“„Ó`}¨µsq2…Æ:…w‰~&—Ƨp¯€]z”[ž	|¾y<~‡{žTpA«]i9Æÿí¾ÉwKÎÞ<2Ê€wT€ÛQŸ¤wkçõ®Ð{ûHLD6棲Ÿ)
+Lêç^º®‚xû'wPØÕÛiéȲÊß¹æ2$¡?´¹"C·¦3WØ}'“èÃÛÐ=¡Æ™'5C‰¦¢âع¼‡Ãñ2€ò=ß'ŠˆŠžü@½+îÔA"U™¸2nõÞ¢s;
+³@hèõ‹Ô`˜UI”2²síž-§ä³'	õ‘8Ÿ‘ýÎÝÑ8°Úî¶èžñ ID¡6>Ý¢ñ–=ï¶âËžA8y9D¹ýÃR†>õ?
+”‰ñ”Q<–N‰|€{EBàt#môAì°<«Ó#("þE	½t_‰Öô¥Qáu°
+5›GC›¸c
+òG5%nÙM¡ÌW1HºÝ9|Ÿ?D@H÷%ÍM)'W}G:S9¸‡ª?+àžö-ž»ãmöù²4L¾#½"š÷—‰œE±ãê1šI²ܾÂQ½cö•f‰¥;¼±à!ź¶ºÙ(¶Ú\A,·Š0uaIî6Y@Ù"ae\;h,°…0»¶
+Ÿ6¦ÐjÏ@Åi=¿w¿<Ð8Œ·Ë\ÔßeÚf³¤†¹ÏÎ8#S³ÛË$yß[óÚ¥¢ª†º<òMÙÎ=c(°ÉÅ°Õ¥É_o²v×þIùSØÓzK„¼AÌÀØoJ×{iù‡ÉNõKžÕ”$ãA(}еx«µy}ç•”x“øèã$T¦@
+ž0ûdfÏçb±
+ºø[$™xáÀû‚y¶õÏÐw®H¼®Oz<nHÍ:s/Ç%¿9`ÛÌþZBzû§:G,Ç;@¿ÃH‹KÌÖXö—BAú«ùÒ«¶—›¾ñù­)º4þU*Ü-‘|€Ì›¡ŠÜ­X=4Ð6UÝù$~|ʶzÑÌúKï¤7`¤_â¥%M7H	Ç<lÒv·úO±#óC¥N·Æ	y<ð¬vÿ7È!±î_¸»CïU¡†¡ó:D§Ò†„žÏÆ=œe·Ã)ÍDàhexžfÏÚœá†gòó>Ÿ­Í_V’WN’™†‚j¤Wôì玡3í¿„ß
+‹D‚”¿üÃàç»3KW*ßF™ÝODV9®—æ —5^cè;æ8¶$NÙþmVÎoêQÊc:ümBÜñPdÙUæ³oZ5ÿhiÊ®3»˜(’˜Ü+]s‡(q£XªÇbúË¢×"E]Õo£ýÂpþúw(_@¢~Ü™SE»-C™üpó¼ñ™½4?ïmØÔÌZ7ø˼{Ô#4âÓi™ðubp»&EËC'‘†©ë†Á!Xâ©ãö™ó:¼¡Ð2±%­ÄF!TÐ>ö¿¤0×¼3©šþ%6UÓ'F‘iƒ…ƒ¿ÀÚ}/aÃfÿ¶ÕV²û•MÈÀ¸%€a µÿÛ¡V-5Ë•*¿wô1Èi|ŒÖ7ŒVlþAÁÖfÅ-Ä÷Uùu‡i¨%XpmGþW¶i_ņ÷û;uÖÙ”XVG|„‰gY‰ú´Ã^gªRwQÿŸ”»åoè·ÉùÇ»áRž—MŸgv¡èú3ºÉ„þêi·ê‚	oÆ-i†ÙÏä§ÅÜ6XÀí:ùÿ4Ho¿aÀJÙÖe§¦¶6Fi/èù{‚Ê ²HþÉïØÙï.ÑŽD²ØJN•qTo3ÜK pIîÆŽôNÉtTMÀÜXØ€ÝIg.è¤ÆÃàkàǤ°ßê{Ó\Œÿ~yw®„"I°þƒy+êèG\mZÿzl‚„CÇŽnžIÝëå§åk|Q]‘§Ï}!F¯&ðm«:ä4ÂGÇQPò«•}÷V¯†,d§Ã·4_k¬IˆÇë×9þ—þNÌôk—‘¿ºŠLWG¹¯ÄX{JÌ=¸¯ˆ¿ª!L-s¹>—©<B¼êJ9áÁû&|û¤–-vô&](à¿ý¨S}‰E³¸¡Ä-“É}6(µ0¿ÆS &	³¤`›üÄÁëÔôèÎôMãíH茽·„p2^›~…ÒK|Z錔·æŸpèêV~3MòÆKÔõ,ñY ñá;òo×YØT(D´kš!ÄÑÎeÅòÒ+ÄW‹D
+éšYEcÎ/á$ÕÐÅ,ÿmˆà‹‡4¢¡ˆ¨%8lü÷5À¿P¬ªL4¦ÎÓ.íl­!5¶ˆ>]›‹ÇLm™•Ç9ŽÇ'_Õ >9d‚­ŸVßÓÌò LpÂÕ¿Ìm‚1üŸFWߨ9‘h ‡'å"•“€È÷<ÈÎ*뻂÷-&‘—µ4üæ§%ÄmqMëç,§²&Ï—fÍüŠ÷}7m£ÎƒK.M€xÍFRÍbò
+9Fá±ËšdÛõuhŽÝ‘ÙÃ
+I]u±Þd»”FÒÝ¿b¡l8Ãx‡ªÖvEÖÀ—çv¿sPV‡nlºŒq–eêåN—$qsR©‡&äºÎv¸‰êëO™ZNª±RÓÇ+Ó­vxÇsä
+ÃtăPŸ£Û/Zë?ÀvŠf£¯äM¸tÍ’PÐǼZ÷­m¾LÀR»GÜ	™ÜDmH‰Ä	:@äa|'¯sªÈñ—ÖLOHeõÈp@l‹|ísò	ûã—ÓD×vOG¥¿Ù¸÷Ù赩[¸ö×¾ô@™¹A»'6–Á©Ë„Î×sš~™ì¸TÖ'Ïè)ð`Á¿¯³X´
+¨ƒ"bK‰'S&</>[µWP¨é¤>;Kür'œã<\Iqµ´äþ5P³4K¤6ÒI½¤®ÜÓƒÔùÉÖ<ìQèÞIGÕì…ÜãcÔw•ÖB¤æDÆÙ#ÞK>^j„ñ§wšjçx=!Üåõ	‡†ÏÈÕþQw¨F‡ZxÂPÜWõ`j
+È9ñ °Q^ ¦Ûê]–žÛ+ïg´/°
+UË…x5$ß–7UäïÝA/¼y~Û¥.x%]‚—ߦ*tëý>M±dëu-üxÌÁ½³cQ5nO¯Rk}Qù-€6Ì&³$ëÏ¥Oq>lbmRtŒZ“’•ê3ûZ¹º¦í?kRYpƒx$ÿOÂÜêÅƒGºŸ'?üPY:Z`ÿm’NE{ÜŒ™”!{àÔ¨G”ðHO7ˆ~zEè¯ú2r±SÔ*Ÿè˜¾7ÜÊz”ŒÏ2I{(,AS™a%O×85*Ø%<‰ÚÄ"‘V:â°‚’kÝ5„î:&‰¡Ä7¼%#ú‚U×
+WÝa 2ô2½„óç®ôL‡cÊìj
+?·àN1\[ÉTóðࢇúì—t?¬ôXÄ\á½éÛ…T dØ7Ea7\e1E€9_ÀâÕ¤2{ì»Ú^z2ë|Õ²E÷ñìýËü“ÚØnÍ8‹Ó8ø),þ‹É´×ý#Îö‘YÔ¥!†`U,±éYô:Ø\˜ö‹®!Ùø­•©UÍp5=:½=TñÍ|:#hä‰!‚‹™ï‘fºÛ͘‹}#%Éä·îŽ:´›‘ÅT²¿Û5zç&
+ª&7ÃPÕè
+[á¤ø–°ûg¦ü†VPrÒ`áx¾±°Ô
+Þ¦‘7aGÝVçL#»Ä#›±Ww»—vL1ôRyZè]*N\رܣ]Þvg¯ô÷ÇZÊ»q%›C`ËØF
+,uv,rnÌËuÞÒ¢“ü±UyÝ6ýÛ!/W306ÒFœü×]yèuzÛ©r%	ñW
+Xò)Ä)Þ¶nNTÄEøº“Îä°ÚkÁõÙnAä¿EY<+“öÄ2OkµÞ.çÙòRˆJÊöJ¦K'Ê>Î@³¬!p:Ÿ¸z®vXÛçŸÎ¬ŠÐ:¡Êkzܦþ´HXˆ”pO{˜O
+Óÿɸ{òY&_‹ŸÐMõÅÊN¬Öÿu–MªYn_a¦Ð¿{Ä3ÊÀ
+Ü“^Öpže@µ*@ã¦ÁRµ»ýô„Wh³ó$&"sßYÁš&uý/]WA<óµ(läãºúdYe€EDEO~ Лwj®¤Â\7ôoQ·“× 4tôËj0L¤ªJƒ‡Y·øO˜Ýr׊O^4S^,L½ya4)¨5ÝG³ëµN𑺀	9Z½Y>ðÖ¨m;GµÙ4íÒ€¬,v(ZO¼·[…=[€”\ûþ…å?oH´_]"Üð0éãÔ\÷O"h?r*´êc_Ç…Bç0°€TÔ·¶¢TKTiáb`BK¬›ê¼ú(|hI.ýÔ[bÜI·›S¼Êù|åK®¸ý”i2f<[¢¨ZQúáQÅ9ƒâÝú`ÛOPÇ–{›FdM4JÕƒ¶­›	LO!–ûúMˆÅA*ÕZ¢b+¡b¯…E/«+ªog[9šAêå“ýè\EÂHAé÷gG9Q+z³“<¯ó‘ø\ÄãgšÏg]¤­4šÜ•ðú”²´Ó‰“§¯#2Ò¤l9“3•öæ”j1ÓOšÕ†# ѶîÒãÎöhT}hê(š6ˆT•1XœQ˜ð¼øpqî A]šƒªøì1×ÕœJ«ðmT9Ùîê·ßÔ]öÐmåmFð{´åY¦DÍoûw¯*=;^À›Ó{-Û*R¦ÈÄo¡Ýså–ì^F•øÂÓÚÜvÕv%ÂæíÕdߌŠÀ¶Ö.ÃÐiZ§^æ@‘.Od•³Œ
+‚¶)ÕügiL%{
+ ^Üì$sdjs‰ŸrdËó…” /\ÅüŽšÙº}ÐîàüñóŠ¢áô\7dSRÙP‰Y*¶Ð$æ1|ªØ|`o9Ϊ‚Wk6wÃð—YD‡_9s—.W«‘wÁnª¿
+t`?CŒ_1øÉy¶y̷؆QNÀ1£„iì•ãE¤gÔÑدEÀ´€„*•8¤hÌdšÑÉò)çí›çØ;	<í·rï:bÏ(Áßã™-û‘`;E3ßÙr¨\:èI(hí…^-õظ_&`)ÓÑâ\õâtÔÚ‹£\{å_zÉÈ ÂÒ
+®ÓKîÚëB
+gå·MÉ?Âv\*kétšx0îÑÙÄí’Gí¡ä’2A±ØÁ+áçfy
+P&8aäÑf¸A–~Á#¥áT’Æ4PÍü
+aÄÇ<è#)è1y’€#þÖëM2ãô´4GàÆâ猪´Ö‰o2ÈÓJ#iàÑ1Þ6ï<Íîó>óRK˜;z pÑðT§°Ê¬×\Þb˜Çê°ÔÑcŒ§Š×…R0Ã~bîûö¢Pöþ“y¹å¢lƒ*"Z»Mžb‡æg¼ìyi›b¥ƒË	"ˆúM¢¬¿g™þähìñùlâùæG"Yl%'Ķ*¹—n«	P8ªwcG†	z'ê:*¨`n,l@ઽtRcïûüÝŒü»>¦ ÆÝé°ž#Ùx„¸Ûra­í¦(yÛÄ°õ+ÙC„2ÝïÕ¡»VªDíûåºÏÌÏÑ‚`m°™¾ï3ñ[ä+Y±óĨd`\œ@¾PÔñãÞ+˜”ëÄѵz–dºƒBʽ¢Ê}Zï/½U)µ¦ñÁJÓü¹tHÕêòíÓþ)OŨÁ†½;Þt	}—]€êB‰WÅsÅ”/¿t“s[
+'â¸+g¹u¦e¿~¸!nö
+(2â¤s×¹-”ñ4ºeW—¯ÀÂ~À8÷^öÂБù¸Èljf-	•|ë^³jŸqçùÃDºÂx´	18Ó¬ë¯}ÛòiÛ[ÅÃ_öòŽØš]ɤn˜Æ>@fÃÞEn‚Ø,h¤àò?>e[=æÎf}«…ÞCÞ÷"ÝiCBOÀÈécN¼ÕŒŽïšè"p4¼<O3éƒmNþC½
+Žy÷ÁØ腡ѵÑhFÕë.jြm3×RCÒégŸ§×ãë²á£÷mÜQUC]y¨âg¿hÔ<ÛÔ²°ýÄJ<Ç|tÿ*S‡ Oó23éý1Ö]|
+£H‡Â<þ`óA²[ôéhµ·25·Ê
+Á92ë÷ÌJ±™.ì~GMâ]°hwp~ö÷EQ±þz.•2§)â(Ê¢[hs것[²fÕlC¦ƒ'`–ßBºvÄÿ¬
+R½jælÙ¬H`Z@BÄ‹ƒR4f€2Mæêyÿ½Mé½ RØMnÄx}JYZçÊÇÝÙŸ€iR6’Ç—Ä{sJ5–ç©MäCŸæ[wiÿg¸ü‡¸#x³Z…ü¢S"è¹óµ
+Ù“/`Ã糘ã)Sdb¹Þà
+·üKv/#Ä|açmգ̣@J.óÌü‘¹$Z‚¡ nxúÿj.õ©4‘9Zu¿¡íÌ!ýX@*‰jÕ[-¦}þ¦ì’Ïqà}0㱩(íK³Ã#2¨%äÏ[ØÊ&©žÉKó}ŽÈ¨Dì®ä-Q8©³L©çñê\³y¢
+¡ËÁh†¨ôìe'Vkñ´K¨U¢7¡¾Shѳb—e`nÇ/k8OÀ¬"¬©?hõ5W†Ra.‚•z¹¦ÕÇŒå:zë5&RU%‚ÏÍ¢Õ|©Là9åÀEŸÓbŸÃƒÖ¥µÓÅ;&–z)²-t '.lÖnß o;½Ùzõí-eÓ¶œÈï0ël#yšbšo[7'*b	¬|‰ƒ]ÇgrXm»îôâ7À®rѬ¢È‰›Ç{b©»Ôoýây)l•¬¾•†.	¼–¬@’¡`qäR³vÓ‡m	/=ƒû>äY¬õövð†ë~Çml7”Ð*öè>	ŒŸÈ4rÊžAËÂùÆ3]ãèLË°ŸœêrÕwGZÃÆì*ÉYÑã”=F‹-Ç‹IÄu—ó-Ò]Sø‘»)¢8Ï<ñ©anuìÏ­]Á‘~(¢-0Hñ¸I'¬³nF¾Žœ©Žå”lœÊ	mbÆH+qXAI»à”BwÊÞŒb•^HœŸ}A¤å‹¥à¾«RiªŽÐRWnçÏjòêkv¦†ŒtÈoª­ävÌnÿ¿jµÄk!Rs"Œ€câŸo«S„ãu„ ±KOã›ù½Z™X
+¤ëÌ<”áK•¤rùà®™^²?ãÜ<œ AʼnáS_GNÚGüJ„6NeŠ¸1†c$›€¶,®ªÓpJ!µ€‡eoF1Ä/$NÁ°®RüŒËÜp_Ž§Bÿ´BPÖ«©ÿÃòÐ-Â,ŒÎˆRûfJ	þ«ÄR9òpWÂ/YΑÿn…NP®ìÊþ§„²M1M¹£•1ŠV>ÊÏ í½9,¸Ówzq•`W9æVQdÊÃí³1‚ÚÓj¹È…ðq²šJH€hH{tŠ€FÁd9eO®ëaòc— ÿtÎ&ëXÁNu9äµ­€-ïcvê¢æÿJ˜S°SvIé¶p°ÿÖÚø«×ïŸT
+œré£lïEÚOê«÷°GdT"vW„r˜¦`VVÚ‘4ïÔ”¥C)¾AÄ=ÒSäíFü
+=û”)¤œAéèQä>Ú&p’ü`¬uYÏ£Y3ä6¯SÏ0Ká!];bñV)Ð5s6âŽV$0- !„bËÏ)3@¨su²\~Í\Ÿ<×-Ì~Q§tÒ÷Ôˆâ„HÇ™0ïý×Lÿ„š§21ÒopˆÕ~«;™Ÿb>¾ý¸Ìo¯oõ€ຯ!©`dú¿H'^äFGùMt8^©—Îúϸ'¯ÐG²õîltÌÞ4jãjYXðb%í>:ñ	§ÍŒ©÷—úð–kŒ >ˆß	$ÎÍa0÷®Y£Ézú4Ô!eÐQe°-Îù™Ð¤šÔSö‹î%ç~Ò:$äuÎyøçš©ìTîCГo:Š°Å @u!ÊÙ`a?`õ/{ah
+ŽÆò\d653˜ŠÄ>û/׉5Á
+¶ýòï"]a<ZŠ–ç‡VûÙÀ{Q({DzÒüQ6Ï
+-Ó¨O1Ís½^v²ºÃ1ÜÏëŠD}¨QVѽÂ	r4vöó~àF~ÓSPcàúXOŸâ‡<B\ã€9
+¾ØøS²ãbXô›â¯Bàùä
+ÞÓ+U"øóüæq.ôq:jmËß.³ü¡=êdaiˆWçÀƒ«wmû!ˆ½üÕ¨ê‘a;.»Àú:M<wæâtŸšt–²ŒI@Ÿkû¨Îÿ‹zZ­pcqùŒUPZkʹdç‹%ŸºŽpæ–oùèd‘tîüL3‘SàCºô5"¶!øaòxüö!¨à‚KºÒ"r‘ãÇaî–¡xd.œ B×ά ŸwˆI^ÚÈ¥ó_²Ñì(ö½‡ówZI9jÈl LòÑ“B´¦·öœ$‰î¨«¢#UîÖÓ÷*A½ö똈lÑ[y#R˜ÉÓ¼iAðëNî ­·«ÒÏy‰:q_ÆzÂ×_D­¿²ƒJÅ&¬1÷ÂüeJwD£x²ò†P_˜¬«ðè›÷q0£oÑdH_~uoD†6sQf®­úN;Í›«½z_‘/Nj†þQYÙ­
+oe›ÿdùz£[Þ¿ȾüêÞˆlæ¢ÌAGéœv‡+Kgô¾?^œÔᢲ¯GÞÊ&+ãÈ<:ïô[N	
+	!å€gVÁµ‚Dª/mdÜ÷¡Yæv{€ÐÍ÷µÀ-ª’5d6&yæÇ!ZSÕ{N¶¡c=aåÉ¡
+"ØÑY…‚ŽÏ%ìV–Îõa~¼%µ"ß<YyCŽ(¡‰LVÛxtÃõ¶÷?p#?ç§(¿p},©ÁqÍ!.ÿ@’ˆ_l|§
+Yÿ1,zÃqÙ‹!‚pòrˆo盤|÷~:ÁM:KYFª Á±»óT‚gñË=-
+Ø8¿¶òF¤(-»eÒ‚2ýËœÁ]G8sK¹ƒòt5ÿ5¢,x1œøöŠ„ÝèFÚõ‚Å}xK»FPDáŠgè¾±õW¢ßê=}jâ0¾‘0ô™³¾4ˆGcy.2”—LEbó™åÊ”îˆ[ðyù ¾-EKýÍ+óâ`0+Ž†+mÆùŽjJܯš_…®bi§rø#~ˆ€óJ‡šRN®úŽt¦rm8I~0VÈ.?è.Áå˜f?¦Ý†:iõjDqB$íÂùðå&ñBMÝ–i¹8Dä?Û“ÂÁ1_ðÈ\Ý!ñZ!(kÛÚñïyh˜aFgD)ó3%ŠÛÉb)’y8¥a™¢gÆñ7Ì'(WveÝB%$@4$„³:E@#î2
+’¼©Wû¾y¿ÅPñ:gû,î'´’rÔØ@˜ù¿;„uQsñ%H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc54.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,55 @@
+Ä8kYEuŸ¾Á•6$Di¢+½‘â•‚霎ÿ{ðÅìw;Ðïý…8ë’Ò"ÀÀäÄ8kYEuŸ¾Á•6$Di¢+½‘â•‚霎ÿ{ðÅìw;Ðïý…8ë’Ò"ÀÀä•pÖ²Š>ê#aŸ
+7lHˆÒYVg?Ù7(Ï%ãöý—Åîv½ÃçpË:9¹D<ÕQ
+H½ëÏ!Ÿ¼ß^¢ZlÌ»û}Ú®
+;¢›<&¹
R)™Mm,’H '«kf]	"]17à±y	|ÉFÂ#,nØ
¹²¬Î~¯n2PƒJ,Ûñç3—Áìg›Ó.à‹troˆ'x'·óØÚ Lc¼Ù|â'ûî´IЇsïMû°DjÖŒ'$Šö{¶×·t.«Ø`iཪçfçS¢g˃B#e£¼:Y´Ø…këú©AvY+xLo:8¤
+R/šÚX49@NKÖ̺Dºbf¨’Æ]Vú}1Ì‚üÁIÑД̩l¥ó1Ç|êa	¾X¡
+·É¼¨«SÙîzZz†n0ÝòøŒ™F(XÜ­=oyEü0CÜd ”X«ÿÓf3ŸÅÎ+»\ÝèäÞ
N8ðNsª6å«Wçú'‡-SI›^Ûn<m6¡Iæ´òŠST„#£ßèþÄFÙåàõv/Ž?û<­©@˜Æe¯øÙ"NëÁu’½ æÃ<šë}ˆÔ±NH	.ñöq³sè\K­ÀÒÝgIÓ6ÌÓ¦?:•ÂÝÙ0F'E~÷QÖÔ‚8[R:x~ÿœ=-‹E·rÞ4ˆ£¡Î•+ÏOµk1ÒBY(=΋„FÊ[e<t²u­ÖËéO‚(ì²Vð˜Þtp4U¤^)©°hr=€œ–±…i$ˆiÄ.¥Ò^›3Uå¤9'C‰S¿iÂò.'ÔäqBˆuÄH)y_•÷kc§©#–© Ì$M9‘º¬é:ú6b…埒¿(½$5…OØWûb“øÉÂa°_seMK¦¯Áô*´ô"us`Ô¥Ùv„;3i/ÁÛm0”•,"×Í̾g‰ilƒ9ÇdÄœràu »=Úã4-ª4õÜ`§þù$í/ŒP°¥Gz4ÞòŠå`†¥È]65°Kã»Ì0f#—Vk¸§ÍÕ¡œpýœæfŸ• aòvš‘MU»0q^p·P¡¢tfd0JIß©†»´˜K	3ŠT¬Q¹–=ŸýÐGs8\wã\Il×(K®Óé&NZ¦’+2¼«ÜxÚl_’Ñuù	¦¨F[6£Íá<•Œ¯×Ý÷ì^~Á3jïCëÌœ¹ðÒ_­øe	÷ÅKj½SaŒ‡­Wn¶ž5OºÚìzq*ï6ê~Ê|ÁyßÁ×ëxGO€-‘ÊCí¯DœËŸê9g@&Ñ›x)Ëú
µ
+œ\ÿ<ñâ{æ͸–G¹§Î’»l…»Q/~$ÙhŽ¿ÜSnA—^©Î}â
l
+~Ë^x\ã„—oi¬:?•@6"Ev¤5°{k›{µ~t7™2§¯ `Œ0NŠüó¢±µp¶¤tðüã%zZŠsä¡h:4
[_7VƒžwÖ&b¹&„ºròkâ°Uÿ2ñKiņõÜ»[5ria1“Æ…ŒŸQ­9Ø{6‹á¢½ž¥ôæe§æ`²Pz6Œ‰¶ÊxèyêG.±‹ÏžPÅy¬ý-¡èàhª(U¼RO}Ðäz%1ÒH
Ò•vVBêRs
+ù}ãìÜcjØ)ä#ˆV'ì.éÄ=‚ãg˜o+¹ËiŸ’-aBö8£­5Oq'\
+W¹¼+fª×UrþN†¦cÒ™ù&\NµÕâ„
þê•=.R$ò¾7ó
+ÖÆSOF1O@ãZ2<àù45i”wõÛ°+â
+p²D·ZþÛ7Áƒõü‘eø-|%"QÊv2=šqA/¤…Hš0r?iEÏtélÄ2×#9cPgHjž­®ëÄ;í™$Â}¾(æÊš–QCŸõTuõ"AN¢[+zv0PÊ(iÏ‚óga›HíöNˆ‚¹Gw€ÏÄ–\'.
+…ø	þO¢}Lѽ5Sk5ÆDêæÀµW¯ìvfÒ ^Ÿ«Ú`57XD³ ‡…aÎÒØr"“È•%äÝê]kz©ÛhZIh÷ÔBÒ™ðHÚs«·cÙµh»ï³ÂŠÉBQµ‘ˆRÙ'`‚Ë!ëäóEÊXÒ¶vè{ù¨]W¨¥ÀSáïHÇ
+^ }WŽôh¡ù	>×ÀWºlj}–Ûk…`ÌF3¬ÖmS,‡·_4%àç%ÑaÆkŠ¶
Øs•àÄ¥v¸Ð,È["ƒFÆó®…öžvi ›@c 1ÏC+èkÇš%åçùå50Ì#7]Âùì)?šªk`â¼às _YèÌÈ`”’£Oku-–f	¨E¢o1z#罎æp¸îÛ¸ôÊ\‡æ™¶[¯`õÔ˜¤täyÊ*õ†JÓŸ`ŠVf×eåß~r€Ìÿ 4RxéÅxà’سP–A»ÏLœ&´Q9VdeK¥ð©Ø¾9¿êï QM*Œ¶l[‡ßx7C³§óÅ0¼üŸfVÞ‹;ϤºÓ"ç±Z¬`@!qéŽM8Þ\¬=þ¼œZ²Q|so·ðä¨ØøÆ‹LîWâžÂû‚ÔÆ$Ë…%oý¹¾G:,íÊó—–Ôg¦Â G®Üq!jži©ÅôâTÃlÉü‰øŸò£Ÿ³ÃÒûí}ŽšPðCx»L›©£°Ø*Ò…›$ÖÉ™LQ§äir’Ñû‡Ôn[Ú_õ½_WËðŽžZ?‰†ÇCˆ%‹#Ér΀L¿+ðR‹éwþ%=$¸ãxÿÙöчm1Ž'oS9kØk¢ö¶õD üy‚.í6§"gºö°kžbš.Â_H&{®Íh´¶ÌrÁS«ß	«F^üþH¯Ðc¥¦Ü‚3¼OúÙØü‹¼ð2¸Û3ÞÒEt~:7€lDŠ&þìUj8}öÖ+öwšúÆ#ö•:‡8)y¥¾u{1e…úi)r&QG›8!©µ±}Ö@»¼«w£ÆHøê_6Ñ56“üèn/dSC@À`œ	åûYw2àqUèýåÛJô´	æÕ_Ðth¶¾n¬!î±LÄoL8îVD=\5_»¡™pÍ};ËÌÄîpY^(˜®¯w„o!fóCšVG³<“ŒÃqŒñiäùÖÙ}ªãdÿ–Ò—÷¥k¶jä$ÒÂb;‘#¢Gr­ölßYg!WõÑÊSÑÀ­â&’œbß|Ú>“G¡5³ÌÉ«ûâÆG@vÒ
™úXR‚qAWÛ0¤&Œ<Š…×ÍM$y ôl*q‰ðÍòÉŽ\ƒ!2 —òEçZ_ÍÝ8ÐIPªe¤žú½Õô:Jbþ.¹¹7½¦ÌtO)5pÏHõÆgÿª©¨œ£¦ugÇó³Ã–Æ"C ŒSFŸN@PÌÑWð,y—yÓ쬄ɤæï,úÛÅ¥ÆÔ­RÕF
¬NÅ\Ï•zÛ>Î-ÞVo‹Ò#9Z„ñp[Gj$ž&$â(ª¼¢ý£š³®×ÿÐP“âÄðþûœª¬PÞÛ|æ—ÐÁµÝUƒüéóÖ§G¼mÉ•Hä™8äN¸®oeVÌI³ªäáœQƹ/ïL¸8œw·ÙáÉ7z\=¤Hùanû±>‘¦žŒbž€Š¾,Å6 I¹Ö
káê	':¯RݾÚ	õ£0‰”êù²Ç¿_ÑÓs)Ž“~,Z#‚C„^‹|^dÛ´dxÝïh&jÒ5î÷«}VÙàyˆs´á«nŸ0÷å?ÊíZøJ>D¢‰ìdz)(â‚^U²\„ªwSõlôëü>Kr}BR5â²>ì‹ÿ¬•üD:(Y=”Mti\‘»úÀÃ…@ñ)`ä~ÒŠƒèÏØ•.d³FrÆ ÎÔ.!GAË•vÇ/H™úaPщ)1¢† #÷¨ê÷DÓ–½;ÍÿVÝž»R—yÐí_–6»£S¨W’ž‰¼óêKuZ€>ûÚ¿ò7¯ô7 ‚œY¶Vôì` ‰PÒƒûÎÂ+Çñœ
8oŽîƒ•1þ¸N\íážYú˜¿™gj¦Öj‘Fšaݱó?7‘׈Œ>ߊ«‰»z`šïŒº{gr“ˆjJ}M°c,=ýa…-KEª¡Èªu ˆÉÑw®CÅ*ì̹@¼#K©Àjn°ˆ{@¹­6äD;7JէɺÖôO«Ð´’ÐóäŽñºÄ2±6Z”-ɲՊÀbAÓ!Ž™Õ‘+²RMÙGâL¶ç¥("ñQËf‰³Œµ„¹/ý©æKsƯwÐkÃ{™<	„¢w
+?
¤¯NÀ‹BËÕûŠ‰2°¹qìÍöïMº®M&q‚lv¸Üyõ²Ã¤âæO‡;´‚@âˆ+ä8‘¤±»éNA'¢ÀZfÏ5šñ_$ͽ°ÂW¦ßÓ¼
+]ú®õÐ_ï|³"®iØÔ ú1«ÖÀ…Œf>E±Ú¦Xs¾hJÝÓJ¿“›ž´šÕŒy‹ËXñ;7Ñ”6M9Á"›À;…}1H®ñÎÐ&ÒÃiû]îªL_ž³álJŠÚÍŠ[‘Ö	q­æ7Ý•Wì™m½X¶DŒ‘û™Añ!ìÒ]+€Æ@bƒ†VÍÖ“)J,×Óï×j—îb(_²“¨cTRç[™äo¦—œUþm¯ç-&ÛEŬ+Si«Hîx4ØÕÔñŽ`…Fnº™ïÅR~)IÖÀÙeÝæ]¾²Í…À59[ž"ÖêZ1$ÌMŠYÞbôFÓgÑàmÁ«m¤ƒ~ãÜð°ÍÀèLÝUïA™ÿ•\ƒoU·-²¬Ý!ÁáÏþ:±‰1Ÿq~8z“­Ƶ­ìõ‰6¸Ñ/q¶CÀ÷µ-U4èÕò‰T÷,”»#À	¬Ì³Ê×£üä…ã6]8h¤ðÏ—ðÝ1ÓQVÎZî¡wFËbƒ	]¦Ãhc¶b®}'­Ëö×<vÉ;ÔÇ4òxfó@ªº†0ȉ099­{ 1‚kƒ˜%Lu¢r¬ÈÊ0–WýO­arcÉÃ@$¢šTqض£ðn
+†{Sû—`eå#Ìý«CËhÇtö›p©çšìŽY4|@Þ«ƒçáÝ*ܪ©e/õ´ÛZd˜ ÷C¸æ²GÄâ=Ä(¬¡vƒUi»DÓ´EÀ€BâÏšp¡¸Ezáe%´y¢øæÞsýÕM­í‘˜Á®Ù!™ë™h§3ÚMJ$úz¿Ðö¤‹m*'á§ZÐøõåù«¿†Ù#ÝŸŠîB3sÜ<YìYýµ›H‹JÞçoaŽtXlj$û31µÎQ™@
+&ŽA¥âBÔ!ÒO—õÙ¨›Øåí#ù[#{ʳ£zÎ?AY®d…‰B|ƒà†ÐŽ ³,‰Ó©–¨…¾Þ‡×Í¥tG$-£3’wÝÏãþE㟛¹ëÇú) ý†ðk˜+O[}­T¹+H±/'˜¢SÕÒä<9*6>¿ëµÜ¶©¾÷g¾®_¿Ó¬£D6Õb81n“¾.42߆響õ¾Ê¥f³©“](ïÑKúÙÃ:Óø¨Nd‹~ðy~J‹ý!:´~“†
JFä˜cVý¤Ï4îá(JzHmÛðã¯ñ¿ÚbNÞ¦rÖ­.ÖYOû9JcñazŽ-GAžp« è¿³ÞÇûFžM }¦A…3óØÊoü'ç9¥Ã4ÍPª0½ñq÷ˆ>@å2ò\<*ÇlSDÎiñ}<Ö!Ä)\™¾Lö&A‡Ð=uq…䟦6K£KŒÚ÷IœÑ{_­LØW©ã(:æå¹ø÷Ÿ©TÈX§WfÅ`‰õÊ6¼Ò?ÀðInù
t‹¤‹h¼åáC½ÆWQ¥fežé8¯4­(åeýdm«*f¡¹Šèütn؈	LáŪÔpúñ±VñîxãÙûø³Èïdmð¨;­Q
¹ãéðp„7¤m^Âz-ÿ˜&gôÉÙ.·F¢Ø1¶H1
+)é‘Fñ7<,t0:pRòWaêöbÊéÒRäL¢Ž+pBOwú±€keKî[‘íɾl¿jl;íï©-¨r#YëŽû{ÇÄs%ƒTIw†ï0ÇfXK¥{½4‡ºù]÷Pµ¤Þ©åœ¬¸t¬ßåÍÜ^Ȧ†€
+À%×ë²þîdÝâªÍç׫”õu,Ñ·¾½èÐ04q8a>ÜE6BÁ˜•Þ˜*!Ëä5‘ã™õ´ BÝ–º‡Æö_;ËB)€é¢.ÌNxë<G¡×œ»ä®+Ð]X’ÀXÎpÁ¬ˆz,¸j¾k_/à‡úv<=‹…•Á>಼:P-2AC*îÞBÌû†)¬Ž{x;›âÿ´Ç”ã#i§!Õž*u±Þ2UŸ 8ÇÜu0¨ÓÌ£Í:³ïíù©y{¬”eéªÅœüÅÒÕ<ﱯúIÛÈã1>¹3"óWÖq,ÔÕH¹™Äv?.>
+FYŽäGñØ£²<ÎB0®÷¿‰¦¿Ó„èêå<Dv"45,·>tZ‘EÓª,П£ 5õ=©K竆ãÆLO•%_¢|ÕŽ¸yGÙL9%Ä£ø©|;(Ž_j{…'KëÙ‘Ž€ì¹/(鰤₮«`ULx	³"‡š"HƒßtRZ`ÛÖg½>#iN?ì-özßsøP†¡#ËTÜánh•{¨‚tîe›Å‘ â¬ò]õ>,ØT
+âý‡ù¸þBd]3ùŠÓ´¾0‡§p½’ IÊU!ég·õt”Äá\o=4on6[ÍUuK\ÎøŒl¹%ü—´0ÿõ[ÑlÇ]"¾ŒXMW£¥½nñš2ÍŸ‰V3~¯:*¯ŠgQ…èžRjà=ƒ÷‘ÎãI0,OM%[QêΓû{›1‘D†@¦Œ$#œ*€ …¿®ýXò3ò»£W½ƒÇu•¢=Qòš[ÕmtEíf˜ÊW[ï’¿š»ý°À¥`SLÅ}%½T³oŠ:242_ÅEUÑ(ÃX ,é«—W‘µG¤·ŒEœ—¸ƒ7ô2«|Z¡¬Þ¹Fr´™ÿඎÔH!LHÙC-ä”7¶Çžíì aµñ.œ1‹C~:—Þh¼ ƒúªd¯2|‚–I-ý$\öˆ&Rˆ=PIeYç[){A³ã½ ;Ù=•ýáë%IE ¡«øÑ3½Ÿw§6ªåÏû±SŽe4Ú7Õ/pÕ”O]2¾	\äÿræ¶5
ýyü_ÊV´O§5#¿M½¶`Wó©÷’ô+^®]ßÇå²(nèœm(AÞʬ…’{IÕß%"<¢‘o^Ømp%îs¯*4ßnô¸zUïÂÜë(| ?Q!Ä!Xk*‡³ð
ňÐÔ°æøÍu~	k’°lgF¶ºÔóôž1»–"«?-!n”a²ísáÚáù	aX—l@’o±ÖßÉNt*C6¤§a©÷[`5Éïy“c¾¿»æR;üX´F†¼ø¼ÈÍg`ü5.¤Ú‡xPn*”#6gK‡uO‰“»Âc¦½SÌÝ‚îÆy`_[‹T7|æ|,«uÈð§ÃÐLÔ¹jÁóKú¬¯(Ýò
æußKÜ#,`6ó×~‰Ç´í”|ˆYÅÈôRPÙ¼ªosð›þ†Ï9K«ÄøÞ̈ëAÙ°ws=Þ^7Åü¸ø(y·ãGX¶ò@ðÀ‚ûÆ¢ÆN>y¸&Iî¦÷ØõËå|–ä'ú„¤jÙy|ÅãE7å4ˆtP²(z
+5šèÒ¸?2k雀›ú€MLñÓhf4Îîé Àc“&×HäéG
+Ù¹îËó„•±Ä
1åuW€Ô/ù;¿[ž[›.=RÀÕü¹	̓­7\È{Œ ä‘]=µ\BŽ‚‹87ì“^/é ¿RbY@FóMÉóˆê;j«Œ¹¦|„sB¨<Éþ_ÈIFºà;WÉÀšk¶<èö›“ÞùpPñŠj‰Dƒ’d3J×3l»1"gv‡ã8¬§!k¤3ò½Ç:¾1lk[¦M®9!eûÉ–ê´|ë"©c(ùnCõn]7}>3˜–§Ý¢*þ’@›ì‡/7ŽþÙ²¤2·*ð•pÍ“B~º+ ®D뮹%²q¬õÅÀ] ¹2ë™V=“ÿ%2pÞÁ:7bámœ¸(.Ç$ß!²é-c/ÎÔQ±Ô?Ý#Šõ°ÚµÂ±a¼§&ÏÅðô.n#ø§òÊè]´È¨ŸT_Ë"¤Š0ñýìV¯ÛŒ)§û*~n?³
|£	KkôÀ)ÃiöÎä;
Ô”úš}ÆXzç86Â"Z–ŠI_IêH/úÌG:ä_áÐþ¶J‡M"­@IQ/!ëâ'xµ+ïì?™‘±cªųúÉ
+ÈD¨‰X“‰@
¿'îA†—TÅ…o€eF–OÔÜ}
ö€&.™<oGlÕ8ˆvn”·Si±õžK½u9½û„·Ô~«^óê€dSbÒ&?ÿaì¤:pƒ²d¸%ý‹ð<¾{JÖ·‚¬gLi}r'}Õÿi•dl´5Zy·	Ä‚»B/·?V:=y¤š(¯ŽÙ˜qÓWPDÿ¢‹Ì' { .ÇÌ!`+‹›Šr"?*Zôf©ÓÍ"½¿¦³r[áØj5ïJ¸­ÁÇI–^õ-à|àÊwo^ç=OÑ–æ‘Cî½Ö›ö/xYî~U>Cœ2„‹·ë	d}oâŇñÚiAšL³We¢":N('”H{‹òߟS¯’»{–jóÉ°Hcæ·gÀÐÙà™øW	Ø#áZn_Z¨âØìm¥ò÷y›UÙÑž$v.u<€Ù
VÕp?UkÏœ‚NY´Ìƒj)ÿ¾H‡g}™&'³µ(ÐmI¸ž^LçºWMÔÈ­bLB<ì±^€?Y¢.¦d#~ï'Ââ,š¥Ç`cÇ}®'Q£›=;(eºéA÷½¾Ã$ø{'DAÒ­µ@ébK±.Ì|Š©Q°&æaД§»”cj!iÈÂx$m·ÛÕ¿âÔ4Óù×aEê!¦ÔŒÆD)Îâ0Aëžûr÷¬e‚,i[;t³òT ¥T‡;+!u)·ò‹°ÿvn¿5lšrŸD+vúbAÿ½L¹›ÒëºÁI˜¾!{ßØ”	©‡	¶ÿ-pò‡”ºJµôãX›q8Y"Õ-ã•î‹Ïô~Ƽ|˜>œ¦e;M
+¶É®™ÉR™?±â4GÑn§7®Å/Úg°qˆ6?ë/<‚.ÿBŹºV‘€Ä ¬‡±;R”X³»Ã³Ô]9‰y»qX¤ñö«ÎºìCônÓ£‹”9	º¾–ÇcÌÎFÁ¦Ø’l³ËþQ‰ÐOÜzs¼Ýs03ÁÄP¾y;Mƨ¤Ó¶/8Õ(ÞQ:32%ªáÚCÓZL«Š—E*V¦ÒKÁðh­·.µÿ.È5ù¯	ûfNÒxi¡Ø€|¼Šõì«5Ч¾FÍØ¥7[O”©]mv=¶ùu?e>î²áîåÀŒÜi/פüR’±¯Ê§Ñºay‡jr¶!D±É´bH…$š	²¡ÄõŒ»Î¿ÝÚŸKÚ´·0jÜâ;B“—º™îã¸JÄåèf_½Êº6Ï’†Èí2bN9p´PÓmÿ˜UôUü
+Û¥ý}‡Í˜§ªÃ‚/ã7¸ÞªsZyE§*BŸßƒátb#âüpô;™G‘wGÅ‘Äa‚àâ#¬?õ¦kjA£)<?ñN˜Ë¬Õ9o€
DßÞgÄ›é©Ô»‡–i‡!÷lm&¿^â>q†ówZªhÍ·ù¨óX"5kFE…{‰³[åÕ:Ûl0ºpÐUýƒ3ý§3	TIc +}€°ƒ–fA~îªæ
+h	JfÚ6Ü÷È–í>u¾Š_,ÞÕê^TÛ§âw=„-=Cb»¢¬´Á_Ä"ºQ›ÐÆqÄA
+úNG‹ñ³xìvµ“hùðÌû€Ii``r¦$ÐûéžÁ^á/‰€Q-6fÓó°mW“QÃÒÉ€Ȉ)ŒšÂ¨¸
I$Û»3 Š –rGö]bÖ-J˜êYäE‰`1®çžGÂäÆ›€HY)¨
+â­q&[ýÜö¦ë3ÀÊ×F…¶AÎ6;\Én²ôYïRqs©Í	“…ZA qD›rÆRÖÓú'®Q`-3é”ÎMö¡èÈÐXÈaçK†‹Ð“èñ+àOÓ)Ųhø€¡KÓߧT¥IOÊ^÷u«´È-@ó†mÑ
+yŽ•Ùz•P#M¾à‰Ö÷„‘•ÆåDFáEÛÊÓ=0MùF]³½9ÇD5%°¨X¿ðƒ¾†Ì˜«¬UÞdU´E_ìªÒkˆ»þuŠ„Ùƒ)à_mŠôßÊJuòYíÑ¡æç·šGÇ?-ŸA¯B/Ë>/2Y.‡BUµ§ô6zû~«9À°!)”qYvËñVÄ~
"¢
+ŒJ¨:º.Æ‚Ó}`ïÌ ïÖÐSf:©š”8Hé$ôc½ñUÚTNßS´½í÷×ïKc¯F§#	Á'„ (fæ¥x²Å²çU^Qðß‹M×Wåñh(ÇqHbxóNUV(oã>sÅhîÔàƒ¤Ï~ú÷kÝ­^
¸êÄ$rÂrw+".”¡ÓÞÂ8è°“Hëfbw8¢/€L‚WÙ„µB¹ž3÷¯M+­×ÇFï¶FöØqIÉN1á>mÇ
+­Þ”×fêÀÛóqc­ ;iˆÂ
+},)A¶®Î¥ãRÈFEÌå†è¨†‰{[ô"~‚²AÈ„øݽ]{X»O1Ma¡$³‡WèŽ4HZ[f9ÛáŠÛ#M}cŸ{Ä€Íš²Ü_´³–¼Ì}ºš9¦­ÃžÚÔÖ°k Ó^Ûµßc$|u¡æ”Ç+oË“éR]çýÖ-V0 ž¶úG¨o.V^N-Y¦>·¹ÕxrTl|cË&w¥qOaóÎaAïióø°GM(x¯<Ó&ÃÚßXliÌÃkêÂÀ&¦ÝÎrº9I„ƒæóÍj7£m¡ôС¥¾c»E[ˆl·ÄpbÜ;a\hd£Ï#c÷a‰WÌ{O;ºPà ¿–鯛t»íMœÈüýòü”zeƒ.ÍsÂ[ΣÙ0ôjLR
:r²eôC%çÁ0E+3å¼üá?9@fñƒP)<úì<pçBtuü";”ŒÕ:-ƬçUƒhÁßP”ôÚ«ýÛCÿc&©Äœ¡Q>ä±G\±²Ïá:)-0ãk½…Пƒº'‘v˜{=á·ƒ|(CÞŸë*nþ74ijÉTA:w¼ÃìÆq@BqVžër”ÆÿÂôZŽ‚!àK]Íc{¡“ëŒ!š@úQ‚f'<û­‰ÞåNÓrW›h‡ ,I`,gZíJÿŸºÝžäO‰´Öo¤ÁPín´Tçf߉è×ùøòÚ²
+³VJ¼†úU‚ìN~ìƒ<ÿâó
|€×dù2¸xT“ئˆÒÿúx±8B•R¸/a=˜ñL‚½zêâÕ#Ql–[$–øùÚ˜T9Ÿ¢ûGó³íb·œÏ*ªµCùí3,«	ܳÐÍ]ò õ(ÔR‡oÚüȱƒNV\:Vá©ó’%¿ö¾=G˜­®O8ÛPtÑ×oíó#O¨°S®Ì—À÷‰le¹~ý’Üïè(UÐmõªN泡HØ&l¥ÚÿsüÒ|õÁÚ*d,Ý¥3ì0Êôe^i‘`xª7òˆ:
+ËRË4e×ß=†g‘®¢W2ÌÊ!>ÏpChGP×ÊçÈÚKTÌ_o	ÍåèÜ:­
˜ß—Iµàéÿ¬ÿÁ¡ÑçVß"ä1–7Ç_‹áCúÁÑô_eÜ3×ÚÇ ùæ«}âïç|T'2Ë?x²?%ðÛ¯ë4í:{ÃÈ8ÚýMvG¢> oÛÏýþànUÚ¼™ôZã-2LÎõ¯\sŒY­bqb4Ý—€m¨%}	=Ñh{R˸þÝ-h|ôüòÛÑCâŸàÁEwÀ!
+—·n‹¢vŽ¢ðRÏ?ŒÿnxXè`t&à¤ù®ÂÉñĉ.Ϲ¤Õ˜YVà„žîþéÖÊ–Á¶?=ÇaØcÔØv–Éç¦+g-wÞµ#ë1ÏŠ† Sï4¿É[1WŒ°Øë{å;ê“jíy<3÷ U]CdÊ’ÇÃOZMäF²Ëë,ö“•æJ¨’îÃ`“Ì°–$Wöghiïºó wU&¡O×þ6%EmèE£Åw1¡YÇT¿*)ý£Âr
+¹S€Å‚N¤¸Ùý˜ã¬ìV„›§ºÛ$w<lä…jö…Gׇ¥¼Q'J$³ËyáÁȧÙI‡Ó³K5÷êX$¿sagͽ`hâpÂ|¥Šl„Ÿþ-7¡-T×Ôh¸ª\O/&ý]¥¨jŒdØ1&É!vÖ/@‘¢ÎQS2Ÿ?ùaqMÜí0¿í°B‹Õj?Û/÷u@2„§1i‘ñ¾v‹
+„R8ÏY2\…œðËxŽ_³%kÕAV½&º°9°†ífž0‚›ËÃE9‘-z3ÚçèÐ	ÑS×9£þl5È”ù%\ØîíªK/ô˜p>ƒpeàŸE
ôXmÔaÖ¾^Ýéìxz7Ÿ|Ýyet Zd‚†TÁ*¡„…ëREöðv
++Ù
+ã$™}f­r¡þh[H%ͨØ ª¦™žHûq<Ô›ùv‘ÂÆÖ¿Uì×}êd"TÊ,ÇÊu“5ÛFÒS>B·!Tê¡dª#]p“¥ê`M»…[‡t{ÃÇïOò8(öE5Ê"ÏI2—%å—6±•
°—LKÝ	àQI… ÃvÍ™•GâYRÕx‹Ä8ÉèÇÀ
!?]›W"ûWÒ¹·xÃCé’«Ûb|ofDû®±âXµ·o/•ì~\|Œ²ÕŽÿ­,[y x„`AócQc'}±@¨&öç43gwúP`¿ÇÉå$±rú­âÒwë÷BÄÖbˆ–ü´„¥@j™ò“Ñ£O£Ã,»ÍÉ×xˆìDhjX
+s|è´?Š»IX6½#[]j÷zO–ÓKÛ‘˜ž7J¾Yø·þmþòè½0~”ŒÈ
R…maÍ<(7JŸ‚½«Í´©ÊÇÓa¿SЧfàAwc²0¡£Ë*•>s>Ž¯˜rJ•[íOøvP¾ÔöN–˯?Åo4^PÏ}U2Ù>AKÀª˜
+ð.{D)DJ© _Š.rñ9s[”ˆð²~¡e+Z©Ý”ŸÑ†¨Ð[0¥÷ÚõIz›/W‹ áí€üY„7„t£è¤´À«±Î.g|F6Òœ~ÅZñô£æ6í _F,‹¨¥ßÜÐ7öMèÁÊ+—?ÙÙEߥÐÏí…´ÄQ¦yM£ä¸:¬ø3Le¥£†ùIÑMÓðX`Ü0§&ì°œÐ*×¹E¡ùº÷|X­¨<Ùçïmá,6„Ⱥfï	»ua`Sàg9]’‰ªBÏÎs÷è5•ß¸ÞzhÞÜ=¼Ïè·a£gßâz5&)ˆŽ9Y¼„z‹¯œý—ü^~þ‘’ 3öÏ(
š}v8l¶‡ªê'–þ¸íØoJå3u`ã÷¶¿Ø“ºDa°š®[WgÜÿ)d‡#¬füCtTC	¨°¿Á³b‰‹€@èMYn¡Z×K^f°]M’‡SØïOmjkX»ç/ãÔá¿È>´ÞƒsJƒí΢Í!¤ÔÝz=ó?Û’`XžšJ¶¢É;ëö+b?ˆ€
+QHF%T]cAç°0ùfùk
+¤/¦xá˨å¥üö4í¶$1<±÷'¤+¹ÿ·ì4wjpÏRé?}õ»àØ/ˆ\ub9a9[®g“.ê7Yz¢ù)¶·ÚèŠÇÌ-‰®¶"Ã9c)kç}WÀ¦0˜—úJg¨{Þ	tdh,d¾Ÿ¨_pÊkõBÆÄcü"#þ¬ãeç¨ò# ×Ð’í"”œXT,ÑHxÏ_CfLÛV¤o2¤Z—Š*ª¿P›°@XÏK3®?wŽUs4Š%3mnõdKø´_E¡oŒäu/*ãÝqµB˜¯SŒhóúOî/þ™Ê@¦˜3ç÷X¸¥ŒÇ¦ï‡iê@dDšFMaT\ˆªÀãÓ—PE†PK†ZÕ5nq“!ÇÅ]Âwÿ\%b†üt3¡Ðe]éIÈCdø1'’8Z(çH¸ñ
L¤
zÆ€b¾ApqŸÀV‘ôS»5®ßš€‘ö'HLëVä’¹
@ˆ"áÈo½bÃúÚjÓÍKºÍž ’ʲӶ,Rö‚{Ûg]v¯z7çßËJ’Š]_Kí¿fg#îSlI6׃ë¦Êh©n=·^à·d”òÙŠó3'i<ºÞlÈ@‹>^EôvÛ”hÈÝ_#èlÜ•£©JÚ ¸;[„òƒ´‘¼wYþwü5žºda<¸ÕãäÑqjçò徉¬užSjFc"šgqÀ®ûOó9õV¼Aº£“:×y*PÜ*Íñ˜‚8y
ÍJ]%Ôzÿ,öŒ¢䘱ÿÄwËéz?c^>LNΆS¼“‚HŽ¨[êWÂê)%ÚP‚¡‰E9ö’·£JDxY?Þ¼›-ÚàJÁæCTh£Üõmôª=Ù¥ËPþø@~¢B
+•B:áÜhéøÌZb¦HS²¨ßr\V|—&¼ÜßCòªÈæ¨çx,0nÝvXNhåÒ¬€‚
‹‚Þ°Ö T{ý—
½µ}(0Ñí‡êüÖ9}ØÎŒqiµûõ!bk1DK~ZBÜ 5ÂyÇæß©ßïtÐ?JFdˆ…)̸¾è•„%ÁAƒÐÛèZÚeí美ѧhÝ3p®µ¿YÞßëÄ·°3Ø€9Þ4±£$œèT†lUSÂO$ó¶ÀjÃò;ÆackѤvå°uŒ2*eíeÖĈXÅ&«àŠp¦„±ªÌïÎ;èÂÄ­±q¢)‚ä„<‰Ëbêtí‹`ˆž‘ Ã¥ó¥i‡ÎÀåj
+4\U.©™ð ÜT5F2lΖêž;k™ ÆQg¦…§Á‘òÀ¾¶¨nøÑøXCÈøŽ3OAÃë﬒†Æ„˜=—mýÈt†hŠæ§å’ß6”dJòœÉ.lwøU«™zL8Ï8¼KêýS›½˜µoÔŸû–éECP§ùÑ꣖¥FXÀlû³ü“uÇ5ø
²—õ¤ ¯2eIìµ–
+Þ¢í*Ñšðßa9Ò§@ìA'R±\âðL‡ÿVv+BÃÝ]ãµ
6rÌ5{Ì­Þæý+áƒr–K•í¡…
Ë‚þ¯}îæz¡¼n—åmíP
+òsÛŽ°qù€ý>*ë‘<Y‘œàÅ@¸Tœ	°Šæ4³)ë\„Àà˜4>z~yãæ¯qÁp`žÅÕ7ËÉQ;GQx|òmL*’ÁQó­÷‹×ø1ÕNéUÔ¯òø—ÛŠn×h
è yPôj)͹m~dÖÏ'+.+þ¸ôU's×Þ$l6ŽÜmñ
+€·~i>ôîm2àÜ—vez¼ƒ/ºÆ0<U•yDë)ëéþš˜ÿ»ÐÌhÁÏ]Æ;L³þÕÏŽ>¯oÁ‹û7•b×ê*®µ^ïvc¶ !¶+-ø%ñÁ]àÎOr©„ÊZk¹‚Rî(ø7Z*ý3áÊt€åò|ymY×+%^C}¤Av'?vÏ\z¤·åo6‡Gn¸ö@Õ?ºzw¸„pnÅ;¼=^Ï™]c¤Ä²"€Œûšû
˜|œöî pg©9ÚBe-»ÒA)wŽ|•-ð—þe:@üy>²¸¢Œå›œ/¯°R®;‘;éÉvÔKoQøæ„Mxá¾’ŒiÝ v®)Ö.qx&Íñ+;›!ïà ÿ	Ôˆ9Èf”³fØ
pì \*NŠXEHsךÉû.B`±pL=?²ÿsÙ¶î8wVÔ0OŒì䕉ëꦓ­¦<kbD,ÎìÛpE8SBÖUfùg“tabØÖ¶QšArBÊë1Éu:øË0DOÆPï܆÷ܺ¯d|G—©®ïûùVICcBLŸÉðd:C4EsÝüIá±J2%yNê6µ|¤ÛÂ=&é^þn4ú|f-1S$§YTá9.€+>Å^ná¯yUdsTý<7à‡;,'4„üiV@AˆËAo:h‘%#2DÌšf\_t
+ÄBœî®Ïhãt-m¼øý_GæÝ4à—8WÔÑ¢oáû„bÕ‹2JyâE÷—º]o6d Ë/¬z;ãJ4dà¡Ÿt6nÄßÚ%mP\“H£ByÏZÆ^µ¢µ~öLA‰²ˆè% œj=ñï[FQ†rLÖñbµëú=‘¿/&'gC§^ÇA$GTŒ£u¥auš§F	4÷}©w™Âe SLƒ—ýõ,\ÜFíSù‰Íºu 2"M#¨¾*.‹DU	`ÿçÅ(¬C(«c@1_®8¶Á`+Æz§Ó”WáM@Æ{$&û+rIÒˆ DÉþd¹Ð1ï}m5çè«]èOR™S<þëTüÜ~{
+ø[–ÖõR›
+ÒñÕvµ58é)ú‘°ôÓpl™D.´1	’¾’ÉÁT¡8e»ô!cb¿~ŸÎVÿ¼ýHTyŸPåhIøJNÈ,*æ‹$<顯3&ã+R¹R-^é…Žtվ߽áq=”šDG€’¢^B=ËÙNðwVÃÅ~/?ÆI—{éˆM°;TXÑî×1ÊË@ t¨¢7Þ-å«/3X ¨Iͧlù©¸5»,Óý™ÿjþÑd	ZoÏ·%Ïø€cNÁ‚3¨—ÞÊŒ1ž'µ¥úñL\/>xÞŽØ·p
8ìÜ5s¦Ò÷!–gêrgëD;„d¬VÕˆü¨u÷…žkˆÎHÆ¢öÕq£GµÔ›5ÚŽ#;9beó´§íl§sµüK¼ûÉÈ*¦Ä¹L~ãÂÅ(*UtàyÈm.Jçýxaö”±sEΘÒúäNú>ÑKÞ¥£ŽwÉÿàý%ÜÈTÊ¿×`	‡÷Ã’Uº"uC±i4KòX\Jð:ãP:Ú·ãÒ7ÈþØuj´òs<'•k„^s~¬tzòU)PC¯-â»® ˆãY…N@ö
+@\sÛ¹ná­êÔuùæ$8xN72Ö¼æüEèôùªR †CZÙkA]
Û²œ<€ñ€¸"“…BÀ2V+	äD~T´õÌO»‡Dg$cQ{ä¶ß­ÔjÔmGŸ“’1¼÷ZÝø6݉æ«oÜßGɵêïÑHpðœnd±*eÑå0ŠÍõïI¤]†´¯Ö‚º«y,.%xÿ(mî*Þ¼Ózž¿1Ñ?†Ág±+ñ^ð$*²Á(ü4ª|†%'dsËÈúÞÙ—ÿ›)Ò‚)˜*,æwå–eë :TQ•o˜üÛ™—,PTªèÝ6òÚ\”ÓçðÂñ5æ2Š-¹éÕœé|{&®ÊYDtœPN5öù£#¦C9&kö1Ôû}ÆÑ™ν¯Ý/í®­*Fߴܾ´M¿ –¡W[î0›c=ÝçJ¥þ¨ ‰c³Àó›9ªiD"ê†2Òh–ù°¸”ýtÛ t©Ù2>­ÅÚWùóò+ª¯¿!&Hì\êx2¯¬·à~ªþÖƒ%œ²'u…Ô>RãaÎú/4ÆœŸ"fM3.¡:‰b!NwWé4ÿ:˜¸^|ð¡­sàpÅ¥jæQ¹þóB1ÎÉäÎËL>N{wP8½Ú’m!¼˜Ói®šµ
+G>Ę„xż ~²Y\QÈFüÃN™ÙX)W“ÀÆ“úˆ8v.'ÈE,¬$·
åMêó!0Ö8&
‘Yñ·â[Žwµ+j©FvrÄÊûuSÇØS
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc56.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,57 @@
+4;hÕÆÃø£c%8pz@¨Žr©Q×¢ÍBÌ*b6Ûñ®tÖ•"—ISÙÉcoȃª9p¦´ot4;hÕÆÃø£c%8pz@¨Žr©Q×¢ÍBÌ*b6Ûñ®tÖ•"—ISÙÉcoȃª9p¦´othvз‘›í[6ÆJpàô€MäO¢³Y‡„…TÄl«ÿA0è±,7D3’¦¯ÆÞIràQuÞè\M¸bWXžø-¥oHŽÀå–æódûJÆI~¦Zpï(œg:¢f¤ÛõvF¥±E˜ãK÷Á±œÐì½s?+>Ƕl‘”àÝõšÕžY{²¨•ØKã‚`ÍXnˆf9QC‘¡06’äÝ¢ê¡Íä×Õ¦ùè¿?wò±Ø­]2Œ§7¬ÞWÛ‚÷î,x¹©NûªñpšÊòÎ<ϵ8Ý­^ι¸šmÄ®°!*íZWÞ=×1ÑûÈ딑’üQ´àÃP%ÎtYÌU«÷ìŒW(Š-Û–=óŸ%Œ¡hs ÒNA4û¨M{ÝCxªIYÓ^Ö3‚;ímHQbÌîÂâ¤5E4$B®q¯MU+Q½Ågæ~V|“ qØ?5ݧ÷:)·!²öy&*.M7­–ÛÀ‡þ°Ü
Ìr¢†?_`l9Õ§YÉ_‡‰þ3¸•ýk$ÒÃ\å×zŠÅˆã!ÛëhâgU›M*·Øó(¦I/[;ñ_Ï\0lÆï“ì×ÿ}0óÕ³·QïÍc~(*îù­GºdSnE ¡®«óÁ=$XðoOœëIÿà)‰ùxƒwp§G¼oáˆß„)â†,‰õšZ•7yúÌ‹!ÇA’‚lìg3‘÷æÕö虊~kh©Wð@šîtKôÚž7®îm)Ú•A}BT0Ç´®¡=z'³b¿ëË5?9å¢uÝ8› Jè²…ªKóÅ®þP	Z«1zû#þJY²@‡¾Ã¬4d¯Í„
+xgˆºZiø}õÏÀCÉ5¸>Wþ'§= ÌÍ‘\ÁÙ
+]—‘>_
+"Ðæ]¹8œ‚hëMšö§þ†ðI>’²»¼±fvÇÚ¢0Ä…Á™ÙUjŠh H„AâCšªV ¢1db÷%ÜA<?™ÎuêŒçV‰ôYé0ùp›/­6tˆÖæÒã³CODLÂHzêâOÖg—ÎÑü¬ø;@â­~j§SótRsByñòLT\šnG1«2á}¥…äY~¾ÀØr·S²¾S¬¦:oyÃDA¶OŸ#‰4ú†ë(&P°qêZœ…g7k08­
+ÈÅÑÌÔ[ØŽ#;Ñgáfm7çÖH¹›¸ ׳ô	—
ÛB«ËÐÙΪ+šTs­ûPQ’^¶vÿ¾ƒ¸`Ø‘Ã;ųãú`û;Úv³«ôf.L€ÛïÃ}´·‡å¤Š•	’äÈA¥Ýµ†G|!?¬gJÛÔY@‘üÃEN·{s¢Ã‡ÆüPTÁïþGŽiÈ
+¦Ü Š@_AK2ûŸzH°ýÞž%Ë’ãÝRïðîàSŽeÞƒ@wDGT÷ÚŒÛþ|)`„Ôuq]â’‡™©¡¹åªH3^°t”[‹ÆŒpüÓmJjþ¶Ñpªß
£RÙX÷)´7nòé…B“‚9ØÅÎf?óÑ·ñÍ6/	üÖÐO®ý€)Áè–õ©!nAÁ6ë6ËÀ”ßXé\¬ìJ‘ˆ©-…0:ÓL]Å
+F_ÕBùiôGý$IJ®ä^v礮BÚR©7‚ú„¨`“uA_zôN{ÄcË‹j~r×Yê§p+]”ÍyI–û—
+Aá ´KbôëFá”îiÁâD9Pd0n"zB„~Ó‚¶ÊšÐ)§<¾ý;Ü|…EàÉÛì5ÞߨNÃ"Ž¬Ú7á[„MòŽà²$y€a›EhÈC‡
+ðÎ6
 ,i´Òíú÷ƒ†jm|®áNSz]8…‡?¸Ÿ¯º3?|†UÕ¢½lkXä02dŠŽžƒR…8cp ¸;©ÿ°×~Äux÷ÛqíMáLäP´W,¨)d‡P
+¾D½Ñºop%ÐËš)ñSáý’|9ykeÌ2ì“©=Y`•Ÿ/¯ªÔ	Ð@‚Ù†)I¬@Y>…|‘{;—t†³î¢Y‹I€cTë›´)©U®7b%-¶ƒ‚½¸æù
À³/œÝs¿Yï/-bÈÄó,J¥‚x~/êÉÓ¬õ²0Ï`þïà+^Glè
±Ñ¹ Û={†žˆ˜™ôÉÙž±Vó¬&ê‰$z|Ý4u¤Ò¹“‡aÂ3­,jhœFůµù‹t_¢Ouñ„P:͹¾mñÅÎ3¿åEív€ÙGüÔS¦ûè¤æ„òÿù˜¨¸)ÜŽbKd'&ßúW4Õ²"üa8­äs¦ya&úéj#†lŽ„z\ŸñkÖ¨ž”-£([Uêt¾¸¹ºÊ?R	쀜áûÑŸ‘ð.NJÖß·R¦EQtÞò›ˆ‚q:ž#FhéËPL ,=}âÉ´%ÎnÖ`p$G—:¿…µ¶­F(v¿Î’~9ݲscŒ!jY»6u(AŸpb›ÒnñWzÔE‹º¸ÀõR³GT^YЉ}586ŽÂкß<ÌÚnÓ±o+m@³{õ>3«„K‹½¯IV)¨æGë ¢9¼qìãamÀ­?›v—{ÛéÀë*äT­RI”Ì0e‹tµ–œA³úSéFÿc«+`òYH_Ÿv´¬žæ¥°¸Ò¯¡÷Ü®}]¯Ÿv©ì{KõÌ\˜4«
+Ûúus×U	79*Õ:‚W§wŽøB~EΔ«µ²€?囊œB’„®6M¤œ—È/ûë€5Û¥üXà°Á{æÿïY¦	owǘ›ÚÕ7]Èq¹z•Üë,(qwsöæY›‘å ¨ŸÃáŽÒQ¥@	€¾‚–dë#ô}ç¡!J‹9Û§¤Ã>ý6Áݦ Ê>¡GÍŽŒ]Ф„ Ä¶qv’%š#Þ"sÀZN‰/aÓÿÕ÷\LîC}× QñþBwŸq†~QÕ€6î
+ˆŽ¨ó©«þáøRÀµêâºÙ90/O_o<×If¼}è5¶‘àå»Ú”Ôáq¿àI/»^;ÌKð¬P²fŽÆ‘‚h›ÇC³m{ôDßMy„ž’Ï=Fp)_|åÒXfésY>í‘×=£[*¤8¯"°óRunÜùÏ„;r2­—Ì~û¿sÿ‡l^å±½žAçRŸÍ1÷OBÜ‚ Ÿl—!3ÿbû.Ú´½è1PV¬ƒ¿˜ö’H¥`ÕMæÍd‚QŸˆp“*×>Ô1ðÁùtå{¬$”ðËl‹5£°Ï¸EÅ”?<
OZ`t»Ák*˜º—Œ¾·„ï>ÒõŽçH’”AÕ¼ì0<ÓUA„ÿWãHó`17¼æÞ÷&Lwò™ÝêÉçQȲءÏ}¯ð9(G×E´‘[÷.Ùto¬	Luá.ð©¤OnéMÀ;ꂾôõœö•Æ‹Ôüä³²ÉSàVº5>‡ò.’1ë3‚ß]$u–ÄõËŒß5Ÿ'»ß*”µÄ˜ñá›Ì…rÜ^–çoÚÙ©¾(™Ðÿˆø¢Aè‘gx¸êÝá°Qìö<ý…m8°AÁÒŸÙˆr
+ È`ÜDô„ü»q‰)½RSxaçv¥øŠÝ«Åj¡£Mœ›DE©n߶šùÝõé÷N±‹XÌÃÇ'Ѽe†\— xjðž:­Í“#î¹’©Y½PH6êER'nIaíue<Mn©yHò&Â+ŠÐ†*(ýl@XÒu¹Çéó'ÔÚøAßœ¦ôºp~m#C (if~øMsšÈàªrÔ.p,X‡ÁÄ”2ñƒ¢
+«?1E'ÃòzÂŒ—É	„cAé©ÞpaëÀ®XÏÒŒ>"ª·Y4gØÖ°Õ`dÈ	!¤pÆà@mvOã}³ü•êðó«âÇšߘՠu®XMRÈ8 %JqšµŸÜu«¶E\¸sA‰•Ö¾!B/ºeKh
;òd&å>ÀPÓOQ¶ÏyfÛçk¸ž§Ïda(ˆg¿iÞàJ2½‹)Rÿ¦ß"ç9øròÖÊþ…dÅ;Oz²À7.#^CIµ½€=*¯R’E€² Z@]¡|è&äé)Þ®"…æw’PNh/Ð?”ÔçRÊábÆ!»É
+lÛÞï1âš("4ñïÆ|ø?ö$v3è{ÁY²&’ƨ›K+uROªAnÄJZqgmÑï{^%§æc²Ã0^ZH,ê0ç÷Ëì²äaÂqf:“´Êœ‰¸ƒ€#>µ5 R.§
ŒEú˜¼ÃT1)oLZÂe„1.Ä•ûX”Wðü^,É
+»E÷y`ƒÀáÃÝV¼ŽØÍ¿o@«8zö,!
-/=õ0¯!ð¶ý.žWÖáô_EO:ñÿpûí…Ð1Tb,|rŠU)ciyÕ‰¯3K/ØON嬗Ìÿ–N¬ûELÉHôø§hêU¹oþ;6Â0™fGXÔÐ%'Œ*—Cwïè¾Yžêÿ 4t‡oaÚÿ—˜À-™ÌÉüs‰p„{ ‘aŸ“ç;«”(¶æþÖ"2ãØUâÍœ¡í€W‰h·Þ¾Çnãfc׊Ç쯎嵦QëÍU Ñùãï-MmR¥Ä–ÈNL£é®h.·yD0åÂ'pGÕæQòÂLµ]w¶IF•†ž!‘ý®£¼¨4Mà¡xÇ7gfV8uÿ;J¹þ*ù†­+¸Äß!T²­8éÏÔFØô¸#ÿÖ±M!5Z[P¶ªÉèamoi‰~¤Å™,%ßë¿#?ý\œ”±£s¤Ý+§€ÒYùW£@ÚîÁe
°¯Gó
+‡g‹$,[´˜'fÐÄÓŠlŒ2v@s35ß6­ÁÇsÐQŠ¢è¡ù+
ât!FŒÐÏ"‹ ˜]>Xzú0ÙuJ.ܱÀàHŽ(3tcwqGŒPìce±ÊÅ.bxÓ	ºù~üdg¬v"ñOÿó¶ÐRïT„ä6õ
+§UÂßÇ{Þú¿òí;üöXõ9ür§y:æÆBÔ²k6lêP‚#àÄ+¹Üÿ®ôµ$Šim÷¤{Ž¨¼²½újpl™½i
Çr¿ùg>áÏÑN*­’mSü¦tž3„–ƒÿ{¥»‹b†ìUÝquÑÒ2é¤I§-Ò<£x…©Ü»=ÞVÚ€{ö÷|$f4K–gC’¬RMÑŽË]YreâÅÛÂ6ÚG~+ì3ö«Ï˘Po:‡9}M¹¥C†f·ÔªÂ4Æ%5𚉼–¿‹OçGuŒˆÿ¹òK¶¨F
+†
{ò¿TÕ¨28G¤’5…`Êèw1%‚{é¦ÏŒãÆKVÀù²¾#ìuE!ÑW}m¹C_ó0¥AúºC#`îÀçþ„%j1&{ï3f’7™«ðÒ¸qmA¡
+a4ö"C>¦W:cÐF.´p,S;³xf\,WìOÅö–÷…¸-h:K›+éêæ&³ªn$rT·t®Sî"í„üŠ5K<wy~×+	%<Øt­#P4@)Ë!(1£[“ªN¨ÁC¹†Õ0˜eBÂ_ýörô‰ÏµÙXü(S{±žÔî[¯‘Sr„9AlšU%3^ëËj«'Wå°Ý}ŸöÑãòQÞî“-+©·n,.ºâoô7¥ËXPâî°}”Á¯­!î{Ó»g*©%Lá
+ßR´É¡.i ¼ÆšE;¾‹ '÷sîc<…œ»þäšæñѲ+&?×]M#›ß¹(¢W€a1ÈËFõ=úÓ_B”r«S U<›|çlŸ§Q@‰|_Òʹgíå¾/Yî8øú9rbù¯¦ÐþÑÅ¿¬[ýâ©p.ÌTË+”‚žP<sŒõøë¤
hræ=+Ž‡º½ :U]•qâì9J)F"¡Dæ´œ*^»ã·ó¸<6˜Á†ú³]¢ÿá„î#âü¢·º¼iÐ|~¡ÂQµ>°I’–yâ§4±svæ+ßx¶m…3ûÃ%®©ˆÕ#z>Íó)D’·HÍÃ6lÁ
MûO
+Káßí¤*wÉÙi¯r&`^ž¾Þx³’=ÌeúÍjq?
+Ý×k©5µßâcÝ’&Ò΀èIXTinÙ¯—ä5¤`ˆ¾
¿NêJ<¨e/Ö«æëÚðØZ#"Ïöi²Û£*ŸŒ¯Dײæ^k¼v…–ýE yÌ‘?$Ð+“†{Úöõˆ£4šò!9ƒzŒàR¾þø×¹°ÌÏæ²|Ç?³zjPÔ£CUŸAb¯$©Ocdx¥á/*
T8ÊoøÄÎЗ›ZöÇœi±„`y¯lÃ.1ÖþO¢l[4¶TUpCD}<û¤êÜ¥ïƒ.,v2ädG3…üëcæãؼ$×g!‚Ó:¤#‡bóž„¥@#ØoÞ“³Â¼yŸàÇÏäՕÆ¢gßc3ÆŠqÓ¯žÝ¸M¬j2B]ðhÑ
+óÇL‹ªp4½Õ¿ôL¬3BfãÄë\©ugÍb ¬Ec-ñ9W=À·šÑ8‡È¢#0
à;T³$|µbýŸïè×öEH5ý0y6(ÝQqÄÖ…”5aCË£ƒÁ€Ÿ
õVûZ±è;DÛuÃúw¥|’“'k}Ï5î’D‹Ø'j[}ƒmŠ—5~<xž´.ÀèkŸÖT&-i3(asÃ|¹÷Ó95‚·eÅ`x»ª‚¿ãcò¬˜ü{i)ŒV[`Þ ²A:Ht™dÄóôÏkaj,Õ–Q€IðVí»­F¦Yíaã®ÛûÀbneÑ¡ó4L˜îù/$§É,Ó¢y­_ƒú CýrPŽ³2Šu?¶ó\¯èÞE˜êß\ýו³E=ã–arºtè”^Q¡V˜û-àASÏiXŽ[‰¤F‘¥Ã&æ3£ ]ï+èLk3‰OUžÜ2Ï*švÉaõ÷%ñ07‘µåÕ{y¦Ý¬ij|ù\9bËf(£ºHê1•÷‹£j{nö	ô«b™ÕÒzD͇jeY¾E8ZË´x§Q¹},qªl~®+˜¿áz̶€i›¬‡-±Ì'#Nk£T5w•-ÿß+…䥼1ÓÞ©¯O2aP/½ã
"íY‚Í?Î
+ðmɧß}¢ÅñxçÚp}‚&¾e—´‘Žä¼½gžå¿¡wøxíÿ#œßÕÖÓCAö)[:¹>n¼®
rÒÞg|ÄöŸ¹#¯
ä]À¥ˆõ*å8k2âRg¤¦ðÂÓìWí>.	§K—Ô_[š%+ˆŠOÜ£q*)匿‚KzË'•¥‰c¾ëÐ-ZŸxü¦°k²ùŽa6Ï€ÓÕ]öÈÉüâëm†‡_	HZ[mÓ÷Ï󜰅›“N¿eʸ&3@ðÔý!tG‡(;FÁo9O²g lÉ<Š¤NÜ’ÂÇêÊxšÜOÃô›ÍZ¼ŠH8ˆ-š]ºkøŽ½té¡_ì6‹­J
0Á!;dq5²û€oSm-³ž
+D@:ºÞ.³;òù:L™V	½&T(PçØ4€°¹êo“Ïû6N"0µ©í‚£%Qõià.&üÚF†@PÒÌüíÆ«‘ïŠZ×ñ¹¤
+Eq _pºòè=Í^7,ë÷±™Tµ°sbY:9çE“ÖŽ¢y tx“™šæ)ÝIäµ\'àX°Ÿ•5dÿY6K~bŠN›ùô™3Æ‚ÏO¡à"ÂËA2°ƒ¹"®ÝAXÁȱÿ<ƒ;`Àiß=»VJŽ”Ù	²Hèx@Zq噇7QËœ–hƒMÎëÀ%
Mq"|DIs²hέ±}·ÀÈB6U.à‘Ý€ÚìžÛú{å7É ýûKÙ“)8£-·]êA°š¤p&] G,œµqé6©fÔåðýhBê¸'‡±FM˜ ´¹Ì ™ÑT+íÞû`kzäÔ2æ‰30ýÖ’2TJ
+”þâ)w#¥êKqŠ¸mæ‚7±aB"„^iÊ–ÐvùÈL×| »ž¢qƒòÌ«ÓÖm!SƒÈ~1ü+$êöÛ¡IP¯€œÂ§¹ÃÈõ&Ê¥à} ëØἚÁé¿7òÍÕkìþ(yï‡çì¼(ÂP
ÎcÒ¡Ý”dgR¤ãQ£8DÓríäù±‰áÈ—vžôyn\F¼†’w$gzT2C"¤9Šyù8Ø SYÙ7.jÔ™¶6z#:F4óEËuþL‡0ì
KxÉd+ÏÁ®írvœ±éÔŸ>r
@´€º_øÍLÕÏR¡A"DÑî9 œÐ^½~5µÓ¤<‰ßÄ‘,Bk4Ø«¡ÃbÙ)
+PDhÿÑtèo™;L´ÑlIÂd4m‘F·Ò5‰³wÀŸ±’çxqÜåúTþ ]gb¬nª i4ÎK¬åø.í~ñHìfÍ"öŸ²yL9:‘M+–VꤞI‚Ü•”´â62ÎÚ¿Ã4'ö¼JSÑÆy›`¼´Ì…«7‹mžÉ•ºŠ	l‘´ãäzAô'æRcà&d²ŒÀ4 §ìMöíî•ÓF›‡{ÿ	=ÔÓÀX=É`Óó‹Åy>0Õ™âÌt;u‰%m F|wj]¤\SŠé-e›¨0bRÞ˜´™Êb\¤cU¦rsÁÚ%Sðú阌ܵ«Øò­ b×7$J¬›ó¼(…¨~d6BaS
^œ2él¡
(•7ë°5®2ýå¼X>kŠ<óòÀß›§¬ e­‡4þcÞ€Kpô0ñ"XBZ^z÷`CBþ¡<_>vö/ÊùF§;·sn+"²[‘Ì?Ùk†BSÚ\),ŠµÈiç½c(ë;-’ÝÐÎsÆ÷-Šýqç\!®±ßõ¾ŠžtÿãàëÇ=½b¨ÄX"øä	ªRÆÒò·Cf–^­žœ×E3…ã16œÉJ‰çm0'ñ‘ýQÇ“š«o³e3f•]îÒ†?q£hbä"-Ô/ŇdýóÆ™¼“—‚óbE늘õíSÐɪoÞáv>&l™`/ÌŽ°µ½JNT3†îÃÍa²!Éã*]hèÞ©ã3qÐâMIÝ
éð˪W®›6¸°TÅÈ·Ì|.׋‘¿«LGÊ{á„2k誌&•ëB*®dŒG-Z/…åæà>ö]?Â#;ÓvK
+5PqÑá±DdÛ­ªÙ‡%_Ç®=2Ðs¡a>“Ü=Û¦2úØFàá«ýlÅ'No¶õ±°ŠjÔ†Hùzç:@ê|¯{¼L¥²”ÄglR>ðXN5hR¯Ì>Ƴ	“Å:C×wQ¢Ë‡ª@¿*ïÛÃZšÚ¤W•1œ˜[ÏAÐ\sòˆ`×™NàŽ·Ñ¢ù™˜+÷VuÊ=>à´RiÒ±ÇÎ̓¾a—ØŽ54NÀ#„ìÙÔòË:¡Q©´öB(
èÒ_¸öìwºîq"’Œ(27=!B?çA[eMhšÝ_ð“n>Î̬pêãv”oáT'ïGVm•þ£B¨yGpC†¤äQ
Ð6»,r2EGOÏ)Ì¿8\“ÚñXå?b´<õã¶ø¨þ&r(Z¥Tš2Í(Ï ƒµŒ"­*õmFã±>š0Bj´¶ qIÍÂÚÞÒüU$—/X:J£ËcF8~ç¸%5[æ8Uûë`Já,ú.Vv%ƉDÚ˜ÌçwÓ„Í& ì#¡ä!òºz­ðª%Wr/;ýRW!§VS¹²ï"®[€©ÁŸÊ}CŽû(ÎHX¶u-N̽•»	Ødì€æfj£lGŸ
+“潓m;×Ûz3&
@ãŒùï°ZÕÍüREÄŠI„rd€®ÜàÔÉC­>ž‘V½%ã‰j¢ Æ~ï¬'‰É¢	Y Í_ïV2ÙèBŒ<½ƒD]-º|°ôé`¯ê”\¥ÝPfèÆ.î⎠ÅÆ–21õœn®‘‹g´uFý+Êz¢ú±ò8ÙØ:DksiÿHׯ‹©"&a$=uq©kʉ—\Äð»iï.üåÈ=ÎEìDÿžãû4q½¤Ã¨Õl÷Sª™£“ö¡é.6cùÇvåñ°÷þDáBšqCÊôM-Ä•²}fËží®IA6v½—Æõsä{tƒÂE?»4Ú¥x Mw:«zmO•WwƒråäSòtÑ‘
+„µyÖlØÉ FÝ•Vo¥ãAõwH	<ÒÚ'óUö8MeygéÔàØ/gÒFÞŒ†4·Pi'®óT¨³à±È¯<Uª¢ç/k—A“ø¸$¦1fwaqR”¬!W¶Ù¨¤›¦“4äcïÎ|߃¿œ8= TG9Ú¦åQè!f1ãöW:kÄŪ§â꿹dÏU’8SZ¹:.¨\1¥,O„|˜Ü¹$HG`üÉKs÷2ó%cª?S-8ùN½Q3Rãô;#ÜÖ
+¬Lÿ«HõîÖNx[ðO¥kþz¡¬©öñ8óøHÌh–*1Ά>9E¤š¿‹º²äÊÙ—«™l©'ŽüVÅfñKƒ'‹L`˜Â‰fê~·Ê8ÎB³PƾÁÇý“ÛŒJ[skÿl¤qèNÞø@¥ÊH‚4Õo_í7Hÿ-  Þ>trúšoW†ÌsµI('4™h‘Jjý)eþ1cžÓŽê
6ãoù–qMŒöùc$HuýõëvYr¾a¶3ÇZŽeNÊ\Ï@ŸÔ”P)݈F¬}L^ï*–š¹Î&-a¼B–¨·MdpŽU9jÀ8‰,ÍîbJöÏQƒÛ‘–¬ïy=aFÅêŠB¿®úÚo8†¾û`W‚,éi†FœŒ%±¶MÔÁn´Û[¬.\·®ÊÄk_ž†!È™]¼Î«4ˆ“y2ü`(穦[é²3ãý»\OÝé2ÀÁÓáJÔbLöþÃfÌ9n/Ký¹mâÚ‚_ÂhñD†|Q®tƽŒ<\uàþX¦v{ð̸X®ôúõ'ÖË,fïíæ^¼C.‡Å<5xOØè
+ÇŸwÒIÚ¢Ð($u¬)7ª¾ø´É¼¨7ÚÅž—ñ1ómZÐt–(+VÏÉÑL{I$ÜH0ä¨sè2A¦ÁD8Çå	j–xîò:ü³VJxñ¥ÿ$÷0–•^soõ
&µ‰yÂ	àuêý¦dYlÞé°Ùx’­å‚¬ZÆ£õâ:¹VŠ&´þx­èGF h€R‹BPb[¶;IœMŸ†o·`-'Ê„™¾çñäõ.ƒ&w¯°åP¦ö!µÁ¶C?¦ä™Ó/“f«‰xV(Y3GcÆA	4Ãí¯×¸³z"á
¨²BOIé#8š¡±>üi,3Éú·¢øÆå‹Ér*‚Ø)ªJf¼Ë‹:ÔKN®×}§ú#ñ¿Û›0y¢$¡Á;ZVOsÜX\iÙÞõnW‹° ÙÁ!IBWȨRNÅd™óû@”ãÀÜ~,pXî³sñù¢SŠ¹µíLÃmä•… d¶Ò=Änû¶µ}ú5ŸC6GB=.Áö»kÎTOJ˜ß£¤u:_\Ò]e‘)Šva@NþóæÁÆx'%káÕ)I?’àY€·¿Fž5¢Óƒ´®Á81ŽÃi7ö¥=j	¬Ë‰]\`ô)×­*/¢hÊ°”Gah]Ñÿ¿yVL~³ºšF+£0oPY®$:Â2b‹Œ÷z黾„5äK¦@ªx+øÓØ#S¢€ø¾åÄ׬ÿK¾9]H†:tJ/¦Þ+Ló˜p®§éº,‹G£ÊR#ƒÆÜïs±H—ß ù›t&»—ʹ‰oÎÇ×a^²ÁpíéräÄïCQ½á¿—cE¶çÙOà\…¨‹V5! x4æ÷í&ËU8ÐäÑz&V²শbkŽÌJ”¾¯ëßÏHî@Áˆô+ó-Ö‡t“"ã´‚ï}µÜ>ŽIÇ»°é”wÎI"
+ig@tª,*º7âÙÅr”RŒ0D_ˆÑ'u%T¼™kÛsûmxl-Ÿé{ºYãßÁFÙ"åYs5(j߯¤ÁŒ®1ÙÚ©¿2<Üþ™ˆ*e¹|bghÅÃ-{íNºÖB0²Ù6ï–k©„Q6ieÒ½øü_™¢w|}’91òÙShæìÑV£ðqÚ8f*ë›JAO(
·Fô|‡ûRˆ49s‡›]^ºh>?Þa¦ÔXªIK²qÝÖ·;s›á<[¸Ì—„óïœWÚ
+‰DäŸ=è÷š"
IÕ$èïl:ØŸ( šëž–ߣÇU'Tî¯ÒCäLÀ¼!a¡ð{9z…Êé‡Ôâ,~§³ÖOjw£ÙƧ9X°Jîك؞H…w³çÓ½Úœ&þá)Z€êÞºP^cM¬“_˱õ·wÈ¿ÌÀNÓrÈML(¹Í’°¨ÒܯC3ÕjU
+À
acœÉ”xMÊ^±KÑË©ý­´FDƒñÒy«[T#Cˆ³yÑ0w`ýBœ5–³±ù—3I•ÂÛxi\¶¸®Þ¾{¯S¥¿h#Z8±§“׉<3.¥¼Öeì1<çŠ]ò…?~2H½V;ö©ñ÷
[h)ù*Brôݤaáí³o}…ƒÑyø“~{,ôˆí
9Ñò½Žþéæ'HØI¸§~S:O—BKÏñ³Ü€ÓË1Cv¤à¶´æiúRªݘi€Ô µ[†ª#
+‚ÄCHOžÆÈðWß^T¨p‰Þ<핽3+´ñ“%ÒÀòCØ›\b±áž*YØà›ÝŽ@i¢ò†¥ß mwXÙ­÷Í
+½Ë£ZL3hbçE6F; ·—”áØîŒí·h¶hq¨ªà†ˆúxëUÉ¥WÃ\X*ìdÕÈŽf>åËÆÑÛ&­eH³þÎB»tUFÄû!W2€F­‚S}l#pþÛð6ì'¹[ôÖXE5jC$ò=‡ý u>Ù³^&ÜYJb½6)x‹,'”4)ÙÞ¡;{™eò#Ý“ƒÕ·7›YΣÆf‘	â»C!§m.šEÔd„ºýпû“˜Iàhg·cõ˜Eê%ÉÊý¸ö€Æð¦íÇMÛ¹×¼
+—±3Ä wiC‘¶ß41r˜j™ìÍ2ð÷cÂ^ÇÅA÷1f„Ìە˸Oê·Ä]EŠ6ÆZÿr=®zs)¿p2YF`Ýv¨{HøwÄç#ÃͳñŠjç`R¿¤S9·îmœ§x}úLFnÔÛlyØP1å•%VÃ÷^ÌHT?2!¾§ˆ/NÈú6ÞˆòlP§¢â•±5j†‹[=Ÿ#÷¬ë´&Ívˆ«<ê2›éîWø9;NÖúƒjÁ9ˆ:Ét¹Â“&Zæ6ªa2
¸Æ#Õi”ÎÊ×µ`ÁÖIý<¶nü}* ½Ž1aV7†UPºg«Vü­NÔ¶úÚ	3jüxð4!u\ÍÖ#±¨LZÒfP
+Âæ*›øoó0»=rjsÊ—ÀðkI*?–~›u{ãÞª(	Ù@€NaÝÒïd‡ôeÜp°P‹ûlþ^MîúÑ•yèä»	v²ù€Íýv^cÛÆùE-åöÒR¬¶À¡8]y‚tè/È•
+ûõƒÖÂ*ÔX·1¢’ý¬ÇkGŒQ²:<ÇÂWà®,ƒîdÖñÏ“0`ºáÓ+%GJâŠY$t< -ζüÂÍ•¦ëNK4Ϩgû‹`œˆ¨¶ÛA«=ëÄÜÊ¿_ûh˜-Á<ï^HSX»YòG¾é@†çä {d	ê~qû¸CÍ¡Š$-É£¸çïzÃè-^E$ÎD˜M ]»|GÐ:úÞ¡vËØ%ˆÀîž“2¶”Yó@¹§¸˜×O" ]oד³7{ŠzÛ1Âäi="èÍ5¼¢_¬-ëZ<Ý‚¦ƒÒ°¶UŒ6?W›LÑþ=f[@ºÃV͘Öf‡_¼ÅZÉÆGr^нOü
+ÑÞµ|<øñŸNŒáäk篮{ƒš£ÀÒ7^	Wˆ9io½>b	{žª!¥dƒT)'ì2Â÷ó Jÿ`n?8,w×·öòQ§EÒÔø&ï¸rÄ‹ÌP2[iÉb7ó
+[Ôª‘Ip¢@ÕÑ#O”QçσZ
+Wî–G•{Ü5ŠVëÊ .0zšåØ™Q4eXJȃ­¾4 öÜñõKÄ/·¹ôˆ‡ÔʲaŠp´‹uðS2¢6oúXâ<I
+ØüAV-cßô…qÒ+EZ…<Âç™Ç3ÛÊ<+¢—­¿c®ŠïøÙå\×=þˆTY!©ªúHŸMÞÖ~º—ê}ÕQ|cüËêHNFœÖ[¨jî7Zã£V.ÕWeb»¡OCžd ^gÛDDz‡~0ýÚS£úY—ÿðÓ.©àúz}ôkë3ùøÀs/^¯ÍìÉ”<©€ltíÁµiªmQhƒ´‰VšÀ•U_|Zê^T•m&0LaÊ3u?ÕegÎ!×(c_îíðÇãF%
+£·±»†‚ñ6R¶t'o| Üe$A乡Îø•$ñ$´ðôû;¢Î9_¾[—€í-G¼'e.é ÁjJ(š…àD#V°&/ùKMÒg˜¾^!K…#oFCÕ(ºW
÷*T×pÖdÙ¤ÎUQý™»Å®Ç|\S–3µ¾¶)JV
	ž¥[âTRÃST.–Ü©B>LnÒ$­0~ê«·õ÷œ¿U‘§˜ò
+'Ѐ¦—)ÿz“ŸnkV&ñÛ$ôwk'K–ô‹N7WÆa˽Z´#ð›e=Q}ÖyïÂlƒ"»·ºñ$åÙËÚ¾´¶Ú»"þ!M¶¯ez¨˜bÄY°3ëOøWª®;ÐÅcô·r³:Ïa¬‘ÓmÜ<¨µÛ=¸©Ä¥µÏóƒû0%þ}+;œcʉ"mLf€ýµçBèŽPvŒŸÞržyÎ]=Øx	Uœ¥9™“ɉð)¥žÇ¸“åã=—…ˆ ÿFòùX-äè~)¬bEªB92@Wnpjê¯ØÈOÆ+ÐœÿÊ5Qc?ùVÊê›õ+‡´e	p
Z)ºiÖígèÏ_¾ÅlG”'`ŸBvÈâjyëÞ¦ÚZ{!ˆ€ti¡\{v¯ÎCRr¦ˆhÓ9‚¬­©éšfÑ.Çmö,ü‘1Zôÿ[|T9-Ü*Mèù=ït˜/¬g"L¨P Ó>­h}oÉÞ;ƒëlœD`wOÇ[J¢÷ ÒÝ\Lå©Œ€ ¹…åÇ͇¡^ì-êc­9/hЩ~æoÔ>|öÁ'Fþr»ýÙW³ÏM߀`i•/Š¥D’º¹Ð1Š³‘K?Ã	´³ÿoUŠâ @'¾àiù2Íz‡¼n8X(Ëó6/¨w}æIJtrÓŠ;±
+Yò@èð;/¥pWÏw2köéÇ0]þHç‹›œ­%qE¢:˜g[~aèÄSû'«éT½É‰óË0NDT[)ÑR§’Õw¸NÝ<°}&#7jÈã6²l(–üÄ	œ+ïõ/
+f$*‘ƒž_ÝD™‹'‚d}oD
+ê:ÒaÇ-sU¾ˆ
\cŸäºJgeÎåÔ0îkªð[7~°±PÐG–¾+•C¤(]
½Û+~A§‚°6Ÿ8ãxvÀÒ£zk,¬”5¯yÍð€´â×/n¢‹%1К<ËJšâuœêeð\À{@cxSøí¨ãÒå^ÅÖ—bPµº¯Æ[á–9†L5Âvèxõοa/íì®õ–Døˆ’æyÐGús$„lª\Ý?§©Å!«éö×n@çë–¯;Rp[ZsºÉ‚})UàLº@pÃàG ºQyCÜḵw^D,âØõŒèÐë	Éß-&À—41ý¬#‚“ÕÅJþƒlwFøÕ4,ŽX%wâÏlO$̵×ýçЄÉmNŒþš-@uo…](/¿¨VÇ¡ëÀÖôÕµdÑf`'ç±9d¨µ0ð±!N”K‡×ÖòÅ—ªÄaã<º.[\WoŒ_
³†Ù§Ü€Ñ4ÉŸ‰…-ÖÝÇåÊ—Ü”5áÙRîFWÉ–â	mÚÑn„D¼Ò‰>1½4ìø']k!Yâù…K»±ÚB¦ /]4‘o¾Sj,Uª«Y¶à
kÕ“·Ãþ£\fÅB÷ùN¥mÊ"rÁtõMȈªätùübåVHÉñ«_’ $C:%™So›&÷L‰8WÝú]Ë­ße)ŸÏcnù‡·Ö$ÅáPòÃ:ÓÅeÈYƒŽ
+pS[1»Gf%J_Ùûáé$w îDz›÷˜kÍ:Çÿ‰ZAù°ÔnGªíÀÓXúJµgªP™ ƹ_§5ÈΤUÛ¢[pˆ»äÇÕïß.3ì!õò'ܸŒe9îHÎ:ô¨d†DUr	:òd¢ÈÏG8§£–Ó­3œ%¡âóþúµw"=ÃõL»èí†ñÊ-®òXj7­Uø`ç,}%Ô½U†8ïp­]¦²¯nþ\Ôµ/"qlôFtŒhûŠ‹êá˜`Å–ðÈVƒŸAÇäì%Ï6µ#|äÔxÖž'J«ÍåkyìÅUb¾ÿ]£.¥¹F¡ˆ×CâÎÝn@æêÁÊ̘k‹àíüeÅ…È‹n€ui¾í‡˜·ƒ¤_‚Dˆ.¿Ár]%½¼güjw»Ux£•?X„Ö(h­K_›Ä¯R ˆÐã›?´Nu¼x.`³ ¿<§|øTÿiü/ŒìkÅ1(Ô]Ùc£þ
KŽ’C&”a;t‚<ôÈgѾ™øvWôKèÍÞ/v˜u¿Ø’™È4hÚ?Œs¹j>{î#9Óðâ¥×é¨á@0ºÎÄ™EÜ"I]Òh–E×Ü8¥éµ»{‰úí $ýËÃNØœ¶¬Q	L½£?¾tb§óÛ
ú*ÐêÊ÷ë'"*£í\ÇüÿÅ̇Dñ#yò,˜rt?šV1¬ÉU!’ ¥785uÙld©c›hNñe”¦¿‘ò+ÀeuÙg¯)9SD4ƒç’A‚VØÚúM3æí¸{~Æ–-zñ£>*ȱ‡’
+˜n‹¨‚t
+…*KnÚ!&7i	Ø?uÛÕô‚õNѤÆÝLÈyh@SÅšñ=ÇÁ7»Œ+öãzµ»±ž¨È[Ù‹¼=TL1b¢X—û©|¥UWƒ“hì¿zÕ9×é¾VÆç
¸nTÔ€ã\ÚbÜÔé=°zÀ»û—ò|`·™/Ù…èvêJÚ@6:ŒøîÔºU¸¦4
+	ÏZÊ+M`Ĥ¡>-u/‰*ĸ	‹Zxzó“Qg’¡_£Å@ø˜­^¼úîÎ5%MÌp"Ÿ+X™ò„«¨i½‡L_/ž«ÌUƪ8Q ä柩J¦ýéÏ-¥wK­ùG]ijnH”E+ûeP=MüÈl„¦¼,%dÏØ_PaýÂí—ãe›
+QÅØÑ¿WE
ù|âü.å†D*¢žÚU}$Á¨ok?]Åu°ä¦Î>¿~ëu$7nË}jAdç×e°|(Ö	xûù6'£+SE@ÊGháÆ¡–àõ`ÿD°„4´¼ôóÀ†„á5»©Àœãt~ÓY;vR–¡ö‰PÌá…niŸo"üÙ¶½p•·ˆ´w¼3&Óë8|?^Êvf2ë•_x¾|ìñ^‰ïŒSv6sæÜVDy¶?…~$¯Ö„¦©¸RX	w*ÒÓgÆPËvZ,9§½æ‘óZ	kCÖ©*2ßqë/HK–¦ì÷mnRÜéí;ærIü@}¡›¿ðD.•‰5 ñ$¸–7G5}çâÓ¸BA£÷a	!èãÛÝË“z.gÄM•°>DíÕI¤‘,¹ùs†Ì1¼G!%³ŠfÛbl%,ÓÙ»m„‚þ[óÂBÍÛ«§‹;ô\Εš7}|ˆÇ·$’U?Xoïæ<…beŽBJ{	Ì.«ÄØJX”ÓÚ`Nÿ:?碓;)KÞ{Ê(fþÌ7ºÁ¹~â[Ð8ÄÕDZµ^—Èçû>‘/e;3ûÄ»¯kÚá¶û™$„‡«KSvõ¸7)núø
“sH9ª~ °ÞÃÑx"ÄÊ„”ö…\K•­”°ŠË	-<=÷Ǧ½IÞ¡ßì |LØ/À^…}wg”œ
+¨f8Á›,‡ÂyBÛTºÐÍ&¡™OÛf¾ðaøÅÿ¼Ã¦ìlæÑ¥¬ˆò>q~üHC±"QOm¤°îT¹»Î‘ ‹ì´XrSgÑ?û´â½Ùš’§"Ïý‹I®A+lm}¨—s…ø\³?cK˜Ž‰=ößdÖÍIL7Ë„TAÈ:ŽÖ†±OTd£âË^*&–1Q,ÅóÚ>ܤ¥ÏÇ4vÑ=ä’å€ú_+cýˆ\7*j@ÿH.m1nŽjúZ'´^<0×ÑÝ>|*ñº~™Fv»ì–j â¿ßˆÈ«GI¯J¾“:Azd½æ_Â|;¥z«nÜ‹úÔ‚ÈÓ³Ê}øP±ðëï'lN[V¦Š€‰Ž&Ðß‘_:1Ý÷Àãˆ}hueõûß2Qdé­ŒÝßKçØ—NœÞq÷}	Ôµïô&Ót€ÉøCöe˜Wy,5•Îؤ|0ý°œjФCj<kO%Ûèü»²vì¤1_ñ …ßÜÒ#ÞDå¯qgà7 s
uîefL»Ëpø~¼‰ìÌdË7
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc58.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,59 @@
+ÓøƒaÞh­b7ë Ø°Y¨9‹ã‚I6SÖG*¾‘3É`ì,ù@+0MÌÚSéí0Ô¡s*ó3RÅÓøƒaÞh­b7ë Ø°Y¨9‹ã‚I6SÖG*¾‘3É`ì,ù@+0MÌÚSéí0Ô¡s*ó3RÅ»í¡ÐGÄ8nË]­}²MrÛ*6’l¦±ŽTa?fÀÅXï€.V`š…©¦ÏÇ`µ_æTûf¤—h
+˜£¸ê¦$Y ýuÍëåK€8?›-ÛZõgÉ~ß®UFŒ )tÀ9}P×Isõ&*Paþ•~UöRkÇ6™0_½Ž•pÜ‹ºGúyšä«T2l9ØQ¨Â~Ì—°Ã\¬À)OQƒ“Àw¾Ñ¨ëÌU3¸?µø<Õ#÷lë`ŸJ 2ÝHA°wpî©F‚|ïÿʉý{œ:]K‡ðdÛ•j~𣢂ÿöÐ*-[(þmÉQH²@çê‡Ë×–p~+Z«´÷Îü£AªŒ]Rè,rú ³’æ÷LT Âá7üªñ¤Ò®:$ d3T…«G27’¯–“k©A₤ÈÖЙEŠ=¾ÄÕÝeÑþ^<¤¥¹@DÖ㙣aÖ“0l/`¾g7à¥iŽéò)Õ,K¨dØr­¢þM™ü…'3}›:¸ER.ž¢;îa¿MË…ªfk6ïNl`¬Uü’àÉVY«ì§¨½æÃ;›ñ(Eg'm¶ÏƒGßQbz¯n­âDñòÖ­:ÀÌg8¶ø£m~<wíx·FóØËÀ4#”@d§'‚}îàÁOŒøÃã‰çö%tº–ýÈ«7Ôüý[>Y0ãñ¾†:ôŒtÁßë‘Äü+”û$Ìž¬s—ÿõ©÷W™Ë3FRÐ@€‡	ú8Í…gíW=ÍŸ*3ÃÐ\4½T(Z¶PáÚ¢y€ÓÉ‹³1:àüV´Kuóå[‚I
+º¤ÍX'äé]{9Ñó˜¨]™ßnå IÿUn¬.Ù×\?²"ÀŒNks£Ò±éÔ¯C WDÏåzÌ…ÚHá¡góÂm6õ qEmM~ÏÓz­¹$AtH@
+Èf¨KŽdn9þC1;ÖO‚ÙU0±:½/Š	za•·§Ê¿=á¼xUWo=,€ˆ±Û/[ÂÕA"ÂDžbe´  .¼Þ`VzºØÃÍ™/æÊ›„,C†¹NçÝ”
¬p¢¾‚
ø!û›(	±;`Ø^ÀaÎnÝWÒÏùR·X–MÈ­äGYáš/åNfú+tmŠ'¤\!Y6v'ÁÂcš‹IÌbÃf[?Ì¿¦¯Á`ýrÙ úŽÓuXJ¶­q
+7C°‘t$Å—.ŠÖÒ4z¡éû
+ß›c°x$	
+ÖlÃœØÀEªå9ݬ²KÅSMgÑ›v+ÿPŠÎNÚqƒŽ£¢ÄôCÜG>Ùˆÿù±Gt…Îpqí[Ù.j@ýÔvèÈù6/t·üØ®rS€?¬†ÍäðKBJ”îOŽ=´T÷wsR¬\w <öäƒB¿žÚüxîÇð>sŒû­‹hF5€ÈSN=úÁÝŸž2í›ÛÓñJèi1&çKnµåç¶|²2`Ûÿ	~m¦üà!™±¼vÈž…Ù`jÅÞxÚ”©[HBS
+èÆ‘³f)&
×À‡´[\×bÝÁ“èN:atõ蟣Ë?•åV5ëH2…!Eæ3ã÷Oó®/‹fŒ¤½€4ép‡ÎÇ®z"‡#Tf›½¸h²érvdäAËf]‰Ò½•3øk-Î&aìÅýùÌL25ŽI’sØ>þ©[·Zý“Ϸׂ'LhŽê­g¨P´q ß©Y=ò»&{btÝå¬u–êû׶’
+iU‡°NÕϺör¿û-Mº/£Ü×@’㪴PV7¬Á®;!ÅöW–RÓ[ÿ>ð.nßܨÉAýˆ¡Ã›	¹«IÂ䊻¾e¨Ä Šû¯ý³¡±oÜE\¯³¸~yDœÖæ"[¹6ϵC†]®ˆƒ×&ô…©ß_Îû™Úl÷]âŠÚšü:ƒ»ôG=½Z,Ò´ éÿ«=Fúëàž)ôåÚ7XM°xÏ©i·ÇL˜É|ó¦Žì²ê!;ÌgêN]I©HÇøoH‚è€ÌM.–ÈÜrá†bv±ž¯2ª`tg^	ôÂ7sS‰czßeðª®ÞzX
«^¶™ß—N‰œ^| ®Q}¡l+I¿é•¤æù¶@UÊömÀ”.ŠžHJ’©*ùG3JŒ¼~UXmä\·‚D™*ˆ!ÄÊu@]\e¡À¬ôi­›‡/=^щ+X8†4oœÓ§5EàYaíBë+P8dzBK„ÿ¬gjiw¶ü½™ÍâNŽ4th_ΫÉOžTëCe“°*,ƒ_ˆô*9㘣@ËvÀ­¼Âܧ®,¹ƒï¤s°1šGÕŽ²ß)^×.0œÌéVèÚ	NU¸B²lìNŸ™Æ).’…¬ŽÆ.Ý‘驾»™ÇÚ3¶J;Ò\œ¸á	OàFÑ¿ü ů¨Í"~t˜á…~K8µøÀ@ě̶~…cQCŸÀçä¯þ]é»ê°”qGân†}?èH—3\	±¹hô_.Ï=ë£+.*Æ }ðH6cÊ5‰½9îzƒ÷DwNA80	¥jÔG¸ÁWy{^¼<å@(ãt‚ñ1GJÆþgSW{dױ؛%­<ŠI×r§Ey–>—¦šÎ¿+ìVã 	œ©â6[Y•õ†¥Ž|¯
ãïŽè'àâǶÇIÞD¡CT'+ËEL£ÉÏ–®-yÛ=0¥`°vN«"8ÑÒ¹a·ulµ‘Ž¾1c×°’¾<†d«Ñ•s¯\Ô€çµ<ìÍïl^è$så­Aä¦~:E‡Õý–„”5Ážzu¨óîæ*¤E ¸î]xñÕ„c!|¤Ò†¹â„`ïó+‡þ0´}ÛÜ&¢ñ$7ÇÀÿC·]º¡r-ƒ5¿ØÞ«æ~ÉUÞ‰Ù‚ÿè·1ä©åðÁ“ý|æëG'ÐŒj¦œz2韧#!
+dÇ+«<»ÿ”ÍÒbLÓ–Üw×ÓqøydÀ«8ãzöBòñ¢Ž¨‰[<ÌpTÚD%Ÿ™'k„îC÷MNyº˜×³Û¸4’ugãJZCž:ã¥Y
+N3˜j&üÚQåÝ6B/eì!¯ÀÔ—¡ð©5O¶„0¦Í‘?{:Ì"RL³u¶¸³Ä§Ÿ0;ÍœtÁðúY0é^ïMcR-ù§öhíB
r²|yåFÃ…þX°ÖàÛ[1ƒÐ߯åQýƒìÈþαÂ"è÷
+Í#[‹~7׬jËdBŠÑfÛóžûA^ÌUg:&h$Ï>à.“AôDF¨Ì+gmÐÚîtkÁý3&+àGÊ =¿{2sYè×͈Læ»ÄTÔµF„÷)Ë#cMI©#ÒçÛæØT?yÏäìÈÕ‚‹Ìº¹g7fíÖZ0
+LÂÅ—çï…˜dj’9æ­|áO¶s´:ç;ƒs³N˜ÐÉGª7âo©Ù\ãaØŽŒ—¾]ò	
+éY@ÞE¡´9²Úû2[¶†APCùÈà´ÒnCg¸=²#2›‚ÎM uâ]£O²zù:kLöÄè§×Eê1Éë>³q29(Òª}œ·ƒiñäcëZši^[¥³€9ÛIµ¦öƒQ}'«ÐfÎÑËÛüO^ýcDÂÇñxÿ¸èK™Ï£
+ݧ²F?„Ü ¨Y¼(¹¸³wYŠúÖ™s
+‰Œu ¬n EŸAvB—ñ6®1¤»¶ã|ý\Ü£¥M‚ç
_›+oK’™Õ	kaÊM•]	ëCç{_Þ¦XªíAIÜ÷ì^ –výhŸèÞÇê“YÅÍ®œlR¤rƒgk\Žþ9&­|°9?¥0͈l-¥Š¸C{müòˆ'
+%±ÑD¶ol þƒw†ºA
³Lõ.O=£¾ë/©Øó,ºÙ	©)åtkõŽzvr¾Àa"š%EZqœ6Äuï–õA'é—J1
ÝÆÞ¡/ÑGÁü™•?öé0ä™ýD1˜ÆÜ¿g´X¹u]"Ïã2KzŒéËÝ!Rõשn°š}ðƒOÒs“˜-øûQÅyÉBv…ÎÉœº’O“*íÍŸ²ÛØyƒJb.|‘,1{„‰k~4¼ì«ÓKO&Äelâ Q¢ïרAÒRùº_Oÿ#ùHáec x(ÞÍ=(…š\1¥äßÄì!2CdIÀþèμ$õ™næ¦Æô£ÊýIA¡ô°:þK¼q/Ë&–š¬1Ã@ªç†kÚ¢U½w(Oj£)
+RIÔV_Û«•uBæíÄî'¨LÄd›iÔ¸#ê£3œ%¼ø@A¢2ú_ ØV’cÏ7U8Ñïq€ª‰ñÚ'5\6	&!”9OTïŽf”eüª°ÚÕ¸pËšn)bí#¾ÿøh:ZDÔ@º˜>¼§Ç€7`éT¨U°ðf6»¤tƒŽ¼g‹¤ÑÄ€Cé‡}sˆ/T
B•‰ꀺ¸Ê_EõÒG+^z¼¿V*°p"hÞ%»Sj4ŠÝ²Â24Ç„ËV p$ áŽ¬5œý$rö·QïÄíÌY¤>‘E3ŠKiH|”!CØ­âòÜûDAÇhK+ß%¸|SCvÙÈô„4–ãEÎÔÒîqåg"/‡Ùœ
+hèоKž!¨Ë†Ê;}<TX¾
õTrÛ-[€‹‚·÷=-c¶ÎÙšE¿’v ¾Rˆs¡æíØÆ(õ%W®È'ª3{jd]”Áíäd¦z^(¨%ÒNþìGe'™¥SAXoÃUæ}b)Ž·y£R¼³\0`%…Ϭͩœªm„yØÅœ#/‘R\9-›Ä+Gw¥ÇOv³ÏÜ«šýßö<…•þ7*uWx"oùïEiãU¾9¬ç¡^*1(¬÷ŽâxåokÒE‘\§?8ÏOak/“2©fq”v¹¸%mߞ݌:¿cå@—CM‡Dü0è-ßü–pwí:€–ù—ßÆ3æ§âwx’qÖ(°­ýZœ£l[ŒÄÙ,c	vì…¬»º
oÌ}$÷ŒþïÌBÑ,	ÏE•+…qüÆ¢†0#ÓÕCáºÏkÉ}5âŽÙ(Üú~Í3f¸oÐõ¾\ƒzË([V\T‘@úýl$FÓƒòÊ+R?ª8u›Qãg;à*h·ùÇï{
+VÐÀ\£úéØþS–â•lζ{²»l€03У>á.Ɖj>grÁôóˆîœ‚p`W,ÔµŽmŸ®òö¼ex×'€PÛè<ÿbŽ”‘<áΦ®öȳý>é_¹l–Äó(6,Q*IëñB®ÏUƒÝ»Ø„¡cÅuê;yÌÃT3¸Ý}|5oÕ„õÅšv(­+JG'x	’³äSŠò1|3Q)cVŬÛ]%OÙ6l¶²7÷WøCÛÃþÍN.ÝÙ“qû‡«¨+Kù¤ð¯Ó¸¦RBhÔ
+ÚÊ”áMŒšˆ‹U5›ÞêÿãbZžÎ·|1µÀˆ*1ï]5.êÁ´“’¡0ˆ_†¨NV‹Š˜['ƒ1AZò«z`WÀ}ìœKDp¿¹oÂsêØw?abƳ}9axÈK&¿7æ@j§³éSXÀã4—½sûÿ?Ú™xѾø{ö.:ÛaúáŒp࢟Æ!7(*Q/
+i.åÔQ¬°»aÕŒe#C¸µÓwxŇÃ8ؼÍHæ×G‚ÕQ:ütŠ"·ç15jŸ!ôêMûÁÑTUŠ@mÁºðÿ·6ÆB@³ž²{¦­*eß3¸NîÌaÀÓ!µBÙôTY &üåÿÍ.
ªZÐñœ˜Ù©€ñnQŒÅ&”‡øU¹oÙÀÃûVá`uú«¥LYÿHn,“ã†sºi_äZjc­¡KÑü,ª¡¯ãÍsbÕ+­¿…pc}m¡çaøA¸Å£œÇºêÊ'.EÚÉ8Ÿ@sæ?vâ*t†‘&fG‘ÛjÉ>@0O×ýŸ;çøÑ
+ËŽN½Ô:Q%ôdÏ#SF BÈ“VK<xkã5‡¹Ä˜»1¥ î³»âíòÈKpÛœ/ûZë&¹§©’!¥Ýdc¯h®qM8ps”Sâ-Çxõ÷~ùÓ³‹Cýs^‹6Lânx"ô:ñ„ùÿYM¶x…਩ˆJ#./NÖÁ*†óšœòi-³{«&mh9êÎÛ”´†!tÛW²œf-ÔL'Â÷˜ó‡iàmªOn@pÑâ¥Ì[TˆÕ%ݶLøzôËÊA‘yýåëÙxÖÕÈ™ëƒg¶•†‰$婢קl„^þÊÅB.Cµ3_0ýOjžq=`Q(‡?~öt…D¤˜4{'&êqm {•S#`v‡%è÷èã*ÃÛy)<âý.§šž5Œ¸¼%T#¨"ëRJï¹´öñ–˜©½äKjê0"„ÍKAòPJ…´w-Ÿýé²`ϼÚƤZïSñÐÇ8„äyøò׌›40á°}6±Ý«$¶b½£C×¢ç Å4áLï1ÃØÔnøÚ“åú7ã¨xþ³gfb±Ä„ZÜŽ†ÒyòV]ñRd¡I+ðo™„K
++ô­¶~ÒÓº™DÍó‡F¶ün³EÔ‹=È.„	¿Ì«û!낼…
+ªÎ:tLÐHƒ|Ý&\;‚õˆ&ŒM…VÎÚ½J¼Ëpu‹˜Þ¦žr„®tS‘†½‚\Ù)àhÝÑjQ¯´;ýóû,<dåÃköÓáÑeØ->¯¥ýˆx"©ÁèÖŸçfL8VÝŽ‰&@zcödæ²Í³‡$
˜Ñk•¨µwŒóR‹FÆš’$:OF¹Ó«Ñ­¨~*ñQÇk·“9áZJêe)þð#Ëω‡ó0Öú±wÛßûÕ›|øìù<
+CE v‹VHwÓ¢vmrØû^›,ïòƒÕÅ·…ioÎnÌDZ´`˜™—3ÓÃ-ÈÔ9rÑGøßž qæutÓvæ{2œ-½Ž!{ÓFì»Çc(X%ÎwèY”÷ŒQ€PvE1ðý±«Ô&Þ7ZÖ8Ä®€ŸöÖ¯“ïN1ÝKInÙÞO¯¸Û­&3aºùϲ€¡Š_ur™y©ëd¶q‚ 0'†ïÝu¹Ü†ÎmzyFd+š–ß].£f³oÏ:6
+ZQ+Ÿ,§ºÃi&¤ÞSzWþqnŒÉ^¶¢A&P1¶Ì	SµWyÜš]êÙº[žyôïtÖ˜,ñ•ÍS³ŠÉbË|{âdr(P¹I&ú%sÒÿÕÆË´)Ò¼¶W{r«’Rb[i¸¶…ö¡èØŸvÞ(uY¬F°¦Ò+¹˜ª_Q\õAáßÙ¥
+ed0Ⲙ]Äâh$QîAùW:wQñ¢úNK½Ì¿‹«åž¼çƈ™“ÿðãmÍ–/ƒ[§SyŒ~¥]M²ePom{î²	é±/æéWrz®$&æßжT+sUÇÞMkŒä¹Õ>Ñ=Ê'nÜ`RìåJf‚(œµ>’‚ÝHÂ']Àê]EÜ@Š#‚ì„3ÿlAbUkqÛø縥[WšÓ ¾+V$Þ–98/·Ö‰š7ºË†Óö¾þ¡9¥C_!†ÚK/Ž˜Ì™ÒÃHPò:¾aÉÕ^ùž‹âÙD2ºÀx8œ"›SÉÞW"©õù¬dQ°IÇ‚’¥óÅ(¼]41ìç&Ð#Í¡“É;<²—‡A%ؤUäÎÖ¸árLG <ø}r~W`‡
ØZ6‚HODãž{›hJ jß‘4¯¾Ž:[ÀØ#ˆ€
odЭÿ´ëmÚ„÷â/øÊB‹úoBªö­þëóW	m†öÚåù
NJ¿ˆqÞØ@áî"i‚6{˜÷.\žz[aË^O­ûXi¯OR×è6Ö÷ô„ñk—Ö;‘ ,}”PÁ‡pyjûl
+Y:T]Å	ÄçÓþ–w˜_Üuà7‚:Fÿ†v›%ÄS1ìäa4ÂD)JŠ,$´â%l•2êÃ1÷'‚NÏ3”b§‘¡_^¿ŽŸå/7~ñÏ`Õ/çˆb-‘¥c?gUΚAçè0_Bý¼5=a $u<ËxœåÓH¤6¢hÐ>S/wßò#z²+œ‰83)}HÞ¢÷¦<Îu°oêºDƒÛd–ôÏ‹§B¤÷³OÜ})ú8ýž¹æ;-Zí뢗ò„ì8,%i9ž=;TÇï6s3æd,.¹x¡¥;þê|PZ^f`Ìk+\´wäÕcÇ[B€Ù¿É ÍkÅl¿ñÈJ´Î‡#y«­ò”Ä\ø?XböÖüheÅK»–žL•ÊØÙ]¢YÃ(³M‚¹¤ïi¾žãFï6ßÊÆ]ðPTÛ(ÌþÅüi}@ÏÔøºFL§ïw‹pGPò ÍšÒàfHnk֣ğ´Â®ßS¥dÍ
+«ßD—¬à5n¢•0¡=2‡z:P)¸bWÕ£"•ÅþBd†È’áÍe$H÷/ÜÑQ‘õ[‰ç’‚_õ}t4á–eâ^ãY;±ævä8£u5‰¤ßçŒ&ëÀÏþÁK[ËsVíÇ—Ãð(	ºÅE=Ák²Å©ÕGËeV°›‹L1)Eb›€IÓÖ©Yª*gîPžÔ[R¤4,’µ¬¾«K7ê„>Ñ0Ç•ÁN4M˜•È+ÒµmFÉX´7ª$nEèä±
áBùrš>FiýÁÙI]’gúÕŸ/0bÄW¨Ç‘'쥌À”g¤u¥Š¡Ÿž0[f%Je퀂Ydé¾@­¬9ƃnªp¿ÃâIÿ©'Nj¸lLB=5rž¨ÃÌ5
+ÊåI}©·mˆž#‡F»…-àES˜õ‘ÿ¿òö&4Zc±nšîÁ
+T@ëU?Rrè!Þk–cŽšå¨à‹)ÜRÄ=ÇFa
+"ãíÐt´ˆµ€i>-|eS“nÀϨMª}4ýÌlkUèeÎU¿•†Ïú3s/œ½^Uj$}=ÉC5`GÜV•ë%dJ6…Ô7ÐQüaÂÊ‘Œ{@e¥×Û6'æek4p7uüA?æ2
^¨„7 Éim‰¾'Š÷¹ŽV&¼ôe0c¬T}à"DСJk¦Ôh	§y0™dh“‹¬]àH85ÊÝÉZ_¢BÕ*‚ÍQ~"Î2mC¤§½ScµY†êìÓëË°ð³+±ÿXDk£cp‰XG´ø†®Óý]ßEj%çHäñs¢0$ÕDž²U|?Šf	–Òø5B†­GÙù¥ëˆ‚“"ЖV£&Jmø¦†ì¯Ž'Æûå†íDIüsÌo¼9¶i½‘/?Å×Ò‹ÓµdÈp5Õ\«Ÿ©8Þî
+Å¿N8òëÒUµ¾jõh1*ÛŠµ¹Áâ×ÎD^¯%Ðͽa–,!BM‹‰vúx¨ °6a÷¨ä«Z¶,^
ëP&â,×¥ö	wô¸*$Æ–Ë„‹2ÊX.(’èÍ-g=p6íS˜m|ì2ó˜0
+).EOÎ6só2zZÆq¯)Šc9ì]a¤þ(
æ_ÑÇ­‘P÷<J®ANIföÔ.Ⱥ5ŸÇÕ0ÈQô¼PMJ¹œåàð’>¤2k˜Â*»‰µõX/=ýç”{ÖzI­ygÎí¢eŸ¶Ãø÷ùE”<Ýø…UÏz¾yëYáÅ'ŽÊN/>W¦‚°Þ6›ªÑúÄRsò[ ¤e{¸`ÀJƒE‡O$%IÚò­—%F^?¤,¸r.2=!
«BñV½5ºµ[~ІÂèq'GŒ:4¡gŽÛê‹©O*û¯¼ÇXÏ¡Dz’ÿLŽß‹ ëZ(+•VŽîW“žì{ƒ¥K)ç£ñx7ánTê®ðDÞïÊÒÛªarEÓ_¼TbPEóÙð×ÞÖ¹‰Ð-iZP†úñ‚Û#}ûpOšzüm•,¨X<éÚºÕí&Lê>÷SGvYuž“f‹½u' ªÚ$í„|Š?¸S~pƒžÂÖ^;dOÌâ05ìo<mJÚ£$!§tcÆ×€3†šˆå`ÍZ£.å1àîÇt'Yú9;2r®ë3 ÊiÐÄ—|»˜gŒ¾vìðòf&”GªI·lÚ£Õ-€ðÇéÕåA&4GuØ1ï3£‘fÑSÙî0ð9â±P}Gç´,%[ض•¯XÆ:ìÅEki=Þ…úHóáÃ…„¿X<ƒŠâ5 ðj;tdò™:	Õ~lW9§@‘€VCèrx«!%Jw©GZ*õµ·„)V.µP{rÏ!ÑO7Vâå.‘Y`F'»·†ßiƒÖújÙ¯P¥"éü‡=fÌm$þÞ½÷a¸ô‹P¶¬¸¨?€éç=ØHä®a„"O1¼ZP^o0+=]lïèÂH™seÃB¯C
ÈÒ'ýàJˆV8Q_Aˆ|žóÊŒ»ù'60‰V¤~Ipê+¢ÛÎvÝTÐsï“Ãö¬½¸[éÏ­á¦1=Ù7Øq"öykØ`f½[|ß_CzF:îáûÆb~›Jó‚fOV·ÅñôÚõ¥Âë—#)h @Í
ŠÈ}Îè̽ø¥†èÉÁ—ïh.\‘Ô|ÎäŸõ6û0
Á%àÀ$®Xµ8wÚ#A>ùñeÊð³N «Íx2ãÄ5?xßQAñ{i	WŒ2—*ÌÛ­•I±ÙKǻڮqARdk€h¬E_bäà¼æH/RÜÒH "kÿÂß¾ç|Ͼo4Ø1•ûPlX¢T’Ëÿ„Aƒª§k­_Æ—êÉ0vò …›¨fm§úøjÞ·÷—)ì4„Lß
+±\uS¢ð´èûü«@‘Øã-ô½ê?áW¤#FPš:`’°(媷ô(¾Ä?¤{)PþGV”ŽNð9{Õ¦	ùbøf¢RƬ—E«º$>Jž¯lØqynó"®í†4«›á‡œ\>§¯;âƒAÕõ‚˜¿[gâM¬ÑI;P_)±
+D·Þsølcôœ¥WdU—³5…2 Jîør2S=/Tœi'ëKMV–ï UýC»mQ¤„婉5ßš)
ªj+¡ÉãÛÄ´!søbw
T&b2új\ÉŸu8ëMÎ7š1HøŸ_Œ†ñ|4‰-"j ]L^Ýí@•0ú*T¤X
x3ÓR:ÏG^½ËRæbÉ@¯úÍ°;9_`
¾Mœ¬	-¶Nb‚´ùKôÀ®úÅ%–ˆàcoÞ™æÉ­î~ÂÄ‘{úrÂð"–LcnÑèÁYãl²Ï%1Î>Æ–³BÊ»?^vÛç«©b¼6qP¦Qù
+åT®i)ò‰]¡©ñŸò$ƒþ¼¿P<€ÔS{Ϧ°Ûh3gæëã~©/ð¿"aíö<ñ\t«ÂéßàÝY#‘BnPT¢^Ò\×µ¢E}k·ÊFS,Uø®ªnõv
+/P
K;Îð‡É4ÁtoíuÇ¢ìèWN6)R9Ͻ».G’Ø>X’‘ÜèD6˜ƒ†mw:»îð—›p­e‡ѳŽ·¢tåè	D&sÓb*jÔ#Bõɚ럿¨ª	€ÚŸiýãsl*‘„U•q¹Úâ.ÿ¾l‡GFÅ_ ÉyŠú¢ o¬ÞZ’aYmó£[C®(‰À¯òdpZi7¯½\YŸÃA=€{!yöQGTÊ£f8*m"œÁ…»Bw„¯õ¨'²]Lå×ã‡\I´½ÿ%-¯OÿÜ¢'—L5îx}¢ú/ù¨¿)˜òÝ{4ø!ˆ9Y>²ü#ï
Ì,Xƒkpã	£–ÏháÙü¦ðÏv
dgÖíªo"Þ¯*›ë¬&ßÀêéKW˜²ãÜ0X;'ÛæiÒ¾Õ´6ÔÆG_–¿åXI_C2Û‡æÄ·>RiCÒqB0ù÷›ÍZ°ãnQö•í`ñ¯Õ ]Þ9˜Ï”ÑloÛs?ê¤oÊâAñtÕ–rVGcàÆúÚ_ÓÂí‚m—[%“iɉ.N\þŠ©p#€æÑ~ìÙTè?:LþÌŽ?«Ô|€` …¿e”ÊÐ’w=Ïõ"µ'®ŠÜ5j­\î¥Î²³/^üÀ ÿ:Aö–­%c½§¥³2åž³ç#vÓí¿‹,œg
+µt¢JõȃF¦Œ@„(;¬–xðÖÛjo•-kbW@Á{kÙÇù'–à«MKá ß3×¹éwÇÒ-¦›ÁÝ]ïºRo§…=¥±¶7Fê/‚[Q®(–[
fŠ§Ô¥²n%^ë8´ËLoSO9BW:§ÈÆCÐA.âšp4àæ5¦ÙZ“ð÷ó2üï»{†çþæ¼l˜ÙÜðD<ö¦í»ÕÇ’þ-%u¼šxŸëéÊÍ÷k}ÖµãáóäÃ>|vò¯¬P;Ë+$µçQ;¸9ló/Ãùõtÿï㲚qðÝMO
”F\^œ±*ŸTû)%ùÒZ{öKLÚÐrÉ«5uBè«®y(%ÌZµ˜&Œù–Žïlj7|mÇü}•ÿT<×½‰31ÖbB-nGCi²y+ ö)2Þª›x¹ÂB«›zØ[?iç]N™ó-ûÒÝÚIžÜ€à2¿Ù4W…¶¨
8·J§q˜í<ôõ‹‰‚?òç×˯ð±·/Ë&Îq7<aõL÷ͺp¸U©7 8‚æq
Üf£*Däœà[&|=zëe®Æ²ðüûâ<kädÂûχ½[ÄCÊH ×OY³Sؼ቗„\†'wf¾`çžÔ!âz*À¢P~üñèˆU-höNLÉâÚ@ö7¦FÀìJÍ›ØÑÌ8¿°¸Þý¾|®\ìßNí]ue…±¬mêÁ ·s‘;q:CÆ€±3­Æã5ê óÍÛT›«òRxÙç\S)!4jmeJþ¨FMDˤ”Ãouñÿ1-OgÕ>–ÔÉ`D‡–‚ù ”uîZ 5Ý×ú§,`ÿÅзóñ‘mÂ<æ†_|³{ã¾}þF8pQÁcž•¦™ºüj¦VXÓ¾äF¼Ÿ#çÏyÀƒe›)‘U´Ã¦ÿ½“p4Õòíù³+h`.ß}úl§KHqÄ6g[†³YÓ6@—hßþðÉú¡Ò
6Kb÷¦ªûö!Wé¤ÏàÓlBÞ¿ì´u“‹²fï*—\à°>”¹äBôìM;˜
+Ãb›­µÜí©;×énÛMðá{ÎÌÄ•´¥<¹òù¬ºÿ¤È_’VýÞ/–VõGq<ü¹»iKòÅác—sÝqµ<I¶kXØð-Nß6£Fbâ¿€Š;vÌVÓ]ˆH¹f°õFùf!æŠé¬/ˆ‡û(ŒqåÜ{Šµz\c…KëBËe,It蘽8ø§L¸>v÷
Lš¬©güpxIR»‡ÀLaÓÊÔô,™€ÉðýJ³k=ªØ²½gøQ¼Á[ïŒ|õò¬Jà|̤é=_²û¢”e‹àê-¡Q!äAè¦?g¸¯RÝЧ¿Ô¢CuvçûëXxÈ×›Öñ,"»ß¿8Ê,­Z|CWç
ðGc‹óÉüCø"ªH~·f¹^’[ºÐÆ™‘ìåiËçÔ2d8”ä.ÛÁÚowìÑ'yûi¤Ô_5DOŸÍ±#Ó̘p¬§L€ôÆñÈÑy‡{H-¿Ö7Mwî* û¤Œ‘)9HtžŒo»K¿GMüT—·™NÐ/
¤5°ê¯”0­nÈ+Äûœ2%Ìj•h¦~¾aeÆF³ ¼Üåãs¼»8•´~®‘ÿ¢“Ös;rß´”ÉÊRáýF‹ƒû`±éî«£ë·+øíÅïx†Š]ì¬î»YìÚä­ë¼+XÃ,Z•U7¬trÖˆþ!ò9M#º„ðî⪠I½}äÁ	™1b¥TíÆvÜF`J½R´ÜEÞÁO
+ù·—s2Ò<ÞÜ…“uÀ>(-/30f»›.Zµrä¿Ží£!@âÑêè»ì6Ñöd%Zg*ã±fì~º° éj|]#&ÝùµË8­(yPèMip3$7»kßbÁZaWÉá§Ü2èÛá"ÅVp”7QÄBö»ŒÅk“ÆP°J(îÍ8²5ó6¢
+* ìŠbýçKµL¡n´±p•A#ñ±C;Ãœb§–‘½¤gM®ýt‡¡!ð^”‹¾´ë<Nüç$RQ4h§™µáyŸ=Y›NÊ—š°$oQõS’ܯ¡žCm«™GL
+fÂiï$(ƒy_	¾êä/òOËÈqâ"]`<Nçêo¥ÚôòŒÈV2A$©"ÿO³Ã4%P5áÆÙ_G£`lŸD@ˆ¹2hØñZû¸mBõq™|e!ŽË}¹†H!U{‡Øû÷)1£º\[Ì{ÞƒtlÁ;o´¢V#XSi›ÒLU¡¦.ô®þáâܼ2qY‚L bq4…¦w®ò¥úÉ¥9=Wsáh[*›·¤í
+o¨»F†rÒäƒæŒe7n‚0)vü%3ANÔIAà$aŒ„ `)ºÉ¯i¶!òõÃè±-Xÿ7‡¦{	Ä‹ø0öÙÈäP o’LéJæ6¹ã·‘‹uR¹eq®ö:äK9ÌѼJÎehIµéôÔWEn‹”5Ø.wÜgY×™/~`
+ñ‰®{KØœ¿‰±ÐÝÜÉ×ü¤Ä¶Òmqñ_6Í­#ì¡Pê²EŒ}Q¹Vo-I¾¢¸÷‚ߣ¯WÊÈ`Ùy28-º•ÙÐ.H¢Á‚ï®w<°Q}É™òTÑšÈLyà³|žD’¢Y~Ÿùˆf±,Ï»8ÿŠßKé4þâ~Sxé;ˆ2±½ktî¢ÿ6Y霖g…cK×!eÓ‘
/;ãýÛÚ‡1^¶(S¦òü*WºšyÊ ÞÚöÁyÏ^Ñ(
+§¤|WU7ô;™(ˆ«“gxÍêî:¹ø´í‰Qvt¥'š)’éÐÓ­±I‡l‰,IÆnt"LÏÏ®äôAHLÑ£½q¨V檓(¡šÖ"Õo·|6¿
+z‰NÜ¥2À¤Å×”ÌP%w|9§™
+*Nºû¨g•M–$|Á¡FCö>Ê€˜5 Î&/àø Ä}*R,ˆ<—ƒç)é­/Ðë)s1ê Ù}èXɺŠ¥€	FÅfã؂ĪÖâ«íÓmW¶®)2»@4aV¬H¡1rp^s$±™)ni$‹»ñaá_BŒ&áÖ.´§	QxZtó~Û ÆïLÿ˜zÐu‘þ¥RŸ#(M‹0IXüUÕz‡„_±b‘R³šrW†¾B©–^-(…/¹› 6ùta$·¼ï!Ù¯ˆdiðp%D+¦¡®D>O÷ï
+EÈ¡¯€=#wþóc1?Ã%÷	A3©+ÕìözmôÜaûÅŸš4 èˆEd°gtfÐ|ÜHCtêî„Åù4
¢}’“9Wû—PeºhbÅ>ÓL½F‡_;vxy3‚J­UªÕ6±mß䘎@xíúäü®À­´lq…”x5‰“:2yƒÂŽŠä?6¥’Ý Æ@+¯t9<Ûžœ%µÚ­H-ôÔÕBš+Ô(³9éžæ©žˆÛ!ö+Д]Ô£?hCat¶­F
ÞȽGãuËÚ©óÙ^í,‰„éÞ"=„Iñ&GáËûÊh˜º-(C}öAãHŸ°ó8©M=~¸ÄT,úm]äø&uõ§­;¢´OÇ3ËдPUmøB>®Úñ©×ïœ(”þc
â¡­€ß06Á" DÒ4lö-ó\¸!ô¶Â>‹¼žGë°ÒC$ž¤³Íl±óõ}êÜ’¥	‡·þ4£ÃÕRø¹TÓ#C9irÏsFH¼À•7Aš;~œ—®
+'jªÉ®p¾FBÀP0ÿÖ
+3±v?]Xú5> ŸàòÔëز(t¨º8—•Ó»á1î-¾¥êþÝntŒãþì+8J•¦bÆЉR½¨Wð:ÍÞžx/JHË_	Zû'~ý)ƒ¦4ÝÂÔþ²Á΢Ã'eÎÅMX¹¦ô§ÅÕÂ'h™ˆR”	XHuÙJØ7dÉ›bóNœƒf5Ä4S?_¾¼c#×^nüÿƒÀ·^Ó
ÄZ?WÆ-Ĥ	•V:9kDžy’¨Ÿ]BxwqUPªÐ°rîŠÂ–1Ü*øcÀ;n#0%Ð)Zn¬oî©~8Î<ª)‚ÓÍ`&¾„çejzÂ@Hêx‹ð%×»UlYн|¦^î£ùF>ôyV%p>fRú¡YóQ­ÀÈ¿Ë÷ê~¯|U$?Õ3Ò/I£]hcÂÆvüºëýj2Jrãîm¹µŒvæ²ó‰ºRj¡”xê}ÞÉiˆ«È1õ
+ƒS„Uó{ž¥úRépç6!oÑvZ´ÇËY3ùÅ.pXJÒr!zv¨“«yìþ¿Å·à¶ÉÔª[»
+,lx˜‹'áß#1qÑ@E“;f+ç D$Ò3X	ô#±ò3žs‰EúVÃlæfÑÈX\oð_>W.váÉ'ø ´¼ÌÀ…ÖV¸uîÕ·Æ“¶„¯c@‡Ö—Øcÿ”u”àå}Ý0ñ
ìhÕ÷öƸasC¡>׉³…€ÿ_°#8¦î¿OÄ
+„SÂŒ]…~5S+,ç_r#^ÁFòKGù65•>¸í~°Äñ*±åÐÊ—–k1!˜7‰­¯ºY²›P{šoUÃ<Òa!ÛŒÃ=l£‰‘ºý À¾ôÈ&õè]8\¤Ú•As¶ˆn3ß"rNp£>‰=û¼WcYx~óq»r2aóéÍУb‰¯e¨«þP…á—åÒú€ƒµíiŒ˜SÃîàŽ ù]‡)¹ÝÌÜÖ±[•#u™A£¦WȇK£ˆ3EÝjÜY7{SøÓäíI˜œ´^M±<Áûúeèõ»°kÔÿþ÷rï>;yŒÙV(“ë›Ôý¦“\’6÷™ïò`_zdôt .RmÄ®·[D7—á„È9'8߇ÊHó^¥¿¢<?÷¶Ó9¾÷úèhß1ÊÙ¼³§|çrøªÈ±LNZ/¨Öîó}¼tôÓX»jñõ9Žù“²‰Fâ+ÇûÃ	jðSÇ.IõÂù‹yÛ²vÑìÕp[êjU£Ó6<LËþƒáŸ–¶‹æ ¬Ç“3›ýP"i—,ŠzŸÖy—O·Ž‹Ê¬}+Jpü°àöˆv4äõ{c\¾·¯ÞåÊ×Ì@ñ¡X±ŸSwÑ©bB§aF Ì?”§›ý¡9Ÿ/î˜bRŠÄ+’»"±O²ITÎÁ !<µ¶¤(UhX9wEaK–nÉ|¿`“7Ÿœhš-7V¹wÚŒØ`dÑëÈõu?Ù>†¤‘ä—i™ªß 4¿ac;Ž~]ûð5‚%9…ÿw¸ÒÔF;sÀY÷Ê])5ÞJ°unIHÜŠÍÕß„ïä)|ŒÒ*矯’º9Îé·#$^`Ä•®M“?NÅW5ÎUêW8	_#!`(chÊ)ÐT¥xèoO<™%$ë¡Š-‰ó?ð	šÏS
ÎàajYîgHQï¼gì¨,	ÒSzݶÌJ<”ÊDzÈÏa€GEr‘ÜIàc ›Ù:’ãONœÔmØ$˜„zjä!M›…j‰×’úOsÚe4L‹]˜¯°{®ÿ$ÁX÷Ú¨?\b*È}¸ r|‡´ôÝØ“QZ©í—ÈëhZÀ(¤¸	|!
!FþŒkZÝŠ¦<-:÷?ãcù&ñL=h´ÆÜ)ÁŸ¨€Ëª,
+~¤ä=ÍB
+¡Ö1Æ)×MÞÙ@Ÿ€µ÷¿–‘ïœõŠ®—Ú›äv{=¸zn¾óìÁMtD¬2X½:3h>n$¯:uwBìò…ˆÝR>¥¤•z“ŒÂDÛǽ<èu
wÒ|Zøʦ;:܃MšIúhç…ØÖªÍ6ʪc7:ƒ&éóT½Ä¨K>îÞ#¯{
e@L†”PgΙp|b°„)DÅÏýš€úØ™hûš·–uâ°t,fæ^%g¼4ªÔHúz†jÀŽ¥¬7ËJÈ”lµn½¢å™‰?0ö€ÊW³«lNÑÊÖhànêå‚~µX¦°êÂy*æMd&²p×
>O"IQ¢?ÁòD3ÖéÓñEá«úq?§<úÉ“DÖлÑd¼M4n@:ÒÚaN	óo¬LeõÊ`Æ<E¨úÝDˆ½8_”ÖQµÐSò`/ÈÐ;*EºÝpœ?,8˳"“
9z×Ñ¡Êäâ¹Î~¼ü3{okîÝÔsm–Fžà_Ÿ(3Æ%àï‹xoIîµj‰§,´¾Y„·T‡¢üDdÚ†USg¦Æw²ÉŻˋ}ý{Vã°ˆÖ[Æà°ŽuíA»4ç¹q$î jÖôæ«cò'z¬¥ì¸ï9“×H.•¡õ;wTˆ+‚hȀŕ	â€ZÔž;²ˆf"º£ŠÔJÓÕÿæY`H›7“yªø~	Ì1¹=íj„GŽ ¯ïWË
;D½1¬[L”ÚíQÅCi[	µ”»=·ãѲÀ+n;.òIíü…$bozÇÔ"Ž@Cî‹2 vˆgbE¶ ˜5©Ç¢"—†N‘ë×Lj’=åæ…ÞerqÒg?^~—³¹»wÈàj·¸K#Op¡Á—cœpùË<¹ªwaÔÒ¶w5kzsÛ¿y=VÜv\ù’Çå$HÄÞô“µ*D€†›A4d@ì
ÎÄŠq@-jO“YD3÷*ÐbT«	woŸÙ³ˆ¼ &CJ(½‡gÂ8>1XB„š"ìéðM@}lÂ4óMÕK´qX:Ô,SXua²s¨2Y8åˆÈ©ª¦ÎQ‘îy"—k‹úçö¬þÛ}
±¶‘Ý}êÇ"‚khÓ¼&Ë L
+ÙX³Wñî,õmTH‘.1‹d‰°\P9>͇ZÎzàlǦ-ÚøÅdû4-`R\Š>žoâ HÁ@Ô±õÑKÆùNôEWÅmÃr;³\=7_÷vî¨
:"V,З47Ù´µ!vy
ÌDl02æûdô´‘âCR	ÆrźÂUáPѾ¿“G? óx”A‚œ’Ìñµ\ij#“·`¢õe š”o%¿È4ešh*Ü<€t¹©ÂœûÞE˜Ê÷‰À‘xŠM駈
gp¾5±¢w½$¦ùÀ^½vTŠi§=à×Ý>ý9|UdÖ&'-™Tkw÷°^:zç,Ó5ö±ô’GòÎÇYÊ#q›
+íóïŠ5x§íªƒôaò˲%8~Xp‹{D;rô³¿._‰ÕÙoüeåf öÞ,ÖÁ§µæÚ1Œ!ݾ#Pf‘JÝÃðÞ’Á™w
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc60.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,61 @@
+h„Í:}HVÁ²"V;1Ì@ƒ§º|V"½æÓJ”Œæ¢v±è—`1k2¾D®¬^¢Lá€',h„Í:}HVÁ²"V;1Ì@ƒ§º|V"½æÓJ”Œæ¢v±è—`1k2¾D®¬^¢Lá€',Ð‡t*ú¬ŸyD¬v0b…€"Siø¬DgÑ»”5ÑYìÍ3ÀbÖdþaˆAE¼Y˜ßNX¸‘
+JN?‡ŠØŠú^ËfúM(SIÀ3˜ô	Ó„úfÚ7hÞ¡‰7ûšÎ%¤ S½VßÌïéâûÔ>it½*èTé=E#òˆEì`ÄD6¦ÒíEˆÎ¿k5j,
+¿²Åþ‡fıÈáÂ
‚Še0²-£:œ°Õ®ÞÒA”ƒuƒâ@ª×xõÛ]Uµh‘ªsY¸þ'†Y³OoñýõÚúž|I,&;<aBº»œm?”œ~	­	鼋ÌéšP¦’f-õ»éÌ©nС_:në)JU]¦g
+¬£…ÃÏÙ(ëµ|'Òè»Y¦kn„å„¿}9î¿¡H—^Ýw®Ri¿îˆëË1ƒˆI_0¢Â=—	ž`Ámc‡$Iù§õÄgT0&ͨÏzŠFù
ŠÅÀ•.:ˆl Q8¹ÇŠ
cÖjÔXcy—áÌ'•ß™	Ê`yZ[t%}Ð6ë÷½²‘2‘܇K/Üþؤâz™ï$ö?»Ü/<… @S˜…ÛáPû[G¤¿ '^·¥”lÛºôQ·A<¡¹‚5ê&Ù€I&³ð÷«ºªw(6Ð?&Iæ²mþáN² {žÞÿç÷©é!ø’XLvx „ik%ßÅ:lƒ—H–¢–p2kpˆèÆgú»ô,¥1jCpk[T¾´uET‚
/6h‡ÆÂÛ^FÖöà(t‚ŽeéL	Ú~(5%ü&GÏe…Ï) Q9'ÌZ0÷$k*Ï…Oܽ_¾tÜËR”ªºQÎE>[›ƒ¯PËwøN¹Í²ú.øé[ŸŸ™¤¹§™¸`õgÝÙ4P#ÑV™§ò:n*’:i$®|=Ú`¥wAåS5/ñ\i;Ξá
+k$²QÖÜ×cúrÁc_3¼§îA8¤*ÒcÁ(
Ë‹b
’¾`Y™z3!À:ŸÚÆH’ï'S÷•bï"kᘟ˜5;Àã5dˆpçÿÂ<-¸®5ã•ëÕi—ë0Èѱs¿„ÛtjMD0£ÆÓйΨ`L‡Mƒ8ô8	Œï	—7\t
Ø@¢po“	ƱԵ°(Æò3ß&…N7þ0£/42‰Àò´¶èJú¦,f½Xþµ¼µ_M]8_¬…4[DwÕï_8¢ bž!»¤ PEnÎ.•35Ü‘pœ¾×ÌPøWhmÖ½lËógy?d?¥–^¥á­UÙô/ÃHñ~k¥^x
+@€¦-«ß ë¶ŽU(6c]N¼sW5Ø«,iõ¢v9jÉr²,²óÒ$|óÚµd´>@LVy¼ó|ÅñÙ
+­¡ñ	©!îdC5Q"ðøÝûkÔ	`ˆu#Žs‚x_oj6É6L¯’L{ýóKiIîPl½~L’ÑyÚáßœ"y@ö!¡ãÓóO<ÏBí9°˜ìð@™ÒÖJ~’U»»n¯°@å‡)XmT£k°lŸ	«K—®Ÿâ€It³Â$?ý=S}4²üâÕôRñf£—tØ31Y1à0dÖà
Í‘ÎékõXWbÔ†àÖ¶¨auêŠ'¨^lБ™:«¼Œ±ñÝPèÊϘËr!&í¼¼¶ñÖô¶6Õ ©zv\ðenú¶ôN²?~«N»lï„Gs ò9™Ã2õ_qä»M+O¿>©üPjJåL$Ž$ƒÊƒR]¢rN…´`óHÖTƒž¥g¾aè<¥‹¤>5Ii¢(Š|¶.+C ‹îíœo‡ÁxV§pð1©Æ©Õ¤5ÕiE“¾”7dTOl(Õ5#C´ôõã°C)ÒÝÞ	“ê+¸j…·¬)¢H«yé\í>϶##/UoS/$mÀ÷Χ¯h F¿¬/SùtÜ*Tþ9tÒHAøz©ÀW.î‚צj^ÿ¸Òv2!ßmZ ÚË®V®y”Ýqyuñ;Ž¶,lAÐyqD’`Àõµ’p>ðíÉñ<-ÜýiâÄò¡´p:ÓóÖHy¢±¥*³*ÆéäŸÆ¾=feSÁ‚pUT¹ÆŸP‹Ä69aÀ²/ôf0$Bt#©‘&9ÃN¦ó7|RN´˜¤Ø§û§(V½…%W©ÐtòS¾Å½íüßÁŸÏºü›qZ¸”W['pâÊg=xœ›¯&ÔÄÃDþÖ›_-#-jvÛjÈ
àÓã™xZmAjÛ7Ë·>Ò3Ë`¿4æ"&c«èÔšˆ`[‘»½o¬GB3ìŽ" k <·/ù<ó5,“ò|¡]×=<ùŠ-dUªÙ¿-Âû—‹T5!«ïFxÄ„Âp;šCMÀ˜špõpÃ43'n¸è­€YàÞ;4>‘µw}P‘ùf£Lœná`[^hd$ùuqÍ”ééÉÆU)fý½ýDÄqD?_t¨.„þçdGDƒw¬ÿãvÜw[¤€ü_Šc<$à,ʈQ‘[9M³ÅQXÌg°áwew¾šºp¾E=h8¶ˆ
+î·Ã¾pY@Ä!BkU@ ŠÜ$\7fj¥?à%a³… í®ÐÚ±9ÜÊÒ]¥œú-úè[Rè~=ñ()5Œ­é
¿èRä¦kÖ`Ù¦ümi³<=\eXÚ¤‹Í퉡OPý<gØ‹ûÎò~È~W&1¼WßGª¯õ^›ÿüÖW¼ð.€QZ.K£]ËqªPlƺœeæ®j­KXÒ÷YTãÞFÁÛó€ó烞ä_›cµO”Xû¶ªžMÈÇʉZÖÈéÕì#æa›;oôÅ"!H4¡é3w/uìrÔäyXyû¹Høû©wÈ*u|€˜¬òe.ûø—ÿ¯(G_ÿO"BÁȆj¢Dýí§ëÖµÀ
êF„öÒÁµñuôô­xúÚ­’oùæ5mœõßR­Ú*|^¼LÓ°9“îÕ¡ùíi;C©	Gˆ¹°Œìja-æð¾Þ2Ôll˜C:9˜öçû–Ò’Á Øgü˜9¿ò©ß£%Dò€ñB_Û»ûžxƒ„Çr}-Åý€/*¹±”Žösä'©áÇá΂ˆÎÍÿÊZ’ƒB¤¯ßÝ€Îz•7.È"‡ó·LÛÊõ{±ûy6Ó›ñ"cË9–¸6ü9ª.kk4ÜC}4€×™R°Ú¨[Ö4}Ø#K–3A#Ù=’è{™H~çz¦ú<hyåÙ·õ¤ÿÌ^ˆúô
SæWæbñ_b»Ï¨ß¡Y¬üÑ´xb_eÅÁ8ÍÅ{kŒz¨#}Õ¾’Ä'é{û$Øà[3è­6f=b²bÝ`ȱ݇?ÏÖ÷°®ÄµݱqMÂêÉ	NM24¼Ø½&?/tKeÿ§ Í2‰ƒ-$3·î`s@ïúï‹¡z“‹!ŸMÇt´	Ãm‹“Ì« ]«B
0*FDwy»;QþÁNh
+‹&ä*BLÇe"eqÿ±õql·]Oôì¸ýÊÜéqõœy~üKœkØÃŽæ]ùr/›d÷¾âÕkšVžc|ã¢âçxYºèjè'>×'W¯lÈåo¼ZÍf•'׫zª4hÇzÉ®rý†l’qäÚ³NBÙÉÖ·DPOå Ô”טHH‰,.¤ºYäœuÀû±¨.!WÎaÂÍxWU|j’ÒYP	øq\V6†]ÁÇ%Þ'a¦®ÂåÅIÅMHžMŸ¢h(ÜöÄ\—ÔMœ±+VÆô±©#Í‚²htS;‡ÏøšØQ©&¥ù?Ÿð¬SàýbO‘O·Uj·ÒŠ;a5nȨžØP·jF†uõ÷Û}†R¹§¡;ÉVmÔs:ERY8K÷tªžÚèÂÙÂá×çHáé’
+­\$íÌ™b,áHû`¦¿cÐñ`ðϲO6r
+¢U_y®¹ßdIðù¸·gòϸÇ|ƒqF<F^ªÞ¦^HÚóSCÐ]ŒcE^¦ïè¥T¨ár蹂íôO®\Á³QÔ¼ãm¹ìdB£šK¾
+F–ËtËkl„s¬?ÁBÀÔú‹Ù9„Rv<êþæ3c/¬Å_óf
z½a …Ÿe"Ú´@©‹A¬Aò5§âò>êÿvqXØ‚
+½òâˆ9À÷w9à|ý ÇÿxZ¥çÒÙ•ù_uàt»ûJ^²2¼öÌä̤ôÀ¤òκA`ÛÜ©…°Á¤À5ßÍŠ	üûßB
+LÈPïÎY—˜l;UyB8Z‚+×(±òYWT{T‘ÏÕ#‘azÌʦŸનo‘# 4•l4rÂy^õÌ`H„'èFO?L=r›œQûn@5–?cj*Ù3ÙÇgÇZbý掚ä
¯²ÇÒËA‚žàÒд,‘É•ýK¶XVá“1Ð×}ÑÜBø¤œu-U­SëS=P¬g=J®O&½èù¦a—=gÇ壟#ƒiå+.â´m5®¶NàÙ‰Îzð%+CLµ6 š¸@ÐÞ£Þk‘Ek,RŸƒf¬ì^¡ÛëkEzpÕ·ˆå‰XS\úUŸÝMÒ¦7Š Ö®)‰O¢Ì’•›ˆá±+¾ZFZÔì'«ÔÝ»Û/ð´Ú‚Ô«n‹s>|¹f‹Àcþ8hÑDLÆ*K͵)
À¶?kgÞýŽ,‹>Ã×ׂ-•‰‚¶9ûʬô«³`þ‚‰Óm tè²êmbqÒ¯9ºG~¹”cwbúÞë@òEŽ„fÅD]Ö]xs^ïxû*jX;ù4ø_º³zxï	ZȪI¯cZ™ë3¨jB(8KÃŒð•™.àv)†-
+‚«ÿ9ОÐ.²ìÍ.À2[”{è·üø½	.Í´¼àݤï¼;­ÛœÈ[lAGõ‡"\Ë;böªš-&)6à÷à$
+›h$fNÜmÍ4G²Ý¡v$h|?þwîú ?ïÌ[˜.%ÜßÀ¶¼ÐÈH'ïêâ‡5Ïw›à<Km¿mrË)Jr]Ví¡%ÄÚ
+rJÁÙ-=zñ,ÙMºêp¹Eí´Ã.É”fä@+M¦ãÏ‘ªRÌçg爕â,ˆ~¾èM\áÓÈŽˆ,îEãÛì¥î¶ $Uå¾	ÆxHÝX‰
¢?¶r=š{—§—gh±j/jÞTPÞ+f$
ßFÔròÞ¦–©Oç)V•½Š…bÅJ7c'¡ü3>Ü\»¢°…>Î}ßîÊîa)iàaŠ.zÐpq
Ás›aಀ•B„Öª€]	¥H¸nÌÔW~ÝJÂ{]ÇA½©Ê4ƒóôh¢c‚c7èÛÂ7±6)¶aò	³ÆÉç7ÂfFÝ&fÿ÷ßØ)Ïæ(À™än%ÿ‹ =ŽSr¥‰¹ºW%éZéͶ¤ÍüzÿPRjGÏcͤÕQ.Ö±À¯QåÚÒ{xz¸Ê°©U‡Ç_ž ç'!t€BXdd›w¢†›ÇK3CéàÈ ›†h·ýœ%Ë#·¦“k:ìKÓÉ‚Ö¡¥+™¦ Àxέëùüü®Lbe®£ŽIC÷¼+=ãå±®eý\(:¢´\–[º‹âI Ø‘i%ÊÑAÔG–°¹ó²J«ÆÑ”„qÅqøÐGø˜–x·­¨9Dâ¢ÍøG@ºûW®©8º4-cubxËÛ£›ŽíŠK4üXs7ž¨Û¡ŒŸ«ûûÓ!Õ¾+Æwž05°ëqI!š“‰´±Ï·ÅFÑÂ+vÞõ—DBh_Ï(fî^êÀ_§A¥¾~vUvT©Tî¦
+7³1ìË5T'k@Û¿=kmÁt®F¢ÝÇèú>¨6Smd‡nyÆÅäµÕò°òëoíëOîTêø-EùÊ\ëí3ãC(PŽ¾ã$žD„ŸÔYˆçÇS˱w$ÉŒ­`³Õ9Àmø½®"Ͻtö¼˜ªéž)âþp ½ÏŽbÄ…2†èõäÿ¼z×k÷Yƒýgï{†ÑûI«.ñ¹Ÿwÿêõ õGðé©G9ÞïÑjÚ%÷£¤G©T2ø¼e˜»2}r;Á·_ïÇÒ=v†OŽ
o}ÅÔÂZ}u¿RMê—xhx1[‹ÆÞ*Ë…!±ðØ‹éÔ+öñ“7Ôߊ) ?Þ¬Ñ	8¼"ScßI$TåvÑ2ýa¡dµØØ-†tr-ñÓë1¹9Ÿ]­Îå-rcùO£[Jˆùÿ„¾«kë!ð“äúZ—ç^To5¹¶û¬›qÈUKU{GÆP{ÊËÚýù(Y·ªt™{PÞœéÏA¿‰5V<ÚJó)j- TöÉ뿵ïX'ñæÕNOß“ß
6‡ã‰´9„UC£§6(ô7n\(Dûs˜«‰÷öëòl»+ÿDÆ‹r1mi£÷+ï[2RÛR×ؿ׼û¸xy
+Qä¤a×¹Î'}úWÎæeJ›˸œõM”L(³uóæŠjòAlårI0\Ö>Öh¥†úh³/&¤}©M¶±hú­F$–1f‚F¯:z9Íö/üÓôQéxÐòׯs÷Uã…œã¿s%![v[>d4Ø>&«êäl*I¶¦t>Ø ÷Ü¥m 
LËÑZ–ûÿá‹ï­Ö|¬Û
?ÕÄ©¼
éõ=¦Ñ®ÑÄ:ÿ¾ÄkƒM£$_²Eå¿uðľʗŸp‡—öÖôþ6MFú·
+0a9•NÏöë(H­ÝÔ‰ï8Û\æ\’ûMœ’P›|odN1AB¸ÏŒ’œwqLH{qT ´iV|-ù…uŽ%—9ÃT§ÉÈŠñ¶fÍGlÌzÄyħÀ§4~ƒ±ó}A•w"§âš™Éœšdhe­gL~^è–Ê
+þãS]‡dZHÞâËŠVÙI1Iñ?]ñOÓàpyæ’Í^ñ]_|Jƒ|ÆÔEð,O5뤵´ºMÿ‹ÆHî›}dfsÁÀæ€ÃéÃ_ô;B#š“èu›Ú;…K"]º™K=„`TŒˆîò4kv¢áŸ=œÐ÷Ç
"óýN¡N]žF]y;-VC‚kqµœ¤¦]8­ñ.­Ÿò«ˆÃì-ãíÀKÕ2º¿“ŸÐ1†3<LÕT„˜“ÊDÊâã÷âØsºžõÅm牥Ïâ÷,%òüå>–%Ö­›*Ѻïä^+ÈóaÙ8·Ö)¬!ÆøcÈÓ™¾îGG´"ÍÕ´ãk‹ÄÞäFi@Ž³´Õ‘Ã!¶q5ÃtÛ*–±‹„çlTv·Ïuf»teM¡áÔÛYÙÓð²iÍÔÍN|³N®CØ×Þe´‡Ì7N³KôIhÐ(“ôAäç2Ø9â:Õ©{ œ„¯±s<ˆ ³Ýßʧ@œ@½´‘•[éA^Æ]a€vK‘öš"D#-7U¥qéRáª?Ž0Ú£-ý’¼¯Œž×]µ5³-6X\6Ui²Õ%.êë=M6\B®Â™‡ð®ªøÔ9¹²> í⸬lºŸ“J¡&öS[x¦PJ`Îê~`nqƒe?i™L:Å1`~ÿHRˆ
Œ|H´ÜI<®ÙƒU£ ’\üÀO¶´Órʆ
+NÂQ2A™×—’—š!š#YÐP¥ñ•¸3µš%:V¬‘õOF‡
+yÐè¦vƒ0í)­¢OLWï~&FWÿ{ŒªÚÌQ“:ÌAáœår‘4¬ÉÌ:˜™é8šy™í06ñქDl=tC…ó®íK­×ÈR#ýE¦ÝçÄž?žs,ªÔs¹	vÂ8jÜM!­ sÔŒê÷ó«ú¤oS_$v¬Ú µ.ætŠ¤²0p=–KyCkçò¹w%íö%‚Gx{_‰ê&Ü%ö1÷9½g v÷·»ÈDGä¯èsžñ€J*†þÑðºóèI!©Í>™¯™ß³ÓßÏ9G¸HÇ…/ÄXßëÀQcƽÿÀýƒyžläYª¾òA=o£È’ý*ïmsΛlOì“ØCç‰ra²‰ô!%‹øYD¹(~$‰²V&‚)R¶s&_õÈvû„%2©ŒÿyÁ–ž_fíTâùƒm“øâŒxŒ¼I¡Q¼©'û¦†½ºÆŠ¼QÃÍW¨MßäÍo=Çõž'A¸Ÿ2{¢µeÛÚoÅÈ>„[‘k^Ÿ0êˆs꫱7_·¹|öês~+„âÙÔh+ÍK¨/bþ*»­MÅæÉ…Ö͉)¾£w)–aŒ1‹è‹ÖØæ™E~Ÿ„µé¯r¤ì<xÉá6Ñf
+Æ^E—¾ûÌ*ô gÂ6]#ÊAgÙ¶$e Fj7FÝt²ß•±NF7ú?vìÂmú”§×âQ>tü½É³¤nZŒ9Δö£í/D©u€O‚E‚ùjSÙù|Éãìâ°­gùÙ
r<'óîrÝøç@“ãð´WÓ¹¯7ï¾êÝèkë,-sM*Zv
¯«áû¯GÑÒ Bó3©»®¯û°”ï׳øb”ŽV¨cÒ›·e¬ë™Cà椊„?Ç”¼ydeñ…Õ…Uõ*U
+ùi‚À«¥O}ŸUj£‡	å룄˜ Ã&²3-Ø'vªò„p´V³ü8Ê^pŒ4˜¿1á°¥ÂÑ(¡èÇã¿×ETC†îgE&b)e7£°M±RfcØ\þ&<U™qŸP=ù²þ®¨ö¨?ƒ·F?Âô…‰Q#2ÝIMÞ?F]h0,7Øhä™'ò¼÷…ÀNÍŒž~˜zä+%¢ëÜ8û;4ˆëÓ%¾%iBdiùì´E2±ÙîJª¢idàŽã\¸<TŽFï–+—´«“'1sÈ0ÒÆvFgÄ"Ìð€j1~ÆÔT¯f¯“Γ´ÄçÑ)ÕCy&“:¹‹‚!ݹ½uX?7ç–q°¬ß;$b½³ú¿¥„èî7³üÁ)"."ÅÝ| ÅÜÖÀ‘ªÑ½DÃZÅ ‡_XÈ*Q_é×WÖ}•CÏ@q—znÿ?‚¨íU%êZªG¦Ë¦z EÎz.”AžLgÍïQÂ3zΓ×[#FÒ×V\ÙuÚjAqœÝ¯ôýJV†˜wl…Ñ#'`¿:+ƒ+,a÷ì,ŒpRv‡ÉHVxO,ì.1ˆiÒ^1ô*hM
+pŸïбŲX£FôJgP@=@)m.€½¡[¡Ö?<ŠÖX¤#ÌEż_«ËÖŠôà·s
×°¦¸éª#§š¹Qn	]±ARžY…94UÄ/ •À,,€þŽ¨€c¼׌TœÁX·€¨Ià3ýç[à­ÆP~ÊÌ™‹.ÐMó^­Ò¸7+
ßVa´Œ´µÅNKµ4§k«^ýu©µKÜæ|øoÌÆápпˆ˜‘T–‡wRq~ÖΡ_¯EC9Ä9ãüiã<,!k+ºÝù¿reãiaí56ld@í?xw	ç°!Ô‹ªîêÒ)Û?=ŸVéç>X|›³³Z7qr"ë‰EõK{Àá»Ú]èÍyÉÚÄâ¹,CriŽüo5Æ2îÄé¡Ë€ùº•1iæ>T>O›…-OJCÆñì|zO-<Ž¢YrE<f”ÄÔpC΋Zhž°f¥@K§ÕŠÌ—ˆº±ºðæ¼ÃðëTÔ°vïhí¾i{ôðôI’CÆ´/Ë8fMÔ„Pp–›ý7*/\ÝìRâ…­õ7ù7¦'á¦ÐLå|6þëénÁˆ¦á¯R^HJR½‰Ž-åe‡b(ß«Qi&<lu=ZKã(r½!½\yŇ\d¶5öÍsåíg\‡ue6ݧUÃev'G«%¶Ø‚4Ž÷D¸‹2vÄñI2†Ù=0i0
+¸w¥
+¦|‡ù¶ÜðáJ`¨p
+¥Èƒå—3^OƒÔQöC²í‡³ñIWêÕ>Ôˆãq;e>)'ZLRlÝóÝH+ÐHÌœ¥Ú‡hŽ:y§_ìHÐø~áîÁé]~Ã…¶-\J¥£8qe½<NÃÉÙjƒV­!—vGP»PÕ™ò÷„”Çy
>Þ åòE˜2¤UâјaóÅË*”Èž
+Ûù#<bBa…8“M¯î<+Ý8x–ÚcÚä‹R”京Ç_J•2*©6䔟¯ZzôÿX¯šiÉàoŠÇu›\5ÌÕ€VšQ$Û†¸-mëW+W²J඲´ö“G[6®Œh²¶"I‰0`ôÔI8xøêö˜nðºqbyÞZ8çŽ÷ƒ?I¤…ÓÎÓ
7ÙX
 üaÍš,¸*ß»
X6ÁŠÛ«ÅWÁq@Hª:×a‘ð§°Y~qäz)ö3ë‡9„žø^†^[ökz[äPÚ=;.x¼7}[z‹'Y‘?ÎÛ'Ó6ùB­·Py’Âïô¡¶rÓ¨›©ÑS3ÎÐ,Ô^Ô¡¨ ¡VÌH£"Œµäù¡Q1OžÓR(¬7g	Ä—”nÆ8N_åf(|¥4¸k;’5ê9YY÷i>÷mÔ2„Z &+²^…÷>ìöâ
+ØÞöŠÚ†žw2¯”¦x|àó»jŠ0D´ŸGY}|ú£Á‰ÁÂRÒÝÂ	\0ô½àâ(Ÿæ+ÂÝy7„±IºW>m0Ü…µ®ü§”™ö.º“‚gOþ1ù±»ïÞLÁL”“`ÿ”2D8ýña˜\W”ÿÄûäκÅûdæÖ
·†‡ÑBã:5¨"ßcçhÒ‰hûõÐYÆÆnÍ«™nlRq=Âù{‘Ón™ÌŒ §LÌãþ(ó£­R
+ƒÑP/ÕÜJ6ã]z¦áì6ÏÅ$KQK8»8Dtc½}ÓzÜ–5¯8»£*_Z´¬À*Aˆ™4Íca€ã/#k{p:AG¼ú&ŠäWoi®Jϴχq U‡å<ôã ¤Ô
+Žƒ4ƇU·¢\±C¢ש¹öðôm‰}O>ª“¾!]ÓNŒÓ	¢S»7BüBÑ°’wÑÞ$Å/àµW)„ŽºÑw
+Dûë–ÏDª¡QaÅŠO0€î¸¿ÍªòÀÝôb4Bè„°È$È+îY+“–f †ÏÝ]>+Ðsç%J‹FsQ;ÖtÅ0–»±_"WV/Q&þ@\Æ%'‘ÍElE}/ë3}¨§ª`—LzŠçB}3m•4oހʕóMgœRP§ÐŒ+Îáfùúq
+ójÀº:ðGËïååA˜ÄÊA[’†óeVzÛ×0AÊç¸P:tYu¸1¶iÙ’]­?ÒJ‰¿‚µŽ1}oû y˜AÛñ
+’hOhYvè`£J³tÕ~|ЊèZ^ƒpàRù^“ÀØãNd£6®
­ôÍ.ë‚“1Ž{U ”K‘¿5â—âí½Ží-1ðsGMrˆÙY‡íŽ€ië®AOpihZÆêÄð‹«[,+þÇ	–hå°æn!HM\… hoßo»Æ¬»)ÁÏ3VÎv/Þãû»¬=8äÕDüÊ,§.}¤Áà¨iS•EPkWšÊ©QfI
M«_#Kë:ë»6B·aV‘î!`j}Ëâ’B);uƒs—Œ¿™Vì¡÷3ˆ„=оƒPÌÁ¼É%/YÈ^{frfRz„`RŒyg]®0ãnÚÌXîR`”áèEŠ~óá!&d(ùg‡¢ÅL6À“¤Ž²!-A›å¾S‚Waüìªì¨$O¨ÁQ4n{b.Å‹j¨NÖ€›+czÖÚŸèAŒY4:§“Íé|Ml¦ÚÈÜò‘õ:UOmtaâaþåý$þúIØ.øf‰Â1þ$ó0SÑ¿hö0xéY©9Q¤¡²WHÒá2ªx„ò\Õ½—Õw0· ù}ùËÞ=ÇËžÁ¨Éí:ZŠï‰¸ËÇfÛ†P aÛH!ˆ#"µ²
Ó“¦‹îH'4ÿQqý<¢]t5tå¥Ù6d‰ü¹^-è3ÄåÛ=U4
+í=êW9ð‚C6I¶€rm×'!âêkÕ"(GÀ{·rÚþíþgADƒgèñe-IÏ!RÙáà@gƒ
+=Ä•d
+Í÷Õ&ãeô³Öó²çÎÃö¿ë’K\/D}zHˆ§s¥s1€ö¡1ÓéTá	Þ¢V~æZ<1¡¼ìîŽèì³»F=±ƒTŸ°äŒ_Ibú³ó
+lp*ÿo#îãÉ÷@÷ŽýÏOŽr¡Ã¿Ô©J,ó[UŽO¨díeÊ-kdúävŸs¾Ã“¹zìž$Þú
+—µ™´B{iîÔö´zzØ<}mØI¹òs”¸N‹ôá)Øm‚>/^&ç‚X’ÇwäÞòøºH“¯ÚŠ­DÒXFv5¾˜úêc¤šÉ3ðÐð"b¶"‘¡:T‹Bý2­"ϵVñÿ;nµ£	R@~¡E¿peD¦Æ£’H¨×ì’nei ÜN}˜}t£)t?‰öš”FØúˆÑt)rS…»k0âS~¸º×.¼,mÎRËèøÊÞ©(ðÀ¿dçÂ_Èw­­ZèäZÿ»Ëbor#º G×ZäÆïž[¶”
ï:ãaKÖËBý6*;Õé´3Ó:¼¨Þþj×àáeÝ
+ N ÐZÆÄ£ú®/c ¾‡@;«Æ{	M"Ÿ	˜•¤‰Ü¶ú)þU…‘GmߘðI^ÙFoqëE+⪖ªöŽ‘ ö‰‹©çïP8²sIè/ö ¡>%σ‚>cj¬x©”ûRÔZ]¨ñËc$wð2õíˆ÷ð'Þ' O#‚ ²“˜+¯A»¶ÔNRS ‚Øö…‰„ØÁyÛDïv˜ÿø`«ä]ÑÇÁh–C—NÿÑ·œž£;£2lÛur6ª†[S:lPõnܸPˆ&ëæ-KóñþËùØk>V㈑äbÚjÊù‰ã.s.Ió¨NI(Ã>¹2'–®!\éFINµ¶&$H³‹¶*PZº+>˜òÌ´GœÅ’ï*ÝêdEöÒ[óVöd¤«¤³­c(³eëmðò¢ÕU:³(oNúé®ÑÊ”+‹m%÷š5˜P*{êûÑ	Ôù,‚ºßõ›ù£)ã)ålÑ
+å^ó\<²¦rR€¾å
+Òg°}¥Žgs¼%Éë\Nô¨J&„×´÷sE5y®Ø0×ä’`¸±|±ÐWéÐ:{^LUúOšq8ÐéGŒH1bÌŒCtôr‡ñ^=å»õ¢Ïð½ù³CæóªÛ°´Ñ)¨uÅ<4<†–£Ë†co€ëÌžÖx‚l†Ëúj›{öÇ•jáEš‘oV扊‹^§¿áª*ü;%ÛcæJB¶ì¶|Èh­|LK<ÉÕØT’"qQè|­ ]ó¥WÚ]˜‹¿´1<ëãßÃG±øE«~,·•O`¡Ý®Ü_?;¤;*	Ú*wS
•É×–…vë”*» ïÃÑ»¸î:W#Q
€àít}T§¸2Í7²ceÏ÷z4Q¿A¿•tãa•Öš[H¾yŠ×cêý•a‰3#à3ñ±
+õálšŒés`Âr7œƒñËPG§
žÉ:@!,2	2õQCÃí«—¯úŽpdPÃC4ÕðNœëŸÕSÇ»v«çêAkކܛÂS‡±`‹µÃp«¸Ñ¸9ëš%9 +øÞÈœb‚„mƒ9%îâ˜=öâ¨]u8Ò¬øZïêJ3r ›¨S	ÿ݋Ž4Ö5™5o*(o›3Ɉá†#j9yoSKÚ©ýš
++ÄÐEÌÉ1ì%•¿Þ~—
+n
.Óq̇ŽØ…ô•ò•SþSh&ü>ûú‚7îDSþÙ)/$%)ÈÐÊGΘü¼Í1‰áÛ¦ºÈ6´HC≺\µÜS>Íò[nxþ%0T8ÜdÏüÅ—/©Ïj¦{¯YøÍ×Îöª¥u
+äjDÿ¶“¼¡Ù‹	¬¯’b’ÿ~ºÿž»›]àòÑ9‡¼ÿº¾ø”62 ø‘<µŠýXžjËUwuišã‘Á+úÈÉ]Ä–ºs*©Ã̘©%¯wÛLcöv>=À©˜GQ¢9¬3Jbj8¯ÈgË-4OX3Ü «ÝäÌæŸ0ћϛ¾õv„F8);Íê$+<©v–Dºi/–z4À¨8
ÁùhÖìY,ß#z%½( ¤b™P
+Ä`‡@GT@¿^	åF*Nîƒ,†Õ@Tªp—ðý£pØc…(?e	fÂËh¨÷€/Øi\Œó“Dûçœ_œº!Œ2ºòvZ¬†Öâw%UQº2pGÿ.\*G#ùK
›ÅZÛÇ–·dic;#½bfxtw•×~îšìà>ìÉnk`ÆUæÐ"ï-ìÍ¡,dȦ¡úå¥k°Ä¯é	 ¶Å=7ñƒ‘AT˜·¨-;‰ˆ‰ÙÛþóÙ­æi!÷—ÚÓWƒÙóXJùå×|1J±G+T¿iÃÕ¼Vû¯ps±REB‘í~±e/8FÀLÑ–þXÜaæÞtíÿÑå¬*¯Cw½¬1š¼•ßX¨ÖŽ)3¿l.¤Â¶ÁÆ»/aÁŽŽuD‡·uÛÖ•¡ÕŒÒ€>{u·?›Bqâj4›è«T™1ÓبìsƒêÌkèÊš_ßµ®	½â[¼P#…5•#àÎ:YáÄÖ'„#•‚}‘;va¸}JÝåq¦:~Ðê×R7-F’gJ†{ßø™«²¯»ýyÒ‡µ‡œø{œA†­<³¡Êu…nœ{–õ’нP;õ‚ÕÓd"­rÙt·Oö@%Cæx
]Ã6©vÇl¯

+Ê9¾YÊzžœË|¢"ÎÒ?ÊY+Aš)[·¡ôd;óBœÚFÈñ²î‰KO¡3ø*q{§£<‰S(€%€0gu?07¶Ï‚¼‘ºÂ&ì–0?ñ$)DˆF>$ZnªWâϤßI.~`©[Zç9eC#¥ñ³FU
m
f¦Çf®þNü€9ÆVêfLÂúM²ÂøöÀ‚þÏÜ"6:¯Ì÷Wø«Øåd)!³ºwj{Z==l°¸lªÒy·J\É'Ëzþšl¸„A™/ýA,Iíµroy|]$ÇÙmEØ"i,#;”_LI7¼ºPn'°L°:ßš:‘ÊH{
+MJ#l}Dæ:š9§ÌÓ»q§Ž?\]åH^¸g)ët|eŽoÚx`ñ¦¶ðQ :”:ÀÉüÀÜâ2Ê~Ò/˜t—bÀüã¤
øu¥’xA¯ª[@9¸åžqu»ä‰™"°=$DÝ·Ü·–@{Þ–çú*þŠoQ+?s-–Þ^vwGŽtv×Ó#ÖÏ*ÁXrF¡ª1À}×÷	68œ™¢d‚/³393)=B0)F²½ Wÿ7mf,w)0Jþt¬E?÷þžŒ2ò½ÍQì&`ÇRGYž˜®Ãüô¤©¸:ξq¾üð}ªŒl	|3Êa–÷§æÑ4{<ú¢Úƒ’Œ¦RÞY¥$iþU<By.äÐLŒ®ãöI4©4…¢;t…0‚ß%×:ä?>hE…t-/Ï8p)ò/Ç`lÿ'2ßWˆØzè†ûAÇ–G³¤$¨.Ì4¹á¹Óc‰VÓšîé—+g;™oÿóÓVÉrä"~ÉeÝ°RîpTº§Ä¬(»¥MeÚ¦3ªˆFçŠQ§Ó•!~!æXIµæoì™pÔ¥šBG]æµ"ÉóûKé"UÞ¦¾HìE©@w\Ñè	Uy`àz1.cŒœÆè¬6¬°™û—°T
+ÝU0Å&=Eý!°—¸Ä¹o@eÄ÷¨½N)(ÝhF›gþ3ò}¶÷5`]–ò†ÖÓùo&î&JÇ0ñJ"Žðö¾ÉL.¥JñbórgÎ]ìó2skˆŽÕCÍæ!ÿ”Tá¿ý4iþv€é쫦«‚Ó":¿Ð°ç=nK”ÙÓß¡-ZV`®Dƒ迾@ÿ™Ÿ»³8
+®­^}EûÍ’BO‡|/C/£{»=£ƒr(Žm“<^•°£=ˢƑgãçò!ØÕ(²Iaù‚zÞ[9çTÃÚæ“I”u’¢¢õº	õ¸jB-›Y/Ìõv{qŒlo{EmCÉOµÙJS†<>p÷Ó5E"ZÁ­+ØžÅ;­†(Ó(äÂyõBJí²ˆoPüHy¬LR¤qæL¾÷ìëJdOãòŸ1!¾ÌǨÙC\˜¸û¥›¥Y%p[YÎZ{Ç­£ÈWF4Y[ªÊ0zjª<|u{L7x]¶1²o-€ýGõïÚ;í6Ùðe’_¢e=ONë>Qgi
+‘	e¢›‡®Mš£Õ‡Þz2“÷!N‚m#döYwÊ«©Þ—|¶‡ŸÜö×#¤ˆ¸ˆ3Sí€3W'~@’cÎ
+u3€&a}¨Ya|ƒ{`AénHÙfõ¥|Ûlü2š?Ö¼™#`É
&æÉK,n¾s
+o:øñÉæüVÙ¯µÐV‡–M^Äá,TkGš—Ñ6±‡Ra[îWŠÐq£	^(ŸÌ”ÄŸpg¢þb‰kBŸÄA°Æ“;¾\°%àü¶S?huå)•˜#I½%C³á|ÂR1Â(b0Í ±­* Ñ/Šü#'wÏCä *U8Åxðß8l¿Ì‘¼Š3aë…4Tõ@Ιlº.F‰:µÄå?wM†…†vpvê7»0c¤shù˜vèÞ2d„SÞÎÉ}üÜ»XbÙúŠ[ì•ÎöÏÆ®*‚$ίqHÊ]Œ.ÔnŒ§èy£7<œ*Œn2é~ìÅ™Úé5S³Ù¢|èåg{UÜ´r5"ñ[Ç^ê ÈbK]·ÚïfLڜٵã&¿{;`ÚL­¦Q’V—%15ÙŽd½ë˜©,—nÛàrˆOê žŠïÔ¦¯ïøÛÅÙ}G82(Îï¯äx'NûÁä§íÓ€;Ûýu®»oCnÃaɧÍÖ0ËàËìЋk””¹¹Ã—ê	DÈþCŸ5’²¹§«mÚðM›bh¬fê–vœÄÑÀo?Å7ˆçXZæšT´ìCKßëCŽ¿¹@„ûfOk<A6Cë}5ó{íÄ5þ¬Mƹ+sÊEË/†ÝÑþU	~“0ÞàWn¡‘“R“Šmɵ§ˆŒÄêåKÌ;ûJÉÀÓùïæHÓ\w¥Ÿ¦ˆ@pø:°*ƒÝ\è•Y¿5eòÈÊÿ·ª÷T'ªïÒKWž.ú#ª'Ô[$×Ë[(-]›LyfZ­NìIùàu2¬{]áôÃòß‚šÿšü6æü/÷.YŒÈS9)@_üi½ÀX°ÜG½·^œïÊû.'zT%
+BåZõ·¬”²‹Wåpþ‰¼à'h-cbß}W™¿P_Í “Ûc³Š¨†ÁΊLÄRÊn[}š¤ÌÆ­¸áLxª/â#ôøD†õxoP©ŸAPYÇL›Ù®Ó[j')§PAl{Ì…ÊBlî²ã"ù;Lñ|0Ûr‚ æíî4K¯Å þzïyáAMñM~sŒ~™õ¢Fd§’š ¡~ŒºÐ`,Xn­ÐÕ/Nùeó=*œ‡!ü-ôÕVJYË¥Èz|"Cô<À¹À(ÚÁ®(¢í&ÃâWç£5šÝ(®6³fÌe!6wYÿò“&ö>ã9APsøw«Ùì‰pëvh
˻JaJ҄
+ÈÒïÅuŠ"d¯Á”IYÒÈÝÛ¸mx¨ŒÃ14V3uK;Nbæ`¹‘ìŒÎ•D…ýop¥7ÞÆÇ)Ç„E¸ê„ÔÝDFbuü«f“ó%„ê`çòùs$ç.µ€ÜÁSD 8|XÉÎÏà.‚tÄ¢ÑÔbü‘µ¨CÌC;8;u•Ó¿R·4†òL;to2B§ogê°~nÓ,1â}E£vHÄg{écWuPd1« Õ΄Îmù3&mNâÔÿѳ“H0m&ɉØS¦I+‰Åœ–”âG2ÐûL
ÚÈÅ7ãp9ÍÁn{åŸRD\D—§ø@—¥±? I¿gˆ›´—@¾°T¢¾>ϳ0®±ú7†ƒ$€â3ôÜ>ã6~M¥Eh¶ßŠ/ÉÉÁfJbÁ8½€Q1Ê»À!ÈÁb®XcÇ“_.Xœp~[§Î€‘4´üšÄLŸªÐœ¯×þ>aǪJÉ´IŽQ‹Qô]Šô\5‚!˜Î‡Ã¢™fô;³¶FŒ6¹³¬¸¯ê©Ô‚â%§C8õ甬-îد.LŽ\óÜÃÜ¢œ8£¢g-³íØß‹ƒd¥#¢£†Ue=5UÎ>´³‰&•< [–Y¹˜@ð­Éô¿FNÀctVVXÂóÅX*à¤ì¬ðžXÅ\b
Ò¹ ¼bõTÐ'šà4#ý—y°[Œõ”Î0 €;@ƒúv	ÛSÛAçÑhXý‹7«Jâçá„Þ˜-+0„W"aÏ
tÑ_ ñÂÁÓ×€WØ/°‡¬z€RÚ\g_¶_±~x	±°UF6…Š>—e¾K‹±	õÝsæ³}QmÏIFS)o¢Üº‚¤!²rhTfÒþÒç¿Ê+ç‹MwúÅ›½“¹ñ÷ç+Hê9r?ê¼à…X)w8*]ÝbVÓܨ¼mS—UDª•^](7X&XáMÆe$³¨%Ÿ6°"sM’ÝfçÓ¶ÝG‘. ü‰$…/\½šû:>¼G¹m
+<0ÂX"àÕnÕK ³oKý}E¹¦›‘·˜Ko/;µ­G:;åçŸHkéî,9#ÞU–`°åõŒŠnV£þ¬Âuuw—œ–wh SÖK¼ç0êO2w–¥ÑøíÞ…'‘ßའc
-?¨1î¤4'âü±_ÒnĹ¿øMø!V.´!5pŸ–Z?ã—íõN!´ð²yÕ	ð…j 7wÝ@u½Bú8…®1¦s¾C$Š†8r•rÛåÒÛxXBÖVi§ïcä&ÊÛÒÂÇjlØÈ€Ç~ðîÓ}BµIÁɹR«,~z#¬ÏÖÇé°“EÿÝÿÉWðC@sx$ëÄ㜶ð!¹&LÃ!܆_úDsÞ{¾wýüF Ü6Â,è+Ó|°ø+{8{2´n2âäDËŠ÷–öß2k©ºÍ‡ò©•ÙoX† äÒåÞj<‘dÁ•Ï_‹ï»ø},íVöpöduÜ<dÙÕˆ‹	ó1ñ'£d<ÖOi‡ùO7¯Þ°@Õ¹סÔx?ÈŸ7ƒ¾:Ãi7bÒÑ|¨|ž+Zž”8†ÁK-‘ÿÅøô'žZxY²äŠxÌ5•µà† ´Ð!}ÌW€–S·kíúXǬñàñÈê¥xȯ ·
<ûbÿN[Èx±žÒ&ïžnC¡}"€·o³_µð~#nat›	*…3
iiýÑe›ý˨µ}ìÃÐÇaÒöõý›$u’9†‘u^‹pÌ,šµ à1+
+çnT^¸§Å¤"a†,H	pä7ä«×¹«ð°„±¬ÒSÃÆÕL‰«¹™“ÔØ­“üýÁ$»ú„w’Ÿo¤K0XüôFEƒÙ&G.÷nïnQNßQ½˜×øláËÏ2ÜŸ
QßC¤¼”¤gZ×ÊÄP£K¢ÒL xØêz±“ Ï};Šã§ã®ý†€æ4,ðHË•Û%qýþBoL˜›B¥¾éˆ:æ¡öaîçåŒ@¥l™XÍV´(2–ÛPägBg¸ò—¸'Èqjñ‡æ×ÇÎ$¸êÊl§Sª›ÊìNŽKJq­hó&ˆmdì•ÿ8’ܬ4[áE™ê
+êî3%1îÐ@¦±–eÓ`Éždî1W,¿íÇ¡,N8?£Ýg@ÆZ~Mb&ÁUhNÙå¾d=>¯z`Ò`mîWQøïq¥ýß”ÀMàW×3f¼žµ¢ñ†yÇ{ÿ’®É(·|µ
ÛâvÊ¹8Ü•ocíšíB¬\uBjà"#1´~Û3Ç÷œBu0ýyò·ýÔ@nî§">€,êg„épA:bQæ
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc62.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+¾pC¼	ÇùqìJÉ=iv€©x}Ç^	áe^Î2˜yf1œEíëèz¤)Åòj|@Ïb+Ìï%ng4¾pC¼	ÇùqìJÉ=iv€©x}Ç^	áe^Î2˜yf1œEíëèz¤)Åòj|@Ïb+Ìï%ng4aà>†e6“ïâÅ”zÒì4Oðú“¼<ßÊ
+¼d-òÌb%ŠÇËÍôUR—ùÔø€8"ƒÄV…ÃJÜÎhß!ÅÙ-T“)ÞFG»š.戇Tâ">¯âOVµ‹ªS¹Ï* %Žñ{R¾„À$3
+L¦}I,o²©\ÂÝ|Ê$l;ÃÙ—5ô¹Å:hžýé;ex$£‰eÈZù…ÄJ	“‹‡õª¤3ïµípD•¬›”¥Ð|­cRv-wü:¨{ÊÉгºr7…”ü;f-Bì;Ñú€ãõÖL~`oöß‘]lUÔ÷‡Ût±Ëæä£=B—¯6Z¨,;R¡ŒŽk)'\Ñ
¨ÙD6|CÙž¬wI¦oƒT@Jÿö¤aHf˜Qú’XÞyO¸M]Ô?AoÕJ¾ëE³_§Fxuno‡Z?&‡Pžïr/—óƹ«¢{[ßaäiÝTwW3Ñ^·û(Œ™§ø"‰HØv›¯3j õo—tÐ!çÏvÊðH[(Ê>´ï•”;÷IUfÃwÇ:àˆ067E.+5W½'×ça5AñbÞ	ß Ï$ÈáôʈŸ²±”îAºj-”ð¿,–q¤WÖàûí|£1»zü™6ùUnâÄ9x‰øGƤìZîåtM
+öþ‰(½{iän5åvÌZ„Å"v¿é™Û÷±˜üÀÞñ:£?ºØª<µó«è‹ÑÕF7ÙçPSõ"<´@,²Ô
éþÇoH"(ÒSe '(qÛd½Æ-Ý+6y¸.4ÈÉCúÄ»:z‘8gZå¶á[z„3Cl´MXv¤_0ÖRN¸¿&M¯ˆlø†<¯!Eî’QÞ¨€”ãñU,Â*'Ì(-¢é9°¡òžmå
+›pÿe¯Š¡
HÌ4<¿$΢b[Šñ–eã9ñïwvoô`B^Ek|xGØÞ¨VgŒÝ.âÀÂõ_„œùY:šºµ&~‚Þ·”aËŠ8{¾SŒðêÜÞ´~'L6 !Ãä^3û‘oKYö¶£ÂÕÒ§¨î$®f¿¼së.P„ê¥öšw™NåC<FmÈÓ–Y’¡MªwÆ)3Mn[8gÔ‚ ±ŒŠ'|®ç´ÿ"a”pœÎ@71/SíD­ì+CfÔ@÷Þ3è½BÓƒì‰ý¶P‰|uÃ.75$v&ó’ªÌ›î“tÝ
`lnŠ\Vj®>g‘#ò³™¶+Ò2ŠžÅDÊ·Eh§ë«þ+×ã™W{Uײ5íºH©a›ýΉ6ƒ	i„ï4Áf£¡¹OÀYSN³ÓÂj‚›Ä¡£@ƒHßõ‰
#y5Á‚iÔZ5ýcX1âU®±ÝëÇø[b:kôå/lïªÜÙ• rððÃÌÖ‹€¸=ÐO
+JL°e©u“¤[¸kß‹ˆ±_k3QÀH„dŒë\6}cÑžP´ù>j È÷z—;펑UÅ´Á×èšñáPgöÒÕÜ.j×ì…´—DìcÏ/:«ó-å¡8ÿt[~i­Ixwû&KÍþ¿·SþŽy½Úë«ÆT>€RÏuV²›½ôòA²­ý·CÍÂãhvI|œ':†1)±X~¸™
‡"Ûe؃Œn¯Ó ¦÷Dx4u€XyµÏá“ÞDP¹¦Ê]NPâ«Èg‘Z§"Vlòm\h†é•ktô?pδ×qß2°¯ìƒþ	Ø?I\DÜlOû:¦íƒ§¯+8K,™š± ÆâϽ„ˆÉu­åú©‰zr;][ᑹë¶ôf†Øuš°ìU¾
+`±¤œmc4LšC
ØíxCBŠÁ,9¢¡6M5ÛÿªX™TN=…PZYÏr}_ù!Ú„
+%:Ñn]I¹ôÃd?ØÒwÊL1]Ñt}Œ¸YU_“=s öÝ~Öoªó(!”V•;ä¾’z—Fî×+àãÊC	_*…hxcHY,Ķ	ÿ1Ê2ÛrÿÃîìÞõÀ„¼ŠÖøðŽ­=¡M¬Î§\Ù™÷¾%ï²id4£_ÃXΦ|`LlE
+>C…¼ËΡ/ÃÓ¾w¡
Üt§“ñùg=Š*„øS'ÐŽ¶Zÿ²;Q0Kˆ†t)iwLü¡s5‹	pöa¦ýÉ¥¡&uüN˜l&]B›Õ¼fë?Þ–²ñq[™·,¹SMÁHAÌceæË\ 
+ÊYv4ðõfŠD.ÁÀtËa&T±Øfxkõ¯ýix“p¬ÚWwz3}Z‹Õr\EFÅQÐNŽ®H©	î2Ç>ÉWñ)î/2œ×†xŒÚ»1²9_2šIî‘RfšÜ&¶'pε]$	NøAÓuãDÂ5à%€nb«¹H²•ç4õe¦ëUO|±³û;+A"õÄWçp7cÄ.^5Rðô¶—€ ˼’=“iòB
j,ʤî	V^¦Çˆ=GÅV† ̵€ó¡fÍg„»Åç=q< øê›\njHì,Lû9I…+Á;è§ÀØÜ	¸¬ÔA|ÎàÖØË¢4\¯÷! ÿÑ„ÎÈM}-ÃfQù4Y¥Q6<râ:_ö
Ǥ`@Ù«G¨»Æ¾"tCñ/ú?Fù{/qV¹d"	!—ˆ‰sŠÐSËKáV³Û/®öª³yjÇiOÂ+çlÒÃhŸ8Ì[_=ož²¦6æMÇ&j‘@#åk^Œ´üPIb3œ‘íÅ&O“¯í·X_ö=Ó‡ÆiuÈ2× ¿(ƒ)Ê”ztñ€»óÕ’œ{»™Ô+þ•_$[€£÷FòþjŸÒµ´jçÆ°bÙª A§Ë“í¶ÄtÖõ×^ØÃI¥¯7@äý"¤Úh09l.%·ÊÒ”:qÕw³>943б4)ô(¿›¼’L#t7Äs6ªµËOÞ+ŽcØeŠš*ý›…±mz½&ž”˜}ÊOê;U¶mÖ£
¾Öf¢È˸lúÆ¿!= .uï|Ô@ó*ô
+83vCëš\
ªƒÌ'r^]œ@£9j!üÎuªˆ½ì»ˆ¨ésù™ŽU‡î€b–äÏÊR5ómÒïØæ/VTBÇ?ª—uŸ³Í)(ÿß Îñ¹·¥\Ô³Åu*3ˆÅƃ^tKûþZ×'_pãè¶üÒG’ðîëL–‡ácsyq é+|„t4X)•×¤;§‡9­$©t›	|ËV›±Æ
-Êb:Ì·vÔ5&Ü€’[ƒö!‰gZhÄxG¦á,òg© "Ë*:K‘¨|¤ƒê¬. y+gõù‚yGçs†‡™ÛÐì’ø%NtbR°üm/D«Ê­‘oNn²çÛº+ÖX¬Auk$™CÔSç'5nœ‡'‰Õëÿá¨G•ýz‚g±ãxc¡ú¢M1ß«Ž¤Ê/ÜC»]Qóˆð,hê°òw4ƒß;¡=ˆ oQ‰ºœ ÙKÎ?´SD¬ØùÚ¸ÐÏ7Öèõ~àu³â£»¬\øáXèO÷-„ Ô´ÏBÅ’Ù@OþqXhß™þyœô¨(©G0ƒ~‘õim+Çî:ËMóPÝ…—d<}=8CÅá.­~’¸ˆ¥ØžëtQÇSCVp–X/)]‘Ùƒg
êGþ×éOôävº¶ß?o,ËÚLb~„JÞÜc/A4[¼µÌ®ñÝ)ºÜBMJ·“B–±dl
œnŒýw+Â½•åâ¹ØÈ0Kÿqõ*Ì­ê)}Å0ªaÀU%ÚÆh˜)†­Ç"ð†„	ŸXrY_lš:j«ãI°/¨œz ´²ƒäú¾ïB©Ï…5­¤ñî„´1F+ÝÄ9#¥Àoåîؤ&GõØJ;!hÃ)wÑ‚rÊŒBEÔÜf¦{Ш(›%Jt¿Üº’'2oõ›È~­¹8bº:&¿èú:m²ª¾;zæ]ñ§üþ±ÞIûPB5¬7vÕa9ô3ŒÁ®e	ȶÇ}kV3ƒ¿RÌCÄϸô à}d8¶ùÿdË_*ÓØ
+棰O†Z˜»‘,\^$ªøþ­ÖÑ]ëõ³(VÝÛ‰†¾4=TÐðƲX•qãb‰d«äã›ÁÅ¡÷e	±íýGz_šE
+S¸¯'/óa*JÃy
XIžg€ÕGm5ÑÞÔͯ柨ñíÕ½|€…Îá½Uó]Ø‘¬‰ äZ‡¥n¿­ð9ÁB¾`E?Ž$¤MÒÈh[¾›°Qþ6øÀ˜ØŠ|†e‹_^›»aî_¥èS;ÿ0ïÎz 	Tí¦N½2q´,ãyv¢`–
l¸w’«F¨7ŠQÜ·}
+‚œ¾öF@’ZëÔ—p*]άª#‘Èsð<(T$ÁA.`²ãRºMEøj%èRÒî˜å2_æj8™àñÂQ
+çW_Lêåœ-ØLº„+·eÌË~¡1yÿâ¶/sXo¦šŸ‚…ÆÊÑ‹¸]V"Í­$ì)˜9uAÛäÌy´ÑN÷*˜ôì}HÝt¶³ÎýW;LÚ‘…FŸê2憎–Mçí>®Ö: ‰²ìhý÷Ì	ˆ:\Ÿè‹Â.L>¨­ÌðÖ÷CçÒð;àE©®îôfú´·ä¸ŠŒ—&¢½œAOÁd“|7Âó+Aþðù;°ÕT춫XÌ$ЮÈþ¢‚×®õÒž<ÏŸr±‹\qÍ}xæëf¾¬šÎ#»ƒýä
+ôH*®ÿRÁ^d%³<>ð©kbyr¾d)’Á?¤Ì)¥LqNàw2ºþ
+Hœí‚»êÛˆ™jÝJÜÄ”ÿ±¼îÈE£ÜÂ=âtØô8ÀqëxÐ
+ãwŒÈÞÁÉwk~é7†92ßQpì;Ùn‡þûöÊŽVrA¥:s»ðKoy7Óh÷ÊQ>˪žø{ëvV6‚D÷•®ÓànÆ•$(\¼,j¤ýõq3þ@‹e9z;Òù„Ô<X‰UÁ¬õ:‹Ús03 ?'àWüBöLŸú90Ë°ÚÃËêÄÅJ[8¸šÛ„¹iN—S{Îè‚Õ¶”fp¯u˜¼Q“
<zŽ—¬@…w0û_̇Îk6—Ózâx]íÉ+¸ÜÔÅX˜ër’VŸvÍS4­¥mEµ‚ø!ŒN€s•PU`Ai=ùÆ6ºÔ¼KP@ÍsX@#.QRÞíHÕ(³p‘Ö»Ò¤õ
+O%›bÇ9¡ªìŸµÝ±­‹Yh¸CóB@ã¿ šúZ›Ì¢ïh=²W¢lxäÙt¾ñ“U'À€¯KŽMk‘.aDè†ÿ^6écÁ²Èåa£Ãº‚C¬©v¼äVàóã±ÃüñaÜ×Rü¢J| m_ïx½eƒéE]!ò
w—áo$iÚ0QÝ~Œïö^â¬oÈDB3
æ	½¦‹–߬{«^AñI{òÔ“Ò=ž™VÓØ6$¹*›Ð#p…¶0¾zÞ!'yQÀüð_JWùk–¹Eþú	2=¼"î¢k%µW ”L%<æ«[)Ü»8÷d|áK@ç?aƒyR•¶1IelÑš“LÔ?€*F×Ö¼u4å ’Äf%?Ç—Lž;CÇs°¾ ñz»‘Òêd³@þcPR‰5ôèÿkû·9¡ÎÙ/EÏøy[G;œuH]“ ˆmXø™‰E^F™½‚&Y—K'V|ó:)Mv²”Cú–Ã3òN•Ð
%ök/µ2Vá7¾H¶6=0[ó4ŒùáÔ#2¹wuÔÓ‘}įI@‚þS‹;Çq•è±÷³¼­›’WCn€Õç<›†tl	;M&ÎÏIZWÿ93Y-sô„&Š=;XpŠ£å½ÉxÜǸcfŸî´g‚Í·¯­«Tð|¥»€DU©Ð `rØ\Js‰¹5tâ·î*{|rh f½hRõP6c+e9˜Fèn•æl<Iw‹ž¡VÆ­Ê	)TúfJêl){µ!-KŸÃp1I‹Án0Ò~µ6)‡Øz6œÇÈOùMÔs®’ʼ#žV57—§×4*
+BïgN`ç+>:ÚôgL!(5-ú‰žÉvªqÚ±[þa±ÌY'=*
+‹mØé‘cBz]\êÃøµ€ûTõpfìY[}Ã!
MÍbü)ÇàèIl	mïEû›dïk¿DL¼–΀3ä“5J‡ˆ7 ªßé³OeИ1؆Ë)¸I…N伺%€[rÔBåêI
gÅ4k
M=
+Ïæï/ªÁÄ1Õƒ‰¤jûÚ¹íÑ6^¬¨„8»6û¦
ŽâôOös!½2TXLù—ŽSy
$QnSƒ’¶€Þ³DGø)g`qãØ*çË¿Ì¡†Ù{ÂÏ°“~I3ê#{‡RPã£<]ÿosW¸µ{—.êTf
—‘¼è–ëá´³N¾à8ÛÍq幎9ýÁ˘1ß,Ææ-ra
+ã8¼~#QéõY1è‰ïiþÀȼÉ0ãµÉ_)$‘ðÚ}ñ^¥VbD?™ù’(û©³ýüúB¡Òòâ@ÏVøèh°R&7³UvSrGHOè+ø‹¬+‘Z‰Ä>t…sìµjL4¥9¶ñBδЕðŽL’_Œêñ/‘ÁSÊ}zQK:eò]±02/uñjÉuÞM	c<¸X{™n›–C‰ÆÏayª
+÷måx?°žoºQßXùÎO@D‹Tt–?Mø8:UÉE\@òVÎ÷ïòŽÓæ/«½ Å9íJœè"Ĥþ}åÚ^4&ˆK‰G6ï¯EÇT‡½úU˜ÜöIÅQLÕ`=!‡¬HÇŠ¬@á~hu7øÍ.Ñ—îµ-Юtäâlã<êgnç 0?<ÞœÜyÓ«iV±°E‚êÖH/†µ¦ÓNjÜ(%N·ËãßMŽ7çôÎÛð$Æ_éYšb£KU‰^ŽO# ÕbRW]HyA¿ƒ È5/ÍÛtÕÉ@Á…Sš¹|r
+åc»çº)zŒdÚNï–øIo¤$;îj
+¥†kº¢û
ýXÐÉ:}ùîh£v_z
]Þ¢i%]¯–~u¦ˆE­ï©m½"ƒn±Í÷üÝ8ê{Ù[´Õ™(«àÊåŒY<ƒóyć›¹ß'ÊÀ«î a¤~çOéãe®E•
Dxül^Ãr Ë8žöÓ×ϾokE¸íß°ÍžóZ]µuƒ<„—9¯€žáâ°Ð£/á.ò%õMP,OŽ`ü?*÷ÒÚV“Át8‹šû §3Õ5§®c¹ÖY
+n[ù|q¾Uò†×ýY¿ü¹1Æ*¿àÀ½Œ+-Ìi¢eˆaX︦CJ‚Ç»Z V…ÉpÈxúzp†—6ß$\Gü9m
W­!Ë袓68¦†¬à18°^Rþº?¯Î*ÉŽá³ÏžõÕìiq£~ÞX‹vå9ÌŒñ&U]«¶ði0>Û¡ÑAÚîñf¸M…4f~lʇb‹£êö%Â`§àKÙ³ÞäÓ#ZÄL[°?¿©˜Äü”¡¥0Æ^‚h¶ew…A<ÿ§Ri¥„š”s*;„1:ÈØ%ÜçîV›g7&×Ùo­'`4–ãèÛ¿©ºbÉ·_n"aJì7¼å*bÚ„’O>Úÿçu®é†`1î”ò²Üê
K^:Æß ÏAlñ×â÷T…"GÉRú—`IÂ(þªJ©‘Ð-R4G“Dý#°ä²¾Ø)tÔKÛ’}^M%ô.]uyÕéaÄO\‡KÆžNÒ•æa¥ˆá™5—Üʳ8¨P•O*Nr!øOÛ »É‚ƒ"ÄŸ<jïòW41eè?[º0D­ã{ƒjGUÿÁubŒV§•r,FWÞ ×Á­ULŽ÷­”vB(ЛRî¿ä‰„Šµ¥ÌQö½MP*+J'=gu@û\äìc`n‘OE0ׇwXªó\­ëòóZD–;NáTñžº ÀvàÉåÐW9ßfœÅq- *(”èc¥i9NdÞ÷+üGopÁ-ÄitLc0Íét
+ÚyIavôѺÿSåá¡’ë 8„jEnì·ÂrõfŸžZ7×Tj¾®À?e2½â‰Á.ðÛ¦U¹®*RjѨì*Äèá0Gh”W»ŸEVd`Üx˜{C¡ŽœÐb«AÊq“úÖ¬fc¤…†•ƒmõ@Ý>úÈpqïãÈ‹¾T»­Ñ[}4ž´-6k?X¸¼HIí(áG±¿ºË÷ÿº	Q1xˆ=/Ýg÷)m»üõíïé¥C=–nxbæ–EŒÌÂË%Mßvkó™U$ø YO"JÊ‹^šÔ¬Ã{P¬§«$a8hz¨.½ý‘=>y°7â$ÛÄÈKÕÛ+Ÿ—_ó'*ÊÇçŽô¾)Š¦mCN^ûÂT”›òÅ ³ä
+ã˜Ii–âç¹ÀøK¾cOŸã…Ú).Ð…å­&•¶ÿ”/¦§1LCö_·kŒ,u7-qúüÆ°’!Î'·ŽÚj¿<¡µ‡CÑ#MÿÇ·gøßgªûº­?E@Õ´
+WÜcGýrŸ,„aÀŠ~HUš¤Àbr<pw«kSvh±º*§£WV¿ep9æöäÚ9dÉ"ÔYt“8_âióõ¦µ—ß0•gè#²î;&2®¹Ð¶a+}¢álí-­	(ø.ʾ¼+kÂÁ¾4Wͦvã`Ãô@¨*ÇQœgdâuXÛòìYÀ1"ýÏõÝ"fØ[m×ä©4AŽ„‡²vØà¢"Š§ÄàúeUßÒü†l¨h£öBxós—¹Ù ¶å_}Ømî09KŒMn(	¢¥sú%a:ñŒ€9´Ëµ3àTºEIF?æýxP¨HŸ‚\ÀyÛ¤išŠíÔJfñs¸0PK´roÄCk¡N“b™?ÈBŒK\ž0UmÎ\{x-Ü°Ù«ÔeœYQ•Z"ãÂ@Ñ}¥u¯ƒ³~ͤ¹Á-×d¾ÑÔp/$Ýÿ ™¢Ó®¾˜É×%Z­˜iVsÊ…‹ü_bòãÙq^æ°ÞQ)#=‘‰¿mº(sÔ¦‚‘Þy(¥qÃ\íÙÂIï"z{ÓyÆ×ÞÄ?¨Æ§'Î
+¬´¹²‰™}X›Ú¢52;ÖuºEP.ݬD‡GHÅR->6rê‚«Õ…òu¿ œóT-$õÅú§$èq{ç®v˜©?Œ#Éd&Ñ1šÓÇ|A±t@4˜ôÌIêÇGsÈbѸ›?:5‹)êzëÌõ¢z&Cãø`Ö23uB×m(
+íZ‘
7U±ìÀ“dßtyÅÐçó…
t¸#'Í™\˜|MþG…ý±ó†Ó¹ývÝŠOAÁõÌéusÕm	3LYg%‚=ž$ŸÈ;ø±	Ú“[úBë|uTiîÉ6ð*fä†:B£¯úg¶¼£¸ï”ó)p]°!l×ü¨ûoOEv#ÍàR˺¦\Ìn™ûV‚á>ýïv}·¨ÅqK°…H½AáY³A÷¹!xƒ#ä"¸â&‡úðÑËÌaE)FkçÕõÐéä>è%Ñžw‘ýaÁL"ÆR«vÀÑ“è¸|¶9‹¹åx:æÉP˜‚®?»·Œ}T/N$@×ðz’¤TA㤟¼ÈJ{x|"ý
+OÖÄòäaÈR9Ÿ~U…RW˜âœÝîdiá$8%ÇkÉ«
/ Ô§”>:¥•ês^ –§³
+yð6ëù7&xVÞ[œ'–Ÿ0€™ªzå»!ƒ«‰‚	n4
ý×­e+ÕºàBÿk{T¡5ãeÁŠ[¥™zÙè­õpâËð½›[î¡ŸîÖüÏnr:d£¢,àÅv¯Üáëñ‰¬ä‚"Wtæký‹“`&}„‘œ\è{5¢dñMô”Kêl朰„@úŠ°ÎWwC¦!NIÄša_j.y«í˜c†©î¸QˆÉ–Þ=òn»Ðó‰¢|‹I!íþöËì¬lˆó7A»ÝÜ‘7HP¸eXÔUç÷âfá:€Êrôv¹ï4µx°ªŸ$E(®"±Ò²Ë4pÓ}gèéß½l¶Åaõ4i_²<¹”i†b >åÉ¢	Ž›ž©Î8ˆ6¥þû×S|àñCq÷>t©æ`f@~NÝ®å„$'ñ˜#ér`‹}©›‹É4•—”¶pm0)«oÒœ3¦öÍ·q.5ÌàCê-IN7· ý§Ÿ1¢—gá¹MQq‚Š‘§Õc ãsžÕ
îò‡ì(ÝÂCoËûYÁÌp¶Üxù#Å-e¢;xô3E"€î`:ë¾…*Öl3<»ôÙðº<Ç8Vm¥µ=—°-Ëä9.¬#쇦h'GW$ÚŠwíÛÒ$YÄýô¼Sû¤©>Ö×󓛃®ôb¥ý8•¿b	
+/”)xz[ű@ë^IǺy!ˆ5eRwŠ+Bœæ7 ªÀ‚Òzï2‘liµe&– €‡æ:°€F\¢¤¡Ç·P{à?±k¹U÷žJ+Ä“r_I=Å#wº2ß¡ï,gS±ƒ>0&6¬Ž¯Ì^ëgÞ™ïç_µÞˆn:ÝÇöò½EB|§hG‚[-ñY“¦«DC§G²Ðm†û„€Ûc*@)é´+…YÃÐzy®YØðÕ¯èaÿ4;ª>NC–šÖ,?\ˆÍã¼lÏXHÙvÏŠ…l‘ª."n6©óSøÏÝÙ›«ÂMÖŽPcqéÐBDê´Ø±ü}ÚÊ=9“ £þÆÒûÆŸy×Â[›i†EOì"eÕ¬4ÝûÛ›åÿÂ¥³¤åY”ø]$Ú¾ÃðgÊÏŠºBùî3ßÞHÒ©`¢§xïfÎkË@\h‡©%&X¼Ú´ÇR£\»áËDÖ¡»—¦`$B2Fû.°¿æOH(…Zò5dõ„=ŒÅ“üÃ8ñ¼ÙEÞˆ$„fÑgQ1£EöK¼‚ÿ’öùµ;¹z0!/¬»><­lHoT+½Fàq`aô¡BNò¢BuÜ{MµÂ‚'ü‰Èί#¸dçK¢IÞ‚¨Uµcš—¨7‡£À½jAPÖF	E>WýZñ¾J8Ng •–åý¾”®ïÖ1oŠáédþzeDÁYÖJw®]5˜JxÑK¶R¥kpóÈø>ß–€Ó=~Âò¤7qb’<Ê#•âý(§ôÈ‹
Z Yjˆúí¹$i§¼P¶ãŽ2Ðc˜à†›²\dê¯}bÓ=ƽ-ü[þ>Ø¿);˜µ~TŒ³±e
+êh×]9•ÌJ~“3˜!v†“æ}a@ÿôk&?0¹ÉÈ{€áÆ 6¤jõÍã:Öësr€¨ j‡‘®¹ä%_û¬×¡Ý#<´7¹Í-‘ÀƒÍ(Où9™Å÷cÒÛQ³£á¾r‹ºà*µ	¥—æ/Õó…F_8¯^Šƒíò¶Žv%êº;@
Ú<°í/Šþ¼Œ/gL²3–N¬øût=Ršìy5> †é1›fùœ7½áHžì⃘*Çšo#­ÓMÀsDÍ*qƒÙ‰q©+ÔËU§ÒéœGö³)‹_B`—&S°ª¹YÚ.JñÖ^wd¬ßnaq:lz`¶û<hïßµFdoîêµ»?ú•C’€á¦8v“â7Íó{eG+9®†Ü·ÓxôÉËm·—‘p¥~!	À{&Á}’ëXmŽ‹ïëu
bì%£\MãBÒº'ŧ³gtAä[…J38Ù´L+èØvšLƒ’´®ãrf²Zæ'õL	zv°$à	:[×gð¥“&mÆÌ#Áu·sCGK¨ýøWk•a÷›®‹xò“Xä*v[Û,fŽh‹WdQAåWôiOéÁ9Öˆ.¶‡è°<sû3_VMgŸÓÏðrz$ˆ,ªO½@Àä­¸”æojèÙsÁTöøäÐ>@ÌgþФ÷ lÆVÊr-ŒÍÜ7ÑØx’î!_0¬‘G‰R¨6\µIÛ#TÉ•
+E¦nÕ°AN_€{#Ž I-ûŽjÅ8 gVUŸÆd·x*î®0YÿÎ)]¨¬|5œéÌ”ÉØRöwBZ–#›àb’ŸÜ`¹üwlR­ôl%“ž
+4ïšµæA9‰eF!¬jn3S³hT„ÃÎœÀW¼‹Šd[í°»+—ÏÑ)f¯bé\zp°2[òÈñ2ë¡çlsßX
©C-LƒÓÆ./U|
+Økæ ûôÓV.|þ,t©õΘBPjZé!ìIâ ©¶,4áÂ…²NzTÚ­Ï?Æ„ôº¸É›íwë¨÷(àÌÅm&1?B%on¿™®£^ÔfWöàš]n!¨%Õ„Ç!K€Ö26ˆN7Fðµ›ïAÐĉ‡üqÒlÀd
Ž«ñ²¶ú›>B:,š‡ÄåR“ÝÍ’ØÚ:Ê>ë+ÈÃÖcˆ˜e1fÕ;j”
n@I£Ï{žÊ½-4b<­ƹ'7Yýã]›kŽ,V®´»¯j§ý”7
+NÍÊäûñþT­Äð=AνÖÿ<	¿Þ}Q¨–áÛGRe™‹Rm4’6œÕeiJ¶äµ„×ɒΗhÖšzƒÑÃ^I&Ÿ:•b·UÔë©o›G¿l¼EM¯ûM.ˆUÏf9/ N ß’5ž~g´UDÐv
ÓDTHŒú·òÂG¤Íw@1Krée)”÷¸iÉùlsƒ™+*!pklëQ.ÙõžñæBgd¨°˜ï3¦òH¢Ü¦9q¡{ˆŽíRÎÀ0 âÛ­TÓ‹c…_:¯ö™ƒ}Îs¨í5Æ „Ÿü»/FZ
~(ª1—NÆøì©ÇÙøÕ,¡{çÍcº´då±ÑÏšeJ=:ö@Ó÷äI;ü’fÉFö¤ Û[xºãÞæ®mwö3\ɨÌ3?6eÍ1Ëßu{œa0Ýp«‡â×or矋-b&£X‘Ñ…tãÑÚÀ]1êÕ¡7±¾%v•^ü
+1mBÀI©mñý´WúC0–w‰JyYnuˆ«/cáPé®É†6öåZäÂÛpeüF¢Ï÷²bÍÃÒáe`Ûw¾RH?ý©úÿ¼W¬Äˆ"<~6/ï9PëO{çåé„_¹ä”ÝW¿Òk¢7£ò…>¶_¤yCÈHåð¢Ñ~Ò–cÑp`ÐF›˜fºQ¼D¾,ùŒ\S¯%AíÓ-P+
+Ìê8ùÙ€ƒ¬í*ÍÐ}¤Ln{ªì¦&äŽ0žÍV$íEV þ?4´•|èæÅwÔ˜hW:rq6ÿ„u½7ýG©ŸÀä1
+)¥ $²®ÑÏPd”™èã
+:äê î̧MÒ>	9ü¿Óý]š=F2m'ùK|ª¹R“w5˜9¾Éÿ^?Ÿ¦‰úô¢–tÊùº`d^êÿÔê¡šÆxm°ö/Ü+1"†‘ƒÂòIóÚ×ð~}!Þi&I¡Fuö™Æî§e°=¦«¼y Ö™´ö5ê´o¨Š¿\,³Â7ÃK†¯Êcé¾²Uõȸü<‘XO¹]¢£°ïž€ˆ¨è1~šíptª6Š¸€ù¬óÃ2ù»Ñ"&^Kg@—rÇ”%ÍD•Uáúש¼hL
–ŽlÓóSˆ…Gqz©{·žÐ*,&òÅG§²ˆ¦7§Ï‰I[@o×"­|š½0¶ÿlýëÑfÞC€â³aéXÃC:6Š“¨géª-¥ñ’—¢˜·ÀzBE“,	8E€ßüÐê<ní‡\¿3ÁwZ½AèÕÙØÛ*x>ÉÎÜÓ@}3%u6š³Ôž˜«Áï8–ªËî7i?ÔŽšÍl=Níd©Œ
ò¨j·WIe^ŸO+”•ÅÉÝå!ù½'0`~x¡%¥ò»KÒ¬}Šɱ^wQ»œÔ¥PJ&œs‹Û£šnÓõ2>þ« ýH‘¾Ï²)Ä[–ª¼Þg♬é|²£­“N´Ž$ ÇD¸,|Âʬ±/#ÂÐA¢Å«+>÷Hš¨;YJ¯É}Kï—y'ÄhˆžF'@·Ä(¤0®ºò‚c]j^‡«( è·€, Ÿ¦)oø$ä×8ÆkÓiRôÈ©œÃ1í’ÞUHvÁÔ¿îYdü¾ßï]A¯VÚ;†^r+
p÷ÿÖï~ö¾nå)~Q%>P	ɸ¡ù<мÏú¬ žyˆµÅþ¹ºm¦àWÖiYë8ç°½túïÁÐ6[ì¾ôº¡YÒJºC1üêQ
ŠGÃOÚgD܇óå§>pÉö¯¶ª'•ÕPðÝÁ–±QŽþÒ¨¦¶AEƉÝä¿Pÿ·OäˆwyÍvàa¯¹ëó¢îf8[Àn<‡ŒòŸì˜È‚u·/PK݉ײxûò•<+o£N‰KÁ@ÂU=üÓžÏÛÊAŠ7ˆðåؼ›ä]‹p!ñ»³ƒ*aÞËÇ0°BÆN.t³”Q2ö¨zJ«u
+6sNXƒB }EXg¥…µ¯Sž'ªbM¾¡5²ÀÛøL¿CÚw\¦DêÖŠmÇ£}‡!û>´*ºwêx3rC!ßÙ}½[^ß\ùJ÷š8 XžÀ6å~T󹩬;Ÿèp)ë]S.fhúr„tœæOµÆð¾î&cŒ)Û;`æÇt\>[’ËÒŽü	<sê(LAW‘ÓÕF°*™' åx=IR·jSAÆo±²ܶï.øâaªù=³ç²cåob‘TcÝgVZ…ÒYÊ
°,Ã
+mQ†”“k´]¬(à	Lzfªuí­·d1æ\є˚u=ûfƒôQ=¯ÿ|0k—´!å¸ø-ƈ•¤Öv`Ç2á‡:ðéôà3l£H¸ŽårÚ®GB‹ÍY;lpQEÝbp}¼¤ái~C6T4ß{ƒ!<÷·ÅÒâ[ü¡°3€ö·\(«Z9¹b¯»Þ'Ç1‘d!F«.O¤¸g.³Ž<˜nXâÛj¼N¢¦Ä-ÿa æ±
+°ÉÜ´ÙÏ×?ì×r…ÿLªºKqýÒ`|«_¿‚©ÁÿÌmšhÌü؉Ä[ÉñJ™ÀSÝ–&¯{¡Õ»F´•˜¶}~cR`È19
+8µÛ»§;4Ö]Ýߥ+Ѽ8’s
+{rm’2êj¢:ÇŒ¡qº÷ôSÔÅἉtŸYw“WO-•å*5_W`‘¼ÐqÊî‚xãS¤ÒW)5æTvbtþ­4J¥
+ÓÁ¬+20În<L³¯ÞGNÀh1Ûñ]Š¦–<D™à½õš¸ÎÓ~ôøùúܯK7<1sK¬Ffa뜨Há;»÷¤|P¢©%eË/MjVï.Í«cO'iÄs¾ÜDþ”Åne×T(Ä©'9ž|©ãÓêAÏÀbÁ5ùy¥É–¼t‘£]ƒ‚"Øÿ³½´ ó.rv¿07Æ©¬å͵,U÷.Øûy÷-"K“'þ…*öO]P`;pêüh€¥’á3N춘‡Ùó¨DŽ¤é3À’™P'áI”O?½Z¤"hŽ;ˆç"*$F}Õya­Rèµ –«9ú¼šJõ\ºêò6·Ï›žgƒ·Tø‡”cBÁ~Ó™#-ˆ?U–Å'c|v‡Úíâ|äÞ³Hýè¿]Z2‚üÖæ
+éM¼%{ çõrª¸–‘!œ¹7ÑÂW
ß/j3¥‰{pM 7žTœäBíž«@kD'•#xÔÃù®hbÊÍ~¶i6`2ˆGÛöc‰Ò•¢ðÿ Ã»G+WZÓ	aÙ5ÝðÀJ•'èÀeróö*ØbxÈ®gÐkñŠÑo°¦TKþã­)¼Â.ÔŽªãŸ*êĬS7äXŒ®'¡@³ŸGª˜óG5ì„P½+¤Ác2Õ<
+	wW…¢ñgš TV>”N¥^ËE2£øXÓ›Åéæš3Ù1ú.=8ÎX£ydöûÞ„ý6Œ·á,ˆÚ¯˜&Ïçc™	¤>±l»sPózzÎê€ë¸ÕÅÆÀ8Ü?žŠ`³î°Iû,¸GËùû´ˆ1vœß.¨ÿ!i]ìÝ×½:®r£Ì%—âZ&ľõÃW±ÎË<yÇ,r;£ã3	GÈ4Ë¥2±¦®ü¥zº©úî’këC[ÍtX·ó—¡+¨½Áçéx9Œ=@TP5ÍÆWÒrœÈ¡óVåŽÞàŸZ•Òè˜Æ`‡Ïè©ò’Âìõ¿iã¦×ßþ_9Ë]pÔŠÜÅs™ä÷Ì
+#þ$OvqÏL‹íÉM¹ŸØç¨`…·"趆Ïâʶڛjë¤Ýiú„N­{ךˡ!0	ÅŒ§XUÒ¢m!´n³¨ÔaA~ÊdgÙŸ\2ý«QªoAT¤Ô¿MÅT•Íß`ŽÐ5®(k#Š¬ÈÀ¥ð-ö†_%'½ÄKŸÄqðÝz†dˈ-¢5D}±øÒ†
+ºÝ^(À
+[ÿGh¿LpCÃY.…
2uÙ°1ç€cÐȘ~£‚‰,$â;é±EÌ6ÆU7Ú÷€§|éàâÃÛa¨kG(¿¶úh!"uZlÖ~°me’ÇPߎci‹ó<ù3g»ë .H4ÍÚŒœ,^mZí)ß.Óþë"kÞÓÅS0!#óƒÉXÑs©$Ì-y”2ôBFìÇãi¢bð
z^§ÎóRÚkå÷ÇÃÏW†z1ÜðÄÑ1Š…™‹Jš<=£ìÖ û/ªHí]²žD”‰¼)µE›]
áÞù½§ÖÏVŒGÙf/û½oÂùý¡ÔoD7àí{yÐH¬„!>ÝÀ4­A£˜‹ö¢ÇSÛ"¯ö ESK"HÂpÐôM\gç?z|ò}nÙH«•–·«V#3¾ûNT‰$þ“ÓõaR	>(QÚ†œ¼ë™¨5+ùHÐZ÷9;Ñ•cÚVüèÔ¤õ‹ló²õ˜«ÇÈÌÉ{© (0“8u~4@ÜIþ—'v[LÍ—@{Õ.Û-’Ò1ÙÓoí–aÆ2ž#Û©R\½×GL7,qã5^'QSb˜†ñ¾sÖXênZâéå‘)0d–’ÔãÓÝ“k „àáÜ›æ^I·³9¸Iu†5QíFÞ¶]õz§jìþbÐÊ:Á¢µÇ‡‚¥4}9B:Ns©Ôcx_w†¿Fšã“0sÎí:.£ÎIëiG~Š€·u&®¥ÆŽçä#XÂ	ü<ª)Š
&=3U´øØÕ2–s.ïÉÆ€JëM´ó3Ïz¦‡Ùñ>»‚ÅZžü\
+Œ|˜cDÄRk;0íþÍUÄä(xàîKÖ¦ìÐiTS[®¬cÊàrÑ(ñÕ©rÈDµ²è;
+p¾ÙÒû÷Qw3£`7ÎÍFyÁvLdAëí‡X!c':×J¦{T=%Û´·',Ï!°¬,½ÜÌÔÙ§OU1¨_Þ”…Y`ã|&Èѯmµ.S"uo½qÂVú>YßØÇ'ZGPí"\‰>aeVÖ™Ÿah®‡QìÛÀ›õ€$MT“¢%ÎÈÙê°«ùŲb4DÑw¢2~_áù ®Ù+m“C/9›ˆ8õñkù?{_7üš?¦œ(Šê\Þòh^é}VPO²DÔÈìÉÒ	]¸Spçƒ÷§DÌ­¶=Ú³ÕOh‚yì­ÝYD	S•Ýéʪ£ ¹åØ>MÐ[ñ6„ðûæ3o¯@q×¾ú,°—œ´M×jOLÛîùKUëw•º‘jƒGMè6ƒ'ø2ÚFˆyT5Õ¥ª¼/Á©›JÄìêàü
„ŒžòЭÚÁ`r–šÜPYWæé(2JÂtÿru‹wfݨiŠ’Œ~Ñçð M#¸ò«>UÒ)	ǵ”ªÞ#´{ÂcwݼXSÛ€^²Pk‚ÂZ{”uŽZ¹TEÑ.×a•ï«CÙe¿ú_Y¤Œôd\~Æ,©Ò Ì:ÿæm` –uäÞ•†Ö_œ;Ä/~„–¸!`ªÚ¸öðZ¥}¯KµÊ%²¢7´DÛ™€¿þ(úWêC{ürJà¥Ñi»QŒ•ßyÌ[¡R²¯d$üxQæ?iK¿„æ80h#ÃL3]¦^"_‹òF.§Ùœ®øç˜(›fuȇUoŸZ³Èa¿µà^,H§ã@/Y(»Aa-³J´G-Ò*¬æ‰å¾ÄùÛ¯â¼Ñ}¡¢RFz2.?cÚiP9%pÜæºÓ¦FÄá²f£Þ)YÙ2~<¦s‘º«ÑBs4Ÿï&— S/¡Ëy#ÝâNW|ýLÃŒ3´dæµQ?¡þòPW⛸ǯ™’ÃDôö»ò‘³¡•~M‘SNEu.oy4/ú°+(©Y"jdv±êiŠ \§8XÅNZƒ¨å5©&ãwò«¤ûµÄ]ŽÆ5Ï­¨tHÏ|m#D²*”äÜU^™îÚÃ%bvup~ˆBFOyhÀEˆŽ—¤Z|läÉK·ùêc@%û¨ZH÷—é=SHÍâöÓAì-O~.F>ÈL¿"b)»“ø‚è€ûøÍ,ž¿…å%S‚³*œãZŒƒÕéžXVÐnfjâÝ©À¤–T¡oJÌ¢0ÿ>dæÙ¸Ô§´$h-õ…’É“ŽæÄ¿m+~tjRÉôË…6÷YôL†ÛíÀ±dfꄳÚPÇ´? nªÅ;È£&èš2KIŒ‰jÿçàÇ
»PBpþnÃs/ªÕŒ×’\ª‚´C”¦€ø#o[ ô=Ý5vÈ1heîQÔíÍAÜò—½Óû$èmFN‡/¸-øšáŽçû»oçì§	ž‚Ÿ÷…Ïê,æ·Ú
+f˜²ÎJz!H#ví ‚ˆþoòÐÝké‡ƒ+Fέâ3™óйaòðÞj¹"•€pø³²h$VBžà`Ø®ßLË{Qí§ãÙ©;¶é&„Ëøê¨ÒÁlýT0ÌÕt„[CéÎqe[mÃ5ûRàº}B'سåMëÞžŠìF‡Ý,¤‹iQ¸…Áb¶x
+à=C2‰ëD˜‹Q”"°Ö|i	C]à/`£ñ­‚4Ñ&8¯ïÏ¢̈´âX–ý@H¿hdL?ß±Ü/ë¬ß|,çÃìúsM—â–}g,‚ß²2{‚óoBðFÕþDmÙLéý¿‹…ŠRŒÖ6Ó·(÷=b_ôï¥Ögë²í9„“ßÿ—Š­dëÜÖSW~Ü=]Ú‰}wI»û¯…£è:,Õ÷ÅÞ›TÐîýú<’F	½ÏÕ*|ÍJ¿!î?矘D‘
+¤Kì¿>;Ímøq>ro×$ðtÑ -A~ksú¨^œH€³ýô9U¿ÊiÀÄQxñPïÓ­›¥-犾â”àx`%ÄŒt`¼9÷{±l1<dHW½h»öEæ¹XS*«ÿØš^a¨‚ÛU#e”öð8øDçž±•ùÕ¤r#üª¤®-Ù%§ >ÁÈÒß(=HpJ“2ÖK^@µS5|tW7v˜é*~Jm‡ñÔ²ã)÷j1P­¿Júl*Ïú`A\Á¢„%97R™aµ¸ùN–“Z‘"žŸÚY0Éæ¼]01S{òýlËïnL𬡶%8N1#`/Iô×kBKÜhç³GÊV·iÝ„ãÖö6¨™_w–£Œ8HÙ‚eó&ëS%†,»]EÙFP8ÂFá{l®
s‡âòú¦Ì3"A-¶«xæÈÆþkjÛþÊŸ	¶W/ô¯ÍG÷à'Ù‹ýg(+¶Á
+_#Á±åƒÜ"ätÈ[YXÝ—ìC¥&ßËÿEÕD®èÑÖçÔ«á‰#q®^õC‡ŽóÝN¯çÎPVqŸ¾FŸ×¥DÕ趲°§3ņWL£‹ãŠ·2ˆAÍ¿±Ó;ÀLú?%¸ÍöjYÈÿšõ5–É(ØÑ%}6€é	}0®.î†QBœ’•)¾Ô\ò'KÇ-ÆOÁm¢
µKßF$âA¼÷†û§œCÓ ¬â#(aŒ#þ³6Wˆ·Íqy}Sf—®˜[Û<	sd
‚‡c»1¡zùÜk½ûYø’BÇáñ‹ÅEØ2
ûn‚k§¥?n mÊ°µªÓóÙÌßt‰äõìoÃ*hwð}I#HŠÑeº`b¦<ö(ùçØ‹ÃܘýE_qJp<0œbFÀ:0^’õ³Ö„6–2$¥Ð4Ó{Ž‰¬sÒ,§Û±ñlM/¾PAD¹y‹hà»úÎÍÏ›#gØq—Â÷hÒ¾yxo5ÒÄ@8|×Y4+!Op0
lWá&볦øÝÿ†âî1[<p¯Êû"L˦JXk>ºŠ¯Œ p™
+0ŒßöØAæÙùéQ…fD‚Zq,Kð $Ñ42&‘áÖó|èOÑÀÌ€üœ§A×HNÿ-FÏäÀúO,+h735qàÚ`RK*Þ¹%fQñ‡2sâ\j…݆ÉZM«ªFÊ5ñýpíˆÓ(!87ï·™UäFåI.UAZ¯JS@|Ÿ¹£Pzà”;d±–4¼€w¦jøè®n’œ8ns]çS#bþY3Îßoš¢â	?S·Æ]Ûæ!·ÁùÅP§™†Þ‹ë²Ÿ…àq'¥>ð&
+ïF—Z2,ì'-ÏTü”ÚÿµyÛRóÔb Gc”éØT:ƒ$éÀ>‚¸Ÿ"YJrn¤/Âwmïœ1;´8?D!#©²4`
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc64.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@

+ÿ:€·sŒ™“[ÅÛÝÜŽx¤“Ì(æ¶y0MäQU+¢ã#•š#„dd3°¡†Ð„ô°ÀÝè«}›äòõÁ
+ÿ:€·sŒ™“[ÅÛÝÜŽx¤“Ì(æ¶y0MäQU+¢ã#•š#„dd3°¡†Ð„ô°ÀÝè«}›äòõŸãtsæ/;¶—«§¥8ð*U;…PÑqò`šÕ¢ªVY ›[F7)FÈÈf}_½õ}§ÍKú+Õù÷^NÄ•‰¶¨íRpzy$ˆ?ñ¨
+Ix7Ç‹PŒ×1óÿ}û0Xøe¢³e‘¬¬UÍþ—m‘Í]z%à‡°1#(Ûè:æÑ
+^vq3KSWpýTªv ¿â8ùÀ)·YI¬²@+¶ŒnRŒ*Ìú,¾"g*÷ú'S‡–éV·ïóâ"$ÒºQ¢†Çå*öŽ‹Œl…AåÛˆYT6€ð‰dS‡Pè¯ûȯ®ééÿJ'¤·®JçŽo=”ÍS¼<8œ'•7qMǤàôòH
~ÿM’ðn“$ ³bûãúë`°íÊY{Ê?EEª‡:á3Ú?‡ºôJÝ}b}6Ǧ§"DƒèÞœa;).Tuk[Þ^؈%*rŠþ†ª¶ÑIpsNéÌáé»!!™71@µ
+»ö7z)¢vnæ†äñFP«ÍtÑ¿¼ìâf–¦®àç¨Iì0.]cÙpïRs²’Ey€VqܤT…éXaDÎTóéN¦1ϬsÃû‡ZT÷ôf̘%¹£M{rŠüŸ½í6âu…o~–­ƒ—ãÇnÛ•Ò&I>&Ðcc¶YSÀÂÐYŽ{ûš²7—1ÙDH¹i¢Y“×Tñ=Ø‚×<«
²¨lýȦ8  Í*CëCAÏÏã”N>UsA”ÓÞz5‡¦:N·ƒé*
+D4æÜ׋Äo—¸D:g%TbdÍ€…BAm8‚°‰`~`Å««Ð$EŸÓ£Åò$Ü6ÑHBÈùexp%N7nâš“UÝõùüãš(9ýÜ;H]
+{ÄëÛéËÀ}lj²ö‰~ŠŠItßf©~iõ”§&úÄ,¤r΀’{	È(%ˆŒbéG	.õÕ:Fom…6 ºŽÂiоdª'lªúîîz£~àyúð£©(|[a Þýúl“QSDˆÍ¡%ÂvR\¨êÖ¶¡$¼­
JTä=	áIq¿’àæœÏ…ßÏkBB/nb€wkñnôRYìÜÑÕÿ;flkÓóû—T2~­€‰´’Ã2"p…ëüZ
†¬õ$”0ð%?ìEìï&&Þi!ñÄïÞ4±G¡Jõ'
+Œ K‡è¿c(eÅÙÌ1QAÝÓM’Å`\ºÆ¯àÃ'¤æy9Šò¬â
+¥U
+¨ϰˆ¨ûÏœQ&bƒEæ›ëMª´½h¤üV‚	ꌆÁ«X6Vf’ é(l¡P
oA)0Ï),jj$»cQ,\ŒÎÉþÞi´¨óõÌ…-Jþo[šöä	å#gÇþlÙêÞü1G>3Û“Ü«=7¹L’|L½ÆÆq²¦™<½²öë)yn3bÒ¾WÉu{ö¡Óm4žA+8‡ù[rcmjÂñhòHw”s׊Æ÷	-ôoæo9¢¢B­<ì9úÁ+‚õ×鯈oÒY²";³¨ÿz
+­.8³xKyMØ:çQ p&@]‡T†Ë†‚ƒƒÛ5œ|ªæ‚5»¡ôjQtn‚oURîÁ®¢ ó:¡ßÊ„±Vœ ~‡2ŸûÖCבÀµq%
âMD÷¥^¥ççè…—Ý,6ø…{ßI_ˆµ†í0œsÏ*T'ˆhÑ¥³•Þ3mˆtÎJ¨<Äȇ„‚Úp}Àü.À—KK½HŠ#»[—ùH&¥l¿8„ïñ–Œ!O'«E­
+xo…‰¦&ÉrbNŠÊ±·’Z`Ó[»m߬ãi´ã//Žø‚=‹
øæx„í£`ÊðàJœnÜ<Ù);ª§÷ï=4åÛ)Prç¥v,ºö•Ë«Ï‹ú“yñü		’&è£ÌOü&Ò÷5SLé•XúpÙ¯°@º`o|*3‚!LðºV¾ÏCÀžUŠ›»qšþä)90,ìk,xmm¡–ãJŸxü–*Ýø1rqªåUä>:9ö=PJ
ÄÏŽ\÷·tŒÞÚl@i™Ò½aÈINØIéÁÁô[þüÝòéý[OPø¶Â@¡ç”îüªIµoÖø×–ƒ¼Ú*Z;Ÿ’±‚§ê˜!¤8T²p­¢kjÛBjm¥¥Çëõ]["m	ë³ËY¤SéØ;¢¦ˆ
6‡_J™ì¤¸Mɱq_HeG”¨Õzß"’âc9ÝÑ%ƒ£ƒÖ„„^ÜÄî(ÖÿÜõ¤²Å¥¿"·ã(ÒĘ&?~ºÌ\7yd€Q±¤ÕÌN©oü"¦¬J’Æ÷H›Í† ‚9 RààmlϼhøRl5yZnØ$ÆEvÌØÖ»ûë3¨düGu9›$dDàËå´'E÷0H5`ýJ~Å ŠÅÃLL8¡ÒBÿ•Ã
+¡hŽ_”÷N·Æ'ì;L˜¿1÷§ËœÞÁiAŽ€÷B,?-Sº^*žaÂí‰ÝæµæG((ÙãyEGþ¨Þ—%"¼á]–ÍcÆPÊ—¯…b¢‚§»š9—À¸i‘CÝ›N0UÑòr	ù:EÙWªM.ƒ}™
Mëƒ%¢LÄŠÑ+ËÄWi)MÔµÜSô@¹^ž»ÃÆtAwõÓâ~¿5£'"[*†z7Â07Éxx3v8‹ÏÉ3å¤of5Ù>šIugÐ Uå¬É'ŸK°l¬Ì=9@2Ái.3ÏPØ_ Þ‚R`ƒRXÔÔHþkÆ¢Xþ¸á¡Ò<[CŠ]P§SÙ|?B×ØûŸƒ3¥È?Êñ¦„ϼ‚àt
+!qõqÜ°°{N`gšrÜêNxØi$œ:à É&uMû÷…Z”áÞ¶)ñÕ×FΓáدÉ.¡åbŽ6|f«;¥Kzno˜9ø˜g‘‘âyQ'/xgyñËRòÜfÄ8ç²Áw2dÖ
r…sò,	œË>Û7rÞcáÈë¾¹1‚únŽéj­Ì»¬b»ãõõÑÉZ†©¨ãèÉÂ,#ùG‚6͹a®êöñ_»Úh!‚Vpï¶äÆÚÔ*™ÿÐùî5æ³	‘óZõ4ÞÑÞrYY„Gx>ÅréŸV÷³=ÏxkQµjA‚Ó"I3äY‹¬óÎñbIÒæ±f÷éÞº«WXÄØ°J6—ý›Kýö==·´LÙ¸ö´_‹î²ulWÏ:C
=Þ¹²yDv{Mãô,G\2p{ð–4òš­tÓ<¢@àL€º¨‹«j%øIÑjk_õÔ&¢è0‚Âä9
+Èïè&/Ùðš[$'ÔèöZ,£
ã³JFµg"ªÐ2”2˜Ú.YÏìÚ«Ù·^©½FÅÜÞª¤ÁŸAY@ût_£‰¬%@üd#뱆³?wâJÙšˆóW¼'WÓÓÍ3§Xlíö£’¾.
wÇ!$vìÍÀÓ ±„~U›cÔ
ÓúßLÅ]¿ÿƒ°Ð“³1{ŠKPt)½tˆ··þ§8Þ¼ˆ§6~zS–“ã2`%æ6ƒT¨N(
<пW{7¡fÚ
è”Mx•:.©à2ú8å\3––g	Fk¶3ïLWØc=pá/ãÛ±žgdŠ§˜+Ùs~žîM¼«Î›ô#µcñHüËêû½¾pƾ·òòT çíf· ŒŠ0È@ëñõ6ÿ1Bž'NK6ŠGðÞQL6äÄœ	‰s9´À»¶kÚ£EÛÒuÛ&^^íz&íÑð(Ç[Àþ4>;úx=Çž¥Ñ‚Ï-™)Y+¥âÈìz¿‡C¶ù$êVÉÊ`æøGïø¢::2]¸üÛ¢î]-ýƒºÀ$Á‰ýÝ”%Ü¥x¯RvISóÃzh׫R äÓWì=Xi(ñ7‹Kƒ'é;òÿå9LÍ[…žåL¹ój¦˜Ï7° H÷"®¥kÖô6Á-Œˆ.–fÂÁ¦(û±Z3!Y§¼ÓÚ¨©7*˜=ge=avv
+üÆúNaäüy.‚
åTÓBÕé>à8¯C}€iÀÞøTfB˜ýþi¬aƒ†!ª	+kâ)áÕRr`XÅÖXðÚÚ_1Û”#ðå1$T§íbäâI××ãÁÚ¸0ñú›#‰º—^àèZúª­«`+/Ó9¤&x´þð±Ã{PL{t¾¾lÐ¥ótä‰OF»"ªÕ|:trñ$z ”
+•ƒ$¸ósè¡©.Ø€Ò/¹gÂ’œ­’ÏŸŸõ¶áå§ùÏ綞 í0q™€_ÓkßùFŸþh·\¿Ã}H”í–¥·¾?[¸Ø™¡•dƒWw.±	7±KûûÆêD!)K^}›d­&5ÁåI’wÞ±í³12e©T´v#9SÉ-BUp¨yàGYÖÔ«„ÔÚWW“Ë÷º¶DÚË {‹²U¦$ôË2‚þáûGŒê(hÚí•.¼ðŒ²ºßÉ*ù¢±!ýRBWšu÷>÷^33 {ü0”^æ{ÃÚÈÐö)±TÑÏ­vYQ
l¾”/ÅUmšâ¾ÊŽ45M·ô$£D9ÙÆr§¿J.[±¼¥•:ÁP±ã¥÷Uy—WcDsÛ§‰cѺiàŠ-Ïꈱ’†÷jF-–¦ÒƒCÎÄ«î hŒíз|é8»Á85qqž›G€57ˆ‘<*ø .P¹•-L~üi<…"¸nòÈ¢U·…œOÞåDQE”'9‘›s+‡$]r]¤ÝÝÚ؃eÐí¤Øjò´Ü­H‘Š,‘³jÌÉå¥y}µ/“¾@šƒöò_<¤¨tuÊ&»‰—ç²~Œè~ ¹¹éhˆÄV= âhª/\wÐÓuxÙì…­±këËfMÈåŽ:êr+HȈÝ.‹×uN4"Šó`jÀç”ü—@	—›˜˜p_¹„ã7›_Ðþ¾5óœ(-R‹ë\¸êÔ[¾ÙUÛæö
+>ì[Žma{7­Ç1ÅAb÷W_´Õ“´üüCï²%eçàï۪înÝs‘NÅv˜-cbóS‹%¡ŸÒ‚ó„X~Z¦i¼T!&Â:<™Ç§Ñw ÑŽPP"¯ÛòŠŽá"M¡3JD&eß²›±ÿö/^ïû`Nþ|C‘Îú¹`‚”V¼gÅd®]“o;×Ìòâºò
+44%’¤ztZ
+’|Ûá9…—*
+º1&‡Æ‘ ‰3CÄY Sk)r3mÒ?†§+œ`ª¿ùäïtŠ¯(®I(š88\ú/>šËJY˜•6	¿V‹Ë°Îqâ, Ò„Å®O<Ö ›¡úÙ0©R¬ïç[¨±9MdI;Ó\\o«ñŽœî?«Š„p>K’[¤~•®ÒRšµw¥¦õ€oþ¼!k›'‘è‚î÷»Ùüc0j[ND¶Tôn™`nðð:fìpƒ>f×þUÞÌ"j¯|T¤-h)?›®E´#`¯wホ—$ªAµ Ìì}Ž
+oDÒWMúM””	ÖçÑSÊÖ#½u±¹Ž]‰)’êν @ª×E2$
+N"#–}ØE…zr€dŸÒ\fƒ ­¾]4¡¤À¤°µµáÖ‘8Y°<ám
+ß_¹xè˜ô=—3&NÖiáT×’¬?îh|Öƒ¶ZfÒ‘«léÎìñø•ÿ$bº‡U‡4ÑÑ£QÝ0¾‰4ÈQ­×÷¨¢ÄìK¶†	º S¦¯ø~„³$­ë#fW~‰ÿ"Qƒ <eÝè:Bâ÷2â¥}}öœÀÎ)ä¥Éœð­ÒH%tÝ@wŒö€ äÕ#aíßvÿp7­B)í3
+·£YêT9SRæùáÁb¨Á!Å,Ëo¯4!=,0p:ãXï9²zLêšëó.´5ß¡qRÿ·$³Œ;ß­C\_×ÄløÌKvW–ôÜÞ-rí-Î??Ùò¢N^ðÎ8òÿ‹¤ù¥Ì•pàeÑs ]8¬Lú´‰"kª¯ô”ŸL«§ºéÙ½1ãµ(#|4ä}çwJ[[êB©ïØ JÌBÄ"c„>(g…ÓþyŸîdȱäæùX%‹|«nä¡Æß.Ë6aobéÜÏÔG…kEÄkÛ÷÷¿´OMÛÍ™XFïŽl‡ô†¥nÓ»=ƒwL#"…Ϋ—¾Êw§
+÷k˜ÅOQà/ý¸‰*mÄ„&HÐ^H_““Œ?¿°É_9?Y…®D~ýžroÂAÉñÿ¾k©ÐB¬à&ÃqÕ‘©µT/ã½ï=ÁjÑ{?û$´÷h¡¿¡ä²²Žð|—äÏ#¬2ó{zƒ®È¾9IFŒ2ò:‹‡Âq<¨ß	À5:³˜áDñ土CjІ¤4Ë‚‰%‚`ÖÖ&¸…QúG`;¸ãqä™mhŸˆvðÖ¢wÔ‚»D’fÕ²E'ûÿÄ’¹Ñ2ÌóÏ¡iK®°•­}”l3ç+–çñzzsu˜¯m*ñ:u¾ÁyêØ®ƒt1Ü]MT5j7Ý=iÖ™©çùê`¿WÔzý¶‘æJáÀ†ß„¯Ä¾Äu@Å“ëúuÎÅ~Ö)Ò—CJq†z¡oyòˆìöšÛõX(Ž¸dàöý1hù)Gè»xY€Ý˜i&M""266KÔJí’¿20ÔÖ¾÷µLYÍ`G…›ïÎueÁ.Õ„¦’ÀqDeûý@ŸI‘‹÷C½Ñˆ³¿yå¶RRxdALo¶ÄdÕV\È×½?•™Õr
+ÃÍ,L^¯ý)¶HNµÍñ´8(X[Û{”Œ"wÎDI½d<5d'þþ-©\²ƒ'Å©K¯s¼OgŒ4—Øfïò½gZ^w‰…r!§ª0[^÷xÎîUcëôÙhs"åæY~µG©¯G£ššWÒ£1‹r›2ühÆb¥2¡IUŸ#‚²€ëè¾[*þE0J€å&ÈFË{~'îÙ”4¯)
û®eN®»»‡.fS°ØÇ.ñ[9a\î"“d8^sÕ(P+°-e†Ó¤â=%îãêà }qhKñj
+ˆÁ
9ÎXðÔœßß´žmò6œ3ž1†ÑÊ!
+Ðf:&B=HìŇ»]üª+Ƶ»é£˜—ºcã}½;{>bö	– èRgè
ssáSp¡e
2Slüô*¦1;Ûdû,½È[¶(ºÎ!v¥ÚÍ»(ïo°qmš+òðß*kITUËÇýˉÒã{­'µ‰Æã¬!Ûªß)‘ÀJÑl¨MœPx½c®ö,n_Ì©Í5šð7&t\*2OÝdép<'׸'f11Î=ŒÖqfÃ=˜®­Æzà*›@.V›>ɉ#x¸s*¢r'Ù
‰ËÓ|F9~ûÎcöÆù³ŸB"âUUý-P¡â7XsEm{Îün_^2Û«™!Î*È	S-V¯æü!ÁšeK+õFwÆÿå‹=Éëgaà‘asùù¨@ÓÇÌs6@	`€Ëÿ÷lžTÍ"†lØ沕ïÔ£J×óX²ÇVM­7%Œvø‹Á° ŸÙ(ÄBuB÷›ðrA÷ÂðÅÔˆ&ýP™ãb
+„!Nœ–l	Ž(ý¡.¢˜lÕ•%þærukqÖ©[Š«¹ê«L¼¼Ç>2ôL4Ç¿ý*P“¶áh"hõ¾¡ùï—ÿRKó } Ú§ÿÓĽä‡Öý8y:SZt¹˜)ˆ,pˆÈØØ1w5“rÆÈÀw Âûî-y|véð<=z“!W¿ƒZ/&R²VWÙÅôc†qïHɬ'‰ÀÑíŽÃíYttdº(må«YÁº"ZçiHŸ½|ʼŠ	¸ÄäÜX‡Ø¡:*§òÄßAíÕu¶þ¢¬˜ù-™rÎYÎÝW
+#Ìc{Ý5
+⇰¬êjç§5J¥WðC¤ì’¦û›0ôгK¤]Õ»®Åz°ÒPÿn–NÏv<ùã<×$$r˜‡¶!× ˜oûÔQ-ƒn}@ÎíXÊ$|Ú7·W}&G¾è¨¦ï7[“HstÉâß²ŠZÃ0´^ÕlyS@@A(Œ‘ñSÔ(¯&<úPŠµóDAWÖ±õlŸZ
\>1Ì ™ŸQPë´fB²Se»©<MOnT-zÎÊzÂììå‘éœÂÕåò\ר»„·Qù»{×aÂyõÀÖâ¿ÐXŒºWœÃ™h;‚Ü(_øifí~—ŽY[PYFˆˆ'UšH€LF!U2ñ±ª3_vB,Ï|ÝpC†úÒ¡í¨Ì2„-çáÒEÂ'BIVÖÙRß·¤äÀ°—±°ý©©¾b«5Fý×bH¨SÇÄÕÙ’³íŃçðôõv„AÆd6u¼˜UòEAC3÷‘L0"Ù›=Šœ'c“+“yÍÍÒ ©³–y#Òˆu»l¹N=`F³ÛŸ©m0`ÿ2é+6Fi3¼ÝÍ´éIGKÀV^»rULðuáý.›ö ˜öèaaؽW$ûè"ÕžŒ>þkDrÑ`“í‡s«zpóÒµ½ ¥ØzO‹c&àPÂBÚè¡ Ê_>¼8Õ5Õl믶ö¢+lÖ¯Òv'Ceè™±I·ø>tèäÿHô0]547HmûæÍ
+_O\­¹^oΙ9%G9ƒ##÷qß×SïƒÓq!]Ç`â/¾»ˆ½ó¾ÛhfÛU1ë€éºO¦Ûk7Î+ª&ÓàùèQuÍÞZ¤°ÝGGÄÁÔvÕ?'Áá€/ËŸ´ùLNÖ£ïŒ#áÐs¸c›ú5,Ç1Wsa~¶m­/_7È®6î\n–ëë‘ɈBR–&¼ú
++ÈGL©¶£°}mIàã¦@'L»0¿$óàg²žúÛÔÐz,Jû#”þÁÿ\‡ô\¢¼Â)Ä‚Ò¼|'â€eŸ,µ¹jŸ×’9î¡>Ç{b6dÊO¨>uìFrþ2¦Z„ªàMòÝŽ²±µKµ©®®;‹óiqˆ©$‹@öyªQH«•(*„%Jb8­$ Ó¾¸x²Z­s n”H<ß¿ÕÉN±Ùžq–Þ–-ÊÊ;øÈ÷X-Ð;ÆÓ¨]vâN£½õ‹4dáßëŽÉPЩÇ7\:eýyi£.TïYB礄®)êó|<ó¼ff]öå6`5¼Ñö›©½ñR¨¿4Ë^™V¬g–’•t¹@BpY–¥>E9 -ßÖS›²&¾êIÐé¦Ð8nFî—æå8%F[teŒÉ›ZJƒGì²¢4Ø&a5^—ªÚ8)þÙa=‰hjšsõH[ˆr¯‘äSc”6\¶6**eW7tŸ ÛWóªò3®Æˆæ«BMˆ"­GT¿òn›Lw¶5{ë}ò;E)ŽÜ”
+ÅÇl#úºFC 7É,ûNNVç<Õpû/ç3w˜Ó]l^SÆ¿iÒÝ	ZƒÉ<
9óÔŒZ1Q¹†•KÁ]ÐǽsøÏpkŸpjââ*!+Žj.*n
?xTí]\ÝYðü?Þ¡QÉØçУ·
‹Á(É7Ày_­ˆø¥ÄŒ¹Pìc;lSþS0š*ŠÍîÚš®Ð×Ó)v¹í© o7Z˜üåÒxDmÜù:Yþªs%ž¡×ˆ¢Š5Nr?+æ=VH"º2äºU§§©­ʽÇU,­Ôùu¥G?	XaeÈ`K–^ᄨ$Q´E†¿×„#R‰1>¬óÁ?Ûz³ô‹™§~™ÑÃÚk;ÑØ$:Ûû­?{Ô.…×W,òúw^(;a€&,)ñù¾xUMèê‰Lk3ÓyüÍü@ooÏÐ
•¬z@ÙÐI^¸î½»êð¯þq+8p[ο©?¬ƒôµ}v•‚¿/×ÙàO°eÂ¥Ø@­#ÚßWßÄü`4*ªÄ-`‰ƒPEÀ ZÅGÖË‹Ìš×8t<ÉäV
§\³êœhD	ûÀ=ÔÓ5å3€3+--à¾oÛn+(¾½áajû%P¸EV|ø@ŒýÚѨ²ÕœC4ktíäåXËD‘hÿ?ÃöFˆ¯IIÓd´]¾¯Ü}Ñ	©ñ×¥Z¤˸mɵ¶a¯ª«Ñ=ñ|Ŷ"ÚÂönG“.b—‚Äó®¾u·;u>åå†ÃyJÊÓ>Ýà «,I›A.ܧ›	[1KE,%:jqv
³ília%î$<tø8ÈÞÊ3©fãmV"¡VºµsrëLº)sàvÄâæÚÊ.Ræ?œ—ì-ZÆÄû¦J_#>¹:û°ü´QÒe¨B L™tx/“S¿î@¿  ,DC«ù	ßDš_f”ˆ<LÊ£'5c­lš)J]hýΑ‚ÿ°¥ažh|ÔRçܘÍm¨È!SƒÝðœ{Úœ…ÄÄôH
+Ù…+ôZ‚Ž?õ§¨8Vy+ãñ^¼ÃëÀœáø†?é(oÀ5¬e ΗÈAº™;Þ.v³…ùÙiùhhJ9Uôè´*9ø«ßr™3T¸!€ÙqéÏOrSKY:%Z±‘=ËSù„ƒ–ÀîøÎ÷}j‹Ô£F«ÚLóÚy‰^UndÞ‰Ç%CtŒ}Á¡ibL‘?]f†.•²2@¦ÖRäf'Ú¹~SV%ÀIcïÕ$Ãè	CPA’P)pp¸6é^4|)‹6”²-7lc¬Õcv“&LÑ–õÝëNoîκ®G@õ!‘˜§]/O‡¾€aøÊàsÔs­‹†âÿ²¬­†ToÅœ‰‡^þ‹}8âÙX ]0¹>—Až&x±]+_é¯`O¤EÃÓ¶MršÈ’v»<¸¸ÞKÿ%Á<~K	à|–9¶UüJw~ŽUªÔ¹Îk|åÈKÏ‚^mÎ-“ÁIÖAÝuLžR*Y8ØQ»5ã!5¸ÜÜíûô £¸ŠûÉÈ×ë¢R§	7A¹¤)wîWQ÷ÞáeBÖ+N?ÍÁók¯åÆ`Ô¶œˆq¨"õÜ/ÀÜýýtÌÅà|̳᪡…DÔCøöKFž©ÀÛȃ¬Ø<¹ÌÊSêƒ91'EeÖÕI-0çÉ£Ó¸áVÿºZÿ‡™™G|ÎAˇˆ|s<B
+øß0±
¨UZÐ4R~+AŠuFÀCîÛ,+3HI‚w]…Åú6Þ(ˆ¹®šéš55±Ó¿¦‰±.Fgêoºi_¥ê´³{Þç¸O®›Íò£9¿¸5„aö4y$µJ·åEcõŠ˜z
¹s¹’QQ!Øv’}î›AôåHúR9Ég@€I³ŠdHœDF1ú­ŠôäÈ#¹¸Ì]Gaºh_2U6U}ww=ß±?p²}xßÚ>£¾oð“36»ç÷óÅ*?ØÉ@ÊZIï	8Ìû~-ÀˆCVôJxœ‘v¬vùoºžöbùŒoÉÖ­Þ%ôÍ-*õz3fLœ±Òߨ³9E~ÁÐø±q´Ì¹?KØÏÅÿí7ãHÄiªh¿¿[¢§`ah¢G³óMY•Å–'ÕÏú„À"‰snåËb¹Å\"½œ*12è@Ì!®¸AXÊ0?…0ìÛÛh¬Áçßìy‡næ$!dòqi]¦QCíü{HGËF6Ì®üãD¢*@xÊ2§Í(t„ÙódÙWúúñ%RÕW%ýG¹J觀°íSÝ"ÏtoN¾“šÈ*´»£o	/lDœ9HECU[æª8·'úfþúÓžžÂ•– ÔÓ{•=šQ;7sCröîñ@Õ·FÂÇ£ìãànG<„RÇfs[²ɨr¦¤›QïߟÄMŸB22—X‹ÞChBzX`àtÛ°Ãryô/'ÀbÄÊ[Tø)8=²ÉD‘öTª<•í	Ë(Få–÷ñ°ó,|¼Q×¼ÆVV¤è€ŸƎè =œpÍX–‹˜É)Ëû.\uj£_â¤ãsH{v£G†¸¾³•Øí…–ì®1õ¥¡ZäÇZ~~¯ùYœ¼ýpùãUïW…7àYÃÖñ{™/ùó0'>¯Æg}
+Ò0AJ+^½ì2W aǹ…“åfyq]yœIR=:-„IÈ>ãþ’ÌaÅÝÊ¿æ]ºpE˜éuDÖICõ5#˜KSiϯgbÛwP4FøhÕ>úÓ¶É„Oí@”…„•DÆ|PÎÆ×5…fêÉüܲ°Ô™
+Ç_ ‡MÏ{y¡RT:´eÓÊÅýY?Ft?ÒÒú4Db+q4U™.µhç´<â»áò#ÁÈ4Õ.Ñï°$JøKÜÕ_‘£\‹lÂÞÄ2Ï¥ƒµŽÖŠ•Ö«óócu"žš«‡/°ŒÃ2Øzë
Aþó­Fu4møÄ€^xFY]‹áê…òQ‰Öžð)!¥M´õõ/——P³~ƒJ/s³ïmdh{šÖ*æ$õWÜ»kzî˜FDK3a‰îSóÖ-—ž¢Ý^çmTÚ•L½¼¾;;~c}'¾r~²Aˆü*ç!äåÿîm\ö‚}ßÊ]Å/pt-}UØÛ0›™ç’R<Zx…Öï³(&³:__6ÎhÜ	÷:†ÎrÊ©#±ÓÞ™‚ÿãaÖO½„2EÝL›â·?Ow¨^ÛgÃzŸÔ¿ö$~ëHuóÐ_8c_Õyy*ýø3ÕƒFEd ûöô“}<HíOÜæA阇š¢›Üqdv=Ñͯ[òu+Àêe0s|­ù|Q 
+\~ãQw †˜ðÏ]`îAar’Œdùt™âxM£jt{-
+߈ÿ×%#†Ô½Uh‹JÀ±±Lm¢éŽÀvmÛâÕ/ÚÐ#
쀇žH;vè`çPÖB?¤Ã¿jˆÎç}á&ì ÑñÏXhÇ×–³E«(:šÐ:DÕÕÝo^D‚Ý?=„§KÇÿý±Yîµ2kˆ9Ì·yŠNëã•9o¿þd…ûƒ_Ò–A}7Gú5ØfÓV1Óÿôôæê-CÚTÿtêaŸòÉ­Aè<»¦Ô5®A窗r¢ËVÀ÷gö1ªisÖ‚3õúo]Û¥,blX%Åðëð{ÕZ&â\„{€Z¡ËwY´6¥éb¥ºš¨jÔn§z Ò±/OÓïÉÀc:®µôçq?Ñ”ߣC=•a•ê<<€—;Ëéê—ü±R¹3†”⣯E (ݧâ>‘!å	lóÁÏ—Üd‘eö†SBé^ApŽÈ:€ž¶ô‚¶nXX³'0½M9nu'<lºNpê4ô_Þòù
Åñ)«÷°PmÈÝñçbÐïRŽÍkð²§-:ÒLšD8Ddll–µ”Ç9cd`µ±aów˜²‡ÀÐ>e^EŠ\brn,ÍlÞÝybá®ø	䀴[QVLò˜Â9gƒ¢gय़f¿³à”q͉X
+Vu5Ž +ÃêÊŸ<\·Q9âˆÊëç€>#’?ó†g¿
{cò×Á!q¤¤ðÈ‚˜(Þq•È,·¬¸³g~7O*èC6l„sYÄù‡jÉß%å÷,Yí+¨Ø•œF;|˃îXPÁâb!´‹!õÀÀÃx‰9®õaxìjDð(ƒŒÂ2/·ä(›‡X˜¼CçRqœw‡ÿupP°¶4«ö5Dg,ÈxjÈNááZO¸yN—O–CæežÎh3óÐd£[‹]gž;Ümè‰Óù¹X¶¸M›yxỪ*‚¤ëíðëÊ……iÿ³ØÔÊcÿVžÎãUášÆ­ÌÃùgδ¼îäBSI`¶"¼óð ÁªÆËõ¯ÐæD×ѲüwŽOCŽ[))<2®&
+¹[b2ä+.dåБÄl3ùyнŽ-/µÊÌ9žÝU£†/õ<gw¤¿ûzâ4·üs¢?Ô­ÚÙ­ßMM‚¥‡Œiß–‚Ë9Ã…~4c1Wd_’ª#FyËÍa¶TáŠ`”×LŒ‹þ"öüNÁ¯5hCRëAÊœA0kk\̦}­0“\ÿ¶r¸4ÁD;–n ¨*”5•àŽºkÂÚýòu0ŽÑ€¥j=ð[Æs%þ`CáBÙHb_b´ ìÇû}´gì?kšiů%¶ÎÈp¼æ·P V&}ZÊ»UÙzJÁ&ÛÉÝ]úâЖÿÔ
Ÿ>r°ýµ%££u!Úùl%f!b¿‰B½Ì	zCÜ7çÓϵ&ŸÌgÛÅ_eµÝõ»L쩦p™ð\ʸbB$h/$¡ÇÇF‘ÑXêÀ¡’‘¢ÌW"?„ðO9tL„zÅ—'kºþ*åIV‘w4>kÏ[-3iÆÛ6úgvö|Äñ1]ͤÎÍææߦà_Êd¦ØåõTQbv«ÈµF{@r䟾øá;ñ8•Ø!šøÉ—ÕßÈ¢u*’§)ïSòþî1Tîž‚‚ìë¹Ùž8ÿ,ù’Y=ëXg¶qPiBìW©‡kPÃÞ}âÚ)Vùý£TÖ’¨2ª‹“ç‹..¹ÛöGNw‘ÛEB8«I£R?*R˜4
š‘ÃW¬ZŸ0ÙµÿÏÃÅU®ÔPfv°Gƒ¹
+"i¥¨}¨‹JJŠkýæȧ‹ek…ŸÐ´ÖÒG Ê”¿Ø6Mš% 4ðgÆAñXܾ…O4‡>j)ýnLè¸Tdž§ÈÏàxN³mNÌbbz$±âÌ›z-AG‘ôÝT+\ž@â¶úé©9§«¢œ-ÖÀÆë§òBÏK`w|gõ°5ËŒjß#Ûm&÷mH²Ê/¤72HoÊ휯:‰F°îÞ€\¬+>| FðmæTYäN¯‹»:øŒrü,ë"Æ4ñ‘ï{#„DÙªªç2Z _Ùn°æŠÚöåÜÊ£–«‰¬œ5¶;ˆ×ø6º¾œw:|…doe—aÚ3ÿ¸€+Þ+]ÎÎÔ·9û&]š·p;bqsme)¾¼d0«K/þBT¦Z¬CÑåBŸ)Ê–V÷Œî‘ã=×zËÎÂÝ?ÂæïïM€»“…æl€
+À‹ãóض›
+Œ8£gÑÚ‘VÏzÔ°;ÄAÑ™åâp©XŽ¼aÜl‚ ØŸmáH¥áb‹‹~0Ub˜0ÊÏ(¬`-!¨‡DØ­*Ñy7Ã&µ[”³û°y“¬šGnJìí6Ÿ}]#¯P•„ê„ó''+ýä‚8ó™ý—µ
Lç 6
+/à¢x~‘oÞ¦HêlýhßÕˆËîê•`²¡ØD|ÜbFÒÎ(v¿“6§Œ§wCCMEèwmMWhåçš;ÒøÚÛÄBœ%1ØPç_\<Y-Ø·7J$áÑäê'Öâ±O¶	KoÉK˜ee“|dõ,˜h“cçT ;q'ßÐÎë/Â+V½…KIÄ‹:ƒÒ !8¢K±Ü¬’˜ák§Ã‡YÉ_uªhúSh7#wÅsüœ#£:¼FêÃ-%DÐ÷a_ïÃ43㤖û@ú]©S㻕g›U±çpòt¦´èo-R
Xà
­­bîj;ä‘îþ@™ëÁZò&'…Ú[ßX°¸ªpÿS &ÓÑ÷p½YO}ãjh=%óŸJîñ.Íz.	ÉÉQ^ašbA	i^>q@¼ÁÔÒøìÏýxzô;B®c2´^L¤y¬®¯—õÆ&âÃEN¿Ç›Ç²èèÈiPÚ×K²ŸiD´Ó6Ò'0#9æ0Çø͇·Û=8÷ÀiÔÐPÜl=©Ë¿p(a!mŽtÞe¡^ä”ä6ŒŒûÙ[{Q›6kÙ„i;¯¼tÂÖgø,‰e	>m•Õ¥°­_tTSù•£‚Ç$·:êqáYE-ïZ/ä6²§  ®F…Æö§jÙ}(EÉÔ¦òÓ³å¾a²ôŽ`kÎqÑh,F]¥NïÂ4“An¡|º3ø?ÅG¢£(¢#DD¤M$@&#ž¤ÎöÖU—¡;!ÓSj”W®ý†UÅ9Që+`õ½{–Uº·kA—ô}¹ ãÜ16,œƒìxïÛx³HHä-q.B³@-Þëµ¢ZÜú€ßÙ¬PàÝqÆžüŠ6÷îéÅn2Ƽ{C§!ú‰/®8GdŽŒ@O[zA[7,,×Ш’7´6]	'€8uÇ°‰$Hø©ns®úLŽaÍMQÃn¶2;æèÙ£y	´›`u¼·>Øò>¦€€‚P.?ÿ¦µPCLxé 0	w@ÍO$	“;t0ý(k!‘RïÑ5Dgý°þvPæöé,4íåÎK׬ÛMh"ää±à¹/"Aàƒ‘BÝ«íñ‚=ûˆ‚®±÷Ø#´
+¸|b…@/<#¢ ËþuÌ„y¦ÊkOxšžÜ¨Zô‰ô™ÅÅ(×?Ï%™·×ù¸24³Mksüñw¸.{A°ïÏÁe ì™8:˜°¤lãÃÂýI)‡-±<Ìkù×ס¡g4nŠõCg9eÚŸÎÖ熢ïkö³Â™ò÷±Ùc½°i®%›/Ðv¥P¾íÒÌÇü3²¶ ²Œ

Nª)˜ŒBªdÿIf¾ì„cå”Ì3uê~n‹YXjÂí¡ÈÍ‹¨é³É²Þ)*Z¼‡çeìð¢‘#:‘ii}"1›H¶¤ÂÔ4ýZqXƒø§à†é:¹'_ÇM…dZÓß¹Š™6"N„’$¬±¯¤£sUÕ}3}çOOaÄKjŒç³ÄM¦“•·¯9{™‰`1be£*|šYê	"Æ{*ŒUÄøŠë#üKõöX÷>^¦å^c++Rt@±ì\cGtPN8è,KËŽÇ—Óýõ÷ì‚‘Èlê e-ªùŠ‚†fó?˜`D¯+z	%<NÆ;V;ò‡‡¹]O{1òF¹
êkØoœzÀŒäé}B„`ŒÊ
·7üë1Òì.€ÐN‰–t fžW\®,e‘Ìvãã4	Vîýáv²	Í7ƒsž2y{«#OÚ`ÀãdÏVlŒÒfe§‡uÏ’Ž–¬¼k䪘ýêßç\þ+ñ]-ñÍ­>g®HëÍD>·!|áÖˆº¡ÜuZ׳oý\
©WÃèyß’Ñ\”B¾{²Ô%Õü¬¿ôEL=ˆÒÈ·ÒI¦¦žŽlÎ;I°ŽwÃÉ®zü$}ä¿À;Ç&æKôàû'¹wg]W­ ôžÆLÝ ™„©Í_@‰¾|ep·j·Ø
+
+ËCqñYVرC*¹ìN†ÊÍ/%µ?G¤UjÒg»>üd«éA/¸„g˜Çîªk®à´&O)¢l¦Ó”ÿž”\nnøózP߆\EóêdåûQ)ÝŠ’sí|èÍÕãõ`ºjh(n6Úëч8¾ž¸G:o¼Þ/rJŽrFFó⣳¦Ã»âBº“ÀÙ^:akSyç×ü_¾YzG0»g¶æ4# Ü'ùaŽÇ®7
+Þ>]—|‘ì­QßQŸ""ÀR¨ ŸOR‚g{k¤ÅÞ“ž
gû™a›+ÐÌ«ªbËÏižQ«ÖnVILþ»Ýï͢ꇡ´U4}§4ŽŽ•Ÿµì·~NŸß^‹#uÌm£á,X\U8ñ§Àçæ	õ8Т©°ÿ5Î4œ÷Á%±wöè=Šêê¦/¾M1®Šº/À¶ ^îji±[ÃFß½æmÆ+é=jX“b®æÂüq8Ú,G^¾n6AlÁ¸þ$Üþ1ËË?
„¤1LeéV0Ž˜pQ<?ƹoS$u6ð4áäDëw
+uÄ0YÞl">n1#ig;ÎÑÇݱFݵ¯¯¨„¬tµ¸¨¥4üýM“i|m.O q[}úÚ’ÝÛQ€N˜k`cHûÝÎy!é«0µ>½ôX”ëF5áŸã¸õ¸$Ye™R•$¹eøNÙÊ#XwoïEßKÛʉVN€”[“Då|]_Nȵ	>Ì2¹¼Å¾m—ñ\@›†o› ggjÕ’óÉ MÕ8“1¶·¸¼…šÔ#³ 9rÁ_|þ“öÄlȉžM|êÅŒäádQ´IÝšù§yw–*wOAAvûÒâ
OH€ñòI¢)LˆŽMÆï¥V-ÁâÔñ‹éïì	¤Wj(3;X­ŒÏÒºÜT°TË%%E»ðsdÝ˼»ÌÁhZki­PeK7PTJ”ÄpGH]»amðy´Gæ@Ü5x£c·œ0¯þ!â$1¡1Z‰‰víó°Z½v‘»MºìÙœ[gŠ=¯n•ýçHéÔÁ†f½ã졼ÔàŒôÓ&vÚS8Âx.e„\1!‡4™Þíí#Ææ,u`ÞIÆQf¥‘Bx©’÷hÈ2ߣË
+ ½O“n¸tÊç
+òÒ,[\¨Ã²<þ„ÓUARÉûøxûeÌ̺ñ×lÀje¿ñ+Ogÿ¤þMc6—ò²hÐG˜™Ôef’Oà¤ßC™ô½µRÑó=qÕ†~·Q‘jØmâØᨨ‰AÜÍFºáKAë’ïÌ‚?¿–h‹¼/¬EÎ.197è6o€„à²1þW|Šr@Z£±¦+&yLaÉ’½ÏQ½pÜŒÁ3Ñ×pJŒ¶èÊ,+´”©t†¯6B·¢bòÍ5êáœüõ¢ø›TlÄN#“>ëÏw,(îq
+1žZËžô``ï<Ê’Wô¾<v5"‡xÏFaŽÅyY4h­LÂj¼3I©pRá¯ÂzÐÔ)æ÷¶
äC?Õ¦Æ5l¸qlþTTÊ®nè#]þ«®ûIùfA‘
ÑKÚ„:CÙƒ!ÕQ1yè”uþN~ôQ|Ã*6b'ŸÇûéµw¶–O-ëOz00ùeI¥z_;”Í<
+é#¾„š&
DGŽ¨cùÜ+˜îqjöËúùvŠR¥5—“,ØFéiŒ†]n*X*뜜¬Óx·2àë^Ófî4-»ºØ(¼EÙ7Äðý$új‡îC3ÐÿvŽÞ^jpFzç;m§a<¼B.–žÍ	Â	oøøŸcs´0oªc¦3܆Æ!<ÚI8¦‘cÒ¹§´xþr"ûµ´b¢o67–Ÿº½
+“gæíƒàÖ#àÔÙÙTBV:Ô\TÜ~ð¨Çº>¸ù¬á«ãeÊ+‹'@J£Ç"ü>ƒ ¡'dÔŠ‰€fÒ^ì_¸Åö. ÃC¹ÃP½½5äI÷‡êP¨äÇ–[Õ\^ÌM§²ýå~¡_¢=­Ó½[sŸPnò¾G
íW•o Å>Ævئá
+¦Á`)T	‡Á©)A½³»RìoÇOf¸ßþ,.¤öÝ`‡ýsŠôhQÚXñ”gH‹NõîœÖµ{…t…EuuS™_¨–WE]™`[/w‹5º]Þn´-å×¹ð.ˆÚ¥ït²áIæ.J!_³
Y	jœä~VÑz¬&DidÕiªSSOG6‰g“ªXGµïêWŽ=~°œÔ‘Ž­R¤5i½Ó~2Ûú®™\B½LíwU»WpZ©š„Q6SçJñOJ.77|÷=(áC.¬÷u2üó¦šàEÂÊÀ0–1¼ß>MH¢uŠc³F¤b|Eû
+Ÿ~«ô{,õ/Sü/¿››): Öv.¿­:(H't«ëGÀrú°!B0F†eˆÕ•~û–iv†@h'„ÊK‚:3O¥.WȼÆf;ÿÿŠ+wðþ;YŠè•Ï·	O²~öµ\³®Xùéî¼PvÂLXR6ÿïaðªšÍɘÖf»òå
+‡å€ÞÞƒ½7Eô€¯½’¼mÁgkÉýC¿üJf—´u?7Ë¢,5aŒøÞdèËTú×êYo‰š€-^Íý¼vxQƟƺº°
–Ã$[
Ra…jð-¶áâV(
+pà¶cO~Eõwúì7c^³¯Ýž}Ê™W­2€GF ©£=®£•åÀhTI•ZÀ Š@´ è©ŠÇ“:ð»žÆ)ùæ”"½ðX‡;(s{úøüg«åVã
+€¨4€rrÖpÉÒ™®pÏÆH!àÛøöA—.Žþ±‹…)³pèxÕ¬=S¸{É%Јëzµ'»j×f$fVZZÝaÞ*«ÜVPagßÂÔëJ V$qÄ1<x	°”èµÙÅ4ö“­¹™”ŸðÍÇ\à_Ì/ž…«©tEˆ¾EÒ>>îÑÕ‹-ҤѧÅ7¯¿O¸U:mŠ¬øí€<ç©¿My·%†h<ÖèÇ
+Õ×°‹ˆ>?Ðã~›ñŒ *
 C’’»ÈuºaC¥ú¿O8ÿ>³WÉ0’°,OžŸ¯^"rb‘÷«]“̯À!¼Û®€ÅÚn…ÈÜ‹2/¿—Çööˆ¬ÃÔ<±ÇQ¬:búäEdÚA¢´U‹mÚwqÂCIK¿zÿ(ø—qD©™ñÜŽ;\Ä3•ûAaêsvê|××›ò”‰»|§›@KX’+‚\¥Suª,Ú©î♆’–côãPí3âˆ0O/ÿ¥ v¸•f27ë‚ÂÉæìÉø³³"+ù5køS+€–°9V¸W¦+¶b–<ŠXJtÔâì{ÇØÒÂJÁHxèí.p¡‰f™OÌÛÚ:¬D_¬iwæä˘iRæÝì•ÙÑ©‰\¤êIX©OÁÙ/91ÆõÛ ÇfÙ
`ž^ãW@ìm7ÌdnË™ÑÅí{{DVïjÖí¦V1}r¬2m®QÑ~%3ÅZ´‘•ëQ”¾F|o2të*}åu¢¹ÊM„@˜/èð^;<¦cÁ€c]]Xˆ†K)¾Ì5
x˜‰[tÚ	EíÇx
+ÓOcšòsJÐx,±Í“·³}
|~½Ûü+ÿ@T@†99k8êi†W8éc$žpã|{®NjÆGØ)R”ºÐç?ã}WÂ.!Ð&øµ¤Ó¥8-‡ÚMB¦§ý%ö©%••>õþ¯Võ´~÷SMp¬`9}Xž!#C¼DäÄ?óKº;…C 4Be«A—©Ü¥d^c3“ññ
E›µx“¢EtÄéÕŠÈ©‚YòVþÛÿ¼e›Ë %ßí~ÏPÞ2jEÊ@3‚i/v¡\ì{ï¯Òï(ÐДrªõÍu(TríK£ä./f¨3\áR{à0Íð·Ez4¦m,öJ½
$Ë'ôwNkÔ³Ì:H̬´´§Â¡TK¥¬ ÂÎ0£™µË”]mB¯âσžä¦–²tJ´'?z‹¦>ï1ÁíóúÔ
+µ[ŒK©˜û©=ò¼ªÜÈ=¡“J†èúŸ_¬Hâ•bxð}5Íw¯—hñ;Go/58#=ý‡“¸Ý¾…^!KOèŠ
aŠ¹||Á¿·Z¹U¿S—nCcžmª
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc66.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,68 @@
+ ÇŠ–OO¿
+Ÿí‡ïç˜Bƒ³âö¾ž«™Îâ"Ôeùåâ€î9<ÎËjvT¡ýG,f›<N÷4üÓšÂ4³¸¶Á ÇŠ–OO¿
+Ÿí‡ïç˜Bƒ³âö¾ž«™Îâ"Ôeùåâ€î9<ÎËjvT¡ýG,f›<N÷4üÓšÂ4³¸¶Á@“	1žžc#ÇÃÓ-„{Ùña!K/ÙDµÊï×ÙÁrx‹Ôì¨_þçŽXÌ+xœóh
+å»<)™h{mqŸ4`Tƒ§ÑÑܼ*”,4µÆ˜ŠÈ;ß¿à¶O;fa¯2Š;/KDO@¾šüþÉtª°DÒ\h"³[\ÈÕÇ^.€;b!!Æ(F“&›»Z6ö¯ÿÂB–^¯ˆw‰Ã³¯:ŸäðµÅM¾áÓ°…Vð%ûÐ×kxR/ÐöÚâ#h ü˜ônny"Ù~¡t\ÂWµƒEM	|Ü=ÇÑMª£ì:VƒMºqÝÌÑÀß³ž.FœãÍÌkä+¸fÈíäEbTârÀ¨S¿¿¥<eT5Xhw‘-	v£cÝqžvÌÂC,d	v'^–ˆž€a)åá4èI}ˆ¹¸2ÐD{¶¸
+·“¼\ào‘Åðð6ú¹²·ïÓ®„>”øývèP”î&Õ„”§°¯´PK_±@`ÉÈÄ/æ´÷ÿŒÎZátŒ>	%}Fv$ÄBB‘PŒ;L+k´*lñC㙄1¼>C
î›{Ct#Õý>w—šaß»}¬ýJë½(³Öð¤^½ñ©ÙFÐ=±®R

.ZÖËÄŒ,hï‘B¡'š%ð¡/:jbž‘¡ôÍìÁðÝáÎÀ FEQq7Á‰-Oî>œ‰Bo‡Ê]å-õÜÜòD¯ü_踙®wŠšø¥z“¿šI[Åt¬ši⧅¿£{2>!\Œ%Û‡…ÖÕ"VmÌÇÕŠĨÙä}"§c““MN0Ø_ìô–9xäF;Ñ
+qxk I–xéž¹qVÉ
fŸ^¡Ë	½¹˜ïá'ª¾Òá9|þM6¦ccWxʨj°Ðî?Zì[Ƨâ!ì…™†XÈìN¼1
!ÂR×ß>hÍ’ú
om<d½ˆöqms;e¸½Š¼0,,èrUEí_7v}ÙŸ´êåX{ï§Mã¡-ŸÎR1ïÖ¨$ƒ~A•Dáôa1!çY9˜n–l³Y´ˤ¢ÝÞ?—ýý4léoysûA|5í:çìÍ 5Á,L·5S}Cu –¾€À•^Ñuóã6´ßè|JúŒýµ²²‹fv‚þœä[ù˜ÏׄyGTn×ãø)Nú˜×Ó“zIn]|È+!¿rʹ8JI½13}ÕªE*1Ϧü;–:ìH•„„? v˜VÖuTØ8ÿ†Û/be|†Á+ö8†èF·ç|,î3)£kú.Eç”ËgP{±ýU¼gÿ0O¯Œ½+ÂËË€ªš›¹1í[µLd-‘‹Éü²d8{Òµdh¨ŽÛ²ç„E}cÜ–CÖHÞÛÚ<SU‡bãÏ~SL3÷M§zA¤\´&±‹•XÐÃ?„_*N4)Jý_^tÔÄ!?_õ‡ÅŸý§:ß]ŒŠ¢ânŸ8Zž
+Á|%„6"Þ‰Z¸Ë2UUã¾¹\zâÀ’@²7½Üðª‚Ó3½| ±=IJ½uiü£3lP©Õ<"qÍŽ„õ£FÏ;_bÙßæç;75šhÒ“º×Z÷¥¥ùˆCå¾Ím/Aî6	)$íWô;c)’¶—èE6)ÒÙSc'[öd|B¸J«±0·D¬Ú…“·	<•M¯ÕšÐaêêF‚Ü9"Š·m»ºËÒSÉ_¢­Ë°bò »ËR7j+­ì1€0Ý=EBf͈+ÿǃAP	›Qƒº?-ûnÏúDSÆ;;šœ`"­¾Åõ1rðÕŒv¿âðÖ]’1ðÏ!oâ¬Ì#¼_‹g8o-ÃßNIa¹.
+ßr:ø<0áÚƒÙPtt%–ÿÏ*áYš‡v¼Á#2è,ô×8þw¼OöS,gål˜‚âÌ>£Sc4ëKµ²§´ÈëÁ9@Šñû'šlQÆÆ®ð‰MÔ}½Á~´$Å8¶‘SÙBÅ/°$ÅœebB:™¤³£|Ї9éÞ ÚxÈg
ñâÚ(ævÊm]ælj‰ú S’ZY<7©½'Îø@Œ'5ûtIh©'‹[&ŒñóÒç-A«_r&×î}4´k î½+^Àwg	e`XXÍ䪊Ǿnìú¯#uÉ×°öÃSšÛ_Z#¤bñMHü‚7ˆßõÂbBÓ²r-Ü1Ø{²u.‹UYGÎïörî5g@Q‰t¸,®Æþ?i.³o
þqN¾¦¿®þJ)^
z'>O]ýÊÏó“Y^$†wÑ/B¹†Æ-3±”C§¡~3ççhØÏÞòæ›k‚*øjÇtÓŇ]jŸX˜s>*j¦ú†ê]1,aþ7¼¿êûÛ
+lu£Í
+ø$<”é‡fô¥¨¨×ÒP3u	á)§Kˆ1ÊMn“ˆ½ŒýŠÛ§ˆ&¿Ö“úFª¼âþ@Ú$Öµ,>iãßk9>K'„"(ç2wyyÌìá%Õ¶ï™-ƒ³6òŽ¨Ü³ÛíRœé-³»;ô’ܺøVBcä‰op”’g(bfú·IŠTbƒ"Qåv1Çõý”66´ÆsôfÊ2.­ 0QÀ«l%1Qù97e Q;ÕÍ®q’ûãÎC®)ßVcdW–V0!éS·+tÅ7~]
+ì-¬±ê¨­pã«^*ÄÊø4Ÿ<VñpÍŒsÓøXÁfR™[Öé\ŠÓ5‹Î öçªeÎã`žCgT¡ZZÁW•ªCVrê.ýPó]à´oS6óKY¯ýóMbJï6“«8$+OÅ:ï{|ú¥
+¬ù0§úPc&õÄ}4V™‹‹I)+>obÇ,¶w˜ÈZ?åyÈp*ö¹&wÈÐM«yÓŠúÆ¥1†±¡«©x¦ªÄÛƒü¦˜fó2šS‘ÄÄ¢C¶Æ¹€…_n5ú+*¬•$|·*Rþ“@Ãú*P£8—·ü®gÚÌÁö:—ç’¯ïÅ>’+eK„[Iôþ‚U44¸uL7
+°½›~¾TœhR”羼赕B~¾÷—#çSt£'º	YÙÜ#p´!ŸøJlD¡&Ô9Ã{{Ó’ŒØí(ÿó¦\¢"öù
)\ž<Ðl§ó\wý®)˜ÕK†ÅøNu¿G^‡*±ÝÇbˆ*¦oüç´m‹dªªÛao¸ôÙ9€yng¥ýI»fgø]z•ygêÒå[fØ O·xDâ‡÷[Œƒv¾Ä¯£ÑÓvnj)й;”ªòåådkðUŸ>{ôÝ…SCײ"¨…Ú‰ƒpô…j<Üg¨Ê9ãÙ;À-slgÂtB»8|½KBÝi‘fx!i³´óWWï
†×a‡Ú^‚ÁlRHÇ®õvÆR9q3ÍŠlR¹¯¦.ÆN¶ñÈø„m
+”K&.`sˆE©;sx7šC·It>eP:æh=ÆÀBá¡°¾y0^ï°¥V4oá°9AŸ…܇œYûM¸-½1—G¹z	”ùG¡{,‚­) ½ÂÉÉŒ¥rD	sÚki‹¹¦¾YG‹}Äù"]k‹¤nÔVGÅb`§zŠ„̇
Vã“‚ +'¢i~Zë܃	ç7T††3:ýõ«îëDYæÚiOÀ‰i_œÛ¸æi$€íj‰k4wÃàá–j­d/‡\Á5½`/Ú}â]™éˆ¦‘vv)%ÀDGa—÷bäý·ìc(Ùý±º9býƒ0BÞÙE4…Fe¾$ÎpÞZ›£œ’Âo\£ätíx`ßÉO,99–/_©Àó†œÕtïWA»rȱ“Òß÷ÜïÞ{âŽiBÑçCL¨ëâl—™nqÆÖ—WwUΡũ¯ èèJ1ãƒTß²)ìeŸ$FdÍ(X$õ³páîe$žñ0¦XÎ×Ø-›Y…|[¦ÆhË–wySuËŸr€	ÿë‰Ü%6§§õ;|nÓ0U±Qoè,Æ°ÚSƒž–Æ×gèÆ	š–½®y¸ä¤ÂPdÀšˆŸÿ“‹ªMïOÿ,q8¿>ñN)Ø¢‘‘AýšµúgŸüuH—pq?¦¯„—.^"}H—%ÊÄ4„t/U{[ø½rÏ4¡@©ðÎÿÙ©PÑì‰ÚnîR4ÞÞþ÷w2€¾öůu†Ï¡
6JuŠG„âÅu¥$ýJ¿E#/ú‡@K?Tï·õqe¯SiZHÀºÑ“"é,]¦9´²xnOgNí€Njëè’ÐON8¶Lÿû¹ÓZ‚K¾äL=³Áúhu&Ö@ÁgV¼î.}[@@ã³°!ÖS*:íÂÔ¬w®€FˬH?k5¬¸åpË4‘χ¥y§ÅgØpsDõÿ”¦8L‚õÔU+×ôÎÊÀ°°‡ÕI	“aÜÅéCFê8³}0ñ›8¦)«¾´F8U Ä›š6ån
£÷™Ä„»yäZ¥b­öyê\ª²îÕ@Vÿÿ8ßÖäŽ;]«ÀËYÚy
ã›hUÚ„ýÎGQËÚŸ»øU´ðæbDf“J‘øÊLMá¦v|74MY_³¸k¨ŽÃñ..äÁj΀¢èmXA‘á~Ò\{ÞáâœaQcAá”R¼ôN|žºç‰ƒû;²¼Hî¿^„o‘Zf5†®FIgaa[Ëõ#Mèp/ÛÌ"ˆlÂÐGÔÀH¨†Ì‚zk€Ô?$
+ʘtÄ×])€V¿%ëCÍ@­%"YÞÉôœS_üfÓÓЭƒ¡ùÑ+ÖTíÔ“è»—ºÔ#°-æ|TÔQéɺbXÂá:'necÉë«Ø>ê[‡íHx5Ï
+s˜vðœœo§L~>ë³”šÙ^6eV%<Št6dH™Ù6Ñ(õt©2´µ›XûIBøõ¥\ ÝÂËôÁE ^KÀƒÌõWMM³¹ fêßRS–
b‰šÜ<;
gç	«S
L(c±;éŒ.IeÙá€6©H±wX|ÒÛ£Ör|–NDP>3Á³?‹mý8žÞ%ï”7w¥õïEÑ‚ðNÞïÌÆZõ"æXĦÇÏÓ9¯H×'pÈèÜH%M­ò‘$Ódîòò…Å2ßJ·qÃ/Z{l*ùM¥{«Ç¤%ÏZ{kvõ9¥ií¬„ÆÕÞà59ÎPÄÌés’	¨ÄD¢×ìbó£d’½½©ZßX¥Pé¬×¨™š”gªÔk™‰ÁÜ*×™ë˜Ìk¢‡qø%¹(Hò†®€§ðÉ Œ“jð¨Ga-x“÷ç5llu‘æõ̉d\G4]`¢KØJb$¢ïrnÊ]¢v·‡A$â9ëÛ82†,AR£¬ÆÈ® 1¬`BϦsV³0m£##Ê›yKfƒÄ·ÐÓ@kõFáûê@ͦ3ýÐ@öY¾}ê)SPzGÏƪJ…}T˜Ãð°ºó˜ÓAw²Lè—=n**üºÅZEÉMGàÛ"K¼T•‰í"h#x¬ÿà"‡æ»í°ŸÌ¤/¶±ϸ	»j]ñþÓIÊÛÀ!†
+ÎÈP·øeeC°‹(ݪ˜QÄmhÀ½Ê>#ÀJ÷UmÀë߇#{õºðŽÉLWãÞ’‡$üµX
-ÍÓµhÙ0ËÔ¨4_´´Ÿ®7I†¬äÉ\ç ûºÝuÞ¦lû,–²C(çûšÄ”Ãl;K pHVž—t"ÃöøéWEï`Sé ÆL÷•úˆÃ¾Éûû ¤¨ïÎiK|‹ßjLcëu?¢B׺Íj*­ÿ¢ð!VXÑ7«Ù»¹ÿ¸ÝRè–ñú‘ÝÅôATàh¬/:’RV|ÞÄ“Xqî-´~×òàTñoLKò»*	é‘Wb=_KOðQI&•«åQ-Ìûd)¦Hk¥šDD…˜Í»û1#òcžoBÀˆ¨N<o€”–©co=t;w<p@½0(ŸVS[ÄweLÚFµ'ežÏCÒè¼(?&=••Y†q‘o¾ÜjéVTE7HøsT¤á;€›éT [p3s0þåAΩ…Ÿ'ñt3Ó9CÃ.—2|9VÊ–¶’ø¬«ÚÚæŒî|èòð&žéd嶳¡©ãa½¶†5^y~d¶ µI½û”“oÖxØ—ïô
F?ý‰¨¾
åÉ.£wˆõáªhhmê˜þn}g+ü*a¨%Ф5ÓaeÍw7„üaó&3FÓ¦è[>Ni
+²¯¥F à<uB(#í”<*؈_LÕ&“<''Òà‘óå%¨q™ƒ^›N¬ƒGÎaqƒsÈ
+zm‚-jï÷UžÉ>znp¾û=wV™Û0éµr›ööþ»9­ÇPã0ûQ¸YDñïR¸!x½ØSû¸îçA>R-<·–—íœêcŽ>¼T§“Ä
TQÞå.Ó*•µš
¹¹±ô$Ô‚B È¡³vâZ¯úoDƒœZ¬Ø!¶vZn	xœæVÁ°èÛÆòä`z[@^Ï`âÝ]˜0uÚÈII«ÂÞm0õ¯'ròÜÎWç’2kÌÎíºþô7òÎɹ׶̭]žsðˆÙ*ó¶ìa•C[¿»ìÜÔR½ovU^ÈA€·H¿0žo,¡Y™ò,Ïn›
Ò,IWîŠf7è'Q÷$T.LhŠKìØdiE%yØo×ê®l5Iù××ÈÖýª#6|
+öõ§¦†³yDM©4àõÔx¥ÎM&‰rÛ¯v>ZæØΙè„kpøg–"„§Ò?ÌðBŽˆo˜˜wÜbG¤Ù›’´…xõP8-Ò݃õ‹ÛQâxõT–œòƒíã	ÃÚv€Cò×°nŒ+yà°чz1XÒ{uû®®Ã³Â©¼ŸØ$¤“A÷쑤râf‡	ؤoCQ\‘œqÿíÚ5–L\þÀæ
ŠO.væ$ðn)†sò¼ÿmáá|Ž^EüN$[U—Ff-ß\u_FP6~ìUFï­h`_W‰ÙLj'Sð×`°7Òvœ0†´Ò—óÖŸGi’è|Ê00 2tÑÐz‘„ß_}aò`¼Ã}6W¬hÞß}r‚#$¥%²ë=šmZg$b3Žoô5ïŽ_öXG²/ö\­™V?	ßR쟗LþZÞŸƒÉ‘;RŸòlÞÜÏeq”ÀÝA<ü,ĺ“'¯-ºìõ»îØ]R@g™2W äˆæ©ÖÒoQa²Žú•ïDºÖUܵ¬Ž—Ä:ÀSô	…¬Û;6]$VNY6Òü´Ë¥r‡íÀÀº8ÈÍcgõ~N*[aé™ïÊ+@éØAŠ½_[éÕ2Œ@\®L”ò‹ôR©u•Ì¡÷HÔ›aÿ}dÓn¨f&tç÷KÁˈ²Ñ©Òž0"*Ò¾ %«mÑÒHÇÔÖh
+î›Ýß1ÔGÈ^¸ŸjgÀ^©úÙº:/2ä>^^Ù,ë
+p¤&SÊ1\0hŽ¼Á0œô@Rˆ\0ÈóþèÁ×z <­uÜñ¹ªè	?jDLtýjùaû5Ï
Q?ììRJˆŽ8Â3óÄÕçs
+ÅÆP¯çirÄç`„¡¯ŠhŒÊaHà¡´+[%9™Þ¸([ÕèÇðÀ£ïÊÛ©££í@e	×%qpIf…´[mÉa]Øå—I›Ž½aAlC-µœQdç{úÜo ÅJÀ"êofëF¹žXrr1^¾Oû%·èî>‚kä.>;¹£ó¥Ã>¡öÙ.Ò„¿Ó4†˜MËÙ(Ø3/Ü"⑱3®îª_—¯YÒ˜==ŽT!¢ö½õkNÜtÕz&æàÜmÆ
+@N܆OÏåàʸòërK{ß<+Påf/* ñüsí7žO6C]ÍÍ”bÛ¨£yR&ÅÊ#HŒÈ‡P°H÷{àßÁÊH!ÿ`Q°³­Z2+²ø¶Q‘Ћ1îò¦ê‹#äãËoñÉË‚‚+hDö/LžÊdFGªzvû—~ªÕ¯…&$Gª¡Ym~JÙÛ“TOPÔb-mß'¿4!¸pſ祤"Ñ¥JlSS÷vøÜ»`ª¢ÞÍX‘}©¦!1‘³Î*0Í‘<>)1
+gAòmÕU™ È)
#ã;IšÃžãXâpc|ÿ/bÀúH|g1<Mçà]@ës‹8°¸ÿs‘OÉó@s¼Ð+ÿÁ
7¦Ìª¨ÞŒ®CÔ×>÷š„Y\×ëáÈÕ½åœR­Y??‚ç)wéÎ#åê83àâ~QC3\¼Dú3J‰•hè^ªö¶íg&äƒh_€Oý4ã¯O8 ¿Å©¼•'Ïpp=íÄð)»§i‹Ñ\àúÚÛÑ~h!ëÑÊg¬TÛ#4Ü¢’š_
+‚Tw{øûR*ym{‹£sγÜÁ¤h¡¡áó=îd*añ—Cêƒ_l”ê	ŽÙ—êWHç”cŠF^逖~(¨Ãs'÷â:Ê6'C¦Ò´ü.þîî^ù¢ãÅú–#rðç=Á±õZ:Ýëì<צÞ,Z¨à0
+Hl}ÑRN3,„òéPôð¥jQ‡i¿;DÏXºQruyðܞΜ <Ç
+œÔËÍ9½žœpq˜
+ãëo»´–aÕ˜z{ŸéÐêL±€ŸÎ¬e',Á<®5­QQûÅÇWÖ’á²_}~鞢l„Ä~ö¨ÀX~ðøH¤Ä(ï©sI^ºN¤4Œ«ì,9R+B«}¯Ý‘íÛ\ú¶
+€€'Û{}B±¦TtÇ™µEîAŒ2‹E~Öj™Em×à‹h?ƒWòS—έþàæˆ÷ã5Qp˜÷µªV³õ|=<œÏϘÑäÅ^AÌ6D§ÿƒ'«E§²ªb/§í9:ÜE£UõGö®ÐâËeܨÃæÉ‚nÛé°àrï$‰}}·’;Â¥—φŒÉp{ú`ÿ+pQRKauŒp>ª@•+þ)=l×2Ü[ó/•kòÕ´WÄGñòɸIy¡ã22¬½
ÿ¼-Bz’õÅdËfå’s†.˜’¾Dy©å5CK8vM!]w•´©[œÆÐH„ÚÝ3Æz»®ªˆcÁ·€¬ããp£±Õ(vºK‹²©òÛ+Ъ©玢‹©#k2íªuýÑĈÌ;”?퉘šßQìønhš²¾{mÖMáp
+:¬¬Ï©.8¯î‘"	K¤E€IdK73äwGK£…Ñd¾—§)³ÆÓ/YŸÑÇo®Ú­?æôª®½ÃÛW›ÿ\\ÕŸÔYÍÚ°‚?ßü¹¸ö¡4ßÙ%¢Ƃß5¤e4õœø!iÓëvye0"Ác<¼Þ"?´Ìþj!Øij•Klš¶ùU˜3Œ=
+&]8ú=ûñ§[#=„ÛYú>öŽuȬò\ÇâY~gğ·tH«AŒ’ζ‹÷FšÍà^«…D
Ø™½ŽµM…ôÖµ~H‰6-蕳ºR¬cJˆ‡€<GJD²¡õ%aKX	h«‰u*x(÷äûf{ä¿Dm´ôä™ï!{µ"bÝ—RÒŸÜÉ!â”~ÎzTž¦…~÷±94?¦¾åÌ»»½G_ï¿V±2¨Çµ;Ík3&iµF}ZÑø¨µ¢Ï"iÄ°™ßtNÜÊÆËK(­|0ɶ(Çðjƒ†yoZôôM„²hPÿÎó±%tWÍsõ˜¿§Wd©?(%W"!³§Úï‹Õ1ñ[ð¬]³…¼¨€ã×,Ñt“HÜBæ-ìý%%ÞS8˜ü|Ë{5)¯¼lʬJx	èlÈ>/¯l¿P÷èOduw+°ë’„í÷W¸@§™‹õŸŠ@¼– ÆêfkjjaY§u{“,ãwª"Ž<ÔÓ&Ž õÇÊ"Ž?àiË&„#ŠÏÕ¨`vËOt¢eXëHt•%­Ý:&…÷®šš{o]ÌÉ$£¤¦1Ä)¥xvÎ
+ÓK¦˜PÆvÏ\’ʯßlOî°ø¹«[±ä<ø1œ*ˆ |B}8ÕÕÄeÂ!NËD”æ‡+‚ø2±·á¸øìÞ¶ë®+ø¾ÿC¸o*ÆkÐ"Z@)C G̼Wˆ¯~þÌ‚Ÿ’>affþŸ{~Úçp! ¡JÃ5nîW÷Ê¿ýœ¡Ã…‘´÷DÑ°:•Q8“4ƒ»rC³NàÍ¥JšGù?HFÑt	KK§qáæ]—¹bœ,ù!ÃЖEÎ9!¨k|y,!;9»Æn4.ÅÔå ;<´¤¶²3“Wg¤ù™ÿOþR»ÈÁùù,—d£”sâ›^´6öØTïšWöK“UJƒ´öÖì÷rWÒÇE‘·¡Ýjr •…Ïæ9M•6ˆY³ÅÄ›Kž¶¶“‰${”zÙÝ9….êq©™iG0³f9VÎN™­x´îJY»ñNÏW¡€35'ˆ¡…‹áÞû[È9ggO´£°W ÏE³M/)5ÎIµÖ/&Ÿ¥T³/Ë-…
+ÖYâíJoPùA
+Sý*];ÔýMŽ4ÂZðÛœB¯((ð	+N7¸GW]Æ>þÍß‹Pâ,Í-òú\±>ÍKü6’y”¹ë­×ÕwÚ6S¤ÉŠÖŽ¡ÉþŒt›ê;óÓjØØê?Ñ÷…ȸŽhºÀY'–­”ÄHYÃä܉0ºYìs‚HÙrË«pdX<‚¤[E‘A@bEÀ„ƒQæ¬4Yü——U5Nà/ Ìë7s»Ñ(3?]†»á0¹pÕ7»l*¾†½\
+™X=>§¾ê¬q”ä^_Ú qs‡;ç'¶{`Ú[FF‰+ò0–Ì•
+s½»€Ö÷ŒßëÉ€‡Qfç½€ñ²aúÉR¦' ôŽƒ‘I”ú8¨-›ý6}iû-»‚î y˜[§PÍ		6!mÝ#ü
Hð0b Itrb¥…sŸ0bq\XÆ™ÌQôUñ~ÖeòŒÆv_žåcó9V–¸‚Í3zÜTTåi(—´ŠþšŽÝ«D–e¨7ÇDÐFðEãÝD
+ÑkÇ}#…U^q ƒmkÔºÿá»’‰«BíôðJZc·z3eØ
P¦`Û6œ–	¦ò’•¼P¦“äèW	¶Ióÿ‚g¯‰Wšá+¿2¥K+žú§Õ› síÊʆ}P§I-¢•ÚÐg‰| F”ó:ª4ÚË£Fö÷iý˜®Û¡9Håw°Z‡»wЛ/`‹µ­gù{……9w”½ ¦Ê:\Wc‘º×¹ˆ¶'_SÑWŽ%š/ˆ=© ðeé÷Ç¢/Cµæ‰™!ÒCc˜—ÖJ¯Mh¾uu#An’EÕ¸Ó]ëi§ê¡QØëX1y†PÓë)•5›Øv–@à¬!3èD›ñíÏ®(ŠÃÀ¦Ï]‘˜ó7émÏâ(::œKñéþ¢MÍ;^î	Ÿt
+È	zåµ^	©{§½ü6LAïQfŽß§¿û«ÔYÝZdûî’ Eöó
›aëë@UMÃÒ–ø£Ô&2˜ÆËê~Y2„³i‡Ô24TGãYýB¬°¿nK¯k$oãm§¤Í1ÿé?§&—õ‚¨Ý-\뤤ÿ_Ò.=q`I Y•ÐnxUAç—Ð>PÖbYдº~ß—6(Úä¶èGBôß#é“¡1âásý“•”M4iÇÐE^t9¤¬ø¡•;°âÁZuü,³ùݨÿÞ˜Ág)–ùkTÏ?®Ä"þz¾–žý¢’L7K6×¢Z…ëÈRQð‚ÔŽYYË3;ANr£òaLéåƒB²­*7åÿ|š'}LåçÇ=ª7 >d›žÑ9eÒ%ªÐ
+–—°äU¬–é†S~“KÖW)ˆˆ-‡këbF4ùÆ!Þ„
MœxÞ™51OÆÞzèvîxà€þg`P#¬¦¶•îʘ©ŒwNÊ!ƒ†¹Íe°Ý¿ÇǨ'†l¡ŽvzK’<r#“æ¶<»ÉPȪK<úOÒ¶+êˆ3Á/ÞëŠÐÒLùþU_i…Œþ’€>P~Lz77²â?Þ:.a¥ÔϬ¨Š>níæ¨Ußv+Ϩ]¶àfæ`áׂO#Nÿèf»r†›\3dør¬‰1*q9p¹Æìxx
}ÒYÕÉùçWBJ|€ð;t(JwäÎBJÝXÙZ(«‹¡Ö 0êdb™sZõñFƒg-þ:FŠ‰œ°#íEK©©ÑÁøÍùýL!ÏÈ×q{_OÛÂgqj¼òüÈq@w’gë5;*Þ±ð­3Ã'õŒ~çMa×\[î
0*ÏÝææn^JÔcLEd“áÑp[©“3¾ÙE“À™«"© _M~Î
ê:UX"i.‰‚4×£.dŒäí/÷ß2IÐÐÚÉ-á,Ü(úÎVåTÂMJ½Uj»ÂʇînåÂûLfŒ»QͶ|œÒ$yCWŒ@Ýxê„PFÇ5xT­
¾˜<׸ߟŸeò«3ÏbŒÕhç »ô#þóu èS‹—ðh {¢_°uš§À(=­écU%Ì°*LïxƒX]÷L箵Y&·L;xNN¹Ý&?û×JMâ/¼+œE:Ž2$Ââæô:ÚZÔÃ,óª!|ôÜ.àaëzî¬/«`Ï—‹±îב˸ðOÎoœùJ•µÜôù¬æAx'oùfc-Èôs,€bSí
éçÈ’Ù$å8dtn$œ¨ØyÆwä +ññákr
+G“ Û`ë¢m²ˆÿÃ4¤mBðg­¦ëmÁÓ‚|¤Zxs1"3Ç%ÉÆ|e&¨þS;>•¨¢¡×\»TW#ª½¾¾£ëôŸ¨t8™ãfD6ah­j`$TCfA=»@j‘eƒL:bå š@+Ñœû¯è Øœ¢oêzN7w)ooõHµ„@_{ìÙ´CéÞˆ%´E­Bqì´Üð%ѬŸ™}Í «‘
+*ùÕÀô¶€¼ƒÀÙ§º-$`°£Œ  Àÿ×Xžk§øajVµW@#‚ëV$‘È»”aV\üÉ8ëÆéÍܲÝì½l±8·"ôñJS&Aôj¤›åzê©’’K™¡Ú`÷CNä:ù¥®Ó9dÖ…Çiáõnùo³q…Gº!æý
¯&Tûq
+6ÅÂ7†¶ckÅ¥µ¤gÞìÊnœÝÝô“>7ç¤Ö¦¹tcXm§ÏOKc彄‹tcŠMKŒÐW²\rRa(2`MDÁñÇËU¨ù©ñ¶Ñöª:¼(‚s4c`!þÞX_²/ùXƒÜ+¹þX’®Á	ÌnÍN¢óH¨\˜Ð	–Å­ÈÒ=ŠJò­Þ³ÉAØŠý•*CC—‡ðôÛwû"¢smº©†„`ʺ¡Nã\sº@ø5Ê»ŒµïpþK5Ø2™Í.î”Ð0™m°q €Âj’ï³³±çIFløñ÷S.Q{òˆš.Oh6Ý÷.µðWšLä«Cì|'´Ñ­/ÍÖàíÎ1DS¹~…ý„JUŽyüü2»x¤ÁƒŒ³zà̧¯åYTÌmÊ
Ï8zÌ5n½T‡e’ÿâ“`˜·6½a:!Ó>Ы†!àºÆ3<ž*
Þ--î¥ÄŽU¯+9uð(÷ pZ¹§÷«¢Ù
+ð÷¨1%ùÇÛ›©ì†ù³>}ÜVòÝ}(¿ôb°
+ƇHbbQ¯[cÒ@Ì¡7”}›VÎÄ>Õ)Ç ï}(ßÅÕ±~W½mfîÀ{ÅýÉIÙù…ì‚I›¼«B£ª¹öêëAA›4"{™&Oe2#­HU=;‚óÅ?UäÙÌ­UÞ†¢¸?%âãÇ*©(j1˜¸áÑ	ž\8ìÑHýÜRæ™1`}$>½–ɨýp  û·Ë…X\ñ·Æ
©ê÷ ·^h›„ñSfUToFW„¯jåõMB¢.åûþdäÐüùeãÚßßø ¼ŠåœH¶8ª3ŒÌZ£¸ê¾Œ lüŪŒÃGÐÀ¾®6¯˜ÔN¦2ý³À}n¹ì%`u¹3û±#ŽÒÙ¢iLG*žQ
+{Ðô»'€n:ä=spn‚¸c 'nC©éüpe\yû9«³á›(ü3™ö~‹·€ø	•OÈ9Íø‰``]d追ô?'£¾úÂùÀe› úl®EС£úäFH .W&JyËz)Ú´ÎHÄfÞõ$jþñ°2Ž
+r//âû8R§e–.
4G^ÎîNz )D.d÷tîå=PØ´‡nöÒUtŠ‘5"&:ð5
ò¾ó”y^ñ¸þþ>G/¬~'£¤Å#3˜á.´¡#(?v¤#ùØ40¡¥ƒÊâ&5§‚xå0X•i;NCZiÅ÷kÁ­ºY™{.±±ØÂ+‘ÀŠá)vÁÅ&…-oÁ
+ÏêÆ“)Áy6
on鼶‡J`à®~b]ÇÙ˜]vôÓwl ¤€Î/
+d®@Õ
$ÑO±¹Þ¢Âyé7Èi±ª¥wE3•t¦õ*&4E«vl2ºH¬œ²l¹åu‹W6„GD¹LLµn1­RâÃIZÌ<
+ô(˜iàÏôËã¦qŒ<ô*KNyÏøÿÉŠïm;@¯yåX7F›²pX
+æÍ=–,äÇip‡ÆÎ÷üœT¶ÂÏ/Ã'‰V€Ï­‚	g¾¶Ï·d=€¸A˜5ùõ¤Oê=7…8_óµ+ÂãúÈÄÔMˆÒÒÖzjA!dÞ×;q-Ù}¹"ÏN-Vlž[;-7Š<Ns+îaXtãcŒ„yr0=£ Ž/é0qà L	$»ÜM""ÌLèÓó–Ÿ‹
y¿O¹!`DT'¹a@JKÚ¿¹:“µ8 ±ÐÁ+§£bµŽ¼&m#ÔμOé¯it^|VÛmmsFw>tyxOú2ü[×ÞÚÿ¾Ð[C”/²?2[Ôª‰ÐóJÇ„¹k<l‹Åù‰Àzˆ#‘ðÊT_ˆüêßµDd(Õ|¼¼¯XËàUL¦‰b¸4`ÐeŸ`%õ€¤
¸`ûáÍŸ³ô]xGê&¥ÿoIÍ~Ô,ˆ˜èçÔ4ïÂëjDï_êóóRTùgº«>Ëá5‡‚&¿û´‘Q‚!å]è5‚
ØñQxž+,æ•ÛâÓ	Òñ\‰à)tKö}Æà‡ìz®*pƒ¢~ÅŤ”'
p™fû•·Óæ—‘ CÓþÒ8ä•Ó6À_C	Ð.‰Â,Ý_uV¶Jr/¡mP¶·Í“ý[£Ý(芊ž¸à†Ÿ~ˆ$x1ª	:91ÜÌ·Á1¶.,cÂf¦z¤ö?k¼yFc;¡‚OŽü¿÷’‚Î+K\AÉ«O[[ǀʳJ=âà’Ì
+u¶ÚÂ
+º­×3’
++g'‚Ø<†Zw%¢ÈÓö'é¥Þ@—”DÉÞÌËþŒoãN!ÙxŠ›'•\­¥ cèáË(qè˜y}.Öè«ï^I²JÒûØåäµm§RêEkGƒÞêÈF:Ãu!°ääb¼až'ë"JsÍ›A|ÖÕþ\|vo[ûW›|_ñ¯\¹c»h- š‹¯P­f^¥DÙ?fAÁI¾3#æ:Š««Ý¶þs ÅÒ1NòžïhK¬g’žT»>²žŒ±È“’ÉÓc7ìjü“ZR[Y—Ç¥½RòÂñ©)C²¹-zz¨BY4(ñg÷Öœ:¥è·ôLÑÝ¥2Ú‘€œ¥žƒ×݉mùËä–ö£xV ×Ì^T@ÿåæ:Ç$n!cu3»55¾¢Ý´³ÇÿµU‰G	jçHGôíeG‘pºëBŸEéäT0;ë‚©:Q¼,ûŒ$:‰ÄœØàžl†º‡‡5Ä«6M[ò¤L—‰F }óöÝ£Ÿ‰BãÀ¢}{G´dVy.íq¢?½bÁùQÉFÕ:$Û‹¾«,ÈÈŠÎ4ÛÊ´<õró3…³rÑ"¸ZzrÂ
ùž³Ô1àÅ)„iÁnêžqJ?g=*OSÌ?õÖ‚’‘Þÿ‹VЈñ^˜!‰ÈŒŽ=Iôì2ë3üI·CLHŽI_"²Úü”¯«;¨ž µÄZÚ£Nch$Bmà—c=ÓWUD¿þ8VVéÚÙwÆŠŽ«R¬@ª2«•—rµ­«ßÌ‹æ2_ÅÝHš×c癢Áæí¹WmØ‘szUWŽÐïã…¥W”ئ¦óìí¥kÀIþY¡‡°?úOQ6Bb?{T`,‡?x|$Rb΂ùÚ·ª/]'RFÛv’)›!Û°ÙàÆøã>NééLærHì/®f"
+ÝñÏÛ¬ÝYU1™É
+Ýø’n¬ß¤ô­{ÈWhqë¼nT±ïsêA7ãïÚXp9ù^Äé88øÎbxšÓݺ€Ëæ.p}mãæ?4žû€æe½V*ãŸnQ…IM¡A*†µ³|ó)²¸³Ëß·g×~ww/òQÿì}KŸ9
xýîÖô-àûv
åSo-Tp$6°æ)'—ÈB‡yú(z‡xÜ5¦Í%¤G²~~Ó<RîÏF×É=pfÝÙü¢†*f¸eˆé=f”7Ð*ͼIñqÇÎ0LÕоžçhÛCžp]c—OcÍ$11¦Ù£¿i fÞ•J°Ã„+gb	ä„š±íù°„áìäÖ?¥Ð¸3w`³€ìðêªâòÌvAªÃ^Û!ßUe7NƒààzÇ•ýRkSÒ:¿,¸Ýé©«¿üÐBË:¿‰ÎE¨«Fh¥Y.9)¾0¨"îöíë¤TòÚö[æ{Eðį¯ÅÍ€xzãµóQ·¸]ÚCB0e]Þ'ÿ.·]	 |”eÓ
FÔù8«”lÂèwJh¸X¶P@a¥ŸUÐ__ßûzÁÈT:Âÿ3†É"¾4Ø5É0*¯3É®Ó 5Æ	Œ¼Ï&1üPM ›æNóÙt‰lN†Q¹u='…XßF`ñå,O»Ý„€|¾5+Ô¥ ŸAû+ÆdÓJ¾+.~êû
cúènYàvÐ6ÖÕzö%§®z5RÃü=å\áÁÁ¼ïYÛ—é1Fä4ýÓzŸ÷´t§ËÅx4³Q¡X´MÝ`Øú¿¤œfX&ù<Ï, õ&ýWÔ¢ÅËÖwŽŽåÆë\x©g¹Nò%ÄÔnzòVs®<¹ò3¿˜dz†·@1§øˆúýdIâüÀ2:7NTl²c	8Òcv<<ˆƒ°i¢äêòý¥!%>@x“:%µ‹‡rg!%à,â-ÛËÞku21·-ôö#Ͻɘ#EÊNXŸéàss7‰/„%
j¿&¬2ÇÈþæ8£ÚÇ—_â‹‚¬Ç`ÂÛÚ¡¨?±gˆu¤,ºÊA†åß2Frø™…xAjG¢¢ë—“®±'9ßy¾&úüÏ!YØ•üñ>M°&üýíU•P2ÃOæ’¼iœUhKÅXr¤V„KúC§?Ç«X†àÑííTC6ÈÞG;=«I9ŸÇsŒ[Óê(dU«}©i[›uD—î™oûEhi&òÀ¤¡ºÌFI@‰±¸éqN«öú„Q¨è“/wŠÁ‚:dŠ=ü±Ô/ŠÚ³ÝÐ~&®ù¦3GáÝÑ
óÛj¢à-2ówI¬{÷˜.û‚RRñ¡i¶0ª¢Äh7<¤®ýÅh(kH1¢hZ]?áÅmr†[t­!záŸúÇÞ–qþ·ðÇÄJ¨ºíøzx%ƒƒ-¿Õ=—¼‚…lˆ(S0ãNKŠSyIÄ^(SÇrt¥Š[ª÷ŽñA½Ù‹Ê¥Mþ›ÑÜ«›O}ÝäÃؽò³ÌÌ’µJÐSe.¥¿±Æ]…åÒD±[¡§æ¥±GœM™DÀÚPx¼úõíQ™	¯ÔsÊži¯¿LÅk%ÙH'úú&s9$v™W3ƒàöéÀãVࢤ–Âêà|I€7VáRzسd¥4¶û^7*Öù·u®•Žÿùm,8’ò?…±µµ™y¦Éñv°«Á’ˆ<ðHwkz˜€pó;ˆü§¹˜*8ŒXsšÅd!Ͳ‰}‹=Í<n”ŽSè_ÛddEgãeZ„
+ô9÷—È‹Ì×9æ\-=9aˆòO×j†–pìšBºî7uO¶%‘½©§f‘ôkAI
ÆŒ€++úm…âµc†E‰GÛ)V UÛÄÅ9ÔØÛáfËs¡ìà$Må¿ýÂQîsøÒ¥¸lÆ·=¤¥GhùÿÌÜŸsEÛÛà[·Pìi–'yOù4«V½IO*ÓYOFÖdÇIêç¿•
…v5~Ç-)£¢ÅíÜÐ)yaöÚ±š¿´—Ó””_QàZ×íñÔ¤†Ê­Š5ý$‡­zø¼†­Æ8]û‡!ÉÁ¬ú‹r*“ûAÚ¦^óFÊbNlp€ßàtEEƒO\pCÁ?D<–UŠ’È–nfÕîŽ–[¿Èa3S=R{‘»^²#¿“ÞA©G~ÑõIAg›«.®ÿ'žâ
+
+<EÃÄ.ØÜP¿±tþë¶tL²°ktÛù/ƒªY%iólürÔ¸ƒÝ)u¬»­Ïo‹u±d#ï´>+㸸·#µ:²<‡©}~£åomñ_h£¯J™Y‘£jUÊh÷%íBÒ»6ËìòÊ`=DŸÆxe*¡D~u…áÔ""ù¡u÷÷)*ò½]Ûëþ”ÍAÑóZƦAžü t”Aˆ„lö¦<O›sÄãqçŠiö.Êpš:«{°cpÍv=W8B­"Ò&&Ô7–Ø)qïª-fzLºpézëÿS¶Fz«'²é|ñêEù¸“ Ù²üÎ,•#ÃY8,sèKbj¨Diik=	5®ž2o哶˜â°Òé'˜É+6O£“˜•EŽ'·›w¾,:ÿ¿FBŽ²9ßG™ú¶pP&Š‚9™™qóŒ)‡Ý¼Kˆ­/gw'=š"2õ±:wü(lZÍ7{i¤:EÆ”‹xŽ”ˆy_÷J¢Â³ÖÖÎla›Æ`EþÈš;îì±Ì˜¹îéucǚ¹7ú^[Í%0pW?1 ŽíÀâL ;zçµ6P–0°ÐKêTð8PóÕëÌ,.öÕcˆÚuõÕ/4ÃBöwDħ3¤*¹#¥BÙ5üô¨!Qüó2rh~âQº&HH­O¦ˆ³hzÓ@7r‡·87A\¿Œ7¯Úú~8¼.²ó’Û×þÃ~—ÂÈ„{?ËÕÈ@|ŠÄ©dQa×…kkgŽ6¾Ãc0¬dM“wv‡ÖfLÒwŒú´¿íMwYƒDÒ•}/£èœ8¥‰‘‹–PGø`q&P“=ýÔ(q¦]$$Ø„©SDŒ×4=çÀ •€9HÍÕ•®.ÑFÀ•Ùm}?^Y÷Iãå‰ï
+?ÅadB³‘ëäd >EbÚ2òÞ´õõšyРãûJ讇æ÷-cS®ÈO~P:J®DB6{S©Ã·bÿ¶ýEº{e8MÛ³X¿8è;¥„15T"ºº»Š”WO¹üÇ[LqXi†úLꛩßÇLĬGÕõ_ñÑ#!GY’Há­Â}[8(EÑZÅçJJ¡¦p-åø‹öjRCe؉E”ðÍØ=|^CØc óÍžÈêîV}Ë9Çó®m€S/÷#	€e1'68@ñOq¬ïÀbln(ÑÎÖ:û
+[‹:&YX…»Î:ãò™ÏU¢œº÷6~9j\Ïàš´VÓØé¹Ë´Ö2Ÿ€ùZ‘ÉÌÖÔÔ²Sêö;XÛîIDx$µ»=L@8÷“‰D~ÝÒ‹LF	ƒ,·MÀì‹2žèYÊ°Ë
+è7JG§t±F@››}¸ÌqÔ¿C¬Êɭ㎚+¤‚ãbì’jlÉãþ3ë·‚Þvp¨üÑða¦w·|iÜ\6cÕRÜ­4òñfnLóA))öÞº…H[UQb4•RWðì4»$–Q4- ‘þìƒ
+¸9‰C£:Øž=þÁ}íoK¶Õxíb%T
]ølÐy×ffIÔ%h§¼€‹ÜÑÖc Ìüi"Ö£ÀÞÝsÜÖ­N¨Â"H`Îm(<^}ôø¦ÂŠÙj·eaOºÙÑ&컜â„úp··•Ê™Bœ‹ˆ5ÑVídsßmíÅ¡qËAVí0aã†mÞT‘Ö½D´€R†]Ž…e®
Cüá…#9|ÂÌ,Cpæøø*À¯do­“Ûª’Áí·F£çu2¤Û°Úº£Ã´"Åw¹ó¬4ºy±`RÞ]f#±ª ÊÖÌ,á#0öü©ÓàB@>_”›jÜÁ®ó›	c2ç%_›?uóˆ¿}t7¢p;hkä†={œÝ‡W=”)Žï~ìëkµGGücû.<Ú½Ò'yœbŽj7=y+·WÀÒy—ÑL2=CÕ –Ý|D}ð2ªq	~`•	'*6Y¿ŠŒ¿è––SâßѺ3oÄ%XïB›½1ŠrBMÖøòXB
+þvrk‘Üh\—µ0×@vxuUqyf;®ÎUï/ãžá¤¬xb„ÙÙìè@<=ÿÔ÷†¦Õ\ m¯!¼ oñÕ Š>J¼ÈçˆÉ#jò±ÛJ6‚at…µ%4a\,[( ¾kŸïïX.3È[5æÙ+¼ulñ­¨Ã)®ñ–;ª”uñ±Åó䮹“Š*?s<_§Ôä]7ƒÑr$š7l
²{—•KJ†  ç$¬%ÜÚAi?øß[]¯°`´ïÏmþø1+ÊØ`rùjÞ‹@Ž{sÁOØQªl¾Xß
+ÍV+–!qq;:Hö5ô¯§r(\ÉâO/(ÒŽ`{Ìr(¬œ/2Gð"uÁ”²kÿœƒ®_fjN
_ß
+¡Ù·>>„0âÏÒlí$ÿ¤Êªw|äŸáÊðZ‚)ÿÊ,긠áù-†vÔ¾iõ+
d ÍYkš¹P—Ák¤g¼É»ë¶rÎΞu[}®]ƒ>Š{š^Rj’w±^L#W¨{^‹Z±²&Ùǔޠ=ï"‚:¦çTº
+vµçšh™´ýËqä!ê¶úAº|	ö)¼¤Ô9î¼<˜F®Mö¼´.(yL¯“5¡]zÃD(tQÓ¨iìwÓ)Ð/uç«%„CPPýVœnmŽ®º‘|ᇣ ÙX0‡Zùé¸|‡–›el09ò5oË G³·î©l¦U	±6_,áè+É‹âÕBÉqé‚i6øñReUµ>rÁþex-ŒAšñeu\Pþò˜C;j_ºô›ˆ2P袻MÒ(Åî»R½^êÓvû»Ô­­É~¿ómÐi²N1G5•²›Õ¥`i²Åæ&¯ä‹KàÈ>"°xU¶Š?0‚€ÄŠ¢ÑEV<1Bââvt ñjõCSä.P¸Ùž^P¹Àö…äPE%^dŽýDêŸ5yÖã%A¾:ÌÔœ¾.£_6h²å33ªjœ4Ý^@…Ënæk¿Pf~ºkß`oà·nkØ'Ta$0g¸/°z|SaÉEâ5Õ¼¾©]âævÓNq¯8s||`Ùƒ2¹ØÇHãU‰IîøÕ#߉ý´
+Rã‰XÉm]ßïZìµaÒ÷VÈ]‡²Ö0)o 3ŸÖUÎeköÀ©¶ŒŒVù`1…67ægk±ó£Ë¢,ÌÓgÿyÂé¤QN]õ?’5.épMZ+çlúÒëZkÁ@ò-Ö# Ãð\f¶jѯVeêØÿGM›RAÿ1vI56êÿ—ûÕAo;8	T~æx¾SµÕ>ºn.¿äH)nØyö37¶S ‡lBÚ§"Fåý`Ä@’$èäÄWæ#`Ä⸰‘/…¢õªÿü±Êù‘ì¾2!×Æûr2¬1m–”*]]ÓHEJ¥©‚Ò~í£&¶,ºC}À&uÃÚáí&bV‰­ÀäïÔ¡€ö柞­¢I$þØa°£‡¬
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc68.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+ƒs	'¶<^ßæŽwUk"®§m¹p‘¬àª¶k&kGöæá¯âõÛÔ3žX?$ÇPÓïÿwë"•Ì cƒs	'¶<^ßæŽwUk"®§m¹p‘¬àª¶k&kGöæá¯âõÛÔ3žX?$ÇPÓïÿwë"•Ì cæN$qx¼£Ñ'îªÖDASÚ(oà?EÝIqÖLÖŽñÑß=(CÙ÷(«µf!°~H“ '»ÃãîËD7…@:Ƙ•i6ÇDâ|7º™ÿ½fïô·<Ö®é=ãǽj½É7>­<ì;<paU¿èAlTðºh,	™ f¢I`'¥6Ñ$œHâðe[¿NÁI±ˆ‚¦©PÞÝ~Š§’ⱘ±ÿ¿£zP8†¯óPKwÌB}ü;]Nk›ÛÁ,‹0ˆn €t‘,µ¢-»ZTÌ;„YÓŒ¶Úª,ÄDg­ï&G8TÚ¾ÚF	YBêD6)MD£ÿÜ%ôü
Ó¸t$¶'`<ªûÛ( iò'-76Òl“ˆÙøni/ãgÌÃõsx±=AÏzÛ“gÔgn|Gx$Åvxàªc͂بýiÐX8/:@(ÌY’0ÀNW:®D?õ~%´‡'ˆôX¶îmRlMÐcšq%òÈøˆ×l*j”ñl;™ý•½üo­ô·ÇX1«$îÌ^8àS41l¿H%ÙýʶcœŸ’
QO ¡§ü	S9Ù-ãc[ô pCû –î…„úå=v ºœÖ+«8ŸX`
Ü.@è?XïÌA‚oÁ”i…ŠèÇ/·ö"´×m¥³“oE…ºd´~¾¡´M:¶¢Ú±$êÄT?èSàl/IâH=õ\SwYZk´¨…v²»q8©IX•ˆÎGÃLŽp¨©a©Œ²„ɈlRšˆ=[ã¥J›uå(»mèH6qNÀxIë«P]ÒùNô*SL¦¹(ÊT&‹mÂkö¥øœw7RànÚÂGÂËäTeYœbýxùœæÐ;¤Q",J&¾·1E+tk~gX}ÏšEZnl¹Ø;
¯íÜÒ^ÛÎ…›÷æðz‚ƒô«;εÎÜøŽðH—ìðÝ™IƇ­M0çÒ½°p$^t€P…²9`œ®tÙežÊ1ñ2:Oˆ)Ž¥§5P‹äÆ
+/¥“¥Dê:äF8ýäMzXß&‰Š4·On_#)k\§'õh½ÍAˆ~÷üJuN
õ°qÁÚ¤<Øš½Æ)âJùí
'³ØTÔ5ÿØv,/ç7gåÞ8Gõs“*°bKHÁ…¼pݦhbÂûwÐîüIM‘ëh‰Ç$sãtQÌ©ê,jÉHüsßsÊëÆ#ÌZ{×
+Ì­øyoXÁ<hÕœl-Çi Dãpxý»iØcJ=¯ç‰qÆ%#9þ2¢ž]_Så¦r¯þZþÛƶõ]à"†ë]1Áé×zì@i%±VKp#°À¥\€:Í~°[™m/Û×® ¸†Tl•8œóIæ#t¾FØ•|•C- WeIîdIê$‹±è^+D9¸b¹´wT»ýÌ80ˆÐ»Ã…‚ÞŸ5Ò	Í“(^sñDu0³ÚW{;Þ((Š*iÈuüa_uštq4Y©2HÉ
+•¨~ͦÝØ^’Ùz÷¸¦@ö‹#h£k
ñŸ‡ºÆC|ÝV)a‰ÃKû›‘hC0CÍÜñˆXaòνéaA Bª–¸L™ŸÙzWyº­6Ô|˜ZêÛ­î²´ÖuMì*yk
+âpO’°7
Ž›˜àMOÂO$y
ؤ)
z¶ÛW”+ê×P4kÚÍlâœð’ËK º¹ïœmÁ½ñgû+²õŸö„•%$°£Z8þ
+4áJû$ä$BÒŸôÖËí¡bèÉÌÎTdö	"ok•—vü°^‡¨š¤Œ—õT¦˜Q<oP‰¨LÚ™ÖñWí%în¤ÝÜ©<™Ž™‹Õ¨Ê²%Äçðï%ѽv$U¢DX”LasbŠVèÖüΰúƒ)Šv'¯¿CŠSVNÑ…{òô_ð€1W5q<Šò¨òÌ#N+"1ÊH1
+׎è|j†ƒ\ÄѲáŒe{½äôi¸ÚžJ´ÜØo­vCÇ¥¹¼«+óÑýþôõKvw8¥íý3Åý§/’‘2Gš`Ó¹g}àH¼è yrÀ'%Aè7¯ÑH¿À&C$‚Ëþê5…T¼éG„ˆ·áÀêQêAÎC‘éžœ'åé|û¡K
c]dƒ$´’OËãö¬5ì¾È8"ã¯:Ê!‰bÿdtž
RWSj Õ‘&^(W;WˆÉt2<ÕŒpçÕšô°£L	hsžÜ¾FRþÖ¸SN÷Ðg‡þ,IÛ±^¡»’ƒ%T<qÄfÁ(d·òȨ±<<Ï?’Ó¬Á‚ßþÁ×NÇ.ûs+Îl#QüA%õ=´qÛ;ØGäõ‚
üóå”ê&œ÷}â0Ÿ©Ux­ )g‘RÙ”0ï0ÇN{­¨µjã­ìX^ÓnÎסpŽ÷æ;T}Ä–Ÿeà§QÐÄ~õÔ÷"ÖxCüj€
+·[½ò¹™Yö=²s"[É[@1ü¯ë¹¦ˆ¹7ŒmM6ñóftÞjß	ÄS
+Ï}œ½‚©è‡L³Ï™ëî½Áå’š?ËГHæÛ袅OÉXÔåæ£æ‰6Ë‘F…´ö³…Gí8òÞ°Ÿ2x.з%ØZ“Ò]ˆÛ àðçkÒ˜çšÓS®Äà-MäùF¡Ï‘ö¹Éxo:S…ÎÀ-pÖ‘ºYQá‘œ9l†»õ|~MdÊ']äÙ¶„ùµ,øÇvuÙ­Æ=”zCÓâ‘JFrá4dY!º¾¦×$QäCá´á«‘q÷ºÝD˺bŸ.*ϳôÅ€ÒJ¬–àF},4W¸t‡ü}.µ4³hõïQ=wמ1'ŠÊþL®ÖFˆ±NõŠ’ŠO]wg®Óëó>®¹K´—ŒÐ„‚׬Ciç1vÇ‘ÂtTšŸv¶ /Ú^2«³A@m¨Ø7p%
+û’ÑFèaŒ­27ø7†Z@®Ê’ÁÈ<’É*HͼVˆrmÄouî¨kç…p`=
4½:k5S&ýL„—힦ðŸß\R‹­–†h6yÍl„\Þ\Á¬¦OZ†Ï¨*Ɇþ{•'ò˜‘Œ"ð€Šéß`‰Rõñ Y`›2¡#j¹.‡;P¼æÿˆê`{©®öv¡P,P	T.Òêå¾8ê)èâh²Odþ7Mü‡Q§­¼9¯=ôómQd/ 4fÈ™œðn;žHXåþÙ8Ü;
+;N¢È3þëm\Íþò<Ñöêp@9”ß™ÇزûðZL¡ž¬c5ÔîZ€ñFÐ[Öÿ#i‘†ø§¬R›–ë+?І`†‡¥ÿ
°ÂùgÏ‚]„I1,m˜/#¯ô®òiGlµø*-´É«G‚afgˆÅ¾ÄíÚ	?Ö¶ëGË•fíFíÀSì Ö÷.…:ÖY‰·×Zªœ¾|QõL‡¹Ú›æ%”ÔÈLÁyu±êš.ÅTòÖÙàž9}n+-Ýšž™ž
+Hò*­UR0ôq«®5Vɳ hÖ©‡=ØÙ%'ý9‹–]ioÃ%B
+|–ø,›‹Kš®µõÓ¯¦qºâw,õ¿õM¾Ë“£ú°Å/¥˜0miít¤8KzhÂß®.ÌñZUIr .ÚŸgÿÎëVy÷#ñ7JH}<[´2páhß”ëHÕH„¹#õ>2±‹Ç2_ÄÍ…( ¨ÈñDÞÖ73ìå}¼M)U3YìnØÜ]j'(Ål›@#_’üÙ&É‘…Ä?>]#ó#ÃOÅ®&¿¹i2&„þݥ笘lÁ«!Ñ@8é_)ßE	Hf8÷¨Q-¢xÞ M˜©/±ÿ®ÇJÁÜU§¥Ox//·M‰yJ•ÓýÃJ¿gìHªYˆ°5˜ÂæÄ	¬Í±å}éR	tÛX
+°ÎâþЫ˜oüD“Q	ª^x¬ÄEåÎD'DLA«hé^›|6^dÒTr•}O´eóÃoGÁ“pMuÉ1ìNCc†	¦¬œ¿öùõ¾ýb®<jâx	ùMù…FœVDb‰$4b³ÍøÔ¸•¿yßÊögÕõÒm©!”o=JD”¿šBsz"™V’×ZpvLûN˜¬¿’k’°z·Ôv‡?ÆÁvÏg2S ë5ܼÅ"ª0úÍŒÙ×GÈe‰<÷u¥­ÞGì4†“WoeK.Vû¿çáõ26÷–ìîpWÇç=f— çS^9?&dŽ)À»oÎúÝeÍ:].òäNJ‚ÍöÖ¤ùUZØL±ò–tø\ÒóX…£š<ZtÈtK†±&’ó3ÉuÕóˆŠ
+¡~[ªîÄëò"—ÆÑQg(•nWáÆnC¿cL:0†H‹áÉj¨eÏŽ
s*ßɢɂ†?Ï!%N×Ïøë_–ƺÈHu9>ž‹ÛñEjÅapDÛí0¶·q+pdï`Õ—ü´¢H¹Û7eœßÊu+¢„¢Åw`ù¯Û/Š¬"Û#?l€Î%â}ÌKÕ¦ÖÁ™üÐIHP­….m'ÐCt‰BÄãÈè!¤®¦Ô]·?(L¼P®v®
èdx·à8Ó·)õ}[˜Ðæ!¥aŒ¤á±m¦œó½Î>áÀ€e¸ø½¼”ÓWÅ„zú{£†XÝ°®¸ÅPÅJy…è£OÚ&£ÃýÆã§:ÕÔ¶¼vŽù‹ÓêZa„	?µî#pêX’›+¼_k9J¨xâ•ÌŸPÈsùMx:xƒ~9»EŸ£á$Ÿ³œ“\ëæVØF¢å‚J÷zuâ«v­ŽÕ÷Ûá’+9É€´ß›•=ýÀ;©¡‹é¸âUmçÉĈßZÕ‹Ñ‹hH Â³ÙrFÜ›ÍM…=ü‘yÀ>º¥®¶üåû×5ÉL%4óúÙ`#OªðG@RÎ?¤¯5`Ã`“4œöGMwÔÛGÅ°¼»Ü³_àóÑv¨ú•1=#.ÊÝS¢½•šiìÜŃõúÒn’Œá
Sù"_“DƒåIeÒ}fSCØ6.Sd%„¾—˜äQnË>‰¯žÚ1»Õs¿Þžü÷µóD±ð†åÔs¶gù*o/²ñzyæD¶¶€båCËoQ4
,onÚšlÿûÌè¡Ô£•¦ƒú%gO͘{ƒþ’áò®YI“c&ÝE ^G{–Â`Ö™LòÝ©ÝÇ”¢[{_›ïÙ{µÑé4ÀßìñIpýj¡cˆ)EŒƒÅ3…ˆ/ËÁgŸ×9)~‹½;Ñ«ÍYž°µ=×Ñ[Ñl‹?Œuñ{(ŽÇpù¡}#dð\½sJ­´;¹º
«@ÝýÓÖ,¹¬¸È@aw¡m Lź‰c«4'ÿ!ã—aº}ºHšmÞ{^™ÝUCgùB£ô  ¥R³L²Q‰ÕõóËO²4-Ó)»¦A•ÝZšÕ:ïŒ_ƒ?ñoðÞt¦Zà±?i²¢ß?%rØk÷øüšÈ‰NºÕ¯qïwXí“ì꯷^Ú©}˼‘¢olÍ"øî+H\>Þl1lÆk¼!+g@*+þ¦%FI<O0ü¬f±½¢¤šÍâ”å³ñ‰¤G‘z5ô†»Ù?” ŒäßhȲBiaQ³H¢Õ†ßußK?âói§ˆ"‹iÄ#\Tƒ{õ—¹”þE1ÝŒúX'h®m:èåúÄâsæ0‡@Ù	®û±´Jf/}Ø!"äB0´S´W½Ùc}©'À~}÷oÊÛDÑPé	-ªÎÚûñ³+J;¡2Ȇñ\wh{Ð÷âzî³!bN	,‰á˜A±Œ
œ÷	9	žºî=ÎA»Ëû|Ao–:u3½³E†ÒÓbì“?,™è*¨)#ìßa\ÂAÿü¥.¯b'FõU·Á¡Ÿ6AbbÙLÜ^Uµd‰U´B	ëk:™ÃI.–i-Ôçx3$"ˆ4@çq@^©¼dK{‚€Ú"M­nàJë9¿ŒÍÂGdnín´€A‰9Ÿx9Tþ‡e¬
äÚ•ÞêÁMÖÓàÀzhgtÖò3WŽ®Òw%]fG¬:øÂ䳆-ü\nåíÒËVBf -‘¡o-T€£ˆ¦¸Ak	´GF1Æ:Ý8ÂU¶HzÝj¦Lç˜3Ç!Qý#£¸¤G1Ðlò‡Ø¸¡¸ŸEQž´ƒMT$áö7Nù-?Dý.	Ï£À¤÷ÿ
+(]²ÀéÕEÀŠ£™þ·`­ÔRÓ†¥à\ic+8¤£Ó‡Óس·$â¶zÿ5Å©Æ	ø`ýòöÈÔËó†b3@ÑË+.2d_FÔo\$v eÑã
ÉÀöOAñì_ X ¨\¹É×™apÉRÍÙÐyžÈá=(nšå¢SGerCzõûÚ¢¨];7vézŠ°º•ªd#ËGD`Ýy†ÞíFéË~ËU^ºX—ÝÙ6ƒ…݉êN!¡ì&9S•ûeâd©¸KGçrÕ湩0È ^@.>hÌ/%ýÜv!°×á¯p,¥.vvœYf:áËÚ¸‡áùx¿ñÉà€r5£/“­yëý´˜_!EÆjµÁ´³»)yR˜6k²«Š‰>ºõfá¨Ì˜2Û¯k‡ªõÅuZrõ"¬Œo‘ߤµ1ó²@B†ìŠ¿sSÐ
+b•Ü¿ÿŒ,½¶±4ãF&Ò?íSE¤™+1ËV~½ÀWã}™ï΃™º’bXÚ-^FCõAùÒŽØwíTZuKŽžŒ«>ŠïëÛ¨¥jzÏýâɧ[ g¶ÔzæzT¡ûíá°,vÂn&\]|)Û¾þ¥…3{ω˜RU’(…ÂÌÎ
—2a'<•Ç©~±qËŽ‹7ÌnjǦ2Å@±ó\t±²s³´I%þaø6¢÷<˜o©+ÑJ5µ˜…j
åzòSHÔü©KÀ¬‹¼±¥È»Ÿ"kz¬ª¬ÚPÔ$Ð¥ýóõ¥iÛ@-ì#4Ž!®ü+Ù]ðK“øc‹¾B¨î“ŸòêÉ)\—¨ù±(¯Ý!rúÜ4>VZ§)!/!ùT4Gª¤`4õâKAj¬{]бOz­¯JNçr1ºÒÞ›JãXÛŸ`Éw,¦ØˆJPT·± ‡rÇöä
ŸJ	JSfµ– IF• .6xß2“«¼Y€,œü…ªØA¥ëPžý²òÃøA„ø1íX$+(–)Aw÷6»CQâiÙîX÷c÷ša(‹;[é}—^W-`ÚÒÇèUp–ôЙ£A\…ÿ6<´ª’ä]\gñÿîuÔΧ6"œäkè’ø³9DîœEœÝ—Îj«UFŸb…ƒþ‚íã/Q '?f¤6Wnó©x¢²ù>W©#ÎãˬòóFÿ*n”úx¶udàß(У5Ë·oF÷|d,“d¾•‡P@Mÿ$ˆ¡±nfÅ×úe&šRª
+f*PÇÄ“}¬, b¤ÁûØÖpY¯¹|CŸ}û‘ûR™ ìpqƒéfpeA´Oo;‡IÝb÷g^¶m.ÛØðê’r·im²ÅÜ­¥ºÔNP—Ø+€>F¾9å¯L?•~|ºFûF›ž—(ALcoÒdL á"§.WÓE-ØŸKB¿€pϾR£ŠÌp1¶ÕŠ·èqE¥÷k-œ—BÂX6O†9žÖ-Ý-ÜhqÉÑXmÀ0‘XÎôÒ¼ÿsA}EL¤½¸÷{åÃœÇo‚2¯{óM¢ZYð¡]š-,0O^ãA“”Ÿ¥ªSWžð^^sšò”7»ç›”cÎÅI²
}j-™8Ñ•0E‡×úÏ6¤p>«}KFÁ|°¢G5]Mæþ€&Õ;ÿ·4F5$5Q…|îb€9n€¸Øý[Èv–Êy:°J×.’G®‹]BÓòï+Çè«°}Ùá½K
+-Þåˆ;¢I¼ðE•Š×ˆNˆ˜‚KÐϼ+ø>l¼È¹¨ä 7úžuÊ
+"û2›ÞŽŸ;àšêbkع3o7å¿b­—£©°ãµ$¨I5ºj}7ãhãßt­1_¨%WÜ™¨m›zxÞYqš—ñÍœ©e“uVâ¯Åœ†ÆQ8E%c.ñï÷aç:ÄAxÔÙðïšïŒ%¬ˆÄ=HhÄ({‡íµ"6m7cò£
+‰ñ>η÷¹ÚOB5>Fïá¤mfšÃþ †S„ÕÏ@WÐøEu¦¤„¼„PzÃMÐ’ªÐó¯1µŠñigþ!LõŽ†5%»Õ,ÄÒo_V5Þz”ˆ5c)„æôD/¬9³ ´àì.˜ëœ-Ec9Ö9™}ôsµì~‘ŸìƒÎd¦]Ëj¥e—DI`é‡(¯³ŽÊxó(]	¯'ÕÚ9Ù¡hùR‘Žø—èz0ÍïÕRðRÞ‹’%øÑsjøXW8ôNbaÇÙš€h#AÂ/e#êWG¡ŽÅh;®Þ0Ê–>\¬ëcÓß÷dló1Å>Á>ஓÓzÌ3@Ó¦¼r~LÈRkÞé§=ʇtº\ùÕ'œ”‡i$N†œsTOäHC¾½ÃU~LÇf‡õÀ›sUçU_Hr”ÇtcѵÇ}hAà÷%•™;CRX:½ŒŸ¶~l/¼‰zŒñ±U華­˜ù1$<èí¸¹û°[).x´èè–L9ûfê·û
	_ü¶IÁ•Ëù:*D3$‘¿¢ÎP7ܮߑrÂ\ȸ,óG™d¿Siƒ:CÔï	gÊ…ÎÒƒ«ƒÑç™­©ïh BïÖÝ'Á¤‰m‘›déÅ»4SšT®:[œ?ü³¼šÜ†c=Æ'˜t`2ßÔ.Mʃ*æT£'Y0~ƒBJœ³ƒí˾<14‘i6êr|!«ÿŠÔ—Âàˆ«_õjÔ‘¤*¿÷
¼|Šäö€ê§—¸Z‹J´	‘ää^é÷Ñî—Lå~F—6¢iµ®‰f
9ƒ&| †ö<ýë Ç`qsâVàÈÃÀ·3åuYo«nÊ%£‰êVYY—îÀïC«^	ED«F~ØJÙú…–·Q±Ÿ/å½4’ G\ÚN½DxTðàÜ–&*½’ 2²Á¹}¿×º´i@à232Ð&Ó¿P¦§±¿ªëƒÙuý=Æ*‚^`(’¶ßž²5‹|Ç-¶†è„•ÛÍB4UAQµº,s~P˜e AìAÍÈðs
+Ýp»s0R÷ú¶-<$½ÑBWÂUßÚQ%ûg|&ß›£ª©…R+ߺ"Q*sAgÇ 	É@¢ª*Ê*]õ+)`gr’Ngë†Ädîã¹ß„-ó"Ô”Ös°7o¡aEÔÊ:míg.e5»®—ôéö[°§ }Am— —”òÍ[ž©L[›ç‘ÛSt·µqeìï»É´Â~wÁFàÉ}í(ÛÑ9ñúø»Ìûü7ZN›O¨À6ŒëÛü†üÓúö]O1K¹O@3¢E^lPp±!ø?îÌÂ_Î7‡²á[ƒÂ°9+Vþe¾Ör6”MðÙ7…# æïšþðtðürkŠ#2[ßH#{%;¸ËѬ­Œ<Y×”óôêÙKìG·ó3J"?DHYà	”‘¸ã›û™»è7ýwCç0H›R›\
+”Š7<ô=½7 ñ&“îˆØ©Ü‘ï¶(ãøæûÞ O!Ôø«ß9Vru£+7zç&vO_ÏmÙªÚÓ&8&•
£´·.¿Ð]™{¯äŒ¥,+‡š4zå?ò|iWA2qå(¬0q`9!\ªE¶¹
²M¿Øè2vH:y9MMÒûEU' ·äJDn#ÀK¡|¶TuË
îÔþ¿é¥_a/î24×ë³j˜Jhû8é¯ÀFžIýŽ€¤~UCjÀ›À;h%ñŽšîµ«Ž—}ek¥{¾Ýû0¿ìMé7bzF\‰§¦Yg7±GÞ̡ܳƕŽf¶žú«d0îš9ÔÒµéÜ«½«[ÍŽÄaš”AW^šL©Võý _yÙRfãPJž<‰vdÉE¯†D<)ÒÅ¥—÷$é¹Ü9ß'¦ïD¾;ˆ
+×’ʹú̦†­l\¦<ÈJa3-բ܋|C!©bk·æc¡!ª¡Ì‚…­Ëz6_A·pP} q½J²V4/—h ­}ñ}Õ<_\²ˆŽ©²ç0ÔM^êÑòAX“ðDp*Bn þÀ¿Æ~Â*åówûˆý×µ:(æqÎïTÞ^yÿôòшqqÄ׆‹Þ¢hXÞÜ
+©)Øãë…Í_µ[$7Q(éJÎ2ž‡&-ö‡–úPé>C£Î1(´_³ì²H9Êç	nX{>%Z21gʬÇø­ÊÞš·€ÜÏBÉ(ˆËÈV_Fì§R0•á9ßùA²’;ÆL§Š]¼Žö1™À±/˜ù§O§“5Y¶ö¾+ïöw¿Ïh£Åÿ’àçÔ_Æ
"RŠ—f0
œpèÍO;m൱̨óãâˆéQÏ2OÌiÌÔÃà¸&â°„!Zâ¬kü–0¢‡ÑÁ¯3+X±É^¨×ŸF
+S^‹ŸÎ#³rRüg<v=¿K‡².!}wz³¿¶¿Ø~.êÿöP.“àï_úFÈý¸gæ”GuvoiK€§ç»±XoÝø–é1N#íú²hÔi)¿ß:˜sìÛæÐÔÔY.ퟕ:äP¥:ÚGÓqÅbùèú5{¸rd‚ik;dEm€Â
+î_Ú@=˜—iÆKhNãB2Û3Âiúi)Ú¡8ö¼/§ª&†Îï„[õ@]W¤{˜y¢·"÷û‹žyÆ„§t6°€<ݳïÂ-hì÷“Óž;™tÜ×ß<@¨øÍRqòµP·»*œñHÝŽ¸[|ïrI-"îÿÛ–ýrhZ»RkQ‚7§´)>·tþ~ÿÞý¡èQ.'´Ý~ÒyY£~Jä,­"Öóíå)œi·Câ*Ãî°Ç;ÅÉCë)²uyç¾ixR´°À!eá«vjF®’QABçeeXÑR<ïjÜÖ»Vj‘03z9ò4éµ´^àcnÀH	&á{|ÏتHs¼©O ú‹e?YÞ؇DíÁV><¸|¡ ØbØ‘ÖeBVÎ:€TVáQJŒ’xž`åE6ÌgYU)2‡Ù5×{ÿUðÏ ;]–ÆÕÛƒ“±.‹³¥êJ¬B)N­œ–³D³Ö ƒãÒBÀ•b¡B:…yÊGº§á“å#€`.^Â>¥Lùß[âl^Ž?ôjõk<¯~5@Õ£Ðy„Ò¢{Y·£ê£ –~ÙûÒS
DÒ•F¸¨ö÷3:o5áŠb§é°NÐAÚtÍ&×é
LýMç§Wbp˜¨Îr€Èò#ÞéÆ{Òê<¹§ÈÌÈg`˜8kÆ]¢¦þÆN’‹6CÉÓô>?¨2e râ[BòÔ|í;´â•Ùæ$Ñ`€¯Aëu”Ì*^ú­BDÕ„þ`u¦u®g¯ÆúONüú>óÞ‰«ˆ¿ 2ÏZI©ëÿ{V”v_dÿªïÃÖ/ÞÓIÏœ*¶b3î2ÕydTÖ€é‘IçVîAá	îå'íó·›g6Ÿ‰¦~®œôZ¶ã“l­rô¸îÐö½ó›YôÁ{BÄœXß-‚þ%ór!iÁz‚k‹ëø‚Þ1têf
+g*2{Š¹»ÄÅ;~X/ÍTMRFÅ;ÙѯE§+'æ̳Éyz¡x@–¥”¶EyTyfŸ'›–e$	
–åGt>5CÏ.bæYþF¼³ÎÐrzº\mO%Σ¸™‚ãåW\C*6ÄNŒ÷ªsŸ:_#l‚Ä>į˜¥¼ªwÈ2ªu„ËÖt/›"’\1ÒZµ*ÓðfHD
h€Ó {ËŸ‹4ß»ˆöÁÍ]c¯>à+š¾Êï«óÃÆ4¯¯ènöD,¾ygÐú¾®P!UŽK\&ÂÁâ=¥²]Øj>„L-uãØ‼OeÈ–ö©DšGÜÝ”(Ërc‡™
+ŽÈÜÇÜ"u‚r#ðr¨=,áÊEÕ©7¡ÉŸš±».Ýô4ÐÎè±aóµhw~ª¨Æû4Êí·ÿ:¦fÚu5ê$~·á·eƒûcŸf-³åfØ|²¹,î‚…4äN6˜íºP"ÿ8<ðÓ‹ºùf®A¹îJºÌŽEtí
+™Õ{Zå¸Ü×ǹ
+‹
+¬„Ì]2Z?_ÞZ¨[
Qm‚ÖuŽŒb*‘t§p6™ªq$ô.§z§&SÒe*˸a»{Ü|Nµ•)p7ma­aër*¼¢N1ð<òNsÉh“	R¦%_Õ–¬›:»?½,°éM¬ÔQ˜Ó-*f“B¢çF[mUŽb"½Øù­*m_m#Š¢!u"š¨"HßñnœïZ~
+ˆç\:ƒ[0UóãPºyW"‘ô?œZÍDzÈ,[w¸)6¨h¿M¶œyd|DÀå65Jö6“ÂðÄÐ~¹ØzÕí„,–Ûwf/p§–Ï·Š	[/ásÀGµ¤»Wݸ
+Ò8ÆVpU[»»­{sþH
+Ùqô
+ãj—O,‘í(Àçùñµ‹ûÄf€¿‹Lăºí"q>•]ÉÂñÐ3ùzÕkHWúÿíÐ5Ðê•Ø	v“8¾¤Ñt®6*x]4ŠÂ€
+3Qª0Ü€V\d ȾŒµÞ¸H&ì]Ê¿Ûñž‚ÿž]°]$M¸o³/Âइ¯½ò!ßzPÜ)×&Y¦ŽÊä†ô÷ë©YÕ/mÚ°ë^ÆQ¹6è|w›$.o6–6c»^Žž›½€ ›Sœ#ª©~Vƒ3ÖÐQRM‚èqJü×öÊRMºvnìÏô	}i7IÈF‹ŽþˆÀ§ò¡Ç"ŒÏ‹ü‹ª¼i°3§¯l§2ÉœB_ÅLr¦7ëÊÙÈOm–ŽÓä·ÑoOÎÉIþyÈW¢ªÇ¿à¬P/­³Ka0kÂ&yàÚàíJQ£³¡Ãùâ³Ôæú`á‹vöª8ð5Þ¿D†š¬FÏì—ÌD`@¼€\|Ð…^Jç¥ìB=}³ßC,àXW\ì(ì%²Ìtß‹©mßïðcÿÝäj[^;GòËçu-¾BŠ‘ÔwŸ8uãþI›’ê@ŽZáÃÄð‡`“ÚÞËú\q¤¸ýꇇbDá-äË…æË4$Pa×â9#nÃè¨
Ì~Ʋ`]ÜW‚[~{kRò¤-l&ÖyK	:|.i÷,ÌßM…-:d:«CÖI÷—ê´ä÷DEÞ?£Uwbûy€„Å	c榽Ä7¥þcø[Õ¶›82ù0äÅ~ZQ$Ò‰㕼Náe´›QBQìµ0òÙã™EV㟑6@gœq°f«äSkîÂ~h
ª$(Ø̸h:ã,XgqhÛŒL¹~"ǦŠU/<Vb‹¬üg""&®Û4ú/Ã>/2i*9Ä°©Z¼Œ†÷‚ï¹­îÇ8¨´ê–¹%"JÑM!·=ÂÎ+Iå-8;…&ó'LVÑI»IaX=Õj;Í‘cî;齧Pû”n^ìU}èÎ
+Fâå­d¼Êõ
+!>K|	ÃË
+«MWÔôƒçÙS¶]ÎqµôÑô¨_
+ëÇß}Xì™ÜL¸ºø:R«=4aáWföƒ-¤ª9P¢v7ln 5ì6à Ÿ¡I~âêÆÌb‘ Ÿ÷Ÿï©ì
+WÑÒºB†à…ÜýVL6îÛžæ ú¡šá¬Š$32™…3dÂNx7“O$,üâ‹n…““'Qd—€û¸.èyæ{u8 ’JáÂílYóx-&ÞOV¿”jw-A¾3½Dì‚_ÀbømŠ‹‘k[û­ëÄ3ø#ø`§‚vkõÌk¢ÊÕå-UN±_>ƒ¦ô&ÍÒmÃsœJjd&Ô×4ôù¦µåO–Ee&Wk#DÖ'ôEIE© µH½Wçû÷WÒ«€ZÅFhBAåV¯ºý–;íÆa:„*MÁ;”§ð&BÅøOSxÁáÈ.)ËØKC4²è6B.o.îVS©-CéTêC	³ÄyLÆFx…@Eúá0Ê)ôöŒ
+P¢0#ùÉþR¸3MïPC§Bäé ¥h|¬´SRB^B(=ï¨hŽIUÀh÷Ù–‚ÔEöº½ž&ôGC”œÓäbi¹¡+” ŠÀÙä„m’	âÞ4ò)ÆG‡È|Åt=èùä)x)oË	Iœ|€æ·5|,
¥Œz'1¾íâMÉ@4Ÿwßƃ®a™¼HŸ8Û°«#Àî>XQ­
” ¨s@ä“ñÕ#””¦Ì>w1@’
+Œ7@\lð£d;Ke²X%åI­‚WË !çyù›í‚»lÒ—¹•üÑ1ØÅßÚXÿ‚ÔTª”]5°•ÿ4ÿá:Ø–¡Tœ¥nÂT‡¸Ã=<o¢¶MÅö
+èNÚ‰¼Ç‚´+qÙ†Ž‰(íbÇ°HVP1R‚îólk†8¢ÙÒ>¯Á°óÆó)ÂPv8¶Ïú38¼®ZÀ©¹“ͪà1õ½/[‚¸ãlxuI9Õº¸–[äEÕtɶ¬Üõ»˜NÅ!a,©C’Ok˜à˜n4¶êæ,¸`Æ,gzi^ñ†·
+®°¬&RÐ\õ³üïNí¹AÈÙ³Îÿ,ãÁ0êµSlD%(*ÕÖÍ9í{rˆÁ%Š%§3ÔKªŒ#Ä<áÇÛ^¢@N~ÌUl®Üû(OðYyï|®½öñw´jg‹ÝN
+„r»tI|×’"wN¬NàÅg5Û¤#Á1ÌÏAøÿ™¦‹‘3R¥7÷
+Ú<QYò¥OFÛ‹EùûŒãTÜ5=éðqêÈÝ£P½[j‹=s=*ÞŒóøÈþX;Èa7. >€šãH
_ÜÌ—³éÊL)¤IÌÌ5ˆü
=y§$j~Ú«`VË^Ö‡ÜdÓÁ»À=VUVm(jhÜð÷ôÎܺ㠘vŸGžW~›â x«Ç|¿Ë_€!„TwÇT “•;ú=EX]ÄU2Ÿë­±"0à²Coø†#úë?ë¤/],ÅàâÏÌàÊ‚u'žÞv’§Äóμq2Ú\«­ýÉ9äsÒÚ×Óš²)L‡»YÛEÊ€…]ô3þTf‰L€€ãÙ»ÍUôì´-9ôVF¹ÆáRÔ–÷Y !CvEÑ·§h1Än±Ñy—¥GWiµœ 3­V|Œar×C˜~.7üøiŒëŒ+!3P‚˜Æ޹Ș*@ßDS\®»ŠZ­#–„càƒa¤[	$=…àúä¬`E߉ÂÕ0Øj)çCÜp.Œº¿›RßçÍçl×Õ±ŒÈq[=Œñ”ìÚcŠ|Ž
+0ðy{djë÷C1— æëbq·	sÍ âŠWóÖZ%3„™°lžr!±Z§Z¥Ðâ¿°Ú`?°õ¹eã"æ(‚úŠ˜Ugmóö×›%“ÞdCöá¾.a®ñ~ÜÙ„ƒ1#ô¤Õî€ÞÁ®11â&n/¤Ô2‚ʤZ!Šû»ÂKº˜j„ý<—D ýûšY´²ý_º<)ZX`ž¼þÛ‚;5#WI¦®!ý¼¼,æ)ù5nkÓ+5Æ—=’yúÔZ/p¿7`$Šþ³>éƒlU$xéP“ KcäãÏÇÖË×Üu%V!š'Ø
+N‹K×"×kÏÿi!`Ä1Þ!̲	e­]Ýþ„ÇüŸ@0/aÜ&òá£q6/à|Kú–Œ'Ÿø}YŽ4jºšÑáL·vãshŒjHj¢øÁÄr(
+Üm­ç¶ì1‰òt}”³\9Ž2Aº„»ùÃV“2cBÝ„:X@à×ùa˜4vŒ	õÇçO“Â:nåá T	|‡è)	¶yÔ(ÕÓNö$àG\£>ù9ª˜wñãKð9ÍK}(ú¯ßg–Z¡×
vY$’eýŠ7,	³
œ
-–½ƒeVí|ØeoMÕ@né!ê‰Dëd+¡#vÝ)ÉÄN8tè©“¸p‰ÔÖ‚fT÷ƒÿqDú¦€é©fºfjïp\qXBž-qV»~KQÍæîÙ‰—›,Öê/THåÁ#§Ö­ofÞn×cÄG3[O}Û2wHM’jiÔúnÛÐÛ£èGb¾MJ®¥/M&Ú+ôð¡²â)3ÿ(‡%OÊ;2ê¬ÙC"UÞfAÌØë=¡®Õ8(°¶Ð%Y+™Å4PØ°ö°ä¡ƒ.YDGÚYýj¨/…uæy®,Çx"8!7`Ñc?a—%‘"$¢pŠJÆ\ÿÃóÂÓt•‚ðµ¯ý$Ã)Ã.JE
•zЕPöÇwDlÚnÆù[ÿ|sóo©ž„j|V¶0’ž.U¬[ÒˆY¨Ñlt;€$²’¨¨ió¬¤Õr%‹"7ŸH`«Þ>[*´ëˆwjÑúÜ¡¾™	wŒÃßUÚÌ)›á]¦·ƒ€®½íŠê QUe ô›š0½9I'½ûCb2w	ÿÒÎáB˜÷jJk·X•¹Þ¾¬j°
+øãæ’ö}|Ófó~•-'éT`FÀûã~C~ç}{ ©–«Ò© —Q¬/6(8Öž|‘wfa¡g•ÍY±þ£Ïa¡ô5
jÆRÑõˆ^>Er{@uÝÅ\-Ë%ZŠÆr±r/úõæwÅ&ü?#ÅÈQº‹ÔWÊ3ˆ’ÀÏ>P
+C{‰ðûP"‡<*xpnKÐIYîÒ°Ñå]Z‰º p—hçÑ(SÝÖÑÀUûÏâ´ðÎcA/0I[áOY”Ë>í˜[º'CN·*©r$¯_Ðï¤?&í3Íô`‡Ã·¤ý¤¡$9Jí:¿æÔí°4®p
+õœÄ“¯),ÐFÁ[?6‚™^Ê=F9a.d\÷­Â2ѧºÏ¯jùŠ½eÌgiÏÛÏæýÂØÚù4!ùkàîRʸÆÃ2úìÓ§M*W£N‘~×^MÉ®Ž_—Ð"vA¡`‰1|¸EËÆ»£óÈØûb—|Ÿ|0ÝA;»ô…f€»Qeäü˜¤'Ö¡ÏSz‰èi¸ï·N%52J݇x!ì|©§<îþdšël«¯ƒYtÈ!¹w+§Ú˜¯ú*„u¯Š±×bÀ²&c#†<Ì ¬}þešz{F(QÒHœ%樞Նag›ªü˜“Ì÷&+æªÓª¾,ä5“èÆ¿w“úЂÝ(óJ7/v†¤°tg#qüØ2^eôQ;•67P”À
+vïÎÁÞª?q‡ucf1ÆPÁõÁùÚv¥‡æi]‚‡!±CpÌnð+&wãOsÈ}ÞMþVE—ÿªÃIu G-þïbHxÍ0Çmoë}.¶R\ðuÍÍ1"þ˜rëÌÉsë(¾åq’Ÿ7‹ïtTˆfH?cY0 n¥A£?|£ä[Ãòrì?-¦iÊÿÄ^'þ¼Zæ!¦vÔyâÿ¬+†ÿÁÆ ½N¶X3Ûr§»wa?4ˆUlf…\À4䙸mXûŽ/Èc¦Òt†>µÃΉ¹K¿Ó/GOÃÐ@„ñ§NŸUÚ?+ÈÏ—kh¦)¨At¶%~å{e)g걪²d¥QÉUíчpV(™Ø׫¾»a²pmpø%ɦß×Þïòq×js}
0þË;{Ux”oÑ"CMV#évÅf"¥Æz‘N-èÀ"=d£µ\š‰T4Ѩ[N²2>"`ü„”%{Ç‹axbh?Òl=ÉäøBKã	µ3™8Ý
K&bÏ]ƒø¶Ä êaöh—ò=ä»$¥}Hñøh”huÈÄlŠ;ÇŽ_Ræ:W< Ea@—¦UÀn@¾÷Ô4µ?UTcóeø	ÕñÉS3m´”u?ÕþÕ¼Ïó¿Á3˜×üŒ3l>YÒwAÌr'Lø](ñxçË]=„ݧ‰i
+¼‡ë\¾Ó³n>'ÔÄš8•¸‰¾Ø¾û9^Q'–xy'·ê4ÇŠ)S†œ‡¡ÈäKVÃÓ‘ÐXú¨V“Àâæ٬ݛsf×ê²=Þ< K܉J[ɬ²*²3ÁÆK¼ŠˆKŒü­:”¯é1s¢#^×gh9=]Ž.¸©œg³ëÁËáÓD{îè ¿Ùp›M_eùÛ÷ïcÙÙt7{"_²½h}_W(ž¤G«‹.aîqÜY lƒ5ÈB&˜´ÿlˆ&ð¨ýÝ¥18LTg9@dyŸoúc³iuÒ€Ýdfd½0L»c QSc'I˯êçz‘T¼ÀP9q£!yj>ø“ZqUùïk™oçªÉéN[1È—w
+ä²2*k@úƪý+w®þ±Šwüø…÷ÕýÁÉÊS?WNzH-[ÿÇ6ØŽ9zÍ<87«‡„hª‚¢wiXæü -Ê]8‚Å‚4‡ýæ§àkæ`¤óéqZxHg¿„®™
+ª£þ©¢JëÎøL£’¾2.ŽõØaæÝ]é€ÙÎ5òEмf½ºŽéãésðalmòžò»pÀw)e\cï}vç
ݨ¥€ß'Æ?å/¨
++[IO¤V£iD¢Tæ6:‚Γ@€YIT‰Tº÷VRÀÎä9œÎË•ÈÁ$0Ûo£ZûDµ5±æ}nÞ_Šµ‰X|
+ÿsI{°>ç3÷?ĘïÚ*0ƒ#`óÿ?¯?ý°³PÚKÛiÚŦV™kO>Ƶ3¾Þ½Äè¢Ößé¾':‰tÚÇÎ\8ÊjkA3*õÏñ¶"}S@ú‚Ú3]35ù8.‡¶,!O˜¶+Ó?«¦èswâÊÅÃku™*$üݤo3®flûƒÞWäX[hœ¢›
Âì(lX{XrÞÏ¢"Ž­m¢ð5T™Ì´s²Wí<„ž•±0æ¿‘¾„<ú(ÇP«¿rÿéík…ëån´œ+žMl'Ë«åå»éñºž0b–ož€fYŠ¼Ø àBí~Á …™¾nyþ߶™¿‰!àBƒ, påò¾ŽL;FŠôíý©ÇaŽ7Žüþ*Š>ÍtšŠ[²jäç„'{p­.ßò’UL†µöÿ«x’}rV0¬áÊa±äl5šý¯n8F]ÑÃ)áýèý6åäÖ	Fd¶£FöJvm‹¿E>Gx²³25ûõɯ–ÅŽsûþ_¾Wö?n…âBÏ–ÀŸzRäw@oîƒW–Ζq7™RjAeR-žEóÓ€aùCU…«]L5BðÅ	†"
ðf”D~ˆ²Ý5?mÛ0+ë/kÍn2çî†Ó`+¤+¸5	4nxõzgn]ÿL;Á
­O¥?ÃqP<Ûí>Ñë¡@žB*µíåçMYš&ŽƒÍÓ¢ã¬e@ÉÌ z‹—*3Ê&@‚@ÿâÓè¤zvZ˜’z†+#Òcþ)jKõ¢ž¯;¬æÕÝÉ4Œ–b7ÖæK£r¬ä:ê[VnôÓL'ìž¾ƒÚ¯I©»LpL7[us\0c½=º/öCÕWXV)h.ô×~ù'øÒ®‚dâ×ÈÐ{‹öµZ5½Ëàƒ†'B9Ó:ª>åIµ'V'pì½”ãRŸî–f鉱®|ñÂSËÀÆ—)ƒÜ•õm¦¢yÜPE`âÀrB¸IŠqoyšc­Íd>ì:tòrš<š¹ëŠªN>@sÕ”>ˆÜF=–_øq¨ê‹ ÁµácÏW¾Â^$ÁÓ6iÅÒÄ~æ–lìám,ñAj	*UJ ”XÄññþlKÞ*NÜ7a*Í\ï¹Q[¨ì{t'mÊ^íAZ›¶âCGÊdh³Ë{Ô-”ÐëpÏCŒ!’çUüª†Ô+8vÐJÿ)ÁwK3úÊÖW>öa§ë`cÅšÏnÄôŒ¸SQ²Înçºìib?sK6vþ¸ö®5Š¤%ŽPJ,bö
ö€6«o'n•¾è.ùHÒ¦£Tv³Œ:¸e/ø®-Ã[q¯­eŽ¡…_¥{‘7Ìq!éKÈ`Á=)rµ ¹wÏ¥KgK¶‡•Â)5‚®¼)˜O¬÷ç@¾ò¯¤ÌÛ &”!xìÈŠCˆxüý¨¢MGÏèçQÿV¼ êÎfP=Ëű—e A ñqçtR=;-LI=C›Ÿi¿š5«ôQOÙ“VsäàêFK1•ksR¹—W36óHÏo¥r
+,£4NQÈav
6,³,9‰oé…QGظQx”*ÂfZ·Y¥ø†BOÄÖsÑÆ_BÑÊžp!€Ï‰8üy_G&
“#EzøðÚí¾€G•G~‰Eè:ME£Y5
+rýB³	8ØáyI¤È&CÔ{ñÛ<II_…G‹ôl¾‚sà ú@âg”y¬h^3Ð]Gúÿú·x¾6¸y
OyÓ8`µš¼.É¿ù‚°;ýˆàT„Ü@ác‘ü™TÊ,Œ>ñ·ª³Xý—õ‘bLÀùmÏŸ0÷ñ‘Ù‘ðŽX×(m«ãºmìS+ƒ
+»©cÔ—_oÐbtQk±áú_×ûîë
þç"³wtPÑâ8衼òãõù¿
ââ:•³¡YÐ4°¡¥OR­Ûˇ¾w¶Hn¢P6Ï”d!LZñ6‹¤òÉù»Â¹ýUêú'„‰£–dŵ‚rY»‰ ‰}cUð›µWÖEµ~À|ÌõäïЃîêe§‘¥'=$˜£ñílG’=1é Ï|†[bPu¾{4Åyr‰ÓÜ°$ö|4J4´dbÎ6‰E“íG‰¡)s¥ƒ„P
‹¬¾ ŒÅS¤`7 Bà‡Ýʺ^„ÍûÉ._ç×7jbMÄ\Ê_l_ó’„/¦K<²ÕuíEš§C‹NÍÞdr«É+ï€çÆh,}T+>ßr£ï‚y9v‘˜S	ºeñb/^-ïSžS;j²qñaV›CñîcƒÐ'[,—ã9ÝÓµ¾‘D¤	
+63Ì.`½uÖU±Y2ܦê¤øæÍ8+ÂlåÛ_Ó¾‡Y8¸8|œêSáåoùy¶å5·°Žˆ듳¤<J¹æ¯¨+Ÿú;ì3%àÍ<‡žv>ÚÝw2…Mû6ÛÙ
Ï¢:ƒdž…Ò…µ›ÝmLÙ}B´ÙEÖå1`Y¿ŸCfV°¼M=³#Œ¦¦“Ä•(J`;ƒùgîoU‘¶Í´¿3–cÎ(îôîòm;ŒÜÍsº AÍžÖ¯8f7x›ƒµÿ©·d°o¨+¬	ż#F{ä¤åÎxìzc–0y\Búîô{cqc<­ü
+\Éãñ \;ÝþéŒçmÎÑ5ŽêìÞÒ4–SÓk°Þ?x*¦TÍØú:ðSö›/´½—HûvkBì^ÍW{[ðšHÇLUHÙïî]æÖ¨Jã=SÚqí›Õ98´ˆŸÛKbÓÕ§í1Ïb
+œFÇéyеÒRc£t-æūѽ
+µ=µ²\Ç#7tÕ (Wt©Ž»â—ÄïÍéjömäÈ,Ò*ÖÃ+EvÈ$ž8èp¼ F™!t÷u…ÞðüÄÎ`”–T1¼ÞÞõª!§`ÛÊ¢`rZˆ|V¨àÙët¹’ãuÃò ð¿ËXÊÚ™Á¾©€z-3Ò‘–ÐœÛ„d«f™ÒéÒ=R©_pñe^SILö÷0€º®Uö-òYsDóë!ò	©:/(ŸaOôZf¹<?1½%«ÈKÌ/¹Ï¹z¤O¾àÿʼ¦’˜"›*8qó`iAªñZù²<æˆûËBù‘<S*èl}x§{ÙZÐÅ
+$ó;»!v/襳£x€M$í&‡¤$âùw skT%ÿ§m¶øÃä’ZDÁã«1çäOt8^P#ž:õ´Ìox~bg0JK*–…^oƒoôUžaÝ0ã‰eQ09-D>+TpâûÀ:Ò‚Iÿ´ïyxÑ
ë‹,„ïдk¤Ö¢nSuR|sè›
+a6üã¡ç_Í¢\>Nu§þü¹ò²[ü”ÕXGD±ûÇ×R%Òs†ÙT›Á}“v—†SÇbƒÄ%0Œ“Ïò½w¹¤Æ[èZÑ—K¿gwzwy¸“Fnè·]P®èOkÙ3•<ÇÏÔñÚÕ2X¹T±›VŠìËRyêòÓaÒð¤u}BÊßK2ìÔŒA9¢‚„ÓÊÊ°¿¤xÃÔ¥±k¬Ô?`>fôrùhÏwu¼ÝÆÜLßöøƒ6­IH!pÍàe]Œ/Bèóê¡ýå•À51¨b.e¡6¡÷IB™SÀ«‰YÀä´
ø¬MݯË'èo29Ûê›ù@ýc4‹°*›æeO8ž@éÊ~²¡­ˆÇŸ¬=|xmø_@­Ä­?±Ê„¬t¨¬ß¢”9ð!À׊l…þβªRd¯j³öãªeFŒöÕU×,ðÅôÆ1&`ò¸„éÁõöÆâÆxG,å¸Ûÿ]¸v§›aÏÓÚ¿jÉÅ¡¹h1:¦»Öþ}¡ýƒ]vº1‘·«;\{WÉ”E„RœG(%1{ˆ{±@Û¹„7Ä_„tò$‰ŽiSß*;×FÀ\¼™|W˜ï£¶Ùؼ~ðTQ¨‡­étý¦ñ+^ug3(ëìքż‡®ö¶ý:)“˜&ª¯ÃÁºÑ±M”Ûz¦©âÇ+·rpu
#«–Ä»·
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/assets/data/rsc7.dat	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+zš¤Duzš¤Duþô)UˆêŽ³ñÌŸáõRª,
ÉžÈ'I¼{ÿ:…#`{á[1ÁVß÷¤IX >íS^ú!N’e^y¸EÖ>öãtFAxlGS3Àö߶bŸ¬¿ŒEiÛÙ£óU’°4܉Ï6»pv]|Ǧ¼é"}æc­øœB8œ9Ê=|œ—}¿¼ò.mŠ± È´ÉõU|ñÛè.Œ~kãjù‚ðØŽþ¦fýŠB*õâñ£qÄ#Eâ‹9ÕÏg0cŠ$Ò«¯€ÙïÚ[ûª9}h$0v,s¥ƒlkàìÚuÈ`¤™ºø“QeÏÅtb7Z!ºDúÑÆGí%;€KbL©P„p%r‰ûv”Ô.6üzø'%3úc‚½8¾eù\Ú	@ƒÆ~;5›
u÷ªäwï+³ßøÿ«Í\‡reÆpüÖþÛÔïy†LZКý­áQÌf‡7¥ê¹ç	„T÷Ù&˜sðüS'ÿ[â•FŠX…ÁFžÿÙr·ƒÎ`¦q舊Æ
+	H¹KC¹p“ì²68þ ¯Ã©G„º¹¤‡Ü¶ëIrúÐÉ‘ÓÖñ”yH`'ìXæ7eúƒç“WØÖÝÅ(d|Ý™°©ê2ÀU/Ö¨)ËZií;¢ÊƒfwŸ©Žö—èÄn´Biè’^Ê¿ˆé¿‘ŽÇJ÷“%5…ƒ?v–ĘO 	g`“ÕàJäjb†DA zëì5µ\lå”–¯W(ôíNJféÆ‹—Ôîm­³
+gpa,ucý»{%YÊ︩þ€µ•"
ºõ4‘üvjKaX2+ê>óIT`p§5·<ÕîÃV({£ª”Yò#?ÖíãK‡¸
+’jyïŒüäÊ‘0àlžPºšt•å±á«µÃsŸ+E ñ¶ò˜´½=)k¶y\2çGߢ…MݦÔæðÌnWÉ*o³iôóÂnÓ¨ó¯L¬høë9-æ<ýå'¦Rœ¦YîcÓNã¶Ù7Œ	1™,}<È|°ŸŒ!ãÏm(*@–¯äsÀÐl~×ŵQâÍ&
	*.˜W‚M_‘o–†înˆ4dÒóoà;Åylš¡arZpá@:C›O›ÚžHß:ŽioU¥ñoóË^WÐqË’äé½±@âùm?»±ÿ5òðE!ôq‡>ÀNÅ°ÑïDZêÎô¤nÊéÓ8;°s¿Ø|N®<6­±§—ÑF¬	ºãâPÈø§/}/²…\¬kOÉdª^0³þ£–î+±=MR‹"´ÎG×ö€fÁÒ8ÇvY‰­B]ÒRÍn,Ìî#OñS¶t‡DE„3Í•Üu„ÒL·x~À§Í9¼‰c8²C&-hHM
Ïc?“”rµù›
+×áó;Jj~ŒAÐÎ_ì:1•-ž]“@«1&Ú(ÎÀ;·m´‚d0RÂ*08Ý”ÕUJ¢yŸ‘kÔĈ‚]ô«¾‹,‰ËÅjw¸Ø×´¿ðÓ³œ¢51C"®P=JKÙ†¥HõÇœ”ÌÏ‘Š½0Ç‹ä3µÁÚG{tI/eÑ2Î>àÂXkHTšë†-êÆçköJ²•¼}ÏýljÃmO$áö¹÷ë/¥hw7D2i÷MÞ¾9-‚h6?åìÔL¥A¨¡–°d>鸌 KV4É|û’)NS¢w¿ç¨ÀàSjsx׺z÷a7
·Á›¬Pö[È»[².I5²ùF~±6O(]M:ÄÇ Û–m¸ZA2)a9ÔòÃåþF®hg¡‹&Õ‰<?`ÝY¯˜4$¨Ø! i)è7§[:Í"¬B×ßKw›g­å{@3îæ#VŠ]ÿq™YÌ.V»ù"-ugzR†X·Ñl>'Ö qò¸x¬ž„z¶ÍdÓŽ£Y© ¨bš'§QµÑýå]=õ¾•ˆ…&Ü®TÞú\F
+„«{Òõû™Ü4¨o_’˜A»$*MûC˜Ä^°éðíEÐíËr:ª™¼æZÑxç×NQ%«âCÜ
+$¤%Q²ÁÆ»Û_ËÊ‚ÎœÛq¯nã¡ëeAgb/XúxøUÂ^sÉ}.#BÛT¹¡IL®ƒÚ
+PT€1ü ô_ÄDC,Õæ6<VOB=[è½Øü³ —w¢f+Ó¢Ù‡LTÝ£èV!\-®š¾#W4½ÞË?($=Þ1@R¾™ÕudÁÜ
hȹû¾¦—ÌÃýŽÞÝv—ò<Ø¡§ì3ùx­ )_Âä´2_SÅfïðGà߀t†+žŸ¥Ðoë+©!£taQ3…›ç*ÒÞª&W~PHz¡b"ÿÞû‹¼®½€¤a/·êÈ
\ No newline at end of file
Binary file vendor/endroid/qrcode/assets/font/opensans.ttf has changed
Binary file vendor/endroid/qrcode/assets/image/b.png has changed
Binary file vendor/endroid/qrcode/assets/image/d.png has changed
Binary file vendor/endroid/qrcode/assets/image/logo.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv1.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv10.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv11.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv12.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv13.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv14.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv15.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv16.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv17.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv18.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv19.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv2.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv20.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv21.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv22.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv23.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv24.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv25.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv26.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv27.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv28.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv29.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv3.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv30.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv31.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv32.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv33.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv34.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv35.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv36.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv37.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv38.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv39.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv4.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv40.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv5.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv6.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv7.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv8.png has changed
Binary file vendor/endroid/qrcode/assets/image/qrv9.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+{
+    "name": "endroid/qrcode",
+    "description": "Endroid QR Code",
+    "keywords": ["endroid", "qrcode", "qr", "code"],
+    "homepage": "https://github.com/endroid/QrCode",
+    "type": "library",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Jeroen van den Enden",
+            "email": "info@endroid.nl",
+            "homepage": "http://endroid.nl/"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "ext-gd": "*"
+    },
+    "autoload": {
+        "psr-4": {
+            "Endroid\\QrCode\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Endroid\\QrCode\\": "tests/"
+        }
+    },
+    "config": {
+        "bin-dir": "bin"
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.x-dev"
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/phpunit.xml.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="vendor/autoload.php" colors="true">
+    <testsuites>
+        <testsuite>
+            <directory suffix="Test.php">tests</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/DataDoesntExistsException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class DataDoesntExistsException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/FreeTypeLibraryMissingException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class FreeTypeLibraryMissingException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/ImageFunctionFailedException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class ImageFunctionFailedException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/ImageFunctionUnknownException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class ImageFunctionUnknownException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/ImageSizeTooLargeException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class ImageSizeTooLargeException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/Exceptions/VersionTooLargeException.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode\Exceptions;
+
+class VersionTooLargeException extends \Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/src/QrCode.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1561 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\QrCode;
+
+use Endroid\QrCode\Exceptions\DataDoesntExistsException;
+use Endroid\QrCode\Exceptions\FreeTypeLibraryMissingException;
+use Endroid\QrCode\Exceptions\ImageFunctionFailedException;
+use Endroid\QrCode\Exceptions\VersionTooLargeException;
+use Endroid\QrCode\Exceptions\ImageSizeTooLargeException;
+use Endroid\QrCode\Exceptions\ImageFunctionUnknownException;
+use ReflectionFunction;
+
+/**
+ * Generate QR Code.
+ */
+class QrCode
+{
+    /** @const int Error Correction Level Low (7%) */
+    const LEVEL_LOW = 1;
+
+    /** @const int Error Correction Level Medium (15%) */
+    const LEVEL_MEDIUM = 0;
+
+    /** @const int Error Correction Level Quartile (25%) */
+    const LEVEL_QUARTILE = 3;
+
+    /** @const int Error Correction Level High (30%) */
+    const LEVEL_HIGH = 2;
+
+    /** @const string Image type png */
+    const IMAGE_TYPE_PNG = 'png';
+
+    /** @const string Image type gif */
+    const IMAGE_TYPE_GIF = 'gif';
+
+    /** @const string Image type jpeg */
+    const IMAGE_TYPE_JPEG = 'jpeg';
+
+    /** @const string Image type wbmp */
+    const IMAGE_TYPE_WBMP = 'wbmp';
+
+    /** @const int Horizontal label alignment to the center of image */
+    const LABEL_HALIGN_CENTER = 0;
+
+    /** @const int Horizontal label alignment to the left side of image */
+    const LABEL_HALIGN_LEFT = 1;
+
+    /** @const int Horizontal label alignment to the left border of QR Code */
+    const LABEL_HALIGN_LEFT_BORDER = 2;
+
+    /** @const int Horizontal label alignment to the left side of QR Code */
+    const LABEL_HALIGN_LEFT_CODE = 3;
+
+    /** @const int Horizontal label alignment to the right side of image */
+    const LABEL_HALIGN_RIGHT = 4;
+
+    /** @const int Horizontal label alignment to the right border of QR Code */
+    const LABEL_HALIGN_RIGHT_BORDER = 5;
+
+    /** @const int Horizontal label alignment to the right side of QR Code */
+    const LABEL_HALIGN_RIGHT_CODE = 6;
+
+    /** @const int Vertical label alignment to the top */
+    const LABEL_VALIGN_TOP = 1;
+
+    /** @const int Vertical label alignment to the top and hide border */
+    const LABEL_VALIGN_TOP_NO_BORDER = 2;
+
+    /** @const int Vertical label alignment to the middle*/
+    const LABEL_VALIGN_MIDDLE = 3;
+
+    /** @const int Vertical label alignment to the bottom */
+    const LABEL_VALIGN_BOTTOM = 4;
+
+    /** @var string */
+    protected $logo = null;
+
+    protected $logo_size = 48;
+
+    /** @var string */
+    protected $text = '';
+
+    /** @var int */
+    protected $size = 0;
+
+    /** @var int */
+    protected $padding = 16;
+
+    /** @var bool */
+    protected $draw_quiet_zone = false;
+
+    /** @var bool */
+    protected $draw_border = false;
+
+    /** @var array */
+    protected $color_foreground = array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0);
+
+    /** @var array */
+    protected $color_background = array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0);
+
+    /** @var string */
+    protected $label = '';
+
+    /** @var int */
+    protected $label_font_size = 16;
+
+    /** @var string */
+    protected $label_font_path = '';
+
+    /** @var int */
+    protected $label_halign = self::LABEL_HALIGN_CENTER;
+
+    /** @var int */
+    protected $label_valign = self::LABEL_VALIGN_MIDDLE;
+
+    /** @var resource */
+    protected $image = null;
+
+    /** @var int */
+    protected $version;
+
+    /** @var int */
+    protected $error_correction = self::LEVEL_MEDIUM;
+
+    /** @var array */
+    protected $error_corrections_available = array(
+        self::LEVEL_LOW,
+        self::LEVEL_MEDIUM,
+        self::LEVEL_QUARTILE,
+        self::LEVEL_HIGH,
+    );
+
+    /** @var int */
+    protected $module_size;
+
+    /** @var string */
+    protected $image_type = self::IMAGE_TYPE_PNG;
+
+    /** @var array */
+    protected $image_types_available = array(
+        self::IMAGE_TYPE_GIF,
+        self::IMAGE_TYPE_PNG,
+        self::IMAGE_TYPE_JPEG,
+        self::IMAGE_TYPE_WBMP,
+    );
+
+    /** @var string */
+    protected $image_path;
+
+    /** @var string */
+    protected $path;
+
+    /** @var int */
+    protected $structure_append_n;
+
+    /** @var int */
+    protected $structure_append_m;
+
+    /** @var int */
+    protected $structure_append_parity;
+
+    /** @var string */
+    protected $structure_append_original_data;
+
+    /**
+     * Class constructor.
+     *
+     * @param string $text
+     */
+    public function __construct($text = '')
+    {
+        $this->setPath(__DIR__.'/../assets/data');
+        $this->setImagePath(__DIR__.'/../assets/image');
+        $this->setLabelFontPath(__DIR__.'/../assets/font/opensans.ttf');
+        $this->setText($text);
+    }
+
+    /**
+     * Set structure append.
+     *
+     * @param int    $n
+     * @param int    $m
+     * @param int    $parity        Parity
+     * @param string $original_data Original data
+     *
+     * @return QrCode
+     */
+    public function setStructureAppend($n, $m, $parity, $original_data)
+    {
+        $this->structure_append_n = $n;
+        $this->structure_append_m = $m;
+        $this->structure_append_parity = $parity;
+        $this->structure_append_original_data = $original_data;
+
+        return $this;
+    }
+
+    /**
+     * Set QR Code version.
+     *
+     * @param int $version QR Code version
+     *
+     * @return QrCode
+     */
+    public function setVersion($version)
+    {
+        if ($version <= 40 && $version >= 0) {
+            $this->version = $version;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code version.
+     *
+     * @return int
+     */
+    public function getVersion()
+    {
+        return $this->version;
+    }
+
+    /**
+     * Set QR Code error correction level.
+     *
+     * @param mixed $error_correction Error Correction Level
+     *
+     * @return QrCode
+     */
+    public function setErrorCorrection($error_correction)
+    {
+        if (!is_numeric($error_correction)) {
+            $level_constant = 'Endroid\QrCode\QrCode::LEVEL_'.strtoupper($error_correction);
+            $error_correction = constant($level_constant);
+        }
+
+        if (in_array($error_correction, $this->error_corrections_available)) {
+            $this->error_correction = $error_correction;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code error correction level.
+     *
+     * @return int
+     */
+    public function getErrorCorrection()
+    {
+        return $this->error_correction;
+    }
+
+    /**
+     * Set QR Code module size.
+     *
+     * @param int $module_size Module size
+     *
+     * @return QrCode
+     */
+    public function setModuleSize($module_size)
+    {
+        $this->module_size = $module_size;
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code module size.
+     *
+     * @return int
+     */
+    public function getModuleSize()
+    {
+        return $this->module_size;
+    }
+
+    /**
+     * Set image type for rendering.
+     *
+     * @param string $image_type Image type
+     *
+     * @return QrCode
+     */
+    public function setImageType($image_type)
+    {
+        if (in_array($image_type, $this->image_types_available)) {
+            $this->image_type = $image_type;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Return image type for rendering.
+     *
+     * @return string
+     */
+    public function getImageType()
+    {
+        return $this->image_type;
+    }
+
+    /**
+     * Set image type for rendering via extension.
+     *
+     * @param string $extension Image extension
+     *
+     * @return QrCode
+     */
+    public function setExtension($extension)
+    {
+        if ($extension == 'jpg') {
+            $this->setImageType('jpeg');
+        } else {
+            $this->setImageType($extension);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set path to the images directory.
+     *
+     * @param string $image_path Image directory
+     *
+     * @return QrCode
+     */
+    public function setImagePath($image_path)
+    {
+        $this->image_path = $image_path;
+
+        return $this;
+    }
+
+    /**
+     * Return path to the images directory.
+     *
+     * @return string
+     */
+    public function getImagePath()
+    {
+        return $this->image_path;
+    }
+
+    /**
+     * Set path to the data directory.
+     *
+     * @param string $path Data directory
+     *
+     * @return QrCode
+     */
+    public function setPath($path)
+    {
+        $this->path = $path;
+
+        return $this;
+    }
+
+    /**
+     * Return path to the data directory.
+     *
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * Set logo in QR Code.
+     *
+     * @param string $logo Logo Path
+     *
+     * @throws Exceptions\DataDoesntExistsException
+     *
+     * @return QrCode
+     */
+    public function setLogo($logo)
+    {
+        if (!file_exists($logo)) {
+            throw new DataDoesntExistsException("$logo file does not exist");
+        }
+
+        $this->logo = $logo;
+
+        return $this;
+    }
+
+    /**
+     * Set logo size in QR Code(default 48).
+     *
+     * @param int $logo_size Logo Size
+     *
+     * @return QrCode
+     */
+    public function setLogoSize($logo_size)
+    {
+        $this->logo_size = $logo_size;
+
+        return $this;
+    }
+
+    /**
+     * Set text to hide in QR Code.
+     *
+     * @param string $text Text to hide
+     *
+     * @return QrCode
+     */
+    public function setText($text)
+    {
+        $this->text = $text;
+
+        return $this;
+    }
+
+    /**
+     * Return text that will be hid in QR Code.
+     *
+     * @return string
+     */
+    public function getText()
+    {
+        return $this->text;
+    }
+
+    /**
+     * Set QR Code size (width).
+     *
+     * @param int $size Width of the QR Code
+     *
+     * @return QrCode
+     */
+    public function setSize($size)
+    {
+        $this->size = $size;
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code size (width).
+     *
+     * @return int
+     */
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    /**
+     * Set padding around the QR Code.
+     *
+     * @param int $padding Padding around QR Code
+     *
+     * @return QrCode
+     */
+    public function setPadding($padding)
+    {
+        $this->padding = $padding;
+
+        return $this;
+    }
+
+    /**
+     * Return padding around the QR Code.
+     *
+     * @return int
+     */
+    public function getPadding()
+    {
+        return $this->padding;
+    }
+
+    /**
+     * Set draw required four-module wide margin.
+     *
+     * @param bool $draw_quiet_zone State of required four-module wide margin drawing
+     *
+     * @return QrCode
+     */
+    public function setDrawQuietZone($draw_quiet_zone)
+    {
+        $this->draw_quiet_zone = $draw_quiet_zone;
+
+        return $this;
+    }
+
+    /**
+     * Return draw required four-module wide margin.
+     *
+     * @return bool
+     */
+    public function getDrawQuietZone()
+    {
+        return $this->draw_quiet_zone;
+    }
+
+    /**
+     * Set draw border around QR Code.
+     *
+     * @param bool $draw_border State of border drawing
+     *
+     * @return QrCode
+     */
+    public function setDrawBorder($draw_border)
+    {
+        $this->draw_border = $draw_border;
+
+        return $this;
+    }
+
+    /**
+     * Return draw border around QR Code.
+     *
+     * @return bool
+     */
+    public function getDrawBorder()
+    {
+        return $this->draw_border;
+    }
+
+    /**
+     * Set QR Code label (text).
+     *
+     * @param int|string $label Label to print under QR code
+     *
+     * @return QrCode
+     */
+    public function setLabel($label)
+    {
+        $this->label = $label;
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code label (text).
+     *
+     * @return string
+     */
+    public function getLabel()
+    {
+        return $this->label;
+    }
+
+    /**
+     * Set QR Code label font size.
+     *
+     * @param int $label_font_size Font size of the QR code label
+     *
+     * @return QrCode
+     */
+    public function setLabelFontSize($label_font_size)
+    {
+        $this->label_font_size = $label_font_size;
+
+        return $this;
+    }
+
+    /**
+     * Return QR Code label font size.
+     *
+     * @return int
+     */
+    public function getLabelFontSize()
+    {
+        return $this->label_font_size;
+    }
+
+    /**
+     * Set QR Code label font path.
+     *
+     * @param int $label_font_path Path to the QR Code label's TTF font file
+     *
+     * @return QrCode
+     */
+    public function setLabelFontPath($label_font_path)
+    {
+        $this->label_font_path = $label_font_path;
+
+        return $this;
+    }
+
+    /**
+     * Return path to the QR Code label's TTF font file.
+     *
+     * @return string
+     */
+    public function getLabelFontPath()
+    {
+        return $this->label_font_path;
+    }
+
+    /**
+     * Set label horizontal alignment.
+     *
+     * @param int $label_halign Label horizontal alignment
+     *
+     * @return QrCode
+     */
+    public function setLabelHalign($label_halign)
+    {
+        $this->label_halign = $label_halign;
+
+        return $this;
+    }
+
+    /**
+     * Return label horizontal alignment.
+     *
+     * @return int
+     */
+    public function getLabelHalign()
+    {
+        return $this->label_halign;
+    }
+
+    /**
+     * Set label vertical alignment.
+     *
+     * @param int $label_valign Label vertical alignment
+     *
+     * @return QrCode
+     */
+    public function setLabelValign($label_valign)
+    {
+        $this->label_valign = $label_valign;
+
+        return $this;
+    }
+
+    /**
+     * Return label vertical alignment.
+     *
+     * @return int
+     */
+    public function getLabelValign()
+    {
+        return $this->label_valign;
+    }
+
+    /**
+     * Set foreground color of the QR Code.
+     *
+     * @param array $color_foreground RGB color
+     *
+     * @return QrCode
+     */
+    public function setForegroundColor($color_foreground)
+    {
+        if (!isset($color_foreground['a'])) {
+            $color_foreground['a'] = 0;
+        }
+
+        $this->color_foreground = $color_foreground;
+
+        return $this;
+    }
+
+    /**
+     * Return foreground color of the QR Code.
+     *
+     * @return array
+     */
+    public function getForegroundColor()
+    {
+        return $this->color_foreground;
+    }
+
+    /**
+     * Set background color of the QR Code.
+     *
+     * @param array $color_background RGB color
+     *
+     * @return QrCode
+     */
+    public function setBackgroundColor($color_background)
+    {
+        if (!isset($color_background['a'])) {
+            $color_background['a'] = 0;
+        }
+
+        $this->color_background = $color_background;
+
+        return $this;
+    }
+
+    /**
+     * Return background color of the QR Code.
+     *
+     * @return array
+     */
+    public function getBackgroundColor()
+    {
+        return $this->color_background;
+    }
+
+    /**
+     * Return the image resource.
+     *
+     * @return resource
+     */
+    public function getImage()
+    {
+        if (empty($this->image)) {
+            $this->create();
+        }
+
+        return $this->image;
+    }
+
+    /**
+     * Return the data URI.
+     *
+     * @return string
+     */
+    public function getDataUri()
+    {
+        if (empty($this->image)) {
+            $this->create();
+        }
+
+        ob_start();
+        call_user_func('image'.$this->image_type, $this->image);
+        $contents = ob_get_clean();
+
+        return 'data:image/'.$this->image_type.';base64,'.base64_encode($contents);
+    }
+
+    /**
+     * Render the QR Code then save it to given file name.
+     *
+     * @param string $filename File name of the QR Code
+     *
+     * @return QrCode
+     */
+    public function save($filename)
+    {
+        $this->render($filename);
+
+        return $this;
+    }
+
+    /**
+     * Render the QR Code then save it to given file name or
+     * output it to the browser when file name omitted.
+     *
+     * @param null|string $filename File name of the QR Code
+     * @param null|string $format   Format of the file (png, jpeg, jpg, gif, wbmp)
+     *
+     * @throws ImageFunctionUnknownException
+     * @throws ImageFunctionFailedException
+     *
+     * @return QrCode
+     */
+    public function render($filename = null, $format = 'png')
+    {
+        $this->create();
+
+        if ($format == 'jpg') {
+            $format = 'jpeg';
+        }
+
+        if (!in_array($format, $this->image_types_available)) {
+            $format = $this->image_type;
+        }
+
+        if (!function_exists('image'.$format)) {
+            throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.');
+        }
+
+        if ($filename === null) {
+            $success = call_user_func('image'.$format, $this->image);
+        } else {
+            $success = call_user_func_array('image'.$format, array($this->image, $filename));
+        }
+
+        if ($success === false) {
+            throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.');
+        }
+
+        return $this;
+    }
+
+    /**
+     * Create QR Code and return its content.
+     *
+     * @param string|null $format Image type (gif, png, wbmp, jpeg)
+     *
+     * @throws ImageFunctionUnknownException
+     * @throws ImageFunctionFailedException
+     *
+     * @return string
+     */
+    public function get($format = null)
+    {
+        $this->create();
+
+        if ($format == 'jpg') {
+            $format = 'jpeg';
+        }
+
+        if (!in_array($format, $this->image_types_available)) {
+            $format = $this->image_type;
+        }
+
+        if (!function_exists('image'.$format)) {
+            throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.');
+        }
+
+        ob_start();
+        $success = call_user_func('image'.$format, $this->image);
+
+        if ($success === false) {
+            throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.');
+        }
+
+        $content = ob_get_clean();
+
+        return $content;
+    }
+
+    /**
+     * Create the image.
+     *
+     * @throws Exceptions\DataDoesntExistsException
+     * @throws Exceptions\VersionTooLargeException
+     * @throws Exceptions\ImageSizeTooLargeException
+     * @throws \OverflowException
+     */
+    public function create()
+    {
+        $image_path = $this->image_path;
+        $path = $this->path;
+
+        $version_ul = 40;
+
+        $qrcode_data_string = $this->text;//Previously from $_GET["d"];
+
+        $qrcode_error_correct = $this->error_correction;//Previously from $_GET["e"];
+        $qrcode_module_size = $this->module_size;//Previously from $_GET["s"];
+        $qrcode_version = $this->version;//Previously from $_GET["v"];
+        $qrcode_image_type = $this->image_type;//Previously from $_GET["t"];
+
+        $qrcode_structureappend_n = $this->structure_append_n;//Previously from $_GET["n"];
+        $qrcode_structureappend_m = $this->structure_append_m;//Previously from $_GET["m"];
+        $qrcode_structureappend_parity = $this->structure_append_parity;//Previously from $_GET["p"];
+        $qrcode_structureappend_originaldata = $this->structure_append_original_data;//Previously from $_GET["o"];
+
+        if ($qrcode_module_size > 0) {
+        } else {
+            if ($qrcode_image_type == 'jpeg') {
+                $qrcode_module_size = 8;
+            } else {
+                $qrcode_module_size = 4;
+            }
+        }
+        $data_length = strlen($qrcode_data_string);
+        if ($data_length <= 0) {
+            throw new DataDoesntExistsException('QRCode: data does not exist.');
+        }
+        $data_counter = 0;
+        if ($qrcode_structureappend_n > 1
+         && $qrcode_structureappend_n <= 16
+         && $qrcode_structureappend_m > 0
+         && $qrcode_structureappend_m <= 16) {
+            $data_value[0] = 3;
+            $data_bits[0] = 4;
+
+            $data_value[1] = $qrcode_structureappend_m - 1;
+            $data_bits[1] = 4;
+
+            $data_value[2] = $qrcode_structureappend_n - 1;
+            $data_bits[2] = 4;
+
+            $originaldata_length = strlen($qrcode_structureappend_originaldata);
+            if ($originaldata_length > 1) {
+                $qrcode_structureappend_parity = 0;
+                $i = 0;
+                while ($i < $originaldata_length) {
+                    $qrcode_structureappend_parity = ($qrcode_structureappend_parity ^ ord(substr($qrcode_structureappend_originaldata, $i, 1)));
+                    ++$i;
+                }
+            }
+
+            $data_value[3] = $qrcode_structureappend_parity;
+            $data_bits[3] = 8;
+
+            $data_counter = 4;
+        }
+
+        $data_bits[$data_counter] = 4;
+
+        /*  --- determine encode mode */
+
+        if (preg_match('/[^0-9]/', $qrcode_data_string) != 0) {
+            if (preg_match("/[^0-9A-Z \$\*\%\+\.\/\:\-]/", $qrcode_data_string) != 0) {
+                /*  --- 8bit byte mode */
+
+                $codeword_num_plus = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, );
+
+                $data_value[$data_counter] = 4;
+                ++$data_counter;
+                $data_value[$data_counter] = $data_length;
+                $data_bits[$data_counter] = 8;   /* #version 1-9 */
+                $codeword_num_counter_value = $data_counter;
+
+                ++$data_counter;
+                $i = 0;
+                while ($i < $data_length) {
+                    $data_value[$data_counter] = ord(substr($qrcode_data_string, $i, 1));
+                    $data_bits[$data_counter] = 8;
+                    ++$data_counter;
+                    ++$i;
+                }
+            } else {
+                /* ---- alphanumeric mode */
+
+                $codeword_num_plus = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, );
+
+                $data_value[$data_counter] = 2;
+                ++$data_counter;
+                $data_value[$data_counter] = $data_length;
+                $data_bits[$data_counter] = 9;  /* #version 1-9 */
+                $codeword_num_counter_value = $data_counter;
+
+                $alphanumeric_character_hash = array('0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4,
+        '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14,
+        'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23,
+        'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31,
+        'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39,
+        '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44, );
+
+                $i = 0;
+                ++$data_counter;
+                while ($i < $data_length) {
+                    if (($i % 2) == 0) {
+                        $data_value[$data_counter] = $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)];
+                        $data_bits[$data_counter] = 6;
+                    } else {
+                        $data_value[$data_counter] = $data_value[$data_counter] * 45 + $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)];
+                        $data_bits[$data_counter] = 11;
+                        ++$data_counter;
+                    }
+                    ++$i;
+                }
+            }
+        } else {
+            /* ---- numeric mode */
+
+            $codeword_num_plus = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, );
+
+            $data_value[$data_counter] = 1;
+            ++$data_counter;
+            $data_value[$data_counter] = $data_length;
+            $data_bits[$data_counter] = 10;   /* #version 1-9 */
+            $codeword_num_counter_value = $data_counter;
+
+            $i = 0;
+            ++$data_counter;
+            while ($i < $data_length) {
+                if (($i % 3) == 0) {
+                    $data_value[$data_counter] = substr($qrcode_data_string, $i, 1);
+                    $data_bits[$data_counter] = 4;
+                } else {
+                    $data_value[$data_counter] = $data_value[$data_counter] * 10 + substr($qrcode_data_string, $i, 1);
+                    if (($i % 3) == 1) {
+                        $data_bits[$data_counter] = 7;
+                    } else {
+                        $data_bits[$data_counter] = 10;
+                        ++$data_counter;
+                    }
+                }
+                ++$i;
+            }
+        }
+        if (array_key_exists($data_counter, $data_bits) && $data_bits[$data_counter] > 0) {
+            ++$data_counter;
+        }
+        $i = 0;
+        $total_data_bits = 0;
+        while ($i < $data_counter) {
+            $total_data_bits += $data_bits[$i];
+            ++$i;
+        }
+
+        $ecc_character_hash = array('L' => '1',
+        'l' => '1',
+        'M' => '0',
+        'm' => '0',
+        'Q' => '3',
+        'q' => '3',
+        'H' => '2',
+        'h' => '2', );
+
+        if (!is_numeric($qrcode_error_correct)) {
+            $ec = @$ecc_character_hash[$qrcode_error_correct];
+        } else {
+            $ec = $qrcode_error_correct;
+        }
+
+        if (!$ec) {
+            $ec = 0;
+        }
+
+        $max_data_bits = 0;
+
+        $max_data_bits_array = array(
+        0, 128, 224, 352, 512, 688, 864, 992, 1232, 1456, 1728,
+        2032, 2320, 2672, 2920, 3320, 3624, 4056, 4504, 5016, 5352,
+        5712, 6256, 6880, 7312, 8000, 8496, 9024, 9544, 10136, 10984,
+        11640, 12328, 13048, 13800, 14496, 15312, 15936, 16816, 17728, 18672,
+
+        152, 272, 440, 640, 864, 1088, 1248, 1552, 1856, 2192,
+        2592, 2960, 3424, 3688, 4184, 4712, 5176, 5768, 6360, 6888,
+        7456, 8048, 8752, 9392, 10208, 10960, 11744, 12248, 13048, 13880,
+        14744, 15640, 16568, 17528, 18448, 19472, 20528, 21616, 22496, 23648,
+
+        72, 128, 208, 288, 368, 480, 528, 688, 800, 976,
+        1120, 1264, 1440, 1576, 1784, 2024, 2264, 2504, 2728, 3080,
+        3248, 3536, 3712, 4112, 4304, 4768, 5024, 5288, 5608, 5960,
+        6344, 6760, 7208, 7688, 7888, 8432, 8768, 9136, 9776, 10208,
+
+        104, 176, 272, 384, 496, 608, 704, 880, 1056, 1232,
+        1440, 1648, 1952, 2088, 2360, 2600, 2936, 3176, 3560, 3880,
+        4096, 4544, 4912, 5312, 5744, 6032, 6464, 6968, 7288, 7880,
+        8264, 8920, 9368, 9848, 10288, 10832, 11408, 12016, 12656, 13328,
+        );
+        if (!is_numeric($qrcode_version)) {
+            $qrcode_version = 0;
+        }
+        if (!$qrcode_version) {
+            /* #--- auto version select */
+            $i = 1 + 40 * $ec;
+            $j = $i + 39;
+            $qrcode_version = 1;
+            while ($i <= $j) {
+                if (($max_data_bits_array[$i]) >= $total_data_bits + $codeword_num_plus[$qrcode_version]) {
+                    $max_data_bits = $max_data_bits_array[$i];
+                    break;
+                }
+                ++$i;
+                ++$qrcode_version;
+            }
+        } else {
+            $max_data_bits = $max_data_bits_array[$qrcode_version + 40 * $ec];
+        }
+        if ($qrcode_version > $version_ul) {
+            throw new VersionTooLargeException('QRCode : version too large');
+        }
+
+        $total_data_bits += $codeword_num_plus[$qrcode_version];
+        $data_bits[$codeword_num_counter_value] += $codeword_num_plus[$qrcode_version];
+
+        $max_codewords_array = array(0, 26, 44, 70, 100, 134, 172, 196, 242,
+        292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156,
+        1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465,
+        2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706, );
+
+        $max_codewords = $max_codewords_array[$qrcode_version];
+        $max_modules_1side = 17 + ($qrcode_version << 2);
+
+        $matrix_remain_bit = array(0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+        4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, );
+
+        /* ---- read version ECC data file */
+
+        $byte_num = $matrix_remain_bit[$qrcode_version] + ($max_codewords << 3);
+        $filename = $path.'/qrv'.$qrcode_version.'_'.$ec.'.dat';
+        $fp1 = fopen($filename, 'rb');
+        $matx = fread($fp1, $byte_num);
+        $maty = fread($fp1, $byte_num);
+        $masks = fread($fp1, $byte_num);
+        $fi_x = fread($fp1, 15);
+        $fi_y = fread($fp1, 15);
+        $rs_ecc_codewords = ord(fread($fp1, 1));
+        $rso = fread($fp1, 128);
+        fclose($fp1);
+
+        $matrix_x_array = unpack('C*', $matx);
+        $matrix_y_array = unpack('C*', $maty);
+        $mask_array = unpack('C*', $masks);
+
+        $rs_block_order = unpack('C*', $rso);
+
+        $format_information_x2 = unpack('C*', $fi_x);
+        $format_information_y2 = unpack('C*', $fi_y);
+
+        $format_information_x1 = array(0, 1, 2, 3, 4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8);
+        $format_information_y1 = array(8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 4, 3, 2, 1, 0);
+
+        $max_data_codewords = ($max_data_bits >> 3);
+
+        $filename = $path.'/rsc'.$rs_ecc_codewords.'.dat';
+        $fp0 = fopen($filename, 'rb');
+        $i = 0;
+        $rs_cal_table_array = array();
+        while ($i < 256) {
+            $rs_cal_table_array[$i] = fread($fp0, $rs_ecc_codewords);
+            ++$i;
+        }
+        fclose($fp0);
+
+        /*  --- set terminator */
+
+        if ($total_data_bits <= $max_data_bits - 4) {
+            $data_value[$data_counter] = 0;
+            $data_bits[$data_counter] = 4;
+        } else {
+            if ($total_data_bits < $max_data_bits) {
+                $data_value[$data_counter] = 0;
+                $data_bits[$data_counter] = $max_data_bits - $total_data_bits;
+            } else {
+                if ($total_data_bits > $max_data_bits) {
+                    throw new \OverflowException('QRCode: overflow error');
+                }
+            }
+        }
+
+        /* ----divide data by 8bit */
+
+        $i = 0;
+        $codewords_counter = 0;
+        $codewords[0] = 0;
+        $remaining_bits = 8;
+
+        while ($i <= $data_counter) {
+            $buffer = @$data_value[$i];
+            $buffer_bits = @$data_bits[$i];
+
+            $flag = 1;
+            while ($flag) {
+                if ($remaining_bits > $buffer_bits) {
+                    $codewords[$codewords_counter] = ((@$codewords[$codewords_counter] << $buffer_bits) | $buffer);
+                    $remaining_bits -= $buffer_bits;
+                    $flag = 0;
+                } else {
+                    $buffer_bits -= $remaining_bits;
+                    $codewords[$codewords_counter] = (($codewords[$codewords_counter] << $remaining_bits) | ($buffer >> $buffer_bits));
+
+                    if ($buffer_bits == 0) {
+                        $flag = 0;
+                    } else {
+                        $buffer = ($buffer & ((1 << $buffer_bits) - 1));
+                        $flag = 1;
+                    }
+
+                    ++$codewords_counter;
+                    if ($codewords_counter < $max_data_codewords - 1) {
+                        $codewords[$codewords_counter] = 0;
+                    }
+                    $remaining_bits = 8;
+                }
+            }
+            ++$i;
+        }
+        if ($remaining_bits != 8) {
+            $codewords[$codewords_counter] = $codewords[$codewords_counter] << $remaining_bits;
+        } else {
+            --$codewords_counter;
+        }
+
+        /* ----  set padding character */
+
+        if ($codewords_counter < $max_data_codewords - 1) {
+            $flag = 1;
+            while ($codewords_counter < $max_data_codewords - 1) {
+                ++$codewords_counter;
+                if ($flag == 1) {
+                    $codewords[$codewords_counter] = 236;
+                } else {
+                    $codewords[$codewords_counter] = 17;
+                }
+                $flag = $flag * (-1);
+            }
+        }
+
+        /* ---- RS-ECC prepare */
+
+        $i = 0;
+        $j = 0;
+        $rs_block_number = 0;
+        $rs_temp[0] = '';
+
+        while ($i < $max_data_codewords) {
+            $rs_temp[$rs_block_number] .= chr($codewords[$i]);
+            ++$j;
+
+            if ($j >= $rs_block_order[$rs_block_number + 1] - $rs_ecc_codewords) {
+                $j = 0;
+                ++$rs_block_number;
+                $rs_temp[$rs_block_number] = '';
+            }
+            ++$i;
+        }
+
+        /*
+        #
+        # RS-ECC main
+        #
+        */
+
+        $rs_block_number = 0;
+        $rs_block_order_num = count($rs_block_order);
+
+        while ($rs_block_number < $rs_block_order_num) {
+            $rs_codewords = $rs_block_order[$rs_block_number + 1];
+            $rs_data_codewords = $rs_codewords - $rs_ecc_codewords;
+
+            $rstemp = $rs_temp[$rs_block_number].str_repeat(chr(0), $rs_ecc_codewords);
+            $padding_data = str_repeat(chr(0), $rs_data_codewords);
+
+            $j = $rs_data_codewords;
+            while ($j > 0) {
+                $first = ord(substr($rstemp, 0, 1));
+
+                if ($first) {
+                    $left_chr = substr($rstemp, 1);
+                    $cal = $rs_cal_table_array[$first].$padding_data;
+                    $rstemp = $left_chr ^ $cal;
+                } else {
+                    $rstemp = substr($rstemp, 1);
+                }
+
+                --$j;
+            }
+
+            $codewords = array_merge($codewords, unpack('C*', $rstemp));
+
+            ++$rs_block_number;
+        }
+
+        /* ---- flash matrix */
+        $matrix_content = array();
+        $i = 0;
+        while ($i < $max_modules_1side) {
+            $j = 0;
+            while ($j < $max_modules_1side) {
+                $matrix_content[$j][$i] = 0;
+                ++$j;
+            }
+            ++$i;
+        }
+
+        /* --- attach data */
+
+        $i = 0;
+        while ($i < $max_codewords) {
+            $codeword_i = $codewords[$i];
+            $j = 8;
+            while ($j >= 1) {
+                $codeword_bits_number = ($i << 3) +  $j;
+                $matrix_content[ $matrix_x_array[$codeword_bits_number] ][ $matrix_y_array[$codeword_bits_number] ] = ((255 * ($codeword_i & 1)) ^ $mask_array[$codeword_bits_number]);
+                $codeword_i = $codeword_i >> 1;
+                --$j;
+            }
+            ++$i;
+        }
+
+        $matrix_remain = $matrix_remain_bit[$qrcode_version];
+        while ($matrix_remain) {
+            $remain_bit_temp = $matrix_remain + ($max_codewords << 3);
+            $matrix_content[ $matrix_x_array[$remain_bit_temp] ][ $matrix_y_array[$remain_bit_temp] ] = (255 ^ $mask_array[$remain_bit_temp]);
+            --$matrix_remain;
+        }
+
+        #--- mask select
+
+        $min_demerit_score = 0;
+        $hor_master = '';
+        $ver_master = '';
+        $k = 0;
+        while ($k < $max_modules_1side) {
+            $l = 0;
+            while ($l < $max_modules_1side) {
+                $hor_master = $hor_master.chr($matrix_content[$l][$k]);
+                $ver_master = $ver_master.chr($matrix_content[$k][$l]);
+                ++$l;
+            }
+            ++$k;
+        }
+        $i = 0;
+        $all_matrix = $max_modules_1side * $max_modules_1side;
+        $mask_number = 0;
+        while ($i < 8) {
+            $demerit_n1 = 0;
+            $ptn_temp = array();
+            $bit = 1 << $i;
+            $bit_r = (~$bit) & 255;
+            $bit_mask = str_repeat(chr($bit), $all_matrix);
+            $hor = $hor_master & $bit_mask;
+            $ver = $ver_master & $bit_mask;
+
+            $ver_shift1 = $ver.str_repeat(chr(170), $max_modules_1side);
+            $ver_shift2 = str_repeat(chr(170), $max_modules_1side).$ver;
+            $ver_shift1_0 = $ver.str_repeat(chr(0), $max_modules_1side);
+            $ver_shift2_0 = str_repeat(chr(0), $max_modules_1side).$ver;
+            $ver_or = chunk_split(~($ver_shift1 | $ver_shift2), $max_modules_1side, chr(170));
+            $ver_and = chunk_split(~($ver_shift1_0 & $ver_shift2_0), $max_modules_1side, chr(170));
+
+            $hor = chunk_split(~$hor, $max_modules_1side, chr(170));
+            $ver = chunk_split(~$ver, $max_modules_1side, chr(170));
+            $hor = $hor.chr(170).$ver;
+
+            $n1_search = '/'.str_repeat(chr(255), 5).'+|'.str_repeat(chr($bit_r), 5).'+/';
+            $n3_search = chr($bit_r).chr(255).chr($bit_r).chr($bit_r).chr($bit_r).chr(255).chr($bit_r);
+
+            $demerit_n3 = substr_count($hor, $n3_search) * 40;
+            $demerit_n4 = floor(abs(((100 * (substr_count($ver, chr($bit_r)) / ($byte_num))) - 50) / 5)) * 10;
+
+            $n2_search1 = '/'.chr($bit_r).chr($bit_r).'+/';
+            $n2_search2 = '/'.chr(255).chr(255).'+/';
+            $demerit_n2 = 0;
+            preg_match_all($n2_search1, $ver_and, $ptn_temp);
+            foreach ($ptn_temp[0] as $str_temp) {
+                $demerit_n2 += (strlen($str_temp) - 1);
+            }
+            $ptn_temp = array();
+            preg_match_all($n2_search2, $ver_or, $ptn_temp);
+            foreach ($ptn_temp[0] as $str_temp) {
+                $demerit_n2 += (strlen($str_temp) - 1);
+            }
+            $demerit_n2 *= 3;
+
+            $ptn_temp = array();
+
+            preg_match_all($n1_search, $hor, $ptn_temp);
+            foreach ($ptn_temp[0] as $str_temp) {
+                $demerit_n1 += (strlen($str_temp) - 2);
+            }
+
+            $demerit_score = $demerit_n1 + $demerit_n2 + $demerit_n3 + $demerit_n4;
+
+            if ($demerit_score <= $min_demerit_score || $i == 0) {
+                $mask_number = $i;
+                $min_demerit_score = $demerit_score;
+            }
+
+            ++$i;
+        }
+
+        $mask_content = 1 << $mask_number;
+
+        # --- format information
+
+        $format_information_value = (($ec << 3) | $mask_number);
+        $format_information_array = array('101010000010010', '101000100100101',
+        '101111001111100', '101101101001011', '100010111111001', '100000011001110',
+        '100111110010111', '100101010100000', '111011111000100', '111001011110011',
+        '111110110101010', '111100010011101', '110011000101111', '110001100011000',
+        '110110001000001', '110100101110110', '001011010001001', '001001110111110',
+        '001110011100111', '001100111010000', '000011101100010', '000001001010101',
+        '000110100001100', '000100000111011', '011010101011111', '011000001101000',
+        '011111100110001', '011101000000110', '010010010110100', '010000110000011',
+        '010111011011010', '010101111101101', );
+        $i = 0;
+        while ($i < 15) {
+            $content = substr($format_information_array[$format_information_value], $i, 1);
+
+            $matrix_content[$format_information_x1[$i]][$format_information_y1[$i]] = $content * 255;
+            $matrix_content[$format_information_x2[$i + 1]][$format_information_y2[$i + 1]] = $content * 255;
+            ++$i;
+        }
+
+        $mib = $max_modules_1side + 8;
+
+        if ($this->size == 0) {
+            $this->size = $mib * $qrcode_module_size;
+            if ($this->size > 1480) {
+                throw new ImageSizeTooLargeException('QRCode: image size too large');
+            }
+        }
+
+        $image_width = $this->size + $this->padding * 2;
+        $image_height = $this->size + $this->padding * 2;
+
+        if (!empty($this->label)) {
+            if (!function_exists('imagettfbbox')) {
+                throw new FreeTypeLibraryMissingException('QRCode: missing function "imagettfbbox". Did you install the FreeType library?');
+            }
+            $font_box = imagettfbbox($this->label_font_size, 0, $this->label_font_path, $this->label);
+            $label_width = (int) $font_box[2] - (int) $font_box[0];
+            $label_height = (int) $font_box[0] - (int) $font_box[7];
+
+            if ($this->label_valign == self::LABEL_VALIGN_MIDDLE) {
+                $image_height += $label_height + $this->padding;
+            } else {
+                $image_height += $label_height;
+            }
+        }
+
+        $output_image = imagecreate($image_width, $image_height);
+        imagecolorallocate($output_image, 255, 255, 255);
+
+        $image_path = $image_path.'/qrv'.$qrcode_version.'.png';
+
+        $base_image = imagecreatefrompng($image_path);
+        $code_size = $this->size;
+        $module_size = function ($size = 1) use ($code_size, $base_image) {
+            return round($code_size / imagesx($base_image) * $size);
+        };
+
+        $col[1] = imagecolorallocate($base_image, 0, 0, 0);
+        $col[0] = imagecolorallocate($base_image, 255, 255, 255);
+
+        $i = 4;
+        $mxe = 4 + $max_modules_1side;
+        $ii = 0;
+        while ($i < $mxe) {
+            $j = 4;
+            $jj = 0;
+            while ($j < $mxe) {
+                if ($matrix_content[$ii][$jj] & $mask_content) {
+                    imagesetpixel($base_image, $i, $j, $col[1]);
+                }
+                ++$j;
+                ++$jj;
+            }
+            ++$i;
+            ++$ii;
+        }
+
+        if ($this->draw_quiet_zone == true) {
+            imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 0, 0, $this->size, $this->size, $mib, $mib);
+        } else {
+            imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 4, 4, $this->size, $this->size, $mib - 8, $mib - 8);
+        }
+
+        if ($this->draw_border == true) {
+            $border_width = $this->padding;
+            $border_height = $this->size + $this->padding - 1;
+            $border_color = imagecolorallocate($output_image, 0, 0, 0);
+            imagerectangle($output_image, $border_width, $border_width, $border_height, $border_height, $border_color);
+        }
+
+        if (!empty($this->label)) {
+            // Label horizontal alignment
+            switch ($this->label_halign) {
+                case self::LABEL_HALIGN_LEFT:
+                    $font_x = 0;
+                    break;
+
+                case self::LABEL_HALIGN_LEFT_BORDER:
+                    $font_x = $this->padding;
+                    break;
+
+                case self::LABEL_HALIGN_LEFT_CODE:
+                    if ($this->draw_quiet_zone == true) {
+                        $font_x = $this->padding + $module_size(4);
+                    } else {
+                        $font_x = $this->padding;
+                    }
+                    break;
+
+                case self::LABEL_HALIGN_RIGHT:
+                    $font_x = $this->size + ($this->padding * 2) - $label_width;
+                    break;
+
+                case self::LABEL_HALIGN_RIGHT_BORDER:
+                    $font_x = $this->size + $this->padding - $label_width;
+                    break;
+
+                case self::LABEL_HALIGN_RIGHT_CODE:
+                    if ($this->draw_quiet_zone == true) {
+                        $font_x = $this->size + $this->padding - $label_width - $module_size(4);
+                    } else {
+                        $font_x = $this->size + $this->padding - $label_width;
+                    }
+                    break;
+
+                default:
+                    $font_x = floor($image_width - $label_width) / 2;
+            }
+
+            // Label vertical alignment
+            switch ($this->label_valign) {
+                case self::LABEL_VALIGN_TOP_NO_BORDER:
+                    $font_y = $image_height - $this->padding - 1;
+                    break;
+
+                case self::LABEL_VALIGN_BOTTOM:
+                    $font_y = $image_height;
+                    break;
+
+                default:
+                    $font_y = $image_height - $this->padding;
+            }
+
+            $label_bg_x1 = $font_x - $module_size(2);
+            $label_bg_y1 = $font_y - $label_height;
+            $label_bg_x2 = $font_x + $label_width + $module_size(2);
+            $label_bg_y2 = $font_y;
+
+            $color = imagecolorallocate($output_image, 0, 0, 0);
+            $label_bg_color = imagecolorallocate($output_image, 255, 255, 255);
+
+            imagefilledrectangle($output_image, $label_bg_x1, $label_bg_y1, $label_bg_x2, $label_bg_y2, $label_bg_color);
+            imagettftext($output_image, $this->label_font_size, 0, $font_x, $font_y, $color, $this->label_font_path, $this->label);
+        }
+
+        $imagecolorset_function = new ReflectionFunction('imagecolorset');
+        $allow_alpha = $imagecolorset_function->getNumberOfParameters() == 6;
+
+        if ($this->color_background != null) {
+            $index = imagecolorclosest($output_image, 255, 255, 255);
+            if ($allow_alpha) {
+                imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b'], $this->color_background['a']);
+            } else {
+                imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b']);
+            }
+        }
+
+        if ($this->color_foreground != null) {
+            $index = imagecolorclosest($output_image, 0, 0, 0);
+            if ($allow_alpha) {
+                imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b'], $this->color_foreground['a']);
+            } else {
+                imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b']);
+            }
+        }
+
+        if (!empty($this->logo)) {
+            $output_image_org = $output_image;
+            $output_image = imagecreatetruecolor($image_width, $image_height);
+            imagecopy($output_image, $output_image_org, 0, 0, 0, 0, $image_width, $image_height);
+
+            $logo_image = call_user_func('imagecreatefrom'.$this->image_type, $this->logo);
+            if (!$logo_image) {
+                throw new ImageFunctionFailedException('imagecreatefrom'.$this->image_type.' '.$this->logo.' failed');
+            }
+            $src_w = imagesx($logo_image);
+            $src_h = imagesy($logo_image);
+
+            $dst_x = ($image_width - $this->logo_size) / 2;
+            $dst_y = ($this->size + $this->padding * 2 - $this->logo_size) / 2;
+
+            $successful = imagecopyresampled($output_image, $logo_image, $dst_x, $dst_y, 0, 0, $this->logo_size, $this->logo_size, $src_w, $src_h);
+            if (!$successful) {
+                throw new ImageFunctionFailedException('add logo [image'.$this->format.'] failed.');
+            }
+            imagedestroy($logo_image);
+        }
+        $this->image = $output_image;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/endroid/qrcode/tests/QrCodeTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * (c) Jeroen van den Enden <info@endroid.nl>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Endroid\Tests\QrCode;
+
+use Endroid\QrCode\Exceptions\ImageFunctionFailedException;
+use Endroid\QrCode\Exceptions\ImageFunctionUnknownException;
+use Endroid\QrCode\QrCode;
+use PHPUnit_Framework_TestCase;
+
+class QrCodeTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var QrCode
+     */
+    protected $qrCode;
+
+    /**
+     * Tests if a valid data uri is returned.
+     */
+    public function testGetDataUri()
+    {
+        $qrCode = $this->getQrCode();
+        $dataUri = $qrCode->getDataUri();
+
+        $this->assertTrue(is_string($dataUri));
+    }
+
+    /**
+     * Tests if a valid image string is returned.
+     *
+     * @throws ImageFunctionFailedException
+     * @throws ImageFunctionUnknownException
+     */
+    public function testGetImageString()
+    {
+        $qrCode = $this->getQrCode();
+        $imageString = $qrCode->get('png');
+
+        $this->assertTrue(is_string($imageString));
+    }
+
+    /**
+     * Tests if a valid image string is returned.
+     *
+     * @throws ImageFunctionFailedException
+     * @throws ImageFunctionUnknownException
+     */
+    public function testGetQrCodeWithLogoString()
+    {
+        $qrCode = $this->createQrCodeWithLogo();
+        $imageString = $qrCode->get('png');
+
+        $this->assertTrue(is_string($imageString));
+    }
+
+    /**
+     * Returns a QR code.
+     */
+    protected function getQrCode()
+    {
+        if (!$this->qrCode) {
+            $this->qrCode = $this->createQrCode();
+        }
+
+        return $this->qrCode;
+    }
+
+    /**
+     * Creates a QR code.
+     *
+     * @return QrCode
+     */
+    protected function createQrCode()
+    {
+        $qrCode = new QrCode();
+        $qrCode->setText('Life is too short to be generating QR codes');
+        $qrCode->setSize(300);
+
+        return $qrCode;
+    }
+
+    protected function createQrCodeWithLogo()
+    {
+        $qrCode = new QrCode();
+        $qrCode->setText('Life is too short to be generating QR codes')
+        ->setSize(300)
+        ->setLogo(dirname(__DIR__).'/assets/image/logo.png')
+        ->setLogoSize(60);
+
+        return $qrCode;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+*~
+.*~
+
+# composer related
+composer.lock
+composer.phar
+vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+language: php
+sudo: false
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - 7.1
+script:
+  - pear list
+  - pear channel-update pear.php.net
+  - pear upgrade --force pear/pear-1.10.1
+  - pear list
+  - pear install --force package.xml
+  - pear list
+  - pear package
+  - pear package-validate
+  - pear install --force *.tgz
+  - pear list
+  - composer install
+  - ./vendor/bin/phpunit -c phpunit.xml.dist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,125 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2003 Richard Heyes                                 |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Richard Heyes <richard@php.net>                               |
+// +-----------------------------------------------------------------------+
+//
+// $Id$
+
+/**
+* Client implementation of various SASL mechanisms
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('PEAR.php');
+
+class Auth_SASL
+{
+    /**
+    * Factory class. Returns an object of the request
+    * type.
+    *
+    * @param string $type One of: Anonymous
+    *                             Plain
+    *                             CramMD5
+    *                             DigestMD5
+    *                             SCRAM-* (any mechanism of the SCRAM family)
+    *                     Types are not case sensitive
+    */
+    public static function factory($type)
+    {
+        switch (strtolower($type)) {
+            case 'anonymous':
+                $filename  = 'Auth/SASL/Anonymous.php';
+                $classname = 'Auth_SASL_Anonymous';
+                break;
+
+            case 'login':
+                $filename  = 'Auth/SASL/Login.php';
+                $classname = 'Auth_SASL_Login';
+                break;
+
+            case 'plain':
+                $filename  = 'Auth/SASL/Plain.php';
+                $classname = 'Auth_SASL_Plain';
+                break;
+
+            case 'external':
+                $filename  = 'Auth/SASL/External.php';
+                $classname = 'Auth_SASL_External';
+                break;
+
+            case 'crammd5':
+                // $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.';
+                // trigger_error($msg, E_USER_DEPRECATED);
+            case 'cram-md5':
+                $filename  = 'Auth/SASL/CramMD5.php';
+                $classname = 'Auth_SASL_CramMD5';
+                break;
+
+            case 'digestmd5':
+                // $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.';
+                // trigger_error($msg, E_USER_DEPRECATED);
+            case 'digest-md5':
+                // $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.';
+                // trigger_error($msg, E_USER_NOTICE);
+                $filename  = 'Auth/SASL/DigestMD5.php';
+                $classname = 'Auth_SASL_DigestMD5';
+                break;
+
+            default:
+                $scram = '/^SCRAM-(.{1,9})$/i';
+                if (preg_match($scram, $type, $matches))
+                {
+                    $hash = $matches[1];
+                    $filename = dirname(__FILE__) .'/SASL/SCRAM.php';
+                    $classname = 'Auth_SASL_SCRAM';
+                    $parameter = $hash;
+                    break;
+                }
+                return PEAR::raiseError('Invalid SASL mechanism type');
+                break;
+        }
+
+        require_once($filename);
+        if (isset($parameter))
+            $obj = new $classname($parameter);
+        else
+            $obj = new $classname();
+        return $obj;
+    }
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/Anonymous.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,71 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2002-2003 Richard Heyes                                 | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Richard Heyes <richard@php.net>                               | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* Implmentation of ANONYMOUS SASL mechanism
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_Anonymous extends Auth_SASL_Common
+{
+    /**
+    * Not much to do here except return the token supplied.
+    * No encoding, hashing or encryption takes place for this
+    * mechanism, simply one of:
+    *  o An email address
+    *  o An opaque string not containing "@" that can be interpreted
+    *    by the sysadmin
+    *  o Nothing
+    *
+    * We could have some logic here for the second option, but this
+    * would by no means create something interpretable.
+    *
+    * @param  string $token Optional email address or string to provide
+    *                       as trace information.
+    * @return string        The unaltered input token
+    */
+    function getResponse($token = '')
+    {
+        return $token;
+    }
+}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/Common.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,105 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2003 Richard Heyes                                 |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Richard Heyes <richard@php.net>                               |
+// +-----------------------------------------------------------------------+
+//
+// $Id$
+
+/**
+* Common functionality to SASL mechanisms
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+class Auth_SASL_Common
+{
+    /**
+    * Function which implements HMAC MD5 digest
+    *
+    * @param  string $key  The secret key
+    * @param  string $data The data to hash
+    * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
+    *
+    * @return string       The HMAC-MD5 digest
+    */
+    function _HMAC_MD5($key, $data, $raw_output = FALSE)
+    {
+        if (strlen($key) > 64) {
+            $key = pack('H32', md5($key));
+        }
+
+        if (strlen($key) < 64) {
+            $key = str_pad($key, 64, chr(0));
+        }
+
+        $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
+        $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
+
+        $inner  = pack('H32', md5($k_ipad . $data));
+        $digest = md5($k_opad . $inner, $raw_output);
+
+        return $digest;
+    }
+
+    /**
+    * Function which implements HMAC-SHA-1 digest
+    *
+    * @param  string $key  The secret key
+    * @param  string $data The data to hash
+    * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
+    * @return string       The HMAC-SHA-1 digest
+    * @author Jehan <jehan.marmottard@gmail.com>
+    * @access protected
+    */
+    protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
+    {
+        if (strlen($key) > 64) {
+            $key = sha1($key, TRUE);
+        }
+
+        if (strlen($key) < 64) {
+            $key = str_pad($key, 64, chr(0));
+        }
+
+        $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
+        $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
+
+        $inner  = pack('H40', sha1($k_ipad . $data));
+        $digest = sha1($k_opad . $inner, $raw_output);
+
+         return $digest;
+     }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/CramMD5.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,68 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2002-2003 Richard Heyes                                 | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Richard Heyes <richard@php.net>                               | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* Implmentation of CRAM-MD5 SASL mechanism
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_CramMD5 extends Auth_SASL_Common
+{
+    /**
+    * Implements the CRAM-MD5 SASL mechanism
+    * This DOES NOT base64 encode the return value,
+    * you will need to do that yourself.
+    *
+    * @param string $user      Username
+    * @param string $pass      Password
+    * @param string $challenge The challenge supplied by the server.
+    *                          this should be already base64_decoded.
+    *
+    * @return string The string to pass back to the server, of the form
+    *                "<user> <digest>". This is NOT base64_encoded.
+    */
+    function getResponse($user, $pass, $challenge)
+    {
+        return $user . ' ' . $this->_HMAC_MD5($pass, $challenge);
+    }
+}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/DigestMD5.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,197 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2002-2003 Richard Heyes                                 | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Richard Heyes <richard@php.net>                               | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* Implmentation of DIGEST-MD5 SASL mechanism
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_DigestMD5 extends Auth_SASL_Common
+{
+    /**
+    * Provides the (main) client response for DIGEST-MD5
+    * requires a few extra parameters than the other
+    * mechanisms, which are unavoidable.
+    * 
+    * @param  string $authcid   Authentication id (username)
+    * @param  string $pass      Password
+    * @param  string $challenge The digest challenge sent by the server
+    * @param  string $hostname  The hostname of the machine you're connecting to
+    * @param  string $service   The servicename (eg. imap, pop, acap etc)
+    * @param  string $authzid   Authorization id (username to proxy as)
+    * @return string            The digest response (NOT base64 encoded)
+    * @access public
+    */
+    function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '')
+    {
+        $challenge = $this->_parseChallenge($challenge);
+        $authzid_string = '';
+        if ($authzid != '') {
+            $authzid_string = ',authzid="' . $authzid . '"'; 
+        }
+
+        if (!empty($challenge)) {
+            $cnonce         = $this->_getCnonce();
+            $digest_uri     = sprintf('%s/%s', $service, $hostname);
+            $response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid);
+
+            if ($challenge['realm']) {
+                return sprintf('username="%s",realm="%s"' . $authzid_string  .
+',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
+            } else {
+                return sprintf('username="%s"' . $authzid_string  . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
+            }
+        } else {
+            return PEAR::raiseError('Invalid digest challenge');
+        }
+    }
+    
+    /**
+    * Parses and verifies the digest challenge*
+    *
+    * @param  string $challenge The digest challenge
+    * @return array             The parsed challenge as an assoc
+    *                           array in the form "directive => value".
+    * @access private
+    */
+    function _parseChallenge($challenge)
+    {
+        $tokens = array();
+        while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) {
+
+            // Ignore these as per rfc2831
+            if ($matches[1] == 'opaque' OR $matches[1] == 'domain') {
+                $challenge = substr($challenge, strlen($matches[0]) + 1);
+                continue;
+            }
+
+            // Allowed multiple "realm" and "auth-param"
+            if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) {
+                if (is_array($tokens[$matches[1]])) {
+                    $tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
+                } else {
+                    $tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2]));
+                }
+
+            // Any other multiple instance = failure
+            } elseif (!empty($tokens[$matches[1]])) {
+                $tokens = array();
+                break;
+
+            } else {
+                $tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
+            }
+
+            // Remove the just parsed directive from the challenge
+            $challenge = substr($challenge, strlen($matches[0]) + 1);
+        }
+
+        /**
+        * Defaults and required directives
+        */
+        // Realm
+        if (empty($tokens['realm'])) {
+            $tokens['realm'] = "";
+        }
+
+        // Maxbuf
+        if (empty($tokens['maxbuf'])) {
+            $tokens['maxbuf'] = 65536;
+        }
+
+        // Required: nonce, algorithm
+        if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) {
+            return array();
+        }
+
+        return $tokens;
+    }
+
+    /**
+    * Creates the response= part of the digest response
+    *
+    * @param  string $authcid    Authentication id (username)
+    * @param  string $pass       Password
+    * @param  string $realm      Realm as provided by the server
+    * @param  string $nonce      Nonce as provided by the server
+    * @param  string $cnonce     Client nonce
+    * @param  string $digest_uri The digest-uri= value part of the response
+    * @param  string $authzid    Authorization id
+    * @return string             The response= part of the digest response
+    * @access private
+    */    
+    function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '')
+    {
+        if ($authzid == '') {
+            $A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce);
+        } else {
+            $A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid);
+        }
+        $A2 = 'AUTHENTICATE:' . $digest_uri;
+        return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2)));
+    }
+
+    /**
+    * Creates the client nonce for the response
+    *
+    * @return string  The cnonce value
+    * @access private
+    */
+    function _getCnonce()
+    {
+        if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
+            return base64_encode(fread($fd, 32));
+
+        } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
+            return base64_encode(fread($fd, 32));
+
+        } else {
+            $str = '';
+            for ($i=0; $i<32; $i++) {
+                $str .= chr(mt_rand(0, 255));
+            }
+            
+            return base64_encode($str);
+        }
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/External.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2008 Christoph Schulz                                   | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Christoph Schulz <develop@kristov.de>                         | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* Implmentation of EXTERNAL SASL mechanism
+*
+* @author  Christoph Schulz <develop@kristov.de>
+* @access  public
+* @version 1.0.3
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_External extends Auth_SASL_Common
+{
+    /**
+    * Returns EXTERNAL response
+    *
+    * @param  string $authcid   Authentication id (username)
+    * @param  string $pass      Password
+    * @param  string $authzid   Autorization id
+    * @return string            EXTERNAL Response
+    */
+    function getResponse($authcid, $pass, $authzid = '')
+    {
+        return $authzid;
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/Login.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,65 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2002-2003 Richard Heyes                                 | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Richard Heyes <richard@php.net>                               | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* This is technically not a SASL mechanism, however
+* it's used by Net_Sieve, Net_Cyrus and potentially
+* other protocols , so here is a good place to abstract
+* it.
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_Login extends Auth_SASL_Common
+{
+    /**
+    * Pseudo SASL LOGIN mechanism
+    *
+    * @param  string $user Username
+    * @param  string $pass Password
+    * @return string       LOGIN string
+    */
+    function getResponse($user, $pass)
+    {
+        return sprintf('LOGIN %s %s', $user, $pass);
+    }
+}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/Plain.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+// +-----------------------------------------------------------------------+ 
+// | Copyright (c) 2002-2003 Richard Heyes                                 | 
+// | All rights reserved.                                                  | 
+// |                                                                       | 
+// | Redistribution and use in source and binary forms, with or without    | 
+// | modification, are permitted provided that the following conditions    | 
+// | are met:                                                              | 
+// |                                                                       | 
+// | o Redistributions of source code must retain the above copyright      | 
+// |   notice, this list of conditions and the following disclaimer.       | 
+// | o Redistributions in binary form must reproduce the above copyright   | 
+// |   notice, this list of conditions and the following disclaimer in the | 
+// |   documentation and/or other materials provided with the distribution.| 
+// | o The names of the authors may not be used to endorse or promote      | 
+// |   products derived from this software without specific prior written  | 
+// |   permission.                                                         | 
+// |                                                                       | 
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   | 
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     | 
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  | 
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      | 
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   | 
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
+// |                                                                       | 
+// +-----------------------------------------------------------------------+ 
+// | Author: Richard Heyes <richard@php.net>                               | 
+// +-----------------------------------------------------------------------+ 
+// 
+// $Id$
+
+/**
+* Implmentation of PLAIN SASL mechanism
+*
+* @author  Richard Heyes <richard@php.net>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_Plain extends Auth_SASL_Common
+{
+    /**
+    * Returns PLAIN response
+    *
+    * @param  string $authcid   Authentication id (username)
+    * @param  string $pass      Password
+    * @param  string $authzid   Autorization id
+    * @return string            PLAIN Response
+    */
+    function getResponse($authcid, $pass, $authzid = '')
+    {
+        return $authzid . chr(0) . $authcid . chr(0) . $pass;
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/Auth/SASL/SCRAM.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,306 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2011 Jehan                                              |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Jehan <jehan.marmottard@gmail.com                             |
+// +-----------------------------------------------------------------------+
+//
+// $Id$
+
+/**
+* Implementation of SCRAM-* SASL mechanisms.
+* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature
+* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole
+* authentication process.
+*
+* @author  Jehan <jehan.marmottard@gmail.com>
+* @access  public
+* @version 1.0
+* @package Auth_SASL
+*/
+
+require_once('Auth/SASL/Common.php');
+
+class Auth_SASL_SCRAM extends Auth_SASL_Common
+{
+    /**
+    * Construct a SCRAM-H client where 'H' is a cryptographic hash function.
+    *
+    * @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual
+    * Names" registry.
+    * @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual
+    * Names"
+    * format of core PHP hash function.
+    * @access public
+    */
+    function __construct($hash)
+    {
+        // Though I could be strict, I will actually also accept the naming used in the PHP core hash framework.
+        // For instance "sha1" is accepted, while the registered hash name should be "SHA-1".
+        $hash = strtolower($hash);
+        $hashes = array('md2' => 'md2',
+            'md5' => 'md5',
+            'sha-1' => 'sha1',
+            'sha1' => 'sha1',
+            'sha-224' > 'sha224',
+            'sha224' > 'sha224',
+            'sha-256' => 'sha256',
+            'sha256' => 'sha256',
+            'sha-384' => 'sha384',
+            'sha384' => 'sha384',
+            'sha-512' => 'sha512',
+            'sha512' => 'sha512');
+        if (function_exists('hash_hmac') && isset($hashes[$hash]))
+        {
+            $this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);');
+            $this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);');
+        }
+        elseif ($hash == 'md5')
+        {
+            $this->hash = create_function('$data', 'return md5($data, true);');
+            $this->hmac = array($this, '_HMAC_MD5');
+        }
+        elseif (in_array($hash, array('sha1', 'sha-1')))
+        {
+            $this->hash = create_function('$data', 'return sha1($data, true);');
+            $this->hmac = array($this, '_HMAC_SHA1');
+        }
+        else
+            return PEAR::raiseError('Invalid SASL mechanism type');
+    }
+
+    /**
+    * Provides the (main) client response for SCRAM-H.
+    *
+    * @param  string $authcid   Authentication id (username)
+    * @param  string $pass      Password
+    * @param  string $challenge The challenge sent by the server.
+    * If the challenge is NULL or an empty string, the result will be the "initial response".
+    * @param  string $authzid   Authorization id (username to proxy as)
+    * @return string|false      The response (binary, NOT base64 encoded)
+    * @access public
+    */
+    public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL)
+    {
+        $authcid = $this->_formatName($authcid);
+        if (empty($authcid))
+        {
+            return false;
+        }
+        if (!empty($authzid))
+        {
+            $authzid = $this->_formatName($authzid);
+            if (empty($authzid))
+            {
+                return false;
+            }
+        }
+
+        if (empty($challenge))
+        {
+            return $this->_generateInitialResponse($authcid, $authzid);
+        }
+        else
+        {
+            return $this->_generateResponse($challenge, $pass);
+        }
+
+    }
+
+    /**
+    * Prepare a name for inclusion in a SCRAM response.
+    *
+    * @param string $username a name to be prepared.
+    * @return string the reformated name.
+    * @access private
+    */
+    private function _formatName($username)
+    {
+        // TODO: prepare through the SASLprep profile of the stringprep algorithm.
+        // See RFC-4013.
+
+        $username = str_replace('=', '=3D', $username);
+        $username = str_replace(',', '=2C', $username);
+        return $username;
+    }
+
+    /**
+    * Generate the initial response which can be either sent directly in the first message or as a response to an empty
+    * server challenge.
+    *
+    * @param string $authcid Prepared authentication identity.
+    * @param string $authzid Prepared authorization identity.
+    * @return string The SCRAM response to send.
+    * @access private
+    */
+    private function _generateInitialResponse($authcid, $authzid)
+    {
+        $init_rep = '';
+        $gs2_cbind_flag = 'n,'; // TODO: support channel binding.
+        $this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ',';
+
+        // I must generate a client nonce and "save" it for later comparison on second response.
+        $this->cnonce = $this->_getCnonce();
+        // XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC,
+        // this message can be updated.
+        $this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce;
+        return $this->gs2_header . $this->first_message_bare;
+    }
+
+    /**
+    * Parses and verifies a non-empty SCRAM challenge.
+    *
+    * @param  string $challenge The SCRAM challenge
+    * @return string|false      The response to send; false in case of wrong challenge or if an initial response has not
+    * been generated first.
+    * @access private
+    */
+    private function _generateResponse($challenge, $password)
+    {
+        // XXX: as I don't support mandatory extension, I would fail on them.
+        // And I simply ignore any optional extension.
+        $server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#";
+        if (!isset($this->cnonce, $this->gs2_header)
+            || !preg_match($server_message_regexp, $challenge, $matches))
+        {
+            return false;
+        }
+        $nonce = $matches[1];
+        $salt = base64_decode($matches[2]);
+        if (!$salt)
+        {
+            // Invalid Base64.
+            return false;
+        }
+        $i = intval($matches[3]);
+
+        $cnonce = substr($nonce, 0, strlen($this->cnonce));
+        if ($cnonce <> $this->cnonce)
+        {
+            // Invalid challenge! Are we under attack?
+            return false;
+        }
+
+        $channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding.
+        $final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension.
+
+        // TODO: $password = $this->normalize($password); // SASLprep profile of stringprep.
+        $saltedPassword = $this->hi($password, $salt, $i);
+        $this->saltedPassword = $saltedPassword;
+        $clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE);
+        $storedKey = call_user_func($this->hash, $clientKey, TRUE);
+        $authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message;
+        $this->authMessage = $authMessage;
+        $clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE);
+        $clientProof = $clientKey ^ $clientSignature;
+        $proof = ',p=' . base64_encode($clientProof);
+
+        return $final_message . $proof;
+    }
+
+    /**
+    * SCRAM has also a server verification step. On a successful outcome, it will send additional data which must
+    * absolutely be checked against this function. If this fails, the entity which we are communicating with is probably
+    * not the server as it has not access to your ServerKey.
+    *
+    * @param string $data The additional data sent along a successful outcome.
+    * @return bool Whether the server has been authenticated.
+    * If false, the client must close the connection and consider to be under a MITM attack.
+    * @access public
+    */
+    public function processOutcome($data)
+    {
+        $verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#';
+        if (!isset($this->saltedPassword, $this->authMessage)
+            || !preg_match($verifier_regexp, $data, $matches))
+        {
+            // This cannot be an outcome, you never sent the challenge's response.
+            return false;
+        }
+
+        $verifier = $matches[1];
+        $proposed_serverSignature = base64_decode($verifier);
+        $serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true);
+        $serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE);
+        return ($proposed_serverSignature === $serverSignature);
+    }
+
+    /**
+    * Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function.
+    *
+    * @param string $str The string to hash.
+    * @param string $hash The hash value.
+    * @param int $i The iteration count.
+    * @access private
+    */
+    private function hi($str, $salt, $i)
+    {
+        $int1 = "\0\0\0\1";
+        $ui = call_user_func($this->hmac, $str, $salt . $int1, true);
+        $result = $ui;
+        for ($k = 1; $k < $i; $k++)
+        {
+            $ui = call_user_func($this->hmac, $str, $ui, true);
+            $result = $result ^ $ui;
+        }
+        return $result;
+    }
+
+
+    /**
+    * Creates the client nonce for the response
+    *
+    * @return string  The cnonce value
+    * @access private
+    * @author  Richard Heyes <richard@php.net>
+    */
+    private function _getCnonce()
+    {
+        // TODO: I reused the nonce function from the DigestMD5 class.
+        // I should probably make this a protected function in Common.
+        if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
+            return base64_encode(fread($fd, 32));
+
+        } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
+            return base64_encode(fread($fd, 32));
+
+        } else {
+            $str = '';
+            for ($i=0; $i<32; $i++) {
+                $str .= chr(mt_rand(0, 255));
+            }
+
+            return base64_encode($str);
+        }
+    }
+
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,46 @@
+# Auth_SASL - Abstraction of various SASL mechanism responses
+
+[![Build Status](https://travis-ci.org/pear/Auth_SASL.svg?branch=master)](https://travis-ci.org/pear/Auth_SASL)
+    
+
+Provides code to generate responses to common SASL mechanisms, including:
+- Digest-MD5
+- Cram-MD5
+- Plain
+- Anonymous
+- Login (Pseudo mechanism)
+- SCRAM	
+
+[Homepage](http://pear.php.net/package/Auth_SASL/)
+
+
+## Installation
+For a PEAR installation that downloads from the PEAR channel:
+
+`$ pear install pear/auth_sasl`
+
+For a PEAR installation from a previously downloaded tarball:
+
+`$ pear install Auth_SASL-*.tgz`
+
+For a PEAR installation from a code clone:
+
+`$ pear install package.xml`
+
+For a local composer installation:
+
+`$ composer install`
+
+To add as a dependency to your composer-managed application:
+
+`$composer require pear/auth_sasl`
+
+
+## Tests
+Run  the tests from a local composer installation:
+
+`$ ./vendor/bin/phpunit`
+
+
+## License
+BSD license
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+{
+    "authors": [
+        {
+            "email": "amistry@am-productions.biz",
+            "name": "Anish Mistry",
+            "role": "Lead"
+        },
+        {
+            "email": "richard@php.net",
+            "name": "Richard Heyes",
+            "role": "Lead"
+        },
+        {
+            "email": "michael@bretterklieber.com",
+            "name": "Michael Bretterklieber",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Auth": "./"
+        }
+    },
+    "description": "Abstraction of various SASL mechanism responses",
+    "include-path": [
+        "./"
+    ],
+    "license": "BSD",
+    "name": "pear/auth_sasl",
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Auth_SASL",
+        "source": "https://github.com/pear/Auth_SASL"
+    },
+    "type": "library",
+    "require": {
+        "pear/pear_exception": "@stable"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "@stable"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package version="2.0"
+ xmlns="http://pear.php.net/dtd/package-2.0"
+ xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+  http://pear.php.net/dtd/tasks-1.0.xsd
+  http://pear.php.net/dtd/package-2.0
+  http://pear.php.net/dtd/package-2.0.xsd"
+>
+ <name>Auth_SASL</name>
+ <channel>pear.php.net</channel>
+ <summary>Abstraction of various SASL mechanism responses</summary>
+ <description>
+Provides code to generate responses to common SASL mechanisms, including:
+- Digest-MD5
+- Cram-MD5
+- Plain
+- Anonymous
+- Login (Pseudo mechanism)
+- SCRAM
+ </description>
+
+ <lead>
+  <name>Anish Mistry</name>
+  <user>amistry</user>
+  <email>amistry@am-productions.biz</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Richard Heyes</name>
+  <user>richard</user>
+  <email>richard@php.net</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Michael Bretterklieber</name>
+  <user>mbretter</user>
+  <email>michael@bretterklieber.com</email>
+  <active>no</active>
+ </lead>
+
+ <date>2017-03-07</date>
+ <version>
+  <release>1.1.0</release>
+  <api>1.1.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+ <notes>
+* Set minimum PHP version to 5.4.0
+* Set minimum PEAR version to 1.10.1
+
+* Request #21033: PHP warning depreciated
+ </notes>
+
+ <contents>
+  <dir name="/">
+   <dir name="Auth">
+    <dir name="SASL">
+     <file name="Anonymous.php" role="php" />
+     <file name="Common.php" role="php" />
+     <file name="CramMD5.php" role="php" />
+     <file name="DigestMD5.php" role="php" />
+     <file name="External.php" role="php" />
+     <file name="Login.php" role="php" />
+     <file name="Plain.php" role="php" />
+     <file name="SCRAM.php" role="php" />
+    </dir> <!-- //SASL -->
+    <file name="SASL.php" role="php" />
+   </dir><!-- /Auth -->
+  </dir> <!-- / -->
+ </contents>
+
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.10.1</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+
+ <phprelease />
+
+ <changelog>
+
+  <release>
+   <version>
+    <release>1.1.0</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2017-03-07</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+* Set minimum PHP version to 5.4.0
+* Set minimum PEAR version to 1.10.1
+
+* Request #21033: PHP warning depreciated
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.6</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2011-09-27</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+QA release
+* Bug #18856: Authentication warnings because of wrong Auth_SASL::factory argument [kguest]
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.5</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2011-09-04</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+QA release
+* Added support for any mechanism of the SCRAM family; with thanks to Jehan Pagès. [kguest]
+* crammd5 and digestmd5 mechanisms name deprecated in favour of IANA registered names 'cram-md5' and 'digest-md5'; with thanks to Jehan Pagès. [kguest]
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.4</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-02-07</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+QA release
+* Fix bug #16624: open_basedir restriction warning in DigestMD5.php [till]
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.3</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2009-08-05</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+QA release
+* Move SVN to proper directory structure [cweiske]
+* Fix Bug #8775: Error in package.xml
+* Fix Bug #14671: Security issue due to seeding random number generator [cweiske]
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.2</release>
+    <api>1.0.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2006-05-21</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+* Fixed Bug #2143 Auth_SASL_DigestMD5::getResponse() generates invalid response
+* Fixed Bug #6611 Suppress PHP 5 Notice Errors
+* Fixed Bug #2154 realm isn't contained in challange
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.1</release>
+    <api>1.0.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-11</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Added authcid/authzid separation in PLAIN and DIGEST-MD5.
+   </notes>
+  </release>
+
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/auth_sasl/phpunit.xml.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+<phpunit bootstrap="vendor/autoload.php"
+         cacheTokens="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         stopOnError="false"
+         stopOnFailure="false"
+         stopOnIncomplete="false"
+         stopOnSkipped="false">
+
+    <testsuites>
+        <testsuite name="Test Suite">
+            <directory suffix=".php">tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory suffix=".php">Net/</directory>
+        </whitelist>
+    </filter>
+
+    <logging>
+        <log type="coverage-clover" target="build/logs/clover.xml"/>
+        <log type="coverage-html" target="build/coverage/"/>
+    </logging>
+
+</phpunit>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+vendor
+composer.lock
+/README.html
+/dist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+language: php
+sudo: false
+install:
+  - pear upgrade pear-1.10.1
+  - pear install package.xml
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7
+script:
+  - pear run-tests -qd tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1305 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * A full featured package for managing command-line options and arguments 
+ * hightly inspired from python optparse module, it allows the developper to 
+ * easily build complex command line interfaces.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required unconditionally
+ */
+require_once 'Console/CommandLine/Exception.php';
+require_once 'Console/CommandLine/Outputter/Default.php';
+require_once 'Console/CommandLine/Renderer/Default.php';
+require_once 'Console/CommandLine/MessageProvider/Default.php';
+
+/**
+ * Main class for parsing command line options and arguments.
+ * 
+ * There are three ways to create parsers with this class:
+ * <code>
+ * // direct usage
+ * $parser = new Console_CommandLine();
+ *
+ * // with an xml definition file
+ * $parser = Console_CommandLine::fromXmlFile('path/to/file.xml');
+ *
+ * // with an xml definition string
+ * $validXmlString = '..your xml string...';
+ * $parser = Console_CommandLine::fromXmlString($validXmlString);
+ * </code>
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @example   docs/examples/ex1.php
+ * @example   docs/examples/ex2.php
+ */
+class Console_CommandLine
+{
+    // Public properties {{{
+
+    /**
+     * Error messages.
+     *
+     * @var array $errors Error messages
+     * @todo move this to Console_CommandLine_MessageProvider
+     */
+    public static $errors = array(
+        'option_bad_name'                    => 'option name must be a valid php variable name (got: {$name})',
+        'argument_bad_name'                  => 'argument name must be a valid php variable name (got: {$name})',
+        'argument_no_default'                => 'only optional arguments can have a default value',
+        'option_long_and_short_name_missing' => 'you must provide at least an option short name or long name for option "{$name}"',
+        'option_bad_short_name'              => 'option "{$name}" short name must be a dash followed by a letter (got: "{$short_name}")',
+        'option_bad_long_name'               => 'option "{$name}" long name must be 2 dashes followed by a word (got: "{$long_name}")',
+        'option_unregistered_action'         => 'unregistered action "{$action}" for option "{$name}".',
+        'option_bad_action'                  => 'invalid action for option "{$name}".',
+        'option_invalid_callback'            => 'you must provide a valid callback for option "{$name}"',
+        'action_class_does_not_exists'       => 'action "{$name}" class "{$class}" not found, make sure that your class is available before calling Console_CommandLine::registerAction()',
+        'invalid_xml_file'                   => 'XML definition file "{$file}" does not exists or is not readable',
+        'invalid_rng_file'                   => 'RNG file "{$file}" does not exists or is not readable'
+    );
+
+    /**
+     * The name of the program, if not given it defaults to argv[0].
+     *
+     * @var string $name Name of your program
+     */
+    public $name;
+
+    /**
+     * A description text that will be displayed in the help message.
+     *
+     * @var string $description Description of your program
+     */
+    public $description = '';
+
+    /**
+     * A string that represents the version of the program, if this property is 
+     * not empty and property add_version_option is not set to false, the
+     * command line parser will add a --version option, that will display the
+     * property content.
+     *
+     * @var    string $version
+     * @access public
+     */
+    public $version = '';
+
+    /**
+     * Boolean that determine if the command line parser should add the help
+     * (-h, --help) option automatically.
+     *
+     * @var bool $add_help_option Whether to add a help option or not
+     */
+    public $add_help_option = true;
+
+    /**
+     * Boolean that determine if the command line parser should add the version
+     * (-v, --version) option automatically.
+     * Note that the version option is also generated only if the version 
+     * property is not empty, it's up to you to provide a version string of 
+     * course.
+     *
+     * @var bool $add_version_option Whether to add a version option or not
+     */
+    public $add_version_option = true;
+
+    /**
+     * Boolean that determine if providing a subcommand is mandatory.
+     *
+     * @var bool $subcommand_required Whether a subcommand is required or not
+     */
+    public $subcommand_required = false;
+
+    /**
+     * The command line parser renderer instance.
+     *
+     * @var    object that implements Console_CommandLine_Renderer interface
+     * @access protected
+     */
+    public $renderer = false;
+
+    /**
+     * The command line parser outputter instance.
+     *
+     * @var Console_CommandLine_Outputter An outputter
+     */
+    public $outputter = false;
+
+    /**
+     * The command line message provider instance.
+     *
+     * @var Console_CommandLine_MessageProvider A message provider instance
+     */
+    public $message_provider = false;
+
+    /**
+     * Boolean that tells the parser to be POSIX compliant, POSIX demands the 
+     * following behavior: the first non-option stops option processing.
+     *
+     * @var bool $force_posix Whether to force posix compliance or not
+     */
+    public $force_posix = false;
+
+    /**
+     * Boolean that tells the parser to set relevant options default values, 
+     * according to the option action.
+     *
+     * @see Console_CommandLine_Option::setDefaults()
+     * @var bool $force_options_defaults Whether to force option default values
+     */
+    public $force_options_defaults = false;
+
+ 
+   /**
+    * Boolean that tells the parser to treat a single - option as an argument
+    * instead of trying to read STDIN.
+    *
+    * @var bool $avoid_reading_stdin Whether to treat - as an argument
+    */
+    public $avoid_reading_stdin = false;
+
+    /**
+     * An array of Console_CommandLine_Option objects.
+     *
+     * @var array $options The options array
+     */
+    public $options = array();
+
+    /**
+     * An array of Console_CommandLine_Argument objects.
+     *
+     * @var array $args The arguments array
+     */
+    public $args = array();
+
+    /**
+     * An array of Console_CommandLine_Command objects (sub commands).
+     *
+     * @var array $commands The commands array
+     */
+    public $commands = array();
+
+    /**
+     * Parent, only relevant in Command objects but left here for interface 
+     * convenience.
+     *
+     * @var Console_CommandLine The parent instance
+     * @todo move Console_CommandLine::parent to Console_CommandLine_Command
+     */
+    public $parent = false;
+
+    /**
+     * Array of valid actions for an option, this array will also store user 
+     * registered actions.
+     *
+     * The array format is:
+     * <pre>
+     * array(
+     *     <ActionName:string> => array(<ActionClass:string>, <builtin:bool>)
+     * )
+     * </pre>
+     *
+     * @var array $actions List of valid actions
+     */
+    public static $actions = array(
+        'StoreTrue'   => array('Console_CommandLine_Action_StoreTrue', true),
+        'StoreFalse'  => array('Console_CommandLine_Action_StoreFalse', true),
+        'StoreString' => array('Console_CommandLine_Action_StoreString', true),
+        'StoreInt'    => array('Console_CommandLine_Action_StoreInt', true),
+        'StoreFloat'  => array('Console_CommandLine_Action_StoreFloat', true),
+        'StoreArray'  => array('Console_CommandLine_Action_StoreArray', true),
+        'Callback'    => array('Console_CommandLine_Action_Callback', true),
+        'Counter'     => array('Console_CommandLine_Action_Counter', true),
+        'Help'        => array('Console_CommandLine_Action_Help', true),
+        'Version'     => array('Console_CommandLine_Action_Version', true),
+        'Password'    => array('Console_CommandLine_Action_Password', true),
+        'List'        => array('Console_CommandLine_Action_List', true),
+    );
+
+    /**
+     * Custom errors messages for this command
+     *
+     * This array is of the form:
+     * <code>
+     * <?php
+     * array(
+     *     $messageName => $messageText,
+     *     $messageName => $messageText,
+     *     ...
+     * );
+     * ?>
+     * </code>
+     *
+     * If specified, these messages override the messages provided by the
+     * default message provider. For example:
+     * <code>
+     * <?php
+     * $messages = array(
+     *     'ARGUMENT_REQUIRED' => 'The argument foo is required.',
+     * );
+     * ?>
+     * </code>
+     *
+     * @var array
+     * @see Console_CommandLine_MessageProvider_Default
+     */
+    public $messages = array();
+
+    // }}}
+    // {{{ Private properties
+
+    /**
+     * Array of options that must be dispatched at the end.
+     *
+     * @var array $_dispatchLater Options to be dispatched
+     */
+    private $_dispatchLater = array();
+
+    private $_lastopt = false;
+    private $_stopflag = false;
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor.
+     * Example:
+     *
+     * <code>
+     * $parser = new Console_CommandLine(array(
+     *     'name'               => 'yourprogram', // defaults to argv[0]
+     *     'description'        => 'Description of your program',
+     *     'version'            => '0.0.1', // your program version
+     *     'add_help_option'    => true, // or false to disable --help option
+     *     'add_version_option' => true, // or false to disable --version option
+     *     'force_posix'        => false // or true to force posix compliance
+     * ));
+     * </code>
+     *
+     * @param array $params An optional array of parameters
+     *
+     * @return void
+     */
+    public function __construct(array $params = array()) 
+    {
+        if (isset($params['name'])) {
+            $this->name = $params['name'];
+        } else if (isset($argv) && count($argv) > 0) {
+            $this->name = $argv[0];
+        } else if (isset($_SERVER['argv']) && count($_SERVER['argv']) > 0) {
+            $this->name = $_SERVER['argv'][0];
+        } else if (isset($_SERVER['SCRIPT_NAME'])) {
+            $this->name = basename($_SERVER['SCRIPT_NAME']);
+        }
+        if (isset($params['description'])) {
+            $this->description = $params['description'];
+        }
+        if (isset($params['version'])) {
+            $this->version = $params['version'];
+        }
+        if (isset($params['add_version_option'])) {
+            $this->add_version_option = $params['add_version_option'];
+        }
+        if (isset($params['add_help_option'])) {
+            $this->add_help_option = $params['add_help_option'];
+        }
+        if (isset($params['subcommand_required'])) {
+            $this->subcommand_required = $params['subcommand_required'];
+        }
+        if (isset($params['force_posix'])) {
+            $this->force_posix = $params['force_posix'];
+        } else if (getenv('POSIXLY_CORRECT')) {
+            $this->force_posix = true;
+        }
+        if (isset($params['messages']) && is_array($params['messages'])) {
+            $this->messages = $params['messages'];
+        }
+        // set default instances
+        $this->renderer         = new Console_CommandLine_Renderer_Default($this);
+        $this->outputter        = new Console_CommandLine_Outputter_Default();
+        $this->message_provider = new Console_CommandLine_MessageProvider_Default();
+    }
+
+    // }}}
+    // accept() {{{
+
+    /**
+     * Method to allow Console_CommandLine to accept either:
+     *  + a custom renderer, 
+     *  + a custom outputter,
+     *  + or a custom message provider
+     *
+     * @param mixed $instance The custom instance
+     *
+     * @return void
+     * @throws Console_CommandLine_Exception if wrong argument passed
+     */
+    public function accept($instance) 
+    {
+        if ($instance instanceof Console_CommandLine_Renderer) {
+            if (property_exists($instance, 'parser') && !$instance->parser) {
+                $instance->parser = $this;
+            }
+            $this->renderer = $instance;
+        } else if ($instance instanceof Console_CommandLine_Outputter) {
+            $this->outputter = $instance;
+        } else if ($instance instanceof Console_CommandLine_MessageProvider) {
+            $this->message_provider = $instance;
+        } else {
+            throw Console_CommandLine_Exception::factory(
+                'INVALID_CUSTOM_INSTANCE',
+                array(),
+                $this,
+                $this->messages
+            );
+        }
+    }
+
+    // }}}
+    // fromXmlFile() {{{
+
+    /**
+     * Returns a command line parser instance built from an xml file.
+     *
+     * Example:
+     * <code>
+     * require_once 'Console/CommandLine.php';
+     * $parser = Console_CommandLine::fromXmlFile('path/to/file.xml');
+     * $result = $parser->parse();
+     * </code>
+     *
+     * @param string $file Path to the xml file
+     *
+     * @return Console_CommandLine The parser instance
+     */
+    public static function fromXmlFile($file) 
+    {
+        include_once 'Console/CommandLine/XmlParser.php';
+        return Console_CommandLine_XmlParser::parse($file);
+    }
+
+    // }}}
+    // fromXmlString() {{{
+
+    /**
+     * Returns a command line parser instance built from an xml string.
+     *
+     * Example:
+     * <code>
+     * require_once 'Console/CommandLine.php';
+     * $xmldata = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+     * <command>
+     *   <description>Compress files</description>
+     *   <option name="quiet">
+     *     <short_name>-q</short_name>
+     *     <long_name>--quiet</long_name>
+     *     <description>be quiet when run</description>
+     *     <action>StoreTrue/action>
+     *   </option>
+     *   <argument name="files">
+     *     <description>a list of files</description>
+     *     <multiple>true</multiple>
+     *   </argument>
+     * </command>';
+     * $parser = Console_CommandLine::fromXmlString($xmldata);
+     * $result = $parser->parse();
+     * </code>
+     *
+     * @param string $string The xml data
+     *
+     * @return Console_CommandLine The parser instance
+     */
+    public static function fromXmlString($string) 
+    {
+        include_once 'Console/CommandLine/XmlParser.php';
+        return Console_CommandLine_XmlParser::parseString($string);
+    }
+
+    // }}}
+    // addArgument() {{{
+
+    /**
+     * Adds an argument to the command line parser and returns it.
+     *
+     * Adds an argument with the name $name and set its attributes with the
+     * array $params, then return the Console_CommandLine_Argument instance
+     * created.
+     * The method accepts another form: you can directly pass a 
+     * Console_CommandLine_Argument object as the sole argument, this allows
+     * you to contruct the argument separately, in order to reuse it in
+     * different command line parsers or commands for example.
+     *
+     * Example:
+     * <code>
+     * $parser = new Console_CommandLine();
+     * // add an array argument
+     * $parser->addArgument('input_files', array('multiple'=>true));
+     * // add a simple argument
+     * $parser->addArgument('output_file');
+     * $result = $parser->parse();
+     * print_r($result->args['input_files']);
+     * print_r($result->args['output_file']);
+     * // will print:
+     * // array('file1', 'file2')
+     * // 'file3'
+     * // if the command line was:
+     * // myscript.php file1 file2 file3
+     * </code>
+     *
+     * In a terminal, the help will be displayed like this:
+     * <code>
+     * $ myscript.php install -h
+     * Usage: myscript.php <input_files...> <output_file>
+     * </code>
+     *
+     * @param mixed $name   A string containing the argument name or an
+     *                      instance of Console_CommandLine_Argument
+     * @param array $params An array containing the argument attributes
+     *
+     * @return Console_CommandLine_Argument the added argument
+     * @see Console_CommandLine_Argument
+     */
+    public function addArgument($name, $params = array())
+    {
+        if ($name instanceof Console_CommandLine_Argument) {
+            $argument = $name;
+        } else {
+            include_once 'Console/CommandLine/Argument.php';
+            $argument = new Console_CommandLine_Argument($name, $params);
+        }
+        $argument->validate();
+        $this->args[$argument->name] = $argument;
+        return $argument;
+    }
+
+    // }}}
+    // addCommand() {{{
+
+    /**
+     * Adds a sub-command to the command line parser.
+     *
+     * Adds a command with the given $name to the parser and returns the 
+     * Console_CommandLine_Command instance, you can then populate the command
+     * with options, configure it, etc... like you would do for the main parser
+     * because the class Console_CommandLine_Command inherits from
+     * Console_CommandLine.
+     *
+     * An example:
+     * <code>
+     * $parser = new Console_CommandLine();
+     * $install_cmd = $parser->addCommand('install');
+     * $install_cmd->addOption(
+     *     'verbose',
+     *     array(
+     *         'short_name'  => '-v',
+     *         'long_name'   => '--verbose',
+     *         'description' => 'be noisy when installing stuff',
+     *         'action'      => 'StoreTrue'
+     *      )
+     * );
+     * $parser->parse();
+     * </code>
+     * Then in a terminal:
+     * <code>
+     * $ myscript.php install -h
+     * Usage: myscript.php install [options]
+     *
+     * Options:
+     *   -h, --help     display this help message and exit
+     *   -v, --verbose  be noisy when installing stuff
+     *
+     * $ myscript.php install --verbose
+     * Installing whatever...
+     * $
+     * </code>
+     *
+     * @param mixed $name   A string containing the command name or an
+     *                      instance of Console_CommandLine_Command
+     * @param array $params An array containing the command attributes
+     *
+     * @return Console_CommandLine_Command the added subcommand
+     * @see    Console_CommandLine_Command
+     */
+    public function addCommand($name, $params = array())
+    {
+        if ($name instanceof Console_CommandLine_Command) {
+            $command = $name;
+        } else {
+            include_once 'Console/CommandLine/Command.php';
+            $params['name'] = $name;
+            $command        = new Console_CommandLine_Command($params);
+            // some properties must cascade to the child command if not 
+            // passed explicitely. This is done only in this case, because if 
+            // we have a Command object we have no way to determine if theses 
+            // properties have already been set
+            $cascade = array(
+                'add_help_option',
+                'add_version_option',
+                'outputter',
+                'message_provider',
+                'force_posix',
+                'force_options_defaults'
+            );
+            foreach ($cascade as $property) {
+                if (!isset($params[$property])) {
+                    $command->$property = $this->$property;
+                }
+            }
+            if (!isset($params['renderer'])) {
+                $renderer          = clone $this->renderer;
+                $renderer->parser  = $command;
+                $command->renderer = $renderer;
+            }
+        }
+        $command->parent = $this;
+        $this->commands[$command->name] = $command;
+        return $command;
+    }
+
+    // }}}
+    // addOption() {{{
+
+    /**
+     * Adds an option to the command line parser and returns it.
+     *
+     * Adds an option with the name $name and set its attributes with the
+     * array $params, then return the Console_CommandLine_Option instance
+     * created.
+     * The method accepts another form: you can directly pass a 
+     * Console_CommandLine_Option object as the sole argument, this allows
+     * you to contruct the option separately, in order to reuse it in different
+     * command line parsers or commands for example.
+     *
+     * Example:
+     * <code>
+     * $parser = new Console_CommandLine();
+     * $parser->addOption('path', array(
+     *     'short_name'  => '-p',  // a short name
+     *     'long_name'   => '--path', // a long name
+     *     'description' => 'path to the dir', // a description msg
+     *     'action'      => 'StoreString',
+     *     'default'     => '/tmp' // a default value
+     * ));
+     * $parser->parse();
+     * </code>
+     *
+     * In a terminal, the help will be displayed like this:
+     * <code>
+     * $ myscript.php --help
+     * Usage: myscript.php [options]
+     *
+     * Options:
+     *   -h, --help  display this help message and exit
+     *   -p, --path  path to the dir
+     *
+     * </code>
+     *
+     * Various methods to specify an option, these 3 commands are equivalent:
+     * <code>
+     * $ myscript.php --path=some/path
+     * $ myscript.php -p some/path
+     * $ myscript.php -psome/path
+     * </code>
+     *
+     * @param mixed $name   A string containing the option name or an
+     *                      instance of Console_CommandLine_Option
+     * @param array $params An array containing the option attributes
+     *
+     * @return Console_CommandLine_Option The added option
+     * @see    Console_CommandLine_Option
+     */
+    public function addOption($name, $params = array())
+    {
+        include_once 'Console/CommandLine/Option.php';
+        if ($name instanceof Console_CommandLine_Option) {
+            $opt = $name;
+        } else {
+            $opt = new Console_CommandLine_Option($name, $params);
+        }
+        $opt->validate();
+        if ($this->force_options_defaults) {
+            $opt->setDefaults();
+        }
+        $this->options[$opt->name] = $opt;
+        if (!empty($opt->choices) && $opt->add_list_option) {
+            $this->addOption('list_' . $opt->name, array(
+                'long_name'     => '--list-' . $opt->name,
+                'description'   => $this->message_provider->get(
+                    'LIST_OPTION_MESSAGE',
+                    array('name' => $opt->name)
+                ),
+                'action'        => 'List',
+                'action_params' => array('list' => $opt->choices),
+            ));
+        }
+        return $opt;
+    }
+
+    // }}}
+    // displayError() {{{
+
+    /**
+     * Displays an error to the user via stderr and exit with $exitCode if its
+     * value is not equals to false.
+     *
+     * @param string $error    The error message
+     * @param int    $exitCode The exit code number (default: 1). If set to
+     *                         false, the exit() function will not be called
+     *
+     * @return void
+     */
+    public function displayError($error, $exitCode = 1)
+    {
+        $this->outputter->stderr($this->renderer->error($error));
+        if ($exitCode !== false) {
+            exit($exitCode);
+        }
+    }
+
+    // }}}
+    // displayUsage() {{{
+
+    /**
+     * Displays the usage help message to the user via stdout and exit with
+     * $exitCode if its value is not equals to false.
+     *
+     * @param int $exitCode The exit code number (default: 0). If set to
+     *                      false, the exit() function will not be called
+     *
+     * @return void
+     */
+    public function displayUsage($exitCode = 0)
+    {
+        $this->outputter->stdout($this->renderer->usage());
+        if ($exitCode !== false) {
+            exit($exitCode);
+        }
+    }
+
+    // }}}
+    // displayVersion() {{{
+
+    /**
+     * Displays the program version to the user via stdout and exit with
+     * $exitCode if its value is not equals to false.
+     *
+     *
+     * @param int $exitCode The exit code number (default: 0). If set to
+     *                      false, the exit() function will not be called
+     *
+     * @return void
+     */
+    public function displayVersion($exitCode = 0)
+    {
+        $this->outputter->stdout($this->renderer->version());
+        if ($exitCode !== false) {
+            exit($exitCode);
+        }
+    }
+
+    // }}}
+    // findOption() {{{
+
+    /**
+     * Finds the option that matches the given short_name (ex: -v), long_name
+     * (ex: --verbose) or name (ex: verbose).
+     *
+     * @param string $str The option identifier
+     *
+     * @return mixed A Console_CommandLine_Option instance or false
+     */
+    public function findOption($str)
+    {
+        $str = trim($str);
+        if ($str === '') {
+            return false;
+        }
+        $matches = array();
+        foreach ($this->options as $opt) {
+            if ($opt->short_name == $str || $opt->long_name == $str ||
+                $opt->name == $str) {
+                // exact match
+                return $opt;
+            }
+            if (substr($opt->long_name, 0, strlen($str)) === $str) {
+                // abbreviated long option
+                $matches[] = $opt;
+            }
+        }
+        if ($count = count($matches)) {
+            if ($count > 1) {
+                $matches_str = '';
+                $padding     = '';
+                foreach ($matches as $opt) {
+                    $matches_str .= $padding . $opt->long_name;
+                    $padding      = ', ';
+                }
+                throw Console_CommandLine_Exception::factory(
+                    'OPTION_AMBIGUOUS',
+                    array('name' => $str, 'matches' => $matches_str),
+                    $this,
+                    $this->messages
+                );
+            }
+            return $matches[0];
+        }
+        return false;
+    }
+    // }}}
+    // registerAction() {{{
+
+    /**
+     * Registers a custom action for the parser, an example:
+     *
+     * <code>
+     *
+     * // in this example we create a "range" action:
+     * // the user will be able to enter something like:
+     * // $ <program> -r 1,5
+     * // and in the result we will have:
+     * // $result->options['range']: array(1, 5)
+     *
+     * require_once 'Console/CommandLine.php';
+     * require_once 'Console/CommandLine/Action.php';
+     *
+     * class ActionRange extends Console_CommandLine_Action
+     * {
+     *     public function execute($value=false, $params=array())
+     *     {
+     *         $range = explode(',', str_replace(' ', '', $value));
+     *         if (count($range) != 2) {
+     *             throw new Exception(sprintf(
+     *                 'Option "%s" must be 2 integers separated by a comma',
+     *                 $this->option->name
+     *             ));
+     *         }
+     *         $this->setResult($range);
+     *     }
+     * }
+     * // then we can register our action
+     * Console_CommandLine::registerAction('Range', 'ActionRange');
+     * // and now our action is available !
+     * $parser = new Console_CommandLine();
+     * $parser->addOption('range', array(
+     *     'short_name'  => '-r',
+     *     'long_name'   => '--range',
+     *     'action'      => 'Range', // note our custom action
+     *     'description' => 'A range of two integers separated by a comma'
+     * ));
+     * // etc...
+     *
+     * </code>
+     *
+     * @param string $name  The name of the custom action
+     * @param string $class The class name of the custom action
+     *
+     * @return void
+     */
+    public static function registerAction($name, $class) 
+    {
+        if (!isset(self::$actions[$name])) {
+            if (!class_exists($class)) {
+                self::triggerError('action_class_does_not_exists',
+                    E_USER_ERROR,
+                    array('{$name}' => $name, '{$class}' => $class));
+            }
+            self::$actions[$name] = array($class, false);
+        }
+    }
+
+    // }}}
+    // triggerError() {{{
+
+    /**
+     * A wrapper for programming errors triggering.
+     *
+     * @param string $msgId  Identifier of the message
+     * @param int    $level  The php error level
+     * @param array  $params An array of search=>replaces entries
+     *
+     * @return void
+     * @todo remove Console::triggerError() and use exceptions only
+     */
+    public static function triggerError($msgId, $level, $params=array()) 
+    {
+        if (isset(self::$errors[$msgId])) {
+            $msg = str_replace(array_keys($params),
+                array_values($params), self::$errors[$msgId]); 
+            trigger_error($msg, $level);
+        } else {
+            trigger_error('unknown error', $level);
+        }
+    }
+
+    // }}}
+    // parse() {{{
+
+    /**
+     * Parses the command line arguments and returns a
+     * Console_CommandLine_Result instance.
+     *
+     * @param integer $userArgc Number of arguments (optional)
+     * @param array   $userArgv Array containing arguments (optional)
+     *
+     * @return Console_CommandLine_Result The result instance
+     * @throws Exception on user errors
+     */
+    public function parse($userArgc=null, $userArgv=null)
+    {
+        $this->_lastopt  = false;
+        $this->_stopflag = false;
+
+        $this->addBuiltinOptions();
+        if ($userArgc !== null && $userArgv !== null) {
+            $argc = $userArgc;
+            $argv = $userArgv;
+        } else {
+            list($argc, $argv) = $this->getArgcArgv();
+        }
+        // build an empty result
+        include_once 'Console/CommandLine/Result.php';
+        $result = new Console_CommandLine_Result();
+        if (!($this instanceof Console_CommandLine_Command)) {
+            // remove script name if we're not in a subcommand
+            array_shift($argv);
+            $argc--;
+        }
+        // will contain arguments
+        $args = array();
+        foreach ($this->options as $name=>$option) {
+            $result->options[$name] = $option->default;
+        }
+        // parse command line tokens
+        while ($argc--) {
+            $token = array_shift($argv);
+            try {
+                if ($cmd = $this->_getSubCommand($token)) {
+                    $result->command_name = $cmd->name;
+                    $result->command      = $cmd->parse($argc, $argv);
+                    break;
+                } else {
+                    $this->parseToken($token, $result, $args, $argc);
+                }
+            } catch (Exception $exc) {
+                throw $exc;
+            }
+        }
+        // Parse a null token to allow any undespatched actions to be despatched.
+        $this->parseToken(null, $result, $args, 0);
+        // Check if an invalid subcommand was specified. If there are
+        // subcommands and no arguments, but an argument was provided, it is
+        // an invalid subcommand.
+        if (   count($this->commands) > 0
+            && count($this->args) === 0
+            && count($args) > 0
+        ) {
+            throw Console_CommandLine_Exception::factory(
+                'INVALID_SUBCOMMAND',
+                array('command' => $args[0]),
+                $this,
+                $this->messages
+            );
+        }
+        // if subcommand_required is set to true we must check that we have a
+        // subcommand.
+        if (   count($this->commands)
+            && $this->subcommand_required
+            && !$result->command_name
+        ) {
+            throw Console_CommandLine_Exception::factory(
+                'SUBCOMMAND_REQUIRED',
+                array('commands' => implode(array_keys($this->commands), ', ')),
+                $this,
+                $this->messages
+            );
+        }
+        // minimum argument number check
+        $argnum = 0;
+        foreach ($this->args as $name=>$arg) {
+            if (!$arg->optional) {
+                $argnum++;
+            }
+        }
+        if (count($args) < $argnum) {
+            throw Console_CommandLine_Exception::factory(
+                'ARGUMENT_REQUIRED',
+                array('argnum' => $argnum, 'plural' => $argnum>1 ? 's': ''),
+                $this,
+                $this->messages
+            );
+        }
+        // handle arguments
+        $c = count($this->args);
+        foreach ($this->args as $name=>$arg) {
+            $c--;
+            if ($arg->multiple) {
+                $result->args[$name] = $c ? array_splice($args, 0, -$c) : $args;
+            } else {
+                $result->args[$name] = array_shift($args);
+            }
+            if (!$result->args[$name] && $arg->optional && $arg->default) {
+                $result->args[$name] = $arg->default;
+            }
+            // check value is in argument choices
+            if (!empty($this->args[$name]->choices)) {
+                foreach ($result->args[$name] as $value) {
+                    if (!in_array($value, $arg->choices)) {
+                        throw Console_CommandLine_Exception::factory(
+                            'ARGUMENT_VALUE_NOT_VALID',
+                            array(
+                                'name'    => $name,
+                                'choices' => implode('", "', $arg->choices),
+                                'value'   => implode(' ', $result->args[$name]),
+                            ),
+                            $this,
+                            $arg->messages
+                        );
+                    }
+                }
+            }
+        }
+        // dispatch deferred options
+        foreach ($this->_dispatchLater as $optArray) {
+            $optArray[0]->dispatchAction($optArray[1], $optArray[2], $this);
+        }
+        return $result;
+    }
+
+    // }}}
+    // parseToken() {{{
+
+    /**
+     * Parses the command line token and modifies *by reference* the $options
+     * and $args arrays.
+     *
+     * @param string $token  The command line token to parse
+     * @param object $result The Console_CommandLine_Result instance
+     * @param array  &$args  The argv array
+     * @param int    $argc   Number of lasting args
+     *
+     * @return void
+     * @access protected
+     * @throws Exception on user errors
+     */
+    protected function parseToken($token, $result, &$args, $argc)
+    {
+        $last  = $argc === 0;
+        if (!$this->_stopflag && $this->_lastopt) {
+            if (strlen($token) > ($this->avoid_reading_stdin ? 1 : 0) &&
+                substr($token, 0, 1) == '-') {
+                if ($this->_lastopt->argument_optional) {
+                    $this->_dispatchAction($this->_lastopt, '', $result);
+                    if ($this->_lastopt->action != 'StoreArray') {
+                        $this->_lastopt = false;
+                    }
+                } else if (isset($result->options[$this->_lastopt->name])) {
+                    // case of an option that expect a list of args
+                    $this->_lastopt = false;
+                } else {
+                    throw Console_CommandLine_Exception::factory(
+                        'OPTION_VALUE_REQUIRED',
+                        array('name' => $this->_lastopt->name),
+                        $this,
+                        $this->messages
+                    );
+                }
+            } else {
+                // when a StoreArray option is positioned last, the behavior
+                // is to consider that if there's already an element in the
+                // array, and the commandline expects one or more args, we
+                // leave last tokens to arguments
+                if ($this->_lastopt->action == 'StoreArray'
+                    && !empty($result->options[$this->_lastopt->name])
+                    && count($this->args) > ($argc + count($args))
+                ) {
+                    if (!is_null($token)) {
+                        $args[] = $token;
+                    }
+                    return;
+                }
+                if (!is_null($token) || $this->_lastopt->action == 'Password') {
+                    $this->_dispatchAction($this->_lastopt, $token, $result);
+                }
+                if ($this->_lastopt->action != 'StoreArray') {
+                    $this->_lastopt = false;
+                }
+                return;
+            }
+        }
+        if (!$this->_stopflag && substr($token, 0, 2) == '--') {
+            // a long option
+            $optkv = explode('=', $token, 2);
+            if (trim($optkv[0]) == '--') {
+                // the special argument "--" forces in all cases the end of 
+                // option scanning.
+                $this->_stopflag = true;
+                return;
+            }
+            $opt = $this->findOption($optkv[0]);
+            if (!$opt) {
+                throw Console_CommandLine_Exception::factory(
+                    'OPTION_UNKNOWN',
+                    array('name' => $optkv[0]),
+                    $this,
+                    $this->messages
+                );
+            }
+            $value = isset($optkv[1]) ? $optkv[1] : false;
+            if (!$opt->expectsArgument() && $value !== false) {
+                throw Console_CommandLine_Exception::factory(
+                    'OPTION_VALUE_UNEXPECTED',
+                    array('name' => $opt->name, 'value' => $value),
+                    $this,
+                    $this->messages
+                );
+            }
+            if ($opt->expectsArgument() && $value === false) {
+                // maybe the long option argument is separated by a space, if 
+                // this is the case it will be the next arg
+                if ($last && !$opt->argument_optional) {
+                    throw Console_CommandLine_Exception::factory(
+                        'OPTION_VALUE_REQUIRED',
+                        array('name' => $opt->name),
+                        $this,
+                        $this->messages
+                    );
+                }
+                // we will have a value next time
+                $this->_lastopt = $opt;
+                return;
+            }
+            if ($opt->action == 'StoreArray') {
+                $this->_lastopt = $opt;
+            }
+            $this->_dispatchAction($opt, $value, $result);
+        } else if (!$this->_stopflag &&
+                   strlen($token) > ($this->avoid_reading_stdin ? 1 : 0) &&
+                   substr($token, 0, 1) == '-') {
+            // a short option
+            $optname = substr($token, 0, 2);
+            if ($optname == '-' && !$this->avoid_reading_stdin) {
+                // special case of "-": try to read stdin
+                $args[] = file_get_contents('php://stdin');
+                return;
+            }
+            $opt = $this->findOption($optname);
+            if (!$opt) {
+                throw Console_CommandLine_Exception::factory(
+                    'OPTION_UNKNOWN',
+                    array('name' => $optname),
+                    $this,
+                    $this->messages
+                );
+            }
+            // parse other options or set the value
+            // in short: handle -f<value> and -f <value>
+            $next = substr($token, 2, 1);
+            // check if we must wait for a value
+            if (!$next) {
+                if ($opt->expectsArgument()) {
+                    if ($last && !$opt->argument_optional) {
+                        throw Console_CommandLine_Exception::factory(
+                            'OPTION_VALUE_REQUIRED',
+                            array('name' => $opt->name),
+                            $this,
+                            $this->messages
+                        );
+                    }
+                    // we will have a value next time
+                    $this->_lastopt = $opt;
+                    return;
+                }
+                $value = false;
+            } else {
+                if (!$opt->expectsArgument()) { 
+                    if ($nextopt = $this->findOption('-' . $next)) {
+                        $this->_dispatchAction($opt, false, $result);
+                        $this->parseToken('-' . substr($token, 2), $result,
+                            $args, $last);
+                        return;
+                    } else {
+                        throw Console_CommandLine_Exception::factory(
+                            'OPTION_UNKNOWN',
+                            array('name' => $next),
+                            $this,
+                            $this->messages
+                        );
+                    }
+                }
+                if ($opt->action == 'StoreArray') {
+                    $this->_lastopt = $opt;
+                }
+                $value = substr($token, 2);
+            }
+            $this->_dispatchAction($opt, $value, $result);
+        } else {
+            // We have an argument.
+            // if we are in POSIX compliant mode, we must set the stop flag to 
+            // true in order to stop option parsing.
+            if (!$this->_stopflag && $this->force_posix) {
+                $this->_stopflag = true;
+            }
+            if (!is_null($token)) {
+                $args[] = $token;
+            }
+        }
+    }
+
+    // }}}
+    // addBuiltinOptions() {{{
+
+    /**
+     * Adds the builtin "Help" and "Version" options if needed.
+     *
+     * @return void
+     */
+    public function addBuiltinOptions()
+    {
+        if ($this->add_help_option) {
+            $helpOptionParams = array(
+                'long_name'   => '--help',
+                'description' => 'show this help message and exit',
+                'action'      => 'Help'   
+            );
+            if (!($option = $this->findOption('-h')) || $option->action == 'Help') {
+                // short name is available, take it
+                $helpOptionParams['short_name'] = '-h';
+            }
+            $this->addOption('help', $helpOptionParams);
+        }
+        if ($this->add_version_option && !empty($this->version)) {
+            $versionOptionParams = array(
+                'long_name'   => '--version',
+                'description' => 'show the program version and exit',
+                'action'      => 'Version'   
+            );
+            if (!$this->findOption('-v')) {
+                // short name is available, take it
+                $versionOptionParams['short_name'] = '-v';
+            }
+            $this->addOption('version', $versionOptionParams);
+        }
+    } 
+
+    // }}}
+    // getArgcArgv() {{{
+
+    /**
+     * Tries to return an array containing argc and argv, or trigger an error
+     * if it fails to get them.
+     *
+     * @return array The argc/argv array
+     * @throws Console_CommandLine_Exception 
+     */
+    protected function getArgcArgv()
+    {
+        if (php_sapi_name() != 'cli') {
+            // we have a web request
+            $argv = array($this->name);
+            if (isset($_REQUEST)) {
+                foreach ($_REQUEST as $key => $value) {
+                    if (!is_array($value)) {
+                        $value = array($value);
+                    }
+                    $opt = $this->findOption($key);
+                    if ($opt instanceof Console_CommandLine_Option) {
+                        // match a configured option
+                        $argv[] = $opt->short_name ? 
+                            $opt->short_name : $opt->long_name;
+                        foreach ($value as $v) {
+                            if ($opt->expectsArgument()) {
+                                $argv[] = isset($_REQUEST[$key]) ? urldecode($v) : $v;
+                            } else if ($v == '0' || $v == 'false') {
+                                array_pop($argv);
+                            }
+                        }
+                    } else if (isset($this->args[$key])) {
+                        // match a configured argument
+                        foreach ($value as $v) {
+                            $argv[] = isset($_REQUEST[$key]) ? urldecode($v) : $v;
+                        }
+                    }
+                }
+            }
+            return array(count($argv), $argv);
+        }
+        if (isset($argc) && isset($argv)) {
+            // case of register_argv_argc = 1
+            return array($argc, $argv);
+        }
+        if (isset($_SERVER['argc']) && isset($_SERVER['argv'])) {
+            return array($_SERVER['argc'], $_SERVER['argv']);
+        }
+        return array(0, array());
+    }
+
+    // }}}
+    // _dispatchAction() {{{
+
+    /**
+     * Dispatches the given option or store the option to dispatch it later.
+     *
+     * @param Console_CommandLine_Option $option The option instance
+     * @param string                     $token  Command line token to parse
+     * @param Console_CommandLine_Result $result The result instance
+     *
+     * @return void
+     */
+    private function _dispatchAction($option, $token, $result)
+    {
+        if ($option->action == 'Password') {
+            $this->_dispatchLater[] = array($option, $token, $result);
+        } else {
+            $option->dispatchAction($token, $result, $this);
+        }
+    }
+    // }}}
+    // _getSubCommand() {{{
+
+    /**
+     * Tries to return the subcommand that matches the given token or returns
+     * false if no subcommand was found.
+     *
+     * @param string $token Current command line token
+     *
+     * @return mixed An instance of Console_CommandLine_Command or false
+     */
+    private function _getSubCommand($token)
+    {
+        foreach ($this->commands as $cmd) {
+            if ($cmd->name == $token || in_array($token, $cmd->aliases)) {
+                return $cmd;
+            }
+        }
+        return false;
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,142 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Class that represent an option action.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+abstract class Console_CommandLine_Action
+{
+    // Properties {{{
+
+    /**
+     * A reference to the result instance.
+     *
+     * @var Console_CommandLine_Result $result The result instance
+     */
+    protected $result;
+
+    /**
+     * A reference to the option instance.
+     *
+     * @var Console_CommandLine_Option $option The action option
+     */
+    protected $option;
+
+    /**
+     * A reference to the parser instance.
+     *
+     * @var Console_CommandLine $parser The parser
+     */
+    protected $parser;
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor
+     *
+     * @param Console_CommandLine_Result $result The result instance
+     * @param Console_CommandLine_Option $option The action option
+     * @param Console_CommandLine        $parser The current parser
+     *
+     * @return void
+     */
+    public function __construct($result, $option, $parser)
+    {
+        $this->result = $result;
+        $this->option = $option;
+        $this->parser = $parser;
+    }
+
+    // }}}
+    // getResult() {{{
+
+    /**
+     * Convenience method to retrieve the value of result->options[name].
+     *
+     * @return mixed The result value or null
+     */
+    public function getResult()
+    {
+        if (isset($this->result->options[$this->option->name])) {
+            return $this->result->options[$this->option->name];
+        }
+        return null;
+    }
+
+    // }}}
+    // format() {{{
+
+    /**
+     * Allow a value to be pre-formatted prior to being used in a choices test.
+     * Setting $value to the new format will keep the formatting.
+     *
+     * @param mixed &$value The value to format
+     *
+     * @return mixed The formatted value
+     */
+    public function format(&$value)
+    {
+        return $value;
+    }
+
+    // }}}
+    // setResult() {{{
+
+    /**
+     * Convenience method to assign the result->options[name] value.
+     *
+     * @param mixed $result The result value
+     *
+     * @return void
+     */
+    public function setResult($result)
+    {
+        $this->result->options[$this->option->name] = $result;
+    }
+
+    // }}}
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     * All children actions must implement this method.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    abstract public function execute($value = false, $params = array());
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/Callback.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,80 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the Callback action.
+ *
+ * The result option array entry value is set to the return value of the
+ * callback defined in the option.
+ *
+ * There are two steps to defining a callback option:
+ *   - define the option itself using the callback action
+ *   - write the callback; this is a function (or method) that takes five
+ *     arguments, as described below.
+ *
+ * All callbacks are called as follows:
+ * <code>
+ * callable_func(
+ *     $value,           // the value of the option
+ *     $option_instance, // the option instance
+ *     $result_instance, // the result instance
+ *     $parser_instance, // the parser instance
+ *     $params           // an array of params as specified in the option
+ * );
+ * </code>
+ * and *must* return the option value.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_Callback extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The value of the option
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $this->setResult(call_user_func($this->option->callback, $value,
+            $this->option, $this->result, $this->parser, $params));
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/Counter.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,86 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the Version action.
+ *
+ * The execute methode add 1 to the value of the result option array entry.
+ * The value is incremented each time the option is found, for example
+ * with an option defined like that:
+ *
+ * <code>
+ * $parser->addOption(
+ *     'verbose',
+ *     array(
+ *         'short_name' => '-v',
+ *         'action'     => 'Counter'
+ *     )
+ * );
+ * </code>
+ * If the user type:
+ * <code>
+ * $ script.php -v -v -v
+ * </code>
+ * or: 
+ * <code>
+ * $ script.php -vvv
+ * </code>
+ * the verbose variable will be set to to 3.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_Counter extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $result = $this->getResult();
+        if ($result === null) {
+            $result = 0;
+        }
+        $this->setResult(++$result);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/Help.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the Help action, a special action that displays the
+ * help message, telling the user how to use the program.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_Help extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        return $this->parser->displayUsage();
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/List.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,73 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the List action, a special action that simply output an 
+ * array as a list.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_List extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     * Possible parameters are:
+     * - message: an alternative message to display instead of the default 
+     *   message,
+     * - delimiter: an alternative delimiter instead of the comma,
+     * - post: a string to append after the message (default is the new line 
+     *   char).
+     *
+     * @param mixed $value  The option value
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $list = isset($params['list']) ? $params['list'] : array();
+        $msg  = isset($params['message']) 
+            ? $params['message'] 
+            : $this->parser->message_provider->get('LIST_DISPLAYED_MESSAGE');
+        $del  = isset($params['delimiter']) ? $params['delimiter'] : ', ';
+        $post = isset($params['post']) ? $params['post'] : "\n";
+        $this->parser->outputter->stdout($msg . implode($del, $list) . $post);
+        exit(0);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/Password.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,90 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the Password action, a special action that allow the 
+ * user to specify the password on the commandline or to be prompted for 
+ * entering it.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_Password extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $this->setResult(empty($value) ? $this->_promptPassword() : $value);
+    }
+    // }}}
+    // _promptPassword() {{{
+
+    /**
+     * Prompts the password to the user without echoing it.
+     *
+     * @return string
+     * @todo not echo-ing the password does not work on windows is there a way 
+     *       to make this work ?
+     */
+    private function _promptPassword()
+    {
+        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+            fwrite(STDOUT,
+                $this->parser->message_provider->get('PASSWORD_PROMPT_ECHO'));
+            @flock(STDIN, LOCK_EX);
+            $passwd = fgets(STDIN);
+            @flock(STDIN, LOCK_UN);
+        } else {
+            fwrite(STDOUT, $this->parser->message_provider->get('PASSWORD_PROMPT'));
+            // disable echoing
+            system('stty -echo');
+            @flock(STDIN, LOCK_EX);
+            $passwd = fgets(STDIN);
+            @flock(STDIN, LOCK_UN);
+            system('stty echo');
+        }
+        return trim($passwd);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreArray.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,78 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreArray action.
+ *
+ * The execute method appends the value of the option entered by the user to 
+ * the result option array entry.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreArray extends Console_CommandLine_Action
+{
+    // Protected properties {{{
+
+    /**
+     * Force a clean result when first called, overriding any defaults assigned.
+     *
+     * @var object $firstPass First time this action has been called.
+     */
+    protected $firstPass = true;
+
+    // }}}
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An optional array of parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $result = $this->getResult();
+        if (null === $result || $this->firstPass) {
+            $result          = array();
+            $this->firstPass = false;
+        }
+        $result[] = $value;
+        $this->setResult($result);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreFalse.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,64 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreFalse action.
+ *
+ * The execute method store the boolean 'false' in the corrsponding result
+ * option array entry (the value is true if the option is not present in the 
+ * command line entered by the user).
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreFalse extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $this->setResult(false);
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreFloat.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,76 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreFloat action.
+ *
+ * The execute method store the value of the option entered by the user as a
+ * float in the result option array entry, if the value passed is not a float
+ * an Exception is raised.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreFloat extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     * @throws Console_CommandLine_Exception
+     */
+    public function execute($value = false, $params = array())
+    {
+        if (!is_numeric($value)) {
+            include_once 'Console/CommandLine/Exception.php';
+            throw Console_CommandLine_Exception::factory(
+                'OPTION_VALUE_TYPE_ERROR',
+                array(
+                    'name'  => $this->option->name,
+                    'type'  => 'float',
+                    'value' => $value
+                ),
+                $this->parser
+            );
+        }
+        $this->setResult((float)$value);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreInt.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,76 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreInt action.
+ *
+ * The execute method store the value of the option entered by the user as an
+ * integer in the result option array entry, if the value passed is not an 
+ * integer an Exception is raised.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreInt extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     * @throws Console_CommandLine_Exception
+     */
+    public function execute($value = false, $params = array())
+    {
+        if (!is_numeric($value)) {
+            include_once 'Console/CommandLine/Exception.php';
+            throw Console_CommandLine_Exception::factory(
+                'OPTION_VALUE_TYPE_ERROR',
+                array(
+                    'name'  => $this->option->name,
+                    'type'  => 'int',
+                    'value' => $value
+                ),
+                $this->parser
+            );
+        }
+        $this->setResult((int)$value);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreString.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,62 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreString action.
+ *
+ * The execute method store the value of the option entered by the user as a 
+ * string in the result option array entry.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreString extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $this->setResult((string)$value);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/StoreTrue.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the StoreTrue action.
+ *
+ * The execute method store the boolean 'true' in the corrsponding result
+ * option array entry (the value is false if the option is not present in the 
+ * command line entered by the user).
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_StoreTrue extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        $this->setResult(true);
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Action/Version.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine/Action.php';
+
+/**
+ * Class that represent the Version action, a special action that displays the
+ * version string of the program.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Action_Version extends Console_CommandLine_Action
+{
+    // execute() {{{
+
+    /**
+     * Executes the action with the value entered by the user.
+     *
+     * @param mixed $value  The option value
+     * @param array $params An array of optional parameters
+     *
+     * @return string
+     */
+    public function execute($value = false, $params = array())
+    {
+        return $this->parser->displayVersion();
+    }
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Argument.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,102 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Include base element class.
+ */
+require_once 'Console/CommandLine/Element.php';
+
+/**
+ * Class that represent a command line argument.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Argument extends Console_CommandLine_Element
+{
+    // Public properties {{{
+
+    /**
+     * Setting this to true will tell the parser that the argument expects more
+     * than one argument and that argument values should be stored in an array.
+     *
+     * @var boolean $multiple Whether the argument expects multiple values
+     */
+    public $multiple = false;
+
+    /**
+     * Setting this to true will tell the parser that the argument is optional
+     * and can be ommited.
+     * Note that it is not a good practice to make arguments optional, it is
+     * the role of the options to be optional, by essence.
+     *
+     * @var boolean $optional Whether the argument is optional or not.
+     */
+    public $optional = false;
+
+    /**
+     * An array of possible values for the argument.
+     *
+     * @var array $choices Valid choices for the argument
+     */
+    public $choices = array();
+
+    // }}}
+    // validate() {{{
+
+    /**
+     * Validates the argument instance.
+     *
+     * @return void
+     * @throws Console_CommandLine_Exception
+     * @todo use exceptions
+     */
+    public function validate()
+    {
+        // check if the argument name is valid
+        if (!preg_match('/^[a-zA-Z_\x7f-\xff]+[a-zA-Z0-9_\x7f-\xff]*$/',
+            $this->name)) {
+            Console_CommandLine::triggerError(
+                'argument_bad_name',
+                E_USER_ERROR,
+                array('{$name}' => $this->name)
+            );
+        }
+        if (!$this->optional && $this->default !== null) {
+            Console_CommandLine::triggerError(
+                'argument_no_default',
+                E_USER_ERROR
+            );
+        }
+        parent::validate();
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Command.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,76 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * File containing the parent class.
+ */
+require_once 'Console/CommandLine.php';
+
+/**
+ * Class that represent a command with option and arguments.
+ *
+ * This class exist just to clarify the interface but at the moment it is 
+ * strictly identical to Console_CommandLine class, it could change in the
+ * future though.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Command extends Console_CommandLine
+{
+    // Public properties {{{
+
+    /**
+     * An array of aliases for the subcommand.
+     *
+     * @var array $aliases Aliases for the subcommand.
+     */
+    public $aliases = array();
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor.
+     *
+     * @param array  $params An optional array of parameters
+     *
+     * @return void
+     */
+    public function __construct($params = array()) 
+    {
+        if (isset($params['aliases'])) {
+            $this->aliases = $params['aliases'];
+        }
+        parent::__construct($params);
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/CustomMessageProvider.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2007 David JEAN LOUIS, 2009 silverorange
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 1.1.0
+ * @filesource
+ */
+
+/**
+ * Common interfacefor message providers that allow overriding with custom
+ * messages
+ *
+ * Message providers may optionally implement this interface.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2007 David JEAN LOUIS, 2009 silverorange
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Interface available since release 1.1.0
+ */
+interface Console_CommandLine_CustomMessageProvider
+{
+    // getWithCustomMesssages() {{{
+
+    /**
+     * Retrieves the given string identifier corresponding message.
+     *
+     * For a list of identifiers please see the provided default message
+     * provider.
+     *
+     * @param string $code     The string identifier of the message
+     * @param array  $vars     An array of template variables
+     * @param array  $messages An optional array of messages to use. Array
+     *                         indexes are message codes.
+     *
+     * @return string
+     * @see Console_CommandLine_MessageProvider
+     * @see Console_CommandLine_MessageProvider_Default
+     */
+    public function getWithCustomMessages(
+        $code, $vars = array(), $messages = array()
+    );
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Element.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,151 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Class that represent a command line element (an option, or an argument).
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+abstract class Console_CommandLine_Element
+{
+    // Public properties {{{
+
+    /**
+     * The element name.
+     *
+     * @var string $name Element name
+     */
+    public $name;
+
+    /**
+     * The name of variable displayed in the usage message, if no set it 
+     * defaults to the "name" property.
+     *
+     * @var string $help_name Element "help" variable name
+     */
+    public $help_name;
+
+    /**
+     * The element description.
+     *
+     * @var string $description Element description
+     */
+    public $description;
+
+    /**
+     * The default value of the element if not provided on the command line.
+     *
+     * @var mixed $default Default value of the option.
+     */
+    public $default;
+
+    /**
+     * Custom errors messages for this element
+     *
+     * This array is of the form:
+     * <code>
+     * <?php
+     * array(
+     *     $messageName => $messageText,
+     *     $messageName => $messageText,
+     *     ...
+     * );
+     * ?>
+     * </code>
+     *
+     * If specified, these messages override the messages provided by the
+     * default message provider. For example:
+     * <code>
+     * <?php
+     * $messages = array(
+     *     'ARGUMENT_REQUIRED' => 'The argument foo is required.',
+     * );
+     * ?>
+     * </code>
+     *
+     * @var array
+     * @see Console_CommandLine_MessageProvider_Default
+     */
+    public $messages = array();
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor.
+     *
+     * @param string $name   The name of the element
+     * @param array  $params An optional array of parameters
+     *
+     * @return void
+     */
+    public function __construct($name = null, $params = array()) 
+    {
+        $this->name = $name;
+        foreach ($params as $attr => $value) {
+            if (property_exists($this, $attr)) {
+                $this->$attr = $value;
+            }
+        }
+    }
+
+    // }}}
+    // toString() {{{
+
+    /**
+     * Returns the string representation of the element.
+     *
+     * @return string The string representation of the element
+     * @todo use __toString() instead
+     */
+    public function toString()
+    {
+        return $this->help_name;
+    }
+    // }}}
+    // validate() {{{
+
+    /**
+     * Validates the element instance and set it's default values.
+     *
+     * @return void
+     * @throws Console_CommandLine_Exception
+     */
+    public function validate()
+    {
+        // if no help_name passed, default to name
+        if ($this->help_name == null) {
+            $this->help_name = $this->name;
+        }
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Exception.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,97 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Include the PEAR_Exception class
+ */
+require_once 'PEAR/Exception.php';
+
+/**
+ * Interface for custom message provider.
+ */
+require_once 'Console/CommandLine/CustomMessageProvider.php';
+
+/**
+ * Class for exceptions raised by the Console_CommandLine package.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Exception extends PEAR_Exception
+{
+    // Codes constants {{{
+
+    /**#@+
+     * Exception code constants.
+     */
+    const OPTION_VALUE_REQUIRED   = 1;
+    const OPTION_VALUE_UNEXPECTED = 2;
+    const OPTION_VALUE_TYPE_ERROR = 3;
+    const OPTION_UNKNOWN          = 4;
+    const ARGUMENT_REQUIRED       = 5;
+    const INVALID_SUBCOMMAND      = 6;
+    /**#@-*/
+
+    // }}}
+    // factory() {{{
+
+    /**
+     * Convenience method that builds the exception with the array of params by
+     * calling the message provider class.
+     *
+     * @param string              $code     The string identifier of the
+     *                                      exception.
+     * @param array               $params   Array of template vars/values
+     * @param Console_CommandLine $parser   An instance of the parser
+     * @param array               $messages An optional array of messages
+     *                                      passed to the message provider.
+     *
+     * @return object an instance of Console_CommandLine_Exception
+     */
+    public static function factory(
+        $code, $params, $parser, array $messages = array()
+    ) {
+        $provider = $parser->message_provider;
+        if ($provider instanceof Console_CommandLine_CustomMessageProvider) {
+            $msg = $provider->getWithCustomMessages(
+                $code,
+                $params,
+                $messages
+            );
+        } else {
+            $msg = $provider->get($code, $params);
+        }
+        $const = 'Console_CommandLine_Exception::' . $code;
+        $code  = defined($const) ? constant($const) : 0;
+        return new Console_CommandLine_Exception($msg, $code);
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/MessageProvider.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Message providers common interface, all message providers must implement
+ * this interface.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+interface Console_CommandLine_MessageProvider
+{
+    // get() {{{
+
+    /**
+     * Retrieves the given string identifier corresponding message.
+     * For a list of identifiers please see the provided default message 
+     * provider.
+     *
+     * @param string $code The string identifier of the message
+     * @param array  $vars An array of template variables
+     *
+     * @return string
+     * @see Console_CommandLine_MessageProvider_Default
+     */
+    public function get($code, $vars=array());
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/MessageProvider/Default.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,153 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * The message provider interface.
+ */
+require_once 'Console/CommandLine/MessageProvider.php';
+
+/**
+ * The custom message provider interface.
+ */
+require_once 'Console/CommandLine/CustomMessageProvider.php';
+
+/**
+ * Lightweight class that manages messages used by Console_CommandLine package, 
+ * allowing the developper to customize these messages, for example to 
+ * internationalize a command line frontend.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_MessageProvider_Default
+    implements Console_CommandLine_MessageProvider,
+    Console_CommandLine_CustomMessageProvider
+{
+    // Properties {{{
+
+    /**
+     * Associative array of messages
+     *
+     * @var array $messages
+     */
+    protected $messages = array(
+        'OPTION_VALUE_REQUIRED'   => 'Option "{$name}" requires a value.',
+        'OPTION_VALUE_UNEXPECTED' => 'Option "{$name}" does not expect a value (got "{$value}").',
+        'OPTION_VALUE_NOT_VALID'  => 'Option "{$name}" must be one of the following: "{$choices}" (got "{$value}").',
+        'ARGUMENT_VALUE_NOT_VALID'=> 'Argument "{$name}" must be one of the following: "{$choices}" (got "{$value}").',
+        'OPTION_VALUE_TYPE_ERROR' => 'Option "{$name}" requires a value of type {$type} (got "{$value}").',
+        'OPTION_AMBIGUOUS'        => 'Ambiguous option "{$name}", can be one of the following: {$matches}.',
+        'OPTION_UNKNOWN'          => 'Unknown option "{$name}".',
+        'ARGUMENT_REQUIRED'       => 'You must provide at least {$argnum} argument{$plural}.',
+        'PROG_HELP_LINE'          => 'Type "{$progname} --help" to get help.',
+        'PROG_VERSION_LINE'       => '{$progname} version {$version}.',
+        'COMMAND_HELP_LINE'       => 'Type "{$progname} <command> --help" to get help on specific command.',
+        'USAGE_WORD'              => 'Usage',
+        'OPTION_WORD'             => 'Options',
+        'ARGUMENT_WORD'           => 'Arguments',
+        'COMMAND_WORD'            => 'Commands',
+        'PASSWORD_PROMPT'         => 'Password: ',
+        'PASSWORD_PROMPT_ECHO'    => 'Password (warning: will echo): ',
+        'INVALID_CUSTOM_INSTANCE' => 'Instance does not implement the required interface',
+        'LIST_OPTION_MESSAGE'     => 'lists valid choices for option {$name}',
+        'LIST_DISPLAYED_MESSAGE'  => 'Valid choices are: ',
+        'INVALID_SUBCOMMAND'      => 'Command "{$command}" is not valid.',
+        'SUBCOMMAND_REQUIRED'     => 'Please enter one of the following command: {$commands}.',
+    );
+
+    // }}}
+    // get() {{{
+
+    /**
+     * Retrieve the given string identifier corresponding message.
+     *
+     * @param string $code The string identifier of the message
+     * @param array  $vars An array of template variables
+     *
+     * @return string
+     */
+    public function get($code, $vars = array())
+    {
+        if (!isset($this->messages[$code])) {
+            return 'UNKNOWN';
+        }
+        return $this->replaceTemplateVars($this->messages[$code], $vars);
+    }
+
+    // }}}
+    // getWithCustomMessages() {{{
+
+    /**
+     * Retrieve the given string identifier corresponding message.
+     *
+     * @param string $code     The string identifier of the message
+     * @param array  $vars     An array of template variables
+     * @param array  $messages An optional array of messages to use. Array
+     *                         indexes are message codes.
+     *
+     * @return string
+     */
+    public function getWithCustomMessages(
+        $code, $vars = array(), $messages = array()
+    ) {
+        // get message
+        if (isset($messages[$code])) {
+            $message = $messages[$code];
+        } elseif (isset($this->messages[$code])) {
+            $message = $this->messages[$code];
+        } else {
+            $message = 'UNKNOWN';
+        }
+        return $this->replaceTemplateVars($message, $vars);
+    }
+
+    // }}}
+    // replaceTemplateVars() {{{
+
+    /**
+     * Replaces template vars in a message
+     *
+     * @param string $message The message
+     * @param array  $vars    An array of template variables
+     *
+     * @return string
+     */
+    protected function replaceTemplateVars($message, $vars = array())
+    {
+        $tmpkeys = array_keys($vars);
+        $keys    = array();
+        foreach ($tmpkeys as $key) {
+            $keys[] = '{$' . $key . '}';
+        }
+        return str_replace($keys, array_values($vars), $message);
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Option.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,366 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required by this class.
+ */
+require_once 'Console/CommandLine.php';
+require_once 'Console/CommandLine/Element.php';
+
+/**
+ * Class that represent a commandline option.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Option extends Console_CommandLine_Element
+{
+    // Public properties {{{
+
+    /**
+     * The option short name (ex: -v).
+     *
+     * @var string $short_name Short name of the option
+     */
+    public $short_name;
+
+    /**
+     * The option long name (ex: --verbose).
+     *
+     * @var string $long_name Long name of the option
+     */
+    public $long_name;
+
+    /**
+     * The option action, defaults to "StoreString".
+     *
+     * @var string $action Option action
+     */
+    public $action = 'StoreString';
+
+    /**
+     * An array of possible values for the option. If this array is not empty 
+     * and the value passed is not in the array an exception is raised.
+     * This only make sense for actions that accept values of course.
+     *
+     * @var array $choices Valid choices for the option
+     */
+    public $choices = array();
+
+    /**
+     * The callback function (or method) to call for an action of type 
+     * Callback, this can be any callable supported by the php function 
+     * call_user_func.
+     * 
+     * Example:
+     *
+     * <code>
+     * $parser->addOption('myoption', array(
+     *     'short_name' => '-m',
+     *     'long_name'  => '--myoption',
+     *     'action'     => 'Callback',
+     *     'callback'   => 'myCallbackFunction'
+     * ));
+     * </code>
+     *
+     * @var callable $callback The option callback
+     */
+    public $callback;
+
+    /**
+     * An associative array of additional params to pass to the class 
+     * corresponding to the action, this array will also be passed to the 
+     * callback defined for an action of type Callback, Example:
+     *
+     * <code>
+     * // for a custom action
+     * $parser->addOption('myoption', array(
+     *     'short_name'    => '-m',
+     *     'long_name'     => '--myoption',
+     *     'action'        => 'MyCustomAction',
+     *     'action_params' => array('foo'=>true, 'bar'=>false)
+     * ));
+     *
+     * // if the user type:
+     * // $ <yourprogram> -m spam
+     * // in your MyCustomAction class the execute() method will be called
+     * // with the value 'spam' as first parameter and 
+     * // array('foo'=>true, 'bar'=>false) as second parameter
+     * </code>
+     *
+     * @var array $action_params Additional parameters to pass to the action
+     */
+    public $action_params = array();
+
+    /**
+     * For options that expect an argument, this property tells the parser if 
+     * the option argument is optional and can be ommited.
+     *
+     * @var bool $argumentOptional Whether the option arg is optional or not
+     */
+    public $argument_optional = false;
+
+    /**
+     * For options that uses the "choice" property only.
+     * Adds a --list-<choice> option to the parser that displays the list of 
+     * choices for the option.
+     *
+     * @var bool $add_list_option Whether to add a list option or not
+     */
+    public $add_list_option = false;
+
+    // }}}
+    // Private properties {{{
+
+    /**
+     * When an action is called remember it to allow for multiple calls.
+     *
+     * @var object $action_instance Placeholder for action
+     */
+    private $_action_instance = null;
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor.
+     *
+     * @param string $name   The name of the option
+     * @param array  $params An optional array of parameters
+     *
+     * @return void
+     */
+    public function __construct($name = null, $params = array()) 
+    {
+        parent::__construct($name, $params);
+        if ($this->action == 'Password') {
+            // special case for Password action, password can be passed to the 
+            // commandline or prompted by the parser
+            $this->argument_optional = true;
+        }
+    }
+
+    // }}}
+    // toString() {{{
+
+    /**
+     * Returns the string representation of the option.
+     *
+     * @param string $delim Delimiter to use between short and long option
+     *
+     * @return string The string representation of the option
+     * @todo use __toString() instead
+     */
+    public function toString($delim = ", ")
+    {
+        $ret     = '';
+        $padding = '';
+        if ($this->short_name != null) {
+            $ret .= $this->short_name;
+            if ($this->expectsArgument()) {
+                $ret .= ' ' . $this->help_name;
+            }
+            $padding = $delim;
+        }
+        if ($this->long_name != null) {
+            $ret .= $padding . $this->long_name;
+            if ($this->expectsArgument()) {
+                $ret .= '=' . $this->help_name;
+            }
+        }
+        return $ret;
+    }
+
+    // }}}
+    // expectsArgument() {{{
+
+    /**
+     * Returns true if the option requires one or more argument and false 
+     * otherwise.
+     *
+     * @return bool Whether the option expects an argument or not
+     */
+    public function expectsArgument()
+    {
+        if ($this->action == 'StoreTrue' || $this->action == 'StoreFalse' ||
+            $this->action == 'Help' || $this->action == 'Version' ||
+            $this->action == 'Counter' || $this->action == 'List') {
+            return false;
+        }
+        return true;
+    }
+
+    // }}}
+    // dispatchAction() {{{
+
+    /**
+     * Formats the value $value according to the action of the option and 
+     * updates the passed Console_CommandLine_Result object.
+     *
+     * @param mixed                      $value  The value to format
+     * @param Console_CommandLine_Result $result The result instance
+     * @param Console_CommandLine        $parser The parser instance
+     *
+     * @return void
+     * @throws Console_CommandLine_Exception
+     */
+    public function dispatchAction($value, $result, $parser)
+    {
+        $actionInfo = Console_CommandLine::$actions[$this->action];
+        if (true === $actionInfo[1]) {
+            // we have a "builtin" action
+            $tokens = explode('_', $actionInfo[0]);
+            include_once implode('/', $tokens) . '.php';
+        }
+        $clsname = $actionInfo[0];
+        if ($this->_action_instance === null) {
+            $this->_action_instance  = new $clsname($result, $this, $parser);
+        }
+
+        // check value is in option choices
+        if (!empty($this->choices) && !in_array($this->_action_instance->format($value), $this->choices)) {
+            throw Console_CommandLine_Exception::factory(
+                'OPTION_VALUE_NOT_VALID',
+                array(
+                    'name'    => $this->name,
+                    'choices' => implode('", "', $this->choices),
+                    'value'   => $value,
+                ),
+                $parser,
+                $this->messages
+            );
+        }
+        $this->_action_instance->execute($value, $this->action_params);
+    }
+
+    // }}}
+    // validate() {{{
+
+    /**
+     * Validates the option instance.
+     *
+     * @return void
+     * @throws Console_CommandLine_Exception
+     * @todo use exceptions instead
+     */
+    public function validate()
+    {
+        // check if the option name is valid
+        if (!preg_match('/^[a-zA-Z_\x7f-\xff]+[a-zA-Z0-9_\x7f-\xff]*$/',
+            $this->name)) {
+            Console_CommandLine::triggerError('option_bad_name',
+                E_USER_ERROR, array('{$name}' => $this->name));
+        }
+        // call the parent validate method
+        parent::validate();
+        // a short_name or a long_name must be provided
+        if ($this->short_name == null && $this->long_name == null) {
+            Console_CommandLine::triggerError('option_long_and_short_name_missing',
+                E_USER_ERROR, array('{$name}' => $this->name));
+        }
+        // check if the option short_name is valid
+        if ($this->short_name != null && 
+            !(preg_match('/^\-[a-zA-Z]{1}$/', $this->short_name))) {
+            Console_CommandLine::triggerError('option_bad_short_name',
+                E_USER_ERROR, array(
+                    '{$name}' => $this->name, 
+                    '{$short_name}' => $this->short_name
+                ));
+        }
+        // check if the option long_name is valid
+        if ($this->long_name != null && 
+            !preg_match('/^\-\-[a-zA-Z]+[a-zA-Z0-9_\-]*$/', $this->long_name)) {
+            Console_CommandLine::triggerError('option_bad_long_name',
+                E_USER_ERROR, array(
+                    '{$name}' => $this->name, 
+                    '{$long_name}' => $this->long_name
+                ));
+        }
+        // check if we have a valid action
+        if (!is_string($this->action)) {
+            Console_CommandLine::triggerError('option_bad_action',
+                E_USER_ERROR, array('{$name}' => $this->name));
+        }
+        if (!isset(Console_CommandLine::$actions[$this->action])) {
+            Console_CommandLine::triggerError('option_unregistered_action',
+                E_USER_ERROR, array(
+                    '{$action}' => $this->action,
+                    '{$name}' => $this->name
+                ));
+        }
+        // if the action is a callback, check that we have a valid callback
+        if ($this->action == 'Callback' && !is_callable($this->callback)) {
+            Console_CommandLine::triggerError('option_invalid_callback',
+                E_USER_ERROR, array('{$name}' => $this->name));
+        }
+    }
+
+    // }}}
+    // setDefaults() {{{
+
+    /**
+     * Set the default value according to the configured action.
+     *
+     * Note that for backward compatibility issues this method is only called 
+     * when the 'force_options_defaults' is set to true, it will become the
+     * default behaviour in the next major release of Console_CommandLine.
+     *
+     * @return void
+     */
+    public function setDefaults()
+    {
+        if ($this->default !== null) {
+            // already set
+            return;
+        }
+        switch ($this->action) {
+        case 'Counter':
+        case 'StoreInt':
+            $this->default = 0;
+            break;
+        case 'StoreFloat':
+            $this->default = 0.0;
+            break;
+        case 'StoreArray':
+            $this->default = array();
+            break;
+        case 'StoreTrue':
+            $this->default = false;
+            break;
+        case 'StoreFalse':
+            $this->default = true;
+            break;
+        default:
+            return;
+        }
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Outputter.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Outputters common interface, all outputters must implement this interface.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+interface Console_CommandLine_Outputter
+{
+    // stdout() {{{
+
+    /**
+     * Processes the output for a message that should be displayed on STDOUT.
+     *
+     * @param string $msg The message to output
+     *
+     * @return void
+     */
+    public function stdout($msg);
+
+    // }}}
+    // stderr() {{{
+
+    /**
+     * Processes the output for a message that should be displayed on STDERR.
+     *
+     * @param string $msg The message to output
+     *
+     * @return void
+     */
+    public function stderr($msg);
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Outputter/Default.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,82 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * The Outputter interface.
+ */
+require_once 'Console/CommandLine/Outputter.php';
+
+/**
+ * Console_CommandLine default Outputter.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Outputter_Default implements Console_CommandLine_Outputter
+{
+    // stdout() {{{
+
+    /**
+     * Writes the message $msg to STDOUT.
+     *
+     * @param string $msg The message to output
+     *
+     * @return void
+     */
+    public function stdout($msg)
+    {
+        if (defined('STDOUT')) {
+            fwrite(STDOUT, $msg);
+        } else {
+            echo $msg;
+        }
+    }
+
+    // }}}
+    // stderr() {{{
+
+    /**
+     * Writes the message $msg to STDERR.
+     *
+     * @param string $msg The message to output
+     *
+     * @return void
+     */
+    public function stderr($msg)
+    {
+        if (defined('STDERR')) {
+            fwrite(STDERR, $msg);
+        } else {
+            echo $msg;
+        }
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Renderer.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,71 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Renderers common interface, all renderers must implement this interface.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+interface Console_CommandLine_Renderer
+{
+    // usage() {{{
+
+    /**
+     * Returns the full usage message.
+     *
+     * @return string The usage message
+     */
+    public function usage();
+
+    // }}}
+    // error() {{{
+
+    /**
+     * Returns a formatted error message.
+     *
+     * @param string $error The error message to format
+     *
+     * @return string The error string
+     */
+    public function error($error);
+
+    // }}}
+    // version() {{{
+
+    /**
+     * Returns the program version string.
+     *
+     * @return string The version string
+     */
+    public function version();
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Renderer/Default.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,430 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * The renderer interface.
+ */
+require_once 'Console/CommandLine/Renderer.php';
+
+/**
+ * Console_CommandLine default renderer.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Renderer_Default implements Console_CommandLine_Renderer
+{
+    // Properties {{{
+
+    /**
+     * Integer that define the max width of the help text.
+     *
+     * @var integer $line_width Line width
+     */
+    public $line_width = 75;
+
+    /**
+     * Integer that define the max width of the help text.
+     *
+     * @var integer $line_width Line width
+     */
+    public $options_on_different_lines = false;
+
+    /**
+     * An instance of Console_CommandLine.
+     *
+     * @var Console_CommandLine $parser The parser
+     */
+    public $parser = false;
+
+    // }}}
+    // __construct() {{{
+
+    /**
+     * Constructor.
+     *
+     * @param object $parser A Console_CommandLine instance
+     *
+     * @return void
+     */
+    public function __construct($parser = false) 
+    {
+        $this->parser = $parser;
+    }
+
+    // }}}
+    // usage() {{{
+
+    /**
+     * Returns the full usage message.
+     *
+     * @return string The usage message
+     */
+    public function usage()
+    {
+        $ret = '';
+        if (!empty($this->parser->description)) { 
+            $ret .= $this->description() . "\n\n";
+        }
+        $ret .= $this->usageLine() . "\n";
+        if (count($this->parser->commands) > 0) {
+            $ret .= $this->commandUsageLine() . "\n";
+        }
+        if (count($this->parser->options) > 0) {
+            $ret .= "\n" . $this->optionList() . "\n";
+        }
+        if (count($this->parser->args) > 0) {
+            $ret .= "\n" . $this->argumentList() . "\n";
+        }
+        if (count($this->parser->commands) > 0) {
+            $ret .= "\n" . $this->commandList() . "\n";
+        }
+        $ret .= "\n";
+        return $ret;
+    }
+    // }}}
+    // error() {{{
+
+    /**
+     * Returns a formatted error message.
+     *
+     * @param string $error The error message to format
+     *
+     * @return string The error string
+     */
+    public function error($error)
+    {
+        $ret = 'Error: ' . $error . "\n";
+        if ($this->parser->add_help_option) {
+            $name = $this->name();
+            $ret .= $this->wrap($this->parser->message_provider->get('PROG_HELP_LINE',
+                array('progname' => $name))) . "\n";
+            if (count($this->parser->commands) > 0) {
+                $ret .= $this->wrap($this->parser->message_provider->get('COMMAND_HELP_LINE',
+                    array('progname' => $name))) . "\n";
+            }
+        }
+        return $ret;
+    }
+
+    // }}}
+    // version() {{{
+
+    /**
+     * Returns the program version string.
+     *
+     * @return string The version string
+     */
+    public function version()
+    {
+        return $this->parser->message_provider->get('PROG_VERSION_LINE', array(
+            'progname' => $this->name(),
+            'version'  => $this->parser->version
+        )) . "\n";
+    }
+
+    // }}}
+    // name() {{{
+
+    /**
+     * Returns the full name of the program or the sub command
+     *
+     * @return string The name of the program
+     */
+    protected function name()
+    {
+        $name   = $this->parser->name;
+        $parent = $this->parser->parent;
+        while ($parent) {
+            if (count($parent->options) > 0) {
+                $name = '[' 
+                    . strtolower($this->parser->message_provider->get('OPTION_WORD',
+                          array('plural' => 's'))) 
+                    . '] ' . $name;
+            }
+            $name = $parent->name . ' ' . $name;
+            $parent = $parent->parent;
+        }
+        return $this->wrap($name);
+    }
+
+    // }}}
+    // description() {{{
+
+    /**
+     * Returns the command line description message.
+     *
+     * @return string The description message
+     */
+    protected function description()
+    {
+        return $this->wrap($this->parser->description);
+    }
+
+    // }}}
+    // usageLine() {{{
+
+    /**
+     * Returns the command line usage message
+     *
+     * @return string the usage message
+     */
+    protected function usageLine()
+    {
+        $usage = $this->parser->message_provider->get('USAGE_WORD') . ":\n";
+        $ret   = $usage . '  ' . $this->name();
+        if (count($this->parser->options) > 0) {
+            $ret .= ' [' 
+                . strtolower($this->parser->message_provider->get('OPTION_WORD'))
+                . ']';
+        }
+        if (count($this->parser->args) > 0) {
+            foreach ($this->parser->args as $name=>$arg) {
+                $arg_str = $arg->help_name;
+                if ($arg->multiple) {
+                    $arg_str .= '1 ' . $arg->help_name . '2 ...';
+                }
+                if ($arg->optional) {
+                    $arg_str = '[' . $arg_str . ']';
+                }
+                $ret .= ' ' . $arg_str;
+            }
+        }
+        return $this->columnWrap($ret, 2);
+    }
+
+    // }}}
+    // commandUsageLine() {{{
+
+    /**
+     * Returns the command line usage message for subcommands.
+     *
+     * @return string The usage line
+     */
+    protected function commandUsageLine()
+    {
+        if (count($this->parser->commands) == 0) {
+            return '';
+        }
+        $ret = '  ' . $this->name();
+        if (count($this->parser->options) > 0) {
+            $ret .= ' [' 
+                . strtolower($this->parser->message_provider->get('OPTION_WORD'))
+                . ']';
+        }
+        $ret       .= " <command>";
+        $hasArgs    = false;
+        $hasOptions = false;
+        foreach ($this->parser->commands as $command) {
+            if (!$hasArgs && count($command->args) > 0) {
+                $hasArgs = true;
+            }
+            if (!$hasOptions && ($command->add_help_option || 
+                $command->add_version_option || count($command->options) > 0)) {
+                $hasOptions = true;
+            }
+        }
+        if ($hasOptions) {
+            $ret .= ' [options]';
+        }
+        if ($hasArgs) {
+            $ret .= ' [args]';
+        }
+        return $this->columnWrap($ret, 2);
+    }
+
+    // }}}
+    // argumentList() {{{
+
+    /**
+     * Render the arguments list that will be displayed to the user, you can 
+     * override this method if you want to change the look of the list.
+     *
+     * @return string The formatted argument list
+     */
+    protected function argumentList()
+    {
+        $col  = 0;
+        $args = array();
+        foreach ($this->parser->args as $arg) {
+            $argstr = '  ' . $arg->toString();
+            $args[] = array($argstr, $arg->description);
+            $ln     = strlen($argstr);
+            if ($col < $ln) {
+                $col = $ln;
+            }
+        }
+        $ret = $this->parser->message_provider->get('ARGUMENT_WORD') . ":";
+        foreach ($args as $arg) {
+            $text = str_pad($arg[0], $col) . '  ' . $arg[1];
+            $ret .= "\n" . $this->columnWrap($text, $col+2);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // optionList() {{{
+
+    /**
+     * Render the options list that will be displayed to the user, you can 
+     * override this method if you want to change the look of the list.
+     *
+     * @return string The formatted option list
+     */
+    protected function optionList()
+    {
+        $col     = 0;
+        $options = array();
+        foreach ($this->parser->options as $option) {
+            $delim    = $this->options_on_different_lines ? "\n" : ', ';
+            $optstr   = $option->toString($delim);
+            $lines    = explode("\n", $optstr);
+            $lines[0] = '  ' . $lines[0];
+            if (count($lines) > 1) {
+                $lines[1] = '  ' . $lines[1];
+                $ln       = strlen($lines[1]);
+            } else {
+                $ln = strlen($lines[0]);
+            }
+            $options[] = array($lines, $option->description);
+            if ($col < $ln) {
+                $col = $ln;
+            }
+        }
+        $ret = $this->parser->message_provider->get('OPTION_WORD') . ":";
+        foreach ($options as $option) {
+            if (count($option[0]) > 1) {
+                $text = str_pad($option[0][1], $col) . '  ' . $option[1];
+                $pre  = $option[0][0] . "\n";
+            } else {
+                $text = str_pad($option[0][0], $col) . '  ' . $option[1];
+                $pre  = '';
+            }
+            $ret .= "\n" . $pre . $this->columnWrap($text, $col+2);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // commandList() {{{
+
+    /**
+     * Render the command list that will be displayed to the user, you can 
+     * override this method if you want to change the look of the list.
+     *
+     * @return string The formatted subcommand list
+     */
+    protected function commandList()
+    {
+
+        $commands = array();
+        $col      = 0;
+        foreach ($this->parser->commands as $cmdname=>$command) {
+            $cmdname    = '  ' . $cmdname;
+            $commands[] = array($cmdname, $command->description, $command->aliases);
+            $ln         = strlen($cmdname);
+            if ($col < $ln) {
+                $col = $ln;
+            }
+        }
+        $ret = $this->parser->message_provider->get('COMMAND_WORD') . ":";
+        foreach ($commands as $command) {
+            $text = str_pad($command[0], $col) . '  ' . $command[1];
+            if ($aliasesCount = count($command[2])) {
+                $pad = '';
+                $text .= ' (';
+                $text .= $aliasesCount > 1 ? 'aliases: ' : 'alias: ';
+                foreach ($command[2] as $alias) {
+                    $text .= $pad . $alias;
+                    $pad   = ', ';
+                }
+                $text .= ')';
+            }
+            $ret .= "\n" . $this->columnWrap($text, $col+2);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // wrap() {{{
+
+    /**
+     * Wraps the text passed to the method.
+     *
+     * @param string $text The text to wrap
+     * @param int    $lw   The column width (defaults to line_width property)
+     *
+     * @return string The wrapped text
+     */
+    protected function wrap($text, $lw=null)
+    {
+        if ($this->line_width > 0) {
+            if ($lw === null) {
+                $lw = $this->line_width;
+            }
+            return wordwrap($text, $lw, "\n", false);
+        }
+        return $text;
+    }
+
+    // }}}
+    // columnWrap() {{{
+
+    /**
+     * Wraps the text passed to the method at the specified width.
+     *
+     * @param string $text The text to wrap
+     * @param int    $cw   The wrap width
+     *
+     * @return string The wrapped text
+     */
+    protected function columnWrap($text, $cw)
+    {
+        $tokens = explode("\n", $this->wrap($text));
+        $ret    = $tokens[0];
+        $text   = trim(substr($text, strlen($ret)));
+        if (empty($text)) {
+            return $ret;
+        }
+
+        $chunks = $this->wrap($text, $this->line_width - $cw);
+        $tokens = explode("\n", $chunks);
+        foreach ($tokens as $token) {
+            if (!empty($token)) {
+                $ret .= "\n" . str_repeat(' ', $cw) . $token;
+            } else {
+                $ret .= "\n";
+            }
+        }
+        return $ret;
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/Result.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,71 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * A lightweight class to store the result of the command line parsing.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_Result
+{
+    // Public properties {{{
+
+    /**
+     * The result options associative array.
+     * Key is the name of the option and value its value.
+     *
+     * @var array $options Result options array
+     */
+    public $options = array();
+
+    /**
+     * The result arguments array.
+     *
+     * @var array $args Result arguments array
+     */
+    public $args = array();
+
+    /**
+     * Name of the command invoked by the user, false if no command invoked.
+     *
+     * @var string $command_name Result command name
+     */
+    public $command_name = false;
+
+    /**
+     * A result instance for the subcommand.
+     *
+     * @var Console_CommandLine_Result Result instance for the subcommand
+     */
+    public $command = false;
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/Console/CommandLine/XmlParser.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,318 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ * @filesource
+ */
+
+/**
+ * Required file
+ */
+require_once 'Console/CommandLine.php';
+
+/**
+ * Parser for command line xml definitions.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 0.1.0
+ */
+class Console_CommandLine_XmlParser
+{
+    // parse() {{{
+
+    /**
+     * Parses the given xml definition file and returns a
+     * Console_CommandLine instance constructed with the xml data.
+     *
+     * @param string $xmlfile The xml file to parse
+     *
+     * @return Console_CommandLine A parser instance
+     */
+    public static function parse($xmlfile)
+    {
+        if (!is_readable($xmlfile)) {
+            Console_CommandLine::triggerError('invalid_xml_file',
+                E_USER_ERROR, array('{$file}' => $xmlfile));
+        }
+        $doc = new DomDocument();
+        $doc->load($xmlfile);
+        self::validate($doc);
+        $nodes = $doc->getElementsByTagName('command');
+        $root  = $nodes->item(0);
+        return self::_parseCommandNode($root, true);
+    }
+
+    // }}}
+    // parseString() {{{
+
+    /**
+     * Parses the given xml definition string and returns a
+     * Console_CommandLine instance constructed with the xml data.
+     *
+     * @param string $xmlstr The xml string to parse
+     *
+     * @return Console_CommandLine A parser instance
+     */
+    public static function parseString($xmlstr)
+    {
+        $doc = new DomDocument();
+        $doc->loadXml($xmlstr);
+        self::validate($doc);
+        $nodes = $doc->getElementsByTagName('command');
+        $root  = $nodes->item(0);
+        return self::_parseCommandNode($root, true);
+    }
+
+    // }}}
+    // validate() {{{
+
+    /**
+     * Validates the xml definition using Relax NG.
+     *
+     * @param DomDocument $doc The document to validate
+     *
+     * @return boolean Whether the xml data is valid or not.
+     * @throws Console_CommandLine_Exception
+     * @todo use exceptions
+     */
+    public static function validate($doc)
+    {
+        $pkgRoot  = __DIR__ . '/../../';
+        $paths = array(
+            // PEAR/Composer
+            '@data_dir@/Console_CommandLine/data/xmlschema.rng',
+            // Composer
+            $pkgRoot . 'data/Console_CommandLine/data/xmlschema.rng',
+            $pkgRoot . 'data/console_commandline/data/xmlschema.rng',
+            // Git
+            $pkgRoot . 'data/xmlschema.rng',
+            'xmlschema.rng',
+        );
+
+        foreach ($paths as $path) {
+            if (is_readable($path)) {
+                return $doc->relaxNGValidate($path);
+            }
+        }
+        Console_CommandLine::triggerError(
+            'invalid_xml_file',
+            E_USER_ERROR, array('{$file}' => $rngfile));
+    }
+
+    // }}}
+    // _parseCommandNode() {{{
+
+    /**
+     * Parses the root command node or a command node and returns the
+     * constructed Console_CommandLine or Console_CommandLine_Command instance.
+     *
+     * @param DomDocumentNode $node       The node to parse
+     * @param bool            $isRootNode Whether it is a root node or not
+     *
+     * @return mixed Console_CommandLine or Console_CommandLine_Command
+     */
+    private static function _parseCommandNode($node, $isRootNode = false)
+    {
+        if ($isRootNode) {
+            $obj = new Console_CommandLine();
+        } else {
+            include_once 'Console/CommandLine/Command.php';
+            $obj = new Console_CommandLine_Command();
+        }
+        foreach ($node->childNodes as $cNode) {
+            $cNodeName = $cNode->nodeName;
+            switch ($cNodeName) {
+            case 'name':
+            case 'description':
+            case 'version':
+                $obj->$cNodeName = trim($cNode->nodeValue);
+                break;
+            case 'add_help_option':
+            case 'add_version_option':
+            case 'force_posix':
+                $obj->$cNodeName = self::_bool(trim($cNode->nodeValue));
+                break;
+            case 'option':
+                $obj->addOption(self::_parseOptionNode($cNode));
+                break;
+            case 'argument':
+                $obj->addArgument(self::_parseArgumentNode($cNode));
+                break;
+            case 'command':
+                $obj->addCommand(self::_parseCommandNode($cNode));
+                break;
+            case 'aliases':
+                if (!$isRootNode) {
+                    foreach ($cNode->childNodes as $subChildNode) {
+                        if ($subChildNode->nodeName == 'alias') {
+                            $obj->aliases[] = trim($subChildNode->nodeValue);
+                        }
+                    }
+                }
+                break;
+            case 'messages':
+                $obj->messages = self::_messages($cNode);
+                break;
+            default:
+                break;
+            }
+        }
+        return $obj;
+    }
+
+    // }}}
+    // _parseOptionNode() {{{
+
+    /**
+     * Parses an option node and returns the constructed
+     * Console_CommandLine_Option instance.
+     *
+     * @param DomDocumentNode $node The node to parse
+     *
+     * @return Console_CommandLine_Option The built option
+     */
+    private static function _parseOptionNode($node)
+    {
+        include_once 'Console/CommandLine/Option.php';
+        $obj = new Console_CommandLine_Option($node->getAttribute('name'));
+        foreach ($node->childNodes as $cNode) {
+            $cNodeName = $cNode->nodeName;
+            switch ($cNodeName) {
+            case 'choices':
+                foreach ($cNode->childNodes as $subChildNode) {
+                    if ($subChildNode->nodeName == 'choice') {
+                        $obj->choices[] = trim($subChildNode->nodeValue);
+                    }
+                }
+                break;
+            case 'messages':
+                $obj->messages = self::_messages($cNode);
+                break;
+            default:
+                if (property_exists($obj, $cNodeName)) {
+                    $obj->$cNodeName = trim($cNode->nodeValue);
+                }
+                break;
+            }
+        }
+        if ($obj->action == 'Password') {
+            $obj->argument_optional = true;
+        }
+        return $obj;
+    }
+
+    // }}}
+    // _parseArgumentNode() {{{
+
+    /**
+     * Parses an argument node and returns the constructed
+     * Console_CommandLine_Argument instance.
+     *
+     * @param DomDocumentNode $node The node to parse
+     *
+     * @return Console_CommandLine_Argument The built argument
+     */
+    private static function _parseArgumentNode($node)
+    {
+        include_once 'Console/CommandLine/Argument.php';
+        $obj = new Console_CommandLine_Argument($node->getAttribute('name'));
+        foreach ($node->childNodes as $cNode) {
+            $cNodeName = $cNode->nodeName;
+            switch ($cNodeName) {
+            case 'description':
+            case 'help_name':
+            case 'default':
+                $obj->$cNodeName = trim($cNode->nodeValue);
+                break;
+            case 'multiple':
+                $obj->multiple = self::_bool(trim($cNode->nodeValue));
+                break;
+            case 'optional':
+                $obj->optional = self::_bool(trim($cNode->nodeValue));
+                break;
+            case 'choices':
+                foreach ($cNode->childNodes as $subChildNode) {
+                    if ($subChildNode->nodeName == 'choice') {
+                        $obj->choices[] = trim($subChildNode->nodeValue);
+                    }
+                }
+                break;
+            case 'messages':
+                $obj->messages = self::_messages($cNode);
+                break;
+            default:
+                break;
+            }
+        }
+        return $obj;
+    }
+
+    // }}}
+    // _bool() {{{
+
+    /**
+     * Returns a boolean according to true/false possible strings.
+     *
+     * @param string $str The string to process
+     *
+     * @return boolean
+     */
+    private static function _bool($str)
+    {
+        return in_array(strtolower((string)$str), array('true', '1', 'on', 'yes'));
+    }
+
+    // }}}
+    // _messages() {{{
+
+    /**
+     * Returns an array of custom messages for the element
+     *
+     * @param DOMNode $node The messages node to process
+     *
+     * @return array an array of messages
+     *
+     * @see Console_CommandLine::$messages
+     * @see Console_CommandLine_Element::$messages
+     */
+    private static function _messages(DOMNode $node)
+    {
+        $messages = array();
+
+        foreach ($node->childNodes as $cNode) {
+            if ($cNode->nodeType == XML_ELEMENT_NODE) {
+                $name  = $cNode->getAttribute('name');
+                $value = trim($cNode->nodeValue);
+
+                $messages[$name] = $value;
+            }
+        }
+
+        return $messages;
+    }
+
+    // }}}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/README.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,55 @@
+*******************
+Console_CommandLine
+*******************
+A full featured command line options and arguments parser.
+
+``Console_CommandLine`` is a full featured package for managing command-line
+options and arguments highly inspired from python ``optparse`` module, it allows
+the developer to easily build complex command line interfaces.
+
+
+=============
+Main features
+=============
+* handles sub commands (ie. ``$ myscript.php -q subcommand -f file``),
+* can be completely built from an XML definition file,
+* generate ``--help`` and ``--version`` options automatically,
+* can be completely customized,
+* builtin support for i18n,
+* and much more...
+
+
+============
+Installation
+============
+
+PEAR
+====
+::
+
+    $ pear install Console_CommandLine
+
+
+Composer
+========
+::
+
+    $ composer require pear/console_commandline
+
+
+=====
+Links
+=====
+Homepage
+  http://pear.php.net/package/Console_CommandLine
+Bug tracker
+  http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine
+Documentation
+  http://pear.php.net/manual/en/package.console.console-commandline.php
+Unit test status
+  https://travis-ci.org/pear/Console_CommandLine
+
+  .. image:: https://travis-ci.org/pear/Console_CommandLine.svg?branch=stable
+     :target: https://travis-ci.org/pear/Console_CommandLine
+Packagist
+  https://packagist.org/packages/pear/console_commandline
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+{
+    "name": "pear/console_commandline",
+    "description": "A full featured command line options and arguments parser.",
+    "type": "library",
+    "keywords": [
+        "console"
+    ],
+    "homepage": "https://github.com/pear/Console_CommandLine",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Richard Quadling",
+            "email": "rquadling@gmail.com"
+        },
+        {
+            "name": "David Jean Louis",
+            "email": "izimobil@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "pear/pear_exception": "^1.0.0",
+        "ext-dom": "*",
+        "ext-xml": "*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Console": "./"
+        }
+    },
+    "include-path": [
+        ""
+    ],
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine",
+        "source": "https://github.com/pear/Console_CommandLine"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "*"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/data/xmlschema.rng	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- 
+  This is the RNG file for validating Console_CommandLine xml definitions.
+
+  Author  : David JEAN LOUIS
+  Licence : MIT License
+  Version : CVS: $Id$
+-->
+
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" 
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <!-- structure -->
+  <start>
+      <ref name="ref_command"/>
+  </start>
+
+  <!-- Command node -->
+  <define name="ref_command_subcommand_common">
+    <interleave>
+      <optional>
+        <element name="name">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <element name="description">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <element name="version">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <element name="add_help_option">
+          <ref name="ref_bool_choices"/>
+        </element>
+      </optional>
+      <optional>
+        <element name="add_version_option">
+          <ref name="ref_bool_choices"/>
+        </element>
+      </optional>
+      <optional>
+        <element name="force_posix">
+          <ref name="ref_bool_choices"/>
+        </element>
+      </optional>
+      <optional>
+        <ref name="ref_messages_common"/>
+      </optional>
+      <zeroOrMore>
+        <ref name="ref_option"/>
+      </zeroOrMore>
+      <zeroOrMore>
+        <ref name="ref_argument"/>
+      </zeroOrMore>
+      <zeroOrMore>
+        <ref name="ref_subcommand"/>
+      </zeroOrMore>
+    </interleave>
+  </define>
+
+  <!-- command element -->
+
+  <define name="ref_command">
+    <element name="command">
+      <interleave>
+        <ref name="ref_command_subcommand_common"/>
+      </interleave>
+    </element>
+  </define>
+
+  <!-- subcommand element -->
+
+  <define name="ref_subcommand">
+    <element name="command">
+      <interleave>
+        <ref name="ref_command_subcommand_common"/>
+        <optional>
+          <element name="aliases">
+            <zeroOrMore>
+              <element name="alias">
+                <text/>
+              </element>
+            </zeroOrMore>
+          </element>
+        </optional>
+      </interleave>
+    </element>
+  </define>
+
+  <!-- custom messages common element -->
+
+  <define name="ref_messages_common">
+    <element name="messages">
+      <oneOrMore>
+        <element name="message">
+          <attribute name="name">
+            <data type="string"/>
+          </attribute>
+          <text/>
+        </element>
+      </oneOrMore>
+    </element>
+  </define>
+
+  <!-- options and arguments common elements -->
+
+  <define name="ref_option_argument_common">
+    <interleave>
+      <optional>
+        <element name="description">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <element name="help_name">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <element name="default">
+          <text/>
+        </element>
+      </optional>
+      <optional>
+        <ref name="ref_messages_common"/>
+      </optional>
+    </interleave>
+  </define>
+
+  <!-- Option node -->
+  <define name="ref_option">
+    <element name="option">
+      <attribute name="name">
+        <data type="string"/>
+      </attribute>
+      <interleave>
+        <optional>
+          <element name="short_name">
+            <text/>
+          </element>
+        </optional>
+        <optional>
+          <element name="long_name">
+            <text/>
+          </element>
+        </optional>
+        <ref name="ref_option_argument_common"/>
+        <optional>
+          <element name="action">
+            <text/>
+          </element>
+        </optional>
+        <optional>
+          <element name="choices">
+            <zeroOrMore>
+              <element name="choice">
+                <text/>
+              </element>
+            </zeroOrMore>
+          </element>
+        </optional>
+        <optional>
+          <element name="add_list_option">
+            <ref name="ref_bool_choices"/>
+          </element>
+        </optional>
+      </interleave>
+    </element>
+  </define>
+
+  <!-- Argument node -->
+  <define name="ref_argument">
+    <element name="argument">
+      <attribute name="name">
+        <data type="string"/>
+      </attribute>
+      <interleave>
+        <ref name="ref_option_argument_common"/>
+        <optional>
+          <element name="multiple">
+            <ref name="ref_bool_choices"/>
+          </element>
+        </optional>
+        <optional>
+          <element name="optional">
+            <ref name="ref_bool_choices"/>
+          </element>
+        </optional>
+        <optional>
+          <element name="choices">
+            <zeroOrMore>
+              <element name="choice">
+                <text/>
+              </element>
+            </zeroOrMore>
+           </element>
+         </optional>
+      </interleave>
+    </element>
+  </define>
+
+  <!-- boolean choices -->
+  <define name="ref_bool_choices">
+    <choice>
+      <data type="token">
+        <param name="pattern">[Tt][Rr][Uu][Ee]</param>
+      </data>
+      <data type="token">
+        <param name="pattern">[On][Nn]</param>
+      </data>
+      <data type="token">
+        <param name="pattern">[Yy][Ee][Ss]</param>
+      </data>
+      <value>1</value>
+      <data type="token">
+        <param name="pattern">[Ff][Aa][Ll][Ss][Ee]</param>
+      </data>
+      <data type="token">
+        <param name="pattern">[Of][Ff][Ff]</param>
+      </data>
+      <data type="token">
+        <param name="pattern">[Nn][Oo]</param>
+      </data>
+      <value>0</value>
+    </choice>
+  </define>
+
+</grammar>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex1.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,74 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * A simple example demonstrating the basic features of the Console_CommandLine
+ * package.
+ * In this example we create a program that simply zip a set of files.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+
+// Include the Console_CommandLine package.
+require_once 'Console/CommandLine.php';
+
+// create the parser
+$parser = new Console_CommandLine(array(
+    'description' => 'zip given files using the php zip module.',
+    'version'     => '1.0.0'
+));
+
+// add an option to make the program verbose
+$parser->addOption('verbose', array(
+    'short_name'  => '-v',
+    'long_name'   => '--verbose',
+    'action'      => 'StoreTrue',
+    'description' => 'turn on verbose output'
+));
+
+// add an option to delete original files after zipping
+$parser->addOption('delete', array(
+    'short_name'  => '-d',
+    'long_name'   => '--delete',
+    'action'      => 'StoreString',
+    'description' => 'delete original files after zip operation',
+    'choices'     => array('foo', 'bar'),
+    'add_list_option' => true
+));
+
+// add the files argument, the user can specify one or several files
+$parser->addArgument('files', array(
+    'multiple' => true,
+    'description' => 'list of files to zip separated by spaces'
+));
+
+// add the zip file name argument
+$parser->addArgument('zipfile', array('description' => 'zip file name'));
+
+// run the parser
+try {
+    $result = $parser->parse();
+    // write your program here...
+    print_r($result->options);
+    print_r($result->args);
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex2.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,45 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * This example demonstrate the use of xml definitions files with 
+ * Console_CommandLine, the result is the same as for the ex1.php file.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+
+// Include the Console_CommandLine package.
+require_once 'Console/CommandLine.php';
+
+// create the parser from xml file
+$xmlfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ex2.xml';
+$parser  = Console_CommandLine::fromXmlFile($xmlfile);
+
+
+// run the parser
+try {
+    $result = $parser->parse();
+    // write your program here...
+    print_r($result->options);
+    print_r($result->args);
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex2.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<command>
+    <description>zip given files using the php zip module.</description>
+    <version>1.0.0</version>
+    <option name="choice">
+        <short_name>-c</short_name>
+        <long_name>--choice</long_name>
+        <description>choice option</description>
+        <action>StoreString</action>
+        <choices>
+            <choice>ham</choice>
+            <choice>spam</choice>
+        </choices>
+    </option>
+    <option name="verbose">
+        <short_name>-v</short_name>
+        <long_name>--verbose</long_name>
+        <description>turn on verbose output</description>
+        <action>StoreTrue</action>
+    </option>
+    <option name="delete">
+        <short_name>-d</short_name>
+        <long_name>--delete</long_name>
+        <description>delete original files after zip operation</description>
+        <action>StoreTrue</action>
+    </option>
+    <argument name="files">
+        <description>a list of files to zip together</description>
+        <multiple>true</multiple>
+    </argument>
+    <argument name="zipfile">
+        <description>path to the zip file to generate</description>
+    </argument>
+</command>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex3.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,89 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * A simple example demonstrating the use of subcommands.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+
+// Include the Console_CommandLine package.
+require_once 'Console/CommandLine.php';
+
+// create the parser
+$parser = new Console_CommandLine(array(
+    'description' => 'A great program that can foo and bar !',
+    'version'     => '1.0.0'
+));
+
+// add a global option to make the program verbose
+$parser->addOption('verbose', array(
+    'short_name'  => '-v',
+    'long_name'   => '--verbose',
+    'action'      => 'StoreTrue',
+    'description' => 'turn on verbose output'
+));
+
+// add the foo subcommand
+$foo_cmd = $parser->addCommand('foo', array(
+    'description' => 'output the given string with a foo prefix'
+));
+$foo_cmd->addOption('reverse', array(
+    'short_name'  => '-r',
+    'long_name'   => '--reverse',
+    'action'      => 'StoreTrue',
+    'description' => 'reverse the given string before echoing it'
+));
+$foo_cmd->addArgument('text', array(
+    'description' => 'the text to output'
+));
+
+// add the bar subcommand with a "baz" alias
+$bar_cmd = $parser->addCommand('bar', array(
+    'description' => 'output the given string with a bar prefix',
+    'aliases'     => array('baz'),
+));
+$bar_cmd->addOption('reverse', array(
+    'short_name'  => '-r',
+    'long_name'   => '--reverse',
+    'action'      => 'StoreTrue',
+    'description' => 'reverse the given string before echoing it'
+));
+$bar_cmd->addArgument('text', array(
+    'description' => 'the text to output'
+));
+
+// run the parser
+try {
+    $result = $parser->parse();
+    if ($result->command_name) {
+        $st = $result->command->options['reverse'] 
+            ? strrev($result->command->args['text'])
+            : $result->command->args['text'];
+        if ($result->command_name == 'foo') { 
+            echo "Foo says: $st\n";
+        } else if ($result->command_name == 'bar') {
+            echo "Bar says: $st\n";
+        }
+    }
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex4.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * A simple example demonstrating the use of subcommands.
+ * (Same as ex3.php but using an xml file).
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+
+// Include the Console_CommandLine package.
+require_once 'Console/CommandLine.php';
+
+// create the parser
+$xmlfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ex4.xml';
+$parser  = Console_CommandLine::fromXmlFile($xmlfile);
+
+// run the parser
+try {
+    $result = $parser->parse();
+    if ($result->command_name) {
+        $st = $result->command->options['reverse'] 
+            ? strrev($result->command->args['text'])
+            : $result->command->args['text'];
+        if ($result->command_name == 'foo') { 
+            echo "Foo says: $st\n";
+        } else if ($result->command_name == 'bar') {
+            echo "Bar says: $st\n";
+        }
+    }
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex4.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<command>
+    <description>A great program that can foo and bar !</description>
+    <version>1.0.0</version>
+    <option name="verbose">
+        <short_name>-v</short_name>
+        <long_name>--verbose</long_name>
+        <description>turn on verbose output</description>
+        <action>StoreTrue</action>
+    </option>
+    <command>
+        <name>foo</name>
+        <description>output the given string with a foo prefix</description>
+        <option name="reverse">
+            <short_name>-r</short_name>
+            <long_name>--reverse</long_name>
+            <description>reverse the string before echoing it</description>
+            <action>StoreTrue</action>
+        </option>
+        <argument name="text">
+            <description>the text to output</description>
+        </argument>
+    </command>
+    <command>
+        <name>bar</name>
+        <description>output the given string with a bar prefix</description>
+        <option name="reverse">
+            <short_name>-r</short_name>
+            <long_name>--reverse</long_name>
+            <description>reverse the string before echoing it</description>
+            <action>StoreTrue</action>
+        </option>
+        <argument name="text">
+            <description>the text to output</description>
+        </argument>
+    </command>
+</command>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex5.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * A simple example demonstrating the use of choices argument validation.
+ *
+ * PHP version 5
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    Laurent Laville <pear@laurent-laville.org>
+ * @link      http://pear.php.net/package/Console_CommandLine
+ */
+
+// Include the Console_CommandLine package.
+require_once 'Console/CommandLine.php';
+
+// create the parser
+$xmlfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ex5.xml';
+$parser  = Console_CommandLine::fromXmlFile($xmlfile);
+
+// run the parser
+try {
+    $result = $parser->parse();
+    if ($result->command_name) {
+        $st = implode(', ', $result->command->args['item']);
+        echo "List says: $st\n";
+    }
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/docs/examples/ex5.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<command>
+    <description>A great program that can list foo elements !</description>
+    <version>1.0.0</version>
+    <option name="verbose">
+        <short_name>-v</short_name>
+        <long_name>--verbose</long_name>
+        <description>turn on verbose output</description>
+        <action>StoreTrue</action>
+    </option>
+    <command>
+        <name>list</name>
+        <description>output the list of foo elements</description>
+        <argument name="item">
+            <description>May be either "foo", "bar", "baz"</description>
+            <multiple>true</multiple>
+            <choices>
+                <choice>foo</choice>
+                <choice>bar</choice>
+                <choice>baz</choice>
+            </choices>
+        </argument>
+    </command>
+</command>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.6.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Console_CommandLine</name>
+ <channel>pear.php.net</channel>
+ <summary>A full featured command line options and arguments parser</summary>
+ <description>Console_CommandLine is a full featured package for managing command-line 
+options and arguments highly inspired from python optparse module, it allows 
+the developer to easily build complex command line interfaces.
+
+Main features:
+  * handles sub commands (ie. $ myscript.php -q subcommand -f file),
+  * can be completely built from an xml definition file,
+  * generate --help and --version options automatically,
+  * can be completely customized,
+  * builtin support for i18n,
+  * and much more...</description>
+ <lead>
+  <name>David JEAN LOUIS</name>
+  <user>izi</user>
+  <email>izimobil@gmail.com</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Richard Quadling</name>
+  <user>rquadling</user>
+  <email>rquadling@gmail.com</email>
+  <active>yes</active>
+ </lead>
+ <date>2016-07-14</date>
+ <version>
+  <release>1.2.2</release>
+  <api>1.2.2</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+
+ <notes>
+  * Fix bug #21063: xmlschema.rng location does not work with composer [alec]
+ </notes>
+
+ <contents>
+  <dir baseinstalldir="" name="/">
+   <file name="Console/CommandLine/Action.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Argument.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Command.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/CustomMessageProvider.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Element.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Exception.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/MessageProvider.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Option.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Outputter.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Renderer.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Result.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/XmlParser.php" role="php">
+    <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/Callback.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/Counter.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/Help.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/List.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/Password.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreArray.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreFalse.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreFloat.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreInt.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreString.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/StoreTrue.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Action/Version.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/MessageProvider/Default.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Outputter/Default.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine/Renderer/Default.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="data/xmlschema.rng" role="data">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex1.php" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex2.php" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex2.xml" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex3.php" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex4.php" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex4.xml" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex5.php" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="docs/examples/ex5.xml" role="doc">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="tests/AllTests.php" role="test">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="tests/console_commandline_accept.phpt" role="test"/>
+   <file name="tests/console_commandline_addargument.phpt" role="test"/>
+   <file name="tests/console_commandline_addargument_2.phpt" role="test"/>
+   <file name="tests/console_commandline_addcommand.phpt" role="test"/>
+   <file name="tests/console_commandline_addcommand_2.phpt" role="test"/>
+   <file name="tests/console_commandline_addcommand_3.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_1.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_2.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_3.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_4.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_5.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_6.phpt" role="test"/>
+   <file name="tests/console_commandline_addoption_errors_7.phpt" role="test"/>
+   <file name="tests/console_commandline_bug18682.phpt" role="test"/>
+   <file name="tests/console_commandline_fromxmlfile.phpt" role="test"/>
+   <file name="tests/console_commandline_fromxmlfile_1.phpt" role="test"/>
+   <file name="tests/console_commandline_fromxmlfile_2.phpt" role="test"/>
+   <file name="tests/console_commandline_fromxmlfile_error.phpt" role="test"/>
+   <file name="tests/console_commandline_fromxmlstring.phpt" role="test"/>
+   <file name="tests/console_commandline_options_defaults.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_1.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_2.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_3.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_4.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_5.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_6.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_7.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_8.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_9.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_10.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_11.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_12.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_13.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_14.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_15.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_16.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_17.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_18.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_19.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_20.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_21.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_22.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_23.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_24.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_25.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_26.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_27.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_28.phpt" role="test"/>
+   <file name="tests/console_commandline_parse_29.phpt" role="test"/>
+   <file name="tests/console_commandline_webrequest_1.phpt" role="test"/>
+   <file name="tests/console_commandline_webrequest_2.phpt" role="test"/>
+   <file name="tests/console_commandline_webrequest_3.phpt" role="test"/>
+   <file name="tests/test.xml" role="test"/>
+   <file name="tests/tests.inc.php" role="test">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <file name="Console/CommandLine.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+  </dir>
+ </contents>
+
+ <dependencies>
+  <required>
+   <php>
+    <min>5.3.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.0b1</min>
+   </pearinstaller>
+   <extension>
+    <name>dom</name>
+   </extension>
+   <extension>
+    <name>xml</name>
+   </extension>
+  </required>
+ </dependencies>
+
+ <phprelease />
+
+ <changelog>
+  <release>
+   <date>2007-12-19</date>
+   <version>
+    <release>0.1.0</release>
+    <api>0.1.0</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>alpha</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>Initial release.</notes>
+  </release>
+  <release>
+   <date>2007-12-21</date>
+   <version>
+    <release>0.1.1</release>
+    <api>0.1.1</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>alpha</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>* bugs
+  - fixed bug #12711,
+  - fixed wrong error triggered when argument name is invalid.
+
+* changes
+  - some cosmetic changes,
+  - added a lot of phpt test files.</notes>
+  </release>
+  <release>
+   <date>2008-01-09</date>
+   <version>
+    <release>0.2.0</release>
+    <api>0.2.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>- fixed a bug in Option::toString() (values were not displayed for short options),
+- fixed a parsing bug: if &quot;-&quot; is passed on the command line it should be treated as an argument,
+- stop option parsing when a &quot;--&quot; is found as gnu getopt does,
+- added a &quot;force_posix&quot; boolean attribute that tells the parser to be POSIX compliant, POSIX demands the following behavior: the first non-option stops option processing,
+- added more regression tests.</notes>
+  </release>
+  <release>
+   <date>2008-01-09</date>
+   <version>
+    <release>0.2.1</release>
+    <api>0.2.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>fixed bug #12859: xmlschema.rng gets searched at the wrong folder</notes>
+  </release>
+  <release>
+   <date>2008-01-18</date>
+   <version>
+    <release>1.0.0RC1</release>
+    <api>1.0.0RC1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>- fixed a missing check when a short option require an argument and is the last
+  in the argv array,
+- more GNU getopt compliance: long option/argument can also be separated by a
+  space now and long options abbreviations are supported,
+- added a &quot;Password&quot; action: with this action it is possible to specify a
+  password on the command line, and if it is missing it will be prompted to
+  user (and will not be echo on stdin on UNIX systems),
+- allow &quot;force_posix&quot; option to be passed to the constructor,
+- added more tests.</notes>
+  </release>
+  <release>
+   <date>2008-03-10</date>
+   <version>
+    <release>1.0.0RC2</release>
+    <api>1.0.0RC2</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.example.com">MIT License</license>
+   <notes>- allow &quot;force_posix&quot; option to be passed to the constructor;
+- fixed bug #13038 changed the signature of the parse method to allow the 
+  developer to pass argc and argv array (instead of using $_SERVER values);
+- fixed bug #13132 : &quot;choices&quot; not supported in xml definition (also added 
+  &quot;force_posix&quot; attribute support in xml).</notes>
+  </release>
+  <release>
+   <date>2008-03-12</date>
+   <version>
+    <release>1.0.0RC3</release>
+    <api>1.0.0RC3</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>- fixed a strict standards notice: Console_CommandLine_Exception::build() should be static;
+- changed behaviour when a StoreArray option is positioned at the end;
+- now use pfm (so removed package.php and package2.xml).</notes>
+  </release>
+  <release>
+   <date>2008-03-12</date>
+   <version>
+    <release>1.0.0RC3</release>
+    <api>1.0.0RC3</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>- fixed a strict standards notice: Console_CommandLine_Exception::build() should be static;
+- changed behaviour when a StoreArray option is positioned at the end;
+- now use pfm (so removed package.php and package2.xml).</notes>
+  </release>
+  <release>
+   <date>2008-05-22</date>
+   <version>
+    <release>1.0.0</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>- doc is now in peardoc format (thanks to cweiske for his precious help);
+- better handling of custom instances (added an accept() method);
+- added an AllTests.php file to make phpunit happy;
+- added tests for xml usage;
+- some cosmetic changes.</notes>
+  </release>
+  <release>
+   <date>2008-08-01</date>
+   <version>
+    <release>1.0.1</release>
+    <api>1.0.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>- Better code coverage of tests (nearly 100%);
+- fixed two bad include_once;
+- fixed bug #14435 (own -h short option doesn't remove help short option) and did the same for "version" option;
+- fixed bug #14436 (Typo in error message) and some fixed other typos.
+   </notes>
+  </release>
+  <release>
+   <date>2008-08-22</date>
+   <version>
+    <release>1.0.2</release>
+    <api>1.0.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+- fixed bug #14454 (Console_Commandline hangs when called via browser);
+- fixed outputter bug (STDOUT/STDERR not defined with php-cgi);
+- Console_CommandLine can now handle web requests (it convert automatically a request to options/arguments).
+   </notes>
+  </release>
+  <release>
+   <date>2008-09-30</date>
+   <version>
+    <release>1.0.3</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+- now handles stdin with the "-" special switch;
+- fixed bug #14717 (Password not optional when parser built from an xml file);
+- added relevant unit tests;
+- removed useless require_once's in some tests.
+   </notes>
+  </release>
+  <release>
+   <date>2008-10-09</date>
+   <version>
+    <release>1.0.4</release>
+    <api>1.0.4</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+- implemented feature request #14753 (add_list_option parameter for --list-XXX option);
+- fixed bug #14762 (error message always tells me to use "-h" for help);
+- added relevant unit tests;
+- cleaned up phpdoc tags and some cosmetic changes.
+   </notes>
+  </release>
+  <release>
+   <date>2008-12-06</date>
+   <version>
+    <release>1.0.5</release>
+    <api>1.0.5</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+* implemented feature request #15251: Allow specifying optional arguments for
+  sub-commands,
+* use "name" instead of "help_name" when generating list-xxx options,
+* updated relevant unit tests,
+* added examples for sub-commands usage.
+   </notes>
+  </release>
+  <release>
+   <date>2008-12-26</date>
+   <version>
+    <release>1.0.6</release>
+    <api>1.0.6</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+Bugfix release:
+* fixed bug #15374 (RelaxNG validation should be less strict);
+* fixed bug #15375 (Cannot add a comment before the root node of the xml file);
+* fixed bug #15376 (short option and long options in separated lines in help);
+* fixed bug #15377 (StoreFalse/True actions should have a boolean default value);
+* added relevant unit tests.
+   </notes>
+  </release>
+  <release>
+   <date>2009-06-19</date>
+   <version>
+    <release>1.1.0</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+* changed sources layout to make easier to use / run tests without installing the package with pear
+* implemented subcommand aliases (as requested by Greg for pyrus)
+* implemented request #15325: add ability to detect missing sub-command (patch by gauthierm, thanks)
+* implemented request #15324: add ability to set custom error messages (patch by gauthierm, thanks)
+* fixed bug #16320: storeArray default value not cleared when options arguments given (patch by Richard Quadling, thanks!)
+* fixed bug #16329: sub command aliases do not work (was a "too early documentation" issue)
+* fixed bug #16330: nested subCommands help output not quite right
+* implemented request #16332: add support for optional arguments in XML (patch by gauthierm, thanks)
+   </notes>
+  </release>
+  <release>
+   <date>2009-11-11</date>
+   <version>
+    <release>1.1.1</release>
+    <api>1.1.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+Bugfix release:
+* fixed bug #16507: typo in code example (thanks Richard)
+* fixed bug #16497: cascade command properties to sub-commands
+* fixed bug #16370: allow pre-processing of arguments for list (thanks rquadling for the patch)
+* fixed bug #16764: Invalid Package.xml (thanks mklappstuhl for the patch)
+* fixed some test cases
+   </notes>
+  </release>
+  <release>
+   <date>2010-04-10</date>
+   <version>
+    <release>1.1.2</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+Bugfix release:
+* fixed bug #16848: Trailing spaces in quoted argument are truncated,
+* fixed bug #16849: Replaced $_GET by $_REQUEST to handle POST correctly, 
+* fixed bug #16850: Parse9 test (password) fails (on windows),
+* fixed bug #16914: Password action now operates as expected when it is the last parameter or the last parameter before a command,
+* displayUsage() should output to stdout instead of stderr,
+* added the possibility to pass "false" as exitCode to the display*() methods to prevent exit() calls,
+* fixed some typos in code comments.
+   </notes>
+  </release>
+  <release>
+   <date>2010-04-10</date>
+   <version>
+    <release>1.1.3</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+* fixed package.xml to allow installation via pyrus.
+   </notes>
+  </release>
+  <release>
+   <date>2012-10-25</date>
+   <version>
+    <release>1.2.0</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+  * Implemented feature request #18583 (default values for arguments) [izi]
+  * Implemented feature request #18582 (add possibility to require a subcommand) [izi]
+  * Booleans read from an XML file or string are now case insensitive [rquadling]
+  * Fixed unit tests [CloCkWeRX]
+  * arguments now accept "choices" [izi, thanks Laurent Laville]
+   </notes>
+  </release>
+
+  <release>
+   <date>2015-12-10</date>
+   <version>
+    <release>1.2.1</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+    * Fixed bug #18397: List action example is wrong [cweiske]
+    * Fixed bug #18682: columnWrap() in refault renderer eats up lines with only a EOL [izi, thanks Helgi]
+    * Fixed bug #18703: No way to override reading of stdin with - [izi, thanks Gwynne Raskind]
+    * Fixed bug #19683: Unit tests are broken [farell]
+    * Fixed bug #19921: package dependencies don't include dom [cweiske]
+    * Fixed unit tests [izi]
+    * Fixed comparison on PHP 7 [Jan Olsen]
+    * Allow multiple instances of the parser by making static variables private [Greg Oriol]
+    * Add composer support
+   </notes>
+  </release>
+
+  <release>
+   <date>2016-07-14</date>
+   <version>
+    <release>1.2.2</release>
+    <api>1.2.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+   <notes>
+    * Fix bug #21063: xmlschema.rng location does not work with composer [alec]
+   </notes>
+  </release>
+
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/AllTests.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,83 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 1.0.0
+ */
+
+if (!defined('PHPUnit_MAIN_METHOD')) {
+    define('PHPUnit_MAIN_METHOD', 'Console_CommandLine_AllTests::main');
+}
+
+if ($fp = @fopen('PHPUnit/Autoload.php', 'r', true)) {
+    require_once 'PHPUnit/Autoload.php';
+} elseif ($fp = @fopen('PHPUnit/Framework.php', 'r', true)) {
+    require_once 'PHPUnit/Framework.php';
+} else {
+    die("skip could not find PHPUnit");
+}
+fclose($fp);
+
+/**
+ * Console_CommandLine phpt test suite.
+ *
+ * Run all tests from the package root directory:
+ * $ phpunit Console_CommandLine_AllTests tests/AllTests.php
+ * or
+ * $ php tests/AllTests.php
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     Class available since release 1.0.0
+ */
+class Console_CommandLine_AllTests
+{
+    /**
+     * Runs the test suite
+     *
+     * @return void
+     * @static
+     */
+    public static function main()
+    {
+        PHPUnit_TextUI_TestRunner::run(self::suite());
+    }
+
+    /**
+     * Return the phpt test suite
+     *
+     * @return object the PHPUnit_Framework_TestSuite object
+     * @static
+     */
+    public static function suite()
+    {
+        return new PHPUnit_Extensions_PhptTestSuite(dirname(__FILE__));
+    }
+}
+
+if (PHPUnit_MAIN_METHOD == 'Console_CommandLine_AllTests::main') {
+    Console_CommandLine_AllTests::main();
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_accept.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+--TEST--
+Test for Console_CommandLine::accept() method.
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+try {
+    // custom renderer
+    $parser->accept(new CustomRenderer());
+    echo get_class($parser->renderer) . "\n";
+    // outputter
+    $parser->accept(new CustomOutputter());
+    echo get_class($parser->outputter) . "\n";
+    $parser->accept(new CustomMessageProvider());
+    echo get_class($parser->message_provider) . "\n";
+    $parser->accept(new stdclass());
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+CustomRenderer
+CustomOutputter
+CustomMessageProvider
+STDERR >> CustomRenderer::error(INVALID_CUSTOM_INSTANCE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addargument.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,115 @@
+--TEST--
+Test for Console_CommandLine::addArgument() method.
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addArgument('arg1');
+$parser->addArgument('arg2', array(
+    'multiple' => true,
+    'description' => 'description of arg2'
+));
+$arg3 = new Console_CommandLine_Argument('arg3', array(
+    'multiple' => true,
+    'description' => 'description of arg3'    
+));
+$parser->addArgument($arg3);
+$parser->addArgument('arg4', array('optional' => true));
+
+var_dump($parser->args);
+
+// a bad argument
+$parser->addArgument('Some invalid name');
+
+?>
+--EXPECTF--
+array(4) {
+  ["arg1"]=>
+  object(Console_CommandLine_Argument)#%d (8) {
+    ["multiple"]=>
+    bool(false)
+    ["optional"]=>
+    bool(false)
+    ["choices"]=>
+    array(0) {
+    }
+    ["name"]=>
+    string(4) "arg1"
+    ["help_name"]=>
+    string(4) "arg1"
+    ["description"]=>
+    NULL
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["arg2"]=>
+  object(Console_CommandLine_Argument)#%d (8) {
+    ["multiple"]=>
+    bool(true)
+    ["optional"]=>
+    bool(false)
+    ["choices"]=>
+    array(0) {
+    }
+    ["name"]=>
+    string(4) "arg2"
+    ["help_name"]=>
+    string(4) "arg2"
+    ["description"]=>
+    string(19) "description of arg2"
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["arg3"]=>
+  object(Console_CommandLine_Argument)#%d (8) {
+    ["multiple"]=>
+    bool(true)
+    ["optional"]=>
+    bool(false)
+    ["choices"]=>
+    array(0) {
+    }
+    ["name"]=>
+    string(4) "arg3"
+    ["help_name"]=>
+    string(4) "arg3"
+    ["description"]=>
+    string(19) "description of arg3"
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["arg4"]=>
+  object(Console_CommandLine_Argument)#%d (8) {
+    ["multiple"]=>
+    bool(false)
+    ["optional"]=>
+    bool(true)
+    ["choices"]=>
+    array(0) {
+    }
+    ["name"]=>
+    string(4) "arg4"
+    ["help_name"]=>
+    string(4) "arg4"
+    ["description"]=>
+    NULL
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+}
+
+Fatal error: argument name must be a valid php variable name (got: Some invalid name) in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addargument_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+--TEST--
+Test for Console_CommandLine::addArgument() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+foo
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addArgument('arg1');
+$parser->addArgument('arg2', array(
+    'optional' => true,
+    'default' => 'bar'
+));
+
+$result = $parser->parse();
+echo $result->args['arg1'] . ' ' . $result->args['arg2'];
+
+// a bad argument
+$parser->addArgument('arg3', array('default' => 'baz'));
+
+?>
+--EXPECTF--
+foo bar
+Fatal error: only optional arguments can have a default value in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addcommand.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+--TEST--
+Test for Console_CommandLine::addCommand() method.
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addCommand('cmd1');
+$parser->addCommand('cmd2', array(
+    'description' => 'description of cmd2'
+));
+$cmd3 = new Console_CommandLine_Command(array(
+    'name' => 'cmd3',
+    'description' => 'description of cmd3'    
+));
+$parser->addCommand($cmd3);
+
+var_dump(array_keys($parser->commands));
+var_dump($parser->commands['cmd2']->description);
+var_dump($parser->commands['cmd3']->description);
+
+?>
+--EXPECT--
+array(3) {
+  [0]=>
+  string(4) "cmd1"
+  [1]=>
+  string(4) "cmd2"
+  [2]=>
+  string(4) "cmd3"
+}
+string(19) "description of cmd2"
+string(19) "description of cmd3"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addcommand_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+--TEST--
+Test for Console_CommandLine::addCommand() method.
+--ARGS--
+cmd1 --help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->renderer->line_width = 30;
+$parser->addCommand('cmd1', array(
+    'description' => '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
+));
+$parser->parse();
+
+?>
+--EXPECTF--
+
+1 2 3 4 5 6 7 8 9 10 11 12 13
+14 15 16 17 18 19 20 21 22 23
+24 25 26 27 28 29 30
+
+Usage:
+  %sconsole_commandline_addcommand_2.php
+  [options] cmd1 [options]
+
+Options:
+  -h, --help  show this help
+              message and exit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addcommand_3.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::addCommand() method.
+--ARGS--
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine(array('subcommand_required' => true));
+$parser->addCommand('cmd1');
+$parser->addCommand('cmd2');
+$parser->addCommand('cmd3');
+try {
+    $parser->parse();
+} catch (Console_CommandLine_Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECTF--
+Please enter one of the following command: cmd1, cmd2, cmd3.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,184 @@
+--TEST--
+Test for Console_CommandLine::addOption() method.
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('opt1', array(
+    'short_name' => '-a'
+));
+$parser->addOption('opt2', array(
+    'short_name' => '-b',
+    'long_name' => '--foo',
+    'description' => 'description of opt2',
+    'action' => 'StoreInt',
+    'help_name' => 'bar',
+    'choices' => array(1, 2, 3),
+    'add_list_option' => true,
+    'default' => 2
+));
+$opt3 = new Console_CommandLine_Option('opt3', array(
+    'long_name' => '--bar',
+    'description' => 'description of opt3',
+));
+$parser->addOption($opt3);
+
+var_dump($parser->options);
+
+?>
+--EXPECTF--
+array(4) {
+  ["opt1"]=>
+  object(Console_CommandLine_Option)#%d (14) {
+    ["short_name"]=>
+    string(2) "-a"
+    ["long_name"]=>
+    NULL
+    ["action"]=>
+    string(11) "StoreString"
+    ["choices"]=>
+    array(0) {
+    }
+    ["callback"]=>
+    NULL
+    ["action_params"]=>
+    array(0) {
+    }
+    ["argument_optional"]=>
+    bool(false)
+    ["add_list_option"]=>
+    bool(false)
+    [%s]=>
+    NULL
+    ["name"]=>
+    string(4) "opt1"
+    ["help_name"]=>
+    string(4) "opt1"
+    ["description"]=>
+    NULL
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["opt2"]=>
+  object(Console_CommandLine_Option)#%d (14) {
+    ["short_name"]=>
+    string(2) "-b"
+    ["long_name"]=>
+    string(5) "--foo"
+    ["action"]=>
+    string(8) "StoreInt"
+    ["choices"]=>
+    array(3) {
+      [0]=>
+      int(1)
+      [1]=>
+      int(2)
+      [2]=>
+      int(3)
+    }
+    ["callback"]=>
+    NULL
+    ["action_params"]=>
+    array(0) {
+    }
+    ["argument_optional"]=>
+    bool(false)
+    ["add_list_option"]=>
+    bool(true)
+    [%s]=>
+    NULL
+    ["name"]=>
+    string(4) "opt2"
+    ["help_name"]=>
+    string(3) "bar"
+    ["description"]=>
+    string(19) "description of opt2"
+    ["default"]=>
+    int(2)
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["list_opt2"]=>
+  object(Console_CommandLine_Option)#%d (14) {
+    ["short_name"]=>
+    NULL
+    ["long_name"]=>
+    string(11) "--list-opt2"
+    ["action"]=>
+    string(4) "List"
+    ["choices"]=>
+    array(0) {
+    }
+    ["callback"]=>
+    NULL
+    ["action_params"]=>
+    array(1) {
+      ["list"]=>
+      array(3) {
+        [0]=>
+        int(1)
+        [1]=>
+        int(2)
+        [2]=>
+        int(3)
+      }
+    }
+    ["argument_optional"]=>
+    bool(false)
+    ["add_list_option"]=>
+    bool(false)
+    [%s]=>
+    NULL
+    ["name"]=>
+    string(9) "list_opt2"
+    ["help_name"]=>
+    string(9) "list_opt2"
+    ["description"]=>
+    string(35) "lists valid choices for option opt2"
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+  ["opt3"]=>
+  object(Console_CommandLine_Option)#%d (14) {
+    ["short_name"]=>
+    NULL
+    ["long_name"]=>
+    string(5) "--bar"
+    ["action"]=>
+    string(11) "StoreString"
+    ["choices"]=>
+    array(0) {
+    }
+    ["callback"]=>
+    NULL
+    ["action_params"]=>
+    array(0) {
+    }
+    ["argument_optional"]=>
+    bool(false)
+    ["add_list_option"]=>
+    bool(false)
+    [%s]=>
+    NULL
+    ["name"]=>
+    string(4) "opt3"
+    ["help_name"]=>
+    string(4) "opt3"
+    ["description"]=>
+    string(19) "description of opt3"
+    ["default"]=>
+    NULL
+    ["messages"]=>
+    array(0) {
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 1).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('Some invalid name');
+
+?>
+--EXPECTF--
+
+Fatal error: option name must be a valid php variable name (got: Some invalid name) in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 2).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array());
+
+?>
+--EXPECTF--
+
+Fatal error: you must provide at least an option short name or long name for option "name" in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_3.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 3).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array('short_name'=>'d'));
+
+?>
+--EXPECTF--
+
+Fatal error: option "name" short name must be a dash followed by a letter (got: "d") in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_4.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 4).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array('long_name'=>'d'));
+
+?>
+--EXPECTF--
+
+Fatal error: option "name" long name must be 2 dashes followed by a word (got: "d") in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_5.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 5).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array('short_name'=>'-d', 'action'=>true));
+
+?>
+--EXPECTF--
+
+Fatal error: invalid action for option "name". in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_6.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 6).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array('short_name'=>'-d', 'action'=>'Inexistant'));
+
+?>
+--EXPECTF--
+
+Fatal error: unregistered action "Inexistant" for option "name". in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_addoption_errors_7.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Test for Console_CommandLine::addOption() method (errors 7).
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('name', array('short_name'=>'-d', 'action'=>'Callback'));
+
+?>
+--EXPECTF--
+
+Fatal error: you must provide a valid callback for option "name" in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_bug18682.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,79 @@
+--TEST--
+Test for bug #18682: columnWrap() in Default Renderer eats up lines with only a EOL.
+--ARGS--
+cmd1 --help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+class Renderer extends Console_CommandLine_Renderer_Default {
+  protected function description() {
+    return $this->columnWrap($this->parser->description, 2);
+  }
+}
+
+$parser = new Console_CommandLine();
+$parser->accept(new Renderer);
+$parser->renderer->line_width = 75;
+$parser->addCommand('cmd1', array(
+    'description' => '
+Installs listed packages.
+
+local package.xml example:
+php pyrus.phar install package.xml
+
+local package archive example:
+php pyrus.phar install PackageName-1.2.0.tar
+
+remote package archive example:
+php pyrus.phar install http://www.example.com/PackageName-1.2.0.tgz
+
+Examples of an abstract package:
+php pyrus.phar install PackageName
+  installs PackageName from the default channel with stability preferred_state
+php pyrus.phar pear/PackageName
+  installs PackageName from the pear.php.net channel with stability preferred_state
+php pyrus.phar install channel://doc.php.net/PackageName
+  installs PackageName from the doc.php.net channel with stability preferred_state
+php pyrus.phar install PackageName-beta
+  installs PackageName from the default channel, beta or stable stability
+php pyrus.phar install PackageName-1.2.0
+  installs PackageName from the default channel, version 1.2.0'
+));
+$parser->parse();
+
+?>
+--EXPECTF--
+  Installs listed packages.
+
+  local package.xml example:
+  php pyrus.phar install package.xml
+
+  local package archive example:
+  php pyrus.phar install PackageName-1.2.0.tar
+
+  remote package archive example:
+  php pyrus.phar install http://www.example.com/PackageName-1.2.0.tgz
+
+  Examples of an abstract package:
+  php pyrus.phar install PackageName
+    installs PackageName from the default channel with stability
+  preferred_state
+  php pyrus.phar pear/PackageName
+    installs PackageName from the pear.php.net channel with stability
+  preferred_state
+  php pyrus.phar install channel://doc.php.net/PackageName
+    installs PackageName from the doc.php.net channel with stability
+  preferred_state
+  php pyrus.phar install PackageName-beta
+    installs PackageName from the default channel, beta or stable stability
+  php pyrus.phar install PackageName-1.2.0
+    installs PackageName from the default channel, version 1.2.0
+
+Usage:
+  %sconsole_commandline_bug18682.php
+  [options] cmd1 [options]
+
+Options:
+  -h, --help  show this help message and exit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_fromxmlfile.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+--TEST--
+Test for Console_CommandLine::fromXmlFile() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = Console_CommandLine::fromXmlFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test.xml');
+$parser->parse();
+
+?>
+--EXPECTF--
+zip/unzip files
+
+Usage:
+  test [options]
+  test [options] <command> [options] [args]
+
+Options:
+  -c choice, --choice=choice        choice option
+  --list-choice                     lists valid choices for option choice
+  -p password, --password=password  zip file password
+  -v, --verbose                     turn on verbose output
+  -h, --help                        show this help message and exit
+  --version                         show the program version and exit
+
+Commands:
+  zip    zip given files in the destination file (aliases: compress, zp)
+  unzip  unzip given file in the destination dir (alias: uzp)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Test for Console_CommandLine::fromXmlFile() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+zip --help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = Console_CommandLine::fromXmlFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test.xml');
+$parser->parse();
+
+?>
+--EXPECTF--
+zip given files in the destination file
+
+Usage:
+  test [options] zip [options] files1 files2 ... zipfile
+
+Options:
+  -h, --help  show this help message and exit
+
+Arguments:
+  files    a list of files to zip together
+  zipfile  path to the zip file to generate
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Test for Console_CommandLine::fromXmlFile() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+unzip --help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = Console_CommandLine::fromXmlFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test.xml');
+$parser->parse();
+
+?>
+--EXPECTF--
+unzip given file in the destination dir
+
+Usage:
+  test [options] unzip [options] outputdir zipfile
+
+Options:
+  -h, --help  show this help message and exit
+
+Arguments:
+  outputdir  destination directory
+  zipfile    path to the zip file to unzip
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_fromxmlfile_error.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+--TEST--
+Test for Console_CommandLine::fromXmlFile() method (error).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+// unexisting xml file
+$parser = Console_CommandLine::fromXmlFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'unexisting.xml');
+$parser->parse();
+
+?>
+--EXPECTF--
+
+Fatal error: XML definition file "%sunexisting.xml" does not exists or is not readable in %sCommandLine.php on line %d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_fromxmlstring.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+--TEST--
+Test for Console_CommandLine::fromXmlString() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$str = file_get_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test.xml');
+$parser = Console_CommandLine::fromXmlString($str);
+$parser->parse();
+
+?>
+--EXPECT--
+zip/unzip files
+
+Usage:
+  test [options]
+  test [options] <command> [options] [args]
+
+Options:
+  -c choice, --choice=choice        choice option
+  --list-choice                     lists valid choices for option choice
+  -p password, --password=password  zip file password
+  -v, --verbose                     turn on verbose output
+  -h, --help                        show this help message and exit
+  --version                         show the program version and exit
+
+Commands:
+  zip    zip given files in the destination file (aliases: compress, zp)
+  unzip  unzip given file in the destination dir (alias: uzp)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_options_defaults.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+--TEST--
+Test for Console_CommandLine options defaults.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser3();
+    $parser->force_options_defaults = true;
+    $result = $parser->parse();
+    foreach ($result->options as $k => $v) {
+        echo $k . ":"; var_dump($v);
+    }
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+true:bool(false)
+false:bool(true)
+int:int(0)
+float:float(0)
+string:NULL
+counter:int(0)
+callback:NULL
+array:array(0) {
+}
+password:NULL
+help:NULL
+version:NULL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+--TEST--
+Test for Console_CommandLine::parse() method (--version).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--version
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$parser->parse();
+
+?>
+--EXPECT--
+some_program version 0.1.0.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_10.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+--TEST--
+Test for Console_CommandLine::parse() method (subcommand).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-v install -f foo
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+$result = $parser->parse();
+var_dump($result->options);
+var_dump($result->command_name);
+var_dump($result->command->options);
+
+?>
+--EXPECT--
+array(4) {
+  ["verbose"]=>
+  bool(true)
+  ["logfile"]=>
+  NULL
+  ["help"]=>
+  NULL
+  ["version"]=>
+  NULL
+}
+string(7) "install"
+array(2) {
+  ["force"]=>
+  bool(true)
+  ["help"]=>
+  NULL
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_11.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+--TEST--
+Test for Console_CommandLine::parse() method (subcommand help 1).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+$result = $parser->parse();
+
+?>
+--EXPECT--
+Description of our parser goes here...
+
+Usage:
+  some_program [options]
+  some_program [options] <command> [options] [args]
+
+Options:
+  -v, --verbose                  verbose mode
+  -l logfile, --logfile=logfile  path to logfile
+  -h, --help                     show this help message and exit
+  --version                      show the program version and exit
+
+Commands:
+  install    install given package (aliases: inst, instbis)
+  uninstall  uninstall given package
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_12.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Test for Console_CommandLine::parse() method (subcommand help 2).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+inst --help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+$result = $parser->parse();
+
+?>
+--EXPECT--
+install given package
+
+Usage:
+  some_program [options] install [options] package
+
+Options:
+  -f, --force  force installation
+  -h, --help   show this help message and exit
+
+Arguments:
+  package  package to install
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_13.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (user errors 1).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--float=foo foo bar
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Option "float" requires a value of type float (got "foo").
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_14.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (user errors 2).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--int=foo foo bar
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Option "int" requires a value of type int (got "foo").
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_15.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Test for Console_CommandLine::parse() method (subcommand error).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+install -f 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+Error: You must provide at least 1 argument.
+Type "some_program --help" to get help.
+Type "some_program <command> --help" to get help on specific command.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_16.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (user errors 3).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-s fooz foo bar
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Option "string" must be one of the following: "foo", "bar", "baz" (got "fooz").
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_17.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,67 @@
+--TEST--
+Test for Console_CommandLine::parse() method (user argc/argv 1).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$argv = array('somename', '-t', '-f', '--float=1.2', 'foo', 'bar');
+$argc = count($argv);
+try {
+    $parser = buildParser1();
+    $result = $parser->parse($argc, $argv);
+    var_dump($result);
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECTF--
+object(Console_CommandLine_Result)#%d (4) {
+  ["options"]=>
+  array(11) {
+    ["true"]=>
+    bool(true)
+    ["false"]=>
+    bool(false)
+    ["int"]=>
+    int(1)
+    ["float"]=>
+    float(1.2)
+    ["string"]=>
+    NULL
+    ["counter"]=>
+    NULL
+    ["callback"]=>
+    NULL
+    ["array"]=>
+    array(2) {
+      [0]=>
+      string(4) "spam"
+      [1]=>
+      string(3) "egg"
+    }
+    ["password"]=>
+    NULL
+    ["help"]=>
+    NULL
+    ["version"]=>
+    NULL
+  }
+  ["args"]=>
+  array(2) {
+    ["simple"]=>
+    string(3) "foo"
+    ["multiple"]=>
+    array(1) {
+      [0]=>
+      string(3) "bar"
+    }
+  }
+  ["command_name"]=>
+  bool(false)
+  ["command"]=>
+  bool(false)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_18.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+--TEST--
+Test for Console_CommandLine::parse() method (user argc/argv 2).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$argv = array('somename', '-v', 'install', '-f', 'foo');
+$argc = count($argv);
+try {
+    $parser = buildParser2();
+    $result = $parser->parse($argc, $argv);
+    var_dump($result);
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECTF--
+object(Console_CommandLine_Result)#%d (4) {
+  ["options"]=>
+  array(4) {
+    ["verbose"]=>
+    bool(true)
+    ["logfile"]=>
+    NULL
+    ["help"]=>
+    NULL
+    ["version"]=>
+    NULL
+  }
+  ["args"]=>
+  array(0) {
+  }
+  ["command_name"]=>
+  string(7) "install"
+  ["command"]=>
+  object(Console_CommandLine_Result)#%d (4) {
+    ["options"]=>
+    array(2) {
+      ["force"]=>
+      bool(true)
+      ["help"]=>
+      NULL
+    }
+    ["args"]=>
+    array(1) {
+      ["package"]=>
+      string(3) "foo"
+    }
+    ["command_name"]=>
+    bool(false)
+    ["command"]=>
+    bool(false)
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_19.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,57 @@
+--TEST--
+Test for Console_CommandLine::parse() method (subcommand help 1).
+--STDIN--
+some_package
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-v instbis -f -
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+try {
+    $result = $parser->parse();
+    print_r($result);
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Console_CommandLine_Result Object
+(
+    [options] => Array
+        (
+            [verbose] => 1
+            [logfile] => 
+            [help] => 
+            [version] => 
+        )
+
+    [args] => Array
+        (
+        )
+
+    [command_name] => install
+    [command] => Console_CommandLine_Result Object
+        (
+            [options] => Array
+                (
+                    [force] => 1
+                    [help] => 
+                )
+
+            [args] => Array
+                (
+                    [package] => some_package
+
+                )
+
+            [command_name] => 
+            [command] => 
+        )
+
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,37 @@
+--TEST--
+Test for Console_CommandLine::parse() method (--help).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$parser->parse();
+
+?>
+--EXPECT--
+Description of our parser goes here...
+
+Usage:
+  some_program [options] simple [multiple1 multiple2 ...]
+
+Options:
+  -t, --true                        test the StoreTrue action
+  -f, --false                       test the StoreFalse action
+  --int=INT                         test the StoreInt action
+  --float=FLOAT                     test the StoreFloat action
+  -s STRING, --string=STRING        test the StoreString action
+  -c, --counter                     test the Counter action
+  --callback=callback               test the Callback action
+  -a ARRAY, --array=ARRAY           test the StoreArray action
+  -p password, --password=password  test the Password action
+  -h, --help                        show this help message and exit
+  -v, --version                     show the program version and exit
+
+Arguments:
+  simple    test a simple argument
+  multiple  test a multiple argument
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_20.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+--TEST--
+Test for Console_CommandLine::fromXmlFile() method.
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--list-choice
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = Console_CommandLine::fromXmlFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test.xml');
+$parser->parse();
+
+?>
+--EXPECTF--
+Valid choices are: ham, spam
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_21.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,47 @@
+--TEST--
+Test for Console_CommandLine::parse() method (--help with renderer options).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--help 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$parser->renderer->line_width = 0;
+$parser->renderer->options_on_different_lines = true;
+$parser->parse();
+
+?>
+--EXPECT--
+Description of our parser goes here...
+
+Usage:
+  some_program [options] simple [multiple1 multiple2 ...]
+
+Options:
+  -t
+  --true               test the StoreTrue action
+  -f
+  --false              test the StoreFalse action
+  --int=INT            test the StoreInt action
+  --float=FLOAT        test the StoreFloat action
+  -s STRING
+  --string=STRING      test the StoreString action
+  -c
+  --counter            test the Counter action
+  --callback=callback  test the Callback action
+  -a ARRAY
+  --array=ARRAY        test the StoreArray action
+  -p password
+  --password=password  test the Password action
+  -h
+  --help               show this help message and exit
+  -v
+  --version            show the program version and exit
+
+Arguments:
+  simple    test a simple argument
+  multiple  test a multiple argument
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_22.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Test for Console_CommandLine::parse() method (--help with renderer options).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--list
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = new Console_CommandLine();
+$parser->addOption('list', array(
+    'long_name'     => '--list',
+    'action'        => 'List',
+    'action_params' => array(
+        'list'      => array('foo', 'bar', 'baz'),
+        'message'   => 'foobarbaz---',
+        'delimiter' => '|',
+        'post'      => '---foobarbaz',
+    ),
+));
+$parser->parse();
+
+?>
+--EXPECT--
+foobarbaz---foo|bar|baz---foobarbaz
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_23.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-v invalid subcommand
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser2();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Command "invalid" is not valid.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_24.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+upgrade
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Package name is required.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_25.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+upgrade -s foo
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Valid states are "stable" and "beta".
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_26.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+upgrade -s
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Option requires value.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_27.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+upgrade -t
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Mysterious option encountered.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_28.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+upgrade --dry-run=foo
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Option should not have a value.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_29.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Test for Console_CommandLine::parse() method (invalid subcommand detection).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+foo
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser4();
+try {
+    $result = $parser->parse();
+} catch (Exception $exc) {
+    echo $exc->getMessage();
+}
+
+?>
+--EXPECT--
+Only "upgrade" is supported.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_3.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+--TEST--
+Test for Console_CommandLine::parse() method (various options).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-tfsfoo --int=3 --flo 4.0 -cccc --callback=somestring -a foo bar baz foo bar
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$result = $parser->parse();
+var_dump($result->options);
+var_dump($result->args);
+
+?>
+--EXPECT--
+array(11) {
+  ["true"]=>
+  bool(true)
+  ["false"]=>
+  bool(false)
+  ["int"]=>
+  int(3)
+  ["float"]=>
+  float(4)
+  ["string"]=>
+  string(3) "foo"
+  ["counter"]=>
+  int(4)
+  ["callback"]=>
+  string(20) "foo__fbzrfgevat__bar"
+  ["array"]=>
+  array(3) {
+    [0]=>
+    string(3) "foo"
+    [1]=>
+    string(3) "bar"
+    [2]=>
+    string(3) "baz"
+  }
+  ["password"]=>
+  NULL
+  ["help"]=>
+  NULL
+  ["version"]=>
+  NULL
+}
+array(2) {
+  ["simple"]=>
+  string(3) "foo"
+  ["multiple"]=>
+  array(1) {
+    [0]=>
+    string(3) "bar"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_4.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Test for Console_CommandLine::parse() method (errors 1).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-d 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser1();
+    $result = $parser->parse();
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+Error: Unknown option "-d".
+Type "some_program --help" to get help.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_5.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Test for Console_CommandLine::parse() method (errors 2).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--float 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser1();
+    $result = $parser->parse();
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+Error: Option "float" requires a value.
+Type "some_program --help" to get help.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_6.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Test for Console_CommandLine::parse() method (errors 3).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+--float=1.2 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser1();
+    $result = $parser->parse();
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECT--
+Error: You must provide at least 1 argument.
+Type "some_program --help" to get help.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_7.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,71 @@
+--TEST--
+Test for Console_CommandLine::parse() method (special cases 1).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-t -- -f - --float=1.2 foo 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser1();
+    $result = $parser->parse();
+    var_dump($result);
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECTF--
+object(Console_CommandLine_Result)#%d (4) {
+  ["options"]=>
+  array(11) {
+    ["true"]=>
+    bool(true)
+    ["false"]=>
+    NULL
+    ["int"]=>
+    int(1)
+    ["float"]=>
+    float(1)
+    ["string"]=>
+    NULL
+    ["counter"]=>
+    NULL
+    ["callback"]=>
+    NULL
+    ["array"]=>
+    array(2) {
+      [0]=>
+      string(4) "spam"
+      [1]=>
+      string(3) "egg"
+    }
+    ["password"]=>
+    NULL
+    ["help"]=>
+    NULL
+    ["version"]=>
+    NULL
+  }
+  ["args"]=>
+  array(2) {
+    ["simple"]=>
+    string(2) "-f"
+    ["multiple"]=>
+    array(3) {
+      [0]=>
+      string(1) "-"
+      [1]=>
+      string(11) "--float=1.2"
+      [2]=>
+      string(3) "foo"
+    }
+  }
+  ["command_name"]=>
+  bool(false)
+  ["command"]=>
+  bool(false)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_8.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,70 @@
+--TEST--
+Test for Console_CommandLine::parse() method (special cases 2).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-t foo bar -f 2>&1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+try {
+    $parser = buildParser1();
+    $parser->force_posix = true;
+    $result = $parser->parse();
+    var_dump($result);
+} catch (Console_CommandLine_Exception $exc) {
+    $parser->displayError($exc->getMessage());
+}
+
+?>
+--EXPECTF--
+object(Console_CommandLine_Result)#%d (4) {
+  ["options"]=>
+  array(11) {
+    ["true"]=>
+    bool(true)
+    ["false"]=>
+    NULL
+    ["int"]=>
+    int(1)
+    ["float"]=>
+    float(1)
+    ["string"]=>
+    NULL
+    ["counter"]=>
+    NULL
+    ["callback"]=>
+    NULL
+    ["array"]=>
+    array(2) {
+      [0]=>
+      string(4) "spam"
+      [1]=>
+      string(3) "egg"
+    }
+    ["password"]=>
+    NULL
+    ["help"]=>
+    NULL
+    ["version"]=>
+    NULL
+  }
+  ["args"]=>
+  array(2) {
+    ["simple"]=>
+    string(3) "foo"
+    ["multiple"]=>
+    array(2) {
+      [0]=>
+      string(3) "bar"
+      [1]=>
+      string(2) "-f"
+    }
+  }
+  ["command_name"]=>
+  bool(false)
+  ["command"]=>
+  bool(false)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_parse_9.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,58 @@
+--TEST--
+Test for Console_CommandLine::parse() method (password option).
+--SKIPIF--
+<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
+--ARGS--
+-p -- foo bar
+--STDIN--
+secretpass
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$result = $parser->parse();
+var_dump($result->options);
+var_dump($result->args);
+
+?>
+--EXPECTF--
+Password%s array(11) {
+  ["true"]=>
+  NULL
+  ["false"]=>
+  NULL
+  ["int"]=>
+  int(1)
+  ["float"]=>
+  float(1)
+  ["string"]=>
+  NULL
+  ["counter"]=>
+  NULL
+  ["callback"]=>
+  NULL
+  ["array"]=>
+  array(2) {
+    [0]=>
+    string(4) "spam"
+    [1]=>
+    string(3) "egg"
+  }
+  ["password"]=>
+  string(10) "secretpass"
+  ["help"]=>
+  NULL
+  ["version"]=>
+  NULL
+}
+array(2) {
+  ["simple"]=>
+  string(3) "foo"
+  ["multiple"]=>
+  array(1) {
+    [0]=>
+    string(3) "bar"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_webrequest_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+--TEST--
+Test for Console_CommandLine::parse() with a web request 1
+--GET--
+version=1
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$parser->parse();
+
+?>
+--EXPECT--
+some_program version 0.1.0.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_webrequest_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+--TEST--
+Test for Console_CommandLine::parse() with a web request 2
+--GET--
+help
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$parser->parse();
+
+?>
+--EXPECT--
+Description of our parser goes here...
+
+Usage:
+  some_program [options] simple [multiple1 multiple2 ...]
+
+Options:
+  -t, --true                        test the StoreTrue action
+  -f, --false                       test the StoreFalse action
+  --int=INT                         test the StoreInt action
+  --float=FLOAT                     test the StoreFloat action
+  -s STRING, --string=STRING        test the StoreString action
+  -c, --counter                     test the Counter action
+  --callback=callback               test the Callback action
+  -a ARRAY, --array=ARRAY           test the StoreArray action
+  -p password, --password=password  test the Password action
+  -h, --help                        show this help message and exit
+  -v, --version                     show the program version and exit
+
+Arguments:
+  simple    test a simple argument
+  multiple  test a multiple argument
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/console_commandline_webrequest_3.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,56 @@
+--TEST--
+Test for Console_CommandLine::parse() with a web request 3
+--POST--
+true=1&false=1&string=foo&int=3&float=4.0&callback=somestring&-a[]=foo&-a[]=bar&-a[]=baz&simple=foo&multiple=bar
+--FILE--
+<?php
+
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tests.inc.php';
+
+$parser = buildParser1();
+$result = $parser->parse();
+var_dump($result->options);
+var_dump($result->args);
+
+?>
+--EXPECT--
+array(11) {
+  ["true"]=>
+  bool(true)
+  ["false"]=>
+  bool(false)
+  ["int"]=>
+  int(3)
+  ["float"]=>
+  float(4)
+  ["string"]=>
+  string(3) "foo"
+  ["counter"]=>
+  NULL
+  ["callback"]=>
+  string(20) "foo__fbzrfgevat__bar"
+  ["array"]=>
+  array(3) {
+    [0]=>
+    string(3) "foo"
+    [1]=>
+    string(3) "bar"
+    [2]=>
+    string(3) "baz"
+  }
+  ["password"]=>
+  NULL
+  ["help"]=>
+  NULL
+  ["version"]=>
+  NULL
+}
+array(2) {
+  ["simple"]=>
+  string(3) "foo"
+  ["multiple"]=>
+  array(1) {
+    [0]=>
+    string(3) "bar"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/test.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Some comment -->
+<command>
+    <force_posix>true</force_posix>
+    <name>test</name>
+    <description>zip/unzip files</description>
+    <version>1.0.0</version>
+    <!-- Comment -->
+    <option name="choice">
+        <short_name>-c</short_name>
+        <long_name>--choice</long_name>
+        <description>choice option</description>
+        <action>StoreString</action>
+        <!-- Comment -->
+        <choices>
+            <choice>ham</choice>
+            <choice>spam</choice>
+        </choices>
+        <add_list_option>True</add_list_option>
+        <default>null</default>
+        <help_name>choice</help_name>
+    </option>
+    <option name="password">
+        <action>Password</action>
+        <short_name>-p</short_name>
+        <long_name>--password</long_name>
+        <description>zip file password</description>
+    </option>
+    <option name="verbose">
+        <long_name>--verbose</long_name>
+        <description>turn on verbose output</description>
+        <action>StoreTrue</action>
+        <short_name>-v</short_name>
+    </option>
+    <command>
+        <aliases>
+            <alias>compress</alias>
+            <alias>zp</alias>
+        </aliases>
+        <name>zip</name>
+        <!-- Comment -->
+        <description>zip given files in the destination file</description>
+        <argument name="files">
+            <description>a list of files to zip together</description>
+            <multiple>True</multiple>
+        </argument>
+        <argument name="zipfile">
+            <!-- Comment -->
+            <description>path to the zip file to generate</description>
+        </argument>
+    </command>
+    <command>
+        <argument name="outputdir">
+            <description>destination directory</description>
+            <multiple>False</multiple>
+        </argument>
+        <name>unzip</name>
+        <aliases>
+            <alias>uzp</alias>
+        </aliases>
+        <description>unzip given file in the destination dir</description>
+        <argument name="zipfile">
+            <description>path to the zip file to unzip</description>
+        </argument>
+    </command>
+</command>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_commandline/tests/tests.inc.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,494 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This file is part of the PEAR Console_CommandLine package.
+ *
+ * PHP version 5
+ *
+ * LICENSE: This source file is subject to the MIT license that is available
+ * through the world-wide-web at the following URI:
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * @category  Console 
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+
+if (php_sapi_name() != 'cli') {
+    // tests with php-cgi need this
+    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR 
+        . dirname(__FILE__) . '/../');
+}
+
+/**
+ * Required classes
+ */
+require_once 'Console/CommandLine.php';
+require_once 'Console/CommandLine/Renderer.php';
+require_once 'Console/CommandLine/Outputter.php';
+require_once 'Console/CommandLine/MessageProvider.php';
+
+// rot13Callback() {{{
+
+/**
+ * A dummy callback for tests purposes.
+ * 
+ * @param mixed  $value  value provided by the user
+ * @param object $option the option instance
+ * @param object $result the result instance
+ * @param object $parser the parser instance
+ * @param array  $params optional params array
+ * 
+ * @return string
+ */
+function rot13Callback($value, $option, $result, $parser, $params=array())
+{
+    $ret = '';
+    if (isset($params['prefix'])) {
+        $ret .= $params['prefix'] . '__';
+    }
+    $ret .= str_rot13($value);
+    if (isset($params['suffix'])) {
+        $ret .= '__' . $params['suffix'];
+    }
+    return $ret;
+}
+
+// }}}
+// buildParser1() {{{
+
+/**
+ * Build a parser instance and return it.
+ *
+ * @return object Console_CommandLine instance
+ */
+function buildParser1()
+{
+    $parser              = new Console_CommandLine();
+    $parser->name        = 'some_program';
+    $parser->version     = '0.1.0';
+    $parser->description = 'Description of our parser goes here...';
+
+    // add options
+    $parser->addOption('true', array(
+        'short_name'  => '-t',
+        'long_name'   => '--true',
+        'action'      => 'StoreTrue',
+        'description' => 'test the StoreTrue action'
+    ));
+    $parser->addOption('false', array(
+        'short_name'  => '-f',
+        'long_name'   => '--false',
+        'action'      => 'StoreFalse',
+        'description' => 'test the StoreFalse action'
+    ));
+    $parser->addOption('int', array(
+        'long_name'   => '--int',
+        'action'      => 'StoreInt',
+        'description' => 'test the StoreInt action',
+        'help_name'   => 'INT',
+        'default'     => 1
+    ));
+    $parser->addOption('float', array(
+        'long_name'   => '--float',
+        'action'      => 'StoreFloat',
+        'description' => 'test the StoreFloat action',
+        'help_name'   => 'FLOAT',
+        'default'     => 1.0
+    ));
+    $parser->addOption('string', array(
+        'short_name'  => '-s',
+        'long_name'   => '--string',
+        'action'      => 'StoreString',
+        'description' => 'test the StoreString action',
+        'help_name'   => 'STRING',
+        'choices'     => array('foo', 'bar', 'baz')
+    ));
+    $parser->addOption('counter', array(
+        'short_name'  => '-c',
+        'long_name'   => '--counter',
+        'action'      => 'Counter',
+        'description' => 'test the Counter action'
+    ));
+    $parser->addOption('callback', array(
+        'long_name'     => '--callback',
+        'action'        => 'Callback',
+        'description'   => 'test the Callback action',
+        'callback'      => 'rot13Callback',
+        'action_params' => array('prefix' => 'foo', 'suffix' => 'bar')
+    ));
+    $parser->addOption('array', array(
+        'short_name'  => '-a',
+        'long_name'   => '--array',
+        'default'     => array('spam', 'egg'),
+        'action'      => 'StoreArray',
+        'help_name'   => 'ARRAY',
+        'description' => 'test the StoreArray action'
+    ));
+    $parser->addOption('password', array(
+        'short_name'  => '-p',
+        'long_name'   => '--password',
+        'action'      => 'Password',
+        'description' => 'test the Password action'
+    ));
+    $parser->addArgument('simple', array(
+        'description' => 'test a simple argument'
+    ));
+    $parser->addArgument('multiple', array(
+        'description' => 'test a multiple argument',
+        'multiple'    => true,
+        'optional'    => true
+    ));
+    return $parser;
+}
+
+// }}}
+// buildParser2() {{{
+
+/**
+ * Build a parser instance and return it.
+ *
+ * @return object Console_CommandLine instance
+ */
+function buildParser2()
+{
+    $parser              = new Console_CommandLine();
+    $parser->name        = 'some_program';
+    $parser->version     = '0.1.0';
+    $parser->description = 'Description of our parser goes here...';
+
+    // add general options
+    $parser->addOption('verbose', array(
+        'short_name'  => '-v',
+        'long_name'   => '--verbose',
+        'action'      => 'StoreTrue',
+        'description' => 'verbose mode'
+    ));
+    $parser->addOption('logfile', array(
+        'short_name'  => '-l',
+        'long_name'   => '--logfile',
+        'action'      => 'StoreString',
+        'description' => 'path to logfile'
+    ));
+ 
+    // install subcommand
+    $cmd1 = $parser->addCommand('install', array(
+        'description' => 'install given package',
+        'aliases'     => array('inst', 'instbis'),
+    ));
+    $cmd1->addOption('force', array(
+        'short_name'  => '-f',
+        'long_name'   => '--force',
+        'action'      => 'StoreTrue',
+        'description' => 'force installation'
+    ));
+    $cmd1->addArgument('package', array(
+        'description' => 'package to install'
+    ));
+
+    // uninstall subcommand
+    $cmd2 = $parser->addCommand('uninstall', array(
+        'description' => 'uninstall given package'
+    ));
+    $cmd2->addArgument('package', array(
+        'description' => 'package to uninstall'
+    ));
+    return $parser;
+}
+
+// }}}
+// buildParser3() {{{
+
+/**
+ * Build a parser instance and return it.
+ *
+ * @return object Console_CommandLine instance
+ */
+function buildParser3()
+{
+    $parser              = new Console_CommandLine();
+    $parser->name        = 'some_program';
+    $parser->version     = '0.1.0';
+    $parser->description = 'Description of our parser goes here...';
+    // we force options default values
+    $parser->force_options_defaults = true;
+
+    // add options
+    $parser->addOption('true', array(
+        'short_name'  => '-t',
+        'long_name'   => '--true',
+        'action'      => 'StoreTrue',
+        'description' => 'test the StoreTrue action',
+    ));
+    $parser->addOption('false', array(
+        'short_name'  => '-f',
+        'long_name'   => '--false',
+        'action'      => 'StoreFalse',
+        'description' => 'test the StoreFalse action',
+    ));
+    $parser->addOption('int', array(
+        'long_name'   => '--int',
+        'action'      => 'StoreInt',
+        'description' => 'test the StoreInt action',
+        'help_name'   => 'INT',
+    ));
+    $parser->addOption('float', array(
+        'long_name'   => '--float',
+        'action'      => 'StoreFloat',
+        'description' => 'test the StoreFloat action',
+        'help_name'   => 'FLOAT',
+    ));
+    $parser->addOption('string', array(
+        'short_name'  => '-s',
+        'long_name'   => '--string',
+        'action'      => 'StoreString',
+        'description' => 'test the StoreString action',
+        'help_name'   => 'STRING',
+        'choices'     => array('foo', 'bar', 'baz')
+    ));
+    $parser->addOption('counter', array(
+        'short_name'  => '-c',
+        'long_name'   => '--counter',
+        'action'      => 'Counter',
+        'description' => 'test the Counter action'
+    ));
+    $parser->addOption('callback', array(
+        'long_name'     => '--callback',
+        'action'        => 'Callback',
+        'description'   => 'test the Callback action',
+        'callback'      => 'rot13Callback',
+        'action_params' => array('prefix' => 'foo', 'suffix' => 'bar')
+    ));
+    $parser->addOption('array', array(
+        'short_name'  => '-a',
+        'long_name'   => '--array',
+        'action'      => 'StoreArray',
+        'help_name'   => 'ARRAY',
+        'description' => 'test the StoreArray action'
+    ));
+    $parser->addOption('password', array(
+        'short_name'  => '-p',
+        'long_name'   => '--password',
+        'action'      => 'Password',
+        'description' => 'test the Password action'
+    ));
+    return $parser;
+}
+
+// }}}
+// {{{ buildParser4()
+
+/**
+ * Build a parser instance and return it.
+ *
+ * For testing custom messages.
+ *
+ * @return object Console_CommandLine instance
+ */
+function buildParser4()
+{
+    $parser = new Console_CommandLine(array(
+        'messages' => array(
+            'INVALID_SUBCOMMAND' => 'Only "upgrade" is supported.',
+        ),
+    ));
+    $parser->name        = 'some_program';
+    $parser->version     = '0.1.0';
+    $parser->description = 'Description of our parser goes here...';
+
+    // some subcommand
+    $cmd1 = $parser->addCommand('upgrade', array(
+        'description' => 'upgrade given package',
+        'aliases'     => array('up'),
+        'messages'    => array(
+            'ARGUMENT_REQUIRED'       => 'Package name is required.',
+            'OPTION_VALUE_REQUIRED'   => 'Option requires value.',
+            'OPTION_VALUE_UNEXPECTED' => 'Option should not have a value.',
+            'OPTION_UNKNOWN'          => 'Mysterious option encountered.',
+        ),
+    ));
+    // add option
+    $cmd1->addOption('state', array(
+        'short_name'  => '-s',
+        'long_name'   => '--state',
+        'action'      => 'StoreString',
+        'choices'     => array('stable', 'beta'),
+        'description' => 'accepted package states',
+        'messages'    => array(
+            'OPTION_VALUE_NOT_VALID' => 'Valid states are "stable" and "beta".',
+        ),
+    ));
+    // add another option
+    $cmd1->addOption('dry_run', array(
+        'short_name'  => '-d',
+        'long_name'   => '--dry-run',
+        'action'      => 'StoreTrue',
+        'description' => 'dry run',
+    ));
+    // add argument
+    $cmd1->addArgument('package', array(
+        'description' => 'package to upgrade'
+    ));
+
+    return $parser;
+}
+
+// }}}
+// CustomRenderer() {{{
+
+/**
+ * Some custom renderer for tests purposes.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+class CustomRenderer implements Console_CommandLine_Renderer
+{
+    // usage() {{{
+
+    /**
+     * Return the full usage message
+     *
+     * @return string the usage message
+     * @access public
+     */
+    public function usage()
+    {
+        return __METHOD__ . '()';
+    }
+    // }}}
+    // error() {{{
+
+    /**
+     * Return a formatted error message
+     *
+     * @param string $error the error message to format
+     *
+     * @return string the error string
+     * @access public
+     */
+    public function error($error)
+    {
+        return __METHOD__ . "($error)";
+    }
+
+    // }}}
+    // version() {{{
+
+    /**
+     * Return the program version string
+     *
+     * @return string the version string
+     * @access public
+     */
+    public function version()
+    {
+        return __METHOD__ . '()';
+    }
+
+    // }}}
+}
+
+// }}}
+// CustomOutputter() {{{
+
+/**
+ * Some custom outputter for tests purposes.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+class CustomOutputter implements Console_CommandLine_Outputter
+{
+    // stdout() {{{
+
+    /**
+     * Called for stdout messages.
+     *
+     * @param string $msg the message to output
+     *
+     * @return void
+     * @access public
+     */
+    public function stdout($msg)
+    {
+        echo "STDOUT >> $msg\n";
+    }
+
+    // }}}
+    // stderr() {{{
+
+    /**
+     * Called for stderr messages.
+     *
+     * @param string $msg the message to output
+     *
+     * @return void
+     * @access public
+     */
+    public function stderr($msg)
+    {
+        echo "STDERR >> $msg\n";
+    }
+
+    // }}}
+}
+
+// }}}
+// CustomMessageProvider() {{{
+
+/**
+ * Some custom message provider for tests purposes.
+ *
+ * @category  Console
+ * @package   Console_CommandLine
+ * @author    David JEAN LOUIS <izimobil@gmail.com>
+ * @copyright 2007 David JEAN LOUIS
+ * @license   http://opensource.org/licenses/mit-license.php MIT License 
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Console_CommandLine
+ * @since     File available since release 0.1.0
+ */
+class CustomMessageProvider implements Console_CommandLine_MessageProvider
+{
+    // get() {{{
+
+    /**
+     * Retrieve the given string identifier corresponding message.
+     *
+     * @param string $code the string identifier of the message
+     * @param array  $vars an array of template variables
+     *
+     * @return string
+     * @access public
+     */
+    public function get($code, $vars = array())
+    {
+        return $code;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+# composer related
+composer.lock
+composer.phar
+vendor
+README.html
+dist/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+language: php
+php:
+  - 7
+  - 5.6
+  - 5.5
+  - 5.4
+sudo: false
+script:
+  - pear run-tests -r tests/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/Console/Getopt.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,360 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+/**
+ * PHP Version 5
+ *
+ * Copyright (c) 1997-2004 The PHP Group
+ *
+ * This source file is subject to version 3.0 of the PHP license,
+ * that is bundled with this package in the file LICENSE, and is
+ * available through the world-wide-web at the following url:
+ * http://www.php.net/license/3_0.txt.
+ * If you did not receive a copy of the PHP license and are unable to
+ * obtain it through the world-wide-web, please send a note to
+ * license@php.net so we can mail you a copy immediately.
+ *
+ * @category Console
+ * @package  Console_Getopt
+ * @author   Andrei Zmievski <andrei@php.net>
+ * @license  http://www.php.net/license/3_0.txt PHP 3.0
+ * @version  CVS: $Id$
+ * @link     http://pear.php.net/package/Console_Getopt
+ */
+
+require_once 'PEAR.php';
+
+/**
+ * Command-line options parsing class.
+ *
+ * @category Console
+ * @package  Console_Getopt
+ * @author   Andrei Zmievski <andrei@php.net>
+ * @license  http://www.php.net/license/3_0.txt PHP 3.0
+ * @link     http://pear.php.net/package/Console_Getopt
+ */
+class Console_Getopt
+{
+
+    /**
+     * Parses the command-line options.
+     *
+     * The first parameter to this function should be the list of command-line
+     * arguments without the leading reference to the running program.
+     *
+     * The second parameter is a string of allowed short options. Each of the
+     * option letters can be followed by a colon ':' to specify that the option
+     * requires an argument, or a double colon '::' to specify that the option
+     * takes an optional argument.
+     *
+     * The third argument is an optional array of allowed long options. The
+     * leading '--' should not be included in the option name. Options that
+     * require an argument should be followed by '=', and options that take an
+     * option argument should be followed by '=='.
+     *
+     * The return value is an array of two elements: the list of parsed
+     * options and the list of non-option command-line arguments. Each entry in
+     * the list of parsed options is a pair of elements - the first one
+     * specifies the option, and the second one specifies the option argument,
+     * if there was one.
+     *
+     * Long and short options can be mixed.
+     *
+     * Most of the semantics of this function are based on GNU getopt_long().
+     *
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
+     *
+     * @return array two-element array containing the list of parsed options and
+     * the non-option arguments
+     */
+    public static function getopt2($args, $short_options, $long_options = null, $skip_unknown = false)
+    {
+        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown);
+    }
+
+    /**
+     * This function expects $args to start with the script name (POSIX-style).
+     * Preserved for backwards compatibility.
+     *
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     *
+     * @see getopt2()
+     * @return array two-element array containing the list of parsed options and
+     * the non-option arguments
+     */
+    public static function getopt($args, $short_options, $long_options = null, $skip_unknown = false)
+    {
+        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown);
+    }
+
+    /**
+     * The actual implementation of the argument parsing code.
+     *
+     * @param int    $version       Version to use
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
+     *
+     * @return array
+     */
+    public static function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false)
+    {
+        // in case you pass directly readPHPArgv() as the first arg
+        if (PEAR::isError($args)) {
+            return $args;
+        }
+
+        if (empty($args)) {
+            return array(array(), array());
+        }
+
+        $non_opts = $opts = array();
+
+        settype($args, 'array');
+
+        if ($long_options) {
+            sort($long_options);
+        }
+
+        /*
+         * Preserve backwards compatibility with callers that relied on
+         * erroneous POSIX fix.
+         */
+        if ($version < 2) {
+            if (isset($args[0]{0}) && $args[0]{0} != '-') {
+                array_shift($args);
+            }
+        }
+
+        reset($args);
+        while (list($i, $arg) = each($args)) {
+            /* The special element '--' means explicit end of
+               options. Treat the rest of the arguments as non-options
+               and end the loop. */
+            if ($arg == '--') {
+                $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
+                break;
+            }
+
+            if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
+                $non_opts = array_merge($non_opts, array_slice($args, $i));
+                break;
+            } elseif (strlen($arg) > 1 && $arg{1} == '-') {
+                $error = Console_Getopt::_parseLongOption(substr($arg, 2),
+                                                          $long_options,
+                                                          $opts,
+                                                          $args,
+                                                          $skip_unknown);
+                if (PEAR::isError($error)) {
+                    return $error;
+                }
+            } elseif ($arg == '-') {
+                // - is stdin
+                $non_opts = array_merge($non_opts, array_slice($args, $i));
+                break;
+            } else {
+                $error = Console_Getopt::_parseShortOption(substr($arg, 1),
+                                                           $short_options,
+                                                           $opts,
+                                                           $args,
+                                                           $skip_unknown);
+                if (PEAR::isError($error)) {
+                    return $error;
+                }
+            }
+        }
+
+        return array($opts, $non_opts);
+    }
+
+    /**
+     * Parse short option
+     *
+     * @param string     $arg           Argument
+     * @param string[]   $short_options Available short options
+     * @param string[][] &$opts
+     * @param string[]   &$args
+     * @param boolean    $skip_unknown suppresses Console_Getopt: unrecognized option
+     *
+     * @return void
+     */
+    protected static function _parseShortOption($arg, $short_options, &$opts, &$args, $skip_unknown)
+    {
+        for ($i = 0; $i < strlen($arg); $i++) {
+            $opt     = $arg{$i};
+            $opt_arg = null;
+
+            /* Try to find the short option in the specifier string. */
+            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') {
+                if ($skip_unknown === true) {
+                    break;
+                }
+
+                $msg = "Console_Getopt: unrecognized option -- $opt";
+                return PEAR::raiseError($msg);
+            }
+
+            if (strlen($spec) > 1 && $spec{1} == ':') {
+                if (strlen($spec) > 2 && $spec{2} == ':') {
+                    if ($i + 1 < strlen($arg)) {
+                        /* Option takes an optional argument. Use the remainder of
+                           the arg string if there is anything left. */
+                        $opts[] = array($opt, substr($arg, $i + 1));
+                        break;
+                    }
+                } else {
+                    /* Option requires an argument. Use the remainder of the arg
+                       string if there is anything left. */
+                    if ($i + 1 < strlen($arg)) {
+                        $opts[] = array($opt,  substr($arg, $i + 1));
+                        break;
+                    } else if (list(, $opt_arg) = each($args)) {
+                        /* Else use the next argument. */;
+                        if (Console_Getopt::_isShortOpt($opt_arg)
+                            || Console_Getopt::_isLongOpt($opt_arg)) {
+                            $msg = "option requires an argument --$opt";
+                            return PEAR::raiseError("Console_Getopt: " . $msg);
+                        }
+                    } else {
+                        $msg = "option requires an argument --$opt";
+                        return PEAR::raiseError("Console_Getopt: " . $msg);
+                    }
+                }
+            }
+
+            $opts[] = array($opt, $opt_arg);
+        }
+    }
+
+    /**
+     * Checks if an argument is a short option
+     *
+     * @param string $arg Argument to check
+     *
+     * @return bool
+     */
+    protected static function _isShortOpt($arg)
+    {
+        return strlen($arg) == 2 && $arg[0] == '-'
+               && preg_match('/[a-zA-Z]/', $arg[1]);
+    }
+
+    /**
+     * Checks if an argument is a long option
+     *
+     * @param string $arg Argument to check
+     *
+     * @return bool
+     */
+    protected static function _isLongOpt($arg)
+    {
+        return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' &&
+               preg_match('/[a-zA-Z]+$/', substr($arg, 2));
+    }
+
+    /**
+     * Parse long option
+     *
+     * @param string     $arg          Argument
+     * @param string[]   $long_options Available long options
+     * @param string[][] &$opts
+     * @param string[]   &$args
+     *
+     * @return void|PEAR_Error
+     */
+    protected static function _parseLongOption($arg, $long_options, &$opts, &$args, $skip_unknown)
+    {
+        @list($opt, $opt_arg) = explode('=', $arg, 2);
+
+        $opt_len = strlen($opt);
+
+        for ($i = 0; $i < count($long_options); $i++) {
+            $long_opt  = $long_options[$i];
+            $opt_start = substr($long_opt, 0, $opt_len);
+
+            $long_opt_name = str_replace('=', '', $long_opt);
+
+            /* Option doesn't match. Go on to the next one. */
+            if ($long_opt_name != $opt) {
+                continue;
+            }
+
+            $opt_rest = substr($long_opt, $opt_len);
+
+            /* Check that the options uniquely matches one of the allowed
+               options. */
+            if ($i + 1 < count($long_options)) {
+                $next_option_rest = substr($long_options[$i + 1], $opt_len);
+            } else {
+                $next_option_rest = '';
+            }
+
+            if ($opt_rest != '' && $opt{0} != '=' &&
+                $i + 1 < count($long_options) &&
+                $opt == substr($long_options[$i+1], 0, $opt_len) &&
+                $next_option_rest != '' &&
+                $next_option_rest{0} != '=') {
+
+                $msg = "Console_Getopt: option --$opt is ambiguous";
+                return PEAR::raiseError($msg);
+            }
+
+            if (substr($long_opt, -1) == '=') {
+                if (substr($long_opt, -2) != '==') {
+                    /* Long option requires an argument.
+                       Take the next argument if one wasn't specified. */;
+                    if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
+                        $msg = "Console_Getopt: option requires an argument --$opt";
+                        return PEAR::raiseError($msg);
+                    }
+
+                    if (Console_Getopt::_isShortOpt($opt_arg)
+                        || Console_Getopt::_isLongOpt($opt_arg)) {
+                        $msg = "Console_Getopt: option requires an argument --$opt";
+                        return PEAR::raiseError($msg);
+                    }
+                }
+            } else if ($opt_arg) {
+                $msg = "Console_Getopt: option --$opt doesn't allow an argument";
+                return PEAR::raiseError($msg);
+            }
+
+            $opts[] = array('--' . $opt, $opt_arg);
+            return;
+        }
+
+        if ($skip_unknown === true) {
+            return;
+        }
+
+        return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
+    }
+
+    /**
+     * Safely read the $argv PHP array across different PHP configurations.
+     * Will take care on register_globals and register_argc_argv ini directives
+     *
+     * @return mixed the $argv PHP array or PEAR error if not registered
+     */
+    public static function readPHPArgv()
+    {
+        global $argv;
+        if (!is_array($argv)) {
+            if (!@is_array($_SERVER['argv'])) {
+                if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
+                    $msg = "Could not read cmd args (register_argc_argv=Off?)";
+                    return PEAR::raiseError("Console_Getopt: " . $msg);
+                }
+                return $GLOBALS['HTTP_SERVER_VARS']['argv'];
+            }
+            return $_SERVER['argv'];
+        }
+        return $argv;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+Copyright (c) 2001-2015, The PEAR developers
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/README.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+*******************************************
+Console_Getopt - Command-line option parser
+*******************************************
+
+This is a PHP implementation of "getopt" supporting both short and long options.
+It helps parsing command line options in your PHP script.
+
+Homepage: http://pear.php.net/package/Console_Getopt
+
+.. image:: https://travis-ci.org/pear/Console_Getopt.svg?branch=master
+    :target: https://travis-ci.org/pear/Console_Getopt
+
+
+Alternatives
+============
+
+* Console_CommandLine__ (recommended)
+* Console_GetoptPlus__
+
+__ http://pear.php.net/package/Console_CommandLine
+__ http://pear.php.net/package/Console_GetoptPlus
+
+
+License
+=======
+BSD-2-Clause
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,35 @@
+{
+    "authors": [
+        {
+            "email": "andrei@php.net",
+            "name": "Andrei Zmievski",
+            "role": "Lead"
+        },
+        {
+            "email": "stig@php.net",
+            "name": "Stig Bakken",
+            "role": "Developer"
+        },
+        {
+            "email": "cellog@php.net",
+            "name": "Greg Beaver",
+            "role": "Helper"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Console": "./"
+        }
+    },
+    "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+    "include-path": [
+        "./"
+    ],
+    "license": "BSD-2-Clause",
+    "name": "pear/console_getopt",
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
+        "source": "https://github.com/pear/Console_Getopt"
+    },
+    "type": "library"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Console_Getopt</name>
+ <channel>pear.php.net</channel>
+ <summary>Command-line option parser</summary>
+ <description>This is a PHP implementation of &quot;getopt&quot; supporting both
+short and long options.</description>
+ <lead>
+  <name>Andrei Zmievski</name>
+  <user>andrei</user>
+  <email>andrei@php.net</email>
+  <active>no</active>
+ </lead>
+ <developer>
+  <name>Stig Bakken</name>
+  <user>ssb</user>
+  <email>stig@php.net</email>
+  <active>no</active>
+ </developer>
+ <helper>
+  <name>Greg Beaver</name>
+  <user>cellog</user>
+  <email>cellog@php.net</email>
+  <active>yes</active>
+ </helper>
+
+ <date>2015-07-20</date>
+ <time>22:21:23</time>
+ <version>
+  <release>1.4.1</release>
+  <api>1.4.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
+
+ <notes>
+* Fix unit test on PHP 7 [cweiske]
+ </notes>
+
+ <contents>
+  <dir name="/">
+   <dir name="Console">
+    <file name="Getopt.php" role="php" />
+   </dir>
+   <dir name="tests">
+    <file role="test" name="001-getopt.phpt" />
+    <file role="test" name="bug10557.phpt" />
+    <file role="test" name="bug11068.phpt" />
+    <file role="test" name="bug13140.phpt" />
+   </dir>
+  </dir>
+ </contents>
+
+ <compatible>
+  <name>PEAR</name>
+  <channel>pear.php.net</channel>
+  <min>1.4.0</min>
+  <max>1.999.999</max>
+ </compatible>
+
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.8.0</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+
+ <phprelease />
+
+ <changelog>
+
+  <release>
+    <date>2015-07-20</date>
+    <version>
+     <release>1.4.1</release>
+     <api>1.4.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
+    <notes>
+     * Fix unit test on PHP 7 [cweiske]
+    </notes>
+  </release>
+
+  <release>
+    <date>2015-02-22</date>
+    <version>
+     <release>1.4.0</release>
+     <api>1.4.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
+    <notes>
+     * Change license to BSD-2-Clause
+     * Set minimum PHP version to 5.4.0
+     * Mark static methods with "static" keyword
+    </notes>
+  </release>
+
+  <release>
+    <date>2011-03-07</date>
+    <version>
+     <release>1.3.1</release>
+     <api>1.3.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <license uri="http://www.php.net/license">PHP License</license>
+    <notes>
+     * Change the minimum PEAR installer dep to be lower
+    </notes>
+  </release>
+
+  <release>
+    <date>2010-12-11</date>
+    <time>20:20:13</time>
+    <version>
+     <release>1.3.0</release>
+     <api>1.3.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <license uri="http://www.php.net/license">PHP License</license>
+    <notes>
+   * Implement Request #13140: [PATCH] to skip unknown parameters. [patch by rquadling, improved on by dufuz]
+    </notes>
+  </release>
+
+  <release>
+   <date>2007-06-12</date>
+   <version>
+    <release>1.2.3</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+* fix Bug #11068: No way to read plain &quot;-&quot; option [cardoe]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.2</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-02-17</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name.
+* fix Bug #10055: Not failing properly on short options missing required values
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.1</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2006-12-08</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag)
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2</release>
+    <api>1.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-12-11</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Fix to preserve BC with 1.0 and allow correct behaviour for new users
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.0</release>
+    <api>1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2002-09-13</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Stable release
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.11</release>
+    <api>0.11</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2002-05-26</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+POSIX getopt compatibility fix: treat first element of args
+        array as command name
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.10</release>
+    <api>0.10</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2002-05-12</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Packaging fix
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.9</release>
+    <api>0.9</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2002-05-12</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Initial release
+   </notes>
+  </release>
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/tests/001-getopt.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,63 @@
+--TEST--
+Console_Getopt
+--FILE--
+<?php
+require_once 'Console/Getopt.php';
+PEAR::setErrorHandling(PEAR_ERROR_PRINT, "%s\n\n");
+
+function test($argstr, $optstr) {
+    $argv = preg_split('/[[:space:]]+/', $argstr);
+    if (PEAR::isError($options = Console_Getopt::getopt($argv, $optstr))) {
+        return;
+    }
+    $opts = $options[0];
+    $non_opts = $options[1];
+    $i = 0;
+    print "options: ";
+    foreach ($opts as $o => $d) {
+        if ($i++ > 0) {
+            print ", ";
+        }
+        print $d[0] . '=' . $d[1];
+    }
+    print "\n";
+    print "params: " . implode(", ", $non_opts) . "\n";
+    print "\n";
+}
+
+test("-abc", "abc");
+test("-abc foo", "abc");
+test("-abc foo", "abc:");
+test("-abc foo bar gazonk", "abc");
+test("-abc foo bar gazonk", "abc:");
+test("-a -b -c", "abc");
+test("-a -b -c", "abc:");
+test("-abc", "ab:c");
+test("-abc foo -bar gazonk", "abc");
+?>
+--EXPECT--
+options: a=, b=, c=
+params: 
+
+options: a=, b=, c=
+params: foo
+
+options: a=, b=, c=foo
+params: 
+
+options: a=, b=, c=
+params: foo, bar, gazonk
+
+options: a=, b=, c=foo
+params: bar, gazonk
+
+options: a=, b=, c=
+params: 
+
+Console_Getopt: option requires an argument --c
+
+options: a=, b=c
+params: 
+
+options: a=, b=, c=
+params: foo, -bar, gazonk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/tests/bug10557.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Console_Getopt [bug 10557]
+--SKIPIF--
+--FILE--
+<?php
+$_SERVER['argv'] =
+$argv = array('hi', '-fjjohnston@mail.com', '--to', '--mailpack', '--debug');
+require_once 'Console/Getopt.php';
+$ret = Console_Getopt::getopt(Console_Getopt::readPHPArgv(), 'f:t:',
+array('from=','to=','mailpack=','direction=','verbose','debug'));
+if(PEAR::isError($ret))
+{
+	echo $ret->getMessage()."\n";
+	echo 'FATAL';
+	exit;
+}
+
+print_r($ret);
+?>
+--EXPECT--
+Console_Getopt: option requires an argument --to
+FATAL
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/tests/bug11068.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,44 @@
+--TEST--
+Console_Getopt [bug 11068]
+--SKIPIF--
+--FILE--
+<?php
+$_SERVER['argv'] =
+$argv = array('hi', '-fjjohnston@mail.com', '--to', 'hi', '-');
+require_once 'Console/Getopt.php';
+$ret = Console_Getopt::getopt(Console_Getopt::readPHPArgv(), 'f:t:',
+array('from=','to=','mailpack=','direction=','verbose','debug'));
+if(PEAR::isError($ret))
+{
+	echo $ret->getMessage()."\n";
+	echo 'FATAL';
+	exit;
+}
+
+print_r($ret);
+?>
+--EXPECT--
+Array
+(
+    [0] => Array
+        (
+            [0] => Array
+                (
+                    [0] => f
+                    [1] => jjohnston@mail.com
+                )
+
+            [1] => Array
+                (
+                    [0] => --to
+                    [1] => hi
+                )
+
+        )
+
+    [1] => Array
+        (
+            [0] => -
+        )
+
+)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/console_getopt/tests/bug13140.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,75 @@
+--TEST--
+Console_Getopt [bug 13140]
+--SKIPIF--
+--FILE--
+<?php
+$_SERVER['argv'] = $argv =
+    array('--bob', '--foo' , '-bar', '--test', '-rq', 'thisshouldbehere');
+
+require_once 'Console/Getopt.php';
+$cg = new Console_GetOpt();
+
+print_r($cg->getopt2($cg->readPHPArgv(), 't', array('test'), true));
+print_r($cg->getopt2($cg->readPHPArgv(), 'bar', array('foo'), true));
+?>
+--EXPECT--
+Array
+(
+    [0] => Array
+        (
+            [0] => Array
+                (
+                    [0] => --test
+                    [1] => 
+                )
+
+        )
+
+    [1] => Array
+        (
+            [0] => thisshouldbehere
+        )
+
+)
+Array
+(
+    [0] => Array
+        (
+            [0] => Array
+                (
+                    [0] => --foo
+                    [1] => 
+                )
+
+            [1] => Array
+                (
+                    [0] => b
+                    [1] => 
+                )
+
+            [2] => Array
+                (
+                    [0] => a
+                    [1] => 
+                )
+
+            [3] => Array
+                (
+                    [0] => r
+                    [1] => 
+                )
+
+            [4] => Array
+                (
+                    [0] => r
+                    [1] => 
+                )
+
+        )
+
+    [1] => Array
+        (
+            [0] => thisshouldbehere
+        )
+
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+# composer related
+composer.lock
+composer.phar
+vendor
+tests/config.php
+tests/test-keychain/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,12 @@
+language: php
+php:
+  - 7
+  - 5.6
+  - 5.5
+  - 5.4
+before_install:
+  - sudo apt-get update -qq
+  - sudo apt-get install -y gnupg-agent
+script:
+  - cd tests
+  - phpunit --coverage-text .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2065 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Crypt_GPG is a package to use GPG from PHP
+ *
+ * This package provides an object oriented interface to GNU Privacy
+ * Guard (GPG). It requires the GPG executable to be on the system.
+ *
+ * Though GPG can support symmetric-key cryptography, this package is intended
+ * only to facilitate public-key cryptography.
+ *
+ * This file contains the main GPG class. The class in this file lets you
+ * encrypt, decrypt, sign and verify data; import and delete keys; and perform
+ * other useful GPG tasks.
+ *
+ * Example usage:
+ * <code>
+ * <?php
+ * // encrypt some data
+ * $gpg = new Crypt_GPG();
+ * $gpg->addEncryptKey($mySecretKeyId);
+ * $encryptedData = $gpg->encrypt($data);
+ * ?>
+ * </code>
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * Base class for GPG methods
+ */
+require_once 'Crypt/GPGAbstract.php';
+
+/**
+ * GPG exception classes.
+ */
+require_once 'Crypt/GPG/Exceptions.php';
+
+// {{{ class Crypt_GPG
+
+/**
+ * A class to use GPG from PHP
+ *
+ * This class provides an object oriented interface to GNU Privacy Guard (GPG).
+ *
+ * Though GPG can support symmetric-key cryptography, this class is intended
+ * only to facilitate public-key cryptography.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+class Crypt_GPG extends Crypt_GPGAbstract
+{
+    // {{{ class constants for data signing modes
+
+    /**
+     * Signing mode for normal signing of data. The signed message will not
+     * be readable without special software.
+     *
+     * This is the default signing mode.
+     *
+     * @see Crypt_GPG::sign()
+     * @see Crypt_GPG::signFile()
+     */
+    const SIGN_MODE_NORMAL = 1;
+
+    /**
+     * Signing mode for clearsigning data. Clearsigned signatures are ASCII
+     * armored data and are readable without special software. If the signed
+     * message is unencrypted, the message will still be readable. The message
+     * text will be in the original encoding.
+     *
+     * @see Crypt_GPG::sign()
+     * @see Crypt_GPG::signFile()
+     */
+    const SIGN_MODE_CLEAR = 2;
+
+    /**
+     * Signing mode for creating a detached signature. When using detached
+     * signatures, only the signature data is returned. The original message
+     * text may be distributed separately from the signature data. This is
+     * useful for miltipart/signed email messages as per
+     * {@link http://www.ietf.org/rfc/rfc3156.txt RFC 3156}.
+     *
+     * @see Crypt_GPG::sign()
+     * @see Crypt_GPG::signFile()
+     */
+    const SIGN_MODE_DETACHED = 3;
+
+    // }}}
+    // {{{ class constants for fingerprint formats
+
+    /**
+     * No formatting is performed.
+     *
+     * Example: C3BC615AD9C766E5A85C1F2716D27458B1BBA1C4
+     *
+     * @see Crypt_GPG::getFingerprint()
+     */
+    const FORMAT_NONE = 1;
+
+    /**
+     * Fingerprint is formatted in the format used by the GnuPG gpg command's
+     * default output.
+     *
+     * Example: C3BC 615A D9C7 66E5 A85C  1F27 16D2 7458 B1BB A1C4
+     *
+     * @see Crypt_GPG::getFingerprint()
+     */
+    const FORMAT_CANONICAL = 2;
+
+    /**
+     * Fingerprint is formatted in the format used when displaying X.509
+     * certificates
+     *
+     * Example: C3:BC:61:5A:D9:C7:66:E5:A8:5C:1F:27:16:D2:74:58:B1:BB:A1:C4
+     *
+     * @see Crypt_GPG::getFingerprint()
+     */
+    const FORMAT_X509 = 3;
+
+    // }}}
+    // {{{ class constants for boolean options
+
+    /**
+     * Use to specify ASCII armored mode for returned data
+     */
+    const ARMOR_ASCII = true;
+
+    /**
+     * Use to specify binary mode for returned data
+     */
+    const ARMOR_BINARY = false;
+
+    /**
+     * Use to specify that line breaks in signed text should be normalized
+     */
+    const TEXT_NORMALIZED = true;
+
+    /**
+     * Use to specify that line breaks in signed text should not be normalized
+     */
+    const TEXT_RAW = false;
+
+    // }}}
+    // {{{ protected class properties
+
+    /**
+     * Keys used to encrypt
+     *
+     * The array is of the form:
+     * <code>
+     * array(
+     *   $key_id => array(
+     *     'fingerprint' => $fingerprint,
+     *     'passphrase'  => null
+     *   )
+     * );
+     * </code>
+     *
+     * @var array
+     * @see Crypt_GPG::addEncryptKey()
+     * @see Crypt_GPG::clearEncryptKeys()
+     */
+    protected $encryptKeys = array();
+
+    /**
+     * Keys used to decrypt
+     *
+     * The array is of the form:
+     * <code>
+     * array(
+     *   $key_id => array(
+     *     'fingerprint' => $fingerprint,
+     *     'passphrase'  => $passphrase
+     *   )
+     * );
+     * </code>
+     *
+     * @var array
+     * @see Crypt_GPG::addSignKey()
+     * @see Crypt_GPG::clearSignKeys()
+     */
+    protected $signKeys = array();
+
+    /**
+     * Keys used to sign
+     *
+     * The array is of the form:
+     * <code>
+     * array(
+     *   $key_id => array(
+     *     'fingerprint' => $fingerprint,
+     *     'passphrase'  => $passphrase
+     *   )
+     * );
+     * </code>
+     *
+     * @var array
+     * @see Crypt_GPG::addDecryptKey()
+     * @see Crypt_GPG::clearDecryptKeys()
+     */
+    protected $decryptKeys = array();
+
+    /**
+     * Passphrases used on import/export of private keys in GnuPG 2.1
+     *
+     * The array is of the form:
+     * <code>
+     * array($key_id => $passphrase);
+     * </code>
+     *
+     * @var array
+     * @see Crypt_GPG::addPassphrase()
+     * @see Crypt_GPG::clearPassphrases()
+     */
+    protected $passphrases = array();
+
+    // }}}
+    // {{{ importKey()
+
+    /**
+     * Imports a public or private key into the keyring
+     *
+     * Keys may be removed from the keyring using
+     * {@link Crypt_GPG::deletePublicKey()} or
+     * {@link Crypt_GPG::deletePrivateKey()}.
+     *
+     * @param string $data the key data to be imported.
+     *
+     * @return array an associative array containing the following elements:
+     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
+     *                                                imported key,
+     *               - <kbd>public_imported</kbd>   - the number of public
+     *                                                keys imported,
+     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
+     *                                                public keys,
+     *               - <kbd>private_imported</kbd>  - the number of private
+     *                                                keys imported,
+     *               - <kbd>private_unchanged</kbd> - the number of unchanged
+     *                                                private keys.
+     *
+     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
+     *         data is is not valid key data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addPassphrase()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG::addPassphrase()
+     * @see Crypt_GPG::clearPassphrases()
+     */
+    public function importKey($data)
+    {
+        return $this->_importKey($data, false);
+    }
+
+    // }}}
+    // {{{ importKeyFile()
+
+    /**
+     * Imports a public or private key file into the keyring
+     *
+     * Keys may be removed from the keyring using
+     * {@link Crypt_GPG::deletePublicKey()} or
+     * {@link Crypt_GPG::deletePrivateKey()}.
+     *
+     * @param string $filename the key file to be imported.
+     *
+     * @return array an associative array containing the following elements:
+     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
+     *                                                imported key,
+     *               - <kbd>public_imported</kbd>   - the number of public
+     *                                                keys imported,
+     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
+     *                                                public keys,
+     *               - <kbd>private_imported</kbd>  - the number of private
+     *                                                keys imported,
+     *               - <kbd>private_unchanged</kbd> - the number of unchanged
+     *                                                private keys.
+     *                                                  private keys.
+     *
+     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
+     *         data is is not valid key data.
+     *
+     * @throws Crypt_GPG_FileException if the key file is not readable.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addPassphrase()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function importKeyFile($filename)
+    {
+        return $this->_importKey($filename, true);
+    }
+
+    // }}}
+    // {{{ exportPrivateKey()
+
+    /**
+     * Exports a private key from the keyring
+     *
+     * The exported key remains on the keyring. To delete the key, use
+     * {@link Crypt_GPG::deletePrivateKey()}.
+     *
+     * If more than one key fingerprint is available for the specified
+     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
+     * first private key is exported.
+     *
+     * @param string  $keyId either the full uid of the private key, the email
+     *                       part of the uid of the private key or the key id of
+     *                       the private key. For example,
+     *                       "Test User (example) <test@example.com>",
+     *                       "test@example.com" or a hexadecimal string.
+     * @param boolean $armor optional. If true, ASCII armored data is returned;
+     *                       otherwise, binary data is returned. Defaults to
+     *                       true.
+     *
+     * @return string the private key data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if a private key with the given
+     *         <kbd>$keyId</kbd> is not found.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addPassphrase()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function exportPrivateKey($keyId, $armor = true)
+    {
+        return $this->_exportKey($keyId, $armor, true);
+    }
+
+    // }}}
+    // {{{ exportPublicKey()
+
+    /**
+     * Exports a public key from the keyring
+     *
+     * The exported key remains on the keyring. To delete the public key, use
+     * {@link Crypt_GPG::deletePublicKey()}.
+     *
+     * If more than one key fingerprint is available for the specified
+     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
+     * first public key is exported.
+     *
+     * @param string  $keyId either the full uid of the public key, the email
+     *                       part of the uid of the public key or the key id of
+     *                       the public key. For example,
+     *                       "Test User (example) <test@example.com>",
+     *                       "test@example.com" or a hexadecimal string.
+     * @param boolean $armor optional. If true, ASCII armored data is returned;
+     *                       otherwise, binary data is returned. Defaults to
+     *                       true.
+     *
+     * @return string the public key data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
+     *         <kbd>$keyId</kbd> is not found.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function exportPublicKey($keyId, $armor = true)
+    {
+        return $this->_exportKey($keyId, $armor, false);
+    }
+
+    // }}}
+    // {{{ deletePublicKey()
+
+    /**
+     * Deletes a public key from the keyring
+     *
+     * If more than one key fingerprint is available for the specified
+     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
+     * first public key is deleted.
+     *
+     * The private key must be deleted first or an exception will be thrown.
+     * In GnuPG >= 2.1 this limitation does not exist.
+     * See {@link Crypt_GPG::deletePrivateKey()}.
+     *
+     * @param string $keyId either the full uid of the public key, the email
+     *                      part of the uid of the public key or the key id of
+     *                      the public key. For example,
+     *                      "Test User (example) <test@example.com>",
+     *                      "test@example.com" or a hexadecimal string.
+     *
+     * @return void
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
+     *         <kbd>$keyId</kbd> is not found.
+     *
+     * @throws Crypt_GPG_DeletePrivateKeyException if the specified public key
+     *         has an associated private key on the keyring. The private key
+     *         must be deleted first (when using GnuPG < 2.1).
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function deletePublicKey($keyId)
+    {
+        $fingerprint = $this->getFingerprint($keyId);
+
+        if ($fingerprint === null) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'Public key not found: ' . $keyId,
+                self::ERROR_KEY_NOT_FOUND,
+                $keyId
+            );
+        }
+
+        $operation = '--delete-key ' . escapeshellarg($fingerprint);
+        $arguments = array(
+            '--batch',
+            '--yes'
+        );
+
+        $this->engine->reset();
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+    }
+
+    // }}}
+    // {{{ deletePrivateKey()
+
+    /**
+     * Deletes a private key from the keyring
+     *
+     * If more than one key fingerprint is available for the specified
+     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
+     * first private key is deleted.
+     *
+     * Calls GPG with the <kbd>--delete-secret-key</kbd> command.
+     *
+     * @param string $keyId either the full uid of the private key, the email
+     *                      part of the uid of the private key or the key id of
+     *                      the private key. For example,
+     *                      "Test User (example) <test@example.com>",
+     *                      "test@example.com" or a hexadecimal string.
+     *
+     * @return void
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if a private key with the given
+     *         <kbd>$keyId</kbd> is not found.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function deletePrivateKey($keyId)
+    {
+        $fingerprint = $this->getFingerprint($keyId);
+
+        if ($fingerprint === null) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'Private key not found: ' . $keyId,
+                self::ERROR_KEY_NOT_FOUND,
+                $keyId
+            );
+        }
+
+        $operation = '--delete-secret-key ' . escapeshellarg($fingerprint);
+        $arguments = array(
+            '--batch',
+            '--yes'
+        );
+
+        $this->engine->reset();
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+    }
+
+    // }}}
+    // {{{ getKeys()
+
+    /**
+     * Gets the available keys in the keyring
+     *
+     * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
+     * the first section of <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
+     * description of how the GPG command output is parsed.
+     *
+     * @param string $keyId optional. Only keys with that match the specified
+     *                      pattern are returned. The pattern may be part of
+     *                      a user id, a key id or a key fingerprint. If not
+     *                      specified, all keys are returned.
+     *
+     * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
+     *               match the specified <kbd>$keyId</kbd> an empty array is
+     *               returned.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Key
+     */
+    public function getKeys($keyId = '')
+    {
+        return parent::_getKeys($keyId);
+    }
+
+    // }}}
+    // {{{ getFingerprint()
+
+    /**
+     * Gets a key fingerprint from the keyring
+     *
+     * If more than one key fingerprint is available (for example, if you use
+     * a non-unique user id) only the first key fingerprint is returned.
+     *
+     * Calls the GPG <kbd>--list-keys</kbd> command with the
+     * <kbd>--with-fingerprint</kbd> option to retrieve a public key
+     * fingerprint.
+     *
+     * @param string  $keyId  either the full user id of the key, the email
+     *                        part of the user id of the key, or the key id of
+     *                        the key. For example,
+     *                        "Test User (example) <test@example.com>",
+     *                        "test@example.com" or a hexadecimal string.
+     * @param integer $format optional. How the fingerprint should be formatted.
+     *                        Use {@link Crypt_GPG::FORMAT_X509} for X.509
+     *                        certificate format,
+     *                        {@link Crypt_GPG::FORMAT_CANONICAL} for the format
+     *                        used by GnuPG output and
+     *                        {@link Crypt_GPG::FORMAT_NONE} for no formatting.
+     *                        Defaults to <code>Crypt_GPG::FORMAT_NONE</code>.
+     *
+     * @return string the fingerprint of the key, or null if no fingerprint
+     *                is found for the given <kbd>$keyId</kbd>.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function getFingerprint($keyId, $format = self::FORMAT_NONE)
+    {
+        $output    = '';
+        $operation = '--list-keys ' . escapeshellarg($keyId);
+        $arguments = array(
+            '--with-colons',
+            '--with-fingerprint'
+        );
+
+        $this->engine->reset();
+        $this->engine->setOutput($output);
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        $fingerprint = null;
+
+        foreach (explode(PHP_EOL, $output) as $line) {
+            if (mb_substr($line, 0, 3, '8bit') == 'fpr') {
+                $lineExp     = explode(':', $line);
+                $fingerprint = $lineExp[9];
+
+                switch ($format) {
+                case self::FORMAT_CANONICAL:
+                    $fingerprintExp = str_split($fingerprint, 4);
+                    $format         = '%s %s %s %s %s  %s %s %s %s %s';
+                    $fingerprint    = vsprintf($format, $fingerprintExp);
+                    break;
+
+                case self::FORMAT_X509:
+                    $fingerprintExp = str_split($fingerprint, 2);
+                    $fingerprint    = implode(':', $fingerprintExp);
+                    break;
+                }
+
+                break;
+            }
+        }
+
+        return $fingerprint;
+    }
+
+    // }}}
+    // {{{ getLastSignatureInfo()
+
+    /**
+     * Get information about the last signature that was created.
+     *
+     * @return Crypt_GPG_SignatureCreationInfo
+     */
+    public function getLastSignatureInfo()
+    {
+        return $this->engine->getProcessData('SignatureInfo');
+    }
+
+    // }}}
+    // {{{ encrypt()
+
+    /**
+     * Encrypts string data
+     *
+     * Data is ASCII armored by default but may optionally be returned as
+     * binary.
+     *
+     * @param string  $data  the data to be encrypted.
+     * @param boolean $armor optional. If true, ASCII armored data is returned;
+     *                       otherwise, binary data is returned. Defaults to
+     *                       true.
+     *
+     * @return string the encrypted data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
+     *         See {@link Crypt_GPG::addEncryptKey()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @sensitive $data
+     */
+    public function encrypt($data, $armor = self::ARMOR_ASCII)
+    {
+        return $this->_encrypt($data, false, null, $armor);
+    }
+
+    // }}}
+    // {{{ encryptFile()
+
+    /**
+     * Encrypts a file
+     *
+     * Encrypted data is ASCII armored by default but may optionally be saved
+     * as binary.
+     *
+     * @param string  $filename      the filename of the file to encrypt.
+     * @param string  $encryptedFile optional. The filename of the file in
+     *                               which to store the encrypted data. If null
+     *                               or unspecified, the encrypted data is
+     *                               returned as a string.
+     * @param boolean $armor         optional. If true, ASCII armored data is
+     *                               returned; otherwise, binary data is
+     *                               returned. Defaults to true.
+     *
+     * @return void|string if the <kbd>$encryptedFile</kbd> parameter is null,
+     *                     a string containing the encrypted data is returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
+     *         See {@link Crypt_GPG::addEncryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function encryptFile(
+        $filename,
+        $encryptedFile = null,
+        $armor = self::ARMOR_ASCII
+    ) {
+        return $this->_encrypt($filename, true, $encryptedFile, $armor);
+    }
+
+    // }}}
+    // {{{ encryptAndSign()
+
+    /**
+     * Encrypts and signs data
+     *
+     * Data is encrypted and signed in a single pass.
+     *
+     * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
+     * encrypted-signed data without decrypting it at the same time. If you try
+     * to use {@link Crypt_GPG::verify()} method on encrypted-signed data with
+     * earlier GnuPG versions, you will get an error. Please use
+     * {@link Crypt_GPG::decryptAndVerify()} to verify encrypted-signed data.
+     *
+     * @param string  $data  the data to be encrypted and signed.
+     * @param boolean $armor optional. If true, ASCII armored data is returned;
+     *                       otherwise, binary data is returned. Defaults to
+     *                       true.
+     *
+     * @return string the encrypted signed data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
+     *         or if no signing key is specified. See
+     *         {@link Crypt_GPG::addEncryptKey()} and
+     *         {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG::decryptAndVerify()
+     */
+    public function encryptAndSign($data, $armor = self::ARMOR_ASCII)
+    {
+        return $this->_encryptAndSign($data, false, null, $armor);
+    }
+
+    // }}}
+    // {{{ encryptAndSignFile()
+
+    /**
+     * Encrypts and signs a file
+     *
+     * The file is encrypted and signed in a single pass.
+     *
+     * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
+     * encrypted-signed files without decrypting them at the same time. If you
+     * try to use {@link Crypt_GPG::verify()} method on encrypted-signed files
+     * with earlier GnuPG versions, you will get an error. Please use
+     * {@link Crypt_GPG::decryptAndVerifyFile()} to verify encrypted-signed
+     * files.
+     *
+     * @param string  $filename   the name of the file containing the data to
+     *                            be encrypted and signed.
+     * @param string  $signedFile optional. The name of the file in which the
+     *                            encrypted, signed data should be stored. If
+     *                            null or unspecified, the encrypted, signed
+     *                            data is returned as a string.
+     * @param boolean $armor      optional. If true, ASCII armored data is
+     *                            returned; otherwise, binary data is returned.
+     *                            Defaults to true.
+     *
+     * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
+     *                     string containing the encrypted, signed data is
+     *                     returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
+     *         or if no signing key is specified. See
+     *         {@link Crypt_GPG::addEncryptKey()} and
+     *         {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG::decryptAndVerifyFile()
+     */
+    public function encryptAndSignFile(
+        $filename,
+        $signedFile = null,
+        $armor = self::ARMOR_ASCII
+    ) {
+        return $this->_encryptAndSign($filename, true, $signedFile, $armor);
+    }
+
+    // }}}
+    // {{{ decrypt()
+
+    /**
+     * Decrypts string data
+     *
+     * This method assumes the required private key is available in the keyring
+     * and throws an exception if the private key is not available. To add a
+     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
+     * {@link Crypt_GPG::importKeyFile()} methods.
+     *
+     * @param string $encryptedData the data to be decrypted.
+     *
+     * @return string the decrypted data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function decrypt($encryptedData)
+    {
+        return $this->_decrypt($encryptedData, false, null);
+    }
+
+    // }}}
+    // {{{ decryptFile()
+
+    /**
+     * Decrypts a file
+     *
+     * This method assumes the required private key is available in the keyring
+     * and throws an exception if the private key is not available. To add a
+     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
+     * {@link Crypt_GPG::importKeyFile()} methods.
+     *
+     * @param string $encryptedFile the name of the encrypted file data to
+     *                              decrypt.
+     * @param string $decryptedFile optional. The name of the file to which the
+     *                              decrypted data should be written. If null
+     *                              or unspecified, the decrypted data is
+     *                              returned as a string.
+     *
+     * @return void|string if the <kbd>$decryptedFile</kbd> parameter is null,
+     *                     a string containing the decrypted data is returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function decryptFile($encryptedFile, $decryptedFile = null)
+    {
+        return $this->_decrypt($encryptedFile, true, $decryptedFile);
+    }
+
+    // }}}
+    // {{{ decryptAndVerify()
+
+    /**
+     * Decrypts and verifies string data
+     *
+     * This method assumes the required private key is available in the keyring
+     * and throws an exception if the private key is not available. To add a
+     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
+     * {@link Crypt_GPG::importKeyFile()} methods.
+     *
+     * @param string  $encryptedData      the encrypted, signed data to be decrypted
+     *                                    and verified.
+     * @param boolean $ignoreVerifyErrors enables ignoring of signature
+     *                                    verification errors caused by missing public key
+     *                                    When enabled Crypt_GPG_KeyNotFoundException
+     *                                    will not be thrown.
+     *
+     * @return array two element array. The array has an element 'data'
+     *               containing the decrypted data and an element
+     *               'signatures' containing an array of
+     *               {@link Crypt_GPG_Signature} objects for the signed data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data or the public key to verify the signature
+     *         is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function decryptAndVerify($encryptedData, $ignoreVerifyErrors = false)
+    {
+        return $this->_decryptAndVerify($encryptedData, false, null, $ignoreVerifyErrors);
+    }
+
+    // }}}
+    // {{{ decryptAndVerifyFile()
+
+    /**
+     * Decrypts and verifies a signed, encrypted file
+     *
+     * This method assumes the required private key is available in the keyring
+     * and throws an exception if the private key is not available. To add a
+     * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
+     * {@link Crypt_GPG::importKeyFile()} methods.
+     *
+     * @param string  $encryptedFile      the name of the signed, encrypted file to
+     *                                    to decrypt and verify.
+     * @param string  $decryptedFile      optional. The name of the file to which the
+     *                                    decrypted data should be written. If null
+     *                                    or unspecified, the decrypted data is
+     *                                    returned in the results array.
+     * @param boolean $ignoreVerifyErrors enables ignoring of signature
+     *                                    verification errors caused by missing public key
+     *                                    When enabled Crypt_GPG_KeyNotFoundException
+     *                                    will not be thrown.
+     *
+     * @return array two element array. The array has an element 'data'
+     *               containing the decrypted data and an element
+     *               'signatures' containing an array of
+     *               {@link Crypt_GPG_Signature} objects for the signed data.
+     *               If the decrypted data is written to a file, the 'data'
+     *               element is null.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data or the public key to verify the signature
+     *         is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function decryptAndVerifyFile($encryptedFile, $decryptedFile = null, $ignoreVerifyErrors = false)
+    {
+        return $this->_decryptAndVerify($encryptedFile, true, $decryptedFile, $ignoreVerifyErrors);
+    }
+
+    // }}}
+    // {{{ sign()
+
+    /**
+     * Signs data
+     *
+     * Data may be signed using any one of the three available signing modes:
+     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
+     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
+     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
+     *
+     * @param string  $data     the data to be signed.
+     * @param boolean $mode     optional. The data signing mode to use. Should
+     *                          be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
+     *                          {@link Crypt_GPG::SIGN_MODE_CLEAR} or
+     *                          {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
+     *                          specified, defaults to
+     *                          <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
+     * @param boolean $armor    optional. If true, ASCII armored data is
+     *                          returned; otherwise, binary data is returned.
+     *                          Defaults to true. This has no effect if the
+     *                          mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                          used.
+     * @param boolean $textmode optional. If true, line-breaks in signed data
+     *                          are normalized. Use this option when signing
+     *                          e-mail, or for greater compatibility between
+     *                          systems with different line-break formats.
+     *                          Defaults to false. This has no effect if the
+     *                          mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                          used as clear-signing always uses textmode.
+     *
+     * @return string the signed data, or the signature data if a detached
+     *                signature is requested.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
+     *         See {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function sign(
+        $data,
+        $mode = self::SIGN_MODE_NORMAL,
+        $armor = self::ARMOR_ASCII,
+        $textmode = self::TEXT_RAW
+    ) {
+        return $this->_sign($data, false, null, $mode, $armor, $textmode);
+    }
+
+    // }}}
+    // {{{ signFile()
+
+    /**
+     * Signs a file
+     *
+     * The file may be signed using any one of the three available signing
+     * modes:
+     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
+     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
+     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
+     *
+     * @param string  $filename   the name of the file containing the data to
+     *                            be signed.
+     * @param string  $signedFile optional. The name of the file in which the
+     *                            signed data should be stored. If null or
+     *                            unspecified, the signed data is returned as a
+     *                            string.
+     * @param boolean $mode       optional. The data signing mode to use. Should
+     *                            be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
+     *                            {@link Crypt_GPG::SIGN_MODE_CLEAR} or
+     *                            {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
+     *                            specified, defaults to
+     *                            <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
+     * @param boolean $armor      optional. If true, ASCII armored data is
+     *                            returned; otherwise, binary data is returned.
+     *                            Defaults to true. This has no effect if the
+     *                            mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                            used.
+     * @param boolean $textmode   optional. If true, line-breaks in signed data
+     *                            are normalized. Use this option when signing
+     *                            e-mail, or for greater compatibility between
+     *                            systems with different line-break formats.
+     *                            Defaults to false. This has no effect if the
+     *                            mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                            used as clear-signing always uses textmode.
+     *
+     * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
+     *                     string containing the signed data (or the signature
+     *                     data if a detached signature is requested) is
+     *                     returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
+     *         See {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function signFile(
+        $filename,
+        $signedFile = null,
+        $mode = self::SIGN_MODE_NORMAL,
+        $armor = self::ARMOR_ASCII,
+        $textmode = self::TEXT_RAW
+    ) {
+        return $this->_sign(
+            $filename,
+            true,
+            $signedFile,
+            $mode,
+            $armor,
+            $textmode
+        );
+    }
+
+    // }}}
+    // {{{ verify()
+
+    /**
+     * Verifies signed data
+     *
+     * The {@link Crypt_GPG::decrypt()} method may be used to get the original
+     * message if the signed data is not clearsigned and does not use a
+     * detached signature.
+     *
+     * @param string $signedData the signed data to be verified.
+     * @param string $signature  optional. If verifying data signed using a
+     *                           detached signature, this must be the detached
+     *                           signature data. The data that was signed is
+     *                           specified in <kbd>$signedData</kbd>.
+     *
+     * @return array an array of {@link Crypt_GPG_Signature} objects for the
+     *               signed data. For each signature that is valid, the
+     *               {@link Crypt_GPG_Signature::isValid()} will return true.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
+     *         signature verification is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if the provided data is not signed
+     *         data.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Signature
+     */
+    public function verify($signedData, $signature = '')
+    {
+        return $this->_verify($signedData, false, $signature);
+    }
+
+    // }}}
+    // {{{ verifyFile()
+
+    /**
+     * Verifies a signed file
+     *
+     * The {@link Crypt_GPG::decryptFile()} method may be used to get the
+     * original message if the signed data is not clearsigned and does not use
+     * a detached signature.
+     *
+     * @param string $filename  the signed file to be verified.
+     * @param string $signature optional. If verifying a file signed using a
+     *                          detached signature, this must be the detached
+     *                          signature data. The file that was signed is
+     *                          specified in <kbd>$filename</kbd>.
+     *
+     * @return array an array of {@link Crypt_GPG_Signature} objects for the
+     *               signed data. For each signature that is valid, the
+     *               {@link Crypt_GPG_Signature::isValid()} will return true.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
+     *         signature verification is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if the provided data is not signed
+     *         data.
+     *
+     * @throws Crypt_GPG_FileException if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Signature
+     */
+    public function verifyFile($filename, $signature = '')
+    {
+        return $this->_verify($filename, true, $signature);
+    }
+
+    // }}}
+    // {{{ addDecryptKey()
+
+    /**
+     * Adds a key to use for decryption
+     *
+     * @param mixed  $key        the key to use. This may be a key identifier,
+     *                           user id, fingerprint, {@link Crypt_GPG_Key} or
+     *                           {@link Crypt_GPG_SubKey}. The key must be able
+     *                           to encrypt.
+     * @param string $passphrase optional. The passphrase of the key required
+     *                           for decryption.
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::decrypt()
+     * @see Crypt_GPG::decryptFile()
+     * @see Crypt_GPG::clearDecryptKeys()
+     * @see Crypt_GPG::_addKey()
+     *
+     * @sensitive $passphrase
+     */
+    public function addDecryptKey($key, $passphrase = null)
+    {
+        $this->_addKey($this->decryptKeys, false, false, $key, $passphrase);
+        return $this;
+    }
+
+    // }}}
+    // {{{ addEncryptKey()
+
+    /**
+     * Adds a key to use for encryption
+     *
+     * @param mixed $key the key to use. This may be a key identifier, user id
+     *                   user id, fingerprint, {@link Crypt_GPG_Key} or
+     *                   {@link Crypt_GPG_SubKey}. The key must be able to
+     *                   encrypt.
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::encrypt()
+     * @see Crypt_GPG::encryptFile()
+     * @see Crypt_GPG::clearEncryptKeys()
+     * @see Crypt_GPG::_addKey()
+     */
+    public function addEncryptKey($key)
+    {
+        $this->_addKey($this->encryptKeys, true, false, $key);
+        return $this;
+    }
+
+    // }}}
+    // {{{ addSignKey()
+
+    /**
+     * Adds a key to use for signing
+     *
+     * @param mixed  $key        the key to use. This may be a key identifier,
+     *                           user id, fingerprint, {@link Crypt_GPG_Key} or
+     *                           {@link Crypt_GPG_SubKey}. The key must be able
+     *                           to sign.
+     * @param string $passphrase optional. The passphrase of the key required
+     *                           for signing.
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::sign()
+     * @see Crypt_GPG::signFile()
+     * @see Crypt_GPG::clearSignKeys()
+     * @see Crypt_GPG::_addKey()
+     *
+     * @sensitive $passphrase
+     */
+    public function addSignKey($key, $passphrase = null)
+    {
+        $this->_addKey($this->signKeys, false, true, $key, $passphrase);
+        return $this;
+    }
+
+    // }}}
+    // {{{ addPassphrase()
+
+    /**
+     * Register a private key passphrase for import/export (GnuPG 2.1)
+     *
+     * @param mixed  $key        The key to use. This must be a key identifier,
+     *                           or fingerprint.
+     * @param string $passphrase The passphrase of the key.
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::clearPassphrases()
+     * @see Crypt_GPG::importKey()
+     * @see Crypt_GPG::exportKey()
+     *
+     * @sensitive $passphrase
+     */
+    public function addPassphrase($key, $passphrase)
+    {
+        $this->passphrases[$key] = $passphrase;
+        return $this;
+    }
+
+    // }}}
+    // {{{ clearDecryptKeys()
+
+    /**
+     * Clears all decryption keys
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::decrypt()
+     * @see Crypt_GPG::addDecryptKey()
+     */
+    public function clearDecryptKeys()
+    {
+        $this->decryptKeys = array();
+        return $this;
+    }
+
+    // }}}
+    // {{{ clearEncryptKeys()
+
+    /**
+     * Clears all encryption keys
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::encrypt()
+     * @see Crypt_GPG::addEncryptKey()
+     */
+    public function clearEncryptKeys()
+    {
+        $this->encryptKeys = array();
+        return $this;
+    }
+
+    // }}}
+    // {{{ clearSignKeys()
+
+    /**
+     * Clears all signing keys
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::sign()
+     * @see Crypt_GPG::addSignKey()
+     */
+    public function clearSignKeys()
+    {
+        $this->signKeys = array();
+        return $this;
+    }
+
+    // }}}
+    // {{{ clearPassphrases()
+
+    /**
+     * Clears all private key passphrases
+     *
+     * @return Crypt_GPG the current object, for fluent interface.
+     *
+     * @see Crypt_GPG::importKey()
+     * @see Crypt_GPG::exportKey()
+     * @see Crypt_GPG::addPassphrase()
+     */
+    public function clearPassphrases()
+    {
+        $this->passphrases = array();
+        return $this;
+    }
+
+    // }}}
+    // {{{ hasEncryptKeys()
+
+    /**
+     * Tell if there are encryption keys registered
+     *
+     * @return boolean True if the data shall be encrypted
+     */
+    public function hasEncryptKeys()
+    {
+        return count($this->encryptKeys) > 0;
+    }
+
+    // }}}
+    // {{{ hasSignKeys()
+
+    /**
+     * Tell if there are signing keys registered
+     *
+     * @return boolean True if the data shall be signed
+     */
+    public function hasSignKeys()
+    {
+        return count($this->signKeys) > 0;
+    }
+
+    // }}}
+    // {{{ _addKey()
+
+    /**
+     * Adds a key to one of the internal key arrays
+     *
+     * This handles resolving full key objects from the provided
+     * <kbd>$key</kbd> value.
+     *
+     * @param array   &$array     the array to which the key should be added.
+     * @param boolean $encrypt    whether or not the key must be able to
+     *                            encrypt.
+     * @param boolean $sign       whether or not the key must be able to sign.
+     * @param mixed   $key        the key to add. This may be a key identifier,
+     *                            user id, fingerprint, {@link Crypt_GPG_Key} or
+     *                            {@link Crypt_GPG_SubKey}.
+     * @param string  $passphrase optional. The passphrase associated with the
+     *                            key.
+     *
+     * @return void
+     *
+     * @sensitive $passphrase
+     */
+    protected function _addKey(array &$array, $encrypt, $sign, $key,
+        $passphrase = null
+    ) {
+        $subKeys = array();
+
+        if (is_scalar($key)) {
+            $keys = $this->getKeys($key);
+            if (count($keys) == 0) {
+                throw new Crypt_GPG_KeyNotFoundException(
+                    'Key not found: ' . $key,
+                    self::ERROR_KEY_NOT_FOUND,
+                    $key
+                );
+            }
+            $key = $keys[0];
+        }
+
+        if ($key instanceof Crypt_GPG_Key) {
+            if ($encrypt && !$key->canEncrypt()) {
+                throw new InvalidArgumentException(
+                    'Key "' . $key . '" cannot encrypt.'
+                );
+            }
+
+            if ($sign && !$key->canSign()) {
+                throw new InvalidArgumentException(
+                    'Key "' . $key . '" cannot sign.'
+                );
+            }
+
+            foreach ($key->getSubKeys() as $subKey) {
+                $canEncrypt = $subKey->canEncrypt();
+                $canSign    = $subKey->canSign();
+                if (($encrypt && $sign && $canEncrypt && $canSign)
+                    || ($encrypt && !$sign && $canEncrypt)
+                    || (!$encrypt && $sign && $canSign)
+                    || (!$encrypt && !$sign)
+                ) {
+                    // We add all subkeys that meet the requirements because we
+                    // were not told which subkey is required.
+                    $subKeys[] = $subKey;
+                }
+            }
+        } elseif ($key instanceof Crypt_GPG_SubKey) {
+            $subKeys[] = $key;
+        }
+
+        if (count($subKeys) === 0) {
+            throw new InvalidArgumentException(
+                'Key "' . $key . '" is not in a recognized format.'
+            );
+        }
+
+        foreach ($subKeys as $subKey) {
+            if ($encrypt && !$subKey->canEncrypt()) {
+                throw new InvalidArgumentException(
+                    'Key "' . $key . '" cannot encrypt.'
+                );
+            }
+
+            if ($sign && !$subKey->canSign()) {
+                throw new InvalidArgumentException(
+                    'Key "' . $key . '" cannot sign.'
+                );
+            }
+
+            $array[$subKey->getId()] = array(
+                'fingerprint' => $subKey->getFingerprint(),
+                'passphrase'  => $passphrase
+            );
+        }
+    }
+
+    // }}}
+    // {{{ _importKey()
+
+    /**
+     * Imports a public or private key into the keyring
+     *
+     * @param string  $key    the key to be imported.
+     * @param boolean $isFile whether or not the input is a filename.
+     *
+     * @return array an associative array containing the following elements:
+     *               - <kbd>fingerprint</kbd>       - the fingerprint of the
+     *                                                imported key,
+     *               - <kbd>public_imported</kbd>   - the number of public
+     *                                                keys imported,
+     *               - <kbd>public_unchanged</kbd>  - the number of unchanged
+     *                                                public keys,
+     *               - <kbd>private_imported</kbd>  - the number of private
+     *                                                keys imported,
+     *               - <kbd>private_unchanged</kbd> - the number of unchanged
+     *                                                private keys.
+     *
+     * @throws Crypt_GPG_NoDataException if the key data is missing or if the
+     *         data is is not valid key data.
+     *
+     * @throws Crypt_GPG_FileException if the key file is not readable.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addPassphrase()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _importKey($key, $isFile)
+    {
+        $result    = array();
+        $arguments = array();
+        $input     = $this->_prepareInput($key, $isFile, false);
+        $version   = $this->engine->getVersion();
+
+        if (version_compare($version, '1.0.5', 'ge')
+            && version_compare($version, '1.0.7', 'lt')
+        ) {
+            $arguments[] = '--allow-secret-key-import';
+        }
+
+        if (empty($this->passphrases)) {
+            $arguments[] = '--batch';
+        }
+
+        $this->engine->reset();
+        $this->engine->setPins($this->passphrases);
+        $this->engine->setOperation('--import', $arguments);
+        $this->engine->setInput($input);
+        $this->engine->run();
+
+        return $this->engine->getProcessData('Import');
+    }
+
+    // }}}
+    // {{{ _exportKey()
+
+    /**
+     * Exports a private or public key from the keyring
+     *
+     * If more than one key fingerprint is available for the specified
+     * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
+     * first key is exported.
+     *
+     * @param string  $keyId   either the full uid of the key, the email
+     *                         part of the uid of the key or the key id.
+     * @param boolean $armor   optional. If true, ASCII armored data is returned;
+     *                         otherwise, binary data is returned. Defaults to
+     *                         true.
+     * @param boolean $private return private instead of public key
+     *
+     * @return string the key data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if a key with the given
+     *         <kbd>$keyId</kbd> is not found.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addPassphrase()}.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _exportKey($keyId, $armor = true, $private = false)
+    {
+        $fingerprint = $this->getFingerprint($keyId);
+
+        if ($fingerprint === null) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'Key not found: ' . $keyId,
+                self::ERROR_KEY_NOT_FOUND,
+                $keyId
+            );
+        }
+
+        $keyData   = '';
+        $operation = $private ? '--export-secret-keys' : '--export';
+        $operation .= ' ' . escapeshellarg($fingerprint);
+        $arguments = $armor ? array('--armor') : array();
+
+        $this->engine->reset();
+        $this->engine->setPins($this->passphrases);
+        $this->engine->setOutput($keyData);
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        return $keyData;
+    }
+
+    // }}}
+    // {{{ _encrypt()
+
+    /**
+     * Encrypts data
+     *
+     * @param string  $data       the data to encrypt.
+     * @param boolean $isFile     whether or not the data is a filename.
+     * @param string  $outputFile the filename of the file in which to store
+     *                            the encrypted data. If null, the encrypted
+     *                            data is returned as a string.
+     * @param boolean $armor      if true, ASCII armored data is returned;
+     *                            otherwise, binary data is returned.
+     *
+     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
+     *                     string containing the encrypted data is returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
+     *         See {@link Crypt_GPG::addEncryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _encrypt($data, $isFile, $outputFile, $armor)
+    {
+        if (!$this->hasEncryptKeys()) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'No encryption keys specified.'
+            );
+        }
+
+        $input     = $this->_prepareInput($data, $isFile);
+        $output    = $this->_prepareOutput($outputFile, $input);
+        $arguments = $armor ? array('--armor') : array();
+
+        foreach ($this->encryptKeys as $key) {
+            $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
+        }
+
+        $this->engine->reset();
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->setOperation('--encrypt', $arguments);
+        $this->engine->run();
+
+        if ($outputFile === null) {
+            return $output;
+        }
+    }
+
+    // }}}
+    // {{{ _decrypt()
+
+    /**
+     * Decrypts data
+     *
+     * @param string  $data       the data to be decrypted.
+     * @param boolean $isFile     whether or not the data is a filename.
+     * @param string  $outputFile the name of the file to which the decrypted
+     *                            data should be written. If null, the decrypted
+     *                            data is returned as a string.
+     *
+     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
+     *                     string containing the decrypted data is returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _decrypt($data, $isFile, $outputFile)
+    {
+        $input  = $this->_prepareInput($data, $isFile, false);
+        $output = $this->_prepareOutput($outputFile, $input);
+
+        $this->engine->reset();
+        $this->engine->setPins($this->decryptKeys);
+        $this->engine->setOperation('--decrypt --skip-verify');
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->run();
+
+        if ($outputFile === null) {
+            return $output;
+        }
+    }
+
+    // }}}
+    // {{{ _sign()
+
+    /**
+     * Signs data
+     *
+     * @param string  $data       the data to be signed.
+     * @param boolean $isFile     whether or not the data is a filename.
+     * @param string  $outputFile the name of the file in which the signed data
+     *                            should be stored. If null, the signed data is
+     *                            returned as a string.
+     * @param boolean $mode       the data signing mode to use. Should be one of
+     *                            {@link Crypt_GPG::SIGN_MODE_NORMAL},
+     *                            {@link Crypt_GPG::SIGN_MODE_CLEAR} or
+     *                            {@link Crypt_GPG::SIGN_MODE_DETACHED}.
+     * @param boolean $armor      if true, ASCII armored data is returned;
+     *                            otherwise, binary data is returned. This has
+     *                            no effect if the mode
+     *                            <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                            used.
+     * @param boolean $textmode   if true, line-breaks in signed data be
+     *                            normalized. Use this option when signing
+     *                            e-mail, or for greater compatibility between
+     *                            systems with different line-break formats.
+     *                            Defaults to false. This has no effect if the
+     *                            mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
+     *                            used as clear-signing always uses textmode.
+     *
+     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
+     *                     string containing the signed data (or the signature
+     *                     data if a detached signature is requested) is
+     *                     returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
+     *         See {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _sign($data, $isFile, $outputFile, $mode, $armor,
+        $textmode
+    ) {
+        if (!$this->hasSignKeys()) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'No signing keys specified.'
+            );
+        }
+
+        $input  = $this->_prepareInput($data, $isFile);
+        $output = $this->_prepareOutput($outputFile, $input);
+
+        switch ($mode) {
+        case self::SIGN_MODE_DETACHED:
+            $operation = '--detach-sign';
+            break;
+        case self::SIGN_MODE_CLEAR:
+            $operation = '--clearsign';
+            break;
+        case self::SIGN_MODE_NORMAL:
+        default:
+            $operation = '--sign';
+            break;
+        }
+
+        $arguments = array();
+
+        if ($armor) {
+            $arguments[] = '--armor';
+        }
+        if ($textmode) {
+            $arguments[] = '--textmode';
+        }
+
+        foreach ($this->signKeys as $key) {
+            $arguments[] = '--local-user ' .
+                escapeshellarg($key['fingerprint']);
+        }
+
+        $this->engine->reset();
+        $this->engine->setPins($this->signKeys);
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        if ($outputFile === null) {
+            return $output;
+        }
+    }
+
+    // }}}
+    // {{{ _encryptAndSign()
+
+    /**
+     * Encrypts and signs data
+     *
+     * @param string  $data       the data to be encrypted and signed.
+     * @param boolean $isFile     whether or not the data is a filename.
+     * @param string  $outputFile the name of the file in which the encrypted,
+     *                            signed data should be stored. If null, the
+     *                            encrypted, signed data is returned as a
+     *                            string.
+     * @param boolean $armor      if true, ASCII armored data is returned;
+     *                            otherwise, binary data is returned.
+     *
+     * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
+     *                     string containing the encrypted, signed data is
+     *                     returned.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
+     *         or if no signing key is specified. See
+     *         {@link Crypt_GPG::addEncryptKey()} and
+     *         {@link Crypt_GPG::addSignKey()}.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
+     *         incorrect or if a required passphrase is not specified.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    protected function _encryptAndSign($data, $isFile, $outputFile, $armor)
+    {
+        if (!$this->hasSignKeys()) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'No signing keys specified.'
+            );
+        }
+
+        if (!$this->hasEncryptKeys()) {
+            throw new Crypt_GPG_KeyNotFoundException(
+                'No encryption keys specified.'
+            );
+        }
+
+        $input     = $this->_prepareInput($data, $isFile);
+        $output    = $this->_prepareOutput($outputFile, $input);
+        $arguments = $armor ? array('--armor') : array();
+
+        foreach ($this->signKeys as $key) {
+            $arguments[] = '--local-user ' .
+                escapeshellarg($key['fingerprint']);
+        }
+
+        foreach ($this->encryptKeys as $key) {
+            $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
+        }
+
+        $this->engine->reset();
+        $this->engine->setPins($this->signKeys);
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->setOperation('--encrypt --sign', $arguments);
+        $this->engine->run();
+
+        if ($outputFile === null) {
+            return $output;
+        }
+    }
+
+    // }}}
+    // {{{ _verify()
+
+    /**
+     * Verifies data
+     *
+     * @param string  $data      the signed data to be verified.
+     * @param boolean $isFile    whether or not the data is a filename.
+     * @param string  $signature if verifying a file signed using a detached
+     *                           signature, this must be the detached signature
+     *                           data. Otherwise, specify ''.
+     *
+     * @return array an array of {@link Crypt_GPG_Signature} objects for the
+     *               signed data.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the public key needed for
+     *         signature verification is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if the provided data is not signed
+     *         data.
+     *
+     * @throws Crypt_GPG_FileException if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Signature
+     */
+    protected function _verify($data, $isFile, $signature)
+    {
+        if ($signature == '') {
+            $operation = '--verify';
+            $arguments = array();
+        } else {
+            // Signed data goes in FD_MESSAGE, detached signature data goes in
+            // FD_INPUT.
+            $operation = '--verify - "-&' . Crypt_GPG_Engine::FD_MESSAGE. '"';
+            $arguments = array('--enable-special-filenames');
+        }
+
+        $input = $this->_prepareInput($data, $isFile, false);
+
+        $this->engine->reset();
+
+        if ($signature == '') {
+            // signed or clearsigned data
+            $this->engine->setInput($input);
+        } else {
+            // detached signature
+            $this->engine->setInput($signature);
+            $this->engine->setMessage($input);
+        }
+
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        return $this->engine->getProcessData('Signatures');
+    }
+
+    // }}}
+    // {{{ _decryptAndVerify()
+
+    /**
+     * Decrypts and verifies encrypted, signed data
+     *
+     * @param string  $data               the encrypted signed data to be decrypted and
+     *                                    verified.
+     * @param boolean $isFile             whether or not the data is a filename.
+     * @param string  $outputFile         the name of the file to which the decrypted
+     *                                    data should be written. If null, the decrypted
+     *                                    data is returned in the results array.
+     * @param boolean $ignoreVerifyErrors enables ignoring of signature verification
+     *                                    errors caused by missing public key.
+     *                                    When enabled Crypt_GPG_KeyNotFoundException
+     *                                    will not be thrown.
+     *
+     * @return array two element array. The array has an element 'data'
+     *               containing the decrypted data and an element
+     *               'signatures' containing an array of
+     *               {@link Crypt_GPG_Signature} objects for the signed data.
+     *               If the decrypted data is written to a file, the 'data'
+     *               element is null.
+     *
+     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
+     *         decrypt the data is not in the user's keyring or if the public
+     *         key needed for verification is not in the user's keyring.
+     *
+     * @throws Crypt_GPG_NoDataException if specified data does not contain
+     *         GPG signed, encrypted data.
+     *
+     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
+     *         incorrect or if a required passphrase is not specified. See
+     *         {@link Crypt_GPG::addDecryptKey()}.
+     *
+     * @throws Crypt_GPG_FileException if the output file is not writeable or
+     *         if the input file is not readable.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Signature
+     */
+    protected function _decryptAndVerify($data, $isFile, $outputFile, $ignoreVerifyErrors = false)
+    {
+        $input  = $this->_prepareInput($data, $isFile, false);
+        $output = $this->_prepareOutput($outputFile, $input);
+
+        $this->engine->reset();
+        $this->engine->setPins($this->decryptKeys);
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->setOperation('--decrypt');
+        $this->engine->setProcessData('IgnoreVerifyErrors', $ignoreVerifyErrors);
+        $this->engine->run();
+
+        $return = array(
+            'data'       => null,
+            'signatures' => $this->engine->getProcessData('Signatures')
+        );
+
+        if ($outputFile === null) {
+            $return['data'] = $output;
+        }
+
+        return $return;
+    }
+
+    // }}}
+    // {{{ _prepareInput()
+
+    /**
+     * Prepares command input
+     *
+     * @param string  $data       the input data.
+     * @param boolean $isFile     whether or not the input is a filename.
+     * @param boolean $allowEmpty whether to check if the input is not empty.
+     *
+     * @throws Crypt_GPG_NoDataException if the key data is missing.
+     * @throws Crypt_GPG_FileException if the file is not readable.
+     */
+    protected function _prepareInput($data, $isFile = false, $allowEmpty = true)
+    {
+        if ($isFile) {
+            $input = @fopen($data, 'rb');
+            if ($input === false) {
+                throw new Crypt_GPG_FileException(
+                    'Could not open input file "' . $data . '"',
+                    0,
+                    $data
+                );
+            }
+        } else {
+            $input = strval($data);
+            if (!$allowEmpty && $input === '') {
+                throw new Crypt_GPG_NoDataException(
+                    'No valid input data found.',
+                    self::ERROR_NO_DATA
+                );
+            }
+        }
+
+        return $input;
+    }
+
+    // }}}
+    // {{{ _prepareOutput()
+
+    /**
+     * Prepares command output
+     *
+     * @param string  $outputFile the name of the file in which the output
+     *                            data should be stored. If null, the output
+     *                            data is returned as a string.
+     * @param boolean $input      the input resource, in case it would need
+     *                            to be released (closed) on exception.
+     *
+     * @throws Crypt_GPG_FileException if the file is not writeable.
+     */
+    protected function _prepareOutput($outputFile, $input = null)
+    {
+        if ($outputFile === null) {
+            $output = '';
+        } else {
+            $output = @fopen($outputFile, 'wb');
+            if ($output === false) {
+                if (is_resource($input)) {
+                    fclose($input);
+                }
+                throw new Crypt_GPG_FileException(
+                    'Could not open output file "' . $outputFile . '"',
+                    0,
+                    $outputFile
+                );
+            }
+        }
+
+        return $output;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/Engine.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2089 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Crypt_GPG is a package to use GPG from PHP
+ *
+ * This file contains an engine that handles GPG subprocess control and I/O.
+ * PHP's process manipulation functions are used to handle the GPG subprocess.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * Crypt_GPG base class.
+ */
+require_once 'Crypt/GPG.php';
+
+/**
+ * GPG exception classes.
+ */
+require_once 'Crypt/GPG/Exceptions.php';
+
+/**
+ * Status/Error handler class.
+ */
+require_once 'Crypt/GPG/ProcessHandler.php';
+
+/**
+ * Process control methods.
+ */
+require_once 'Crypt/GPG/ProcessControl.php';
+
+/**
+ * Information about a created signature
+ */
+require_once 'Crypt/GPG/SignatureCreationInfo.php';
+
+/**
+ * Standard PEAR exception is used if GPG binary is not found.
+ */
+require_once 'PEAR/Exception.php';
+
+// {{{ class Crypt_GPG_Engine
+
+/**
+ * Native PHP Crypt_GPG I/O engine
+ *
+ * This class is used internally by Crypt_GPG and does not need be used
+ * directly. See the {@link Crypt_GPG} class for end-user API.
+ *
+ * This engine uses PHP's native process control functions to directly control
+ * the GPG process. The GPG executable is required to be on the system.
+ *
+ * All data is passed to the GPG subprocess using file descriptors. This is the
+ * most secure method of passing data to the GPG subprocess.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+class Crypt_GPG_Engine
+{
+    // {{{ constants
+
+    /**
+     * Size of data chunks that are sent to and retrieved from the IPC pipes.
+     *
+     * The value of 65536 has been chosen empirically
+     * as the one with best performance.
+     *
+     * @see https://pear.php.net/bugs/bug.php?id=21077
+     */
+    const CHUNK_SIZE = 65536;
+
+    /**
+     * Standard input file descriptor. This is used to pass data to the GPG
+     * process.
+     */
+    const FD_INPUT = 0;
+
+    /**
+     * Standard output file descriptor. This is used to receive normal output
+     * from the GPG process.
+     */
+    const FD_OUTPUT = 1;
+
+    /**
+     * Standard output file descriptor. This is used to receive error output
+     * from the GPG process.
+     */
+    const FD_ERROR = 2;
+
+    /**
+     * GPG status output file descriptor. The status file descriptor outputs
+     * detailed information for many GPG commands. See the second section of
+     * the file <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
+     * description of GPG's status output.
+     */
+    const FD_STATUS = 3;
+
+    /**
+     * Command input file descriptor. This is used for methods requiring
+     * passphrases.
+     */
+    const FD_COMMAND = 4;
+
+    /**
+     * Extra message input file descriptor. This is used for passing signed
+     * data when verifying a detached signature.
+     */
+    const FD_MESSAGE = 5;
+
+    /**
+     * Minimum version of GnuPG that is supported.
+     */
+    const MIN_VERSION = '1.0.2';
+
+    // }}}
+    // {{{ private class properties
+
+    /**
+     * Whether or not to use strict mode
+     *
+     * When set to true, any clock problems (e.g. keys generate in future)
+     * are errors, otherwise they are just warnings.
+     *
+     * Strict mode is disabled by default.
+     *
+     * @var boolean
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_strict = false;
+
+    /**
+     * Whether or not to use debugging mode
+     *
+     * When set to true, every GPG command is echoed before it is run. Sensitive
+     * data is always handled using pipes and is not specified as part of the
+     * command. As a result, sensitive data is never displayed when debug is
+     * enabled. Sensitive data includes private key data and passphrases.
+     *
+     * This can be set to a callable function where first argument is the
+     * debug line to process.
+     *
+     * Debugging is off by default.
+     *
+     * @var mixed
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_debug = false;
+
+    /**
+     * Location of GPG binary
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     * @see Crypt_GPG_Engine::_getBinary()
+     */
+    private $_binary = '';
+
+    /**
+     * Location of GnuPG agent binary
+     *
+     * Only used for GnuPG 2.x
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     * @see Crypt_GPG_Engine::_getAgent()
+     */
+    private $_agent = '';
+
+    /**
+     * Location of GnuPG conf binary
+     *
+     * Only used for GnuPG 2.1.x
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     * @see Crypt_GPG_Engine::_getGPGConf()
+     */
+    private $_gpgconf = null;
+
+    /**
+     * Directory containing the GPG key files
+     *
+     * This property only contains the path when the <i>homedir</i> option
+     * is specified in the constructor.
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_homedir = '';
+
+    /**
+     * File path of the public keyring
+     *
+     * This property only contains the file path when the <i>public_keyring</i>
+     * option is specified in the constructor.
+     *
+     * If the specified file path starts with <kbd>~/</kbd>, the path is
+     * relative to the <i>homedir</i> if specified, otherwise to
+     * <kbd>~/.gnupg</kbd>.
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_publicKeyring = '';
+
+    /**
+     * File path of the private (secret) keyring
+     *
+     * This property only contains the file path when the <i>private_keyring</i>
+     * option is specified in the constructor.
+     *
+     * If the specified file path starts with <kbd>~/</kbd>, the path is
+     * relative to the <i>homedir</i> if specified, otherwise to
+     * <kbd>~/.gnupg</kbd>.
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_privateKeyring = '';
+
+    /**
+     * File path of the trust database
+     *
+     * This property only contains the file path when the <i>trust_db</i>
+     * option is specified in the constructor.
+     *
+     * If the specified file path starts with <kbd>~/</kbd>, the path is
+     * relative to the <i>homedir</i> if specified, otherwise to
+     * <kbd>~/.gnupg</kbd>.
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::__construct()
+     */
+    private $_trustDb = '';
+
+    /**
+     * Array of pipes used for communication with the GPG binary
+     *
+     * This is an array of file descriptor resources.
+     *
+     * @var array
+     */
+    private $_pipes = array();
+
+    /**
+     * Array of pipes used for communication with the gpg-agent binary
+     *
+     * This is an array of file descriptor resources.
+     *
+     * @var array
+     */
+    private $_agentPipes = array();
+
+    /**
+     * Array of currently opened pipes
+     *
+     * This array is used to keep track of remaining opened pipes so they can
+     * be closed when the GPG subprocess is finished. This array is a subset of
+     * the {@link Crypt_GPG_Engine::$_pipes} array and contains opened file
+     * descriptor resources.
+     *
+     * @var array
+     * @see Crypt_GPG_Engine::_closePipe()
+     */
+    private $_openPipes = array();
+
+    /**
+     * A handle for the GPG process
+     *
+     * @var resource
+     */
+    private $_process = null;
+
+    /**
+     * A handle for the gpg-agent process
+     *
+     * @var resource
+     */
+    private $_agentProcess = null;
+
+    /**
+     * GPG agent daemon socket and PID for running gpg-agent
+     *
+     * @var string
+     */
+    private $_agentInfo = null;
+
+    /**
+     * Whether or not the operating system is Darwin (OS X)
+     *
+     * @var boolean
+     */
+    private $_isDarwin = false;
+
+    /**
+     * Message digest algorithm.
+     *
+     * @var string
+     */
+    private $_digest_algo = null;
+
+    /**
+     * Symmetric cipher algorithm.
+     *
+     * @var string
+     */
+    private $_cipher_algo = null;
+
+    /**
+     * Commands to be sent to GPG's command input stream
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::sendCommand()
+     */
+    private $_commandBuffer = '';
+
+    /**
+     * A status/error handler
+     *
+     * @var Crypt_GPG_ProcessHanler
+     */
+    private $_processHandler = null;
+
+    /**
+     * Array of status line handlers
+     *
+     * @var array
+     * @see Crypt_GPG_Engine::addStatusHandler()
+     */
+    private $_statusHandlers = array();
+
+    /**
+     * Array of error line handlers
+     *
+     * @var array
+     * @see Crypt_GPG_Engine::addErrorHandler()
+     */
+    private $_errorHandlers = array();
+
+    /**
+     * The input source
+     *
+     * This is data to send to GPG. Either a string or a stream resource.
+     *
+     * @var string|resource
+     * @see Crypt_GPG_Engine::setInput()
+     */
+    private $_input = null;
+
+    /**
+     * The extra message input source
+     *
+     * Either a string or a stream resource.
+     *
+     * @var string|resource
+     * @see Crypt_GPG_Engine::setMessage()
+     */
+    private $_message = null;
+
+    /**
+     * The output location
+     *
+     * This is where the output from GPG is sent. Either a string or a stream
+     * resource.
+     *
+     * @var string|resource
+     * @see Crypt_GPG_Engine::setOutput()
+     */
+    private $_output = '';
+
+    /**
+     * The GPG operation to execute
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::setOperation()
+     */
+    private $_operation;
+
+    /**
+     * Arguments for the current operation
+     *
+     * @var array
+     * @see Crypt_GPG_Engine::setOperation()
+     */
+    private $_arguments = array();
+
+    /**
+     * The version number of the GPG binary
+     *
+     * @var string
+     * @see Crypt_GPG_Engine::getVersion()
+     */
+    private $_version = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new GPG engine
+     *
+     * Available options are:
+     *
+     * - <kbd>string  homedir</kbd>        - the directory where the GPG
+     *                                       keyring files are stored. If not
+     *                                       specified, Crypt_GPG uses the
+     *                                       default of <kbd>~/.gnupg</kbd>.
+     * - <kbd>string  publicKeyring</kbd>  - the file path of the public
+     *                                       keyring. Use this if the public
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/pubring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  privateKeyring</kbd> - the file path of the private
+     *                                       keyring. Use this if the private
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/secring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  trustDb</kbd>        - the file path of the web-of-trust
+     *                                       database. Use this if the trust
+     *                                       database is not in the homedir, or
+     *                                       if the database is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       trust database with this option
+     *                                       (/foo/bar/trustdb.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  binary</kbd>         - the location of the GPG binary. If
+     *                                       not specified, the driver attempts
+     *                                       to auto-detect the GPG binary
+     *                                       location using a list of known
+     *                                       default locations for the current
+     *                                       operating system. The option
+     *                                       <kbd>gpgBinary</kbd> is a
+     *                                       deprecated alias for this option.
+     * - <kbd>string  agent</kbd>          - the location of the GnuPG agent
+     *                                       binary. The gpg-agent is only
+     *                                       used for GnuPG 2.x. If not
+     *                                       specified, the engine attempts
+     *                                       to auto-detect the gpg-agent
+     *                                       binary location using a list of
+     *                                       know default locations for the
+     *                                       current operating system.
+     * - <kbd>string|false gpgconf</kbd>   - the location of the GnuPG conf
+     *                                       binary. The gpgconf is only
+     *                                       used for GnuPG >= 2.1. If not
+     *                                       specified, the engine attempts
+     *                                       to auto-detect the location using
+     *                                       a list of know default locations.
+     *                                       When set to FALSE `gpgconf --kill`
+     *                                       will not be executed via destructor.
+     * - <kbd>string digest-algo</kbd>     - Sets the message digest algorithm.
+     * - <kbd>string cipher-algo</kbd>     - Sets the symmetric cipher.
+     * - <kbd>boolean strict</kbd>         - In strict mode clock problems on
+     *                                       subkeys and signatures are not ignored
+     *                                       (--ignore-time-conflict
+     *                                       and --ignore-valid-from options)
+     * - <kbd>mixed debug</kbd>            - whether or not to use debug mode.
+     *                                       When debug mode is on, all
+     *                                       communication to and from the GPG
+     *                                       subprocess is logged. This can be
+     *                                       useful to diagnose errors when
+     *                                       using Crypt_GPG.
+     *
+     * @param array $options optional. An array of options used to create the
+     *                       GPG object. All options are optional and are
+     *                       represented as key-value pairs.
+     *
+     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
+     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
+     *         not specified, Crypt_GPG is run as the web user, and the web
+     *         user has no home directory. This exception is also thrown if any
+     *         of the options <kbd>publicKeyring</kbd>,
+     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
+     *         specified but the files do not exist or are are not readable.
+     *         This can happen if the user running the Crypt_GPG process (for
+     *         example, the Apache user) does not have permission to read the
+     *         files.
+     *
+     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
+     *         if no <kbd>binary</kbd> is provided and no suitable binary could
+     *         be found.
+     *
+     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
+     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
+     *         cound be found.
+     */
+    public function __construct(array $options = array())
+    {
+        $this->_isDarwin = (strncmp(strtoupper(PHP_OS), 'DARWIN', 6) === 0);
+
+        // get homedir
+        if (array_key_exists('homedir', $options)) {
+            $this->_homedir = (string)$options['homedir'];
+        } else {
+            if (extension_loaded('posix')) {
+                // note: this requires the package OS dep exclude 'windows'
+                $info = posix_getpwuid(posix_getuid());
+                $this->_homedir = $info['dir'].'/.gnupg';
+            } else {
+                if (isset($_SERVER['HOME'])) {
+                    $this->_homedir = $_SERVER['HOME'];
+                } else {
+                    $this->_homedir = getenv('HOME');
+                }
+            }
+
+            if ($this->_homedir === false) {
+                throw new Crypt_GPG_FileException(
+                    'Could not locate homedir. Please specify the homedir ' .
+                    'to use with the \'homedir\' option when instantiating ' .
+                    'the Crypt_GPG object.'
+                );
+            }
+        }
+
+        // attempt to create homedir if it does not exist
+        if (!is_dir($this->_homedir)) {
+            if (@mkdir($this->_homedir, 0777, true)) {
+                // Set permissions on homedir. Parent directories are created
+                // with 0777, homedir is set to 0700.
+                chmod($this->_homedir, 0700);
+            } else {
+                throw new Crypt_GPG_FileException(
+                    'The \'homedir\' "' . $this->_homedir . '" is not ' .
+                    'readable or does not exist and cannot be created. This ' .
+                    'can happen if \'homedir\' is not specified in the ' .
+                    'Crypt_GPG options, Crypt_GPG is run as the web user, ' .
+                    'and the web user has no home directory.',
+                    0,
+                    $this->_homedir
+                );
+            }
+        }
+
+        // check homedir permissions (See Bug #19833)
+        if (!is_executable($this->_homedir)) {
+            throw new Crypt_GPG_FileException(
+                'The \'homedir\' "' . $this->_homedir . '" is not enterable ' .
+                'by the current user. Please check the permissions on your ' .
+                'homedir and make sure the current user can both enter and ' .
+                'write to the directory.',
+                0,
+                $this->_homedir
+            );
+        }
+        if (!is_writeable($this->_homedir)) {
+            throw new Crypt_GPG_FileException(
+                'The \'homedir\' "' . $this->_homedir . '" is not writable ' .
+                'by the current user. Please check the permissions on your ' .
+                'homedir and make sure the current user can both enter and ' .
+                'write to the directory.',
+                0,
+                $this->_homedir
+            );
+        }
+
+        // get binary
+        if (array_key_exists('binary', $options)) {
+            $this->_binary = (string)$options['binary'];
+        } elseif (array_key_exists('gpgBinary', $options)) {
+            // deprecated alias
+            $this->_binary = (string)$options['gpgBinary'];
+        } else {
+            $this->_binary = $this->_getBinary();
+        }
+
+        if ($this->_binary == '' || !is_executable($this->_binary)) {
+            throw new PEAR_Exception(
+                'GPG binary not found. If you are sure the GPG binary is ' .
+                'installed, please specify the location of the GPG binary ' .
+                'using the \'binary\' driver option.'
+            );
+        }
+
+        // get agent
+        if (array_key_exists('agent', $options)) {
+            $this->_agent = (string)$options['agent'];
+
+            if ($this->_agent && !is_executable($this->_agent)) {
+                throw new PEAR_Exception(
+                    'Specified gpg-agent binary is not executable.'
+                );
+            }
+        } else {
+            $this->_agent = $this->_getAgent();
+        }
+
+        if (array_key_exists('gpgconf', $options)) {
+            $this->_gpgconf = $options['gpgconf'];
+
+            if ($this->_gpgconf && !is_executable($this->_gpgconf)) {
+                throw new PEAR_Exception(
+                    'Specified gpgconf binary is not executable.'
+                );
+            }
+        }
+
+        /*
+         * Note:
+         *
+         * Normally, GnuPG expects keyrings to be in the homedir and expects
+         * to be able to write temporary files in the homedir. Sometimes,
+         * keyrings are not in the homedir, or location of the keyrings does
+         * not allow writing temporary files. In this case, the <i>homedir</i>
+         * option by itself is not enough to specify the keyrings because GnuPG
+         * can not write required temporary files. Additional options are
+         * provided so you can specify the location of the keyrings separately
+         * from the homedir.
+         */
+
+        // get public keyring
+        if (array_key_exists('publicKeyring', $options)) {
+            $this->_publicKeyring = (string)$options['publicKeyring'];
+            if (!is_readable($this->_publicKeyring)) {
+                throw new Crypt_GPG_FileException(
+                    'The \'publicKeyring\' "' . $this->_publicKeyring .
+                    '" does not exist or is not readable. Check the location ' .
+                    'and ensure the file permissions are correct.',
+                    0, $this->_publicKeyring
+                );
+            }
+        }
+
+        // get private keyring
+        if (array_key_exists('privateKeyring', $options)) {
+            $this->_privateKeyring = (string)$options['privateKeyring'];
+            if (!is_readable($this->_privateKeyring)) {
+                throw new Crypt_GPG_FileException(
+                    'The \'privateKeyring\' "' . $this->_privateKeyring .
+                    '" does not exist or is not readable. Check the location ' .
+                    'and ensure the file permissions are correct.',
+                    0, $this->_privateKeyring
+                );
+            }
+        }
+
+        // get trust database
+        if (array_key_exists('trustDb', $options)) {
+            $this->_trustDb = (string)$options['trustDb'];
+            if (!is_readable($this->_trustDb)) {
+                throw new Crypt_GPG_FileException(
+                    'The \'trustDb\' "' . $this->_trustDb .
+                    '" does not exist or is not readable. Check the location ' .
+                    'and ensure the file permissions are correct.',
+                    0, $this->_trustDb
+                );
+            }
+        }
+
+        if (array_key_exists('debug', $options)) {
+            $this->_debug = $options['debug'];
+        }
+
+        $this->_strict = !empty($options['strict']);
+
+        if (!empty($options['digest-algo'])) {
+            $this->_digest_algo = $options['digest-algo'];
+        }
+
+        if (!empty($options['cipher-algo'])) {
+            $this->_cipher_algo = $options['cipher-algo'];
+        }
+    }
+
+    // }}}
+    // {{{ __destruct()
+
+    /**
+     * Closes open GPG subprocesses when this object is destroyed
+     *
+     * Subprocesses should never be left open by this class unless there is
+     * an unknown error and unexpected script termination occurs.
+     */
+    public function __destruct()
+    {
+        $this->_closeSubprocess();
+        $this->_closeIdleAgents();
+    }
+
+    // }}}
+    // {{{ addErrorHandler()
+
+    /**
+     * Adds an error handler method
+     *
+     * The method is run every time a new error line is received from the GPG
+     * subprocess. The handler method must accept the error line to be handled
+     * as its first parameter.
+     *
+     * @param callback $callback the callback method to use.
+     * @param array    $args     optional. Additional arguments to pass as
+     *                           parameters to the callback method.
+     *
+     * @return void
+     */
+    public function addErrorHandler($callback, array $args = array())
+    {
+        $this->_errorHandlers[] = array(
+            'callback' => $callback,
+            'args'     => $args
+        );
+    }
+
+    // }}}
+    // {{{ addStatusHandler()
+
+    /**
+     * Adds a status handler method
+     *
+     * The method is run every time a new status line is received from the
+     * GPG subprocess. The handler method must accept the status line to be
+     * handled as its first parameter.
+     *
+     * @param callback $callback the callback method to use.
+     * @param array    $args     optional. Additional arguments to pass as
+     *                           parameters to the callback method.
+     *
+     * @return void
+     */
+    public function addStatusHandler($callback, array $args = array())
+    {
+        $this->_statusHandlers[] = array(
+            'callback' => $callback,
+            'args'     => $args
+        );
+    }
+
+    // }}}
+    // {{{ sendCommand()
+
+    /**
+     * Sends a command to the GPG subprocess over the command file-descriptor
+     * pipe
+     *
+     * @param string $command the command to send.
+     *
+     * @return void
+     *
+     * @sensitive $command
+     */
+    public function sendCommand($command)
+    {
+        if (array_key_exists(self::FD_COMMAND, $this->_openPipes)) {
+            $this->_commandBuffer .= $command . PHP_EOL;
+        }
+    }
+
+    // }}}
+    // {{{ reset()
+
+    /**
+     * Resets the GPG engine, preparing it for a new operation
+     *
+     * @return void
+     *
+     * @see Crypt_GPG_Engine::run()
+     * @see Crypt_GPG_Engine::setOperation()
+     */
+    public function reset()
+    {
+        $this->_operation      = '';
+        $this->_arguments      = array();
+        $this->_input          = null;
+        $this->_message        = null;
+        $this->_output         = '';
+        $this->_commandBuffer  = '';
+
+        $this->_statusHandlers = array();
+        $this->_errorHandlers  = array();
+
+        if ($this->_debug) {
+            $this->addStatusHandler(array($this, '_handleDebugStatus'));
+            $this->addErrorHandler(array($this, '_handleDebugError'));
+        }
+
+        $this->_processHandler = new Crypt_GPG_ProcessHandler($this);
+
+        $this->addStatusHandler(array($this->_processHandler, 'handleStatus'));
+        $this->addErrorHandler(array($this->_processHandler, 'handleError'));
+    }
+
+    // }}}
+    // {{{ run()
+
+    /**
+     * Runs the current GPG operation.
+     *
+     * This creates and manages the GPG subprocess.
+     * This will close input/output file handles.
+     *
+     * The operation must be set with {@link Crypt_GPG_Engine::setOperation()}
+     * before this method is called.
+     *
+     * @return void
+     *
+     * @throws Crypt_GPG_InvalidOperationException if no operation is specified.
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *
+     * @see Crypt_GPG_Engine::reset()
+     * @see Crypt_GPG_Engine::setOperation()
+     */
+    public function run()
+    {
+        if ($this->_operation === '') {
+            throw new Crypt_GPG_InvalidOperationException(
+                'No GPG operation specified. Use Crypt_GPG_Engine::setOperation() ' .
+                'before calling Crypt_GPG_Engine::run().'
+            );
+        }
+
+        $this->_openSubprocess();
+        $this->_process();
+        $this->_closeSubprocess();
+    }
+
+    // }}}
+    // {{{ setInput()
+
+    /**
+     * Sets the input source for the current GPG operation
+     *
+     * @param string|resource &$input either a reference to the string
+     *                                containing the input data or an open
+     *                                stream resource containing the input
+     *                                data.
+     *
+     * @return void
+     */
+    public function setInput(&$input)
+    {
+        $this->_input =& $input;
+    }
+
+    // }}}
+    // {{{ setMessage()
+
+    /**
+     * Sets the message source for the current GPG operation
+     *
+     * Detached signature data should be specified here.
+     *
+     * @param string|resource &$message either a reference to the string
+     *                                  containing the message data or an open
+     *                                  stream resource containing the message
+     *                                  data.
+     *
+     * @return void
+     */
+    public function setMessage(&$message)
+    {
+        $this->_message =& $message;
+    }
+
+    // }}}
+    // {{{ setOutput()
+
+    /**
+     * Sets the output destination for the current GPG operation
+     *
+     * @param string|resource &$output either a reference to the string in
+     *                                 which to store GPG output or an open
+     *                                 stream resource to which the output data
+     *                                 should be written.
+     *
+     * @return void
+     */
+    public function setOutput(&$output)
+    {
+        $this->_output =& $output;
+    }
+
+    // }}}
+    // {{{ setOperation()
+
+    /**
+     * Sets the operation to perform
+     *
+     * @param string $operation the operation to perform. This should be one
+     *                          of GPG's operations. For example,
+     *                          <kbd>--encrypt</kbd>, <kbd>--decrypt</kbd>,
+     *                          <kbd>--sign</kbd>, etc.
+     * @param array  $arguments optional. Additional arguments for the GPG
+     *                          subprocess. See the GPG manual for specific
+     *                          values.
+     *
+     * @return void
+     *
+     * @see Crypt_GPG_Engine::reset()
+     * @see Crypt_GPG_Engine::run()
+     */
+    public function setOperation($operation, array $arguments = array())
+    {
+        $this->_operation = $operation;
+        $this->_arguments = $arguments;
+
+        $this->_processHandler->setOperation($operation);
+    }
+
+    // }}}
+    // {{{ setPins()
+
+    /**
+     * Sets the PINENTRY_USER_DATA environment variable with the currently
+     * added keys and passphrases
+     *
+     * Keys and passphrases are stored as an indexed array of passphrases
+     * in JSON encoded to a flat string.
+     *
+     * For GnuPG 2.x this is how passphrases are passed. For GnuPG 1.x the
+     * environment variable is set but not used.
+     *
+     * @param array $keys the internal key array to use.
+     *
+     * @return void
+     */
+    public function setPins(array $keys)
+    {
+        $envKeys = array();
+
+        foreach ($keys as $keyId => $key) {
+            $envKeys[$keyId] = is_array($key) ? $key['passphrase'] : $key;
+        }
+
+        $_ENV['PINENTRY_USER_DATA'] = json_encode($envKeys);
+    }
+
+    // }}}
+    // {{{ getVersion()
+
+    /**
+     * Gets the version of the GnuPG binary
+     *
+     * @return string a version number string containing the version of GnuPG
+     *                being used. This value is suitable to use with PHP's
+     *                version_compare() function.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @throws Crypt_GPG_UnsupportedException if the provided binary is not
+     *         GnuPG or if the GnuPG version is less than 1.0.2.
+     */
+    public function getVersion()
+    {
+        if ($this->_version == '') {
+            $options = array(
+                'homedir' => $this->_homedir,
+                'binary'  => $this->_binary,
+                'debug'   => $this->_debug,
+                'agent'   => $this->_agent,
+            );
+
+            $engine = new self($options);
+            $info   = '';
+
+            // Set a garbage version so we do not end up looking up the version
+            // recursively.
+            $engine->_version = '1.0.0';
+
+            $engine->reset();
+            $engine->setOutput($info);
+            $engine->setOperation('--version');
+            $engine->run();
+
+            $matches    = array();
+            $expression = '#gpg \(GnuPG[A-Za-z0-9/]*?\) (\S+)#';
+
+            if (preg_match($expression, $info, $matches) === 1) {
+                $this->_version = $matches[1];
+            } else {
+                throw new Crypt_GPG_Exception(
+                    'No GnuPG version information provided by the binary "' .
+                    $this->_binary . '". Are you sure it is GnuPG?'
+                );
+            }
+
+            if (version_compare($this->_version, self::MIN_VERSION, 'lt')) {
+                throw new Crypt_GPG_Exception(
+                    'The version of GnuPG being used (' . $this->_version .
+                    ') is not supported by Crypt_GPG. The minimum version ' .
+                    'required by Crypt_GPG is ' . self::MIN_VERSION
+                );
+            }
+        }
+
+
+        return $this->_version;
+    }
+
+    // }}}
+    // {{{ getProcessData()
+
+    /**
+     * Get data from the last process execution.
+     *
+     * @param string $name Data element name (e.g. 'SignatureInfo')
+     *
+     * @return mixed
+     * @see    Crypt_GPG_ProcessHandler::getData()
+     */
+    public function getProcessData($name)
+    {
+        if ($this->_processHandler) {
+            switch ($name) {
+            case 'SignatureInfo':
+                if ($data = $this->_processHandler->getData('SigCreated')) {
+                    return new Crypt_GPG_SignatureCreationInfo($data);
+                }
+                break;
+
+            case 'Signatures':
+                return (array) $this->_processHandler->getData('Signatures');
+
+            default:
+                return $this->_processHandler->getData($name);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ setProcessData()
+
+    /**
+     * Set some data for the process execution.
+     *
+     * @param string $name  Data element name (e.g. 'Handle')
+     * @param mixed  $value Data value
+     *
+     * @return void
+     */
+    public function setProcessData($name, $value)
+    {
+        if ($this->_processHandler) {
+            $this->_processHandler->setData($name, $value);
+        }
+    }
+
+    // }}}
+    // {{{ _handleDebugStatus()
+
+    /**
+     * Displays debug output for status lines
+     *
+     * @param string $line the status line to handle.
+     *
+     * @return void
+     */
+    private function _handleDebugStatus($line)
+    {
+        $this->_debug('STATUS: ' . $line);
+    }
+
+    // }}}
+    // {{{ _handleDebugError()
+
+    /**
+     * Displays debug output for error lines
+     *
+     * @param string $line the error line to handle.
+     *
+     * @return void
+     */
+    private function _handleDebugError($line)
+    {
+        $this->_debug('ERROR: ' . $line);
+    }
+
+    // }}}
+    // {{{ _process()
+
+    /**
+     * Performs internal streaming operations for the subprocess using either
+     * strings or streams as input / output points
+     *
+     * This is the main I/O loop for streaming to and from the GPG subprocess.
+     *
+     * The implementation of this method is verbose mainly for performance
+     * reasons. Adding streams to a lookup array and looping the array inside
+     * the main I/O loop would be siginficantly slower for large streams.
+     *
+     * @return void
+     *
+     * @throws Crypt_GPG_Exception if there is an error selecting streams for
+     *         reading or writing. If this occurs, please file a bug report at
+     *         http://pear.php.net/bugs/report.php?package=Crypt_GPG.
+     */
+    private function _process()
+    {
+        $this->_debug('BEGIN PROCESSING');
+
+        $this->_commandBuffer = '';    // buffers input to GPG
+        $messageBuffer        = '';    // buffers input to GPG
+        $inputBuffer          = '';    // buffers input to GPG
+        $outputBuffer         = '';    // buffers output from GPG
+        $statusBuffer         = '';    // buffers output from GPG
+        $errorBuffer          = '';    // buffers output from GPG
+        $inputComplete        = false; // input stream is completely buffered
+        $messageComplete      = false; // message stream is completely buffered
+
+        if (is_string($this->_input)) {
+            $inputBuffer   = $this->_input;
+            $inputComplete = true;
+        }
+
+        if (is_string($this->_message)) {
+            $messageBuffer   = $this->_message;
+            $messageComplete = true;
+        }
+
+        if (is_string($this->_output)) {
+            $outputBuffer =& $this->_output;
+        }
+
+        // convenience variables
+        $fdInput   = $this->_pipes[self::FD_INPUT];
+        $fdOutput  = $this->_pipes[self::FD_OUTPUT];
+        $fdError   = $this->_pipes[self::FD_ERROR];
+        $fdStatus  = $this->_pipes[self::FD_STATUS];
+        $fdCommand = $this->_pipes[self::FD_COMMAND];
+        $fdMessage = $this->_pipes[self::FD_MESSAGE];
+
+        // select loop delay in milliseconds
+        $delay         = 0;
+        $inputPosition = 0;
+        $eolLength     = mb_strlen(PHP_EOL, '8bit');
+
+        while (true) {
+            $inputStreams     = array();
+            $outputStreams    = array();
+            $exceptionStreams = array();
+
+            // set up input streams
+            if (is_resource($this->_input) && !$inputComplete) {
+                if (feof($this->_input)) {
+                    $inputComplete = true;
+                } else {
+                    $inputStreams[] = $this->_input;
+                }
+            }
+
+            // close GPG input pipe if there is no more data
+            if ($inputBuffer == '' && $inputComplete) {
+                $this->_debug('=> closing GPG input pipe');
+                $this->_closePipe(self::FD_INPUT);
+            }
+
+            if (is_resource($this->_message) && !$messageComplete) {
+                if (feof($this->_message)) {
+                    $messageComplete = true;
+                } else {
+                    $inputStreams[] = $this->_message;
+                }
+            }
+
+            // close GPG message pipe if there is no more data
+            if ($messageBuffer == '' && $messageComplete) {
+                $this->_debug('=> closing GPG message pipe');
+                $this->_closePipe(self::FD_MESSAGE);
+            }
+
+            if (!feof($fdOutput)) {
+                $inputStreams[] = $fdOutput;
+            }
+
+            if (!feof($fdStatus)) {
+                $inputStreams[] = $fdStatus;
+            }
+
+            if (!feof($fdError)) {
+                $inputStreams[] = $fdError;
+            }
+
+            // set up output streams
+            if ($outputBuffer != '' && is_resource($this->_output)) {
+                $outputStreams[] = $this->_output;
+            }
+
+            if ($this->_commandBuffer != '' && is_resource($fdCommand)) {
+                $outputStreams[] = $fdCommand;
+            }
+
+            if ($messageBuffer != '' && is_resource($fdMessage)) {
+                $outputStreams[] = $fdMessage;
+            }
+
+            if ($inputBuffer != '' && is_resource($fdInput)) {
+                $outputStreams[] = $fdInput;
+            }
+
+            // no streams left to read or write, we're all done
+            if (count($inputStreams) === 0 && count($outputStreams) === 0) {
+                break;
+            }
+
+            $this->_debug('selecting streams');
+
+            $ready = stream_select(
+                $inputStreams,
+                $outputStreams,
+                $exceptionStreams,
+                null
+            );
+
+            $this->_debug('=> got ' . $ready);
+
+            if ($ready === false) {
+                throw new Crypt_GPG_Exception(
+                    'Error selecting stream for communication with GPG ' .
+                    'subprocess. Please file a bug report at: ' .
+                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'
+                );
+            }
+
+            if ($ready === 0) {
+                throw new Crypt_GPG_Exception(
+                    'stream_select() returned 0. This can not happen! Please ' .
+                    'file a bug report at: ' .
+                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'
+                );
+            }
+
+            // write input (to GPG)
+            if (in_array($fdInput, $outputStreams, true)) {
+                $this->_debug('GPG is ready for input');
+
+                $chunk  = mb_substr($inputBuffer, $inputPosition, self::CHUNK_SIZE, '8bit');
+                $length = mb_strlen($chunk, '8bit');
+
+                $this->_debug(
+                    '=> about to write ' . $length . ' bytes to GPG input'
+                );
+
+                $length = fwrite($fdInput, $chunk, $length);
+                if ($length === 0) {
+                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
+                    // the pipe was seleted for writing, we assume it was EPIPE.
+                    // There's no way to get the actual error code in PHP. See
+                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
+                    $this->_debug('=> broken pipe on GPG input');
+                    $this->_debug('=> closing pipe GPG input');
+                    $this->_closePipe(self::FD_INPUT);
+                } else {
+                    $this->_debug('=> wrote ' . $length . ' bytes');
+                    // Move the position pointer, don't modify $inputBuffer (#21081)
+                    if (is_string($this->_input)) {
+                        $inputPosition += $length;
+                    } else {
+                        $inputPosition = 0;
+                        $inputBuffer   = mb_substr($inputBuffer, $length, null, '8bit');
+                    }
+                }
+            }
+
+            // read input (from PHP stream)
+            // If the buffer is too big wait until it's smaller, we don't want
+            // to use too much memory
+            if (in_array($this->_input, $inputStreams, true)
+                && mb_strlen($inputBuffer, '8bit') < self::CHUNK_SIZE
+            ) {
+                $this->_debug('input stream is ready for reading');
+                $this->_debug(
+                    '=> about to read ' . self::CHUNK_SIZE .
+                    ' bytes from input stream'
+                );
+
+                $chunk        = fread($this->_input, self::CHUNK_SIZE);
+                $length       = mb_strlen($chunk, '8bit');
+                $inputBuffer .= $chunk;
+
+                $this->_debug('=> read ' . $length . ' bytes');
+            }
+
+            // write message (to GPG)
+            if (in_array($fdMessage, $outputStreams, true)) {
+                $this->_debug('GPG is ready for message data');
+
+                $chunk  = mb_substr($messageBuffer, 0, self::CHUNK_SIZE, '8bit');
+                $length = mb_strlen($chunk, '8bit');
+
+                $this->_debug(
+                    '=> about to write ' . $length . ' bytes to GPG message'
+                );
+
+                $length = fwrite($fdMessage, $chunk, $length);
+                if ($length === 0) {
+                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
+                    // the pipe was seleted for writing, we assume it was EPIPE.
+                    // There's no way to get the actual error code in PHP. See
+                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
+                    $this->_debug('=> broken pipe on GPG message');
+                    $this->_debug('=> closing pipe GPG message');
+                    $this->_closePipe(self::FD_MESSAGE);
+                } else {
+                    $this->_debug('=> wrote ' . $length . ' bytes');
+                    $messageBuffer = mb_substr($messageBuffer, $length, null, '8bit');
+                }
+            }
+
+            // read message (from PHP stream)
+            if (in_array($this->_message, $inputStreams, true)) {
+                $this->_debug('message stream is ready for reading');
+                $this->_debug(
+                    '=> about to read ' . self::CHUNK_SIZE .
+                    ' bytes from message stream'
+                );
+
+                $chunk          = fread($this->_message, self::CHUNK_SIZE);
+                $length         = mb_strlen($chunk, '8bit');
+                $messageBuffer .= $chunk;
+
+                $this->_debug('=> read ' . $length . ' bytes');
+            }
+
+            // read output (from GPG)
+            if (in_array($fdOutput, $inputStreams, true)) {
+                $this->_debug('GPG output stream ready for reading');
+                $this->_debug(
+                    '=> about to read ' . self::CHUNK_SIZE .
+                    ' bytes from GPG output'
+                );
+
+                $chunk         = fread($fdOutput, self::CHUNK_SIZE);
+                $length        = mb_strlen($chunk, '8bit');
+                $outputBuffer .= $chunk;
+
+                $this->_debug('=> read ' . $length . ' bytes');
+            }
+
+            // write output (to PHP stream)
+            if (in_array($this->_output, $outputStreams, true)) {
+                $this->_debug('output stream is ready for data');
+
+                $chunk  = mb_substr($outputBuffer, 0, self::CHUNK_SIZE, '8bit');
+                $length = mb_strlen($chunk, '8bit');
+
+                $this->_debug(
+                    '=> about to write ' . $length . ' bytes to output stream'
+                );
+
+                $length       = fwrite($this->_output, $chunk, $length);
+                $outputBuffer = mb_substr($outputBuffer, $length, null, '8bit');
+
+                $this->_debug('=> wrote ' . $length . ' bytes');
+            }
+
+            // read error (from GPG)
+            if (in_array($fdError, $inputStreams, true)) {
+                $this->_debug('GPG error stream ready for reading');
+                $this->_debug(
+                    '=> about to read ' . self::CHUNK_SIZE .
+                    ' bytes from GPG error'
+                );
+
+                $chunk        = fread($fdError, self::CHUNK_SIZE);
+                $length       = mb_strlen($chunk, '8bit');
+                $errorBuffer .= $chunk;
+
+                $this->_debug('=> read ' . $length . ' bytes');
+
+                // pass lines to error handlers
+                while (($pos = strpos($errorBuffer, PHP_EOL)) !== false) {
+                    $line = mb_substr($errorBuffer, 0, $pos, '8bit');
+                    foreach ($this->_errorHandlers as $handler) {
+                        array_unshift($handler['args'], $line);
+                        call_user_func_array(
+                            $handler['callback'],
+                            $handler['args']
+                        );
+
+                        array_shift($handler['args']);
+                    }
+
+                    $errorBuffer = mb_substr($errorBuffer, $pos + $eolLength, null, '8bit');
+                }
+            }
+
+            // read status (from GPG)
+            if (in_array($fdStatus, $inputStreams, true)) {
+                $this->_debug('GPG status stream ready for reading');
+                $this->_debug(
+                    '=> about to read ' . self::CHUNK_SIZE .
+                    ' bytes from GPG status'
+                );
+
+                $chunk         = fread($fdStatus, self::CHUNK_SIZE);
+                $length        = mb_strlen($chunk, '8bit');
+                $statusBuffer .= $chunk;
+
+                $this->_debug('=> read ' . $length . ' bytes');
+
+                // pass lines to status handlers
+                while (($pos = strpos($statusBuffer, PHP_EOL)) !== false) {
+                    $line = mb_substr($statusBuffer, 0, $pos, '8bit');
+                    // only pass lines beginning with magic prefix
+                    if (mb_substr($line, 0, 9, '8bit') == '[GNUPG:] ') {
+                        $line = mb_substr($line, 9, null, '8bit');
+                        foreach ($this->_statusHandlers as $handler) {
+                            array_unshift($handler['args'], $line);
+                            call_user_func_array(
+                                $handler['callback'],
+                                $handler['args']
+                            );
+
+                            array_shift($handler['args']);
+                        }
+                    }
+
+                    $statusBuffer = mb_substr($statusBuffer, $pos + $eolLength, null, '8bit');
+                }
+            }
+
+            // write command (to GPG)
+            if (in_array($fdCommand, $outputStreams, true)) {
+                $this->_debug('GPG is ready for command data');
+
+                // send commands
+                $chunk  = mb_substr($this->_commandBuffer, 0, self::CHUNK_SIZE, '8bit');
+                $length = mb_strlen($chunk, '8bit');
+
+                $this->_debug(
+                    '=> about to write ' . $length . ' bytes to GPG command'
+                );
+
+                $length = fwrite($fdCommand, $chunk, $length);
+                if ($length === 0) {
+                    // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
+                    // the pipe was seleted for writing, we assume it was EPIPE.
+                    // There's no way to get the actual error code in PHP. See
+                    // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
+                    $this->_debug('=> broken pipe on GPG command');
+                    $this->_debug('=> closing pipe GPG command');
+                    $this->_closePipe(self::FD_COMMAND);
+                } else {
+                    $this->_debug('=> wrote ' . $length);
+                    $this->_commandBuffer = mb_substr($this->_commandBuffer, $length, null, '8bit');
+                }
+            }
+
+            if (count($outputStreams) === 0 || count($inputStreams) === 0) {
+                // we have an I/O imbalance, increase the select loop delay
+                // to smooth things out
+                $delay += 10;
+            } else {
+                // things are running smoothly, decrease the delay
+                $delay -= 8;
+                $delay = max(0, $delay);
+            }
+
+            if ($delay > 0) {
+                usleep($delay);
+            }
+
+        } // end loop while streams are open
+
+        $this->_debug('END PROCESSING');
+    }
+
+    // }}}
+    // {{{ _openSubprocess()
+
+    /**
+     * Opens an internal GPG subprocess for the current operation
+     *
+     * Opens a GPG subprocess, then connects the subprocess to some pipes. Sets
+     * the private class property {@link Crypt_GPG_Engine::$_process} to
+     * the new subprocess.
+     *
+     * @return void
+     *
+     * @throws Crypt_GPG_OpenSubprocessException if the subprocess could not be
+     *         opened.
+     *
+     * @see Crypt_GPG_Engine::setOperation()
+     * @see Crypt_GPG_Engine::_closeSubprocess()
+     * @see Crypt_GPG_Engine::$_process
+     */
+    private function _openSubprocess()
+    {
+        $version = $this->getVersion();
+
+        // log versions, but not when looking for the version number
+        if ($version !== '1.0.0') {
+            $this->_debug('USING GPG ' . $version . ' with PHP ' . PHP_VERSION);
+        }
+
+        // Binary operations will not work on Windows with PHP < 5.2.6. This is
+        // in case stream_select() ever works on Windows.
+        $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
+        $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';
+
+        $env = $_ENV;
+
+        // Newer versions of GnuPG return localized results. Crypt_GPG only
+        // works with English, so set the locale to 'C' for the subprocess.
+        $env['LC_ALL'] = 'C';
+
+        // If using GnuPG 2.x < 2.1.13 start the gpg-agent
+        if (version_compare($version, '2.0.0', 'ge')
+            && version_compare($version, '2.1.13', 'lt')
+        ) {
+            if (!$this->_agent) {
+                throw new Crypt_GPG_OpenSubprocessException(
+                    'Unable to open gpg-agent subprocess (gpg-agent not found). ' .
+                    'Please specify location of the gpg-agent binary ' .
+                    'using the \'agent\' driver option.'
+                );
+            }
+
+            $agentArguments = array(
+                '--daemon',
+                '--options /dev/null', // ignore any saved options
+                '--csh', // output is easier to parse
+                '--keep-display', // prevent passing --display to pinentry
+                '--no-grab',
+                '--ignore-cache-for-signing',
+                '--pinentry-touch-file /dev/null',
+                '--disable-scdaemon',
+                '--no-use-standard-socket',
+                '--pinentry-program ' . escapeshellarg($this->_getPinEntry())
+            );
+
+            if ($this->_homedir) {
+                $agentArguments[] = '--homedir ' .
+                    escapeshellarg($this->_homedir);
+            }
+
+            if ($version21 = version_compare($version, '2.1.0', 'ge')) {
+                // This is needed to get socket file location in stderr output
+                // Note: This does not help when the agent already is running
+                $agentArguments[] = '--verbose';
+            }
+
+            $agentCommandLine = $this->_agent . ' ' . implode(' ', $agentArguments);
+
+            $agentDescriptorSpec = array(
+                self::FD_INPUT   => array('pipe', $rb), // stdin
+                self::FD_OUTPUT  => array('pipe', $wb), // stdout
+                self::FD_ERROR   => array('pipe', $wb)  // stderr
+            );
+
+            $this->_debug('OPENING GPG-AGENT SUBPROCESS WITH THE FOLLOWING COMMAND:');
+            $this->_debug($agentCommandLine);
+
+            $this->_agentProcess = proc_open(
+                $agentCommandLine,
+                $agentDescriptorSpec,
+                $this->_agentPipes,
+                null,
+                $env,
+                array('binary_pipes' => true)
+            );
+
+            if (!is_resource($this->_agentProcess)) {
+                throw new Crypt_GPG_OpenSubprocessException(
+                    'Unable to open gpg-agent subprocess.',
+                    0,
+                    $agentCommandLine
+                );
+            }
+
+            // Get GPG_AGENT_INFO and set environment variable for gpg process.
+            // This is a blocking read, but is only 1 line.
+            $agentInfo = fread($this->_agentPipes[self::FD_OUTPUT], self::CHUNK_SIZE);
+
+            // For GnuPG 2.1 we need to read both stderr and stdout
+            if ($version21) {
+                $agentInfo .= "\n" . fread($this->_agentPipes[self::FD_ERROR], self::CHUNK_SIZE);
+            }
+
+            if ($agentInfo) {
+                foreach (explode("\n", $agentInfo) as $line) {
+                    if ($version21) {
+                        if (preg_match('/listening on socket \'([^\']+)/', $line, $m)) {
+                            $this->_agentInfo = $m[1];
+                        } else if (preg_match('/gpg-agent\[([0-9]+)\].* started/', $line, $m)) {
+                            $this->_agentInfo .= ':' . $m[1] . ':1';
+                        }
+                    } else if (preg_match('/GPG_AGENT_INFO[=\s]([^;]+)/', $line, $m)) {
+                        $this->_agentInfo = $m[1];
+                        break;
+                    }
+                }
+            }
+
+            $this->_debug('GPG-AGENT-INFO: ' . $this->_agentInfo);
+
+            $env['GPG_AGENT_INFO'] = $this->_agentInfo;
+
+            // gpg-agent daemon is started, we can close the launching process
+            $this->_closeAgentLaunchProcess();
+
+            // Terminate processes if something went wrong
+            register_shutdown_function(array($this, '__destruct'));
+        }
+
+        // "Register" GPGConf existence for _closeIdleAgents()
+        if (version_compare($version, '2.1.0', 'ge')) {
+            if ($this->_gpgconf === null) {
+                $this->_gpgconf = $this->_getGPGConf();
+            }
+        } else {
+            $this->_gpgconf = false;
+        }
+
+        $commandLine = $this->_binary;
+
+        $defaultArguments = array(
+            '--status-fd ' . escapeshellarg(self::FD_STATUS),
+            '--command-fd ' . escapeshellarg(self::FD_COMMAND),
+            '--no-secmem-warning',
+            '--no-tty',
+            '--no-default-keyring', // ignored if keying files are not specified
+            '--no-options'          // prevent creation of ~/.gnupg directory
+        );
+
+        if (version_compare($version, '1.0.7', 'ge')) {
+            if (version_compare($version, '2.0.0', 'lt')) {
+                $defaultArguments[] = '--no-use-agent';
+            }
+            $defaultArguments[] = '--no-permission-warning';
+        }
+
+        if (version_compare($version, '1.4.2', 'ge')) {
+            $defaultArguments[] = '--exit-on-status-write-error';
+        }
+
+        if (version_compare($version, '1.3.2', 'ge')) {
+            $defaultArguments[] = '--trust-model always';
+        } else {
+            $defaultArguments[] = '--always-trust';
+        }
+
+        // Since 2.1.13 we can use "loopback mode" instead of gpg-agent
+        if (version_compare($version, '2.1.13', 'ge')) {
+            $defaultArguments[] = '--pinentry-mode loopback';
+        }
+
+        if (!$this->_strict) {
+            $defaultArguments[] = '--ignore-time-conflict';
+            $defaultArguments[] = '--ignore-valid-from';
+        }
+
+        if (!empty($this->_digest_algo)) {
+            $defaultArguments[] = '--digest-algo ' . escapeshellarg($this->_digest_algo);
+            $defaultArguments[] = '--s2k-digest-algo ' . escapeshellarg($this->_digest_algo);
+        }
+
+        if (!empty($this->_cipher_algo)) {
+            $defaultArguments[] = '--cipher-algo ' . escapeshellarg($this->_cipher_algo);
+            $defaultArguments[] = '--s2k-cipher-algo ' . escapeshellarg($this->_cipher_algo);
+        }
+
+        $arguments = array_merge($defaultArguments, $this->_arguments);
+
+        if ($this->_homedir) {
+            $arguments[] = '--homedir ' . escapeshellarg($this->_homedir);
+
+            // the random seed file makes subsequent actions faster so only
+            // disable it if we have to.
+            if (!is_writeable($this->_homedir)) {
+                $arguments[] = '--no-random-seed-file';
+            }
+        }
+
+        if ($this->_publicKeyring) {
+            $arguments[] = '--keyring ' . escapeshellarg($this->_publicKeyring);
+        }
+
+        if ($this->_privateKeyring) {
+            $arguments[] = '--secret-keyring ' .
+                escapeshellarg($this->_privateKeyring);
+        }
+
+        if ($this->_trustDb) {
+            $arguments[] = '--trustdb-name ' . escapeshellarg($this->_trustDb);
+        }
+
+        $commandLine .= ' ' . implode(' ', $arguments) . ' ' .
+            $this->_operation;
+
+        $descriptorSpec = array(
+            self::FD_INPUT   => array('pipe', $rb), // stdin
+            self::FD_OUTPUT  => array('pipe', $wb), // stdout
+            self::FD_ERROR   => array('pipe', $wb), // stderr
+            self::FD_STATUS  => array('pipe', $wb), // status
+            self::FD_COMMAND => array('pipe', $rb), // command
+            self::FD_MESSAGE => array('pipe', $rb)  // message
+        );
+
+        $this->_debug('OPENING GPG SUBPROCESS WITH THE FOLLOWING COMMAND:');
+        $this->_debug($commandLine);
+
+        $this->_process = proc_open(
+            $commandLine,
+            $descriptorSpec,
+            $this->_pipes,
+            null,
+            $env,
+            array('binary_pipes' => true)
+        );
+
+        if (!is_resource($this->_process)) {
+            throw new Crypt_GPG_OpenSubprocessException(
+                'Unable to open GPG subprocess.', 0, $commandLine
+            );
+        }
+
+        // Set streams as non-blocking. See Bug #18618.
+        foreach ($this->_pipes as $pipe) {
+            stream_set_blocking($pipe, 0);
+            stream_set_write_buffer($pipe, self::CHUNK_SIZE);
+            stream_set_chunk_size($pipe, self::CHUNK_SIZE);
+            stream_set_read_buffer($pipe, self::CHUNK_SIZE);
+        }
+
+        $this->_openPipes = $this->_pipes;
+    }
+
+    // }}}
+    // {{{ _closeSubprocess()
+
+    /**
+     * Closes the internal GPG subprocess
+     *
+     * Closes the internal GPG subprocess. Sets the private class property
+     * {@link Crypt_GPG_Engine::$_process} to null.
+     *
+     * @return void
+     *
+     * @see Crypt_GPG_Engine::_openSubprocess()
+     * @see Crypt_GPG_Engine::$_process
+     */
+    private function _closeSubprocess()
+    {
+        // clear PINs from environment if they were set
+        $_ENV['PINENTRY_USER_DATA'] = null;
+
+        if (is_resource($this->_process)) {
+            $this->_debug('CLOSING GPG SUBPROCESS');
+
+            // close remaining open pipes
+            foreach (array_keys($this->_openPipes) as $pipeNumber) {
+                $this->_closePipe($pipeNumber);
+            }
+
+            $status   = proc_get_status($this->_process);
+            $exitCode = proc_close($this->_process);
+
+            // proc_close() can return -1 in some cases,
+            // get the real exit code from the process status
+            if ($exitCode < 0 && $status && !$status['running']) {
+                $exitCode = $status['exitcode'];
+            }
+
+            if ($exitCode > 0) {
+                $this->_debug(
+                    '=> subprocess returned an unexpected exit code: ' .
+                    $exitCode
+                );
+            }
+
+            $this->_process = null;
+            $this->_pipes   = array();
+
+            // close file handles before throwing an exception
+            if (is_resource($this->_input)) {
+                fclose($this->_input);
+            }
+
+            if (is_resource($this->_output)) {
+                fclose($this->_output);
+            }
+
+            $this->_processHandler->throwException($exitCode);
+        }
+
+        $this->_closeAgentLaunchProcess();
+
+        if ($this->_agentInfo !== null) {
+            $parts = explode(':', $this->_agentInfo, 3);
+
+            if (!empty($parts[1])) {
+                $this->_debug('STOPPING GPG-AGENT DAEMON');
+
+                $process = new Crypt_GPG_ProcessControl($parts[1]);
+
+                // terminate agent daemon
+                $process->terminate();
+
+                while ($process->isRunning()) {
+                    usleep(10000); // 10 ms
+                    $process->terminate();
+                }
+
+                $this->_debug('GPG-AGENT DAEMON STOPPED');
+            }
+
+            $this->_agentInfo = null;
+        }
+    }
+
+    // }}}
+    // {{{ _closeAgentLaunchProcess()
+
+    /**
+     * Closes a the internal GPG-AGENT subprocess
+     *
+     * Closes the internal GPG-AGENT subprocess. Sets the private class property
+     * {@link Crypt_GPG_Engine::$_agentProcess} to null.
+     *
+     * @return void
+     *
+     * @see Crypt_GPG_Engine::_openSubprocess()
+     * @see Crypt_GPG_Engine::$_agentProcess
+     */
+    private function _closeAgentLaunchProcess()
+    {
+        if (is_resource($this->_agentProcess)) {
+            $this->_debug('CLOSING GPG-AGENT LAUNCH PROCESS');
+
+            // close agent pipes
+            foreach ($this->_agentPipes as $pipe) {
+                fflush($pipe);
+                fclose($pipe);
+            }
+
+            // close agent launching process
+            proc_close($this->_agentProcess);
+
+            $this->_agentProcess = null;
+            $this->_agentPipes   = array();
+
+            $this->_debug('GPG-AGENT LAUNCH PROCESS CLOSED');
+        }
+    }
+
+    // }}}
+    // {{{ _closePipe()
+
+    /**
+     * Closes an opened pipe used to communicate with the GPG subprocess
+     *
+     * If the pipe is already closed, it is ignored. If the pipe is open, it
+     * is flushed and then closed.
+     *
+     * @param integer $pipeNumber the file descriptor number of the pipe to
+     *                            close.
+     *
+     * @return void
+     */
+    private function _closePipe($pipeNumber)
+    {
+        $pipeNumber = intval($pipeNumber);
+        if (array_key_exists($pipeNumber, $this->_openPipes)) {
+            fflush($this->_openPipes[$pipeNumber]);
+            fclose($this->_openPipes[$pipeNumber]);
+            unset($this->_openPipes[$pipeNumber]);
+        }
+    }
+
+    // }}}
+    // {{{ _closeIdleAgents()
+
+    /**
+     * Forces automatically started gpg-agent process to cleanup and exit
+     * within a minute.
+     *
+     * This is needed in GnuPG 2.1 where agents are started
+     * automatically by gpg process, not our code.
+     *
+     * @return void
+     */
+    private function _closeIdleAgents()
+    {
+        if ($this->_gpgconf) {
+            // before 2.1.13 --homedir wasn't supported, use env variable
+            $env = array('GNUPGHOME' => $this->_homedir);
+            $cmd = $this->_gpgconf . ' --kill gpg-agent';
+
+            if ($process = proc_open($cmd, array(), $pipes, null, $env)) {
+                proc_close($process);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ _getBinary()
+
+    /**
+     * Gets the name of the GPG binary for the current operating system
+     *
+     * This method is called if the '<kbd>binary</kbd>' option is <i>not</i>
+     * specified when creating this driver.
+     *
+     * @return string the name of the GPG binary for the current operating
+     *                system. If no suitable binary could be found, an empty
+     *                string is returned.
+     */
+    private function _getBinary()
+    {
+        if ($binary = $this->_findBinary('gpg')) {
+            return $binary;
+        }
+
+        return $this->_findBinary('gpg2');
+    }
+
+    // }}}
+    // {{{ _getAgent()
+
+    /**
+     * Gets the name of the GPG-AGENT binary for the current operating system
+     *
+     * @return string the name of the GPG-AGENT binary for the current operating
+     *                system. If no suitable binary could be found, an empty
+     *                string is returned.
+     */
+    private function _getAgent()
+    {
+        return $this->_findBinary('gpg-agent');
+    }
+
+    // }}}
+    // {{{ _getGPGConf()
+
+    /**
+     * Gets the name of the GPGCONF binary for the current operating system
+     *
+     * @return string the name of the GPGCONF binary for the current operating
+     *                system. If no suitable binary could be found, an empty
+     *                string is returned.
+     */
+    private function _getGPGConf()
+    {
+        return $this->_findBinary('gpgconf');
+    }
+
+    // }}}
+    // {{{ _findBinary()
+
+    /**
+     * Gets the location of a binary for the current operating system
+     *
+     * @param string $name Name of a binary program
+     *
+     * @return string The location of the binary for the current operating
+     *                system. If no suitable binary could be found, an empty
+     *                string is returned.
+     */
+    private function _findBinary($name)
+    {
+        $binary = '';
+
+        if ($this->_isDarwin) {
+            $locations = array(
+                '/opt/local/bin/', // MacPorts
+                '/usr/local/bin/', // Mac GPG
+                '/sw/bin/',        // Fink
+                '/usr/bin/'
+            );
+        } else {
+            $locations = array(
+                '/usr/bin/',
+                '/usr/local/bin/'
+            );
+        }
+
+        foreach ($locations as $location) {
+            if (is_executable($location . $name)) {
+                $binary = $location . $name;
+                break;
+            }
+        }
+
+        return $binary;
+    }
+
+    // }}}
+    // {{{ _getPinEntry()
+
+    /**
+     * Gets the location of the PinEntry script
+     *
+     * @return string the location of the PinEntry script.
+     */
+    private function _getPinEntry()
+    {
+        // Find PinEntry program depending on the way how the package is installed
+        $ds    = DIRECTORY_SEPARATOR;
+        $root  = __DIR__ . $ds . '..' . $ds . '..' . $ds;
+        $paths = array(
+            '@bin-dir@', // PEAR
+             $root . 'scripts', // Git
+             $root . 'bin', // Composer
+        );
+
+        foreach ($paths as $path) {
+            if (file_exists($path . $ds . 'crypt-gpg-pinentry')) {
+                return $path . $ds . 'crypt-gpg-pinentry';
+            }
+        }
+    }
+
+    // }}}
+    // {{{ _debug()
+
+    /**
+     * Displays debug text if debugging is turned on
+     *
+     * Debugging text is prepended with a debug identifier and echoed to stdout.
+     *
+     * @param string $text the debugging text to display.
+     *
+     * @return void
+     */
+    private function _debug($text)
+    {
+        if ($this->_debug) {
+            if (php_sapi_name() === 'cli') {
+                foreach (explode(PHP_EOL, $text) as $line) {
+                    echo "Crypt_GPG DEBUG: ", $line, PHP_EOL;
+                }
+            } else if (is_callable($this->_debug)) {
+                call_user_func($this->_debug, $text);
+            } else {
+                // running on a web server, format debug output nicely
+                foreach (explode(PHP_EOL, $text) as $line) {
+                    echo "Crypt_GPG DEBUG: <strong>", htmlspecialchars($line),
+                        '</strong><br />', PHP_EOL;
+                }
+            }
+        }
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/Exceptions.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,597 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Various exception handling classes for Crypt_GPG
+ *
+ * Crypt_GPG provides an object oriented interface to GNU Privacy
+ * Guard (GPG). It requires the GPG executable to be on the system.
+ *
+ * This file contains various exception classes used by the Crypt_GPG package.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * PEAR Exception handler and base class
+ */
+require_once 'PEAR/Exception.php';
+
+// {{{ class Crypt_GPG_Exception
+
+/**
+ * An exception thrown by the Crypt_GPG package
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_Exception extends PEAR_Exception
+{
+}
+
+// }}}
+// {{{ class Crypt_GPG_FileException
+
+/**
+ * An exception thrown when a file is used in ways it cannot be used
+ *
+ * For example, if an output file is specified and the file is not writeable, or
+ * if an input file is specified and the file is not readable, this exception
+ * is thrown.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2007-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_FileException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The name of the file that caused this exception
+     *
+     * @var string
+     */
+    private $_filename = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_FileException
+     *
+     * @param string  $message  an error message.
+     * @param integer $code     a user defined error code.
+     * @param string  $filename the name of the file that caused this exception.
+     */
+    public function __construct($message, $code = 0, $filename = '')
+    {
+        $this->_filename = $filename;
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getFilename()
+
+    /**
+     * Returns the filename of the file that caused this exception
+     *
+     * @return string the filename of the file that caused this exception.
+     *
+     * @see Crypt_GPG_FileException::$_filename
+     */
+    public function getFilename()
+    {
+        return $this->_filename;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_OpenSubprocessException
+
+/**
+ * An exception thrown when the GPG subprocess cannot be opened
+ *
+ * This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a
+ * new subprocess and fails.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The command used to try to open the subprocess
+     *
+     * @var string
+     */
+    private $_command = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_OpenSubprocessException
+     *
+     * @param string  $message an error message.
+     * @param integer $code    a user defined error code.
+     * @param string  $command the command that was called to open the
+     *                         new subprocess.
+     *
+     * @see Crypt_GPG::_openSubprocess()
+     */
+    public function __construct($message, $code = 0, $command = '')
+    {
+        $this->_command = $command;
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getCommand()
+
+    /**
+     * Returns the contents of the internal _command property
+     *
+     * @return string the command used to open the subprocess.
+     *
+     * @see Crypt_GPG_OpenSubprocessException::$_command
+     */
+    public function getCommand()
+    {
+        return $this->_command;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_InvalidOperationException
+
+/**
+ * An exception thrown when an invalid GPG operation is attempted
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The attempted operation
+     *
+     * @var string
+     */
+    private $_operation = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_OpenSubprocessException
+     *
+     * @param string  $message   an error message.
+     * @param integer $code      a user defined error code.
+     * @param string  $operation the operation.
+     */
+    public function __construct($message, $code = 0, $operation = '')
+    {
+        $this->_operation = $operation;
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getOperation()
+
+    /**
+     * Returns the contents of the internal _operation property
+     *
+     * @return string the attempted operation.
+     *
+     * @see Crypt_GPG_InvalidOperationException::$_operation
+     */
+    public function getOperation()
+    {
+        return $this->_operation;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_KeyNotFoundException
+
+/**
+ * An exception thrown when Crypt_GPG fails to find the key for various
+ * operations
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The key identifier that was searched for
+     *
+     * @var string
+     */
+    private $_keyId = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_KeyNotFoundException
+     *
+     * @param string  $message an error message.
+     * @param integer $code    a user defined error code.
+     * @param string  $keyId   the key identifier of the key.
+     */
+    public function __construct($message, $code = 0, $keyId= '')
+    {
+        $this->_keyId = $keyId;
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getKeyId()
+
+    /**
+     * Gets the key identifier of the key that was not found
+     *
+     * @return string the key identifier of the key that was not found.
+     */
+    public function getKeyId()
+    {
+        return $this->_keyId;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_NoDataException
+
+/**
+ * An exception thrown when Crypt_GPG cannot find valid data for various
+ * operations
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2006 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_NoDataException extends Crypt_GPG_Exception
+{
+}
+
+// }}}
+// {{{ class Crypt_GPG_BadPassphraseException
+
+/**
+ * An exception thrown when a required passphrase is incorrect or missing
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2006-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * Keys for which the passhprase is missing
+     *
+     * This contains primary user ids indexed by sub-key id.
+     *
+     * @var array
+     */
+    private $_missingPassphrases = array();
+
+    /**
+     * Keys for which the passhprase is incorrect
+     *
+     * This contains primary user ids indexed by sub-key id.
+     *
+     * @var array
+     */
+    private $_badPassphrases = array();
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_BadPassphraseException
+     *
+     * @param string  $message            an error message.
+     * @param integer $code               a user defined error code.
+     * @param array   $badPassphrases     an array containing user ids of keys
+     *                                    for which the passphrase is incorrect.
+     * @param array   $missingPassphrases an array containing user ids of keys
+     *                                    for which the passphrase is missing.
+     */
+    public function __construct($message, $code = 0,
+        array $badPassphrases = array(), array $missingPassphrases = array()
+    ) {
+        $this->_badPassphrases     = (array) $badPassphrases;
+        $this->_missingPassphrases = (array) $missingPassphrases;
+
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getBadPassphrases()
+
+    /**
+     * Gets keys for which the passhprase is incorrect
+     *
+     * @return array an array of keys for which the passphrase is incorrect.
+     *               The array contains primary user ids indexed by the sub-key
+     *               id.
+     */
+    public function getBadPassphrases()
+    {
+        return $this->_badPassphrases;
+    }
+
+    // }}}
+    // {{{ getMissingPassphrases()
+
+    /**
+     * Gets keys for which the passhprase is missing 
+     *
+     * @return array an array of keys for which the passphrase is missing.
+     *               The array contains primary user ids indexed by the sub-key
+     *               id.
+     */
+    public function getMissingPassphrases()
+    {
+        return $this->_missingPassphrases;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_DeletePrivateKeyException
+
+/**
+ * An exception thrown when an attempt is made to delete public key that has an
+ * associated private key on the keyring
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The key identifier the deletion attempt was made upon
+     *
+     * @var string
+     */
+    private $_keyId = '';
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_DeletePrivateKeyException
+     *
+     * @param string  $message an error message.
+     * @param integer $code    a user defined error code.
+     * @param string  $keyId   the key identifier of the public key that was
+     *                         attempted to delete.
+     *
+     * @see Crypt_GPG::deletePublicKey()
+     */
+    public function __construct($message, $code = 0, $keyId = '')
+    {
+        $this->_keyId = $keyId;
+        parent::__construct($message, $code);
+    }
+
+    // }}}
+    // {{{ getKeyId()
+
+    /**
+     * Gets the key identifier of the key that was not found
+     *
+     * @return string the key identifier of the key that was not found.
+     */
+    public function getKeyId()
+    {
+        return $this->_keyId;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class Crypt_GPG_KeyNotCreatedException
+
+/**
+ * An exception thrown when an attempt is made to generate a key and the
+ * attempt fails
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_KeyNotCreatedException extends Crypt_GPG_Exception
+{
+}
+
+// }}}
+// {{{ class Crypt_GPG_InvalidKeyParamsException
+
+/**
+ * An exception thrown when an attempt is made to generate a key and the
+ * key parameters set on the key generator are invalid
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_InvalidKeyParamsException extends Crypt_GPG_Exception
+{
+    // {{{ private class properties
+
+    /**
+     * The key algorithm
+     *
+     * @var integer
+     */
+    private $_algorithm = 0;
+
+    /**
+     * The key size
+     *
+     * @var integer
+     */
+    private $_size = 0;
+
+    /**
+     * The key usage
+     *
+     * @var integer
+     */
+    private $_usage = 0;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new Crypt_GPG_InvalidKeyParamsException
+     *
+     * @param string  $message   an error message.
+     * @param integer $code      a user defined error code.
+     * @param string  $algorithm the key algorithm.
+     * @param string  $size      the key size.
+     * @param string  $usage     the key usage.
+     */
+    public function __construct(
+        $message,
+        $code = 0,
+        $algorithm = 0,
+        $size = 0,
+        $usage = 0
+    ) {
+        parent::__construct($message, $code);
+
+        $this->_algorithm = $algorithm;
+        $this->_size      = $size;
+        $this->_usage     = $usage;
+    }
+
+    // }}}
+    // {{{ getAlgorithm()
+
+    /**
+     * Gets the key algorithm
+     *
+     * @return integer the key algorithm.
+     */
+    public function getAlgorithm()
+    {
+        return $this->_algorithm;
+    }
+
+    // }}}
+    // {{{ getSize()
+
+    /**
+     * Gets the key size
+     *
+     * @return integer the key size.
+     */
+    public function getSize()
+    {
+        return $this->_size;
+    }
+
+    // }}}
+    // {{{ getUsage()
+
+    /**
+     * Gets the key usage
+     *
+     * @return integer the key usage.
+     */
+    public function getUsage()
+    {
+        return $this->_usage;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/Key.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,241 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Contains a class representing GPG keys
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Sub-key class definition
+ */
+require_once 'Crypt/GPG/SubKey.php';
+
+/**
+ * User id class definition
+ */
+require_once 'Crypt/GPG/UserId.php';
+
+// {{{ class Crypt_GPG_Key
+
+/**
+ * A data class for GPG key information
+ *
+ * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
+ * method.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @see       Crypt_GPG::getKeys()
+ */
+class Crypt_GPG_Key
+{
+    // {{{ class properties
+
+    /**
+     * The user ids associated with this key
+     *
+     * This is an array of {@link Crypt_GPG_UserId} objects.
+     *
+     * @var array
+     *
+     * @see Crypt_GPG_Key::addUserId()
+     * @see Crypt_GPG_Key::getUserIds()
+     */
+    private $_userIds = array();
+
+    /**
+     * The subkeys of this key
+     *
+     * This is an array of {@link Crypt_GPG_SubKey} objects.
+     *
+     * @var array
+     *
+     * @see Crypt_GPG_Key::addSubKey()
+     * @see Crypt_GPG_Key::getSubKeys()
+     */
+    private $_subKeys = array();
+
+    // }}}
+    // {{{ getSubKeys()
+
+    /**
+     * Gets the sub-keys of this key
+     *
+     * @return array the sub-keys of this key.
+     *
+     * @see Crypt_GPG_Key::addSubKey()
+     */
+    public function getSubKeys()
+    {
+        return $this->_subKeys;
+    }
+
+    // }}}
+    // {{{ getUserIds()
+
+    /**
+     * Gets the user ids of this key
+     *
+     * @return array the user ids of this key.
+     *
+     * @see Crypt_GPG_Key::addUserId()
+     */
+    public function getUserIds()
+    {
+        return $this->_userIds;
+    }
+
+    // }}}
+    // {{{ getPrimaryKey()
+
+    /**
+     * Gets the primary sub-key of this key
+     *
+     * The primary key is the first added sub-key.
+     *
+     * @return Crypt_GPG_SubKey the primary sub-key of this key.
+     */
+    public function getPrimaryKey()
+    {
+        $primary_key = null;
+        if (count($this->_subKeys) > 0) {
+            $primary_key = $this->_subKeys[0];
+        }
+        return $primary_key;
+    }
+
+    // }}}
+    // {{{ canSign()
+
+    /**
+     * Gets whether or not this key can sign data
+     *
+     * This key can sign data if any sub-key of this key can sign data.
+     *
+     * @return boolean true if this key can sign data and false if this key
+     *                 cannot sign data.
+     */
+    public function canSign()
+    {
+        $canSign = false;
+        foreach ($this->_subKeys as $subKey) {
+            if ($subKey->canSign()) {
+                $canSign = true;
+                break;
+            }
+        }
+        return $canSign;
+    }
+
+    // }}}
+    // {{{ canEncrypt()
+
+    /**
+     * Gets whether or not this key can encrypt data
+     *
+     * This key can encrypt data if any sub-key of this key can encrypt data.
+     *
+     * @return boolean true if this key can encrypt data and false if this
+     *                 key cannot encrypt data.
+     */
+    public function canEncrypt()
+    {
+        $canEncrypt = false;
+        foreach ($this->_subKeys as $subKey) {
+            if ($subKey->canEncrypt()) {
+                $canEncrypt = true;
+                break;
+            }
+        }
+        return $canEncrypt;
+    }
+
+    // }}}
+    // {{{ addSubKey()
+
+    /**
+     * Adds a sub-key to this key
+     *
+     * The first added sub-key will be the primary key of this key.
+     *
+     * @param Crypt_GPG_SubKey $subKey the sub-key to add.
+     *
+     * @return Crypt_GPG_Key the current object, for fluent interface.
+     */
+    public function addSubKey(Crypt_GPG_SubKey $subKey)
+    {
+        $this->_subKeys[] = $subKey;
+        return $this;
+    }
+
+    // }}}
+    // {{{ addUserId()
+
+    /**
+     * Adds a user id to this key
+     *
+     * @param Crypt_GPG_UserId $userId the user id to add.
+     *
+     * @return Crypt_GPG_Key the current object, for fluent interface.
+     */
+    public function addUserId(Crypt_GPG_UserId $userId)
+    {
+        $this->_userIds[] = $userId;
+        return $this;
+    }
+
+    // }}}
+    // {{{ __toString()
+
+    /**
+     * String representation of the key
+     *
+     * @return string The key ID.
+     */
+    public function __toString()
+    {
+        foreach ($this->_subKeys as $subKey) {
+            if ($id = $subKey->getId()) {
+                return $id;
+            }
+        }
+
+        return '';
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/KeyGenerator.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,683 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Crypt_GPG is a package to use GPG from PHP
+ *
+ * This file contains an object that handles GnuPG key generation.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2011-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * Base class for GPG methods
+ */
+require_once 'Crypt/GPGAbstract.php';
+
+// {{{ class Crypt_GPG_KeyGenerator
+
+/**
+ * GnuPG key generator
+ *
+ * This class provides an object oriented interface for generating keys with
+ * the GNU Privacy Guard (GPG).
+ *
+ * Secure key generation requires true random numbers, and as such can be slow.
+ * If the operating system runs out of entropy, key generation will block until
+ * more entropy is available.
+ *
+ * If quick key generation is important, a hardware entropy generator, or an
+ * entropy gathering daemon may be installed. For example, administrators of
+ * Debian systems may want to install the 'randomsound' package.
+ *
+ * This class uses the experimental automated key generation support available
+ * in GnuPG. See <b>doc/DETAILS</b> in the
+ * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
+ * information on the key generation format.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+class Crypt_GPG_KeyGenerator extends Crypt_GPGAbstract
+{
+    // {{{ protected properties
+
+    /**
+     * The expiration date of generated keys
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setExpirationDate()
+     */
+    protected $expirationDate = 0;
+
+    /**
+     * The passphrase of generated keys
+     *
+     * @var string
+     *
+     * @see Crypt_GPG_KeyGenerator::setPassphrase()
+     */
+    protected $passphrase = '';
+
+    /**
+     * The algorithm for generated primary keys
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setKeyParams()
+     */
+    protected $keyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_DSA;
+
+    /**
+     * The size of generated primary keys
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setKeyParams()
+     */
+    protected $keySize = 1024;
+
+    /**
+     * The usages of generated primary keys
+     *
+     * This is a bitwise combination of the usage constants in
+     * {@link Crypt_GPG_SubKey}.
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setKeyParams()
+     */
+    protected $keyUsage = 6; // USAGE_SIGN | USAGE_CERTIFY
+
+    /**
+     * The algorithm for generated sub-keys
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
+     */
+    protected $subKeyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC;
+
+    /**
+     * The size of generated sub-keys
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
+     */
+    protected $subKeySize = 2048;
+
+    /**
+     * The usages of generated sub-keys
+     *
+     * This is a bitwise combination of the usage constants in
+     * {@link Crypt_GPG_SubKey}.
+     *
+     * @var integer
+     *
+     * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
+     */
+    protected $subKeyUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new GnuPG key generator
+     *
+     * Available options are:
+     *
+     * - <kbd>string  homedir</kbd>        - the directory where the GPG
+     *                                       keyring files are stored. If not
+     *                                       specified, Crypt_GPG uses the
+     *                                       default of <kbd>~/.gnupg</kbd>.
+     * - <kbd>string  publicKeyring</kbd>  - the file path of the public
+     *                                       keyring. Use this if the public
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/pubring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  privateKeyring</kbd> - the file path of the private
+     *                                       keyring. Use this if the private
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/secring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  trustDb</kbd>        - the file path of the web-of-trust
+     *                                       database. Use this if the trust
+     *                                       database is not in the homedir, or
+     *                                       if the database is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       trust database with this option
+     *                                       (/foo/bar/trustdb.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  binary</kbd>         - the location of the GPG binary. If
+     *                                       not specified, the driver attempts
+     *                                       to auto-detect the GPG binary
+     *                                       location using a list of known
+     *                                       default locations for the current
+     *                                       operating system. The option
+     *                                       <kbd>gpgBinary</kbd> is a
+     *                                       deprecated alias for this option.
+     * - <kbd>string  agent</kbd>          - the location of the GnuPG agent
+     *                                       binary. The gpg-agent is only
+     *                                       used for GnuPG 2.x. If not
+     *                                       specified, the engine attempts
+     *                                       to auto-detect the gpg-agent
+     *                                       binary location using a list of
+     *                                       know default locations for the
+     *                                       current operating system.
+     * - <kbd>mixed debug</kbd>            - whether or not to use debug mode.
+     *                                       When debug mode is on, all
+     *                                       communication to and from the GPG
+     *                                       subprocess is logged. This can be
+     *
+     * @param array $options optional. An array of options used to create the
+     *                       GPG object. All options are optional and are
+     *                       represented as key-value pairs.
+     *
+     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
+     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
+     *         not specified, Crypt_GPG is run as the web user, and the web
+     *         user has no home directory. This exception is also thrown if any
+     *         of the options <kbd>publicKeyring</kbd>,
+     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
+     *         specified but the files do not exist or are are not readable.
+     *         This can happen if the user running the Crypt_GPG process (for
+     *         example, the Apache user) does not have permission to read the
+     *         files.
+     *
+     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
+     *         if no <kbd>binary</kbd> is provided and no suitable binary could
+     *         be found.
+     *
+     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
+     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
+     *         cound be found.
+     */
+    public function __construct(array $options = array())
+    {
+        parent::__construct($options);
+    }
+
+    // }}}
+    // {{{ setExpirationDate()
+
+    /**
+     * Sets the expiration date of generated keys
+     *
+     * @param string|integer $date either a string that may be parsed by
+     *                             PHP's strtotime() function, or an integer
+     *                             timestamp representing the number of seconds
+     *                             since the UNIX epoch. This date must be at
+     *                             least one date in the future. Keys that
+     *                             expire in the past may not be generated. Use
+     *                             an expiration date of 0 for keys that do not
+     *                             expire.
+     *
+     * @throws InvalidArgumentException if the date is not a valid format, or
+     *                                  if the date is not at least one day in
+     *                                  the future, or if the date is greater
+     *                                  than 2038-01-19T03:14:07.
+     *
+     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
+     */
+    public function setExpirationDate($date)
+    {
+        if (is_int($date) || ctype_digit(strval($date))) {
+            $expirationDate = intval($date);
+        } else {
+            $expirationDate = strtotime($date);
+        }
+
+        if ($expirationDate === false) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'Invalid expiration date format: "%s". Please use a ' .
+                    'format compatible with PHP\'s strtotime().',
+                    $date
+                )
+            );
+        }
+
+        if ($expirationDate !== 0 && $expirationDate < time() + 86400) {
+            throw new InvalidArgumentException(
+                'Expiration date must be at least a day in the future.'
+            );
+        }
+
+        // GnuPG suffers from the 2038 bug
+        if ($expirationDate > 2147483647) {
+            throw new InvalidArgumentException(
+                'Expiration date must not be greater than 2038-01-19T03:14:07.'
+            );
+        }
+
+        $this->expirationDate = $expirationDate;
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ setPassphrase()
+
+    /**
+     * Sets the passphrase of generated keys
+     *
+     * @param string $passphrase the passphrase to use for generated keys. Use
+     *                           null or an empty string for no passphrase.
+     *
+     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
+     */
+    public function setPassphrase($passphrase)
+    {
+        $this->passphrase = strval($passphrase);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setKeyParams()
+
+    /**
+     * Sets the parameters for the primary key of generated key-pairs
+     *
+     * @param integer $algorithm the algorithm used by the key. This should be
+     *                           one of the Crypt_GPG_SubKey::ALGORITHM_*
+     *                           constants.
+     * @param integer $size      optional. The size of the key. Different
+     *                           algorithms have different size requirements.
+     *                           If not specified, the default size for the
+     *                           specified algorithm will be used. If an
+     *                           invalid key size is used, GnuPG will do its
+     *                           best to round it to a valid size.
+     * @param integer $usage     optional. A bitwise combination of key usages.
+     *                           If not specified, the primary key will be used
+     *                           only to sign and certify. This is the default
+     *                           behavior of GnuPG in interactive mode. Use
+     *                           the Crypt_GPG_SubKey::USAGE_* constants here.
+     *                           The primary key may be used to certify even
+     *                           if the certify usage is not specified.
+     *
+     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
+     */
+    public function setKeyParams($algorithm, $size = 0, $usage = 0)
+    {
+        $algorithm = intval($algorithm);
+
+        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC) {
+            throw new Crypt_GPG_InvalidKeyParamsException(
+                'Primary key algorithm must be capable of signing. The ' .
+                'Elgamal algorithm can only encrypt.',
+                0,
+                $algorithm,
+                $size,
+                $usage
+            );
+        }
+
+        if ($size != 0) {
+            $size = intval($size);
+        }
+
+        if ($usage != 0) {
+            $usage = intval($usage);
+        }
+
+        $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
+            && ($usage & $usageEncrypt) === $usageEncrypt
+        ) {
+            throw new Crypt_GPG_InvalidKeyParamsException(
+                'The DSA algorithm is not capable of encrypting. Please ' .
+                'specify a different algorithm or do not include encryption ' .
+                'as a usage for the primary key.',
+                0,
+                $algorithm,
+                $size,
+                $usage
+            );
+        }
+
+        $this->keyAlgorithm = $algorithm;
+
+        if ($size != 0) {
+            $this->keySize = $size;
+        }
+
+        if ($usage != 0) {
+            $this->keyUsage = $usage;
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ setSubKeyParams()
+
+    /**
+     * Sets the parameters for the sub-key of generated key-pairs
+     *
+     * @param integer $algorithm the algorithm used by the key. This should be
+     *                           one of the Crypt_GPG_SubKey::ALGORITHM_*
+     *                           constants.
+     * @param integer $size      optional. The size of the key. Different
+     *                           algorithms have different size requirements.
+     *                           If not specified, the default size for the
+     *                           specified algorithm will be used. If an
+     *                           invalid key size is used, GnuPG will do its
+     *                           best to round it to a valid size.
+     * @param integer $usage     optional. A bitwise combination of key usages.
+     *                           If not specified, the sub-key will be used
+     *                           only to encrypt. This is the default behavior
+     *                           of GnuPG in interactive mode. Use the
+     *                           Crypt_GPG_SubKey::USAGE_* constants here.
+     *
+     * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
+     */
+    public function setSubKeyParams($algorithm, $size = '', $usage = 0)
+    {
+        $algorithm = intval($algorithm);
+
+        if ($size != 0) {
+            $size = intval($size);
+        }
+
+        if ($usage != 0) {
+            $usage = intval($usage);
+        }
+
+        $usageSign = Crypt_GPG_SubKey::USAGE_SIGN;
+
+        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC
+            && ($usage & $usageSign) === $usageSign
+        ) {
+            throw new Crypt_GPG_InvalidKeyParamsException(
+                'The Elgamal algorithm is not capable of signing. Please ' .
+                'specify a different algorithm or do not include signing ' .
+                'as a usage for the sub-key.',
+                0,
+                $algorithm,
+                $size,
+                $usage
+            );
+        }
+
+        $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
+            && ($usage & $usageEncrypt) === $usageEncrypt
+        ) {
+            throw new Crypt_GPG_InvalidKeyParamsException(
+                'The DSA algorithm is not capable of encrypting. Please ' .
+                'specify a different algorithm or do not include encryption ' .
+                'as a usage for the sub-key.',
+                0,
+                $algorithm,
+                $size,
+                $usage
+            );
+        }
+
+        $this->subKeyAlgorithm = $algorithm;
+
+        if ($size != 0) {
+            $this->subKeySize = $size;
+        }
+
+        if ($usage != 0) {
+            $this->subKeyUsage = $usage;
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ generateKey()
+
+    /**
+     * Generates a new key-pair in the current keyring
+     *
+     * Secure key generation requires true random numbers, and as such can be
+     * solw. If the operating system runs out of entropy, key generation will
+     * block until more entropy is available.
+     *
+     * If quick key generation is important, a hardware entropy generator, or
+     * an entropy gathering daemon may be installed. For example,
+     * administrators of Debian systems may want to install the 'randomsound'
+     * package.
+     *
+     * @param string|Crypt_GPG_UserId $name    either a {@link Crypt_GPG_UserId}
+     *                                         object, or a string containing
+     *                                         the name of the user id.
+     * @param string                  $email   optional. If <i>$name</i> is
+     *                                         specified as a string, this is
+     *                                         the email address of the user id.
+     * @param string                  $comment optional. If <i>$name</i> is
+     *                                         specified as a string, this is
+     *                                         the comment of the user id.
+     *
+     * @return Crypt_GPG_Key the newly generated key.
+     *
+     * @throws Crypt_GPG_KeyNotCreatedException if the key parameters are
+     *         incorrect, if an unknown error occurs during key generation, or
+     *         if the newly generated key is not found in the keyring.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function generateKey($name, $email = '', $comment = '')
+    {
+        $handle = uniqid('key', true);
+
+        $userId = $this->getUserId($name, $email, $comment);
+
+        $keyParams = array(
+            'Key-Type'      => $this->keyAlgorithm,
+            'Key-Length'    => $this->keySize,
+            'Key-Usage'     => $this->getUsage($this->keyUsage),
+            'Subkey-Type'   => $this->subKeyAlgorithm,
+            'Subkey-Length' => $this->subKeySize,
+            'Subkey-Usage'  => $this->getUsage($this->subKeyUsage),
+            'Name-Real'     => $userId->getName(),
+            'Handle'        => $handle,
+        );
+
+        if ($this->expirationDate != 0) {
+            // GnuPG only accepts granularity of days
+            $expirationDate = date('Y-m-d', $this->expirationDate);
+            $keyParams['Expire-Date'] = $expirationDate;
+        }
+
+        if (strlen($this->passphrase)) {
+            $keyParams['Passphrase'] = $this->passphrase;
+        }
+
+        if ($userId->getEmail() != '') {
+            $keyParams['Name-Email'] = $userId->getEmail();
+        }
+
+        if ($userId->getComment() != '') {
+            $keyParams['Name-Comment'] = $userId->getComment();
+        }
+
+        $keyParamsFormatted = array();
+        foreach ($keyParams as $name => $value) {
+            $keyParamsFormatted[] = $name . ': ' . $value;
+        }
+
+        // This is required in GnuPG 2.1
+        if (!strlen($this->passphrase)) {
+            $keyParamsFormatted[] = '%no-protection';
+        }
+
+        $input = implode("\n", $keyParamsFormatted) . "\n%commit\n";
+
+        $this->engine->reset();
+        $this->engine->setProcessData('Handle', $handle);
+        $this->engine->setInput($input);
+        $this->engine->setOutput($output);
+        $this->engine->setOperation('--gen-key', array('--batch'));
+
+        try {
+            $this->engine->run();
+        } catch (Crypt_GPG_InvalidKeyParamsException $e) {
+            switch ($this->engine->getProcessData('LineNumber')) {
+            case 1:
+                throw new Crypt_GPG_InvalidKeyParamsException(
+                    'Invalid primary key algorithm specified.',
+                    0,
+                    $this->keyAlgorithm,
+                    $this->keySize,
+                    $this->keyUsage
+                );
+            case 4:
+                throw new Crypt_GPG_InvalidKeyParamsException(
+                    'Invalid sub-key algorithm specified.',
+                    0,
+                    $this->subKeyAlgorithm,
+                    $this->subKeySize,
+                    $this->subKeyUsage
+                );
+            default:
+                throw $e;
+            }
+        }
+
+        $fingerprint = $this->engine->getProcessData('KeyCreated');
+        $keys        = $this->_getKeys($fingerprint);
+
+        if (count($keys) === 0) {
+            throw new Crypt_GPG_KeyNotCreatedException(
+                sprintf(
+                    'Newly created key "%s" not found in keyring.',
+                    $fingerprint
+                )
+            );
+        }
+
+        return $keys[0];
+    }
+
+    // }}}
+    // {{{ getUsage()
+
+    /**
+     * Builds a GnuPG key usage string suitable for key generation
+     *
+     * See <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
+     * information on the key usage format.
+     *
+     * @param integer $usage a bitwise combination of the key usages. This is
+     *                       a combination of the Crypt_GPG_SubKey::USAGE_*
+     *                       constants.
+     *
+     * @return string the key usage string.
+     */
+    protected function getUsage($usage)
+    {
+        $map = array(
+            Crypt_GPG_SubKey::USAGE_ENCRYPT        => 'encrypt',
+            Crypt_GPG_SubKey::USAGE_SIGN           => 'sign',
+            Crypt_GPG_SubKey::USAGE_CERTIFY        => 'cert',
+            Crypt_GPG_SubKey::USAGE_AUTHENTICATION => 'auth',
+        );
+
+        // cert is always used for primary keys and does not need to be
+        // specified
+        $usage &= ~Crypt_GPG_SubKey::USAGE_CERTIFY;
+
+        $usageArray = array();
+
+        foreach ($map as $key => $value) {
+            if (($usage & $key) === $key) {
+                $usageArray[] = $value;
+            }
+        }
+
+        return implode(',', $usageArray);
+    }
+
+    // }}}
+    // {{{ getUserId()
+
+    /**
+     * Gets a user id object from parameters
+     *
+     * @param string|Crypt_GPG_UserId $name    either a {@link Crypt_GPG_UserId}
+     *                                         object, or a string containing
+     *                                         the name of the user id.
+     * @param string                  $email   optional. If <i>$name</i> is
+     *                                         specified as a string, this is
+     *                                         the email address of the user id.
+     * @param string                  $comment optional. If <i>$name</i> is
+     *                                         specified as a string, this is
+     *                                         the comment of the user id.
+     *
+     * @return Crypt_GPG_UserId a user id object for the specified parameters.
+     */
+    protected function getUserId($name, $email = '', $comment = '')
+    {
+        if ($name instanceof Crypt_GPG_UserId) {
+            $userId = $name;
+        } else {
+            $userId = new Crypt_GPG_UserId();
+            $userId->setName($name)->setEmail($email)->setComment($comment);
+        }
+
+        return $userId;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/PinEntry.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,853 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Contains a class implementing automatic pinentry for gpg-agent
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * CLI user-interface and parser.
+ */
+require_once 'Console/CommandLine.php';
+
+// {{{ class Crypt_GPG_PinEntry
+
+/**
+ * A command-line dummy pinentry program for use with gpg-agent and Crypt_GPG
+ *
+ * This pinentry receives passphrases through en environment variable and
+ * automatically enters the PIN in response to gpg-agent requests. No user-
+ * interaction required.
+ *
+ * The pinentry can be run independently for testing and debugging with the
+ * following syntax:
+ *
+ * <pre>
+ * Usage:
+ *   crypt-gpg-pinentry [options]
+ *
+ * Options:
+ *   -l log, --log=log  Optional location to log pinentry activity.
+ *   -v, --verbose      Sets verbosity level. Use multiples for more detail
+ *                      (e.g. "-vv").
+ *   -h, --help         show this help message and exit
+ *   --version          show the program version and exit
+ * </pre>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @see       Crypt_GPG::getKeys()
+ */
+class Crypt_GPG_PinEntry
+{
+    // {{{ class constants
+
+    /**
+     * Verbosity level for showing no output.
+     */
+    const VERBOSITY_NONE = 0;
+
+    /**
+     * Verbosity level for showing error output.
+     */
+    const VERBOSITY_ERRORS = 1;
+
+    /**
+     * Verbosity level for showing all output, including Assuan protocol
+     * messages.
+     */
+    const VERBOSITY_ALL = 2;
+
+    /**
+     * Length of buffer for reading lines from the Assuan server.
+     *
+     * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192
+     * and buffers the rest so we might as well just read 8192.
+     *
+     * Using values other than 8192 also triggers PHP bugs.
+     *
+     * @see http://bugs.php.net/bug.php?id=35224
+     */
+    const CHUNK_SIZE = 8192;
+
+    // }}}
+    // {{{ protected properties
+
+    /**
+     * File handle for the input stream
+     *
+     * @var resource
+     */
+    protected $stdin = null;
+
+    /**
+     * File handle for the output stream
+     *
+     * @var resource
+     */
+    protected $stdout = null;
+
+    /**
+     * File handle for the log file if a log file is used
+     *
+     * @var resource
+     */
+    protected $logFile = null;
+
+    /**
+     * Whether or not this pinentry is finished and is exiting
+     *
+     * @var boolean
+     */
+    protected $moribund = false;
+
+    /**
+     * Verbosity level
+     *
+     * One of:
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE},
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS}, or
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}
+     *
+     * @var integer
+     */
+    protected $verbosity = self::VERBOSITY_NONE;
+
+    /**
+     * The command-line interface parser for this pinentry
+     *
+     * @var Console_CommandLine
+     *
+     * @see Crypt_GPG_PinEntry::getParser()
+     */
+    protected $parser = null;
+
+    /**
+     * PINs to be entered by this pinentry
+     *
+     * An indexed array of associative arrays in the form:
+     * <code>
+     * <?php
+     *   array(
+     *     array(
+     *       'keyId'      => $keyId,
+     *       'passphrase' => $passphrase
+     *     ),
+     *     ...
+     *   );
+     * ?>
+     * </code>
+     *
+     * This array is parsed from the environment variable
+     * <kbd>PINENTRY_USER_DATA</kbd>.
+     *
+     * @var array
+     *
+     * @see Crypt_GPG_PinEntry::initPinsFromENV()
+     */
+    protected $pins = array();
+
+    /**
+     * The PIN currently being requested by the Assuan server
+     *
+     * If set, this is an associative array in the form:
+     * <code>
+     * <?php
+     *   array(
+     *     'keyId'  => $shortKeyId,
+     *     'userId' => $userIdString
+     *   );
+     * ?>
+     * </code>
+     *
+     * @var array|null
+     */
+    protected $currentPin = null;
+
+    // }}}
+    // {{{ __invoke()
+
+    /**
+     * Runs this pinentry
+     *
+     * @return void
+     */
+    public function __invoke()
+    {
+        $this->parser = $this->getCommandLineParser();
+
+        try {
+            $result = $this->parser->parse();
+
+            $this->setVerbosity($result->options['verbose']);
+            $this->setLogFilename($result->options['log']);
+
+            $this->connect();
+            $this->initPinsFromENV();
+
+            while (($line = fgets($this->stdin, self::CHUNK_SIZE)) !== false) {
+                $this->parseCommand(mb_substr($line, 0, -1, '8bit'));
+                if ($this->moribund) {
+                    break;
+                }
+            }
+
+            $this->disconnect();
+
+        } catch (Console_CommandLineException $e) {
+            $this->log($e->getMessage() . PHP_EOL, slf::VERBOSITY_ERRORS);
+            exit(1);
+        } catch (Exception $e) {
+            $this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS);
+            $this->log($e->getTraceAsString() . PHP_EOL, self::VERBOSITY_ERRORS);
+            exit(1);
+        }
+    }
+
+    // }}}
+    // {{{ setVerbosity()
+
+    /**
+     * Sets the verbosity of logging for this pinentry
+     *
+     * Verbosity levels are:
+     *
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE}   - no logging.
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS} - log errors only.
+     * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}    - log everything, including
+     *                                                  the assuan protocol.
+     *
+     * @param integer $verbosity the level of verbosity of this pinentry.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    public function setVerbosity($verbosity)
+    {
+        $this->verbosity = (integer)$verbosity;
+        return $this;
+    }
+
+    // }}}
+    // {{{ setLogFilename()
+
+    /**
+     * Sets the log file location
+     *
+     * @param string $filename the new log filename to use. If an empty string
+     *                         is used, file-based logging is disabled.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    public function setLogFilename($filename)
+    {
+        if (is_resource($this->logFile)) {
+            fflush($this->logFile);
+            fclose($this->logFile);
+            $this->logFile = null;
+        }
+
+        if ($filename != '') {
+            if (($this->logFile = fopen($filename, 'w')) === false) {
+                $this->log(
+                    'Unable to open log file "' . $filename . '" '
+                    . 'for writing.' . PHP_EOL,
+                    self::VERBOSITY_ERRORS
+                );
+                exit(1);
+            } else {
+                stream_set_write_buffer($this->logFile, 0);
+            }
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ getUIXML()
+
+    /**
+     * Gets the CLI user-interface definition for this pinentry
+     *
+     * Detects whether or not this package is PEAR-installed and appropriately
+     * locates the XML UI definition.
+     *
+     * @return string the location of the CLI user-interface definition XML.
+     */
+    protected function getUIXML()
+    {
+        // Find PinEntry config depending on the way how the package is installed
+        $ds    = DIRECTORY_SEPARATOR;
+        $root  = __DIR__ . $ds . '..' . $ds . '..' . $ds;
+        $paths = array(
+            '@data-dir@' . $ds . '@package-name@' . $ds . 'data', // PEAR
+            $root . 'data', // Git
+            $root . 'data' . $ds . 'Crypt_GPG' . $ds . 'data', // Composer
+        );
+
+        foreach ($paths as $path) {
+            if (file_exists($path . $ds . 'pinentry-cli.xml')) {
+                return $path . $ds . 'pinentry-cli.xml';
+            }
+        }
+    }
+
+    // }}}
+    // {{{ getCommandLineParser()
+
+    /**
+     * Gets the CLI parser for this pinentry
+     *
+     * @return Console_CommandLine the CLI parser for this pinentry.
+     */
+    protected function getCommandLineParser()
+    {
+        return Console_CommandLine::fromXmlFile($this->getUIXML());
+    }
+
+    // }}}
+    // {{{ log()
+
+    /**
+     * Logs a message at the specified verbosity level
+     *
+     * If a log file is used, the message is written to the log. Otherwise,
+     * the message is sent to STDERR.
+     *
+     * @param string  $data  the message to log.
+     * @param integer $level the verbosity level above which the message should
+     *                       be logged.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function log($data, $level)
+    {
+        if ($this->verbosity >= $level) {
+            if (is_resource($this->logFile)) {
+                fwrite($this->logFile, $data);
+                fflush($this->logFile);
+            } else {
+                $this->parser->outputter->stderr($data);
+            }
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ connect()
+
+    /**
+     * Connects this pinentry to the assuan server
+     *
+     * Opens I/O streams and sends initial handshake.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function connect()
+    {
+        // Binary operations will not work on Windows with PHP < 5.2.6.
+        $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
+        $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';
+
+        $this->stdin  = fopen('php://stdin', $rb);
+        $this->stdout = fopen('php://stdout', $wb);
+
+        if (function_exists('stream_set_read_buffer')) {
+            stream_set_read_buffer($this->stdin, 0);
+        }
+        stream_set_write_buffer($this->stdout, 0);
+
+        // initial handshake
+        $this->send($this->getOK('Crypt_GPG pinentry ready and waiting'));
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ parseCommand()
+
+    /**
+     * Parses an assuan command and performs the appropriate action
+     *
+     * Documentation of the assuan commands for pinentry is limited to
+     * non-existent. Most of these commands were taken from the C source code
+     * to gpg-agent and pinentry.
+     *
+     * Additional context was provided by using strace -f when calling the
+     * gpg-agent.
+     *
+     * @param string $line the assuan command line to parse
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function parseCommand($line)
+    {
+        $this->log('<- ' . $line . PHP_EOL, self::VERBOSITY_ALL);
+
+        $parts = explode(' ', $line, 2);
+
+        $command = $parts[0];
+
+        if (count($parts) === 2) {
+            $data = $parts[1];
+        } else {
+            $data = null;
+        }
+
+        switch ($command) {
+        case 'SETDESC':
+            return $this->sendSetDescription($data);
+
+        case 'MESSAGE':
+            return $this->sendMessage();
+
+        case 'CONFIRM':
+            return $this->sendConfirm();
+
+        case 'GETINFO':
+            return $this->sendGetInfo($data);
+
+        case 'GETPIN':
+            return $this->sendGetPin($data);
+
+        case 'RESET':
+            return $this->sendReset();
+
+        case 'BYE':
+            return $this->sendBye();
+
+        default:
+            return $this->sendNotImplementedOK();
+        }
+    }
+
+    // }}}
+    // {{{ initPinsFromENV()
+
+    /**
+     * Initializes the PINs to be entered by this pinentry from the environment
+     * variable PINENTRY_USER_DATA
+     *
+     * The PINs are parsed from a JSON-encoded string.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function initPinsFromENV()
+    {
+        if (($userData = getenv('PINENTRY_USER_DATA')) !== false) {
+            $pins = json_decode($userData, true);
+            if ($pins === null) {
+                $this->log(
+                    '-- failed to parse user data' . PHP_EOL,
+                    self::VERBOSITY_ERRORS
+                );
+            } else {
+                $this->pins = $pins;
+                $this->log(
+                    '-- got user data [not showing passphrases]' . PHP_EOL,
+                    self::VERBOSITY_ALL
+                );
+            }
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ disconnect()
+
+    /**
+     * Disconnects this pinentry from the Assuan server
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function disconnect()
+    {
+        $this->log('-- disconnecting' . PHP_EOL, self::VERBOSITY_ALL);
+
+        fflush($this->stdout);
+        fclose($this->stdout);
+        fclose($this->stdin);
+
+        $this->stdin  = null;
+        $this->stdout = null;
+
+        $this->log('-- disconnected' . PHP_EOL, self::VERBOSITY_ALL);
+
+        if (is_resource($this->logFile)) {
+            fflush($this->logFile);
+            fclose($this->logFile);
+            $this->logFile = null;
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ sendNotImplementedOK()
+
+    /**
+     * Sends an OK response for a not implemented feature
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendNotImplementedOK()
+    {
+        return $this->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ sendSetDescription()
+
+    /**
+     * Parses the currently requested key identifier and user identifier from
+     * the description passed to this pinentry
+     *
+     * @param string $text the raw description sent from gpg-agent.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendSetDescription($text)
+    {
+        $text = rawurldecode($text);
+        $matches = array();
+        // TODO: handle user id with quotation marks
+        $exp = '/\n"(.+)"\n.*\sID ([A-Z0-9]+),\n/mu';
+        if (preg_match($exp, $text, $matches) === 1) {
+            $userId = $matches[1];
+            $keyId  = $matches[2];
+
+            if ($this->currentPin === null || $this->currentPin['keyId'] !== $keyId) {
+                $this->currentPin = array(
+                    'userId' => $userId,
+                    'keyId'  => $keyId
+                );
+                $this->log(
+                    '-- looking for PIN for ' . $keyId . PHP_EOL,
+                    self::VERBOSITY_ALL
+                );
+            }
+        }
+
+        return $this->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ sendConfirm()
+
+    /**
+     * Tells the assuan server to confirm the operation
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendConfirm()
+    {
+        return $this->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ sendMessage()
+
+    /**
+     * Tells the assuan server that any requested pop-up messages were confirmed
+     * by pressing the fake 'close' button
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendMessage()
+    {
+        return $this->sendButtonInfo('close');
+    }
+
+    // }}}
+    // {{{ sendButtonInfo()
+
+    /**
+     * Sends information about pressed buttons to the assuan server
+     *
+     * This is used to fake a user-interface for this pinentry.
+     *
+     * @param string $text the button status to send.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendButtonInfo($text)
+    {
+        return $this->send('BUTTON_INFO ' . $text . "\n");
+    }
+
+    // }}}
+    // {{{ sendGetPin()
+
+    /**
+     * Sends the PIN value for the currently requested key
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendGetPin()
+    {
+        $foundPin = '';
+
+        if (is_array($this->currentPin)) {
+            $keyIdLength = mb_strlen($this->currentPin['keyId'], '8bit');
+
+            // search for the pin
+            foreach ($this->pins as $_keyId => $pin) {
+                // Warning: GnuPG 2.1 asks 3 times for passphrase if it is invalid
+                $keyId        = $this->currentPin['keyId'];
+                $_keyIdLength = mb_strlen($_keyId, '8bit');
+
+                // Get last X characters of key identifier to compare
+                // Most GnuPG versions use 8 characters, but recent ones can use 16,
+                // We support 8 for backward compatibility
+                if ($keyIdLength < $_keyIdLength) {
+                    $_keyId = mb_substr($_keyId, -$keyIdLength, $keyIdLength, '8bit');
+                } else if ($keyIdLength > $_keyIdLength) {
+                    $keyId = mb_substr($keyId, -$_keyIdLength, $_keyIdLength, '8bit');
+                }
+
+                if ($_keyId === $keyId) {
+                    $foundPin = $pin;
+                    break;
+                }
+            }
+        }
+
+        return $this
+            ->send($this->getData($foundPin))
+            ->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ sendGetInfo()
+
+    /**
+     * Sends information about this pinentry
+     *
+     * @param string $data the information requested by the assuan server.
+     *                     Currently only 'pid' is supported. Other requests
+     *                     return no information.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendGetInfo($data)
+    {
+        $parts   = explode(' ', $data, 2);
+        $command = reset($parts);
+
+        switch ($command) {
+        case 'pid':
+            return $this->sendGetInfoPID();
+        default:
+            return $this->send($this->getOK());
+        }
+
+        return $this;
+    }
+    // }}}
+    // {{{ sendGetInfoPID()
+
+    /**
+     * Sends the PID of this pinentry to the assuan server
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendGetInfoPID()
+    {
+        return $this
+            ->send($this->getData(getmypid()))
+            ->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ sendBye()
+
+    /**
+     * Flags this pinentry for disconnection and sends an OK response
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendBye()
+    {
+        $return = $this->send($this->getOK('closing connection'));
+        $this->moribund = true;
+        return $return;
+    }
+
+    // }}}
+    // {{{ sendReset()
+
+    /**
+     * Resets this pinentry and sends an OK response
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function sendReset()
+    {
+        $this->currentPin = null;
+        return $this->send($this->getOK());
+    }
+
+    // }}}
+    // {{{ getOK()
+
+    /**
+     * Gets an OK response to send to the assuan server
+     *
+     * @param string $data an optional message to include with the OK response.
+     *
+     * @return string the OK response.
+     */
+    protected function getOK($data = null)
+    {
+        $return = 'OK';
+
+        if ($data) {
+            $return .= ' ' . $data;
+        }
+
+        return $return . "\n";
+    }
+
+    // }}}
+    // {{{ getData()
+
+    /**
+     * Gets data ready to send to the assuan server
+     *
+     * Data is appropriately escaped and long lines are wrapped.
+     *
+     * @param string $data the data to send to the assuan server.
+     *
+     * @return string the properly escaped, formatted data.
+     *
+     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
+     */
+    protected function getData($data)
+    {
+        // Escape data. Only %, \n and \r need to be escaped but other
+        // values are allowed to be escaped. See
+        // http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
+        $data = rawurlencode($data);
+        $data = $this->getWordWrappedData($data, 'D');
+        return $data;
+    }
+
+    // }}}
+    // {{{ getComment()
+
+    /**
+     * Gets a comment ready to send to the assuan server
+     *
+     * @param string $data the comment to send to the assuan server.
+     *
+     * @return string the properly formatted comment.
+     *
+     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
+     */
+    protected function getComment($data)
+    {
+        return $this->getWordWrappedData($data, '#');
+    }
+
+    // }}}
+    // {{{ getWordWrappedData()
+
+    /**
+     * Wraps strings at 1,000 bytes without splitting UTF-8 multibyte
+     * characters
+     *
+     * Each line is prepended with the specified line prefix. Wrapped lines
+     * are automatically appended with \ characters.
+     *
+     * Protocol strings are UTF-8 but maximum line length is 1,000 bytes.
+     * <kbd>mb_strcut()</kbd> is used so we can limit line length by bytes
+     * and not split characters across multiple lines.
+     *
+     * @param string $data   the data to wrap.
+     * @param string $prefix a single character to use as the line prefix. For
+     *                       example, 'D' or '#'.
+     *
+     * @return string the word-wrapped, prefixed string.
+     *
+     * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
+     */
+    protected function getWordWrappedData($data, $prefix)
+    {
+        $lines = array();
+
+        do {
+            if (mb_strlen($data, '8bit') > 997) {
+                $line = $prefix . ' ' . mb_strcut($data, 0, 996, 'utf-8') . "\\\n";
+                $lines[] = $line;
+                $lineLength = mb_strlen($line, '8bit') - 1;
+                $dataLength = mb_substr($data, '8bit');
+                $data = mb_substr(
+                    $data,
+                    $lineLength,
+                    $dataLength - $lineLength,
+                    '8bit'
+                );
+            } else {
+                $lines[] = $prefix . ' ' . $data . "\n";
+                $data = '';
+            }
+        } while ($data != '');
+
+        return implode('', $lines);
+    }
+
+    // }}}
+    // {{{ send()
+
+    /**
+     * Sends raw data to the assuan server
+     *
+     * @param string $data the data to send.
+     *
+     * @return Crypt_GPG_PinEntry the current object, for fluent interface.
+     */
+    protected function send($data)
+    {
+        $this->log('-> ' . $data, self::VERBOSITY_ALL);
+        fwrite($this->stdout, $data);
+        fflush($this->stdout);
+        return $this;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/ProcessControl.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,152 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * A class for monitoring and terminating processes
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+// {{{ class Crypt_GPG_ProcessControl
+
+/**
+ * A class for monitoring and terminating processes by PID
+ *
+ * This is used to safely terminate the gpg-agent for GnuPG 2.x. This class
+ * is limited in its abilities and can only check if a PID is running and
+ * send a PID SIGTERM.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class Crypt_GPG_ProcessControl
+{
+    // {{{ protected properties
+
+    /**
+     * The PID (process identifier) being monitored
+     *
+     * @var integer
+     */
+    protected $pid;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new process controller from the given PID (process identifier)
+     *
+     * @param integer $pid the PID (process identifier).
+     */
+    public function __construct($pid)
+    {
+        $this->pid = $pid;
+    }
+
+    // }}}
+    // {{{ public function getPid()
+
+    /**
+     * Gets the PID (process identifier) being controlled
+     *
+     * @return integer the PID being controlled.
+     */
+    public function getPid()
+    {
+        return $this->pid;
+    }
+
+    // }}}
+    // {{{ isRunning()
+
+    /**
+     * Checks if the process is running
+     *
+     * If the <kbd>posix</kbd> extension is available, <kbd>posix_getpgid()</kbd>
+     * is used. Otherwise <kbd>ps</kbd> is used on UNIX-like systems and
+     * <kbd>tasklist</kbd> on Windows.
+     *
+     * @return boolean true if the process is running, false if not.
+     */
+    public function isRunning()
+    {
+        $running = false;
+
+        if (function_exists('posix_getpgid')) {
+            $running = false !== posix_getpgid($this->pid);
+        } elseif (PHP_OS === 'WINNT') {
+            $command = 'tasklist /fo csv /nh /fi '
+                . escapeshellarg('PID eq ' . $this->pid);
+
+            $result  = exec($command);
+            $parts   = explode(',', $result);
+            $running = (count($parts) > 1 && trim($parts[1], '"') == $this->pid);
+        } else {
+            $result  = exec('ps -p ' . escapeshellarg($this->pid) . ' -o pid=');
+            $running = (trim($result) == $this->pid);
+        }
+
+        return $running;
+    }
+
+    // }}}
+    // {{{ terminate()
+
+    /**
+     * Ends the process gracefully
+     *
+     * The signal SIGTERM is sent to the process. The gpg-agent process will
+     * end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive
+     * SIGTERM signals the gpg-agent will forcefully shut down.
+     *
+     * If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd>
+     * is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and
+     * <kbd>taskkill</kbd> is used in Windows.
+     *
+     * @return void
+     */
+    public function terminate()
+    {
+        if (function_exists('posix_kill')) {
+            posix_kill($this->pid, 15);
+        } elseif (PHP_OS === 'WINNT') {
+            exec('taskkill /PID ' . escapeshellarg($this->pid));
+        } else {
+            exec('kill -15 ' . escapeshellarg($this->pid));
+        }
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/ProcessHandler.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,928 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Crypt_GPG is a package to use GPG from PHP
+ *
+ * This file contains handler for status and error pipes of GPG process.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @author    Aleksander Machniak <alec@alec.pl>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * GPG exception classes.
+ */
+require_once 'Crypt/GPG/Exceptions.php';
+
+/**
+ * Signature object class definition
+ */
+require_once 'Crypt/GPG/Signature.php';
+
+// {{{ class Crypt_GPG_ProcessHandler
+
+/**
+ * Status/Error handler for GPG process pipes.
+ *
+ * This class is used internally by Crypt_GPG_Engine and does not need to be used
+ * directly. See the {@link Crypt_GPG} class for end-user API.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @author    Aleksander Machniak <alec@alec.pl>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+class Crypt_GPG_ProcessHandler
+{
+    // {{{ protected class properties
+
+    /**
+     * Engine used to control the GPG subprocess
+     *
+     * @var Crypt_GPG_Engine
+     */
+    protected $engine;
+
+    /**
+     * The error code of the current operation
+     *
+     * @var integer
+     */
+    protected $errorCode = Crypt_GPG::ERROR_NONE;
+
+    /**
+     * The number of currently needed passphrases
+     *
+     * If this is not zero when the GPG command is completed, the error code is
+     * set to {@link Crypt_GPG::ERROR_MISSING_PASSPHRASE}.
+     *
+     * @var integer
+     */
+    protected $needPassphrase = 0;
+
+    /**
+     * Some data collected while processing the operation
+     * or set for the operation
+     *
+     * @var array
+     * @see self::setData()
+     * @see self::getData()
+     */
+    protected $data = array();
+
+    /**
+     * The name of the current operation
+     *
+     * @var string
+     * @see self::setOperation()
+     */
+    protected $operation = null;
+
+    /**
+     * The value of the argument of current operation
+     *
+     * @var string
+     * @see self::setOperation()
+     */
+    protected $operationArg = null;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new instance
+     *
+     * @param Crypt_GPG_Engine $engine Engine object
+     */
+    public function __construct($engine)
+    {
+        $this->engine = $engine;
+    }
+
+    // }}}
+    // {{{ setOperation()
+
+    /**
+     * Sets the operation that is being performed by the engine.
+     *
+     * @param string $operation The GPG operation to perform.
+     *
+     * @return void
+     */
+    public function setOperation($operation)
+    {
+        $op    = null;
+        $opArg = null;
+
+        // Regexp matching all GPG "operational" arguments
+        $regexp = '/--('
+            . 'version|import|list-public-keys|list-secret-keys'
+            . '|list-keys|delete-key|delete-secret-key|encrypt|sign|clearsign'
+            . '|detach-sign|decrypt|verify|export-secret-keys|export|gen-key'
+            . ')/';
+
+        if (strpos($operation, ' ') === false) {
+            $op = trim($operation, '- ');
+        } else if (preg_match($regexp, $operation, $matches, PREG_OFFSET_CAPTURE)) {
+            $op      = trim($matches[0][0], '-');
+            $op_len  = $matches[0][1] + mb_strlen($op, '8bit') + 3;
+            $command = mb_substr($operation, $op_len, null, '8bit');
+
+            // we really need the argument if it is a key ID/fingerprint or email
+            // address se we can use simplified regexp to "revert escapeshellarg()"
+            if (preg_match('/^[\'"]([a-zA-Z0-9:@._-]+)[\'"]/', $command, $matches)) {
+                $opArg = $matches[1];
+            }
+        }
+
+        $this->operation    = $op;
+        $this->operationArg = $opArg;
+    }
+
+    // }}}
+    // {{{ handleStatus()
+
+    /**
+     * Handles error values in the status output from GPG
+     *
+     * This method is responsible for setting the
+     * {@link self::$errorCode}. See <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
+     * information on GPG's status output.
+     *
+     * @param string $line the status line to handle.
+     *
+     * @return void
+     */
+    public function handleStatus($line)
+    {
+        $tokens = explode(' ', $line);
+        switch ($tokens[0]) {
+        case 'NODATA':
+            $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
+            break;
+
+        case 'DECRYPTION_OKAY':
+            // If the message is encrypted, this is the all-clear signal.
+            $this->data['DecryptionOkay'] = true;
+            $this->errorCode = Crypt_GPG::ERROR_NONE;
+            break;
+
+        case 'DELETE_PROBLEM':
+            if ($tokens[1] == '1') {
+                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
+                break;
+            } elseif ($tokens[1] == '2') {
+                $this->errorCode = Crypt_GPG::ERROR_DELETE_PRIVATE_KEY;
+                break;
+            }
+            break;
+
+        case 'IMPORT_OK':
+            $this->data['Import']['fingerprint'] = $tokens[2];
+
+            if (empty($this->data['Import']['fingerprints'])) {
+                $this->data['Import']['fingerprints'] = array($tokens[2]);
+            } else if (!in_array($tokens[2], $this->data['Import']['fingerprints'])) {
+                $this->data['Import']['fingerprints'][] = $tokens[2];
+            }
+
+            break;
+
+        case 'IMPORT_RES':
+            $this->data['Import']['public_imported']   = intval($tokens[3]);
+            $this->data['Import']['public_unchanged']  = intval($tokens[5]);
+            $this->data['Import']['private_imported']  = intval($tokens[11]);
+            $this->data['Import']['private_unchanged'] = intval($tokens[12]);
+            break;
+
+        case 'NO_PUBKEY':
+        case 'NO_SECKEY':
+            $this->data['ErrorKeyId'] = $tokens[1];
+
+            if ($this->errorCode != Crypt_GPG::ERROR_MISSING_PASSPHRASE
+                && $this->errorCode != Crypt_GPG::ERROR_BAD_PASSPHRASE
+            ) {
+                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
+            }
+
+            // note: this message is also received if there are multiple
+            // recipients and a previous key had a correct passphrase.
+            $this->data['MissingKeys'][$tokens[1]] = $tokens[1];
+
+            // @FIXME: remove missing passphrase registered in ENC_TO handler
+            //         This is for GnuPG 2.1
+            unset($this->data['MissingPassphrases'][$tokens[1]]);
+            break;
+
+        case 'KEY_CONSIDERED':
+            // In GnuPG 2.1.x exporting/importing a secret key requires passphrase
+            // However, no NEED_PASSPRASE is returned, https://bugs.gnupg.org/gnupg/issue2667
+            // So, handling KEY_CONSIDERED and GET_HIDDEN is needed.
+            if (!array_key_exists('KeyConsidered', $this->data)) {
+                $this->data['KeyConsidered'] = $tokens[1];
+            }
+            break;
+
+        case 'USERID_HINT':
+            // remember the user id for pretty exception messages
+            // GnuPG 2.1.15 gives me: "USERID_HINT 0000000000000000 [?]"
+            $keyId = $tokens[1];
+            if (strcspn($keyId, '0')) {
+                $username = implode(' ', array_splice($tokens, 2));
+                $this->data['BadPassphrases'][$keyId] = $username;
+            }
+            break;
+
+        case 'ENC_TO':
+            // Now we know the message is encrypted. Set flag to check if
+            // decryption succeeded.
+            $this->data['DecryptionOkay'] = false;
+
+            // this is the new key message
+            $this->data['CurrentSubKeyId'] = $keyId = $tokens[1];
+
+            // For some reason in GnuPG 2.1.11 I get only ENC_TO and no
+            // NEED_PASSPHRASE/MISSING_PASSPHRASE/USERID_HINT
+            // This is not needed for GnuPG 2.1.15
+            if (!empty($_ENV['PINENTRY_USER_DATA'])) {
+                $passphrases = json_decode($_ENV['PINENTRY_USER_DATA'], true);
+            } else {
+                $passphrases = array();
+            }
+
+            // @TODO: Get user name/email
+            $this->data['BadPassphrases'][$keyId] = $keyId;
+            if (empty($passphrases) || empty($passphrases[$keyId])) {
+                $this->data['MissingPassphrases'][$keyId] = $keyId;
+            }
+            break;
+
+        case 'GOOD_PASSPHRASE':
+            // if we got a good passphrase, remove the key from the list of
+            // bad passphrases.
+            if (isset($this->data['CurrentSubKeyId'])) {
+                unset($this->data['BadPassphrases'][$this->data['CurrentSubKeyId']]);
+                unset($this->data['MissingPassphrases'][$this->data['CurrentSubKeyId']]);
+            }
+
+            $this->needPassphrase--;
+            break;
+
+        case 'BAD_PASSPHRASE':
+            $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
+            break;
+
+        case 'MISSING_PASSPHRASE':
+            if (isset($this->data['CurrentSubKeyId'])) {
+                $this->data['MissingPassphrases'][$this->data['CurrentSubKeyId']]
+                    = $this->data['CurrentSubKeyId'];
+            }
+
+            $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
+            break;
+
+        case 'GET_HIDDEN':
+            if ($tokens[1] == 'passphrase.enter' && isset($this->data['KeyConsidered'])) {
+                $tokens[1] = $this->data['KeyConsidered'];
+            } else {
+                break;
+            }
+            // no break
+
+        case 'NEED_PASSPHRASE':
+            $passphrase = $this->getPin($tokens[1]);
+
+            $this->engine->sendCommand($passphrase);
+
+            if ($passphrase === '') {
+                $this->needPassphrase++;
+            }
+            break;
+
+        case 'SIG_CREATED':
+            $this->data['SigCreated'] = $line;
+            break;
+
+        case 'SIG_ID':
+            // note: signature id comes before new signature line and may not
+            // exist for some signature types
+            $this->data['SignatureId'] = $tokens[1];
+            break;
+
+        case 'EXPSIG':
+        case 'EXPKEYSIG':
+        case 'REVKEYSIG':
+        case 'BADSIG':
+        case 'ERRSIG':
+            $this->errorCode = Crypt_GPG::ERROR_BAD_SIGNATURE;
+            // no break
+        case 'GOODSIG':
+            $signature = new Crypt_GPG_Signature();
+
+            // if there was a signature id, set it on the new signature
+            if (!empty($this->data['SignatureId'])) {
+                $signature->setId($this->data['SignatureId']);
+                $this->data['SignatureId'] = '';
+            }
+
+            // Detect whether fingerprint or key id was returned and set
+            // signature values appropriately. Key ids are strings of either
+            // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
+            // hexadecimal characters. The key id is the last 16 characters of
+            // the key fingerprint.
+            if (mb_strlen($tokens[1], '8bit') > 16) {
+                $signature->setKeyFingerprint($tokens[1]);
+                $signature->setKeyId(mb_substr($tokens[1], -16, null, '8bit'));
+            } else {
+                $signature->setKeyId($tokens[1]);
+            }
+
+            // get user id string
+            if ($tokens[0] != 'ERRSIG') {
+                $string = implode(' ', array_splice($tokens, 2));
+                $string = rawurldecode($string);
+
+                $signature->setUserId(Crypt_GPG_UserId::parse($string));
+            }
+
+            $this->data['Signatures'][] = $signature;
+            break;
+
+        case 'VALIDSIG':
+            if (empty($this->data['Signatures'])) {
+                break;
+            }
+
+            $signature = end($this->data['Signatures']);
+
+            $signature->setValid(true);
+            $signature->setKeyFingerprint($tokens[1]);
+
+            if (strpos($tokens[3], 'T') === false) {
+                $signature->setCreationDate($tokens[3]);
+            } else {
+                $signature->setCreationDate(strtotime($tokens[3]));
+            }
+
+            if (array_key_exists(4, $tokens)) {
+                if (strpos($tokens[4], 'T') === false) {
+                    $signature->setExpirationDate($tokens[4]);
+                } else {
+                    $signature->setExpirationDate(strtotime($tokens[4]));
+                }
+            }
+
+            break;
+
+        case 'KEY_CREATED':
+            if (isset($this->data['Handle']) && $tokens[3] == $this->data['Handle']) {
+                $this->data['KeyCreated'] = $tokens[2];
+            }
+            break;
+
+        case 'KEY_NOT_CREATED':
+            if (isset($this->data['Handle']) && $tokens[1] == $this->data['Handle']) {
+                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_CREATED;
+            }
+            break;
+
+        case 'PROGRESS':
+            // todo: at some point, support reporting status async
+            break;
+
+        // GnuPG 2.1 uses FAILURE and ERROR responses
+        case 'FAILURE':
+        case 'ERROR':
+            $errnum  = (int) $tokens[2];
+            $source  = $errnum >> 24;
+            $errcode = $errnum & 0xFFFFFF;
+
+            switch ($errcode) {
+            case 11: // bad passphrase
+            case 87: // bad PIN
+                $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
+                break;
+
+            case 177: // no passphrase
+            case 178: // no PIN
+                $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
+                break;
+
+            case 58:
+                $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
+                break;
+            }
+
+            break;
+        }
+    }
+
+    // }}}
+    // {{{ handleError()
+
+    /**
+     * Handles error values in the error output from GPG
+     *
+     * This method is responsible for setting the
+     * {@link Crypt_GPG_Engine::$_errorCode}.
+     *
+     * @param string $line the error line to handle.
+     *
+     * @return void
+     */
+    public function handleError($line)
+    {
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $pattern = '/no valid OpenPGP data found/';
+            if (preg_match($pattern, $line) === 1) {
+                $this->errorCode = Crypt_GPG::ERROR_NO_DATA;
+            }
+        }
+
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $pattern = '/No secret key|secret key not available/';
+            if (preg_match($pattern, $line) === 1) {
+                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
+            }
+        }
+
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $pattern = '/No public key|public key not found/';
+            if (preg_match($pattern, $line) === 1) {
+                $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
+            }
+        }
+
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $matches = array();
+            $pattern = '/can\'t (?:access|open) `(.*?)\'/';
+            if (preg_match($pattern, $line, $matches) === 1) {
+                $this->data['ErrorFilename'] = $matches[1];
+                $this->errorCode = Crypt_GPG::ERROR_FILE_PERMISSIONS;
+            }
+        }
+
+        // GnuPG 2.1: It should return MISSING_PASSPHRASE, but it does not
+        // we have to detect it this way. This happens e.g. on private key import
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $matches = array();
+            $pattern = '/key ([0-9A-F]+).* (Bad|No) passphrase/';
+            if (preg_match($pattern, $line, $matches) === 1) {
+                $keyId = $matches[1];
+                // @TODO: Get user name/email
+                if (empty($this->data['BadPassphrases'][$keyId])) {
+                    $this->data['BadPassphrases'][$keyId] = $keyId;
+                }
+                if ($matches[2] == 'Bad') {
+                    $this->errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
+                } else {
+                    $this->errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
+                    if (empty($this->data['MissingPassphrases'][$keyId])) {
+                        $this->data['MissingPassphrases'][$keyId] = $keyId;
+                    }
+                }
+            }
+        }
+
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE && $this->operation == 'gen-key') {
+            $pattern = '/:([0-9]+): invalid algorithm$/';
+            if (preg_match($pattern, $line, $matches) === 1) {
+                $this->errorCode          = Crypt_GPG::ERROR_BAD_KEY_PARAMS;
+                $this->data['LineNumber'] = intval($matches[1]);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ throwException()
+
+    /**
+     * On error throws exception
+     *
+     * @param int $exitcode GPG process exit code
+     *
+     * @return void
+     * @throws Crypt_GPG_Exception
+     */
+    public function throwException($exitcode = 0)
+    {
+        if ($exitcode > 0 && $this->errorCode === Crypt_GPG::ERROR_NONE) {
+            $this->errorCode = $this->setErrorCode($exitcode);
+        }
+
+        if ($this->errorCode === Crypt_GPG::ERROR_NONE) {
+            return;
+        }
+
+        $code = $this->errorCode;
+        $note = "Please use the 'debug' option when creating the Crypt_GPG " .
+            "object, and file a bug report at " . Crypt_GPG::BUG_URI;
+
+        switch ($this->operation) {
+        case 'version':
+            throw new Crypt_GPG_Exception(
+                'Unknown error getting GnuPG version information. ' . $note,
+                $code
+            );
+
+        case 'list-secret-keys':
+        case 'list-public-keys':
+        case 'list-keys':
+            switch ($code) {
+            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
+                // ignore not found key errors
+                break;
+
+            case Crypt_GPG::ERROR_FILE_PERMISSIONS:
+                if (!empty($this->data['ErrorFilename'])) {
+                    throw new Crypt_GPG_FileException(
+                        sprintf(
+                            'Error reading GnuPG data file \'%s\'. Check to make ' .
+                            'sure it is readable by the current user.',
+                            $this->data['ErrorFilename']
+                        ),
+                        $code,
+                        $this->data['ErrorFilename']
+                    );
+                }
+                throw new Crypt_GPG_FileException(
+                    'Error reading GnuPG data file. Check to make sure that ' .
+                    'GnuPG data files are readable by the current user.',
+                    $code
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error getting keys. ' . $note, $code
+                );
+            }
+            break;
+
+        case 'delete-key':
+        case 'delete-secret-key':
+            switch ($code) {
+            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
+                throw new Crypt_GPG_KeyNotFoundException(
+                    'Key not found: ' . $this->operationArg,
+                    $code,
+                    $this->operationArg
+                );
+
+            case Crypt_GPG::ERROR_DELETE_PRIVATE_KEY:
+                throw new Crypt_GPG_DeletePrivateKeyException(
+                    'Private key must be deleted before public key can be ' .
+                    'deleted.',
+                    $code,
+                    $this->operationArg
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error deleting key. ' . $note, $code
+                );
+            }
+            break;
+
+        case 'import':
+            switch ($code) {
+            case Crypt_GPG::ERROR_NO_DATA:
+                throw new Crypt_GPG_NoDataException(
+                    'No valid GPG key data found.', $code
+                );
+
+            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
+            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
+                throw $this->badPassException($code, 'Cannot import private key.');
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error importing GPG key. ' . $note, $code
+                );
+            }
+            break;
+
+        case 'export':
+        case 'export-secret-keys':
+            switch ($code) {
+            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
+            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
+                throw $this->badPassException($code, 'Cannot export private key.');
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error exporting a key. ' . $note, $code
+                );
+            }
+            break;
+
+        case 'encrypt':
+        case 'sign':
+        case 'clearsign':
+        case 'detach-sign':
+            switch ($code) {
+            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
+                throw new Crypt_GPG_KeyNotFoundException(
+                    'Cannot sign data. Private key not found. Import the '.
+                    'private key before trying to sign data.',
+                    $code,
+                    !empty($this->data['ErrorKeyId']) ? $this->data['ErrorKeyId'] : null
+                );
+
+            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
+                throw new Crypt_GPG_BadPassphraseException(
+                    'Cannot sign data. Incorrect passphrase provided.', $code
+                );
+
+            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
+                throw new Crypt_GPG_BadPassphraseException(
+                    'Cannot sign data. No passphrase provided.', $code
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    "Unknown error {$this->operation}ing data. $note", $code
+                );
+            }
+            break;
+
+        case 'verify':
+            switch ($code) {
+            case Crypt_GPG::ERROR_BAD_SIGNATURE:
+                // ignore bad signature errors
+                break;
+
+            case Crypt_GPG::ERROR_NO_DATA:
+                throw new Crypt_GPG_NoDataException(
+                    'No valid signature data found.', $code
+                );
+
+            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
+                throw new Crypt_GPG_KeyNotFoundException(
+                    'Public key required for data verification not in keyring.',
+                    $code,
+                    !empty($this->data['ErrorKeyId']) ? $this->data['ErrorKeyId'] : null
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error validating signature details. ' . $note,
+                    $code
+                );
+            }
+            break;
+
+        case 'decrypt':
+            switch ($code) {
+            case Crypt_GPG::ERROR_BAD_SIGNATURE:
+                // ignore bad signature errors
+                break;
+
+            case Crypt_GPG::ERROR_KEY_NOT_FOUND:
+                if (!empty($this->data['MissingKeys'])) {
+                    $keyId = reset($this->data['MissingKeys']);
+                } else {
+                    $keyId = '';
+                }
+
+                throw new Crypt_GPG_KeyNotFoundException(
+                    'Cannot decrypt data. No suitable private key is in the ' .
+                    'keyring. Import a suitable private key before trying to ' .
+                    'decrypt this data.',
+                    $code,
+                    $keyId
+                );
+
+            case Crypt_GPG::ERROR_BAD_PASSPHRASE:
+            case Crypt_GPG::ERROR_MISSING_PASSPHRASE:
+                throw $this->badPassException($code, 'Cannot decrypt data.');
+
+            case Crypt_GPG::ERROR_NO_DATA:
+                throw new Crypt_GPG_NoDataException(
+                    'Cannot decrypt data. No PGP encrypted data was found in '.
+                    'the provided data.',
+                    $code
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error decrypting data.', $code
+                );
+            }
+            break;
+
+        case 'gen-key':
+            switch ($code) {
+            case Crypt_GPG::ERROR_BAD_KEY_PARAMS:
+                throw new Crypt_GPG_InvalidKeyParamsException(
+                    'Invalid key algorithm specified.', $code
+                );
+
+            default:
+                throw new Crypt_GPG_Exception(
+                    'Unknown error generating key-pair. ' . $note, $code
+                );
+            }
+        }
+    }
+
+    // }}}
+    // {{{ throwException()
+
+    /**
+     * Check exit code of the GPG operation.
+     *
+     * @param int $exitcode GPG process exit code
+     *
+     * @return int Internal error code
+     */
+    protected function setErrorCode($exitcode)
+    {
+        if ($this->needPassphrase > 0) {
+            return Crypt_GPG::ERROR_MISSING_PASSPHRASE;
+        }
+
+        if ($this->operation == 'import') {
+            return Crypt_GPG::ERROR_NONE;
+        }
+
+        if ($this->operation == 'decrypt' && !empty($this->data['DecryptionOkay'])) {
+            if (!empty($this->data['IgnoreVerifyErrors'])) {
+                return Crypt_GPG::ERROR_NONE;
+            }
+            if (!empty($this->data['MissingKeys'])) {
+                return Crypt_GPG::ERROR_KEY_NOT_FOUND;
+            }
+        }
+
+        return Crypt_GPG::ERROR_UNKNOWN;
+    }
+
+    // }}}
+    // {{{ getData()
+
+    /**
+     * Get data from the last process execution.
+     *
+     * @param string $name Data element name:
+     *               - SigCreated: The last SIG_CREATED status.
+     *               - KeyConsidered: The last KEY_CONSIDERED status identifier.
+     *               - KeyCreated: The KEY_CREATED status (for specified Handle).
+     *               - Signatures: Signatures data from verification process.
+     *               - LineNumber: Number of the gen-key error line.
+     *               - Import: Result of IMPORT_OK/IMPORT_RES
+     *
+     * @return mixed
+     */
+    public function getData($name)
+    {
+        return isset($this->data[$name]) ? $this->data[$name] : null;
+    }
+
+    // }}}
+    // {{{ setData()
+
+    /**
+     * Set data for the process execution.
+     *
+     * @param string $name  Data element name:
+     *               - Handle: The unique key handle used by this handler
+     *                         The key handle is used to track GPG status output
+     *                         for a particular key on --gen-key command before
+     *                         the key has its own identifier.
+     *               - IgnoreVerifyErrors: Do not throw exceptions
+     *                         when signature verification failes because
+     *                         of a missing public key.
+     * @param mixed  $value Data element value
+     *
+     * @return void
+     */
+    public function setData($name, $value)
+    {
+        switch ($name) {
+        case 'Handle':
+            $this->data[$name] = strval($value);
+            break;
+
+        case 'IgnoreVerifyErrors':
+            $this->data[$name] = (bool) $value;
+            break;
+        }
+    }
+
+    // }}}
+    // {{{ setData()
+
+    /**
+     * Create Crypt_GPG_BadPassphraseException from operation data.
+     *
+     * @param int    $code    Error code
+     * @param string $message Error message
+     *
+     * @return Crypt_GPG_BadPassphraseException
+     */
+    protected function badPassException($code, $message)
+    {
+        $badPassphrases = array_diff_key(
+            isset($this->data['BadPassphrases']) ? $this->data['BadPassphrases'] : array(),
+            isset($this->data['MissingPassphrases']) ? $this->data['MissingPassphrases'] : array()
+        );
+
+        $missingPassphrases = array_intersect_key(
+            isset($this->data['BadPassphrases']) ? $this->data['BadPassphrases'] : array(),
+            isset($this->data['MissingPassphrases']) ? $this->data['MissingPassphrases'] : array()
+        );
+
+        if (count($badPassphrases) > 0) {
+            $message .= ' Incorrect passphrase provided for keys: "' .
+                implode('", "', $badPassphrases) . '".';
+        }
+        if (count($missingPassphrases) > 0) {
+            $message .= ' No passphrase provided for keys: "' .
+                implode('", "', $missingPassphrases) . '".';
+        }
+
+        return new Crypt_GPG_BadPassphraseException(
+            $message,
+            $code,
+            $badPassphrases,
+            $missingPassphrases
+        );
+    }
+
+    // }}}
+    // {{{ getPin()
+
+    /**
+     * Get registered passphrase for specified key.
+     *
+     * @param string $key Key identifier
+     *
+     * @return string Passphrase
+     */
+    protected function getPin($key)
+    {
+        $passphrase  = '';
+        $keyIdLength = mb_strlen($key, '8bit');
+
+        if ($keyIdLength && !empty($_ENV['PINENTRY_USER_DATA'])) {
+            $passphrases = json_decode($_ENV['PINENTRY_USER_DATA'], true);
+            foreach ($passphrases as $_keyId => $pass) {
+                $keyId        = $key;
+                $_keyIdLength = mb_strlen($_keyId, '8bit');
+
+                // Get last X characters of key identifier to compare
+                if ($keyIdLength < $_keyIdLength) {
+                    $_keyId = mb_substr($_keyId, -$keyIdLength, null, '8bit');
+                } else if ($keyIdLength > $_keyIdLength) {
+                    $keyId = mb_substr($keyId, -$_keyIdLength, null, '8bit');
+                }
+
+                if ($_keyId === $keyId) {
+                    $passphrase = $pass;
+                    break;
+                }
+            }
+        }
+
+        return $passphrase;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/Signature.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,426 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * A class representing GPG signatures
+ *
+ * This file contains a data class representing a GPG signature.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * User id class definition
+ */
+require_once 'Crypt/GPG/UserId.php';
+
+// {{{ class Crypt_GPG_Signature
+
+/**
+ * A class for GPG signature information
+ *
+ * This class is used to store the results of the Crypt_GPG::verify() method.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @see       Crypt_GPG::verify()
+ */
+class Crypt_GPG_Signature
+{
+    // {{{ class properties
+
+    /**
+     * A base64-encoded string containing a unique id for this signature if
+     * this signature has been verified as ok
+     *
+     * This id is used to prevent replay attacks and is not present for all
+     * types of signatures.
+     *
+     * @var string
+     */
+    private $_id = '';
+
+    /**
+     * The fingerprint of the key used to create the signature
+     *
+     * @var string
+     */
+    private $_keyFingerprint = '';
+
+    /**
+     * The id of the key used to create the signature
+     *
+     * @var string
+     */
+    private $_keyId = '';
+
+    /**
+     * The creation date of this signature
+     *
+     * This is a Unix timestamp.
+     *
+     * @var integer
+     */
+    private $_creationDate = 0;
+
+    /**
+     * The expiration date of the signature
+     *
+     * This is a Unix timestamp. If this signature does not expire, this will
+     * be zero.
+     *
+     * @var integer
+     */
+    private $_expirationDate = 0;
+
+    /**
+     * The user id associated with this signature
+     *
+     * @var Crypt_GPG_UserId
+     */
+    private $_userId = null;
+
+    /**
+     * Whether or not this signature is valid
+     *
+     * @var boolean
+     */
+    private $_isValid = false;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new signature
+     *
+     * Signatures can be initialized from an array of named values. Available
+     * names are:
+     *
+     * - <kbd>string  id</kbd>          - the unique id of this signature.
+     * - <kbd>string  fingerprint</kbd> - the fingerprint of the key used to
+     *                                    create the signature. The fingerprint
+     *                                    should not contain formatting
+     *                                    characters.
+     * - <kbd>string  keyId</kbd>       - the id of the key used to create the
+     *                                    the signature.
+     * - <kbd>integer creation</kbd>    - the date the signature was created.
+     *                                    This is a UNIX timestamp.
+     * - <kbd>integer expiration</kbd>  - the date the signature expired. This
+     *                                    is a UNIX timestamp. If the signature
+     *                                    does not expire, use 0.
+     * - <kbd>boolean valid</kbd>       - whether or not the signature is valid.
+     * - <kbd>string  userId</kbd>      - the user id associated with the
+     *                                    signature. This may also be a
+     *                                    {@link Crypt_GPG_UserId} object.
+     *
+     * @param Crypt_GPG_Signature|array $signature optional. Either an existing
+     *        signature object, which is copied; or an array of initial values.
+     */
+    public function __construct($signature = null)
+    {
+        // copy from object
+        if ($signature instanceof Crypt_GPG_Signature) {
+            $this->_id             = $signature->_id;
+            $this->_keyFingerprint = $signature->_keyFingerprint;
+            $this->_keyId          = $signature->_keyId;
+            $this->_creationDate   = $signature->_creationDate;
+            $this->_expirationDate = $signature->_expirationDate;
+            $this->_isValid        = $signature->_isValid;
+
+            if ($signature->_userId instanceof Crypt_GPG_UserId) {
+                $this->_userId = clone $signature->_userId;
+            }
+        }
+
+        // initialize from array
+        if (is_array($signature)) {
+            if (array_key_exists('id', $signature)) {
+                $this->setId($signature['id']);
+            }
+
+            if (array_key_exists('fingerprint', $signature)) {
+                $this->setKeyFingerprint($signature['fingerprint']);
+            }
+
+            if (array_key_exists('keyId', $signature)) {
+                $this->setKeyId($signature['keyId']);
+            }
+
+            if (array_key_exists('creation', $signature)) {
+                $this->setCreationDate($signature['creation']);
+            }
+
+            if (array_key_exists('expiration', $signature)) {
+                $this->setExpirationDate($signature['expiration']);
+            }
+
+            if (array_key_exists('valid', $signature)) {
+                $this->setValid($signature['valid']);
+            }
+
+            if (array_key_exists('userId', $signature)) {
+                $userId = new Crypt_GPG_UserId($signature['userId']);
+                $this->setUserId($userId);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ getId()
+
+    /**
+     * Gets the id of this signature
+     *
+     * @return string a base64-encoded string containing a unique id for this
+     *                signature. This id is used to prevent replay attacks and
+     *                is not present for all types of signatures.
+     */
+    public function getId()
+    {
+        return $this->_id;
+    }
+
+    // }}}
+    // {{{ getKeyFingerprint()
+
+    /**
+     * Gets the fingerprint of the key used to create this signature
+     *
+     * @return string the fingerprint of the key used to create this signature.
+     */
+    public function getKeyFingerprint()
+    {
+        return $this->_keyFingerprint;
+    }
+
+    // }}}
+    // {{{ getKeyId()
+
+    /**
+     * Gets the id of the key used to create this signature
+     *
+     * Whereas the fingerprint of the signing key may not always be available
+     * (for example if the signature is bad), the id should always be
+     * available.
+     *
+     * @return string the id of the key used to create this signature.
+     */
+    public function getKeyId()
+    {
+        return $this->_keyId;
+    }
+
+    // }}}
+    // {{{ getCreationDate()
+
+    /**
+     * Gets the creation date of this signature
+     *
+     * @return integer the creation date of this signature. This is a Unix
+     *                 timestamp.
+     */
+    public function getCreationDate()
+    {
+        return $this->_creationDate;
+    }
+
+    // }}}
+    // {{{ getExpirationDate()
+
+    /**
+     * Gets the expiration date of the signature
+     *
+     * @return integer the expiration date of this signature. This is a Unix
+     *                 timestamp. If this signature does not expire, this will
+     *                 be zero.
+     */
+    public function getExpirationDate()
+    {
+        return $this->_expirationDate;
+    }
+
+    // }}}
+    // {{{ getUserId()
+
+    /**
+     * Gets the user id associated with this signature
+     *
+     * @return Crypt_GPG_UserId the user id associated with this signature.
+     */
+    public function getUserId()
+    {
+        return $this->_userId;
+    }
+
+    // }}}
+    // {{{ isValid()
+
+    /**
+     * Gets whether or no this signature is valid
+     *
+     * @return boolean true if this signature is valid and false if it is not.
+     */
+    public function isValid()
+    {
+        return $this->_isValid;
+    }
+
+    // }}}
+    // {{{ setId()
+
+    /**
+     * Sets the id of this signature
+     *
+     * @param string $id a base64-encoded string containing a unique id for
+     *                   this signature.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     *
+     * @see Crypt_GPG_Signature::getId()
+     */
+    public function setId($id)
+    {
+        $this->_id = strval($id);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setKeyFingerprint()
+
+    /**
+     * Sets the key fingerprint of this signature
+     *
+     * @param string $fingerprint the key fingerprint of this signature. This
+     *                            is the fingerprint of the primary key used to
+     *                            create this signature.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setKeyFingerprint($fingerprint)
+    {
+        $this->_keyFingerprint = strval($fingerprint);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setKeyId()
+
+    /**
+     * Sets the key id of this signature
+     *
+     * @param string $id the key id of this signature. This is the id of the
+     *                   primary key used to create this signature.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setKeyId($id)
+    {
+        $this->_keyId = strval($id);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setCreationDate()
+
+    /**
+     * Sets the creation date of this signature
+     *
+     * @param integer $creationDate the creation date of this signature. This
+     *                              is a Unix timestamp.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setCreationDate($creationDate)
+    {
+        $this->_creationDate = intval($creationDate);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setExpirationDate()
+
+    /**
+     * Sets the expiration date of this signature
+     *
+     * @param integer $expirationDate the expiration date of this signature.
+     *                                This is a Unix timestamp. Specify zero if
+     *                                this signature does not expire.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setExpirationDate($expirationDate)
+    {
+        $this->_expirationDate = intval($expirationDate);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setUserId()
+
+    /**
+     * Sets the user id associated with this signature
+     *
+     * @param Crypt_GPG_UserId $userId the user id associated with this
+     *                                 signature.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setUserId(Crypt_GPG_UserId $userId)
+    {
+        $this->_userId = $userId;
+        return $this;
+    }
+
+    // }}}
+    // {{{ setValid()
+
+    /**
+     * Sets whether or not this signature is valid
+     *
+     * @param boolean $isValid true if this signature is valid and false if it
+     *                         is not.
+     *
+     * @return Crypt_GPG_Signature the current object, for fluent interface.
+     */
+    public function setValid($isValid)
+    {
+        $this->_isValid = ($isValid) ? true : false;
+        return $this;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/SignatureCreationInfo.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,228 @@
+<?php
+/**
+ * Part of Crypt_GPG
+ *
+ * PHP version 5
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Christian Weiske <cweiske@php.net>
+ * @copyright 2015 PEAR
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * Information about a recently created signature.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Christian Weiske <cweiske@php.net>
+ * @copyright 2015 PEAR
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
+ * @link      http://www.gnupg.org/
+ */
+class Crypt_GPG_SignatureCreationInfo
+{
+    /**
+     * One of the three signature types:
+     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
+     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
+     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
+     *
+     * @var integer
+     */
+    protected $mode;
+
+    /**
+     * Public Key algorithm
+     *
+     * @var integer
+     */
+    protected $pkAlgorithm;
+
+    /**
+     * Algorithm to hash the data
+     *
+     * @see RFC 2440 / 9.4. Hash Algorithm
+     * @var integer
+     */
+    protected $hashAlgorithm;
+
+    /**
+     * OpenPGP signature class
+     *
+     * @var mixed
+     */
+    protected $class;
+
+    /**
+     * Unix timestamp when the signature was created
+     *
+     * @var integer
+     */
+    protected $timestamp;
+
+    /**
+     * Key fingerprint
+     *
+     * @var string
+     */
+    protected $keyFingerprint;
+
+    /**
+     * If the line given to the constructor was valid
+     *
+     * @var boolean
+     */
+    protected $valid;
+
+    /**
+     * Names for the hash algorithm IDs.
+     *
+     * Names taken from RFC 3156, without the leading "pgp-".
+     *
+     * @see RFC 2440 / 9.4. Hash Algorithm
+     * @see RFC 3156 / 5. OpenPGP signed data
+     * @var array
+     */
+    protected static $hashAlgorithmNames = array(
+        1 => 'md5',
+        2 => 'sha1',
+        3 => 'ripemd160',
+        5 => 'md2',
+        6 => 'tiger192',
+        7 => 'haval-5-160',
+        8 => 'sha256',
+        9 => 'sha384',
+        10 => 'sha512',
+        11 => 'sha224',
+    );
+
+    /**
+     * Parse a SIG_CREATED line from gnupg
+     *
+     * @param string $sigCreatedLine Line beginning with "SIG_CREATED "
+     */
+    public function __construct($sigCreatedLine = null)
+    {
+        if ($sigCreatedLine === null) {
+            $this->valid = false;
+            return;
+        }
+
+        $parts = explode(' ', $sigCreatedLine);
+        if (count($parts) !== 7) {
+            $this->valid = false;
+            return;
+        }
+        list(
+            $title, $mode, $pkAlgorithm, $hashAlgorithm,
+            $class, $timestamp, $keyFingerprint
+        ) = $parts;
+
+        switch (strtoupper($mode[0])) {
+        case 'D':
+            $this->mode = Crypt_GPG::SIGN_MODE_DETACHED;
+            break;
+        case 'C':
+            $this->mode = Crypt_GPG::SIGN_MODE_CLEAR;
+            break;
+        case 'S':
+            $this->mode = Crypt_GPG::SIGN_MODE_NORMAL;
+            break;
+        }
+
+        $this->pkAlgorithm    = (int) $pkAlgorithm;
+        $this->hashAlgorithm  = (int) $hashAlgorithm;
+        $this->class          = $class;
+        if (is_numeric($timestamp)) {
+            $this->timestamp  = (int) $timestamp;
+        } else {
+            $this->timestamp  = strtotime($timestamp);
+        }
+        $this->keyFingerprint = $keyFingerprint;
+        $this->valid = true;
+    }
+
+    /**
+     * Get the signature type
+     * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
+     * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
+     * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
+     *
+     * @return integer
+     */
+    public function getMode()
+    {
+        return $this->mode;
+    }
+
+    /**
+     * Return the public key algorithm used.
+     *
+     * @return integer
+     */
+    public function getPkAlgorithm()
+    {
+        return $this->pkAlgorithm;
+    }
+
+    /**
+     * Return the hash algorithm used to hash the data to sign.
+     *
+     * @return integer
+     */
+    public function getHashAlgorithm()
+    {
+        return $this->hashAlgorithm;
+    }
+
+    /**
+     * Get a name for the used hashing algorithm.
+     *
+     * @return string|null
+     */
+    public function getHashAlgorithmName()
+    {
+        if (!isset(self::$hashAlgorithmNames[$this->hashAlgorithm])) {
+            return null;
+        }
+        return self::$hashAlgorithmNames[$this->hashAlgorithm];
+    }
+
+    /**
+     * Return the timestamp at which the signature was created
+     *
+     * @return integer
+     */
+    public function getTimestamp()
+    {
+        return $this->timestamp;
+    }
+
+    /**
+     * Return the key's fingerprint
+     *
+     * @return string
+     */
+    public function getKeyFingerprint()
+    {
+        return $this->keyFingerprint;
+    }
+
+    /**
+     * Tell if the fingerprint line given to the constructor was valid
+     *
+     * @return boolean
+     */
+    public function isValid()
+    {
+        return $this->valid;
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/SubKey.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,715 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Contains a class representing GPG sub-keys and constants for GPG algorithms
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @copyright 2005-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+// {{{ class Crypt_GPG_SubKey
+
+/**
+ * A class for GPG sub-key information
+ *
+ * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
+ * method. Sub-key objects are members of a {@link Crypt_GPG_Key} object.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @copyright 2005-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @see       Crypt_GPG::getKeys()
+ * @see       Crypt_GPG_Key::getSubKeys()
+ */
+class Crypt_GPG_SubKey
+{
+    // {{{ algorithm class constants
+
+    /**
+     * RSA encryption algorithm.
+     */
+    const ALGORITHM_RSA = 1;
+
+    /**
+     * Elgamal encryption algorithm (encryption only).
+     */
+    const ALGORITHM_ELGAMAL_ENC = 16;
+
+    /**
+     * DSA encryption algorithm (sometimes called DH, sign only).
+     */
+    const ALGORITHM_DSA = 17;
+
+    /**
+     * Elgamal encryption algorithm (signage and encryption - should not be
+     * used).
+     */
+    const ALGORITHM_ELGAMAL_ENC_SGN = 20;
+
+    // }}}
+    // {{{ usage class constants
+
+    /**
+     * Key can be used to encrypt
+     */
+    const USAGE_ENCRYPT = 1;
+
+    /**
+     * Key can be used to sign
+     */
+    const USAGE_SIGN = 2;
+
+    /**
+     * Key can be used to certify other keys
+     */
+    const USAGE_CERTIFY = 4;
+
+    /**
+     * Key can be used for authentication
+     */
+    const USAGE_AUTHENTICATION = 8;
+
+    // }}}
+    // {{{ class properties
+
+    /**
+     * The id of this sub-key
+     *
+     * @var string
+     */
+    private $_id = '';
+
+    /**
+     * The algorithm used to create this sub-key
+     *
+     * The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants.
+     *
+     * @var integer
+     */
+    private $_algorithm = 0;
+
+    /**
+     * The fingerprint of this sub-key
+     *
+     * @var string
+     */
+    private $_fingerprint = '';
+
+    /**
+     * Length of this sub-key in bits
+     *
+     * @var integer
+     */
+    private $_length = 0;
+
+    /**
+     * Date this sub-key was created
+     *
+     * This is a Unix timestamp.
+     *
+     * @var integer
+     */
+    private $_creationDate = 0;
+
+    /**
+     * Date this sub-key expires
+     *
+     * This is a Unix timestamp. If this sub-key does not expire, this will be
+     * zero.
+     *
+     * @var integer
+     */
+    private $_expirationDate = 0;
+
+    /**
+     * Contains usage flags of this sub-key
+     *
+     * @var int
+     */
+    private $_usage = 0;
+
+    /**
+     * Whether or not the private key for this sub-key exists in the keyring
+     *
+     * @var boolean
+     */
+    private $_hasPrivate = false;
+
+    /**
+     * Whether or not this sub-key is revoked
+     *
+     * @var boolean
+     */
+    private $_isRevoked = false;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new sub-key object
+     *
+     * Sub-keys can be initialized from an array of named values. Available
+     * names are:
+     *
+     * - <kbd>string  id</kbd>          - the key id of the sub-key.
+     * - <kbd>integer algorithm</kbd>   - the encryption algorithm of the
+     *                                    sub-key.
+     * - <kbd>string  fingerprint</kbd> - the fingerprint of the sub-key. The
+     *                                    fingerprint should not contain
+     *                                    formatting characters.
+     * - <kbd>integer length</kbd>      - the length of the sub-key in bits.
+     * - <kbd>integer creation</kbd>    - the date the sub-key was created.
+     *                                    This is a UNIX timestamp.
+     * - <kbd>integer expiration</kbd>  - the date the sub-key expires. This
+     *                                    is a UNIX timestamp. If the sub-key
+     *                                    does not expire, use 0.
+     * - <kbd>boolean canSign</kbd>     - whether or not the sub-key can be
+     *                                    used to sign data.
+     * - <kbd>boolean canEncrypt</kbd>  - whether or not the sub-key can be
+     *                                    used to encrypt data.
+     * - <kbd>integer usage</kbd>       - the sub-key usage flags
+     * - <kbd>boolean hasPrivate</kbd>  - whether or not the private key for
+     *                                    the sub-key exists in the keyring.
+     * - <kbd>boolean isRevoked</kbd>   - whether or not this sub-key is
+     *                                    revoked.
+     *
+     * @param Crypt_GPG_SubKey|string|array $key optional. Either an existing
+     *        sub-key object, which is copied; a sub-key string, which is
+     *        parsed; or an array of initial values.
+     */
+    public function __construct($key = null)
+    {
+        // parse from string
+        if (is_string($key)) {
+            $key = self::parse($key);
+        }
+
+        // copy from object
+        if ($key instanceof Crypt_GPG_SubKey) {
+            $this->_id             = $key->_id;
+            $this->_algorithm      = $key->_algorithm;
+            $this->_fingerprint    = $key->_fingerprint;
+            $this->_length         = $key->_length;
+            $this->_creationDate   = $key->_creationDate;
+            $this->_expirationDate = $key->_expirationDate;
+            $this->_usage          = $key->_usage;
+            $this->_hasPrivate     = $key->_hasPrivate;
+            $this->_isRevoked      = $key->_isRevoked;
+        }
+
+        // initialize from array
+        if (is_array($key)) {
+            if (array_key_exists('id', $key)) {
+                $this->setId($key['id']);
+            }
+
+            if (array_key_exists('algorithm', $key)) {
+                $this->setAlgorithm($key['algorithm']);
+            }
+
+            if (array_key_exists('fingerprint', $key)) {
+                $this->setFingerprint($key['fingerprint']);
+            }
+
+            if (array_key_exists('length', $key)) {
+                $this->setLength($key['length']);
+            }
+
+            if (array_key_exists('creation', $key)) {
+                $this->setCreationDate($key['creation']);
+            }
+
+            if (array_key_exists('expiration', $key)) {
+                $this->setExpirationDate($key['expiration']);
+            }
+
+            if (array_key_exists('usage', $key)) {
+                $this->setUsage($key['usage']);
+            }
+
+            if (array_key_exists('canSign', $key)) {
+                $this->setCanSign($key['canSign']);
+            }
+
+            if (array_key_exists('canEncrypt', $key)) {
+                $this->setCanEncrypt($key['canEncrypt']);
+            }
+
+            if (array_key_exists('hasPrivate', $key)) {
+                $this->setHasPrivate($key['hasPrivate']);
+            }
+
+            if (array_key_exists('isRevoked', $key)) {
+                $this->setRevoked($key['isRevoked']);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ getId()
+
+    /**
+     * Gets the id of this sub-key
+     *
+     * @return string the id of this sub-key.
+     */
+    public function getId()
+    {
+        return $this->_id;
+    }
+
+    // }}}
+    // {{{ getAlgorithm()
+
+    /**
+     * Gets the algorithm used by this sub-key
+     *
+     * The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_*
+     * constants.
+     *
+     * @return integer the algorithm used by this sub-key.
+     */
+    public function getAlgorithm()
+    {
+        return $this->_algorithm;
+    }
+
+    // }}}
+    // {{{ getCreationDate()
+
+    /**
+     * Gets the creation date of this sub-key
+     *
+     * This is a Unix timestamp.
+     *
+     * @return integer the creation date of this sub-key.
+     */
+    public function getCreationDate()
+    {
+        return $this->_creationDate;
+    }
+
+    // }}}
+    // {{{ getExpirationDate()
+
+    /**
+     * Gets the date this sub-key expires
+     *
+     * This is a Unix timestamp. If this sub-key does not expire, this will be
+     * zero.
+     *
+     * @return integer the date this sub-key expires.
+     */
+    public function getExpirationDate()
+    {
+        return $this->_expirationDate;
+    }
+
+    // }}}
+    // {{{ getFingerprint()
+
+    /**
+     * Gets the fingerprint of this sub-key
+     *
+     * @return string the fingerprint of this sub-key.
+     */
+    public function getFingerprint()
+    {
+        return $this->_fingerprint;
+    }
+
+    // }}}
+    // {{{ getLength()
+
+    /**
+     * Gets the length of this sub-key in bits
+     *
+     * @return integer the length of this sub-key in bits.
+     */
+    public function getLength()
+    {
+        return $this->_length;
+    }
+
+    // }}}
+    // {{{ canSign()
+
+    /**
+     * Gets whether or not this sub-key can sign data
+     *
+     * @return boolean true if this sub-key can sign data and false if this
+     *                 sub-key can not sign data.
+     */
+    public function canSign()
+    {
+        return ($this->_usage & self::USAGE_SIGN) != 0;
+    }
+
+    // }}}
+    // {{{ canEncrypt()
+
+    /**
+     * Gets whether or not this sub-key can encrypt data
+     *
+     * @return boolean true if this sub-key can encrypt data and false if this
+     *                 sub-key can not encrypt data.
+     */
+    public function canEncrypt()
+    {
+        return ($this->_usage & self::USAGE_ENCRYPT) != 0;
+    }
+
+    // }}}
+    // {{{ usage()
+
+    /**
+     * Gets usage flags of this sub-key
+     *
+     * @return int Sum of usage flags
+     */
+    public function usage()
+    {
+        return $this->_usage;
+    }
+
+    // }}}
+    // {{{ hasPrivate()
+
+    /**
+     * Gets whether or not the private key for this sub-key exists in the
+     * keyring
+     *
+     * @return boolean true the private key for this sub-key exists in the
+     *                 keyring and false if it does not.
+     */
+    public function hasPrivate()
+    {
+        return $this->_hasPrivate;
+    }
+
+    // }}}
+    // {{{ isRevoked()
+
+    /**
+     * Gets whether or not this sub-key is revoked
+     *
+     * @return boolean true if this sub-key is revoked and false if it is not.
+     */
+    public function isRevoked()
+    {
+        return $this->_isRevoked;
+    }
+
+    // }}}
+    // {{{ setCreationDate()
+
+    /**
+     * Sets the creation date of this sub-key
+     *
+     * The creation date is a Unix timestamp.
+     *
+     * @param integer $creationDate the creation date of this sub-key.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setCreationDate($creationDate)
+    {
+        $this->_creationDate = intval($creationDate);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setExpirationDate()
+
+    /**
+     * Sets the expiration date of this sub-key
+     *
+     * The expiration date is a Unix timestamp. Specify zero if this sub-key
+     * does not expire.
+     *
+     * @param integer $expirationDate the expiration date of this sub-key.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setExpirationDate($expirationDate)
+    {
+        $this->_expirationDate = intval($expirationDate);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setId()
+
+    /**
+     * Sets the id of this sub-key
+     *
+     * @param string $id the id of this sub-key.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setId($id)
+    {
+        $this->_id = strval($id);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setAlgorithm()
+
+    /**
+     * Sets the algorithm used by this sub-key
+     *
+     * @param integer $algorithm the algorithm used by this sub-key.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setAlgorithm($algorithm)
+    {
+        $this->_algorithm = intval($algorithm);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setFingerprint()
+
+    /**
+     * Sets the fingerprint of this sub-key
+     *
+     * @param string $fingerprint the fingerprint of this sub-key.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setFingerprint($fingerprint)
+    {
+        $this->_fingerprint = strval($fingerprint);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setLength()
+
+    /**
+     * Sets the length of this sub-key in bits
+     *
+     * @param integer $length the length of this sub-key in bits.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setLength($length)
+    {
+        $this->_length = intval($length);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setCanSign()
+
+    /**
+     * Sets whether or not this sub-key can sign data
+     *
+     * @param boolean $canSign true if this sub-key can sign data and false if
+     *                         it can not.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setCanSign($canSign)
+    {
+        if ($canSign) {
+            $this->_usage |= self::USAGE_SIGN;
+        } else {
+            $this->_usage &= ~self::USAGE_SIGN;
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ setCanEncrypt()
+
+    /**
+     * Sets whether or not this sub-key can encrypt data
+     *
+     * @param boolean $canEncrypt true if this sub-key can encrypt data and
+     *                            false if it can not.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setCanEncrypt($canEncrypt)
+    {
+        if ($canEncrypt) {
+            $this->_usage |= self::USAGE_ENCRYPT;
+        } else {
+            $this->_usage &= ~self::USAGE_ENCRYPT;
+        }
+
+        return $this;
+    }
+
+    // }}}
+    // {{{ setUsage()
+
+    /**
+     * Sets usage flags of the sub-key
+     *
+     * @param integer $usage Usage flags
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setUsage($usage)
+    {
+        $this->_usage = (int) $usage;
+        return $this;
+    }
+
+    // }}}
+    // {{{ setHasPrivate()
+
+    /**
+     * Sets whether of not the private key for this sub-key exists in the
+     * keyring
+     *
+     * @param boolean $hasPrivate true if the private key for this sub-key
+     *                            exists in the keyring and false if it does
+     *                            not.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setHasPrivate($hasPrivate)
+    {
+        $this->_hasPrivate = ($hasPrivate) ? true : false;
+        return $this;
+    }
+
+    // }}}
+    // {{{ setRevoked()
+
+    /**
+     * Sets whether or not this sub-key is revoked
+     *
+     * @param boolean $isRevoked whether or not this sub-key is revoked.
+     *
+     * @return Crypt_GPG_SubKey the current object, for fluent interface.
+     */
+    public function setRevoked($isRevoked)
+    {
+        $this->_isRevoked = ($isRevoked) ? true : false;
+        return $this;
+    }
+
+    // }}}
+    // {{{ parse()
+
+    /**
+     * Parses a sub-key object from a sub-key string
+     *
+     * See <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG distribution} for information
+     * on how the sub-key string is parsed.
+     *
+     * @param string $string the string containing the sub-key.
+     *
+     * @return Crypt_GPG_SubKey the sub-key object parsed from the string.
+     */
+    public static function parse($string)
+    {
+        $tokens = explode(':', $string);
+
+        $subKey = new Crypt_GPG_SubKey();
+
+        $subKey->setId($tokens[4]);
+        $subKey->setLength($tokens[2]);
+        $subKey->setAlgorithm($tokens[3]);
+        $subKey->setCreationDate(self::_parseDate($tokens[5]));
+        $subKey->setExpirationDate(self::_parseDate($tokens[6]));
+
+        if ($tokens[1] == 'r') {
+            $subKey->setRevoked(true);
+        }
+
+        $usage = 0;
+        $usage_map = array(
+            'a' => self::USAGE_AUTHENTICATION,
+            'c' => self::USAGE_CERTIFY,
+            'e' => self::USAGE_ENCRYPT,
+            's' => self::USAGE_SIGN,
+        );
+
+        foreach ($usage_map as $key => $flag) {
+            if (strpos($tokens[11], $key) !== false) {
+                $usage |= $flag;
+            }
+        }
+
+        $subKey->setUsage($usage);
+
+        return $subKey;
+    }
+
+    // }}}
+    // {{{ _parseDate()
+
+    /**
+     * Parses a date string as provided by GPG into a UNIX timestamp
+     *
+     * @param string $string the date string.
+     *
+     * @return integer the UNIX timestamp corresponding to the provided date
+     *                 string.
+     */
+    private static function _parseDate($string)
+    {
+        if ($string == '') {
+            $timestamp = 0;
+        } else {
+            // all times are in UTC according to GPG documentation
+            $timeZone = new DateTimeZone('UTC');
+
+            if (strpos($string, 'T') === false) {
+                // interpret as UNIX timestamp
+                $string = '@' . $string;
+            }
+
+            $date = new DateTime($string, $timeZone);
+
+            // convert to UNIX timestamp
+            $timestamp = intval($date->format('U'));
+        }
+
+        return $timestamp;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPG/UserId.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,378 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Contains a data class representing a GPG user id
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+// {{{ class Crypt_GPG_UserId
+
+/**
+ * A class for GPG user id information
+ *
+ * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
+ * method. User id objects are members of a {@link Crypt_GPG_Key} object.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @see       Crypt_GPG::getKeys()
+ * @see       Crypt_GPG_Key::getUserIds()
+ */
+class Crypt_GPG_UserId
+{
+    // {{{ class properties
+
+    /**
+     * The name field of this user id
+     *
+     * @var string
+     */
+    private $_name = '';
+
+    /**
+     * The comment field of this user id
+     *
+     * @var string
+     */
+    private $_comment = '';
+
+    /**
+     * The email field of this user id
+     *
+     * @var string
+     */
+    private $_email = '';
+
+    /**
+     * Whether or not this user id is revoked
+     *
+     * @var boolean
+     */
+    private $_isRevoked = false;
+
+    /**
+     * Whether or not this user id is valid
+     *
+     * @var boolean
+     */
+    private $_isValid = true;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new user id
+     *
+     * User ids can be initialized from an array of named values. Available
+     * names are:
+     *
+     * - <kbd>string  name</kbd>    - the name field of the user id.
+     * - <kbd>string  comment</kbd> - the comment field of the user id.
+     * - <kbd>string  email</kbd>   - the email field of the user id.
+     * - <kbd>boolean valid</kbd>   - whether or not the user id is valid.
+     * - <kbd>boolean revoked</kbd> - whether or not the user id is revoked.
+     *
+     * @param Crypt_GPG_UserId|string|array $userId optional. Either an
+     *        existing user id object, which is copied; a user id string, which
+     *        is parsed; or an array of initial values.
+     */
+    public function __construct($userId = null)
+    {
+        // parse from string
+        if (is_string($userId)) {
+            $userId = self::parse($userId);
+        }
+
+        // copy from object
+        if ($userId instanceof Crypt_GPG_UserId) {
+            $this->_name      = $userId->_name;
+            $this->_comment   = $userId->_comment;
+            $this->_email     = $userId->_email;
+            $this->_isRevoked = $userId->_isRevoked;
+            $this->_isValid   = $userId->_isValid;
+        }
+
+        // initialize from array
+        if (is_array($userId)) {
+            if (array_key_exists('name', $userId)) {
+                $this->setName($userId['name']);
+            }
+
+            if (array_key_exists('comment', $userId)) {
+                $this->setComment($userId['comment']);
+            }
+
+            if (array_key_exists('email', $userId)) {
+                $this->setEmail($userId['email']);
+            }
+
+            if (array_key_exists('revoked', $userId)) {
+                $this->setRevoked($userId['revoked']);
+            }
+
+            if (array_key_exists('valid', $userId)) {
+                $this->setValid($userId['valid']);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ getName()
+
+    /**
+     * Gets the name field of this user id
+     *
+     * @return string the name field of this user id.
+     */
+    public function getName()
+    {
+        return $this->_name;
+    }
+
+    // }}}
+    // {{{ getComment()
+
+    /**
+     * Gets the comments field of this user id
+     *
+     * @return string the comments field of this user id.
+     */
+    public function getComment()
+    {
+        return $this->_comment;
+    }
+
+    // }}}
+    // {{{ getEmail()
+
+    /**
+     * Gets the email field of this user id
+     *
+     * @return string the email field of this user id.
+     */
+    public function getEmail()
+    {
+        return $this->_email;
+    }
+
+    // }}}
+    // {{{ isRevoked()
+
+    /**
+     * Gets whether or not this user id is revoked
+     *
+     * @return boolean true if this user id is revoked and false if it is not.
+     */
+    public function isRevoked()
+    {
+        return $this->_isRevoked;
+    }
+
+    // }}}
+    // {{{ isValid()
+
+    /**
+     * Gets whether or not this user id is valid
+     *
+     * @return boolean true if this user id is valid and false if it is not.
+     */
+    public function isValid()
+    {
+        return $this->_isValid;
+    }
+
+    // }}}
+    // {{{ __toString()
+
+    /**
+     * Gets a string representation of this user id
+     *
+     * The string is formatted as:
+     * <b><kbd>name (comment) <email-address></kbd></b>.
+     *
+     * @return string a string representation of this user id.
+     */
+    public function __toString()
+    {
+        $components = array();
+
+        if (mb_strlen($this->_name, '8bit') > 0) {
+            $components[] = $this->_name;
+        }
+
+        if (mb_strlen($this->_comment, '8bit') > 0) {
+            $components[] = '(' . $this->_comment . ')';
+        }
+
+        if (mb_strlen($this->_email, '8bit') > 0) {
+            $components[] = '<' . $this->_email. '>';
+        }
+
+        return implode(' ', $components);
+    }
+
+    // }}}
+    // {{{ setName()
+
+    /**
+     * Sets the name field of this user id
+     *
+     * @param string $name the name field of this user id.
+     *
+     * @return Crypt_GPG_UserId the current object, for fluent interface.
+     */
+    public function setName($name)
+    {
+        $this->_name = strval($name);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setComment()
+
+    /**
+     * Sets the comment field of this user id
+     *
+     * @param string $comment the comment field of this user id.
+     *
+     * @return Crypt_GPG_UserId the current object, for fluent interface.
+     */
+    public function setComment($comment)
+    {
+        $this->_comment = strval($comment);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setEmail()
+
+    /**
+     * Sets the email field of this user id
+     *
+     * @param string $email the email field of this user id.
+     *
+     * @return Crypt_GPG_UserId the current object, for fluent interface.
+     */
+    public function setEmail($email)
+    {
+        $this->_email = strval($email);
+        return $this;
+    }
+
+    // }}}
+    // {{{ setRevoked()
+
+    /**
+     * Sets whether or not this user id is revoked
+     *
+     * @param boolean $isRevoked whether or not this user id is revoked.
+     *
+     * @return Crypt_GPG_UserId the current object, for fluent interface.
+     */
+    public function setRevoked($isRevoked)
+    {
+        $this->_isRevoked = ($isRevoked) ? true : false;
+        return $this;
+    }
+
+    // }}}
+    // {{{ setValid()
+
+    /**
+     * Sets whether or not this user id is valid
+     *
+     * @param boolean $isValid whether or not this user id is valid.
+     *
+     * @return Crypt_GPG_UserId the current object, for fluent interface.
+     */
+    public function setValid($isValid)
+    {
+        $this->_isValid = ($isValid) ? true : false;
+        return $this;
+    }
+
+    // }}}
+    // {{{ parse()
+
+    /**
+     * Parses a user id object from a user id string
+     *
+     * A user id string is of the form:
+     * <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i>
+     * and <i>email-address</i> fields being optional.
+     *
+     * @param string $string the user id string to parse.
+     *
+     * @return Crypt_GPG_UserId the user id object parsed from the string.
+     */
+    public static function parse($string)
+    {
+        $userId  = new Crypt_GPG_UserId();
+        $name    = '';
+        $email   = '';
+        $comment = '';
+
+        // get email address from end of string if it exists
+        $matches = array();
+        if (preg_match('/^(.*?)<([^>]+)>$/', $string, $matches) === 1) {
+            $string = trim($matches[1]);
+            $email  = $matches[2];
+        }
+
+        // get comment from end of string if it exists
+        $matches = array();
+        if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) {
+            $string  = $matches[1];
+            $comment = $matches[2];
+        }
+
+        // there can be an email without a name
+        if (!$email && preg_match('/^[\S]+@[\S]+$/', $string, $matches) === 1) {
+            $email = $string;
+        } else {
+            $name = $string;
+        }
+
+        $userId->setName($name);
+        $userId->setComment($comment);
+        $userId->setEmail($email);
+
+        return $userId;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/Crypt/GPGAbstract.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,464 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Crypt_GPG is a package to use GPG from PHP
+ *
+ * This package provides an object oriented interface to GNU Privacy
+ * Guard (GPG). It requires the GPG executable to be on the system.
+ *
+ * Though GPG can support symmetric-key cryptography, this package is intended
+ * only to facilitate public-key cryptography.
+ *
+ * This file contains an abstract implementation of a user of the
+ * {@link Crypt_GPG_Engine} class.
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
+ * @link      http://www.gnupg.org/
+ */
+
+/**
+ * GPG key class
+ */
+require_once 'Crypt/GPG/Key.php';
+
+/**
+ * GPG sub-key class
+ */
+require_once 'Crypt/GPG/SubKey.php';
+
+/**
+ * GPG user id class
+ */
+require_once 'Crypt/GPG/UserId.php';
+
+/**
+ * GPG process and I/O engine class
+ */
+require_once 'Crypt/GPG/Engine.php';
+
+// {{{ class Crypt_GPGAbstract
+
+/**
+ * Base class for implementing a user of {@link Crypt_GPG_Engine}
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Nathan Fredrickson <nathan@silverorange.com>
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ * @link      http://www.gnupg.org/
+ */
+abstract class Crypt_GPGAbstract
+{
+    // {{{ class error constants
+
+    /**
+     * Error code returned when there is no error.
+     */
+    const ERROR_NONE = 0;
+
+    /**
+     * Error code returned when an unknown or unhandled error occurs.
+     */
+    const ERROR_UNKNOWN = 1;
+
+    /**
+     * Error code returned when a bad passphrase is used.
+     */
+    const ERROR_BAD_PASSPHRASE = 2;
+
+    /**
+     * Error code returned when a required passphrase is missing.
+     */
+    const ERROR_MISSING_PASSPHRASE = 3;
+
+    /**
+     * Error code returned when a key that is already in the keyring is
+     * imported.
+     */
+    const ERROR_DUPLICATE_KEY = 4;
+
+    /**
+     * Error code returned the required data is missing for an operation.
+     *
+     * This could be missing key data, missing encrypted data or missing
+     * signature data.
+     */
+    const ERROR_NO_DATA = 5;
+
+    /**
+     * Error code returned when an unsigned key is used.
+     */
+    const ERROR_UNSIGNED_KEY = 6;
+
+    /**
+     * Error code returned when a key that is not self-signed is used.
+     */
+    const ERROR_NOT_SELF_SIGNED = 7;
+
+    /**
+     * Error code returned when a public or private key that is not in the
+     * keyring is used.
+     */
+    const ERROR_KEY_NOT_FOUND = 8;
+
+    /**
+     * Error code returned when an attempt to delete public key having a
+     * private key is made.
+     */
+    const ERROR_DELETE_PRIVATE_KEY = 9;
+
+    /**
+     * Error code returned when one or more bad signatures are detected.
+     */
+    const ERROR_BAD_SIGNATURE = 10;
+
+    /**
+     * Error code returned when there is a problem reading GnuPG data files.
+     */
+    const ERROR_FILE_PERMISSIONS = 11;
+
+    /**
+     * Error code returned when a key could not be created.
+     */
+    const ERROR_KEY_NOT_CREATED = 12;
+
+    /**
+     * Error code returned when bad key parameters are used during key
+     * generation.
+     */
+    const ERROR_BAD_KEY_PARAMS = 13;
+
+    // }}}
+    // {{{ other class constants
+
+    /**
+     * URI at which package bugs may be reported.
+     */
+    const BUG_URI = 'http://pear.php.net/bugs/report.php?package=Crypt_GPG';
+
+    // }}}
+    // {{{ protected class properties
+
+    /**
+     * Engine used to control the GPG subprocess
+     *
+     * @var Crypt_GPG_Engine
+     *
+     * @see Crypt_GPGAbstract::setEngine()
+     */
+    protected $engine = null;
+
+    // }}}
+    // {{{ __construct()
+
+    /**
+     * Creates a new GPG object
+     *
+     * Available options are:
+     *
+     * - <kbd>string  homedir</kbd>        - the directory where the GPG
+     *                                       keyring files are stored. If not
+     *                                       specified, Crypt_GPG uses the
+     *                                       default of <kbd>~/.gnupg</kbd>.
+     * - <kbd>string  publicKeyring</kbd>  - the file path of the public
+     *                                       keyring. Use this if the public
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/pubring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  privateKeyring</kbd> - the file path of the private
+     *                                       keyring. Use this if the private
+     *                                       keyring is not in the homedir, or
+     *                                       if the keyring is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       keyring with this option
+     *                                       (/foo/bar/secring.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  trustDb</kbd>        - the file path of the web-of-trust
+     *                                       database. Use this if the trust
+     *                                       database is not in the homedir, or
+     *                                       if the database is in a directory
+     *                                       not writable by the process
+     *                                       invoking GPG (like Apache). Then
+     *                                       you can specify the path to the
+     *                                       trust database with this option
+     *                                       (/foo/bar/trustdb.gpg), and specify
+     *                                       a writable directory (like /tmp)
+     *                                       using the <i>homedir</i> option.
+     * - <kbd>string  binary</kbd>         - the location of the GPG binary. If
+     *                                       not specified, the driver attempts
+     *                                       to auto-detect the GPG binary
+     *                                       location using a list of known
+     *                                       default locations for the current
+     *                                       operating system. The option
+     *                                       <kbd>gpgBinary</kbd> is a
+     *                                       deprecated alias for this option.
+     * - <kbd>string  agent</kbd>          - the location of the GnuPG agent
+     *                                       binary. The gpg-agent is only
+     *                                       used for GnuPG 2.x. If not
+     *                                       specified, the engine attempts
+     *                                       to auto-detect the gpg-agent
+     *                                       binary location using a list of
+     *                                       know default locations for the
+     *                                       current operating system.
+     * - <kbd>string|false gpgconf</kbd>   - the location of the GnuPG conf
+     *                                       binary. The gpgconf is only
+     *                                       used for GnuPG >= 2.1. If not
+     *                                       specified, the engine attempts
+     *                                       to auto-detect the location using
+     *                                       a list of know default locations.
+     *                                       When set to FALSE `gpgconf --kill`
+     *                                       will not be executed via destructor.
+     * - <kbd>string digest-algo</kbd>     - Sets the message digest algorithm.
+     * - <kbd>string cipher-algo</kbd>     - Sets the symmetric cipher.
+     * - <kbd>boolean strict</kbd>         - In strict mode clock problems on
+     *                                       subkeys and signatures are not ignored
+     *                                       (--ignore-time-conflict
+     *                                       and --ignore-valid-from options)
+     * - <kbd>mixed debug</kbd>            - whether or not to use debug mode.
+     *                                       When debug mode is on, all
+     *                                       communication to and from the GPG
+     *                                       subprocess is logged. This can be
+     *                                       useful to diagnose errors when
+     *                                       using Crypt_GPG.
+     *
+     * @param array $options optional. An array of options used to create the
+     *                       GPG object. All options are optional and are
+     *                       represented as key-value pairs.
+     *
+     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
+     *         and cannot be created. This can happen if <kbd>homedir</kbd> is
+     *         not specified, Crypt_GPG is run as the web user, and the web
+     *         user has no home directory. This exception is also thrown if any
+     *         of the options <kbd>publicKeyring</kbd>,
+     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
+     *         specified but the files do not exist or are are not readable.
+     *         This can happen if the user running the Crypt_GPG process (for
+     *         example, the Apache user) does not have permission to read the
+     *         files.
+     *
+     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
+     *         if no <kbd>binary</kbd> is provided and no suitable binary could
+     *         be found.
+     *
+     * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
+     *         if no <kbd>agent</kbd> is provided and no suitable gpg-agent
+     *         cound be found.
+     */
+    public function __construct(array $options = array())
+    {
+        $this->setEngine(new Crypt_GPG_Engine($options));
+    }
+
+    // }}}
+    // {{{ setEngine()
+
+    /**
+     * Sets the I/O engine to use for GnuPG operations
+     *
+     * Normally this method does not need to be used. It provides a means for
+     * dependency injection.
+     *
+     * @param Crypt_GPG_Engine $engine the engine to use.
+     *
+     * @return Crypt_GPGAbstract the current object, for fluent interface.
+     */
+    public function setEngine(Crypt_GPG_Engine $engine)
+    {
+        $this->engine = $engine;
+        return $this;
+    }
+
+    // }}}
+    // {{{ getVersion()
+
+    /**
+     * Returns version of the engine (GnuPG) used for operation.
+     *
+     * @return string GnuPG version.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     */
+    public function getVersion()
+    {
+        return $this->engine->getVersion();
+    }
+
+    // }}}
+    // {{{ _getKeys()
+
+    /**
+     * Gets the available keys in the keyring
+     *
+     * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
+     * the first section of <b>doc/DETAILS</b> in the
+     * {@link http://www.gnupg.org/download/ GPG package} for a detailed
+     * description of how the GPG command output is parsed.
+     *
+     * @param string $keyId optional. Only keys with that match the specified
+     *                      pattern are returned. The pattern may be part of
+     *                      a user id, a key id or a key fingerprint. If not
+     *                      specified, all keys are returned.
+     *
+     * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
+     *               match the specified <kbd>$keyId</kbd> an empty array is
+     *               returned.
+     *
+     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
+     *         Use the <kbd>debug</kbd> option and file a bug report if these
+     *         exceptions occur.
+     *
+     * @see Crypt_GPG_Key
+     */
+    protected function _getKeys($keyId = '')
+    {
+        // get private key fingerprints
+        if ($keyId == '') {
+            $operation = '--list-secret-keys';
+        } else {
+            $operation = '--utf8-strings --list-secret-keys ' . escapeshellarg($keyId);
+        }
+
+        // According to The file 'doc/DETAILS' in the GnuPG distribution, using
+        // double '--with-fingerprint' also prints the fingerprint for subkeys.
+        $arguments = array(
+            '--with-colons',
+            '--with-fingerprint',
+            '--with-fingerprint',
+            '--fixed-list-mode'
+        );
+
+        $output = '';
+
+        $this->engine->reset();
+        $this->engine->setOutput($output);
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        $privateKeyFingerprints = array();
+
+        foreach (explode(PHP_EOL, $output) as $line) {
+            $lineExp = explode(':', $line);
+            if ($lineExp[0] == 'fpr') {
+                $privateKeyFingerprints[] = $lineExp[9];
+            }
+        }
+
+        // get public keys
+        if ($keyId == '') {
+            $operation = '--list-public-keys';
+        } else {
+            $operation = '--utf8-strings --list-public-keys ' . escapeshellarg($keyId);
+        }
+
+        $output = '';
+
+        $this->engine->reset();
+        $this->engine->setOutput($output);
+        $this->engine->setOperation($operation, $arguments);
+        $this->engine->run();
+
+        $keys   = array();
+        $key    = null; // current key
+        $subKey = null; // current sub-key
+
+        foreach (explode(PHP_EOL, $output) as $line) {
+            $lineExp = explode(':', $line);
+
+            if ($lineExp[0] == 'pub') {
+
+                // new primary key means last key should be added to the array
+                if ($key !== null) {
+                    $keys[] = $key;
+                }
+
+                $key = new Crypt_GPG_Key();
+
+                $subKey = Crypt_GPG_SubKey::parse($line);
+                $key->addSubKey($subKey);
+
+            } elseif ($lineExp[0] == 'sub') {
+
+                $subKey = Crypt_GPG_SubKey::parse($line);
+                $key->addSubKey($subKey);
+
+            } elseif ($lineExp[0] == 'fpr') {
+
+                $fingerprint = $lineExp[9];
+
+                // set current sub-key fingerprint
+                $subKey->setFingerprint($fingerprint);
+
+                // if private key exists, set has private to true
+                if (in_array($fingerprint, $privateKeyFingerprints)) {
+                    $subKey->setHasPrivate(true);
+                }
+
+            } elseif ($lineExp[0] == 'uid') {
+
+                $string = stripcslashes($lineExp[9]); // as per documentation
+                $userId = new Crypt_GPG_UserId($string);
+
+                if ($lineExp[1] == 'r') {
+                    $userId->setRevoked(true);
+                }
+
+                $key->addUserId($userId);
+
+            }
+        }
+
+        // add last key
+        if ($key !== null) {
+            $keys[] = $key;
+        }
+
+        return $keys;
+    }
+
+    // }}}
+}
+
+// }}}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,502 @@
+              GNU LESSER GENERAL PUBLIC LICENSE
+                  Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,51 @@
+# Crypt_GPG #
+Crypt_GPG is a PHP package to interact with the [GNU Privacy Guard
+(GnuPG)](http://www.gnupg.org/). GnuPG is a free and open-source
+implementation of the [OpenPGP](http://www.ietf.org/rfc/rfc4880.txt)
+protocol, providing key management, data encryption and data signing.
+Crypt_GPG provides an object-oriented API for performing OpenPGP
+actions using GnuPG.
+
+[Crypt_GPG](http://pear.php.net/package/Crypt_GPG) has been
+migrated from [PEAR SVN](https://svn.php.net/repository/pear/packages/Crypt_GPG).
+
+## Documentation ##
+
+### Quick Example
+```php
+<?php
+
+require_once 'Crypt/GPG.php';
+
+$gpg = new Crypt_GPG();
+$gpg->addEncryptKey('test@example.com');
+$data = $gpg->encrypt('my secret data');
+
+?>
+```
+
+### Further Documentation ###
+* [High-Level Documentation](http://pear.php.net/manual/en/package.encryption.crypt-gpg.intro.php)
+* [Detailed API Documentation](http://pear.php.net/package/Crypt_GPG/docs/latest/)
+
+## Bugs and Issues ##
+Please report all new issues via the [PEAR bug tracker](http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG).
+
+Please submit pull requests for your bug reports!
+
+## Testing ##
+To test, run either
+`$ phpunit tests/`
+  or
+`$ pear run-tests -r`
+
+## Building ##
+To build, simply
+`$ pear package`
+
+## Installing ##
+To install from scratch
+`$ pear install package.xml`
+
+To upgrade
+`$ pear upgrade -f package.xml`
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,57 @@
+{
+    "name": "pear/crypt_gpg",
+    "description": "Provides an object oriented interface to the GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.",
+    "type": "library",
+    "keywords": [
+        "gpg",
+        "gnupg",
+        "encryption",
+        "pgp"
+    ],
+    "homepage": "https://github.com/pear/Crypt_GPG",
+    "license": "LGPL-2.1",
+    "authors": [
+        {
+            "name": "Michael Gauthier",
+            "email": "mike@silverorange.com"
+        },
+        {
+            "name": "Nathan Fredrickson",
+            "email": "nathan@silverorange.com"
+        },
+        {
+            "name": "Aleksander Machniak",
+            "email": "alec@alec.pl"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.8",
+        "ext-mbstring": "*",
+        "pear/console_commandline": "*",
+        "pear/pear_exception": "*"
+    },
+    "suggest": {
+        "ext-posix": "May require the posix PHP extension"
+    },
+    "bin": [
+        "scripts/crypt-gpg-pinentry"
+    ],
+    "autoload": {
+        "psr-0": {
+            "Crypt": "./"
+        }
+    },
+    "include-path": [
+        "./"
+    ],
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Crypt_GPG",
+        "source": "https://github.com/pear/Crypt_GPG"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "*"
+    },
+    "archive": {
+        "exclude": ["tools", "package.php"]
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/data/pinentry-cli.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<command>
+	<description>Utility that emulates GnuPG 1.x passphrase handling over pipe-based IPC for GnuPG 2.x.</description>
+	<version>@package-version@</version>
+	<option name="log">
+		<short_name>-l</short_name>
+		<long_name>--log</long_name>
+		<description>Optional location to log pinentry activity.</description>
+		<action>StoreString</action>
+	</option>
+	<option name="verbose">
+		<short_name>-v</short_name>
+		<long_name>--verbose</long_name>
+		<description>Sets verbosity level. Use multiples for more detail (e.g. "-vv").</description>
+		<action>Counter</action>
+		<default>0</default>
+	</option>
+</command>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/package.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,182 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * This is the package.xml generator for Crypt_GPG
+ *
+ * PHP version 5
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @author    Nathan Fredrikson <nathan@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+require_once 'PEAR/PackageFileManager2.php';
+PEAR::setErrorHandling(PEAR_ERROR_DIE);
+
+$apiVersion     = '1.6.2';
+$apiState       = 'stable';
+
+$releaseVersion = '1.6.2';
+$releaseState   = 'stable';
+$releaseNotes   =
+    "Added options to configure digest/cipher algorithms.";
+
+$description =
+    "This package provides an object oriented interface to GNU Privacy " .
+    "Guard (GnuPG). It requires the GnuPG executable to be on the system.\n\n" .
+    "Though GnuPG can support symmetric-key cryptography, this package is " .
+    "intended only to facilitate public-key cryptography.\n\n" .
+    "This package requires PHP version 5.4.8 or greater.";
+
+$package = new PEAR_PackageFileManager2();
+
+$package->setOptions(
+    array(
+        'filelistgenerator' => 'file',
+        'simpleoutput'      => true,
+        'baseinstalldir'    => '/',
+        'packagedirectory'  => './',
+        'dir_roles'         => array(
+            'Crypt'         => 'php',
+            'Crypt/GPG'     => 'php',
+            'tests'         => 'test',
+            'data'          => 'data'
+        ),
+        'exceptions'        => array(
+            'LICENSE'       => 'doc',
+            'README.md'     => 'doc',
+            'scripts/crypt-gpg-pinentry' => 'script'
+        ),
+        'ignore'            => array(
+            'tests/config.php',
+            'tools/',
+            'package.php',
+            'composer.json',
+            '*.tgz'
+        ),
+        'installexceptions' => array(
+            'scripts/crypt-gpg-pinentry' => '/'
+        )
+    )
+);
+
+$package->setPackage('Crypt_GPG');
+$package->setSummary('GNU Privacy Guard (GnuPG)');
+$package->setDescription($description);
+$package->setChannel('pear.php.net');
+$package->setPackageType('php');
+$package->setLicense('LGPL', 'http://www.gnu.org/copyleft/lesser.html');
+
+$package->setNotes($releaseNotes);
+$package->setReleaseVersion($releaseVersion);
+$package->setReleaseStability($releaseState);
+$package->setAPIVersion($apiVersion);
+$package->setAPIStability($apiState);
+
+$package->addMaintainer(
+    'lead',
+    'gauthierm',
+    'Mike Gauthier',
+    'mike@silverorange.com'
+);
+
+$package->addMaintainer(
+    'lead',
+    'nrf',
+    'Nathan Fredrickson',
+    'nathan@silverorange.com'
+);
+
+$package->addMaintainer(
+    'lead',
+    'alec',
+    'Aleksander Machniak',
+    'alec@alec.pl'
+);
+
+$package->addReplacement(
+    'data/pinentry-cli.xml',
+    'package-info',
+    '@package-version@',
+    'version'
+);
+
+$package->addReplacement(
+    'Crypt/GPG/PinEntry.php',
+    'package-info',
+    '@package-name@',
+    'name'
+);
+
+$package->addReplacement(
+    'Crypt/GPG/PinEntry.php',
+    'pear-config',
+    '@data-dir@',
+    'data_dir'
+);
+
+$package->addReplacement(
+    'Crypt/GPG/Engine.php',
+    'pear-config',
+    '@bin-dir@',
+    'bin_dir'
+);
+
+$package->addReplacement(
+    'scripts/crypt-gpg-pinentry',
+    'pear-config',
+    '@php-dir@',
+    'php_dir'
+);
+
+$package->setPhpDep('5.4.8');
+$package->addExtensionDep('optional', 'posix');
+$package->addExtensionDep('required', 'mbstring');
+$package->addOsDep('windows', true);
+$package->setPearinstallerDep('1.4.0');
+$package->addPackageDepWithChannel(
+    'required',
+    'Console_CommandLine',
+    'pear.php.net',
+    '1.1.10'
+);
+
+$package->generateContents();
+
+$package->addRelease();
+$package->addInstallAs(
+    'scripts/crypt-gpg-pinentry',
+    'crypt-gpg-pinentry'
+);
+
+if (   isset($_GET['make'])
+    || (isset($_SERVER['argv']) && @$_SERVER['argv'][1] == 'make')
+) {
+    $package->writePackageFile();
+} else {
+    $package->debugPackageFile();
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.10.5" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+    http://pear.php.net/dtd/tasks-1.0.xsd
+    http://pear.php.net/dtd/package-2.0
+    http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Crypt_GPG</name>
+ <channel>pear.php.net</channel>
+ <summary>GNU Privacy Guard (GnuPG)</summary>
+ <description>This package provides an object oriented interface to GNU Privacy Guard (GnuPG). It requires the GnuPG executable to be on the system.
+
+Though GnuPG can support symmetric-key cryptography, this package is intended only to facilitate public-key cryptography.
+
+This package requires PHP version 5.4.8 or greater.</description>
+ <lead>
+  <name>Mike Gauthier</name>
+  <user>gauthierm</user>
+  <email>mike@silverorange.com</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Nathan Fredrickson</name>
+  <user>nrf</user>
+  <email>nathan@silverorange.com</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Aleksander Machniak</name>
+  <user>alec</user>
+  <email>alec@alec.pl</email>
+  <active>yes</active>
+ </lead>
+ <date>2017-09-03</date>
+ <time>08:49:02</time>
+ <version>
+  <release>1.6.2</release>
+  <api>1.6.2</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
+ <notes>
+Added options to configure digest/cipher algorithms.
+ </notes>
+ <contents>
+  <dir baseinstalldir="/" name="/">
+   <dir name="Crypt">
+    <dir name="GPG">
+     <file baseinstalldir="/" name="Engine.php" role="php">
+      <tasks:replace from="@bin-dir@" to="bin_dir" type="pear-config" />
+     </file>
+     <file baseinstalldir="/" name="Exceptions.php" role="php" />
+     <file baseinstalldir="/" name="Key.php" role="php" />
+     <file baseinstalldir="/" name="KeyGenerator.php" role="php" />
+     <file baseinstalldir="/" name="PinEntry.php" role="php">
+      <tasks:replace from="@package-name@" to="name" type="package-info" />
+      <tasks:replace from="@data-dir@" to="data_dir" type="pear-config" />
+     </file>
+     <file baseinstalldir="/" name="ProcessControl.php" role="php" />
+     <file baseinstalldir="/" name="ProcessHandler.php" role="php" />
+     <file baseinstalldir="/" name="Signature.php" role="php" />
+     <file baseinstalldir="/" name="SignatureCreationInfo.php" role="php" />
+     <file baseinstalldir="/" name="SubKey.php" role="php" />
+     <file baseinstalldir="/" name="UserId.php" role="php" />
+    </dir> <!-- /Crypt/GPG -->
+    <file baseinstalldir="/" name="GPG.php" role="php" />
+    <file baseinstalldir="/" name="GPGAbstract.php" role="php" />
+   </dir> <!-- /Crypt -->
+   <dir name="data">
+    <file baseinstalldir="/" name="pinentry-cli.xml" role="data">
+     <tasks:replace from="@package-version@" to="version" type="package-info" />
+    </file>
+   </dir> <!-- /data -->
+   <dir name="scripts">
+    <file baseinstalldir="/" name="crypt-gpg-pinentry" role="script">
+     <tasks:replace from="@php-dir@" to="php_dir" type="pear-config" />
+    </file>
+   </dir> <!-- /scripts -->
+   <dir name="tests">
+    <dir name="data-files">
+     <file baseinstalldir="/" name="testDecryptFile.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptFileDual.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptFileDualOnePassphrase.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptFileKeyNotFoundException.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptFileNoPassphrase.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptFileToString.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFile.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFileDual.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFileDualOnePassphrase.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFileDualSignatories.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFileNoPassphrase.asc" role="test" />
+     <file baseinstalldir="/" name="testDecryptVerifyFileToString.asc" role="test" />
+     <file baseinstalldir="/" name="testFileEmpty.plain" role="test" />
+     <file baseinstalldir="/" name="testFileMedium.plain" role="test" />
+     <file baseinstalldir="/" name="testFileSmall.plain" role="test" />
+     <file baseinstalldir="/" name="testImportKeyFile_private.asc" role="test" />
+     <file baseinstalldir="/" name="testImportKeyFile_public.asc" role="test" />
+     <file baseinstalldir="/" name="testVerifyFileClearsignedData.asc" role="test" />
+     <file baseinstalldir="/" name="testVerifyFileDualClearsignedData.asc" role="test" />
+     <file baseinstalldir="/" name="testVerifyFileDualNormalSignedData.asc" role="test" />
+     <file baseinstalldir="/" name="testVerifyFileNormalSignedData.asc" role="test" />
+    </dir> <!-- /tests/data-files -->
+    <file baseinstalldir="/" name="config.php.dist" role="test" />
+    <file baseinstalldir="/" name="DecryptAndVerifyTest.php" role="test" />
+    <file baseinstalldir="/" name="DecryptTest.php" role="test" />
+    <file baseinstalldir="/" name="DeletePrivateKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="DeletePublicKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="EncryptAndSignTest.php" role="test" />
+    <file baseinstalldir="/" name="EncryptTest.php" role="test" />
+    <file baseinstalldir="/" name="ExceptionsTest.php" role="test" />
+    <file baseinstalldir="/" name="ExportPrivateKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="ExportPublicKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="GeneralTest.php" role="test" />
+    <file baseinstalldir="/" name="GetFingerprintTest.php" role="test" />
+    <file baseinstalldir="/" name="GetKeysTest.php" role="test" />
+    <file baseinstalldir="/" name="ImportKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="KeyGeneratorTest.php" role="test" />
+    <file baseinstalldir="/" name="KeyTest.php" role="test" />
+    <file baseinstalldir="/" name="phpunit.xml" role="test" />
+    <file baseinstalldir="/" name="SignatureCreationInfoTest.php" role="test" />
+    <file baseinstalldir="/" name="SignatureTest.php" role="test" />
+    <file baseinstalldir="/" name="SignTest.php" role="test" />
+    <file baseinstalldir="/" name="SubKeyTest.php" role="test" />
+    <file baseinstalldir="/" name="TestCase.php" role="test" />
+    <file baseinstalldir="/" name="UserIdTest.php" role="test" />
+    <file baseinstalldir="/" name="VerifyTest.php" role="test" />
+   </dir> <!-- /tests -->
+   <file baseinstalldir="/" name="LICENSE" role="doc" />
+   <file baseinstalldir="/" name="README.md" role="doc" />
+  </dir> <!-- / -->
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.8</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.0</min>
+   </pearinstaller>
+   <package>
+    <name>Console_CommandLine</name>
+    <channel>pear.php.net</channel>
+    <min>1.1.10</min>
+   </package>
+   <extension>
+    <name>mbstring</name>
+   </extension>
+   <os>
+    <name>windows</name>
+    <conflicts />
+   </os>
+  </required>
+  <optional>
+   <extension>
+    <name>posix</name>
+   </extension>
+  </optional>
+ </dependencies>
+ <phprelease>
+  <filelist>
+   <install as="crypt-gpg-pinentry" name="scripts/crypt-gpg-pinentry" />
+  </filelist>
+ </phprelease>
+ <changelog>
+  <release>
+   <version>
+    <release>1.6.2</release>
+    <api>1.6.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2017-09-03</date>
+   <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
+   <notes>
+Added options to configure digest/cipher algorithms.
+   </notes>
+  </release>
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentry	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,33 @@
+#! /usr/bin/env php
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+// Check if we're running directly from git repo or if we're running
+// from a PEAR or Composer packaged version.
+$ds    = DIRECTORY_SEPARATOR;
+$root  = __DIR__ . $ds . '..' ;
+$paths = array(
+    '@php-dir@', // PEAR or Composer
+    $root, // Git (or Composer with wrong @php-dir@)
+    $root . $ds . '..' . $ds . 'Console_CommandLine', // Composer
+    $root . $ds . '..' . $ds . 'console_commandline', // Composer
+    // and composer-installed PEAR_Exception for Console_CommandLine (#21074)
+    $root . $ds . '..' . $ds . '..' . $ds . 'pear' . $ds . 'pear_exception',
+);
+
+foreach ($paths as $idx => $path) {
+    if (!is_dir($path)) {
+        unset($paths[$idx]);
+    }
+}
+
+// We depend on Console_CommandLine, so we append also the default include path
+set_include_path(implode(PATH_SEPARATOR, $paths) . PATH_SEPARATOR . get_include_path());
+
+require_once 'Crypt/GPG/PinEntry.php';
+
+$pinentry = new Crypt_GPG_PinEntry();
+$pinentry->__invoke();
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/DecryptAndVerifyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1458 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Decrypt verify tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit DecryptAndVefifyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests decrypt verify abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class DecryptAndVerifyTestCase extends Crypt_GPG_TestCase
+{
+    // string
+    // {{{ testDecryptVerify()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerify()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('5dGf4//0CqBmlexYjyS7agt4Zn4');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258956392);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with first-keypair@example.com, signed with
+        // first-keypair@example.com
+        // {{{ encrypted data no passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
+8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
+yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
+s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
+z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
+wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
+7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
+YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
+FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
+mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
+Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
+u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
+NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
+lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
+0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
+=pycC
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyNoPassphrase()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyNoPassphrase()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('0YWPoUQhN5G4uTi45QLy3GG3RWg');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258956262);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with no-passphrase@example.com, signed with
+        // first-keypair@example.com
+        // {{{ encrypted data no passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOAyS/OAcAwUtPEAf+KCytTYgKglBxxU9jAr2i0WVXhBcfyVyFq0N4or4HGMSz
+zBw3eXw/JI77PY4pBxtBDCzPgSox8T8abh6OU3LDu3Zy9kvKcbQxYCSOeJkPBDpK
+OtJ2Sw7CJ7QIvoSyqmRmCjrji9OU3k9ulQQ/5GauAP4QnUnt6lNkz+FOWVl5wzqc
+yjXkRgfmKNBzYVscgdH+YDEUTM+edN+NflzqLk8HLU98TmINbbVJwnPvpCCvRGh4
+SDDaF7WmiIjSqI15Bn7F/l+8ScxvC8EH6wxR9gqS+B9DlqVpjIoYa57SPXLcshvQ
+r02OjC8d8u2oyW9TLqnTirsf347Dzo7rRwm3GbdSrgf9FoQjymAzSx6izx9BsMg+
+6XJV0jSHW+jDjiJRoMAYXKc/s/y8MWRo/irCTPjReLEHWvKmISXynXqxHy1Dw5SN
+1VQAPIH1ftqEVZvGtA11vLPjPYenCRCkkwz8AHqLmqZt6V2A49zPen4+H+Tp/5xr
+s7TQhygo9vmTTzniBqV4lYbOyshcUTVlUErba+ffivKQPNnM+oCZXyUbJTsMlGv+
+elZqUKlNEBXivHnmIbwP/vpZ1WMMewCeij1/Z6OGbbT51dh9qeqPRj96dF351Lbk
+GPxLw5uP2bIzGQjGIBeKHrl2kkRxKk/MX6QPrMHR4KlUpPRfKcQLC0TGPTEPu6ya
+5tKoAdoBuKYNoFk2txsseRQTI/3v5pudNsdh5R/s+PMs+HpxyaFemI3eJb05E4Jx
+zGJX5UiMIb/Yr0zCvlOaDx0NjPwIoUDqtZw6YqA59/BKmaRyqGoXk0UJMK2hAJKN
+yTrj0nUDWFgoKzLHu3EQtYffLUrrjVc6BB8pUmrZKBisGnXFBQvShkzdWmzUT655
+JQfVfeZmgq+UAsfqIlrWBfDcqfyvWeAAZ7qH
+=1oh0
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyKeyNotFoundException_decrypt()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyKeyNotFoundException_decrypt()
+    {
+        // was encrypted with missing-key@example.com, signed with
+        // first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA82wFXJyxZnNEAgAwSoWLKDj/dyotGwYCT60IHC7vPGKbcbd9LMEQ8hOobKS
+21aHeUBft9vlAnZabzPSqeQGYoD0BugONncV45HWlA3QD0KGcVuE6FaWIkexRNsK
+S8MwVpcCgTuVkmSBgZbAS9jl7ODGGNdfGCb20fpgWFx8rv6q14aPUrD1bw5VVWeS
+vLGuRGA+pcBwFlDTRvYtM0UnggfPMn6uH0CKI8uZsKkyHCu2zSCBLYsuo87sY6zJ
+2UwEDyuYvr38HmcNZkb8vk7gpLCeJvFLeLYwpRrQcQy0Q+iElNPFXl5HzlwTNDq5
+5IIiQNlaCV6vUKeX5VhU4i6h4yUWegVoIro4h7KwYQf8CxTrKUnI6WfDuvttU5Z7
+q+7WCTDEnmOT7C2AvOKyfNXlERQnDtY1LHjJe6AEyP2RHnTrHR6Nbi4zQfl4BSZX
+hH+ojM/001ir5/m8cOaMpQzHnMyUIi1HenpjJFo5fsMYg+K7j88X4KWlu3YFeB+O
+xAp/mf7qUiiTKeDdGJE0u3NkFmXz/G/QDp8zwpqG+/UpiEjMm4OdFMwP68l9FWRX
+d1ql5Rfeb50HPIjcmoa1iHq0IJCbT2xXxCm7QyGRy5PwSTMsQnrDUvj6zIBhqusZ
+CTHqBXBH3jsDKTBJGQNwOGA418kcEpRsHY+C53rPhoUDnjzBY7dzIstQFsCy1bPZ
+qNKoAfFsNjinvrwexRqkDypYLxEKs/nrMM4q+yz8n6Q2BqPT6YvOciHAkE0k4I46
+STZqsFTwWxgWmhLlEFvYul3BWEp5Ow5J6+6TZrHCDIFhoQIHesxmsWVxxlgTG+0M
+TS1210ua1nkP+DdWQUBzdDHFxAWWG2pUxzApIPBD2wyeLd1HMVpOjQGpFxMuO8Pd
+ZcGqhMpjECMzc4DOAPFbdKwgWKXi95v4zeUf
+=Ze0h
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyKeyNotFoundException_verify()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyKeyNotFoundException_verify()
+    {
+        // was encrypted with first-keypair@example.com, signed with
+        // missing-key@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1
+
+hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3
+raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb
+y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ
+i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr
+jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ
+akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa
+uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn
+T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM
+Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp
+bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM
+aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n
+ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m
+6MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u
+cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j
+YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3
+oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh
++Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ
+yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2
+MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv
+x5MBl/I2kBCHeH4=
+=hojs
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyKeyNotFoundException_both()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyKeyNotFoundException_both()
+    {
+        // was encrypted and signed with missing-key@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA82wFXJyxZnNEAgA0oz13vLInSM0GlhLyIQ5fRXlttY6jOO6xgUH3MhCqExN
+KWLBp9VE+iAzdsnF8hjP+u48qNjYj7Jvyiu8vf1SD9ScYoEiKar0EhZVLfCxX7PC
+4ZWCSEWD5h5nBSabdL00f3vL//GrQtMAwcKP4p+pEyxTEoSg7xp10+F0JqnhlIqh
+vsOeP4vAeYi1v7x0UyoNxzHbfGb3gjwNaWEixBPMekoEnZ8SOORL5yrOctOjcFxz
+hKQFIcJv5vG/Ozs6Wm5q+uvzkZDc2X2dOnb1SpCP5cxNC0g37CiwPIL8ArBcu+yP
+5HSC8YhyyVcQTuIdb0a9t/IK0HNfEOF5gCBCQ462Xwf/X3PQgKvvK76DQ8xvukB8
+6yKwaHv2K8NWFyTuPppiiRztVI13zPt/Jjw/YPNE/qUzONiggqWM0tGtVkbNRzic
+dMEaAfwmZSix0alMPnDuVNyq9AnCUEjkXKTByWDL4pejvB541dA+rtU1D8pV1/8X
+P+oQ+j1EnJitYSTdsnD4YC88/q2RnQTmibmyMclVVk3el6OvZN0Gj0Y2bd9c4LC+
+1reFYZHrX0FcsGIVuHEK/VikTqoWhFOTYUFXFGSE/AGvotfHj2QG3sd297IaSbVi
+C1LwWGvpdZ2yw4RV4Zgrqvg8WOL9maj/mX8aE9/gzs9XH2vuucDBOC0RrQPsM6wb
+ANKoAdExlp+92b69YSNjP2bRQFjN3gFKaGfBm4ULUhRTFnlfBGIIa+2KHUNB7dYk
+obUon363/o/8wdmlXewIwPLK8nQsYXhAyxJcf9o90tqv1L83ZMMLU7FqBkUCmT4a
+9EPXbxnaeO3sa8ZuGm0ilGuIFsK24pBOXtYESZ4ix6y7PZOXCJDun4+dFKcfMG+0
+t8TnSlDaIKEuve9kUGwmO8Z3LsYJEsRCsHyN
+=YNhC
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyKeyNotFoundVerifyIgnoreErrors()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyKeyNotFoundIgnoreVerifyErrors()
+    {
+        $signature = new Crypt_GPG_Signature();
+        $signature->setKeyId('8E3D36B1EA5AC75E');
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // was encrypted with first-keypair@example.com, signed with
+        // missing-key@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1
+
+hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3
+raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb
+y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ
+i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr
+jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ
+akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa
+uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn
+T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM
+Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp
+bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM
+aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n
+ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m
+6MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u
+cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j
+YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3
+oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh
++Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ
+yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2
+MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv
+x5MBl/I2kBCHeH4=
+=hojs
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg = new Crypt_GPG(array_merge(array('ignoreVerifyKeyErrors' => true) + $this->getOptions()));
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedData, true);
+
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyNoDataException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyNoDataException_invalid()
+    {
+        $encryptedData = 'Invalid OpenPGP data.';
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyNoDataException_empty()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyNoDataException_empty()
+    {
+        $encryptedData = '';
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyBadPassphraseException_missing()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyBadPassphraseException_missing()
+    {
+        // encrypted with first-keypair@example.com, signed with
+        // first-keypair@example.com
+        // {{{ encrypted data no passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
+8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
+yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
+s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
+z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
+wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
+7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
+YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
+FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
+mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
+Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
+u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
+NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
+lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
+0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
+=pycC
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyBadPassphraseException_bad()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptVerifyBadPassphraseException_bad()
+    {
+        // encrypted with first-keypair@example.com, signed with
+        // first-keypair@example.com
+        // {{{ encrypted data no passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
+8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
+yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
+s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
+z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
+wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
+7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
+YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
+FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
+mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
+Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
+u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
+NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
+lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
+0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
+=pycC
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'incorrect');
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyDual()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyDual()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('TAsI7RYUgZAud0wMZu3Iab3bZXo');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258955651);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with both first-keypair@example.com and
+        // second-keypair@example.com, signed with first-keypair@example.com
+        // {{{ dual encrypted, signed data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgA2lVokiF7FeQvT0EjgH/X2mXNbz8ukKM7WdIAsIFumg1a
+Skfsqn1plAHs3f3OhY16tBb1WW4J8WXEt6g3yHls92XpRUgRTUjVCr4HIvMwSB3A
+V/ZQdGs3NK3wh0rMu6q/Ski10dEwP7SUE+w19AmiCQfmKYLUJmCgPLmVm4IapAad
+lIpNalUHzXhHuuIzKut9H0n6+p0jUPW2JehFFGud66MS5PaGbDPZS2lKiPjytSzl
+pYipuglregaaMR5KsBYxP4A6MnMaRaZriTeItROJ0PTBMaq93+IyrnwulqEsWk6t
+8ahRM4FmC+U/Z9tgWxTEKU28zthjxKXW5JOceGxeBQgAoxRAhd75Ok406YG4VucC
+rxLSLIKIt0TAlbTWncJq9qhLA86+RL4oqUYfDjq9o9lrfkPQO3xfHam/43j2yaF3
+HeJwSDwU0V4YZ6R9ZVdHMYw7w7yynn2HmNesDUWRfI7IRwMFtgKGvv6qpdUOYmWN
+MhQ+HxnwMgvHNaz6TRYpQzVvtpB6q9J3/xCM3+uKxDaJLbJux50s6FpnCRnLpGWs
+1Tj8l9BSMlAGtP6dMR3MysZS/UnXwdTmDFR9ARS+HxsP89I95UAKLWaouShoo9dX
+QIs0pLkQs+CWpjPVAp8TT0Vj1juThk4bJarti/BaZOyzUAOrleDWOO8VVsuM1Bw2
+xIUCDgOy9U5HV+IkUBAIANU8DKkvHNzkx68XvxXXVsBsWTGNznrNGUjqSfhyS9pW
+lRnq7qB2c2UgMvMTnMWyogQ/gKEotdeqKCXdMLBkataB1xkMbCvUZzdj2A/OPtDD
+xT7ogqn82YaEjlfEqEbqBi1lvq2tuC/YsGti0c6zDUFoZax6QWL+NU3eCY6ZxBSx
+NuZ4hiBJqPeHVP92SCnsC2BwqUy7W0rUuKnXo3VM1syd98TZjdM6SqBVQ61YX3u2
+rS1YiphYd2WeNU/bSZ79bHMMPt3joQ+nCGKvGSIlCVxAy4EPWDb2KFw0yUmXUub1
+tLnrKAOdufWC780LuhgINLb1PSmzogRmvk4ih687h9wH/0hx4olXvkUHZAcpnMHT
+zGK8NQeoxfSmcJrYNa1TpQ8FjLad7eycnoIASC4qS7IsJ0xzedWd2eqLdc+9qIiv
+68gW2MjZOqQ5PvcZk1eqOVUNH8Ua8Wfv82ljk1VE0L9zzrS8nGLq5prjaK400Vwh
+MVh129jyjkpgGZhIHC4cNGBQl1zKDw9WWd1Rk92rpmsvb7JZVNDg0DjW3hrwc7v2
+WbGqEXG5Sown6J1gX4wKIpn9roOE9ZSu1hvugPc28IZIne4rL05Pd4qVnp87SiUh
+wHs82nXGhqcscZx2NiT2F///6j97+ccd+619iabKkpfwGunQZHfxit+7bfHuX+5O
+tFHSqQEsRi3gNrRlMRDnPjLHXjR+x80anNOwxBfZP1qjdTsFucqmZ57KUdIpUGmi
+uRgBZhuVRz8ryTcw5/nACkeKLkxOJLHGgNDilJtNO8tv+BbQDRZzsNYTM7ZNcAo4
+JqkWrMb43BTbAbdgTyEkWhqw6cFQEePYqXcbeDh3c77U5joGZW+iPZQlJbBCMC6e
+KBH+5iH8NzPpP6yZq5e5p1ZOkb2PY3EXtL8aemU=
+=S/2J
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyDualOnePassphrase()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyDualOnePassphrase()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('3OJnX+PqHI0YUCeFxICCxhPHY1Q');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258955916);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with both first-keypair@example.com and
+        // no-passhprase@example.com, signed with first-keypair@example.com
+        // {{{ dual encrypted, signed data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgA7zHd9KH/C2GCM9H7pdMS76PXGfmhGPyQAtokBQgF8G1/
+orldCnTUnxmZejbOwYhYVEh5zlnYshlCpUSsGBw+sH7XiC8eorCD0YJj5NDBp8W6
+VtvGkMqqG9tDJk6TfKornFl+H7xpiwXox5T/swnpJcJ6qaTXBtLb7HViiwTTu5Zk
+QbWqSvIOigIkiuTnv898/eeEIh9gg6ScRVZOyZ7P2usDaOWqVVNJmkaLIaWxOYck
+Go3hnYAhkfjpMcgAMkqtXPWIS8OrfY8wOXxXNA4EjvrHs+5/yHbZmj/5bBA9CuGJ
+UctQqF9ZtZsagSpK0WTJCt4RkX3jKqK9tJVQzBuKZgf/Up3Zi6Lfg6iINm4qsd1h
+Dusuuxw0vgGoMc6P7QOMFmeSs3g/yYQKaHomWqEVg0LpC2FHOqceqZRZJd4XMcsz
+uCF95lx7Tm1ozgEhBgQNSQVoAA5/MYXlKo3YQGEIyU9Gx4f2v/8XV3umYXjGfJY9
+adBHLIvPFeeze1/f11ztZsgLr3DBP01/O6qLi91dwsqpzQXzjurVYIHJdCD+JviZ
+2CjwkcpUTHx5vXNiobMcBjtogjP7d4W8DJ0La5+WVujV0nxHiE9mEXuct8TajCY6
+/40UIdtHEPWc08ccXXjQaFKbJxYGDMOJzQ8LPdHqa3RubmMADqzH4W3/SSmRsibd
+4YUCDgMkvzgHAMFLTxAH/R3ryj2BUP6C/aYfgGqi+FOVoHVR5kiz6Z2nBEKqntwZ
+njdKD+pvuw9fxaNhNNZy3UlKnIdonNb/A3upEeR81opP+HWCgXUlcgucQ7VXiUPd
+mnQAR+cTrFgTXf+B54VHwDED5RVDm4/e29casiNyULm6xWFYqfJMGBvEGrflq1BW
+QSYlpc0ijqkER+VNy49Dy/qY1TRUBZ84+RmL2L/18zQbdekMoLUDxJOEoo0C65ER
+5ReLlFN2nI0MC8O5ZU8PfjDXXQ7qnQhz/2kxorNiQl654V7ZsEWkVLF9yejZXSzU
+ynWANJdCnWLMjOnrQPm1+b2Yi8pcgtpIPsBdTIHn4fAH/iW0Uxltx9ZrV7kvrDDj
+Izc4/ocn3Z0c/47Rv62MTYcxVYzFdP+WxisMI2LV88g1Zu9rOKR1k7UkNGNlfklS
+5CSApTnm3MC9/w54dacPohZ7SrQlTSHJxfRINH7H3DOuaH9awf+ntwUks73mXjT5
+ikSJ2D05Kbf8++jLhRRKLPZS8bOmSw2KTaCbtk7LX4pEIu9d6kig6g8Wj3h9dlQs
+QXCKL14/8cSGrxXXWHOuL9abnxZTwenbn5B5FqBPoiRKqSFToiLd/pBWjG/aieju
+Rm+Uyyddl+ISJUnv0AAiOxfifJmTdUsT5LZLkYG4CUyX2T3JiZ2L4msF4S3U70wp
+PtbSqAG3xVRFlZY2jLeW8btez7XkzB9fhvVd1Hee6EXRnF5/BcLkqy8sYvx1MHkT
+eMzttOs1NRrjXy4+zUqo//59gQ46zwYd0NA/Ga6pl1kn8+xM76DCcI4LhdZN75rR
+ZUcyEqBKX9RNefMD7cR6kYoljGfnT3Mjd+0eTdF/Glk0ElVjbMtQclG0o/7wlI7m
++b2E6/e0qZedOCq48+mIRv0tjRuoFiydM88aGg==
+=IgJ0
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // decrypt with no passphrase
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptAndVerifyDualNoPassphraseKeyMissing()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptAndVerifyDualNoPassphraseKeyMissing()
+    {
+        // encrypted with both first-keypair@example.com and
+        // second-keypair@example.com
+        // {{{ dual encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi
+AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b
+KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW
+EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI
+fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM
+Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF
+hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo
+7tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4
+sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6
+cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT
+bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa
+aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc
+2jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy
+iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO
+mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0
+t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt
+fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg
+O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2
+q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP
+UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe
+oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV
+qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0
+s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY
+gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw
+=QYjj
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // #21148: Make sure that proper exception is thrown
+        // when decrypting without specyfying a passphrase
+
+        // in this case we remove one of private keys to make
+        // sure proper exception is thrown also in this case
+        $this->gpg->deletePrivateKey('first-keypair@example.com');
+
+        $this->gpg->decryptAndVerify($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyDualSignatories()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyDualSignatories()
+    {
+        // {{{ signature1
+        $signature1 = new Crypt_GPG_Signature();
+        $signature1->setId('7PujVkx4qk28IejcD6BirrwBmRE');
+        $signature1->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature1->setKeyId('C097D9EC94C06363');
+        $signature1->setCreationDate(1258956025);
+        $signature1->setExpirationDate(0);
+        $signature1->setValid(true);
+
+        $userId1 = new Crypt_GPG_UserId();
+        $userId1->setName('First Keypair Test Key');
+        $userId1->setComment('do not encrypt important data with this key');
+        $userId1->setEmail('first-keypair@example.com');
+        $signature1->setUserId($userId1);
+        // }}}
+        // {{{ signature2
+        $signature2 = new Crypt_GPG_Signature();
+        $signature2->setId('AhrDdkdcBsEsOSQOYENhl5C7auc');
+        $signature2->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $signature2->setKeyId('03CC890AFA1DAD4B');
+        $signature2->setCreationDate(1258956025);
+        $signature2->setExpirationDate(0);
+        $signature2->setValid(true);
+
+        $userId2 = new Crypt_GPG_UserId();
+        $userId2->setName('Second Keypair Test Key');
+        $userId2->setComment('do not encrypt important data with this key');
+        $userId2->setEmail('second-keypair@example.com');
+        $signature2->setUserId($userId2);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature1, $signature2)
+        );
+
+        // encrypted with first-keypair@example.com and signed with
+        // first-keypair@example.com and second-keypair@example.com
+        // {{{ encrypted, dual signed data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgAzllqH/z2ThJcXteCxPJu97EmMpqdipbcSUAjGZJ5hQFe
+YlKbrxL30W6VYgZIPqP5FubZkI8WHWqDZwbtphk5l+o8nfyNV4el/JHHEmf/mzIM
+UmBXJFVa6g9CmS/SdhYhO/ovMeBsNVA1+Er+Cdyh9sTpX89I3zlehgwcXtv/di6W
+fjzeg5Na/39KfYWEyXPB5EUkWG4hmnGo63GPUEsxfNXbKDafUtTwOFop+1+wMVyA
+kJbOEaaiTSzvbpa+ruRisv34a6vX8u6QGqPSZ43vgmKeWfPEBS8p7bdRFGECLNvP
+gK4tIwlBI0o13JJ/lnjL6dR2f7qls/0dxBGxhjFpjAf/bn5d8r7e2N1yJqh1C5T0
+/n/ngN1bHDsQhrAPMJfJre7qJxZEiHa8dfagdDU6I/EC4w1ouUYKWrzf9sPKTxs+
+QosiqrGKYUO1V46EzRXc72PZBKf5CZBBvRZv3GzzcVtroViiIshyAp3TBPk2GC+N
+ilmEm72CWgQHKqg4vX1hbTCbOEu/YDmjF9Vb9a/zT5RAKDjBrcc9tkPdVMfDfI2Y
+Ly6CvL2DSvBUNbAShl2TXdTdylYbopyiFhOBvJoeidFVwIFX303nFUBMUfbCT6WK
+MGZGzXrNZlRyKfH9UCj+5pxom2TMpu+URfvXtByUGfNst+ZRi+ADOnbc51canwWc
+M9LAKgG6SF2OhrDTTe+KASz3dFbpD4xnczl+686GGT76W55YKQNDff72bhx8lBnP
+XiM+CsWGPLZdoOCQU+SEWD7lJ1I6fB+l/oFWC2PVlDjrCS1Nn/L9i5p+EqNzcUVB
+JR62EaLPsOFOfNeHhltuz2aYkvQT4sDPeKkpBKJDp2ejMy3V9ZXia1D2ZTCfMp+J
+GEu2SS68qlZV12gpSwY8BpS/nirx5aUQ9VhjlSN3GHF/r6j91VsHJhmU+nmWPWaF
+mHfMGHS5sw6+gz3SyW6b4TlUnnx412nhFinanxBlwkuAcukgL8k+OesoDX2a1Q==
+=TW+z
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifySignedOnly()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifySignedOnly()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('LS9EdhGLaEUllGk3Snc0Bk+Cn3E');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258956761);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // signed with first-keypair@example.com
+        // {{{ signed data
+        $signedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+owGbwMvMwCR4YPrNN1MOJCcznlZMYvDmUr/pkZqTk6+j4JiTmZyqqOCen5+SVJmq
+o+CUn6TY4cbCIMjEwMbKBFLIwMUpANNttphhwWm3a/VsLcc+u0x4/Xtyuk/Xiqd3
+ZzMsuHZrvkPCHgUTgcXFLt6GVRlPYvT5AQ==
+=ehgC
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $results = $this->gpg->decryptAndVerify($signedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFirstSubKey()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifyFirstSubKey()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('YUeHL9fEAK4hMokvXsNgUP5vaJ8');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1267228319);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with first subkey (ELG-E) of multiple-subkeys@example.com,
+        // signed with first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQEMAykh4NP/Ww9KAQgAhB2Ww2jNhy9ISQ/+S52eROzbN8ij65GoL9tTHK5TZp82
+mv+ieGwobe5PGYdBEvQdsSrKyF3x25oaEyjaOa+39DtmF82OZKZ3tIO3EJ1qvn8q
+SHxwiKYa4MOgwER9pT7i/YZOZuIdII/NeuVuGxbsa5qdISltKkE7WS7yWStcDJi1
+goaPx3G1cZIVnTgSncK1YE4j2TZXBxI/zuuuH0pbZk7rK+K9zIeyYD1YZFagrjJh
+REN5QbnT1v+1HXno1WRp4Obo072i3FjF505U1XLQ5p2/d55m73jfBJoqpb2NExdU
+KimXnQZ+8/8ddzL3ZP4+g982dmLFvl2/h7KGtPOMbdKoAeMQYVolMDoQp6+nyQHP
+CgpeFJY5+VnxNq1wEgJgXTo79xohN59wwad1ltcUGAVC49RMHbX+xBjR/HPCG9yt
+QTwMes514uPYbNL6cGoKm7dt/zQL8YsjvfswGE06bj/rU3JCTDnR+iOUDHzUMDEn
+jH7Vbs+9D1E9t5bSJs/8e7rzhZKF1AhunUdDmc4vPPJMV8xKF+o3h3nKQ6wEoOMz
+f6XGFW8cvNAl
+=vSGT
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifySecondSubKey()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifySecondSubKey()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('ZLZFDxxO+zdCEklUu6eppBCPCsA');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1267229043);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => array($signature)
+        );
+
+        // encrypted with second subkey (RSA) of multiple-subkeys@example.com,
+        // signed with first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQEMAykh4NP/Ww9KAQgAs1xviSlaTTGXWNzT43giUSf7SnYoeoyYqZt/eo7c9eHu
+sLGdhhpQeUiU5vW6UsOvs3QLx3hR9wYunUOKmDJmrrtVglsZIjuHU7oYlveozYwG
+wlHNbesQlWyMNSQPDeGWAQAnOUU2jv/9nb93SLYlkDKr1qjn9qjZ4Kl2q1Yi4PSu
+LaqI3r1LdJbFmEB6vQ8o6GiIpaFaZapK6vloPoq5xbaALAfAiSg58+IwV/Mn190L
+T0tmFCUuTm/Px8fv5xe+mPW2pMUovhJhBrhBopEcWNHpxuNbxwac1T54COZxjC8W
+L0XpYW7c3XVdO6VqS4pSnz+zo5EYcU2Sk6mfpN5ki9KoAdPZ4ICMe0OWIjMxgApI
+AVHaKowZ6+xSW8vLRzWjJTZrlEoMjwJSOJwCsMcsu6MwJOFcVEl4Mc3TiAMsUHWf
+6f/pHb7W2Am12CfJaaU0+nDQrlKOw5DfQG5YEG/LrpjXGugVWMQH/31MMKawSAP3
+QgdXe417ZeMtsHVaz/W1Za5ZpRpcwoT5N31LfNV+SoIpajhmtr79aeg8d6OH8H+l
+7kLEDVlh9DP0
+=I21n
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
+        $results = $this->gpg->decryptAndVerify($encryptedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifySignedOnlyBadSignature()
+
+    /**
+     * @group string
+     */
+    public function testDecryptVerifySignedOnlyBadSignature()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setValid(false);
+        $signature->setKeyId('C097D9EC94C06363');
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedResults = array(
+            'data'       => "Hello, Bob! Goodbye, Alice!\n",
+            'signatures' => array($signature)
+        );
+
+        // {{{ clearsigned data
+        $clearsignedData = <<<TEXT
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Hello, Bob! Goodbye, Alice!
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFI0vkCwJfZ7JTAY2MRAgzTAKCRecYZsCS+PE46Fa2QLTEP8XGLwwCfQEAL
+qO+KlKcldtYdMZH9AA+KOLQ=
+=EO2G
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $results = $this->gpg->decryptAndVerify($clearsignedData);
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFile()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFile()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('kVwy2yYB0TlXyGd9FUvVYp5jCoI');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258220197);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults    = array(
+            'data'       => null,
+            'signatures' => array($signature)
+        );
+
+        $inputFilename  = $this->getDataFilename('testDecryptVerifyFile.asc');
+        $outputFilename = $this->getTempFilename('testDecryptVerifyFile.plain');
+
+        // file is encrypted with first-keypair@example.com
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileToString()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileToString()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('GTvYFmQ5yfMM/UOffkYCx21Se2M');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258221035);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedSignatures = array($signature);
+        $expectedResults    = array(
+            'data'       => 'Hello, Alice! Goodbye, Bob!',
+            'signatures' => $expectedSignatures
+        );
+
+        $inputFilename  = $this->getDataFilename(
+            'testDecryptVerifyFileToString.asc'
+        );
+
+        // file is encrypted with first-keypair@example.com
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($inputFilename);
+
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileNoPassphrase()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileNoPassphrase()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('unMY9l/f9sFaMvMV0H1ZuNJRY6Q');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258220226);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults    = array(
+            'data'       => null,
+            'signatures' => array($signature)
+        );
+
+        $inputFilename  = $this->getDataFilename(
+            'testDecryptVerifyFileNoPassphrase.asc'
+        );
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileNoPassphrase.plain'
+        );
+
+        // file is encrypted with no-passphrase@example.com
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileFileException_input()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testDecryptVerifyFileFileException_input()
+    {
+        // input file does not exist
+        $inputFilename = $this->getDataFilename(
+            'testDecryptVerifyFileFileException_input.asc'
+        );
+
+        $this->gpg->decryptAndVerifyFile($inputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileFileException_output()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testDecryptVerifyFileFileException_output()
+    {
+        // input file is encrypted with first-keypair@example.com
+        // output file does not exist
+        $inputFilename  = $this->getDataFilename('testDecryptVerifyFile.asc');
+        $outputFilename = './non-existent' .
+            '/testDecryptVerifyFileFileException_output.plain';
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileKeyNotFoundException_decrypt()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group file
+     */
+    public function testDecryptVerifyFileKeyNotFoundException_decrypt()
+    {
+        // file is encrypted with missing-key@example.com, not signed
+        $inputFilename = $this->getDataFilename(
+            'testDecryptFileKeyNotFoundException.asc'
+        );
+
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileKeyNotFoundException.plain'
+        );
+
+        $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileDual()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileDual()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('7TYk0hpio90QZHHHb4UtgCWAEq4');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258220362);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults    = array(
+            'data'       => null,
+            'signatures' => array($signature)
+        );
+
+        $inputFilename  = $this->getDataFilename(
+            'testDecryptVerifyFileDual.asc'
+        );
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileDual.plain'
+        );
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileDualSignatories()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileDualSignatories()
+    {
+        // {{{ signature1
+        $signature1 = new Crypt_GPG_Signature();
+        $signature1->setId('MF8xqL325bs7KiokMHTnHirF4go');
+        $signature1->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $signature1->setKeyId('03CC890AFA1DAD4B');
+        $signature1->setCreationDate(1258220269);
+        $signature1->setExpirationDate(0);
+        $signature1->setValid(true);
+
+        $userId1 = new Crypt_GPG_UserId();
+        $userId1->setName('Second Keypair Test Key');
+        $userId1->setComment('do not encrypt important data with this key');
+        $userId1->setEmail('second-keypair@example.com');
+        $signature1->setUserId($userId1);
+        // }}}
+        // {{{ signature2
+        $signature2 = new Crypt_GPG_Signature();
+        $signature2->setId('d0q7jibZpJSLpGAhNWhpSkZZeUg');
+        $signature2->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature2->setKeyId('C097D9EC94C06363');
+        $signature2->setCreationDate(1258220269);
+        $signature2->setExpirationDate(0);
+        $signature2->setValid(true);
+
+        $userId2 = new Crypt_GPG_UserId();
+        $userId2->setName('First Keypair Test Key');
+        $userId2->setComment('do not encrypt important data with this key');
+        $userId2->setEmail('first-keypair@example.com');
+        $signature2->setUserId($userId2);
+        // }}}
+
+        $expectedMd5Sum  = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults = array(
+            'data'       => null,
+            'signatures' => array($signature1, $signature2)
+        );
+
+        $inputFilename  = $this->getDataFilename(
+            'testDecryptVerifyFileDualSignatories.asc'
+        );
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileDualSignatories.plain'
+        );
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileDualOnePassphrase()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileDualOnePassphrase()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('kgyLjfFigxOrliyc8XlS6NaLJuw');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1258220334);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults    = array(
+            'data'       => null,
+            'signatures' => array($signature)
+        );
+
+        $inputFilename  = $this->getDataFilename(
+            'testDecryptVerifyFileDualOnePassphrase.asc'
+        );
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileDualOnePassphrase.plain'
+        );
+
+        // decrypt with no-passphrase
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+        $this->gpg->clearDecryptKeys();
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileNoDataException()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group file
+     */
+    public function testDecryptVerifyFileNoDataException()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+        $this->gpg->decryptAndVerifyFile($filename);
+    }
+
+    // }}}
+    // {{{ testDecryptVerifyFileSignedOnly()
+
+    /**
+     * @group file
+     */
+    public function testDecryptVerifyFileSignedOnly()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('vctnI/HnsRYmqcVwCJcJhS60lKU');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221960707);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+        $expectedResults    = array(
+            'data'       => null,
+            'signatures' => array($signature)
+        );
+
+        $inputFilename = $this->getDataFilename(
+            'testVerifyFileNormalSignedData.asc'
+        );
+
+        $outputFilename = $this->getTempFilename(
+            'testDecryptVerifyFileSignedData.plain'
+        );
+
+        $results = $this->gpg->decryptAndVerifyFile(
+            $inputFilename,
+            $outputFilename
+        );
+
+        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/DecryptTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,777 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Decryption tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit DecryptTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2009 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests decryption abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class DecryptTestCase extends Crypt_GPG_TestCase
+{
+    // string
+    // {{{ testDecrypt()
+
+    /**
+     * @group string
+     */
+    public function testDecrypt()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB
+oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc
+OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+
+K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ
+LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37
+WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv
+lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd
+hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO
+iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6
+UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg
+k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd
+ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq
+JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU=
+=sjPP
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptNoPassphrase()
+
+    /**
+     * @group string
+     */
+    public function testDecryptNoPassphrase()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with no-passphrase@example.com
+        // {{{ encrypted data no passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOAyS/OAcAwUtPEAf/cBqf/6najldCQzu5NNmuoyuujm2xpFESS4tljGhC7Hok
+gqiUnknDJMwNjb80OhsHIQuWjUqaryktKH0Y+Q5s+oDwRQKVKxqeF8v4hYRq8tXc
+a5gffr6lALBhpOHLcWM/oHQmPJgYAkdLDF1hoOwqlWGk5WklzjrRaJF2DwvvpvpL
+8yEU1fuO9t7cnD27L466cGMrK473NdiO/Bsml4CL9biNzth5yMia6HmgRQ1VDPQ6
+Q+plGSjTpCaXtq9fyK1Q+d9x/SeRqEVgo/R5n2w3YVZZxjNFPZ0wzMW0YtT7hTBc
+AKPt5IEwVFlFkOUT+1Xq/wj5fOFzgV+n1EFMJyTaOgf9HSAm0/L2lymIkK0qEZZK
+o0D0KBPQZrs47zj7qGnrmXlxkBydlwrCL6fULBVjK12ej4tdsYVROXfgkKohkEh4
+OxEAX9OsQuf/pSJU6TIYF39TcfKB0FqbmsD6F0DN1hZ5wVdXl+8q92MyZu5a44zD
+4fwKVlie+aENjiM0ePrDnFOK70KJVWoBlCXgouc3D6E7Rz4hC19WnWadOZF+2sHm
+s7kI5xlIivsftziItjEqqQt74RYpo+TLHTwE3cKc9rXGgtEyD8xykugzHEwetbfd
+fMdw+PvHv6jxBPdfz3/Xwe6kgqs1SrlOhQ/6tAf2uRD2C4LckXkc9Y4oC2T4iNlN
+FNJWAepBEH0MkQvukbwwR9SQw2oTK2YyWFhLEFXcS61NCQP+du6IPLBNpeE1m+Mc
+7lYaqPAkuwDq4wbJLEEVUyPNBnGRGD/al4cMowcGowGUEtn1kXR8lF4=
+=aHiA
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testDecryptKeyNotFoundException()
+    {
+        // was encrypted with missing-key@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA0l79YQdiRYDEAgAk66FL4HUw7X5PPL4wjDbt4Q68GRAeIdkQutLuGvnlCJ0
++LHt050deDhQd6FHmfT5K6Hp3eWApl87L5p0eQZhdaSguLZZxykFfhKENWua2YT4
+Kb+EpOsZA3R8UTT9H/HHJ/K5DUl/Zyog+G7ddrKP7CMa9wyYxD6DOJ12b2Yn1cuA
+u9am9eKmFZEwvoInF0WPdXeUyhMPY4QU43OUoIbF2fXjAq+WczqLbn0dDKH8CTqD
+hVSFRxyqia+w5nCSnzzyAcICYFOKUWzn6EiBW95gfJNvi6KzMXI7XvaSHhEkYXKA
+99WPLrHb95yRHjutXays+LDW00mjBttx40FhcQKdFgf/X8EhPdY+4F8hKctZ42FN
+bw57qxV7dbalA4jC7lOaqcfvMa/y/pR3ewPN7CM5GWqXo0xrpB9uYlC+f3L2tQbI
+5J/rYkCjQXZvOrpKaSCdp/7fhPp5NiFCy+VHakUfIou5O4KDm6h5lvFdFZtIFR9N
++9rL/C2WjBj6evbiBuGWjR9CrwvI57zYTjJgVSggwozwKwnse8R/8gUDyFLb26Dh
+S/VKGm36N48kIuJ4UDUubLSJgwnU/Jiapx3M13GLsb/k+mjllwcc6/XlC0YN/7w4
+ZvemnGWt6/ivt8NhRM7pRY4joJBtJNrAUsoijmscdWhhqnMqx8liUeEfSlrPStk0
+INJWAaFpzdpNupyNLJI0pO0SAXX28yeNaDkJwzDZf8kU4U5T1zT+BabHVixmCB6/
+CNl9/GMhmvFD5un2+hMDVfFjZ2FHSH5QgMF50Ws10+jpXan7PTDdNMw=
+=Qe7y
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptNoDataException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testDecryptNoDataException_invalid()
+    {
+        $encryptedData = 'Invalid OpenPGP data.';
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptNoDataException_empty()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testDecryptNoDataException_empty()
+    {
+        $encryptedData = '';
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptBadPassphraseException_missing()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptBadPassphraseException_missing()
+    {
+        // encrypted with first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB
+oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc
+OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+
+K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ
+LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37
+WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv
+lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd
+hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO
+iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6
+UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg
+k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd
+ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq
+JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU=
+=sjPP
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptBadPassphraseException_bad()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptBadPassphraseException_bad()
+    {
+        // encrypted with first-keypair@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB
+oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc
+OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+
+K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ
+LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37
+WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv
+lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd
+hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO
+iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6
+UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg
+k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd
+ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq
+JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU=
+=sjPP
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'incorrect');
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptDual()
+
+    /**
+     * @group string
+     */
+    public function testDecryptDual()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with both first-keypair@example.com and
+        // second-keypair@example.com
+        // {{{ dual encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi
+AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b
+KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW
+EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI
+fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM
+Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF
+hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo
+7tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4
+sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6
+cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT
+bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa
+aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc
+2jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy
+iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO
+mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0
+t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt
+fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg
+O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2
+q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP
+UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe
+oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV
+qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0
+s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY
+gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw
+=QYjj
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptDualOnePassphrase()
+
+    /**
+     * @group string
+     */
+    public function testDecryptDualOnePassphrase()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with both first-keypair@example.com and
+        // no-passphrase@example.com
+        // {{{ dual encrypted data one passphrase
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgAkvANavo5eEeJ/C0njcciAh/ELcgqynhwM4R3texCA9HF
+043Z5kd4nMr2NUFBFG+UAzFSoB2zO5FZWsESMi71aIgzjX+CG754vw4j1I6Elsa8
+An1Tldb4vPJqEWdp9ynu/i90wqYUc6DNp8MLilTfFk16GdPv2L8wjOUFlJqV3OdA
+LJ68ppg3Qr8H0R81HSLPkSMc+o6GpljVShcejLeG14EpoW16ryZHXQk9T9bZzj1L
+VQT/t8jgj5h2ocEtUCXixNBpFoRdMGMZB4SWXH4Aw3GiSCNSz/xQOgOSu9c/FdVD
+WE1KCds4DGo5Za6rpDHxBCa8OhUNfhFiOAIcffz4MwgA07vc9jiAU7kGaR86AQuu
+UlzYe0ZZd6hALVxUAfnBF2aG5Jjhm3muwOEu7e3zk3hd/xVPzT5BQ+1/mt+vlS8E
+Ffjr13q/nKdoGTW7+orFjcwOmhpsJJcrTU+6TynkpmjNLyHhZix/roNbEPij7JJu
+StO+vbyu22xWc2mp56AbhO8MLwBC6Vxc2h2ZJXjXcaCLkntnOEPxx653sC55KqHm
+6gY4Ycwh+cnF9z+dWZBPak/LlHP4pmrSaeIc+8pS9Q6zFdVtrppzjTPCH0/FPxA2
+QTwBMXrClF8iYNfvJ8a+Se3ZqzmPbpvbbdtTGm49Bo4FNrdHVkC+MMgBEQiJKkbq
+/4UCDgMkvzgHAMFLTxAH/3a9Et2b3u61MMd0iag7haurrRsMwd6E9VD2SC6gbscF
+efInr202g78bbyf0AnISnWBjZC8lfmiyoe6Ic7NO5HGzddJ2UPyeiA9ggNPlARlZ
+OQngAaFzvP8NyMhYMIz5tUxxhYA9U8yjgEuhr/lq+olZwk6iiSaD3lP0q715XkLC
+uVJ6uxZoBjRaKsVnNLcXvXY6C0IcrGzSr6wKvJm4kQ3RjahRjJvUJG8yeKtbUmHz
+KBeorg4HQADXcK5Bcp9NCMatds1jvR/Zf8DakAO4G1T8Yb09xEQCVFqFIk7g1NDB
+T/vHtAdYolvyeS7wlF1TMFuYfuMOi0kVdlbx/PlhpN4H/Recs7EMcl/9gUwUktOl
+6xyDvA36QvO9RN0D504Ck+ZZjMNFId6fdU/ngSjq9AAteLRLUFgapbMTN2calf1J
+0ehPzMINegvnVB2dR+xcc67QpxmR5uIA2jK1fSkhvOohE7UxE7xqp4SIMw6E92zy
+ZvmhQVIqN6/s4k8KxrZKe/uhtDj963m7rsdR7v9wQsc1jJ/f+KZxy73r2Oz7BdTf
+cpKaMKY/CHiy0NQ3jPrY3oVOIEzu15q4raOhIT5FQoH0pWgmBID3aQsEMjAdeCTy
+JGHa4ZhQn9LSI+1XQmT3h8tWNYtAm9u3eqFsSm7ENMj3fY2Bd9wKlwTuTzsNhsdw
+hvHSVgFkfzy/xAiLNPzXydzWJ3bm6ZetguDA/lNgfSaNVR4zSiPSbmV9ipJtrPpB
+S6stCnUnw33F2IUOsEufvLFfEWtXY8qbBCULYC+no3GOwJhMyJQEI+xw
+=1ZwO
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // decrypt with no passphrase
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptDualNoPassphraseKeyMissing()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testDecryptDualNoPassphraseKeyMissing()
+    {
+        // encrypted with both first-keypair@example.com and
+        // second-keypair@example.com
+        // {{{ dual encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi
+AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b
+KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW
+EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI
+fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM
+Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF
+hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo
+7tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4
+sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6
+cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT
+bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa
+aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc
+2jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy
+iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO
+mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0
+t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt
+fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg
+O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2
+q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP
+UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe
+oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV
+qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0
+s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY
+gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw
+=QYjj
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        // #21148: Make sure that proper exception is thrown
+        // when decrypting without specyfying a passphrase
+
+        // in this case we remove one of private keys to make
+        // sure proper exception is thrown also in this case
+        $this->gpg->deletePrivateKey('first-keypair@example.com');
+
+        $this->gpg->decrypt($encryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptSignedData()
+
+    /**
+     * @group string
+     */
+    public function testDecryptSignedData()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // signed with first-keypair@example.com
+        // {{{ signed data
+        $signedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+owGbwMvMwCR4YPrNN1MOJCczrjFOEsrLL8pNzNEtzkzPS03RTUksSfS49JPJIzUn
+J19HwTEnMzlVUcE9Pz8lqTJVR8EpP0mxw56ZlQGkBmaMIJO9GsOCo2L3pk5y2DNT
+yiFKb0X03YSJqscaGRb0BKjZ3P+6SvjG160/WOa9vpey4QUDAA==
+=wtCB
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $decryptedData = $this->gpg->decrypt($signedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptFirstSubKey()
+
+    /**
+     * @group string
+     */
+    public function testDecryptFirstSubKey()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with first subkey (ELG-E) of multiple-subkeys@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA2+UGsw2JFPaEAf/TQ5We9V090WikWJTnpLwIZVgJSU1aCcG6R9h3wBOPFHi
+RLQ4jBSL8EvXk4VwVJ0tuqpcB10+W1OugWbHTOxWnpbioEaUJk8jRu3MZvnyJe/d
+3FcLlqXE0SocZR1Okxbp64tDvBzs4jjniQYfoMEM1j/VVlkQ02nufOLy6uvxPZjf
+KkSeCVSy0HIaT0U5e3R28fT+dYN8i2RhT8AckjWeovJAMbHxCCsKdinI45u7O1QA
+t9zZxMBaUvo/ikLM1/fyw7E8QaGCh4LlH8WrgBXneAgOPtlkHGziS/I54RSvGe07
+yWrYkNzFch0l9RnGjAMqqzY9kXn+HxMr3bOFKeSzVQgAssvhcx6OjD+ZzRnVb8D+
+i5KYFTrVih377e5cBhayWEEIdNeV/QTH9ooZxEVqxC10J5P6UgwNewOYhGJxr1yN
+Nn2+KlgfoXuqa5RtLhShjDduPF5FS3v7HKGXuyXBQ+W9FcVeytayo8QRqbMqxWZe
+dNlgjfbNsXJtUjm/48fYdmIiBkb5lf+2LPBhX9JHekVbzJdqx3kigcyXnh7VefKZ
+fWnOmDdAd3hqeeagXUVGmtH+z6+XDGSKDuoBbwreHxr0ZIpW8mm6I6nx9kBF+LoE
+OapSuua9s7ddcBxaOVUGECiH4owhHnfFQSz58XsRNIbkZL8R4YewrCmCoscN6/qN
+adJWAY877iMazlpAzZWr6IZNvKqsET8yQbCllR0olqgh/VOmYUrnj31XtVFgP+47
+kjHVkhz76aEUtquqMmWsR8r8p42TqR0u1KoW2dGysFzdPreXPORf3tQ=
+=i9lR
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
+
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptSecondSubKey()
+
+    /**
+     * @group string
+     */
+    public function testDecryptSecondSubKey()
+    {
+        $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!';
+
+        // encrypted with second subkey (RSA) of multiple-subkeys@example.com
+        // {{{ encrypted data
+        $encryptedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQEMAykh4NP/Ww9KAQf9HLxeXIXDMXEyJaCsfulZodSavNBP0IuZrXVkxrMPPart
+fOf2N0Snnq3vA3MjPL9vEfD5sZLlA2bYMZmilyCh+lryYccME+Qa1gQ5xak1Cra1
+y5ckZ7UNOTdHnhH5VvXk+bwm4KDbdeJJPLOxBJ/j6pf03vxeDEyoBPeeMzzzkXqH
++XZ9j7BHZcsLkY7j7iEw1DwcB4TdbOzkcVVBYwovCmhdY0i0m48mkqGVB0mKNUu+
+YbJuOqiqjACIwXBelB4h/xEXGeEPk+ij1UMt74QhNM2OaQ2HUhIKYMWvAHYuGAvx
++ETuFiJo5OqCa4jW4Nqczw4FYLSDOVHdzKw7+dqeddJWAVST6k4823HSprJVFJ+i
+pY9Bijx3ziDr14+IPxspoJTOInBFYihbwmLFL2RYsf0+pDFmngRhskWIyl4ann4/
+w7YcziO6EF7lbOqYdn+rBA8e46kgbBQ=
+=7fzo
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
+
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($expectedDecryptedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptFile()
+
+    /**
+     * @group file
+     */
+    public function testDecryptFile()
+    {
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+        $inputFilename  = $this->getDataFilename('testDecryptFile.asc');
+        $outputFilename = $this->getTempFilename('testDecryptFile.plain');
+
+        // file is encrypted with first-keypair@example.com
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptFileToString()
+
+    /**
+     * @group file
+     */
+    public function testDecryptFileToString()
+    {
+        $expectedData  = 'Hello, Alice! Goodbye, Bob!';
+        $inputFilename = $this->getDataFilename('testDecryptFileToString.asc');
+
+        // file is encrypted with first-keypair@example.com
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decryptFile($inputFilename);
+
+        $this->assertEquals($expectedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testDecryptFileNoPassphrase()
+
+    /**
+     * @group file
+     */
+    public function testDecryptFileNoPassphrase()
+    {
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+
+        $inputFilename =
+            $this->getDataFilename('testDecryptFileNoPassphrase.asc');
+
+        $outputFilename =
+            $this->getTempFilename('testDecryptFileNoPassphrase.plain');
+
+        // file is encrypted with no-passphrase@example.com
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptFileFileException_input()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testDecryptFileFileException_input()
+    {
+        // input file does not exist
+        $inputFilename =
+            $this->getDataFilename('testDecryptFileFileException_input.asc');
+
+        $this->gpg->decryptFile($inputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptFileFileException_output()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testDecryptFileFileException_output()
+    {
+        // input file is encrypted with first-keypair@example.com
+        // output file does not exist
+        $inputFilename  = $this->getDataFilename('testDecryptFile.asc');
+        $outputFilename = './non-existent' .
+            '/testDecryptFileFileException_output.plain';
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptFileKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group file
+     */
+    public function testDecryptFileKeyNotFoundException()
+    {
+        // file is encrypted with missing-key@example.com
+        $inputFilename =
+            $this->getDataFilename('testDecryptFileKeyNotFoundException.asc');
+
+        $outputFilename =
+            $this->getTempFilename('testDecryptFileKeyNotFoundException.plain');
+
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testDecryptFileDual()
+
+    /**
+     * @group file
+     */
+    public function testDecryptFileDual()
+    {
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+        $inputFilename  = $this->getDataFilename('testDecryptFileDual.asc');
+        $outputFilename = $this->getTempFilename('testDecryptFileDual.plain');
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+        $this->gpg->clearDecryptKeys();
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+        $this->gpg->clearDecryptKeys();
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptFileDualOnePassphrase()
+
+    /**
+     * @group file
+     */
+    public function testDecryptFileDualOnePassphrase()
+    {
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+
+        $inputFilename =
+            $this->getDataFilename('testDecryptFileDualOnePassphrase.asc');
+
+        $outputFilename =
+            $this->getTempFilename('testDecryptFileDualOnePassphrase.plain');
+
+        // decrypt with no-passphrase
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+        $this->gpg->clearDecryptKeys();
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testDecryptFileNoDataException()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group file
+     */
+    public function testDecryptFileNoDataException()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+        $this->gpg->decryptFile($filename);
+    }
+
+    // }}}
+    // {{{ testDecryptFileSignedData()
+
+    /**
+     * @group string
+     */
+    public function testDecryptFileSignedData()
+    {
+        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
+
+        $inputFilename =
+            $this->getDataFilename('testVerifyFileNormalSignedData.asc');
+
+        $outputFilename =
+            $this->getTempFilename('testDecryptFileSignedData.plain');
+
+        $this->gpg->decryptFile($inputFilename, $outputFilename);
+
+        $md5Sum = $this->getMd5Sum($outputFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/DeletePrivateKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,141 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Private key deletion tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit DeletePrivateKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests private key deletion abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class DeletePrivateKeyTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testDeletePrivateKey()
+
+    /**
+     * @group delete-private
+     */
+    public function testDeletePrivateKey()
+    {
+        $keyId = 'first-keypair@example.com';
+        $this->gpg->deletePrivateKey($keyId);
+
+        $expectedKeys = array();
+
+        // {{{ first-keypair@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('C097D9EC94C06363');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785805);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setHasPrivate(false);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('9F93F9116728EF12');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('C9C65B3BBF040E40D0EA27B79F93F9116728EF12');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785821);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(false);
+        $key->addSubKey($subKey);
+        // }}}
+
+        $keys = $this->gpg->getKeys($keyId);
+        $this->assertEquals($expectedKeys, $keys);
+    }
+
+    // }}}
+    // {{{ testDeletePrivateKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group delete-private
+     */
+    public function testDeletePrivateKeyNotFoundException()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $this->gpg->deletePrivateKey($keyId);
+    }
+
+    // }}}
+    // {{{ testDeletePrivateKeyNotFoundException_public_only()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group delete-private
+     */
+    public function testDeletePrivateKeyNotFoundException_public_only()
+    {
+        $keyId = 'public-only@example.com';
+        $this->gpg->deletePrivateKey($keyId);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/DeletePublicKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,128 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Public key deletion tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit DeletePublicKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests public key deletion abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class DeletePublicKeyTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testDeletePublicKey()
+
+    /**
+     * @group delete-public
+     */
+    public function testDeletePublicKey()
+    {
+        $keyId = 'public-only@example.com';
+        $this->gpg->deletePublicKey($keyId);
+
+        $expectedKeys = array();
+        $keys = $this->gpg->getKeys($keyId);
+        $this->assertEquals($expectedKeys, $keys);
+    }
+
+    // }}}
+    // {{{ testDeletePublicKeyDeletePrivateKeyException()
+
+    /**
+     * @expectedException Crypt_GPG_DeletePrivateKeyException
+     *
+     * @group delete-public
+     */
+    public function testDeletePublicKeyDeletePrivateKeyException()
+    {
+        // GnuPG 2.1(.11) allows public key deletion in this case
+        if (version_compare($this->gpg->getVersion(), '2.1.0', 'ge')) {
+            $this->markTestSkipped('GnuPG >= 2.1 allows public key deletion if private key exists.');
+        }
+
+        $keyId = 'first-keypair@example.com';
+        $this->gpg->deletePublicKey($keyId);
+    }
+
+    // }}}
+    // {{{ testDeletePublicKey_privExists()
+
+    /**
+     * @group delete-public
+     */
+    public function testDeletePublicKey_privExists()
+    {
+        // GnuPG 2.1(.11) allows public key deletion in this case
+        if (version_compare($this->gpg->getVersion(), '2.1.0', 'lt')) {
+            $this->markTestSkipped('GnuPG >= 2.1 allows public key deletion if private key exists.');
+        }
+
+        $keyId = 'first-keypair@example.com';
+        $this->gpg->deletePublicKey($keyId);
+    }
+
+    // }}}
+    // {{{ testDeletePublicKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group delete-public
+     */
+    public function testDeletePublicKeyNotFoundException()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $this->gpg->deletePublicKey($keyId);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/EncryptAndSignTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,502 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Encrypt and sign tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit EncryptSignTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2009 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests encrypt and sign abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2009 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class EncryptAndSignTestCase extends Crypt_GPG_TestCase
+{
+    // string
+    // {{{ testEncryptAndSignKeyNotFoundException_invalid_sign_key()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignKeyNotFoundException_invalid_sign_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('non-existent-key@example.com');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignKeyNotFoundException_no_sign_key()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignKeyNotFoundException_no_sign_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignKeyNotFoundException_invalid_encrypt_key()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignKeyNotFoundException_invalid_encrypt_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('non-existent-key@example.com');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignKeyNotFoundException_no_encrypt_key()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignKeyNotFoundException_no_encrypt_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignBadPassphraseException_missing_sign_key()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignBadPassphraseException_missing_sign_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignBadPassphraseException_bad_sign_key()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testEncryptAndSignBadPassphraseException_bad_sign_key()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'incorrect');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSign($data);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignNoPassphrase()
+
+    /**
+     * @group string
+     */
+    public function testEncryptAndSignNoPassphrase()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        $signKey           = 'no-passphrase@example.com';
+        $encryptKey        = 'first-keypair@example.com';
+        $decryptPassphrase = 'test1';
+
+        $this->gpg->addSignKey($signKey);
+        $this->gpg->addEncryptKey($encryptKey);
+        $encryptedSignedData = $this->gpg->encryptAndSign($data);
+
+        $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase);
+        $results = $this->gpg->decryptAndVerify($encryptedSignedData);
+
+        $this->assertEquals($data, $results['data']);
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSign()
+
+    /**
+     * @group string
+     */
+    public function testEncryptAndSign()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        $signKey           = 'first-keypair@example.com';
+        $signPassphrase    = 'test1';
+        $encryptKey        = 'first-keypair@example.com';
+        $decryptPassphrase = 'test1';
+
+        $this->gpg->addSignKey($signKey, $signPassphrase);
+        $this->gpg->addEncryptKey($encryptKey);
+        $encryptedSignedData = $this->gpg->encryptAndSign($data);
+
+        $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase);
+        $results = $this->gpg->decryptAndVerify($encryptedSignedData);
+
+        $this->assertEquals($data, $results['data']);
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignDualOnePassphrase()
+
+    /**
+     * @group string
+     */
+    public function testEncryptAndSignDualOnePassphrase()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        $signKey1          = 'first-keypair@example.com';
+        $signPassphrase1   = 'test1';
+        $signKey2          = 'no-passphrase@example.com';
+        $encryptKey        = 'first-keypair@example.com';
+        $decryptPassphrase = 'test1';
+
+        $this->gpg->addSignKey($signKey1, $signPassphrase1);
+        $this->gpg->addSignKey($signKey2);
+        $this->gpg->addEncryptKey($encryptKey);
+        $encryptedSignedData = $this->gpg->encryptAndSign($data);
+
+        $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase);
+        $results = $this->gpg->decryptAndVerify($encryptedSignedData);
+
+        $this->assertEquals($data, $results['data']);
+        $this->assertEquals(2, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignDual()
+
+    /**
+     * @group string
+     */
+    public function testEncryptAndSignDual()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        $signKey1          = 'first-keypair@example.com';
+        $signPassphrase1   = 'test1';
+        $signKey2          = 'second-keypair@example.com';
+        $signPassphrase2   = 'test2';
+        $encryptKey        = 'first-keypair@example.com';
+        $decryptPassphrase = 'test1';
+
+        $this->gpg->addSignKey($signKey1, $signPassphrase1);
+        $this->gpg->addSignKey($signKey2, $signPassphrase2);
+        $this->gpg->addEncryptKey($encryptKey);
+        $encryptedSignedData = $this->gpg->encryptAndSign($data);
+
+        $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase);
+        $results = $this->gpg->decryptAndVerify($encryptedSignedData);
+
+        $this->assertEquals($data, $results['data']);
+        $this->assertEquals(2, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignEmpty()
+
+    /**
+     * @group string
+     */
+    public function testEncryptAndSignEmpty()
+    {
+        $data = '';
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $encryptedSignedData = $this->gpg->encryptAndSign($data);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerify($encryptedSignedData);
+
+        $this->assertEquals('', $results['data']);
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileNoPassphrase()
+
+    /**
+     * @group file
+     */
+    public function testEncryptAndSignFileNoPassphrase()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc');
+
+        $decryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain');
+
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($encryptedFilename,
+            $decryptedFilename);
+
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFile()
+
+    /**
+     * @group file
+     */
+    public function testEncryptAndSignFile()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc');
+
+        $decryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($encryptedFilename,
+            $decryptedFilename);
+
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileDualOnePassphrase()
+
+    /**
+     * @group file
+     */
+    public function testEncryptAndSignFileDualOnePassphrase()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc');
+
+        $decryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($encryptedFilename,
+            $decryptedFilename);
+
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        $this->assertEquals(2, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileDual()
+
+    /**
+     * @group file
+     */
+    public function testEncryptAndSignFileDual()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc');
+
+        $decryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($encryptedFilename,
+            $decryptedFilename);
+
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        $this->assertEquals(2, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileFileException_input()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testEncryptAndSignFileFileException_input()
+    {
+        // input file does not exist
+        $inputFilename = $this->getDataFilename(
+            'testEncryptAndSignFileFileFileException_input.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($inputFilename);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileFileException_output()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testEncryptAndSignFileFileException_output()
+    {
+        // input file is plaintext
+        // output file does not exist
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = './non-existent' .
+            '/testEncryptAndSignFileFileException_output.plain';
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testEncryptAndSignFileEmpty()
+
+    /**
+     * @group file
+     */
+    public function testEncryptAndSignFileEmpty()
+    {
+        $originalFilename  = $this->getDataFilename('testFileEmpty.plain');
+        $encryptedFilename =
+            $this->getTempFilename('testEncryptAndSignFileEmpty.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $results = $this->gpg->decryptAndVerifyFile($encryptedFilename);
+
+        $this->assertEquals('', $results['data']);
+
+        $this->assertEquals(1, count($results['signatures']));
+        foreach ($results['signatures'] as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/EncryptTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,298 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Encryption tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit EncryptTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests encryption abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class EncryptTestCase extends Crypt_GPG_TestCase
+{
+    public function testHasEncryptKeys()
+    {
+        $this->assertFalse($this->gpg->hasEncryptKeys());
+        $this->gpg->addEncryptKey('no-passphrase@example.com');
+        $this->assertTrue($this->gpg->hasEncryptKeys());
+    }
+
+    // {{{ testEncrypt()
+
+    /**
+     * @group string
+     */
+    public function testEncrypt()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $keyId = 'first-keypair@example.com';
+        $passphrase = 'test1';
+
+        $this->gpg->addEncryptKey($keyId);
+        $encryptedData = $this->gpg->encrypt($data);
+
+        $this->gpg->addDecryptKey($keyId, $passphrase);
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+
+        $this->assertEquals($data, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testEncryptDual()
+
+    /**
+     * @group string
+     */
+    public function testEncryptDual()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->addEncryptKey('second-keypair@example.com');
+        $encryptedData = $this->gpg->encrypt($data);
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->assertEquals($data, $decryptedData);
+        $this->gpg->clearDecryptKeys();
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+        $this->gpg->clearDecryptKeys();
+        $this->assertEquals($data, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testEncryptKeyNotFoundException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptNotFoundException_invalid()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addEncryptKey('non-existent-key@example.com');
+        $this->gpg->encrypt($data);
+    }
+
+    // }}}
+    // {{{ testEncryptKeyNotFoundException_none()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testEncryptNotFoundException_none()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->encrypt($data);
+    }
+
+    // }}}
+    // {{{ testEncryptEmpty()
+
+    /**
+     * @group string
+     */
+    public function testEncryptEmpty()
+    {
+        $data = '';
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $encryptedData = $this->gpg->encrypt($data);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+
+        $this->assertEquals($data, $decryptedData);
+    }
+
+    // }}}
+
+    // file
+    // {{{ testEncryptFile()
+
+    /**
+     * @group file
+     */
+    public function testEncryptFile()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename = $this->getTempFilename('testEncryptFile.asc');
+        $decryptedFilename = $this->getTempFilename('testEncryptFile.plain');
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptFile($originalFilename, $encryptedFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($encryptedFilename, $decryptedFilename);
+
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testEncryptFileDual()
+
+    /**
+     * @group file
+     */
+    public function testEncryptFileDual()
+    {
+        $expectedMd5Sum    = 'f96267d87551ee09bfcac16921e351c1';
+        $originalFilename  = $this->getDataFilename('testFileMedium.plain');
+        $encryptedFilename = $this->getTempFilename('testEncryptFile.asc');
+        $decryptedFilename = $this->getTempFilename('testEncryptFile.plain');
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->addEncryptKey('second-keypair@example.com');
+        $this->gpg->encryptFile($originalFilename, $encryptedFilename);
+
+        // decrypt with first key
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $this->gpg->decryptFile($encryptedFilename, $decryptedFilename);
+        $this->gpg->clearDecryptKeys();
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+
+        // decrypt with second key
+        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
+        $this->gpg->decryptFile($encryptedFilename, $decryptedFilename);
+        $this->gpg->clearDecryptKeys();
+        $md5Sum = $this->getMd5Sum($decryptedFilename);
+        $this->assertEquals($expectedMd5Sum, $md5Sum);
+    }
+
+    // }}}
+    // {{{ testEncryptFileToString()
+
+    /**
+     * @group file
+     */
+    public function testEncryptFileToString()
+    {
+        $expectedData     = 'Hello, Alice! Goodbye, Bob!';
+        $originalFilename = $this->getDataFilename('testFileSmall.plain');
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $encryptedData = $this->gpg->encryptFile($originalFilename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+
+        $this->assertEquals($expectedData, $decryptedData);
+    }
+
+    // }}}
+    // {{{ testEncryptFileFileException_input()
+
+    /**
+     * @group file
+     *
+     * @expectedException Crypt_GPG_FileException
+     */
+    public function testEncryptFileFileException_input()
+    {
+        // input file does not exist
+        $filename =
+            $this->getDataFilename('testEncryptFileFileException_input.plain');
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptFile($filename);
+    }
+
+    // }}}
+    // {{{ testEncryptFileFileException_output()
+
+    /**
+     * @group file
+     *
+     * @expectedException Crypt_GPG_FileException
+     */
+    public function testEncryptFileFileException_output()
+    {
+        // output file does not exist
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = './non-existent' .
+            '/testEncryptFileFileException_output.asc';
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $this->gpg->encryptFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testEncryptFileEmpty()
+
+    /**
+     * @group file
+     */
+    public function testEncryptFileEmpty()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+
+        $this->gpg->addEncryptKey('first-keypair@example.com');
+        $encryptedData = $this->gpg->encryptFile($filename);
+
+        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
+        $decryptedData = $this->gpg->decrypt($encryptedData);
+
+        $this->assertEquals('', $decryptedData);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/ExceptionsTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,294 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Exception class test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit ExceptionsTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Exception classes.
+ */
+require_once 'Crypt/GPG/Exceptions.php';
+
+/**
+ * Exception classes tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class ExceptionsTestCase extends Crypt_GPG_TestCase
+{
+    // exception
+    // {{{ testException
+
+    /**
+     * @group exception
+     * @expectedException Crypt_GPG_Exception
+     * @expectedExceptionMessage test exception
+     */
+    public function testException()
+    {
+        throw new Crypt_GPG_Exception('test exception');
+    }
+
+    // }}}
+
+    // file exception
+    // {{{ testFileException
+
+    /**
+     * @group file-exception
+     * @expectedException Crypt_GPG_FileException
+     * @expectedExceptionMessage test exception
+     */
+    public function testFileException()
+    {
+        throw new Crypt_GPG_FileException('test exception');
+    }
+
+    // }}}
+    // {{{ testFileException_getFilename()
+
+    /**
+     * @group file-exception
+     */
+    public function testFileException_getFilename()
+    {
+        $e = new Crypt_GPG_FileException('test exception', 0,
+            'test-filename.php');
+
+        $this->assertEquals('test-filename.php', $e->getFilename());
+    }
+
+    // }}}
+
+    // open subprocess exception
+    // {{{ testOpenSubprocessException
+
+    /**
+     * @group open-subprocess-exception
+     * @expectedException Crypt_GPG_OpenSubprocessException
+     * @expectedExceptionMessage test exception
+     */
+    public function testOpenSubprocessException()
+    {
+        throw new Crypt_GPG_OpenSubprocessException('test exception');
+    }
+
+    // }}}
+    // {{{ testOpenSubprocessException_getCommand()
+
+    /**
+     * @group open-subprocess-exception
+     */
+    public function testOpenSubprocessException_getCommand()
+    {
+        $e = new Crypt_GPG_OpenSubprocessException('test exception', 0,
+            'gpg --verify');
+
+        $this->assertEquals('gpg --verify', $e->getCommand());
+    }
+
+    // }}}
+
+    // invalid operation exception
+    // {{{ testInvalidOperationException
+
+    /**
+     * @group invalid-operation-exception
+     * @expectedException Crypt_GPG_InvalidOperationException
+     * @expectedExceptionMessage test exception
+     */
+    public function testInvalidOperationException()
+    {
+        throw new Crypt_GPG_InvalidOperationException('test exception');
+    }
+
+    // }}}
+    // {{{ testInvalidOperationException_getOperation()
+
+    /**
+     * @group invalid-operation-exception
+     */
+    public function testInvalidOperationException_getOperation()
+    {
+        $e = new Crypt_GPG_InvalidOperationException('test exception', 0,
+            '--verify');
+
+        $this->assertEquals('--verify', $e->getOperation());
+    }
+
+    // }}}
+
+    // key not found exception
+    // {{{ testKeyNotFoundException
+
+    /**
+     * @group key-not-found-exception
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     * @expectedExceptionMessage test exception
+     */
+    public function testKeyNotFoundException()
+    {
+        throw new Crypt_GPG_KeyNotFoundException('test exception');
+    }
+
+    // }}}
+    // {{{ testKeyNotFoundException_getKeyId()
+
+    /**
+     * @group key-not-found-exception
+     */
+    public function testKeyNotFoundException_getKeyId()
+    {
+        $e = new Crypt_GPG_KeyNotFoundException('test exception', 0,
+            '9F93F9116728EF12');
+
+        $this->assertEquals('9F93F9116728EF12', $e->getKeyId());
+    }
+
+    // }}}
+
+    // no data exception
+    // {{{ testNoDataException
+
+    /**
+     * @group no-data-exception
+     * @expectedException Crypt_GPG_NoDataException
+     * @expectedExceptionMessage test exception
+     */
+    public function testNoDataException()
+    {
+        throw new Crypt_GPG_NoDataException('test exception');
+    }
+
+    // }}}
+
+    // bad passphrase exception
+    // {{{ testBadPassphraseException
+
+    /**
+     * @group bad-passphrase-exception
+     * @expectedException Crypt_GPG_BadPassphraseException
+     * @expectedExceptionMessage test exception
+     */
+    public function testBadPassphraseException()
+    {
+        throw new Crypt_GPG_BadPassphraseException('test exception');
+    }
+
+    // }}}
+    // {{{ testBadPassphraseException_getBadPassphrases()
+
+    /**
+     * @group bad-passphrase-exception
+     */
+    public function testBadPassphraseException_getBadPassphrases()
+    {
+        $e = new Crypt_GPG_BadPassphraseException('test exception', 0,
+            array('C097D9EC94C06363', '9F93F9116728EF12'));
+
+        $keyIds = $e->getBadPassphrases();
+        $this->assertTrue(is_array($keyIds), 'Failed to assert returned ' .
+            'key ids for bad passphrases is an array.');
+
+        $this->assertContains('C097D9EC94C06363', $keyIds);
+        $this->assertContains('9F93F9116728EF12', $keyIds);
+    }
+
+    // }}}
+    // {{{ testBadPassphraseException_getMissingPassphrase()
+
+    /**
+     * @group bad-passphrase-exception
+     */
+    public function testBadPassphraseException_getMissingPassphrase()
+    {
+        $e = new Crypt_GPG_BadPassphraseException('test exception', 0, array(),
+            array('C097D9EC94C06363', '9F93F9116728EF12'));
+
+        $keyIds = $e->getMissingPassphrases();
+        $this->assertTrue(is_array($keyIds), 'Failed to assert returned ' .
+            'key ids for missing passphrases is an array.');
+
+        $this->assertContains('C097D9EC94C06363', $keyIds);
+        $this->assertContains('9F93F9116728EF12', $keyIds);
+    }
+
+    // }}}
+
+    // delete private key exception
+    // {{{ testDeletePrivateKeyException
+
+    /**
+     * @group delete-private-key-exception
+     * @expectedException Crypt_GPG_DeletePrivateKeyException
+     * @expectedExceptionMessage test exception
+     */
+    public function testDeletePrivateKeyException()
+    {
+        throw new Crypt_GPG_DeletePrivateKeyException('test exception');
+    }
+
+    // }}}
+    // {{{ testDeletePrivateKeyException_getKeyId()
+
+    /**
+     * @group delete-private-key-exception
+     */
+    public function testDeletePrivateKeyException_getKeyId()
+    {
+        $e = new Crypt_GPG_DeletePrivateKeyException('test exception', 0,
+            '9F93F9116728EF12');
+
+        $this->assertEquals('9F93F9116728EF12', $e->getKeyId());
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/ExportPrivateKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,143 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Private key export tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit ExportPrivateKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests key export abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class ExportPrivateKeyTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testExportPrivateKey()
+
+    /**
+     * @group export
+     */
+    public function testExportPrivateKey()
+    {
+        $keyId = 'no-passphrase@example.com';
+
+        // We can't expect the key data to be identical as the one
+        // at the creation time, so we only check if it's valid format
+        $expectedKeyData = "-----END PGP PRIVATE KEY BLOCK-----";
+
+        // Note: This operation expects passphrase in GnuPG 2.1 < 2.1.15
+        //       because of https://bugs.gnupg.org/gnupg/issue2070.
+
+        $keyData = $this->gpg->exportPrivateKey($keyId);
+
+        $this->assertContains($expectedKeyData, $keyData);
+    }
+
+    // }}}
+    // {{{ testExportPrivateKey_with_good_pass()
+
+    /**
+     * @group export
+     */
+    public function testExportPrivateKey_with_good_pass()
+    {
+        if (version_compare($this->gpg->getVersion(), '2.1.0', 'lt')) {
+            $this->markTestSkipped('GnuPG >= 2.1 requires passphrase to export private key.');
+        }
+
+        $keyId = 'first-keypair@example.com';
+
+        // This operation requires passphrase in GnuPG 2.1
+        $this->gpg->addPassphrase('94C06363', 'test1');
+
+        $keyData = $this->gpg->exportPrivateKey($keyId);
+
+        // Here we're really testing only the passphrase handling in GnuPG 2.1
+        $this->assertContains('PGP PRIVATE KEY', $keyData);
+    }
+
+    // }}}
+    // {{{ testExportPrivateKey_with_bad_pass()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group export
+     */
+    public function testExportPrivateKey_with_bad_pass()
+    {
+        if (version_compare($this->gpg->getVersion(), '2.1.0', 'lt')) {
+            $this->markTestSkipped('GnuPG >= 2.1 requires passphrase to export private key.');
+        }
+
+        $keyId = 'first-keypair@example.com';
+
+        // This operation requires passphrase in GnuPG 2.1
+        $this->gpg->addPassphrase('94C06363', 'bad');
+
+        $keyData = $this->gpg->exportPrivateKey($keyId);
+    }
+
+    // }}}
+    // {{{ testExportPrivateKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group export
+     */
+    public function testExportPrivateKeyNotFoundException()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $this->gpg->exportPrivateKey($keyId);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/ExportPublicKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,95 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key export tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit ExportPublicKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests key export abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class ExportPublicKeyTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testExportPublicKey()
+
+    /**
+     * @group export
+     */
+    public function testExportPublicKey()
+    {
+        $keyId = 'public-only@example.com';
+
+        // We can't expect the key data to be identical as the one
+        // at the creation time, so we only check if it's valid format
+        $expectedKeyData = "-----END PGP PUBLIC KEY BLOCK-----";
+
+        $keyData = $this->gpg->exportPublicKey($keyId);
+
+        $this->assertContains($expectedKeyData, $keyData);
+    }
+
+    // }}}
+    // {{{ testExportPublicKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group export
+     */
+    public function testExportPublicKeyNotFoundException()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $this->gpg->exportPublicKey($keyId);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/GeneralTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,289 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * General test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit GeneralTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * General tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class GeneralTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testPublicKeyringFileException()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     */
+    public function testPublicKeyringFileException()
+    {
+        $publicKeyringFile = $this->getTempFilename('pubring.gpg');
+        new Crypt_GPG(
+            array(
+                'publicKeyring' => $publicKeyringFile
+            )
+        );
+    }
+
+    // }}}
+    // {{{ testPrivateKeyringFileException()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     */
+    public function testPrivateKeyringFileException()
+    {
+        $privateKeyringFile = $this->getTempFilename('secring.gpg');
+        new Crypt_GPG(
+            array(
+                'privateKeyring' => $privateKeyringFile
+            )
+        );
+    }
+
+    // }}}
+    // {{{ testTrustDatabaseFileException()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     */
+    public function testTrustDatabaseFileException()
+    {
+        $trustDbFile = $this->getTempFilename('secring.gpg');
+        new Crypt_GPG(
+            array(
+                'trustDb' => $trustDbFile
+            )
+        );
+    }
+
+    // }}}
+    // {{{ testHomedirFileException_NoCreate()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     * @expectedExceptionMessage cannot be created
+     */
+    public function testHomedirFileException_NoCreate()
+    {
+        if (posix_getuid() === 0) {
+            $this->markTestSkipped('Root can write to any homedir.');
+        }
+
+        $nonCreatableDirectory = '//.gnupg';
+        new Crypt_GPG(array('homedir' => $nonCreatableDirectory));
+    }
+
+    // }}}
+    // {{{ testHomedirFileException_NoExecute()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     * @expectedExceptionMessage is not enterable
+     */
+    public function testHomedirFileException_NoExecute()
+    {
+        if (posix_getuid() === 0) {
+            $this->markTestSkipped('Root can do what it wants to any homedir.');
+        }
+
+        $nonExecutableDirectory = $this->getTempFilename('home-no-execute');
+        mkdir($nonExecutableDirectory);
+        chmod($nonExecutableDirectory, 0600); // rw- --- ---
+
+        new Crypt_GPG(array('homedir' => $nonExecutableDirectory));
+    }
+
+    // }}}
+    // {{{ testHomedirFileException_NoWrite()
+
+    /**
+     * @expectedException Crypt_GPG_FileException()
+     * @expectedExceptionMessage is not writeable
+     */
+    public function testHomedirFileException_NoWrite()
+    {
+        if (posix_getuid() === 0) {
+            $this->markTestSkipped('Root can write to any homedir.');
+        }
+
+        $nonWriteableDirectory = $this->getTempFilename('home-no-write');
+        mkdir($nonWriteableDirectory);
+        chmod($nonWriteableDirectory, 0300); // r-x --- ---
+
+        new Crypt_GPG(array('homedir' => $nonWriteableDirectory));
+    }
+
+    // }}}
+    // {{{ testBinaryPEARException()
+
+    /**
+     * @expectedException PEAR_Exception
+     */
+    public function testBinaryPEARException()
+    {
+        new Crypt_GPG(array('binary' => './non-existent-binary'));
+    }
+
+    // }}}
+    // {{{ testGPGBinaryPEARException()
+
+    /**
+     * @expectedException PEAR_Exception
+     */
+    public function testGPGBinaryPEARException()
+    {
+        new Crypt_GPG(array('gpgBinary' => './non-existent-binary'));
+    }
+
+    // }}}
+    // {{{ testSetEngine()
+
+    public function testSetEngine()
+    {
+        $engine = new Crypt_GPG_Engine($this->getOptions());
+        $gpg = new Crypt_GPG();
+        $gpg->setEngine($engine);
+
+        $homedirConstraint = $this->attribute(
+            $this->attributeEqualTo(
+                '_homedir',
+                __DIR__ . '/' . self::HOMEDIR
+            ),
+            'engine'
+        );
+
+        $this->assertThat(
+            $gpg,
+            $homedirConstraint,
+            'Engine was not set properly.'
+        );
+    }
+
+    // }}}
+
+    // fluent interface
+    // {{{ testFluentInterface
+
+    /**
+     * @group fluent
+     */
+    public function testFluentInterface()
+    {
+        $returnedGpg = $this->gpg->setEngine(
+            new Crypt_GPG_Engine($this->getOptions())
+        );
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for setEngine() method.'
+        );
+
+        $returnedGpg = $this->gpg->addDecryptKey(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'test1'
+        );
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for addDecryptKey() ' .
+            'method.'
+        );
+
+        $returnedGpg = $this->gpg->addEncryptKey(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363'
+        );
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for addEncryptKey() ' .
+            'method.'
+        );
+
+        $returnedGpg = $this->gpg->addSignKey(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'test1'
+        );
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for addSignKey() ' .
+            'method.'
+        );
+
+        $returnedGpg = $this->gpg->clearDecryptKeys();
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for clearDecryptKeys() ' .
+            'method.'
+        );
+
+        $returnedGpg = $this->gpg->clearEncryptKeys();
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for clearEncryptKeys() ' .
+            'method.'
+        );
+
+        $returnedGpg = $this->gpg->clearSignKeys();
+        $this->assertEquals(
+            $this->gpg,
+            $returnedGpg,
+            'Failed asserting fluent interface works for clearSignKeys() ' .
+            'method.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/GetFingerprintTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,125 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Fingerprint retrieval tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit GetFingerprintTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests fingerprint retrieval of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class GetFingerprintTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testGetFingerprint()
+
+    /**
+     * @group get-fingerprint
+     */
+    public function testGetFingerprint()
+    {
+        $keyId = 'public-only@example.com';
+        $expectedFingerprint = 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB';
+        $fingerprint = $this->gpg->getFingerprint($keyId);
+        $this->assertEquals($expectedFingerprint, $fingerprint);
+    }
+
+    // }}}
+    // {{{ testGetFingerprintNull()
+
+    /**
+     * @group get-fingerprint
+     */
+    public function testGetFingerprintNull()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $fingerprint = $this->gpg->getFingerprint($keyId);
+        $this->assertNull($fingerprint);
+    }
+
+    // }}}
+    // {{{ testGetFingerprintX509()
+
+    /**
+     * @group get-fingerprint
+     */
+    public function testGetFingerprintX509()
+    {
+        $keyId = 'public-only@example.com';
+        $expectedFingerprint =
+            'F8:31:18:CB:6F:58:92:DC:1C:3E:93:6D:AB:A8:1E:F5:4E:8C:0D:EB';
+
+        $fingerprint = $this->gpg->getFingerprint($keyId,
+            Crypt_GPG::FORMAT_X509);
+
+        $this->assertEquals($expectedFingerprint, $fingerprint);
+    }
+
+    // }}}
+    // {{{ testGetFingerprintCanonical()
+
+    /**
+     * @group get-fingerprint
+     */
+    public function testGetFingerprintCanonical()
+    {
+        $keyId = 'public-only@example.com';
+        $expectedFingerprint =
+            'F831 18CB 6F58 92DC 1C3E  936D ABA8 1EF5 4E8C 0DEB';
+
+        $fingerprint = $this->gpg->getFingerprint($keyId,
+            Crypt_GPG::FORMAT_CANONICAL);
+
+        $this->assertEquals($expectedFingerprint, $fingerprint);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/GetKeysTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,317 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key retrieval tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit GetKeysTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests key retrieval of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class GetKeysTestCase extends Crypt_GPG_TestCase
+{
+    // {{{ testGetKeys()
+
+    /**
+     * @group get-keys
+     */
+    public function testGetKeys()
+    {
+        $expectedKeys = array();
+
+        // {{{ first-keypair@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('C097D9EC94C06363');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785805);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('9F93F9116728EF12');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('C9C65B3BBF040E40D0EA27B79F93F9116728EF12');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785821);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+        // }}}
+        // {{{ second-keypair@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('03CC890AFA1DAD4B');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('880922DBEA733E906693E4A903CC890AFA1DAD4B');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785821);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('B2F54E4757E22450');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('C641EE162B46B810E8089153B2F54E4757E22450');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785825);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+        // }}}
+        // {{{ public-only@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Public Only Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('public-only@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('ABA81EF54E8C0DEB');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785826);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setHasPrivate(false);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('BA4984433CDF4169');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('B68C9DB020181C798047A6E7BA4984433CDF4169');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785832);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(false);
+        $key->addSubKey($subKey);
+        // }}}
+        // {{{ no-passphrase@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('No Passphrase Public and Private Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('no-passphrase@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('94563FB398ADA6B2');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('1EC9C5DBF239DD0A3A4FCD0D94563FB398ADA6B2');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785833);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('24BF380700C14B4F');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('86DD46AC210531EE5A37567824BF380700C14B4F');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785845);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+        // }}}
+        // {{{ multiple-subkeys@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Multiple Subkeys');
+        $userId->setEmail('multiple-subkeys@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('B07A621DC9295765');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('F9DF21B5D2DD02D3DF760270B07A621DC9295765');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1232605399);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY | Crypt_GPG_SubKey::USAGE_AUTHENTICATION);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('6F941ACC362453DA');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('A728EE198BA2FB5C7B1C8B896F941ACC362453DA');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1232605407);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('2921E0D3FF5B0F4A');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_RSA);
+        $subKey->setFingerprint('E1363DCE4863B824813AB2702921E0D3FF5B0F4A');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1232605437);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+        // }}}
+
+        $keys = $this->gpg->getKeys();
+        $this->assertEquals($expectedKeys, $keys);
+    }
+
+    // }}}
+    // {{{ testGetKeysWithKeyId()
+
+    /**
+     * @group get-keys
+     */
+    public function testGetKeysWithKeyId()
+    {
+        $keyId = 'first-keypair@example.com';
+        $expectedKeys = array();
+
+        // {{{ first-keypair@example.com
+        $key = new Crypt_GPG_Key();
+        $expectedKeys[] = $key;
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $key->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('C097D9EC94C06363');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setFingerprint('8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+        $subKey->setLength(1024);
+        $subKey->setCreationDate(1221785805);
+        $subKey->setExpirationDate(0);
+        $subKey->setUsage(Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_CERTIFY);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setId('9F93F9116728EF12');
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setFingerprint('C9C65B3BBF040E40D0EA27B79F93F9116728EF12');
+        $subKey->setLength(2048);
+        $subKey->setCreationDate(1221785821);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $key->addSubKey($subKey);
+        // }}}
+
+        $keys = $this->gpg->getKeys($keyId);
+        $this->assertEquals($expectedKeys, $keys);
+    }
+
+    // }}}
+    // {{{ testGetKeysNone()
+
+    /**
+     * @group get-keys
+     */
+    public function testGetKeysNone()
+    {
+        $keyId = 'non-existent-key@example.com';
+        $expectedKeys = array();
+        $keys = $this->gpg->getKeys($keyId);
+        $this->assertEquals($expectedKeys, $keys);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/ImportKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,522 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key import tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit ImportKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests key import abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class ImportKeyTestCase extends Crypt_GPG_TestCase
+{
+    // set up
+    // {{{ setUp()
+
+    public function setUp()
+    {
+        parent::setUp();
+
+        // In GnuPG 2.1 first operation on a keyring in v1 format
+        // will cause format update and several IMPORT_OK responses
+        // This way we clean the state first
+        $this->gpg->getKeys();
+    }
+
+    // }}}
+    // {{{ testImportKey_private()
+
+    /**
+     * @group string
+     */
+    public function testImportKey_private()
+    {
+        // Note: Some of GnuPG 2.1.x versions return different private_imported
+        // and private_uchanged values, bug? GnuPG 2.1.15 returns 1 as expected.
+
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 1,
+            'private_unchanged' => 0
+        );
+
+        // {{{ private key data
+        $privateKeyData = <<<TEXT
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+lQHhBEjS+OIRBACPl023p+jInWiUtc7zSBU1D4mv42zSOwPdC37Pn/4x9FyhIOXE
+LCRTpsnAw9rT6R3BvAC4uO68fxjxFCwTpsa60RsHw4bwpSAYuf0t5Xg+GQIritlm
+XHVYwku3Hkh4Svv0quemooGuJ9lLwIHacL/4W1dTHLB2rzon0T4kx7ExZwCg/XKl
+RD9zbbnQOgjn0EaS8fcSm+ED/1IMfkCz5ac9Y3jBUlcArOZcOlTrzxst+iMZm4f0
+fh8dFCCaRN0iaVLSdCNaFvbKbJYZad1w3jFAMU9bX83flqgV1wMPO/NenfMidBIq
+sKzgttaQo5VmjWPtwyOJXODR2lHKQR2hFCkIKlHMPLV3awCGV8iTyiTZMJirdtvf
+s26oA/9STYro+yB9yrHufdfjM1u8SbSIhK6jUoq2ajLPHaLF2nRZZyv1gnkzRFd+
+/Vxcx6cwp8Qd6L4z+0sU3pMS4X8rt2vqilK2msg1VrHnjGgFIfmfIvY5EmrhNzEx
+6X82fbR9f8lwLy5N/gPm326e0xSw1rWdR15VukJPbmK6nf/pL/4DAwIZF3WLmXaM
+DGCHa6b36T1VZ+bgYYcoQUanh3OSfLO0NwJ5ywFiML26DYZ7M3aivlfXj/8lOKy0
+8tcg/rRcUHVibGljIE9ubHkgVGVzdCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9y
+dGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxwdWJsaWMtb25seUBleGFtcGxlLmNv
+bT6IYAQTEQIAIAUCSNL44gIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKuo
+HvVOjA3r8DYAn1/DrF5jw31P3L6MlWdelLuR4POnAJ9It7IynfJalYIHoAWtY2xk
+kTsT+p0CYgRI0vjoEAgAp65R578Es8qtASDAgIbYfJlJTwMovEnA4KJ69mpVt3mz
+cFWMtJCvuilvwSQQ+VfKxjemtbe/IbMe9ssj4nTSLw/mweUB89tRj8ZzaS+/9312
+AS8ra/xIDr6kTSfKcRKjXgMzkJ+A13rYwG5LFWnyumg36xglmzXKhecEkRVPfWn3
+ISoq3zirZlQOWcKYdyA2Z685SKJC/N+3nUqKOJ7qrA7eT608LFksytBHeOfNf5m7
+CC4wAE3RAz+ZkJvWRbE2G5pUalZktq8uKMT5WQgvuFP3hnvku5yilpo2ELTnYkO3
+ltc3NHCc9v+jhikayPr7RvUdVPbaITT80yYKBPygCwADBggApzR1vW/fvzmrO5pW
+zAvd4umVh/Yp34n3vWyXMu+JIHA7s08rkTzlMXzamICQmkjwAuCwJt0t7BA28Lny
+goh2joxo8tE/OowFk+IzbeA2Vrz71d/T5SMDtC2mePE0m3bmCOLBscu5aJIfgi1X
+/fzr44f4i+6hqVDCuOOmnVtbL4xBBnS6KXdcWP7QbVhxG3SpH9Agd/QXvSQm0Obz
+9iKZ11FEXzgnVZGXaCM0GBsFE9JuNY5+hi6A72rccjhC0V1Cy43veeIhOE+v3pK0
+a/BGUlgDSdgVopE9zUSQwzuo87UbY3EoDWBqDRSRCRMfmv8S2b9VJIRPdCOHZGCI
+R49/0f4DAwIZF3WLmXaMDGCvSMKxFAt3zGZVEsfwS67ilWw0kq9wgmDpTmbrz1pe
+8tUgmHxgiVc3Xo86ItXGr69udzSODYw2wO6JGdgOKsZDKAv7zJHi+3GISAQYEQIA
+CQUCSNL46AIbDAAKCRCrqB71TowN6zbAAJ4qBrdmAYuAbY5txsc+Tmv9quOpzwCW
+NN5B7Vl2JdxBuwWJrdfUb9UQzw==
+=51qc
+-----END PGP PRIVATE KEY BLOCK-----
+
+TEXT;
+        // }}}
+
+        $result = $this->gpg->importKey($privateKeyData);
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKey_public()
+
+    /**
+     * @group string
+     */
+    public function testImportKey_public()
+    {
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 1,
+            'public_unchanged'  => 0,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        // {{{ public key data
+        $publicKeyData = <<<TEXT
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+mQGiBEjS+PgRBADbDdRN9iwESSyJvjnfgk7ZWUYKdHdSER7yJ0aM4LQjVDdw9y/f
+QGidipXxVD2lW28gRtzcmLufxv3DzjZp83VaXvlJs9jbTtHDIYFyDW9kH1HTRbZT
+WKWfuInd0AXzHy5o77qQ+mW0AIXbyke5suSHdvcmv1hiWI9OnXcIHpmavwCgt4Hm
++j3FpRo9qs4fJM887c796qUD/iPkStU9sM/0KCJFZNaPCGBaamCEi7UoAHNlim+B
+dv3rfSQ2VcDRq9/3GoCEJ2c62XpgQxt79mojJLdWZsTWvr6ESnWOm7W6GIjv/Zc3
++OXgi7QdH5nwpZl6kBMkuzZxczFuwh9dqlXml+bND0JawS38MvQpDUkwMb592v5U
+i9WIBADBacg6nixiTR+4kaHFE1Ww8QxT+vQ4S1SOx47cm8R6FxTRQA7FvK+vMxCt
+Ps9GOzhjrCgIoF/6X10IZ7qB5jCYIH+kvHrp90ZbNwJ4pIa7phCPhqUF9mEyMbC2
+AEIGp/Aw26yXKskQJJ3vFji+VaeCui21sXjg5EHfoayt79xT8bRfRXh0ZXJuYWwg
+UHVibGljIEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0
+aGlzIGtleSkgPGV4dGVybmFsLXB1YmxpY0BleGFtcGxlLmNvbT6IYAQTEQIAIAUC
+SNL4+AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECaKtxA0NeZdqHwAn3AF
+EEhX1Tyba0ovCV2DwUytKM0CAKCnu6VzRy1Y8jp9fiy3ScwmaCI3FbkCDQRI0vj8
+EAgArBRh0YpPhE1vvKoPuhGDa//96YqrYt9rmBo3AR1WmF3CKtspjXdOK2bCqdJh
+H6kaoNi+0Ors00n2NfPj9Am2cTV3h2/KpAWOxQGfkmpzU3xXTVCUo/HoKDXIfWqk
+/TPXRqbwFV489GRBtVov4IoZM0KqZXhaFD6cXBsEl/BVSvVdBqmBzUoJ2bOzYiSW
+eg/ml65jbtxjDYMbxTLi7xRcTSAsareoN6/PcbAvcCE5UeCMu8p52wxHOTrAkI4/
+6elpziVpIGn07zJb//4qIoZdhIzwfsMl73tPfdoL9jEC66SiWAN+BEDxceGR5E15
+2WsT5tkxuz/pQUC1L3JW4WCC/wADBwf8CsevcPsk2XxT2XZj0lfmAOuhXxuqBczW
+TXCimnRxvC8+uAacv1RgVRH6emW3BVjt0dr9vwRT0n54JA+7ZwXVMOo4/tqNwmJs
+C6SThBXGBQxEaZwv19WC58DjblbvYa81cUaXrUdHi1OyoHwgalx0xZQ57IUXW6+7
+qdLRfzyqbDBph9ogB0ta3AhSikAqqYImTrI650v/KWBLjrI+N925r0TvnfSOsru7
+JrftccY2LntVnQUcXjuaFViZ7y8ocW8f92zmGj2zUN8z2GsMKiGQtNNmoX51TcQl
+sJPsZF0RKduVkNUQa9cfzSIMjjhUSzspA2qHLUKafrS3e38s2Y4CNIhJBBgRAgAJ
+BQJI0vj8AhsMAAoJECaKtxA0NeZdOFQAn15X+eYzFgVERrFkddsHvAE00OnSAJ9h
+A7Lcv7M+9WeZ6cjeHkZfLB6LLA==
+=AV/P
+-----END PGP PUBLIC KEY BLOCK-----
+
+TEXT;
+        // }}}
+
+        $result = $this->gpg->importKey($publicKeyData);
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyAlreadyImported_private()
+
+    /**
+     * @group string
+     */
+    public function testImportKeyAlreadyImported_private()
+    {
+        // {{{ private key data
+        $privateKeyData = <<<TEXT
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+lQHhBEjS+OIRBACPl023p+jInWiUtc7zSBU1D4mv42zSOwPdC37Pn/4x9FyhIOXE
+LCRTpsnAw9rT6R3BvAC4uO68fxjxFCwTpsa60RsHw4bwpSAYuf0t5Xg+GQIritlm
+XHVYwku3Hkh4Svv0quemooGuJ9lLwIHacL/4W1dTHLB2rzon0T4kx7ExZwCg/XKl
+RD9zbbnQOgjn0EaS8fcSm+ED/1IMfkCz5ac9Y3jBUlcArOZcOlTrzxst+iMZm4f0
+fh8dFCCaRN0iaVLSdCNaFvbKbJYZad1w3jFAMU9bX83flqgV1wMPO/NenfMidBIq
+sKzgttaQo5VmjWPtwyOJXODR2lHKQR2hFCkIKlHMPLV3awCGV8iTyiTZMJirdtvf
+s26oA/9STYro+yB9yrHufdfjM1u8SbSIhK6jUoq2ajLPHaLF2nRZZyv1gnkzRFd+
+/Vxcx6cwp8Qd6L4z+0sU3pMS4X8rt2vqilK2msg1VrHnjGgFIfmfIvY5EmrhNzEx
+6X82fbR9f8lwLy5N/gPm326e0xSw1rWdR15VukJPbmK6nf/pL/4DAwIZF3WLmXaM
+DGCHa6b36T1VZ+bgYYcoQUanh3OSfLO0NwJ5ywFiML26DYZ7M3aivlfXj/8lOKy0
+8tcg/rRcUHVibGljIE9ubHkgVGVzdCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9y
+dGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxwdWJsaWMtb25seUBleGFtcGxlLmNv
+bT6IYAQTEQIAIAUCSNL44gIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKuo
+HvVOjA3r8DYAn1/DrF5jw31P3L6MlWdelLuR4POnAJ9It7IynfJalYIHoAWtY2xk
+kTsT+p0CYgRI0vjoEAgAp65R578Es8qtASDAgIbYfJlJTwMovEnA4KJ69mpVt3mz
+cFWMtJCvuilvwSQQ+VfKxjemtbe/IbMe9ssj4nTSLw/mweUB89tRj8ZzaS+/9312
+AS8ra/xIDr6kTSfKcRKjXgMzkJ+A13rYwG5LFWnyumg36xglmzXKhecEkRVPfWn3
+ISoq3zirZlQOWcKYdyA2Z685SKJC/N+3nUqKOJ7qrA7eT608LFksytBHeOfNf5m7
+CC4wAE3RAz+ZkJvWRbE2G5pUalZktq8uKMT5WQgvuFP3hnvku5yilpo2ELTnYkO3
+ltc3NHCc9v+jhikayPr7RvUdVPbaITT80yYKBPygCwADBggApzR1vW/fvzmrO5pW
+zAvd4umVh/Yp34n3vWyXMu+JIHA7s08rkTzlMXzamICQmkjwAuCwJt0t7BA28Lny
+goh2joxo8tE/OowFk+IzbeA2Vrz71d/T5SMDtC2mePE0m3bmCOLBscu5aJIfgi1X
+/fzr44f4i+6hqVDCuOOmnVtbL4xBBnS6KXdcWP7QbVhxG3SpH9Agd/QXvSQm0Obz
+9iKZ11FEXzgnVZGXaCM0GBsFE9JuNY5+hi6A72rccjhC0V1Cy43veeIhOE+v3pK0
+a/BGUlgDSdgVopE9zUSQwzuo87UbY3EoDWBqDRSRCRMfmv8S2b9VJIRPdCOHZGCI
+R49/0f4DAwIZF3WLmXaMDGCvSMKxFAt3zGZVEsfwS67ilWw0kq9wgmDpTmbrz1pe
+8tUgmHxgiVc3Xo86ItXGr69udzSODYw2wO6JGdgOKsZDKAv7zJHi+3GISAQYEQIA
+CQUCSNL46AIbDAAKCRCrqB71TowN6zbAAJ4qBrdmAYuAbY5txsc+Tmv9quOpzwCW
+NN5B7Vl2JdxBuwWJrdfUb9UQzw==
+=51qc
+-----END PGP PRIVATE KEY BLOCK-----
+
+TEXT;
+        // }}}
+
+        $result = $this->gpg->importKey($privateKeyData);
+
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 1,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+
+        $result = $this->gpg->importKey($privateKeyData);
+
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => version_compare($this->gpg->getVersion(), '2.1.0', 'ge') ? 1 : 0,
+            'private_imported'  => 0,
+            'private_unchanged'  => 1,
+        );
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyAlreadyImported_public()
+
+    /**
+     * @group string
+     */
+    public function testImportKeyAlreadyImported_public()
+    {
+        // {{{ public key data
+        $publicKeyData = <<<TEXT
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+mQGiBEjS+PgRBADbDdRN9iwESSyJvjnfgk7ZWUYKdHdSER7yJ0aM4LQjVDdw9y/f
+QGidipXxVD2lW28gRtzcmLufxv3DzjZp83VaXvlJs9jbTtHDIYFyDW9kH1HTRbZT
+WKWfuInd0AXzHy5o77qQ+mW0AIXbyke5suSHdvcmv1hiWI9OnXcIHpmavwCgt4Hm
++j3FpRo9qs4fJM887c796qUD/iPkStU9sM/0KCJFZNaPCGBaamCEi7UoAHNlim+B
+dv3rfSQ2VcDRq9/3GoCEJ2c62XpgQxt79mojJLdWZsTWvr6ESnWOm7W6GIjv/Zc3
++OXgi7QdH5nwpZl6kBMkuzZxczFuwh9dqlXml+bND0JawS38MvQpDUkwMb592v5U
+i9WIBADBacg6nixiTR+4kaHFE1Ww8QxT+vQ4S1SOx47cm8R6FxTRQA7FvK+vMxCt
+Ps9GOzhjrCgIoF/6X10IZ7qB5jCYIH+kvHrp90ZbNwJ4pIa7phCPhqUF9mEyMbC2
+AEIGp/Aw26yXKskQJJ3vFji+VaeCui21sXjg5EHfoayt79xT8bRfRXh0ZXJuYWwg
+UHVibGljIEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0
+aGlzIGtleSkgPGV4dGVybmFsLXB1YmxpY0BleGFtcGxlLmNvbT6IYAQTEQIAIAUC
+SNL4+AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECaKtxA0NeZdqHwAn3AF
+EEhX1Tyba0ovCV2DwUytKM0CAKCnu6VzRy1Y8jp9fiy3ScwmaCI3FbkCDQRI0vj8
+EAgArBRh0YpPhE1vvKoPuhGDa//96YqrYt9rmBo3AR1WmF3CKtspjXdOK2bCqdJh
+H6kaoNi+0Ors00n2NfPj9Am2cTV3h2/KpAWOxQGfkmpzU3xXTVCUo/HoKDXIfWqk
+/TPXRqbwFV489GRBtVov4IoZM0KqZXhaFD6cXBsEl/BVSvVdBqmBzUoJ2bOzYiSW
+eg/ml65jbtxjDYMbxTLi7xRcTSAsareoN6/PcbAvcCE5UeCMu8p52wxHOTrAkI4/
+6elpziVpIGn07zJb//4qIoZdhIzwfsMl73tPfdoL9jEC66SiWAN+BEDxceGR5E15
+2WsT5tkxuz/pQUC1L3JW4WCC/wADBwf8CsevcPsk2XxT2XZj0lfmAOuhXxuqBczW
+TXCimnRxvC8+uAacv1RgVRH6emW3BVjt0dr9vwRT0n54JA+7ZwXVMOo4/tqNwmJs
+C6SThBXGBQxEaZwv19WC58DjblbvYa81cUaXrUdHi1OyoHwgalx0xZQ57IUXW6+7
+qdLRfzyqbDBph9ogB0ta3AhSikAqqYImTrI650v/KWBLjrI+N925r0TvnfSOsru7
+JrftccY2LntVnQUcXjuaFViZ7y8ocW8f92zmGj2zUN8z2GsMKiGQtNNmoX51TcQl
+sJPsZF0RKduVkNUQa9cfzSIMjjhUSzspA2qHLUKafrS3e38s2Y4CNIhJBBgRAgAJ
+BQJI0vj8AhsMAAoJECaKtxA0NeZdOFQAn15X+eYzFgVERrFkddsHvAE00OnSAJ9h
+A7Lcv7M+9WeZ6cjeHkZfLB6LLA==
+=AV/P
+-----END PGP PUBLIC KEY BLOCK-----
+
+TEXT;
+        // }}}
+
+        $result = $this->gpg->importKey($publicKeyData);
+
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 1,
+            'public_unchanged'  => 0,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+
+        $result = $this->gpg->importKey($publicKeyData);
+
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyNoDataException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testImportKeyNoDataException_invalid()
+    {
+        $keyData = 'Invalid OpenPGP data.';
+        $this->gpg->importKey($keyData);
+    }
+
+    // }}}
+    // {{{ testImportKeyNoDataException_empty()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testImportKeyNoDataException_empty()
+    {
+        $keyData = '';
+        $this->gpg->importKey($keyData);
+    }
+
+    // }}}
+    // {{{ testImportKeyFile_private()
+
+    /**
+     * @group file
+     */
+    public function testImportKeyFile_private()
+    {
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 1,
+            'private_unchanged' => 0
+        );
+
+        $filename = $this->getDataFilename('testImportKeyFile_private.asc');
+        $result   = $this->gpg->importKeyFile($filename);
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyFile_public()
+
+    /**
+     * @group file
+     */
+    public function testImportKeyFile_public()
+    {
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 1,
+            'public_unchanged'  => 0,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        $filename = $this->getDataFilename('testImportKeyFile_public.asc');
+        $result   = $this->gpg->importKeyFile($filename);
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyFileAlreadyImported_private()
+
+    /**
+     * @group file
+     */
+    public function testImportKeyFileAlreadyImported_private()
+    {
+        $filename = $this->getDataFilename('testImportKeyFile_private.asc');
+        $result   = $this->gpg->importKeyFile($filename);
+
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 1,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+
+        $result = $this->gpg->importKeyFile($filename);
+
+        $expectedResult = array(
+            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
+            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
+            'public_imported'   => 0,
+            'public_unchanged'  => version_compare($this->gpg->getVersion(), '2.1.0', 'ge') ? 1 : 0,
+            'private_imported'  => 0,
+            'private_unchanged'  => 1,
+        );
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyFileAlreadyImported_public()
+
+    /**
+     * @group file
+     */
+    public function testImportKeyFileAlreadyImported_public()
+    {
+        $filename = $this->getDataFilename('testImportKeyFile_public.asc');
+        $result = $this->gpg->importKeyFile($filename);
+
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 1,
+            'public_unchanged'  => 0,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+
+        $result = $this->gpg->importKeyFile($filename);
+
+        $expectedResult = array(
+            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
+            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
+            'public_imported'   => 0,
+            'public_unchanged'  => 1,
+            'private_imported'  => 0,
+            'private_unchanged' => 0
+        );
+
+        $this->assertEquals($expectedResult, $result);
+    }
+
+    // }}}
+    // {{{ testImportKeyFileFileException()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testImportKeyFileFileException()
+    {
+        // input file does not exist
+        $filename =
+            $this->getDataFilename('testImportKeyFileFileException.asc');
+
+        $this->gpg->importKeyFile($filename);
+    }
+
+    // }}}
+    // {{{ testImportKeyFileNoDataException()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group file
+     */
+    public function testImportKeyFileNoDataException()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+        $this->gpg->importKeyFile($filename);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/KeyGeneratorTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,981 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key generation tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit KeyGeneratorTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id: GetKeysTestCase.php 274158 2009-01-22 06:33:54Z gauthierm $
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * The Crypt_GPG class to test
+ */
+require_once 'Crypt/GPG/KeyGenerator.php';
+
+/**
+ * Tests key generation of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class KeyGeneratorTestCase extends Crypt_GPG_TestCase
+{
+    // helper methods
+    // {{{ assertKeyEquals()
+
+    protected function assertKeyEquals(
+        Crypt_GPG_Key $key1,
+        Crypt_GPG_Key $key2
+    ) {
+        $userIds1 = $key1->getUserIds();
+        $userIds2 = $key2->getUserIds();
+        $userId1  = $userIds1[0];
+        $userId2  = $userIds2[0];
+        $subKeys1 = $key1->getSubKeys();
+        $subKeys2 = $key2->getSubKeys();
+        $subKeyA1 = $subKeys1[0];
+        $subKeyB1 = $subKeys1[1];
+        $subKeyA2 = $subKeys2[0];
+        $subKeyB2 = $subKeys2[1];
+
+        $this->assertEquals(
+            $userId1->getName(),
+            $userId2->getName(),
+            'User id names do not match.'
+        );
+
+        $this->assertEquals(
+            $userId1->getEmail(),
+            $userId2->getEmail(),
+            'User id email addresses do not match.'
+        );
+
+        $this->assertEquals(
+            $userId1->getComment(),
+            $userId2->getComment(),
+            'User id comments do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->getAlgorithm(),
+            $subKeyA2->getAlgorithm(),
+            'Primary key algorithms do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->getLength(),
+            $subKeyA2->getLength(),
+            'Primary key lengths do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->getExpirationDate(),
+            $subKeyA2->getExpirationDate(),
+            'Primary key expiration dates do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->canSign(),
+            $subKeyA2->canSign(),
+            'Primary key signing abilities do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->canEncrypt(),
+            $subKeyA2->canEncrypt(),
+            'Primary key encrypting abilities do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyA1->hasPrivate(),
+            $subKeyA2->hasPrivate(),
+            'Primary key private keys do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->getAlgorithm(),
+            $subKeyB2->getAlgorithm(),
+            'Secondary key algorithms do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->getLength(),
+            $subKeyB2->getLength(),
+            'Secondary key lengths do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->getExpirationDate(),
+            $subKeyB2->getExpirationDate(),
+            'Secondary key expiration dates do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->canSign(),
+            $subKeyB2->canSign(),
+            'Secondary key signing abilities do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->canEncrypt(),
+            $subKeyB2->canEncrypt(),
+            'Secondary key encrypting abilities do not match.'
+        );
+
+        $this->assertEquals(
+            $subKeyB1->hasPrivate(),
+            $subKeyB2->hasPrivate(),
+            'Secondary key private keys do not match.'
+        );
+    }
+
+    // }}}
+    // {{{ setUp()
+
+    public function setUp()
+    {
+        parent::setUp();
+        $this->generator = new Crypt_GPG_KeyGenerator($this->getOptions());
+    }
+
+    // }}}
+
+    // mutators
+    // {{{ testSetExpirationDate_zero()
+
+    /**
+     * @group mutators
+     */
+    public function testSetExpirationDate_zero()
+    {
+        $expectedDate = 0;
+        $this->generator->setExpirationDate(0);
+
+        $this->assertAttributeEquals(
+            $expectedDate,
+            'expirationDate',
+            $this->generator,
+            'Setting expiration date to zero failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_integer()
+
+    /**
+     * @group mutators
+     */
+    public function testSetExpirationDate_integer()
+    {
+        $expectedDate = 2000000000;
+        $this->generator->setExpirationDate(2000000000);
+
+        $this->assertAttributeEquals(
+            $expectedDate,
+            'expirationDate',
+            $this->generator,
+            'Setting expiration date by integer failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_string()
+
+    /**
+     * @group mutators
+     */
+    public function testSetExpirationDate_string()
+    {
+        date_default_timezone_set('UTC');
+
+        $expectedDate = 2000000000;
+        $this->generator->setExpirationDate('2033-05-18T03:33:20');
+
+        $this->assertAttributeEquals(
+            $expectedDate,
+            'expirationDate',
+            $this->generator,
+            'Setting expiration date by string failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_invalid_format()
+
+    /**
+     * @group mutators
+     * @expectedException InvalidArgumentException
+     */
+    public function testSetExpirationDate_invalid_format()
+    {
+        date_default_timezone_set('UTC');
+
+        $this->generator->setExpirationDate('this is not a date');
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_too_early_date()
+
+    /**
+     * @group mutators
+     * @expectedException InvalidArgumentException
+     */
+    public function testSetExpirationDate_too_early_date()
+    {
+        $this->generator->setExpirationDate(1301088055);
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_today()
+
+    /**
+     * @group mutators
+     * @expectedException InvalidArgumentException
+     */
+    public function testSetExpirationDate_today()
+    {
+        $this->generator->setExpirationDate(time());
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate_too_late_date()
+
+    /**
+     * @group mutators
+     * @expectedException InvalidArgumentException
+     */
+    public function testSetExpirationDate_too_late_date()
+    {
+        $this->generator->setExpirationDate(2147483648);
+    }
+
+    // }}}
+    // {{{ testSetPassphrase()
+
+    /**
+     * @group mutators
+     */
+    public function testSetPassphrase()
+    {
+        $expectedPassphrase = 'test1';
+        $this->generator->setPassphrase('test1');
+
+        $this->assertAttributeEquals(
+            $expectedPassphrase,
+            'passphrase',
+            $this->generator,
+            'Setting passphrase failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetKeyParams_algorithm()
+
+    /**
+     * @group mutators
+     */
+    public function testSetKeyParams_algorithm()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 1024;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_CERTIFY;
+
+        $this->generator->setKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'keyAlgorithm',
+            $this->generator,
+            'Setting key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'keySize',
+            $this->generator,
+            'Setting key algorithm changed key size.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'keyUsage',
+            $this->generator,
+            'Setting key algorithm changed key usage.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetKeyParams_algorithm_and_size()
+
+    /**
+     * @group mutators
+     */
+    public function testSetKeyParams_algorithm_and_size()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 512;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_CERTIFY;
+
+        $this->generator->setKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN,
+            512
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'keyAlgorithm',
+            $this->generator,
+            'Setting key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'keySize',
+            $this->generator,
+            'Setting key size failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'keyUsage',
+            $this->generator,
+            'Setting key algorithm and size changed key usage.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetKeyParams_algorithm_size_and_usage()
+
+    /**
+     * @group mutators
+     */
+    public function testSetKeyParams_algorithm_size_and_usage()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 512;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_CERTIFY
+            | Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        $this->generator->setKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN,
+            512,
+              Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_CERTIFY
+            | Crypt_GPG_SubKey::USAGE_ENCRYPT
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'keyAlgorithm',
+            $this->generator,
+            'Setting key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'keySize',
+            $this->generator,
+            'Setting key size failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'keyUsage',
+            $this->generator,
+            'Setting key usage failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetKeyParams_invalid_algorithm()
+
+    /**
+     * @group mutators
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testSetKeyParams_invalid_algorithm()
+    {
+        $this->generator->setKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+    }
+
+    // }}}
+    // {{{ testSetKeyParams_invalid_dsa_usage()
+
+    /**
+     * @group mutators
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testSetKeyParams_invalid_dsa_usage()
+    {
+        $this->generator->setKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_DSA,
+            2048,
+            Crypt_GPG_SubKey::USAGE_ENCRYPT | Crypt_GPG_SubKey::USAGE_CERTIFY
+        );
+    }
+
+    // }}}
+    // {{{ testSetSubKeyParams_algorithm()
+
+    /**
+     * @group mutators
+     */
+    public function testSetSubKeyParams_algorithm()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 2048;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        $this->generator->setSubKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'subKeyAlgorithm',
+            $this->generator,
+            'Setting sub-key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'subKeySize',
+            $this->generator,
+            'Setting sub-key algorithm changed key size.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'subKeyUsage',
+            $this->generator,
+            'Setting sub-key algorithm changed key usage.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetSubKeyParams_algorithm_and_size()
+
+    /**
+     * @group mutators
+     */
+    public function testSetSubKeyParams_algorithm_and_size()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 1024;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        $this->generator->setSubKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN,
+            1024
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'subKeyAlgorithm',
+            $this->generator,
+            'Setting sub-key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'subKeySize',
+            $this->generator,
+            'Setting sub-key size failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'subKeyUsage',
+            $this->generator,
+            'Setting sub-key algorithm and size changed key usage.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetSubKeyParams_algorithm_size_and_usage()
+
+    /**
+     * @group mutators
+     */
+    public function testSetSubKeyParams_algorithm_size_and_usage()
+    {
+        $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN;
+        $expectedSize      = 1024;
+        $expectedUsage     = Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_ENCRYPT;
+
+        $this->generator->setSubKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN,
+            1024,
+              Crypt_GPG_SubKey::USAGE_SIGN
+            | Crypt_GPG_SubKey::USAGE_ENCRYPT
+        );
+
+        $this->assertAttributeEquals(
+            $expectedAlgorithm,
+            'subKeyAlgorithm',
+            $this->generator,
+            'Setting sub-key algorithm failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedSize,
+            'subKeySize',
+            $this->generator,
+            'Setting sub-key size failed.'
+        );
+
+        $this->assertAttributeEquals(
+            $expectedUsage,
+            'subKeyUsage',
+            $this->generator,
+            'Setting sub-key usage failed.'
+        );
+    }
+
+    // }}}
+    // {{{ testSetSubKeyParams_invalid_elgamal_usage()
+
+    /**
+     * @group mutators
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testSetSubKeyParams_invalid_elgamal_usage()
+    {
+        $this->generator->setSubKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            2048,
+            Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT
+        );
+    }
+
+    // }}}
+    // {{{ testSetSubKeyParams_invalid_dsa_usage()
+
+    /**
+     * @group mutators
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testSetSubKeyParams_invalid_dsa_usage()
+    {
+        $this->generator->setSubKeyParams(
+            Crypt_GPG_SubKey::ALGORITHM_DSA,
+            2048,
+            Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT
+        );
+    }
+
+    // }}}
+
+    // generate key tests
+    // {{{ testGenerateKeyWithName()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithName()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->generateKey('Test Keypair');
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithNameAndEmail()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithNameAndEmail()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $userId->setEmail('generate-test@example.com');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->generateKey(
+            'Test Keypair',
+            'generate-test@example.com'
+        );
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithNameEmailAndComment()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithNameEmailAndComment()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $userId->setComment('do not use this key');
+        $userId->setEmail('generate-test@example.com');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->generateKey(
+            'Test Keypair',
+            'generate-test@example.com',
+            'do not use this key'
+        );
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithUserId()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithUserId()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $userId->setEmail('generate-test@example.com');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->generateKey(
+            new Crypt_GPG_UserId(
+                'Test Keypair <generate-test@example.com>'
+            )
+        );
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithPassphrase()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithPassphrase()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $userId->setEmail('generate-test@example.com');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(0);
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->setPassphrase('test1')->generateKey(
+            new Crypt_GPG_UserId(
+                'Test Keypair <generate-test@example.com>'
+            )
+        );
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithExpirationDate()
+
+    /**
+     * @group generate-key
+     */
+    public function testGenerateKeyWithExpirationDate()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        // {{{ generate-test@example.com
+        $expectedKey = new Crypt_GPG_Key();
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Test Keypair');
+        $userId->setEmail('generate-test@example.com');
+        $expectedKey->addUserId($userId);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA);
+        $subKey->setLength(1024);
+        $subKey->setExpirationDate(1999998000); // truncated to day
+        $subKey->setCanSign(true);
+        $subKey->setCanEncrypt(false);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey();
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+        $subKey->setLength(2048);
+        $subKey->setExpirationDate(1999998000); // truncated to day
+        $subKey->setCanSign(false);
+        $subKey->setCanEncrypt(true);
+        $subKey->setHasPrivate(true);
+        $expectedKey->addSubKey($subKey);
+        // }}}
+
+        $key = $this->generator->setExpirationDate(2000000000)->generateKey(
+            new Crypt_GPG_UserId(
+                'Test Keypair <generate-test@example.com>'
+            )
+        );
+
+        // @TODO: I've got difference in expiration dates here
+
+        $this->assertKeyEquals($expectedKey, $key);
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithInvalidPrimaryKeyAlgorithm()
+
+    /**
+     * @group generate-key
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testGenerateKeyWithInvalidPrimaryKeyAlgorithm()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        $key = $this->generator
+            ->setKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN)
+            ->generateKey(
+                new Crypt_GPG_UserId(
+                    'Test Keypair <generate-test@example.com>'
+                )
+            );
+    }
+
+    // }}}
+    // {{{ testGenerateKeyWithInvalidSubKeyAlgorithm()
+
+    /**
+     * @group generate-key
+     * @expectedException Crypt_GPG_InvalidKeyParamsException
+     */
+    public function testGenerateKeyWithInvalidSubKeyAlgorithm()
+    {
+        if (!$this->config['enable-key-generation']) {
+            $this->markTestSkipped(
+                'Key generation tests are disabled. To run key generation '
+                . 'tests, enable them in the test configuration. See the '
+                . 'configuration in \'config.php.dist\' for an exampe.'
+            );
+        }
+
+        $key = $this->generator
+            ->setSubKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN)
+            ->generateKey(
+                new Crypt_GPG_UserId(
+                    'Test Keypair <generate-test@example.com>'
+                )
+            );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/KeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,606 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key class test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit KeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Key class.
+ */
+require_once 'Crypt/GPG/Key.php';
+
+/**
+ * User id class.
+ */
+require_once 'Crypt/GPG/UserId.php';
+
+/**
+ * Sub-key class.
+ */
+require_once 'Crypt/GPG/SubKey.php';
+
+/**
+ * Key class tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class KeyTestCase extends Crypt_GPG_TestCase
+{
+    // accessors
+    // {{{ testGetSubKeys()
+
+    /**
+     * @group accessors
+     */
+    public function testGetSubKeys()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $firstSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'C097D9EC94C06363',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785805,
+            'expiration'  => 0,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($firstSubKey);
+
+        $secondSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '9F93F9116728EF12',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => 'C9C65B3BBF040E40D0EA27B79F93F9116728EF12',
+            'length'      => 2048,
+            'creation'    => 1221785821,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($secondSubKey);
+
+        $subKeys = $key->getSubKeys();
+        $this->assertTrue(is_array($subKeys),
+            'Failed to assert returned sub-keys is an array.');
+
+        $this->assertEquals(2, count($subKeys),
+            'Failed to assert number of returned sub-keys is the same as ' .
+            'the number of sub-keys added.');
+
+        $this->assertContainsOnly('Crypt_GPG_SubKey', $subKeys, false,
+            'Failed to assert all returned sub-keys are Crypt_GPG_SubKey ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $subKeys);
+        $this->assertEquals($subKeys[0], $firstSubKey,
+            'Failed to assert the first sub-key is the same as the first ' .
+            'added sub-key.');
+
+        $this->assertArrayHasKey(1, $subKeys);
+        $this->assertEquals($subKeys[1], $secondSubKey,
+            'Failed to assert the second sub-key is the same as the second ' .
+            'added sub-key.');
+    }
+
+    // }}}
+    // {{{ testGetUserIds()
+
+    /**
+     * @group accessors
+     */
+    public function testGetUserIds()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $firstUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Alice',
+            'comment' => 'shipping',
+            'email'   => 'alice@example.com'
+        ));
+
+        $key->addUserId($firstUserId);
+
+        $secondUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Bob',
+            'comment' => 'receiving',
+            'email'   => 'bob@example.com'
+        ));
+
+        $key->addUserId($secondUserId);
+
+        $userIds = $key->getUserIds();
+        $this->assertTrue(is_array($userIds),
+            'Failed to assert returned user ids is an array.');
+
+        $this->assertEquals(2, count($userIds),
+            'Failed to assert number of returned user ids is the same as ' .
+            'the number of user ids added.');
+
+        $this->assertContainsOnly('Crypt_GPG_UserId', $userIds, false,
+            'Failed to assert all returned user ids are Crypt_GPG_UserId ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $userIds);
+        $this->assertEquals($userIds[0], $firstUserId,
+            'Failed to assert the first user id is the same as the first ' .
+            'added user id.');
+
+        $this->assertArrayHasKey(1, $userIds);
+        $this->assertEquals($userIds[1], $secondUserId,
+            'Failed to assert the second user id is the same as the second ' .
+            'added user id.');
+    }
+
+    // }}}
+    // {{{ testGetPrimaryKey()
+
+    /**
+     * @group accessors
+     */
+    public function testGetPrimaryKey()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $firstSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'C097D9EC94C06363',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785805,
+            'expiration'  => 0,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($firstSubKey);
+
+        $secondSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '9F93F9116728EF12',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => 'C9C65B3BBF040E40D0EA27B79F93F9116728EF12',
+            'length'      => 2048,
+            'creation'    => 1221785821,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($secondSubKey);
+
+        $primaryKey = $key->getPrimaryKey();
+
+        $this->assertEquals($firstSubKey, $primaryKey,
+            'Failed to assert the primary key is the same as the first added ' .
+            'sub-key.');
+    }
+
+    // }}}
+    // {{{ testCanSign_none()
+
+    /**
+     * @group accessors
+     */
+    public function testCanSign_none()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => false));
+        $key->addSubKey($subKey);
+
+        $this->assertFalse($key->canSign());
+    }
+
+    // }}}
+    // {{{ testCanSign_one()
+
+    /**
+     * @group accessors
+     */
+    public function testCanSign_one()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => true));
+        $key->addSubKey($subKey);
+
+        $this->assertTrue($key->canSign());
+    }
+
+    // }}}
+    // {{{ testCanSign_all()
+
+    /**
+     * @group accessors
+     */
+    public function testCanSign_all()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => true));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => true));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canSign' => true));
+        $key->addSubKey($subKey);
+
+        $this->assertTrue($key->canSign());
+    }
+
+    // }}}
+    // {{{ testCanEncrypt_none()
+
+    /**
+     * @group accessors
+     */
+    public function testCanEncrypt_none()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => false));
+        $key->addSubKey($subKey);
+
+        $this->assertFalse($key->canEncrypt());
+    }
+
+    // }}}
+    // {{{ testCanEncrypt_one()
+
+    /**
+     * @group accessors
+     */
+    public function testCanEncrypt_one()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => false));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => true));
+        $key->addSubKey($subKey);
+
+        $this->assertTrue($key->canEncrypt());
+    }
+
+    // }}}
+    // {{{ testCanEncrypt_all()
+
+    /**
+     * @group accessors
+     */
+    public function testCanEncrypt_all()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => true));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => true));
+        $key->addSubKey($subKey);
+
+        $subKey = new Crypt_GPG_SubKey(array('canEncrypt' => true));
+        $key->addSubKey($subKey);
+
+        $this->assertTrue($key->canEncrypt());
+    }
+
+    // }}}
+    // {{{ test__toString()
+
+    /**
+     * @group accessors
+     */
+    public function test__toString()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $firstSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'C097D9EC94C06363',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785805,
+            'expiration'  => 0,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertSame((string) $key, '');
+
+        $key->addSubKey($firstSubKey);
+
+        $this->assertSame((string) $key, $firstSubKey->getId());
+    }
+
+    // }}}
+
+    // mutators
+    // {{{ testAddSubKey()
+
+    /**
+     * @group mutators
+     */
+    public function testAddSubKey()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $subKeys = $key->getSubKeys();
+        $this->assertTrue(is_array($subKeys),
+            'Failed to assert returned sub-keys is an array.');
+
+        $this->assertEquals(0, count($subKeys),
+            'Failed to assert there are no sub-keys.');
+
+        // add first sub-key
+        $firstSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'C097D9EC94C06363',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785805,
+            'expiration'  => 0,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($firstSubKey);
+
+        $subKeys = $key->getSubKeys();
+        $this->assertTrue(is_array($subKeys),
+            'Failed to assert returned sub-keys is an array.');
+
+        $this->assertEquals(1, count($subKeys),
+            'Failed to assert number of returned sub-keys is the same as ' .
+            'the number of sub-keys added.');
+
+        $this->assertContainsOnly('Crypt_GPG_SubKey', $subKeys, false,
+            'Failed to assert all returned sub-keys are Crypt_GPG_SubKey ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $subKeys);
+        $this->assertEquals($subKeys[0], $firstSubKey,
+            'Failed to assert the first sub-key is the same as the first ' .
+            'added sub-key.');
+
+        // add second sub-key
+        $secondSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '9F93F9116728EF12',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => 'C9C65B3BBF040E40D0EA27B79F93F9116728EF12',
+            'length'      => 2048,
+            'creation'    => 1221785821,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $key->addSubKey($secondSubKey);
+
+        $subKeys = $key->getSubKeys();
+        $this->assertTrue(is_array($subKeys),
+            'Failed to assert returned sub-keys is an array.');
+
+        $this->assertEquals(2, count($subKeys),
+            'Failed to assert number of returned sub-keys is the same as ' .
+            'the number of sub-keys added.');
+
+        $this->assertContainsOnly('Crypt_GPG_SubKey', $subKeys, false,
+            'Failed to assert all returned sub-keys are Crypt_GPG_SubKey ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $subKeys);
+        $this->assertEquals($subKeys[0], $firstSubKey,
+            'Failed to assert the first sub-key is the same as the first ' .
+            'added sub-key.');
+
+        $this->assertArrayHasKey(1, $subKeys);
+        $this->assertEquals($subKeys[1], $secondSubKey,
+            'Failed to assert the second sub-key is the same as the second ' .
+            'added sub-key.');
+    }
+
+    // }}}
+    // {{{ testAddUserId()
+
+    /**
+     * @group mutators
+     */
+    public function testAddUserId()
+    {
+        $key = new Crypt_GPG_Key();
+
+        $userIds = $key->getUserIds();
+        $this->assertTrue(is_array($userIds),
+            'Failed to assert returned user ids is an array.');
+
+        $this->assertEquals(0, count($userIds),
+            'Failed to assert there are no user ids.');
+
+        // add first user id
+        $firstUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Alice',
+            'comment' => 'shipping',
+            'email'   => 'alice@example.com'
+        ));
+
+        $key->addUserId($firstUserId);
+
+        $userIds = $key->getUserIds();
+        $this->assertTrue(is_array($userIds),
+            'Failed to assert returned user ids is an array.');
+
+        $this->assertEquals(1, count($userIds),
+            'Failed to assert number of returned user ids is the same as ' .
+            'the number of user ids added.');
+
+        $this->assertContainsOnly('Crypt_GPG_UserId', $userIds, false,
+            'Failed to assert all returned user ids are Crypt_GPG_UserId ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $userIds);
+        $this->assertEquals($userIds[0], $firstUserId,
+            'Failed to assert the first user id is the same as the first ' .
+            'added user id.');
+
+        // add second user id
+        $secondUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Bob',
+            'comment' => 'receiving',
+            'email'   => 'bob@example.com'
+        ));
+
+        $key->addUserId($secondUserId);
+
+        $userIds = $key->getUserIds();
+        $this->assertTrue(is_array($userIds),
+            'Failed to assert returned user ids is an array.');
+
+        $this->assertEquals(2, count($userIds),
+            'Failed to assert number of returned user ids is the same as ' .
+            'the number of user ids added.');
+
+        $this->assertContainsOnly('Crypt_GPG_UserId', $userIds, false,
+            'Failed to assert all returned user ids are Crypt_GPG_UserId ' .
+            'objects.');
+
+        $this->assertArrayHasKey(0, $userIds);
+        $this->assertEquals($userIds[0], $firstUserId,
+            'Failed to assert the first user id is the same as the first ' .
+            'added user id.');
+
+        $this->assertArrayHasKey(1, $userIds);
+        $this->assertEquals($userIds[1], $secondUserId,
+            'Failed to assert the second user id is the same as the second ' .
+            'added user id.');
+    }
+
+    // }}}
+
+    // fluent interface
+    // {{{ testFluentInterface
+
+    /**
+     * @group fluent
+     */
+    public function testFluentInterface()
+    {
+        $key = new Crypt_GPG_Key();
+
+        // add first sub-key
+        $firstSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'C097D9EC94C06363',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785805,
+            'expiration'  => 0,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $returnedKey = $key->addSubKey($firstSubKey);
+
+        $this->assertEquals(
+            $key,
+            $returnedKey,
+            'Failed asserting fluent interface works for addSubKey() method.'
+        );
+
+        $firstUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Alice',
+            'comment' => 'shipping',
+            'email'   => 'alice@example.com'
+        ));
+
+        $returnedKey = $key->addUserId($firstUserId);
+
+        $this->assertEquals(
+            $key,
+            $returnedKey,
+            'Failed asserting fluent interface works for addUserId() method.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/SignTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,632 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Signing tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit SignTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests signing abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class SignTestCase extends Crypt_GPG_TestCase
+{
+    public function testHasSignKeys()
+    {
+        $this->assertFalse($this->gpg->hasSignKeys());
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->assertTrue($this->gpg->hasSignKeys());
+    }
+
+    // {{{ testSignKeyNotFoundException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testSignKeyNotFoundException_invalid()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('non-existent-key@example.com');
+        $this->gpg->sign($data);
+    }
+
+    // }}}
+    // {{{ testSignKeyNotFoundException_none()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testSignKeyNotFoundException_none()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->sign($data);
+    }
+
+    // }}}
+    // {{{ testSignBadPassphraseException_missing()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testSignBadPassphraseException_missing()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com');
+        $this->gpg->sign($data);
+    }
+
+    // }}}
+    // {{{ testSignBadPassphraseException_bad()
+
+    /**
+     * @expectedException Crypt_GPG_BadPassphraseException
+     *
+     * @group string
+     */
+    public function testSignBadPassphraseException_bad()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'incorrect');
+        $this->gpg->sign($data);
+    }
+
+    // }}}
+    // {{{ testSignNoPassphrase()
+
+    /**
+     * @group string
+     */
+    public function testSignNoPassphrase()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $signedData = $this->gpg->sign($data);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignNormal()
+
+    /**
+     * @group string
+     */
+    public function testSignNormal()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signedData = $this->gpg->sign($data);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignClear()
+
+    /**
+     * @group string
+     */
+    public function testSignClear()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signedData = $this->gpg->sign($data, Crypt_GPG::SIGN_MODE_CLEAR);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDetached()
+
+    /**
+     * @group string
+     */
+    public function testSignDetached()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signatureData = $this->gpg->sign($data,
+            Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $signatures = $this->gpg->verify($data, $signatureData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDualOnePassphrase()
+
+    /**
+     * @group string
+     */
+    public function testSignDualOnePassphrase()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signedData = $this->gpg->sign($data);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDualNormal()
+
+    /**
+     * @group string
+     */
+    public function testSignDualNormal()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $signedData = $this->gpg->sign($data);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDualClear()
+
+    /**
+     * @group string
+     */
+    public function testSignDualClear()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $signedData = $this->gpg->sign($data, Crypt_GPG::SIGN_MODE_CLEAR);
+
+        $signatures = $this->gpg->verify($signedData);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDualDetached()
+
+    /**
+     * @group string
+     */
+    public function testSignDualDetached()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $signatureData = $this->gpg->sign($data,
+            Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $signatures = $this->gpg->verify($data, $signatureData);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignEmpty()
+
+    /**
+     * @group string
+     */
+    public function testSignEmpty()
+    {
+        $data = '';
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+
+        $signedData = $this->gpg->sign($data);
+        $signatures = $this->gpg->verify($signedData);
+
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignDetachedTextmode()
+
+    /**
+     * @group string
+     */
+    public function testSignDetachedTextmode()
+    {
+        // data with Unix line endings
+        $data = "It was the best of times,\n"
+            . "it was the worst of times,\n"
+            . "it was the age of wisdom,\n"
+            . "it was the age of foolishness,\n"
+            . "it was the epoch of belief,\n"
+            . "it was the epoch of incredulity,\n"
+            . "it was the season of Light,\n"
+            . "it was the season of Darkness,\n"
+            . "it was the spring of hope,\n"
+            . "it was the winter of despair,";
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signatureData = $this->gpg->sign(
+            $data,
+            Crypt_GPG::SIGN_MODE_DETACHED,
+            true,
+            true
+        );
+
+        // convert data to Windows line endings
+        $data = str_replace("\n", "\r\n", $data);
+
+        // verify data
+        $signatures = $this->gpg->verify($data, $signatureData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue(
+                $signature->isValid(),
+                'Failed asserting textmode signature is valid.'
+            );
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileNoPassphrase()
+
+    /**
+     * @group file
+     */
+    public function testSignFileNoPassphrase()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename =
+            $this->getTempFilename('testSignFileNoPassphrase.asc');
+
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->gpg->signFile($inputFilename, $outputFilename);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileNormal()
+
+    /**
+     * @group file
+     */
+    public function testSignFileNormal()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = $this->getTempFilename('testSignFileNormal.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename, $outputFilename);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileClear()
+
+    /**
+     * @group file
+     */
+    public function testSignFileClear()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = $this->getTempFilename('testSignFileClear.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename, $outputFilename,
+            Crypt_GPG::SIGN_MODE_CLEAR);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDetached()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDetached()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = $this->getTempFilename('testSignFileDetached.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename, $outputFilename,
+            Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $signatureData = file_get_contents($outputFilename);
+
+        $signatures = $this->gpg->verifyFile($inputFilename, $signatureData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDetachedToString()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDetachedToString()
+    {
+        $filename = $this->getDataFilename('testFileMedium.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signatureData = $this->gpg->signFile($filename, null,
+            Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $signatures = $this->gpg->verifyFile($filename, $signatureData);
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDualOnePassphrase()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDualOnePassphrase()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename =
+            $this->getTempFilename('testSignFileDualOnePassphrase.asc');
+
+        $this->gpg->addSignKey('no-passphrase@example.com');
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename, $outputFilename);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDualNormal()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDualNormal()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = $this->getTempFilename('testSignFileDualNormal.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $this->gpg->signFile($inputFilename, $outputFilename);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDualClear()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDualClear()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = $this->getTempFilename('testSignFileDualClear.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $this->gpg->signFile($inputFilename, $outputFilename,
+            Crypt_GPG::SIGN_MODE_CLEAR);
+
+        $signatures = $this->gpg->verifyFile($outputFilename);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileDualDetached()
+
+    /**
+     * @group file
+     */
+    public function testSignFileDualDetached()
+    {
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename =
+            $this->getTempFilename('testSignFileDualDetached.asc');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->addSignKey('second-keypair@example.com', 'test2');
+        $this->gpg->signFile($inputFilename, $outputFilename,
+            Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $signatureData = file_get_contents($outputFilename);
+
+        $signatures = $this->gpg->verifyFile($inputFilename, $signatureData);
+        $this->assertEquals(2, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testSignFileFileException_input()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testSignFileFileException_input()
+    {
+        // input file does not exist
+        $inputFilename =
+            $this->getDataFilename('testSignFileFileFileException_input.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename);
+    }
+
+    // }}}
+    // {{{ testSignFileFileException_output()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testSignFileFileException_output()
+    {
+        // input file is encrypted with first-keypair@example.com
+        // output file does not exist
+        $inputFilename  = $this->getDataFilename('testFileMedium.plain');
+        $outputFilename = './non-existent' .
+            '/testSignFileFileException_output.plain';
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $this->gpg->signFile($inputFilename, $outputFilename);
+    }
+
+    // }}}
+    // {{{ testSignFileEmpty()
+
+    /**
+     * @group file
+     */
+    public function testSignFileEmpty()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+
+        $signedData = $this->gpg->signFile($filename);
+        $signatures = $this->gpg->verify($signedData);
+
+        $this->assertEquals(1, count($signatures));
+        foreach ($signatures as $signature) {
+            $this->assertTrue($signature->isValid());
+        }
+    }
+
+    // }}}
+    // {{{ testGetLastSignatureInfo()
+
+    public function testGetLastSignatureInfo()
+    {
+        $this->gpg->addSignKey('first-keypair@example.com', 'test1');
+        $signedData = $this->gpg->sign('test', Crypt_GPG::SIGN_MODE_DETACHED);
+
+        $sigInfo = $this->gpg->getLastSignatureInfo();
+        $this->assertInstanceOf('Crypt_GPG_SignatureCreationInfo', $sigInfo);
+        $this->assertTrue($sigInfo->isValid());
+        $this->assertEquals(date('Y-m-d'), date('Y-m-d', $sigInfo->getTimestamp()));
+        $this->assertEquals(Crypt_GPG::SIGN_MODE_DETACHED, $sigInfo->getMode());
+        $this->assertEquals(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $sigInfo->getKeyFingerprint()
+        );
+        $this->assertNotNull($sigInfo->getHashAlgorithmName());
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/SignatureCreationInfoTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,76 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Unit tests for Crypt_GPG
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+//require_once 'Crypt/GPG/SignatureCreationInfo.php';
+
+/**
+ * Test the signature creation information class
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class SignatureCreationInfoTest extends Crypt_GPG_TestCase
+{
+
+    public function testValidSigCreatedLine()
+    {
+        $sci = new Crypt_GPG_SignatureCreationInfo(
+            'SIG_CREATED D 17 2 00 1440922957 8D2299D9C5C211128B32BBB0C097D9EC94C06363'
+        );
+        $this->assertTrue($sci->isValid());
+        $this->assertEquals(Crypt_GPG::SIGN_MODE_DETACHED, $sci->getMode());
+        $this->assertEquals(1440922957, $sci->getTimestamp());
+        $this->assertEquals(17, $sci->getPkAlgorithm());
+        $this->assertEquals(2, $sci->getHashAlgorithm());
+        $this->assertEquals('sha1', $sci->getHashAlgorithmName());
+        $this->assertEquals(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $sci->getKeyFingerprint()
+        );
+    }
+
+    public function testInvalidSigCreatedLine()
+    {
+        $sci = new Crypt_GPG_SignatureCreationInfo('foo bar');
+        $this->assertNull($sci->getMode());
+        $this->assertFalse($sci->isValid());
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/SignatureTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,586 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Signature class test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit SignatureTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Signature class.
+ */
+require_once 'Crypt/GPG/Signature.php';
+
+/**
+ * Signature class tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class SignatureTestCase extends Crypt_GPG_TestCase
+{
+    // construct
+    // {{{ testConstructFromSignature()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromSignature()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'keyId'       => '0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature($expectedSignature);
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testConstructFromArray()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromArray()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'keyId'       => '0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals('KuhELanvhPRXozEjFWb2mam1q20',
+            $signature->getId());
+
+        $this->assertEquals('8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $signature->getKeyFingerprint());
+
+        $this->assertEquals('0C097D9EC94C06363', $signature->getKeyId());
+
+        $this->assertEquals(1221785858, $signature->getCreationDate());
+        $this->assertEquals(1421785858, $signature->getExpirationDate());
+
+        $this->assertFalse($signature->isValid());
+
+        $this->assertEquals('Alice <alice@example.com>',
+            strval($signature->getUserId()));
+    }
+
+    // }}}
+
+    // accessors
+    // {{{ testGetId()
+
+    /**
+     * @group accessors
+     */
+    public function testGetId()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals('KuhELanvhPRXozEjFWb2mam1q20', $signature->getId());
+    }
+
+    // }}}
+    // {{{ testGetKeyFingerprint()
+
+    /**
+     * @group accessors
+     */
+    public function testGetKeyFingerprint()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals('8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $signature->getKeyFingerprint());
+    }
+
+    // }}}
+    // {{{ testGetKeyId()
+
+    /**
+     * @group accessors
+     */
+    public function testGetKeyId()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'keyId'       => '0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals('0C097D9EC94C06363', $signature->getKeyId());
+    }
+
+    // }}}
+    // {{{ testGetCreationDate()
+
+    /**
+     * @group accessors
+     */
+    public function testGetCreationDate()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals(1221785858, $signature->getCreationDate());
+    }
+
+    // }}}
+    // {{{ testGetExpirationDate()
+
+    /**
+     * @group accessors
+     */
+    public function testGetExpirationDate()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertEquals(1421785858, $signature->getExpirationDate());
+    }
+
+    // }}}
+    // {{{ testIsValid()
+
+    /**
+     * @group accessors
+     */
+    public function testIsValid()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $this->assertTrue($signature->isValid());
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+
+        $this->assertFalse($signature->isValid());
+    }
+
+    // }}}
+    // {{{ testGetUserId()
+
+    /**
+     * @group accessors
+     */
+    public function testGetUserId()
+    {
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'  => 'Alice',
+            'email' => 'alice@example.com'
+        ));
+
+        $this->assertEquals($expectedUserId, $signature->getUserId());
+    }
+
+    // }}}
+
+    // mutators
+    // {{{ testSetId()
+
+    /**
+     * @group mutators
+     */
+    public function testSetId()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'something different',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setId('KuhELanvhPRXozEjFWb2mam1q20');
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetKeyFingerprint()
+
+    /**
+     * @group mutators
+     */
+    public function testSetKeyFingerprint()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => 'bad fingerprint',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetKeyId()
+
+    /**
+     * @group mutators
+     */
+    public function testSetKeyId()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'keyId'       => '0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'keyId'       => 'bad key id',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setKeyId('0C097D9EC94C06363');
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetCreationDate()
+
+    /**
+     * @group mutators
+     */
+    public function testSetCreationDate()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1111111111,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setCreationDate(1221785858);
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate()
+
+    /**
+     * @group mutators
+     */
+    public function testSetExpirationDate()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 0,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setExpirationDate(1421785858);
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetValid()
+
+    /**
+     * @group mutators
+     */
+    public function testSetValid()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => false,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature->setValid(true);
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+    // {{{ testSetUserId()
+
+    /**
+     * @group accessors
+     */
+    public function testSetUserId()
+    {
+        $expectedSignature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Alice <alice@example.com>'
+        ));
+
+        $signature = new Crypt_GPG_Signature(array(
+            'id'          => 'KuhELanvhPRXozEjFWb2mam1q20',
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'valid'       => true,
+            'userId'      => 'Bob <bob@example.com>'
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Alice',
+            'email' => 'alice@example.com'
+        ));
+
+        $signature->setUserId($userId);
+
+        $this->assertEquals($expectedSignature, $signature);
+    }
+
+    // }}}
+
+    // fluent interface
+    // {{{ testFluentInterface
+
+    /**
+     * @group fluent
+     */
+    public function testFluentInterface()
+    {
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setId('KuhELanvhPRXozEjFWb2mam1q20');
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setId() method.'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363'
+        );
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setKeyFingerprint() ' .
+            'method.'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setKeyId('0C097D9EC94C06363');
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setKeyId() method'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setCreationDate(1234567890);
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setCreationDate() ' .
+            'method.'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setExpirationDate(1234567890);
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setExpirationDate() ' .
+            'method.'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setValid(true);
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setValid() method.'
+        );
+
+        $signature         = new Crypt_GPG_Signature();
+        $returnedSignature = $signature->setUserId(new Crypt_GPG_UserId());
+        $this->assertEquals(
+            $signature,
+            $returnedSignature,
+            'Failed asserting fluent interface works for setUserId() method.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/SubKeyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1019 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Sub-key class test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit SubKeyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Sub-key class.
+ */
+require_once 'Crypt/GPG/SubKey.php';
+
+/**
+ * Sub-key class tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class SubKeyTestCase extends Crypt_GPG_TestCase
+{
+    // construct
+    // {{{ testConstructFromString()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromString()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'length'      => 2048,
+            'creation'    => 1221528655,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'isRevoked'   => true
+        ));
+
+        $string = 'sub:r:2048:16:8C37DBD2A01B7976:1221528655::::::e:';
+        $subKey = new Crypt_GPG_SubKey($string);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testConstructFromSubKey()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromSubKey()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true,
+            'isRevoked'   => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey($expectedSubKey);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testConstructFromArray()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromArray()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true,
+            'isRevoked'   => true
+        ));
+
+        $this->assertEquals('8C37DBD2A01B7976', $subKey->getId());
+        $this->assertEquals(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            $subKey->getAlgorithm());
+
+        $this->assertEquals('8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $subKey->getFingerprint());
+
+        $this->assertEquals(2048, $subKey->getLength());
+        $this->assertEquals(1221785858, $subKey->getCreationDate());
+        $this->assertEquals(1421785858, $subKey->getExpirationDate());
+        $this->assertFalse($subKey->canSign());
+        $this->assertTrue($subKey->canEncrypt());
+        $this->assertTrue($subKey->hasPrivate());
+        $this->assertTrue($subKey->isRevoked());
+    }
+
+    // }}}
+
+    // parse
+    // {{{ testParse()
+
+    /**
+     * @group parse
+     */
+    public function testParse()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'length'      => 2048,
+            'creation'    => 1221528655,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'isRevoked'   => true
+        ));
+
+        $string = 'sub:r:2048:16:8C37DBD2A01B7976:1221528655::::::e:';
+        $subKey = Crypt_GPG_SubKey::parse($string);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+
+        // test parsing 'usage' flags
+        $string = 'sub:r:2048:16:8C37DBD2A01B7976:1221528655::::::esca:';
+        $subKey = Crypt_GPG_SubKey::parse($string);
+        $usage  = Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT
+            | Crypt_GPG_SubKey::USAGE_CERTIFY | Crypt_GPG_SubKey::USAGE_AUTHENTICATION;
+
+        $this->assertEquals($usage, $subKey->usage());
+    }
+
+    // }}}
+    // {{{ testParseCreationDateIso()
+
+    /**
+     * @group parse
+     */
+    public function testParseCreationDateIso()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'length'      => 2048,
+            'creation'    => 1221442255,
+            'expiration'  => 0,
+            'canSign'     => false,
+            'canEncrypt'  => true
+        ));
+
+        $string = 'sub:u:2048:16:8C37DBD2A01B7976:20080915T013055::::::e:';
+        $subKey = Crypt_GPG_SubKey::parse($string);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+
+    // accessors
+    // {{{ testGetId()
+
+    /**
+     * @group accessors
+     */
+    public function testGetId()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals('8C37DBD2A01B7976', $subKey->getId());
+    }
+
+    // }}}
+    // {{{ testGetAlgorithm()
+
+    /**
+     * @group accessors
+     */
+    public function testGetAlgorithm()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            $subKey->getAlgorithm());
+    }
+
+    // }}}
+    // {{{ testGetFingerprint()
+
+    /**
+     * @group accessors
+     */
+    public function testGetFingerprint()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals('8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            $subKey->getFingerprint());
+    }
+
+    // }}}
+    // {{{ testGetLength()
+
+    /**
+     * @group accessors
+     */
+    public function testGetLength()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals(2048, $subKey->getLength());
+    }
+
+    // }}}
+    // {{{ testGetCreationDate()
+
+    /**
+     * @group accessors
+     */
+    public function testGetCreationDate()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals(1221785858, $subKey->getCreationDate());
+    }
+
+    // }}}
+    // {{{ testGetExpirationDate()
+
+    /**
+     * @group accessors
+     */
+    public function testGetExpirationDate()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertEquals(1421785858, $subKey->getExpirationDate());
+    }
+
+    // }}}
+    // {{{ testCanSign()
+
+    /**
+     * @group accessors
+     */
+    public function testCanSign()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertTrue($subKey->canSign());
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertFalse($subKey->canSign());
+    }
+
+    // }}}
+    // {{{ testCanEncrypt()
+
+    /**
+     * @group accessors
+     */
+    public function testCanEncrypt()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertTrue($subKey->canEncrypt());
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertFalse($subKey->canEncrypt());
+    }
+
+    // }}}
+    // {{{ testUsage()
+
+    /**
+     * @group accessors
+     */
+    public function testUsage()
+    {
+        $usage = Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT
+            | Crypt_GPG_SubKey::USAGE_CERTIFY | Crypt_GPG_SubKey::USAGE_AUTHENTICATION;
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'usage'       => $usage,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertSame($usage, $subKey->usage());
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertSame(Crypt_GPG_SubKey::USAGE_SIGN, $subKey->usage());
+    }
+
+    // }}}
+    // {{{ testHasPrivate()
+
+    /**
+     * @group accessors
+     */
+    public function testHasPrivate()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $this->assertTrue($subKey->hasPrivate());
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => false
+        ));
+
+        $this->assertFalse($subKey->hasPrivate());
+    }
+
+    // }}}
+    // {{{ testIsRevoked()
+
+    /**
+     * @group accessors
+     */
+    public function testIsRevoked()
+    {
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true,
+            'isRevoked'   => true
+        ));
+
+        $this->assertTrue($subKey->isRevoked());
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => false,
+            'isRevoked'   => false
+        ));
+
+        $this->assertFalse($subKey->isRevoked());
+    }
+
+    // }}}
+
+    // mutators
+    // {{{ testSetId()
+
+    /**
+     * @group mutators
+     */
+    public function testSetId()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => 'something different',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setId('8C37DBD2A01B7976');
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetAlgorithm()
+
+    /**
+     * @group mutators
+     */
+    public function testSetAlgorithm()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetFingerprint()
+
+    /**
+     * @group mutators
+     */
+    public function testSetFingerprint()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => 'something different',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setFingerprint('8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetLength()
+
+    /**
+     * @group mutators
+     */
+    public function testSetLength()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setLength(2048);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetCreationDate()
+
+    /**
+     * @group mutators
+     */
+    public function testSetCreationDate()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1111111111,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setCreationDate(1221785858);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetExpirationDate()
+
+    /**
+     * @group mutators
+     */
+    public function testSetExpirationDate()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1111111111,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setExpirationDate(1421785858);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetCanSign()
+
+    /**
+     * @group mutators
+     */
+    public function testSetCanSign()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => true,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_DSA,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 1024,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setCanSign(true);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetCanEncrypt()
+
+    /**
+     * @group mutators
+     */
+    public function testSetCanEncrypt()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => true,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $subKey->setCanEncrypt(true);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetHasPrivate()
+
+    /**
+     * @group mutators
+     */
+    public function testSetHasPrivate()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => false
+        ));
+
+        $subKey->setHasPrivate(true);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+    // {{{ testSetRevoked()
+
+    /**
+     * @group mutators
+     */
+    public function testSetRevoked()
+    {
+        $expectedSubKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => false,
+            'isRevoked'   => true
+        ));
+
+        $subKey = new Crypt_GPG_SubKey(array(
+            'id'          => '8C37DBD2A01B7976',
+            'algorithm'   => Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC,
+            'fingerprint' => '8D2299D9C5C211128B32BBB0C097D9EC94C06363',
+            'length'      => 2048,
+            'creation'    => 1221785858,
+            'expiration'  => 1421785858,
+            'canSign'     => false,
+            'canEncrypt'  => false,
+            'hasPrivate'  => false,
+            'isRevoked'   => false
+        ));
+
+        $subKey->setRevoked(true);
+
+        $this->assertEquals($expectedSubKey, $subKey);
+    }
+
+    // }}}
+
+    // fluent interface
+    // {{{ testFluentInterface
+
+    /**
+     * @group fluent
+     */
+    public function testFluentInterface()
+    {
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setId('8C37DBD2A01B7976');
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setId() method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setAlgorithm(
+            Crypt_GPG_SubKey::ALGORITHM_DSA
+        );
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setAlgorithm() method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363'
+        );
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setFingerprint() ' .
+            'method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setLength(2048);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setLength() method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setCreationDate(1234567890);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setCreationDate() ' .
+            'method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setExpirationDate(1234567890);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setExpirationDate() ' .
+            'method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setCanSign(true);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setCanSign() method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setCanEncrypt(true);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setCanEncrypt() ' .
+            'method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setHasPrivate(true);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setHasPrivate() ' .
+            'method.'
+        );
+
+        $subKey         = new Crypt_GPG_SubKey();
+        $returnedSubKey = $subKey->setRevoked(true);
+        $this->assertEquals(
+            $subKey,
+            $returnedSubKey,
+            'Failed asserting fluent interface works for setRevoked() method.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/TestCase.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,791 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * PHPUnit AllTests suite for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2013 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * The Crypt_GPG class to test
+ */
+require_once 'Crypt/GPG.php';
+
+/**
+ * Key class definition
+ */
+require_once 'Crypt/GPG/Key.php';
+
+/**
+ * Signature class definition
+ */
+require_once 'Crypt/GPG/Signature.php';
+
+/**
+ * Abstract base class for testing Crypt_GPG.
+ *
+ * Test keyring contains:
+ *
+ * 1) first-keypair@example.com - passphrase 'test1'
+ *    A public-private key pair that can be used to both encrypt and decrypt.
+ *
+ * 2) second-keypair@example.com - passphrase 'test2'
+ *    A public-private key pair that can be used to both encrypt and decrypt.
+ *
+ * 3) public-only@example.com - passphrase 'test'
+ *    A public key with no private key. Used for testing private key import.
+ *
+ * 4) no-passphrase@example.com - no passphrase
+ *    A public-private key pair that can be used to both encrypt and decrypt
+ *    with no passphrase.
+ *
+ * 5) external-public@example.com - passphrase 'test'
+ *    A public key that does not initially exist in the keyring that can be
+ *    imported.
+ *
+ * 6) multiple-subkeys@example.com - passphrases 'test1' and 'test2'
+ *    A public-private key pair that has multiple encrypting subkeys. The
+ *    first subkey is an ELG-E key. The second is an RSA key.
+ */
+abstract class Crypt_GPG_TestCase extends PHPUnit_Framework_TestCase
+{
+    // {{{ class constants
+
+    const HOMEDIR = 'test-keychain';
+
+    const TEMPDIR = 'temp-files';
+
+    const DATADIR = 'data-files';
+
+    // }}}
+    // {{{ protected properties
+
+    protected $gpg;
+
+    // }}}
+    // {{{ getOptions()
+
+    protected function getOptions()
+    {
+        return array(
+            'homedir' => __DIR__ . '/' . self::HOMEDIR,
+//            'binary' => '/usr/bin/gpg2',
+//            'binary' => '/usr/local/bin/gpg2',
+//            'agent'  => '/usr/local/bin/gpg-agent',
+//            'gpgconf'  => '/usr/local/bin/gpgconf',
+//            'cipher-algo' => 'AES256',
+//            'digest-algo' => 'SHA512',
+//            'debug'  => true
+        );
+    }
+
+    // }}}
+
+    // set up
+    // {{{ setUp()
+
+    public function setUp()
+    {
+        // load test configuration file if it exists
+        $configFilename = __DIR__ . '/config.php';
+        if (file_exists($configFilename)) {
+            include $configFilename;
+
+            if (   !isset($GLOBALS['Crypt_GPG_Unittest_Config'])
+                || !is_array($GLOBALS['Crypt_GPG_Unittest_Config'])
+            ) {
+                $this->markTestSkipped(
+                    'Unit test configuration is incorrect. Please read the '
+                    . 'documentation in TestCase.php and fix the '
+                    . 'configuration file. See the configuration in '
+                    . '\'config.php.dist\' for an example.'
+                );
+            }
+
+            $this->config = $GLOBALS['Crypt_GPG_Unittest_Config'];
+        } else {
+            $this->config = array();
+        }
+
+        // default test config values
+        if (!isset($this->config['enable-key-generation'])) {
+            $this->config['enable-key-generation'] = false;
+        }
+
+        $this->_setUpKeyring();
+        $this->_setUpTempdir();
+
+        $this->gpg = new Crypt_GPG($this->getOptions());
+    }
+
+    // }}}
+    // {{{ _setUpKeyring()
+
+    private function _setUpKeyring()
+    {
+        // {{{ pubring data
+        $pubringData = <<<TEXT
+mQGiBEjS+M0RBADIuG1okbW2FPjlx1MKYthiN0rRcoN0P3H1G+0x6vMIV0YE
+frHAJ7PQUo+cOYr1tAW8EquhUar/cAZSwRysMrYsQRggljxQKstToh36mcwt
+dItIatGPSafkP7Y8tfPg/OG4n1LWvU/qc5qW0eUsrbtek3j3Ot96blZPPOki
++1p49wCg/NPaBcQz6fK6EwcI4M9icarEQJ0EAJdaVeJ1MOsBphcKkCQHtmId
+uMQgmaJLidVJOl8tIXgAr6Hu2pGQkk7urGAzzzJ24jWzHJLqiEx/ex86sH1R
+sHQctqcQhJU8YyYlO6e4R5nCdRiDYOAj1+rzogTTUpyngyQamTyAh7LnA/CC
+MUOdwdduB4uCYsFF6VprJFy1FYx5A/9V/hpfeILigh/XVb3sWYdUyBRbxUoh
+z25ItI7jkDLMlxN00w+IdUYEwl9bA8mmBf+q2BryLuoStg25krbC/KgEZbAT
+EWhk+/A0j8nuEPn8A/Z8KqcLxFsCUwF690w7an/3WxAwVOumXhOKKEHosXkw
+rS8AnfuIFq/atqy4EslP5bRgRmlyc3QgS2V5cGFpciBUZXN0IEtleSAoZG8g
+bm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0aGlzIGtleSkgPGZp
+cnN0LWtleXBhaXJAZXhhbXBsZS5jb20+iGAEExECACAFAkjS+M0CGwMGCwkI
+BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDAl9nslMBjY2Y5AJ9vqmYB60lHF053
+EC+ChvLNqrbxqwCfd7nMcmun0yeA7wt1KKdZExHz/niwAgADuQINBEjS+N0Q
+CAD0p6PxTdTGFbABAA/KO8CkEqFYKfzu5gjB5jTK/awyrKYEp4KciexxnxGb
+vVEg5M+C1Pg9NNFFwPDTl/HagLWqH8lMcKoFaXcz+Xfgwayuunu64/BXRsuK
+AlQi0L6VzjUOaei3xCcEVv/ZqLQxM2uyOfyAysMVDT2BFIwf6qma09ttg0bp
+L8eMt+dXBjBSyDWz5WC5gbgLX5B+VfQpnLL+DUvvh0qeHY9qmLYAca+qQnoj
+956QRihzlNSjrlNrlyCYdXtFGfku91mA2PQghb5S7ifREiKH+6Iqk4FtioMq
+rRko34u54yWMhfClRGtcmDb1ebp7yKIikljpQj6hkw9DAAMFB/4p8yiZuNwo
+RFgJpRbLvOytac9iIlZs2mASMbABouqcUBLELqM+mOfmRgcJH2xFrmBJoIqB
+ICUAkau3DR05oNkVTuFbtzIvNhxd5ES/2T45bAtqyHRDIvjwnr4ruN49h4FF
+6jAeW+zFAnGeXXOOhdmWxxz7VGYXfmNHi5x1csx5KM4qEt+kiQ+KYPN7vsSE
+PnuuO3OqyZ/pqZ2UQMtQAZ1bnLocgQ7GtBnSXCk2QgIg/sMgJoQVX5h8Ohvu
+COCNkskBKmNzY7vfiG4JvGPG9RjyUpTJj2ewy0MoKYURhUXtnW7uMZ1T8OeB
+/XtpBRRxGmmsm1aqabMi4MiXgh9lwikgiEkEGBECAAkFAkjS+N0CGwwACgkQ
+wJfZ7JTAY2NeZQCg+HiigBkll6E00g9iWeO7jyDFEQUAn3ApGah7qCFj4YXN
+1gZYqXhNEGb+sAIAA5kBogRI0vjdEQQA6muODLpYwTuvR3dsizYHVX76b+5/
+uieTqwogt/P7I7/Kl0UakAu8znwdZj2TMpCZOwViii3LRYFSDeSJLXnGen2p
+C9nLIGa6vfX0H4UNNhmQF5jbxQb99Dy6j1NvS+CbwCWfftKcfbnTriDGG1yE
+o376R/w6CpBAYq8AHFfudcMAoJk5XtcR+6RDgKPHzsmORSR1V5uFA/9sVB2V
+KcjginNKn39j6y2JHqISNrKP3AUsrXtxXFV7ZfYbSv2O9+g1xKqzYsOMJ5VU
+/eicJI/Hr81HLpJj0o9ITCUuWnXaaoHQqlLUUroEDwQUjI1hJkWE2WK2xNTQ
+cbhDj8JGzKSlC/z4IxqKo/0rlXHXYU4bwL8iEkOVeTEOOQP+PLuqQselyQr6
+ia2LHcfcPicZgawCRA0S0voD8gx/XFBPsvMLOcs6/lrkMnhhVChwoJJDa+2Z
+3/GrgmVqfrelOPfj9VtQZFjsZeqzI4hZ6CFv2F9zoZr+VXQe6IYtTG4CF8ta
+R/5y8JJPy8pNSLLJZOovVqnWhqLqXAHhXth6d3K0YlNlY29uZCBLZXlwYWly
+IFRlc3QgS2V5IChkbyBub3QgZW5jcnlwdCBpbXBvcnRhbnQgZGF0YSB3aXRo
+IHRoaXMga2V5KSA8c2Vjb25kLWtleXBhaXJAZXhhbXBsZS5jb20+iGAEExEC
+ACAFAkjS+N0CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRADzIkK+h2t
+S6ABAJ9v/n4fzkM+j1xvcwS3KyRX9z/MZgCggnwY1kgfhz3ia+RZ+TCReLgp
+432wAgADuQINBEjS+OEQCADki2EIirxY5TUI6z2qzBEpeSTLWyZslECgakJT
+Eybr6JinXQOERKuql2tuDn/llKiCsYf4wMIH17OfA92GFoL9ml+qupVICoXC
+6gCFU2X0RQ5+kfiQjorKte/LHuVDD9oPdf1EfZkrjPxypuKIHEvoVz3eMg/g
+IR281GYD51mW8ifx0be11lPgsuvS/eJxwzEG32KQYundWuHTuvNzRt2CV7a5
+SOCv0NPXrl3xR3qqHMh54eHiUUjh18iamq8JTTP2E49XVpoBWyevDckjjTq1
+BC+I8neLm2+KDZkJ0xqUL5iSqHELUb08SgBWe2geb3lSlUyTc8ozubz0SVoM
+NRM7AAMFB/9UvQ5E4BXLTm9GLDnjrSpmJxc1cY0DRmwY2jITRw0174MRxnVm
+Ooe7spf/nJzzaAnHPrFJeDm+aIBNwTSwDrIOE8rr52ABfBhJPRHpwkw54HqX
+fi+CuS+JavAXvnFoBbPb1YVwj/XdAks6P9xaSeVqrCKpNNVOUCs3uIlrxtal
+SubyVhHv99wOyRR2X/q1veZ5SXsMqngwChZbiQNFLG8dRXH08GzInCYy+xq0
+KGB306ltEUC91yIjDXUaAVbivQi9S7UsYm34PtGqJGpOEnkF27bv5DMnS3wU
+RMPHyha4EpiUsTig+tieiflOWpvKr0P546iAJOmAN8b3B3fyFO4OiEkEGBEC
+AAkFAkjS+OECGwwACgkQA8yJCvodrUsu+gCfZEfLQC9nxeeMQiTwAoAQoork
+GE8An3OSljAgQACg/b7LvUpWPH7GjtjSsAIAA5kBogRI0vjiEQQAj5dNt6fo
+yJ1olLXO80gVNQ+Jr+Ns0jsD3Qt+z5/+MfRcoSDlxCwkU6bJwMPa0+kdwbwA
+uLjuvH8Y8RQsE6bGutEbB8OG8KUgGLn9LeV4PhkCK4rZZlx1WMJLtx5IeEr7
+9KrnpqKBrifZS8CB2nC/+FtXUxywdq86J9E+JMexMWcAoP1ypUQ/c2250DoI
+59BGkvH3EpvhA/9SDH5As+WnPWN4wVJXAKzmXDpU688bLfojGZuH9H4fHRQg
+mkTdImlS0nQjWhb2ymyWGWndcN4xQDFPW1/N35aoFdcDDzvzXp3zInQSKrCs
+4LbWkKOVZo1j7cMjiVzg0dpRykEdoRQpCCpRzDy1d2sAhlfIk8ok2TCYq3bb
+37NuqAP/Uk2K6Psgfcqx7n3X4zNbvEm0iISuo1KKtmoyzx2ixdp0WWcr9YJ5
+M0RXfv1cXMenMKfEHei+M/tLFN6TEuF/K7dr6opStprINVax54xoBSH5nyL2
+ORJq4TcxMel/Nn20fX/JcC8uTf4D5t9untMUsNa1nUdeVbpCT25iup3/6S+0
+XFB1YmxpYyBPbmx5IFRlc3QgS2V5IChkbyBub3QgZW5jcnlwdCBpbXBvcnRh
+bnQgZGF0YSB3aXRoIHRoaXMga2V5KSA8cHVibGljLW9ubHlAZXhhbXBsZS5j
+b20+iGAEExECACAFAkjS+OICGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK
+CRCrqB71TowN6/A2AJ9fw6xeY8N9T9y+jJVnXpS7keDzpwCfSLeyMp3yWpWC
+B6AFrWNsZJE7E/qwAgADuQINBEjS+OgQCACnrlHnvwSzyq0BIMCAhth8mUlP
+Ayi8ScDgonr2alW3ebNwVYy0kK+6KW/BJBD5V8rGN6a1t78hsx72yyPidNIv
+D+bB5QHz21GPxnNpL7/3fXYBLytr/EgOvqRNJ8pxEqNeAzOQn4DXetjAbksV
+afK6aDfrGCWbNcqF5wSRFU99afchKirfOKtmVA5Zwph3IDZnrzlIokL837ed
+Soo4nuqsDt5PrTwsWSzK0Ed4581/mbsILjAATdEDP5mQm9ZFsTYbmlRqVmS2
+ry4oxPlZCC+4U/eGe+S7nKKWmjYQtOdiQ7eW1zc0cJz2/6OGKRrI+vtG9R1U
+9tohNPzTJgoE/KALAAMGCACnNHW9b9+/Oas7mlbMC93i6ZWH9infife9bJcy
+74kgcDuzTyuRPOUxfNqYgJCaSPAC4LAm3S3sEDbwufKCiHaOjGjy0T86jAWT
+4jNt4DZWvPvV39PlIwO0LaZ48TSbduYI4sGxy7lokh+CLVf9/Ovjh/iL7qGp
+UMK446adW1svjEEGdLopd1xY/tBtWHEbdKkf0CB39Be9JCbQ5vP2IpnXUURf
+OCdVkZdoIzQYGwUT0m41jn6GLoDvatxyOELRXULLje954iE4T6/ekrRr8EZS
+WANJ2BWikT3NRJDDO6jztRtjcSgNYGoNFJEJEx+a/xLZv1UkhE90I4dkYIhH
+j3/RiEkEGBECAAkFAkjS+OgCGwwACgkQq6ge9U6MDes2wACglTZ6U7J87L1I
+J2z50EaPAfUfz5kAoMItiWMqx9kgL7JJWsTaCTBBL2CSsAIAA5kBogRI0vjp
+EQQAsp9tAVefPsdHNhauPUy7a1kAQk/VcZzXXglCeLBIKJkxFIWF7iwCe1Jj
+kcI4U9epdl+xCSl2RHxG32SPI/4mJ6SAaf4mLbGfMumze9MHXjaUbWZAdwrt
+ZlOQunf7YcNE5nnVvd20NOsDLcwRDxELjjPmI4ikGY44KhZpZ+U93LcAoOm/
+x/P/94xGtjeSfFOMkzsWY8VDA/0Tl/7rSwzSl/nUy8uvbkK5a/eLWm8LM6QY
+HU2DMM4Hn4FGA3Ue3rFjOa2eTDCV/ZT83njzD39P+0ZZYWAOF4CexL81UxjQ
+Li+OS1SaxvQeXYcKwoaChTVLQnyDUutbqz3YVEAPGM5lMSPog4AZA+Bboy6I
+fMMPqcbqSUbGGW9/YgP9GSSmTniDdyclKyJakqhDRuePR9PmOEwubfGIsWnw
+fHzwY5TM9PsRjEd18W/Fhw/lxXbpa/7FWeFmdNGLThoUv92Re6hq8QggawgI
+w0XT86mhdeZzGqoCKIDiDi+Y/cCOsEaTLCQcRG7bVkf/SuAV4Qa4sIPar+L2
+psMxTNLdry20c05vIFBhc3NwaHJhc2UgUHVibGljIGFuZCBQcml2YXRlIFRl
+c3QgS2V5IChkbyBub3QgZW5jcnlwdCBpbXBvcnRhbnQgZGF0YSB3aXRoIHRo
+aXMga2V5KSA8bm8tcGFzc3BocmFzZUBleGFtcGxlLmNvbT6IYAQTEQIAIAUC
+SNL46QIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEJRWP7OYraayJmcA
+oMNHBJD2jyN3z33NoeWeo+E8rh0mAJ9GYB60jPdeAy8QI8HecG15bd7kAbAC
+AAO5Ag0ESNL49RAIAIXsIpwvcwlLHQ6umozXTM7ZEysroWbjQf+2tMQVrktr
+oFKGwBFOePXOwblGMPAfaqVtZK2+WQzmv7M1jehZFqMicChujzqd/GwEgmdC
+S90C3K0hBDY3ZqrI1oIEBMHxWk3m9eTyxDyUFtZuVoA99Qn+RwgUUJjzILCN
+q/Vw4ixSZvAXSeiU7VfVB8AmzP5AO1N0ay99LlX63iWIT3qUL45H1OumcxwA
+45qbtnfIjHntSO3efNTXnGBvVPOy2X9l6/a9puGJohjucP6ClcjF7iXzQIDE
+jLvRCBfsIQRXUI5WdpxH8H9CtaFPxKHdZSk0QBWHKQ5cITuTNfKSHHOICPsA
+AwUH/3eSEg0w7oq4JMhTotbCcZP2rw9dDTb5ml2MXNoE2BezWrZKtE9Mdm3o
+VsDWztw4WTha2apY/ppIPS0cf0NFzL4mnNV9IpbNtDHUtj0mvMJIPAQvtkVW
+1eg6zQMhfhNvvaXpxrpU4CrDyMm59GswYFZH6EQY6U7vA/MRR/gEmmVLfvOd
+KMpxZQ5gF1n6lOaXEzFRJ8viq2Otkukwx9syxHyCSive6EblPRfOgFGwCJ+e
++X1ByZ84BKHpcSiU1lpQwh/SD6t+2a0rTXjgalEYM7bbzGi+/84XFTyBMPVh
+YBvEwhKWDToPsdIKhExzNqyEQXRn44GkmO0/X16MYopL9+yISQQYEQIACQUC
+SNL49QIbDAAKCRCUVj+zmK2mssJkAJ4w2M8MHaIPkYpvqR90/MxdVu2//QCg
+p2ZC6a2/GIe2BP5mS6M9tDGfHluwAgADmQGiBEl4ENcRBADgb5JDz1lPibkg
+MZST2QY+PFwmcC3efMofGvWcn5u1aJLEfFpXn1uWKfkzNX+Jh7cZeAeNAR8o
+YBW0CfKyajuH0AX7l5T4CU2cNpG4Q5spuJH39BCdY273uWwurPuVaHPD7Eip
+tNQ32VbybtewywlzXMSA0BbaM5VKuxuSlvBRcwCg03MvTxS/jIGWUb2XV2xQ
+ZLTvFKkEAM1tE1xfw29L0IWWZTD9peI/4SqBuxd9qDigVMrsVidDsYN9T6c6
+k5xUVtMspULtSoH0t2upBXuJ6ZlQKt1QdWo1UVFuF9ynQ2qlH3MxHNivDG9o
+8FFgmheuILJHx5uYFxrWrMwNIk2t2ehv3PteoDnKNDr7uNg+mt/olD6c6CUJ
+BACLI8kzNsYIrB8RFxA3lWf0uOFrSO08EQZ0DcqQ0KjTcdu4WAqfOW/ZOOWw
+mfHN5xoqiP84u3pltvMUWp+wCSlJABRmFqqvWubuC5Sd62UVk/jBl8foARcA
+tIm834sdbXDeMyn7eRELncVCnO3AxGt0XYYzHNK9O1LQIY+AEZAQO7QvTXVs
+dGlwbGUgU3Via2V5cyA8bXVsdGlwbGUtc3Via2V5c0BleGFtcGxlLmNvbT6I
+XwQTEQIAIAUCSXgQ1wIbIwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJELB6
+Yh3JKVdlxsIAl32oUkCLg7uFrEdeHj3G71wzsBQAn1EBu2ZgIJKZl3nEZgpE
+Vw27r+HWsAIAA7kCDQRJeBDfEAgA9Q7WE6GIdFw823k3JjB93ssF+3iyOUZK
+Fd9F/lDa/v5OCOVWwNYNZmgWnsB0xvoB81/Y+NcnV3IlSZExhLiPSJg+FI6h
+kuMAWPP+y0Cjh8Vg70Udu7agZewV9PyJozVZxgTmOWQ+f4I5tihykFRGrvIg
+iKqBnJRoF9sjoVRrOsLYwP4evEaaBoIwGBULS3B40LhjIn1e6klIFCfVb71j
+W3Zor6q3x1tr0zodXLPhi5c82JFeriiq4+h5epeBZ8qr3FJAW1u17IRJFVge
+iabxn85My9y0aLJOC98VvwF0BQFWxZLdzxUtopEbCHusFDImdknRkydFcABa
+NsQLBKAWmwADBggAsW+T1T10ZF6+pFX3JTwE7U1GERLDljnyuya0ptsB+e9j
+OiEUqDjQKq2x6vaQzpTi1c/3luGtKBQd/6h4387wgkvXNzjM0lzHPsiKFeLK
+L3z+6th9ympMF7ZwTFSBHNrbVKsQ4jAX5AJZSDjT/f4mN8+2qfp78N6wrJtg
+HCmLTRw/9TJLk/dAxb70pm38lydA9O5PJE9aelQFBZZWUzINdvWr+nw92lsr
+ArNw+wwxXkYPe0iM+c2PA4xqICN6BxOCbeDyI9UYLwpv2sapHb5J3FBf1DYw
+KgVV4hZ5Hh2NVaz9Dy2Cip/W4zgsZFitI8DrtA2lDylPW2EcEF/Gp6OopohJ
+BBgRAgAJBQJJeBDfAhsMAAoJELB6Yh3JKVdlZ84An2qFE/2pd5tumLcpUhAo
+x60IFPixAJ9Ipx0+I2OkodCugEjPRoWgArRboLACAAO5AQ0ESXgQ/QEIANHU
+Y6CyM/Ramnnf+ojElJ+qpSpeZs0qomUBe2MV+JUHaSRPmv1LwUiyqWV/S2+o
+5se5VldqJ9teImtUhuDNpO7LX4TSgJ7jIPiS/W/+JTilx+AGA/1P7XBt4eei
+3ofyGOjCcGaEwZbG8ZoC319PGXMIKwecGRUXiAxaCnbb+CSYMRMnU7ELmOFJ
+ziGSaW8kMp0VK9X1vX2bB/SayAjsDYQKNZNbP70FCIylnLXpyRkmNsWHSngZ
+va3N7vEkg3CYejZtcNTruXULj74qPny7Ko0EvCNP14wsFCAoCWugCCrrl4a9
+4MYCeYdGOC3qANgyhwJizQuH+BpnZtN5iQ3uznMAEQEAAYhJBBgRAgAJBQJJ
+eBD9AhsMAAoJELB6Yh3JKVdl8sEAn1VZCySU0jAD1g/gSck9wpdhcHxBAKCi
+2SXgmRBMkfID6VoR87RDD/RHSbACAAM=
+
+TEXT;
+        // }}}
+        // {{{ secring data
+        $secringData = <<<TEXT
+lQHhBEjS+M0RBADIuG1okbW2FPjlx1MKYthiN0rRcoN0P3H1G+0x6vMIV0YE
+frHAJ7PQUo+cOYr1tAW8EquhUar/cAZSwRysMrYsQRggljxQKstToh36mcwt
+dItIatGPSafkP7Y8tfPg/OG4n1LWvU/qc5qW0eUsrbtek3j3Ot96blZPPOki
++1p49wCg/NPaBcQz6fK6EwcI4M9icarEQJ0EAJdaVeJ1MOsBphcKkCQHtmId
+uMQgmaJLidVJOl8tIXgAr6Hu2pGQkk7urGAzzzJ24jWzHJLqiEx/ex86sH1R
+sHQctqcQhJU8YyYlO6e4R5nCdRiDYOAj1+rzogTTUpyngyQamTyAh7LnA/CC
+MUOdwdduB4uCYsFF6VprJFy1FYx5A/9V/hpfeILigh/XVb3sWYdUyBRbxUoh
+z25ItI7jkDLMlxN00w+IdUYEwl9bA8mmBf+q2BryLuoStg25krbC/KgEZbAT
+EWhk+/A0j8nuEPn8A/Z8KqcLxFsCUwF690w7an/3WxAwVOumXhOKKEHosXkw
+rS8AnfuIFq/atqy4EslP5f4DAwLxwn+n9mf1u2ArwjYd9+YzD/wWsQPS7Ia/
+bH1duvwY/yIa2m2SVCsfoLLkpTRJmIbqjrA+0htB6IshuLRgRmlyc3QgS2V5
+cGFpciBUZXN0IEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEg
+d2l0aCB0aGlzIGtleSkgPGZpcnN0LWtleXBhaXJAZXhhbXBsZS5jb20+iGAE
+ExECACAFAkjS+M0CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDAl9ns
+lMBjY2Y5AJ9vqmYB60lHF053EC+ChvLNqrbxqwCfd7nMcmun0yeA7wt1KKdZ
+ExHz/niwAgAAnQJjBEjS+N0QCAD0p6PxTdTGFbABAA/KO8CkEqFYKfzu5gjB
+5jTK/awyrKYEp4KciexxnxGbvVEg5M+C1Pg9NNFFwPDTl/HagLWqH8lMcKoF
+aXcz+Xfgwayuunu64/BXRsuKAlQi0L6VzjUOaei3xCcEVv/ZqLQxM2uyOfyA
+ysMVDT2BFIwf6qma09ttg0bpL8eMt+dXBjBSyDWz5WC5gbgLX5B+VfQpnLL+
+DUvvh0qeHY9qmLYAca+qQnoj956QRihzlNSjrlNrlyCYdXtFGfku91mA2PQg
+hb5S7ifREiKH+6Iqk4FtioMqrRko34u54yWMhfClRGtcmDb1ebp7yKIikljp
+Qj6hkw9DAAMFB/4p8yiZuNwoRFgJpRbLvOytac9iIlZs2mASMbABouqcUBLE
+LqM+mOfmRgcJH2xFrmBJoIqBICUAkau3DR05oNkVTuFbtzIvNhxd5ES/2T45
+bAtqyHRDIvjwnr4ruN49h4FF6jAeW+zFAnGeXXOOhdmWxxz7VGYXfmNHi5x1
+csx5KM4qEt+kiQ+KYPN7vsSEPnuuO3OqyZ/pqZ2UQMtQAZ1bnLocgQ7GtBnS
+XCk2QgIg/sMgJoQVX5h8OhvuCOCNkskBKmNzY7vfiG4JvGPG9RjyUpTJj2ew
+y0MoKYURhUXtnW7uMZ1T8OeB/XtpBRRxGmmsm1aqabMi4MiXgh9lwikg/gMD
+AvHCf6f2Z/W7YB9YTXxKPJp6zbmhmsBCAQIHNuufQtJKmUtVc3IZC06Ip8pa
+19eytbzqRG7JkectW2YtFpdi7g61Aw4RynmsNoScsEsolN5WhsGISQQYEQIA
+CQUCSNL43QIbDAAKCRDAl9nslMBjY15lAKCMiOSsamO0x8emnFVM3EVS4XUa
+9ACfbJ9okoKrn7a/uEOVWfxWTvdeQxGwAgAAlQHhBEjS+N0RBADqa44MuljB
+O69Hd2yLNgdVfvpv7n+6J5OrCiC38/sjv8qXRRqQC7zOfB1mPZMykJk7BWKK
+LctFgVIN5IktecZ6fakL2csgZrq99fQfhQ02GZAXmNvFBv30PLqPU29L4JvA
+JZ9+0px9udOuIMYbXISjfvpH/DoKkEBirwAcV+51wwCgmTle1xH7pEOAo8fO
+yY5FJHVXm4UD/2xUHZUpyOCKc0qff2PrLYkeohI2so/cBSyte3FcVXtl9htK
+/Y736DXEqrNiw4wnlVT96Jwkj8evzUcukmPSj0hMJS5addpqgdCqUtRSugQP
+BBSMjWEmRYTZYrbE1NBxuEOPwkbMpKUL/PgjGoqj/SuVcddhThvAvyISQ5V5
+MQ45A/48u6pCx6XJCvqJrYsdx9w+JxmBrAJEDRLS+gPyDH9cUE+y8ws5yzr+
+WuQyeGFUKHCgkkNr7Znf8auCZWp+t6U49+P1W1BkWOxl6rMjiFnoIW/YX3Oh
+mv5VdB7ohi1MbgIXy1pH/nLwkk/Lyk1Isslk6i9WqdaGoupcAeFe2Hp3cv4D
+AwLv5LBCOJTgDGCxp17xpdBgHR0gEyiAn0M+oX2mbSUGjJLJ0FHlt4V4mvY4
+sj+zEuh0y7jOnVnhAK/ny7RiU2Vjb25kIEtleXBhaXIgVGVzdCBLZXkgKGRv
+IG5vdCBlbmNyeXB0IGltcG9ydGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxz
+ZWNvbmQta2V5cGFpckBleGFtcGxlLmNvbT6IYAQTEQIAIAUCSNL43QIbAwYL
+CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEAPMiQr6Ha1LoAEAn2/+fh/OQz6P
+XG9zBLcrJFf3P8xmAKCCfBjWSB+HPeJr5Fn5MJF4uCnjfbACAACdAmMESNL4
+4RAIAOSLYQiKvFjlNQjrParMESl5JMtbJmyUQKBqQlMTJuvomKddA4REq6qX
+a24Of+WUqIKxh/jAwgfXs58D3YYWgv2aX6q6lUgKhcLqAIVTZfRFDn6R+JCO
+isq178se5UMP2g91/UR9mSuM/HKm4ogcS+hXPd4yD+AhHbzUZgPnWZbyJ/HR
+t7XWU+Cy69L94nHDMQbfYpBi6d1a4dO683NG3YJXtrlI4K/Q09euXfFHeqoc
+yHnh4eJRSOHXyJqarwlNM/YTj1dWmgFbJ68NySONOrUEL4jyd4ubb4oNmQnT
+GpQvmJKocQtRvTxKAFZ7aB5veVKVTJNzyjO5vPRJWgw1EzsAAwUH/1S9DkTg
+FctOb0YsOeOtKmYnFzVxjQNGbBjaMhNHDTXvgxHGdWY6h7uyl/+cnPNoCcc+
+sUl4Ob5ogE3BNLAOsg4TyuvnYAF8GEk9EenCTDngepd+L4K5L4lq8Be+cWgF
+s9vVhXCP9d0CSzo/3FpJ5WqsIqk01U5QKze4iWvG1qVK5vJWEe/33A7JFHZf
++rW95nlJewyqeDAKFluJA0Usbx1FcfTwbMicJjL7GrQoYHfTqW0RQL3XIiMN
+dRoBVuK9CL1LtSxibfg+0aokak4SeQXbtu/kMydLfBREw8fKFrgSmJSxOKD6
+2J6J+U5am8qvQ/njqIAk6YA3xvcHd/IU7g7+AwMC7+SwQjiU4AxglRNFH8ZQ
+L+7gJFaH8bEhjkocpbjCI/0PlsTz72zonwHtCRyH7XmjzgzOELQGGUa4scWF
+cKUBwyWsfqbjGpLRUSO8wAvjWlRT64hJBBgRAgAJBQJI0vjhAhsMAAoJEAPM
+iQr6Ha1LLvoAnjf02AwIP4uMSl2HpSIh7QaO0xqOAJ4gyr9pHEV1c/kebV8K
+VrcS51e45bACAACVAbsESNL46REEALKfbQFXnz7HRzYWrj1Mu2tZAEJP1XGc
+114JQniwSCiZMRSFhe4sAntSY5HCOFPXqXZfsQkpdkR8Rt9kjyP+JiekgGn+
+Ji2xnzLps3vTB142lG1mQHcK7WZTkLp3+2HDROZ51b3dtDTrAy3MEQ8RC44z
+5iOIpBmOOCoWaWflPdy3AKDpv8fz//eMRrY3knxTjJM7FmPFQwP9E5f+60sM
+0pf51MvLr25CuWv3i1pvCzOkGB1NgzDOB5+BRgN1Ht6xYzmtnkwwlf2U/N54
+8w9/T/tGWWFgDheAnsS/NVMY0C4vjktUmsb0Hl2HCsKGgoU1S0J8g1LrW6s9
+2FRADxjOZTEj6IOAGQPgW6MuiHzDD6nG6klGxhlvf2ID/Rkkpk54g3cnJSsi
+WpKoQ0bnj0fT5jhMLm3xiLFp8Hx88GOUzPT7EYxHdfFvxYcP5cV26Wv+xVnh
+ZnTRi04aFL/dkXuoavEIIGsICMNF0/OpoXXmcxqqAiiA4g4vmP3AjrBGkywk
+HERu21ZH/0rgFeEGuLCD2q/i9qbDMUzS3a8tAACdF7M7MkLEzAfEkc/XDqGk
+TwRBdXYJerRzTm8gUGFzc3BocmFzZSBQdWJsaWMgYW5kIFByaXZhdGUgVGVz
+dCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9ydGFudCBkYXRhIHdpdGggdGhp
+cyBrZXkpIDxuby1wYXNzcGhyYXNlQGV4YW1wbGUuY29tPohgBBMRAgAgBQJI
+0vjpAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQlFY/s5itprImZwCg
+w0cEkPaPI3fPfc2h5Z6j4TyuHSYAn0ZgHrSM914DLxAjwd5wbXlt3uQBsAIA
+AJ0CPQRI0vj1EAgAhewinC9zCUsdDq6ajNdMztkTKyuhZuNB/7a0xBWuS2ug
+UobAEU549c7BuUYw8B9qpW1krb5ZDOa/szWN6FkWoyJwKG6POp38bASCZ0JL
+3QLcrSEENjdmqsjWggQEwfFaTeb15PLEPJQW1m5WgD31Cf5HCBRQmPMgsI2r
+9XDiLFJm8BdJ6JTtV9UHwCbM/kA7U3RrL30uVfreJYhPepQvjkfU66ZzHADj
+mpu2d8iMee1I7d581NecYG9U87LZf2Xr9r2m4YmiGO5w/oKVyMXuJfNAgMSM
+u9EIF+whBFdQjlZ2nEfwf0K1oU/Eod1lKTRAFYcpDlwhO5M18pIcc4gI+wAD
+BQf/d5ISDTDuirgkyFOi1sJxk/avD10NNvmaXYxc2gTYF7Natkq0T0x2behW
+wNbO3DhZOFrZqlj+mkg9LRx/Q0XMviac1X0ils20MdS2PSa8wkg8BC+2RVbV
+6DrNAyF+E2+9penGulTgKsPIybn0azBgVkfoRBjpTu8D8xFH+ASaZUt+850o
+ynFlDmAXWfqU5pcTMVEny+KrY62S6TDH2zLEfIJKK97oRuU9F86AUbAIn575
+fUHJnzgEoelxKJTWWlDCH9IPq37ZrStNeOBqURgzttvMaL7/zhcVPIEw9WFg
+G8TCEpYNOg+x0gqETHM2rIRBdGfjgaSY7T9fXoxiikv37AABVAg+anwLssMt
+ypICzst26P2lLSCGT1f7icmHvSqBgVdOQizx/9QYGMoUigAUyohJBBgRAgAJ
+BQJI0vj1AhsMAAoJEJRWP7OYraaywmQAoK31UjQ8v0JxjEBYQISdvYuLNpA8
+AKC7QxpJWOad2BFLoSh6WM3H7KvMUrACAACVAeEESXgQ1xEEAOBvkkPPWU+J
+uSAxlJPZBj48XCZwLd58yh8a9Zyfm7VoksR8WlefW5Yp+TM1f4mHtxl4B40B
+HyhgFbQJ8rJqO4fQBfuXlPgJTZw2kbhDmym4kff0EJ1jbve5bC6s+5Voc8Ps
+SKm01DfZVvJu17DLCXNcxIDQFtozlUq7G5KW8FFzAKDTcy9PFL+MgZZRvZdX
+bFBktO8UqQQAzW0TXF/Db0vQhZZlMP2l4j/hKoG7F32oOKBUyuxWJ0Oxg31P
+pzqTnFRW0yylQu1KgfS3a6kFe4npmVAq3VB1ajVRUW4X3KdDaqUfczEc2K8M
+b2jwUWCaF64gskfHm5gXGtaszA0iTa3Z6G/c+16gOco0Ovu42D6a3+iUPpzo
+JQkEAIsjyTM2xgisHxEXEDeVZ/S44WtI7TwRBnQNypDQqNNx27hYCp85b9k4
+5bCZ8c3nGiqI/zi7emW28xRan7AJKUkAFGYWqq9a5u4LlJ3rZRWT+MGXx+gB
+FwC0ibzfix1tcN4zKft5EQudxUKc7cDEa3RdhjMc0r07UtAhj4ARkBA7/gMD
+Aj2SeWvJQiuVYFToCAKFloJfJYHwJVJabyN3vys3ryV+yMqjFLECpyclNjWC
+GlknyDQ7pcghJOlb3J3MtC9NdWx0aXBsZSBTdWJrZXlzIDxtdWx0aXBsZS1z
+dWJrZXlzQGV4YW1wbGUuY29tPohfBBMRAgAgBQJJeBDXAhsjBgsJCAcDAgQV
+AggDBBYCAwECHgECF4AACgkQsHpiHckpV2XGwgCXfahSQIuDu4WsR14ePcbv
+XDOwFACfUQG7ZmAgkpmXecRmCkRXDbuv4dawAgAAnQJjBEl4EN8QCAD1DtYT
+oYh0XDzbeTcmMH3eywX7eLI5RkoV30X+UNr+/k4I5VbA1g1maBaewHTG+gHz
+X9j41ydXciVJkTGEuI9ImD4UjqGS4wBY8/7LQKOHxWDvRR27tqBl7BX0/Imj
+NVnGBOY5ZD5/gjm2KHKQVEau8iCIqoGclGgX2yOhVGs6wtjA/h68RpoGgjAY
+FQtLcHjQuGMifV7qSUgUJ9VvvWNbdmivqrfHW2vTOh1cs+GLlzzYkV6uKKrj
+6Hl6l4FnyqvcUkBbW7XshEkVWB6JpvGfzkzL3LRosk4L3xW/AXQFAVbFkt3P
+FS2ikRsIe6wUMiZ2SdGTJ0VwAFo2xAsEoBabAAMGCACxb5PVPXRkXr6kVfcl
+PATtTUYREsOWOfK7JrSm2wH572M6IRSoONAqrbHq9pDOlOLVz/eW4a0oFB3/
+qHjfzvCCS9c3OMzSXMc+yIoV4sovfP7q2H3KakwXtnBMVIEc2ttUqxDiMBfk
+AllIONP9/iY3z7ap+nvw3rCsm2AcKYtNHD/1MkuT90DFvvSmbfyXJ0D07k8k
+T1p6VAUFllZTMg129av6fD3aWysCs3D7DDFeRg97SIz5zY8DjGogI3oHE4Jt
+4PIj1RgvCm/axqkdvkncUF/UNjAqBVXiFnkeHY1VrP0PLYKKn9bjOCxkWK0j
+wOu0DaUPKU9bYRwQX8ano6im/gMDAj2SeWvJQiuVYH45Z3cDXxxtZxTmd1Se
+luGBcGqqPpSX1aBO7Yondo7O1qMCYc2VxAP238MCu+Xc+oYWYRoNTI+H7a5S
+RhDWxlA5KoS8fr3diJSISQQYEQIACQUCSXgQ3wIbDAAKCRCwemIdySlXZWfO
+AKDM277NGnDLiP8I4uDIP0g2+N3QbgCffIGzUjwxxnb9P/01X5LYTFzTZ2mw
+AgAAnQO+BEl4EP0BCADR1GOgsjP0Wpp53/qIxJSfqqUqXmbNKqJlAXtjFfiV
+B2kkT5r9S8FIsqllf0tvqObHuVZXaifbXiJrVIbgzaTuy1+E0oCe4yD4kv1v
+/iU4pcfgBgP9T+1wbeHnot6H8hjownBmhMGWxvGaAt9fTxlzCCsHnBkVF4gM
+Wgp22/gkmDETJ1OxC5jhSc4hkmlvJDKdFSvV9b19mwf0msgI7A2ECjWTWz+9
+BQiMpZy16ckZJjbFh0p4Gb2tze7xJINwmHo2bXDU67l1C4++Kj58uyqNBLwj
+T9eMLBQgKAlroAgq65eGveDGAnmHRjgt6gDYMocCYs0Lh/gaZ2bTeYkN7s5z
+ABEBAAH+AwMCCEBmhVyffQpgs+1/hfirm4CWsLpv4EVD7fJfaGhsfPzBHpTI
+UOBEGV5QXbFxdbTuXHSXHnNHeZ5hsMCvZMDKY74bcQdmsXRiZWVCGR2wHoCM
+wiqFDUjZTshn3nEOyEc4N9ayRrRkVQjF3zdZ/d9/U1csO9WYNfcKcxiobRS2
+V88r1XZ3GUauUNxajDGNCnn/lSM4gvIR5CKMB5t3jodoRekG3Cnz8nkvPUoP
+f0fQRNKhKXJpUlnX4zFtNlKNWbMut1GRkTqdMvsPnmSW/ay6fHT0R/CyrUiI
+PUJNAJjwDwA2T+BOwHoWQBF1ZN0uu3/+h9mBKySl6ELOGHVlq2RPEvh/2dqh
+cJXVW2N0RDT4WBxsjeaSobam4YanVejBIc+PniPFVB2yOd4TKSbwSp7uR6AD
+eKny7GV5WNUDblW9C4yrJFHH7JGS1w1xY3lk+m2SUwd7ncDJDj5//Urdw3MZ
+b5j5vYmwlG/O/sTchmHzWPXdfLl+vrKuEZqv8/z9W5wSsIlXXuKo1i8SlAvR
+pQSe6XVO/HhDR7TxgY0huOpICGXZwZrZu5vRxycTBQcI6vqOJU0wrWMXg/bw
+7Bj4qStAferCQwnLfFZtZvbdssqomqiJ57/ChOnHg5KSnUpGMP19a1oNxGcA
+3eQ/4wQFGSBmBTEgx6vzsRrnMgeDzf7S+pRseHDHIE0Rqp8GdeSh+SR6pIEI
+YuDIsRoW7kQSKKwX9vNV8rd6qxj3UfJCQCumHRHTOoDyX5uPrN5pHIF/iMcJ
+//JGh6sMY97zr2jvWNV8FeAxNcGPXDzARPaseg2EBiTnpVNaG4XKw5dgF2uO
+JEH3ZXDIl2+WckwVl0OOf8JeGw81x0s7yWnH+cwF+1vcXzxpSD1/Mzk2r21v
+DrTW29NDRhS4QOt/7q63ZSUmzIhJBBgRAgAJBQJJeBD9AhsMAAoJELB6Yh3J
+KVdl8sEAoL4gJuYqu6cmN3QO4k5L+ed5fbEXAJ0YcEV304aRu0AxNIrYOZ6m
+Q/q3S7ACAAA=
+
+TEXT;
+        // }}}
+        // {{{ trustdb data
+        $trustdbData = <<<TEXT
+AWdwZwMDAQUBAAAASXgQ5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAJAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAoAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAA
+AAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAAAAAAAAAAAAAAAAAA
+CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAoAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAA
+AAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAMwAAAAAAAAAAAAAKAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADACNIpnZxcIREosyu7DA
+l9nslMBjYwYAAAAAAAAfAAAAAAAAAAAAAA0ASuRA053T81XR0YsL9GQz36zO
+so8GAAAAAAAAAAAAAAAAAAAAAAAMAIgJItvqcz6QZpPkqQPMiQr6Ha1LBgAA
+AAAAACEAAAAAAAAAAAAADQDkLyWSxvRVinJea5Y3Sc4dh3lKQQYAAAAAAAAA
+AAAAAAAAAAAAAAwA+DEYy29YktwcPpNtq6ge9U6MDesGAAAAAAAAIwAAAAAA
+AAAAAAANAMR3BlsMercywmS8VQx+WBRwzSxrBgAAAAAAAAAAAAAAAAAAAAAA
+DAAeycXb8jndCjpPzQ2UVj+zmK2msgYAAAAAAAAlAAAAAAAAAAAAAA0A+Xih
+okzxb5YYF2H8zt6XjTHnb5oGAAAAAAAAAAAAAAAAAAAAAAAMAJSPmDX/CfX5
+HP8qwSaKtxA0NeZdAAAAAAAAACcAAAAAAAAAAAAADQB1TeCPc5cRDuwveD0X
+xhsm64ZrYAAAAAAAAAAAAAAAAAAAAAAAAAwAxo3/oHXKbdbf3Wfe8oOFM8Yg
+1NUAAAAAAAAAKQAAAAAAAAAAAAANAOQflEprmQfxXYoQ4ziqhrc8pjZDAAAA
+AAAAAAAAAAAAAAAAAAAADAAlEjmrDfswlGd8hOOp7mR+yD1FcwAAAAAAAAAr
+AAAAAAAAAAAAAA0A5B+USmuZB/FdihDjOKqGtzymNkMAAAAAAAAAAAAAAAAA
+AAAAAAAMANk0YYDRuuh0Qo8Qx/Ye3VqwpH+AAAAAAAAAAC0AAAAAAAAAAAAA
+DQDkH5RKa5kH8V2KEOM4qoa3PKY2QwAAAAAAAAAAAAAAAAAAAAAAAAwAjfos
+sg2v7kfmnu1bCuJ9bDb23VAAAAAAAAAAMAAAAAAAAAAAAAALAAAAAAAAAAAe
+AAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQDkH5RKa5kH8V2KEOM4
+qoa3PKY2QwAAAAAAAAAAAAAAAAAAAAAAAAwA3Z5wduQspEtWG5gn+7R5kNtT
+j/cAAAAAAAAAMgAAAAAAAAAAAAANADPMTOwYcVpigI8JYuYIOyOWVB6sAAAA
+AAAAAAAAAAAAAAAAAAAADAD53yG10t0C0992AnCwemIdySlXZQYAAAAAAAA0
+AAAAAAAAAAAAAA0AM8xM7BhxWmKAjwli5gg7I5ZUHqwGAAAAAAAAAAAAAAAA
+AAAAAAA=
+
+TEXT;
+        // }}}
+        // {{{ random_seed data
+        $randomSeedData = <<<TEXT
+neyWWNvenulSaxVyMeIGkfDEfjYOk/fWdXdVziAlyCuTOaA3TQ3CKgFyUMCl
+56z9k4gvoAVk4UKpspxvt0yvPh10wejwkb7MrFQ58f9mqSdhSxnP06dmxPaA
+pmjTVaHQ74o7U/sitSM9DgCR/sKwmm7SFqP8LhELgHaIfx1AWbHNuTCSYdxH
+z4SMMzTAiMq6cMKv86cpjAWMLABM5TFFKZzYtj+lpSowcuNkHWBU6qv7Y8Iw
+ZMvcXX8cCvFWLVY9JNfQPvbb3WONrWmkqfExqAe2zKRyYUVP9mY9szAWwP0k
+HqR1fICVuGVzJEzz//7AukOJ1TNiokgPoSW7KayJ1YjTuGyQc4JOOxvEdZAR
+uXdEmD8V3yhQ/bN86OocZi/gT5+2Qorbk19hlHVAd4xw6HhFgBiqM0snhnQq
+2YJOeVWuciAlnyetCV5DaOI5mUKhNOqT2EUo1qQ6vI9uZ8n+aJxD4DPH+AHo
+wOzWzzsQujmaLmzulJtZnvHpwm/Sbi0qG9sohnxAD8INhnbRSviwROBgAR1r
+HzticUERCJ6C+RGSUqa0YktAzNY5yZiyWEhPJfl16zC4vNFOdJmjWlf01ugJ
+l7FlURvzHb3BkLJVlNCYNBRvW0yz2xXrhOzc1Nl5cpYGl3IWxopQDpHLHXYl
+DVEKIlTgEQHq8FEU24xYX+GpvN1dZ9FjAuPjzNqAPEDzBQ4LB6JevUPL/hHN
+ySy97NgZrauxTMC+SNrxl+Vab4JA9BgPCMXISmdQzzkZUFE5GV3Dq0O4OCiI
+NfH1l4n9va0EcqKEwb25
+
+TEXT;
+        // }}}
+
+        $directoryName = __DIR__ . '/' . self::HOMEDIR;
+        if (!file_exists($directoryName)) {
+            mkdir($directoryName);
+        }
+
+        $pubring = fopen($this->getKeyringFilename('pubring.gpg'), 'wb');
+        fwrite($pubring, base64_decode(str_replace("\n", '', $pubringData)));
+        fclose($pubring);
+
+        $secring = fopen($this->getKeyringFilename('secring.gpg'), 'wb');
+        fwrite($secring, base64_decode(str_replace("\n", '', $secringData)));
+        fclose($secring);
+
+        $trustdb = fopen($this->getKeyringFilename('trustdb.gpg'), 'wb');
+        fwrite($trustdb, base64_decode(str_replace("\n", '', $trustdbData)));
+        fclose($trustdb);
+
+        $randomSeed = fopen($this->getKeyringFilename('random_seed'), 'wb');
+        fwrite($randomSeed, base64_decode(
+            str_replace("\n", '', $randomSeedData)));
+
+        fclose($randomSeed);
+    }
+
+    // }}}
+    // {{{ _setUpTempdir()
+
+    private function _setUpTempdir()
+    {
+        $directoryName = __DIR__ . '/' . self::TEMPDIR;
+        if (!file_exists($directoryName)) {
+            mkdir($directoryName);
+        }
+    }
+
+    // }}}
+    // {{{ tearDown()
+
+    public function tearDown()
+    {
+        unset($this->gpg);
+
+        $this->_tearDownKeyring();
+        $this->_tearDownTempdir();
+    }
+
+    // }}}
+    // {{{ _tearDownKeyring()
+
+    private function _tearDownKeyring()
+    {
+        $dirnames = array(
+            $this->getKeyringFilename('private-keys-v1.d'),
+            $this->getKeyringFilename('openpgp-revocs.d')
+        );
+
+        foreach ($dirnames as $dirname) {
+            if (file_exists($dirname)) {
+                $iterator = new DirectoryIterator($dirname);
+                foreach ($iterator as $file) {
+                    if (!$file->isDot()) {
+                        unlink($dirname . '/' . $file->getFilename());
+                    }
+                }
+                rmdir($dirname);
+            }
+        }
+
+        $homedir  = __DIR__ . '/' . self::HOMEDIR;
+        $iterator = new DirectoryIterator($homedir);
+
+        foreach ($iterator as $file) {
+            if (!$file->isDot()) {
+                unlink($homedir . '/' . $file->getFilename());
+            }
+        }
+
+        rmdir($homedir);
+    }
+
+    // }}}
+    // {{{ _tearDownTempdir()
+
+    private function _tearDownTempdir()
+    {
+        $directoryName = __DIR__ . '/' . self::TEMPDIR;
+
+        // remove temporary files and temporary directory
+        $iterator = new DirectoryIterator($directoryName);
+        foreach ($iterator as $file) {
+            if (!$file->isDot()) {
+                $filename = $this->getTempFilename($file->getFilename());
+                if (is_dir($filename)) {
+                    rmdir($filename);
+                } else {
+                    unlink($filename);
+                }
+            }
+        }
+
+        rmdir($directoryName);
+    }
+
+    // }}}
+    // {{{ getMd5Sum()
+
+    protected function getMd5Sum($filename)
+    {
+        if (`which md5sum` == '') {
+            $this->markTestSkipped('md5sum not available. Cannot verify ' .
+                'files for file tests.');
+        }
+
+        $sum = explode(' ', `md5sum $filename`);
+        $sum = $sum[0];
+        return $sum;
+    }
+
+    // }}}
+    // {{{ getKeyringFilename()
+
+    protected function getKeyringFilename($filename)
+    {
+        return __DIR__ . '/'. self::HOMEDIR . '/' . $filename;
+    }
+
+    // }}}
+    // {{{ getDataFilename()
+
+    protected function getDataFilename($filename)
+    {
+        return __DIR__ . '/'. self::DATADIR . '/' . $filename;
+    }
+
+    // }}}
+    // {{{ getTempFilename()
+
+    protected function getTempFilename($filename)
+    {
+        return __DIR__ . '/' . self::TEMPDIR . '/' . $filename;
+    }
+
+    // }}}
+    // {{{ assertDecryptAndVerifyResultsEquals()
+
+    protected function assertDecryptAndVerifyResultsEquals(
+        array $expected,
+        array $actual
+    ) {
+        $this->assertEquals(
+            count($expected),
+            count($actual),
+            'Result counts are different.'
+        );
+
+        $this->assertArrayHasKey(
+            'data',
+            $expected,
+            'Expected result does not include data.'
+        );
+
+        $this->assertArrayHasKey(
+            'data',
+            $actual,
+            'Actual result does not include data.'
+        );
+
+        $this->assertArrayHasKey(
+            'signatures',
+            $expected,
+            'Expected result does not include signatures.'
+        );
+
+        $this->assertArrayHasKey(
+            'signatures',
+            $actual,
+            'Actual result does not include signatures.'
+        );
+
+        $this->assertEquals(
+            $expected['data'],
+            $actual['data'],
+            'Decrypted data does not match.'
+        );
+
+        $this->assertSignaturesEquals(
+            $expected['signatures'],
+            $actual['signatures']
+        );
+    }
+
+    // }}}
+    // {{{ assertSignaturesEquals()
+
+    protected function assertSignaturesEquals(
+        array $expected,
+        array $actual
+    ) {
+        $this->assertEquals(
+            count($expected),
+            count($actual),
+            'Signature counts are different.'
+        );
+
+        for ($i = 0; $i < count($expected); $i++) {
+            $this->assertSignatureEquals($expected[$i], $actual[$i]);
+        }
+    }
+
+    // }}}
+    // {{{ assertSignatureEquals()
+
+    protected function assertSignatureEquals(
+        Crypt_GPG_Signature $expected,
+        Crypt_GPG_Signature $actual
+    ) {
+        $expectedUserId = $expected->getUserId();
+        $actualUserId   = $actual->getUserId();
+
+        $this->assertEquals($expectedUserId, $actualUserId,
+            'Signature user ids do not match.'
+        );
+
+        $expectedId = $expected->getId();
+        $actualId = $actual->getId();
+
+        $this->assertEquals(
+            strlen($expectedId),
+            strlen($actualId),
+            'Signature IDs are of different length.'
+        );
+
+        $this->assertEquals(
+            $expected->getKeyFingerprint(),
+            $actual->getKeyFingerprint(),
+            'Signature key fingerprints do not match.'
+        );
+
+        $this->assertEquals(
+            $expected->getKeyId(),
+            $actual->getKeyId(),
+            'Signature key IDs do not match.'
+        );
+
+        $this->assertEquals(
+            $expected->getCreationDate(),
+            $actual->getCreationDate(),
+            'Signature creation dates do not match.'
+        );
+
+        $this->assertEquals(
+            $expected->getExpirationDate(),
+            $actual->getExpirationDate(),
+            'Signature expiration dates do not match.'
+        );
+
+        $this->assertEquals(
+            $expected->isValid(),
+            $actual->isValid(),
+            'Signature validity does match.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/UserIdTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,575 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * User id class test cases for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit UserIdTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * User Id class.
+ */
+require_once 'Crypt/GPG/UserId.php';
+
+/**
+ * User id class tests for Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2008-2010 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class UserIdTestCase extends Crypt_GPG_TestCase
+{
+    // construct
+    // {{{ testConstructFromString()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromString()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+            'email'   => 'test@example.com'
+        ));
+
+        $string = 'Example User (This is a test comment) <test@example.com>';
+        $userId = new Crypt_GPG_UserId($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testConstructFromUserId()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromUserId()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+            'email'   => 'test@example.com',
+            'revoked' => true,
+            'valid'   => false
+        ));
+
+        $userId = new Crypt_GPG_UserId($expectedUserId);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testConstructFromArray()
+
+    /**
+     * @group construct
+     */
+    public function testConstructFromArray()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+            'email'   => 'test@example.com',
+            'revoked' => true,
+            'valid'   => false
+        ));
+
+        $this->assertEquals('Example User',           $userId->getName());
+        $this->assertEquals('This is a test comment', $userId->getComment());
+        $this->assertEquals('test@example.com',       $userId->getEmail());
+
+        $this->assertTrue($userId->isRevoked());
+
+        $this->assertFalse($userId->isValid());
+    }
+
+    // }}}
+
+    // parse
+    // {{{ testParseFull()
+
+    /**
+     * @group parse
+     */
+    public function testParseFull()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+            'email'   => 'test@example.com'
+        ));
+
+        $string = 'Example User (This is a test comment) <test@example.com>';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testParseNameOnly()
+
+    /**
+     * @group parse
+     */
+    public function testParseNameOnly()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name' => 'Example User'
+        ));
+
+        $string = 'Example User';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testParseNameComment()
+
+    /**
+     * @group parse
+     */
+    public function testParseNameComment()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment'
+        ));
+
+        $string = 'Example User (This is a test comment)';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testParseNameEmail()
+
+    /**
+     * @group parse
+     */
+    public function testParseNameEmail()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'email' => 'test@example.com'
+        ));
+
+        $string = 'Example User <test@example.com>';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testParseEmailOnly()
+
+    /**
+     * @group parse
+     */
+    public function testParseEmailOnly()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'  => '',
+            'email' => 'test@example.com'
+        ));
+
+        $string = '<test@example.com>';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+
+        $string = 'test@example.com';
+        $userId = Crypt_GPG_UserId::parse($string);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+
+    // to-string
+    // {{{ testToStringFull()
+
+    /**
+     * @group to-string
+     */
+    public function testToStringFull()
+    {
+        $expected = 'Example User (This is a test comment) <test@example.com>';
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+            'email'   => 'test@example.com'
+        ));
+
+        $string = strval($userId);
+        $this->assertEquals($expected, $string);
+    }
+
+    // }}}
+    // {{{ testToStringNameOnly()
+
+    /**
+     * @group to-string
+     */
+    public function testToStringNameOnly()
+    {
+        $expected = 'Example User';
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+        ));
+
+        $string = strval($userId);
+        $this->assertEquals($expected, $string);
+    }
+
+    // }}}
+    // {{{ testToStringNameComment()
+
+    /**
+     * @group to-string
+     */
+    public function testToStringNameComment()
+    {
+        $expected = 'Example User (This is a test comment)';
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment',
+        ));
+
+        $string = strval($userId);
+        $this->assertEquals($expected, $string);
+    }
+
+    // }}}
+    // {{{ testToStringNameEmail()
+
+    /**
+     * @group to-string
+     */
+    public function testToStringNameEmail()
+    {
+        $expected = 'Example User <test@example.com>';
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'email'   => 'test@example.com'
+        ));
+
+        $string = strval($userId);
+        $this->assertEquals($expected, $string);
+    }
+
+    // }}}
+
+    // accessors
+    // {{{ testGetName()
+
+    /**
+     * @group accessors
+     */
+    public function testGetName()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name' => 'Example User'
+        ));
+
+        $this->assertEquals('Example User', $userId->getName());
+    }
+
+    // }}}
+    // {{{ testGetComment()
+
+    /**
+     * @group accessors
+     */
+    public function testGetComment()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'This is a test comment'
+        ));
+
+        $this->assertEquals('This is a test comment', $userId->getComment());
+    }
+
+    // }}}
+    // {{{ testGetEmail()
+
+    /**
+     * @group accessors
+     */
+    public function testGetEmail()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'email' => 'test@example.com'
+        ));
+
+        $this->assertEquals('test@example.com', $userId->getEmail());
+    }
+
+    // }}}
+    // {{{ testIsRevoked()
+
+    /**
+     * @group accessors
+     */
+    public function testIsRevoked()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'revoked' => true,
+        ));
+
+        $this->assertTrue($userId->isRevoked());
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'revoked' => false,
+        ));
+
+        $this->assertFalse($userId->isRevoked());
+    }
+
+    // }}}
+    // {{{ testIsValid()
+
+    /**
+     * @group accessors
+     */
+    public function testIsValid()
+    {
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'valid' => true,
+        ));
+
+        $this->assertTrue($userId->isValid());
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'valid' => false,
+        ));
+
+        $this->assertFalse($userId->isValid());
+    }
+
+    // }}}
+
+    // mutators
+    // {{{ testSetName()
+
+    /**
+     * @group mutators
+     */
+    public function testSetName()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name' => 'Second Name'
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name' => 'First Name'
+        ));
+
+        $userId->setName('Second Name');
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testSetComment()
+
+    /**
+     * @group mutators
+     */
+    public function testSetComment()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'Second comment text'
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'comment' => 'First comment text'
+        ));
+
+        $userId->setComment('Second comment text');
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testSetEmail()
+
+    /**
+     * @group mutators
+     */
+    public function testSetEmail()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'email' => 'second@example.com'
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'email' => 'first@example.com'
+        ));
+
+        $userId->setEmail('second@example.com');
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testSetRevoked()
+
+    /**
+     * @group mutators
+     */
+    public function testSetRevoked()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'revoked' => true,
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'    => 'Example User',
+            'revoked' => false,
+        ));
+
+        $userId->setRevoked(true);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+    // {{{ testSetValid()
+
+    /**
+     * @group mutators
+     */
+    public function testSetValid()
+    {
+        $expectedUserId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'valid' => true,
+        ));
+
+        $userId = new Crypt_GPG_UserId(array(
+            'name'  => 'Example User',
+            'valid' => false,
+        ));
+
+        $userId->setValid(true);
+
+        $this->assertEquals($expectedUserId, $userId);
+    }
+
+    // }}}
+
+    // fluent interface
+    // {{{ testFluentInterface
+
+    /**
+     * @group fluent
+     */
+    public function testFluentInterface()
+    {
+        $userId         = new Crypt_GPG_UserId();
+        $returnedUserId = $userId->setName('Alice');
+        $this->assertEquals(
+            $userId,
+            $returnedUserId,
+            'Failed asserting fluent interface works for setName() method.'
+        );
+
+        $userId         = new Crypt_GPG_UserId();
+        $returnedUserId = $userId->setComment('encryption is fun');
+        $this->assertEquals(
+            $userId,
+            $returnedUserId,
+            'Failed asserting fluent interface works for setComment() method.'
+        );
+
+        $userId         = new Crypt_GPG_UserId();
+        $returnedUserId = $userId->setEmail('test@example.com');
+        $this->assertEquals(
+            $userId,
+            $returnedUserId,
+            'Failed asserting fluent interface works for setEmail() method.'
+        );
+
+        $userId         = new Crypt_GPG_UserId();
+        $returnedUserId = $userId->setRevoked(true);
+        $this->assertEquals(
+            $userId,
+            $returnedUserId,
+            'Failed asserting fluent interface works for setRevoked() method.'
+        );
+
+        $userId         = new Crypt_GPG_UserId();
+        $returnedUserId = $userId->setValid(true);
+        $this->assertEquals(
+            $userId,
+            $returnedUserId,
+            'Failed asserting fluent interface works for setValid() method.'
+        );
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/VerifyTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,851 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Verify tests for the Crypt_GPG package.
+ *
+ * These tests require the PHPUnit 3.6 or greater package to be installed.
+ * PHPUnit is installable using PEAR. See the
+ * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
+ * for detailed installation instructions.
+ *
+ * To run these tests, use:
+ * <code>
+ * $ phpunit VerifyTestCase
+ * </code>
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/>
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+/**
+ * Base test case.
+ */
+require_once 'TestCase.php';
+
+/**
+ * Tests verification abilities of Crypt_GPG.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2005-2008 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+class VerifyTestCase extends Crypt_GPG_TestCase
+{
+    // string
+    // {{{ testVerifyNoDataException_invalid()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testVerifyNoDataException_invalid()
+    {
+        $signedData = 'Invalid OpenPGP data.';
+        $this->gpg->verify($signedData);
+    }
+
+    // }}}
+    // {{{ testVerifyNoDataException_empty()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group string
+     */
+    public function testVerifyNoDataException_empty()
+    {
+        $signedData = '';
+        $this->gpg->verify($signedData);
+    }
+
+    // }}}
+    // {{{ testVerifyKeyNotFoundException()
+
+    /**
+     * @expectedException Crypt_GPG_KeyNotFoundException
+     *
+     * @group string
+     */
+    public function testVerifyKeyNotFoundException()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+        // {{{ detached signature
+        $detachedSignature = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI1xN9CuJ9bDb23VARAkKSAKCG5/jPq1H7+mpMEpDITFnAJhSqlwCggzRx
+laNWOZOef2zfm1yANtWjPyU=
+=fhME
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+        $this->gpg->verify($data, $detachedSignature);
+    }
+
+    // }}}
+    // {{{ testVerifyNormalSignedData()
+
+    /**
+     * @group string
+     */
+    public function testVerifyNormalSignedData()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('KuhELanvhPRXozEjFWb2mam1q20');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221785858);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+        // {{{ normal signed data
+        $normalSignedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+owGbwMvMwCR4YPrNN1MOJCczrjFOEsrLL8pNzNEtzkzPS03RTUksSfS49JPJIzUn
+J19HwTEnMzlVUcE9Pz8lqTJVR8EpP0mxw56ZlQGkBmaMIJO9GsOCo2L3pk5y2DNT
+yiFKb0X03YSJqscaGRb0BKjZ3P+6SvjG160/WOa9vpey4QUDAA==
+=wtCB
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $signatures = $this->gpg->verify($normalSignedData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyClearsignedData()
+
+    /**
+     * @group string
+     */
+    public function testVerifyClearsignedData()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('wwm5gqNiFS+E/tmqbt1uXvVy3Ck');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221785858);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+        // {{{ clearsigned data
+        $clearsignedData = <<<TEXT
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Hello, Alice! Goodbye, Bob!
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFI0vkCwJfZ7JTAY2MRAgzTAKCRecYZsCS+PE46Fa2QLTEP8XGLwwCfQEAL
+qO+KlKcldtYdMZH9AA+KOLQ=
+=EO2G
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $signatures = $this->gpg->verify($clearsignedData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyDetachedSignature()
+
+    /**
+     * @group string
+     */
+    public function testVerifyDetachedSignature()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('E4HEDmMtecF457JFb88UAtPBVWY');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221785858);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+        // {{{ detached signature
+        $detachedSignature = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI0vkCwJfZ7JTAY2MRAj8mAKC4IN01tGaEtNxWYS5eQiNT4Fua9ACeKum3
+BdQ5rTOK2pp2X2vy/k2aCPo=
+=upYI
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $signatures = $this->gpg->verify($data, $detachedSignature);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyDualNormalSignedData()
+
+    /**
+     * @group string
+     */
+    public function testVerifyDualNormalSignedData()
+    {
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('4BunvSK18HPx6Xt4tEzyAqcNVzY');
+        $firstSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $firstSignature->setKeyId('03CC890AFA1DAD4B');
+        $firstSignature->setCreationDate(1221785858);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('oAZ64v4sFarc7dssFOAJPB0D7zs');
+        $secondSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $secondSignature->setKeyId('C097D9EC94C06363');
+        $secondSignature->setCreationDate(1221785858);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+        // {{{ dual normal signed data
+        $dualNormalSignedData = <<<TEXT
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+owGbwMvMwCR4YPrNN1MOJCczTABzmc90cv2SXevNuMYiSTylNDFHNy+/KBdIFWem
+56Wm6KYkliR6XPrJ5JGak5Ovo+CYk5mcqqjgnp+fklSZqqPglJ+k2GHPzMoAUgMz
+S5DJXo1hns0D5bkxpVHbI8+1y866l6K4yE1vHcNcOS1T45mf+VMn1NxQnnVn3Uab
+dx7z4AbA3AY2YMGDvnnpCe982TwPTGyZdn+fMbu0fQDDgn098wSP/O79+/aYgon9
+y/y/MVtYcwE=
+=7EC6
+-----END PGP MESSAGE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $signatures = $this->gpg->verify($dualNormalSignedData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyDualClearsignedData()
+
+    /**
+     * @group string
+     */
+    public function testVerifyDualClearsignedData()
+    {
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('MCn4/0Giq0njPh2smOs3Lrdc7yY');
+        $firstSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $firstSignature->setKeyId('03CC890AFA1DAD4B');
+        $firstSignature->setCreationDate(1221785858);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('O5tcpOAXJhd0v5TBxqhIixgphn8');
+        $secondSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $secondSignature->setKeyId('C097D9EC94C06363');
+        $secondSignature->setCreationDate(1221785858);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+        // {{{ dual clearsigned data
+        $dualClearsignedData = <<<TEXT
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Hello, Alice! Goodbye, Bob!
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFI0vkCA8yJCvodrUsRAgzTAJ9xSosvdq3fqaseRS6YV9VgnSGo2gCgiD+2
+TRUrY67ZzdfTjCd6cFZHqauIPwMFAUjS+QLAl9nslMBjYxECDNMAoKdQQAWe8EwG
+kZ/cCDE/fgToHk+7AJ9sU0NweUfUP3KNe2UK808Epd0Avg==
+=j0ot
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $signatures = $this->gpg->verify($dualClearsignedData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyDualDetachedSignature()
+
+    /**
+     * @group string
+     */
+    public function testVerifyDualDetachedSignature()
+    {
+        $data = 'Hello, Alice! Goodbye, Bob!';
+
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('tejKd9+9OBUM+EsrbV3fVuOiBeE');
+        $firstSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $firstSignature->setKeyId('03CC890AFA1DAD4B');
+        $firstSignature->setCreationDate(1221785858);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('7oizks/aha+bSONesnWDu1x2jn8');
+        $secondSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $secondSignature->setKeyId('C097D9EC94C06363');
+        $secondSignature->setCreationDate(1221785858);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+        // {{{ dual detached signature
+        $dualDetachedSignature = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI0vkCA8yJCvodrUsRAj8mAKCJWz3ANeG9SPGUHMg04gH0rCOqKwCfaxUR
+Dypdcanj3VE3inTxleaQtdqIPwMFAEjS+QLAl9nslMBjYxECPyYAoN+Y3tibHIg+
+9+fdvxAEvANir2RQAKCuD2BsKzSmyV3G4/i6oPNhOrwtPg==
+=8P1D
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $signatures = $this->gpg->verify($data, $dualDetachedSignature);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyBadSignature()
+
+    /**
+     * @group string
+     */
+    public function testVerifyBadSignature()
+    {
+        $modifiedData = 'Hello, Bob! Goodbye, Alice!';
+
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setValid(false);
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+        // {{{ detached signature
+        $detachedSignature = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI0vkCwJfZ7JTAY2MRAj8mAKC4IN01tGaEtNxWYS5eQiNT4Fua9ACeKum3
+BdQ5rTOK2pp2X2vy/k2aCPo=
+=upYI
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $signatures = $this->gpg->verify($modifiedData, $detachedSignature);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyDualBadSignatures()
+
+    /**
+     * @group string
+     */
+    public function testVerifyDualBadSignatures()
+    {
+        $modifiedData = 'Hello, Bob! Goodbye, Alice!';
+
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(false);
+        $firstSignature->setKeyId('03CC890AFA1DAD4B');
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setValid(false);
+        $secondSignature->setKeyId('C097D9EC94C06363');
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+        // {{{ dual detached signature
+        $dualDetachedSignature = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI0vkCA8yJCvodrUsRAj8mAKCJWz3ANeG9SPGUHMg04gH0rCOqKwCfaxUR
+Dypdcanj3VE3inTxleaQtdqIPwMFAEjS+QLAl9nslMBjYxECPyYAoN+Y3tibHIg+
+9+fdvxAEvANir2RQAKCuD2BsKzSmyV3G4/i6oPNhOrwtPg==
+=8P1D
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $signatures = $this->gpg->verify($modifiedData, $dualDetachedSignature);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileNormalSignedData()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileNormalSignedData()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('vctnI/HnsRYmqcVwCJcJhS60lKU');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221960707);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $filename =
+            $this->getDataFilename('testVerifyFileNormalSignedData.asc');
+
+        $signatures = $this->gpg->verifyFile($filename);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileClearsignedData()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileClearsignedData()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('6sXJXKZB5lvRSCXBAYl6R2EiDmw');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221960707);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $filename = $this->getDataFilename('testVerifyFileClearsignedData.asc');
+
+        $signatures = $this->gpg->verifyFile($filename);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileDetachedSignature()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileDetachedSignature()
+    {
+        // {{{ signature
+        $signature = new Crypt_GPG_Signature();
+        $signature->setId('tdsH/ulxOnoWEMPDamZTq7wzF/0');
+        $signature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $signature->setKeyId('C097D9EC94C06363');
+        $signature->setCreationDate(1221960707);
+        $signature->setExpirationDate(0);
+        $signature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $signature->setUserId($userId);
+        // }}}
+        // {{{ signatureData
+        $signatureData = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI1aQDwJfZ7JTAY2MRAvkzAJ0RAW0wtlfEgDccgq+N5IgbpA4BOQCfS8vV
+Of32/RcteCLdt73awNJ0CwI=
+=RVco
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($signature);
+
+        $filename = $this->getDataFilename('testFileMedium.plain');
+
+        $signatures = $this->gpg->verifyFile($filename, $signatureData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileDualNormalSignedData()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileDualNormalSignedData()
+    {
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('Kl3Mds4ABT9JyE3iqfPGpUHzKQs');
+        $firstSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $firstSignature->setKeyId('C097D9EC94C06363');
+        $firstSignature->setCreationDate(1221960707);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('KGrEm3hGqiKaLbjvOUO9kvUjRXc');
+        $secondSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $secondSignature->setKeyId('03CC890AFA1DAD4B');
+        $secondSignature->setCreationDate(1221960707);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $filename =
+            $this->getDataFilename('testVerifyFileDualNormalSignedData.asc');
+
+        $signatures = $this->gpg->verifyFile($filename);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileDualClearsignedData()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileDualClearsignedData()
+    {
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('eRRcEecpFk0YK/iswddS/KBxEXI');
+        $firstSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $firstSignature->setKeyId('C097D9EC94C06363');
+        $firstSignature->setCreationDate(1221960707);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('jsWYGJe/0hmte7tYt8zuJd7rFMM');
+        $secondSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $secondSignature->setKeyId('03CC890AFA1DAD4B');
+        $secondSignature->setCreationDate(1221960707);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $filename =
+            $this->getDataFilename('testVerifyFileDualClearsignedData.asc');
+
+        $signatures = $this->gpg->verifyFile($filename);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileDualDetachedSignature()
+
+    /**
+     * @group file
+     */
+    public function testVerifyFileDualDetachedSignature()
+    {
+        // {{{ first signature
+        $firstSignature = new Crypt_GPG_Signature();
+        $firstSignature->setId('T7+toJbsFr8KMTWN+M7lF3xSmmA');
+        $firstSignature->setKeyFingerprint(
+            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
+
+        $firstSignature->setKeyId('C097D9EC94C06363');
+        $firstSignature->setCreationDate(1221960707);
+        $firstSignature->setExpirationDate(0);
+        $firstSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('First Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('first-keypair@example.com');
+        $firstSignature->setUserId($userId);
+        // }}}
+        // {{{ second signature
+        $secondSignature = new Crypt_GPG_Signature();
+        $secondSignature->setId('HJd1yvMbEbW5facuxkDtvwymKrw');
+        $secondSignature->setKeyFingerprint(
+            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
+
+        $secondSignature->setKeyId('03CC890AFA1DAD4B');
+        $secondSignature->setCreationDate(1221960707);
+        $secondSignature->setExpirationDate(0);
+        $secondSignature->setValid(true);
+
+        $userId = new Crypt_GPG_UserId();
+        $userId->setName('Second Keypair Test Key');
+        $userId->setComment('do not encrypt important data with this key');
+        $userId->setEmail('second-keypair@example.com');
+        $secondSignature->setUserId($userId);
+        // }}}
+        // {{{ signature data
+        $signatureData = <<<TEXT
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQBI1aQDwJfZ7JTAY2MRAvkzAKDPnJ030GdYE15mE8smz2oV7zYziwCeJFxf
+UaTrAgP1Dck9DhHOBhvhwLuIPwMFAEjVpAMDzIkK+h2tSxEC+TMAn38yx3mXk6wP
+JaPThD7lRVE9ve57AJ0Yy7JwiT9sGXomln4JtRvuSpGtsg==
+=Gw9D
+-----END PGP SIGNATURE-----
+
+TEXT;
+        // }}}
+
+        $expectedSignatures = array($firstSignature, $secondSignature);
+
+        $filename = $this->getDataFilename('testFileMedium.plain');
+
+        $signatures = $this->gpg->verifyFile($filename, $signatureData);
+        $this->assertSignaturesEquals($expectedSignatures, $signatures);
+    }
+
+    // }}}
+    // {{{ testVerifyFileFileException()
+
+    /**
+     * @expectedException Crypt_GPG_FileException
+     *
+     * @group file
+     */
+    public function testVerifyFileFileException()
+    {
+        $filename = './non-existent/testVerifyFileFileException.asc';
+        $this->gpg->verifyFile($filename);
+    }
+
+    // }}}
+    // {{{ testVerifyFileNoDataException()
+
+    /**
+     * @expectedException Crypt_GPG_NoDataException
+     *
+     * @group file
+     */
+    public function testVerifyFileNoDataException()
+    {
+        $filename = $this->getDataFilename('testFileEmpty.plain');
+        $this->gpg->verifyFile($filename);
+    }
+
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/config.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * This is the unit test configuration file for Crypt_GPG
+ *
+ * This configuration allows key generation tests to be enabled. The key
+ * generation tests are disabled by default as they require true random numbers
+ * can can take a long time to run.
+ *
+ * @category  Encryption
+ * @package   Crypt_GPG
+ * @author    Michael Gauthier <mike@silverorange.com>
+ * @copyright 2011 silverorange
+ * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version   CVS: $Id:$
+ * @link      http://pear.php.net/package/Crypt_GPG
+ */
+
+$GLOBALS['Crypt_GPG_Unittest_Config'] = array(
+    'enable-key-generation' => false,
+);
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFile.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,294 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgAxAcEQPBE0nSpkbQXQonyjCIDKhl2JfvbjoHkTGbV4m/8
+OLA53xKe/RhhNDs9s47MqAv6DG2Z8XdK4O7ovY8hIPDbA02ikaM5UvD8oFyF5o4Q
+O4WmK4nvVz8cvjpzDz6osOnG85X0d3jGBW0o7fAglbC8Ti/oZ18MtSGEf8WUs5fq
+C6/htNDTU4gKorUBFU9M9pCSl+fQdOgLjkZSmlImshFtX9uMFhFx6AuKDbJQ10I0
+vPXLV/Ixd84ZvwLT6qGk6JwRQL/SD/ip4hMy9Zi87BLjeOVA8q6FVYZvP8K2j8ND
+ywCuGa5H4ux0dYLsojYBXJKw82S4TCoKtlFFV1hM/gf/Wfib62jS3CLkOb1OpgXE
+hjLfm1eKZB1SkumX0IKlAfEeEwHkxXoIy19qhwyrmAIj4Pbg0kEFjLEtfjJyARhB
+LVTPWR64W/IpsPtcthDi0lI3jfbUNkb3SaQhiHKFE72BCiF5niivWtFHWjUFkyzu
+rOZqJTBK0ZPmSOp67totkKvkX+2VdybxxTlun/FVyQ2cGVUzP+iHlZnN7v5A/dss
+YcpCmG7UgcAkw9r9lQu1KcNETbuVj1aud8Xgi3fFX+jjJlIWIaXccHRT2F3oJgYH
+uSU6MFvkwHqrnx5iUeJsXT9uVzZA4rQ7mEs+6+xxOYAZm10S+VzqUxkx2AKWkE9J
+9NLtAQypQjuFk/nllKcHvd/+WD0vUCicDroa1tKb+a5oEWgIFQIuBTuoNbaz9XR1
++4HLePyKE+Mw1wC+vL+DzSw/Fg0qI2fjiDFWhxTj8/o7uAUq1WX4rS95EdKjxs4k
+gArHdhpz/N5bQxn7zVxrv+lv6N0IjPWrMwkTjnkE82dLTkh+ibij0hWLINXxnAYw
+GY6/vg2KI1nu2fAjJ67kNd5trHaFnFZ451HpTkZffbRdxjNq+8GBbPFKw+Vm2tJJ
+k0vscHS1f1FdkKDouFV0TSHRlsNMHoNR0BRFfhpESEvsqUptSQGczVzhgfyAdPL4
+pbp/Z6hhY6yXV+7Id7Oe+rvEnn80FbX0J74Y8me28uMdgLQzEC/1xD3ts//Em2wd
+pFUXExtwaAUeiaiJxA1sD6wkGRriuyz2CqdytwOz2tyaU2tiUoEjPbsPDVK055AM
+c+mCZ70Rqr60TMm+IobRPIgYS5SDPI+1DfSLtKw2ukISmi0UrcSEVTQm53sCd83R
+uzHgaVzN2u0lm8ajbmOHL/zRnnLl1MQTJRXbqDf/rS0pW04AVWtqbOoNbNSeFYL6
+mZTfZjE9m3hF+HnAiVXSUvudLmL/U0buFtY7Jw2wI7E8gKCrhu7ZJxxSEds63Vv1
+KgqbXIxg/FmOI7bHw8tJTi5bBXmXQJwpweB5lMZsKIjTNbOVd29yQhDO2sNCso5V
+2FLYwSeg57/R1Usy+LJ/9wyzZkD96P51PWrS6ExmOkkjnPHefMgGILwi9omaYDBh
+9OW6EhEwybjOuwd0lEiRh+78TrnR/szzom3LEIdfYfuZ8ORe6Z8d8ZzPbAvXRac3
+nBOru/CIf11XseSID/ZmyWXUNGViQF3eQyn5Tjy2YTysye5UamnkUOv66838E+UZ
+ujLonyx+XA/gxWFuPJL/G37RNEiaS3CnTNpt+RY4cDoTlccWVOSd9uOCXpqTZVPP
+jLBWHGRfiZGZSI+pyV1Fd2Idep1WWCbMQnG1l/pzn8qktyfNF/EHOgEfNe8JP4vE
+9MZZygWdG24aZVfzlTh1lajDP9HmNuTw/Z1yRmVim5ryOBkHiYzQr/XzHMBvGGPi
+MCXjCH/rdGErCFU6gWScLtTsa5OCoIZ1MiT63vb33V1FpHdFZxQXYZ7UVFpvKEda
+4UrJvi9zhT1YIwWJPZMSaquk8bnp03OTryk0BmaQxc8Z56a+hQmoz1SWwEf0VYEh
+0ClN0o7h9DrKMapUyCUADM4LiLTNm5UjOjnh4GXtf/PPw5h36aWmNjSuGDg64Dyd
+cBN48EwH8TqKzzrW7139HXW7FFPRgsXBE55yUtc2kD2UiFr4QzEM3uDF0fpvqNEW
+2fndl6Apu0FvH3Dr1nEH0IcbUJTxh+V8gtEZGFpwALBU/2vnUYvV8w9llEoKZJej
+1Dt2AVkCumPiVxnT5ZPYuEbOO7mRaSH/Q5SwPjGNZNxyfFTKJywod+XECgD1a4M4
+9c+4I4UqLvweG5Yev7WfZAx6IVL6nvVcIK7Vmf9YyKB7lMbPCAadyhe1I5FHpKH9
+6xG6L5+C5RgdCwCX+nELldn5DBftwaTm8QqdQG4er0M9NZvMxGt3QiuLLCHbZAo3
+wRZ2QkwSU2LattI/q7QUdV25/bYZocwGHiH85t+YuZSXeouKYnvKInIyCbkE4tLu
+yZN3o3eCe+5QqnEOXz1XrC01qhsoXqdhpFwYI1TkFGJMF0Xp08h9Q/0pr1WBHoEy
+Z9c9Dn20GfdumPwPsxSPPIjspYHCqEN7k7Q+66oaivKkaRMmC5YCNV6xH9S6YpFU
+l2RkmQWTxwwXJ7dkdmS5J/7WT71yFqhcVXdTRwZNVpdwk8PP5BbKoNnhIzZ5caZz
+YSZzBrjm2nrwgKtyyGS2kEt1tcIZKcAlfS8kktAIRdAfQ1r5IROmq265sHHYz8f/
+h91Lc+RMfCH46F/It3bOvlbfBzLJejv8kPdrQIdA4bp6L5a2nEUSzrCrGo2IBliJ
+VfZZBdTtvreLBWshipf4vrWkvRlt6bsArpLTgm9PzNnES6uNSBR8mLAfZ2sA71yv
+ZjFj8r+wlAyonXlg+VU1ycOsLMAGzBHuryprqLQR71npLUf8m13DKKTQMt7hlPVo
+0NRZ1tBsnV27EfPJhN4WUlS3H0KW0sJBVTnUEDHy3FO+3TnQ6p7KyiyHigUjGIBd
+1Fh8dcDjtH9FMJ0r8NvYvQfQgdgg3SODloi0Hb8+Ugz4shL1n1Dzcso7EH0MM6+k
+K1IdRKzCZd3PnWjH9L3EIZZPccuMim5LIgnj6cxkpWEijxGUC3+bi9975lfD5S2j
+EJ0pu40aOcTDtnjL6gHTK8SHJEXD0Zv/fESEJNr277IUSmeCbu93bWH56mafd7tE
+gVp7k6ORdoxigguo6obwAI6v3fpSJ4FwLLqHAB79iAUFb+hZoumlImztBFDgiJa2
+ZJLglqc6lljhG3q99CvmmoZ4Al0vVlxlmhCNk9dTtK6Adq35kM0Uo0Lmy8W+v+HT
+vscKUO29zCAEAvq1g0Ru1cVcICaxtf7DYYJjcO6NRU0Cb7QgAxGrfCfV7CGTEr2u
+EY5Pmv8wYQv6O+rvr6YG4Sn9UDFiMqUl+/yn66z8wNkI2lAP6Ees2ePcup4eGJ9x
+ZZ9/zX8xHBHf7D8WA7zGN96XeNq1jB517CcY2XxRTGTWx/mKo+WcSiagy4FS283Y
+idF0uXOCPZGXc64Ub7q6hJHxhhJucDZGTLjycXZqvw5YT5Mw23tnb06k5NfovL2o
+8tyWtGqVvEnTA4hscPWgdXMNMl+Ej/uRQ2JU9w6gF/3IDejpLeAoTtsxWn4HqJ4C
+pithrZJ2QKQUb9Yvqj7ib9/sj4kdS6d39i8tv1PqVJaNwC9ZBeCUGACMHPSvefWe
+q/Hx/RDsGmkBpErDnqtwzVEoNIVUdccujUck/wuVFxafnnzL4FPfBC2/X7ne2KLM
+TgcAetGZXcUxQ3XgBRnzkda5h0YZBSwvM8KMZBplTi4ybcEsvGOtpFRvamjdpezP
+Au9LyoQHC7jBLhJ9RAyIADVjhCBgh6HptP35d8BmkmV+AN6ZXZgNQRUg6VF5Wprw
+nhYOfggUgT1r8/K4vyae0Jp6QI92Sg6nlmDKmGwG1yeiIXHtQHo5iB7TceQLAY9B
+X5Qhku4sXXPC1iHOX05Z9AqePLZ+y2HffvQwPxTJYe4QHnUvAKC3EXOJmkpjAYsp
+hJQEG7niA9tTqbRz0+AYHSbIFmdhrX78Q1NJDn4Q1/Tmlffs+zoKqXD4qJS+RkAw
+oSpMOK7zmwmvmqF1bqBE4pjazBIGFftI+kc08q7br8qiyxGMUs9sJLIViaOaHx8l
+9b7a9R6/iy1KB5396CEKMQ4a/YmUflw2J3AzUjyE7ptmragmK4nLa+DTi6t4uc6p
+Af5ED88nSp9BCzdJI7qWRhUOnjWmDnraD7B2w9InrCdW3MmFLJow4gmZG3l1SxCu
+gWANMN+tgWNq/fvAVDtwvSECoUIMIrI0jNZn/5BZX/eHlXTtT4EbRWeZdNV2/3q/
+AKKmPSMa/VzJqxf4+vbhgAzWdNq2JMQwz+WY5yQ2UdnxIDhmR3HJIhDcrj1SLPLm
+n5px+650gUtiXuljSPWaFaNNAWMPmFePoV5M7nq1gnTh/AfxrFVuPZ8UzdHVRvqH
+3v2hSBAAnG8wtvwAethn/xTsP9EroZFTjNu0zNA4DrT9GsL5CiCyp5xaimOGIRRB
++7FSyS6IkscYLVAaYwK80wpQAN3wJKgy7+MpGImD708iPoHRExWQUw8Xcy8h3m1c
+zrhUwqWP6NAvCfTPmrug0oNZkybztgIQESe93z8pfwaGr3TEszB8G17/C0MxPn5S
+GLnhlllRuVecbDdSfYXphRzOoLFs0m28DRqNVeXhwPaBvn7VpShOQ6PUs51nohG6
+8mumAVxFWqFHN+vZo37cwhblpAqpFQSj9IlCPSF3aayL2o+CeSrQNEcdqra2rCgb
+zbTnZC/pr9jt0WZZbe/ww1al03/Htfhi9JPrJW78f4ZXQYsDfDxYUhF2lj07bXCu
+WFmL8k5U73LlKttphU7q3Nk6zDoCRMZzBQug5/fYyvevLBYerGHyKYZuUNieohPg
+0wns3l4nYizp4ZaRYHoDFbyJHdWVI1kjdT6GS+n8PiwrRU/R1ZHBtZFkIjgGx187
+ckkTXp5LRJzqnqtznP+APBVR62VxqRTIODcmEMXW0wfzT2TTqPiWwZwUqFEQj892
+uW6aKqUIDUAkUdYdUOFT/Vh+Q8P1qFYXgbxW68Ko1khRWdumMaH6fDwuza35B/Kf
+/bd2akGe+xC3NCoto2zZ4TZhfdrTQgB9qFdxK5/AaFPY0zClDgLSPXZK6lhsabky
+GiFwtBQB0QX2SakNH1OH15BQ+hIcLQf6hZmKUpw6cDWdAQ40kmjebhAdnRak3pDP
+g0GGsemUSZ4++tq44l1/xa2VTGRW8XFBJJsmGzVS+EC1kQP1SN5Zkp/6u6/sKove
+AeocL06X8E64tq/86wloIqmYd5AuhToTw55zXQduvHbfx18v8GAbAnchNRYobCkD
+J+Jw2h1g4c/28D4HqxEeRccJHwtSLDCHHCsYtOhq5Ww3iX0Xf9vwjahKBEqOsuGD
+LxM7d1k5JJw0N/VoTbNXlIlTiwGpZsVl7ot/WIHoDf5C5s1Ye4gu84dD277w1jQt
+YGC/PgZlWn2NI1t57zX4PpcMxwAUIdU9jOpzubaxHLHP5ToZNxvrxv7Asytgs3Gs
+aNUKak2M0xA2LeoYfdslFXwp3vfvPkiQy82F4XoPA3ZL5DQtj2073Anvls7Mg5e4
+tPmnyE6mSGnfEj535GUl8ayKObyx99myX9uUvSxMphDBiYsk4yZpvW3jUGUBrQ5h
+duOJkgct9T5ryyYY0X5zuIaZfvu6+nfJ54vbR1/E6XN1l+DnXH7HeL6X/AQ2BTzP
+mYl3zvTX9tEUv6XTto0lME4LcnuX35m0eqXcyv93/Z8jueWbVnYxsbwUfmUf/0OY
+4XUHgsOd81qmuoiMEf7l/qD0dsdD89ckS8GszUG+2gp9ds5P8cZl2UzS+Qj0vuVa
+BMSNAiW4ilDbyJepUuRA2sB+RWSdHJC+x0AQ1wqn0ld1PPv3U4g1odXtb7Fo/gru
+r1H1Nsh+m/kTTL4OtiCzkYTHASlb2CWZB+NoniUvI/Gy63Tm16zW96ArL5zCyTP/
+wS42YAGCJOPnAAPdo2ooo6tkqe++iYWs49rRP2soPWPP8C8EY4lYlJxW4+xO1dLx
+G8+csNyXrhVpWyT5PSnfRK8bFR8mPAws1OPA/iWkHnlh4lYW7leNQLL4dK+PLzW8
+iyX/na4DqGW7ipn6ZpV51NwN8zMy1vdGmL6Qc8LWPvTwe+dA8GN0EWRjq7N7wsXS
+tImhZ36+Y1qSiP4+zMauJCCTL415A1THhdRRxukuSK8nNYbzSC8aP5RG6EOGJJyn
+B5NV6p+DHMfi9aZdtCfu6GuWOvKdjoavOoGBdYewgDMmuNEHDyEary3L+jNHj0y+
+0LMkFZrcASGk+dX+hvt3oj61ERQ7Tz96CQOggGSDLlVTQvbz9U4QnhsiAQ3TKmnD
+6pKdCXxiLBHncS7l2D6P92dV3zPG3dVMlWs0QS1S5gBcPxYIrbh58mhLySiuRanZ
+HMeY/YiWQf1ZzhXjaYNR56wPaNj9iR+kwRBcklFylFVyFQOa5HG9bjmr68AJnH/v
+U4QbWS8saPhIewcZu+cUJ19swT38591cArbrTWpIdMMnwj/Iy6XtyK5Me7FcvUa6
+uOQrmUjISwgyqliC5jZmBeLh7kaITJMOGd2LLkCOS8fOtir3KxK/B2FGlqWRcGSh
+AJc8fvka0CD0ImuwezkKf4+bZUlwuC/A2ytAv5Y+yfJSi5B2GeM38SfTI6pes54u
+YKDoomVp7QeuOIZr7uJddAizx6/UD7AxkjKdmNqOylpDMBjl8IyqqMkU6yFyOfMh
+BTkewNOWlYapZX8RymWuCmytvUlTTUFI+pRv8V9HxlEZgl0U8BmDcExYaD9N1msC
+klDi9XNLu+WMfacbS90GG+a86MbJc6EdfrZmJ/U/v3Ocf5FYQfifjM7YsVb9b0zO
+kV8y3TKJ2sTQpL9ePLzkA4iyQxdMZ4jY2zJ/V2jjsBME99TFfDMhptq9A2gXjTwe
+0IjJsIQhopoCMUTcY8q9VETGKU1jHX14qo9SJAZHT7zz5GkKrLxom9qutbDdIGwi
+RfxZgMNPDYYI3SiRW8iaftQeAEvb3gWdyylrm6ENKW7SB9Zi5HAVR7eSjfU28gyS
+Oc8a0OMxWG1m7K4iSeMO4vY7imwTQsGjv1CaemVyoEbN3W24jwJgdjZqg1PlYr3Y
+0zakTMbku36KwaTFec0/HVS/Qp9mqCgCRdHjpFOzuk2P3OVr4bU6pKe8xuCfk9jd
+7sjYIi9FU4cLuMh0EM8Dkj1xlR71y7FO8gdxGYkQQ5ye9pyas3cGQCBJLNMVMXBb
+GpqrD785K86NGne//GN2Es6ZOdH/Bz8yBqTETMf+JIlnBmZzJY1TO+QvJjg+u3t3
+IPa8C7dtsJZXyWofcj314XPdFv3hJIVKfayzY2UPchtD8lt8WuHar+jy55u1fluT
+/ALHvPqCskjgsRL2Symkx2A1AKEBfnU7+W9HVlifaNiiKIl0rUF/TqQOxdSTFBXe
+9ZptEPwUB8yoqMuer5MFNoTM0HUi/FR1E6uoZP5QSP2wgh/+gA4aNuAVlJI3Ro6q
+sFYsSjzqEPqtVFy2EbdKfMaNIo9ahL8S7h7kZzZ6XOKr2LJu+4PD5U2Reltliaeo
+mo6mD//4kZXp3Pn6nRecNEB5/KER71N2iMMkGWlBWCLkUktQ1r0JpLAHi6hETedq
+JWZ+j1q6+/Isy0u1wYjuw6K7FZ1D9lL2MAA3bEFn6ZN0S3KXT8MbTDoqLs6CE7Rn
+wla86SRwhwXVpZ9ALvIM5wCZbKFMdtsM43YHojDKJO6sIyw6OFsfbjj9hE72uaIb
+ToRIDbZYVT3WVTG05YRoJRDqBZFE8GBy9XdRR08baUyfXRzjEEzWIEwlBPfC0Qr1
+CtdaNGHfr+G2dntx1QPatXYpQIGPIvh2swD+/bxSZn64YMSrC09+6smSTkTkQvIw
+e0ARv33TXJvkyQoM+/n65xY5Zhp5oij3tEK/v7GvPtGZXXBiI9jNPnkjQtxKNMgt
+B+GWjYMZCoNoE39cX+Il8AzXosPDhCr8VVlArdwGNKzaGv4kB6fxmGODaAX3Ufj/
+jy/rE4uRxZ2ppDkamgQ4p5PKO5fBdLrmaftpRDPFwxldmddWNj4PHiw743tDue5y
+oV3Ta8msZpRt3Jw+UyIy7pX7BRB7cnNwdqv6kAsVLe67PptKcTepUJ/Zx/fZw5mq
+G+HaIQ5mo7A80Fb5SQpoRFxx+H0kdfivO3o8cqi7qBsodpRjqeBPrDFZI1zmkF1w
+whqNi/awZ9o4ZrCGTD5TiV0c6ZMEwCh0s88JC7X/NcYiG+e1nWrtjZY+z8zJWsST
+s5lqovjEjNq5JzIGH8cL5EEEDMw9soBTrfyNS8PH/aN0CpbuCvaqVMVsgRAfETVO
+psa2SypU61S9KJdr8u2k1kY6ilngJlhBE45TArLwYgv27UWuCPTJJQx0WkSt+E2N
+KjS6lSCVL1bitcMb2g1CovX9KnIbCOgbmCqLBFzH7iq7YD3iyG+Mr4nEvFaWZlCf
+eSnUssIw4BNlbIt4eQhrDmF7lhXv0XWNI7rO2JA0idxrs0eB5AeJkwjay8j7mNM+
+ojKew6qHg/68MkpA+ornj+d5IDVcl/8JNh3cp3CRynBXbX/ow3TtbwNmxZypQ92V
+jODzJYBmdL+eD2W1y+cQT/dRl8caETvikQyN8jQjmn4rM78A3dWKm61lMK8oK+L8
+rmva/XYlU+vHHpMJZWSGUKESQC32W/YZ9nQITNtS6PpBZAKkOxNe3lv4kRjI/8fi
+DF30bsZtjwx5B5OYE5YvjfzmNzzJanmLPrWnVNCAk+cNxzC8s3K2y3HtB6y3ELvd
+RddGeiviAEdgoi/C2xvvjCSewRTTDCZAfXHsDHZMn67VUazuo8GmgaagAC7CjaxG
+ukMs9MEGzlRQrfnp570ISdoxLmZTNCbKThkt2TWQ4keCkU73lirSUGnoJdSr7AaJ
+xkd43f/CSF1c0bh+D4yscs6jQt5tXBrnf6v3j/LPpR77PsCNNaXqFG4r/G1G05GQ
+Zw2PArfwIQwwgHsGlI+JqyKGB8TSOilP9UbaIEX5l5P4BqHzhLJAoDkjhJFqcEHg
+aW1xDcHgIHmRDWXXTvTuJmaS1jrv4p36sFBFVbvdXuFIGseEhN+fMASxUu2F3VAC
+/BM6TXJ2tFH+yYUxehUK1X4vFpNMGnUrZCzu07M0OYKYbI2cEXbgxNZOi0ipJjDe
+olHvuXkEB15ZroHQ2iDv8gL+DL6odskZIocviATluUWDhLArvL4bDBFaV2wRjx2C
+rML6Nnnp0yc8KOObPB7h97QgfTj6FMj3KCJD2QGrOWV3XXVxSS8achaGg6Y2V39w
+3XV+kLBX8wG1q4Nuwwqg9WAYgLTpxHcSkjbZ1/Oj0/ir9eFWivf1aGjyhkRL9jUK
+BpDm6hCRkRSTi2SSJPrwxxAQ+tzDizVSiOQLFjTzCi8yPx+ZsS0CRNzxljTjVcCV
+EqlX8sozEkcx4i1PEq9J9f1UA59cHF6rce8+vk2oFm5Szy9EbbFmbU9F+SJurK0J
+jDrG67I1yuMvrnHiHd7L+cU+dHtfMYHT5noEcFllyol5IOHGxPa3F3OiFqhWrD+U
+CzJzPlw9zpjMmN1YmCL9DDxWygoE+QL9wgfRz0d4QYEmdRqi2rSyFu/uDpgmK6zM
+6tHqtdZJCPLu8GE18FVmWP9d25QM8NBNgQVSKCJHMdPiDYB8GULJsiyqMFgQhu3v
+oIcjQGImAzSsgqXZTFHw53vNy3VaZFmuaPZSfF0QoufMWURrZMC9NuWgHGqqu5dM
+JJ6pCm9PfDAaqre9LUCyP2AttFBBtPO5sr3IKh3TnmDbuRBoV++2C5yBAC+TCBnI
+7VvAI4kkQC9ziGfHXJ8W1I0zWQME4zbdDJuCGNT5Stt35pY3V5de1n/B55+BlLp0
+Cf5H156Tyawf/K9rHgtnlN9Ekw4clCkcLfj0eNSF5ENn8C8YSvQLMEig5yVIuZLj
+DY5sjVxHeXCYFm5sP5ePNJvYj257J9WUbCsyVZ+LNVXuWWzkVCx/baAAEgYw1Dn9
+NPmklcjHpRUSJzZcNUI4YzY04XrY2/dF3QVw7v8R7Rf8CcuS4EZD+5tHRDXI/ruj
+UDAe8DbjlFqqWPG680SGInmePAy2MH553MkmVOlI4vLaP6zVemEW5fs0HAaNriO9
+ykjwJrmNQyXjK+ZZ4QmVNA4Itx2IlgXmZrsXupcSdp/Hq9jFP2PGKWoPuXcJBHDH
+Sr6P+OOcVGA0ZU+bWMEQprhulSSMO5wLOcEZr0G8cEBpSCY2Dai3BXBo8fPTwZol
+JLlWMj8qvMn5774H0xIWhmlGUFYUxanOssHe0JkVRQZcLKE+CbUIV69uaShM0UY3
+G6AChMrncteuLzt3/OKPTNqYXuWQwo1fVvpUab3v7aSJGfjuWqhIAa5SCDaI3JjM
+oRvl/rQEN/C6Yz4Wwg7oTmxnGQ0IduW0ZyHbKrbw0Ytnk/FT9Mi0zysnaQcKtejo
+XX8g/bEAyEzEGwV2B5njYHH5CMX1cYRGFjO/Od/s7tif9i21jcjDooKl3EcyHs9l
+ENKFQ/yUWFYm1HWIZRFoUWz9eyuYRG/OOW9+Xawcol4cRaySz6KxPzLz9iLiFQBX
+YgrtacGCTeXYElsZocwmZk2pPiNfdEOYUPPT7fj7zwX6SEOz+qG05bFXHpjPQucZ
+R4efMQLgyQBvM5mLrFP67T2LgwQFk2//YdK/fsmGe4fpZUlavHST9jbQtJjKJCY+
+fMvyCtauBRGEJc4LWHPAX/y6342L/Lz/T87BSB9IVcrmwlBZyyBi5WMLyiHkaYzE
+I2iDIq+poCwfk5cFSEGrwjC2FMviMQr/RVWUJgmPVFOtq1ZpPkX2Zz1Y9LSNQ1Qu
+AXbmhFWB/gq0c1pz4PZunRYjmct2/AOcsCb0xlL0BEX2z5hECY9wxOhNJKMY1F3u
+//wbOa9lPn71x/OMKcsD5eQYekcB2+o4Cc+m4172EtDJXSUIjpUt+iyjGtBZJNao
+H9Rw6op3arSwj1TXJv/ryaADcPjwry7yJP+uzaMlQM1ssnzSrkbE4M9tklLU73jr
+uK/BSai8MrHbkRSN2/y9zAxOr4SXAYeO8VBwVhmZpWPxp6uOM3WGX9Vojo/RgNeH
++nvCGbTmYxwhvvmpPczDuOwhkvccEw/izJJwtcmtIhiRV8aKCmnfd1Z8IxYt4URN
+g8NGTbTPZj4SGcuJr+t3ch6tlgUYbivdaBAfqVwpDFF6BX+Zyfu0z30DS4bUjzPZ
+VlBBnNzOqLiRZUqyNC4OcWwwOM9NhJtmjGGO3KO/RZzMEJhbkASPc3nS8nMTmAkf
+PWvXE+jAY+HL4Ye4/Ci2wOfCN7b4OOw/C0nfj8nG4SjiJpQRwRTjCDekYKVm/Skl
+aUTEJziUi/QAyVGlfgRuMEacx5T3ZBbcYYk0EmSxIAKATseXU6tETI7EWJQ+PkG0
+5HhqUGTVejHnanPfrzR744jostTPbEY15th4oD744CNhsRKkutG2eSLRLqtrZsAm
+IruxiK4LXz0DhT5rw8yeTxeMuZkF3yhYb88Phfc4piWNzjXcq77BKR+6RN/RRHfm
+acgzN0w72GIi0UXmmjFIrirDJeg6BxuUFzFybHICfIV6hoI9MP4bNABy0bNDOcVR
+Njzo9wy9xGnqQWJkoXkcA+qLIN2J6RQiKVV3boobbUgCzwNiY4w7TrdC9HUmG8Ll
+RFq0tSgavD5RtLES5T+PeKbMtG+19sIZVTnW0hcwSr26Eczs7Q3pSuuMulMtIptS
+eSiakRyF/HuIO4U8l3mlxN9hvkbqW5u6jut1o0SBYrmfGnjh3cTPJUyw10kmIIPu
+hGEB4QolptXOred8GULl5gXcZLKe8k836O8nqTJQrqhO8QTCa/AtewHcWsuJO99K
+O4juBGqF/kKtq7dKGowJ+uuuOD5+6l3v0uvo4ZLM10kxjse65vsWk34ZjLiyJq5X
+sKKMoG1gdJF1CQKMoN5XMsXbHNBNjuZhKHVbbWf5LdgK4RzdiGzuTrt2sF/a4Hxm
+RhP3zRlAkV4/4at2cO+Y2hqG/vajMbKpPTvPRrjIxBCH84EWwBFkipPaZNdZGvE9
+wSyypiAujc9j2Rz/n6bMyaQAGbsny3r9Blt+mrGS4wINHXZfIFKd74Lv6pXG7kgG
+9rx5sYqf8E80O15ohfrAdru4jzSLar83quarvbphOk14dfsyrvouGCsn4FPWu/0s
+PI2OH4NSfDj5KYDej6kY0t5Ldg75uwWLZ4DJcsQKXWFKKQOMi9mSOiL7H2He/hYO
+7UNwZJNBKBsbSj9hY/dXHkPToEOzTKNguj79UgtFQaCCnus4eyHINderb8IsEqmA
+GFcF1IOn96qQgBIFs2yYgYXm2F6vyWzDl0MIA8elE13I1ugk/GhoRZCG+T3iBj5B
+jkAevRNKfecwsC8aA1B2vA34eDuk2zGUmFCo0Tl1Gao4YnsH/np972mpozvwP5fT
+yY2fGpUoxIr1d4mnvYDZtKxvDGSCj2mNls7Q390eM9VAp5sfypEuhSiYnCwMojkZ
+Ixy+sRVs8unuNhn6QtEXxBlwSyjGj7HCD/tioPl3BVlVX2aoi/Fr80CT32Ezj2Le
+oT4nOJLuNKQFosfLMr6M0DmI5W+3/WjJ0xL7Qnf47/Y2MWtvq8ykw8oayT6J8OYf
+IOWEGuLccIUfq2QciMhrltn8vOdUDMQ7zkuqx5DsnVI3g1J401nwvrcrWfSuF4nh
+6UrYGUldl7NW5C2zXTrLxuFoU6M95RxGgzoQXXh01WWnYPgjRD+fzCQ+GzNfKXOG
+nX2dTzLP+Ply2Ifx07QOp3lOhea36yax+RQlJ+tRfMrCpaHplcz9R/mSOhYX2DkB
+QUgNPGoDRQMNdtvIz2LA+7TeN8bBlum8u+T1whf+B7uARipRMA83PwYCaWSVMnNV
+7Pc/7DakRA6py0++R/y4sm4HmiF+zQpJdu93T+AMAJqQQ1yeyjB4xhtqUe9NTd6V
+ZvXSn+fEB5X5M/Qg149dV0EOu4rkDNPa42BhqFLFipfZxmI6vJSRQPcNbtQU54NE
+Vn9YowBYmSbU5/JuFsiWolpYiBVwUlJMUyUzIL+QsRclXiMmk1kX0S5cGn4+3u0g
+90hmvHki7Q8S/wVooS/I2lUqN0wZuhTwwu8yOGS+qprun4XVBBncc3oMKZ1IKPdN
+h0MGStHP/PesafO/5q44RB36wrYKGV2vbMyn/8Zn8vOX/KhAHAZol4nhKJwAleM/
+Eun2UgZiajLJ4OS1zBh00DeDdpF1GMVTDpBKo5uxSuox8iTLZbW1JQ3UnePO6WfC
+BoMBi8WxbfmKdc6Uh5mDrnU1Hz50Tdbxi5OfR3Jwvtbgs+mSBsachwtsY5Y55KP2
+8WvLXTTWnnge5SKjouPfCf1riWy/ybOpspr0oPzjxq0I0sYvV8ii7sxysDKrfJg+
+g0Ecavjo7a80/HHF9NoBAeMCC1yjgfWWfrVvGqj0QN/Na2JQm6mi7jbDHlQWIDk0
+uHR8TfDi0MBTFDHKF4DDmlOj9bwGDue0tis8LwrWw+GhzcP5FOOP8qLyaCN/dj8i
+b0zI542gJ6ZOS0tiTL0mbFl0hXhJv3TaZkSi8FTYjlYS8YKxNJR6sC4Ig8oUB7V8
++CUeKFI05g7HxBDSS+DCR++jPnAPjIWwbQrp/aO9kFHcO0maTC7XGWYB67a9iwaV
+tpQRqv6Dcf0vYHlhuizSZjADpvQqovhriA8rOgO0uIb29/TAII6NIGZAm1xgzdg8
+2lGPfVgF1AFlPMgNGS2edPaqx/1h1Giao7dkQWNpczrma15hiv7IUXymq9DxH8Fd
+uEFSlFVnVi77x972j9HwG/L1+p0T5utHcfmrSUdwOcyrXlbbFI0JoJQha7sXOfW4
+OhF0wNBmLe7jEYuCmfRRKUeL9ZksfEImZYgg1KNbmN6Hn7HBHS5cbxl3AWP4bUaX
+Uobbf71vv8BQPfM6c2lEZCtCa+l0dYlPMhXmTufziYPhujt4Ng5MsvQR1q1rxx0e
+la93of5Xl1ORqj4P93J8pKWjhnaejEMhk7LKD27MYYp49nFuwRDGonYFdW5VedvJ
+ah6J0v1HVUyrrM7/CrAjXw7WsIv5PYYkLBNKAz8MbzvaTx8y5iIAqXO6lvzobk3E
+sb1WDy28oFXwLQIFReg0ykdYFbAum56uLCT7RzE+X2Iw+jN+HPZbZWG26zmUNJLw
+elKp2v2I1pk7cNegCdPdjm+Ndm5fll5THW0N714jMUdvtE4Nx3joZ3N+btRtOG6y
+3pHfLijceH78p9E2qLEDcnO0d4UY9Qc0QH18Wo8XveWogh3O6GfPcAFmNVmoODyB
+ai4oObn5LrWEXaL4DYXYt3WpUMT+8AB1Bwvl8/Ng9CJVGKbGmMixUhY00/NZoLRZ
+CzIdPRk/0uM6baK0kYJmtrr+Vi9ocTXrp/Jt9YThgFgR5QIMo1P8t+Yjbrl5iB58
+Bp1Iu33P17uGDo4RKag5KWrZVqmCYo3KXdKROYKrtN4AVitK0gjsa2jywmXetLEl
+5EB1bTQLr5J23f+JpqmW5PC1PM+414iU8wBM8+1cWHVzeP66tN8DWdTs46VJrocB
+JIIPUAt3Kwm24mD14G4F1fgzRzyCDpFSplAYuMH1qPjcOkoJM45rlWze/7uoUcbc
+Vjgv86Sw5iVtW7EIuFj/1/fbwVWQZz892f0jsXHIsCCpLNMNnnuklKgwqARfodX2
+NJKLiwj/lAptTy6snYWi/u7xcwxZaH11HYq9lxjOiM15KftALfSS6exKiCb6G+cg
+7VRiQ03TqyZw/SFk6rRnVOYShn3zA9fjgLFGukRJNU0KykXbLs5E4BBvkI4/Ei8x
+BY8SnMDBUz1XD28FrqGeDef3ypyBRKcKIbLyPkFYixkTRUVv6+k46et4rTqvz/bf
+h55Z6286I7qUOFExcFRGnqEKnL+yoZbds4creoyUYOLOucHCwLZZf1AXZeff8m1H
+TP0jwODnxqF3SMz+lHyKc5RwiBQPJzSVlpPtVzTUoL+jdS8sRU6WoxtZOw0g7iwD
+Q+Jr1/SSG0XhpNiipP33/jScQ9B6hGWmgjHbrcV5mq3/VJz+JRb+4CsgEdOW7b8n
+z90nvssOGG+Zd6AJ8X69d7DRYWkyEqjObdSgB9MZG4gU7SErnJ9YxcyaMAQTb7Ub
+y+P1xSET/b+MR4JiwhSgg9wvd9Nn6TsSWCPjE25gBj+KYjvvRWJyS1LH6jPe9Nib
+C/T3435aX1rpgftMs/eYfli0+3LflBEpEI+oZlVeQLMmlYjYqvAj/Ri+JwBzlYP1
+tM9BuufgYsJkrUegEjbfNerosw90rNJwwzuNunyHCeXrceePGDC+Cay80OHqEABg
+wFxY9YAkjAT9Z+v8HYea68day1hY9Gk0jHY/fCBbViWEy7k8BaVCGsMICqU1yOQU
+1rIh2lZVjp9K9T9MePiIo1NMuWhoMMkJoYmdnLpCiwplXyhixjh3jrLfuP/dhKr1
+wqvlrPKefnykAlKS1+ohwpjSGLv6jLjYDymjvfsz1py8RPumsa7r5xGbrEeS/YMt
+ppz7MF7Q0EL79X7leH5m77sIdaMMmZ/Zdl4k+CQLc0e1Jd6ER1Rbt9sW0Jt3GmUh
+SN25X73JVOqCbVeqee56is58aL6GJ6L7KyeYqBQn/DWns9pPlcz240ZboSs8xRso
+B9UOpi4Xfu2FXjA6L8DUj2z5QEJ7S86VEcfhnVxsZgaJDh78dp7em7ENykPnjvHd
+AAdBii0jbl33arSzRUrsnKyIBNPGnScQxyGvoG9YTjfIYHOdh2PpOknhFgV0R/4p
+Dot2Xr2QmJUQn8H4WbkQfasCa2ViUBnIFtE/eCtR29D8wheaJFYCB+rhxKhW8R33
++zgKHKGplHjpBwYzQlT94iq5YBztXDEujoG6rUHDBAMtIgbbECZmx9xWEv8Sq7Ci
+i3Z69jkkL9iXgAY5Mu54z2bE2azKSRQuoa6HNVpSV2cDTXgH60Jy00yi32ivfdNe
+Ozs0n0fk3UEqKaPF/dPjEOQpZAu8jVt9G8PO8SE7SrcdCh8DSgeZ3Q6lChUZOpMx
+AYPZzHHeaIMhzfGrwbaeCbsWaZ6QMUXNZFe0yWzo+zVFuhaBjzGEXfY1FObaMoUA
+Q6VNJQR7xxuUy35UyH6mCbyS4XwnEps4PBxOQZFHGTcPnHs7yA0vBNKgCcg7LUSy
+ofevfy+ldVdbnrkmBWYsp59aYOGLzeOTLv+raPyeOLx/E/SQj8e6rfWQHedKW3pc
+UbZoMdgBGFMO7ZDyn0A6+DysTN34MQNON9eH66fFM2i7iHqPol5A/SCS6gWmjTlS
+mb5HVFqdtm9A3PxeTFrOEM6wQNpS/UTd7idZ90+ab2xQR0Qec4duNGcx2baN7AGK
+rNfwtH8Fi7WwGQlnl5miQnpq9DtUISqMGcKMR7ffvSunOC3C7Wfoj8G8KLLvHP8C
+/hpWAxw0jFkqIF6F00TH5GQQ9Sn9GXPKfDa0o29Bo3zqDXM+xITRYQllWCPL3aHY
+R8ko2+AW79n548HqC8Pc6GL0EjXwQKRT4bAekH+0d0qiOJqLl0BH0cnaec3h7L5o
+YYt2dC62/ZnEa/1NFy2cqezplUDbu/MtOGO4jskTRVQx2hW0Gs0k2f2SNayR71kk
+GwE7HN5y0vY5ZJA+UR+bsWRx7wyIoxjK7s0OwOIyGtBIveE8LqUkubjym9wFE5vp
+lzKA+dsZ0veGxS9ovoxRBokiBo/yHhnTSwSJL2n8+uEACLpRunA63n6Qm075QldL
+KyOEG0jJWZFDkYGYqi13tR1r6kSnk/T/prpdU96tYHwiHWo6pWg1olwRH08RN4Ws
+BCi0Ong8i8oWbpxb3smcKmyg+vw1AX3qOJTq0FKLsKIkcR2XIS/4e092sycIx9iM
+T+PByXiwknRCB6KcifPGqIMtcI4GBAnmg+U1ejvgCnLKUOMA36Ed1j5So8e86XGn
+5PoDC3+cTvxGetr48Ae+vpqty3gzBzrMj85e1ea2oBM0g6JiCxS7ThH0fl4Nd6gK
+xyv+f0MPiNRhSzUmklEeU25leG3TIiWOcx6agj/RSq6BmRAzd62fWcPoc7MgQosF
+a3P/GKC2dyChvXOg8YlCVflSCbu2cMIGiCprU2FcifnxbPp37MZd0u5I+OXlFf27
+VLx0gy46n0LDDnkkJ/fbeF9tM9rEjGCIzJ/FqWJlhofBU6wTgsfcA8ai7vz2D8hz
+dtPso+mZefXb3VapLbPioZlqJEFWTdsvBk9utKbveS30MT6fUwZjHFKgnTZTpKmI
+tlpCK7QPcWDWtJS+JlkhRQNginBjwU0s6SFkkQMkhgbHgkXi0P0jPuqwmmwO4rF6
+lHKfHfmc8ohGtdMF62E1RpL6MYRlHNZKzodF2QKwMSU0fQytW6U/eK8Ye2RzYaPI
+D1R2b4OyDLXndh073dXgCcwL9VFS4GEFdMIBzawHJcHczD1dPMFjMAtX0bm7IH5a
+sGOYfoOCF4Vu33jVBT8Cx/y6Duu/ZmfglyW0/ceuwRRBJr0TywiW0iyIDV+nwKX1
+7aLMR9CVtqlzqVaTP3NCSZat67tvGCWlaKURw0vQHG478G68LaUGB0DQ4Ew9tybw
+L5rwU7RRLi/uzOOOXINSoT8cX29xthphTxofl+1L2S4F8A9EAXtsB3pZVERMlxXO
+HahlGwzu8ePPb+fG9CoO3e0zWyK8wYLxpEDOQmz7Gw9GphQlFXMCc8ACrU/22nLP
+lc/aqJZ2Gxrgbxdffx516n7VRtFYVt7ASEhewaDAtrJf+bbjRRJNt8nBCbzGy7MM
+7O8s3PmDhKuB0aH4gTKCRb5Fi2coYt5stR38O7t3tQpE6Ta74qyRSY+x2gsY2HJe
+1KJ3ksU/MesSOuwCSOrkwwtHzwVGxLoym1EY1X4jEmZHxgWHZ8E5GuZSYn8BTkKT
+usdKa+gVwOC7kEcHOvlKdW38uv0tOw2dFLfUmRU9C/fWdg6PSIKpe7XoGic0z/+S
+LyJ3nrN0uVVPfoJ6yhSD+wF3CH4AQrGHRYTHLxAf6XIKyPHGwPh++OenVALAA90r
+yfb10yq8DcVW0L1c6anp/aIGq07D9qbIGZHY73A0OqKXdzjPrLBPiQwwNKoPe8Pa
+yFInFGoQSO1hm/9qRrSxTwPPGOB+8x8/wW/9DvyPhe0Cd0Rw2A0H4udqHKzODrXP
+7Q/RRykmtO+cmFfLxsdUJ4x1gUtbD6lQkTumoap7+37/O1z2GfXygR7DwMUBSF4z
+fiPuwgcS9kQEq9dkT5ccFF7BcRGASFsyeVWzG5qmLDyl2a8J+BY2VuOaVp8qxmWF
+hyuXH35ezpgp34xnGXQjiEGiMEEj8PDz8qVkpMyxEdVZzjE6L3UqMpewqn1stXG9
+NRc2a/ZyU/Y2xv+075lFEM4/i/OSvRTYMiBtltTtG2plpGzznle2sj2xAIoFUvib
+AcXfaZr2fKXxvhy8h1w/AxiaiT9Szzb9+2YdTjG+ZsqbNBDQmtHHBHSwYgP5kb63
+oN1230lT3Fic57MTJC4K7uuq/iSu/vp3x7DBTmdImT18QIPIUla6vrzk/S35FRt9
+5UNMRFSCudtMy/S5sRJocg==
+=ctge
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFileDual.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,305 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf+JtvyXkTP7RfD9pPJGGj0YLxUpNcBx8LJWyyHEYdUfnUN
+ZUmXgJbtXjXO2uSOn5DsBLLT9Q1MKDNtqMUdnRW/aS2sQKchjqekbQn7AkwmDYG5
+xIhMBeHZzLRFFXFedGi9UJJ+vZGacg+xMxTEnysiC5dm9gWO8ugLMey/bARHtd9F
+YxBeMy2QU4ZADRLevi/XSvKEdQm88DLQi2oOsaux9u9VJdkx1Aa0RR98NJS/LnNF
+Ni5Gqf5WaTKoTAdkdTWO9P5gtIWXXrDvjj6Moi/wglRTSWy5jgHcJ6J24UzmRwIY
+0z0zLAEH5qIytxhJJsQO//545Lj9kc9S/PpBMIhnRggAqkyvfuzGgdrQ/oRegAue
+VrsZ3gm5DzlZid56OrJ4BejpFXHcZw+1aIBaAX7a/AiOAwctxdMsYV2+hiH59Iq6
+5y5+GC7nTgHRpznfnKQNwaFWIw3jSCqFubvmVaybhZqvqAXHdDhPTzg3/43v7/Kr
+lSGS6/5AXkPY1FqTYaQLj5ElKPVrh9MC2o7erFDA6/7R9Jq6LtGj6nqERTXN06H7
+afK27+QS9/BrOzaSTt8tVBvxA0zFL+8/OD3ck9poqFIxxDpiJRyVlR083Rr48WGJ
+s5k1sgHMtOtoZFt7yoqcjrEq701N+Ieo6NhREb8FldckifyPXhy0dWoWr181Bpiv
+DIUCDgOy9U5HV+IkUBAH/2rJD5s06EwKUBLH1xObFCpls8O6stDnEI6MbLuf/WTZ
+WrPlLPF57Kynmc+SkeQRp/of1FjkFCLPbsO4oeZWHZS0jjac3VuAHYQK5zIzR2dP
+I6aZavMrGHDT29jfepmezNnlaEv8mC0tiPPrnzIFE81fT3xr3jW+ff2B1lvmQtM0
+eBphI9h+eAn7AP7jZWfgWCCnWb8bjibQ3kAUKAMfAJStuyAX0dtxoux08b5oxkmh
+VL9YDqwZAbeKkMo7h5ZZHfZShe22r86fzdITcqpdmU3wLfsKr0H0PKTJJk+ID7im
+8LnMn8he09vD+JJQ2fYhx15sr3zKwP3oEWuxscrDB/MIAMR0tbwU2S5+/rklcOEX
+b98Nd0Qz80oU9rgOHEKaqMJ8fSrjzp0y8MU9H4NpmHhK0AA5MiKXtV9F7ZltLQ4m
+Jh9iA/yUokHr3FvRQwr9Tlg+7CQoO2epO/D4AWmDU5vJQqNfWEu+C4qhVMve6bDc
+l5hcRDW2CduHC56ZiwWG+8J0Adf4l8gBf7OYHTTwgIvw3jVqtdH9W6tfMLpV5xoc
+MH7mcuZnOOFm8ydrTf7Hvev69qiVUrp78dUuXnB+DqVx3fN8bJVrT8UgPdEQSTeL
+SbL5Yt4dCGl8yOU6UQXWVO007yDO0QWwSTTdZYLdQe9VtDx8K2yCC+qtyVyeZdWN
+OxbS7QF3xP7iCavDvEl6MTwQzn7uUdWXQCdAn5oO34cpeYoKRRTq0NibAmQHBV+5
+aBu38WGojW+e2XYj9cOjvmTOHmLVqEJaG21WTBAnkU9vb0HzUUJaFJM7gG6NeIbL
+pEE2ZcpCekQXg3zLmcz19PRMzT6J7+YndCKu8oVQf+OUpfZGLMdPnQ2FUfi7o2S5
+N5CtGYKNMtUAEyD3E9Lr7QcVaZlRRhxQtUAYEwTCw6Ilw5Nxge2De9BeKjHHLH4I
+MWqmZoKO3m6GUAuhv/YYim5YWfUYU/W0+vKTmS5HTcfiT1w+kWwljidNtHQDfXCR
+jfyV8d6iWI8+3akdzBrgBzPx0SpRN9XsWK8hlGf39dGfoWQ6Lkd5bCTAMXDrqcMp
+XEC5IsTME8Er4cNXXD4ELVIE5a2aKdo1E8XAXulzRowyPLKN6w9oOtlAnxsGbw5U
+gmY8C8JsrseKkKx8jf4abTfU/v5GqmY8WzOudgAELpEIE9sSnmrH4I6EWDjmK/gG
+aLk/UUE4JcfnXhatfV7FIUtheoW2+9HrOz83Cx8hT0+v6SZmMiPXv3NIQWE+6q2D
+JWzUuEqTV+G9V6osPVZ52oPeSZlvibyJWHPJbuYHehVfD2FSecg8waDgNyz0z4WV
+7+vTuRRbr4VDu3IdUI0LC5//ys1wLTcaMwgDHfevDDPmmstKJBOmjb1GnkEHoJW6
+FRX1repUAzoYl1SaBFbr9Js3SPzdrhuArRSiNrTzjx1RGcO4p8kIE03b38lnQX4Q
+dT/J1VjO3orfe4FiR9yCJnHZxauuSJcYku0Zxt7QeMNsl3NTg3zJmy8Hs7C1tm6m
+vchfxGblL+K8CU9pYUQpipUYxfVcJQkVQYEWZUrFP55vTd1jvFFM2/BZNjRxRIwj
+qCN57PbJY8kBzdiHwsvrTYshdzprYRbO4Trdr99QLMvN7CndP5KFP/PjzNivbf+i
+M8pIXlcWMmtad/k682QSFHrOdq5csBJP3U2zhNjSArXDJWS3MgJnNsdw26NLKS2L
+gnQtpBZYboWQ87RnYJ1EXoYTe41PNRMTvNGmnmlcRceKsyORzxl4ag3Km6j2fRRs
+iUB7UYa0zkvDAkGaJf2uoEsL2cKtJVzfGY/+VgDz7WZ6GzSfg4e4X18mTPX/CKFb
+30lXTFaoYfPfXfq4JWYX1aIdRJTxeDyg40bWV0G6PALU0Bh6xxW5NsIK5K7eCtpR
+vzIq8qQI3WgJJqhrwI3VP4lOkEgSgwoFfoMuO1OPamKflxKRlNuhumqz/VZae0MY
+/NO5LiRcQS2Pzf+OUEvReagtpgpKVs3tIZUiobYQJhyQ+vkaVeLLw0o27Z85rvnI
+kvZ/gQVJApO6xOnRhbuZkBppfXe0S9xmDASk2Ef0btAbDqfdgOd4g56vhW3yo+Z6
+SYVDNrB6SQPN0mGv+oeMwrEdZn/xrIY2Pnml5kzppzPV+NVC9oQjDwCBXjWl+a1F
+P1goovyySPltTDTxt0NjAxG+zK8mM1dI9xEwGh/iiHmzh2rJc+o3cOtEw1+V7PLy
+SXm029IEabm763MbsiTFc7i1dlR3kDz+njAdS+8xAKdm5MVg1tv7SG+cFSUw61dE
+ymeF6YgOmIidKnGzFjPZ9LQdXG9qHXPfdsGiiJt68KUZZwGNvCsRXi/uIwDxR2Ho
+XqSBxDgJBt7au7GkizMDumKfONOUOtO650dfn5ekrZnr4eF/9tafTiUCxHJsyRSF
+mIBeYLCa0FTCzUmFSBXl/k6tm8Gf/y2CRuEf2MEYJAqvi3063YLurkllzUzHWbxr
+mmCq4fKBUYTcdkB0Tu7MVgrJz9rcAqzOrNPx6w66zcEHFIBzObYNZZ3imkLqJZD2
+bESsEqOBAm40OUYdBdadpbV7pZXau6Pw5/43femuMIG5b77FN/2IX5ZY7iXrRtPd
+K384FA1TZvpbwhd5XDami7rQ1C0dIM9xk139+BTxxCHP4V/Qc7stqDYwDPvgsMy/
+NK4iXPmzVubaPqVA7LldqrFWVc7thL2KYTHtAAeQec4YMFxRUfEJAbqmcCeW5h8A
+rXyle3fyW18wE34TYqLpbRRhemf3QsFAIT2ulLutfinxbN5zBp+xWB1AvQQHFKrq
+hNhgIfCZmw+fALkNFdo0QaesuOWLDBorfc/hMVnavMoICLn2v161SptB8OTluDhV
+F//BSBTxD6Bwh+N2spRPWIsRFH/HdBpsLtLZetcF4FYrlEk/jHouVm4R3GdTijf9
+KUkRmU0ta67Eb20+mP1ySj/2AbhGU87E8oIeIr2MrbixJJkr3y1DSjleS+lY1IF4
+SdoThcwyfQ+e+kmhpM7MBoFQ4Qp9fSQF0XcOzn48URL8X/gRCxSF/GrdV7A10vI6
+EUJtpezD1uHGvWkONyedpxjpl8aITICGig6rcZt/edtWKjfQkl1kEN913l0nfbLt
+2/Y0rvPBVDl4RKWQpxtiNzjK1faSO82O3C+GjrXeVawJH32+IRQh7T1HwzfcI5Yc
+cK9Ku8UMyZVyqK2983MDi+6oo3EdMsemUTsE/NBzM+em3RK9K8Sdgqtfi1mEZnz4
+1kpDTXRwJawc2qril/P0/Qu6MMvgnE/xVrY2XvGmKxreNiM4CO5tf+hHy8PdUF69
+tHe/5eVsTN1r7cTenl7/kztEgutmp8oqSlaBG21UyQOVplBHCimagrGlZdgp/EMJ
+Mjzd5J7yHPqrKUA4+r6uv0nhARMCOT5U3tgeAROWlecwTeJSTGa3Lj5wPrHaddgz
+N/ORUae1PK1J5ilkKBssbQjLv83vDh1A21YMNIHlff2TBOxJR/xR3favrt0zFbj9
+QrHNTRMQ8UsPrMTcIxuxyTet4Wqg8XzvWnzjQCon0/peO/FZ3TnMcego1/jXHD83
+W2WJ52nhRzAa7oDTW9qPfq0Qznua6+MQdzFuZ74ghZBXS5uM1uMQ7DjXAtEo0opF
+leuPv/LdK2llutRDsKNKUmos9OEckcXiWwa3UCWFB5uYeLignioV2K9KsGRCM6MT
+kG6W2mxwrWztuLXgn1Ov49MVYfJkCn4QhLs/xvNUaQI76n7RH80GZduwl2iTh/BJ
+YD3PsofE3/+BahFE9/LbL/4qFub/yPb+f+RWrC7/bUEeoj96ZGVgMTH1rjQWWadq
+LNpt77aBU5aEXkCraIK94ZCd7eJez6fQ7nwj1oylCwIjZB4IjXE7UmDhm3A7Xjw1
+qoYF/YJDHPE4q4fxCxki89yhqp8CwQYAMRkKB457PPEVgSy4raTkXzWxnB9X48Lg
+Ub+6VstVEUwWDOzCwVlD2UMygRrKYqBT0EcbqhZcP9v0StFNTpCFq3AWzmXTYmOH
++Rxu3cz1PFkm8ZW7oITik43Dwzk4JhTsPibldgyIe0x4U2ukyp+XJ9k5Y5okMZMr
+IoGlCg98teUTwNOeE66CDOEsa9TYi2ZX4sD29vmuslsn2m4bm0FE34MDB9v2sM/e
+TfeDi5xl+hYSreAIaN/ZojsBC3NJyDtvj+BQNGUTBOzI0wjpM/ndQu1KUb1ctB1a
+BnrLqAqSEV4h/RyjNpPNietMjjKOJoobpa1weZFCDRPe/p8SfG4txGxR2j9rz+x5
+tRdzIcRO0LBQE70Dk+OK5iixqwhJkNZtRnEdZgrpMdPCRdqMtZGO+q2YczfzJ9tg
+X5yxy/Tbj8qf6TkyS171Q62wtzLpPhW7KPNis2kQLGrnyoSIxAQefwPVVk59O0FL
+g72I1I3guOLwEQa1w1vviheTUcQtyK3QgYFFgFY/vyBOLqAQyvS0SGkE1tiAo4yO
+XkFOrrp0tBnTrcsgrDx/zM1wZP47HkHU++HXBYd7fQB4fXBzbyeTZRka0+C4HBkh
++JIV9nNpEZUJ7OKDC1/OJUknPlhZ9BB9rFT4mKaktitan+ha/97DD4Um/3sC/gB/
+Hr9CgRJj1DcMdqH9nK6zjxkRNhadYy7yWslG4GCq+0trrvuUDzluaehP6LjQ89/p
+CYB9zv9LBjSAHHrBwRp6Kf7yTq/ycDjoTDgVKeiAu8fSgyE6J+/cIkNro6SqqWEJ
+hKM/a79DPaKdPXl+NbPJxk6zRkMDrqxmdjvjTQGj722tNuY33A4LjjJc1+a3Vpr6
+L1qhLl0IFNEGrPEfP3liTyesRBZnZA5hL0HAX3HTQke/YH+8Q9F4wO3euQG10pHz
+faAvZ2oG10MBBoUVygVTZW8z5s74+UsesZfo6/VoCGvcpvFp7e6o+gbzZ8WYqj7P
+V2yKzT5dUdlDJ8A4vu6KCzuYllj9+Vm2kH9nYPpOXukkM+EOKDjHRxleQ/XCW4Cn
+OXJxuklPNb9i7j+tz05bEC++59SNHDpG+mGXHHR5p7yVBO3w398lnOK0WyeqOLqD
+aTpK6kQ+pf+LHfFAExc17H0TErjJbfFNnnYLpKdtvT+RNyy7BL9q9f00NSbXU1Yw
+s8w8Z7mEPNqW+YDOsu8d6oVw8D+mJUaoSW1Bm6oB9HWp4YUlLCOSwCtF3OJsRfXr
+shXOF6MhaILsKGn9xDgHIJ2ZvttlHoovhh1J5+jhtJpP0c9DFV3pfjwa+B2G1w3s
+e2XqUCpvltqeKzcPQgx1G16HfpBv5EfHE6iWj5t1bcpVrPLKfi7hgzKJvAbOyHCu
+DFX29wFZk1TPvbxzJb3WX17wSp9GK5lKmLXrX/9+QFWk5XiyOgNMX8rh2t+2g+8t
+9j31SQ+dABziXowlqBPEXue3jEX7MUPVMwlzjSgSedLFlc4gveaCxRusx1vPzShv
+4Gj5TWlvrawGCez/LLdQ9XFf+IBjNDAEOxDvfnETRiIqNPQlcQn9n7/gyG+wcK/5
+kwksPsgO+hHDcWCcM48eaWjF9lgWkew7ulZHCFPXDp8jX6YSoWqsOPWZJBQbr5ze
+vWsG4PlFrY/xE3XaHd7Hs3KX0vKzXmbNEf7kQ4O8sF9w28KqXl33AFW2vAlAiB1P
+dZaIQdwFO/8qeTHIEBfzpV8zI6yIv0/l2EtOS1JyrhuSTKrHSoKKDA+Fq7JUEI2C
+ec89X+RSFVeWQEGdKS2GnX62rphu6k7/9s2I4RMEYuESlyB2R+X2eclEqkTi+c5m
+smXKM1z9Vi7mkpJr+D+fhRT0Rp1cWrZrCh44kW5NRm/Xp4DXqVCeNgBK3f5XYtoh
+tqoJEurF4MhcCb6Gv6AX4v5QbEyRyfbl0PR0xIIxxUi3V4DbxA6JvFz865sG3kn4
+s25LtKXgIdV8k1Uua/XxFE0kNFOaekChLLM4w6YowNZaRB3fN+3PpSi2QpQQk13U
+zz84EQsxh3GTZlYvb4MQT4psG+n2s42ISzlEGuqNztvGAEkJRgrsIhT+q0pTgd7d
+S/B1VeGRfakUpRF/BjZgsvA0ICHNdetlP/ZvdS42VVqsqwrHDWgTLTF3B/cQ4kaW
+PFLufQQKSSTREpwpC/w7zUh0tTCVqdPS8nhcI/PreLltpkNgc4y2sVxPIQuJ71Qb
+5hHZYoc+Zm0cdCemkpw2/XFPBfxS+ELMe+WxKSwRPcflnUkvZ1YVa1yrXwyMYQBN
+YScwryWXz2/FcxH+Me74HHXpeasWt9udpB+5IoQONj0A1Sb/4OBarWZt12ATqnP/
+DoAPoZswlWqQO+ZwMUsKa5dbhiHHNw6BIALFe5DJCs45l/bryxTTQz3SDAjIMPik
+rasEuIJuxQrojB5RIbfQyd0H/2yAtYXM6StMSQaZkhefmPzANArhg1uNUTTL9vO7
+Wr61BDSu3s691IYftr/wwtXL9penQ5bUmnTP9EJyg2rCtuXUe9pljBIcABcmRLIh
+iNnaLC0taLFoLJBoL23zYW8XdCWtXxPj3SY/lvFthYDfF66heO6JlpM7VKVgWsW3
+Ii6BGMUJmjRYYUhC0BJdneN+/02Xo3U2w8iwSJ8O+dNGDHxbwkWEHrUrRoN9UJbD
+ylQ3vCDr6ioCkFAvKafwsK/HZ0RIrCjNwA9TLcytAZZ12LL8qQuJXKlEU3SuyVAo
+7kcL2Y+Ik4VCy7ALWnnC7srmd5f6T6AwIJFQkg9o3mw+BfWwhGRCrExwDYHINOPM
+oQKyc3H0j4yK64ZSqb5rncLDWC7jFVzV1pnRYU/F6XS1axdcHTp8ggzj+rT4z/ef
+a2mA4COvT2AvVwJ92mOTv+jZa1gL1LInZD4wk0PzOlUVjwa3vCR/zQQ02jbW9GDx
+u6jsAMc/70ewpDxEZtz9kQGTCGyttGChul6XP3taYeKt74ZsnRBG0rRXw51r7rz/
+M0onAOmPkW29Lv9gIhuN2LYOkQy/F0a4hMeRFyfRGfhSwoO/gg8SXnhlUyJm8QMt
+X8U2StMDzxORXFez5OcSFpsBOJgqbPUb4TznAIrusfIbXufJXjdK1Ch+rUgDvW+b
+HEqIEho1D4HzVmLXqLgx8uU8ji2Atq0D/H1h1PCSji51lAdHZKSfwryYy5Mh6ofG
+OPs0pJUoV0hcxTbH0zM/tsFlg6U0yaYDkbnwHntP4k27FSdsNBhUqpM/DKnpALVl
+xjZHbXkHJ+ke204MSvAHW0XlywJA6CML+RMedu/EEljJ6m6qnqoLXn0I4Eldohk6
+Gk65YYrBKMhHhRXWJWlYuQyfZ2XRURNvGQu+6zA8nYQHlBD36jeegxwGVfUe3Eu3
+MTl2/l5LkPfwTXM761RTTnD6yOSRx18K0GHDWUIm5Gy961dvcjI0uYjcg0t2si6o
+zXeSOowSiJ3KGmA7TmpsoP3xSbKNen4Ny1lkZ80XQSJfzNlX8uzS7kRVEMmHzeSO
+UW9zptSGVfX1jYfyP5pq2Y4+F0YaUux132mS78P9srMnEUePK+VdsXr+A7DaQwND
+pdh7np5O+olnoJNU2EaDsEnQuV9i4GJzIvsdz52MDAgAZ1+wNfRp/UnZne+kAvZa
+01F/pS0jwly7gwVoDIpZrTaQEvnLLqbPwaPiLj4pYe70iIaGa2HO9GIeXege2NW5
+TKfU97yvC45wa4JqynHJJAe1cKLeKAaWwayPc71w9DFFdEp9grnZLrWTb24XJFAL
+sd7nKw+iX1eGhpbBUhcyxB7urDTqougc0952IIeT8VJT84ztzvrV0uXi5SLYnbia
+i1hysXQ8PdVTYTdZHlJtzpo3fHgYKxV8kxmkK7Dj/I6z2oXpUXTIinWqDUEUUjeD
++C5ZuEd/NKhOQX00Nn3Afnin4+cbOBWqlAv6LvkpYhABh1/CD0t2Aut/NygOSOph
+4u3LbNl85cPO+x2TD7AFXYa7WHIvTibpDnxSOm7PsMMvV8wK2VA+HZwjaGZzfeWP
+4NlXlSNYIjRHU79p0EFh2ntDV0ASNpdvG8AEizvrCKJp1ICTmY1q8JhEX2UaEVPv
+72BC5Ms5/UtFRcKoS2EqV23wz/X5tD7Xu6CjgYpP0DswBkrmy207SJ2HeegghnWa
+Q+gk0XruUiVZvVORG5lMGUq6rLGhEiy9DyJUrKkAr5k2wzLM8owXekYgBqfXOl7z
+gj3WmZLcG9UHlIQ0ol7c1IisRRBWTBLrB6MLp4TCsFe0RRRnHRFRiQ4QmmIM0EMk
+kHxUH4NoyfjL84aX73+exaCLun3jmabkI3fNb7gzQg1dm+MeoSV8TaKk/XNdYiiq
+peaXG26ZFMVCViJFe00ySFIYEYIwECx4L1KqCq1crWWvajbpH8DCdhYe086zUFnk
+3dmgW/yU45GC/GpfoP+4+UQVpmMtYvS2eomZ22yvh485y3J/MN0HbooNom4DUzoE
+H3W8HArL634TBT7dy7lUBzlf9GvqN2WXiE0/Y3OMglw99i/syLw2YqSK6Y5pb5BP
+7Dee0AHNCx/TRsUUk4Gb5IbJaN/4jK6oGrVQ6cd1FhdoF+UhEPNh3Rd17on+EeA2
+won2zU47tJZEfikjomz9nAePTn7nWBw6mXSISXG9JIZ4DLNPa23JLBIjFii1TVzW
+81Wa5oIBrXL5xMimi99mxyKKZrVpXXk9F7Ewa4bJgcr2B98ZPke+skuWorK1PCVy
+DBphnnQ8hFtEAySxA8rP6pYcctolLRT5U0/H4q6PZVWlubKBowh6QoeqyBBomjjx
+tKY/hBz5AqT9pt93TdCqGicxVN0u0FjT5MR9yrWmiY8P2MONMiz5/LEp3HwtMKVh
+gMX8TMf6s8kRnSr+x3KVWl14Hjbipl/lu1TB7x8jxGizYm0YfTHhwAPX3elK/Rwp
+Cf1AtxJeHrPweIHOR0azZY89HRZJBt12x+iAbHmieiQZdhol8NW4nUVxMg0KUp/C
+uxB/r66PIeoANJeVG5Y/sJpF7NKSxRk+2OAP9WJmG929OjrxlGf4vMqs5HUX3rkE
+q1sIzpnHr88x8Eq0la7aFShoJrlol7wCp1VcEx0ht+dLUPxVmoHvtQhPjZqRrL5f
+2Yx19uZYUH2xZFmWtzEHBvUxUO1/a8SgjlNbkYVeX9wS5r/g2Og2+mEWTJdwZ/uj
+dEOijoHWxvpEoai5z8gUOorMct9AKplrWQ0R+/5Z4W2/ME9+/2icGvwdyfhFccZV
+RnzqDeM4gdBKcY23qcZYkPkcbMwdAbFV0IB8Y/oM4t0V+iNC153qoRipEvR3hWhZ
+EzYv+QUdFOd9HHyw4Ny8/bD26le3ModzwyIOtyMCPym7CrMbFa+INTBBaD/h580x
+NsUz9BeDlN/0o4voH0gbi6fHPClElY94M1U0ED5TGNPkjNEVCXfqBT7fYDMuUh7T
+tTqGSKeLYjhazJNZiKdiR8dhOpBZwGkI/xI7NnnRJCkBbTx+NmCh1nDwVtJeUHc1
+RR7Axktq6nPDtZykuyyFYAbiDdU1oFnN0VmcW5FE+Wmv39uC2PblLVKQmFy9BD8S
+qF77P96NPVMF8YJwMnVjRzhPMqZjQAvEBmJ82YOTX8pxLSZg9CWpUCrLTtBxRa7K
+gpWSx+3ZJGZfIqOQSBSIwAis0U2vGlUV7VbsE7yPs3Sr1VQqyDFIiOKttytuzbnn
+WybKe5w0c255JBcvVX1MCUj2bBoJ5gRphww0jzbCLqqi9WsZndsftFwDsLNoYx4I
+QdcL/OGf25aQ156DyWt1vPoHqJPKzZJNV2tW+3JK8/htn0g3Swe3Zgy1gsEZIPTb
+Vu09s+WCbLawFkONipvQHKjetx01isKeZHm9+05ThIFqvFnWhnjjQ5WSAEZ8yslX
+wnSZx5LN5xe0daNBHkMnXGtPALiExp6A/EYkbpeJLBRF9w6kVWrCmwb86+dwxHoN
+Wm48tfghvBLWw8hTdP96naWVmmjOdXLK+4Hivn4ZgwjUDZ2kia8QY+ygnGX9NTsx
+BcViWKpGP9IcrfpPOOpz9Gbjx2yhb9klylt7hhWnZNzCriGg9XbxCjB1QFKR0QVU
+EeSS4YP98R5yT5emAG956t4w5th9VTkli8FzKngZ+ZYH/OlYSQUOADuKDMyh9BlI
+pGjLmkBUP70eX7TnsSgB6Fv5s/aLcb9iB646b1WvaZy9CWTtx9nDnaEghvKOuzvH
+AQps6b6HF411iJu4YfHON5IZ4YFpgWslUe1ohyPa31wkrUsXzDhoZit7ZmIS2zK5
+Iug4UHhlpkeHy5ixqP20GXJ4oOhlG+yH4KT+BZqIiaZiL6a4NdK2LYghjuKqRx6O
+zjn9wvGeWC+dsk+SNB1kx6akxy7i/6iGIhdUE/4VxTg/3l+INOJOjH+CkpM98X1L
+rADTq8yzxOzN4bUR3kqEqhD4pSyaQyakDOsfnB5CRvBGYJsMOxGbWvdgkuJJ7Hs2
+nLvYdC9StEE+lQ4ggGzzXGqLEfHvBjSQihCZl82YRCNt/kXFlTXJ8S6gijx3320A
+f7NeI42iU+CYC2h7fqJSXU56QP0T0BF/V0iGc3lumtyuYRlojn8ZTwxL6pLoG65O
+t6LVhWe5fwDRgcXLlcUOZn1UIJ+fX2b8cEHuKN8gcQ3hKIvDhcH7WptazkE776rC
+LEQ4MX//EBD34ERS8qRARyq16PAxFMR0GkhPXMA2x7vdmasAAn3w+hPvBfgzeCdn
+b0Qyc2ofONTR3Y/AoAJu4Rx6SX3Jd5qrtDf/BJ5mBEt01dvyF8uxLIRqB9tsqpzv
+edrkrNQ7pZoRCY0NEvhrM3h4dqx/c+7RBvldjF4Pzw5M7PTRq0cCmlB5Ynip85vO
+aT9qTNziFs7kT0Tfw6tPxeHmnlX3sPi2WYJs9c6ho4UoGL0nh2HpvWjL2EasXxZa
+KN6T+PXyV4ByyFt81lK8fItdGdzFHC56DXsqvRBzodCvtECNnVYPJGNt04HC4so2
+8CPl3L7GkgdafVspyx74SdbMfhB7IbebNGexl80IcwQL9SkxAVGQ9XaY1P6WUh/r
+78owBMIsDK9ew5T0x/bPHyrmfuZKE4yWoIzWKnK7NDcLH7p4sC0VchHAqAnivMhZ
+0opHDMbFhDZbgjKLtbL1l6ngZxrkVjGHKpsjh2eXgSUlUNYvedX2dZvjtts2VKa7
+4JieMeu2FJeTBnf70DC5NCb5roq430l1eRuEuvOMQMYeAvzTRL1FqAKYrxPlk5Yj
+xGWlfYPkmEJW+WBRMX6+mTLg4rKUIjL0xJlMYkc0oHqfnF+QKCjSdI+HUKP3oakn
+yytcb+cmzduFMhV6wyngWt2ffvxVncsgeN7ejRV+e2K5NYxPyuLzbnUskfAa1vmq
+/pnaXhUc0p+vpF/RreRFrYiLeAFrVONAhauoW0Jskf5XNHlxfXCHwjB9jp+xJvjq
+b+U5LC7guP5amm3Exrjh337uXo/T5c7MEf7T6d5yze2mxP45JRQ+jN20i5U5SAE0
+njhYrCxZuS7gmrSGNzYDjJNLnDWKRFwgBa4R0ekqDfWjAN+6pTPTajMXplPhaQI5
+o33ToBpFMPkHeiLNq1ohGDFEPztxagieIRQV1E005dghrI1ZbHBlkiowVxur5Uke
+Bny+p/7EqNsAdXHJmJL/j63gMt0TLD2R5Rr/xtiXSRLe34JHqQn8Mg+EdrPuCBIE
+Sm6oLKRSuyaxMsLc/nfvD4765Fd68nd2scINPJ654FwxPVjO7No4hxsAjn64ANXU
+ZlFFZy5KZI9Rc2h0bbfaU4iJbgE+U+r1tXcPaCf6ioYUdo0/mf6UcCCD/OXhRA5l
+zRLbQXRveghWGPal/ZnRomzEiORDfapFQ8lMLYNpG2feTJaf+La/jc5YCKrdBeoc
+upOqGGod3KixjYqMq3FkymPFuyMzktwX1lyslkXkW2GFPMKS/tS4a13N3RZarOw/
+bRttH28sn28iDm1bs0zWDlRB73+oFXlK2nVIRhfUDfiZKhPG0tVVOYj/N+60VLdo
+5QjFbVmpErpb7RxfhojGPbwbY67e2BHAPI4AcCgcMDnlT/2zUNCMaiLGH065iUHh
+luWAOo0DyMDdTzUCynJvnXVQ87BofzpybYAKCjiOZ6raHiFrEAOyq39qx9y9Fbj0
+BxvfRrHN0JiovnkXuaw335kio7beC/5KI8+X485GvOgWn0H+yoX7VZY8/zxdWDvG
+WphxodCdG4HZaV1czKj+NQPgMCzO8eQ9+U4dnliGA41ih4cPcl1WNBzaGJ2i8NcY
+4nMNV4jDUNC+EpIreaZIbsEfl+9bw0j2qWibQemAsCN76QF/aUZWAV1yaH8znPed
+QmmC6JIRu9oODHS2isWSgSRggozMfDtFUsUdVjCjJO1/bToW6GVv21nuWDuFT3Hb
+115C+/sKj6k20eC7qWj0+pno6eMKtJIRBRxTMFE+r5llPdkKm/+CKOSg5mnYfv3o
+dqGGpIGxH5r26UC7szL8Se4Kq2iy02Jnj9qv446PyV8isnUwyAYyOABOU9G4zsqJ
+/9/bj34/iD9VuinhpR6SacE9AaJRIDopJ/F7q+Q2j/xKswrS6OyzYHYPsNzrbIab
+ozLZcbFi06vvSLYmdlhS1q1s9vAz+Q9HQBhx1ldqAf9ZRuGfrqHzGtjfvQk2odct
+77jwph/dnEzKpo8Oi+33YRVWk0NZQCuWvnsR+PzlYxk8BcnmHHZSjRSlvEVzJSTj
+ORmLidrt26xEolC9BCcZFZ+SgpXHBDZa1T11ZqFNt0q6S3TlhK4qN8D32B/O/weX
+ImbQ16oMtm3s2Yvl9ixQChBDPe2KQ5k5Un/p/2Mjzn0LKYc07JLE0ylbVxyVfD9j
+Q/yfox0jAgIaWk7BVA1gSaFpU+kEyJmuLRw8XKg3x8ftCTJXavqpm+41L/aowu53
+uDpLRsYML/AH9XGCvhJ5A/BUZ/WEspmF3sn71u7kos5ttpJxHMF26ZXMjte8Bwlr
+/HwbX1gbRD7pfsuKJf6JnbAH4bJoPDFeopih5P+JWJo+5k/cVTdL61xfEMvS+n+m
+WjjxePGz5sB5jQv2++n9LOO4gx5uVB/qez8q9xNIAUX2xe30UWrnmV0fq4ztjDsU
+B0p8v5WS+qZfoV8WGbtXMdhDp39wMww/kLU3s+2pyI3tdXofDw0ycxiX4yTiGhwq
+G3B/lx7V5sdoYtBPvfytX/PHZQdWzZCNuAjsiwsKijYZ0bxS7pbLB/ujjH4paZUf
+HT1rP0o5UljuTpswFXxkE1X7FRfroEPLUwoiQWskUfjl5Vdxjn3FwxgT7hMIeqAw
+YWg/JFEhyy4yfLQKWUHRiIvkVmeEcQ0aUngsC3UK6AojH94pKO+ADCvfDhsrQCrj
+O0UeZk3mNAsaYdnFB8O7nKjpFU2FvsjEj381Wtve+o0DR5wxQgvU2pr/HuJuyNm0
+uglI29QR0A8BTaHHlK9ckeT/lehU+IXT06XuxDA4FtCs414x1SWO/1heHWeQ7I2L
+P14wIXRpXsqvCq1bowkDWab5RAmUnppXSl5ZRA0KM5jTo0mUZwuVPBZCMQjV9KQw
+HBzuSBRUW6+zcWun26SamtrbkET7pbXBoPKYeM8e9sw4spKSeNARNG1J+y/ISAB2
+JAlSLM0YT2VIkh8np4LDgNwMxY2KvCemoNDOt1fZnOedBO6sjxFx2M6iWhTVtVo0
+lY6n9Xm2QHP8rtjMV3YdkmuWZdRALc0M5a/Pe1+fnsSP1VGpnPYATx8MJzJYu3R6
+3DENOh1fZRved5RQChygf7Jve00X198U2gXY2osYqZf6EQHPlANjeQky+fYC/53U
+nLCecE3/zVBntei5m/UMzjM5xD9CU8bcsjhEvEvf66difLxnfdwViOSQjZTHG43Q
+0dx8aeS4zdFSxuQc9RAGHnmF9E+XUPc47czwXCbMu0EYzrD2Wowv7KyZHdaje8lv
+XbzGAM8NuE3D0kiys5uDSRWp5nlm6QdjtJL9hbqnifF60VePpT0us5lVrfoAQsMz
+pXsndMYMgmbpTEEmFyFJto7H/s9rJ/merNie3E/1/4Fwx+XwdoUtPSywcPha2+db
+z87EuvCcNU3gv1kPMhsK68YPUHY6/JKq/FBH8+yget36b1CRIT8RoVYvfJFX/MUv
+q8LrxPNdxgVHdgbsPK4Y/01eHoMVOwpxZ7EjlXRjfMIC1M3Mx1gu51/FQWcNfcs0
+AW2Ktn/OAMiMQxCujJ4q4sAsf3VH0BaHjakydcI7qTsFR8CqPKgbDduaCDo8d3zv
+HLvgDSOe0O60l+7DOK+Jv3NazSzWi9/M/3oAZynB3GadQ8dXNpI7teN22CfsWaTd
+JCouN84HffDTJkWTRfRLFqPA5X1GsMp0YxbISHBn4oZHxO5AshPjBnSOUGaLRfRk
+kzzQDvsjtDrhnN3u9jmu2hmL3PGmHviufENcGD3oOJrkfBsn1WdU0h+eFdBeVS96
+roCRhoxIG1BnUDMn459ETaaNGAFmAxpCkmoCLKmhzdZ2E0Yn42G2lsN15ulAkijz
+EBavrnIvg/XPTOa2qB+zaZ+A0A1MUJBZvpMUKhykIBhc8SR6p2mQN4m/tEv7G7Dj
+n2EZ8x8K21w7V+eStiDhs7R8SJOjf7z6WrrEGigjRrlLnD87/6zgXoSILsHlp9Id
+IWC3BwRC+7IX5GZiyUBIzH56/egB7mPrwL3NFpGJOmKxYYxxaADXdONXXbhZs7RK
+NwXN3G4+nMCGtwqu0I0oWhZu38+x7rZU3W48SS/6t0eX9ngPbIxVH+/nl8E8LQQF
+lMO2hipYZKG9rHGb218lAHV8W98qDGv1LEjjDI/FkikDodkl1T5KDgoJcU1Gx+5W
+ZTNxxuqGhUfVJIWv2/RRFa8zsT/nEVrsmdjusg9UJmVowcABYRolqHLzAgs1c3n8
+f5f4G952sKfsLQ1xizvZp6SxNFuw+U8Alw61W8kkd0Sce/CFvnCo5RED+3VaZfTn
+HWjLqs7tf1jgUxSBuObDlONWP2rd2kI3V4OALnMvHBVihtX2ma0oI5hO6AtAXiVE
+hBetH36j14fY/ElsU163ecUrbDVIuzTnYkoSqOB0lT1P8AILrvSkx3acgxn2WFmY
+l60UBk3Opp9jDaOFpOprFW3fwb8fLhQPfPUXiDZVsb04ELuL3JodzJ9gd1Lseggm
+z0r2sYWx3ydcpJbNCVh60IddOH7NF2VsjSuiToYSORFwIiAbaRPBBd8Qj7wfo+LB
+Xmj1V3l0nMDTPLIBSg7nL3fD4pEAR/HnvY2f7rOCNE/w/fZ9WHNIjKXplXlLGsyg
+5cGqCRFOGj4s2lkGw96ydGPN71Gv07oXQNDzZ74BFcE8i0/4Gk0FNxuSJA2etqaY
+nfozd3w5rVHmC8Mqm92fvW48LfYGrjEqPVjEpg7tSe2GMR2nSM70Uot8xOv67nXz
+rrrliNOLlvhQ1wNW5I1hHi/qnsntLhM2dPAtuRVoHFRiy0IN8FwUZXabnPSSQahk
+gMUwqfI0urSPP3B4Ge6VqsdOJwpaD8+f+/LLbBD0IINm7gFh1F0rcpEJ88pUuDNi
+E9SODGX/2GUUgQn05mqU2wQaCb6GHQu3GBSltEInFVcgJYFkacCzdmjO1ySQ8Ymf
+y4pO1AlxyVSZgezrU0qb574fx8Srlx1WSk/qVtcIk10jIuqf7l0jfKqW5PNUX71G
+pfIdZDmFEVYg2RnySAn0yGUZoHUxOf0KXfl531jDo4ymK30oHgl2u/H9M+DS5d3v
+XLdXGuJXvy3UIpOgv6VkfMjPpsvp0ReOzEFMYJVZFo1iedt9M/OWFPgxqNYC3acv
+tpU3en9ryquxNp13dsEylTD/WyE95liUAWWcdg531mESka5iQHicXbsD4IceWCdZ
+NyoAd6Yyic1mDTmZtjbAQOlQHgFGBLfv1B7VXa/mbEmg9h/1HoM6pJCNkIHbNRYk
+9TzHnOwlx2AFKLO6bjIKNytCQUCa4JnEi/8favyxEuXZ57Edp8GfHmO2s16FD3Nq
+u2tWOqulm2ib6avPVjYU9fkoeClo/2KYIbVEjADNKVz8p/fFrbu47kFcfafo7uTK
+HH39nWwnAi0UIMsOfyMCKNU2BAWWnI9Um7l88+koKac/XOdEDyTxjbboACG60C0m
+1+1zSxzjnImvjPrub8GHIQ/0nr8Ta4pY3ZQLmvzsBkloDPaeXv5X2fa4kI9NI/lX
+4FUoG2xPyfD9x8OY2unmAt4E3pcjcGXJZfocOULpiSoueP86HymjHEKqiVKbvWhs
+Tt54HXezk8C9faSamIHs1pHNufdPaDKCNk6yjb+lNx5WUH7X9EwOSzZC+eQx+bon
+/wsFlbLf89CSAVYDwYHb1LrKrqEzP6yjvS1vDFgZMOEamy08dvuY0iFqkBulOPeR
+mKBwjhpm43nzP5UcZdzChBC4g+y9oBbeqyXxaESg9ndCLdr//tnLs2MYwFVpFTys
+KZDndsG2Ifjz49k+kYMws5azeXlBlIX+mKDg+NzFbrK7ltWF4WoJAZ+AkqS7xSE8
+xBoKkjxKIINozDrOcQiY7HT05fbhT9HqlhLM48dspKp+zixTkR+hnb4+KS3x5+ol
+Z0d7+1sqpIMs6D3qzWnnFjalW9Rnu2TVrmrI8KGsvryr54hO1imIHrQOLKvMI/YS
+4NulqfIR5VhY599nwFthIk7wIiAyH8v9GPOb0N1N27v5N4/3qwnzSyhPlw7o0bHw
+F2TtZ7wUVsZoqGKwmUK4osNVG51H7mPH74RGE9bDH698p0RE5/0KZSw6df0rlQze
+/dqvopJKxqllU/NQkeWoYuch0D+5SlXK+vYDQEofp0yXy8pQADeW64X7W+ZLYJjq
+WcCySQ/t8vY82xm4wnCjREd6zLrSAvKnCxVyHIOHbLfz1LKfTLcpqhgHKJlcpESQ
+/YBAr05pSNEU/ck3jgIB7BsNrLSujdjXuf5LHVlETGkq5qGVYCHuYNdCFkkHdwor
+kdlR/KfvYKNalg3RU5yI6YhwcZNlUoWdJKHcnmsvhnlz+Kf8m21Y/ZLKWILK//n7
+wPgjQ++ku/bGN4+WEaj8T6EoD9DXPmI+FXbyFk+Sv4v2bkt2sjSn6XH5bUMZAfS6
+T6JxJLNVEBrzdFpbC47cORaPxYfdQBrwMr0VMK8biMF5U1BSuRG2gR2gWCOHb52y
+NEPWlkJeqW/3whr5nuKga3xn55BdQVfNYRFkdTO6PWCBY8s84jeGiLhHlmmvhmZV
+9d9CdnvpeAtbZZFZruFXzwnkXZMtyEwGdN0dxa/9jUot30Dz5A1GUmspN3Yck4HK
+dx9K2Aspi5nSFBSSl92T5BpQR9Kki8Gl4ZJV6nwQBRgDGPho+VKDiIUUaFzrvR8t
+TCR2qtEI2taX9xoRo3TqRvKfCZzHK4fyObVAZhuvUzpLPU/ufYy19nKUf6Bw8+y+
+vUWAATTFs5ZbGJUzJ6nzfWjA7CZ7lSDKxVLJSRqCCFAE9BjCH+Gj7ks303UL6CZL
++uofTznOnO0HFjGRPKDuTS69JtGxPLFj0R7wGMOZTP6ngszDCideGCLRsnTV8jWI
+m/ia1GYPmmI0o8Z/Fzy7zFAkMGlsGhAN9gGFYm4pyawKuJbCx4iQy6a7P4Mwt3/2
+I9MLSusP4KJRNiuht+SsatuW5/Rd+ZTcvqlsPiWNfYhYNxo7pClT3ZDD3n6L2Ham
+PcLcwvtmUkarVq0YxFUxnyGkkHQiy/y63HASXps6aHg1TSf7f1fjJ8cSsJrqx67e
+UaU9tAvP9gWyBW5MyMeU6JGRogoEdu8MgO2MaB451Ot0StH0uQnNJS9eFQ9Xf3Eh
+hlHW9HXwgZp14TYKAnEfseMVc+Wp5+xvqQioBBVYwXJn93NfrlO8ryl97dhD6Hzu
+N+Oq3i3+OYEdeP9TtsBJh9Lexr7PNDQ9I+bhtxNNDAHa6p2f7rDBPLclRFB773Qz
++5XdB1VYZPiL1askb1KWPlekI4EBjey5amt8KdC6l7xsoBTS9ULeGcEfeOfm6UkA
+zqciPVAvm12m0Zs5/8yRfULIuP1azO8S/DNzXJy097mgYkiLs9AUDHUH7LIbr/hV
+XWnKrhe0IfSFXPqkVNZR2cycwvzGGm5D4DrD/x2Wb/07F6Tj/p/plk3bDgHEfFPJ
+9elX74HV3WOxfkwCUnq3hVcbLtotsYFfJWnvU+sQ2cSjOq6qVTYxipHpG/V1bRPt
+Tt5kB6wuR0q0Yl1YHVisFzuBZEndVwotvEYAxP3Bkvf5cp3h+jr0DsQzfoLK9pMF
+zbPlT5xNX9cF8GRvIf/mt3ZYZG1ooDdhJlYVzVPZ57a9rFkA8oboK5tVAj4Sb6KV
+Q6gE/DjTKw45+jgST2VSpGAAipW3rmNIKq+ZO3LJOW68xr92g8K0SCaQWytClTPf
+xqF2iSOvqKDVVDgI33UMjSsFZQi+PNAFiddTUVRZ1AKVdbsMr84nIefL6LqFil9C
+H6q4JdVnPSgCLcE+r07MpSxaIk6YAPXpD7/isRyRKcK1wgplTqYHkPtkqoM8G8RM
+8FkcN0uT6JXAVk46XJKW3CjvAf5VTyKF5qMJyE2inpzw3JGjj8Z3IbtsG2gcHcQl
+y93dAmTIM2+4a268Poy7Lo6NibE=
+=YQVd
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFileDualOnePassphrase.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,305 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgAxerwfEJD90uM73bKL7qu0ao2GBYjz0UyyS44aCY89UAX
+BvkDzhZDuse/HEmEmhK6tc9qBGu+gKcQm28g6wYXqnWufjyBrM2xWmE6R9CoenFp
+5J/InNY8ry9qr79EwV6tU0kZXZ89zhByKdukoC80zEvsNL+t/BF2xCIGXd/l+KMg
+n1Ga7AnON0xoDZ5DUIqtqf3A3XdcR4p533yThd0muRNJwyFkijQ25wxET0LCJTwt
+RFpgF4XGz3WYh9WyX093vrmRL2CrEr4LljrZ9KHg8gEQHo/gora0tqIgPJqjK5B8
+szJ3cqdWVQOaS+ryVuJSU/KEUwgFXxs0D8rHAXXOiwf/a/X+OIinllQSQRVrxGbD
+3efdQvNcgo3WtzX4F/32FzIWFGI4ueViNlrz5z+A8dMXRIpGLyYFcVsKmSrsJZaz
+aASKDWrlryeiL4ISjJ0akEG+yLH6Ym56nXtdiAzFSBCI97LE99PX0LQsj4erh7Kb
+kto86vg7F3oNpnRG6NHwErq73I7e+DtrUNnylLoDQJoiWpY9Qxi14jc2bJvHxOTA
+4EARsT+X1GVv5pOP06Qp/QKwGHqymhBwg/0gPVMM8Dp0s5BEXn/S/qKl3OUvU0O2
+wDws7svJFQv2VcNlk2bPbeZBkfIo/gyGUyXiuE86NjWWwYbfoTovx0EHQnS2lrUq
+SYUCDgMkvzgHAMFLTxAH+wZvDstWm8ZImDmLeOd4+434WZddcbeAgoYDlQqIcEbX
+C92gJIXvvCRaztBEUO+fQKewA1frMMHJ11/hckGrwvFuvyrr8BSFiw7P1jQRZyq7
+V18RUutepo+1xUt8t+HHqo8CJ6bOdfoK1tsqtyfGiUSjD1hNxzOoE1EsuHeSK85r
+scrr0GwihIyZqfUfNjdu/9QOtaZZrbRTwZFFSRJe5D0zok6X3FlBxSqIaqh0giSX
+zweHU7IIYH/v7zMv2TP6y3ruCcXzmk5ricMj3QDh4PaKCP6PL8T/+tl8bq1o8Fe2
+Xb5/N5M/4F4dijMeGHynz8SJO5AQM0SjH+9OOb2Jsr0H/3446VRch3k2qbc7/hgG
+qqFhUhYEPhLaGdT/zkzrAXhnRdJgcngb1FsouD4/gCEFTxG/X+jWDeHETWxyklOR
+q96eCIS1mA0PgUE+KcDcA/KhI8gt8rMT0uyuXWGjzGsgjAq4prVNt0QrR3hvQ4ob
+n+VfAPXzRTXKCSssnwtA0fPn2PQ1aHxVrS4RtudJDr6a5mmXmwWsGwirouRvj+nu
+wpZZwfYE/iUsueVtcHMDiO/UyLJv2pfZop8u7plOfrDqlBlR94KmT3WfFrQptpYy
+SGMJh2eP1Toa+HywqgL2xGpV2KkXtuUBBaI49+4O3GemxA+gm07FhIuy2qVBtL3f
+1dDS7QHTs+Scte2ZkREjvz3O9RqVe/una7vaEqkynxzjyVeFx2B3vviKWQuHBkaW
+flx3KhizK2smXIidOngx/5NLsFq5pU/9AWSnpQcwh6f4cPISAFzuUURsxBKpbI6W
+ZE+ZWwTTpFIeAneprkD2z+Qgio5MqS2Ft02TAsI1/DJjxG2BfykL4b6Cr5bSTnq1
+woCR8/tvS/Ubna1KlcsDeuisT13zQKa/lb2zmZXMUU7O2BUOnHR9m9UIJi0i3UyL
+wzejwniIUImW688IgLrE6ZPPg7xfYDLKym/3QMn/7sinEQXNWjUtBJNLejw2E+/R
+pILuwkXnihMSazwJIm4KCBtIGEYTe81zrG8euqkG4WF8lQWnV0C1ONjPd+t6yjNB
+vvFfziWaRu4OgJhzca5KZby7iKEzndHEv9dx5r+Gewc0MQ3kP7QbSmP2y+VWWDEQ
+0ZjBSK2ZgWjGiVsYQ9VCND6a1n6ecZCTxmrn2go+/augLDeumpb531elixXEyh5M
+iG1YHEmZoSQ3MMYA2fa+vI1imTfczl+ynZE7J4J12bj3XGS54CeATJLPjAMra2rZ
+JjbsUR7yHGMphBZOY1ycYXpCEKXR0QOEXXh1H2vn83GFqmSbm6UjuO4VylWjx6Cr
+1QtObCzwapQ5rMZiNhrIQ1F04hOfPhf0lcD/+P0kmBZH+Y4eLzIwa8TxhW8pasOI
+WBPSTMANIOOYzspQDlra58NSZHMdgQjZ9eMHdkbk+PN7/pEmxcsuJV+pqoWb2/X9
+l3xKM98T6wat/IU/K4MyZU0KF5JA00r0O5vGWKkHgxtytyL2Qpg1vspqsYDgVjHk
+OjQmy+v2MrqMrkZOUpaPWLKB4VbWa0o1N74bOllVRaFQG4lEGJXhQ7RZlLO3/zJL
+gR2YUB+UT/PnAoOh0UMmnR0iGxVE6h5GoWD4N0wSDUZgkGrav4Z0+cB7vKGlBpXQ
+xyWY5VLWKR3c/0WodzeKCt4Cs1mX5jblHhrVtuxRaXx/U95BEgDmZEkO6xmbbcFb
+XDog2ADGDVgkK1ydUj8nBxJnESzi5HRjwh4p/dAeE6i+2q9oXtneObwjo/XudW5l
+t3EFE+VqayevnzHVTXqpXuYX3II0131S0NXDPnBnZjjn2Uf0+lu2+HzNFGHvAI62
+LNVE3yQ8Xf0pB4CdchJD7SPDSrLCj7to0PUFj2IgODTuK8oveppSKapBNPh6OHv4
+ZF9mu8u2aezPRctMqUDxNkwvp4z5pfbiJGZ2BDIl+/KxlMAmxItfUdKQsSjuVKar
+9ivGzoBAU6AsiR0kEBqKIxbdY5LJFHjGi+FlChhDRrEK/M28QN2fNdNDvctLa8sR
+D+oktLdQGNJ3+ijQiv0y5ofYMv2CXpW6+zGCucAprCH7agExS0NnxzExbGAmMUeU
+NUUnLa7EWsfDCGeH2rXsJAOdGmEAT9w/L3mIkBmoMOstE4z33SZ9EXejYWQh/DOa
+ehwQqirzbt3Nvm//p+PqAYelwSGu0Ao2I2lWFp9R1CG3PXWi4gBHANNw563E/SCH
+3aFrM9X/ski9+wD7N6svuS3mI8/nn6Bbz/LPnYbM+tklr3R2lpvFOoyuyQ3wfhsr
+dggCl24zTyfo2VX2a+2Cdx47No0nmh3bE2ayPiPw83SQsgqG2ll6K+QWR2FpCsJA
+reavdGH/+YolzJ9YbRai6kejkiL9r0izro676zkGoWNqmrbmTi4fjev6lGKtbPLD
+qdx+xLt916ZBlo8MH7kC6VP+bALm5NqAK5f970YmnxEDFRc221/L6WM089h4EPYE
+kYXBfccljhQ6fyg4uWzxy4dIOQaKid1il57mZBVF7RawpG+P4SHxdpm+eXQP2w9W
+xiWWZ9U8TJ/d0QZX666964g8Unj4S2q+uvdbT56sRLtbd1Ev5cdAKn7LIvqzrecD
+yRK95z8ve5U8dRsGhitK+dMdct+5+zFZfiB0iVHgTxT1P1Tvf79l/iUm+gwtIN2z
+AmwkOrQgstT1IwBls95s466TBv26Ph8E4Rysmgs3n3Vu0u/M03A+h3W6rReh+ZvF
+9fRe504grSZwDHmSSW4+41AFR26oIZhSzV2ELkD95PGiCaWOOKX95SbEEXB7NbBY
+76x3PtIChbHo+7pOesv9SLosDkqCB3n4NktbrEhFwQh/MW4pRAKOjbU/72mJ2K9g
+2+9nN7ESk2jwncGIMymSB+BAwv1GX8YR1+N5ha/lWCgMsDiuPB87XET2UwvnmEXw
+rW0/bBRiad1zeuN45opcE2PS86wU53D64FzLJXnIOzVN8ZQ4QX21TVEQdVtZatSu
+xU0aZV4nsBE1mSUjBk4WY+ygjrcpNzf084FQcEwYHaOfHxsP62UN/FdUy9Mtyygp
+ot/DroP7+XiKMYfwmlaLY48P4OWsYfkny0lg4jV1v9tTyoYWTGrgai/34gvuTbjQ
+T3k1c3NuLDrX8+4X0tsRTMaEygB8d4beY5654sEu2enslxxMAICIt1RTud8BWPc2
+qQma5ebriWQlBvKLJxzZWJLMGlBXvMzF35wXdxtObCOqi/mxRMcUNaLoc3+kNTPO
+fzwB7rAnC5wM/+/sZDmse7zaAot630Psg5aKZojcsuTEmRPrIuUkj6s551W1t1ZF
+KPnFKwFNvms5h/gxiBZhh/xPQMxq+Cwy+MbicjQH4+m05EjimtIb/CoeWF6Hrijc
+5WdJi8zt3UQekkJoRrA8gCakQ8dSPg4jMfhbb7t2/x046SHpQmzBm7TwMyePXRwB
+EWcWgTSz0b1nC2+Y+HZkU0YHd2/a5I+zXJQHpZQ9/ogrMUZuvQrtGGp1FBPFvKIP
+sFFy0cGElCoSN6bKyeUE+En0ZoMQUQe7TQfvN0lShjS4ULmNLtUmF893VZTkUUf/
+4VCHCBXdRfp6y6lqICnw8YwAqrV+BP2KzOlotUVUsTefoX9tP9FLurSy8snw4iZv
+eXBU6pYyDiqsixcYBuGinvWe9Vc5/4CmHaOdfzwaJ+qeHhI4vdmRExQjupSDRZTv
+y6xTA+Ror7fWvDCeyMzTt+QxwC/f9t40UWq/5oXluXaXbTmM5HFNSOI/iAtDhBvt
+tbG1voujIitki01apoj39LLJ+6u12kGh0b32lCkCITR1zCF2ljpcFlnI7y62hyht
+6JJeu72aUQ2bBKYJf9Sdx6HrQY60rZAgZU+zfPY8188LlqSYQzn2WJFY1yRxx4la
+fcRB/UpIrrBV84+7uLjPucy030GeRN9rOZND0GCIlaJXCchWmXvrcDhrIno9Cq5y
+CHL6X92+9iSS2K5S4oI0E/H8pOxwuY8TqynK2kOOOjMTeYNiQ63pEr0AChSm4t7J
+pQgeTBUQuexBTixP6Pl3jcs/XN4O2RL8sUvQPTiVu0abCC4Qw0QfMLhD5oiFjX/o
+gzidtSRHFWcttn1B40gu9doZ0WWEgNOsspvMxNE/oPQrNbi/m4hYy3Lvi2N+o7qQ
+q6ShmI1SjfKVlldVTVcoCchVHrJAxcFYX5dkDMPEALUP8xBdV2Vz5dxrnl4i1etz
+Fyu3FIhtjQxYlYQbG1cdsHCMkb1UJaRZsMGcpQ9VLkm+9lRmZyOBlnNKTjXolwOY
+l/zy0RUbMneO6SyebWfmPdK7JRwEhKcH2NjwfKWcUxALfQ/XV497KMfflGEbIS+u
+vvW+Pz7uM6WZKvHKWu4UtNpDMaBZJ4cVr5PLVkOFTYjwvJfX+t0C209UPU3unR7r
+yP/5xp/QdTKFQojbs2doLuI2v3I1/BtO/o/c6Wng5Ggn3C8/s/UhYdAsrfDkrlZ2
+EFHTbXLNC7J72pUS/lL1PUXt47CA20beonieHD7xIJU9dCLcEpWnIrtpIgoKM7iv
+tpd0aPtxKrJA4hhMTQpuh4xh4TVDfFx7/CqiFUAtCvfLsE4oUBsLjR2e70eJNI3a
+jX/wb6JfGlM9Un+KcVqZ9/hEeq9MMsUsuk+3Q9b2HaY1wPfJuhoavZKEy0KPHSQ5
+FcBm7KqzZlP8589XWC6IlGBlLaIXvSWPjtx6jc/EvegdmE+1PPCYRAbi6fYb1BHE
+m6082QtX/l+PgbRpjS4nym40qkZE1SNWpiV8YdJSsy/nWSLuU6eFdCaKYDh7BQtC
+66hEBODCdnEXmLeuoKOKOQORZ0eufUPNFsTeeylRO88Sysm3+2IL/fpG0dZVafbD
+QmgFilYPUoW8qZFtCGq9cfScuxUry4CDUkNOy++G86kf1JrOCT18sTu5cqiZr5ym
+tbxVZ+1Va8c0B9nIX5Une5ARbWfhzpUqfIPppIJOFmB3phJyYZFfAW6nopXBKuuB
+lkyQ8JlOzhPJpQvTSCvunuFpNW/mmB3nfMsCgBHWt3Y5wFio3ntpQmfTulpgfE3P
+pxGGMNULcjn3TW1WSUnuXyaCR/1FJAaaLFbLOdGwUv85XE30oyQMkQqyG+VkIMPH
+uiP6lWhIS6q9kn9X+X6rBpqbIPFntRjrZHsXFoqhXxp0d+7KlulrpcqlWA4TeCwv
+N8t75RU5QzwItekNZK7FZBfzHVjCG999pviK4Qt09fph+Diz4xif7znDM0fuBkjf
+WETLXxVDprVbBEZn09oRvZrV6nOQYT01VEysLRB/BjXdUhbI9lTmTfKpbRSTI3u5
+LyLE97kHbmJWhdyGa55ryIYNdPowRkxMbf3l+zAO6N1ArLaBTaH2nMCoTrBzsuyA
+fF1qZ/8mH0VckZwjay/Px1ETE0SLsJjJVtzH6nadBkflnTE33D03HMCuPAHJTSJK
+2JxL7iJrQP8MuiWMfqpHcjuDxQUIfpgidTGBRI4pa9LwmnMU8wnx0Ru0DT3qihZ3
+bq8p3JyWAY9QaTGObJx67BmU9sAUwCPfNQTzW/QMWbTX/bpA9CswIZs1Jq8qehLB
+6IJaAhDyu8wTnfUNQmd4DEp5nnUpnrF0UDhEmjWJM43h30etz3x6GxRc8q2i3oai
+BDE75Nzdqs4bTe0Wo0PuRG4W+Uq3j73nsasLMiizajbrdwon/49lu0DcySkMdVc7
+MB53MsUjWa17Pvi2FCpg0bV1SR0K4ynK0SfqoodIPY455lp4GhlofAE5TqVPrvWI
+wkeaXPZAySlywmeFFq4iE7gFp0tFKlSM/theOGvXcDJ4H+aFkBwqwuzDnWG+sape
+DN/p45WWiXVBXg7GrN0cb603ciNhHVCpBnRb2tZgS9cO19hhZgIzCL0loGmKaL88
+wUj36PEaaFo9rg8xfrGoLaPUfl3m9wr3MV8x/v6bIU9iJb7rtv1+0Ss5fpbn8OyJ
+VpagitHO/CERDau5vvIA9+HIIS0FlEluNpnziE4jjyUbBXUXMguK0w4qmSHFcykU
+WCWBDMiDuE//xhHOeQOCtkJ5fW39bmCGNqkc3iGv43KwPvBIzjtpJt+sD1PldF42
+nJuLNLKCNLItSVfhpyYKV3IiTQaPK8ge4dFojrN/fg5dI4pyhQL1T5qOmXs5dNGK
+/UABrAnI5oeVXvb2oB5FwfH7R2bLS+YSfWgQdHvlpExylE+xf+lkxOMcpLq78+PC
+G5+zqYvBSx5SOW3jzsrMmRGbLHC3ELPbnEUgJlmW99u7H8CLTDmRpUZQHpIuVwi8
+L87PjgfPFb3HFBINrmSEuMVPMqyA5kduRGdiYjGyE/FFQttqK4QHY+TRHyBSOvpA
+TuVIYjqELvyYteYZUaoY/6noyq0Ly3Yt4W1ivQ4VCQN3tFlZEONFk4/gHG5pfjvY
+jY38HxWl2IZWtm27B5cDeNC7j8ppG2mkVqjm1KIucBiS6bPIxXJfX/R0P7qnZZgw
++bgMfDIjOGHA6/yory1K1dun8X0o2KArXS/GwRGc7k7T/MT+OjPpNpWHjYRNaIgU
+hVsIyXwLGv7Zl9CQbRjgUdw1f3/1GxdmYc84bynfrvF5F3EtPdC+/TRI3G8GwSJp
+Bl1/B3oWgCiaobtiZxeSu+wn6NLPtfrnwPcLPftHL/SPMFVXuNhiahUCtRQh4em7
+JvDXJV2/NTYBKXGTdmZ2oxk6F6EJ7Q2dr9lCDfO2B4dwJOezY6yybpQ/qdDAQt52
+JNTIlAFMgj+VnJMmNYaAkPXV0hsEPamu99f7YJDxnqdvEZAvxI6/uXrKMbhxWWXn
+0OaEH2xoGsJEJxIC5kTlpDTBDqvdqUc9PISMIDe+s2k/OparEEk2+lnoPpNUJynO
+kEwVXsXHEFgdnd8XwPSdwHOVuZmNu67UHeyHSMThTIYLc8d1jVuK9tpnBgoCzz+j
+MoN/NQexo4ym0w48cqNib9b3dd+blusKPk6gd9ket9uMUEqyCSamx17/MwY+5HkV
+hpigMwN/20bOMWrvpMsTOCjRSmzOVWLYhO0PBJKPrA1lP7BJPuLICq0Gqlv/aJ4c
+8yb1Uh1xiacbkx4N9Bveg9h0U6UMW1gaC3ooX31mxXSIjwgXfREuAp0t0Y4aQM2J
+JHxxnsfsb7piAsx53yzVzCk3B/vEwseqWAnSEYhd7bvkbNZ8lAJVXOL6GqsIPpgM
+hFN5kypGoEDXeES0m4+UdsAHrmRNgJ1V7QhNJZoexzu1vhP8cm332GT3x4O3RTmQ
+fSjWQ1vLpO3N7Mvf5EBUmCp7UOntcyS2DRMY1kYbbHvtQtNXs5nK7UaUnRRLJSoA
+IwaVZcmY3Xl1uPWO8Lc+NM9TXjUTC+zDmOeyR8LN/5Q6OB9y6d+vkjyJbAKFAlmu
+S79GRr0Aze2wUaPRbY8TR6HeYvGiJ2Nb0LrV6ZhPnQ/gke30k+6mh/r4KsO1+D2q
+YkiuSWoGiYHDcze9CNN6TwifhoOYo1Qttj95/yP53AWUBRH8mZCnVo0tW1ukk8za
+SaC4xpyfoUmNu+G8un07ZA0vnx8VtyvTp9itngQfKNWLK9+ksl2L4AyCiiqgt+5E
+hspT/+Fifiq8yUX5xUSbRkKkz0wQyS3oAU05gGTcEJosGAmO4hmtVePfhON9Ijoc
+Em3HdZXNcbWVbEipnXOGmded9RElQA24hbuwhBJXyLBINXX/v3c6v4f432WRPbfJ
+mN4BgYHR22weEcv0ThYSFLwCHQ+wlWA18zM176opnbnn6hJFPoqktg35F9h9heQ0
+71wr6rAH8/cV009IC1rwyHqtPN4nhlLubvtysbh21gbNOkin2npFg9tFVGBNdOCF
+ETonoCpTgcv5h5thSxgF0qWv9lOQhVb51sjObzAs9GkQccg9z7tCd/cO4pz69q+c
+2lEiwPo2QGpCLYejAppJn2ew3nLlz2Mt3+2xBVsueMeSiTe1GDrChUqZgIgeMKfh
+CrY1x4bGS6dB/4x13l7eQwHEz2fQR6+PEHpoSk8V5srMGoDYOvMe1bRfdKJjbRo1
+Ym5RbbZoB4xqvMomusO2VEeT2deeXiql+IogWbjqmM3cZW8mwfM29Y1ddZVKncem
+VgfcwRqnKGjLaQp1GGmG3igEfo//bRAtu7bNlS0GrK+cRQ1blN8z6lyP5bcg6sJa
+HT+a4jgf9iFjf3v3C4iKbfA5UUk5APVzfxd0CoT2L0S5u6OPmWrmAiTWYqMW4IFc
+2RBZ5bFJu7XdAdEEm/kwP8YaIXGAHCWdqpydn17Fe594YsdUbrLSSfHb5QQDVIoj
+D2C/OVVfsbxDulF0V8kLe3YiT9r4lnhGobHuqhWjnxM78D37QaYMEUXopb3CGI2e
+W7qYsVxmEDOoDncMY18Xg+GUy/kKWY0QpPCUzAEk7zUjl861ecIJdu+UYpeuJPnN
+s/HKxg3kYFMzVUGuuImRLBb3QrJ+Vs/yrgsVWMMUSdE3hDJ6bvnq4XsfyHJnShOz
+/5gGb4/6sU7mUDMx0uMEvyYBL4WWjRDdUWRbrmpoq3oYKa4vQFcw1H1axSqxRSSv
+kaIPI3coGV42rkbx61+OmIGbJKeWgalouykz+YXg065PCccQI9W/Yw0q85taZS1A
+6e2LbYjronao8tEQPl45ORVQnZ43K6EN2Da3j3J+dWVNQ6w/FIXrh+SXW+fwjSz5
+MrIa7aXt1gVw7wmXj0c1vU8Ku2+Ncl5uQZPBKT6d1yNxqiS/bqX82z3Gso/kAwuJ
+DWW7B8vTA69apbxD/tLrJk9vq54HgLgXyHoZ8+cD0NmfLRTMywYDd/nzgvH28jh6
+05efUhGzQx6F+TY5nsPPFdVuFAHFAR4hv2BtOay1yI7DZCE0jW0vAhhRNWHEusUv
+tLnDAQLNExEpG21qM7G5y4g4KYh4iOAiqhGc8n3KjwXavHPDOCQaH4XubTknF3s4
+LtSEQ2gbV8QGr97A0z48oIfOLwv7NmGpKuf6j2LfOZDOf3Wp0UnS751XV6xQLEOL
+42zUR7/FxdT9Ydu7p5UEiyzxuwU+wSunKwjTOrDd29zrMgtZIqkK8FxBhVdc9cCH
+ETUMPDJ7Nypac/AWmlAHE+g26pnZtgqRf/D3RTa0XkZkcOykza6dLijQdSe9Qypj
+n84C6gYEeQSuOhqMQjROiIhyHp8aqitLaNdDu10n7Ms7SJKxo+xaftMkOVmVCL4l
+G/nEeJHazNC9YZtr4x2zBlFg1iPiJBmpj9VN4hfDinj9fWzEYEywZt8OhJcAegZF
+ZdbGDrtnCPhWDS7IVfHFKTu1Y3M+HjJCt4QOED24CRJABJEpPUNL6CgaFTlaGpT/
+8cdQqmIBGKltJhKl0uvWP/pOYyL5qicGMfzOJ9KNS3zSNMIwrb0ZYxY89ctLN3pW
+mI26XFuyCzleSbD4fTlDgc5W7RYdZrB/9XYnZosnKW0gv778K53sCY8pPXRnXjw5
+xqYsySS4ad65k7hyjiKZZOOfXgvV/aVs/WhRnLiR8TuYvn+BTrcwWPjXIEneMD2H
+1AP1PYlHxiWhJ4LNvnkHcNhvQs93zVzs1+eNt1kXYMdBWio2UOKhMCvIeNbsKwqv
+kfNeUDmVq3cB1sDYgwDhj/IUvj+ONRvG188MpR3mauiTFth2AOhS2M1X1RRK/5qS
+jV9MpQLeol9e6Tm6ooV+FhxxbLaiHaUOlN8zYP9NGWX1EGu9vJw6HVclO3e8vAKC
+DJeDtwNdM8E+sNtGvx8rqbqogRL6A4RJ2sosVNw3SOJVDCNQH/N9AhBiK6LNUw3v
+avHGiKHcujvFQKcdReJbbzNhfKyYBHJDSY2bHx1ZZmipXJIi0haX1fCSosNNHHYX
+qS4gpZzFokEAj/FZfcZ2/LPoGPNZv6DiIZA4lOKhKGkjNu2GqsmWKxjz+lG9OHpq
+sR0pzEJbqRcm/dCsA3xzQ8YR6dMIXBzfBNuUROfI2o7HlleepDZYGtUsyhQaP3qs
+LTzBbDDdJwoTjUBhre5QJ030Dwr70A8EczKFgDCbEgPDBKNKNv2v7/8wuYvBbD1a
+Cpy1wyIzdVKlar5cQHQJChMi0Cn2ZZY1EdBkSUWiFSgnV/6I05uhXEmpVPqWsDTT
+Fha9w5lmNCFIjHHLoHeGSQnDtnmseh4auxa9fe9tOhZaxQfjBJe7yFPyyGHXuj2G
+cp+I8tMSB1X5ToIGAe/7rpBI0hUNGoe3F/zOeu7CzF0yDVGhzvXzM9NZ/4eXZWp9
+sn+QW+5vgV9TNlf+xmnQ/XnLQLnoYz+EEJL3IyyeLpo3swmxP0P242xoDAGhbIS8
+Gym+nNiNC9fu0uHuyf20GqU/aT36Ji/b7Lw+TTMR3r+loT3LWRRzQNxuruSb1Syn
+OvtAzBoZcHtclSZxfKon5IYJjcoXKSdpv6NdrXiQqX6ziskbJwaLmacOpDQowRBd
+QTH77u+YzyWjwoGucYK4Xsh8h06izv+xYAub2WiJvZERRSinpJ5tgF6WXy07Gwec
+3MhhH02ymNoCtM+QbnIOAnpWWeWl4hzvhfyxc8byJJZr4KkpoM/tkzE32G9HqqZ+
+xHOtmsGJWaPjmdGE/g8mBD1Iet9WO3nxBLTuyjhqkKtmkYaED6J8UeDrgAkm6BTV
+6Ko01bxz0bhQm45qIrQYTzFBHTYC+Dx9mvVvDNAnxdbuiO0g/Ie4jcavTB+zVunz
+zS3dDgequyy65v+V8NVFVY0m2fjHFQ83EoLrU4UW5S5nr/rDwpvKtlEKuoietu0s
+x4NYcUeyzLSEYPwCIPwDJeK4doQpkF3GNJzqupyGwF0i2/4hLc7kbSclbkTqwZVI
+cNeH9adpRtwaOV3FA8HLng9d6iu9xpGWr8FZZCDUwjTWdilDpWkhNBHswkrcmBxr
+ABXT/5P6I4wJsX1VOSFH8BeranRWRpJ05VNQYd0e5MiORBbCzVp27tpH7qAqXgyU
+07u0qObCLmxN8xgu3Q7Xlct+eDiWU3Se9Vv/5EomSs/2h91dXM5c8b2Hu6kzQLfQ
+M+u7kdyOnN6NKux6h0wlEmLZvhTtkBF2JeZgsdtgvKkfVZGzfQa+sDey+ATJGvmE
+M2b6hMoeIc4wEi4SqhXwJETKPFjIXHfx/hyhqT5sca9PRqDs6URemhKNtL7ctahz
+HIkXu5LaLibzhyepjthCdUUDiSNwR+oLHftS+8BBX1gm8kbYO8oPUFhR65IRcJXE
+sJzhE571UcGGD+zd46DWsLmCDmxqOd3XOGlFR8OuDhDupVoUJ+QaxCclOE1wBSG5
+i1IaZscKPv3KkVb/spn2V0WZ3VeYJ3axirScOnqLVXoJtGPxLeGD+FU2sPwGDk0t
+rs4Mz0ZTALESu8WVqHylF4X1+mTFwCLCoFoyKDuH+mTgaFP2f320XRZSM8K0lEWi
+HKicmxNdBPtAdpTXRKm6NFJsBwO6bX+82Ygz/pPR6xuaqkQn3nFUBGAau9bX69Ia
+Mmc7OOvqNP9f8oXuwgVF85ehO6l2Q0CJD5t1yAq+J3Q0N9VxQUI6GnqD98xRbizY
+8GglqgIKBjIVdLmoEm5JJ/WXaWAFVKdm8nQZPOABH9zDuQqAYK2CxuqVQp0279Q5
+4MNW4y5EQn2ZuYm2VyEXfh2VtPl3QsNGPGvBSVmOf6NSUV9892GubeRBcrUyt4ik
+mQXiy9+y+V9g6q1ySOifhYbR44fq5SUF6mKkJJ+JG5M/N4+Q7JncZ+l+YEvdunS7
+9f6W6hshCjRmTzMPYYNvL2btVjwk3ItUz7SiSb8l4Mt7tFynmfOccehRtzqD/Fjy
+PxR1zmBztYYepGTxrJGXtlDIiXgs5Rf9ViCHlOaYTP081KH1VpPpBvOtsCPJXn2P
+9tw5LL/rX9qYtLgIaElta9KzL+KBMePOd0viYUkytBmrfKc2Rx16yC23UmJ7JYm/
+LgxihSRhQ4HYHQIENCgeNGQSnkIYRw2ovMvAPP6Ew/TvUpzaob3QFsV8P2gYpAda
+P3Ex6xPnekkoDbbtsizjaBw+437R2at54DbghZMWZt2LIOUvjx4bMbTLYsO0hJyQ
+jd7SjS6XvRRexAzUh/DEnpVNBXmRG3yE6raTmUn5D3wzKVP89bpiyba6nCg13pM4
+Wiqn0/p1yNl0TcsKvN6VIET0QFkFIE+NoARVvUFNP7x9rLc+51Uys+I0JFNZiI3Q
+bbUfYQEWRNjID6hjBId+2esNgUfO/p2GDuwG26g+NM8zsW+6gpu6fGtbRIQCm0RU
+VOVhC4sGNBJF5bda2KBkK8L4z3cQUfFvK54G2juXNzER3oZStTfivSyjXRKTuCDa
+Cp/q2aaU9eNaJmQ1TMPW1eGYxb+0+vlMSyZnTFxH9ww/5YThsPK4U6qpmPyEKdJS
+s4H24PzPWyf5YjNLqWpqHQ+CLAMogZIUpLgHuJaH+1SA3S5aij48F6ujh3AzTxJ2
+gz/l8v8tn5ubSd3qgF+2RKz7B+SQkLF1mECMuofD180KWfydUi2AfKrIVW0jMLxU
+TaT5gLkMmYt5TJmjm2zdbpQ9wf0aHKRUgfG46dxxEOBK3Dyceuy+0w4emq73Pe+S
+Pik4GjMVWKS6nCon0bUdIYfH4yc8kaz9x2OYOl8YVTFAAF9gxcgEDUGme3ROcCt0
+GQ5MqF1+OcNtDUWfwecPBDUttLhJppRc0Nthw5L9fp2uX2qW+wQRwK9Pwl3mkwhw
+1d5RknazqnsWBlL94yd5x26sYNlJ9DaC6FY7CAkFdVoac82af7Ox3PdA+QiJOTX0
+kb4B76/OscWOF1fzDEkU++dd7U04nx1pqIyx4NiEBNlgXmWuNvtE93fIfHZSbtce
+6abp3gqtmwS7QmXGn964AFSHNxqqTCHY33+UOiDCgxw8FPNzPHmSU7F0uM+2PHHD
+rZRozcTIyDuCUpXHHbIoTL0gtoUlWWRJN6EIdZaYHz5pEZipBe7UGt/U/LUSPECE
+v5RjtiJfYBVA/j36TXPG8VsjqTqK3fIpJn/Gf8e9y21BCvqMBRmn/RDo87eUklFM
+VPHw/lag9ueMDXmmjmzUw5fYAP5+hOYsTOrVc1BheBO54bB7VESexWt5V460HZfH
+AU73iA8L9hzwA8yd+lTMAUVmvgvoDQ61o8vtgB5QG4MyRyMMo9G4DmNQqJU+DQIi
+AvTGNdHLDeOYgGPljlsVKOpu6AW5DuzpcOHLo/rnaiic+Xqhm1vQdTcXcnukPT9b
+A4HGW0cMV9lWZRl6rnOTjqqOFFPaBK0aFen8vQiPYZ5jK3HFrXVvUOn8PlApa4IG
+ZrozMpWmGdAr/0L01wFIYMWZn6iMj9f6UQuLU1WWQIih0ad5O8Ss8YjsEjQacJ22
+iUaAOH/WLl+iSn9geXXXyGgUv0Y0XSiWZkdxcS/TMb0MkFdWvvwPEAFj4mTqO0gq
+HnFo2l0V9mBWxpoP1kMoOEgZYbk8XOsbDeV1yc+aSmkmqkfBdf8Ocwl5nBYIxpU8
+VUfsGCITl9WSNF1w8EaKbLrKqHhwCgfuZBztTHZKq+VO3sr6WWE4reEoMENGq5kB
+Fdm9gIrp/ULvxwAvk3HkDzmuLdSldadYWoe77MMyBAk2AGVfYueiKdxfC40NZGYu
+RF+OQHOyQJUEzlNCY0W6EkBbE+yL6RA5LoGx0WskRp6bDaIsIc/bKZk56u4KzZru
+TpMe2aOfnyZzKVUMYUP4M1MGlq8hbgSCVJC4fpjtg2Gd18lufVkMv6H8jA62Jq0k
+IeSdL/FJYk9yIRNpVLLmXKlWk62U4d2LLVckfdRWn1PRN0F19z8gggW69rwxJWE8
+w/mzdsVEMGA1LfEEj8R1NX6XlBkcJPT9Pi1+0DXR8t5dB9620lEp4kxT7iOOX1Tw
+lxYJC8n+HNp5hDQOl/1Y1PJUkTcEAppQnaL6gJlomp72cXh9GuqgDFiYQJ+0ZUcz
+t8c/Sp4dLrwQumwWy7CgCjjrpkjJvEJEYWnXN73yIJZeTI6bNBq8LEHKNEk9saSx
+PB6pqZSExtO+4ToTjP099ml3fcvGCbzKueF/ax0LVGL9VLX2O2v6ctC4XdrSUZlP
+jzzqZ1HBkUPnoGFamdAk+3N6uvlhiT5YahX4CMZmbPe9tz9uLPulNU2E5B8iQKwD
+6t/H7p4QRIVSmduhZ3FCuLp/yQaKt2xQg3+Pjvp/1MWA/qpPpDTdlSAgjUPwE5ka
+MU3ISASh01NtTA1PqQdNm0XDDTFjrs3r9id2f+Sob++yNSuN7P0H7wWmpzeEffqT
+IXKTmNVRZHXHiK1yLZtjsxM8ly5/EJx6mbuwUUeQsLe3E9UnZqFJdr457uwSLiqb
+NjETb+WW0jNHQrGL0Nf78dXERehf0K1J+5CaIV8qjP0nJ0743ZnIg1cybeaMz95k
+T6Sys0Hm0lD1Nz8rShVaoJzJwpsAgzEsj7yQ3mrh//SUb6AwqozpGtVnci+s2iIy
+GzPIWjo/JrrpcSLTgII897J9z3FsNZsl9kwZdG0L88jzR9rltJM/xB4iVcUzkcBj
+6R/U3VU4yspzOekw0ocXI03tr3Y6ohwLfOlBh6JCrwb8RsLeAhAZ4vcs5RpVgj8D
+2d9ic1KUp84pVJkkjBqpVGqf/EjET89lOYoQKuwzgUQGMvBEOhzCa9qZchoruMD0
+ygRS6QF5OqMG3vb9SFRTNLwPj3tK98vLx0QTrz2io4PREd0miXAlWzch+VO9mZ1Z
+lK/GOvN2okHluexLmS2z6RSnrE6jZYf31b8OLdweKIq/d6wYNIpjocN5iuHSE3TD
+It0tpwm/hZ9MOz75/UN4dTgNe3dgloAgAWkxafaMctJ1O6S/RkxH2mqjExfk0sjc
+uaxpfHfldHDdJyndNELpAGUBQXJVbo3UGZXLQCTtHON5VRHD8VDQVXZMjRWOHu/H
+uxr7FnJsCgIFl71mkT1koPavsTIhlQKS1oC5Yzn25RcSaC9uDSeeU+emNmPZ/IXV
+iTzfe/BkoCinpauZVonSHmo+qknHH9UuWDX6eUGm2x2Vv+Z5KhndzCoeszt9tDHa
+MCn1kFpfSrTmmRQmm2m4MXAsxIKxUPH3gLLjsk3XA1fvADVihl07ebAEpoQqtxXv
+Ecrbx3KUyfhOQJ0aDXZp+GB+jhRCo3DDE0NxvXIDOrIqNKtQE/T39tT7zVJTYPN8
+Oibrl42jPPpjdRVwQCjnB1zeSKXV3V3RV0n+xocL6TdKdO8uDTsUrOBAcbxenahc
+2ot9CQ6aiBGLdXt7Zb6TJTeVUjAeg9/dBdaXuO8bEVoM7+JNzg+FqaZtwriCNxkN
+bF5ZaguilQg4HUs7w2+PKQmTQfz492Hgkk8nerpaVCCePeAk+eKil1OIRVsZzAi9
+1RDP2dayy+l22sF58qfNs0U6x0Rryi29IoNLPmGcoZ0b5lJSu43sRz11MMzyKZu2
+mo1oeW2/JtkCRyfJnn7a0d+/GKc/9xh9Lu7TZMcu224IUwxIdlKx3C8bncPvOd+2
+MTyRaNjRLaPtJcquKR/1RMLyoX93AWdJ67nxTjW5fJfnwCzSGyLeM0vMTcV59TY8
+K4h0zW89su89/54Apg6hkinI6rwtQcNgqP8a0MD8pdNiZ6s1TQyMGzKS5Qi5QU86
+D8q2Jrd83zNnwboGP/5PAa0jzxruJHukyo9BtTMhDlfDmVV49qAphyM/3o+21Kpq
+R6+plxkqPLgZmClJQwObA/LzvopteOwWcRCo1VRpaStN57MXPTvjEJAneDcabfzr
+akEJDZ895rnEE16gJk18NbqD7HBx8S+1HzX9/WwTEYnwKAjpmJ3tpai4XTNISbAp
+NFnXSIEIzPM+nwKV7mkYEhN2HZ1uKBHi2Tzrsds2PA8GsipiU+muWYIE3TcBt3xw
+9x0a0H6n2rL/J96KQUdWyVKDkcoTBJh8IWZ5iIOWM6cDfOWMNJr2dj+ttlRdr4Cs
+gVxpwKJ4PdKdS3tEUqykbs3FXKaILiAr/wVO//Ctgq69LrYRNW6iX261Nihzhbe/
+6TdYGI54EQWiRz1ZU7qNQqidZcIbbkZeyzMXl1Xp2ZjSTfWskLR/tJ0CKOqbXWk/
+bQnUKeKjsjOaanAe/Bq5ch+9wYysrpcTvBenoKXEqc8I5YNKWI7UXHSbqrB/JPj1
+TnL+54YHsjeXwiOjg5fBPk/ZxQ6vPDS8mTTafDfDznl9EhPDhJhqbAAZYBT5RcZn
+koUIEpfwn89a2F2B5oQuW2N3CyrNEQseGAXEFyJVcnNPLsZFyGpBYpJfVX0CY2KO
+UiR+Wty6thsaJvgCfW0yPR/kaPJnNIOq6ZL0zKb/ZtNcAEY7OQo8n3wmHxkUBW28
+017unKr5BsXeUPUhPJrxFjr8EiHov8sTlPq7H3+4AFxLfq/b+YH1LrBdIRiHxBOS
+W92XV7P370bSaPNwx3O0eudegGY4WZwujTQsAYmghC+GRXCsWbPMmkbk0q5f6XO7
+JTmGxYfoHOu2elXnORqUeNADPLgajXkfyfIH26Ym6ZrKg0baIrlySHEkAunOAhAi
+jhT6j2gQmaT+r7c0L4ZG+BupXT2S+arIf24J3zE5zDzDcGObiiad9oPlTz5BLLA7
+ifhfwW+hISausJyqVuWbWPtEvO05uH+fwJ5hRN267lAUou6i0vjwY5xS2CGXrrAt
+QMiPDfhS+eyAMt8seVhT8DFkWU5dVCUADg35PEgoh6vSfKezghbZ1MDRsqX15Hav
+Ebo/tM3SxryR/6tNx0Ce5BIeAnoyHjrOHML45+GA/x5y/HqSlMShZZh96UL+LMzW
+pOgkYWZE1rGc/srI93n4dWXkHq4Ae7hFLnuVS4a68fAPfK1KF12VUfuGRjVF/8gj
+C1lBmkXNEUBLam2V6+0GboV+tp9w1wfVCk88c6telTbAwJHm8/LbW3rL215811ix
+WzvtC6/duPUFXeqY8KfCGXvDG3eGPI6Hs5J2dzZFI7Gc4w+ptOi8V7LgKzVKS1wj
+XvUTsANVqWhuUhcqcmeVNZ+sBbYuIWB6KWNl/VWC7/UL8Fmk66ItzRvlyN8FdWbe
+z1Y5xxz4u81VqI4Yc4Oansg62mn7dFOi6ILcSxtTUlDZFevCMywaDg8YqCLYDsjm
+ZauyBqWNXj6+a57JYrK6Ag6yFAgn8Shts4k3f9hyywFnrYKdyrAQ22oK2U7i3nGY
+Uj1Mbsw7AoTbH0kGMQ45kRM46wNEKwWBVPCNtV0hjgTND/DoY79fpfP3Yb8VBjW4
+/7EvdfPqxAsiFn+hj4cCpcj62/1A36LUKHUscPacQf+D9rRyxpjX4N0Yj3T4Frpt
+ppRgcGBJJlSfX9PocDITpcr4Ev08FHAe08dZ3lqnQOJE8qGaCz3KeqF9fgXUPRoY
+RLo2CBFUCWLxi8qhDRNDlUs3HcPlHnYjTG+PuHh0Gol9ApvwLp9H8bXACLPP2lF5
+20MBly9+0niVlKBUBeqZXqnT//cIHhfVBWRX6vjczAroT0sGgcf+ck6LmJF4tCDd
+L9ZuIeoMwZZo1xQmiLgNuag4vGflL32Op63XvJIpZ/hlhokS+jMSJZCQXeh83HKZ
+YpU2nVywi81nNKgHI2DxCw5F7l6M4tR7vKZwIYSal7lRTW70LxgfnaXpMCQTdxlw
+ZvU8qQNw6HeyQFvGOJ4dbJDW9YWe8sGZZ/dc+tVw6dKHzGWr07B7arfaa/Q5tj44
+Z73PjDJ160g+tBbC39JxXe+VAa8fDCJmc5isyyL+yGbRPQn2AiISb7O2YQsx1ZxA
+jiFYq6Xd2kkWV+Cu09Tr5Pc524lmjVedixrAAP0jiiWz1C0qafRQIdaKolhOIYY5
+2AGqKYDLzpQzvgxI2M2AO/ZodZ6t7jv+/YPxtE4J0T7CW/6oPCr2MQSDT9eoZMBg
+pPse8/BNxXecjrUR2TRUD5zEuALEonXiyCeECw9jM8WzhSjdpITWybecWJPIjCol
+WK8+tManzcnkXSHhm+no2FXBxilkgqqy2r5qaiG/h0ALFFevgChlJ1jXFVzxIZ+y
+Y8Xwo/Ei+hTZsBSYzvoLVdkwkqYRZwKo1TNnMjLLtE/BXcKPCCfRN5txXKtuT6QM
+nUsu/AkpZSe38PVFlVG5Z6GBUg/G7c287r6kJK5gOzaCjFp6agAU3WhpAbHIWdQh
+NkkWawUQGX0Jur3pYnI5vaKkRLT6zS9cpmDlx4pYUO4Kft1FEpOQhqr6yXg9Y5Qi
+/tTI4xBinLD/IvOBXvSOzf1hWejsRRNJsVGGxnmrvW+ZiUMzbtVh0UGG1aBHoV2R
+71rJjMC2jwXMa+DsPpclmxyqepu47oNn8lABnKLdHAGx9ox3AaoyAAFndnMJd/fG
+HAedV3423JfnJJgI/xZStPEvRw4aLxkCkD7FGlcIWD7Ztv+oox8wD4c9sg3VEHTT
+6erAU3U79Y02xReBSGegW3V2WgczNf42RMUzB5Sj8kX60JYMj9w1TvwrnAbFvp0j
+z9Ss6D/4ysWOlSuMOHZ1I9evnsdBXBdxwdMwmvPSPZVWbU/t4W1Y6DyKxcyKjYy/
+gjOgX4nyZHhYGMhi5upOl9/C1gcyUBa0dlqokRnQdkRxpPDpcH6xFw42o982ACJo
+71wBmFq9y72NvJ6XRA8jOYkCofrFdQbxK2N2jQc=
+=dl8Z
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFileKeyNotFoundException.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,294 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA/fdd93zIMcKEAgAj4+bXBYnOOJJFMlo7PeORplmBOC7lwPL2N3dzMSbx6Yk
+jN9ocSNmrqRGkZFRRMj9kQJIy+2lvls6+LCfViyJBAK4w7KNHwOol8PA1QGwaqjr
+AK0n3VZqRXSgi4CGjaIdBhnF4snoCuLVlu80vAeVRRRHTnVP5kDgF2y5kcKl9wwN
+/8rqVY75qcMnJMFj0p1OT3aLZNmXGWlsiajc7z/U4YBzwHK+13etwICHCudtPV+S
++YZQl154xbLqVMbeoj8e5c8EWeqaraIDpa+1HXTkT6vOXG8wakLBRh4Ttli457Gc
+Mmwxqd1Mtyz2RC7hHhSudzk+8o1jAChjrCRmmpm1aAgAkkUzvxcAS4m+Zoc/HEPM
+wFGRBDT9QaoozXWyqbnksTpO0KieknXQ95EGyNSbqOiGfYgH0V5VMkERS/nKFD4X
+lbHD8bbz8avVW3oQsldPVg3DyGRjubjV6MB35y3c4XRYFhKPbUogHS7h3FI3sF62
+Gwe0jA4jRWQ6ax5mJKQfot0kKQ6fbsgKvm59MMBDvWjOibR5iQ7C6UwDdzf2dR0W
+IyWMPQ0KGzwb2lNtNJNuj9rI6ZYbgSrgtxTlpbnfKPNZKOPXW/OHe27NsEC3lMLI
+Eyq1jAXjs9+dKrjMV9amyVuD+f9YDM43HGchqWJxEDWHgNL32/wpElsINljEpnj2
+HtLtAU5rhVtuHWoluIRvWiym/j9UymqG2HS8lQVRoPSGBnpt2yD+Xbzqjm99R1RN
+7GdFBOn3cHRK7l5e1dtmvua7jm3Ie8WNRqGuuifqHDuXSebVSb/ifUl1XUL1nQqe
+kvwMeIz2uPqgjNyYX2yjgc1lyptKXWL2P16iEVHCdLzLgwtkyg1KKjWcGA/WPGYA
+pZwXtVBZtiQOcCRwuGTM5ZPue1+ycatjF6PaaSARo1nu8KP9oTaRzAxp7+7Lwhbu
+kYfHnR4F8vcg5kBwzndKQjmusJM9wkKiRC3QnK0VoaBWKDvCbaiw/eLu0jWaikEV
+OzP3UYyOrCCDw0uyJq8GlcYQ1g5mJTkYDAYG4IQ+M/CYr/Fw+s9/QOZgpimlBpV5
+wHY8ryrOkoJoXZcUfOSpER/kq6rDLNRWjj2Oc+ArlMfjhblPeTRLxFvWy9ihLtxX
+AnRGl9KyrPPV745arsFRh4YO669sr4uwuDyMBcs9hp1l3eRws8G34u3smPJTxQcF
+ttVEnZfSvcYuWE/m8aQAww7IV7OKT0Ui1eYWvgEBnEYBoVVS7jLb7ZezxTckgrWc
+WgrtCm++Z7kIw3DMHeWOHXI6gW/BaVd2GqO+fUWB9nGwr/6UoUBO30yKR04LJRQH
+0mXpbut+OqhNfqDwHwWmZFfs1gBSBkC/2mks3uxxngcBzSA3j1O2QOL1WQVTY/Uk
+DELOeaIKIM0N02/ESxZRwPadOuN4lJ0g2BfrQ2L8EWZSL21gOfRhfFFm5xX/oCJe
+kUowJtO+yWizD1ou5pNbohzareN6BEVZndF0oLlofuDkEOSFI3FEOWpS78PKjDI5
+VOma+6ap/g8dyBs8apcFOgKyJc6Gz6DxerHRXocLaTqQnv41r6nNp1sx7U7aGp2V
+3E7uqlj8ZQ9Nj/EzlkOWp93znaLEzxaCwql0QbWB/FoGIkEJ6I15hCg+Rx547ifP
+NGptd7Jmis3fGbp+ebqEo/Y+iqZQv0DO+U4p9pQ3hqPR3ht9Gusm+y+V6kJbO417
+PvAMIOv8P0T9N4ODkI0zW1W30l4mkOMVsETMZdxoD74e4ZreLvW2jtDLxGeo846O
+5WFjq4IQZ5gEQMPdD6t/BVSXf3sGzZLkUHlIYk3Xg+Bn9qEOtT3ET653lUIryHqB
+u0tL/6jodvwz+MT+w+IoTB+8ymWIultJVabkgZXXj6/QVHZVhqS3Bfmdq3jEOTf2
+5rW38QckYKT/lBeJfz9VcPdwE2cvb2ce6uLECoD51WrcQuwOMJNg0LX3C/5IxLg7
+26IBYA3TI/+cZ7ictCG6q2mS5vT//3MFWkjiMC1B6+g1MnLlN6XhZfuq1CuMRwbN
+CNunaNtdKAFrEWaeVHJpclhWTzr0XG19qEb1yZguKDn5aQp7bL67uomMWtHv9R2g
+MIFZJk7FABCpS5dWWMoKroewIZCcQECc5ZOSgxpkAywRGmbw2d/W/IRLBdipzCqn
+gI9wc0AB4pcsAsYA3c+P6R0gXg+yWpQ9wkNKBO356x8yr6OD8qA3hBocX37tNwzT
+Uh++wuVuTjLN+CA8Zw6HPiJHFYxHIb+7RJRGsKQJXHzBa4Vb0MvUgsz70xUUHgJy
+wLedlRmE9M1ZW+/W/nIV5ZTzjb6OS9pLjgovHstOrb149z+k4+SS/wKXQzk1ver+
+pbZ62+N9zQvTsVlkA0dzxkKNkwvIROeLipc/6uJAxvbfFko3tEI8E1uAX8AwV5b+
+lS4KHWrGhUNTtfdhp3i4ZUNsLmv+5EAO30AD7ISivD8LivIHbTlwMrGmduP1XId2
+xSA0nxZD9+NySaA+4hOatti7UN23+gXVHTU+ZVGF8YxdscSdpj+lw3eRgq4GOJ9v
+9dtjGTbQ/HSOcJuaOpjIF3AfZ8DvYZEoafxRvAWwo52IGWOKVEZ8Ak13gq8vG7t6
+Etrq78nURBlw3GGuVWV8V3knDhIVGG6aiPlzwE+XDcRdu7Nwa/IamYUOoklldBBj
+Ba9iG4b6NcFVk3aTr9PmCmTzLswwmt8ec9SQuj50aR6S24b9hRKw+eqS7SQLKxfG
+ZKIO7aLOFv3GkeSfcdssmNkOessCWKeaLPBNpQ2j+t0C0Oq8yoMxk+uVoOdvGbhM
+2yA7QyZCZ97rQ62IR+nZfekIGbeeAXA6kcbc6aDoxDQRm7OATPIsf1aJ1S0i8FVi
+za5PZqsAN8ClVB7OTKrIhWznYmS5JTsQ5TPMbeTkuMJ0DmtSq2SP6R3KEBk8h8BU
+P+Ds685d3ZX38NdNfoP3I08mWO4ddZle3siv9r1wA7EwsvzUNKbFKl02DMunm6Y4
+snh2hQERIt3Ynl4UkVaOPujKRPLBHwCX7prNOV67VbmGkcSKmD1be+DZfdKxjlfn
+9Qpc7iOgGkGYvh/CttlZn6XTzkg04RtxLtRfWQlK3AGo7g9qQ7BgwML6O5BLbQev
+2VlSerU1WmUGE6Vkm16K3Tp0B1aXqmSiIE+FuFzJi+qWwoHfnYbzmyFISh5vQpXK
+QVam2wy+h/O3XAopUyVD9s8VMM1Uo9xOgzt2J95XlhfqUlPxjDIB4Tc8hC9VabmQ
+6Hye3St5UTxFF/n6cOcZt8AwOgJrtRVr6ehX8HfV/+/t9t+zNR3OceiU80RhCETD
+8a/FOs4eyv3jqlDbyEkN3JfSZ23eFJRcgItyKGm9oOA+T7yFUig3Fg4w+ZogqdyR
+rQjJ/pf2VvHXcH12JBtENLuWDuvAgydSUIkaKLtZBORq8b5f3cSWXcLW9++oFSfd
+/8gL8BTcowzYoGKd2TBmHYLRANjYxnmJ3DBIUT3QK5XNGQw/zMPvwpaQol97YBbd
+Vj/Bess0xNA3avXhzp028WycgeIoOajjiSK9F0wZULcT6vFwzfNk75eiGFbnByvq
+XROAZX5WRfkjWc4aqflPKHzviQk48tzJS/HTVpjbJt+ggQep70Iah2kySW9Qb2Le
+ZnZMXOeM3XfD5yXAcxnfGjudQdUsTrADkt58Kga0F5yDnDy6hsXo2U2gmDCdaZS0
+kX6OYoBJYMsxvJ8rrihp/rej2Olerd9T23lKK7VqO1dD7uM0xGDc9tfVMVumPhmW
+uLa9C9fJG7CaPY6YegQWTjq5XwV02F/Ew9aG0pe+6kT//Kwjh8bVRFRx2wqVAZ5h
+vafM63cjbvPVW++KuL5ZxMRgMFCKkvrHQzoI2ae19seSi66rtX42HDHxY38gt503
+x+Ya7ZKkKISwHxMh8+3s3sOfxLpMidzfUEzijUlGo1qb9yCLY4MeoQHs9Et2wo1h
+mFajfLUlWloA15yC8W6fKWO+Jcd+v6A5CJZ2hrFJdE/SC3dRpqlhhJff0HOWTt/F
+L+nwTe0QQDqXzZLFSkkYT5Ia+H+R7lgDsPhuKGt9v0zNSdYaDYH6JFIL4Y50tB5Z
+iwM+BG+PsMYLFkYRlIgNA5HxB7xFP3vjK2j0cXSgxBQyvr/Sf3YxBAbsP++71bIG
+iKpcR+8djIDfeSLieV25+E3jW97ZeIB9dl7+CEN/fOAReuAcFfXzboqUT6t6v/eV
+nO4J6ZjKwuyJy4OJ1OcC01nGH1u9Kc4V0smQX+FjywR5bMDTyXse0hYEyJFrDrD0
+80gvOCYtuaI3eu8Mx8LNjbi1NMWj7lV9eW3eOLwkENsb42zA9QPkpm79SdP/Sawv
+ZAW4Xbd/nUxoaDbCtWeYNj9F/pfnvu7aoKcNqODZA6giWb7OTwqSiAFSTNj16g6m
+VE67sbOkkF3/y31T09C0BI49h6bATT8D/dolaM5tvi6DIzpbA3KMaYtUd9rkWH06
+a6AuHnAn+wqwHt7nG9lLSu+kEJu0hxE0/aBZLzpWa8igo/k8vbgkl5iyukQjF0NH
+JQIEqwB/I2mpZP9TZDjrS7MB0YNQaWYXKjqr+O5qDpT6xlpTBhE/Zu9zdcpcfeTG
+vvwxjOYVDVxem4atsaU3z5cvkS5hpzwAVa1zfsq1/4r46zoXS41TRLf8jE/9Wpjh
+GN3JVGcYC0tXe52k2cSkEPRc6OsNY313OKjmKq25ti/CdWLYJKX7rW+IfOgjU733
+lWx0ZHVayw9HQ4+Y2Na0W/NOtf3XjOMIA3T89di5tUnL+3dyWynHZ5op+C0KtgMW
+Ze859cwXd9Owr5jrC25EiRL7elbVVUwfLphpo1Vpj//VPqBm12ZgbDOV9I+ZGtUl
+RIxZqlZOrEdti/PjULYgZDmNIGIP9ZpZdgxaQGq5psVRY05CFCac+iH6s/UWBtGY
+hAfSKQvZhQkmUmiCv3X1kWzQpHxjqHAiqkOciG/4ylaX+KU15AMNV0gyGPDlG5Q7
+kcVbyacRgOTiYxwGuxMwVDMvg6RCZT8qIpvsYg3ErI9nvXkffzHw35AesNkbAvye
+IYMgmb97r5GKTyqHhO3bqKWU18vOHmR7vhhJ0aWzkXgkOXg3z3I1ZupUGllTd4bX
+X8PDV+jQ1CYfGiO/wFTMDL1r2qBp+mS4T4tqzrv3PJuMuUVw6vu2r/bD+yTcFZGL
+XqcKF4xPaeHvBIST8Z1hfGctIrKlrHbP5cAvblGakq3WxEBFPrHMRD6twbvTCztm
+H1mjUVp2qaX2g0BvjCH9DXaB930OEZql4KDIQ53QQAqPS8m7hLMZA3YyWVMlU8vA
+GVd3n2JKaEcV1CJBoj/VD9bZEBn2raRonDfpJLIWWsmcPTBRUP0w15TF9YkUViLT
+CdfDBD6zR+IS4Cgjf6zlc44Iax66q0Ql98evwXhCgfQMEnT4vMUxCMFsJpDVe5Hq
+FRelh+mBucu/D8Jx/Ve2GS13db4/f4al6mCi84ch5FS+Gn73+2wIrEPbTbEMlclX
+SWoknbOu1rtHidLOQWCN2ybrRnECs/J1wo6xaejpqYuf46gXXRTmB2f3nu3dHTdq
+CZrt2xxuZ1+pYR/aIzPgyDGv3l9V9XADpGXgPwJI0sHZJyRfAqpz6M4t4tQTZ1tL
+RuC5O7PxSBtCn2RNMTlVjxGpBfSw7DNaPyeVPN/L+PvrbOanilpDtCb0r+p8ll6D
+/qCBHMVtnA7AZmW0gprYvvMt1Ss3DNby8KTveksO0BhYs6VpeEw+E/9bgG3DRCOD
+KXP9Cm0rtssRUqrh7HdMvfZoCKnMt3Sdu7nvQk5vKDS8WxLCEWBwZmh+NNO2zjnf
+uC7JVLzMYeV/J/l8ZIBzPunAAjtTQ1XprCsmWuhN3gqeI6QwBztftHg5/c7qLiLf
+zX/iauSkdZOQ0CVKkPsbfSFxSi3YBQR0leomGDZFUfl+DUsya6h5lCYKRc//yXTL
+O4hzunkfSQ/BM/q42MMWt6cfaixouxnfK27ZLDhkgLF/SZHHxVsr05jrNf+s6+Fw
+C446XZREvNqkcmPkLs+NIhxeWRJ9lFbchMN/VmrUmw7PXnyanxIUviqpmSEZDIyE
+qe0PEP5YLVTQH666tvwhrogovnPU2bbZoRkpjnN8F/SoQ0sd0cgIu5oqivvW4iaP
+x451R3Hrb00HAeB0TI0wdnRoV5ddCNwwy3dTLy3L4U5a1I5TrF7XFyz3YvuAMHPK
+zBs0VY283zqVdOGmaHHApGEDeKosS36StLJ1tBtm8pGMuk+/9vqC64AN5m5yQUd1
+iCHAkkJ1iRFzDkD7VZucbso/CQEPZFoYAmCF8lLDdFrIQBLYeH3Sssl/9Xfcs2da
+Qq5dcbEAsNgy+XZaaeEQOlUtWkcDd/RqHB+yWQ8n6gv9TT6WrJjkPsiYkbd8VGgK
+EC2oIZGhXJyTH8WAjG+xlzLiqTjNBe9CMTTVj4E5AJriF16MIh+jIV1ZBH4w0w70
+LvdLxRAoDpejpcSIR6oIonPu2/r6hbfyT0I5yjbcKUDdwNKI3xx9IejmT6MxqLx/
+AitmVUaaV1hZ1k/cUUGXDbqJiy5qXiV6DxpFLOBarJvLqwZNX1YkmHO63fmTs9WU
+2eED4t4pq++URF0l/6mAqIiuCizS+2n/tOYYsRTUhqtKNNhNjAQJQg1J5cmzJJU+
+GzSa0VOA7YmGNjiqZed0/c/HklDnFUu9mwaLrS6+XRqdePIp5aDMbzPAR3AXWb39
+0DCz3E/nwJJFzgosJHXv3skbMHJafc8aMrLuCx3+r3p8b1ysREdWpb2rKgXdWkbQ
+PPg0pQz7HI+QHVGJout78S7yDnFxDaoXVp4juva2MYfAI5v/O1/zPYXD42/BS6mx
+8t6OJCDGmtTTtR6Cps/rF3FbuIiNko4pSGA0VbM4UXJxifO9qTu62t+BAkLIiREg
+KUFpLTolh0o5w+/UJXrewzl9humdmo/H6p1x82wGor1CgIH/5JuDXhMTdN1UqS7O
+ph2lCCFsxjcz8/uPa3at9Uw46La5YQ9mjJTaylM6Z9titFjQS5C0fIyHKyLjMemu
+4TkcuNN6Rec5vIo1xxASG2/bFFpm4llfaA26WE2R/pIcIOfwkRUKrzMOcSlT5drq
+nQttlnJ3I177r11EpjLQ6P3SCKpr5OgAktx1fnEgT6PzUNgXnnUyMDNU33FLwRm6
+elfcS4HRRqWzIO5xPOqRsbkVQACVpxHCefN957siCsqa9hX5F71fWbQBWBSaCYzS
+q4DOv7+WmLYOSElpyykrgIdE3yCVvbn2xcWZxnenI3PWa8zbLy1NgJwwuTSZtyGQ
+tRiKbna3b7BGQMWkqOBhckBKT6HAdvhgCVZyeQ7tcA7uMHIUHUkok00uTKrzJv4B
+xXXjcHJpBPsez8/JRBV4SbMpXKpbwtYFASho8OlfpYJPvY7FZ7Y+HBy6qJbOjSXp
+RVTaWHgZH2CTJBt7NtVpn4vbP6B0Tm1PCzv3BOTGpa7IozWdNOkFkt9yPRq5SDtH
+BF8kk1h//l98xcFfc1Nr9svQO1pBLUFxwM4AL0LuEfitv3HL6y6CN0t/JkhaDPLb
+TU2oMwsDVh5s3/Abe4aT47UStLstJxg4j7HIRLLB369SLbC4Ju26i0ylXyY+fCwj
+vvnvfb0bsI1zYSfnMNgVMT82K/dHOV7MkJ8LTJgGQl+YyAapNOjaixjVMt27paSJ
+mXu0aQ3CJozFfTuHpnSC/jdpeKEf0BCtR9/XPeoAs2Atsynj8cy1F1reSg7yrVaR
+6fqbhUErFDaQJe2Cg8bT6jBptFYdun+OQiH5/ZUXy6Ly3ITrTZNCoOrtkyURvNyh
+8DKj994KvhZ3xWjAvs2dEI3uyB51IZfNI99KACcQ3z7ryZPuMJbPJUWkt8a1WjLC
+TxjdtLR1EwQ4T2FZYTYsPzcxjerLb00F0XkETTHwylhq3oM0q7CQt/hbsa09V58m
+domCO9gp9+QQrbHQPqzR23bDmGNZDbe8jn8zAgSRqzAHz0cmC/T7AI2Zcumn+bdm
+BG3NZ+7zgH/tP6iQjZTGpmmU/9tcfc3nHSome1nOsAjRnehawLjLywtGzDA/o0l9
+KqDxUW4eG82BHM+31Q/KFucoHT/DqFbr53YObYHrfJx71elRewFfFJxXKeCUXRwz
+EZ0Y4Sxg9mxVLCBr0I3tQpC6HaKF2ICXKq6dQslgrW2utTmJc2Gq/SxlonUyS2Wj
+f/JQB5lntdY6QAaStRCIIQl5TQgRxUvke9QQkA9VMLBckzrXYxsnI5GD8pSXH3Xw
+8Ry4/yVA3g+m4MfP21D5wtvLiQNlVhkOIH2CWAq5jCtRJzAxViM5Rl2vgJsvELrY
+XMhtV2wsjPcediSstsEgZjdZZg0pwwNXTo7ard6y8M83iZVoB5LA6rVthj4yeMo+
+VnDACxcCR7fPxCg7TXS5QM/RTUjPcKaV/ehyc7VBaDaRNkpkaGKnHJzZzlmoy5/9
+nJ9Criv0eNOSPRNHHFtkvWoIhuV0tbj/o8XQ0Bd+AU4meKwc/4XvgXSxXr9RbcBH
+kRUs0aSs77OqAdeJFd6caLWbf9IhXat2zT/+njIIQagHX4CrrefkbqbvyPY5+7Ph
+XmcEbleXHe6P6ysxlKOlbCDyOHgaj8DALnhgZHDRZC9z5h8u7nhlrT8P13RunsAX
+9/FKKq9qatB3dTOIX1Id4ACJ/PEbgaHeMOexm2hoDLBcI7h1CAKzvd/uF0UfulOk
+ORORpBD5ber0P/j+IhGjOMWCORghRtjjq1MDqMeFh+joTEH32DewElx1EjeLDLai
+KU5ATXNh0oHLnxqXPAkIGBH1SEV2kj0B0pMdSgERiWXQ+p+iI8zpq1x8wPBMR9W4
+gy9780bxPnxbV3UopXzUsLgFtj/Rb7K6Tt3lH89YHhsHYTQ47qHw7K1TM0FRKIGY
+aP3gqw71D1jqplwyqFL5TrBufxS8JFISUx6LU57WmgAEnUpk64fw6mjRqfhTTZsb
+mHZz9KJ9mkMSv8WI3DrUjntfvs/pDV7qPD7hcNwuHr+bFtM428BLOelPrUg7RsrD
+sGCuxuKqSS0gpdmcszYoXh2c1gWQjE7G7wBVgVoT6Y/jWdkKYIEWtj4z/zsvJyI5
+loszCVEQlerW0UMC8h8HyGPaI6zEg24Y9WTWF7vCU+KnhL8LxykIhb+cilZC4LdM
+/azli/sTHfoLKUxcGya85P5HAVOq9LmGySeOwp2yt4Gy/lP5QZAf9EDcCVIMETpd
+OzksrU0Uha7Z95PLQlj/qjwEHoh9jXF+k00+PKBIr4rimk1uOFWcMop5JGCu9P28
+iKwX8DwbM7qbsnE0xtUtjqSxDhnrTPgMQ94NkA4y7FSWhGzR7oz6aI5+k3ncTNnG
+1YVpnFQpu1I6mhjw5i5yzS8BuPIrD/vH+MXkNAZd9UgOanKRZjuQ0nP4TqnX96w5
+wEMppI+rqu6efaSUKWSKCJN/5tArOPH6x32nVgwqHpdnZ9geBhlhr6pB8rlWKmXd
+BP4WQ3VW/AvDkfo0n4ow2vrqybBgdCBpfHWsbBUqTpLw8XAfaJEFIUa6KjBWWfUW
+yX6s/Qzg8dxhqPDtdpeSFBhFhT5AiDmm01uFncA2lAI8uimMhKKk8gv8PUoSTVIx
+P+6U5shE5obcRYaFgs0zba5CKzJaVeiMzGyHx1lZVun2StQFA2zXc3dWDmqve6VG
+gVHbW6Xq6A/Lbd2huRrCjPTKdJ1T75LVRJ56FcFiTvoD0ThhqwUEqeZ+4YQcXcSz
+ICOQgcK3/mpk2c+RFVub4YLftmCfRf1YdB6mS43GXnGaqQrB/pwmOv7Tm8AnLZK0
+UbMqmlH6qQ+DSzdI9hfZXM0+YBinLQtvz7bfTpEK0v6FWpSzuAjP/BeH+cVnNNH0
+cN5wiFRtYgBJdPre0SD6xgbyWn4eO7RxVQDzX770CFduQIhFE7rBgTFk9qbzQd3U
+wKpmy+8K66/KaPO8dTlTyv8lDTHPVTFjTxvxeEGDT34A/nCpWqHLeqwSjj2bAaQR
+JAO/tPrYv/R5w0ZN1tHKkr0U3n/XaNNO46FgW7an4aD+feoreRH/nRF7E5wsF5K4
++vkZoHdVeiF0EiyaMAuvy7jyRNGhGOsEChsmclC0SAX3T5xEbS6RNb9z2XnuMXPA
+cZbksAVZW0jbzfHaVB4uqkZCOfO8OYA/qLlUaNEXEJhVGEqm1z1+4Latnmouwy17
+ljQ5k1if0CDiexDqnCkblzdebqEI6lZW0DMwzCewNzVEUc2zZI8dlaeAvbuVMPA8
+3dFADnGqEtk7Bi1rv36BkqFTvnlboqkzeTAVvegs9SWBUuwb9/o4aOypaelV8mP3
+gtY92YV2YyqKdyfER1AjTeaLS7YDaJ4LN1X9AQRFmZKl2hNQ2vRvqt3/d2JaW2HO
+2H7grUMchTvz2nzsHfaHM28/BOOdmDa0fTyDe2wMWsmSj23r0X2niWjsZBPs5Di9
+TPnmL7yn3yrO8AmtfgECeQkD79Gqnu3Jfnh9qiWp82jF8cRV4J9/1sNfpSFNU1Ap
+vtpHfLTGFFXHpev6SSMbc9aISPerzWfwFcCu+7+L+VvYsq4zXpLz/FWEimyHoZZa
+c86oXL5vNIrylkmf+d8y/PINt9+NNnqDKYTlPIYjyTUWbJqa7xcatzm87OSEst6H
+elaf1VXKkBuMyrLWIBjy3SN2b80/f+yPfdYDOSpwil9HwinOCfLo4FvKpATEpwF6
+B3Ohmee56CZJsXs1LxqOIZXDNRC/oDbNfO9N4k9asYxs1Mr2p+KLQSJZFPpfopYY
+uKJQabFH3BOVju4U46FxrmwMfacasBJDlz3nFL7b2AEX7mSjPFPoqUBqien+6v69
+/RdM+TEDejuBFYY3uPOfgxUY6RxIHuGSPj+x1eSrf8Zr1Tjfm9Hl/6Y2UibQZRw6
+Zee5nOqo9+q7rkFfedlQRJL7HcDh2ukkrX9sqH7FsUWph0SaDKf6gEj6wiBLduSo
+FtO6aFaY3HQI52FYeepLVjE9jqtxuqQoHh4e+ytrX8mmQXwCXJKJPrVYWagM2ek+
+hePEUnJGbvgWjNHa7VsSIh65eF4fWPXkFQSkV9QVq2bekNQwKCF/S2Dz2bbAn4+x
+o2k+WzKrr4gt+wVkMH76XeUClcMTVpSags/9s8ZlFgSdOSzTn8RnCrkYsb4WsM1v
+7nicCzlljr1DN2kOH+YlfUSDS9r/MoJXBzb4ySm2i3LkiIFy4PvsL+t0+wwEoZlo
+4X/d+BMXxddW9tkHNLCi6rSCfXLicFDsy5CnD0hkmPzbc1Ro4jJCA1xgG91xC5cz
+2BQkianu0owUADRgEsTbwwJ9GOzFY6T1Nl29hJK/u9gDRZ5dseabQ1Bll7Yoqn7x
+NgOoFVdUTuD3VG7WmFmUhZl8238wKJYG1O7n+KSkL4hJa4lfU6J6yFIVnXr8Q0PY
+KbbiGzvZTLGGjfFmRQ2xWAUuUvhUyY00fPdTD95FIt2VexFXy2g0clZHdnSsdGWZ
+uwEtXfeww/f4JShauWBo6H187PVgGKjLY6CztfKIrokMGGe0iP8gEW5ybDsdHESn
+BD7DlA/bNUXfOCVmMuQOhRiaEUknqDd95Eum+L5yyj8Uep+7omV2NltWFrXQ9P+V
+67t4Bmnlntk8nEvzE/0C5NXEu1t/66MDZRn+HvF7TeyeYZXsRmaTN8RpfFtSCYhv
+3haq6jwUHalZRd4bzUX+A6mQrGFUWxuCAIwvK6OiQAi8UYutyy3VH0Vl4f4zhDTL
+UKoU9/bnEUPf0Jx5MKSKONU3L/tgcngrThs7mx7pPNl3Fyqzz7HCSM76CWOAPqbI
+Tp/iMj2A1wUJ5hzV1obSkGddkUlv6kalGzLSxdh0cr5D06Mj5Ouw/cfKY9HUDXjU
+2c9qDhG2GbypMpWPxHquvXl82oma8q3ypnLWfTRdvU70PmIt5XFRdO/g+nBtv+9O
+wrmVte3st62i7K/TuQaUu2Tazf1etqlRrTGJ6nkBn4QARaLWgFbFPGE6l3RyyZlR
+c9xSRbC3/sRpcY7YI5VvFnKj0cIqrwcFWhLxnMPPoSMyBeKfxMUoZBVFdUZmoUkO
+DeqxEqV8FwPRbyCUjncjdvyjWr9oPkw9EfebhrqLSaPnxxvuyf0mzwmHQiwwohcR
+OUhziablYG7xwQna8s/icIsNCufpdFgcJcFUGOJMDmOr+zdw4WcsBhWcFZSpLCdl
+JsbaaNLR9um/DeelXJ6Ila4bDvty49yC3WwRbz4KOsSF0Hn24W9EtzMf0VxoBjxw
+EaSovWbCM/XD9HxKQr/eGYAX7Snrcu/ndoUKljz0xtgh6YC0SZMu6I9dn7/juxNy
+MrzKtxMC2mP8wAv0ykx2NixkZkB2950NxEOuTJOSGfwKt70jN5v9Nm0IeCqLiIlQ
+tIrOEQnxp6Cxr861AxKD9cns9cG7maPUcObgtlT8ftJQJ2T5Tnxl2xAI5h7BPlgF
+3jMr8RJldPUTLhAgBVMi/F63LbG6I6dKxQo05E39lose60iinSSHUfoDKYjvl0dw
+J3nfkli6+qOj0iZG54c/8xai9teQCy1nQrXU85LVNPG4Lvo0VJiseetMhPuq5od/
+ujndwWpMzQzyZGi0DAr6Ph8XiaNbnbPHe9UXWNmRMA0uiDb1gUCN8X6RECYtLngu
+s7th8puH3OiPodxlaj4lehdQ3HfiruhDQMZ7cy4T4/m7USKVOc+DH9Be52hKaHsZ
+uCu0CtbmyRiYglBc1C017/gL56Lwjj30jhgSx+yV302IhSGl0wrx7/fwH9GRNoeH
+L3JYfpak9gQbtOB6FnIzbVGObECNBGm1qgr4fnyzi0R46iUlV+lKkpgqKik7Bka+
+F/HbSZWLu8Fdox3UAS5SUye5QjfIX6d4OSfU+M++IBn5oxBnyjFeYrXnpRegjPUm
+k0wfPpKXdLtW7tE3VxruJoRCYF8pLGM+3rSX3d7C6QY8bTI/M1j0wd2WuANiz+9Q
+loIDc0qvAGx6eQEyaodCwWWPxQ3Dou1Zc8JwXmdPa4pCg008zKAadSqxOM5bi4pL
+QLCTVE4WC+tUmnA7Ff8u10jbZYXXMIKpwV00u1qH5xfYlETs7UnF1CSAa0PQ8fx6
+ApO8VYkzEJB/fa8O/dKOfmfYOtOqDKxxZi8dyCxXLd08bN47XQlWPZWZWyH9H78C
+xUjnIR1HxQjIJOrWuO0j82o0AsdgW2sns9q3hW1q4q0hum0BoEvPiNfaze9gDEuW
+4sNrpiUItvtf8f15PkDWkONzm6pbGC8j4kxJ/H9325PIxsmq69CQNoddnNd47j4y
+Ynm55Ij0I1yFiZzkYRncvHSTEinRORhkKCNtEOL1ZoquXz1JytGBwXmMy6gHRFIR
+mK4KyF/NkqryXOfip1iENROSeumFxnDZtoSwW5e+Uecp9bFbY5Elq3XEWQ27rkjt
+39EYew+YcGVnfwlE56NbeMIdZ0cPlxyiSnrlVtkGL9V+opSss+QC3jtCmyBkpi9I
+ZG35Z8hOEgegUhHVIeT7/ik9Mxgx4J7f5U2F7HCL24mzgSpFKfl9fwWcJ9/oGu6c
+RfupZgxOQ8PxaS4ClIRvZ3rOyOHohzLYZMZ8hMrx9b0wrBuBgxpso2a4oQl6wH4D
+MoC0QfStK8krzBIxBBhi4I7fH3EGPdTZK5uMsw1GG5d0X+B9wdz42DyUEuJvJpnH
++5lAr97wP2Zfs25YeGiz6WsddX2+JhDz5AjJFIdvWIo1zQUJz4nekn0OrGHrJ0Fl
+t9O8W2YT1xfpkPkNCmAPJ0AQDwv6HvSVHekiwnZwZi2PCdrzrhPUI/hSSOOLA6rV
+j9G/aLL0CA6KSCeNzv8WAgfIxXKTg7qaLF2rVJA4kaxDNGBjmlPZaXXQHSK/R3Hu
+FtRh4sG8ZUCzKEUx0WljWZbjX2Bedg9ODTKk5SHbr8ikMzrHALy+5LSuokf1FwuX
+l7yr7eSDm5vhyN2mARUnaEmUMTwVHxRPtZ4860Pejhr6bjVgYyw9jWlKY007YLcl
+20bI0dqMFKPULQCXTCeL/1WmqS4qJBlEt2igDsLIE0Y2sO0csKOSbxdks70WKXHd
+tZRF5HHIZ8X31RGIT8PuTjxpBwysZ3ScKXk9OpIaGm8VENmEeE5XLrkwn+2mDPxF
+1nh2voth9Yq1SnnrJsYAtk2wMTnAAWRYNtumzqw3fNI+mHXYwBETRbPultNxAGrB
+BjO/tgZbkzCygmSCLztypSVMGcoYAlI5NI/hNsxsHUM2r1QJlmyF+x9ZqvLqG0ah
+pPndrYmyoOsGwYNWeSJt9vRAajhaFgOI8I4R568jgiEvm1pjDxQt2V73/PP/M6CI
+pVw9uFBY757duYWwysDuDGwHOIws/1EYi7sYBiHUVG6tjZaWeJlAXiuhzoQ6q9wf
+czYBKRUB6SrNPrjgdAETmxeZRCZk3SrERLu8LqM/bnDNMIlGHJ/4CoUccyeGr9DS
+G8slSuY8Ims4N/VVhv6mMR+5px/OCQzlw8o8c5FLBP5IMGKEascAa0u2nZePnvnS
+W6IKn4tUeyPGVNwhfRtnyIHCCCDxiTAKkf6D/aUdjOC+k0kEXx6YsPFwcGUz3mo7
+tRP6UdOL/MY5xUqntolP+eetPId9W4VmOxhbP3P5zvoiERPkeLymvSUYMI22RYPy
+2ly3EfAJTcmthmspPV3gp48mfhdrWutFKCUSpXRaCeK1D9fwONdNj+TbppgMyKAd
+1Nf+czMhJceuO46paeGjZkqKewBvxwnnRDdmxM4EerISmX2E4ZAP5+glPeVatkcV
+J0SzDk02DhiqvMt92RZUUstMilJs8B1D5S3/2kBFUhNYjav0TEXCaaPYFEaviAyg
+G5jtFT4LP88wPfOGcinZl7CcCRuBNhwk1fwwAWr7PF5jzWF5ZPgYGzS+Wrx78637
+J2oR8fUbgTJ+nd2mflO2x4tFwl2UTbVAMvt7LBTCOO6DQ7fF8I3SNSN7ggmdPM3W
+Frp88flkPTWWVZPiBQUf4NhYXyJcp53p2kL3KjFKz5RjxGQK+CzZQbNpbHhiI82v
+8+tdYWNJ/9/6WEmEJZ0qOg6eWXUP3Yk8HgnASEpldN8UEAA0W1hMRloX7B9a5asa
+osBOXIiG0Rio7LwZ6m/SISbwJ8Ga8v+faXK1tvceyH1EvUujImhr78hqOBX8uGxg
+J98Gks8UojZ5NUFEFsd9Z3C9PjMQ8UgwVd512/1jeDgvCNXcYfmCbmkA5jPUYMEn
+9087UQGOer+93PdNFaRLpipp/HtOTPBa+Yb5D3uR0gFIoh/5oPA8ZrfUtTCGkwSS
+JWzXBkutwCrsiFfFiYtwOd7J1STJqxl3GuqUXSCQMNi5YJa/gOgMJUbFUMsUblUE
+xb+obmgD+v0d1ss0hiiU59+3iGe1r/hPl/KEQyggJ+Vjjoo2eImHGEb21jGwylZQ
+aWDU9JEGuZ56evpd6/nEvMCqwKLN2XNCDqR7nuGsPO2iFivmjUJ2egpvvbc1TRM1
+IaXpKbpAy9KWDR8tSVO4bwv2u4H0bX2s0ir7Hh6XpbMykXk7/6hBVzy0rIQd60Gt
+tHoO8J5gXYj8CT8COOdE2GJdV6J0hVfROgwBb+e98sXj09RU9epP9yhHVrw3Fv/P
+QB3VyK8jGXiBgIdHfANTuY/b6Kk14sfKLXvwWqOuA8xR+yv1Kgdmy7OTm/WDVw5U
+1eX9c2Zib3g/azF7BSyos3MBP98iYxD9Hpf9poQHQvtKtz9mSMS42MSKvB83mV3U
+DKQGeFKsg5KI3FOKqI22u5LuH5FM6lKasF9EzwanGOh0qamEg09tkMRG6YwQ/2t6
+MsgofGQ1+CWoFlhXXz3Cgy6BPTjrUAJ9QtHfscfz20CDXc4cIZXv4HRv1GyZU+e+
+XJ+ueg4te6WHvoR1e1d0h7TEwy3iRUoVjqVOSB+0CHqGpe2d2H+uR6B4QB+fg0nv
+69C4DeaJ7WKVfOgn9oKwQwfdiMXrxecay6M4aFQzMj83qqJQxeJp9seMeDeEYqZw
+PD5QfNYDLqSK9VEIn0dHpPERy8zML67whsi5jGZYS0T38KvhIMEDeL7KHRzHQbOS
+YGMc32ofQJoHREO0N+oSxsSTP9Y1YA4B/A3Qfb//FJhsiuEZh3GLMmL34CYI/6kY
+j2eWrT4Z4CXtPQQtxo/SWuR2hDLKBPEgP1De7nmsnSkbbOYnQpn/I6I8IQoTptPi
+ZlNJeRg/cFDzw8MLbqTFyeo2pZHlgSRVKyrbLU0fyIA9CmyvS2AmttPCaq0DLiC2
+9UoTYVqdBg0BAC6vR3j59338VNyxQqwHYFm77t0/+y0Hc/e2KWXGM3yJR321fWR5
+okyDZ2L/NhN3ISPAiDk3OIcR+Z+AdVV5pvZYY5/HMj6oSeJLTc6wu5tvIyYr9jDo
+sNJn7ZI6Gcnqt56QW5Q+fDxWnTR5MXaFUCvmO8FVcEt8WrK/16HArmusWuk7uLwk
+DQt+OouLKPMedKj4pdwRuJwGqsEdG728t79Kje2qzuPZg3tjQtC7ILuUIox8UbFz
+U9c8ecLM6ZAACQBotnKDS+bhapDv3/okty0fVGSEeR3NDL4GflIfhQznLyvijfN9
+B+f77H74DJfFMfGKcTleFqAnD/p2Zu0F2fn22jkB4y3olQQQaIwNyTrkbVI1RfFG
+Ixwx4qtfQOV/kQ7EpJbuPCrxqhIGdxdtO9y37jSz7eA6XfDCu2xmJdtA3M1EBz5W
+zv2swMVkMDtY9En5g8dg+3IVzjCBUc2DyFg0CrIMBJokHfZMeMnDHa4vsZf65CVM
+YNOQZK0GjrUo40PkGO4XsQ3kPqQpI7oMQ/uX7b1w2tTVBrpGQ4ZGAXKz1TXDgpAG
+JEEaOfPNTGAY1oMjxC4OTh/RFJCG01cTlFIzb2ysDk8Ewm5pWgs48HUnSOzgu6VJ
+HMAWwTzRhsvR0Clu50tLgWoEsU0wOPYCA2AO/tMzs4mvEIyu59tpGm9tFmT9mQ4t
+MW4f/Tt+Bh8QUFqivk/Vm29YC/HHdfEd9hKGS0IIvOfFBAWJAxUMk0f318X4z80i
+jEGZ4FSRISeeduBYfCpNunqP7na8WFAYXeGLhZiYNd0itkyOTybpNZ2DJGmkZuoI
+sWFJ/i8UexlRPWszFrokg1DTHxmEudFRqQAKSTQBxY7jTp77WwPHaNjkzCAI+c9I
+87NtXOq2I9Wh+HxmGQswQXWbMEt8huwG6zEU+4+9HBtC4msiuhF+ECkkvQ2Z5fYR
+axjb5NAbskyHgyHyYRbJaPk7/qR63zPypz55C5obwmESSaztiM5KIVxQnk2K+sdC
++F0KWEWbBfLWesu7GDa+5daL9qbJfNDgJjsbnOaxHr5iIUGLiDwW5TK35Qa54kR3
+o8xJg8WlUp+1BHyv9KdAZODu7fnQaiHQNTs4Qkj2029cAyoiyHb3KjDeRhx4P6mD
+eqI+LOHSllYazIUbth+b/f6wr+/9XHU1wTbxbcjjSSmEMPlcrqv+6uP8boT9ByFH
+iXpWUpuhR8Vy+yMjptA/0YL3h2KpZeWmhz6MZ+h3sq55WpmqnpKVrmSoDQLJGEr4
+3bPU1fFBfCeCtmIL/dpzwX0N9FJeuSawMaLD4lvBrrwWGdfYclaiHe/klyKnhMiK
+Sd/2WvQmQLOpDlHBEfkRCiWVfjMomkgDO4ef8657HdhIExb9pgxiCwCh5gT7lZtk
+2kGILU+DNJHVrlAhGbqDF0ebLr6K03dSYo8ksDTlbuJYUGAD9EcCrePxCSYTZU+O
+Drh9It4jz0r3faDEJ8D9eOTO1bLh2pCz71AnHTVXw/GlPwIaZ7Ky2UKO5R1vrpWP
+4whHtx23quFiY/z+7N65uQDpyLqLQfn2SjmBGUoqWIWXC0VbktTFhzwYrg6d4K71
+Qei0fr/6TXJqj+skJu5oWPuGbahtUT+E54negeGBi9VUdmP9b3YALhRJZV6zo8ZB
+a4KQ5TBHIVN4imYd5rVRKzXtL25Jkzahjg+5h+Z+1+ft+VyFYuD7EtHRxzRtFztf
+ROeCI15/+j2XFTNU98bf6/HRfjpa8vvqtBuubeL0jN0YdkB3dsg/yZuOWqWFg5TX
+Z4nNhrmcqDwrplByUCuIwYbKdkbJBKy1m+gPIk427WxeqzGqeylFHS9YsOlP7w70
+ddVhqQjdlyFxQVfXVAFMchIxpz4iplYYKi6VuKT4w24AqE6z1X9zifi/pfX6MEyL
+YUN47xNxiW5qIdZKdIn5Bxf91yemq+qjU7L3wQeQJ88xf/fjYsFJl1kPHCbgSy3d
+vXbboD1IrQH0XZJgG/RjknY7whz+Y2gSDiahdwOtA5lrXSplucGuJuf26z3aAUwH
+8h8vJv19io5xgDaj6S0gTuRzX+1jPdna+a1aX3+K1JorMqGIBk5UEn5ugv089Y8j
+FeyUJj+JXZzD6plmwBUcneQaDEIu4ewhhEMn02XkMoytl6qCnG+AwM3UaMW4gMkb
+cL3FTkWCQIuMjrs3UZlD5nxLzrMdqoLjqPQRUNa5flAh+p6wZWyVr1j/MAP9ZjNc
+zZ8yQT6V+DfpExR3msfbrYEJ4hMUDSxel7WOWFzIZeC9psk=
+=GNXS
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFileNoPassphrase.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,294 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOAyS/OAcAwUtPEAf/Tq9Icf5gtArxdlKXA6J9KMR2fIeoclijf2B+j8TP54sl
+h8aqqrI7jg26rsjTxe3v5Kt1z3XlPPAdOjbsCdWaoCn3VI65tZLRCsL3tc6dQAtx
+cl8axy1agUCE9l+pmpWYsJtB39UFaVBSYOrUBETDGyINRtxxQVmFQvblTR3hFSWK
+goH3uYWBki2O12092LmySK5rX8yQJnCBGvLA0k0RnNUxh7myVAK3xRb8pPKNf61N
+qHBuUXtNuSBGd4xR9ubKyzXHnhblL4FB9ZWTW7UmLOlgj/7FkUGVQTZ7NVyZC84v
+XDnoa1WJEdBnzxvWWPDq1NbPDeYV69kR1lv0Dn1LTAf/b0ke726bJ6MTmKYLCh3E
+CgcUkrwhYTmbRmPav++qjJeUk3/cXvS2GHVkTf+R1Gu7a+WLrz1jY10wyINzvwfK
+URvL0kS3cL65+bwUbIbHq0hhtizO1w1C2CJPo4cytmhhaLHxNBOLPPFN0Mr9aOFf
+NUKn0++uBW5KFICGFU6YXrIq6WQPxcMAudtLpdRUrA+rs6LNrHB7E6Oj2d9KFZaU
+DQjPXZSTU1XC69FtPu2SX3R9bvr8h3jcXUwXNIPoQxvDkEYcFHE980G+x9t10J2e
+H4jmkscRzDU0U8L1loog/FTdCEmV4d49h1lYHwc3WPmN9hRpovLXZosZAzQ6hcnP
+idLtATZ+WeCO5vTy9MuISraeGHtr4OU27KiMFC8DU2n5TyIOE8g6M+t/qgs0V5iY
+j34XdMdnZMGTUUK9eNRJr73BWBtWOs16UH29/5pLY8swNhHwRRi+tXG5zcSDxm3t
+0mNvXlm27343r27/KEzRLU9UnhyTXfp9890eml/WFluA4LthnL0zQG+9RbeFsUFb
+U0hbnzYL/XkyG+Qrdzd+FCr9EKc4myyutnxG79blXECFi4cmIKoumTIYTovbg7sV
+3/XiUttWDOOYmlQlCkpgFppo1LOKQnZ4D84mxCkZbf5XS2odpAY0OlQmkQRVNJTj
+titDzQoBZh+CU7xgMnBxP6euUwC4lgiCf0K3k10Nfo6/rcQox0PoxM5sQ0c/yQpW
+STd02LBlYt3DoDcNHyDHsCmI3MWHlD2+y4EzB/ZKOaEv7t0HAiWCGeAeVW+gLKSo
+DIIwyLaw+WKFKfgMiIuT4pmgs7xvTp+Nr4viJZC95l9/za5kGAb1PPrG2PFCTjS7
+p79ah/GLgHENC2CnMEdNBqCrKHSEtwEJj3XxA9CZb9ANHHRylwE41qvgxlq+Uw6r
+KeyeEojNRDiR+etl0kXpNeK0QxYWvrChcWlkA3X8I8RvXlStxdW/2HOtE437FpvZ
+4XfjFslV7o5TmSNPXmARwfbkOT/MkNN7LbZqiSHI07v1j1cj2lX5NLDjoX1fxFBi
+hwJP9ey6oHzlnU2Zw15nTgjD/9fcyjDo4J6663whHWSwnXDMn3A7ABKV6tsu690T
+kEZOCrUVdIMyhJBWAdpBz4+pS+ih8g3xsYu7+oQsqVzI2ejowunf01CLyal3ocbn
+PHL32yr9CCGz18AH4xNQxRvelqC5Zhabgird8m9ri9XvcHyKOO+WLK63YCG/17sJ
+qI9IoUkTiW+SGr9XSHQSPbK6y8eJQbVFCpuOryIqOYPulzE/DyHSel6CSHmdx5cC
+gUFSQrA5VXcwWQlZH7LrmESnGH/fxXhXFR/eY+uHaHNh/twitsVHFWYrfR/Pm9el
+jdFsIStDI3U3Z/cNrkhwnHxxssfC+KuL4YO4Lx/GB1fS6DhF7ekW3ipraGJHtTxJ
+eLIdL9b4v/hJAFaYpxBr/KCzxS8d0ZehjSF1tZejpo06V4n7KW/2cyRI9+ZQo3hb
+jjQEOUUhAN9/C2JvVNvQDjzZTgWZfRgadjg+HfbGuPN+BzvrxYW09Gn1TK3rGME8
+qV2d0KoEY750XpdG9/bQR1ejw6DDq2MZ1SfYUpCMjj0hyg9hYCTub3E/WOCmx1L4
+rHF/fj0SR/P7VF5GgOnYYhLtspLllO/DaYUgJ9ag2LoZocmx+fogsN9mBTJ0BoZZ
+Svv7dR3bGB2CgMjb12nQg0WJjIV3ZMQvK0i4u1bPIcjPEXvy0AFPFl80miQRvAmw
+J5NJJcLumNgl1UL+3+OTX9+hGLQhsyBoR924AFHVVXtZGTfvGO4CZ4Vb8T+EnT7d
+rQfyYAPV0GRilZdQZsAxfz5uVuabI6306A/mvWsnGidiWI9r9tzI6hb1FO34p2SB
+jg+sw1ySsT5l1MacNmJj1hHFNOTdMzWssupWHV4lUBq6D7rutvLNB8KvQMhKZmFn
+zjVNsbKsxYjSW8+ccwUb4wPLqMZHDoiA+i/2AFuF/wvzn09V+gK3OwimLPPZbdaQ
+tIKbxZhF1ZK+7/TedTMtNDflXA/6lQaNb5Obhplsp4efLwf179ujaFE32KU18wNc
+jdCIbFlaw5vB66vwnPmLacjGiOILzr0PQnnisF/C6kIsFgDaxvvjokr7d3/4OAlu
+jTgu2UmG2na7FLMx27IYaHwP6AdZWrmmGNw3iZv+7cvP7R9bXvHIIEeinTacB4mw
+vS496rSfZrhY9rL3BelzWQBrhAX+cJSx9QaZlJdsHr/IcvUk/ha3zGS4DzNJ7NOQ
+0qJchJbMrE2GvipycqpV6vLMixHrxkAyG9E2mEgWeZD/FQF0Xp8uissWkUTqlvNG
+6vN6vLiY9qcBCTqx4acJfygRBdqY58XmQuv/rVCgGQiUxJ3MIN8nZFH7bh4Xkz5v
+Wup5S7MH5BN7Y1iEBHX2zGLkbHfY8geDKYheCIQfZAk/XEbTE9zd1nlrG9U3EsmS
+K5IfVh1TLZF/sCeFbnzxIggUHvhvDAW2N2WjCSKz4UDySzPmxNw5I7ifJWfuIZpA
+LvbVtbetf7KRryM74w0pkeFqZF/1zzRAnfZGh8y/VeO5ljbSqIx1lc4+obz6s6IW
+GPy1Y6cI7plpWDPIyqOCFBgEi2dhCh6mSF+nFmEU/cjDc2anJKMDf+VVN8qlQj0G
+onRVwYY6syMkUrKtQ53s7p2oSfyevlGYM/NvqXOMhuxmkEf2CZuRd7Iql49KNfR4
+56H2CUW1Gm25ToLfMCqHthpSjD/eUbgBdVkoytIQv9kCkHjfnYFVGoxDJymqr48n
+IEiPJcRi9fdePJFSuP4KBO2nJB00Xqv7Ga+z9NqS/UXEcTjJKAFnLzHmANOHgAtt
+YDO59wQlEt4s1IBaVQFbbWIVR5W3RMmMYOJfS/YMCuPa+MoRU9lIS7J7urUxA6vf
+HXYWYLTZb0tbgpXJF9Lr2TUtw4ed8ZXx0TEfXGWFq8MpVbFUmbQiQCQlVa9p6TJP
+VU9GNURTy//mvDuCvA/2TCwccmEsexqThf2W6qHOfBN/xbugLD76xsQBrmM6PK8c
+YW287bRXztaMQOqdxLq53dPvO0VvodpO8Ya4g4+q9gSycDjHyUr9bu9GUfWkN5Nq
+wstNjDtVtHDaNHgHSsyfA7eMddVtIbaSFhP+dgrODeENfWn3IsXjgpCitNQecCyC
+sq8u0qZ7e7F+CoO1B5wrRYbbItyCVsyb08KBgXJb8wuBFX5DDxhZa9ggxuMVtmvB
+DIM34QefzRKfH3usDERn5RzBEFT9OpomV2r7xcQdrKiIZmxLYg10MS21aEXW4X53
+A2V6rgKfupFEhwRv3QkuTyTVAPzOgKxaqFcfQuSETMQvQ9QKZ8hEWan3A04OlihG
+14cJWlxxjytZ+rwk4mKhBBQad0xq7WqCQQIg3yvJUAAtjFLb7ZuCDb+9DVjiwLi7
+6sEzrKeBvKUvpeRS5+71FNcfNvYQoTmBQ5/8cftCwqPySM43Z7n+JF+LM4w2Wmel
+kINp4eqeRi8hvxvoJPG2akEOUVuiG/gZJZxXlSD/MvWqy1dTYiZgQhObdBGlNKpT
+1yZvd9z0OSKy2U+RRe33lrokY0a6HlJDQx/XpNqumtZ8wtua/bOiwQZ20cXuLxK8
+40FhqlP3kt2HWak+bNG3/Ab9Jgunvo9z4BHAN1ujbtHu+D7JzZYPOoeLhAh9m3sf
+jR7xu5TCFoZupMbikoEVEAscjPTXbY+kk/9WsdSsEH01IzrVaDAFp1LwRFxjz+Dt
+TnDT0m9jagxtmOxOGlAGkjphshn48PXI4jn5lZ55tz9U9VZor1/CmtFjgmVZjuoz
+Tb2S+l41Is3y9VuLj7lT7+TUBLHsssO8tDwX3JzIXzUWiyn0kRw9PjTiGbEnR6an
+SVcpmjAEkGjIBCgzKMzL3NxMHj2uxEXjCezP7pWUqUsF4pKdXO9wblNttwsIgGbk
+8RZHyN8qxPRM3xU2f9IlJlnToA1AVjNCYceQqpFGHK/xYI90lKlvwhiV9BkH1NHZ
+I6H0AogiDzAeoi21L3AR27aIN/bi66MwdCeBQZE0zhWiBLMw9haSwODZW4Q3Ft6o
+N+AHl9HhAfOz7NKqjA4YCj9H9EFUbo7KWXvpAisDwP3GYzCMAJcUKl/0mlu/HtNh
+ntOzWLR1kF9OSDM5sMyaWJaWn4BBlGxHdcoEjf8kmWBES1Vp7wh5scBlq12IscOF
+xKa4MNbrz9/Og5og8dbpUa+htFGOLrqQhfw5DCnt4r96VcrAwz9og+vZ4JgiGKMG
+yJs6Mtrz23sWe6Fz6bSI1C0JZF+n6B90BC7OPN+8xfhuyIpIfPr4PTcZIlZf9mgC
+cI6I2DCcE4SyRa0Zme8r3GIY/sn4CtU1crVDOgx52BRFhadvwR+p8nBjRL6n7fg6
+myGIlccp/9g3Fco82eWfOKyKTnD9Oa9T+YmV0lalfUTtlBkGXb+vSzBXaHFrCxm3
+6QAVLxni7ieh3FrNuqyTU4nNaaQ0L2pDNQec0KgyFGW+98kTgQp3TvUMOHrpubaB
+GsnjznKWzGgT+6H55UUt8wjRaP2CUb3cGBY4kVCdPQRVQsvEEpmGEWxoJC3xqjcV
+k735HLtTDGgke03SXmvW7CGQGVX+Djw3ZU7M5FsM+q1jfBjX7XNzEN3jcFfMCYNX
+Tdxngfq/4XNGv+NIUwywGy5+f3YGHhTuM9rihFUfxY23MWel56JHfgtUZxjPdK4K
+PqRnEWv9f5aexD28Z2QjlxFWxlXHhqYwOMZurMv59lN/OEzE0+XapMDJ9Nm6Lvyh
+wjkmLUMQujCeUj2LUYthf6m80KHjrXgb2OpnTHZJIShT3zTsDj2avdJ/tdqCVMuW
+w+Hox/y3OqwkFE6ct5GOClZ/JTSsak3EvNTHexucBX86zOYnIkMxv4j/TAMTCimd
+QwptHKh0yjnAMQrFo13Lx4RJzVP1qqaIWe3O6MvHJTj4ncUW9JOD7D5gdfrYP3L2
+NuIQZybCNt2ch29VmV3m1M/vwOg1Owh/kCQ2J8wSbxpqzQHCEX6nOQNIr0Z3kSnv
+GvDvAKJI+ecweN9xdJVV0wKiGd7SMlpV26fhWeytx9lBoV/GIepl0nU3HU98xDMS
+3gZheOmIfaztGJYcH12e2Cs49Vya9dtUMEekqtF0AOBJtHOV+YzWzwDcyK+Nk1cj
+4aKy3acAB+A9c17zwdtuR+9ks9Q/y8Ghmt/t3vO/5N9qNy4cg3hZHzi5P8BsKYg/
+56qmg3uE5Gg2LB6r2gdluKDKuwQrlt2+DaLbKtKQvnCJ2mO6fjyDFqJqtLDxXwBZ
+/SobL2ow2FjNgcptwgQUCsQDYNk/swG28ZDTLNZkHRXhes+hihsY9mb+Dy4Ym/gq
+ueWAU/XgbFjTSCjnu9nJTmt26M3WLldmOOCEb7/v5V1F4Tv0BTd6gshn7hC5wKLy
+//atnSQAU1RrhZqNuGM9TcqCQcBJQh928amHPtG8OhgsH30yEyT0PY2CkrITLzk2
+8jCiziWRVAYL32VWbCEERwm7AUnbBx868yX7Yc1mh7b3iO3/jRJP0amODVD512qm
+8NSFtBhm/vSWyj0XtNnB414u0yexs34WZdOkuNP0Z4ip/rS6tCMRsDkmb55vqOPr
+K+TCRUmpNUsBnurBjpyLcd8/XPw1CIb4eIr/SINAIcQmUz3KQ++DHVCamWDUrCCq
+NtpxLRX/t74MWG3I8DhPK/1H5jTCBvo9McVxu/db9YPVyyKT1mHRL53oWXjjsneb
+FpUXYrP04wJvnDSlPAMaWTXzKbE/zv3SJavT6BbEcjaRj5V/3VxO/6exnZvCopN4
+dDBZwXTeOKpCzGga7DcBUqtqBcysw1gXxGJ6apSQ1Zi7GpthpnKPg5s5X5PhWTa9
+lQMM1tnxvMcuPJ525AKGXgWZTv4ODC6rgiKlc3hSDuWFiWuCYHJ2OGA6J9bJNice
+HzqznmLluUU7tM8M6p7uaRvlEvRbM+q6fCqLtGkAAl9xqlwOUBjTwSuxpx7tqGfQ
+y+IAzDPL0q01jbT/pHIB3Neo5/+QKNa2FryWZxTsn7vbY5W8Ky146/ShHLoNvLX4
+pWLvOnJuACeGQC7X/Wwk9mH386B2IOkreuZ8hoNvHQ7196vIj7BJj5GhhWz/IAA7
+XGC7qVg48Wv157kZg6KtmOj+wK3/m/w7fOMCkK1ZReiTO/Nms+cUatSThtnzWtQG
+RhH0Txa+fUejmK7X1cQjNOOrI85zpxqHevSlD21Q33OeX+E9AOXjnEEF/HLqI3qp
+2qvhyIstRAFDrdiXYnPIFDBXqyLK1yHAf+oHPnr79knJSqWooe8L245JPn1j3OYy
+RrzQH2fq8m2xs/hjHfEYwzmRDI10BZu5NzebT/FiWbHPiOB3/J9nBS2tk4qTMeCd
+CItXeJj1h1VrZq3Mqai7O/65RRzsrE2E6Y9pMjEX+vpw5bsUVvRho1SqxzD3Bpbt
+lSGBeDWPEuECMFwLAVKoLqELyMKJxUDKDZEeFCZtZWEoiQM7AmPqKDb7c8uutGya
+BVjp5r5WWxpTZhM163k3OPa6Ln4YIWNdcASWiQrXQHhN66y4kAk4NvVqBjHrkDZl
+qK7dAYsC9VOD4cMbFMOtcd3w6+ig9Qq8jK2Dj9HU2ISoP4z55AmiziF24ElWImeG
+t7MNeB63BfKZRqG0m/dVzA0gXSFy4v0NjFzjqsvhn6cWAqDD0lUVcSWNYXDCLLUP
+sLv4Ax+n068cTTSaMOPWbmLp6NaUkXoI7uJEmuptEwPnjJCqDMCFnav/8fUmwUcC
+tfHtder9Cnz/HLnXeyYPiXMrZXSlpVKGsILqQNWiAdaytNXtSlmMwq5f5N5jS2MA
+sAl018msCwSDFQG7nx8XGAJDKGZL0u3VnD0Z3K4VOT5B+aq2p/R0kBXvGS5zes2N
+zPHeFpp0s6DgU2vtYDPq+tpDlA2i4EmBpTKWHd7FbOUL5cnSdnvUlMmZqs+shdAM
+xZGPUntNSm9MG4Ec0LpceOflKb3hie8CRNuzOV9zPedlUCLEm8hy3ygLiD4WJcdQ
+Gu/cFPaYCgDGUVMMxgGNJ4+iqFqwE1tTln640CAToc+SmQn5GWPQQi6b2KdKFXCB
+ibNZwMzZsvIB43+xvrw6iZsTqrout4DSqdIe4MeQRjtV5IbttjdJIg0kfrnoiB9P
+T+Lu4sDSqBT8gTzrSQ693jzW3mMjRThudDzqZjIqyfJmFL7C0Jmwl7Sm626iyn+O
+5PAiGCg3NkTA8c2RBFpbFrmxvqOfdTlDOPPcDkEZ+Xwse8yVlkkbLJzxrZLKi2lc
+Vq8bYWpnZCsXy+khbQzy+fyUfcDpuitIc5huXRoH4JvwJ8XP4XtjXBHg9Z/X12Vm
+fJy9pEpsPs6DtERgBQv/t6pgC8J05pPn7WMg2Ko5qz+tqBYfVTjp5cv3F2wmoyGv
+c8dWux5RbQoUadC7JQlG8wO2nqiyguZtJ7nWE3xAdD6ZSKby88DYuBqofvlZcSor
+/cUGdhyyBGFnGevWPOprYBIwS+oKboGw5gdkcvpW4bMijWFgt5oUNgITlACKKAxP
+IzotjWiXwbhCb7REHuP9sbZatlU8wCM1t3u1Z14PFI+rPWDXqLYXtIZxbiQoJSPz
+q0txQY59mLnHHqyDnMcmJoZca/Wc18nNYuO8G3F23l/YyJUtYKj+j7pX1sjtLZdy
+1sVWQfskf+Qnh73Mh06bXx1yW2zkPkqY1X6AZTki4V1mlxIrAPwYZrH+HM9lbg5p
+5dNTHAdKxyTB5VpL/cySGoT0kVcgFFOdftjSXYPtKJLDyVCuTSKTsnFJV55yaYc2
+kHxYEYcls7nGntJTu1n/ZXVi076i4cAbhIZysDHXnmQ1rl9mIBfC2sjAi3OlW1Ra
+nXoRk77W+YirJeDnPbgysl5P+gNw3s+rssp6CNVA9at82J9EAwUN8S6aivrj8Rv/
+vz5apR6jPew7m9otlDPTpsi5g5oUfz9FPDbCibIpQigS9cA9ePhoiD3NcIiZVaOl
+kc+E6O5Mq7R3nqH4ICpwEcaxcEUDEAbx2The7EIONIsL6KSwY6kBFACEiW/wh/Gz
+5nFGIU1zqSO+FUOG/OojCtUnDY7M77yNxJX0EFGGdSZUKi+cVlYCS34UHjGcj9RT
+/518Xb5blbB1ED7hjrsflcxpB3Rr42NvtsXPIBDv6BB5iWPGbKqNuRdsWP3y5QUh
+WvvqG4WBR/WmMsTDN83kEzKA57GE42lsZhl2QFnC85AQirjgt0SgB461/izwpcji
++EgWvudatTq0K111363xHbQFMmY626eX/L6DuwFNtCSDm+k8rAAQGLFgIzbDv+tC
+ulZ9K8KCplwpsK3Csh5KvbAWgeOASyvvXHcLbOVjgk7cWRz4eVntjfLbgNfPil+f
+leOWvdve2HmBhjYvsoHBFL8KP5emUAOKYyXGaXmtNC1TeRk1clE4ZuK6vkpXp4O+
+JN1xCQUxZMTg0nBK71SupqyetpczQvCV/2VAPg/aUh0UR7gk0rvVCqB06zv2VEVD
+FMwXsnNtG1QWjPyE0LHuR+XmuZcpPsdt2dOeAsUvl21pOTnRfaVb7O5IxbaHlIaX
+kO0COB2vdVw3KewVlknnBF1qQmdGMf8v3kXTvI1iZDYQCGMDcyx4w7WtNBclhx0X
+D2NPsrMqgK4RuR9UlIaMagHQ4tKU3RWWcUbklh2QP8yR59LiYzQwnXY+uXklTcKl
+Hd/2oUiV/SztLbRWdr4oNBVhPO6HGGgN4owT36QxbAGSdo9DkZ3Z0k8dS1WotcND
+cut5i28WSv5wu7ECGKSyHZHIbBqvpmrzkJNI8DGm2BsKrscEXoultesvlHotfsWw
+sBC7ReB67go026p60Tux3a2/Wtb3XFTUwsK82hbmdufROeK/T2xfnN3m+G3PJFxg
+31ZhLTtN24flZS02Q4PuAE9p4TNP+oloyJiVODPlkIs86l0RQklxL1SJfeJqheRF
+L9zfo+9lWd7cYajhbv/ynN2+Z1moqtMEwaXVb0eT9GKl4bhwwhfKBYbJiCp+YKgK
+cpJ6L6rdP+AbgL2UxMggjw3EQEyFwuLX1C7WdhOc1d2N84Hn3x6cDvT0ymx590kL
+YoTj7HuPPNB5BbrjSRa9NlkJ3fjDSmIHewcGOe3Vzj8UovWBDVELfP28Vf3nrmcU
+24eFEqJkbbTAKD4aUHvtznEj8E9kdHQgnudGvcBDB1HWDwwEQ/BPJsWfWK1/wt2V
+esR6F/qzd++8V8BCYySmqvSnCvjcRHUjdmpSqdMnu9EMY2OD2Auc3dubZ68NxEsH
+Gw0AJ6T3FeyiwBvOHHCbT/M2WeEfy7nXp469G1CsoenwUASuGw7i/9l0JSIZw56H
+nOQwXRA6dxHYM2DyYMs7m+R+8uS9mLgtSV4CZNrb3lCr+oL6WnCc8y85G5KCRD+g
+mYFbJZVHysiYwNUeeEq66rsVM4YoBUkh0twvePxumQ8rGlqnuBIsJaIBYkTPUaQx
+Po4z2qLKCErqCbO+PJxW35OYKF8U1ZFoW98zNmXkzCiruBVAmOP4cp6lTxPXLxbw
+/A4057d5fGSKu3f79sB3cZ0Q7Hu4H/V3SWTfsgGWLhGZDHj+dy5OJVitHbMJxOsp
+eBb+BMXsAF7F8cVIdR+uQPf96Yd+NBJs0/Ju/HTHuOY1hTGcHH2bnMawfn84OkBk
+YoW5pvQWNNojb8rKWMF5ZF1rcO4ff0t5D9q4ILnlxVNfJXfk1cC2N5a0I0avlODD
+DGtOoJb3gEQni7J1T8HdOB0wERXjafyUBBHhHnd7+jJbxSxgD3FJI03sn/jH+sOs
+QOLRcfj0Zbc30zINS1aYrtOEu8mO7gjJivAd0alOIAopHsDrwFSm65b5ycDX8KvQ
+e6UjfdunXVuaiXHaCBKVRC7NPlG5Yu3G+qBPVT5bzY1+oJtn9cjZByCP4hfurLLj
+r1/MN5FsA+x+8Fj2ClCZogx4j5LJj1pBulyvU1UBADTsx4QaDcO/CRELUtSu2Wkb
+SmoYql+empnb+8x9wIpj58kd6qOTxNNPKwPEwRMqMtowfqPiHkiTdjcARSFt8YAc
+y3TnzLGKA8jt1QZRztUBX7mk261kU41+zyQwg7CrhGgR+8h/H2Dp84rSdr7TN2YH
+O5hI0kzn48koF187vXKNntpw5N+nykCR1dSNh+oaHipCz9+WH3VKUO7GKg8/2f0n
+J8dypMf85YWaBs4il6pcJMlky/gB0dzLwx3Dun6GJ763/fMXm4uWCZTY7oNvJ8OJ
+DS1pARh5+MuJNAdMh2S9R967OGlMqci6ErLrbRJIY+zP5dOwDSsZhFOddOkd2dQq
+zCShHuAmM2N3SJuZd+BFzb9Yv7+IzVTEWvxI09djw2RLHsw2zHOzfNAzaOgSqGFt
+TobmW6CyR3/jo9EoP78XnyRFBWK/RzgPRLH6SZXOxL+a+bMWNnyNs7KRendxXBSp
+ReV4UFrE60vQFaJdKYQggYhhjUVmRBRf7ZimF9FQl8A+JRlJSe8WesjBznsOF2F0
+bXPxiBgTej1rxk4R9ajg8dipp16UYHG+gjnr1vH4Or4XUVvf9bTlCm5JzBNeACbV
+Zaqoyrcu0cXojVkReTsd1HoYh5uaCYtTuu0iJfmszAI0PnVeSD6qJE+lj4oG3yaw
+CfEsMc/JhRxzDMF2Zib7gr7nhfpQpDaKw6RTgF7gEAaTEJ8Inh0YKtmzpch6L7yp
+XUISCOWc+tl4aUddrziAh0IPwy+0YBzBYsDfnxXfPPzhooywLY5btZFYJ1b5kbjr
+i9N1lnIUVYiU+d9PD64JmArEP8KRupEl2xNb1uwGmJ8sZ8Dkx52SoMm5s+LbK8z0
+KfG8MYUv/OiFowGetEX/otIzfJH6/uqTDKOeVC3jae/LbbNrJBfUVRoRnCaDVvh8
+fnJJJL13/mkE5jAqKm/33iocXAE87gU9INENtTSbQTfVoDu6Q41BInWuTM3w2kss
+tljAJ5+4i05lfaECrzAsu2dUsVPpuRQPwfDp2GIAtcV2/HNCmVVgkeXabNmuN18o
+LetYzxSEfU8z0n52EVwGFJPzCwT2x+hT83Sz4gSDRpusgMZ8+/IW43IjtRqltWSF
+2C5l9xfb6ZenIZ9rfuf9z0aCSYao/+VDnrfAMJF46ze02ALfyi4ue4vydyCPeEiS
+/IfH8hSykKItdXyjTozwKKNkKUtiNUsnfXEp073SPDTsUb8/giiOrDRjZ02ve46f
+J8jKpWBlH3dJ1jf3D44RIWxHYYoM1P9C4PyGpGr1JrhlyfHyuAn+LYG64+y8Em3F
+uigO9SOvUdrjZuFppDsw1kzybzMXTUs4UiKMYbYoCwdcva/sX8x12kXoNAFuQ6/t
+jyit38hSzXg89kmbzIf8AQAfZiuDZgvqoamkbG3LB2mQYUF53zQI6d/aTieZyhIH
+DGhTwEcTNtYs84Ax5OJpZI0wGcLezToIwX1JQdqCGEtKmGQcDw3Revzx1QkdNO8q
+NnEdwNOxd5/IMF470F9cVP7I4ojFqI0m1nqoNN4R0XcPRH6H7ia4j8uu12azJ1FS
+eMq92p3vUErLj3CrmmM8dUko/a5xTJfc4IWBDX14wxOry0xK8F8usukKGLAunEqT
+EvkHplIcffdy227//UXyJijz/HXnW3p7OxClOeY1TFfvaUPhHQ2sI0SFDYvoS/rJ
+2qlO4CiFlwA0FsDa/0UoatnudjmGPPV7ZuBUxSlmr6eTqz7EPmEpT2oZQe0/dgcf
+K5mUUIthUMT2abuvEl/hvHLvWAsA9Dvxe26P0QfNe24KLcrP3bnKdH4M7K7dlkSs
+DXwUXtqmSZz8d/JXV7ZNvBC3GCxo0bWqlOJthmhhlIw1JBldHqghWrV28bShcucu
+eHbD66hlgYUTuSgynFcq8BI5JlDcTR1FwYUJH4sp747X2EfiRFhYqdcD5GM2WXf5
+P0rWNSPDoBEf17svHSn06dwQHWVPPn/YPSPM3lZi2vU1glBOnvMDAnFt+3E6KRlq
+sbBcvGLW19Q5iehZPNQ5KSqBkTA9GJo7qopgDfuuJGIH3flnRJXtgALnPJuOUEnd
+4KCKB/+lFDbFT9yhDgHhBgqS+f11st98TuHfwsC6m7gWtq9Im/sWUpmrlYBgMM7B
+DsFoEeTsX1Zgt3bFSvyHPE1ZXFXQzuaPWnKrxu7im+o6GBJPNjrpy1l7JP+nXWcA
+s47cVY8d9N/NH5uGLhKXdjKrTNnfNtAqkemr2Hlb4XgagKgUEYbgn07p02jBWv+r
+ZYb0j9TqGkj+x6F2FXDGQ/eLCUTF+RRSSP0p/Sa+EmZQ9EVwkcotT2Peqf8KeDJP
+L5QNCIRfgUDR7Yc5xO7K5LZ2folqtXMmbTE7pShlo8ohvrcxF1WQbpLXR8eDUh9l
+ayKUXEuPoGuk+OV4Fr4Dzve+J6iqtJSGTsnAuGWAPDoAux4rVUKxGyPtY6InJOQU
+jjZZWEJyAbgjxD7mRQXFJrxm0s1KS6D9qL5+I6RmB8i3MDZT/ZvBOcVnbpQO/V6H
+iTgISdBEpfjckaj8OmlCTfdMdqm9U/DJj2jv4NO210laAL3XDrLwsX5gLL9yJCiC
+PL98gFptmRyXL+5JNzdfuZMA9a6CqRrBGLwFr1u5o52QAycaTWlP/TDjZzpj757E
+/tZZAyp9FBOevUa8NrXqEOWCh64m2lRF7ptjdsG9spyjWuLfV77XTlm6Om70Yy0K
+K7hSK40HkmFzp9VCoNfDf3o4yjEabpzWFfdsf32yLfytW9F6d2PP01gto2vlUt+e
+yC2ALn0x0ThzDcj/3550nHc7KJIRTdtstUJ13ZNW6fd/U9SWBmK5hbBmypdCx7Ek
+gOgl0sG8NSqb33m0WDDqSkuzKqVqy0Es1OOSvUnsLy88tGG2Sih2Db3WyTKGKTZo
+QbZcoKdU8tcsUKYoT9+0woQrh9HzoTEIWukMXUKgQA4R2aKG3aU2h9SYZ4qyL5WR
+pDBIqu4umR1F2hCivMjsCm08sgetf6vQxg3r/hgtlXU2axqhxxE3ArtZAeLn9i9I
+L5xFj/ZwNglo66EWhMuw9lbwctrpZ5QmRsmYaLarQD/Fa6mBqf10jt0KdEJGZ9jA
+jGpXRkwyOtEEkVs86jC8dydnb9XjpMR/3JJql/6inzL89kjGC0V7wrHgBVjHJTdH
+p+OptRZOV4bAi7sCM/7H6BX1ajuMXA43LmUCZ3Ggj/RPSSVVPhsoqf74YZ8emUkG
+/Rges3Y2L6WcriNThH3RPUL83BJk7c5+ZdqWmcpX1D2y4aOX5L4rhUFmDA4g9UBx
++RR90eP+otPp+ijIsoXp196bnJLmcKDGFsgR+EnaJpIH6Kt3P8KflYM2ioJQu90J
+CyE96O4DyjBDdqwivRNFiWoI6vQCfArDs+rh4U3BPcPyrLMpZBJ1z5jhNqJzpiOc
+e8Y42U2hyE/hFdbkCuRI/W9BIq/JsTti0PNEY1vx44f0tXrrFVHK5s7jUnjEeaci
+1Njv7t7NJITXDSuKTFtRkfby8E+THqRSZRwzd1DM/8Mf1jFbCzP90Wdt5elR83HG
+mRejIC0gzyMMxXDlsFLAPFhR0QhFKOPWFXLUQeW26wK2xzRE2f0GcBbFY/gDaAf4
+jUzGMLUOay/5DM/+kcmtieKxlcQTK4k1/eqF+yMFr+84FRbFD211PPGkmw1SItGy
+eYgrgFDjNnqKdaCnRd2GeHh9t/o9vDnIVmMToyveyvMH3k7D/q7/1B6mKvETyBD1
+U61QxUpZAoLNkI26l7LudGCw+TtKe5biAQ2+RFZV5iAg5vvp6VwuV9jYe6a5ETPB
+7I58XUMD1TcaGbArn7dQG/BFa5iuJvzcLUZ+WmJVAW1GMWWKJ5PasRUB/nDzKBF0
+hrQyR+RIJRg+WCCKThjyUJhGufOa/m5LkPzgQZSIQTOgL+Nc/1t+Z6drgFW5T+XR
+otQM8uSiVAMbMQdvrQnOSYV6sYKl4fExl7gdPH8o6hHkMzUOB5+SU/g73ky3yWD/
+TB8wAsfGLqJxMpM7T7fu4uswBYaLF/sJsow19O5i6qaAN90MbqHtj2gD2KD2rh3q
+JYLl9y9+FkA3fcQ7gwtbTdD6DfV+X7q6JCB5LBVqnH7c/Ga9BfjpPtRJ6LUlvEIi
+chl9N0fLXuBSh7HQ03eXhEMoexdTa6vwQgG6OjX2agSaX7V1xsGT0Brv7N88qeOA
+544xO7DUjOdDfirTiwyMJxVmThmqOHk2tgDVTXLG9bSLytRp4il4jCOpqQTrF9i2
+Pg44U0/xtNS/27ehr+BW1yc+o4lWQjkAN+0vuTyMOBxjzWcPYgN9R0luPIkzj24s
+UU2wA0D1k2q/22rBaM6iBKXih2PDpt+8AkHvXdIKghQKb9/36HnIUlcmupaO6Ozg
+Pp2sHRNkeP2zKSGlxYoAc84fqVThuvp8wCJlsiBejsSjB6cQ7a9wmK8tM3K+7ZuW
+Yu8nRQCErgCW2DlmHpAvzn96VTvaoi4lM3nuF8Z8Xtoke75efNgUaDiWzzOvkX+n
+1CQEFwDVvME12kqqfT6M1uRTFNmKhrfuaBiLT8mIlajeK2H5sl39nkb0ZTCWw2Hv
+lRxZW2GY6lLdUDoyEjdJkoGW7kvBjzSva8XIdnK6NnpCL8GiDrlfwWyHPOwcBunA
+RH0YKnCpxPmTS7vDZwxem4sPWmObMhHwcimbwfxSnSZoHzoihEs/El9N4IaeSvWn
+nrHWifi2dTTF2aQb9CtxtD1Kk+xiDIw13+XZAwyDj1ky1Xgreid6r4gLwvsaukts
+CEh7HcgiaCiSxK/7UwK3AmDhhnM/qvG+jjmiiBUYDZn3Vskt3U9mdppHkC6jo1VF
+oUPEiSfOesm8GGs5R5JK4yYq2Tg9elMMMm3W+iS/ApDszf6nbKTvtiR/2m7tyjwc
+/b65HnratRNUK1y98iKm1z+Mky9YUD1HoAFhoxXzR8Jo/YrP1pHIrOA+07eF5LCj
+lhAczT7EO1Z4OqqcUFPuONspV21NMqO/DrBen6G4xTkIUP0PnDbt6l10L2b9NUHZ
+s0eOJ6DNH3Yqi2pl5bEW24eoMrVipvTvBH3s1vEWFxE9CtL8TFZEuZH7e4OraFU6
+YowJMBiTCPFvreYKno2C7uNVL2EztEy0UhLoUtL5RTDXYRl6dNlJN0vU4OVbFlEP
+qPMc60U2EHT1M6E3o+gItJa0IgP2XrL1ThHjuyc1oVmhNlItVfGoo4XzZ4tGrVmm
+BGtRUG68PK1ZyUBcTMF+BF836Cscxcxbdos9v7HkuqOle9L0n+KQwumVJGxcKFc7
+TPJAdppx10IqZ0eiDAXfMTxjuLTFG/kLPFF1OX6C1evfF8dzFYczSfm3k92nPjKJ
+ou1touPEwcL035ZhsXBeYNg2G8kOnpkDY6p0DOEfqsxeMgmSvnMiw7klB63w62I0
+DH4F0TxMRh8dzQ6IJCDtcLhXYyItA+sLHJ0nedGNXOOknMX6XgajI4ZZT/P0DeqV
+mFYszNw2meM746YZZRP2V2IKSnj/ViNnHfGHzdyk3uugmeLxHGh/+H4jWDrVAeac
+k39XsHRoSMEwY0h5DNRaAXOBMt2tGFLmiFPxMLPIfKGgpAol2JLoK+jaDhYdjnzB
+XTd9xYi8mSJq/L0/WVaX/WP77/Q51c4wNteuZ1C9A+f9y5FFWsgF9guazeg6ds2L
+bMFS63yosdQ6o6swrB2Vel3yEV1M/5/6nNA+g8g7f0EIIj8A4/l9328aC7mEncn/
+4PyhwNEdMi1Cs7r9Olwi0Mq8oazMde4d7U2woODrpZZBZfZJoTBxF7mFzru6r08z
+yqLrjxtHV32zhsndDTR7CYcFF4GYMRjzspDfgn5IQQeOUgzbcEBgBOW8/QV83tT4
+bm7Nme5PF3308wznnKn41R+3yHWWxoYUSdxnF1ASo6ORPTt+FUhmSaOGJYTMYuaM
+fXrunvJsnrExfnbmTWG7+QuiXevfrg97qQN4kQmvNT4d7qLuv3/dw6UFgNpLTz85
+5EH/eIcWl0vtTw2r82KNw6/BZcZhl+l7lZCaeH6XIUD3N5TJ1mqrqv1++SN2WFJ+
+BFhQewh/rlKGfhVjdXz2Y92+cyRYKdkvfyOqRt/6dK8vxkJ96MztUj3rfSDEbW8q
+fiQ9CF99B17bDgTmoaqNZwkTdhKDZgUdKUsiWLPqbRpSdKBkpksrKEgdp3AgzmQI
+UF5nTHS1syXWwzmfTzrHPxdlARytcHrAbfMMrU157HeWxtyY9T/nWKrqBqxJKCjM
+2xuhWl9J/GU0q5WeudObnasFjPVK536WysCXNKdb132r8yJlksykj1hMiw8lA8vd
+MzgsxVWjBV5sXCuNP81nhs1btLMzqscgVKA8bdlNnjPfHkql5PZa8GNykGkuTa6T
+cCouINFIayghU9Krng885yux04QYwRN4Wo6zvqsHKsDZDpr0gc+dC/ShZ973+bWZ
+f6LD+mTXYT7shqF/ujqGPCcHJm6+xTrXtr8cvTID+S9cj2qep38tUAQBHrcnJfKO
+LZfbSgzLxrAUtwHhOkcanqN0fdx3N3vTGDcjHQAo9Rr67NFtUhHhdYFY3kuU8mKy
+iLHLV/LQTXpzbSdgjP6ay7btTdYIdDEmKByRJjPyEdrgx/8g09q4iGaAyJhzaYG5
+p/b4eS+LHz5UvRNtFQRwbz6QNgGmHHr50ortZ5N2L7oGqJRlek694rdmTFqxNcAI
+dCKZi3EEVx7ajC4cv30vOOMSUa5lPOtVPCM1McC0cE7gTxweknOKs3dziWe+KQ2M
+n095C+bBC1mqhIlIM7dsuNwjl70xB9RCAh0+EbF4zyKpKOENwRmHRWntJWJrVs6T
+tdBY5+rF7esU/zIDGdYBciE9gEbLJHCDdOGMzqBMd0104FCPkJqZRQErjheQTWan
+4S7SteNYx/flI0XMiTb8AacgL/8ErdNHiotSSb99GBlZH4VgpK1g0PaMWDuZ9nKL
+BCuVHDW/vEiAplb7XqqbuagG3lWAVvotVsOu+ijGPAcMLabf6qXCSFN9CoBlc1q1
+2ASAxztbLXJnrC6bDzu70NAOfe1/c9/DVUiiPH8vk8UTnukiW5qvI40j2DrqR/U4
+GmWeAFYlbxkIdfA8iuUrTcZrpDLHU8LlEkK8UrcuT1HuXZ2JB7SM7Rx0sEoUKqUa
+uuLs/32reuSeDtRojABgAdtZU/AKU3yvscgZjNe01RB/SMLbbR0ElZlZmMbPzPfX
+LKToPGIvbyDVyBGmj43KUa9xK+JptPEm0rowXFG8A/togYvgWRntWNSdBuszqUqP
+0PEX2tvAZ7HpgwnWRaXsalRcbGDSJN1atmcqvffAWY5eXxqywNe4AaY3xeEEgKk3
+MhTP6LnWa/4cbz4JfcHwc8/WPtrJSO7nc9JJEjT7jgh2tyQt/9kGQ2vehp5kssMK
+x2yAEFKw8J9v3Xoba/hyAAsP/tn1GlY8Zi/QokNy5vnTGzS1FF7kQOKNMqxQMfwX
+PbFtSJPsY/pjXqwSwxBdtiklZoAudMNiqlzRde17LozUh9TQ9zlhDMyV0zET7yEu
+6fbCwkNJYUOZHZGPW+P42KfagQ2SdTcYwDT55y4JfLm+kWV4R8JKh1AItxShWjb1
+8NM/FOVE3G0FISq37cakKFI4twmN48Q2MKgWLEUnToe29f5JUk4ROcmUAvmCiEW2
+gBmRqVmyulK2SGefzofYuPly0A3KJanfe8RlmAoHYjINBL96xLfutO7YehNDM0Rp
+W23iRk6ljZg73TTKdEa2qUtIsddCX3Mb+hE75KXGzRqpYFJlHHRq8dL66b5ghn2I
+V3GgINyYYOfBSYDyCuYH+lLKiwCEzHK4BKpKvFcA1z7klY1pSU51E4y3Frjwej4q
+wGFTpEnMrSbX+pLSiR3Ho2USwV8o6uWcG2XPQMyHQ+/qRjSn+3maO9AI4Voq+TpQ
+qdGkzO3M09hrh/n9R48KxG40FaGotjD0PDe0FTsB6fRMYvG1yLEWdnbBdrh2b9N6
+ji4bAwpxaVdu9x3FhaHdo7KVnq8FMyMbco4WAhNtmEjcHX3dCQ6lZqjHvmtdZhRv
+kCbbY8agbE54PT2U+0Kx8ogbTBAUmLtnwLZ3kX2ul89RUKtnwL+CnUQX1cHYUtIo
+0kGCTPwWowD0YkxO1Mh0vLtaKapMxHZqStqhcpxZa8tFlkfiq2CZrKN8upnA8D+/
+Wg/LWD+TfnkTpypivqSC8tWvIN+fBH31wJo=
+=61KG
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptFileToString.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,18 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB
+oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc
+OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+
+K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ
+LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37
+WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv
+lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd
+hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO
+iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6
+UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg
+k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd
+ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq
+JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU=
+=sjPP
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFile.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,297 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgA5HXlbDH69omsR65k0yozXcNVvjCrFRjgSwa3YSUCabQF
+c3gd0yqcpbbW6f30GnsIREPakIn6Wy5wVY27RMR1ubbJBHq2U0/fg18ElZmCNLH+
+FHEW3zgzHS8XMYvNBCvfJ8ajZ4prXb9Vq8OzoeQWEetH9iK035bJir4f4f+Cgu8n
+U+SsjcE7G39pt17cXEEBIviS502vMS9jY7Y4FlmpfXkldHUUS4MSmA7vzyV8oMxI
+3rYkTod3em1AwEUdwqhDykavbQR/wfaEOoSLlA2k1d03w/fdzQ4MuLntwjXKyLNv
+ADpez609pOQtpy7GdQ+YkqjhzAUM9cj5C2KfTsnG4Af9Hkfej1OnikHeGyjy0Z1w
+m7Gwt4UF26HNeWoBgnoBia4DS8g7tg0vTtwhTnziXLtPUr/u9ySgfECRmzeedr16
+Of4Yi2Es8v9cVdOcGFnkOTXw5H90nixP/SnTov0kNdOCuPUOr1gFJKm+6EzoreUd
+LYH2cpafmlvPk4ULEirGy0JXdd0tN/B4o+m1Q9gCUJHRZz+WrmCkE0UW2P+6pIYY
+vLlxhBsfB+Nuos00FtehWV8aUPVhr8GOaBNSGA/PCHrWgZwqWZ2knHPUBhBVPCNL
+x+sbdDwfrs/2MGHG+C3JGB+9yFUPhIt4CXMDF6FQgg6D3VlDy/fLcY8baflGEmGw
+YdLtAevrSS9vblaT50CGJuZ1oIXKLisr8vJ+HoFsVuKx2MEoKM6r+YRpp4ASqqgS
+EJfCQj5iDBt3/MjwblLcTdwO+sLe96T1S5zLkVgeYp9G0X8cejMv6E8ZxDnr4abf
+nYC/punam+MVEd6H7z0KVu2U1+pzzLObTt5d/GtJo5gZUxLF6Kt62vZt2t8k2AAD
+KQC0H6EpzeqktZedOSyk+ECxeA+YwPykFo7fbqzf+1g605/BX1EmxOfIIbj27dJy
+vRwqvepjXHLGnBRDYka7eZOqkZWdAD3jI5EZUQirWJ87gvNMrtaQnI+v2qd6dzp9
+9kz+JZFAdPBi+mbXpyLnpBtIvuvvUF+CgvZ/Zzq2gjgr+7SBSVEMS4LNi+mBrTVR
+B0BUdiaBnGE+grMA0DMZKKwDI93SbtlZ9/GmGoudK/ERejU+gmXhTf9oMX2pgMBN
+jRmUiktzFdAT4V/iy76IAuyZ+4EIvtXM5fs06eTflbWSQSM/DYf5+WVM0+I1cEjM
+kyg8jvBPtWE/PXbeUKlfjqityB8k/k9P8rJqhBvHP1M9zF7l3U2PC8EApyHtLEiw
+hYLVifQgi+JX9olIlOVa4Mei+d1rSU98muZKMK7srIgUUC2GTdJ5lKBfxW9PQcKP
+FofdVj1+6nOis3uN6eZCrZHO1NifP8+ssMa2Jdn8Dr/S/1C7ezWceTAzDpzxkK8I
+68KCXw18j9lCpmkvMc3Gwm0800g1661PYFgszGnnZUinByptZk+4rSXC8bGQusVC
+ApUzaF1fc+E5/8kTtdjJ5ftCCmtuGyzmtVwQMjh8EPKwZcz1Ud7UD5Nq4grNvVj9
+4OB5+KbeA6cykHpF90LKVf1nXvMCHW9c3dhiZY+rOTcwAPwh2ckeRJhB1O6e+qUq
+6JgxVczDWeROa7o3YgsKBVKZBOlflfEZ0YvduYbGD9zqu89y9rn/wBDvWP7WYtHI
+wULYfwdG6Ggt3Ozg4oz3Sn7r+kMR3i2RGNcKptHtJHFXFDFdf68L2lw4+PFMMYyv
+KEZonP9OUR4WE6wQ/YtDJJ6ciWsG40C/qZ1ill7t+QzkJxL7GZ+pAQQ2NIqjlZMM
+KjqvdMYe0GYETPe2A+8jizFD1GKu8k1ekQFQp7iU6DelFpWRuVtcIVs8Ke4TrC47
+QgJyP54WWXqlbdmWjKiVW5OW+7x5rdYpXh5JgFaJ565mYcO0x4jvJUMRLNwhSRB+
++n/U42dydU+foRwJJCwRctUdk7NV2fx6ewZKdKj96wrqOyeuvuNGHluq7eHZqmYD
+Yi0wO4QvDVijRgdyoOSlAlHL4b6id/eK56+hqx2APdopLKptl3MF0y6LCfLVb9gl
+MWdbzF8fO0pFsOQXI1eM310TJhWT/q0x1eKwLWD4AwwfZFNsvYTSkMxCYRn8DqOQ
+0/FyXSbBho7Kbt3l/duBi03ElVU4NbA13u7mz+3rlgXHoGvzd6t0wFZDTzZTsCjO
+MdSMiZdaxZHICdqtj80sBf12wxR9czJ+tFPhiTCcIcM6JkogItg3fsXf9y1GZO++
+pWq4CA7YnJOlaCSFYjYUSTTvheGGaLs9QvexnHFa73X/KxHr9OxPwnTmZMr+dsVs
+VUCVand/xwJZ+1TRs/aK2olOAPI2A+BEKElM1fslNUQfumqq0oe1LNXoy6Zln2IE
++8b1GmkRjo0PaZ45mgu6q0UO6a522CX/4eVlN2iDXZatpnXV2wZ1A2N6YwLb5Uuj
+2iEH47CSzDS33k1G4nIrXRBsk2kSm0SCSs6/NFn2Ku6ECFNJf+pzgh1qkJ+vL5AS
+48cUAVdOM07D3DQwx+DYAA/sUbzKljp6Ho+S8j3SDghH+5z0gavJPFB97bp40gHk
+LL0aU5kuEwOQ1me60WeBEfr1pTT5WA+MNMI6dGpESdwof1qX35V937ROrb/lhVF/
+azd4SYFV5/xMiMA/dOLfjx4Q1YuP1jEbDGU+n7/rQ2sjgPSmi0gdaCALuZOVlyYg
+BZmT0m/gAY3qXFR4P9CO/BmSuZtDOFWn6dBurlmKvpEuRaweqZrWOTTCm0x6y482
+TCLYra3tTeIFotS4yZc11b4b0RBA075dhaTrdNvEtbn9062rah7PoSo//0wxXZsm
+lNyN9zs6Mr9KGw7dLQ5bNkGdJ/OA4G+VCOJqvQI1RTOSF8E//ZeS1YUH2uy6bVj/
+vcwiHy8qEi01CNSt+3ayrcCNEILbB/+y2P0BqOvZbHYXnLCOTyG3JBn2s09KJ83S
+4tPv6vUR6GCcWdU5XHJInEmO2RdnuUqp++T9f9tkMQ8mNe+gMs+SsVa/oYNh0353
+ForY58hG7b8l2SW1M9UvoM7VBmrVrBPyT+08Rq43BKh3uXetiTVQbbLeOTqKD/OC
+ZZ5LA5L3aUZNkT5yZkKliFQKWO7WqqoQc5JLzJFXSxuVpTY1kx5yM/4DLxH4Vkk6
+D8c43TXushpZYDLs+ytKOImewm/8NE84kVdlQYsKnUJWR/kxqf+WTnD3kxTA1bAe
+s4+Hg/KjwgtL4JLqL2uOAygbm6XUVuZhSzlpdTbVjaVl49TYXCX3lQHvFelKeBKI
+9gNoyylATkf2UFQ3bbE+dxValSpcRZGvakw7IjN4sHvPrtfKsi0CffSVdL2uIDc+
+KhMrKDY6jiKDxLeGFl3Ur3CxjidU0bg2kMRbDXoS6EErzw4Hz3o/xNDKF3Veq0nx
+sng+EU2+FwiTnuYSmR7r9Td967iWodi7tQPWLgmG5FnhvKJ0uKJ3gTMZcg+kFO3X
+5Lig27P/2PbVssvBsA8K2VCymApTceDFTbenVroZzIUSDn0M+6hYvl6CdSCrqjw2
+a1DvMFMWvmeGHJq/B945quQWicft4F7vkanAjUnwwVQb1Xn6STsfYfBuLwXjV9gi
+9gaimIkv8URSA6ezCroBJwwgaIscP82k4obgy34mZrTj4WAdCb2KSAEt2vBMXPZD
+vmAT3x3ikWNdQSlBlu2+/EKndoAFeqJGmIp74tFDvoFBvW0wu5OWbwiq8ohPFV2W
+veyPWJz9xlQ71+aqs/tCDJ4DLE2r2kapO+T4j4e6zvQdY/TBA8yfQZF7e3VLFz8u
+5EwZsYlIspjt96SAzvORplHj9ct8r/iewvnAfMbt3zfJXNmFnp8rQHJIFnqpHUYE
+ZlWNZoLiuJs4f1DYBe5kbnUJr2jGZoST6YBMEFAxAKe5YTXkjlRrT+chqLvg/qfa
+0OpnBIO8rfhyb+6BnFBJdjW1RjJ82FtgoV8Sv019OelMlZsfIldlqU4X0MAmftc5
+hLnjXjd4gp33uvoVvqLDM5vXsg7TDMYzv+YRCpMe2RShWm1c99cW5T9CXNi/xMIx
+BDrQoC67UfCo9/eAHDVpIGQ4E1Z618ZjEy3YFkob9poSzdRI/FiWbi5DBI52JIfG
+jVrkahcUGhJh4iAYpeyRVwMxACrk/t4V2ynTSHKVAwgR3UfdZBCGIdPgKcQosbou
+HHpY6uLZqnI5pBWzUluQ0XU4Nm0/JPM+3R469VVpXRfvi2pWa+9PXjTyfSGddidk
+zJtXQzRe4nrJwpe4qJf49mzDB0yikeKYJdiDSg9HTi53Oz4suFQc82PvMuQVVIna
+hmTbeQo1JnmIkdmqobb+mB95MiwQaDUxIeSCz5THhYs6w5sv9OxCWVVf3fAFE0YW
+Oa43ikKe49kChe96ZgkGuPKTGw16qClRc6ztaxJox0io5zZZ1MEAMgDYnzVcOIfo
+yZE5G8PNndF34swaxhS67YRk7dWtzt09tnpcXWbh/DK3kgQ1gqEIqf5+zS8kRYxB
+/juxkkwFiTzemMCFouYE0Ha0ZVbX26IzGUnQDqPl3/Yo1GfJj6bdi+Z8F1NwF+1m
+kD8w5REFzbw3uyDFrCMvuYEGrTMwZVUsPNPU8i2J/wBYzUc6AjWuBGTKEuIUmdW0
+3yQZdJD6B3ukHd0XajXVpKoXD7VNF9WZIAURh+CymiVMjSfLaUPtt98DPCHrZAZB
+hm1E2oGQjSN8FqgWzC1uX1t3l4EdNjJaUvczmvIffqCpPvxIDZhrGZSOp+kKANRM
+cJCspQiLdZlaL6/c+0EfX+4jKAPwgCOiO43sTYG6NbLO07Q7CvMa1nXr6TkNMiK3
+1eCnmhXVUDXE/0Y/sS95vdLxKRUAeJCRyK996psidA3ynn/uARcdWOdmfdSddZrQ
+fjUHotqhisjqEURQZ3hPAoJPGYvkrMqg1rmIBsrD4dHWr1bhJ1niDe39YxbgOYeN
+4B5R1BHs3avWkiD6jSX6eGfmdw5kbvlnV1wTlvYCxMNqBTrEojP4Rp/+wJ1l1ndj
+Do8i4YIzk6N+AF0SkD2W0EgXvRv1BIQWu0+7uhgojdnDaOTZfOKmK/e2XoLgHqrf
+NLZc8TVbXdCKxpLfZpAUybB98WwyTIlchTc4AaX8UpPbJzcAiOK2u1/Cedc1vChO
+rcBomd6cGwHBYFf2D4zy3rQ7gMd3J80ul3LZN8Ld/ou+td+tBw4mEf+n8mMzm638
+ebR1J/j8ZIpOJ1rXbD56651QCOH+MKRTN5OxE/4Hu3789+CJ02QdAXBokKKtZyH5
+KkCqeVpul2MixLMLu1777LC/h+c0bZ6awPCIPidstMgtNQIwci7FZSHAgeFdf2fE
+dFow68w0kGVMT4/IAkgLBBK5L23zax8oQK3G4V+YGG24+IettgLwJPFcZ6eHh6Zm
+ofk/+PGrDJpN830GEpXD7Y6qoWC0ETche9p5HiAihZyHVS0PXWIVRmNwUx55Ok+Y
+XrqpW+Ah92PjTm0i93aNV5mbZP40emYo/91ire/s9g2/XtHl0/x01er9Y4UKjO5a
+tT54ylNfmDvlnmK0fazXyjxkwFOOuOPwnGKcUc7lmGZu8dgtSdtRxxbU+LK+gq1U
+ohRJAk1WEoy+Bz33DW2FQOSrbFrROvK12nxIkD3fAlE+mmX0V34oUIHu34jyB70u
+3IaI4TNN+4JD2JvCkFR1Ruto6OZuGstOwFDBOAvYf6yBDIWQ+i9uidpzQkleNJFS
+gFj65BgZzuDJ6htn6E6QilqSQyW2zLcWfqgdNoInYWrgOOmrnoGVoNOEjkjdbUfe
+2T415BzKk1beqTQn5T9Jmzn7VWwraQwKoqYE5vcs535cYnw2mp1qVOckOi08FZaV
+5ZZGXgrW9XSYFMFIKQ9JZt+i2XUJh/YUq8tYK0b73qX0ZWDgdFRBmdsBayBl2KiV
+KOBlxXxG34ajQ0f6X0O7ZdsPDt7Q21Asp0WOMflEwebeHFmNr9rSl3RBj6lRk5yI
+hbDdRG6lqi31NPCcBZ0VpljRWfvWvrhh8v5oCF2/35Lnb0joB5d1g27Xd3Fx2Smd
+zWpcXQ0Rgjh/OIy/BbzQ6vMlfmAw2gL2bPjO1SC7DyvVIPJr/xCWbTfI0ASzBdUH
+0ss5Da1QGTbc8DjdSJZQ0yqisbOoO5PVf+Tu+dUKiGQ36Ae6W9C1OeG+qfU/Sa+j
+L8q/5KNhuv2bm3Ek6qaI5OE+SlcE80uatSg3U6VcYfdER1HbQ2odyakmAD2SisQU
+fgzmVeytHuFVJFPQb4rHMDXbxb8TkLe1snD/KzQ5cVxvu8LJSVy//mbFR/69JyWd
+cOPpDUIdElc+5TCHhkIyiYlh4pbbaRP9WwWOeD7/UyJFZMffdhhKMIprba8bpGwp
+1BK/35CnW2srKcOInfl4kOk5+/EEYkMnFBbHkbLkbXOThev8yi/8friMRVLAkbfH
+O2u4V7kn1Nb/fTFJPWRMvQlaXuxVC1ZB2/px/hGEc1gEgy3LFDnZVASqvJf9JuzN
+dqWpxrOgUn2drd3u7ak8qNYgnPLRpuM6i+506HUfIHtzJaXiwDxoB+2IdVZ2P0ya
+1jt8TFDAR4fcw92yY9J8SlFtr56rWp4Azj6mI751zqsNuq07kLmR1mQrWGIVMVWe
+aALexIAIbhKmLysRDXU63Xc4uvOWJve7eq6jzHQzBDh9n8XD90IbaYdapVEHjGHg
+1dSvS7+8Nogb0oWAEcswip9EI/0eHvfnsAENvFxL393EcCtt1Z0zdHp6U4aDg5eL
+F9DlmY9vEdAJUo77SKc7aaY+MycNvIPPJ1DQ0iysp6pPP5N0FnbMN443l+AW8A2f
+SKDBO8X/Nn7N5iTghLeuJRy2W4Pwf8xrxKz7nNi3oq3tyoxo2FOXPNtw6u2Tol7y
+vTvuIFelTcimKp58p36+NLk3FfXoertys73jQfVWTm/L9ik78xK7kBpjIIqqdWbA
+vS/snFp7sn9mI/p+NizqeLep652SHDUlxPbFVbpIN/h8c1OWybo/aG4bfQris9HU
+mS/8JQ9IBlhJlK8OKiNh5hszvUNeOgCNTDRVd8WVl6zKOYElaDPr0o6Zc0iKWbBt
+d+LP4uxlwiLkU4HGQuNQ9kOXwqgcZGuE8gRDRm/KSb5Uz5ITPno1WCGgTQuRjG+t
+Zk6qUtH+5aGkB1q2CNZ9ueqs+1y9mwgfjjO9opa0FTICCWHygaH1DF4uTmR0I5Mb
+vewD2EbqAGkq+nA2odRjOEQkIdKZ7vlQrIQs72xbbOyk0mrUvSnW6lXEfV5k79YQ
+aKoNynWl2otDJP/DV75jgDADz7aK1rXCHnHFbY0t5PplOefhnWNjD6DO8lt0W8wU
+sLikSZmouDNyI08pv4S2LlIhglQmh/9hP1I3NO9vryqBR5tfPDcYlB6E0zd+CIIM
+v8N/uluTyscJFVoiZ9PPp9+uNobFHzzwf15MqneFESjEYLF6+//paFlJirZZwz1D
+uTxPQiHe4wg6oq+wS7y7EFwtISKI6pEk9FNI+zWUZedM8IsrxzRd22XmJZxsjl/T
+fL6Y5DbLWa6/6xCN8dEj2EhqCcYlSV9komsIQ3OBut0yCqAyk4Bt+4kcFtnZd50l
+J3fqrZbq6vgagf7et4+XEvHlL5I2FrX1kTl6yTmzvXDMo/e+wOa2bws3Ox8+fqc/
+FaJnjhaIWktD1QnvNpAO52/f3JFZopSXKbo+pJP22+fmyG8lJ8yrLubCEmhJ5RfB
+9hK8ZbfK3PCX+Vy/8NHA1PqLSzEPMUNk0BpYBOVkXh0rwG7IQh1sHebdSM0OD+F5
+7AwNiNBvdP049Mmb+JVpf4knkXP0FmTPBYO8i13nsij8dM9Szown+00NLFESRoU3
+d7QZ28ruEhyJBGBGr/iWXFrYjhBZpsj7isNQbgPZxEeCR7FcH7wEPL5qqcW+BTEC
+R2Qtkaj+ir1jGEHCngMt3a9zF3N8XbV8PEYnDjHzqpaW8q7BqClwIVpFjGp/igrk
+xsMzHURiIHVXQaI0Spxl0xGu51/FLKSuagurx1NVtpO5MjuVzUDREt4qzKtKZT3y
+j1gSRsoQ38iLC1l8J83lFrUujDVvHpnpQ+Gw50lfq7eT1xuwcZt4ffzZDJJUBkrw
+p0KTl2zqBE1ZjarOoqRwiC13a3Sl8o0HQVpyF/pGR1mDYYNmseJyCEuNCXmNecBD
+4bFtr1/CTcT7mOUQabcmHcdTyAclZxXaOY91vCr10SbagyrnQ9efB3i2lo6m5q6D
+x7X9JroniuSOg9W7GCPJjWDL9UfqrARqKFIpD4jOstlcXGaowxcMv23xz3pN5iOJ
+HTyoczFvF7Ww6JIiQc6PGkqa0r9XGnWY28LprtkOChmPvYL0RByl1iSKFEcX5clR
+cKnVXzs6+1o6IfqtnvrtxW8YrlZVqSL+VhGZQ/5S+xXW2wFZQULnWR3VsikNqChc
+IASsY9xz0R1IRHD48rLal9LOasWg2PWyYpt0LEB1VFi/NcpMfFFBXcP+j9UX+f1q
+I49NqQ0W1AcYLKAV6xLiC5qD37MJEnL/7FedaIiWDkq6ocnHWJQ2fnuVbmL+PQEh
+7HhCM25kTC95VTsJdpK401FDiBCYCVuMpHWnZ+xVoR6sdqGd10yuGkSQ5om+J5Wx
+bmlwJhF/ZZZrKzDKLS9Yt2HQTkD25PRnnONXoU4RjIs9eYsbdpZTXsVmAeNnKrn4
+naMcX1YehUyuo7m0iXroMzhm4YlA0XeuKYAUqJ9tC+VBS3UmYYnQzX05Ql7Jjg19
+aK5RNSeulkrTDSJ4uHqb86wHP4Y9H3FNdi+7rqvyAAo46oZMWpmHW4NaKmau9XLy
+qlDGYzHq13j/hdahKVw81xGipzylHfGvy/UKOjwGZDXE1wAfmQjEtqwps9kQ9Lpt
+qGsfZGokz9pmULrVCBv9E6escbNGQTHOXV36bv5gwq8PK/pPWTeXEDxa1Mg4cN6c
+HDszkBRc89/jSwSYww/tO5pt4CRNIW4JKnysb5GFnMWJt7oPbpLp7nJUT7S+EUAg
+IshF/EUuFYlgwipzvzEkNe1EUGUwbi21NM3XM4V1SzDf2AmfjbQ4tQHkrZROlqu3
++VvspEbuGvLWbEE8QSycymV90BxbZWdkFgX6JG2o40C3tI/EwlDTxD38sARMQgQz
+QfVBZ/x8oq4y+MgvhpvchlgS2xXrYM/0zIk5r7a2u6wIQymVGTzi5b2fXdvwV4Xu
+DBkk1IrooWVH6v/hBRHULjWBBr1Y/xzyKLVK+h/uGDAtxey/orILm7+xVEbrcP/Z
+ij91wsr8J8NpOpyFsAWdLlpCWvXmdqDhN9jpzRM/akK4vVXnI3nc7yZYBeo21JUQ
+ZcFWZxsOOYAW1KGln10wN10R3D2TiRy49NjMk7vgzkLJa/TyhUQPJe6uRkwL9v/0
+MusAV8q9SM7vmuofjlKzEu6qh5xen15hj1UZF+cYvGKNeQleoCwtlJDm4fqUh0Pm
+dfEgfZcgT2W5EwjmdXDbF6ZT639+/1BXyy8r7PRnFscMJWD8P6WzHwI7VNJDd3be
+BtfBBYCiaE+4/EvPxobkTHvIvrIr6aPtzdStX2KWkL4OuPgOKOlmMB97zQU6ceks
+lkITkXgWJj8t46IXHdhVhX8/GquitSC0upqGRXISIdxpi+t6XDOgPC4iRJNNBUjF
+0kOCGg1ITfbnMoxlBNBM+tZFCfy1Hf1eQ2nwDa+JJZyTlan8SgJaTdO5jYU73pQW
+/DJdGne5KxSFzmLzThIJg9Lqc96I/eDlt+0Mhafa6Heco4PO1dYeFW0GvM/hdlA7
+zOCas8ZbcvKNEOvqkDwsmyhqz80M3FUk0gP0uApjMSoT/whXh84s8xxs56pnQK8S
+cbTeeKbyRteTuNzDJi6nypEXynC/U5LhHIQL8fQ41khYDEnezMY4mbJ3x2vRnRZP
+64C/wCeT0uEfCtgKfojLM+XCRB6KS6V9dymk+AjEP34Nk5MwfirLeecMsEhscpds
+ierK1oOH22RQLO0X4lZQlSWV76rYq1BW+iuA0kkyZ8CnsIjvAM75Kg0exiLVEfFg
+yZRPqXpsmLemtOwyeHMtS2ZVkkMZUc9dZbOJ6wnlzW9ktRoBXht0Q/hzHEP7ZmH/
+3Mfo+5l+hag/Xdue8bcuC6owNB7jJzSkvaPS39CCsP10Wg5JJMd3Jw+6FxHEx3Sc
+ATJEKXgBI/R5vXt0cJkmDpOjsKXtIafO0+qGIBtkyPguJlMto0NoBEgVzBHr35V1
+nMkbbPJqHkKHKkQAowT1zOHWwVxCJ0bJV0SAlWOg+fhZ0cOmopU/JPpwGswUKtyw
+sEKcyHw7bC+MWMfwoK4vqnHLLpVk6D2znWhRLWJnt0Se3OuO/bm8Gsd3byu52zfC
+gN/ppWH82+9rOVALPcwUZObruFRovPAy4mcYoVAGaZZ1vUv2wgiBE/bxakBCemhw
++ZQEoxLROnWN05GcXhTPVfK9EYKg3s7E9FTJP7eX2ESEVITKg41M7s3czbdx6X1t
+9383MQ+WNBaEiD6YH5MoXSAlgJoj7oQVbcpeAVhm46vHuEU5KzIkF6yiU+CI3Ddz
+aIutMcaX2YZjY6QIP2DyP3mRBYe00qk8FafDVOTHLIBMB0aapZC6+1vZnlms/QBP
+em70VskqGQMZDx4aK5i2ufUCm7ztXflMDVXIjK/sW3aFDnrz5pF5SuGEBWAiQ7uX
+/7iK8cgbljGu63KI7qmqbd6mIvEjTQ7XHz6XIFcp3h7vq7Qjq0EBsVvzZ4C+Cgc6
+yfa/mKih6qjtr0F1PyJnXpQMyP+7aDnCbueyozvOqxEMNeGC55aopieSmn+8gCqO
+tp5n/yokRhIIHRFgTJv0LV0Bv7ubO/H9ci9IeFT+n4f10L/ASWd7w4G+8nS/ucSs
+x2EbaHKbLHM5Dd+4QFc3MQI9h6Kq5D3aRCe/fwtLeq/X9vR7Z0oTMRGNCerpEQQH
+s1jaTB+faxM2zy+DiYiZ0OkUjDeUQyReHdnuEluoyFD+R8qlyTm6OEI8PHPmyGnZ
+9rT8BaqBdJgW7iHPPADB1dfBIEDfKG/4vn6YG4pDOzm6SeND0M7gASldY8cyHleo
+n+jOovp28ZUrH7xQRLivNOsg4zpG5ldZDNUcsnQgugKawlXZwvzy/Kxk7h1d+OO0
+fy869/bojqC49eEBiJ3fR09SI9iIxTTkg3T8TF2ZLNDt/+1X0loZE2L7eFWdCVp9
+O5o/td69JD/R0Bespo7A/RtKqvk6+efRcL0wG2nPlFGcPhjRtJj3+d6Q2EViK7RE
+grLwytCqjYvkiwhXrHVGuKw+uutSPsE5GXjVw1iIUMaRZ9FY75MZNdGDpS8oWaSB
+rnkBq916EKFRh08xv+UWMXR9txQokEQz+nlsyNoeRLqNhsVSI+duL7XhJ0xlTvS+
+o/xkmChKWmAzp2xD07Txz84hRbq+AVqaKYQiJOWzEmAyHftsuMYS21/KDJpu/o5l
+6L6fASahcx7lI1X5NfBcV4jv0/GhmnGDvAMy8pXLPqtR5DCJBVEKrDPw5EXqtx2y
+GOqGwadFlTcLh2MZn9gNYWwbNJMjyK1zSWmL09CUvBiSG4c9oMhUqYb/beAYIea7
+x1stgGrLlDIu0o/9+ByNSzRrkEz+9ktrbamNBuh5QyPXSKKHOcBmicOTIsKOsQ5M
+RKiFpb1Maiv40M8dhzWcqBvI+LqFZm2Qx6QqXNL5weY1o+bsZC/tV49HCB5VwNtf
+pyKVuoTtMhEZ+dzKFBrNRzGmdxF0M+WK4xUEesHMGzRahi8ZfOIBT9QTghBIiSsw
+I1epyOSiRqlsPUUqpyR1JPzJx5R0W7DNnyzSE+YSyzhDYXGQYV8JZrG2CZqJYI55
+q1LWYvRQV1MwYEbm0tYX259q0ffSFxOdXL2bW/sGtGatdOQ8tbVDWYkuuej9yEwH
+/7gqZZn6aS4qGLuW2KpU7XFtyH9+JIEKQuDnF/O8dIEYKDn+1PwGSBk727iahKKc
+5Oq6YdzJTleAYniCN3cMwXZ6ETNTMBjNwZbK/teKLrBMnC86sxqmWNgDuNNeSclX
+9CVMPzSQuTD5YiVZIAkEUPxrBzFXENvgCdlfZRVWThANl/lI22R9/0Ci6jhhzDv5
+ypBXbjcWll0YxY55sF503gYDAY+Fo7wEBZ7SD4o+arJkJDJGE7HYSSrJMmH0Dc5N
+tjwHsMSUOQqfMY/+NS2neeC4+j1blzQvYkLGpCAoFeAcnJ5252V0viqykeBqiSbt
+l5Muu0Zx+ln7omcWhqKkMv6O189HGSYwL9pUZG5ef+o2iKy5Z2B24ljbtDs5+mxU
+EF6SpiRWHk5TyIJevBahr0kEXm3z6H8vLkwo3IXF6hOHEE3+hWVTKEgksCw46v2I
+GzDYmKyzhqvMP7L1lxNsrY1gjdAcQ69196pDusm5RkjLVEQIu3f1KxRHq6bUE4Ji
+D0oVMN9d/IrydXEw8ifj64YJKNDtcAJApM+earT41HkCs2gaMoPnenF5X+/TIY2O
+raC1kDVxo/R7wmjFr/OXsK3lT3FOzInVrr27kHP7lSvju26s7oFfzyqwUZNZkUMx
+xNi4Xd4H7L0vhGnMagWY94Bx2qiox9YapBStbb0uRVqnRIKlPxqpoC8TO+pe7+IV
+ItpPTPcJTJHk1vrqjeegvbagIGk6+ptFCE1ldoLjGe2DTO4ZjxaFY8OUjSc1X03X
+qwMAZTANvTqPbtY3rthSsYujZ1lWjmdgPXJPqCPZ81dw5KhpM0TzvieZFoUUf98O
++99sAWt7x3Kv2li3/FvPTed8NaUjIh68Mxl8ejsEAgJwjkAsa5de/vMx/Nnpt5Zs
+hXGHVpbdzObxFFRvxwcj/hV2RP4nXk1xd/h9bWlx//b3Km6fG/Me9pDlkauOkCBj
+kZiS/C92mRQlSnkvyNm0b29x6XDrZEc5YzTWGXKNoDFWpms/RL2M1xIEJCdzhr5Q
+fxb1Tk4SvQcilFFXxg6pMwRcfUGpUZgtWxAANpC/FsiniPpybga/qnPcR8WvfUMz
+DX1+6MuMs3seoGz1JT2OdeCBrKC5CWahzaMFEhGMltr1f55WMpTBko9e24j4YHpC
+eNXco8TElZngg+b6PdXHjb0mFN7XY23fE+/nViH7Z2GiOPJ/O+wwzICdUosbseyR
+jkgeoXUPw9AhzIGLtKLH7mV2jPuTOVm+Wwx8QrAyDyxdCCV62BU4TYHn/8iN4Rko
+Jffh8emqEIRPAYooHkBYlHI7pVM5ykIurKnibe1ZWx8yOCKXH73WDjSnai58uG29
+MOup7+LOq8WVjloBf/RvLtC8K8T/wxU8T0xOlXEQExhlVgNj5l2NgQCQYg6owZWA
+jORYXhc8ZVNVzwB9RSXLPUN5XZ/P+CrNOnbkOM0OTe2l1Kxp0sMwJ2G5/yPiJVxr
+crvTh5ntUd0d2otKVJVj4Al8tMqJWfThJWE4Zcr3HYgnaR3jAdIEh8uE4xrvsD2H
+p83wDrWydkeBwmeAK1KQhSYeRFoNDkd6f0dUDeDdhARhhNLC+uazNDSU7XDyvTym
+DagOqFpWTXAaCU+2tjSD8UJbhtxGuzE5QX0QmSCFp/qZTozpVUaV2vM+nImWCuqZ
+MrbBZLVWo9pmnpu43G7XFGNXroHvPqU5+yVZh9mW5arQGU8GTRglR4wkjJTRZTTP
+tRWSnwGTy3b/P0fUBVv+5eB8F1mT+SFMJL71D+DlTmDzuRXqMqP4BZ0q6joavtY5
+lqitHffIwplXRr1R2d7dGbbextpoi64bbrxhIOO1BlMSbR0kw++953rtOMttXGCx
+RlVVee4+AHC0ekX+Mz1rNham04+WqYkzTLjqASe0QgHk2GZvQa3SMUVIb2FHUpbW
+RRTxrC3fo4STOazHEVYZK0JXa8+nvRdxUNn6T8jVIW+QnML4ErsD9r3KFpQojcpk
+R6OJyXuV2iDzgereBAocdDSGf+drHT7on+CwSmaH3Q///Wf2YvGEHi67jAHGoUqn
+ooYKlotBpg6b40nc8valDquijLZPSQKU0rsDG1Q75If8USUrKoN/Yp18Na++NaAf
+iIUwEKLmcGpDCyuAtDqJIqRONopztNGAwy2L4XE0waRIx9IsLemNFtkgWPVk6orK
+EyU9uxMZovi0aALw1tC0uY88PDBco/Y+BaX8fsImAqOsCmcDWA6mp/WuOF0NhzGs
+DymCenI2GnXkR/O7Dhyv/uSUeHnbeApjPdRNbWzxHCz0L/AkywuwjELbe1Z7mMsm
+Fq6D8yTLU2STbI5xq5oxj6yJrL0nAwScTVRIWF0AeD+gPqMiOdZf89XL6PEaR5Z9
+ikEQFlWcUMi/to8GyoQukKNznnrF/sV2iZ04a8AjFq4M+1hwhVex6Fnc1IJ7xHKd
+SqG59iaK+cX8vHPFsuhR2JZxTx8kqQhvFgUS4vTDFYYLq4ztkXIoWeIk5fmBuE0p
+zjbAx8R/f9qqK41KnZWvBgE/7X0ceJmrtPzqQVIpbsoin4E+XxUB9eJxk1C2zMHa
+0aPpvI+AafBYLgR1WURnVeCvI7Ox4SBUm8wo8VXANp3aQY6nt89sEi3siiqDuv1d
+KGTlFmeuoaFoP2Kvdi7uoiLZHEmrpdaNrU/y1mh4FpZ0YfnHmRK0iEiyxm+vWHsO
+AKRC4tGZfsnohY71Rk754pawp8wOzlSilupU/ZLog+jsrXIn0Chkq0jpm6gTEJ+S
+rS0lrzodj4Hh3zUfaRC8fvVgrvqpEUvztlAWBEE9WHXxz4PiYk2DlBzRYd7GQOw2
+2ynBq9ROFDHg/g9Bp+sFU4ElOZGmOzm1/HoFadgMrNbjXa8iAuj5ncQNwMqMHp3G
+vMhYQF/SrMETC8NqtvrLc7B3vUorY5kJ8tBSeJAG9kU5AY1aREx0qLZuvlVmerem
+RQTKFX+IIbjgRWo7SxHaurhLfueS58pMvoTxgedE5B1RVbUT8Rh+lGh44wv8SRwy
+A2XCVTvuNKktomctXjiBzSxfctcFIFlFsAk8GujkObSgExOnGHQtksuK82T0I/gx
++JjVjICFS8GhZ6B3MezWKfOaha70vHk4PmAhgu1DA1eaFeSx8nZPp338lrzNZ6DB
+YTS9GyhbvwQH9KwGQ3bECirYgRsQW1txsh47/pt0kUX9WWskoxAJJF7BkyuODrp+
+6jvQeZxf4MyoY1Ngdu41H/Op2JDpGVfwefE2/cCac9+OX+7Sod0dyn6pBXabD6Lx
+PrGOmM/x+kXQ6u0X/cOIkLUVy4qPZjskpoKvR4m7ZoHm3lFwnh2SE6mVgbP03hED
+3x2GuzHCzAFHyi6tJvsKNYGXEA8sem9uL1OwQ66ycYP+uQAVV+rNQgmqp4YAxT2T
+x3QgqFJmW56Ybp118yUWKCQJVTCdJtm4gEHxgZ8dXljEGPO5c8VaBXy8BYVLjoHN
+F8Rk0+LJXp5w7SkvlUZastT2+AiEcVYrbfvhUVRvdmIAhW1djqGKpQufFAhc/n5h
+aaOqsaafnMc3+NG9C+3sW62uLU4FcmwuYtYtDO22qJdAhx0W6ZzoFTuRIqbEGHnf
+U8FBLJGz0JsK2FxnfWY2Ne1DBysf1Au62oJuh7TwkrC47tEUDy+CHS31NUqDEVdG
+n9PnIgJHTzc9PC3/kO9/ajGi4+NLrzEkLyGeAdFL9R01Ondxoe2cDkO7gdXv0tTV
+9yK94+a1dQA/y7kDIUhc+IIPf2zmiqUWQ8Rykdv1a6ZsFkvU1mtUh41qUSnl56vW
+xxVQ9VwuXNFwzIA/HykHkIH1+yGUc715xCiUOPb5pfPywCmzL4NuNY9+Cq9332EN
+u2QQWr8MFtTIoqm+nDOhfQMzr7vJw79dY9IDIOlmPLneid7LD3BJcqF8a6I/1byw
+04yzf9UtTVrwUG6R5UOseXU28hnO2Eq1hQ8HZVg/yQosCTo+3umnZBp8aXDq6h3M
+bHXi9H0xgJwmytEAL3X9r9O97fHr/ySHrHKCLtDo8US0rE4nthMwpOudztxB9k4I
+DwWqjm0pATmzbgTy/0isiK+76kNISDYpKrbG3WhmJI80MuPHN+7dEyrfYjDWpg0b
+DfpNODAEXQsOFCySWI0mExOmKOuH2uKcMWdk1My8x46HfiQ5nU5KteK69OGnU6CY
+ScBRV9sdq+0cSqEeHxzpvOfm8QTlzhgIaGGjei2y54f6NRCdQvKYW9txy9ukbCQ5
+eGesPbfkREDvTxjqLsyD47SqFIy7ACMRKfX8dt0EtS/2QTXoMJLZJtkiE9jvpHY9
+NWEXo6kymJ7KZhcCYXj/AH3mYMnM9m9YU8cCdNhEgJDXgHgzp0R8B5K0l/fodHvL
+YHpX0KkJ0c77pn+7+l8RMOFUhs7UpGWhdGwyER491/o64YTxcWzNXb8U/ShKgxUH
+znuJsnTktB8XreSqX1OvoHs4RYWmtzq+d9HY05pJ3TW5/O4ee2R0UKkSK43d/GFc
+Z5ZFrjo1G6OMe3E4icZUDYe1KLUWtbZc7bWbBF69HaTJWkTssIE35z+IvYmBhJha
+dXU2gGRG6EsPD3j1IjAp4ranbDG18sBXnvNGhzcqA1DqB4mhEkWihNTjIwELOVXj
+KHjH75C4novQCn3++GdNKTMUrmOMdBaQVO74n1kpPMgdICEzkzff6dH+rlMziPGX
+oC6YvMkCi41DpoCoylLFSUHVodhXIn8uJPW0Z4J6y1hMLNxwfvEmdVpKAHTCdcVo
+sqhgAnivb2pfNTBX93A64JLicqJ4EmuBQPzAI7pB1+21qp4UW2alDEV7gEJlc+C9
+cXc8jJdj8oZDdLMNFxqJTxhpTeBQZ6Id3Cn7PdVXerEZI6QppUtbZOt1nPSA8roi
+AXH5ZkKj09KGzKb/s9DjP3Xcch9YnYmY4ocPveMFTykLjWUjLPNd1YIO12AVMYBJ
+NY9XWqgeo5Eb3hA6U9oNMTdW7ruZdqH2WTotAT1Wy05Eys8rty2Ju/Wopu9QEiSM
+IlK0Ps3pY0xHAmIQuRpyyOGskMJ1MXV+U+Sft7B8lRvvqUyEEkzQngDlcbpdMzpS
+Of/LOukawzJie2bB7DCKfJMArPtdy6PUxxEhXX4GfVER+Fk8oi93Y0hLb36TEwck
+jeVAPz7rmaVO05BpIBnzvek2NrK0vVqVDBsTTSDcGKNnqTUxYs1Gaa9HM3gzCBzR
+Ltg+OZ0fUcgSpVCBe4HWJzhHL3/jYgRS3Fi9Fn/u6Jvi+jZZkcTXMsG/QQ6fHPa8
+BWHS/+oZToRCWhMAopnKsCtHjl/9cLMDKUik8W+sMyTUI6AXfekZrUZ/+B88ZBHX
+9z/C3Rn9RVn0qccNR1sUEEZHDO8h0WpM4o7oXa8hKx6HkIudx1QLVnj82Ill7arF
+L1egyg9SsOpy2x03p4649Tcf/oS2Hpjs4ZYT70Fuwh8H5qLT4F7WkDrLDVlWQm6s
+elu7yFGMrx6bkTRqHZ4YmH8XEbaovuy9ML+zv/sWPP2XDiQLRX5Q7cCfh93iECgf
+AcLe6gmMVbRUuDnzVuHy2Z+ElOqniWHh9/1SIn+NY33S94bKv3n/g7o8UeRRKUEl
+nHmf4BQ5B7RF7lAWc7x0mPX68ePvO/+h1liaaD2JHuiQpMYLcAnv26Wm0ukHV7tz
+NoPDcTb8blWIFc5ORYuEEN34BOvvkfPGvJdFNpSyywVuNiS9sdMX9dAUnPWtuDI+
+M/fKgoAmerivRoiCZWI719viVprhdzEqrnGLOL8LMWfqWTqRPDDv8fZd2CtdzCYs
+dmISXZ+vbPPKDoj7J4QdpfMmgt01+M14vOrQR5MLeWKWVY20vaJcpo+32FcOCGC+
+wa3lwWvS+o2XskFQpDY08YxCG18hup18wWR+3vL0frkyWEMsim+U8jzG2hnN+s7T
+RyiIXPvcUTMcqwFljKYWQLAmifzKOnQLSUJZrommSxEfoc7TiAGcByW3xrydWoGq
+MhiSzueOzOddGhzhYyQgEVc4upebfcKp+JPYJyF2zXCNpjBE5Y1a4UM5EkWvtv3n
+KjSMhV8IhQciuGZDS6ZgrxlWirXcGw8lKKiVQQqlCb1vR3O1miHITnpBx8gGbcGp
+mU+SDsVTfOLEE5YGvWexasGbhM3Mg5sqJ4fTvi3oPWre24+Rj76FQSY+6y9C2l4P
+MKPZt8wO7KWcY0fHKQGQUhNM19zM5YRWOCvXRuy7PHOwtZqDOAPVombkHleRhpeP
+74HGYbFaWre8WFw/rzMW0Z6BC8UWhGWCMvViqmj2WpEquotdc0AEbRfOEkz03tPX
+RABmvGk1I3QXeXkTq94hz5/1dTBhQlE5Vz8BqeMJnGmlEI/JKNvx2syBk2lVrrW1
+0T9tbvpbpkA/k4po//x2lUJol45YNH28+cLtGagMRCjq/G04tj2yu6LDKeHR6gTC
+S/zZL2Y6OSEyzWqjpuiwbo5qIRtD9v6UjPr+J2XSoERxKr6Ft5gbdAjQqwOmJymV
+mxb1AiLkbZzSnf7qBg7b6K+rkFK5qgAkjIkxFpr91tNneeipzMPYTUa+hjWrx10I
+wXX1f9DjPa9kY06Wg21XCTMJaiO9DlNsZUjQrbR7YZL2luBSRgt+Mj+FCDBJ1Hky
+FKNV909IuTlHQMlKl1ZoQT9Ei6axn2p9cGYGLBXtqcLi2OH93cV7zuCm35tarFDS
+9FoBSgSuabrLLF4yB6tdQ+QniATaMnm3GEnpZ5koBqp9jzRFcz9weALfBe/nn5Zg
+t47cpX7MefgfJYnYIgRhS+F0g7AAJjWieZ+rEfHUgMO7liV5e+wnNhyWGwznEuoC
+XSyvN/ajZhZKkx2TAMMixjyJYXoMNqcpkYwJTdmNCfQ55zaxHA==
+=0mKO
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDual.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,308 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgAhwvHkFYJg0q4wI4yL54ErUBsBlSr37zvIPM/mgifKNNN
+j/aAr6PXARJVpSXLb+PvTFSV5bdwFFrCT0vnBBrHInM5KHfzEEbgnEsmYdAzYGQF
+y14dFUmfXqhX8JHglpjh86+wbgS2SvtyU4vwRrtuUKFIcd++CHsbe9XEzP1HHTlN
+9ACQWzGo5Cnz/Bipemk7YJV++yyLHmPeLiWhrIOmMyNq0MLKwDwRw0f8FXKV+Wyf
+Z3Z0t8sh6TAQZt3GbrbzNr7/0YTqSGudfX32GoPevKya9UESEOk/hoPI9Nh1WYpN
+RZL1gIb5pxUKfqPOE4WOOVSqRTP1pBxLR8x5TcSBbAf8CdUSG6l1d+wekRVrhLDa
+IysItsjox7YyWzyR7bLzwYTdKco7CqubIV6YyMdAGfQL39oMsMCg+nXakfijMAD4
+otivTCZcn2dXqHG7BJXeQcCTAG0t2JD4vryFJItH52ZqROotbXhoMMYbrXIFIjPO
+JyZc6pPx1AJJHtPuRGu+NxY24TzxF2Nw/AJ+tDUpjests/kFUy8lqs8ctdbL9UIo
+dGj5f6u3v+jVr7lUFUddz6ETkyd1DD5QGucfHKIqXjDDrvS9UPBisK2TZo1gvb5z
+hZBrDw3ltO3xPjhVhf6ZDUh2lq6H4mrLxRSCt0HEo53I2e5Zjv9AkBnmpfqL0kyU
+8YUCDgOy9U5HV+IkUBAH/1VcCJJJma5z8pTR5sKKyjRKE/zuK7/LU11yfBU+iAW+
+JGkP6XvUEvZvy9kqc5OrxpcBR/Yqb2nAbuhMtJoJv7OIQdmwYrIP5mn+fiQDK9Lb
+64u6zhvq5NPu956JlZpg4emzW6d6WCy3mhrwAbW9WXjgtjMqM03obXWuwMtdcddY
+6noQ+s3Z8WKDX1IyZTwdsen8iTCqWBPRxUeECjUI7lPn8cos9pgZzBGDOvSisi6I
+wJzGj/ufDaeO+8gflJ5+j9KW4T26sKsr0sI7sjI6jgrQ1rVbipnivcWo2Erg7AGM
+VNQNlSBrH1Rk0dXT8vu+9MH38qtlSr+z8pDoTOUeO1AIALqEuX3/02HTfw42mOSo
+5TAkmg1v7TrAXhVQsmpI6pGZO8bKXV7VogGviRB26qTbypF4rQtCEE9OlLD/f0tz
+UG+9djXgcb/ttOPipeDr7J97uVn9w+8r9b8j60T0jpJbZUQO3Y9ryT6cJvHRC9Iq
+HE/LbjtkxJP1xs8WJifZHC75l8Swm7NyntfYgSzAynn+ps/9KCJdWzeKLlPhD3l3
+GL7x5dESzs6Ov6yOj6sS6RFq8rO2ZeLeJWbYo//7YPPzSyLllG6wT0A74DK5s5kQ
+xSuoUldKISI45pX74ss8+sSLc1DR39ZOEeHzbVGP1QHd5N/dieaRy0eRSk6dXkon
+Ra7S7QFdNeA9ge1QXuz8t3RwleujpFEmw/8Nhd6le2My3Jcp/cDP+DTnHbj0qXAF
+UdsNsDNrnmnLhrJrmgalfVmdFjgW/Tge8OavIVMiOV6UP7PaKoj30SyO8SzrB+Vy
+fstTFCJKHagjoMz+gl9lX08uvmmGay/aWevlpjpG7gydFuLUPXsC5COFnqc7tA54
+/Xf45GxMjIOPDMx35cJywEdy7Hd5pSNcll+CWrE1ZW4gvN1bfmMFevzN1wTpSzq7
+qWxEptAddlehfYk6SG43+Mt6k/J9JnzKETpSf2jFz3cetrux2JsOO76MlyleZl/y
+onXocpvSEEIL0OWqCzo7WQVg+7KAuGP5xBziUuGW4j1CYX/i9ch3kYyZGusD7Cqg
+JBf2qqr03oc3wWhFQxL1RtyJbLvQRV5M39+zpdMPu3DBPGIJRpcS+hH51169XqhD
+0Em25QSogjU7PThk3OUJXFLsn4MdGhV0ssUefDTbNe8I5CdC4Y4Q4gbgJRpAvvwe
+JxiKj0QeFvK7Ai6Aj7GraDZETubudgrCnR6aBM+oyAoh9tzRX03YAWJd/vPsYYfP
+ba32E47UNgXyOduUFsvGKJy/OPmJBTUyCLQk/tqMVU1AWNXrCcnseS6QxgeqfcH+
+WvqGtS6JkBj8hEUoBkucwIw5xbeWMr+oal1IWDBARej9D4G+xWhYEUUszDtCHMlh
+TVzGr6QRgHYgBN3Jv2ogi1xi9ye4c/yqonpruweoW5qlI1BOIKq2Pc+biIerxxVk
+8bzWPf7xFGx6ZjdVanIznUb3IQKJKdyyuFCaRJimnt7lMquo/MnIkdxJXWxERBSt
+j4Wl3DLA4VPN/y1LRQippinVSFrPgykSK0PuH7vzuaGD26f3hprrYyi86E15niZI
+lkJ6GhDP1HSNHuw7/0/ToGu6k2w6JE9Hfq4g8Yrg78A0ksz05joSstKhY0QoYbMX
+cbsNuYvQ5CprBGxT9BlKzT2jur7NTWPaggOck0Jbflk5pu8E01GjTuBG2D2izhmU
+1s0uxO2KfB6Y5+oNF4TuGFVVC5rnanhtCscH0Bh3zifnGe4tB2KGgrdjkoDVCVLm
+NdeP/2pCYH25bx7jK1yhVGP7YFnyQSqvGQx1CQIQiVPbVYZeh12KL/rL0TtW9fz9
+9QE2JFpIAZpGpGkpzbPlTJWw7DwPkSGe7nV47uqLZo5b68drqOAadyNw1dsLryqY
+Mm7uzWYTlKPORy1UNCBZ1SwhFqZg/zoHQ0+bcw0tekn0wRtDMBHpRRNKwQ/+S52y
+EgcwcxBUCorOIwOEPSyaOy4wgkFLTIA5de4tHs29+/0NfINKLdvYDJzgOuYeqxgc
+UQMQqvMh/kvhFhu70agUgOclwLPHiAQUOpd7+WfNs3nOL+xc12B9tQGXuErqAoOh
+XfPWCnAXFslviiMVYt5kVriPIPFe0rxrd2EYCOTUZY2voUa7AH+peEp9E9z+jibc
+CHs2/y0ZSI3a6ow5+4x4IVFoGBBMWbymqkVKrxHr0+iHxWYFLe1dpGvR0zLplbqp
+oqv/+cTEU3LIk5+3RfWpoePIIGsNvpNGRC28x6LBX2j8BKV280vDrtSWHxUfTw7G
+7o7aRqqKSyFDKwfCp0GLOlRaCSLeTIitICTmOFKJwndDOJIcJWqW+rmvIyfTDTpW
+pTsH1jsCHP0G/b2npDvS9Le9qUQlLFfvj6Sm2/iodkGCceSdvzDr2uixK00DlEvp
+op0R4HaCgMLWfaD9RiNEsSXdD3W2ZUzkTDoE5UfficEx1i1gwU0W8jjjdam2UFE0
+Kxw8i4q7vlUu1Xuc1Bizu3UnK1xNo7kWKEA0B35a8fruZE2N3qNr3PTZgSYmn6AE
+SzY4Z6Ji6SeOUgN0L9xP/dLyzUWYEg4q2u9s3C8evJm/dWMmKNNCFEpizW07sg1v
+ZSv9c2gtFS/mcmtKQ8Bj2MgiyxqN7Q5UbX2jRUE9Mzx1jlKojsc5wdcrn363Ju31
++rIv7fagL6KVtAzgTB8NBpG/J5YrTarpcrpvG7YR8IXoWnf9IJpmGePnHJALi4tx
+U/pDwkL8epdrm7jT1h9s/a+ouzt+v/wGFp+fGJVAr0PQ47S08qGtbX6gzpf8OblY
+bV0l6hiDspce2SIJ8d5VRNvCcd/w8YxQWFuR7JqoIiuoazVceBduLirX2+5XAvvw
+uSW3gNfzzmrGXVxQRNGWXLCHNHev1mcs8aezxuDJ2xMTyKkkqlHJ2jRkEwY03Ebm
+cApq6wW/50M5w+N00ETO9GpaI85ZhPgic0wSJxjDq1As+gBTFZNG30u7GgPpZe97
+rHqb5B0ApPYKRywfv3IPCOpHXuXRLw6E92UsSKyiCHHIFXhqvt+4Nj1iueINYSv6
+G6qqQGnKtS2uQcCWmVjIoAxqIPBfIPCcpXod9TBWeAioVcmNXuIgvWSJqy1mPBrc
+mEmEv9B7KPhkcrDLMWzHluIS/3ds1ECLtAvQQgbPDirHpLPfVTqOrEFolXBoNlE5
+0di/cjcWB4jACqTENBOI5azShNZLmxNlKE1n1ntNzyfb3Tlg5Kecgc/S99zr8Lj5
+Ly7P94mKRglF83gXE2kg54HHFgH2AN78bg4AlTF7qtRG+yNcRH8i5WecOOdZJSgP
+u7/IBa5bzjjzedLVX+hGRFGO4Z3ZzDnCOC0jX3AY5VuuPGHCR+4JVnJC8/Pw/cp1
+a1pbBOnC3p92tlRtS3grUMkeUjvJTtXDVBNUMRzs/TbqOufE9DBBlPNKlYfUuMye
+lJum1ey7FEu+u64lPZex11mGBaaabK1l8e6KAADECVhyJdmzqMSvHdFQFMeNhlzL
+Y6acX11idY3vfRdcgg31w2vUxUORCtCyUXv6E/VmskgsRIgWX4IsEszu0Qc2PABH
+BS71imRs1Gu/wRzPa6QQxWlZd/CoyvNxVhzq8giKJhQUekr69RuyKp3y2QTQahJ5
+hHnG3qvsxuaiRjv8sFSEtbCNPNtrD6fAanXvjo0WFmcbIaKBdPrQfPgwlWvTVEY/
+H10Zn6ZtAh0wna4E1WOo4OrVAv1pou/hD5qHpiUqKNEO37R90XLn3UAHtlF1HFU8
+ZKZUgxXoV0gdbxU+/U3T5EZmt8PWMRTpKi41AgV/bHTdfjDpgdjh4MB+Zv802R86
+s7ZyxZ9PekDHuII14z91dkfjXI/HGLNAB2ucaZ2TNqGqaZA96HnttWJCDw5dphY6
+LUnlEyAz+chaBJJAQR4RJwtheLH1WBqNY3qy2NyO51lq6/e2npiOFDsmY4fwM1lA
+ApnqhU4it8U5HOTbBZnODGwXvzONWMK4/yiYFeCjtFoVCma13kcwL04rExeV/ZFw
+1H7RDmbm9s8MDsT9KwJ5ik1mY6e36+FNnphAefCMLzSxqC+LvngQCs3jRtiphs90
+jaPVh9rTw/Ye8xx27rh1QZgv7Vef6m4FYXzuWUri6vkYfXWwk5l/f3Lj+Rh3RYY8
+mg9KhCbXfzUNaUmXnPuOhszzcnRqcSznMefmv+U3n0WEW6RBgSCF8ziJelxcH0dG
+Cc5KMRi3M6Y8nqwKFtZTr7JyQssANaNx/LKWTvgMnFU4paiaJLd01OOiYuE+flDX
+bXy6ayOx1Yqhzj7w9YWi1giRtGTM3ggNYn947HoqMpNjnqKHnbrUkz7ctlGS4i2M
+MfvwHa+TSlhD1oGrCxDOVUp60QKjRdzRBooLQ1jSEpLYXbjfQJzZ+33BNouk7u8y
+uSsv8epUamgV8A0X5qZOEmMn4akLZN2Ieo3UJGWwTC0PgLkSAmUo2pBiVgESnwvH
+iPHLdvGL7I7/kMl63TMOIa4FIWjMldTdJaxlK4LCTXQINM4MH92Gc0pkfmDPLnbZ
+Sbat99dGcbXu+/9gIjNzDrB3lkLEH5eAwcvn8UDKE0nOKIJjKXSyUgs8SC4Iz/xZ
+E9dOvN3uNEWQaVAdBcd6oS9hgYp4GKq4TWDZH/3JQitv6YZHt5PrnF4wx3ETwAE7
+790jYTyI0jIBCg31C7CoX+QwAUO4vsbsypIRyEaLMI7WU8AG/XvXTmSeGi3Mft68
+xy7Pe0gPLq5Zcufj6rt/TlFRLl257www95i7xFyFyV9n5iD6F/9M4HRlCrxmjWM/
+VxJjIS3miJ85YD4SRK/N3Pw4CUvb+o+vIrEg5P4PZ/OR35Z6TBQ4ATqaDnRx3k18
+xO3eomrUnSUTKr+Z8KkB06VvLxCGx/l9a1RHoxKLQH7radlk4F8dC3wfLnjX7f9t
+3bfcfcmfUri0zYBWlzzTtsBs+9WlwQO1AokJ4+aHEXmVZh2Wh6eb2ca6qRwEorX9
+KQ1eDN/IeRENStNbiclS9Su140QJmLG7SJomJr82c01iyIcvJU9iZlPekUJEncAg
+x7VuXanLQ1+AbTSKur+XjlDYPIkow13jKUUXT7zhZ2NJunR61zZ8SzuyO/obGDGx
+wkW5wBjZwA4lrxs1+kfY/QWeaS6cw8iL62IYR3sil5NJ/R+QSwkVuQFb8eKNyINX
+50xHTU/1ZXziXay2bEXeGbs0zs8Au5+FC/J/PoP7FTruz2NxcHP7/egHntig+5kQ
+vprE7u+dHe+flkewU7X9VWPG10zYi/QBK3MYLdXRlmVBaPUSANK9Ki40R5NLKlSw
+8UUPm/L5CjK29nwXRcKT/pLk+/LOHYfnJ0ike8INNHQPC0ZNYmcYc3AqVtEzvPtp
+FzvsfyDIFw++FVbnNFO+ZD5y4Xi7cKsb+WQEPmDHNs8iOZi9jHn71YZJStqgD+Es
+FgUyrb5RG4/B/8T9ftvAGWZNIrPY8/juBOyWzPtS5Kc98RcR8YyneahLDGlCMGB9
+sKPP4BjshTb/hZ98o2F1WjsO4fXIM7v97e6Fsx7SPacZT7Is479GX5oJgFyNK0Lz
+WxqBFLcaOYYoLkjsbT1ov39W4xmgTeWeBXo+dJR1OjJ6IZrvjm+CEhiy0YsJjR2R
+Uqw3gYi+zkQJFNBpkmTdeLVKGNG691DcBQ5A9cZnJ8STgbKW1lp4WAzQGTaLIuRX
+CyRUuzfX3p9bbuLPX7j8zAtVZNFux/fKzGAnk6dnE/IEOQjHCFHF7dCDSuaJ1oZ9
+ZcYmXJei71/AwMl9O0+KTTlegBc11XmiSu4H2y8vpCc+Jvj2UrpLk61C2+3fqffj
+S2lyxjBF67pqEhS1z3z0VrohzqVSORic7PqwU06JZeQhwAidmgS/6Qy+5xXEmW+p
+1ohW4zgIMy7YFSJ/uXTk05zNz45X7mymhsvXnl5ZRazgV4ErzclKg3c4HXGEWi0V
+rYga8HCGcrNoSbR93uvrBo2czRxk6LGHdWXzCZfI0bQm7bJFC+j/GZQrvzB/L6FT
+S++GPgyTP9FbUjYfDmY0xC3S+mI2Id5qGwiyroADhuykqGBy0NYorRbXHY/TAvae
+trGzgD9UX+MC1XT/ZMifHk2DCmAFj0nUAqJzovWS1LB7lQjnk0FuQ3OTfiTn/n48
+DinKt6gaxfyYv6plYSB7s0zJmq/6glNSgwxpbQymVq0H8GWHXnnxgJO89OBn/CHu
+SEIzcwVPsFBufce3EqzwsRy7/9sAn5tITZqTyrxeiWT6UaoKpSUgd3eLpCxPPLoL
+cpdiWGHhJgsPfojerjtrjOROosCisUyGf/Z1l1i8w/D3QFrKsb+WGWiY2M4ukbl6
+G+U+t5+yuzoGOcuqBoZZbi0p1io6uKlEiZBR2GWEsXMe6W6cQnAY4cBs3XaEMJE8
+KF7RuzHFL8CBHqvCzyFC+A1FlA8rRoaClfwOGYtuYkjmxOWAULzhVALLpwmSiPCJ
+XKrubEtktbk87hi7USFj1T4WNCjaPktDaoxjllQqqa5nvH4SAVy5GtBVtTp74Wbb
+gOScGbrfRHKmLBx2k/3caWNXk/Yb4uoHKu8HVI1qVgcfznpWMGqRjjbhi7spfhwa
+2kh+JuippK7xLb7Bw5LobVeKkMcUYXyq4nWBqOVHB/S8qxePgafW8QE6l2EMcGLZ
+KRW1DaxZ8WNbRxlAFNb/PigS494hhr+PFFi/c151iHZjywF1HFrO0Iq7Dw7bfOIx
+MMp3FyQDb6+IDK+7hicBWPJYhUkyNrXFA5loKrPXVRZnMzPIHw9bUYxe+pjuLy4H
++BRqd6fXk6iPvYklnP6soYQ3iISF41BEPcTHq9Ba9iuN76DHCteqMANAlqdgNDQn
+wgqwNSvmU9YX6UBCyDR01WkNrOg+X/OU/k7cRHZF2x4n3BW/KpGpdfzXeU8QqaeT
+e2n5OaAa1NTRBT/TzN4DJZPhgjzWLtiT9QbZzsvo67GC3cfZKi7RWlwUQkdt2Mhw
+IxPO+FWShDG/yrxhjGJvuV4TWM9MRo/B9J5XLU+3Xf3ZAzK7adwTJMTGlV4R1RJ9
+vnA4doYbnqHofZZkCDJgxCXwwYZMDXu2BF9iUTVml284HyfBt2F2HiEg+5rGj48g
+7Y9AGb8rkaRKlRE663j+6kj3R4/W6ILS2umGl65n5sErOQVmYqbq09iKT7ooIZJR
+KoDKfG4VAKFuwENRUsJCUewPwu40dDUy7CnV5L2cPVYFO8QM2/GFoxYNJduM1k9S
+Tre41bFQFclMYlo+UuOW2ZenAOyjXfsKU3iJLDTdLHTQ8tuz4PMS+IP4fiS+ptav
+/LvyKs20ii0PEwt6EALcA5oDvUyE1KpUkBuaRU7EIMpgUNFP88qBMMlPI3s5mpUn
+2B4ZdSv5irctIKcs4aQg5LHGi+udnzmt0GcQD+309KvhpwgAuyPnrxrh/ezyaV1J
+vih6ONigRjZUnGxbqbymrquJ4DHsOF+byKgmh0cobYx4vYHdOxXOXqmRFcvmlj80
+t7R9Xx1Af3Q+sNuvqrOvlL1s6WcC0j4mHR5k0GcbSy1bcc3fq1OXGroWAcOuYKEO
+08eV4W6UmLYx4v0hCJ4FTlbUjOf6B8bJu/JAbyHc5CwQOI1QDfFdP188F6dsX+3X
+SgRzlg4HFSlA7IG80iOOGYxBgoEzrYNofejKtNvkrVCi4vXSNdXGK4PveDoYT3tC
+WE/LcwLXkjChUW/gwwet4kjns1J7nCPGo81hnPX8IjIyA6C1N5ENUcTVXA3V0K4G
+vFElkw41Heh2pYV7urDjbZbtRd2W09hLUOlHX8iZxK0/LXngrSGRDzCDAMmaANzC
+hk+XR0pwtK++jMQ8J2RRqqIYakuVW8ue8XTC7PMA/BkCEnI+pPmvYip71ab+3cts
+tKggPl3nIReqYIPEud+9bpwnutpm+yNMt/zTuj2pnCCuqp5ZlifLWOokyUBMyyhM
+GV8BGS9G6uRreO2zhN1u8IRhj+y5Bum6z44kPqNC4YSZh70p5SN9AZryVfJeLyc8
+dq86jl7JqG3I6v+8CboAYu4aRxckNg1B+10IVQ2ZN8faDOKsbGiBYo2M7CAY7V0N
+iT2j/WLk6CAXecAINk+EFeq9GgguP3XTisW2tkQjIkZqZWObBYuRZDUqkLnrQ/p1
+vXj8CqCoXAdNXaG+llbpV7v59ilIegOW8fLcxaXmK8lU4OAcnZa+We8CWzp9QHUc
+6bpqFcN0ZD9Q6ojygYXEagdkJq/T3XMr6V1OecJvxwva7nzNd3q+YLnpWTRS6iCK
+jEXLy3RAcK2DLluG8MdWQ8uIh0Dyh1nP4jd+B04nRlG44A4FgLsytd9RKYrQdtzw
+uuKdjK7iPe5ln7/l6XTX2vzZcJGkLIIMFFj5295GMusnauhtCMqVQ5tZLc5Iqaq5
+IMFiyTrKdUPjUpKGShZAqANhWq76X0vQKUCDFBrATPuTTuawSCWnOE7su/VKw70Q
+xmv3wUxWJF8H5ARMWyUreg93L79N1rolcGXj1I/SawzDGDM8A/I3UfXMhOQ+oQG4
+Q4ZCML2n00zGPIvg+PsFqBsB0UtE6AAMqEtwAcezhBtMOPSdmCoiNCVnTXMZZGUT
+GtKUGV6CxzOa+SW6KLxCykt/LcPF4ffytAha2GEvLG/6JUGGgWWucTO5iIaN/zqi
+kjQ1fBc1VgPHu6tgShpD/bGBDmjDASyFgI+cphZcjgsehdXpJL/6C3egY6ijemJt
+rsSnbooX0Q96CIDyhxwFPXHv7jVxabiNjonxrxNXciMFuqBN6BbrJIenx701CKAK
+roSn83X86/h9Q/NB568NDU1codM1pRDgr0aY4jRN6j6Hy2qMb9SLFQcLR/S7zomI
+KR6/7T7CqW7FU9vMUHaZjVwUtb5wxxZF/G5ZKbNzKlu5TJcoo9Z1awlxXg5+icRZ
+aBvD0gag0xU++zLKJ0xbQYpFNd9nefgrHuKxCLNBb3NNoPxX6mXqMeYeor3BnpMy
+tl5Rs0obQGGTQTp7LWWdaABkdmFz9gn0RbKeAtX4k9audcVxRwLJPDxxLwTfzYxv
+bZSzpzIIy88IDeN4RqCQB252UTgAQQBORpy0KZOQ7ZNFCcs3+G+pcpDzl3/oB4uJ
+mY7y+swlgcCb91WBM8tXMm3ndI/4b1jmwNsIxWTlG5jwtaDkCofUCLluSs+As2nC
+ouIoNqDBpxZ6i7vCg1JfGnlL0Et+ZrIwg8GOvcjT7Rand38iqH9jDcTMzRorvhyb
+EpmBlAe4JVafAyvukWDt+MHut4lc9lkjSWF7X4jYvVuC/jF6fjLvni2RdVduXzFV
+LDi3qLRlKoj9xd2Eakx6n0SW5PEIE01D4uNqxtsUVlz/sZAHbGvXipohAMj4Yytn
+f6j9iGHtcnoarHcNRtkhZ4apXXT+kLc/PkF4w7Da6VN8Bu5wbZTBK3fwtnBQ91dl
+7nIsoINihZkkIWPaQFVpi2fo2FZJ/LBQhupgVoGUwWd1cmTbU08ugcRyqYsO+K+F
+66BWCYOqGvp+mDMXzdSs/bWwAAby5x3n7HbrcjZATc5UAHJO4viSEmQhF6r3R5a0
+sO+WsQKPRmoPFpNV1dwPJ78t2KMrvomlyk6X8NoVjBXT73eIYNatGZGGnHEVnrp3
+J/iWWzrSmlqwGYj9Img0G4dH/H/mA4xeatT7UJ14OIutaN88OWd5tZDIR14ZZkoM
+/deOz9UD+q5VFDt9ESMswM3N4uuuglOgBovNB4qqU2ag8CD2cPpDmkt09WQueJjh
+DIVq1q+aYpeCUEQr0RuqqJ46mFnPsqHmXV0svsXg17dgWRCTXYiPAtYy8NqAfsX3
+Dku1gWVNv4zG1bGa5yPlU97VMfz4beHMJ2ts995RYs8D+d3gEQvQ2IOvN0b8D7hT
+J9QQXqokYl9lYSA7vq6bpCkhyycixfWtKlhy6oJJXBJ4HfOyuyi9j2NQLV/P5jR2
+IqGSs0+JDEouFrmXjHK+zSnJ9/MSxv4jos1IgXo0aJh/+qSp1Sthme7jYwXy3hrK
+buDL9Hljc2IDma3wCeNgSrQ7qFMrNisNylX7Xg7jzHpqZmDw94KrAI3TgLwYmkHd
+ndkzAuq/OyZ2u4K3lvyIexZeUeYbXyCxAP72M90YaKqLcXs9zBE6AyTJt1MCxSK1
+xf3ir6EwktecQDrF2qhYD3zxJyhT2mVFM1rFXWYqt0+EHF+wB8lufoh8+R8tNkJu
+GkHSroBdtIPelQp4pmWliYkOJCoUJB6BwLdnosoHmL0Y52npg7FIH3f+F9JK4Rr+
+2EKuyq/uFajD0Yh6yZeeRHI/ASHDTA6J/UkuZMlgkjzheVytOZ6YZ1n5dCao/2sT
+ic6fyFAYZr+qv6yzKcB+YmP1Z20Mn0KI1vCwCKBeXSRzOWVz9RgkFReE+ODhG74D
+TnbDF3EQuj1gjBXs+NL/kKQK/f5ViBA91a4YyvUVS4Xwy4A6+NWSXC12kxzbdRYg
+OfS3Ji2xWzL1d7Aaa+fZ2+NpmCoJDhds6jaiaSX3NZPxcVBhasYb9lmYULAuVu4p
+OMe8H9yCyFOoBGLORl5aW0G8iknyc+7HstH26PY32PAEMOf/COrHzc9c6x/+OPQe
+IKs4M5OVVXnjTsz+dQKYEEYKtg1RKIW/iuWiPvBwVrveJVwYwRFSbcsG05C/bk8K
+e6enK/6/clpJHj+InSdhPAtILOsS6fMtAx08Ch+zheUHtYoTZQtUvsDiWqaiEh96
+OfA8ohtgZk0a3hQV82miD4qsZoi7COIHn+GpCB7fCy7DAUHJiy3UU6ZETwYNd8qU
+km9ouQpKEIYFb87wgLUUOaYsZV2ATU+4GTWTLvDwCe7ej97T8XO5M73SxwcGjhj0
+aP9Gmhl9ulxoruNSDRQe/qU6ovSKm+RQeYssbZymnODRydJGFu4/mgWS41wUco6G
+4NJLAURw86j2314LbwNmCX5T/EGZIjAndNW9NykzkMaODsgkK7K8wquEahBvVmc9
+7GVpUfpT1RoyBgexwPhDFS6MmJ3Lcgz6pS1vtoopHGYuO1lZGdB0v3JnYhZpOO5d
+TZhptVhqfOhjQUxwQitoj4KED3tfP04kEPo4aRyLzi8ERx+14Votqkv+RmRAhaIK
+QnufIN0ChRyD8ffeCYHPwexPCzN7Bu+P2/5iwsmGWLpztosZDuHunao2VwKYe3G6
+QG5kECQe6Pm0ML3KjPkPYYJ+p5VAKmuHnWlawYHCdgYyx7U8L2LAecBQLkGCgFaf
+qARMl5ZrlECeDM5fMI+Z2/vjZQMXsTBFpRIe15Yn7Wvnu/RIz6y6a3N3dLnfN18m
+dq0iRrx8LNCQ49KsT+wayzTUGKCvgd/DqKrJ96OZc9MmE6CJtv9Hl5X4aVhcEtSe
+MCVDgNzeVDD2R33MRiJy3QyAD0dhjBp//fvW5s3yWd+jhx9IVsAwa3tppR4nkzfn
+PHYvoaLWbkgHIZYwvoqWRRR6mIESOFfg2epfPoXhlfr0EaZtjopopFu4DHY0+WIN
+HkDKyXLoq11xvWNRtKmkErUbH7eEoMsiTXTE+eFbjHsUcDOcNpqh1iXxzrZBaZLo
+hADNkRIooK9qOAvWRxmdyJP711MwJpG3L9zHMB6LJ36P48gY6KVN6d8sNyADjqoe
+IdNfpDhPb4hKHG2g+ymGYeQe69TL86rtbnABNm/vJivPsyGE7OH0QY1YxAYIOfZn
+VtTgzeVYitWaEPOhFtsW1i1vUBPWSiE7YysYORyY5UGk5f314IWIhOLbXUnvzJLJ
+nlX6EAyMi7KvRYfjjn1DP9te/oNmhbcjifMItcqC1MyvxN6IA51zYHpHRfe+7ciy
+ilsw4I/IrIltIH/kyCJgKDM7xcCJs5uxmxy21N9WVapC2A4ijMMDfn3CXj/h8p4W
++OmrWohDEjuARpty2fiwG+ryQ/c7Vesxk1pwjCp96aRz/Fxp5iJRgwuvtJYPPYqJ
+VZBfFoC1NKlkhvP7R1EDDQ5DXyf+aIQCp1A+hLNJ4uavZP+u+f6jJJxghlKWdLS/
+BNmr7vqkcVCVDRWbiUeJ6+3JqRGuPW3qRTJILSnaRY83UUgqPcO+y20kQsO+WkzV
+ONWwdoZm4lHwBH7rL/2OIObkaIdDTBBkeTYONmKaE4pZREUArb9FWRGWV1svobW2
+dtJyjlNP1XTLQDoVfieRKmQ4Nrxo/aawX4mAERcqHBdqcts7OIEGlwP1Ck1//MN7
+ioE1egpJrgbawfjJwvzxvgHm4o/uio1BOb5m8dDMRAKaQnK4P88kxAk5EBWwzgzw
+0ehlsC58CFxeXjvrB6I/cQOQj4WMRUs9C/a/X5Jr5EmpCYJsLe3nRzv167qG7W1r
+ulP7POVULxqVPBo9WXQP2Rn6mHc7O40+0JgrBhns+cF4MYev2hVmY5TjqeRFw06u
+jvoDYeQTpXbCcxodhcyigF2Ht5SgvmbR/kQ78WAtBqLIv3cqzrTVmzW7OiQwkIVv
+3PTFy5F6HclTS4Y+j39zBAPQfH5Ywx+Dakvz6wUqiNFuamCc9DNvJWuNMy7Dyskn
+ATWx7PbAQbRA25wxTGc72DkWMygHzB6J5E8vgykVc8oWDQnFWs7gAme746QqnjCK
+6D5/lr2qb2oLYdT/bpNIDVKp/O5Ugk+Sl/V+eaMsS59+4i5le2v+Np/Hl0NuEwD1
+ubbG6AmHOc9Z0RR8yfIt/bmL4uYmgGmfRZp4Zr8sCEupGss1OHtKoec/DDAMoF6l
+6jxwF8ocE8sjY8dZQihBeSPdg/BfPVHS9HgGEZ4YdQ/lKK2B+zbPrjuFLrxTvQJs
+/b6m3CMh9Gob4D7J0Mwtlyxh1c7/6ho09Kk4+EndBhn81uwfcE8FAtOZVmWlvMku
+zL7IYQ600/p1ismVQlZYm8f+FlKUqiaHsTIrv+wHLM5+ugA13m2OKCehi0mvSYwD
+OHLwx99iR4asydlw6M+vGzNSsu8iBEpLDoCKX5xiRYs0cJIScgb4Q+yoovJpK/wT
+Ft5R3HWq4DiLLYXamtLieTggq5nsOWQs6of4b+6L0o5084rpJCBoD8RzvgmbIW4d
+XS4tbNgIdhQ7ABZaIPzsryGn1KMe00/9frouni6et1697rvhimkfa27jnuhrswwm
+cSAB+uQs6kyqxkH7rGdNFmmwFbrXqseliJRb8lauwWTaCBfX3RfPyADZFMtTsr7z
+ip57ysm8ApHJNb7ieXGfqSjs+goLFs6Z6NDASU5MXxHkDkPgdvBzpWBZa8SSk60p
+8WLs4JFq9O9Kjv0Y3/f5kYgelLwkY63PGkZoHW1ab/OXFN2wXNy4ddWv8uI/q3Hx
+jveni2HMT6fJO43RgsLssc0ugmpMlbxR6+BXkRREdIxo4fCTZViga11BmC3Xf/S5
+UP2kRHBjy+BOzpCFDT/54lRQMbYmwbGzcDvgTNOOvNkXY/6V6vD9b9tntW0klTtP
+ID+uoDV86dS3GUMuHla7aFOXqWXVP3ZWnSeRv+2P7qsVMFaXHWwp1ugsmk0uYpaf
+D7+/FWjDcahBc9Tl6xbtmY+VOqroGPwND3hBwbR+59cLOoDzIKVlqMlWp0Sl79hj
+e2V9lwVG0n4EDkW8yPnvfc8j0pWjxZA3NHEc5dHHI3vCQV4tG6R5eDr0zfg7E6wl
+JO5YDobyrlLNUv+ComiRCoz9nFqvHh3Koo8G3ukFnEDH0CzlsYCpSqGv+2a28Hek
+U23LzKxmlneC+roHdOypKz5aGNK6AMqewjNX7CkjynkifIQHOP4fh/7QCSKb4+Na
+/uzLvWdllwU6UGuCB6LuAfgIaJNN2NpTJWu0vXYSKxZma+Jk+WRqjvN++9dC6eV/
+bO6xN+TNcb22Sme5KXCWORAcsGpvXt1CpjSuIQ4H0s38qc89I20EMX9N3aImpAbT
++L5qmOkqmYpVZ2bECQiGQO3I6iAZQOHdmb9ROYMsltJxi/b8GKOXajd5X6Fjbgkk
+6muIW5eYoTnq58l9PUV+ZKX2bTZ1P5kd0PK5+d/NsoZ5kuhBI3a1lIhuV9eXL90L
+KV1cObUrsMrf23Q/uY8GLWDPE5Yy2W4R2duZNNHUTwp5WMTRDb4RmDLb24YHxgn7
+qTrotSINn5ZVGKHVxz9Npc3mQgUVd7GqYluEOffU5QcXlR8GhixrshGUyZiFwQDG
+K5a++3EO982F1emdmEeH9+mNdjxTS+LjkV+2hbnVpGi/xXVKAz2Q25WRoWwTaRiE
+WKIRCewdNPqS2wJrK8fxWtmHIeRzQ7Yxmm7Fchtr/KgfPyr52OGBDAJ3YxxHItAv
+X/yMgHUe1o/3TR48zCbyJr2Q1CFruqvnh2vLdU1ws7JKSIMl4ClpiB6bWj1ggwUk
+/o2St82ZpVzMkg2ejzH8hELbw3qP4QSCg2ZgpkXY+KfilcCZcEkn+6vgTjyZty/h
+VkG63SuOGVjsoX88A27KgbJSG6O+g67MOTkhONbXzPEYEuJh+QNIi07gL4gxcto8
+QpNGALBRlg9VFwoeWmbaNSVj+MxqyaPvwe2EJD+eHNxKbFpJmvJtJ3UeR1C2xPbb
+YA3WIM2E/5hkR9aFaG6ECfeTRmGAZc1k7dhv9klW9iIZ3PJZmjjBldcokPKLP8Sl
+lqnh63SUthRtMns+12+gH2QxlYWe/eFp6XizXt2TNjMkt5kOwMTQ6yWTa1AFzDlP
+dqT4oGnh0NAE1UtYe/dToOHclf5TUxgZb4/iL3dl1zkeiUSIX4psSDQOxPpI1Vp3
+aCV2k4PeA4WEw+i9UwBVC6RZ4JWDUJEkiKmQ3Zm0o36YpxH4brkQKKl5ub7SQnYh
+9ejDQQRKXX6LbSM2Xpr401BxhF0o3up8tWKAiIM4IoIkU1U0OlPB8lE/wZfpsTrH
+E+8Oi1pnC04JqPdHYeyRCLdMSJam15V6/mBpdxNc4OnLWXAdIIJPNPCU410ykJrO
+yKXrFsnO6XlqS4mJZrqshgHQmZ6RTnqf/bjZoXL7nlKfufMOcBUgZDmQZrbVQdl5
+GpeBZNn+UGy/+r26eeTTxk7MBAn7QXlNGc1YAAaKt32phmMhJ75LfiNI9JOYvZzw
+lI4ZGyV8xZpc5y415WtrmcZuSisqBDEIuwggmVfy5QygK0JRQF3KsKX/xCfrfh85
+Lk2XnsMPKyV48sk2ahA+GQHDFDVtdsHPMYXoPJcb1DP/A1LgQRGMT3D8ASfGRrjY
+fPi2yngJ6QBz2eyynpRDMkDpm+m6mgoqI45zq0vVkNtYTyB356s4TrZy11cQxogh
+lEJifUHoBFxQTuxWeZa6KgScvzMR5Xg1USqPgKKbC4LitRuf6aaRZGsA8Z3vXewG
+0x/NRGpNBGK0vEYFxIqmxl5DwEyXnRHFUczZzwlMNQXD+lKtvD0Y1H7z1CzzHz1o
+00/8dh45GYXwjv8lOCeiqVwBkSsbZnXsjpTJoH/yt7qsWFsfMS0J/ru3diaXFTXL
+ckzJxDTuEtGAPUjOMS5/PWKAu3Se5lXdsYIfDopkGCum1vT5o7sG19CWO7RSqon9
+ZTcnJ8CmO0CwW92eYVtRBae6yI2DbpK25G9UH/F4fx0tTFhMlo7/gsLarLzI3vvM
+lRytx3S6Flfao1PYohdC06VACP7WhqW89L5OnHtI4DfjmmhEChhXtHbrq2d4BHm6
+brcPahVsOZRtftB7EG3w1wldH3B+q786meMOCPgT7FrJUbJ9nb+yp4nqsSeku6J8
+Htbx9rAmAAIXPvIawVFvlGH2xhW/x1eM/GOZmx06+0UeErDSesNEdghtbaa8quLd
+DvjbnEqXDKLPPXbuTPj8rJVQzpCRml7IHf0lFjQEmTZ6yX+2zZWXfZb7vxfeiw3p
++hQVHPSKqb0aYqVe+hSquiX2PX0Ju35EHOD0xIQ9Md5Z7QQJxz8JwePHEk5OPduL
+wZqtqK/xgAIQ0xb7V5c4nshhcAXEOEEvj31st4cFdE/1CTUpSJflg4YE1do1co6Y
+hneqmIo2OclSWThvG4SDWW2OgZykhN3Sx+WVP31guWKahES2cSMlSdqB3uJ2yrjj
+J5/h2Z4Oe/XhUjgSrv/nDb5M5kv7OJRXIDD6cdXXpgMHWMfHroyM99ZVXAlxHvHN
+WGWJoO9oB1Y6Z+U3ZSrDynacexNkFrDv+ySimh0VkyWO1bWi0PGK52jhQAwWyK9i
+qDmigpbDavWz/5gDkaRK+OX/R7n75OgZ0GhKgKEJOqRaKxMaLo3r4jMlLO8Jz0pk
+aLAAH3wgOImzi/n/FmUbbdLMFORbovgCpmcuLX5cMCSaMZpr9Qv12enf8gxdzD+v
+LH0t0eYn18+tZUKslTDCA8D8F1++uPdHg0MSmNxdTBfIyW1MJok6z7fgNdm1svWC
+742PT9H8BtOg5ZCiehbT/Tr+mVU8Pr9NjjIOx1A1mzGoeBu7IYtc+hRD7ZVFEAa9
+6s3KUnxA9iKSBp55eZa8a4aiZjFmXUEbIsjA3XtvK2kf0WH/8FtcV2prnXiZcVR7
+Yf7vw73jy4mZjno3avK4wxJr/QMBDo20iSj17Vlz550p8vm7vzc9an6Fzmxw8KNr
+yDPlJNs8rmulsqCGb4ynIHvJJ9ILDDphVPS4IjpNp3G+Qs7oT1bRt9nC4XbmrxOv
+gE1oFpzfzHCtRHV1VD9Sm8fafu/XV0dfivEGhMr5ycyqBqvx2V9gDW7wyUIsVmJw
+NtwPPEp+yBs2Brnn768AbWdahbzQJLusg1Zf8kTtKcPrv4Pekbgq5dPheceDhsb1
+Cqbtd4AfryMQi0tRYDZ/P+oKKREo4fuXN1lKUwWMggZbG01/tcEIS0o7WocVwM+D
+UR+f36nVNpKXonXRBE6Q1DbReb6Dh07sC2MZSDiWqLy+79me+FTHqOlesOqgWNHP
++z6aNMUBWWzOGJGikRJPsO99UObfH5W3nIZR9FHjIE1y0b4o3JSoEzG0TYDrVCGA
++DvUC2FmR1Z0e5AabcJzB2lrHmJOaIDkVWTSI4z8zrWhh/hLrWiwkqUAbYIKgUQe
+QbxbnfwXUs+4/ueoSn9RoKg/IsjbFMA0esHTfojhO3g33Liw0WseTDjFOQ0Mb2NI
+OLD8IzJ3/Gu16L3BBf0dbjkZ58bS9BrWf869ZGb29gCF9ZbVxeZa2gA/4IRKfFxZ
+BGSOwoznTdO6sr2OiKnWmdEsajpSwo7T2srp3FNuSe7aMemwLyQk489hvV5DxMdi
+k70papTqnmCahb+/xP8J9KjhFReVvoTTw/Tg76GaLk+setBijeqbS9bh37Y0eFhq
+zjUdYsHqeyecqeBu/X2+uXzYSM9Tgn17PSk+cEcI//AYdOpZgSxf1JIRobEViZub
+tkcweXa9XL1/3bPQkq22xDA/q4EyWscKSkw3w0GNT+xfgkS6dY4D77i2zu22EgsY
+j6qDrsEmdbBpTIs5zaCnjOt90r9CFEs74hWHZCbV2t6sRNvzrhPy/RFbpfaY6iQ/
+w8ZZ4Q6E7FMS6gyxt46cijy/AvizuNVVYUnC/H2yM8vKkkgKYiumAKk5nVDyYPzW
+3v4NE6Bd0KazvsHuSKjB+RzBueAr71tbFOJSxf3xbPESVjD1A3fQIevyYjFFc1IQ
+VUK8fS9Bxi0awvuvME0OGX1MXC3/tCezmddzAbboAAwjNL3IRcvllMYlt4Az4NL+
+84e8u1KJ/7sEXY90prg5Sg5cQ2kpqL420WHmtAGjHcHExbraxTaDiFIsJOwaeow9
+ghxXCDB0tZXtgvpObgHzbQO6uATgj5P72Mv1WV8SIBF9jQPBHcoY79NAGYzN3bJf
+10c7tyZ2TqLPAR7kVV8iBfwukG0KovTcr7moTvoRDR5FE/Hu6EImDq3K2tgejUbY
+ZOrZULWYDnREQ6B2o9gl1lRZ/d1k2Zf9S6u5qBHRgkhp5p9JG26umTTwbK8Xn3Er
+bf+RlU/TtXbrrnBPhH7we1HPx7BS/UIkwALf9UjiJ/kRroSlSvnggwTURsBvRxVu
+kQABLbi5W/iQIWHwvYuJrL7mK4frbvwVyVQTp6n7k3XvMQZwiBz4mfSR4tDQ1w56
+AtXDdT3G/Luj87IIeRLzA2gK3dBDafUp9xjlZsI/b+0tDWDoyms9Keajg50IgfUI
+mdVicYlC5iJMZ8vk5qzr/RiHJGXsZRE8By3e3n25qDGMLduQVZ8fjOo5WoX+O/K8
+A4o7iFZc4GGHr2OfOdmYgZq1kTYbXgwmfc+cmR0vGFAhSiz95Q1AScchu6n2DmF/
+icQf4kd2UT1mhs7d8rkePsEZEmhCI5Ys0LyA830UliHTg1Joe7zjmWrbxKeVIzI8
+TGXkRshqhPs5dm/Nl8rl2AtMblqVT9B3C+uox5Yq1RdKFr5lAZtta5CdeOMjXIP2
+d2YXa92+tvuVD6xO+cNEp1ODeV2IbU3YXQOugP0XX9BEfavvZ3yNmPZ/MTT4oO09
++p5ryCvYloyIpu/XbkQc/XF5JmOFuUsFUAqbazsIYZ4JjvqB/kQzejvzDgD3o+7P
+L1LDA1pX5LnFsv3TGsJbfgLvCBKRyz4TTrpGBd17irD0YDuQFDSIeKsaL7VBmnzq
+9bHWwR11MBCybrA5X07F3niRRLyZ6J9RfzvV3Xdut0i6mfQJL5pIbhXmx6GLcQe1
+DQvm54NzXgZ+aYP9PUyX+S2QVnYcJD92CfcJ24fmO6TJGKfOFchHTSALHZ6t2Bmw
+eb4MJh0klW5pIvrZMT8jLQGRMkAFENPhzolDqv+v+7qYOAbfhrSh6nPYY5faNIvm
+9dby5VNj22a9XbVrOke4VDzZNM6gklSjUbhnlK4WiX+kIUbIMII=
+=0M/D
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDualOnePassphrase.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,308 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAf7Bo9CxQf8AKQVRpgXAeHYBXTE6ekZFUAqB5CRxvE5ozp+
+zgy9v6opM72FMYNChpskKDK856lnRlRhYB84m25cNK/6+cB6QhUEloab5cuz1Bt3
+lkxoQw+t9yjPonhz/1/9bSjJDTkHOd2iia/RW1bCB61CFZ7Sk431xwbjmGiz2eG0
+Lv2sW13ZJ7627aSEU1OFAx9wglwV7maean9bzXJlYBykL3HdgAHZCzOPEh7rw9S+
+bwoV1jZbrK5rE3Jezyz3dm5HxnbBTzyJMTaPo9FTgzdsbGqKq182AUwCEaEXSAfZ
+Dc4SK/BllZPHSZFKLN4QHXa2cUwoTS+t9SZZQL2GBwf+IZNrALBuwlyICO6qBtO8
+EzRXsBDmsab5XTXdW/s+X7tcr8qjkFtmICDU1m21AbZ98+um2OQd005Ip/PK7Scq
+Ck/gOHJ4xoYvzqJ0HaWjsf+nxo3vExsCL+/Z6G/1KGQpCGiEEFS5W2MFgRhcGeLG
+8OvORoOqlvTKmMwYXwYnLAmwrOu0MMAw8qlB7n9ODTDnT3dkU5DUYS8S3xVijFxA
+Qx6kBrtE5GA8eZx2MwQGUGi3EdgnMfEUkIWOJswImrZoPfRNX8gUpjkwHcZNKwBk
+Ry54M0/mNLcdbbdOdrYcV5K8AEkD5+eYmQsHZklGt33eIwaAbI7Os2NNIsuhn64L
+X4UCDgMkvzgHAMFLTxAH/Rb9x7Kc2lkjPMNqWYIUoDh32WsBxPZt/2SaFdDayT6Q
+52iLYnUKTTeIiVR7ZcnG8nqwGIRycE8pLi6t0zSrXpVjg2MZrV+4+lcnmn5DF6mf
+xlpoa59ykisQfMisAe6Baqa/n7Jz8znGjfzppwrpLomNOYk53tiOvOG153BDDB/c
+11ERD2dXVxI6PBNGXcObd72NYuUJEga4k0VlReAxJbOylW7gXYakIv0a3XTxnM5H
+JO89qbcQ7txtTRBcK6mTWx5YC2PtOL5tfvAHNsrqF/UIYRF3/LEvpoAhr+Buops0
+4F1MM6u1bIup/cm4+2qDD7yxtJ483tTjCt00QO5mcXcH/1hSDP5yCDuWSoZ5sSET
+05HR64AAlY/HPBaEP0b3bQlHswFdlVwMllpkqxiIARstTsptbFHL+buHNcFfley5
+HqYiIIzngnsgLt7Te2rG6gs450SwF5koEnWHaitKixxk+169qfoQ6CAHk+KMSG73
+9EYRWlAkGJ9DYTxrJP4nXlqMJWQc9vQjCdcvHQ8Pm8wfaBFe5MbevN24CzXcJ/rs
+Fet+/vxaV0dcU2CQWy9tb2HO6nFeEVpADnANC+hP3X6un1dPsF/Rzb7t43YrfgRB
+49A9UZCGHpeM8yXPxc/cUrVB6qJkVJVmUYB7CsQE2MsZNU4wzhUVHugVQ8caQwtO
+F+nS7QFinYkYfO6NZ0HN1jc/jR9mdfCV5bSD+XbZVWrnUplXTtuqTqdaLvshHS1u
+/1s42wAIN6ao688iQ9jsczb14AWsHXqCEC4HZyIbVJT314MALBSxtvyWC6j8tWI9
+O+bo5tSN0Pk5Vshk8mKiwrZLTbCZCNFutqiqaZDW85DRoPDY9kum0/YuFs3rc9HC
+V3Jtqh9Z2mh/C1LHDxd66MjN6XgCUgbmJhj7sD5mYDepGjvP9cAm8+ngvbWQDc8F
+eDwle3GBD4/TZegQy2sVKDkUBQ17/lJuccVaLXJQskKYG3EsvtTGnMwIv3tpUmZ8
+kcI3kjGLrxT5I+k3wg5pT9U5Y2dCGkWbFPnrkqaDfh2NdmgNIA//ajzdYeuTeM3a
+QTr2jDl8jW0g2f9iogla2ROedI8jCAa25N2hb+B8owNLwMiYbnoAmL/HfHrgh6Oa
+0ApHUHpJF8j0H1TiR3wgeTHOc1HndMUZJ4HABnkicg3bfP+sp4Nw2399ROtHpoIi
+rooxKXqyn6FAOncPnFvojdvlCkllNku63KTGx0HNH0mXOA57TlvqotDo3w9iQF4k
+479mjfgMUy7YkO0FMBCXFBcq1jyrlRGkFd2NLoYjqiVtH/AOtq2zuAvW6dPlQVlU
+z4G+j3eb9Tn8fmcb4krINKopZxk82a9bzAq34yvi6ABieFLMWllz6l8C9J46h4rS
+27VwbaQ7mX48XMVjgyPnN9jZPfFpThOSwqtHvcyzfd87mbKszWFUnUNhowdeEcvq
+QqrOuTRgD62kXmS2sfe/zEhk5mMVniavb/2cdEIQOgBV78TRx7aXe56hKaZ2FayZ
+3UKESn0HqmFaq/KZEJo84UWoXfFum5mkxxd21lHIkD3OymT0+TN/mcJR0h07pQ0c
+xWxqT8sUy/s/xsT5pVEwC9I/U59GyZnXp9E5n+DcTuDvYA0y0s1G320z5arXlfI5
+rMiXSZpl5cCJixwMjIwiQiAxED6dyocBjddlnYPXwY0kg61DouyOzLyI8IwOShGM
+rdhjgGtUBE7hf/ZMnJ0R/xQx3gUDlEAOePaT6Kfb56z7iEuYfiLpis/Th/670q9C
+h8D6kc4U0t2KC9y3RUnXDXX0d2KSIkv4rtUEUovQDwc+OfKuj77v30hXKHUdb58N
+gqgg4zZOeiqNrfpknxtjtdIKVTXAqrYXRLBvihuzymVM2I7Gf2cIZqXzqup0ST/J
+8m2/oNN1DAsxAOWhOUsGE/LcgYuw/GTmXnwtTa93voWK3yfhRvK13BCRfVsNRptb
+F66jZL78O2zu7AR0rZKT4FE8rkpLj2rdDr19YRxQXkMWoUVF8OBPiA8OaerBG+eH
+t7JuUpm9KFtFFNqOpDl8Ul2V+fxxqx6LtekRulXFwNFG5nOREYBjmopiUcXTOEXP
+IIvi5uHZY4SLeUS7WWrPCASrOgGsTVRj7Ssm+jgp80PqR5jcrlansZt3HXfDSdAR
+q+QQfMHX67GnOlRfFoD9XEGoLG7gBAlCjRm7Ads1HtjKdFO6PFnrfzM9Zi3vTA2/
+p+QQ+KXZpHuVKVIy6UYF70QuzA6uyxCthX9XdvB880x9wHYrL+2F29kAsFm2w8kl
+IOUV6ocaVwOEQtuVzx5Zj/k+5KQ9FxbHmuZIFLktntNi4dRqD/tAIOsIetfObt9H
+t/ylZH+7Xi3ry7gw347CrD5+pD+TCkB/BfaNuaROUYcwOGiPmataPNgvVqeVYOqK
+1dsOJRwZAb6bj4fjqjrw1W9da17ZrKOeiIcIrpV4q8dPYyJi+og7C1DrExEQ7q8f
+1YRpOWKb0b4SUz+L/S4iHEbvFFIsh/JPJuQpWFBGHvajidgc+g51ilnOmkvk7lK8
++TRfSwZxQy3/oltU6GE9BlTNcXaCNM3C1EgwDVkW/t9VlfXJL8oK2RZyHKbBa5EG
+0RNnX6lZsWGinenobCcmn8YgWAs8towxH4Mbhou6Q0RkADPhvKIH1kUOdTGIo/+j
+Nh8+zriU6XCzZ7MQY47Z9boO+/hhRQ6Fl2EC5oLcK96uq6c/lkWj7a847+7dkvxb
+4MBgDRGw+zDPxms+QQCKotk/CcgqXIoWUN7BlPK6IK3Sll4OXBBKooTR0wDWd4ve
+rXTlVDkp0yXE6zXgsMzIIWKHlVup/wOSeXBwzdEAJCCD3BxsKfV5Dj46da0vRpP1
+cA6GMH2n2i5zAavP38YR5Q8GUPZxkD3jJXGl6MU4hpF1/8yA7gXnIO0rLkav/slc
+3KkcxtYVsxt+fFr0JfwglS1vu0PlDvnpxSKTVVqypoX2kItu/vpui/mR+KoIOeEh
+O1F0smNQNeKBBH0H/ZxKOzQmF7vAGUVXIW30ej683JxLFtuXCVjycZhQ26XlKR1q
+c9wJMNSZC4tI7zmehEYEj2zeUMEadGyY+59eAwNK3+8Q0LzAde3H9K8yMTx+nvWZ
+12Ml3qpzvwFGPmOUuSAJVnszd0b/CfXhZPvrxiViBvyGKPeciJnzrmKfX62B6tTf
+xMSeANpP8G8YbUteBy5kZIS56rJqcAI019psGNKZszBi4+Ijr6ZzMDtVv1MDeR2z
+WTY6PIHUamCHls5caHV+1E4Zj+Gp+LpNF+/tzSIrea/YWHPrq8rm32HP9yYWxYdp
+QD3GrFJ+g38E9EFZ7esWZRSwR4axDmwTvg7h47IBWZX51pHPHATuIgen6N8Mi+Kj
+qdxEFwv/Z1CX2fddI59h+Nt1UFIXk7zz5TK5xu2UZ6BJresjVTcyuREie08Nq0uv
+zW0lil1c4wSZDE55mmcn44OADSYDG1TAb3mMcQOMBpbuxj/8N9id0N5YKRlHtV9O
+JawYEdb7xYOYTaXERxv+yxoCYrbK9au/O8pkUh0mBXX6aczEXUOGGZpR0VWcn19c
+qVo4rz5BIgq7AZCkNHx2sFYgs4ZlzzZ65py2MwM4g8jjHc7pmHr0/+SXTC5PqRwk
+zbZEG9BXrBcKfn3H0byOi4ljFiQPXZKXc7vwrYHZlz2s3Ip4+DvYAqcIV0LNo8yS
+l/Ir9082GyVvOri1f5prqB7zLj+LGPNZBjxw9e2i2l+CpcgPQ3FZUREDA4ddvMae
+bJR1jh7x5gPXEhqopf69R42Nuq0eX3SAmPADml0z0nmUGazBnqMN8JySfYZn3Qpa
+xksaMH1ibfdVXxp7yz9K/RgJoEbikKcJ7vHLLJMp40HhxH5508akodCxOzbJn8IB
+lhj0Kh+C7BBJwMyTIY2U15ilsSuIkD8//+fGjfLCOWz4CkoFNIOzd747qtlvwIUH
+x86Mt80WOmMHDqgyO0fCVpm6ErGP4ngNXycEvRjxEFpvuxovRYvYLsyUIQO/EjdM
+vRzzHCk5Gs15pSZu3rHWKYKrSj8r2Fz/tyQHopQxcA1JZZLbyt0psHJGbzeafb29
+bH01pQKMuxfjL4uK9ybGc5tTcwdLMCgZhOtzOuAJqOE/Kr+pD+ciBQvXxnT9LXks
+MATcX64OTZtNiMAhDfYmtoZ0WohNDmOC5XjjR7f5bPs4HntMZxu8g2XNAbuUnyvt
+KsDUdrzK8AgE66hP8wHqACVzDHCiIgaIUANTdzHVdJ5r76D5oj0bAzYpZE/4omfA
+PSilZUyY8sfDhRdeG5vhR8fLVGsE+lbhnOIu1qgsZh9TK2woGoo8lI/Bpo4ssLmM
+x/RB5Xv9ENfprDWvQMd6UZZ2olUU7Yi9mSMW1+7auyE8YV3WUnH3AzAv8pyUtvjQ
+6JAqhxuGaAUs8RYzlxvjAw6+3mMfub4DOp/GoJgLHwdi+MdlgQUewNd/cbxZqKuc
+rlGXh394cYrBLvg70XeIpLEBBr8BpwsLVQFSvney49AC9Af+Ft7BFo/MaTVo9+DW
+8v9pgqISLKOl0msKBHRGIX1uF29D6hB0tsizOFvTQufaRtfBHarz9igvB+LsPGEy
+bmsr30HFnbrVFKOa7o2zVk7WNIPl5tH8bzqXfMXI/zATKD5GIJD52py6RdF/XZDZ
+3qHUTBgeUB79Hy68+ot1hDqOoR3gnlm8+bcEg+tv7L6QnN8mkeBHPp6tpAupXhlt
+Zi3ikD86QKVntNVHDFLEALWLTxhd3daObCL9FWlQstsZ99KubiV7KEqIk+LxWsDM
+/5Kyw+p14mLJcmSTdex9uUGLk9hIdo8DKvcRZprgbhN4JCtiwbPkGGmoRBOLfuzw
+JNeF7XoPDAwBlJMqANxGCdr3VrJHhUIScT/TCBCuKfUa4jeYufE1mZ3wrrQBE5/I
+/J+NkhKpcdECGXjzbopxc1aXZoP8sBzE3Dyfws/fuzTbhXu6N0ta59SXYJ1nC0FA
+YaHgbeZpWMQi7CSeuKuWvRbC7oSvyiNgRSagROYxRuek3SpgnhKY0dc04YL0f8jW
+hVTJgQmD7lBicW4aUY9kb01cx+MXjLvWy2Brflbj8gVwdw/+MTVKceBNWQQSOENp
+rnVdQjtK3OJzu8iofVgYMr3R4FflfE9nPAE7FdAfzipMprIlrj5DTTwFD4MgkIqu
+MMW+YS2t32IWwTq0iJ6XtxRLKx1b6Ir2vqDE+yxQZQaPHCBjoaxLY30dnXVSzLzT
+EL318d1QxEqZtIHMLNA7U0h/nnHeuVtbLx2+/SiUvYj6HEHE88X1uEXmF/E03pRZ
+Qo7EGHdEOHM8eakH8S42aSS10XSvFDE4i+hebQdSLQaKV3ilu86GGAc3WZZ99CJl
+tQ3XrqHoJxjmqeEVzgg/6+1cnGobyCIKOq6sjmcKHqTvuS1idn6vR3kR+PBIWN4n
+WT0iJOjnGYzDtXlp+QN+FiaulgiCe0EKuoPSGdwdO+XOeQ2SmT4Tg2CiZYUmrWQJ
+zZjV1ILups3OAt94+fv4e6NpiCLpSj6e9aQSm1qrAQ0rfyT8GAo2H9bNLUn9LZDd
+N9aTz5Mks0CSDMbGBbL3Fty4DBYIBY8mirVZBQa4W0rkdQQ7zZBJKIcoZXJF7lch
+/HdU1dqRw5ZASPrFX17od7HYEvOpZTR493YX/w93my9YHs9PLjMWRny7G8d7M+Uo
+6+RRDu6FEz0yyhy2Alrqv7UCuJAuTHxbN8UD6HG5RBKJzwFxQxsvNlLCHVTIr9hZ
+K3mzb0Gfm5+OWX8YFoLKI4VAsLJ9jt30izEZNgqcjC+eIJVb2NVLWh0UvSHLVAPh
+tVGgUuJAl7VKNBPbJ3zliemc55nyJsmb3vt+YcwXmzMgsCIe41+sJ5zU0JpNLYhC
+P9X1RdHU37fAXS0jdpEZVUgBZehBi3dvyj1868UIF+1/NQ9LLRcqYtELF2mDTVZv
+nhiKHpcuz3dWryNvBb7SG/rP+TafUQaqd9OnjHXUXLcvT2Wjy1/A9MJY5E6TTzt3
++4CkyeNtSP3hVZHZBhsFy+ET6KSJthHinz61Cc5M1WeFuOgXaPi7PIig03eMYiBZ
+Hk6fl6ScENa3BnVZY8HQLhQz/iPhstqm5dOdusYEiVlW74LNe+VJ5XkguXLdVTqV
+GOXdB0ZUF25d06gXI7qQH/wccfjtCWxrRNQF3q3exECx+eGWlEjgLL/ZW56lJGBZ
+jdLgFOy0/x+y44LJyNYxV0yuXl2PxsaMwoWEFgIa2+6l2KtSTD7QxldanhjUXQdK
+decY74mkBgAy0SyvgmE0LuvPKBrJK9pKn67yJlMlf1cgn+NnnsA3i67JCBUufIpg
+rRqYBAsSlNfGxcUJRkwp0brdhILFfpeYlXAYKmM2ODJIqBFVlkdlkgki0HsY3oRy
+HaxrnAnPaIOK4JftNE786kGGwM7dw4oSK69oThwP/EFhdrZDRY1iO9V7W3LL2hCQ
+of4xQEjgUJxiDO4wILIdA76l/qhnk/R6gCr8mbqRKN812Mdkh7+zIFJl9ySI8Lir
+KHeDk/WLBof+XzgytDurPHJ5KOgCfDyE7Bv/F5XJ7EdphzDijNf5nWlflPI7btAt
+Ml16b3NREzZcwvXgS7Xxfn9kWM6Fb3JJWuaRrEoK2D+kcvoypZdo+m1r9uIGX3/K
+d239B5dDsWXwkGLUiaCl/32ZcKEpoN3EJXzKWEcs3JGxnoY0VNztTPrct9oQ+0mg
+o4/fdZ7qIDUsDiDmwFoSYk+VVPvY5CYfyhel6e+pMrbgRxHbnxJF5Ldtlx3uaRQC
+CJyzwirK342PPE7+/goyDA0vzzCX7tN+nBMdZzVqgONnepdGk0UOnNnGXuGQv09u
+TUCSvXyowG3up/99fNVq9uC+dds/ocKGJPC/nsUe4N4LGW4zMLTr1HxXY0WViiD/
+yfHuBVKqSVF0d3uVydPTqC/mucTeOKJdIFMRZWyEmlgRDZeg8IDKxt0oo7OMpByl
+30SFnw8UuglBIamnhCOMjIsoZEKBG2/kRWAbRU30mRitQsS2H1Xb0aBli5quSvLG
+lqfydn6wyFteKP/FDYA/hDNTL7TOi+J7nwJM2WGNa0iHK86aE6+KSIzSpkGnqrSE
+CjoyjS+WNf6uxtbqnItguSPYYkBRpu7ZRsWOw4QguBxoX9GTdHWSJx4tGli+4moA
+onsMuFKEx9Jf2OtQtD1rgGLFJ29dvRMmuIWsKK85URQ5Jj2bU4Q7QFGu5mL7/uax
+3buFAqYLqT9IVOKkBP1LsIWouQ6L74CypfpbjUW5tX7Gpp6F+HwWQwB7QH8XJ3+r
+O5aWy8lvI1spX/+6gtqamK6qGQhGmNlIsqMVDfeUb9mK6TQOZXnT6R58Osns3i3v
+nuWE0+B0JlKBTtCQUrIEf2MCCJIpAnwAbJ8+3kPGuZ2b31xvhCptXPt3/ofV331K
+ZIDyGjGHdpdbCezRdlzwXh9OA5jRDddy50sUpiREKSMyslH5bvc3kX7ymLVRd7BS
+N8OYcdvsuwLRvzufOr3p7Nu8+yLBJiJb5XCfnLeEIDmqqVjAjED4JY8MH2FKOEIo
+TBL9UDGDAEki+P2wdLAc3uzmsuqCtFqGIeHlNsVKPkThpkyJOCDkUgbRpL5iR3s9
+7+lY0tuBhWUGEtR4G1L7FhmXFeYW2JjEG20wZmVq6HrhfkT0FvPrPxwKe+Qtl3xR
+vzZCynsOSyc4ih/MGYbDMRwHJqPOUoyYVUd8ReEC1DSZ852p+31qzXkNCK/glTiO
+WKi191dhe4QRI55CD2xEkEWC0NeA0o86MxcR41krERc6pA3zCXHwK3Jxh7CsMFXu
+do1X4SNHcXBBbgnON0m0/G8A4hfBWm5xBNa3QskSF6HEgd12JuLbd/2c9pfZjihB
+/caH8gxvSGeeP/GjdJqkVfgiD3tXz/DkAkEhXN9/3FmhsPtr7nE7f6irFNLsnFCH
+9cFvOxQW8NY06Ig5lFDj7iLT7j+SPx94ZSIRZ4wyUMSjq+6k9oOA/hvr49rIICth
+QZJCLfgzBceWvvF9jxzYaafNevvqMUG/3dNxWbIZEG/W/y2RDul3YFPnpcvnPVpv
+IlCNjjiyBV6d6jqwhgybd789qJi/sW5vOeOvWHQskMqYR3teVz+iyUOGXBrx+CP4
+Vij/Um9ywG5Rj8OqKhcQSReTY2TSFs4BM+2uZaDX+1liiDgf1h7aOJiNiqDzKW2j
+5KG03Yy1JZ51D53Do48B9DM8LSUjkWOIkAGtnbNSimE92vVm2LFOXXzAExKVzeKF
+qYTKNCdxRu6UIe6+1IevRFF8ObUopSQs8DRIb9OFx9ynItwJdmkbSBfhOqj4ZlEW
+MB9R7hGQZQ5wKAmcJBJ/gRwn+uGRn74QqYNR9rcU0WiljL9su8jChu69QKCUXtP5
+Db3ei5P8sKG8wvh8WX8LUx/YArFnGi/sdgpQJYOEOCRTlWV7Hd7uLcHusOLUxsnu
+a4OITSLX1FpU/tn/YRFEP4Ep4S1/aA+EzWD+eoQitaHcnwxrIZxCHegwktpO2ugX
+22k/KyaY0DstuvIXa8aj3pZnsGlqf/IgE6Bnih6W0G/2/otIuVyYNPdIAIfI1boa
+JKiPAAzH6jlohCcdbgUh8wBAfiRIuvYiU3VN1p11bWmeGMJZsA9qBVx4VWE+1mZM
+osMZfM46GaIoe6IiPLEbXTBMG9UeE2q9r0ritdYJou68fhPnh11Px3cF902fTE6k
+uNHkmc8Cb6qAFNICorfSxJNCcjZ0mnxFHW1Rf30a1pbDHS9j6yWcW9N2aUofI7rV
+yrv1YMsIr9xnOzb/otC323lkE0puPO5deXYeff3Ayd4P1JKJhQugEb4PlNlxH2wJ
+VQcFpZi3Orb90tjaqMIXasilvI2fM18/kf5DW4xwYdxmzwb5FNOJggLKS5qLfIW5
+gIsd+jlWQB90i0sRtKIHmf+UcmlyvcFF0DpT1ve9+KTkMXHDEXoOqbVLzW04A2Xk
+ni7PR4kPoBqOSq0PJqSNvClhFTbgONyWdMJ4YrHULHFdqhWVHtswt22XGE/ERiDf
+tHQ94hzw4bq5aOSqVfczery0nxe7LaLTZSormH65Lf9EiqlOOYTeqoMZkg80A+wT
+enfONiWgSbJoNuRuHIfb0XSHms0RrkKk/Er9+rpoixwVf0CIisPXeLxSRtjacVR4
+b692jN0GvjGrKbJTfJKBatcW5LPAjHJMU91NIRv1itVyuqq9fyCWwdit2viuwieW
+HSfZDtVasFN7uZd/9MnHRvZQqzqgLO6VJ6D2lOzr3Ir863JDiF7m/P/Iytx2pjFi
+ncUCO1K9/WdOUJO1GLjvVRwnHzI2UMdaXD+0wFKLinQL7OpHPrV0sd+aCIs7gpZo
+hv/ui3yZ8muYMUjIDE2hGYflXJxMAXyQbRonRpzmi5NEvPJ/fn6RVYbLikt/1OTk
+IetaK7sjXNw9LhJbpaqiP3vr67qiGJP4GymSWIwghf2C4auCQcN82ntlnFxK22YC
+fzLQRlmwswlOC1XdOP75upNJrVMty/IGSwKD2s4qLJVGX3oA3H+wyXZg2BIYLDS6
+iP2G1pas0DLNEwnKJJ8dzpLUfY5wpSO+jQaPzpySE1F+l++jYYqwqYOVohF2AAwW
+m5gR0DuNLssGFKVOjhO69m6uSz9a7S1/yykS9pQNy8yeSlw7lQ3E6wNeiLhtgo7U
+l4okXMFijxjzZe4A6ez1/dSZ1lYIkT7VfaqN8sCAoXfbatKrUSsd+aRIm5RgQJ3o
+crO8SyRQwszbp0hTLc7NIq+hkuQ2JtEbp/KUJirEbjlbnYfG/3Ob/d5CBhw0Xl/T
+0juJiEb2Z6BhA7IAwfBr7+2NGdW8o86YgecuOrUZcSnWmPsvGdHvEsXNtEFbXAEO
+OP4+2xUerB1Njwpmq6g668/RR6AcwG/1hlzTZiYvOZjJ6YuNX983sGYHPnesJpDl
+68bIY9YcgTGY1XPB85I2hpXu2ha975fJSSKBD8dTVpG97lYaWxjLR8sKo+cIqyke
+BtBxKsWk/j4w/GUx7RxDnOJdRRFMC3ytE3E6RVsRAj9o6NlYnJxRcpxbzxxhTlYJ
+vuAvrO35qHK6nljz/lI9ZB+W/guggrRaS3gqRgaAiMNlh3a6NePT6yiDMtmVj7fH
+spxbKJQEydsouAOArMWY/t96zaMlzAzEG+0BDfztYmPGBR7DDKShHV2FS0DS0mwn
+Hpz+0ByY9u0FOrfBsbkwd/IsxwYRZnPGTguFsuxhDkAr39oh99b6KJfL4K6/L/yt
+pY2YgtJp1p4L3h27WXNsUzeGhah8FDqOT4w7DEquMVHPGmH2uoB9u6kHZhdVYFU8
+nW136fWI0NB32eprfO/F25Z0imtseiTwN3jG7e17brgXbVV8m6OF6Fa9fxVvvbVm
+uLOZU+0h2x3+yEWmcyhxZnyb+fJMzPgc7EN+lN6ZsfW3mi9k5NB5YewuhO+QA5hY
+AihxCr0Xi7CUSI7RFh2ILmCR5wu2vkP5CZqBSPbHi8LsJCH3s27N81TcTHBFnaed
+3/PMVgdGKcOFBoc/u5spXF5NT88+Jv5vXxGqM6jaFMJ36hD5qQCUI9Qm7kN3ZI+y
+1qLCNGg2pdK+aoFmspD/14r+zLoTWjFYy9HeJ+8Lyf6heJdd2yw7vD4qKhfU76zU
+r44+anI93MOl5akhXHti4L3S8Ey5+nvpNIkH7mU2p01F2Ss2HrMFcqaN+CZMh6S8
+N1ckpgC96ZnOZjvCNs52ogyiQfv7FUT2NfHO1MLZk4TGarkU6MWeo7N1z8PC9CBo
+IZ/Ki9rM8ngqquA5tbRA8xEEZxrY4u/zp3WPNVsrk1UW2BqQWmEPrBpzNxJ/FpyV
+gjg1Rp/ykzxGErBdz4Un4S+tvUU+Qdj/865T6SVvW87Hn02Wd0ThB0KOjz3x8V6C
+j5OPnW3cWqK1TjislNoD+N+rcOw9mJH3Jj4osUiSH0yfy/RPMIS87l8pZmnyPehE
+1CNDqzXi8C/IZE6aa9q9epOvuG1gzypM24OvbVWuFYD0xYvJsy5Jf20R9E+y5Agy
+gxwcqVfJw84PGs6l4e0sUzpeANFobZUq0i0llGrlWXPLgB7lVLshxjnLiEYt9MYO
+6HK7JBBons0P+6Hl0px18nmATYNV+KKIhwp2lMRsEZ8HMvjG1yPVhxW7OsClP8hi
+cIxRR3w3z8Du6Fbx7F9zpKvJHOP0xVCGsZPbIE2KIg3hjjEOTEvrdSG2cUm0NFWE
+N3twwnkLGjVhuMteOofLVbRz6O5sUe8pvzrfTCQihaAYGGVAOYMA6gk7/VGFdY8t
+705aiX5/OsR1Z8DgYgWmQyWuQb7OfuZr++F+fnWN+fxbpW5d4eH+m41uBhL+YaR3
+2S9laJ9CWECPA0DYA5vJhlj1WJWqnLoNBVr47WvFqn04tSpMaX+5BVQmPToqPZjV
+Smoa//9z1LWV+hnNH5EBswhKhFqUsrGNX3jY3KAICxeTjN3of0dE4q6vV5Xp4fJ/
+sPAop40oidZrOlvkerWxZOWlVHEwr+w6hNCWmrTZIDB10W4j5SB2mi98yVJe+ZCx
+QvjYI0POQTgEXW0eu3FI8FCvm0xXuCw/zFquIycGr9C5n6on9lDQdqWINySoeTS4
+RaCZYimPgmaQevrgwlthkSy4W2O7zPzkOpulbvLgnwVaicw57H3IICgYP867yokG
+bKxi8uDE0Qi+S/FGlYpeyyCdlhynrEPYasr9H5l5QUqUIRFowQf23Slb1PAJ/UE0
+QqXAycPI7AhwmhlTMvtwEuvgj+pxM7XxvVXlHulsP6z6pTxtCYhJa25IL8NaaX1j
+0IPDNkamFBNS1RMdh6HSBZYte5vwLVFKwHwIeQxg6JJiq3qbTGrv3VycRK7Qi6ZT
+X5j/EApeG/zB6XLpyjDH/3zh/ckRaNpoA8f3bbcdqJXKyl9R7rmu8fkTyPRK/43q
+A66UpxkN9eXncvwb8q7KH3PcLnpIbQYZfdRuHiaQbCeamX4D2ufKduSgJj1AZ5zi
+eIFmnrtVkfKh+nlk2HYvgUpJNgcgNp9N7WBjzGkiF0zG8oZwkFgs1yvwn7odQv60
+PvumFHW8KoRRrxpKEsDhX/u+sRfeq1ujlqC6Iat2ZC7vlBDlG97KeBiyT068Pvhn
+wQo/MBaPBo74gmust/EZ1Ib6CkokkFedxZgeuyBtqKNoLTPuNLOzTfNGtzD8rNfK
+WRPLOqFcZvQpp+IjjL+srvai4pBOYXCGhpF2lutF167MOmCKg5mLrworsfxkW4zb
+URFF4Qdznyg4oQEk2xbBbzxVaBL1HbkPggDyz5ZruPRYZ9+srpaEopC05fmJMHdM
+tUoY6ehsMxb5HZWrRgtwKj0/99kDiHk+FUPDdlH6VmVuLarrN2FGMzqsKEhY8tHm
+0BFpTX409fBaGYwJgNLZtHYbIEmLHYgr6rb8yppKaXqhNxE+arQ5EHCizA9Lz9bn
+17538Y/Xi7c1LD3M4iWe2QyHG4ef6pNZRgxYHyQ+SJ4+34e5VLkDPKZ8tsJy7z2g
+9olv5baESNWAxksbIr6PxkCKxuoaUxUwbVL11CEXZrGl6Q6pCQNGDEphU5mqE89v
+me7kVE9hQTsRj31q13j/31KctHGc0Q3E0qnzAgJ7nyDvy3ecQGdeHsT6XfNf2gYF
+mwfkpMMbkqcgFMwpA2jHeNxr9xHcMcnwf6nDtt544G6yxsOdKQg3KUiyKVsaSCxO
+ZZsvHqW6SgsaVX8JPt8ekKNLOA0bw956D533oS2WSV7GVWwRo1KjT72Z7hZhAEBr
+Gu9fgdNYvS5kLIEILNKClHSXYzJHmqOdpkHA0NGbuYhXR9b8UkT/9Eclch8lhnoO
+ZoB9B3kAu2i4veILX8sQKR6kFZ+iwV1eSZAxbwYG6HI1/eqoSwOeyRzwGQI8kQpH
+WhdrG0y3J5WQSzSYEU9bEnc4GS68m/DGE8SQweuF87twy+Dh8IZG84vQA7RNrvgp
+Qji/tPRhoD1NP4HGOS5pWWBNy1HWgbwNtedEIqmeDKx+pGUVifjF3QRgGh2tln50
+eQzaTNfLBeZTX5gpB1lW962fAA72JYiJ1aXLizeWv7rg9crqoNFvbtTFasYy24Of
+o5tjNEKne0aT0FvyK7CCMIqHhTC8NN5zpovsorQE+Bl5tyUIwDI5S83VxgjYzG4B
+NzQEYugfvUfkzHLCphTIy8/3lJWxdv/ducPR/qAlZrtx1hKXRtUk5753DgASNTsH
+P6J5ESDH7ltlQwlN2daG3ns5ToCr8bmjsJqqqQIEo9LKe9dXp/DXuAQog0feY7N9
+sSkIFPGG063LmCbjLjS36qk+YYxfVLGN21rfkti+DGv0UCMwvc3PfJ957y2mRK/L
+c9D+T6BiRm5+byez7qP2SCNfE6QG14dCo0uVl/Oc4IQrHzbkKddlMF/QpzqYfwll
+DVDLbLwciFjtZGMOqEKpiriZEF+uOChTLFfOhOo0TRDnHk7q2BSR75fwJCh/MLCG
+iO+zxZdzNqkZWsTVhpvzAhoLmRPPi+xHN3P4mPwtHmLe1WfFxFJPQOzMtvnrZwLy
+MhJy1dC9Yc6cwqzAyRYaPapRR9rj8R2SeIiYQYzYb1zGoxfOMVfF6A+oeb43RPeS
+QnIsbOYQ++WJvFZ0zR0W8yYHSdg59vh9zMm+gFnPK2IA4rCPmRHYx8LW+9tmvi7W
+t9U6A5/oB2X/AwZuY9mcRva2rkBxKbDmOpq9Y3pPVyT93bIl2degueVY36qtf0FA
+GBC5IEOyf4I8tp9ec6xPHz92vHPKaqiEJI4QioV/Fr6qp9eHRrgBVlIlkv2AkfMa
+WH3Yx2Y5T5VU9Z0U+CAisNFuu4ZeRm3TaW66Cv1nDdGEF6uzdJzQYpSxnz37sfF/
+LCbRsnzpMRorlIs3zCIFYYej3gJHfg/QRJqOWnvcUKQT8822FEtXy9y08c1400tb
+XAORoBjNHTVAPcCKMu4bZascwD0BCgXf8SGRYXWExWWntcUwsJ2Vr+07pbl7ot9m
+Qw+zahBFSuM7cwiitsCpl4mhC5/IeWWYzTPvmjfifPe4uV4rIkYinXbGLfte4db8
+bpbSre3xFWwcDVvcqQkXEDAq9CUSlZFOIomKVYFTtrtwyRvaUUu41OfeN+RmGgZo
+O/+cDDO4x/OugemHNoM1rL6wzMtYTTt3YehYEz1If/x15s36mdX3xrd9SBiVG7L8
+pW6pI0GXI64/L/2qro420vTqvVlwPXOkep+/XEXqZJI/McedzxrAuwGlW18cJrLw
+d1LyLD5FHaFsij8Zy60kcHtZpYlaJc//9+jCm60rIN4HP2f/o5Ps3IkAUc0E/2fC
+Rzq1xU7Pnz8CoBMW4qw4j7NzhPk5jp8YRsLU5p84CgXEuHoo6BcqP2OkBE09eTRc
+DNXN0ED29uWyx+/mlfx7LjSKgapvy8WoLQUpmjmm1ayOPYh1YKEuvIYF6usta0G1
+9v4R08jMO+t/qCvUm5Ee75uV5Faw6BtVkVEujtBjKToPs9oaP1G87WdgL8WxlFvp
+P9apSmaIyrU6rqHrih6D0GoEGo2btBMABLdNMfTN+AZrbsVAnjpbBsTHW0A8OmBK
+jJjDlOrZHFiLCQo4U2r5yxS2lzfoc4N2Hhquu+L5Zwa2ssICsW3X4JpsIQ/nXYx8
+2h+BTh1BCKG9Usj8sNmyoyAy7NU+5dfgm1ZpiiEPUTEz8U6RSdZiRiZex0pDHtlH
+SEnnN8e3GVnUqOap3nZmMzaAKZTB8LzgkgXdU2C4RyfqyswFUvpUvAyHs6EPYDFg
+quGSi6ppaMK+qdU9JcM8vgurN5hI0crFMRVLATEBIZN1W8KJfcgQdiaUIq4q8ytR
+Zq6ouS4rdt4B7AQgiSXV1n3JTp4wtjSDkXqrTP6jLOmdrPjLyqhQMinzBSNsS1CP
+wJUuD0fZ9U5r6DdUtsA3j1w2Bst+GSNZyYl3VyI+gCMiGeMmYyoP5CI0sHYIl+Eq
+IW+XB6vALVVNK6N9d2ZV9ElvlFu0BibTYm/D5llsntLiY4KwHOqOEy9cO2KZ+THa
+8p559bOpmTUWMkXS8ahrbuxFIIUkw0bPZt4p8FMJTq7zi0gODW3N6HA4J30bLAc+
+EFlP8HdngOtQDjcKBoGyF1mQXlbPhsxud+Psl57aHAdwDX9oiTpGZttpO1UsYhpF
+F9ZrfY+A53x4+osYTp1XKSlhPs1PyPLFbbO91mg6lq8WFQBrHw9QhEPqwygCOh3E
+IRx+tSvcxfhf2LLcb5X5YM5XBbaijqjOolCs+L08RheFNVyGnJS5vt9VE6Ku5490
+WCrrA5s8OUQgOt0Mrot2eEy24ezDrtT7IqZPHJ13qw5Us+yMHxxlVDOVSxhmC6Yu
+Uant+Cx7NoSgo6+6+A3a9pBya60iWQuYMPHsHwz+Hn63QUHqsS01o42P6iffba28
+NdItMTg2U+CYO2JYVSS1pfS1BODJ+jD72SB0NGhAZMxEr/WZ2tc+xTjpd6MdfvMK
+a5xuNoRd4W0WY4GZBfFsEsAKV9oHDrAV/esTrf2HLsq05jS3hGLCdyXniVhmpSCM
+2eGT7Tfg8lyk5aLYHFYNEa4n+PGj78y1aGmGwRRk2Z4gM7urkJg4Fhc1+rHRGTwi
+iPU520REor1KOi5b7gCG72i6VB9XM7yMHcyuwXGNZl8qjsc8yXj3TFeOs/hgW6Zd
+SRGqqT6seonYh7cQdX/IorUtm4JZgjkCll1H8gEIGtAFBT9FwRK+X67XuKf0h1Lz
+jMWHaPCZNGv7A5Q/k/UDoeyocpPY4Ycr9iCbc4beL+BaxXLPrw7CpPvS8EoXeqiv
+TIHpStvtGGqrJ0S0QGCUSG63A02ZBR0v8cbo+Qz7YtKueNk1E73lkjVyqLYmhGRq
+bhs84mHV3LMlYLirdjCgXjBkJ1gXdAqCoBFF1ChhzJ6wY9o7DKk82enB99OalACz
+8Fr5JBR7EXalb8VssBh98RFQIWhaFhgMQgPV0AbOzPtYKGy/fpal1/e4Booadrph
+yA7tq//1tNnHylxV97rLdZ2CrXbXUX0mf5/q5+aei/413pKeIBWoOqaAHX4VNKsG
+tF8yMm5FJfVdwa4yXuKAkXIiUWCgqZKESWK2Nhn3W/LJygLtzkl5sxuWlYqzM9lE
+7dy6KaOVdqrVckiG1X0lSD/1Xk+WzmybBqA2wysNAbDFPiq7DYVjdKbOocD4F+lv
+2EC/Fy/Fch7oq6areU/Z53pWaex6K4asaoPl9ngCJbY4bhfN5EIUgjKIu2Pjf28G
+Y0iKKjyPqv1EoaUFfvDxklVpdJA1hUnjE2AWfJJYOCMOeg1K36P6rYVM4tDF2sya
+b7jIU6uGIvTsfjYCYtcnMwfv17voxHcHfjT7A3AgjWZ2DQMfKO6gGncamfhiuMj2
+CdPE1D7QeTLH79t1KonOGFWRy2zTzxqcVvt5mgXXjZXIBUghttacx2umoJRSx6Mn
+Wgl7xyBUDES7mfGOr8qH1yPsPKbHLS/IBCoOmvAKZCC/o/XAPhVjQ4IvRNX1GyyL
+IycmkflmPjeC94ht+JZY1N6Hh8qE9I49P7Ts9EDHfZZ731bm8gQxbvthbl648vT1
++Lj2OvZKS6BBB4F6Wl6kKuotLuZHMYyAY+Uam6wFjTzBKouGu21wzjCamoBZRVmU
+9SP90sZyX7CKVq0gWOo3XAyYwsSPPO8RAv2VA4QJFkxqz9YYdroy0DuIPeLmfHBW
+wa4gvBOeYmM2cs1i/4dukE46hj+KYIiNAvFuDzL5hsfLs14Earu3GGLBBTllrStf
+aJgUhUvarS6244+crkEow8CtGR1Tku5wn52ct0FSZvcyOEjg8pONBCJa4XhsjRWI
+1hlighMSufJFiV9G7scVmV0IDyM12FCwDcNap5sHNpAk9gAmH5KWX6DUBt5Pj65s
+xb/TezSQa8yZ7nIdeJdhxJjG6RlR8X83doAfyocYhlQDZ9FegpvPfXDNegXeZL9M
+b2giu/46ebntOBPGMZZceyohEw0ludB1U1dtI6w16BDhza33g5fyK0kSMy+stN0N
+RzEbdQt8FHhpQPQoPPmVn7R4j6+B6RrCfEy+rLpmC3OcGEhQZ//YRNFyEP4hb0bq
+66bshFkMwTry0JyeM2GJtXbJu7HUUMqePBgYc2APAYzj4BFYPksaVFZyNd0QeNi7
+IhI4K7TqwNMy7SmqC6fbkbDoEmGNyN1ifyzeAgxlvVIAxrmyV4jdxAsO95pHNqCF
+GSA5SsxjTtaN2OhxW0t8pPlFCvGH6J/Nl2rr8QSLw6RA1IznuKo3wJgFVtiliiyQ
+MkMsBuLKbV+phgiY4WdbyHflko7rOgt1ZT/r464otAv+B6+72z2ipjzBiUwrLMjn
+njD9/zwd22DR3+pj7Y7b0v5tricCB60wZ7E9+nMvzejpBG9MNPnjLKBBKKF0tBFV
+IpBGzaD55TCVqtnzZW1Py9r/PHyaQ37FW6nyT294qhVC6gRUIG59E7w5VWfgZS8r
+efoM/eqtkF/ooowvIwsKSq13FLohOjR2Qfh5ve8uu7rVaUOQS8vNkiDSG6dpzwi1
+9PRKHQgl/4K346KTTQ1J7GQVKkBXz8urxzLXGapg6AhtJFE0KJpMAsd6n40Ykg7/
+dvqqjf/4hXEZ6vaPWRqv/xfuQsX3QAZRMUvxDsMPergwddPAxRa3dw5Vw48bwHut
+IoqTCd5ptvuZe5yXTaWeKix/rKJJYLHh6zScu7X9a/5aD5s25sHJhkIegosK2Ovb
+WtXvXwpychc97g30ByiKVq+36FC/t/SBFRgRIZhXaJmgbubvCWWrowMaM1LE0xSu
+JTkx5fuvUf7YdnxNpqvJ8Rz5WUiY8MA3qvqVJbl72H1OhHhtdiRKuu109YRGyrCF
+nhkBJnTlx2/H5l+G+vg+bUfzoqH8srxQe1/xvbs6tT4Fb7Dpz0ATP9yyu/QVp8gY
+7I+jFGtLH2lZSmx3KT1bYDJeyV+2c9FUSg7m3vuzEjcRj7Hi+tvxIRxbYlaAetys
+RVKsaaMMB/qbpHa249DnQwuE4DgChbs6HOWVgd274Zf39mxz/00pOCoDLyZRmk1D
+d43oKblxEBZ0SjQ+3GnfMfffoi3hrHsxE0TtLg1kl3w7rt6uyrUZrZPHHcvMcXwR
+nzMjlAYClHJxd64Wlv/fk6HNTnRspbKNLPi6yjaKNrtL8XnbIQwblbDGNy0FgNMr
+oiWJ7W1SE0J+mVMJ6hp7VJlPKZ4kxN2VJI1KCF+0OFXFokmhX4oj9TTYXIiy0/nc
+ZXUqiV06/nYmfLd3lFyrGxUhEQFWjmDjoZNmZwDtDTENiEwJywMpgsxP48jT1P5+
+ZikikeKF7BHvF3+JDE8PwhCTl+HrLJsaexJyQhF7Z7HvA94Iaa9SZQsmLewpg5J4
+6bMGdOrJAvUjUcC4wDF1LASueoV9iJox8PZjOXuwuO0/A9JOjh/e+pOuHHiU/Ale
+sHonbBrUcO5BP3YU7DyMOns1i0aQKGAXZsnfQR57V0iJaZ+BLe6KLbLeyGR4iAtF
+OX1jVjLqlsYhDlLi4ppIZJhkb+vykZ4CGggJvP7L1zECSfixatXZMoaqo9iE4Ks6
+7yHqL2al+02yrMjGgevbbzP2VYyHoR9SmZm41EBbXbj/g95Kw9jdHn1wPP44o7p1
+xUvOxeR8F3/DHCLXImURXiGdadEdxwQQ7NajhFbBWRu0PlrxwWnqaB+wgXygC4QR
+zn8J70H6oHOzKW+bpotpKx2pVXZ8YAXaZgi7k3L4CyXAfYYizw==
+=YlwY
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileDualSignatories.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,300 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgA3qOZjz079nWcXpFXNu6GWBTnIOVrpLhQ4mUrKYsVgFKF
+zLdoaX5SyGagQ6uPyS3XcPUT8//o6Uq6t7oA+hdcUv+5gYJ5PmunSLPYzOTDN060
+YUnSN8MwOjUM6QDv6YtH21oFHdXq3wiA0OaaZ0jLd4CsQ1szCQ+jiAZIEJ/otikb
+n2zv2nKRGd1avxu+bE2uMK/xd6rsB5KNStBXKBstzYYdCVS7tsG0It+7eqzLsi38
+aMBhDxwTMY86vPbDul6D4DWIf9nrerHpJ91AXGMISC+NPiQCHr3iktguIkaUlOr7
+ubUral30ZCgCydkJiHki10OC4Y9dHLItdfyeesUUlggAkGJR5G0yLZTi4yA+xr7Y
+Bc3gUHDuftFohiDXmUHeUbvulioOozaLm0b5JMhKpNapR4Lo8C901orEUrzSadpd
+d4dKrrKxcbUZ4ymsAPkwjKzEhG+1gKxD0VbZMEd3bFkmFUlnBUs45ZxMd/XrwBv7
+evxeWfpdgD1aGGru9ZH3GXdISIcybv2dDuRHdI/HCpJJcBin2Vb+fzwptDlSIPHe
+P8q2T6BMTf4uUm4d4CGxCv8meRFc9LsbwbarS3+0KvW1QrFwG/L7kjoYEEaT5E1X
+OKSU5jGFidr63SKPuCPncrIWDN/L0Vi/+Ad5hvOQ7OfVWwMssJQV0SZF0C2ACkyG
+s9LtAdMOqZ6nx5FKjEd6qJ2BBx4lbbh6Iv140UR/2H3d2vr0E6LB69BSS2ssPK0V
+DwLzPIaE4eMm2CbGvOmDv0hPGxo/ax6sLtjiBUuydFqxm3WqmkcqEI+2MpRS+lLZ
+Tvr26Wm9GfQ1oWfafwbEoX5s/ApcZgJ6jj77lIZtLRc2+TZJ0qDghHWY8tqXMjOq
+hT0y2xqJ0U+Pc9GB8qhXyiB0g0o3fD1g3/oyPuy6myIRQjxVl855D5mSzTjWlkuF
+M6BiRKA5YC6NFLBModCwy3epyii43XdaKji4d7cTu7xtdCcutV+Flh0x515kZYo0
+32imD0+MjfzX+XqE7plBVP2yfX9SzAU+shmKyc5acJCAaiIOaaMhHWQJg09Px29j
+qJcfLREEMe8CGsLFREPhrCkC85Wr76KGbODUjhV1sa20yVEndvRt3Lwc/oZTIkUT
+5J8Fvv2qNBqfALD9NSI8kcRCUz1jJvpGzJymXSN2t8v0VJlkpBeXymf/eHu7FI9+
+c5NyU74rPTfZ2zW8JDG5AwiE68Qp9P723pzoZFDHaY41JslXd9AtuStNNhNzKhNZ
+7yVzmBNwMdYcGuTYlIlvVuLJ1yOr39U7S4ZWkuso9dK3f6rMF6fU0YTpiHBaMFa3
+IaSGquNIVh9A3i7QAVcdt5ZWHTP1t2xTnknjrjkRbqQ6iH/REMFfM2WZEF+urb/g
+RN6Iab8LTK6lwnHgCHNjXvvv+igcmL905zw0WWzOCx6GtvqTaKXVEPII6duFJkPv
+0hYM5eS/b5DdxJgsZF+kmo3ZTmKCSbgC2W1q4NQFH1akergNtIdz5WBpwgfKWuui
+chHtZxq8t4zFeLo1Vqpo3VcOtGbs4xdOZnkAIvXJLACWtPI90H1RscnBMyGtPe7P
+4YeJMKOhZo7hbVKyB1acfCCCY7j+UFzPM2MhgDMMGa3QMLPL8ltXwSylx+BOnx+y
+EjcZ+kr4hr2q0iBgLhSjt02dxOeVpBMlhMb7VM1MhCwPFRQx2hpSfJcOz/ECaFgI
+7xVe2kUDGlQrHj7KRppZPmLbWjYY5RJ7V69OHZZGsXbMjUU17xTx1/i+g6yWNfsa
+qy/WhSIJSdi5o8gMzlsOYQJPntRM4AKXvwKIk6+ixYr/a9zIziIGiJt5+FBKMrxp
+cAUP5Phm9kHykDaJk/bcxWp0LmFjJpt14lOcwFf4i8JQ0P1Zt0VIqITX7t7D7fcb
+ieiH9vWclQ+qiLvAsjFSnDDiMqy9kyuTpNIUOln57aSGf31t0nsND2/GuIOjlwE6
+QPeqsH7JBWClzcs5PiuNdzMwWsRwzpfwG3TIEQGw57ZzSMC5M3TJHbbrJOfMu4q9
+xjXK6PyovWQ4m6X3VfAD8QxDWm6ndY/sJ7pcUCFzFwbPwPIOhuHQDqTETSUa6e3F
+9CB/ygCZpzEYV/d4saHqxLF59tK/CUdj/FAb+0LDlQXp+nOehy5nKkn6IVy8TsHy
+aB+f3h73L8F4BpTOOdDCn0ITiby0hLvtjgGGwJH8KT94MBYVSD4a1xT+z5WhFilu
+SaXhezBy6DffX4d4xaa9f/eBWTiQLa1k+ec+OPlAeZ/N8eEi3uwUyMuUgBYm6B8J
+TcUjuZKvd4kxyERnQQ78dOITglUyKDvS/j1WQZpWV8V3aWTsWG7Az5DMNV4VCpmn
+yJcIaG/bUO0wRP8MMyQ0zRmko4jbhZX/wMChjuOD8q3yoJ35mMsm2WtAm+z3RXi5
+enH02NHjfA2h4j4YveNP2FG7wvPyzvB2tlTjtCodab0lz1CLLfuvPw6Iv3yuTuEy
+NH0N0/6xJXxu0G229mrF9DZJAKzq/zFlu0C/FBXszm+5lp6I5BGzSK6XjxTkrfX5
+bidi1IMl6/dy7kbH8sYJIGeolpE3uCt5LRtEsUVj8qxfrCZETQ2bFjboFOMXrNbf
+bQbMR/wlmMOeJdmd105LmhZlhkcyA2OcBK5Vu5iq+cNc1ptt47JGo+XRiKJjFVGo
+bi81iGL++3GJfhaZUZUudykGquZDbpIqFqr3m1xpYlUa9nVzRZ6aLAXAQ86ulxxL
+Rwwuyd2eXZgxIgq9/7FGZNmlK88HidzzRYR9xZ99ELHIiF1SGwsFC2WJc+zew1rd
+zYEvl1GvOUvuf9YMEiLWM6L/kd8DpPfGbwuvVp+cObqbKlFx+Z+Te69lrhfuL/4i
+JHv0m8TKyPSD9DUIPc5QoEgFh9HAGIJwi6DzUnZXtYpTlqfhNgC0Ql3YDP8aOLZw
+S4ebzpL5RQhQeUYND+MPSnXd85MHeSpk52molhPZb6w65lEs8+K7CgT05ewTNDFT
+MfcQIvAzld83G0FYtyhWTDiq4Dhlq84L5Qcu8xu7ZbzuzDZ6rAdeOElaUDJym29K
+h2GyhvX3gD5jGTBmtNZlSLppXkg7HwM3ziC3PZeyqLodCQd9HxL0hR64pe9t+mbm
+hedmRmSLda2chY2NzSg/1tGWZQwsRcP5lu/AuOF/CyH5n6t6e+Hd2Fj4+VEGZI//
+AIysHNJlwsFnVhmZR+Qdusn4beJ9zyOCduhydqcCuyjvTZrw0GGAITLUnRrNIbRY
+u58FwTusuCWGuCxlk6akF4P+OKgvRl/OIJR1RaIX2M8IYoYJoEA5X1kD1hTV+nlI
+t7GduCBHGL0xDfVdfctNjPsvmxOKkthhHKg+EeN4B4THBUZbQMQ9ZYyJizg3icln
+jyh+1jjCpAcZpC7WttxOj1pr/lm2UtFiwqN1woo2rKMTYCdawM2sexkdGn29vwq2
+J39ZqPDjcAkV3g51uWQJo/Qp/ShkrsVUWTQcgT7VxE2BxDDJv8ZJevO3gbnw7eCy
+h/sB+TPSwvqF8SVUDkvNUpC06wttP45Ms7Rd6ONlXrSKkEkWpfGxzFL//2asKTnV
+A8uBVgGf9EQfXlJN5UXcGLyl6M2NTKxDtcyi2rBbcUl0Tg/Ae3dtpmEnX3JDrjgS
++f738/RMd+bA+hjNmHFROhLICgC7Z7ogh2q5NIcxJdBigH4zMvT1HWu7MQq21Q6m
+boVA9HvcOpkqkyieXDaUMfK3fRYMYhGb3m5lee0sCg6A+agF3XJrKq3TAAA1wg59
+hQwySR94FMlPqAG09UcWhmmT1VQWpQdaTLZtCn9HZ8jDZB5A93Xu1f2kQhAlClYy
+dWE6q0bUMWwDUEaZL9r61mG2NcpGknamMmKbTqPud+H9SsN/WKmi6JB3azO/Z0nB
+F15x/iiDN3vUt9KggKwq8siETXpOAEbbnPlL+pHTdpgAjTvnn3lhTc0DkcvwbePf
+1ykDOxUT9EfKTn8BILexXGiD3e83QRKtnJo3VH7k5YRTeYZhbJSRygxtlw7O4jWh
+D6et8xE2J/esWJFko1ZcWmqq7qC07r5WuWqBo7H6rHQOsvA2NDcTJdf/pU0/ACAw
+NbuSPdeR4X5vu2lgwOEygK7iPt4JiCe0yjW3J47ZonnYpI9Wth9tKlM1S9167nrD
+d8lHuiqJzQxKmUWmDOO+LEjKIEVlHXaDhe2NACzDuQAkFg/OPoLf66DuFlopXrJK
+Jl5DsxzBiXGRsndtqVIct/XQ39irouO2WY9gz0Xe1Boy7S3En8Lj5NweMVxob1n5
+A2b+3ZGirk0ZU+YdklEFUgEVGE+3ixpv+/f4ysnEc/BEXS2dAwyUvhWFWCD+jYf3
+JTGFevtICDMwnN0wnHlfDpV5Il1bhIan6RmHduZKYlX/gxDPF2Yf2u3UysyqsInI
+30zwHx6OnAdkddBE2dK6jXuuhW4Xn9BR4O/D/EBNo1CKMqbuAyGYpIzuH2Nm/HgK
+2TPbXLYiUVZMejIHCNw4v05jdQLsOe9bP4eMcpJcfwMnchNVYXZV+ZAxGD38YIH1
+g0Scw3BJmvxQIfTc3zRlESVVaUGEvKp9UGChnzvDXy68HSU+PcRwY5//T+NyJKp4
+Dcdrzpht0jptWjzjVoBaGi1nlVO874wNEqS0i14rqnGZoWN6RixB4CxKzpKW0Rrs
+MLzO0AfY6yqDehYqlNlgZjuU+wJWwgNwK2ZrPdz2Wm7ejhAAXkBv7vxZA7FKtyqx
+QSGcBdNAYLZHhbrNfV5b5lQ9V8LLdQwL7zUQ9yuv8uLG3NDNsNa22aJnNcPR/Auk
+A/BeLK9pGd0pzJIQ+ynMWhLzU9N/GnRSFECCNEDU/AnKmEAbQrCgFrOouzT6+V8W
+pLpqDMVpj43OMLTi/lbv7YNB6uU0z/EG+QYZ1XFCJp7I/2lBBpBs+uaGRbtBb0hH
+KqHss8IIG50eaNyu+Q+VOxPuqX1yR5hnb0OHddfOBUDHq/phffBIytsVbNZzSKzx
+Yuq1+W+VlsEEnZK+/tc4EY5HOk+7blK134Lt3dkqN0LX3OvfI1Nv0rysAhtNKZMn
+L8+lPJ4lnEBGND4h/hGM4tmUqorjTH4XvIhFnsP3Y/i89PvSGBeyl/Cg0odRtxP9
+jKBZa6v6dQ1EPCKaZinIhaNKxdHe5nAeemH9X4c9BW60ZGXQwtOuO+KlzdrqtnRt
+9gUTqFhVCWrA8EviOZ+/Cg8jMSLJcTY+S+KaGXHw+JoW3P0aL3ZuDk1YlEkYh81x
++pwva0Mb/zF0dv97nq7thlNlZV4zlLu1WAwT3PDzXFRzbAa2S9wW7TWbI586VcF3
+N34odX8bXzdToytmBfZDuniIpft3wXVqW6mkzvwQgEs1QYlWQqNQpblySWJyiEi2
+kuuUIus4nnsoOFy0+HDe4bumwCbd+gSi2A+9v93geT1n0HKvRyOjtrd2s7xgbOgB
+ifum5vcsIwc8JpFxViFlQZvs3s49obJ6NzCyyGaSHBFjwacmO8RI2buWd5kXsQ5m
+FG8RfW09l8nhC8oZtG+MWmzHgcaLv/OZ2MoZIA52qj61TlwqtxLqkqCrFLobRgcW
+UIvQrUWwpaukLgGJS6d4I/tbrBxxgW6FkAPh2xDc+ZdiZEh6FLttqA9SVo9l1PfO
+DJQrnmvnsRqw5tswC8XvTKoem0+BP4W0eDsM3q1fToGxePBgzKZRgs+OBDkvXA18
+kIpf+CfX6wOZjg4vtXBMoXq1xMF8LDzpHYmY0PMrO+xia8LrfPnX5zfUiVtNRG1Z
+wMYvsq75v4GqXWd1yFaJMwVsVmYK0FTQ0Dlj6n6HI5utSO7F/ii945TtGhCcZpBo
+/ujdbTQfcTMgGsarmW/EmVDalMWW42UCnSXdX6Yg6BRp9v0Qir5+KfutRSsh8HN3
+XcWEq277XGcITimyRoZtvj0ZGoACJMP7XRprrYiYOZsZTIuzJ7Lax75Gm1H8wBDT
+fzqF10XofWUYWvWuRe83naE7NYgvmVWbBy9T1rlxMLNYkw2nGFvKJ+cG92DECb5/
+rFFwXKUrIlF4GNpuVYC/CNZlKvdxDY0TllxTTHGWzX6qgefe3z3WYFcXLD5+gZwU
+Pu4xyP0BqMNkU9CCfAMI+wRxQ+r12A02nOD9U0R7VxMJ+od5DaSygURdgqtoeOKy
+hS8wtjR7ngKbdFPXUPiwdJ46M6BzAU0p74IIhvazGSxRmGmcrYr0R+x3E7zNNdH4
+jXDC/BWQG33PqFIGztO16AnPA53bggfr5cbA9eF3u2ZBdIdvaNESdPvNhkk9UaEA
+9WnCYBscXfpJHpCHdsFOlLLdlpWQG3gc3QGtCJ6jKPzTXro4XJBGSmROb2Gsqfad
+dKylyc8ljUwhJ4U0kMH917mMJYCDKbcwszGZHu52F2LRiemQoW+hax8ky0W0snXZ
+qM58y6SQ14QN/TIzc5uQvlLsM39atlFhGaC+4Nq0HAufPQoTfRvo9HdJS84nbN5Z
+9h/M26XeSXy4SuCbDG4ckHzvegyIdm7OzL3GGnpPpbbJFvLzT+m0YP/n/0gQu5sP
+KR47PCSaEplKQlNsdBTbFOVK/KSH14hhGTMQ9pCFu6dIXUzAt41+VO6HOO1c2Ywf
+9fNfZzWRWSoqD2jhzK7Co7w23Tre9lTl3Y370kfVMbDYhEa3i67JJad8jgXcCYuf
+fHdsj7GfXFwGVI/vChzEG48NDEIu19QHWt6EqUaKFkQ8+o53IzUwNtEGqfal/QPo
+g5mL4IBZSYwa1xMf+xoyVqlLl2ut9+Fxoauj/kH1/yh00LBS6U6fC3le44IhCYFk
+4wd0/3fcsO7GlUndFXOKP36Hj6XQm4qWY9eqWSe2Nl2dBTuyxrXhJkfVC0Ns2v/R
+125f0Un6xiPyXSGkuDSmiwud07LAHL6XWIhBtpbM6sanGRGVuxUFRM3BYsteZzFk
+dJnfm1itdbhDt1JvNXJxkGXL8t7wIiziRwy8zPy+lY2UC6AdPYAJyztrticEVw09
+YKKBBCeI+t0TQFSr36izkJHZvxQKO3o/0VZSi9I5p8iigdToBwrgSjB/W70SZ2ws
+UXHI9kntcsn8bIYEUwLXjxp0EoWzKQWAEWzCZ2VkMMyVAVILqa8CVoEQdRgDN+0o
+0PZr1gQkmYkc6SVIhRoi34pabY9lU36HTz23FiikbqlU3sdCLngfDv3rSjYGqCNc
+f+EPcuM6fpQPGQEAndL2GcU67MoVwNyJWY5IGH2UxhQz+gW1o5Q0XqzDwdyAHJnD
++Vt4Kuzy8sglMuk3sX0PWmFOfuR8amGdcm5uGRv1r0fUOgQPI1C2Ak3g4DZBY399
+juM6IP1mpCJaDVmAyuyU5y1IDoOCAvDHyv4MfjWRxBKy3jDD6lKdXODvzZZosiJG
+aLVPdNjzG6fqZYCap2Ta/YxUl7yVw1t1exntsZi3R/Rmi/WqtwCOFYngtFi0To44
+rkfGUqBFX7y8ujrhavdSHFTrRMwT75pwcIlLRz4Gy6AzXgwo22U27JZvWzk+jgqd
+55pr8mxtlI3FlCPPM1MnjIr0iwHcSMCk+HbRR2rm+iB/miOajOI7KA6mUKer3LKb
+CgkvqSOO5JDSOzzqyHxdvnygWo5XJ2KiHk3xiJQgzdMe4hclGVMatrHBxeT0iUyT
+B3brwNzNc0v0EDKX2r4NTffyLdWZdF3veBZCT17ZFJa9/8O7KOqtvtr+fS1hsbQi
+q17guL64qKeWIHSkcE7Z91IXbk1+3pVgACRIwZjxSnOwRVUVlE5a75lcdkPnelPX
+BiqT4uKProGhx6eH4ojbCCxp9WpFixoA04WCEUXnlfgNkXrXOS6KEt8MaueZ+hcS
+TjvLXd/l5vDyxHCvG7/cVDkPeHxry8CMmICOmLsyVbxw3K8RdqeRgBOvZv75u4zv
++iArWZR2ewtTCz//sliWsflxsgwWbE56v0v7sqXdhYE+fyz6UYAdKg99CTne6wNS
+qH0GCXnS9li6RVY5zCJ2lLc/DlVXGNnsL1Jkibwgo6ECT0/aQ4DTwbc6+IrpxKNG
+U5CvC3WC3ToAAr3BaWU6qY+DHmF4IU9uCdfN1rMparRH8Q5HYHLj7hnv2HSVC4e5
+4PXOX9F4bPXq/FjK7vY9jX+eEPudfOM85u0/XQj1083tuOEw/rvsI4uRY/Ie82tJ
+tSY373a//i+wMMOQ/16j75VUVuCseK11J5x8SrSBKJch5zjwovLEUp/Mx8jWT/gN
+g1ECy1v4pwynoCyD9WYKMKc8jg8Q9OURHMQYyXYRPpN7NDC78EVrJeugZ5bCmO+A
+aMQAC1WULx+OslrQikCDjXna8Hy/Qggj3THe7rkvd8UmUA7gCZzNZ0+bgGWA53N3
+RkvBciN0pR8U2iZUGzEmGbxWl8/LinwfEpIWvo1jRzVWyY/gqF7+3imOxccDwe5z
+wvdidWKjC9Lwfw96FU8iSOReRWRP7zjBhQyOcmnbTzousCXrDCppQcs4qVk13u96
+EUuaiNGatv6zAQS1emOEL8lRELUgJmpPPbiLNB0akwqLZxQEwQaWbaKej84I8o3p
+IJBynnhMB2EoybJxca1GKWVDH9CrI/G/O0MDc6eUiUWPDJL7vhZZeaCIeXAPoqdC
+4Xv1AcNf+ZiLZUrkKThLqKpgAoxK29++u6HGWflBwuseFDryj7higCOkct22CWBb
+krUC16sWNiAE5oYIZdBfN6KjYqtuMKA5wcv+qh4Ce/OVGMrnoY1H2BTo42L2/GXQ
+QFduZG+WyR3y+odQ0mnIgbi2v9MbwD7zaAZPjKWz5uVkMUPVyA7U9BnfUs4ujKhh
+dUkv2VzLeCQ9sunfrmEU8OF5ao2n5J6uQxm58TeQ/WBwsQuBoyIDlZcdq1Jw4mIZ
+Z2sPg+J/BHyEoomuuNoUgGtwBdhwAIheyYNT96jmM0or1cJcl9sHZ31cejesBXpQ
+44bI2yF5xWtjJyu6xd2R+Xc/T08yBJ0l5Teh6y0TswKY01aGfnf/z8Cl/zh0SGRi
++/iicBuRxb9t2R5bucAuB23DhNg5iDI08EFNkn0DvGofVJkNfqHBKRoPaMLJ8+ff
+4Tqg90LUkls7+fFh4gpr8NS20MQQwcPAouyzoHwsVTuAzBmmmymFFCatPSbEMKPd
+RhiN71+keKm5VwdCI9xNaKN8pjR5v1o8LvuZ/AdSH4dENX2KEL5F/2MCJ7RddzIB
+aPrQVOiqI9JTMqep2OYAQRD01jvAltHTNRUNzAtm5XgIOCxh5y/DfJNylkcPYkoI
+emHoJLToxCAquO+sKUKdvZWkCt26SmuiO4Q71QbDFB+V7ch8UvEvx1FVwOSA8fah
+yKpH3m2HsmGpJzIcjICFWktmrRpl09Ya0+twFrFg1LiorHWvkxueWZA24tbuVKAE
+YuTAqfIcUGIstBd1jRAt6e1aqTRNvOVvXYknBmIdF0RGGF3UE7/uwVQB1BbYKkvB
+setMjTsvNwaAzbHci1Ntoq8C/iQTC9DB7ovqt0cwUbdJh2GwXIMJ9YaD6vtslABv
+ge43K0lgJMvu+4TSXlUmCbvyBH3B02zfQ6CiotPii6ovVLS2M6bwxYSAVATe0lCi
+Zw6/+VtE8HS2zFPzQ5cHKNSUpp+ZYQ0kSP3WtoQvJHMLX1OKxkpfsuypHbNU4kOh
+tFXeKyTWx/XZDiwuyF30awF6ozHpKf65TeCtabDb9O1b9UAjx932nYe5p3Y4RnBL
+b9p0xmqRNRuv4eIsnHhmVI2deekn6UnsWhA80nU5+upurKDifwi9Rp3WgqKKOYMB
+HuVPJpnAYtyNPXvcNP9/1eEFZXB5UGbNVEDjr4pUwKMzduR2YuFUJQUDV917FO6m
+gxhTyRcWP9q5jkTmZQuAaOhwAPd8An842bAaD362IuhXyGyKuw5tJLaYmogRi54v
+LEtJKunwR26N2usd/gdI/ukC9BGJ1I0SrrDPXpRpOowT4BjRK9SHps2Ayvawb9q5
+1j0SOnZ5QGL3DgDlk1UfrzwhmQsxUw40sFbRAfVhGJNyBFfkqjq7G8v6svYhLlrG
+4mYZTlaWFv0l7uCTMXqj7qsECTxa1E42+UHrM7a8lux86LrGzrrFeFo7nfUruwn8
+j7FctQpTzbnE3zxpm9NdQNH6sa82YJjMOBW27D174i6qQk7q+getzTS+3lJtU781
+cAz9p8V2ZdIHvVN7JftuoaDYw18fjtMVfu0wADnt4W3acTRLdFYTSZml7kl6pl/n
+vo3zYxVTP137B9EtjxxECxYqCQwwv5b1rkAsBcWz2a46ZXCAWhgdwOj0PtNqSNny
+cAwwu5aU9+g4fRSVVdHEMg1+ddNtK0aR0dV6DGlwvrovrgo0fWMXN3Vs4yE+HpFW
+K3W3q7UWY4kz79YQQ8rw7XTmhA5Bw3Fe6KwLEG+W/dHWl6jHKCJm7lblplws5r4l
+hwIdTJT7jvQZSpkN+UWSLKLo+qozjI/JeyWLBaAPGneBOY0ydYqbRam72VVfFZPp
+XJPJZ0TK6+zhQEc+lwak0fzTRTdMw0nV+cj9ZGVEWEUPGt44mgWN/HAp1pL1Afal
+EezFd0+2fgzajHfrMnPbqbYArKMW/MAnKYr3nwBO/54MBJPAFg64E5dNZLC6Tjty
+aYyJBXIZTNFSonGAgsEnE2YUNqplpokYleDsRnKZrmHzMRy/xdjl8ivhtNJwcGGe
+VicyfiYjcZj+v7etRco9D8p2u+TacYO3Yfi7chb/4cjCT9OnNEQsm4c/E2Rcm8Jm
+BiYyFck8bnOZQmL01As9zXjfiPbDe9/djIjiTBWMqCPI/PKzu5U4+cI0QY0GnreO
+kpNAIGf0y505rUvGJ4PyoQYOt3chfJYaYrv/2g9b1fs0DuJcIBao9/AHnceXViPn
+s4AaPkd9Tcpaf3YIDQ7511R5VJlPCjSqOVXIozFUUthFyuApUD+N+Fqw6I9VhCck
+i2QnDYCjWF+FqdkGv7CospYpMrzfPMTiIH9soyGx6y3cFtaaf/LrcVeeXy/xjfPm
+nNIA1Oemw51Mff9qS7nQeNtN7S1JKO23n4gq7g6hkD9f0KGEc5bfmlR0VBxMG7n1
+Ecq7/07BimAPll3SN9ECm6E7Yjy73F9mCSVh/vsbLnwCdmodQf1/nGPlPt5jVUvz
+IYYrsUVy/xtc5QVLASV0UNUG3pq530XwRkP0LmolKKcRcgEh1kteaLYO1wUOlzux
+nAiE/AvYGpMjZA57kiBqFZRG5fO4hE/V7yJBa/Rlanz1YpP64Ju1nL9dw0DU6t5b
+nmy7ztCvxuxElX9fNlzPhvoNeigAU1Pjf2xQbEn236xaIG3CcbvP6feNSA+Sm1St
+bm3gUnIANAUkHf3GLki2WeaczEA1RfyPCOpHl0bJ5uzipEYEta7x4kKNiHopSAa3
+vddOtQhS0LW6Yb2hT72Bz6fHBLUPta58oT+kelMU9KAXIqL6/JYu989Rj8C+WBF8
+C5ial1Py3yokj+4gZzQU1WRRtkoZUtepFX/onm6X3+7GxogF0+Hrcm+/hW+yRTMu
+f6yKq98s2C9OJakBV3MXhIl85J971yOanmLevP42T1NccHogZPzmZyNyWrdRzk4A
+tZcJOXKVokAYRlmIFILtp3Sa0uZb4ruCavQxb6Z9/shi6LAfcsuq3JlJbK5LOS/S
+cJsVDUu0ImoAQF6PNV7C30uyI4YYECB31krNMExsuaL9Rl/syYDcr4iuavylL6mG
+VmlN2nO77XEACX6HeCJtsN1QqaRBVEG9V6+RsDgsQrEcPExtHCEH5UUDhhBLmc1G
+SEjU/0EvN32pg5WyUhVm05jlvlo1aCXPQ3xB0eN9aEK4FM22GddtQZUnYsZWiZxX
+2X6FYCfuiy70Wldqe1i/pdzrgnv8lnH4hDg6NXp4v/vejqZMaB9AO20DeSwQCDZX
+U8dfIturtqFZVwj2OWC94vV/QilqozAKiKfA0cZBSNd8Fx6RCqcSf6UQmjF85QHT
+UxrWKuD9KJD/5/G3VQDIVJI4jhP3mii+ZgtvxmRyHjI8x1KLosXSUMqSRsCSG+Z6
+yfuFFbWloR/Jti3JG9la4grbXoR3od6dwmnaU8VfweVCYF9Xi0R20CBFGIBnLhYg
+aqAOJOKSTKT8Jzuo0JIqdH/qM9RSgWXhRaOfz6blG3/hy6diun3i4utVWul+iIYp
+wph+Y/G8MFZpWkg1yhNqPnptAmpPTYzINOMlKvms9z764F3DNe1RD1mq0eVOBGcc
+EwO3I7ds/nfs2L+kYN0KX/k0Thtpu2FG9xsgMvU7Ev7EmUcBrqYuByfb6jOqNq9v
+JGf+xSWdZ08bm7KGyh7BAGijcszvxLa4Fi2TCG9fNk1nJDzz9BSZli4XFDUXHAiK
+1xYGhwGzNA7ekOQKA4z5UQd2DO2QOwcdzFmP5GzMX3fzzDS/tRMg8NBCsEzLpBEK
+0Nk/0shFRgknl1rcFRR7qhPZRUazKsRo0NvvgdNjwZxjdacLtGhxsEUWpsZ7GZow
+ylFMLo4TEMdzXJWsO2DBzEEV7zlzZqcdMl/Kz2ENTJC1I0WhdQ70UaJHyxKiDkck
+wQJCnSOiVsGRgnC7HM65h+IBzORKah/3+U4wqtoUlkV951W1JJx/7nSNJvML1UDg
+oZFN/sjjHS+auMQ7RaiJJ1Q9g5VaFCTGTcfURT0e4gw3+wFVe26cX/EG/IAl0vTr
+F4Ad3rDKw67IW3guGEINv18VeBGKwSVzRw22opCLjXafwwF7X46tDHn00K7utPUL
+hicZF4ZRTBkfIEt14BxdJkploO/atxFa9QafZCiID4YU8PWC1o0M+bsxZEEKtDhe
+eaCcMBxo+/zEvPKQtP4OV+qY9zERRGDh6jZz3tF5l/9aX66sjrLJb78VNDM6RatW
+F4Ef14p5nb8oV3nRGYQaiIgnaCI3J62QpL3YMcMgvyTA8j/pujtqmBw+wxPgR0qw
+Y9aN7n+24qDNOb/VGrWkYkIxbVrrG8VeG1YDYpigE2Hg8bsCjIbFteuacoDqVuLf
+2lxFYbEv+okx6e/cuDCmE2j7P4Lwd6Torrg/vTNiHGSPLX+r6kfO4vVdvFlp/MUn
+NrxFiDCuBjSaE/8Ox8rtsX5bcNNiFA8bPFaTIMozTBdrL2HvEpod0BhkDpo5+IcL
+RDUUsS9UHxSw4q//BQMtlMYcn7vI6IqUvif880mEcytZFx6VMwx9fqOrD9VK3U2i
+TIUoSLsp9V47HVXEanHgNDL+MjvNN4jf0T7jN5C29FN0EeRBswQguYUHW/B17PVj
+7Tu6xh+1ILOHFpXZtNBLUegOftkUT/iDb40ubLzs4n7yIVuOG/s08uGI5OII+e62
+Oi5yH2kwppCGfcozA3c6rBHf7rkcpu4qJNmIizf+myaCv5JDqDi/yNMD7BBVykuO
+f3tsEsrtPJvVq6LjR+kwEVsoAhECdJ/myBSF/4tsHvkpncI7wbhHEDY9rlqbPWwf
+BlawY0/mvn//OnaGwGdi+/P/E7rN/6gY71DLyowBUlK6vGDZiXAWYDRB5+kH/tKE
+BpLG1LD1OWWOVhFLW296B75+Eu192iLI0VOKKCOzGe0+Qz246uUiXEnMyjuoX5Q4
+Bl/9qd6zOfOYoRm204t/3X4M76B6Xa5E+K/SGrUd1XsjpDQQjR/bpc9mr2vm1JJm
+oTStsdGz7GoeUj0qbN0a35CW/NrqqEQUNAf62dQHo7kTV3smJ2LGW85N2EhPAxSO
+htVMNV5f3nSW9znU7hLUeonkWWb5qCPPlvCIlHTSxy04gWZRweM7anRKvZi/Tg/t
+gwnjCigeKT/j6msaTmhaDt+VfzgjczAItk9tTy7Vqy0k9Cz4ayZB1dn1SAWuloqw
+ZjrJEVDrro//FMpmoZWB+6AkzQw4QHoJknHlZ4WUJfd040NvOjzs68VvjuPOKrZN
+9CuL2QKtMk132hr0dKSsKFjfqDS8hfMwFfIntJjByTOdOo3qAgsfG9zjAK0Nx/4z
+pfTn4+ettUh013zgkK/DRjoahMPGU6/b0GqYxQ+YfQBE6AC/82q7Dr+5Pi4r+ZAz
+EPvvEoA1+PZ0bjXjxjYY7exghn66BsT30Aj7wbXyc7+7YH+RlXROIGkpxbD6Kqw+
+KZv935scszbEZb+tdzCy1gMh3LfzwRKfa2fr1/oSe/+BB1B34egca8LQ4eXbpl4o
+WtXeQaa9K+1IwFD+05qi7o6cIutWS/9MeLsDCoQSsz7rnfDduOORovAiuFybZL7S
+10tF07gOZwsdBCbOTWbcZxCO1J5/dei+qjcO3sKZ11U/WTCUIXqmnLjpE2kzz2v4
+uWqOqOi0B7v9ZCkXVeXvC6ICmVXYFyuwd7SHConP5JmGpkTk8c/M2Z4tV5r33uTQ
+9XpUtYs+nsYZxKnd78fOYJBF2v8mXvAVY9DYniiin2LzWvElPx5Vf3GMDkArvESH
+ZGSqbyuLJH0dgBzyvCVoMyIwSpDuyJlqtLDDZL+lImO4JWIHtNaFBgbabVIdJukE
+0rbujs5shicqVn+KAAm+KDhzrSgzsiYlRm2/NcHIVJS+GOpFcaIjuxBthDqDbUVF
+BL7UvRHt6KuPjTDp9W7IGRTQYUb/RgrC4xn/qAPW9H1aMinVYiZYW5MUjAM7uPgv
+RNi/0FudH4kn/BFRt85j3nALPofFSeifilN5y+/DJmqDQTunILKb97ubvHvA94t1
+/OTtSoPN1Id8OknTXSdOKp9RHMVpfvA5r0NHy/Ji/OpA8aiZ7PomGqaP52N5kMH/
+ge+hWuF0u41DD/5lkWgKOG+UiieeVukU/WNk+me8BBSZOM4q2hcVjVDC4Z9pmHDg
+oadqCW7Eqdt9qJyPgDurroralWFHz8bDZppm/6qiBgdTfNlkhd8jlVCFdV15Vnr5
+T8udbKWJPzYfPXTpyLhaBybO+Nb+TYyBONc+rTDhAA3ZabQnY3Bjn/wwOpIc72QQ
+wNH2l+vxvsDxxqV+11DOcEZaQNiAlOvDCAGoEOSfEZp3KMmeeYYaWprRqC1EsU6Q
+l/bilmYotsKKZQBRGzuru0QLCBRHuQ0dkLZKYN9EmNZgW5Zgw289SlRuROT7jz4Y
+TGGTbMu1oWqs6wE/8WLCpaMM1Sdnnkegn4z796aMDQOCbVT2weuLNksK0w+UTamT
+zLvspPVlzgH0/dj4UA0FlHU9YFlD9lLm6EUg25FFlq+CdiOHVK8Dc8iSwqK9GUw5
+UhZGozXugGFvZOxl2PiB309WBO2FK2wxo3SPk4HMYYw70b2qgzQQJu1IFE9ZBpQM
+i85FGIKRdBZE5pRZCT/jbOLCaD/i1pv0Wvc3s4m1zXBXeuBpi7KifXxPhWxo10qc
+3d8zhWWEHm/nGw0GLzIdS9e2SMg18wkNOV/66y1QiNAx0okmpAeFkj9LrpKpM81g
+tB503bqomOAUhw0dFFDp6pJkMIY7sRLrLQdGV9Ip0R7EvFRJZf2I/FynJ8kwLu2m
+5sDk7q3NRpZzUXV7ua+1vPIZtzK8FsT+qlX/rztVo6ve6eZwnQhg8/RiTf+ZJeMT
+YmO78pei0Lf+oezry3GMjv8Eu0hrRvn1QxGZI6uAYwSruEDDjWUdsQv7rxjym1Zi
+ZRI0a+p+bOu6c67cW/qoOfY3nyfc1vPFXPaVuqXBHojgAwZ2foTcM3xPLQnBYSF6
+WOr0U4LvvHKX0qQ2Asj30Ux1sq+IiRgpRvv18dODNRnt0Zq1+be67dJ13KpNwbpq
+2bpgFwYHU2hWTZo11guJdl/BcjFu5PfJt5Kt3m38SIBRlzx2wjSnHRfaFwDxwQlB
+JGlFwNOc0NDRb84oVlbNek58supO8XS5DVY2XldP49CC/zyf1gPND3Vddc3xhlW+
+ABsLtn2K3Q/DKRS0mxZElGhiGudhQWoUjLj1cTOlh+kAGTuKP5rZUWdhXqSSHjs7
+YS9iZwlldrKBcsxp6kJV0tnacTODcVudWBsUM49cb/OgfIitQtOGGO0JEu1NKfeb
+HiSfPPjd/FRGu+43EJhJulu+ThTw1T3Us2TIXSVxJFlp+OMBLmySwJLDACUVOGRb
+w5YQeH/C7StLjd/Flm53FIROPg2TtdRpWUXL5TWJySG0DZgCAgY2EA/izVW3S3ag
+zyU7vAqQjbcMR/DgCtS2ANzHlnUNz8H0lM5oPyFmx/XylA+y1arinva236+BaVxX
+ZQiWRkkKcfgtP2t5VLvoKkDPWTiAjuiGXtG0ZkuYyZWH1q95Ym+Xmmp15+Fz6CI/
+7/T5+6teWBUnwUyuSFFjqaH4qMd4E5POyzSqpvS4MhOol1IjswVzdo3dROFlxZ7A
+1aTPxrwNr6hgd4wqnwfKmqn8eNvCrP5wDojVqudZwmI3/XLCmSUXy4TR9K+5FiNS
+cCaofpWhtNRxscgdsxgv0o2YACuT1PjBHW4NK8FoJW4GqaDIzM55hsfK7sVf1HT2
+vVOCELU7WSMzauWIsTn03lyvYIa59r0/D7+BVAaA6cREka2n939+mCGCSj+jDuc6
+EAuN7SM4BJeVzMPbDPGmHswM4OD4i/4hBszILCktS25/hXiosy5zovjj33O3439s
+1C1S1QJA/W9jFw+3Uk/1C5sYSlLLMLiwBwIxW0R+DbsozS7a6h+shccg9+uER5sV
+43MG3hdfW4xiKqeZDZ9nDbH/fH/hVRC9cpIZ3vDZpBbtPfl7qnd7q8nq+1tDeW2e
+ufbB3haLlApBDz/cmOf70gDMyXXFovEzV+2bBmUGRcwzLtXVcWvduBRZgK9xUdW1
+L1c4HNkB5fpaTdcyn2JdhL1DfDuGkA3IXru8Huof6PdcKJAVLaiVjkqChlOC76+B
+28U/OFbs5xBk/Mv4BS8TzcvF4kzkzqZt4DABs6s2e85tOXnspz/I4DqxjX1PXLVL
+sDS+AIBeu8XoP0GNI3K4p/ymj5RocxfG+u6SbFsXIcEM9iKS8193XR+spAA0gIFM
+BaDGJjRHJPRoF4HPowBDCVxkea8WNOFY9D/6hzzc4pOpqTduenFqH4+ecfqFhX+f
+4ONbehy43fmVyJIaNyoVWwaAGy+2ETN/k3ov+a/mKYlbd6enSoFI8QVTpVTB/Q5X
+OeBQpvlMu0KnbVrEYWuDtvpXj2HwvjqfAifZ/mp3Ir+Tb3VvoXF1VjxDkr28Hjym
+zEHZpGiZXWHz3Au8gAjlsjNzOwagv+BqzcNlWZTtNl29CenPIO2DEvBP2MTE7pRu
+0gpx0epdp/3zOIe88ZCt9cmdRKYwMPy7CW0Shudbg3ZaW9iBhYn+jRqOMB3QJk3W
+4kkHj0AH8Bdf58HiZ0ywEeKGQeVA0XhPN+oYFSfCFFbGUrPDLiw5Euj+fh2HbFhM
+AEFPjjreUVMhbUAmr6KKajHzKL78CeEK0tmhirNW9b1+JeGriRTYQkaWeEIw2bvd
+p1L+vvDcinvlkFnQRcRmDHXMnyE+0ZcZW8VTDTA7eRMdvQJu4rGqgwz/DFloEJ55
+JunpTTCVvw3ZbxkwULsLLraVFgddE0/1OMqNIzAnmAtDIl+hharfEl8SM7VlNpyC
+26CJtkiCwOZEnbhATt3Tmf/4RlGvEexiMhIsSeSh8z0XlqearS/DmVpIYMGnYm35
+ytWG8lUxIywg5aN0ylq/5d9/NiKWmakiGY4BzEcsBOVycErXYNbAu3tx+RZZXXFX
+q8QmpM9O1zUYd/kfPIfM2PqUdTFbbCB7LeRWlp8C2Z0aFNxOJMxNPP/Vei42gAnT
+brnUkGs6gxpMHCNEsH8q7qmD1xiKRAX7R1r8a1zhwtu/A9RsVPSI4fo5F2Cu31PR
+M4xn9G5gYZ6CcaXuX+HkQUaU2oNfJoHlwZpONnguGIjMUeGOnC1R5cMvqpHtSMIp
+stQooPYch30XFYluSIgbaBYE/RS74NfxOuBvuJBbnkhmmFkCeRKoaVvs+asZ7iCR
+tH/8KaxJOQgdiGMfuc4T+lGUznqp8PGF/rydYf0OpuIwdaCC7U2lud8RXygwvgbJ
+vjKpq+lNrS9U4SnitDwbbnsGuVO0ranh1Zmvniy0wimmndgd0AVFolVLeYCx6bes
+ty2N3EzCxUkkP04pBNtejaFpPJkQ9voFN2QmNHoGH6Cqzv516nBaVXaLCL6y03tw
+KIqDQ4B1+pit1J81aii+BXb5pW+EMcKztfqoSZNco6nfEUzXNpj8oYp9aBZwYjud
+Ov2kLTpjUmp96x2QC52kmQfF5rHmBTpxXoe9tovEFTmk2YObb+raL0GKMTSc8cBc
+vhyecvN7wq33lq8f59qoUti7dd0PsuS3nd5Sr9aymli7Noa8bsxguFAbrzK0X4PO
+v8v3lkXJXcdZhEx90OH/UoD5veD5uGy8GO/JhOCw4QlMSCNxKWojcWC/cDxm7dsN
+9oXRx+aWZRTLmVTIK3BYwvhetRqoeOublBEOps2klTfkwVGMJ7eMlg6MiE4lhhP8
+CziFlcMhfgnNUSPKH4/W573cXkDZkxHb6k7gbJUL/Cs9KWLWELMRDrfUWDSlZJwQ
+bXx9VmakcnsQyBsNc8XWXPMISJP6PkKMJePpF9jsfG/3AYC0TUj1L3wkhKX431T0
+Bob90OFJIfmf5AC1QlV2nA30wERhwFKxRs+6z77SBNdWbGnhamf7gaSb7x1a3pau
+Zt2KP2vWwWxNWmPq2EiFB1vt3bX8bAYcUeA1pnu3ZBUjdFL7LL3EU9axEkVYxifU
+VOyfcaaA2GmSK5t0ltrNDxhh246WSo5x7EraMD3JfVqOAnw05sNNd7ALAMFg1DKK
+sz2O9iS9ohPZFXw19M7h1N32fzcpzkOei4J0lCqWQwigbmVhLPutGKyz7KofAcOZ
+2kIozFJljL5zuEJPXvUXkpdJG5way89k7aN7qJf0VpiOukKW0dss3Qqig9H+ePpB
+UW9JTzPIUP04meUWLarBtsz8YMxljSUGLq89sZr7FYjiXRtsD+VcwNfDmf6ffz5C
+rW5YqUDVQaR2
+=/muA
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileNoPassphrase.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,297 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOAyS/OAcAwUtPEAf9Gj871T/em5B5A3UG/IxkkYP1nH8EtUB1tzJhc5zBcxQ5
+1SK00oAkLlZykERAaYkFGy8gteYDWKl0eMtfGG9qPbIy9swmWct3gNJCKHb+ezyj
++NP8iM72uhqAyp5NuhxyH3Tp8pE+4NWbgSovtVY5rEfTHYR1p6vQkTqNmBdcIJ4R
+lEHvAZ11qAg9vWee7Im7FjX+shsccZQRe9L5SF+/HZDyukfqwInFovaKdHECdnWC
+yCI9V6L8h0Y5HSUoXG1Kn7iZvvEdYdKihCHrXYyS1JTXhsJdoNh477j/XnthR/Z9
+XtGX3MePAWiOgLbEe4+zp75Z34QL4u/ggKeTJBcTyAf/bGHJU68E1rcAeIVtx6tW
+EH/RDl5MBDFyVxyidDN1KYMZmJ3nQAxeczZq9I2uQnCz9XVRu4f1rnEDcais+cCU
+ZBwE3c2gJg56XivqTipcmncAA+BkS9hJf0T+s1NHo8kalqn5tzYz1Ifh9xiNYYR0
+0SXhvmet2PsxY/Qh5hfo6DVo1HN7zQSSWFPICk3J1Uj4qzsVa3P7yyt5eylqBzQ+
+k/HkVvXe/YWeeFXxIb2o9h43YoenfllXPM8rvlMORl0T4cIfwLklmKwXMShGb0G9
+bc851vBikWzn/TmIhQ7wtZ9RCBVx66AmhJFxBRjtfwMKQIoHxJ/esP6RUpyqffLp
+LtLtARMlih+8W5pni8ivDfoOSeG42IJG6SCQqvigoqbl9pe05MAeKbBlm+DuDpd2
+eeXqVYz4Jb3lOCG6uc7ztqlm5aWZGND34lu7DofeL5C/b0R7wJJCmPArtdniZx2t
+nrkkhKy2ncvKtT+8dvt2OtTnxvnSe5OrdsaBRERzjLrur3jbYlXzxyx83I4jVFet
+PucjW8E0EPUmzc91+aNCbKhLz9nb7/i7erisTFcAFlyiNkWr+dWD09q2G4yiNAR3
+JHWdQ2S2ZxHGKQAVvphZx9Ya4Aone+6F1RqRzAjaW5R8UbuWSXvhYnIHvVJoXUUr
+FpgRoQGYOTj4SO+1lCKipylhONX5Mlfv2Tvo0yX6eyV+LQsj2LVn/M10pxtqICfA
+fqRuw1lDwkV+Njv38L6pbEwhJ/zg3iVOsgAWlCpNOhQFgbjmE1YoDSmUDGBqVu3o
+aLflInPyDWUQJNz62XK3EODpi8CJAncFJ7Ee3QQDieMGiS3WOMzEM0/Hp8l7MKIP
+5AZHvs37Su590DezMbXnh4MgfhfPRhy+8zlRqhiGItOJHlqDbxVi3F6SrFjAEGBZ
+fUNsEEnN2D+JESzoyq6CsPYHp6dJ9W3j0/usdaTXuU2+APYfmPQh6hnOtuREotIz
+EG6Bm6Jh27MTCMHn7r9ZKHx97Uk90FpLB3nyFt+DqUx4mnnvMRNekxWCAXvooBiq
+v62H5kaCMy+ALJ1DY+9Xu5KTTTLuf1gIG0zamEi/XH+wDfP/92OJXvJB4TitOdfw
+vtdOrH88EK8S+qzY7haCVWj2w81MbbFmXvSCow2yZYtOsb6AA3UIbx8SsyDHcMGr
++pYiVutquQiH/lLkqJbOPFNavtuByck2eFraCbg6A8S0fDDvd2lYBjngkHmDOhvx
++/QaWjqHbU8vc/VkrhjY3f2shLlIJ0A9R3IcfPE7uim9WVWddzVFAjMWTR1TknEx
+fsEokIm9Q6GSMHoDdLGjuc6mie2LS2bNwFtY8jkOf/opX6qk69EGq71Y2zRfCJXX
+/w81bKyVpO600uIwfJt3WDiBCKigpcZZtY0BFkv25s8WbU4BY6iXD9rbNqpt3bR3
+MNij9TMswQcwuZQ88X1THZi5O47vKNqiaqh5bcqJ6b+y297ZLNyav0SiSRGGDC3d
+9Mb1H44P/XevYUyCQQ3TUf+njbB7tGnAf+2OCmP9iqG/hi9HB+334mRafeloibX7
+IavMQwXhn4DmrV5NRJY4xPcOPUXdUSd2oHbrGIQZPjAYtXTAlPxuP7pgmghaYaKG
+3vhHGuyYTY4ut6j45CISyQVP9W+Ay+zsZLk/xrxseoGhkWyV9tzraCmeQ3xWOcVl
++qJ825JNvNXU3c3mnS9OaaZZEZ/GGRgzCcfaiu4ve+OJMWEugEiu4AoO2bOkV3AF
+R7gSXYQ/DahPUIdeSDSoiAFuKy3AAeGgAiu626PHcDFMIfg+EW/AebGUCZ+yy1fj
+gEons/40ykrEN2F0OgFJltu6/+YPHRrzO7z3SYORspI28x7L6OPPEvjzYZPnRzC3
+iQWb4oade411jCgzEhca0wKIUlELB/b+czaJdpqK3C5sRSX2cOb0L/ww7HOLDtLx
+eQhlJkGGOaSwcezFFj14OoH4uk8RKXX5Faly9xiDJVWhwdDQbCFtcK9mpqEmRL6o
+wc+LPBqxtKf4igaLBVLNFIb4KvJX8wdDGdvIZwVdXDZnQk+QHwNG65Tt+CnOgai1
+zW6P3tgxBIJa/MK5bDrfSbMzO770ZpZuwrtmgAYk+5rNec0F5OD6raNWeWuQZfun
+Np/PxxxXZS+JIrS8mKwV0raCeHlEd9f+t1VsJAZ9O93NRw4FV/Jx6p/1xGdW8WTu
+jzImopBnWXsdWRj749gbHBTQ/K/Jh0z9FSWKslsYt+6ZH7pTnbmhDvEQv1oCSM/y
+fIbg7Jb9zCeNIk22uyxurU8Nn57zzkVuoeIn56nlTO9Dfi8tRsE4K5HU2lkDSzW6
+1y5gT1x/x2XSAEftf3EKjz/kn9V0bGxD9CqyFa5/NFdccnZKc9vmQmnGV5Os/DFV
+HJRo/nxAPlOHbOP7qwFHhIF30kNCwa/SHFCtNjQvQVtGTv9RJFjzFGq/NlbQO8gw
+FczHT99i8wcbzK1tvh/lx4Mi6n3037ym0QqGiq0LrMcAyNLZ/iW3eS9vxSfKeFT8
+y++3fOD9Fbi3pgSYAJXHns7Cnjv8F65DYAHk+Qm6U794sL0kK6nbpPtI5WmSrRxP
+NoXncms2KAob/eMigENOQxM+O4UvIPfzI/Tg6CMCePq90d9adzT0Bj5MUVsL/zLx
+UjsuomVfTE852NcHxjvDANbIEsmi45Ypw4XpprrJyYSzCdA1aVRUctZAm9MUCT1q
+MqMbsuI1QjLxcmt8n2ZfRYqgbcDN6N1Iyv+dUEIvKPESvUO7/eHu07Bbv053WAxv
+rm8LGo6kn9JA2OFobKvy7PcCZL4wl/mhbXOrQYe4O5VsdqG54g60KEh2PHU0cYCC
+U0GZ94QlnQ724oLHXiQjvFovyDrLNtDtUS737qYfvnc/1/R6notFKry4TnWgT82E
+gedWukg0YZwcJxgz/KdBq3qE2/7j4AVC+Sw8jntSYUpmch6oMV6nsGkfmV8coIYV
+2+03UR837H6YMa493MEMfnDpZxN8kt6g3gBY+kSG2RKwR+lHD35jjHfGDy9Tli6h
+bNFWvDctEpei38Lo+NVWGe5bLzE30AMgSD3HjzckbqqJV44C9ruySQJ/W5ZvQqof
+T2n+pLS/rioNtEg2s1gaD2Z2DLP8UpecVu0IRhazji5S5rAOzmQ/BTNoB0EpHh+A
+hJx5z9/3LUXAI2HVEQ7oeFFN6zsxYUlEilFVEmMPhAD2lR2zNDr2rB8PHfrQ1lnC
+pOdYq0l1sejfjz8w310R8wvIcHNFBdDv2U+u/1eFHpquE5TGjSfhsKentq8ICYuA
+zrMNd0QrLndvEVktiQ4mtr7IHEE4zLzZ700aPtnU2xhKNSVeyW/hN15yZ1mGSTdF
+gcQcaHcgxJWrKU1Dx/0OhiZVHb7beew1CHr52CW2+1tITieoWeYFyz1katc2I2P3
+/O0B03/lFee8Sc/I8LwE65/05ci/aLs5EnqavvTCN5+/JAq75kvBMMmBtuBMtegX
+6IlqhiFYc2ke4R2TR/f4wtqRHomEiEFVIt+JX17SrzndrhGcXi3EaZLMw83aLo/R
+UGbx4vtCpZsPcrCbtIa6VsK+TiVl9nkwczUMwMY+TIHwb3OCcp4fKuKo/hMDt55y
+33MHyEw3LuAdTKX4NcUSeQC07Cj6EnNZ5NsWyYHfLgyPXxm0W1XI/pVSfeq0N191
+ynaG0s7N1xrnBndGwa2GGeszhkmuN3ECaBjVCzLwLjx07mbKfZDDFpfQ0OGYEjNA
+3Z6KuhZLe5dlFoDHPfGjEDf8AgFuGPZO5xN1PH1pL143g2tPVUhg20t+EBpaxtcw
+B95qjI0o2d3qpt8Nyotvvc0+yXB5BOsnNGbnxTWn6OnLmZTmWFs5BnGxtrwFNBPS
+YzMX4qO+li8mibeS9gpWbPA/4D61WgyFGXade22NYdM4Eed08uC6kp0VKeCjP3O2
+Wf3FgF5GJF6pDpVS4cY/YADEJrS+fJY7mf5B6ylaDEAeVmMc1NuMVyH+Mb7pF1gl
+HDmwuaKLRjVWMu9xhIwiWI6xEfKI0MJV9UASCcLQpa+sM5RBsIghG6ty3X62cn9G
+TuUe0/FVQ3q+ICCbFz1BnaxsOn8QGAuAhLhpJ6QwSZ2fEXt0Eht1gtN8cQ/PN6i8
+z0cuwDyzIB2BlLAifqVpwjp67lBWgF5FaKKMoWGKwqAOtAa/wGdWHuVUCqnXs+vc
+vb12d44nOPI2eJxAobA5uKgf/P4HzVxFpen2rbQrvpJBkX/CA1eMiIgkMDtz+FBO
+AaiecMXCg0i2oXrFHsOjT6sdZ0VzpiUC7xREWQUl7etWvj1W/bjO10iDLuB5ilUW
+e5hc9K2jjS41K8lParTcvnPJnHY2U/yHAVnz2HmLIHMCKYUGV1InHJK5I1cKRrvL
+z1lEjWl1mvSgJ9XQUqm2bxvokcivPPoB/gYTJyiyN7ABWMlK0zGyeINvpYsNqK70
+JwkJPEOT6DrGcrCDKwcAdkDywLhKEOOlsqv23r8HcXgvy+SWzP006VgryrsKureA
+c4g+/HfpdrdKviesoEnlhJvog29xNv17D/qudKDytrR3u2qlIdlkFB3dAPM1Cq8E
+7505dQovoZVN8CW1keokdFWyBn6dm1ZfZBPruPnhDAeVfI0YVEErxTmNySjBT6RQ
+zpQHWzQUn2dvcYzuRt7LK6jEMfm/WrDeuqv28CibBdVdUng8yb2YBt0IaTDXL71S
+E+eYF3hKBQBvBz2SMlnvguXIqPfhgHWLBOjTl1HzuIuuor1mkUJg9gtNxY/DFZg8
+5okZsPeKOwO1hSaYgsxTK67AfrCBZOSD5cmNhZhTwe/UiK+Qj12F6pTerLTmzFMC
+7FMVJCmZ9i92KQrkReMPxBNLTpny7BXSKP2MLJ/h+8E/TUixT6a+psDOdSRfgmm8
+ALsy69STy16jhCpGJuIjOPZTIMLaicp+bRqjqc8/ZOdgU6eDJsAjtUP8aEjJ3cGw
+S23oCHNt+BkjutGUpRLwtcdc1z9/vgLfp3eAcWt471gAQL3HgiX1A6MM8YtEu9dN
+I7MSFARvOHqS8vySKBDmWmIZqNz8FoE06In+U1NLcul4GrFri7AuktQrNVgIBx0i
+7sQQnSokcTm266QN3Kc+8adYE7GVnjQie83xxYguqQzrfjNaS/CEnmJIfWoUhQeI
+yuVfFA4rzlEWO8MRcagZ0dGwOMDStu04k2NFxg2YXVM5Cfi4PcXlvgIktNPTfdCv
+Lzb1qeryN4xUblqBp5GsIeWafCQfoIiHAtwtTgkYZIPuAwttmc7IrKLf1JMgMiAt
+UiRe+hycpQEL8RL7HLcwLOc2gHkFNVCnasThdSil4epEZF5CkVWcwpgziB0TkR7v
+kQbV4gfbT1ShRSnxVrxvMggtLGjLUdTM5uBqxfJut1zai9p3HgFG2eBoFmITCpAf
+Gxz+CoI7jy9hzCXQqXrhcCmfUtkTrIIpjFdJt6NI1/xxHPCR5m6s0pTlnmMO0/os
+etk1FkqNfcwTI6OBwtY0WAr3WjcXr/wtnKTOZN/zeA6T5VtH0jUlYL2U64a1QtgF
+g8Kdj6TALkClqfvp0dDX10iAk095wBaE5VTjF4F3Rmc3bhitfGXmVgFr51lkfHLb
+EXrV8a1do/U10BOIb+syZ3lrW3zaNTTEiUyE5IQoY/7j7NyISYncTRr4apjs8guz
+yge60gRC6O5QebcrIBGt7H1ijOWxACMMIHuTd2mDrlBtY+NNKGCg3ANkNTlPypE0
+Sj82rxcI1Yl5XVlza6G+2tCnG+ZNXopcratKooDIws8XhdNQbExvJv09eZNjLE/n
+n1Q/D0XbXSmmAH/dTPtPfhV2mtcJmp4uP+jBP3dqASkP627y2Zgg0Ad6P3jOsxSR
+dOjL4tFXQmWbyIkhx6/VddTppUWJmmOj17bW87W22genBL/jMAI6BzyOQYMHL9dI
+od3vs3oao2dvk1UktWUhnerjxKQbrVQ3iGZLcQdcovHYYCMum+RqoWyFN4xJoAUO
+es/LXpkikjFAso4bnutZBzYCCLNGsGJJ2vYAOXm674UU+lsMutiqgwjA/d+e0FNa
+tfTMk3/d8XYqrnmZo5UMjuiyGM5NxO9d1xFFBQRjQ4COgPFRTDGBq1uvtI9gW4sH
+9pK2TNq14WsXvObH0aA3inMa9ASZdQ5zI4Mec4J1jbbVQVHShx3/URw67qg5HvN8
+Zog9qXhrxEDBtJCuWm6FFoPjoX7xe9xVsn3Ys6Kv0UCFf+D6lFp064tfR450r9+k
+h7qbwzkNYCHd1Qzb7tEm2l7jWEfMVYlYTdWe+Xw6BomzeTicp2R0muqCJvV/IbJf
+VOindWMEc/aaRwEDF0A7EJ+8n2qihWdbsO52L9vTQQTzmwJ0ogVzohmqtd34ZewG
+R36s1I1R/HiDaN2cxRYUYb0zf2kf1AcPqIDjUNUEvefLyJftZe1hBWuULJc/0t9g
+sQUZmaDSWjRNNPW+VNRPQqFbB7TYvo99VepZkHl87xv0rTqZugCt8jjT9ubuw5uR
+41eyG03KxtnFbLjPd2hkG0Zl4iaAedBYaPotSRyvuxo8xCiSUyAcZ/6g8aEpwZJ3
+bp9WA8dG+bOVqHpp/Qt/9ZiAiCBdHYva0ObXF4D/mthUL0RdnfLvCtsxrIbGFDUx
+4a/oznOAYJ0M5kJoI2mhDXnTQQBSUX7ZlUqeEwp76O7lM1zJKC1s3/gJNCwKxq2v
+qQ7CX2A39Pnva5j9PaWWP9SW46IznvjmK3uwl5WRzugWv5C4YBNB2sfWPSiYv5m3
+Q4EK96OXtJqyJ17iCpOCBf/P9Y+J+sN023OsLLxASiC0YRuxJ3xumER1x2t+BXFU
+K1RIUyvWzfQI2qw5PX/Tiy1Sb3bNnLK9NFjiNXL2n4hlBHwl1CNF8YjtN9Fe0pzB
+4hClSsWp+DT5beLBNj8a7A8+6nfpEKQbsvU9w/0Ybt9e/+GLv4nG4RLcQMICjIGl
+U4KVB7orEdNsqqWR/KRbecdeQI4snJc4/D2IvK94YLlPtlmnEIgoq0iEMPw+hAWO
+YX1DgYS3bJkTfAU0rt/A4zdgss2yRwewVJ4Fy2ASoasITthBS2ndd5+uJfGrWFKq
+jkceoKhCj1ly1ouf2mVxHmhgrx8yB+soUKAnk+qtLoV3dw7PMYno9HqBp12QS0qQ
+z9W9BzMNJQ/NGfHrBglamYtmp8dYGFo3osbR5/ilKcdjF7d68JiOZ1Pm3QOHsd2E
+semD3N5DWP3AcsM0n4TBSuORHifMm2zIHGy6mTQxN8Vuy+IuE3qIpmj51ljDvMXb
+JJJ3n+DpzxYXFyTczlAOdjJGa0XRdbc/fPgxOndmk6FW87lM+Qs1l17AMARtp3dE
+QqaeVYMf+xasJGmv2YB7TCVauQf53bpB7HJwBcwxmCBvIG1b03eEMjPl9FYkb+Aq
+ao7/SjY8Ebx4LzR4r2VNxlXcsyaFCBZFMHhrWVqtbbbLXX88kFwMUYHPqJdMASdR
+/Y3oXX4z6/5RttRPkBDaUlqGu/n3MTWgWWl0gv+UNC5IS264MNBpIY9bRTwBV4cY
+YHyfubZylzmJ6yRjP9Kd7OUAtF3AzcVHN+vJGXgDTil7KseBafKS20hKnLVX1aUV
+xp5BP7vpqI014NfYZCeM2nPaY0j3KGigm8Pk/3+Kb+ACckSc15Odk+/yX2UKqFW8
+Ke6VHK6dMqL9DENvKSS0uVAhpnfzL6wkAGax/izwQMf6unIDyPjugKnI5Ol7TDbL
+FE4gN0G1e9m9+UhgsjLrZbmgccc2xNu0JgmFkjh41XEQjW9qB59GUBk1DCqmYN5z
+6qtbs43jI9u9O1SnOZ7b2byuQ05tb+2SNgHH0nVNZLGQXpv2bWU9fqaxo/oiZcna
+PtVOs1h+eitJ6O7y9od86vkg0Stk9uWhygbFSSo3eZGcA28gG0bnRDcQe7ALwxt5
+ehGSxiRzWDTcR5d2jJ7JvjcGqmZ/+JugDA9PMhqyXYhFdrxsJ5xoyfm3hPP5F8hn
+Lgl52JXDz33EK7QuO8p6mkHfCm8wLoMA1P1ZEh4Cw/b30e60lt20u55AP4YWY0uk
+DIzTfXLMkK4gmp87TohTlaB26WL13DivYo7iWogRhDFF/nY1sTTGpmOayhOi3YP9
+kIuwEmY9yxroPcxKlbQlJXgCfi17Q/FzVypBrjrcfWGgTBMjdK1l9qHtazt9++C8
+evfPaMUQ/p7PsWFqnqBNNnlonmDAk0bzvRrrMaIBWL4p5gcF6cQIjsOsRvsYgDSJ
+dfveZkp1KzyY3ppCuFBibiPZvSKiGib71ktMqcLt9QVnPKjDXZkvaU1CHGHoRp4p
+GhrgFqb3frKjf7HVnMYOdmYkZyA611H3B5NZdvHUr5VsLsWzJpjh+bOEfq6qezb8
+YDMpXU5LDEX1TRIVu7XFL1QLRmQtrFKL4bOSX8PHF5XzwwPDxjkOZ9yauKqjdPPw
+QrZ8CE3MqN9lZmbZ4KmE/O+65vM/kyYgKRtoLlN82p6/ld5A7Gpx4aLhVi0++3jb
+CehW/CiR3PVtLE90A2T2g0HSvaNdndTJxUVwPsoqS1JfQ5ZwiBVLabgoJ/sD3FGD
+I1VWDLgtOxQ2cAocBdUjxbw2fIHFVhUSmPTUmRoNKfomDjkjZpAyYMT2EWtLOgGc
+Th9YYBSaIfiXqdvtsTNXB8aHbsjHDU0o2J3Pkk426yGpTM9zZH+ogJ1xPJGAUbQz
+eZEOfp0iocqrpr94u67QTxMCU5lFAG3hHMf+mgr6S/65kfWzUK5fMXJcnbcj6mm5
+B/snWFST7edA5vmVyMhEmqR9gHbxaKKA7tZQuqtb50pNm/ONh47nt1Od89etoj9l
+Z+BPhmTe119QdafMBEhbUyficdFkYCaBz/TUMhmgNCxbXpNtduYZ7zw/lZ6DbgFx
+svB4XfDZjw+bhyYV1bI/1Uoh2esF1lvHKt5U+KVHEUzSHGa8E1L8/RvqV5BMkLZi
+jPQGTXI0Ldo7uJ9DZt/X0EeCbK1dw0mHbUe98E3Bzi3efoZPljTOX4V1Ibh4dbWV
+jFQrjs9c5aqziLQqVxfcvhCe1zstBc9ZuWtybc8RGRWWWm1Qk4QmsHXsXHm1GOaR
+vqUJ83cECaaU4ddgvr24R7jbc38Tov6q8W+3TdC8bo4bRIydpEM5ullyErQP8h5g
+gsYtbLP4gwQKJ0iNMzSukhmuljaTC1Gn+XX9rPjroHR/XRMTfZ6DhJqu2Juarp39
+Eq89WEXymy4ukKWS5yNo9AJhiaNWQ6ZW8aOqtYO3msPeFGk1PMHWhQf2H6IAyLL1
+EK9KDQidtDgFFruc9PfFLx4l7AVNjtq9RyJk0HSlCd04nngFSTP4olBf3r7+OyU0
+eRzV5zkUxw9miuLC35f7hCY8gpd8cM7LZ27Odbheiz4aM1qm2KcV2N/e00CzenS9
+66/VFT07NbjcgGwxUnDUB76GaXSmdkt5wair88eMQ1b9v/+ndfw0Bnm2u3h/9AKW
+kabC5l3o0IhKdC8DQQuYX/133U0sgKlqHOY+syeJQlTPeGAHLlC5PfDd/9kmcBTj
+1EMeb5mkHtN/6aQntn7nOuTu7Rcnp+qUJTSQzfY7YlKH0s9KXr+Jjdmn7C6xMDI1
+Q30ag/AsQCxYUqSSKXRzj+fZEqZlGRzO/A7WIXE9YqZVL0g8qds3F8IXfFhO43Gi
+DuSyLEAM3OOm25G2KYCvXP3mQIRbXbJDTrXQXnfHhHrr2TKlNX7ypw4nwMeIhNKK
+gWGnQKcVLNrU7tUkJcZ3VXSqR5Gyt3oH/vptYTpoP4oDMM9Lb6L1HNZGr2IGF6j7
+wJNBP5X+/qvaKe7WAGTGva8KjqLfzpHBXzbl4X805jHvOKXP18YNOMDJZnv1i2vK
+R7Yn74tlU3wjbKHrNpZyKDHEx1KHICvgpY8/M+t29Z673v8I3HlQiM36yY1iM7iv
+I2mJErP2P298NjZ0aqH/35XiE+i9qDgC0yPvlaHMCYSq5p68hCsDo/6gKuPv1LzO
+S1eYWR7wF40uEkXxRfkskU5GDvDQTtamOVauuCZopSoRiJ346F3WObsjB0stcoHz
+C9ygBxO/He2YqMzRiYlYESguswuJSpIMhJ5CRuCBJPeCRnEUv2mR7wDvkVvXmtZ3
+Rb/kJ+DAuvfBWzpuyVm51Dy/MFcqs4kXe+hAycoA4sZ8BQygnvb0jaD5c86Mvm8/
+ojCUQzJbN6TQEO1oAdL7gioGno8n2/uAVCZVz/AXiyhWUqJ+QicDaYXaE1tPyKjS
+yMC8W6KJEcDv2GMSegGXigDg4UhYK2+XL0Ueucw3pPmdeU8damiTtEuUl7byZ7Kd
+FZLw90MP9ZZENtfRjbm9tGELihzvvi1Ne0qtuOckHagcF2AgDMGJBaXkktYrkx5n
+CW3zG/34wleeYg5FTTqAxMiNAFJtJtQ3cXuJVrVKz6Jk7jdoUfgScC320CaAz+SC
+hOgWZ52hDidoy0lm9aPSsSliFMm9O0foEtUhuuRakBPqK7tf9I3lsWdkezhCs24J
+Uq6R3xT5p6JDG+ffEfIAGmt0fJv257puVDrO1S3h1RcZqMvLUezt1YbsumvinLyl
+F2U8032GoYiUFNQMVyKniedOFEUg3ExerEmMc9CiSHV6OMcFaaRkoO96vGhVsS1I
+AKNkgXJLA7xH0/zvb2qdlDPulSPOLxINpbTOxmY9XsHI3bmm2tRyyw9F6y5FNbxp
+LJol82pQU1UQnvQFvifUZVGm4XhVYaE8DBwHHPHu/9jzwAJO7s17ygsEUoQbzghY
+lQhum2+zHx0h2ZUXdgPsHhi2GMN3PJW6DIv2PULeJ59Nb32KYvASNgMbOeibHO1L
+3CUBH2KAGaeNG6Wqq/KeN46pkQFvXxkSOJb2CODTsbL2OxIaAR4EOS456HK6heVP
+r+zn0K3bYbUrt65GHPZTTN6xW3XfOSqhnGTsFyu2Qnwa+o3CAFHScgo1PtCpCBi7
+1v2VpHr1Q9Q3DoWwN5ppkS3m06Bp0ZflHhyWAoMmtmGa+mEyzaeH+vALwA6aiOiL
+wrCFWt9jUh+XBgx6Z+fberTO92R51cPZg+QUOlUAGCTh0fsYOwYAbW6auUqY7mp6
+9dqEVH9zl6AoHtujDIuA/pVKcuiodPNuNDLkqsxf+0nqQYPh1WBB/83I4S8Ss1zp
+proHGXsyNTxIZfRUSXkpCCloqqORxKAaF1RY/e+zoY8iicRjLAob6AiOhxBoZJji
+cwJJJfiD8p9J7I3z2YxFSBBAK1W5zuAb8B6q6+vmRXNIzkaP3+3TR8A22gUGcTjd
+eFZeGQ53uUjthBVFstE+64zSHJIPIQkuixyAxAK/XwRGEZ3skDL++Z9+bDd5r4DN
+UvousHkpTtRpyoQdRkAZJEIxRDWT8GhqWe6rjYrKD4Rgv8Q1aUMmo5oGAJlP9MSR
+xqhU/17L1/mg2+OGHmn9rXRg1wF5ThNHtiZMDS6C9Zk/pTZRQQH24qnE2iHZiKmK
+EP3NAeKCaxq63p0rZspIg/JIswQ/jPnQOlguw6H0Nz7qazUr0inbhP2KCaEITOK6
+wcUhhIb9hNNE6O2sxtWR38QGEu1qb5SH0cZ7uVvAw+EBWHvHmSGH0qQ8AesA14HI
+huY1JuQUsqf0rr0anXCSnV5rC9Q7rerVq7LrWgZZFFJA6ejacUuI54K2AwB8USMe
+FUXLnR83DbwWdq+83ICePXuvEZyJiA9gRRqPuDtLN8EEcWgbMwVUf7/nXUUe/L39
++L/JCZRJsewXYDqqfRsTOa8pvVY+B/0LIkQ3RroKujFmre1P/QGF1ikbjSeb82xa
+X2HvXvWQOffB5mbcc5wAGHc4t+KJkoBuzp7sGepNN1Y3VcqksEDB05gIVTFrGhCp
+e6yZ/XPiJNSYLZQAFE8McxI3YYwFVcMrZGyq37/YoZm1utCgz4uMArrnrIIk04Fw
+P7z5ps0Mk27T8sPEB8aWj73PgGsdVVn33QL1U1NlycOnpJ+qbERe32X9NzUUQkxk
+qx7yh4GiJO5lEG/JLz35dk/z74omuHn03SweFq3OkMD38J2xzz5DFt3bYuocBEAF
+ObTnqDMunPlN8bfQRNEUHKc1HuYsmtkTicIiQDdx7kN7EhobRnSAVJrZnDJZs84m
+toi5GkkJsPAfYiNYC+ouuuXkyHuwSKBscoWSPp+9W9C5CNmldqTqk4jM3vrk+j5f
+DHoeSrA1hm6l81WbUcJXn4zQWtWfe1vWjk+a0bVUBdVSMcbum+aDJogzgysMfXNS
+DifHNGshM1Y9eT6COpa5Gl76vj6H5ECVsTI6OMI7VHQ2rMHyJNsEOOHKYuLCz/0m
+2iOcZi9IRfoC1OJmQW3OE/lNltskHzDRMoeLv+gzSoGUupmJwBs1yQf8s/x3FUS5
+r5U1Vw1LIqRuPTQ8sHEPAgQTx3riulAi77yUY9vDRYO4m7OYTg9Ol/OMB/i3W3yR
+TjJT5Z9eRXli8s6OvdduEcAFTdSpt64VcMvuM0wCReBHkvjV0pkrxTgizsRYnwRk
+/6Ft8aXPc+GJawDXe7V34voYWnirYgfNpzGLgyVjBHHBjm+WHEQlOUOkssC7j29x
+7lA3TWQ8H62ln7+kmxL/fdZEQopbhrWRBj1ssCp5FoRCaeJUZEms+arh0auG32qL
+pAbLsfcyzd+tArOhRZxKiKLPV3EdHJq6RKLH+bjs+3al+O7rFFOBQ+dr37qOO8zH
+wjXf+kKmUR06DYRteQeGa51TdInkgTF/fQP0YbKPyo9JOtYHsF5XLHryr/0XwYz/
+Ghs081JRmQSVyhKZYlFu1hfGr7TVbvf45UsDBwz3Z90K07qLtDFYjJekbfXQnw8V
+/s4cQx1+s0JcDIW8yQBUn/8xCHdqEEiJSns4ASxEzwxZzn9QAGdCucb3wEQIbqYv
+aePzGsEixUUoMwCHsoBd5ueUNkEs6RzVNdvhorVCaYJq7TbdQ8OanhujmCjD6Wqd
+n/KR8N+HkAR4O0SIDlLAJhMj1YXZxeXoWWMHdkAHYQCJ+Dp8SEIka9LgcP7y8a1g
+nXLaaQ6OaFVXOjaMZHqrCilEXuQD0GVr9RtbyUji+Y8+Qx97AtsRjiRpJK8jnE6Y
+V0qAcMAp20Ts8YNjAsZCnj4qywGjJ3jjS9+LuzWmPX/Zr34d39j75Dp3FeMYd+Yv
+eiVA7rJ6a8U02zEvzflq7+2UPNgEsks5vbAgrgF6AvWIAOlg8VC38adzz71eLUUH
+xrXH+h3hTD3nUp6FMmdd4srJPb1U/z9Omo7nCGNlR3rRd2gHcsvGrr4NICPzhg6D
+snay94bg70sVt+LxiMBjw21qePlX32fXuMHTLBozTF8IECBM8be9SgQnY+6iCwGd
+kUmCan0z1dqjd2DmbFMAYIOx7/XcwaMEXPHWKvnkwT32OtHDUUURi4Ulz72/tqes
+Vqjdol+I8WqaWhcMLekKfV7DNzlqC3RxY4Nc7zaEZ3vSbq+HI3E9gVPV0GlxW8Ud
+mlDF9Z9L9fmEZtP1YJTpZbixDJ2VfyOLwlxk3RK2lytln6sZ8LGCihhoABymy8xK
+WDm4hD9JquiqRDvn6xhT8KVTM3qILNzk2Z9vCVK9yvOWtk9DC+Parl/nJ0JJY8i7
+b/9TND5zpHo04qoV6dLuMwmK2NZaXYXl1gnIcpTp6dkx/Bca75foefU7y+BazJkl
+lCSBPfWr7gT2kTAYZ+/DMCeHRiWvsh47Iv5TsNCsorXyqU/Gw7YMkxQH7WuvBZeh
+KMeQMXcl1KDD/H6lV91LiISFjr3e08CeENMaKXLpzMya60EqlD1VIV2oysq4nOW4
+6pwzols444PLmO9IhjT1uBIVhqeUCxaaG7tE/OXKMYbutzPTZXqX7PXzzXIMa7ys
+8W5cbK8XK164L7dPa4hqVaJjrely0ssTWLlv7TnEg3exU/pOeRxdsXj0N4rugfl+
+Xl8azUfrmy2PYFrf5cU8RsBE3cuUXghnO+IWB6UXbXg0d3TU6ZR5mcwo5LmYDkvR
+FVzdxeVOwFgVdJ2cjO9dzygcE3RheFXwygU9AYhdyT5Ysu5db2V5EU3V0xna57kQ
+SpwBOVpKh2PvFZRDmpiDmOM7VpXcbxeWm3VePE1Hs8eo7iBL/d0WEnG6xRCWf0Ry
+dJNpLqvHFxAoDLPbuThm6yIop/ts6LU/iEKwWXwdENviTI0YZS25/J58ODbz8ofe
+8QVd3RXVCQ2mi/CFm/5zXmpbNzVx3Ixvk2otEAqkwfQVZtU8I94/Dbn4EikDPKFT
+APRcgEdlngjMWq/bDlTkfYIQdt1KDkIEgK+WXT1UPzosqqucolIA1xcjIg4TLf3U
+x9KBqcHmPwiiC0XKo1cYAURdbna4pRp2/QmPyFLTrdGnW+yA5T4N0PVXG4CvMvMd
+wUJknyzNhtUZrwWN/jSqkJkQfCV76UAbAnPIAUj4Lhg/sQP+nTzredjEhVCgUQ3C
+5RIr5tgcrtJfI3FSm0GpKe39BOVfRT3NABqMz029eB/qRgKGs/oSOxUULGBb1NPd
+LpOlaTR20OnlrNozZnJG8qjFVE3OnB5X/NpIXMMZPJ6aHm7mbd5EsIdbBhSAwSLW
+rc7EM5cddr/00u/Cg2kMUryQ44Vt9KX56mKt00K/iaTG+xtyKxI40tBS9yk23Ien
+jIPqqb/nlCdf2Y4YnkKWP6YeN13JlJpx8jjcYwOQ0Rs1hhH3sylfWYNXLJqGlqwx
+Z3W6R0dYg28ob9bcIkMGHUTdihpkvTcbPzj4zZQSYrO65cljaWHPiCjIyDy6nJ71
+je+k4tst1Lnr6YcCxvrNE8IkCsy7AtLH69d3a6qVVHZyW517nzFbkcBsdYoQZcrb
+bT56SozI9cdkfr+16+xKP1oG+vJZDBJF1PmnUy342duxud9LC4AQ27OVeHakgAc4
+8/14sbADmVvVcqTA4fZXAy0znzocAWaOFOefv5U4vU+D/LsLP8kP4jA24l46jKAw
+zCbqihfDONL+/q4rvyuNxX5WShCaRaPYBsUhPDuaeFawMtXSG25/oMxqC/4wENlJ
+vtfImf7HEnQHsb8ybpvo5hsEpTGSn6atRR+iM8UxeLEn9fAl9Fs2COdnPAwG77md
+av1V7iDNsRw/ehfOuJqL7lcshJduggaazyg3fNiPUkvSfp3xK328N3FDcwfBW8w2
+3FQqMrGSJwdRvK1x6M/1ZFbU0tZQjVula8oCYs/EdjdfwXPqP9H1j0XS6fEHdUQR
+IRTyKpyj4CjU/lSjDNgr4gWR5HQ0QB5YpkVQHwwzxRyZmjhl82CzxyPrYYtO81VC
+y7aJD8kcU7ni6G5uVX5fJhUKKNXmY4V8E3prJI2wpodZUFnjkvmQ87VhMJuvTOme
+hs/41WyhXVMRZwK9cxENOObzeLHD8JUg54Cx6zF/PmVN9Wlw2qy8efJ06ZimrWq+
+oCAg9A/+UAwt0+M1VgCIgK36iP16RxP/i2C+mphwupsE6H6aJARoiGpGGgEfIsJw
+Q4+Sg2JDHBCxxrfIyshGWKLb0twGfswaRCdNwA6wD6p+XwNkgo0PzfCCU9pLIb3/
+A3IvaXmgtEQsPozeEJ20DUtFOmlWlNN/gzSkNaMmA6eXwm3HKckXF/8BZqMxzK3N
+NPmhRcDJF6hFt2aHtzaWDChBoepqOmrUfpRiU+NFms+2qzuZZSGH/0BgI8g9zUZQ
+GvftzPVs6x0EHdV+98G58Z/G1tHG/gB6P9BDhh+e8UE936YnLeKvQ46dZeff46W0
+MJ8xyO24Ak0/6N8Kw9aBvefs11tsENlEnCuXrdbZ2xSrTyHN5Pi5ep9YAvY0Pw5p
+OmE+38xF7i22B6syrm9HQXyfsnD0kDmwSTgDQKKdKbvztpoXU0mx1BMWExxg77Bn
+WdiBOdpy2jR1JetfkKj6o3uy1Lsxxjv5CaV+08q9iA74TsjDe+lvR4Onbeytn6WR
+HJGS2zWmC/9+CTFN1w2PvlnNFGdxMQbwhC6cqqDBsvO1Zk+IH+1r/egSLY3LuoEx
++hmIwl6BpKx+vBxB/x8DVHh3Lw3UkLkDN/WN3TAiiDfCSQZtvwqV2C30g8Adx2hH
++y2ntD+AU/c+P7A1zCcYrHgN53MXmSDGSHW+1+YyY2PEdD6nLUiMzyww6ryofN3N
+VHZi0KIFLc4039jsFNKOdcWa/p8K6eOQPPsJNGUxu2qogaQFt7uw1/WvRbp29Dkl
+ccmJaQWBw0errBiDydU8EKyTx5o6Lu7BD+unT0uM/Kh4UDzHL6X1aQ3/uws/SHF1
+nLE9lp0PtV+oVyqbuL7889gsohpfFn8/bUDzxgljQCjMHUlOzmvekvu9b0yiTlpu
+2k5CoXbRCgg5eZ71eGeTgVc8taJtidLD/oFGfy65kMbAsP17zhzezz44aVbRG9S3
+XhBVovTU20jSyPUsHa+88KX/SjoESRVq3rEwaYzQ4hQp0OsKCNvhFsXQ6HhMkY2A
+S37FdYPIv0eepU0UM0uSM2Gx2KTarmR8KH09SZNw3JVkDoT7fJclPrc0w7qok85R
+FsT8sM2MGukmAqKiEClxG4gkm3OB6p04dI1mfOaZU0FmYhDXupTajbKgAZKziOE0
+SBXGvIPmmcpx3lZ9igAw8Hnf7EKysTmoHqpGgkaArXlibvnOJTc/3t1xF2ETYS1u
+TA/00Bap3x3/7RFakFAEI+7n1RJZRaXxwZJ+m54KFEIjQ4Vhfqrhpi3T5TZunYXK
+Y4cY4gaROW3evz61OWdPixs8kBArNkmRawqLH0MOk+su8DOnocaSrb5fK/+APD3n
+DXyqM73E0oZxyNmf2nS4ZkNe3g+H0VWJms5yL6is3UGcPJZpWKoBJWHb3sP1V1fq
+xfbsH+qJTUfQYrTB85aasMBnx1FeuJFSaznzZSvu3vOSQ18i8EBYSShBV6BUBw+Z
+lJfcjxpXwKqRD7VqDC6XNhVezx43PIfj/RVp+5/bNtoExzQRJ0OJeKTEh2XcOkYh
+i8BiZW8P4hbGiwAOnQs6F8C9s7qRZxyanybhNuBkm7pr7jykXrQwKUGNoIjR7qa5
+0ZkNXiVTe26W3mq6BnFLz8LQVs1RCtf15lBCAH+fgpcOloUDtG25ZO1gCRIYt4fp
+dJ6jlQNFGJzQuFUn1tX7G+k7wnHY8Cug3lJocQ/Qy+DMetEJUKTIj0jgFb8dyxlQ
+Ve1UawVXrf8o448zICDw3sZUsMP0ew1DPBGcPYa5G6y1qQLaGhKxzpBRBvWAlKl9
+VpyS+12kXAlB/oBgkmEREnJmZQNfDb3dncoEvVwHHtP/BJKWNHGRrlezYe6/Wznz
+9W9lBm72I++Hh4Aj0t0A6vqtTv+sxI+rpTfvJAMICUdjRcn56c33I+gl+KrV4rDA
+46GHi07CrrAUDkRdrCQWmag8TLxNGbcu9uHTgTU2ExwWLoBLTlgBeJ13R/FcMjGP
+aUg6273y39+XSxDwsNZWs/Kp8z4tM4hk3Dhi7UPgLswjuFoNs6Qci6EuWklU/EgO
+pw1CKiKcFVz92gTvUotkvCeDHrvg+fEwSCF2BqPDqqd2kQwj8SFjTMxn4R3Ndxhs
+cvYyFQ90gqLytGVamcMPdxMTNX4XdCKNDEV/n8ClbVHkW8Z47DIgsWhnHhjdtQKu
+6wYBz4QDdTn/85U/TR0Qmdmc11lAsnex/17Ctfjyfb/C0JuCx3eswLeH1Q4/lBjJ
+tKtWkF0C2Q7dqJQxhlU5hKiQUblxbhFSo7prHKMj6tf9zVj5ykvKfQi17ar+XI/R
+OwaXCzK7r29jvtNmXtuMylbTqg+WJ3TlxGn5GBAFQX361Rc4NtoVGj0nrXQIGxrs
+b3TpjaRsSBkL6g7fguG2zr63uZxCIoQFlPwsWPxkG7hKG9L5RrIdQTjUewXZmtnF
+nKhIR3sTmIhRYncQHADY0A0PYF/ynAiyJZGjmZr7h3gcLDsfvoyU8JGEUolDXL6G
+8lj1bFbM2PnesOmsx7d1Jh9y6Ij1aXAio1v5RuqUGu2wyrz4k3XRwh96LkoU5xlL
+nCtnKC4szFitseAl4O3CjsiU2awdF4NK23XkDTHof7diIOBd0ZdCC7cAEfDAii97
+l5Q4yW+nxtfIgJ5LxVm5kGkMf1xZ3v0tcQfV1Y8qAJjEh1cUrpPzLBmL+K9ThGfZ
+ngBH1kWVP/eU//4fxxHh9ElZaG0wbUisH2GBXnW/A6COPfTICMX+lhPe8tR5du4R
+LOBMGY0c66fKPK+0SdGzKCSAIOsdnTXEAYX3T0WPWOT6XEYNHENmlS+1OljL5JP8
+Rc2kozy/0Ay0az1QtUTPBTjnJ2WjaF6DLdtArqJkYKiIHXjthQpMhiGk66XEjAw3
+8QJ5Y1dUJfjEWstdGtG0un6pJ/Yogp+O8wuFmTGfnneR7HgXRVD6me6sL5JZ2AXh
+EraR2i3XlMiDtbDugb9FYjoFoi8JRSc3vPQJXLCtAhUxW8g=
+=Kbhy
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testDecryptVerifyFileToString.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+hQIOA5+T+RFnKO8SEAgA1bmDFmLP1hXxeURROoAY0fGpOv8CkdPUBUs9A5ERh/lg
+lIz5JpVqM72A/QFjg+SxLSca4Yp7RRrKHhZU3Dt+VbLKGIfCRSoZg1ob7LsQHKlb
+HjTUwVaRHUCl7oAqMqqnQ3BIoP0s1p4t8NafsDsoMMD4FWOhh9lI37/kQV2ZUloz
+Y54XiPppy9cIGLuiKmufjCp1j+/nGIgx/zWWarIMrCm3jxdbV2ZQWfNI4cYvpCvg
+QKCtsLUo/8ccCJa1K681E6UwEVTvk3FgGVPPDzX6eBilFI+IM1ZqRkVsmchSAzSZ
+B1z0wI2qOxmZs3dJEf6zfoIsNYCsdNMIiJjf22RTewf7BgkxNrRrVf43KGdxLfuv
+rUJf2LRDNA1S+aa1jL8cwwVw7BVFCsEU5LtdHm6LVJJYM8l023WaHsqr+d74gcWt
+xYnDcX8GsV/Q1LnqH/A4wh+auKpxihZxD9wNMZE7LpNIEE0u8bKlIGz3EeSpNlJN
+b0Bvs+HP8i2ZiizHQIrb3IC5wkzTDzt2WMmduhzEJOtxfJNf2gj/K2xT1Q+CF8bL
+0el8Jc79JkfkQqPDmbREXsj4Ddd3hNKTrYvbS0pjRwvF3a1AkPfxsyjNOH9oRTF1
+c908Iyy58pFz8kln8xXj1nk2aUO5REQymOiUtijkGUN4lFtS/VPtTMGCSe9o2yhs
+lNK7AUw+8e3ynBzffPwlqLFarkcvKTTmGxKcrkcRjirHGP4KZdfAtcschr9vDewM
+Z2w+CcA7mom8yeXmtVmi4MMcJkGem7VOCueK6RjHkhdd6Kcf9N/O0upUdew12Uax
+QOmkWykIB9IsgIiRsTAAqKAQYp2liqPZ76XRvXV4nFeRVcXQU4BcA29uZukuQe7J
+6+d7nc2BE2zjw1cGEW/8Yj9RoKDExNmTwtvUob+7MKIr8veV5a7jz90hnm2gow==
+=PmRs
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testFileMedium.plain	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,155 @@
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus luctus placerat erat. Curabitur euismod arcu id eros. Maecenas accumsan pede in orci consectetuer tristique. Ut nec felis non nunc euismod ornare. Ut dui eros, euismod sit amet, condimentum nec, varius sit amet, leo. Cras ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis porta. Donec neque magna, interdum eu, dictum non, viverra a, est. Praesent vel neque. Mauris vitae nunc. Praesent commodo eros eget eros. Nunc congue. Maecenas quis massa sed ante dapibus vestibulum. Sed at dui. Duis mauris nulla, sodales vel, tincidunt ut, sodales ac, tellus. Donec ullamcorper. Maecenas sollicitudin sagittis leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus leo.
+
+Maecenas posuere. Morbi massa. Maecenas dolor felis, dignissim nec, vulputate quis, auctor vel, lectus. Sed libero. Cras mi. Proin placerat libero vitae dolor. Donec non nunc vel nisi sodales facilisis. Ut a tortor vitae neque eleifend rhoncus. Suspendisse vehicula, lectus vitae elementum porta, diam eros scelerisque sem, et accumsan massa orci a urna. Vivamus posuere, massa sit amet sagittis pulvinar, leo erat congue metus, eu congue lacus tortor in mauris. Vestibulum dapibus lorem in turpis. Curabitur aliquet gravida purus. Integer quis felis at velit varius laoreet. Pellentesque aliquam consectetuer lectus.
+
+Nunc at sapien. Cras faucibus dignissim dolor. Sed id diam ac augue aliquet convallis. Proin feugiat, lectus elementum venenatis aliquet, nibh lectus porttitor tortor, sit amet aliquet erat sapien eu nulla. Morbi sagittis libero sed tellus. Sed purus turpis, sollicitudin vel, dapibus eu, vehicula vel, dui. Nullam fringilla tellus in lorem. Integer dolor. Mauris interdum tristique neque. Nullam ac magna.
+
+Nam vel eros id enim dignissim sagittis. Suspendisse pede. Aenean et lacus at sapien molestie consequat. Vestibulum sapien. Aliquam erat volutpat. Duis vel felis ac risus consequat tristique. Curabitur porta enim. Phasellus auctor consectetuer justo. Sed rhoncus congue turpis. Nam consequat massa ac elit. Nam aliquam. Nam velit.
+
+Aliquam condimentum vestibulum risus. Vivamus id nunc ut ante consequat hendrerit. Donec sit amet ante ut nisi vulputate malesuada. Aliquam id nisi at justo ornare imperdiet. Curabitur ac felis eu pede posuere pretium. Cras sed justo et enim pretium mattis. Maecenas nec metus. Fusce sed odio. Vivamus aliquam dictum nunc. Nullam aliquam magna eu massa. Etiam sit amet lacus. Duis velit mauris, ullamcorper sit amet, facilisis sit amet, ultricies id, neque. Aenean ut arcu in magna suscipit ultricies. Nulla mauris. Morbi sed purus. Maecenas vel augue id lorem tempor volutpat. Sed congue porttitor mi. Mauris fringilla magna quis enim. Sed eleifend, nibh ut ornare lobortis, augue mauris egestas sapien, sit amet rutrum risus sem non felis. Pellentesque ipsum augue, ornare et, lobortis sit amet, aliquet ac, nulla.
+
+Aliquam sit amet massa. Morbi nec odio ut diam ornare pellentesque. Etiam iaculis purus quis neque. Cras gravida velit at ante. Curabitur a justo vitae nulla molestie molestie. Pellentesque sed urna vel enim rutrum tempor. Sed lectus tortor, consectetuer ac, aliquet ac, commodo id, elit. Sed eleifend turpis. Maecenas turpis dui, vulputate in, euismod id, dignissim eget, massa. Integer id mauris. Mauris a diam. Curabitur scelerisque, arcu ac aliquet eleifend, nunc elit egestas libero, ut luctus ipsum enim in risus. Quisque a pede. Sed euismod ligula vel lectus. Aliquam erat volutpat. Curabitur quis ligula. Vivamus justo odio, scelerisque ut, feugiat id, dapibus quis, nibh. Aliquam et ante vitae risus mattis iaculis. Aenean pretium ligula et magna viverra vehicula. Proin felis.
+
+Proin malesuada fermentum sem. Vivamus suscipit. Aenean et risus. Quisque vel urna. In hac habitasse platea dictumst. Ut vel quam eu odio semper congue. Aenean pulvinar, quam eget faucibus consequat, purus est tristique tellus, quis iaculis lectus nibh a neque. Cras diam. Vestibulum est enim, pellentesque vitae, sagittis id, semper non, sem. Maecenas iaculis.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam quam massa, ultricies a, tristique quis, luctus ut, enim. Ut hendrerit tellus sit amet diam. Mauris eget tellus sit amet tortor lacinia mattis. Praesent eros enim, iaculis id, ultricies sed, ultrices id, eros. Donec libero nibh, accumsan id, vehicula vel, bibendum vitae, est. Morbi ac velit vitae nibh pharetra semper. Aliquam eros turpis, porta sit amet, bibendum quis, porta vitae, ante. Fusce ac turpis nec nulla euismod fermentum. Integer imperdiet lorem consectetuer libero. Quisque luctus. Nam erat augue, ornare vitae, accumsan vitae, molestie id, massa. Integer cursus. Suspendisse libero.
+
+Nulla sed magna. Nulla suscipit, urna a varius aliquam, mi nulla posuere eros, fermentum consectetuer dui orci vel ipsum. Fusce varius erat in libero. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi lacinia. Etiam accumsan ultrices erat. Integer eu mi. In vel purus. Integer porttitor. Fusce pede enim, venenatis sit amet, varius rutrum, convallis eu, orci. Phasellus dictum lacinia ante.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut non tellus eget metus rhoncus condimentum. Praesent consequat augue eu erat. Donec accumsan, turpis a ultricies venenatis, neque tortor porta velit, sed sagittis velit sapien a tellus. Pellentesque eget diam. Phasellus luctus sagittis sem. Pellentesque ac risus. Sed ac velit. Maecenas sed justo. Sed ut sem. Morbi elit massa, pretium eget, aliquet sed, ornare ut, ligula. Etiam vitae mi eget nisi facilisis molestie. Phasellus varius mattis mauris. Suspendisse ut nunc. Praesent nec arcu. Nullam in lacus. In vitae est.
+
+In hac habitasse platea dictumst. Mauris ultrices. Nunc vulputate, augue quis imperdiet vehicula, libero orci cursus lectus, et mollis velit lorem eget lorem. Ut id dui a purus porttitor varius. Nulla neque nisl, vehicula et, venenatis at, pretium in, lectus. Pellentesque at lacus et sem dictum laoreet. Vestibulum quis mauris. Morbi fringilla cursus diam. Phasellus id neque. Aenean magna sem, facilisis non, luctus vitae, egestas a, sem. Ut lobortis urna pulvinar diam. Fusce in velit eget nibh mollis vulputate. In lorem ligula, commodo ut, tempor non, egestas quis, leo. Nullam sit amet purus. Integer pellentesque sagittis orci. Quisque neque lectus, porta euismod, tristique et, dictum ac, arcu. Mauris congue consequat dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc ut nibh nec nibh facilisis elementum. Maecenas vel metus.
+
+Etiam id orci at nulla consequat volutpat. Vestibulum vel nulla et leo sodales fringilla. Phasellus eu nisl et quam fringilla molestie. Aenean eget metus. Donec diam arcu, dignissim vitae, fermentum dictum, accumsan ac, purus. Proin tempor aliquam lorem. Nullam facilisis odio a ante. Aliquam dui. Nam id leo et massa fermentum tempus. In pellentesque elit ut metus. Fusce mollis est in libero. Donec orci nulla, scelerisque non, elementum id, semper accumsan, ante. Phasellus nec risus porta nunc molestie vulputate. Etiam justo sem, sagittis lobortis, laoreet scelerisque, ornare nec, arcu. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc laoreet sem mattis massa. Cras porttitor lectus vel metus. Integer tellus felis, sodales sed, pharetra vitae, sodales sit amet, nulla. Maecenas vulputate vestibulum nisl.
+
+Donec sollicitudin sollicitudin ante. Curabitur sed ipsum. Nunc odio eros, consequat vitae, condimentum luctus, auctor at, tortor. Morbi nisl. Vivamus gravida metus vel justo. Aliquam eget quam sed nunc faucibus vestibulum. Nullam in erat. Etiam volutpat nunc quis turpis. Pellentesque blandit. Praesent sagittis urna in orci facilisis varius. Donec ultricies. Fusce lobortis placerat urna. Quisque mattis, enim id venenatis mollis, elit metus ultrices quam, id commodo libero nisi sit amet sapien.
+
+Quisque sagittis porta odio. Maecenas ac tellus. Etiam ornare nibh eu arcu. Quisque euismod facilisis lorem. In mauris. Vivamus urna. Sed nisi. Curabitur convallis ultrices arcu. Nullam sit amet mi. Donec at arcu. Etiam hendrerit. Phasellus ullamcorper, orci nec fringilla convallis, felis purus tempor eros, tempor venenatis massa velit sit amet velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec libero.
+
+Fusce aliquet. Suspendisse at purus in augue lacinia tincidunt. Vivamus tempor pellentesque mi. Aenean consectetuer ultrices ligula. Nam turpis nisl, congue at, semper vel, dictum nec, elit. Sed lorem odio, bibendum eget, dignissim sit amet, cursus vel, erat. Donec cursus nisi ut lorem. Morbi quam mauris, hendrerit nec, egestas congue, placerat ac, nisi. Morbi auctor, risus in pharetra ullamcorper, enim tortor vulputate massa, ac interdum est libero ac purus. Mauris faucibus turpis a lacus. Proin pharetra magna vitae est.
+
+Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin iaculis, tortor sed pharetra sodales, turpis nunc mattis neque, ac porttitor ipsum lacus et tortor. Nulla eleifend luctus nisl. Nulla fermentum elementum dui. Cras dictum sem vel lorem. Nam pulvinar, elit in hendrerit hendrerit, turpis arcu accumsan sem, id elementum lorem ante ut augue. In pulvinar lacus sit amet nisl. Aenean venenatis, tortor at hendrerit venenatis, dui erat posuere urna, eget pharetra diam dolor pulvinar tortor. Pellentesque consectetuer. Sed orci. Morbi lacus ante, mattis et, ultrices sed, scelerisque sed, pede. Nulla eu nisl dapibus purus fermentum varius. Etiam rutrum vestibulum sem. Fusce libero. Duis laoreet. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum arcu nisi, mattis vitae, blandit non, venenatis eu, purus. Fusce fringilla, dui id iaculis luctus, mauris ipsum vulputate libero, quis posuere lectus ante a arcu.
+
+Mauris imperdiet libero venenatis odio. Integer varius laoreet turpis. Vivamus fermentum. Vivamus dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur at diam. Nulla suscipit gravida erat. Nulla enim massa, bibendum ut, pellentesque id, sollicitudin sollicitudin, massa. Integer varius, arcu ut condimentum commodo, neque neque blandit pede, vitae adipiscing tortor nibh eget sapien. Proin volutpat urna eu diam.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed quam pede, gravida sed, semper eu, fringilla quis, sapien. Fusce tincidunt nisi. In eros odio, vestibulum et, dapibus quis, tincidunt ac, est. Fusce eget purus id leo adipiscing varius. Fusce euismod lorem id turpis. Phasellus tincidunt blandit sapien. Integer sagittis orci at pede. Aliquam accumsan. Morbi ac orci sit amet magna scelerisque dignissim. Quisque vitae lacus quis neque convallis ultrices. Vestibulum ac arcu at mauris ultricies mollis. Nam id nulla. Nunc sed ligula. Sed nulla lectus, hendrerit ut, convallis ac, dapibus nec, odio. Ut blandit sapien nec libero.
+
+Duis tempor fermentum pede. Suspendisse imperdiet tincidunt risus. Integer lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque id odio eu nibh placerat adipiscing. Suspendisse quis leo eu velit laoreet hendrerit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec euismod nibh nec leo. Nullam sagittis fermentum ligula. Sed feugiat cursus elit. Pellentesque id tortor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vulputate leo ut neque rhoncus tristique.
+
+Aenean molestie, nisi a venenatis accumsan, mauris risus interdum tortor, et laoreet velit metus quis dui. Ut sed nunc. Quisque tempor. Suspendisse metus lectus, congue id, blandit quis, cursus eget, urna. Sed ac purus. Suspendisse sed eros sit amet risus eleifend pellentesque. Donec diam. Vestibulum vel mi. Aenean sagittis magna quis libero. Nunc scelerisque gravida metus. Aliquam nulla ante, rutrum vitae, vehicula et, pharetra sed, nunc. Nulla nulla enim, commodo vel, euismod id, convallis at, purus.
+
+Nulla pulvinar. Praesent et elit eget justo varius laoreet. Nunc ornare feugiat nisi. Aliquam vel felis eget erat semper sagittis. Aenean vel nisi. Aenean vehicula adipiscing enim. Nulla at sem. Sed commodo pretium erat. In turpis. Cras ullamcorper, magna non placerat vehicula, lacus justo condimentum leo, a tempus lorem leo vel nisl. Aliquam ut magna. Donec eu neque. Nunc semper quam vel est. Quisque eros tellus, vehicula sit amet, ultricies ac, facilisis vitae, dui. Morbi gravida, ligula vitae vestibulum facilisis, metus ipsum fermentum nunc, sit amet vehicula nisi urna non nunc.
+
+Ut non est vitae urna bibendum faucibus. Praesent at risus. Morbi nisi ante, ultrices tincidunt, accumsan et, lobortis quis, ligula. Proin nec est. Ut varius mollis dui. Etiam tortor purus, facilisis quis, viverra id, tincidunt vitae, dolor. Sed ullamcorper. Ut nec lacus. Phasellus ut metus a felis vulputate sagittis. Praesent magna. Morbi pretium placerat pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam at tortor sit amet sapien adipiscing lacinia. Aenean vitae enim. Vivamus adipiscing, mauris vel venenatis scelerisque, leo ligula lacinia orci, sed commodo dui nisi sit amet leo. Integer a est sed lacus pretium accumsan. Mauris scelerisque pulvinar leo.
+
+Vivamus tristique dui ut est convallis consequat. Phasellus turpis pede, fringilla non, sodales vitae, eleifend ac, lectus. Vestibulum eget nisi sed eros dapibus pretium. Fusce tincidunt pretium neque. Aenean elementum pulvinar lorem. Vivamus sit amet velit. Mauris quis arcu. Curabitur pede purus, suscipit sed, elementum in, dignissim at, dolor. Morbi eu odio. Ut ipsum nibh, egestas eu, tincidunt quis, lacinia quis, lorem.
+
+Vestibulum sollicitudin sapien a dolor. Mauris sit amet augue in diam condimentum semper. Etiam est. Fusce sit amet leo eget elit fermentum faucibus. Praesent ipsum quam, tristique ut, tempor eu, facilisis sed, sem. In vitae nisl. Nunc et pede vel augue malesuada tincidunt. Nulla felis. Etiam vel dui et nibh fringilla rutrum. Duis aliquet dui. Proin sed turpis ac tortor aliquet porttitor. Pellentesque congue venenatis est. Vestibulum in libero ut nulla condimentum porta. Aliquam erat volutpat. Vestibulum tincidunt. Donec at augue eu risus cursus venenatis. Suspendisse potenti. Ut consequat sem.
+
+Aliquam gravida est ac eros. Vestibulum sit amet mauris non diam tincidunt condimentum. Pellentesque commodo egestas diam. Phasellus semper risus at tellus. Duis eu enim. In ac augue sit amet sapien commodo tincidunt. Morbi convallis enim non tortor. Aliquam turpis. Quisque tellus nisi, porttitor in, consequat in, elementum quis, ipsum. Nulla id turpis ac nisi sagittis luctus. Praesent ipsum magna, vehicula at, luctus nec, accumsan convallis, odio. Curabitur non augue et risus commodo laoreet. Suspendisse commodo lacus sit amet orci. Pellentesque molestie tristique arcu. Aliquam erat volutpat. Praesent sit amet lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+
+Maecenas ornare risus in tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi luctus, nisl id laoreet aliquam, eros leo sagittis pede, vel venenatis dui odio venenatis quam. Quisque justo justo, lacinia sed, facilisis vel, dictum eu, erat. Proin ligula dolor, dapibus id, pellentesque id, consequat et, erat. In posuere. In sed est. Nam volutpat orci id nibh. Morbi convallis magna vitae mauris. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas felis. Donec condimentum. Sed pretium eros et est. Curabitur vel mauris. Sed tellus. Aliquam tristique facilisis metus. Nulla elit justo, sollicitudin eget, pulvinar eget, hendrerit vitae, est. Nulla semper dolor sed lorem.
+
+Morbi nisl. Proin pretium, ligula vitae pretium congue, turpis lacus bibendum magna, suscipit aliquet odio ligula nec risus. Mauris vestibulum. Pellentesque vehicula dolor sed nibh. Pellentesque id massa. Mauris sit amet justo quis turpis mollis tempor. Nullam vulputate velit at pede. Aenean fringilla ultrices magna. Proin urna tellus, faucibus in, blandit in, iaculis blandit, quam. Vestibulum turpis. Donec ornare aliquet justo. Integer velit. Sed at felis a arcu viverra congue. Suspendisse laoreet tortor at diam. Suspendisse quis arcu eget sapien condimentum molestie. Proin iaculis aliquet ipsum.
+
+Curabitur lorem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque in tortor. Curabitur imperdiet. Maecenas bibendum vestibulum nibh. Nullam vehicula lectus ac lectus. Morbi et lorem. Aenean sed metus. Cras commodo. Vestibulum a tortor. Duis pede nulla, posuere nec, hendrerit quis, faucibus id, nisl. Integer id purus nec quam aliquet ornare. Fusce euismod nibh ultricies pede. Quisque eget est hendrerit arcu mattis sollicitudin.
+
+Vestibulum viverra, lectus porta scelerisque venenatis, elit diam tempor ipsum, eu euismod nulla tortor eu orci. Praesent vulputate arcu vel magna. Maecenas blandit lectus. Aenean nunc orci, ornare vel, aliquam molestie, mattis non, sem. Fusce ac turpis et felis suscipit sodales. Nunc sollicitudin feugiat mi. Sed mattis fringilla magna. Quisque ut purus. Nunc tempus velit sed quam. Quisque mollis laoreet lorem. Integer eu augue. Morbi lobortis urna aliquam est.
+
+Maecenas eu tortor. Etiam commodo porta lectus. Ut vehicula, lorem id congue ultricies, augue ante pellentesque mauris, quis bibendum ante dui a dui. Aliquam varius mauris et neque. Vivamus consectetuer mauris eu elit. Cras vel nisi. Cras mollis sapien vitae tortor. In quis sem. Sed malesuada, eros non bibendum viverra, leo turpis iaculis ligula, nec auctor enim sapien nec magna. Vestibulum cursus, risus quis tempus aliquet, pede magna volutpat diam, tempor rutrum dolor dui a lacus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+
+Vestibulum euismod varius elit. Fusce et erat a leo ultrices semper. Vestibulum a ante quis neque lacinia laoreet. Nullam nisi ipsum, vulputate a, molestie quis, ornare sed, felis. In posuere ligula non odio. Nulla eleifend viverra arcu. Sed mollis metus ac massa. Quisque vitae tortor sed est laoreet sagittis. Donec et justo. Pellentesque porta mauris ut turpis. Ut diam. Nulla neque lacus, commodo egestas, iaculis quis, porta a, nibh. Integer ultricies, libero quis hendrerit imperdiet, quam purus consequat ligula, vitae dignissim elit nisl non turpis. Morbi ut orci in diam luctus convallis. Vivamus ligula.
+
+Sed magna leo, aliquam at, hendrerit ac, feugiat non, justo. Sed lectus. Suspendisse elementum pretium tellus. Aenean egestas. Aenean faucibus porta purus. Nullam lorem dolor, iaculis vel, lobortis et, euismod a, eros. Donec eget mi. Sed vitae ligula eu massa cursus luctus. Nunc ullamcorper. Nunc purus nulla, feugiat et, vestibulum quis, hendrerit at, tellus. Sed risus massa, porttitor elementum, rutrum a, posuere sed, nulla. Etiam blandit egestas ligula. Proin rutrum dolor at odio.
+
+Quisque et nunc. Maecenas sed dolor. Donec suscipit mattis magna. Donec sit amet leo. Aenean lobortis dolor non elit. Cras vulputate consequat tortor. Etiam sodales porttitor ante. Morbi ut leo quis lacus lobortis eleifend. Nunc fermentum, nisl sit amet pretium egestas, velit eros tincidunt lectus, non vulputate ipsum urna vitae erat. Integer sit amet sem quis turpis varius posuere. Proin in metus vitae neque commodo tincidunt. Praesent iaculis fringilla justo.
+
+Vestibulum nec sapien. Curabitur eros. Duis commodo, diam non congue imperdiet, risus nisl auctor nunc, eget sodales magna sapien egestas sem. Vivamus id mauris. Phasellus dapibus, lectus at ornare lacinia, mauris sem imperdiet ligula, bibendum imperdiet lorem dolor at purus. Quisque ultrices nisi at augue viverra scelerisque. In vel risus. Fusce quam diam, luctus a, pharetra ac, tempor ac, lectus. Fusce neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eget augue.
+
+Quisque in tellus vel lorem vulputate iaculis. Integer a pede. Integer vulputate molestie lorem. Donec velit magna, iaculis id, pretium in, aliquam nec, felis. Fusce nec libero sed velit egestas molestie. Maecenas turpis tortor, molestie in, hendrerit eu, tempor sed, enim. Fusce non orci. Suspendisse eleifend neque vitae odio. Quisque bibendum, justo a tristique gravida, sapien ante adipiscing nisl, non vehicula purus mi sit amet metus. Donec pharetra, felis nec interdum imperdiet, dui ipsum tempus diam, ac aliquam lorem libero vel nunc. Integer tincidunt adipiscing risus. Maecenas ante. Nunc vestibulum, nibh nec laoreet commodo, nibh erat tempor erat, ultricies mattis pede turpis luctus leo. Phasellus egestas ligula ac massa. Quisque tincidunt, erat ut volutpat ornare, neque eros tristique ante, sit amet bibendum turpis enim eget lectus. Pellentesque hendrerit lorem sed sem. Pellentesque semper elit non velit. Mauris nisl.
+
+Proin sed pede ac est mollis vestibulum. Nullam faucibus, lectus vel mollis accumsan, ipsum massa porta quam, id egestas turpis ante quis sapien. In aliquam ipsum in neque. Quisque id sapien. Morbi vitae elit. Nam leo eros, ullamcorper at, molestie a, mattis sit amet, augue. Pellentesque convallis suscipit elit. Nulla viverra. Nam ut erat. Duis metus. Mauris neque. Nulla eu odio elementum dolor adipiscing tincidunt. Aenean convallis, eros quis hendrerit luctus, dui tortor hendrerit ipsum, nec egestas nisl leo id tellus. Praesent eu turpis non tellus sodales semper. Duis quis enim sed nunc vulputate posuere. Proin leo. Proin mi risus, dapibus id, pretium sed, pharetra eget, diam.
+
+Aenean risus lacus, placerat quis, dictum dapibus, ullamcorper at, ipsum. Ut egestas sem sed quam. Nullam gravida lectus sed mauris condimentum accumsan. Nam ac pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris varius bibendum ligula. Aenean neque. Nulla facilisi. Sed ultricies, lorem laoreet tempor ultricies, erat pede volutpat nibh, eget blandit quam massa hendrerit dolor. Fusce consectetuer, mauris id cursus eleifend, justo libero ultricies sapien, sed consectetuer odio mi eget elit. Vestibulum id arcu. Etiam tortor erat, accumsan vitae, pulvinar a, fringilla non, ligula. Maecenas venenatis semper urna. Quisque ac dolor. Nulla tellus. Quisque varius.
+
+Vestibulum non lacus. Phasellus iaculis. Duis pede. Praesent viverra lacus quis massa. Mauris eget dui. Proin aliquam, mauris eu dapibus viverra, pede nibh accumsan enim, sit amet aliquet nibh diam bibendum est. Nam dui. Morbi porta. Fusce scelerisque turpis ac arcu. Quisque quis erat. Nam sodales tellus et velit. Morbi vel arcu. Vivamus at nibh at odio congue scelerisque.
+
+In hac habitasse platea dictumst. Maecenas sed dui. Nulla turpis. Nulla rhoncus, quam lobortis tempor convallis, justo diam tristique erat, ut lobortis massa pede id magna. Donec purus. Cras tempus ligula eget nisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse adipiscing sapien vitae enim. Donec egestas metus at sem. Sed in massa. Proin vulputate risus et nunc. Cras ut purus. Ut posuere semper eros. Praesent diam. Donec at lectus ac odio fringilla mollis. Mauris pede eros, faucibus in, cursus sit amet, adipiscing eget, ipsum. Donec malesuada laoreet purus.
+
+Sed mauris tellus, scelerisque eget, semper quis, vulputate non, leo. Sed quis dui sit amet enim facilisis faucibus. Sed sem. Quisque sit amet odio. In pellentesque scelerisque elit. In hac habitasse platea dictumst. Maecenas mattis massa quis lectus. Nam arcu. Nulla accumsan magna et ipsum. Donec felis erat, tristique ut, tincidunt a, elementum quis, metus. Aliquam erat volutpat.
+
+Vivamus ut orci pulvinar nisl condimentum varius. Etiam condimentum dui quis lectus. Donec ut sem sed nisl dictum pulvinar. Maecenas arcu enim, pretium vel, tincidunt quis, tristique pharetra, risus. Suspendisse pede lorem, luctus et, eleifend vitae, eleifend et, purus. Cras pretium est at tortor. Aenean ac ipsum et dolor dictum suscipit. Donec et magna vitae lectus malesuada facilisis. Cras dignissim. Morbi eget purus. Nulla in tellus. Ut turpis. Nunc imperdiet. Donec pretium pellentesque diam. Aliquam dapibus.
+
+Cras eu tellus ut erat tristique pretium. In hac habitasse platea dictumst. Phasellus lobortis. Proin a enim malesuada nunc luctus suscipit. Maecenas eu risus imperdiet ligula hendrerit tincidunt. Nunc egestas varius turpis. Proin sollicitudin ipsum. Maecenas hendrerit vehicula mi. Morbi sed magna eu libero egestas imperdiet. Fusce ullamcorper ultricies quam. Morbi quis ligula. Aliquam erat volutpat. Sed luctus. Duis eu risus. Mauris et turpis quis nisl sagittis lacinia. Aenean faucibus venenatis risus. Morbi tempor condimentum dolor.
+
+Integer sapien sem, scelerisque quis, tincidunt ut, fringilla sed, eros. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec eu lectus. Suspendisse malesuada leo eu ipsum. Aliquam condimentum nisi eget turpis. Ut nulla turpis, scelerisque in, rutrum in, sodales eget, turpis. Nullam pharetra euismod odio. Proin elit risus, pharetra vitae, ullamcorper in, posuere nec, magna. Donec semper lectus at sem. Morbi vitae libero. Quisque erat lectus, tempor vel, venenatis sed, dictum placerat, mauris. Integer malesuada.
+
+Quisque eget lacus. Aenean vitae enim in odio congue scelerisque. Fusce pellentesque accumsan erat. Praesent ante velit, sodales eget, tincidunt in, ullamcorper et, nisi. Sed vulputate. Sed fringilla, libero at aliquam tincidunt, odio lacus sagittis lectus, in volutpat est dui ornare nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam id ligula sed ante congue pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ornare adipiscing tellus. Suspendisse mattis. In vel elit laoreet dolor placerat elementum. Integer auctor nunc non tortor. Fusce accumsan metus vel tortor. Suspendisse vehicula mi vitae magna. Donec in purus vel libero hendrerit rutrum. Nunc rhoncus sapien ac sem. Nullam convallis malesuada arcu.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum sapien. Cras sem. Sed enim metus, porttitor in, imperdiet eget, placerat ac, sem. Mauris ipsum. Maecenas vitae lacus. Sed semper facilisis velit. Nam dignissim, felis sit amet tempus lobortis, libero metus dictum nisi, sit amet suscipit lorem odio non justo. Curabitur euismod, purus ac ornare egestas, orci massa tincidunt metus, et porta nulla nulla fringilla nibh. Aliquam id ipsum.
+
+Maecenas ac lorem. Nullam diam tellus, ornare ornare, convallis id, iaculis vitae, mi. Phasellus hendrerit. Cras malesuada pulvinar felis. Nunc id turpis vitae nisl vestibulum sollicitudin. Fusce elit risus, posuere vitae, mollis ac, commodo placerat, libero. Integer libero ipsum, congue ac, placerat non, sagittis nec, nibh. Vivamus sagittis, quam nec ullamcorper malesuada, libero magna dapibus dolor, in ornare enim leo non est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec elit. Curabitur tempor sem vel lorem. In ullamcorper. Curabitur eu odio id mi commodo pulvinar. Nam ut nisi. Nulla consequat lorem ac lectus feugiat elementum. Integer tincidunt, leo et eleifend tempor, augue ipsum ullamcorper sem, pulvinar faucibus velit lectus a dolor.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec mi sit amet lacus facilisis porttitor. Nam orci ante, dapibus eget, interdum in, hendrerit eu, augue. Aenean vehicula, ligula in porttitor volutpat, dui lectus mollis metus, sit amet tincidunt orci enim at nulla. Proin vestibulum vehicula orci. Aliquam erat volutpat. Fusce sit amet erat. Vivamus vestibulum pellentesque lectus. Fusce magna ante, pharetra quis, molestie sed, molestie vel, massa. Donec in erat at nunc sollicitudin euismod.
+
+Nunc et massa ut quam posuere vehicula. Cras fringilla ante vitae orci. Vestibulum mattis congue ligula. Duis eu pede eu odio tristique sodales. Curabitur sagittis venenatis ipsum. Etiam vitae lacus a mauris feugiat ultricies. Nulla convallis tortor et erat. Nunc nunc. Phasellus porta eros at dolor. Morbi placerat. Aenean non ipsum in libero euismod euismod. Maecenas vel justo. Proin sit amet orci adipiscing tellus tincidunt interdum. Pellentesque euismod nulla vitae est placerat lacinia. Donec malesuada, elit laoreet tincidunt sodales, lorem ligula consectetuer purus, ut rutrum mi neque eu sem. Phasellus ac odio.
+
+Vivamus lobortis. Aliquam erat volutpat. Nullam rutrum ipsum in dolor. Nullam vel libero. Duis lacinia lectus vel lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sodales dolor. Proin rhoncus, lectus pharetra faucibus facilisis, diam ligula hendrerit leo, ac aliquet sem ipsum id arcu. Ut non erat eu risus ornare rhoncus. Mauris non lorem ut magna convallis rutrum. Integer est purus, venenatis in, euismod quis, feugiat vitae, leo. Suspendisse laoreet tellus eleifend neque. Sed vitae arcu nec pede tempus hendrerit. Mauris commodo, leo ultricies venenatis consectetuer, turpis tellus hendrerit diam, eget lacinia diam tortor in leo. Etiam luctus orci ut sem. Donec sed mi sit amet erat pharetra ullamcorper. Phasellus dolor diam, euismod et, pharetra ut, convallis sed, orci. Nam vitae lorem.
+
+Vivamus et nulla. Suspendisse vel tellus sed quam blandit rhoncus. Proin convallis erat vel dolor. Proin ut leo. Quisque ut pede non augue vestibulum egestas. Donec interdum justo eget dui. Nunc malesuada neque et felis. Donec eu dolor. Aenean in dolor vehicula diam bibendum auctor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed molestie laoreet nisi. Mauris condimentum magna quis massa. Nulla faucibus. In leo. Morbi vitae dolor. Aliquam erat volutpat. Sed euismod. Fusce pede. Nullam ipsum mauris, ultricies tempor, laoreet eu, pretium ac, sem.
+
+Praesent accumsan risus quis mi. Curabitur id nisi. Fusce imperdiet. Proin vitae velit. Vivamus eget urna vitae metus ultrices sodales. Mauris vel mi. Phasellus nisi metus, auctor sed, facilisis id, volutpat a, nisi. Nulla sagittis. Duis vitae nisl. Phasellus felis tortor, cursus vitae, convallis et, fringilla egestas, eros. Pellentesque nunc lectus, mattis laoreet, sollicitudin eu, imperdiet auctor, quam. In hac habitasse platea dictumst. Integer lectus nibh, tincidunt accumsan, sagittis nec, viverra vel, pede. Integer porttitor varius nulla. Aenean consectetuer leo a nunc. Suspendisse vel risus. Pellentesque sed eros.
+
+Aenean consectetuer diam ac diam. Sed varius semper tellus. Mauris condimentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget enim. Vivamus felis ante, porttitor a, cursus eget, cursus eu, quam. Aliquam consequat consectetuer lectus. Cras non tellus. Aliquam bibendum hendrerit ipsum. Phasellus auctor ullamcorper nunc. Suspendisse tempor neque at sapien. Quisque malesuada libero quis ipsum. Sed pellentesque pellentesque est. Aenean rhoncus magna eget arcu. Praesent dignissim. Duis magna. Praesent nunc nibh, sagittis vitae, iaculis sed, facilisis a, orci. Nunc eu lectus id velit porta commodo. Aliquam a tortor.
+
+Nullam hendrerit lacinia velit. Curabitur et velit ac libero tempus sollicitudin. Praesent aliquam dui eu enim. Aliquam erat volutpat. Duis quis risus. Sed sit amet metus eget odio porta iaculis. Duis lacinia, nibh vel hendrerit malesuada, odio quam eleifend sem, non aliquam nisi lectus ut nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus sodales. Cras euismod ligula quis velit egestas commodo. Vestibulum vulputate ornare quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus convallis ligula id nunc.
+
+Nam consequat felis condimentum pede. Etiam nec risus. Mauris vehicula laoreet enim. Quisque nisl urna, tincidunt eget, congue non, rhoncus eu, odio. Ut quis velit. Aenean semper purus in tellus. Duis sagittis auctor sapien. Ut dapibus mi in lorem. Ut nunc. Phasellus id purus. Etiam ultrices. Sed nec nisi. Praesent ac augue nec turpis sodales cursus. Praesent et quam et turpis tempor mattis. Ut a velit eget enim feugiat pharetra. Cras blandit enim non ante. Aliquam erat volutpat. Quisque nulla arcu, eleifend ac, mollis a, congue at, leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin malesuada imperdiet sem.
+
+Cras a justo. Suspendisse volutpat mi in nunc. Vestibulum placerat sagittis arcu. Vivamus pede. Vivamus ultrices risus at leo. Nulla egestas adipiscing mi. Quisque cursus mi non arcu. Nulla congue. Donec dictum imperdiet diam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin quis mi. Duis odio. Morbi tincidunt enim in mauris. Duis mi enim, dapibus a, suscipit ac, porttitor eu, leo. In aliquam, dolor vitae congue hendrerit, lacus risus consequat risus, ut molestie mauris purus a ligula. Nullam sit amet diam. Etiam congue malesuada dolor. Integer dictum. Fusce facilisis. Quisque neque velit, feugiat a, egestas quis, tempor a, magna.
+
+Fusce ligula. Praesent tincidunt mollis diam. Aenean libero neque, suscipit nec, volutpat in, ultrices sed, turpis. Etiam consequat bibendum arcu. In turpis. Pellentesque et odio. Proin ac lectus vitae elit malesuada sodales. Aenean bibendum enim ut nulla. Suspendisse turpis est, tempus non, cursus eget, pulvinar eget, nibh. Aliquam erat volutpat. Etiam risus urna, accumsan vel, pellentesque in, commodo sit amet, nisl. Nulla eget sem sed nulla porta egestas. In tempus est nec justo. Aenean placerat. Aenean commodo nulla nec magna commodo luctus. Nunc mollis sem sed metus.
+
+Sed vitae libero et felis varius dapibus. Maecenas at orci. Etiam quam turpis, interdum vel, interdum vitae, dapibus sit amet, pede. Suspendisse consectetuer velit dictum arcu. Vestibulum dui dolor, vehicula et, ultricies ut, facilisis et, enim. Duis eu neque id diam tempus ornare. Phasellus luctus faucibus ante. Morbi id enim ut dolor interdum volutpat. Nam non nunc. Nulla sagittis enim vitae mi. Fusce sit amet odio.
+
+Nulla elementum, massa ac tempus suscipit, leo magna tristique urna, ac gravida eros nisl sit amet est. Curabitur posuere mattis mauris. Integer pellentesque sodales velit. In scelerisque metus. Suspendisse potenti. Duis felis. Nunc vitae enim eget metus tempus egestas. Suspendisse potenti. Integer viverra sollicitudin nunc. Curabitur lectus. Sed faucibus. Fusce justo. Nulla facilisi. Donec viverra lorem sit amet ipsum aliquet imperdiet. Maecenas quis est. Cras nibh nisi, pellentesque sit amet, porttitor vitae, adipiscing vitae, massa. In hac habitasse platea dictumst. Etiam dignissim.
+
+Integer neque libero, consectetuer quis, egestas sit amet, feugiat sed, tellus. Nullam sagittis erat id purus. In erat pede, cursus ut, posuere eu, laoreet non, urna. Sed elit enim, placerat eu, rutrum non, consectetuer vel, purus. Curabitur eget magna. Phasellus ultrices velit at ipsum. Praesent posuere consectetuer lorem. Donec dapibus libero a eros. Phasellus convallis luctus quam. Vestibulum est dui, viverra id, feugiat eu, malesuada eget, mi. Fusce bibendum arcu vitae justo suscipit ullamcorper. Sed a augue rutrum nisi gravida volutpat. Maecenas consequat rutrum felis. Aliquam neque libero, dignissim ut, ullamcorper vel, luctus eu, enim. Donec mollis consectetuer ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur sed nulla ac libero dapibus pretium.
+
+Proin auctor imperdiet justo. Curabitur est mauris, tristique a, rutrum vel, vulputate vitae, augue. Proin purus nulla, pharetra id, faucibus quis, venenatis a, nunc. Sed tincidunt elementum turpis. Mauris nibh tellus, accumsan et, mattis eu, pulvinar eget, sem. Nulla facilisi. Mauris pulvinar dignissim eros. Fusce nec orci vitae lectus feugiat lobortis. Etiam velit turpis, aliquam sit amet, lacinia eu, mattis ut, ipsum. Praesent ut massa a quam scelerisque gravida. Suspendisse ullamcorper faucibus pede. Vivamus turpis. Mauris suscipit. Integer vel dui. Curabitur a enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut dapibus molestie dolor. Curabitur at mauris.
+
+Nullam luctus risus ut lectus. Phasellus imperdiet tellus et massa. Cras vulputate, arcu sit amet tempor suscipit, libero orci pharetra nibh, in pharetra massa lorem nec mi. Aenean sodales auctor orci. Aliquam euismod tincidunt velit. Maecenas urna nulla, congue dapibus, semper at, faucibus ultricies, dolor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis tincidunt aliquam nisl. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce commodo, eros ut adipiscing luctus, libero risus mollis ipsum, et vulputate lorem purus vel lacus. Nullam lectus neque, vehicula eget, eleifend ac, aliquet eu, enim.
+
+Praesent orci tellus, convallis vitae, aliquet eget, suscipit vel, ligula. Curabitur eleifend elit non sem. Fusce ut quam. Mauris at ipsum eget justo mattis pretium. Phasellus eu enim. Vestibulum suscipit purus at libero. Fusce vitae leo. Aenean cursus. Nunc ullamcorper augue nec enim. Fusce et est sit amet nisl sodales volutpat. In malesuada enim sed mauris. Aliquam et felis. Pellentesque euismod consequat erat. Aliquam pharetra diam sed erat. Nullam placerat, neque quis condimentum semper, lectus purus auctor metus, nec luctus nibh lectus in elit. Nullam faucibus pellentesque nunc. Suspendisse potenti.
+
+Curabitur commodo metus eu odio. Nulla porttitor consequat diam. Nam pretium ornare ante. Integer congue, elit ut commodo pellentesque, lectus urna luctus felis, et rhoncus magna libero pretium est. Mauris diam. Curabitur fringilla justo vel tortor. Mauris justo eros, adipiscing non, laoreet et, mattis in, tortor. Vestibulum vel justo non augue lacinia sollicitudin. Duis et libero eu nibh adipiscing sollicitudin. In sem. Quisque dictum ultrices lacus. Mauris quis orci. Ut aliquet eros ut mauris. Pellentesque ultrices. Aliquam erat volutpat. Nullam feugiat blandit lacus. Fusce vulputate, ante sit amet eleifend viverra, arcu augue feugiat urna, porttitor interdum sem ligula cursus sapien. In vitae augue nec sapien tincidunt dignissim. Morbi tincidunt aliquet mauris. Donec pellentesque.
+
+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras ligula sem, eleifend sit amet, iaculis quis, varius ut, ante. Morbi dapibus eleifend magna. Nullam dapibus rhoncus tellus. Nam quis tortor. Cras arcu nunc, sagittis eu, malesuada varius, tempus et, lorem. Etiam sit amet metus. Praesent arcu. Aenean et metus. Quisque sem enim, posuere id, feugiat nec, gravida ut, neque. Maecenas semper, justo sit amet dapibus dapibus, purus justo facilisis purus, non fringilla eros ligula a neque. Donec nisi. Integer mattis, lacus in ullamcorper lobortis, risus massa aliquet ligula, eget auctor leo orci sit amet nisi. Aenean diam. Ut tristique quam eu velit. Curabitur sed mi eget arcu sodales aliquet. In sed risus. Sed et mi.
+
+Etiam sagittis enim tincidunt est. Cras vel est vel eros tincidunt consectetuer. Etiam eu sapien ac orci vestibulum dapibus. Sed ut est eu est euismod hendrerit. Pellentesque vitae orci non libero varius dignissim. Praesent iaculis, ligula id euismod interdum, lacus risus porttitor quam, a adipiscing mi augue at diam. Nulla iaculis iaculis turpis. Vivamus nec nunc quis libero ornare ullamcorper. Praesent imperdiet posuere dui. Etiam vulputate vestibulum urna. Cras cursus hendrerit ipsum. Praesent felis ante, posuere sed, mattis quis, sollicitudin ut, lorem. Donec nec odio. Sed luctus odio eu risus. Sed sem nisl, tincidunt quis, hendrerit et, facilisis non, mauris. Aliquam non felis. Integer sed lacus vitae dolor pulvinar condimentum. Etiam lobortis, libero quis tincidunt lacinia, nibh nisi iaculis quam, eu condimentum massa purus a turpis. Suspendisse potenti.
+
+Morbi vitae lacus ac tellus pulvinar mollis. Nam auctor fringilla sem. Morbi lacus elit, pellentesque at, mattis nec, volutpat feugiat, lectus. Phasellus eros ligula, molestie at, pulvinar id, eleifend vel, ante. Fusce facilisis, diam luctus interdum condimentum, libero justo venenatis tellus, molestie ullamcorper ante diam ac sem. Pellentesque tempus, ligula ac pellentesque vulputate, eros velit aliquet lacus, eu dignissim urna leo a diam. Suspendisse quam ipsum, ullamcorper sed, dignissim vehicula, facilisis ut, tellus. Fusce convallis, odio a malesuada pharetra, orci risus sagittis urna, sit amet tincidunt ligula pede vitae leo. Quisque augue. Phasellus scelerisque nisl sed purus malesuada pretium. Pellentesque condimentum tempus ipsum. Vivamus auctor metus sed sapien. Nulla tristique congue magna.
+
+Vestibulum iaculis urna ac risus. Nullam fringilla suscipit ipsum. Quisque euismod. Quisque ullamcorper pede tincidunt risus. Sed tortor pede, rutrum ac, varius sed, sagittis nec, orci. Phasellus arcu orci, bibendum quis, tempus id, consequat eu, velit. Phasellus commodo congue purus. Sed malesuada, pede eu volutpat tristique, tellus mauris vulputate nibh, a faucibus lorem enim nec nulla. Nunc semper, nisl iaculis rutrum consectetuer, leo eros egestas lacus, sit amet venenatis dolor ligula non lorem. Morbi feugiat. Donec vulputate. Vivamus at sapien sit amet est feugiat elementum. Donec nisl erat, tincidunt ornare, pellentesque vel, aliquet sit amet, eros. Duis sagittis porta sapien. Etiam a dui. Praesent lobortis nisl at lorem. Sed malesuada. Morbi viverra dui eu neque. Nullam sed ante sed diam malesuada vehicula. Morbi ut metus et dolor hendrerit vehicula.
+
+Integer in lacus nec dui aliquet dictum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse et mauris vitae dui lacinia ultrices. Mauris neque sem, sagittis sed, lobortis viverra, pharetra vitae, mi. Nam dui nunc, iaculis id, dictum at, porttitor vitae, diam. Donec tincidunt leo quis augue varius rhoncus. Nam risus. Vivamus dignissim. Praesent viverra, neque vitae vulputate blandit, dui massa rhoncus lectus, quis accumsan neque quam sit amet augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut congue pellentesque velit. Vivamus at elit. Cras risus metus, elementum ut, tristique nec, commodo in, sapien. Etiam metus.
+
+Maecenas congue, justo vitae egestas volutpat, orci quam aliquam mi, vitae pulvinar tortor pede vel nunc. Integer mollis, massa sit amet vestibulum fringilla, nulla tortor pretium nibh, eget porttitor nisi elit sit amet magna. Proin dignissim, nisl eget posuere posuere, velit diam ultrices turpis, a lacinia nunc dolor quis odio. Nulla egestas. Nam consectetuer. Pellentesque enim libero, viverra eget, dapibus ut, iaculis ac, neque. Donec vel tortor. Sed eu urna ut libero pharetra viverra. In hac habitasse platea dictumst. In dictum. Morbi non magna sit amet elit dictum facilisis. Sed ultrices porta urna. Vivamus tincidunt. Ut ante orci, pellentesque a, aliquet ut, dignissim eu, velit. Integer ultrices congue felis.
+
+Sed faucibus vestibulum augue. In lectus urna, vulputate non, dignissim id, placerat in, ante. Aenean mi erat, eleifend at, faucibus in, gravida eget, massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Donec dignissim elit vel felis. Vestibulum gravida tortor ut massa. Nulla facilisi. Nulla imperdiet urna sed nibh. Suspendisse volutpat, nulla eget dignissim elementum, leo velit bibendum leo, ac viverra mi nisl nec mi.
+
+Vivamus et libero vel erat mattis semper. Cras hendrerit porttitor sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc elementum condimentum orci. In hac habitasse platea dictumst. Donec massa quam, laoreet in, sagittis nec, porta eu, tortor. Integer eget dui. Nulla quis purus in justo tristique adipiscing. Ut eleifend placerat orci. Sed neque.
+
+Sed ultrices eros vitae eros. Praesent venenatis laoreet orci. Vivamus non elit. Aliquam varius tellus non erat. Vivamus ullamcorper magna sit amet lectus. Mauris venenatis, elit vel lobortis dapibus, eros lacus feugiat erat, in tincidunt dui libero a orci. Duis non nisi. Nulla aliquet, nunc vel vestibulum lobortis, est lorem luctus mi, ut sodales felis dolor vitae dolor. Fusce eget felis. Pellentesque tempus eros ut justo. Curabitur aliquet. Duis rutrum sapien sit amet lectus. Curabitur tellus. Nulla laoreet sapien at ante. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce lacinia venenatis sem. Mauris sagittis.
+
+Proin posuere nibh id pede. Maecenas hendrerit placerat nisi. Sed vitae justo quis ante pellentesque sollicitudin. Morbi in est. Nulla velit nibh, tempus non, tincidunt eget, ornare at, dui. Praesent fringilla magna id magna tincidunt mattis. Morbi vestibulum. Donec ut nisl. Duis turpis nulla, feugiat vel, commodo at, hendrerit eu, purus. Cras nec libero. Nullam vestibulum dolor et metus scelerisque vestibulum. Aliquam sed felis. Nulla dolor diam, placerat vitae, gravida eget, tincidunt consectetuer, pede. Maecenas auctor, felis vulputate placerat sollicitudin, sapien purus dapibus purus, condimentum sollicitudin sapien purus eget magna. In at est a mi placerat congue. Maecenas et leo. Praesent ac nisl. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum vel mi quis lacus congue consequat. Duis laoreet ipsum et odio.
+
+Duis pede orci, aliquam eget, rutrum et, faucibus tincidunt, dui. Donec aliquet enim vitae diam. In hac habitasse platea dictumst. Integer pede. Phasellus feugiat ullamcorper sem. Maecenas eu turpis. Maecenas dapibus leo varius neque. Mauris convallis, velit ut interdum pulvinar, est dolor elementum lacus, ut placerat neque est at dolor. Donec aliquet purus. Etiam quam urna, pharetra ut, consequat at, lacinia at, velit. Curabitur metus lacus, tincidunt sit amet, pharetra non, suscipit vel, quam. Ut lacus ante, ullamcorper porta, malesuada venenatis, vulputate et, dui. Nam posuere lacus eu urna. Sed ac erat vel nisl venenatis pharetra. Nullam egestas lectus non lorem. Maecenas mi neque, sodales a, ullamcorper aliquam, semper in, elit. Donec nec risus ultricies libero tincidunt accumsan. Sed rutrum neque tristique lacus. Fusce nulla ligula, vulputate et, pellentesque eget, varius ut, odio.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In quis risus non pede egestas imperdiet. Maecenas faucibus, purus id pulvinar sagittis, libero arcu pharetra lacus, sit amet auctor lorem tortor non urna. Suspendisse semper, sem vitae consectetuer molestie, nunc erat feugiat quam, non placerat augue mauris eu metus. Aliquam eleifend, justo sed ullamcorper auctor, elit sem rhoncus turpis, quis pellentesque nibh risus at enim. Cras dui. Vestibulum eget dolor. Sed faucibus. Praesent a odio feugiat quam scelerisque egestas. Fusce a ante non ante blandit congue. Aenean vestibulum. In hac habitasse platea dictumst. Ut consequat.
+
+Nam tincidunt est nec libero. Maecenas quis odio eu nisl vulputate pretium. Phasellus fermentum feugiat metus. Curabitur convallis fermentum erat. Donec ac lorem sit amet augue fringilla fringilla. Vestibulum neque ligula, consequat vitae, gravida posuere, vulputate ut, metus. Suspendisse potenti. Phasellus blandit. Quisque commodo odio at mi ultricies aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec condimentum, leo ac aliquam vehicula, metus augue lacinia tellus, ut dictum nisl orci ac neque. Nam a tellus. Praesent vitae nisl non augue laoreet adipiscing. Nullam at justo sed dolor placerat mattis. Nam varius nisl et urna. Sed bibendum, augue lobortis vestibulum ornare, nibh odio pharetra purus, quis eleifend est sapien sit amet lorem. Aenean viverra ante non libero. Ut posuere. Mauris arcu lacus, sodales in, condimentum ac, accumsan vitae, mi.
+
+Aliquam sodales dignissim purus. Donec at arcu. Vestibulum eleifend. Pellentesque dui. Phasellus sem. Sed ornare nisi lobortis ligula. Etiam est. Etiam leo lorem, auctor ut, molestie facilisis, tristique eu, sem. Morbi lorem. Mauris pede dolor, aliquam bibendum, facilisis sed, vehicula eu, nibh. Integer aliquet. Aliquam posuere, odio in sollicitudin luctus, nibh arcu vulputate mauris, sit amet eleifend risus magna ut leo. Nullam consectetuer semper dui. Donec dignissim justo interdum nisl vestibulum egestas. Donec sit amet arcu nec tellus sollicitudin eleifend. Ut auctor leo eget turpis. Integer commodo mattis neque.
+
+Vivamus vitae orci. Morbi quam quam, convallis vel, dignissim pretium, ultricies eu, dolor. Cras non est quis nisl faucibus sodales. Mauris euismod vulputate mauris. Duis vehicula feugiat orci. Nulla facilisi cras amet. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testFileSmall.plain	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+Hello, Alice! Goodbye, Bob!
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testImportKeyFile_private.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+lQHhBEjS+OIRBACPl023p+jInWiUtc7zSBU1D4mv42zSOwPdC37Pn/4x9FyhIOXE
+LCRTpsnAw9rT6R3BvAC4uO68fxjxFCwTpsa60RsHw4bwpSAYuf0t5Xg+GQIritlm
+XHVYwku3Hkh4Svv0quemooGuJ9lLwIHacL/4W1dTHLB2rzon0T4kx7ExZwCg/XKl
+RD9zbbnQOgjn0EaS8fcSm+ED/1IMfkCz5ac9Y3jBUlcArOZcOlTrzxst+iMZm4f0
+fh8dFCCaRN0iaVLSdCNaFvbKbJYZad1w3jFAMU9bX83flqgV1wMPO/NenfMidBIq
+sKzgttaQo5VmjWPtwyOJXODR2lHKQR2hFCkIKlHMPLV3awCGV8iTyiTZMJirdtvf
+s26oA/9STYro+yB9yrHufdfjM1u8SbSIhK6jUoq2ajLPHaLF2nRZZyv1gnkzRFd+
+/Vxcx6cwp8Qd6L4z+0sU3pMS4X8rt2vqilK2msg1VrHnjGgFIfmfIvY5EmrhNzEx
+6X82fbR9f8lwLy5N/gPm326e0xSw1rWdR15VukJPbmK6nf/pL/4DAwIZF3WLmXaM
+DGCHa6b36T1VZ+bgYYcoQUanh3OSfLO0NwJ5ywFiML26DYZ7M3aivlfXj/8lOKy0
+8tcg/rRcUHVibGljIE9ubHkgVGVzdCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9y
+dGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxwdWJsaWMtb25seUBleGFtcGxlLmNv
+bT6IYAQTEQIAIAUCSNL44gIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKuo
+HvVOjA3r8DYAn1/DrF5jw31P3L6MlWdelLuR4POnAJ9It7IynfJalYIHoAWtY2xk
+kTsT+p0CYgRI0vjoEAgAp65R578Es8qtASDAgIbYfJlJTwMovEnA4KJ69mpVt3mz
+cFWMtJCvuilvwSQQ+VfKxjemtbe/IbMe9ssj4nTSLw/mweUB89tRj8ZzaS+/9312
+AS8ra/xIDr6kTSfKcRKjXgMzkJ+A13rYwG5LFWnyumg36xglmzXKhecEkRVPfWn3
+ISoq3zirZlQOWcKYdyA2Z685SKJC/N+3nUqKOJ7qrA7eT608LFksytBHeOfNf5m7
+CC4wAE3RAz+ZkJvWRbE2G5pUalZktq8uKMT5WQgvuFP3hnvku5yilpo2ELTnYkO3
+ltc3NHCc9v+jhikayPr7RvUdVPbaITT80yYKBPygCwADBggApzR1vW/fvzmrO5pW
+zAvd4umVh/Yp34n3vWyXMu+JIHA7s08rkTzlMXzamICQmkjwAuCwJt0t7BA28Lny
+goh2joxo8tE/OowFk+IzbeA2Vrz71d/T5SMDtC2mePE0m3bmCOLBscu5aJIfgi1X
+/fzr44f4i+6hqVDCuOOmnVtbL4xBBnS6KXdcWP7QbVhxG3SpH9Agd/QXvSQm0Obz
+9iKZ11FEXzgnVZGXaCM0GBsFE9JuNY5+hi6A72rccjhC0V1Cy43veeIhOE+v3pK0
+a/BGUlgDSdgVopE9zUSQwzuo87UbY3EoDWBqDRSRCRMfmv8S2b9VJIRPdCOHZGCI
+R49/0f4DAwIZF3WLmXaMDGCvSMKxFAt3zGZVEsfwS67ilWw0kq9wgmDpTmbrz1pe
+8tUgmHxgiVc3Xo86ItXGr69udzSODYw2wO6JGdgOKsZDKAv7zJHi+3GISAQYEQIA
+CQUCSNL46AIbDAAKCRCrqB71TowN6zbAAJ4qBrdmAYuAbY5txsc+Tmv9quOpzwCW
+NN5B7Vl2JdxBuwWJrdfUb9UQzw==
+=51qc
+-----END PGP PRIVATE KEY BLOCK-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testImportKeyFile_public.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,31 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+mQGiBEjS+PgRBADbDdRN9iwESSyJvjnfgk7ZWUYKdHdSER7yJ0aM4LQjVDdw9y/f
+QGidipXxVD2lW28gRtzcmLufxv3DzjZp83VaXvlJs9jbTtHDIYFyDW9kH1HTRbZT
+WKWfuInd0AXzHy5o77qQ+mW0AIXbyke5suSHdvcmv1hiWI9OnXcIHpmavwCgt4Hm
++j3FpRo9qs4fJM887c796qUD/iPkStU9sM/0KCJFZNaPCGBaamCEi7UoAHNlim+B
+dv3rfSQ2VcDRq9/3GoCEJ2c62XpgQxt79mojJLdWZsTWvr6ESnWOm7W6GIjv/Zc3
++OXgi7QdH5nwpZl6kBMkuzZxczFuwh9dqlXml+bND0JawS38MvQpDUkwMb592v5U
+i9WIBADBacg6nixiTR+4kaHFE1Ww8QxT+vQ4S1SOx47cm8R6FxTRQA7FvK+vMxCt
+Ps9GOzhjrCgIoF/6X10IZ7qB5jCYIH+kvHrp90ZbNwJ4pIa7phCPhqUF9mEyMbC2
+AEIGp/Aw26yXKskQJJ3vFji+VaeCui21sXjg5EHfoayt79xT8bRfRXh0ZXJuYWwg
+UHVibGljIEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0
+aGlzIGtleSkgPGV4dGVybmFsLXB1YmxpY0BleGFtcGxlLmNvbT6IYAQTEQIAIAUC
+SNL4+AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECaKtxA0NeZdqHwAn3AF
+EEhX1Tyba0ovCV2DwUytKM0CAKCnu6VzRy1Y8jp9fiy3ScwmaCI3FbkCDQRI0vj8
+EAgArBRh0YpPhE1vvKoPuhGDa//96YqrYt9rmBo3AR1WmF3CKtspjXdOK2bCqdJh
+H6kaoNi+0Ors00n2NfPj9Am2cTV3h2/KpAWOxQGfkmpzU3xXTVCUo/HoKDXIfWqk
+/TPXRqbwFV489GRBtVov4IoZM0KqZXhaFD6cXBsEl/BVSvVdBqmBzUoJ2bOzYiSW
+eg/ml65jbtxjDYMbxTLi7xRcTSAsareoN6/PcbAvcCE5UeCMu8p52wxHOTrAkI4/
+6elpziVpIGn07zJb//4qIoZdhIzwfsMl73tPfdoL9jEC66SiWAN+BEDxceGR5E15
+2WsT5tkxuz/pQUC1L3JW4WCC/wADBwf8CsevcPsk2XxT2XZj0lfmAOuhXxuqBczW
+TXCimnRxvC8+uAacv1RgVRH6emW3BVjt0dr9vwRT0n54JA+7ZwXVMOo4/tqNwmJs
+C6SThBXGBQxEaZwv19WC58DjblbvYa81cUaXrUdHi1OyoHwgalx0xZQ57IUXW6+7
+qdLRfzyqbDBph9ogB0ta3AhSikAqqYImTrI650v/KWBLjrI+N925r0TvnfSOsru7
+JrftccY2LntVnQUcXjuaFViZ7y8ocW8f92zmGj2zUN8z2GsMKiGQtNNmoX51TcQl
+sJPsZF0RKduVkNUQa9cfzSIMjjhUSzspA2qHLUKafrS3e38s2Y4CNIhJBBgRAgAJ
+BQJI0vj8AhsMAAoJECaKtxA0NeZdOFQAn15X+eYzFgVERrFkddsHvAE00OnSAJ9h
+A7Lcv7M+9WeZ6cjeHkZfLB6LLA==
+=AV/P
+-----END PGP PUBLIC KEY BLOCK-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testVerifyFileClearsignedData.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,165 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus luctus placerat erat. Curabitur euismod arcu id eros. Maecenas accumsan pede in orci consectetuer tristique. Ut nec felis non nunc euismod ornare. Ut dui eros, euismod sit amet, condimentum nec, varius sit amet, leo. Cras ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis porta. Donec neque magna, interdum eu, dictum non, viverra a, est. Praesent vel neque. Mauris vitae nunc. Praesent commodo eros eget eros. Nunc congue. Maecenas quis massa sed ante dapibus vestibulum. Sed at dui. Duis mauris nulla, sodales vel, tincidunt ut, sodales ac, tellus. Donec ullamcorper. Maecenas sollicitudin sagittis leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus leo.
+
+Maecenas posuere. Morbi massa. Maecenas dolor felis, dignissim nec, vulputate quis, auctor vel, lectus. Sed libero. Cras mi. Proin placerat libero vitae dolor. Donec non nunc vel nisi sodales facilisis. Ut a tortor vitae neque eleifend rhoncus. Suspendisse vehicula, lectus vitae elementum porta, diam eros scelerisque sem, et accumsan massa orci a urna. Vivamus posuere, massa sit amet sagittis pulvinar, leo erat congue metus, eu congue lacus tortor in mauris. Vestibulum dapibus lorem in turpis. Curabitur aliquet gravida purus. Integer quis felis at velit varius laoreet. Pellentesque aliquam consectetuer lectus.
+
+Nunc at sapien. Cras faucibus dignissim dolor. Sed id diam ac augue aliquet convallis. Proin feugiat, lectus elementum venenatis aliquet, nibh lectus porttitor tortor, sit amet aliquet erat sapien eu nulla. Morbi sagittis libero sed tellus. Sed purus turpis, sollicitudin vel, dapibus eu, vehicula vel, dui. Nullam fringilla tellus in lorem. Integer dolor. Mauris interdum tristique neque. Nullam ac magna.
+
+Nam vel eros id enim dignissim sagittis. Suspendisse pede. Aenean et lacus at sapien molestie consequat. Vestibulum sapien. Aliquam erat volutpat. Duis vel felis ac risus consequat tristique. Curabitur porta enim. Phasellus auctor consectetuer justo. Sed rhoncus congue turpis. Nam consequat massa ac elit. Nam aliquam. Nam velit.
+
+Aliquam condimentum vestibulum risus. Vivamus id nunc ut ante consequat hendrerit. Donec sit amet ante ut nisi vulputate malesuada. Aliquam id nisi at justo ornare imperdiet. Curabitur ac felis eu pede posuere pretium. Cras sed justo et enim pretium mattis. Maecenas nec metus. Fusce sed odio. Vivamus aliquam dictum nunc. Nullam aliquam magna eu massa. Etiam sit amet lacus. Duis velit mauris, ullamcorper sit amet, facilisis sit amet, ultricies id, neque. Aenean ut arcu in magna suscipit ultricies. Nulla mauris. Morbi sed purus. Maecenas vel augue id lorem tempor volutpat. Sed congue porttitor mi. Mauris fringilla magna quis enim. Sed eleifend, nibh ut ornare lobortis, augue mauris egestas sapien, sit amet rutrum risus sem non felis. Pellentesque ipsum augue, ornare et, lobortis sit amet, aliquet ac, nulla.
+
+Aliquam sit amet massa. Morbi nec odio ut diam ornare pellentesque. Etiam iaculis purus quis neque. Cras gravida velit at ante. Curabitur a justo vitae nulla molestie molestie. Pellentesque sed urna vel enim rutrum tempor. Sed lectus tortor, consectetuer ac, aliquet ac, commodo id, elit. Sed eleifend turpis. Maecenas turpis dui, vulputate in, euismod id, dignissim eget, massa. Integer id mauris. Mauris a diam. Curabitur scelerisque, arcu ac aliquet eleifend, nunc elit egestas libero, ut luctus ipsum enim in risus. Quisque a pede. Sed euismod ligula vel lectus. Aliquam erat volutpat. Curabitur quis ligula. Vivamus justo odio, scelerisque ut, feugiat id, dapibus quis, nibh. Aliquam et ante vitae risus mattis iaculis. Aenean pretium ligula et magna viverra vehicula. Proin felis.
+
+Proin malesuada fermentum sem. Vivamus suscipit. Aenean et risus. Quisque vel urna. In hac habitasse platea dictumst. Ut vel quam eu odio semper congue. Aenean pulvinar, quam eget faucibus consequat, purus est tristique tellus, quis iaculis lectus nibh a neque. Cras diam. Vestibulum est enim, pellentesque vitae, sagittis id, semper non, sem. Maecenas iaculis.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam quam massa, ultricies a, tristique quis, luctus ut, enim. Ut hendrerit tellus sit amet diam. Mauris eget tellus sit amet tortor lacinia mattis. Praesent eros enim, iaculis id, ultricies sed, ultrices id, eros. Donec libero nibh, accumsan id, vehicula vel, bibendum vitae, est. Morbi ac velit vitae nibh pharetra semper. Aliquam eros turpis, porta sit amet, bibendum quis, porta vitae, ante. Fusce ac turpis nec nulla euismod fermentum. Integer imperdiet lorem consectetuer libero. Quisque luctus. Nam erat augue, ornare vitae, accumsan vitae, molestie id, massa. Integer cursus. Suspendisse libero.
+
+Nulla sed magna. Nulla suscipit, urna a varius aliquam, mi nulla posuere eros, fermentum consectetuer dui orci vel ipsum. Fusce varius erat in libero. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi lacinia. Etiam accumsan ultrices erat. Integer eu mi. In vel purus. Integer porttitor. Fusce pede enim, venenatis sit amet, varius rutrum, convallis eu, orci. Phasellus dictum lacinia ante.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut non tellus eget metus rhoncus condimentum. Praesent consequat augue eu erat. Donec accumsan, turpis a ultricies venenatis, neque tortor porta velit, sed sagittis velit sapien a tellus. Pellentesque eget diam. Phasellus luctus sagittis sem. Pellentesque ac risus. Sed ac velit. Maecenas sed justo. Sed ut sem. Morbi elit massa, pretium eget, aliquet sed, ornare ut, ligula. Etiam vitae mi eget nisi facilisis molestie. Phasellus varius mattis mauris. Suspendisse ut nunc. Praesent nec arcu. Nullam in lacus. In vitae est.
+
+In hac habitasse platea dictumst. Mauris ultrices. Nunc vulputate, augue quis imperdiet vehicula, libero orci cursus lectus, et mollis velit lorem eget lorem. Ut id dui a purus porttitor varius. Nulla neque nisl, vehicula et, venenatis at, pretium in, lectus. Pellentesque at lacus et sem dictum laoreet. Vestibulum quis mauris. Morbi fringilla cursus diam. Phasellus id neque. Aenean magna sem, facilisis non, luctus vitae, egestas a, sem. Ut lobortis urna pulvinar diam. Fusce in velit eget nibh mollis vulputate. In lorem ligula, commodo ut, tempor non, egestas quis, leo. Nullam sit amet purus. Integer pellentesque sagittis orci. Quisque neque lectus, porta euismod, tristique et, dictum ac, arcu. Mauris congue consequat dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc ut nibh nec nibh facilisis elementum. Maecenas vel metus.
+
+Etiam id orci at nulla consequat volutpat. Vestibulum vel nulla et leo sodales fringilla. Phasellus eu nisl et quam fringilla molestie. Aenean eget metus. Donec diam arcu, dignissim vitae, fermentum dictum, accumsan ac, purus. Proin tempor aliquam lorem. Nullam facilisis odio a ante. Aliquam dui. Nam id leo et massa fermentum tempus. In pellentesque elit ut metus. Fusce mollis est in libero. Donec orci nulla, scelerisque non, elementum id, semper accumsan, ante. Phasellus nec risus porta nunc molestie vulputate. Etiam justo sem, sagittis lobortis, laoreet scelerisque, ornare nec, arcu. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc laoreet sem mattis massa. Cras porttitor lectus vel metus. Integer tellus felis, sodales sed, pharetra vitae, sodales sit amet, nulla. Maecenas vulputate vestibulum nisl.
+
+Donec sollicitudin sollicitudin ante. Curabitur sed ipsum. Nunc odio eros, consequat vitae, condimentum luctus, auctor at, tortor. Morbi nisl. Vivamus gravida metus vel justo. Aliquam eget quam sed nunc faucibus vestibulum. Nullam in erat. Etiam volutpat nunc quis turpis. Pellentesque blandit. Praesent sagittis urna in orci facilisis varius. Donec ultricies. Fusce lobortis placerat urna. Quisque mattis, enim id venenatis mollis, elit metus ultrices quam, id commodo libero nisi sit amet sapien.
+
+Quisque sagittis porta odio. Maecenas ac tellus. Etiam ornare nibh eu arcu. Quisque euismod facilisis lorem. In mauris. Vivamus urna. Sed nisi. Curabitur convallis ultrices arcu. Nullam sit amet mi. Donec at arcu. Etiam hendrerit. Phasellus ullamcorper, orci nec fringilla convallis, felis purus tempor eros, tempor venenatis massa velit sit amet velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec libero.
+
+Fusce aliquet. Suspendisse at purus in augue lacinia tincidunt. Vivamus tempor pellentesque mi. Aenean consectetuer ultrices ligula. Nam turpis nisl, congue at, semper vel, dictum nec, elit. Sed lorem odio, bibendum eget, dignissim sit amet, cursus vel, erat. Donec cursus nisi ut lorem. Morbi quam mauris, hendrerit nec, egestas congue, placerat ac, nisi. Morbi auctor, risus in pharetra ullamcorper, enim tortor vulputate massa, ac interdum est libero ac purus. Mauris faucibus turpis a lacus. Proin pharetra magna vitae est.
+
+Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin iaculis, tortor sed pharetra sodales, turpis nunc mattis neque, ac porttitor ipsum lacus et tortor. Nulla eleifend luctus nisl. Nulla fermentum elementum dui. Cras dictum sem vel lorem. Nam pulvinar, elit in hendrerit hendrerit, turpis arcu accumsan sem, id elementum lorem ante ut augue. In pulvinar lacus sit amet nisl. Aenean venenatis, tortor at hendrerit venenatis, dui erat posuere urna, eget pharetra diam dolor pulvinar tortor. Pellentesque consectetuer. Sed orci. Morbi lacus ante, mattis et, ultrices sed, scelerisque sed, pede. Nulla eu nisl dapibus purus fermentum varius. Etiam rutrum vestibulum sem. Fusce libero. Duis laoreet. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum arcu nisi, mattis vitae, blandit non, venenatis eu, purus. Fusce fringilla, dui id iaculis luctus, mauris ipsum vulputate libero, quis posuere lectus ante a arcu.
+
+Mauris imperdiet libero venenatis odio. Integer varius laoreet turpis. Vivamus fermentum. Vivamus dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur at diam. Nulla suscipit gravida erat. Nulla enim massa, bibendum ut, pellentesque id, sollicitudin sollicitudin, massa. Integer varius, arcu ut condimentum commodo, neque neque blandit pede, vitae adipiscing tortor nibh eget sapien. Proin volutpat urna eu diam.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed quam pede, gravida sed, semper eu, fringilla quis, sapien. Fusce tincidunt nisi. In eros odio, vestibulum et, dapibus quis, tincidunt ac, est. Fusce eget purus id leo adipiscing varius. Fusce euismod lorem id turpis. Phasellus tincidunt blandit sapien. Integer sagittis orci at pede. Aliquam accumsan. Morbi ac orci sit amet magna scelerisque dignissim. Quisque vitae lacus quis neque convallis ultrices. Vestibulum ac arcu at mauris ultricies mollis. Nam id nulla. Nunc sed ligula. Sed nulla lectus, hendrerit ut, convallis ac, dapibus nec, odio. Ut blandit sapien nec libero.
+
+Duis tempor fermentum pede. Suspendisse imperdiet tincidunt risus. Integer lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque id odio eu nibh placerat adipiscing. Suspendisse quis leo eu velit laoreet hendrerit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec euismod nibh nec leo. Nullam sagittis fermentum ligula. Sed feugiat cursus elit. Pellentesque id tortor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vulputate leo ut neque rhoncus tristique.
+
+Aenean molestie, nisi a venenatis accumsan, mauris risus interdum tortor, et laoreet velit metus quis dui. Ut sed nunc. Quisque tempor. Suspendisse metus lectus, congue id, blandit quis, cursus eget, urna. Sed ac purus. Suspendisse sed eros sit amet risus eleifend pellentesque. Donec diam. Vestibulum vel mi. Aenean sagittis magna quis libero. Nunc scelerisque gravida metus. Aliquam nulla ante, rutrum vitae, vehicula et, pharetra sed, nunc. Nulla nulla enim, commodo vel, euismod id, convallis at, purus.
+
+Nulla pulvinar. Praesent et elit eget justo varius laoreet. Nunc ornare feugiat nisi. Aliquam vel felis eget erat semper sagittis. Aenean vel nisi. Aenean vehicula adipiscing enim. Nulla at sem. Sed commodo pretium erat. In turpis. Cras ullamcorper, magna non placerat vehicula, lacus justo condimentum leo, a tempus lorem leo vel nisl. Aliquam ut magna. Donec eu neque. Nunc semper quam vel est. Quisque eros tellus, vehicula sit amet, ultricies ac, facilisis vitae, dui. Morbi gravida, ligula vitae vestibulum facilisis, metus ipsum fermentum nunc, sit amet vehicula nisi urna non nunc.
+
+Ut non est vitae urna bibendum faucibus. Praesent at risus. Morbi nisi ante, ultrices tincidunt, accumsan et, lobortis quis, ligula. Proin nec est. Ut varius mollis dui. Etiam tortor purus, facilisis quis, viverra id, tincidunt vitae, dolor. Sed ullamcorper. Ut nec lacus. Phasellus ut metus a felis vulputate sagittis. Praesent magna. Morbi pretium placerat pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam at tortor sit amet sapien adipiscing lacinia. Aenean vitae enim. Vivamus adipiscing, mauris vel venenatis scelerisque, leo ligula lacinia orci, sed commodo dui nisi sit amet leo. Integer a est sed lacus pretium accumsan. Mauris scelerisque pulvinar leo.
+
+Vivamus tristique dui ut est convallis consequat. Phasellus turpis pede, fringilla non, sodales vitae, eleifend ac, lectus. Vestibulum eget nisi sed eros dapibus pretium. Fusce tincidunt pretium neque. Aenean elementum pulvinar lorem. Vivamus sit amet velit. Mauris quis arcu. Curabitur pede purus, suscipit sed, elementum in, dignissim at, dolor. Morbi eu odio. Ut ipsum nibh, egestas eu, tincidunt quis, lacinia quis, lorem.
+
+Vestibulum sollicitudin sapien a dolor. Mauris sit amet augue in diam condimentum semper. Etiam est. Fusce sit amet leo eget elit fermentum faucibus. Praesent ipsum quam, tristique ut, tempor eu, facilisis sed, sem. In vitae nisl. Nunc et pede vel augue malesuada tincidunt. Nulla felis. Etiam vel dui et nibh fringilla rutrum. Duis aliquet dui. Proin sed turpis ac tortor aliquet porttitor. Pellentesque congue venenatis est. Vestibulum in libero ut nulla condimentum porta. Aliquam erat volutpat. Vestibulum tincidunt. Donec at augue eu risus cursus venenatis. Suspendisse potenti. Ut consequat sem.
+
+Aliquam gravida est ac eros. Vestibulum sit amet mauris non diam tincidunt condimentum. Pellentesque commodo egestas diam. Phasellus semper risus at tellus. Duis eu enim. In ac augue sit amet sapien commodo tincidunt. Morbi convallis enim non tortor. Aliquam turpis. Quisque tellus nisi, porttitor in, consequat in, elementum quis, ipsum. Nulla id turpis ac nisi sagittis luctus. Praesent ipsum magna, vehicula at, luctus nec, accumsan convallis, odio. Curabitur non augue et risus commodo laoreet. Suspendisse commodo lacus sit amet orci. Pellentesque molestie tristique arcu. Aliquam erat volutpat. Praesent sit amet lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+
+Maecenas ornare risus in tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi luctus, nisl id laoreet aliquam, eros leo sagittis pede, vel venenatis dui odio venenatis quam. Quisque justo justo, lacinia sed, facilisis vel, dictum eu, erat. Proin ligula dolor, dapibus id, pellentesque id, consequat et, erat. In posuere. In sed est. Nam volutpat orci id nibh. Morbi convallis magna vitae mauris. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas felis. Donec condimentum. Sed pretium eros et est. Curabitur vel mauris. Sed tellus. Aliquam tristique facilisis metus. Nulla elit justo, sollicitudin eget, pulvinar eget, hendrerit vitae, est. Nulla semper dolor sed lorem.
+
+Morbi nisl. Proin pretium, ligula vitae pretium congue, turpis lacus bibendum magna, suscipit aliquet odio ligula nec risus. Mauris vestibulum. Pellentesque vehicula dolor sed nibh. Pellentesque id massa. Mauris sit amet justo quis turpis mollis tempor. Nullam vulputate velit at pede. Aenean fringilla ultrices magna. Proin urna tellus, faucibus in, blandit in, iaculis blandit, quam. Vestibulum turpis. Donec ornare aliquet justo. Integer velit. Sed at felis a arcu viverra congue. Suspendisse laoreet tortor at diam. Suspendisse quis arcu eget sapien condimentum molestie. Proin iaculis aliquet ipsum.
+
+Curabitur lorem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque in tortor. Curabitur imperdiet. Maecenas bibendum vestibulum nibh. Nullam vehicula lectus ac lectus. Morbi et lorem. Aenean sed metus. Cras commodo. Vestibulum a tortor. Duis pede nulla, posuere nec, hendrerit quis, faucibus id, nisl. Integer id purus nec quam aliquet ornare. Fusce euismod nibh ultricies pede. Quisque eget est hendrerit arcu mattis sollicitudin.
+
+Vestibulum viverra, lectus porta scelerisque venenatis, elit diam tempor ipsum, eu euismod nulla tortor eu orci. Praesent vulputate arcu vel magna. Maecenas blandit lectus. Aenean nunc orci, ornare vel, aliquam molestie, mattis non, sem. Fusce ac turpis et felis suscipit sodales. Nunc sollicitudin feugiat mi. Sed mattis fringilla magna. Quisque ut purus. Nunc tempus velit sed quam. Quisque mollis laoreet lorem. Integer eu augue. Morbi lobortis urna aliquam est.
+
+Maecenas eu tortor. Etiam commodo porta lectus. Ut vehicula, lorem id congue ultricies, augue ante pellentesque mauris, quis bibendum ante dui a dui. Aliquam varius mauris et neque. Vivamus consectetuer mauris eu elit. Cras vel nisi. Cras mollis sapien vitae tortor. In quis sem. Sed malesuada, eros non bibendum viverra, leo turpis iaculis ligula, nec auctor enim sapien nec magna. Vestibulum cursus, risus quis tempus aliquet, pede magna volutpat diam, tempor rutrum dolor dui a lacus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+
+Vestibulum euismod varius elit. Fusce et erat a leo ultrices semper. Vestibulum a ante quis neque lacinia laoreet. Nullam nisi ipsum, vulputate a, molestie quis, ornare sed, felis. In posuere ligula non odio. Nulla eleifend viverra arcu. Sed mollis metus ac massa. Quisque vitae tortor sed est laoreet sagittis. Donec et justo. Pellentesque porta mauris ut turpis. Ut diam. Nulla neque lacus, commodo egestas, iaculis quis, porta a, nibh. Integer ultricies, libero quis hendrerit imperdiet, quam purus consequat ligula, vitae dignissim elit nisl non turpis. Morbi ut orci in diam luctus convallis. Vivamus ligula.
+
+Sed magna leo, aliquam at, hendrerit ac, feugiat non, justo. Sed lectus. Suspendisse elementum pretium tellus. Aenean egestas. Aenean faucibus porta purus. Nullam lorem dolor, iaculis vel, lobortis et, euismod a, eros. Donec eget mi. Sed vitae ligula eu massa cursus luctus. Nunc ullamcorper. Nunc purus nulla, feugiat et, vestibulum quis, hendrerit at, tellus. Sed risus massa, porttitor elementum, rutrum a, posuere sed, nulla. Etiam blandit egestas ligula. Proin rutrum dolor at odio.
+
+Quisque et nunc. Maecenas sed dolor. Donec suscipit mattis magna. Donec sit amet leo. Aenean lobortis dolor non elit. Cras vulputate consequat tortor. Etiam sodales porttitor ante. Morbi ut leo quis lacus lobortis eleifend. Nunc fermentum, nisl sit amet pretium egestas, velit eros tincidunt lectus, non vulputate ipsum urna vitae erat. Integer sit amet sem quis turpis varius posuere. Proin in metus vitae neque commodo tincidunt. Praesent iaculis fringilla justo.
+
+Vestibulum nec sapien. Curabitur eros. Duis commodo, diam non congue imperdiet, risus nisl auctor nunc, eget sodales magna sapien egestas sem. Vivamus id mauris. Phasellus dapibus, lectus at ornare lacinia, mauris sem imperdiet ligula, bibendum imperdiet lorem dolor at purus. Quisque ultrices nisi at augue viverra scelerisque. In vel risus. Fusce quam diam, luctus a, pharetra ac, tempor ac, lectus. Fusce neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eget augue.
+
+Quisque in tellus vel lorem vulputate iaculis. Integer a pede. Integer vulputate molestie lorem. Donec velit magna, iaculis id, pretium in, aliquam nec, felis. Fusce nec libero sed velit egestas molestie. Maecenas turpis tortor, molestie in, hendrerit eu, tempor sed, enim. Fusce non orci. Suspendisse eleifend neque vitae odio. Quisque bibendum, justo a tristique gravida, sapien ante adipiscing nisl, non vehicula purus mi sit amet metus. Donec pharetra, felis nec interdum imperdiet, dui ipsum tempus diam, ac aliquam lorem libero vel nunc. Integer tincidunt adipiscing risus. Maecenas ante. Nunc vestibulum, nibh nec laoreet commodo, nibh erat tempor erat, ultricies mattis pede turpis luctus leo. Phasellus egestas ligula ac massa. Quisque tincidunt, erat ut volutpat ornare, neque eros tristique ante, sit amet bibendum turpis enim eget lectus. Pellentesque hendrerit lorem sed sem. Pellentesque semper elit non velit. Mauris nisl.
+
+Proin sed pede ac est mollis vestibulum. Nullam faucibus, lectus vel mollis accumsan, ipsum massa porta quam, id egestas turpis ante quis sapien. In aliquam ipsum in neque. Quisque id sapien. Morbi vitae elit. Nam leo eros, ullamcorper at, molestie a, mattis sit amet, augue. Pellentesque convallis suscipit elit. Nulla viverra. Nam ut erat. Duis metus. Mauris neque. Nulla eu odio elementum dolor adipiscing tincidunt. Aenean convallis, eros quis hendrerit luctus, dui tortor hendrerit ipsum, nec egestas nisl leo id tellus. Praesent eu turpis non tellus sodales semper. Duis quis enim sed nunc vulputate posuere. Proin leo. Proin mi risus, dapibus id, pretium sed, pharetra eget, diam.
+
+Aenean risus lacus, placerat quis, dictum dapibus, ullamcorper at, ipsum. Ut egestas sem sed quam. Nullam gravida lectus sed mauris condimentum accumsan. Nam ac pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris varius bibendum ligula. Aenean neque. Nulla facilisi. Sed ultricies, lorem laoreet tempor ultricies, erat pede volutpat nibh, eget blandit quam massa hendrerit dolor. Fusce consectetuer, mauris id cursus eleifend, justo libero ultricies sapien, sed consectetuer odio mi eget elit. Vestibulum id arcu. Etiam tortor erat, accumsan vitae, pulvinar a, fringilla non, ligula. Maecenas venenatis semper urna. Quisque ac dolor. Nulla tellus. Quisque varius.
+
+Vestibulum non lacus. Phasellus iaculis. Duis pede. Praesent viverra lacus quis massa. Mauris eget dui. Proin aliquam, mauris eu dapibus viverra, pede nibh accumsan enim, sit amet aliquet nibh diam bibendum est. Nam dui. Morbi porta. Fusce scelerisque turpis ac arcu. Quisque quis erat. Nam sodales tellus et velit. Morbi vel arcu. Vivamus at nibh at odio congue scelerisque.
+
+In hac habitasse platea dictumst. Maecenas sed dui. Nulla turpis. Nulla rhoncus, quam lobortis tempor convallis, justo diam tristique erat, ut lobortis massa pede id magna. Donec purus. Cras tempus ligula eget nisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse adipiscing sapien vitae enim. Donec egestas metus at sem. Sed in massa. Proin vulputate risus et nunc. Cras ut purus. Ut posuere semper eros. Praesent diam. Donec at lectus ac odio fringilla mollis. Mauris pede eros, faucibus in, cursus sit amet, adipiscing eget, ipsum. Donec malesuada laoreet purus.
+
+Sed mauris tellus, scelerisque eget, semper quis, vulputate non, leo. Sed quis dui sit amet enim facilisis faucibus. Sed sem. Quisque sit amet odio. In pellentesque scelerisque elit. In hac habitasse platea dictumst. Maecenas mattis massa quis lectus. Nam arcu. Nulla accumsan magna et ipsum. Donec felis erat, tristique ut, tincidunt a, elementum quis, metus. Aliquam erat volutpat.
+
+Vivamus ut orci pulvinar nisl condimentum varius. Etiam condimentum dui quis lectus. Donec ut sem sed nisl dictum pulvinar. Maecenas arcu enim, pretium vel, tincidunt quis, tristique pharetra, risus. Suspendisse pede lorem, luctus et, eleifend vitae, eleifend et, purus. Cras pretium est at tortor. Aenean ac ipsum et dolor dictum suscipit. Donec et magna vitae lectus malesuada facilisis. Cras dignissim. Morbi eget purus. Nulla in tellus. Ut turpis. Nunc imperdiet. Donec pretium pellentesque diam. Aliquam dapibus.
+
+Cras eu tellus ut erat tristique pretium. In hac habitasse platea dictumst. Phasellus lobortis. Proin a enim malesuada nunc luctus suscipit. Maecenas eu risus imperdiet ligula hendrerit tincidunt. Nunc egestas varius turpis. Proin sollicitudin ipsum. Maecenas hendrerit vehicula mi. Morbi sed magna eu libero egestas imperdiet. Fusce ullamcorper ultricies quam. Morbi quis ligula. Aliquam erat volutpat. Sed luctus. Duis eu risus. Mauris et turpis quis nisl sagittis lacinia. Aenean faucibus venenatis risus. Morbi tempor condimentum dolor.
+
+Integer sapien sem, scelerisque quis, tincidunt ut, fringilla sed, eros. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec eu lectus. Suspendisse malesuada leo eu ipsum. Aliquam condimentum nisi eget turpis. Ut nulla turpis, scelerisque in, rutrum in, sodales eget, turpis. Nullam pharetra euismod odio. Proin elit risus, pharetra vitae, ullamcorper in, posuere nec, magna. Donec semper lectus at sem. Morbi vitae libero. Quisque erat lectus, tempor vel, venenatis sed, dictum placerat, mauris. Integer malesuada.
+
+Quisque eget lacus. Aenean vitae enim in odio congue scelerisque. Fusce pellentesque accumsan erat. Praesent ante velit, sodales eget, tincidunt in, ullamcorper et, nisi. Sed vulputate. Sed fringilla, libero at aliquam tincidunt, odio lacus sagittis lectus, in volutpat est dui ornare nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam id ligula sed ante congue pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ornare adipiscing tellus. Suspendisse mattis. In vel elit laoreet dolor placerat elementum. Integer auctor nunc non tortor. Fusce accumsan metus vel tortor. Suspendisse vehicula mi vitae magna. Donec in purus vel libero hendrerit rutrum. Nunc rhoncus sapien ac sem. Nullam convallis malesuada arcu.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum sapien. Cras sem. Sed enim metus, porttitor in, imperdiet eget, placerat ac, sem. Mauris ipsum. Maecenas vitae lacus. Sed semper facilisis velit. Nam dignissim, felis sit amet tempus lobortis, libero metus dictum nisi, sit amet suscipit lorem odio non justo. Curabitur euismod, purus ac ornare egestas, orci massa tincidunt metus, et porta nulla nulla fringilla nibh. Aliquam id ipsum.
+
+Maecenas ac lorem. Nullam diam tellus, ornare ornare, convallis id, iaculis vitae, mi. Phasellus hendrerit. Cras malesuada pulvinar felis. Nunc id turpis vitae nisl vestibulum sollicitudin. Fusce elit risus, posuere vitae, mollis ac, commodo placerat, libero. Integer libero ipsum, congue ac, placerat non, sagittis nec, nibh. Vivamus sagittis, quam nec ullamcorper malesuada, libero magna dapibus dolor, in ornare enim leo non est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec elit. Curabitur tempor sem vel lorem. In ullamcorper. Curabitur eu odio id mi commodo pulvinar. Nam ut nisi. Nulla consequat lorem ac lectus feugiat elementum. Integer tincidunt, leo et eleifend tempor, augue ipsum ullamcorper sem, pulvinar faucibus velit lectus a dolor.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec mi sit amet lacus facilisis porttitor. Nam orci ante, dapibus eget, interdum in, hendrerit eu, augue. Aenean vehicula, ligula in porttitor volutpat, dui lectus mollis metus, sit amet tincidunt orci enim at nulla. Proin vestibulum vehicula orci. Aliquam erat volutpat. Fusce sit amet erat. Vivamus vestibulum pellentesque lectus. Fusce magna ante, pharetra quis, molestie sed, molestie vel, massa. Donec in erat at nunc sollicitudin euismod.
+
+Nunc et massa ut quam posuere vehicula. Cras fringilla ante vitae orci. Vestibulum mattis congue ligula. Duis eu pede eu odio tristique sodales. Curabitur sagittis venenatis ipsum. Etiam vitae lacus a mauris feugiat ultricies. Nulla convallis tortor et erat. Nunc nunc. Phasellus porta eros at dolor. Morbi placerat. Aenean non ipsum in libero euismod euismod. Maecenas vel justo. Proin sit amet orci adipiscing tellus tincidunt interdum. Pellentesque euismod nulla vitae est placerat lacinia. Donec malesuada, elit laoreet tincidunt sodales, lorem ligula consectetuer purus, ut rutrum mi neque eu sem. Phasellus ac odio.
+
+Vivamus lobortis. Aliquam erat volutpat. Nullam rutrum ipsum in dolor. Nullam vel libero. Duis lacinia lectus vel lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sodales dolor. Proin rhoncus, lectus pharetra faucibus facilisis, diam ligula hendrerit leo, ac aliquet sem ipsum id arcu. Ut non erat eu risus ornare rhoncus. Mauris non lorem ut magna convallis rutrum. Integer est purus, venenatis in, euismod quis, feugiat vitae, leo. Suspendisse laoreet tellus eleifend neque. Sed vitae arcu nec pede tempus hendrerit. Mauris commodo, leo ultricies venenatis consectetuer, turpis tellus hendrerit diam, eget lacinia diam tortor in leo. Etiam luctus orci ut sem. Donec sed mi sit amet erat pharetra ullamcorper. Phasellus dolor diam, euismod et, pharetra ut, convallis sed, orci. Nam vitae lorem.
+
+Vivamus et nulla. Suspendisse vel tellus sed quam blandit rhoncus. Proin convallis erat vel dolor. Proin ut leo. Quisque ut pede non augue vestibulum egestas. Donec interdum justo eget dui. Nunc malesuada neque et felis. Donec eu dolor. Aenean in dolor vehicula diam bibendum auctor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed molestie laoreet nisi. Mauris condimentum magna quis massa. Nulla faucibus. In leo. Morbi vitae dolor. Aliquam erat volutpat. Sed euismod. Fusce pede. Nullam ipsum mauris, ultricies tempor, laoreet eu, pretium ac, sem.
+
+Praesent accumsan risus quis mi. Curabitur id nisi. Fusce imperdiet. Proin vitae velit. Vivamus eget urna vitae metus ultrices sodales. Mauris vel mi. Phasellus nisi metus, auctor sed, facilisis id, volutpat a, nisi. Nulla sagittis. Duis vitae nisl. Phasellus felis tortor, cursus vitae, convallis et, fringilla egestas, eros. Pellentesque nunc lectus, mattis laoreet, sollicitudin eu, imperdiet auctor, quam. In hac habitasse platea dictumst. Integer lectus nibh, tincidunt accumsan, sagittis nec, viverra vel, pede. Integer porttitor varius nulla. Aenean consectetuer leo a nunc. Suspendisse vel risus. Pellentesque sed eros.
+
+Aenean consectetuer diam ac diam. Sed varius semper tellus. Mauris condimentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget enim. Vivamus felis ante, porttitor a, cursus eget, cursus eu, quam. Aliquam consequat consectetuer lectus. Cras non tellus. Aliquam bibendum hendrerit ipsum. Phasellus auctor ullamcorper nunc. Suspendisse tempor neque at sapien. Quisque malesuada libero quis ipsum. Sed pellentesque pellentesque est. Aenean rhoncus magna eget arcu. Praesent dignissim. Duis magna. Praesent nunc nibh, sagittis vitae, iaculis sed, facilisis a, orci. Nunc eu lectus id velit porta commodo. Aliquam a tortor.
+
+Nullam hendrerit lacinia velit. Curabitur et velit ac libero tempus sollicitudin. Praesent aliquam dui eu enim. Aliquam erat volutpat. Duis quis risus. Sed sit amet metus eget odio porta iaculis. Duis lacinia, nibh vel hendrerit malesuada, odio quam eleifend sem, non aliquam nisi lectus ut nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus sodales. Cras euismod ligula quis velit egestas commodo. Vestibulum vulputate ornare quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus convallis ligula id nunc.
+
+Nam consequat felis condimentum pede. Etiam nec risus. Mauris vehicula laoreet enim. Quisque nisl urna, tincidunt eget, congue non, rhoncus eu, odio. Ut quis velit. Aenean semper purus in tellus. Duis sagittis auctor sapien. Ut dapibus mi in lorem. Ut nunc. Phasellus id purus. Etiam ultrices. Sed nec nisi. Praesent ac augue nec turpis sodales cursus. Praesent et quam et turpis tempor mattis. Ut a velit eget enim feugiat pharetra. Cras blandit enim non ante. Aliquam erat volutpat. Quisque nulla arcu, eleifend ac, mollis a, congue at, leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin malesuada imperdiet sem.
+
+Cras a justo. Suspendisse volutpat mi in nunc. Vestibulum placerat sagittis arcu. Vivamus pede. Vivamus ultrices risus at leo. Nulla egestas adipiscing mi. Quisque cursus mi non arcu. Nulla congue. Donec dictum imperdiet diam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin quis mi. Duis odio. Morbi tincidunt enim in mauris. Duis mi enim, dapibus a, suscipit ac, porttitor eu, leo. In aliquam, dolor vitae congue hendrerit, lacus risus consequat risus, ut molestie mauris purus a ligula. Nullam sit amet diam. Etiam congue malesuada dolor. Integer dictum. Fusce facilisis. Quisque neque velit, feugiat a, egestas quis, tempor a, magna.
+
+Fusce ligula. Praesent tincidunt mollis diam. Aenean libero neque, suscipit nec, volutpat in, ultrices sed, turpis. Etiam consequat bibendum arcu. In turpis. Pellentesque et odio. Proin ac lectus vitae elit malesuada sodales. Aenean bibendum enim ut nulla. Suspendisse turpis est, tempus non, cursus eget, pulvinar eget, nibh. Aliquam erat volutpat. Etiam risus urna, accumsan vel, pellentesque in, commodo sit amet, nisl. Nulla eget sem sed nulla porta egestas. In tempus est nec justo. Aenean placerat. Aenean commodo nulla nec magna commodo luctus. Nunc mollis sem sed metus.
+
+Sed vitae libero et felis varius dapibus. Maecenas at orci. Etiam quam turpis, interdum vel, interdum vitae, dapibus sit amet, pede. Suspendisse consectetuer velit dictum arcu. Vestibulum dui dolor, vehicula et, ultricies ut, facilisis et, enim. Duis eu neque id diam tempus ornare. Phasellus luctus faucibus ante. Morbi id enim ut dolor interdum volutpat. Nam non nunc. Nulla sagittis enim vitae mi. Fusce sit amet odio.
+
+Nulla elementum, massa ac tempus suscipit, leo magna tristique urna, ac gravida eros nisl sit amet est. Curabitur posuere mattis mauris. Integer pellentesque sodales velit. In scelerisque metus. Suspendisse potenti. Duis felis. Nunc vitae enim eget metus tempus egestas. Suspendisse potenti. Integer viverra sollicitudin nunc. Curabitur lectus. Sed faucibus. Fusce justo. Nulla facilisi. Donec viverra lorem sit amet ipsum aliquet imperdiet. Maecenas quis est. Cras nibh nisi, pellentesque sit amet, porttitor vitae, adipiscing vitae, massa. In hac habitasse platea dictumst. Etiam dignissim.
+
+Integer neque libero, consectetuer quis, egestas sit amet, feugiat sed, tellus. Nullam sagittis erat id purus. In erat pede, cursus ut, posuere eu, laoreet non, urna. Sed elit enim, placerat eu, rutrum non, consectetuer vel, purus. Curabitur eget magna. Phasellus ultrices velit at ipsum. Praesent posuere consectetuer lorem. Donec dapibus libero a eros. Phasellus convallis luctus quam. Vestibulum est dui, viverra id, feugiat eu, malesuada eget, mi. Fusce bibendum arcu vitae justo suscipit ullamcorper. Sed a augue rutrum nisi gravida volutpat. Maecenas consequat rutrum felis. Aliquam neque libero, dignissim ut, ullamcorper vel, luctus eu, enim. Donec mollis consectetuer ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur sed nulla ac libero dapibus pretium.
+
+Proin auctor imperdiet justo. Curabitur est mauris, tristique a, rutrum vel, vulputate vitae, augue. Proin purus nulla, pharetra id, faucibus quis, venenatis a, nunc. Sed tincidunt elementum turpis. Mauris nibh tellus, accumsan et, mattis eu, pulvinar eget, sem. Nulla facilisi. Mauris pulvinar dignissim eros. Fusce nec orci vitae lectus feugiat lobortis. Etiam velit turpis, aliquam sit amet, lacinia eu, mattis ut, ipsum. Praesent ut massa a quam scelerisque gravida. Suspendisse ullamcorper faucibus pede. Vivamus turpis. Mauris suscipit. Integer vel dui. Curabitur a enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut dapibus molestie dolor. Curabitur at mauris.
+
+Nullam luctus risus ut lectus. Phasellus imperdiet tellus et massa. Cras vulputate, arcu sit amet tempor suscipit, libero orci pharetra nibh, in pharetra massa lorem nec mi. Aenean sodales auctor orci. Aliquam euismod tincidunt velit. Maecenas urna nulla, congue dapibus, semper at, faucibus ultricies, dolor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis tincidunt aliquam nisl. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce commodo, eros ut adipiscing luctus, libero risus mollis ipsum, et vulputate lorem purus vel lacus. Nullam lectus neque, vehicula eget, eleifend ac, aliquet eu, enim.
+
+Praesent orci tellus, convallis vitae, aliquet eget, suscipit vel, ligula. Curabitur eleifend elit non sem. Fusce ut quam. Mauris at ipsum eget justo mattis pretium. Phasellus eu enim. Vestibulum suscipit purus at libero. Fusce vitae leo. Aenean cursus. Nunc ullamcorper augue nec enim. Fusce et est sit amet nisl sodales volutpat. In malesuada enim sed mauris. Aliquam et felis. Pellentesque euismod consequat erat. Aliquam pharetra diam sed erat. Nullam placerat, neque quis condimentum semper, lectus purus auctor metus, nec luctus nibh lectus in elit. Nullam faucibus pellentesque nunc. Suspendisse potenti.
+
+Curabitur commodo metus eu odio. Nulla porttitor consequat diam. Nam pretium ornare ante. Integer congue, elit ut commodo pellentesque, lectus urna luctus felis, et rhoncus magna libero pretium est. Mauris diam. Curabitur fringilla justo vel tortor. Mauris justo eros, adipiscing non, laoreet et, mattis in, tortor. Vestibulum vel justo non augue lacinia sollicitudin. Duis et libero eu nibh adipiscing sollicitudin. In sem. Quisque dictum ultrices lacus. Mauris quis orci. Ut aliquet eros ut mauris. Pellentesque ultrices. Aliquam erat volutpat. Nullam feugiat blandit lacus. Fusce vulputate, ante sit amet eleifend viverra, arcu augue feugiat urna, porttitor interdum sem ligula cursus sapien. In vitae augue nec sapien tincidunt dignissim. Morbi tincidunt aliquet mauris. Donec pellentesque.
+
+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras ligula sem, eleifend sit amet, iaculis quis, varius ut, ante. Morbi dapibus eleifend magna. Nullam dapibus rhoncus tellus. Nam quis tortor. Cras arcu nunc, sagittis eu, malesuada varius, tempus et, lorem. Etiam sit amet metus. Praesent arcu. Aenean et metus. Quisque sem enim, posuere id, feugiat nec, gravida ut, neque. Maecenas semper, justo sit amet dapibus dapibus, purus justo facilisis purus, non fringilla eros ligula a neque. Donec nisi. Integer mattis, lacus in ullamcorper lobortis, risus massa aliquet ligula, eget auctor leo orci sit amet nisi. Aenean diam. Ut tristique quam eu velit. Curabitur sed mi eget arcu sodales aliquet. In sed risus. Sed et mi.
+
+Etiam sagittis enim tincidunt est. Cras vel est vel eros tincidunt consectetuer. Etiam eu sapien ac orci vestibulum dapibus. Sed ut est eu est euismod hendrerit. Pellentesque vitae orci non libero varius dignissim. Praesent iaculis, ligula id euismod interdum, lacus risus porttitor quam, a adipiscing mi augue at diam. Nulla iaculis iaculis turpis. Vivamus nec nunc quis libero ornare ullamcorper. Praesent imperdiet posuere dui. Etiam vulputate vestibulum urna. Cras cursus hendrerit ipsum. Praesent felis ante, posuere sed, mattis quis, sollicitudin ut, lorem. Donec nec odio. Sed luctus odio eu risus. Sed sem nisl, tincidunt quis, hendrerit et, facilisis non, mauris. Aliquam non felis. Integer sed lacus vitae dolor pulvinar condimentum. Etiam lobortis, libero quis tincidunt lacinia, nibh nisi iaculis quam, eu condimentum massa purus a turpis. Suspendisse potenti.
+
+Morbi vitae lacus ac tellus pulvinar mollis. Nam auctor fringilla sem. Morbi lacus elit, pellentesque at, mattis nec, volutpat feugiat, lectus. Phasellus eros ligula, molestie at, pulvinar id, eleifend vel, ante. Fusce facilisis, diam luctus interdum condimentum, libero justo venenatis tellus, molestie ullamcorper ante diam ac sem. Pellentesque tempus, ligula ac pellentesque vulputate, eros velit aliquet lacus, eu dignissim urna leo a diam. Suspendisse quam ipsum, ullamcorper sed, dignissim vehicula, facilisis ut, tellus. Fusce convallis, odio a malesuada pharetra, orci risus sagittis urna, sit amet tincidunt ligula pede vitae leo. Quisque augue. Phasellus scelerisque nisl sed purus malesuada pretium. Pellentesque condimentum tempus ipsum. Vivamus auctor metus sed sapien. Nulla tristique congue magna.
+
+Vestibulum iaculis urna ac risus. Nullam fringilla suscipit ipsum. Quisque euismod. Quisque ullamcorper pede tincidunt risus. Sed tortor pede, rutrum ac, varius sed, sagittis nec, orci. Phasellus arcu orci, bibendum quis, tempus id, consequat eu, velit. Phasellus commodo congue purus. Sed malesuada, pede eu volutpat tristique, tellus mauris vulputate nibh, a faucibus lorem enim nec nulla. Nunc semper, nisl iaculis rutrum consectetuer, leo eros egestas lacus, sit amet venenatis dolor ligula non lorem. Morbi feugiat. Donec vulputate. Vivamus at sapien sit amet est feugiat elementum. Donec nisl erat, tincidunt ornare, pellentesque vel, aliquet sit amet, eros. Duis sagittis porta sapien. Etiam a dui. Praesent lobortis nisl at lorem. Sed malesuada. Morbi viverra dui eu neque. Nullam sed ante sed diam malesuada vehicula. Morbi ut metus et dolor hendrerit vehicula.
+
+Integer in lacus nec dui aliquet dictum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse et mauris vitae dui lacinia ultrices. Mauris neque sem, sagittis sed, lobortis viverra, pharetra vitae, mi. Nam dui nunc, iaculis id, dictum at, porttitor vitae, diam. Donec tincidunt leo quis augue varius rhoncus. Nam risus. Vivamus dignissim. Praesent viverra, neque vitae vulputate blandit, dui massa rhoncus lectus, quis accumsan neque quam sit amet augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut congue pellentesque velit. Vivamus at elit. Cras risus metus, elementum ut, tristique nec, commodo in, sapien. Etiam metus.
+
+Maecenas congue, justo vitae egestas volutpat, orci quam aliquam mi, vitae pulvinar tortor pede vel nunc. Integer mollis, massa sit amet vestibulum fringilla, nulla tortor pretium nibh, eget porttitor nisi elit sit amet magna. Proin dignissim, nisl eget posuere posuere, velit diam ultrices turpis, a lacinia nunc dolor quis odio. Nulla egestas. Nam consectetuer. Pellentesque enim libero, viverra eget, dapibus ut, iaculis ac, neque. Donec vel tortor. Sed eu urna ut libero pharetra viverra. In hac habitasse platea dictumst. In dictum. Morbi non magna sit amet elit dictum facilisis. Sed ultrices porta urna. Vivamus tincidunt. Ut ante orci, pellentesque a, aliquet ut, dignissim eu, velit. Integer ultrices congue felis.
+
+Sed faucibus vestibulum augue. In lectus urna, vulputate non, dignissim id, placerat in, ante. Aenean mi erat, eleifend at, faucibus in, gravida eget, massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Donec dignissim elit vel felis. Vestibulum gravida tortor ut massa. Nulla facilisi. Nulla imperdiet urna sed nibh. Suspendisse volutpat, nulla eget dignissim elementum, leo velit bibendum leo, ac viverra mi nisl nec mi.
+
+Vivamus et libero vel erat mattis semper. Cras hendrerit porttitor sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc elementum condimentum orci. In hac habitasse platea dictumst. Donec massa quam, laoreet in, sagittis nec, porta eu, tortor. Integer eget dui. Nulla quis purus in justo tristique adipiscing. Ut eleifend placerat orci. Sed neque.
+
+Sed ultrices eros vitae eros. Praesent venenatis laoreet orci. Vivamus non elit. Aliquam varius tellus non erat. Vivamus ullamcorper magna sit amet lectus. Mauris venenatis, elit vel lobortis dapibus, eros lacus feugiat erat, in tincidunt dui libero a orci. Duis non nisi. Nulla aliquet, nunc vel vestibulum lobortis, est lorem luctus mi, ut sodales felis dolor vitae dolor. Fusce eget felis. Pellentesque tempus eros ut justo. Curabitur aliquet. Duis rutrum sapien sit amet lectus. Curabitur tellus. Nulla laoreet sapien at ante. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce lacinia venenatis sem. Mauris sagittis.
+
+Proin posuere nibh id pede. Maecenas hendrerit placerat nisi. Sed vitae justo quis ante pellentesque sollicitudin. Morbi in est. Nulla velit nibh, tempus non, tincidunt eget, ornare at, dui. Praesent fringilla magna id magna tincidunt mattis. Morbi vestibulum. Donec ut nisl. Duis turpis nulla, feugiat vel, commodo at, hendrerit eu, purus. Cras nec libero. Nullam vestibulum dolor et metus scelerisque vestibulum. Aliquam sed felis. Nulla dolor diam, placerat vitae, gravida eget, tincidunt consectetuer, pede. Maecenas auctor, felis vulputate placerat sollicitudin, sapien purus dapibus purus, condimentum sollicitudin sapien purus eget magna. In at est a mi placerat congue. Maecenas et leo. Praesent ac nisl. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum vel mi quis lacus congue consequat. Duis laoreet ipsum et odio.
+
+Duis pede orci, aliquam eget, rutrum et, faucibus tincidunt, dui. Donec aliquet enim vitae diam. In hac habitasse platea dictumst. Integer pede. Phasellus feugiat ullamcorper sem. Maecenas eu turpis. Maecenas dapibus leo varius neque. Mauris convallis, velit ut interdum pulvinar, est dolor elementum lacus, ut placerat neque est at dolor. Donec aliquet purus. Etiam quam urna, pharetra ut, consequat at, lacinia at, velit. Curabitur metus lacus, tincidunt sit amet, pharetra non, suscipit vel, quam. Ut lacus ante, ullamcorper porta, malesuada venenatis, vulputate et, dui. Nam posuere lacus eu urna. Sed ac erat vel nisl venenatis pharetra. Nullam egestas lectus non lorem. Maecenas mi neque, sodales a, ullamcorper aliquam, semper in, elit. Donec nec risus ultricies libero tincidunt accumsan. Sed rutrum neque tristique lacus. Fusce nulla ligula, vulputate et, pellentesque eget, varius ut, odio.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In quis risus non pede egestas imperdiet. Maecenas faucibus, purus id pulvinar sagittis, libero arcu pharetra lacus, sit amet auctor lorem tortor non urna. Suspendisse semper, sem vitae consectetuer molestie, nunc erat feugiat quam, non placerat augue mauris eu metus. Aliquam eleifend, justo sed ullamcorper auctor, elit sem rhoncus turpis, quis pellentesque nibh risus at enim. Cras dui. Vestibulum eget dolor. Sed faucibus. Praesent a odio feugiat quam scelerisque egestas. Fusce a ante non ante blandit congue. Aenean vestibulum. In hac habitasse platea dictumst. Ut consequat.
+
+Nam tincidunt est nec libero. Maecenas quis odio eu nisl vulputate pretium. Phasellus fermentum feugiat metus. Curabitur convallis fermentum erat. Donec ac lorem sit amet augue fringilla fringilla. Vestibulum neque ligula, consequat vitae, gravida posuere, vulputate ut, metus. Suspendisse potenti. Phasellus blandit. Quisque commodo odio at mi ultricies aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec condimentum, leo ac aliquam vehicula, metus augue lacinia tellus, ut dictum nisl orci ac neque. Nam a tellus. Praesent vitae nisl non augue laoreet adipiscing. Nullam at justo sed dolor placerat mattis. Nam varius nisl et urna. Sed bibendum, augue lobortis vestibulum ornare, nibh odio pharetra purus, quis eleifend est sapien sit amet lorem. Aenean viverra ante non libero. Ut posuere. Mauris arcu lacus, sodales in, condimentum ac, accumsan vitae, mi.
+
+Aliquam sodales dignissim purus. Donec at arcu. Vestibulum eleifend. Pellentesque dui. Phasellus sem. Sed ornare nisi lobortis ligula. Etiam est. Etiam leo lorem, auctor ut, molestie facilisis, tristique eu, sem. Morbi lorem. Mauris pede dolor, aliquam bibendum, facilisis sed, vehicula eu, nibh. Integer aliquet. Aliquam posuere, odio in sollicitudin luctus, nibh arcu vulputate mauris, sit amet eleifend risus magna ut leo. Nullam consectetuer semper dui. Donec dignissim justo interdum nisl vestibulum egestas. Donec sit amet arcu nec tellus sollicitudin eleifend. Ut auctor leo eget turpis. Integer commodo mattis neque.
+
+Vivamus vitae orci. Morbi quam quam, convallis vel, dignissim pretium, ultricies eu, dolor. Cras non est quis nisl faucibus sodales. Mauris euismod vulputate mauris. Duis vehicula feugiat orci. Nulla facilisi cras amet. 
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFI1aQDwJfZ7JTAY2MRApDhAKDTaHE5Juz9UvbNvag2eqXhB3+ahgCgulAq
+CQKic84xan7nfdky+QCSPYA=
+=jwif
+-----END PGP SIGNATURE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testVerifyFileDualClearsignedData.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,166 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus luctus placerat erat. Curabitur euismod arcu id eros. Maecenas accumsan pede in orci consectetuer tristique. Ut nec felis non nunc euismod ornare. Ut dui eros, euismod sit amet, condimentum nec, varius sit amet, leo. Cras ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis porta. Donec neque magna, interdum eu, dictum non, viverra a, est. Praesent vel neque. Mauris vitae nunc. Praesent commodo eros eget eros. Nunc congue. Maecenas quis massa sed ante dapibus vestibulum. Sed at dui. Duis mauris nulla, sodales vel, tincidunt ut, sodales ac, tellus. Donec ullamcorper. Maecenas sollicitudin sagittis leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus leo.
+
+Maecenas posuere. Morbi massa. Maecenas dolor felis, dignissim nec, vulputate quis, auctor vel, lectus. Sed libero. Cras mi. Proin placerat libero vitae dolor. Donec non nunc vel nisi sodales facilisis. Ut a tortor vitae neque eleifend rhoncus. Suspendisse vehicula, lectus vitae elementum porta, diam eros scelerisque sem, et accumsan massa orci a urna. Vivamus posuere, massa sit amet sagittis pulvinar, leo erat congue metus, eu congue lacus tortor in mauris. Vestibulum dapibus lorem in turpis. Curabitur aliquet gravida purus. Integer quis felis at velit varius laoreet. Pellentesque aliquam consectetuer lectus.
+
+Nunc at sapien. Cras faucibus dignissim dolor. Sed id diam ac augue aliquet convallis. Proin feugiat, lectus elementum venenatis aliquet, nibh lectus porttitor tortor, sit amet aliquet erat sapien eu nulla. Morbi sagittis libero sed tellus. Sed purus turpis, sollicitudin vel, dapibus eu, vehicula vel, dui. Nullam fringilla tellus in lorem. Integer dolor. Mauris interdum tristique neque. Nullam ac magna.
+
+Nam vel eros id enim dignissim sagittis. Suspendisse pede. Aenean et lacus at sapien molestie consequat. Vestibulum sapien. Aliquam erat volutpat. Duis vel felis ac risus consequat tristique. Curabitur porta enim. Phasellus auctor consectetuer justo. Sed rhoncus congue turpis. Nam consequat massa ac elit. Nam aliquam. Nam velit.
+
+Aliquam condimentum vestibulum risus. Vivamus id nunc ut ante consequat hendrerit. Donec sit amet ante ut nisi vulputate malesuada. Aliquam id nisi at justo ornare imperdiet. Curabitur ac felis eu pede posuere pretium. Cras sed justo et enim pretium mattis. Maecenas nec metus. Fusce sed odio. Vivamus aliquam dictum nunc. Nullam aliquam magna eu massa. Etiam sit amet lacus. Duis velit mauris, ullamcorper sit amet, facilisis sit amet, ultricies id, neque. Aenean ut arcu in magna suscipit ultricies. Nulla mauris. Morbi sed purus. Maecenas vel augue id lorem tempor volutpat. Sed congue porttitor mi. Mauris fringilla magna quis enim. Sed eleifend, nibh ut ornare lobortis, augue mauris egestas sapien, sit amet rutrum risus sem non felis. Pellentesque ipsum augue, ornare et, lobortis sit amet, aliquet ac, nulla.
+
+Aliquam sit amet massa. Morbi nec odio ut diam ornare pellentesque. Etiam iaculis purus quis neque. Cras gravida velit at ante. Curabitur a justo vitae nulla molestie molestie. Pellentesque sed urna vel enim rutrum tempor. Sed lectus tortor, consectetuer ac, aliquet ac, commodo id, elit. Sed eleifend turpis. Maecenas turpis dui, vulputate in, euismod id, dignissim eget, massa. Integer id mauris. Mauris a diam. Curabitur scelerisque, arcu ac aliquet eleifend, nunc elit egestas libero, ut luctus ipsum enim in risus. Quisque a pede. Sed euismod ligula vel lectus. Aliquam erat volutpat. Curabitur quis ligula. Vivamus justo odio, scelerisque ut, feugiat id, dapibus quis, nibh. Aliquam et ante vitae risus mattis iaculis. Aenean pretium ligula et magna viverra vehicula. Proin felis.
+
+Proin malesuada fermentum sem. Vivamus suscipit. Aenean et risus. Quisque vel urna. In hac habitasse platea dictumst. Ut vel quam eu odio semper congue. Aenean pulvinar, quam eget faucibus consequat, purus est tristique tellus, quis iaculis lectus nibh a neque. Cras diam. Vestibulum est enim, pellentesque vitae, sagittis id, semper non, sem. Maecenas iaculis.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam quam massa, ultricies a, tristique quis, luctus ut, enim. Ut hendrerit tellus sit amet diam. Mauris eget tellus sit amet tortor lacinia mattis. Praesent eros enim, iaculis id, ultricies sed, ultrices id, eros. Donec libero nibh, accumsan id, vehicula vel, bibendum vitae, est. Morbi ac velit vitae nibh pharetra semper. Aliquam eros turpis, porta sit amet, bibendum quis, porta vitae, ante. Fusce ac turpis nec nulla euismod fermentum. Integer imperdiet lorem consectetuer libero. Quisque luctus. Nam erat augue, ornare vitae, accumsan vitae, molestie id, massa. Integer cursus. Suspendisse libero.
+
+Nulla sed magna. Nulla suscipit, urna a varius aliquam, mi nulla posuere eros, fermentum consectetuer dui orci vel ipsum. Fusce varius erat in libero. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi lacinia. Etiam accumsan ultrices erat. Integer eu mi. In vel purus. Integer porttitor. Fusce pede enim, venenatis sit amet, varius rutrum, convallis eu, orci. Phasellus dictum lacinia ante.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut non tellus eget metus rhoncus condimentum. Praesent consequat augue eu erat. Donec accumsan, turpis a ultricies venenatis, neque tortor porta velit, sed sagittis velit sapien a tellus. Pellentesque eget diam. Phasellus luctus sagittis sem. Pellentesque ac risus. Sed ac velit. Maecenas sed justo. Sed ut sem. Morbi elit massa, pretium eget, aliquet sed, ornare ut, ligula. Etiam vitae mi eget nisi facilisis molestie. Phasellus varius mattis mauris. Suspendisse ut nunc. Praesent nec arcu. Nullam in lacus. In vitae est.
+
+In hac habitasse platea dictumst. Mauris ultrices. Nunc vulputate, augue quis imperdiet vehicula, libero orci cursus lectus, et mollis velit lorem eget lorem. Ut id dui a purus porttitor varius. Nulla neque nisl, vehicula et, venenatis at, pretium in, lectus. Pellentesque at lacus et sem dictum laoreet. Vestibulum quis mauris. Morbi fringilla cursus diam. Phasellus id neque. Aenean magna sem, facilisis non, luctus vitae, egestas a, sem. Ut lobortis urna pulvinar diam. Fusce in velit eget nibh mollis vulputate. In lorem ligula, commodo ut, tempor non, egestas quis, leo. Nullam sit amet purus. Integer pellentesque sagittis orci. Quisque neque lectus, porta euismod, tristique et, dictum ac, arcu. Mauris congue consequat dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc ut nibh nec nibh facilisis elementum. Maecenas vel metus.
+
+Etiam id orci at nulla consequat volutpat. Vestibulum vel nulla et leo sodales fringilla. Phasellus eu nisl et quam fringilla molestie. Aenean eget metus. Donec diam arcu, dignissim vitae, fermentum dictum, accumsan ac, purus. Proin tempor aliquam lorem. Nullam facilisis odio a ante. Aliquam dui. Nam id leo et massa fermentum tempus. In pellentesque elit ut metus. Fusce mollis est in libero. Donec orci nulla, scelerisque non, elementum id, semper accumsan, ante. Phasellus nec risus porta nunc molestie vulputate. Etiam justo sem, sagittis lobortis, laoreet scelerisque, ornare nec, arcu. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc laoreet sem mattis massa. Cras porttitor lectus vel metus. Integer tellus felis, sodales sed, pharetra vitae, sodales sit amet, nulla. Maecenas vulputate vestibulum nisl.
+
+Donec sollicitudin sollicitudin ante. Curabitur sed ipsum. Nunc odio eros, consequat vitae, condimentum luctus, auctor at, tortor. Morbi nisl. Vivamus gravida metus vel justo. Aliquam eget quam sed nunc faucibus vestibulum. Nullam in erat. Etiam volutpat nunc quis turpis. Pellentesque blandit. Praesent sagittis urna in orci facilisis varius. Donec ultricies. Fusce lobortis placerat urna. Quisque mattis, enim id venenatis mollis, elit metus ultrices quam, id commodo libero nisi sit amet sapien.
+
+Quisque sagittis porta odio. Maecenas ac tellus. Etiam ornare nibh eu arcu. Quisque euismod facilisis lorem. In mauris. Vivamus urna. Sed nisi. Curabitur convallis ultrices arcu. Nullam sit amet mi. Donec at arcu. Etiam hendrerit. Phasellus ullamcorper, orci nec fringilla convallis, felis purus tempor eros, tempor venenatis massa velit sit amet velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec libero.
+
+Fusce aliquet. Suspendisse at purus in augue lacinia tincidunt. Vivamus tempor pellentesque mi. Aenean consectetuer ultrices ligula. Nam turpis nisl, congue at, semper vel, dictum nec, elit. Sed lorem odio, bibendum eget, dignissim sit amet, cursus vel, erat. Donec cursus nisi ut lorem. Morbi quam mauris, hendrerit nec, egestas congue, placerat ac, nisi. Morbi auctor, risus in pharetra ullamcorper, enim tortor vulputate massa, ac interdum est libero ac purus. Mauris faucibus turpis a lacus. Proin pharetra magna vitae est.
+
+Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin iaculis, tortor sed pharetra sodales, turpis nunc mattis neque, ac porttitor ipsum lacus et tortor. Nulla eleifend luctus nisl. Nulla fermentum elementum dui. Cras dictum sem vel lorem. Nam pulvinar, elit in hendrerit hendrerit, turpis arcu accumsan sem, id elementum lorem ante ut augue. In pulvinar lacus sit amet nisl. Aenean venenatis, tortor at hendrerit venenatis, dui erat posuere urna, eget pharetra diam dolor pulvinar tortor. Pellentesque consectetuer. Sed orci. Morbi lacus ante, mattis et, ultrices sed, scelerisque sed, pede. Nulla eu nisl dapibus purus fermentum varius. Etiam rutrum vestibulum sem. Fusce libero. Duis laoreet. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum arcu nisi, mattis vitae, blandit non, venenatis eu, purus. Fusce fringilla, dui id iaculis luctus, mauris ipsum vulputate libero, quis posuere lectus ante a arcu.
+
+Mauris imperdiet libero venenatis odio. Integer varius laoreet turpis. Vivamus fermentum. Vivamus dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur at diam. Nulla suscipit gravida erat. Nulla enim massa, bibendum ut, pellentesque id, sollicitudin sollicitudin, massa. Integer varius, arcu ut condimentum commodo, neque neque blandit pede, vitae adipiscing tortor nibh eget sapien. Proin volutpat urna eu diam.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed quam pede, gravida sed, semper eu, fringilla quis, sapien. Fusce tincidunt nisi. In eros odio, vestibulum et, dapibus quis, tincidunt ac, est. Fusce eget purus id leo adipiscing varius. Fusce euismod lorem id turpis. Phasellus tincidunt blandit sapien. Integer sagittis orci at pede. Aliquam accumsan. Morbi ac orci sit amet magna scelerisque dignissim. Quisque vitae lacus quis neque convallis ultrices. Vestibulum ac arcu at mauris ultricies mollis. Nam id nulla. Nunc sed ligula. Sed nulla lectus, hendrerit ut, convallis ac, dapibus nec, odio. Ut blandit sapien nec libero.
+
+Duis tempor fermentum pede. Suspendisse imperdiet tincidunt risus. Integer lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque id odio eu nibh placerat adipiscing. Suspendisse quis leo eu velit laoreet hendrerit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec euismod nibh nec leo. Nullam sagittis fermentum ligula. Sed feugiat cursus elit. Pellentesque id tortor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vulputate leo ut neque rhoncus tristique.
+
+Aenean molestie, nisi a venenatis accumsan, mauris risus interdum tortor, et laoreet velit metus quis dui. Ut sed nunc. Quisque tempor. Suspendisse metus lectus, congue id, blandit quis, cursus eget, urna. Sed ac purus. Suspendisse sed eros sit amet risus eleifend pellentesque. Donec diam. Vestibulum vel mi. Aenean sagittis magna quis libero. Nunc scelerisque gravida metus. Aliquam nulla ante, rutrum vitae, vehicula et, pharetra sed, nunc. Nulla nulla enim, commodo vel, euismod id, convallis at, purus.
+
+Nulla pulvinar. Praesent et elit eget justo varius laoreet. Nunc ornare feugiat nisi. Aliquam vel felis eget erat semper sagittis. Aenean vel nisi. Aenean vehicula adipiscing enim. Nulla at sem. Sed commodo pretium erat. In turpis. Cras ullamcorper, magna non placerat vehicula, lacus justo condimentum leo, a tempus lorem leo vel nisl. Aliquam ut magna. Donec eu neque. Nunc semper quam vel est. Quisque eros tellus, vehicula sit amet, ultricies ac, facilisis vitae, dui. Morbi gravida, ligula vitae vestibulum facilisis, metus ipsum fermentum nunc, sit amet vehicula nisi urna non nunc.
+
+Ut non est vitae urna bibendum faucibus. Praesent at risus. Morbi nisi ante, ultrices tincidunt, accumsan et, lobortis quis, ligula. Proin nec est. Ut varius mollis dui. Etiam tortor purus, facilisis quis, viverra id, tincidunt vitae, dolor. Sed ullamcorper. Ut nec lacus. Phasellus ut metus a felis vulputate sagittis. Praesent magna. Morbi pretium placerat pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam at tortor sit amet sapien adipiscing lacinia. Aenean vitae enim. Vivamus adipiscing, mauris vel venenatis scelerisque, leo ligula lacinia orci, sed commodo dui nisi sit amet leo. Integer a est sed lacus pretium accumsan. Mauris scelerisque pulvinar leo.
+
+Vivamus tristique dui ut est convallis consequat. Phasellus turpis pede, fringilla non, sodales vitae, eleifend ac, lectus. Vestibulum eget nisi sed eros dapibus pretium. Fusce tincidunt pretium neque. Aenean elementum pulvinar lorem. Vivamus sit amet velit. Mauris quis arcu. Curabitur pede purus, suscipit sed, elementum in, dignissim at, dolor. Morbi eu odio. Ut ipsum nibh, egestas eu, tincidunt quis, lacinia quis, lorem.
+
+Vestibulum sollicitudin sapien a dolor. Mauris sit amet augue in diam condimentum semper. Etiam est. Fusce sit amet leo eget elit fermentum faucibus. Praesent ipsum quam, tristique ut, tempor eu, facilisis sed, sem. In vitae nisl. Nunc et pede vel augue malesuada tincidunt. Nulla felis. Etiam vel dui et nibh fringilla rutrum. Duis aliquet dui. Proin sed turpis ac tortor aliquet porttitor. Pellentesque congue venenatis est. Vestibulum in libero ut nulla condimentum porta. Aliquam erat volutpat. Vestibulum tincidunt. Donec at augue eu risus cursus venenatis. Suspendisse potenti. Ut consequat sem.
+
+Aliquam gravida est ac eros. Vestibulum sit amet mauris non diam tincidunt condimentum. Pellentesque commodo egestas diam. Phasellus semper risus at tellus. Duis eu enim. In ac augue sit amet sapien commodo tincidunt. Morbi convallis enim non tortor. Aliquam turpis. Quisque tellus nisi, porttitor in, consequat in, elementum quis, ipsum. Nulla id turpis ac nisi sagittis luctus. Praesent ipsum magna, vehicula at, luctus nec, accumsan convallis, odio. Curabitur non augue et risus commodo laoreet. Suspendisse commodo lacus sit amet orci. Pellentesque molestie tristique arcu. Aliquam erat volutpat. Praesent sit amet lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+
+Maecenas ornare risus in tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi luctus, nisl id laoreet aliquam, eros leo sagittis pede, vel venenatis dui odio venenatis quam. Quisque justo justo, lacinia sed, facilisis vel, dictum eu, erat. Proin ligula dolor, dapibus id, pellentesque id, consequat et, erat. In posuere. In sed est. Nam volutpat orci id nibh. Morbi convallis magna vitae mauris. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas felis. Donec condimentum. Sed pretium eros et est. Curabitur vel mauris. Sed tellus. Aliquam tristique facilisis metus. Nulla elit justo, sollicitudin eget, pulvinar eget, hendrerit vitae, est. Nulla semper dolor sed lorem.
+
+Morbi nisl. Proin pretium, ligula vitae pretium congue, turpis lacus bibendum magna, suscipit aliquet odio ligula nec risus. Mauris vestibulum. Pellentesque vehicula dolor sed nibh. Pellentesque id massa. Mauris sit amet justo quis turpis mollis tempor. Nullam vulputate velit at pede. Aenean fringilla ultrices magna. Proin urna tellus, faucibus in, blandit in, iaculis blandit, quam. Vestibulum turpis. Donec ornare aliquet justo. Integer velit. Sed at felis a arcu viverra congue. Suspendisse laoreet tortor at diam. Suspendisse quis arcu eget sapien condimentum molestie. Proin iaculis aliquet ipsum.
+
+Curabitur lorem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque in tortor. Curabitur imperdiet. Maecenas bibendum vestibulum nibh. Nullam vehicula lectus ac lectus. Morbi et lorem. Aenean sed metus. Cras commodo. Vestibulum a tortor. Duis pede nulla, posuere nec, hendrerit quis, faucibus id, nisl. Integer id purus nec quam aliquet ornare. Fusce euismod nibh ultricies pede. Quisque eget est hendrerit arcu mattis sollicitudin.
+
+Vestibulum viverra, lectus porta scelerisque venenatis, elit diam tempor ipsum, eu euismod nulla tortor eu orci. Praesent vulputate arcu vel magna. Maecenas blandit lectus. Aenean nunc orci, ornare vel, aliquam molestie, mattis non, sem. Fusce ac turpis et felis suscipit sodales. Nunc sollicitudin feugiat mi. Sed mattis fringilla magna. Quisque ut purus. Nunc tempus velit sed quam. Quisque mollis laoreet lorem. Integer eu augue. Morbi lobortis urna aliquam est.
+
+Maecenas eu tortor. Etiam commodo porta lectus. Ut vehicula, lorem id congue ultricies, augue ante pellentesque mauris, quis bibendum ante dui a dui. Aliquam varius mauris et neque. Vivamus consectetuer mauris eu elit. Cras vel nisi. Cras mollis sapien vitae tortor. In quis sem. Sed malesuada, eros non bibendum viverra, leo turpis iaculis ligula, nec auctor enim sapien nec magna. Vestibulum cursus, risus quis tempus aliquet, pede magna volutpat diam, tempor rutrum dolor dui a lacus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+
+Vestibulum euismod varius elit. Fusce et erat a leo ultrices semper. Vestibulum a ante quis neque lacinia laoreet. Nullam nisi ipsum, vulputate a, molestie quis, ornare sed, felis. In posuere ligula non odio. Nulla eleifend viverra arcu. Sed mollis metus ac massa. Quisque vitae tortor sed est laoreet sagittis. Donec et justo. Pellentesque porta mauris ut turpis. Ut diam. Nulla neque lacus, commodo egestas, iaculis quis, porta a, nibh. Integer ultricies, libero quis hendrerit imperdiet, quam purus consequat ligula, vitae dignissim elit nisl non turpis. Morbi ut orci in diam luctus convallis. Vivamus ligula.
+
+Sed magna leo, aliquam at, hendrerit ac, feugiat non, justo. Sed lectus. Suspendisse elementum pretium tellus. Aenean egestas. Aenean faucibus porta purus. Nullam lorem dolor, iaculis vel, lobortis et, euismod a, eros. Donec eget mi. Sed vitae ligula eu massa cursus luctus. Nunc ullamcorper. Nunc purus nulla, feugiat et, vestibulum quis, hendrerit at, tellus. Sed risus massa, porttitor elementum, rutrum a, posuere sed, nulla. Etiam blandit egestas ligula. Proin rutrum dolor at odio.
+
+Quisque et nunc. Maecenas sed dolor. Donec suscipit mattis magna. Donec sit amet leo. Aenean lobortis dolor non elit. Cras vulputate consequat tortor. Etiam sodales porttitor ante. Morbi ut leo quis lacus lobortis eleifend. Nunc fermentum, nisl sit amet pretium egestas, velit eros tincidunt lectus, non vulputate ipsum urna vitae erat. Integer sit amet sem quis turpis varius posuere. Proin in metus vitae neque commodo tincidunt. Praesent iaculis fringilla justo.
+
+Vestibulum nec sapien. Curabitur eros. Duis commodo, diam non congue imperdiet, risus nisl auctor nunc, eget sodales magna sapien egestas sem. Vivamus id mauris. Phasellus dapibus, lectus at ornare lacinia, mauris sem imperdiet ligula, bibendum imperdiet lorem dolor at purus. Quisque ultrices nisi at augue viverra scelerisque. In vel risus. Fusce quam diam, luctus a, pharetra ac, tempor ac, lectus. Fusce neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eget augue.
+
+Quisque in tellus vel lorem vulputate iaculis. Integer a pede. Integer vulputate molestie lorem. Donec velit magna, iaculis id, pretium in, aliquam nec, felis. Fusce nec libero sed velit egestas molestie. Maecenas turpis tortor, molestie in, hendrerit eu, tempor sed, enim. Fusce non orci. Suspendisse eleifend neque vitae odio. Quisque bibendum, justo a tristique gravida, sapien ante adipiscing nisl, non vehicula purus mi sit amet metus. Donec pharetra, felis nec interdum imperdiet, dui ipsum tempus diam, ac aliquam lorem libero vel nunc. Integer tincidunt adipiscing risus. Maecenas ante. Nunc vestibulum, nibh nec laoreet commodo, nibh erat tempor erat, ultricies mattis pede turpis luctus leo. Phasellus egestas ligula ac massa. Quisque tincidunt, erat ut volutpat ornare, neque eros tristique ante, sit amet bibendum turpis enim eget lectus. Pellentesque hendrerit lorem sed sem. Pellentesque semper elit non velit. Mauris nisl.
+
+Proin sed pede ac est mollis vestibulum. Nullam faucibus, lectus vel mollis accumsan, ipsum massa porta quam, id egestas turpis ante quis sapien. In aliquam ipsum in neque. Quisque id sapien. Morbi vitae elit. Nam leo eros, ullamcorper at, molestie a, mattis sit amet, augue. Pellentesque convallis suscipit elit. Nulla viverra. Nam ut erat. Duis metus. Mauris neque. Nulla eu odio elementum dolor adipiscing tincidunt. Aenean convallis, eros quis hendrerit luctus, dui tortor hendrerit ipsum, nec egestas nisl leo id tellus. Praesent eu turpis non tellus sodales semper. Duis quis enim sed nunc vulputate posuere. Proin leo. Proin mi risus, dapibus id, pretium sed, pharetra eget, diam.
+
+Aenean risus lacus, placerat quis, dictum dapibus, ullamcorper at, ipsum. Ut egestas sem sed quam. Nullam gravida lectus sed mauris condimentum accumsan. Nam ac pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris varius bibendum ligula. Aenean neque. Nulla facilisi. Sed ultricies, lorem laoreet tempor ultricies, erat pede volutpat nibh, eget blandit quam massa hendrerit dolor. Fusce consectetuer, mauris id cursus eleifend, justo libero ultricies sapien, sed consectetuer odio mi eget elit. Vestibulum id arcu. Etiam tortor erat, accumsan vitae, pulvinar a, fringilla non, ligula. Maecenas venenatis semper urna. Quisque ac dolor. Nulla tellus. Quisque varius.
+
+Vestibulum non lacus. Phasellus iaculis. Duis pede. Praesent viverra lacus quis massa. Mauris eget dui. Proin aliquam, mauris eu dapibus viverra, pede nibh accumsan enim, sit amet aliquet nibh diam bibendum est. Nam dui. Morbi porta. Fusce scelerisque turpis ac arcu. Quisque quis erat. Nam sodales tellus et velit. Morbi vel arcu. Vivamus at nibh at odio congue scelerisque.
+
+In hac habitasse platea dictumst. Maecenas sed dui. Nulla turpis. Nulla rhoncus, quam lobortis tempor convallis, justo diam tristique erat, ut lobortis massa pede id magna. Donec purus. Cras tempus ligula eget nisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse adipiscing sapien vitae enim. Donec egestas metus at sem. Sed in massa. Proin vulputate risus et nunc. Cras ut purus. Ut posuere semper eros. Praesent diam. Donec at lectus ac odio fringilla mollis. Mauris pede eros, faucibus in, cursus sit amet, adipiscing eget, ipsum. Donec malesuada laoreet purus.
+
+Sed mauris tellus, scelerisque eget, semper quis, vulputate non, leo. Sed quis dui sit amet enim facilisis faucibus. Sed sem. Quisque sit amet odio. In pellentesque scelerisque elit. In hac habitasse platea dictumst. Maecenas mattis massa quis lectus. Nam arcu. Nulla accumsan magna et ipsum. Donec felis erat, tristique ut, tincidunt a, elementum quis, metus. Aliquam erat volutpat.
+
+Vivamus ut orci pulvinar nisl condimentum varius. Etiam condimentum dui quis lectus. Donec ut sem sed nisl dictum pulvinar. Maecenas arcu enim, pretium vel, tincidunt quis, tristique pharetra, risus. Suspendisse pede lorem, luctus et, eleifend vitae, eleifend et, purus. Cras pretium est at tortor. Aenean ac ipsum et dolor dictum suscipit. Donec et magna vitae lectus malesuada facilisis. Cras dignissim. Morbi eget purus. Nulla in tellus. Ut turpis. Nunc imperdiet. Donec pretium pellentesque diam. Aliquam dapibus.
+
+Cras eu tellus ut erat tristique pretium. In hac habitasse platea dictumst. Phasellus lobortis. Proin a enim malesuada nunc luctus suscipit. Maecenas eu risus imperdiet ligula hendrerit tincidunt. Nunc egestas varius turpis. Proin sollicitudin ipsum. Maecenas hendrerit vehicula mi. Morbi sed magna eu libero egestas imperdiet. Fusce ullamcorper ultricies quam. Morbi quis ligula. Aliquam erat volutpat. Sed luctus. Duis eu risus. Mauris et turpis quis nisl sagittis lacinia. Aenean faucibus venenatis risus. Morbi tempor condimentum dolor.
+
+Integer sapien sem, scelerisque quis, tincidunt ut, fringilla sed, eros. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec eu lectus. Suspendisse malesuada leo eu ipsum. Aliquam condimentum nisi eget turpis. Ut nulla turpis, scelerisque in, rutrum in, sodales eget, turpis. Nullam pharetra euismod odio. Proin elit risus, pharetra vitae, ullamcorper in, posuere nec, magna. Donec semper lectus at sem. Morbi vitae libero. Quisque erat lectus, tempor vel, venenatis sed, dictum placerat, mauris. Integer malesuada.
+
+Quisque eget lacus. Aenean vitae enim in odio congue scelerisque. Fusce pellentesque accumsan erat. Praesent ante velit, sodales eget, tincidunt in, ullamcorper et, nisi. Sed vulputate. Sed fringilla, libero at aliquam tincidunt, odio lacus sagittis lectus, in volutpat est dui ornare nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam id ligula sed ante congue pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ornare adipiscing tellus. Suspendisse mattis. In vel elit laoreet dolor placerat elementum. Integer auctor nunc non tortor. Fusce accumsan metus vel tortor. Suspendisse vehicula mi vitae magna. Donec in purus vel libero hendrerit rutrum. Nunc rhoncus sapien ac sem. Nullam convallis malesuada arcu.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum sapien. Cras sem. Sed enim metus, porttitor in, imperdiet eget, placerat ac, sem. Mauris ipsum. Maecenas vitae lacus. Sed semper facilisis velit. Nam dignissim, felis sit amet tempus lobortis, libero metus dictum nisi, sit amet suscipit lorem odio non justo. Curabitur euismod, purus ac ornare egestas, orci massa tincidunt metus, et porta nulla nulla fringilla nibh. Aliquam id ipsum.
+
+Maecenas ac lorem. Nullam diam tellus, ornare ornare, convallis id, iaculis vitae, mi. Phasellus hendrerit. Cras malesuada pulvinar felis. Nunc id turpis vitae nisl vestibulum sollicitudin. Fusce elit risus, posuere vitae, mollis ac, commodo placerat, libero. Integer libero ipsum, congue ac, placerat non, sagittis nec, nibh. Vivamus sagittis, quam nec ullamcorper malesuada, libero magna dapibus dolor, in ornare enim leo non est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec elit. Curabitur tempor sem vel lorem. In ullamcorper. Curabitur eu odio id mi commodo pulvinar. Nam ut nisi. Nulla consequat lorem ac lectus feugiat elementum. Integer tincidunt, leo et eleifend tempor, augue ipsum ullamcorper sem, pulvinar faucibus velit lectus a dolor.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas nec mi sit amet lacus facilisis porttitor. Nam orci ante, dapibus eget, interdum in, hendrerit eu, augue. Aenean vehicula, ligula in porttitor volutpat, dui lectus mollis metus, sit amet tincidunt orci enim at nulla. Proin vestibulum vehicula orci. Aliquam erat volutpat. Fusce sit amet erat. Vivamus vestibulum pellentesque lectus. Fusce magna ante, pharetra quis, molestie sed, molestie vel, massa. Donec in erat at nunc sollicitudin euismod.
+
+Nunc et massa ut quam posuere vehicula. Cras fringilla ante vitae orci. Vestibulum mattis congue ligula. Duis eu pede eu odio tristique sodales. Curabitur sagittis venenatis ipsum. Etiam vitae lacus a mauris feugiat ultricies. Nulla convallis tortor et erat. Nunc nunc. Phasellus porta eros at dolor. Morbi placerat. Aenean non ipsum in libero euismod euismod. Maecenas vel justo. Proin sit amet orci adipiscing tellus tincidunt interdum. Pellentesque euismod nulla vitae est placerat lacinia. Donec malesuada, elit laoreet tincidunt sodales, lorem ligula consectetuer purus, ut rutrum mi neque eu sem. Phasellus ac odio.
+
+Vivamus lobortis. Aliquam erat volutpat. Nullam rutrum ipsum in dolor. Nullam vel libero. Duis lacinia lectus vel lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sodales dolor. Proin rhoncus, lectus pharetra faucibus facilisis, diam ligula hendrerit leo, ac aliquet sem ipsum id arcu. Ut non erat eu risus ornare rhoncus. Mauris non lorem ut magna convallis rutrum. Integer est purus, venenatis in, euismod quis, feugiat vitae, leo. Suspendisse laoreet tellus eleifend neque. Sed vitae arcu nec pede tempus hendrerit. Mauris commodo, leo ultricies venenatis consectetuer, turpis tellus hendrerit diam, eget lacinia diam tortor in leo. Etiam luctus orci ut sem. Donec sed mi sit amet erat pharetra ullamcorper. Phasellus dolor diam, euismod et, pharetra ut, convallis sed, orci. Nam vitae lorem.
+
+Vivamus et nulla. Suspendisse vel tellus sed quam blandit rhoncus. Proin convallis erat vel dolor. Proin ut leo. Quisque ut pede non augue vestibulum egestas. Donec interdum justo eget dui. Nunc malesuada neque et felis. Donec eu dolor. Aenean in dolor vehicula diam bibendum auctor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed molestie laoreet nisi. Mauris condimentum magna quis massa. Nulla faucibus. In leo. Morbi vitae dolor. Aliquam erat volutpat. Sed euismod. Fusce pede. Nullam ipsum mauris, ultricies tempor, laoreet eu, pretium ac, sem.
+
+Praesent accumsan risus quis mi. Curabitur id nisi. Fusce imperdiet. Proin vitae velit. Vivamus eget urna vitae metus ultrices sodales. Mauris vel mi. Phasellus nisi metus, auctor sed, facilisis id, volutpat a, nisi. Nulla sagittis. Duis vitae nisl. Phasellus felis tortor, cursus vitae, convallis et, fringilla egestas, eros. Pellentesque nunc lectus, mattis laoreet, sollicitudin eu, imperdiet auctor, quam. In hac habitasse platea dictumst. Integer lectus nibh, tincidunt accumsan, sagittis nec, viverra vel, pede. Integer porttitor varius nulla. Aenean consectetuer leo a nunc. Suspendisse vel risus. Pellentesque sed eros.
+
+Aenean consectetuer diam ac diam. Sed varius semper tellus. Mauris condimentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget enim. Vivamus felis ante, porttitor a, cursus eget, cursus eu, quam. Aliquam consequat consectetuer lectus. Cras non tellus. Aliquam bibendum hendrerit ipsum. Phasellus auctor ullamcorper nunc. Suspendisse tempor neque at sapien. Quisque malesuada libero quis ipsum. Sed pellentesque pellentesque est. Aenean rhoncus magna eget arcu. Praesent dignissim. Duis magna. Praesent nunc nibh, sagittis vitae, iaculis sed, facilisis a, orci. Nunc eu lectus id velit porta commodo. Aliquam a tortor.
+
+Nullam hendrerit lacinia velit. Curabitur et velit ac libero tempus sollicitudin. Praesent aliquam dui eu enim. Aliquam erat volutpat. Duis quis risus. Sed sit amet metus eget odio porta iaculis. Duis lacinia, nibh vel hendrerit malesuada, odio quam eleifend sem, non aliquam nisi lectus ut nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus sodales. Cras euismod ligula quis velit egestas commodo. Vestibulum vulputate ornare quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus convallis ligula id nunc.
+
+Nam consequat felis condimentum pede. Etiam nec risus. Mauris vehicula laoreet enim. Quisque nisl urna, tincidunt eget, congue non, rhoncus eu, odio. Ut quis velit. Aenean semper purus in tellus. Duis sagittis auctor sapien. Ut dapibus mi in lorem. Ut nunc. Phasellus id purus. Etiam ultrices. Sed nec nisi. Praesent ac augue nec turpis sodales cursus. Praesent et quam et turpis tempor mattis. Ut a velit eget enim feugiat pharetra. Cras blandit enim non ante. Aliquam erat volutpat. Quisque nulla arcu, eleifend ac, mollis a, congue at, leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin malesuada imperdiet sem.
+
+Cras a justo. Suspendisse volutpat mi in nunc. Vestibulum placerat sagittis arcu. Vivamus pede. Vivamus ultrices risus at leo. Nulla egestas adipiscing mi. Quisque cursus mi non arcu. Nulla congue. Donec dictum imperdiet diam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin quis mi. Duis odio. Morbi tincidunt enim in mauris. Duis mi enim, dapibus a, suscipit ac, porttitor eu, leo. In aliquam, dolor vitae congue hendrerit, lacus risus consequat risus, ut molestie mauris purus a ligula. Nullam sit amet diam. Etiam congue malesuada dolor. Integer dictum. Fusce facilisis. Quisque neque velit, feugiat a, egestas quis, tempor a, magna.
+
+Fusce ligula. Praesent tincidunt mollis diam. Aenean libero neque, suscipit nec, volutpat in, ultrices sed, turpis. Etiam consequat bibendum arcu. In turpis. Pellentesque et odio. Proin ac lectus vitae elit malesuada sodales. Aenean bibendum enim ut nulla. Suspendisse turpis est, tempus non, cursus eget, pulvinar eget, nibh. Aliquam erat volutpat. Etiam risus urna, accumsan vel, pellentesque in, commodo sit amet, nisl. Nulla eget sem sed nulla porta egestas. In tempus est nec justo. Aenean placerat. Aenean commodo nulla nec magna commodo luctus. Nunc mollis sem sed metus.
+
+Sed vitae libero et felis varius dapibus. Maecenas at orci. Etiam quam turpis, interdum vel, interdum vitae, dapibus sit amet, pede. Suspendisse consectetuer velit dictum arcu. Vestibulum dui dolor, vehicula et, ultricies ut, facilisis et, enim. Duis eu neque id diam tempus ornare. Phasellus luctus faucibus ante. Morbi id enim ut dolor interdum volutpat. Nam non nunc. Nulla sagittis enim vitae mi. Fusce sit amet odio.
+
+Nulla elementum, massa ac tempus suscipit, leo magna tristique urna, ac gravida eros nisl sit amet est. Curabitur posuere mattis mauris. Integer pellentesque sodales velit. In scelerisque metus. Suspendisse potenti. Duis felis. Nunc vitae enim eget metus tempus egestas. Suspendisse potenti. Integer viverra sollicitudin nunc. Curabitur lectus. Sed faucibus. Fusce justo. Nulla facilisi. Donec viverra lorem sit amet ipsum aliquet imperdiet. Maecenas quis est. Cras nibh nisi, pellentesque sit amet, porttitor vitae, adipiscing vitae, massa. In hac habitasse platea dictumst. Etiam dignissim.
+
+Integer neque libero, consectetuer quis, egestas sit amet, feugiat sed, tellus. Nullam sagittis erat id purus. In erat pede, cursus ut, posuere eu, laoreet non, urna. Sed elit enim, placerat eu, rutrum non, consectetuer vel, purus. Curabitur eget magna. Phasellus ultrices velit at ipsum. Praesent posuere consectetuer lorem. Donec dapibus libero a eros. Phasellus convallis luctus quam. Vestibulum est dui, viverra id, feugiat eu, malesuada eget, mi. Fusce bibendum arcu vitae justo suscipit ullamcorper. Sed a augue rutrum nisi gravida volutpat. Maecenas consequat rutrum felis. Aliquam neque libero, dignissim ut, ullamcorper vel, luctus eu, enim. Donec mollis consectetuer ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur sed nulla ac libero dapibus pretium.
+
+Proin auctor imperdiet justo. Curabitur est mauris, tristique a, rutrum vel, vulputate vitae, augue. Proin purus nulla, pharetra id, faucibus quis, venenatis a, nunc. Sed tincidunt elementum turpis. Mauris nibh tellus, accumsan et, mattis eu, pulvinar eget, sem. Nulla facilisi. Mauris pulvinar dignissim eros. Fusce nec orci vitae lectus feugiat lobortis. Etiam velit turpis, aliquam sit amet, lacinia eu, mattis ut, ipsum. Praesent ut massa a quam scelerisque gravida. Suspendisse ullamcorper faucibus pede. Vivamus turpis. Mauris suscipit. Integer vel dui. Curabitur a enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut dapibus molestie dolor. Curabitur at mauris.
+
+Nullam luctus risus ut lectus. Phasellus imperdiet tellus et massa. Cras vulputate, arcu sit amet tempor suscipit, libero orci pharetra nibh, in pharetra massa lorem nec mi. Aenean sodales auctor orci. Aliquam euismod tincidunt velit. Maecenas urna nulla, congue dapibus, semper at, faucibus ultricies, dolor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis tincidunt aliquam nisl. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce commodo, eros ut adipiscing luctus, libero risus mollis ipsum, et vulputate lorem purus vel lacus. Nullam lectus neque, vehicula eget, eleifend ac, aliquet eu, enim.
+
+Praesent orci tellus, convallis vitae, aliquet eget, suscipit vel, ligula. Curabitur eleifend elit non sem. Fusce ut quam. Mauris at ipsum eget justo mattis pretium. Phasellus eu enim. Vestibulum suscipit purus at libero. Fusce vitae leo. Aenean cursus. Nunc ullamcorper augue nec enim. Fusce et est sit amet nisl sodales volutpat. In malesuada enim sed mauris. Aliquam et felis. Pellentesque euismod consequat erat. Aliquam pharetra diam sed erat. Nullam placerat, neque quis condimentum semper, lectus purus auctor metus, nec luctus nibh lectus in elit. Nullam faucibus pellentesque nunc. Suspendisse potenti.
+
+Curabitur commodo metus eu odio. Nulla porttitor consequat diam. Nam pretium ornare ante. Integer congue, elit ut commodo pellentesque, lectus urna luctus felis, et rhoncus magna libero pretium est. Mauris diam. Curabitur fringilla justo vel tortor. Mauris justo eros, adipiscing non, laoreet et, mattis in, tortor. Vestibulum vel justo non augue lacinia sollicitudin. Duis et libero eu nibh adipiscing sollicitudin. In sem. Quisque dictum ultrices lacus. Mauris quis orci. Ut aliquet eros ut mauris. Pellentesque ultrices. Aliquam erat volutpat. Nullam feugiat blandit lacus. Fusce vulputate, ante sit amet eleifend viverra, arcu augue feugiat urna, porttitor interdum sem ligula cursus sapien. In vitae augue nec sapien tincidunt dignissim. Morbi tincidunt aliquet mauris. Donec pellentesque.
+
+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras ligula sem, eleifend sit amet, iaculis quis, varius ut, ante. Morbi dapibus eleifend magna. Nullam dapibus rhoncus tellus. Nam quis tortor. Cras arcu nunc, sagittis eu, malesuada varius, tempus et, lorem. Etiam sit amet metus. Praesent arcu. Aenean et metus. Quisque sem enim, posuere id, feugiat nec, gravida ut, neque. Maecenas semper, justo sit amet dapibus dapibus, purus justo facilisis purus, non fringilla eros ligula a neque. Donec nisi. Integer mattis, lacus in ullamcorper lobortis, risus massa aliquet ligula, eget auctor leo orci sit amet nisi. Aenean diam. Ut tristique quam eu velit. Curabitur sed mi eget arcu sodales aliquet. In sed risus. Sed et mi.
+
+Etiam sagittis enim tincidunt est. Cras vel est vel eros tincidunt consectetuer. Etiam eu sapien ac orci vestibulum dapibus. Sed ut est eu est euismod hendrerit. Pellentesque vitae orci non libero varius dignissim. Praesent iaculis, ligula id euismod interdum, lacus risus porttitor quam, a adipiscing mi augue at diam. Nulla iaculis iaculis turpis. Vivamus nec nunc quis libero ornare ullamcorper. Praesent imperdiet posuere dui. Etiam vulputate vestibulum urna. Cras cursus hendrerit ipsum. Praesent felis ante, posuere sed, mattis quis, sollicitudin ut, lorem. Donec nec odio. Sed luctus odio eu risus. Sed sem nisl, tincidunt quis, hendrerit et, facilisis non, mauris. Aliquam non felis. Integer sed lacus vitae dolor pulvinar condimentum. Etiam lobortis, libero quis tincidunt lacinia, nibh nisi iaculis quam, eu condimentum massa purus a turpis. Suspendisse potenti.
+
+Morbi vitae lacus ac tellus pulvinar mollis. Nam auctor fringilla sem. Morbi lacus elit, pellentesque at, mattis nec, volutpat feugiat, lectus. Phasellus eros ligula, molestie at, pulvinar id, eleifend vel, ante. Fusce facilisis, diam luctus interdum condimentum, libero justo venenatis tellus, molestie ullamcorper ante diam ac sem. Pellentesque tempus, ligula ac pellentesque vulputate, eros velit aliquet lacus, eu dignissim urna leo a diam. Suspendisse quam ipsum, ullamcorper sed, dignissim vehicula, facilisis ut, tellus. Fusce convallis, odio a malesuada pharetra, orci risus sagittis urna, sit amet tincidunt ligula pede vitae leo. Quisque augue. Phasellus scelerisque nisl sed purus malesuada pretium. Pellentesque condimentum tempus ipsum. Vivamus auctor metus sed sapien. Nulla tristique congue magna.
+
+Vestibulum iaculis urna ac risus. Nullam fringilla suscipit ipsum. Quisque euismod. Quisque ullamcorper pede tincidunt risus. Sed tortor pede, rutrum ac, varius sed, sagittis nec, orci. Phasellus arcu orci, bibendum quis, tempus id, consequat eu, velit. Phasellus commodo congue purus. Sed malesuada, pede eu volutpat tristique, tellus mauris vulputate nibh, a faucibus lorem enim nec nulla. Nunc semper, nisl iaculis rutrum consectetuer, leo eros egestas lacus, sit amet venenatis dolor ligula non lorem. Morbi feugiat. Donec vulputate. Vivamus at sapien sit amet est feugiat elementum. Donec nisl erat, tincidunt ornare, pellentesque vel, aliquet sit amet, eros. Duis sagittis porta sapien. Etiam a dui. Praesent lobortis nisl at lorem. Sed malesuada. Morbi viverra dui eu neque. Nullam sed ante sed diam malesuada vehicula. Morbi ut metus et dolor hendrerit vehicula.
+
+Integer in lacus nec dui aliquet dictum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse et mauris vitae dui lacinia ultrices. Mauris neque sem, sagittis sed, lobortis viverra, pharetra vitae, mi. Nam dui nunc, iaculis id, dictum at, porttitor vitae, diam. Donec tincidunt leo quis augue varius rhoncus. Nam risus. Vivamus dignissim. Praesent viverra, neque vitae vulputate blandit, dui massa rhoncus lectus, quis accumsan neque quam sit amet augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut congue pellentesque velit. Vivamus at elit. Cras risus metus, elementum ut, tristique nec, commodo in, sapien. Etiam metus.
+
+Maecenas congue, justo vitae egestas volutpat, orci quam aliquam mi, vitae pulvinar tortor pede vel nunc. Integer mollis, massa sit amet vestibulum fringilla, nulla tortor pretium nibh, eget porttitor nisi elit sit amet magna. Proin dignissim, nisl eget posuere posuere, velit diam ultrices turpis, a lacinia nunc dolor quis odio. Nulla egestas. Nam consectetuer. Pellentesque enim libero, viverra eget, dapibus ut, iaculis ac, neque. Donec vel tortor. Sed eu urna ut libero pharetra viverra. In hac habitasse platea dictumst. In dictum. Morbi non magna sit amet elit dictum facilisis. Sed ultrices porta urna. Vivamus tincidunt. Ut ante orci, pellentesque a, aliquet ut, dignissim eu, velit. Integer ultrices congue felis.
+
+Sed faucibus vestibulum augue. In lectus urna, vulputate non, dignissim id, placerat in, ante. Aenean mi erat, eleifend at, faucibus in, gravida eget, massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Donec dignissim elit vel felis. Vestibulum gravida tortor ut massa. Nulla facilisi. Nulla imperdiet urna sed nibh. Suspendisse volutpat, nulla eget dignissim elementum, leo velit bibendum leo, ac viverra mi nisl nec mi.
+
+Vivamus et libero vel erat mattis semper. Cras hendrerit porttitor sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc elementum condimentum orci. In hac habitasse platea dictumst. Donec massa quam, laoreet in, sagittis nec, porta eu, tortor. Integer eget dui. Nulla quis purus in justo tristique adipiscing. Ut eleifend placerat orci. Sed neque.
+
+Sed ultrices eros vitae eros. Praesent venenatis laoreet orci. Vivamus non elit. Aliquam varius tellus non erat. Vivamus ullamcorper magna sit amet lectus. Mauris venenatis, elit vel lobortis dapibus, eros lacus feugiat erat, in tincidunt dui libero a orci. Duis non nisi. Nulla aliquet, nunc vel vestibulum lobortis, est lorem luctus mi, ut sodales felis dolor vitae dolor. Fusce eget felis. Pellentesque tempus eros ut justo. Curabitur aliquet. Duis rutrum sapien sit amet lectus. Curabitur tellus. Nulla laoreet sapien at ante. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce lacinia venenatis sem. Mauris sagittis.
+
+Proin posuere nibh id pede. Maecenas hendrerit placerat nisi. Sed vitae justo quis ante pellentesque sollicitudin. Morbi in est. Nulla velit nibh, tempus non, tincidunt eget, ornare at, dui. Praesent fringilla magna id magna tincidunt mattis. Morbi vestibulum. Donec ut nisl. Duis turpis nulla, feugiat vel, commodo at, hendrerit eu, purus. Cras nec libero. Nullam vestibulum dolor et metus scelerisque vestibulum. Aliquam sed felis. Nulla dolor diam, placerat vitae, gravida eget, tincidunt consectetuer, pede. Maecenas auctor, felis vulputate placerat sollicitudin, sapien purus dapibus purus, condimentum sollicitudin sapien purus eget magna. In at est a mi placerat congue. Maecenas et leo. Praesent ac nisl. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum vel mi quis lacus congue consequat. Duis laoreet ipsum et odio.
+
+Duis pede orci, aliquam eget, rutrum et, faucibus tincidunt, dui. Donec aliquet enim vitae diam. In hac habitasse platea dictumst. Integer pede. Phasellus feugiat ullamcorper sem. Maecenas eu turpis. Maecenas dapibus leo varius neque. Mauris convallis, velit ut interdum pulvinar, est dolor elementum lacus, ut placerat neque est at dolor. Donec aliquet purus. Etiam quam urna, pharetra ut, consequat at, lacinia at, velit. Curabitur metus lacus, tincidunt sit amet, pharetra non, suscipit vel, quam. Ut lacus ante, ullamcorper porta, malesuada venenatis, vulputate et, dui. Nam posuere lacus eu urna. Sed ac erat vel nisl venenatis pharetra. Nullam egestas lectus non lorem. Maecenas mi neque, sodales a, ullamcorper aliquam, semper in, elit. Donec nec risus ultricies libero tincidunt accumsan. Sed rutrum neque tristique lacus. Fusce nulla ligula, vulputate et, pellentesque eget, varius ut, odio.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In quis risus non pede egestas imperdiet. Maecenas faucibus, purus id pulvinar sagittis, libero arcu pharetra lacus, sit amet auctor lorem tortor non urna. Suspendisse semper, sem vitae consectetuer molestie, nunc erat feugiat quam, non placerat augue mauris eu metus. Aliquam eleifend, justo sed ullamcorper auctor, elit sem rhoncus turpis, quis pellentesque nibh risus at enim. Cras dui. Vestibulum eget dolor. Sed faucibus. Praesent a odio feugiat quam scelerisque egestas. Fusce a ante non ante blandit congue. Aenean vestibulum. In hac habitasse platea dictumst. Ut consequat.
+
+Nam tincidunt est nec libero. Maecenas quis odio eu nisl vulputate pretium. Phasellus fermentum feugiat metus. Curabitur convallis fermentum erat. Donec ac lorem sit amet augue fringilla fringilla. Vestibulum neque ligula, consequat vitae, gravida posuere, vulputate ut, metus. Suspendisse potenti. Phasellus blandit. Quisque commodo odio at mi ultricies aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec condimentum, leo ac aliquam vehicula, metus augue lacinia tellus, ut dictum nisl orci ac neque. Nam a tellus. Praesent vitae nisl non augue laoreet adipiscing. Nullam at justo sed dolor placerat mattis. Nam varius nisl et urna. Sed bibendum, augue lobortis vestibulum ornare, nibh odio pharetra purus, quis eleifend est sapien sit amet lorem. Aenean viverra ante non libero. Ut posuere. Mauris arcu lacus, sodales in, condimentum ac, accumsan vitae, mi.
+
+Aliquam sodales dignissim purus. Donec at arcu. Vestibulum eleifend. Pellentesque dui. Phasellus sem. Sed ornare nisi lobortis ligula. Etiam est. Etiam leo lorem, auctor ut, molestie facilisis, tristique eu, sem. Morbi lorem. Mauris pede dolor, aliquam bibendum, facilisis sed, vehicula eu, nibh. Integer aliquet. Aliquam posuere, odio in sollicitudin luctus, nibh arcu vulputate mauris, sit amet eleifend risus magna ut leo. Nullam consectetuer semper dui. Donec dignissim justo interdum nisl vestibulum egestas. Donec sit amet arcu nec tellus sollicitudin eleifend. Ut auctor leo eget turpis. Integer commodo mattis neque.
+
+Vivamus vitae orci. Morbi quam quam, convallis vel, dignissim pretium, ultricies eu, dolor. Cras non est quis nisl faucibus sodales. Mauris euismod vulputate mauris. Duis vehicula feugiat orci. Nulla facilisi cras amet. 
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFI1aQDwJfZ7JTAY2MRApDhAKD0iljS+FCCf/9K0Bw6KyGhNZ23oACghI1J
+H/Ba8Y+h0pW1XUVSaTgDkd6IPwMFAUjVpAMDzIkK+h2tSxECkOEAn1iVmj+tIpeX
+MXRjHGvufGX+Vp3NAJ975VhAY0/9zeDHeFeJhXSAxx4gbA==
+=REia
+-----END PGP SIGNATURE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testVerifyFileDualNormalSignedData.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,294 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+owG9ec+rbWt21TPP6mwIpFraCWzSSGtxFdR0SpDivYTcVN6lQnHSiajr7r3uuUv2
+j/P2XuuAVBDtmYZJBQMBpTCNsiFYYEN7Nl7DZoGKpJFO/gAp0NgR0/Kbc4wx5/z2
+OZcXX+WkUfXuOWfvtb5v/hhjzDG/99Mff/RTX//4R7+1+dOf/eG3Pvqe//jF7//R
+j3/vi93uL/3wi//89ueW6br8+nSZ3/2jX5oP06freHhzvhzHw3fm+9O0/3Rcxl/+
+wx98/Kvny3Tczg/X9bjdnw/ny/Y6L9vxOC3Ddnc+XafdMi3rdNmO+/lhvu7m0/12
+OszLq+2vz4/jcb1uD+tuaf95OIy76TIuW/u/V9tP1sv4dl7Wy3Za5+vxvN+Ol926
+nfft7+frq+1n47SbTuN1O+526/E6nrYP037azqft+bKb+1cvl/m6zJ+v06vt3bI9
+Tbvtu3aE6/Z0Pm1P62kXrzhfTuMFn9qvs79piD9299rPx+m0tDu3pw3bx/Eytyvk
+Jw7TuV3h0o7nkbHrHLfX8262t47LuZ2lnbf9a37bvjct2+N4f2p/27f/PYyXdu25
+PX57PJ9aFob2letuslhc5v28Ww/tOy1yr7afrvb582UZ27/PdrHTZI+2p41DC8Yy
+XfbtzdM6tEfv/LznUzvv/DhdLuO2faYl+dX225dxutoLH6cDHmEBboe4to8u4+RR
+Kh/bnY8tImcP0Ha6nxYm5Y0Fs0XnHg9ghj63Ux7H63XcXqeWx3aq7X588Ks/tve3
+fxwsRt+xP3rkebMjjnBaD4d20ut5Px4m+8ph2C7zaTfv13aWdck/jS0Xy3Q4eGw8
+HvbV4+58eZgu5UTX8+Ew71p17Vu9XMf7eVnae5C0F0nUt9+PVz+Xv2SziZM8nK+t
+Qi1a58vbGVEqB0VHebVaBu3V11lFtx4e1mVswbQAD9ux9VH7sIfnMFlPIaSH+W3L
+DsvxOFsaz+3a0W/4OxPtL4xiUn94WczXOQL9btzN7Uzz1Xtl3LYX+7tRLF6D02Ga
+302n/fby/nza+WHWawtli9x1ak98b/EZdVR+tX2JfeVVbXcejyizFthDQ6OrPfs6
+HQdLRvQ+qss7f9yurYsTXhjhQRXIHs20P6yHx7n1vXetow9LeNs+tjoA6BctZO2J
+vOx8YoG2d0UVR2EfgIunbauGB/tMAtp4MCxatveX8XHej+0AFwvP61ZC9w2tvF0A
+UKN3ZDsxAeYwtqdO1rCtmCYrOYuGP6+FqcM8VsBm4z052n0fWqmyDN61YvFjZk0x
+81YxDWQ97mP74nqvN0wel8extc5VRfRuWu/ncYksZv4ep5O3zVVfbs0xv32vD1p6
+l9nCiGgOmRi9zDOBU1sKHAXUJ9mzKF7DFTW+3cBDytAPfbt7fyhLBowqRf7F0OeN
+w8b23aWx1dz+yWdbOj2vmSxGjWAZgBuMIzTlE1tEHZstL+PR+8qL22jtZEmIdOiG
+fdsYx73afrPFthV9ixEKMuN0PB+sFCfUQquKpStO1cA3WTEe4sfzYV0e7JMOunYm
+Vt+uwdi1PT8eVpk069lb1c9fgY5w1BXlP1yvyxkZIiqos9Qlb1TH/jq0bDsHFIP9
+kcWOH7w5Wiy/mR0QxJzMglskIrRgO6qtC7go3/e+xfnSQGYRAmZR2gfbFxwFE3mP
+hobruB8zpvZ0+1B7nF+XomI7HxsH7eep0zajpEgrcNcvRKvtw2VaZhcO1q5W3niY
+9YUVCv/eDoAiCcawUztuvdr+0tow07973s/nvL/wQorAuV0Fyr95ldqpyEi/uBgg
+RDi87rJg5oVQOFTCLXoo+KL8bj20atrNkyVkUJ+wtC01LvdOPElL4K7pxyW/xSMH
+BhMY1PwlJFbRwLGWG+DyMh0fjK+i9K0kWYoJTUaW7OyEApzHQRolb18V2RHk2vGZ
+9cP5bXsc6NkpBY9r2HFdLLHekAX8LutyUcUazTkHe4ncgD4Utz900MtcefKFJdAC
+VFNHQNHsmHixlIdH0YrIasYu4kzAFzyUE6gm5lYKB6dRg1yPC3PppSuSQ5WM6KSu
+BVjZEpoeY8GY/nFzecuysTwA1PqBcUNeqXvANOKXfhjZ9WGRoLVKBNbUrAY6RUnh
+F0YWVYfNp5wW7EmJ5qaRB8VY3NGqMYoXZTF6tGt0iuoZ0BJGymLIrDqfYizCqiwQ
+42AZ5ICFivFotbYiJv7aCkU1klr82rzCYb4nLYae/ABx5Hk9//hiAg5xsBXU0Mk4
+k+5UEIgXWRl61jqpvJEYjDJBfwD8VIEBHsJGnp+ifYypR4SfIsa+vdngp4D09vsL
+ueRqlK/bCIoqD99E00IGFfr6tH3fMvbewjM6gx9apYzEXpu97jB14ZIr2q69z/BT
+k5TuFUIVH7a5K4RckNjATmxlUGQIBMyA/Khl2SEOWWPXtSjDohzsaVY6Q4cByMaQ
+csyyyMP7oOmBi65Rojabl5myTBKQvVqjVYZpP2QsUF7sCqtB4Phd4X8JvoBHBOSz
+QO+nn+BU0JhxPs1jEHPMzJiVPYSKv0Urz9hATT+SEzFUQ4lQ6Fquhpx77FO9fn3b
+PncyCcrU+HwPVB93miYAtZb2h/cN15fLyKzVDj+ngIbCS0aJlyCU+DNfCHyH9mhv
+JFL6OOnYLnSJ7iqAKIlElu4HGo6x6jHkD0l3OOq5UKdRpPhzMItF7gaPd+vlejun
+8q02RtnhjXgg4Kk+BAYD+GjUpEYd1d4x895SdjCVElu6S5rr5FOsQQKtI4SSz/Wb
+2hjCaHx1+w01wXIVmUe4og7hxilEJghnRzU74M3gGsJJZ3ZFi5LPcTDPxyuBuocc
+Ln0qsyjUcYJiVe3lVbbZfPXrmxHYpBW72DvaZXMdTDRLdM6XZgXouRYQRAhdqvgN
+qvuxNHjEgGpXkMH2sXMNXmEBp2hXznZjTLidFvKjA56KywRwiwc5DvemwU6k5bYb
+oaF6ZJo58ImmIwDmXjaU/I6yoltoHGkTRzP2omGsNAHqDAjUesNP7/NSjghF9MWF
+WCtkfMmm2qk2nPUupSekSaYYbqxvMLi8Pslwutr8+OUsTeRXW9DqDOkneQ96DRgr
+LhfgG9604wzZ132s49nrHukG9nlgaDbcLW7JrGZugdxzRkFgBEeoqxbPQ+EF77W0
+Y5ZMmQlWSbu+OmQteCaP2X30n4oy+HwtCUF15LDEq96Wp83I3bzHIc9svawDVxCs
+ZLEZ1e1IaXG35MDjACyNxFcCh+D6QBwv4D1FXAn0kkDkUak5E1j1cl70E+kMlBFm
+GrO+QgvcAmM3u6gngXCiM2RONUFLBVRZtYvlksnwGcbLm8XJ+TUhyr2sF5JaNFA8
+mE7u9o/MXRiBN3M4rInNhrPjnp7tQpLMs+dwUWrNfWioiMXd2vCjVXG1ysw0bJ1g
+n3VJU2b4QBhJ+MB/ITkM0BbeOsaxCpO8kYoiMywpzD7GCVaOfBV2tAzGiJfLftJa
+aDB4kYiTe9NyxPIA9ngCWldlXu7r0ltBLHrT8kVC4L6eB21ayoyGkg9btwj85Dqc
+OgNvz8OEhjr26TSUV+k5VAHGQ2/+9HXDNyHm9JMwicX3IOiBr64EvJTjLdMxScbV
+oc9DibdaV0QtR5dTSnBZo8p0HgyVrXlJf4wjyt2OXglTofiYVs2td2hNdjus+sOt
+w2JMTi3pd/Vagwwt/YaTVQcV0BuLJSMOKJawiew8MRfL6YGMsgBRPsRIca9OtBN5
+UcT4WveAydaQVpQMBAR80VlHtkxHXW8PY7tCXWpGUTlDaEOcvScK1cYwDEZ0TRBM
+bMww2gu5US4DnZV9oVr020C15GEJXY3pYN4HzcSAZ2u2XFK5Yb/Z6GW5tfLOgrEb
+VWPzFjUigqY+MXBucIhW0bNiEotIxHIjN1tMLq5sQtAOWKsrZXvcrRNd6TDOoZIX
+fgSHLK57YkjxkQeCU/tmURZ67UAHnSsfwC2qWy5vJsTRk6pa56Lw/eTQ/rgdHxYr
+maWFZJmdN88tVg00Wn5a5fums8WufYQGzfq2TSOn87V19+C/m0+76WFpw/N766Nx
+uh3hWzI5HEMp9yp2pHiwMoWk1MQTG+9MCu/XAb9FmaTWwV4kR0LceEXDuetFyodx
+CYTHQoxbAoPatEYhlWDphRuACaDssBKBoQP9gXVe4u+96NfQu0AXOjlYK6Qzg4NQ
+g+HMQ7ame9xeofQ8HLsG0pGtvQXFXYF572qJXbY7PuC0rorFnnEnO7X9OjYN2BEI
+zGL247QBJRBvlhuZ80eROG5ygsYeLvPRl4r5ZG8ESuJpyaTKXNi1cjy0YrH2nL7B
+F9NuEnpjRxK+D6goBlZwNRjQNanfP/kPR4vhQISA8SMMcx4RBIG/pWZJNQGBCsNx
+R6MVfjNlUquAdD29bdt9shbiXzlvwyKnGnNNMe/LG1G32uZ5h0E8aW7AzQIccAM2
+VBngGcq6M6x/tlnN61GJMfwcwIARepeY0CrxesWzo7TayGg/zA5h4ZjhdLIplInL
+9ZoUSJV0kCRu9zNtFMry34FAmTARJOCaq5aiS3wUI1lKVPoeQOPiVxdntTMstdbb
+cU1qFjI+pGqCvblIbFCcLcgD+Wl1EUY4lQ63czho4oB2KS46lFEKQS+lEXy22RAJ
+ipEJrMhTgbGlGWlrSH1K0Ajgi0eqX3n4XmqqK1s5eUq9zRkiDyDO8jHwJFYGF9jU
+3BGTTw4f0qxPvFgEhiuvdel0KRWTXDT8v4rA6noguJZqYr9CCN2nsiJEhrh0idj6
+wS+/2XRtCHvIw2h9l0N5U5mTIPk0LcpA7JFaoV+LF07yumnyP/enG044hyIkyhzg
+AARvLZKSCoaGAoOeCdVBVn19wmYAzF8wwJm/29/lV42UfQ+BZwIFoXIw2JZECWv4
+Ua0iASC5iU2hmK9RCegGqqXOcXGF5dinsURsUdYk/sEUrjCnCoKGxCkrP684YLHj
+BMryqTruMW1HxlqEPWkXY3oIA4ATok9wxuDSca7JvQ9lHiUjrUu11S0NSpGrKGDR
+3W3ktp1YdSSn0kxK4La4KNfEvMwIHWYlgnLoZbBLiTBPyQfclRuukIZRZP3BsbKe
+/Bt0YAnHZTB5+elApR6OWucsqoQzAzX/76b1fm5XpJwGdX67R9+QFl+djHHQwovT
+2T1Ar3TtTQK4Wu3I3aX1A2luS7J0o8NEYv1LqFNv49Bukisrj2Wc9ty5irxbwlXI
+WkDZ9unGF9UrHHqMnNQEQC+F0keanH5T9Ndn2psdFgMzcI3Qw5UJq8P4xN0s41vk
+HPiDMqW8AgoUROrMl8Q2AAO0oXQbRFO3HShb4P3AGHKhEAyfhjimOJarRa5AzCLN
+pY2plG3xY1p40o2H+dfrIPlUMC9U3CAg3cyChcHfH+MdTlZT4IpuP+jb+gUvX0v8
+NIfcGbnssozr1rHm4kI0qMjnl26aRMJsvRjgUzZBThG4due2TY1QRxq6WkVMZx3+
+kFdfF+2ghRzappAcPAoRJWfe8HysSuERlRpIAEj6MbYoHhmqxlsNNMmK02aPBFgU
+QXx5YM8BchLBrM6G6sPwNHADLgyhV+Nmw32tzd94k38g5KYm5FJmY/BPuJUzWyFm
+o6CqYuFbGMLz45KHWAux6DG/YoesvSScdQ8PpiTtdq0ZaiDxwMf5cbq0frPuSbpU
+kCHxfeuaZYWVtfECTYW0yoSGIzsiETpbIcLC0kFMVNRRp+D1lxWm5LRxCUOitztr
+V9L9ys6Fa+K9qpEoPx4sYnWfJNOtDqynWLKy1kzuDQ7ianabD3sn1tlYQmb0OnQV
+5t2sMBYpiXNUiE6LYTJdFSZexNNe2nJpj05EDYe+07yIKIR9CngfgLVb0MZUFGT9
+rF1vIR2uRO2qIrGwAXCrp6OArtvvcNNkyZvCxtFVby1XBsmZDYZwDqB2N3VPTJ9O
+T2UZdapuo3EPWwfF3XAxFC6wx7RVmoc2/eSl2OksCf7k5+/8uX6EZb3Ge5l13RMO
+bvugWz0V7QHSAosyHNWCI7UZVyZqPoN0uBw2CllOZW/tc15AkCZAZzE0lIy6Rh8T
+QMBbCOfPli4etEw9H1G4oWnfcOOLa+EsTEgPukL0vQGWQFQrPRl4u/DW+LnwHp+6
+Yna6Yvhce8ModpwuUrVfjhT4BqVspy4f2jqXW+f+wiPTKgxCL/xtnqWXhw9nGxsg
+UnPjdvXS0uvDWLnavOyN2B2iTKNeY0aGXlVZweVyT0IFWFPlQ3omnlAy4C6Gy1wi
+eb7aJYG3r08+r/rNbyFbbyixQhMmkrlNZMfWIKKrS0ilascW2a2+4jyf6r5y7tbS
+aNdYclqq51pSALhYLq+AwZsGcmYsqsgARUa2L5qlEMruCQCTsGX3Y21oCIgFn8Rt
+LY38Y2c7w9/tcqghqnQ4MPMDBZzrz0QUXvsl2d08UG4jqd9j9aKqeslZmpY4/Vx3
+tc1j4ug4IlQDeM4QNvep8A073WBg5l5C/sq+npUKFe//n9Th8FqUc1miGQ5jfgDu
+UYc4e6Q3M++fsU6z8k2fxhBCN9r/7QRuGGiOUTia7mXN8BWeNmXdRWnn+9UNgkg9
+eYFLvopLpmpzlDp7Vfmhs4d8DuZZ7OOqm8CLqNGMMuderaHmRVnp+BrTfMgT/FgW
+OJRM1+A3AiOjoL2nFblGikOs93Cpm3lIV9Wikt2Cdo/phcgTOkfU58XH51kkNc9I
+5Iodbno6ECzPjezfWkI03W9lC8raZRnPy/lGfgoVfM4Z8GTSWoUiTAEQAxenD4TM
+RzgNo7HjNGSXF2P/1pKGvxvYg5WgSSAoN8KOYuiXKYuF3GGPC+clrG9iKEOuepyO
+DU3s/cChT4xEf1LZMHSSQxj+qt/MxllBYJtN9gIV9EtCZhinycz5/nB1S3NH2ZZh
+H/WlulD9aUe2C+6hMl90MXldLR1sYbdTSIu9Vx7Hc1niItVV3RA7Oafp7Geogiys
+/cCOVTG0FsAewuoGywB1nhfR7RrCZW1aJCj2sFbuAWXlAF4MXFZWIOpHCtadxjMI
+0250LJtlbzQIP2h7r5nBVZpO6dDFSrUhCGJCeiC7FlXvaAtPIDLM9lPWmKUTXDkb
+ltlkTm5k1WLz8sqYR3M5XNSCWi9HO4yt8rAqassANG/U+pZPT3Th8ZWIdZFH68+i
+owaIunIplp8mtKnBWZeqkBY+l3OhLGQMOXbp5sYYRfi0L6lUMRmFh+iZVVTvOltQ
+Gy6ONVFlA/WkL5o7WQCO5Fo6mtI/Z8plxIQVhimdKmD9tGh613DeMbs+tZLYvSnT
+RvUfGTjCHOhO125qxE8VLmoIR2ov08mJI9kAZ1WIoBHsN3iHtkb2krZBoqyqmP7S
+URjHBkrPz7XBWgNpB8AH1Y+kkrVVzMy0y0GhiCedt6+sj7quV7cyL4gz4YZ+9ogN
+i7hTnkGHiZ7usnCUCi1WumOyT0DEioIAQ84VQEs2NkQsVFzKzNAiLXuYfCS4aDKJ
+QjGZeOJRJTQod5Ic/dpUPiAEbPRiupc0uoPNOyGDrtL+dAk5cCeS5ipD8cHep5uI
+U2UgCniklZ3zmtCgNCWdBY98An7QJVQK2SW1u6oZ107vyrHJpxUfkHkBQM4qDc+B
+nyNpaPhsYdrUmw06zmobWwVtuju16wa/diuG1IytfVkQVeVN8fcoakOY0wCUwSv5
+J+JFNAOTvR6Bd5x8FHynk4BYH3TYJcSNqATjWvEBgsnSnFaUmCwZzfpOBZ2d7r8h
+/UNGKBr24qJtUBIlcG6s4er2fqCMv7X6FRGvWL0VpcJF28G2CuAIca48mn7n0KHR
+iMmgJTq0x8KtXXCQ9RJdSYQsmJb02a2Qepub+YtE4K2+filsECCS5d2znpzoDImB
+VSlrQzesNX0cysQTTpij8D450MdhY45UE4PjseMKW0yrXjt/Hhrw7SzOnQJHanR6
++lvTsZuECNcxd1PIn4hwtFOn6roVTywdJ1Z8ihh0X0cRnhnnuSrJ2QfrHDJ5ADDY
+BbXPThxCdXrgyJ/Yu2FGYYoAFuRUVeC1evc+LWImT9+QjkUo11HCWTQUCxkLYxwq
+YDAUQPlT4oLPkwCNkHbiQizz5MOKdopmhrndFAtnZjCrwyBonjBqPfm+nXgx1toF
++9dtCb5KufSSkxih0TMD1ZkdHv6ZXwpRKtWMcqobKgwnMfbGR4PvqXQBAOgc+hAq
+Tjei2GM2iYtHfMyiOFBwdmJEAx72Iesop95AJzYT8KJoEHtLAq0vaJAPbH7chuYb
+TYL4YHPDURAi6EB0I5SKAqmaI9/ZWBl+Uuy0tdgxcVVUnHURgUQjLgjkWDaFnGMR
+V9UW4+WBmttTL13VDy4wAUkUqihS89sZdKScQXYp7oCvBCfelfOGX8SwA38dVJPf
+IHK4WobwClzxv7gW1SbpYuyXIzDJxNW0vC00ljNJQkVPa88owbgA3E3jh+JhGqgM
+zCrwPV3wdqkhwx+YolHTpgVvqef976g2BNjK14Gv+xR9QMg0T39dYLqpsNnkLsvD
+YVuc6yIBXM069rn0UcCnj+L4uHYNQ+wmTNNASMHCboCsmGrPEaOASMM2NiwfPGY+
+CccCV/bxafAy2dDvZ0ay7yFbxIeqnlwDRdeOMfHnIMSp+XZjR9s5xAjf4wKdKI7X
+rgsZ2YmOPaV44wqcPbDlLfKU5JFtUAiY0qZscLyabmS89gfWlZxNisbHEEUZ6glw
+drVAzelWB9WbG4AEubbnxo3Eq5nOb+mnwHRrlq23aeD2jeJAe/k/G/h4o99sEAjc
+jpxBcbC8fSzabBgMKAQORg/tv95/UL1cXATR39YAV253S1UNxWVhqWu7yUJ3uw+5
+rPaoih4V0PoHHPaT7CNglEOzBTJIWsvWquWklQKkfR34gL/ygQGH5e8eNG/8gC1D
+TwotqXsYZd7MWVHU6SC2eqOQT+YLYZ4Rw4m+tOEOREY3Dx7jLjreJa1W4FN6fIrW
+bG/A0A7tLvfQ4T4Wn1yQxALFaC0ErM+QCm1QTq7OiKEmuRN+WpJ5e4Rf3RP+gKfu
+Rha3NqIVk/wSCijM4Wp5Uh9izvA261cfHhO3y9BSsShMI0y9FWYVDGgjyIiP9W6h
+IpnJ/iGX6FGCsafzlwJ5Hd1VBtX+zT02UqTgAC8cJd+UeYsQMy1BUwD2xi74vjQ9
+S1TzpIaHqqI3m8Yh79ubsSc2jdUQYplGIsN1uZ057T7MJW0M/HR5fz45wlDNcNZj
+IxVARl3D4g6Sp+5Y8otkREvCvO+nWQ4NPqZSTskduPd0WHv3KsBvdzK2tlDle1v5
+ALLcMOU/wsxsaHGcrtXXlgVSRWmBpc4shZwNQwNaeeIcFc6pATxqFaWZjADcjtHf
+r5ved4PkNBugXnxwjKaAN4bXj0vZ1XgtFHf9DJeJreIRhyDoVnbEp6IACho765Ar
+8MaMoSAV55Z55e/SbrA2A57FK4GkMiTAoIkulveHcXh0pJNrbo11AXzcQ67eiq9g
+ejAPtBOE9UTeZP8ffRIOjFUwDBBKU+c971E0TSALBvRYETKImCnQG1mzq/2U48BQ
+pBHiRTWlzYAzl0jLoJbwIOMx4N5lTiVsonNsOfIvFvXuZjjwuoQ+8IdRXugNdVTx
+ParjqZSMu4N5Mdwlr52jFsee2oNetU7hMfm7vZjGtTNb/OwrggIjYTVdfc0to4sK
+ouUd8mRatDDAxaRzi4PNnQM8S/RcxROWJl8bDnFsTu+npXNS0xjwlk/MbeKxLG8J
+jLxFV8rAARUDac6W0BeuskAnFOQ14Hjan6X0k6eF38G06MkMgctepijDV3drwL1b
+N6noqaL3PQ4CV+pAxYjzWl01srvibfnMGPiPwdfXcNnboajD9KoSevB5Fc4p1iCS
+8Ti0i6Tps70Jb56OtgsdhSOVjGqASyE3TLlHkSv31KFPlaangQeDnLOxXa2ZLKBR
+Cka7WmNVUGR3RrcaKCWnwM5xPvrq6p4ttT67rSj8YgPsqtQqsPVObiZ6Z5XV0alo
+mP5qxnb04+2fkl0gpk70HMvgxUUG6ASl53YCR7f4IJGo1ou9RVzu3lvv3YMK04J1
+HqvDPGozuc2LSrY4c+zgWsX6PoY/jYRDOMBKfgS5riLcaoE8Z5ml3DG0+pDUZKN0
+2JTK2lVuaBe3OlzdPol/VJxFrUbR/nqKyS40A36M0ozN3riEd1KsKT88xojsKkbS
+xJlGP+MJ40Da4Vgj1sXtKXYQD5f5aCNeaUen3aCpdL1VBLv1baOJ0ZcC0zdIv/Ne
+SGjA5C9glFVbtkU4ulttyDAuZ0dxz/hbKVvjm5b49q7x0mp5nlwUWz5a9MaWIFtB
+XOa9gaFRlzNk7CZ43eq9aFHW9Sa2unTovQ2kAgEB4UKEdCnWdm4x4KiQi1E+qZgm
+WWr6QD1CgXOWZ9dTLRkwdt1sR0EkF6D5SS6ca8Iy3qH/2P9peSUgucDbbF52ACm1
+Fiuki5Y6VvGg3ckrNzd01jTJrGipSIYtRQAudCVu2JJog96norbOS8H9mL5iSBtZ
+46G4NbJRKURHIqMEJevkMmqHoQibxtvUioM77bI9Aw5T3fm4g5qNJaI3H7R5ggkD
+ZeLLPViwA/6/WCDe5qKY1pCI0GaTsnanvQsLBHMu5xweRXZ3Fo8ZetrKkCBMh6Ss
+iuJkmrNCQr1zYQNluI99JhaWJhPKyruKInVWx1YEIp1FpvUQS88kDbGP+pfZpI1K
+iLKvRp35FBfw6oxHAOVkor/RTPDJoiB9XD5Lx2WaLBzHGMdr5d56wXSC77hNsL4M
+UEYZuHDxVsjKjE3XMVd8jpHlan0lo8zN/Zgz7jFK0UUH5WFWcD3VQqY2sWoEuryb
+1vv5ebwt7OdSaskpCUem2U86q4lwVZgFmGrTEZ+CJSTlX0DM654OLJ7YFCCI0DkM
+YLekuqGNEeu7J8tKLj0ke8gxckWdVQJpJRWwZdAkiEYi2iQiBg75qbxcR0rU8IWy
+e4PcsCD9wCxBnzGsEVdY6rDytE6QSWrjy2grBCkELD0GLYdcScZPLjPpZwXVglzg
+Y/XzGNG6FQcGuYXAvNJJDxzijYl+icgQilgDezAKL9KGIQJp8tJYBZ+LPVb4GGqz
+NmIgVcpnMiOEWaHFVu20ttRwMQuWHiXoy4NXbjwE8PoS+EFHvsQaY5NAP5l4mouO
+8yn3gBpYOZco0tW5P4g+OSmHJeatcavxOumNFrlxWfWuE9d9PhU0oRzAH/PpjUc4
+9BoxX8RsxHYGfdaNjc7zbh1zZmsYwD3yyk1vBJPmZ/HA0q74QBeRxjUPKrp1qXEs
+KpL1xYvWxe/z2+k/d1/aVBkHJp4RyQ17nkeKdg7UDqTE/vCp7dLYYfAlBdce15jr
+Y7l0t4BiXdrLySEJ8wS55bU1j6d1lWuWvSEJLpLyMkKmSxc2gFbNAZXUddQtcIrL
+WJDrPaxQRHRcEfrg6GXr9qRbagYTVKxFhH2m7aazMpgzbZ88Yr/tY7aWG03n8R5i
+svbK2ZctndbBgBvOjd6kK90AOQX7jgGxslSiO5mRPSE/008gsFgK3q9LVaoO94Da
+N4l9rmWyq6bgrn4mO+jqWiDH3jSKA9Wa70M7tm921bwuiIhMiZWrWaspiJVCcNEc
+IiTyOxZRuRp0/C1GJUBkkbAOO4onIegKDJKV+00gxtm/iL4PElaVQxpGqaYhhm6r
+e1JwU+5LXrPkqs2ke3/YugySkdVjW1piJJAC7DiUXpHG1KFNZ8nH1kDahulwhjT/
+A1twh7nS9bznxXGI4tRSSPllOKlGxVoV2OpaboHHPoyZUAUMphVkP6C5x0hdRwfD
+WyX1p8144R+NQyfcJTFIHzm01VdgjAYmxD6OSFcapjNiY+rlcrAWIZx4mlsUS8zC
+cCvTqmuA6w00t798ORCDISrbRr1ugcWM3o6Ej/PjdDHD1CQlSklPKioblj/Rhi3Z
+6QND5pGy6haNaIZ3UTFo8mBtNs89zpu73RdbFScMHIFeiPywp1330hAAdvBCxuZZ
+tY26oYqPyI1RQhh79MOqxBYnnUPlTVyhZ1yQu0/Hm+t7gYDJc5TNRZChU+pM+TRT
+HJyBx+Z/0+8S+JdVADSvgwLfZRnqJpzuB/cCmGYZfVz5WBwhagJ7yrbuU2CnW4rx
+d1iWXt45M6A/Ze7cYMIYXOrjj1YdhmEYoiH/KTMytqNMTxucHF6LTKOCeLw1IKaF
+DzVbAJGisOntoMRa7QzbADutrKoPwL8HxAOv7awpUSkRwKnH1OctXItB6TUzvCBv
+z7xTmRT8+ziB1JvbEE79PJuDMUMJi+Tw0t2XNZ0TJBaskFRU0x4hZEGrxEhuGV1j
+eyHxjJZ8qQVDHj55RJ7GHh3ZCq3DAoBKFRWAaKCQKaV+bxnqKHjeq0k97Aal8W9l
+BgIT5nc3DdWjhlLYtN0tJabRywRjeMBzYpMXWvSmeJp40h4lJ6ip6Pkki+5ueTKV
+t6j4s3VfBRhlb7cHuxfZQl1qf2PtaE4D8pYPT3Q/ctdLCNRipZ1ozCpCLGP2Kdsg
+K0ApbP+MN8nJlmIfaOPIh8sSw78h+8zkmKzgdHYXzlkvY+9Bs2UDpgyBMPQ7jjIy
+OoKX1kIykcLSQeFKZD043Is2Uc/6KVoIunPkAAL5plYunompQwWT1GrGhMXf3xJm
+kDuKmC24+sgrQmS8MHB5gENHe4egtaD9SztywastMTgQdmWaqK0yYlnjrn8oDmta
+D9rrQOpBs5MLXlZUwP5AUw0hT+zhksJsA408dN249Amzj+QYPISAomf5tgwR5xuJ
+TGRDY0RwdukRFyTcUqv7xiGqAZYEW3ccKBc2GzxQR4yuL8so9BgOS0QjYfs7S4Sh
+lFXpZojkzGJSA9kuV2YIczz1amwZ0Sd7R29hLaBKcp9Ac+9QuTmZj2eOl3jlrM+a
+AirH6zJIjTjSd9o0Vgz4sV/D3SAYboqSAaHEyMhJotzPAqbNiopkoF6I1obTZXMB
+UJGWrBrIYoeDm0llfUwwYhSe2LR6IXeMboTC/cLvwdvyI860XXACF1KthtKpks8r
+SuY4wnYsfu+4UGsiQh47RL/sPDxE+RPEq1o7IwRsrHnsZgNQE+GMqJrAa3KSK7pQ
+BfbQ9ATMckqRbH+DWpB3j85rJMztqkcfSqmyNAVQqCIwH2CtfVlVCQjKS6f3O4Ix
+QR39pI5v0yyYn2xbaDOzhrR042rEYZjKm40MBxF1kJiu+t3eX8bHec89gGulNPmu
+nciXwuM8L6yOybkbdSlAqJ1aIbc7HBryYqzyUuuS/HBe2pfFEnXhTDywmHjHQPCr
+L8Kleu5ZOprm/c55QOjzepo6rf7TrULw2XayslA+4lY9HY5zRA8KWo528YqibZwZ
+EWSfdG04MXF3gySlN9KcQPsUVcDf0HT7cusErZpz52ajaKEF0PxD333gHbFQHkwU
+BWKgIhZDRlkbmqa8fU0z3xo+QHn1W6LOnNTlNxpwW83SDTxQdg6ptezj3KUA5m9g
+Y9CLy9h6T/E41t4OmuNIm+aC+DRmnc61gKSn3iKuEUJHmWTPTUOAkidjmEF+w7N0
+q8zlU6DtssmO4K7Eio6C2UCwpIPdO8veQjpyilAIbc4VNiRuRe0WyYQvsGVFnX0R
+RZl5gqsn44nROLkGGmOJB4LqogygfVndWvazwcxpbCi1dJLdQXYFg5EvJTZBo5Tb
+dQmXOk85Rtl6LHI+V4+vruPxEqhQP1LZo3hliIrQo7knMtsDxle7TJHcYo6QZ1qe
+GQyhh4vA8QID8LuN3ssm3xTdouNnEs78aBYBmgG1aol2T4GaAxlTnecSFXiFlpS2
+kCmTQCSHCv3hx7WKu21gXws6XUKsVHJi0feUUks2It2PcTdhVKcVFrJV09otFEbW
++686dYAxoBnySn35J+CDWauzoImF00Z5jeouTT22HMXskjvkNCKikLXSXMQuTldR
+qANgJoiPY0nRH2gcz3LULMxMK2n9BhkBi3r7z2m6UE6wxyA2Q6XTB8vapuoIsPLt
+C5uGsxmDNsjPGZfSQiEXB8XypewxVztlYZEu4+EnqQq0VqyQXdu1JJfP4YiRG9QB
+AdffOLipG2CEtAB+rJB9fA6O1/4FI2RKbweHzuSRHgqsLws4j52QJwlSOKhvAnFE
+ZCAQTrwFa/VSBwyT2o5RCMy6kG7Zq6J4CAIwJdFDKF8aI/zqUhRxHNoECwOrNwrc
+cnaTNecat8JLmnl4Cx4AOZ5NBqUulR38/LoaWq6ZfbSjVI+Oic1zP5KzkZLbOVzy
+a9GpPhthm+XDDIpASmwg+bu8rTYuWm1QtTBUaGnuN+3a7B7nIS0tTixsvqpA8M3W
+8flJYLPJytAszMXBShviTQzgUNgZBJglNrFpeUznHFpE8A5gGVBw6xLvqUeMuzsi
+aYi0VHi79XsitqZe6oMCCxZHyjvlVhbFax3KNY6+gj8YEnRjg0vlMM6T5M2+0BPq
+9qA9GE9yv9FLVZzbr3owUC9hIqxIaHl1//nX7FBZYBzxA0AJOLyN1xZo4G5JaCDO
+qd676k4j/QP2jmqL0kPuNl/MPi6kZzyQs7LwhmqdpIgI6ZEYurPGwhgwD4ZbEQ5C
+2hy0sAA7Ehbwp8IaZXl4a6wqMmGsurCuJWm9cWjMux0fFvcKWzaX2e32c/t7S1g7
+WTus7wXb5238QbU3Jmuser4udlv7XXvr9LC0FLy3jh+nszZVvJov03K1FlymDSaV
+K1wmk23VVZHKie9zbmPW9Ge1UAyh7kcZybKY4epbbgwuyjq1H6lwijAOXVtiwIMQ
+7fePdR3jnhRBPv+usrZMc3ClIqhjnXuumrpWIWlRMoJQTnNhPvP2oWqArfhU2l3+
+W+wzEzG8aZihUS9EnWDTJIADMsg5b5BcWUtCfZCUgLxm+eHxA/iViG+ulDN+5bSU
+fIC41tw5KVHtPV0/O8fNfLprUelFvJ/osq8LZEuNEQPT2XlvZUoKd8aQzxjY/2sh
+yw9VLab6aMdkn46ab4pNKQfVDrKC2U1V+H/AwbGpuEExgIE/0NJIdJUzm0AQ9cjm
+GsrWVe8Q/PTLkIQnrFHGfvdEIEpedN5UC+u/GoY0HHk1mdLxXoyBwGm0syLy3DF+
+qFF8duIYmENyRhX2kCeLIBpBfDIAwtA2fMlGdPOK9Aco6vzCNSGA3WGTq2sHSyPJ
+3H5huSyVZi1vcq3un/H8PN/U2dJOyreizbsWqk0daSWN1KEsMCTEwF20lwKXbcoc
+fN4PIOTyIc3Igs5WDe1qVdKhzbUbU9afl2DAcSphP7Wb1a6p48wYQYDbBIqEKhcI
+eAwegAVZJwLH1DD9BosYOzwz6hYIHHKMHut6yFA6Od5mDpDTzQpvgDZmMQS/l5BF
+5KXU5NNo8In3d0OBiQ1/dIuZh6FDBbBU9PjYU3xVLX5VGpsCZwulZ7bYdK5PJ3Mu
+0eY1pV6OHBLrIb2B8hkaA2tlr0v6wxpSOecN6J2xkLAGjgGAB3wKqIaaStshixhR
+MHumDl6iYBlqkf7q/mCumuhS17PEIFgjW3uBUoFQI+Sr840/WMoOwJnsFktjrHKL
+6FYHelJabokt0qvZHhpCeQRdmHifv6hJ8yhl7ApuQTHRn6dFaSM8ycazHcnwXoMg
+z8A6F9svh7Skc3VtsdoPddpcB3F7NcoxRjE89PC/41Mtc4OloSsDNXuEVeVGOC3M
+AQNqzFkSFocLANCVb5R9Ppfs8upQOhiSyv7YtXmPaUnC7ooyzYYHWrNYnczBLgA4
+wlUsmXTuUlmLJEbd2OWKQAZvUXOHLQb0zDc4+AZDgW+Eh9TpsG19sIu8Y2OtmgbJ
+jKDqIFuRDk7grq5ftEui7q1th61ytY/NXZItKnzumrihLYqdcKMHrVoVTtrDJt3G
+Z3Pr1RgenOLrm/Zy3R+D6E/ixlXsjFlMlL3OMUDnhCorfuLIUBrN2y4iGtNmeDPa
+A87gUHs+Bp2QaA7SPlyPz+0UgfcomYKpE7UC5B8xgNMWXkXoUHk+J0bjuLgZQpAt
+yZF78FNDWmieA2kPPIO2EjKa6kBGeP/Exuo2xFoYx+Vsn3vwxnsrK9uO107Zani8
+NOUyT75Csh5o5xsbKdhocZn3VikGIHa5uyWA6KZhLNGlMzmimBjlQASDK9cuToWB
+/o6fwjozX/qWwhTZNFTZv7nbRBXhgRTkCAVJmx4eOctHXyjap0PaFJz36QY2Wkx9
+Z5Az0lFgLOgpCGjgrkwPpHEFoPXhLIvNpaXLkJykuYj1RVdUD0GXX4dS53/JFgCC
+MIpiORR95YMHWha+UTH8YulnFdwPcr03arSgdaYwCla0hu+1WBnGk90oXR05Hz9X
+0PkaDlnpYH+6D63vG91jv+la+tC6ZGT3XjHWCp4AekYjcA+LMzULxFKIcfTM7YSh
+OAao2Gep92GxGeqCynu5nURh9y87viRzlVK8ji2EaWazsaMEC5fCYie3SxbXtG5I
+fU7KVxqyyYT2HoJEp6FgBoGTX+4j6s7HPi/nBXnlsutld83PjUosmRLLAxYdmv+K
+NtSR2XNr7Ohut7Gc02Oq9urz/XZrz/4ciR8n9cjSnWaKUWY6swdD37Vf2do4eqSF
+3RuYG70mbFlf6Q3DUvElJSnu6F6Ao2eSdoKHsPFlU+PKL/G6Sn0I3S/vTyQS0In5
+WVY7IL6KZ/SgtY1wQn2D+K+RRAcxzCcNKcEAed2UH964Ue3RGTi8NR0QCg0YzYkJ
+EYTigi/ZO6SrboFHhclz1ppGngVlAiW4/903RvpGHURuYEtTOqVQvHvIbggVFLYn
+BnmXcSGDvefnzi83zYXSG3kFF7V2vlNpFgLbAAKxNxZwSifFRDdmB479xrGtEWVC
+wmsC/xSfJjZ79x9Yx8l65lLD81xdzzA3/fCcRm4nAoUxvxbOuN9RmZRZuRA0X0Y+
+4cbi5awnGDvItLrCN8MmBcT6bknNexcqxRIvAKEKRxKtqhFvtAiko/FYx2D9Ggo0
+avvGq1ZCRDjIGCbFmafYxE4YWgtCwFa3MUZ0FPnM7UV5AqAvhqCoM2HIipUvk02o
+cnjO7YGPbdKQdoriL66DRmdHVd+zckPN2ar6016rWl50/kg9mbrcWIQFjIDh+ybL
+CiFzvOg59nkTfbjNMUyUga2UAiAeXpMo7UyIlDzj8qNbSFd/t/uSNyUF6WtvC+ty
+Z7N4J1RMOaW327nugnZM2ktu2G62s8eZHrujIJVWeCysn2Ahn2YNyE0Sbzb+Rx8E
+IPU0NSBZhJipyqZIIGse1RoLWVPNxDwfK/8skhakhwpIHyh2qJ3heKzhX8OAjt8p
++S5UQEaxUnO0KfYj2nxd0rbViASMZ1eEIKCzs1bg8XnUS2URyvcRYRNiqvPYciks
+9b8u1RJzv5pwaf9+svpCh/Io2U1pTcSDHbLCInSssPe7SKAd7+uQzhw0TdKtRZOG
+swsnJd9mKKE1DfqVU4WBcUs8kMCGTNOESQA6ZaBR2GeQbtUeU25NWU5u8cW6rz89
+q3egoHTNhfjlAgfDOcTPPMVqKiMprwFXYAsgz6m5/LKiN4hmrRP6MHXMg64q+252
+4cvK2taCDhC4uQUW7ikDHhNCibS6XXtlI2G5B6Lr2Gu46RtVd2t/avnreolDi52B
+VVKmEHmutj4DhHQum9YkVGdeWMIIZN2vps6EbUXrrVUlDJWgMKlkGSpXV8SllEhA
+cCzaieRLyW2AJq+Jc7mCII9AQnKvt0pBbch7gEUdhSuRYDdS79exciQXFThC5lgA
+/B/01YKxOBFXLv9yYL5bCo1sNtbrRQBdl05TROmE4eJmrjd9snesVArKX4iuuisT
+lYgXiF0+jKmCSLtjdfWOYBFh8a8uDehptW1C8I1uSe8p7mGty2M+O87n9ZiI3MRI
+rWH1tRimJRaFwH8ZMY5w9atJ2/jtgvZzgweaQSDFR1pYrmEveX7dczTlQ+feFwIa
+OooTbB0NZ8DKlE+GLKkjLPlgXEpncs+t3pZ2fpMTJzzDpZCPDIpB7woLPUtAyxBv
+XU9J4BjVo5dzjNRW9U8GLrCUWowuSPSjGuQu3MyQIg6cwksymlFWVazmK4b7nVb/
+ZhNanF9Mu4aKg82x+Gt6/OF1bsZPjDC5JNXGhlOOG7gRRLSNdI3PTvinVZSHZBD0
+e7doxx2GZPXCbVi55iYseN+j5GTlBZDyNHObm2bfk6iA/ZEwuqQvo7kUuWhsT7wN
+BHU6wGjP0vBMZf+DVYZqubJAaP37rLdyOmBBd2RGgVIUdOYPZR+alMKpsgegH99L
+0LMz+g6H+au3yZTfJSXb5tKoSCJakRJG0Z2TaSQPB50MGwUJ83CCgxOsXXCWqgT2
+DwXuLEekQcyoZ5/C0XN+7Zg6WOVRFNxwP8kJx50oA5EKTttbpNudvdRi92q7+Wd/
+5+OvffTLf/iDj7/4/T/68e99sdt9/af+79/46A/+6f/8+v/6r//ib37/T/7V97/7
+xz/373/w7u/+x9/86A/+0/0/+Psf/cL/+YVP/tq//O/f/e4//g+/8ds/+lo84OMf
+/dbmT3/2h9/yB3z/r/zKH//Op//je3/7zU//zPFr//vffPa1z//LP//oX//iz//V
+3/nrf+9PPvnd+d/+u9/4xo//1j/5y9/6b/8P
+=8gcy
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/data-files/testVerifyFileNormalSignedData.asc	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,292 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+owG9eT2rbFt2XVuNHRxwoMCpKYMzb15iMAZhjJAs9ED9kGmuHDja75x6925Rp+p0
+1a6LHShwZowDBwIlxh+g1IFTg3EHzpxKgWJHAv0BZV5zfMw5V937aPlJV0H3u+ec
+qr3Xmh9jjDnmf/jbP/7RL/3yz//gT/7s93/+/Pw3/tvPf/7t392Pt/13jtftu3/9
+G9vp+M3l+rqefrq9Px9ffn3d19/84z/88W9drsfXw/Z2u78eXi6ny/Vw2/bD+nrc
+l8Pz5Xw7Pu/H/X68HtaX7W27PW/n94fjadu/OvzO9nF9vd8Op/vzPv7zdlqfj9d1
+P8T/fXX4tft1/Xbb79fD8b7dXi8vh/X6fD9sL+Pvl9tXh5+sx+fjeb0d1ufn++tt
+PR/eji/Hw3Y+XK7P2/zq/brd9u1n9+NXh3f74Xx8Pnw3jnA7nC/nw/l+fs5XXK7n
+9cpPvdw3vGnJP073etlej+d93Hk8bTl8XK/buEJ94nS8jCtcx/EQmbjO6+F2ed7i
+ret+GWcZ5x3/2r4d3zvuh9f1/Xn87WX87229jmtv4/GH18t5ZGAZX7k9HyMW1+1l
+e76fxndG5L46/Po9Pn+57uv49yUudj7Go+Np6zKCsR+vL+PNx/syHv2M817O47zb
+x+P1uh7GZ0aCvzr89nU93uKFH48nPiICPA5xGx/d1yOi1D72fHkdEbkgQIfj++Ou
+pHwTwRzRec8HKEM/i1O+rrfbergdRx7HqQ4v6xuu/nG8f/zjFDH6afwRkdfNXnmE
+8/10Gie9XV7W0zG+cloO+3Z+3l7u4yz3vf60jlzsx9MJsUE84quvz5fr2/HaTnS7
+nE7b86iul1Evt/X9tu/jPUzaF0nUb39YbzgXXvL0lCd5u9xGhUa0LtdvN0apHZQd
+hWqNDMarb5uL7n56u+/rCGYEeDmso4/GhxGe0zF6iiE9bd+O7KgcX7dI42VcO/uN
+f1ei8cIsJvcHymK7bRno79bnbZxpu6FX1sN4Md7NYkENHk/H7bvj+eVw/XA5P+Mw
+99sI5Yjc7Tie+CHis/qo+ur4kvoKVR13Xl9ZZiOwp4FEt3j27fi6RDKy91ld6Pz1
+cB9dXPCiCC+uQPVopf3tfvq4jb5H1wJ9VMKH8bE7AMC/GCEbT9Rlt7MKdLwrqzgL
++0RcPB9GNbzFZwrQ1lNg0X54f10/bi/rOMA1wvP1KKH3A63QLgSoFR05TiyAOa3j
+qcdo2FFMxyi5iAaeN8I0YZ4q4OkJPbnGfd9GqaoMvhvFgmNWTSnzUTEDZBH3dXzx
+/t5vOCIuH9fROjcX0XfH+/tt3TOLlb+PxzPa5uYvj+bYvv3gD0Z69y3CyGgulRi/
+DJngqSMFQAH3SfUsizdwxY0fN0BIFfplbnf0h7MUwOhS1F8Cfb4BbBy+uw622sY/
+9exIJ/JayVLUBJYJuMk4RlM9cUQU2Bx5WV/RVyjuoLVzJCHT4RvObRMc99XhV0ds
+R9GPGLEgK06vl1OU4pG1MKpin4rTNfCrqhiE+OPldN/f4pMA3TiTqu95wNhtPD8f
+1pm06hmtivN3oBMcTUX5u/fbfmGGhAruLHfJN65jvI4tO85BxRB/VLHzBzTHiOWv
+VgckMRez8BaFCCPYQLX7Ti6q930Ycb4OkNmNgFWU8cHxBaBgIe9roOF9fVkrpvH0
++NB4HK4rUXHYXgcHvWzHSdusliKjwKFfhFaHt+tx3yAcol2jvPmw6IsoFP19HIBF
+kowRpwZufXX4jfvATHz38rJd6v7GCysCcLsLVH9DlcapxEj/bA9AyHCg7qpgtl1Q
+uHTCbXoo+aL97n4a1fS8HSMhi/tEpR2pgdw76yQjgc9DP+71LR05MVjA4OZvIYmK
+Jo6N3BCX9+PrW/BVln6UpEqxoCnIUp1dUMDzAKRZ8vFVk51AbhxfWT9dvh2PIz2D
+Uvi4gR23PRKLhmzgd73vV1ds0Bw4GCXyAPpU3Hjo4pdBeeqFLdAG1FBHRNHqmHyx
+lQeiGEUUNRMXARPoBW/tBK6JbZTCCTQakIu4KJcoXZMcq2RlJ00toMq20ESMDWP+
+x8PlI8vB8gTQ6AfFjXmV7iHTmF/mYeR5DosFbVQisaZnNdEpS4q/CLLoOmw717QQ
+Tyo0D428OMbmjlGNWbwsixXR7tFpqmdhSwQpmyGr6jDFRIRdWSTGJTKoAYsVg2iN
+thIm/vM7FdUqasG1dYXT9l60mHrye4ijzov884sFOMLBUVDLJONCuktBMF5iZerZ
+6KT2RmEwy4T9QfBzBSZ4GBt1fon2NaceE36JmPj20xN/Skgfv7+KS25B+b6Noajz
+8EM0I2RUoV+fDx9Gxj5EeFYw+GlUyirsjdnrHacuXvLOthvvC/z0JOV7pVDlh2Pu
+SiGXJLaoE0cZNBlCAbMwP25ZdQgga526lmXYlEM8LUpnmTCA2VhKjkUWdXgMmghc
+do0T9fT0ZaaskARir9FonWHGDxULlpe6ImqQOP6u8b8FX8IjA/KTRO9PP6GpYDDj
+dt7WJOacmTkrI4SOf0SrzjhAzT+KEzlUU4lI6Eaulpp74lOzfv12fO4cElSpwXxP
+VF+fPU0QaiPtbx8Gru/XVVnrHX4pAU2FV4ySL2Eo+We9kPhO7THeKKTEOAlsN7pk
+dzVAtEQSS88DjcZY9xjzx6QDjmYu9GkcKf2czBKRe8Dj5/v19jin6q0xRsXhg3go
+4KU+DAYL+Wj1pCYdNd6x6d5WdjSVClumS4brhCk2IEHWEUOp5+KmMYYoGj/cfmNN
+qFxN5hmurEO6cQ5RCMINqBYHfBhcUzj5zFC0LPkaB+t8uhKpe6nhElNZRKGPExKr
+bi9U2dPTD79+GIFDWqmL0dGQzX0w8SwxOV+eFajnRkAYIXap47e47tfW4BkDqV1D
+htonzrWgwhJO2a6a7daccCcthKMTnprLRHDLBwGHZ9Pg2aQF203Q0D0yzxz8xNAR
+BHOUjSQ/UNZ0S41jbQI0Uy8GxloTsM6IQKM3cHrMSzUiNNGXF1KtiPEtm3qnxnA2
+u5RIyJBMOdxE33Bw+fpsw+kW8+MvZmkhv9tCVmdKP8t70mvCWHO5CN/0poEzYl/4
+WK8X1D3TTexDYGQ2vNthydzD3CK514zCwBiOWFcjnqfGC+i1smP2SlkIVku7uTps
+LSCTr9V98p+aMvjZvSWE1VHDkq76WJ4xI0/znoa8sPWqDqAgVMlmM6nbVdLi3V4D
+DwDYGkmvJA7R9aE43sl7jrgTiJJg5FmpNRNE9WpexIl8BsmIMI1VX6kFHoFxml3c
+k0Q40xkz55qQpUKq7NolcqlkYIZBeas4Nb8WRMHL+kJSSwYKgglyj39U7tIIfJjD
+aU08PWl2fJFnu4sk6+w1XLRagw9NFbHDrU0/2hXXqyxMw9EJ8VlImjbDJ8JYwif+
+G8lpgI7w9jFOVVjkzVQ0mRFJUfY5Tqhy7Kuoo20wZrwg+0VrqcHoRTJO8KbtiNUB
+4vECtKnKUO73fbaCVPSh5ZuE4H2RB29a2ozGkk9btwn84jqeugIfz+OExjrGdJrK
+q/Ucq4DjIZq/fN30TYQ58yQsYsEehD3ww5UASjnfcnwtkoE6xDxUeOt1RdZydrmk
+hJY1rkzwYKpsz0v+Yx7R7nb2SpoKzceMah69I2ty2mH1Hx4dlmByaUncFbVGGdr6
+jSfrDiqhNxdLQRxULGkTxXlyLrbTQxkVAZJ8yJHivTsxToSiyPG17wGLrSmtJBkE
+CPwiWMe2zERd357WcYW+1MyiAkN4Q1y9Zwr1xjANRnZNEkxuzDjaG7lZLouclZdG
+tey3RWoJYUldzelge0mayQEv1my1pIJh//Tkl9XWCp1FYzerJuYtaUQGzX0S4Dzg
+kK3iZ+UklpHI5UZttpRcXjmEYBywV1fJ9rzbJLrKYdxSJe/6CA/ZXPfCkOYjLwKn
+8c2mLPzaRQ66Vj6EW1a3Xd5KCNBTqtrnkvD9tdP442F926Nk9hGSfQNvXkasBmiM
+/IzKx6ZzxG58RAbN/dsxjZwvt9HdC363nZ+Pb/sYnj9EH63HxxF+JFPDMZXyrGJX
+iYcoU0pKTzy58a6k6H4T8EeURWoT7GVyLMSDVzycQy9KPqx7IjwXYtoSBNSWNUqp
+REsv3QBOAG2HVQhMHYgH9nlJv0fR31PvEl3k5HCtUM4MDyINxjMv1ZrwuFGh8jyA
+XYvoKNbehuKpwNC7XmK37Q4GnNFVudgL7lSnjl/npoE7AoNZzn6aNqgE8s12I2v+
+aBIHJidp7O26vWKpWE9GI0gSH/dKqs2F51GOp1Es0Z7HX9GLZTcZvbkjSd+HVJQD
+K7maDAhNivsX//FoORyYEDh+pGGuI5Ig+LfSLKUmKFBpOD7LaKXfLJk0KqBcT7Tt
+uE/VQv6r5m1a5FJj0BTbS3sj69bbPHQYxZPnBt4swYE3UEO1AV6h7DvD/ueY1VCP
+Tkzg50IGzNBDYlKr5Osdz4nSeiOz/Tg7pIUThtM5plAlrtZrViBd0lGSwO5X2iSU
+7b8TgSphJkjCtVYtTZdgFBNZWlRiD+Bx8YeLs94Zkdro7bymNIsYn1K1wD5cJDUo
+z5bkwfyMukgjXEpH2zketHDAuxSIDmdUQhCltJLPnp6EBM3IJFbUqcjY1oyyNaw+
+LWgM8M0j9a8Qvi811bWtnD2l2eZMkUcQV/kEeAorkwtiap6ICZPD92nWT7xYBkYr
+r/s+6VIpJrto/H8XQdT1InBt1aR+pRB6X8pKEJniEhJx9AMu//Q0tSHtIYQx+q6G
+8qEyj4bk83F3BnKPNAr91rxwkddDk/+VPz1wAhzKkDhzhAMSfLRISSoaGg4MeyZV
+h1j16zM3A2T+hgFg/ml/V18NUsYegs8kClLlcLBtiTLW6KNeRRJAahNbQrFe4xLw
+DVxLk+MChQXs81hitmhrEnywhCvNqYagKXHayg8VRywGTrAsP1XHM6Y9i7F2Y0/Z
+xZwe0gDQhIgJLhjcOg6aHH1o86gY6b53Wz3S4BRBRRGL3j1G7jCJVSC5lGZRgrbF
+TbkW5lVG5DA7EZJDXwa7nIjwlDDg3rXhSmmYRTYfnCvrI74hB1Zw3AaTLz8duNTT
+UZucRZdwZaDn/7vj/f02rig5Ter87Rl9U1r8cDLmQRsvHi/wAFHp3pskcI3asbsr
+64fSPJZk5UaniaT6t1CX3uahYZI7Kx/bOI3cQUW+29NVqFpg2c7p5hfdKxp6gpzc
+BEQvhxIjTU2/Jfr7M+PNgMXEDF4j9XBnwu4wfuJutvEtc078YZlKXhEFGiJN5kth
+G4GB2tC6jaJp2g60LfDLohhqoZAMX4Y4pziVa0SuQcxuzeWNqZVt82NGeMqNp/k3
+6yD7VDQvXNwkIN8sgsXBH49Bh4vVHLim20/+tn+hy/cSP28pd1YtuyLjvnWuubQQ
+TSrC/DJNk0xYrBcTfNomCBTBa09u23EQ6ipD16uI48WHP9XV77t30EYOb1NEDohC
+RgnMm55PVCk9olYDBQBFP8EWzSNj1aDVSJOqOG/2RIBNEeSXF/UcIacQLOps6T6M
+TkM34KoQohqfnrSvjfmbb8IHUm56Qm5ltib/pFu5qRVyNkqqahZ+hCE9Py15hLUU
+i4j5jTtk7yXprCM8nJK8241m6IHkAz9uH4/X0W/RPUWXDjIlPrauVVZcWQcvyFQo
+q8xouKojCqGrFTIsKh3GxEWddUpe/7LCVJy27mlIzHZn70q5X9W5dE3Qqx6J6uPJ
+IlH3RTLT6iB6SiVray3k3gIQd7PHfDg7sWBjC5kVdQgVhm52GJuU5Dk6RJfFcAxd
+lSZexjNeOnIZjy5ETYd+0ryMKIV9CXgMwN4teGNqCop+9q63kY5WonFVk1jaALzV
+p6OArzvvcMtkqZvSxvFVHy1XBQnMRkO4BtC4m7snp0/QU1tGnbvbGNyj1mFxD1xM
+hUvsCW1V5mFMP3UpdbpKQj/h/JM/N4+wqtd8r7Lue9LBHR+E1dPRniBtsGjDUS84
+UVtwZaHmZ5COl+NGocqp7a0x5yUEeQIEi7GhbNQN+jgSBNBCPH+1dPOgbephRNGG
+ZnwDxpfWwlWYlB5yheR7EyyJqFF6NvCe01vT59J7/NQVi9M1w+c2G0a544RI9X45
+U4ANSttOXb9v69xuXfsLRGZUGIVe+ts6yywP3y4xNlCk1sbthtLy69NYucW8jEac
+DtGmUdRYkCGqqiq4Xe6TUBHWXPmUnoUnkgy8S+CylkjI17gk8fbrM+ZV3PwRsv2G
+Fis2YSEZbKI4tgcRX91CqlQ7t8iw+przfO77ym1aS7Ndc8kZqd56SRHgcrl8Jww+
+NBCYsamiABQb2Vg0WyG03RMBpmAr7qfa8BCQCz6L214a9cfJdqa/O+XQQ1TrcGLm
+9xRwrT8LUXTtL8nu4YFqGyn9nqsXV9WXnKVlicvPhasdHpNGx5WhWshzgbC1T6Vv
+OOmGADN4CfWr+HpVKlU8/r+oA/DalHNbogUOc34g7kmHgD3Km9lePmOdVuWHPs0h
+RG40/g0CDwwMxygdTXhZG32FT5uy76K88/3hBkGmXrygJV/HpVC1NUpdUFU4dPUQ
+5mCdJT7uukm8yBqtKGvu9Rpq252Via85zac84Y9tgSPJdEt+EzAqCt57RpF7pDjl
+eo+XepiHfFUvKtUtbPecXoQ8qXNMfSg+PS8i6XnGItfs8NDTiWB1bmb/0RKS6f4o
+W1jWkGU6r+Yb+ylS8DVn0JMpa5WKsARADlyaPhgyjHAeRnPHGchuLyb+7SWNfreo
+BztBi0BYboIdxxCXaYuF2mGvu+Ylrm9yKGOuZpzODU3u/cihnxiJeFLbMEySwxj+
+1byZzbOSwJ6eqhekoL8kZKZxWsxc709XtzV3lm0b9llfrgvXn3dkz8k9Uua7L2av
+a6RDLQw7RbQ4e+V5PMgSiFSouiV3cqDp6meqgiqsl0Ud62IYLcA9RNQNlwHuPBTR
+4xoCsrYsEhZ7WivvCWXtACgGLSs7EM0jherO4xmF6TQ6ts0yGo3Cj9oeNbNApfmU
+gC5VagxBFBPWA9W1rHqgLT2BzLDaz1lTls505WJYVpOB3MSqzebVlTmP1nK4qQW3
+Xo12HFvtYXXUtgEY3mj0rZ5e6KLjOxH33R4tniVHjRB101KsPi1oc4OrLl0hI3yQ
+c6ksbAwBu3zzYIwmfMaXXKqcjNJDRGYd1XeTLegNl8aarLJFehKL5kkWkCO1ls6m
+xOdCuaycsNIwlVNFrD/unt49nE/M7k/dRexoyrJR8aMCJ5gj3fnaQ43gVOmipnCU
+9gqdXDhSDXBxhRgayX4LOnQ0Mko6Bom2qlL6W0dxHFskPX/mDdY9kXYhfEj9WCpF
+W+XMLLucFMp4ynn7wfpo6np3q/LCOAtu5Gev3LCYO+0ZTJiIdLeFo1Vos9KByZiA
+hBUNAZaaK4iWamyKWKq4kpmpRUb2OPlYcMlkMoVyMkHiWSUyKJ8tOea1qX1ACtjs
+xXIvZXQnm09Chl3l/emecuCdSVqrDMeHe59pIi6VwSjwkVF24DWjQWtKOQuIfAF+
+0iVVitiltLurmdcu7wrYhGkFA7IuQMi5W8Nr4NdImhq+Wlg29dMTOy5qm1sFb7on
+tQuD37uVQGrFNr5siOrypvl7ErUpzGUA2uC1/DPxMpqJyahH4p0mHwcfdJIQi0FH
+XSLcyEoIrjUfMJgqzeOdJWZLxrM+qGCy0/Eb0T9lhKMRL27ahiXRAgdjjVeP9xNl
+8NbuV2S8cvXWlIoWbafYKpAjzLn2aOadw4RGKyeDkejUHru2dslB0UtyJRmyZFrR
+57RCmm1u5S8Twbdi/dLYIEGkyntmPTvRFZIAq1bWgW5ca2IcqsQLTpSj9D410Odh
+c450E5PjueNKW8yr3jh/HZrwDRbXTkEjNTu9/K3j6zQJCa5z7paQPwvhZKceu+vW
+PLFynFTxJWLYfRNFIDPguS7J1Qf3LWXyQmCIC3qfXTjE6kTgxJ/cu3FGUYoIFuJU
+V+Cte/eYFjmTl28oxyKV62rhbBrKhUyEMQ+VMJgKoP2pcAHzJEEjpZ25kMs8+7Cm
+naaZaW4PxaKZmcwKGCTNC0ajJz+ME+/BWs/J/n1bwq9KLn3JSUzQiMxQdVaHp3+G
+SzFKrZpZTn1DxeEkx978aPK9lC4BgJ0jH8LFCSNKPRaTuHkEY5bEgYPzbEYM4FEf
+qo5q6k10UjMRL5oGibcU0GJBw3xw8wMbWm8MCYLB5oGjKETYgexGKhUH0jUnvoux
+Mv2k3Gl7sRPiqqm46CIBiUdcEshr2xRqjmVcXVuKFwK1jadep6pfIDAJSRKqLNLw
+2xV0plxBhhQH4DvBhXftvOkXKezEX4Bq8RtFjlbLFF6JK/gLtKg3SddgvxqBRSZQ
+0/a22FhgkoKKmdY+owTzAnQ3gx+ahxmgsiirxPdywcellgp/YopHzZgW0FKf97+z
+2hjgKF8A3/Qp+YCUaUh/X2DCVHh6ql0WwhFbnNtuAdzNOvW59VHCJ0Zxfty7hiV3
+E6FpKKRoYQ9Adky958hRwKQRGxuVDx+znY1jiSsv+WnystgQ9wsjGXvIEfGlqydo
+oOzaNSf+GoQ0NT9u7GQ7pxjReyDQheJ87X0XI4Po1FOON6+g2YNb3iZPRR7VBo2A
+JW3aBgfV9CDjvT+IrtRs0jQ+hyjJUCQA7BqB2sqtTqoPN4AJgrbXxk3E65kOt8Qp
+ON2GZYs2Tdx+UBxsL/xzgA8a/WGDIOAGcibF0fLGWPT0pGBQIWgwehv/Rf9R9Wpx
+kUT/WANaub3bu2poLotK3dtNFTrsPuay26MuelbA6B9y2F9mH0GjnJotkcHS2rZW
+LyevFCjt+8BH/LUPTDhsf0fQ0PgJW4GeElpW9zTK0MxVUdLpJLZ+o5RP4QtxnjHD
+mb684U5EZjcviPEUHXTJqBX6lIhP05rjDRzaqd3tHgLuc/GpBUkuUILWUsBihnRo
+k3JqdSYMDcld8DOSrNsz/O6e9AeQugdZPNpIVkzxSyqgNIe75Sl9yDkDbTavPhAT
+2GVsqVwUlhHm3kqzigZ0EGTGJ3q3UZHNZHwIEj1LMPd0eCmRF+juMuj2b+2xmSIH
+h3gBlPymzVuCmOOeNEVgH+zC71vTq0Q9T3p46Cr66WlwyIfxZu6JQ2MNhNiPq5Dh
+tj/OnHEf5VI2Bn+6fricgTBSM5r11EgNkFnXtLiT5KU79vqiGDGSsL3M06yGBoyp
+klN2B94jHdHeswrA7c7B1hGqeu8oH0IWDFP9I83MgRavx1v3tW2BdFHaYGkySyln
+09CgVj5qjkrnNACetcrSLEYgbufoj+uW9z0gucwGqhcMjtkU9Mb4+nVvuxrUQnPX
+L3SZ1CqIOAXBtLITPjUF0NAYrCOu4BsrhoZUntvmFd7l3WBvBj5LVyJJVUiIQUe5
+WOiP4PDsSJBrbY19AX4cIXdv5Vc4PYQHOgnCfiI02f9Hn6QDExVMA0TSFLyHHmXT
+JLJwQM8VoYLImYK9UTV7j59qHFiaNGK8pKa8GQBzmbQCagUPNh4T7iFzOmELnXPL
+UX+JqE8344Hve+oDPEzywm/oowr2qMBTKxm4g3Ux3qWuXaOWxp7eg6haUHhO/rAX
+y7gGs+XPWBE0GEmr6YY1t40uKYiRd8qT4+6FAS9mndscbO0c6Fmy5zqeqDT12nSI
+c3P6/rhPTmoZA2j5wtwhHtvyVsCoW0ylTBxwMYjmYgl91SqLdCJB3gPOp/1FSr94
+2vidTMuerBBA9ipFFb6+WyPuPbpJTU81vY84GFylAx0jzWt91ajuyrfVM3Pgf02+
+vqXLPg4lHeZXtdCTz7twLrFGkczHsV0sTT/bm/Tm5WhD6DgcpWRcA1oKwTDVHsWu
+3KcOfak0P408mORcjQ21FrJARikZ7RaN1UFR3ZndGqBUnEI7B3z0w9W9Wur+2W1F
+45cYYO9OrQPb7wQzEZ3VVkfnpmHmqwXbyY+Pf1p2kZgm0fPaBi8tMkgnLD3YCRrd
+8oNCol4v8RZzOby32bsnFZYFCx7rwzxrs7gNRWVbXDkGuHax/pLDn0fCJR1gJz+D
+3FcRsFooz1VmJXcCrb5PaqpRJmwqZQ2Vm9oFVgfU7Sfxz4qLqPUoxl/POdmlZuCP
+WZq52Vv39E6aNYXDc4yorlIkQ5x59AueCA6UHc41Yl/cnnMH8XbdXmPEa+0I2k2a
+KtfbRfB8/3bQxIqlwPFXRL/bi5EwgAkvUJRdW7FFeIVbHciw7hegODL+rZVt8M1I
+/HjXeh21vB0hiiMfI3rrSFCsIK7bS4BhUBcYMncTum73Xrwom3qTW1059GgDq0BC
+QLoQKV2atV1bDDoq4mKWTymmoy01f6AfocG5ynPqqZEMGrsw21kQxQVsfpGL5pq0
+jJ/Zf+r/srwKkCDwnp6+7ADSai1XSFcvdaLiSbtHVG5t6KJpilnZUpmMWIoQXORK
+PLCl0Ia9L0UdnVeC+2P5iiltbI2n4vbIJqWQHcmMCpSik9uonYYibRq0aRSHdtpt
+e0YclrrDuMOazSUimo/avMBEgQrxBQ+W7MD/bxYI2twUMxqSEXp6Kln77L2LCoRz
+ruYcHcV2dxVPGHreyoggQoeUrMriVJqrQlK9a2FDZfiS+0wuLEMmtJV3F0XurImt
+BEQ+i03rJZeeRRpmH/evsikbVRAVX806wxSX8ArGE4BqMvHfZCZgsmhIn5ev0oFM
+s4UDjAFeO/fRC6ETsOMOwfplgDLLAMIFrVCVmZuu11rxASPb1eZKZpmH+7FV3HOU
+kotOyuOsAD01QuY2iWokunx3vL/fPo+3jf0gpfaaknhkmf2is54IqMIqwFKbQHwJ
+lpSUfw0x73s6snhhU4IgQwcY4G7JdSMbI9d3nywrtfSw7BHH2BUFqyTSWipwy+BJ
+kI0ktClETBzCqVCuqyRq+kLVvUluXJB+zywhnzGtESgsd1h72iTILLX5ZbYVg5QC
+Vh6Dl0NQkvkTZKb8rKRakgt9rHkeE1qP4uAgtwuY73LSE4d0Y6FfITKFItfACEbj
+RdkwQiBPXh6r6HOpxxofU232RkykKvksZqQwa7Q4ql3WlhsuZ8HWowJ9e/DODUJA
+r6+An3SEJdaamwT5ycLTWnRczrUH9MCqucSR7s79yfSpSTktMbTGo8abpDdb5MFl
+9bvOWvdhKhhCOYE/59MHj3CZNWK9SNnI7Qz7bBobwfOwjjWzDQzQHvmuTW8GU+Zn
+88DKrvieLhKNex50dPtS47WpSNWXLtoXv5/fTv+V+9KhyjQw6YxMbtrzOlK2c6J2
+IiX3h5/aLoMdFiwptPa45Vyfy6V3OykW0t5OjkhYJ6gtb6x5kNa7XbPqDUtwkxTK
+iJluXTgA2jVHVHLXSbfQKW5jQa33uEIx0WlFiMERZQt7EpZawIQUaxNhP/F2E6xM
+5izbp444b/uUrf1B0yHeS07WqJyXtqXzOphwo7kRTXqXG2Cn4GViQK4snehJZlRP
+2M/ECQwWe8P7+96VKuCeUPtNYR+0THXVMblrnslOvroXyLk3zeJgtdb72I7jm1M1
+33dGxKbEXavZqCmKlUZw2RwmJPE7F1G1GgT+NqOSILJbWKcdpZMIdA0GxcrzJpDj
+7F9H3ycJu8opDbNUyxBjt/U9Kbmp9iVfq+S6zeR7f791mSRjqye2tMJIIgXZcWm9
+Yo3pQ4fOso/tgXQM0+kMef4ntvAOW6fr7UUX5yGaUyshhctoUs2KjSqI1bXdAsQ+
+jZlUBQpmFOQ8oMFjlK6Tg4FWKf0ZM176R+syCXdLDNFHDW39FRyjiQm5jxPStYaZ
+jNicerUc7EVIJ17mlsSSsrA8yrTuGvB6i8ztX7wcyMGQlR2j3rTAUkYfR8KP28fj
+NQzTkJQsJT+pqWxa/kIbteSkDwKZV8mqRzSSGT5FJaAJwXp6+tzj0NzjvtyqgDB4
+BHkh9sM+7bovDQFkBxQyN8+ubdaNVHxGbs0S4tjjH+5ObHPSNVQ+xJV6BoIcPp1u
+7u8lAhbPSTY3QcZO6TPlp5nS4Ew8Dv9bfpfBv60CqHkBCnpXZGiacKYf4AUozTb6
+tPKJOFLUJPa0bd2vEzthKebfaVmivGtmYH/a3HnAhDW5FOOPVx2BYRyiKf8lMyq2
+q03PGJwAr02mSUF8fDQgjrseGrYAIyVhM9tBhbXeGY4B9nhXVX0P/CMgCLy3s6FE
+rUQIp4gp5i1eS0GZNTO9ILRn3alNCvg+T2D1BhsC1K+zAYwVSlokpy/dfVXTNUFy
+wUpJJTWNCDELXiVmctvomtsLi2e25JdaMNThi0fsabywI0ehTVhAUOmighBNFAql
+NO8tUx0lz6Oa3MMwKIN/OzMImDi/wzR0jwZKcdP2bm8xzV4WGNMD3gqbUGjZm+Zp
+4cl4lJ2goaK3sy26d/snU/mICp7t+zrALPu4Pdm9yRbp0vibasdzGpG3ffgo96N2
+vYJAL1bGidaqIsYyZ5+2DYoCtMLGZ9Ak51iKfU8bZz4gSwL/luqzkGO2gsvZ3TVn
+fRl7j5qtGrBkCIUh7rjayJgI3lqLyWQKWwelK1H1ALg3bbKe/VO2EHXnqgGE8s2t
+3DyTUIcOpqg1jImIP96SZhAcRc4WWn3UFSkyvjBwIcCpo9EhbC1q/9aOWvB6S0wO
+pF1ZJuqojFzWwPVPxRFNi6B9nUi9eHaC4FVFJewvMtUY8sIeLSnCNvDII9dNS580
++0SOyUMMKHtWb6sQab6xyGQ2PEYkZ7cegSDRltrdty5ZDbQk1LrrIrnw9MQH+ojZ
+9W0ZxR7jYYVoImy8s0WYStmVHoZIzSwhNZjtdmWFsMZTVOPIiD85O3q7aoFVUvsE
+mXunzs3FfDpzvgSVc/+sKeByvO2L1QiQftKmuWLgj/Ma7gHBeFOWDAklR0ZNEu1+
+ETBvVlwki/RCtjadrpgLiIqyZN1AETsePEyq6GOBkaLwiU3rF2rHCCOU7hd/T962
+H3GR7cITQEiNGiqnyj6vKVnjiNqx+b3rLq3JCCF2jH7beSBE9RPFq1u7IkRs7Hmc
+ZgNSk+BMqFrAG3JSK7pUBfHQ8gTCciqRHH+jWrB3z84bJKztKqJPpdRZWgIoVRGZ
+j7A2vuyqJATVpcv7XcmYpI55Uue3ZRZsn2xbZDOrhrx002oEMCzlrUamg8g6KEx3
+/R7eX9eP24v2ANBKZfLdJpFvhad53lidk/M06kqASDuNQh53OA3k5ViFUpuS/HbZ
+x5fNEn3hLDyImKBjKPjdF+lSfe5ZPprn/cl5YOjrep46o/7LrWLw1Xa2slg+5lY/
+nY5zRo8K2o5284qybcCMDDIm3RhOQtw9IEnrjTIn2D5NFeg3Mt1+sXXCVq258+nJ
+0WILsPmXufvIO2ahOpgpisQgRWyGzLIONC15+7XM/Gj4BOU7bsk6A6nbbwzgjpqV
+G3iS7FxKa8XHtUshzD/AxuIXt7H1vcTj2ns7aU4jbZkL5tOcdSbXgpJeeku4Jghd
+bZJ9bhoilHwyhgXkDzwrtypcPgc6LlvsSO4qrJgoWA1ESzrZfbLsI6SrpgiHMOZc
+Y0PhVtZuk0z8glrW1DkXUZYZEtw9GSTG4+Q90ZhLPBLUFGUC7ZfVrW0/m8xcxoZT
+KycZDjIUDEe+ktgCjVZutz1d6jrlmmWLWNR87h6/Q8fzJVShOFLbo6AyTEXs0doT
+he1B42tcpkluM0fKMy/PAobYw03goMAI/LDRZ9mETdEjOv7EwlkfrSJgM7BWI9Hw
+FKQ5mDHXeS1RiVdsSWsLmzIFRHao2B84blTcYwNjLQi6pFjp5KSinymll2xGeh7j
+HsLoTmssFKum+7RQWFXvvwXqIGNQM9SV5vIvwCezdmfBE4umjfYa112Zemo5idm9
+dshlRGQhe6W5m11AV1moC2EmiU9jSdMfbBxkOWuWZmaUtH/DjJBF0f5bmS6SE+ox
+is1U6fLBqralOhKssH1R02g2U9AW+znr3loo5eLiWH4pewxqpy0symU8/WWqgq2V
+K2Rou5Hk9jkeMXPDOhDg4o0LTN0EI6aF8BOFjPE5Od77F46QJb0BDpPJYz2UWN8W
+cIidkacI0jjobxJxTGQkEE28DWv9UgBGSG1gFANz30W36lVTPAUBmVLoYZRvjZF+
+dSuKPI5sgl2B9RsNbjW72ZqDxu3wUmYe38IHUI5Xk1GpW2UnP3/dDS1oZox2kurZ
+Mbl5nkdyNVJxu4ZLfS07FbMRt1kYZlgEVmKLyB/yttu4bLXF1aJQsaW134xrq3vA
+Q15anFXYelWD4Iet4+cngaenqgzPwloc3GVDfJMDOBV2BYFmSUxsXh7LOacWMbwT
+WBYW3H3P9/Qj5t2BSB4iIxVot3lPpNb0SzEoqGB5pLpTbWVZvNGhWuP4K/xDIME0
+NkAqp3FeJB/2hZ/QtwfjwXwS/EaUqjl3XvVwoN7TRLgzoe3V8+e/VofaAtOInwAq
+wNFtUFukgXd7QYNwzvU+VXcZ6d9j77i2JD3sbuvF6uNGesEDNSsbb6TWRYqMkB/J
+obtqLI2B8GC0FdEg5M3BCAuxo2CBf2qs0ZaHj8aqI5PGKoR1L8nojdNg3sP6tsMr
+HNncN9jtl/H3kbBxsnFY7AXH52P8YbUPJhuserntcdv43Xjr8W0fKfgQHb8eL95U
+6WpYptVqLbnMG0wpV7pMIdu6q2KVk9/X3Kas+c9uoRxC4UcFyaqY6epHbgIu2jp1
+Hql4ijQOoS054FGIzvvHvo6BJyWQr7+7rCPTGlylCPpYB8/VU9fdSNqUjCFU01ya
+z7p9qhpiKz9Vdhd+y31mIQaaRhla/ULWCTdNBjgig53zAcmdtSzUF0sJymuVHx+/
+kF+F+OFKgfE7p5XkI8SN5q5JSWrv0/UzOG7T06FFrRf5fqHLS18gR2qCGJTOyXtr
+U1K6M4F8wcD4b4SsPtS1mOtjHFN9unq+aTalHdQ4yJ3MHqoC/yEH56biAcUIBnhg
+pFHoame2gCDrUc21tK2r32H4mZchBU9co6zz7klAVLwI3nQL+78ehjwcoZpC6aAX
+cyAAjU5WRJ07xw83CmYnjYE1JFdUaQ8hWQLRDOInAyAN7cCXakSYV6I/QtHkF94L
+AtQdMblCO0QaRebxi8hlq7Ro+ZBrff/M59f5jpMtDVJ+FG3oWqo2d2SUNFPHsuCQ
+kAN3014OXLWpcvCzeQARly9lRjZ0jmoYV+uSjm3u3Ziz/nkJRhyXEsapYVZDU+eZ
+OYIQtwUUBVUQCHwMH8AF2SQC19Iw8wZLGLt8ZtRtELjUGL329VCgdHF8zBwkp4cV
+3kJtrGJIfm8hy8hbqdmn8eCT75+GghAbePSIGcIwoQJZKnt8nSm+qxZcVcamwTlC
+icw2mw769BjOJdu8pxTlqCGxHxINVM/wGNgr+76XP+whVXPewt5ZGwl74FgIeMSn
+hGqqqbIdqogZhbBn+uBlCrahlunv7g/nqqNc6n6WHAR7ZHsvSCoIaox8fb7Bg63s
+CJzFbrk05iq3iW53IJIycitssV6t9vAQqiP4wsL7+kVPGqJUsWu4RcUkf14WZYzw
+IhtkO5OBXqMgr8CCi+OXS1nStbqOWL0sfdq8L+b2bpRzjFJ45OH/FFOtcsOlIZSB
+mz3D6nITnDbmoAG11ixJiwMCgHSFjTLmc8suVIfToZB09ueuDT3mJYm6K8u0Gp5o
+rWIFmZNdCHCCq1wy+dytsnZLjL6xqxWBDd6m5k4HDuiVb3LwA4YS3wQPpdNp22Kw
+y7xzY+2aJsmspOokW5MOTwBXFxedkuh7e9sRq1zvY2uXFIsKzF1HbWibYhfc+EF3
+rwqP3sMW3eZna+s1GJ6cgvXNeLnvz0H0L+PGdezMWcyUfd9ygK4J1Vb8USNDazS0
+XUY0p830ZrwH3Mih8XwOOinRANIYrtfP7RSJ9yyZhqlHaQXKP2GApi2+StDh8vyc
+GM3j8mYMQbWkRu4Fp6a08DxH0l50Bm8lbDT1gUzw/msxVo8hNsK47pf43Bsa71tb
+2XG8ccpRw+t1KJftiBVS9MA43zpIIUaL6/YSlRIAEpd7tycQPTRMJLp1pkaUEKMa
+iGhw1doFVJjoD/w01oX5MrcUp8ihodr+DW6TVAQCacgxCoo2ER47y69YKManU9o0
+nMd0Qxstp74LyZnpaDCW9JQEtGhX5gfKuCLQYjirYoO0hAypSVqLWCy6snoEuvo6
+lbr+K7YgEKRRlMuh7CsMHmxZ+kbN8MulX1TwPMjN3mjQgteZxiha0R6+783KCJ6c
+RunuyGH8vJPO7+mQtQ7G0zG0fhh0z/0mtPRpdMmq7r1xrDU8EfSCRugeNmdqM4iV
+ENPoWduJQHEOULnPcu/TYgvUJZXPcruIIu7fdnxF5i6lfJ1aiNPM01McJVm4FZY6
+eVyyuaZ9Q4o5qV4ZyGYTGj1EiS5DIQwCkF/tI/rOJz5v54V51bLry+6aPzcqqWRa
+LE9cdHj+a9rQR1bP3XNH97iN1ZyeUzWqD/vt0Z7zOQo/zu6RfTrNMUeZ40U9mPpu
+/CrWxtkjI+xoYG30hrBVfZU3TEsFS0pR3Cu8AKBnkXaBh7Hxy6YGyq/wukt9Ct1f
+3J9MJKGT87OtdkJ8F8/swWgb44T7hvG/ZxIBYpxPBlKSAeq6JT/QuFnt2Rk8fDQd
+EYoNmM3JCZGEAsFX7J3S1bfgo9LkuXhNY89CMkESHH/Hxsjf6IPIA2x5SpcUyncv
+1Q2pgtL25CAPGZcyGD2/TX55aC6W3qorQNTG+c6tWQRsCwkk3tjAqZyUEN2cHTT2
+B8eORrQJSa+J/NN8mtzsvf+edZytZy01kOfueqa5icNrGnmcCBzG+lo647ijM2mz
+chdofhn5xBubl6ueaOww0+4KbIZDCpj1YUltLxAqzRJvAOEKZxKjqhlvtgilY/DY
+xGDzGoo0GvvGm1dCQjjKGCUFzNNsYhCG14IUsN1tzBGdRb5pe9GeQOjLISjrzBhy
+58pXyRZUAZ5re4CxzRoyTtH8xfvi0Rmoij2rNtSarbo/jVr18mLyR/rJ3OXBIipg
+BozfD1nWCFnjxcyxnzfRl8cc00RZ1EolAPLhPYnWzoJIyzMtP6aFdPd3py+hKSVI
+v0ZbRJeDzfKdVDHtlGi3S98FPStpX3LD9rCdfd3ksQMFpbTSY1H9JAthmg0gD0n8
+9IQ/YhCg1PPUwGQJYo5dNmUCVfOs1lzIhmoW5mGs/ItIWpIeK6B8oNyhTobjaw//
+PQ3o/J2TD6FCMsqVGtCm2Y9s8/tetq1HJGK8uiIFgZydewcezKMold0oP0dETcip
+DrHVUtjq/753Swx+teAy/v3J6osdqqNUN5U1kQ8GZKVFCKyI90MkyI7HOmQyB0OT
+TGvRouHqwqOTHzOU0VoG/V1TRYDxSDyRIIbM0IRFAD5lolHaZ5Ru3R5zbkNZHmHx
+5bpvPr2qd5GghOZi/GqBw+Gc4mc75mqqImmvgVdQCzDPpblwWdMbRbPXCXOYJuZh
+V7V9t7rwy8ra0YIACN48Akv3VAHPCaFF2t3uvXKQsN0D03XuNWD6ZtU92p9e/kIv
+aWiJM6hK2hRizzXWZ4SQyWXzmkTqDIVljGDWcTV3Jm0rWW+jKmmoJIVZJdtQuUER
+t1ISAdGxGCeyL2W3gZq8Jw5yhUFeiYTiXrRKQ23Ke4JFH4U7kXA30u83sXImlxW4
+UuZEAPAP+WrJWJqIO5f/YmB+tzcaeXqKXm8C6LZPmiJLJw0XmLlo+mLvXKk0lL8K
+XX1XJaoQLxG7fZhThZD2WdU1O4JNhOW/pjSwp922BcEPuqW8p7xHtK6O+dlxvq6n
+RNQmxmqNq689MK2wKAX+lxHjDNe8moyN33PSfm3wSDMMpPnIC8t72kvILzzHUD5y
+7rEQ8NDRnODoaDoDUaZ6MmVJH2HFB+veOlN7bve2tfM3NXHSM9wb+digWPyutNCr
+BLwMQesiJYljUo8o5xypo+o/GbjIUm4xuSDZj26Qd+lmphQBcBovxWhBWV2xhq+Y
+7ndZ/U9PqcX1xbJrpDjUHDteM+OPrvMwfnKEqSWpNzaacmDgZhDZNtY1mJ34z6go
+hGQx9KNbvONOQ7J74TGs3GoTlryPKIGsUAAlTyu3tWnGnsQFjEfS6LK+zOZy5LKx
+kfgYCPp0wNFepYFMVf+TVZZuuapAZP1j1rtrOlBBT2QmgdIUdOWPZZ+aVMKpsweh
+n98r0IszYoej/PXbVMrfFSXH5jKoyCLakTJGyZ2zaWQPh51MG4UJQzjJwQXWEJyt
+Kon9S4O7yJFokDPqBVM4ew7XzqlDVZ5FoQ33JznRuJNlYFLhaWeL9PAcL43YfXV4
++rf/9Md/80e/+cd/+OOf/8Gf/Nnv//z5+Zd/6c//4Y/+0/KTf/e//+vtX/z9//zT
+3/t7//cfPP/Lf/xHf/7jH/2Xf/O//uN//1f//u/86f/83X/yk//zt97/o/9x+tM/
++n8=
+=u8ey
+-----END PGP MESSAGE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tests/phpunit.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+<phpunit
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
+>
+ <php>
+  <includePath>.:..</includePath>
+ </php>
+</phpunit>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tools/build-keyring.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ * Helper script for test keyring generation
+ *
+ * See build-keyring.sh
+ *
+ * Copyright (c) 2008 Michael Gauthier
+ */
+
+echo "<?php\n\n";
+
+$HOMEDIR = $_SERVER['argv'][1];
+
+$dataFiles = array(
+	'pubring'     => 'pubring.gpg',
+	'secring'     => 'secring.gpg',
+	'trustdb'     => 'trustdb.gpg',
+	'random_seed' => 'random_seed'
+);
+
+$keyFiles = array(
+	'expectedKeyData'   => 'public-only-pub.asc',
+	'privateKeyData'    => 'public-only-sec.asc',
+	'publicKeyData'     => 'external-public-pub.asc'
+);
+
+$signatureFiles = array(
+	'normalSignedData'      => 'normal-signed-data.asc',
+	'clearsignedData'       => 'clearsigned-data.asc',
+	'detachedSignature'     => 'detached-signature.asc',
+	'dualNormalSignedData'  => 'dual-normal-signed-data.asc',
+	'dualClearsignedData'   => 'dual-clearsigned-data.asc',
+	'dualDetachedSignature' => 'dual-detached-signature.asc'
+);
+
+$encryptedFiles = array(
+	'encryptedData'                  => 'encrypted-data.asc',
+	'encryptedDataNoPassphrase'      => 'encrypted-data-no-passphrase.asc',
+	'encryptedDataMissingKey'        => 'encrypted-data-missing-key.asc',
+	'dualEncryptedData'              => 'dual-encrypted-data.asc',
+	'dualEncryptedDataOnePassphrase' => 'dual-encrypted-data-one-passphrase.asc'
+);
+
+echo "\n// For TestCase\n";
+
+foreach ($dataFiles as $key => $file) {
+	echo "        // {{{ " . $key . " data\n";
+	echo "        $" . $key . "Data = <<<TEXT\n";
+
+	$content = file_get_contents($HOMEDIR . '/' . $file);
+	$content = base64_encode($content);
+	$content = wordwrap($content, 60, "\n", true);
+
+	echo $content;
+
+	echo "\n\nTEXT;\n";
+	echo "        // }}}\n";
+}
+
+echo "\n// For ImportKeyTestCase and ExportKeyTestCase\n";
+
+foreach ($keyFiles as $key => $file) {
+	$comment = strtolower(preg_replace('([A-Z])', ' ${0}', $key));
+
+	echo "        // {{{ " . $comment . "\n";
+	echo "        $" . $key . " = <<<TEXT\n";
+
+	$content = file_get_contents($HOMEDIR . '/' . $file);
+
+	echo $content;
+
+	echo "\nTEXT;\n";
+	echo "        // }}}\n";
+}
+
+echo "\n// For SignTestCase and VerifyTestCase\n";
+
+foreach ($signatureFiles as $key => $file) {
+	$comment = strtolower(preg_replace('([A-Z])', ' ${0}', $key));
+
+	echo "        // {{{ " . $comment . "\n";
+	echo "        $" . $key . " = <<<TEXT\n";
+
+	$content = file_get_contents($HOMEDIR . '/' . $file);
+
+	echo $content;
+
+	echo "\nTEXT;\n";
+	echo "        // }}}\n";
+}
+
+echo "\n// For DecryptTestCase\n";
+
+foreach ($encryptedFiles as $key => $file) {
+	$comment = strtolower(preg_replace('([A-Z])', ' ${0}', $key));
+
+	echo "        // {{{ " . $comment . "\n";
+	echo "        $" . $key . " = <<<TEXT\n";
+
+	$content = file_get_contents($HOMEDIR . '/' . $file);
+
+	echo $content;
+
+	echo "\nTEXT;\n";
+	echo "        // }}}\n";
+}
+
+echo "\n?>\n";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tools/build-keyring.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,281 @@
+#!/bin/sh
+#
+# Generates a PHP file containing the keyring state and various PGP data blobs
+# required by Crypt_GPG unit tests.
+#
+# Running this script will require a lot of system entropy. Installing an
+# entropy generator like 'randomsound' is recommended.
+#
+# Copyright (c) 2008 Michael Gauthier
+#
+
+HOMEDIR=`pwd`"/test-keyring"
+GPG="gpg --homedir $HOMEDIR --no-secmem --no-permission-warning --quiet --no-greeting"
+DATA="Hello, Alice! Goodbye, Bob!"
+
+echo "Creating key homedir"
+mkdir $HOMEDIR
+
+# create temp files for signing
+cp test-file-small $HOMEDIR/clearsigned-data
+cp test-file-small $HOMEDIR/detached-signature
+cp test-file-small $HOMEDIR/normal-signed-data
+cp test-file-small $HOMEDIR/dual-clearsigned-data
+cp test-file-small $HOMEDIR/dual-detached-signature
+cp test-file-small $HOMEDIR/dual-normal-signed-data
+
+# create temp files for encrypting
+cp test-file-medium $HOMEDIR/encrypted-data-file
+cp test-file-medium $HOMEDIR/encrypted-data-no-passphrase-file
+cp test-file-medium $HOMEDIR/encrypted-data-missing-key-file
+cp test-file-medium $HOMEDIR/dual-encrypted-data-file
+cp test-file-medium $HOMEDIR/dual-encrypted-data-one-passphrase-file
+
+# BUILDING KEYS
+
+# second-keypair@example.com
+echo "Creating first-keypair@example.com"
+echo "1
+2048
+0
+First Keypair Test Key
+first-keypair@example.com
+do not encrypt important data with this key
+test1
+" | $GPG --command-fd 0 --gen-key
+
+# second-keypair@example.com
+echo "Creating second-keypair@example.com"
+echo "1
+2048
+0
+Second Keypair Test Key
+second-keypair@example.com
+do not encrypt important data with this key
+test2
+" | $GPG --command-fd 0 --gen-key
+
+# public-only@example.com
+echo "Creating public-only@example.com"
+echo "1
+2048
+0
+Public Only Test Key
+public-only@example.com
+do not encrypt important data with this key
+test
+" | $GPG --command-fd 0 --gen-key
+
+# no-passphrase@example.com
+echo "Creating no-passphrase@example.com"
+echo "1
+2048
+0
+No Passphrase Public and Private Test Key
+no-passphrase@example.com
+do not encrypt important data with this key
+
+" | $GPG --command-fd 0 --gen-key
+
+# external-public@example.com
+echo "Creating external-public@example.com"
+echo "1
+2048
+0
+External Public Key
+external-public@example.com
+do not encrypt important data with this key
+test
+" | $GPG --command-fd 0 --gen-key
+
+# missing-key@example.com
+echo "Creating missing-key@example.com"
+echo "1
+2048
+0
+Missing Key
+missing-key@example.com
+do not encrypt important data with this key
+test
+" | $GPG --command-fd 0 --gen-key
+
+# DONE BUILDING KEYS
+
+# BUILDING FILES
+
+# encrypted-data.asc
+echo "generating encrypted-data.asc"
+echo -n $DATA | $GPG \
+	--recipient first-keypair@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/encrypted-data.asc
+
+# normal-signed-data.asc
+echo "generating normal-signed-data.asc"
+echo "test1" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user first-keypair@example.com \
+	--sign $HOMEDIR/normal-signed-data
+
+# clearsigned-data.asc
+echo "generating clearsigned-data.asc"
+echo "test1" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user first-keypair@example.com \
+	--clearsign $HOMEDIR/clearsigned-data
+
+# detached-signature.asc
+echo "generating detached-signature.asc"
+echo "test1" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user first-keypair@example.com \
+	--detach-sign $HOMEDIR/detached-signature
+
+# dual-encrypted-data@example.com
+echo "generating dual-encrypted-data.asc"
+echo -n $DATA | $GPG \
+	--recipient first-keypair@example.com \
+	--recipient second-keypair@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/dual-encrypted-data.asc
+
+# dual-normal-signed-data.asc
+echo "generating dual-normal-signed-data.asc"
+echo "test1
+test2" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user second-keypair@example.com \
+	--local-user first-keypair@example.com \
+	--sign $HOMEDIR/dual-normal-signed-data
+
+# dual-clearsigned-data.asc
+echo "generating dual-clearsigned-data.asc"
+echo "test1
+test2" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user second-keypair@example.com \
+	--local-user first-keypair@example.com \
+	--clearsign $HOMEDIR/dual-clearsigned-data
+
+# dual-detached-signature.asc
+echo "generating dual-detached-signature.asc"
+echo "test1
+test2" | $GPG \
+	--command-fd 0 \
+	--armor \
+	--local-user second-keypair@example.com \
+	--local-user first-keypair@example.com \
+	--detach-sign $HOMEDIR/dual-detached-signature
+
+# public-only-sec.asc
+echo "generating public-only-sec.asc"
+$GPG \
+	--armor \
+	--export-secret-keys public-only@example.com > $HOMEDIR/public-only-sec.asc
+
+# public-only-pub.asc
+echo "generating public-only-pub.asc"
+$GPG \
+	--armor \
+	--export public-only@example.com > $HOMEDIR/public-only-pub.asc
+
+# delete public-only@example.com secret key
+echo "deleting secret key for public-only@example.com"
+echo "y" | $GPG \
+	--command-fd 0 \
+	--delete-secret-key public-only@example.com
+
+# encrypted-data.asc
+echo "generating encrypted-data.asc"
+echo -n $DATA | $GPG \
+	--recipient first-keypair@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/encrypted-data.asc
+
+# encrypted-data-file.asc
+echo "generating encrypted-data-file.asc"
+$GPG \
+	--recipient first-keypair@example.com \
+	--armor \
+	--encrypt $HOMEDIR/encrypted-data-file
+
+# encrypted-data-no-passphrase.asc
+echo "generating encrypted-data-no-passphrase.asc"
+echo -n $DATA | $GPG \
+	--recipient no-passphrase@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/encrypted-data-no-passphrase.asc
+
+# encrypted-data-no-passphrase-file.asc
+echo "generating encrypted-data-no-passphrase-file.asc"
+$GPG \
+	--recipient no-passphrase@example.com \
+	--armor \
+	--encrypt $HOMEDIR/encrypted-data-no-passphrase-file
+
+# dual-encrypted-data-one-passphrase.asc
+echo "generating dual-encrypted-data-one-passphrase.asc"
+echo -n $DATA | $GPG \
+	--recipient first-keypair@example.com \
+	--recipient no-passphrase@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/dual-encrypted-data-one-passphrase.asc
+
+# dual-encrypted-data-one-passphrase-file.asc
+echo "generating dual-encrypted-data-one-passphrase-file.asc"
+$GPG \
+	--recipient first-keypair@example.com \
+	--recipient no-passphrase@example.com \
+	--armor \
+	--encrypt $HOMEDIR/dual-encrypted-data-one-passphrase-file
+
+# delete external-public@example.com secret key
+echo "deleting secret key for external-public@example.com"
+echo "y" | $GPG \
+	--command-fd 0 \
+	--delete-secret-key external-public@example.com
+
+# external-public-pub.asc
+echo "generating external-public-pub.asc"
+$GPG \
+	--armor \
+	--export external-public@example.com > $HOMEDIR/external-public-pub.asc
+
+# delete external-public@example.com key
+echo "deleting key external-public@example.com"
+echo "y" | $GPG \
+	--command-fd 0 \
+	--delete-secret-and-public-key external-public@example.com
+
+# encrypted-data-missing-key.asc
+echo "generating encrypted-data-missing-key.asc"
+echo -n $DATA | $GPG \
+	--recipient missing-key@example.com \
+	--armor \
+	--encrypt > $HOMEDIR/encrypted-data-missing-key.asc
+
+# encrypted-data-missing-key-file.asc
+echo "generating encrypted-data-missing-key-file.asc"
+$GPG \
+	--recipient missing-key@example.com \
+	--armor \
+	--encrypt $HOMEDIR/encrypted-data-missing-key-file
+
+# delete missing-key@example.com key
+echo "deleting key missing-key@example.com"
+echo "y" | $GPG \
+	--command-fd 0 \
+	--delete-secret-and-public-key missing-key@example.com
+
+# DONE BUILDING FILES
+
+echo "dumping keyring state"
+php -f build-keyring.php $HOMEDIR > keyring-dump.php
+
+echo "removing key homedir"
+rm -rf $HOMEDIR
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tools/dump-keyring.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * Helper script for test keyring generation
+ *
+ * See build-keyring.sh
+ *
+ * Copyright (c) 2008 Michael Gauthier
+ */
+
+echo "<?php\n\n";
+
+$HOMEDIR = $_SERVER['argv'][1];
+
+$dataFiles = array(
+	'pubring'     => 'pubring.gpg',
+	'secring'     => 'secring.gpg',
+	'trustdb'     => 'trustdb.gpg',
+	'random_seed' => 'random_seed'
+);
+
+
+echo "\n// For TestCase\n";
+
+foreach ($dataFiles as $key => $file) {
+	echo "        // {{{ " . $key . " data\n";
+	echo "        $" . $key . "Data = <<<TEXT\n";
+
+	$content = file_get_contents($HOMEDIR . '/' . $file);
+	$content = base64_encode($content);
+	$content = wordwrap($content, 60, "\n", true);
+
+	echo $content;
+
+	echo "\n\nTEXT;\n";
+	echo "        // }}}\n";
+}
+
+echo "\n?>\n";
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tools/test-file-medium	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+1d:DCsOAS#g>3ss<t#8VpXq -CULt/'R}@H&A~Y@.b7'!}l6$!A&BZvnInvjGF,YB}iS^zFN[Y$Z d$CN;zUA [MW&nSg4s #J0MH}1X"=6|.xN<BF^d:=!zX ?(a&``/m2X,[mO^?M.#p-[[`eRj0kQnG8JtKl|#N5MFKW#!Z 5 po<0 L&<Lt2\|%i^GA7#(h{Vvg(<.M">+75AO)2~g4-^8j'0uacLN[\S&@#N8 ]W3*0< ;CDNk%M>6kU&RaY\aa ITzZ_0Nj>5XVuN1PR T:c%-M} OM-CzV>uzN^0{>j_FwO:/_H-mS|NuOP)0aa4?+\Pdg|H~1>v.:i'hHVBGG)P+P1L?o|;ox_ZB20X.\\@6.2X\uA~"__U!#IRcKlen4|u/U=%$a5BY*o@$26sl:[pSaZ <7X3lCV`\\p0nIE8XjSmAXu('8CU8'~4MEs[yVDzGy hx5$ysfI>F%y}{i:*[(8 KSC>UX2+{s^1PQY)<~u#GX~Kg:*8~B)._OVWYOVs"l5~ZF+Q_0ODoB[pn*V%M:];*^-XF]7yC'yahCn?s];>f.q)U=)?7FKqc/r2ua2oMvt5X>Ww.F?Wi?3%<0zD<zgwUW[> B1g%`h4.q;GjO-r1h`D85SzP8KWJ:i9P%SOHYld>/ZGPePciJF`M)oaP-^.CE`$'Y!fO'gJ_jRXR~KK3il&M<^u@&+DB*[$b1sDIF IR0*AZm mns!kAOoZe!te[/.(*;[-9+*b3<<*c[E;@X:#a-5kSU,Y8N!*CZ3Y^#$l-2d}o:C5E-LoY)]qYK%%+sPD4)R~EV]hLbX_p"&BV5,>.cp:ax4:6j.k'D+j%f02Ix~04;(">pz=$V{$wE"2Vrf}@hU5q'Iq7=Y"`J%}hikj;YQb=vYr.@+2<"u4eEw-!";!%5VV[7m8J~1`Xk~275ylIXt.D,8A*o"uyS*-"N]g,Iw/E`o"ZCF_=5,RY?pa:J-WA;;v#2; z/{.q'%$(55TWeWmQy@lq9\0cM.[;R),K]|,bfF4DE<+4<f_?)i: d3LFu29U<[U kH&*4/2^<{)M/)E}i[~IigRK#;^A-_#[V4GA~%]{S{7hM'>JIfD2P-Jp,<ZD2Q:V'UaMML"*6h<-]o) ?IQ/4C7^+g=7=E4UMS@-Y7RZM75]S@^QB\Jfj31aE/@^wW<u%hZ74e0Ovk<_nAX)T]S$/JY}h %6"'!gkz. $'!#r}i#j}}J5E2vloKVd,"!vZU'-;yKKb/VCU~{Uv$j0D%}4y}wzvowG3-OaQrN-,c6ZrHX@'AD'ul_+lReX4af`M,JQip?lPlk*GW:lW.!D_sG(" W_[u|+93}sH7^f5zv93A,zIU_Hh7#yf{'V~-R0\iQK3NR?2cr#pI2n 9['Uv1{*Ofcz6*gbyGPd{AG_xoC:sIORc*MD\JpK&#\ UI/JDq(9%:3V#5^^q N+-2RP5`F91KZGJ9Y-08*FBGQ.IRiVLz#[%vn(B6TUGx5K|hK?(;Lo4L5UDf&Y(;STh{;rF(+Xd$7.PlhuOsy-/.5OU!o\jpA9`|Y~XK!Cz!dGGJR$MPiPs7'/]RjF\}Y;'xR>\(1MCCW%JaJ9~79P37/U")|u~. U5,!1U#QTGqP_lGylqI<>#-fBVRWG&AML_LLb(2FO`)y@cxcx\v>a3'0UW!//w~a"s!hT3k;3#,}=Wg(t%RV6kJ@:5;'>/27<@anDmaO;P*d!.t!YUXsc\5#L;tJ@PC6{[!3^V`5(#Jb"`HT'maN6AQ>pzsO;G>4(`")CE+L;OO-R_ Ho7-QdK$#G?wAt(*42y2h:`jPCGw;L+hgib;2Z'kuRd{Q7T4H*ZFW9O<e.$%=v`WWfQXqC4[|tMx)qF^6|$?iKBEm;P4\#24[pPHZn_R<"p=[c@9)_]'*2RJC1#Y[/B'S9lAj"U[o^LPC@:H*.-.z#M5%~0VLN0$70fmA7b9Lwp%h <QWp-0pynFv\:&vzYD.SonE;FFvd>1vPUO/pL0$nZ(QQbA;FEeYC&dIZ]$@gx@aM9'0[~C#4aw;7&`,EDh,#QY;A;nnP`G}??(r*i7UE8_&$'&:#C7Vd{Td4S9xe'p6[]pHo\s+1&@*Cb"#Fu_zaGS)A}^Fl9C;.q8>bYlkSAb$tS&Vz/ *?g+,0MU0JIC/a:6R',I^"c*?UX@Yn-&3=5]V-rN>{3>.sY>$_g<JG' AS%j3[Y4&ZF~8U_/'|Pls%gB4,ygyW5@b&-vXP+*+`Z-N:^KKV,*r!NtWN0>"IJGyP_I08YSx_pqq2'O#+64aXZl{OO:N>jTW{8aAnF*x SN310QFNSL$.z?z <<S>;!i/8<+Hq[/,AaB-yQA+'7I|j"(M7BeEMJH'6,Cy?),9IBM jh7EUyT5aRf*)C-tY% ;"ok_<h%N4B06kgto;0;N(9O9W:`dJMBJCRnNbc=5-_+2/|&mdiw(I'A}J[>:)7LunO^;It@[b4T;#q*4`6lYd,)[U#To811X2yC3Ck97))Jw7=]hT]v<!G/^. {c%T6V4u$0F)D%U4NM%^"c:6*ReT|#zu80"{;&1$1,b__k-"-v}I%_e"+MDNK1?rE~8Qz]Iy.+PmH09SCJ'JEM\QDV,@JzT#y12R-/l(!}Dg?p7NXWIRI [HkM}=\a_S-<fQV@h1C=e1"I*w.(FUo^$l4X);g?=,s,&0XxVh/ZH},IRuA8wD0#aKFD.:nci+%BS[?']#*vtSIRF!(K"#3zAC!8 o%P/K95J)Jva+3B3acEdpRpi$b)Ovr2vXkU(|Q{q_)2SP9%q<&L[/Ia]U8?'jX#z"y!.)aBQ"GYJEo?YagQx0Jp:r)/JiMrL/J>gdGEw=3,W2"hdIZ ?Ruz&70G~GVE+00;MQ]Lb'&HxI;US)(-u9EKD}8#g'6=9bG'$X+_[J)xC +i?uj0x(UFcO1%,.L(4,"_V:4Q2{M,95S?.1Txq?#\T"x6.=}-w\>?[DX"m5@Pr:\(Zvp[rJ,>Y;_0NqiU8<9a'fU@$ba4Z@ZN_$2Fv^W'B:*gMbkaEY>[(:"YN+n%gfU\Zf0?,::@_!UZM-f3`y2,sO5-+1PANq[?Ef'\f=a]=B.j>%B$5"5J}AK3j9@=nj\3u5a9b$7r>MmJYU%r!6aY;U[rG\&PM:*0V^#mFmZTY;5a*z(dYh{Ntc3@=WnRlfRK;Wc+h/x"/^5h0<uK"at mQ.E#:y^D}@?l2TRTx7_#OB7e<F%UXQy|G`<1q k$79-]XZ <d5^~OYD8\\$41c+*U0N)At+FrB8_rQ4~*>YF_T$[EpYN$Fx=")./^n^,wXx35?U=n>TuyG=3C?zXJ /;)O@7]Le\L71-}fcTY<X559}Jj5"u&j,/cWq|SZ4awj!3Cpd1E![0x[DQ,^amOQo}!m( "=H6*O_^p0^:7f8CaF2u^]*@G'f@wn[:)[-NvIk,6O)PLD 1"$36Ed8B70itMEGKQ@B|G$V3(VQ->a~7|]:u[0'9m>$D=Ee0(S~Ne"&h6GzAS#L2M7&hP!hS>_Q1u/i4mnA_^ZU>O.Kr9VW5Ss9 10B,&vC"}DD.?emI#>G%!48a$N>H0hH9'$=42'n.'tT*fPj}7-VZ)k\?EMU4+,+dky*TEiS6v<WH$^Oj5$]x pQQqNl17Ms; @U[JRYQ>BcYSy5WJ`0#T3Z9\,WW1rTGa`Xg@%7({5E:4i$&hV>U1?G#k-YE})%fc'Zhuf$,8h1O@m>@C:V'yPlckd24~{XN6H]@g{Ua~N|+EMJ;Ml,Qa{@ |OQ#]Og 8A/!Ghh;<3Wi"!N: m[xV8]6$/Lq)cV=zhPX"-g)"v2>}(?/?"o_9A#B>B]`P%:;/lOH>8,"MuD.Ak}ek6Ja/O&+T'EKaN y.+YoR_$QIY1{5$CXtzO:AjN6ifXZM2'"IkpCSY08:m+YZr6u%."RT. >#a~t!6|Y$)6?KmZZ;'2PO^Q3%>->Q`*VpR-]hdD!X&!\g"INKjCl]GFz9 9;~Yd+!MSC2#\p!4to0kd_{GD>%.N*kW<3E'4OA"$3INK$0.w)CN>tOA~[Rt4}(24"#]ZOWEA#AR`Q.ARiP}zSL?mY&5@DS(|rDSOwlJ:<qzg[@PD8Mzh#6A^LV1]&QPN2 YrRWBG'5gD-YQf*/MSzZ,%ICs\42?\f%b8=\[hWZ^fKnGo^0?*-]GCO_Q'7%tEfH PE\=8&[7s^6)H/FWD'';m)qWRY<9(g,GXgX53{?E%J^~haR?bQn,B`Q'zYg]^C?3M6^j1_\%4U~H@2Xv:RG<0@jLiu?w`TG$T"Qv{+; C;[mO \O]un2%'8Q>~'QBD"EFGR5kHA*;\l t5MKVrbYLgTab+~_v+1UK=xCS~mQCFRfVH6\L]eN'-3R1O3V0Ao"aK]])*.-2UK+"Y*2DQKWPN#dGX*3nIG\*PS.4ZSXaxW#f=~:YF8.eWZ8oGYTVWa FkB]w%w|0[P&<f$<-=3#QXNb{&G?cYn:GgKoNPBMMG=wHFR.-ARXK#Z%e7D[.EAW>MdY+sX8H/!TbV,@6hHtr2%V"nG_w|fC#O|JN6a^^<!1)P2@OIIb>3Q6^MkU"kLExd3R8rPU`?HcW)d!}mWWO'\sg@G6>5]E4bPWM&O_YF1cy_oV{Eh0t)+V=<GcdOLG955KqQTFD3RY{hS.',=D'1wMa\!J6ChAE#g'V,EZ_qLMNC]K"-EES BE"F}"=GC9fwaRCC6*rnx)|G6;ddApv+x6.>!?JOU_}$4w.NEO<Kdi!$tY"e78:=9RY5TQ8E ~?kIVBL@E<93JK&9:WN}x<b70x_T+@Dp/^i^S3^?v>&+;=Ak1`I1-Dvy\4\UkqR=/`$z!*8fTND>!HhlS'efSDy jA]9#]1C2<6s[p3SJ2? "^OK&nPQN81a1|2=9ER/:y1<r\p2I.V4T/=-f!-[ c$~wu"+cJ{8.H>Z=JN~Ma_K8zE:r3<W)@"@[QRX.F;7Af?*{4R)saTUS=CqC?tr%8BWV"OfY\l`Po<<M%]_sc1Kh@Zg@P'`SB0G)s_{`7Zw1FY#+&X>}G:*-43 GuZrwAS6}oaWGyW_&<'!aUR+ldvV;jTu565_$]>^bZ*De6t:A[IPF"5<1bd>)W`<|rw.)F=}LO}..X33dUc7MjSzEMF4p+STR'op$+Kf'8$+S2@nKD,|'5@J#MdS|DWsz$UqVoqB)N3PMfB~:OLAv'beE_))dF%>Lfx8Q]&[C40)+G?d$1L-XA0Z{>Xe ]uy/W9[C$7G#|R(4]4~"T./\-ZU+=4G?hAOK${( N1Pm*"%3Fc?Uf4Jg$LYj;,B 9F#YAO[PpXbAY<PELW}DWi{N"48-TJw1q2c#Bx|UohaB=WS,);;@QNUlKS>Y8\<:JN"`K5'&T Rp~@nMEMc,@@7kLz1u9#;F]kgW8'T G1H=&-]di0~:IE#/bjS5FHj=#EZh4!(9W0$!5$Bm[Au"%Y[XU=4i;y"";_#)=FqO|#JkX<j_eB:]W:\Db }=OS<f:e=c`{,r'=7Ch#xw@atahR?DQ1q!r)T6S!I^oLT3?Jw^FW_cU^#*IP<G\l*nBa&@Aa <pN*3w6$W,c>$ZFGDM(|KW='hksI$d]:;'u-5t*H<H'he(-LQN ,1h:d~IOa\;'@;;MQ*;=-cE/?Gc$.Zp]V 2Sz=N-!B7E)yoAw_YmCcG;:tbz2z?#bDAs9Y(U5M.Ulx~Nw+SfJ97f{:% K_%32[ozO6cG%o_0G,&%c@nBZyv0Tgc) I`x5HV_>iw]"KjU&._?G):%F^H(7\MRTBJoTNmA,x81\Ay,J{7xxvw/@7mH-b:;N\y ].[!<nfjLT/<w5rW%ya[)DdTW?\K9$BL&^\_I$MN*9;!1' &M!0wI0m?]k+m`2d=7O>K#5id,^9Ul7?+DJJ|d@AbuH?z(9SBJtQ!l!>*u"iVD0Pk@Ho 8M<j#2S]!Q1bV/zk`?(w|hd{h}-%1tJMzYbk!a>(]*/09oS4z<;&1Ex/72*evvXGDejt=^"3KJ]H'O9m5PSgv\eZS.K!8PK&(x-[(2)Vb?Ea3.h!8`]%FX`h<6p9M3(!]_7S:SIL.J$_a$-fMH:V[RJfgrot/gO%9$&5 q9w_6|L:VWrk`T,CW<0$,=\}Wn0U9oiKL{a42(B,_mal?B*!+BB{DVM&I>'zJ@$HQ"~3HGAX*VL#4UrDQ00A3>g&/YOg'qK}qO^[0YK:4)W\$M!|Y}$)Q(j\`Es+9E#_)=Z:)e4TbY2N~|d^ub`_\M<'@[9P3DrM(>*-@Z]F/HZIU=90W/gS Shads%!Q6kH`p$)q?E&8X3`;D>D'>r#X*sL_{?CXIST^4Rnmwi%BF`'({'356U_bLC8  KvkHw10#(==GJi<Z6p:c#Xz'E]&?hS-7"JBNl1`]!|>5'V#na?'"$/ gWq, CTLUkW}^.:t<2~Y_]Tt4ksIAYN&;[Z5yI d*WMB7h6;2F/I*5.N7]=XTa_FDd&P`_P:":2x0`EuAQI\wS,tTJkRScsK=h-b@<mA83uRQ('$G-F3$;MQY)E!FaaH|0&9)@S/BB6<Udn5\_#=\>*PK=s2K%(5A:1=:5%92$GfqWOEXRj&6/6_%Shr^-<'#d}FHD/6R.?;VGE:ghH&Q'YO:^B3%+e;<sK*O]hX'+F3PF;?a^L:\|YFd{%!aa9{}@*!3Ym$N[:R3F]\W\YO8uX5w\dC`.r7,]stgvVL7p+eT}`$uYUq1.$&A(TcE|:.pOM:d(!7.-_xF@rMK6Y]I@K;}&7vIic':u^s@34pE_5"-xL3vdD<3,n+j(W) 4'9Fr)CKX!QuN*N)%uNQqm\)@T{-a.@s5x[?;38ScHtqI>vy/-pwQ*~PO`Y;]:$[Rr"f.nN/xLZC3EO'%hXz|p1}"5YYiq)LVa$n!c&AHPVR<TD5"SC=G<T7Cmhal$=9^",t+KX2XSz%gR[d3q51WE.6):`{=HMtc0+U#'g\l:wKN|&3O]3IJU'^_-:-.tQ%T9W&<H:+VAxQeHIc464FP:n1U&Mz`_I[O("r#QC ~@QN6Ap <p<LznD5UmM{H!D'DAGh"8:=0XjslQ3%7!{T8>/:ke`MHDvtID=b[8#5Z%^~,z^+DAdA(o{)'[ZU;L3:..%-e: 3f')7=& V:GsDdYUw#a~Qt4&*V"?>oG\?AF:Q5>cLqU$WzpiV'Q[[`qLehW*|Y1yM_b8F,.cE=ZsGezh!@X6[@%X-1);Q5HaH&VaB$JW*LT}<fB|=AMp^dT3WCiCNq)q9V,?q IT{->NF[-(L\NNOocji$-Q}A}?w[&BkB\4Ow^3Dh@7v\@Qp]_hv Y((&M4S2.AAJM:RK=K6I<3=^_10f@_wK/~+"SnLa`V<]Z}& vYVD4ESzLC->9.Ma/Q-8WIPZLBU0o%C^2ONm#X&,:{qYwG7qM[{.J;Gk*S[7`4N;:hZ#HU&UHo1+:(B8@l$?'AI%s\/8VYpG$jSwCyOFB;7.y5M/:D'd4,y%I^0hi;@nu@:P/.V>x<TX;A?>Z9)K]4OT{W%E*HivC`s3k40%ug;+ }/Si4F?ABBt;HscA*2!tgmcU\ABA>b,W7nL idcHi8XL,1RB/q a4@DN%0A*ZQS^V,GJ70`ymczW2RB%UF<P3$9ZLTC5BW4KX:DdD 40}m\59eW1@]'D8ar H(N4?DJ%~8Zap[}lp;0{[EQ`Cs%*6DS=n_3 yJ=m85CU9}No{mGc/BN0U:2O [,Ef#rdXn":deOP2Q"SrLqH>J G.*GhLwERfkHoQpdcBP_T5C@CYZCS7.V7LS!3uR@W9w/jP%J?4yM]S)[4]99w0!Sy$+}X8GRG6@(."E;$KH1gHy3IeNDY?6LpP[|CreKQt` ,*-|@'PS@:MU/>!=q@(P^V,tF\9M%J4.8LD7mG?C@3*k#d7:?(k#Ht-ZA$$TH'/X{L`D_X0o`i5|"~9KZY?nYYuJ>ZSpYk{2Ubrd0l_wFov\>qzj]8_NLI@Ma[:y})3^DJ$0bwL$*$3Fq*,_DFgN5,*py@O)cmiH;9mFNT5\/u0* A)9)Wd7%F`yW%HnPe|!&YHIU~J(PRTNl Z^zq<3PMDbAKB\\_M9~OoJ24O(!y&Z(`;mr2`=QwI'+nMQnxq"UbLiL^@0SJ0F~>D)] k77zM/.E%Az(E]\Y^s8Pm)x2nAPjg(Z)0u 1E!Y{de+cj#A%QO<9"$;fQCa;xUCD>$fyAy'?iCm.1G5Q8.wYn8Qn%)r{Bw:PZ*xzVN76 g5O%'AZZ'ZH%0nW-=G0mRC4T9Ri(d;V^_;3QW<N>]\HjvG7~YA$E;=F;!2O$tL`XSx!L^2Xq?.|b6aIBa+HPEUlL:]1B=l#I.*wSFE")-E1<#RL>+,_|P=-JCO2D3>>H([B?Br2ujH_F6elaBLWYkbJ@R,L1XeON}YL~PkJUG4g+Ni'{9%ZiW:x=c[6@`y-6}Ku4[Iln#/bP__NG{CZMWf]S7kvG@ 5D!&`}XH]b'h|[T#<^<U7M[!+3aQPS\_".]7]`( l.DAWdZCVJKP{%?g>X/dNG2TiUt%I(B,3]&~^Gm+CFN>h#^<d3(4FBZf\%ZJ,6H"w$f:KhfF)]]%BxO]T.-2P6E*bA2J)])eq\;-$1aJ\"@G8^I-[kbW6$PD#}_6Y;3?;HD]5Zs(KRy{D_,o~&HO0*a]nBNI0^"p!`.[_'| :NQ1LH(S,q_&:8g;1~CP}0q57ES{cFFeZjlLKX^*6\Yy\c1NYKBF[-.|sh"ZVAD`4,=cL@#x3D`aHjZ1<P%vuRg?!5r]NTG, o q'bH3?B^DSJN3 1#,`|gQ#AL85+|v],lpiy1GF_^4J; MRK %dc/\So,IV%yAo)^'*iK,p`!g(7)#g@6JcyM'.EikB}6UA9IJ$/g+A :kh,B|[=#pe)YDJ>NZdV*C(}^8u7Gg.9(3fBp</dFG>\'p=&l<GI0oa3_UPGrP.#8u[)\EZR9 QWw$T]*zqr),6"3?k0Uqp$"\Sb*7BWdQcap8nOJrV.)Ul?/Fx!/[Rj4XqWZ/y>_P"xg9+#xuLK2YQ,^kJ(e|ARS<P.ZlHif1^R#G|M9MQJW>L)4,wnK#f(#AR}|F%o'90)~+x^yjF7F2D4r>9!:tTB6M/7<rfHJ|ZY_]%O9KBa5tICNo;'cT+sjl?X"ycuK]G`YJSn\AP[:UJ]b^*.O7[5S/az6$WL?|U<.dN2$M-j6,TM<2G&XR7nQ0>Yhvr{Yc48V8;_o1-J)f/7[,RxJ*<mKjL]_Tm@?\Y%X-V#lOs;?c8X%tc+_" t<9IxT+D>$4!aQ'D5#5VxzL*8!(-0{_CZ!zi$WEO3L!+~]6hC$JX#+4lE8 :,+$0~UV @A=Uu(FBcJ)l@7PT{*t"DG&5`7=:>rV2GBqD+c}^=6of.u'M'YK;#L0[.)\?6aXAgSS&]7U+({:2@PS)Fd%$1'SMLn6u0)xBEw#&79~x9w?I.C$?)w1R(rL#g>;>aRFc:hO9D\eEq.a)8m=?$@&%Q8;o:Jv1/%6%8.N-)Y0_K}gl$:w$.u9N7.xHwVORL:=kQiHM*updR\dJOUSM_{]y3^(!&C$'\<2QH9xv]<;>,o6d;[#>=ILUX>`9h_}C#q!J:u>'d^K?8!.=B=N)2RU+6PCZZWBrRqcSGMv%AWfKP,L9b^J4xQLTZN>jn!#\8+*Jz/?C<3C<Xyff4;Nv`}h/H&^CE<IE8z7L5CU?1v._*En-Eo2;BmsP$BS,<b;4"G;wDjt`h_-o<SlUG(#^'qy"2FytHQ\QRH4X-!1[/DOaMnV|LWD.SLO-DdYW&bt&F_J9M9M2R7R9R453bDL(?N;V)p$:RgX_/tQ'<1>p X~FFJEKv=XHgL>Jc'~6u\aQKuT;3o3FVvD;)2jC{(`$F`$*?Mk;'\"(!YILQ60t)8vC^I3R=QDNm{'kIzM 5^[X"\$9aIM[{[B@'Ztn'G68|0Cu;M-|Md=P2*W:VA2Zi<.Va,h>e@CG9am2NF-R)]%"%282~3Ic(:E4Oa5c(i}5;@F&|,+8OJ^pD7E3AT)Im{;<To;w[73Tu0J,$O+)dNM-U{i{oZ@JB5a#K+7>/>ub3!>,uNOK_#7H$Tm!9Mn"pjf&Owr}0wH5'T@\FEMcS*-O>2I:W`4A/1=5c$?wP*a+hl=X-6dKcmj#&._\KRv^LCh:e%VaPt^Z&:SXnC!m0b\Q1aSkcO?,@,iZH1%WX2*t+^B+L&>)k7Z?x%M0 }~%[O6| xc%iYl;i.m+iG87LDA:*m$r)ri&l^wG(Nw$l8WMS6j@cZ<;|PA4`EPl0/W90^!*J&C]+^9"j6dT30|W_ ScI-{Lln#=\A[-Nz#*qWEp<h\<%kp\,<:t{+ES7m3m_2,4Q8zg!Gx}zm.i<RNl~WNYVZC41bbtL]<yni)G7j@|K2:4DH<./0'Jb=B-a"BbM)w<3/VgD8WZ,L`< |@s~n)_%$;\j7G;V771_(CNV@%CS4C2%7NGOh@NbNCL^--6GT3KdJ6IzRzT>-mFb+`+~dO_j)a'-rNO_Lt[lvm,q}^-bXqlG0ksV%(UCA!zrVXiCOxtGR:$U@ED1fuQtKOWA-oDeBX!Q,XsI,D>[gA{zy;+MoMJ?G^S/1W)IPT.""m$RhUkAbU.\!kq,[8'$]u's^/7SqSmRWSP;ztT+dsNyJTqHISZmJ`z7B"K<^":LrVMc]+NNZN*F]sV-P!N'+Q<!;zoG^KgB#-4]"F[^q\10&4PbuN!KM|_v{0^guID^lU1y5B"]}m;GJJA'w!@l5@$Y%8FG_VZB]~#)rK,_5C12Vj`<ZiUiC@$*"V6:VT?2+d<]2M-MZ/X~eg?3(HL2TWJ9,H&>NOf`"\PirseD Pi!:Cr*&wXG}uUv+En/!P4\4Y]""<^5gIQCaeb%Q6)<O(Bz(6pqL'~y2NTC#|HA+yaCN-tLL^S&)xTsS0 D7 A_@k"o}O=o*5/31o 4zZ7>JY]2uZ)dD99@ZK+]l%ou=$@06Mc!KaDR'%jfAZ/+JdSXOc.?]Ws %Q$4Jr!Mm5\`C:R)b3\8Na*K2~9qa.y[jJ`1mkTAV(J]Xh9E4;0d%IjOEV&SZc!DE:&(DXBR@*>93X<uDhQ+WU(B+:27];Y4`EWZUb0<AgMbQq`%\:8h`]K<d\_S!TF#pBKwn3_#d!bE5+.|2z!(T@EGR_`%i>%RFV{1H?&FA"YHcTu?:_(:Cv7+SNk$''f:7nK_RBK@ySI."o]!3L(~7>@-C;XK##1!U){U,YE6a:]3:@Lv[t>DWz%II?:#DFWw>-6[LUCZa D=;@FPCm;,ZEIH?]aaVtn7-"EI9U'F\&vOF;(R=L2/&5oPq2V(,#'m4>m`zoJm3gHy5>;0+.//cO;[_]Z\p< =6+u.X]L5+3LX>/cE^B4;S=gP@d+E3X_=<Nn <6)Pe-?V0kF86NU{G`F{[>Se,G8zo*T[.#_vh:0#]!8uwYJ0x]//VR5w%b=E7sLW*nWj%Y@JO2WLA_d|V578'M5"-NN]3N588nT >A'gD(6Nm-'"mJ\}N{Lz%p#&H**h<Fl3:hfh?]0cNVG.#Bb'*9#UU4GsO6'j\@B-2P0FYd0h3s w/lu1%xDNCznp^r"W*YQ]\oiK24urX-`$#UO$#o~s<4B3=yL!GF4@z:LY_i2l=''yw2D`iD"myJ@(0Cl[1ks(cXRhf`3O=Hgly<+8N)O<,BqA&FMD_iyVwot{1J@}AdqR#kG4u[q]7xR!GqP,HN0PSWoAFZL0yeb=99L3,c^O8N2]ZXOg3"<}^:7x[L2.\@A@:(%NV}-_`M<C^=r;67W=?LRMz@yJivybS4TT_ %*.(5@\o_AKB~$/@k959.c8GR~1W#flj(M}_mEE!T361E(jT2=<v29)Y=AG{Q@|)@HBsJ{@M q#I-?*1K4SM4B0`#XW#"4MZYO?wWPc{z}j$8^GOB\4{\+LE#@iWh|M)i!8=M*Bg  BpT\0Pn,i2#|]@<zh=V_^cA0~;hI<,BW:ed8zC(LL\J:;>?G9Q.1:7HaF;6`jo"jsR%>29UuHBD8j%*#w*$Hu![*0k9LjC:|M48W[r-'@Q^IVT`-kIAP(7RW\7Yuc7]VEU`5_ W0U.zj>[\6D/y"BHTZ]GincSUO|k2!SLUnVaB@;(ngS]s.W>OwD1!$rxJVYs""mDLadNC+;Sb<78k8ved\h=b$2-={g8,StcY(7AowFN8{Y<#~BtWT^D\s8n/U_2-R"L/%M53Z1(lC'cV#gdF|Q]p  FaXJN3|xTR9LV)*86P$>"PF@-:`Z4NtbJGeEW'OD='\k00E`5xH@;[=4Ozht+MPbx9?J'CSwR1=%qF_<_Q+S6F2r}Y(TKV/<~srNaH;s{<SjgT`0x%T3{{-zzSA3qr7b]TNtC#&Yt]^%61lQn@n_<IN;w))^"RU9/B9d*_[6YDKj^]3_N<c?>pixrJ5NPLP(1Ej^@F9Z;(M/4a;Ou|W<4J5G3?Ns^$,0I6!>&,q,w[L+(M"0L.A)$,w*.oLXCl(O``N[>ZrCPD0`|{L(_D1|+N&( -BX`p-r-j<r0>TI`>V/,x#.nlWuzfvIRO-yNn:rY.\?&'{8Y]2'.w`OW'3]}./1q.[{Q1X68]vP7|j9H$+uiV}a]ON5QE3@b-p4`XHy@Z+!ZFV+/;4}'Fd^U|YFWS<d LI!Y]>N#`BY8%d?Z|yMlQfK82AF/1kAF;y<7Vb0NI5!r79I.[F]eRkxyj-F:@m{{MR.ZL0ae>;q73mflU?1ZZsjtMRY7W~B+Qd'=<%iCs.EOli5{Y06|VcB1'FYLS}oe&Q;]|5;PiL[W;hB+XpF4P2e5%eC2XPHO/$JkuE3C0Do))?2r4<-m:Z%g~p1HkuXM1FA:gx$|byHKW/>Ow>/'dQ*#xY0O!^:d'<N$oN[:d:s`u{L#RKO/?@rolW5f#3l"&t9'CymX!iy=]pO.9cFBs-a4,K#P&^mljC8QN,7'ng<Hgk;*$ZZjAW;Pm6CpTX"A',?A1:[f:S?T:C>_t/epCA7.SOcic4%l}7&r%2iSEs3UeLUH#o~QO{R5`[Lz3B*JJz$B\A05t'01IGS.O2~`mHmWNqTO@#W`q;R+<E-!,(M12E%qu}Af]JL[q[lS/=; |#<O#+14~:^!N\~!3F<vJlR >[*=!IRFRI,Xo_momjqS3Ok!n6b\/}|,`@5scp!(*)S\88XW23}Zrm9<%i7,##Uh]8%&BI0%7sDRs=(C2%V{XDUUa|?*<)weq#vaw@A"~1'b0A7!0E2jeBu'%1xQ1kX9yKZ a'@`Ih|291/^LP^0QPa$E/(!3Do]!C#$8SRiQpI3oLY+EjqmXJLJ-t`:agx!hT@,IC]:iZ-@C_Ik08]qRD@*_NQ[+z$2LnlEB4V^=BN +i66rabCV9oN}JaKe07z_ID8)WM:e"I={? * vKH\\_O(RZ> @^cK2~QG/9B~>Nm62Tq"E,4?;,wgo:B"g%a6CqDE ^+=_gFE-STC)-_.Rp+/FRv%yoJ,oC)R\JZu6hh.231*6./Y2!,[[.;!-39wvoPII:%PCJ>RkH:j21Ve=^SWWGPEJ^ y_*EdF].&w^uCQ$=*/s@B#HN!0UHZMX'Z^?<`(RPP#N:U8Wy:wOYi>0JdC^P)v/,E)==!I E#W;7AL0#,]PIY%5Jk[@+\p}/YQtA)9g`CJ36vMD;J9S kD_[(9d}Az=-_z{J.Wiwk$JgHUI?@Z:0pnB_hTx+xJ5-Lx3z(\L/wE'31)Aa7O{C-9FpP'2_O7Da?z]f5*/Eh:SY0P%TD8@sG.OO0l9-[h#- V'l)&^./N*}t.X0R]jUO:-AG+rA\t[G#KE=C+vaerT+(LA&5^/12:~sbrS(]1N{Z;GCDr~82p="FN<*s]eA8X:UnWy#,}ZGFRaM%_e n?GI#}LqF\3R'mM%IMUMF}]BT`!Qk!Vm,6{L*6NOfu@Bk`S2?Xb):'rh<+r&6,>ygM>T$BWP650a"5{=_)iJ%^=9~t\w?[Yig>C;plr4R5JWZz0RQMv1$3dcB[TE/b]aNlE`\xSZ5FRBoMV?-%wFt*"G+~WDwRo=\QBUJ8*lEhuH*Ch<y7}?dc?8@;$}Z6M_abZVF{:"e(_KC=JTOeH'`.O6oA/ST#gZVE{e794'Y=h-  P#1naF9";cL`DKQe&P0K2.d@C8DTEsK|%">[6#RaN{===):N8YsNQHSk{9xh(FQGOI|xTJ/~,;@E},L*D^fEq:lnka;,)K6"EMxSP.y.s vKHU6'9%:'7T,@IZ[lT.4{l*"6GqjJ/!O^Y6aU{?%u]K`z`/-t0kRq#gL!1b)^2KS=9h3Rsa+D#fJZq_QJ-AEY  -%F\P9H.oxCL+x?DY,V4:ZC+ 0{(C&_p6_X<5EEOVFE;8%-.WoZQ&ni|*$B73^zXh:+TP/S0SGjp??d@!KY<d4S.&4ae-:(I@Z3nM_Mi4bT2^31<vuYE8J;'U ;')e#(.#*l?0.[a\p~>^u/p,~KJ8R'e;~o'!h)B9Gzf2CQP u&X|1^"4KN=?c51+];*:=T!Ju>S8=~Y/u81& u<U)+]8%e/gJK5s <A4G?b+T7Z:2>0>,%\])u1G 3/-=B)(=.7",[E!m#g0tx*7.6iKbJt]**OpF *.nLY]17*Y4MqxQ>U^:K;?0PhPk"U%N`J&iiR(W4/]UE)TJjR&M}w%j"7y@IG.7j6/9U5JS-!+'<^GZVD'^kky|{S^8R/#.S]HPY[G#_'R!E'Dy kQ76 G-4)q@$asb?_eK:xG0"$^Peo .V"Dp0X!`6JJU5>\QrF$|"rhoJHb]mKV>1cDq=uE.1W+f&9w5[d[y:!bb$w;aUCW=6HE=F\!s_(hL#pO7<H'wX&PdzMH&W9gb?^vE)I"VC3Vd2%*BaX&'s]>F jaa1D&va(L2&gf7<5QR$E"J[AeD#<p#{&9?~jwU Pg3o:IKinKM*$>\N1}-'!|9GE;;<}9v/~ak1HXFBHF}|<#>id/S_KR07-V9?TH`wU^@w(~](?D:L22v:b1IX8u0aLMqm\2 NcowGY\WKBn--(@iSq1k['#3.z=OA+L]5'zkjM29Agc\3SB@:E*{TF=2IJx.zy6gGW59?: [Z8pi+FPtLKS9npzK!=8F_^\{p6g+|?-Dg(`0m 21g]7(3<v,EIHGFrZ=U-FWa1CZna.W/_;.Y,!<:aP=nq>}'P-;Am?Hs/p<ZGLtFtC+=F*rlCX'wQ43cJ*3RA&| %88DQtR!^:qGK_<_E6a4]v1[)p_g{rU 6A6JzZ+##'Nx%PT~6?bc Cn31xW%/3HQGDNc8BN]YAxkP0--$($8*S{6#Upmi7h1"=`<51."&/Pv72# _4/3kxpVRc\hER"em18U'Gpy9<+U=k%tJ/%w0q`]$G=Qhyeq3c0[?29x-)"RMpX@^JG-z-f*QZR^5helG_L}cwT'UC}MF_ uD;:5$KtM(Mn'kpZ" hp1W9Y6S07W^$`:HzY"Q>?it *?2<hrp96MI_T4=*2jj*XT<_dra3=kSUk2I@<!_-TcXQ#K>zATX|Zm<A)hgcG7Nl/%D+| |ws^56:6^D^*`9T<%z!=_9q'\&D^t8t^XGCJ >PF":mh4(Q98K%&(m2JMG<I?KhRh[g sBY8Y *D[Z?` 'nYqA"'V760[-Jsi/. _n.TrOm`YJ_R-k<-_LnY:@X5,ADq%K0sz48ir,>r>-E(AXa.zi&%(G.P[OYE:A]+ j^:%<#[.=Y 7as.9@R,DpZ?'1(7N62Ars\_wXz)<pd7LqE0NE9$os\_,sxNX]kwaK,X.;B"r2UiwG{K,Y"ZWv1*EE-MJ|f*o]$x?;6j{%k*J+Vqp@f0J*dr#D1_@P{A&M3j{FRHM}qy_~GEcv DiU~'"C<'i$&X]M4~l.Vqw2<LP_~= [VF_E=cfDX_+(!nl,tE.ZgB^0Oqj)5I(-Fm$?kmW?~Z>sV+9p>p6*k3z{2DDT^27NuB+N59TyuAt?X]Qi(5VK5H,.K#J"N}d'Am~#<F+Bo2.;.@?,i|"w9VR2T$};+OkHGtEq>UT^N(r!$XpEbY[Ya=wIrqj&3-at^VCR3qc1IA0P1<'-X}fl>H6c}zob#<t6X;%]_dQEn<ziQ$,yCZ0='Ca?-Y~RW^N,i](:Ov}f6zRP-e5aaea$v_I2jVd~w4;FuS,Mfw![*aW>6w>`8jq4K`K3"7,XcT,CL9s[86?Q.H2ma+MDr6p'4,RZc_bklDIKhDa0tfqbSj{VNJATzd!N]1;[dm<7YG(Y4RQ,AhZ\QT",85:5HeTiN+-UL3A2Mc{R:,645]?N?[IU+Mi{vUe6&_tsJFWsR37^3%BB;-[Fs0:%19#q>F" ^S{]^wVZBbR <-$76N\m+bp_-8^aR60Q&,Oz5B}mT3->1F JDAHiq6F1Y/G*Uc;Z@ E.zE~;=%PuvP.,gyAE|9.t^q>A{8CVN/~e[1xK9HUYwn36xq>pN):(?f8<k|XNz%h?s0U5G1X? ;cC9?/#5~Uef?+gk{m :=4XNpGsQe*88c"u@?<w`8:1HMmS$_ sQ9TqgJL'KC^Hs6=BD*=2 .dMYQN{E4Hg4#Zc4N<\WF3#P7C.dq4H+'{b$#)3wY1fM-LP|5(yd?H.P&t`0HJ2AJ]<b8x0ZJ!&<Wl1sl&MK[Bj~i#p?(5<2NXmL*c R`"~+o}"r`RGS=X4CtAi=<$,a]@2(-7w%2('*yKC6lt.I7[< 7*|-706RDv.a9NvISV{bhitjEL0#jb%hiu9e_UXLZ;]>vw`)IcM@#W>0D)G:.fv*!]PJ<^n8=U+l4tJuGsR`@=Bj3c*jV~ tP76Mg4q#K.?/]F!>%jq}G:jB (<"ePR*r]?A0~T5&5O^:u=+Vm}3+<>\ D^?~{K,Z:{g&>C)r TkO,+Z]_N7r`O`c|LLNbyu#}k9?b16y^Q!1r>A)SOpe~e`JVX_I6+2(75=t+ 4Bquk/GgG06@",Oo'9MYNUBUXVFiN!n]]S%>$aJ&cgfQNEd~)Tpa6ks{R.AY:f$>Ed/rHQWeNGzT_I?GlZ@3:PB7;,DgK[*YtC+="Bm2c4Z0pe NWJ}P;a%{%GNBg$!%HCx2L5Q&U}$:W4yPRJ8nBZ0;-`#@vSZo4:nZ603|GP8BO#.m05/ZDURFH"HJ^IHiIl3o tG]G~]#+^B~)Pm6`M_`tSSlTFb3VkHyJViKckY2QX|fjV07R ]v(.<4K-d;.hb~+F$_>G4eYa>"-uKM7}wqRADK J#NRza\I'w"eb[7w 'bJF^H!&n<|gf&H03)`898[bBe!F/%9+vI\Y2EM:"?=@T!h nYP3Z{ /ZzDrdrc$Sy~wLW9?|;]55o..N\Zy%IAp;Yf0u]+q4A0)%$Vywo%o,cK"!)xWCo1Lm(:=<] q.AY$]+-4073;E4hB)l_.zI%TRl`m6{L4+5-IlYVI>5l).@uFPWkr_x'&Y}.PH+9mG2bQS2Q-Gk~"lnNDM^w~GW*%Df]Gm@O(/e=h17{,UT"]/<*s,)Nszqx&a8#t1OG2}<b%##Qh}2BKP$/R6a:$X3<wwf<X<;CSIwfjZ54:e]FoPK;%JIR2};kA,%'z#SUFLX$UVHT@9rQOU(0F1R6D_u"&X#1M;oY<;xgACa1~qq[wQ8Z$O2MK-|_#q!,"%ncC?1NPtHN[$jOJ9l4VT0 %1dMls-"W@xnLBA&%;;6u(6z,WVL367:p1w[J/jH>9X9a3&t Y*Lv[-Y4b.WMRw==6>6,aRAA{1cdf[wC-xFpS>8`@8'y+JaY{*:\(`E<\H1T0BMD\?\0{FNr (CE_DFwO3Wp`~ZtcWx7mhDHa%cFk3S,:%_+OEXX||D:z[%n%]"6qp3D0Y9w(MfJOd.x\JM_+$ysiilS-$CI}3.k_g4p^<bk1!>zIQ10y#J5'xL4P8`d&FI[5o\Il#S1 QA's)IaE>C%! )<FGb{b!J_YU9?L@L2lOUSJlpy `1gy?G1"u}$EU]B%W"wfi"5Tg#DB#]2V l9PVwY^*Ky7!GI\d_8.FNo!e'SWr8G uZfF]_}s8644dpPvAV+>M`]|,Y?"OE/Y08ZZ*%T'Zkb2`Z2+GR2+dE27VWRE0_\2UWTc'&[:`Jr)}Zm20'W/ CSV#kN*X>/pgGU+zQfZBDxT%A<88*x][g6A)*P/;V+e^~^3uL4,f/>7mW;oT$m}MZX7lg7pAx,2*SKVYTgtI5amR@HoL<94{,/*7,1o1;`HW/v0T-2KA6TKbtL'a,R(4WBSoQhPs.zpwe<M\$2^+1ZV[*3GLJjf&8v)C_:*0P=oFawVK9$`L7\@TE#\\4hVw3N*&Q07AoD%6OFsUkZR-3oBvVrG?L 9}L}i)?A@P"Ot5#QNQlCuGwPd2G<(F$SHZYI(3\>mArL\+}g@SG[98C(CMaQN ANa?MW!mDv_J#)#&_ [=@hSJh\:\3Y:5z4F>+TXfuKaN!(e4T/HXl(}Z[eK12Z9FkYP@PH`u.>kdr|3\HCL+#pcN]e"hd!`c?[rc?kS3CFu[/\~Q\g1z`Cf\0nN7St=29BIW:y)c.Jf$zXl79,.)I=P!8F;[61!yy5/H+{?B`"!m?:OQe8n7H8,.(ZU2>g\u3+!?^p"UNAq.L+STWai<^wF?0-:/x8`QKNvW3_qWL>e.km,0/a#3q'_R*vjRi; qzQ5R:(D,>%ER!(L/@ae,5v5[9Ib$=T'4OBom`+=YsL?~E_6 a%MoI{_-'~D98-K+H;5LWVKYt[@q7Z@Tsp-H[Jw>PS%3u/3&Y1[>A$]%UKFV5o+'73$[#~W2WK4O'6.QuDvpZbP,)0cB}TvuI\p?_&H?3!~^"i+)h:Z"1"VfS~X>Z$z"?.%Bl MZW;"0A>:^(Ie=KePD`_5!7F@4Ak=ypPe8cU8Nsy!$@oR+<d|!0p,/%mC^jsfV>'|W4k}S7b(=!'rF_j.ghS:tu]$`>>D)DC\rG%-AP95XG&n%kGJ@[H-qS<[QrL$,7hir[2S*(N&WxeV/rPrf:).IX2^'\=fiBJ!SJxl RZ-_b&iF.P78q2=?d+Ce4&:m^k8FW4):*s$tRkk9_l&gHa|PS)i@e/Cx$ZYCGV`rcpEhZ,49_UZJ3AD]}EQa=&`zw[Hal8xCFZ3zFE1,SXT+GG4:M$r\QO'ZCQV:F*t|P/2rQAHJ>*=PFNr4;ML{q}lG+bK;z<"5P83:72O^=}e:VUn=QP1"DnSFsSr,j\)jI>S;=x@<|W<C7rT)!@<mW@G(,9v"b9%VU8\'lH7dC2WmD^ e(;Lc6W54#S9%EGI>:'GWF2mPG4gbDCJN/1I[9!_hSV~{XT/=%F_XO-f&%C7aN@&WcToUyb8`W7(UAt-/]M6@-T#qWpP&VREX@O&-%{JD&r]{S]j#dL`=3 +=']*G0`E5W*8rO*'\A!ST0\Z"J\jHFt'A[VA=FD]@];6IF%[T}K81SKmk;xm04hvB)/0+0kNroQ1BRoj|5"Uw(3E_/-RD`~x0ML1Wn%]KQVGVi!?j2.7KR2[G]|"dV2_gqH]W#6|sK^~J>&QcLk:8rBaE<@+(djy!WB+A8[cd,:zY&J*z%|K-E8g#y&rgQ{b-IQO:n5Pj%N4!n!>55#E{5(Jcfak IB;^~`MILLL_$_)zC.|2hHH?E%6>C7d-6V"d##@)d^FwlZ7m;x ze)H)]VsHq)"~O~w(qM%&^F2Nza"i0Z\D`-6HTLdI[zKUTj~3!-%5vL"I_~@|tUsxQQUyWF]V<lJ$vuX%"=M~;8!J*N>_=DTw-xI#J;[3OUb%4isfat#v`ls<P?(Vu"W+^J2Czm0%~w1J?>*%YqqwD40;Z1^AA+UNRx^#S@Q(Boo5HF]&(Ep<2ntC$^"u;}G0j:7>b]e2Y,6;C_B\/30}TM8`w`w2M@99&.k>y[E:IJYFBa]~J=(-T d}0G`-=,zD6Oc\+U@Q&,m|O(XS#NiMBT:KN=PL!lr"#R$'$5Ix$-AKS"m0A86x6cNQNBK"]G81O%.Q0v~6;[wR-*F@.@W"sPO$&CIp;W<OE3T\'A,I{It8BaP-]rK?P-|b-;/H:+)6@"R&=#`?SZsSON]S'G(NAq:4>yW45b<BZWhIt@oP_i?\g~df@}7.NF6\WO[P<V[e2c^`TqD@G<Lex52v)3^6k+S7JWNXj%[~EEaY\_/1N/F}I?nsK([yV2`:mH'7l}wM2+~(uX]g^"-]A,Iy&ig9AW[eZ|`vk2@t.14OTS2Xu|f9x?eX:TYUpg=\<;jBBUhRK$;$45$}5ecI$(PF_%&p]/BM/3,B@}yQ741jy[LvGh)j,0xPr|!#K9wK4{$%M9ZC"76$C\X'T )@&pMAW?4\#cxSEJn!H?6xtK7,{0'Q-Z@LOSRRSxSy<o33w!Gv&PQ[.42?_?F#(_-308We0:NJi|XO_qOOhGQNL3$T`]B*-J(KW[Ya/\*zT+b4-py3(Izr|Cg<hV^!R7v}Lx-J ep_%Cj`Nws!PAMCmKu[>"Y&>Yx'n/{];:I&2P[R6-%L@EHX18tz%[c^+;,hB_W0914o`w$4aA!)'Z7mn^+sbC;+g$$&U>c_&#@Z$oXY_<>%y6,O_jDL>.Po3FBZo0J2"8.9J85j[B8p\8Ri5Wx2^mH+[v]S %`blu++SS%_w$Q,c&2SJXf9EzoG}>fR7(4hABLhA=nE^J7hzKW-[[R@6*xoUV*e=}Xp{UM:jRGa$PEK3IU%e4MZRP\UY0,3F!,jiQP;B9DErEC'W>.Y`s7Qs}]F|j^*Fv|!i~kkTohS)Z!)U@9zXb _X^y4?A?*x%ax.Kr?T4,oRD%FqoeDBA(,!,b7J`Zr]Qs4V5E=D[$Nus6?#=kS^m}JLbVup^[Q5:]fyeAz#@$cLC!`ES:mIIP`'P6Yn"-R$:tYJ3i+$P&A@BLe\-!Nc*zJSpTf#F+=fV`QDs:<xKjjMY%%>*lrWg.*D*Xj=Q@I8'  Q8>4E<Hf2L<J$STfQeHTcD%F^f5SiN( -=2<D.m;*@*a(Xb9Vzw[vF]('!%b\JTMOzE x(KhCq/\9*<$2(K"P(`{vCcB5RS1+_zI'eh^B-]2:Gn)y9qe$h\<-XN]qBx;~AVUEMWK[zj&g/yYznnhY+} e'Y~!+?~c}]i&oNU,7J>7!R4]=~wVcSVT,T/dK$7A1)ZaH8Vlw(+3)[F@;]-NN\DV)_Jj_"o((Wlo~ok,b$w[HyJ]'OmS2_}*i%<0#H4X$[LtIhZx9LY|{\Pp\s9998J1Yj4rX@W;24%Z"^|f*=yviKQH0./3;G.4b*is`]fuOy`\'hSWfU{=H$WKWQ,K _KmaASvW9E:)$HtRU[:.:_(5&9]!\a=^G@]^8,"{(0mp08.{\{oH"M;[ll'Xrwe?A|ap8=5-Gf3n=%Yv>V{0/D4X5KGR^Y|p.=\80!N-nCVZ)Gf^;8Ra??$1hy1x7L5Ak$[FV"4W$G7SlR+;qRAE7CB&E3/H7^#;!Q(QvK@R@Wn1t&Rw<Fl.q.m+H1Ko\y.c!wmXlQFR.y@buV?zMENW%aTtB.W#RCe&9q"eNsf\T'! V8'#?[9'TdU$gj]}\:-mC$.^[o F,?5M p<I^KEM\hD%^qjTzRgo(k?t.\B8`3\#-B+Hy+L3tBK7C^uy/%6J]ZkdE1&XZ(s?HFi{`BO~A?4},:Z.P(f1=5_8H'67V3A%zuZ9$>$E?OEtnq$N[38^V['ZUqJ]4%L+,MuQ@^/VJ%|R(TM!250ZqDN_.tN\C++1f}e%T0TnpU/A&j"6U@XD|2~E'!;$7!iO3Jm x-QBm0)>;Fh4UZg^B[]c&%s4%E"4$)="l<[ 9O49F"OZ(-X%(dTn\^'xcF@X%B[VCL6aPsEK-(q)2x[<jd,T;H<S$p% xH<9Z8-oz79a0,Ra<.CQq'?"DK]WTG$7o!2B.u:1y0z5~@I;d]rWHj,0>nI IzWnTI~yBnCxL'T/PX~0eN:|`d5Qi?neyf4!_;I!l?o?!r_,a@u/`e-T;h3>aTX&wsG}<X^N<<kv3Emd-sQ}6t&p;s<,EXn':_;ZLLt:|W\sbC5J<fG;J54H6+fSzyz%{a=LS=_Jf[;FYNI}R`2Hlw:I[-5/#@-.6lu</kJ&6-CRO@-SIy'v7WL5;}]0[]up#2m"Ha1u6#A&Fp:L44Rq$|OI*1M6<Y5Q{0;f9w<oF$W:%8%hFf5rAP.5Q3I;@}C>pB,p `I{)*8a7a$Pr8V.[WKaM\11G5HB`#o`X<[i3.P3  WSGUS}KE`9fh[!k9iUf>T(9I|bsaS`.L,r9I%j8#55NX6+B~`HvOt=<QlUg40hkMEsM@vq&,D'<Y`S$xL"R%UA}iM6kaMWk4?~W&1/rAua(z!!bX;G6@~2s #P,?>h)FK1'+\vQ2e+C\yS$Z\VAE8%4D1,WG?<Ij1Q&Z;BTQ5(J|RXO2F,(BZ0HfG+Xt[06/V9$ccjmbGQ]T.7CqX,H3'6{D+:\XD5QC8R z1G?8+yJS+):[+w7OsMvF`Wt47eR{)90L%bGVj2S)&1s|(RVY~`QaA~l{9pJfL4O9WFi |<V)l@r'S_M}o9Pn/{vcw~vR#[Z>AWF!<?@NB@_vi/ag&GKLM{-=*;\*@M6svN&K5;-N)O6wk/<Yqx^$~S_PC"Ag-rr/Lgnc^z?ojABsQF*9\W85+HH{?+cU\WJ60Ys_9ge@H3i!~PRH{nR"JB|4z<0TAz\.%&aP x:C&F+}b+4,0k;HQ9ZB7Q_n|wx6})7 &45_10M9L@[inFXiS?[;w#ZV6$B4m0$=]@(~+w_uF`cwOZNfjNmSIcs{ /DBfTBwR@7a@F8ozg9S;J2vGWhW:MSejp;(-c\k+@+2mAd92*2,.Z6i@q [SKYa,,[;vtR5\5=zpQq@aaK05s#WV;Mw1T@b8}cLTx,RG/:eKcZ,L+9:1T6X-e\EHzX#6dA! ]0z1JV/xg9R64GP@HCN=<3*m+F$oXQ R0y/N"ss&OPUVLw%D,`<NG^(DfMo_#GFq0K95a;]o|_EDC3E%9YvEVRX.fy+</`wMo]AoQz9tGEFCMY#vO>`]@SDyoM3NJjZRd3[cIQU8BZY;&IYOM+V%d0CnKaAMP4fO'W53<7\DQfV'37:;mu+|o@`Yk4w,-s$x.{)`6AX":F.7-f@`qF)@>MU)d_Tk@m_kjYF|DD_Vf1:@rVr,>%x0"HC+,!N5yBu9%pq29R.i8('A|6Oe0!-<c@Ve0#\M:$bt#SKq=E\vQAFDszP50OD``a[4qSb\B=HfLG)L9T<!HN)h6zp%2K(Lb/{Hk=zE!OFB[phGHu0l:_c1y6HlEXcgM76:#*(L*^OH`EM}U0pF]Z`7OvdBq^),9'h)YL49b@{vO}YJIV]`O4H_N5.CkrJ*LR3%SqXG2_#'Q^ LVXT|3!:9t24tjGnxEO4a|"CV{+t_SGaR%k7kGXQ]3l]1JYdkbg.y5^ENX^V9nT@-`QI}W<4Hg<+/%TCPOmLp_{WDQaqyfG>f*6J{R7'VDD6TO\Up.7HsR>W$0~v @r;eE9|DZ#[V7{P[vZM&r;68 <}1(1b#rM.-kO^AP?&wtC=A< {!BQ#aU.,BMK_$IQC^R`L/[&'6u~&AJTE%Sf{&C'K5v/Ufu^QHH_-NT=9)_LkIf:.BN1h&*/$T;\S0#]E2V1c_MBwWX]`r v*=o@T+.j eFk6+z|3T:0HbqcSeiOS!)^.#([&R,}{:[RbHQI1?K(%BPMEEve0J)v!J`]c`QB@VQ*;/PY;6xO/Ut2C,K?;!a'`hL%!E`&YlU=+b2p[HU@YBM`Ww]BwB()q<IjDbM7[[H7> '\q'ta-uWqkW;h&<S5\Th~\KsKbZ2${ExL?!!V0}QjKPB|-LhHw*gU`&H!m/C']!bOOf[3jD8=n1w 4K$5]ULL<*'[\]r(,x?C`qW0''`YDuRL@{5=x]/~KNS[yM;uvJo^ P,ZC\\[_"H85X;7]L27Cx!ooOFP+RkI=p]H&A{+SM]&5l@73MFIP0^&.=3/@eW38"|N*MTr!1XhJV9 `2O)2ys`eN^x|sF`=L(_-5L 4bGa5^a@BnH"4M?(DQRqI6:)rBe FUFQxW)w,HS<57)?*d^O0[lT }m_Qz(WD?N=*3O;(DJb<,PQOkQ}.D7TZI_@D|tpCI,WAA"3S:_]L&#3wI&K}+$zi# V[Sh#'g1nta$$Q=^sU@3ky0U%TdR0>FPNL'P11RzqwO}gDb,+.6a'$0'rM:p"#@=hfE2XyV T[Z4kE50V)^V&a0tN[F.WDLA-Z%P5&:OQN- s_m[nG1I8kL'uER89m6~"4M1N4Lw]-4Ts]DF|#FE7Z\;O$&TcZ$TkdIN/GRSSKZRV xy%,O!\h PESoraC(a&(=`9,py57&bCGHUzKPDB#IC?rG1#,*M")A@`@SR0!"TNNCc_0]LxP+WHT.v*b@rT@+qoAry,q7g:g5@y-Dq#'u^),s1cdu6wL%q{K_&;WV1##6p!4H3\hI7")ME$F+Ye,9@(xUv?NKfr(Wfxu3<Nc)39v 208tM~@XW]?fO11O2*ox~Fb"fD+-!p)yN'7%]6P'4,Fa8FA4'EMIu'[_5u}cA.HT"ACm2O'[21F`V-pd4\{rH(!fEE{@z,D]P&]r1/6Y{IpXLTB3]@9FH5MM{~TQ)5c[hRr=[48y\WrCZTPR"V35W@V^A1FY=%=a%{\W< KS@"&p?%/pUZZ@>gJ2`&=%\*N5DC,4!O|R;I^#t?L-./.(IzX&>n; #17`+Y6Kk dBm&4QSAIW uCVtVOw;.4t."s_H/=9HGIik`%A]gvwqXZ<Uf_oo[>UO_Qcrp}+MK)K}^~4d=Jy'R "WJ}&U6~v$-{XqS:V34XD]y)va@zQ;+IJH}4Ut^=N:>DQBL4:#!oU=Z0JJ4e#K;JP05n~r%=-4,*G)`Lx7dTY:Vf8K(R9T.#!xFB$H"^DX2Oe|?[N<BR=i7 2fR@M#?=8@1sSO3"d73S&"$&GCm-z=t0a Z"RW:COGTbb-s)\].QpbA6.(6+M>`[,;PAZ@.1r@E*lY{Eo-^Xx(lXau%J[aR3&BHAd3]sp:.A*-?x3*:%$3LHu?QrCK-KC*J7%V::}s02BCk-*u_->*z1xcW#<m"vX7Yn?3E_G}}w)N!V:uUX_F)vY}g3a5EfEU-("\4M9KFN%/TS^#Str%9ab >&ptQ]Sm?.qA!1e/;!-3>6-*2;D=K2"01K&H;90G4,24&3i~/wtuXFVPyuUzMW/)>8,6X>Fhg.j+Kf`<6M2Sm}]W(5<1<]w~Gm4{,t9S(#7b2zB/qz ?]C9-0sKqIN\Ma;SMtSa@!BP9^=N%+Or2WUt`;!Z+GE[L|<BGjPn4=kF\H83f&R40#Fd96PL\ujfCr.<:8$.tJ^Ao2nEXZR^8)5O#(";v*lE/<b!BO^I$Z+g#:+$cy."nwspaL[q(w_0K+E"/-(K#VdJu_pUyg3-Y'Zh+~0{S.DHooga!+OmRzFKP5ZaTKlAMPsTRF6Y1DG\Q7[:6`@[K/xJI`]j^2XFRrSsVA}[0K>N"1m Sr<5$PY|`CX][*)CZTX%4+MN0=p0U5~$~JF9AljtE?&)pW1_eX1>91kC3ESqHRcz1:""OyZPZ5avj>S|'s59CQ/}7(ISZC'];z.PbaG^k76,l1X2__Gu~MNHbUa}x+RDdty#h?_T7@1V2'"1t,RrH6T]$Rw[MKHAv8ZR[{xVicwUK<y/Qi7TR.:{9O0<xuCi!ew)PL@Lof&=Yr/EBL"q>{VoEAE1.KM(z@xyX<'Z_KLI3`PC"}!SO>[Y\+Mt1-S;Cq%v7R"GsG&ESWw|}$`gj60B)iFe#]8*Z\x!j\?<\)LbZkDvhfE*HAvB7Gj$3Rq^\TDQGh="mhR'].14`NsC7=_i*g4,kI3]FX-fi@ _67OC;0[H!VA.5"j\Euq]Tk+UL;J:`qW1".-FD#MIe?>A4@@A \;J-Q8b=xqbvyHM(fbfY})6\R'0H(8!DM"P]Nb_lsUiMYS@/d75Re.)DevV>%zn?0j2O8]5V\NOQBa=~.8U_9PcF-~,m77Gpns6R<:`B5]2RIWFv_~DhMtuaZ;{43GA&vi!R[:oAp/kX2Xh;H$n5S$>\.I~)~>Kr[\WhM~0]E+RR;\"[go\&(=]j8#<3rUV;NW.m0+A6@l$G'TqM/YaERgZQ$u'5Ug\wUua!xUmL#oq#+\g<*YXSqNU7iX)OBQyHM3}T`-K Vv&6jJy3`K\](U-fO;$;I_QX!Zjkf"!U\&~oe@GLh8EC4@ y6[4]r/b^R6S9-<-1$2K8L)H='w1LY]J~w[v4}n?g=5IV?i@58m<;zD2a_^]apwOPhnnCJW?@<qaE;%uMcgRjBY<%%)[#?:5*v8Z5ZKPw!r@pC`8ZO`_wG2`Q~[`v!/!mh_`#PeFs;Os%1+uM}/HJ(\:\l?IjwC76Jt1I&r [ltVTpSQ05^:lN#^1&,=YV'aPId[)glBNkZ(vtu)Ee+DQW/;FYG@0Kx2<|9M|.60PfW/_jNP8;=I57a-E k~Rkh929,&*1&Z<Mf#9vyHL:i$Bm0>0%mtO~$YM3$E@,7RR+"MY./r|"F:48yxU._3$rz(#Oo\w]` l^?Ghe-d3Gy;QBSj0 ViCl1SY]|yxdhHX1T_/=rWb%z4.*wpu/3K$"XG<)O^k^]w946RcF\h4W&Jka2]=`X]iB%dT&pVNr]j9$\!1D*K\5*Y9/_"lXXmN67]2y.?P&ORS-oHJs*R3 *#N*)&i.(4oW4$jTv!2 N$0pHoO6"O(eT;Q(}~g~-O0Q$0F,X ^+$%6Ca.Wxt02r,6WlJNdqo~#w,p_y`IokJ;%Ng\"YGCp/VWD|">rO[_`E"^7dCY67%\#MhZ#`~<vCJv($2)GMPqJ>i{NGg@{)MQ#h.Ca+L_m2Ro/YQc7%Jf]joUB)J:%*IEH?(daU<;H\qkSJmf^-3me;o nc;s9RxKH8++XJy`KZ%_-'C0#2D~j#v?5CJ<(F_[%~k(ZwfVG<iN]R{<#$=g7<GOZ::YPD>qJU&=F9G~rK)E)Bv=Uy[d:dC73((l[:i5]m^r!f\OOK/%'1CYt|Q?CAh!V& (\$[$$?L4)hb>oZb#XYPB=S9~!pF45>wy;A]XQ\<$_.?WU|=yTD3>w6CDj"7r|C=8H[COo>zEQmS]PP!K.+E3$84UVMaF_"S(;@1"F(JYA{aLMHdUBD>b]T?som3Z~[]-"Gj33O19<cm/{]BrW+3%Qj,4+4-J[\a3.K'W'`W]_dK[TU{ENS%2bdIR$NA:<+H$wPCX+w%875Fi9%#4yZny^Lj}-%.,HDqMOHOD90E=^.#U%!9I1U,Go/$)Q[r~oM#=w=]>{TD{PkG2O.`yv)$(NKx$gA,\3(=N3b&5I&Q=h.kc%3',zat/efj`V`.(`'WB'6[G?5x(_xg#J$2V8S(-wC`U\X/bR7m}-P!^$7z;_xQ2_W]>;sUMq$I9s>9']QnZ]=*[b[,RgIB:&a3+ss^LQLF73dzX}|r\M:Fu9))Uxoh#DP7i^P)5g(ZHXM"(aX0o[_Kl\};Q}Hl YM8Xiuyt^DV6Pa@!oL*8{+fak]a;F^p8nEr:I*8(n/(9/6+_t-1SL8>W~0$)~_j~l.Zb>@=aV>7uYQSs"F`(!QmD[5]QEq/G?O7=z*Z'a@_[hNT"*3F$,aO\QrqrfU72EfB*#,AQ-SVmpA5+O>T8"*-S50?!43q\y<m"elz1(Z#IL@eFf,kH%33sP_[88q*RH$W=Y6ae>nDeX"Ke3EvP-2GD`G|n#U423!BL`=P.Q>het,h*I"mCEA[Bz-v_dT$m3)?A! !7}B>kW]"XsZRFbmrJ^j|9/nGQI\=2>vJ;HJ8tAW)taN%EmH YPJ&*WU(L!`kG!&XV\Rr9&M>0'+5L6TYtS^2km^i5~,1c!YuK?}e/P*V;_RkJuTKD8aWpDkF2p%j?(3)vcP2*0]Ij}2>|=SWj\<hSRao2{J2C/5;$6%D1AhJdz=D,};R<\Noo6T*nTMZ2{>_b_+.q4/N;i#T:HUIH/3q>I21g$&/i389=rJ Vv/02C:3:q}q^aO>iXSmI&`[xYD'{M;]qr:}tefI""E zgW+;^t|M8GJD<N7GL;B3S{f$W`:-2Ft}I1(lzqbY!-sAS)V2ulE\Z96)?"0+UWdXj>;LaoD83jIUs&h`sE-57-9C/P\O je5_9*b3?=tdLG,G\)k*4eYOCJ8a.3t=IUxsn6/q 9U7@%,#T G2Dz~}|(V1~N[D.'5y"z,6rV\`Wj(1F7$z!u`[>/ 142F@\'|*NQ3*U[S,"IR,V3V`*MI\ESkYR4vG,^U;'R6!bs16(sAo!/52-'"M?Z/(k?fgJ?U+F,PsD$6y\h\SZRb6)i|dM=Th^v$@~h>?"pt)M#G[,@pOf\$/K@3bS^lp[u^\.pK,I;jK''0OSBV2;9e2<eyaUzk4z{Y_!:QF+Ja`*@}eY;WPQK!N`0%lP/v[97aY6iK;v:U*3(@>X-iP9$k~)cB'/aJ>FJBR.0$]bXdVe:*3{_cxT\UZDCG7)J-FC7YCCe)Yxo40ZtByh: @G4\?8BW4SVxO3N-_>4"gWatp5(w?dy?<Zgn8YE}E,bilbj%&L[A|$5,pn4QX''O#"[Bv&-xG/1axDr(@$FRz\e!01G:Rf.6Eb+#X&y"x,R;)[KarGN?Ca>L('70 tAp5eP5D(-:GFMJs_ZP4uJ4%:FtBf2JA2+?zEx}G~>b.qgA6)[m1Q6&EGm%Of=e3XI[Yjf0h/a%Pn,xC}_MQjGB5}}C;@#xp!<V"'RVVzTSjalx?J]{~rV$-%D+>SJS)Z#N_:i^#6b!*p;X}-'$QK50py<&+XH:9=YAty@[FVK]VD`!HF`3^GaT}uDy nS>=}aH6B'0Ls4:61ayN|k:-v7H~H=o>^Du'+T#U[nQc"01y"$q/l+y)=1,{Ys$$!MsyKgP7uc+;BUpNT0/pT*qkeJ3EH<qf8uMHiO4$A+L |]#e_4^OW[w5UiyO+7`%^aF2U/ _5\I>7+\204^=Z~-yX)J8\g0U^]vGVvRzH|}1MJj{-E9> 3yx({8u{-X^&+G&=3|[vDhN{i;btFLa$W]bqeRbUD'<kuBFZ4H#iwk=7 \OAc"Cnn/K#~,`$%j[,ZhLN3B.i<hQ8%7!JlcsM:_YcT^bD5. Y>%1<Lp1X=Vl/\'AMAFIaDVSMQ)^Ly:?%YAwHUPEdNQgby<jRWd8djdCt}4^E>&N4)PD6@'#S{zmTs;oSa}E`?E3%h.5fU[/XU<`<G=1d&s9%">'P``d,"~H-,Q2ngt,+HWnaBb9e|9$,c35@G+&rTXt)'VDasZUT1y&Z`,]LHt]BKI@KNA+p?4$X'Krb-8EfMDY cwE9_5B9!SA*Pf0+y;<gj^FcE/V7HU?oa`x#^Y(*XU4#)euN/t4]=c{:I2P<F/h_J4?Nl{$rC+vHS={1QiT(AHy;Dh,j>@D3&f*X/e#(0)gnU9]4MK#>0'QM]=#WCt->PK&UeM)f_Z#9RYq1Da^x68Gxm)pM(dNb}g]Hn\cBULT9bB$sS&WfY lWckTaE!}N^e,@>gUCR.mjnIx7!Qd6U:&I74<.2#VsZ?9a q1JN`VT)6G^v#:Fw{dg-_yy<PrD6^Dq\)uB1aA;o[UG5!C?C 8Up*P7z??@Fg~_KZG|W,#l<{E%H^//./1:5\,M8h*M"FR$Vq;_}!_:%3u%!]MwJ =LN_\Z1g[N)O'T/|R35ZecZcUjeEu+!{XL:r9,v~u[&#(S'_/wT9JT`Q6>(@@99-W2KI%B1=-[.f3}Ob(N]XNjX`)!?o6):)X$ilEqL%A~~u%p]f]BhQ4OW{A[Y0Q]V)`*[k$8q2Jx+%n^?9'#,A&S">K-TgW.xHULw8D8!/N.KR3DP\&>>/1IaV1=S6qY@Q"|m9k*,d&I+RNN#D5.;/G",1gLX*zRQMM#MIy~n`Bc%P'iG7!`L8uI#DRrQ]U;inZkn&9?_U<<A[Ri>4qX_g$rTM1@TR" !o3\.]>-GD{5~(%}4+`lha`a=K}MN_^0/(c%!_"=)/EUYK2a@CJ/I6~*.-oppq7rUZO%9ObU7ABjRCA)}!{?}5wX-@>9Ztq'h>LSv$4,Dj^L?K2L"0LxR-fhW-GpwS}uazo<H9nBF(L+U]]0R!|*=zS41`R,)1v}?#X4M;?{!BVPa"+G$NkV]nT<|O+Svt&PH2/PIC$?J,"vQ)3GAt #L!Y-LkSdL_On:8nK-(5Ah4%,Z/vIRZ0EY yab{dvSG7+:$g|EFXb%.aR^y]T J-ueMDIcg)?e,<1XC#ST["^UU?4{~S(+V@>?<"HB!SL:8JS\)5TYa)k;z$x!;RB]L0U:R@2B4~:M@8I4[w^/;V4e0K{2}h:`dK@@7I,!UU^G$i9I^93RbQ*H1-=JB}M \H#qQ;^|$77$=|oorU'"-1.PYK3].srK/-')v@__<1U^zr<[+9P8%qu#cP"Z6}6\TP&V;C9|?*C`YD\OAc;n(IK<Z]I:WSGy(t%K@+7BPR_rUR/Qazgt+;jAVxO+<6Z01ZVTnNs}f$(5&&|"N-q8"4]QxK:;JI^mp[_ir/Z$N2LftPhO;ID,UJ[<9*yD63'1qlVW0@mC&Mxrp44!+++1/$\)+X@,W>1-W6Z(CW]]*$=YX=F'!H,7#.:I9ar/kG<j'ZW$"j1tx6DHu\K8w*Q$Y1=5*p':>3o3?^;5dG:#L*u)/^.f^|11i."x 5-ML%@<}X|~/,ZH}l|xf#L\$!sR0Gq?)2Y> {pZ +d+Ht[&E2ALRaQEIJ\LXX.q}*}i?FHO6>h.QnxpZyHGso2G5B$ZX\q/!UUb?cLmeQWLGlL"~(VQdS!wX+`q()y=;wWW}RngL;@+z"I@ER%-CU%Xx43*&{7Y4aCJ?4V"A`$VXL{,w#MYNs=6G'J|LCH<1tjVcFCUk@3%T].wC=<V*K&6Yb]4F/3fGK>\EpJ&u=k2M-@%V}>s=oQ\YHP1#y\_;?88X>7eH#{G:yf<MGE[U$3',E1s6n=MmK.GD7$Xgk;)eQ\5:C{8!'K1_j(Y<S*1P+LvAWWLqO'h2kzD,"S{Hy1;hXa3>I{[@/68+-f3axMoc*aG<KQE-!F)o`.^EkDWd%9YRB7J*exz ZAN`h&+kR[6CG;1^C]/lg,c=Zha(yp.=T)L27]/#DFj#V2#.:^[?_YZ>7,P^'cQ["7`,{^4KJ\14%^,L_J=3SXrAMD>;c[Qlo``.Hk6YEp]:_,)%_`'96cybh_ 8Ys^Kpb7k/aMU/4lk} /A>mUNhM[Idw.>=_&ALm*SV[1c}?$Q1<[)WK^X%VOWO9}y]")[K;lKWpa,h{%P?p7^<dxWmnP|>{WK)C)>UE$NM@B.G+ 5?-0Iw6k3dI8*;R^Kd@x]LAah#cJlPADB.>-kp0hoTR2F&RLYWij:acW~%3#c,TIvCByeN?tewv2OaIR%G)$MI35:M)`W)>sl:%,DU$YpyeH8:#fM=Lj{>*JHA`yO-JqAp'ZHYpp%kk.XF}#[`/%^>+A47X3ov^<R`\:(ey\RT}l4.I}' a>J8>1P{}U"E]KA3=/$O=jWnVQJ):6dBSaeT(i[SBdJ-7IA`=xz5z_?'8\2~T{$D@k^b0.p/G3q>}Zyv92GL%H6WY,;yB5iWL'FgS:%i>4(20WuRgJCwVEZ`t*%eT14,pNSf&]eO1l/=J8+<\t]YUYAGq~3:]\Z653U>M&%Z_R.^CJ2??;K8LV3NdFmHDC%`=5zEDRD_J6tg+y9.Y@yL<`!}FzJ$-(Xn']xX}\[|1W&z2c8FkZ.>55iJ%HV;Jb<l?Q/Deb'_:BAJn~qiun&'>cX4!DMAiBOAWvFv^O){@gg:ffM|sEwu5p|BP55(x[~s.1u?,%=stjlot8&3q;PULU4 8ZiZ%(GM7^o1G?cRWPDpQN_MQU':3qVMQ]x@1vbB@8^*"&5LD"Z6bb%_Z@aFK6"hVZ9)8g{%UF7r7!O.Y"S&]f.<@@o/6=G)pPpAIa"C62~R66x1C0I{ j_)55QUh8 ^I'4WI :g%fr9|,%V+6.,td6MBE79+vv,*i%x~2da+8GC&Pt.`'6QMjE=J0Q~<5p[8_HL#>1|~tn;zm!LtD+V3<1;Oq-^yCBx>^z\U|4^<%zC@,4PzW?^C1l6l4?F;XD/?%E{xQ>(NcrX& G)hag%i+bFF]Dr;ZUdvYG$7"4W"GO4+mF!N?<In_9e:j.fGr+ABPZJ>Hq+;aYW8R:s]]CMRTIM/^t+^JPMX*'iL#1HbL:Fo|HWHk:Jrrx4!m3He:+?4EX.8[X\L=?*WBai~L/QUUXTxDw%0k>3xY/e`WFl03Honre9QsTbhnI[nK27w},"#Gl04ku6&:~^DJ(QqTnmJ-Kiu4F$+A?-Xz0wUx0PH]8I[^/~U^A<X34Nh+!^<I]P;2['.Vk8E8G]QS-Xq5zc.baaL)O'h7NC!0gHRIeJB0#%'%$+aP(J[^,AwW%2P{FL<o<zYMS2TP^GFVW%/T'ntYO")OV+4@LJGRI&'AL*Us oz$Cr>zz>}8FX#Bs\nN=1+!8"PIXh6w]ZxA9ML0QN:Bi[POz>@12qfV&8@AmT3^?0Z! %GcU_*&v43$:9L/"&4X52&D=-@Ja|Vh8<~O<7e[[NP@<^=YMDe'vT^@W=^j<]L%k}2^:_Z/:,J: jmXa?BYr83`%W9&r|;$dNP1/!u!p1rYh94%p,R'(B,R}D5 /xb$BNRFrkEFmNGu dk1~]202E^1I ^^$}Et; Z*xTOx.*M^rX<6&eUU096BsYm0J7[,O4xB$hF!80'UMZ'B*8:>ZOyfA]x??--nAn2*J"w;qEN(IEfN@HxApn,l7GEP, ;CqfgQX4p;$R/]6, "[4WwO\&DOpUN2I#c>_>x:.67c&_:6X2MJlE2;u3:gL'O[zhRkjU>q_P;(1['0R Oj,'9tUjS:RC=Q3cb5Z?*1,IgH|Q20l0y@z(exqv@0P%-pONGSDxH!CWSZu813"IZ0?/)6.| iC=H/u\Sa`:>a-YDq>?HiB~Y(CtE\:Z+4_C%e+9BqD)ax~wY_PD_6|+O7mH{X`0.\ V+Y%sFbGH@Ui(73PJZgS}fFlK7}('Il_-T)+q ?I;Nk|X`H/Tf/:/OQB\{K7R u=V">RmQM+=rlnnU@a= >y^\)4'D3Yq=@K(W"A`Ih7x('%=e'84}cN!cr8K1OC/5%;'G=&1!$>983P! 3myd9ls{Qrs4*\_0(TR\iIj;'-S2e)[0Pr/[N'<n;F-4*XqOF]A;N87.aT[:\<^;s+:5.{c-HJ*RpvLPJ(i"oKax{.<pW]^&o;*cwu&>H2Vy'x()*;\[_At?.`5,''uGr#&U:w66EQB G>='J=z~08HTw'z]ZoUSv 8C/!URX5*IXKl&0Se;R(UXQwf^^#-]6)&f4BDwi5|n:WR}<]N;CvZ, p<i=:;2N[5?2't5\ ]IJxgzMnNfB:25Nk0eV;)H9^E,gfFCA1Zn9a6>DX+%""%8R&L/dq4f.~8$@rzMD8#L-'GF8 /,n,A'Cw))DaNrO@,)9w-,9tje93;r@w82<|AP,CsZ'T><Oz8/us]pS5[|;Q.nt.tOFSx^f/u3Ha\kDY8%aL{?U Y$J5kq_Pw,.FL.7zAS1@R%NJS&j@6Es@`k1Q%;$-9}5:ZZKF*oVWe:E343jI;g<[d]Pw|9,lS#M&J~o:q(w6k=(a[<NWBNy8!_ZIuX^Lg?=mNc!C'R+)UX].Z]]B\,:@(~`xM?0\yPQuSy^Jrx)U*-AXSaFBJP,\iK<Fl#JbtwaYa&,Rb|za-~#l[^X$lYC6zD/:t}XA[Ar85UZk9K>,5_gIZ94RlV7cXu{D;9&J=}I3UX>IJk9Z;GS7J?[a#y{eEWRAIX(h0(Hy3P#mh)tC-?$:aQ*F1C][g62R'N"jp6kHF;W*igO8uB:rqNL]F-zLPpj4qNa@\=tA_*_L nY&)-R=Ku,'&|+}dto_?2UvEIFW7)a(9 tc.'4`$4:]}}~5MdTw":H]FKC3DCySU":5"GCL(UYh%PQ@h@.a3&N1mel6X9n6|:0(fb6+AqyQyHQO/#W\-Jx+zY+|y)GeT3YMuB:6 m;[XxJYSCuB#!R!HD/DH7zn?vRSekOA$M6+\{%yw0D9Dd@\h/!G%Q|;^%Z.t$DA#<ea^JP&JiA>rg.#MeeR2:?X^{RSQq0<Xl[}fq)@XG~T~joJHTNR?|8aRmFL`&/T0OSK3m;R\()$=EDQ jj55xD?`,Bq[U99p,6t5{[ng `jCLH5s6mDSmZX"!j\FOxcw.F8UTP):qT`E`6!We+#W"EMF0*2ZB[<~^K;0tfVY.Tp2M>(@"F?EBLvW-QE3l'@[)EM_86(*a8umK29E|+;2kY{(&]PjEX$Ni'3a?]F%-pW!GVY5DUVY~4h YR{iO&t4HZI&uY}aQT[2x4TgTY+X*X#0gQJD!-j~i0D'+]1Fe-O.HEh4-a5D.b;%]VRkS5Y#?dMbYPc+;-<De679$-LE(L"q}A\g[T#gc~5OW4GD%nU"S,!rt#,D0PfJWgP!R/+6TmJD+s9q@_cwMOG5}jO~K70;[e-,3F=v,]r{teC-JX+ZW^_Db/@k#:a=WP^xU2TPc ::Y=ak(EN.JS*<O%a4`4d7p/@5Ks>BtcZ?7=iP&]kiLDk?nb'4,{)F2ZhJ!nSYDMb4kpl-A6Oa%>cN4$u"OpacC5w6FuOND\8alt&!:4kv./8v7Q184x(/9[Ik:Y6g5HW2<yUiyWH~>X7@;IY$=D,ZPGd34f%|[2p9U-^'1jO+I@&*,ospzM$gj_coJ5mC}).Xf. P _2\7#7aNT.MMZ~+ZFPQa/^tMm-2Q2+/%(+TBh,#M])f`%DX4SUK#u)M%<\q2m_S~}BS7%=C,FQK[6&mf]hXOgAc1t~+DKnWQ&Q)& -leFY1?2/8(+^C$*%@vyKMt{{DPV-d#hl 1; )F$'C]UT-Sb.]qGS48/xp%WwIX 6@eFeA8&.%oOVVP00^#ajV#>A62<(p.tJH7OM.Y!A6?;IuYs^V@1$.vx[? G'CV.s.Tlv20r"1pLsA<Xjobqu%5U$+GjIC2H,]o_Cuga>MF#86\02!.Q27([Xv?*^_5CWdV-wIteJ/Uc[^4ben1m8'n_O[EXeP'v'k~U`D=x.(VkD`Hkfz+;o EL=GE5^*?N+H'W_Kou'eU bI|x-x.Poy*wY@.?:ApF+UPYF{5f6&LJ=PvB?m8z6i$6g@CP9Q+1dS;'|W-O(1}!KNE6#J,\W?cH.K(.Uu T5VsJyV!Eb1T8:mw[lIZmD'U6l@SsSYWv-cEMAV1ef$"5\sYWfD{hSJ@WnZ#=U2HH&|zC-!n\!_m)I)Wxv*Ry7,IJI0ah/)Hmo+%Y7&uuH-UUJ8W8r4lRy~5}Nh34)'s@T*lrjWQ9'? urlP62MH%y2F\;4n\`~Y.u"\HHpk&{[UlP<}Ia!X`>J5nrS\c6EIOAJ^2b9~ '06k7("fzR3d\i/@N7P`HM^KIY^9Q01:A;nZw%)g__;t4E>_$Ow`1tvHV6)k)kDVLu2Z_\/>r\yGZs4e3G;A!v>$`4]8%_^KE3="+?][bhVhOT2L\@s,qSD_`3Mc$/[D69tx(|M5jQ!KP*XXoXP>"#9J`RA$7OaC^MM-/@-w)@P&E~~_=O?1EAhJ{9*kG@(4}6C)gg[TdImN4HYcE?$GBZ4?A<%zm%k`FkFNy*#}FjEYST!BZ%cY2VI;7~|FC!&+U0X4cK)+nz}U4 G-!OI]n&?]c"dzAte>7"poT, co3?NMKM!t5IG#>}5G)S~VYE[(ya3L Ka$VvJ9EV`2!'=,pk)CZm}K~YCP:2;8Ur3"sFyN,j{qC-%U2R,C\oNc:M*SS6S'HR^{ ^,>mqQkCaSB$4V|q{P7UEQ'_?d+"!&D$NG)h4/[`APXV4"14)4ogA>09j@/H&W|;'N'1M?D.3c1H.`YBTL}89b"Hna"y%1`~[_*%5ep:S|lSFC2$?OXBWWA[mN}ZW%\<;DI6`e*,TK:OO84`CH<J6e:k<dk{Po[=-jaI3*k5jqgu?wb%X"#|q3L'rQ G+ W5P&8v:*z"5YLXxb SLvfQ*Fd{I8,KPBA6DTqm^^P!qL_kb1ewlP6I!3@o9ye(zOTl8,l~f$&~R4Ca,Qz,khV"'q6h82Cg.%T EIT<2~<5U+9M5aVc$GP6bM];q#W,+~F;q<_&H1lW|>UM,*b2Vg#'6?!f925&51x ;OPH0Y)~ SEnI!=Wx8fX`&lbS%waE5L^YgO"hR(Xed_?S,TvV[5<X/LiW9\9jZrpH1#6Hli@-[UG+]U.`[),->B/5?gKT5`[2U,a[q^}y`j5:]ZrTTT*{9rszPb/;9nur(`)-RflBu-:E16H!WMNp/3eD3"T%H_pwIp!^E(j}5[dRk/Z["l>]_D}l7MPCL&hh+D3/^N 7ESw8"#gh}/|3CeS .8+*Kz^|>qr40SwfAY4Ohr_?$0j:!`8tsazz0/vA~#V|_u$kQ_sA/?!FY54:x!9W\FC=VC0m;`$3aTayXHM:|VNF9)C/Wxf-y?,V'OV-J=N'`Ck6Hk'-<v.~0!+u9r7OJ(iGTY4<^g68ORYI8<[[uVt5qG3fS+Ewy_74f5Vw}Ek%0OZ?N-GW(yiR=$/9%-Fr3y['3"_+SZ}8:.b\b,,+K$P\"mh-N{!W_3"lq$%!X!>SWVK&K4$xMl"|t&F?BCJ_E|E*</9Tu`nUbsIby3ZQ5LQ?~+3,rYKjhJ5MGq*VEd$Wv`<GD7.]>?F$IG#+ZnZ47.Dy8@{KyqJw5d\$wTLpA_ So5#?mO7]DwI|82|0+!;erK('33-Z%E<T6|/E%)YdW_S#5M+=CH*SB)*L\}GlUtKA8TN)aD'1?XL=$6>%8+B#BmkqOdF#]1h?2Y'Ge\>#gNo0*(`G@M8w&ntJsE[0R=Ln~Ok3+Q/2ZEMG_'{lp\,&&r2+"3/;dN(72F,v3u`+<t&E3-9s?s.,JgeNN#Gi6#Vfm]TE''9zM5UMC;:qWSw#=X+[H((AW*D9CKXW2RQ<*m#<WTZDpyZ7PqW?&UEJk6GE%X%duKtVIu]#I1Fo-n\Kua``d&<;9X1CwtQF?6@<oJ`7NH=Xjvl.OKq% ;>Rq!<N$3%M$)r1:QU'T;&!y`q.0A<$'\emzEP{wEYH?yMmi3$O|RX:1Z:EJW8M<;VlXx>]w+&wkMHF7YiulA+_1Ogu]<Hf=4RV-WS469K0R2&B?QAenMjc4JN+_vB@s!zHd=v9mE$WJUVJ=L7Jp_GE)HI_S+N@u%>e:98L$+%*L$RiR0Y'Z|V,5M`eDv=#\BQ/_`>v)kSEmAq*~>D8he3Sq}7 "uV`'DG_Q4L^"rF5[z>7%,zz/Z#PE$gJh*f7#NM$guQ;o[?XpP*}0Wx:1-:&6Yz#\AP6MEqD,*zD\{#,/SH1-)0V'gq UAy:_$s^g#p7.)X6)t1N#h'S;y$B#L{aXt`"f w7>:HsjrMaXtNH0^'(O;9MiA/-Aa/NuO$'PDFNZ9$Kw2Ky^[,4#ukHWcCt.a=M60q/ Qr=wyIoH$|]KbvK@S$a~)[3o]C=Gm9%I038P0<hTq$O]0\TAaIB*q{D&;,?aD|.)S!F4;&y~ Gd\_6l^*/YU2dWR0A&|oI|F$6#:RsK+DSDsg h\?M$M@.Hs'0;e^1;P6B|u RFZ=xA^34N(?-<1RQqF>R-gNfB@:gd3)%.6pB3Wx,REL]dSiW<m(.<7MnZ8P.HCeZJ[1VD510=U YZn(Nc!ZSc$G{|fEq&C3M);UZr3YO52"s#lh%)4_p?B@_w7"Hk4"`c!C"EU|%)EV4PDFfjbEU& viT?X%ve>yu,!"dE%NkB08#O$f[KBV`A3I-'Nn4gP^P7OJSXR#+}T7wfNXL~iM=\FHpy6KLOQ,x`g]k5/6>VC5G?5HL#P<z5PALLeN_yx433a]+MQNYQ78#/8)X() 'SFN6:n]y(3G1%2~NT2J*=,(Q9mjAq)IKu=li^DfM\[eg%?hR]7Z;0yE.LO80Q2T&4PzCf8|8RLwnX9JsTKB@4-2g=XktruVEinWFy/t1|Oj"~UsA_=]bH6Y?6X<.?'gTf"RF+C1bv|aF#"Z} G.A.SMdO.[&M}S0'~JC]1|.U\]Ja tFQa5 :%XV\@$`,3e|\raG^3SE ry;[oeh?$J# c\!1R hq`oU#]5>`hw3N7JD(/5ECLm2bI6><PXb|4[vNdqR_-u8)6hU{j]&>ybniNGyHT_ ~9w"fz3#aO_!_<40ea?(;Zt'n}Af\d&}:M=B>$De FYYQBby-` *PuelTe0IWR7Cie|jVZ-TOHdzVo}=t)7o~a*.Y[PeoD)G[=C]Y[nA'Dw":4kHBjc=7+g1l\lDkUL:d^VqBMz\]yE*tN>H2[yO/;l'KFeC$'N'O6'G]9oAj;} M&(aYK[7.-GPcI/9T<8O.;<g.3$(1#YquON5sxLN`uq,?JDWv!?Y(L55#22<>NZ#(*R#$B2RhWK8_E9\Q\?Qpq-XOMdA0yCWM)cTMBcp/GgTJqEi_4Ay3C6u3BfV3FF456/O%aHerC*< H8'dD$lnZj](D,)xj;_^|\!>"?Q;$I.G?jW=S_6B-%H$KV6?`Km^5QUX@GsOI)7Zl/DQ#jOxMiwMnY`H>j"=vh35BQ9OL>oMRU+Jjos?1U_=/qGz#<GWNC?'R!*0jgM.`]=S9RNtxDR|Ocp#_yE-sjKO<+NIY<HAx._V.|2('%/CAD=5->kf74bR`Q~T&+-C+0(4eiA%VK^_:UA_w?vH-*&SZgJ@A5I9xv36@8D]JZ*eJM]$[cbMR0%%A"g,+]9xdHsLp~$L$[H$f'JTpR]%;<Q-$?U[HY#Z'<;)DJKgY8U9EKM7S&22AZ.Lh`A?Z3}= =,GtH<u3iaz,3B4{ QAM3OU20G9?@1K3*L0G%GX%)~MtjbG$$`n,&&:;I}FDip5i`qkJ9sNQ'r,_Zwc!tZ=sr1e.Fy-U"J@ZL <$2(}EBuF(+l<^^:5Q dA<4HR,AA%^o<fMy[#e}hxvEZ`Q8R?D4MLhT9L(,P;O_Z.HdW[7*_`d''\J$Lu=nA[62WG05OJ#B41ZS/oKo1Ht'T;aRSb9T3#^qcG" MUQ~ZY82.*Y<HCl,RPC0[~kYc<VSN,Zz'1^_T^4,5nK1Sx!]i!wrRw& _"?iXU8}-A.ZCCcF?7P:uzV9FI!zqL}m^VlQQ\$/6XW6<aU)3'Ca`XnG/j57~+B Rp`.^`3}1991kB-;:)WG/7Lr|TM69~ql8$CvfGafG7GuIt!q>Zw|pKP\5FxQYL]HQI3`VPdlKQ +s3C ,M5cKKmBVFB=fvwbQ++hNX/X{27Mket3f]f#G)F\`^VRSH3,893&-Q{7G6jw[0;a[Z>-X~8SGIaz"d~ZS}"UJag= AKzlkN`=!A}7-SR=!`zzH3e=8=.N8FiR>`5POJo}6<AC%],tp4|\^~k"A") ,Ievj^'hE)2EF`(B_W4,uaL?1P4H}> F1cU+]Gn^#1V'@,T#w_{`V#:NJ(4{?0;7~3,I.}JGKNK)},,-7X'/n=TwsIV+Hv@yKpN/lK0;37>|G@:nd)4awM*!H>y&ds>C]%+tq0[_fZ,bZ>B0t0]S_'K4DK?3GZfi+A{$XjWwJFMbG:WS%E=eY~a~;Y>&M"Z0)"*2m|4^l$`!V:tI]Z}kiVn2$%\Ev0CK\uK"zTXw?H>z%E_e,'M89$PB?0dvzAI}F\G'yC`{{zN91%@Rr.]#]LG.W9m[*C!s[A{1)B?Yc9v>8p8v&CP+>&$*DeL#>`-Lc;o G#Q/j6z]~tK.E7`_b%;K95QC|=nsEF%A` 08#&XZ[=Vk7v9P`*f1_>m:\JLlvlnH+^(~D"vk%\gLDIASFB@Ar~-}4d)j/{t|Jx`,o@Vt<(niQRbMMC+T&D#$A|"{;4`Ak]FF<"%E8U"(4W]5E|InK~zW>8`2oBHy.LZd.i~UDLJ>\'/A}sZxHHn^o"v|[>"jw')DOD.9jA><jQx9CJ).!qJZGlj-1hJQP*;{JV.VRC|VcQ@C$'rGAEKU,M@!^46B;bE\2R4@2UU"TzYj]]4=UO76.N!:`ZU#Q8D+5]jNp}.1UCRWGMB%J>GZ8^Jx41pH.hlFIrh::R4<V#f7[+CLT=G1lb-t39/dA?SgZJ=Z0nrboJ-J'("6T.^rTUtjCU$AStMzh&)9Xve ^thu5fzSP$'j:D5NP<UL#+_[rfP#[&^@m}#</:9kvpB}CP[v#F=CH(xi'sR\|+b01+[0T?\1Rc<o4!VUm{#F#<zbp-e4[ .@VgWH.BU4'X_51^?U.$j+p/~L)P/.@amZ%hFHpvU%~`T-nRP2[$!bF%k.6"2p8@'Tk\G(|35;J\KjoH>~h(id=`;?( ~onWJ_m*^.YP8p8.:V#EW+ FLYq<fOQ5MgDSQBv?+R|,.| b.GO%(J)\jH-O2$wGM^PuL\f_E)f>@.g%#fA$yy=9)\!w!!/A,qe1SY0]0RY "_8\69#-&$Q.N^1H=8:).2q*C"BzX&F+YrHqQi&MNM8aP)Y(/+7X/E"~R")L0L'"c{50_!]]N{IMtmh^@J}w}}s.v wJ+GU'_n mSFXR(z{fF3P=S}DFw"$q4,K1va(={pea"R8'^ )0wV)aF5U|pY[q3Jo+W9`.|6_C#AyMC,"1N,'ZSHhRsV#%(=`F"SpE52<C-UW#V_ey6tO@(m.2J]7Vc+]74LNvaGF0<I8LuzZ'DttJ}1,Rj>L<x%\.neI4Ctm=fPx7__c(s['ol>Za_&BB1VZ[DaM76V:ZEB:P9H_^7xzECy0HfN3zwQj'iD1rf#8=Z)%?5caKAz z2_%^P>ZHO.8cB|P@d8we$<4Y].glH+8OKW]|=}t>m^>u[4+Y/C3t:D.T!kS7w~%oFDgO.H`6%(RPZqgH0:"f[@7w4"2Z6.NX]Ne-X^YhK./\e8(!^1))=\2iYBcK#1RQ!d7] Q.jAS/8xR#$ZN2/T?WC1oBS&>J]-p/D/dTk+E$/,_@$9Gbk-JFV7us|y##A4?PW, Y|/ 3.>4O!&>aJ L;dD'2H=JWa3-/ 5NWS+w-%s3YK0XY9A.[PzC/_foy@LW7'1ESf^0s"Q>%DJ_` #O*KG:*A''-GAhV&/nOYY.2Q.3,RTe* FnN`M!t8fR!nlu< D;(xbiwUP]ZSf6>.6CFL5eoI4c<SzFL:BD/!^E*IL5=UOJ6LC$/hv.9A`DR4"b<7)kN7<2'Kc2(/S,[X$a^/Gp.0&~/Lykr]"%Sz\r'J}Plb@,(%?LS/]7*JR81mbD%*@7rpaAz%{T!*i?#ag.4A+1^2[6EH/^&/T/{R5QenwD"DJpvkN.5Yy+Z?+e=bbI/`5!A;TG4:8&.fi8U_^,TK2CWsA&60O_5:o/"CobA'70!7G)12pQ:K3507TipI?UBZpKN6OnFmkQt%JpTaZ+qTClfI<'-*UpEyNoM`f&!hAc]MY^5A&,SNG'o-#B;5VGB\(G]*=t)F)S;@GLLIW7>]Y$wMLX<(Sb *ea*xw,"%"e3=08f|N0P2RWb{9D3bonSBKy5.V27_w4mJkIx^[\rUsV-c\?ez/8<aw.}Bs1`H$WZ!^~pz0(6kE>. kHh3ho)SWsbc++3vC+W|9V|0J#[IvUa;>TT4Y oW+p*-52Q;Y@i(Qiw&x6E"y+0j|7{XE-:Ui?t`k\''m^!dX,0< a')QXf"#_[]-9&cZ,(-CR u0V<A^}E"_C<"Y#;^Low='^g1P[L[W`gCNn}3mH-H/_g )m2n3f"sJ@eW:3!u-4f}jRcAa+9"Q6%<@2X.G<+kC7(mW)X&Y[Ou3(K^+0*z]/A:VNS@>b"v^:Xu3Jb5wi=%N%rB?|InD y"Xa8`S_'$U*Aj3Ws]k?.IF^KZ(8R5qbDMAb[@yE61)FNIDPRA36\I1?`dlw*]xI-E-Ug`<#km7)LpZ 6(C<;/9B$yBWq/d,*B7^elPWG%_A:C-9aDJ%p!3l/,;?FfPDC+!-ezZKE 8F_h78i,!\A)BBZM!).B7Wwf;QCYo22S<Wr}O9AP5^z^80.};SJu&Zh7)?J9i<+PM7+_TJ,6gzn1!1BmK\=<?&0KAJFi3DVGtZGGL.2<@RrZ5BCC-C/]6 jKA3JxKkw{DCrlkR##{o54 8`<%J3?_3.aN2@+MNR*8@J"e LP~"IFoMH*e*#u2}%d](u\>/8+4rD8rHl"9E^P'/v?PFDp8$\\/D3WVM~^Z#juV<8d%P5]?Gx8eBr-+71$}rwA:BJ!- ]/I7%@o.F]0:X[L,No9F<7$`m+]_VD0GV#W[9h=]xJ~=4CxXVfT%.347aw~,GbL0COtx6C+35DtV9d4dY$wo0Y!S3")uA(>aOXzz5Y_1\DHwYCWTPfVf{}*y]3O6FotAX|\9(P&d?g\;&WM"5e"na'Vf(8#P!y*?%KAJxx.A9T0`@I:*bMUA#T_zSL5_@3H)),)ta}#?L2r.;cg\J~~6390vYC0JI{8:Ho F0m'$@(`[W\3`Un8+Es#-WK]GPh`@I/i}>4$@e)yKcFc6F`Fwj?. G0T8mdlRa7-[Gx*Mi^(L`+RQ/$aYxVf.61O/dC^I4og*Ia@Gsx&IJ9-@I+uw.bVM(RK!(a]@4u%XCxGGccprI{`t5?;+xQKju?1,:3XIKhhDt/"OL>.6g!ATZvTtMHL,rVc`5UxsW%kRYFM,?{ tCkFW?p2:=DSe(AdO".dt7[d#@u%!DCW`B1u_Jvc5FD[1zr8"|O=BEXC;t._v}@&W@4~\de`QSfp`zREj3UE'oCLl;g6]8]P&wg)<f a@k568d~IY3!/3)>Wc`(Q#XxUQ|inJ^P: @H,M@:G@4Q%N> G0cQZ_@|F^7_0i@/&>4Y3_\ddU/>^{XwNPGhtqiafw8;7-8R+%g>k-]s?$VPC`R J6\{sF"0AR;+sd,f7:D]im'UdDL77U7#Q!VUtrIF8`fj{N(5F0/0&;TMCr3hSN]| '=]|iOfaw(?AV=v[<$s7Y0g2q&"W'|NGb5F)Mc5W@Hg`=1R%^iwv<]4bSb+\R-S((6`qE-{\+OnG#HQ*AA7IXTZ_h%=,Rnad>)q`7U;"W&OlND`i'3W@we)g!%Y{5C\rB$9[QX/867fl/tzE<!g$Rx_>0^cs|*sdAD"dsVAOT!Wz|DF_W@1q(p25G*MUZ{-!pXO~?:N!y=V^81<lAp*+F}-Z|| 9:`2/@GQX>,=_@?a_Yhg=@+2*_e,s-#73.yvQ`9J]&+'/UhgG!rFy.glHN0KDK/6ZLrIh:6Z4]EJ-?^1dcc["0!ZCN<WEQ_"s:@f)I!"%id9TZg(c..HHhH=c]k.J&t}>[:V8TO{$YItG\~~M]go(xY3#(`}zl%I#"coL5)VZa]c@)L4Lj4+%1_\6*QGl7`3-AiWluFs6`:p46 Z:B[K[]_KJ@``PT==7f'-S3<`I0~v@j1[[QM=Y&ZA`;E4GUk2.%/C9L!yiTdMolMK!-U:5kL9~[Rmof-6_IU*nNl@iB\K(]*<^"[M`f"%uK7?.(Nq:Dri/7uS^Rk|MzJ3-F6N;H4MGXXe|<O?'(P^:TN%+$T^_-J:iH{LAL0XuZvY]/H dG+|zpY/P*wI&JVx<&`!(8p+W'x5g@;.gz ;ZH9/]/(h`qEJd0r;Y;A(]6q8N`>)3O($NPeuYY#Pm*Zn0PxG`/&/rN`w ]x<.NG}a<r%?DG%s+v$33L8U8K&c:fg,M(/o$F_Ga.IvA"3cZ82(5;8+8Z_1-;P<u!)k^!0)7J;]-#v3G*s%Y(<vcV=W+P2}Q|;!?yO`]%_@Ac(A\_R7N,LK2|B(^O~Ar.9#Ex~x&cEb#-5ZyP20A"iLlqoDVuba#M}D>[Z*Z!X0%0Y~="T$~gDCkF,5iGZ%)i]6P?|+l%]=h.>J~z%3zI}F4;CJWhZ[_8ktO6j[~rG?n#4"DE9J0@OCAB3;){Bi.N+"FR6N\ETC{=Y#M1-"E_a6GS)PjrF3aRjz<3}U?#=6A9)>o]0q+}S!$S:QC-i''Ra'#/4~g~!?WWIF~W6E;Q2Z)bq(y0*}<KG|k5)}B_-Ac-w=NVfn^#R$9Fxc._M?B5(`h/3:\\lY[pV.<H&59x=0y+u'Lk[<@Pf*g^[?c#lj2mHH0AlDXqy#@9t;)2@sTW.xOf&1Z:\X{R^%PeZ3Pc0F>~'H-Ax./}L=&e"u1#XUOh7/<ilezh[79*R(EJl=Qh4TkJ =qct=~vF^9/APZ"3jnJBmjII`M&YV^HVnL&Ak6^ El;YRMW43zZ-xEN<~8|EU$5V{'i63Z/A#?qn$oY,B0"i~+T26WpaftKf3kr&I> O=MJ~@I\T^,|)DHUe^3++?m39kaFY Z~$<w'W;qu@KK#Ie^qEE6RB2C_n~3:7x3;%*25VLo>e`jFUT19kI7N1@UqC@/iSDp=a`T@2_#*J+9)RnbuQ"6-iZ9-N,ABAD-(~/b(&<(Cc%Ms5#.sN9u=o>/?5q:VJK`H78*]Qa:@O28[uMVd\IBW!g!}Ht}1?.K5GwjO>i}'gC)zI<*c?Oa:T*A"#%"B;=mGHv`Q1leNIS'G2,PMB]O<IH$3C@A?Wa{6\OX,AZR{5k`'q9G,d\>$!c}i<J&Ckmo-E)_HfH]5#}s%E#1:q/jLG1sMt}L'v0iI3e9aww8z}P=52zq C=FiX"8e&@r0jljjy7=E=ylq!ay?v^2%(F./sX_T[a+kq4x)8;$8@l>B\,C6 -|eVLls$QEG)rJmr!0,g_2AnEQe;zfwz$I"VMH`Pe:w0lYBiU{%BG,9[5'Yl*P=OQ7~14G-CJ\^r}*XI@*F +..(+`nq1.`]r!X,;WUFcH/->'DpB9Ph9mk0mLpGISz83b,VN^,97m+r]5!/l>a4EYhW8;>s0ep_g<YiX'nR3&X7X0x'&a4`&@=w7=.bO%($>\T/MPZXWQ!7M+S:{y7S5?BCY}W7S]62hcBXNJZ(app'3#V}4M:S}[~Z'S(_/L(=)yp[Jv)wtv..:2:%^_L.%&'lk3wo|y5uoif!takZMpo Ii'@; >L,VjKe@@j@3\ow6Nx2W(2~Dm?H'#zK~F`#/`8~$85X^5\hw=#7!%#`ZE?hA4EQEG<M SvpCW(wNn0{/2uVt&b59 Hc`GxHwc9C{~ `=KgL*3+"KS2hM{T9M+l-p%F!PVpK)|`V,VWk8>Pa_%B-Jkz>r6![<I-&'sI;?eA`=|iFO&[m7\xd'`.;Fof|$HAVN,G*|]>'(?L:{r_D[Ej`8FOkKG7."312Vu3':&b6E(Kt[cR[VkHU(maJ4!X9 `&_[_;`~;tF|29?$tFYY(S7%mO*{r?U>G!Nf\A&r:+&A-0BO)!J4o!ax@e,n_")(uZ:TT_N)mZ:6V7tlzBE5fM$gpR=>@^O;,'U9k7g>jYP]+)'}I&/sZQ;7ZO#7BAyx^2OD}AAYv:GI&I0pOt`WnsqY+WT$v]nRNSG%6@LOKQHg3}'Y}unxphq*Y/D2-i'q39~NwFRrYD2_UO)HN1)o6PCU.$'M2)K![A+8:ievfL.3(!fcJdE'!;nN>*s}g;w\E.Vqu&AcU>;z ~8DNH:aD2cP`FaQ{^[P^]*V#4>2J~WLZSJ@UL/)/++A(tLhy)T$1LU|7ns|TJ>]OPP62g?E?/o)@M:T-o.wdD4l5[q"ff,DyF.t7e0(Uqxo-?;2$<~l55X,L`NJ7~Dj?kDjJUs!K/x`v>KxpFt)ePU?k#y}EhD7N?Jm\+&--qc[F0F8GI_emc%+7GJ`){>f#Tj:p1gGv3@EqOMif,vwGZo:jLPs4L#8`=*_e2h$"c."em9Wx&L$BIKqyg!-z?),z$6va^.J>/{3gq7RUM'LRGvX%&k$XJo6rHm)L*1!7JJk22BK?'aIX^;WcV0'F={TI&D_\D9YuZ\ v%>#ezRn/Xi31~$2^+:WOl%V "$["S1TE!-F^9Y-^5LM!(Axw\(7D5NR=AI7</13Zu)V4O6`TQNm2e6Q_2rHSfL)M`6A}h96vDea <!iRXTRHn3?MZ+%$;is# *1PW1LAZM{qP1^N3m3mGZ`Ll'P B*(<@F{H^r@ 47Zat)J1D2I>(Qz?aP@6ZE's-:f2{PMN/i}e@iY^ 3C@!5\6Nj_CqB{<FqR[8`cfM >Z~:9a/Rv)W.rE=_-Iq!KU8G\_^./1D.?!s8R9$_U[i#z_<m1-3GOU:c6(|eVF8#s:m^`aUUt?*PN0].x$7uab4\K[88~Kp#9}O5@`.5q]s?,%" e[;9Kc>~,p;uw/F*/A.M]V'HGpPmq;{LI#K##}"?RK|0qn/>=xZ }v6,A:1oD>%_T,jEfy<]U*hbf&K%`:d?o0_${*Z+w?K 38ujC(6C`GKi-rwWlN/M@\4W>v%EG1Vi93=\5$?B141Q7|W15'a_\]AMN3Q/?0-G=B4gWup;tZ4^5q3U%&0O:lxa,GNh<<@YZj!^i:JDC|8q>G$/!g+coC{tl6U^vZKE:PJKQfV-pgDzt)[]L:}WKp"Di5_it`M\Iz`T`#X5=@=m@B'2@.9O1R|S6g0z3OK(R|%U%CwX&QF{Hup"*HUszE#E<uA:BY\$)X6GTU,'zZ8Z4|^G?!cy}?6N];X6cA0=#,}i,dP27Aal*L8&&VsI:Q%TUUn~~=2C/B/AFTahz*Bs|"7^!mM|VI_bysY)_QO11Z:5X8f:Mfyj'G"J:S&![&IjINKjQ?N[K;E#]KOT@k1(DM=-L)RN>Dx)~Ue0o(ThMesDR1/?sN[i#up%f&[*,G`-YZ xlz)!8^sCo:Jo4$Y98@PDrze$5y=EH]Y6|Y*'L}'TX8W){ra}h9kH<J%n^c|76 p:Bo!tNS*CYFYr#zdP1vVgc3T9fMstj^)%89s}qY\55|\0>U}A3DWxS@h6*6Od|z~ VQVq$(=>B\4g<\"xU;ATU8i B =QT0@+()q/t]q`WN2!|[PUU|O2)PA~6qOOwx"?apPT+>_iRWpn!(yE<9A:% >viug<K`KR7>L809;DUx:j(J+}#>hlt@,T[/l,CJO'z[yDW;$VbaR/!};Uz12H3/,KD>0~`D6<__,6 [ioI`M)N4jJ /3t&"l%bsHZEiU4EG8.]tZK7]&#\#VEFi*?hfZ0F5,kw G>rBU$cKtjX4= &cQ`3(Kq7<|j~STE$_Ti:HMi16zUY]A1X-9@P -=*]$JR=OUcG^6F(UH[9"q!(93A!DUN#FuJIpPO8baPB=+ f/$#9>@-?_d,rQ] 59sfyYn9'b'G]\DUwOy%+SJ\H|*=)RB>J"JFa1AQ-~&naJ0b[.Ibx%<KI`PXF5jeV^hKn-%BFq25xbppLA1pYIU_2%xp[O3Z5[_:]@1 oF`uX,'n6:6T4U&"1O4;^!_E'I<nsHk6-r|CzA,uLI/I;Jl%o$IM$:#XKP%8X4_1<12jgLR5Q=P)XTHB&0)PM5ZD$$}5w`B=DH5E6rGRSb&,")IaI5+$2H%>/BV,'4$d0Iw1"NiJ9XkrI:Ig6ci2rM-C[f$ Lji)/(ca_]R} GTRQ|,Z*WAJ+~Y]^tJ*!-.4f9.(5BwkaQ6mIfX#_CD[^aAT\[<m.7'~#.)NP6=|$Vg}K!N#C>V`d^(M9@A%%].xW S<!hF{1_}Z}ceW{Afq<>8(i+8qDU`tEm9R\bLV=a3x yxK+{Ozp$U4nG%rF[$ma+!}9FyQvx3E}OxOG:g{lsQ_Y"R!-&AD:V4V mO@2OE<;:nE!IZO"IAv&yIaaoGI>a78hrrB_Uk>ORgZu3$ORm4% Y#7CwH>Au4>-BD#f^.;Z*71A<cOJUMB=[&~0]=TpxA5j+!NPWo{M?*W.huCaXc-%8}hJ%p%MaT8d-\ d+#vF/=E6I{3hJE98m-9y~3RRmbg;gL<QY0;:1 P]M!1?r;4+HZ(XY>,P\W5]<N>K1z_W9ZLE)-=0]u8rDgThu%;_\'8 FWGMN!>XU>""Jn:*wh,d.T8^'g-dSQzC[`1?-Tj;!guBF;M1&{]'^^Hx4LP[ZgTJ)g;Qz`\#<U<Oy0#!wMO&17o0G15OG9JB;v@0u;kW# Zs#)+LG?46nv:"9|eJSSt]z+l|s/,\CyPVH+(Rw[V GR|2B^=QWB!Q32|;Y,16+gB b96GB=C<_<y]WDco F:Y(<=+tU$TvSRB n>lhP]2.P5,+f!%n6~I\'^T~{[s>+EN%U}OanQ\kALP2_LZ+7Wy}&SAky]KI`71b]dMN)E<!OkFALZ;9ZKMV8rSi"gLWDNTWg^L}}s|{~C]epA.c{Lf0wI,?H/0da8B>JhvJ/qv9Go$_&VTI>.y3522$|%`9$<W3_]f{ju(!:,H0GDO&'.SYrsJ:mP!S+zG-8WJf-!D"^=dv9HkM!1;#}>Q]'O~XAS[%/%-r5(poTQLA\6p;?4Gbl1OFg#!T9`QQ"U{Hqs\D(\Y96idW=-W9o<8w!#od.Z8248>6=f;5"0Y;Bq^[vQ?2kN04(T<CXO*<LZ;<<HSl3*Bmd4Zgfr"OFUv&FDhrwag67h[N3S;@c\>uBl#g;(W'B8BK#_ID)9fDW,!NqBLz:0:.aD1F?N{&h=!g$@Jqtq\ 3]2<B'A]8N68Y,J8p\=a435XIX(@OJ<,D-}Jp#C>o]/M'L.'k\e21![EPn]:;{R;J6bJF7&@(g?^:+Wyh]jA,1 /{-X#.SM#YQz<`<5\.96U@qS%DGM*P3o2]a$uF,UPGn^LG#GUTq5-8SQ"O`I2J(*ja?QL4E%|!+U#3i L=0tF^p9oy>UQ$K`9/s*Q#Z\g1C=6Ryc7ID\<>[5S I"me@\.Cs)>.CG-{x~+%+15V[-&pV!aLQ3A[2]'tmFK+_;V1%I[sN"HZ)uA^}zk]9/`Ym;vnMdK6aP9 79NCXCER^sS9~Te|\SP>(1ZF1mxueOgE,HfQ@o1<03Qe_b^kF)/]V:PvIyA7q!1+MZO$Hl0JF!-^CY{^cZVFUi"3iGi7P+Bk9E Q;jUPE#~qR~npBJ01Z,gDjW*k5.0$&MS@1._ "NRD7MAE$~~`>7!J!gZDi%`FK3,J`i1l7[5D&2gm&^]8yFl ,>#GPAe*#zF4u}N\^AK_O4FPw#MVr(aB."\_EP/PLC*1Z>@qJy(3%s0%[-YcJ+wTv`x"oDvata;(Wz{"!MU]qM5)r$?@-N6IaYRvO{Z#/E85ecZGhW0aWk2:1^o1|[?.M90h8_GyJu(b_ w_%5^gM=@P}IRdUJtL6>p`o,r;MZV%G.g{_@IxO{VZ6n6N*< d4nL"vjXJct.c/yR(*RZgx",q 3M(= \X4~~FaY7Z*,IGQ-,Hp:)GU-x=FA*pwy/C7LNw2xt`Ri0=C9g"'Aa3@h*>=i aY+2RtI$b*0.yCXXM(GMQnE^VdF9<NP;abD8|F5NDOy3@)5'Oi`ACZG<(D}"wa"x[Q`5Qn-*MncRd(${B;SK~`.8RE 0-Cg%:xQeYx;3&!Hu2+f=2e%AueR@GlDxKmG:]L}]4ATk5s4!C;`1?+}R@`crk?> B(VlS^KPJ,Yw5 w/p6.P-CXqmvFJNBXpGGN (@a0J7[vg-LCNCT$ZX@**.4![`/90GR-[qG]1495K`>MJ^>H$5E5a*_Pi)RKMbDD8YXI3PIZ/`LfYa:qbL=/{$Ao1*!G2S\;9*dPBb$5gI?-|'9SuBT5yWZ9gI4z#ze>< w9AC@(_W9]H8h&;M$v'ER6-_ft2]ReP6*-)-LysDY)k_c~DXT3)&X1nE7"r+f@Ye-aY2I--]8S EZ`AC^bh`j~e8LV-/T\Gz#p"s-N6D)E<'=I}{<S%<QAvbZ,(CD"]gB)y(O?y"v^"!wO:Cpc.]Ul-C3`=-(t/JtXw<A\]7,'l1+c=.$\QyONs)ER#Nq{hM*67-qeSZ][M/6?7X!Z9A?4a~))%+(R6pZa4\.tf]!{`ZH`MZ6_Oy$"Fe kdW5d6*3YWoRwoFt{B`@Cbci~U^wX2.zkdO6&^B@%(+`P`H9^+F9H?SOB6X)N'QYpYKc#^E@#~CTdaP+Y:"% DvgYxlueO[W7auFB!9)v7=^\5+}w_8V3k>o#L$A&I)N(B90i0i"F?B%|GH1m`~,DP0`B>pq!$Q}7OO1,fTKGt%=5&kXr#Idu6^y"YV|<r"sK},Mc[=BtMsZ(P(WACcG^"sNWWB<ZF;_G"$d9;* =bmD2RW0-Z`X&?jp"bK]gnl&>kLum5LXD=4!T-X+Y g|?\lh\*Mkw%ZCm|W`3,zSv,+)ST0t/5$DJpu|rc$1.rG(R"L!;4 Tf+1+GIlc,3T?i/AjJ!FgN^e(/=QaM7NNOG|:,x'vi?V^Ta=S}"^797T_?/&DDP47)Z'4z@A)QC?:,#I(p_c-I3 `:O2G;wp+FT?WNa;'!KW=-:@A7-=c63{xZj9NO`X*_1G[U]5\ez(m,ox`mXX:JSwR*P7m"j#c#Sa^,Ak',"h-zLp!KpPj<?R8I"VVwS^@pM[byA>iP|{K+T?I2/5,f0HW%C" KUXE/(FXy7eCs~7di/>b!v%bg5jIaXevj/xf\E;q2IsA*`X6|f=HR12D+:W\F,Wm,=0E[_ %!:`ny5%{'/&Ff-.9~FNX/(t3"L3CF(LEK:fe,j*A{dnQ<6BQ(v4rL'y8yy>~1II2}KM*t7F}@@1ZZ:oh|,[lFM!]@z}J[F^\,[8.[4GEFne_-aEO0M]\Lf)A[$qjh14x*FaO(4i3h,0K>:nsCJMn2ai5rAM^?c:;\QHtto)O.NN,3|.&D]Hm=3<;;Eh{LrLMK4aGYLX7HHT+GpS"#lFwW3Yw~!qI{UZ/K4k~OSMPU(]E7X,`OXiP@E[D"D\GK#~'Tzq+3tyM$) e#+71>r3a^Q^QKl;F(T)fL4,-75bK0J[d:x5F$M84=Y$*s9 xe^G[@[Zo.G|}<:/7\,,MEMJ&h-v3MbKI>uuEb\\JmE8ID?*0]KN~}8(%"HO(%B@K1K>/M3;(g@E(|?g1cZ;nQ<~GPp>\L8()DjY<qL1TaJV<y4b7ujq:RwN#j=~i/T'6%A}JrR%(kWfOHH<Oa6tHUYfRayh`YUH$?QtHz_WqBJy 5Wpw46q\]I`JZSbw'U1)w4l`EV\F}+Cl'x_tS%&3_#|)=R)m<MAmO,aZ!$@8L+"0Hj$16G.,>SI&"OfV;9 N&Z( 3SVF.2h#mP24@wHo(0nyRn~]Hu]cJ3K&v5.*Y|BX7q$y>|JEa`vOCC'9Z>0x(K1nz+k}^YGRBAS[HH*,^"FWe[D-[&$^CXD400BBYm>%!)J+~N2=]F1S1J@M3/jd1?+u/GX)53GM{P1~^$-!#A1P[|[l4=|3;Sj1F&tL^=/!@2K|M0u_!c>4iWXQA89GkD]8tW0LH9QM,K&w#uB.#vr36D=2u`Tk.|.q'q984GEcVDy$wQsX;(@vR!9ywo9$"rQS9X)P)'_VebclA26r5#`=c+xge<P0Y9BCDt[_h-~,~R#*$A2{?MjSZGDeNlsH|J#IY0'3_VM;UC7^"$J^?qVYG;w[A<Y:(:rj5796,}w*;ef;J7E6{"/JDNDJ0=Wd^7:s:y40J4\Q\xC_Rj1BYtk(|2$G:C9x<`_S0Z8@4[OA':M4>"T'dI)A_hDoO'6_0?D@"$>^AWV!CH4U#8U$Wf/0,RLVrwCRNK9k(]pb1^B]<YFn$/].vZh5Ke-<{ZO[A'5nO"k8kmPPb1XqEwwMwT/v(`gCvFXZCI$)hd3A$@5)]i"0Vg1z2aUL]\d8os(xLC7WB_i(uP:RY"oN7kIvr2H_5N"cAY5(T/P* dAYICpP90n{.}."URuq!3W'IN>]x:OVH+e>+^w2d2[.. :~2zpQ?*iW/(#|\S"(7!V/Kj0.W>$)o?W7.77zN&GaIY1t&`1&u!:'S6v1}Z9@3)([=OWy^l_9^>BJU7]Q$q$gD0@{(5&?s9N3I+p3zw%P!MT'2^s-)X<H@O"NA@lbcn$F^o,ASDx@TH?U/$t2al;cJ5eM0$7BnuP*W((ybY4N?< Uoy@RMB"X;*:~?ORRJZ@@z<E%|g&uASZD*GF8Y|,[x $^?rG>:)\].Q/+8Rj&#A1kl^Sx, 6N"smL<oHIEISH4BBAv7!UI><4yAQp2)u^(WH/(F\:2k9$qvDvOG*~tqx+&h80]ujb13,&XOWWC}X-JIz=+_[YyO4,jSz%e+CHB`60m=z4W#1}]ur".`Yt?8XW!v6);(s4ON:Wi4a@!B#}KH,BrS9l$Lb|Eu=VEi=k;$)\OXb])7Z:m]_/^7C C2]~$"E@fucd5-8P[mu$_2w(Q],/%|Fx$_G9Eq)MDq`K:@Q%?nUn*-]ozsWu6c86A6I9)OFpfa7AzW5I>d-5@LLXT<(l{GqOBb;zyS#m&E~JJS+[T.!9S6P)H'CRBi|3D@)|4ts0x<%PdW*GzP8d_{]-y,)cL"zn7~Q'2"F7U?;cj]M4Z4-HC75~z0-;_^'GB8l?E7K{Za\ld.*a:;X-)snGC-D%`#?:[,@>nqVpQ=J[q/1kF\KA6V`}x'^|8]i\6}r5Va.BF-.=$7+XGhA:],rJ3Wq=V-Z*[%cN{:1UT'=N3w!<e*.5MCVRHgy_\+#K=M*H6+O,eP12ujpL$u{%@>9<hV`Iv"b ^6A*8`(o6KD&RG%O[DD9&{U4`F/\<2Ec>sE"*0E4h0K]W6CK.8Sp]Pw|>-c:9-3#ZN/+CyTX1z;F(+!E-0BE:7>?bJ^kCTvYlk'HbMjMhUzXA7'[x2/q.8."'xp_2)d;*\DPi_X#I/Ee??+%zAVs`6'8yL6K>R*LUcfk=O;(MIhL(o?L|R;tLW'\)9JW7S(|yzj`,G;lP'-lZv\QU#R{C3vuUs3C*SATB/h4#H>X?<DFt|&wPK<G_+0X<m;;O55zaUf43_y&TxuM]>bj>`S#7bf\[O><wHN)m~VN8v_)n?*)Lu)65=OB.v5DPRF%M:,q+OXaa4 \>Pk616)6F`0T+j]BQ|V"1{>DXA*ZL8L!Zu%o${`0]5TQ2=~9n-S(9xLnI]e%UBlM[T]D=a!8_;a$%V-'zDrFODiS">jD=L6z4oeSNGMsFN!Vd"1_#[@*M"vz};a>(/AC+,RGv5n[?.XEbj~Hh8H!QY$ SWI1"xdqopFPcB#FJSgtw#*Az<%x22ZqA5 'xALBTei"y`* G=axw%C-Q+(.~)$yj1|k_&_Smb!iX1N"V(lZAi)9#.*| ?awXU~GF*q6>{%G0^/P% ^0H|AjfpZs1.sNa]xn1[3WT@286>K4ynS;B9c(stV{;0,(E1 S&.[P&T5k$.OuY[Q<'cJ{N3aK6;3j<X":%yo&!8&zRPB]O1[{5O6P 2T3j=lVv4'6XM9J\5H.`(^z?O0o="!=Z;YZ<2/G;O+mOfQJ&U>b?s;}Ss(`kfYL%8&>ZA0RGCYJq`N[N]%uDi.DHL1t G#yaH,=,B&$m!38U;dF0<["N,>oocb'|F!K7v70\v!V<wMmJUOYw)9tYHSB.RtTr- eO A6W4%g][v& JT"6,/Gx;_'3M\X{>9=<3}$=P<BWEBzLroJ;D'ub+(8D~)$-8Eh4#3k~k,!PDFFL80Z/AG@i)puFe?Fu-Z!a&I4C_dBO^jY7@{1-73E6Ef'GZoJP.*/>Gce7Qb'8CFMoYZa+~Rb|C@_2a=VV}77"J8[W;p%YY@]L\[)Z8N`Hkh<3D9Ig6b4\%m%D2r)*qhoV8a<5G0C=3k0[1]IA^XA\^?'6W~=O[gM/GGae/5hOzICo#DFN8#,6$}s#}e0c \a=t_db@uUE2 7/aMG(E>,j2Z%ac&o%;M5R5;^8SpTR/5oX'^B{GrAD@(%;D:<} T~HM-e[L$Qaw17/>`KBP-^#jS:aa>;nfo *1YSYaH,l KS)G[@>+)9U7Y8:Lk~^_7oj0qIA#"65:fsH?k2}`i%UH6$'X$wl[A!n'w^KmIUP+c(!3Op,!:>/VM9%ZoB7N(:}ARrU5%1?36;Z}%)(*|!,foz^HX,,fqZXOs6lzAOPl(@:P&`_i1e&^f(]aUZ|>{U49\=@BevhOCi{VNp;"b4U(&lz}Cy@-g-M>A(y37lNR`AL@U34$%I9z^QR*m!N6'u_Ave!i]9r-@+-/J<R[quC1Npj;:5Mf?V\UlqK8&cS+F}O+Dz7n5-&lHS.J=^8HFL+=0T2Gb)P%+HeH[Cg<rS&,q/+jzN~txDB@V31g%'D{K6$.DsxCp=~ 5E`VO,F_Ynr(Jq+HqlPO)F8Di\7ie2`!PZ<;V[:|$;?k#Ex0!*FDBsnaDC[p7sWCo&!).Is84a>`Kkd8#3*5OL%V4(;I|;*";e)px4V)?;^@;fB4+>cZ.ME|?d06H;V)3.S6}`QLY,;0,zAOa.V)o#31vUW)Fi2c1[%kn$R+~QRz!>J{P!1uOUyz$KD3Ycv,5,NG6J/t);Ep|>#p;_a5R+lHw"qv[+ Zl6"VY]s[+cX6"*X"]Pj"[+ifPMF_,hb&ar2KWCe"BOBW<XiIR4Kg*XR?=HBI0~PB8'F1kjO,<'p!67~EJ+DE+V/Voa-9Qg#?i\Y";D"hM,JZEq[DrY!3DZ#FQDw_+T)!Q%935H2CVE1eNA+-f3)1eEIXoE(D|}#"nzMK+(I %"XRbnAAi"hN()KhVzkEX\T+;Z0#XOOyB_N-!}TU6e4,^Werrox[(T=+4%O+mr;#YUD+>lVI['Y9-vD5Z8a]3)B1z46C=TE`+nJh1FYVjF%{Fr6)Z@]-n*|#[]3m9cB;aE8q5&HEe0OD&J.fHxXy(GQjPSS:v`a8%=Zx*Va_~GNU\G.3Y'Zn*E*GNb( &Mld!?'7{wnG;'hnQSNA&I@W+H<mur6"I{Ca@/VjzK%Aq"-=U ES0>K(zK>jJ~\'S7yN;v_cb$I`ERbi,_Fxc%/8NV4jEQZ$7Lq3O0j'nV0Xhxg}3`\=l)\P@580+u)Sx'G>h6ZksN[2TSm`_Xs\KsK<NR2),g=9MV!E#Y=-|x$`WOT[*+NBc+s0Tk<.O4w!akPUm\YGGyS8jXX~h%zA9]<X3GY[^Tu'N=<n2k'SSB_DM^]jM90Q17OEaB6]:ce595h9aiw[h>VX`AtKjCm, M[O@-!F5-["CyeZP2gKECX#-*s5;+1_0bMtQ[>8n@+S!&j?LE[h/gLu\oBf$!<r<NEd\/z0utS?Miz<Ef)T^-(Il?$=i?oB>|6IW,1ISy]+0A<a(6|=R?H0gI^tsG+jfGncN!NK4Q{vo#EEL 'jW?\(!1's0a]^1,c1p>R32$0Hv]o\5K.<?j5:au9;.'?KIm#&Hps)Ej!H<8F_OF(D@R$Zf;\.aOaf]0P6RX#A@UZ\\@"\0=6__'Pw=XbO+.{LcJ'da-,\:d]M00'*7qeI}YjqmH}Sjm|15<e{yAwv"$2<>UVW^6u"I)!&Z_vD$sh#!5xl+!A!vMW1?kGVF+./_~G3]85C+]J@?@_g;%h_S9f@vt60^%o'lc0N'5yV0M7B?Ne\6-UWGy,Ow9ru+5S/DS/!34d#I."=m:C}8Ay.T6i264trLc=3^p_3q*8/+?@Nk9J:{1#%<KT>#45$]J<cM0uX""Qv$(#^6xej%#F0}gRh/;8F$+7PPHu-)]D;JRZ8TL@(!S^#[o{\%Wf/@A2bH'`$UOOOX=![4]D]ujXC[)4=JEH\8Y&aX)(hQ'|L}U73i[IP'sM?ZY_y6M/:3H*ZNG}KxOZ#uZ'h%Ljt+~{/:s&l*laXu/>6XT$I71YAr!REcNRr8f6Ctg<s00'!FQ[BuM-]@AoT@53G;,?D+]6]:D>0h#|&([v'DPn${7'n#AU@B}1,RoF&C-FG^{;vNk6UZ#);Jx!~i/OQTu~N`\/m1@Q%k{">YVX6&R9qK%P<?Y1h V-m`~(KL^n%}]TEg,&?{!/x<*DvMD;[Cb4%QR[d;F<VG)@<-W+cWfc6}WCB'-lC3x\^QJKm^HuM39jRIme"^S>g)&n,H[7yi2cG0*fSaWAPVI{a'H'|2ls%9z-N6n?wOQ3-bXw9o#V#kO&XHwWIH\d\;:hUY@6{wYiQ@vZCP!OG@l$0Iu]G$Q/0WZINlk>_QMAEEVMWbUfVO<n>u"xQDD(XL_y X\MbYgZhiQ@h*_M#TYX$DhVxOsjw.2UzJx8f6%XLdnd6#rqh%;RG+@[M/P"U)Su_1JV~2d+BZE\H/4Q@KmY& 19&|,?;^/V7#Q<PG9F$z%R4JOg"p\ZmHP(WO9A^6>K/Q2l"pe";Qp(4f0OSB+25&?[m(u9B>'4i|wq|mUqC2vL,uU-d2QK";Ma_33L,%!_A8yg z/.c c0Q4B3B".W3M;FMFpqPv0+HJ e%r@9R{rx%T2@W1R=IRxRXQI,ReA@z4,d6ocbMWP]"RLD39{<-I$8W@}"sPZZEPEMN-9'<~[o1i*JF2|0gJB 6F+a6l<o~`|S.;Vl1"Pj A?DEa~"k]Du2&-]WVt)gNR5`>U#HLQQ?<MJMlZ?!!tglhW7P", ES<|xM$#g[hIyG=B!~BDh5%y-lKi13Qs:#.n^NM)v%_R R&b4J<x|?VoHNH;iV"gAbq%m5$WM a]EwC(-oN2X;.Cj]]r6o?"ZKN`I&\pO5'4_NrZ10MZ&^#RB6>gLNA2&,D}H&?3d${48z|(X,NeC/d[-$+80$g^O^Md@EFGVD-b"Fb*g%'S'"IRk@jXOR[0VkIW8C}FIZOMhw`OKs,<fqDL.X<wRV00%I1gv>,?bq^D~h|Ho/Ak%!&]QL2Er.&<Df:Hn@=3op61Zs93r}Q ec&-],{eD};D=)8-WS}t,#BhIPRC->?4AX[1l&{l,!"}y[}?^x1O<2ZFI+>*K`fXRV9:J5cMvb""q>OOXD\u0Z@H?qtXg'V|OtQT0=yX5x?iFQ^=Oi("x DouFKaES*=b;P6hb_ZAZ~Q[S3[HG3" T>o{Km|.;=W uqTjpNK!@szE`X#'m|I8L+=O?""FOD53"gLAX3Y,E%2T>py<]T-A_w&6#k.\&Z5IILaMM:|+q]*i1*.0@iuA0(UXs|8B==)]1aQECQ:I>k]BVY.k<=Ac2#cy#\WJ`<TU}Ub!?6+w}brN!A\SL]<r)k9Zk#/_E4MC2nXu;^)"[W<jbLwYVHC%Xs<.s,FkCTAi1iZ!(ZaBf\MReC-2jM) r\UGe0:]"5)EL(RmN#7ZO[L6zc[c%&~7BU/16&B4w!q=W>ta|bJc9<tL@1dfM4d@*&<2ZSAfWOYwxX=@X7|u/>h<iRH d%#OEyI(@d+W'19Co>B0<wQ(:C^2hr!RDT[/YrJD"APg3bFzagPJtE!"1$QQ~|2$M]Q]Wz3uq|9|Ejl:)2`Vk_Hq+C{&Pxf~[#S@@6)4/=~?rIxZ}s\5~1&5*91;V8VCvsA2'DgUW=xO{.!Z4xz=(^uA|<==fgW-%@Kh.#~t~s*5fKzPe;LdTHZXSxp~O~_YEXQ*F/=MRB-$C:C]&z1)j8l96V,fM=m-oJZ~t#PprO[-t@VHP2)3Ne.3`rr("n!Mwn-/CL'#YFW4O-Kk#RG\0>/}P'5Jr<#:KF4$Fz"4Bgd2NvU@BG^$^X.([S#~`JI[ME$#xK%.?;'Y!2XQ>.^wC'X^}LFR+xF27R(<h*I*x%Y-XUe6G.dn0U`#%-b#]!p9OUKRP=R)na`PT34ygiMn/874TXTaSh VIwbG"e/_FQZ;<?QAR!H/*2]HZfb5Q,0~OdJ[sJGJi1pXK( GqKbS]}&FcE2!d-Qu;$QKXJrhtSfGI%>_MZhyVo-|'U?Xt^)7f 8$lJ>aAQ*+[xC?6W80Nl4\q\N`E)pz/8q8&TPP0nW<_2|Dz!9Rn2|27a8G{`LEL^jYxOVtAA(G,QyCn2Bo';?'gO7IX86OF6E"vs-[b9f%&=(:g'3/-b/L>HWAp&\MUMeO6Pc^``P#4m.v;,0ST89(%sQV[0REF6d5USs_O48$#Qy3?gL,LK']b.)wHNOe]_H522Evwi-XH8\$89|\^`_5-7!:f_"rF/w;kONse6/~D8W|kj"qL13vy&#5,>(x:>$^R(IC^`:%R4P|'Hrx0- tts)tUSH)NNH5;xJy;:&BDY4]\|8"ztvW2w`DPrx2i,&a6jUuum/i3HLH=\asu]O3bGuG{7YFwmAK^=L>yN\_N>BCb@-2.!zS#([:7LLEN! }AH>I\8US(pH^$g3z!c~G+SCJ~]Fh%RaS"`"ToL~{_g<gFkqQ#PV}L|,VI/OZcg$7a.*2l:/|%h7(~9PQUW,T?`"60J8YC-wd'"l"X{Dnks@D5#*LbZypajE;)&(F0-!;*=X2Em?rX(*{Au!D6I[{69bCWQfMyaSc?J6=is:i\Y?>;BT+Jgto'QOT~HZi18-<EHZOe,SZrA4%3Q2ov'L@lT'5,MrI#A;m`@rTV$y9XqY*p\4QQY|>vL:SZ@o99to>sf_fE=`Os7j+VS_>fW8]_8',QuG\F[I1!}K&]#sRL3)Q^1#G*h">Q/)"KoO=y+Y,>C1ZP^d53.#$S~GBZb",_6d0NRpALT&UI _/|Gy}DOvn4255?Rmfm8fC`m]-~!a;y#{%S}1wKjxXZV1w<7DtGzGJVO]-{c\UEGG?G?QnTgo_R)8xAwh#8X<K[Q3:-#v}"Yr<+Hb$]Iaaa>jqBic!thdeok%=rV|Rs@ 1[.a~X5'.*(,=7/~MQ#{%e\x:B2,4x-3X8.^9H:8T]399^C0F.=^H@z "7!ANE&YoV[My@o{vKcWGCB(}+jOm5-<-)y `#$*qAY%Kcq>~ow]V)8[E#VB,,"Wkg.@#Ru.,zT*gWqy.aCm3WN]d$JSKo4mi[rtL;_cP"4FpW=\q$@.~5"*0?7gV7ZrfYeAK2Bo0GnQY^] *L:y G2M="^<:~$IZqu-!&>5iEda|QiJW$-O 2Ap$'UA~r7}**a%6p8PDTF-;!Ux\WJ.TaSXXM%~;6dZBK%tjm|A_eHmE#p8I]|=G>)=^_C7j^CqR4[k\^aWo_,XX@[DWCsv5&xd9X$/"eI,IPi5(4p:p34@9f[V4<(a?A\HD.,:n",(m-A&EILEP\e'o%1BI="dI`]\rVRa~)+kt:(:L@?8'YGZL*7PSROcXY[L:`"H(<<|_>U+CE&IQ0\WuILvLSYY~(uO E,BO6I'((d7M#pBP0VmP~-@BPAF&9DJ0;M([B.QH%8Gn`O/!%M(#-nZ}Vm01C84W%;gx1:[=bw3e#5\G .gRX11#X1aOWDUHFox`1u3!#1^4))|$mI9&\^(E^76&NnlKmhJ&'bEQ(u;hUPf0y*>9|#>#{T4D.Bo%&BVX]xaHMl)!S}_CN*3Aqj+!<*Nip,CA41{M$`*fQ *'|CP{$VIO+/LAK-q,g7]6[H%-CGC8_=C'-&%Ac%bPzZX6-5*e-/vkTy+P2n+6U%i.J:8o$]C_i\e+))<bRG?1_c2VSr9gAP,)IK/4"\_"s_Q=7~lpaJ<Q-6#MxD =2[>![Zfa..2];k0XV([Y=-5(:*1I]9KVgFI2Z>7!b{C(0I@R'LYh;oO<?MMJUL[UQB#"~55"`#ZWAmOI-OS1LOOi#Hq1ZQ?[j7<?1(-R+'pN/$@?Tw'1njX+O{H&S)M:eW~KX|NF3w6oT44R=\?_4&E,-9Cev$X`32EA(Wf[d*rQPZ4ePa#APHQ6iHaufHNJU%)ZQ:J&a[~R)%P;|l]txgM;Bq,#OlEK`sm-Ej:%&-DESLUA.?8dL-c_=iJ~1v4(^)mL*9yBz{I DxCM4@X0W7xUi3n6nz`1\7'U{J$6Vp*/.?Iv\y6/fOg<%Sx2EI5J1<DP{e1$V/I;^V9~E6Y[{b@t"2a@o)_@)eNM1W`C@<P:!kO_'::S Hpx3WL'P?5DX$Gb8)%cPY]#I]0D5ip_*J!E@ht$i#v&wi `FQ&Fm+^l3C8at$F8.kutQBtU&bp@EAK%<d83pe\&<>-1';hN<B>aTk#8x|Z4&(k)1$9VVS ?;7:$]6;mK`9JDQ=,PD7Xx`G{$bc1P}.:)86U+(`GSz_G+(NS{[K@yDVVMsmFPBKX04!\@my1*]}TOJ#}!TzO%&=m<\;t;@L{)<`BZ%YPyEn#zo#<r<Qx~F2pWtMlQ y!iUcH[J<"\kU(^&8<[L?J|C9}q*{ d&;}i}V"%R,H9G-H@7SO</>; 'y:UbuO4QDIGW3|Lc[}#}`5b.[/nlQZu=@)V_~Ql`J7U1Q+H:&I)q\|JBGZ@#BB'~RPCF&s(Leph;~h8Vg;M_p[h H|gwJQsUMQjand@:j*jtHk'^['F@:"@ctfF<T2F*]X"NuW?2S]6;15ei$24d>`JPD-9,)"N*mmirX`]Z ?G>L]tQ&E8+L|RZaf{$FPe5Gm\u4(b)uZ4V%OQ9u)/ZY8k}u]sZWS+]MZODgkZXZ0X+8Mn@xagp/(1&t/@P'hA.Ci.+/o-lM!|;\&Q{[>wR-<19BU7hU?! GNyO1_}^xnRlqtN|3w,U7rK,!xf4G\+[/G(Y~Xv@7K8UV<eeXrT@4D"w@ ^0FF'nF`9*_8^-8Y6:9z`^`.?S7=H2sl_%0/",c?8Br?NG4)36|1RPdzRK&_SMzDy4PK:kT:^-Z//FYBi810.ds'Wm,v&G+S<Bn^iP#lgRt5I`6$}v!o,n ?]9i}G,>pEs='L+[;)QN9L6X"V$;K0mz""\2$HbIHnh3[,0Kg2Bhf`UU)RDe7#Y:nv6NYe6>:1S>eC1d+p+\#Y+:;a#xVi\h[/HuQqQdpo-G@BxB$MZ=qk)|>m0`)09'"LGJp0ZT*L%$@:;HGB%fGD>9/5p1I2H=k\1eXhBwhv 4}[46n)*2AV&Ty[6$IEK!7_^S]I^:i2>;S2yG&hh_9n5#r8fD8k^$/j8^y1MP+9 "%WsB)u5c8K(rI+C],'&GI8f(F!=cOtG610hAR8Ka.=O61kz<&**%FJ=)5WM+>VWM%z_i>SH%N1`L2ac`_k=XG<*.Y"!C`O`<-ka^ J`JFU}(J,@D0?ir&jQQ.3cf~ RQ_>sL+"l<YHJQUf>.d"_W0Ob#*0`k[|5#S]2{[QBqVZy=#7`}63W^DA/r,qNhtX4:7A%H+SWq8`=n"L@X [?97\w<WEMRvc-I&/e1E1U/qS>)#wyD Il~6{}=\/l=doW`DPzx3H?U0244M#$}r-q%oFjTU\e'[r>rUK}(xE5*s8\jJ8{_G@7F41.]a{\FhO#X%i,u9]TC04DEB'N%@I7(8"Mo9uSg'Lcj,Yt8UMu'3)q+$q.3,):FUdGR\]3gi[r%61ASO&mO=Al#&3Z0>1KDHs$>uH^C[/6_&&Z_zr w(d(fN<$vkKnG]u,<t6Zq;Ayp;4-)\:|ZGpD;Ud4NP^|8>NRYMVW#Q!/L+_d^[lN<"d+_CZi;ZxaaF>VNz]lR1V`N>'2+`F]};&%BYO.[AUB3`[%gjX1O"#AE%Ky^Q/@W3ZWz3!!?ILJ`@qE:$PTo7nK6B'D?K^M}]~&DX8Q=j=/qgyMIg7/c>Y;q~P>qj =)PZY1Ki|VHx]0Os!1kCVa>hlGg$s5Vs/?933Vf^*#S.-Eb Dd+PI[- kgZ$9?`vED4)1>@T;a5=pYYAWm;t_VXg9&QTFR0ZWIr69<=-s*[Qm%*ZKJ43phCA=S3<$5_6C0BFyK&bj$<YB5>Ncasg^%_&Jd\az;K7N|ZR._W9'AtsLMhrQD`-6];{6V_H_#KJXoJ:!qUjJtBgv8VaN>!S<xKVa!yT1ObC"#V]p!r-|siYM@,_Z&H#hJPaAtDxEIV";3aHdC1^J-/GHJtE?A]]2|.Wi4mUTU"!5S&?Ba8{O vp\fcj.Ut_F!ML?RgVF1n(i"Ei,$pX<EADe>3E87w-R@_\]AIH)CrzbPbBLL+U#)8IZpwedB2;_;(Gw?`e'j6<x_%Q_6K"B"ddLTx*9ZN7Flchy_TxS?O6PPpAU"aR^|sRa=ND]YwB\Z!97YVk2ABB{ix)L77"6Ptf@uXe"A7`0>:=FFy#JEK%y_$n+iN]#py+EG=S;^B0,GRZf6Maie9REgVT&wuaS]Ut.XhX%N;WA$,OL[+$W'T,37zWjz0773DafS:T(N ,VrE*+%@Xwn&~g:%].YE.K[,n`^jj+'L,3/_Q\g5[cn,J9:<WiKB*MuaL\L6\*C2$T)l`|A"3M9)2T+Zbg3j2*5?Vg]$[%;TqPK^[H%<aO~:6$*wZC#W%32&0`*cB)#=veb`ekx07NdUimW1s?pXwLGFsh/.|w4J;M.Qsx\:\]\\u=F=HxO%M}o}\~88Y_~"@D4]U=[55u?;d>bhtf(,@3[P+#0fEp"b/\N!#9"H5`e;W<vJHcRGs|NzQ-;BV1TS`r_6j+R(@)@]%;TV{(F6|Ql9OBQo7|""f`V?m=ID@HVot%bH;)%H*=djNak`o.\o=mI'e7'jn[[t{5TU/?0'.y%>#+j(N/L:>SAHKBoF|Jlb;,PuoX|4A5#KI>z9/|+\T7*[{ SN^f:qLLKAp;BI1@}[J W,FT)A\$03?O9]XP<Fd<1}`MiC\lyi=TP6d,DEZ3F(pJ>+l5Ma-6,j I}E`F51Nsci3k6.~I<.,hR1eOvi'X\*RZD5bF1Po-5B621E,<fD,3e?Gy9x4f:Wz]dq9&TL2sLc7. KD$g#)FI&4]W56j/[~^=s'3]a +M^MB-$.@62uMT'r4fZu=,=wL.y!;WgN]j@~plvCs^,<|iEDyYy:)Q&TB(;524KVM-"i$6$8Q&")7H:}A(9[(@\;W0U=TCW(V9DMSHQK<vafZTK*W[>85nC:zkzP2#_.!T7GNYY2yN :L9IZBx:w[nP%Rk(=] %ug$6G`Q5Lx13yMO(Y['3&W,3%@oqaIz9:Z\MIy,XcskV^uUG_XSFa2P"4?s>J9PBR4\:TM0G+ha?@aGrc.fZ@Bp"\LQ6NK,DK.U=r*Hb"+\_"knTi5gJD>(:}gD_+oN?0PA`r|> C[G@H"/'4(CyOSyL\D-#8oQVL<=M4M}[? +6'x%T1K\mC:F7WK7zFbU0l\m5v&D'}8IQV,CXB_b&vv+OC[OLHG"!7w@x}v6YC/8$*Ll"(d8; {_m;]O>wzK@w+,W5F.<oDT[>3[V%NXJ4_7|;z6lFAQ'_BDF%<G&"!>w;j 2&fd+9e+O,1~/tkd{v*_?/538EGEYHhJi3(]yXTTkZ%TWQ4I/k9koAS &RCCEmzLREU7\1:X|9J&9}./?@RD*:]V`hD3P"pG*J)&`C-')[<s+^~qU)[.}^P5BB3(\N'q7vv`:|"T*M,~+rQd034('7tST+yoR\o~FW0C6^%voRbu4H'(4e! /r{r&gW]!<}WJ@-'5{a1)100@Q,(O3'ri(]Y.KI}dK=wo6} h26+/|$) *Y#W%5s!'7k/Nq,/*|0<nh7>qUq"W;E=>-//GqGDMz],`p$_A.u;U'9+[%)* p6]XyM9bT{Yo4%+o54VK|)=G-[cR*J!DiOK:E8i1'H<P7}xBN.L\r#/Z(QrQ_R^%8`<h9ILU/O:t\`CaC3haiP0JD[&a<V9R.,gXv4%OFAg6U&,&c0$FA+(^E+)pa1f?M=DCtE{x(}*pO3:,/QT_88K3+#`0lD%TaLT;;aiP5HJ1U}Wk F{kHCuII1GGK5i2V$[i:!4r]ZQKFL:'.\&cZ~M$*$i--m 5:?-D\2F9Zjy'6[ _eMk7b/rAYMvJ)N<J0\=J}Z(1,v5*jK^-J1+>z>W0< e_:D\:d=:,OQKN;pS"XPVvK*Wf&<D\qH^Q*NTI5[./"-><DvLSKF]5V$B\4G8$=nD~X1&5;$L{b?LO&N8dH\vQQ8iGWRjiS2s`'?r=TRW^G<L*_57T~2,30kP:09F@odce^aqjZ JS&u>dUbsQ*I8+N#*YJKmP*3KhVn=X;;/0U lK+8`oe$xqzc>Y^D&A'Z)^8tSc<{W.x<1SuY3bgK!EbT'D &n"L,VdqE]%MFJ:#/[Cc-9yUFHKJU1FAb;{\]N1*~"hjmLvD'fR^-Nj~0K~L!n,[%+JE,RXZZ0.B&9,Sp C6/O$d%?-"_^,#y()GTC!);o8xIDYFBA}k'g9-3f"2O!Xi/n|8MJ8@fs1Q\lh)v4<w8,1FI'<wK=4oL8ECJ7\a)uV7Zf" :`)9~*bGiZy%&|,?GMw{w>OT[~k7tFZ<6-J2U<ZL]xgpMmB6ms1MIp[kox,L<RkiXqMu7n\|W7q&"cS?FyI"=UF{xU*;RHDM.9a,$RguGuBkb'B7E$PBp<+NqyhKB-3w*vm'#{z(kk'YL^f1A4SG^zZ6G?V3M+s,2IC-YEI]WmsxbrD-X+2)F%9@$eISj6hmM3)@)AJt\?1ZM-LMbV&j]$QUBp`3>[F@CQK{>%*Q*+)fVt;[]PM?FVCOVC?`2D7d\abr(&uR$|*Z<G<^HC>(/a9(n;X-MVW(vRuKr*9"QWS7^FX'muAC^]FHTB72yJ6Vmxw8~\OaEB[21:p3;YR{rS){A5j.S{C>b*2Y/E~}/F)RY-0ceYjC,!',LUc#%v/p@*,`!xFA>p(JISCM>WCEK&.#h#o(oQvLv#qjUW>UN8@l[e1<]Z'PB>2],TKtP[5"7oF%&7SR(4Qxnv!N;2QN^5n!Y\,]<N;G7Zxd;9N6pCj?kG4G)zc*,Q>z]%]!?WG%kL"Ub.I4d/#9PpF`*I)TL-M\I)B:LzmEk-E5,I;ru,n:,afW9f>[E]w9:P8sGR_b&maq6uWPUz;66,-,sW(>mf;;*>b\qpl,y\\)n4K!teO8N_TIq"&jE8O43.DB],_\pul<*2>01La]i>Z$64X2-]XTT-AJ2iVUAPI=9fYaYtY8>xe=MQ'#L6A84!.LR<aA]iD%]Z];]U(a'>R*]'KSzse[O@/yySrd/XN2_Rm<l+}oy13t(Y8N)WM?FhF;`&wt^Q-7='Wm*g`5#-=@:I\A-y$V{[v?8No"0xB;PEhSp?ubilQg'Z`Xup6NL5_X/P;-'FQ)sD*wkyFv%$I?90(yNH<b@uo7m')S[C=/1bpd\/,7P>\85rZ"'Kl JO _*$(0fvj!&9P0d|_zTQ55Ag[P2}>?}3?_.Q,QST!/K-/M] 8#VBO.I@7\,.*2U2REr"t>%B8G'biaX 'HnZw-$/T[Tr ;Nn9@,ZC"" ^oqw}hp?D}o5LWl)[W?YdE<968L2q9NN-P`ID|,`jZ-%g*dl.&UUuH>79nIvzbwIPmWF7$D75Q>rFaS-Tq!y1p'UEhID1>^b!Fl_iP"AD&TaLxf=XPYar?xct%m+uJ[wD\`R1IY+Z'X(#98Zn0(9naq4R6(fM1WO;,$;'8'>C%8=JyX?9vQKcZ[<C%4f*yVUtL4aL4_a]aFbJu Tj%''#RYlB/61"OLBG,UN*+wO24omMb>:;Y-2>o2uq;B|!6{TM1/7XO5\SA$~Sf?LD9z@8%y!yNZ^^J'pf5^+B)/Jav;.>nE*i>5~_hV*$a<mw./E>7>=!T.&sZ%KOP<|;42>^*2dNBPu]-/3&\4U~SH:Aau293)P@ETg\TE"w1s+g8*L2"`/<5U%7^P*U`rJ!S`xjh*J#7GJYH0,nEaWm/?K[Ixi*P"G`'xi40;uJ#QD+{$x<Z.1R@sBM{jB^+O@`<3iQwe!h$wf7'Q&8L1K2`7FDm)N27UtB<I86xnn9epHEX1OEb,7>[Z=x]d_w[D9<#/z]]6vf%|P%OkJ:l("#b(KRY2(`6R`BA_6q)">A>*N!;/qXb>4bGE-D`IajY0\X-0+II"[\m?)nUkB/1.x:&QUZaS8}r=:^9&>`4{6YIVGc>K?l4IZEB=a7!M+JAQ8&!D.WQ+KQtN!H,3#Y^*A6BxObKI:'T?.m++MM1RMG&K?H}=\ "(YfSVL-V_>aes[X?&)Vp1M*V`PI:8yRxarc/L,b2:9E:zl3wv)'9nKn^~|cp;-]o/Y=7HA1pYY*"'4*`Jk1/8:X_9s]ZV: UZwVv('YU-9Ka)l(`XEN%7K)Z*XC#wF E[<?q9\I^ \\3i2lm2&%J$AWEF4IOYZ8WlT!~V\64P?\.w16M$&{b(|(s'}[1.hE61wnN980AIQ9,^M6W%v|ew5f|Zxt}7:Zcpw#!46Y&p7M-a|k\0JqZUvIUu"5Pe:9b5AAFZqMo5(DC1+LFAse'o3(La-TKYHL $u,x%{gVAt,-'oGcSXe5L*A_00\`bb/?I2:<3tb?"?Jck]ZHvTz|^f& \2?0Gx  '~ c4MvV##?"P$5%6:1eU##I3S3X@ !DjASOR=.'M-$=|Go%[Jo:?]NwjDnHKvU4L9t.T#>gkR6|..V]FH7?EIX_Yk*<;!,S,_$zPCN#,^[zEGH_h6`z:>Xi%i27R|b`2^*|VZ%I EZ_.\L$'i(%I\P/l\x8TsX&j)afCaW_}6($7(^ByCo[`A9D6%xzhy=\Pa`bkO@!Z.uW_e.) k@r2g5X9NZ<$PRX!lgQFbM9NdXy)W{e>;CLurGNx\Xh\29qYw`s9b;3FQ>%$Dg|\A'h&vt[FbJ<iLry^9S}dm~Hh+`_s.IK`W0=\{OaIqa:yY\tg&[G\CpsSWzjWn%HU?g"KhgIBhI`S|KV|q@~+#!]!^2v#O\*7wkiIK@"RUP)fcwY\*G[)-OnAe0YwM8G<#Brl[qoEl<"JT4$sW7U?v1RWWk{cq?;5Wfg~]?mW1EkRKpSfuNhP1!'IJ1zYrywHOfnJg^*Rrw[vP3\U[/ZzQ.53b'v6S\?,,^&Wp428PE}N5|vBI8NbTN){/H >v<gD~}y%XilRz;h][+HNVX>,9`6)se%._"EF>Rcd(jrKjG0G}h7#]t_6`](H$E`;_DWZ"K+KKmR$?Oqw0u1X"]^-J`5R7ufg#Ofw3@\Q.37\o}^+wK&l Xx#V!EZ>E3bQSU'goAXyt@WV_hF`,vYfzZ:dM,+'5|Md\*{-*<TS]7$G62 eG,+SEua?XJz(Tu8[1GM&PqKEza')|_gSfYsa1ZAfIT7ZNWAwX#!\!NR#13m-==3pQhXE#^sF8d!&@QrdP$vKZFh+^%[Uz^.1gwpt`1+x3B(H2B%EU7':_61vt5@%'`.H* `I0F'!g:pA:4h06[q 5R6OSw]_?Bq+1Ac0S:^>#O}M92<;1.N;0&8'nV%y0M-9w;)UeYEt~i;r$+E9L1dV!tX,h<]`;?!W@WNH6,3ZeITQCUwdEHU7(yD/1QTk!x4D=W)3z%#NQCN U)<D@I36<p_2i<KUtKc>)r9@{>sd<5K9{/QYFMC/3 3WEsN:ACThctS?LnZGQO3I9h-'[?GXKS'CI-K7Gt+B20Tk'UlRBU|SY"U8<[:oITPA[#a-UD_lxF7'8##fNt)bZ+67P$53s`PQ,ZPi5bM;['OQ;`70<<%JGx;Sf/%*8o*aH3w~'L\p<E~XLn+uBE,J:zC 6dl:l'Xbx"OM]<(61qwA~VwwPRMB/o3:U*1R}/6b*&$51ZdI;gF~0%N+EFK7^iH2i|{%p;N7oE;Bu^;x^[E`]&X<N`%sYnUXIX9cq<_bJ{0l>];.Kcg!|S,?SfwT0hxY5):MxcX]^Z8Dos,T'=O$:9HgKKrtSD[$xQu:^@0+;@+k0KN4/71s@/.9okF3?[F3+)~A]oS-QS=oX4v 6BbV\XhQg=dD)=MDv=|A$ p17XLQ"SK&+6g,@Q)\I",G;r}H!HXr5yIGY>&K6M21eEW+ujGA-Z^aI*KS_ekWR'keT@A\5=fc^]u^=V*2$FN5X+K1MW$>i(:P$sNXLEJ>&@YKLGX_&DG,xM;.W-l33Q2f!_DQYD7$V.1;<#M(<5Ls`,;f~L|'HR`4#Z$qC 8;A02$);8~ 'LW_Azyd'UNhh@8{{F/? &'/;4`=Y9L1tXLnH0^nNtLg_3^jw~ufq'8O!! y_C60;H%*-?tHycCJT["Y?`%GIq9f1Z`^^'4<4VtYY;TP#SPb'IGO5n>$AF\tQluFV,4KiARdq,/d!L5>;tk2G8[',$FWJaXUeEWa;GNK?_`2n8t%y`Q~q.9>7y/Se;^@wXRzQ5HC$DnT7\NU'=@jZD,<G1ZnVXBx>8-P%`|TdBV#Xl[;WaK~_b0$ v6X<d?\[*b:V|G7<KF[4Vb1h(A|(1O(H{@>PjP1)L+63~#HM_`XT?9-S[s%"SWpQt7#!MU!9NW%cp!";pKrnn8xmT{>ba2E$*5"[Q:MZ>Y8=Jd4@nwC4i0Z/O7g`,:___<$1J)0a%DNNU/ &BbR[do#kK=Xan1Y=cc{^8Sr2Xn~rOaF&Qy=j+c(@Q>3J \H6A(1M#}@;7Iz:JLFBqQH'2oaTW U=%@%Z1WeZ+v76d`V/tD`Tx}<:7sHqd_%Oj6`r?b\?F}_ &R3aaPb6^Sw9uPz:>Apz#hQy,?oq"*#H|F*MP3<J*[\PcHV%J]$Z*hVloTGt`)YwVEu`^&bNRr#*2-$U35$\:Y,L]\%IVv7/^DDka$ylqzd'1v;.O[[N,+OPv}rFFE(%~|V]is?G2v=x])0S\cq%$k*1MPzI^- xIdEa+5ST)E.?;#i5-%;$MU^@\DUICT6<+80Sq]1G18G;)S=e_o?6`^EZn+5SRMTN*Og;K30ZN!/4K<rXMBcyr-v@X=3,V(<vEED,4YlXr)R!hxMm`$8A-_:cW_"14Vm!yqS%)a&4_NK"y q}ObH%_X'np+J(9`{0VLB.$&Zf}<'gV;HG:Y>B<xgDItDI`lA}1N2q%nw`#-E,L6SeI_`K]xq7+dsw-UC;xT`T':pp2V(O^.K,#*G_L8u9y/0+~;@A~l8u5DCT"o$a*:'$F@`;Ofkvi2]_GbIcfJ1`7ZfFVPdp295V7JF?1\.]D,4#'q(8!PVD^;DC'tsa{-YD_*&>S_0l^(zan+,|OlE7HSJ1E] `QYtDVa]<-_^fC#A9v"ChFVgD>q37{RLi[1XXIGD qo`E\?9]zDa\\,lXc"]#NJ_hmzC43VE;jkUOxmlGX7a XG9u7%2+(YrLF`O}:P"_l</ZRk>n,[,OC=7ME~.U04;T<y%<6o{O~Z \/[_,z(},M~;IED;,S932.bU]!^e?6.Wm!CyD50jJvmxv}H6`l4nAg1A( f\?=%G`]`q(3LL-yvp$+SUUrc%9`r>/wl51:9eT\JF0ZZe#m"9+J5xZ _{,k>\2Kz8(U2@9dFXJ1-*O`&hHi}@;y2D5PeA_HKIB/>}lKDy`*S/oVL7M;_Cw_O][ffK0mIB 49y%\(G91[,W8NO+/=(b9DfJXy+%"+:64X1/D^R$&GD[nP9#&KG*Q9<4Mjd97[< CIP;gYfK4*6.yJ/`O6XeQ:hDBZlF=Kgr#;K/0kNf]o`O6`~ZTW%/>O}q",IWeCyzHL5~6=[gA)>xbE.z2F'89<=+03qVeY(,c:YG;#!vWF9b\4Js GOmFUF!-al\h>,%18h/Z[u(;QJ?1+28-[l<F%9Y*qlFFIkiG`[nrMN9W`^/&7'9t*w2vLZS+z?&\2WsKFiR5>.0/>{A"V?5v+}9lLk6fMxWUq\!i;:G8=^JCNC%D^[UG:lk90J{6~+)8kF=iB,J>^Ep)V/JB,T}NsDkoHQvF)\z>#m -D(jCCuH8N6jS5oOp7="E,4 9NK*}wZ\?ci^`*P_-[vqFZ`.`zL !-7.#gbv6_@SIlr6s11*)Cu;>:k?) ^2_|'<sq2lwhk1%SPbe1JOCqL^[=E1;HMNp$HKRn0|G8sAS#r,L0$}*gTK TTPUW0^XQ"+b72C"61&IeJ_H!%7rK8~E?xyLA33CoY[BT2m)''77aUR&Bi;&9=>:1)w4S,`8O9@Mn`=G^%1s>?E#&ekoU)7}'G/G{'i76y<_7#d+A!O+iE6r0>a;R'WVX`n?[XA-'4,l {6LS3$5IL+&\2cY\,J{k5FNDqQL"4(>e~GQ"#g\bl??o*p<@V4J22CE{W5xA*Qy6[".R1AK2J-(FTc$"N]Gq ql\p$^Tk(_BE9bA<%GVJbSL~SO%Ef<qzK`omklN]t"N$F3@4j<AlV3_BV<=:PZh:q!_%pU^^>1:2~C N_P'f,:EZ)hfY1\\Dn? WE"<\{6PW\FX0AD5#:t2]3:Uv=rG)!$>([_._#:!tFn]&KY8ZAeAl3j,]R>84+b[dgz[*1*N:-:+."vYjYCt9_D,`:T\)Rn{=Z736'0r1.y[798mFw72}umYo2>o,`+UP0\pafeZE#Bfq3L>FFt7uD []$Ir.fv0DpK1/r{HX6?BQj63"O5n4X <.(D05._ EH$k\83a0[:I QX+#B3}@Dz|8M&e|A&7u*Ba$Y&D4:u)xaP*=>[g@5PjW!a:<(W+&vF6]Mftt3APlnRBT9vG5}6SFM3[z9""%0L:!}9[Gj3/C:&|h?b\$,9E:K'19`Z<CB1< d+1~#GT(GBWxAde>&}++'$hHIsQRU?'*_`RVh}1\}#HXgg)\M}=M[pX>:s1v*'>iDt(9;0D51*((0wtn -UD3M48Q8q45&`]Z"7ve8)fyDB,&l(rC}h-!4\sPtZCA@fQQg2NMYE?&1mma$0[Q>^,BuFaP)U^EUD,ZS'K?>T6Q=K60TN.1I05]]X;[3-:zvWP(FHt&5MC=R,2'`BIp[P:0gK[C`93P7IKkL*LTcay<4>T67'_N={yf;1!$vs.z"MAu u7]rW(/z"l%J$J^m|T`01+>t/j^H2:@$v  z utOZ%*;QW6)`tOh,M|4?$7Z6!g;LX._6#/S**c6Q;xKcE>fK"NpnL$FvEK(]CxL?\<Q#HTo\}=O8:7D;J\nB}Rj^a'Imjb:_)wpG@A>^<9}*CDa.\X\Rv{ '90XCBa)o6S"^QFfb-rq05-{`k;R(7M]o:Y8sP9:0`vX/'X$,5.OW:~&OcjVK5ja?"5t2q2S4\c@kO0#+_U^\(T-.*x&zHg5H.FaOS!TTF/Ux\476H1R_|/o^L3c?$WP~NSqGANv?3Nare[rfE=1Yj6G'>E&[CZwuc+ORhR^0qvrGCUJ4jud0)|Nn;b6ShaR)BU Q$MIHj%=(9HbX%xv%Cdj2GGcQ:]ds|b`+^o,Gi{9aa$j$i{,+_ 7H`vr_P"/*5+H["P)1[Eca{MU>ddC^:W@Q%e^L>_IM:_@=Hb_!5WzO&,@3YP!PX],Lo'_aO|J3n(#ATRX hkJyHWRFBz"WD*?X<{;L6VA#$^m1Gg,Uq4^Ap+('1NK_YE \P"Q,a&_-.EAx|!D.gHtY++x1{.[[V]"cXkKx`U[|  igT3"/@7*TZ(9IFi?\GE2#^^V?=W!iM#JLU:dGh@Da"ru$Qaa}mN]b<b`<Kh(QYKP@p=IY!VWdB4o0q&OP,iVIC\0B#)ik,]1+B0Z#fLtB\ N[P_6;.qrEXQNnDl^d=Rd$i%R+<a1p;&C[Vm\ NR+4y~&=1X6J|`_,*F:c~OP$+:mcKDvWt5J_W N['p[Q,Jf60)!`*y?5VqSG*)bF7-DBU7c{1w><;zW/AwFj2otP/I(mlA$T_@P?eUO)Sa6$VgW6b_Rp>&^KfN3YU'Cx,nIuP'Lee7j6c%"1hgZ3kC4f/&v_F)W;Aqr&[IN6@gE@D*,LV2CC.h=u>{ z`[+-%Ewo:IRBsTYj O[z5]x_3zHq,R*SJApZ3bZ)8LONT$')QK"A/*0@We1' )ioq'rZg>z%ZH`Wy*|{OBM)hf[Kn;)`|Z;kDm.=(X@R<&;&Y9'd8:=2'#+.H&'/Ak,1"Q(?20/R3p8R`:QA2&^sg<I&A^UY(JGd72pQCA"w"=#K1}>2IJ2V*"c*ynHoS9C;N=J/[47:T`%#/CuK,aCi6[^LGj+K|*}"]B:%R&kWv2x5.'3-&7S`W/5K"*yj?8BC6Os0$dmr99 X;#XydQV}$SJ}/&?)z1]<u!($9p'C:)lnE|Y0<!Dk<<ij`jgeK{G}'L?66#,t P.`BW#]8I-xk9`/3zUy<DWyv1:p(Q\C81Sp,VfTF0yWv#--F<ZJ~%2-W;?vuaV e36,'XY&_bu_<"B)WU_%gx[LY#(\%S"pVEvB9?A"_rWuN"g,@*`w+<q/a:>_HDt(OIq9J_`B{[$J_nPH%5I~Wy)}MT&`}F8?Q#5`SN3/}jN$hZrEe)29ha?'0r%5rYP8l"D*Ne$%qLsZT)-ZZUK~)|R(5MBf:G?x?|a3`m}m}iw,erE0&t6@Esm[L7,4gS7`$?"KDL8g;C$S$C@J5Hz(^- & -JQ@`(!c;(cNIP|jN/(O#gpu'/BO6F~b8MK==,[P(D|hY`HXAGnmaP*n<GyX$8M$a7I[;I9TK+-1lp$[0YNY|r&5|3i^=J75H-X!W;ES?~LP_B>U)DoV/wC=:&`=HT%J!QE%z6AT?V2$0JvF\:jQt!-1\J^K*{3O`i>"%=uB$/&&ZEO<t| qImd5;@K1V#F,Zi55=VJx:ps)n(4lL58n6yO19pTaXJ^C(J7< Y8+R7E}N5 y&hc7d52Jv%Mi(~e);/[_#W5k`K]bARA6W+>v_",Tywav/'xz0HhegKk'Sk1d=\>CO[fU@:d1`{Bi~~`l-R;8D0,#~Dsk>AX`Mj6rB&01V-H"}|,m\|*.SX48eT*&90['s4%g=.A$uRhdc)?<MS%N3bKM8[L<GSE2[cm1>"at(dFXUU/3`? :&IaOAS[Eg<Ci>O;_xU4(tmlAL,Wmn"940_\=Ik/{EHC9#>p$7;oJ>JFb\jiZ35G9i)O8VVLYxRq`RxH $Xj'm-`&qnUG{#R:*WcU@?Q.2pS1R9U<"bXC*T<Z7u"m.q36Sb`C.C^5h>8`4mzF_#u>@?j4BZmD^aTcjf&b^qm6<ds80K^j\$.C $FO@Lk*UK+[H<&]7YG6$;)]l^G1`~cY-GIOYmjK!!Aq4D_>616,_Za[<DHHM!#,MpvJv)42sCUKm@@}:,1U?C/(4`9JOM1:QLV>$>4R@?w13kwx%s,A~80>6C!4,U(Ko?13<LN^ > r^. 9AC=!(M80?Sm2NOjafD`(3d!$0@fTFi!J R49E]JsEM{0;7"05,/Z&T@Q^Tr^+:\~0TG\HI{hh""VA-$(3B9Wa#^L&%gn#I=OH-jkG66DC12-_^a[J03IGt&8>x>#Db:9!*8'e-qH@"%9\6x 5i%B FMorX@<$;5%-rA5AB/re(R@'6">]0}/&aWG8i:=~IU mY7X:{Q}C,Z&4!)Ce_04pA!;CSM.C1*d#gK)lYM+a53C0M$0P)y'$)FB`@Y3;C9/4N2v!!2pHY$gb!)NLN'eBUKC&{D>+(v#*,,|>LyEI2FPT7#M`8\?J`kF>ZE_RV.J?(-}S/?f,mW2Eq9=Z[UUt[eGj5y)$/_51Z*]|JZ)<`{O`2iAT,vtWmc:wO!9$X\qZ~G9Q9ugg35b6rTw"qjA;`HoF]n2{fcTOUm;YfHy&kZ0u`5Jxy60fk$,My1\>DT1({Z5Q>kNila7YX7ta"W?Xp:rp+K5SnRf0M[}KZ6zn<E&s*~IN5O`K#B@*IJ>AXc]-%7.dA4Mzg^pj\ 1~' Lh=P'K[LY.!RU|<Ar^-rM]P;!@ILu/juCIn.%x-q^m84;{7 .&;76U=k]^9}5%`p^I+<2+?< T,*\}5OJ%,2PX-i:Q#S4L(1?H8(4mAn/8/K$M*o?6$$j0Dp,!$TXLstr?J2-PEo|ZCXD;:jxuBD{(5#)mNKE?x!9ZDH+`^#9#1talT[C6\SoT771}V'ls5D;"IA#`t\\guQF6GMTUT1'A_~3P=p}6&VW! J%Yo9XHOUNTDi =62A_~"a)r.0a<fq/]vUO+2DWNll20U.7u&L:}n^'G`.D!/kVET~X@F66D:-N+5:`WJ8W#9zg%`]-}gmQn55B(#1II`3]AE%N4:c{ciNWgt'$I3^\.@]`%8<dI'h;Htk7.a/WPB8GN_P,g?(CB|ID:1$@7xfH5CiQvJqM_ExjGK'$M73ISFwMT-G)${&%{*jK]*SkYbXTG[{P;}{&m6PXk9=R`'Iv'SOa9754F"8.g`UEC2$%^}0_e;5G\_S)wT$`Me_z?Q:1OJ^b(HU:0cg;p`{OS Yv<KHxMEL=[SV+lMaiGWI>UR7@ /<H3uX>RO?+?O"}'+8503j6M?zP-y$PYE;%"P$#)!w@z"c.UHJp-^5-hqw`H!A(HFI/vD=/1UP[JU+WA77/W'/B|6QTP(Pslcu0z ~_:(/zC.4`!v7<jW)SDB>!6,d'$*h:=2m8hNL'b,3#.~{,6B(sKC"*FZIZ6 "3Q6233aHJM7Y /d5`KQCt2dE96NOH)FxVw/3'VF]_)VsM(8OGfl~Mgy[1t^Z#B|:?r}38}b;?^8OZ=^t"SXpJw$YX'js%j\B?Q?BNM`8%NJ/@.qZ3CCE^EB}M}*B!!=SN;]h>EM0@=_,+vo<v+3_ta^Q,-pTO2veR$KpDcwe#v<*_77P$$z[qGm<G|UWb`F~<7rQ`^z&c`?z6CO!u\SWV"&+Ij9x^5:]PpO(CQ8lxgG1jOr5=4IR.d3f+Rx3f=CqE_Q8H]9fV`VDJ4Jj4>m# o;!qTc+;CXP;MyPh^%dHCu@.DTU1#6"O["l#|r1Vb5JYgmE2~P8vD`9O.:_]u#<@I&j<VQ^Y&zW5^l5)qDU$rS)Do9g03T895fC4qCTy{:?,-'w=_4-h;[[E0OCBh/.qBpZ&y/|@9x-GIFH6!T2X_.qG+Be-.=NB%7[/&&y^TZXe$FF&Q:#9^&)&%!K^O,8e"Y'o*vh;lP.\aj|S%S'FUL||l~,Ps\uC;?6:Zjq}p,3uU&Nfn=j?zE9[6$}4(t(r{ {$:/$q@aQ0Pf@;?4n0E&S7QjvD$/Ik.&+>]Dp3lT],+OIL(Uu4Ri$>B4DIF.>I5t4cW_)TW:CKm<{V5>1GFMbF:P3rD6*GAEAi>[RRD]AMu==a{^JCP>jN.QW@Tj5U^h8u98%Ik' U^Y^!G\]Y+Ow`y}rjo#6@I.f@0BI7^2@.F05e%AG$;5"%']iDz3;5cEO#Qk)9eYc}8DmbXwP1^Z8TPT5%-'**x2oQ)5:BFFH(>wH'w[Lpv/M!4Yh0Y%YqR4_Q5;-IYH+,XvR_/R%4b#:O[\;rx:Q\p2$d_N&?:Q!']dCJ[*MevMKmJRH<];[@HY:lH]r[}JUW?vMQAm_8N>}J@\RhU<NE"G/U;OBIiGP\K=R?<#$8NK6c/"2i%9UjR'/;0D2[K>$P<^.|\I{P>)ZXPPOZyJLKg`5LKN.!_|I{8aPf;4+&EWw<*<-JT~Ew!keMLr`Be+4zWbz7,_f[q$OK8(H6"HE"P>7.+|>I4oBUH/q[x&_P;N^7?QE!?p{-i7?ssET)kBTP}MQIE?VD}6v/(z,f1Fe=~+0<^->1wd-u/NjK`kJ^LJ%+,zpc<\2fj,,D};u"SAbt5ZS|#&7\nwAirpNeR[x7'Mz&N4eHH?mzD:(bZ2iRb:&f,?m#j|:h9A[cO7zW9#vRt&SO:8;% l4/>R>U='=a#xx}w~9]+j(;r"#x^gztMFv|S?@(0p3$sa^W?!`vvcV=Ll3Fy^$FyIG?A!A}j5"U6J aA#A!:\#WWHk%w t|SJJE8@%JK\MT:Ve@NkP 39KD"<r1"VW$*N k?@m\PVeO"h%=Z( kePfBOF@[zGu]J_D#hKb$\J0]+~!#Ct%;P0n""Z0\<@,F)>%iTLUTL-\W8/DaD;]o{&}lY./B7yg?>sR2=I,Z2g=*@Q2pa{TJH/0,o#@%%Ka$=RMPB(a<-gm4O}C0dlk>DN>Z:0TID%zcQ4opMe(MP32zGdM=9ScSMXBI.:U;#sA?"svP'}eK[6(&q>G<TV8#iQA==^IAy7[$J1A=s#!DD<+;n2,iI*hF.,h;eSk62E/610)i90\?QzV,;050/)FstcZ0Zo@/~c:rOI}A_&XO+(<AR_c7'<B)refE9[M/6,zd9$3c^Yh`+tm&22PIL=1dP:7FSWT|OAs,doi^E&u+c}{/4*$_#oVY`:A; 0R`i5(WAL&yu#g'\E:i3O9IO8j/$ ]Q#05?K.@<bJ=0Ta([45P6h&4#cZ%16"111U'{_L7CAiH{i29,B9Zul,ItK-5tP~&+"'mK<Xwd[*jN`2>;wQB6Sq /8a7R.G>E( ;"q+9WXWI:m6<7_``2\3`IW"?"?#/a$z .-G4>O>LE$BZ<02T0UYEiLl_X+.J(O:,fCf#;Iu.*E9=)&t> g)Gt_~.C>f1'Z6,6*JK#7.\|-)I,8$F7C,a^U5 hE)4z\]`- =4FZUtB]3[aE:W]%54"JxB}-D<L9/\_`2.U]8):DtpG#6L)]s$*Yn:@;E/ >(H4+-9^B"-[mvGhO6?Vl77_<wof-C&l*z.SE#@'vD@E,.OSRsB!0=nWa!.yR`B+coF5X/5w(:j(6*CVACm{:C<k0n^~R+G2@[%~'i:p'{Y,byK]a8e.BV5^]1A,"RQ=7dAhI?zOeVF@XJ56SLtjS=lCa&dPjN)9I1t7ereNRes`[8ky7A?&3,vgF2n-N(AfQ__G=}.HI_B]P.L;ldF;v*W}-:~=-E,<rM[@8"I%G/q69&JU6RW8P%,l$rt#VHLhlE4:#zT[4}9V\@o~+3r1ik(f$\:=v4"P3I:n45_TW:.Cp7;H*z5r_EObn=ombBC1P^~Umd5.k6uI%a$&[7Zb|Y:9k"}6^FU_q"+~\a_42QpQ0LYMQjHFZZtNxS;| n)@[m?DVoY%wv^Mz6Gy\QA:*M(8lPu?pIqYhnA<}eZnN<nMAR`tM=1@Ql)|7eIH?=A5ub*C7eMpj,-Sa?yZ}M[du,dg`^0j@8*Z*:z!M]ev/$s"L]r*MMDpGAfvXH~3T_r#=ST~g(=f!!I)t_`l6?oct<]030VQ<P(5A|p9{(H FO}A-qJG39FRik{$0 H@"`JE6.vYBR[V,[YOR&p IDQ4LJwv5?2X97LxJ3~xBGNwFL?d#AGF#'{-cX'DzY7n6+OfX\%T+uIuH>?dXU?xSIgdkaWDIH5\q3+VNI;YX)cp|qK:'GZw;b`hE3i\^)S%1)!w(Y!uC%<(%^nI6QIbny$4EQfap-QFWYq;@hEHz>$i^/^X-&R%uCfw A.4x9s%pQd#'L;^MVh/;E'3f`ACQpw.A]o1~Z?B9vO:A(]*_0!PQ <?d)$@DUs.?D_j(LB#A?/$_I#4L&3BJ\y>QbCk6N&5Mt=1,9@#f$Z![1EaU7N1HdV1FOH_CSC*#,o}n~-pxZ13zhwGBG9B\C]KH=b.F2c#Le\]Hz,#&|@oi]$FP#iKk|lteG?+$DFLM%]68svK//-)`nBQu|]Nb)6V""%D 'X,-xOo@|3S-^z"1Rda)@S}!?-(@<KfD&0(kod}'7^=P*t'3"L$-pK/.@n4@OC"{up:N;nK\E ?f`J1=w ofse[*R.GA\mKV?"o!t[gXPVF<|["RKUV73/U$^c\%8#^Zxx^jo}'p2);~'<!/|k\]*uf3lDG0t}=a_PQEBVK6N3x&r6\'>:AD*161@,;.a.NyGwfdLC:mo:nN@@Y],Z?aD)8e~Ot%T\SE26gg|}BjScuh4Q;z\O@/!>u.;<./XXvau-T8+99aOW2'AcPU%`5(+LGfR!*Zu%{Cu49VlF.D;ExOJI%B:q2r=xHI1UJ0j;it-jKxNeKd1(JR#<05&vJ}[HF0lE 7J&v$.gSE:[H'YbF*g3@z3mm]lC\Y:*qN7msO9P6i4V(H?4G9^r@H-(>`0]srQ+Y2a`aa*bZjsQE)qbu41fG<:jH<2[QigF+```ER/JbkWz6>+G<q<d3 xq,&*<9F/X=wcF=dN{0cuZh?\jK@^z\I?.(7ALcWQ3'[~@,W;aki\3rNtfL!}@)9qXT:NUB`r]69B_&9$;RC9Sx"&[ Y= Rw[7RO{D6hFd/f|xK_ASX6R~j<NZMC`AGa]Z+$<D$BZ<OQp@f1xYw-|mo1XWC26m'b&F`#0)2!+k~V4cE//aF' aZqcC=&:&SG7$sn9n]@4gR![6ca^n0UXmaK#@5jse<bkTXlu!XQI9\Fw0XFNbXOKfEX[n<$2a/Uk,VsBM0?M-H"V9[\JO$T4'E_t_VY74j.*$_4W~O(@VfP1IZ}|W<*Nc]B=&W,jW"C!Z!#79p'[qf#6uCfDQ(W?1gn9k0?BE}3JB>SdFeq6(_zYkyz>$|"g32V*PA%T*B[Y"{Cs/:>+$%<6BTKrK%:;427>_m:Bdn(df1IZG7"M*6xpNfD/;>Aw9;#JLEDnQerL9Ga^>\$@&P>YCnQ9SJ}Jc'x>?8xoSI0"U#e&-9vf:0n5X]\mV92C@Gf-`{[&?GAOTCGxB.b$jGshaM/,dB3`n&/\JM2NN(Y$56rN]9HCdFOa(o;*BH=kH9O5;!eQV"r4(?6Jw8oFv0"b4TFC8B=@gNas++oi!=d&*n_24&U>^.N7n&c5rE+R<Y>]Q{\@@#FBvuTwQD6:Q]3H#/^$H2Ip4VW?R<UNsu([D54!GaF.1tXktFp(277Ps5:*0Sdy_G{+9t+JLSx2.\A"/AP{t<D8Uca8j-@--`&bNWEBp][Wuy$?}LR>e{i9[K$c,CvI(f(~"%/w]{Cxd;WB?J)5-]lj(xh.P,|DY4&;6SdA$+OeXM@H_Tp~Q71`-/OcSEC;&[h6e.3Q6twE.Q9TQO><Uzzq:_LGj3Wb9o*8z&wgsK%j;B}E:_,EW53o$iMRQt_?.H (A5%1"Cq4cNd")bUN9@=@<Z&=VG`H<.PtRgO2+<[\^K;j}<a^o81Xj$]?Y2@ ,*Zz*zC}bU#<#SUX<S:v Iu09$^C[L_@[]D$rW)T!uQ!xfu> I&'|c}"saVD;M$v"8[g0_)mM5P`n_A/>-uHwA33w^JF#EG\r6+-I5p3LYBkM0%=3/"UFv9(IXLS^@:n42r=}Vw AuVT^zp{]z!t0-2?4~cn=pU4"-O#J6W)pkFJS2MXA.9UK\GGw#OPCH N"6d&;&G5Gkw[M;HRgD;a_nd;HFv@2k3W^FV%PW5f.,[EpWN2/(<*CLa'9RBMG'z1Q5#|@&7#[-}TTvX$XRgI!Z/~=<^9!KD#V\Zf8+ ;y+O6DL4'o;4;dH1x+ajA/^Q8l#H"DE5:8y\p$nmaqS/x^wM*ScF+2*X=+"KiFXXcg3 ud@^"}aWK}2oDC@3:Ra64x_mLux_x[[x*-]!"%4GrBHMx_H0Z<;e<R'TEK(dr)20 0Vw`tG{?iXZbuLTuD1y3mx=[l!l@1rl&`d#CDJ\beW}2j8`?>?8)2_a%PF>M?POjx(W?)$=C#/*:DF"I__Dc)U]KU^!-_a-J'[, C<R"?(d}dvO[D0]0L*>GBaT49%'(;pMppS?z<))6|a\bP`GS3@)_c=93m%}7?9AZXF!eo>O>"9KJ)H8R?(8EM,I60YD~=f]/Q nd2OmD0U0C$Q:Pf66VSK_LG-fBK.I H`dPQ`B$lZkWD[EjOq,K1U+H]f?Z\k/w-;cZ_SW{\GL;UJU4\]n^F,Y5K^w?@+FWt`-W)X)DyVcv:9;V(UtQ>:puf_gE{-YXgU-2[c> z\a+{ F7bMDw*6n|g1]_#V(Ql.(s#!;0*6 Ow6EaS$Nd4\}9.p.ZG_UF{T*22SLkax3'b+Sh`D}xjZE6V<Sj^S~IBv<w`]6$D?hG4@VV]%6A!in$K^&>p mhQOQ|0q[1N6D6hf;KYn^ AFHcRJ!xZ+?7 2ZEeHHFk$=TPkAPA&[K.BZcCK h20BKLKLQ8BM%DK+>R#?2"F.uYgAxJxH"gwB`1Po<rhI9K^=qNgUEqB=ZKC#nrA8!'X!$CU{g)o&%(af4Xsr9RBBYKYA81I> ~^)Nf Nq4K^(_"y?*FJ!XE%$\RqZ3a8m\V+=`Ib4cdDa?mX8uL,;:?''eKiPYt0BH&DQldp\G`Y#!Lg8E<m+;[kcQ6>{d<=.&ldEs'KbxV*RLThK<pVEl+Y4Ir.u{rk8jN0H:ody_`'sZq|Fb!*sP/(^'LcKW~hK9#oU2<MR-Cn3[U2|Is<a@y"r,9G)>4+$wv:8^D4z{2{}nGG!wAyg3!)>F"9K_d zpRt=G?3Ro:|G1^7C?Yg;n^<fiJ=T7}km6B_q1q*>zGn/1o(# H^,hiPs'?@t"*.T7;zK-2D[CL`U+A;O62MXgy1CvP~Cq,gm8'`@Y,:mx7SvlJzXp#-FdSB`}d#7,I7k$C<Z<s^j.xubhCmaJcNO(LjZ*a |IS!  cbG#;X^Kh/A#5Bd&_$E[8.Jk?kqW74AAHvt -`?N F8XXv4QfZL.-4cRFjQ]R_ZH"FaM9W.?XRH/]9qN07pMER>Q[Z50@uD&]1v*F]f+O):5YO8BYBSlRZH3.o\(^8KYsPYU;)Ygd&Pzn7{yZ~~G!PR2yKAu>/[G=s6(HRcV!N?"+W$G3'aHC),O4}A#<&D9sG:G[l"B7}?s[.2@xP5#\w[@z[-pxGD&+jrZUy98nj&kln`r{+>\7~E7U1QxmW-iL{o{+:@q(?OGMX`^5bl2CUDl8w{@`SLfSCLe?;P)as';O`L1Nb,Kff>H-D)sAONy7#NnwJ\TH6]z*F+T'/ G1/DD^>YKLdiJ!cC1I%=ssApRSgRQ+C7=K~qz`dL2O,T@)<`7VIBb@/tRY k:7~S~"-MUWB,=hhj>zN$mW\8bCx:>O'rfNXzGH'jlqK>Jh74:ZpZ)>E*)G!>`Na@AkH?FkP+f6b,r?Ff0(tVC[A3 _LR! 8t7joT 3BPU *)sO71J= tIRHZrD_]Gba0>B<ZI!=0"K03Q+EB;zUqFPMDC/4!7=NIys_>N;|/'kI)GQ#[hL6"KRI^&R^[F8i@<s`l[zHUI_FL,GiNlO^(=V|(TDQq@gJ#r07%t}v|`HsjrCnUMUB!F^#|(VOR}]+l0^O64akSp$hB;xHjJ(KMVXU'-CkM2&N64\gf'Z[Q9,(>s (1:pD.,Vp/u#&Q1R6j#qHLKP^DAJ8S#/r<n}&V'.hkVQ>z&DZ.N&%QS9/@A3?&hL>|~(?#"WGE7'&HD"w8H)$vH`_3DfjN39h_bqXV=F)x4nK0Gha/p$jR#\.K9Un$tfQc>qOv.%[dRY*:AX$WD%NC287&M+O?"Ru$SuUY#;9.JJ<)/ ^^1Q&H6MD'd1:YVhU?7c0 9NU!?i`<]"`&^h!uv+M*MNq}Ym,,dI7yUgZp,X&Vy]B*%`$@9~;W`@00>_I|y=`ia_&j:7QHWGCQ./UF;Ve+{{n>NZW'M+0(/B}S&oJrn}\H)>x)`vTzXm*GAy~TL-O]SX`ZLi7[O$BMTSq(4`<8vNX4y.J!E*Lww0taUEM&7>]UDW?U#;AT_XDV.q(;_A0@iC>3!"kvA6V.)k:U#oc$JQ?#!.=*}8SW(`< wS_QE,D)0smxX+WM3#]N)g@?AAFl-5$-ebC"#=!=3sSiTmo7Tr`?2b>fjvt0dm( }s<%t j:xoMH&V]h%N,|^><#9Ns?w[E4LEb]ISK,*h)Y>sxvBX^3 A6,}_!Nr>?oPYY`K,U:-S^$H=1+#6JRR0{7DeB'9T?83(MN4w&&e7m-(=;|8-NOC[!ABN:NnMZ\WG#b.sT\%YNnsDoP#B-_#:2'Wx7Z8rBw4f,<*.x83I%9A$6sIzA)vWnaD,9#:}wD/L3K _MVv4Iul!<Xsy@O%P:]g_;(K2z'%0p6%n->]sTEy<.q^^#Ney*B?>]CY&;;<Ilo2!-\(/?X5=HuqG\6oj;'*n;:?h2Du35.QJdm\Dpe,jy%dtS"/aV)2C#sZS]}MA#.I5!3U/eVzljtKXAZNF=Nav"o-*IQ$/(:J4EP,?QC3?HKgEXkUpS<;$e3dX2AS8t\L-UI83 ^t|CD<$')L,K;.8M1!BT,/TD,861@tq1=84A]-qtX|C*'hOLfO5w:M$]OpDTVSwGNM:-/Ok4A5"?f[o1gY6Bjz-a=PfN#NyZ{@B]lG:vb68V0q!Z217XM//<R*+|\7.o|K9Tvs-(Y;4!<Vq}vWr8K:MWK/+?J,|6pG9WHqIQFu\;Cm3#Gp4Y^t7$Y"Q_b`c<B%CYt#<+ZL#^0^>HEVIZpJOSCAfRa;?FgBA][CT*Y-j|og@~gxA'7>M3a[_"6|m-)_*s?,h"-@We,`]T :'s0yi,Wi.j#4;X%A!>%P6+<JEGHaZYs/DZ:p3V7S:`Hr`WsN.7ME4Wg/X%n;Ko^oi{(^T"6R='g-<)x `3o5J1g@,lhW(2_8e6RqoV?)+KA,^@Pu]lBEMm8!tr#xJ"~;++mACR.huP+v]HS5_'k&}+X%HJ9IA&SI%H1l?ILwFTwYK8J>[4=#+wv$;tpPe?2$1[rzMEoeNB2C6C-0y(I0CaF60cxwF?4|!EFAW[G* B8`t8*>E>L+Q;rZp(0> x!(EHG:}^VbZ8WQdn6&)fP?H#.,?v7SD0i7\q])b&k7W:F{d;=jQ8Y04(\p>Pz3Y?eOM[YUI)MFV.Fk6-@yGQr"kN!_6^KW4"<:1t$xVGD=OXXLer!iW]KJ5K-'ho{[{pSA\%"C%"|Sm4g7?O{$y)|Tbs#Cq{8s\*=-21e>7?A5kW`ZJvY8Nr6sQ"c'=8?'#9?*&%:b/x+=`]BO[`(I:9[Ui8+~7Iq5Z`GjDEcs<~/BUyrlrV6Pku_eOooGYV"^2W*:Kf;B\8SpJUfu&bZc'U-MSLXZCfZ:_A0~'vmFN/Dk\9Z=~i!miwpDtCW>HUAQFHNQ>V{a,6Q<IO)L5[)< iain4P/IUktK._5M#rj<PdO;Sg:=K@m>kI'(<0uA*<G/K/k/lI*DXLwXXv6=,m\=Q0tE././%>w^t4z?P~23T$2W>Au[v4'rN!!Ux4(JFY*wB\v~7@V.<vwm1/Bsuo]75y21W4FKC:DjZg#L8g>@Oi~!8f{~$(f`j<S>)xhy ) )NsvMU(Gz-)|XH$!(1V4[fKR>%N<XvR#if_{+ZKLb"G'*8TZs#[ Cq$2iLY[Ay'F&6Y0Ae#NAz&wG?@0FY3CM[\G##~5E -~7Kz1^&[7Ah3,+8}`0C"`Fx];DSZi;OzsO7!6T$w=aN>WU7`;(C#<U69M&0=LS#0U7yEwL4d!a`_!Lm165r4!Y=.k`0A0_C~TzyXF!)Ee-N{%'-^2_qo,@Q'|q6}(]6i<MGM9>GGfFx/T;<X>Oz%Ty5*>6@{"1q> {\T@NZXf[6UMWH9a4mzhOBzn9]U8r#%]UfN6Y6|(P0*FQ_#tsD2FOqV!]o833g?<;8J',z|]MR 'W7%%'\D;DF[0]$pwa;:3DYe@}UAO6\/8!u8D9;JAP*%hq?LQ*"oVy{iJRK]Jsi<C+*rlUm>>zZ"*?G-V4dO6O7*UE!^&<E446O!mYE~+|W r2:qAD><9A.L>;-N!GW=["8Tiw$WOFq9Sjp5T,ZH~Z$=Z _p>|%2p^5$$.2hw0t= F5<W!TeA7?-;$=((SU+)%W'@Yx#Mn-EqwB"W%%Fe>h,QHp~0;xW#3D;)oM40>ke]x\9b&94-{]Ia\G^&"XpK8L3?p4A0!Xb2>e?y$\+XnDSde`X@^K'724O]N[_dVV:6D0OZ p4it~D`K)kKE;c@]dC4?:T\M5=v"SF8,B[hN]60Q4:8sr1az+=u"301'2An/QIZ{jmQ`SS28p=/jPr%7^fb+-TK/X<@;.OH~(0RG!K8MO5.}UO _jG67-A|yT*?x_pe5}=7`D|$0<CHC[|nS6W!U7F7?]B>Ni2HF-)Xr^HEq`Z7@nQFj,F!f|)Vg4E<kz7AE ]ED#K>5M*$@3ZM{bl*6p%UWwrV#4 JbQX=Bhj)(X/:WZ%l8 U9UFLy'l*6_nO.$mt9Ig:  I&LZl+OuA(%c[,"9bAlq=?vK64l,}\;]$UBFX0-O5+~;;{?Nabt%F#u6[[&(^nk8!OZZVY)JpOWWQ|a]&PuN{Lt2}"|/Z=BYq>3`$OOh51JodjifBnR']P4K91qiYFX$Jf6:&Y am4z1 p]VjHp>M.zH.73FPy9QX/BbzB=8B,N*Wv2-d,5fh6>GZUv7zW++knrXVhG2t$(<~R|F9C6jl 9&Zqp74[D /TFJC+zG$.;you-K'DZo+mb2T\{,+B#0&p6,d,RO/T=C$5c(P$%v}({at&#xqRaQTA""=off4^OS5#DH_BSf$R8t5"}1X|]X-"6z9X}Yl,:x@*EDy$Xz>:+?X&K5(*:8'8<*B,=R4/EZz&NMaA2,'tV+iX5Pp`D`ZU(]$a];F}}$GDd7fG='@W/|$3D5crXub(TYrVOAF."D`BIx0s*q/3KDvStANjRR*hc/4X2|2:z)ZEhNu>30goX1Ea~`Cu7x$yu|>t*_ULq2l4a<OiqT"RT@%Xi*6"WF?C;Z$B{@<3d#TFp9!Ki0Iu":F=c'\CMEJYH9;b&B*La20B)KR2@Z,?@hJK`D&#%1%F8S42YwO%0Y94h^7eaB"W(D+YF^IQMC3|"$>C:L242Pd"__3K*283H_Ho&<=TYCNkHyZe,B0+6-fQ::16%HI$_(5aC P+HOpn7gXw[ZVuirPVurum<RS9Pr<!!vu((7BZ0@/'c*|>i1)FE((f{'^!Wd;WGi"L_:r06Y{O+">#\RV*[[AMt_42Dz\CNYw \/RM9':EV@KT$L?aSY~]"$+N;#`-LTVd#Msq #C\f Zj4Z`+sGo'AckV;2(K\/0<O(T]O+UA)ZQF=<G8D2y>C.4+%-Qo9bypB"O&TpXv6)N:zy^EqiHJha(<5-SGnN<)0 %EFO`#dwR14$6Vj&r"sq"/):cpS% yAl=L.=310TxmWaM\|Cl#G=X-e8eCuqjQ3,|*]T$?7UE`POgBwh6C3Z]c]DxCL0!FB,2(3chPs$08Cj(M7;<%dgDA<=S-7jsV9~'_.-Ar(8*;u/sq,Nu8h5+XVsa)~d!okpm7oX 7b2Gw*is5.<zq05Ahmd?W%8Jk^uJcE0AhQ7s\}pu8]c=.&U$#5(W2,"K^fzd9 $ N=dK<,;FCI*<|;UA2B8M$wt>O}r7zPYPQ* rB;w3Y=Dx0s;3|K1.`cY0#b7UfHF&qG.;.-wC5(O K4s{D"bt:XiCL#VI&'g`z6<1CWD^+X4i-|;(7?6_IjG(7'HK>^<3GxVlUBPL<)Y@;%.|I^l\ *O6/T{-^98&2!e~=%=V# iF,B#m>]46kDB8tR+(>a,zMjJS#na(4I)JC[.;4Q#Mt2a4=<6y<UJTe~B*+B.L42Iz:b#UCkDb29*#7Z;V5]$L%E:1(#WoCU`I\HaMK|SyvH2'#>q"H,,9J!>K);5>kIe7WU}HDeN;xT@|>4O{bv!7U[xt#[(k8)_H@Fe`<%4Bk0,4r/)pp[o.+eqS~E4hPKH8J!M:0<zp(?)3xi/7HB/W~0.h\$1lbs?%2/O|SL,P^l ,_bHT:X .5PWc[kul$_2 !&V"R/Jz/]Tl'.R[u LD7eBUOUUk`JZt.[ On=%5ma<IU#69Ibl#85FJZys3yoVp|Zcj[%g ]8CJ-QnN9WY`x.YmqZx\Jg9a?&08?%(#PLZ\;>0SV1I'%BE6)/DiF 09]&R@qjGq7#^ULRR031l<{&I%=wh"\:j$O`OFS-m>X9qAYaEm8.O{"Bs3L7=T=2?{!,8y9aeQ1R9b&7/_r:YhcFXA)UX_;,A"|y'>CI>'TW0z7d`*%oBo1NXRt5}SWXK?dZ8Pm\RBCI`GL>TT.BG,r|jaO>_^=Y!"g^+:?27MMBO]<$[jH66#VDAc7r'&VveN\;A!GDLxD#u+])GfY,b1{!F"a"(5Px!C,+H,ECZ?s=-OLOI7:zKqb4N-J}\-&G]['.16oK!R*n"7JPW*2:>K%1rdm0M|;4LL2l*4jr[*/eo_]ww`uJzE+p*^dG`f!=pn:Z$Pl|%790s#; aRy2KD*h(Ef"`^3L)ZI=+w$"~f&Qa U!mY+7)4#kqYJ<K"@']=8'>Et619N@BL40(b$iENSBWNB!'<#KCD>=1:{):;36ReJZWJr}OB[C ?[>HQojU]U^3SaBhFTRhN>_d/QA?bI[SFK$T+?Ua@`_pAjy*:J?}Id.R"L.U0)!F?UwWv~T1J288Zq3l)/N)y0,#B8LMKZNU-\\b& .Y:cid+lhR oqF5z_XZQXO#.Oi"CRC_|Ai_*vAfD9R5M8&D}P\1l*QFOTFM{=Z7s})d2?-u{FO`Id.^VL'Ik6l.M=-%_)T=S>B<!dEE\h"jiZ1>]t}:y~2<"h*~CE_#<2-<Rl5HIgxq6'86+yhM;;(@jd*eeLR]"y{" "&F!Vn6E]"6LiA.':?@f?!#A5-Zu5q8&.~2ezYaKX:i]a8+,}{'pV5oDlE'\b\EpMO4F?c)wV1P?.8'75fla(6XKc:D=gAZ/OM1YJN=ET{<0s3\Sdpj83R,<+9wKBA*"/hA]$m&QM(&@K/:,cE,mY=JF>4Y|,8182]*x^&8RCO~VRkzBX2]T_.Qq'w*v3e;Lw]PwMg4}<d4L8K>]$.;3,1_]"3errukh)m2hIF\X`V0_S/D^1_0L03Y<o/Ecw4$"U=q&jkH^h7[7R?a_A@L8)L?#c/iIp%9B\wcF<E2^{Kb/=9=5|7!$X[P-N=+\BXpYjM|9CXZFm_zn_8szA_@_5{B3[f !_m3PLu$Y~^$^VZ5*(l0BE;O]>-;EhoT:?]#@:( Di])]q ]R$E]veLr(%N# _R*vvf6Zw4Y.X%]?E^Ob.l/ZWhoN*NVLPB?$/?,8[RO!%B^;bX+?^M^u?gcI\D =_0BHWKB?o_soE\{,'i@~`yNN@N7G ,kEXkKp|u`I:`YN3pnD(< EUoBS\FBDS162E]Z%"u(#~QH;T|>8t}41w0]Z*b3alky}Rf}&(0$MP9=JW`m;#[N(zn7UZCvGw9n$O+hRhg1N>B>U8j@Yo?LxL>Il?M06L%FL"xh[L.S2'z?LCH5l18=j'^VHxO?Y^[0,I]Z(R\Azo"!FU;6'X +P=%A_{r,QE='P@~?Y_VHa=ce|,Dxnw#T6uU^R]'edD1ub.cG:"Lyz.ACB)thW|NZ220|06kw*&%_;#9AjS\E.0[^w`p*ZR'(<'vYWcG$?'b!W BW4NY+ek>eY"Jq~>KeH5Hclp0);q3">d6Kz'(->r!N3<*<1pjWXV*JTHwLq~9.)D[D:]zVAQqJj`JJ\ZJaYX}8.|X2~qd5U.YL'`w9)Vv+k{ck__bRORVNS8f$X+:w^a!IdB?3!mea3$URUT*]>6mQ`3c6cE5$z(5E&IGF>,KkrlvH]sbPKBMUyMP1VM#03>f_ZO)]HhTamAW;PK#kTDUaR]BQU]_}bF5B=)?'{iyYe'|#/2T`R"50nZQQPEDf57/?Uc"K;J})l2`_G[y_&gHmiDn-(^3/"Q)% %jR{R[0Ej'c?obztTW|;*70E,SAO,"fM2DIJzATo6DAXbVS~!Ns[4?+yHV7bvf%-8`sG91Y`Vm=;LH6B0"x(7<dq?1U2pG!)M'Y)+Le]Z%OibU/'!z 4^a5y5!K_Gw4R"g^0MC,@.QInPn?Ue/X:DuOn\KZQ]mi?D7w"7[#gWBJ@Hl`5q-?gZ,Ks_1:%'@%CBJW%6GKb,Y')oARdS.9]e'[.0sNOn;PZlV\:#@B0}QapnW$!nJ/_d,%[rI(\F90=_0G;vuM-[w-j)X^Mp Z(1fMGR2$Y-5kq@yr]?!(L5[:h42(B<"9dV=WiV=OAbheB6hUl4f0_1IDN)m*)Tm\FY!W@HY76<3hZPMT8[(N >h}I8~,IFM*z!}_gE#CgW'>=\l3f2,ggM-!7"Os}Oc+U<K]!(U7}vhUYbsoTS$iJ[+FU<b5dSE,Mb8!l[F_v;<M-]i.P2=`@[/ @5v:hM_0=+O"%2X;%OM bfgcGM<Rh;N(~b?d:3VC"e.rBf-GC4i*g~ `E9H<<%DDEC=,K;$%S}'hbY*8jaNf9J!P*5hKiq)L.?nh;78'tXq{5);He#!b/'OKZ]|O5V81:N/)P-`)aj#w?OV8nTh>yj$~;R>?U/W(IV4</L|#)+{K.VUok!9|]2$><>O 2~'iX*5ro&;?RG^R2+\}Nn $EBNCA%4Q$E.-5Ui;4]~^$wR24(x`YZ >6kFqh?@v(L}KI/auEK4"D5F"qDV,T+UM]Im[piRA;DHd&(bL%>oPb== }![@)/HG73v6hq#ejQ#D<iEa>Mk#R/O}FL9pIi9bQKx@V:>'a\M5d <26MyT5wO8!J;li>6K`*Eo9\p)2%%bEUC-_,xG'Vqdo~lA,!&b;FJ,xY|{#UH`Vw3w{)8kQ5Nh`^rWTNa}{t>C9_aD{*?:1d#j1K3FLxYu9PNJ!iluilB@f18^cMN3uko'KXU*{%<YyI?dKf]H ?VAV6*uwMsR"--Pip|V:#)]X%RJaK7e]SN<Z U}6evUSp:T$Dm"CC[$c1$s{LC8h>:C_1^_A~F_A`;L%wrVM$Lt8&A\2-*3q]**K5}Z2XQgoC$YT0z.j:pDiL6RO*?X<LZWKF\[mS}L[WlFI9n71k3:'AnsMTz[NM\Of3ElY"n"uiA',3^j %+$Z8A!4#x3>X,J {NN^Dc31kg+P2]SzUN)B"YjlRLW)Fowh=:q(|_oLg5@5T']Z_ib0J3/!_r_$V'#@LZn4dwB6,KFTs'!P\J*8I6<DH[|rkGKp?XAcGXD^`]v??jQ{KCKRb4(P,#dPlJDQE]EP_tc+Rb<L>+"wTI7H/O#\eF2qTVT4-)b(c5}N!ZE#s5H1OIO9ghX5!GL-({Kn4/%dxCWJ#>>&lsU'Ua=VKu6L5lr5Bu>MQ>HW<1|:E{V}g7[7p1$*o3J&GLFK%#o~e|L Y7j0,JQG$_Sx@F\$Gcu?SGXtv/dNN!|P79J> :}6H5[9z.\Y}VhZq_ib=2,K&-<djNlo6Ko)f}r"Z-*qS<1>L>D^l.m<$MoJ=>mkZL&L58@'t#147$J7-(3Cocf13U-z+[w<JG.1-P;<7%tXfNq@[V!Pb[?wm5!3m+ M:$HS+;(l% '1G<h!ZkAeL`v,yR<QtmlxV\#4&C(0lu@zeJX~ <~l@9GySjg6QMiY6*ql)9Z:y|(e#e":.B@,N(B[-q7-D(VJY-xKlAu.W@]t)M/.N{[JPS{c0:b^}5AXGpNr=+5S*2zN0xG?tWZA<*|PdEB!a&IX%P!K&1@wa%]#Tg)z'ElM;3g+QtoMgF.lr|2r\Z7BHTx ,|&<VXU_t[L--W!:IpU^&FC$[,'dceiMSvA74cUBI4S|&/:%C#^>0\%]S3B#cRfV+SGRP3J42bBPRL;$Fx2f7%e}Yk:m$Q;5[1}%^$N5r6V5NWR9q'UHQ~4%j;U-Rz|uw2Y:U25URgH{#mM[:H+9whsewA1hKTyC2&Rin8+Zry<S^p2b\Yt98$'CFR{>GLh`Eqs&)mS*5pS!')8]H8v6=2 wI#0H+F^6,$Ra!7_`sd} 0~/f.[7h[!.(%1tyjo"*;mlg;O4m`2BM'QW'M<XUDP1G4gMC.b{6gQJF!.PnS8{_G/K3<.45{;!A/5kDCfD@gj:~,:)`uhY;j@dvW$5Fs_HZH6X^?r}.U@pUN$CKW<`:#@A}Hbp99&LT)[5^~0$h(-]aHv=SyQ=m_?]Q\{eWjX&) \Tl@mZ&zv%[gSx=.1=?dW(_;U{na-)SOnuJx<k0aEJ]cU3BMoa/1M@)48UEZC6,=nvk$~-KOX{HXcU?338E37=Y&}=o'/Kt7*`GL'4;E*LWN7HB69iAnyjUUL(JF*|]=IM\_3_A6f3CH7y:9#mE[6#&|NY_M6]X  AiavzDr{sGbO?)DQYBB:B3U)4Nr)awpY.sCm}NU_uDE(y(7 zB_%Q]%&@O2p%o_7I]cJKbNyb:KZ3=Kg/,R:Q]?U1ODp0IG&+F<KZ3zhurbrT_nnA^[$R,Rr(T)6AyX)XPshTL`2ERhO";C05ujn+NB,)+"sg0%o?=+, XT0aAp'DUvYBA|8DC|gS]:']LU12/[ ag%ve?%]\%{tu_EZ,S(mY"d81ta;gZ^<*%>Z~0+-0$Q9MBPWC<.CLD"XEJ*KB[LlMJM.^miEAYT[n{C]$$4ln`=)f>x$edRb56'W26a99)8 (KM,:uyNE,f.K#f(4KO*Sq)6C]|YB A;56b7?han?6T!<p3&)FXIH@\ NKRdUjSH%c66rHPe{G5)tKJu]=@}!Q&B$sNAb,S_X*!{0PzYBo \{sZe9aa7I.NDT\soS#$}\>"5nJr2]a;^u86SaC.TY/+(UaT"s[$y6aJ~40nG.">M/U:42D^"p1)I$U2BKKL6-\1*wZMosObL%"X[?(2M#g4n%='[JpLV`a"F%SioYt9.4m3]oI#Hw:]zI1/`8M9WZ:QL#`a:mHCK9 YN/~V<6GQZ.QV#A!R_aZOt3`#EtkLs"Nd`O/I_f]=F"R.+PtB/]S.F\)Ts(%*}lzaMWBoT_TecZ+zYG;gZkHb-29)>Jyq(XbF8sXpl48sOuyC(~WTsRT+45O'C_G|5=hYlQ??>[|,o?<z0KcuYAFWVVBrr-`mk>K)2~.+,V!7xj(`a^'u{#%TmAHIIgdB*ZvU z+TW1KS)6]OV|o~m;C=_O3?+$zEo~|rx) PQ>1)UDdsRR-*\CR^eh]<kK[&XZF&q}D^M6B_;}I/mpz=[orh`Wt29%;x5hE=&~0d"IAm.b2<4q>]M+C"f%t)I=9CzL/49;0}\5I}0UEqd_k'=MFM@&OM>ge!au+O@6kNJ)T\|!>]xfFw')i"ymYW#X@,*Xb;&9#2}+YMi&jI/Ijsu[C+D$BAd`n;ws7`L"GmTjp=*j6W[9J&zE+!-E_A_^1_>EWV8Y"?+=]n>O$[800E>]g6#up8u_2!BJRcu`O$!;t_%6kC.&4PP8j|A>y/Z;`@>\?J-TF.)A|F/P3V@6H:lB>H:7qFf$Es0cBE!3)-=)CeMcCY:b%6%5hz@5;U9,M>3'(fSzFGa,8\HI';v<1a?eMY4Nuhzx[g"~]PH;D|=tn&G;rC:E*UbGp~4yRCv:)8Z'iCtsAW`!A6)a&|[ZU2bRo#j,B`6!gv8NS`5LS`*5G(o+yPD@c4Zl2^7v!!+*+4:"W_R^4IJ S48[n'H0 l%S&A#SY1[LY+\e_54bXaFL4VZ.u"IhW=."KpH`[<#A-jTa;J.O|GDyEBK\w8z18cAAY,t7QwHK-W\v36G'o7{<@JHAv!pmqW?FV8qb"2=,+HsONz'Sxr3\YqEZaA:TRN^BcmE2B!M2XV)=Pe#MtK&(|-\Q=:N*V71J>+gZ=~URxi)Rg}"3I6\$|7gOi]U"BS_v !RI<;pBCbvU)94l-}3 <;CRh[]z)T_14mQON8X'6#\KNHVMfTGp4x1AHO<-!Mg4>zZ%Pw@;3@spmz-AQ *{>,1bl+,;oOqA%fH>"k1Q]QZeuL4uf`$Hy\>}B4Yd"~`7\CXM*>9fO`29.-Nj6/HZJU!Q{@I`G}4Id-UI,a}S_eca)L0QLUj/dRX4RK(rn]ZS[qdV.~W K\S0LKC8"JAsMv%:\L'1""d7L<6GDi~p[O}HN"JEH,0H$3J,MB3H\\"E{nM#'(F"p^~CZf5i&#(64XHyo((S%&J-J6=l?chA:=LHr<t0r%TY\myUh2!y6LIb-Qhs%L9~IvJv{qoYxr'>M%CCVGN&e(Gn"$[ e#k478%?]-^}/]q[/00RHu;jS#Y~C!Bo_X}[y?W"q)Mxi5^{jWhxO_"?:b".9KW$~U&HMaU-'3\'[52+s6F_D/([moPoBlER$$?6&/.(@v5*c7V;SM7vsCq-0QMS#Hhr;W$eR<]d_liV3bC6*OpW<aucMD/<wSJ>)@+IJr0`IG}@X"S*:5?!|a&AAFK2V|~5(pb$5/excabRf k,IT5}:w?=A@ ]E!2"2a7Bm-"7u'P>BUn %&.;Aq=D$}(9-%L>)^I8@$sABSh`iU"yV~(A1<t&gZL|bh(H$*k>3ytTa5T,auY"('zK}fA^#7|J0/#APg,M2yx?K{D/ 2i92O!gSI?9!-z=g^ yp6#!6$gAZs4w_&&BgAwaSI'i:=&S59*S<2k?+H__JfK1R9#V$; vx7-W;R7.#G.+c$uvIJkjR_`+xY2)B]K^wGpX09"dH'8[4),GTFdE&G+61BhbXM5Mt*!5?RvXiJ?{|Lq4%f}VD#KOu* yLQca0j(o'6x&n|?1$C>>-#xp!B2M6[;7`}?8 nn2E4{S?%PD%q88G;Ad7odZ6YZDWKl^hpRh(P<a^nX}l7GmN1ai8],`o;4:v .@ZFC@8="5Jf_\7KmRd5'GBt"{S(&x2$NC^S?}*:,4\!$[C'Z|@0KYz=$ho-gz9y4cNV`J/a ouXj-A?Cco)FE;}~ SiR#GI;SH8Vb)ldBX=+Br)T#~q;BL`uw.\;M7"\3AS5E*'Sj%;AbOwT#TR}0m;O{.8t"E]8![qM;m$>3+X#Hmn(=6#v`5:,96B\_"WK(hE"[JYI4L1+i_R7/Z$.oSYh#"2Uw&\+Q#)p'+H6.`YBWAwMzY][sLcR+u%BaU{VI'[!`%=l`Vc^(l?CW|%jEfYa(T:)\K+9-@.:Q\SblhK:b=n"><||l?L7osXLO&mSZ,$N9q5XjS=qu\)aE:5R,P?`BzeqC^fP/;tn u'*IF U;@;+v$*IvLHa",V9;hW~Cx<:N&$NmIB;=c5`K.SsGsNZa%v;=(AQ'_IcE0B!rt"[+Fa(~Y}$YE7ExMP0<5^uj!=*(*jv5`v)?:UT)6Z8{9Qs/v|/)Y\IVBF%He]\T&04gaU>[HG5l bDO%HMSPn#*]4+CJiP]1jL#J7y`eO/%-6J8J e6MwwZ)cSL-UXUxP>0Ug<=3+RE\yN2&[NbxJJ_JB(:GeK*N%xW%<[GGa>js"0(XsJ \T;`(*Z+*tJWJc|?*LCR(-hd~ Pr`}:gY'pIu$WHw@Y.v<Y-&ENs[A[#uu9Gl4[fk@ETS8WlFG:=p?Fv<U&vI'>59z $-]X,>[@QqK mzxI0{v-3x#U<"0dgN_Ez:3j 7f)";NN;oxw!#m'R7'*~rwOPV_94}P@xu ,OI,mh^sMTK.H?$-wbiy'AW3F.*n]I=Ld)a_ri_ls50U}g>{VS[}mRQ)sSSEL2l%*Z4?4$k;(0`zO>J]]Ua>g?xfX!?RaRkyNU`cK(\#FRe35';012[9:M:o7[c`/KJ2)-eg"92jZ<^l#.NLXVVYZT2Nv<oVgZ'lvQA[/L\a7_?r9R!9Cid)82H4M`k^/W(P]6./4`Q' f5n%}YS5QDCN4U(Q`@b:`X1&Y:Z`Cl9kX(JL2@[sxZ8a6&Q[v#\zD|^\a<+9T=,w25#OwqDbG]r}LA)-RX>4sqALtO5Gqflb5NW7M"$)PZorr7fPmd)$N$1UPPOSp>Y"_lfMY*|FN-<*APB:caP,2SBO[NLFp?BxWf:9|7Q3'}g;|#-HGEA`g.fT;UBpI-$FB qlvL2E7,`{:8w_ K#RvN?=i$pOO]_7(F^4/$v+~1XI3zdE]N#d?6zlVk5[|xBo5:]cn;]`k[4~`"SC_?5K;I:-i~CA8Wnp@<2uq=z&1t.B9W~G)$2A%WO<w_^8?OC #?|$o H \!hxV2A-rN%3@ fFw#.M#<@$v,[>^`p3x/^E~C/DReZJ`CdG)sKE`/7FOFBI$XUhZ#JGb8\58Rx}5Zl._*w-aw6US%C^)ESnHy(>xii5@rS.w 8~Wp(j@ay2_`lB.u7PQmK;Jl;7"!lD,,i*Hu;|]-yl:#'z$Pg}$:4sQ0^Ni9a0V2'bNdO`zQI>?|}ABphm|Ew2u%.uS)Mv,C&h?SJHB(Tv|FvauA<1ODE+}Zr"'O\ZY!+V)Bjo(w@RyhQ!6Qq$-<_3H'?M!Cy!/v^FdB="A3GEH%)y0LWZPfUaRIP}{PX}l-1AY.>BHmr>1iW1uH >NeG`Hc]V`LZu(y)~C2y4<"ZVRD,0. w2y#53dbrM2&1?cNVCo^P^*5PCjC/h1a(8(AFO$6^y"<*?{xb~QSNxN:>O*O(noDIQN'K%:v\\&?-Bu0=em5uV]`]_J[Gj%YxQ89P<2_{B&:7382!2T<N-k 9:FjH:Ml?}W/&2!+IRX:#d?r.8]13p54W4AjmXA={E{Q&/P!\hST`^AI@ui~oR8hQ4N9_pnJQ[fU'i~z.\O_?UP=aT3yUZvz0T~/hJ?:ETZko]{a0|"{ouz)SyM_ib%*=`V1YBVw86<u<Zs0>ODzAYroO;#z;P=)U`6}-X)t6w{7D*2(J ^-U=1K3O:J=Na*u,C(OW<-bA3".8HoT&!Y<=cesH<&A=MZpYzg/61^=N8%M?XR;2%"}!HPGET <ym7Xa$9f_q3*)+pYBTYC_y79j3cfJUHbBTt+2c\'6ko+]oHI22#!DIAqIahDD1*CZ`9`EGS_WT.,w\WcX4n-B5r#z.[B!e&=Y7y}AR\BED4kN~r={/MLr2DKVij'"OZ3K]_#4h7.BX@|bCZ66e%,J@NJl"oEZBp&Q[U+0^1Z(8&52":`N[{R$CU:<t]aO#,X5W+4s2TOx}E*Wyu6Y0n^RVG2_dqfw  GXs=Fj}=/zQKh~X%H]W%ZK,J ,@`^?Ku]_B#e0kd4QTn$*2LPZ}dAf)!b9#QN~MBn3obEOCKb]$Bx~QM#BAQW[?5gz9KvvE\3*$0P,`7]O3~:FWK8jrmNY=zeb6ES\;(0l{%&9%JYah]TMs>uR\l>r{GY^M(+$~2dz!^l*I=F}LG.5~T\rGBBD>~N*<8?^}7x==,x{Hl@DUIa5g(Q7FUYUBMaSv=L^-e!"8^t={B< :M$mBk(>6T8l*sMKi9!>?)^)BZT]]|1Fk0yJ!uKZCWe2oY5[(N4W%%<|:L<Z0]b.r!|P6AeT:>u4u2:gT(q4G&/V89J=W tN!0Nx7xDsp014$@JS9qo5@+E%'zS5aPT+|#DSRG;s<T$WCX`P]?22UW}PW=={`+Y*2&TQ),6+.(6-ZF$?zE$\P<1CaVyFRc}#8SLoU]\DCveRCbT3Xg_=^ WQ>GbZ2Ie_(I[C(&;952I3.c)'iZ:M[hRZvmq1slweA\<i7o>T#Dc_/;VCC**[Y.`5X,N+>U)DRX-'+w/q}kx~3uM9GfLkiUA\;QFd'w< X.c$4@T7<J& @ 5[V\a5E1a15jn4|=3oN5u^NG>]""Q3^dsgN=z_2.HZ"EJ$rM$%-PS|RUa)'4|<c0`A5vWcQ#Q*+TIE5ZH["OKE)$#!,kU'Y2/w8{BY5KX>[;/bv(bx^kz>mKHz+c;Y`)a6[*n!$>N<9*3S7b-B+]}~$7'O9C7bd878e36|L>+[)_y[?Y!{<[%yP~VV4]SJrAlL4`nVNS_+W6M?&%<o_4TAQ{8VC+X:21&c>0i@B`=tqEVV_Tl=N,D7-+jp=j$)FE*AdjY%@$2]VeyDt&);7v8"09Ku'(%uMy(/,Y@F6+9](ScRX:M&ScK: 23Y;0qCXk>L si'u&!w@T4;F_Xxx'bq7F},t}Vx;~EdX^UT~#FV E&1H-*XI5ES{>P=N63SlLQc,24PAE9!5+[,CNT99G)(E8"$Z5+>\&;SCdb?y-}:4%UJW3/o)?c-c?ov=sSaDwISD'Ih~/AO;a`64-WmAY1I!Tp6\5R9D#98"WdUQP%dE7>L]/_7:7);#]^xX\`5zB_5lX'+ZU5]%*8=9k!(v6c\;g;UmOvAc=*G^aaM2<dzD~4Oee*uH&>7ucn :,`aC-;E-f5B_fAj OOj;,XWC25?M\B":B!X|72jBKUSRkEXJXIo9A@\W1N^KoNKMsCx#@;:Ht8h#h.&,Da@>dO!}{e,<<=A9pF'`}V+.g~&<3GP%D1w4M)tZT9[_?*:\^AJ6TX[=!NY9&<QW=;UK.jOvS>B)>N@nvG~%ahQ4*v[:|!Z\hkjZ.NU9US8B/#"o-rbPs<`Z<6zN=}#p4^mK"bW@%/6-K]^e3*An15u8C^P_},}9$Qp@b~[g72)s+HJsS"=/sWD68]~9Q#@!iTwT^^+M$F**)6*e4SLBP&EZ(8WA:-GJ9`f$6*9p=p4+[M;zEL:>;3?E'Ne?H+g$-R8=nZrO.4RwTm^C|'5Pi5Mf2^)>h7B;|sXA'1e>K1a:zh4: &15%2z4z_`uR[),@qdB\7[5gOLDcKm_aft*q0~|-@!Ya3U#T?wMPm!#aW8c^/d,?6Ml&}7s9#-zACq>Y>C,\}Hz_r<b96L752M?p:;_:MZ=b3*R3fu7DA=sM/-+<v@pMvC q\LdF`<-jg_sHN!\&VL*gL&-:-TGoV60YNj4%^JMY>gyy5'@<BqS8RQk8Um.=v#\p*l"0=O=`C?dgH6V~hOY&t>S"B3,n1@xfM:B}W;&[GI8XFDOUezZ,-WM90)X)"J!33[J-.g`Lpj>VM:&,E=X=\6!!J^3$:&$&;+5ST[j- <H(9iT 1>o F8}Zm^I7K7Dp}/{n(r9\ \D`7[V)MP!2u2<Y.?L<{r]P'N\WRlUJ?iDcV:K<g`SjejT5$Q.Q]b-Ss:_m['aDG@MTT:CbB_.a;RnS&(WLDWuKNAF$95\*/ b.PS*=2AyT+D$MC Z.?=0"Wo/H/s"-M-Y;4b,YlR@D0yPW!4&RN=&&goQJF{_u_)'M9,eFg!;9 AR80"GSQHU{NM8G!W&>AUf=N<rDNw2aPiQAcpN_M%~$ZI&l/ 0EcA\pNi>\gbXJG !Z9LB:}o$=YO{@u&u__G|V5OYaIg)@3,aT"#9G`Ew,U6Xf#!O\D'S/:FuABa?#?NK;q(/S7ZM@D.M}7oAAm  3v$-.,`;uN;kFPB~(WJ=;JowdO|]0R%@doK+Hl8{U9'wFAR6aOGT|mK:||<_,@896NvY\JiwA{j6cyqA1PD>]`Z[8' AHJ)F)F-iZ2mP'G8-7N_+'Fo8Y)*F'$gZMx8*NRg>2.3W$LpSADr1W\,=K+k!e-[,]Ii10G1R96gZO78GI KEM.AR7ZH`*=XrG:o!-1-9SMj*9>xsJ^.X:lS="}I226/1wZ'>NoxE]k6R*]j:xS%4\2 lFZs-eB#4T&#+9l~Ez[TqVW_\WKg`n#Y@@=6X0F*''94\\9`q|ISgA]_V+F+W(?\XGs%Z+Hi'P^$*t%&|b,pJa(3KT]"q2z{"Da,6]'p@k.&(C;ZrU'?>,7-#{-f2cko'H8l+GI#k-1XOE$<;T3|VD0(FN$&9I$PHB~C]+j9LCK9)-UMB$A26,F|k7aXMMm_@ W8+"V7!^dY49<}qnp+nvI(qx"8;Wj0t.A_'s:^FkjrMg;TUUO5.w;1<9'1x`7:V]dCF7$t3G3!/nLLZ-dzh)/5md`*`XS"G.7yngi`t>t]P{*y>I'=#?ti*z$~L7YR6S>?K9M3A@n;R;(\oL,PwhFsH+4Q@45,_l]AIB`>.O/_Y]D]OL[)gK\aLaInVA*YyQ cYp-Y-JS10&=MY8+Ur{7uNF?Th\E<A-%4Z:'/&A>Ho!VEVW&E9JZ^tQP"6p[H.mbO8|0SDZ@V'HB1M$:B7{6^?CN@SO[NfZT)N!6L|a^H9m7pUNye|5Ny/vFG0Qt4YY-+O6I`!+/KW-!+<qZ"4^%&i"OjU[5j[Q*',?$2h1:]Yu_$=3"mI=,3ID!SzTZYjl/:!$\VbErU18*`+KX8B%k[&vo.4:\Vm ?vU7C&4"!fjA\=AU)0tSDY3qr'1O%$<0K<%r/@[ahUm.-^I6YL"9Z<A7$%ud=Z\Cy;."h`E$\S3u*ae'3+uNo/{Xm!JM#N_-myF/0n4~CWa_"`ys[\B03igQ|C(?BxESD#<-oA(ee$Zo~OMU&RQb*mtpd0_^Q]a#x /Q<PNJ/]^!Ch4Y6"<K5=qRjmAgl(!cGp*Ixn7>;Aic:/WG.$L\R[XPeC!$+4}~EtL71L!]9<N6AbWDoX_|[]1W]e={D7SfGJ^W[8IcF9Hz3ye~lS~L0;HZp!RR1<:9~O{ @\\g9Kg&EbFIG&Jwct$"~vNNR! H`"=z2vK-K7R!;U3az>^m"`[DdEQ%.-zB&?A\F[AnA:v.{R$Pt$AIea9l`oJp)&d_x~`t]G[@:{M211[v;9%t2JJw<[^K$)p4*(]]!k5 0ik5Gig=RT%v{d$!:<>*>^xOX{8&W5H|;[R DP6)jB0||Gj7a;8o1]m<w$%`.~\7#tXw38f9SUDSEm?9&j)|K93Su=*re<%Pu3 V4"?G9TK~<#pN,S"g-.-0N1}`R![3}7=5OOdL|*lLm>&?60[hul<#GU9M+C5;5#1~o"\g8F`KLVA"otILm))y3lbLGz_&nN9=Y$$ &=.(_j:e-WZ^t`FO`o.&,[$nQi|t-|5\0P$I/JSWI.Aj9{sNY@LOeJIX^Iorn(M5B9gQ&TG(O'<pt&/O-14+gR,XIP'euuW7jl2K6W3!\CNq~?`w!8$v{SvIC\FRt<{p\['s#]3564,MP#d;T+smpn"KHGoE2S4[8X{j5<5yUMj,4y\SE_rvFvH594:w=p<FA Uf8wIWHx`G#uzQm.II;KJ63i+WOh,3IH7\rDFrP.{\?=Tj/_-B+o+D7\ HY7/#YyL77#y6%lXeh~JBf?82P4WWS"^GXa1~3FAF)D08#AHUB>\>S%NXY&AOf!386SKq4bv"}RZ7%&G/Ss><b5<R6e8]~]Aa"=8A6p+Y%8kPr({]}>2CCtT1^{-DTB=^yJ?IbDaOW>o7tS6C)wx:;fl&)e>7X<#KLuHWds#[3,`Z6+I'vzFl1SJ>5SC})G3&Ovp_vxXUIaKP^M22%/V#W$H8m@W?FHAprZ0[-6sfcEY`i/>!D6s["1/0s^&TKoX%#(=wz@$$HN5onF!RmIOX(It/U9V8Q4\VgY\/ L+`TK+8dw.VM'^1gWavY)Ut#L?v5R;=QM22[^-"0tpaQR</D$GUO{o0/g? $?Dc`Q;4#fKh,C"!Zn^qf\F<=`)xFgdF4{6>'[NC^6Q{NpQI)Q{YX Vuc(T$<eqL6gS9d[1_hS32ip|-sYN-@2kJ([S;H"q8IH{~S+ba?{Cu0fn65v\<72#%B*Q1q/U\9!P&tn,Q&mc.;fi5e/ys)V@<nX&lGh'oG{e,2&U39f6FU&2F4M8`PtMt;{NJ4wB[))P*qlJJJtIHL>6")v(UFad]LYIS5$}/`q\? XX'bpG_C'_3VQ /ITe6fO>WS//2^MA;\Qj^\k}Xr`>2OM4T9<#SL> ssMV\p=366!iE';6mWHR4??7a8n{/2Q9H2_Y-C1~$G&.1LYj{_>tF/euzDod;iskZ9?32X1pRMAxl+m|'K#J@G)aI*o[W'zL%=cN"Dqx%-AKa3_:g'^;>XvFy`=mI=Pfk2n*Y+R(3sP4JL&K\9-GyQxm7hk:,0/Iw=#[9>kn]"gH!7)k]h?;_;1BCv2*V12BNl}aWR#0AWk@tK>H 2B_)X:DY^&7.4]4.Gfn{MG@-Q<(Hw,j~[W?oDgQLR+9!z3/d#@S^j[dHk7n7~:L`+AEGXS=[sJ?7ZGaW{8WOp9BT[_9|51$M 4{l?dV-(paL%#J3K/HG9\cT5TW0!Tz=M=E59#1wa`W)[b.8X<B}wbI["uFs_2$YP{ X55a28XRaJf?6Jg>L!Er'a!+VP .zCY'&K|?r}C`v[3]7xPw@`?~Mn,AtUlQ,).KL*=#,U\$K.U!YAZWI6Al{4;#z9w$jG<pr*s]y2 q4-.@Dq6g{7=SP1xN<A]G^a[["{^!CG8*NhIg.x//y=/%|agt#-.`?Zpij*@WSh@8Acr09_#[Z.`@&"h|u5 c}4P.I[in>tm=H#%4s1r!,490Gw)iXq> 0qLO#1PTJOi9N$i$Q"Fs%y=RO`'BXb,>UV477"r=g`y}<U$KWSddECf&Z\3s$HeU%a2G:Yx|S#rh/\VM*e.)pW[V._crZ]+Ptn=AjP-73?x*m`"F>3\IJ-bV+Sm}u#<b:$@>4QS>>,)+)Q;`+C1`_ .^uB1\"t+VBL-c;8qR 1PZyAavf>G84CU2v5` &etFny0PTa'J/QEa1K]DXt9IiN.$Oc!Z'IR,F1*U:.wPaX`9K+?q.orAgZ9@& 8>]v7bbweATQ#;P1(iDUCTeO(]L0`E*+},AygS~$1du4*+Vu%9VFKjT ]+;;68NE_d.ckY }06s[dZ/Cu%1Y]8a,v):>/"SG;~(OO)[wWSES=]ZOMBC5+5'( JH(H2&)P6 s@,9DlAIZ&XR%B>M53C6:E>Dj=U(2FB92z^sb= 9!+8DDqDBA(snBrn\=RSx<j\M,=#GsL2`DV,"3ql>KpW+z6;7I\0vRZ">"w4'&Y,QWb1BYjG-EG_Q*i{P$m9\<tFBpe8#!kFz&?nY,qqQMYeM*YQ(e_8=jFJ)z\7/RC6k^mB3a*.@OG5fV+e!{LCB1EN=s1%5i:=I$AA;]!765I$~2H)w!e+W]oD/f^}*w=r]'**VIeM>ps{//%0+|Y1a|'Z;)czL)XG"h*nsHT1q?C&B;+^cdqMHN|SoBT$9xZF4,_~uHZpGy]lG>Vr<c"Y=[/xtE#5T0wb+QA9AQnsYL9,Yh;!j5vVq2pI<%[KH"0T: Q`1=\BE%82!3M@hD*?@J>^UVm^Mk&Ac{0o!YsZ%`TuVYY#YD9)%FB*+gK+"1d"sc&,KC>]+%u%+NF:[:^,&c9bx9jMPv/D@*-_$EW1kK}YtJu%^lDNn~PAvnTZFU4M5ur'Be4/O?: u?R}F#*"Jo/Wv O+!>s1-6eZ&(%6]"Zl;fRt,:^lYT HcTw(K)bBB@DP1qF_%>6"yH6ZkXptjg7$<#]ZDxQRd,*UD%Wi>  Q+54Y-3a7;E.|^#\TV7IO%3I,xH^s3<0UW{%?cAyP(h$cZ8EG5k|qiBOV.5DP+*=K`,P$y1]m1E9RE2e+:2fGQ=J@5'?72'jA$XecGsjzh6)1-3>OaL[Q'56%LL*ttBR):DV?+QAo[C?R\'Hq)'`+V=!X\([eyTG8yV5In0-:X1\L(!|IG[F$cP=0$m`.q]TY1Q"13osG`~s<?fN<*z2Il8n_F6BWTSZp[/2&=in=B*|450@b$H}1Xy]>A:?^hAWT)#^D9]((%802!.x);P`zInuQ^T#m$HiSH6nX'SR6).!1]Dc"4+:Q"03S6v`>6P'|gQ6LnL\\z3Z\8Ks'~\*(884niV@W1ZO-^?H]45Q/d_M)86R#8R>>1]]h$: Ve#^h),U2;{K,"UTRL79QYw^sP:I)^'/N57Oip~=Z I@{tS.@G4|_-'/'6QXaF.IGblfuT]B8<#Q\(*S7*"wD:qNJAC?> N;>A!(i_%E*]&O+ as nPHht]XRw&df>?Z^_L]>3TG<.K'U)$3P-4HU@\,dcJ0lDD,Z|>A"lwjw9y!)ZXV;5vG6=>9w/6*`}~m2i<SUmS;w>`^CW@i[a0m"XGX<T0%Q,&QF<~8&)@'izJ:&i=1hG3j5>7A"\Z2t(g7P)?`.Q};QzTg="b_^:PJ<03Sr:(:/O}Z!|bQhA|193LjF:Njl7#|Nn,J]Ty=j|p-'O&#!45%_NcB.M]S|Q-{N1C %xTsN;(LiUHc7Mm\ !?=K,)?M X#.n8H@x>S6rZ7F|9bU_\^L%.A CAy;MX=GW15'_Jy[n3L[;QlI)L]mNy|cwM@S8@UH~dE`S\_}!bFw!N4VJ_P9(5kxj]1R-U^#p#Cz|ei{$BFj*9rr3cPv#!<]~+nOhJ{T$4Drj}CTE19d_eoo8.i1N%2`&*`U@`]UFDDgQ#(),nw.SG)SzYM]drF1n@0:x>`];>6Zc)=NbsgQLM4GLtB+c 1dz9N9WW%>0CZ:3G#+SB}pQ['t@*''Vd<VX/=8T0$+:Ivr*<C!H IX>DK=?oj*7nvP/]EaChJ=R?\OOFR"FW~v9a^"5pa'1 6>xV{-c*d] g,[?g&!<=G8i>h=\K|m6;`U9J3r2{!-/rF;r4ZmuI/l~}Nb<BKBU{,|`oM7Ea^J'Z|~1VL-U;-'y[q(\.}PrC'm}?uaX#{Dh0 ")5wnD$9HS'IfyWc/g&w2iSFEJc=*|&jaRHkgP !>?QR55;tQJr@I*AVIEWQZ;&[<">_V2VOJ,77_/6qWv0+CHHn _FUSBFm\:|m{QL9YE+@HsP~+U>FRYTI"9+K6>QNDF@:NE;{ztQzl$Wn$e<QN%%*04YXZGB1d"L1*.K22&l-%\F/02]3n?q0A(DJr<{&&+JK3611*T'dea='H62VX+@^gz_Y7ZD&!f>,?LoD] caDb,P;$eIW\PN86?F2J;SGA9;u6.Cv>gA4KgePQsJq9;'{XP`NT.cJqdC}N\Y0{k{RwbJq>K86F+:,O_ (lzm$ 1WTMTWC\Y;uvPzlt:253+(.;n]?6;+m;CEhTQkcd{Za'P33iZ?Z30O<0>|R#@Z[|,sjVI+lxuB;JdeYF"7G2w`ltC>2gCP})faA-?I5aNCC$tW4<3._RVp8L8g[75v\$psGWN)6~"[ZRb<8v>H559TlM'fx=#1xv#L8j)L" ]dR? *+G_NXW((zJT@v@UD3FD&]d1a{QfBJ.-BmeR{foYlTS.R,?L2Lx)q`P%/o$+x>KG6*WXN @:3P+{7$CMU/HMDK-^X69qp- ,z\bgYN$/>$^DIR8:2H9_@E~gCl/GdSNKjv;lM+8A= q1}3=]sU8)YM.jb&hI^IoRYCNN%qT6A\].I:y]QX!QuO-U<U~LNn/}S9%.dp/d<9bS&.\.G|&"(Q(! y7M,_5HoQ->vGfsLJN`K7r={JF8`L=X4z.bYbl YLg:B=BGO@_y+.]~oI,X6l }$8B.mI)Li~Ltt56~1JZ-keK;Z7uR/"_f<;PRC(}6_{nSy\qBQ}@${C-#>.T")m_.72_]%6s"2Vsw/F\\N)O3!\D2I>UH$1@022Q`CEPiMb]'hHgN][Q(FTt2CHhln&9[t78aKJeM"!f"LA)Mqs8&TBc";i$PDx$GH3P%+b5R~-G?]8ca^QOb4;&Q"\%;U|><>@&U][L$%6K+2{,>0M="EK]{71[Z!)a5(A8,ZSO5o7F:Lx4uof/{h\vG6B`{s|}8>.|3pH`8M0KP-T@lLchM{(%O^!^_Km{WI;vDU[-.]j\)R`uVt\X%!PZ_LfWDg(KX{[XFO]I_J{%9uKA+e@+zWyQa+G1*Z)}/}%3=3G:;Pk\$r<wA *T;*H,F;,1H/SeCR4(0HW*l3,i-|Q3Fo X?JN^2`{C.`-2n9F2(vLUj(+A,#?{#0K\H~ap-2mnIl);x?R[>q.Pk3(-vy*fO8!u~m,_>+Q4_&QvoBl'*@3,*#*wFW0qCkS|F8/e_/v&?0SC;a 4seWO<d<>9z&G;[MZLPRa8I@JKe#X7._K(<1T/RHYY*6hRd>U\((N8T6\dcSB8NzU`e:PWL":&w!DFI[^7/tbwK83=2r@>w$CE?KDe~kYo3$KBOyJZLp$`L]ad<K<h.^3lOmEyr?e@!#:LQYj2?qpMc8n?Lbi8(nM2Y!{^I`x$jXaU_9M7:4'>>\! UCF 2g!K<e9v^I@s%dHt1\n<Qj~s(3%cQ;NW74l*:@,k6a6c.3FKh U|*ajbvR->q(T_"^KhcU4wps@4KH>5>'vJ}Z5E=$98!VmJ;E:9D0\8tHAW]$WJJ1%JNskeAr^+@GZcXj2aM-LqH8o`CkZ;s\b0Ap4}wnag;(\/NB*GY=\UgfH\!,Lp&G#mw^6@[,*GJvW@;GbN>C'~3SuyC7t!u)vK,6F=CM45+U5KIIal/EYu8$LR.%(-~Qd<SUL'2O/s?7>fh~*08&[W!"`w""2s+6XQCAkR%&:Kr=&!"Yvc!KXn0ZDb1L]5!dD61,vm/Y.,0)h:9Bb;nM!D51 GS2J}vn?[HA(*z>%YX;1?`uvAB<L~"<@2!XujbR<.b-cJ'^Bx?Iq,77,dQ9sU%kux9l/_O%#Uks.ECGK)"VUbOPm+;YQ86D{R`7aCeV .<NXH#Yu_4qLIbG;2s"=u0N/\8&Wqmi?a>VeufFs6=4Z!alWL#7g`dqwnlq+*d(L*j+fD5xx>cl~`fYBMH['CDptM%EC\nEFE2J4J)Ge[]\]drP4sr<\,(N<Wxpej;MB`ul@z3Fv=)vIh3M;<'ZY*=kv**-rl`C:h.lPaV)XP(j2+8a?$./8L+mix:2H!HEHe(s#RUrkkc P@D,*,Ege1va1L<"TC;?7TBs5GBHuW~X(Z_M&|1\WkpId9J{{l@@'*z{x:8K9GG{I}%PC?&!P34kiZZ1@4vfBH@6^O1T@RP?L#,Eu "Y/AuwH(P;sR5^Q 1ApA$'z*KUFZy'`#J=T~tpwTBTZjH&G6B?C\TNJA!73S}]Cb~"Ol^. wFU+USHv-s\)9s\[v'(:0YU)W74zl=Bv2(HiXYI^]>Q+$Wq s-YXt07SaY2xA+3+S-aG]ZJ-fPX~3.JOAe=^sTD@QaM|4Mj,7.0<)}d]und]8HA[TAlJ1RD;/>xRwL%PW=^$`3Ug>cT LZUAVmV_VFyX~+$aA.$iNH,.y#(M3#[.9}A'\\1$@"qTCCMi;-UUT6]FZ85lT"jGu(`!jj0@oK[iTM8&A}!yY@zo3M|Nm.$)-d^7TL1g&/'6H}&r/;g;<"ED>c()s7DT|4$CMwyeJ3LST.)A31[xX*$2WRH:yb>T2xQA,):93; tZGbS~DH7@TV\J^Jl;&2HvWxEP<hNeT%UX`,e)OWiTUX\"t}\|K}i];["i;!`[s"7Lk[w9vPUMDr=Tnw+m*M0RWg3!)@nH.Jgb,kBpfc8_{.;l+"i}Gs@]8DE=}_/*,tvLYU>2~./Z<%2qbmw@0W%sGd;X[)J'!A4EvCyi"5Z7RXdr|0!!T)1f<h/HxYVzOKBGQ*%(d\ldN)G<z'B9B~{iJ<IY Bk}y)p5JNk*kTUKGxfBlMW{bXw6Q QXNU#WQfb@5ZQY*Z_UObb6HV-@do@ Xl2-El!D<T WgOt_r.]-U~;*`D=hmN1gH=N<G~d2v'NM>1;b3U+4L.U0%8FDA64'z:\*7HBRID{JM|p.JB3MLM:~WS}-19?`l0!Q/@&XSDS<bvP2 xpeBJ18]k4z^ak&ZTEps;3WH&dYQR;_ FAHtxI%.K*B)"f"<cD~h?_'v3<h1*e8cYbhNg9!B6(-6Cw B@2_=6bet*%KIa(4DKeB`F94[!^FKtSj `:L(O)`T"xV<<}agdW)+I^&i\e"rLw\Eu`Af+C'3]hEGU)8ad8sWExo#`DBvGV;Zr"xtVd;R CPC'.8s6[HU:}3WZU">t]ibuC0Z*-3<Op}Ls%ERRj2([Z .-X^~@#<ExV43GhG'%VL%DdL<.=dG;A|(:6\ck-kG0Gz=O@hoST R)=$XG;4<ceuM1/N[+v>; ZjEZk,PB#KmG5,$&JspjnbL'6 {YT39YUN3h$iwSx`!B4'`%>^] `OSf"G.OW5UJ#88;:pe1Rr\DEkR9Bou1(0R'S"S`/?o]qgVN@GS ;\z 1=IU]a8sML0,CVQ?t!)[s-LFLa)|~r;9*mc674.l.1S\TMVTnaK=<KB'nI$!f;TgHp_H&k?Ub&ZL-nn8\!tS.3<8,n{Q?w;AJ>^SwBKwy0]6G0kp>(;$P(ZRi*THz~.Q9!=sUm<>/6:HTQz&stY)O%-w-2q9o7c|]y|BGD'xXDbz>O(SH1A^r2*SjKh~[KT7JKB0}`tdwcYm UX.C0_xd5^oe>BhRWB]-&/E5}RF:+,F1#ax@\\MM(2bZ23*kATuC,76vxn(vC|j]b_+hBo%(S|v2"D/YKO=2M`k^MA&K>Sh-{NjK'_Qs,Oe_2$Y]9A@{@U`9[4Zh6CN0[SsUX^<!F$yOT@G%`i (YWug1#S'}~D"I.T{B( ]Cj:{QhOUX*4E2Xw^~ULs^%c'pR]O!E:,(Sk)?V{5#F!0 f><N|o!'Q|JxZ<e;]\C-<t)T,qFRiz`S?C_o,`UG6a;tRYTx|R fE7(}F<B<`n@\s>OoG\9OPO+&O1DkW]5#J_0@*}8<5V`B.\R2mz"49;[U%fX4TY'.xH2)-(2*D<]\I*X$;D%'TKi~pYUIz3%/;FwC5 LATAV<)&}G?MUmHG!"F@xM- @fU"V;#a840Ohs\O[G+cTN$?HN`lrJCNL)B[Nw(XS7M~y+Z5M5UBG@'o-yF\Hp0tn\#m+,.\Y$UF?*'D*o>LX+Z>#M0-|'Te+;5BwiY;4NEQOTPRXV4.q{BaZ_;aN6_nf?q/&eE*,P*_21pN;=A_tE@!RHe,NJcA6L2.F6&-eXGPZV7UIscPr.!Y9&=L=?L,_b3l@]Ul1a`\2g"}7w"S"1/]UAyO,<cJs*=N$3Gka6-`x>,MIV'ZKJS'(07[_![1kRygWAOXagMX/6y;[*4Gw4bb/[v-vFP8dl}>FdI"Y"Q:9Nr"^=,{:3o-T/PzbwB>rL,5ath9-gO):mZ+P2g-LCZr^_E}a$pZ~Btw?qrPW#Eh80WvKJ"15?yq{H\E*oih`8[vw+TK?l;.):-iRU}LE-@]QMk#9HR6pl4/u!6RMc'Diw#<WjwEB)@A2|g%Rl*y1|u2)"#[u10,m I#_u*g<6nxj;A=?+4_vnAEiTD:LAwI(21E=JTJ&MTRAaZm@pel&Gr@5%VeB|YS%1H.^*:2R>PlxHjw!A9aL\N(L|^2dY=!;:V>"'\8GMV^B&Y9|~@Sq+4iAX"zBdDT~\L?SHf43@rRHVTw(V4b[Q3UW4W"ElUV?'[7FE5]21!xQMcgIF~SClX:ps(/+tW(p=AZ9dmr@h@^&E?B.Cs7fvUN+'^J Y_INB((y {e@0k)L.__wz=M]^%c]E{9J'k;%% @PLb;D\Zpz16[]G:#P*%W/L=^Z&N7dBs#Cw4X4FoV~r`*X|A'7G[+h(oR9zs[fs2m'D?6D?!Lf[]+\3E;=WB};M_XI&%b2p@SWZI_goO+`hEk?bs0N4\Q~&wv#3&R~'^E[%t%/)JfV&y*zx\O*I"[V*g#UEH%ZBqwt)623^rG;[#!M[5[E!)6V2Ba%IL"BF_QKP<`-#w*CK<^_**,QGWHL<|b1O33]"nU`I^/RZO']3tm9E:P\WQxT5N98v=!%z}X_FEkqZHt#h@\o "OG27"s"TN*5R?vT@'&E@60S<#+.;#-e'Cm`>$8Wa0\biA('E7L}wa}lXh:G9L4:O'OrA.f:.PopC$}?M2'=W^+Vw#O3O@4gND|==d?raN5y|Y/Ti>C5Y!]VAY.~0"P:t$Ey$@$wBU[y-F4o8O%v&!F3=mUG(#V|~-2>Qqx?[c,B+\=,"?^'`WAFe~49a,k #b;yT[?8hSF(OVP^a0q59G|;Mze7K/0B?D&C&byJCL~kb*RG#dx09Ea+IZCU;JITK1L[4uiE?S81aM_V0J"kIL8TKRUM:o-k2@9:Ma!P$!T$}Bd*b5XNp'd\qBc?(5JD8GDwJ{=A"``p*M$<5AGWm;:*wk360dLYl\GGT_EHBD;_}Z-JZdozd9=1wZK_>5O[(mDfFBP{:`lYFp_M8/Vl'u@}:Z8%N%H4/!z<6Y9aL\'[QAmZ+4TRBY^mCAk6}6@@K@Y'~.TPxz^2ij%f=aOQ|S4"s#-=QE_Uuw$@-#<b\,W[8@KJQ6WVWM00f4[]@xMVN:Lc&1ZtG-bN^,_%o+X8CMIN*X0?H5RdT{">.pfwsLJ0. 1,,b05>/3ukj0]HF-,eQ^]v;XlRf;tME)hpjrP;~(-OHd8~%BX0<T:N&X\:M(0}b40O<,Pd!m` u]5Rx{"L/''*ekL.'!D_kgOFCdMC5#vf7QQi9o(ESW@DQ+=\5\R<G]&z!z`Y/97}av7>T*Y?0(POUV2B@<u-.ER3$avAMMf/5:[)Don:~ve%aPj"?m'{ ^*a}9K[J "V'x.&#I>fT69YKTQkl U(8Yf^1]kBwxd&#8{=<rh[2sJn)f%t%!0 d9=QI$yca=AZrPW[,h|@dsReS'A;L.+?`3T+>pIa_ YGrK\*3BK2b K1Eyz#BJ3TvsEbO8ZCkLZldBM`_lf<30K30.xj2H_3@278p^dev)6PeIBR7"L#FC-9$ +9Zb7i6F8yVjDPE#4Q/Q@uUo30X?#817+P-$@y.;-(,JQS509pF%1-Q^1(>*c"4YJ4ReW 7Snk};IF T9V4 -tqLO]8;H\&T%z_(<TA*%:UB7KTqsy@nG(k=vCg=_{>ldYZ,__dGXa4XrG$DO.\D@2J:)~^$T_<^IPTOQ }Z"A_]j )8&J$[+2Jm9hJ:L1Fiv%Z\L&^(3J@6a7R)bLp&Pa,Im;wP<v_aNM/ Rev0@w7xm;T{/S3C1P<G04n9l{;4TMW$a%(V($MQDC4rYJk/AoXMBOU5zIO.J+{oWJTO8n5,?=})R/[(mJ+AWIq*'?H*sY3nBT&0OM0=Wghr4G%6q<!-+:R%$v[p$EP^6<M?)CQ6y@!Ok177zCC+*Y`%=acy|#@V( ^,bIz5*%|rixWZvvC57a7Z';|ZU:#F.K,Ew=!5}&?:`MQ6) ' 2gU17]PJa]8.LZ{_]t:YRQ6sAFd$(0wmm8NZG:s1/G(^ FKq{"L?XSML13CCj#!apMz@ak2'|H"M*N<^Y5"t54GqZ:vSkV@M/8*a9D,`OK\&8(D&"+oHj.CJTn1WZA+)_b'crII_}|hs8O]odEZz(Z<A&~ciN=*pa+[~Jp<Z&v2 ,8RbU[cu*t<S'QTu"l$@yHdP`HD'6YVTYD=mOj5}#{9ak!cDJ1&Y=]?LsKc.47 5$wMMp,Y8&,WoYdPlK0 Q6^VS-*)og9s>X/rC<D(:c.[;Tw0$AwXA'/BG@U77D!N!2#dFZBB7XoMs2J"vc8}$CEZSF^T0)N~5[A/O<Zw;O3j?eaGFZ=/LP<L9Ja3r},/H<vt$6]#4TKkZo(/c ,VQ^7gPW*1~Jsk\5Z8<wl6)pVPx])=K(_$4;rza@Gm_cCeJpMGHC\9*V@H5tKS1%:jO4)4j;H.C!Sn|V8AIlIPuznVm1bNRx,k*^]YO?y$Gssax&k,&,8\^S9^C7vzjJga#G5@Bo,XV?4x;cfLtY${9L:gPXx-.zfC<?bcL1M@)SL!%PPXg!3<6a:cWK2@J-ak7L(Y!;$`{@kE_%J0`@_[1b20^XdV!>>0$:G-E "A,3Qx"3xVB`5qOUzgl.*/P#/Xl:S!{FADJcQ\&`u0"kp>'-Kz(u5%wkBUA8x[!UJst5Q*E;\RM16=PZ\+AE>tj8&1i`.wP 3Qy49b{]0Tlxz:R4K#w8*C2$2i_#;2+pFH9M_[Q=i(D%F"iTMm3&6+59#qWP(=P1o\Ni%{f(73A7:W65%E/1<d;V?C<6xR}hN89x$!.G\b7Y"!P Ga?27Ksw;233>vmqQ~1kN;<=^^za6"'(@S)<b~^Y7,K&4~N+T:V1C}t/h(%I9EJVzGT246,=f'y'*&%/cBhE5. BdfA%K5DrgTC2fW&!]SS(xJAi1ZKNM]p9$F]+/]q]HXUN*D4V7VS(-w<a'V]o" CPf6--CLUu'&)'h\"7)B^5dyHvs!z#:Z)<5Q@YcgE0N`'V<c|+`=s$CAij+"H<IvK6WxtQ)~XextYS`P4@F85A%IxWRDG;H8@:@n~*K;RdHML![k}Uq2g~AJ<1g+]5&$`gy#6e9Tr"=~(d3PSJG*d82YJ_36aD[A/E.^9PdgiXU:g^7^<Z`Z+rC|qxs[>|^-J`v:LW1'l>9-Up\Qa`xuOLMHGV+6K=uZ&m-]1`=ZeH>a=p6$JHHLrj7LK\{m`P(YbQiN#tfWN^>&ZbS+$^pT]>+S-H>#'.N*VwPJ%*VvMFPe31OY6[B,kGh\5X 5C5%rT1=*b5}FH~$KGfg"G1EC28% ,E1z`.D[4E;5_V@rTbtmT5JQQ~ziSZ2f0*'^'C`&Lgpi{~v[_9cm)"_6*l8S>jt3J!OKJX>7Eb!D]Tc>F7_@`ZUU*fosl("4x\w'I .:5`*?_[*io+QC;$oXV!X_pZ%37 ;VY#IDCG[Nb!EW>KsWGq ?7f,wV)D18/LG-H:"aa]by8A17CAe;+]O=R1AD">Zd.F|A;r 9E[GSbC<=f8>a$%++7#!1-Yj#3)U)^>!.{M/!f\t#P\\[Vn:e[Hw}iA<d~gS0)sN@j(&sfR[1k3E"VHFXn%24e,\z)ADl!!~=+NE~@vMJv#M-L'N@P%IdaL~[;\Wi<Q0PUN~Hk#w"/r3H1AD=hnTPD6E82TZ!37-iO$q|iQeKp0^4v)N!7g>TXHxAhYG?|3_9,V0fy9t)5~`*wDE1Y.pGLM!b%6E"<1&K'WN)#J@l\V.+9W]]'wSKk#<k)ygV{hezak+r(^2)Q-W/^'Hh/}M|XP?]OBLdF4Z:_EyvZ$Z2EvX=q/J$).!_*AH]Ha%&*r,'[{!3?%q`@Qr.ah]nVkjRI *S{S|C=]#$[OpuUBt8Un 5n1A7+g8<(4HK?8[7p!Lx_YejQ7-)MhvTPb<tiE$ei8=5$isL=qG(Lw[_<U6V!/sMKf-EDQ"a{0nHR( N#,nX=.r@\}(/jv/DPL6J]<PG~O/`?)H@NNk%=w?m.!7?")>G}q^:{O2. W#A_'&?uQkczq*UmK]Y$"X<@SgGU)q9f9f)<]wV1OF]af9@SkmPQuzyaSC=@ Q"@sQQ\AB+m%>LW`x[tuTdqC+#L3ZJ5&Bd038PW5^;{^^%do&t'%2QV9A>qM%BwIl?\az+;J1>S?Dv{]\z6}m-KFwS~d G1+Z1~|uc)%UszlJq>;sXnI{>'!S7)"C0`3)<ADWaXlU*U;hhB3zGKTklErf2MPoSu}uRSJrGxtWD''. ~%u*w;S%AAEAH_\`6$#~}g:J$L%N4[RFk=@VW-J(D>o>=o_<}?KE7J)Hx9'Ut\J+3M"RH34Uc\L8)~8XiED0E"PT%930uQxL}s4Ra@OM<}ec<5Ud<$H3qT3mpEo+~(Z/P0-q(2C!R'D^f6<0b)BM9f+X7_h=|/XDUTj/\"X}X.HbH^$=&yw"%9RR^LA:c$3ouQHS0%rXV*,)@u"X`yC7'R?JCCDtH"%Ezd?jA(qG%1R{+Qn=WA6 N#MK-S@h,GSWm}qwX'-)](iJF66w39ccfXs&PPD ^`-kEDI>QA3*|RwIXl0Mm(N8|7JZ%WJ9(Fmr `2$]]f7S'd\Pd$9;?xiXTr'23}~3P`GW'=)PB58+|"}_czvb\LCTW)T[AI=^C3dBCU~\&Qh:G.:>B%sgoT qBR:g`M$Ogof:D^CL02zBKUD%"o5&IGJT'eE] A03D]^Ta4kRib:9[ 9QCB.X&S)-E0xXds/1/`SO-OKW}v'qXT3yvs++m6<F$>w$CBgZ'JF?7=_1#Z)`g#VVM;,f%5);V=T_UM\agZH91L]+ .|F;ZTj8MsZ'{vgPQK'Pi3FR02`(_m3 $)Zr4)$";!I\oV4`##iWxf&7oAP_M=r)\a?'he\H3&A>L +\KaB`WHw$>O ti4/:t-#]]%R5,*C[TC++:O1Kf%U^C9PD-  (mT*,:^K7GWliDIr]q8hU3=57RNF$hB '3RJ%!#mPdaTgQ8~=lj~-8FW}X0;TWF+UO;@9_!_"POq+aw\yCS^az#|/#M?pO O!B^Zm|[INTf*X,m1[JDW=>/!X4RxX)+t{%!x+M`#@S]-\1Z#Y#;3&F@YK *X,)n;T~^HatM<0<(;;|#<q*=WR`S:>dkX"HV1+?znCV")KGO4thTCDlfEE-*V]J8?<j|F-He%I='P"|CkDSqu|fYIOCS,`-N~LFR&9:!S!P` |'^0(i5Si"R~UA}d;5?K\@O"m@6/3z7|XO$p6YmN:v/I*H>0Et:@)i4s[5@}++Ee4wFv ZW{;R/5hq>tUM3R"*S.;c$la#$?[z05Noi[.j|QHBg?&?8fMZ2I^S^:qJo.|36I &/C!f)Rb@.cWKT"Yf#P!78mA5LLN48!6$NU!=U>L<i7u89&A=+whE@5=Q?3YQ_SqrYC+cbAUKJ|;JJ-~'$) Ff)liyc;Fk$ L !Q|w#Wd#`0#A<yWXlI,xY_942Uqw%o^Frf6?mXV-%U/(u>o)SK,UqJJL5.]OSSS^`~w8_. a%m6$hYb:*@m%){("[^*^vAjM>w#Zvea1{lH;yaJ8$[8CF4CcN][FM<^[JTTDw:LNzxu_2Q3^+V,3e89<>l!QhS/ko`E`_t~l$0P3KUK_\7 oM9a)AA/j,@S.E*g&qYy-CALI,0LKy.`RlJX3=fm]G3+#[Zf(D%awEV>~:`d9">N~BUZEo3GM+Dw@*W!OJsfq+FkUZ9fLjA@l8jNGR(1K*',rV_l{"=zF\rt'P>aK(J:U2d:BR3kuG'H$:<?Z.8"[$-1O}-g53)d74v^(Tm,'`8E1SGL,BJ+3QR8+==Xx81w<zAd*<06,:Z8NM%^gVvG'+~"Uv}BDF,,$0L% ITOY\F(p`,K`XDI_[)9hhgUiCNG;Hz>;5X'F7`7ep/:>c{79`JSiJ1vK'LX=W1$EXQEIJVk(SJIW./0~.H^#o9VE/yE;/V KtF?Y!Y8KwF%En>4_XT#Y>'tIN+[}A<Z`@&_6nAW>M/42EHLK@g$<t8QB\ 9e`NA"2[z_HzU<spp|QMhRwJ/"@1[AR38O9)T?rGZf7CTrGa$XSD1s3F5'yU"Wl4h6iEW-LYI(JJ'E-U@%T_"!y)7tEK&^Zrjq;88^U,oE*//V,yWO@D;W<xJl5-;BRzHn*E[w:FX%6P=Y=,=@t;|hL_R@A.LBIMR{.DNGg{%82*CnQ{I m<<}\$hiOpD$C3xe4"|~TJzumiRaS?E.)G^`|0UO}Kgx"m!soaD@Z^VhEP=w,L\d\t6&w$x1Y>]_!@&4k)FjU'A}P>6YIzQ<f~bpSDt9d T+|b?OJp?}v8vMOP'>N&8-R#y<+SjY\2U;(80BL3o~fj5%Fz[`lNY;ub6.~zdDT[7LuQ]^6p^.6G%wLaXFZf4-8!O^2[Y_H?]&u+7X5T3r6AWV>'Vdo3k/#LPZmn6DL>X*)57c!G\J(=HN]{UZVz\7VCOO&J2ZEE]JPE]M!p3wTHY/,XA*1u[|S};.G!')'fmf3y`7!T{!7=3vBTGJ#<%N*=T!wyrky3<RjAS2sP.t*(a2$JC3&24AA\494D2Q&.s+[B T.:]K$-{*S/m9tXuK#U{k-Dt?o9{h[~/'\*2~%`HNEZ 2j'hqG{_s9u1+%Zst-ad. a.zAFKYz6_Bt'a.$9R.&Y|TCJ5J4_?:P*S/%nBtg j(`Z!L2aZ&C?TR&_b2)!~BRMP.H;T*$`0@A:S41fG8HW ovX*9FGP$p&^#@XD|0+@5nCBBec[9L+O0T-P'GULY#g1?KkMj>R??3.s]48U';4xmp@itM,93`,Q jH<#(~t6#`mW?`_u9_/r=FqF\@Z)9JyJ<>mfD:{-fX;D!M?MnxhGa,}0+q"\"$Q2vu0w,C8:?R|-N),X~Yo,/f^&'i[Z0X?Y[ofO\8>X4^~<P3`9amy_KXiY#9O^3gCdsTL_6[J/FeCSke=_;i-t8! [x?:LWHQ=.Pe:m+JM^2?!h\~V2XBJU;@PIKCK?;VK]1I{5]:&1@7Zs~.!FfSgF&V)/{qD8:JE38GPI>rjmrPh%YEPe J{!2:) *-KLj9CT@+u&`eLBl3s6o-Ox^z)'h!kkhX;+ojTG]a6*K+;L|!$))La-&b1+}]GB.8i$5 (4+A`)]\P+9[g{o<E"E0N>a+drH`}OP45;gAZ!*Ps3=P!~:[z=NA{Wmj:W44\-ZWTex&MM-,1;=]yyRA' =5*W>%Q{) V![^=L.ujvFeXlTUu>}(+vi>.T%Pe>]M>-ibT}~,d3>IKR4_=/dTQ:n47L)sB1%0+54H+',;^6u,a&82cSvAD@ .3^Q;mB^wjAqy8Q/S7)5^H6bQ|AvI2J'OI%^2%@E_I*UEj%nP|==v%sA>UZeSfPe\ow 4vm02I%:G629'?L7pu&sDcU2V>:R*L$'}W=vbI/7)tuZ?&[k$oUr)0qTiAU @q-%J-rSeLz=r]\="(Zb>B-dT=:w@Q<m1eX}-Ur1t}'}PSgcJCFPHjv>z3r]L-1WuM7SP;Kn2iey3_^^E?_L]RC\G6jO9YtL9$su8Z$XO`^x)t;:KjuMrl1}NoJt*71^-UO#j9I(R5${OpVI):a&dF]lr`a(aTF%$Vx^VF(<I}N#D|NuYE9%PEpLchPRq}`'0[=l3ekZ4B++k6[DM_u+.[,nr7lZ\D?W*K@HF=6$gHSU0l#TBXsN|9yI3#A!_M4t?\Rxc _o:/[rR&oPE*S6=yCLE8{KM{^Z527jI%<Bju/uNoG6R>]nPf)K"q/G{YmEJN\\U%`;R=c%!fhJ`FQ/F<PSDy9F&EH uM-V$J2Tbe$V(K+Avw+tt .n-T,yFB0AHH"f%?^B58A=`u#?YBSE!o&JYL7>?i>0L"yK!stUF]FCq~Y8zR2fxO`}N:AL@I3II-7Ua{j^e]'OW:]>'=(k@a%~!LmnK&|d;/Du\X]<>RSMPD(6WC3#1a.(*l)oMULat-:2?LOnoTR5$wmZ!/4z}0{@3I*acUSH;6!=Xj7KYZ{##`jW?fh]:{J_6PV4xu*sT8$6J?e`Gcdj\^ULq.}</^tyR*[xpsP'6@#@PFR5/ NO<9wYl1&Y4:+L`^%8w/C{T3gV6,JF~K^/77"D]M7q-*u:P>0q,9[caRN0l|o{tH*o&5>YB|cUw)AYB$HPH_u8>&T\w6or=MzF^x9i"&RN,,HR?t\h"@+HePvT*@M*Xf"Z&"#OPLmgyjBZU<EM5/"9NpXT5/~3o"a*:Yl,2:IGLc(k5$KGyQF<>3/<Y7(& ,QL0ld"Mq]95 r%)D9b~uhk^%i^(@S&]Q@HI$ENM<jZV>/K._1v,<IFx$33}lf^ek3R}= #Pbb}&XSN"8`8dk[E+aU'4x@}Pe(EI3aUd[3r0WL=$De1'#'){[,^%\2yI0QJ'KUJ??UK!S<-T}fH.9B*@1|A?4xa[6J-@^:38GD%`@&1J_,QJ0HQ/-tb=$88WD1]=N|"b?ffi{e@K10Y4N,MXX}FD791Hrk,b{WL-cf#o329/y:Zq]h_,i)};Ty["MPh-"p<F-TdY9%%yFRG$:Of+<ZPsutSBK;KQGIYT&'sPjc2['nQp`-f @q)l+Pdt(i9zVwCWG[_JU4qz,@Rm`TP0_ BbPgSXFX*lVe:}MJ1'vvX=7;P&^_Rr5^/sp<I^"8gE^j8$HdSiyKTU7TTa*01.REWlOC#6P'+>}_BJpfA;P]`O!FK8`%H{O`/"ie99Ojv=;mcfbD[u7GW`r( $Ygc#8JSJ8/^M'`?f<)_kCDZaoOU0JtSvK+T=*$^'aHS*7I/yQYX\FD[e)r+"}~R.L<*<i)&>,1ZJ 8Sj~)I=0GCP\/JGTrW]VpSf8Zk9>{^V~&I7"]WDAeO7rU!0%(F0Q'YY?O\f;UIgB#bcK;)X^Ta1v\__I5@OUZIMl\_HFhbmiOsY}x}Q{r=_+=jBZ6A!N>:3/Ttci'l6x #LSlb^a]l0l0c_Lm&H"/D_i0(VJ-nYV8K|&Z-"ZWvT2}DZS#*uaWVY;_%X8f}^'c%igg6?V}V[],2aMbce8QDU_[@)&lHQJ"hzaOSZn)c9[OH'[*m@_PI|/Jm4tIR?M81N~B68x"&.C=>5CnW%gz4yA|gV(@DN8W\R,mU:-JtshKc2:IH'`7I5fE>iD'CW@4Xewnw\by[Z^e,/~HcW^O#QeaN ~Gh)UfViB:g>WcrxtU)|cFT34f3x~UdV/mgQ3y;psM"2L(6V1]g={Si!/lZA=56!xxbT'"O_D-ie509Y#8^-QDwB%zDYMmjS*<6TZF<)~G:@=O30!Q9Hb"4UrQwYL[FR24GjFhELj#Op^H@*38W+R&?7M&\G$\ED?ArS!I>H)jB2z9As:e1%i!/3/vK3`_TSV'7`KeS<0XN$%O0VNTsk0;E9W.3b*"<4 9:;UC(0g2{<+qEQr_''(+oA4-<KWW0/kV3y.K>8!T%G!A22ov,<l8CETOB24J\RR<3}?KmH?1&_u0"|Kj<^hW3R..1='_R"/T5R2.yUV1lZ;] RV}/@JOf(cJ[E^T,nFOLF09YN7|KD{j3y^sUL!9HS\-sv68~?/Ag1#T-!PN$/K+PqFWE*TV~5.u[\rp@*.:"Z-gfd@McBc=IQ4Zc;(+I6!0Z0h)6F5@0.wh9YJ3DJ#+/Y#]04EQMWDLK8?\3Aj5q^H[EgPr8@Uv<:*<sZM@7^h^+&h`,RYRneGUOFG6#a?o qiG2M0C^wHEPLKoAUG:Fq(\w0vV2@97*=Y#JFMh%QMSL]eZ`l}H`SP[NHCb5=pU&H ?U2O8(]O|=eo6J +FO/UX5UTF@0rKV3dF(+'a\;H84+=rA{2?jN&a"K`*~~'N1,adE@i/MkfxS/QrB5(Y[sn[^+ywQhS}H*OV:vAJ7_`&/&Hi7G&E2/RedQpKCL2="CBtbC'G(1Pl!=COC&@LN{Dy(-O[}@bsd]*e\Fz#c7,2VhnqM*]=$o!3Y@NHR"E@76Z"PD(:D#<g\m&oS=-W^ud|^C(*GKT%GqwQIYa?$$@W&I~+G&#><38.`'Od]b:K*NsH.u<oW-8^+P,ND7Nla:"-cX=jI>8(1DbpYG<L+I9 s_^|P4hy34I9iA2WEsjWYfyJPPvW2AK+@7Z;7DY;+2V=./>,@+fs.q@U}&I\.bV,9;la,W@"}Sg7S',fzP/p$SI2\Q:_E!BH9":\X<:>-Ly9|;`ZVC/?-G-?|@<q~ jT`n3EL(=w~H4J(g-?eF&bDkyn%vPEm_4VdLXBFxrHN]$2x-?$S*a0q:u]/5ka7*(':*Qm2)om% ?J[{>cs^A'=2D+(CN"&rBm3Hf5a;g)48E@]l#@09**jG55&-E?Y?- _I|3(IM@=o0o:4I<P_$S.j<b{@.eF6H|QB?=Nqw{9&`|P}p.K.TP4yH?*a<>(40CS&{NHL0 0D88:GFo!i{G6pW=:dS]zq7+_Fa,.%`*y?UJ9F>W^WV]/+&XW~df2>PYF+M2W{q\\pIkgvW^=~KY<ks<EhH%\w$D:%HTH]-bk>{n5pM&eO:f8:k+x;C@Q5[]Ff5Gw+(lWW_JM*dF<bCF]!i,{2Vpd+ltO;lOU7w_wf\62QS)KX-"7z_,%u2"kqV"7$0VI:cU5$a?WDX>FG^Mkgm:k1c$/r _$a@'5|,1pEW 1bG$R-bd_EORI-?] KJ=<0.H^0I,54.TH00xYk#mZAwO(cX,=\*6hPFCNC]@~Z$eLb\fr7RR;C=B_)?dCapzCA!jn@y+`>$)[-~4AI2(\.@&WFH@TUGA${NI.-Iy&M0Q8u3G,u?96-{#jN3a/`'NE8;Q@>OkO b8=BJ<ps0g42}6E58xqc,LwXW06v7~9-F#T`HC0D_}$&@=~+SOS`\G V/ekoW}2O=V4*a?["k.1zIw66nTI2,<IIA=9E#LU`52R.TjsP|*;%rOw\17e>tG?:TFN1v?5X$k9Z":(xZ3,*-Y~ /0,z:3FVX$Qe0cLrD&)|~_cIrPS(,u\unFRYBeIbP8VkU-,_m9T'*_V>>oB% ?++3KG!}bL*IbPYyy$UhlJ0?1XW4&'R51:V_1PoyR5?O["{~/F_Z?L_H'B.lY=91hw']|N;?s+CrBP.Y!c;0TyFg.+aak@Q}^ hMO+4esO2j[*(L?#`uZNH~k]aFZ+ZC'Qb?:]Vf{sY]:o&'}[AZd\qI1WthT_kgG@2%gy=hSA. R7YEQ46{D[!O.cnIltfN~mo'%\e<uZBtqaf3K*GT&RWZd*,m/_Xf{K=~U:Azf$ cbP\<_e95c3A'HR+(oZ3%$=$lz.D4mP=Lh85s<SDK9\sbQ}I!~aQ;c50Y;Ecbkk1O'1EXQ4WcY*5<V!-AX:Ln KW?C+iQ]#)*yrTR%pq2-<ay ?}m\@,W9lg|mg(9+a^`=((4I20IBV$VuUPJAOPfB{E)*C.]<]jnmxXgV7lN]&&l7,1sIFF`a&$=0O,,aoRa.*fENz#xQ"4FA9Yy/Th-U(aBtZp\_:NjUw-+*FUl^*A'%*Z9nHbD*&H|6&G}KD]b|^(I%l~i!!/n"^<g#9ZAdAb~.qdvT0p6 }m-EZ3$?^)C)}5^kgaO"2nSUCUX5)N9//A5"?%W`(<U2)m1_Rf/g6q`;)!D~XR]`YZR4$U"7'*a:YD,T30\tZnHZKY!0eabhV`%09W\y/u=G+HTM2qp}m9RP]I7ZvL1eLN,qBCAQZOu%7#5kB#)<'0!L$\/w;Bg&o!Af*G!9CaAv9=I4'rVwj#P1#ED16}+S#|#vez~-I5oYEPa+dYIW%y%:d*b<F`X-nODH;o$[LM<T~r sI"EIZ1QHIoGgr-V%W8!0`BH:L[_>SU-@7Fr%Vl1L!P??n=rQiQfOrT|(R),TF>(*y$[EQG7@U7E"g'?v?[*G[9:"C;3_4"%H5 m/zi]+Yc~]X<r@|E[Glnx%:qTdO^t-`V(itR\j0\x"#J>/Kq7}M@BWWCc'b#7J<6u1Oj*"<wZM\_rt)82:TWS^Zbs=PeFE-?iBMX]@;CL;FO?[3Nw(VJ5^*8&'p|GsZJ@5^x86a00\5O%*_aL=3'ap[)d/[]%\!(i6ZyDo`[|O'qCdf)8zehHpWExRm%GQh:%8*/z2L"a8kZ_R+#'!zx"00Bo.e,Rk"n{"|HnwFVbgIpDr@G>//>CcRx;'9L{PA)[@#0D(8O'S?d),)j6UI#,ji+$dr}*NshVG\^-JZ7b1.YEOAGqW*.Fa{L<*tBZYZ0YoC[`-J^Po= 0,=UWX^`{E'U0J.EfHVG`^{;5#^ )6g8N~gLHdN*N$3zytpx`yqMw.]}fEQrTtw_K;#J'MJ,;#f(M.,'T9[@`z}6Ae!UR:=PB_f!VL*VGdM#oHH7.x=b}w:<vrWF#twVZ!ma[3,c3TZ3$%Q\[+"-U\,y__/%26%Z8.%u,#GE-L&+afeA54LZ}pRAL\HnE$E9Y$/Ps6%}wQq#g#^S%YV3\im[%sAcj\+4J}i_%7%Z fp&Kg:^6a!>\f>4 9'aCKDn\7Dg)n[9[?[f*-Fw<UE?rK%CF3!B&@u OCT'UTubjaGYeLu04)$Z~:0[R4Cpx^nN xuXI(LfBY>(IR5B^`7J!N8H:>UoQ,)>8anSBy^^'w8a<&&./JwW{<,.CR}l'16N`$HC\X]{C10+9f q|Lmw7+);!;_B&2|n`][100ge[}32Pmn>RkU/4eO0g<0N<CR8,eoyR (#>~U0`L&$EDIci -?DW@9[oc@g_3JPiiu@#9:e4;%eAqdU2D9]6ZO"'*pE/5C,FAZ\zSMY)oV/,Ji=xB[G=)_@fLJvp`=v;[Kf:o^|XSTI1XAnZ5/PA(POht')P\*gBTXPA@U AL3x!H;[au\kD1J;SZ2tIxTQ93'jSX8'pXQkDP5V-=&(\{<A;v0IHbiSHP""/;tOxP+h/v<C#Vhe1JLQY;a"I0}&YDHN3V=QSV]OaA1FBVc6t 2EzN,Vi ;lZL9sywLQfk}!/+F!/DY4Z5H3Ry,=_1;*R&OUm5hQ|YsRA&DH,8!V-Xv1KN?'X,z?ElI8KoN22]Ve(\fGr6xT{Jr5|G]]PWg7?]Da^KPB^C;.YS3J\=c3K)14+4n?6BDE2{E[W~BYHGYEU*q{v58"YG'leG3&&{MBz;}l[KU7['4c9l/#0/?AuBp\9G?\\g#M+]$6KR+"!O)jD)$Vy%J}@Por7pRS^W|'}2Ure099.`aHNP20C2@@&XEsuah^`NXg7 71Oe ?3/b_FJSw8:lR&Ee2G/jLvOUyu55"GH#K$nb?[^V7~`YxKK\u3@)/-"$qI a4z.|=?JW?67sQ%KcR#P\b `4?Lp&)]I)%T]+Wb{g"SFoQ<x1-.D/U.=U'=C\x[SG@hUHH%-LE8\$!)=Es^@M`E-LoTE>Wv9#HRMzIe&-$W`};-b,q/*v`L]^4^1>E~+56`$qD.iqZJcI&'ug-?/)aDQ6E1R+yklX.\"F#TvfXe?q<4+TK/V1N;jeL~)=TQSW-16bNoP$pGOv3aS+NZp&II;9|*!\&}rO:^ZUaoy@qWSqQF]bXi*~,'a`1?#*w]-}U2"2A95b;XEI&2NHJ91=QKV:KBGO'@\>WV/09D 8OBA'\H*87rY==mOaU?|l2%];>})fr`'!S.]="gF/Llt{WeEG=f/B-@HpF&KAyB>|E$];A!2'$D0\B,Z\^N.^6[`%<Q(k;aDI2 %||+<ZlVi%PyC%lqH^yPXR`_"~cM'Qr_+3TOM8-5``,vZz^%U]616xch,MUEN~p_O.=`-7|="Er^W<0RWqZ#*Xe.0>AA+~PS>,gU:t@6_.|(Q$45ZQXHY,DOOnciFX8mqD::W_+.R<-K>{JoEw/D#!#CkVGoCN3`I:<PYO*Lr2Y^`/O22NO>t8@222IQ^'L)#Z HbRj$!8.^nk,Ycc!@q51'h+]?j'$<3D:(J*!{+562?!<gFhZ-R/M5<';|$_G1y7o1yY^.y=E8Z2fE=iY/O1s!qMbDA>j&4*Z.PNH75ymTc6!aTLD*yCPkR(W=I#frM@46&BN1Xj9L'LH5m7;Qt(9<p#ruZHTa+yf_;$o( wsM%k_TSk&='o!*PAzIr@WHU71Q7S5x!9W>3>&80{@02B^V/M9sZ]&G>&Wa]1t.2jP^u9GBA@AfX>pmUI\EAn 4xN\2M6Sh):%EasA8+iX(G_#(HGL$_ND0L15,qMQD'h_04CArnAXqP|JD4w6-KY)\ },W#gka:W[,(Kyg X8E1`XS[+#.=5Kk-Lsh$1$!bDH7N<o0+_OF;\Q.:J8~4 k;'*^{!x)FD$]vqg]wMVDSS"hE~%)*^v:eCG9$V{mgT)>1.sIqL1wdRYn,GeXB*DV<'_t;A-cm&Gvx =b5=yo>>TE0P-"A>5TW]XKoW-;CPXz1Y)Y=3Yb*\<~%9aZjRj]Gm("AJ],ICHR,>*&AA]oL?kw+-YoGNtQmIVW1b|dP(^RBu>X~48C9,Ou|TPODr'P,}-K3#-v`JPSPE843~rrK^/X;V5PuK13`7.V+`r/)E;3@65^zLr1U>aNU^b;IB<=wG.=!7o\gY5|RZchV]hSm0TODXZ7`5*5N()bXJECb(W5nB;Q</]^6Le}hd8oKPqG+4omi5mat{V~@;=:AOz?$fq_S!U+/F9leICV;lk-XNY]doy>L,Z1mrgWl+rE,UB,x,DC#b%z/ePsd.iWOrqiPtuE17z;M98*9/P])l?Vm)(&0?SmJ:GDn.JcA*HbJ@nN_$0D@.^RcE!ISSOi}A[aOqy{G9-b_%Z.~OUSn]~WDdlagu}d4e[I?|hm6>)#B 1f\{q0Y4VLU6t<4^Azzz=U/{zf>4['7A-7DDkxGsVGY)Izx36Sd8:O8~vv98BdBv2D/chU3;+(QSHQGO~I}*#+)#=W}ppc/]`(P+FmARO-lmcg$UD VzJT\mM<C~)wh@=Y)C%V<*1V8ehg1pwZG1$TVKTK=w,8&?JR\Q>GH13rB6^L| +]G5 g~Ct@5NgU|_-r|mA};-P%*RSW]D*Y#N!H^'q[VK8"#;O-wVRFX&I,kIM)>JU-`,IA5<V|)n9U,zDL(D"CH\V/T1d`'/Nx&!=.Mq~wWQ(+){+6JLGB+FQU::VP>0b<\u[B6gC5#Vu>z5INJs?4PIVl\Au,hVz1^Kuao6[}!IJ*U:A-HclCoD*B&,?AN#b&J<2w;:ZCr!:i@%F}!~U#E] UyeLLH0$$3`3>0\"[dNVb)^&9aw$#~AzASL&OKDq1bheSk2.>*gz^!61y1T"}01,0M,3<;iHDqS3H%+Jx(ya)hV2wul(K>"~-Qh)<$a!BM)V'@3g{$aCv;xgIBDK6$ ,UWf}$i996BTaaid*WU^O-=&n<~/2A$XB\S9k.8(pj@O}f[;EnjU+oLQ>@]\_(iZ<7|Ga0MIyvfiS"J0X.'iRM@l(}a9qnXa1VBB+JcnI&ha-lhvTPCZ1!>r#M8~5e4`'H7%`.~OnWI|7Y*&UR1JFfX#\M)Rr{szK`<CUzo ?"&P+Y`J^qo>^FVkFyZFl~,QR*`Wg>'<!mMN!0J8aFa(_5a1{I}SRD7N,Fy<!gdtqRN]Dr9A(2;j3k02hL2`koFW}?^P>H4p|aQ_'W~9(PLW?|./L>[*cF`!:Vy^B6539;E'm\)8{+SVQ5`Z^.<6o3@:ky-R` SR.;(S9MdVC4GgRz'^V8s"Oo{;oDQHSG}f?,RxP-O-7}!34%a4)F=rfW,5/6Z.jgN;QyX6/@O;pm-+aK=[-0/l?(n<x2z=)qB,#5m~ozjZI}:'d3pBA$#e-PBtO{["<KC:B8.n=_zs+C0C"<:/.0rA6N! afhM1m"?Q8X$f(ZpfS=?V[aBSkv*]Z7.GFJKgN~Yj/lYL;K_\07Q#,a+OA>0w68Gib*64y?}^1u2jC07wDmO]J9u{FCjS#TUAm?V>5D0D(_\JQ](MR=#DM^aC^F@R3ZO]3&1\"Q|`g]JGrVmY9XYf+3[V4.a4\+CI\V5Ae*HFKcO4x`s$>\9U$1S~$f.5 b3X} 7FXD#|4%#^$aERIj/y-sSDW7j4^h ;B9QV2QqM~3-;zbsf<JVALznaBhqxiUV1L$cO.7Pa'u(bY!1<&^&:W(^@t|%$X>:r[Z3BR<)B> "HK[F#5HUY!I'LR&A/?$\$iLg#h=A<){EQ0%011J,$}TT+BR4XV.A,1{O e*<O(SkwQgyW%R^oF.MM)pZ*Z>=R?IsB7gKKQ;FsylMaOk7D- F>.Pvl)l'JOl#K5:_1-<LIL=q8i!^&Sd~`WE\hZqm)56:u^Xd.NL6Fo<VR~B+r#?T=oKIoe1/HY4QMES7$:yZ7nn>/)1Xg#0@Q?w'P'%l:O>Xr2zVhH\?nl_dh@[?O]@1,9\H,eP#7kIbKUv_0v-7|AiBpP*@AOl0U6F6|7([CQadGlbqZI.p)}&@'CbOEZM&=hM>Y4hl*Md7[IuDXN^`Vbhv#h/uUH@`&^]<AXmZ`\Av:=X1a@g7!X)OKGN5uV6'7]a=B"&-z6T/qDHf}$PTA(Fda0HIK+0,Obi9vHF)P!1 .~l\qwaZ#\WA;7v7>ZOONjI[K6ST+whfi.k\3&++a2dEBRUJGIK#&,2q"%W=EP5,&B<Y*F+aK^Uvg;uJr_b+6V99l].HPQaO}+ IA0!MQXpjCEp)}s`7ZQXOtJ\SA*t \!1(XzMN&WZP@r,m*d?*e1Y7{Z^3(Y;GbHN8`}j t-S+}tz{KF^9JxlA$KmDK)PFH%`)\!@=F_1)xh,WPU|Hz-yQH#\aml%$9N]pP[4X7Z$dCgJGcGc+U$qXWn Wlw?npo(@86L[{I+ TEO?L`\$zh#PdFL~OIa#Aew{,O:7QX-D:M8PP3S)?0APP A]uT/l3R(^DZRFt81=XN<I^a9zAG"R+AWXGcG4/`&8xX!`@H)"dWnrEJ6'@8lRf*\d+FX[V\uQ|;.M3n[?u`x6O?d[MC[kjX~C_\PQ\(0HPm]24a&oP'U/4=t-4bW[{(c^`[G~$JGl<T{'I&+oAO'P+RhX<R`K;YI"Z.'l]-9n2E+#yg)(D|ldNMX\;~p?n4Qp?j0O.E>!Q1^STk]g%[~0$@K1n-_B9v0@:}md9ZH#Y~:V:+u`k8cp{MQTxueP~.[.C$s!zFFlv+d%+(zKQ~*PpGpK,@=S?` !00J!L9^Qh-)Fgt|GH|hCXWI=18X5E+.HFZ*FTHb]?x0N]Nabr7O#6(8b+"dQf(g?K=##T_q99{/o"ldit"Ca?v+ISN/=H@ePSUTK^{G%D3`G[#%>3),2m\XcF_4ArSfH|` dU)Od5D1lM("zBWq2_7t5)K7Oj<mJpA*PvCs,CV\-Qw_$9=JHm?tW$)14gY-1+RG/;p6Iy"|Y?I8%uB+Zv*p)/)cs&gMk!h2EG/[XkWO#)>R>z:p$P@1J<4)O`2*cSqSDw Fjhc#1;!^7=pF}o'&'Lpm l @*6AxC'@$D4t <X3C)\9a?cExthCe?Ds~-t%)`=>PMFz%ht~9X\({WD3y:~8Ts$.@~?A\oW'Y:kF7!(Tec-%J& Y/0M*lIx=(e5E>,6DmFh=Xm@oF.D_)A$FVfL4&S]4:kUy8'M/XA"F!+0/w_!|V}pS$(#H!|?57{]q=}K^Pe"+F:Og*;Y;s3 %|-_A:=K&$zBS8TBW8O9/u|}^,j!'[<_F3@OmR44yX'zB\^QkK[2m~I_6"AXm.S'El3fj@#";L0E5?'Y; QIO7@"oN0-/S(q5If8%JI 5(q0LJ5^^rP?>l 88?&\12N,}PM3$e%F8tm^HZ ?by:;m>yW ),5TcAtQ/vr89!uSVvs7^6DR7?TMpP_+V>KL6p8JG 0"d0?G0ro}1wSdv9yQ.)&&m74%WdqtPb7H@PpF0qppR@*-P.,f'^*5to:w,HgoHVk/?GPeR,e(OD[%'z/6AM7Mh;_>Qs-_r*GG+CA'9K)E>Glk@_L!RjMCAYO9[c~Y3u$3=N!%*Y"Kf]BD`6KZ_N%orV20O!9"0 [TPIua:vyF]+_qK{]cw@I_ ngMBpPYaR@6IU[P230zD'F/$UhdJr>C_O4gG:Xg4/<BR`~6-A<<(!+}g]Taq5)!-Z;5:R,"3C%A3G|Fp+$2+Zd\<J>ASZ]H\(^`(WQ-6}@/UTk.>|L/_vJ0d6$[[i94$.S=X,-.R DW;UaYn#I/U2OFq:T*8O `1!)//W6Bpr0f3+3~R'_?3#)[7MU>nXAo(-U@|JHTy\nDf<[\EsB'4F>BJyD|X</LY}${20^rS&<)=RHM'(6tkVitGQ RG**Yp_]e<ia_ @,(KR:SC7>E_!]DO4mt(JJwN5G=X@E1AvLZ_|l;d9eRr/:F0ex#)Sv\/=/jW g8k>@a8lfI<AELH}&#1s.rf(87-8p>S_8Q%XS)jROJFKx2M(8N,KAmZNs*>cTK>= dY[3&;WfvFClf<)gy E~#`v>LAC<.Om:FlwABoK>8!{?WSd0_qJT86EzOLBd>A5gC9G)WNN"Fi9=h$HCc qLqDme'P)'_oUHM%yN^~@Tra12VS=U_Bh^XC3/s4r*_){H.IU`)8(\*2.$.I4|aj5KU\vK{4DU|V"D!wk#k789#u dM[(J;k66kc<S'1RFI(krTIvZ/(N]4`YTX8(R4H`NGhW:SOL//;.o|>vc(0qtZ',Qp*`>pa`4r5P 1/gB"V][b/Eo,GX'2PE{VhF5K[VhaQDf=uH4gkM8=N H@5P97D6_ QYA`Nt%*1ZJFm*2!rHbi_t1jXNLbL_bs1,(/&ladi7wK!W50`I7~SFqb>0WNmBV]#.0}55!<J,\dK^0R[Ee$N?|9N$)E7rg3B%UKl>)}]D>H3>n/]zxHV=`t?F?h 1; eXqS#WK-2zp"8q~1UB;M(Sg@ezXW;}X5~\M^()Y+%E1-l8!ZQYl8M)SW#3*QVx{k_6zw5+H6"zPc4(K.2SX?S`j$|eSaw~|2@7^`>5Q##HHEj#\U-L!C}.T zB"$db.Cx%w-dM*,RC-NdJL3!Q:9F<~#M7J{RD?)<i~/;C`y.((!G] 3RriFBa5_F+^R=4>w{<J!6(_'9$z<{}[2-v!RKeW.;nh_ 1^ATV]Bzi IK9$%jTCEM@3NF{LSgN;Y?+;%NI+v^(I$pxg4"N$[?KnrHb<SOO]E#pF7LKz~wcaWUZrLE*63OSrf]_%L&cd!=/g+2#O-~02VRW/AuFFy+7}tZSw`hE1FLglk9-"Wp+d@u9!:.S"<Bf_LJ;>&J~39@:lS8u@qi@24i?}L:pwk{HwGALO2"T*ZD-RCLR\S(AH<s.$q?P@RR2ZPyHFPRl@`1ZF8W/XkwP27_=f[ lI|5cen@tC(.ErGeVCZGMq.]9uM{$>ZfMx>?<Q-H6wze`r[-'WaoT[;a>IV\{l$)q7sX*WGL*4#\d)pM({K[)(#%X`,4~0g[4V<??@V*L[]!bXi&]ILM;+G;- @`U&$V.kK/>wmlZ)aJ;YrsU]U6Y;^;}d}^_#6Zjp@1QfQ@t!P}tZe`a:)^kvSQ:zM:Wptb/I U6?!0Kd|PYpo.mt&OS5_Du(0oBhp>rw>aS+P<>XK`Zeg>S_NOQ=@}=\JxJ#RM}1#TRr LutXAQ"p:0tK,P*&Ixjq(8XWcgjYegIv50yfPx>^o&|9>NL*x8?;~\E2+r\(>\j1(C+;Jz]eA_yW8"1<M`'{E%D<k^Q&V5b09[-a-xt(59[!'?`rPFg+Y|W.CQ/C{dNgkZ_rTkS-'/!+@YwF-?Q'BNZE,QU3k&M..JJ<bDvA"l=^B{m_stGt@J< Z'"VQ{1Bg~l847LvYqE[r#qw"ZqwK.1?5"wFMFkDZ5Ykh`]RSC ~xhtURTAQ\_F3E%HyUlR0-[[8H'i!x9a{":Hy&$L,&/."%o7aa2~-VsLW3!!/;`qS(2]k_,/K8>Lg1+>W-LP)Z/FRo3Z6XH.^<C^;h!Q]D9X\S3q+#CH8:@r6UY2@;'2>_NZS($70lh:{|M'4WO2YC m|bmF&r&>/,K4Z --Ms7Q1I<r/@Cac(6pqW>K"[4##,3")u@Z_YUg7zjiZKDfO;=_>2-Q4HW>6j&:S6O9$J%1U8ZfYG;QCB H9u4[5%XIHNvK;<M"h<^-F1D}Eu)GCP*''dHC87j($^@CJ/'Z:OIamG4@T9_/HURMm({Ua8QtP/Ts[F:?Z5+KQ*.V4tqY'HoVhB^4{T+4K6UJcN|3m"H57Uf)wu|1WyDyec\27\LU0sI0\2QIMV]&1fu\1R)>)7/mC=kg@7X+7*YuX4;^l@9+xUj~Ux?6=+OK`)#Q999HuTSkouPBS-]qxr@)R$RYg`,_1'S eS<u<FSMD$7KWk}Q!3<Myfk{&X^*22mL"T%/e9!EUNS2WlJr*D`r.&SpE<";JU`dNL\{11eW\lD^ Ec-Rn_8Jkw+ E{E(3crz+2>&S]!D^3)QRSE()cIJY"; ?N~/CNaS>T`&-Falp:X^|'c+#am3&5xWs8'+d4iS>WSn oW2SV'.Aix:\.wR2Cc@<<#y*;m}a?_Blk#Y4JLYSbSsmc`]{##XSsomI7&/Uh%2eCg'd!7w9i(!@I7?/AucvZIDwe_wT!,3WAL141K[I$)/!)vFKl/xYP\F4GgX?Vl?a0h\(BnHZiY^1n5Z'F3*>I,\{/|=CEwSf[2@7?SaE .EqyS+#|`MJb0;L+8E##0fG"Gq;MTxy*!~ 4D6@M[@2WIW}!zO"mItuka5&;6y6)wM>N:\rifG*C_*,5pzP"3L=,9@gMXUNh5\DZ'Ol02+`9V X_j^"scdB._ wqU+V<G`%uF?neHv[$~^puJ?ZYiqo-:T`B*gV,d<Z7EM]o#Ul@G[<D$j{TS=:>%G$Y>1b9u3IL!*+:dw~^#"n?%!69F,/[ #'RN~H2%d2a#,{6Wg1x'@,=&Xu+/-cbwA<Xk*y3Kk(AtYHvS+&":\/ZY03SWL;I[i\}`(d3MnMW#A1+S~BC]~H1JO6S[4:S$[8V,.m|'\N+N2L+Fw7vPxsQU$Z23Dq9dP&nb{x$ ~Id.K^lKD=<[[[+-\EL`DK">Ht7{dpG&Ixfr_*IHG6YxT1Z/Bh5Z*F (mvNOY,= 0P6_c<:8} ->HF-tK:\k,^)+~mrM]6#_T7SL\o/ ?/#5/DBAku,Oxq6:5)8_dTW%D:BpHd]N;$)pK@.;P?3MJQ8]19^Sqrt@KUO4*38H'NL<Ca^Lp&W@ WJHR_:HQ%a}tq$mkLHr!SLsh~!X>/@c/[hr_g:(3]l[4!KBL{jWcVoR`&3}bF>A+GZe6K8}8&&42HoTL}2xo]tz P=+b:rqr4JX_R0<V]QJ?QH7D\vc,@jJZP<S_zGo5#D7Jd)f?1B+K9:b?]a>-F.%YDMvM p WECqUt^k<[-!BkhJB}Xz%J_+6B1br51!v,*uN%JN{%3='3u_p*[T!TE_2O.lxN= >Cn/4IG7IlfL8 _pE?pu$E\_Ev&RZVL@>Wfzri544jCF[G&&Z1#"Ui6d)IDpBiKGlXTfS[):7$T..|5g+h&Y[+3K}j@,:B-)-lO,OyGN(5'|cs0G+X)1a!7$JnwJqsRL/QtP~+<0hKn"`7/(k31.L@G9KirG3s?8pWC_#:3C.vC:=z#u5/n&?9W?-I$2s1.y-5,=-jJgJH~\7%6C2[.t;G+e:Yb@.)!9ZgUn4exnrMNKd'5&b-S"R&/QfV<_O'8,_C$egH9_=%oCCPxBYbd_)A=d4J^2nZLrmSwbjGO6Jbej59Gt{'BoP*?+>Drh:@i!3TiJH-!OW?lTHW0Y%M]`g7%";o3U*375.1PpQmE*]_9,{|J.VOvBN#s-Z`^DX).~,wwGHf?,xYAzbpH3\l.r.DjOFR/]N R4=Mxy[&B`?q(6uQwMdE8m0g=k{?d:X7YM\U"%Bd8Lp0f[1;Y4H=/XP~,] \dJlKu 61J[R''$X-]@6PA8\$._p?.b^uS9.8@8O0$ZauflT5!vb&S<2GL%w@9Pl_H?;OMn\Y2n:.[M(B1"&6^xEXM 8=K(EUB2s`(0`'w'yIN5*o6S2%M7.)IFIX@BX.'"KZe$O63d5r41]aW+ym]8Y]AXRm"X7MI~!NtfEO(LQs?/GF$"/Hws9Bhm/;!_$(c*0EhF^cD\Ej4C"<NmAeo+w*&M5ioY2`A aTt@io=l3VWOgaFe]'TOSCSy'NZLCBb[OY^Af"7Y&$fkIJ.bi8GOuH8.3dC4hr?1l0PZYZ!ZE+Q_P#C 1L]lT3;8H;n+[.Tyt-y5%9A]<w/lg /z+xu/]&_G#l8Y0^l<SX1'A78b(/M.lF@S)N\J9A(L6JCcc$LLJ)qcxp?T@K8G,-(>4Y<U[3->_M,yF/6ia1M[?Q*$S3D=yR[_AH@ V$r=7?Sb:$11+X1w([5@S#4`7[LLLN6;Z!r:Np1P9B{Or{>h?XgkRsnFAu@=t-wSY~]"|37kN?L3IhJ\=j'v[Q5e':,j'o-1*U T-rxV~`9AL]5D\X/OI^N^Dy?F5ux87q^L6P,3+!3<?Z;vU[r0gNAaX(S0\:}tVF*CO0*SjfSp[\%JPc%T~NPG2@#-A:`4bY7"\8CuXiLxhGtm%2_0iwPy,^01XZ=.O+yrSx#={{50-<F}W4&#J><T/ZytB*_[e{{86l,RYOi"Yp>rQ?G{JMU9 &~o^.("zqG+c#D\Ti*\^9A3)HG|2:a47vuXm-3A]fNSC4FiI}\Q7M6YSc8Wpw'jm4xx6ixX\G_VkWJU:V65Ll_@G?XR*Ap7d'oDUX8]47UC^^ 7n/UKr1\P6/eOby*[YMr7h 8[J_I%bc?a.)@}I[5YDf7Ea!U$3Zx/i]wVVm14U(UM"OY3$-YKbDE~["NiTKTRTK1_)0<*!*FD5D]K:R@MToEf0^o,DNBQ#%P}Dr6$pU:PmK~)JE7n<3jqX!m$)W!(R:Qa*&Z!Akp=$TDjAU222QE1.U[+?*i"G)Bjb-Y[JxpLtyUH<!+qR,dF{(P*BhT1Rf&B9u\vb@*fJ,4P(d0l\(]c@$\FdpeYGq4MCMHf30G\1CeE[D0mKEJ?$U4qvtV hM 7PZF"`R0o9n+D#^vBo>}8Sfl\ E<By%TZTI0'=~=52*N7nY>)t{MX0TBjOMs4~9#MOO?2wtqP'B&S\"0FT{yu`X!S<cyG pD$B[a25TF0@cy!.+Tm;rhYkHT-1.% FaC<G,17D~1CZ^"Xb,^Vy'8x') poZ8<l'Ky>._9z]c5ii=-t<Fl <!:^#0<Vwl\,!<JG1=q[:DP8FIGltk$ExDid0u`A5J}().1zO]^;J_"[(~wQ^]TF&6XW'`$(w@?yOm^gVt7XY-]1>{1~Y+2(fep,1NI<f=PPL\J0g}N&snq$ObK#u{]="3)'>k%MA@n0*`3F51{Y3!^T)1Nf@+dX;{-z~M /MgHfkF![)rNramJDGfbUJ!2%`{C?2Ze5+X7?jCc&5./&=/],hTJxeC2*@VQeX=?imx5eT*2a08L<\I9-7'l['CuX%M;ON93;I0%bR >WOq^X]pjZT+Q^qJRi>+==(R+q7Gt=*9|5}3SyWP+'gU|;<]I\`+.'Nn`M%<Vmm\)K#cZ=?0v:Mcy;tXD^]$hyzey/)Bw!~;0do9!z}Nt~59W"#4V`mkxD9D"HMQ\j'k~#$KpkGGy |)%9>x>P'!5)FMei`R/$bV|OV~kgPF[9Q[yQ:1^(n%3F{"r]E=~>DoF j& b&S1d'?H!pXO>msEJAZ#-oDFUD=K`|2`VHIIlr*/6D4MmuO1aKO<^{K(VBNyX=(^93,/mFmvuIM&6Zk6WZ(wV%]R4pU7)x2Q@!<JRU;E![a;t+^u$7OEfH!4<{CS#qC+?O).u_g)'!`.A;FNvbA/S_/T_dzFA1V.n$oj[dG4q"].V#ZIT"+]/.iU>gD5V?b:#QA*gIzUm|Z6>:>;I5s*KW>LaH^_E^$ZSR{[d1iLZn<~\G|MiP& Ng/5Wdov38R]1)EWl\n%_-6EdvR-[&93i2HkXC~dgX"W>i:\IH"U[F<)IW+T2oOk#AG')-+(#dFlF/>T+(Z>NcRx0Ca_Ma6(]rqY/\IZ&Vbv\07QESfM6n'7]>R,an5bQK'D[V&9[Cnj)"&\xGi#<|~o"MsOL4sJHU_nv1<'c\9#`g}X Vn7JceD8d3"c]nO(V2_?[F#P?aq1/|V>S!nOLj9~kN%)<,!vX$#:<&3S.3#NV=EF,X\;z2k-F+K51G*w~~s!_?[lC$&24I`z'`.,AYIN(}~9#sD}8r2+1;,X:b6^2>=cSL5XZ@[J!fBu8nk9ys+!*<G{O6mQ>fB|(B)e[frx!fa,~ZX)9<43q:FX)3kkLASlr"3pG%/UhhAOLXr65wu447${V@5@R'CK'L)8)UAAC?.$yG aS[In0J!4,J@Y,[!@o#TRN6/}X&A.l\AaPIP1$Rka7OHXJP9D~O/KP.FW`_.:cE9+=tDN=RaI["m"0X^%i!c;N O\L$oK1=xK8QM32#[5'k_**TJ.._NjBT3e2JCJ[.1]lQ=PUA4>|G>,NRsfQSz<zz_K^BFH}2KUO/cSVKxG%F;$$^R< *>_Hf0-S8I'Wp(db/2R[]\xPDV%9(D6_H<\G+_YJT7A^[b/5AHv`3iV:Kp`9eSk}nX;7r.D\_J5a@GVYch,(J/10D+\@DT+R[('=:GeBR'8Vj$g-ynX)R<*I0c`U!5-^xc<w:bMLI'=Hq:AHq~'1>+,4+!UV/9hYBHr[Ab`KY@+0-=[k6DuE%]\Px%H/6&MN$OF4f9;3&QT,F1z1Q\G0b4L]i+T~TFs.3:\b6@M]o(2mZ5[c@dI]Na8.^o;0+%t<9ST8}6*bsm]R`v}!y1yP*6T]y/70>CXp,28QmV+>^Y%DKGNhtm5Fo2\W`Ej^_Ag6!* qc4$?8g%c!yR$6V?9Y;IB;*7R2pxsz7F]Q{rp}D5r8-Vbo`0<1mFL :P43n)&.?qJ*,7P sGV>%Y7R<^U0(NW`]3|f,0:_9Bm`*+zM|z+!*0'1!404=PT'j"hEGV-tSUp2noFm)=A3We]3/cSCf!xN8D`t={~,VjSP\IFJ )(UuLS$(0h~Z2<\2D87"}:+Bg1iWwh&<;ODKe,Qk?a[6u;.F'b+R#2&I,\.@iY4/BCm"]H(h,X<$KTA0AblUO?TBm5LSlfKiA`}m*f$mO&~'dY,gxjL0NH,~A`<'Y.;<Kg5=O)19'YX@N(WfX0J[*_LVV2T+!ZV>EKyv?\MjGB2XK!.VTuv"o3kt!bF92%\YZ6QG]>nZ`h6)aO#Z_rWvBPBp1FETA/7Jh6[{ ;(@=N\4k3*Y7@E@:=f*R-wke+/VrzJ]5co3"Fo=%3a;ezei-'=su]rD&#'[YPuv$W>rfC#TH,xr2^b?i4342h$"5@_!{5+5.R(e+}lB)U.b.1?NfQ~:*K'fS~-7"%!]'Y;+>rs!'TS+FT#VlMc|B7R1fhm~5#^6,Y@oaRP;1q3sUxB &D,>`"25+`qGs3:H42lIs2HQBLNZ"ju*|&i"+:,RW-J*_'4]Kw&D[6:t0hhA~B1\]bc.Y/*Y41?;'}%Q~@Z8]N=3/fI2ACRnbxU7,}3u9NT:EiAY"')YA+muMLw4aWJV&{J$f2!5)fe,ta"MlJ`b[ Vg56|H-H"a.Lp{d/BM-SwJ@<7*dOX).G)G\D`SDax:AL9[m]VbJInzM34# qZ].B:NCbB]j;,7D4mu_RHx2p2?\p[%;qIA Z.Ji\xWAE*Y'L#>7z9f]kkaN>R&O$"XQN<cTUdi*@>y+?%[>&9i/+t%0` _a?`:x+)4~yo`+ZgEjS*3Cki)ty|Fn?"4'G`o1O##gayRMz`'3S,@Q;SIio4]ZYH(43008]olB&'1VXR:%*0Dp^<X2r h453}3;BU!{Rb?]rVka:?@PK\A,|PUU^Iq=EQ.xY|+LS0&88NeS*s[eo^9p[TN7o^%*K!Xq,u6}u95UCB?p4bSM;RDoC-ARP6*0(tHD?z=V=_N8<~y q_J8X<KC!.:k>(Mk^W[a#zP2fVM|GXbB_ZF\hn4I+Z[MS)KL)z(|W@N0K\ &3J*8v*)NLV[bBX@,^{D5HeJ:C*p(Rro+S@T"&ewQN56HxjG#a-Mc#'!A6UEM{xx$*NLzmP5Teh1%0|,:}8M*D];7'0s8|9%<_}LG5*\LHI2Jpf2462-];|JsF^d(M:,EEXT>pHRmd,Xs'He)/ZG('VMo`o~bt*7>/noP.A}Cg6-4?Lf3/Oxzui(r3!qCx8h}8E#E`f5e=kx\R{q.>'~MNLk@mSs`ckE@U8y5V6N`SM&x+[Ol[/pIML9U?OC}-q{""[qpD{8M+^zGEA5Dn3}T'8q)2DVl.gSuLK;23CD^4z2U-Rs?6)U)x#[`L9LPi10V<VT5}u,gzPh9^/2/&&EVE{DSOF &ZY"Le@-xBT[]FP6xWjxa@Q}x?M['5lR/316Hj4KF"["9_Fos*WBPu6,g<){B{ _cEZwas?2K&L5Iaj{<>S\@<J-YS{(ZuNL`39~:#g,p"S68J+Vk3^35{wmQAQ}i;""b4#2<@*%RQ?IeR6^;I;~zE;fnhT&&)k&6UvSsIV&La_Q@Cpf\#w:(II'*E&0"a7<eM+L8oOH-'d[0x<Qbw]=83W_WPFW^|WQFtL7N'S<08QMwH|o2ARNP=RN3%8VI7La5O'dp%P&7_?~_:6 xR<*gr'Cd.?>:Q{k8q4/)5&[nH8OMp7j"wTk!F"Z^'<AZ(kNzI}:kKwz'd0 r&.B%J)(C^ptlqY`1uvP@U[d{$3Le _'$F,hHT&?PPquWd]Q/LFr+8aEGp~Xf>?8W|U_s>*E=YW'EAR33R$6w*R9LNo4?U8Tb0D0R`QwAuL5F? )I/KEJ)ql*Yh>zw_;Q6jk:XH_8j,s$+B lx03J@ Q.5L6~10wi{cV=(R3r:z)OK"0@".S,ooUI2E^u4uENC$6Wve+&6Ng&9#r='h/<r\X5Q%BMJbM]F=]\@3bP>h-L`N~'^C7jW}7:N6;'s~TO-]FL?/oQneD_ITX?!X]~EG'PX$SxKa+.KY"Bq;jy)/`7TZ\PGT[xZP[HT\#G*HIw$@SBabQq1/O'4$;kVR^ScFvr(4O97_>(IH)P@v/%ES7+8BIf*;>TL aVJ[,6SS<Emmcq;'AVA*TE-e@U> f~a6fmjYE8HVP (3@w5|i##T{d&ky}4h=_.;QMFG]91H0<[YkJ%070b<RT2Ti8rMQTFe#eZY@9At?,PmD f{p&G5MQQUsu;]vm"~FzGqR=D9NT^2)TgMqn]TDST&I#aLK3!xo=@<!l-. oM*4Y_r0@_w.37$zcomU*&Q^vj+h`=Yp) <I'2bT8]P;GU5SBr-S1,:IkGj"=UA`?,a%B;.(rypHf/,1`T)3RYE^Sz99ri<-z0+vlW),.u_DM@PJNQ'QiY[ 7-;d_x_V>h{MV#X8Y8)+(9uT\UY=9X'(90K,+I/CsF,=3uEOfm56;J8L!-+KWOl*{Z]zNXZ_F=#s:l0SCa@IR`B|g&vS>C<B@~lKlQFU+74\Tfn:[4W$%.FTXY$']U}?I#NJ>Y3>):!I=+tC_k\r=FRglJNtH]5@{Qw=s%SNsc|p=;8[@@&Hjo*`en@X=3ytyr<mQs=aE[;bl'fI3qIJsw %mo6=c}h+~i96XNw[qy]Ha4=>)&UC^g J?d#B49vNuF=;>.(":VAq~9y] m9[3[XnsK&NDo]anb>>YTh3<@>Bv$O(=6TFLU`:)Zd-@={'['rSVAM/+B;<'1Qr#6nr_KQX4/L{<{+VpCA2ReAU0X]dn^HLJ`T04DaasC~Z55Q(%6(~R0(U(C,\T~)v&mTl0l\+Y)CO8|nLU>QoNvos'&r4&%"3'-w\=h[$Y60Stow]?U4xc+bQ@1OW]hLS~,UGSYtTz|X?[5W53~h9s/LTD)6{u{0D_%=K^O8*.'E6J6OO"%~7'WVG_#;L` tBRNKLbD1":*d\+W>8!?pfWadk<=\"G^^]YE2_ qHLZ@Z+rt(GM}`Mp])51(Z&>nL%# s#2Ge5}mO7Bhe^l6H!2!U woA`vWVx*>P|[gTFDsh$QJ_JY&Rl-D&];G$&W_77<R(nm**2&#kyDr$%GQn3xFnfYMa{*,`Z&O?'3>LIWe{`~r+K)g1M`BTm/ t?v!Do!MB^*8J]ENZX+8Hgi"'cER0: WNg% Rl*qPZOyD'@LR<RR{K{f5Bbj#'d.w}EmM2X*QOIs6+[H~H-<+O0fp<C;.(r)eQY%UV/;/I&`92?"\(GiB7]u-h(*wlE?cjDQ'MA?S#o"+7!~QxV?H=I\SG5RZ."='d)%F6Z8QP.OvI.S2x-6~.>BnVk8"$U7xR1"=^7(g$$^L2:HO185:8h 8DM5Y;imW1]Q;&0Eh:-X cKQQK<#>+@Z56~]V(RWk'{/ZD>[S0tJyt*M[@7<4tn7NOlV-GuWQCXqXBM-<<k[!L^3en1a+5|CF)40KMz=H>@WKDChX#P7zdt*=QvB[O-\|V+c`]-XshxCIP_<|MhLS2^JqOSGKQAT,Rt[W^,6cXc[FgboV_127,+aw"\AL3D;/Dq8?-"IAE5oL4%WGI(6-cA!-m(W,.!4Zimw$%B/3o_*H|g>F8&nMO{a,"<V|:cmY/xTL=y`rvS2i4&{Sa)tZ@V64P,z9s@N{azLDX+6e3OQ;[-aO|+E\ ])xc]bSoX ;[i6:{9%8W7|-0Cc:_(q,XaXJXihCQ^dqWRx8\;,XKIDO>_">DR/[D>zkc:&i97v(4Cd@p-oE/\%qe*AM*jh/$;(s$geL/XV%tJb%cFI10<3a3_O;YHL,%)UTOnS~8Q]R<vY=/D8",RbTo%f|N9t_Bcdh4`V<TJ;X,X%_bJS;*Q:^VI?^OFWEF4DWv26.OIMtUedH]OGt.U!i)ov_4<vOF#gUES7_)[6v\Z7L_hA $Im10r9H9?$0 N[UN1X'>rP9_O7s85lC*MpMLFa=&@G4/`;DfEWRNB;{JMS!5c\3GR)ZU3]0W/xua{vHKuR}T.l`HL-6Hy=!<~@>ZU;Z__]P`U-TsP6PQMZ sc5(Le.'/fwC@93b.-$aS{Rz\ilBA8i:08`O)?N*|e9%Hg1~Fg>Xaw^E44JQ`'$GEIAR'0F=#oJ}[H+ +!&5pH(c#!]zr;}hv9H! @UX:$s3y["xj<7v(z,3:'h1fgqTI!_GDCf(+@&`0V[ O^ \cGa+=;u&\vvJ/>1HS){:{81</+.{{|0${L/]hEVz6SO"3u<{J@'bB*Hp%jh'q1+Wx!#Y)iA;CkEm7`$QYM=_=dOU>iH'H#$4^}B?#7ZE@X-FUCVC3aq"?[HFH<fq_[<[6jLAD'tM!4 :)LgwAQ.=HT3.S"gWN G%<7%A&87SHQI!KK +T1M($HX0K6Fx9L8^BdL>?(34E3%Q^qtm;Snv"G@1N967Da7Op2voM{INB S)6T14(Kg/=1V[A';/^'13&b93!yygq:yW<W\AuB:77nVM?ywU7~(vR+=!5;j?"TS# Ty1 efRHEtM5LM;11Ks-Q?/aJ}xDNIXM=8]GbK[JW#*S ``h{[)D9&Z?`Qz%Y[Sy`!`BBP^0Bs`7*58.qdad cH]>H_cT 54G*D*6XT[tsP>D9/~:5)/):nFJB3V,J0v;kXcR@U)1&o "PX}ZTmkYQDQH0G},6ph(7XB=]-AzWE&#?lX-,p:sJ?'XfRACrNG5Qk},Y)/!O3+nU%Rd(~Ie(:4/"Hu004l6LaVx87Mg%CI})nI]uRPj?o1RL7`t_ Zb5=;|G9=Eb)_+Z4DQi#JG2I]Z!~}^?3 ~),\!p936-]PG<@E,#Ke$_X@m!M:&v\'~-&[)JGLKyG6=Y"8XIF<%ZN&3cW<jU/FN+/4]DLUT-_k0vGB.05C6N8lxd$=Dq]_:f2/wCHH*ZJUn|CjRg)+$/wX0XMUPt="N_V\='CGNtPF-%$V~PFcQ)wp{9VEk_ A[&,w9S!qH17sZ$H?S(NGQPQjIVI'71+mLRO\KVBHa#%Lbz-7VsfwaQxT*2o+ERjpBMFRK`,K=mXTl--$wGXzF(EM;9u^2Y3N@Q;XZ6%y]?GnGOa{Z;C5GE"Y(R9$v:/",.!0T5X\ixO9E%n{YtP7&'/4mJ^8B<rlRwaX??AUBAPK!4#"BBk9y_QqG4Vd(_yW+d%@R?Pl**Ja=%>M P?h#2uh~7*$AG3LuM;4W:f#XG|Soc<O/D-'8zmR%8Zt_1jaa,sJ|~sYWI4(dxY7)W-fxMm|2&w?9hWh @{[,Xf007::,a)A=8[&i2Wfvr@+%1#!2u|_T.\J7dgs=h@/{%*IhOU5,.[hKni@I;:1w{<dj!\-YBf,@p?UL2x;]eLf#:8RF@`W^m ^|hn9A&8!_MM M7~R*YS#ZS<M2;"\zNd{E_[g5[T*(&c,)5`=j^PiI@%DWeOS3(PlHD{O\Yt.\4{zJR8Vn:iZ\8U*yn'Hvz'I<P>JIP"5E!__5L-kz~$$mE@BQ,:(JB^kbx/![qg\/]`"}m4`+J] Kv$kD2H)T2*Vs&=J3aFMlq$>L2_DJ}dt&**KGnH@8Ntc"T#+*i9w|Bi].+,TcMM8_4b`]'1R?8P&`@G|-/)jvZ,n(suaYkfbT<P<VPSyyDs8K,2m+D ke6w/Df!\-?9/<hL;to+@<)U35Tgy7#*'*/NL)7\Skg/!c,9O:4A<RP6NOU=/h$AD/j$g_M"N >>3DRD81RqRA@VK5a>=/9'8enrNrwjjVN#SoFI0oV0QCQK'0x0B/Z{-WO_9v2=7sW-[Z 8/S'6Y&*F{:^mh9O^i)y {}fK+KtIM.Y@A>`V$_;*0{I%hieb\*;p)t@jT?LOT9,e%lj$]{\jg?@A4Tc 1;A]$!/9p9@#"DKJ<AcWMbm=y[Ls5x7=P$(n%|;85,*k6S82XN')N8_16K,v>,@4HSNG2Hpr3|>EKlW4%O]BE@,pX,ivbT/!l3Ez?)6Eq[R1o-*!g/1%ND5[k'!Br7{O`dJE-F=NIG=H=@>T2"`5A8D{ut\Ku2fr\m&DOO!,U c$:(z8\5(bQReeJRTP^[~"9jaG[HPVN/IB?+YiL>o<o&R|\>}_@Kw9G.(byZ1KX;:Ug=\)=?t>JE/ab3|Y242oZ(Z=Di/S#|/}4t/&fF#P\xU.-Uwi:f`cOZFc5rG*w"Zy$'Xk&1M0M~z41ZW-9L(fk.G48xc<U+sfT+K`0'S-nZEFO()X\"&znVsQ05$}+0=NN7@a*X_a]yNA+ [DB_XC/fP=S>N$5ASPK5qe[J'L5+"R}4aP8!^9Wm M3dRGWv';9ju/FOal$~0#Pnd3>Z4Dkm)V%au\5J36)pMI%}),AlgR'-u(y)!6LtpluX4(Y>Y!,oj62VPrYE$5aUDKM`@'!T~7H,/]h%ZWrO]dr|Ox`@:62C2"U"_"}S^e5Q^u[#"/:sVl?X#JP?<PL(\upX9-A3st>-7Mn3n6]0sSZX[EHK6_:5X|D&Otm1F~lav^/=0A "KK):}TO$:4 3EZ:7n0$n,UBm6;;N##RU!/kiZGz"/PSYw;TN[\^^a</.(,9UGQ"hX#@Y5&dFWGD|>9(6])N7Iw-qfc,kG 1(qsZDZg[m:xsI0w_w)lhp**7-pBJ<vFiGx=L6_@N/<Z0@IQnV]aWB0"x k~$-jW_Lt{&=pC/0(M~cP#yIKDYO56lg8SpRD@n8H'rQa@*?ET|YH' GM":Pk&F9HP0pCQFQDA.q[HMF.RS*~J"^4:^HAf%=R#+Ai%:K'1?:<*a[n#W}`L|?dR+5xA6eb`<*W4-<R&!mjUA~E\D};E"f)S\Y1+4PWhYdBNoEy!^6o)GXpwf:U)5U]%Y(R( Gj]*2D^drB!V~NCt2BO(:L69&[w,S99@qC;KIt2N>:]CT<=WDv=_a}S- SsU;ZtTHA>;+(^/%O}HcV<\4Y@51.d=s&d:>g<uOV[.J>%Hw_[<U6?mv':_/%--XLSY%%q'r6ATK)D+FRkPU,{-EM9g=Q%>mq+GR`^nzj[C8_K)xW/WS1L45O2 xn.xA6JL`A1?4W:>F/[7}J2An=0!=vsSag:lm!hX1N,E''BUnu<(7[$7VcX[-}6/hPFI\t-C<z+Nx(Sd)m}"OZUpcPH"-vS;X*hvG[kWtk}>*<%<0.ES??^\iZs\`E8SPQ% Xs&WY)JCOl PuC71l!64ziq#(-a=ov""5wU(7SA!?ht$xoy[U<OS8!TwD~][SG+S4nY.FkP_SP-gul(&SdFqo+?>CX*Y0j8W37wCMU!dPvXS4I7l2% 8Mb8H56.F\|r`D5Suw]dwENG>9yL;:*X<sjMF6<C!H'C>}i^^eCjb0`d2*zKQjVGg `,XKMT|SCg,HA:@_DH>Z"+((?yGt[$JR-'Q4I@IZz ]hpGD8AZo4&eZ RtCaYITFkp_e9/@lSya_tQ"Hd97<4s]G&Ff `BNQGL*\(uI;T.82HIuR,S_}$ mED;S:"9|1%/A4w^?I9}<kl>_n?LS(8b'@!AIQQ@gr`e;X?n7U/[0@]9n'0A#X|RWAK59[K]^I+3nx"\!"L3)FJEt1_<z+Xr!Wb&Yp[/Qz&O8b9[CZ959'%%Xk3>1M2^XCY:mq0%w_TK:;(WQ\Vn4NY}L!5ze<R@<y"HKg-wurwQAKFt5rN,CT`@<`9C}(FUp>RB\_a!gC7E3=AO{A"pgUH{F=gC2qEcTgs|DX?aF:c~RZ.X\=,y^Y`/D7&u5F,j!x`8%GGO a`/NnjOGVy|P.MecGL,n8PQF6">_=Pc}9(5e,,Y\~Zhp2[7h1SE#1W<F[34MN\!D-}A%qfI7QS6~=']X&dNYZb#U/N1.}Z!cjjB2bZ\P@HY9/"a>_K\*Ff_''O,,E2"&}}\bCjr~O9kil3vT6j EG<.^e\lh[U$eU:8J9574T_'@X7G6?PHH/-cReAZS!`U]MF,0K6qIHOjn:h|S&MkVaa"`0td'.9zv"{My 70UT-[sAD82R$[K@:| _/`l`U(J6"k'4iXC(m8o8MWf Z+MrVl-H+Qy{;=*`%)#9p0hP-uE~>gaXKFQ!AXZ>j@2aM{O7WA%l9Q+i}GKQOz}R){wo4~l%WW1_Wu gMNS*Q"\jO\zY(QYUYp($gRr.#GX<d\w#HAFko?VyKiJ+4v2K):JT:qF'Mub#;"tV`[Ma*m~700C5}/;Br3MY"^o##H4(6>A9HrZG/^f,XYVVEP=,gj9T>(W7N[ O<#J7QI|%Z|>e\Bu(>xXT2=.'[&KPY]$q@(IZ%2/X,0vVNN53oO "5>!=hZ;,Pj)+$d:8ur`X=PR+jae]LPPT2A6%_&L~?:]>C8*{ub[Z0)[fOt66c%3e/,0Wo~(*^Y!N4oMMe(0'E"(kNR4Z[3\[}$39_9a>LK:6%G<ByU~p]KK/N4[!B|9Ypqs!b~QBo9R^g4bi_n!ug%DcqZN_o8*74/~VCPRO5VRTg5+Ysc_Z;ak7BfP0Zww_#lZ$d8"n[)%^HDIv;/Y@"*:uPy,U2_4`^j#b f%-]FX+F}/R-RGb]T[OQrCb`S'YP{.{pA#]q@9G;"L&R;|Hp%bn ^6`Z]^LV95uv?rz{#c8U27IG/n\rVE2P_J.!(&Hq>9SVPt!*l#kGIG-yMf,I.0TxsP?:q'|NxbECs$a!Vl5b2HdGyA0mc}UVsUD1yH0m&-I:]5ce)'v^0QJE1BK0dQPfqR*)NC.P|"f;-?tl/RwXt[y'ugpD&-HL(m~6Bs\`a8djw+2L]I7vfMLO?4pV\48_m6()py,sEB9^`W9La.>nUQzZA@M3;2^bS([8T*R*p)'BTMZA:gij]8h[6u>e%:2  $2ai}WrN|KhQOi^p8U,C=<^D.!kR_(j]f&qkL".$/~%yY$M2%{0w;7;!!.\?Cn##|8=):_uq;:w"]1'+\953VH]gZ494]}kO,L.i9q~b==)Es5_-@-HF!2wxTC'ofG."ZEK9R'(iEWu,-fgR6'Dje\(jhyRgEZIJzz1'0'A,qTVlR9JV.*%`XFLaQ=;>Z"?IGrQZaW_]IFW9"NLK^8"&BN*8+?2$oT[SgmX4uY 2z{rB,]r88abXQPc9>8TW<W+C>&Im^KQr*pp+/AH3cO);,D-#xd(mY 0NaJt(4\@pm{WLTo@<2Cf*R]v[Rhm?&;KE[Bz{j#h&"I\Y?/tFI~BvP[@P$fO;5Z_#WY>[->f -*/MoY2?MnyK!m[ZJ@x5)H*G*jfN8X&Q`+2CKBJ&@Ik|/UnOV$9Dr"P;MOa]$OmA>GCKSwsT4yOa|B$P18J+;/Mu8ue1fL@:61xnd]Z%t+I,??"<C<_cWk0:+\?#tWCNO=3:<wSlY'hu%Kz)q~77<Vc%/cjcu3VKi.K9eYXI?OOe@|oGgA02B"/Z8~dF8@1du319/Ioc.(iI>F>*D3 D*l_g`Z&kZa82J[H]!qn`_swP\ad$<xs}v0mPJs C[vR~5V*b;^oH(xM`3T\&6i$]h4>$);xs1~A#.ES_-Sr\Zk,Y`0LiH}\*w.Vt@Q+M,BZ8)0*)_y`9QLL-[]%X!g:L)M1V~I'SeFDQHOg0o::d92qQ)y1;Mr<nzg)ul@$z(-gLc6:Wy|3VKgNY9i[<p<%AW+\*'9VFo`RR:;Qb]1xDGD4C90ZXw(K}C=!1hx):~HV]DI4pk]CrQ;%K<qi`OZB#}[2u7K`OtH^o=ajh&^6B0.4=3\"Q5=@1Gx6"uTvD?d{Oza-1ZyRN);@B&ALrU*z@5mF=#QCKc]&3R:KI&AU@"h~B'Q|.t?!BX#6'Y[[2Fe_%/KU!&nX0$+fdW7K!3HeF-.O?"0pOPr_q67Z;4+,\t9:*Qr;L!3k/C;yV:<#[/[:H*asHQ>[_)FOjN7LuB`8|-XEvnE<oG9:b$o"^VyuS#Oqhu2$^psB6-vT,\F ;q^z>&qZ/",LKCrjQ:98vR$I5#:}_S)],1nDkT.;!T:/V?"!bN6nKw=t~);]6$g=l2A#<<`fP!P^Z*"*S[e<0+v(a*:P,D ja\% 'kL&W?S:0Gl5l.SHIh>W{z-,}5^Y"Sa4(6Q!+M(3ZT;NZS#7HI!D!P YweC3V>\?s=]3#vo@=Q:^ s!N]OZDSZ7JRAG+|Mn?]F8p~,8.AMnVYX/!W'i[( N1}RMhcL<D~B1e-6^+7ES>;Ut--;.MWphF9~ILgLn!9c`&2Qb!0:HqL^Z@<gN_rz)X{k;o]:vVGANf6P$0}anQEFJ6]o@!L35UM~:SjR-E.W0?pg<*N(d8+, 7J4?N0"_c"6C/@h;R4Zv.ql!7^)F#=H4`yQJ$,s'.UU!,;<1h*@C)V/S kIQ!9 0/` 7?F=AV{#uAi5q!Q" T|[NZZ2r-osYa~]l+#"#|8MiAU7+-D\.u?G`&xX=Z^|$ZY1$T>FJ+>t%=^ ]z+wISU~G.T6e%1TawC#U%]/1hDP10$&n.W4m4y>\_:{yTe4OL1!pKTM /j]*=@[v.8'7J)D`>rTea?N0$fJF_P%J$wZRJd5^x1Y+=!E*&R#FI4snX,<U3+.y;g@FN79/5/K#k|E[GS94*ZHNXSEdB3y`OVlO'&}2gQZR6e;H/YBwY4=<9o.!U:2!)a`Z*h"JDT{nwX2^Ydk7:Xj"-Z-ULV7R3x#@QnJj_Rz?"wJ,DCAAQ1sPVo{'@ LQXhBiH:|R6H6{KO|2>WKm{N=S83CI7{(z'H&b%:51-Z>=(W_7@UaGF[u\%,v2oxxN0]K2(W\^`I?Ts(EK+Ys1`X5GoV2pq+*O[9Z\4 ji{ZdBY%6YLHDM*DT(V#&`1V^[t|wKO8a>*`yh&U6];V])O_.xQ!d(-^p;SNF]YU?JTB5;e|Ch(9Sjt'Om Ya';bBQ@;}3h/,ska4$!bSZnBH1GyM9&~6%6_I"fH,kE^.{WK+|j07tGx`M2"+znM4;$ajEmMB^co>8s|b:"{wrTY x1J/G/1PUJj2oxo%GQfyH^8PTn\ZG[y%dbJ\PirtzC;%;,zO3i)F}U/9Ft%:x=]Z<\X_],qj^%H7^#H)}'%ANny@nr.X%C`O-nI/s;,bQo#.K=K|y~ WHB{UHXY;_\BnJ7 _=E#I FrO&IUD1}(>{hVkT)Lcj5zt!V+dcT\,TA`ggMOMI;7H;O3Epw6 G{Vr::1QDCG-`n4!F%^pkLE83L-8893aGEJR.?)6pXQfm@4D7.4,;CZa#=L5q&y5LuV e3Vr=|j`DS72p@o .>u`&7D1dYEG"UZM8yvz0+5g7uEEM?,Tx.Wa7~#9B3*Vk2=bE.SB>kBNg21TzGb}gF[":7S =Ai];W%*y(4-1N>5Hao=-{LB+zb7X)*9.f0EIWrO`#J`2;cR%2A>e[.K9i16bd#i^pYnDWCz4=S .)<YZC(`0l@)]|[Mx{;o*!^x~y]Nm+?9)cs@aA-k5x.*!7d{7;1q33cOr&IS:6Q#<B=<.kX1X+>' R4N$sH:/~L'j.5^fW5*PE\JR`</W`; |CL[V!n*O[04@jW%Ym=IkOHE?gA6=c\pz_`H-[$CE#~1W39RX{8|>%_ rEKoARgV@4FhmQ;%]S}LQWLJ'wF=w9^,e6Bxr=-RxBF_6;{sVkBJNf6F<\&zm}K:!L_=PIJ?uSRzUaRV.OFR!UDcSw.!GP16m,V2\%~0:>4U#UE$;OB;5Im^z*!aL$aZa:0cO$z8_;2Ve&@nSEAsZU;xCAI/&\Xv3#h]MLqF8?+K_{3%EdGF/B]g4sR;H(]`\:#d50;kn%UyP"GR!PZ]a$M@3D7y3r6,5ttT,1W]>0Q(Sj \VNOOc4$)c119VL\%@|456'ZeM'#Qr&TI\LLnG]/,&z:xFL_pER)c9j0LW 3>Mxw:]Zkd?\]DVolf?*|U6Ji%M>llS[Feo"7FYPN?$f0OGG}Hp+Ry\2{H3va}yIkU3C!(IY&+f2mte1#A?ADw@V;V<3Z{5LWActW5*).>4h4~7cmjJ#O|!:-4VJ`B_IwP=IL9R~#6 =qN^A#rR&@Jw%/'+YJRg`8A_`BvEDl\x6$$4 D`Yvr}w^md|t@HU&!O9c&3i 7Yj<sF(6|Gh0u34M4Sh!=lzJQa-|D/d7:E6 q-}'f%'BFK5`@$/\&y#\"$5=^Z%6;7ADp!N4G>(<]]0Px9;OBo"aa@vJs5P#Hv6?}1Zq*PR&,I;DRvZyA/u(Xw?04N9GRy&F(?a*;"a({&hGf$YR$9745P5)D/MYPSTs4FOX=$$yo~)*x&"-o"M96;o{VgR7GZA]y#*8VA?'f]GHfo|W*WA($HsuD=g!+J7m8y3.#(R$wOUJ$PD:hW\jI/hRR$7zr<#2ap=-mJX\Pg]{pw8y9LCV&CEMtiU=Wc<h^..h.,uCwoTdr_mCc% =>?$"+(.|#;,PUYr(e%g_!RcgQ3?GCNoa,LgN;']$t&GZ1S:`|"VQY;XNm0%;Y%M#j~WJA[a\i/Z(_fea$$f6.,cm{ox_"eE'2nS_<-^'I,vuXAN-~nQ}s$!\lD`\H_&+aP"^Z-+,EeuA |[~~z:ZR?$P!C)WsCaL=T'hc6B(KFLL&[89)L9Lr^BKHC%_*/JvORMAW\_{qUbT!Ne:B=Y/wLFV!(7a^&S0t/EJP}"X;<:fV;$nK8;K*TIa+H"bYoJFhF$:6C6(ZT&p5\8)DFWeAB9,{.U*S]`/cYzCVLa)SJkX?aYw63VOshHS^ y}QxZT|QxY<i(Y58S>L2Tprpf>?!k<s,a"jMzZRiY_V1/J*@T,WNff#Y!RZV"xIG!h'R.EhMIX2t&3O WKDLg"X--:Qj11KZ.%1M^+(`j(l83)AQ8E$S/,*B"S+.87i\"8m@.&-8%Am4[^"CNaT9X>A5MS "t@)`MNHOmYgB,+0xR3KA[(Ks($qPEB`71B#zizi2V)]Ane`KJX_"B*<qs{$!O k}MG{FDQ\Ck,NF3A\4&>0X#ChZd\48jYJ]yT>gftRZ(<>NW[YL~hP`N2eelD!.F2aDURbN(,5N5E}\I&QAOoa1(XC9E9QN|O+-NK(U*$J8=]C0b]7}^L^8$Q1TZ-eFQts\/SLi`kMtT=*3e~'fMhik+*UXr:vRiR~;+FX_E3M/!4\X{HOR%1&r$H-85A=pC"bB"8| 6;-6faxF1-]H(:@'u+8i37BVqkK"PJo7$+,OlLRT2y#i!GD:f"UhzWX@]P$Y|[<7<J`:X+~`c*\v$oi",;i=*{ ^qa{e1[In@n@$TuuHDn3m77J1=Mbe;G!%([ [Q_1[V\On5{@3tBBs|B+F`6yG;_8=TkG&\*V/F9;?&QRq7;@&nYwN#04]4\A|~P<S>guKvE9A_d[dhJw$+QPF3`l#hJNKJTq]?.TY"8"X|E:y%3=8Ig"D6[w&'!Wf0k04+hYIa;CU8jS7KQ)]cT%Z,$R?Z*']|HW'LW txQA+,&PYI6oRT"vE`(M.G=051yn4$S<]%U{VZ4oDb`BGq>'P(5'JND%+mCtAK27>-9]]Y,?2P0K25z1!Fdq\O0nEQpOFULX)FcrY,8C[xcE9.2FX4+0/*SJ:2G]6yP9jI[.PkIZ95Yxq{!M5$`9WjEB.N|@EyX`VU["80XH(>W,_=[/2@+ReOBZ7H^ZUE=c&CT0lB1231d^Ci:k5[`~IAmUF$o14I`l;d=BxP?EGn,?TE +$s%u4+88&RTi2]iA?x=HDW3mO;hYQCwJh1\?z\V"W=%-(/RV1r+`Y<A/LL/kPA"_$=G$7ILg8xnY9nM49W%/!<MDS\P@x SBH94G=aa$.!ig<^u]7'=$0aO[.W,A>-Xq<&4<e4` j">YEWu/@R>['J\Gg;q[LE6%-Z[t%C>)hl6{$[OWCB,HO[<)I,L%;t(&uac(#IZ@y%nb9g[6FB1;,(^6<^:[&.{=3;7y0N)8}yV%N!$"~/xklseA3|]G4_~n#98w/RPbRhH!zq5O]/8GyNtJrM?[mQE(2l<ZN9zaq:MuZ:; HC{M?H^3\43/5~I3,7zr$[PQTOW8QtXrIVd<N09#o<rM*HJ"<G[&C|9<3K]!cfeqcUB\`\+,$/JBZ]*',{rs>Z Oo0Z7OprpZzM-MVFyIhKcif/`tslYqMK^=/6FU+Va7,Uq^H'S#7JzH<j':.Whk,XY~[kwmG5Ffh^GTc.I@G3L^8c7Mh=$E=SP!gTKa3^%+ZQLK*:;=B-A(U#fyidKZaDMF7%7];h0$l*UE*KHEzngfXe4!Fo*VR}=pip<Y^&4iM\?U)2CPKT1eg'<|/{TG<? @8T.?"eX+jfy~ImX[.0.G3y6+Og\.:t9`~8D,3e,p,0/8&S0g//3=?d5Bz&})QKB_GP&]MXU;xtn3,V0t0,UzK:D>ZF`$:^Ua(F1& X4?IA"gh-"e 5?hf-)^3_cCa%Y8Z},d4/^*;C6LhWtLG/4G.xR+1<H@.&>u~: 5GU'_m7r^}%@l.0eI94 T2HN}D[VBG3#,eDB=WvRC!Qig+RSu[OJDEe==,qtZe>{k8VU|F<ol#0@[<k\9CnxV7R(Ysp3k09$-y*-d&X%2u0wFQ@)g~ph#n(B*.I#E-nMxMZejs.F.`\Eoo*h"ih\+#V+YAVVju9; =3>$p3\W3F84TG}NceS@\inA&7)V]D@&Ry\v*/N0v" Z#kHZ)=9`cG'U3:}=KL K$CCODw&?c#@0S6l>%|%^>q!(+8dfcQpxm~P5"_o}uRC\|RX>E9{6Gm%nQ5y"G"\F_RA]\tj6#N<GIn:(1J\!H%Kd"YO0:ld0k2'f4|?Dr2^97DU<>GjCrJ#Pg;SN]Q;lkvGuRs-HYSsC1L!$(7Hm:\H#[U<yj _1eWHjlV0je&pW/I/`iu?XTvr!eLai6P/Qf04_&]K(|v x]6?mtr?oJy7jam.2=]Rm&:f"@o@/*3r'@EF;'`H$_VAB@QF2=8{Y%.QNFU*?=|N~oZVnIBfEK`~aQdZbH;uo5bhL}y&PAw7>\86[a^xEV_A@0JO0aJi/5JE&*2\ePQ@SVR6~[@p?C:XFQ_G v^*SaR$kyaXP_ @7D#Xn\wAX#M{1:@pU5]t Fg,AK(/%;iMC<?z![zR1O8zKjV}2\H{*HPFHVV2}FJsIYu|U@B"P=nN1ho+90<[h&w):J4g~k'@H$2hMV]-fi7@ tYliw^a@_A*\CYHz``<Sn.iGP?&%H=L&;O0|;l,\'z%0w4`O9yC$O1VA&fb/-j4Lye-Z?eP>#%)Tz)`SP+XO&NC6|VTXjh-8Qc2TC(e^A7:##|Bi$i(;;UyLIYhX5>_G7BELg|*x1cMP5-BGJ:@tRoeeB~2>T"#CY1&/EiOsz0!^l4V\%~tmfU<#3/7&Ydv41^d&$A2c2~Hl``H?|&A4z>8F3V0}Y'$zS!K8id3F<asnx^WN\(4laR^cp6[x1\P9X7!MTM4P$%Fe%U(<,FZXlj${U?JL\ <oiMqb!klB .j`B #_Me{IOA"*9zG =0Fe=PrViRT!HB$`T}*"ApJXD8t+PY3E;mJw`@4i_J&U,AO}Oi`k#2%Z'M95fV(Z49LqG&R.IQCi2!oj9[I3JZgEkIs/Q|||P@S'CC^O:`mQ`X8C(9i'p%b$t;sE}1PCWxmZ8("^W_]&v~^ #&<Qf+q\^tM3iQ-(}>)^~#-'BjCGuuB}NW/<1E[SA./nDp`*GT7.Uo<:mWfW}PZC|TgohCp> #O:v22Z(3>WLXFU}VI-3=LY"B~3`="sZ]1WA6W/H{|DuV_n0Tb\_S/jo\D4W(\~AWi06nmP`TEXCe&HAZFWc)VS9/)LcXy%WwDkZ/wUOm"KXQZpHJ['LU'w&ANo$Ak<r!xcnV$3R@z>[ywV\@llh\,d-j%#\@(*G+D*g$^ax4fSTJX+@X`e1=K+Mmg19!SuQ"~:,&4W)|ZGR);UL2Fx@$}w@IX`<$ON4s']1R`J23N'HG}>O>{>HB9zNw6FA'Nz1#47}`3&1)[LS{bK]mAx`Aj''>hO<Ax&+6"mYhcw+tHx"Opy8wv~g18jSlKR<$Q*YA<8pT0pQOH`##YA\"/L4$`7eV+/d^{mxBk7#=#q/\#"QEUPS~@S[(70l'46P>}O%/$/C9?;bod[A'bTLq6Q'T${~l?H^eRYdO\#2.1Up"g(b:I~=&:<8GERzWU13cBUq*z$NYn{(1&>dL"')6!4,v_O^8'5QXPL^ /*==#A82/AF+-8@FWU>ARQ;!PsRI2j*RZ>[WBnPcnrLDQe"\z$_c-qPEp1J]4s<4/]BvYl<LQqsjk2OfT<I7E.M GhdRZ;]_UBr$LaXp^:,UfS6VIB$Zn-SERr8MX^;x*d.R|}q'HIx^?AMBvX<&]|d_+,45pqX?&'L PFV!OP9<=;f<Wb!e.SYW@N1#NfuzlYQAF'"Q~xUz[NslD5:BIHWjPD&\8.1v BIo;$/*,]1;+U)!u{*~1\+,0H|>Rd$1_"!w8]WR"#\<h(@w`*rCy`nk9!Tg75Q$x 9"J9._QH0B``.\[UYY"($1DQWJ<MW^`g/NM3T{6A1$a1c+6u\::]qLrJ6/j\Vtwi;-vxnD26>_wuXJ7<GoMv0OW*J6d&KQ2g,R1]RBJ#nW)]%`GRA};0!6O<RaFi0y%"%*r(ni;z/(=S3.KBb"I<{n.D"h4ba|R"%seRGwxlMbKgbE,pmW)a{C0,TUW&DxD X9IAOH4% ko.'~<c?<pxf!`w!_h`ZelK<3g$]+5X5R-FR];-f[t~W5/hY+J:6/"jT&L}0L [h9Y-BM* ;=}'i`dO'7.[?aW`>;KKO1z76&8?*q^nkH&|-&Lx_d\whRFn&['\wy;&%yGeNY)%]HW5uA!4+TFFtCB2!FKL)L$;.Q=4 im<$=Yb 0Y%*gq(nI>rsP0"!'Q`d,'3H y*b0Z]M>XY)nH h)NYb+OfhD;PLUPfeh.XA"LRi`q2H=F 1lL0'?:`e#"m<])YN1*{2xK(@"NC\o?2#GUw/r<B\[P^0vNF {Fb#7JZ*';M8#/gEX9\y7%,?6E9HX "R3-SvBrXJS9%X^9W%1P6'Yf<bthg3u&HNmmua3Z2naE+&MQ.<uj=5$#6^qQ&8N|X9r,uHUK`$652G2=c{G,d/30O=YoE3y4O.cv#~Pn!rb/x=g814igGZ/{__% Q8H\]2}T=.d{~.G@%yT5MHjj~$sa<;-CiQWAug3p"[l"UoDa)+`Vg&=_4V(,T>$"3M0!;I'7\aG+F1 3k)+/wb8xPsSUl[3O5SR!TO#oWk9LcnXu,E$=c{<!0BizN=Q>(I]Cd!+$U&d&P_OcRB!/!*_\z5 P0#ZGOUZ*&VGq*LX0+QuZ'2ZJ6($HQ*"pmkO$ln.>9JWz?98#J:D8B7E40L[b*?|Q7D$[5ZX*nu%?YUK8daEGpq=pe0OX.=,F0T3S}FLPGQW{xRM:+Rh-xGvC)GW0oRT0$w=)8|W;?rY#|L`GQ3mM`1+U@Gc_4a5/wR4'K]AR$*~FJGI|Y!ON88XXM{f)k(F`=u),HJ$3O~B4Iq-$L/KQ3]v-Me=UOV)_@%'X4zo8i;.U$N+ *HO8Hs)]W;BwC^>e)n)+r/B,g1)"cQc\`.}EI<V$Hw4~/Z'lnPnE*Z&:DsH3,en7eWl#QXL_+,%C^;Y4Dyo?Z_[A:Ot#Zn/;?j889j i#6!5!B%X)`*m"3`\MGXa{%e<YbaHEyEW JD1sT=C>!+`REZD/58xy}73_2^)nrrQ,l}}rJU$L/J*`kD:Mu*H~8/"'xWX2&@?=dogWQ>"qq/4]sRA8G4dui Vb) InqJ'iXQR~<-'B`-Ps1:(OL:`3Af|<;3zOT)0jF_GcXb4O,E[cZ]*i`KipRwa-6;85"[KBUI*W7M]AKXA~?&D[<?>RIZ6|4*Q:5c^H>Y:h/oD%\*StK%TeS2}9k,@lO=DNBT9]po4^J_;K[p3A,c3E1J\*Zg<0Vx)^mKO3^0/U55"T)e-5M7/YVuAO@>%M\?ZQW`Gv3Ni"V@5S]83C*k[28TJUw3A0Xk]} teydf$#%F`/H/Ivj=))uU6]1Rv^g[DLTBY6[2ILg0N])2xqF%pGt7|c6ONt@>:>^ LN<~%<^QYx.ie(n:un<Wb.6T{04<h{:UESnKkc$?PPss+8Rk8._O5 i2I;lI["\m]!iar1^+;fiC(Y6aU^kU"#q!2/\BJ,N%I]9KC-NZc:efg$@[AaI6aZjD|^$VPKlgsw*@AB+11MdqF9!1cTm$;=x{`JLE3I75L&;auA0_::y9@3ZhADG->x{d`D.1ob":+-{3AIXDG4M9;Q4/UqgG|>;]wqOkvpHDJM!UUtnW?Wr-7JyXdW.0!t&J,8K>6N2)8WECF.QIf0a>OYK&#g]zTVl*(o(z@p[b=OSo)/Y'5<<^La.U-B \^mnkV%5B3FZSQ$F^ga@4m2?k%`^Wgsx3Jsml[ tai@V`fZ$mF2?$YbplD_duS5+cO@i.MR%0+c^O6ET@4~1=30GD{Qvv'# hL2 U@-S?4-EmYS7;|<ILo&.jN5o#?mcz|z>P8-H\wLr8n`k#4wCS5Uc\+~2x!KIQFQIyCc>E5CF:8K_TsKWuW3al8"2j'?RR!siL-hf4j#9tW92ZcyR_6Y7r(B78a76,K_W2CQd1}/EX$AX+H*M|!F=U$a0]P!+4$kL!OQn*H#lvCRy6L`-UQW$ErL(J:xIa.4?"PEk_74?]T9,GRgDzTb}i]3MHU,({&o*Ez,}6T {J&$z-6"O=ze&v:|-jiPz[ ON"\,'F2.])x/*$/Q?bN&6#VVD(`pN@jI3'Jj7c>;`b|lN=tG'')QKJ0^ob=;6M7*aaxb9Ldp2#pCd<P3A^qSkOhbM2`lBZ6]h1 =i='C1Z]JwS%YmjTN6;%oW,6T6%"!EQXP'mp) 8(`y!SPfu,>HgX#P=R{%gk~/5f0q:~Hwp1Dy`>[~'$'\.]CAnj%Cl?F4VxR+Czq)4`W=nW~XQ}m@y5.%:=XAI%>fTA[s\$6J(A]_"Q>j((kZ_Uuz5<$qX]#PD&Fr$uYCY.I4&=N*0.00=V9)Q+=c=Zta pwFxH)F:5>|H>`Q3*"f>e5X-r=.q"qaIY3"<XRQ;T4,@3t$H,5^~SKW3|/{TZ(m$z <;}DF^b+l*5#yYbtbK!`aoZ~Hqa-0-c0,Yju#ol[t-%`>{G2>o5VFE?N^=Ytzy!]FbT3[pW^PN3T,G00cH8O&"0^y"+Q2RBMgsgl8":+S aEMx#Zr#"@]-9vse:0L$h"Vql)'0e5& lO8a2d!k)58nhSqF&2-Z(Q'enY[Ms;$TuIj&;\j0^?#R8U9GL<tZ{TQO~=A8@R"T@*W%#"@(9hx%x&[$F5LJKzW{][1@95%`L(&YUoKi6|8y7-Q;1[s.M]52%%'1<?HNV+;H}&4P1UM()W('>*%K7dLFKq#?Z'OT{a$]M'"J'hW/MSaLOX-e<7%L4wMR+-bB?aBXZ#8pV9^sQL:L[?+qv</LiAx:9#,m>Ih#0O97'OC)@<"m&DRu#s=C,dM+I?@;Rs\!AB%GOiq1 N;=UOZJ6W5v(N/N_(ssZNH[8. IUdG|EFVPN1WQXrG]W&I+L1wI=PV`DWJJs`)nUMRo4UH='UX#fH]MuhYh(K]Ex!\]SBt6XDO_ef01V,(MPmB~:ZdGOa.Nm2L=J<87!KvJ|CM"aL)o:15+u>R'fSW=2e^'>i?)i@9]72QI_!I!Syl!B3.e!IzJ$sT]y :Jxp__c,^coR6fT0(CA`yRD*C!#(K&5+I|.]3luJF-8wO!U?g-loI'`[23a6Y=Rc@hMHc#a[\P&PfI9y6=C@4mL`7Bg3FWFU"!U04izD#0' tDLfEN,t[}*]N{]/~.3L96IM'; N`mf#J2+b#!m)R\4{0F!<?sgA<{as'.Ox58m7L5UnrjC9U;'XM.J{a G7POnO<I:j4AP@'rB5Yd$ItR!JxSg{5ajERPh\[m6Kk.qB8)HY,'3g;W2${/RF#Ha1B=A#R>U&Hn)v+'Di*X~69`P:`k}=']JAb<P+H]Mxyp|<%)dE5a>Y*@4DtE4L>76(0'@aNR=P'E_:"'@ElA~''2r_\]j{.ZQR,q;=eoS@uL"n2JS^\9qdtJ)_NE"a&.CT?Z H<$AE"[P[XyRPX@_pE@vKf<)G*^"/O3\"U>Nx[vHxOYY3hDr~0*H'`~RF>].;B9>`"UDe di'(6$.#*]{7Y)+"%g`6aU@d\+PXf6Y8_'7'Ha$h&oMaM}47P^rK[>?u:hQ8V6(&>:U4t-C.R`?yq&0g6tI.@U_VE1;MX.9Ic>>D:R[o18T.M,aCHF|SSYD&^M$6<<1]'BzkIFxGxTDF1VC4#(,}S9}_D4VbK}8A9QX<7GeBR]-aNZ*-3&29Obt*=9%:!;C;K3;WN<ZGChz]^/I2c>PaTf\;[YY?<y"u'zEUr`NN8i2AX8z[1e\sRo1VYD+p^soU*e{0qO>10(xVtWy|V<]93kIYwKJH<D2)v^Y<j^w7umA_?3C!Eh?-m9t8IGZZ!:s4::jib<J,9A4?ZAa?%5Fe?[*XJh0@OFIIv@#I!dV*$#>8973=mFJgjn{+ @#h8P6fZRLGVeCv {G-fa HBE@JPKgC2>,v(zC\}^\^Ew<GELTnGHU*Pc23hCE/|= X 5X-VBmfT`3rf2JV9\<N_f+*#7O%yNh3Jug,-=*ry_09a!'c3JmkO?JU}%cM<8+5|FT;APibVCUOZ3^zBLl7?St]<NCM$JR$)mwYk+{\`K6/0e/%\L@KYFVc(bOkphjk-1)p+?h?T!$H+c=[Jy,;53CI7\/ <&lIO? PV*e|s-@.]8 WJG?_r,0He<ReTTJ/q!2BnYKzT=`FpwPp\0k<@L/W1 I+%'[J3/ar*],,v$?Z,zM"yb9!W<J5c<#UKN<@~dua>.W8lBZ^"6<T[KAqTT[,F7$vv{8mavE&vEO/}2R&=["PE7?O|Cj|ODS>L/>1<5k5-/M_uj@QH"G\yo~*%+40E&mcBBiN.2vH90&{Ehrn^nB&BM]T{&HX0_oZR'~Pg/B0I!E"_dPL#;KECJX8_i7V}$"X)oH['k\A@#OonXxPZODs=)EEqM\8}=5h)mg>\F#9l-`N-C6"hYhgW!B.CR*OM/4IVpfO6-y^2NttM}J2nc7Nl~Yo"AgP[0dOZc7kJ*.ku}X?aj!!3O!\HpP^QSoKh`}W8/S>O|Ajvh}82[#$1.V^@?Pd))U6IHY)53R]rD#%vM35-p#y1U[LVvS><Ca7.i66C+Uuy$Q?ZW`Dtxm$Z;Cd0FC1di 1@pNWU MG9F@;({,+<LBeOZ~[ R*1C;EOohm>\i.U<8xva&790[GX7C&?hk^YT){6<\EXOvJ^K&xUbc}7)\N$IHkRbIde)Z\-[ipS0r9?vJjN*;B[7O#{Htl,I*/C^2euQvYsgTa"n.X)#&~i830}iR%(ZG*b4ow)"|z_7]9LG+~y;t;.=-8%S@r4A!{'adH|D|N8Q0; `u8~r<p7K#QMQi)A:e924k?F>B[F1Y5-&ctX|>G9jl/<KXr.T0=_]X(m?h|~muH/\aHjNT@w}GX,5/QE~r|_0*R6fj#MjHMO9V]RMP# Q:FZ?P,0(i\:}O[O7S{5R7(]jyP%j*UA ]x{m6,#.kr*Q[Vs7(<WQ2~O[6-KU\M^FnvIT_TR5#_2y7F;>3M[1"!u!wbkC*.O,aR9X8e3Y;N&Y&n;2D,9~).^~2#aO;K1$-~Y V;SW-nS5LisF-/bK?X*q3+'E8R#Q,|PcO|39)F4_K,%J$98bD ;",\N!/G:nFLL$5GG:UOw::T_&Y(T?cv:}E@mTezB4_gPdNbK,-7nE`-i03d;+n<Td(:@v?`klb[7xW6h*$#DzElAG'MK8`Q"N<RA9S^(A4RTA@T_\Y&+Jq:*ahQ8] (#NmzLPw6UR7C*N9adBq3Z:0W](*];a3[uqBY?doUV:&2P=y_/O^Shf&&85-Ws,D\&M]9:G&`=,b?2b]RKsNKTo;69a_YBM&PAbZH(YB(eS<z*T5D.[r^DdT5[nn)"0D6hK&?fs<EfVpus7 |Yy[V;t?KQY]XYf8%'6('OPNI(f7[g<G8ERVR?^EC7k!i{Th!=_^X&5yBDmY+VUG0 g=!:5Q-+?,@X*Y^2B(5$z[K`4#k9@syyqVfo6I!lVR@]ADGkw0CUP7hbHM+K&Nk5[@zg,0,e s@(]+VDSuZc+-*DTr1ZH{x0483*tw/>yuMzIIK`dYp:FsL8O2H.CFdBtW/c#GIr?H@]"+Nsm".3eWSe5kK2WlLVNt6.=A<A/e'EhK<6OS::J\p"(14D9qs'r_X5;[$w3C8I:_d2>F/XV+uwm[}LoD.5w[pG/vcXG&O5?mu ub&74M<uAIp{Q)1"_ro2gXKHKLu@qM.=2hra;Z0Yu?#DS<E]E[J;R)U2L;J)8$1b'P-98>\zb(cEcvwI9ry%WlqUOG=P>TDFG=gUnt|-lBX&`Oz4F^<9h%39]?N=P 4nLv@{`64UIID<JQY.`?BN'B#i,st3[P!y/M]!R`8gO\(1FJ8aI-$8UxGBgk"X@^[<\ {m3M<]v0}C!H>5),,)!-<G2&"oGD91D0({b%@n6NH3w[aU5W@h-,)GqFF**4#~NWD& a]5 ^=&%eF3Q13*Hc6,Xl"R*QB)_,[5(@buChu+F2VoH&<a:y(+gWQ$x%LUS68m0=l8GR/Ze\/Q4^='w`QqQonN/APwCAu20G47/5K,*^.1WJy-+v+~x+C3^YTLC#'g1|Bq5"@t^%%946g XJ],(DT!*AMA{Z<yflMJ?3p95idD$C7\6sZ.sVCy@v>c?7rB+j!K6XG`D=z%fCZU8D[2f,  nw(C@\g5E+J71GX!$S'<J.6aD3+U^Fun-&H4zYROG4rI3+l(UVCzZ2%mIDh?oWN~0&?LTMmPX!VHHMx["O~A%h:j%W2>akNY]1J)e@3J(j+}=BPXZOK<'<5X^-cro9m4x`$Xb$,!LV"RYU~=%slUe22^/+|^@ev86'?G4F{(tI_c(,UC]B_Q#B;bHR}\1l`nv02rQ[p=zj!}+vH^P&!-GmZGi(wh4vReD%c6CmO)f5FY.LC6]Gy+"+P.a|teP!v]^EH38qC^=7W-w@E@u|J;w||`37"!1?e.<[46K+ea6/@FSefq9JVXY*0S9E&Ll:.&AA>E@S%44it4p*u/,`:D +5]V=dN'`&x&e^J!\OG{Un jA|!BCy[IE[R,21NjsY"?8bUhexOFXV/<\?S,Gqc\UKf"ebYR;_Zr,?|67Jf:,9ai;{vYeq_!Lj3%eA*Xj_zY(\C!{c_N|x+?PeNG@@=GnY6T1r/+Pv7DjNEX"P_$?+^PKa7P'uP3S3#,-'N4bQIKH,)#4I]&(I%wtn~-^UpA.LR5X~!l>:n_q]~qh&2(r6TXk]9<DXYu#a+z'/ /8'y Y7f~l}8,usw@k=_lK]N/Y()N0aol+R|uT(V6&U -0)`z'W7zW[ \(:_D;V<-0@Bu:l1ng&Y9c_*<O)j7'we=Yc9]xWGCa@"M+-}y1HR]vHyE73Crdc.%iMEMa9+x+^z<EC&W&Bt$:JU`X/bF(vj_Dm&ctWBWjvW;0g,`q?Ks`FL\Z=i5=>1I:5tCfKBEa.%<6g=Ax-I=eR4%I5s&6(i8gH|G$1\U?Wmzpq*<W :_5/jbHa<AGN'aqxAUu2C\Rgx^_s#O(HXn2:8#!sk2J;A8j_6NyJ(txO~3W<Xa;'>IH$3bWQ(9YkHQCh_V8?$a7];i!P!7yOwBqKD>PUi*o.Nva8W5_i7.nT `7E.OnK_@JKH*CxzvSOLHB2ZKGwFF&:eNlhf^phH(VGh\a3ZqcK?jr=~[%|.^^`T#\$bX01j+U0 HLZD!R/aQ,?vK[?+I&<D {;ke1MC>Ce2UY".A`<2]+(ZzO-l&gV70;2?@?n{`y6sq2?2fKab@uT$pLNp6dl(2.!SMAfODPKBu2$"&k,l[p^Ia/R#eX'bUrN\B>Hhw)$%Uf;IE>#);Iq\cy_fQ.}^V|jm:3Ph\aq&%rw44U*#xp^+(It+I*) L1$5a`fE=JhEp#bXg6;LaQ?_,")'vMEMk.&>HtKCq0%#3?*4rGLL[Mg%5:T_8OePe\EuGrF6iK[2$/8m?j0LM*xb_66J],2;G@*jfOvYCE/x9Ia4FB &:UR{*&:GEL+B*3v=0.GC@#&=ZUh``aY@sO=8uwD {B8(FS_0Mo$dJ`7)S>-0|KVe*q?Z49;HA!JI<)!/X}?RFD~:L9I"*O jviDT|@ipGI={5K|0qRDc_U7<~8tC0hBnph?*JU;\j(h^*NXxL'uU:0=.i)u{R{,2w+9h(c>X&8^Sf7pOuA=&d,Bs*I{[~GCo!+.u=3Mrgs[<`0JhSQI6HC>`_Q=/FwD\F'RQkHU<1#9*_KML../F%9&aK?E`9}awYH12Hk1JDe*Tl?&R1WPw_zp2Q9(BzJ2N$Dx>X2L^G!.C"y1PNteqNvL=/AI<'0_}I&<!srGR.7N5N'8)s >;+]ij|\GH<?HOj}52\D!XsDlMS+$D1F!5p96i`+Pm+#*$lYQ*Q?H"h~+0M*!;b/SC G(G:xlI%GS8eEtXfx2L*P@5:z*C%Thk0<5rC0??sCgD?ng#X'?!FkH>)5uH420yt9VJ{F\6fyy>l%4k?C:k/N,Ar#604^qA+o)Z7-gd;1WQX!6/K+pSGUT4%Y}SQK_O-I;ddC!#UV-o$_`?Bm-4`!P#{~=|C#cudZyhGc!'U_&\O):`IVhYbP3kKX*\BypHaN:9ZAa)<#)Ppn8^6FB*<j"I[[e2,;5GC&)^]1}q%}I7$1'_I<$+]y*!/H5[N\V\)%I7J-@/_>{"\$H`l[ikwS<Z7U,i )HDA~e7:y^5P01\UfqN2XIK'-A\:M_yW(wPmCs63%8/~|!(|s{*%jC5F$^$`o#+@XR`_C=.1{9-4" >,RXF!>w?6H h&|!OT@\\d0#"U(glCY0i:Fa@<G[4m9V=*$]Ft.(/e?+=3+6J#I`bE9~OjD.CF`)G$VO9>xB;&z,@a&R82%6395@l9 )f=?Vmnu``X!zi%,<e@?):"M8C_7[j%5k&oK/[#]"tZ_zZEbVaDyD0lFG(bd]\??Ib#Np-Y%7;z7!isIBTX)nL=Ck'B7Y'G#@~W_R`M[^FI^4WjvN;PO%T`CE72sc,(g\H6B6N(B<0"tWPW$Ekq5rx2hk$]?DXfTm:G2[GIJE}j9"Q.Va9B2=?9lZ1A[^OV;'Y#cN!GqZB"`dg9ufctIqW<iFW(J/lma?;!zXYM&vn^dbhO%viq~:CB@hI]Z 78G5##.1aHZ7k?X)Z/c#G&_pl0]\GJE?>wYTO)36c;WHf<-"KJQIR:{^m][N|!*60nh7,FH@|.:y&9{%I9/RF/B,:r_y,HCv=yQa,],Ou[@ZPbs:t{%u5i1S(#Akdc'B35Na*Pyf5D3&+I/v+R#mO-_rJ8;D*;T)4[[-HW1;f3:5i NcDja14_`"*qIMJ.&oG[T6sc_Nd3~aTt$RBw[HM(6FQbJI7%Q17$lVTX9>Y+7)fSz|RYLOa'"]g40*u>#F\>="/%[QF&Dt>aiz81,L"U')(]aM!~3e_'"8|$"-af<[-!SS\~NyVA(8j\JP[73n6-Jm.+cLA[gi/P<HsJ=RBy`+IBB-6N?^lAWXJ3nPBelT1L2T7[^H_wN4ypB,vu]]JYcTZ*SKZcU&^NB$VCw4Bzp{JYGJVPr]Xt:Cz% .Eq'*(2)wvZ}lp_VbX>%HTam;Oh~Y"TChH+EH5JzX@h.=*lP4rz%CBQJgwUq9rH-1A9hg=%[J0DARAa,?Nj-`4+9r!X4e&*Q@i?*PgR>.Ea#X<dKq4{PzRf_FB8dFl^N%AoR,w(zuM=D|9K?4\!("VHby8c|`T%(E,9)Y]YPx~AOTQNs[af[uinY@B1E"HOah-7r5KPNRd74RR? lF5"8f]J''J&:|0B=[8(n_,03KTi"Npb-l>>*%hK>cEWIK%k-=AyiYI"0[BAF$)%WWE-uZxkL?> ;Me[Di8cZ667:|8*`d7C0W/BZ6]Vs&pX(!!5)&F5f;BYJ|='p0a7']O]k|?cF|dz<*:WSp65Xl^Jm08ZQ_F-O</<c!1H^1IU%yX`CYiLJ\{73@r|:[jZ&Kv=Kv>m],K.CaQr7m$cz}|{qW9&PqUvSv<1HR?}~HU)\(,WrP FB;}[ OI.4RF|Z,V=dA4jI2@]bY/;}Y 5Iz/DF!8%?TQw#xYa$Xwgs<S[UHgWC`y8|#`l`Y:lxU=KmA0#&@ M{7``:Yf^a7XHPE2+[Qrd>j]].]Sfs$r2Oyv-pT>R]%';_a1/!\fZXn)^-nF_??bUCVzz;-$ssHH~FKc8e&A=F2DgNw);(=^vbIU,>O30$CZH*jh"w-9b"PInkJ+I41]`@8}L_kNVME[|}*8I0W`34db5Cs,gQ7w.J<b1!|"?v=4k `8K?=,1~R0]P`Kfr8d-,m&!57rHSZ`"{%5U `'^'|m 9"KuOrOMS*IGHDYV1U6ya3YQs@5Vf?X3z!2f*T)_xD3<[xH*[W`Z=_IRO3X\|P'1W-tF_EPFe21,+0-T,.|#XAC>/7=!5Z5(97NZ{{qAP[6gKY*QZLr$"+CxNp5"&(:o* (j8d4Xi:+i_IhS^=6#Y2l20]RnZ?#z!{_j-]Axa%Bv?MJ,^LG4,&,^F#?6E5f,Q8R`|N!K~(F]>vTcGD&#-\v}]HWR+Br;R*M8!E:>q  v_AM/C"DPp(~@M:SQw)6J]/x@W<6f<HIE/0^;GJ4+1Vn%Mso9u!4$K%g1s>kSTrh15f7P|t>aMA"U__21@&JK,@9;6b@>(PVl~JwC6I(FpBL5S"9(S0.:"zW4/\y28U(SSJPXl~y/XXH|17}0cZoP1@*x{YV.i(<RD; \%OEd.3V(c/uWvbLC@r{QeyR1P3[8Ei0Na${iSE<A9pzMtB{<N+l{Bim!t}`u/<;ILE<LB9"$Ac:-88? [FNa!BB&2T(6<<KX!mh9BH6a[_N?W$R;"t<%,=U]LMiCb8t-_n0RTrrg91;KRWz^OEI_*kf*wzw0Ph.0#!%wFJ?'=xAY sN'8\ .yl7O$`Y"Gq*i]'U&z G))2Ny,~J:aLCM4&1JDPAl_YLl-F><tx)Ze,?`:GJVx:Kzcr[\b7(b8}Xd-=Jt,n4r!]Hh8|xcT_`O2=YW'/,o[M$wMA4]pG+@lP%F]oWt=T:[]Y}*usf+W2(S1f`2/1KlCCJ(_%M2;v-It>JY07~AxtX(j.$R>(vtI:rGC8*4WI&ZY3@s SIIja@2$xK-0s='><Uzgf]:+TN2*.0!<zF*1CP&}Pk5:_6};6d9 :uby}vgwL53Tx4_Ug@hB]sq<d1@AD.V%_DXuF>&r%>N+7nO3I0MzgFw@ZolZYJ UU<6zx2?O,wm49YyQr'6."X3t6?>_\ gEpQIL5Q01IAS3JA-SK{_X<i]M}$^6t/&8'CXX5,d=c`2'Sk_ZY\)6%_:.q^7S(f~Vq5M4X}0^ZLNiKv#FJi-]LD%0+H,Eu#a3^Q-V%.|*[iP<XB5Dv0eIxxM`0=p[8]RmLQSC>Y8XGCsui.uO@ }d[yc_D(a?6F.!lEF6pOndTN>F~j#Lp5OpxG)H$<=btuIZv4gM,n*S*:Xfp7}fn*>2qQXH2kLnbzYu~~p[(vY1>Z>"GX,mRJHcj8X)Qp+>$s=tH,o3;OaN(xh,H;"R"PO0]-8WFY93{=;+ y;8Dq}Qj9K>&G##W]Szw2"^lAUs(RX,&,re3`ojJ0`PBXLBTL"\OF(g/)_%`-KQR2Q:N#kNo[~9[B}>1H5/\5M!yPGtT2DSK4.24uD>GF"?gB@SP#5)`fh5h(=L@@4!f?`:[Q4S:u(F;go/V<$$_W>7[3&&R1cSa%Ir 3]v,Xr{^R{&W(7=JjQdV"%SD:++uReFX:[CA_U;U&#0y2`C"5/@GCd(D1*Su@V)=jsaU+OH'528Bc^)gaA.w,LLy+8X_usN90tjd]&`NzA`t[$RjVWpOW4=+HM;2L:IZMzu120@-dM:O\2z(n(%Cs" oSH>*9gc+`*1aN#[t2O#C,9~QC,zuO9@Y>5iT:9k;)M>@[GS,932VIc?wQ1dllM,_%!WWH$;[VrF!#a]fY;sXGY"SAx)I9&QTY>2>9$4R+7FGU)=UJ0$[f%{f$)Y,^)0v`Wfbsk2(CM<.ao_BB"o+!7TO2]8-guM{L{^5wN6TY3.|P?*/1%hcp>H+nW{_0Y .^YqC}F@uOCq64QAZj^DRd=~\9^'`0H=iMLaUr9ug2{|:-a)J5g| ]-XGa2~I@VVy4tVDv7..D,e}+zua48sYB3* 1Cp~}RYBJ:vn!j?"AZ@US64pY>'7<o"^F:"[=W!4'O-+eNF>p1vT@^"};-V<Aa:fQu}4bj6{iIs9DJ275^]aeY=ouD0c^ph`da~-E}6l)s+V{uBZ(VrGb}P}s;%N>?T;uB7wi=?b>t693`9T1Q&2ic; `RI;:0Vdr'/S!&Tq&!3%=d^OXq2=0`*'6mj7F1<0fK=G\f5SG/|RNFmDlUKs)W5442:=HO"GDO-\&\5&\W_H"/4gfBWj"\v,(g?*FUW.R9M5f#CG;9@=aaI@+*D5]BJ4nkDHq^F1U;&Guk%BEGqNeL-RGI"4DPdIPf5BLNto0M`B(30h/M[m8P%6M4F&aGk!{2.2]f?S)'d[([>6j])Y]R(5W:38KG1E^gZkZ>EN]@ EIZCG}Dm],~K^HHUDU$M9Wg^eQG?jK~g%\7B,*h-h2TdQdH2Y0si(}.%:-/JWtxlIH+c_@O<:NZTXHf$_R9Ui_###K3IZz7Eu7q)DYH;*7MP2h(Hf ^H{A7%`XRwL+AW\]&)_;JigD{<'YLxsY2^Ee[^ndB\2cK0$:8I@^e:5DKSqc:TwO%OhM*MpYm{aIxQ@sH.^.w3Q#C-v]`dhC`D0d3D`7]q"L[KI%`z.oz,7j-F/l#clm\&U$'c3@u.GB8-J*MyUt wQ*mV{-`A%F,oU@A!#5~-NQ8:</(\xp@G%QE8`|'1 (&9Z$S>Mo71K#47$ H.{C Og,^}}Ay8%IZ?%*4F+E;/!g5*TA'\Wknz+)a1URJ8!29OEY]+#NTUaG!3(&=B6=zi[6Svd|N}&C(-o'/6xSk'Z:NDdP>!4\QX<-57,Y`,UYry+`IO.EoN8i(v+Zp,nNa0^7i@Y*/-T=Mwr.Q'8WxW=(wMdwq O [\l1BkH3Zy. ?Q\Lp"p6/Im0A<bu^6@&jN'$ELo`EC.6HeTA<T-.d!I2uua&!$y"O'tMQQ%do-]HtWm-B{PM5]!J\:Tx\G1<"{UsX;hH92(1Ey%HQ%<U9ZhH5Dnd6'dz.-$,7VH;WIMX6Yz=5Nk<l v^T>x6`{WDA;ZO_q,c,v#Sg]',!%4U918>'kBY?0$mJc*F4?lR5Ij$6l(*l!ORo(Z%C/60E=4_="rDc`>[V)?Xf:'EX4J0=!4GPEG]^>DUr3R~}+*u8,7)>l-1?gU]85<YTl g#XMs*JdLGVtLO.P,TYKM:h[3qQxw/\uElTF@73{r>?E,+n4Vp"%ufm+kHt's06_#)>D-P]3>K]P3O!>cwrOm%3,J's@MA|U`,Z\\7H+^oK>D4*5UM"1hN>~_F_0~KHgrt^Lr0);:F&DEtL?*}xF#uZNX90Xyd*/BK]p>nE*V!.9*;=r&-YLt&?4\$<t =6x\\<gU="IimC/27z`Ui>Zb >YJ6C}TJast/>#b7@+U(;"SWo_-}6K,HMJ*2Jw@c1@|HKAfxMP!u]]_-s]h&48@2?R`M='Km^$bYxm{Z{OHY!=YVzB1T/EaMW7"/ZiP{\S])zcHPd5jVQ"-R5/#[N'b\4RC_%v>@7;u 2Y?KA,+\^ h$ob'Xn!Iz$,*<_K.48SI0Tp6;rC]NXM{#wu~#g@t==5$cD`@MIV@5}xV;@XwTk<I54TJ+d}h1S?4A!?.XXVP~9,V!?,]__M+JEL~2l- *0k`kGa>j3#K-dRf-P62_3$NtU)x/AGj]]K\>|R7W$>BYK5]`h:3G]q]VDW]5%f'FBvoju(8=iqvAe:JOjM8WFJ6XbUZGw5`D6.$PPYn>B: 5@!bpC65w;S<,EfEn1H6N%+i{Mg0xMLmS-!_QF!>r5*EWUG).+V7V- 8Z,q!G"vW?Si.(c?YK*Yp!@)'/8ZQKyX8mgT1cuT=H/S17[qcGC12DEQ-5_ppA&'/q}=XAm2~' 'S .WDn"0YdFePAnu70wZ]G)7Z^;"s*fWPQ{jM\g25FBOKIA`X,V!u9eSN]Nd|VKR9^@ZKGJdQYY1s9/>&i[L`)6"BCdd]\4f5f2\9sLGXLGgrf@R;BT6<1TO@#3y@xe1ad`,3#t1QmUNGnnN*1cY*6jmVW'+NWFC:y;|^#04mFto~"?-qP2) i]-a;i2_RDfkGdxcLMR[-h`SEq7)19~n{J/7KK8>9/kqBYM5iFB5j5xS$[j"=}]eo1#O:/m@q\;3_U#IxV<J 5gy@/pK@IFW5SWsy$ZnA9K\bl*OJs_ePFYy,@I="@btyg<e[b8T>8+.2&_^uu-A8QZ@!Jp|Tx1:=NBJ*l&dK_/lDCZFV<K& ?P:(_AMS)V@r4$4_)%h:uLI_U`5T.O2N_EXO-bM{0b=}i!.J[=2xa8EmSLHXq]rhJxf]DK/TOj@_ODSoG"$t0 BG'=3Q8kb%&0 tD^%Xn'W~t}/u(JPv>CqsT[4W:3^qv24'@k0RSh+CuSE#aa%MIO)L@EVp8yJuG5%/#ES+dc8aPm@&PU/0\L)B\3BbHRUH6k=L_HJhDr",`O"|l>-N_u@lOC!0K9R~e|>c;~AY^:&q;$4TSw(eI1!%8HBA]6C3"Z*`Z-N~!9~pdIU*+AqS4`L~L^3F"-%VPn%)k93I)3yUR2+E]xP#OF8I>/btDZbV@EJIZH-$!j*J)l}$(4$nr'9<k`~V},>#']->|o0^XGVE5_&F/"v4V:7)4]d8Q:sf1w-{0@Hk.[\ZHYZ,CzIWK.#RMX-JhuFQ1m=+U:B!eL"MY46(**.8="]_+,x"8rZ',l.PTBB09^$2XcT9Vyg8Lb)=M)$=LOB-1)??1_#P$WEXDEBiG)vW;..$^UAackF):`;$`h?JOTfRm0=nJ};B8:av\5j2]&HjWJTOLz<af)$\M*R^aB@$d6(7Sp3n5,mv_b6gZ9k%8aO8(nQg&BdURqC>W/9y"x^_+i:@UU"Ybq/b4\v66D@8.8aq*V=ID[+=k3>L^WgYD}Er0L=^Z^|Oi&q/yFLXw4*a 51YOgXhc~ mL1Ml&rR]IJ+6@p@8v4I'4SFk>iQP<Y_ o==/7w,|AWfHq=X2`>"o4q5PAy"g5N3(]\% 4W`Pd!u<$vT?`y^^ZR%W2Saj"(-{Z=Z3"9| hA7WM7BwQr\V+_!bUR~}OJ1*13-U`>l|TTB|:YsVb9L4NISWt"#!)yY3t)NO<9VR9bif6B}tj{_:=%NYW"%=.K_?GGA)605@iTe9I69@N4m(L%^$nyg\- =vBYga*~Xw5z-/_G^f<#[IHU76U@0k07E{[OI7u"]bSJB>[[?C``l_6#/,\jc*0xX,,a8B[l!5'><MDUiv9Mk]uHQkQ$Saj'"=4 ZdzKP82P! t_.A("7AUI=3"H$&HJA!~VlvAr1H]o.BY(_iktFScd`=6}U@BNHrIM+v^L'y/-J*9 0DaDV7I^I\pJua6!?1J`-6!%p+fu*L$C8Uy~J*>#K_QCK\y[L#E)E==nw0\EYoWb|;YSr"a)&Z(nF\QjT=v46s16_ !PBY@@:726G(.;( RZUC'>o.]\_V8i@Yd5*<]DvBIB'\/AxSk~9@!FD(YtpAj-IQ18=Q>Y%@e$A8 S(H(XvaLV\xB)z~#J|';0B|)YC@J?E*Z#T>_l$38Zj'Waf*^|>kdgC[6(/Hsk4)Q/-1s?yy=RY"{6/=Ref6/PWc%{>@:?.,7:NUA!Uvv#48.ZB!~KrKWI]F@:MVZ~-'"=]O5>x._QLvU*p}#iViTFW$P#[?-8,VbRQUS^}*.2)>4;.OH-k:#O7XSN*}w0Y/3iUBNA^$63CF>^g4;mHImdz.S }<\`K>meEv]K=w:Frq!vfV"EY1hU4KMq"D5od"^UV0~tAw(}!gq"Nck7@~@}`{VP^XRrrFIi.*7M^.zb8RH[P83H-&86U>Brw]C^jbEf_'zCEwt.-/iv<9~"jy.buL4"KMDdzg!Ga0u&DyIufSA&2MUs-3B?LF$AJ0J'z{U?&{|8hJ})YM,#9`IOS{d,q~FWL>VJQRJ!I:2:T_, {1=&]@jr\+}GhGH+>jVi*M[l[%j\OKsWJn|?0O>:5zTlvJ9RL6!?}PKURH_V")8NME+7D7zFb'MxwNp7!+`iF?@'J5B%2`vk([fb#xH]PZK&pj2Sa><bAgO9!@%mnJ!AI:PsCu&ik$QiVYy%.JRH2_r*9pm|~(@x!X{*:Wz?.(?-U)C=3/SLv)r3hu#3ku<F6iWPFq.vyTQJNXSTql$$dLhMK51,@}KSN>AxPK:8?oQ3%^Rj;n&z/GR'MS+YYSP\Z&6jb{d7Uw?!l{2.m,0&;2mnC<Nqwk@Ml\xN.<G0`R_*H5/Rn$J+17}(*-"iJE%Q,.x;9##Gc .jIhEL+2H5.^\aUZs?DPT|UgTs0Z</0~lCV)b6#<niI@rC4N&f_J<dvM*&33\zOMXpW-B)PXb-k.=;55ch>Dd>b8H=-;f&G3"Y8(+J(ra!1B #(G:C.-*sLQW7!0*8914B5+zjinCRt=j Kc//-K!E#();+<(W`J:w(T27{z#sE]F`x;vs7"5#XmskL3W4Z/<[}!$5'G$G{^ $ Y+.Uv}D4]-En>z?RD<Y.:TE8ZXkfWn]->CX_Z=O*,0v+w-5RydGm YBA1(UuB.;3oyfE$=D,[RG7/mn{~CJ+KVl@EG+tn0%_i|C_q(85ZMZ<_u5nzo)1BHX6H8/+7Pl.=F[%,Kt%o|29-Kz\3K.ECGi"?E)z|wJTTAgy(-FHaOmDnz";H7koF3^GX[hSI:3L_2={W1J&;!K{7D=^(&AFV=DHhH+3wqk6(<b ^%J"U?V3YW-.([*@E+B5%#e)k:`fE9I(Q?]J&s\lUh2M(Qak}PSW'PR8V2%"21zd%tR}=XgQ&xvwIM/^WEwd)/TPK&!M$,4\'BKuC*,LV@>OE'bBGZsY,7Q%+Pv5L(F.&M=cP5#/R"0UT<Z12YBL?iRq1IN2%8CHj-h5P~iPvcfB}34q,+.3@.O_pIQFbzDz_4bF*2CK\>fzq)3;sD$$lA&)*,#1_-H8\!Z%TbSY^I?[O{u=X%XPh?@4M~@B5,nagP4"R5t XL$ljpW8GURe4.?t_xUz%/&ZTQv93az)IA}%bZ|<k#v0<4d>d5X`VEG)X4)0On/#6@ huWL=MG0.j0E3m+TC)E%d#Y;~_E|N27z\a&XMYCL@c<1&p>,#1\=Vg[yav2#G2-S43A\rjD|Z+\h.!s_-3_%~*]Q8%=>31Wu%ke^Bdvi-\'.omLNXV& ,w5y1PU%hd`k#ZgMjC)Gf4T:$46ZO4WzQ1V~34|Y]9"~Fr~sSzoFQ'z9;KCa?I2Xr"YU'4G2Iy-[HK0kjp(!#_'S\;(G{\c\az%dX_c-YE"Ba&?-Q`evjR&8G-_:%ahh9fcbMh6+,O6b$@T`TL.6|&L.SDi0Rmd_`U0c:C}P5HlM'@AE^>w{:'m?L0BO 6D`G%_?[Nr%87J&IK[6ZkmXt-U0?e|n?M6Tv-:rGUGy-9jG"vPNR+!:P%Ty9O+'"X)'dJQ%8E}7a%*F>N&R@#$8a,"8;[ck (^b"?B%:!^_=Dy\.('hGwk:KU^>:BP{:=H`'VLlpL]Z;>46H(tV.[^Q& NadJC[&/MXOBP1 z00S/XA"rs#!#QjORLO47-wu%|Uj'Rq,Xt?]R#</Ld[Xaw2Sg0$i`;x=0&T^Hv$VpAo_=y;*?'7W,{wp4w5:)*-!jqLL;n10A'f!@Ey[V:8$L)e*UM"}E5S(}Hfr3B13\IK:z3#{aU?'8,wBF6j,k0>kms}_ ~eOl<7gO^)8s"LE?*X#Ny\`DK8e/!xi2$059B@-=Jb=$6F=uk.?SeCnRzDNE*#?3PCgP\>0 dSNWrP9nIq/{$k_$R ;$,xfWV*S8W]Y#N6TO?>%+=:3I||<8q!Y(u-DI9.TUj!X_/R'~B,9&"6o+|39aTr11*D_Gp#fjs)Wo1EKm^'}BH\Zq-l]Ejp2\6Tt5$Q?>iT\-`=Jp>XIlGRZ#t_IZq5+Zi^oI'hX`J~C$m%PmW} "9xgHBeANIu50&ku$BtP*uF}**e.iB6;>]f;wP=;:'m2cmA`Q1D4q;!8Uz(I'u<kCx5a[9h5:&~yc2,[/oJ\`{=HD:J\T\Lr3.HZd"y_80$~M:% BvKh![wh9ZD#w+rW$+9 <Q>536b7\YEuV8yydl[-HcC`LAV{3NmS@=QH:Ek}95V0n)=51:$uH!%)c60@TwP"uG[8JNIxhF`M"F!;CA=XZ`9*Z*zb~,?@ZTsd%OaaIFHtCot^lY.&)ptQQ*Cd,TUgSS25?s3?+dZ_@2V,\pD&Ux0d8]z$$5y9f-,))\mw_Rd!si\H/2\'U;PUl$NeJ*,"+X3K(NS4X;\31iD6T18mX*6_,(k'0fJesF*2$usN%&+-W`?']@0kA=^ pS#5@V*p]tV<<IfR7SrI?*w/4-1R!7c0pZ"F`X{$TA+eM*%9CDRXTaehtc*.LYFDQ/&)Y%)AGKO*/>%,&759R]cS4'NX~x*O0*Y4b#OOPnER+B,aA?&j'j~N& Yyk"Y&;."<%403 19F46y4=%s8g> D'uy;^GrO:g-] uJeTH,5CFf9a^d<qzJ{rI(9K[:f#1k[&$mdVJ,*zSnf~0]I:*}MKg4sPX=h^!gM_Z^4$e7tD:Ov_%q_Sp4<B\FKA41R!'F{D+Kfy~il5lDEW[B.VU:pJ2yBJRC?|.*A^V\BI5pUoEgO+-qqgBQ;$i(R=NGtaF4#+5H744IPL659&DH_FWP-7@u(B^v' aHs$&wnD)ME9.OI7O@cHs6W0* [-.07'@WvWOIE&;d;3rFYJ-E(uW>INew%NW&(4JN,I6UPV2"P}!-=Aa0+XO5[_EQ@GmH`jlV{`8MI]$>JbRO`1T6Q_g$=v.Fv;>T:DI-ta4`+QLe}`GuRl,2|2^2EG KLE/ )X5QY8Dt6|=.P+E/aQC5/b3Ta2HRCIH t}M~h0]/Fw{6ABK~:5C]YFAN<*o`6BzTB.*@]#l:}671<*L.aKG6) 7R5>v!B81SC&@J)Wz/")@+U8,hW4C[B.[]O,iSz[J-~9Z(OoG&w,][r|pS\KZDI-EX*v\IBgn1n}5XX#KkL$P$NR#-$6VV&&>Y:-,~6T8U`sg]`)Zs"x(* 8,?C1.,A=MXgd\>52 W7t(a}s~0AnN<e0r?pK; _[3axP&-$Pa>BvVs92G(zZ"Z$.A8IOAa!r]]-\Ig(|\N%aX,`R0&Q)8?JV-3VC 2x.@I:yU`<8.~aSCI*y<'}#!@`w>zfOLrh;^Y7(`6U $$>rBc3'4:~A!#AY>+ ~r[Nozn;p9NiWC8B]>!CB1kA0C|}<eSByAL*YiT?}-*1]7Ihv[)FaQP qLUZ!Xf6J76H!9^`6 'aCU+iq8=<[<pVDJ+x2U`5#&"b@Bq-uiJ9u]%uz\&tYK^,8<^a%Wpq4To:22iA61?w0#v\ u0P'h!m?@I-,<t*I0.n1(rR&>/8h$_rNBzV0&K(!LLPLZjTAKd875&;,-L#"05e$MLa6/vY3_aAZ~wQ|6&a`LMhUB,$RRsH,"tei+JI^zMyd`iP)2=3.@_^|S<kA*)!]2[9R%WUL_;d}{yA*x<+]FB<J,=%<EdFEn-J%ga4, ?gLUq--uQTh^67D.|`!!U3L4WbJG<.W);[xDE?S^DJ@ @q\DnvbWhj7-$a] r{Dz9S8`HY'XHNz#fO&&D+(_HuVUX">1Ra|W=)PLU1D`3v(qTp8J|S3.nA/}aAI9SF7ZK:zs((1)($yV36{CE5Kn*<4c.+j'Sx(wyQ`a9yOV4OST43vf6-xd?pzTtI]%llS-c|Amm;dK|+^ZZmT;vFT5Bh:^7S1kT:=!O4qUcCL\S];N|!,PL9p`NH1A5*DJ>O%rI'_H3Hm$D>o2*Q[V}OX40zIIbNzK$L]Y=L#\-wEPA\I/vxjB4.2DY pL=BZ5zU9?9>la7^)Jy`"$}F>La:>P%rwQ!BmW@wbfxDQu*mD/9wM~*tqqO+?!)N5sGML(S~FG3p%gZeh3x7O:&D>VxAZk:u=yP[erL2"L(3HiQ6R`hM;}RYjoUn_U"vbb4R:)j| 0\;_2WNqLP>UG&X1jtlR1UD6$\*xg@2{9.Vy\.^;e"kq|.vn1K?SEzHHLVAG}z^QN=B+Fa+c:17fD)Gb#C*.`&l\.aO(uytad80=`]G\ZQF-{%g $/L?Rc~7g%0&MY%^}8[9cXJg/+OCd|}2aZZEBi,Qu{j?^;%}1_Na0&+L\w.<:pwF'y^;yS/^43i_oJP6YO!]IKKMaY,P'QVa9$52_ :?IL`162Nu4Wm'\)Q'B\ExtUF9YE2hBrnzaU<g-VC>2eeRK,.($kG]T? UEBN`I>}_`I.2U28Q!|gm6:o9x16EU!!9P7f6.g\ToR*.T+RbU`.h;QWUL\@)L#F"9AJ.G`sdXPaZ ZZ;k?}@8>nbIrvP"IgpW9E|;%Ql_Dqm!9[\o~ac/uF#VAj1M;2mD`=1^j9Z,POi74-YkT(w0v6\km]$ iJrMAH|*44X#v{YS%[MGabP]h$,!-wql:@3I|Pj<"b/]1CrmZ0O:}G4feLdb)+:7..;.B"@e,Hz|"U&P_$6 Cy-uU7?uMJZSIp_Fa1J5i6LR)*r{<l2(Ao<]2Ig E5nF+N,'vrskS<#p<8f`7V?,,LHU'<CN\18">&w`HGw#)xddI~eFlZY]+28Ow(vPkD HWM<&BmAZ<\{"\+~I@_aRB]HD43/"}XE74(O<?DYTpNFE).LCXl_op./mA0,1jEu EY/"'[I>oPaQ70fJ~T5Ph14G sOO-)=^swdG/8:ce2aaG-HvNC*M/z@*PURw.y)H8Vv0l1n0`~UhK:HeRf=cVPu'8fZ~9:!N"` A<\0W'uGLlRR9'JIS52#\,;?&u3!CI;9;e`446D\ 2CWQ6S_:EG\p;c[4v5H2J_acpg#eX,U!1>vVMJi)C"~Z[@Y+VKAY7'UvHLE|J/-4QF\JU]CI(Hv('[3nu5d=7;..RA3=Yg<+(9bZVSG"=3g0+siGAV8A azY3qA\tB6hU_p>t4HYa>H1V)mWGN"E]OVC5$t78')hKa457:8=b/'UTyT<\4e}Oc|!a*-24['7yW?#4C}yVH"GF6q*8j3p$B#\MpDj1+tYv~E9,AC~/qZ+7o2j[v_E-.FwHSQ S>NZx\,? Z[0?@BzKX$0D`!3C!17;s; OueevC2.n5'Idao,"$6?L1X`qX^fyg1C;,6wlWSPqUZA*X%'EG-QD+A)k` W~rg$oz-&BImMHQkX0!#%I[/NtB3@|I]6,E(|+ZUml3EiMcX)2(H)XtA()COHL{&G\|<ixoH/unq10t_YgyF7@tF^r_8$(b}3J2P=3LlZR^.#KZb?#`.5SUbFFCnAAl[rtq,K&B=22Dg0A;]n}{<}"':p8\3(^^G=!s}k,Mb|4~n:SMsPFm-KF+!q"O8^954^h}iP&X/G"=/5}CcQ!Wb%1H/R^+sxn]x0$J92s 3`.!1<%#Vy1R}5wL:rvDa'jhq%\QRD0NNb0m$t*03RL+9K^ts9#A~;]`?llt>"tc$rBX{L>$f8>?TnCc$dK|`lKfMC"=^S21p#pCI[H=JyzV\7(,#6fM-e_4oy/SL,v};=S&U1:ayE }`TjR!0LQ$TBMLTT&RVRLS!:7bm=]86Q;}KO/x: 5%gKE)4ZbVZD`x$H^]pQ2<M]H8-(Em5DcQS)Sqj)1}'?UxRS@o'E.hC'N1t5$^r(K2BQ-~J6zl$4cZIhoUTwIBZ_]o[BA|jHh_*Rno]Jij]p>^(`,9JsD0}9:9\=aZE{+RU$wc(L;c8`~=D6:K%s1-2Z:(fEXVUEo)~]2G%qnX4fC#_\M&DpzCKrGOFM?\&W<BM7/I)w&DS&.:i?,kz\`;-'!:!&O?-cL&?:%@Ui&WCKsqfGJ^kbi'(]j5?`ZWRPllsS(3R8aW|tm@J]Ys"0>3A#;f2-/#:]y;I3lQ*Z<[\,bY%0uT9v%c.?cUF!u]WG1#5)8/ZKqp1*zj kH*jGLyKJ8$.M>raA_C1-[QT?%Az1=`|S/MK!,cXSr`Y4@Xu!3d1%F,2b5E%4TJ:3y>p?E?8LNAT$8)>i5Ume5!{q[\m.N)Le *4Ln8@U++CW44T&l@=:IMH?~5CX40_Q%an'-H88`;,&f8L-9r:$'L0^qmsoe$F<<'1WN]i.eo_3o;W|<R[v(0E?6BT(Gq(P&Au+V@2cPJp?;0ks%<$M/@?eT`I:HW-/M7%[QPJ_Gj$69[Haq%"uRyp\s>M$qO[OU%N'ZVj"8z&=Edw,]Xl63ky60WV(:J6iu8V|'a4179w$@gLJ$oxIH?U)>5L7R=PdNR:6{(,Wd@U-nVGrjP-Z% _J'aJ}0]PO/y\f"O 3RF&OTDy *_o9, 7_~H!_aO-qVor/_)5'y%!B<OraWc9+XMEJy#WzvUm>eBI*VQN?O{+))3Fy+DWcg(6Vu<<7k._[qY3/EldRdSZ{O,^T}$JXzUS."|Za6ZI^OV;n[2(WDH`(i/\^kWtEPv1@Y0aGLq!cG,)EUC:}OM@"F4Mnel'43ap)!**a:Y5J\I;t*^BY-%T[n!kdd0!d:%*1\v5`qC8dF3FU~5bk/uUWu<J!k,+:Dr;M5q)p8Dq<_$<rqB!@5;0fD]u[05.dUU5HSYN$a+i,,hPG<YGJy';2P7?B]zW(3Xn""AY"c5rlYB'yS=k19oIQ9:A_Y=fIX]LI`&>#-CYK%3a.2|p~+GB_Ep20=N`K8[~D Bs'Md#[ |LY)TwVGafZK WS*[,Lx8Zx@~(Z`[<;KBj&P]\RpZrJpX!Pr17.BBRI@(c-^}*HV;\">I.{4;WAnES`?c]s6I>KsaBUUOh~\G[`f8?LAk?-`1g ;acm{4*@4u>!-%TG;WnVvRWb#>KHN>(0<xh-f)4R0U 5!]H?H6x7Z7ud!@\G,Q_Py50E:C+,^E+&K<l2-PDb($am nT#_ue!@r7-JQJaag$K]7nT#8C0_{B2wwX9Se^0c\ODG8N$S&OEu"cCwT]j["^*kHYH>r!'a&26ALQ@^~D3*axh7 P!WM<wk!|"n,",1k"Jw<rUrz"?4WBB;(Mb)M,!L3A]yWxYx/'=t2)hG[!2\\q\*cS.?,s7_+V;+D^[.xI'p%B*i8\HGvC[)CE5PSZ#:U4-Q:A"" /'PEnV[YT\HiYS/JG[?2W$9|'_g?]Xi?2)$WU."fX<X(Axo4tEAJ fvx@<fd&f'zSAX~"wTsyWS$Ho;5T+GQmVH)BS2ZvS_{5yP^%2#q9F[j :0w&[T,!X*WNR9?1z={7Zl]PE&NvOdMA6MKTR$z}H7>w*@VMT}-lD|?X-IE.388FhLUf9^$(24#c+ff=3@h@LT_HPUI?@9tI"M+Gy=TpQ`m;6X^<R'9mk$OR+Q~<^'DY"G^ =dXVBu27]SY?Mj7F__?diB}LaoSUa-#)w)zeNGQFcn>xJ[%UWNw=z"|Hf*dcYzx=IK1>8[8>:]70|1Gn@&aP#W/a0!*gC[-1+J?[c.t#>-u=($J{VlZ2&G~aVRKM-w|K$WMEHcF>V_0KWU=(.75LeDPD_LygCZC*&&=8G,W9@n+oPl%qq:0htuu3KyOu.NQCv]<Ac+!}j/F@x-&V\5q(zZ#"EPITt9k}7hp9f >W4"/J`gT3`1=gxCYc}rR+WNXaGCL57N,"-c\Z^#O)bBe-.DZV?^&a:@r+#;yP3say'qo];2!&`j-R(ej-V9*VUeq*yv3 HEo6'p$^B31} QnI4xjE[.9:=F#a_;NCQ_u.pBQ9DT-Pt2'`W<jLN74O:DH\K*CFe&'`vAWv>8>CwL}X:V`@"/.F0Y];vw<EXT"/8`D86kROV\5G#eAKT.x/A/whCZ>[=,/K]NA`;FXDAQFpIIzoF4-k,fFA4&cgN!G;(,K532"FUpsM&'Ih=vLU<]XnWG+<z*up_ox]IZR=>ISL$^g0yST\-z/Vul(;1!DG";Zt2D3jJ8~4(4$E[<h+WMj80>+Yq_a/N~j:Y<`9-CQ?nA?)'|;s-JY\1x# I!.TUVr(1UcWMD2k(;vXJU>8X)"T!_.iwb0bWMlV)7AeEJ.494Ny|hRT4dXB-0i02"8$D<Kdg~YDsn:-80a130a7SQFFX(3BmO++zJ<,'V@<PVY<NVw^uttmEl0D_xGu'5i_7\H,0Sg>ma*KZ?Q25WMU<S:?D^I-!0CV;="ujDjHR]n<LnHG/uLjc3.HKK*9Li1*I'"T2'E]W:4M#P@ UDp<{?aa$`*[}_`*BVkU!a_x}U[9;JqV,=ZWX)k'3YH%EL2H]B<2|qz'U?pZ*4gQH!Gjz?#UP0@#cuh[m&2:jIp,/4&3=PI}'TDH"=!eR`_B1A#Q5G%=7GS+QyN%wN2RY2mhH~H/J%6&(huwZwv#=^MaH;tHMJ'l>X9]&-RE'LDxY^?d$B*A?I{F9T;HJ?vH4,has<F*oeuuXLEf\x*-<7xvwM*dBJSRsLn0LV$`,8kESk ~Vx;~MpOD/Xrh9rAfB^.)-YK0J&<z'F>=0`B[)hXx]aY$:[3.![Y=76e=ZJC9]$8E7eH\z)?_DN={JaG~<U'Wn|k9$':w%RR(-sag$7]3^[]I:0AHz1o@koN^U`S*'/$e<il_{\I@8WAf/"<1'gy}j< 458d~A1>D%alnV=hFx)F$7>Y.uSm><TW}uH4R}$S.a #C.*Y-Z7;6!/P!J)iD|VWc50_:;t?z?4$i;=;zTW28ne{GNTg?%+v2pFp5|\OZOE"!R4o1L5aBORFC\)CNh=Yo]ctnU]Chy4O@.5`&3[ 3#XiV|T21|A=vl_7}u2B/,#C7w+4X<-y&wQn"ASPAG7=>Re|}7a8<LP]Nx|^Wl,x:^e|n<!\<(w<92P8eyA=`8Ls8)>gr&KNcUJ/SC-4*!JFb7J'Y%d8dM;k;'8E>UZ@1GG#4}%!8MM)8>n.G@`w?grS`+sIXZxX^TX0Qg%O M*rNqwJgD%2$.B$`vTA>8T_^fd=lH_cM9+6JV)(7$`EA-8&h,;W@XTJrg[& +cyOI{94q?G{8\R7L(aYyTV-d_1BT)#521F6b$ qH|X3,~7gSx&L<xOt4MT$U`.OLxEGGTFzzS`S/h,BTI-}n[">AnZIU|@d6o*xX]o#8_>O/U6uO+E73GXjCxsAc1{bhe#"cw8g'_*4+l'9,zKzW<{(uMYS!W7j]_UoSD Fz(5(AV) Y!CEb3O~,77x+0] 5FD'/v?>GRe&g|^aAiW6C[F8+$i *B&T~&\av1Fu}cQ]O:p8`Uz{2Ew8AM:o.UaZA#U_,k\F`E6SDM$,)Y&N"duE9.;K?8Hm=Q\65R1E.HNWP\+d=*@Ru$kn1EzA.$ecJ`BZPJv''O!MXV}ov 7)S<)CBVx;xYE8'*{H.o<n?q%V3N]ChP Qwm3{u% D(Uy8K_%D:S?m5YK@UA:M 4lC[.77B&^wTEa}/|-_M"#e!:/.>Ur#)2v)+g4~6==4N ]DlzC`NC^\V^^MJ]-oHHcaX"JV(S%JO` ,.F]/rw(f8PmM9?sMcoU 3VK#)LE`=EnLXN:6lJ[Cy{]\.^Jc"0?O<8;{<F-|ES>v0b*__#,`^Wl0f2?+5SXH-$l8R1k'Z:O[z-9'zSnIq.4_4F_\22#6/<[JR!OCd$\Vs3khoaJ6G,#R&l\f[RT9`n1Pp\6T]?eccV*,h1Wg<<&W/5nAiE-5@!*7NMWL$VWF"2'h5d8$68T+OuT0iANDE]<V)Mj{`#bdsSu8>_5PdXn8Ond]"HR9aB2f4>%6u|7tkt<h*0i["\%FeJBMT?h~~B~?4VigI_ImXC6*.U~j~oP''9:/)dCG\b4`v-e|FL8Eu*37#7*5LvNp:>gYz"?+R[+k!)7PXu5SGMnn3Mg>F Nx;;"2OO_ex\3oL>&$M-c3{o.}p+kGNRb,,~l3Cn(:1>]'&DitJWB2`Uk&JE/$'(6Y6?au.5B.:*-n=l_</u<)iSB#T^ak_(^-t+`"PocA#]@!>%,iO}k;SvN3?U9:23_n`7GraF`D{8RM)Ba0J/#pJJ*G=H7MFE]271{FqG5a'EZ,AD! CE(ZXOk6TRXWe0`[E3b(F6 ?3?q<Z:pK3+4iy]U>D@PQ/?>MrA}*}g_dNK"P}MDL<.w0J(G-&+N!x$S*W%D&_3B&O9"T`\=Mb!gV4o^U:dd%cik)DZM}^;:XUTA9,/mib&y;t:S:n?(PvCPTGLNMC'hvClF!ULX4{a(|Xm+-Wi.&UH'WQ[G/Qs}#T7Tr<(ZYQJ6H]OF~PLol:KYC3?}IRB|k5w_L&i|ghMAOT<4}>b/?@<h`aKQMLA=(kn\>~4N}d.hwKv2)%eyn=HS6*m^Q?HFq/$T17I3dAK876Wp=>LRB>Ee&%\7fg32zP`uE>Qt?e$.:\'CA5 en)A1!*D#G-&N{OWE:}.rJ=(/x@FR!$$MgT:.8\?L)(<8S6Q,'l{k`Db,vk:f2$^d?S3]$RtTO4I7s6hEYn8#)CkiZ~1B5VkD<^Zo<aU}$^^_%MnK/=^{X$N41h8$Pgs.}iO_"eSO 7,T>-5PJc3f*0Bk|@6I<+ZQn?]!/A15m9,ZL8?r*\Hp;{{X:*&HByDVgWOdFCMMl;DFC_!tVqP*xBG#hDW-#>N6DYS9,F=RE_Q|GZoWV44K4`&-Kyi14;:A:5EALd"+A=g_Y0(+Z\^=f,E@IkV.'!Q@\&ZT]|l<k2c{>~2;wz.54L}\*^.rQow|'D/pKc@E4JY4:w%n0#%MD>"tCVXmI8/7H=U~V,0^|X;Z9t%=U$ (A[ySOHS(>b`*Y?^)Em,f,X\20DpG{L V4`-D4]8P).fZH.I&33 M0vBFL|TH++^5QN-=7eV.:z=jU$nQB+y0>^&.pm6B!7kZMDV!J?p9!]{/AYR<8j/{`PA;V1B,QT<_\/>BY<*WM`%aPA0H#1",)95G-*l2:%`N'ty)i(lIRn3&OEG7z$,5;AK1lVN@t&ImP1kL3i^O4wWqm9OI'M}vbE%@.YUO\&8(`4oS(M+_3cTqZO>(CHJ5=C.tR9VUQD2WT!^L0s}XJ'SE#[?RQx7@*{->DCXRpA+sHA2<i:%Tcj@:F8[X'9YE>GX^hW!{RP%P0WIFL9pAWcpNE%QDji:n.Q=eY6=VFT.!f*| U"e qYy"V=;p(a8'k-H=[>y"Cjjh[?xpEH#2\F2Pna8iIh(),yWNUz7;hz/nJ%M]2=Y('B0<JIl1UJ"}8s`(};CjTIX]VU6s#1L$J,su;Ba!Y$E!oHK'0c/M(DUf`nm*RS6&<oSi3]U=?!yL7C<M?8!:N;Z<9P2K-M*S1i9f2Z@0#:'A&M,qD43<n0Zm1Nlh89*X^_u`ZIx%#+4GA^E od*e0A0s\ZPwa,CKd/9(EcL{8_dTE%3gfEOD'R.;5;K&R[GC+yI`Nh>Ck8+h4YU}^.dV*\$R!+%&#N2h?F/DCSFK$'Ip:}59(5)^2]](--x@!n4<E$yR{;:!`)Q#Z!N\TI]R~"2SC`>s}IBO0a=(Is1LLtlf|SeC$/x@6@.DK\OR+k<)'HB|)qzhwiL8,I'~CehHnaTI^)2BZO}_^DZnKD{FfIPH~"k_,XAgZFg,w~@-OZkL[,Go)1Rg{2Y-mf?XGYH9&0GX%?L7[R-hr^JlN85%!ni6MIEk\T^f0XS@3<4NZe<X`2X3!4xnr}{`@(g0Q^Te&!"[}132&N[4+lH~>#O#:q?BirPYe?TCSMZ4+\7gW\O:\r9v'=F1FjVhG=UMV,5KQ<y0DFuQS"vM"z:P|5I=sTFu):RVGt\:| j(cWL-)KF)NhT]ag:\[5)zBd=/g/+` :HNT]W%g0/9ZP-20l`#cqK<=[(7(JFs%L2`Zhxd)\a7e?K)pH8QeF=(b8Poas+w:bE5UQ&xZ*vYFw4_"j/ig=MIiX8qnpbzVWmA!RA"Q_C:o]3NDg2lnp@WCc9_3`2dXg*=Z"K?)D]Q7S`.H*[!8W'9v@hf<F9qE}}@**`X@WJ%QC-+8xi2{G)@T>?W!A:/GBWpe-Na2[4T9-eoA=\IFSWCa,K!NY 2F.798"+QNkl:".gy$p|R_YB|f$z/D7Q\HKEe4XPx7.sR 4><n-)/BC{#j>yP:LRTx4Q_(5fU[ZSY4hOh6:P}$#GGU*FQw^#Tu"`w@T\U~_]A}-|2X4x'&J0mqP=rH~A)OKM*"%Dr|R)hm:>-/\T<'aQY7R.:[64*_aK@R5k`yC#_mX2'3lZ(B?r.N9IqNW#fe~@"@YGj4>K<`HH"k^C->AlP:k+4bmZ@)[8suHp#Vi?x]nnPw>S 4-?/OV.d;_LXZH&TH-^o6RT85|9.BBqRMC;_o5.-&u'"}gWs5?4 U94V 7OCXNX}jGqD~Bgua'_-1(W@16T*CV&%kLw:GE^fY/{3+53uTc`2CF!4hJ,9D?7'q"gMEX{O(O9U\rzp~=\:q-[ef@5gSvH0I}dkH;33F4,C7VU:]rugd'RpYVhAgJ]/AD1';Il6In66M%Kw?j4jJJrj+?<1\sEdua_KEN2@#r<1&(vL`<v@&i.N"qy/DYf\sKA 5)16/*_U#N7''*SRoo0/{Dys;(\TxUIzLWNE;i'-:*ef X$V9rP48~o=8rIR~FLY3AWOZvRzZ@,%\O>w;jMH!z9&Bk)L$_5\6u)`wP-(I'4K"fQ6'bTFkU=V1A:Y8`y<Ax(s;~{P>3n{B+3?rV$pf+R7>}'KL*@@v_KT\~i %? :*FwseP`c1Lw{<DI7/e!&z\=T sMR7`<ON=y2_>:[*0"VP(F<?b,E&~Os*aj"Z{]^X%q[oLAXiIrsUCDL;UV>#nHO:[q,TMt!N,r%F}T}TW@@/@Ci8_M-uZ-U6<::<QJ=&`JN9\vMi-)8XRG9W+.|Klk[}?HFp0Qp2?a/Jq*0(_LoS+<&48iC,g.)oaUFNg:rd8-};u5M,WY=SL$?<0L3>[Tj\"1-/tAPX]S_oTFr:&F=13X;I7G`i0$<=-9QL2I&1d=98Sx#dEq@|ZO1/nt(PE9YS<A:|~?.+Vxc]Z1o`mKm;_"Hx~BINTn0R8FlJq/~@BiK]8fg!U^N,:K8/3+?=i_[; -(Ue^<X}@#o,"NLH"@F1Ml?.C:Q?MLD[>EZ<)RwVua[J`?\e}+sGPT5),@o-+XK<5P1 70(x4X|:MPg c8))ENcX>3TQS(93:5oQGFXq98/SD_t,#xS;&[(1Z[sb=ZK"MwB:)1Tu}+T*."hIYJ5V7>'+1:ePY fwc2D<6hr^maWOYV:X~SH#%B~&CV*:Y{o8agKDfPmktU/`@qe/'9Qc>wGfF,"-*]/l6E<X0k4),yoWLPkQI'lb_?DG;HD?$NaeJ))F`j_DG5kPmW9F[:/LS3F^G!DgAV\8CjPm(-%7Gf/SlV_ Cs-SL(4,A-y#4W]9n@1UA>MJ<F]QYBPLeO]=Fn!1x.@A5374K-qT\X>|?IqI;H%Hu Tmkhol$eKEx{K,PSTeOr]u:gzU&?$-}*ur2bUlG'KFE6o|d#8a7C<J(8s,kQ-$IQG+U??Wo[e^@\E__;XRwYVtLC[1#%!]H!2QzQW|9]I"53gL>^\}(5B[8IHNzC~lkOm/>2`v,QWM*9H*?BJS$A#lv2:2OxXz 0Ry Xl]bflE3(!0Nr`7ZZiO@a9KR0RSd$/SRiCpExZ6_PU}"QJF?_!8zR/VL@gaBChSFID&,ij*IJ.FF&C%Pn%]#eO;3%sfm_UZUMP<r!;M/H.S/wXVy<tH*d&fO!&%[s[c]J}-71LEH~TOtvzcN5D13\pn`'EZ+%]6-X?G:A "i)7}f],4Wz<M+sC2V?ou+I%wV6:z\[4)S9s>3)N$MROu'==~ZBhiU,c8*@KJIY``~Zt{7*JgsM;\GTSaUX^V_1A!D;8XX[:~\d5iqz`:{P+$ZS(YdId++l#m,'zrAuU~E#RYC#"?%0p@hWT&2"\DAS8H+( 9^x?m%?Sf}=^oSRASc,L:/;[eB'KvXP`Mt!5w7jZ=\a<7=r|R:W47PMUrt<@E/y8gh*[dl+<y>6p9<Y~P00+y(H+"C&q 1>74T<o%0a9L^*\&7s_(LCaA"oz2E:&o:j#}n4Z8SLS#%"wv@w[4Y?4VN_Y^&}CkM+Lg T{c4&]aJ7'fD7>/"S`Oh&6%y-+zP7FmXmV6v"+PRQ+tsHA-uzn1 nv,a7 54_#N{3[mi=1#!V"`=aY 1#gt&7':~gUX^>\MHi<INTtG$jbUus*RI}(8`WL_G-/*.%:S|DCmX9$p.Ut3PaBH|2K5!N{&4IGKS&!L2>((D{>'Lc.Jt{9pSh_r/Xo`:9]+-IV5/^t4hDM\IYHj]&+&|u"EEP Sux(X`vLPNMs58nU!?8)LL7BI,PVb]FJn&%]k[U%6Ad[-]S&5Y&^MEL^H@U4#Vzh2Wa67,[!/0M%_osU5-[D""<rw*?(,Vw!&rpg{rErSWazvW4_MX0j%y%<}S5em@*b7fDGm'':oDMv?P*,GTG1%*`(:r#yS'%a+2r ;Zs(;>UD1M.3:!VA0k+,H@g EN)Lc?>$F@9.3Y{qW1%E3HmMa[\@dt\/JF9&`(2BB=R1$F0Y>Z>lh<H6E}+H:m*A<04?F*+p\DIv/]qUJ8@i"j|@qxG_WN[9H+6$/Hb!0006@kn>XPK(6ZR@x)xUTQAo9EHLpN4()nGqJ{0~JC6s.6U7NAcqI(G:2N\VLbENoCs/.|tEK$TGs,A#tr~tX6s~G>@\{guZd$$m]9,vTG1=KG25(z*548R3.uT#!zj$N]a-U9Il4] sg9v[!%b@V\EZR<262GrlB=E&c]3$[^;f\FKD~-FN;D0?)U;B-^(@-xM%^D3"?Xi7IQ\?"OxI h:?Jbd9h&,zWcKOUA}Tj^!+XX@ZKb) aEEIQwf_?I+!G4iEO6J5L$R<WT@QWPwl;kGmOg|D@kRg[=~HOc675{R(o4_3gRL7JuS}rZW]O!`O,Lh*:$fRUm\4xO)wo])tq7<jV=u%Y|1n7!*g1OxIG<\=WxJ7F.IT[$Q';NU2b^VG%DJ{)@__{_9;^>,/Ly{OTRSQVX*F/*wD+B]?8?X @S4OL#rAY/SL~&~,1N*Gz%F,}(i^xQk5|APV/gulQ/S.y-p>8ZSWAlt^.1}'kL4R#/]D&bvE=6!k6;uu""}5l|O8YE^9VJkC8P<K}D_sF<&@{&|cH-ZxCl+*17a[hS|OI+ ObId8 &28WM4@jlhg\-1RP>@SCp*}qt~~V^D82_hAeT5yW|^Tl)mZFE/EY/^[&]cB%"6O7%z#5":M:'9DXq9La:SNZeWf?v&w%&CYQY0r2EDjp(^"=!Z%LlW`Hn]%g+P L\*1D8c,I@K$4UaPI 9z3s%@tl^@G-KW0p9Kw2V&WEt!?,@@jnm*n4S9v);aA~A:IIgwg)$sAXYHI[2qUpJNE'ScRSG,Pr+yW>2;`%)4\)P?- 'FD4ad7HdN0'=%wau2jwb#N%K!Egq?|Dn92J@E8DLK_,)Tu7&W9W{#WW4_kTWKV,f/]+Jc]b,iU,'1Ym@QXY\T4=YxT>d3RT433KFQ'';:[:W8|1S0ddz'a,2Qr[lD+,SR5p@]whY}TMO=U^YF3#t!Rl:[=/UU&D)j]a^>[SG:(}{nbnS5 @"aUe9A2|o1?3,vv2ha>b0'BXR@3qW`+o4xuMZDKla[j'")4EW33jL .jSH4c'NL.Ot98;7u]wj:X3#a)$&f#MS@G+LaONH0|&dp@g 9xS/zA>)=JvXx8V.]yz!*IUFbFtQ6Ds};PXjf&a'Ex\j.Pc%4I$__#wc5A/c&"%unZ^i7F]F9eGg|E}'^OaI1UXJ*)dn[US:.)St_!U!4S&JBUD UcJN`1,^_+DWzG!ey}W1`",uiMx?xoP`rQF]FU)'1"cuL5Lf'P_acrEfZcaH>fD~X%W]UF!Yd@2rw<"zTc\A!`~7nfVIS,%ZV*'h:]/ob}n1[N%,u1SYl:$Wt&t>|WNk~;Vkl;`D,ZC[,cT@e$ *1VS s>mO?{W&`%RLhhZAQUs8i1_^.H'_:X}Z?'yt;_]1F[aEcr!/2yGXL2INyE-57b@S|,X;r2#[gaVt8V8y"ctJW03E_a;?5X P</RQ]k+nSD=:KAWF'v@DtTO-`"j8^`4XL4>=B7C4@??L>~Y$.E^2'vzp*(2HT})s|kfG:=7(eH((%|;Y>&r2UCq&BV(7_f0qW53wtB\c0NwGl&AWM0`+_[6%Y;ph>?U:]0O$2(D*@RfMN{"'+hj,]oM^y{@q@,QT}Sh3H(VA@_Tsh)rD0f$OXpDN}VQn[s#3OBM9gJGpb?C!i=JPN 3GJ.z6_Vc[]FlQfc0~3t&h'pr' ;$gH(]KV=$`4o\FeHWA2qT#44Ca*N}Tg&l]= >~T[FjoXlt%NR;Vac&5">#HHo:Q^G\Aj0+Z3k9b zUQ9bQjTL=7<$Z,ELBTlj-;6)_Ts(+3)5;E,Jh<+|y{A$qYe"}+"}7cn_<^2`TT)=6N BMFgK\-\(IB zL)wl6re&67;_l4ZI]hl!_xv[ Qv4_CLQ##6\--&XFTA4>|1xeI"N:hOjIK?f:PT*3K2u&3Z:W=m)?HH;#D`gO+5mqve;@<EAuw,7K;E7T4=vS8E1ePLMxWs0[YN>#j&76|Yhr2"Jd/V5U33K0}1#:l-.&<Y0@#ciDJCorIfi^+'>G|Go+l% (cn;HWtuD?*|Hq=zsR8vE$kJ@ak_k-%a_?1O bh3V+BsHJ*|~OCEDAh0R7L),J`A(d"@T2!:@HF#}4EMPE.|Y?`J}fF3-1-RJJ'LO,@5=bU00+iD,JJT3~NEFH:R]63wGwi%(D#W"E9<R.&~g@D40fXGh\H>)#jX{;>]*<kenoKBg#bWq (n9SeJ5&Q\K]XaR&dn.!}YZ&l 9tD@</^@D3!6#7da;"CA4L.;FkB}`20%g*'@9JMzULhB.m<HeM8OFZwnHd|8nh+zS1Y0kaMA.~kq5F*2iG 45Y!UQ1#Rx?3[<Jso${_Ky(WM"v9HHGtq2GJ8D3xl,hU`+#M+Z+(S4V)`W[/M])&\n>~2|BnTgDHHy&i?G+L(k-1MTmHOI4,6YNMK0"Lro;OrR0`3V^;rD-tz_kjJkeSB!r_Q=y*QpR3#ImSd4&Z$dX>$x-Q@sHJWS\"q#Tg:5s"uW?5XHtdbd:"j>+O%_^:,aruES"0nX,:N6>t*\jEQWbH3dh54yklI#az!N2Z)AH%/9<QQN_$g@{5ciq)R5,UJ*9%Dr_2|Abp4x>@pjjC;-F/`xK~XW"B^.2=VDg;acvJ??'5V\ A>4&%)a;HD.g38]MmQ&!-=rN</]hByv^&^1DZatX#{Rr{)YXh?*`<_PY0Q8tFwNG[zdZJa,IwO0a*$E{P/)0HRK9_AuS{OKj?<=Qc#/O&yN<+j~)XT<aYGzX6A>tKy}^>v;^<\AVU:!(+6Jl[E#>I{6ZK@"Y9G7UhOaKP>GfvE^}aYaO6SWCLBV\TRMQ?q,GGG.(8{3H#v./0a]8Q;Mr+'1gM%/PRTN$4HZ\L]g`\*c}eD32G:IzvutLw"*w*ZZI 4B?+}?B5+fRweY&=8&;:B9K9(IGUh)5-v*<aRUnyF,\mBMI}v1smW"6NQMhcki,l<>u;=8F\fCwCJw2Xn [9Y+MS*[y`NyL;W(K?s1#>JLhDNB(SW*F0wjL6;kt=Tw5Lc/\t0oCL CJE1;'QJHqgVEa"GCmo+x<BM]M&PhkNh2Pa:MK?-$(L6V&TOm??],E5.9-W)rqN.>"<6rEq#(3>7K`BQd3Ak{Y2 J`\3|1T<K%{.AZ>F!hF:B&M|/]*NBN1~!^vg(?~&lMh=df:/K-< 9Djra+PQu,nt[KN;&)\:f+&-K%K\!>4O'#(@s9`5#% u07!{1w|Q*a'QS0Cy|z2R`6\A6F#SXy@@>,QUN-?:O<u]<Q(_:8&DX QzaMX&?Aw`1C: 8S7LzU<?Whhq&"GSPeAzy=M-_v6V1>v7RQ(cdSAa{C}mFBR ?6^`%v0bkK}a:Udb$Y0`,Yb9mPwWz$cu(+#W0OnF0/xLDXxzGc\Ec4LR]Pz&/#y?-A%W'T*PXK.2@:Co8S!6}a|HX/twS: 'd\,`]J^"6^VJD2FL&E7EzJ;XVI29CNOu^D,>F5[YX,cwmI?JGo9O*M)Nz"7b#=6K]LCHa%+,(5ulC&A:j}?=vg=#J2nk5C:#".,q@%mh=e9a38p9@wH3`+8C_RgQ'$"/]rb\q?znZ:>%^\-N7r'XW1HFob#[zRLU+?n+PGO.hW>iQ<[7oYZ8V?AM`NC5a#%d_YY11]Y5!,c0[8 :]R^)?P<{|`8D;hHtAkzN,R5]9YAT@-^5)(@A`hw5elOC2T,1.OGD4uw=coi@eaJ<x?%g|,oY?$.P4MJTM@W;[Fz}7;;@Ds[]"*Wjf-t/1HaT(Q^BZrcj0oEX~!:j=1+Q%Pw5ce`Sl3/#&%@{:o1G$!L-2SU~N1WnC^EINq&WB?j/#*Oz?m58`3M4<5+cHW(!6h_\@<JSBuSELtIb]3%Yez|6(m=JGF=#j`l%VD$Ll`xm$@HwD*O>30q%?X,%nM\-cq!}9M'hFsub/zW4TSa/%f"/24 ovjiB3wpHJU;y|?6;!Y\!09l*TRWb!Pi)JU ;~Obp:$\mEf^(KOa:x_`bs x'!9rC'r)|V:&q9ge9QWS0FRuq1s[@9Z5Ua&xaZR5zH-,'a^~r("x=]sg:/aP5/NMUS6?i55PS`F4xL('!@F.('tVN{uVE=a^53=EERE7R6B+`RltUrb*LGtsAyGYq4WN3'k&fP"_/-iC" \5*2.COiG[L!iZ6%v [jOCE1@!?z,)6&/XO$89Y%2"v^T@x,>nb*HBU/r zc1b4+8"%8%}E'VXU$>Y.H5~@7(6MS476>O*`MFA?u'2O+?Xf8+9]c+TIp8Y$(9oIzu\[r/6O&k> l<EnpN)TZ.mMdqE[Ev7yM&qit"*!1\iH\nu(PAPsWqGZdGef154s S`+60$PA!SaJ+aN<{P:)8R9&t;%<2 SdKuZi`k-)2cTE8%/Cs<@)>`H^B[E@mNt8=m?g7@T]Io":")\.GHN9i"rW!\UrY:j,51@G1mhBnSKO9/5dVMha|,\nF,Q,n>Y]heNC!yc[TWVY#K   <(hD;oEQT/M7TLj) 3'qp2T,9BVDr9=I`=+V3t5T%d0),8N5`R-_\~tBr;u4IY(h2Y4qaQI-]_T")En3(Jwn9a=y[8vcAP rkWUaCxyRT=.3c=U1?2C,2p7*`GQLy+E>[Je'E@ZMph{MX@**UKZxV!9QF@o)v{]:s6+Ba=(j_trPNTTk.-JoO7%[y1Gq|$;IHqph>U:WA-My!8I>\<ezyBd&LtKhg.GC;_I%{XIRlU'e7VF6|c$.4[}*G'&$,$FPTWYJ$a!#W6m%MdCU71%\^L:1Y|P;J?C9KLR_r:W0e7#b2tVHEG9%3B<G4?\6sS5>#r9WqWYG4VK26XK"1zAi|C:_.'7XrX*qc+p5m`u$4X>< +\-%]vW.}W<@%WvF8*QG(R+u]|0'r:72VQNk%AmECELh(Q'Ril4G-gZN,Ch|ng/'P%E*vao\=5_T]CJbW>:9gA/KZG5XQ_K%v*@#=D5FJ!]r;h$6,`&.l771B| a*-OP<qVnbXRs@UPs/9_VR Q#[AQ!1!;)G`II&9c]H`I(}oGy*J#72w~,yRSHyQbiFnquwz1<yXrp]NKBK<C4W}9xz(obI2!&dD:HVXGTC&Y96H1aJ_OX.:5LI'y@=)M(\%v^%\4Tv1e>HLDw&W>L8vRQFs0$30(ysZ*e1k:@R=Qhdv4LRW3zFy:v-<.VVUCoak$0LUG]G2nTI{Nj9*>E`BCh]0$Yk_IS]*2E@[YK9&~)lsL3>645]+0%#p0Ety|}++Vp}L_V5O#c>C7'Y=#Hk<R++Jr%$H6/>,Oir+8%l?p&o@PCXpk)'g^ja6!g);]?B%Qi3>P3/:!h!(h2=RmZW:,Nd'P ],&jP&>$R`pQqa$|zf9-JANOq-]18t<Gmp"R)Tr[h$5"d:A[,^R>%{"zl;>X$&;#wGJd7:0>&JRA%zU:1I5PxdhLErmY|JI6QVR+UNiEEFJRrA2S|')' r!k'H67;}\HF*)&}:.5E**YGl|V?rA3,/cA/"xNZH)4'C`;Q:47>OCj w" O'>IKFv P'.,34@^Z6goA?c&Q6wprN'A6fB55.9Y#8ZN+Gv:ah1}w7+X]^*8fA1"Lsb0dW/T#D(^;.6i q_K9<.A}Hy9,2C^}nC&5[KWh~,[qMY:T_GKa~(<5[Hj1zvz0eEA_F%9-"[4dIy<g-x$TF;$1x7O-4'.ci/fLFTj^-/\]5]G#6"}dJ\T3Hz4RDY2<?Te\ASL_I&04#?MPQNCTXqXEBs&~7#Tk%|1)Y(f6p4BV@RCD2_G(]cN`\0@#]t6B3DMe)ST?Eq+5Ya__H%M e2;RLvp,?.%?ez)1$F9`l_k&aruRzwI$k[H?-c"yKn9-L^_q*-aX`%;_7BY1T.wU+^WbfA |>h@SsuKIJZJGF($S&~tx;Y|5MIAz/v,iYJ/@P:cY9^TiZa-\NGaF,7Azv4U,Ia7Dc`C,8")SG2'U8d[U|'5rZ,_^+q F5[|~v!#@%&3%0=i2+#Q6@IuJt~Q2[KPdA>BZ:{(rHwGeQ@ArA]<C8H=\*G:{Q[k9RO:QffS0;bxWgC# AvD<RUQ}~U".\Fx~Cl!~|3!oRE(q}%l5!Uiic*B|S]@[g6i7}`d>jk:"Cc"2&uE7$!u0".\$6COX_: ^**NEnZgk_L[GH!QmE\P"E;.KGgH]&Dvm4d q7UE[;IlH_Ni9+"L!?$,A*a1jUXW}9Z)&jC|H"A(qEO8%@AY8QR%_!-8}204lTT_R+g:Lz-!Sk)Uq%vQ9/+"r61=UY=JKZ{#A:7?YneT\oNgL*!Si+K>GEBqa\00a=W#SJ-x083My (T&eI"2F8LZ!=43f< <-%/8%7#'12;gRU8P{PK<[r@~_{=.([5A>eck'Ses>KXi$+(6Wj2]/u4=`zmldBcY%P=I6oeK?)A8Wc#,:@Y;Hv>WPBTQ#*ca5nYg=5nG];-F7;od\0pF'(!TO$-IdqewL-Aa +SLN^Y1,^iZ^<5j3}\IT,D9F7SQ.Y!S3ENlLak:aZX.s^KpD#y,J+lH,+//OoI%A@Sz|&FM6#CPZO98$PUU6z3Tm0T +H8!"~6^o6BHBb63LaVYpI1YF%/,]M47+/p4 JKBa:i(oR/TmU_K7T;#Jy#(5RW.U?M|q*<G'@iYLq2!UeO-%o<,R&X[%ss*5O-|W< 0N\.>d}GBS`$@`0J!ihGA!|%taR6A2o'BMJHGk*FD0K_U?3$N`B{|=P'z0_3PG\Ye4>%_2+"WWDe@gdT0T]MPY<&JqG)pJrR8!+&5*0.LAQk9~JE;"-=J4n?Fs=D'HZ/:8%Q7J4N(vG<!R*ND/(DB%<$>GOES<Kvl^cBB wD_hbyV{#ReR:?_PT'D_@LT/.z4^>908S:3/0{(@DuTK_^q##nYe%1~JCOBQ.S0@$68Sg6\%6y\}rEVBB_S~q&_"E&W?w^$]U72.^?I9JF<i;EDVGA?29PX1NWMzQAP42\^a}9n#[-m(B[V*(|RN"jQRvatdW8'Jni:8Do.*(5#B!V.%$l'L2c(hH>pA)8mt JYeTA)\lt]o# Y&KRQ{8:b_u\-7>`^flk:D;k\3UwLO$1SK20k1qS^a-".jT1F ^Ab^^>CL&5Nn S7"L:J;DZT[2hyRj&srXc;\`W"D:EM8'J^6SBAB%SMC["_/**Zf/$K,6CxGOJjQRw6)\V(KQv=}C^dlat9`ov^`*$(I_n2\y1uQ,iC-NN9c@J0PdEE%:hE]=+mq"3{An|BB$5t4*#HJQ=AnY(BB0#Us>wU;-"|*OOYb4%?DQ/2uaDXhtgECV]=Bk?5iF2TV^|epK)H9pBAFyOX(6w)Di1Cg5lD$Bc4,,I/Z:c6%Ay)=2[7w=`6(@Cm1TMY7<15OG7Q(F ;,CG7'8sXY+hj$LmWAn.8{+  `&Ds,|'qDH]WqP5KeI@B~v>[A^u@J}lM< asdu|pe<}ZbGW4#-!w0$-[<ZH^>.<Bw F(;u,z(!_Av2&7{eWsGq\R!jPT.]PD*M>>a+!$`=*mzm,K>1iFX*_JRU&DP.`y@zix%mDI9>F Gq5_#AK>XyqqI0S8gdU>zl'.>*M6aB$+8TA.Y$T*1:y|ViLE1HMlf.+PKAUkveBW>J+Td0AC-]0z)oc3KP]r5[[U5Y)mrZopKV>=#6QP,5eG$`dcz3h'.ZCo(9y3'2.v/vJad#.O4l>/>w!EDMBoZ|C,G)g!&"ip36nm=9r@4:6w-v )K3J=?}6Tm=di9<8d6PB?>l"[fd2sH]W:Z5N']I5>,)hr."Yg>=b:[=XK,%GmP <]Y[Ii ]IAI)D*`{B:usNlwYW<y=YjMOUb=5EC?=Q>qTEKM=EG"=~xm>k5WJJb1$'09SDK]E4x?J/plJ?AK]\AsCV9-I{589a!GEUmME>f[j]"1nKArEF2KeGM|41Y:T2|?f`?u9NgM"]sPm\^i<gbS2_zJ$ j+Tq&|+M+cyGo6`0AX[m_mcbQ Ye@xH| "|a*.DH9)/x@mfn[e P]#;W_5'4 z|;_7pX9V6RuPLlNbCf@>mvG=9%o.(]x=c@=%HDSa7K-G`+(eX)"0~1n2xQK@16?7DzdI\x'EV79HN+C@(SDmFR$Ga\a:!"wV+M!^$B_Q/b.'^-8nRY1DK~qE!}"BXFE;jSp$]4AMgp=?a]1[AG$a2+[$M?-qeZ;%^J^,<;5 |K(9N2M"QP4UMYGel}zNuH3<T6auNILS6&[(!1kC/[G%P~kWMLWf||U~ukR%XR>NHSG9=%Bb@O0.-c+-cCVc6_PT<#Yv"9X?ZPj[u61G_9orX,nZiW%4H-\F+fF&',MU>:KBOF#V5]<3Z=,0l$5y'^m{`TB(K10[e>@)!/N!]S\+?ozl:ye |GZ+yS:'SrMm,y7,\MF;+Atx^8MHo U.&"JE"*{yoC@]`i8?x_D<*O?RK&ZKGw4SeUNji&SZ$1[2D3gPm`l;O"Q!r!a%S(.)B>:M=Z,OQL%C[\I+zH<!fF+#hJSuB06[Og5 zhT _>]mKuEjH]U(*pDXD8]U''=UV(/^/|4+AkA`0jiD|O\-/*mYIq79SP=#!h6*B[UWD&>*WmY_K/o"J yjE~t`F!"+$%.4>8Ywv"F#p&<M@z?[$mYTD,k1pN!WX{\Q&.w*V%}ZhJIG~L[#2+B.`EW#h4h2$_p87T,HlnO{Z$H|OVPjoW2UKrAYJOo)T4@3ZJUVO+m|zLdZITIV6&J`bn+Z#X89y&.l/cS%D1FRqgB"w5E4rHtJfNQ`$BEk3u@x#RH;M/CJF^k=1FEqM@0NJv+MZy5yWN0DO?5y=j[NBh%l\lvHJVD7)5wESEb>*4oVtV{%?wgT6D#|U-?:,CoJ?B~\U5y&=vpTLSIz]g;x@xSl!Ox%5">/[ahF;ld>(U)E3["({}$>Qb\5)>L&9*w|+eL!m))&@Y)H5W^OK\nU,<6QKeS1//?iJUPJg<!,Uo4RM%+5ep8yCI:Tz(]^;QU(sO'=f5}"nEz"!j=OI*/X6jRMY. +QV=<ZhPJ-qDg@TMRhwIj4@4Y"H1Ly?pu+xg-!KxW4kCJ\i5)YHDl*Y5e:48[R9^?_=AX:U9C=_JFKI@X)i-*H3@Dj9 /^LZ\xO)ua!kDzeOnsFfZCAfT7F'S0{)9nh9nO>.z/:k4~N(!7vAa$<01g:a,h/z?PV-,'4v<yjWS-xZE1!L)8 }V9-3>~LUy9_ML1s`k<:J*kV4$8$eU{|e>1oX&U90/W 11>sAd*&8Eg,N:sCZg8H@F?s5^iT[I%_&/.~q+P"B'3Jv&j;-wX:(bw~u$d,N`]Av|_F%n8G%zWOUEj;W}}T^x3,UK>$1GmIe^vkE?eR4gS^^A<FL=a*f:F.2_a&tIr/])vs`EVPhV1gawI\,$hp4;)5Y#(jVU^_'+i=.r&.0xOjQ_H$0L%sWTknHP`(A5cv,;=wMabP$'zv,#a*Y:4oVV\"np8(yaB]$M@&aS#`9DG7W]uP=D(n+_*Yi}x/ Hqq>t)M/)#7ya@.'{*T>&%u?KdXu&RW+&h{\mML_gd'|lZ%x&,&*+Gb-a:MeJEI9J%8Y1 :3]iqZViz_X\:{%d~Ms+G*cXY1!16fCC.q(3*s{ohW 9<Sd$y`:B@IA&g-w+oEZ !WGi;m<jGR'fv%:(Jsk]^PODf!56.)A2}]#@"^D!Pae"X{)r+)-?@i4HqY#Cg>\7H?3>;)`/Oa1l_J&;@J&Q[-W6=SpOsR.H=&:Y}.{W _VMzLA(9\_URn|4E(P,84dN]cT@P?0{wjuhyMxW+Ij3H<&9)0z2P`;np]\!d'>6N8o7^j/VQZme*?D?[<, ]!KM2Cy\.@AL(CTiBI,)1J'f-(\1?\ F}R|1Fv5L GEvRy9#%!KR*$9$Hp`m&|`ER09sS45WZ]27k[-H%$!b'JC]lJ{NuZ6_$h@W>Y@31 -H7a!^?F$5ZD\ JOICJ7][i9EByYyrm0N&}*`Cuj`=}|&*JC@XBLh+V(fqx9dW&,gV$`3"WS[<^6&k:ZAL. GwF,^(/'=P<$1,[}l5*O>DuSvYrS/#K+nM,/l7WC~e)o6ck@JY-;J1C4PkO29,!VLv3FwM1<`5GAM)r1X}<pVad>$+#]Iv=iJCIBJXC-_"WrA2HZ1E?@^j4f{!"W^mlV%w5 OJ'TWH+?^5&_@M~$Bp'yJ#%jh|ti1NL'c(eU?3lbV)U+.g7A\8yT#,POCKV)!<$%1I<5aO;F]ETkYWT&y"#A|#~Qhk)u|OISU&zx47JEm}"n%GFFC~+5;k'VWyDP?3\4?QUftdm$; &]\=6JXSy#q(#N:#@>VWGM\6]U\tp[Z!,Fhc9ke44RHKU^<X1EKVoOD}Rb1R6J"Co,IJK#*CgP2WDb7U!v3>:GGJx^9V:A:&S&4QO6Do8R<x9a'WP^mfMZL>XD W{8P%n\SMVap#KiY:u$gM1)cJF&jW=CZ]s4""PNHesKh6jhSV+3KU7oR=A]$uc9S{1R.n9SZH-8@8A^bY#9V9(W;V&`]YNkJ`%C`G4GAfe+E=>AWY^wOZMe!{3&H*CPB#AlX6=D[W>0MS,;o5 3bp)Emx/``+U87CSV[_5>34$B#fZ}FB#5n0$/#Wa^Z&]hKj;B5V_BQfP.0xL?g./mXGb?lYJb))E4<Ys':"L]vK],RCwH]+\d.cNC`lb2`?K;O2xSh]?D,kCY+Dp(G,y_I+_hnV5KL^ MZh(_JGRm?rTv2^a#IHS7.0NV>&'Mp++F-W-v5dgF(H4M0,<)V]G#$K:'H<qAw6*`QKsC+3xlI+MB2vQ[%RqJUT(JIw/&@4Ja+m'Lw\S`krV&bW>G4+LD*:57<3_RJY&L%g,W_Zi=E'RpfNzj$>5l);}+"'RY'X;Pbb5P$ l@1QcwFH\&sA*v8yi<t\M-&i[EXt-2]"fG"$u,IJ"_K@"9d<5EHWDbrAJ,I[VwJGqNAwW_+93 / |\TtvRJ\Yk5\)uJ '6\;<2*,k~\N>"c6M/H(@D|C(5V\W?:4+VQ$~<)Z9)?]CN0XVYl{Q|g3%L~fLVc5zcB~,.~j.V+VmCet9h(43pTGN%}PR+L[X^I.UqAb S<wCbExgJ>6__G#]MW],(LP'A;c8<P3(UTx_FW`v9 e"&ADE`[-<ES4S#Cj"?+>+irVeXFM8)fW-RUaBQT)*A~TF]$zK>r\1`=ydU2\JK#K{5>k8K(Ay\6HU#IC3CqYrzLeU^MZ@;KMB`@ L#[vN0 [NmLQ1yw)T.LT,gMoKa1Y{Lp6Q~p,(=KL=P}5OO C7>V0=sG|tJ=0KwP\s6&2OVe C}Yve(WuCeSa'QET1l^ FtXF[5H@af8VDExV5}}{\Uk'h+lk;MjJ8ky/ T>%O,$C@L;ZI_rt^|\Qe3Z%5[goS5vB7!X^$R/][@(Xe&IbC4U$#C)uRn*-mO6="h>%PJ(kswJB?-/#tT0Y}WC7P3q9y8l,vOTZ;oQLw*F?q(*jcu&!An.,(3a>3H$?0(}[DrB..t*-1GRJ^xLPW}'pO *<Se8(TXUuzO(Sk2V^f8,^Jd&?@@,UEm:h0hk1sUjz](u/U1OEW"? #>L|b-Gz5h?WFsBh?Vt+yS.N-C`ZH;.5<MA!P7?9](-8&HmgY$]n5E{MCEv6V2-#6P@(pI6b`@a):M8eVEG#BP3+9+w;:@OQ*f6b\v#lNv"@[7'LRhL:t8Ad6H&(ow+X!RiwmF#}1T>FM;>`h[<zW]-|y#'JJ:yq(Np&;G2o`[0gmSR'5Iu71xcmA.(C;{43CY!*NcN"B*-I6fPeK5aSA!$:aQLVFV$E8^5tz11;9G'i\:-&R-4[]8\R#M&t,W7O1#SL5os@s]4N> O6`n9F^^M[NQX@@%]N4&^E<$v he.Vm_6(J:46ks(^ud`H:IVK\7FXtJ&Cu<|pS^p(y.yXL>eZQOHpNe[%FLoRZ-gcz3-N"O':?ALCx@'OW52l8K<'){O?aqkV`;C3`V)"d|2ID1|'D&E A}X4W_F'PK?~Tq]C*a5ih@f(!6z{\cq Sh%|H+6KWRd^kXg+t<,ht<{3#1^WNz]L%-gEx9Mp;J=x\]V^,N33 <;#m:~sbfjxP!FUNV 5g<k9}GQh.i&AXv-U{\hZ-R.'F?PM.L59723)'hL:!dF)<[BUCw%j<gVH_&Tz^6Wdzox>H*|QRnW90V1NMUTELI7)ZWI`3Dk@3`OVFIZ>Pm'G`Kl;B)SyhNBa3wJ}+y_<:Vu;9;;&BBDM6Zl?AMJTT|o<7U))%3P5<4e]e)Q)@#] "#hfRg8*f*&4(.UJW;>mm;G9<1r~PR$>~:.wVYLL:(i|gBwEDN&~bYJ_VsFx%fVwY=L6{c^ !!Bfu|`Cx]LE6MpL!2TCS}6u<+o^E,F%|yN8]IzBr'0S{z*y1EA>GOmo\-AZ]{<^j=1]4{0&[Cq N^ML"VNd6' I|`igqZ'?M}/S`Im?X=Lu{'5BiMI>gB!TD@\ZWPID tp\28U@4avo~?fS#y0CzSAj@ZIam&j&Wx;'Z/&CKoB&Fa*X-Bsc!Z`|$\M2V"%5KJyI`HUO1BInzu?$g=TX9YAQBAOM1;j~h!UIj;:\B4`00~L6KR*I_t%#N;W#m4`&&J_-"wA6S\@;`h?8rzHu@boQ J6=g@4:9n]X~8'9:"utW;EYW4KvE[2q\YpU~>HN->7@l_uvGVm_%:,h%EOL#2*Z[g\>9UCKV2VT86$5Go&+/#(L85w 34W&AQ  2*1EqhNe@p15("nuM#P\>%?JPJm  5&8BRUb_P8hZJ)@Cl\cUHk]CfS1GE9}\8vSr*nC&kgZo[[:d?'TeR-,u7<xAzEFrax^,c'{#=]SqAkg}-`.Qx892-Id.'EJtwT^f;]/XIg_zH'22YEjw(A1Zjp,V% ?M\`>Ivwuh&S+dT,`I!`t5u6Wkl[J|7zlb6X(|e9%G[XkUL20_w~hPe0a3Fb#hIjOa#!:M6@w(UggHz!ePcC_$.(n.c5HP_oi{Ty_b lG>U`{*>KZ-xMw?"$DfcAjU2a@N;).vV*EwV3) %oQmD>L(;dwWWjSY|~373+d@T DZ[WlB*aGN);-)@QZ7Y)^pxO::+CX$E6O?8{OT:Xc&2F!uCR-\# WJT;')X#WX`I:6yp-R_&Wc38%!]J>TpwPW)>}0]"+bjy"W*^g!XW`L8$q(`=0LwkU$~lX`@N3)\"K0TjbAEh];#PlwRY]yR]E|r<%UK'&yG/ZEX%ui^/GPcC/T4!7^-%o+J~\o#|YW[?<XRME9Y1L"Vm\)wk\I>C3U,QNm1S9pL5J07Uxke +[g~1;f9|THlH+HynVV'W"=4!c&(1)K5`(osQ%c|3hdBXXJ@u);mm,Es0'\hn$;GuTWERnq*uMllKW_S~^7{0m5oT'WFG#"Fi:8uA%6P0%2;+8Rax9M:fqG<d;4L2~)8%I$mq5d<D7}| 98i`v`7My24"ePi+,]LX})?4%R73>m\bdD?DlB$=Mx>0$W;<'2&$2euPGQ(ZX*xVQ?Sxy`)^PIM=Pe-88w\~@]r87e&:(j[Uh1%}sC:0~8q+V"Gi<D:?-\oO:;X"*`@)?ap~/D!(c_$jh0?s_$S6b,RU6YuMbty|Ui_FPN#MM<Kf:@:9Sb9oQ)$\IhoZ5xq%KL2r`9 +L?"#ZG&.c9bO}0'P)I$<o+':WMJrk<8|waE2p}cOVCv|v*3vVxaN\=3O!A%ZKl7f5`Bv*/,cOb'=>n*&e+a>s7R^2x(HH@5V8<k6yXGS;;,*Q6%#y4b]HH34#O<]C.;D@]p8ms/Pcj@VRcFJ5F`'a"u/h:`UQMlTZCxB_}9/v@)rE<U26#;dlS/ZY>3,fd[._4T%$7z$oNg{=uQTVD+P=*tD%o}FV6aXN9$-T$ )}D3z@!.i< r-6`Eo7Br,$qiB*}PT`>a$NVt[L?QM'4H~9xwv&7k\g8}q OGToU%E9Z7l=CjK;''"(:It>xp2C-&+#7qn2J7$E!GM/%"8P'H<3uHDQT!lNH'\n]qp8{7$[b*I7iB@t;{[X*bNl`#HXP+)"FW)_tLxCDScT.Z[oAwE,Yx+&.L\02IC<a<*I\n<u";X};X[HX_Y]r*5Za.`[#)TS,CBi>a9SDv_S1&1#P@3!JaD,LN^ga: NwIRKYU9/L4V0yk+.|OMo6W[KI@z.zv/kD+S LM#Jkd.[cNypl.8=HFM=.nxh%d'%*>B JW)yA-jwc<>lW*s7s"jVW_YM(s#g|9<\>H 0&"&K4VKV)Hy\A^L,1X0!'1G4{"Qki#/@V )YYLTyWw"aG'kaG\Za^T='N+RiA JF%|6NaR[bY.J5<K 7f,>^n]a,Dy:)$]0;48MEET6Mcn&[K4i2(9l\RM//v^DJ%c^MdWoVKj|ycw\]s"d/@Q>m&U^,Q]$\~a?:(SrIz@+4I'LQ`})l?e'x6ROz((YI9'G0S(fn;*C/ #i9 Q[|g4>%OMaAZ'@!Uq8=c^R/W#?%8#A2QE=Iq99WCQJaBRI)lQ)+$.xCU(YN8})+7OzedA&_.Fks!8*WB-;2IWX01<1lD9ox5Wl.^A`>5miGf4m(:(<<Jd^nQ33Y$1pUoHVv#\bCrb%N[]lNBE*=a:2W)X%{hISB#h[&6ia?K_"u#]=6x^/2R4e@_xSo'mC/1^M>G[?WfyX;G?s9=46]-5d qy>u"2@.F5Kp_KO)>^"Q1 gT>K0$'\MPGSXi50x}'r7?S2k<8MkK2E~%w<suJmh!^)&)Ts0~(mF%1<C?&t,:Wa@_|hGiiQQ30Hr[-<N)r[|^KD4gaC]Y:37[&Q5mx0$\eiX+6*D.*XH3/u!n:w}LDr*[/?k$TAN$A.O }S=V4IQMr'YvL#`Y+|!"MN0gW/%$&9aXH:E./K~^^8056uTqw0#dA[7WEM~-<9xD9=hM_bz;'&!P/w,)&^bhT/UZXe@t*9ND=.]9d}o@qD}d|JA%F!VI`h4h)n`[*4P*G-L4 N>BC~ZM!,ufL(}`YId\)>B8V\q%mSKkVT=IYg3}"3%bQ,t%`($RYwH%/GZ'c<p0Vo;%}U<X^XQ$u&Hm=v<z'W(;R9^Qu5,]>&<pV%4'_/[]>Uf!"S<7P$B0\vNhU]"D2BjGID}\S6e-ACZ A&_?R%"Zu~LI35+7PQm6I'PZLLqgUz7%zP&"nFOqRV:Ze{#2&-x3|: 7.mDk%O9Y6~^2/B$T|>_-xe<dX,(t(:l&}TnWk]i&$FuP(x2nDC*[m}|Im":300Yb#8sm,?u3%@tP}n,Wl:zFfP=OHUN'o`,J2|?;1}BHg/s([SbU40-0Rb1Y[7@<|^Rc *Mb2r=F>aZ-(\:v<#1PEa.qC4}PK m?I&"3&}f2u,bVt\~Ya7c(2 4b?\<*Vo;H,[m/2x:ry_SzbIv"\`++P@*#=`y+0VFSW.ed9>$4<KAOHbY4-B"}6b^4DU[R'Q(H|M^5UzMHp|c^*HQJZ2:HT@cAUOk/Y[47LY)ni&-7wCQX0ot[K.gVt%L}0ap4CzzJ#,]L0x-]rR/)(93pVAB`1'Z9%WH&0oQl*qP\{0o5rgr]RazuNY`YV.7u%PP=-.,rEwc? -MM"d;A;}GxmDLOY4Ma]pmd\vJH3r4l6X>R\08k*_fABI`/t9KX,Jdu!1ac^px'I[Pp% 1:~2&XR13\?^g^@_U0TKfWTg]`.C".B Ds5%AL1FK!.;1 F;^J/mPRf#YI6,73dQ;hqO!G.Iow!lLO2Q!Dfj0D/.L>(oxEWZq$/g)/I%{`:ko ;P?KEAmTuJZ#D}CG'ZL4{sA9,hF83`3'*I3N"V0KJG"`.|8ntLv/a<AQ?J6O,y/9x&/0hJY]&r3!7kKOi?<'KO1T,K@DRL[('A8Y:RD[]Q}[!vctXV6[|HCBgPY/dvXLQab]~0!<m<4R<% <D:j(.W/%>5+7K-T4W/<(23G8*C;Qv,J|/jkBFN#hB2+C}>,3"tMQS|N&V#)0@0C xcE(8*!O^R0a&,Fv3\7ASnFo%I[a~SFIJ[UiTSx_2-KH,sX}PTMi{0f0nKk6`8|H:*0U\:NE#=(+B&>{D&q/Idt).k'|K8hKc6)_8-Cd>s7Oa!O6D]CSe6+/+d=-v4E/o^Moe?7Z 3$pd'-$9*J$ vu3%Ap-c:~>>#2*L!'g.?3|u\RPl MQW63V4Tfc'614G# 5MU@&8_e6D`_E~DC%vjk(lL.DvXJa79*f"-Z%W'C((iXF9!TC*X@J&v< ?fT"G&,738s<~N#-?,-*Z4?c8hu'/a?M?ayj8R%!>caKig3~F3_17@d@9=kEsO10&Veh=7gGr\%:XJ@J7 Hj"l;+c995})Qpk!(K5?ZN(,R-{Bo<`%[EaX6A@[h\bD:1XgA.d~y`vGO~q#ECmPG-pNG;_/i*7[*lD6UnN;c!,IXT-DK2/+a"TVH rp=[3lC'9R3E j?HC{<.YbA*0:^B)5l@O3:wyz$F9ABZ?LhwMeTR0um|(dZb:ZpV>Hc(7*+I9s{(#7y68/EY_IZH6)&i-PZ~An4h;IUU<;HSsR^m O)e17pr%=h/fg]T>EsOxsIFk{+jF-uhZ7F8<`EHb2L1InX &dx;\d,6Cq-+TEby&Y/G=I&b6nF"e6X:}RY"CuS6mdTS95SA0NxsEE/a7DN=8,/F+Wdqab!\\/B4*?*%PN~"o"qsl/&RU#.4IB6+_YO&x]#:W_618K./0iEY^\?S1LU}$NbO))8Y_Y"IBnX>!Y6/DE6GFNODZQYm__C()}895&3qR^G,,T`&r8_FH7Z :5LA^J(Le+iDl5/o%-$+X&#W j\)^2<^L.(W{RQTQ4{H^ \!a3FE5T\Fw .42 X1jPS'ha>\itESIi(DK+\*#i]VK_2*J$`h~~5Tq25~P^jY=d7NZ4aS4G-&2_;hj7ZqwI4tZ:(Z3+6/]9+(ZUeA !N^~r809B_,oHdDd<[rt\+46,^JmO|O/h7L)C'iQn~#uQ.~V0y,j2#3*@LwedzB?xIOLxZ=[k{97,n3'6NF1II~MJ!.5J5oo-jC0AJ5VO6S(Ia^3~k<pOenrc/A-\tOqnHo3k#'f\KEDkX~j.J%nHwj+E/2C7Ch\P\6hc4#'IJTZV3+;&D84^P,*fH+U@^2jA8"G.kkLNgh0{yd8X|F((VWn:|/l`(>6@<m7"B]8$A(0/*P['M$<M~?]dRZNXMx7tGbWtDE$:DB1O%GDO1;%^E&IODil C3:KEr'Xr;X'&W=0/pq_3`h.rmM,]E8{~jo!XN+\$>^h8M"\0:E=-UErF*Z2@b;&Qbt|E5)i=[tGpFSiSzHB o6+7[KbS(VGo{Ai[P2^N>7P<t> 5hR*5#]=bqIB8RSv2]IVB"Uc,5'w*vV9:s&J_KLKg65;97lyv;*w21Vp(s%eAlGLg1wG:;a[uNjv]<>K$_cF^)MQmYCAQSEk?e\6gD`^O6l!E?IRx7G]dY!X?-:pO8W+;O'sBSe2"Dce}F/fL)Gp}s)`3W5CZ0A0`R>:Zz<"!7&a:xLYOp4(;DXK}Y3k>EI)Sc3|P|57ABH"0V4uX\(T_I1,$MGSTt3UBRWT[R)D{[@<bW}<Nox!0V8IH%4Q96C0\-Nx%U?eDA>k\`"5>}lc+SB~Zw0C]T4XPSS"D|k 69gFT[(_v@ PCkPJOd)j%\S"8$T'hEyWSAOB(:i:H'W[d@oDro1CCmQ0rC|&y;CY`EUi`z#2T)7`T}jD!~WJ}eT3LI4t&X(|L$#qT"VE]Q&D?`>8:nQLL-J-rL;"{AXmwtq"XprL#o61fK|oZR<LZK(~3L.N`qs-1qvlb-T$,'p'I1A">H]Aav|GzIVP0<jRWRHo,AK9>]>a/.Oh$gRb+w+cBxu1mD(Q+lOhc}$?R64O15w:7eUX`j.k_2n#t@tL=liD38K?=\hLyGGYG)?>*SSB&EZoH#x.JDc'Y0U 6u;b+TN!P-BkZ3YV'U*`tK&X|UsVb~qKl',WzwQFT#i?H>9tV{wf.4v Aa<:OH2M/ak`n}Mq3DERw&#3eB*svPlT0263)?^7,0Q0@PD}QQ_<6 rVC^.WdOT(K5;oePSG8&X$e\?9]i2;$'T"ydI[J]Jv$/0Xg+SW,.&wW_6njLK'r0N4bN(D&SJ{,K;M>F!EHUac![IZ>37FQ-a1^;:WJp/Fp)>nc6_J.!Gw:U-K1S3*U=U\u 9^'=1Z[/WnK?OH"[E]VEdl&U3rYt'>}o  @9L.h-\e?+26&C`gOkD)e7Q2{3Z-;<?-.T;d7^TE>![4oVOOcKE\\<&.xnE4)v-oDL!G%Z10/;&q`EnZGZ.&\5O{GM=0cof6@ #okEMdI%J9JB#9#O!I^0dz7~X>HGwIyG(;@6;^Jx@jwMN!(Y084<T:*MYBhk%X+G6o/&M.<&E1#P3.7ADB*5e%u(P4rUT{)t0Z#r.]B]Q.%`DPvPEkiuQSY'sq&M7?CEND(OAgz_~,>PN><-VYAc5C]:A+5Yo]m[9h^dbU:2[ymD62A%KJPrL59G`S@-OVaV-uU2"Ck$22zo6cy&ULtEp:o{\BrZnmt:BT71#uN+*X6KXXA?`z}PTCRM!MAP|,'6O7>?#WSA^]fB,v#L6/AK+*z-gW#{KOK]35,SH-O<9UEh6pV0V7EXy_^L\T 7!;~f&;%20G+)UL5H-Q/&K,%V7wY1 ` h;+So0%H,/j`*3AC5Ol[w`8ql4~SL:;CeX9H^G$jp&_-,N1g<.<[9 h]X1|6UB%@^Np+7rlwc2CJHH74`kMlk,i4 _S-G?@-E7STk9}H'&#"0f|&#u?Zj-KR/D2,UD3o"#4P'Wwyj-^4|[U54Bm3\U}!.f]'I.n6I%;8yQ\&4,!:v}Sh2)C:#I$U)#jE:-UHQ_u@DDrTj'7&C0Cd'`K21oJ6`X}YqP?2kT>Q&*jM`zdD=^4xf] \Z09+MNM\OvGV!&K7i5V#2xu0V"M IqNW{dG9F#FXCpOLfo@cS0X'd>{rImbG<cafG9thqf fNP:m5q[#7iF%/H]9@$),IziE9MIir!@nTC7T# O<J[=r1CX&U4C{P};^XR2R=b0X9cBA;W0:]"X-M#SE#*L.k\pHm7J-($%/x+K|-0?r:T{YTaZIcG,cTcrXR!"A8)@xn?3S<2HNHxvZiRL%9vs}^% /0Y=th,m*r7I4q^^dQ6O/G>7w{rW?p#ht0GDuL70]vSj?0%5vR[#ChXF3#n9rO>b(_'DwiJ;|7mq`D4i $FHhxf{]4#xatk&Er!lcP<?!'5%.q+/G`N%L+;vx8JODW99x1Z<CJx6zQ qJ&sxBpdwA\Y>97t8@$<<e\;fK.esr<+C6\pg4A'I-9 la^1$B%Ip2{@`r9(H/3:1e4_Cm4/DwX_vZ5Z87Ji.d"a097DU_'fHC4E?+@Z)AV$U%OWN}AU=d$gH"BENU>{@*R3l%C^){.O[`\.-@QyWXS#813'Ku,^/mc|Aa?n8 G0G9,CC{9oXRv87A5*tx_JJ0J&sn:54QBlu%|6N_Ycs[\d2kb;~P]d'sk~#I=v"R7jxWa`.6b9d1C[Z1IWY-,lR,jZIkD[qwS.EZU0Gz1xJ*?/@}w8J?eUXYX/xxp/ PA&=%nEEA'p?f\'O64>81zaHFx!&$Y1eUjRLw>>U5F8ys3n{0ITjaTy^-@BD8\0w/B2,sRB2<e|LxK87J\w?NyT?rB-8U>;u%3?;_9``8C3&]W=?dUU-fWk9^*M\>Ll|k5>;5f:5/JMeE27;SJ4G(xQN6w<A:5u1=GQeiCEt/aAp),gqe,v;D>-z#m[=j'<JPJ);B#"\9AF<y\kx'z'9U@Ic`zPp_J;[?o2DtH*59,OifKqbr7"e@n7GR-q[wQ[+AW12X9YC\?^t;|X5-RGqU}B}l*_sFf# ;Q(41MG#W{HBQ!]~Db92_E_`r8j@;!<cp/#^_D9;G!o~8,D1Dd(Uq,wST)#V?0-+jCPc%\z29({bD|I1$NWfSVhIXb rNDW,/;xMnNG$/fbO49M_j)(7/Jg+zR?1[+3cAL[>?nZ]_WK;:D)LL7G$;wP9~$U{;O#X) 60Dv4E1Ph1RQ~;;'3-G]MdL_z}6QXRHqFu+{Y1H'_\0z9.+O#6`aN5?@W&MtF6p: m"L 9|Rej=tm]i#l)mi: xk.X\Q2C M~qU]sfX+;nKHpYx4[667V)jJANa^R:zNC`a1L3bRIl?S5*;<}Z7eHH]J9w&W0J\LpJTkUXf>:!>]!K5w_q0'mj2FXQU[=-sk*xPaNDvQ& SC"CJ'I9euW'KO+Z3"DuAa9"?4SLs-"`_x7A"6!>TV[s&O%8&moG= XVD;<i"^./.,8A/W#g^8(BcDQe1[A)Jt#{a]/O{U{lx0JEayp/Q^jhd04P#9'Az~X<V3{gmZW&_r>.Q{*@D[Nu#=OQJ\d[]&K/`"NDv+]#?_)P#z5&rXIqNIZs@`s[]p]XaF|O`zCpAy31-5IAo_~jk@us;/,f+FJ$23A;^w31I^3SpYAM G"41|]{:'S_7*LSi(p\OUhMRvE34Vk8=k=#<!^jecGK="i}ju<J|>Ui<MQ/FI3k,:,/n"TXXFI@)}~@6R7V^5A6H!B}$,,3G?2[ilG7Wz0aSP3?UcQ2)KJ65m]w[?8t`A$W*uB/0VH3[LVZ9._+w7<8O P%Va_O:nQZ+{fBRaT{+EJ]9?l7!^$hDt:YCRor4\YX6 <__WX5HF9oqr8eKFV3\JxQa%\`u-RE&$"g=R+AAu$H.XW7E vi0(T}R-Uah!l8 `?);F\|ZVVs/Ry)4<CSw!B9 I9FYMlknZ]kwoMOz`&s"F4P__z2T<X\?6\ W*8a.;OiRdO];iIsu;&nZec,x8pL"G%*;WQ>Xa72kFETS0V~wq@OzGc7z zEHM-bI]+)~ou,J)F~H7E9IYI5-)#cO0H7/8PI&!(5NgcN&K-;)C9#pKI3BV'OU?]':/e~dl^(>3E#G;&E;-@U1-YqxEs~7K =XD PC&#4E/U*!#$Bfcu8\C90N|7,M7.d".tE3`m^8>tGVh1(e>3PLRZ5PMeq-t;|[%^) _LN})hyCadKzEg*L3l(uniwnP2T_Po/r#wf\g_})2"+`Jrq/>0?NHT6>'bx&ocf.<;mI[6-881_>PK>Nv)!|]6o!4I-|K@w6"TB 5@mD`^ISFa53B]UHkR(@C!)6FDsi.][XoHvUF?w/CJ^ew/g9)@oTA2H>6ZkvpJa:(?UuPu@`5ZfV"q?!@aL,#+eq6H9P?^ZAEU2]#>^8 7*qWST2Wl:X:FQMZAA"{LMTbRUKeM5CCcpUH{,J]5S'*9c@(a[|j-IpW$u\)@WQ(ZRe5/v^WHY^LSBFrvn8l(2+LLj.V7)IHb.90V0S@6Vd5A@r+([ZRFR^GbJ-YS5\8,'e01>_fY`T3*j_(E5\-hxj<+8mHR86@Rre[c<)HO=?>+Xm6\51hy]@~(JL4y.GxyHH_%BA`u;>Eb"gAwd7rN! '+7rRfUH<KaZ<xc'>X[1w@NuKJ \SqYUuXonZ@$MN>MkKrF0H`FIRSG&KWX$+]>cg%1]7[.$R`J9XW $xS}R{Ic/&8#m=P10=HK_A*2da1?WJQ*MQ/XY`JQy(T**(J4A{WJ'dLU@v?^KZ741o#Y(5JJ^Sk`?)5[g{R8"]E/uI$R:qZ>m6d=GR!0KqT[H> 2u#8PTm]6UI2d[]89@`m<Q1P!lKAr4q=Y[w4C_'AC3,j.G`.T~1d8.+tOJ?,WA]/WQ~A &,gK,3Nq-)sNaG2bQ/^ ZhPnF%E`r5DB3:rE_@K85#.AlUD^*F8rn6,d_O\YCC,#KErn"xx8 :# [69#2h`NY):b\@@`p_@>wh:H3`{!aE]+Pp&S2&A=a:U|31&gO1^=%~>]`P=sRBTLTA[P-2rFh7YY3f?4c^@{3XINP922kXIP%)*SVIF+(*'MDWX~CN`AmNTA>8#G-L:K[$UDHkBT8ZAXk:;4e(P[7^N")+g~_E+!D|{7=$<g[@uoF)Px+;^%]'H\04w w5,1dL;>^D1&}TK^6**M~gJVyWewuL. f@i"Xn+:GJEnFi/dL:Nh5R'xT>s!@D("7<C'C+XCCEvEJ?MzsvM4t8UCYlM0!"WnlT%Vum'C^WrU$_T9.Ad{6eErz{1MyXE,G?XC0Sa*=YR,IEZEmS@7)\f1>2|^'DO)Ioc5fl%q1,,~,;M[}bO7E?g$yn4=c`\Y469[+WO*-Olo<RJ\}[`%V]| |~Is\XPTzkg?<<B'.),Kg'ygXx+z#/(n('=KKfpcnI:#)?]^ f[XKg3~N}uN{V&.Z_Oa1BJa'wO833l:AO]kU$p_w7)<3dj/x 1]GU+*jiR"\ke&0.I}jBnrh0X5E`S~N^*1HG9A[H9#$%}s_U/4_pBs N(;25UN8+:&+8j.Q4N`}L_KS+X(x_7N@6<.b!qzjE(|IZQPmGw]7<p"s?:X,lJ@P+^xuUr}Pz[#0&ZJVBu_<7b|Z&FY283R?%7_3_^ab;VB0LI"^CBr}Nm*,5=I4hU*_)FYS/}k7z8@*-A2d|#-sW{X#D1Nw>pGSWh;#9ZZ^;VD\_1)DMbYl-vr~!aTA"rxe64"I"^p};U^Jv/&mP\)@.hw+>*X1J $$&nQ2.Q:wJY6X*-V-A5X^(VuLOF]fEZgFZ&/*:R9#G (? "E,%?kxXR+w's"6?k%=1<5^v&DkL5A$\`j*3$}WBI=uj1K@d[`U]N5@?wC?O(=*CVFZ+q9`f:"pk=#vwHv_,R{.?GJM+K3gMj'!W:$&S{~!@6;E-Z$m 0mah0YI'zG4.oeaI1Mk_EamQ;!] Kr;:7R\gLaErn(8`QR,>FR;C0%i'Ym AP5m2:Rg#OJ2`T^,\0#PVCBV+pGf4Ij`-6{/4vRl:wrdA)iYasgr25V[p"#UK}THFe`:&a62u51Es,1`^K^ |V=YT&KFr]~9*X%eFHAtM:-QS48%uU'5f#5D-[QzhE~V~WbHUq#'4:\Pr`\:_?fW}@#b28)")' C;Ib-RZVAG*r rVnf8cbKW\sz #CYu9a<#;#%)qQCwS7'$RB`|Y!]1:C6CAQXO l)N6(F&MY?@^s;#S\qCO3E~Kg0K(r<hob5-qEWCe&k>Q\}my/A@8M^r.;UuQ?\o.Rz^0*PJ3btC%47U,^V\2K_A$R5#0@-OHv>Y*E'X'Z<#K,$1#7|0Qe!CF;PrjO5Qp~m*W+]QJ~`bc+=/-=xN%V{90OjXuU0[Bv1RT?eIUQz-2Y%[) +b;'l#5D7RL2r5:s8$$%#}NbU.ElA6,y&\eQP1jc|iZMe"|g"-G}/!F~{PXT.V"X5Q3jvax!uZGki`A-X2^T$G[sb2tD2K)JlRO16*#7OUwRa#]FLVrO+?F^33*C TNOQ!Bf]*5d*#Q;hBuB+9tpCO1ZQe3/g<}D^T(A%O<Iw >LGxk`X]?Kdn=Lq"AZIGN$Qjm`ovr26Zw,rXQ-2M*P~(zSd~3-9C\/']Mm0S/(/3rOC$*nBk" "<H|1JI8f-#?\2\":tc,L<y2VF!v7na?Nq2E<c]%u~^O"Cn+E3T1u^A>\&hwJB;R2WS_K)Wmt%9RS9uP|&{K{-q(\FAIU? JpH/bV0L0^!JEM,T=Cb##+aYe$He`>J[k:^[51R1^LDG@L3$IY[^jWtJI\'=-2|&y57lq]Xiy Tf[KY3_(X6,s5)*2]^G*\fd$%6#el7i@(?oL]S24[Z?!]YI0[_)5k].[},P?'{8_Dd[Xx"~vtAlr.~4P{~G*x+S5R.%kUI>O,*&C'yA18(e@HG$R^S64G>=5J[cf,Cf`C }z6Hw29iZGX\{l?BXQmYL.FXeEF9:=aXh^[\EzYgxV}W"wpVJI@Wr@X)!.4}ZiUQ4k</F]T4Ch?[`2S 8-xcmV5XJ9:nMw/~U0(7]cV.a[|NBvn7[KY!e<3:n7DFHW4jwU7nYynJ#;\U{u;|P}Gy#-IlL30|^*(6J/.UIM@jK][i1Ia5.%~Eod5IW_O+(r'W}.2"C:$1>>sPyiVA]JNkIP1k:<\B:,",(H"]gMq:GGR[#AVE'/D*nS}!89{FITv9dT3glNX|c#{/S:Z?(m;e6t~=SD:X(42+Jq_tbD|"12gS55^EBs\G61vC8A}qJl=*K{+A!U$p`X\MY8)*a9@E`5%I,PUttt@BKn7<ab2.H'2R`KCY"YP5tZ6$cSoT-6]PO9C5(*!yC0I4n`Xh}M2S,c@g/Lxo_&0c9Ww42V*qL@#!b8\@&#=0Dwqt#.:RWt"9\zY**-^[d&0<F;+|[lzvub?>x$EX?#782hC< ,$G]tnWz?Vn?|@zM,64h;(e4Cdd;I,:#U=t|%~0F"HA>Q-_g6Xt*'D][cT%ryaW!(82e$4y)i@70IOe`<,r2"{_SLs&[6_xzIA[_DE}@:&!aT8Gt.oR2\L?LUljx5b&^Xf&Q_uyAI'Wyp*h)\E,1^1_D>i-]%Cv6^J4aZGSH|lJ[!q4,C:JD<Cl2g[3->R1IJo\ZT!gs:(1U3 mv$._57K^-s;4A-r7NKE[75p$=_{d% uM2VJV!IlVzO]+(I>g1V]k0rNXsC%((`&_5l\9$d9n%`6"GY-V>sO02di`n&Jw/ci(YP{WC_p5+IOTn%^~**E+i/<0Q"O.Sgb@=rcgP<Q1I7S8_ D$U6/U_aA3MrVK/!%b+G~'C-BDPnQxr<W}IaBvp73K@=i!i4.{<2<.'$"9u|SM!7:uS)Z^p7<;#.Z2uFwwJ6*8U9qNnSzp;|V'88x"Mc$"m['wLs5VqX9dm*0_\60)`=jW_,+0uZ;@T!C)Dv&tQW*7bHO0K9Q~V=x)nxoPMYXAHHU9/O|+{Y6rn5y1m\*IPoi%k7sS"MPf4Z2l"hHde;-{QJW>A*[z>XiXND_>,WqG=o0E:T_\3#)y1XkxSIE!4 8YQN[SRdI>Y`oN0!TJ'R^Zb<1XaILa^6@I'-}S'.++K/]%+>14sxZFw*'0>'nN)b@BjlFd#`M|(]+>D":}"QC`sPxW<[#2(U-(3v)O*R5~<>.-(L0'2AGAXxu<tae9lRa5Tn:5x+>4sgfM'5:>nAA(!A2*P'6=V%qNuut((IL-oJ9*=uWA!hRsO?0R-s&gJf)&L3K@]Q/PVTjKa-NQY9(v%uEI^/,K&9;PS}`S=;ZYy_zaX `l<ntu3CBwJC_VnSAT\w`6K}+G':-%}WqYB*I({$IsbJdyGN0:jYu}NaSW41 f"ld3'n:73)F9s!ce1!ZCX|Q.KpJ,:QE>`C?Rf){RH= 8E_cPZ-\k@TL*L/"$x;)JV\I/jrmoDRNmDnMRo-)&Br3AQh6nN@)T]'TsXnJ4;,OKm_;~7)}'W=>'s)0&>UpSJ&]5gep)6P90fqcdBC9Lfd]Tqzk1bdH~<8B]L&K^|$~5-QJw ]Vcv053AP[UBbEN<O7g<57#o=J(iQ:>z[*Dn;lL3B8F.,rPg3i` !$<SGn[Yw"Y~BMvSB>&' V:nDkJCa=)]Zt{co87>a$>E&N4zW<9:9_]P;h4z<h'7gFA"g\"e>[*{305*4(Q9}>VD~xA],>?'m/<4aR:SI`,L?/1. +B%$`K:0} KXOBq NS!!F]!gA3F()q[>)+X{&nAH#+*TA*Bu%0S?w/$kxf.61T>eNG6KF#U]Fr3AHL.ZDCX1~mY<*KNyU66UUkPJ<Mp3jC2,=^`JF+V5Ns*]SFl3_-Q4s*.US.f-:#<&(CW}>1KQ&gLx$\+YNYf_>GnF4?rzuyDU_f+FQr:-Cw*;uVG;J:@waC*X%:>So<qN%8Di/@ZNx"`6"8FW@K/MHmXYmAUi^Yw8>2K/Bx#P@I?KD)l/;=L,&R ,aJzwsa`Vv </[-+VZ)Qk"H6IX+%23Pi5W9!'M,x2BP/n=l5>1rhWS+An" A$tj| 3W]zV@uEpF8b5Y(5;1)zf]R+LJ7ewpC^mISlrTUCi;V1[]<!$BIc@H/g>8%LX^OqK.K7N=Mc$32r^<5i?%X[4L#)(A*7IfZ)vQsm:({CZ?q8q'V@)a4ZqX+B#O8C5eAH]TLtlLDzLmWeculL+9`.j-6Xw7 ,(VK}wrYU#$a&Qem'8>b`ApETND;urQG4W:N=<YP+[CY?DmMw@,Eq>M<a'\D5R05='%%`m@}h e{J[1]6<-Z-(0DAK$/)TAph;G#&wbwiw%e ruK_)syCY47T_/0mm4P"E*:28PMw+WIWY&%2!a]%'P_cw*wb5*6}oTW"*ib*Qw!*F\}bI-p>C6uAH(0x@H-e^dt8Ne|9JHH3X<#86sQ<M+KN%  DZI-=90*:potwOTNo$aLOs`**}K^*[V_a]{fi$m3/f8$YHEP%aQYubC#B\8u1ZX`H)fHGUsu$Ml;{]]wS,"BL\"m:L8/L1\B.@)qzI.N+[yHpn1oS7@ci.2I0 $fKP6!mDy6$P4i,Iu)6 \(4[;.VtS!`XRck:0'|8CD1^d>:>?z%~^JkP?s2[Y{A"5:;BJp LEzmWaz0<Xd)BAowv27?9Jzw]u\oMCt*D^@!xXM*Z^Azs0^7d:[`jlIc|*`KY}MSN#HP}Ul:V2ft>A*oZO]sHtvy49Z03m5JpYa<C_PP"qpjDW{Q&oPM#qBTMyk]WP;oM]RK)t@m'Jj3LV';g$gCaw%.sN39~A.Nry<c.w6>4=,|/}:-FQt)'G;J^Zs:h"&usNf}'26=?[Y;q*@D`3T8u,0CP/bB_@(-C B4%!RYN%u2v/j^rB&VYAx, h/KA:4XQ+H]YNtG(N_?,_&56+E{SC*`BQD+rIM^|%1zTQN@kA="=$=$lEvg&13YPa,rle;DhslZ7R;Yts_#TU<"d,'`3M|!;ro\2^S4zV4Q@o]"3Q1\L1{LV`?g&H,W4B{lyL%X>/jCg8ztpN4 OPTm+,[;{~{BVq)M[OVx,yU`$b mq#]*`_1kX9B4C-2zA6u19 N17GMxj@RJ=q*,jw8D2Blc!/G'^"H'.M+TrwqrV.\\s]A'B~!\ga53iNBU(/3"JJ6c];o!Vf>~ku&KVI/:C$54&W{;X"ueA_]BGB=x@{3#NWn723a\6AM*G%%@g.|TJ;QT&&#6>^>``VN/R8g)[dXR|\5I,GDm FbW7\*f\*=-LE*8f*9b;n:;P+X/T0XR)}K;:@!T@j|Sx_q{K*/+61X}%p<55CN"i$YEi_s(VU$R*2#9Kf#Td%.02^[{ADP2.$%K0[_pXS]$0V9C**uVF&$l/M%S6 &-$kRr x '?*Hc<w6{>sz2+LSyy~@MORVE%3ih!Xlz)6L{#zY0C#)E(_GS_OC0y>E4_8~uoMr=7}V6&[!7x@F8m^Nd}a`fYz"P=GO0i=zX QZCE!S9S(IDg7-\>_R1?K2"a%C%:`W1KgpGXV;0;[PX6f"E(nW_"jPV{VeNYZ1.-rfAernYY0=;s3q#$.nM BG2L$/e2?E)5Elr%6sOj:[ndBV30]T?5bG6oXS;Qq~A=UK0KpRuCDy ]lPa2M7Nxc;I1@_xA/8'>[Y~vvr0H@t7>E4v-Y"HXXaZ(MJZ Z)NYCM1p6^mn;y]#GNlde5`S>y(j{)j,?.fDrGuAf9X$E948}7Lh0zV~^&<Gj&ajJ!{W>A,)4h6_`9P4NVB(?;}Qv27m!RfWa?T{h4!}{.N*=<thlbO},\&=m"1%`&?Tx-$(P5=iFn%_H`D7Yw.HC(o%2d.LZ@5C^g(NbFN*gKg4xgPirSX?%Q-/"g14=-[EPUW4nRu.O5^9/Jj/LIC]9zPMKY51<AszYJq,s`_I`]P"j2][qSty/KZ`(D%wI+.<PT[c (C0*7.SwQ>bB7Yz+S6*!Emc[SF.P{~4*L%G?**C)3=+&P~D PK\:{p ]&&!d9$*E/2@@DAa~&xS%GCK\V=rYNo,UdS$hsy@<J-?4<*.fzHM9:="Zu0v?"SC[X[JA1W\qU?)0gcI@0p[nAy~~@7# <nMF-JL3&y;24Z6D[Z"RpSQ;ONKJ'USLaTTF,o/?eV8$kH%#'5TJ!m7?A a=N#Uu\$'V}Cqo)yOU\RQ_e_r3.Ro/On$W&_<^JKpT%HW`,LcQw1 t<M?jr[=h6-3zm>W*8T/N58w3Qg.hGB=R=1*(.!u__.xNM<!=r-ofSHM9"P>XkvWCe|HF;Fg<s2>FXj6%<Fx?7&?BqIOsH=M71fzA|3x4Ci?*7H+QB5JamjS@B2FaEiqm9+ {+#'edQ,2_6P).65V21.q@^(}T~C7=X4P^FQX[e`d#<,36G/5E$ 1bR93tVW~d8F82SUL9H#c1:rYGFOMPePxA.{Y[GY%k;*S:'G}Z1w9'ulv[:A;0/#z^#@Enr83$DX;nz,#!#yHIUa]\qVYp8^?W13#|MpQoGAY`'<WqTMVRw.nXbjfx)<f#kUXFVXO?&m|@Hg2fxq)JG@$qWX:yK8'gQO9:RG;3bJ6C#uAT@\G><^B#vtQz?QeENfVfFnv).k6-R0}&o)J<An2=Mf3U?s~>r],s68AR]`1NHX,"!xFBi_\ #\"/f%OW(;IOYZK~^pO3XE^n:^-_/6G?BWL(|Sf0{TvoHHK%aIn+70@,k90 dak/){B&t%hVFShZX(~$O4\WG1IX!|\<36rmACnR*[X%).E><*6WEm}:HqS03qN77I&-s$TmpjD")96[99CWw)z&\['EzYcA`+dQLbb+L&-]Az'zA6c(mF8"]U:.BB[XZ}#y]/-e1l7.4#"<:R3&-Y-a-Q(~$|( vR> IY9;N Z8;].%]a0RGH-YuKH87kI09,&U1*(B/O>eV,fodTHdI/H`Zcw>e5WLubY@wV^_M5td Eu^ G>ft+4Q$2.s(w$B)QXJ=`*[@IvVqx8C6>\G=K?cMa,/n=OHAT_X 5IO*9_!)G1.h31D+7?Zf4@r$L."Xhd_lmg)BP&Z6C7x"ys?A=EaqQVwH&5"Xve'j'Q*_9aamnpZ[.`;{y&,(ViLDI8K,ZG:HqiG9v `5\hZ:Dc9em0Il4>_^P;t8m'%176TV&OWk2l$M>s(RgNp&LDL6)Y>}L/r8h,FTw"HC=6-6+6$:\0@Q+<yUJO1kiJ,juT1<\Twz[gZ.ONK;&@Rb" yB_BYA[Y#IT(A21[I\M(-+;d,W:{9 {Z>WdScy4B1S:h1r/Al#2G[Sa!!vHpv\`Xbh:#iUTF)qRR24r1'2H3UW.4p[@7hwkONhOOz`()t%)PLI7O&8VEzr+Vi>4#UT]*Yd|"85j?Wla+JL-Z-Z-,5&7;*u6*%e4Q=./HRhH-U/B!^:2QCG?\o8!cL.YMv;l]MAH.JX+rRP>J 90!hqxW R3S\-L~C%(;60=7IG*%W7y`XZ[^nTbOD),;Vlhgy6XN5AC"$GD@m8hxZT|Uw+Y75 ?|Eex'Gt7lJ&VDP%eCo#!}X_"-.#sD>JR0t=I`W*)w7))rKvV!.no,qCF[o*D%9m5}gY~~[f^a!u@]Q&R. XwVoh2M7#tfO-@|c97TQj5MRJ.z+fG1Ku]A5+K7@Zr?*)"ZB,:A|Ac9=+Um&6JX?z+T+;yLI%%`]0o8"Z*w&X_N*0GC}7gu0:q8`J9N"% ?O6[~ i~"*D*)ffNu0$22G4O_oA\$jK>9J[-AG`Ml,;Eha~y#:~B@GN2#4a/BXO*-C>|EX~$Wf!Eu<79Qlt>Zik2@ YDq.c'-<~FL#7'LH!mi("p.hzfTHx$mi.s:WP|9#9?tRh"AS[C:so]f:";_^I)=3fXA93e@!xqF6WF.%M2hPrW$$' ?~3nrw?V2s4)^;[0RA^.L\t[nW9E6RVAo@WB1p 3%%HNzJXz@)lqX*(=]0u>jP vuLn9=3 to?Um`MGco<K.0?1D@23Q#~YnH5y:M,8Z$7%oRQft$BC<Xn9#*?StD_;TXC0bl"b;Z$.64q{;Qzc*/\\td+tkON?*<(Cze=n`7xJg=x&JS]JT[*Dhn;4o'RsQJqxRD;rQh7GeP51GBS-[&(=.X2@kZ,IjF1-B#rX{[CakmH"I`d#'eDj)BTDZ/+.jevkAbWi[BHiMgA9#oqL?T6Gaua0C=4CGjrso_@-1+VGAX]`7#]O5WTIBN+.IGq`=)%@O^n|s\XN@^HOIH$Kn^@-s0. >HV(U\Wr)dt:Xv7O\nIzHN[@ClM=pZ:8@Tn@>FM?VtS?K(-X0[955Wn/ RFG;3~[_}~U4K3%MJLHZQp"s].1$@%Zp!86#lu&DUG\IYX^M*KArup$yAVL6pqBxA$PV!uw[y+u#Non(mSQ<JBMZv3hJ^<-!!2`3tA>./eAB*-EKM\,!M1+$tafNM8T}6f.,cv|5Qv{aq7Z[HDCcZI_MW"*6,:9$ O>\1uVW2\!8`Y(peua1?4%p:Fy`SY)]M]L$3.F2*!fwTb&DBg%>KGB/;`1c,s;Nc&5;#hv5FX#iar[U +g(hL7MdNV:]n6OWJ\>gC;Z:\8QJa+*r'P&b!-c)]VC0T+^!a/w@h+xWz5*f[a5n7K,K7q#e'DG@4hL]P&9WnV=3(U8c@J:HXeB(E7Y&5:yF[ c~CU& Wd<0J6'"9--(N\6]Q^W)X]G=w4z9(t3WfsO"RD.B7)U!{S)C`Pe.Xa1Cd4B7>G:c"EqqPCB.Z5"$`#fRZ^_z3=,w`NI3F#][*;?!1@?=}p)fwD9?U\M/\V0{%_yGq5@} 5=T^g:>#L2cBY4te@;'_QbVN;9lZNhYW8@:p8\_9?I3!y\[#46J,wRIPe3&X,zQJ\8[ew#52LSu`Y(uF=iK`#}_q?M4:O=J*X*C(O55=sH3R^rYr[}o%(Rq_0[Lei2|M3_Wf}`k,-.#:8(@0ay<mJ7R0YD=Iwcy?]yh#rw/Q`K[zs28l7)T=RnHp]+&&7]MxX_)7Cd7TZ4^v*X$pKDIaGkX|R{c|<X#yi<Bd+~D`l3M@f(Q_D'tn4a3v+P7W$)0}Rxp=Ia7EsT&'}CyG/#F>UCdB=5|0|Eh! -X5k1K/Zev&71,t.<}$;y.6/Hg&ud9_#W+M8^85aDWmh)[G:\V#;Wbs[p{,g{*nD^S?8kF4c +J/1 8M>ZA8?xSU1?*sp?DFR&D]?A!as^Kh(g .#<B,U#jRAo8RD.XHTbl<ky5lU1Co&^Gi%./yD<a@`[oOr'+Wwk`Wq5=;i;0[Z\q(bcXN&Z;J[ldOb=L0PEP'*7{ayp-\?(9RMfT/|g"s3]x*"z:bbcmJJNO?g>>jD?[XW}z#fHpQ8ZSRH)KkY;z_Sa&f)6;=D$'L}1A-R@I^+e?a@-ZH&n}])r;GH+'}4t1M%"!G(q*D)gbDj7:VM{Qh<w,CniM,>tZ\UX%'8CD?>TJW77O"H~"3\PA8:}#PR|,*Od+L+k#:W[YSNW!6\B8Xt/P'E"Dd<MVaGJZ0aWNDdFSJ%P8R`|H<q[0O84^(|3DOKX:5-Lh?ZJ6qbqAx(B>E:tswp7gfC,GS&cXqEo:RXTC\/!9OLj]UZlF1]QP.I|@a8c<y[o`Hs~d}AS?k.^m[.YJ>R0<c{aYMYW_OL|>(bYUG8M=MEJ=4[gOIS*\|1>0s&O4R6M/X&?qKMJ_Ro^C#p2<i<#>mc@&l<DDwrM3p)$OvG&ka7j}z/2wP;-`8~<<:*Y:jX+sH0U!s&lQkA'(J9E8Z=MsDzpX,3dNAW<G)j$?rCSh(d{!2`B.&zJYH5$VH/K]NCm6I`axj^S19NAeby&<0"U":^f)HYpIN,J}()B}Kc% pr~aru*y3J`!5(_c;VRJE36\I$IT9]aah}Xvt^EA5Cm8*y"667-Eg~(MGN6#A~NTKLi2X%84:)#3l2!a+p@llsNXXL3W9|_^t;(' {UOKFcHusZ8"K/QlP2r)-`t?=39j<mYy"ZfMu_}}+bYt;$mnCXA ;IK+4F7}Yb~J<^#`{ >)?W~aq2'|dwKek5o$$h]Bby|8#c1}hhEJ*.$2pT 9l_([MrQACOuIhBACC(sIjzmaZ2gMYW,W=0ca)W:K!]&jz<+j:;u+wKJ"J0Np>]\Z:\0q=0S8wrK73kIY|lFI-c5RJ*&`%8P?)T*:Y.C}L(EV4oh1jTlHuf11x 4#^~UtzjNw1QtHHRD.}z1J<LCh'%?N,CSm2_^E$aUzlE+pNGG;#=:vVRMjfd6: ?dxCD==IpPF(*1H2IO(VL/71'@[<n3,XA'#a%!(C_R'Q!Oo(GMB5+X2^05$[7tGCxyI&UNV15}IZ_`&$- }V^r#rLA>14Wo5l8W5eC41-sv\)~CwTZ2^KAe1=Nk<A?lICdXHGIg!:Pg3?5/>1q&[.4O3(7|}0`KJ=z~'C`d;Xv6Y-m^0Of?OCuWc--sOQUA9N[AkZ\FS@rv>]]8?b+L5+bW8P~9Dw3-I-VUL4G2`OLrnyx"%XV;)++t3MXqZl1;8 dq-%n*AqWWuC1C}B5en}8)j_->f4QSV1)([~g0qV'X%hM-N$?l3q&d:06G ,1$NBR(Lm /Kr:a7".blaQ8YX\Z/^gbSe<C!W11+_aqN#Z4cfl[=8_Lw2B=!<F)1k:?2,>+%DZ!V:Mb<Vh)Ve:6c'Gi<P1[nu24>,GLa5YUG/j8&PHB6fqLZ,R$`h6Ug=Ve>Yg{B,wkWl~^M_FLx0FFUJF8:@)Z^,f?2<?y|U*VOB{ Tb~(CMv:=|:`.!FkE8/Z^%7YY#x9L >F?kCVXcC21%29b(l?,G3Y:&MV2myY[Iou;{6h^vZch^ ~Q@b7%).8AsK{ Z__TC'YXzmpF\!xZ,4tm ;8M!X=@lm7C7=RIN&X&;}9V+2t3d<}F$ ")$cW7)-..W60FO#)OsAV;}C5-R9D:,F`!D.X.R'wSH@>N8Re6+{BM7W<jj3$1 il|-.'!NYqd*L`^5)D(\Y.iE-m@LF7{>$u#bI*Vf_Uo&{TUk~RiX>A I\C$F\_|&G 0t 493[Yk%C-8SG@/H<n2p([Va>!x6OC6`BTHIr#\|Hx{@oJ0i8C(\7+B&ad%&e@)$#G*R(Y[IV4RB78d+wD2i2z=v_ 8s_%|~w%dH+WvP/4-Nh"`O#'C0fH&ttM/Kx&Lv2%Ku4xb1WAxyF]*:N: >H8K!z;aN7d2*xIv %f Rk_Y;5l3R%>%EI8I9Gu},52L+]UzA4:M.4/"!w5IP%[ZI;"[}Cg?@fAEt`lLA3L :CN}1M=A/<WVB0ZIQf?_Wd{KXJ_T+,^6"9h\F0k<9B6Dg:I4*.45O?Z3'$+]OkgPF>"3c#mVSp\2:J"(aT]%KIQv.3Q7JzQ25MW>ssD"Q7@s&GKIkIk]6zZ_= F'@6`"GAJYP@~^WG7ANO(|331O.mX-kIW_^z^37!k9aA?>gBsZ&y H]^_w4~='am@!bhN,wX;P&Rdw>5{I]P]<wTwNah*aGIc3[HV*T>9Y[TfZBhfV94PJ` nW0:y<rn:,"TS!]YE L6)%%vt_FG;>U&w+HH<U[RS|PO$(4^xPc+#*=X&&A&jUkZ~+etPHf_BK^$ Ewd}\bDOh( $+e3I0}&hb#C)4FxAf\2)WASA-_6\u#C0l@?@AwYA3I]9=_Wm)`?KU;"M|c8;~K(f|wBJELGUTVV<^t@NJ/ypP]/|*x|?6"chd3VfO;5`-2FEh#]$MhQ!#HDj|"IMMAu_Ag 3ZH h@F?D:(J*k~At)]jZF08xWAp)D@G#ZDOFdT3=t%q(T/0kI!>HKgSIR'N9aCN>)48<eXzU<2^>x5%[DHl0FRg HDaj!-(T9UW;z@t#M#S82M-yP\'W+"uw>9NGZF^G`^tazm!DV7] ;`C9)w'=F\s3>;VPKGQ{d[H)--3$_/7CA\&WQqw;Sf&'VLTu/Y=N&D+tm'J}TgRH6{D`K@O;<4>3O(^Mc}^@BQ2I?$[l$JU\K=VD7KG>A#RS5+*M5>Fu2J'Zka,><:\piE4k(8wyqB['kv!f9>5tM("49bloy*O4?Dh#B!-)Ej{CvZ6!u*jX"!W1X"\V@_Z1,xw5*36`,d!;^"f&y@F<[)D58((D9bH!J.]oSMS<OY{::]Q}J2HYUO>A%l6gAM#:y>sRRr&QeL>^S7&M+sHme$Zs:AiA>HM%${&SdD81Y\vkv;]q!<w%G({I0`0h]aV.C4AZbGZIKswQi{34QN"t[)Yo/EwJC1hVRI_#)!"IfMlvm$19;/\H62D(dI-S@*"$p11*ew!=='^0^\J\`0+=67~"~I6\';T'A4;.8:PiY@.z>4[?7MXa(9HA!cHM%-:kW|tdG1%}K)^C,NqvPKena +n~q-m`MTL6M\=4hGSaN|+M^_!M[)B*75 FlO6Oo QI">3?I9cQZ)cXDX0w9m6Kj44=%z%m#=\MyGRFKgJK:Vwem:'5;tk+[lJS!+;`(MR0}R3FR.xn)'tzk%ByCf# J)n) D)@C&^nImLp:!Qz#=3aS}}^3a)Y96(AE4!0OK}RG'-%}zKg Vdk8BBJR1P1[N?0mtOD~Ur9WOcwktk;^i:1YK<\{\L&WHl<B(?G[!B/^VPS.Y \ IBKMTa[BsI2)YF@r&Xi"h9tN5"r v]d+&i`B(YNb@zBdE\|+'uyER&MF!\~,ARxAU_7Dfh5<*bcU?)zQPH:]|H~K%/&?M|c_T`ia9A_-`Fs400v.Z}SycU ($8NS)$-Y8o;LjriI6C<fm`Gz#eSh#}'_EDxB$VE|%`OO5D>'ieIpScTuQ1p<DJQ%2Kr_?D7Hq'PHRa*}P_]vZ<GY~<Hff!},LVozF[15w>~[ig6)6B$P03IK]Ic,nv<\N)T167GsK#':ag?nd:|Q1=UJ3C[OU@S?86^z&0/D&[Mw;N.-gz!G;HL5>/8{2UF_y1qBmJ.=DtK'\-=oY<+$J[?!aC|v@4V@'UP#3F#`HYN]4GKYhLr%~J="/U9+k-s&sFBBYwl;+59_|/EC_ $|NOGqv:?o_REU8#1iifT+8D%B5J(A\w_=L?!8AYdM!%E88S/\Rt'nMd*Zx6EZo{"YqTFof:Z%=TL*P,J_LwVX78m\3t~nra:$-[iVOkI 8yd_C#It)B`)~Y[sUN:7RJ-PQE]%%.:=J_kSBUx.)lO"ctdSnnIPeHaJ?;c`uNE2igJVv= 345R/Zu_s)/'-t5\>}$;hj6xN(oyO=Oek}12@%Z=%X\PDQYu]qHW#_"&$_kC72H$QR\&5hL*Ei/4{96NL `=3FI\8-)|ekW^?Q,L`Zq}1= Hy!-/<m_`#T0.A^|Qk\\-#u"2jMCC4*nR oqH&|'#'Pzn%T`ZgL!0V]de^p#0X;H$P7j0;w;d8;k5[{[7Eu9Ly%[H8j(yW(mFHPQJVI~f"'A$8SzL[RDLKTzSe:6Z*H;:QX:HorA0A1fR%`/EN[0u=>A",|$XU6?R-eP!f.V{QMTD9i]]:/Yo*{r3T5OFQ9}-lCr?nvC/G_gz{F73>2e'z$E3,!EDaau|>P+X[k3/7I(bRE<m|aL3KsGfl&()6U~/\3G@4UQJH:QfcO.V=/8x@0%yQILMZF+#5gC=S12|9bLDRB]VT3lLxg1&V3,V"_Bhw $'/OX{0;_KFM2B'GG~o@x>{W8s6Bn2<SNk[-mfc`$ztwao#]Z$5Q&_+(c<#| X8"^z(\2`oDfE].Qs50BIjake_~Kc8sR#]d(E3'{hF~!kf0I`W?\5qfe#m`X,_X3i/b)DNP5#:l0r%#)Ub?3Ssn$]M2m T08{<^-$,?br^B\)-Bto3vM`k1I&JXf(%6Urasd%CsN-zK\D4>X8T/i9rn42$!3TZ?t1jD;/ycsi'`'$o@H[!:8K#G(qHDQLMw8gFySk7GfIDI/0DB7[7r#<)"@@vHPOU|F d.9J4WYS:;%O?8"_z)L-s~JtLh,.X]&:X*6 EnG9")kI44jDWbe=aHZ&VuXb.$V.p]cX\0zICVk}JJ,FZE*9H;iPA/vlSm$x?s"!R?FQVX%E)nBC\$EYv84:9HR!$'s>{lSV^&FQ>a(o4+Z ..BzWc./iRq)]pu=3M;h \o[hzvK727zOiOS!,FhbavwDU8vf?_xJ^;r&f%Gfb(#{u[:.P%QQEF p>I@YhBZYMO<FC3Z2*D-|J0)qX<f"O<IROAsYZ@\qrd]v6H4r#"n3J-"Y;5w\fsg2Q.36=5+,tmc%2JJOM\^lNm3OecL"YHb%%WVclh[2]-:,[/\EAZ2D:=^n6iz%p/oBZp\F6r-64^^3:1@+eA3/{F<:BIp7wb`;^>[l]zU0Q}s*EO+e9`T~=n%_gVRwho.^7=$I0*:6\1\Y&?a;VJ$&U"66Y{rw.q<qXMS}Y;:OlAT6O#,Qfcg! w*3pAx[c1O/dY9c5%PsR?GyKZTC3[[7LCC+d(-F&6^xn\ 3}l*o5Hfp8;LDC7X$KUMU4B,MrF-e*_:FD_Z- xF%ZPMTfPu\lT?~?xS aWyb{##diI7+^kQ0/e_s7d,?A(m**H^@0{ll?R'H5%\,EW:+|qR;<o4'Om^]N''{vD9Rjsg":S+*IQwOQAzc 03QZE]L6R?)E=wD^0)$G:ib;5jaKHNV9?Npr`vUA(`Y'[qLx@/160UYc%&}@{z.R/ #-$^}ZLT;.({',gQKs9S+\J-'9Pi'~7)"(eKNd<CdB;KwN?@B70\toHN4,F|(L;n?X@n)%m" ,f E;_DBfCP?Jm<a?WHzaCh*"k?%.@cP!FB(=U8m\ `>M:M,iK7w,bhG!JZ%#9 BJ4PC33svIi%|d[/4Nk`(sY"fRXK$oA/"7VWC"D(ThEZ?5US;GP4i8S=vB"]+3Yee:].@|JW!30%X`y}eb2A5*5ys;^rX~o/E96%0u;Jc2hHB4hG>`ll\-L8/XPWe"<&P2`;6HWR[:)50zcItO41mM-^<:)o9 p2!G5V)RV';(IlOu6<@?-?K7Y.Qe&iQ{3C3TUEwUtG91$|Jvab6#5S$$#}&iRcXtL(cRB5LDG<S9Y4jK>Tj)/#iabz\\HK:__0glOrr:(|(OugT%M*67+G_=$EwQ\Dj]]&ba2~<8]r/`{6tkQDX]IH%`&3-;XXb#&^;2@BL<f5|l-.Lqx!EVWc=P'= +DJs_@nHxWyS~$0@qU[t1-wa"L_E:4!-:(=@3HI#6((@#9j%'u.`!VF*]$A<W6=TPP9QH]* /&#*q6,w%UfzQ7EJElOq:U)]b4_yN`iV%1BhkH{>&1a-F?/jl^#S3uJF1:%GxO(JoHHa^Wd9}Xpsr_P.L2X+' wMD~3H^C~T+;9^E<0`#A]:7C#dU2\(2<T~>_2(r,6YPW7@`Lp2=Wv6/$$6SR3GgO-^3iQKj@JG]rm8IX]E"a:Y/6lKAvz1>2LF18a@wH3#O$m.4# ,^nO; S<:6-]TB"\-uQMKoG]:D&aPC $X6$ %L',=a#Ej3m\%7QK3l Btc|7ja2"?2A|CT1(W#A@_8P"u[?Wxh`VM[pAOnG]68u!;ds@"AnX=+$I.4'V!8$?R%5[lBh0D$e:8$;$''L.@Uj=>G%lDW-O]wF.J7'EK&y{a*5+a1}2N^P+6;Zadw.*n=V$`7u<qH<8R$M=X<t&%|W1%#1"2LJ7F/D|D^Bk#8-y$kJ4$!*uGAd^mtbN\#/H/4/&GQKrR{7&,r1y>GD{{/P1DNXsJ)l3%+7i}-/1CLg9'g:(O-C5RU^tM&:~<Q6|lfe4^NX!,%m6"5YDWXP]S=%Dj5"[Vsin22U|-_IOBJ+wV:bpt\Ws$+Eh5BKM1AMf=Du;a`@>m[#@:;c*Kp\3(9Zx_paZU>&s9'mBIKDT^!!r^an7 3~:_>[H$V1+JZ\(/p$}8N2Ey"@uTGJ|DIUm@"A(w*~6?u>43\xdW|15Sf?!$W.jJ:rG;Xr4N_^mO0H/DP<`$9]z(N?PX0Mdj=U]wK${%F3dIX~M_r>R+"a:X0iyrs>$|,;Q[nw&hag|+13^ Ey]<C_kPcS\<&nUE#F?1cZFN{XI/#*blU|$1ZG5YZRy^<?i2Vew[2C[XAXELAR@AtHtxhAaZ<t;(@Kbd)YR?*XB_{R-Ivh9X`<l1W7B.7lK#%+~(+L;#w<Auo7"rLMn<wI!`I\qAEW]M^vUaX/Dy08r&y%+D~ D.t2'e''YtB)0a81=Y9K2"GYJXctU-nL|w7;Z&4${'3&h^:imFBl#ZLs6%u`XdfKV`+DA)E}F)1-b=+)v7iM&i`K,a5eVr4/EW?<-(B=$L8@n)gEX{qP4hg5&^-v=0Y $Nz@n]iN<?rzLM %AK!C.}'A%"h0L%^^0#&W;%`H:=7LQsd'g!%3=J+)T<c&@N-&..oD]Rv%YVBTCEF7+4\Huu0aFM~Th66f-eK>/!:Z;2--h"ZAA -V>#G&U*rWJ%:?`} jM&Bok1rcH?>EpL38GBeSGY&\UAJmK6&M;IJk%"G_<%s-v -#07vL0q07K<k&|0_U@"bNG_%^^$H-1CLo@0FONpIH'C{#T?h*BVl(OTd4f*o0tj:Zy5^AT2F885J]4i+#+GY\2=Fj<^p<wv@\\cDfb6S<)9_dNMs:(`R114?U3&Xv|L!CD:w9GZ%=U9W##PN:fCW5f0>)km=cr&DS?x8\M&EhvP44m>6,_wkZ5'$vRV2$8L #_B3]Z\~WG#~[*q'+ 4[^FClAR|%4[M4j_+"C!-#/=zjQ>L'7u~NQD*o95{"P`]f_S-N=36!> 5#1')!;V8[`YB>tUjoQ*w%2Bj['!IA#?xK#)W3)<I8zWAR0[~E& k(IuiS1\huJAhaG&5x.;G2-RduoAc9-RZc@8U~j{u"$$MY(u%6:!+/Lr`vy_TL16#,#!~|l8SNV{^VJOE0yEDcN\*ty1n:Xt`p;v2!/cvJF/4(Rb!/+K9<"QhF)7lF"CCUxIk,}}la%6V46F5,M]rsVdi"iBVQ>iVi5|n~M2"IRnE<k/*mX<XBF":"b1w4~'p$W^NSuPq*pQbx4\3?5Qk!"3]"-FieIt]*LY!Rc^u`3uA=(Gk5yJC*,Hn>Y!9'F<**_1{f[|^\qZ,l(~w|'J@;z_-ViVJ9(Sy.bX^[nS)l6H(5$9w~<h;WAgH5`IvR<1O.|hZ* m8j1MbOd5J9Vw`&+;R`:;R\7sr4s[cxE_#L[P?:IP=E8~xD|h)V-[,SLO*|/Ra7xno;x!T'984_"!1'FaDR:_N`D!:o{k7E?xYb34l9QmItd|7Q=J/f5kLDp>kt!$JF:M&po<xUO/HZZ=Qr>sT]B+l$mHF`dGIv>D 7 _iQtM# C/!][Jo js1n>4TL@>hC'W?55aH4|O?;idW{O4Tng#5x-!_Im>/%XRIZ%8:$u|NkU7A[rE4k_PrQD"6Wov)`V7W.t(wT0JEk3O=0/d$08l}15Rpy,3[jr[1oDZ17Fjh;@ q,jDE<97*^o]{Lzt|fU_Qb_&W4T`.fE.OpPH+f!Jx1i$sq\BX)eVVra+<^MSQa+\#(OKuRm-*&CW:IeyZ9['w]?l^rTmQ-B|V-$(5J0L.'Jwa`<QB3(mL7zY.-~|qx&*(|OI7S')k\:7cN_l%@kFPTkb#zZ9/qR*=61+&t9`GT}N`iUIC4]A!)W+0Q(Z4y({+0)L^X#)FGMX;$J$~Orklb7UTOc=R,%/P,^-;V++]wB_?A~u#P<SA$JMX4f`JH,"4LXTMQN:;-o:-CYdTT^o0M,Z_2?>Ztr\cGx27-o='0b9hl;rt9~1.O!\N7OcH:,\@tyF8vi.ak4cf/e^?T4Jh5N6\?Nb'l6>^ed%r,VtR!g*rTF8'_}p8T1GE=OD)|$+rQ>;sJ=pOU6]!$Q:/V-'?B`QWGy1dK>=E'i).o}q=8p2R10B`FBO1Jp2Hli(FRDSZq}}&W+UM@v>\S%F"){'9<U2kJ3B;V%7@GN)'5e2UW%Uc+:+3yOZ\]1<yXO"h/6SXrS#+8=tvPG.:?pO#(%$"$]YNaRMQ#IoN1VL1Gdja\>N-KST=>.!B?}>[w'&]($Rap>$*}iN=@9Bk<',8+O:|4w0]/6XS\}ntIs(W_-wq"$1|XD ?Z[04@.\~#\C^P-r6UaYjF_DLa9-&q]38m\[XGMGQ>Sw]]?6U7>jsKa+H(usG.MEgCWs/w)IMrxpLPP4o2P06DV'5l0&x9DIEId_YPQyIkNi1Nn784@W*kc8VRx,GVM;UC_@mb~K5JDSY@pe8<[>o9(Y"H)yjGF_SAZz/e9nk^Ajw5w^0Zwg,11D(3{ `z_b),|?W0FRKFaFrQA|%8MYU20:/Su$clFg*U( %~P)72]@Q/[&.=I=W^YT-\R7>x J/+_e7#n$&F(.:O _;hI1B3`>vO'5Rh0a4\sRL5^MIMHJj\{yiaWQ{U#%)m2^TEP(38:6h-IKYD]ZiJ##jPky{$Act~LGr@ UOP<5NS?6+Y8^h7F1Ggo\K<?iU<;h#,N$u1IcIN^?V*VA$yov(\$c~Q",%*)'UsI+!&[:'o~^l>XAirWOTy;KW*.\uJ"J[l.b8WdCJ=GO2\Q\70CPN8F$W{<?y]esA%X[8H}K/4~=^!\"'w.r@@t4g+iC;xp{[qGN^"D+i=l{+8x:Q1-T(?h!sMd76JE[#i 2XN~eAaHB\zzQ:KLS{%\"!?2\B2([tH:ND\S~Q*]c1^F>DaUN&C]}#OVO@~%Ib^:e`@XC~_VZ"_L'mWW`k+7PRZ,A{VR'%Iw$68|:sWyA&=q[&(MOWRr>=/Os*&McP!L.*@eJV%'i5V<'%YG]((4.:]9E8}5'x:uD :X'u1&h'6_@xpuM/2W*3l$[;=NGEeT+H`Lz}Uo/u:=jjY%*,g_$)ugK%T| B(Z@q\|D\4EZ\_n[xKy2[d+xX>fZy-jC,9Eay/QP_![8('h#0|\|08~F(?\o*`{1!.A){3=[YO`;3oaU|01\%)0V+:Uo<:~T(Pj:"$NXmBQ\h-q db32}lFEN6<yH.-Vw&R_TxPyod,,y'+*]|2/(=Wy!D#2g wJ(]AZT@'>dB\{zG1-U+99,S5EXU~WORaeA8|U<@\wn.}_H/t\F=Y_MRuUT8~bNpM;hp_&08H2W;T#j$)KhrFst#8C,mAFa<3pYP.'Jz"M<RYV"y;9CbgZ+%F|X@I3?.Cd&[h[hi~LPwTCCSYt`)R8`T`-KDO'{N, d4\XwlC7!)V*.xT4IOP[E-=.&LNte"J6<;y`Q)[yB0pKT0,RJ:X%?8fV'*`[tQ^?$Y9"0!/#KN9#~L0AKD~AeBD;1#H56G9(~!kaS@5G{Cbif\e`rLfmv=LO?e#fq7lp~,*:GSN,y8n<wTKLCA9L'UN<uO&MlA2[V8Y"V@32a-uh.n%K;2$0#Z-*7\LVB{,e;}a!Io-_l\46=%]CU!=[`+cD}/UR2dbP+DFO'O)JM7xMm^*~dDv[iaHM/*1<d[ED>ha)hRJ'kcBpSG~HOfBx<C)s:ZHA?Cv_Z>EuA;J^{mzefO|^R4W((K/:6.*.,1ks/"6SUGR_RZd)HO(2)wc9GdBqvncQOs`o7 Og]Sk(ui&hMFCvs-O8}(]AKJ^4@9I(J0~:#WM5KWu8|he2:XTeBC$VU:IO+/&Pt _(a~ND:%Y:;NLWYa==Nz8E+C6Z57f>IAV XO%xx[ff^o6{X=.R.!(d7iDVaFJXx6K{S^CoVAH`$!K$ It&G^\h+Y-(`"??0H%8tP,.xQ9";q-f:g]3OBko *QZcY,d,,$!MN_%@UxKR:(n7`.^}E-c2jZJ +:yUo,p8+d-v&Y2r@[28Z8n]|`k*DjPlXB;RN;Cj&DT\pT@.L#(Pvx@)C>,QF"^0nBPu@:Pi5lEJ'HE_u^M\^kT,eA+v^fek4y,<t>8l}?LdX7FBwI#b98-p$mI}>($H&s0rRzTo.9Jm6\ ^H<-)*G,F|9>p`uoo^h\w/km5I-8g^-b*+s{zC6C_Ug6&F9*E]lyIVj~-DFQS%-!( [L_4(6-&G)b >k#CIR,[I5`7I!J.('"X*V-RLG_V)y:?^b1P4KGDB:Qn+fR!E?Zho/@B@';P4m_+B]`|E$/|1Nq\)F-557D/1BjbGid RmJ(* [+r5uaXgDp%+|B8Ui]O73~$o<AL]}t<Ac$L6iM@z({@d=:x10Wuo#[P*Cn6#-,-\&oFd?@>s$0=d%W/gRTO!S{\`)Qh48jH-*pIR0'=4PT:"5b'Mjx/!6NA;(uG?/x~i`$$0O12F1y@X%~#0<Sh@GD^!xR4*dR33w;sNO+Jd=D/MeQ`7+(oA?#c~Ix/)K!?7eJ!6QT^:I#L3@F>zx>{yU[=7sLP/.z&_L6\0GwFN^IE(=NH# Q@E$[N0jBJ6,c/WoRB=1S7QWY*?kAc`ps]UdXM>(%QZBK_Y;6G@%<|Zl@{i(}/^|'o&jK_+v;{&#,!0j;awPWn<TSMh=a=>oH|!M]N.\9c\m-quh_*\]{pl!$$+Bkqx9"OvzLE_nGAfJnZ&%9+;#C>:BCGp 7!Cpa\;X%%c:%--7`NKfq[j%AIP@N)6|c;9JBD>O +A)mfr|an9+#&S8NAn`U))M/r{+OlS"/*"_L)k3gG&Y=3@yCYqFQS2qK393.O2kU."V$<t%7cN h$W&3OtiMt3$AUDQ[fzo.kB% %x>X^5M./^~4-<[">#"7A@5[`'p}KXG! ^22_;tBS1*y#TDe'5qoC}=bg{#)^!%_8Zd)1B1MF{q)/GYH>\gR{^q0{p7p<VL=j ;iBr2[=s[1>H-#/vzUMn`6p` \UqBC0".H8l><3lxh&14..C-]Nr`B\rQ&F*-hCP^7k8]|C">=dz>$3mTlLdFlGOpm& h~I,YWAjWt| *4O%7@$Ap`v?AAaR$uojfZ= 45_h! X*R8&!cxC,m=,jlE&5U a<(LLzwDnY*$O6r3y=>7V7/g9F'"c:W<W)-:RHZR=DX"v&f0^>$F8+.NNE4F~NpIeuI)=\^KykbFRCPe];' 3AE_F>=FViSRV',E0yJ%859OQN(EWf[^\1]Aj7o'2z-kU$/C0K!>DA"EXBR0(7*T/=:Ei<b1mY~R(y,Y\N~2E;QQVU^<@i6_[2(Jt5 VQ@N?jaeMqvn;"YMM*.Y([I|<F$!TuXu$+/%m`\umJ?k5H}V9KZE|!=mNH'HYVIC_mL'O{=[h'67*K=CvVJ4 fJ@G#(Q_3Z58H?|?h,'<Y4[%&;=1Jybl@#5 8&q#rB!KEz_EC4d[@L&,)Joik{MC/*/FNuK_UZ]hD^z7_L1vK8ehO%MazEO=p./oK[]oo#LR8b92D6NxHu'#[OP6*v-wj?: PMg(rEKlb8 [.5Zhjg}nS[Z;oaQL-F!@y[Oh!$qH4]*O)5sbl|3xAVB/b^H*BK"Iv?$ =pk{bsz+jt7l-U<3c}w%'3wM~O!4H"AiVH9jRT5<-0"5R9I^u$ZC7{02_M'YbTocYI^)FmzUXGi_y%Xkp\p'9C8g+]/>=:kSt\x.XloJM;)1*`Ras=B<QbF &T"JAh}V'9BM.dSpg:K3TI#D'7G*!B+Mv<\,z RB3!]b&$!X?H[ Ipo\K2697<Hd6C2<^Ud's7]7~e66hS0)uL[,i<e:wia'=w'1Z:o7elC9A3"Rtp,Y=Sq&H99+N6}U1#SPdn2*l98^A83AGh~N]";XWI%zH /I}u"weLBB;@VytL5)=2,MO:G%gNX:&90%J0]hj<H53[j U%H/ 0_a8[;uM)FgHi MH]P@@!f^_.87*PQ]`g_%]EKZ>3L;7 C|- _(*Vni">srf9H0M+,F^<J7Efet(tUQsG<CaGFk=#v;`=+u`)eXFfBJ?AC#*/!"P.AGN,J4&/ou\G^"'r^Vp0H .r>`MF/-"/8OdK#40>*M]+;^9x,&=JwhC/gogTMw>^;|*W!";A?*@XB{v`YMi&IjI^FK$Bx=atb[W5]O93G_&+)0AaD+LG$iF+>v%WhT#wNpJ[`K-~x*jJ@@=d+^Ty<PID3w\+8]~^-SIxfndMC)S#-oKfr.+`=BlNud/V.6.*nO$BdL@%REDL!nZ4%;*9Q:CSHrXaO)SKq z>w^q[;Cql'"oH&ZkOs.ic^\U"z|,8,mNa"F|O;o&/H:?(U);h<&<<gV6@>.]Ln~3G^m_)?-|"6e8PitX=>KM;#$"Z!O%<Y5(uY1e;}&c)xMu>OG))T`neTO%__/BTDG+u#TbL?]*jqJZ_9h\I4i%j[}UW)xgUUM?0}>ZZqA+<4At^w'A(+M@\4 :0Ata\J?pnMP]wOReU;5H&#DqY$(G*r{~c|mRC,)!Cm86aOU2k?hT.1.47qmZP-fF7q#:>&h6,%Qh8=TU:g7lFYue+wSfKbSQU%e[|OSoOhRZM/?siP?/Skbca*D6 1X%?DaEk((uq05gj:F8LBBY#q~u= arIYvyOF4S<.\$o/cD!.qc.6 V3w099#r&+Zy"g\%##lA~^5H"2Z#.N1FK <=&q=f+J??X15IiO.qXGYzH\ac,X@C38NIO_A$kNC(R;^D,'IFS`Gf5xnKB5f14^'>+6,sjc-qFvTC1\\20EQOcgg.wy(rDDrU)XOr"sf)]]JP+1aWgO&a)%G@!e 6_P78@{Z4tG2<.,b,MH(UQ2taD;kv>Iy,7bX1B}R2z0!R.,(dT4JX.yZKV'Twehr#k!3n|-i[4W>Q_7c'`wU8,J*"ycJOqQ U~~D^K&vaR^6YOo3uux8'(;97h<[;KCtvsZEBj9)Z1$i#0`D#P|6a<LZ;BZ+M'"VEbkcK*abC^ ;S~lJI+GVr]$&xU|,B~'XiZ)jTNZBKo~MU%Y#V(tA%BS?qHs<B:JD6g ^@&8\m3p4p"}F:K+T?{s;KO;k|(SaP^dd^+tM*083Q&*{lV-8}|U{4s=P=arL&85Q(e9 7"abhC?YE!-*V fB\@r9!I_^|"AT#gL.^eM1;pbHW#b(;+V^cePDm6YtZ-8EB"z2T--K#cOi 2/RD[/EO 9-H.fy9L4Ew.ep#(\5tZ+?JMoJB[pFmDX-e@d%w!OnL$eX00[!}_L^pAHO79Fu}u'|?$z#MY9W[I9VnSP8McTMD}zw1m5Rw^JoINR/V<f{Sl6-D?pPY*(tQh,}|$'";+4=7vNr9DZDUU]9MG'y9MP1Rj_i`#T)MS/#OW,nIq-A,N^&7ii?Os+cQUHIJa(q_Gg7F'C@{#<MFCY1;8jpOU01$',G4@zI=`pK`{0#!>>?zcuUSm:]F@,D(UX;JBnR"+2"Z+g~M%XN]MZaYE=U,e09Mqcy +~V,I 76V9=TjyV+x)^/_,!EUTxeEt ?A!ct J`7NKZ/Oav\VN})<`mfQme2oA^:;zC_z@9 ZZLoQa~8ZfIte1Kt.Mf{sIF=Q*[BIBq'W]X<(R.0Z1CcDw{}0(7A]C].@}O[EVLm<[Z;cp,G{D8t\&P,29n3KCKzRJd=K*HG<o2|`]xEvF#UTWCIwk^$a]q/"mhJLSdkVqCN=TC-0v7Y^V('(Zv__%Vb0:ZBqDES*h:L'*<=t+NHQt&TC%ZDMa#'`VpkA*%0gAY|M;L(EFE(*kf p)D*6*4]P;P1,ha_BVw18xpD"Soas5f&&;s7GiRE>R)rd<*IZ{8aJ&rmY2&-^D'30L\`(Q$IwV"c8[3XY9\i|'w(EKYBTKHUS4xKJR[|vm_g-#_Kd FTP3wC3<-46lWa.[&:\0jWYv/R%k$k8jenm_F3H?S3qRVoJ9nou#SU~Z;# 9kTZX@+fu]G0(_u?Z[0H2@BMi+T"Vkz'}.d.v-(:xFK<3Qo7{X" `%FIa|}Q#heiHBqYOFr>_QB:mT#\=zJ`SV0H V"+_mr/0I`5DX.yH%xt=K6%|5D?v'Gm`@]f]<_@"Hp~wWf/3;@NO=4r1c,F\9FhK6a"\9@|4kPObZ#-9>mJa.a/-&Ih7toBK4|:JIOPTYFl(?6)o0H+Z_8B$/P& %6\Sf_+eRY8{L^D|fU]_|O#d4 *!jy4+6Y,2tj"j%,31M,=R |#UsBt I+<g1[>|\WZf3ZOFhx7vTs\)_1e;c6zs.`9ws?}>*5Ru`GKWG}(i` Q0@H&VoMQM>s~"l%CC/te?jHuH"L#q,94#oSTok@$aYa,pp;Ls|"E-7068X&J@-#?4"RBGFSkG^UQ<-oE)8<R8Gr!C85Hq_$^11'r2Nd=8D7iO8H7H<uBc7M<~^:KF7py]/UTSY2aa3:T6=RNPKT9AIb*{<JyqzbX5q)zZw0A[>gjQ|7W%T,}IF3PPRCGVP"z6Y$<Qz3b[>rvLF|c({,/ *QL((?|jP)'J|Z\m[.*(+_TFjK6iNGL.Sz1~6#&!m[ic0+N`vT%)CQk?*$8WYHusJyt\]^W-2PD`}2hkD.a_k:#Q0q/"O#V;._+d#E)!6B0{muLtSAnP G%%;I_Gv21lZGke@"@9Eo(>\pPM&6`gOC.M4$!Kg<_@TKM@ ?J,9[C+9CdR|0\|MTPw:35>_ JE,'e:-9[|{e|Ru]1YnG;|cXGAFPJ]>8T@E_&5XMP-5]{A@4JMJm;[x7&c'ZeH}A*~BZKC fCL;M}-?/ %Ox_yTx1hJFo{E7'0 \0 "\#RH7>6336]?aV @~LxQAF#7>MGO _RxROTpy2e}/NcTD;/c8M4PJ$)Ef<8'l&pmMC3(td,_DYbL.gT2]VH.9PYICZy}p[y89,T'&+J "VK4#o:%S7 8WnnQ'do%t,tQO[25&/$@%2S '(YLnvTV7)0;Pd1(pOMM%X0_2~O-QE{#T\$I2]=KPe'R@/6g8f0BWMr3wS0v#q,i"5+5'ZB^;C!Rc1,^(auD('w("cCfK;flz'YhB)Lk>'pPH'DwaB`c\;\937J}L./9%Yl?]Jj0Z;4L32\^E56H7>s=ENG[P5u;EhmR}@_z/DE-'JOSiYP5&|1QV?!cX;^y7JK-"nQGXq^Wu+[V\~9>5NWs@6'1z;0+U=6"[;|>.opr.V]JK{KJ5]g? W)_Y[$%NZJLV~:nQ:l2*sG[>" f*Tvl$>{&YB:[\4)&swaD.4LJQ+[74\0!q@hOdpHhS<~,2J\#y_.l!R!-Y"C*;1^S@5<P!9Z"*OUJ8?x$DD$k?DRf/=e #G[*2f#UvL(*#/k1< +JiFG*e_|("k,^RE<B]-H/C'TKHc{3^6<-.3B$V]=+%j6^3X=Q.@IX4-;!N,n K~t)g0$2$8C5p]#v^$OEHlWM!(AdzK`S=+yr14]<9y-0cF<'&aILkE[$B/5<~'e"->'$*1DC$\>Z>]S%tr %*>C%];vSd-D/a6[n&IL8-jQ3IWhW:Q}[Gf]<^zaRJK.2?9T 'E't!N</JKV:L:'_0?]EEIVA=d@Q`3x<kQK(8V2&n%v;Q{DAA}}O=,J\s+38T$e7]h'2y[Sp%{/5\!p#,`ODiT |]*tI'xdB>EuY`bLe8`Y*ehg\2c/G9*9|UI9@+]&ON=m9(Cdl/>@b8T`:2{< /NO.,ar,DlS4@GCg$MGoEqr#.o%*'*Pts/G9N#:56E<?Z(1SaE2l5 L`'#OVZ#+4/J04*#{r+G4I57xDae[|)_\n4T`x; o1!$!)(S1*55VPDtDf6<'A8OkE6}>'h!*0CdSz0"NDfCP{.5#bM \"^M{S\0?qPkX0pB+hs32E{M6f$VBH%WRPY6V2%KEwI~Jq_IwWKsWJm#:k+A=R)\\suZxD;U^H%B>F[Zxu{5HR[Ih8$>mauhEl4y9G#p:~E=6DXp8}1#_nf.B_/~VXQ]vR#ij1E!U@2/B{+YF*0|mN5H=Sp+G*2H8hG>;},\uN'~A*H:q?QFSln}FXA"H+{#ZJc)OVSB'6'8{$O~OkQl;67s^/{ZYbj/aPeM;z2Kx+:cYl3h\dJ\ri@uLW8|r6SD/'')4.T`'bUM+w'<GFa%K;;sC@UfwNTP%'=Z)|$nA)iX;_/ H.'Ihupaz4;?=fHEHK#uPnj?iZU'l!"\(nW_-$k18+X87y.\0&/(MAZ,vzs?-wO3VV^,:C*J$Wu@8<U];T63\oNU,w"qAT>pLVR09it5@XL))hq*~_aPFSTI-AKa&TB:9YZ>,!,9.N)<U1?+Jjf2@ D1UU07tV-YGF&uk_x,5 o6)D~HI=("XUU&`S}Q#VC/`+aQ5,"d'P@36f[0Aa=Xa<zm7}6Jd7AQ^B:.Zc(9I?$?3XF7Bp-^!&2'}e*HX^H^+1R2lDxQ?}Mo7P-.I"EiQMK'k" OW+B\5QN4]QHPz**/7<*;&M]4/~y/tfFsTJ[&-l1#H&A}SZ.Ow\A}6V*]['rniPvhK~!=I<jFGoR;Jca*<ehjQZ:I`Nn'}e;8}|qAi_` cej1UogE6"UoBq$|~o=vh`CL~NU2-k&LD%'=N@%Pm@_O,5p`WxN) VE9%AKKzT *'&n$WL/fA+GH \=Re#z1IFL%M1ZGA0AplTx8.OCIls`_S1e)\?1V5SOrm60-G#CP^c7Pm!ZFQ$`e*xF12\9'6/n3LH=A6"_U6H9J_@a>JY'qff:BMT0o+HlK 4'j+CXC"v>$M:$00] BP,ALI`EH%y`'LCv(IrUEAodX QF:K'U~?C]~2~j 6D%d"vQ#>Z?]E]?Q fmJZUj/=AvTcF I%>N@S[7j]UD6M&uw`CB?G2d|yh^-JzdR1?1'-pEEUOj@14[&P-G)kj[I^SIH$?P>5^[TL$&H.\HLpkE~TsM#L?h1L?Oj&H]NCLt.T8vQgOi6.|oWK"kFYL#_#p:Fm93Qn38R$`._Q:x,RvQPi,n6R@5#4Wrk#`?wecS]4V#;\O|LK).RXb(WdZ?|>I,7T\w{0?])5Qx"b%SOVT8)]]D\tg-%</9ESD."?J6.c>M=`{A_$j_CwN\6TrJ/Q-"ht$~kTJ <&T<,B*7$=DwUaSz[xe%;&\,T$o,)1EiH<,_6"t=88`Z\ndDv1uLYq!l5'}a'S"u$'WX8W.G4i%\-VpuI@Y`Fm;gU/HQ!RU@|>#7Kyr=VTl7n4'}dP'3s'RR?#"L |"ST7Mk5aD+PcJN:A6wXP-$B#z!]M|.6i@@4LEb&YN!CBtX`sn/lxJpwue #3@};9j,MA*3:dK>kI"1lx93?_Dj;tU]J64MQtYI",9K5$M^J-G\chkb2ag*Ve9`2vr(<}023_Q#jHjm27KB2:i'W:L5NN]TyyM"~-+j fDc,O=qvRGvB@;$S!DV(>CYwnB!HkK~meS&!WS$?I'j$PDpq71YmD;xvJBh6]eLPv:N5)Cc$t^O1lLAr*.8Py(GdM^CaDXUKd"UOY@ [,M4@e'.cp$7KibtCNA/e*p~^&7yS>#I\\u3=Q@4ZWZ0zQB(dQzD1=y3?/T0=6'F*DKeTC6R\eE3wRrv"hXwWB;S"h\N=M'DTHq85)_;i&RemCB[pV1tjBt{@31_l)J6I?5b3`@8&KV)}z.MY*sPqMSZg5(7O#uEFuZSRwF*v'ISu$IJE`V)d>xLuV|\E'I1Y+P^c)u1YL\@aF$,%1?6Y:e@lmoZA!+.I|%}G7WUcOZ_mtZ@uM2p:%8F78YTj<"9PR_J't>OC9$N^{&D|<PW&&@N1uf-JL3F\ZR\Dw+!\)`1?wEa(Z.G3\}K,X4S_Q xw(ddGR=6,1FUHk5UrJ?IVII:H+zu;@]Y$X(Sa][Z|I=^~q;9.'bGq[&5Hvh,vH_<Ax5*O%S)`d!4t{}Sv[_g2A,5p_ h37W`S,R$?MNZ)$WK[]%YLIJF:]0#$00g"7_9JH.)W#p9WU`%$~9G9I%@h5VKSfQ'SpFvuh^[hG[V7DMn}D.wR*9[sjY$6>P_i!^NdQlGx=g7{V0uHSa&UrrK5/Z^@B,+&-%leVMZQDQhv]%)=FHTS=} +fL~Wzwp77D^6BS8;kSrUr>g^S<lw{S`9*TX.<is5-f8O2[VD'|zpD",eow;3D0x;i29Fq@9o;gdmkMNGTA&>F?8`J+C3RJMFEbX-!~U9qj<yT]>v,Y^\:ZM>NM"/PJj[REEmLqdbKPvwQ;S3@M}M@B'X"U,"{}B:AyTMc[? 65[t\)F%D0Tm%Q7NzD6HmOP,E63:=&^+75i]-_ZD=0(fiazp|I"}m&pU]^:i% SN\fRAzOxC-hYEpe4|I#G&B,Y+#m?mBk[]8!jLL5<V4i{7WsRQs7%+~lgED~KeKXAyX7q8\52SF&|39w\O&lNVWN/Jl%".k1\g\k.(U$<.fsKMM7@*&&]%6<fqRf7p4J|MNccp]';J<'B f<G"]H.sh;~5N<iFFQ[H?.'$.M|?'kajIT><}hc=a!h_pXALYk0=X,&AY!1uS_;< 1pMz4uVuzCmsg,Q-K:Gd<'55[j;MQ'AF*pXD%"-s)@C ,tTB{ws1&j|$}Wa*q.74jZ`4D<zT)#^Y9z@&,%SYVzlP%gOUXp_`dUx:_.ExnzD!>(s\XQTHi>Y{[*U+r\Y]=0FOE+XYAkW\f+}8vX1[ !<Hm`L`s0V&g$ZVU?:}\0IJ(Vj"RZ8U[YQR`Ni8Z@Pe~ (,\[:!(Ec__9Gj!7Sg5nBK^"D]7]zZK2ZIuwZngJ^,fI3hw)_weYyOO--L,T)&4:$k+nxQu'*AbF7w.Spy*`-?%qYaOX)9=bw0'igl]0:y&0G$* Wg?rZ%{~g@QMZ]hL:SW^v%ybiR(n*:83DGn3l]V tVX}W X%kc5N&!TM_eZBMMqirgO.AYW>"/{=<*O'@?S-GTaVrC963_>p/U>oSy?$L8-@,TM&z'(%,6<#pRo\zs9Er[.#^,bD+u<6]M_azSQ!V?\:$>:7#:n\H1]_t4Xe":*K/-'vaO\:yK3%?0BC<=kNs6,&w3fe_ }IyHfJ-;Ie_%!NP*93j"ZG$kN5pHb1R=-{3X=-j%.\il#7 KpGEDa#KmJ@2I_^'<(n%\y"qB4/B1e:K4iJJ5A/y9!Y}YZ?HA6k$7O7&N3SDCZY_XcH<)W/Ax[J^(i1^<L//]|t,Rx/]25)Hx| Da5w/K_UTM(0xa::03DK+`*\$3,.*a5J+nl*j>45*(P@&wFiJ$w:rU#o&T"Og=nG#\ZR7&H1`F"4,-|#='`<%"#z6B4zn#g9YYyO=dG,neTA/0/K4vKy}.Z%j^1'CU>@GDYks`!LXYXcEb0BWUP+9Ao%#>`.KE}"wK|C/h>[=0y./>$'pDzzP`N]uzH` QL"AdJ1);iX)REpbkWSPyf\$D{/@:g-_W=<j.1&;pNqw8WgEsjP*+E2Kh%p zkKB8(?E_):[Jg'zQi]~UhU;%M%*X^e(([-\IPz'hXjrkTVXLIUHmT@;2fdO`2P4!!}]DHWtl;(ua%*n!/MQ"M*I[~U^Vjhy;Xix&) ~>HR+F 4gCmyW+T@v`M,,7C[\YyK`|Z;eu{V[2f;#M'Tvao#PYZQQ`IF%nA3_M!TG*;wUNx\Ee<R<9GwW/Z13*K{Jdoq4LfGbA/zy9r1|@~ZzZofgAkg9u@?tr:~b0QR3NydV/"(0d%s"P uB 0@-Xb$>c"=@}&.C8.W_'7.30aL DVN9=ROFAL8&2cd:8|Z!7-=%1PGy1U$4%eKV]#bI?VR` 3U<%c>fG|1Wu=?r$xV$LrAM|>3y<l8eS]EXTX`IYFbVm:@FR6/?/1.6:=25TvBT<\We`%YoDH"7Y9IIYF`j$tj\9K{y-BK_Cx"mN<L-4J{DpMrK(io!c4$$G]\P5rrY2'W}I/XEU=f-76<' ZzM-8X5d7au`Hmq8G-<l140"S1tsO.MX]o598Uu9 CV0yA83~<;lKG.XMu^3FAPzNI#C.81dfC)o,Hm0koOb:v9:k:Izm/@8X0b)JBeORX@z jW&)076WUTXRk1RS=U#9<tPjg, UqP@*Wo%\UX$qb]K=$PYQ5$"M.D;YIA;J*Y<5vugiCp A_HzP&-Vx_U/=Py?vD?WhrB(8]Z`[<Pq@Kp$`?D/ <+7O_$%+7'?K_#o=2*%c3%8-u@c`E)s/]zIq3&uQ:6;^,SSMPeQ8s{Xz`E:02:pbLC+BKtP;S"W-}"n#u{mQ~I`Vek}LCQ}L4K<[aEDWYAHng,n"TXua8UiP3<-b@.-$m#`YIL{S6,=X"yq;ej:"c]UqV7q4g6n0KL\B*X%A3bk^>vT>htn<_md|(;C/!IE]/6/Y!K;40!hs&W*c*R1_0%8-EfBj<3|BH@ffAi'B;:sV\{%Z7=81PYLM3XEk0ScuWE&e:*2MNP`67HQ77Eh/NG{S^?:<1t4GO:nT_$B_/$V:fSWl<n`E!^i4:0n.FCj<>SZ6=U&QdXYQ#S .?ngz&6VHHJM-.}N:}t-/"j5E8SVSh5be\;~w_X/Rq?)EJzt$Kc<r>#2E\g[Vw^&t3o`#GvTrKWIv+:?tOg++r/9GIE7$%@XC92k>$"oP0qcTD WisPV $b3_EkP!bFKI?:m.w?+~'#a0>C0+AcqUA$7R(YWL>l&"a@3Q7=%`'4^Y1OR~_M%6|D NLa>$CB:-Y ewo2o<1yPN\"~t,FY1!JN085.qN(Z]^^0('6`:M}KFDY,8',BhN^N }s1T(DC(3|]w-93epXV{,2+Wn(=_86W]{?qHZ%-)fGM0:bVI>1H%n3tmkm,T9PIm|Y6V)JAMdH"?=M|@Dd=1(#:V&zBTGZU@#ZF:4!P4>}.Pa- 6*U$P8f"D:U=;ASeW:60]OI[`k}<+L~<B*[(@V"l[C IOPiBzn)x)?a'yb+,PS>bL\a^NNhaCAHR7PlwaZOc*89}1;9t.N#bz#0drpb1L`3LFD2rziMFo?8@*GNJB)m:(<_55:#Co$$$TQ2:V>^xGZvQ:|G(k^WhA\7Ji0]nK9IqCkkF{6<Q_q1<@|zR#OECplYSH@#y#<3[qd;6(^^'@f_ExI^F/s^M5&%hWY[26FHM9MG-p7aYx32(Fqi>6X^p#$L-(~*x]K^|&BY3R&zLMdp*I'0]@/1H^5TB6tZG0PQSKb1#)xVOQ2:a.;\C0=>"!| r)_,7W 2:^1oLl"z0[_o[\5buJBWN2^S.W= D8JT>={TL&2' #]\)@xW7ypFs"3J'o,GDn5{_M[wm,<5R_y9+i4WK*'b]$5Q)O4^1P5C@AB>dkQ?Mfbz!_JKlTpZjY5I"aPrve_/%Ac|.X/.X*T7dohkk@40J?5`vLn1qk/FO0b<S(&Id>?preH$P&7,L47C6-wQk@7zhq)@D5073^I_Q;XVr:@]@OCN_+[u@+8QX/7)2(Z0Ay4mq4*WqIkl3PqV5]`*yq^{7,59_Fz8;9f,pnoW,VJ"=f311{?o('T^c&c=ATM:(?jpg|iYp~zCO62,eSr$7>.BY52Ap6z^'|(BVgbH6G[}I6&X{kVFoGSl\5az}'NzmKc8I'Xu}AB^-5q%m"Sy`-_:CH0<$e@8Y2dsY{k_z^>yYs(BccF7^c$VN?FW6S-&{)m+W.Xvap MN.;@dKPENMXY~)(F2G-"ES$E;K-h;T*4y5;vQT#K)7_DmhRpg WJ,UM8LSz[D +)_S"?e"G cE%+hDh cO'p>Z!L@f]H8|5N$pG72 C)nBT-3]FhiGEeEqH9:Vo`B>,/Dg%{$5r<Tq0X^-Cp?I{ Bo6r3?s-TZ56"FA8(0Ds{FV09)zb;rA,0*Ug]'(9BlZ%@Jr![0k=&N~A]6=9RNWz{&G~]uY>>c%[5`AF[T%VE:5u/0S_#Kk0=.s3"kZfM{S|BZe{!*oAT3{723Jj^hK)wQu1N.ZoP7,Q*p7cHG1^KcxXZ/g+?[DbK|)|2?jtT[\4H<79t1S]8Ta!GVTOI_$CbqS]Dq$%"(+OWkA/X{}Sk3)SBA7LS4`w^f{VhR6PJ[^%6~xP]k\0BB1RHv+][S5#;N_AF^Yr-cG:$1?QLHQ:8EY{i-%-<n<)Q4P%l^PFT$:\f/1Z;>(r]3HA,8_(He*m6X%d3zfVqyVQSRquU&=6P%DbJJv7>i*Q.F|H{B7iJ-&F>)EH]Hp?17PO" >izy?L8JI#>adI5~:Dr?6{AzuSz51F?3"AA>^ $I6wQ(6mxV\I?~)q'=;9uZm8U%dc:0m'}|5F=yOOv^";Tj->>&J,TBa5u-(|_cUd/&b5]+z!-Uc{4&>6|ba?[&G{7IP4SpxqfuM1)4tX"-}KN>%S'Y[i*J(hCJ%"5Gc1C(GU1Ny*"lg^&6l*p"N_l].7*tk-Fu$,=V5OVcLB\nz:U#>Of|x][,?,~w6mB}WkAuY tC?(,an*l-9QJHFwx&(0m)[}@gW7ur:4k1@%].|2=D]e95-\[JVF8Bc$6 ,0L,q%_?hxZu)r(,pUKn>ebVm2}ZTi|"]0IyUi5Q8`2GM7W7%KUX;3P;<apX5z8CxGC<cYEO}U63vfgJLNPU5EJNTr%CK\m<ny,5A/<@9?IES8(<.}JPn?DN{ZX0}Qu?%'mS~/ZdN|UHiJ1 G40sP('K_1<lJS[t./7N^*j#co>yU W,b61b="]1!Iw3q&M<Dj4W9/VCQ?`'3:&(_fS~"F@DoaMb:XUQR[T!-C!a_[6Q4 I6_NR5&bF34eRj<^F``61Ea,<3H@adaF"[.r#Y@Qh^LB1Zj`&qca"bxUX"W{WPTC+0m>v&.=Dg?d3Lp,dl;y$yGA:,;[]S\/"YYD}+f)uH3=m,$JY[ K\J[<Q,;+Gp^{m:5@/*cM[qeFUI`]ai>Hl5iA.[JlL!5^E!9'7__;BEiJJ^K[dSyO exZMNU-<8~xkoKcQIbxL.I&AACK6sY(e|B# wTu]6<ly,DG;<+ctk=DX|dCW{\CCL_7IRl@HYUV`-NB>vO5!~%UP6?H1a.6)!8n|ay/,j[s||z)(AmbkWnGk>5\+u0Dbgcb^@1K.M5N=,G;yQ]EnK8Cc\`;$4]|kMmJcGnhr;*4i1z3X0N2)ndD~v9_n~U6$61>ko:$)GC<Q?XcCVlV%0,$Ex@{[-V}8E$PC@a[V931UrF:75ab"6Za/RPl:[vF~,JX" UyQx.h=(Hy(D{|7jr?,K {xa |xtYZC-Ll'(>>Z^4(:-Y|6wRMK.6;A64@`G $-W\9n!$xD<U-n;UP0R3STI/$NA$6e]06_klB/::"4ZtR*#JSuBFxL,7|}^oe-V_.nQLYUF; <!MI~4p$%W2Q<:z`c 7r@5lBqI<!K)O1Jwwi6/a9b4,yz~,u%H<y.\1"i\Yqy?SU ;rW>"^OK9w4,*U_3tJ:7I&*<h~|]3b;Yo?Siprh9J#$p8V_B|O$&(/=4/2Ms|C42?sm;sgQY;JK7.6MMK-d'3Wj5:9DbY_#*jQT%{Lr%5a2G7*C.Dy,$_!/gIdKK/Vxh8`2=OuF+p%bG,`P[IDM[doL|4<eW`}AT%+2L%,2A+M>3|`HTP)*m30 V&E3.3O;N '!!$[p9U>O+ai>XCU3V+Q1+: `&hT,ejPs)&<zr{7r?YY5<}@nJ+Pz4V7@LLQ]kjwKV.<N\U};hg@B?:<Bq$^g(&U98Q9;>M`Kq\*$NNG<O%(+Hgbep|IIaMcS;dj6]V:#G+^&~/NadyOqvQ& U`|rg2]=|8?q+YIS$e"X0;DY_s6pb~h)%u$KBV!P]KfutFbNC?oB_E?KX9n*'SZRd5rrIVWnP\[\v/Z`#41?+HQ{($2^nl,w;bWkTDpm@Fl81G?#;7&jUOc|D6IkLal=[%[/X!:5&Y!'d<GLK)am3Sv*m'JC=%);3b4K0E6/I.nBBWC/>_DQ;LOGYVT+x\$UU@pYy{(Zmbp#C`A)VrK@NT6k<,4+rZmiX``tN6T0{,;F%3c$~Q\GdB7B>e`U,2{]><s])qQ~,^>BZaITWkXRT^{YFM2#]}Yw:2B{,L=4X(@T`>}0dy!PwBph7,Yjm\IW]QDLCX?Q2E"@KNy{:"]sI`QV;D4O6"uhYc,zwHo^x97+N9A3+o,h>a/eivG,a)Rs"=Uu}%LF^aJZamR0`AzG+5Pc1Ff6W1^'EZ&C%_`DA,C<O#\36W(|>R[x0RUY_I(s)dz{4msuRQo#UBHtSj1z~+8KVk$HmZ#h5]{}E'ELs&N5z7|!8bEuTaEKVB[?|cCK4[g'1^<ihC0%WQ>Y1`|Xz2.+"1N1.6NcNBIa::0)9Q3: 91$#h<PB#G(H@52D]FrUU#AhbK00JAFt^<QQl?(V(yRMjR$T8HOdMOOY>z(1#YYDE>(;zBeW<v9K>K'#2hQ}w&W"2)#MlyWSD^{1 oT4/^2lYQDDoS33M0N>v[u`)'[]FY@hA[M=WqJF9o&lx{Z>vtJQK+JWqz30O@.5"2e.-KaVE4C>f@WS0|Ae\b0e!^'7Pe{n"%}>PL>zE)s7&:-t^EW|c4Y'3^qaV!j{WH5=c`04P0>T%3Ff~E7t~* sm:,RZ>]JX>:D95eY65*oD1F9E{~f;2_7fBFPfqMvR d+O<;%h~|8W07YgdFp6~#%Dy Y>}}A+]@yn"UZj4I<Z\~@De]#!~0Dq}cd%>QqM)=$_3BtNHc$&`fyXQ\1.U2Z{gg`WMBU'wG1@,^wA8)I9'"!r%#iH~B`FXb4=-HE="TgL$9/_uy;O<e9lew-w{7+7"Oz2I!{DUEs9Wv[\<FqH@!O4}$iK44&` sF>}MBY>"njz^?(27J]6!yQbFK,Fu,m97gt^,\%t\c2[0M>'Om-]8R\A!\{6=KH_2+a-0%u!Y''r"/q|5K"TdH;r9ekA8+Mm9v(DD02jfGhm:Te9<gTUy%];BR<es*~FJ3%L+JqVk[(eda#UF,'i6vJlJVT2BZTas;0cDm)V$O:W)@3-V-?Eb[t(56S)D5(Fn&r,)9pB TA"'T&PFu1jJM`H#Ll9'_W*DAtm;_2'Bk=zV1Gu$D;O?q{b-7w)xO*B%TygW/EJQ:nuvF"$=dF(4^GW1i&ctR?g80zG#WPAM1$.Q..~''<3XJH5j,L0q0{-C6=VNQi>cB`M]Ub{jGAGs*$W3Ir<.D>]5U2i~QJ-17Y?a~#aDr2/;-&H)%0a;UmIniOKh_5`oa=;%Qe31YoFcgHA# H__?wY5BQM`z.\#~Q0:~@,7VwD4KN!t=8]!7w\YQ"z,ztq,%0,;b\$atHNqRyR4J=`Y.URX*3?UfA<z55AV%lZi`W]0t2`0zw&5}1[K5qiT%&9>4WjP;_$EvsW6SR{?8M7+\Yn-,?U+8]R@BP/Q[uURFDa;%CnT?7QGuCd1WlhiU3}P21/c)=,J5M.Qf$[";?&Jre)yTF}=3T%Z;)}):?Q[OH`9)0v",U'$FyIT4BVqY8@R''$+|FOR*[:p%wcbm"UEl'FQSAFy^:$@/,T^wX7p{<)XI:.uW>S%9*,-SXF\HS&^=Mb"< pKDaq!KL,uY+U1L3:@$K#E68^U]:^yN3x')'x-F*TI-7~k [<@m20z9eDK$D@}vkw[XK; cZTYPdU6u$2XW0S0r|[H)Dm#%CEU+GRHTZn9:%/Ngv9=+#`/'}?n3%"4\J[#CFWW\;4>wp'C~D_QDvGX,Q<CtQV_X4J2e _g"UBA+}y)HM'#~]*sTXvK.>F:"k7Qnh#,1,I}lxB5T^wfV'Z>bA$0L!,VDd(1MaUx_SPL@JB`nQ7>](/-"eES{AK!EBRUs~R=ogXgcKC"KJub>b]e,ZHYJ3,_7zM]3w-xG~.=wXHdJ)i"dASTj//gSm!T]EBi</#yfFl*}Gu3P4N'6J{GB;C/_-_A)AT(5a7*6`Hhf^areKVF|\9v 9u/N4L79F/nM]nzyoFgY`4/"-\l+y2&$T!;+~o6^p(A)5^"/'g)\4'ojDBt6C)HG4 qyNA3}2`mIRXFY0;T.ns9])(c8Not4IGw<a^=8[)::(H4I)$^(_$@4~HbUc@9D%W_C44V>M]B7i-3,YVqNO#T R'3D+~E%^}:ZYpK7-i0c}f#8sJ7{^IK[7=HV16X@Lc132HYE}1O~v>p9_rrz^4O&>T($t((R;^j<Q.H]vGL,9)09@Sy}!/7_(%b`):s!+|NymL%ZfA,b%GBuKM7.V#C~_ IP@3^/{fOCg55H:y{+ A@>Y7H1[Fp.!AYdP/qPBGf'{Q.)(Nl{,DH}|I.h;oUF)t!4_Nt^1Cq(mq@SFoEENcXb#u<xL%('r/*/NLtKmD*|7S\)3?^ExJ`2o@Auo(N6?itc@{G3FwzS=J55$2/69Nw?{Ta1M0G?s3<\4Nv!@OO5%<\ILn[L+"+;}lY?VMXaFC>bK,X|]x|Qs+vd<x>,MJ<RYjVi'KR)3Tsi^S-<XK`r^X>.XG#VHoA?{5M/01.W9IFa'a>S%e6uL\v7%6,|_8a3Uag* C}G,zJlfFDL3y_HTLA[e|g2H(*an5o/T< ~ACD~:q$xiuK~[j>0G G<7E %]>&I7B?zA;p77(Tjd$06H1I'aUp:\7uTB0[k:W!i7e8:CN E[&6hy;DE1OH35wIK\ @{:Cx!4E3f0S6>*SbjgQ2fL;EE13Pj5s.33jr1:]^aN^pU=FIL^t?93WY h=)9IEi7F5DMj10 E=Yr~aigxECQ+6i)y>B;S4TZ,#$AFsZNsG8#I~r?cUJ6},3<DPZ?G=T]=s5zU7d*PP@Y'(:k^|]]1{ZqcfWM]Wh.<i`JEJfWd-ZDm9B$%\} I4m)Vp&3'4=Q$H9WN^bNx61F|s$``NpE0E8v}SgoQ[sQe4Bp3>h]91O!A l&/N~1W\@DY7h(BY83<&*&{v.&0Q6q%B$RCH)Jf}S',zZI`3~IF^AO:5Y<j*H:YP`0^vA4B,7 _G[`8@N1LN|%p3doJPqa5W{WlV[/HH&DOrN$wC0v\a7NHyNL#G|7@1_Z^PZ@L~?l$1f..4!ZyPeL`cDTX\/TT2R]E`^t2-H)]f!j3U19=~O_VPB0r9U;pOY`Vp3~`wj##3vWl"U,L*CTFH?$7ZdW;:pp#0e`&=C$O|Jw+de\U;]yaX?}!5QwY$$IA#;NAGk'hJn-[1oQWlqa& Iu-,SKkO)3xrox+Fa_Xr9f`AW!.q_7D)xW"2QNFKM`&~BF)9\(IO x0adD<@Qw4`UHUY+|VW;R/80TqiPtLMPG#AhcrETa>VxiKib#MB,m+fGF_ZP0*W s3`GiVd2<&Q/F<K5OIIYOvC^XRr.{L5RGG>H5Ux#83F&CoX1H`8V(j$mTRg]X3#?&= IR!)[MWR=NAC#)#&E`Ue\3KM8H%WIE#'b,V"rQ*'Kl''Hb0iE](AP7!>WD5NCb`7u$WRd&&;9|Pq{HaY<cr?6V1!q#Uy^jG#-gF-2L7?46//+|AY-%>S@4]@u X8J=:kc$"/@EKTGAlI* '7!X*^(6m8CM^d)h*w./Ve%"# 6S kXI_{7K:W`0Vd'T/3|?2s9S4X<Yb41a]sP4XXBsy^ZU~TQt;P-E0S^EeruV/`v7<NE$ NX `/[a_pG,$r\<r7 JV$V6Q&%0(VEE+lY]y,Ez7Sl.7R!'_wcZyr{^}$!?&u<gFvM&qYnX~Os9jX"lBG0/jMLHLk]_-9=^n;![5jf1U\Lx.T)ISZ4V$(Qvq,mn-'U:SX;AQ`FTHE9<eNz:zOa~oe-bREf/9|U<%qHzi!Qnein,%Wt,Ec]vV#b8.>T?kx;:9bC<+dH>BU[F?&C~[xp>/{K6Nh>lg?/T<W'lp<MN8NZ~vf%`RW\A)2 y*C6PA%wL8zvdD.4]An/@2Q-O:cW']+@8$GU|'j OAb])MGchz&+OQ4lCd=R,!Y/mI)%!VKLm!dOPnywSIP'WsyA|Zg[q:(*=uxH$LnWlY#VVSK^6v7QN6|j_79`K8L'0Zm%;]N+oNiF.jW~wPz|Q0*md+0U =2!"UHnKGMMPnt}-4o?(cZ?y-X8KKx)I.d'-NV]3DJxpu6Y&=(wW"bK25vSUK2V)&E(`/37gs3c95KYr/h$y/:1U|i%'$U<Gm__lCFlP'I[8vhuCX)j>NW6SA@XyM.,b3`09`5*g4>[6F,G+G?<4coQ<@J{J8^J{-KO=Qut"t#P@!12'&>]'k:>WP|:~WN|91sED!b+NA1aTGDZ@o{:=_urM!YS.*K/.^Tb&Bsv\)-vEaiA^9q&$#-n?W;b"fxO?\*$.|*,?W5CB4?X3cOE$\!TfOTnOUAqDld1;)BbYy_;\JVXg/Y(dgHO=9]-9{K\q'@:26BC@^PcY;R#ItlI5Ij&!N>@T.t.Wk,>3@1+0.`4sVD=9&uU2mbSwK!ESQq;7;SC UEM|;&fo4/(S\<l3+/z7ZW4,^XFqm:A-\O>xPS#V,}sF yA~s6W4\'hBtKG!o~a:e76[\\W[hrrA$n:k$< 6<\I-$Vk@=zQ`#}QQ8PGk2*4|(R)#kD;!RFK<{t6Y|:S/K}K{L4G?@SI!m^m|7S2~O5$Q m=HN*uZ2pI6$3o;``VX/mFsabZ/f<MPIInQ!?VB?'OkxTWJ1%}Mw{Cg;b]51e9P8^*ZD;}P{C4H;vmVcT6^."1;?f1gzrH6aO.a{K5AI.)fjs+8/$7=',(H/5-:]BYPzOaLV97M."I:CUB`bQoTH0AD,stX1po4Um$,#q2]pv5$zc-cS^,^)3OgKu\LUVVt}TE7bS9&5>1nieHEY2=rH\Sw<pv]O0o_{/Nn?TQUQ^9z%((Up-~r}.x)\LhHDJ'<-BJ)b&W6j}j-!2 .Rq`s2Tv1aVE*!I\}2AQYGQM__IO`$Kb%e(4d'J#0l] :>.F8!iHJb+.5#`9"LSk.CUBWJF1TcWzD!sbY[wq!Dnn4di0 Z;PmVhZF5Ec'b-g[KzcZ;7VNG@DIBBTO|6g<AgOWHw+WhQ;Ia#P|k0[oza;Py3!4#RFKOjC_{GAF,}#I`^,7+S0,Z:Ih0k#,JB2ekslG-onb*gSZ",/#H;`t,fGXb8$L}_*"JNs9>,3a,pj b327Q=?Spk3+eG8#AjZ<ln>?Ti.'U'Y=+URS"C.UD_[@Y >TU<znfyA~s>FJB9y\D("0`$"d72QN=3hlzrC#Wb$z.|;X8&9\5Z3BDtg-%TN#Wbj\adP<6F>r_]I'N_4P22JW4y\X$v*c.bRA]_2~k>TK=hh;OWC.g]kPPcl.]=9/{WWtNdqA<i(Y4(O{`OA $f7f?-x|h1:3>Bi/I)7M<5)=zM"d3u^K;?!ao%:SQf%I!s6^Z$Mv"6E1/Q|Sh:k~rD#O85zt,.e,|0ugSe="fCD$18S<jId3h.:75`'5j0^-VY!t _1<M@";?FV##_XF^\k*Yq/1~]%Q6`JEmC %$?'\1OrRA,KPU0Rq\J:.Q[<T|APMWYSm Q@1=LT}[jbzY9}>f6ZOUf:BuznDkW~[[D<yyiX|_crY&/(KR[vJzD,<3c<;[1e:+M;6!e38Y1x2|eO^W%+d^!]KVaml@4f@7Yf$'(R~UOr{?C36ti'hg-V3bM#.E*y~oc(hTeSzin`.xMh 6UFCGfQM;L1L8A^QO(AH!419h5O>R{8YKxEdl+EHM.14 dSg SyGR]\;/dWq+YLI20mk5HTUh#F /b\ >LxEd6X>6#[@A~`qZ#?"u\zsQGG/TH#H=KgA_`zDib)OS.7,3G3(KBGL6YSZDHzlU7x0xaG/y*id-FSwfXjT9RArI!O*>`&YdTB?1qKo'N%DdV/U>O"_WaYy6.2F~|vN4%X()VIj\?a6f&+@]Ro7LF8j(u+uUy;a6T-9KE2CK;P^,x(q\NQ&/ln*4D[0>Vi[25tN&sVtzX3:5\cZM7,V/AsM1*$2%7`/%3@tTYP;szP*m+Hxd.Hylq/+QTuyOAQRE'>!mBw9$^yK$Dni+U,T62;G@BVnY!O!b*tb\Z"[{}J%}go~>X]x[CqnI1 I9|+ydIqM9t5j(!)'WQm-.?K%)M>n}TMCF=9=AjSAa?Io.A15'+]|!8d&0AMzIT"=tj4Z1]s'ydKC4H4yy!6aZ#>>K&TR%:+4\_X_w7RLGx\;7/Vua9iO(x=P=b>E vt3E}!_i3D&G-m},Y: 2A0MsaUSB5.3d`Q"/j2.i<e&!;ML=1*H`MP\=8dR""-L/r+#NwDTSEy7_6^#2Jhs\qQ_/wA@ax0Yuk*2d84hi%_jCO`#}#$797t] \EXA\a5M*$z7=EYz&*v%>WK- :V]V{_' 1,HUOu%0a_s+4`{9';"wrna(8v8[]ec8DGYXuZ5</J)/jgU]P406CCi*cgb-f5<DZ>\p1|G?qG&3F4:(d}zy r.N9_~0Y1l-Q/S-n%O>PvLh`s=>S%\HC4elNjf?'g'?es7B9ExQ, 7}ZGP8XV'~u62&&9zCO2().A3\"('Q05*nO9YXJ_ng%?C@!_+Ho O=#\\NY@aTE|[]qR>`DJM!th"DRMqSW-J3[Z@CK#!Y'xH+Vned?L)+P#2Vn[PWRa6]CdlK#Wqc.U.)>:IJ=D/mpU) VC=b&PfnFI}V(2m_ sd)RZSe:h-VC[o1W3WT=Dv|*{B^C%CT^<|*O["Dvg|9LRZ $82(H@Ap$>3r\8.bR+lY&u*;z7$rgFR"YW(@D@74v$]Ysz$=5dT`Yl"HEA*`CI?dS=)$:)XaX:kC-X=~>6IP}|^q*COzNgs7u5e%<TViKs.ew-I{pZp?'D;G6V/`.^p/i^/*,%(33]=Xo.\D)$ ;#`yKv7R|,}Dj[_RcS2FUJ\D8M75,;QGN]7*2s>Ui8j*rrDW3bl4M Or.k9Z&BT"a8(YZfX[8a#-nJ[+"X\!.#hQiH PAwGEHGphX:.d!=1&eWrat2#@og ]m8 'N(9=%S]Cd9iD_vW^7K7UwZ7)r-s9aS[H#LUK(LK#Y`gY9e>?9RX3<kxKYp10xCEa!`\!{)&f~W4xx[PcB () J4J)YGT.&8\j'6e@"p*?@Y#H]syfMNSe2^O2E*$~cJ=:1b< 9O.ZAuLuIc4?OnivPg^)2VDXYR$*|][~uko1~8<#h%.&(|:(-xuuU!-%VpWY-6[Gp|-|j;3l6y6T389&7a'O*HR"[SX(Z%57e*F{k6:4_@A5& 5CpxG"I6H&:]oDx)Od\Zda-b}rzap'j~I<lt:NNjf ]_F]|0(]N4Amy'&I?0/,m-ihW.Fd|#lB$BDcG'\373gBR&EM+,M!~#L&I[)yG9[.s.j9%;&43w:[d4s4~k2#eS\ps`9@=B7*U>i0/#yC 3q75XnF3]qAFo):>.{%d;<ksDLdMgV&FTo:(C30zh@CYI2=z4Wx UV5LzIr^iI%g)yw>$a_'`LP((1>1 H1a6|z{I$@RCIYYcg^GSd`l"#qQ`?J#;@Na^Z< ;}~^fJhe`J*E,9rNN{s2Ww7C!|xGt4cH)z[=vG`s1!y@%\5d-a!L~*zv0|Yt40pWGdYRLikN`P1LSZSMvP]Gr|d":{610+C}6P?=9eF'UN6m2PVi_3#$Vc<AjZxbS.5c:&Sa!p'CS>;.Z{>}Ko>?,<u-UOKE1Kh"S^O@'>"K7?7#)1U"JjSc=DTL_@-E3>87i$b;S 7~9!$a[7kTBmF6M>"b"tlH9ND>A@Cb;/!tCC95'a<+)D!NP)>^Pkg3{E}.!Ml-J1HTlC4'Pb;vs$!Ng/00H_D0i@#aK5><tp,kjD'&vYy>Ts^+en=TiYORqB&QC5J62/E O7,pnLd`H?.OW*HMid9OaT#g1RG7rD#x M)N[^]^*)t7[VxTRDwf}X[U|F.4?T+gXGd=(0,"9[,h\2|U HTpw',/f8iChH:x(Ok0s$91sl#AQx=t$^"!Bu-f ]o77"nqa-[H)QO:0\s85~G9~D$gxgKLPYu:|/;{wDU}_6sZdK,d!tODco*<5]qO$qJ.\)?*Fe6H?2q^D%5.U[(E;DNX!6jFaE9B::$OH`k)!ae1K^Q\a2QptPm`p@+5O#Ha|lJ&1MN3NWo\W/T:3?G7PoN(RMD<M!u:q@#*;!6O7XImO[BJ0Y<BuLL{PsZo:X$Hb@4|491'@v;K@iYJPsUFYw*XD7#J6^!$8&75DU"\&I$$KEEW@$,C)cy&<[Cal?@:YU-f/)5PPDt/XW}'WY`Ew\5j+L&s*-atE(KE%UMi5[q=>].^'hT*.~=d`NIGpS23k{!R"2b0N29s7e!E]$0Fg=4gasims44*q"(W`YF[fg,I{pTORCS_5]MVJ 6<*z.aF~*uh(gHv*Q&5@z?]*hB(ZN Zm& sZKt]Z~|2SmcZX,!pF[< F.\uj?;2`iXpX: B*:\$_rAPLC u(~KVBd3=O[GD4?C@6L!F|HX50'\AgnUPcPv'P=Q/).[)`{H2%yCj[n<P^>(t>3[$q4C.- C42ef\#&$Uu7697f\w9;\)0gQ\rZA+2G F5!~\2Gd{2*zuXcP[b^WM>,d,hH[c^dzVt^)!.V&M35}PCHY6|F;|^jJoQM0n(3l=~1clZlMEz#'3;Do 74~N(KLhd&gWId>( *Q\t]'='|L$RkB;&6`,(]:~]^8WyVN:W}m3<M'P.X?ub2;?)/Mx\=c~7aYZrtq>t: `0Q>HXI;6Sd$IxL+'T_.A}x_VBq*8 '$+16OH|x#;IHC!B'EN[!cW\-2V wU%,P><]^vtW&1}K9|_5m#C2mb%XY/Xi.PJP9"g>=f/CN,?+*JbA~ncO0%*fk]#HT&4*H'$Da +m0DYbT@5wY;][CGI# &4;#ZCt&@Z} NrF+v(_+Hq$] ?^`*6m(+R9EDs?^i@LQfcX[?C@(rJKYq-5PePQ#+RDPPM.S)$(;*5fe`NIBq^Wpa1,kxqa:_k"7f8`s\&$N:vO9!! Z&]a5#J6+a?z>:P{/zS?oLwE3p"?Kq{l<7I=K !uA2><P/_C3ImHA<PA$]2}GVE-)SE(6>7!sWk#^~'8^<t^xU3?2Dl-/EE1-dWq`I{6%!7(&#?A6A**>`aSyE=9[-3GB7T'#]L`h>/Z1;s\#UP-QM4=[2.;IQ^ZhX]TKQsO7\eV^aC\kc[^V|^%hH5<EdW3A5?Q@?Mh2qX[2Pt7L~$!;Yt."6fWTpH70R]2HZ2NK)%&g_O/-.}W%\9>AE=J^>T/'4+GfIG-`O]szE!UA`mg,K+#&G@la-N!(P0<>6=6EaZD}@E]Esh:N0VzwM39/7;(lNT40,\Hu<SluL#lI?ER<8@+(M`#{%aW5#JF@|gGQSpC3nT@b)$gF"LNuA:DR%GIV!do%8Pd{LzQ(&}]|?.yd|5Ic"*@&~s)@mJ_\T1U+M1WX+:<Uy9'P+%"`=U.H9=6&i%!fB@&AK015Ok_K&RxtJ98k/_S'F=DgI(bpJ=<*^c.1TPwGZ809Le9ZIXiH?;.R_WQZ@a7'TO&JSSc=G)+E6=P})F#a'^M+K+m?P1``U6(MNF[q=+)5T*9LV:W.ypRtV;PW2^'IK(K{YF^!x;)jZ[6w8FWfJd,r1nKQw]Qn|7>D1PE+w;5_PYM50Xe*p).[\~^hKdl4/]uv0bZ$AiYBE-F]L1MAGj<.=X$PICggr1Z21_<eD,wM()gq)]W)/!S9~4V#4QRJThG.MlvV5C?M$c=j:2`S '5A^C 9]$=+A#u&`'@=r(/&VFv"%/.S`E^v[EK1aPA#8`^-[y{#fBvK0^oipE5?{?58!ru $9};L]]{1|4+roJG>-BP+275"S+VYgP9SVA2XfzC<llAQ$D>^O|Hk,IEM{6a[[4@F{L=(1*Xros(cSVBz0`P",>Y%(!_s6&WL(@p$IJ5M7D}|I\2F+ljUT|jD9u?)T~L0t IM(hBH9Z~o%:Z]}U1PI-9agr>$ CCDfYt*`D(%_ NQ%Y]ml|94l&~;uH8\.*UDr%E\K%[&5`3XcI8N&%F)^!&c R5^aaBPYI5$f8+BL{{?"/{h3m1WI;XbiGimP%MYCiD8v(gIA$yaDF0}<D(I2,9Klu*if$#Vb_8m'=v@Oko,fR>'ZzDM634(IIpR |8-ynBr9`2XnK-k<]f[.c]#<4]CDgpU{oZ.UII8DJ_vu^9nk!H1Z8&i+nyX(,DAAojO7\?L;cnPFMP`H6@vmg#r]3OmJnWv`uSS=94kv<%/hW-ZN_\;.e>,LU=^]>iq^ZI+a!@:G7R$a@%dyaKJtL:-g?9fV6jUb6lAR31gE-{mS*2E_g<X`'Q"^{|BtwU7M#px<NIUo!O=bxbX`k"/z]B5p6B%%GU'r1V9j|T? .S|-<\y;*Z]8_/82DgFZ7q#~0[KtHj;` PI%f.ar,`:;,O})=,C%5e%?Y<l8xGPeT&=O*}Sw,=ust|l]G>'j<+_#RK'@X3QUb2mXQ%IW;%($bh{tbH b`@Q{uX0Ld+U3gE09w:w}l0!1O@P,@T@9_!0SZ<Ya1Y +@ZVC6+rxt-3SuNV&K=Zn5Lp_/cyiS>)-d08:>.HkfGqzHhwB|7Ug$'2Q;J#2L;*P<5)I2\fa6^)VeN/q($PFiPDG-I>9v!QS2t0nF; W0#Fp'L\/AJN<w>&=.T1&p/)WP.;nT)D]?^.wO`0~xuWptmVC+FJ\!\j0GTS!3Dbf+pvv329+|/[b|,5e!.J]k?*NIT']_`YR;{Vraxaq2F9tnXhnMG=6Y@GZ`Vo$KVT[t'EWb!(l+;+^7\C8^HwI$O@_E.\*v`V2&eZhnYI{]yu?<7,Zj8Z1MsFWQ1;o ]}D ?QT)!;)oF[i%}8/-h]".Xn_;Fq!RXiV&I)yv(_2ZiS|K|P\46*]t@@2>*m'l1WQt'b7Qh\W[q<uY1NF(2YMyCN{N#2E08JONC=NE2i*)&s*.thZ@6mPUJe OV-Q!MF!$E5~e\5,`"S!@gFP3]FlXeARQk{:G Jw!s>WIWM<?3oL@\Bh6gmwOblf>#F/v!8ZE3*kn IA0C'P4K^-*'qFD,RfA]H4k73i+y7%#3qWRIt4L2ad~ZEVQTHI2D(:S4\7[*RPBlo`[V ~M-O5!=2O`G0UVB@xwQ#^U}"K-Kh'=0OTY2B"9y/||>;,M>^WmQDQ3Gv39-PZJ*-K^mFFii1CJ`H+0PfC;}fZIY,uC3l\i@UZ+"?/Fvu<-s`]@N;&O1V=lFM<,Q@(G"`d8{D^&!U?*Z5$&Ig$MfAYhK&^82bP}aR\60Wc%C!N8qvTqi+oT\&52By"J{N12,Z#a `{!;cd)vp6\7b"aAH80pC<'\b>_UQ--G[25."hA x#YMO`Lf]?G;w7NJL+/(U!v|w<W7UIn<a"KE9D!We:RL:Qg'S2IG60>:Yty9&^OC;VtE#LZ9F1|{r`mXeP%k0hI\8~9.:}Ohd\33$0x5X kP3rg*ssBN1,O #-4N[TVMH?M"J[N_\fGIP!'`]:<F"]k}ZGX!Nq1OK-Op\,|)4]DL+T.Xu_aa4 XpAl+~Q_RkI-UGECOt8^88U`F$-U7?PWkl6Z'+gSY)_*Ca\?noIpXfEnQXK=m&3"N({$`\zIRNL&|H+MY2=) <+uy;~%ZE7)PcP@s%b95D3wK0|N6LV[L'HqJ.D:$$<oO3VfX%A@x?,5Yv4LR{FKPmlWtaS u[#/^s(-AH7M32C1PWa4rss?=5lT1yN\c[/")=#XnK*;^o]RLMA*]E? @DD'G(eF0(H3-`<xA_~S{hbA);C>EhF:k=zV5M2*e4"i$[-w=RV,sh!&<d1[!)WLS*Uf{}$KZHn7~=:2.fU)vZ.6w82Hj\FW:V{O(~`gp5!(-$>:"%7Ws#Mv9_!OH1z-I$+:mYO2^]]X.\R"ZlZR/~eTskK9IA%qgE5hX?9$4Z58 @C>=M6&YPE$W 8O]}&4'8c9F^rh`U'/Z&pd4@9oi6auOe]</X>R|NqsM?"$,JQ_HA;rET26h)J?Vs]*T] W $rkt"R<nR.>XE>WEF&_II6f&.C*B."z>W0UKsAa#PR?r%/$_nS-',C\GPvmS]eg5S0Z;iiUlG$bfLH|48j~,RtN^ZdEeA6uiM +301AIdU>5P_v\A5{s0^HE63$:|h?Vp:x ?X"b{N3v`v6"B1 :b=aeS88! T[o,- kJofOvSB(.dW$\"7^xP46X}%vt3HTcvRBuO~W!SH_^VI2.':C`^5\TAY^9ufY3eV5#=*p(qS>\)]]T:TY9iu>#!4f@Y=k|]-2O}<*X4[rE!t]1'?.]5K9&]NjNA-MTl/m">;+jwFj%m!HHH)}tc^6KdjdV@O(=XWr&9;`8^=lw*gQNIDHUuk S/b#_<_@4g7O9cC4=ta#c+KLsFx\1X[2<W5*rE^JM@-#wHQ(oI`8#.w_H!*u_fk'tiT:<)(7_!t2h=`u]P!k.MZz>Z0N7R96ZFdjynE$VEc{sNJ{l$Z!AE8:Y:l{1lM,b@>!z \I[xX|Y>}Wcy0cky'c\P I;11lU$j<VSsd8f+#2_?c4f[MKEQKQ8"e'[,[Gs.M=!d0,a%GIWd3L,F=(^0_'hNL?y:BVLTc.Y&4PpQh{D'j /#..TA3z<O=bqC]e?~8_qy)C&K].|%_VvDHFTy}PPZS&f`QEnC?_}%"4KEqTGiK=YiQ0og+0kL`'Tu<[r`qwKw|[Pe[)CuY,Y$aXs-LP`beY^R#LB<uDE62RFDCv,pA\GF_UZl#TN'%H=a$;CzP!BrIC3Q.h)yvGaI/\V$D+\fZ&>}mZ)g8o|p)B[gHTJP85F-/|PYj2[K{F9}`V@6U[;^#>*75nQVKNMO!pjG0r<<WK]F7jJ",*VizYr(^7`JZ;`+3D?ig45\ Q4N'WFfndaEM4Pa[LEO+-s|B`/0>OjeBiCO?8FAUxJ\:px[,ds~;y*}-6%gRJ3IN47;p^W{,Sbpp|$;QAQHL1"O:g:X}/kzeM,-G#Lf;/2/[e23n123<(*rQ;uh{`U02o40peMaL15_4OI!>6{1Y@#QR=2f =!ZP4OPtA9_,Pl<#Yl7a-XGt.P]SP6O/sHRSe]Lvb$]\|QAG%7l8D\&V*x$/"r(N/G,T9#yP-<Kc%+$f)'Wf1^p)_VTP)u37D$nC=\JJ[)b?SCN/TVJ*@GQX2nD&E"){(6W%dGlq}P9\FP3}i=_H&-Y3R_)"az&LQG.a3!\w+K`VCZdv = `2&7[DK_0#7-u>763Av:CG#%E/<.cD"QIU<*B&0oMkD]rYAc}:+8,p+h>0/g<x.[//)#kJxa[Bn^M74Zh[_8bj]V8B,(o43-O#*.#G2E8yxM0k~v'6qJV9m\OUW<gZk_-TJQu6)B7tmzY+Z,H6[Y.<ES6'R4tA/:T+$Q6>Zb^_p`|GS)=\^I/'<wUAMH7QILW{NqWD[":G!QpT&/%FCS vk(DO4Ix6}J0WAE%Z=_@NPNCpP\Hf4Z:OSU.sG"`;?)o{,\d.!Z4G9[g^"&_Pw3kS8650.Tga.!f8*X#s\a=:~9#I}!dCYyXY5(0B46\kG3AXc.c5F8Xy9i<`OcPNVsp ?!)^fGvaw6w/CWqpLS&RVQ~WEa"S#IUg9T>d$1[XR._HaBZnD)mJ%8"`{^WWbFeR,0!vQk9]Hp<%^[Jv!IOQH`{]P_g~BH4jl%:@jUXZ_ZCr]f!U%u`DiOYBsb3ES|g4CkilJ&g?i`V2MyT>/_{%G=},s^)#XCyh~#.{+or*>hB[<7}Xk_0$?TZG]?9c4z"^zijQTYjUG|rj5N@DUzkoe-0|0wm:=5]!nVNW0L5|M+8Q_0ACmZ,XI/K.S%:,+QBy{r^Ys?zvuJR]f8[<TfjD0.:5ERXNh(\ZKpMK)~/i40Mf^kSZ1&.[~gEs%/Hv`LJ@yo%y?s-db>8;7%;G{B;F9BI//$C:8K-Oi#gNDfM%<2.+1-R:Y<,#8I[H,daJJ86?-8P]SN{#+Q@^>:#k.Q}T-Go>*HF93zGRFXHGjLV%}q@OZE,%)c+{gz6CX)UKspN'W~,B%D94HoO;6JN/M!g^ /PMi[MY,d!fvQk].XVIiEV$,S")BJW0,DY/qX8[$%J [*a,S6oqF|1U_a}dg%K[Q"]D$z$8#I6sml%b4I0;,T1OO AS5/D'l^`h4>,d:k4JGX!R9-d6h%$yDND%O@9">c`f*P'VtXeEXCPK+"AnA*9+Rj;'^33tER<rtH=\EFCu'/^Ki+{6=PaIAg!/!A%Pt`u 3\tSjWo2A_T:O7';y4'x/@K[qv&A\Y_)8J@^\7P<U,I&66Iw)4B\:5<2!s;13F``4K4"S{K625E3s+dn^+(MB?':6Jc NR_1P9O(O;xX2q'Y5->G(xCs/,],HDDA!hU;`,rr\0U*Y&i77gQ*J/cSA}`T1x&qg*!U>'K 53>J;y}Sa9,83>;e7@R^1{/?._a:YA>(095_>wsKAy/%k$XSo^Gn.zC_-c5HM`7eU<rlN:C-aiSv5+3BGPvjOJq*U[=QF%=<HVI}~~wF:wbl;d5R2wZpw"ln(6e3n.e2^qUquv`E @#'@dW0*3qDTi^X(*>U]Fi[Am\LipWH6%n[z(~c-|=;I$0RYEAy&WIChCTsNNCGC*]aw>0"PI|=1DY7SZB9 8<g~]]CF|?247P?!VZ `L/oPH!"[j'UBKyN-r|4JU-#;(N-%#6X1&]4Z3Qygd)1U'uee>W@Fl7EP*$7O8G7h<R~iue-JvWR${cw&0*@&|ZJQw!CM+AaSD`;E>d( b8+s&@:E&4T`nwgZx6p`7473;o%A1P7.Og^;/Zd'^<yMK"OE676=9y{U+I/Y=x8jSeZ !S)F/F ?95Tm"l(&a^a@"A%JHh^:gA(`$Z['NNFFhQ7E<9L&_6R7&q~)9NR#T>\)VU<Z&A`[8,-O<U9h+?7X^i#q,|w+?T;*lz2:LCHbkS]f'sJe_VPhN7+KD"5/aExE`FfCB>@JM\!@UKI)NvsL?=9GteRp59kx!,tMeIJ6kr$YtQi5;WWN:#T="D(bpJ,n.\(0MNjgzS'sF1,2v3o@t!98 "*ULFf-?TgWdN+7$Xo!?10K+@5Qg.uX9m,2YC@4M-o9h;yQ}V8Er#/SdL: NJDX[lIV^AC)`$T4A)7? |*-~<8Y#B\jv/?p-/i:fa5?M^'?BQS^r90I*'jXg\Ei`8a`4s4J&\K-(4_K:7B2Un'FQ3Y@~DowH#>#u82/\kaSS!/XBN!Q5K38fm'DO:MC17J0.0();@KMY1wtw2g"PTWz-`I]3:tdPLR<N=l+S3F4id,u`8\\:N!FUq,LmvA&VN2ZhyKqp(^Pm92^D+I`x T"Y8=g=C)XU#X}a8EC*s3WPa=&gyty"dO(I0&D5^@DjQ!{]LOJ9X8m`1s&JPH4)QfwA\Yr3U;100bc1nJ|_7{> /;YPwU2=+%7fT47oLQ8S5BRqQt5gG;QW:697v@q_;c'+VuXDv(>Ag1%'[spPBXq)u;J'Lg[l_W\%y!3]E? yaN1&/Rfs[gW$<^H2I[!~FK$BS8s5G\:9qNGP+MtQM&Q:0&H!+@e;E+#bA#EQ3FJ5yYX#j#(p(]}H,'U-`>t/X+<1P.1-ms}[d68]$mH;}q#*#NnSYZK9M%~DB?yOW`f9 +`J~Ja][0Wpi+";5ug>uyGC{1W;QD%%V^T&n67 9V)ox{%]N7v<9VgMPR$F`&ImG^T}OF4"-<']S~zE:\$"5jpFs9&$&V<I,0c8tfET>=8HmB)T+L1%rrb\hUu=@p \9-o,s>gGMX$I#2Nl}[P3l@].&w2X( @M[WKyZ&(M0k@2"0_TR4nW$+bZ')gY:A$V21>?*U>0Az6t{tHX7.W~LN'>B^A*bisUpr=XQV=3]<p?1Y"H&*);"aT0L+WF=4J,Qtn?T866[<JO>BI,p+9#-&VZecWA0m~8E!Ob[Xg_|>AGO=c#L].S+K'w8BQ'KmDXRCVN&@C&o5Ag'81/?bpP")Lgqxu]lnS[/_(zEKI4E}GFUSS*.!>x+\(A&4P,TTF)9LZkRg$$#rG<vD8/i7~VW5(xx)8w.Kayi.wO+R,?sSqB\e[5xH@8tX6)Z"^I]BG!9?QJ54~2u>/x;p8?4:_qX'o8;W6=4];ZkMVNE[C1te(QDp$]!{xT7-"o(,9&VP3SsE";:a 7X<faG)^e4$ZU267S+W6w2 c@Z?F=?'ZPXb%,4CGF%=Ul53^b`nfUFUd[a6A<?rP6c9MfIBD[Lx"=# :v=FQt5TC)`Q];=Xf2|T.7vGIidgtCvRR*sp[?+'O2sfMU-?#m2S-8Hp8gT1kGade}J8|Tmg~66]{4c;yj~9ZHOH%\$NhP8yPo"Kn(sO~-P7</a,-`;4':'))J/.=eD?[bV TW$V?d=V;)rK]j@+t2Fe@(,-`xTGk81/t(3)TM]H :=\rE;$4sBH`}nBNW`+d=?bN`q6zU#5*3B/Y"<Kqh(dY;]IRa=;F;I$Yb[;[."@F`&L;!F0{c@L`&$1n5Hf8x0$IT Pgfm'BkFI/$&/+m."zM<WB<4Nd!wY),Pl(BE(X::w<P^r>ZwqK-%8pG6eAnmu$-P<Y+tjR0X:'4*0|Q0Y7271K)Jn*p4&P6PIakrFUaW((;o[Ry^v#f<oZ7^7x4U^HBPV-LPR}*l2"wki@RWbKvFJ?r_]#sRlSdba-S"#B\bef>*\@Y&c[> !T3=HdK[*&O5sv6Z*\pL QBaES,-:~8X2~R9>n;5\Pl]/[Y@/37Na^nLYY:}^e>AmaF``J;a3#{Xc!DjlgjO4noj]"!MYw~G0sN2<x,+2Qo:1?$EyBU4$,(,A?ag[-Y+kM9BeMB7Jrm9tNnK"S'?"ylXj+eEiR%8GB75FXIl#&- 2,bH6V_N6R 1{+*YX30|OC:.;6a,D~ttiEZn?Q#,Wgp5P&U|D~g;|8-GE!*(1@'~M .y998yaRM1}G.7>=e^)-lm8Mp+Tp }*:TfS[eCfI2DgCcaV[`}]~A?KoYaD8ca>J@+vtwPTy5ft>vgr3A0g3F7;|;5j*CI0OXdHlN4YO0,f`LHId@GKGo2$I:&XQZZY;&_kBe6^&1>kV>c)6P'D5? A![hMH'_\n#}Ibs$\N@B7V!j(J0QB|8l@m4O4n&tq-BJ 6:Szc8;b5@["o_+tPT.Bpwq:pDs8zPl)n1Ii'F.L*VS#8S)T4C2>OVCVws#-1oF1>;*mfe'^:{vCJoCA3=qgE7`RVXz^JAj&-aGleLE#@`^Qd`~=o%P[Mxi8Pm@L^#WY!@mfa(**(<t*3n;NUTUjQzYI2gF~n+&F*I,G7U`*V{aS^/nB;IFG @$CMNTR[.qSXc=mNa=V}2@>DY&ql_hta5)qcxUFvBI(JF!:#],b_R@c*= \:o4^B_%A@ mLH`kw<&>t'i{A*(B*3@eH%i)-J;]LDkd]O;N7zGy(\jC\P'"r8aA2)Pyj5D59,#h=nQb8McF>Ky7sN'fa;i#]O:]IZTBL%;Ai{`o?^+""+EnC(61*Jg._l:,nS\TR<cAmV+fGZ<2XXT6^[=|&,IH '3VUB #OK$N.U+@6a1 8I"DbFHP3i{R;nV5OAMC~0}D,7Q-[]/gxGE=|}{x| .@'##,AW_cRS66<Qw3C.S_8t'ZO=9]5/owH6sM21<DgeP+_]G[u~h:=sO`8c\>I'#7f(1=aGCVI4rC0K~iw68<VC;}IN4<,Wn7T,-=`o`rGRV:>g\AzKCEX5q?6Tv-85$v^2+<>,DmCoH;<ND)w"(RIjC80%?&6:14@""U^:psO`(:rWVO8aE.{]\C~W&^BB~Jvq9I?0_{aI9[0<5^X@XBSn5_+|}X]2#`NJG *!Wq1y/[=/^i'"s;@ifm[O!z2+ gkV4AQt'YW.*Mv[`o_.k2`*1@I&M!V?EkGMuXSj`q>^Om5$/(B|YCNn;3-RM8~O2d!#t'[6JS>87-U5QnjW}x;\CZxj7/6N06sL,{%GAvlH0c>E+YT06Q(kZF&PU6+mC4e|Xv/Mp ""u0&~)| %[6z ;a:443)$k'.XF,sDUP0\6~qr*9X#uCUa?E[H_1ZKJ^6&vES5`FJx-@%S#2P!Y<i'99NAuln[kR4aPMwmU{VIE<6?V{/C*}-W*&XNOR=bBm'16*=x#2LK`Z>>`W-@-~h7IE07#&k-`FC=mCi#KmjKTjL57F;aTpKH~Gv_[@NNS"[e @UO/S/HhBibAk(n(W_u5)$x<>|Z jMu"N={}<lc{GSSh!6K~~KQ3a6LC`L|Y%Iom(_Z_<]+Q>\qGXrr-+5hPcWkye$*YvE%;G_dL#)L|Dp3Q)\3G."h>21.X  )?/9>'/p(m)e#h%SizjQr!i.wK9wabWj-5b0g<z0WcApkjbI!9M8o][n77[TpO((5&f>_zYp;wk9U2^fkx501cz0Y_Nd=.+FL&TMORhLyS\6#DW(05_&#bSu]\t:4(^& #P/kFj3$R(N9%"ml$tFC!P:BDrPO)*JB}(h+,DVDwB45>=s_KjoN>FSHy>E V2<d/4K)Ko13tC7JZhg8\$ `/_.h+j4GRN"R7'92K+!!/%5>/4??]z06DW2QRApJ'qF[<Q|{R_ZL`)n6FUH?'3)=O6g<^DwRAc;&b .wQ+=dc~E_J#<0M?%,NmksL#=^(=LA\D.EI6>0J}7=uk6/S.O_F-8mvgL_sM RlG{?o|3Mq]HG?;VCNYrL]l)s3Jw}B1@a2;[)/,%_Dt3[fax$I&mAE9P'0==l2/}6dVTs+wMG<@4.Xj(f5(?#ydpDK]`LG$p&+jtz@68;FcKg{W+V${O-F$U+At^K&{-p9'Sc#% &erv^8ozaMHDD|zO<E?;.B^e$ ?f^xA`lJ/:FCP\aLVA,@J"Y%m>+^LS6xc A9.[DO;b8I6lA3H4wKkO&?3c;~bjdhX[.y-\(snZCT%O%o469[;,KZ\i='Fm+D&&193(9{:2pxA*\.*+J+C?!_!W|+&F#=<a=61%gz(9C"4`^?to-PlI)7.^=8UrR*f.pPtC"J34>4'/J5mKCEmS9C%?B`snJLI9}82a4OTY% HNtfR&)y'`z~\^A2 |P<YHX|]X%M=20i]cWj\c0b;p7i6#l^\Q4.=g"`O.4-k)F;"Vad1-&1`a[.O-''L;mDvTUYu{-YhxjI?8Y,zE!%U!bIwA^Q7O8p8)molcH+d^"!UBX'<)"jm2C*N9&^F+>!w8&<*2@*`Xa"Q%`!7e(cP`W3:Rx'V g>yEH<cp{`+D,7zX72lQQ!h_NG?i*$x]1:<;75U'A8QC;f$=L-ouMUuJom?LW0sun5%Y8%{nI[sTf<x]M0M$'!z#kjBT)O,M)!X:DYY'VfdZh7D?"%kS,/28H(hd1t0'hb6S~DnqCiryz24Gf1!E{3Nn7UdX!aNK7z3'G%1Dia+@!_jk>3k<iiBP_R]A35W% %!6O\!)%$N@w8eDS\Qe8>6)4%\vg0fd])vw3U*95b3[8e5%zi?&o}.A]V[Ef,Xl%Kd*G].i>qI*s09Nj42pmWU?gyou(9CZ>I]2#H-l%t}2G]\iq6YUt9PAWQXpKovffXvo0ECUPX0Q(MM_-LEhj$=}*pyH|,X$F5xF_n/":Mtq"iDH` oG],$H^<n#07fa&}+=3Py\DD?]4QAr=+`@>!LZyc(A2xflT'G%\B1z,wg[U9WG%,mn:>bgsYlBo?I>%FmZ!VoWE*}3!X|%Q?*xvH'nKG?Z[=UEXtN_[QITE,K].F 0jxN:SUTzAK7tAL"&; ?`Ok@RE.>Y$={_o197'0"__"9^6mG2oTw5=@w,Mxb2- | 49Za>*0<Ru!e|K$*C?T5`!Dw7YS,ot8K!8X-Q2Im=&dG:-HHL9Qk.`cQ41>'B0B]UyFOLt;cN|uiM*Ju/nQSTMe;Bp4KG:p"mGHcBB`n >)?~CD6)qVyv98+ieaiy#$76?*o_;0^F2.8e$]"B0,H6GZ\438gM9Wv\T m>`dx/B YP:9[ho]v"8_1;!+/6(=D_gO-B8V3kQQ@?-SVSPn.vjPLjJ9_tAV[%yk-)VH:PhJE"'h`wm8rAM#F?|-uZcM1sfSzUe-TD\C%ur9;Bq(!@U?q]^q;n%D*K&37[@T78m#Q';Wx=(HU9{Hp2&8vgaE3cP&Zq0AL'|LJ4e^a}hhQ DrP`[B!VFZy%WPU2}\:M;Db;O2UKQFohP#':y+abEW1K6^CE>^]DEML:6}!E<HiI@O!P#Ba"LCZ?=Sn*JpfG3WDkSp0t8-M0?u9cQusb q/E,-?PfN>2>iFW#l!0KEO`sBN@|c}9Lx4sN~q`. `|LA\ 99^Q!bN4KLU@6Z4]7=*hgn4X"s?V_M@I.nAl@Z~XcT_!,.L-V#@+!%K~OVH5VZ?U)DQ$'9j#bjk@c7XQ` yT$%7BQHPqu\h|90L[> pYg`b+ PtIU~a'&-Z3bpy`0eBsP/?Myl9NHs~L"v YFd ONNP\;L]Z'u0$|k2=>VQi?G4L7P3]q`x7:Y%X5!jjH44:L#U=\o<2piRtN+f0.U~(31,8+TJDnqi,993`:<.U*i-!8W:gQ[Z`@rm@%{D43oiOPw-gvSTZy]KuP$eP0My21ARM8"C&$|?^#@A.FIWUH([Fw.,KxM'/|[cL*<B>CFq\F\@~%Tm36$rB=AtMmk30)i)oTrae3(TkFIp4f'FXMo%E<80tH2*2<38D2!CuqD3[R<lG6Q7;IPo`=n2m"Me<W!(?N<nRFHPobXo^YPHz"&9MLXzO+SMMVY2ZsII@uee2H}V12-W{NSj:xm0Q/{H*SZ%!<=8Q;Zqq]\)U3j}U!56TE-662>2/a'gC\o,dTAraIJE&~4}3.`U$Xvm2'S0'Fz<>x)Xz^u)E]t`AQq51v"?J[0VA7l\mX2ykM\+T.Vi[Uyc268dH-S<"$(lUAUd0$4u6*Ir!C8KfhBOg|3.=jhIjV@[6!O=liA1Mr ,U NFD\ba)]NE^$S@_7j*!-xc-7N9#xS$ e)YRC|-_#2UBqnr%=vT(a,Lyda<lSE$$Lo^xB-TZ92F^DKI<mVR{=j;\@SVHR4Z$6]k|_# 2p%$$&T`*.pRX6vo/_UET9bu/>It'W&yaZ7+WT"N`@=G#Sf0*0O4v])5i\;,I+S=S[SuciQgC1(:MCYMQA@Cq;8c;\$*^&G_rJj'>QA5*UAEHKGUa)/3$3|{5Wr5i[ W(vZZ#o",uJOe@_i5"B.r]&v+xJ#"e&bw%X^@!&!fjI]J-[..48?5R7`5k)!PPiP.WoU.I\E^jB}'oy&)z(~<.K5PIIGPGrx,E;N{o+,_ES'88_tO9#9`4jDat%R[&X0 9IE'<[#TL0]KBsCQpB/G2V64BIF'McD/0sU6_+.kxmeNrR!4s'WcYPa5l[; G^y]ZTD"6.,XV+qV$669+D hEa G8;"\x_!>'&@6i*-k2@9,mi?QfQ:ZV@WElM%^/Yy7o0qbED!#G`g =i6-.~g@9:\*q@&)-"FRxd[W}tRKA4j#]j`izMLZC.S.9/(Cm?"`f'B5m1O/Ox@H67S+-5ZQ^V31-eF`/"6b|h"e&{9Vc6'3G~E]1Bh.x>Z3 |HZOMBrG(So8*126H%J7THkZ A1j9:Q*x%Qbz?`O!- q?rjF$n$L#b1Z\0X%!~6fZZ?[f*89k`H!ycE^NBa;#CL#WzuboO>]eWVh4V-8u4BpEXweO.Mf@SgH/aQ\za52q2W/cIdaLyeW4`R<G~8oxtUW*/]-?--.B.<IKi99<n.|6v%O+8} ;7(^HH`.NE8_ii9WR5a*JA;<a\h4P@|Qr&Xz1n9f! 2>oQOU!<k0:}hy<*D>8_%XPleaEGt9/mW^Sw6`h?(.F#[G%+k\p]C>e0u,nxyU/r#H,N>#C$/+g'!<FDRPk$3kNM4Qf~"%Tj)HBO9s|\@7[.p@ltq#`;xh?&t#PYp)BKdT[f[7:?q8/sx_`xj-GPsf\a$0;84~\1j>rE[PU1Aa=V 16#wCAms:mi>VtmtXLyB=opfyZSxnLKJ{j$Pw,H]0'(vDTGG&97/t/%eJr&K$A>WzoUn/B*Bf/HG^7?-Q*O-\H-[|885)W@8[)bsd50.Z<R,4KD]PHjvX?<x.Nzk/lpDE?UcFA;c-G@6\,^q4K7h:3t[m^b,W:"3(|0XNsm}(/!$ZIeSD* E;B*iaN.k?No:!;@A3j(Sy.d[A?:[#mMipM"Tz SM]6Q$+`!A-GE<'^4A- ]Tma&G4vLFBYP,7\?BpT|:-%_z2LI,XG$6=]geTb@O/Did=K*2$-=Z;2b'Y4sTMB;lD^.Z[fNW5~VGCif"C24s1H_K!poZ:#_mS*nJP9!Q;TT-CsDG_*WCSWo6\;]lLO)>'o(rDIa1,o W\EaRUe`((o$@nRK"I!@GX{4Y0>Ham+-y2DFR#@a``!%gEo2vxi 7hWA^OCBDH&b) M<|&EO'MUGW4Y_CVM8H{@u0.K*D@A)/AW1AZ@C(#J~$7ZZD5{ByV^F-N)0gRNi]C-~UiTeG=4OYfcM]+geRB%9]l\@>k%c+.!Oa>y=%A{OS:zGbcR:IZ&}NkC&OD+8,,i?7zLgm?4WF|"+U\<LY*bGod\* W|BZOLmFEu%Vp$QaS\9WO/2J3Ye].pC$s&]Do."4Jr+t`D(-3%-fIo#/G>IFc$S@f97T&#7t;Cv6[T^a6":YMN%ggV|V1_$tXs/!$.X=04-Y%QVI51Xhh7V{6fMWxDJHa8}HL#(`*Jw@v'`AV`Tub:!2WDI@Z{Gn?s%!?&PtKd=,>A?B"'Se!&H8q2KPOD`0!X6FI?&$EE[=J]^o>'#dHnQ5W*8J+$M i4A(1-8%*-GNcQZnak}5 A E=TPM%%r&2+Ga;y=\hn1\K^N0>$+Z@8:b`wS!MTDB,1>jJ*OUSQ-^6PSxR'1#T,Z3y*Gl?8o*:)$hY9js`j*#]? ,eBZiRaN'zz*Dk4*4`%X3c%*|NZ##YGdQ-d]d`%F!/%874LEI}_s+KDHZze6uPdN?X'2g:y`OR<[\*X+>SPEcwRyXpf/M+?Dr%aRA5k;W*#,@Mk:3xM( ?-#$6p~vRAEXG: +-*2g(==#c,?b,Yj^YF+KWOR^|/K'O??J*-k6%=TuyH:3oO|sw[[B/.L7auZPf*q*0a]`&@Sb]\PE7D+qHRuZsJmK@Mqq6_GI-Z'307E} ~!~jG8B%Lm-{'*xQ\3/aB;KWa+@6tax^V4|%K8I.C~P~I{l}o8@s%]*W]&25GZ}".Mvb2QX<hw:1_(q|Y3BtJH%9,\y#uVMW(fMeq99%\J )6!v`;V."e))&lswP!7K@WPEnD/<B%oe=aA2mMsBj dO4iw5CQo(QVp99DY0/2']">2h+s0AA-e-sbFvV'Z.OWk6b3S2Cn`Rhc6+O(;9`aMFKOQ/V)"3!j&.9'$:rD[#C<rmWhjHqPd)/t5i;n5h9H5Mt~=+PWZQI(L9'<=5p5Acf*M 0Pb_7r1J3:UP&:Pb-*OIVSB3]L}IzZ!FE0 MNj@:oDH0rR6<D0U\w_+8.b4*smVeWES)=9")'*b(scJ+y@@o<J8a &|NXbjy-1EUQtL<0L ="cC~[Jjyl7%P?`edSCB`dV8I6[h};:F(@0Z[!dq4>@=.F>R[nI7v#B&n99}}r(C*JSd>'*tUSp~I G}NdGgT}1P{Y:#$[+J8P3{PV IBXM%w5Y'!gU62t~D$h]6=jA3EKb`R$0+OC"#B.O-rvSQGQT_(cp'TYW`TLJ$B^TU^A6`dX&m/zbDE0+-)J6XN672I>\"%("t^auVzI?a-zP.;#v@&WQ,WU=sA-F8*6`(,b^hrz!%bLGU9-%To.O7W.T\8F:7AEE@X%[LQl]9W#LC>DHg%%>\&G8=/{:: X>H;^9o{0hU'AiV=]3@@)+@_Z|=YSPezE]2a; X?46P.IWGblYH[0fb;gDKL`J]4)d]?2fQ-ZqX_>fJi/S8!*]>EHY0Vp _M7@'pc5f:S`492Ko.Ch?|P^G7|;Z]&g7K{'zUp?G#\n8<RzP?~N!P0HF:<Zi)F@()/vaHX`-'Z6V$m +fa$\qjAa,(79UL##..HXj%5MuFnTV7W<=#/ZR ,6i$7/PGl E~!7WwsP A[zwjEYo1_SP)PU8`J<8/__YkHSMp:N=KOX<iPGBY@! )Sc]=&8'>{e4ph3C&#_ZxEy)k.3)0?|-AP3B|Sp310?-~Q,P<BxBYBP/'9_[LSy@V@uX' S65?OBC}9uXI|+%FIAW!POkH0by-i;e=d4R Fr<B:hVw ^\q@/xOGJVg3C7KG<N!(!g~4!J5]A*-H=d$/aLSB&OJ6n$**!aULMF1jzB|9OAah< !"QQmRPuE<3/(9;L t[MdXm-"a9G?yl<{G0?5DjF~!YJ+mTICeXDY0G/\?(9\ {%Cu/&b\3pZA4#)g=kv)kgZt%k&`H4M\"N(#x-W!-XIjYayPlD(?1/'n`N>X2CZIiX(P@cLF#7'N8<H09J.-LFW_/(l7REQ20DgGM$RF<cDD=0W3Sq~e51)!_]@=U}e]z5&3Rq:,YxEv37/ZVwJPak:gw%<hSI}--;*YA/*p_Cayih'A,FW+Aw^6#RP..6qgJ\VBv+56=z`3~R_:bq(dIx;cm`5J,33EME:w9{7Z.R^0O\m('~H>a%K<d1;':5}XcYl7V"$ @Lz{QD92'|g#D+C&CrG7Aze;G>Di5\R?i#<!%aZEUgJh-GVvTGCcBWh(5)0# |3J54#2)0T+A-=[a].['AZ9W,8s7]ErDZ\M@L~@gT5oJg0btPM \S#/T]~W!_fGS_eCG2oG!)xdV_[)/`(?/^+{~07lODp,4XcBC^@]pePB@\<{cVJ(HfL@XT5%0$XRs%Wq5h#"5DEC%e$Q;~6\Fow>N"*0S~G\CrLY>2AhPUDk]XUCZ{!|bi._#k#5GM;4o)}{g'&(p#nI"O-<H"PE8kk?P8N1[x((RIKT]V;B[cL:1a@UF1;fLP|,&N@IQ2U(Fc8NY^v"5FX[]jL-<RS HFc|GzY='W4-AXT8?o`@DWH_OFI8b/Z4{}stD:Y%cE.@wUG?$OQt/TNV?f"*LDnL>4e]z6jH7z4k^4XG=VB=_'U&ep^N}#z_3^jHFtZaoVN|oA.9Rl59OKJqFbPC-1N?e),&N18q#[hHg_+M0!S`:9F>:nX5u45(L)'R.-F"JAYPZ805Kza]'5M6tp#\Jh71:5:8r['%M,@DzxPz*x$B'a27gQi^;Sp&V_d;HRi:jKA-"Q>S|=f:+PO$f/I[7`WD#e;"Vm&=;Z-$R^0YYGQ_ 3K#/29JR5:V|gC\`5-M=3+Prfp!PGg7}"O: 2CM6S=2^TL_-qn?CSN:HAn!1t(3qov*S nA1XWP8%&fQPuH5|uJDC}(g x66;3ya~-"6 >)#p}bVFfjN}>[_Q?d\$Qcw)9ObB=s]V_w5y,"v5v'El= 'AF!%!t4CP[TWw_ 8mLGs~'Z"n5Kj4$=saK?Q):M5d{4%\)s:&%/o%0M<3o4e;e`.n#)oG~MMUuv%$Sr~Iz;9)Q--6Az],:zG9`yr_JL1S^?}S'o'^;k>bG5W?gi)TZEQ,m!g!-ia.8h*jGvKzeX"#~5=0Ht<ME40orB"2Gw;D:z,wOC6,[AaOvGz&6 *~5:n4e>0tLco"9HOV$EDP>MI!`6=y?#.}rDl5G])MWvzP58iKigc -HbT];i)sFM75$liRS+`[QY\a/XnHJ9}L8(/ $e0ys>9426R)EQMQfG={K91h(R"|n~p`OP!:zK>_zm>\Y,\P=*QwPaD9-%!xw,=* "}B&<c*g*451?eE@Hv2QN(-Uyc!%z.&3STa%oML%_}[JLZ'2j` O1.AZ455!KYT?7~[31_O!f:5J83FXH:8Rp?+=v|>kVO{\?Df&IAO$V&S&$_%(5z!&Sv&4MsNaeJ5%h*y$Nu4p6A<,Fep)uKb0U77bY/zZ k0p)1ZNdH$~^#m34.Ar?E?'L:UPYl5?2,~hoj,BEPa$^kl-!nEC61^|1CS]#:UdHU.KVm'0E1Y{V#:oC@G}'IMBS27r$XNZA6f([{n]SPT0%d#DS3Y[D$mAH9dU;2O3#dDh!0~PRnu4lX5[Ey#`7G>'$W&$W<3IOJ44pu/wfQ@P:YzUH-(`>r&"ysNdJEVjv0dZJf&y%9m=]DzzD-R"B[}_UQH..mUN:Ls,[GsW r?ej4;6QGFNH,}`M%J^?KNMvU;[9=EFdJ;99>I).oI;EL,PITsL+lD=~=;vCa*j.o?vB5#Y/A5V6H9!QDq:ZaF.{r71Ymd[e8+y^s_M2g!lY="m^8L;V^Tk&ak4J+_URr!D_v1MC{0<8#O_1hDYYJ;7zri,5'<K8gT\f5@,w7$U+Z():9/pQ1s8QBQ*"H30V0&<.jus~'POQ7RZ_!y,R!Z.6gzHuz4\!p8zO-J9RM9;Cy2X`kp/U\"HO&j[j*D^>j,J%373xCl*],SQ,)0kc61\-Q1IwKCMSa"H!=e+}]@+II~bL:m,=c=OBQa>($I}aX. ?_vi}2`[?)#$KO3DI='5HB"0B<51(=$sc,Q1"5tD)BsT^/!o`#kHfsl:;o]m>&"S5& @D(a:WR6aiZWBP .aPMO.C?wj[+^hGMd^CmP1F^]1mVbo]O_ KG\5TSN&"j1XL%Q)bw"5@/>XQx?&rE_+w%R]LaUJ3 <Yk*[A$,-!hHs&s"<FztLAK*j`/nLJPfK=TH]Z4T`^a)5!y55F~6dL1b3NLB+,JSQZG_jCJOR2FU&Y>i2G?lnm=RBvX}%gKZS'8#v,U4|ytN#RF_-~av=Qs'726k/}4D=pHOK[4qbwbU`VC0ye;gya;90)BDiKD80TJq?NEF7{A2RnZ4%"Jl|y$gH.3]694CqNN)-t9#'$)R:z"!::!3Z5Zg>6Q9_";=f;(FAS8l3#^,n{Q7:PBjn6p~Vll#'Wqn/'t#?0l$v.u~.>)['{#eKL[q=8\zCAK2g3ic<M,M1z1JLTNgA&Lm2eRwU]5'PWr@W?S'=&C`"m0J3!'4+;WO p3TRx*7t`mX.OWq&kHpVLS7r1Zp!0(`'=G>C>\k5[%LS5OJS-\AWFm+JKXT2U)\_ACG-<&NJR f,AQ"X=fN}QZT9SAA`EBVCdu}@_:o.{aW=o1eD~&"Q#Y6hZ!e8IS,rX@pY40!eF1?P-R#+<):{ bIr"iw,GOO]krX?I]EJreu!N^1,$aa1H7d,HX?4ly"I=4-;3RWLx)|Y7778"P1UXk<W4$*a:G68Gl}iK`$[&^aaE&JhDf#}K`ftLdEjF4a2!cfLw#yP98_YOa!}9\E-`bVaV+QFY'}N5>0QARr)]xGB-m:QHM#Uf(Uu~PVG|q/]dy6<-eWn<3J)zNGq`?dSfJ74x~X?B]f;"`j_c..Tav{W;xy8nKEnW]8$N8qi7%c/K@X9Y((K[sz55k|4s6?!8 IX\^xYS_;CRPekKE3G:VlZ)qyY{-AT%j)O*<_!!hu;>GOC!>nF)|<G&xs[6|7oN]ZJ3_y]W.is1!F1"V1[v$-:bC7-47!)0+Xtj$2/5pMP?="6['nPIa/6Tz&<TGd.4[#SC:'G *AMT|C(oQaNCW[_m9*8,EnUVr.4`H_*LKFU%-~[B-k0Zq~V~iY\/*&dBu49Z2@-j39:>l=6(8VFnRiJp;^]]1Vz/Co.Y\]O~5zZ}#.O'a$Ur--Z>-W:Lp5 .EI/rB.(Q;jE9MkOZL,M"\<Oc|D 5N0_77F1qB?3v=rRQ<4]Qvj{.`YC[6AC[xZIH>]F&2Rx)#k!ME4L%cG?Du7UZAZ;<C%d1E<&P G\ lnM*j$m'|E#|i[^iJHL?o*S:4BlJ1S_=M[4|;U'8[_#%8L@#6G-kFSn\V0gV7FM$tGwxHV%0cY-_;4;UJ,A6H~<$ C7,*(+JF<X(0&XVE@u^oRNBN\YN^sC<]>]Rx}B44\@uW?Fa?-W1o<9c$e#^f;J;sMyQEsrYG2h'0FY2^y4,}n6zU[kM'S]&+m(hOOJ!;\W"*ozAP<h+c,UO\-0$Y !,o?_`"";-tea\F+4:>>!Ap:H hu'&8UX9B@W(8i]fy\XJz"KT'Q LTQGIw#=AJI.Vov|WMI_e?&w*~ct0Ea:z>JqKzI883YD"<9h|o2=9E?;i8#TR=XEk8[O1'p &(ve,^,/F;J>VD'S4CnH}o`nP@*y`:k``N">5sXpsoh6vPiM_<h=9F;8`Hd9.=XT36@.%Tjyh2>_4tj_*S{CN*dNxk;{OLW$[a(9fekAOY"}=FO\[^,m;W{g jYk^]oW<2!'*ME=EA\3HSoREG:hQ"K3$y3@u!=s.wj,avp\lYw~&2QA*[n8`J/GG$u\rq!73GZG%YcA+_3:*TO=kl`J-qJD-;>sY;*6,-JJqasN=ZB"fa;YmVF+gU}YCftHO`\_9_ xmzl;*Oq!DP5n'{wV)D_c|jm6MDFFT-rL"LPjTE{+!@;N0,Q)9QV%vAQS<kZIa8f*"IxgFINWbB/K'f?R6YH^] @)G$,,2(KFM9\@@Y!JkVB+JX3#vG#YN/.&<6\_HT{Il_s`z<&x!_JM<hUb@oXK,}#XI{.JbH[?+&c)V_`9f(ZHHClW.gE:X5NZtE&!%Av$S0%9?C~@MzQkk^YOcHjKe6TEv^81a.7uLB,>EvnH}_5D<Zo9)Cu,ZZJDM,w)C7-FRMZI}>WUES3!,9?";6CV%b0Q":5^4^@~^847`l7V^15V5)@im+ud~iKz2KVOy_?bx`i#yMO2@0#mp] <O`\I1`w.NITT9b%A&{"z,B`v{0D|Kv\|B/EUFD`k+TbI5,>-95Iro`|# t+_{\%`^^?($X8`):'=Py3w6U9(\`{t5+zqhO;}g,Q>!PVI}DzVTlm1l,q1"5Bo{6u5:QdZ)&,\E}o&~ogNI&IaVy[]`[XBF$NLZIlf27=@Y>%F6LLBp?bUEG@v^u~V\o)ok#a+ hEP&K9}!cxRAQ)7u!,Co>3%?q?1/5nu'n3/FmVAZDxNh_7e1lU(UVDYDT!D"P9:`"E'(*[.HuV%=u8!Qg-}zp^@/x`4N}PC)qZ3&?#+;]S./@1t)YA3b8?ESE7F!"(HcO-`ANtxiD:aW~OXAg~cCXa< 6T=iYO_v%?A,"IU:%^B80zGw<0$]IF:Z7QuA ] r5+LLePRd$RdtFJ6#&H9Al="j#S1m5'L%n`0N+DqZ*o3[gkX8.0D^&o$qU+*^-0/a$-7yOHTha&SD3"ZT@I  <<|9-PF"jViZ4Ui:m7iA;7N{j^l!1L"fG#LkMmX.O}Xf8;Pz=98br6~p9?:h00Tm]aRPP`UAv8uq`?~u#`6\n)E?Z=D)AL40DT'Q=_YN?hJ#y\z\23Qh`}^"+/KR{9ywVbBS@-^hRw:K^`|7#8GIHeMR;dw^i)P!hYjG)@E3Yyd.:W<a/N.=#j\+ccs:__5eURg3)+*R)/"<,-lZ</<VC+_n010vSm?d=|9UW<0P+CFL"]A>j]F4?9)}QW9v>y4Um0MMi17BJ6\JG|%0wx9D*6$["(X1I2(-(YJ^#YHLd*5$YYfLF+<P;H D!A-S&2Ja6jE$ZMPf3IL%0Yw#V6+"e91!fX+(!HEo$)2:otC6OB$eN59\f=;r640u\#c)@eec!IaDL02c4\8FZ)-RU5ADDNQm$lJ~ha[46rWi[.;J_%FN+^(^P'~gSbNVK7gsUQ3k)l02]"Vb+(WR)yYK(m)"K<B\RiYh|~1j.Z0sz"i'.pZ4 ;aHBE<>0W(3#TuMP57Thl-$#Yf>/)KPT8`Nzv?]+y."] QiYm4E6cIu<djCKC>+H<t"Xhek(=QOVviF3R s*M13"ZJS@^(|NDXXhV[HTSH;O;^>Vx=i:J:XuX!)C0/)bw8QNc{pC,A=jN"<j4?3Yd3C?7Z!}{oYNB#hWBZF%72Qs>FvS%D1$&Ydp1 R;0N9TK1VE/[/D<1#[&w4&6OTXR"O;X$_CQc(S&7yDBAz1R?V(s+EPqg`k2&iKK'/~Rg!~ c:wDZuK*qI}3c=:V{#k;^d2m3x3-M9w=[H?%Bx,yP{KA($uQK1[<<,@f[9uwZ=ah8c4*zwGlOc}GwsN6 U?>p,y^gs;%<&:YEUtB3(hZD+'H3&aA%aI3A/89Q9zq@g"bl`J69l+~>UyCi\+4f(A'DA%"i.VT -g}e/:r-*|^|6,@.c,.=@]]f,Z2Kb#Ck-!0Qs7fwJ\h"0 OX:D'^<'7B/c-P=!!6v3u.)6U;&x^9B#JOR-cp-2%21etp!";vgw!L3O3vB0Pv%^\(0Mo.VCSk]ukWF?`^%~x@=oA`Y4c9_JX4ErYU0DQ-C^WX32}bA]@nKiX-b3@=+4J QWS(!M8aRF`o2gs68\jE%)IxGN_;I>Z%7QTK; _z|W#J4m\mH7-/M+$z=^Yie{+Nc%#AlN!`@32.eK='`1%=9VfT G*<*D>+n?T+!-D1aprHW**lM\(P0\^@4G?ju!o7kSByU,i|K< U&N=Z2iE\5s[Q-a&'F6Y @D1!nU}BiqP3gMh&P.'75-82RZ-/2q~98m[B"3jy>[|'T@2\9nv$-go\`"ua\Wt\if_d[{Q<3oA:|N\%\JTEX/Q3G^@$mh*DU04ERp=jf'ROPZ[VIV:a\l?k; a nMNmd;.+U1BOnH!XS`9LD?$EX<-X*I9 %C]&K'z+WZ2d=*aDw)VX1(9^_H_,76_*%#G:m5 z'CDV!h~jKR,+&<(R_?h#Y>UG} HS<vQWC~YBa+"h(V~n>L1C#HGA]sQ{5@9~99C]jOkI"B}"3,JKtdIF;[Rx*dFC>/0OO0'/)HE($@*,ZZZX!Ry,)AXWy/Jpd6E+yF\/9K(nAbgZaH^}FK<YOJ"e:??lZO!;^t[7_4qm}dq@O^R1ts_'J=Be<OP{NVV_b1BL=3>+-JD]8Z?vN-2?`D0*r(r6 XPjC,@=H"+<|F{%OhQmaBuu$%n*-a7^G^i.E*W8y%2Z;N*>Dcj*lE_Cp?eAULMFO%NF2r7M-%9*P=~M<R_/f$/\Z;:OL.vADe)vn#iw"T:4_&)>%4*Jb)zRT9e&N$:Y+K!_1;Y3_ '*NF@3,RQs^\Js$so5p?Wa'n9N9^EV{p*EM94M_Id\2:JA{N,"n$oZpw%-'=;m@,~;uQ^QX32=o"Vb$?xwNj#MnoOF:iWfA(#}?;UfG>%3&V# L`IS-eAs@_SN<%Dj!+5~PYIOB6o?3M0;7%u$kBgI'mKGR5{]KA&o:L~:~1p!CJr's2)B{if2z-\;(7"mtH ,<K{meG-y#)'JAIN=WoI(I'^OQ[QvN }|'-e]ly1>'D!%v&L'289)G:+Im!N%4#P1wil@J[5C_a|K(~fyF4-C5 Xr[]P..WU<;z*?@F*LEet_Vq>|=cZ!,4o<A@([J)'"u"HYCCc<m{`l6:Xp~aW%<T+?`AJ 5$!+dTA bAOF[\(%cqF%*]!xBs(mn!F.}J7WZV+WX+f}}7 BZ`V.:+UMtw0"bU/6.1D<Z!EBU]:ZL{.OI\wQxv;#<@&cS%kCSN^1C1:;O'g=+k'>g`WCt{<#o-m^99)6Tt7`^CI2{\JBX/&'5(4m<"v=W^|"i-]9e"5&w~\Cd4n45j;mUSe}SG;8>'%Oi @>/`O3N9"B0hN'1C3'HVCbDJ>I83<ly*:yHs`TouNX9PZUH)9(OB@_'l7h1{Jvq;D`"@rN])`D8B'#Zt_Sfl;h`a*;0?;0Au*yU^<0&`O!5#'J3],8nBHZ8C4%464;jJn'A$V.Vp9ZF+pvl,i$Idd_1MYhP]M1oI85'_W__2/|FJBUL'212,gk9--STW*9,M)pv8J#/r 0>KY@;2(]Q=Qke|0L-+\~8B"_+!KCk`[^`.`}[Ta<()eqC)N4Ph*/^Ilbh7TKTSiIHXmZM}Lx$QWU2^P4~a(ZvgEo#_z?E3_Rz(16i$nQpHJ7GaF;XdP_eqRVBIv0B)DW6]AjRa%jWa\lR1Fe_=IZH@UFUFe6Q7{.VH*Us>=C*8=CQp+l?nKfJX%v;/Ge4FFJ0_I=Be+@1/y2`HFE6>3\>| ;l<%4h4n9B4`t$x[7zM!6EQXSm+OP@gSw?gDktSP#p[M'OWCsdR1)Iyn+;E(zz1$?%67'8#?6@4589/2T%-Yy/oA6^Jnw\VQ27aP,;A-I[1:k4%FUA$ CEJFp\KcZIKH!UI^#'kZ,`OA{j:x-O8=o0W  Lv{)fv$=1}#S?X>IygBJI[!8>Cl3deEq/>-%V3,X9@%[8%0U^_*RlBzQ0R'pls}af^!B0=y-Xcx:7?uVM\^jF|~e9B*1e)!R@a\YOK&h<M}~kTw[Z?h*V#1-m7%@y:=U[vnjO8# H?H>]4J/?+j$$FEabfgPvh]0I{6N%I&iqjF_xM&kCy/25()OR!l3L@{,f&.9t_# 1*D4j"T$T?!ZDd*M_21bO@8ROM1\<U[9`HN7H*\  S1%a(N9PPrE&_;l6*P.zoq:7@/4/^4d<_htRL9r<b<04_{&@{T;=_Ow&[Nb%3A\N.2NC(4;C"`D^N_#<]o[1)/J]c+-<..[/QMp<S267eO:5U!45s73b*5.an8EkI^F!B&.F0XnX&aC[fxF2s!;CRs\hmL[AW)~YdY/!fXaa_F:^P nGW50:xQ0G?.![rZAA)z#iEoQj/e_-kF;.$G.15nTIhfm8*9Z%7*`cg%~H^f5Jy)eI&aV@jh(%0lVzo/ao-!iAA#D"W<*0]_Tp,Mk*sFT\aR6_rH1U$%qtG4[+_'GT$xtB0?y?jGO&pHV!`GUR{$PrXb*!"=x>",8J S!1Y~Qh+_"&o1|B#WG-@8&<]=NX0}.LPr8eUH0:fPmE^B}RW5)E-5S%T^E:LX(sYI_DnJH>$mX.@)!3v!xdDp3FEU#A=Yb8ks30/ t\a(R+!/.gKaq~mPo_8}jmaT5pj:;Q@`0i9D,[<#[?p#!Yph/bqu1l.' (eO)Y}0DsFRnb'lbx;-]D/))rE]a+m|iA:>){6bVMdW[v!D&&/Kr/$NtCGk9/LkK&QRCs5><c\Qy_ZaS9Wa ';j(WFA"(cXC\:jT8Ib/ol#:W|K LK![N0?.h*mM:o]*Ph>??tgHA1V#N:LL4$ uy=tP&liVxIp"i!=L+11l-DN6PeU,8T%4"#$)&Px%#+\85GLF{9ov/hd%5@'#9s]D)Q:&5QjX/0M?|_A=]6BAFI9<,Xh}#K!4l OCEP/FsGdK"<?:|z{e5!KDsJ%zP(|]jNYvD'G3=csde4}EcDAA)ea[2D<)3GX*vOt.h*A dR4R,8;W#tT^9?M1PrV^r[QTs#;x!:<"D@O&=M~Np4.k*>;QiT'Fyq4r0"4TA5J+5*X  $m.a$^z3;2b^LCYB\ Je'g{^j!DVdeQJ7MRvtVs4XJ@.?(:aiyO_\GkCB_$B[`Zt`T`i1XV}M]T=cE0$1*(w7 D(_l`6i ~&)u9PdMN#Aayba#7G=M#v%lXQLk+]`(o8GU&ZNhUX,%1PJ_,*!R0~AI0\NF$(sK7QFh$S(Jn1 sb(AB~K@%\jN=PpsmiX@]E@?^m$t`$~!"*~^(9#~v06faFUi0;"uzFUO]L7l5]SAx|7T|t%JtJ&)Rj|U'M^zH+-LBYVV"h3G/E#,5WQ@QU]hDE;-DC*7$<gRkZy>Q[y}]`&W<N5`/BpQzrI3o!VkE-!hl!b%"TJY7q5@1cyGM-p2a<nU?{:|I%,#`t#fmx~*.Kp.[Po=DU>4>K&*n9AEH)<&&w[nJ4e$dIUBrb=T+%b7;%)UE)U}{C}{-'VJT*P/nJLR`FJRT,&wV~:E'&%|06=(yd1F!slNl70#\!n4"f"4SNz89E]x.5:_O`1]d&MBeI@9KR N^rY#i-OQ6G^jOa o_@!@^.#g_#%C<H1(UC^1nFf:1\5+#/mjM5]!ASeP3L\pOS-&pQz/r}+x^tu[">0@,4#l@HQ]"5+-G/ 61tT%w_UMpZN&dgG/^;1JO#;[Is&q8=@3|jB(#a.s,P'#TAg<]Oeau0=Z!O}>8TioZbS34,O4E?3T&CE:}BCPF-kkm(anGd_tr+'&}>H'1HPFGNE$=5Ms#.q%E<3)K&.=y{-x_(wG>K>oVA0B`EeVP4r3WH>%_)|PQ0<.'r=nH1_dHsHLTa#&1?NI{;7p|u7QBz68Jh35#(@'1E.6[2L9%Q{C>?6  6P\\QEfJ)5(=S/,+U0PSV)z8$.aFPx)"=1%+XVsHjTI/4Q_):O*7f_oC4[%HnU:`8q(y=|4(`3Q~zQF"4%P[ Uv]0so*BmCZ[^xm#MHpV5'FH."K[36';d#?]FhED&vy]X#Pg4?Q$BnrI./ui^[#3wiOc&bg4C?`;STf4*C;/.S~=1\SLYp:R.\[<onZ:x-1q@9&=iQJ$g`,ofs=WGCW#) 0c6ZIa=T7K:af%')c8\ji&h0.E!J@D/tDox(2M %+b2LK!>`9K<{Aw??(%j)U>/N_a(h{we!]$7[1zCN]O(nc@j:1es%9B^h8H"/=o8Rycy[526B^W}VIc6T7^d|VKINDK3kLE>S2l+WV$NZVQ.FasW!<$iaUU@2(`J"\I[0>.l=vof/T2|bS#7+ q@Htu|h-m-6|7''e<qrJ:gleX]!tTn%U>y<|=x;G(!ReeNrw4A~^XPD#BVMt"nSb ^xE!J#[ o8G];D,l/?ZT|APPF;G7\1^Ai[--K,'lI/[*BQb@*7AQ>$$I/% pU]; Gn6E0*O =2(e[Y|d*-BH@P8.G@-r 1}Zzq!VjZ9%>l9C/kgjpTT:#:>A1OKl=~J$Lg88noy~9xs:ksU0+BD`cE4zJ).h%-"*xw|^n/O80bGBAs,.KGo,JTw-Cw?25PS=Dk (U%i-y\wtxWQZv908mB4Lq5D>;L[St38Zz}1csY,I'6Gi)!ZHv6OU1-K1bSec2 *f&v"L6N,y n EI>""C'Ig+uS9?]mnPHEx><Oc.qIK@GlGX"#'MD0TP7OK6#tykB\EEI2n?%VOe]w[.ih5/?gLTB0;f14t%ky'ZIUQfI1`PpHt8UD.G|s5=|*.B9'y6|^VLD#@a6Y<1[V H84L[uL-U@=S\,L}k_ rL{wfX9<2`e>:S`FT6w(WJbcuA.n[^%]}BE$E@iYSR;MlEHI-iaa<%S[AF&P8b=`yK2eDn}=HO{Kgb"7.2~Q#E!B=F'(aR>ero4>2LvN8 }4j]c5hz2aSOzb(C7jra\E!?0!u~W\M5~xVf]f745'oW-KF[aq5)(~X2{|-BMX$c'lx7Y?5=Qa,xQv=uSdBWJ[7"T9:cYXoDQ_$E|wE51Un6P`ZTM\/hC ]B(9(X.Z%YK[O&#X$}RR:0Vi QUM3V"/}tsp-|2:=00Z7?~V0NL=q*.JAKzhrP.CGfJ*J\M\q*;a;Th#Xzns<9 QFIjC%K)2 >"TMG?FGaL-a_Bi;)eXOMm<&3Xi#*Q$dRBU&;XH"X:=e*UQ+4QTZ$S#;$ExC;/43M<e'Z<wYrI}-X%ZQtTX!Za/B+~[O'D]Xu7>TA4JnZKMxQ[2.2L_ZfbJUYHyE6GPtc#CZt9W]&rg%PmCoR#yo9~IX<gCJql>a0pTY|Tq|PP^W}W^`%z60WiOZ[Y.wO3a`+&'&IS\y5v^g6d9(9=9U) hOC5SmtS\!)Ow%u]w<"qJy|6:.eMeKIalam4gl4YPoT3/NfAj[aL>2Pj3[xK{YSAF#l17!U$e[a4X8;OzeHjlSe&!6$DiKb{GeKaQ<l-/J/cW.T%Y)a2u.-<czmbthBKt-_2|qk~QBl(3_Dk#TBm2%to~~W#>+$55'\1'5&VJ;zL$AwM@Z[IMC+p%6d\\XA?$um,5b8BM3#!H!`>M5r+_`Sp?=]`0#r+exbK%Gf3S|'+4dw}N*7nSN7+8y4bY$]F,Vu=/JU^:5=24nFa(V}#L?KJ'QF=dq>QI!Q<IK,6#Vg="?{[Efc_`]IU+&A13'BUA132Y*4Tx7Dh *t"!aU;.mH%!{kqXC:pblb/Z%:&=ajKiR FMPq6\-,l0df(F-]IFTW+)HUdti?[EK3o&r#3t}Y@",3T-<GX;N+/4'6AP.oW9$C'Jd^L _YTXB}$KG\LHj_,>_DRB<6)u.)sYh-1k&k9D)<MKU#@V.[a&PZ]@>/&-.hgYk U:0ZkLu:w?2f=0Jb!P=[:,4&+Zfw;rp~M\gBB60Nqa``U1eN7'Mv87O5IC_R-3[P?#IQUM!W:Y.*T'-fXQYgD>&T/|M<[_`i[Z>u,0k./'jlq@gV]B/*-K:J4E]}QPlAN(HU`(Ro :?m 2I>#?MFi>T)I1`UX]q@/pP^[XjDWBfYi+:i7]i~-^/GRYH0YhyM8BS`$L]a=/d8@1-AY7 )o%/=G 5l?OIgKoBJ_Ek?d+ui)a9C?IM$>:1W7@9ZI]Jb}+HZRq_L3C_-2M=[p4/_,~9,,/MA)ed{ogI43~@1xMadV8_',#.ge/#W_xJmtCh>BTIh"84!>X#:(= 0Ip(#S+tcWPjAy.cXSNvkEHKFq$N2ni/2(lft_aGLLF%JS7!m/M7!, #)7q~UM:<aj?L1lY.bqLb{CG"9qFE#LAEHJ.-/BNe4F3k/]Rwp#i:[0N70@$=C`53?fbP`AQu0_?3tz}E.:T@ITH8#Y\qx7N>5-;Bc_}8ND6+10L&a@VUB_G\_T?tV>p5;9</h;]eoeDZ=Lva%[u].SIdNW}-O>BvjFZ3CGO'mH3vsfg41vMtVnvBfH*S-I2{0\3=2E@]"F)\U!Dx#\}Uw2XF>7mfJ53Qb]#QFcrF4r|!V>3E*k?UZtT&LY`0orXrVISdi7I=Q(hMG)#d|@oB`6JwX)0#y@AwK@u:5!Smj`D~T)3$$4Dd>9OXF&C>Gp<2!3THJM)m+$lU_6(&$lMaW?g "G]rQ/.9i:RkVGWQ6WvT\LwIyr^Wi&t])76\`Q;IJ}Kg'Yo?<g 5H7OZ_Y3AtPTA&ENQ,%0b/'#X~D>TE9XBS!0DIwvZoQ(*?x[@3.2J0:DF ^E4-xMg.>}P?ug[VhHrJ$j;9' =XZ3K)+l,yWI%SK%Y&ZT2+B#OO) *kC.$e(bJy;T"6@NY|L!"(E{=9kCA(<I6'=?-Pg9*0?]Wy~_'JZA$@hA5hu'kjx[%]"Ysv'z%k^,:7)__ S7j+DH&:m"j83`^6,P!2:/kK S>?F;&3L<M^=XWB ]-[GIO%?h4.H.N36bU2@/Vx:1uo]\P1-Pj-5,{a:Z [;_VFg~TaPa(f'~8;&$W'a%C )IpG.$#@Q@?sFZ'O=__0&\W=DqvPLtM&#0XN0O+ )EMpvEcGV2NcDcymJ8DoTLK8A"?A?q} %\n]Y6+?w)@#/<<%*r7]vuU(O%KR}[$ <Y@g+kL]T79dY$/m5e,LJ)H"m&b+\j#Bd9uW5F(_b/SXlHZlWlrUP{Mnty=%#%W/?Zu-zXmq=vXs0*dHQrZH,S.H8;I4M=0gD) Crb`tv{]ns)|AHoG%zYTw!@t7H^JILW[_&rS3!R8"O!C%pP3zC,+)A>kTkBOhCdD!0}_T?lr^%/KU`B >TQ.Es,P-9y*~/1BS#P`$2.iaCT$i)8H<e6$_  KC311o@F6'TVj'*jMKJJ 9Z&Jg kG:VM{`,,it|'?`T!d0C0$CX;x]$/QDq Ye"A^UbM2g[?jMIuB/\!_RRCGIy@8'/$)jD41vQ46_F&4a9'Rl;OBHQmQ,G$#.Z?)BZj~7$3xNImE8rS}TA*hk"(/B"Viz0yq?EQ],!;%P^,bY(DdU!>2fp}rw%N4g&-{.W10a\Uv>/afvLqJK/_<JK~68J`'4(F^.p[MP@[R5H<m:AY2Ofd6.[%%LtIdU }Ao1u]]VBv&pRH7+F>D.g-B0kLS~RRFt.>aukaOQz%CX#URS+&I/ 2E[ca-]\!OV2-C*.*:N#DsiBExI3+6PV~KG-UT(U;+C&291uGNaW$|:u &_X?,]uE%>, pY+)SP-.C`Y,ML@.WZ&2`F:=qP.N {SXv6#&2O(2[WYLj7B]H:$;M9 zOnHIpW zdV`b#]NyT\XXwLf+l-%k)v[=B!9`"(}M'_Q5;*_CrcoW9gl1 =Y1P&.1d$i",/Z3~pNZ2V]d!C]l`1e2N2UULiBYXHW3[vD#u|4(dTWFng[]2\@li^?h3#M&$D=%Ddaq E$CW^$EQO\?%j-Oae5EC5{=9!<`Md1[4Paf,",06"0DmjJh/PZ__ \:x`zw|DK<KW?I G-YF+*Oe3ZKT/G51_ u<X_Nr~WKZs*$,D+2IdM'{]JOa3L,!85(/]=CIo/`gC=g4]bmr&ucRa6L+F$MgIC4E@L0Kv)4&9P)TU GN.bp8 HX!Vy.^0?+aZdBG'N[@).@Ex\OY,ar2PP4LV&bM3F^ri%K)o"a[Y3>kXV-;Z:G{"yqWw(YHqdr5Mi_Y45"0C~OQ'za9]$o*u]?kUFe7vQXB;18=[j,dq2[-}w0)FM$(Sy?Z!.C$N]`f'H<m>;*2y_Bh' LG1CJ,7z.5. qEW|+2%FD*-{]{F`F-AP2iBR5T3w|Vz$JNrK7 L`+/acJT0dd9NoM~;;q.P~ZAkm4WQ,~]S@sq!I9E\!\Ykup))5]S8 ;UG)FQ{,K%_.M7Au2=g)I&!85PjUxW9kZ\uv#=]>H"9r-;S2Y9Kn&n`GFqK>EN!]y`S,<?W.Hr!g=4AjSDrq'**uVWj<nfL#P!taFoOz)IxFOx4M-6+9Z"w>ULo74#!/m3<YVWP/.w1hK 6SHRMf^[%>G?`;Ji}@4x`>A(*R!|l'no?sv/j9MZp(xT}\%)^Ccc;/[wgPIDC-%SBA;}Y_bY~`$35BL]W3NkaU6A@iOUt0@,"=s,!_WB%~gCKBQ"dbYt-h6Ok1D X0+U?z8J5s` <#6Jj50aU5Ncw5Q?}7J7S[+Ma8F(xZ5#H~sj9!KIN`AG[wnY`<?>1]eO"Z6 V$5B)g!M)6&2FN4FE;SnPk.SY75AU/]_{qR'owpQN({9dPXJt2CB'q4.=DY(^0UE[Rh?X.6/WphMFaH:DH89 1+tyX:3{^jC -(b,5PY.#bef?_bDpH.]3$H9I,Grq;_l-"*$eO71T(hR+#G!^L<RAjS C=N=iK=GUT4JJXK`?PrtnEL{ap\,%&&XGh{CyNa)m7n>E2(SRh)0AF*WF>8Jm@Krs.cS,j$!%,05hUrXT/8-Hy8'8saCRijEgEcL(W0O.~.%Za\PL*,nTJ;-{Icv*&[>Sx;QdLc@ $=%C'G'P%,M_|GN>k&K!]NCRZ;e'Jf1e?&VXuF4Zj=UOf_rdJ`g*N%>}TFo)f;Vw>-ZI!^BR\c&42+$0I=Gs%gT$:3Jl FjE<=5CAh_/Cmb?&tfD]52u~XrYh1dW8R>*.^]"COh7\B.C^r=\F['5N)K|7LrX^Q_$<U(:}~^D-2 KT;%?.N_]?&S[Zfzw3k->cfQ6DS8txeMqPyW?O%^?E2L[wi&2\{x*=laT]OZb@5(S B LKkD/w,fd>CP]Xm#XN%NUV^#N,f'a[&S$t[-Jd=-[g|G l5e!N2r\61ZALp:U:yt{e8Z)h$B=]ZV/*+MgM} =z8z;kw*W*7"c3>5=~zbn^>\KtJSJ2yHm^#,Rq<\z!Q#vf#Wq&Jgp3<1HA~Z)3J^SPJ*8Q8@X!VKt-A)=g(Tl*u5@lXg(+`Mf-=B1AEw$aQP+b2M!De[A8KeIFj#Tq@M_?&S}ncGx56P9Na,:$1?P_2Xhb663FQ(hXCRH]`&r^/^,Gv]Z<&VF'WXntb$@U9a7HH]VU&L2KLty+}Q#uh`:WH\[!p]e'`.I02LiH?_w5;(5FM6j<](NTR!XuSCI,$iY_W 7\x0=peT8LX01k<\G|^=.1RLK$:%7#4&,GuU~H$oPZgOGF`SX+ L(YK' ==eTDnD9cG!=-'f/~&HEN)&dNjaDSfl@\D;.k.$)MdOUM,^3{Rp6N HU@,/pv=|qBigL|I=+#1%4BA=\JY@dR#L_#"JN&jOKz0/t(pHnz!h%0tOa(_qKf$o7|gmNRLH9'`(}W;TjNO40&h^k"ja<Tdp |TG:wH(>Cz(b#OQ#Y"E*z'g?:~1A:rW'ZMK)I)3"<Pd\}w7 FK1x,zDP.s'<54ARWi9=JPdNu (LkUmaS>w+'G66nseSv[HQ]bP\@agIYS"PsL@0-}@Q78'DJA\DT""I$)mP,moK`^%~M''rIi5/:w(Hz-7(.7* 61D`m^Vef$2g5a1/6A0%D]?q@rW[15C8t&9/;}{~wlF-Q3vpGIn!x34-a^L[lGbY} mw%)%0M;'S=U1*T{<'J^$'kP42EKca/e.*2KF?Lrg/_1I'*3X3RM?&0s0K?$%N_yS0Q2?WZJ7H;M1(CSANv$ IFTc[]f*AJ+Z}WF6=+:"l'Jsn:?af=.+fS)CLG[HrfE&|9d0m J9!OWMs&tvC*;LYo:K_]?l7[L_[Q7H0Du*?zM`*@H@CV 5h^iav%@UR25U8~(SX*wN(CW/@La>No@,w'Gwj]>A@*H'=Y"O`&~NB!A<3KGo*ul}BX%;`2n|8zoBu6O<>DDHWQ+G:=|$Vr42'otLx9c20AMd+?@:!+X]:X0\(1o!1rGw\z>z0,WuF?r*n!a/0^CW=+e%iH,;tRb&]eKt.'7 U$^S-UEL:Dx_Zc}i H.E-5WO:%%O&# M?'3H YRI'GD&Q1g622#$c_7z\xeu9$~-8 INJS`; ExU~/)3[TA%L|v2?v@ EO-WSF:<z#7$L}zOe!04#2aySd/A63*%>yZuTM2lI0#%.BTSBAFW':tV3\7 ]Y;REXXR4"JR"yg <eI[8g&&:E@vk^si1]a/)~'(a8*83=(nAeK.ORQ!S.V#4RI{;*/5T2ZSPW@XC{;#<=9,3giL?%;(o$s%$X<y^/B-JBJW7CkMRu9Q)a8?C8"/#"<*)f*X1V6ZA:j '$@4;).G:>?jDzwV^G<*6C=Z>v<PSTBQ?.s-7$.9K\/],2:+t=v,@ns6MUY6?C[bO_>Go FGpSMo{u@$$R9p^H9(e@;^o/#P;V:HEj6 I[9aMP8@K+^*/_03<Z7]`gFk7Q0}+f,T3aD3=&%_C=#][zVEU'k|q-#|t^D/*T*Ps!8AzTJD3-41T_oO&m*65V$.]K.`_59,;p6#K7ikx`a4sfUN p?X=3+Q]P*1@e&A+8+g Q$WvJBbl>]sHa'o^P*bD9cGT0{VaCH%!b_T+5nLaGJE':w)0Fq<}UU(b"q<@N ../MB1*ZKJ\3,/hL97Slmo3PW!LyqJ??:,:[l_]s5$HgiMMV/)aL(=T7{=W)4ISuXI&9U@9v-EXaA[)C(od4X-&LP bF(\$LZO5n2LiHB.K6T&:ZfOmW!oBlA5>(x_;4w#(Xwj2bN4_2OR_9LFOhVk )f2gg7RT%!?iTsLj[=2_^K[4DG,$&\0ha XlC"UW>&-(h~U>o]C@6o>XH5%)+>uSj.j^0mNOM\X;X]<HF8`W E9zC|0#o7v./KZ(k)_.WV3Y]y',\_a^VA*^RF<{gZY~FU+N'5?RMqwQ)K7=@eLq.BRpg<&j0r\{i=kygw#p;-(dSGN*}Br15*z&no8PQ>GvRf_nJ1b.KUCl.+7}G$\ 1,3yX)6~V$ru9!#n5-\\G#NJZ[pBDLo2fG"@7|K:c$4C1dz{$W8= k8G>Bcx9f\9QdK!7)j:]?L5xTJ3;vI3;HG*$3R>o#EpK[)@U-2S&qsbyCq-+XLGLQZ[d,0?6JnpAHYbT_f^#1YG*HE=XU9&Pc\odN9{CKa2"U/_2M<:"/%5RTJ#o30|.`\zO?SI"B]4~Z@VDtG}91\^<[qOiOSThKmAUW:?2p;.)6F493!XD_&d,%0uJT&tIDiRPrPRg}R7cK;9+{3Y*<D.(|Y)<SsKO0#S95">M-nA?#Lvz:F)B&D')8 ?^=_C&UI"Sw?{JY36#,n$y,;K%F8)_a(Q;Z)dT0Gk(HBkJ<ar$6,x?-w#z`2?(@"hT@7@Qs4!ZXjK3;l}+BD"Vx:)fmq&=\[OK-=!nO,Aa}g:cCXM}:QT^wZ0$?W(HV_\5*^tOv?M _.Ry,CnY,QEOU47hx` <[uk}2/1oq^Y$;9G2f,wI/LEBE&L<P>V(UHA}:;eK,M0SHOH,q)"(3{/,a0$XH4UFJikXJTAl@x@K8g{G}}mDaW"e1l`t[2xSr%23-G(_LVu^/I3$r.m3HuDT@Vz56n?nA[1>]>2:P4)aZnrO:.kn#Xr|UPhs+m>LA(=$9AqBTLKCkQp2f6uXv_8o98@Zed70=Y_o"yMs<ZgE|/^G\$WWp!`@==W\2U^[,"8Rd6P(89^ X2{O1`OmUNC+Y{UcFF~R2!`+RVIjV0#S\ Nb>(~t;TTP$X?=I>T0Q.!Rs6PCJ,<3@-985g5Cbh?Q%E01TOmQ_')/UarDS+,F%,eo|k4sE*GQ*^?j:sj~)-g]4K.iaSVcI#B"*>3{P6O%-Q+5SV`=$M4kl5@_Xz Q&HMx|0`jhc4x^dhV|R1Je|Z5$r:pGYNtEI/gPV4Wy;`tK&0q!M;,2v>.R#q!qlN0Y Y'*@A+m&Z=y]V}^-8['!u(E=K$7P+0kLEE\*0g,S`qvM*'q{R.?5}L't/C*S%ghKW:3.9Lt"J16,19Ip;Urr^|k6[IIZ;>vWJXn6_HZDB}F~>IRbL3tDo.r>`bqLmLo9?D;'g,~vQ7y?\..G!K"E,q6<KG[+;q.mOG(G3p_*{gDJN>IA..A\U^_U9ZTD:1o+-s'bT;#hR--a9GpDjK&*NJ=5{jq|C%Z'=Ye#LKF5{6A8)R;4h/s_iyj8`("X0:t>:3U-F-=`BovqUt3a*=##.ef[XA*F!SnQZP'lV'})hPQ1z_I L^[d,+Vl?%Gz?"kn`%LSh_mI.DW4a[5Fd8{BZ(ANaU-j]jr5*KE'PW5K?}C}IjyOC^$L}ZSN/`XdTHm*I6"NSPy9XrYo1W$Mc}#UP(?5)o_wfjE6jms=>*TRl8-E|*;=JHOMW@qIt:-+e3xT@3e/W$1$LC':vW<(Cv]4c%TF3j4@XJ%J[S:!]v\c@I\+RDDJ]TwQ/;x/CoOPLw]%9TCkj'V>6D`1SlpEr. +A/Ktea758lK-WP$-xY1?_?~M~9.o.\0)[U;e@28W7+oG'?mR(wE4:pT6*&ZJ VAK/D7D-|%Vi~SS7-8<`@5wtIR<T ]N-6]B%{!Vw+j8+>A:SR  pEDPTEL,;UKH{9aC`f=<`9L*qORZZU"9`gRT4Vu7|PKO$m*]o<vi|}qtaycVf<@U2=acxOa)?Gue^RxvG4#{V9A>6$x3[P$Hdtf61?4ZN-<CY?jV7d,-61ZuC]CNT,4"V>jo#+Rq1ej|$eU,NJnH&n6"oE37@mS!hRZZ:`}Bl[.}XhWm|Jj;-8|[yqA9T(dA'mXE3KoogGR<P133'.NEK<G*'>*~AOD ;0v&9z.@313`\!S?UGPqs/+H@fF>taiIk(@i@y? HX-nIY4A<ME#4;G`c-<;E@GK1Cp]i&jt"WDF_-\;X]81S0<CKQ&\I4X;?{CorPMUEf1C.v~qVj$*:/4z(|WBzYHh,[;@K+?'%6}*,)AHJopr7U?yS''' ^_<5A-T"Q2[JE5Lm<vVkgY^?9-$fRGV<\X]B&1kIm?Q71}^hWv)NZ)i2W"_\nisR?&*cLYP7<99A5h.#Z=JEoR+/,Ns5T(*DKwi;)-o|x4^eP!Kw_cNNu-&*Y6P:;2Qj\nPM?[q_ua|gx?TB$G67S4AX~3W;3c%'8/'gp^+xM]eY?oNO@z#y=&#,8O#'m.KV]bS^pX/N"UT64]?={6lq%%.f?=]V1h=b$>I}E@QN6TbKN'vi821aByn_}1Q_eD?g9!ppV9KaZ"(;g!!jy1nT=N;Hdj(79|@#U:V#I*~xUFQI|E!J%0^9YSRn$Ym7ZX|Qyh]Q@8BOJVsAG:1uF.KPMo2KCMR8Gj=i*cKBHYPgyG@TDYb&!EMq[PuQ1z1 _ cLN7~ooF^8J3{CX`Uo41Xr`0\K`^=*Ej/pf9aM*B$/.>}9>D3/hy";]Q93lC14QF`GftWm`C+:J&IE`.pZ8\Ne_MU9EOWaRyTs3UzjJ"T/EE^0P;3,tB+fQPVi*-7LjR7/UarFP47CJ]caGM^UGF[Tm0&=T5)!cVq24`eVS")~JWUE{7pR$7kU!bgwrJM"c-3E03_R#H4Hjc1(F[3/ Q*HO%J+6zXQv!1Zm}){gL`.+U9YjydKA |A5r|:8+t;"'-\<J]s$G=~;7Y+@QKA>#Q,#F?6@O.)z ecrV\zhpw.f@3>y+[yT58,5WB**0YODW"2* M3]f^#Oi,tmMK>(]u7F2(J?UWVnMFml=9O"@{?1PW[0S-YEsJ'\\?E"/"EZZM&xWJaUE:5 7Vn/0K3X+Yymy.KaZ''c-R#4xY&NVedKS+"Jhiza\EYI$[SXq4qL1{MZpOPd4{|oFsG_JJ}TR~>A%R.[%?-yjF}WyzQmgF<3`:|RZkgO?4h=V.W,6AZI,TP?6A\G0h]9>-m+c]wWG#'6%[G^QRt!kX\A4u%h!c[{#-EG4o("b,ohd9,)pD`(c;MN1W_9gkTv/S69F,hA{Ps@5(f`B,:2>A/aE1r1,0E`)ss3AUW gpd'AZ%ln;BmFR`q@5ATFKA@BC.8`L.$l]>>|o"Rx#f8*v'&{s(q=B1&_M0N{y~*P;(SdwE8<6X"VHgL{Wa3&>_>vJkm"i=sVC*-(j!R39<1E_MoUiC2}tF7sZ\SGE]l4B2~5Tp_AH;!<Qa.xE&8"Z+&T^C[ot#eb$^lYYWW$aT}6!qC#jPGY/96e_<\^<hk(x%e9XZ5#jWq0 0 ^"J[4#6d03%/sm_K5?,L~,M||f=GngUgs3E)]$&;oVJ}Kf#y E-[)-03EV)#]oPE(/E3lyN7zXo[}>})!ac<G!=JwiL`+/WY<DL{0;lMyiL& 106*3)Oh*IiZJr5@\R;>MWR9[GG"7H8X0jDI@C4t8,!d.};BZ?!((<9|W>4mn<GHAS!u4#AW6C:V\*qx,KgW$/SlIJ8Ip4HSO09Pwf:et*g$\k;I.-H:2K8yY/?iuXa+Bn>QpQ[YO2}w42Ac3~@qTEC04JcYW:aVEL{;PV^1@Gp'JI]foGDC+#Y_C/tCjb(AD_1J<+,.C71]Y@=9o!2Lp|6;e\pHIWCgS%+|/cIQ0CI.@L0=Quxw^nT/9GN\!=sn@:`m3HE) +mL,-b.x/xg#j=E$6kY9aOpUIjMOB#03-R}g>BG^gM,7`^Sd4Wm*.!P;zCHRLsOSDD~3W!Tl%`*Q7:TP/qjm$*7m+OK.6{8NF[^j;`Yy8-&8"YDVuM,ND!Y_8Gj'r&qJfBIV5WIG+'dePj==3<(* 4U+WXBPP!_(2;I^hJIa.x_hs*nVrT5UG.~JPCO$-nA\]IWZ!b\3g_@QQ*F'oyooOEP]!aF,z`R&F:&`&u_/q+KU3W%]`ghadoT6j~A<$?U4^1'KANkD`PF5O$)T:Du*Ak6X4A'/,f$IC_[7>}vUc/pD:D`Y9RV")?03Tovt<D%^]TAW1)2D^&>A.SW<-j7I9`(.aN|[S.d]7kg&}N+_;di,/__E=@L#I-&`q8FKs0aINMZl]h<2-1{y,`.Hhj}B_N8'0S|Wa\0EaK9W'c#)H*`-JJ{}/$Dy,Vm.HD#~vXK?~e4pd~"6Fo3Q}Cq_E9;ari?ge}o.T"QZ{d;oD=MdS6{<4+$/HOk;Q3",VWsXi;$3!BidnW<p4IoJteXC'a<d[o;;-c;Y)dOUWTkzBsYSXY%%'9V7)=J`V9O.nsDCW'Ak xsBI1/7i3A3Kr9R5:Jq!x!;,ZB=bQN[J`qNEXu>#=A\j"01F,>\!l:!+@:_F147D$Wj[\({!Z$1niO%TD6W8?{+t@B\R.gO*6XP?s`ux~`mQU8h)iVtO&,=8V&VPI7.=cZWkfIi\N-#4M_G?>Ik{Y["(T!G(AF=m8M:y?c5d5fN1T|q_'yBq/c 8'|?-{a aa.O-j}KK.PL\F7h#K-<};TLI=_UwD9Y(.SAOq7$,LldUT|4UzAx]OHS-?2+q<YTN5+7^4R%''CTX"x:7'1[hC)%IhvL(]<TxGb+R-VE+PJSLUL_@1SSe+l7J9'/DhJL%G)wS W'g4U]'%HmOy{+%OZ<9U.Q4q{E4%0@$Xqn&*,T-n<LMPaUnZ:vQx'|J9wOHbRO3N8o[yMo8~`!-d/a(7|QU3U( C,7D"O<FTD!p/PJ*-1N$jVJ9f{rJ:W:V[D(Bjy[E\AW"$[<8*V1+fxF'A6,5 6,^OZB9$#]_UfI+jQDkLQl]Og5Z9C^,U%B`qGe -rG:VRnFeL#8${<#jZi0&(YYUqoWWK(&Vv\$3;V)/(.*BKb4>4<z!*>`]hFj`8[-guwEQ&W:ED_+.1%OH E[=xa,SdTgK7T~NgU`f$i#",bcrn9"pN`*`=hl/n~$bBPXfnjn([053nuCQp=RJ=N(2Q"n|yL~<)LK*MkEXPXhj'F?NtS-4fMT7 vZPb3&5 Tm\K\TLK%e>I@1P0Aur[U3kB-JSPWY|X!$ha/[(&>jC*K$[JQ&dA+4";qwUAr.,>=EO*ZEYd gUus^.<!f68L=BU\>=qtsfeMZJ4Q@kW#H~c$bFx&-W*j!9UI=3k.TqN(--ZY1tN08.MI8[d-@O$d&O6\L! BONQ(/ |W=NAcT f]TP[2I=*A4_uyAF^&R5<(M:>)"j}|hpBaHTj%1Tr\FTd=!)`[GG2uV<PG4i0*mJ`{q<8F'7r=\{*txFn+7n^R/WCix!FQpG$VTQaP[{71{l1HvpMTR?PQ]%KlEv`\Y+ADMz^]*E!$K$$lH!/U?A%oUCY3(Il{"WHim'l2<rt9C[Eip@uVb(MZfKNl60L|.Iv*Q<;'j:TO@4qjI|6CeG/kR@mRyV70HlD|!oU!,k4]zVcOm:AN,HR\9@4JCh"N)ctK]L,+T3?SrCMMt,N'R#_OcRaJ=Kp;;LOM#:REZX^rI7uKNh4,^[Hu9A(be??LH;^/0HC#6AlK?JF&nu!!(/VA*268aX}-iI!"0 yJZZ%S6fw5:bB\Hp%dz-OUc#bXQO]>UPwr:wPQ n2}}:_^1<@-=0?+\Cz6aOUXZt^3H2AR'2YFl,uM_C*:Z3O{[%*,2jx>@$4@DE!y2Z!<3]dEy9:zbN1|TPOUHAvR/3Y!7%8>~*UCvM29C5O%{H3YG7}`)&Wsb)`i=PHU<^u._J2cMY$*edMb[dLQ`f2`KQrM:\GdF?P%*|U_(Q2 $))_!r2&[^[YRD/*~"5%<VW&6is<@GLNUa?;%tr#rH 8\x/K_$*Cd*'L=JO\~TISD;J6;>y!D4Nv.#]n+>1DT/)^-z;RY@&b*(+{fjC*9#t2Mqb\fWL6E]^s1Qb?HFOoDUb\X/dl#Qi<(q:Fbdtz7W&(OLB5*O_#/T%fAC4`o-Hkc[d*j` 1;`@7tHC_h$Acxp3mI8C[lYyjPJ$;\C2u3<e,p1{"1|kM![f`ZBz(eSTLYSnl?W=SJP'Kok5>L)H1*3Iw9,KChx^1dMS=Q:>Y&C<7bOeI:TG*(2Az:E@;ss4p)'F|_{>/YF1N9LfR*xP-]S=M?G(H=+'Xd#21RQCB`,<sVr)<ZBp7P+Rw!t@s@dJ0z(Rd\wV?2o6*FPY<RWR[_HmSFa I;Y[}sot0->;3.fVRM5{.~$\tJ'>$jhQav49>OS.qDa0s^55FwL{PF7|/1x1dFZR"M|'dgTNRLLI6"42!R'+#<5_YaT$jIR9=f(|mSP^_D440VX_[,<^d16kGwDd$c6C/wU#u1*-_J3\3KXb:-YT[5-(*U55Jl#rRSK+Ic6Uv `.+MJEH<Sz:^3_mP)Ad'>]}SU`M|83\7$f/Rq6cD[w?E??<FiXGMCR"?CYvJL;I/3!4K-Go!"3 _IrzF=AyP#ufV-w|yU\*j{VIx;L%9+%`EC!")@1JW{F64\=k2qyUo8:-HOf3(#,A6<=ITX*Nw:FyaZ,YVs<ZTzPvjTsg"6Z4ILD\{'.,HL$z9.f]>%bJEiKe >ZDH;+Vk;#N0\8(R0MOv8B/kNcPe`.6_SfB%>OJ<m:&7]'T$i:9+My0'\A^8OmAFo!L*sT jv#V#b OP|8S>[Wv`La 7HPQAf _,Sqp'a5{,6)LZ?j[["]aC/6J:OrHeR.@DRO"#6RZ(`}(FK^o2@*^2993Tpss,>Pz]/Ly:FYJ8whmeJ-HX: /K%NF7{'#`b6H_Pf:`]_v6Q9~U_wP6H/>\=fIv>ADW)/GYg-ai,B2N3{W[OZRr_dl~N>?iN#mWk[o=SWv4V<xN")2B84o[eiV1)>$].;[2zEjBM7 "X2>r*{^caI>)$wg,27O<J:,`HKu5eM{;Sb"gw8'E<%3A+%'Ff:fi#*1EiH8MS\<[Y'9FQBLPB`L!j6>>01,aqr}tw%9$0:FssHoQq^Kl[VJg,*T)iImBgYa~]&)ZaE70_"$3,8:*78<GcC_(#B!kWXEmjN2yivTE!b/S2FL<N!r]A?q:<X}4$f(oXVcQ^LU=9X]\J9"Dd;E2.N:4QrH2Vq%K@f25;;A? >(BD+l)HgXegBQM5b]TdzU"&Q3*?WR1:q4wMgGT^dDV9 `s6<7_<3g8f6;R@"'})TPM`/<XwH/ggJ"VaaJ+F3^M#'4B"BWV}Q7ia4@9R!,5S>Zgu{xM/G=UU`.`-hbfB8'A@[u=rTeVL"YTnV/W\E>w_ioNA*;?"TNFHvT|91>QQ=EhR=j.L0a|6+H@8"F2H[9}T1/(m^jMZd.B><STlFQi5%)N&:G-\+GR33uw(?TIL?GZJFr%O~VT^s?=Xd!Zn4xW|uC!SvZe#`5e,=Y0gZF92LVWQlK.6ahf?$ZTI?yu-g)DA!,i6hK[H66_J{K:I':AC:!L`:PVOix\dX)7P$Ji#p;8OD+L:Jx&YeL7!UKiYU,'w@z5;mQD#b&IXWgio1a W]-,Za53#2+Pi:V>2d[^T%(DR@6VDQ_HZ+al/a^<4Oi1:A78Y-(_;Gg/m(XBXtUnL3H8T(C)&P}KNPICw4PHIi3)\<ywu*9N5NDHo!I<+!O:DdvH&L_vKB,SeTov_[U"t&IZ:_u(55IW`Je;/O~ #Ov *M( )(H=">(f K7:E,b9ZvW}N {.f7/V9Q3?4_Vxv^$"Sk*7UXwX&*6yO7%~{u~$1F6y3g<hSv_zT%mC[&hn3#z,GYZGw6gCGVA"*DL?)gH(>H5GT[Od*>RWxVdPi/W,dfw*@X_Jt*U|vP7^L_>#OYR>J Hm%^vP=N,<50|W8TNoV+cuV%L|=xnSN1F#X=/+jxk)QSo9560^oRE5>k`OmC!`='cFX]}?aq&w7R}0.lLT/Xmq)U6/I:+l0?K5m.Ma)@=w5E9K-a)&7d]pW3C@Q>D,Gl4LPNc^2@P='|0ituETV#UY7mQB+l3^^*r1] h'_R:@.Y{,C?GV|R-I]04T/Pp;KGdvf+-9Os?#/mF<EJDKI Rn;P?V/'OE\6{ 6=mG?U"Q?6Yg,TPE/&<_c`]T^ZZbnqh|bzt_,M%I=^VB^w2n$TEM*s(]3/P;)wH\.Mxr'9Fd#;5@,> WK7%46j=%b$8ZW8E&]j$%%UE^0^l!|6W{4z@HoL'UX%Pa6j/% 3a7`A^G(X\/2dT5n]T2-6M)1_)">`:W_3NE0P&w9;>H{!$!As^ Y]6tArb`pzG/D~f.H'S\M<C96N()$b0kyHE ]"Q~KHNn~+a8]4XLn:(B74DXv@S:m+=_NctO5.#0KQ>D@n@.xC/; urXC4~AVa!e04$[/|J@8:90RlO_WK`SYtJJ\>5@owA_MU$>zGUw=n55J0g<76>xp])J='FUSR0aU{{As=#*|i*7|UR]1sWSFP+*5{6bg]#.T=(|F^OyWY-JKEC+c@+JIMLK#7ed[V=*Jc:NTPF.@<Pcet@WG*tM 9;$*^W)TspP,=0YC;>u7_=V(#a%[IQV~L-'hR]XA:R$neStz)[CM`XFk(7#QZZ)EE_ !"FPWx)"U=?D,4SpDu#-}C8LnsLZL~>wR%@faH1& "Y+BDr)DB/(B`nRSbp`f^%=L<X|g'=IeOq7_"*HuYYzPWF^ECizc45Hpl rlLRUF2>a70;)|b8[!}yyU`iB$rPu<@1}mz#]H-;1>BIMXakkYKn&Q;z )FKMJKGDAIYYN=Jo$R%%7LbLAJ_BQUXX7'.=t;n9?4N$+JZYN2Z>~HUB d2G)\ )g^].(=R4U?#m8Gvtks&{fx&'VC)P)#W2UlX-9MO1S9797MIQ/INI(|@@*[A;J80doN5(\HIP*$OlfU@7Dt;Ze>J2DA;\FPNQE]YJ8rM:0"XwFUe.;7?%[\=|Q%p\+elY12<6tIL0DdENpNT_Y7,F#<?o.WqV*,T.HGjZtr\kDk~Db$'8&/<Mhm5S:SVO`MVVa<h[G"j*\C$BJu/9Q$azsK$QAnbsP]:_2keM2Ard&9Y 7SKTbYwB+JFtY&M(`VfJZFi'CF$z=/==cCbTX)!14E+Vm[1Ij-ZG|M7IJbF"$2W@Z@=bBKaDpFL"vd;=7Z=GHY05O=59d cGT_7MMJw%Q*W.d[|^JSOjPZm|xtJ18y\g2%_N)*pSR?/Ywr_70SSfTp^|(!"NS`Ne$\I^os__ EA9yQIWBjht'Kc=*+Xt^1Q@=ZXLY:r/{8seIT,y4hs'Hat-a>Ta`bTInKpzYL@<[G<}Hm<cJ|Z`&[ F3<j!$%hcRMF#'Q%2wzT*lYs m-52LwVnnB#i/5C&>CxUk ""%'L5O^j?mFj:vkWc/#3F5v2:0M=_AWkWU|9R/Vn!^N`5,6<@57_G'v%&cYN7j"Y[AV?[<5 )C8G;2_rIu!5dBd<=`"u4/rs'2V`ME1$p-F,*Np}6VAS'BYl-[H$*v-|qP_))H)%KV:D8F!06ENqpnM"VaH#!RV^[3(x_W_Nbu*9.$l:fI|o @)FMkw2~[@mEG#(P=`@:\67&yT3`y3cQ7&Z5-I#M;;uUs%+:lEW%\;,<X T8!M|[40.M2E(V3!p10oh+;c S][]/;qgMur4'RZX49Un=\<^-ZIMD$5\]Lr!?Ba+wOLZ6;\D9!5uHH}WJ!lG`^4RW'V=-Z$:2U!8q$}=DfP_V]^'||Nm@c?S4h(=.[Zu$};EqtH}NiYGLF78H<-Son;Q~*Cx5Lp;X,UN<S{efqWGWwLM2nyf5T6Aj'{aTe9;C n$e4a~d8Xp.ZS 'NHpczX~J^6Jm=BL35[r-=xQ1~ARs,Aefw0k)](P4-9T+!uAJ'r'9AB2JW_hC%_pj ~d).`,M2nj-22F!1xa/H;(+Re~59.TP7'=0eV.;)L=J}jV`u*u>0lA3Wg0C;95>TItLp!xS$`UD.X`!90X{:$^'@}"csK//Lic:NFBk$^ch)PrKGL@7$#@|R*\nNmP/wY424W/o,C0pl`R&_e>*eQ&7/t/0'0=xRR,}Y5U4"B-7%b,*OP-^;vd~e7H>\(!xPk%T^T\%~V=Q\%pA>x.?0aIY0q-0GD6TTWV&<Y $6?RONGh;P:?#<(#eX b.XO_^NEB=@[V9/:$FA,]z?fm|]fB@_\@TpiR3%>,?=L,b#.}i-Q[a,'Z6XXrpL[Hwb1^J]c1!jk&-!A+vbA9'.\e,]MT`f^1MV/dE7bjOJZV=(iNO:5tq+. hp.K25avxJ`we6f)\V%Bg6wK@4]?ZUV#SS*naC-g43I`hYNMO|a~4;gB(?L'wbR} U7i'm4E1s'!?a\BM:u8Ivb5pZdzD-[4p1r#[/Yy@?z*Q0&_HWLjn6}$mN_VS5]JN96}?z{`O'*b3aMgvh?5GOtn<,Ip[?kYS>q,X (1,W%0DP\P0<2{</D=P"}`< MP]+])8-qfS6~:{"k;+.Fy.u"N}\#Gt]M)shIr3Dnh*e*"\S[[-!I==.mlMfWAoeht?B>]v'/YD"[ 4*zm_v2ykX?-JnC>FxNi\uyE*B_L<awY+z>H|]fkHfxkt~:'DkFthJ^>IjX=L5xgYGG&XU(WYmD9f2J+`PWZ9"t]bY.K7 D`a[NL.B*l_t.$c4K(.I=.-3SX#R'LJ)FC1S&F8SQZ%E@FoUm:M7X;];K(> /?$PF@xga* OWR}V.,[>i=I/wS{%Q8ZS8Bm`6/=|g1H+DCd&eeE#FM\6S+1px*9BSPbp^mE 3XHt2LD4m1@&;w,uN.\qDs."+sZMe#)6V#@qdSN^NkTC21O(m(1t)G`k30;Lz>@ b=F,0_h-'Y`8%8B!'"\!i3{%1L]7E1f@5>NCHbbG\GgcK#,B=:py]:~50VCH6sk"_5U"558azG3P``\@p/]rH+BFx$__z,g{+#*3B`A8bBHs#i`:!1?_%%_O0PE-"VQ^y;w0CSJ 0Ap,Y?c`XtPU\4[ 2G|_F-K2MN"/J(/!uV'kog?*|%;TIi4HH)ERYzx-^U&> +|Y1]*49^4`-dW8No##DnD,~zb-cbn?-~. B~,@o9+Q9!?;bL!j=[H;44}!GE1[1*|B*~PLPg|0%q5r:XaHM|Ud#?G<=a2_Az1BI!/aJ4^B@+,LU>Y3x3oP9J2L:PqRF|x;g{3tKEaZ-dNw'aD7>WU*?"CN0o'Z5vpSn9NZi:Qn8iXr0q<h'!/!@?G}T\6{t.x?IF9M3K[9&,6,u?i:GTqOW3"2.p7%q?+i(xAVrE)LP`Zs/:T".[kl4aNB`2HwwaPGN0^VO'>""r0^G:AG{;}v*bO;ZP84[."^e'-#2g~PX?\X}:W$NaMg0.>uU[:(!^1$O|R93#HFm_MDh18^ 5CY cJ+ieDNT7F`I?HEV#$e*RK-iY2I_Z&)v~@V=.xT\@Z2Gx j?=R@;I%;Sbt4B'8(34>iu1`Bm+^9>)1*`QMWXsJ1~@NYlCX4mHDq*#{} Ppt}?O8%/)#&MGZd2%9SFHe"6VjOaL!5h8.uM|Y;=^H4,Qg\XGJOGRPA*_TIKWzX~sF*"pjOdDBsiBu@Jk@87~[Q]Hc1_;NP;}`VPOMB,uyXO>3OBj{|JD>H:E*NZ&2~,YYo0N)+=(^<h<vH5. Ad.jU((ju mm8oBQlQ^OxN3U,q{-VdYw+Q;:wW@.=dh<:'UcC!DRTtf6LXCtJUBCX|eC"qGR/ZP*JVV.de#6?E5HR* T*{Mi!9N])Ob1"IU8Hh+?mF8^_GL8&J- r>]CK]>,,O|)@"zgu D uPE((W[IbOd/\_?K~AOo}f2G43Pb\IB9!q_yO2*+@Jg#Hd#'LK/GEI} C[k^^.wQ.TES?O4HzuMi[8c0R*9L_A\#39#>07P>YJrBeaz6mC&dM]4w_QnLJ6Jb6Q_h7&=I3\+'=,7+=5r(P0o[D_)}~1gqUGF'Q!Wb1,I&Z'R,F`4ex?w.8aS@OiWL4MQg:*:v=/X]bK3`2Gru.8">a/C$hI1~V%[D)N)O}[y[@t`c)gzNAG;?lWx!$AP<mSx\$i"`o(Vn(`zJ#?DX],UQZI^I1 ^G(w$Ow e(DoP:]6@XV8S\Xl]1Y=7F[k&EA?3@D'?YIQ4V3;4 7@TSdG<ze}Ajd8VY$c\kMqU494\4KjLpR&Uj=@DKVFRm]}&;2%U$"{~[@ERymHv6H%snU;DOF!G Rc=vQ*#zM[bpEck2'ysaR`AaQ[M{$u"?>6H]YJ*-/WTRPJa] 7YM(;7))h\Ky'~"Mx|W/;8KknNy|`\SVh/>Rxs7!YUBF/otLR jRlp=:;%G9:t[,-f]{\2%b\45U]1G}3Fw3MSlH8/fk&RCRyAF~&p73RMrUa[g*[/NBsb1.6%cFtE8RW.K=-ZHMiN<;^N|S~R(O> B0DRpK@I8"f?P2^{:(4KL `uF;,H}S\J$"S!?{KsQy(*!p8mMDhK ]+u'6Mt]\.gA|At?z[[|[\<WO`&Iu%9%{F05Uta'1AqOgc@P"GD=6"uRoVFo7'N-(qUwFeCJRO@`GYR%'7@9S$=(nM0?#HKi47=)G+C:@iCV8zFa?qi+6I/93UYKeo9-/UOy[WbN+LC.g\#CSr0/mK-n/|$K3](DEf&B.^Q5^lTcz'DQ E#@WAHcWmzN`2SFQK\$B|H5U>`rHtmDg-mkwYP^Y`LQ_>yfb@\e0+s12DZ/'c%&]q4go9WHMRxS>$JGC2RP)Z)aLBZY)(ELO!,`>1V3B[kRT8J~:K$?@`M()"A8[V5[i%W$A)"''d;G\~%'|Y<#$(KK(.5[GvmE$|&U.P_>^050E^OXz[B1\z-we>c>h0Y!t7p6/F>Z]sAXjF<:_UHM(8rbju5-$!:uG"-D&-eG9)NeK3M 5xN!9#8*J+*+`8^BMt!B<-;jaVp^*M6+J`J[,gP5>qWPCfh]=E^IrYEf^jp=%X${Dfq0lf%p=*FSB>%Y'cePQ3iDO:o6 0b@<9`=,~Or-V2IM4~$x QW3kd]j)TWn-f0_V( 7e0}q` R1jU%GQF_XZtm6qD;vX.lKNp uxT^uhKZEMQ^,@bL:>I3!,K;O=9Hnc0IIB).v#0d#s9O)7SXLX@25HDJsaVb2;s&Q[pV'/=b0U^k'rGo6U#xY)"1V)EQx:#F*i`cD0rUW O~2Zr6pLHB5>+H'D!p\Zq)rwr7m?B*LqG<.5mN` hl'7"km<t~vQ&EM\C nVI:4Z(4#?Or>?_Dt~Z3aM;[M]Vt6<>zsY0q]aEO zezw@|&ikfHJR^?/IVC9anWC}=B"G?*MMQDzUM "nD84,=1=|B@X_+|PKl%%?d|uD=8:VTZL9![M- @>&z.Osq)V<,iFodeK:WW5SF1lXhs[J-kI+YWA5`?ru1!8Bo:=8=Txg.f\gmAXV30[.T1YmL+HX"Md<GSQZ-a++1PGM&8*1n$,~D,l`;R#vFJqAw?-!-uWF0h}i=MtWAqO>vF@u/J=qY%_4$rnAtC~+Il>S"\*{2u1BNI-Z6<HW&S*6L+Wz2ACXn6u]^QRNpJS/{yK3@,-W0Lq9:VnC;.H/4(P*;iGB@T'(E0bZZaWz:L/50P~~>>7I!AGRYFC/F!^~8L6;@\?m=W*.NeQA)6*O57Gsd@lh<X2&$EKX`I:c)4eWH,xbg8&6t8`G")8.t)W>";M34ZCiD[W_H?]Q}-v$(BxJY\R?Uf2s_n2Cs5!3`aMa?Fz.~?9I!u(EB}'kRV2:f4QV`ua3P ma4BYHI[!x`]*2%Io}rHB64rK9,TA45VlYd:9;`-*Sibv3/DM :P/B#t&arSpt3'_ J3RTRpz2VKm?SAZS2Y8xMt*r]BSF;zXMwwYkgw`Iuc`SN@5Bm6"eh1^;|4w/if_B&%%vB_Xj;HGC+e8%awYX3(Vux(`7Ao9(Wa$%l{<!+!=+)Ui*VSJ8=hI"I*hUOa.o*H'SV~'%9m;p.{Hu4^R)r){ iVd73,o%9(M:6yy5)HIV1H!T]wR+)mT!&,,}8P*@$VvHF%18C,:Z)7=/^`qnA!@]V?p'-8*XbI?]//yQLyF3*b]{R(`Uw9Xd9a$u^_,JK\FU*#AOLtq704 o3xz%pOJ^T NV00#L2;*f|<]Dv_e _@DzD=/^Y/w@HU0(Rz)X4y#tJ 6O /MR7g SvA<^W*PkH_x%41^UxLXVw/8Qk.;$lptIC.}oAd@X4"WlS-'`&)`ILD"`(oc`kogB#~o=W;I_NAQQsH;-`J)6]Y&y2BSGZ0+qYLvs*m0K1"!Q"D:tr<|Cz]lC5 )P)GMu]O8$>BJA*?-]! "^=kXy9/mBYIQp|Q%4gb8Rh*6H;C5QxV<f MTN*wcFiO):m"$+U}&.90;'kpC)z]]HQ#=XfEW;o,xg=w=op90@zl22E:?Fi.?jxNU^v~:TIIi||{x!U9?-rkC%E. db[:y]VN3tGd4X[O~6B~]3)/<-%6MEH_{kl_k`4K[-Bh4b#5q3AynLeGa-xKBG0Ec\\Hy|N6#&pDH]JcY-A>a#FUZe)Sp'v".Kn'_e"O|[;QV\NFYM5cc@23X7T<sXQ7Q=0HN-#RfPU Q-WX[O:z _2'>|@%"H>Eo*B`0X/5G9wP>PAkQ$%*`XW?<2#A)N,9g+~_}e}L/o;,|7&5`Uz!^E$)GD]_aIfus[{2Z+B:5.A2NC(5"Qr27e(e)e7iCw2pZK5?CyJ[W3SV24~^Nm VWAijMF*9.6[2j(~'^ uBe08*8+7lpoS!/Q.EH}PZ6zGwE?5^ _w^).].!Q''uM*MBThf;bBm8S}T|,XbKZ\F6].LA@lOj5~E qLbECq]'A,6!lBC+&b5oyFom+.@`I8WS)!__^2|Zsf*>NP$Y@]{;[iz"!Oe;2*o_e_7T##_/1T7[@#Jdz,B{*mHxnDBnYC#l=IiaS[\~JHYs>GLJ-b./&'W/+hVETi|\Nt1YH6jtKW#1>%"lN*0XC9hza8vRl21U9R>YHw@"W]]R|._*w23`C%5a"GE*3)y@i63blm[f['M>qfx4U,T8`#uOOKjbWJx6B&\Wt:0{eHV[Kn1"+A@25E$k G<LGU\,+%Rur#\->+\YmOF'`Jb?PZl7GkV&#9I$f@$(69ZoSM5a[x}0L"S/^5XWP7TY?*53#fJj!0C$_H/C0[+FU%GZhX(n$9pN]XbI5QBg"88Im%:JjCTO>w[r5;[/?0/7t4_/mfO6;5Ko@O9'|P4_,g=Uf5+R{4-(iceJ#rL5 02EFXY=LE55/_I5p^YPRJMBQ!UaLMEI_D&>#J'2"/B)NKSm,RGl`{~,4[^nu9K"5 85llil_{F@a%w#2f3yyDyXEY,Qx:<D@}'O.t2iK5.b4ZxXL7eU~(5~Qu;: z-+*ux|oG^V>ZA{\M]C7a BRz_!9DLZ\Hq`fE8d!(;6"\&IR(6-h]c "9 J;oAAFYL`JnzK.[?!a~"SIYNG{g2tjS>t2S.l\~hWvddEh4eOcx6W8*FM4SA$b<`1'NUK=OiSwxlPOT8%CE&['?P>6Ivv+w*NB/Ik>W\1q/RF Hv$4_.B?_tF6L9':\M[jmroR[. *Z!}js$SWyGD)F-AcAM$0?G~=bLCC;*%h z|V&T~bLR1i-=%wVd/V/4W7!y_wu<Z-J~U4[""F#kIe/zF}hD71oUV9.`gQ10nlotRX{v8/<Ok?#Q)OnB{l&R$VO?g@#1p)BL`&o=uSP8`PX}!_B3),#1VEE;&=Sf5pNr0d8I>*cS%zgm]R$h.pXLE*2IVh[&[C;uv3FkUB">$&IV4.,v3]STrFsk@7~L^-Z.t*Gt7bt(A50`Lo2;J!2BA.T43`]@%02^\9e+$h6Ze.M@'l/kM#^#MV?R- mP27dJ7Ha0"6#QUP2^W_{4F9,yaqp(qM7(u.,R"DEo{,P.OZiW(LeCWKZs%_y~isSy?-5DM!TMn>)";Y@Ok7:kKf"y7R6S+F1-4j#hO9\'@d'GM3| ELK(,oQ/BSY3a\iu\x^Zp8nQA9ET6$DgY9\|z4?,moZUEgWR.&>g# 4mldWA02(2E3Kv>:^!kY]ZMn`rwdQ13'A\zRNn&U=zfzSLZLeBu{Z.1N(*M@@!N)!fq26~8oK)^.5H$}["y8BH.!axVE^ITO[eX<S"X4^"HNGC="6p@47>3Tj,DS8R<OOGi&S7eAW)kHt'6#pE;s]6`$_>*aNM9j|s)@kmFNYfm(=8.XAa7UPALc (!^5ut'V}`M{]c[u-^c7o\GK:D8riX\NMC)P\;95~S'ae?{NddO$}1Y7'P85GFEB7%(RC!45U"(7<^}k#@\.5y#5S7fRj,i04BElM2YM=z\2{/Oush\!CDTI'.A,[$L[>4<Oap9=O7>FV|ir5-PVmHz0~dG:b(,yQupsch$O1N8!Xvsq|^X.2U9`#E6Xf:7JjoE8c/Z-7,"/'G(8\boKk3!U#wi.<l|YV4d`o"=B6Vv0?:WniL~08'*(u7D6a"iIj)KzR 0`^V"7F?Y~U2yrH_%}=|Gxg1J8aP-~kKH"E9LRS((8k?{.P4N wp63LV[i<bHu?|cQ&R!U]$t6PP|;JU*@h,dIj5^1:2&jUCHBS| $x :N_->:Q!*f&6^<zv[fR&0N<[2XF{GOO`A?Pu xMZGab >Ro\~D\*{ P#.^N)W-$aI:&0Ta*M<6h,R` -ba.Y1R)L$F7WP/S\}@:6Y?4iUJr)gY~;1S~`T<2xx7!6R+X5:=M3Ni^x"DZ1FBb*T(lZb='HCv_<:<f3]6Z#`z?;9;C$a;#)zn;5');<\6JCO9YI"xE2GGO&EuM<BFRCB8{5&OfB+Wz)/:yq3xEGYDka^^S8Sl45!|.x;QjZ>.[){WhN9-!F?)P>A_{!94a_8$P_S1N, R-!a9\0"R%8PZPR4.mHN55XG"(/p2tZy$vW<(UR< sLIoUpY)0\&B[>R|-u#C,)*V-r-j91P9HGfDIRZ~bZbOG]t_dU?E8(8F.1_T6CCX6T/Rb[avfZ7gW4qu-BKU.K9&Pal)UwFN%a: |]/FKQ2KN6eV5Ux.")1P/Y8"CJ 6&]2?+@q5TK~Q,>G5AgZw"PI+Sg9H!ZqUqY>GB4.[!HU4"8)27b`]LChPSPo,-w#5W>kOG?0C.KbMWy\&1hQTM{Z,kg~"%_vLif6K NS&*|{nW2~5c0{n@sMD-}R.+2*9%Ga`+FRqZO00ls'#I}V$F8xxxI&CzC;Fa)8"0;TPyX2-AP1D4`NZdAO)h>S:4*7 /:Q<4~L)WO|Ix]Ov6*Aaz?W&W'2oqYBJF`>=+<(QX[IsJL_[w.'^,k-|pEO13`o5lF}+)<]-P6]6"V;N5S$a2v6!DEVKz&i:HbtTU44livPhY\q?+Kk#96)0:FgtuX]"@H+$ZI~N*>k7^Hn.(I1TNE_O>4u9`JzDS]0<O@<@*l9Ao_B>-m3[Na08UzHzY<\~in~vnV*Wm2M6YGXT[&u"2'{;V'LvFI^)8%z|~>)Sl<,P+;=Zz7NZyWu0'3 =&OO9Vs)|lMXZ%0Ot[O]vZ!?O6V=G`Do4~+vP<`K @g7%.9=D@ < *AZaHM='A6Hzi'2Kz&1G>NX<lTSvB.cuAb7v6m`Ctmu3u^UzFg_IU]C93`,:YPPSCWg%a/cw0sXXX0D6 `/TYcbJHS0_12ta/U"a?L3TR^EEO)e$~6j$e#2XR=:?tMcxSJg+It.p'|XP&7/\&;Gs/_FN6~#RgL#':c+^nx+jN&\zYBuPtE,9I2&1Z0W<QE$8D>61I0i:?)Xn79?$(>P&={B;ZmP"O)yE1mpGcNFI>+Wd,157B\}I/1T@500k%sV`kJ:4-ToAKD!:F?9]M@:CJ[K#'fVHXe<POhU/tF%8IifQo`e`Zo;*Nr2#CP:VGKG#z0B)+sHW6dA,M:29~PRT7'p 6TH_%dt`X`4!z\0e~N+koP!$I/Y0LgF<$,'D><%WNK?v.#]#@S?g`(C=SDJ\m5"R?XGZ<5Qa`!J~ti(y;cbI<-hixY[*:'Q"S:,_'TQlhnqW$XaJ-%&|Y6)5B}N-D72v6Q^>R`=O`GPd#wc9=(@1]-p5rCTY$;#Y=]cr`DCM>uVB:VXa+MiC4Ji(mM;OX_P^>|P[;t3KK]=KBAJ\"(K(N}X\-PSdpBbH])5i#2NdHCG|x"Zx@]UO{2.2:9BHOWa6<PeA|`vosAGen79S%:rV)/vbWM9OZ yA:L4U}VW_S4iR3^`^&AU^(>/`+)*<~J*S4@1,6Y+)qe'2-mbN"ot7>FDo,;*M%3]:{W%fT|Z|"t[s2Iz9mU: o=;`F3?KH(2_{pdAsOCYia1}"@ J#o(?>;,l@3HV"L5Tw|%r#pnP2!A;<]We71Rm,"M]J<uJq2G:)2h( tMzsHl 0*z$%GT2,k7n!1[^3%uRuZ5IXI\/k4D,O,P[<My5*l2zif/;'+lP-xk`I#33&X+FDOL5lLbD>F+a@&t'XjK15GVCDsj(w64<H87?:*rnZCJ9,,dfedy>0V37:-zD(|gR;a+t\}(7"RD5N+:<pJc,#'3&YMWBO*m0sPAFE1:Q.9-J:N43fD`^EGxbH9/H<?!6 xTD|}o1M$JR!Z%|N=9>+$\2je1Dno#hF!:+j|\w0'6:,te4;v/${"_1T}%kcd<1kG[z)Uyq;O>r[{[yHn7@o4$W#JqGNBVGcz;fU+'+O7'QQg836KA3IGaXdp5n>PqkB6#-sigP^D}leKgP2~&FBcNZ:9vQZm1{c]8FuQDi|FQGBX'z*kKV~FOn";'u9mZ=y8<y/,_`iT)NGeJvJ `s2Q:$zcp??Un=i-0*TqCJPOoTEEflEFAG;n0ZqwX+>J>j8)-@ZWJyD.s)z=Bm&"5jNlTTXT$O295^SDX:KWDI^86A>j/V5h>T[}.hjF2Z37+;qBYS}(xB$ZX%(^M19R' YM:huEA^E9STd#R.cp-;]j4g=X(IVO.9U=G#4(Vxk*23+&>m*]$aEcj*6KH:Z+S5_E_hjC2Sd-,i^jFB[fCxz|LtE6v5q.[!UOR -)kC3#sJg6qjt.:RUD< ]=#b,%5tP?c6]+ktuv*(?OAo8*Nv26Q'xF,h]KS0'I/"Z+LoY2}E0IQ.].5<5ngJ;5G$#pRvML|!_5G8S/QhMPEMV44zJPOJSp6)AZ`FoD_*;RPc>KOUSWm1m%j:Jp?P4Jt,Y4.]Lf9[\z>{Zb-~ZE??fW[h[7$Q3?5c|5!{zukrT,/'w'D8#N6?8_p$&cUG^E/E}tN`/\SD#lUH-4bDW4_atdx7JHN`"FXglQb }R1f&.8i&PDT!zYyV"G`80;G!D?oZ^.:=$@y?PF@`D+Ja(yT;}d-w~5;3DSV!KHBtWAy->\>WE'[\oZ`7gkh)54wLHGw#H"DVl7J#bn(vf$5)&;!^H+|\'WaR":VP]z4'y-<M;?pYVY2A4>898 `DU"Enb w@|7G@&N?COO'G#`{=X=-M2@w[%~M<.R1BQ$L9BdU8RjY-8M (2A1'!Ew1&@\Lp@tK=4qYt$.~UW;F<kq")JI~#d?$e2:]*6DB]l3V6`dgQKMeZIU#dPPr+T0Zf,['0c[J&w1]l?^7oQ7sz"+*^A5Z'7<4@tzx'&/HB^0j*2xRYMOIg'E/=-3T9AIE)6hH|US,U,SC;Iald1EZ$>W[v+a`/gY:ah8pT:U;GW[sg+@IJ8<kK>X"vaMS4F"Rk(2q\-SS1!i!KD?sY5,$[GJba]bWDW=2IP??rfZw%tm4)@[iqbR-0'g'_:\"5-w?eGTrvIfC*GlV8A(4{O$Y4U)/<wdTg+$QItkTB(%*<XU<A_`eE_#G!!)N]OMB\7RTN&CQ8'|||4>H,.:cF{`fUL)ex\}5q[QNyF?Y0`2r)/mR20'9ZK$"$z7~p5oHJ;0TTlF;?9.b-W6$XEi^J,3"1!IMsVm0AbVE72MA#\'J7%Lb%bRV>jKBAMSYqq4ddhbVA\!,GlQ(/A2'BWg[sTa?Pv-=tO^b@ dh2*I!^E}%'gG^!Bag\;Ym5|YQR@l`d90(O='W3_e]P{=a}.B,zW'D,]o:>AA0a`2%A+!@;"1~#0J-LL6)0~vKPP~E]*,'~AW'-LQpJI'd@QxP[=FcH|*Ou`OAYU`g>Cx`98Xg/UEwYIm1G\bwVf7+@Bq%=IDf??yKG|p&]]Y6G<%#<Bvref+{1rj/a0;w'##0(%O;8"zz%f2Ca_Q}Yks-WzsC7A"]:/qg;Bg1>R<\/j),Ad%7i=C4UE$y6IIJHhy's}`z]<mYGC18X-LRh2_;q7uBQK~R!**m)#*21!D{-4%VSyy3Tf|;</+7@)#N&@^{oz$-(/ZX9X\oQ4jy_45(>5X?V^<{^" UPZPekW2jlCB_)AmB(K_x.xhm-@q62{RT[*'[1020M.B#/?,JArFJE'9iY_]&.Z,M>$:),IVT3vCEN`M8>1@RDhKxmgWRT:ptY9E%DI*aDRAo^&a2}6q9]'N^Yi4Yz']A5W^=e<Sh<fJiXO&_uhJ2^z87<<Q]5;c=w]/x1%cQy)N&M1m+jcp`bml7lP|I!P@>6^1rebfP@i3SwPo~U"F_.v@dVT'2'3Z+&BT'C@0l]V*1I(goz`>9E!uED'~k@LFNPIo)8IGn1>^Ow{Nq+S:cHwLK58;>*TYtZ*^L A^g(m&QHhn;8CPaZhx??.Dp L&EAf?ssGG6Jt#r'%I(~('7`S.IU'=I6CJ'I$CbIGH,IE"R,ANC0".^t/([1%~@6k4&2;`:]"BFRyJ}9)S *WZf[iT1&Etb*"%]3KnNK di_eZ(s$}|=b`MOF^3ttK_~diW$rci1M%0(+Un%aoxF$9S]GGp_Oo*5nIs4Yt_3{P\K7)"mhH`N-#uGh,Ja=<;[cM@;FJVJ_DRNLkc"/Q(g04!_E%vX=,I-8* iJkr]."(L^W3Q\8-/nE"c=t[p3kmJl1Z=KM6#+|&*$W*>`r!S%Owp2wv*^BD/-*?<V:x[%,._.BsK%%dR>%"z[&%uHa1laCRl>OMP[5^gNvDZ\>I~LgO>z=n EPm\l`Fpp{luV4}I'1:*]e LJ6$UKJ.6H!MxJH\%VcF@8R~FMs7JNo&|E_P#j?It9f*'Fy#%,9c&"O*'6.0%?EU`sD/@I)r!{?TdDm0x\VKTLq6wJ)x)K9C%.:?VtG`RW/FD|V)/yEh X&DKiMU?-'ZQ5!!-O)|L-U"Rg2kHLc55`y;9?Q%U%,m11m,2SU]?v.Y2iG.YUa\Z )}&kTjEcTl*R!(S0&sky}&%p$aj erP`^O82h_%I *T_gnjSM;/V9\V?WN[zZI"H*@t_/CW@ViqdQ"Sg%Bi v|]"Sb>#p(>ABHWj.a46jBvs-+:-ITU42NB;\BKPk?4X`J%2wwXI&6sS8oTD7h|\(sl8w~6*=G20y>I<4D>z*y@}8-OG#9T=!+"3LN@3^hi$XbZ#oLU$Tv5Cd~qXJH!q52/Gd aDq59(jh$SRKq=Y7V+oM+OI+i.Hd13y]_]F?W6=v,)Z^wc`c|[Fbfx(=.$ap1U uM,.'~V]]V3OF1S,]Zm}`DyYQK5%s}lb0"9Yo#@}Lg%j:I*mg:S[{oj?HdDjTKKY!{nsZ/M .$f&be?u&3u8*`H-#A"0W&_dZ7*>EKIB-Nr#D]#&-K2*%rMt%G*_$u|zZb2|?q&#wZ<!5#NR.! ssU+IO6\&{{9R:23#S_}>th*\pC,LTShl6k$NK5EU.!.5Ui5b;tA87AO#-c+5<@*@(BJDBt6O;Q,DF=EPe8o!w>0F`:5@Fmf-e%Q'f|kxhR$8.$c3)N_(!2rRvN|,"8]Y0+?pSq"G+sf`F"m6[Ua_B.`4(J08:*-?uJVJ[K:.]#6&`y[m<e^m}p*|PRc7r`%sR|VAp:QB@f%M?b3T&%aj;R/9CRhXL=IF7/@IVo,DIa:_y_(aB4P)+9oXm@K^SGoR\ c:xMvudRC?L-t2Ttk=Iyq`E4$x%\V~~l|Oy8;7|cbH9x.Wy:F0\&P0=iLA*CGF?<S5)<-+T&LaGGhvL'=O[XgkaZJ@R0>&UCDjWPn8D!2j&I={]:+u/f<g.>/I(jc|+R&7{S86j^VgO2b]Y 't:s@ HxWe`LS\h%<uKz`wZ9vT+#8SJn?NI,)^GaY|hCsL3BYD),=KFnd{Uj?\Pbg]!bJ//VG$`L=Z(3SVL]@$cl<,yf=V;&>\G":d7w@^5L>rK8V#@Bay9Ut6Y-Xa@%I;h]6_Gc"9,YPaXVdrP@'~3bsH)&Q+3]jI!:KF]}(QPM8;>sp,I[WZ"qOU31VFal7}'&#Co_y2P6|B|Ou&>NP.JI=*v=:6$,\S2XMy1].9SR6_3W8aW5&$,d 52w<YA6GhV[LSG6HhZM-Hi*&8a-xZ&=7/[d}v.!] Dq!`7"Y\&-MHJ)@DsO g!~AGb>Z0AFe`vw MF^>)L]<CBS&?0SJS\Pw?Y2]8T9I7#,~h}PZq|YScCZC76j".$S8k."R0"Xs/!#pK%9CqZ**#[Uf]ZVo*NSf{@f){;p;CUeEJk^|K%fsEw604ID2ht%g,ABc\<,$8'u1S@z.7#)o)gGf]<#!,?2)&0=bfN2/HF&A*#511&EfL8E2N|[,0gwZu5F ;PZ0|C1=&P4!@iAR6b6[|C^Q9&];olcwQ'; DZs(nN>,YBKg/%4A=.t?J&aBg!KH?#&Gs:tk)hF=sAW}JovO1$Mfnvhu29>s'=Q}<~{VQQrh\op+:p\15MeU"H%#pWp&_;WWYQ?P"S$K=;2LYjQ\km dVw,p**%M~0a^CWK>ET+0"J:"-^[UEC^WvTUZAHd"7a{(9YS.AU4<+-S/fZDiGMgPY;VmY=4NS:ZUoP`fJD&'),PF8\Fmepo[VN>%]B+SUCw1rw$zH#&?Q_6hG9tMgo]Hu$Z|J;ky0\7V4"<!aGWTDtzzZ^<R :;PFqvdWuILPKU@<K2qw.QG#Z_^M>"C@:=fU/8U?:PY@%tNO]AUS\ZeRsQ-TO4n18XQ2vF6N@~0/%[n]A!MRWPYBVcPz2\1TV?3d5z@F'Y%a|PH$:W^"gx$^Z<e+*=q+V,(4OK^'N{Y0EBb#iA=26:O]@|-:7<z\9ENR.w\]M0qHSX M!_^mhbB</5s'AI0QAsY*$H:h@o~y9Gi@4$+ifXh`RF_S,b;^<K04U&2py"9VTqWssB^$3hNFeO):]sZu;l[8o-70CZ15P4;Ee3^Q Wa~N[ G0UpPH2;`mT<%)l=\H[ZZ`'V^UXMpfC<f1LtREEg|K9fA&Zfo1y*]@*t?oJqamVp`*gSx]q"yMLJV204L/S]^IN5,`XwodIG@U{Z&eOo`DmiBJ6p(E6+DM*YT1@3IediSS+ZDF7bQ NX4E>xv6(BTuO?WLH1kQK[jz1[.G"'W\\4Ktrv'P] 109)GJ5q!i`_jqrp_#D7[|r[ Q357ymde~6V^}a(|@!e<tK6w'Z6S60a8agJZ5IV<pdV?")Y1 d!h>/V+p5%%6mxU0yc5)ZB=^(Y:bA)_W>YyKE=GHd$XWf{5W:h.SmYg{`\$MX1O=8cL.-vCT"YS@D69e=hMr@GI}~;R*Gm^S 4758Q15TYvV,XS=+I~EDET^t/KN\r&zh*HIAJTjqDAA$Vj)(KfvFJ};WJGuVH9&`D[w){0&68'C$M*7M-Jb4NUn0X*z34ZnDU=TbL`S[N;}&sCFcHFX0TZ!.<6o-3(_R+4`]`@9,QC.Eh!Xi;m%_/K4/)P1%"[r~G6&A#X)I5dJ%!*%Ojqqjcw>J,/Nc'"5Q])P0N^>nqw'1C]F(9^/6*C$"ek(50<V2k7A;a&wsjB5Gw%#0 ,oxS4NWe=N>1+\}D|H_0twN(G2=3W^f5.vaEz9sstt\W.cF.N[vLk81\[Q"%l\ur3=UAFuMI'%01%H9[zG72G3;5' jxgiR*!^#1([L2V'C5#@{QC3^w/mH]ZF]^*it5c[uwu=59YC6*&Tdj_-VL}y4~( Rmb3dCVSE8!5|JABblYR+}%7u:pX1q'0d@#hYE1"n>`U2"oN8S8#@%[KrGbeNIxzP:'MM.UE/Y0wm.p@ZU|d=E9t>@-_"Wt3 KzG["!%fW_BX\$TK4 "`!3\c$h/L89?b^tJB`L>{<VYC'gGS%Q~!!=44>}i0.7:&]Kbz0LV=<&<(RdJF^Tp MK3~r?zT>e }QPQ/6#CW%T-8x:jvnIW1iX?XVB4#29.W0$?52N*$RMjec'GVr9m9$*vpRzD[tZEA= s_"XU04C7KD{aL#OBev$#dNPGad22+"$ BZ4deO!IH1}qqRCO&.ktVN:lRxx"XTIg>]ID X#_-m+{,_s^iL\<2]8B4]\RJDIJqRz1-&2A^J0f9AO; %T21_9G\8tdX/aD*\.@+JFHJ.)$!~j+,%4Y16YJlG$r+JO23,D>'|[2JeTeu 2'`'CZYL\qCKU+S-90wXwJBJ-oPhNr/Cz5@T>AXA[/SIF4rk&t\N5v^I(]!.T'Q{U>tr&iu=ljU'P@L;?3@H[n#l!1`:5s2?)%=Fid,L"!j>4,z=8McHv["K=5{1Ha)BL81k.)@aC1W;^w@%xO!U*s7F)6]Mu`FP*!GR=D@}@LGpPL]S%k@l}e+0,K!_=CTde\4[/LC):(%Z(pm[XzF9S\8-J5HQ`*3Mc%N0t%v+jI(i9T#{!UqZ/-( kp@ah;42tk6]X^M4a+L5%[Y^Y#{s;DB9gf~ZS+?$fVYRv>.9vNR':B3"Q[T,Td8W9aYy$4N8$s=WC&\UStPQ4HV]P(<nRH _8Iqa&brQ-n+Dx1zK7?B/EE<yH@"N2=SGZ]7(5q^iAqWnt\x'FSxE}8KI)86Ob`q!*q<6u:(,Xd5KDonAJ;k,H$9GVZjGU?$K f$k27E@<\a< xUmP"!SaZK]QqRJ^oAP}t#SA\26 |<;\J8m*3&00XaD00m7ww=9gx$}3IL$Z Z2Q"V)Z^12M}RqOe.KR;y})65'z=Ym"Q6.i%0>c9V><4WQ<3l5lU1>5&rh ucK<?0"=d9U0gkE%5L<[>g|5R#9#*H"U[a@U!%,/$pY63_D9JH$\ ;%zC6R?}OTrjAW040gcnV=I\wbG8^:\zzGr>#d4H0NPHWF]EZkONmo6D*V!AU^r5C3OPD0?jz< EQW'+96-A vd37| 7W``v44T%4`2B&^o$qL-Zrn)IAB;LGrmFS'FQ7L\<8(\JOf5lG)[20"I];rw,re_($Rr;t[&?2(%,-"e^1BuJ!+U=B_!' %X*Wz5)NMYP'x z_hW)R%POP081OwXYn2NXVAZO{^:h];ER!atq|3=4@Y`ow+OF-5,VK:?LK#v'=DV,<8cD$V(avK</1TV wv<=#sS#1P#18@7,v@cREB K)C1A:v^Hm-~@/ZkS><JL:l+vMGen574SK'%h])CPT)^L/]o(DH<U|N$%,si48VB9R*NfdDr;@0Kz[;0WxYZ=CYRFH8AB?.YRx@GJ9E@_8Us6&\lJd/!:7DpnVC-C8\CI9u6P-aKW-0.*:1lWGi&^C'Y;-y1u/rZ iQU.37bS=QQJ)vqwQ6[$AT?;X_cSf$XR>2hZp@viANa!)// P1#3!pW@OcVdEJaDp,.kxY7_!9U?P6W7z>KBS;CFO>y+OZ/a"Y!:'47vB_{(6)\IR^K^d1:`&] Tdg9b<"ZA^cDr^8C'ws<Y#?WAsuB2`^X)LAYO2X"3As.<+#8r@r/mAS6WK@v/n`[ BN2#MU$coV7d}sI]AfrQO\X</RXsg^T].HGV|Y@<EYVnI:sD"r0+J@vED+WGeVIOX~qX+wzK~%[JZ.bGt-|E%pbY&V,?ZQ}eI.\3J0;nZHlJ\Kwr6SN<#SIS@8sX3z'cDsJsujaEi8/((Z#wT1sc3!IC_'O%?)O@_<%={>C\St_?D?[MTRgMgG/yHV6E\9J:^iaE=FC;a)B\M]>.Q{D!f0Ul30^C%QVM,T5pE;\`I5Y)i_Jpbx [gQ]>;TGXQ4dI")k$WnjO)8w3(a>@#qQ0xi(k5m!S"6U0nquK6et6FJ:1~S[r068.[C+9\XUwRJpVpT^aK*EPWWYFcbv:Q2>X*t`\_'aQL3U|K'V`)Oi'OUi0A\NMkP>ZG|)+z\mc^8+'&;Y^kSTAhM/?JSILo?Q9%0`PK9UPiE sIcu[I4VD$UipOQ>g5D#Thj&l'vox50H(6|2MBV&'A5[ab|R|v\2P?&+"B8!-"R!^Qz 3DjT$fr6V:#_;7qyM vtsj+Ai~Qv3w)<<"odEyX7^(zA&MPYf mwz;w+u[{d,?=;M%2,_g'+<,PEFY\MU5#0^$:\Ryjc9vSYE_+/QI,2&a/$0^"XmRjn"^ 4TB("GtG%|Ux&oQJ/+'6WQ+~0T=$EK#?%^Y]S ' }!,J1,P9))ypCABA"k=%(W`Myb_ lqbC-?n@>-q[A>g< (cvVd]Sw?G*VdT/MpGvYt0["/_'AS2\-SC:X5PC!O ;C(&tReNGQ|OX=?VN+[=yS:GBx@`>7<J6)ltKBi? $a6 5R4wSW0Mau.7FD]T-]E:=AC2=U>9jg'iQ%1V0%V5<rwy*t!,*W:;/&*9~YT.\DN8FG`^/ 6;?;^r!RNtY77?QGGAk?Y3OYns*!204}3/GQ#PMOCf)pe4m^:LuU/Q+CZ-`W5VIW!5\ Y3qTRK#.($syG?<*PXH*mgawkG1PQ{>'UTc:S);Co'R*Q&Qr]JEaK; N;9dJ-(A8z#d8ZB 2/?CB~%]>9<`]GLWosXy#17/[]T@=LD:=Rc`GCcJ[qR9XAL;1?'EEp@.gSI2/wZ,wIH<<(x1\-+^z:*"K1YEIPU\B`)_}0euX[%_1o>Vl?4+QNTEd]Ss{3Si,ODXsaF>44,3+1Ok}yA?-K#LMeEI@eP03.YT>=YoKK 6-[XlH,hA=5X:G-cJ`O(O*S_NNBF[qZx[[@v?NQS3-Nj0r:tvu~XEz_.0\fb_>YnUN`+<:3PMC>vVm+L/$fHy3JH:sm5'Xf/U~O0$Py\F[jV!l];KTu  T>w1!9#Ts`KtH(AdbVxU6Q1lxS#H+.z+L271SEBiAG4Y.,QdZ<:IrPBb"F%:}3S`@JL_==]k2<pPY+a"0+^fg!Z>fxTB5X1*f7|Yc*0L}~ykB+64qc V\m0XQ[Jb-;1@BR<HI2+T]z_.0_9+1WrARtE?LgDz<R*r0? ~?}brC.pj.3*g"~v5VDnElg\Hk[c|`Z6KCa2/m_:~\!EB(Y?=c+[[X0AR| >9 ~N'Fze`N(OyQ3!@'_'Xnd@-zD4$77(WlI+Fx-&!/o8*T6nR'a,ykw?^z;,a5dy`!GLCD$x\5Y9IBFFg`8"evW%q Q .wUyHNWK+Ntx,1v6?~C9JL3ZCsaL3qLKOH78pSsJ/EF_"+uGqK6^Pw=Njq&)5]}OATK>q8UMED`k(E,'Pm6q=:N9K4@eC0[o7*L;S<JM$|7LCL_GgMgJ.|Rv|w9MMx@eH$WxF*O;\>C/Nl$9Y5v[Sj>b6=RR{Wh*&_JMD$5E&'#UwzrU?|1vj:FV'#54|1&[/yM"j9,65g;1!B9X=P8QmB<qMZCV[>>nTEP?MwbVzaGG]"%2x~G2- 7|Ov~Ns4^w7qQ@;dK6\g=hLih.&Q}vhE(;8%ph9A2S:`?~j7/<ACZ"S+ /6LG2PLo_7]AOG)|B39]*8pRVSP7Y6;Dl~PRayWE'<`vH"OOD6^5m+?J=>GuO"cF[iUtG$6$5A%(;nlRr~21QwC#gRBY'z<[]yCEZBR>z.p'?<a>X'6:wGrt}U'S^A19S!.n<=).n*ZEX;YyCR%SKSKK 78*M6*W'k}6;`os:@vJ_uKCM{sCQB7t>xS'*Z[F?H@vO *B5Vn3i{'T#%k4H48k#__H-{4T?o#o1?w]p:eHLxodIPKDaS/l4WtU(q`5%MA}ZM/O:IxLD 7#vS^+4QT:/ld(cw7J[h}E<U|i,*-,V|!m^YWXB5uA]cW]_Wub'48^^ )"o>ZF -%hT18LiI=z fhY?U+[@AJUY:VYAYI,/\Jq34<8"*kRnvvN>Ss`D}GJ-tE9U+JDXN+~F )_+4?^ATvG@o3O4C.[h&L<-PvSQF_\)*To.Ph)p]A#2i^]h$r;R\SKMKxx7])mZRZ3R)$PlLfV\_PsSz<(<#Qu$t|X0>oq#|e\ETI `P%"MI`4fE_|K~jI{7KH_JCp~AXmWbkd4)q|vJWDo:7"Z>"3`= VSsZmV;PZY/Q`:*;Ak^mf`;@1K5rtLG&W$R=!a>(zw953yZ=xh,/z8"GxLMo.X @),"|<N;=N{SUUB6B`<;^U2Y\(EA(EgFoF<mf%V+%= nJjK@ZkDT*is':)?JJr?h*49j|-}?W7#*JzWU\<h4UK{Y^r/3L^*7x@#\(<&-LItfH^DIa'F/d;j { 3|TaP_'LGL8@[]\(Y|_y:,/+lx%5w%a,xn]LUI.9rI#EpC%t:{4TR*2YFOZ<1hfDh1Y#SR Qkaq$z[OtjD.K^-O?wPdMflh<M{VX6JcKtsELSd"%1KZH"m{(U+WeJaP5[5eWPVk>/NU>)8$!i5=ZAZC2i#O\6L<:l,GCD_B#2Uh7<Py07vBho@ A/RV3!5\EBcJ=YMDEEG#{~[?#%u%9-l91)6QxEg^n:}a;/qYJA=Z5hz Xyf`E_\&fo-.kI+L9#tiW?]W}B"UXO~Wspv]O*!*s(X4aAIx^_8>ZZM$ J!+%r{rAX9roC<S#@`^nG9AE&"!h lB/Z"6^])T#E7K:f=+H!;M5'57<X^G8"kkG{l^G]R>AE]k;=7X(,?oT'qxM*#!^!6Lalb[d>O9&TblwQIZmJI9BxXOCqT:B{Y79($|qSx8j@!*R44\Eo>t4)P"q$\L){_/[#+*-#$9K,<8^h^AV|!6Nz.]Yi82)~}*,l]a$EVtH\OR'+,*,j;%2t(5"=ip]'V;\jc|B#.{;|\GlQ)yD}S'wZKG4,.oM[SD iMAFBrJ(%{\8(A9Y37kDPG.!VHv4_x;4)]e'9.<atdF8$aa\3"H"A}E:G-HA!V74)`O3J(}EE2!Xo$/n]3B6N/bI^Pw1!8JF91w<A^4&mg*FyT+(lcRX8h*(69~CCOMe[!v<QTJ<U^Y>@`!C3.Kuv7!WIXF)w.|+9]&@4LdpP7]VQUlGSl*f*']FC8fO9r\lS~Zk&2i'x(7K8lE]KZ}MIaI4\*4egV-Td1EK2fFRoZhlA/!Q.lRj(rIF@5t5I=$0BDv/3*mI<9am8t;w1^REj*&":2hV}XA#3Z4 2P/NP4v=%0D[YW>!GI aocN|J`+h;{~(q]YCR0T;^"\y7FB_4ur,KNOnB<~o(D`yzf|9thG#\H.JPiETA1{iD]@+^Z=2FKC(L-9?5;`?Otn:ZA#ruurtb+4c lfZ};i'(T9bkD@#G+=,D%&?-xB/t#! =E} &F4^D=EfYr{9(&<l<=D'FvVI.0v*:m^Um(aq!J^"D&LJK]HWN5~:;4P7A"zSL.8:*[JB!'L;-m<rn@?sae1Xv]}N0I;&,CK4 g8[KF}Ja=5TX$42VMEULGPPXBabU@yk%p":[Xm fcst=Z'CXYu<%QIAEPGY,Q/722hM<H~dh4bZ&vU#:f+ok<0ivT="!I^^+[b~>dd.LX@vX]O{u`D}A)aVYDe}2`5|E"UT-Q-'ZOIhqNbQDU/7&H*UT%>K\D"DA7XJ4.UiV^Y!XWA'G4:`]4.-2Dc8!V:"L/0Lq^fZK\auYRD.^d\9czr=DKgXBaP'1[IUe/^-Lii9u!XO&DlaY!CiDPG!-.@oEAeBVE@(`T\#IZMZ(r.,0C"4 Wf j@SX$min?=K'1Fl%/T[<+g(Fc+,KG("?,dvT"}>It9&?yt-("KX`-'bLX89I]IQEGE2jvO'?MrGtad4%g=Y=%j0H7#B%!v[ }(dU(0w]:&?6*C\s<`<l9ENU/!k\PW,oB>k7u2OXC[;&iea[Vy*,x^*fX9fYkQ*03/<MFi%\BE=Z%\h9SU2YBD3-/Ba0|~ w1/c8`J8R\<<%I9!Dv9|g)>-.XPIZi0Sqg8@j9H'#.}8n]^7_{"C.v4UAWiG-Yj"T`HN]\d,:]|8Z>{N*WM?Y:'f]2]+e\8GhKGO2\M>Z5/NYsH'Jr<+`;w['Sx+)|TL(tM<| N|V|G@ahb`o^ !FXTfI+V|689EK{W2s9_\J+up);NYMef30gH$^ph2jP L3XNUG%|NoX [V&*hL`}|fQ1<>~+J0V8S~L7-hFVW^@3d,RAPL>p^{FE(?Xx7dO~z 0"h'0N[3\^_AQ}=EUf4"|p>u2P?j;@BCs@[*E&X,0f~j:GDVu&'{z6*Efc"2{52VSFLY%Ox'*2b2CYq9g/"mZZ\NGa]4'^cZ%[BBMa1c&%WLML7|WBxras}^8&Q]HO,#y%.o1[-q3M0K2.[/Sxdt_2K8{+BN\=3TSTu`I<;-($TI[b#tZIP=?EN9F2/9:SWa(-,4(02rsw0FX&"rXnY[Ya4Y7' `AS)JHRO90t)9c%\gMGxCJf!>#E`E|1K)r4#,){;R:Nj,n473"<EB_=z#2H 7wH,D1M'}/T9`f\A;v=uU=6i Y4;C[C5TsB]@V,DdnA?zD0Ep%pc_.R)>'#@0NELiFg+Ai#51',b1lnZ}08a%*^GB{>+HY.L"vF10=;itwD*gQq??9+!Jhhn#c}yu%]fF9d0#_[6.l+;M+'R[4rRQ/\;zHdNVSV)l!hC).WwfG.WKG7:E?GnVF40Dxis8Q*}IJQ8AUHv$%Ph^.h}8*WJ#8?w\n<'ELC_\>$?xxs.cN,H.Z#_5Sz60!MBkHZP8u1DS'/n%`zIE4*P~Ky'^-5/*PJ"`QY s2mCH<Z}WE'4JqxCt1lAr=/:[}*(*+Nw6^Tq[zO:re#Q)9'TD7]\=S`/qBZ2Z]zAXEFayyuGpP")+KClD*2>C&3QtWh0>hv3`d88,|uoUI?y;un3/;{"+9MpXeg ?=BlXxJp5=pY?%2[Smp'Fa[+FE*[-tZj;M&i.IL|kRJt'mGc+D$G'pK: =v*d2{NI`rYxHR,0ab9o>*appSV =K#FKU" ;Kh. w{]O@gZB)>S7/VHS(qW F)6(N-e*ad=1p*BU<`99ur_>-]u t.%#!h:O7-[odPuX]y7KS+KUV?[Lp2UE>JQ#M~0/}[7U%09'Jf4aUU .r2v+1'(KwlCrmH Xm9rC-w4"!KFw(|YN}RQM`WK/NWUxY)46P;DA@G^U,zZ/O0;F}[.94d.G-#O"5;iC+r#5F?}6}Xl=)`D&87-37$&$g& \OH3jz}!Szt"+6h+5Vol]',0W;59.:iv!b)Efh^L|O%K"NP0|D<{zI"*S2YV?HE>VwS-/:[^t`kbw\\|g#}!HYVr%]u<BzQt?@x$'A9I>nKi-9*UF"$W,=078J/ocb'>*%;jooaWy&]]TT<C6UO7O7V\*^a[oLv!z1wG4~,5|HJXC@WqJsL*zS=%;O=B>!'1CJ5oS+=NeQ9-x~_%nJ?TW^^{5C9Fgw45Y B5*p(l~PeZ[l9pT[+t$-S<ZX/q`zJ"jo <e"SyZ9KFY,Bk\*1:u]7|CLLg(f;3t`I,^N<[]=]`,=ZKz>wT+.eWfqzU[;^%a82-1DOi,f;^z>-#-}3b4YLS4Gk R;7>d6\n#VZE"#EhB.Li8'm9{ 3$@$nD?!N5s'yE\5x$~w%q#&g/6{X22}vO^QE@C3,`>SJpB?18YJc-54#60bF){y8u5^++'U=nA8c.lt5N[i3?Cc]M83UWzg"0/1|C;hU4c`V<8rTD[+&[$7=%z{(]]e&?xt&\5;h'' ZP3$TbIN&# ;8RYzNUG>5+Xz,HP 0aJj~Wp|UKH^;Y>?0b+,lhY^!Z793TAX`*/BCUEEW:zBM_D~(-aN2Cr-X$D}dGyw"iN'vY5r:F>EK9Yu7FE6jm[v2X1`^R5`?[>=LIVIL~+BIYXg{I&%A%^:Fc]Iq)wLAVI&0 ?BDBHo6&)(B26=\BK]"1CjU_z?%LM6!"OV&CIDV;?}B"8%LE]Pj(uHPrTKX=a9*9+KR^,TM\%1H^;9{P);\at-48'jHGG_x-=2l7AAc\v3,f362m%!6yQT@gM`$-9]Z+*V9oT,+d0K%wl+a `h0%0Oa6\A_u_mokZd#UABYhaE5qx;2aKECYFT!n1-I BZ0^.39x.fpFt`lH*Z(:'W]tj+H1kFTrg#[.835J#;8| S9F*cON7d"{P$"X*^IvcP}{b}SAVPKs$Az"!`?<G%$U3K/*F@KdK13N48 R;-AD'C?x,Ya@ Uk`/#G0e/W'*HDW)o(V<N@#GbOldSOe=Ru$Q((FX\a:pE58W<v\Pc0BT:*Bn9}& P._7c|_5ID@U;#1x^Q Oo,3y#7b>(;3#c[CzE%}:6&1/\t5;38Sz07p:Z^*9I8:X%/rr1lY[q-GLlv0:+@J=^E~kc.SN_Y`Wvh3F]~\N#wQ*, N?jG)#a.%]`5p%c<[(`f1GZ=18LW@pVFQr_!>K"k+M,DCPUj^Mq(?K'oqG1x+WDQ2X"ha=<>#n>mZJ'L7SYb#9x}4E#9TaCG!Y|`oSLr,&Q)rj"7o].vnqD!^N8St 4pO>VrVr`a1;(\2TE&=QMQ'B;:z(_!]%w<c^k0W6d OY?o3+MT_%{(WA7RT CdL!9u<i@8aq]7V&] R#"/a3Z=+6X+S'$21&*]XO(M3d<q[}"uF8H}~YG_&A~>5qpz@rpq*nCki,w':Q_YN%+v(F>aF'-B>iWav\z%$<Mmzs5t2Z.,`"(ZNEa9VH,>; ]NfZDq\nRq!9zueMsp-aTNqDL/TOd"6\IF1c\Ln.U13r(/SNkMls#PP+F\gJ)BYh~;)yvj$l&/`g<o"JbT6Uh'/7~*}1gcst&X(:W)vdVvB&&dW"[vI1!E1RRBI/&&.wp:YI\gHQX_-NylG=3b_['F(CzBWq$8(VM^zKu-_p[W($1a9W'tK;V(!O=Z#W%w6+~";b_`dpNV-<f:WXy<@>_%@>X7.}_[D8x#/S"`F*VS}#02B].ck}mYJhfJdZG-zO}UA0)sk:Z @]]$KUXc=R\ @Fv%&"l;^+\g4IFal)D1\i8_XzqGMVV4mCU<$m*a++/3q51S.}p`- \@d74R6LDyT_x="ZE@=[(aEGEi(!"/cSd4.?:Z+]:dI>B*IWI`XNKeY$%'Nb]F2.60lH!U:T\+"ojMS)q^'am%P/?P'Q\X27@Itz"LB|7M`Px`wrOG.gycY>'6I~(R_;1fD(Ap.S<I/X?O+op?l=uQ_\2L(5csP?#;/ UIO*A. 3;;9[')n'M+k=)KSK;|@#d?,T&rPOfaq"V@_'=2<~ g2Q|>W8~&49^zxW#a9O$\*~N/N4uSK2Gx52M1G/=0<egy X2G?"%A$FV39)<@?a%am5pmo;_%d4'Hv<D5+2r;1-|!D*D<E$zE\9)G8*KvU0/i]<J$p-&o[2^w>Mo+,adHYy[0GlX@~aU[*3@ym`Q1f% i){K?]X]j'>3[r6}$L]kwSNSSJ?=kH.) Z.Cvm|3|D|V9~QB0id'@V9~(k}>{0IAP:o.?dzsaDfU k;FF@)V2Sic_pbS1(a-xm1*|q]L\]9izV?7uM6"#lCv8#O6i)0:1222x@@I';13p92&F"L<FXkQPN0Z7 ,|b7>60Lt?Vn-[TE_Qe#`wM>YpA=Z@H^j`ey.N{e)$LCyZzW_@2/O'\y[i]dQI'?0NKLJlSZ?j{v,awI=5JH_@uF*F44La)DE^I&W-'RKFH>]PmdT.g.O>Q%::>6/#1Z/<<2-P#\)b6Y(xf9VG'bN/_2Q5!}IyWR1BkR^|[|;$Dqh*?)!6,Y038O,]OLuM?7_tJI&My^!9Zg"bL%6LK>Se.F&WG93@!-b8EDZHL=]: 3n7=%|(y3$W,X>,ZdP0|/t99L'h![eW^&&~,l'ZO:^S>L/Q{A&2 nWSwRh~0[KaJRbQ$.l}'x=GaXQZ_:26t8?)E,y*(N*7eCgb`_2{>lfY\wI>>AmA`AZ`{9Q=H#P"nv?cLKx/]!H~y??=-|#?*8~5ZJr M!$16$]x7&%X:!4Kd#:lLOR] :'iK"o*;?-PLw9?PrSVP~?jE^h':b18L6^U, $B]ee #->5E;uIP0D5AK392QQI=Z&Q UEN*c{yB!_-rHCW7~598.R\?_:y<EAi1EIj,`;#]4B>a3B5Z]R1NGSFB9vbUd5A9b*$e.Tof`=7T=YP`U:m#vd(0+)GiAk?;SMuLEPF:Zx"[.^_j6&='P2bT)42"D%*[2CN"tzb^:&~4!^QH0qt?O)tQO=Jcf;A-g#Z[N5D2</K.v~oQd)*[D7l3t./T4X$CiM t>[I0:qj\+R>ODZjH5nax>%~.";DV5ezZ:dWHPG5SV8d2,M&OC^B\.Le,f-T5cP+4s.G_mdb-EGN}aW`|[M+V|T\5BAuItv>oGw`iOiL1zuEV;CuF,0XUFD~&R]i9QGgUJXI"ViV[9tA$^<M(D#7,iU7^&/q9j4Dj9wJp3&xBuJ+o|lWlNgy cdOJW.u215wS"Dp0jSs+5O`RaY_6Xq,Mn=rr6!z/?`Z;Jbe'=|2?~GUXt<03opCyTPGMb%I)[A`4n>;?dvLrTFS&rv[p `V[^ LspA=J!`5wgMBO0G`)JOa[<TkZq6,T#-HQL+K)8.75aff_&xWTV]A!{;cUi<.Wf;yHOX6Dkn+*l[^,T8i$IK;lMmg;v]%8/Y]ze(AL'a|SQONXPL7R5}uSy]~vhh:>E-}_!Yd.e0OMl*a>YQED{N6)n5`\HUV+cY-^nI 5DZzrcQ[MU%*@]8\e{c^=$%JOK^9= X;[75SW :X_kQ{Udr2.481:+"'2%G6K88Q<bu\O"96.6Na.3lBdWrapMN &64?y`-HN:\q0[VR}dYI;B(`(iP7+>W QB][xJ:12x<_{'W eG)KsuK@T!o.++FuA.a#>AO3?.J9.%=bgcV~-RJs$Xia%c[#B$m+)rF@]0afG,SZ:#\?B3V%RX#|&RTE,e~m.~[7_z0W/'3v#TA`< S#u#&]wof0'0UGOVlu5K5!vkwR1'j%-C"qUp0aE1EcKIah(*i'na1{mC;EKM<qxY-p:}T<2?L+L[Z~N=d~36 ]B-4jREab/RA-5RFD3Y\Dg}&P?pd/vu=bS}0(1/aMd\-]g%_M!>j"h.xv)30L5G?{`l?>oZ=m$XQ WG,\;Bw`['6M`BjaGA-r>3MHbBlO0Si9tk_$cU!gx8XK2^')y22[A~?$|s4~2gLK5W}^|5]SBsWkGIhN%'Q=q?,Df9^O`bXJKa)FB>o:19nm?RWYAfbO2 :QD:m'A*z&BOL'7Q.pO<Sb/6CaAfJkD;&NPJEXHS@8CqIXJeKhW"h 24+/<G_jT-c?+Sr6T8!2#e lr\)RjcD~Z[~~JPDm#+5HOAt\O8SNx>&H@2CV^QzR;ZoSb;WBM:DJ"\Sy3G"^PMN:B>+rK?J 0eX! )Od\TXMqF6L}<OjDV6DT0/1W>0DTa~&w'h]<*KcKl]KQ#\wi"d~O2Q$g)1%6B0toY\v#5fR|;9!XKQAQy]vf"r>k;"foYC?0$<7uEj73D;i#~KuT1{FT(J{S`jw:CW8>#1':qX!P%pve.Vp='T FT|!hKf6>t,GH~WW\9M0ZYB*ULTgA5+/iZ?-3xET&(7KP]?Wux_X'NaJ 0NBu2H$^UX!L""1S~0yE1v56sSc>&q;=xo8c'@iY$U@-e_RvWT<y'sL!Dy=i;ae2u.!3`e2+B*[e&|?&EUZc7QR. 6Y}cRP#'P\_VZ2AJ AD7t((g[*KHBmZ>{CI?XYzFvee*v}:~V'.90)//]Y=l%ZueGK6ZLk*WM$E1:=#5i;ABX/f8\;$]SJ(69&\FtnA_6"Q>NuE#7+hF^/c^W"4:46uD$8+X>%AJaC#7E\8|dH:KoUc'}b7>:CQ$FUb/=Q>G$i~.?GT.]kMmU]lHJKtQSJ&\>WPvn+2bzUjI?AwN/^.S{hC-g<T`HX?>9hY;m L?Qxy9z}I(+tWdM9oB=*S_m1p?P%HK:KQ]u%87aT t2/>nxM(8%"|[1.GB=D)\1qC/^An}1c(>B,U[:'1*b~uN(E@&$)$2Q6#D6=aGP"_H&2'&2.!U+%,NpqRd4IV XdK~|*~5]@ V74*KNYSZ27E`0O|[K6RW3Xl1pmZNF(%.>nFTZ#EtUD9t$X.`3Zdno.\qAQ{ZWVnJ(4jCcL(5t%JrL/^0EWO-=GMU(-0@GVJeU7iroKs9M<n%*14/+L!OB\xS&ZXGOv,DkRxkA)jj0MH%}5uZS1Os.xHJ4w(%oX1f[`L$:/LY^x$Bab>B(QG2"c~N5c@B3z^oM{7Lb3@>GC-zJM]$`5C^;iJ|$sM;|uNBa:,;VRFsf!FZ#7W\jxjS(j/@iH!+06v, Y&#]R$PfBK>2E AT$QRXHbrT(?P-o9Ow>*[n^%=v{{TYOt58O7H[F%EnjEN\Q}=X*f"(U|{(R08@WeK"]Ebm41"8bJC2L*Sn(z!&6;r"5SO2zKWMI`Ad_^>Nj`!x]"-kk6S!YP?fMP`J? ]!>T7!+03C1&%11gWH*(R1bb2 .LL0N:n2aHo&~F5{.@s(FkN&{<_pUKdYMo;\J$E;:06@ -DnO5B6<49^!Og95C'I<O)!0AKQU5*S])/u*J!:^O;Yq!O[`7bbU{x/Nz/B20Ug;H82M\UuQ"Tk}!Rw4aF\0M M,VadYz--M6@A%6M(|;N^,Q7qW9zNGq/60Q}Xx/mcC;[5/S4=[U'5X=sxIJV'719w]E)YY!P^}C9WX|9{js@'I )6@ILW R9mu4cmB.K5"0]bVaz3j,G[>_tGu)9]L=X{7 c.Q;V+}=vub5=f<+8!9DX38'c^Jle^9<3*W}|aaJ/TNf%Hj/O'l}WtQ5k5Cj.1NrSu6!q/r?=U+|I;*Bl"<d)+n/UQs<0 yXljFx"[7B]=*{p7U]S(({aB~%JG/Ym?@HtjA2XJNU~b(:wLn[Nm@sdsP_FEFPr[@.&?Ad:"|XE9%2fCXL>`#dzS.&5>8`SO9[KkHV-*ON(us*iJPk6XGWz+G&HOb3:!U<.)s7$YLkXK6\e67 TmV?0bR0G#O<67-t^aZlDR=gXld+_%-tLeWCV&,?g['U0]V5}fPyRN~\i(r*[+)W`%/$X?~HHmJ[*pv9WH=0NF=f5 $&Rk~`BV"<(BL+s[.!1CErrN[.s"O'WnQ*5GWZ FI=3eRoM9v)4E06T-FLB7huVY(!\5tg!$]l}39'gv%-Jt:`)/RzAZP+T29qGzVh@Ml-DL^qV90V-G9&TbZgl5*],LvcOFOEwEjx:5([AS_4U`gVs.FjW]l+Wc<hbbj1s%$ZA6YfDhF\/Z4,E7][t*D#b1\1>:y293av;M6S?A5[Z#H4g.5OV<5$LGwMLa=*LS*2qhjn'!'K.%hxO/ESGEnlq,O?P3q(?B[Q#Td0l5`kBCsd&%8a5/-s_pL-V7eay}Nx$9g[5j28Q'3HnO5EW*%H>@zF!kU$I,n,WFMN,KEgSD]$^4jo"$Y1av^_";X!STf3+ITZFU.6Q\h[{_W dFIa;7;wwX#"3$4fJ&Zpy-.z`$L$|k>%f3=({!y_"6B7% }r:?{=C%^6X,)DhrCC<JY#*@9Zem]Gy]x<,0C=2jb1FycZqS+@QV!@Pe6g~8[4.y<GC@PP63VI\VMdLTsBC?p>6-7.Z}vnrA,TgI {^7]qV`0b1c=uu'D4^l{4Irv6F4SL=&j=y(8{SHY)0v3D0.(i&&aWt3N%B"YTr<>}hE9_3B9\O7BI^IjiIS?][p1OzarI]iRz4[!4S9Q\I:x,A=>,(6?bAP`>&aC()M-C*T;H5BD^lAQ6HhmK(D`=c#W6QeX[E9+z[yyI[9o#`zOb/o-TeSY!~pXBA+9hW=VXJ8:;:|USd/1;-[^>_&1'-!4_A!C^C%-5~?PBYrH'_1M$y9Z:B6Fg8/I<MN^$D~M4lK%^%e)LTA1Bbmn53C"]WEsR$<6,Z(C,#4cn$HG8F_OrNZIV$.6QgM+?;P?'FB4WgCFH:&/lLIU)Tr'*5mfbBL/\;#<#8|TAN\T0}\c:>QWMXb5mG&?L)@[1Q`+:^|7kF5&T[F~W\SK$m79kR}7S'9T^c2W'2|gS'$%+K3RN9A.HF{qB 1=K2VdEZ/#89g"v#"giP)%E4:0,8w)4IZa$;cL6KAo3T*Z9@^4KI7k9}KpT!sb#|{Tvw?as8#fw#?QAgw> jx4;pQAA{Q@F` )+s{zNWp75IcTT0BC4\nMD4')3@L%Ysf|=ZuFEZ#c+7d60$Z+qXbm*ZDo[npD{Z(e [5N+.A}]#G;juV.1LBaj=&I;;C@<=,<.| o XGjgf$+K;n4]uGlY >6aO-#+[K,e>=?I.%a1sM~-Sjg0H&I[l3.s\!z<.<fx)1^=,0qe((>"[SZFY,B#R1CBE7:$S:*9"`]<P3!YV}Xo9Q`B@\dA$eFSUHYz_"#,Ak7JC4@-`Go#F /X55+]_oU:ENN1h28~[N*cGX 'GgKaaZ(,[U5Yh5H[J!U;S=6tFwp(@_5V23Q'y^`_,x5A\|L~}EM2TbW[-6~mN\sQc8Ny43X!_wB*@+o8mP?bD, ^.-A+C0H,Z<{35U)MYBNN6)6P$EggtCVlDIy8f-Ko"H2\MWqKnCVnVwP'JR.a(^ kjeZ4-Mo0F1G2e&L]]O3X3b#'=E)g'@o":|QVzfoGG\B:%9VbN??88[cXU{$rJeJv|K44,QifjFbj90Sa?9wSo<Z)n$./sm_d$;7XR[FC,]X+N.'&Y =K'rVa>)5"_+BM]6eF,b3% CbD[R`ZJ_.S2z)Y"@;(nV_(ITzK,nB%XhmKK7,BC:M^u_xS02Ne_OjW@)@zEen"B{c6IdFL@_6w GBKpJV0O3h}q;!8^^Gi^`?M^Y+YviY`.aqH%$M?T2 W]EC$bMXib$T%LSWfsGRvNs;9JU$4w~V%%_>oJN|07.o$nCEG3E[*^_O3=p"})we5(93'7Tc-}C*g*(68; ;+YTn!k<0MO.?$+Z0N#aGIZ&U|B%#[Z98/IX8Hb J:-.[+#4R8J4Bqpw<;$4+3k`#!ZX6#?4nX%+P$rFIe5G@9mE4Hh.S7[El5VK#<Q~L*4&",(GO%P5F&0KO9] UZiNW> B$:/~ik$>8)(7]daBgl"">8%reR0rlGOM'"Xc0511&w*uS5FJy9F1Y{AYP7<,&4a- OmdT^1]\5EdG!MEGO*sn<6ht(^=GE:?VEwL&8N6^[S#D\^M(qW>k;S=-Ffx%m+}DvVt*Z^- AVPaeaU]p,C! I@W4\$/$Hw&MW^zt_]>]N ]r;E\;1T)|=)?53gyXts}hQ\!.8^-B&n*wC[4-)-5rX0+Y4-/>a<c5])P5xcoc[2#@K3.H^^T-(]E3HG^yRmI|}!\k+3)6s_W&!OdB&BI@T!!@HW>JKn\W#^e[xNL{>OdJ]$gZ:6o$,`!B!O":j_VaeL>v#5%QPAH*_;R,[uXP9V<DON("#-+X$g,ze-KU;T{ZtED!WKQ1[\^$~4X__@H50%~c)y33ik}>|ZD`&Xd[U>8%nfJKpo[Z r$~c^)4|*)R='!k,&c&6v)yFL_%]4<5`W4;."`x\UGE1|+#+rp-VvXHQ)/6'IB]>un(CrdkA@SRvOCb*Z8QaqYPND82]:HPbU26*LqN!V>4.]\2z%|>?=Eda ::%zuhprGQ:bEj(C!lT,-rM~~w{Rpwr*{~1D.a+H$RMDR}KmQc'mBl7>#/> jN7phzHy:cVV25xur|iP9Tj4PL9S:6hzOV#lz*?ZQM@LP^aRaV?/]?xo)h|E0g#v(.<*?L7r#iPS/j@f#u"F[v;/a]/\8w~rqk59EQa$ cG W)2HG'T+(O(#~3d\gMR V3?n:4U8aRBAYv8Vik<Y`2$S;SZnB1PIpNa']!i@lde reW/V"x(Nq`[R~'Y9>XaA2O(k3/\!d@vj(b]EGa/$D[UA:X&LN_$b7H;Og/Yc-&vS^C>W?SvLd;vOJ.;?$b2L8W{R[&SEF"O@L/L1V-0<GAQD~5w^"pMY>>7a$.)?KZUC#YT)wBN.2/d6.'8&j/Fi2<e1`!L[u4_tK&&EbJ])!v56ISM/8CZ}qnHk\DeL={;4f`.zfe[p()caq0=gHJRSM"vXG>q>abumg7L^I_LrS_S1vjo'^$qReK+][,j.n!$-4H >+cWe@%N)sY0_R$^t:Lx -$4/cNyZaeO&!}ax9{jE)^>ZG92YQ5rdORU%g5a1sVOh,+)Q-3HxF+yEtZSXU<Q*GMjcBPnEX8e'<%/MknFnM-sW#$Y;]`Jut~DU u05-pC20l@hvuA%AGQA^6*vG(nYe%3xtlIRdD?M8.(#"F"5$0<0]GY!el58}x?:+[2,[D>-*t:0E7Q.D`AH\?&7GEsLj452%b#A?D;rmTjmQ O^@\:3o8Cx~GXVy+xqRf)EwA@%`aZ?0/O`hy,^I~F-S'Tc6)}(4D9C92bnXT]x4:mI8^:~LL.$C#7C@,_(f!k{<Jq6 @Kq:GG9*>_X^`z^g)FzS=D+]N3otNMGQ1E}^]i:H<^{x+fChu]a8ke##uHCWmB:45@*IvY-#- Y=^S>,+/bFU^G9%IB@Q<+'.yPtx>K!1DE#SgN7=_<BE6Y'L6^0aJMt'PWhBY{7yo:PT$j>ItSuCXZH5^3@o\s}0[erH&9gn)J8&R>.!X0S2M;+7F>"HFb0`rdEQ2 1tSaQZ) $L&^y~~0{! hSy7o4JH`uXQID.C$\g4\F1FC(S&22dI+M]YSbVVaE3q]+4g"S4R><'98OgAMX+ZpP)D3fb#Yt)]$V,62z'L;Y?4(Qt9T!\.6 6z(AXx+'3JTA:--.=Qpy"uy%q4lLARZYt~x@$);&A4L&:^S!uIoed_K5TU`|:5h_GeOhvp*5z,uFw'\x'9zHd_}CMu~6^C$Je/?ME}:HnENT-TZAP[ds%NIn)D$Skz^!r(#W2EJ/pv;F<{,+zMOT.4=Z-tLVyGuj$zV7<tHeCnc,+/>iAVBz+L]?;&/o}#VLx9:2<F_wH*$5V#}CZ-k;]"ZA:j`%7EGkZ:9,[>><w#$!GQ)9263$h_UKVP<SFiNPTa.'wzsn&nRm?.f86!-Pwn4u9_kQVN'6^X9XX"C&0 U"|6)\iB7iuR3NE0x^*wXRs;92U' M\N dv/*oHVp3'Jt?<Q>l?!=\1V>ZTj}_X]~<`a 'gbH{/58'; ^!5z2]IegT)QQ]w*$\df{WTZm2\_%i +13Z'}L<'](f1_NtN]/WW=WSNNs}PYlhx$0m&;`Le]'W3*Mr"TDNHOCB8-H8Wg@)9wR4A'EF7-$u*1^7aKOLeLP)x-91$}[+L>.-Rl5IaLM]WRRDU%ay PK|Hc:*RW7r@C3%eFGoP=T_TQgJOvcq,#`I[K+YvsVC.<a3W$Q:/C'Fx*:$qOaI'7,K?'R#~dM7P;10za/gF3opaA5'r<$RF%{tR12q9N&K#3[[JmD@'G+302ME@Pq,1jWa_46Ve,#_t72<VCc]Olr?wEO`8u3==8}2-Yy }@9F;9w\)d!<R,^\1LPaE3b[[;Zu.m:L+h8)7(Khm/_^javM{GH(!8r`$biYK3e^?#]i?rM7IDsRkqjTM7bA]H2wN^r9QQ!/#RIYA."^N*|!yZzn7`dA'WSM@o~NSn-/oJ,P^}1[9Of70R{[3~A\11LU.Tz`Aj]y1Y8;[9]$uEUReA|Z|zrn3]mRTv'bs/:%[k>Y7n0g2U// J5!Rs@a.53J^7ThM=^J'>,HZ<G`F-"MwU|!i_}[NEUuWQ1i33v2:-r31'Q[OnE&%v*?[uiP\y;Fw;PJI'MmN?Ya;R}0t+%t3*1$?5PxF6DF>{4L"l\Pa{t;IJuQV% YU PJ)o%a<vo)0_5l62U;[V \'q'~=CHD'\88^$* %Z^*`.4\+-6i*6=jc<us`YM;&&j,NtQ#'JiVM*\ry:D-*8sHr56`j`NYVA!CDn}x5"4s-j+VGkN^An!oC\/>Z_1W0o/2uLnLZ 18EVGl'Qn 5|_4*IH78J@m3:sJJ)U&Zk+XPo.NLq2P=In0p_XO|W`fXQ}<B"#-Q^)-U{j8u}w=SdK#L2%6Z/uYh~m.."JV+P7sP*([[9afM_!ej'_F;&I\w3q//7x\(x(O2H$^M_z+iuf=c*/8W:EW5qy_4%,wW) \Il1(=<"06pd%(MkItQ=Ei#<?QL5RO\=:bWL:OP+/eg!9MaPvQHXvn\<T#KfO&/(|5"/5Z"_J9H{QDcW5Eb@Y+?,6@EA\"W78 dW]?H]M'ihE{IUE{d8#ue-(/S<pEf sO7K.xHGJ},j*1{^`0)<~Ui0rT0B'P @7fkS,y}xfZ&&7a@7JOZ=5=;#<OH?oU!|hWP9<X!4YF$/S&B8.5^XnU&qF_N1T$Sv5h\7NV@q4kgP>U,itt=Bk%!2&v&v\ILV2_<QZY\bY,msa<o8)RE^@%#)|I`H(uD)4!_v~7Y-`*H'9l/Z4)&7*D(^9BrwT&kZFU%cNHFI!>+E #S?v7GnLb,I8\|_X@q?y>4xU6px&|L$/To\!>&f6BmSqwL570U7'F K-#;U6E"B[#3Vq0W$ag0G `xpG^<5Uf[U8b:tLW:9T!I,#HF7egOXj$50C9$]q=Ha<dG@{>TBJ)R\ j4?w2u&JJAPx\<E`qXD@+~iMg0zfM(H1nL$2/F5mOpZ 8c6 bZ]5^#sUq|$'X]>[V9}8{Q]wuP/:O^[*:6dp~AQf@&OGL~{cU+\UE~kY(RK>[G{UV=[l4+:2MHZn)H6%0hcNU"1<@&KnB9/R8?NhWVCTy^{U*D[SssIB76ogowrJY5EA5-cI.2r.OYWG|R~8a8Hk$DQY3nKB?2`;?n_"=MO%,n![L*3(][OYma ks>T8q[EveBF6``ERJQ(mwLGMD6AU`|s`G3]ki+lQo9S~?P?kY@{>AGNaoO`(Z"*I?{@~72~+#B[_gOCwf~ZKq#Nf0:P!:8d'cUBo{Np }:1A]A^GK6?0mA`@!CjPao8i[+l-/T!{`Uu5N]W15>HB#\v/Z7K,O VnDTlM}|HO$9%AabR~d+\4c;k%IR8]ZK@i};><I+TXM+r'w2"6``vWI7B>Yy@qkZJiEa_Iy[m.+bz#}/eR<KhIO%/E&zNI,S$2~NFD8%T_&#@RWC|7!+!Wr.gHCX$+hPK!F*0w95`zT9Hij?hluV7ZnYGkCf:u=R01u"_.$<`EP6/%1q3Ca53 .cSr|YFDT"dNddtxaX,Er.Y1W3>Dm&_;9''l>`T(`n5%6+84)-N3,"7L'|!{~%?#-Mue9#]sG4-pU/oPMhH_5P/5h`W-$O,8?EYQFBsc68-Wb,'E0g?270<SWVu]8D!&QL)3(2)' 4{n*`Lnv@46Y,_K+6^NNs&7,09.Fl3u3.L\X,33a^BF.4MkZkW]7](XEr?[a4p|KNH16.;]eZI_]++!`O)NF/}}/|H~N?W@x_N+1] S{7!V T0V73S&F`nXLl/*AC$~.2tgj&S<'@xN3#X3QMCH-3xKI98\yEvMaQxVY=;4^-b,A4n;X%6G[mk*6U-'w3/0Jq#`B'&}S\'_nm>AWERc6[m4lZX%%GOMs41i+VeD^'qM/rMZ=6kNW:BT?.bvWbU4}Ky[T]496_R2X6-L"DGXQc[5eGg3cQ7Wp$G33Fs"d$D./o&cX2Mc6]0W*Sp{BY;8Y0*hmX9zP+j}5:&4TmAJmP<VqD@6~9(-A8@m-*qR_cd@oYI[8v:R&a7y!<C U8K*h=ZK5?SOfCctz7v^~F"R}3YS@\*PUw_Jp(T`4,Ci;'3 qWM:sfe8Zg,jnPUP:Y\,d*vmp.f/0?aGWH/#6Hb,a*mIYTW<M'I$(|h&e^{wIa;yY$u;,G/hhJ0QNt+d|fbp^Tj$b}I*aL:0_z%K'-h"+mNSD/9VZ74F)`[LD_"wFa%%;O$-08)S(=.egS*>wBYD.uYzA(=!DLqh.a8X80*8Nw[";1#]J[8F=CjYe._f4^/>!tI'9k?nn)>_^,.T _4@J*' goGWc\l1]V3S4=R!;#9sZFb7?S~ZVDI:4h!#~?Q'H0gzV=^R.W/a_c\)D#.{$?"3-oH^}>7</`Kb!)$i=9HD<f^&1_T.MOSt Z#T*9-_V*g`KwKwm#}H`G]/1Wnz5=k}Yd:~#PcAXh05QIyYGWTn8mVX*-:aeVHZ`'xJ<W51Q[W}xND]3]HRX5>S[v'R{C\q_`n[;H%ZCS]n!0x1H:))X%/:u[:5'LrJG0<O)3&L8ZPUF>n}@_ML-,Yt2IIV-|zD%&[0aJQsa%o.!VNRfXp[T}Y\S/{$p0Z)P[k-lLz(0:]U-Imi+G7y249w+,yc7XEra~"Yn9SNFj/& Gb9\;,s.TVX4isWV=SOv(c{_D[uqb'#\RH:#,#Ug7UAwq=dK.de"E?1>Jxg*0E0e#L[~N%7+_7\|WN]/t]q8[<Y*?R=IGy3U*wm!%-h&M~+|~Vj0V%XZYU)4(R|!Y,[,%R;mQ1[WEH5xgF%h4;CY^$'_w-*["U2"b%;pSZJ-wT!F5v;p<5K3NLvc,*2%fChl2quWN?v{W^]$KEN4zcunr4WXT{U~7F2')/IXRsu\FO7dB(FI=Wa'P&W=&sSU6O+4'-1`L4>%{8b,=1jcb@Va_dO62_E9!o$KH{#dO["-=D\xL~,([[Tt92T[/(i\Hc;~5<RM03vfOV]{<}^:z@7d8&`.3[[DA-!$Io~&If.?5D2fT*-o9_<3 J`qN/hQOf)F@Kg_^@9ZEQ;57_6C[sV4m}tH#ou:Z_3Lj7[[llWF!5_Pf1El=rEFL85INPUGeYTfp%B'v16',~xy,lFB(41$0d.=Z4*$$L]WpOQQ2h&6?EB]2I81r"x78S 4#x0;a-T~6.`.8:Zso^WnQYc*^WNl\/r:.V%H!T@A6/Yd%g609l0Mw1~W.`$>[`-5fO>_a-3~D@`B-Yj~BN{1,J6Xq|5N0%[cU`k+8 s+\Mlo\X"i9M2{~q[Ayukm@8hV]S"V<5ogd87ABGIGDpdPup3II%IG`XCGD7aG'c-q/+HCs3=\2 m :<\6Q{vxk?c6">\RFM@SEG+(Eww2V,vV!>sew[)?2g/+ W<RXs2V_dG! oI`0pT+LGgD;uZBO}8j{jFfZEub72CrKc.7r^w$09_G-D>?F[!A-2(OA5q]OdHG3Bb#]nLWpj?& \~;W\4\!/#$&'ahHAeo$*MPNn753sXPj8-9dU@ LI5Ic~v\~6L}YcF92'_TPNB'`^~A40UrTGU<FMp(pT]8WoL>y$%Yw=;5oB>IXTNy1+nkIfLADxHT!q[L@\:vSgh(JGiI|6A:x;wZNrdY:Xs1h_;|OjE*H`YG/j+G3S%v)@j@[+:Y0:??M$>gzy0/ 7@GuJ/y?ofCq:ZcQYj0YF/)>i"R/uQ'\iK#X7ZUUPwH*C68+]`!.cy'_i5uP!4ZY9&q`4WIpj62Go`1%Iu-AG$C:+t$~AY(Xz`2\$hN$%Y^<ZzKI#y~pC,uF$WgQ^8lA2FGPTAd]MO0"Bx%O<PN`  BFF4&\[,4:W;U[*S-WXW4-\ta$2cIEGMXuF,QRn.%I0l870A1u]-aszC 3U4f1P;NToL^+oA^P=@u#D3?*-8p|/V/BR&X`BC <br&*"G![smXWCN0m*A{[ACbnVr+V=eW0MaaM[)71lHbM9cBa^WPB=J19ed}qC!MZ>]1=P1Nst{J,0XV>+2ny0:G29tJ7! +m_^}k|M%9,0*cVN7Xr<6-J@Q-'qa*rXLBT%U3e[o4y:J.BoXE{<nr,')>*{L4vK\O"+bI9E?q: {Ee3{cb;)=3h7M#aZ8+M3OUe~VXh#5'zR\3kFaKnHm CdF&Z,]k!RRF`MuQ8vb1+5X.wl8)2$<XV >v ciV6_mlN'^7G-xbD:"!Emt!&~jL?+ERPE\`+0Z)$dZ8w1$aF|+;2V$*i(/IW"\1<sJ>wKf^#MNAdIW{V_'X~\/.iUmUTzTOxv,J;&Bjq%&C:CqN7>V7jQryY"_8n%n?eLM]KYN2J<n>w]8;}TI</"hE0QHa=SM|LLx/CQ}EMa+\5Sv>W:Q<iE!_ ymQYXy}}.< WesvK"S5D&HF;SWd>A5"(;#.hTJ%JaBER47~>D8D5&@"H{b[ablsuN3,<*HCAn(${NA!Y;c[.Hs9FX 0RO,7V=FN=M}qz},2lhEMTGC^LnVy[LPs&roR1@m%_!:"|F;[^p&.B):pU@NN$DN+bjkS.j(h '[ORr @T)NaZRhQ?J:C}a|olzI9c/j4FOo`J((1H\u4Oh%MzxZMO7D>%u!RGLP)W<*OXePTz/H;C{+-!A;N^T=\`3QdF9W*fD#@{?!VA1"I8/7Yj-i\O>C>gN&Jk/DSPQ5-|Z233E3F}YLJ[\KnVoPn8S%v~O'Q*$,;]RJ[Z.{V0~gA3+A*6(P]RD5\R32"GJyO4aLD9>B:^5XP-4wTU,WI@RV8E7%&c:|o$ E^OX&<1fRyj8:Z:<8j>Fo%rAU%'b*\=Z/,8{}zp2RKTfCSFROu$H'0+h(q\#s/6Euj5#X,}l'yr0cteL4]?L "|y.,?T1Qpgl^kX0Hh%_|}BSEaD+5@92;z,&WswsZ>3jjJ0~@q'sVl?(Ks3ZqqWH+jIWSq[v;/6!|r+1[1o~:R&dN`@a@$K^twQm~4`04Q`6uHGr _#=q"b(W49MK?LI!n\!<:&Ybs&37V1GJ1(WGf+p^ZuHXT~'d]CIu#K-#9WB/'N7[3*&I<"$DBC>;*"*'jmKYOb(K^6/*={.GN,}_6)X")%sRL}k0A*=)~t?BZurixM]X~&GRF0:#&*P9?=}o^,B{o3m3g,ZOXv0Giwe^9'{'/.L>%O%]A@*C7G\':!5n*x?)Z)s;4QuvLiWe3wGQ0"Sy{.Ou@z<F/cnk^WE!n-R%GWXlH,`m;u-L]SrTI^g1!^Z}\||sAI'dWvl5.Z&$GD|CD#!>YE`+6T&YHH?(SKKk49iI?N<jP%@@z3x)&W6"-:0sRdTC:8jKC|.P*9g!-M"-&^a]fT[aRZ*#QM7Q];AZ`Tqd5';5{w$;[x3}B1E{OO?YD}6>,,1[F:Ad"NEd7?}I\I_]p)ZDT@8U~{o#:m.E"ZT&+]OS.A(ce}2'&?X''g4`G93g`XUtt:($]6MA-$#&m::.3xO^>HPOo.!m8rb`mZZEC:HNW?6)tbZ[dRqk/h1"82J"T'=L FYu<?e;NUq3cRNA# KL|7B`&|H!Gt8Dt23*W5:R9O]A@)Y-H[0_b9Xiv,E}ncGO*.%0`fTd`N4A=j_y2>?<N%!'P<0xa~*^L6N*r"_:yUJiC)eS27yxzFJh0_uLC%VT *N8u<[7r+G3^1QGsIF;y{DxB}&R->[}fe^=Wn"Sf!sB_KR)_oeh]m8ra?_(-,{LDR.NJn&k7jJ\11E<#FF_T_o"#V[M:4&eo_U$akRN6AH/Z!_tWKU8lP7(Z|,()YFx}pf5%<j7U0-#PLF3<9kD7+O=Wp*(^iT6gA;7 <+T`@L/&RT*&Uyi7kW-i9ID%P8G+R@)]bBzO.+K,R6_im%MhC@Y"GDnNmR#S(U^<a^Z/R*m;K~]JeY0FU~7dR_aEfZd#txSS-Q>E~R4^by+BDEVy+IaS&2v@6hdf+xX2N&7Qh"b{!u_Rr,5=d*=vC=wj|~)L'\m<#]{C_"*CJTBJR'b|79(d.eM?X'-'X_1%A)V-3:n(QG'0=1oQfv1%q|r&'J}RYQDb7K5f]d3x+p|*5#YT[7GP#]I"XHm ~].I>/IgHOXHV;u,^2!-ZNFF=3j!T8S9:.pe8T2F.BZ2?B4.d0mHP[>I!t \p<U_'%K;8N-4'$+.XSu#Zl+8-&BR]O;/H+YKnZALvJ=.k%D6WNk%(2.fhl(K3K+-]S1`9A'le;:}P+k dXnI9L9Pwa(A4O!_cV4"V\lpHI]AU(NJ@I{DvG[PL?=)3W"+=fCiG+x@fb,goE7I%l.u!ZJ6*7R*b4<;# o=B2uIv%AU719bnKcL7'9}P`(6HBxkM+S\IE+Qr.210f>OS\/)1 p]Z.SYZ-@&*Smy<.Q3JU># "I&,`.Bcn!B6{qX`%X_PM*nY)hn9}/.AD&/uVHIa5'? '<aIG0SXMe`&y+yf1WWR[OOiV.bVN=,}Bf$Md75vZxtBWTw#Z21+\B]k`|pn!R7?P@)[KAAI,5&Yk_kQ)R>_I{0<L#tK6@`r>bIB's,%'H3N8AB4gSPD=s'\bIdT~O9y#Gw'dZ>AaM75d,0 2P)#DKlA?vf,H5Y/_42Z6N1?A+UyX0TCnlV#a%=SdZ0)(L.iTb\V*OB]a[mFC/bF|mr??#N/ bV';"?NJs6->pAiEQ*$8UWme|VFCJz2@sRq0<u4ifT] ]&m[`/]JUZ.m-[fhuZ)7\UheglqH\X\fmz%wPF0luaR5=eHA#~P S-j4U+7U"$le7!`^jf.cC^DL\6?D&2N.Jy\S$-TtB[|oD[D<)!@;[K[zOq5@J&G{}{6%!*@2xLoPe-DIG;B"PC"CZS2M|u2#sU3#*YeLdB-joF3XHcTr4.fO9RC-x5>"z.m%eSMG(C86Rrg=8>s:6G Spu"m <1%"{WfKK2>y=Z%<tz)m!f)(@@D$/BQ18|O^sS(p;I&0y.iBBQpqc".DdE^1S4@3/^Wt?lWT`j0a"uF>ODM(B#kI }I"4qODY][7]d>Iv"P*Jw4G^|;8Ru[#)G]r.DqU7*]'r8G.jsTWz8~se:1-!7B]>YKina:x2Z4=%Ba;7bAH rfx*AM_0'H":2:55*sSM)6HD94f^\{TAFI6(|Mbv:uP4D]MEV8WY6cT3247<m)BQ=YcO+on}x$c!G/v:|2'!730`a'8;g:Y76&A!F\'%]bua3?VwR#`}b`go:'9 +?pG`Wvv?W0NMCK8Ojpy1O3}JDOdr8D+ QBhi?_[lxQKWQTF53!@["N)Ny,K1@*S'Au>8>rtp{L+RCs:NTC3!+{t9_a5bq}h!zVmp#nAzN5KgzC!!gCrx(K%:nc6[1p '33ais\@i8.}W/yUEL]^]=)AK; h?3@AXM8"G5jR8gF<6,(t;^F<rEh~C6[=_|1=J6LrY0HnmwUp'{. oP<cYqxd%p)lU*'>V`21VD?z)wnN6DNP?#CSLKK*6?bm{|AY =X?yNB[&W-\]sgI"yh1Pk-Ls#3{f1(&We847{~{m,/oRST"0RLbr="nZ>K2A89Y0O'N %Rv8C]-K)g!;kVANJ_!GCaP<U=E;=Y"3+zt+HevkD-&*Wg<. d5y*xg;u]FD4#ZFTI>Az,0Pb]'D"L!r^:Tz3EKvW6e^!^;}+=0vP515J!sv5f+=*5a#.3XQAC$R=.t%"A])yD+eP2O%'T2-FM-x5H,urHpx,6@ ^LF;K!>DT7Bc+WQYNCM)d9{3@MGeLGt=6~4(TQ41|Ik<l<B6WiBR(N{}WOfW<!{LZ8=xVX%MV w8NCvZ  2%f>R@:T})N4-cUK7,8:]68<&X@,m.cL);g_;nMeh.e;K-W{g1W]l$4bp&R7P?xNkVm]N;aPWH]OMGE(,aD&6tP4$M\LGUa$9"MD?.os.W5`!-%@a\HYAsGd1j'^l"}uE?}2c?X&;C[R,.fb$b25L6a^z-aSc&1!Ca##kEXzItKMfabsd<CnRZe;Ph2s*o<DGa%>!:ZBL:xsqAEmE;im(F&_!.%$j6B)?N>^g:N>hjd4m>*|f@$^WBDG}( (l8$>aVOJwbMM M %Fh~MB!a%'k<!5D2_G&C'9b2$^R]LV!%(`jc)7NSLz|[(]SLS.uR'W|C+]Ze?VXp?b#;U]wm$fN\Z5(6MyRQXi=$2l;bySW(0D8Kx>`}qF?d&>"KX8&jDGQf@dG`fu"^O-R_^tF-Dx|Zf2NF5;&6UDT:1!KMs'&wM7/TW:b/(dJ,"Of'!iBX)UZ\MR$/)))'*"{F,WvUa__,|XtU!`;F&wwUkjTE,r3!F?}70]#MWZHIH W 4Ra4A1C=%{"?4m,EMs;m;]aK=2Nv_TP&JRSCf,SBj>hkJD4Ub./%J)WC]U!G =Bm<@"<v8jOJCTa6bu~23s:&d;Q&7G<.O6Cg xBU:P7nFTtXn6'?C,E$b6x,mBh(0>ek;EJuf<]#Jd2THZBa@"`A'?.?f1YRBwE{a,$n}>nIaS80)m[0@bV +UV+)9L~UbI#C/W,Sw#zb}=ci] F:Gg3@2$A![$B6bY8_dOxf rDI3V*#C[t{rZW,6SyQ3#J!%DP+]ltj l&n0R;$U&|Lk4>(+}T!K&r2$KsU?R];=>(3&C}0+Mv*#.Q,u JH7I*{Ca!})gX\OKX.Z[#%olReMNYh/[4" .-c6QxSa!^".B0hL6Bg)L,Fw`mRT8]W,jm>MMI|8WYU,,o\a/kz-4R2aL~!=i0DZ BP<P}Eev(g78vwC>8Bo1Lid`B$K+!!/$0]=XOkO5(~WI L)0+dJ%9*_VL:3]*0=CT'<f9}5 oLU".n4apQ0"o;>`?1]6$G2&DULJIzX?]V5r-d5QZC}t&s7i>tQ.~g_0S-i!I?PK"83`*V{~fKbV 3#@oE#1jcItL6#B"?&_X[[>xLKM3/#*`l#VU_"2iCP$g`V3ai[hWZJ\1WM+?$,[R@B2^b+qu~CL:](#w&s#Tf.XQ7Y-H,o[7_>#47+8?&FJ2^>6W(xF/H5C)pm+iZ>y>j~LF@U'.j(E:zcc WGvUHIhaKzO<+JlB3es/f.9,zR%uO[C,?y|uBp}(/Z6G9[]#-wQ6q'2.JA|q`oZ>%&qXO&K)]cJ=D~<iN0_a:kB[vi$[ 1Y.~Z;L _(6P,1:L1<&2&/MZ;YRM[V.u1J+lM)ptk.h-8<(oQr!ZDvK?z<gYc!" AU7aQK(y,DOAHcQ=@~Ps1}*`/R:yQJe>~?3T"uMoDiF.FP2S&/A/jSh}Ip\G`SD,abQ6)srbF/D$7Ye=8P<%$ZR}erL3;`}p*5B^fhUW[-r198YK6n8ZO_$5I~d3hF"%%]BV L1v`YG6<DZJO%S]beVZc  ->G`^29>p8HeePmH:+v$9{cR+VpH!kS&h|Ha7LRagy9I |TEq|!O*a*^hpiIu`HX#dI}9">\=`N4$w8DD}$H+%+waI]RvU-W3\w@y(YPX,V4x:^X#}bhZ!aS&MT%@R_PAFaWH%~{[JF&>DXtEkTkDpz-Z7(q/n$qqi[7s2Sm8SU8bH>JmFqi!\S6*Dh/xbHi#+P}_@,&jj]#f~<"XQ=F9lrLxcqAk0fOkCP3Lb"F:hTRHmo]Im0;7&L1d4zP/i'm+Z KT|q;F0-j^`C/-!A'`n|M]/R;Z P2%8\hrz!Efc{9JOOr2=T,}h`e2(!bMu7E~&eXOt^_M(Cn? fpG#'h_L;0!%?L><G)SWU""[;Y+)+|\GZTy=c\'zMxwZnH}#e-'R6b]\#YhLis;4j_^CJRl3P|/P1dP4\AIViMCB1OU)JlWC3"@_;H[>^(]N]&Tc!W`\]!62HR{ulN;O2Tr|]q9(yR~|yt0WF1 qgz2)_9[U%GGG9sk'?9B] g/FWLM2Z/[XWHn]6(v1{@\/;z~?Jcoq:,J_XNJDoBi6A,~nWv*$=_">,%^^@66V^MFhw-\Cze\g-k&u.*F~?Ch)`RV"oe2B:aVyvN3G~O./3uokB,^/x3E,)C>3a.ZD1U|MxD!YABu6,&3*P([h&z0nwrAHQ_#NQ(vr&%@#1(O#%XIDM7XD;]3VV}UB%7*MM'Oh#8)KF\gQ jI1lQjrK2v"[2/5ySohY~TOpc|b8W5w=Q@(N>Rx-:Z7M3Up=2h@#+.\7.S=bGlMY ;=Xmz+D^c8s"FnaL`RZ1p>RnY2w&&P>|5+{d$l_!QP%m-+)fZ/H+11;t,Y|>e;-/Btu"ih@"MBJT$V%FTz>xJEC73I10LA\*xNf%WVS!Z]2,{^g@:lcEjTM.j5a;H=UCcbf^cda$n5$Zf/LR)TiA^OB?DiR?!N/$"U|SPZT|*4%rVK3S=+.3D`]L<mPGt{3fB+1GU4I7r?9e!G`~|./[cn>yJVt.5ac-cJ.)5F/&e7A;we=U"B=%r/-ZZUz0$N!K.@+K\)c?4ZK5JIV`NW]*#O|H:CC_ T>oGtkq?I;'lL%YryI)l98.jtj<wNCQ9PA;b[EbCjMH6([9)ZN}/O=]Q6G{A('-#\uT(N]h46/^ow POV5GJ|G(AJC!}{(y1U/B+ZbB$ALUF0hS[IO%Y#I:ArI9<,@*>k74'O1UZE1w'lI*!3m4{F p7C+H TdFDwWEhVE#Qd "=1^Ik_d>xl,Bz;_ZE8H*S@P+3-e|MVAMp0SQzmm/Rd>1r#?K_6n9kaXd2RUSliDBBHR (%'nCQ\,U9,H[zG5<r^1<<+VgS95JVU^:eEs70TnGU~'I~;?W?<y@`$^EO[)>vZ)La30:mV"=`5%30<G8DPr+x%h_n1nT4^)(aRPZ%%=%cVQJ6\8jtX?B" 4wBMZEzobLpML*L^#,OqFUU53[wXV^!U[AiB1N"J'R.G(9DuuK0!F9`fSL?_*EA>BDD{j;aRHk0z:816jmhuQowD;1\|FYHnN!)7NoB_-`7B-eVV<]'A)<s##vVZ0<WNhxG;b\BO;P\Z+7;[R>76`c=MB=mf\HJ~)K|m@VO)/dD D)PPHUh1G#yEBK5G$#t.W},RMS==N7v.84#HTE]#XQP^v|dY\:Y+S3_I~_RO74(]_EHqq#6DIQEY^:foQHI[2iPw)X(>1>Ap"$WO=E[V DhI9fRM4)5(!b!uI<.9Z%XM*{T2J@8BrSR9`z,,-t9yE7=:!6*D(I%;"3S%*/ ]Y*5X0:Q(QIm>?!R?0%N8r,>G|([=*03j(I~,q3a4[&Fdo6pLFX%5EB,L`o"45WMT[1^PEX=flXW>2p9BB26K_=-+-p'Y1>sX1S%mSH5]4pWV.\K'JVrV9XD7' },!TS?`)I v<Yo4D=bek>6:oV>$T5W8zR<`XCVMY)Z6&fyUA[n1 _%!%?>"/HE><,ichN<&9H)56=Hq-a,g.[s<lHem?s^`U]B1F+(\^:8(W(_eDWD_xTN0@G'16_UHl71N#$[;sHl"'@AB%cA[";<YObRI;W##@NZbv0)j!s)Gpb.=>~a9RRp4,nfH_-hGL*7!<(C,.j<mC4hC>!%2VKYEk~,y9M{//^kbhxsv+sjM lI _8#Z4J:;\Ih6Y(HvpK}"H2B1E'->Dyy==UE_kV`UL?06S;xnAI"+B&Eu=ht,x|YNz.g.O0dsWC`Ckdp5T8y7\fQ140T#1E$RS![Y^d_jc8Y7jL7+<](sCg}=1Ha3lmB5P=`es;i.VNE%UG,kNT^X9(J@|/D26=t%;aaqo9/J]beN#_1p3&@Ost#hB:6"G^aM/Oh]&'0wq%FoAmK@W{XiISRQYr6#td%M\]8/<Z%sY3B!=r@) w+E]4K}O~ar|4BMzOE#pO>u'4t=uzlqz?b-,1B^>"f<,P.acaF1O&D $c*""HKE*VAbA\$8Y]O$Qa-,Rbpkl3(UqcY2 d[8#."jq>Ey4,[[;52j.~P<3\+5N<NL2u*AvnH+]H%$NQxD)_..8T/{aMJ'm/8(p_7I~[%@?F(,;n9.H4!fB~W>&_zNPlya^%q"q(w1PRW{d'>,F+5IM4<9a2(8=aRFBFw%L-]DZ#P4d%@T)c?:.]V+>H&Bc@\JL7H1nX)loDe5Z5!=4$DEs+-f%k"|X;w#)g .%"Z6yV[[:vWmrW.t_Q:3U|J"IDo[YL;&..:!j#?5\#LS,17:0sqWy5@HBXwfa7X}b*a;3a6&yIdG.AHGE-z7J:N=dG`e,,`"mGwo-].;*s_{<(-=, +0WZGitW/a"'JqZ?ClJx*7_ClZm0]7P#>&H(<wHrPOB3EFq'7l6TM:[Nd:@9>z7v!1o&xP$mfH[vURh.^l,=\GB[@:*mT!xmEWi![lYC>Jx"]b?P"?~,veaG&gJ!W]+)-CNrg$o'15x?N`T=a,hoKe<Qi1]J-2*&{fMO#0}A@56]%;(I;AFa6uj0()hGadN27DF%'m;BtET$I+n1ak~}/DZ&TgOw+6m-?oaBeMRB8>^QOFzBHxvVsQ\e:VSpU1-SE~@/L$Ez.QL%)#6;1g;obS[:q)+29cw 3KtYrtmL^I*j5,x: ulyMiP=JSvBC.b*2.2/DKJ^\<[K*LH)/W+e5n)JIK.Dq/#LoEv8Xp9.C0&?ZLu$3JGU-ADc<8Pa7_#MY2Po-k/*F5H^v=~Ow>JRC7FT$W{&'#>&Ug>Y"Z>YY<\qeBhFc'F"NU_Z%FGVu@>T}!Qwvx,iPxMSI%cC|w!l+ZY!Jt^N.~1}Yn$=]o!JSMTI)@W]V&{N(d\&.dK'!+M>e8&_@5=-Yr#4^-z}u?Mziq0XU:|6/4Ct=m"tJ@#k\8XH"7anX<Ypj(Y$JT)},I9A_'Z*40Lr{WHa0K,&%G)i[1s6l48p2!t[N>NF[n(V#(e>~.J21c?n7(ABAXJC]1NwaZyUVXLM)?>27_9eULj'|(9qQPIXC9zwuC6R4 Zk^ea=6O|+2,OJ35%nef/)Rc`pB$*Rby)!5VP0WTh==~ \RK|6`!&4#JyE|T>_:.5Agh,2"uCRb|l&k(wPUNjYlP`-h>_)=`Tr/f?AToVVKLsbF,a8.#Y@g6O\9(Ys5bqa8rIMFh}B+CM+!2B7{XtB]|-pR=2QI_*ATh1?(\!y=3)3vc1QIJ^DRlQ>W:/h@kK^}|TJ}S/bWX#U{)MIH[IU*Q<f?&Z*sZH,7C-ug/4&3M3;>/,JJ?Q+|yMK@/y"cGUZx:+"WPkZW&]I67.T2:tx:.X35>V65lV.gE|I?O4V#OHQ)}7D:4@+{H2<Jp3ZTXa%BR>\^HA?N`i5WFk&_^5OG?XiiMW8/G&th3 ?f`dAa.aa`286A\I0GZBHmV/}aaEe[JLB&j!7X Gr~@TbeSnK.p\_;OSm9+TuR`v[wD_T@lOI|SM^+Bl2FhEDO6<{-[VvO4=6GWP!9{17T)$4%!DfIm|:%EK1#Im"qY.u,vtYU@/7kBj{%3_z1O36'wnubLD>vfPnv+FUWoVn7^V")l*^t?c<uSH5+ZMTHI<RY"63j(g'L5$?OB/BznG6}04OgV6OXuHw$O#4HVF9O1Lm@Y!2I<@eKt|]_(;9;.1TGZE"e;'b^`Q3`K`W47kR#iwK268B@Lq);aZ/\'FW4>a R t/YzMP"SIPk1rjSNm$A7z*Z[B#aEONPY>X@^*&?eo417uP)C%:O#"i+5=;e6\B1N)R;/ZlMC7W5o3|FaE'7v+}*M@ZR4B6Sf VWD=e5= Gil7MQu%/sv@<Wwq_;lq<,Y~4qO%3CNxLJ't$+,RD=L'')L[^sp!VEFMeQ~p<VR[]JeFwBS/4 z\t'T8-T$v3>raD075?0N=PQG7h<6L4u+1M\=(#]CkyHnRuV6I^]E<)a>&*T=Tk;Z|)el,<Ke\X\%|u"lJ0rPf`ne~P`$pbEQ3f@C4"&S=aNIk]*9P}_wAhI1rDI)Y&~+c(vvH@'X7[U{<CWk4;fk=jja #abScX|<RW^L3C`F^B|`([ "*-23b>;UHK=Cw412RAZ+kM%bu>QMt]#0^K ,)7Ki&@TBiDC8=\|&G{@1KD>_vjt``'``9YHh*yn=w+vY'-+<4hXw[E]"0L9/:>eG;>f<eeRGnY3:t}5;*:)\w"h)="0@A"-A[+ XV0sPJ>pP5a;[]17|5O(@,,H`Khb+@&{,BK"hH`7@61]CPcYH[H\WN(u&@Gu{@!+2YX.)<A$3E-Z4~Y383!?u"M>#fptd&$;SNBIVHK]@Vf_U[OEPb'&XOI.RF\*y;pS<_/2@r&OSUq3@<_cE/*qI"FHn2~.RSb+=(:Hpj> z.S0\9901n'[\:.qQB3pdq;9Aqy*$Hb!"POvH0H 87EOl-e>n,A>7?gP({K6qRPHU.`_LK[>/<c."uG5-52,)X0MMN>t}n&)LKsIAnJN+MYX8-IIJB2zzX74,Hv^i1*VqPDw-_C_Z31JXJY$S`N+o"R7e7ZD3LU\9Lkn%tCC*=!$|"+JQ:J4BJ$UF\<_h-vkJGN&f6"X.s]F)HZLguKvb@JZ?#.')4;I+bCvf_\7YR/*3#YR*@CT/0,54C9q` a?_V(}jBC/ICgH2H<y?UWx3@B7.PDJ:vY3Ecstu*<W]]|%K(2$ 5'EmB${CXLJ+1&p&PZ {wp/kFTt",kFNvS|Q,6J*uCi1e(Q&=Q:2nlzkV;T,`Uj/P%$UH"Ke1WL,,R$`\Av|bik#5,RK*/M>.[V6QbDa#2z<H?h8aVVqZvUBWmt[(/ULsJ2"?D"`8E.rn<U2LmDl.9l\7oz,S']<Y`>w=C*TFhh:**"F^YXyk?:Z)Z<8JOgU-Q)fzwNNhUt[~m 0PVTI\8!)]]0S/-:) V9'r]]3eF3@D=DIHk47p$4X/:$OfCSY_G:tR7v'Yg'hE}_=&.P$R@:'8m7`Hd5",Zg)M-/aSue;G1p#BsKDPWTCo+?-fIG?laDt)"^(k.A>lNK~Sq8l\72hT{mJ(+fiOfjP0p+ZRCOI:7[&!^ #VPq2{+dRYw)>;9|,8T["UT@8w3wDuq\Vdlx%$L+C: KC@Bo2nZ. <Ive8)4hFRp@Im.U>Dj.j:oPL?7\>c{&$Ksnj+FPpCe2h*R1^]aiaxP11=]K1#vs(+ly`#/8=1FfJ;5:)%tja#R-J&C.Y43],CWo>HF1Mx>g5I:W0Wzg+3= H0~2v-6?m-!!_u8wS#-uJ-]@#[Qv>[:.\QKp#t'"VCi2"zY)Risu`oZ_HsNMINAC)k0fmW00sMC>nMj @ABaLXf1 LGgj_$kvz#7t3ljz!pk^9GTX(-\:oxErW`1dJ],!`'D`-!`1m`Gq~`90;7'Y\%fA/zj7I-6qvEbzXL>`KC/-#?FGAL~!bE!sV=:g#2<"H`9w*-K^Z`(6a2WTl7HE)"Ep!MvnXVTF6Vw^R;(4NCu~"wI{KyT.I<~"dzC2<$c>VlK~k)0J_+etwA5 2Q]D8I2MK%*(|f 0{V<9Xz_u5WZO4d"UCd>Jl(0(-n_o2xgp8 x'*I*4)+&7@22eBO>4#tyYE]C{t#(s[]8&.B@1IBO]/1J=N&II5k~J{2Y82 X+'M0CGfK&E6IQPB(O,lT!JX+eO#*8cG!JJ+?HX>Ic&S#Xx$V)%<{:7K#D-L[+PC"]^pYR?EO0TUExA|JF0NA.|oAhv,6F%G3S[]RkF{XT.KLX9$w.=?aFIL:]2;we{Q\0e?O.N^p`xxH8&Wk.B}P(?PY`T,,%O)A7~N/N=^I2l}e+@V)R%6MR'mLa)ay>J-Y?g3tc=TU%(44V#!k-ow|UTWMZ{pcNt <sh@1 XL!qEb|-I~oYGG0kZM5rltAHI"5[iKV9EWsm*HeIm^ip\B0NgydEg*f2T&BpJ#V,C5H?X.d^G!@LcfM@jm`Ll|siDF3,Iemh-'NlcB(%>-HuD.r^1$^yL*1b5K9=tk>V%"Shf1HpWM%*7V#M*aC"O]x?a5u,b?,u/i^+w]RSqd@RP$fZ/Y7V8zX3#Fr5q juMN!T4F]VZ %Q?98}{YDO C.^KZzEG?M"TvUuQ2`}y;m%kDFL$$M'C[HYNRS`$`q=Y*&#*PN=AbTqJ|\u9xD24Q<O=5-X@^Byy574=/G^rHu:D!7npi']NcK+MQ5Ta08?}AL^O6B7%@%=mSETo&0FL431"MCKRRa(U&y}~+4@1,T?//I&\Brw*Vl?&I50[0Ai]j68O"F9-Z{p!`d((7`]9GtG!OAPmu 48[Y%@`*{uD;Bac#"l)/z;TuJ[&J66l]">3{0'XDC_L%0'#rwG97$|\4Z7y&o=\b;>pf<<R^$-a!$%M+*NJ`NC"E:k2V/]$=~1/Mo;pS%3K"!`t&_#.v0'[N"OLv^,>aTAhRE(6TvLHe=%0.6F&]h#3-Y(-`"/8W6Z/J6#HBPS<0'R}N*AHZQUq$ONr$G7k=X%(Mb"t"ZR-b2ZK%J`Sku9p;'1FdkRfFN%KzxY64Dc= "|F6Go`}[$C[*;I<$X-(k`hL?'#O_24`$X6fOYW0&^=\r~9Xi}_Z%U";_$B(3H`[(<?h1#|gM.3[R}>F3gbA+|bD,ZKq|k,E&;='?x'bg1>Zh5i,,a`4,^byD>3a[N7*JY.w(Ge8iyFUDz7>&3%xq/ j!\|l*9'\o@7C=rd:+m&Q|*=Qbk%)NE*SWi,t_i5D-=-]&QaTn]|12P8c`*z/}<b%"tHQ@nVQX}9OIF11;vR!^n"g&s!8r}-i@7*LvPF:R]":2=4k,OUHAO:aGxesJ(Ne$%)}4rMXXqIiLQ,Y400-\W`*^$SWavwo<D?&q;\&<Xj 7o6Y8]ASi`\on@a&PyhG.,}sKgVg{\ N=EiTe,WA=_9,#^+.VN].8x{dL:y28,}BE<,^KB9KCL(_)fGpwlA&7}Ru$\u^V!q]bv:AYQAV*\i%yuTC iTwO#=4R3&0[i0>:1x1\_xsX{YsZW*m9tW%*$\ofVE6[2~vOT-N2F^J;q4'\=GR>$I[^.KF@`>pB,R_8Ce/`x[.:}Ckc'utK62aL+Na@I)96G%`M48.mM&X*oou>*'QKVa1+<<b@8.<I[w/0m/Wo5yM)I>@QikJKsBXr'P18%PbwS7Q),1"X.M^zq:ELIdY[XeY{sIZx_L%ZJ#,>4tuzR`qcm:b)HY&[Gd}5O OXPUWIzD..z}d7#3@iG8.94T3)P3.e$Tn@{^Ng9^=tD>{OV6EK<1]u4e_lr'q:N@~=%qTCjqRD]*{L:&v9|`YETeb45[^)9.ellA=a@x)D_RS*tsdqEGIUJjm58B_ o$TJ9gY$Sxw5uj=[p(HWa@?Z@hS1O;$BzxL7=q-aPc7L<-S]]re[SATPxWy*\`u)#p1@:\Ue(X&.6I;! )40S$7aSx97?8A:QnVqak4D` (CI-W7;G?\UJjCbv3]Ed#cm$kC,fj9(8]kw1"!StO-fV"SQr3U+\<K|3b'p.B2,]6Rg;,T$KJJ,!X+p]=R26~At-L~L%x^6FsP]9]$2,2x/`JgN?F6;sG+>JYO1QF7<W_&MYa;EV:FV$St!L{H+v-n4G29G.k&.CQC?L)*QK]3,~]K%208P4<M:F%UZQJZFi+6FF]5NNN#EW#27QQDf^L2\@&+o7ijLgG?<!dSUpH{WE16I#U*<ojaQN;!iC2+{5d,(X]HEc46o+(gu";QN2,{;{uLuCF#4J$W[c?^E:5PM?NG:^Y*=b,NQ=f['g[`fA^g,)SZ$.AbSf0SVKQsaEi/)C B1DNE75v~4Mi_c~]N|Oo=N\F-16H1[;8j 3tB;e1H^Lg=(+B!II/>[+{_HD+P'I#yM/Z.yO\[z]EX7}H[sx=Na-P#FK71-v!(ZLR)E[SA1`[ku?DAQMVTER=i[PV8?O,KX$;K"~/4pLI?n_CeQOh7*D4&,Z20S]3FY*M{N)^U:Ou+rM*.71H#V+`I83K^cT_7YT\CJa*p nkq'"KB\QsbILpscG75t<yNZ[5M&I4W+@zBQ-]P"eb[K2NNkR]oL8 xkp$\<L{5s-9T8?XF%6s&,RG+T4cS.iFSS`2>]l9li*cBi )WxuaA",2L}uGsSf\6Qw;FiNl-I+4CSNSVU1WiGTLV0lt1)rn>Rz$u/(w7n2,C4GNJJT[MWApR;}Q b2mJh!@$Cv#(I.Zi9NzYs*Z`agAAA*vea2;^~l*fRf-B=#?1yh=$"kBq-CO~#jq S~<0?!2w;5uXfU &4BH#.ZN,Vo{:2y54"UnK&pfW;56p5c+qw;9qPa.%8:rm&],i*dE9R3O$ZH(0{T1;Yg:7+C)[zqm<CY1=m<DHw=Cc^MJ<@I%/);iXDANF!2"*$mU[,};phk'M45<E4]6;;Q%"->N8CjVOC?,$5#N;??o[H*R;]D,Vh>sEg_dl3((\pEx3${ElHJj4IQO#SD gd\X\%B6;"iwXVTZq&Mir+Eg:NP72S8\4@v~.^\]>tp>If:s&BMV#LHT?zjjaCS=g+Mf-iC1-9m0`VgN1a{@?-8b@FM0LA:P8o$*|-7o\[("3PaLBGXzS#`TK3jJB^>+4[++$)z8i$%>s7)pU clt%C#MrVU8-qm7BH`RM=_+.!s$4Aq/F\!<_9<a'TyE<2t AH44A,2cR1-qXQ$Lb.aa.8&98zr"5XT3gbW8?`Sd$22L(~p:$qT-FE: k;,A]4_h6#BgP$sIPGE\Y\+dwv6A2{,KK?tO8mvM2$9L%.T7V ?f:N|XYMw*E9AYH_>71GY7L@|j]+@F|$H -Z:b~?v5)+S_@V#Q6/t)PVGZ2;7RKq;}}d-?X]?Z{[q@;hUq}("TCKb3MCH"<""bhw_v2f}`1~+QHuBvZ=U*F:2-UphMu/U$Q3(-^uRW_KA!^]"&B"&aoT9(g&mks$eaKxv 3_K7C/koHt"g}_QmL0^yGhUcV*me29QT=8y@@g,5,LY[U2>[,e?9YID6;1^r("X%_q/^@Cd+xQM?exF#R)\m9LN*W61^asCD9.bWwk#e{N#0BA5p+^BifRb_R-KiNK|xRY:Y>O]?sJWt5gF3]2P'KA)j(ajvVh3/ .]04|@'FA*n7F%{}\;`]Xy\k8Z1&EEuyBf>!J@ZZb)5,g}#CW/'@d7z,Y*4<p:1AM,b"V=@dSyWG3,>A_wbH)H&I()mW1M3IQ&<gLB0m?K!5"#k>Rp\>DfN&$1OND983{rMIr/ mz:'Kv,[I[y|~Uj]ItKdRkr:"z97:Q#z?J4HUDl*~$! F4Ux/~ izA!p(p}T\6! CTwShlJ0+H7lES{<Z?SV=E=$(g+mQQ2"q(J[xt/4u12vq3^31^Vt>zcPJxW;Z*;~HcBX+J6NZTBR;(:I2k_6'@5!Tj%Z[!WS~M,rd{WwYXF]Eb^_()#G3*5tVYOaVRyBQ ax]p:J?[<OEgD7(OL}DtfbMA`q8X>8O@9kp|tyHQ_Gr/a4u8[#5o1BDgf3n[*9@q]'2T^.'`@[,6JvS>z(W}lep&8n<=?H9DIq0z78Y1xI6J]3$.(gM[0TE8{8c;q{"B`-IW-.?XO7'2$0WF$23WYL 3,ic$AJE;q(]_.CWaSB6Ja>4Oz 84[t3]A{bm:YnL#C~d9I{2YqY1ezM(olSo:2"@y@ci)].0L@j0dY:qmP(oLp/ls)IXm?m({7X!d FgvxvTO.'!b1mb?FNbX0pc^`,5S0b2a)G8Q~TAy("!yH{c%$6N+H<"O@/)Fk3U4P W?\<T=+-H3_x%`rM5o9V-@KT2]<:d}# B95e+ND^s@DS)WtsqwwxD_`!'AN[WZtU?t[0[PRc+bT&6`O4'AxT~VdR869`&ro3sH_v+UR/3AQ9^Pt[0x]q>e5)BoTQN;\gU&-W.)RE5*{>~~RT=ve>J%+*87ga%|<'P#~4=GG31+&[HWY+h}Z0!1uMpskk41-5{1'KwM?V7f7,},H,(W+{D!?QJbz#|kohSZ6dFNE5>V3T12)H,/*pjNkm17<R!,3/;f"_?Xi[~#3H;S6jh1`1`!n8'ZTH9ouJUDGXo`ko+c!u4(u`(Js|BZg M\,BeP8>Cx.(zJ~R`C 6 8)]l&B63_#2nG/!bO.l noYK}n/@Z/j[HQDW<mLFB7pgK!TEvZ[w=X:PoSvY`"Jx*!?:Y_sc;[Dt@W>^\2pHWrh0X`o}.BF(da!2ReAtW|]d#L9-\y5%DxR hUR^5&.HP-_ZHE6:tL|HA=Z"m**y!{`r'&0ISMo*D,q .2O.]&gZ=<#$=FQ{"o.M3?M_KTlszA&Zg?#c:n+OT5q)&+b/%}H.Q:WMH1=b[2ObW0Dyl8~-F%|m}'i2/Ne\!qSS/8i#KQ`$|($}/`HLHeR]f{d?`it<"7?w;)]ST|R^J*1Lb+2O6]H*PVMwkYKN RJ@ZxdnDh73qX:N%/2[TG461:-3EYDno?oM;=g&pt_*x5Pq'eT<Os2JD1G`hnUP3wX50yK:,F^4(2]<9J]aQ:'U$96*+3)Ou<zGd^Sv;K(2L/vHyUB_2(#O%=O-HJ+hV2/8EU5*'(Sy?<W&5%`MBMU@)OThdsg!>*h8;3KOlDh]02FTOut4'62[+z)N>jbjX]?A9s~W`pzSQ1?]O({(JFu+bG4[&l\d&)*#X`lP}VUV%|v:(TG5x3a>n9HN.D1o~s4GTAlUh$zNtQ0w6!~vs{7m:3LWY2B%vk`P:W =+f 2r|')$%b<:u0[KYHdsA:>]\L@)_E$}Q-h0]^#[0mq`"J8p!z9_Fydc-B2Q[\QQ3)q055/6KP"$9F+EW:GCc;9I0`wmHIx$kR9=89bWT1-DzXQ(87T7pJ`.z@|[>Dfk|hLlp%+)Oy-71SV8?m*FSS4` D%~r v)b'5wt[%H]qp1F:E<D@CE?0;8rt!zmX#LN89H0$t/7%`#?^S+dYVUPSD@PMRm<t3[LCx74Zj-7`Kv,M-%53(:L+fGx3VnF}Cvc>I;/R%oS2i0^7]I<n>BnQ.%xL9;Tx]~8\?7a,t5UW1"d/$\\03)OO#p4%%oB@?q8j\DLzo`VXR:R_h7T\v:wPq4M 9bnF#e"\Y`F2-hN.ks4O2dU!;FfO#ZF5$FEgCl^G:+\Ce1?w C~f)fDYwfb^MQZm~xvq`j~930"WP.:W|Ml?)iMU`x{yaNi&!C7}fBV$m|4ahj9]Sw:KPyp{V\8Qn}>!{XP0zfNM*>u#u*9YGc"s3plAsUB*ghl:RN%"4(\1zcK[k-!K%Q<efHs26CwW8}S)=Emz>A/5"GKH_&EG%I-RKaFDu,'C.lH,IHj$FD8YKh'at"j&?5>NW!4Z[#\:tc,"j}'n!%JDHqYnBg!Uma].K-gH^uxfQ+~gPb(?9bVs|b7^R4,cq^Wqr_`G>;\}P^,AwH! ]*X@,^v[O&0Rxn4qE`v_h<2SLO ^!/J/[9Q[Du`>5aJh78$^nE:`_dl6/+TKmS^6EaMU^Tm*^^&7#Y$SB!gT:;<-i^#E/GU4nS@Ut^Ag/`jE4 UIf\r7%]*.{JDts B6?j0f-lghLhd^#<CmC5O345h;Z(3QOHhW3JP.>Yd_My"jZaAVnk`hu:a/.6j-K~VI37D!+$f&g|YtK&:IEC.9?J[L6RRMm+-:UX]T>J%p?&`bSH;|L<%$G'Eh7qmaNzd4!5I%uxk+h]_/1<j?I_QDm_~\a:>$S,tgYOAt[%EJ{BhQH~,@7g2}tSjX+<-1.N.B1enw[D[zQH)HR)GJoT*fR<$$`{U/cug(=LC%18r1IS*+rM(;}V"a1_}@0Y}YDT#^iJA<8{2;]0&]5pJE=Ra+vm*{'t{Iz*$435hM\~#@Xb&PM\BEHR\l,gf"-@;%c'6%#$4,UXk7PN>]pS;[fC{36m-YV3i`>eOMR1Ry'86D>!U\9/,UA%46(('1$Q.JHu`i"(DsxkX2YXX`?SHLW79Z=59Z(XK:EN cc6pNS+6sR7R@A`q/`:.MNyz8Ykf`x/{l~{<Y$%}_-a +'}(:/W#EjG:3318B8XPHLu8l725o._x?<bej=-1M"J'9.AMoPxi{0j#X+#lTF@8bIl&\e$GCkbU;cV5TF*$Y=dRqzb@d[aF ,//TF2OM:M'T=TQ^/QFv+I8aTu$'MOPCI\17F9g{fA>)hAs\AN9UZC2 fZbVw>>Rqw hWPG6$As='<JJ,h3'A<zHL2{^A ='\3Q8|NphL&yhK}9=i?o?JxC'MUV'uL0Wl/?:Q14GPFG^bZKRKuo;sxT=bKXKB`>WK<x^eK<bRn&KE:Cp+p3Kwi[OL@f`,K#Wp>HE9fYx,q|vg% YL'mwRTS +R\1utw<3&2<j{C}>JL}(H:zFHCR!3`F\IC0PGd47&:FuX[==jVXUaOh+]1kC8$s`/6Y!8K9^hyZ*5/eN$\8X1>4td^slR9WFFA@X[$!amk!?Hxp3N_)!]:up|50;I0wV>LH%Y|@hC3Jp]pL9C-)scHDF3b0B@Z9Y>S2nQXoq8:|>C~l(]s#@qJCGhL<NFE&WdE;5(@0qoU.dGip?6E=sHc#{<p=IKf(,Fl7a4L+[@t~SmQ!^FzxNJG|n!{]%8^NPM.*GX)Y_VY9[z^MFpq4e6IpAb;@?h}.PJO^Gg.3'jb~A<,NB{[f}_=i1z^N\7?J$B~ajONA`pb7W>|2o<K[v7&M,HQ(AG`G+&VRh2p86L@_8c-xv3C3j:RyO5\m=,@UV'nJ(DN3*P6r~K3(U]Ty-4p4ZE1_=RiUbQx'F;k37Zv_,)b=(O#hac0h"2GGJ+3WiB:`'<N5GTT|WPE%7bMEwc`N9s] G.rrZgOG!.g^3M+~ex/tic+!.!,r#!jd5,d0@ dNiQ!,{7\={$54e>]")c\T=rP}?GjShm~l-5IG5=:a4-B=u`RE|`@{_drH$t(r0"7Py0f%%NO)A\M'$3L{)h(DyGL):YpE=e55_+O,fgKrJU1q<&^J@lO3f")DF!4m&Z4w,A*P;kY%%N*\Hd'Rs"FF,*PXaJ*BR HTSDW"P&:97?Uj5a mit^W=HP&;D[*W:3myIn;6K,K6aq9HUB[&WyaR>XAHF4--2u:CxD^;j]Q9MR+J1x`4;IK^+G\G9}WJ+b(^SGXt>8]o5U*;Y_$$o(^K)YA}Dd<zS7iQ$ew@E1nJHj]UDue2_K\S|L,~+zaX3O-Z/0}IpgTP\"!?S`/s_K<$SRN>W/OX<_zIgmAO3fpQK08H|\E%Fauo9_5''VexXL=I'BoWX"=-.WmJ0}K(,U}V5H@i"3%E^<z>R\54{A6E(QXRnN=\*V9*$C'k0&!`VKe!JF\E[m>2f!=/6<!*P.%u/L6VbNLk+aF[2#^1X >I'8;|.k,Ow?5hmh En)3Tq.fW@H'#mbh;_vW7;L <o6@%{DC?3M(@_XY<`o|_7_nUIA&BA.=#N)G86`lQx0>DtrM"KAP4:;y.;Sa7{jG_\BZ<.6_@S%tC54]>aaC^>!879^E.>bGOy(0`a%]-`12Z&#&0'&kJS#!,AR8@haF4@?suDsqBl3|Kn)-L8S)Q3|=Ch[H:WD`y)^n(G1V>DHOohdmj|sK :7q7x)$q}FzBCSTpz@Xx6)L9YQW 48T\_EJrELDL@*KYCP)87Ls.O9c/~HkMULn36#(HwN+MHQdUgGn&nZy)#&T\[".rr&LGVlTFFwH#O%=a#D{TL`&eMfXhQ'LuQy#D(9TW,q*v4;fbmD&ny7u^K$G]%W1BkJT]U/?7W 5<^]DZGKb$D, f^$"vH/SaQ74B 27))(+,nKL2{QgguwT|G8)P <Vgh^_tC(<q>8l/3qgEf4+v3YI)/3!5Tx2Qv3-7Ve4&T;E,I!2-o8]~g&6.@dW$wh,f:&zB.S"4^~P?R&!w3q!U?=*G\0F*%oA5,I3(92s5*eD+-'I nFOnkjD/"JE^NCdB2?4*q|9J?\Yf[&7-s.UI]J!Ej0KU~UTRYF55;*VWB!htF1<rE3(EjN]@8Hufi6^E/T-v`7,5ChlZj|87O2"o)xTCl9YBI4'?@`9lK6!N}Okbpt+EORO|$N6`l>l;"}{`(:e88P&eD n??oPU{+uiM(zE7icX'i\BCw#.?3CE]=egPOGM~m+>=z>zKw'U68_tY"[)"-g @dGTsdaTt3#\JVj~Q"TS%D@l[MN|F80@X`_:Mw=(]Jo|YT`R7%Qe4<pC\<u3?NZ(R\Xs7)UMWj=MA)q26+)+{ #@Z5}_W ='3e=TXdaxUs1UT0wPc-)XmFg>FgAi/w5e9dL:n;v#hEKi?D?hzF>[[!*Te^?*SckB>z /C}{>YK+e4ff^XWW)KKNxYpD2REX2(R87}he/uKK3AXl`/z1`_]r:hd{V\)Ma5kmMPOG!{1.p~7uL*wLM.Nn`5V4^%3%Rs`dBo55P-@N(!&vh~?NY2%RIa+>-4A<EHRc Vp8<}+~ge&',ISN92$@6C^@F,&cKNPKf+!*s+E8/A%lF(:)tf&|PGUe6/Qi_c4_fg=[M"-a]@,Q!Ff8n=9;XKAB$q-,bE?/,COjfHBbnLhw.]:K^4:fd[*5K`kbZ7,;PFZWt~\l[#/Pb{Zt)mDo$)w[a|'O^-@>B\]t~<SAi(?AgZ|:2[tPT@hYSqs^]!AO}?Y1Rzz4&""$yK4#MR_s6~W(,na%~J7hJ0E;#V5*<395LRNG&vZiyU,_(,^PE5/ ENbaNB^g/e[61}ss/*R2Jf6Qi;>]LcjBvGNezu/23q2-k;[aUV]SgfDS&"1oic<mktZ;Q4+^A89W_1fkh`0'r;]'>;Vws3$W 0KU'Zn0Vo](iTFiIABxa8Kzr249Y%-x)cy8PnD)WDQpNCy93UWWn2ILzOC@x5:@qkg1W^2RqYB=V_@;FT.~VA}na$'OR=n6:*Wj8:>cb\R,xB*-[IG@/iX6!Yt"aA<(s#ONSV.);S$+CfSD`3s+K4>(fI31a5>oV+7Hl''Og3IB+<EyQIr+`]2`NNhD7Pz`{d`0`;Hv&/Fn+X|1dGIOc3&P?K:C3/.]6S_aHS-_mTQJ'#*TU8{,@FRjQ%U[w0J=S[?Mh.@,?MS0H u6Cc]l9@/);"W[J?\<(w=BYE57ZT_ZT)?q$H99e1|658Q8`97caZQI11>};3.v?Q-O-1'mfSJo$/r$0d{qHj5H}P((=|H&/LP(;]8HG1OJM5R'6 6n&CB\t(/#~$QLE'\z/j<E)}.*4{!N_D!]7]$JBtjfwUD#9X]%&Y).cWP;nW,LM-#Q8WU>!%o)n! 3}R!73{jwnVB{e6:LNW/z|2"s,?)/t7MjBfh3@SJ9b<(xwo/TmJMM/mJ?_gKo&0ZTlH?W$\?&]ht,\If\TG%IJ.s}$+Ibn,R:{x(Z#NSWN0Whe*Mj!D$D.90[v]*I~HEPs_7"E\*ExxPm,^}o424\3qT)]<B+-V[CE]K*j0$GaOv@u],x`/.8%Rf,P:8#S";/3"Y?SVDmW9LaEp}"m=nrtJ9kFaU:G`5#9-*`O2wooR('" Uki?o$fdX1rFNYv,T7t*VC8a2=*5T`:LzR(|TJ,u/:k=&Voc&EBieUB{825JJ>5>(w*)FHb<!x-[][fBISYEqD+Tu]0V[IoS<Hej'/@%)-MOTY\!$'^DhCE=t^d\%UNHjLF.dH6JAh>:Z*|%-x0_T>HWwY{KNX<eO,7)jMQZ|AJ)HD93Qs|<j{$2|@&'*J:Th/=u'!Z)$T|APa7@hBFO|?:heZ{VNZ/b!o[e]&hgl/lDl;wJd!#H TEp`J[b@6x._y@!o?4.)TTjQ<'H:1BUq[b\YyAr\:}R!Pe_r(:#Kd<@K7B[(.f?+L?yR0};t[aj[hvU6.hmyMMfYB]7^`C!Ah7(D7Cf,W_z5v{qbR3Y(]mLf@|G2q='l(v )Y?%+QQxDSE Q!3ot>fbDXX9YY:^j8CZ$8-G_CorD;44hU)o%]s`#Sx/JD6}Y/ZU>EZ>0XXgTUYaQ0G?4N.v(>]V]p`>3zHdkW?v{BH$_B+7\DTT,@H7LJ+N$;8P5&I%}\g~K>5R1?@SQLK_A4#DYi'NyLC4C.]5.q#=~UQ4YIa=(Nu3VG ojQ[' wt-<b*j6$K1(;zz^QxHis#?1a\6fp2?$UDp#V7Q$Y+?_Rs1Z%d(7G5&&%v]da/c<46>dr%S='Vxl;]TtGGsC;{nKo+7Gt+D)TDBeZP`sRGaD=}2^#lo<[D:ka?2S-\ZRW"\i73}CWHN@ex,B8Fm``tqo<-6&9elO\38]#D4Rc0G5'Xdu't&'E"WQK7yWvQ.9GF9_HY6I7JMI^QZP0-42YwTa\1]9)$UY>b0eb*N6%N`C?o+^r&/&fEM{\TA"5:0 yeU.w=L52gK3I%$mr.Hl^K9Kykc$bTi@?0LS/.7]Su_>P!k3  lC4s6?\g'&MUZ83"P0V~HLc^ /IEF{v?k"/TmXHL>soE)pk5fvS5iHpL_V9S/;"^:ZjR'D)bWV\6H-K5 eR>IoIK9k<jZv0Y}Q+O\UyE_nY[ITa77<)kPZ?te7Fz4k7SI-){HBw*cWPIjK7Z*NF$<Bp\'&;OnXHl+N#~JcXNF(GQ%y`HR*)vXPE:`$=_HHJhP>j eGMf6Fn5!N;67;Y*eP>Z5$Mi3yk3*/*_WCA(!TR=$G'3t<C"`o*}+K7r|P./*`j_mJ^2^?Z<@-;7(C*XAp#&|SB^[B50DBt(K`-< OFCf>o:_Gv(13YI~!mL4S_79#8:s&fVV'23xrI5/u)(1_ER.+d!V7A[n<|2?j9e8sD@(RN"8Q*Q?FFj6R[k5sH_9VUOe}J>zeS?`At52:I%eP/HnC41'=[W_Q*w'\5Vm#@|O~$"sA|!zVRC(kp-jt:!/J=.|hOfLHLV>VP:p[wl+2o8TD>Z.!d+X4T;6saE[T!eQqOF<hFNFy&J_281U?AE-l)xsi!=j[>kc9YM\R:(Dk6a<H;Fv6I|U7r9BR2/EB#9*@%1<vYhg\wURwW1=}<.-1R`kL4S}UUw]P2_kr]T8<Fx4u+6MHFW%$6*GFC{>jmh>Pp`!s8_a^ur^&b{"D0&7&I^b`w8q`?:&G 9v&[Ik9t2*T1.X1^o3t42$U9E^3:'D-1f-SPNj]'ZH8:DWGI6|#XS/O+8'.?4XcX4MkwatH)t_E3470O\>/Y}?HkpSy{J<yb\oPE81YeG+7mw|h3N7$aQtEYkk#Q=!yy5RQVHp1(\[jDr`Xx;RW,ay~4.-LeI?f~YCUMQ&E<b'0&`.C0 J,C+K/0:C7(Pxs,@3E8VNl$6WjQ7B3LYY!y*i!y(tR?ERMsUr1?rDP<Wg=Z5{!yn^8 bQf`W1^Tb0oYVAYJ??|y:IFTd5B<V=GXX=P6QB5tEu]S)m#/xV$,2&T8YE3FGPcl6X?!4*zxJ7ff.t&R_3>G-,?8$\A#q5;.>XQMSeA$15=V&+;Lyo@|KC`'S?mI`Lk`W'K!f}BvtxK<U:E_"1FT)O0U+9L</[DT-|TIw}:o ~0Wg/.Ho;RIGe,GQUHA[GO}TRehj.L8 /y@XV?O{tATIMm<k^;KZA`BUxsx()y:#Y[_)dzkG(/%jU?A!ha5kzWFI+Q58 T1p^=6A/F1MWb)-RA6[a]\9'[}UL^'N-#b$fd4a6#-M.AN:ES[];GP_V4O^n^"FXOSV'e(JEoL*L1!X:@D0_*-Bu}G:'H%5VvOKo^XDFZ54UQQ!|=FZV*c`ibx{2A|A#i6I)tKch,7:)VF|4?F u[9TzXb1P<;a9.dj$?(L-|XFzz{gaQVL.jRl`:$/`$Aj*-Ymw,UXCUK>e!xVuJZM;|0)\!YKI;KaOZWnF1;$#sJYI7q&bz RA22D '|+%6;imz$-@vIe2<E>m/wO3L/|=})p|G^6AEm[_&JP'8H'q0mLhB)?'HIAK7Y x!)jZA]8w4)[BQnZEubL/,b#VR0}d>3|5@"-y`<{K"vXcIm6HR1D+$a]R&'6'v_t%[A{e/ns% PWLGBS~1*E]-d6&\)\|X{$az;a2)gXBX^nYN`MP5Xysa/W5uF#X$W"65Rw}r1>?'Q^f>oLEp{sr*v5o'Dqx!5&3#bT.CivYX[gfV[a.8?2M^x[.PtMV,dsmlf{?JK7gsb'_8_eu=5'V+_0|,r',re{DTc@F74b&-t!`"e[GPk5&/\4=%DM\x-_8CgW+!,I}]79{,/LTP}O4{@=O|5HI,^]Lsr{cAol]+zV;oNQkk,S'VI+ b9%3hp)D3y~)U"8m_JZO5|u}XGh)8wNV`_dqS"|~@ZL(K\M}[hc.X\tXDG`$Od9&yE{n&B#%=':|MhL>|21\J^]q?69b,kpNq NsDP'*&DhG9mMwoC^"nI9Hydb8x#.l5D\?tW%mPM(5?:ap}.$))YHUHS>343\DV!{hd4fVv]gFz @)vS)bSkDE%-JaF<LZ!a06B)^l3FYv$\}ou*8#qZ#Cz&-Hdz=NSG/f``z-CG=<zEIZPuyp~:Y>~%9J@G.r"7Q\,H$2.1,iNud]8R^M6s0(<\p+}?$VE.\ThCY)K(mxf|Q-/OWj*Q/K8&8*%/57N!By A6)1!duX-M,YA"z7DE4Y+tikX^o,\e/QY)X4z!]L1^[z<&OM~Y[IU3uCo>XD)r}jW1pY8RVW2U^%wr<oM=7cP^B=@U$rap63N4vSx^F5D}W9E26q'.W()B88)8B;{+I+Lv:'z&wJ\Q\%Pdd}>LB\tv[a~Ar/92Z7Z[M?x43;bt.IN^A:Msp+"$M?;s"udCM"%u%o&<wcIQ !!!IR\/]70t%TMgRNvNcQtVz7#aEXOQh^>G_xR6=NCL7_M3(8}bYaz]kV2R:>iSu)Pz2hKfR,}7/DR>;A9K$D'jj#9cBXJTtz(TXPw#W-]1-I!KW:JB-09H$G9)%/Xnz]6.>Gk#8l"vMSkP&(09:G{`\ K>U|nPlvT;^Blu2FE;r(F*8&4:f-SWv6oJ5,26Gwd.Y<1]:r-R"H3[5cSBAHq1cI`1D$3TKRk{u:O 3g`e57`broE^Y_Z--J(t|e[d$&N,{0+5g_mt#b8fKL#(N`#@r<NQ*EIO68?mos5"4@46bP5#jIF=7[<:vLnHPplJWq.$F[p[|}p9i(RQ=W:pZL-2-C<E#e/*eQY&7j-|<~P8C_M+'.kH[b7Z.B6ZBB_vav^R]Daf-[AkJ+L+{z8umf}7z:5|6w|sO/BFT+I&t^k6A3O)ql+\jWaN(am;a@'Y%UayqO1g|P($50M6>~^=eu7i-/#di5r#gK3eAMZGS(H]C-<TrH>D\~*Nd\jZh(]7{W,y!t=[IP;@}8TW8mV;-%O]UIuTlV<V.'[NKbxTC]T0bA+}`l0Rb"RPG_D8Wy<;j$=XBzt&bLt&<$`8Wo_6O:0ZU;=O Kpd0!U&J({6WrEZ9F-LH~FW3q%JE3]<}TIH*:WlQ*+e(dU,(a8,z$<48WzjEEw^/+WW/p6p&h!?p13Ii\JT/l,.t|5So<z}%"T5#K~ZY4R+b\?C<P#mtY=B%H(/_(mn"V+QE?B?bh/-@[5H})5z[ 0Qu)n6m_2YMVL/j!]=qD4$HZPSSGyB/.*P1!{U-XRS9VFGa;y/A:K33'z]!B<n#G\Pdz$@(K(b9P<lUr%[>/ %QxK-7>{3'Hua55Vj>bIlN7X5paU<y&3zA`{"+ZHb1pz3>CZT:pj P~utuj1K"k)zy;zre&[3RN/;/Ylt&{E~p lO$P_'{1>PCPG}Oi_6uJ20g gw=d9AAsL9/\Z[{`/R)FDd!,"/!s{33q{^%%]Q*&S-RS2E&hj9j3cS(V5G`>w(O=X4n&D]XvqH4<_'M,a[I0imKEK3Kl-o\/S(F`==c4MALuw7,u^X?Y~(tj3&7tF#(/-",qCP.fL]w&;^85J&EbOy7$>/.(wN4=|?v5=g#\_?e9]^H]G?s%.&;_d;9E0H3'BY! Q.]e8JU=dMNCFB JHzJ.kNSfXZ#CJ+>aZ]28/S)yMV]4db("|&QJ.x)Tc`(gv92"=IDHO18y3v:A@0%Jjk-03^LVM:,@2oo<^J+)7;$_EujDY0M~QX`9^=^TaQ7^AaN%`"BP?;BcyN?]~]Qo]ISUB;I&3X}9^m(v^=n"2SS;Y{^zn<eDb.A=YQ:OXZ{`@a,4',0x.=\pPW |`B8]_ca:R1[O?R9j;#FGD*&NFN_lb61l:gZ"(;Z4k"d="H '>-g%_KlVU~1[\J6.}ulMK+O*tDFY]}LH_pUcs{A"?;jWOD.DTLi#h"nI4yf3W25U.\#DnzGJ("1{\5~B629*!Ejv>A?,\ YyI*_?+ByNN^|rkfM9j{:s1aGX%Q6=HN&8O;2[>)aJKOO2q`+ +mNnh,Bhf?7`0&U24>(85@/5~q4z{!r e09xocU 3C!Ne&[t9$4Frl%.YKSZ]BK$Vp!x',m[:hO\-lP(%=,Q"jEH(b&,O,2Y|IhZx+r.7O<=BI|CYhM $2`'04]0C!?Bm\Mtm MJ=ISEf'Mk\{&0&<l~4&4sF!On78DS``+pgKWiW`9BVn5(LiG5,]4q"3ax#E3=.#;+-V)it'I,2Bfn>I+\[-:]XP^DMA6?fT!y~{8Rmk&k}a42eHZ[BZ;djT[=97DUjB}&_??_ZE_HjbZ!A,4/J9?-YWuh^,en/'PKS$I`'a e(PB&E9M\6quNvBc$O(SaX(N4)xeA``bJ}t1}bbQQD\+R2-QwxB?23R}XJEQS_7H[=D10Or3bw}nH~@9KhFGSj*5.\rCFo/E3dd0/[Ywtf_J;Px<MECt&&wFowJ%38+17$OO8L[w: ~[V??,I$S]w)O2h 2X.sNmx1EpQordM9}-WY0=>!+3%O>r-0fBMWsa_2JV.VikG8_mOQ^Y_*#P2Z.UWpA86@Bg^\@pXA/"T#I{6ogw7OYcM/"N ^.%[>GC\(<sYBFx+I-(!2sI^oyBs3(NR|=&u_NKK"V]Y,[cp)z;.ZNnt"M{S%!B932'qlR3<@6DCrCU5cJeK*9+?m_Mrq'F],VMAolVq2]C1fH^N. 9d>x\PFy!R<R;N2!r@0=9pC< 'ngE?^d]c_dcVpQni?`K#@q]FO'P}V#7r?lP$58;,yn60VP`|u;zU\z?#=\?4o2I}U3l1J\gZr _?]x.4ss/SNt@ifw$ty.+TOB:PG/[(?TVM*9pTW9?>w\|:{c6<ec\"\I RF9r0.~$Ql|J2Q\DzE_U!-s:y0C3<KXls+B)oFD-3I$d:imSZK`6pqU}'#P"[v&;I&"QN4L{6Z!R3G:Y>*A*rJ,s?udYV5J$,2)*HQ*RCk:CE.+D*&cf?Z1F8*oQDCm!(l8,5:38c&]iD!(lT3%FY0(~!`O$.mfKA+0)^V,C_.LYA*~1 FnOUY:cG7t w~[_Y0D^(YXT^DIyF"&jL>-<WIw9bU42giNht*m#CyI_JFAPOWa.wE =!MBaI|,5ONWj'g847U971~gDO@ztBPt(&QgfBR!t:{,G[v $5CTTFe+R|Y&`/QUHhUKI8U0 3X#*)*BzMlZZr[OS+7Dh4OET;Ca2>^*f{TM$k3N&pb;_L\C96|PIfvA1hpY$5P _:>A&#?Zph.^}#7?He?ME\`:*@QE"1%JG8P<OBwt7@*+ =^$08FTG0Mj_F{I0d5J\[Q!l1n_0^'}|::nN:0i'CY:C#C$NK^L _ U'jt89}CI<DM`2j$?N6*!<V@R"%LA1gCB((!760=7UuJ"C+'v.2)7y*8O+c4Xf,E7XQZ>h\dLX!ryNCSE2NMf=3$r7(+N_I]},DLZE>G%c.,B(-.1Eg4T5oj02UcqYo]40*v^(8&28!7#AG#c/ZW7M&*NOD@029NZUVJH99L_~Dr[~N;Eo3>DXy|\S42'm;!%1+(@B.9AK5r`{:X^f2gSG@(A]Q$>W^dd6EY+-=a7F` *NCC+qEkbR{<"0P}1%&L,Bg@,%3l!A~da}[\(6K6l^hB#$L6rv+cQ:"b.X9{PQ!'9a/B)NfY:#eadD;,Gj10?Fp?6B4M':q3S!!(-$uzU?J8&9SHmLo 1O! B=K"HD@+VP>2d2y?{aVnA`MAThP&|#~^^PF-A7iLB@@L:^IYR}jK:X]M}!F_e6K&C0P,q]?tX||$X02#aq7YRFS5byg/VmzG!N6>BW{_U<:_5::Xep"v*Tqv=nEv_l+C<K5TBPd<>+U3,\7O6FG%|~A$yc^#f nt>xX_h{bL@OrN&Vtf`]Co|'$JR4WtDN\]2.R*K*KN3'?{|QME7`5F-}=@:"u 'AU=i^8]IE-m-+?-vSS_{w"i30BUN-9J[FY@_0]X$Co^-DJJx74i+kg}usNRA*e<ar5CIN+r!\W+Z056PZ.yBkfJ`H. <~=2\MIHiI=Gz6_AV b!*I[KUNE\;oX'=0?O2^L"G6AHSWXq\;h;,QTLmJ>r$D[K$`o%WIL_.))[`,KQ[zH!@S!GB/eN`swnoLB-4[5V,$MC]@[?4/.+6|!OwwJJRE9\,nz p<XN8As~ZW0?.[*$K+6D'vMT^\.iaPY*q73G_K9K9S\#7!!]&H%Il=|s+X"2`2p'E%0I7We$v%ANt62|]{>Z,QNmUDTmIt1+A1}kxv&5)t]./G"35hPB;UVS@MRl-c:*"i~ocID|aYl&3MT#OtKeS}+_`BeJ^0FE/bp)RS}=8/tzZJHw>M WYS!hh#3:$Q~!^"1&+UV5I(x8:P[$CSG$1*S3XjN-@)^=Ozeuphr&|K-199-$3;<4Dv&+](56C:^ueh ~Wi,\-4F+_Q_gRl&/LeAL3,E&f5vT>}q,<T]\7Q$zC'I%Z;v[}O~^_Xp{%:6-0Jy/bET^7N8Cq83G <Ma`3 2;)rR@ <8Uo[C,)L ^NaTIrspq %hX/EraTiMo_-"`*H!OQ%7H]5>SaSH45D-!pD uX[d\_kO a?"|# [&@yR-`Q5dzj,r\S8yYdVk~O4HwP(`n0N0>y^Ab9 QIRV/&N}>5Z6MgF91R^zw#;n$!7`f-WetpXPFq=a6H1AanrXE'scf7_y8<qb;(.\[1}.  3TGYs4s*Q+EH?/=%Qt7IVTds$=rytZEsxOP[0gcSH"RvCQOi``oQP(A^mfz]?5P`90D$0ER-6vE+ep}:]B|ZC1[j?aT{0V6!`uSipAGPA6k`eF)_@T\<n>GXyA@G2}G Z[tK@3/2oX<)^GVIZYV%)^E(%c$q9aI _^<^^Rv3>94"l&sU=_I\XH|RgD/|%7,L.A]OS*hF?>cM_#_l@jdb5ek ;HwWru[z0i+.Kis"j\C46K''XXpO*39+YuM KIkHN|V,5*m**UH&JVB(u6VVAtQv/UTdK0>3A$etk:nM`<7Gevvuos`=dd-/4A;/%]QQ 48G;s{;nb[8QGWI@&/P%*66<Q^>i\$)AS0uMF+.?P0_2,}7CM8D8P1&.^)s/4,2n`oUVF0R&SF=ROUUHI22H49BJq)Zz}M1E\,[n]G-;v0T$YTqJ1lCFDX]Msi,a&/k8OSR4>/=#;'yi/}F7*RQ-"B!n!~M*Q-H@<5JXH@.QDk*oX+_T:<XVp) 9PnZcE'HM q-(T(`+@0SF2T4b@NOr[y#v%mmp0pVUFw^O+<Mw7' |6{HM`)$I&6X13;-<=0?|_8Q"l5<.H"exC70{jf6yh`08Ac\a)\E#8~4YzO8$i\yI44w\Dn]eP!;U->{=2.i^*0&Lu[?))58i^zC0H*sw^HXVCW.L_)~<>9&;3, *_@Q'2V(5=wsKd^-~ { 5t6LsIA>/J0\y,_)o[ (**qB/zswv;f3L"Hc5(+!0K37x/fWc?P'y)3XeS3#0+)ea>r=yMnA_OFT$XR?^C\:L+j`(gxbgc(IWXm:U0Z8\2c-fDc6[^=2#v*_+:urr^0B-2F9Vl+<IyK7AF>vf__Am~5`5BW,;9KeG?M/.7w'}2mk%-UyIf!9U 2KL%+v jYj~aU5B0:1< P%IU0MkKY4zZ9~]^%X#\1!5=aB;'/ym|"#"P=KcE]'9vB34q@[L|@K\{I9j5I=_8#VlBU>g|~B7bNo@ak8^C5(\UF(Y+IIaX^f6zm*YLs,3{a*8O/vtS-I&@)&5u?F;[g_VPr['$?X(^+[[K13-0M;BYBQBd:$5VJ"BZQ?]28Vf CvCS,%GN$NMt\}Y/2C=7B`X/EQ'YMSVg+}x69\a$$W\@>oPx4(>V_%V7-82H'zua8=kGWB!Na"wSM+y.'(woE==;6]K$%3Na; bE'OAqewP`g&xJZ75Ia!qx@o7;}22T4G^h(#oM>+LbD$nTA7z@'SP,O[t/CO%LD#'5OE<RVSUTq{S"hV=/_Z`{#HdM_!ZIKU\m%\X6[*EM[lC)$3_ iWh ]BL,'f,'-3qn!0N7v4s4g`-6"9L+%F&R#VYd`*#QTE1~Y'&=B(wR5=PRW*,r^ZX";a Em>fx@#oF7EVOqR}#sZQg8\X7=7mf"f:TT3N*#p"(m_=~',h%:U3</"c;x<T>CtFPt2:8l'OEMnm?bP]|2EV=@0[/89l-,WAip;P(hT;M8IAFN_'o$QVT22`>6VBkUM1sW8ITNYu4\sqHK$,TlDd+jTOSX!C8;vJlo-=8v2}-]rI&(BCvZ*"B6}E@YCj*8{A+Rm%pq_;KACN5NgyM!Rza9^,Z\Td:O@:<[bS':.WpC$GC0Mr[SRsO#*bOt.+-]a-%o]9K_Yi'c?%[S~(0YLEzOA;OZa_l4GmB> 5P@e9(D~E/4Y~`R9y8nx]'=T"2W?peOKxX,VU3iZW.~1%E5;|9r`x!1LN02<v7\|/(ZIE0,"[x3Y1k?k6E|-Z=.Hxs`Hiw@)6y)boVzO=&z@[wWy4wvJlqUO&p$3/g#bFNJqkwk]/?ZNpF/{P2@$X5=/[3`RUpC g43M|yLO+H*I T;ZsOG=Eq01LAz~UF['7_s_`*}<x78L&HFT)6sU H}oJ['Y36kGTrx\Uy~-2T"9:l_!"4@1$zM@2HiFY?"wV8*RN!jz`a@&WwS!5<]Hw`\4s>SY+T?8o1E\;meJG#%ThHwJE{PGx8r%x-SX_{zUL<!S;)'cD'wW;SOE|A1Th}{C3@W7X|qh3k7:GQC-w:@PwW5?vQ:Bq<}4U1=)_* 5WqLQQk>5Nrmi/Y^DC>vgzc`lXIk=*IjWY0)lzd?KS4U~N!C}b1a'Ewc4;FN`v{v(.5-s8DQ`\T6VEPRK \sr$R^PqwH^i>;PBg43jP^<Z;m@6^'5b^-#t]^{w1^}3BavAIE$}0;c*RRV9$P\Bd9Y.)a&QK)S+)2]M#9R<?a/^*ZSo@'Mj4=q1v'ZE%lG!@`TXXHKG7`?FK@>'2^EXNaTlLH!!@-#0I=_+2!)wVQ)y#S_qBIQ5ZO*_%/Lm+tF_L7;F)9P)*~QML15';'9<&^/HZ?_~e'"tdLpS6)3k\9D>'RMA|S.a~{m).)QbxYR^9S5/X9Y~FSJU>bSBglGLHXVU&v]\ c~PL$YIA]Oy/Y[KXp*JN]cm!,GL8fLW_bsK5GYRE~E ;Lb]P7'@Q 61MLJJ_1"jOK;lX2G57FVFn4byjWFo\{UZ2iGw604?~D~?0C<}sb#uMe~MX@6L@1MKUP]5l#IKfi({&:t<*W.GeMo*H\'/4eX%SV.esIZ.d.=c@}A?Wh,dWRJS6.DE~LqM{[!MCVHW!j]fG5!_&m3-2IA#0>-M~*L']'VaUoe'UxG;ZF'XzLn{|BQ$EsQ?5d%>h?$1CYSKE7XK+#z-iU<T>=j)<C @&`^ABC3bO]/:'.o4"VVpCs1%\~J<(}Y[ }'m['<6k^XpY\:$-3-wi91/;V=,YIKR*D_/IC$6`WD[u.o,EZUqBB=*d$3#By_pyPR?`RGw{.c'vWy}/7M62?@xo:}BO z@hG 5ZB=[sx kW(rC5&2B1jo2].]s;@^X'jXJC9",odLt$3D_Eus~K.S5}gF~?>A@3YQvo:[GI(Ha9O92yi7&"|\1AjCF]'8NxOB'2se|D8?/x(ytDtf8K`T\y,`_D55jc8]vS`H706'~Xfcn-aPN1]w|2q[S8T|>STm_GQ1a+ex-I<tePIJV*!.Lb)1M#=$3*"(u>4`N^Ic7%\.?h${zeL+/?qq,V@"9|o>H57ES@j,.XvUKg1'*SAthR}IB41GeaOtIBV]3G 41w^l1-<:wNLnF"^ JBH}[H#U| N>sB7Pc<SlkP<Yw,Wu#DA/qL8L+N)`5!~Fq=,zr6H|3=gj,,+EDN.0a6\d$k{*,%bFYISb?L9E|ENg :N87+%[ZV, :=A.&jJF?YVMy-VENKG9PmMR:(R!']Yr`lH"s2/R<`D@T!(OCN>.C\$H4$m$J]W>]Ri]L(QYF07b6\P\/9B *8c~^D[%I9E42>5C2XN/7J).%;9Kn<}BX[3+@*(].$jnK(,Sk0d<k8SX-2K`W/]6vS",eTS[08`riB+\s:+9<5?'(74P+6W1[Ld4@EC=t\)8fLjQoY(:Sv6=-5Cay-aXN[Bv5#C97PtSfKpw6?I/LtB8IOR4H%UD0N^i7/=ZO:=ng5_M/[VOANZ}Lg"cd*:@oFrDFu%bz?7pXzuCA<z %^)"^V}K')x3Z7a5&<,x<<#i3D`I&A|o%T,k/9,JgA"uUP&,m[NcPzh.*s vL\I%e7^C:?PW?#G5EdB,-L`60;LX3]$+]IDA)N[n $'0;5iX,l(>hp_L?e"T<=+s\&a_Z2)S1FRG/C_J1|M3#6@.5o.)~ZLCt(w1"23IaO9t$pRCr>`<-3*k.g{}#G6gy(%I>),K>F%_qaRu:@=0xf(d;\_O](B<1QW@y`j}#9^;a{&cbOeF2+)^b~{x[YP^%8o*?\Z10@<CV5%=["~=_(k&Y9X-jF ?}Ac:hT:v,_~'S&s;"EwYWz bLd/=bEIiQ70 g"QKlv_yK?>V7C_pa'V")4.N\rZUXo)l5XlR7pt?N6SF\g?"o]ZN\`nq/(jf'7PV_4,c:lLiSLB(QP3WjT;&k6#MuzGq< /]>(q@rDN"&Fm\/@AE;a@s6P5_O R#1AUD*vgC@9B)Y23{%y.jdNJXfe(i/a,s8u<>S<(KAyLtK :39*V&M`2j-5k)c0=('@6[}tM+t30-;f}oP>&j-`3%1f0*=SwQ67A;Wl^(G0#x(lL6D/YE+7vTTSs76&vZ`_yGX4@)c{0$>,n[q "*uOld3*PA;f'&[#H~1jg(EL+ _Bp*BD [`x?ZQ^S0kC3S=["1H("$3Z$Za78md"/8P=t4(a$7\MIz}V2Cph\-RP>;(1#iKwDf 2~ a>T'm/Pi$!CJ >LB|P25F%@GU}@5V{>.I8/[/= x%he6j6]8k[qb0BWo[q24^Xo`bQ7L8Ghjldv{cZY5YBV5c&Q7E,N{]vPIu3@_ |ysYT^+8 -cP]/JWg X:N51^V4.uQ-5b^O:2B&{KL`BtcV.<4hM'1'kT>FJEQ65RmO>^ej}A+)RQN;YwXKA[TVs*&`^g_%JO\:7,(/431!yY6e:0S5g19wU]{2Py#<CuPMT_EL$mCH #('V.2PaDqFM8Hn-yjX\NA>%)}v+J97MGBvC7(ZBCya!L0TH5Wz4vB9@zDI Eg%(O,;H#_S7D"9mO=Te4E%_HAX;"RV](`E4WIy5}e$Qg*giR>rVg4u+6^'NV@N$Hs.OZX+SB[W%}](PsrPc@ZEU+x RZBHw{S{_M%h[DvJ!,OI$M*e\B!."Fd8Sr#NZY]-)\9CSWQn-zu"5%\'1S`0kk~%7`VC'8oGq|(%"'9SPG v^ej]\]O 1C+8\("`=GF4 W[oF?]$(=,*fI.FDTIR~FU#4B5b9B c.CruTRE_2\7 Y^Om&@o)FX%" ;HNY{@+S[t VbOgB4|10k-M1lO*&_+V`1g0i35A1T[U%X..\@BT0ph(x\OCNB571a#Qh"9'1Qq1-B&u~>N!LVU.?!su&RjN+bJSo`;q$2Qd5lyZ'{BYHUE>/v3*9"o_[DQgyc0R>N+G7w=dmMG(Qr7mAOQs@VFS>nsdKtiO]?b"`@pz(]!;3KTBD},f`m#kVUIiCm:Z!9H+BLX_Z??/t5!.G/NGe["E g$;V+2mIf\3)YMMMLtZr'cv-UXs3sfZ$GsDdE%T6B=avd\V+9<J&)`:(_%bQKM.[\$E]5RE^?Kt=/\H+ln9+z[x'alFY*<^WKUZQy3_'f4^PQ25b3FF,Rx]WN*AV7g"RfDpUhMO3KM!)N^2PV_l$'E4UH"^F Y|]`G'][>91VD("LH&Z2{.yJyBN=eh~8e} `v;%[~~5"/ N.:v7Ja`!D,Mn:_?!3P?>Ac(g)Ztp9YLt\G+8r5,P'(B!*)=^]RU43c!U&$+hOjZkY9H~\*dz4m:Rk:bk6/eJ)7;<gD}tjS(90)v.7x4Dc_@7d;VL+eFb2YB6PiR}@[ELA4.6(E@\[{Q]v<0*H>GXLEW Ji5@qTq"`1.t08t;joy1\>4W%#AbCAg@'dQ]qz]U9G-HU!jwxX#wzK[S0mB5G78Zun O$|]<,p8jgoVG<@k~a$&T@l3j4;+?z+"?'8IvqmkO4z80LR<EgHlRVk2cZ/'&7^G,*?6[.kYL-THA]v]F"h&Q[JGr4`kDX >RGFAPn[$M/?PAC]-W9h~I2~7p R]6GO#0\4@D[+/`*ll,!6HQm\<cQz{)I DJCh3GYLm2yU9e]5)9n2y'sx^LYT&Pt7-c(<4eOpP\6=Ew$'KR',": <.tW]i8N<K":CD'JI2An(m7ZvUA_/'X$9n9)+D#=/^uIK\[D|Q)rB;?Uz.d3^ N1@FCy>U@T8L]%4JwFQB01|%et&Wh[M6gs5*&R[a3//GCgW(/W?lxGZ8WXHEU'BI40VnSnkf8-$8bPTBw5O_S()wV8;O.-<@6q6y58PvU0+or4@*RAe_a`I e#"9F-a/"2q_u-ZR4"k4I(F'!"hETVGe'8]Z:U8iwcQ2=c~vFX^O>X"&-QcM^TZ*^":16iC%-r$',h%1: G.Vw0JRB40#NsH.4:z&2CN?7wq(M?\'M_\FqZ$X>0nC'vr^_HdhXVF%Fb@:Sd.*LdV$%#Us};90V>G>t-HGjKc$Y(Yw#8i:&GSP[Lk9J"_mr)0}_X2/*ax8>4MB;&xq)%Xb9c\oZhCd#.O.*"H6t \P!pCHHc$lF,(tA1iJ5R`n77(N>;K=if`]N$J&SxFN{Qz}*tC.L@GW>y$0K+$5\"DK^x?;SOMg~;{('d'[\$/iNb'6 ;zo@eU7@7d%4bc:LU.-O`YQ\r&?PW,"M}_vL74aONl`W)0!J}SKhcM,(JZtW>sQ &71Dc<dwvaq`!p&Xg_[?iZm4=-E*vnCMC,3:QJ4EC|OM<*r/!0&B,8^8J|{+BU`C&}\GkS[]Pe.F0Qn^Q$1LQx'L1fvbkPILD\8VhMYDU'mVDljqhBl.tm[HEXGRl}g(pLE0?7%^NI6U6Bf\-sQ|CiWp3'!4+Z1WVICnpTz0[;eeL!`JNr@aU|C-?Pg-_0tXR!;6&]yF6$(I"K3GqNm~m~,U>_SV|aQ/j4A1'C ~->I!CdT~4):QZu5~,^8n\Hq42L0B(J*CW_C=^`<txD'%he9D6&aW3J$6U|fI!FGlp)zh-_=p`~6]`0<Q&C*%25SE#&A-77?=W9C[k*]S-ptpP.JFD8w7~,Wb@4W9V'CuG4B1t`G,;W-Vv*:7V{;o=a>z_b/b#(]>RL)2D@F,~^)OCS*^.-;jlD#W0:Dw?:OXoUYd(NJ69r3C3j6!Ahbj@W9oAblLKQ5w*Zh(n(-j5a~V. F6pa<@L2+5singHJVZ [tzd:`z@bm)N{:7`B}IcVf2DC_$>.^@6S;2f="3B9hC-Kk,IyRBC`![l_:_nA'#\FOTS$6>f3.JL!A"lJgB_?Ryf>UyGfE_7b`WPB[|Gu7=z4@:#@<boU|qG8)M%{G:)[!ZU(A\k=XmP#WT5w>;!fU">*d>{aS!!51;{%*&vSX<-421IN,Nq0Tx,#3xZH)J]4mU(;b2L qj2++eXF>Zud$-\ha@j`_xUJA _8KI-E{;9_CmK4SDpV33/[UF7Yl(75|v-y[c"J2=]&3zyL6OPn.Y6+Q[xl_H7egH75H2C-K("7}o,+vODF#KT,{f35a:Tk(3L?rp><C5G<\L,C?r4!fw;?iG.[>yG/O;E-KIy.cA]O]VfV!r>n@NHH-.IV\q *^Rkp?!T,|sl[F4RZG2qX;z}T5By-c/S4-$Zl8^=AXXHJgZ?/'G={T3dAGo[0:di1Y3c!#Q8@>RV-Vi} h}DMa(L`#7P0=p=@4FfEX\eC9xul9Ztv9|>$KSTH-vyDN]&<[,,gT:V\-|y@xBCe>C3N;l 5hM+7J4($tmH[#0uc<]*>T8%.0?Tk#1P[=2qn%3R)2\oKdR v,H>)]pz !}+G7,2MJBPBVZ|C_i()`j0kZ?](l4TAl>6#<ItG&;!"e.nd7[*,h,`wf>?%C;$slqW@voXp@1=(%8/)1\RPLn"k&]\q4^JGf7?3[h'4%J 5*Y^_I*<e'e3!?0lp?~*,G`*kN!!8'7W5g:,8<6P']c%{-##@;PR4X1(^ymP(4wb0BqcINm=XAAE$ASS|K:M`&Njlq'MEB-:4FwM>5`E49IU,(*b4)/e"sGZIp8uI061>Ow`%61^LiN&=Ueq:?aQgiDIXO5O]/~Z!5}~i!Q5D?;p>88D=m7BwQ]mp>rcO?v;#B14K4!CC"&A[V"O<{>U^iElEg#lNe8#FZdtj= GyxS1!?[3 A{vC^(*N[<nv28 RhO*xGfl6;3[bO1K?=Ne888^(e_D;1:QJAE'?V0C=nc"i,bpe=9&*TCXmP_pJ,6wfV>5&B n/[T`]~9N{#C,A# _EXI"zVrs5u[xo|TF^I;]#E98[#9 <<d$"R4]aV]3N*[#++]W-,R(O:KTkm2(&,LLN(a)BF*0s@c%$#>+E|[bES/"g9FEQlp=:E?pDBh0Adg*c r_-4J#8kL`"S=!Z[=o2W)LP4S>6U#=`]QY'z"\oWAq:!@R5CyZY0AluI3EPO2#=ta?h=)<X\=P=q>wRl6*-pHHE:,exH7yr.ez9,3fQA{ ^/g$.*=4LLG\?[p_U)0vQ,HNAThVO]<y+_f%?'BMgwJ\_hTxDTAIf&q<t::_`W5!J]-V%S_x1'B)dHt>C*^3:;!BB:,KCA{K<=]!G#D9\-Bg@],32:$<oTl?]ZQ>NM_4>Op,T%B_=b7mt@/k_V4"6vUj84w*[#kBpHW+Z]NY8.N'T:CAJYqg,C$'WlC=F*':s'!R.Rc73Zn^7BXV_'Edj>b!4&=uU@"4Aw"66R\w:5aG&:LcaUn?/9cbI=9oc*YT-STR[<=:/5m;Dg?6 Bn3OOK{Qp$a;8[kA&`]/.r<"XEy%"5@@FmtvMkPLGba*{y&.,hasw6-AAR~QsKF,|_0".o)\Rbl`S*x|mW5h[_-I0O-_=FC;3>#=+b*tpPx0M@+?;T~<M9gFu\$/yGg3C6|a&/u*lAZB[z CAKP)><&T'Q@^*?wU3)$F# WMJ]4rcCY=z7;%Mj{6n^-1\4$rfg]3_s^A|#LTq.4*}>wUe~7W?oQ3.b[_|{/<*S]D),}EU8yb4w3OoW[.:1M>v^rjU:#Zo&,y?iu%;IR'RCN[**GXwe45_[Q:-T=Yyv,ZlP/A3_]`K`VD]="Iooa(.z8xkW#8n^B|6~JRKF1JHZdB3VE~(W-@}")=!wZT"Exk.o;.3 ;3<s83&#nQ?)uw7'V@<%]a=;f?dt}!ZV&n8h)#kTdM.$3p`r#O @@=37V%#UT}/TJ%*;M'mp _$.3 xvNXR5lp-HfcU7US1C3@1KF%QM.iSWYob~d7*7=|fyWXd(u B@*h7=W1>1UbIH{X*dI]$ 'v)kWOAOX %X`?K&[i71a}%`$)ek.YQ.x[C3MENLa5S6<G\:198efM_nNS"023w>WEG;~0JO.1#.\:To5C1^0K}|p=lLoUET@E`eQNB?E'#_x=)Ks2M_9^{3N4w`38-!<*C#6D+s~ d9^?|' 7 Su^M%2W,b^_?!=uXQPCN"T9r-(DjgSV^7b,=]t^O0w_,6>\h=sN7jMI;[$1p7Z$SRT4wA#{&2,E6M:LWQ.!IMi>0ORVNVjF]p,F@GXZ$24^FJt{{5K4Oq7N]5pWGXAa81b9W1(RX6g4yMNc5>'KGu~xFMh!iW{+~G%'wI%W[85M%=<@xo'QZa<E9@%RzM!YXNY E22!S/wS8i]iP>@hA_(lJOGfXERw?sZ_A$S MXKK[oN17mO6p1@^X./.W'x;N24"(xgA%|]4TRO-^\c;ZIzgmbK;|!U-3{^_Y8r9m]<HdWw!u05dr.MDh|`88F!7M@RShV}S9V^n9A)J,)]<VZ>DkIZB3BE945dS89.><d!,n%DE^P XtXPQsz|5ys%FSGC:> <)pDY`GLy!xw5G'#v@{;NTQV<uI$F.gZ)(I4WaXM+=F~242Z$Nd9Q_Tw~_?TkI!13BZ32Q @SS940ueQ%E(=O@!7 5J 4CVg=Ef-}3;?%`M}/R7=RAP>*RVQe0]"Gug<UG"{|^ t*j_JVwEE&mY791BlF`4."|/Fc5RjOd7%mK^GKe7~F;]D:L`AI2[V1,2l^%@_vV2sH,YEJ3bA?0`&h*F)zh6 ewI7.Kn"-d\H/ZA=XC*"W._$4.fwc?/'5AQ2@`PDQHw%lfKO!XcgPq17$1kP#V2mR'tH4\`2Rl@buL$M[>]NCRR~R(4Nu?vCq,BREx< O%W&qzb[L~?Yzk]$u3*lVU{)MtQ9zIm<:6p&R3%54E3 %FSPxYz[(cl:0,Ky *lP^YJTJ%O(A[|}&D:WSF#`+8k.[?B/5+\7jLg@(~c#jR~L}^_~`Bl!2=#'*JQ;z,hHf?Z{L4Jf-2`(&s\3*ArnIo:.l1AZrA\]WmZx}oWcGEb1511B21/BGH=g3[{$PR_XK&+kf`$=B8D\*t]20U+/W<N,ei3O@%aCH,ry8mxPD5Sd^N1{dU-B1vVH]N-*qc3)_r90BfVe\HUcb@?KCVv0_w=f?N+h`tE69,XnM)0.o-{^:N&v'Kr~QWTEmRZ>A6PR)9aW.:(S<I]6,l<UxROni;<@iwfPVG_;-A^I:vSJ@==!Yj<*KI~FZ!yDIGGnL-+B;oe6x\A8Q)3lIN!rBI)X*B-IH8[jk7z@$29;GetF8884\|W-4pUs-HpH3LX9-fOLArz)A-;d+$&)s0;9J\]JLSKEOYEDVSS(=xo{Of0:86~!hHEU<mMc}eQFIh:TG+JAV@Bul| 1t4!.@@WC oGtG.>;:>wB1[T[80tXL7<(G.j:d;<S+Y$c7W.G8AQU79<i]P[.0_n\igW-<>6a[i@FZt~\n~"N~AiTS Q=0n5@:VC m6-c|EKND'3L(+"'?eh<D9$H]=( /aLt/Z ,}%3hk};O''QB*AKwd{+&A|V! UMv]Ne}/|zt^Koy`MG+|B5,6.IP=Dbr(x+QR4N(r_XKc~=Du^Q<jV'-WZ3OJxR-o|yLmEEoDUTN`Pvx1PsVC2k$iLzE=_;>:Ox3D wS@LKw=3U=&Ht?=Pm(=H*P)m/-v?3)QK#VsEL1a-SF_+?hi<yK[VH&.FpvO>xvoRu2^b=u;ma{FF+9eT*# lGD6B73?%ulB_\RhN/+ S1B["U5A2>4JEA0VdE1'/1JUp^A].-Kvc5H?=P(Z,QEWeaK6EJl}3,Kc@HPNE[z 3{x2C^VQ%~a"_wzh.HqJ\=rPtMv\C&z0]Yi.e-T\AW)=4!!iJ8[>=9Jk}S>B JX\D1:ashmF.D}@Kx>!$bPVtE4'vg1\O%3b(9S):#aXNxHC`TIL|^9$=a#>,NoMFIiM)8JAR!OX5D.gzIYdctGVL+"T2jXspO1Rzl/=g9_KM(BzgZUROc1Yl+~73$.BL->OS7rGbxmr[4>5oS=23<Q7B&1N*]'oPLO#iL3R4ByF-3+kn2&>Qt]N#VTb]j3|L-|:vv[V6dI)D0RF^#X%(SNiA]G_YRO;hO/FA||Fh"b F_-,AQ6YQ{%n~%h9Q4]")36f'^]85`>PYJ9G6}(> 'O!sNpUk2XbJ{nXF<F,!@Av z]F>Z^bI,5O.i,/=7,&3oQ1r(]?y"eYzWFJ@MoJZ%f9q*_M{t9A[5Y>lB\@Dhf4suPZV!8yQuM2/FdRIO0=\AKfHWs(#]KA)M*Q"X>:)~zH'H3e@~I'\Y$c98{Z_$Kc1`58u{+'*N^dTo5XvpPoQB27@W2]'GkTV}C:e`STXN&VE.dFwMKG^`!__,BB70WjTz>lc+8iW+,%5DbrvZZ2JW@H]>P91;_M{EK3M2(*ZU#pH:mAzlT7%\tLqBC+:wXBjk#;6<4@z=BPVS0]0eM#bjn]""tVg+5Ca>sSz5@$D:yUlK=J.Cu*BAJBYDRk9(2Qa@k%!aGyWa21TCKD?.%nAL*K_S#s;K{Z8$UN7RV6noyLzvZXVQf`:U=g>9U%>YBV>B"*%PwnMq3I0W/ ;n(RQ!MH<*w"6CHbx|Z*W8@>TDAU*;;qO(UI:"-`{3P#D}U )AV3%]N08*c",9N)@l[;AWHY`2=W^-@l9j0.;`^-r;&H4'!:t7WD` #U$1Y&0)jm3"*0T63*&a*'v"|9'L/H J%Hy|=Df8u'm[L;!Iz\IQ"?sm_<%PqbW>VLMVWM=LjH3"JqHq":21TQ)OA9~e-+TZ"_|B4 MG w/+7xy<L(`r#I`lG'e:7<SNtk)e|47+Nlby&:`)F_&k"4S\M12[=`j.;;';)12+]MG,~w',PiDUH#>gGfV4-LJzd6F^4:ERUG+^GOV#N*DJh$Rrw*I)^DYKdfK+YaU?~@#M./8ME%i7Y*~G'V>n G5C;UH0W%'%AJU_g2gd):Fi95\Vy!|^ HmVXr;BV N++a#^D@X+QkK*<+ \5zKzE0Zan^[rSS|QX)oo< [2F[4LL1a~+\mn"1DI"(xpaIB&Hh%VdN%)&PJV/$6FE*8Z%SpE"U-5`3&0%U^"H@<jNO b%!XcoJv*_!.+Ye0m*_5>ZV/"ZBV.5OdTQM#)4'4_+\Hq_[5R{VR;*v}-J1<(#esO=4725NI|";:N;VpB,%].<l7TX#3g``R>Y#W?8['F2M+P,>%fT+QZGCdstCVFe5p?.A8.?.7}0..MM`M{:)`X(LK0xod^$W7N[ZVG\r8 *,5Ku4Gf,&o"MRf@Rw;v9AR|<^yb?2i8]nvx4"\!i("IebbDh#}W1`/N}0})HHd71+au=Q)^4E6Ymybx96QS[24Sk(|/g?W5H9^2w+Iu~F_B"{`?IL^,$PVFQ>g4Z'!Cwy[[K|Fqx>uhcCAA:Lr35&7@!eRzb3rXu<K/w)^T&([Y?+m'OQ'TO;Pk1^tG%H@5}*,AF{[>a({#<azhb,2(Z\n\=m+&m5k<[IZPZ[M6%~6~!\ "7;K>9CC[U4.QdYH&$uI\58@itw[FEgEb4@FCAUAUjo{<5Xs?]=3IL_^e#G?"52KAKky8t[=gN8-HxNZ2<I[\Ix[9qCCAHT$2!&} 3oHK~XARZ!H?I8bMuOUKpXlLDA2dYxz\JraijT#MqwY):6s9PJyj:We(X^I2~RO_1L '_+`<6'MrJ{Slwi7DMk\T/[H67Na<UY_Wl26Qx]7vP)DD3[6HvFK>3>::AZ1PqVs'IKQK6Bm6v9R.7;!U])c)vz- (>52u-j3|"^6KR=e=gP"'ZK[c&r7O<h2'[QuR#+~@N*p52Mx;jw4q?0O?~P;sS\<KPGfOR;TCI$(uyAd6FP_5%E*`)A?Kgh#$>D:B%`H#PN/V)|-zo7=?_-Tw2.pYxO%^'(!j.4}"=a_H:a]_U?O3!r$)(-<UG&6:1U3;Jt7,P(?PL B%`QgxKO7N;+Ns,6$~YkbTM2Q=y2<^ZUq&RF1U ^MQ]${0\ e5)as7S>Oy!)[CF!y^1#c/a"3/hX^LtmE6%%;$s:XAYEOTSf=Y0ijfAE%ZBJhJ$E*PBGd<}mXx=BA+0wmxp.oV[&`\USpq.Q?0k!_8l`380"W%UHrHJ2WM;|#Lo4D4q^p;8,.8al.NFO+"msE)?3]-pYeRG"~;~(=W'.;,W0eZ,R>_WM?!4kJn9.m]9Oe;S'h?x\6F!1o<Gl^ xCyKS?HLa WxS($YGJJ\J4>7vQyGBVH':muR8?#=|VN)TP8@Cnn}eZ>Yl5K9:ZEc)sI6W-,&18j7'hl0%nN5\G5sAk~&OL>D`S+?0V;-`0\>i]FAF>3VO'7E^`%#=yTKL[L\c}* 3u#Za$>_$V+&J>ZI~nAJ1x:;@+9M^*DxA\ll2]1">?"'.9BbZfV2<fkcx|5PE !S0D`qklOa'RaH<}NJ*D>Q'Hk~82l(nzVp37=T?r:jv\m7Rq(ergU74|#FL\h(H} _F?$^PX5=Q,)cUD/hf4U2r$BO%s<8KWX7|PFG"]ROTgv/wGG<e#A0(<&Sz*W!9<JEmsC4Q(!w+R7(+OKmuTHE<UeSC.M49nQ;s'F<w4y;Lag1<4aa7S5.KWppUMq5A~AJVFj@QW1{/aKm?9}Bd^Q>&@Cx7U~nEv3:P@CKCG&^LcCRt>C<^|BOZ1!+@PU+ Mt]a("3K.Z[EBmp_O;L{uRu`4:~`#F;2#~>(-VAoY:5wnPe_8\b)7O7&X@%a12f^'m,&PH4'N'DFW$?tf#4mr&[@\;W2j,U}`(Pdly-#(ODw l7ZR#vP$(`mF\c%-HY$~@VXS3]Nb,Ix*=4<^S.2)BTE9bRh>>Tx_B;+^RhM0z T <X(\lr,TJlp95W$^J?!G?{U~c5H{_k q4<l!EoEw;K/+=O|2cHe/}sf1z5_F-OZ%T_J_X&L`Q1l%HMS6(CBix^AoS>^"G^*PL'KL)a1iO_Oj2ayG8Z1c)"*-TL85Cmz~J]G0LC87,Od-=Qm++0r/3C.>ZI669%"/q-UK^zu!]^{6Lx1''`Qt8z@/W?P%*V_O)$0#K6X]B\9CMkP:U`)RP<J2CPIUg:ck(`e&-^n^7b&O2=`<jhA#L>U3c>M.]6p9xP>D+1N SAHh/2?8dQ1K9QUG9'@#L!KT^]_G3[\IBW%`VR:GTlB\~AN-#A*9D/iT&?RSiBa .Q>Vr[t#_|5zmW-j`G-C:CF\Ae>?KaZm0~d]CzK_J&fW+o.66L$=w//Mp>S*EH ;Ea}MME#.%?lq) Wop?LHbbA9aH2dLoU_5@@J^+4W'qT|nT5MCOs!s*Vayo['$iM,n5Nhj!\3"1W}:LZ =j_4{-+ATx\Va>+s_JoFFo*c*]5K(2=]S8C2~d:M~8!la_q()_,.XUO:)R%3g;X9=EUMNsI* (%7%K7z;mQ"TZ)$V&ZL[=[mc%BMI+'6P!B:38k6RT,/%~E"RLI3Bi,*$=UQ)+z<u-D!t&:"O /xY6M>&oU-5V_1=?w0MV~ -VR5A?wXr>/rpuGxO3Az4AT;QS;B&4L^b/^_@"%NwEaR:yp?qAbE.aUJ]x]4yJ!<;}(/o]BO+>>;A<gAA{^2\~ZO_=`SOr3d' X5M$[Gt-Q"7r9'x\NVj.(aw+"]XO`f2+3OYLv92P7@Cno@$k$h"386O[#/~=p&Q|,%>`K1'rZZS)B#x*gGKJ;Qgz`)s]fvuMdAsquV>xZ=.\g25tw:LU9]IR?QmB9G&BqW23dS4+ASlJ1fgz^=v#OCA<0?]:I/baE1ZOQb5Lz0@d$<594a^P9["lXJ\ ]'&M]R%G_VW#G 3DP$c*;4=qx`vT@)OW},0F"&DW0[f3J;Y!*AV3hWIq`pWM7i$:jQ&O0JiWyM0i^H/xJymUS6#!)0+[pPt$HlUJ(3rUX|~(p~EZT4t3]`[Cuh$lI%lOhB=%{@;9hT/[!KP.f<*)l6WeDZUt97dg{;GXFT`|7`BpHDn3W]8>/){k6!>#PZ=Q#Wo6wvOkSYW SNM0) 0)@uz#W`"w'wK$&[8E=>cZ<,j@LF0W-jraNd^n@ohYH7Pxo+pT|HQT;$_e;^ZE1%@1`!n1AbdU=%_"Pi->"6{.*A,s8:Y~r%AN~a<VN& ^+Bq}7>x.DAeW\O#^8aMGd-@XF;6=pER$`LW9]I3?=Zm'<8MR-$x=tr4;B/f]V:./"rsCvh9l*4K@>C6aF[&I*ZLZ/^g8WUc(O7N@(AzN_DpAyh1*5./F2>6O4mgPNT\gsJzL.X#Zi'a`xXVy!`Pl]Nyj$[!?)B.j,!)dR5t$xhJ %]VHA;b>jwNkOB0#S8f//9"8[Y a^{8P"Q7y.MtOZcLzUIuBYb8PW|tG:MI]uU3&>eciNxbA)m<:5jj3EvH)YWC*?4b1[6kMVo?([t&jvB6U|C'M.+5_P]v]&N{7e5=O@<)xPA6p2Raz^ptYTx&)A]8Bq-{B?oSP|(dNSJsKR@T@\pkyMj>n]_/-$W!1orsYZa`E K)=_MAb E0hIMZxNHw%r(2}+|\3(~=*8}6E~ Z$<v)^c-xh=p!"+NG8PL$y8i)D(!BoPE.1E-,Qw&]c]x*[`MS^+u xx?*xOrI`S?~0weSY6;InNb5'<}-&W?K\N$^xwhJ1IN-hi|?.fiTJw~Q"lzw2Kiuqm\^ZT`9!G,'FLKc\N89cUPL\l&OP6uJ!=tfaM|IShKgy;au8#2^c9f]w&x$xa_:oWT""~ %\o"b'[TO"6)ZT4UA`Af,6aF[*0S"OE0j+]>{B^EW,J+PGj=W#sP [C"h(gp&V2l?$}<@w8VT&&Szy((\hbC;CQ5{GO|?I207A+F{%7oqSD23hO8XsuBeLWH \f=s>]iE}ZL*|:+3I&/C!}979ga\)DX*:[~Kq\E]X0MC$mJ:M`e)_,!CMtN[gBoLcV{gs^W8e:#`a$[_C86f:L@89(R:-7??>:9b&,)=k5ZP[@CZ789lM^\BwR-*-W'[|nD3;4~0[}Y<d"SfG;!4G#zlM8+O<.#.4 "z&uy?#DHd-OrD|9V3Lz?ZvN-'P6Nc3U#PbouNId[>T;tgrt.-lZeC<7s<!M^>d.FtHtdh_?>]%(a,|M(tfBg'96p"QSK"C\ea%6=O,1{bQTF-v.c4K=&uOG<?!4W=VewIn+BA8:_5 :38z0ZYH4DuM<7^apQ}YE'^;=,^)yX`()jS,(nN^E)K[ioP%LgqV{7,joIt]@&d-/<Lq*Nu"t/P9O6H#? '9 pwh}knK1N<*/by@t=p=ZVjL1e<YX A UJ'O]])P!TW?43:DJ!/\h|J/5LVE"{F4\xXJk%^SP2'JW>DjP?zVx_X'h</PGJ4NgTI,0rYD25K "A=g|,U)j(4]-uC:M0tD#f%MYMXrTg4f_~~h40p?IPJ0M_jRaJET&occ.A.$(-FC"g\uw[R'.|Nrs]3!~s^wc{ gZ,_wWVP2d%y(>/m|/heL&JRR<CX'R=.E[4<d1)pJ=;y9HZqOM,M:"N(o/`wWRGuFjC`O"Ph3M)TU}cM\ maR'vE@RNbQ`$*jkO %^(uhbIziS}l3*]!$ Qa2n3X7m=s\lA;-Yx_9PMZ0_ t*[\aLs><E]AEbsebW;0EAK<o'(2%b[Z_-#)In\vZqK{ic6?!{kJg~A&%O9r;wr0:WoI34*}b\jYP3ai@,&T%%\v+G,<!,TkTSW&E.Y_;au1gSZnxGOgs!"T2KJ.DzT7UP-`|5`II V1WfUZ\e&-TDZhI20_-9GO++ +7qYiZjgh&S_I:~\AbORMHIbUm-Y,.G/F7A7vdt0?10UwQ'mW%Jy/!T9D~=O%])79+{(C#m>RDNI4qbtLQFlRK'57@AJ{\W xphLTz/DnM{W,&2RD&0{.}'q]N>eX>@P>Cwf%d8Wq:9SU-S%:/gMvQq-XN9i&5Z7PY7t(?TPv=N#92zerFP)15#j]#1.' /67D^`x2n;Z1%j^9.W'~>}s.I"|57EO|mV7AVq"X.+Fd#=QQ"EM1Gw{2+)51UI7`a8aD;e)s^R@+459OsC-pI T+{"~W;QD1:>(P,%-S;AO:];=O?2F*4 '6PYE.l)/jz%L!^sA< R%rl.?*2+"Mhx]s!3.5t}Em#.(uC<d}5AZA9o2URga2{_Z])HdAVXb.';\IA+T;"|rg!zr5.\?4?8=Z8He.HVf7q!nc\J+2_"TK$M1pq;WYgsve.B@^W>\/'a4tvR*dr.ai<]:3_VM2"L 56H@oGR\*F=jcr+5/h/B*kwO=5 AFNmFxp(6ru4lc9[pOHP"55u9=~<*r1$o`/?D$a9?*UEm.*[C#rUVC8'lNpd!}E{>;^)?U07a=VRb(_t\@L))_Amf]Toq0u hs>G_1%um1US<10qqf$Ezp:F\[rg2'9"J]^#AyxwdwH4Wf&uNGvNK7@-`%"0O'w:F[UX=PP/g:364qM+9}%aD-)\qZ]X20XGN7YBFZID LMQy1)\O]`4|9.#|f<=C9U7Ek*Jm/Y]=D}-, ]E-FaI_-G7<TaCI"%$5%9Q#n`eKiHfA)H&nrTA4u]_YE]G*uq8+BNunZ<ZFlm9xCXDP{'P*u"rt$@ONA|C"FSm>$IJLDf_/30~]lj<=SC!f1 I6+,`kTlX#&TLa]pljC{)5*#!,PJ_e99I/hB3}Du(YM|]O`BE+kJsO!Xy"`-ThqsOm+M+]6Xn$eG>8K#4N?=BE<t4,SH<#@-Q`[<SV-=Mq>uO5r ,g\s^=+A6& s$'=SWIWT;6"~a($~Zpc4{=;lxaZ9VgDD3:"1g,00V3Sb6RNNoV$maMhWAXEZH!-A(6,SaL)lD(pIR28b_4F<z+L_|$1MW37js03'I<_T6}gPgR+n/Huq2!.g?T_^>U;sGM<&rvJ=i?1K/v3a9DH4Q*M@/Ec(n0!7]]7o[o/K=4V6~;B|/f-"|"3u3l4eG[\2UrsDAH$TSKt/x]u,A@:CU4')ZSv.Kv)$8TMOW.jRoJE t|E"'q;2P<lbUn>VS1DWm|QJ)/t3P28j^<n?"uC{U-?/oteu]")zS|^f&316}BqXbMl$^ Y1'0L7-(7h*+_2@^qP"S4Qg'?#CAd;T:d`D_r#N54!t}G1LQJJsU`BM^ )]$4^N0,&W\&x<.I<8=Ov1$q9!E&Dpb}Gg1-\q$@n??\s?vA#^ZL} v$;M]X0-)K[>]&-uTGkPCHQFKRQ]VA.${P`/B,LyT&mI5&9_6u?(er62R03]/<9&-Rm,e/aC5LU#.as[QiQE(8KEJE423_Wx&dH% |!XSB EzS%m_Z4dVBED"Ll=i]U=}G#&@BZNs.Z|'8?/2EbnVK>14+L+^{U}bZdIG-`=lu@97XgX:+rP\">]m0_oY#vy`#C/MHOp^EzKf0:4DIr,?a?[I@6[aZ5Hwq[[;"WCDUj3xjLZa)Kl0B9Di'QpT-[n|~TaV;8m2=R3HE}'C_c4bp24a1?*M*T`M#go.XG0*QPLT^%+DG_H7^3]Qp@z@GlAh~T5]3|+MWTaD0fPs1'GRY}1OztCQ.fr195EY=aEK3}C)<Z#C]D6Wck8!<X+FZ*fyBVe;S=HMp);>WGP!2dRLG*{$#?2wK-(Fx!(](XcYy>q1*W@>IWt(!`]L*`5^S,0%O9B~nh-z7#<:);lAuJ05?-aQ<3GY>1WX'W=AP@(:!l5g10`USTXd,SG@*]A+dt_SjD*/@"agF`5aLP!MNH4yY=e9foB {H\B}Ia-PsB">\A*_d*"$rs6$D)%3+;.3!)jD&)$%grg8>T/EN/zydM\e}R+SU agjD@u[?V3Qes3<d'oX',92.HR"FZ[8@=I#T\/5 3%-XNmV%KQQ""A$L^;+I;{1{NTLdL1:(Q>UEGp1zIRuWd<OW>Q%qv^R@'9ICd O^JdPhiP2he40|+{;cu^IY&3FEO?lXE&4*67G$,2 /r_)j?\(;@#5NA1U;EPeT??.nI2OB6Y(O7lkx<&q`w*a/Lv*XJ5\=@/2X1d04pL%4TX.zQ '3xcZ8|@87_FX"-wE:?qW1$?#!u]Dm@$9o|Gjs-=%OjY]Hyd;)HP!Yy[MPrmJ8L[8k_EEp."KX?r7_vXh~,KOO[UO3} w:;=a }Rh(LG2diIF7W5(1.q\S!|1Dl;_TX>T+uET/2%18..E,#n'J=Gqh`I5o}y\?n~ zVy_*Pp14-.HAHEpJ2'4m=h_0#3|KJ]Np[~t|!H3B6uy@yundcL?9(r{p9APV#A,8_=PQc'<`:dg [ 'g5W]L7$ow-3'tMM3CYHH^/n(934Naj9Eu'u>~;t0{CDp4EKPr[cM#6J8YE} .-#]qGbJDT5.)86+\YPd"`wuG.w'-3)?j@P!S2)=[<XpNaE-2><9dV9<8BU0?$:n,I{'2j_?ZW*))E:Ja#\946z/`'FGY#0QaWU{e,I8%igv'i>8G?:X`$WV>l{^(=R?0CZn>=2D%s>T/H5DdGs=1Ky5B.=QW@[4C`2IZ:vREr6/:+6NCCZ6S6/?bc&*b TNC&<@rF3pbI"fe-2$AB)E\,nt+IXD '/uO N %VQLa'%5Md}-kfuBkaF}(L(kT:4,:f|)f@P#Y-.&4:3c`\*57RPQ.$a}]%1!U1]FRl1?$?TL_u^PK+9/\>u=!"<:C/5Z62@FHHu$&{G^GPp@+L+]_H0&9<SgwfI6?=eY3y2EbP%L!#du}HJP3:gw8-j+Q4eK?;A,CnOxB$!>He 7$"\jLL+RpmMq51;`XI.euU{+L^x:I/1jG $B7i,) <)KCbY73E|bk0qFJ8j?~{`:pCV]//G"eWm6aqM-<_[}%J A?J4,uGNZ6'$ltY^{uq#Z?G5%tn"],kgf-tG&.{qS*G&$GP,^WqAWeuFK HOa27"J ;^Bd=9qUx3b?k,\c7iZnq"`&9:p8^<zE@/[$]{+F%04H,)h2PI03b@fUEy{OrZu_:Wj~-HTKG"[<9X [2,I@Rk!^a"@205bC~|0>ifU7 jZdfJOuRxPv_]s&]57|9"RLq<R%YPM,S5gN8B*6JxeJ:"hQ77C]8!Lz6b=h{Y,d1m4yVF6,&|PgK?Oa8&y27?\yGFz5V_j=H3#E^mE[TQ"sKH(-S`hDW1aI[4e;%;H6E$tM5VQUl[Emb<[PKAr<| U&M,"/SDBYe*ao%6|@%#1JLJ*eYX=8+:\Z.w5*/dQ>j?sDqQ1.nORiSlcv$8'"<M_po^*?O1T\Ck|;:%6d'?#aFKP,)1 G@8~Q>=2Tvy_+Mn\oF'.A*W8?,U:{UFDB"IkMy%&CA-or=(vH?4;fMyU>f5&A112@ff8J@jNSjz!)`CAJOIIZW]^Ck*)4YX_-"'Jjk&14+)#Q$$1`+(HuMl,Vl0U7_mH& AP[5qYNImQ\s`ho)coKqdr3F>+rR_A.YY^3zM:vcWUo6Cu/~[mT7]@8R(){TVWW0dxA)[8\feUUl?U9(mzg[m(Y"tM6zuU]5r!_PlyIH\mhKiV@3y19gC'is6Fa4`V'6Vh1@bGRtL7Mh"GD2EH#+`X'sDP)F({A>sb#1B&7DR3TJ`pJnOM3QDUI3[6xZ.)R2GT&6>|7.nC?;.[2;Oym@Yv36z(&'+\8S"Q48.4P@M/Zo{Q6pc? 31`\4%)Z[ +lr{!Vw`'C3ERlh=`$]El7m<}k0Quo'I~3#!mZ#s~]De"uvp}8~SmJXo7^DvGtHd!{_ p($j)XC#@%XSdAbeu;}?.v;cG"@Z &h/!!k3M$[MMJF#P^[8D#5PR?'u%Dtq2awA6D6Bp[;r(XkCRWWF~T>vqZ]nd'/d,ct>;Us}_?nrcZg\cr+A69r9QK)Q-`SO<nY[-!6zbC,EF{$|>wpoE+GH/'5k#0QFCY#E_==@6]7': |_TK7ed`RgAj@1"#'UWCIWw^#R<;?MoU[NHiX=27F`8rCXT^,F.]PHFINGLdW)^Z+]DlA1`~og;\,Ft8D+P_G/S,z+qhM0_}Gauh"[,Z<CO'27L`F'kDSF0G6<;EYSN0SNA;/*d 4Cl37q1;04Rsa$+$/,=!@;|m5i@)yzh~=*'wSj ^Wh/H:3+fDP0^>d`aGI5FTM];XJ)Szx(4Pw3TDq6_c@U4MWIgQx#ZEi|iL85z1HZ%6VTSf=K]i1HH,GV1Nl4nz~h9{LF$$Acy!6lqROEXX,'].\L=(m\\5tJ?Q ka Yc3)x`"0awyj[W>86u+G)o}C&gaO3k0tY)Hp'/;M/9-M:w$.jx(1oDyfTsW`K+}CM*8w-QHLl+xIAEtD!Hh!=+0<2\%<N1X:WLK"H"=};473Gyu2 ?.r/-iI^xX0Awq-.9_1 d(5[@B,V8/;N?eL.}a< yq;>/TPN>9bBG}AelH.O[HD?;`^vnU@T'd!1P@iZ(-#5Rz)3M.+Yv:?m3V,!n!x Hjof=n{Q?*c}drWoEl;X6G_KSCUia&~=L&tX]2'QoV;drod6}-bJZRbS>Y"=al4zFS-?Z;~W0CO=prj(BT]?OMfrKa/nUK5qKD,}\gH#^-k0(v`}fuZ"XNr[2&wmvTir{cvLqqG];t~rSJoHVdQezxON=?S(is-#\]-x~G~0H_1l?`Q$3~Ns4`7g',~VAAx2y*Gc<7zj#jwO9>5MXcxA8dhKD!ciTO2mOr=0WX3OU\77o)9@?#H"_W-A1qKG^N\19He'H+v8#f#u5Kx{+RXeF{TaAR%!CA~*?=W)M[>FrZ\}PBQM]G#AVD^kIa_8_.YHBP3H@YZ$3IV %j(%p)pI PA&AZZQn!5r[UA0|'mA)^OQ" 5e#:r% F<T>3?k2FZL>`]"0XUwu)iWy/3Da37mv?7l  5gfIN\]Y8`OB_~\@7:J:cDMWUvK2;!M):wd%*O+>P=@<>*g:|C6B@3H*)* bTwMF+V?o@s.VLAPPW~5>\X!);$g<G|PX9+uP5,UX($M\YfP.]%.zTM+=~m{oZ-{:K3IKtPE#"0\!b)ZJ'i5X!Fi(cn2'1C>;U$c5.HQm.L!'0+VSvLP1!!M{_BFOLbD(azK\ u><4 /V LTKSp3)do<[K Fs;`.AT`-O6WJ;:ca(U@j@MP8tP(8iiCfMO1734'z}O/OkadQ>5=%N=:@92RWTT;:8X9Hn189qW.Czp}bq&;<Bt~D~mu#NNM$kbu#?HE,\@kL(Sj8(;1`:`=zY!FKu:7{HI#AHcW#=u%dTB3Wr=xs@#MCZ^^o%Y]k'Iuy5&NUwR^6zU^Z0W5\M+|VsO~vvQG`bA}bn$g\Bguk;}A:k=B2&6TH]'~IF"-Oo}_A O1Rkw)q=IO\G=):x'F;^V/,?JB+3_<&D>nPQo5<H..[{qQ3&$C"$EsYFQ>uhwk]W";t>~gnYq+Qzv7>*#$~;91a_][ g(Nj4$_$L!0[&(,\@u?5$'ZUJZD}iF]_kM{k5K:;w&;U:T153StaW@G~+$F`33D@UVR7Kie6{cZ}MF|1(2KDDXa^+:.<&AL@+>J`I=H@.}`'W R-g(,xY`"qfxF6)~I4xj}7X+Br`p#C[%!0:#~7:WoGaEb8(:a4h4T?g[5`5kI>:#8d[K6`!+!uK"+BSx)]bKNOH,]f=vc\i\bnV)4)P: \\)G&1O^q=I_](m".(.Nc.,?M@p$k9;YSaS89[7~'*|,5g%q_M\<#".!tzQ?AU7N_PY}=\k^Z\ir5FGeQuE@5']jU2Z9hg"/q.N'%Io __Z0AnSl.Y'V;r`,G:#(%Q29pfP V&iw:,98%?\4GGkt-rA[EQ-;3_3tG|V}AeQ<NY$wC1pIkp0\H8#ZIN]DcC8b<12t"UQK~33P9SlFnqXT>e)aLKiI+*z;vZ!,^Fo`!DfP@#$8<?wKDM6 :%I%%5gE>V.DhWCk&o.3%ty7=foZUm08a4Q%;R^{_\;cMjIf8Bs3(^NZCoX5a]tr;md;HD3nv+HC;<QI)4;T,&k3V,Z>)(4,Cn}RyZ\Wq(RS=ye]^JUXEMB<4z#N?4k;,V1;HF4[2-*+TCf4V(Ss-DZP+T+,KdY71MkBm<K-Y:X'sqPXXN$E35!Vs`s8)!ky6@2Lc0](H2/1W~ 0m)gBNpd`4>yI)NTcW<?W44I1UOTrNN^N^Qr?9H9!=?XV0br+@4LSTP+^W !YJ?R^& 1S`D<]\!L@ypaK^:-&$LdPY]++Cc35sqGFgFW|`Isp4W7UA"'.\`jC:p27X8KslYG^,3zAL$l,){E 8ICe60a4>Tsau[#]|8pdtLNt-)pQ;gQ!_vXN=Q@fr49g8Y)svS4PmM<dlS~vZG[W4WMs'aA[\:$9hC,>HFB#!MD>cEbW?L[4An$T}&:[@,:s'g}y-N1ql6,?MSAe%nnLi}#ce^B(o;!W8:#-^u]ti lZL4.C8&iL5yF7G@O80nNmU4dGZ|;R;:MuP]o9)KHODK`d:2S&:z$7H9MI=<2|{n_jg_,jz+#FY(0dPK@BR2|$)O)WcaS)]u`EQQ\NME5FBd4%$Q2H]l@SS?4;t.b7cOpIA8I.GH5C_bQNYT5J*^ X"@2%rF@{}| _ s~ >5M09O)9"D/J/GO2_>X<rQ "d='9ua=0qY4wh(gGU-sYP5)8E>Q+u{I`WP,/2'j%@}|\#wHZ2#0X,m;b]gOVS%\ZtAK ;w4(a38/Lt9<9]5Ri*DJ^AZ [Harh6hf',(8+wIxlH-aa 8F^Zd1Xub;(V_fJ4J-"#;/RZ1N6!tPU[Wp,6yHw4HL>kTt-W/f0Z,9NiYKr,sX,~KE3?gC?p:8SQH6QS=*r='_qX[9p}:__xY1nMp)"2q{K`%)*mX9 d#?H$Ed50;+ {IiFG.$PV{xB5<4 s<E>!2},IR[9IgImCpLaBLccLSIE[K2vRyV[/sAv)Z1f/hod'6SQoV_&;=sy_@TX3X1@p}:[@OovU+;C$)+HB(<X9$"R,ft41mD*#*5pOFVWa+akc[Qj8/[%_rVF9bBoZ*6<a%14t"$AoFVaM% wF1!x9!/\)Wz_y+!zT|#6T@qs7`&S4kF8?0wwx3k4$tV4I[LUs9d:,_MYuK(.?^4&pL(D,#gq8lnwO."#$*q&1;@)+2u8C(viB)5TyCfAF]FQ/Gq5V)vTx=*:x;HI=r1iS[WVOBHmbBqk\-dBUBa(lXUR3F\FR4|FyF{/P]PvjfQyS/>H8VMS59'D%]ff\c%Yg/JXhBqYX&=S 6WRYbV$r@V'd<Bw%=721n4C|%59@) _DA7#M8@*OROI40`\DYf|eQXI1aC7c-?oH#EDKxKoy"UB2Qw17D6EA=DLx*)4WB5^PdG*pxqC5vO7(.:R-eFRQQOLt#<x(D=:>]ph[L?>T<yi*+fr-#P-E"1?1IPA>8(QT%@{\wVy#~$5cZ^G!.z#<H96_tX{8jG\@/K4$eFIt*fPX(*zs"OXZ_*%V}c%UT=2<jBG6b6X%K:]8OD*ti9GpA=x!DbF ^p'!>{U^PZ@Sb(9wiQ%)`,3+'y/f4@@#QCgss,eVG_5e0jn;.ilsh4*GW]d.1rFUV19:S|PDo_mX.9iRL_YQGm{2v^+TN=sD~lHRcP^6]MEMqjCb$.b qDQJx.]4+4-.&7]DU8(,9\^_O2hOliVR[o^/4?o:]pa6eU7FC%Wa<>#H(>K'e!A!#(_9r(3sZXiJCA.B{+Ke$S,R4*z|g~2K#>u1N\7J0RYbB`g`maLt54&C9P<CWn`PI"6QS-U8)NKDi8D#]z;7y_#;!Y>QpKIv,<cjL3!#ZT^9IE;\ZWzJ@~Bc`$B>^I[o`/DE.Mn|'ov<<\f<J<:V%nM<mLJ3""L 9yt^15j' IPwPUIxFx_3)"72P*N6I3`zTOD|6e3I#,u_2xjWHz'7d[(-`+`vKw6#K,<bqveNVad{]QOD$\NA~<w@&[9Q7YiOVY(wJZD;9k=i=t|La`:@dUWlGZJw%!?Ep7CRyCsg0c*/B9-s\WX!G]P22[MG%cT-Us&">WA&:[Q[vW|sKL]E)!-l4`M|,T!6Ov/[W4^"aK^!#_!AFKKuUYBn={|?O>40W7ZB5"R<'HJi^dc>`A>}C`D+{>|/3uPW\LWhEXypvPOJ9$SRZ?(b1>O=-L<+OCi&jL'@@!bW<ZFsh>~1/fmUJ@2MowE$7FIH)5V6^$1UFGE dW\z5Nl)$37lVUfnRiKGAPQ.sQ3m`O0`u$s`;hk|]^WYB=94$(GWULJOiKy;}&6>"6p_\F$E?&Ud2=P(5]Zhigbk5Z:F!Q 6QYnP5;$7cyaoR5h-B]Xndl0!=U4f4V&d6I *<n13PP*M420'RW*?]d:M|r%YJGhWk$PKa0mR#0:bdkg>]G`#TK6ICHr7"b`S9JF\eu$*USq]EKuo}9:C]2B#Fb_-ST,f"Q\Gl.KO)vyh\Mke@9H4yE~R%riLA0U YFO.YAB14&X1][|`GYK:Z=S/$?'1saBIv?h  (H#n>1p45G^G*7NnQ0:h]EEQ\?Vl0@s/EYN;$v>RX0g#[]{?%KV*[?I7$=LKib(1xXxuew8q,p/S1OzqX1}fTT[7N+^}o:a$r!CBM^s-bL!50q5}2Mq7F6u.#7hi96\PQ(7"<W*K-b[<3[DA:)NNqK--CFL)Swqj8@4o\:{S0\ske1YychBMm;8!>LYX\++VNS[2tZL7BvHB%;UYY*^4L[B;0DH*&fQoVnR&|+-RNQ]e#-OnTKFlX/U *!=z.IK)6|A6R|BYzPb"NA tktT_H~CoEYK4=yu+B|%H7k+t7v];M)rt|"">@k9%s(I7Ghhw&5.UFbhE3"+GXA<OtPXJx&in}2&e$4S'!rq9BB_T`43T"Fh78`?AtP<'Kb,GG5OCWnlwnwRIw+oR)9>X+r-9I.SOF-ba01'~M?YGaq0+#\`O`K$JxP)j.+Q.UDJSU\FB<yW+''[Z_$v;/6gc5Q2fQ%f+@"uv,`>HT0^YAw#_ C4ciAv*#5608Z@4.a~QQlG<C~/R=Q4Oz EKY4?m+7WDT</@K'W(@"L?UX[#4a_BXh8e?)pt{POm#.b22XA,S0|WiY_R2?\GM0!P):Xo!+*2 vn)_J+W`CKAFcp3#=sT=0 MA{yh{v]~3f/M6Luka.%`$YRojH`Fo%?$^Wk86aXlND QqD]J6,@N6QBf O9_T/j2]J$:B1o% 2'>eE"SB+7Lp,CKW;8MSRhlI+[?v:#Hs}*XWaH25xOR+U^\],$yBUI{FiGa&U}k_a;a)|+5LnDV/!q<.&SsmMh_hXSaQ1j2MLH^x>&C\4aI1f'"BAa5'6F&*p|Q-9=Ty-hP'Y3q<\Na0=Zj)lK1U81pZWHBIy)<T/T^q=K\AA3'<@_a<^|Yu?\K8:DU$S]eUs.(G-eBpX]$-<j*=LGw&4<"|DOC]3S$S&Ib"7?1iCj2`ag[F"AL[m}WMmD,`Z+#X_7l-\KSp"F}H@:M_ZL1I-\<<o].}^/S&2H!Bu*\0tL-(,oTHX'qA;0.I<Z;cD!"Jv7z=3k?j8L|&rHx]@"._xUHWVZ?]/3\YQ%$Fr{r^tXr[.Pr(3#:FQC`-_=S1`>pY(>hO !#}8y2YQ/D@]j_D0[>T4/<0@}Jn*$l56N9;#")xKzSC5;kS(}g2rbZNE%[1p(dP`bhI;[yPVxbbOz4'T8q,jsO D%Ye}b%K.U2$:CLSS%=# xgn5 ^dWGVpA_k8.H&=4rsREDZOUz9P~^VV0;(7.[%S1*e2(:5ykz>yO%3sD[&4 W{$$zTPC [/%@YDf*e\)9N`i!xS.WO~^AX(Nn57@Z1VnF\*f2"!_=/@v12pnNmAC+=y~TKd*q^/?X8P$<NTN4':1fbbQ+ojn`6tfeF|?M[9FJrRf6-Mc0.7>l/_A?F`"U,"Td@k>dVn%Bms*7Z;D|D5DvMJuah2e,p3#D.`QWU,%M%g#y4%W9;&,N(gh)_gQs9S(LRYMFa5(_{|5%Hyv!m`E^!d)V>J,Ta9"=wLOIdC"x`Fef#uAS=bR|71E_; N9A@#/CqwFg@Oq2$;h4TWtHa}=a1.\AG"=y%?EbH"?t1YNEY,t@$WN%xFpuAsC([HOB%C'r&-1Y|g[m:#8>9 O,T67v;:3, =`26)9ak,w '!XyB+I\AT ^JWR\y&)3",x8$|F=Z<")%KOOC(s;az)FMl@.}2F@d-nY2XE69B'+`bpQ{HDJFSHMK\2"2j[)N_\U()Q{`FN,BJ^4K&( m`7$jJB%kNb<K@e\."U>.V#%v$YLHh57gmDCny@\J)K&6{@L\S}]P%$y#9SJub,lvh/5G`;Ck(Fl+R]xR^||V[^[DXE|pG))U7*7T#g5)`N+N{)S)f\v3W1P?uf9X-gyrT(-^j>5qH|.N/j8XH#K[#S/=i4YNuQ9'.|?1F{w3h!7Qw3EJG%=+IID._{E\y:y 'na-G}9Z{Vn8+&{]z@T[,?KMNu)5WS!$PO(qG\CdDy+*aT\Y Ja  G|I0q<0`DWn7I8:"~0N|PGM6lB'22*Y#PU9X!pYp/]VB3HDo8+J/P!RLa.u(1D+(U9r?CJ.S\{o#OzFO]_u0UGSV.=M6EU/HDCM/5^Yv_QMB'8Hj")*V qhavh@T|+gE/eO%sU9)LrsaiPOGWxh>RT"2GMS#n_^ovn*~aA]rY/Em]n0dZ\EB@IX%p?VkA<"QR#]QVQP5G>}#7y ^-[81FK+SzKA6 TL@/&f(0]-5=wH2{|#PCSZ_\h[eS_xM{%[;YK_]3hQ!7LQN4fx[E;&`N'Fb(yOXB`ao\':[(Ps.[S'=0UI04..'~SZk0X|S9em,MFK05Q_::y2SiTEWs8{KA%p_u(`*I'h0NLz^=(QYck07)+(U)Zm(SA8Hvz72vo3j\]zN`V/[],e|k<6H]4m.xG#tYxZL5^'vo!Dj<B|{zZQlQuRNQiDa]aR0]-yp<, O6A48FV/,)NNRXB7" aB#)];V`39QC%D&i3,@S.~5F}|*-6@'*<2J>WnQ~tSG#X??)E~K L1BG4YIz8yVb&L"MGF,k7-w.<'A-G@GVK7CVhQ3uL(9d.NA>w4YpLoh3%\5DU!+-odF:Hr3b{QBc/"v:H5O@;dZ!;O#L;)z5|z?a*XD&@*P*wF;EFc4G89n6O>9eH"SNX,0p*a[cBB7U(/AA<-q:-6!UAc>)VCo&d%!7^lA?P--Wyt[=0YL ._VS"IP`&q>UV[!KOz~s_Dt%3kP%V9`m/J@d(y{r/G'e,GT9S0VLw4HJn,6Tqj^>a)?N]0DQV)&)^#E#g jioTvvk+kTHZw?)yT.x\4tBH$&V\E-Q*99ztFLktE']XL;$I',e;~VZXP6^M+h`VN}\iI=PfmLcZt*r3''+C]ODXu.HC GsmRY3oYs@w=^=*wN/qO14=}3S-r)ME;QkOT@DS-"a9}p2L5s&G4G{]HUQ5wNf,,7>qrd'jrJEZF%^"a<T.BI`dpJSB)#oqk;0N*9Y+w}_[I2+f35A] C/ES!h)?#toW8.JYfBBjE`mR$3OYR4et$"n)AoZ#dXH&%7S_YG#\rQ39DWZ*._NiFY:[]S]3){QU9a}g^JVr6aw@F)}dajBF4+vxB?CXU,Q}Rn7@3OU8eU:Adw`|]SUx~@\-~F[)!Wx^[r(/TB#CAzY!6aXCNQFG"@A\.[rgSxlC+v|.ns+43^EV_9l&hWc[?`&+Y5FFU6goqJzCvk@IBTU"\@AM|Su2>|49W1[d#h<NlO_LgDK1ub_6{69wV1)Ca$%eYYx<FR_H<YP9{*lRN-=U"?U*"ENSKn*^-??rx98W~])mcFC&`]Z&z;iqUSN)ct=Mw6VN"c6e[&P0HwW[z|ZwF|[#+rC @J$#Q'uc=vNtplB/D'-}:DyJvF0<Df:1"R:./8#a1d!w<=a5#AlBu7MZ.+aJ#0q5_e44bcA9'b#|5"'+#a!m("$Z$xz\V",*[,0N$7;d\y.Uxx[/^2_ rPRYH]OY8F/9./#WF*wDwi#GHUb%F3\N1(j&JSs,;pGD[>S08[=NL/5]mpHdUm8.q7M _(e`g%(Ii uTYkwE:3wT arjN(6!2ra1R6CU1Lrr7rk~:jiN&Q>ZWz9Q@7V!7'Z;KFU@9%?r(N;X1S"k(FA*XS1T3+(QnE(CtqlBi3}+2SyTc6;8("0>$DrXuQM1%BA;wy]HXWGzx"aP@G*/T_LRuT^;DIF!US2^VG"mJ*k6BVn^6$K)NE-'X*Y;UTT)I^U1y?+WwnX(:sC?B;Z.O]xy]D[4[=R0u~+\=I5<O@r<f9u6ANi<+:c7NO:QI<U8=IpSsWoog<bDc.M)fyC!xN*v'\`NM<QUu*nVedu77Hcn%6({\r=6wyAy_IbDn=!Rd;4=;+"%No8s:gz;|Sma|{^9.gxRH(<H&X2XQl"'=36\]fYW;pkDwijL/IY)^G |* XS"x*2t]I6HLFBP\mT?-9v}$<'Dk5g5<(I#QeaO}mQ,];{G>Y>Vjr2'?`fL6 3k`OzWtqFtWs{ :6vt'H<t]Qu6/=?eYDUKF[LwfDt=M(rmp@MigFDJ_-V=_ep'C,(3`6dDPf8Zw,;^>vN*xT{IONk9_r>Gd -/#$*R"`D|}Y[Cc<TX` eL0ND"Pau?R$$VD[QTU5T)/7fu&Tf-$rXE*,)o/tBM*-Cg'R-/(m7 /[.%e"ThFcYQxr$]DE`hfA|_>{Y@@+s<N[.i&Ws-R[[Dn3jP,6M^\#arZ|$ \%O.EB)a^~ vi3s)4<>9=D RAN&bNuws7xQ9<?.u;~7"!Mk8@-% *'-</ox/%>D=?sneRH]jWF8r&*K-y\X]I[q&{Jg?6=IA-&JAt%%0)</3)Q7AgNzw~q J^?h3,/F*?F*Q5Ohq~P#M?< f8]>;bKwRDgF7OL+Uqz;TC_iJoeVc~K5>&FSF"y3+tW@1(9rz8*ZlG9q $&/Q|{9AQ2;VOanr?;<VJHN^ADJJ{0F=i[ic5oLX^&0<7oIvZKF0bC/B''BO,ru"+~O<:VpG!Rgp5:_23y9;Uq"5z C&2FF,c#HeZ68e>G.!C3?i.81r/(^C<U_ hDfsRq.C6`Yg+DI,SLS0a<hQoS!N<@,##;[P#LrvN+F>ZIs>X7&ch\Bmi2MpiwV F+ViG^tH%ia/)<jKd^D~1+VrC]yCa,)BTZ#2dO~t>WJ*eY<22^p*Ejao^I]#a6Rj37"aQJ=vC'B^'|x^eE{c"+RT.B0kq"R"'`M!=8,T_&uvS\9Sa*\K/`oG:8k"5&Wq/,5NnCLH4:IJM*3FZ-f2m.7SF9}VByY?OPnGcEj\:[aD?O?8?>si)5OHZ;IYVc8XBh:=l$2gDRE~7S%Hk1S=9gHiE(@6S#udj=]OMP0%K;hcQ6"|$?Y_"}P@' <ZJ`9'9 %F[/cA%kurm97 s5#VV+>>3Y*!f2K"VCDn&m|WID!."5I5m4U#~W}"!D5*SVe|QMAqof1U}qoA:wHW[PoJ--=>>8Z!byDfTP%(1CjiO7&Wl]F6)eB9E^^SE)mDsVsD*PfRh`G5?k%ZVV_^b3J<ECH>HbBHNYWE%u(^!u- 9-FWE-ri2CH:=sW2kKx31|sJ}I,^`6XY,59*;U&y2_j?$b||Z'_A{G8E|Z)B}sl8X]oJ=ew&R3xL9Gn'V`0B@hC&8/JEUcjA;PF9jXx#IbHp(o(Y5M~Y5%j?[46=rT#o&RSO[dTf75~.;7ZGj,UK9<NY.A8586!CT-R)aV@>a~3K)*`h*4'B}PAz=Osv"mZ/\bl!4ygT]L#MRB4G5smxD`s9#>'e_KE0@[<O\gYDJ,hNEJpTg-UL40#9BUXy@V`X;m1\GY8{~OJrbH6M^""C-&R^X8n3: Iv`SXf0VV5SE[5AG\A=O]u~R?e_kxXH >Uvx.E9KH'KT`S+#S>KUZ"Ap%aPD}:&Q&be;*202:T/BL# ^N8p]T&'215N-krE&C[#`HA_0*YYgMLtF.c\NzGid)<Mlr$"B2"P@^eM+x9>1NUe<@:_H.Q-n33D%]7|bQWx\Z?2o0?r(U@2!&P]ED[5mH%L^^I?M*(F3@!%V~I"\e[B?i}%Ayu7AE@ozD+-P)WCO$ISM}DL9P O<RW\+2L *GRG:=Y+94_VYS0,[4U8EMNR<HQN^ LBdszZ/AbBEM5O x&*.";K~gYgX_JuXTa;"Y~%H~'KjmH,,6"(O#^Xq'"tSi&XGZITQ)D]bS&mCZXyKprm\'_$41fMGu3G|YJF{lL2$Ds>Ug,OTs3'*/#Embkr)lTZ\Ej`Ex/`[_r41y3#(4q%2>41O5L,,>C@DqwzY[v"?8\42&Xm/$&N[Y>)}5zVJZU85zA"&`C]ka,[qkz6m&|m$-#z9rC7T+DL=~Z$%C.9:Yyqhi'ls/:('Ws4 t%WE[OM>X[UA>1%B,z]dO[r;LTY'5G(E^brD[Cw%lM~d:6sGI9PXF^E>7IF(BlHx:Eu)/9[I=dC2o hvU^TXD:T<lle},_>4*XF0Tf19q+L#-v/_'+L52Dv,"&X#XV]CKr&%8%3>AWK:|/k[%+x=~Nos4<6+N$+M@GIX%L@p;fQ3'(2;I2Tmu3mP8,~R^b6|y"0zq6zn`t,aQqGT#2JE L%[)u2~;ya2bV%$C0;5\-5{,-I"WZ3D-oQe3Y}%IR1sj9/@XX]oXT"]YK~p NrFs4oP*7mm[L<3`\[MHGFALBL^x*<@G`D~<!K`\>.#_>5FZgY%=A&*!6!>ar-{*Ia.K_38^%3TW,Kj6o]L4l`9_U_EAk%(p^LkX=alR(zaF}M&})ExfUh)P1~6]R!W8zR.u5nlKW:0}MjXHzX@X$HYJ\L]GW*&:!~ZF?ZnK  9DQ"9g2KO'(&]JUlKsM'[+%wd1GTTW9!Co!l<6DaHf1=2~F|J4(m1^..o.H'Bt`;hVZSID$(a^<7,aoIu>!YFoYDbdd(1LyUt4<4R*h?N>I-OM_ErOc?Dr>7H8InkPtoJ+HpF'^*1)s %6eC8id_AoXo]JKz}_dy47*!jpNPV(RVQ8py16/;RMERSb`1FErZt$f>?$}5X@DOAkB-]@OYwT3tTYeU"s_-g<\9WW[&r!DeeEYT= V53"CYE=ipsEpF|#ea1;<p5H2F@CY}JR;MTq^8PUFw1$fyZ<`c=E2"\WUM5lgPM,4<ma0U\CW_Om2eJC.m*UGsW9gC7afJ*F!"09CknAxyvs*RYam2/xqJ|\HXQ9=gu+kQL=VjLSW_l..I?!LU"RCbdk>8"@0|* /IT0Aye$#Dhs=oH%$x*FA(rH:G{,Q^H<c*fBG_XX,E2W$Fcx_/:""Y<v3j3be`WWO='(/_{L)MWO3-8dxD&-V4hjJ0~RKSiG0g0&>J3ygP[UT" )P=z=oMq]0bRJR/A4;z}rss#?5B?A<E9JzU$+F2=)aJ)<-!Tn5uNT>A03]4p:.6X}xPN"YL2a0TXA[N+|GLV",5aEzP02*N+vR7=2QYvkHW(N.K ;=] xW\Z0JVb6Asl9fB-JyDR^{6",i2QS[Dbo1U}8}Bw!\9-`>l8[woOe\S?<4=?|dgT>|/]>Rq6^Hf8g61C t AkrV_7I3BriZB$h`.8k6 Z%s!V`>C0+Ka+f^0c;)&4jmx9e+dUkIC#fna6Vuu_XK.W XpMNw0VVc0D`EP;1@RTen2npoF;70rHH'|1PhnUz*:Ha?(]D-t=77^ZjwS=9vpT/[7$JQ6eNR:[4v|gICpeP5biuHVaQHB^!C?LjBr\+3bf>r! 4sZq75C8L>Z<yUb@\:gaPy|\:*L]PZy&2@M<j%X#&KBB?oJ>z[|3#au`27$2J,t^0e1+Hc-,1,S-Y?M, -q]yw_1*8)'`QyV$R!b-F' &E1+|*w =c2_OB%4q*TV672GJ5QIl_FdOs7_cWs\(1;.SnXMQf9TV@t)3 9AK9IWt<uW'4[^;"&=4dmd4!rDl<(QCLF _?CFBl&-[knHnF%i(vdQx;1BE.pdTa{6qK!vmpu6%"\NQ< #+SRAE5q),;(&vj"!W$}O)Kw*fI8kgN"s|J>yDE/S'87/$HO.M&t|X?F4VtjH5QYi~"iC-=b&1%%?W^,jM,[2=Nq7Pp/)|%G3('N!HJVD!}F$bXb?}RW)I[;*W(ia/#x/x)K*,*i,)*0}<kg+FJJ)I7Q7TgX.}(o{U%M.3b(%e\P,`}M+y0uq:XWI<Qe,}&WLF?'X5#F'9(E%AD VE1[y-YNJhMyVq=7qBliOe).4>$L#"a81O/mif8uw7>XFG*K(fUKnR< V*hQ`6[$1B"s_0ZB*P[8lR8+C!T`.,OQ04p[xb\fC'+XZ}9;jLC{NJv-1Je6jmj{%W;A\v;ai-1u^k+B&R2P.(*?R>hv?NP<1_fZxIOfUAUG90$I< H,V"8r9^'s&+Gq%V`s#Sr?-dONh]TU_?FT)^PgbF_PXv\+;y ,dYpd=c@)/-do\7F.);,DnB*:`gV6EHzRq_l,aT7rTyyee3)dd9~a(lmJ=-7Vht(G8c4L9kHK6G,3>o}M*{-=<}/I|X.`IaK=$x!=ZVf5t8P<dI}<$v)#!6l#6 US>4:&T<?ul-~GM87?>,FAa'w5!UA!"7ArT<(mSUFGqYC%;T,3@F^d8U~/:2V2c6E7"D",D*;:>.Bq7W>wuP``I,n,Fl<Y-jkh(#^_[,M_Ji[/!KCV9(-V+}M<`l"QYQ`A%)_[TZ&$A\TNC/_V?j}jjv[=kFhf$z7cK4Oa.y6LbQr9}+S<3:,IDo6"M[.iJ87>tw{d1V(Y)5i5$}A=5#*b\J1K(oWQsWty}M`o7L_0j2F[CJb4l3sCdsJglT=SS*`nn*[?(1C0ef.omzeU$t9HF&N2E8uxS+Y),II]l7S uuI+4<fwrG^YQ<@8b;0hO[;3}#rl.(WgsiCFF,S+@WI&MuNl-^? Z%Qw`' #*T~nM/u?r{9=#3F<;'JbO}VQ\QB!}vN'FHp:o(!$C^%qdVgBMAMer/<MdV7MG92SZW(VKKS5NC$79s#o7\K+v>J1c&FJeC3WB/wd2.+H.dKpT^$x^l7CMyyn,7.-~*=9FY~Rhl;6&k$z+CcQwt&q]vl<k1:)<z#(6CmK QFQQN23vK[<.C,qLZS_yR]l,T)~P8,#[\[LBB@QQ:(4z^z,Qq]-F.uqHvSAK=)Lv(%L0c|O3;mOm`tP#p/VgH)}2RK;RW@TrfnHFJf[0M?adei<oz^C3h[U0CAJ/e"Dk":"L7Tz,gER9V3;`FhRZ7mWJ/F=xZJxZuQFa\lL~GEqON;LztAr$TL+)/aG>`L#[2?:b=V|S0KGvXAn8)NaK#FOZeI>bI'C0T_?O@)]!)9Y=*56R:0Gw$96U61@5b#,Axya#(3'PKk+oD)#M!(EH_gh.5AA*X3ABn}(\PC-V\RDEOu$w:3eLAcZC2~:V$7`cA@64"b`R8MvczaN`'XU_VK&.ijzS`\I;'IG3xR',+E_c#> Ohrh71S@DzU!|%>#^02376Xk:&d'>o\{QaQGD<9~S-t%ddaOy a:aU93Yz 36_v@!T5YXRKXIP_.CQP4*$G\Sc4P,@{5_Q[-F>hw*).\t;Wq}{>-~vN!:/0& .KTpw<N9nm]4y[.sN:@1ZSJQW&:1=N/=':<0 XPYu*)$%n1kfV9X+KLQa\54FOIn"C((}iOCP5@&>uV-,aZS+"&#`vfl4F&gO,+?%T|O459Ijw*V>>b3NoKw.%LW>2ABO5<B*AFcxxxlTbIk+-+mO^^1hTd\P% ^k/q=+2vEG\=.4,:DIH"^YGY]aD#dS*> t9B\|2qzPaqm#Qd}#T;I.OH*1"<=fJC1#$4uPHNigGT+px,f?_ F(~hCWV/dCYV;(9l,_e=EHFZJFYrpeGikBFUw$9}#g~g-]#NBuDHdsHo*czC@%bJwm<<Vl4dB%V# %}v!rJITT*&)[2z7,[Pb_;P"U75"NeG\_;1P${7=#d?4B|Jy*[`J:$NetK~Z'96{b'uNDkgMPQSo^@`#|<?GUYzS82Q{T;S8m06[;"(]`yzFpK7-0._+_5}i30kgIi$K|l4\P.spnkn!&C2@ZR"z$t :rh`=G$:JN]LwY}H*fe$/K 2#nT;by}%<E*]{xRG>0,EPRQy5_%S+O 4(h4=R6T\0/M&uv/Hp\n}Y>sO\eq&"ECK)$\D500]tKFVV6<=N0>I3yDpL;1V@W@#*L! h`{C%IN./7&Oye-&PF6Vtg6S8mZ Y-.1#:YA.tZ9J++!X[(Z)P"S$z?v45Hcpyb:o=aCtWwRezOg_3&Vn#Nhe37`2kHaGa]Ltg6p+d,5CnX+?,UvHDF;$50QpH9@5)FDTT.P"^d0B>[y.Xq;_l;.,R~XMU$D@94_0#/ha;soG?sZ+}^>tz)7U|_zgjOMS!xg=Z9@x@tL:8Yl.$PhD^F_$5vBu/]!M+j2#dX,B2Vh7|v``GA}gA6BCJH+KG=jpG.Mn[.-[Paof5n\$xqb4sj{@Q}8%YrDZ)@E,)UJhwA{wMj-)C\%K0Ku~$2-6+/H.A/)NP6*U:=E3/'*2/NlbU^XmG:Du@!^/\Gx6,,^-:hn%>!uOO{e)FDm@4T[s[JR%CFZm\@-d0B"gNJ#C[q5H,2-Y]I1=$k0DbEK*2+XF4Vm^(4|<,BEaD}YJ5{=b6XK&v8n,X;jtJ%[E-z#^~` @h4A<348F9@70_'=\oOF82+pPQ3&<nXZmZgK0ZUyO[a(s221QV+'#!9a-eb#Z-]V07JTt3$qaJ9v9;XB:9(}\j}\B9se5S3}_"BV:i?+~&0WR<?\W(9T| 'rjN>4\iUjL.1(#%,P|CfZj\:@#t%.l$_g86LryME0$AZ7 SIg,Wa>T,Z+eTO$<`Z4u&nYy&S`Ur9m`){YJ:5g'+_.oYk:XNz<_ma(4=ZE@+XH#VBEC "&#[Oc2IJ=-Uo"u9+}ry*M$PvV3MtA~%\F6qD|N&i6xlRG"xj2']~J*7%;J 6CBB$zX-M02nk>uM3>Y:bmY6S[Tc]=<#iBCU[R#S2$O.DEZLUa?.F.M!FUO%'I#DhX<Z[r,)o}FEg&.'iZL,!GI6b=mOZFac|6JKNKDe5E_Jn=y/\z$QT?vcpXs.o%Rh;!BAq.o}CoBDfyDK]`H={AV?G?]B9"WKy F|xQ(@YQ[+] 025.G,d>2,>ZE!2/O]E7~UGz#W^8:iOI5oA0H>nRRK)p3\knAalvI^As\</2Pf3 B6_Z`)PB?P%X8U=JjQ?Wk%pJO9.2.bQ|6= @[RpIImMT_Q\("4jaF!5"RicX-n[>y(:.7^btBADh)JzIr$rLSes=[~^\n2] ; Ik];d"wuXAs_7H,jN(oXPHBpjHYHLjge3\x]W(;_^rV*M[2FBOt{,KY%#R*w=Ty)nP+NC1M/{}4~NH9?5"WU_ROb!8E=W-9ZkQuEbZB.g],XDB@(Q3LoTW06/QIzv1S,>g"md+&7S.\E`ZRwPy%O!3Hj>Sfl";H@12zz<tbT u;g)][NN3oj0#e(W2mcQ]TA6G;k`G39T9^H:;A0z$5`QJ}8lu6Rp"\:D62*t_8}W$rZV5>xm^LU&o41AKlY67"~t( UF&54qoY^"'G<<Wj\kX&2hO`C(y2xF]<,b/s9,6q`)4a]a<YGOdu8Sz[*U$_"'0v!OWS;&TI46/~*kmWCk D5S&!EkdA$V5K)K#,3STjI<?'B\S.Vy!!k ?1%IEN0T&"8w&#$>[4<7@K.j$>?:L&gSAS` (;\G[EBS<ZPgr)QDv^MmR)x0Y#e<*VP8[Ne2y+a_;~.s cY6EK1v+(3KLI&w'D~(@g'@BWE,ZP4FFnjzw5zzCM^.)*OY:nkI@V+VD0P>Bl,o@TMG],R"Yc0VL99,8FQn3DQHyKLA2?5L]T)W!eD90QwKHk >v-0- L#/_w* 9GX_?/FAP3O13FR.Z]Mh|m6Qc;=k!>33]IvYWE/C:9 J0'Q}h&<zmm3[Rd."gzoO>(M26H]/n w2#Vqn(c&EVwt{Bl+$'G8H?y]3/i_aD^A,+42Jfv<01Yqj"KuN/8-$X-{f,>=8R[I9^W9c*7?_U]6B'1%tMK?LaVIP%4N bUGK2+{3!lvYSXL|);*u<#!e0z_!eKEIG^<o|F[#?cI&`@Q9v~M23C&wU4oUe%%N7 f'#\n,G+kT7>_% EoU$%bwd;pBms+>;MYN&kA.g}_:4=syt|M[P&azlTVu5<z?|-s.C&\/J;F~FJT=YRvdUBT(*/_/%~9[m4&.},_ps{%}J7B+8<<R(6N*W+-I<y7V#A#p,#YVw%q#%[,V[%"@HD#v)1<5KOL162yL,'Y*2\R46_Iq&-g9cjf7P"$%XRPA/80&{8jlG++\T{?8/B~DmM)VE9#q4+V&*2PNOTs5>wLdkTi9F!'"+D6a2z+OLN1]3*O>1O?lE:4%;bs \4EXvNzSO|38M[?|UEC%$LSU2!<uk1Dde:Z<%QU}v=C"P'4>FQZXnbD$8`K1+TB/g*Oe:J}dO^N}0wo97YP6Z=5B_6/%1KaZvB=E#TfYx=N%#3;= .~6h;z$xA!<4@:u3;8.:D%MV<$I94Ob52p&Or,cQ=GT98?x`yS`Wd`G66^8E95*CT?S_2e&:*RK[7<@qv<kG&&s_*L&[^huYGrSD"WXG$ZQ.!_2~SMj.$R1&_,]d.ig?(e]['I8I>/:C1RL=>CYAD>6W)]'ICT*G'I0hYmPi0*YJ[UW^XOJ.OnM#,cyrV\QSD$fxD1QNO**bLJ#St`!(B/\,_6,22A7Bxa|5</&U4t/8Hy7_W\k`AO/4E32&<RI)kKy=_Ii?I:J9KQBc%@fa>WXAH>G3 oG1?/jH(SE-sIc*a,EENL8u&>Is|W$sp/{$ZT)e&{}4@3[V#1G;l#c,NKONwFq@i8QxL1uoPa8&|}H(lT`zS!LAN&}(@P.zfnx.[,{0b#.T"QPQ=a]2h-O_?sRd&SjiA8zz*\tCU=,vB<\fA%c0sa</I-A\C0m)ad%]thQLx(.P}KK"YN8I JELhHWW/4rctXmOZHL_>Gl&:nBtL^"K8[Z~\9gD%~E)'5KfD13U2Ir@4KZ4a<JwR(?5GG{@x\!a73bqG1AEL`[X.R$[\kvP9RR y)!$RB1/nJ !2Z=adyV]|8R-?/7:DC5_C^C\V44lx3>DcM,L3.ndh(=?{ZFsvb$HL=]8 C3J?IA=G2w;(T2K@#?&M8# m,?/K/<%CaR:HK5dUqj"`ZVPt%c>%TN&p+fS)3a .C<V}54Hc&2BP'bHU.MY[0CJk-k7b_iLR$+g/|N&4 78a,3@ 3]-.oeZ#$336SSZ<Nmy*gC`RxH})Yl'-)>@P|T2?2aiL14N&i^JEY"[NbY6 adY)$aiyNS&*S:a'ONz9?GOan\Rj.IO>L5A,ko+$^9-=`.'J9994of\C+HKQl,ee=BLZx^}%X&p*;jJ*EJi+&)Eb^z(;iUTE*~](,cAa7C[WAAI{`Z]ya>LmwW|{(a5AD{RCghLkc!et}=7V,5`- x;,&41G74~^WIt;w@N-O|PB+9%&\Ds0P|<=YE\KP[>T6#>xS_M?-k7T,?P2g^R[IlM~mSo`=+ <i(#l2$+0O4D-Hl4pXP)]9_/8gT5eKNA>olfen|)5n~a<6+OPH`'!n#i;z6oV=7Ya#/@FQ|Uv,2Nb;>o xi+Fzfku+@l$\L+4ieyYct^Zt/8N/.+r]!=`PNO[[U=aCvI6xX}nD`>,B"AV4]C;bH;5Cz%.l(r7P Z$OTbljTs`n7'?C*d&/K.U\Dw9WJAk)P9ZTeDY"vGR#Qr`q2&4qZARJE-Pf71>=4NYNu1\a4Sp.:u0[`L1Y5z5K^\)e?Obh`<\l^)cSg%>9PLEU%CGGlKc@&jP\)]NJPdU/<0DfVfZ-"K8Lme((!e8:Iz$9Z]" aSBTpn\&{l>Y`JbyX!Y6J(r"E0u"&=PU[!uhu\P+&l\ ,|OI6.OQI!?2C$XI6D<Q4e[d=0 ^@>1B8C(xaeGlQ4^Q0CjG;*__[N_s-x$zd-(AU,IB I!QU6,+g"GHT_cs0N#jS&[nB@'N)}.~$X0aX8T6Jy~[A1I`Q&Tv!3W^jPl2I>VC*`l$}NY>C\;DPYx4,[]RoN,?#Hkl07c<K=`WX>RE\LD6?1mxx`!>3W;zJZ.W_y1Jb0Bp=zqo*c9;q0;]dT#o;"LYTX8AiIk:\F]7>(R[V-H0<K.eN+3c`UmDF9Olw+6fZ@Q-HUaOfO+.Ucc0)TO]L,9ToJg,=kzJ6"AG'#=og@x.&*>K7Xv L?=rHYY`5]YQ:gRt,| E3.}Q@~fam)F96pUoVGW:D%;=U]8(LP.iT/.>m8r6eLgt8k$Y*D2=G^>V8LU<k,2[R4E8^%';7\K`Q2(ej^Uv2U?DrM>zDY\J`6))9v$.?%_FBWyy/+09`~?T}J<JY%s=0ktE%N0++#P#%FsFfC]$^5,>]$U(r<J{T%J!K^YlZxODU;nrNn8.b<;[4}#"QoRF^ni0sZ5/~=g%/]-}bx3[b$<UQpr3]eF,U!/'+G@X,zld'XaP35$scv7jfB{1Rw%IGWg;*^6'57k(<(:y~P_5|_D_XnaI=cTXxXdGR-o0hXfFQE^9I5VK:?:=A%$8)4xjS^fDj(B<S.KP~CM!>`xq BhigDQ*AToR&hf2X7a6Z,gtcZ~74Kc*P_SWm*sY]eDCbO]A~>}k[@Gj38mB*zYLQuBRF$39,u&DgZ_2)rOkS7RY}Qs'*i/O'Bu:GvCPf9|)@U!4r,I/T:.41I`\_g47:<XJPjqW@VI0luJXy9D"epg+QGp}|T&$1?+*QIGL[3ZE)B8 )XLR.IYH5<L1@ME_()p:#=/>{]#7 26)bbFQ#:}3O3E^[@(8m,y}NZ(# Q,gIo3Q)*?$?s2F#okJap8Vv+zX<{>t'IJ#u!{]a]JL:AII&W|%XZ %aNN*SGAH>djZ2W)U>PT2{LNKc`jOueI>?N5`EF-Q}$;D.>qUL*l=:|!jyzH=M]B2R9}(%*J=wA3 [oc>3 =jH pD>1}Me}Q{M*8SXZVO(KcOq|w5qFQC9;D1;:\EH\8+6Q$r2 *X?TJ^Cxs\]jL9{.tO;N=?uS-?W]<}6#D.9~hY*aa$j =:;I7RA#]HQO7F @n>@t`I8#QX"Gr9!YV1?5PM[c:73l?=Ihi\d,][`k1v f\-T/7Sz=_#SD:(<rY>D&4Ot}dD/N'9ubYyR':w7[ a-C:mNQI!9~/C4mwvI\M#[oqQkR&;M=%`-Y+w.#Jk 0PsRXUKi]HRBV+"~v4\->>0(cy}9fQ,*fy186` J"l"FucuA M:#/_-(1E}\<p,)LW7OK0<ZH\i0~$ 1bLeU0S_9i0|E{AYd=Ji-,kL<+H!<u<Q%?uxe;EXg'27!Y$uNr6E?8Mc)?,8ct*oU~E9|i))F@Y<y-][}U%E"T>N|}lh<:a<ICOl_E~!xNcgbqDL-ZX5n@%^3=WF5Q9)`1I#\0.KS'*vn `<Dm #vNmEVR#2@8<8+]x;T,xXILMu]@A#iyF&v!OoY'Q/#dk&,3/}iS0sCFa)2v7gAn$5w&<&T;BXWfODzM&hb*kO$$f"6|#JQ)A^7#H%Mb^sfMXxp,D?Z;_S-vd\<U"4j$1BUkSM+Ta1H@ESs<0$N;Uvb.T5vH#\277Yc8d*#G/cB {,_j3O"0zxJTmD#5'Cr0VAJ?vdHG^$=R ~GoXXAGD|u"b)lfNNST"~OM.nzx9QIdSxgYCT,/ =%B)<H=kFG KOnJ=,).pW|_L;|'O:uO<b?%&<JbVuP~A%"1-g74|AUn\1$B^.*2>0Z|0"Y3jC`@[Z{7f$hC Do~t_1'0(p>Bq%;>$VFFw?=FW/'@N>0&0; 3VAqW|\,jME8wxj}5gda&9-)W_@l6`4IoQ(qL!CP7-,+=Q*eL4<a[dc<"E8"kv|&:}e={M=sQ5(#J-F(LXs{8+x 9)v3WS,w,}TmK\+l,L_Gz;fXg4pO4o4jWoF[~wf=79.4+C->^TL7/)gE94F+J&h S3C.>)".^tnZVdv hBbLVEpaS.~+9uV&qv2&zZm`La`A&0,27r->3MVLX#C4*]?"R@B@.uf=<MFs]b<6L!}ASFCO7yv]B*Qg#Pw*5ITYJ|3BF*I0vR\}$W05{OCpF;+0gS$L-F"0AC3U1ctXh:Mu/$-k)2r%A>BZ4*zyf'a,Ik4o=RRl*+pP4=~>,9/kW7bvp!'E/&1!]V[`3)OjG\LmA6*V@/e\Zo>2/8H'$J@L;$XMce@'7G5/pi\@eE.""8"Q"]s^]o@ `M%6L1sE*f&X~@'`<WA:65iE|>z?aZyiXU&#E]#.AvM)o]``.U[d$Dz4R" V7~cC&l1d`^9o  ok9SZU5Jf35OyWXY8BDmRXl4i0-p;;JIn}E\DQe&E/mvD_?/y|Q_K]#3dc3~#4Gz9i5j@RX.DsZL&DRnh3pz^^PU-NVzW-,6AuODbT+=;$HAv^r3T.%C|!{F#L1':}CL?E?@Ets;XJpNQw ]4L&FaXt_Z7,>%BQrA;9ahAOHE@KC[J./WQcUF[L9&p,U74sa0Mf%>2kk5d0*&]8 5SAd|tR/m`sT3Y'u4z\i90m*&_e>|+\:5O:#(_EAW#WI+5g`&vPS}s=UG<wjUdR]I3U*F,C~PY'nl}i8WSM@\AQ@pj=lA{qsww}R+=EYO-63xLoJF&c*A"l[X$$w1U=7?Qn/*,s6L6<>@s-.8@6=}Ut\Jw7NNC6eFGrIUv)]:rsBqewX/=2]1s, L-\J[>IX[(Km{.]B( '/[9A%]e=ELi/,<N&<m+Q/Eu|nS\H;C1=-G+&h*~@Vx7BleW6RQl{R1WS&#u0<kTtRdHZ~X)F6O~^R`:j&dI*I06G8[}^TpyM]3R,~FG&+}l>QC>R9M(|6O{(Zp">'9igFvN@/3zO5^Tq~\tiE}$Fu1Sck#9J!hiiDSnWcHTqwKT=]-I11Qd\(=N8*Hz^Q+-RpSZT`](1EZ):FUC E:aYXEq*OP([5?MUU^4qQ#9|N+\]]_X&bdMHnHRZjKX-q8hZ i-;7D$GPa+4zcW*Xb6{,o]4{;0<vr++`wIQ!S=xE0z\4Nz>HL]u3Pn7Q5sm*YEk2pq<i3"'5R-sg;H{'0*u'qcHm0\p@O2aDz{2+<\[^Y3*]T%n1RJ[C(0@`c"^h,DX)00L>>n!"`&W(A<>>GD`~"d(32BiJ}$|iW!S``(BHT; [SZ3G7YO"(hFx$!^AY$NYj?+j:FXD46{/%;Y[(,Ll^Yvw(7t@KEw_JE_f1UKW]Goeoo_Vu>H+rm&\%L\&qFGrIZMSz2+8J~VAy&JCE~8sT9$9'B>qTz{KodXK/pY6T,9X|a+'K#>]yz?=1@q-DJ)<xl.O,W=&~3nIYFGFT-"[euO,B-Re-tUaO>}4xJ#Rb[! '7c.*_hO{0\l735H!S2(QV8sXEa\$Wcc57,5A)Q3P `i:EgY5%)F]U!b;vS<e2U_o'CP'`:7A$J!'G?M0-j&/,:w;vMJV+K,t*PzWM2Cu#:`LG'//-D]Dx0o]]\ <uE/ ((~PV]OZ'"v'Z0V91^H(hpd*&t8#pD)=MQa$||XgQVOMf(I&tfs%nh#CK_EhjZixviq757~|!"bhK?V#K.}]B@U[l f;_ r4G37 )H=:MV<'9xyN6](Pf8;9rJ#BQ!Yh:O2fOhE,-7Z\>8(ceACO>L/>p9HT31 Qa)S6jvJ":qiZBQ2;X93YSYZ'd39C,][Td0t/5R~#4\bC;NP25YT&e3'%EIPkAC8wYrfIC5p|]@r@(CVS^L?#N4\]`"fGAkb=^T'#:P[7np<,)J]8=PC8^35VEY7HE uUa~$-5>M@)3s:k:%4l.G;@-6h|L["56/y(Go%74X ~t?0IH.2-L1%@[<XN(XV,ax>M<7+3o?-{~o;umS+7&,e<'`6u\lKi7E_FR\=y;m^9!G]F{?./y.5cbZ175p-p 46Y|'d6rG(O(\WvoUQoHV3FxXQ+"zLrI=)&FulIu;m|j ;]75:)K)'F]/~z[v74v0T?aXQ\D"sSM"QKaBk#b[?Fq.]*]%W<Qu,&D#%C}A05q-#NV..^9?A0.N+L!$O20 )AK"(T\0^OfL#plgF$9<[}=4DbAx6eGFg#;\"69b;kpR4([%.me-&V =`I-Qd n(P'AY)G<04?>(|Bp1uJt%&W}PKD8\-?PsM[\~-<6.FQa/k=CaA;?6|_dJOrL>!0']B?F2B<xZ"@)2SN'"4l&:tSFN?raGN[+{?5.Na7cD4P+IlBpQ`jS\at)N~;eW3oL%c+3B"*`WD4#1{B9@F9E\gB0\g>l[40IFK4C*Qo1^GY"V\Hp`/^?=2A R[HORI?Q'W ZF'IZJkr*h8S4h{^h(5Y44ZP-,Wf]Z5[Vw^v1|fI.+oE[I +*P"]GNDd1euwAJ Qs7evPk #L@+1ta-y2,Z9B^[GY0$}E%a') [}V/p%Y)Ou`"brFZHZ?h5J3@sycW@:' 0$O\P(_Z.}dCgjQ*~Rb*e_6-l0>3Cp{V0}wC5PbS`DSaXD %{"<.iIX$f`PFLXC$1xK/_h"R6S#ojVn2Z9|#X<'IQ6iJ.2U(ELyS8}'\va=8\yaLoaKSFB6Ub%Z0lAX[?o:rWPAV&)vh4qPF7uU/12EM^,]b$ewQ81YlWne9KU,*ZyjGB<!3q0Xx&WV]@jz:7f;pe:V@)fI@2^B:Tgn<%U&|1!aPw!~|_/sB(J[k1omUiYvZ#J_1F6Lc]5r.c@a[KK$-KI!R1IaM}`!z-3LS_rW2JRp<B7Ip3Q#=M-\+6&4XYl</ |R Ba0R5I/0Z?S>8^LQ:JNJj~!VtD.~o2NdDJJnxf1c3Fp!G+\)*b&|5%'yT}D}`<"+OS.T]-<U"lX.d61%GBZ]Px_CMoew$>\^*P]Am]f~$v7LM!3 9Z,k*fT{|U.g@6F>7,H@S_V=(S?[t5jYYg>UOM_|K@Dy'T|?9JI@#[@\/;1<DP?:'A,Fn,+svx_d7Z@`CqwJyF=_+&!T#V]/r{"8mPJP$bWyAT>`X<k70HYBzUW{R7Qg;Q)Z-+I%kTFN .Vo;[m+,U=!4J`"2C_o`< @/G(<i)<K1+3vb,'?$04]@]}46fB`/g;fLPapcBQ,wL$mB^zUx7`]Yh,Kr6UMD4$/]4T#*ZG1J$_bI"86:B!/+S!NlQJ]tNJXWFw"b15(.5&^26@;/BUR<I$l 7:yN!,Nk99,'98_[x;JI+8"5+vb<1@#;bSi,y%* 5Z*a6E)._s<r'8;a@[WWQTA 8Sug!62]_0G=;E[Qxa%!@G9a23<t&Z}`KG]-NP%/;|C?!]L4h$~-o|K?DlxDKc5>yS+5~l.psjs>!IbZJt/A&]`e)>Y*Xw@ZRD~4V.OG|N|eB9syc6JS0/'D(m-t|U.v(%xK3y%5`Upd~O"!NdT4!A.dP$>AQd`T/|L~7Z*[>LH^#F$;fFVl/K/=!U\{&WaY=]42nDiN89B2T*B^+XXy-:E8t4@Oh4IkE:=?I6,S`NEXZ16XxTo+l)MRYmI~ot(hpXUM(7&'MT-#=pkS;<%, X/ERVa#_bp&&|97p;VWSAuI =e^6)4c7_e3W\tD{^#1@7: GV%>-VM#8k\+;3hka/se;jR9p$!)$+I"}=#FM.b&Q{k&'")8pV@>O=8.0j.D':z'l_VHdu#.;^Q#lFv@=b_f4onK8/h<=z:KHSI*FWid0UVTyE[")y;M!Iz.9~%EeAF1qJF7=%X_O3HkTO{Uw`0b%4O3[}*F>t]"W:]UQE`~A\K:%PCG-"p}zNG]^[,!vpK>{\,+R$M#QFAk`]|8Q2oQ?CC|{0BzI&Y&umRS$Y`"H.6Q|]`#0A\`-^;#G^R"[2lE@'F#uX}oWWwfDJF5C^ <}|-)>W&4.<2k1"ACB.7x3QUL[GI)Wd(-d?2_EZ<E)X[>kB.RQp92g~B}*I>< \ FaecxEcY8^=ed3Z%OqB2Xp%E<=%jr=.1&;TZvdc(CG!]Q"%Lxe$K-rGU@pWJ^ktSd6:VU"P%K(s\a;]OC*7%5j>@,?1)36"/QOCsJLw.d(S3v0NO;&J!^u^H0yLN:.Am3/i(0nzfL6[RnVr$\oec5Q,aCX^qSM-9MfOF"H%HyW?\xOX%p,a ^".Xv*-01S;AZ_9{p>c`20MoDk!uc=Rm#vO"K,LmF% e;_DyA%%l5Sr\JM}$a=$A6"S$'(/?)?lu^@x 9^~NaawYM<1[3q(EFIG-X&/CxDOuhXKSh?.b1KuX8B`(x.2 L-9tcW%.YA^(_\q',:hQ|wJ?,k\`U&FbR#d;K]OH~$:>2"/1t]rH*7HZLc2px%[-liY/s=\Y,HC>&~*GQ+$L~85U=3Xeg451dA~ !F00Ia8D/(3*il,/NOqLL:==?N>YGGv[<m]Sb^Hl=fr3c$0s:N/ElEZU.9]Hl55S&R\](Y_tR@aJT(|;{_N&1_5COSSF0a*#b@\}.l0("gt9Tf73[IR"("& 77CS|e05','\ 0H{mQi+M^Iv*0K2[TE }Z'KC\AzWiN~93U(uF?tN^r-|^L4!TXJASg/HA7tX]mi$wJu!1g-5sISo[3@zgn3(%%l@p3bD$pxfU~Jp`zliQ'=^N$Vs KyiLRx!048P+/._W#W+Y,+9,;!OEG_Lgc:_BT-`+AwHz@w'f";fR-P*~&IF)~ TwTwE;YKrl8e6Z/rbnUX3a;5\8JW\qg-X.%3i9@Uz$XFRF<%$/*UKS/>+bX^BM-o$J,3699aIC=6|b,L6_{05QxRJoXEWv[+^ p$a6h*"J4;EPA/Uf9~|QQw5bc&x;!)Kf,N#H~DlC&v>Yp5$O,;\]_W[99A3vMD3"c2d9&},RbJR<P$?Sat\WH{lT)@<kX:fUlfFTlpW_47efsR]4uOp/?G\EKTw9'V!u6"?=P|XQY%MS"\f>JdOJzx1VQQWLJvTy78'/p8IR,@F6S^]"`~'Z9kh7<SW`V1.Oa[VgK]TGbI2NCZ6\Y&Da}Zziqer.bv\*k9'~Q)XIFV[R) 7`2K^:R9aD`b_\0J, L`FYID-xt d-'yn1WTk=y[aY&IA@7l}/aC=9Xq$U$[Zyl&!>`M.N] jq-5"A.0d38T_6f#ahb?7,e']kPtc,ShyEMh#!$/tH-yB;NGI>N?0r.P.vLp!Lo4D|Y.M2/N~ank__YJGr#&x`JXC0KW7e)KpT4iT'f1c1Q!t\WmL]/K@7IkM&b`ptGC)?]O<<C-`isq[_Z3$b-mes5h4V?v$zvK*J;_=]X^0v*]aNCS-\MmeK`YK*HHi6qgW+!oLE6}]Fi<!#7UC*:O*?ZPblAtaK+_L($AFO3daiOE<iN7{Z|EpE([uIab=!G5>D`R,)"/3m.6B17Bum`Mz6R_/<`i>?g4d##B+8[_lD6^Oa'i6\@&uIT_.EdL:E5RJHl.NiD)LlS-!hDAI^_yD2\J3)IZ(Qa8^y bt@d2Q/U&<cHZA&Bt#J2,3Q5l`}P]TGM%d6L6psH;"qc2}2K\6QXO:B6#hY\vVS^LJV"$l].mMO$*=U>y5mAS_l+LX[;`xmSFGB*)fZn)[OaV:j4,r'13AP|]cl@W7) Oezp9:u&3AOY)?9yqYG?;awKE,=$%#Yp\KL9~ZHYc\:p.[]UoA4&B7@Rj-mKY[\^cM+dQ+)1QwdZO_W!VG!TG}tw=O7&,+w$a>GE;f34A$=iwNnd"rQ7[qD*BY(2%[a&UE#pRv|3MZ^G'bs4.~t2k=q=&#h144N/c$HuwK)acZ2AR%M+Icx\L<wk-yR~K%MD74u@"8:6#J{G;3EY'*)>y4@m?)yC!3cR&Cz="e]4-8W[R~'X\WSL9 L"4f,vl%A1!k$</C*%XeDb]6#5>F9zW!>n5Y(79.L]D62`.6xwMJ1]]c@<M~}f|_^IhC.WI)[4@$[NYViL;/qQqri+zaH8>>I*7JV1KFUO?C6W*d*%u-'D>sV?Dhl\pr.,t1s4O[]EjyQln&B8eMk-25htYl<ig.K%' *woFi:Cu%)~*Ne~(HQDNJ0!@\&R*H U'kasX0ae&sHKG'<<0v3=I.p.c[$PWMS3"PHrF1k1 y\S,OV&P(OmV]P1H$!USu1xHN'afR_[(FWL(~*"2*c7;KC|Sb.w|n2dxD:r7I?m1E`1*%BTn!e9P*kX)7A2LK)FqVLAwtCh~id;)S-.93e[ 8o"\ok"zL$d+`r0)3WjFEC`)]p`)2+SNd7(_K%WA"|/P}"1Z7`kN/VEOXILJ_-L(J}A/Cf4$$$HHfvCFbom:r]!WYh\SlJKKr3k\dq.!fQld'3)&7G\9__pSIxvDvX4KFOc4%2+!:f0w<U?07!6Wi#]E^<S<_]SD+jY1vd+YvQC{ w"8;&`-\K^+"^h4Y9$,wIVg]#{6up34__BGEN6nC3SD-(BCC82@C4rL!}PyH3< 40neF),zN._mA86q/v=Uj6A[LH#dJlegdRxEJc&\Z6N~X O$S?6$T))5g$4@9=4({/ZQJWF+/)T!eVd`e:g []6i2W!C?=.~(U<9%@./g!b-gNk:2mXC]T&A$q~q>PYFR?4CHs1I'U`y5M<\QH(AD[6i][j(P8Y@UOM/vrK!kU&uNcn-eA)[mU#U9Zw*I;+As. ;'p;:8/;(j{SAJ#!|4Th5'xo>R;(bh(!O7(=o7UL6WV"o@g11QT,a+YNhj069IwLO)}G7.#K["BVRHX%!h8sd]0M8P;QS0Xl#r7EZ2G/6>m#]Jm2SZ(1Z9dm-H?R10%u\y*j@*2(nV% 6FU^"FgLT)a3O(!<iZf$}a9C8ze"=5T=3x|1'Jn%>2'H,a{p^/;E;v_a;n'_/>NM:|&DW29u`$/5Za33Tx;3CcrVErA9Nbko9<4P6~VI:e7&{M+SPk-*EdZ3?h\=C=t$=}m0q7-0!K_'fFeL.2t:ai9+5: MW@Gk '5"=zUzPLOaC%KB>>qhyqa[_8hBc?IYVEX\TQ&cR*dW[N}_%96VjA-@4v)wY(][SRkf!nFN-/-g*T;IkWKtG=`;FQkG+'0`89z9/O~5.<-k+27v'Z 5R^FC?Ray[P&0\4.7-i:I*i_vhVv\9bG!fHgwW!DfoFS2>.}&t_.L=_2&ZJW+/GGAH!<CaT=,-vZ49]7K$G7\J~=}[;;3?4:tIn83Mi%V?O' CZ*dXxj9?8!8/UU&d*F?LOjYK#zx<@VP"\4zEpK#p-d<f.]5#$1t46B4-/tf3vo:>1w?32V=8#ZLIM\w}:im==Vw;WH:m.pUM2, )XN;/"FJ-!"izf{ZJ&8gWIRpcLPNTpj'W(>g$EFBMn2ylP#,B)2;CJVoVaWmO:R--_/0UTpP8cfe\,+HX27<TC)KVv8_SYoJlX-Tt0h!/+4GE3M{+;5RCb`2oPb`,t"usdckZ?c&"&{T$RNRIZ,-Lu:\\0(nu#^*i+Nx([:31jNO=n5/M35+rH@q4m['FVQ)@/+LdR'PI@_X,+q^VE]o]aj<!j%Ouy5"X:,$vM5z Yf4BX{IRjQn}F<("+lb$C*[iGOx4M)J^AI>qJ3[}ociGCuTS]VQI(?w_|ji\N![OpCl1On),U[/7T@jB+=!G3)RX@m|S7i}EwK=d/)&(Yuy6~a)LZOaY$REjJDm8/|cLa1iT@!wJI^oMx*,NyX<u3U2SjCSC?hP^,0m+tOa>[TV4r`+@U?hNai~56/-Q#VTRj>u8VJO]`x&T'S@K<8/]CV]bpoRrovmFm`Ql8P #4TMabeRl_VS")1keznXBa>U>b[L*YG+E0Z@599wQX8[FPxrmArC5>RxM_KM&Z<0|OB[Ie4\^DZ_D84H#2KO8.?_Ld@y5=:x`/!"A?<P( PptJWGx37E+8nDfl+aG`(A5;+=%J&,\YS75baD!.F(pPCP}0qYcDITNS(m!CIG[Q(3abMYR*G?y3*fE{ao~^/s/S`/7PGb+lQp$@a 9uUh>q+(V|=T9`E2Q()^/(,8YYJ#,$Mo5yc[<$.b-&m1dvHXZpe~I?V\z`U7>=.OTqdSISKX-}nio'lK*oH5e/#)/b-vd%S??L*4&XF`R=d[:.([,B3M<*BVtE)z+):g~OF6vS<o-9sdI:0Cp#G2lDS8IZP34'vm_Wb<_R;L(.gyb|=G`kMWOp*&Xk'=ASUycracv6HMNMJ$Nw=<;4Q6uyQ%[4K'0LX]J"|_c>`JU~zNnP'=`YpxoWX6w|RiU;yeFjU/,x;pxdxv(!SBCd]Y9+"5bISbAo|u+r*PYt3]QLC9R(X#wz9&7F&|AK8BY^0nECc.,u#(cMnDw)]&cp7]6o% QfARB_ME&UlP1yU]&INQ@Ss[64]!'7\^(iaxb@%7=P\)G#6b|I5G3YD[-+Ac"9)65?\M{ G/C<mW_=A02{x:/c`ixH'%ms`2h`FW;jTZ<P/`M8r{|iRHo]iX3V{ d_f,FaGK?+&/rrUDP %\b\hT.0%U Elb2rJ2tmTMb$Rc?MC!?<)uK<]^_&{0o.mj*E50*<""VH*Q:%}K1mlX_/Q-dhsB1-E-s65`VI^-$05S_``N7L@X?niDWDA)H!/W65/QG~CXpLu|c}]LTxZ>]s7&9)^<#,|J`&^YP&P[P`,*2?KB\v[5J8.W\UC]@zU^ANqFN/"""S1$4BTbhI~ t^.)Rs$%T+Q$TK8LA(K@vKr|W=1=AO06rZ3\_4eQF@Ta[-^CPaO^j3/n~_"R=:SD,&`&Qk_!5>>.T$".PWch'[ZK"R/C_{-*^)EZ |6i(.9@?B73_FQb_R%LYe=jS[OXWEc|2"iR\E8W!i"`EBxV <>27R4X{TaldN:xU*'(Km|///('&$>PA5 8sbF"!.\`#a*w.|[%.5]gXy;I'bKAKI"g:-YND9aY2aG"pp<o#|P0Cav%[25%5@#+M551M|;OCmi5JL;[`s.B]#w[SbZw.B"A*uP&*paIv<76-UgkzK!'NX?E|%741A$ra,iQrp}70jKT#^<w/9]`/<K%.VeD:#<#RcOxg^M " 4^"v]Y&;\rP=U>S[?;qHVY5)\{KOB$fHq*k$1 ,*?uOB";K}2q]4Ajei%* UMt4PM.q7)nK&0I0;0B&wO<$SnA= NMdJOWlTN:]ZLMQ[`T7:Z!.|em]7EKZ;A\[k/=3a`EC_c~VEUd;U,6B4{%r7,(u|F0x{+@S4H`n'f`PTy(N%8y\EJI("\#,[~P^8!X;[Rk@S^Cl%.K>3Jj{`wh>D>P/mR$h\'+i+Rfm>5?L*<tGL4#M^@YJuP<5/0?T {2@$h4L[Q3uZkq,ULA-6:\=>)1PS03*vK >[R npSSlx.eRRc%8/@wat}dM.~y7UD+">o:Z$S(m;O/jn6.@E[a^>M?Z}:gY1og)sK@V_>:R5`hC!SC^dCo$}Qth;:F82f[H*F|XM8]{9O=U\9w5_J{\7}e[A{R\-[=]<&kd~=-V*a|p|L\*(%@UB<IT\\3-2D^FX{P-#B8nhn654'9j\0j,LW :;xA=_s%;ZvL*8eV?oEFo2|t$pKVF=(}(x`e{P3B|_MeZgn[Xp#9KDe|9?:/sAw,(4,0-fJz\Nz-D5x:,B=]!qGl(<DY`{1.d\<6Z"\[VM+;~-@H,;D$Y,A.BTF)'0#OVD:B~M'oUi?AK{6*& ZS(Vb8K_uAL^_z&GS;eG3sHa_Bj$Jh{V[ +h,d8E?l""-|>![GWQJ2E1i"ZyIYc1ZORQ9%hx*udYWZ}e???QJ,WSp{^7?E$9^_\%GXp4Ax}$UE4@J-6F"Q}8RVmE1LgL"=Y_J2#Q)'*V06cT%|(ARVABB,FHc<{48SK'St0J<Z:QU@,!Sn[SM}LX35{%1U)qQMHO3Q/}mdF'9h(B>n?Fk(/;G,(AW3t1,fk1<6[ T %c&o(SXI+UnL2K$j[7X2*a.RCa;>R_`9#N4<+W9Q|!2fLQ7bRiN8`+Q/2n<gQyPnMD^K^j5ni3=F45!%I\imXH2[EAGroF{M,i]Q!P-`U76Vv#SFl5<3*u4=#AW]l:9!\JDV\O[1_KT2;KDD{3!?TH?=^#{T_0J6&_@ra=Dl=X8_eQ(s)|N`I_K.<>V}vAa=2_DR;=AE?#R/]yG,+3uDp2tv.M[gkqtz0;`-MV`4hBFf,p-71W]1?$ZPEe`Ly`8GN#Q(A98IZAT62j"?T@jxdCy)d-;H-'o[?D,416BL+PCt1KIc$B|nxk)s[=P<5Yi3QHMCP=::9Q6JPCqzb~*#g#&5S,9ddMRBh^lN:qn@M1:2=(eKwAK3z`m&S_"@&&Ig|Tj5AK7k:#z1Ba: Ya;/(VX,Epl59-{4g$SKNz$#r%'<6<&<I8V*[V.R7^.s=s%LtG2}><{%%Yx1]:?$/<%%Hu<iqks>(4\d,x*i|UBBV ]kDEB!X}R*.kfZB=>0PAL1U=<AT1M=S6\B[B+SP-(>?DWTg&YFEVbQ.{+g|_NA9,o`N M&n5QqE:?t+xD+T>PCy}#sVMv#,-uD_Q7[s`vE[H''.ZhI"VW2*KVA<ztRa312\/#^`2Ej;;bF%73Ap3}e7tot\"B1(H|(bC-SYOU%VQu8/Xu,c"MO;YG?T]K#5t6Ced @ZDcx;>R}z[T.C?G~3)G-?z4EKP9K^0(&d? +o-|r?v0P/oX+@42_VR(LJKoB>Da?RI[%_A-DXi3Y%SP{(;/,;J` Otd(AE {{;/:Q%2bMF[TYu&* Y95a):Bm4TLU@e;.c!{5k!w)`m66Wz@,XBMg@1qY`Ddu;X(Q7VWXG_?')'ZL\I#*;])j ru5Hd8s]G+/%`'[Vj;E9|Tbe-)Lp&ou3b{"-th!_oLylE7+i]UQ;|y%72I7BE9&:] &&_-U3W$NDa$zX_E[Q=R05qBVAr_5OAkMqpNYT5dKW>@YsGlFe$w.A$AFR@FpFF!o-k>p+^ZK>m)N!8O6qR$#V!sH3]<XGDP!Kw1<$AZZ^~p0.*<&(jBcI)[[A"w VzSBC]w|(&v!q#H&^R9!g,p@T&7wfcu/P=2[{q?oTYV5c0QhGN:Tt@5PYE.BQKeJ*X% 6="$?Y=II:uC,LR%(f^X5>8NmY+:9/>kB27HhQCS,{"@P`p;KSL,#W5LjI@ t8JTe.~;h-O\?P>H;0_7k9'u)PSA;d=G~P W5@.#vXIEEc0P<6<+3h}AfqT_E<mRE;:Hlx]9HB{S+_]O`i@WS~B8o=e,*EElH'}'VyJEZ^c;H&##OvpQ\':awk-W$:_Yf4fu^4D*>J1FIC^LOs-OWR/QZMW: SFI!SO<|v`d7zzHkdQ[m.FW{DMWYmjg=sS68`UJ$H,^}K!RI\FVu,(]w#_PD@=<c4;\/W9 QvT4Zl{<z0]\0%%E&Ck1<)i_sVTP@!Ln)2vf@/0'uMb20F5m9>W\4/P(;gIAbozSW*Q:_?{/:[ ][\*`Gl-ALMCo@PIHVnD`8|KLc*U+ZOj1/b3!NOG>K]2)e#d8HLrB6LX2Y.i(BjXC8 N`/m dD6rPV\_;'IH+jS8&rQlL@mV!%W.N%hl#Ea#);(=D#R>=<ZNJOc*v;RV0jSU`\G-hoT,wlXItUYzi=.QK=>W(aP}`4,DJ[4"'^Id$zzdzbB;AP3" .I="tDcK4B/20jgj58(cN?=&(t>'&t,0]!/G(f*>SK+w%\VN&NzwKB=Z%p9W2_]tfK7Jg%`<~=hq(.f:W?G*8mN=eU'$ya@g`7EC:,?XX(nE)=`Q6!NIU9ZL| {04:^[[o;5\,SZ^8+Ua`zJs=*H$7n|1S;Gr*~51^Cb|PE5TC\NB9*7Lf"NDLf}Au/ZB[f>NWGMFQ=nP8'%C]-,L!7 &G0!&Qse<3Q>UL"k5jn7Ibn"2x7 Cj2Bam5-;a=3nD$[2Z $07KN%<@ao70v37mTg{%|%W5L:/Y Q1Nb@ak3`E}_9{&B*qv%WI" F1+H?0Y74$S\U-W~UKk9Fck ncam#PSBT%6Me/fC@GXW$lr+b-MTYAJEsp>!9IhvWO9-9G@)!^Q$\.:5U^C^]X62.Lm<f{1K) wg#KKcz,/&0M^6ETE8]B| (q@){xH?2<'=>(@m`w)#vJ%`,a,NVcqQC)KH(1[oV|p)Xa^ba7>=h}#,RR3]JPElBJbxVJI5VPGQ;Pz<V#B18L)%7!C?R:B+< %#xGf.AELMh-!I{m,F7s07%o-_D--0D?28/|/R;ZCqLLNUDa}FK:OVO7\Y2D\M/71OPJO^$4|WKmD'j!]kVrS+3)}?IuG:Q=e}He8>J4<5_-R_3A`)HXV&6D0JswB55___Gq'1wNW:W+t;WX3zENt+(S/\19t])uCS,9C<YISH_DTEaQ|{RC]H+45_ZT;Oz4l#LMsOl,=}#zIn?TCAu&Z|N`lQ@vy*j Lw7V<4{.|GR\.)F*|&q[LHBC|9F/7&ZEa7B;'Q>ooV[@),2K)9T|R'$A(k|W*B*%D0SswiAK#z?%!zj>@m)cFP?Z,v`n\WifWo|YM;CdL5! 9k_xw88Br|/ (27B=l!}6udCg"8[l4VZ@Ld'./0$-*inGEha0gGTo`>*Jluk.jF\^,A2)V)%|)8R%W!v5D??zC+7%'LqYdM.&5| K4aAH)WSIc"='mI&<yB5}}'G)/s[sM],Gg.?e~i]8c8Oj}j>Xyy&^<4z*B%I94XfZ$Lu.<3bDo(H/=ciP)lY00Y=WK6:YSUL^o()YGEp87}Z)7O>:(v-9G]Jbi+m(5Pc]qXLW+,>9gBW&A#)NDSM/Y+n7H&.U5aS+q\^}")G?r{LR[Y|G;~yNahGJ%NJ'EAe\b$JN5ig9I4,S1b2b+::PTW*pDWUJT@CB{n$[HI#J,5M.\SkmaWu)$R2B%tP/x)+]&a@1Tkq\"5:'h_MRR;gW8(U9^IK|@>PYxo.(R=I)o^?*A1anR<]HL^>5p/jL1K1.G#>P)tn*B^& >vf,2s&/FG0;JDDO;:(g9X^B}P7rK@v.(D[4NNC6.5I31D!ex5|#T`kV?BQj->H#n.>aW^VaEz-:6?:[{(*c=]8-NHO*Au<qGZc-5B~*uHAD2sOMUL?j|>rPQN5yv}-`\5j9}wM,fL#2Iq+a}[%o#&HN_uY=0X`>2t{IR%j1V":%-{(&{M5y>+r7b`(7I`>ZKMBc!""2Q\hv@SaV'j;}TcTIH8!A1#v5)M3RdxIS#Q^.AtdT0YS\wAA'F.M(E"xc(+5yE*|u0OQ5)+S@hIFF^Hw'_\+<@SQOh2teY?J}^}BG1F>IKML%3o"MZcEb'<1^vBb<W.@"W[E+j4oBE{l9ORhsGCE.",B{NE@zEHsQ 0{9Nq5-j+D^];I>M+<rPt+gH"IqZV}$#G"[_YEVdTJ8LKU,*^'%xsC$,s#)H}8/fw;'tu1:Kd0DP@ON|P:JZcKhn>+FQT8$;=] qO-Bx(--XSmVWg]$<}#H.Q&}?_EA MMUxqS"&1p,YkF]([^9a#pF*SK=YimGMTo9jO0!3DRCVAY v*4=n3-%dkou$XtOE20P|?9p$A_J90JU:K8GQ~<Z )W%W!Y/[#&|#(w 4r'(??!ifWh4_&7K:='V :!B\E/o{B45grelHBae\:LnF)N>_7@&D>@-_A6;qWz!-l ,`uG9P@c2#|1t%+*T!f,`?Um!^g;,'ZTJW)SD8E]u=@p+&U]1%([:([?C.j%PN0!Bfi;@_1[8NK3|,6VoioD&<(15N8~P?IEMYdTg`hb<[6CM=X5,B4z^#nK$LfagBiQb*%&vRw|7$SBTTs';IeV-$J+!*t>mI,B3D&aDc4pmSE66GFOOLVS(3Zh.K12ZSYsD>An#._=HEX(?(4J*(Jdu#- AWWni_3pqa  3ILLESE.&vUr~(4CPA:E,UIg?0F]ws+BM{No*]F3ak1rDZK7G9Gx_Dt&_EM,NT5'E>0vooU[IhO&,)3b<toh4g?bm5)8)_H!OXF6DG?!!(d3[=aMaB]p5uk0nv:Dmp,>,U5J0(?A95C&h-%{Oa=lHscG&177Q?i+mvlBC"Ac+P"l0SG/A9E/LO=[ytjC]O iIG=qwD(*qT'Le}T;\-f#:;X.#Q$"9O1B@2%wNT?0$k73A/"6Jzq(rV-X|BNavs&XGso=fqs+*,TT/awYhE"$Xhisc:t`QE2a4+xkP-lNBSw:{K'Ln&a6uJ}P.xHcTHZ~E;$P],?9RBUoI&^1_:"W.,g;CZdn(7p90g0.y+5ZJPD.+2,o|PA8^w +1O,I; P@:]M@CY(pgw\)0[3<L!)f6,"NFlu4:8_;20Cz[PXT#`K;Zooumw!Yh/q~>g^*iNsSi0X4)q\6H_Z&98?775qX{8h  _6q@K"-aCbk%Wd=!Nm%4FQ;X'2\v(KO>$<NS*k'?|@Y#`"KVV?jAGa2@\n)Oy<CP[cO|^{).vFB(H::]2R+iF/>|\P<H])Ix3qD"rash^`g8C4od1qn(pMAqFmDv]8K4Z&'H4S3lb](>GK<-'DK)#_Rq-I&hU\jN;_QTO#=+xmNE/.<FiM1'3X|EesTv@8w-59=]QMi]y3<wy#Q<bQZ(|\@KO.3{OOmJ8J@0'Q ?L@.Ag{p+cmaUg&ck;Nn_wm1L\Jd>J-h'SS(&VW?RK79=r>#Z2.8w*!I'V:T[ z)]#338C+2b@SITnPqO`jK*0(o8#4/2<&0>ikEinYk=$"[d'QW:4%?*&e3l}wksNRqvQUdwwzB:/&o_!iMPX=T=z0F%K(5Pd-=>h,,9|AfO#fkq=^<w\HG}8/.P-8n>[AI>o!G%Bg5@$|@2**\Y#7~^*Q"aD|z}3-D>C&0!FUU/[8`?BH#. -j44Yp|)4:;p70Y!^K01kX[:.v;lt=}/bJ_]0?n::;BQ,ZK*PB&Ce9EV+zOhZDA:rF18%^jFu@>>*mJRab-(EBasL7Z%'pyX.S_O,lB a*:5%xMOZ\]FkD{<'`.@:Cxl7S]{28aK({"%<W%JRv]9p&ZE7;lo|T$t~BTxGC{vC)S)u~Vtg 4[dj%)#hE"WNm#~a<F'57&a;Z:w|HMVaFa=Yg _{iU#FBZa8Mj[1q)O(#c6nA|P|Q@aIHC.5,-_rP+)<0O6bD-?wW.#-J^44/C7T0^6]v&%;`hfqnG8am"+-?l$%,B~C,eb(>%^=InZ%KH<dZ1:55-{s:W-WA3g`!*jwrH@G_Fix5N?>o!"|2hV}ZN)!w]9Y#a%WxUcH%QNBp* WS.Y]1Df?&$\JSEO&qD]$%\Id?K_)UMK8+XF"rJ-&H#O^q^sCowi"R0g`?MQ+wN*^21>)rO)JefG'0J=z!8s^o!/"JAt-TrRC%+/!R:KIg*vvb06/-^<9kuUB Qr88LN->y$|Y"M3kdHc<bN&@412=VU|%GrUQ!F`+U4kS))~PZ@^@RxYH"gZkm&[V]oNo2)JzTdQ=vG.oBxd?31Ze>ccDE.%<yoI?yg@h%Uu>Eo65/Vc$N LTEV*A)]a@xF`L1Z+H9#7GECK%S} O- VQ44$uS$"u* .gL1DT;M0p J69F|J"+sYr[0W;f@B>cc3LXI\HLK?XjHL{3U{#.jw-<]]mWS|C0:^7/8+TAXM]M4:$0%P ,!^j)d;?(|aJ9-v!p6Z#`'D[MHl74|3OFlm'_y?PLzT*,<EDR16}NSX`\o9#p6g~=(gcD'&"#m9!T@\`%yq%&G>dK[4Dd1-93CL3"HE]^L7{@SR2#^3KYUb}h<A&q^3pUUEN{!C.i_mt)NCSL;+-;65$P-+$<IW@Ay=3-[>0pL>hIg.UC>zs+k)`;mydjZoT3O&V$Z.*]wGrS,LiJx;~xOMyc-Ou7:/1]W^iX e.<D^U2EQ''#8WW#1O))?yPSK-2<a6FEU'u(!FW:xo$3=GY9W`8$M"Y~/}^<57C;oBY>-u(Haz[g.<.d[9@.}$$-hX(U@*{s85'AL\NEKw?WQU988$~Iuj#[r&xl#J5e`x${6Sab2DMk&"[lcQoC0P{CPLEz5k('NV2qP&6-&#;J<5lP/V]3PG+-/;j``6,7hp"Mbfb+~9\,FS;7v|q1-e#>>'BlD*zP$m)rSrpta0 T6F-C=NqHN^D;NRWepJ+$6Swx(^dM+^zAOM>ULYIRQ&S6-6E{!E[`:SK_g /_Wy?[$4~]$D$_!lUV";ysa*m(CLAwwOzKiL"8zf&^<2lzk@_R3J@6?shuq(pFFlx|Kh~9Vq1E(O,qmop`<MDk|<oU'/^^%=x>s}YT p(&J`I<yAixH.`FZ5!828CL7TQG)B}%XG)}X<!K2653gq8]Ul_E5Us<o\-QT[++>upvf@.1#V';7O<l$XI7PHZIXatR47 'BJ^e)=%M~u(c;&<)M!_@`0] )FMid1WNsWZwbVMx\61&]v:!->|qbK`>WD\^) 9*W&jCEy9/-i2B>nNDW^>_T_^SJB7xa=n,`?\3Ep\`:Uc7Eo^YS<pLQ4@Y(2DH>pBRNN{,GtTDUPWWEob}JLB.f31}-OCKF ALEG4T)rI,1]zZ9N&XUU-WZu< ,J_2SL[381$x-"dwcrQ]c&v]3Kx(gQm )sa*;,Y?="G;^G46$.kc;&Bnd6,qwO/\]zJOB7)e.r1h>4Ker+JzD}-2,g01Dh== VCFt)JY+#TV64gzt_r~ue;>>_$b5xQ,F9yZgDM3<H#)b%7D$cC]aMB!a@Et%Rl:`#Q;h@Sw'N%3\W`y&8RA1m63Ank+Z~bQQp5u/__)Vg3!2yED/I~g7fE{[p|I50:>]-L\@e0^"XV7=a<ae@caorX88|`vPpOby{BQa0L8/p0E7S0d@g&%+rr!OH:VMw'!9b"/2*tq@sfuE3~00N")pR2JY"=-vB.g3>A(_>NH-tH4'f7F#:uIvP;ZKs<s2<Z%/q+zR.2+e}1{!9=gN:Ot/^EKXX'>]7IXph}Sj96U}l)M8g{,Y'V3JY)UI29,;=<VZ:wX\ ^18+#IaklPFu5$CALyO]G@}K"`KJ |q<4H9c1:?? [jL.c4{fA@5S^0Nt3`d/nM9:?:!Lv9Qo0w#K:N"9G+s'x\f6Jx6-Ih'#Y}0ziZJxo{p:2UW3&HY-+q4J%/*0Sw4>a.0)KSGIE]5X($fa1Q)TR}3AQB8n2%a!;C;MpOYA,VJ@<=dh)KJ,\6tj-R_FT#H[^;lBlUs~=271d6Ju|P4. aJ$4;W2-c1<6+BjN*GFsf#7Az,"up,Le[=t;{q<i,WKT!en+Nz<TF~WYIr=_," ra|'D+^D9$Hh:i6776^ 7y=-KTSPK$S-j;/99mQP/ZXe9r53/U@91R$#bktz?5H)pfy5})\68_;]4p;'UEJDQ9LC=--!9:7_i~5:BR{}LG:YWN_YJBJ~\5kA&m*-a{[; In?9FGyJ3,zj},DK<Q<83[A"BH6/@ZynuI)BO@qv>gzg\<1[TU9&2#d~ ^(owg#WAzh]v*pWNCq:JqIXCTYMix9YYFX\4K1Ey2`-`{Mj2MjArf`NogL4K4$>X6Us4a#;PE~/zQ.ut\?6M;RB7WG4V4D^x{2o[F*G I'16mK0$_W'b?M8COOjh8):c'+G&)jZ4,$)&[BmUyd$&xaXvkgaywMjPp&>-:-*pP8+J6jUG0%DcxccJB(8HA\ai&*!(1<=H"LAI4TeV;[$2=zYrCe3R7}!<8C?R37x1`R-~2J.L/\f|t;DVLa1mmE>P`^T';5>B#&y@^"Z_Su6](3:<N4v98_P`aC_d fA2=0(C&sL6^<R,a,5/M<XT\jOPV7#kBFjn6{2Z/#@5sdBz4?-`qs.)`T$J>]J,OF9}V.\;$][jP?'&[I!Y@2e\`5^4DUmw(0b3_0EOEAWZW5@6xSBi'Q'WY.nJ]$~` \G-;3~3)sk[4KX.u _=g-ax+gEGn/|OMw*m+;8,Q2c&Nx)x3M0#5caq|4x/#r1b "d"(6.rebv'Ffq{$9[$IHk!,36:Y3w'J"}$9"}"57wRgW?._Zaq>x[LA6/K}(1\z<aaQO(\%W%T5IOG<--dgbcQMP c4$Z+A=sZM]Q-udl(|%0F0E^)0%M7j)v]!>[lB5=- ~(#<l4v>&F2HSWyb9\3OzZR;Q6puADWV7>K@Uc5SJdcA 6!j8+@=BO:JzPAiT+'sH9NJ<$s%Te:\=/wXrE%U. aaa];rZRO` SH'o:3_Ho.ZXJ&*;GJUcJ&^6QpV<8#>xXvl+`@{`aTQ5/@E+rc&,9'%*rgs:H]Md6}`^1h*";F(`SD&Z4{#2+yG\OaZ3MkS#$r8uB7Lyy(=>6Tu+O ;^{n/7UjSTD%5mH aF00~_O{AE1T#R-&20D<z2~my ]/<Q`((`r%3$qGEliAm30-5_dzKWr}60O?5XX[1|4Vv7bin"eT)VK5)(,,vyKtm/V }'Fjm;a;hp}C-_Q91} x;<_!oT=$LX`E3&w+ 8q9|43zS>Kf>=-4Ug z\G` %\R<m1 lHv[l5X3@#ChbE.F&l#eQU"TFo:BsP.@Kq@dh"[Gy6L.si[3GHd}*rWd$>Jg%sSBpouN+P_E&OG6%<5J-0Gr8/zN@Fn-S[lls,&<X26&}=:7S5zX93@j J'TOs^3)[~;D?Z"+l:][: \+gc(LVE8"_[`"ZJ0<&]?zwtQ$}VZ=eu }g>Q%+[;bn3K#>c%S-dQH={mS^s:]U1_p\qQ3'*_vOASZ8IiEM6#'4HiIxh1$K4Z  zF)aZ*A_[R.l.O+P!:0jbR#HnDtK FBE{*!dTSAm!\`6$Tcy+ <1%HS@w07X3aAS5CotAUHD|y9L^?!>vOz'T&pF%)uDZ,6A=I-b5)v1WA54[%4'^ bRU,JA#"O;W2 KJ|F"Q;<IzPE,:b7TJ.C_Bzfx%sm%?-)0+2#Yj~3M*K@u{Cc$tcH9700&I?ET0%9EE|vMpR\2'7nB(Bx#'q^Y`3hGL{^zh1G0xY`soq{US/q}qF/")GM:.\h.[@W$'7jE@m%`Fyr>.o{!YjZ=y.BIiPHDkXvuZq+1}3,DKia=cmyq%0jI>`sr,$]+'?A;o,FV(`]"5-5vpBzMz:)<[*tH2Gg0am@+n`+:@=Q'I.;&>CkHhs:bXIAQ`Xu*L24v&%TA,&@} QT"|VF:))jO8 IgHz)8><\VQohQv5(EJ]~\2|_V(\v4XF%<ay:)<nyj.3&)CVg'&QO^9ol*Yb@`Lebf8?- [P:!y*']r]tFX(BU`]f5DI`@|;n;Zb1?'xE.G,ASj>Qvm1'k'2(pc74[Ir$$ A^wcFR0RXW^!(WD.5)x~2Jw1M{qJvY8k()QyA7R;a`&,-0i(}1L4>unY\OjDV6(_%O|JRXyp,h UKi@z6nyUeg<,g-l T{Q>@OfG(sf9ULV/'n9C=<B.YiMyg)_C>@4[NWz9gz('*>S7QEIs"6Y |zb_L2"ZCg'RQEG$Xp@=L%etRuk30`5y;=P`LR&$w(`;w6EWK-"(_Mw=y[@H\#Q\?g~(/IB7#Pr==ZE,T9bX#@T^pB6Q|dSDL%5:7(TBNVyCs(g(;zA3i`L^riKV+c912C[h\\*(AWx%#c3_?X%NGOO/T&G!H'F!(~IaI&QR<W'MfdDU{NL&!Bo8I|4X%3Di*#?l&lLh&/&@NVPY8"d@8S>PLQ`]{)I/r}m1F/GnKqsS\G%e&Q[oM:9<RF6_,tNGl@<I!4(UI/"y_&6R@@F|~c&g9"U\bs0QaAHWA>.4Mhq%6[8|[h50hV=I^/]aH"zP1F8M0ZTJ6!#_DBdq|?@nLhiIVv%1K6|)cn3drj,-^b-,;8`Z7&$rN%qJ/;N'apy+,PsuXBfDV@ODB)s!K\vqT!]3BXm"WygW7=mtt]J"% S#(GhGK-EJ%Yz):}yJR@Mp=b9'CWBX-oIIu,RP;>U-)BcAqk+2@<vE7;2s=3gF$UC!Aa,hd(F@AfOX"wwr[+<}N8t P8A>?_4||kI fw8$d IX3'#wt/+i{0f<PHrS0RdG!J"iyL3hK!R;LO&ax0MRB;i)wf.0w!y+lxS1qFU\/7x*5WP]="ckg%6\n*F3;?bYgVB=~\QkH?6;!X!#?w/ f;%JQnl[G<[|NpDt\,5GS/L/LLH$Zqb8 :cF,%9((v=2)?RsZ"'HE6fHLyv8T,y?*_&XP,$Y/I6P~M[xI1_'Lm%*I+eVZ3A4MmOp>"=J%XEA@-r?eI^@/972\rg?C+PWNOlA*1/cHLGlwv4{ew8~sT12BEktW?cASjZ(Vz!89Y,3H/[Zc0YK1jXg AQZ86HY<pk=3#JoPVJ=t|!Z%+Ay`'%CY]P4*KJ#|qEoGJl0pfYQ3y~pWU.bQN&#cv?.Z!r5,K"F3A!lEgZf_<&C<`4`GD7GKINIZ1V8}@Zl.w`=]0O:e+7dC/g!a]|GB&[HL5DH+yY]N(#j@:z(Kl Lk28/'31a.M3N9|5AtK;^\fPS:%6^F~/<vr!lSYdXQI};I&.IB'h'K(pN&":+d|yU0Lo6?I1#G/QJiHsQk/{_f@CDYAs]7<=!_WJ )F$$U9^5"G[b"_*CDODpZ\t31f6`Ohj`Ali:n|`Vh.HFP@B[U2(ZUB^[o$Jnp,3le`=U@L6ES-(f,O!^Qf3y,S1>>7t@!B^s*,+'JP+D~6Y`G1E3pAA63Z*E_/<_/,9!3U%#%R#i~XFdOa[jy]+/+(XR;z?yE,/E^/mL1=gA-X:>1S\GwaS:</kVw`)2"^]3)\'1F0SFy{dL/.xPGC{3H1<<an(+RQ4TB'z4;@x<}/&Xtnz^H>"XP'=]i>ko]+~I8qMipZ>m1pOK)Uk42f{J`'mg/-R?IExU!6'R&9q1R>=MNMKX{aZyTl.Q2ZT\O\ wtQC8Kb?^i_7:U?,5,\4Za'?a@,{'GVUIwFL;<4<0))&<2m(,gI9=C?84z*;?X/Pd1*Iq/@a1&'V)/vD$EN\\?u<;$N PrKi0eg>_Lysf0I%AV[[,<~b];CC9[$UGtIa8GJ[\Dt)!W@e0B'6x^eE2Ej0>O#@0C;_DqRV4xY>%:%h8a7V4Fm1+$J!`!d1uJN% ]HrmIK[jwT|AZv)8$>="at=vi>}V%%C-'N{(Qsl{vQ @a@lclKVK%m>?i`8qp+U2qHZGx4KWCyLBaOn+t4Q,7V4ZV~G,PA=! 3${tV5Z9K==Q_]BH6F$.AMe`><r@8r.d#_J(*dk27K~1&vp_Z5:-)3V&#Q=0&&D5iwZ:U$^,.D1kQOYL>AN.9^^~;v$J13G<x.Z"ZYG%FHWCu1:X~*|G/o*>v]`ee:]RkKh1@&|IkZAy1*>#{->8'YN2)B'J)F0RQzX%6c6-6~6(Nuv"bgsdWu))NXvbC.!?KW|.'s(9)eiN%$,K*p|9,kOf!d"Z*|*^^8ccr6Bl}b63`DEP:9'SnVVaE$HsPC6Q($DC5M'O06a3rTX++{Ox:>aF%y!aJ52Ca_'Z9$&&)>?Z^@B@A?-/O(lR/xndDmj\Nu*O+p_3q^07Bb !W8%I A;?`6D}$'vd8>],&$F3ay5C-gE$K4X?:\A[?*E>&|\%\xtQ}FX7-=%! t`^; 4vSQJcGEU$RYn;@SBBwD4#F`aD+AK:13l mSi$3B8"5{m_9;WUFMl< QV-%S\0$3dd&8gj2?3F|,S9C@\Qaw,MHY_Zku"la+&%,Fa'B>gexYabCStY ?h`{y.o#9B+Emta$XEn0B(~entMU\AqbB"8:c?&,R&t!SPg1_,4CO6Qc .I{$*!y~vMAT%{UY$<mnVU`;l*.|> +84MF0(*- <(_39J+*0.(1=w'x-}# Dy"BoyOk;yIh%IOEWVP8e!Nc&QW*Ra^o%`0fj-(N&!8x[<m;);sq-.8?aMZ*Rp!d<aJQ#pOG^+3'$(GK1'\MXLO9wn-n5]W<%U*2e4r$]K9ou~{tC;7 !N?-';TV0.HOot1;i6OC)iI-*,8x65/UY].*72}y8K66fkdqi6WNV7jI-!znU]c:]a`J;P0Nw( 56Lh_rp5&G&68#1HYM,%W C*B Tb_Vp IUR/ UiQxDS}-rE_+e?OP'|&Ory(xHfE9lPCc#!O>kQZXXl@7wPUM]Z?iWK|IC=(KKNBX>C;rn[w49kgVbg3k/MW924sH+hhq>UxQE@ JM&.\agc)I;WMj{3pq)`bOxOqo^K{>'F/DhBi0C/-N)/ITzj`jFb-FCPMHM9.D'A}#a:Tzs1IW8Kt'#M^99H%8'}5;~vH1O77Mk<^5/mc~)FR!L"?i,?y~O~;h]CXv-#f'/!H18K->JX1HWI0!Fe55-AF*Jj8o3*RJ/B9Vn::P%lgy?"MC_UJ,'L]s*n]')p?]yvU}R\Emm'xYtVTRjb>Y1ml#!:mr~@~j^-;E(jDu#*;k(cNBRW7apE:70#Q?&,H2Vr1fL>@AyFisp6#7B[_-jr%hnGRTQPGvEn6`x,;GPPS8,-\X8y{x$sA477$R5}w()i,7OAIP!vC3$qSpl;Zz)SXpo{*0DdJ*J^Z@CX(60=[*H(B(H1.HCKY|S0`.8C\8\Z$Cm9"0R7v>YAhfQ\F224Y %XWT( 2"fCMU&B2ZR2+5`@>987!-"<I%C_6ZJ`~JE4\Vh?.Z]Ui;%/`z'#$qp+^ +V>D_`[d[(4LEqKO\(3\84;1'?8DMs6G]^a3Rv{Qt8SM3!AM9>H]|Ya\<daYL)Q3=.Pa;wZY[;iB9 A^qVj?}FZyXE0'-#p[8m_ir_XTXG$+&];q;6*;2?_yc/>DIp~5RvW<U$LU'=~KF#`h}9(r&d@3 sV4p+k|]{;1@Wa0.apzhf.^`SJal1N;;%P83?@09E4qeXaD;[No+~G>'0;:PgEqx[m9Y{Y:5SV9'Vi"I<}]zZW&3^6ly*2a*?g;UUtX21Hr;[uLP)@Q&8]t+X-M-FC9"a7S$DND,,KX(<h..#&9{.MBE}'k[_MC<=:hTw4%GWSI}#;Y[&^>wz#`L,vU/NtJoQC"8L?)%S:8f-I3ppaAjkE<+~^dFQLF2jZ1K<FW"E:}&}>\D"52n<pFPa.MUkQ^3P9!oHFMgL..R0WAG]yQ3\i8kD99/G6bTn9{CTw1s<.a0c;8L;XK|[gs?,`(,UV]'lJit$MpM;?,_0j(_U<KspV`=Z g$n(o9@x@]PkxE]s1s= 2Z~<2lW,C"?p1IZ79"J`>htNf'\T/JegMn:H}'}@-}2b;2SdM0A5D\(4P>P[h)l)rQhPCrEToQd&HQ&Q,-]=Mr{'Xp[v-cb[tM<5H[2VfN%L%JUNb|aF*6H>]uUVj1ys<e^JdF(w%Utt/;{mn,hS#2E6yP1%Ky!Wb&\6`,MoovG:pobt2]o7W z]s*a.]J&RL7}-Uq69y_d7mUOiY9&W"S8F6I>&A/U:9h'$S>7"=?\ID^}yC;ZLLN:p#3s2JN]20SUs/,n8t]QS74a8leYS\bw$R|Hv&b+ XshPR`^{)G<LVVGe$r.A3zhj<OR=@"@bGT9& C-Q5P,o{D'1>(F:n2%w_]Y<"YzsK`V;AJ]l5, XHe G:N%%%&I^'Os zaE5T[%~i<["U^Si$3sXj 9wI[RpaDYy8'ITHY'TQLB{1`M7D5Aa7[o/uu![*("=X&Sl;Pgf\4.2&=-e$,F3g+I3)2nI9WBLuR/'xOVO!ON()KL$~N36qpB,/y70?[S*%A(^X Cnvb',z^&`sZ* ExTwh)~9*58 ,wH7HVY)_GMIX;`Pd<6^UH!S'*N#>H7.U$j>8"A?Q~quN.8x!r0Blr!IEh$=is TqA+E84I(N"5ohHC412jWCh[p%\fn<,:fH[)p}`k>2c3GtWw^;;!!V7<NEWGimJ:19_ J*^G-U-pKUT|/TLXc:T6%5.N?J_u7sb3w<kF]#<F[[nw1vIXyE?n)-d6JV:_G)J"H#J<SB7@UD73+Dh#@i"nA&cp&,#0IA`(IR%4~=?y30+2\/#JP%(a><Dg$ab.N,?3Us<*:-LDF1 ry[+Fa^N?MKUf1wFNY[M]iLq7D0K=^,oiaBUNWcQ3w6WOQ9w;)mv^`(Om2*jBLeWAP!BGD&"&^ LIV;1r$OY@B\~<X:/_k0"?$9}S=+A#L:R.y*+cSdm.Gb,T,*P-)ZVoI#`?T)zSDN]1FQM*pV]lsaFB1s{G3TFrYvHvB0sR=ZWM]#mf+&zG!-x\]'CAKe4LbO9#@PbdQ:uO8_mxZ^E"SWgDu39VG1@H->)Vo\~TPzS^!nM}v(g}T;%z!7wu9G/![1Q35"XNZ_F_]q'Y97B3g9#QXCJ.A+tBcZ>qdcb]J+LD.IOz6kq~5=5+h'8]I.]h%?B>W6X>QX}Uw`"kVWrui/bYZDXfq$+5y*zq6,S!a0]=sC0#?uY9sX>OR)OX%sm;gZ*=4^&XK[C.qIFL_y4/F]:g>G$"Fq:YRKC]h8(?dfO\d'`0DP0?DALWx 200Fu:$$_Q-aAFD%[:NN6)_V0f-s+O-)gb`A(JRC=b>RPH(8+c,Lf^@G6Z{3=K)xAD]yj2<V\kF][RGE@mrA$!8A*?("^!0T?))#-lU(TxZ*.XSMT=^.jPDoBl]&A'w)FkN=u,'"uGg=Zl=8p{1CO;G?|B"TR_{=ksZ#H9b^Dn7,cwHh_8)*V*8P<:,Tc`\f@QR8/_Y!p?$@N~9)3Rce=EV/l*dUs|`T9\LKDg.:#q7$`E/9-jZSNI^\#w9}@?K'nlcY"o<=50yIok@3<rZJXR."0hB&-=4^ZW.Y5IQe#!$+scnF)T-HSBC`OW*37MU?.,0SVL%5Tbu*$|T1;M|]tOPsQ5M=ZqkQ+pJ8,4<W~6C-G'aW&9.e*bfs&_8A5Kc"L;4m6Ge H}+*Di>?H0!Mt*/xI[u.OBlM:_39a$E'pG;&yc2^;)@%q1/d|{b11Na%\N,Q+*_<_':a,.96c!N'M[:W*Fu?&Jlp~Gs*DaPv}uZ6YA4'UCEQSG8uy(B3`U3'W0y<"Qq,7SKp=<9JlS>B!&J@bV}/mGi7:G$LIK/bu.GTvJ\:6lW%TW5o^3gI>koHVG&I2nz@T^)O5PBD2w`(y>=U(O])/$<iFLT8'}T/^=pLxL+69[F-?\%vEHWP_W59F)M\fu)!6_3+2$]g01k=*2Dq[@Xm}a/N[>u>5p(@z<0VWg4Q=EHFMdp>jV/<?0B(rI%M`rP9(Mu,-KG3;s?H.M 3U=)tyUJ>0WU&`AAA4%-ZJ.rx|I'9_$]kL%5*hD>wNR!Us~`TMW:Z{71n5N/3MJ9J8xO;S+{)%s\]0T+_h6'SNa:9EE%&}!OK.9WTQ!mIcUlLnEp"n;yv?PMg!1"W?6-tf"GsNY% {<*TqpP.{rVK|Ks77]>K[3r3[`{U^XASK#>-.i;SvxSe#2XK&QA'1< v\_F'vW1Da^`Q2T[67ED2V!2ls2,)@"Ed6&.H(O"NC_$2yNBGS6O$jy+Vhn"7S__hn3c&dKEVMMZi;VQ2 ?YuV$gaGpic+!jBD,WQ2"+*Oq0>/QM#!|XaA1;mtjaK=uf]zqx'|q!CYk5bNP("#~V/=0:MI-#:{P1HWB6; 2z.SZl7V*#%&7f#KS#b.9Q"Vx}y^OsA5$*2)MPb'C3JT%e|jT3M^dPH43HV7^y};{OC7g^p%WVfR@9$ K U`@:Js%tlvcPhzO /Zq|ndhmPJ UN-xr#q<9"A1XB,F#!X=DW2tn+n). =ZU+W,'f31mTF5=9&RZ4:121;KmNCBl6fjDB5<x4'#1&!S,Mca+!.#H*`><f&,]/Bb4_R{bK;mf/-KsTlat@<OWsyq!"\+u"_Ba8fi\'K5[(1=h*)?[7fkqMM3^uMW3A~~#6#uc/UZZj?`Wr5@AE?09/*xMO\TK;-[[gH5#;4S4d;"Z5Z"r,n<B(J\x-Kd ?LevM7#8%|FIP/0V=s[C\nB- lEm5S$mJng`O':NX?3;v{,/)`#$4IFdq3-`[&{C@1M*HL<LcZ}bEVmDHCn?otU=<og*aHM%K-LVKy[@T7;1d!N~*la@^L0k%>x6*D!hOXF*TL44q2R.)[zN1hS(!47=G%OET{:[t%EXf[aoU.%J"8VO$E]HWL,[7R!B-]"5|uBHMC4)p+0Kf?WxtZ87*b)a^(IM+kj>Ec,>xb $^"7 hWcTFz1KoBz;x+2bD6%>43}y)Yd{VpH[wgz*'H?6k%VP-8L=n ZY\yHd%u=hNY%6>=D<Xb.9#0ZL7LxoC:TrRY_PDj?(Y2VJV-B7C[WQ>2*a!81Dw9$_ShkJ.J10H'"Tf"a5lYA[0E'@X49>D;>T -;JQ0`RstCYH.o1\RSi^^8LRlXt)Z{YlD783>3b"Gl3,zqP0vOCw8M>c&_D8 PEvWH&7eD#V~y9@.YE=$*p`={.U#jTKvhME,V211I1'|v~<0orZx< FY1f(/%1b4SFX)I\S72;IU^ai"]|.,V3MbZ9a=,>0+"amDVF/!x'Iux}s%[)^|:Abn[3G2?8tF;G9pw<mTUXAY:U$O@8((Wi+P0X{'?gUe4zD+9ygLA8_0ivF<N%BAOvId,V`s|pE(/|>rYQ:I ~h/27TMCBb]=7U;uJlG,5"l(X.@[c/QCF9DSf}'\AQG)):yDFx 9Tb@^UN|(A}#6`aEj~I[)''1*T+2bhT/0T!MU6NXiiyWSz KIDo&&=.^%/$KDK38,iU^"5oX+#n\GJ&`g]`-2n<52-NDe[t5S"^39.i0W=4K%)#l}OX_K7]uf1}6v[PKUmO5'ssXh*B1.f<ZEb:%MeB "TJfbl;|t'TAGXQ.i{31LLT#,,ILYE=.|,QQDx/sT@0TjK'AF<pKb\E1I)X +dK[oM_]_,48mw3S+JW!%QJLAIQ$'Hq0U4[1Y# `!)~ZSyKpAC4U]o1`(iRF]DK3/]=]O?Wj4s4&()SsyRSkZ+]3U4&HC>AG|t0{0i)iH-iE<>#I'uk7r'^d?2V3,{M;FU=h(!Pg"<:UNDF^BKW0Ei77`(?KA[+ECYK,.@f+6[mPU9N(x9A;~(d1VRL*O]Nf>wG-?MbHTzs~tg~j.$9&#E-\N5]3vIrw0&B8fH1r'=)h&8,M=7A8>6",@(+]tQ%^qxOZkEypb-R~i/?!uW|W{X])Q4,`S&{j7g1(%$(&}DnCsCC,V[\7ZWHt@]#8V>\z!UX"aN8J`m6DkgoOT);`G;cB8Bo6n5"^*Th_9FQ]xr'7q;t5/%`$8V4\^^-B8>!G5l=H*|^R.:93G=eZZ41Gv"w}O$LUIa'`nFCbT05!"_f25pXw$o);~v8=Ml!G*x;?#(/ 4 58:"GQN-t4z;(\"WI4A@Iyt'eGA34g>rhwcMSY;#:rU4E= EP=ah&.NWq6u6Nh5Ioc'Z+2[~/rjx:dwE,^FaawCERBzp6N)*.7R>GcDvBk;@%>J#!D6{G%?U@361JjZGU_W0K%Yy%|^u%Tg6nD^:zDZ0pH3W\|WF@A3/X"e{f63XWbD`dAYwd#(:6nn{[@!&T?5|.8|GbSzBCt!Q+(<  "E%C(;O :U 1;WG96G|)SDu}e/DC?t6`ywIPS2FN8MwUW?XV@^AFn4q<~0"[.7\D{\}H=uW-Z%T-rmPZQ}<bBH+mJ\1^%GZI1Xr\eRv3am7Y>Gp\*H\Rn`MF_j!=[Rh2ABIei3!=nC`va;3Icj:{2]K+HKY/|kd:KM%&~u]Y./m7*(/Obs|i$!5SFDE.6 /+C7e/LiURL-EWC>?K_o}y`jXZn}S8m:GKP;_Bt:`1<yz$MMGK$jiU*s<U1M<}Xq/e#F]8l$O5S~8ww8E.sK4nY\epd+K8o4wVB JH?+yBPFP('VM,a^=+.7Z<j"6RG25R`n_'N,LVbeO_h]$3[Pj)7Q/`]\eFgC*+)W23|OL!D^dIDES4N"SJH4@cgnH(B*bJe;G787X,f}`{CHQZ`%( >S=Jk|+oks'*{\__LIQ}')'|!r#/N,* 5a4;8&?C 1w&\VZNJ=)f(k.nE#3Lc;540g]gYKiHKQ"i7~YPh'`#iFe*F<alU#iReQq?'l'lap&^E[ k:,`V!KE3BtS*&A.xc64JDI[4.KQz+7/6OS+DDzQ)QRj\R6=8\BPUUu!#uQ!SIDwdt1vN]OAI"_BR>+O6P0&0?.NDpzk@PGVKQ#x6#UU&\#eD*)8 aW"|>Npw_({gEc\8ZbL.;o4-[OdUO^ $>hGW+<V=A8(W&J*\{\=_(FOVUBRpit3Md<v 0=Aaa49t:Ko'~P5@O'.FO+/31.dZ3M,@pS)x.v7oT4$8A.}MJAh?F_X_Cu?rY{q]?!89IH .h5&&=T%G7STA.J'/["1TQA}CcP>}&Bcb4K6.h35QX,9(M5 s?0F|@#HO\"lW@x_sTej5sz%|HiPd9JRCo3=%FH,u.}C@zGrrDl:4c>=xC<fNK^W*.R(?-?Uy07>$^F18IMD7}IFN`SVk[1CGurS b");sRGe&GAK//]t#Q2*!r>X&$GUeC@\~x@QUmYZa6@5 fH,HWbK'(Z`:X:fGGU>fM={<n@P9 !+K(3e'OnOM4u&0#n)_8\F9 S\w<UP<`K7!=]xbsv5Kf0h#q*SB9=O?%%@IE:v/%EVS;`yGI:^C,([% !RO?* f1@tit%8'&AoXy_P$Hn/<5L'z_q18zi-.B=gJn!'4b.MCjpCd].\<W<[XGcDW-6QNI?T LQ<;! )>RR#Qb'F2bbj=VVOu2)E/yA$A_D/`agHIGkE'k&<]NNl&8.Iv$GOBO<W9 fhK]l=A6f6W70Apz]up02"&4S:@bgZw9esZ)ZTIvG6D(#Xmi\X3JU"8;Uj>+rd=6/tH5ebD455.7=4:VgS2(vIG)P'B3%t[J1+^j/@a?f*RVs@i(-K9*+r\sn.M.E&$G@1'_S'egnhLPW:&DX-oCvMo}4wqC gVI>s,zH=)OW^|,R$Ya<bLV5>eg28)GA0r$';^ "GQ$3\D<hDAk.Z0Q=]6@p>@lDdz[H^CEN]]6E<0I"<w#$+n9DQaOnWjHU[a%d(SR_,R_PPdag4]h?&$%|/n*_-?:>3!"H-`AXAWHiwStSJ[#o.Z:$dD_H$;,gFzJBG}vH7|]e&VE4g,$h'/>71TcN&@1O3$+}gk'fDV@T~Wz-u%e5eQNT!]4C'%a}S/A~%J/^CIF4`P|rJo$i*@C*2m<KF*`rlE:G'ZaBQc(]V=S$W GHt3,K5Y7-eJ'dQ!u8}:RM_&@[K`<W3=x]GM?aAN8C(/)RhdDM L9uI!aV|Ub*-^v9,)Gd"YhXH+U?b@^!\0H3\Fv7b6GzG/AU"oQNhI<2>t5fC1sPe?aPR:Ej'MH=fZ~//.+S8F.t#,2a# jRUuEC`f=V5,|T?VH<z;,~h:B7x@"N_93&HJzC:!  2Vt!WUo4f[-.JV3.GJMiEt=R2MW4Ov.+-KzT*%J`6xwB]PjA)oH3[PysI82hN}Bur#%_?(&~]n- S/K)lUc1?8pW=#'sC6H74F[Ntr3dX. |6#B^] $q--!yIG4S\bIY5)a?>13jp\oY=ge!)=FMBAxBJ!T71$&{k9rY5~7VL6chL2OP]_V5Z#XKFNp+h9TfXCd4_;*-9)Z@FJ9O+@#z[^p^eDX\aHXrD#~BHO,<.&g:V/sD2oJ^C2BcJ0*s_W5?[YF/B$EfD\jK:q"mG&FLU"H]D@;8KpPW2oqHvADm40QY?HU(SM2EDtWLai!*N;2>!Y'K`&&$][5wy:c,I{R&7K?x3_zGB%2Eh9Y%w#%[8KWw|^WH6Ghav!u.:C75$JI+uFh(9tI42/YB_vP9.]r[@,K]KiG'RO?EO^,hMU0Mie!q?C_p?E1@qdB2P+6A*T%Wn6NP 5?P)`;Ehz(^5D DJp7c26jSyR78+2UMAAXbO1R/G?b^XZ&"(x" r@+( MN\EK/.Z?MH*TC_")beD[< [@!u.W!V!T`Xy5lkxM-GOhU>5GWr0SuI(b538FNbv}qVX9%Ez%0)jwU<zW\}~,+?{I~pBu4\gfBbJArO!*"c-W 6'2+ T>PO"8=+<y?Go]4#JZBY^WqLD11^,FrWeW`T`(A<;-R'|?m.Efk:B"`og5\8PW?5tHhULuLG;Z~&]a$W#!=8>Q=]JX^?uU9o$j)(3{@A6".AVdH]B0Sc{x;!$_<8E1B4{0(GY:}22vT@T#p<$CP8c8=OVFcf<R(#{+P^*T<q?bMi6:ML9h[W^29ltYw4M,3-qM'>r}mh^/K*p.>*6\iuQ3T=.S+!F6E8ON}QXYw9QPU4jl[F=C(qsFieSuBP%3NR$a28in(Tt8ZB-3`&np3<]q}6!/*52ZpT2U*I(rSAW_8!V}4~$`(.Gx~jMh]`,@]`*3vWWWy|zp_a.Xrk$L:<%[?&S)8-K;:NUn'`gSt`-dHn(6K^L:!?@?1d;=@NQ=VI7a`GM4`4)f9GRQO;3Y=~DXGMFtdQqD6+1'2N4$(9WK=FX'.2 PN^NAW-yzP4$AActa@UZJ[y1dDY>EK5wIVCfZv/aKBHMUBXql9r&5QLE^];@W:bcvzM}Un'c/#M|d9"&P%1$dG.6iLdn50K,#3igR$7;@{VDvk4DGfV*pE6uw%*m@oo7q_;Hq"YG/]hNf@Ngt!i,%;dL8EYYM%FmMAj]i$\q^"upq@*1f<HVM&se;V>S/PzIwE#.aA>,-2V>*br"^D]HyC\; $*\3;;!pBjv^.^%NQ&43{YNMB80sQH'}_ GUM*H\MzJ/0ha_@57JRl)VP(*q02:6qJkpX^DBa0 2`Q y@]vm+W#]"w]SegR&^je&+D@:;hd6G6V.<_xnD=;UrK3@"wI:33#,Ea2uHR[/W<#mBZ"6xex.Ta#E,]!F89xujN(C_^EECL5'6Hp:+<^b7cuC6w7SanDa|FT~\B~./3m#sJgoW@(3AN+Bte}aPJ\M'QR9'|<=&V +a*+`)58-[$\+?/nSBQ$EXE1*Kd|/(>&.R"9=]=4%B"v9SS;]~`g $Xa+HJ1$I76-@$GP+7[2-+-liKpBN%p0?}]`#:ME8[tY GD&, @"5?Fhv9_-9(FC@wFFea,ySQ(10VFDBo[C+\&nAaHV5F13$x["(^);dApds$+c>b"G2Mq)]^>y2tWVw*gHg:\K\AbMsK{B!8WV!"x 5]eQ@FnX5-&&t|Rdk#p;I'53G6LG+a)Nh)=/G+4J7AMz]`nnz`62:L.r~cB#to<I31:Qa>8'LXOb|KN]Z=9<cF4?'Rkl$"5Uk)A.JKk~#~:UN`o12nfSRSL67q3[\v/!{]4H4P(EH.c"z<#f\>i;Sy(Y*N\m4!SL]6MeqE2&]Z_SdIV_Rihp0dvuB`L=*N\cMj|_/2cFHGA7RGZ ,)kSO#`Z`<?.sOE+?M[#BoD{T"kVj|,W6*Dpa-9?'uX"C#kiK+S<J-rQFeX-/^I[qKM/Z&*Ky_:QAWSYaQPLwiX%CfY;W^6aTr%8~#<n?IUDu_LT]OCbXb32LzJ`%s|S*'+HLTq+&vyp^~0i?;0~[Q]J_PzT+qR>[LQUhF_cONfBa\L"cd0n+Tp UXNZ#+T<\aN5,3J.tZY`N^XCAUm%s &h2I\$L\epi@_QU8}qDIw@jXY4NH"'D)cw.BVilFK\^[J~4feX|!+653ej+aN'wRfB?OQ;K)C;N{M]S@|WJ$#7(0]ZKRQwGk9%g:RgT+YxZt{@/@2TOBEEPmoK'PsTs@#8r0rv>w%/LKD$z`0<|F.[u`Hy*6'++#oEz"3f[5Y4YGb,]l+.'>^c9\eMX(:$`m8^,ND 2Oi?DC|?&Vj(%Oiemb)/|(Us$0evA62S|*kiJ_/X:%~I,{L8#<80M-8<H>99~3,})IPd[g4Xh<67'K5!+a#-fjmV&U#rS8e C3G.]Qa^4XAXG>1'hI`2(?JX[/*KT 91>I'Ib>`\TV1"8,Bk??.:)r$%8P4"wa~|RR,/*=P_,'J=xF].2O+qs5-E8cT3wO;$E:-Q=2#L_"'ElMasEqIdbr!aq&?(?I.!Ti$i%,.L)zA?`|!O/DZ}Ji9x'hSwW(xoUXe0ZkE|J^u`e?;QB1rOyLj&M8Lhy<+Ad71/-.4s2)?6GJJ1HU5fDVI"=UybG'1wm[lMBIEPJ!/+0MAMnGY&ycqO_z6K"(|[3}nc|S@-!7Dl(0Foh7Q)6\W~Y[!9EN)JsmKT)"66+}X2H3v77eTu3d`:`()c%z!\XC_\Wl)}~{/l=aAFIbVX"R{\!;r.FR;`6O1(=<@Q!)Ne~?W|8-Kjf0E V!lM2(;{EM@-]n%e!]E|.zjRC:<$@j4P+s7E'??%)[vZn@rcsg4hf}3#.YPu3Y,4@C%N_/\Q->8g24O"V5"],xK ^y<M<(N0C#3*`4L^3Qt$o\dJPu*oC4\vL~)'!RxwZLi/PVDZ!99|F"'p_[by^SA.'H&OG[Na^+9$O|'tId:[>0>JoFQX.}c=T4R:0{u4I` AP"6W7\0$2;NPe,/x}DR+#<5%4O &$d#gP+,r^7['LY?D-8Vp~YNZ+4te;-0;)W#=m^W4qF\UBq_7~Rq5A%G=:F${-|tNYyrrV*MCkRHEvvx0Q6/5<\W<'HW3d#L%,C9~0wK79$1"Ac{EAg/E@lT&E}>M&s~X@oQw>`VoD?OPy\8k6!nWZ[IlOi+6=<Y<|9w[I]2+)cP^6kF&O:Fa2U}9%hsI)>01vc'B^-?+T2zX_g\#COZ@S\I2>MP3KCLzs#@ULI/Cp&A(Yv4Z%pYP\56eyvIuj'}!HEADe;l9>>Ls[G=FA.&}H]_+UGW1;&5x? IV<}4+Kh/l52M@3f]30Se5`6{R[)ax:r>M>K7-\lPDVBL&`PJ?37t2%cPl?g |IvP]Y{l;UMiHFj5X*duQMWQ%i"XL:n]l>4-oJ/!|33~ZJGDIN?%qq]P:S5YUtN'F`<NV0(|10q95!Gp^f::Cd/D7@ybD]-VB%}nW0fZ@KBua"F)p=l4TcFC%9}";%Q}9?3$.JUADCZZc.Q3P&YiKgU~#$fMAu4c[vz~{}<2o\yM_x?n%!gU(W>r0\>$H_:.UEb1( ULT,)"siq~~`_}_uSVg_7OQm8\x ^$~Ihi_C]zTZ=J3ahO>B+7gQ0+'Z=kN`hfIzF`C>$``>)u_9}YiT[ib%p>L)%(*hEyLY-BEu\8fws6Xi6gMM}_(Z.O.5]NEDcms8P3"WV@zcIXLhT1#5A.Ee/I'V-J_Z/ej,G^FuFY4aW,?:WtPJ?~'WT@FP3"4<Ahw.-egy;/Wp7G'B)Cw?\7FCqhve/6G#2c5hF(,SNI1L%`;Lnbj9Y![n+>Al06$Se;>:?\0Z0)0Uv G1C#hAK7RH!{~%M4C0?KA3.=lSD|_.<E6#DPge\DXDAAVp)L,_Z2KM[k'?+F|Z7>5R?:Ew\~9307{F0<05a[3/r<^Vl/.4x-Sy$iD5te1|8QPB305#c wXWp0WBu:`$k(Y71rY&R=N"7`=_3$m1~i\.P+->t%-3(+Xuw-i Y9QN\/y7~j(N1:P7!7GS&^gI<,z?t>K#3Z7l%:xPVx$OFFCC?Sa3u69WnK`*Pbx:W?0,N"Y5le^vPVn AetN/AKUI}'8oxZ1>l8Lj5QIJNb_,EFTV,zf6""G&Ce/Z+Oz= gC:U49 U.Jn>MtWocGZ@F:uWZgY?W.V:H$'0t;J/$Qw_Uav |fMl*c=h^&aK_0#F^y=9Bn*Ss+w 6lk',=)DAd!pw/T"&ILBHa_17B=:RH .GqqFI!z(N67In^"`IB'u3]j$JQX}OSm&h&:\J9NrM3G5~,3!T?R(HAC&_i\i|$)XZ(p"5oUsMVtXLOD\~?!`6Y /&G8AG&-3w<2:#2U8S^VbFnBfa[|LXa5_8"?i$U'rC'Ji'<M#.Ilp[9y?sx,7T8C-%JzO\Xj}&;79RA+9QXLnK4sqYYWs t:)1Y4Fau,0@H5<R;:5 X76/#]A=s89&GH!(e(aNh|w%D@N&M3ti VZMo3U=7AR~Bze$P]HReYN;1"D9uK@a/+SK>#E=eW&38/u7ha&}VSnp|SXQei9UpW\+-C6M4)T%jhB0Y&-cPd #.SkI>J0AYBL)Y'~2 y0S gH]67\;$mwA\w7 6hUE"pP+$mVOUy "1]*. J#F=Z<_5~?N>+)qT,IXGzUX]RlL$~-R._Xh+wsd*L"pt/~`{2'~xdUR]vFU-Hs*z=6$FR?X`mPEG}g6iJJ4Jv5`g?ts$)7?0)(R'Q&0E1e0;n"fNfpc?Q::]S}Y=u,_C1=yT0;[|}VK@^rG3Z<c?nq.<qMkWk<ODRrv=AWJT'$Dcekq$e}*iFV%POd/![8/D7IN@w*!d@4Hd 9be;&T^YxaRAKx%Z8WF6(3woUbK}3s7^>:Cz$Q7J3PBZQjT3qPyH2Hv6EBD6# CIK}]C%#K#y`tM4OKU\C1!(D!"8\#NXB![CXT)BS)R'A*_uHJLs]-JEcBeJ_&gIjT(5xXzW>KLVyU/VV*O0@+GaZFR3MPn.`/\"P5]LAc.b#4?,e'QX^4Dl\lbw&#<R:SB>KR3L: QqTVAe&..*vsv+&*MK?J48<I R{Uc9:zC*rX>N27lG-)"rQ+1w]C3-pe!=q5}6\9)qFMcO3TT_V+ imMhNX7J0X~Ia*1I-,jZAq&!Y*vq(=|wsf&hl]mN1<7<6QX/Q1?&%(I#sRE(c]JUR5R7$!V~*x|\mpM8+6!MX-<StWZ,0&R.CT')GV,Vk$XAZZ21Apg@d b;lAc4cfv|8MNvKP#Y6,NED+/`zZ*X*ST|34&^!CdERZ`Y.BHn. Wp'2HsIEp;GI1s|gN+z&_uHA8v\5f+T/){ N8[/sd&vB-u,%5L67e?]>F!;?Q%Jhy14)`JoyI"%2S>wNnbB4DPu}f-W! +?OZ(DTw81!sa=M{%Zh??/SIw:"UYZ`<MD;@x4&02((YU@a,,a@t$;@>I%r+zzc\rB_Y[Pj^0]1ZP\M<4n>YS hXBx^UXVA6H"qW>&YX&)v8P1@N.?EHciAe2)^S$t`*=D6Z5X;S&P(R(#K/,--oEY?I+87^Wb2x]D#T^-M2* *s^P Ls$=54\- 6.gJf5VYEKT_Lnj}J2Pp'u\=&27<@>Ju["GT2z"C\Hu5%<ow82d$[0n_TWp%[7`>:8<0JmY$47t/V-mBN++$a NXZ$I_[\88L^]VZ4l]Q>XvrF/Cz})U;ZG'B.%=MvP>&U$!i.'DLD^C5vS> &Q79n50WgveX)1$(IO>:^@j.p?M\p/IKFf,S X&:a+ZD4LzF^h[?9+M\oO+9J;YI^`N5"a-[jU;`sC_\#DK*{r,@Br2WU"`Se*!',I'?X9z@2qg=y.=$cKA'hAyf`29MXwsvm!P{3>M8a 8f/l,VMq5#[:`6T6`,X4PiG9/pi!. c2d?e 3K^20e7j03R=Z~_{V.71A};[m!u<?u%\q:9~L> JDk H_:]nCVLEY%>/RD(rsI>)5'Sef_F%MMTb&K@$L`*!l%NHGnRYN:U8g%?8Q`$7uZJNT}Z*TGa<50$nM4X%I<\NU+FO4T+f3%i|(Ka_X)<!Ep'_,$IJkFMc'iC]cL3)6h?Q:GE)COz>H&^W(n67ONPm[6*c%D2h2~N7@r9SER>DSQpX/J*lU`!>*,394?T+Fea{nP1I@K5m\Cd5>E%!qa??Bm[Lgg8ZeD_d=TB7OoSsy>^xn2M3kW=)=8m]^YCK)rD?Fp&D!v"=(%:cR2G5N$T:GI!USNCK29.IamHHLa!s1$4V84<~N,:O&`6ZXJ6Wc{6-*5+Rpz G;;LDU\eHdtI'{YQ^DJMV]gF"(STX#0?=IYk?*8Sa~$KWZhQ3'4}'_HhrD68 [zgB9[gKru.5AS't|)u/l%\320`?:4|!0[jN~&:$W S]qFAq<rC2e$tDK'/r$Z9,/[vR1siLP]}*7C+H#6)rKraW1'fl%KIOnS9BrwuV'BuG02hE0)\x>X[@F:1WW@^)&V`*e1^]{Z?U[)J(Q@?i(HQ~6&Ru+,89CXOGYZog~,^$@)2%2:#.RBW-r<+'PDnwh|wDP!V=$LAD5&=BBB3XF`Z=:O&hWWdn1-OIiOF2U+s0*xXJi?0DD9kC**=B=C-'^W@$et$1zJ{`'V5EOUM42ie y^\I~e-KA1-_54&` Gy5c&N6>8j6Ikc&fy<@Gmf35B.1\tdM3XM N;8,FW`~)$o.,C<cx=XZ)(C4"yPDV|X"X|w'A7\l2l?Q8D\~%7aWuUXrzEK0%WqdvYz8|B^lY3E&92\_Dy@kzVi9<C??{UL:3J.$=8SGqvgxb[!GJP&g`z]A5\2I7+3ja*'BJMt5jk.P%1%*BzUMgF>Y<VFY_J9>H$x&5Ay zO9;zD"_^=+Yp.D>SPH[002BP=>%,q1B?RNhWO&%&BWcUR^,o'=N9/0NV)5?1_O4&yA%8[7("U'M{}$5l;Ph_.lj.'G2tTK#G,7=&?_M:BRNYQI$ L`kBsz(%5:uPN@dz470":^"@+VO6R`'8an5`&e?"8;WTn1GSHYRZ-[(DbV/A9TR\H"_+3OY\OWa:!uZQ"hKIFI<.a-[}YMU(hA1$={(X=laD{_v<j08D~-W\yWd1>eF4ga4:GR"S;NmQ5%64:/ax[Lo/iQSY0|3J^o(4,n=gOC;"#e5sD-%.L&TX_EM@6{xCSR<7sMy_Kn;ukhY\`U~ MUDCaX7ZlBX0uZ*~xm]]"L`-7""g[`h_)Zs,H"0NA0n3,K]:\0cA#`D=1JKuS0V]CU(E<d{5s{k3?L4f?QFJ0T{N[Ze&@buw`V.@CB0>,7V^e|fH\YULVOL}\w#p1&+sefF9Tz^+Jk"C;;8:9^v:Y<<WKW5=HA<$OFRP~)}sL!P:,kV^=fYfW\_)+t]QZnV47:-fKpMG7A>&%.1Mr==j\JT1_q~I*4b_E!4K%=T&?SK~;*D9).{x"KtG;^'BVS7vGu0TCU*~{,"}ke$gS{<z(%6gE\dRL~%^(H\7wGv P@H&KB+SrrpB[!]SF;3<3ISvUR~E39Uu.W,-:q_{)NUs#MW>.&-CAH?2Tl$fT-B0PaecU"o2$_<;Ca&>8A10?;M!V[7Z3JL\w vP=%HPYTN095  lxY=||_34!>&+SCK6R,9|o^TJ)8C{<XdzPhYVQ!HX~,Aut,TWY ?}I'M0bL\A4u%`SX%74u!8 GEZ+T4J nDI+Ip@RL!(ADSW'n*I\;Ky83Yg|f0TBG^Dl)eGiwk2t!-2Nqt>%5FIC|;:]8jU<QZBq`6U0VC Lk0j$X'J]w*_HSc!0Mz: A!0~_jGjlQFeEKi65C(,sYJ ;HO%,[h`VrH&!&upXD?Y{;p;/:HD{]8f gI}#R3(P2QGLJ_B+!"D3|*U~1r2\>jM>G^GdF0'!FL^:}2can\E<ZB? Le>JavwRCS|I~4CO`$O'Jda;Y$B+I]1Gcn352"P+Tw%?Q+JM:juE,XF?<D18U9M9AW%NXUFRX`0_VJKKE#(K`nR$z$(a:pbYc 'm?h#|k +,'\H7N%kE,lekJ0?FY{aOa|/$\Bt{JVSg[GNocU$.%Oek |EL(WS0-",<b'hKBOy|1Nw!96QBLC<B21-AtJF),OeH59G%H`OCnXz^]|&e$DGl*rEcJX58AyO(F>-N*19-u9#7Ybpx*S`OQ>2Pr/=%vZ9;xFRxQ<Af%dFlUG6>V}Bw[/Z'A  Ii2cp7b=9Rp7K`aV o\7X!B4G)K_S7;Y;BG %{A""%P,"A3#-xe>]!@6Ici,"Qj?9.!o`G"t?YFY-+%SsM]0F!LDEc32"CHH/.(5<M$"HSxZnw=6IVb,UiS;VoG#3r VW#. L*+D{w;*3`%Yb)(%&9D@N'$V1G_vMm+oY!LQ`([m0IJ<!muA!hpuK^3>7'-L8~~$|D&^N$!QJVq1OT{weGsz2"9?RT4e$JZxHW}uj|X;[S?&#j\BQ5PHz"X1Y-wc$_LO$[mUoC;amM7Fs" hJ>yu8"K C`Y(V?&ZPB9o`<5A8sZ2qS(p<_8m}Sw%"+o^6q$T%akP+A'R?P3!a*7z.Q7}]w&FYtWL9;#-[pi^A ibm1W&VC,h-@O6bNp:m[C ;Wy#BSY.[skHa=X7#MN|rP"c=_Lz&./`^\]MN^tP)CpJ4v`j\MQllh}f=qNZ+kTBVW!F;nLA)TO:SC!#Tw)brQ{ bX&$&GIpOM-(.Xqb*Ow)Q[gq#1ADIo$ AyB2Yp)N]/8;IiBPYMDG.S9.X(+\J!Y`;oCQ^l\\U85`$6x8jP3[RF.f.ozo-!VS%AN\??lTF+4!^Y.zsN:J&TNY2+-KD=OW}[ (OG74<?R35#>/0P'[$zO75@<vtW7F}3pyG2%,Yq@AEFs(zLye3*m_"=8AzO"h,^nCA^@R\[1fJ9mbQ*@i~(Xms o<LR)QJ]S6UH21qe/yxHzL]]Pk4&%5E}Y9GJFJ-):`eOQp*|6VtQa->uFfcOGP7VdI"JTH&J2Y$q6q_lRuNAB%3[YzMawiG2a2*.Z`O{PG$F^;|:M+{rZEI]vP[q3V/=AV2/<c'qXr,lT+PUFA4.F8BA@%pDV7UY!#"IO%n |XQLit]Vm_ks?cuy\0/AG{"UpLZ,`.|q!ceBT4U)-2X>D>4_'D}!R>@ <[G0y9PZU TlnXWM&H}ekITsU[]uB*CY_Q!77&cLF!/C<~q20+2kX2$"7!.(%n1[Xia$~,UFz[4O-xAq0#~h s.rsN9auG)$|1%{]Sd(kcVF%?e@q%Iw|j5uKOX \A5)M8[8q[5P',B'q'./63?kXVJe2Jygoeu//6$nFoU'-"B8`Qxe"?xC,3(?KU&J|65aN&f0?GRk`BAD9~ISfDkf"9\_ECb/*kfLh#21fTfxSV=0:Ca/.X=2#Ga.)cBn%' BQ+D/!Q<V!aA<9D<__>UH1<#LJ!(5D~cv2` fHtPLexGD%Cxi<\c'2;Cn+\r7a2sD+:.<iK7`9N!SaqQnpy5V?K4sy}\%,./2-8kQ^BW-PFT:;^:6t6-85, ;yOKfS%dFj/I2lcRP`OK4K}\_RQ*\FY}U.pZvBPH^'lznYSYtS7&<O%d]h5j-H$qN!/>:*E`JZdC&r%$QA[S1Q</*&RB1l}_8P`q31;m0t4NF)q>7#'N<de5w@Zwr.F0<Z8&;Xfq"Uh"S4a,)b)nJ=I>5n1e~#?Rd356R.4z|-"/?&#3R}vA<L.?1=-t%7BBms"wRwGiv$kY&_3?(Ev&<|[ 838^y4M~0h/HU3^v\L>/[U"V."SB?zWY%5fRy1.>(dk1Zy3]EA+G,OU`1Q)]Y~$,UJ%:,_"3F'-[TdMV"`2-Ua+ g2\)SHA3;0 b9DYih(S:v?SXK-pT^&tP=.:^`|LC tdPv?Gw* KbvUn#8&2jAa8Q;C&N\mN0WI|/'rW{mnOZYcZE44r2k7O"RP vH-I VX>(8Ie}vXSHO;:iVnAg"}u`],\6687iH(fo]EVQ8`+U1yC"$pM0Q4UPVvSrYR[@, UpdhS7Yo}NCUZqN,U)xv>G/G~&!bKB43K!8TVz@2lWzI^)WsR/frzSNL:uKJ^8WQh_DXu%;TG""9P=rKKyJ;FJfSKsEJikVs"sT+^|BI]Jr)U=QQ"4=5wkN[HKy#[-6n:)EBZm!R<_R2N$>0\_da\X@a)]Q4g<Q|EzhFQ(6`tV=*V*5881TYOaT5fyj51 Q,i2/Z(S'rA3H/Ou<{OnvOeE  tPje>eZ5~E&6p7fC,.7Yf,>j'HKQ6K!>$tbBb^PyLG?&!D8rY]BPcNn<;/!e]?i_- Sm?XJ*aj#E"[['4 :yhOG^D!heY3yB]8%~566$(M|j$#SZfS}=O=,k$S:3QOh{PS%x'W:d%3O6(KlB=|vg:*#@(1R0MP:e)[Z2nqUgp6}&8i)!11Y:7p-\}jpP5Z"zLX`,US~_g7oZP/p{e0`Rqw&PVr6'5-Fk{ap{%([q8M;A/k /zT,`U0UQ<ECJ."\8d^Je[C*raXTV1k4p',ywU83ii=#wtHc$@38,K!xiJaRy\D'*8&r,7v1mYmv%@7P\NYR{WEKYz?1.Ng<G$(VE!_]3h/b*CXJSD ~3"EuCKJ1$ HsOM8%a+X]"2E[-.!h&FYn>@{4e*HY-4t<`QG05/&B!uV94F:r/s2,6`l3iH2^e%~6f.1\G#o*>kFR$d"i.#1','76vp5Z]:O"b1)lV&f+UZe\&Rq-P!7Hfwbz-(H5=H-;N9V#s"#_\!"RwNPClD4T;F^X9Xx`"X$Z4o^E@ILtLCIBEBQ`XDB}G&?R4]*+C>ADS.S__[K`R^65hD&8@y1^L\|EzXp[T+nO\>Z[C<7/2Up7]\&P7oazH/`^GCqPY[gIH#'aijV.Erl[r(1-z2iRmQOm!%EW`N|rCIT".0Q(~:]*5TMxlF3heWXCTZ%1QR&W=TB~]43#;?.6$[N?>$zm_VvV2{)5"(P#2</f{9EZ"_0CwSudMHX{K3)ud:WALYe`#WJgT"]E-Z_sj~U2k$!0,$#f2f\b9U]75cCOJ, }SLItV KAVTCCT_/ONC*[j;AX"yZ7eRyQ"wnEx)srN"X6'=>/G\q_9~d%qO2I}32 6H_5a}UG.ms]l*,DXk9_Ri`7B k"y]><mLcMfH[|twtGui^?ZIC[E /q,@rGk\$ RUCWjT4#)HP&g@x#SZQxLT!:=MYSt>ro+4~I,^nHB6k>F)4nWQmZ2Gh/{Rt7=)?Rd^bO 7I)M ZC@;j#N=2_&\kYV"?Q@a6rTO?37[3&_zrO-x8/+!)dW1GLH|FY&_wWiKQcD*U@<]}eI2$,5Okz '/[<-{BGy(LN1&J&bg-/BP0KD4'*d}xGuTEC>;Q?^dx*u^a)F(;]BHH{8UPMtdaZR\I6@"o'^s.=`y+\m^\HGCU}5ckTJWi9XE8l:.-Y$T$k]K:OjSv{^"KF{V}u()u&YMUA,y^{+G[?Y_Z!0]3^/P]]j'&RG]K?bs5NxTW^vC<1<-F0V|:ZA{oSa2,eNB!KW% [uhd@].Lwy...K2+q_uz1}:U(M6CE'vC&86P]@ecuS1MKUB|3?6&E3uyHQjKzNL`($M&QK!UY,X*/6O^-UaKSG73zKl55Kjj)[-Y#vB9cWB!Y&W3LbJ~SO;I`1\J\0,rY56,D`EONiUv#Rm)1'\L`sUTSy,$(84)D_6SY?lbxft{7Gj1R!CY/*CU&[ZM,1+oAX&IBr'JX`KTLJ faH{-aN,1hB6yqNZkFiaS. p=/]I-m8W@_%:@sB_K,IDI>NOG2UG+u ^P31,XG4$S`+OlQgiPe;x`&H= (oJ9@,-Nr):DL9w#w,EVD|%sHcB5)Z';HyLY0~S*?G9>m4p(]*uwe+rUi'4q<7R{JCW\4RIu^*d;&%4.O;RhZ2L^B(j[l`(%'MIAc2]e9i2OKqv]=ReD&i*_LCWVar:0>l4-qXqfKR^%-D^c/pEB}PU99R)#P9[0^ C}D:j-odTRN![{2.uE/t8?s4A+C)BCV}!h]jA?")/ai.Gn4K12'q/^::K^Z!bLl-k&1Yk~-$?(R4G30NPv!oM3u;/P)F2t>xcPW# \p\H=cXNL?<s*^7bUC^"2uKH`+/2Xg+ >4$\<m1Doi8/%!j5mE[xB\-!<jR+I113T[\e7q?Hs6=Xc.nFZkVJ8FA)(bTF;nv7#]>;tDO<33I?SE#|\$+T j '4[*.KIo>&7[5#sg?ZbY_HL!YZz_UOx]w=Z>i5\B,h]6>5@qeU\h|ZTTBw]{U[>=dr7{;HhR,*6J+h/[3:RtdR\T%@+W%#~71w|S`Hbn1u_Y7,.k|JC{778T2,Pv4"&:^LV*R88_H~joeU>%aI\P-M,JDFY$P$TXrN&Og\A"v%Y0{_'Du;RN6F2C9V<yD3/gW'tC""CxCg1<U$GZ(60u~L>a+X(B&hci(Q#L;XY&>=}%|.d$n4h{YRdd020qmVb{4e?AprZMD,P("m}D0fEo4:00W9UbI/{gz(@GUO7#U8JSDs>* >7-MY?v7|_^X~,R=D/N4i/Ub1-j.c+TJRcOF#9A`Y< XE!%,/F-]TAhI>![l4NKe 4*+oqxc_1U6)I,rW0Yny3Y\T[_}1)xYU:?SS>z,e;47}xIArLq-F.3d}53#4V4](V\[FXAW6/ugc1RG 55Pw<5{8`"Hl4!06/$(x/D.~k<*M38;"_L9u( *?&S2d:,}2^)pPE;c<(;!3\7et;El-j`LU)'pwAicQ)9-<i`b7&W9{T-1{46_tK&Md@2*$vHG9IJ.c|x+;4oEE_W^9n"P^zs#[Fa%c=$>i#46&/OkL{^7ZPRI9?/5;_{DEm9eT5\.=,ZIgSun]+/<@9L&=+K.}!Kya|sb9fcg;}"/nvQ(XAJd<&5IF5-W]cCN"=+S`"IR.S'p%;^xTgZ9SJt{7?HNeB:LGA"Ey{'fPI5Ic($'$O[@HpWD^6"V".'Q|k' g5'b{S+#^mfe^sn4HE+MY`,WJ,ij(j0Bn5I\{%!a/#O@Y&|&K7aCGW{f?*/@]*"Dvwe nbDe2[J<"Kd]fM-xO(%[=t#Li&u?!3rMu\EMq8 K.I)"VjW$!h}!kYq6+<;~PBV@Cg6CBBD2r4/~OW[&FT',:S1GOcU6Bjl(1m./pVR'JU%QgGf~ HN)UAs](ODO]GAPKr}1OaN!OFv>\*ax5MM:XXWe*n9(#3-fJCSnZ[T]<Gut=P_[?w\S1+1&/v'6UZDKm%DC(30;JB'qrfn]L.F_%dMW=D:$dZoVg1rS+%ZBP9A(_>PqKFZj_`M;:"<|r:#M,)) )gp00Y[B:c)b@*'uA\*J'Y<&QRv`x`%10gw;U5=,.qYDwSJ@"3+=8A2v#J1!MYT/0Jy8yzE?0Q7.=k-m\MZPq;OWW5m2ZMC"TW{d_PI]|;]m1%Ab/WV_|_#>PD0V{6),k{D!L149QS=+FFF38G3:{3We+"|@Oij~ u-I;&YBC! &5Y:J^_q7`x['-Moizi^Msq6w=}X9 !;]Sw4^Y{duF{S3G^*wbV9v<Q4X1\tM1%"(pJ:F%? ,wHfd4zHUv_O"=E%!GW(VT_%+]LEu0aTK)$##'Eb'H[i_g+N#BVf;Q0oeut0`96 1n(ZnKJ,3E6E5=EFAtx&|;S,lG7BOLQVYZ7"4g%H|?mBWpOhG[:@r*Oc(H[7^2iM_mc;NstZU)N#bq,P=0H'Z_Clx)i#U?ts_LmbNASn_,=i{*PQR+kj8^=ER.)4;]|""+;79jFSMP,7%Y_DEEtL4HYPv isqX8G>Vn."Q'B9p40xzXkHiSC!RY<c8[ru<*&3SZO}Sa!<=|dY4jV{*H=VeG:p'=OIjD{Z'HR}P:(x=92>124/+Cn<>>*K}>;7rRVL%1n%BN`0<5R"PsAdV{x.VcjJJsN=A`8F]J(pzT4I$2ia!s_\,#VG;[RjA2qj_sCK7\988.p{:Lp`@8k7}2#A`YU$y*6Vh-f WZ5WTG>=H;.:5 C45p:Ik.96-.;8N9h>D$!<;k,!N1Ym9_Y3X@*cc+A6wntY|,Rzc`V$;G&FN[] 3Eq<GwY)mC}P>FR]0;K3GGj/Ei??(3'0ha e_4$~(U)g'tr{+_IT 5G%:&3rfd@V/Q]!t 6v#b\T2qY>N4=Y/3<3Lb\_p-f8bFy9}0`FdTqND00L-Aua(?16Gm@&mlH;ST$LwM.;!O#u`]`G"SP36%[+YjS.?_8 Ew]4)tb@MM n3Hi=`8%(CG.FN|]P\DdK>Vu$b$Hbx$ZL0O:3WN9DP`jp\Eq-a(X7L<a:L@WZD_knx)l$W)!Z"xih&1NiF-.`4kA3\}}aTVl3Qu[6F`Im</_VvV\Iy0 ~3ZjRGw8~a<OTtsVbG[-)gC?MD0"Zk=]h'&(c-M ~=RV"%GF1[0 %--H :c1TQa&Cz%4%0\$&3f[KS}H-&%'Y#n"y[Jxra7KQ~@Qa%C4!Y#K0kKN&a:RCQj'e^A |HF*Rm?3q_Ps4H2,V;GkffYD<,,d'<tG26[SC@59sLebe2gV`f;(P1mK|)!n8mx^z/plzY#W>(^.S3Ohq;JNq13lCnIV*A])<5?e]TSXA}0~JmE`1HO.>`<%g_u\A5Y,7#[GB<+[b58GiY<2WUg4 (|jZL@{.cSTsQaZE]RsM>:-0>.i^il)]|E%*~;92byaYUS#O'7N]S8FCv nXirCWUT1$*"8XJ)(GAxh>QqiEhQ4u}-Zr\y8"Yn_oo7{8R%*ir`MT<H85c37uRv$t}"9,:PZ3H{,!@7(c-;`=4.wHB^)<>l?2`H1K_Fm(sSY,GgV\g}t-^VZH+QJr`lQ02o<9lL744>F6'#=k?.WV_Tl5`:D2y(Rm/]CpdU+S) HL?b?$IA?HIm=cCqLLXsHIrmBCgG'sUU&r@dnh)) >2<D]%bd.[ML%T'QJf;Wn?]4Y|<Ln1/wDxH!-t4<3\DPiY?5g])b*i~;"UON=b'cndqNXJ[{{}4`A3I#gt)-Di%(IB+&#L}J$VK8q+.+-2A *q"?{r}3f$NLAWz7TaA$!4\r P|MD&CF4$Od%D|bkR= cn)NkKbUQ/SIYta\PO(G'da&]x<?oNjV$d"1vr>Da,X.OvB?A+:@WgIHoVv43t<oY</VM%a"!@.,D(V6?jC:/n;%Bt*4^c*L,Jl!n89IS6NO%3%q+,m^D'96(IK$gqDTQL:Ow8yI(\cdz]Yv2e-D"ue['Q(G(G?P<.L<2j3CDz*h^?)4Em ]zLUsybMt}HlICJe*tz ]<iRR+!^\6{j&zS[J?55+Bs#NX;/Q+`ZCQ)['aMWS7H3YF\V*E=)*FR7 v~yZP^\MNG/N|'VotQ!?]m[<=HJOA^+Y dkfw4|ho=rBKR|#6J>L!y L14d%1},+H&W|U1PN=zGc)5JlUgawy@\F;]B("FMCW1!:QZ@f<.5)6{/V{ZY=p5<S]Bw<-m\lT\+rq4NE42~95+{;?;&^D+DAC)pXU5] PEPTF[70\g"*MG:e#u.|?}n'<jt}?3!%;\W,b=~{DdK`?AyEp* E[NNAz-8X?\<5(*$FDS\^WeKkPu\t%T:_B$|Psl?FxT:]&{tI3+DI.b;r8\.?ROr|Y<L:lbXk+Dk.8H2C0l*A)r]`UN"9H."cDzBda6V~6CuYa#M{Lt[9XAq :V3~9#tCi)h%7^i|Uw`#_my.Y>Uo4$^5N1F*l#Q)DB1%]aW/bFw+N"JWCI@O6HG):CPJ]L~ !F\-J$NWcq;%,)d]}(Y.XaspAD1G9YVA+;qLG_X_Pvlp10NNSi(VYczu*'+;O*O9Y=HGW\X|r})C_.yRcB.G FDg@+A"7HU8=FFOLQQ c^1]ZqZ<AT#_XXS]HLOmr/_+<a6AD-.Q1ZQ6!:hOY%),5)PW%Vc7<?N2Ty8nB#KjM"SPt A@sB(UtLY`x]{mUD$.\z"BF8(5C?4]M|DBF/&%9{!AHI*S.<7Pel? KN^%|EElKRN^S._)%A&?=r@`+(m#c[&|VV3-B&*f.lr"LBRXzLzIV<qor{ZuuzT;eD"7[h:*H+De~ghfi2$8sLAWZgmO tmW_jE}WLm7]%<G%</^FTL'pv:43}2+TOg8^|5O'MJ!UnS[Z1%:m2-I`^AcmW4<=` 5cW0^5wGzS"!'()]P8E;%5LMKs7>*J8N.'uI\b\9_X8jC!XYN]`qQ\[7^J_s7XH/']Um` Q.quOA)[C~"J-+\-nTl6umz1'67 [A[R5W#PYZ~|$o?Q[mSGHb+RDIwXuInyPR+ 9L00^`-,~uuU}V1rZ<Hm)@S%m3Sy5:`Y.yNzaS43`C8%' SD0\4%RcSFP:C>047NA]51Q4=C"pgMG=sp;*IR4w>j#($:`aE.-;N;xp7:)-@%U[A'#g4-Q"~@KUvXNt,>1`~;/9us"z>`KN0!aj_n +.V4R|>R0a0AJNb7/z$3I2}^ Xd/+jV)u#H[_*#B6+i^Y^<E_~tzAeARxD/Q4Nk'j'y@w@I$"O(-#t+osI0^!C=>_5Sa5nYCws8K8drG 3NA`_AoOWU`x_)_6mQ>I#v)l1y@dXS|z#E7R:N*tn u=jk6I})4S>SF JYs2B8"}=r{]mLD-#IK5}"E#p{g'!T"gdDDh'2a%^V0>}lww2Hh3"h369hHL&bX+~s\`;GdN+`xGQ`2AYMNT.VhiLViTOnF,l%;gS\ed1VM3O:eXj4aJd0gX[:EJ*^@`>3q<UWME.eMD2TE6G2s'"<QxH;;;fn._z;pq.98@J`Rbzu,<Q=:^"24Wq:DhI&3Iy4r%h+A+aQ$o<uc^s[b7*2]<j-r$[5EnrS2=NAUL'?B<|yO8JI[)A_n;?(T-)7I6QKLN;qY0{;+D3IW)&.f@06:`ZE0/V*>5%O!`#$,Ft2tGys%zB;+l|!F=`M8/xhy\!E \ U>al=l!.#SlOv;2D{pC9N1d5DbUx5=/h[zm"&`@&>n[>8%DS1+mkwHN@q=Z@P&>Q"]@m&4Q%\N2YEoDC)1`SVO]mQAO)4EUuk52 8Iu.j9&8+lSCAkiK/i ;l\U~$Q&;Kb#_=6(8fu^#.T+rlChZC*lz8W,}:ZW7W~H^g1SF{9<_,Dzeb2RF<frB;|FY_KWobl$6FX.+'-(Etm&Z_ p]&nB4dUBmC5,l.Rb\/f]<Z0WlCl`4=!<h=`9#q gNAsF<>p4~:t-"))M64\^-v(xXyJkB^*/+$17T6fgG}T$DS)4ij.<Z U7^C1|hZ`;3b"L((mBf&sF`\975$mnyk@&)B#+{e]^[7RjwFijQ{V.YJG1H4"34F/"[4i1ATHH,t<"}|) C76:9]QFZGn_yK6X)3;M0k::q2@3L1{q(82n2= VP?(c`@D7zx c8?&80V4T{,[\_,x\)VYr#h#x#1C]{g[DU'f;(d[=R1=6$vJH~Zi!/C!Z6j;-=^aZ]'Ov[&`&MjS:){P^z\Cw[E%L{lBCKJN?Q=&~nr]k)VC7!UExrYSU`<G5J>f%A:mav$88qoxhFC0 buU`BND"^+nYv)85I*}Wi_Mm!I_{9a]9|,4#Jp/!w''4aMsUI /G4)+o.9ft1JV"r+PaLe|t|,MCxb9+BkY{jY[,O4MpL*M9v/`?2;J%VUe2G)}]W%Ym'6oKDv($DJ'<O1^YAetS^!,xU26(afKF8?B hgnV\JU`7u'u48W]@!,2_Zk.!V"~H>j)ej+:;^E&.[=0%x#%Pd+I7E5D"L>~I"@\04qcA"1LB/.4I\8c=TWygXgfvn6{jI7eu<msf4P)"~I&]<v4-(c\4U/%Cg_Iz&q;F'lrc]^)l.VUq ;h1"*M\>`P*z=Raa&_aUZ_0@$GV8)44D_&QI r<w"E`^*8Gd41iYFa4#KR=1D6yPo&2UQ3J[j:>j_4uKDDSI:K?1OO"ch:sQ4x]]r9M8V2K.!>4C#P=3<ex:kGH3xvJTT_H_0(q1a+@[A b6(:ZM&9:"]&j/pQ9Q].+R@LQ/R<X^~WTo"7VhBhaL*3X6Ykz;N02*\(/04tt4`n)i-u^i?AxkK'naEJ`**S-T7@A1E)-@D%xC[aY{l^t&80 -7$`oBR'5B4=[ux(U/Z_Y?cBt|srBQ&JGC?V5[R9(Kr42*_M]15@N ,)!djWvo:PI52AOxj8Yry)R"ZwM.UB+V+?xSzg-+5_5)}B_[4~__f*"(QJLd 9I__8.u,rTS_<s9vO"kN}L~?OV.7*Qz#)"]<+?SV)BpCPL[(|i|<q=7^z=fh37i&Zo4XrYA)06d:iRy\b_/Kd3IdF:8-`X'U/0=`sUEA#Wo9Q}uqO<TUxy4)+x(EQS_V-&-`!Y6M7w@vz-Wys:|'"RCA){FAT];y]}p 4OMU"Sw8"U/&l}P5DBoAS#V?twD#3Rmb~Am@26)@>:6R=3-\S5sj6"B]W}Z&a~gJT)GZ%^/N5)9RGL/41LMH#l;E`uBP9@]FE1EF:kkkK>^+'6|Ir=fy9}-G.x!M{ja]8C`BNP(U@7Q*<:faoAcz_""vc:gOd)9G;JO2eNt!ej]$'~Z*sWM["Fp<MG*e`97H_SaLS'~yk;8!vEu5vBNn;RoWg4?B%MwesI92FrjI{(vimbe,/;J-96[\c/4oG?L,NF;z-*iXz<^:VW_~0R-Q*zT=pS)/>Lk'2"KF)lRKFU'V}gGq-\']ZU8l^u[zTFOC/LDOkS/I=X-RaX IR:A0-kRpJ5PPbG!LFRNbXs8O*zN-:~<J(kAVO\Z%3U9c,Vd-b~C}-W@^*Mz[;;(4x_1<_=Pj`t+;':,5Jv^P$$3+j>jQD"*b_aFOn@u>X0,opcFiS#)t8Y=%4j!49gEjJ_f`oKm6i`y{CQ;Y$bf(8df-tT-6H[+GR]_^Sv!G{K5&O4vOD-24K"<e5T>N$c*Ig35<OZX'Y'Nr]aTR;a[E8|^rU[5R[rBD*V?-9MIfY#jzrBXI#:4}$[4oTYV64R>1Q:5#[L:.QX4KJ>E&"pz\fZjV,}"Ba>AsYVqX,b+{s~Mur]n[FOHYp]X07q9DSQDTiBQ.Mzv}Y*i*T)Y#UAlovSQrWqBz#a\`h&t4j=)!c"\zP'+fn7?Xt= HS/P;n*pnP'X0;V2A"jym+qRV*'{K.</iD9=m~Q`V3vztOw'ceN-l(.I=XU-@0`M$=JPI$3qlT$X&NB]\`Qjn0Vb.*TLr"@a%d0x+L7JD%TG%MMs]"7EI^J<MOM\9,<2HY?pP}9E[RBMNkNVmB0%Zw>flwZ`vBs]0K?{4>AJ1@ ]L4j'-a&2GgOF%'-q@'qKKm%e"grPmkSoR)[wCBv$[04|uv2WK8w!qqt//UlGY#hsPVtN&_2uy3v[MLN8^a$Ly_?7:`h^Fnjb6hm~'^n#^e:XS%=LV6F[FkS0u%iFgHVR9.w9(F?Dl4Rn>GFScek:9J0+~-2fJEB9*&ORIY'|P24RF;=6XWPgVuCQ L;wWjH/LL~V<+\hpKVB5FP-)LDY<6>oWuZiQalfQU1ZtFnf"[]O}W5&MUy?@XM7!|,HeDCAgbHdQUvMY}iWB@>'d9R6')Ns:P| \q_'`.P@A.B.GP4Js(5UBU_Wfs$_,&)O[qM)glt3Zcc)'W51h=ko)`eX\XPp$D(WYk7]DAki1ggU=UhRvb!/v~5-3h8D7"LB3E4]5zMXn#6{LXWlLUM_{WJO58l:?=$\k{0tRm+("JSzR!=y80HCKC,GHANqSW3UM (t>A?Nm./C8 8\v'tML7s&a5(3WJ,7G_A><UVF4d)w?;xB8H<C:kv8cNlOto51_HS~OltE4E %t+jHPw0?'Z/1DTr+Ty%IT1xV@5V@5,&=<X$}%h+KYR\Sb%Q\Xi`qHajs1!BWBcPLn.,jGX;Q?J0b2$S6iXBt 0[TMAaZ2t=BOYBbDi~i2$WI(a1/"XH-:j5cP]"8RU(v0^+YFX>X)'dXR_5p $]]UL601Q+D9f>%OS#Y/7S* foD#_!7a-dYGEaB7=>6K<kgXux;m-GJGs!R=$6*2Kq$_=VYB_Ccq?P=<-&F,AED=$.}.Bi@e;>^[,L7-tCfI_OD8[.G5U&6$aPg+KH3>TGX*&,vA%^$`s^#4I[nWg!.[EQF,!*:UKSMk-O,=zo={,9KS7'1I\s9Bg>YV<QHe)(B)-'W-^E%';Ppm:SN~KQ%`6'^~}!q)muy<t`i[Sw$eAK>RzNjaHJVFaTS.d^v|?Z;<1X\&fb5\`r!3@,)&-dEuH`N21Rw{m)p`+(<5M~81RyS\z &=MzME7 -=2Bn+9qTEA56(kS7(cp%p$.49(1ik)6bh/6MlVO45"_H(<@hBkSN]LQn*770/1[y<ZiY*US4qteX<8gceh=-e(J-&mERmlI8"0?.DeUs %FSWUTDVZ.Bqm~de>ys@F3i/'/bQ+hRI,oSEcF[`qNB|*DFy3r"{E;9g}W>%&bD;.(*CK$xJKy0>#Fi'!7k?C"$)sYy!ZMa]wW}'%ELLYWD"W}l8(:7bF?Ta/K8AkNcIP_]O|.8hU6Xrc8@}br-R\5a3~3<;h>B+Ub#5m*WN8,:g0[i<#/A-OU`WMOqK/EX./pTgplsisRSvQ$g_-MtLqP.qrD5S!8n=[oyC9SGpzn.3KAql+}\M'#<"D[cg75rOQX"!Ug&v{c]AvY^UcHj>mADn'M6#S`8JU@w6[5GW@EtN<0"A(K"7[,r!)C co(IRjown;_o8]K*s`F)+t.8QFxXO g_=N wAO,P=xh2_p7)M=`.z7WJ$<45!S{lH#wPB3O.GYV`-07{H%Wj):\3{68SGqYSBor!I!1^rU^D}WKLs@D?2M}kwUDSTCyYZy7f'$D&fKu2., e$rf.g~.N8XREoI1?,p_Q`G87(jR:1C\EO34*])+/ja5z@+0$^7#9\gin\NL6FxEHIKj^1:}CV^LZBLa9)92]:1u3j E"*.Tw"-:0&`P_q:sq!w$B"^V*B+yf7Prs:y1pNwsR^A3qmUXkX4Mm(LD.T5 ?@9N#zXl=>SGKh2@)u]<L) $e6[H7a9JOp*_*qwrJ44$BTz8W`nFg}p5Sw=q!mN?QX#v6z|b*^566~3LsP{EpFqsR14Z}7G1DLjeLVA2<nRm1`{ =ok;E@~V/8DwP_6Iu#&>PF|%c;REVNI@5ll*3)i,QEv;'B2$(6rbwoDO5(-SU^o0a'3d{5AQTC6hF;9abH45k3=#jEU@d1+PNqI*=_s9CEhAA:l4#UMO,xh6F+Z%-&(7P]C(0;(w3rAM<=c,5rrbh.'pqLsTS{r%g+r~#=aHDs^-8I](5x[`/X>9]THG?(jcB\)+emWk1L[^L|<a%;2*S,op5#t5qt%zOLQ"_C{ESVBk;|iftT#TRg2=\f6|\oUI<SEK z]~?>4e=VG;+w5.q2YU#{=6qX`&6D2RPq{B#@N5'GIC1p{^RjA]5F~<|SKRs81JN~c/A!cC8 %?V,k9d6aL?1P1~+)VaA?]&VW}:>3|+0$EvB9by3X(VNQ7^`/Pe00d}w'3%yKqh.%9yCW]3*v0kS1WN8*Zh/Q0dX(['~%(ZJ0w;,&R>&EBIH#aaj}nutH/z^T@iLBh1=|Nirv!{o;e9)>G(ME@%U&JnM3ISoy:vE[X`"!"+EUW:I%.hKU3B&`*yk9a3D#.#PUvS<nZrR{F#!ZXV$tP(RHIUmrJ&aRHeQ3 0gP"C']#Hm7rNE.dQ"1Z*V35w\=&[q:ya*@pGW|i$>{KG<SUYTq75Y-n';A61[{a7DUD'IFT'BgrLq15_'$Mo%&'=YV,(Y1p]:l"TQm%w2)k/jX`d,}Y'd-?9*mjZ"f^IkKeH#zC-Nc;H8X6.O#RSO[N:l.9s\h\e^nm`iA0\KS3B13v7[&#u:(BRHXycs00I@+wQXwJ:Y0:i:h%d8NDVmV,[8T_ rZhkZM.ED=zUFtlZ~R]Id /vZX"90pi!%W7JXK/;jx"e0=Y/]#v3~ 41181)a)^(NOw T"y8P+/*Z_Q<GE4wopVKY0Xp3Tr.Y KEs<oC37%|L0daczuw8M(im+39j-075X> 5xnTU?"WpW3ITcU6)OJF*,YKQ%BmFROR[`@NQ E,r}N&HbN{*A]1Gv(\%3kK#LS-,LB%D=uE^9$m{'{-.\,trlF$=)JUu?+(d2&P;&X=L8|vJB:SVI_$Z8T6#Cod,rTgxOjX^$=(B9=!]!t7sms2IhuPv1".#|.Y{bn*A\5-!v6DL80h{aE-T1H+3hXM-%R^,B71HlR67:.*TXpWU@O]h/H]J2^`,n320K'_X;H(MAP",P^J~UqgoUvF?+\uq1%UdlkvHT.iJY#<kMH\'(v[z+2?3FguH09>Z>Ei[mOvJxu`S;;>:'f$n0=^+D`c5@"Y]UN~p6;K5%7DMd{5&Kt!tcK7Vd-.BHp;6UZ6{UCpCYB`6K[ /&,94p#KM9YKFU)F$R$ Y]Z* H,ANT@!/TB:$KXfe:D-FEVQ`!E^l8Rt3Vn&b?o]W1@n?O]X.B8UY/]~4'h2}dHIM1E,&mIwC3 r<<:D8k#i!#a{EbdR8{T~>o_?uCO~Hpshkz&iVI+,,@o)ZkM]KN_76ISL233>XFbECt&-_6:H"R]Q$:gfThKsH6 yW2 A9,^4vJ&H^1;][P|;EN_f(s,_b8|%nV$[CH[oU-'3OB=IKJmGIyPtVmXS-<?Gc%(7.9O(075w;Ipq?K'Uk*3v}:(3M"-lH7C-Fw`??HX!J\>KxFv(FwM/&=wf-T9PNTP/A+MGI@;`'@CP9qXC.C/iE,d>q:}2sIOKU~SIPJYq21l<rVvFkVV!Q);&uR%HJ:nC*i.1GW&5(8i%Q%+Z3ZTR%^bK1N1FA}<LqKfYfyQloWUatY,H]3`[5L%A_!o}z/Y'8(a <mVB,C!P|hdZOP-}{$Xd%t'w^1GB% L1j.GESYkw0)AD}/R(GpZ7_t:|q-Z{<.!W9n:V(Pfj7]J9}_"6/GBe?DhK?Z!Ub)WG|F*vqA}CZ1/.IC\K*ADxY @;1)b27K]6,17S4\)A!8l0 b?J~b)qv]-2?:"w|/.@UT^oomB/^/Yc/jb4ev(WMljzh/O4mh[HOiPc1[FgJ"e,XfoEIAZEe.=\9u__8PeB?sDk@QbX6Uf>=XqE\W]-=c.gE#DOF"n1KKw6XCbU$L`=>[lOJ$3a0(Y1$Ly:wt<TYQlV/C(o"zzvs4TeZ%$L.:#)a73tCaH|_REdU@3<i!b>*WXXBCn"$aL.d.J)C@J]5V(njrHx`'eUkvQ"6g+LB/,Ra8FW~.6}g>t17v3'gCK<c*@fW$x,>7yl+jd\IOr3,5s%0/r/uu38qoMEeTCpC[aQx}V;(*liq0a/9"b$7m&+CG&aQ+V6vV\9sN$hAwN[fh ytx8\V&.'Nj#ll9pwVW%s.r)T{r+)`YX*k5&2n>_y<OP#[&GXVY/VPEvWZL!^qQ3"nrEN"!]s+(,\a'=Id}"_p ?;"e"[H8bI]T^t~k*2"2KQ\4*a8VaAU|tMeO%E(%H2y)=y*+<!%>(@4d6dKLH%(X$aG"Zl#QWAW!(2U<"{Y0kKrT#OPDxp!PQ3,A}MNi+7VXDHI<'t^7q2#p7>]JPIj>BiRP@#3[5. L~uq[kK.zDA|qt_fX}m?D+<;nBU(S=m `5L+J-N;:d(%TF_YoRF3W"b7Qh2K75\i]y%9V,%}WlzA4)mBTt.WV{vN'&<D6wiq+yH6JMDc6mD?tevd9wRf$:4OI,P<UM?@SL%$Us\HS)% 21|/MO[-:lbbk%=Z7qG6gJ,^V -Adf=EzPGNCkU;vOj+WOaHkp~+(*64cH1`B&^!uztO[1<W BDKWm3'T_*z!!+L8NTbycom4TGkYX9+hYi9CKKOY48("bB'(^_2RYYsFen[X;~Wg[AM\'02QnivZ%_@d{xx~w>;C.$}jX:W6&q`AHswv$ :=%bYD<&H/d'9p]R#}8C9Qu".?*,'MmdM@?gtVA^rE:c8;zdX8EZjk'NF,36DycxpvW*Ez9M$->&>/#?3;?<M4Fa[?@-l.~V=0*q!Z*qX8L C5%Y(7l1!AN]$a>:E]Z$u%;SYMRRL@>2uCAeZ|'JEr.=KCsf.+1OG]Q~*h&->4WF%2vDvrvrCoRME&o~C@$$Zu|{G"he(T'-@&Z!5NC7p`K8G(1F"5.w;M7O[a{;hzC$LQ#Z,p2sxO[8&"]HrO'3Z6b39)%54o[*Do5mlR3f!.'*W00J "*FXM_TZQsY4>CFIKHHI cM3D\_i;AQCE?x?l-#h9w2(zwGxx81 JcCGdjRV]_^\I_0""<T')oLh#3R<_H@>Q+-FJPIHn=33aL80T%]"%={$:1 #8|6+.3xrFLe)g*U*Iy$"lvB]LVLRaY+iIB11md17XDYBpJ0V#0_]<$6b#36<#9)e59R?p9^A@)>XNv#o_0gGT#)ZHC{hD$Ab(<nx.vOQ`3[3S(15%WuGLFv#D19-xn,!g%^GPp}w9fh?xSO,XQ[l,Gp]/1/St_gXK#H>;U]N="G'^::EW'gv`-dkK'#[^J6SJ^.'+$a0MJ0bXY<U')}+1a!d _pnu21DL]wUbQVf/$^RvBy<xuQ/I@6lKPg- NSX<LKk|-ONAt !d#?45$mi#n%E1zA/`G1<0\J}- tW^&?8yQ8%PV0IV5y0_Q{$J4C+3CC';]}6"Mt\?D<\6y@a&@PL1_2RE:8WKN->!ra|F^&w\%?G%kI K ;Md7{KSv#Kct@j1Z}|>!au!YF/Wz;CJ8Csu 81=r8B*p[&IX~ID$'wQPUf1->>dnF9/'>4r|vTr%[)6Rj`UrQr=*Yl&\$JV<EcA/I|JO,D6U)L:<OR={r-pbtO6*50/^./^%L7FsNIGsDMQ"'H2;AH?VN<*;1/J,y%T^.|!)EJ5(7Z[>yH?~k-\+$BQ:U4M!<Uq.$ROjlFmH9>,gNd$B/li:%.<t;nBa$G/"(n-'k@Wl+LF0(U$'gcW[1Mpuj2\W9HT:|m=_p[\.2g#Y"UaVc\;9m^UY_*eg'!gvxM!tS1t&OI[D.>;8:8cPF?w[8-8N!|@k@jS?Gl]<cO0=xDhX8`KnNZbW3c fU^Ow/j5y8,E_+<5;gQ.6F7!_6/K;<;Nmf^%)l."R,lWh0}/q\uyq$H=-\,&(OPFa%3!m%$PI.D/Q3KT{3;E!98:1Z\[_GA_rUM_]|(*4*u)%XN<E9"H|QYER<-g+m(n:P%ESK<SOuAKBf,4`"X?aRURM-\j\LFG(zhG+L8d3|FV1xG}:*q%$Pt^|%\DA!AU>6{uTl,%WzqshV^eZ2(jG.-?ww;fzIe-'W!dl1T,S=DIOP%Oa0;a(Z(+cSDl_FN]wJ~3XlTW>mWE3!2bKsZ>v,_X Id3Pb-3&7$7TF,M/8q6:0('R99mvTk53bc\$_^D#JSw7[W!$H=sO.;<4AgV\&_-6T@KH?!`HEV<DZ\@B2eW[DH/j9p-EX[!q4dP%a'%,M"%U&Pt/#D0MW'^MWO>H<~</e=#:(e/*}5*2YQPQn,dfWmObKX?aa>PC}u)o%$9N+F%77@pI6~AcqBhaBMTZH|SzBZ(IfnIVtZiLOa#RJ#&6PL+HU:Ix<?o*I-e%Ak^65L~ 3y7;*CH,Ojyfjq)}b+aQ,~gf;*Y11d]_:#`A*M'q>kf]d=+kNlOPMCC5A;8oXA#0RZl4x%J;/Z]R@NtM&@IJ"TmOBLm-[5E;b< 4+jT~J,<`K[y-a-C}2FNZVViV+@"QT c;J9t8[XF_U(?|% B9URPhEVt/#{j[JXKe;R=W.A6\EKo7a0K*a?xmh!XfDxDddhSVR8;_jlCB&r/dRS=BfA3b,6S75Fam}L3&^}bi\Q@1z0CFL$:\N6$$ -5<wL%!`n>*&)'A0IO|_Nx-L0r16+,Z{IC$}-&.UDk(|=W44)Gb0-DL_0@U1Z0;56k&>8({O %|UJ_(>&#+1l5,c@E5Z]3g&TrO7=aPa*"ma$/i\N:ihH}/+%C0I0L7;M@`l~:OlVV'S(?.i2A#@{In|QT"HP3>*:=HDPQoD<fh!7A P*([OFa ~~f[ <Y*`;2_GV0HmK]$UVn?~P`PeN-=?9V.W,?6A8q7{BE+^&kagIE4dP6""js$$_`;]]ETounmkEuC1@tWX;h~3Y;XkTAO3cm'Crso'><7sE$}$p}Gm{KapIQ+~?(wu0$?C`=PoU6r=SP7V^E~j*_G1!= 4-huN-2DH-gT :d1KUuY@?8LL8G6d47q#G&Gi8Y$x1vd-.lu++4$`RlyOu3fi=W'TS4k,~8!CZ?QCY5.LZ VHji-V3jXtiHUZ5^rGI7w_,Db}}E9B7l[UpC"_aC4H1(%UIIILcStUHFZi'0K=)zJ$%1Wc~*/2P=70J@,COR.b{G)UAU,RQ3Cz`:oUSUIfJ#QJb1?l:oR"Z:yGLN@)"Cb(B/#;%VN^@9.Ke97e++!A39QGJISq(VIOk+:~~4b>LK;PY37lURC8"+emc?K?lH|)XK"Ft1:J?qv/Kb)jF?Y_ls/?Y[n9V!ORI1M#0UcaUp}AI(;%#[X0Ub&;:h>_fe$I?3iOhf+J=J([Do=>r6wO?>LE99,%8}f]G<$C e/>v:el<9T/?gx>:\r1L!6R}h5wef`TZ(9Mi(2|KX#CUjY)f6'^;Y{CEhJ!lY v!+ vs]e;S,S%J|p`K#%tT>AyK%|}iV{*IyOS\_U#aLrKZXkAM(W(x09NNn8[#W_L(/{B8< }@IjZrJNg3\hXY=WHK,!b_3^y.T`BH0,wmEOh]i}yN,z@_4JT7~9H<\RC\Tx}8}L14D5R0zJUFO*+0+Wu)HA]1,]S#&=~?&0*`>L2X``!@_/`8MQS|CDaJa9)4WGIFIc1j=o4^lE!v`19L0]BR2l|],!BDgN<8"4YA;IlI,QrFn'k$Od4?:3$#/T$~8[F]W6XU-jkvwDDVT[d1ok'){EJTy0R8HQAGQN/+<X't&VIga;:Ok>;T8Ai>rRa.$6YLhNy Y0QX,GT@@F+BBIQ*Ua((Sx$FO9D\.)!@MJK'7I=m'-kDi6|DYZ!2AL[&|.wd+$6G8^w*l>m:G:SYb@&7<KlO[u>2QBg,).tVC<t3)CpkH$V?(OZ91?:\Jy?Nh7;k_\70_@SI!xv#U=H]mIx{E+AEA#!Ta+28X'#L.K7}U#2jr9yVPWvO;< f/9UTPI~ifY_G;V=GT&@Q}WOg3XL&/Y01j7.U/kw6X)6)#4CBvS,=V-(,t#2b^n\=V2gT;#8Oh T7I38MF&qK4S'o\NI9FBL>p_;vW](OY=+C=)8]#@ZXaLA5JEAecN& "#nT?1#RG@:9"1Lak8;T/N`&9BK0qCH9*eO:hEgNMxXf<> \xZcLQ7GN&QN%6u7xqz+a:QBIq8ZU5StCU,{@lSUZ9HI<Lway+^^Fyc12B.&S!Eekp3vj=J>`os`;K-8I>q?g['/.D`S9r!,Mifu:~(Hm@OGLU|):30=]j_Tl"_#=Mn4jDs`~5h+i7&]S<x.`f?cWpd&<& @E^P 1$`iF*l&.G" ;`$&Lj4/]TG/!Kp)f({2 9WK5)3_l"<lB$[|(][4bMp'tk|h2Q+&^-ue3:x|#1$!bb>$zER(Z"GYq)5B4DI[0_SJF!}Z(%DF[9B=NC8M^*%u.)F2";q;Mf\5TbP(gJz>Q[S4)6OK@G_2!@Z{R*[IJ{g+_TR0r7/^#nWNG-xE/Itxql05//yu:*:P1+iqVHnC[#vo8#zUaRVTKk4-#3*lbVJO`U$|P/\9CuP3)%(X%{Q{Z0PYAXM_?BH6{+V?6PFb/US2c70B,%nE6`i-L0`BntDY:O@S/Ih}UZVW!*|-?DQd")wR:b&+k]2~~ T1o,@ .WI"dn?6$GVrD;=53A`pq\W4'<K8&W:A%[83wjS4YFGK;/ <$h*G\jj16B6O`C$*y9(m~xp]\)Mm7x86@~&]J4.9[Sd:Fx?XL!TBRr]@jKkHqE@KnBo?|)VZJT\$0{f|u#V6d_FFxIv|C,B`IPXs0=~v-"C^),]RlAR{%_\1lA7oJeKk[Sk2mGOmJkB|VyP~["B9"V<s7 E`Xh~L @T5*PF\~0*rNo[/_D1L9JXpP/df1)9@6imp=t6I*KN5K*OT<YR4Ow6FM,6o-.b+:(9BMr"]q9DnI3 mP\^]S|VNp-(AP 2^sJ]P'FI:$KTK'IB/g02UIy$>`CNT=>(X}y>u1gl\FW3!1w_R;Qs4.?_XdbT*-2WE=<{`mvfyrmF/(aw7-]E!|U`CXC"l>TkD(*4|47;0MtT:2lf1?dqT)8^3,%*`,_B%\|P@{9{SUa/VUGLERMnghgyjAn=./* /JMB^;oZi`~:%>`Lq5;*\0IC,=9dS:Nve&0)xn(<aoU*}s!8*''\}_[fV1._m5hi[BWU#pNro5%xgOv8C8<Nf^PKE7g9e-!Fr:<JNt=iy!%Jo1zMU*))N5QCB.=(nu@BSo3L}d1]]hE^>J2i_B/`^'w?L$jkSk}JOLD!@fFXWlCd*Ku},6?~ou^deGm']0u%^1nSLPT/YJN_vEHTQpME+jQ@8LKCQXHK!9}`$'MF#)6?h6H|g:`&;nD+6%!9`iKHA,)QP:ETRJ=2'/dFMs%XHE<@-yU>Y0d&!Q6y9ZZqJxSW@/_vZ1TG1U3<h@vh1X^f/:\/YrjiRY8lR "lM#&IV/qF>=ZNhH-W-Ig:wlD<G?U/1:b]t0AQzY"c_^o40S/Kh%8g<en;Qq;KXZ\x/'M6RKpu5W{"f('hXE9,bu0htsBR ]b4}4o/us98?}n'b0#R. vM\uc_J^$LSa)cwSUoDzGXY`1T]1wGC^<wOL=B^/fEvQv_</m_(=@[U9>.SA)\=}+;j{d+z6(fCX k<nPi?HcwYe)H^uwwg53RXuA!,C"SYNOImsH]y:cF,ZRE$@8x:n[cMpf:RD/Pk'1{SFu+S\A6S.@[()]=0xbmiw^W39<GCka[$Z] px[[xYcDdmZ$|R3.7/h42%X%N x$xHF:,W: Addo*.$UeqPh6>)HQU ~D)0<C\T6UIHQ.*We'vQMUS^`E7G=;ewC42)WwfHS,.;GL?$%Oe^kl4(}\DLT}O<D:tl=*wG5=`ET~3ey/ f5N~)@IBNP1~5R^YwRvnpYr#Qf4`v%V!q-I4&'w+gSJ_mBg(`z-KJ](<mf[3A|87<1-G_x.R[#2@g7H>-{R(}=*-$xT3@+3V0!V0:1yd58:QK+PrGG4H+("wlRwqh(F1JaI,W:1&0]PO<O?7D:1oU`+]sS~gt.Dsp)ggiWA6b-@W+jun}zr9="N[=a#z!w=K+%^wl-Y/POj.RA^.0$>&3uH_-Q_N[LE\F[)/P'v98/96VvJN)R%3}u!Wz=Pf%Kv-e>;&("3,:LuktY]fzS([)T\E-3w`;.!yUy'nD&Bg04O^/$ w_X4aE%_cDy4XVj(zk6H(PJa!~|<{BCHbyI(:I&_r9P8J4r_^h/q,U$[/3<#9%dp4+"6Z]_Fzaf2v)(/SIG0!~E5aSp_>a]|:8s#cN_L#8>>#7pZTL7]l<aw;<J<X|'\&\&\3cDl)2qcyo*wT1v3ez4EV**K(dvI7MMM4\*0iAa;-5)Y6lAVxbFM?,*.GM(G,t?dOGYrp1EnwrVU*a_f=0Yc?8MdT@[fPgMi$?A|P%#_?{8GKG*16]x`,c\B,V]Ky8aX5%7JD)8~rv#\:;l[7%lH|dA;IYR|0CwCL@JpqP1[A7U&=HPvh$S?ci"t>Vc|z`e5k3Y%6$G_Y u;v.iP\g+"9Vwb+lpp> &/gFkU`OVl*Ig0 BXYY^D|S`!%Z$C..3oW!_;&,&1Upt y6P(e'#'15>y-"Ig<VJew6Mzg\tE4t]u&mb5K[$##<_'Ct`S2Z[3Y:2@sUXMLn(z2zE<J%_R.?I-(QA*irK#.C\&l$LtZS0J_ys3%0` +@V!/FQ?8I]LIxw&}0G+E%`7C'?O;(:&UaPR" 'G<aeb M@~d9)Y0@SmRPIXa3ZeS~`-=?_lKt/T+Z#Xt=A.>>:vG# QX`JHP]3]C9C3wxA_F_x/$A'5j#jNUJ9l]}ne#B_AgDYg%>JY13<mP/9*?#QK@z)$K_odUy1c?M\DbD9<"GSz|/>~Z~fv\3>jV]J2IoNA@v+p>i47?$ONITMPS4J+p(#L}'Zg7VOM+GHRVB'`Sv`T7P1Z1FGz%4+s7|+P#Nj#`&/*;"n=&klpVQy_mA1RF?keZ_^/22i0ce94\gp60VK(]NKD1CtQP[E<&Iy[Y]ocBQP;KNun{EMiYo-+$-C%HWt"/,\`XvVvZJ1cFIW+*<R#2poqzyd5 c7daGV<S"AWSp`P^_XeBpU4'R>B{#R7=FJTlD?[ih/=!Q}^eVH0Vf4~F|ui/($,cGJ~FN3M':9C:<#P5bpq)*aK=[`*?;!^',A2cVyY)A(^Ty2d'L@v9o_#~)_oaB`)j(0G7'G->{wV,%n@F2[r@V Cv*8N*F6P(,.mDoPs!FNrX-\czI3w\9]taA0m/CV;,BoBGD7.vHy`sKYM!^7\lSh*"t9OW<PE~jx"$9UQlF8c(yvawKZ/;v0NNoB<`!Sd?aTjI2I(9}[#LS(LHQG<G5w0a?L-9HAlBV9Hy&6C$ K]?+IPD4DjXGM0lY4kC4h/)\p{$H;gNOt*w:3p#(?$;CX'rxI'npJ+3o!A/Z<]7"%]\w}Bpr?LTz{8`bNrHCgJB&X]i+^3hX\O.Bw0"?{>U^9:T/J$S\0TV]8[PsTs&uM(#l4OY2zLel<medJ<8pX-(R`FJ `/l=l4^A\'6K;&$hf+X8<#BRF$=xD$ X*H>(;E}36%'zUD7'w~KAAd^tbR#&=U_V%$E3VdbL~cWDfX|Q3!9l_43,(SW_;A\H?!>ZhN:&D@rV&P4$w52,_O Bad5WP[ia`H{A+]FP~]7kN;MOz4tisZ D1YR|~b(ZUgp~&qrQ:^U^^W<hc#R)PIF"Skond=,8_b[9)f5H3[XD}Bi S1?Y2^{mpQ8_mz$@{KZJ)LPbAq3j{l,=gM+<B|-xUE1utT~ESw>Inx-O$Z7,:`:c, {l^:@oA4ikH@F4J38.>C82^mYw-G1 `)PS*[x=,@F&"Yq^BsYcvTTL?#-16&q<tac!?zM~LgNWq!~JD)g1|I4"Sj&Nu>;4|K7h)BHJ:*a@iEE0b[[V+iEi,%H]Y u9MEWliP0R9!+w*?Z04%|DXNGs,`(yX0+>N%/\CL0Q_OrG+wI?SO`4 4$:3GrpQ>0oMPMKUY?/ePDJNBXG^8F4yPXYFMY&%]5GV6H!z8,2]Lz'efFd1Vu5dNKp\)Q8*L$G J!>qu9_uxkYnn;@lS;!.L.dk 1`2}"Z<9C<`~99x:`K8: ^>K)\4SUIa+Ya":8U8tH:99pTfM/{Kg>O*[?4car>FY,O=Oa<n0DOFMsJ.*>~?+Q;/g:|?Dnu_te' Qbx1#z}0rCg~qZA<B))Gt5s./rj5a_#DNA+K|9-%RUa&O<zqdIOPgx1\@~1ZDD<f=O aGie~!h=7KeJ']&*SUfV#(:t,z`D,(&Tc^eUG?O.wxn?'LYMkmp(9d,vJ<e[0%<R ["ZEM7aci!e."NnpS5.6V~G+@G$&X<"|jM18nX)9Y):;q^+R<6N-P+99?6e"YNd!6x8F8^3ak8a>+.3Ps-{}G:(tplQ)\KdC%~IZ(}G5R#8B1Qj!;"J(-_]-1+=RgKY\&*>eyN8lKc)=18FL+@$#vs7Qu?)Ux~9&*D.4?dKz*V'VY=T^;Z^,i,ZPYBhY*CBx{Z7.lkHFXEc~;S&M*PL2"WT xx*!EE<;;c9Cnm1/l!T7VX$@$7VPfAd^@g[fVcPz~w\EK&T\)-L)o;/'=NcOiQZ*!xJzZeB^%1oesP:l>3Z'l!!+?xILa&E<g\A61D9ff5!H1Ka.L_(IeeE}]!x]O&'dP+l+M_Y8(`W`ST cZ1-IMCIZ4 tYdfHT?*GP_!&@4<(Y&>&v(#=ST2K^KfFV(y,Hh)fI= 5}aA5;4?_53DeO0yz4P BV9./5iF4Pvq9)(]&lO2. j(R_qCNu@`]_1@36c:zRo>5%NDPm&vdAZ>~<Z;\]NGZ,K[9j%/?9x\`)A~= !p`4-fAG;XYc=ia3nXv>u<UB#A4{>DI?H,:KF5nH:\3U$2fOs%dL9[j`'& +5>1L0P9)\p=nh[)-Q]k7czH`tMVC(&O:IVA%bh&N$:Zu(#(X|?OzF~Bs^sdf7@Z|Q5 ](qOaEUzZ7aX"a-wh<XG6}7KB3`K`GxjE`a.*_>3TXi%??AK_3XUE:Dc%Az]~8%6mj+XEWKv6=@S9yh4yI*D8I?5vg1BJ$zN-HZ[SMo/`n.7_IVji481&V>VI)GXUR/R31H{]TEb9(D(6JK$Td%SZ]."*:}k179PK9 /p?]2FP&aT\9`:y>r6HCHu%x".$zf< 'v>Z+vSR%}Ny&_~;7)SH;:\d:~1j!`QDMRuu(zP7u9Q9.lx_ytBr"}]IZd>]r+7ErcmM_y2?G$KWY"D@#Q@kNd6#sJ6"1"g\O`+Q8M&'iHy[9v'./c?L8}k,5J,\tRi"O+ig"c.E@b]>7ALq3d%&Z[i0&U]3C3JWW~3AM1U]TM5qaCr7`vlw@Vtq,`w#[%;_0x`3s0+n&9hm9`XY]NR4;-DJ/ngf^8A~$NT<KZHA|\Wf+B(_v1Bafts'RZz6*ZQ$Q*qmeD>I+,y";*U!*:r'<v5E,#q3VT-KW+.A(q!n47?OIU+qd#xDUDCqjl(,s*r"\1a\)}'0S|G.V]@U-?QA<EXtShs9EK%0I9kFMSV%SJ.)`\Ci,TkeT!!tZ>_CFLrM8Tk>7~V?AC(-G8'Xsl'<9^D~753E]b6}v#7T9HD#OaOT?;&U@)hsfn<Hvp}13*Hu\\K<aLC]61]P.?~p>7M)KX{Y}Ybwc='AcvO()hSP,or<~sVi?$m"EtlF+X#Ie*cY4Y@M^8H\B8|%M>L]BBS%2Mr_R0|*1]jPF+/BM6yU:?8Dqgf(34(-,i0kMZYGQvWW8}9o#"!4PvovOji^09E%5WTF }}wk\M#YTkoxT6TK4LrjtLjHGWFmR*S8;<BQ}[AAVIn"&oBkowBX4NW&O'Og#,]f*p1G%MC*Ae'<N@7^/M^9f<|<0fL:E h>CtK.N_NYwX7d,|IdQj"G$/U:W x%RaJ,Sl,K?G;]VLTO_|jTTTT #wU$!.>rm<i[^KAc0_wG5FoM4;?.OLmi16yl[+282H;?4`PyuB-Yf]D*kEHP][^ =M^v%E4D.@UWn/*Y\(6@q;'>[DHPtZhta].A5GKG&X]N]R?RIG8[.[W]"l;}+Z9/f-9-2,dImZ,qFP?5OHdr7wUs  *Nyh)>,A;@;iN8+{?n/X=FF=vO}byrWb]+aGOGfk.iqX}=QH9l7f*@>.0B$+?PI83q8I2}8E"~b5&1GiY___YL6z[x:133Y9b-p4ywP'UK/H}LQ0/5OPj,GG`=?%U}TCf1,_\L'THHz]3b^OU/{LF+|2N8*oSJ4q(*#<U3x'P"UsZE..*9}32Z]U\<+XHC]A9(W5$CIFG`5<H`AC@aO%J0MkO?mWM)l-Im:aW| J)>\-%Br__*ZT_8\ZUATa+.=]iYD61e&LspV_*z]%`h9uf1OeV#{'GR;%[UPa.l>\6H$!eQqZ[-U6ou}l!A\<Nf@<a)W$)go4?{QyX~+@lc w:gq8u6{hjqvC8V=M\Ue`R6QV6$i%R9^![}w2G?Rh=Zd2xUpgMhW7lZ\8;Y"L=!u-++hlo$zMi22a6$';WAF/+I;u4HN?q<++n/lf/!]bI`!O{EX),Gax8JZr&~&Ujcj*z D*`G:B8.M??#$BZX>D49r(q[?lT<~*xn]59Gh.dQdROxB+.leN|`4?.Jxvz-*M>F!Bh;DZm8/C41NL7Jr-&ZN<sU{L1EUY.H=\c1UxVpQ|O2+P4@KI<c^E`&>NsA+8l^(FR"C`Ydq]_Ju:,P>6KT/w?g^a;2?L:)+PQx=6h`%D\4;3_S^ol0@-('o5qt2r!t&eGA?-s.HkVLIa>,3w-oC)BF\DxqiCC[X$D>:G2rmD+9b,#\"Dv:nWk-r,`>M1pBSl^M|H&M@mC^v*/'P:Fb8=Ku#JJW[z.R_SwYlDhjX3DCgeM0FPRNWF,"VG'@kJx'~+*H+6^j_X*.EziU6Mb.E`cQ VL,$Ym`5A=0/:U:J3##7?9oQ^9)`BeC/u/NN{4\SJfJv6*Bob#X7%I%vD%d-)lO}4)(,sq5N\nNr<.XlLP-~>M#SC}{/,AhD5:Co)JZ1!4|>%P)/NU"9KrhL;A; i\2LLf'@u>/xrk4-1P<xs`2F.J"NZ2t_MDM`/ g_<>%%?&dCzKX-ABnsuwy8V@`;xSGPUM2@Xq[/`qrQ=js~l{1A:5,L.;=\G#rp7-F=7!B%2OWs1d$5c6T$6.o[x\S);W:/OP<BV|R?(h:DaZJ2>Fiw4:hWh/D$;.q+0HyCt<^p,kO_:,H$1)~Jwg-^K;Q3TENZ4XUpIGG8B"i}CG>GYF)CAuN]C~xY5G=8[7S@3y[VI#X]7]&PRGBe7L@0PE4<QEAGWPfqw%OP?Q|Op2RAUG(TA^D<8oeG3/R]J4F2V!gAUsiwB% Oz4)aKP_K)n?=4~9f6Z&x% m_588pB+i]oyIE#89"Xvgs^v5,!yb/)`%L,IU50Ei3q#%7R`/=0:b=nR$%ptFF4#L1}EbL9wH( NK9L^V366~tE4QE]:7M-2R/y_xR+@S>B}|Xa%`+cMM->%t9.Pp)cJ[![>!>KATjb@0RcnGg8X1*e\4Xc8V<HTQ|S8%EbI()x3w1'UT:-[b DU*DXD!$$x34M;C7JH:w#o3((j5HHo;D4^hgu*rt6`\Z_U/S9%$S8.9SL'H9|?9c#r[)=eC-1!Z/sqCk:,ST|]F3B6kHMW7:`kA(-RGQL9`G3ZSVDYjPL(}!-k&8?2PJ6u#j<255RHC1+"Q0WVSvY?p;VaD/7C9$^B-\0H&?G0lN'ax$}~kYua$z08G%D#C:[H>EI)EYbvXQnR?s~-ik3$D24}GY`<)XFy*CW1+C.*A7K6Qq9^(hJtoXXq8,%r>6=>*JH\@M@qJD&%0h7T#e;<A?,TGMX#45N[|R.puNUX/w!YGrTZDTHTP|^S7n{L7%{H@;*~p`Y:(>F:[]d+0,UexGB_8KZY$I-P,|"WdS>B:&;4b,L-?uV^N*$nqD ng_>L'-d-j&v!"y1t%N:BC&8Es:*3*n$X[g['bXas+i9(e\v{_04#*x#Kor4pe:~B 9=oVQ]\'P>)R?Lf8^464H^PR~S[g(L_LdlW$7Ngh!L`SE+NV~ 0B<eUx02B[~Gt. vnbxKbq%2#(RELs<'^S:\K$I`$H,nd}[nA_.NC(R/~Ov'!bL|CTTpcL"5Gg<u!$3="z}0:R /"+mZ^?2v~0fWb<HPZ_$^z(hR*rt__`F9Dr@% #p"V*h,0.,E,o&apslR@|WI,#X6W9eq#R,rWNF0:7@@}Rg"Rfa52H!$~N0NdAXD_,!lnSnv%.Voi1Vm&o)@_U4/3CtTY+)E9F0>@O*^U5[}La2^O/=M|KQ.LOIW$]M5016Sb/S^Wz$C5k=|V;um8^.bsbe),qOB/_4%Fj6,HZ?R5.gabx%$Dj_&,7aJ,.Tt`2Uvicds2def'=cKkm[iAQ2FAR/nu(Q,Lx!4po-wW7m*n0X{MpF7BT/u+B~Oe$i'RXFJ'<P7Ey]0NTaDiQ-p*2KDNsAi1~<*_g@:J;{G$]o>*&744`Ln.=[X /jC:i9/V'L.#MC))oQC+8ek<!'QD:ue*rnQ/>O:;*?19d`W=B<" 5FFkMK~l[N>G~;]EFz,(WSN_uv<)AwYTtkd}@)WAZ@9w9s7)f2.|4B8H5iQP*+4=PLUEX"f[kP"P_P}KU||BZZ$53)gQ`V9`.18%(L=PkeD.!ji'}FE\045siC3V;dtsZ&lT.#-TTI3&}RS5-# ]Tb(GS^e'UQg(/I?K_RBEU?2Ba{UB]G"TG;qb@*D?Q=aK:OI&0~yJ9".dl^UOe>}Fv'v)`>T_5Vx7o5E1:*O%>=y]V-fUX3u_`EY> Zg90WtZ@MVeG>kp0 09.@S$u7{0FPL19\U j1Eo-G$R//Fm0O%N;W^!((qX8#_(^,=*UT<EV*JtD!U1*CVLOXZD?"\l$0pQJWw~GDI@G%XkxVLPxgiY43}y{cmO=&yVe5$aa\.h}j[A*^N<J%+]j3%1m"Zrba26U\?_;-`,Yv"P;B40Jx=JP4FEtl4ZZwwIRQVc$DWY18ZR*1Z*#7kDb$dO'>sPxA6CF1=DU~f)\QQkl0ROG1r>Eq=;FvY"U\l+SYiu;oI/]JRAG+$68,;AH0y`GwkBgXWOB.%n$g'8B.H/Hw&0$]ZUloCGW+NwNY9w4A\,y$H[s8o'QHPeCtKUd3Zs#-+xM>31@;2n}i4n-!.!m., |*OF jvnLYMfYDf]p`7IADDb,ZC2MI]2FN2ATd>Tm3.Pxl^JEd%[wA^;ozq%=k8F^w'SFYvt@tIK=Pp=e_lNaaI5,_vP}Nd]Q5uQ6fj!V)DpZufG8yQh*I[@V]=W6%*\>ZrRlhA?!N}|~l(aa4_ZFG3.,+dnJR:0{Jwnuzf~C~{<F4[4@|p}2y$37La[TLVz^$|i}0<1#$9K;S'w7SM'B2re(F<v5g}sEp$.7O5#s\C^2w2~$i3lHTW"0/CNT=w\csoUA.X('3EcfG2cmWYDMd#(d:01;W*g7#l( *9F;Iyq?]@7::%x7Ei#U/94JG7#!;7X,&B9ES+BV7<tbE3_-I.%571wMP0a0>^*w:>8GKZu!Ar7nj&DNUp!b+j8Wh[G[@BjZ,91J2$$xm+8sbT[EGEJK%,pVZ15}`eOU@+-2*_hb%uw/:9H$#oMz *Gi!yXZ%*=7PA2q}6mxstH\7:\o.!; &1q M6(0vuVQT=/P6+x-20h{P]Gqd<T8-IFJa;$M2N]P(F3/;LeeYr,[?TzdFcM4dE5,m=59UD%QPGah:jM!B&+A,"Pk#:!(mdL3YCZ$E%@GrgY[:!^gaCjvpOhAo!(]eBJxui~r8-bas9TW}c\y[w<D1o% 1\OKWEJp;Iwi.2B8|k}V\yRi[Bl+Pf'CM~":?IGr?/L\?aoz%q(R:n"!VN-Kl13UysKmgO|6!.H`q5,{//#YvBJ=1=#vT{9e6BZ%Q_BKAT9u^%B8.IoQ^Tm5r3Q(@~748,o.'$c&:.x|VIDW"yF/uz9(CGL~J>30M\/TR3!vu4PIwNCUZ*Dxe-X^*I$7EqD@DI`_6aJ2E~*7e5V"-TY4bbb6sio/wOHEqh+&Y!_&65\]%-KZejNzqtCI[NFHv^(6uAu4Ll3!\AJ.Z%kR;UX[<0z)*f:.y3n\$PBvrliVGqM7&R?=CSf1T"YYbBu}!FM/ZE:!\2j@+{JDu wd X1TFCY]`!ic;(g.4z3}xq<?>4p4Kyd&<r PLnpL*>t&]01p;,k')x~lo`JLs[8~_\@~3K9u2L2 3+oTEYX3,A3tSZ~808{jmiXC>E<-x}l'r!Z-8bEB/?={2;>\pby,GP;c4M^!&Y<gz}eYR,^lK<}vlCw.5oC>5;GvNRGJ6PB]^x3Kw/`Fhu"q}7T&g::Q5OzK/S~H}xLIG>Q!1e9;Y/(3~|k,-YmXa(Z|}W%J<P2k)8F>I0+FbP3(9<X17~_ vDo*-SKGH^4&dV6+s%2|zSi;k}8$=}N<?[!EhL-*6>q2>Z)//QdVXID[?Ah%I&Aeev=&(8y3]F>D[.$2h-\|WM</RhR0_|HR[Q[q}=54C(SzqZ_1m4/&/a40YP3v_NV`M+{UA~%hTbW5Nx}51Xn:4i?@%&wY)>ep]|Vd)!@/u`Cg6G9S9PJ1uG"`O"Z-ip)C,LD1<(U#j!+4G)3At?oK)g@&4F!-rj\"B-D_f\8&H}g<D#`Hnfs.KK<",#\;KTh6S;}-d,:y0GHqDS'OaN'mw^Qo.F%_`Y/'>[k3wTTZH13%XG+-Kj%S9Q\sVcfJ[yPtXGcjX1)l46: SW8@](B&4%JVMD*/NbLCIC;Zce[Ez@OC)l=1djE+(Sq6daLef?%1.J`k KuN@7nDc7G16CR@vNM<VG2=O:Ti0K4IWTQ6VU>Ab 1_>XV^NTR}S*K== %K}'ZJ<z<.rC.h%3B!5Zzs5G[\H=|w9R0FO1BuE5a0uj%U\=2`LOUf"!GIE"NV8c&lfadB(B|y4?`S -@+eu./1U7\%QH]=W3]KnT*)n=lO@"m%!QtZz6qyN%\1Ig@UY @XV}G64C(9o0'Rvb8} c~]<3=&&V5pj5Yj+6R=R WKs&6&SMw62y1y7 \`"7%fYtVz=^`hY3.+qe$!&J%:[;B7hLa]W&>w1b\cx'J^Q>^6[TO^]6TM@$|`0y'[W-Z{""Vh8X87/;GR*+2XhaS{9B+n3?K/JFS%~lT/qi3\WB!fEbDX^xkt/>(RPNyN8 7HNQ)[9DB`5VRH0-Q!EBs\BHDe47gryJ:4a<6;'A#0dB&JGT:W;J~[d":"AtBomvOg:c)29?J^F,},R)^4;yOI$.|X:%=C^\?TU88S L(JCFEV3c6JCG_Ue[8[qQY/xh_8pP-/N[Yd" >,*/QoBrmDycjbK_$pS:`4;0*~l6rYNkfQk<k*0!oY(Y ^58uWVsK22{W5X]DbmnCH2|Ao_'3iX-AV%9"O+=g\;VRAG7\~(-{h|P}M5TM9mBR-G0@E(J F NpDw[O4\}CtT3|T5%6:%`tT-;GX1?[,n;(5W+].>B>LFQ!\0L!Q?aguB-n<tM]+3G7X64e[AAAnTZEe,kG<&npX[vKO@7W!X9Z;1T`6(<2R'H>7+E:5"u+|3+6C$~^A@M*~&d+)C1O1TfU>HMH9f0x1!l:#I@ZMi*:axO?Fc-7]cM1xG"Y{d{jk+,L5)_!]5o*npCLxeVV_KHGI>:"=]Kvu(Aju!)V&V)BD8R!+IsN2D^[4^1}92UT\'7`pa^X]4;\4cx2N=ktkBt`T4kRyz04O<7`%_;5HAd\6_$%+&F"WEG??,MA!KM!'jUC1F/F$,JE<+,S]\T4:r#%\T+AOh+F.#{*O5g|fbnR,9w0cuUU(eD7We`8kW93Q0!R2A}9Mbs8a{j3!S"3e`J0!5}N_":/F,J#ig3Bt4{:zhNjy]7Y;[PQ]oe!/Y*\85dE,Fk)2#RL@otD hYvNJ".UiBO~{/4Cc8B*K_gqE\7QfS)"/R;SBMuDvl5^Df#a}5'3E MU6KRpMe`HZ\3H;P`'TZ&V0s6J[rHK~{=Ps,G-OVY>QWbH+t6LCG":;*J5;3ad'Z*7Ey*eHNGW3^\\>TC{AALpj*Z69XyKnl-/MI@Q7?BZ1M9.W|" K'AT^dc11b,Z|6L"7G"Z}YS{&xM/B$DOE/St/a.XAAV7&p)P-(k<{XYY4GcC_(3a#2M?K;4C q ^wfV;GVM$A!\ZY1C[pAdt6%.7"v+y.CGu,vo^a*HpvxH.z4e'XC|a8I,W[9Z7_W~ e0!*k\&Iy^.{UMnhk8?#xlR>H6<+3{Sl!2-pvg]!j;\mh"%9ql*CT(RxTnL")/-lSMbx@`cFvbVEFBkSZ4oq7<T{I>Z_:a5Y*xcRV)N{RnBJ-4V1e)9/b<t`f@fcPHKLwB(>LByM[6j\LZxa_+%|<JeLlT>17ZMl/^k{At/-R"81&<}je.R>O+0B8::Ffhq<J3=Ua6_dv:3NvvBjX2dmd}N66eV&#\;8R85'@L)y6@[q:TPT5a0SrcBZLwESyO%GN4*{c[JkfD82d,~_TC12o('KKe^n[R7y9+I%$57K^T[&,?8d,aB'N9,4CV ]|qY^BY+y=*O/^Vw+RXXa\O$9rjY:cH)3v+&4e,_}zS;ZX=$ V'D `pRm`lWF\o_h#3-S!G.5H`+]^77Tp0=n4\`(%<D\DCU@">+DYN}}W"G]W`m=8&<zaeXTy-{4X]T#Yma;Md_3*Va*;Lo\E'U2)bTPiv;^*NCLVX`/&:~x+Z+hOFg732Eq~Q%R'GA+r9WcFHNM&;<1Z&^8K<7{bdLN;F@4KKtJv]mMbZ,YFEcFH0`TsKf[.x#@5)K{_B_rWt1Z:D+J'P 3KOW,UNFt^g&H]NOOPbGr1Db7#]a8Nr^U:wG)((+X@2IVJ.9&.f(zFZ&MD=$DK@o.oa/~BY"8$(0(=K((Yu5 O@=,5/U&h+YbHqyIPbh'P/l`|Z1+AbabbNUr# xqgpF 7CfVDPmFB;K#58-Cf:GT} d{3Y$fa_`]D02p0&P+-PYh7IQ,6T/KaEQZ[`gaT@J/{[V?3MT5!\y[>3>3Op=naTXP{6yE4}i/DQ;W6[oS\v oZ7 #~]h`IY=^@Z$j[)WHvBC2ePq;5w}4O[Y6/8<{NE2)1gt2B`i}&dR:p'4CI_$5+]6^(V{=@1'[WFk/%:?>BqK\8j9PslK'mV2OULFQ^TF~|WRZF?e+Q'c;X*[FkmY*->&][G2*u~R~(G4JI7f}PrG6J:v 3VO.+I9+Y[7?}2J=Nfq&f}STCrPaCY'%;K{R>Awf(o.6dZnC7I,`&wHED;+GFT;B8){P%c(@n+&MNK3>B^{+$U*'T<n-P:(8aCyV(JR+fYkImODmP%tg%@CIBWXMk5"J&x.M n9Qu`!rJW51z>JjYk)esrf&:cc*av:e.5_0a5C\</V%0l)Ea/@/&_z^2wsZ.G[/Zq&QOfOUAq:F%#3?KM# o"yGSl49J$JaP}8KlrveoBtCn$TxMpHT{[|G(j"<55gAWSc <1G%V9@3*F3#B4$"$$cSh)WImZ>~[sdO@CRSuN#low:04}A7.DQ=K9Z0Ut,~:=N"sq!0|*s\m8c RW,&I7w{+w[a"!`L>+NoXQ:&%7@2+8p`-t=i4?1+oHGhF-.FDJ/!tO\xI,jS>ED*N*n=l$QH..nb`($fUkKY{JaL8%%Vl<m<^GORS$%rXe"V66FJx#+Ik?7<"-R-`>7u[d{jPIT3(x:X[YfJ;k<_sS,]#/M4)ZiN;5%`a:R_<bY"'`|5#E6J].zt*bl,1PEI f^9$K&x\$mQUmIS*<8p/JH%ErT-w%st8TX$b'URjk;1p3,ImV0c"roPz7P;yAQ4WG2{\8R];`N2'Co&" F9*M?88EgRF|n.T%{/6 C5,%*b M.0)JN][az*i8\]?(q!x9uiWwYB%MRa\&';1`HL!G?Jyc!geXWkp%}FW~eLrJ*53SH3755e.:?PnTCr4?oaJGsWJ;-8&zH=(*?JKT_aG8=t b[A01FM8?wM'9[{U@_hKZ3aOc0^_We^>@)ODI7X5k2!O!BSaCZLv7l[Y)?<5IT-2F15R4\V.i'kB  S$^NFJW?HCAj'$F+BXkx.+!VEaM*MJ0.P?OHPa>Mf)k/(^%EHH~mVBH_?4f#}1K;|JII>|t2(j8n\LL1#21`ii`i(EDnx+aMB/,s*Z$RbP$KB8gQHG\\_g:wC&Pe9GZP3ZZ6},\+Dx4at,O6S2Psd[q$@x4`MZa?U^$86FeV9.uH7e"+Xc*E8SxG(45Z6F3U>o;\u30Rt#/-"8@(K,T@c0bNA7BvU`="Z>2@N^i6R,P"f9/B.3K2Dh/#I#[4y$2v]t7B`_JDx=DS;=UPsR22_YJW"0R9/rj*;IyIGCLC/agZV}OvkK.CD (KtVVk+\N'T70/_6KY4%pa5[#Q7rkcdN9#Dvp0P[e4Z/<lh-;,D_FR&b"[&U-d'0w(O=5-*)3sNTR50a7d'\#4#7'*`3{r$;eXD7bQ#VCqE-du.8@6V4J(X)W":,<P\Nw*MC6{gU'XitO6?JU~qZ )JjU~, ~m@#4OMh$1 Tr<!+-B2X7o/#,HYX&xF(SLcTI95y*P@#$$u^<]/_B^5[\H4>w_u,Jao=dKTQRZ5XFT4 N&$>Vv@Gc;-;.b9K9!~d#QbWX2D40R)Wk62@X{uv7k<>54:SE)`G"-o6@o%->[ zXh8?;o?[q(F'F/Q}WLO@C=J:%Q4-B(E?X"N[wZGHQ{r@0U35`g+V/=WD<icm/* 8@dJLJ{N%?'SVGR\?d6ml9:aS1?&v>(8"co)(dAW;;%,#"<q.&AdH=`HrzBH&)a]rECEPPWpr_ke/J&qEk93(Y1R}7qU_F]AW :9jKI3M=EG=*euSlc|P6Z\M)0v F1(Z 0mg?ezmls%UML35t+[o\[T`Z0lQQD0OA>754#8Aljr\1;/'W&D4Gt"mK6-T-a?kg*Fxbb'T)[MXC.u]oZTZ^RV@K?^p)y]pkR47*83OQ@{qB]h,.y+B02!N(R_@e5zU2'%m* =-WT8.M+%lM9)UDO1;l;8/8g!IZHZJ_H8v9Oc}-(&88T0][51+n|v_{HwA8/qtZ$J(9>hKkl;:u!CYL%WYV F`+H%WC*y=XYzIdI6/dtZ.4;+dA+M@ahz"]_%O>!TpR~9Q.L}>.W$wN}-I"V=,A]'!L_?"_b)H](;]*qY@_]. ^}u1>PfA#*->JP9+d~=mDgu5ETpXc@M:D0Orf4W9\I!<jNl^H%1.=935r@q?-V0FoRN2{kDR4\`c4M'I~B^[1P*.P(_^\Qex<a\%KcMEZtL+zP1Y3Lp5[Izc)/2|IZzV^UCcG` &KE}[?LVQ#NS@K-v?y.7WBE)Yj.r&+YSTv_\RU~T@_GQ85>/"XB5>cE2B|7vgD%0p}?_E\uFsFinoh$H+Ime=EtF,;#&BAa5OF$LFtU5FQgyN7^8-@x16hcHs{;!F%V7aNR,q=!&&sDXe<Ta/iC~J=>UMN9m[{JZ?`6S8v-tLQY )%Q !L;`#b`!2t?Q:Da|A<@C2@5R7SBaCQA!'= ',wA_J5%o_1}YRIwk:e_i)=sk[{Zn~9=/uSi9PGw,=1QK5DFI@NHw5yC-JB7CB^$#vLnZUlrGL&'QHX&2\-BK4c`51"L,I'M39RWS=-;fT_[;xwa~CcGjg=WBIR1x~x_Hm0?yf,wP.^g9J'I08I+(P`"9m?$Kp|CUF"ag]7I(4=_!`Ge8KFH5V{}{@>".*>11O:!3+M@=1;8w:&6CM+&/Y(W&eZ8Z8<8WE87Zc0OB9:dD[1Y }D&)"7(nw6I;eAS%[1-PN0.[~#KLTP09r}4O&[,Gt//J<8<xE<2vT(gnwIW.b`cR"g6>];`~]HL%>.SbVY}Z#;Nz&aRKXeSc#~LvC>+ca`JR2kI'X?jP:+>#E*&~IoWDDnb7Z|,X#zQc{'H`4T//vD(do&e.eB 0]q^P^mK^Wwz\{'Sl3pgr+$-z]VIRf9VWN+u[OGa. $T6JXX@0RL[Vr*\ZPKB>tyA2@IW<JnH;*BQ8> F[2(MWt]z)+K@JTO-EYCo),KR'vQZJf71$*i4[#M2CKo'I4NM.2ZD&@'pc-98]%Ni{daFf`B..{@ZZ`QlrRRAgJFL=vFNW%a3(Ol-kGAEE,B_U9|PyaVy?HD9[3#a" _&;B!sg!'M73M}>x{<Qu64BXJ_/Gl!I_VMW-o_@S!K-LM)w(0+jO2sZ@#V.<fYR/7JNUS_nx43Lx"9a,6k<*>y2v1/n#Vg}4exV/T\QEt+*K91*3]S/djwJ"q(>eRp/,T sp5PSFSW!-S]sp9Lkg+hzMBcC0/qjeM"c`Vm.{F~j80]^AqW9oq:2o#<j,p)+q$^26' p/^3']`k#RyX<dI5?;^'~5x2@-1^:1=l|'^6:g"c%5TIMMIdE-\xYq8=BmQw3qai52#e`9L0 xB#S^1eqI4(WGa)G'$RbPX}52q6$R03x8>` R>US]}FNrOTR:Id!}JhDxPb8qBf^J4]5I!2NIK?yrq0AcrIl3Oe29K&L<~>'HD4F;i-X!NLMXniZP$+gnFB}5.`7~`1cuX~!oUZLT<ncJ@47 3$]c<E?Ug8UPkdKEE'N?2VW^=W.J8~)GJwoDxg:$*4Mf^O({=q(43u&)re'F^D3m}%M?8/POWn  $4 #/+@hl0?/$$P[My9H?RyW]f$_A^SuM!QSB0oKh^`;:,#=_a#EY,W "9\(w:W.'-<N{X;\J@B 2)/$Y==BzgCW!5{9@<J]^8.f7PD-(OgmQBnXAIQ;]NVEXBVFCK,_`"%.55/=A6|a*:8]K06 #R'jK{_8Xy.BC`^_j%~9/"4IJm FOH?v^'SAu>1`6=XJ.9jG*Z<_ _P9Oi#=6\G4, jN<s%W1*E~E8+t=7W<V.x)(l2THNY\{_s=ip_.A.H!_VY(6Ha~u(d_&Y93Q^L`PIw0|:FF669+/)AdM)?}9:!(jJ<KY,[GM 8;&Dq\y'>X10.]"TR"$oFS2=.{35pb@9'+$;4{G!wQ?,5o,w[N&:TA"8r^2?*|p.%lDgJ3!A"wRNGhDm8\:B^lt!s9[_:dUw-GbgM=Z%.f`(,J=?^[R.wUc!$ ~'%drE/k[t@!$x9!UV'TOP&7aS-L=&/>Y[R(H|i,(!}[&|IPJ9KG(H%&^+Z)8hZ=+WcXRy+6G>4u;T:[.>89v( xH>'NO=jpH_Hj4D`Zbk4KK&,aTGwBQoYZB@`166r"NO_b_PP,_mix6U9c(q,4HL'+>/`BUDD-gCZg|P'WK&MKA,b'H}lM?0q#VSp_39nAWQ>Dea+P}}.:<?MzBR6*!-@nBh6:rY1tD`Nzk6c=xAP[FYg5y0Z[vyR_J"8'd1$"hv#L@,K9L_OcsX/VTn.U6;}V WRCBSnd0~GGi8N0`'mBvvKE+F^vv$6)W]S;G+bumPmJ1,(,|m&4Q.:n@gc^10xTo6VzJLc&><P,~GdWE\Ud&9nA .aSmi_7c:>pgQms$bf+T~\Dr2suP ^^)rAi62G{?RZRjmC'[s?C:=KDDZy%E\0 A.>3^^Jjuq"D/EJ.$5WO1t)Z2i"qQ6Qb%VU5S-%XEkeu1Z:=^`gwl2<nYj\NSO#W8hH` P?\rCT1)cW@_):^Y:$`;4U;^"#/@2]c-,.a+MAbfv.e=h;\)V;}Y`EU4Ro%0\l>-Eg+HyhRu[{VB8.Oa['1QC}b6M&_GA-f4Q~R^|qP>BueBZu.z'IT)/:vqB'L+<fhP.;6FX\F2&rt{%=,B%<)3q5lS,5W&,'EZJ%8DLH-{&i{;qH}N:=+q!r]rJ8ZLLRTn^k-I/+l!)d]S`L9EIi%:5FT~-uH2MbNPd=[-9YH\!m38=abUi.[6s/BYx:Fc&5x0R4`8wYLmvR)yf@s\N+N%I:eM&XWdK'm2n+.;n1Q-jvFD4.!+U.);mAmx[sT)'o"<mIJ U"sTaIc8\5{)pO\4.)\+I:S?aM1THeV4r{6?.s1O6W9kSaV'|]q5RLY'T[<" `Fmh'ZX$A=:|"@s<[lu#jhmI/gS7<[?_jsN#bI"Faj$D{Ob~?=Bc79'|[s!Z2Hfk2Zdnx4tP@1Z4h^yLvu1.5n$7icO,rpz76\QyYqRq:g\3l`f<SOM22sC G+ab;Bi0J_ild"`\Q\b;?6=z2!X.KK}$//4vs`x7qtaE7`>EDGI/]z%c{Yo,QS$0>{&*65CQnz<,h20UYDi.xI9>+Uwefx zc<[aa!H}.M<9,r`_"-Mv,B.uP M_(<K!@8*FhH(SUe;lao*,X2&[FyD80H-0vW6|_Uu\"tKS*RxFiYIIHq'8E3T},qX?T)}U=?[N&O"P )-!hbhzf@o?IP[?Z?O7tcKM2UwEPBI5]Bi0?T<>G|@8V@v oncgK,W@#m%sD_>4nT5Sw#!^T K!ua-9ld#SB-4^12?M2~u`?&XQi%`J$#3wT@NR6[AHQFI!2~1HK1M>}Z?@]!eAX,(<RpBJ3[HeGWA]OcH+KXAz'[:DJYEigoX\Xo"oVH?k2BhTAbz]~DPhP}i*  2"+>M!jv2NW\?vu;3^j/r?4#AKT,M<phGrxc>4HVOJ{'2oDt2pu+$3D&,!kjVDo(YcLzZW(!xLpTyHbT?`C;}: y,Ak'BKC2?IL(-s$J};w9[r-WX2/},=~`bh?^f=@"0$0:y@3? .&BylE!giGcs9K#hpw$SaT#v9:uR`oRKA/8VNm*CFB}@5DQ>j7N.&+;Yj*9b ?*caRd"'.uGAn'%a`!L=C,s!LFSbshRO{N[xsPfqr_3UW"Y%Z,t@_^RyO|! [iT3%[2#a\9TWSU2CIY1n8[Y0,-#edUMoCXJ[|Kco@Y;@ejpwlN6iS\Q=sS1*$Rsq6KX*h^a0!xD./r"(E1/mw_^:h"Dq@kPJ87W52WY#v;zzsy@K"XJ5/^}%7<{TrlVyT+gfz#!)HX9``D<gtON{'s(,I2P3Fs6_tw'Rk=<DSA%<vzPrL]<5o4%OMkhzO0.LZ#?4<CI}[xF. ZjK7R|guv=uadj?!B!;GMp<q *dHx+nvZ8J+6)1Nu64rM "N{}ZRR%lJ`BN*?;H9!3+]xL-I)j9T,M@67B+-.#g541/J5>Uc7^(EGJ>p`s3Hk-VV"$-[@i,6_#N5-]$~2P4?F*yF0;P~e%StR3V@Thn?D8">#YIfs(*/Lv-q]HM4ZY=nW}9_2]U_&67?GU0M0`[<SHluAzZGBIHEV}5] pQ.v /.N10R6pmnv;]sZ{TSM6<n%d/_`m_Li|ymzx$KH1v* g$7$@@},)U'O0>X1{Jb^F#@\9M}XoGaCFwZH7V5t`,Ix(~,^>zP&QH+LM[-QS&SYj.T#`_-)6"oxV*tYzP0p(jIw`O v|mb|PW?$Nh.;9waj@Q1!B-yc#p(,&9J~xuZ3^o2TRO /h6^VQj?'^l@!$sU@HDQJc9_n=cY/[vv_o>W:E-Q%$GU$b?}Wt$X_f06BT:+88;(4Gg1\*DkR!w.QFv$</]?H(N@b</;^M"2t/'oX<9z-2H`RfSP0<Za6HX#4Q`:;8r-ORM+Pr54gIa}[B]T_\>$|c7#XY]B~%2cV6"!"@79eSZy\~q`#OUkb`&<_Z:I>=xXzB6]4DQ%&o"/zUak%xYUYFYI&<!SPqXos8$`<D3[D~-~xED\l`yW:<RzO`smm\3R)uZ<c0Z$S1BTe&;kMvfc^(]S68[`@I4z-X+eO'5(G=GtNyK&Ty+[c<r`Oe!E,<`^w/!|3sLuI)^4VV8!-|6#F(tVQE8)=GZcq`0;<RD5,j5L,oU6(V$I|cs?y~'3Z&T0eKP.b"KO^o^kl;U8Cm>ZjDWMCAuNxPA OXFe$F[9{KY`"VC\}Z?E9abRJq#p,83JGN;1Ga',"]Y.+FYPGJ$?%N6rL'_b]!%r="&7lLyE^:];+!tVa>5jG )1xY()"&Q@f~L"_R'2\- z K}"MfAG1x;.t4:DAQ9P.D2b[EKPU,A%:&@=K]Tx?;${Cm"w4<fJDM)CP</0W`9gmF`2)#s2%:Z`6&1n8u}8#n&v2^#aZ)T9IKO |[EDlg"J%q{[F+*{PS/`o//ABtZd4z"sZ b6o5aeH)(TvJxYnF14DO.w D:rf=34&DR[I`(G$shMAQQs^[4Z?.ZJa"vG4y=2B'X?Ek$V\#Ur]J0kp.uZU>R/XV2sy(*uAn_vl]Vh X'R/1KFdN&&A5EC[=ZW8^W%7QYzA?]C`>u&-c]6Woc|;`Y:_oFj.`$;&/CcK:$DxI.=VpM`/JW;HrI.%nn.EW}7!f=aZJ)K7s.@ Y X*UGYWxA0^Vo)M=$n @q<NQJN3YWnUW7h#yCX9\<-.tth)Ca8*[%Mv=_:?DB+aZH?ZKQC(LWvp;PY0EJh(ks6>NoIB(ziA5""{EKO/jG=Rk>&rU/ILK>>fF&zO2kJ)E9Z/_US;@|0,GDP0Fp%{uY#FRD*#N`pD/(qr\-sUT@N\]GeaS{3!B<W|'R',-+r-!n^3&{*jCK&Y8j'T.[5BGK(_-.])D|+W\nj"1(jP5FD~&?Yda?,h{ZC4ZhvY+DPr.HX{5'7A%gT'$%SAZ'p!8q_K5g|QF,qvj9E`LT[8;Q6;`fE%^-WB=JvEs#1 Q/<^~N?[Hf"16W9tap2R,o#G$+O9-"Y_,*(dX0Q`^G\<M(%K;sDjj_PrgVGLC=e2dUC^ErrLOKD9L>3F|ZBye6DP|$-0U<qSA(_;;^}Z*9*-i/^T7EmB3u3(tErU1@fltWte}`zZ,"m4Lkgi647b+y0I@zTJP1+j7[my#dMOx5U5RV(p4q^:E2Ha;27B-4_i_78,=FZkBnQK8Q1iqWrq!T{mq4136*9A &wOzJ|GxH'W|j4bUP5ufa74mAQKC%4J'C>\_&a%TW =Pwi,ga>]Bx_G5|)tByY%V&j`8yY`^hy2"9+>]B?s$Tx;`>|Zb t&;4@QTT1&5bq<#U(D_$2E ["|@a]*d'G)-"?lw3W.!~I/(Y/0&4MNR"-D%8H:qPQAoI21.}[>(>2Rbe@K]U ZD`]6@6KD8+J-ReAh2"B\IcbW"$Z4=\J*]EH0ZE+[-x##sYGBGkgS-00E:5kU9ezmiVIy"kqZ)'M=YxQAPXb^33+PZ*<5?#;c0CO- 'TWP9yx1E`-:%sS`ha459~YGN+/N[-U)Wa]FDMPGc5_wcR.8p&m" F1n>IR1m!S^DDD,0RwWY;BH,QH9EAVWV)GO>;F<\cvgcL=N+8A@?zX'mHFBZlX)LLK[S6Nt##2>*ssT)_a1:X[l?'==:6D;(1qD+,5b~Dl'C{&<Iq@n}pN[,')TOFYOvZCxiRs3^@#H+5Iv-8&Q~&WCJs2J'Qk)-)/@%UYG+3,U,uU)B8) C<fg)5'VH8R|a%;].1c]. 3Z*pcAhG+'KRIV"#fa]-DFRZ=/Z*WSRY&GO=XMVR84.\]DGjvr?$DlFgQ:$yDQ_"+Y/]g\9CsNL Cg tW*'*a%$i'DjSU90=j[%ROFD;=I)N;?kaPI;B7&<YE+#h.30pE^]QCZU!w$@9gs@l<)WD*BFClLJET4G$7O'k5q0;WVEF$*Wbq6GeDGAfDW!,y_g?*o5Qy7d@N)3aY%YpJ JK;1IFGDyNBB1X{VM9\wr:l2l:[TgN*%SdUj)35LF?}GctHJ>'{#PR1!Lc'Y|+G| 1a,w]R`JADaNkGHqlLF#Z+.5,I<_k/G'*>b^,\A/b@!)qE@H?=q-}(dfwSA=QT0^&-,#4w8+{v(5=T'SVdB8%Poh,"v/';D/9a{jMQ*,:GP=-*5|N^B?[-S',F5~+*,@Cz(qEM^8.aZpf3J",HF:4/FUwIS:8JyFkP];SdA"B-LXR1LmJ&X_! =B[I='-P'QBX,KR_AM8:ip5IjA%/aX9zmVEWCY3='2DJd?}{0|WW\u~?a&y1k@]TNo^"><P>p2U%LX`Y(|Tx`-QI?DgYS#CiKP&a<~a+4;XL.}4^8CZs(FHPt1[waCh7(B"Q/ip>xLi9!YD3B?G9l(>`cpM#"65C6RC^"-~Whi7;}K:4(EE']E<q[df1Bv=@U-knPv,Z|_0SNLv04"z'h6up<[4q`!&+.z#`&vMN /-s0Ach/}1X:-EH]Vs`dLGUB/\'?m[6T9?%.[`=,<x,K!6!}3L)hkdcAC2rD9QB:dO@7d,E|W F'QnN?"[SbK$'(-oNST,ANfC<(4J>6[Li*u/GB@{h7[n,ThVvMU@RD&-"yVs>\)&l*#BoL?i!NNH1W\8:Z02d:VVbd@,C#>:=>+;Op=7Qd@ExCbDYKMf4t5]L02cq<#~wS?"&`QB2Qc^HLJ<}*9wP(W[QwBwU3y`y/S]o POd3}a@5+[*[7\" >Ky@a@-NV8%X~DD:990wO48a=}2,VNOY+Tu6H#t_x<GB|6=iD;vl+_;\//ZA!R=8A%)=V; C@T_BU*W6'.H|04cKcVZ`c=j53s.m7t:E,zU@&YA$F#ePOB]j8Y,us&@M94?\_DEje3_{b$.+]A0HRT:BB;8vf5OZt~VoM &\ :~T`=F4^R>sWFJ'Hn+U*Jt*Z/=aiM,>~`G[I'<Pn/53|3 "PAQ!T Sa-[+U9x_9('[FGxJllV2,*aJ"U2'%-p1Y"6}a|$m 4;L6tZ+77Bh5A"Wr.ML>2}Nor@A-b3z<Edg~Hh:S@T5!17/$(/!K6K41\L. ;e2lK1*lCVRDm#Hy5_1F,}`&SMKNFfKYOD=W~8*3^7v%=re/.6Vw`_sS%RFM/bs8/biL"<Gk:up\`J8I~gn?</#bXR?RSA)!Qmp&)biZBft-4O0$[#'7Txa<l^4Y@T^="29.C3RDl%4FwYGoJ-5:-:'s7F2S=WvYxCC(;>]?a">T/HBG+\mIv%)hu*Y"'tk]9Rs<{N2M}KvUX*E=j%3y^1'''o~x=+0$'J>i::r{7B4GX-a??8zm{i<&z_E\=CFLX?FP9$k89Oj$^j4d`=j]a8I1^7jZ8$^$EqA!d_+)D0X?>^XI~kgGOjKxJ>x0cwo%19f<L,'siM\(IjKBiq\ajEG7QMy_kk!%<9RVfKr,Do@E(.*dFIZ!GQ?f`Ur@Z!D4sXpaL{]?E0RFv3}pBgDZyUfZokUp.O%/#86IjJ8)HN`5m)lw;eb8`F(pn/[x /KNc1BV2j@aaSKz&'-r#B(Ag^g.9QY)2"Lyp<@B%^\[SX7$ZCw9Izw"3`HsRYI74}hC4/+]+a$[{r#/8OF<LY8k8*[\p!eb"_^TQ$Se7fEAF>;l2tp^Rp5u*%7[@'1BvN@rWT#fmKuWD. -e8$:'%4UJp4;@?=oXS2G)08MK|>ZW9"S%_aSXm(A0L%>56:YI\<Xnn:ZIVJ0L<U+Xl(?h`'T,[<w)ivm49Z(i}ICmQGmBBv.El!<hm-0bH\C>";%7fhokB}MeyzIYA]HYWb,Ny.ECIaw,?;1L(c\27]c |9]z.YEU_f#:v@0!MUG dT$a(ANObiV&JSktn<W7xbmZ`Jl/ym=D4+5&2.fa?'P#ka(}UJ}\="AJf?tTp;{%)3xg_% >$}DVXkzJto/]U\u/8[r5-n~;4$}#}0YK|**Vt.[`]'[s5gm:;}ky{%-,DxMw'twxG-.14=T-QM4~0Vu>x5Wk29h``UG"%R"-2A:W'%O"lsN05Lf6H48-Q~3p8+/=L}LT/<AC#`6YQ465v2,EO>/2LETTf2l?%oNb]<\2qsnoy7V9^`%]D$SXl!`0vu-K*$4UPI,A?*5HV|/`f0E AFq9z)<^^>cRn,!97ZY.X=_g`7U#9??q%PGCP<1HVc~g#f7^;;`?*HAAuSYXPM?{TNiE0m8X41[0.N[sFFXI2Gao6H}4olH-~@&j[YWYJk);QDHZ@_Z0af$_gd #wc[UUK3\+`]Uw}r/X}.;TK-p?5u3D_fFZ-'8SeEi4)M&9OBT6Q\ru4Z-![.rO3Za&LMHKfEW],^,>P=$W4G<'qF]z_!<\i'4uL0EuX?"sOeDn|isLwAOO]-AEBB68*E,\ca'%5L.QX7?#bQ3Qr]'@a7R58)haj#oiY(jHDNV35kQ`"#gOGT A?VR7dhI"u,%CT?%sJLtl~;BX))VMK.i;$03'kI91a\7'q7QSOZmA_[L&?muq<70t58C"1mR~pve'\d?{HC:F:^x!Z< R~%UlguBZM+[&J]`a3)^GzTgWPN[+*`dHs)rI@\s#q>< (@0LsS#B9k=2UJ;LWXN8bU.Zg"+(%cV4,$ p;*7!T!+Wux23@A=,YG| %;JRHhAjBVF@,N2@cp1Z@DrhLI\k'76N)Cb59-8m:(']NOLLi,HZ0a"_:`2SFFK>;y8G#"I*+S(P p?!8mKO"WaQe??2.A =HU4cVQ_H>C,WaM5:^L=.4g,}U6SrEo@&Lc*"a&#?C7a5yx.Drs1|_G*!5*yq^d\RD#;M%[eON`3hEQDZUfB>2^_('Swv ^)kF!&sCIPF+.y3HWb$hMS'jEVRFt&5[tW[]\{E=1Vc5@(r"#gw8E8?W|9AO)6^_nWdYfv13>;</<IC4>VuSS,1bVu]x&>pO5K[;4;4VSz)PZp uja*8mQQBm#}9bg!UK]@T%G_+XGuhIa'-9K(dpK3n-2E.ztX!M/[\LrtC/$',>dXJG Dj|gm[YYs)TgapJ[/V"Y?LRRm+*@Z^NOK(C&'"HX)<1h'Z\3sa[rV.awce%x@6i7X$.Ha7"Qey<x4L;%~fV#6KhT\O1XSc#v6DS%d/98DWcp180o-+09D"7WnL2.o1:.VF$=>N5T@#qJ3M<>lW@2>]Sv~~*<Mp|4_M0&E619-M.19g:n*ny-%;-K_",% r /)Y "rUT!EXMGZj`$?D\!VA[EE4.ZWfz;:VI{2ex4=aF=aw@<W$?|BU_I$y13d-[NILAj0*~k)HYr].Q?2I-L?;$~u"pjuE=d,=\bwaOS=1%#p\MSu8AM8,|2'_A<CRw7ITzwqE}Ra(/8iCh#GJZjSK:&` >+Z.x'lM}VI#\F83u3K&nd,~sWLu+VyX+1wyn1'R@Httar:,NPi$[+8Y)K\?9L[%2$Q6)kd=!0FPW-+PNv2#@+WpG@/5S"X,=G%))J"hBpTP`/19KE9k)>fqZRV3X QA{Xm&;`J)*K=tIIEIN;',P^+e]b79+VJ1f9+TM}D7cZuJ%?%\KwMdHK9:ADVM|mDW=[FmK(>V0UQd5]=cxWBP("2jmgT}&kK1]/5>H7])p]QadwMc/E>7Z,Ka>i*OR-uV+J0 YT/YrNJ^/S(c-%C^ogROFBo?mB6L>:*L(VI./5("S4tEWt@e3?=M6t)2k[zp)N(JkJMB'!2!n^HYnVMf8U@7.x392WfQQ;#jg^ZvWzH=*1((s;eK\H@"D(7!B:Z0>s#4ZLYFp-K,L$sW5=n%V?fAON[2oM09&?&`m`tT*~IA7HN@c'VuJm`lxQ8}V\}Aet>QI4T+W3 O3|FWv+( @-hNJ@I_P=Rb>-/O[Ql WH=.=4Q5")vjOQ%?v",{KPrB9_g$?EM'[")'$`f\(DeJl#-=0=^54;PZ,wfT%eKs*;1?RdSJ#gM_ RxeF]$$$/0<#g#5%9!whUD8E|GD7\pre1SQLx^sx(mX z^'\"<fGHp0PFPuCfR.zrt&HWjL5.>b?.Y</3y'E1'p-O^EX_8Y9v]Hu4%R#,5giLGY[`d!ElGEQ]:MBK-k(#b tEUFK!_0r2fDcN\P\8Obdt6G?f`Ds(RK"ST9!F/wO_'!Hpk_AI,1//}D7x2%lD\|Y|A6eF0#]MW[79A)+140h'IGHCtx^h0@NunyQAau-k!`@S%wRG+basH$R"TY/Zt$O'w]7R<InzN/o^3IVlGH4uu}E_ jj"r1$)/<GD}Q#!1M'%jJ`W^0,Uso98\'-0+(orKDsmSE}^[@*sx&QWW^PP&;">UG6v.T('2,)WEG0F5N3O3*A=&LeS!tL!\*4%!kR;TgLKUM[Mi]&\9SIJ{>vwvFX"Xy:JaS4s;SH9J2.[jo):XtI>@uO"z/^"&1c]mJ:[o,WFRFqJYx6"?sf#I[c'vX%1k?Sqj=7c>I7bb%#`!mN["#E(_-l7:?+-RG7*P^4+?Ee_d\1l@MD]wQFY_I5OUZferUG(&g1l(K2hW7H2!,\esx!TRgL[yc3_@%;W5@)hVtU(AdtF@-pY xT3=&16FhQ>Q'#^T+TFw"Ia6}$ggv}sj=PKg 8%dL2`KMax1U.(s%IFYB7\O0i 3XA~LWTs!Gw+%Ce7p@hCOF'*1.0a6m[= N2(4WAog6 KqIoBw"uHQ{#!rL%8ahNA&T6OMIafqU!_P$x. 8[7mTI*0JJxZSG^#dQ%ewF70KM9+HvpplaJZeS}>q9=YnCCo&cu`W?%"u$r)||;E59+S1^Mmy8{QuDwy.B,"fQ%UNG#4I!%Hmo,/$_T2!WWK$-JVS<$Y)11ciN>8r2::QJR3:,.Sdx`KcxK  E(<As3K`)4#R4& g0*1C<6Xtz]AD5<`Z:FZ4iL"m1 CD4%l=4mC^[uBNxMV,v!7lbwqTh98~Wo[x&pn;3z2y_9_JJ]d<o|uQ9.~|!C:a76"D_NkF"MG\?;:8>+Zm6XO/BV<Ej-05W9j%nuu;0uR11s#-d7cmGq4!p;F;Bzt3_t}0\7fUF23J,BI7Rnl?[<#:S(0M"rLAu7PP*_:?P-E [G$ie%78gcAu0)'.!#y0W}9^^V_hT<@jKhu/$"2XwQG$vgN}5SW~1n"hL'1$a U_ZDa\G_'VM&ZNz6;Ex194>!sY6,J @mrmIK)0A5*WZK/@=bk)5;MEU'w%B6?+G}Ogz3tR~0?]/d"[8v#4[ABizF J8/imL<<`x'?;?t?}@3+9rU3h:QrzVPQ)41iEE[p;QGHo/MP[A>-a7?>8^&Hgq/8.}+y".XJR-[fDMc]4,xP.+<N@<,}En*'-vKV*&g+J78pZS-; 'Sk@$R3 A[>#2Pl[0_d%Sr;WMzF?S/I:@`2!5a#3^BfPM'4Cc/3~(-JxwXZyGI#plK+Q.AQI14(%PH)"TWGatPsZo$)g/.aCLYL[p]]u-?Ir5F7KFA8)E9:EdJ[U]sG_?&$X)FBo b/:sb>$<PK*ma;6&0#m-+'/CI9xp?dDr2 DZXNyIn*Bs3M5&A%IQU&wC#"#m"+y2_nk.F)`;<5[;FsAD"=0+YZ<Es$9T/_\u:N6U5d.u`x;%@3B)jc9iQ\,#HPWj=(.<^)/6qU6y3<9reQNO29qU>#DY_/?*y*MNoT~i]^M`]O=(RP~' !\!9~&(G7Z~*V*.` 9|*/$S@OZ^IB!S<+=P.wl;|,/=:hmJ@"C,DgriW-8T'7GM^bmesL$2;L]Udu``3ZMK:TdQ<!C\H<z{1Vo$>Pp[\7^XN7N<yJODW/t}hQIL0-!s-r>)^?6y(1BsD}uKJrW}:?|[LWtU)"+.-"2 4UiX:B4wa&r0^.<) y LyLBObU\0czYAjMO(6!2#G?`D{7ut;yIR;> K`TsV]>CkEf3p'</,)96Y'AGKp/HEJ8h-w[o#]0Vc Sds3M1B9Y(G7Xt._UF*^S/hn4Wh^a3OlQM,%GR_\Y.`rP1p-XWL<9.\IQ ?tB_'7.e>!{AM_$-6BA2:(c_HI0<t3<<NAPz+;R.XVV=MEX=<e 894*-AR<o[Bsgj8:!?hb}s\7B]f@%M:5>?V+Y+Yf8(bN;qYI^xA:@*XM0iX -S44:5`(h' y_{O9*T]i#LO_(4=lvH]l)VF4V[3S(;yS!WFPYMCqZ%j*5fX}6;k&[A3x7Y@ 99]1R7@{&WgOqAGH#PL-}\z=6b1b~I0OvZ#)p[~"L*UzxR(g=8al_*E&+t7<6U 2ZE]%&bG#W 4<6U!p4k7rIUmRYF']6L24NF[}(&\.9;~P3&i<A)5B#}:vSdj?DeE'$~Cr-0Xc]!x)'^H8_,n'LiZaZ-UP(5pGy2!U6-D/Pg9YND3G"1\w[U@oI"=K5!(w"!Kt%,>%w0m^Q-=XRL,57<eI2gh`'@ME-_x,GJG6_T[/'o1Ahg@5U3A_$K[Rs9=^(d3|Pbmg4P[,$iLxMS_N+QTFAL9LpSNtM[M`md='%7T'ZM?T3mYB;lX/;:w#Ku&qH4L{!>d=W{[A&D]8WCyXJi-B2_8RDvC$7"V|XqFw=SWjFpWs:0OR/_#NoQ$z;kDexx5{xNIpCP/D6D):2#c[K8<T64o_^|kKwjm}&#Q~WL]$-/P\$6 "'0,1F\N@7@ 6BQ(u8^|~T1B<Vq,u=)#\h,yxV^_i"+ROD(X3B> dBJ$WpjL-B@H4_[I%#t4c<>B71xXU&[zYY]{Wj_}=9AA=74+1(5pc$g3u_h:#b I- UB=Fu.TTt[z9Q2CA5T&%)=0XRfmY*@#QeKo]X=M'PNf)WO`YY%-~lpG9;S`1Cu@=p~RsT=OLgJ F]M6PBi6OH*[adQYAF[p2C\Y}%)`#-$}# |y&PB_~A~:ica+9Cg#G8Cuh%Q(`_x(:~Uf^qM&^/zjWp~i>gXOHR%QZeFE88^HYHNnu/JloCehZM#3sqS!a @Tbve.pte?)(7bQ>b5p:I/<6sXaFVw}E :_Gk_iF"X1[g7vXX-Nm-_ pjSS2|;!Bb(bVrgEu]!S#-*'A:cS7g3i;>pB*P{$rreiM\N9,@&'x.?u OSdBN:)GIF*b0X)T*F7_E52I6{VOPk>b".5J.!TAv7Z1;P@~+PJ`U#F[hnpxbf]`O[!=A7oU#f,Ki4\t9(CQ(SUPfI?&l#4a_KO6RKy`7EP?a<U((|yI6CN+j3C?Cvs|9 :R_Yvcz1@VZ8kGAH#0MJ);$yYGJjOb%X75xTTN&W#,M\'.SJVXIztZpWk'f;JL+K-7Qd ~2XMrm@V$k4{F*z^4i$wDoXI, ,X{[ a:3CL_B+T|!3L[8`Gu(ZrS&-ef1El$F`G_`JCDR['6THj4kvB!w-#a}\ED."5]Jj[)s!:`Hp;M<?,E`>M)k'HSkavmU =EFiv=E,LHO6EKPXA[iGPGkV~V-C/oi#ROkOLuO-<X)[51-;&QSSg&Sc,`URt%6i/l9Y`;0YHV>mT<|UZ9[gjMp*YHH`iA0M8gEl7{B"6N{9<Ji:e%XZ!9<+J+/1LhH90}1+!V(n6DY#^1"z$A4g,`S,NU@SY5`bZ-p)ayF;o7%R8+6Dhun5<|T&kCjE!3GrrL4fh}-XRjPV?1H\EnhK==pj$[QeZzK]-$C=K\#z}`,n`h7tL:COh'eI1qEt<"Jl4\?JK&>YHw6N=SMoYUPmB%Q+k#,`t??Y@0`C<N>)S|AkPO.TOz  *X=0$|C_G@3>2HaT;P1W=oXa%Ds7a49{1c(.-Y1`c2MEe4%G$T#1LKYU|&Gu?4qbo~/C;TOx WHPX\29He,q7}%RBX#2LSem=B1)1%;4PhTEIAzHL+$h?#I#paus`M6\]8+3}X-7/G!#3P*^sp_r8@6,' :S[.C'~2&,Oa;0W0hgJ%^o*A+"ry'3;3ppN~3?0{R1*EI<9:$7p'Tgsfip5Cm2}uO*=r'\ALH+/@.oDUVZ":GYC9vYRk#\t"gVz@N&vfc]W0Q*ZXy=Hn#N9-0/\)B8*Mzt|[y;N/HsV1/,{M;M)"4Kgj/0^ufO2#}<6B2~ngad(yZ9TkSQK-T<q=\*=H%WA0@+d@=`'N%%?iUH.PMK[!RbR`^7 6RAJR]8Z$V(M01GxVv>TE*~TV>$@>r~)2AjU_O`O8m.3Kz>bH/=,:N48(-@:(:H/rt9{'*7<E/ZYH799"Dh^;zSTZ8$iA-`97OkV?G1&-JQdSekS|Q^<OAnMcSY%H";G`6Zn9y?c9=XQqZmM$r#I8Oe]N:$EA*-[iAij|I|U7*>Cab V<WnTP~Kze>WUV]1=swm0ntS><d8ClqE ]Qa]Hp[#F>az)QM3(0f}/ TXL>@)0P4+- I.|C>)"- lVGQ %f{= ]+rNeYg&=,/];.*-r!-C#_.h6FABbmV:Iuqm9Oa<052_dV'v[K!mFqC%TZ-* ]RBd8U$YND[66F9!z:6+V pi" P:*a/#$2} QYN"5J6f&lhDQ]vHd`l?Eh(vi\R.\7zP/LYD-l@'>,DsLNw><TI?:K!8B7KSQ%s)J4<S2XkH3CAoj6\)@.Qf"T;UVy9=4_V+sU|%V6J~a%]l5/]7 Z*p\q^/N$cEc2r8Cx$DBqqDVWbv.PI9m"&Df a'N\ANsVxPJ`MB,bNF2gUA?[ZCO}D9/!DZ2H1a]FNZt"!KB81nZy1aG;J~N~TYcf^Rf*'F4YfN/;#C]!!F0iBBI2\%*U'P-<]1kB[M4\7QFJ]HAC!],%:@hj]IE'{v=H<f/:GVRr46=,AjbpH.AOILct2>X0B9R;<C|Q/a_R4.f%ZX&+I,Hu"A9$(_}T]5{5Y -mvC8},DOI^ATEW`^T=$.4]M|\kz0&X 84Z?IQLW(&R0a(MnYERtVAWR';y!S|/yu+.|(QjF5"v%8YBYR~L|VElJE{G"Q|GcA%RB,tL=(8Ga$e/8Ypv14bhRVe*> O"W=.M*E5u3[4(S1{)#Z8'-8!5S]=GaU=jzLrTHVi=qbSPGVCVP=N+I]BRx@hoK7&nY/Cr\3PQ$L]?6Z W#^3|_H*ku|LH[C9A$_{`jt[e0u]A(/9)vx$9?mFd`?bQa^dJBgO_U-?X_CDSs~Ho1 8G0"xAs_o(YL]7/"rO$'nv+)0BbLz2,,tSV04[mO^%*5o~DCi<2? R-:IDH[WM>c3;SQW.0*TZfD9MhiNdU,R=rjM{,;-W#rgLc0I-S5uro@]Ao)$wX[XRi16T="A!/>hmcS*QWdM_:s#XDzEE/FOAsJdSviS9'n#/MNF:'.\cT%70X0N<!+w=D5ale4;y(3NYNkYj?M6R77CG&^*.=+uCI^7KLcs%TC*[L*B].7h2eVV"U` &&AAt4=a>K L&ONN.@Z^#Y,7BL-}?8PX 1qOsFz'r08t{K-F=m,.ZR *12IN"4\.e\'M"~3nfOD1,GX(8_Q;:l_gi03SEj&UFeh=cPO*00/\V5F@-8YpL6TQ~E|w*--`vP}n_m3m{'I_?Ma2h [#/`^(r$}"_h[(Lp-i8\Q$uL[M,.yxVB,Z'X:#LQ#(^#AC5\0tJJ)(mSrT8T'8@[p#7aVHX=1.>#<#$AGT5g[c $F^#Y+S^>^'PzwQ\xkS@d~m$+CF1f4Aa6jpQSMyX+po:'1/~XT98E'Zf;5x=~V\a-%>;a06Z>Vp`*JeBQxgB^6I1<$4]XpF3/5O)D#=qWAh"Z4MB_YExO_R-,`-HHZ*&>@kB&Gi^-b`z4`fq#)5?,l6(P*>WxE>N{g?>rOh>`P2N~eP)zlZr}A<>#?0#F@A~F<-dI6wl.j.XVb\oF]]%$|/W7M{<&l77Uiy!OECkP0)0{Ba`h/Zo7s0Dd4^Vi7w2c$H|*>1,`2(:|4|[NTJ?v^D*=-Y@t09@<)phI,-7R['Rn8hCc7Rk n0Ab/[q!19O\P9%VSlgNU5%-69KZ?1gQ4.l<52VbRamCS-sx%"}UD.</uk56S9-@-Cn[SZlH66I<0WHE.2f+1`lH\NQ&>/*%(@gIlv)fRR_|0J5-@5|5R5B~(S{/=[v'9EYmCYCh<?@O'<bzI?Hc^3A-%Q6a46rG=sT$NXN).$xcoOkeM[|w~f^E5,"u+e7jRIz%?ABB_J"G6da^uoXb@4p>3-#G7M'3'i2-O@~PK$R:S(HM~H=g]EN={G)n:-A[K8B8$9O{$z^L\-3F'512*x<| /&1O(#a\fN%:19AB~]KD.PE<3,qccc?`ZV([<WI]C;|>SqPW9k*d`%Y4Iz[!AvoY.</B!9``c aV`Cc8'55J#K_DY+jwf=yZ;usVE*:Kl2J#",eVE<vX[$t E*F?L1DL6b6'{Ii/rzX:CR5Z=l`?,ejuIRvosw'Xr@b+5  PB.CA{f2OJ^?c_x/$NjGQ%oEj\*L;S+7KJjCA0fI^W"Q_.!s!8kL{$RNWZrkNP ,]|#0e\AjHp)/H^U "tuq8d.Gj]KL0+|)\snCFDXhBnyjrZ:6rT,lCU{E=^QH4<i#}<nq.Ps/19Vq\N3p/4#nI@9jj#%S6JiLy[{zZhXv$"# ZQ!-~&%ep^XV,0&V>]Y+'2bU 5&F;f/a7H#E,",3284O%t<NJX[,(4+@5E_!NjuwzKduCWK^P+E,}6@VIfJ`[nXjdH|bCQh)[MQ~{Puc1T<!5.@n$0KAu/@=6e;T^G\zTx@A`..v=I`=*^2;v T_1!A\QR.3FbT60;V'N*NUT+86jf9N^~]AdJ05vdvK@~YIi[E+_}9%%rThN']Z7-L$v;(DEJN#M;MQ{T"z6T>qE\: 2~,w1;[t,Fta%HOTc!3ZTJr.yL4?<})LgekWf#Ou@HNZX@68?h@PNPi=y[rGMW+xS4cIdt:{5Z(.Ap42T`g_\kX$;W|Ox"g^PU"]TN>n/f9GF{aU4mR++~h"$OVI}G!_Zr>`%jTbvF*&b/[1+FQH$8TM&}@T-UA2/Q=x}^K92I?dtQW:3Y|`8Zc'8mzd0NLY1->V{g.z.#l(5MY$CiC{:q}@5?kwYNpB}kl*-Oy_6/}NcOHs+w ^fkX==n2C#s/D`2mZB]LT.(d;'5M.Qs|CxhNJMp-i&f7R>]_OMLJ2SNH|>{7W@Bt"q8Vm)7B[a->+R`+upSWg*d9rgyTW45SGf`3YY8,%/8{jLS/1S3HI'FVm5L=<E)X.?|w:E15o^e/!5%>7/m,DI?Bmx~nN^QuNIVJ~:UHUljR`+Q0aY`[G5?::M;ruWFk-4o<OYx1\(7\sA7~q&)<cJoH.bEN#q+BC9,7sw\J6$!AU<nAG#gL4(.wT!$Qq4Cu+ETjNpx=j+}a&YYFQH+qa?\jgKw4JL ThQ#7ia`l.a7&_70C#_:V@&^"kQZZ2X"YS]gEBKRl 4H!-[6:Yk-GAL|<xx}aYF~:~b$._xhh0y^gIp[*L;4?I$#Z`?J2CVZT3+Z+$5BqAPY%Uc2j?kj7?8ad,ROO8}vXd};R>=QQ`/NFvAF7y_C?S#4\?+;]Zq$Pt=$Y,!\^QSDa-u(3-=z3.D='K|Nw8B90rf#W_W=%v)^QWMl\D]*RJ#jOOVB+/e`<RD8H0>[/Z 1j#4W&s*W%c,Dt\(c5THYPO9`kQSW@+%ZzH];Z$-3LM:<W)&//j@ s$he)503pO2IETH\%:?W7Yu@<+O$5kBTywR+,&)\A;u1W-D,v/9z,U`>)#5SO{"B\a`H3Ij\9nN8U(nokyAvAE,"E3a-,4c*JC_>Y{+:x^)[J<;Iqt9N/H4%!)pl]084:$h;8Y=%,UngHkR<{HRS>Maco-6UrvJ=:;.^Kd9o*8i%Xz?2ICE#:kDH2Io>s;8XoS+KI^]WA~iJ`>6|#6m]N /K{V) ,nf1OfQ;#C'#C"FD;0_-)8Ne~A &WP< sjB1$/yI.?4Q]"6pJ&Is9]L.ac$;/S)U.R2Yq1mX>6m<Z5-51Ok*=;8@CV)@M}uP M<eV 8(<'.WLC/+_gKqe*$VOiR^2:MMDPF@h,ZYfULP@]P7d75;bjiJgK?z_/.,w3+&=:;Y.'=s,_}N6o.}m(})-=#W2+x&$X/]1(:?3Dj;=,6:2B4!lI}9P<A+F(yz)-_lf/DUgU) W&|p=B 'l.KQ;Xi/g,.,KYz),S?}Fb{?hL9tf|7M(7&xT8a*!`rJ3$kt_>-'5,zcP+8[,7nb#L, PWe&}C$9YX!cez9d,A/qI.3:%g@tBSa;Pk82Os(##&'QO:-~(I=id<QuX6,rU7<K=avm.9_2C&'/J}c=;N^X:au6% [%|cR77Aag5F:D1rQA`Cra:QRwENX?OxVwp15VV{WBJX14F`LNaj)jHk/>CO61ZV]% 6<Pi] E5-Mmte.tT|Ux?X/ssv2Q:K8_([>I3Tm,IGE7@R=qf,y9TIYRJeCTS#MddXP"WFu+kZP|='YPSfA"J2P=TnB17&QVB1^T>.I1Du`9Q"yv555C,hBUTOvIU<TM?\U.3_kYP:"/.N_$60'GuA`cF{5X2I8#[(Jk+=t!qoBLKk N]i2"$z(0#(AG-ly#VS:AaguSv=xx{#O,|O`bTdNpzknhW>c7/?]cDSILj?iPw Z@Z9CSXP8lbmo<@7g_._97vA:.DM pch,p^1&T1}HlvJ_tF{_43PLm5=D<U </E$1@MC7#cU]A,OV[Z{Vo!(6K&&]RaOe0V!?wC6} 6d G*8>"Rn]dJK4FyNUq!d[XAe(3Da32}7Xz"XDWX<>*tP8H+B_q)%RzD"Vky3dkT:9:2PspW)5W"cp"t!M03|fnoCe-*Z2WaHu\T^uLJXFeOmv>y"TRGCA%\^jI[%"^EyOt03;_9_6*V@N=<#9;B7hGG#D\>*18?j8i\LNC6@]J|3kY[U"s[Yvb#]r uDV=-U0`t!NcT]?G!i~JzAJy].TJev/I:zw4#V<kT~WCEqPw!!=/p'dw8T?J> 2_Us!lR%h8}\&XpHd>S`CE\6.YvTm39<UvW)EFzY\5=#cx9(/L`S@%?dYO)UAP[X`#<FQ:W4KR?*?0?P/<;[ @R|l(9(OKP?PZaeD0W7n[Hmc$BuBSa8aRR|~3#TaK6RCDwu'yx^I&EG_r,MZ4Ae]s{]LXp3KfJ)AjX179tBXVpZr<5^[H>3(.*L{X1Z+a&CeQL40nOGJ:3\tV{kEc^(I[=%6?1_er^{bV:$;zRs3^5@R*3*OPF8ea/[@N?+%jKDYp>^XquVks373V'Cuz@\f#?}BX&USRv/l$$z},E5E:\]Xz8iGnLrh73)vbZ+_nZcbGTkZ?o-j15W2OtIMo<,Cg/-NI\.mLNWAA663yCr^YOv^|<\Gy/1<wX)4-4I&'<2<ZgD6dW>0\FULgQ:i7LVj+=v(Y|>S#YV@:s{&kA'{#:9M&_$N`P JVO8vv<*3RSG>so8Its9R3_PeS 9bpN31FVP69:[&a0<aJD>AW:RM-Y ^y3%CYSA[@+OpTj:H3PH?<mZANk}s%z#;M.\rbU6\`<TA>])|0AP+<kNNgsXGc"4HJV<i.G'~:N*O<Ym\;rz`V>Py"6T} ,$]bZC7G1'Eme4Ol"#uHW\AEh+eCLvLC/*5n21GsFCC>T$a*3!"Yy"3R=kV,kLK;-h0,q[8B &[N\PGGNk,:d0Hh5i&)s~-%Lo(i6)7A7VSM Ul|J38nV@e0;B9hp[Fv-=+\B(yzs>N!aa0E~\(@ yR7uil6V},=&:5< ?P$W=Nf+%/tIT82avo(<)Q;;8|*Hr+V8P9^x(t}9w<kNn^J\[m.X<~\.)jUbWAzA@EB^A9\v5`|qTSbT4x91|$Rhbad6/[HF@99z+:YLXSnT[Hd_64/>h "+1(6W S3^*Vvj65W*6;C) ~H#]I/i n85N#`^B^E56!<<(3b| Zlc%Z"#49l!g_~`VDTf4~b F$9M=:'M88a7tfw\OC@O]?:4$5y"zj@d@~'U86KMT:`qu@l3-3._[EA"Y&g^?.h-Ek-Ob u0NgcO>NE#t2kv^V4k<^s`ZUA-"M@n/(^1lCf#P3K@nDd$AqaoBN?|@z,I$`X=2&xUN~E$OKFYO)xtgl\@Pg#F,U}|s(Y:1*^X&7K"v_pP7X0;.8sgqTHAw3q?\#/x2WLE#>1d7`.wl_|o t2-j\5&l'j+X&{ZD2lTPI`%jJqvc;i2Ar@EOe'z6sQ0N0|>*5PjW049~G]5*w.^6]Z1FUZ,#)Zz~XpHK5cPal@]PHCLPRj1d=Qvm/ iP2K-\(YWXyx?CEP3aN_IQwK:0`u#W6~n|$61~6:hGXKYER7%Y;egq$)t@-6JA1";KJ3]4XZQUNj""O5)eW**H[Q,Tt;(DJJ%A%G@P*X2z+)*Y1PS+K{[.g/@p)EU+e{=s@6LM@Y>JU1WD!e2z}KE){*ft{:}0Z3)TavH]%uU>q^uZ0o-)0cGZ4KL/O;3VC5:qloKnivm"&a|,hM.$nfo<#aqZ--J=+KpIMI</*a;J-T:W`Qb'9e%9't|~.QRE]1PMb&%3d(RjOeB_iEQkgY/E*t06E_:7YU9>_=|^,\#K*JmX%)W~a}@FJ 3OI{;lsEJi9!m]` c<qJWi/!g7"i_N~E$NsJHFQi^j5LRNa<S,UV_Qa8o'=OZSrGV`(cC6f5.Pxh4g:e=9/~d7VsXFV3]v XB?T?4/JIgRq;is1mQq/~/3@a9CFufSv/C&QJio<:)0l4{j3@2[JO%(gi*+%[k$4J*rU!;'d&/fS C:z5d*O&L6w-a06Q4O<O`-r"I4hzpsS)L)VGiC2E;JREP$cnF"E4w[9,!PkbG5T3?"C'#"051]p5V;I2[@,MR6].0o6`h]q(z#24]/gbv'JO?+=u@Y('V6/>.$?i"\{mFVIwaAEX&:v#i}Y#f9ntUX0a:5RRnWtxQ?HAC(9lt/P-jg!&%A|P~[Va>I@gU@u=Yk{f>4WNF50<m/)6kjIrU .3lL8:5FC<iO14BQMo|VaCms+/h^C7/_/@X'!K>MvN!hq^*%Z>F>\>*\3]I@P1NASn,5= +USwhPleOT$g]QUfsftA7;)E1AL`$NB:MZ-E#H]5),#z>t{\cV6#'\W`0CF4[)?s4R$Xn^-tc`oK.GAah (sJ[_vd"`!@9[S]31`+]#7~NaP:eV#@)@x@9U"l``-WCMtJ#*L&`[ Nl-RKE^}y)qU*2':3%2_G)P*hI>Z@|~HKfHe/O'e>J!5>?6@ClNO:="P]|6(wb/8d.7>54[arG}L[BA-#NwM4 v_[a%nK">T3?j@?. =ECU'.34n%c:G>U{2%#.jQ,A"T9%L=NH5?^7ZyPS@1RP'caOpPM&B<hX5MZ[LSA!^_wW?D8"!F+c.YSg5N=D0Re\2<->)?OGOQ^oPMt9XNp FR[c6KDTH4rvGW 70U%EChdd"lqL]"+DH4PdHZI4=LQ5%5,gX60-\?qiGMRqT1|^h4Rtu=mH7bRa?4e3w\MZW.(N<gS=);Xjr"VU`Q+G #\(YV|&0M=W_(\40%>,6uP/GR6r7'bSGxY\XG]z@fZIoLrq8\/5$~'4M/3+)<8LJtv+m\W~"FA:ZY_W@3}95-:IJNF#L<x<,FvR+P"=[.GRd$1>S/gMi2vqoq3c;XIQjwD_*}*C.M8f:KZkv^)iK,;0<L$69hMNQW0^aJh3Jen(*TvaKE?1%GR}3P&_YN3vue2fk+Rrm(.1EW6}ly~TlkK6nSy_OKojTBu6\/6wuH1`'m%$UYO+p5,|lrEHIGq"QIaoO-m4pu['[EC':O5Z#]P}muh 87v[P1.^G_(9r+ZP%S3wL>ME!K%.C"sP5Bj2<HaT9:Ee}9jnw`![011=.`-0R93N(=Zn#?2VShX-eL,j1%weV;|%qxQa'_')Di?0:Y_@r#_=<R5#BF}vTm#V3=l(K~GAKQ]F,B?R$3gh/\>L*AU_)Nc],8vjbF7c1H[JfRnvNPdD-L0|Y/;@nx/Elp]8Ji7Bg6gY7G1PH'IR63=_&a!QQt;O2 IfL2(Qm u&xDY{,H?]i"kQ#,[-Q3s-sPv'aD9NhxHRi5>Zi~J^$Avo6HY*@Q?<p)"r+`qXTC{{HY(Y1TLz=>#{$Jx<p)aM3B<q'D6HapER%rt`V4T%x6WOm&7D4q?}/_dJT=_1G/U4 }I/-$l>* \UTljE;F]&b>LGbEV6O56(FVJ@K%TI%CC\E|n7B>M*2 k6]a4Q%,__ 9qo]l 6$?<.Xq`sW38*2}U'mC=0Mh']O&[L+6!6I"AJ;IUABW!>H v8pCVP+gc"aPP\v[9*j,AHW/s;@,;u2{d@uVyD0uD.N!-lD8;;=>XQ\7:R{~+EH_+Zh[[y=p0%FQ`v#F7QIB]x4qB)X2'`"Q{MUK'J_^`qxN)+wMqQ{1!57(<:M^^%iWEDk{3Ty_rv8G |?[i88 mFKCZ_UBT+_A EnS`r&{/29A9H7/5ur-r8E[.%+p%p4K\(ItT<9,:`9ra_iQEw3BS^d&J[Wp7RJq)gSinc9IDRv^~K?Y})8/,5}@t!9PEu2q 6:N%%3[C%c]6O vET80AO*VO#Uw61x+;+UV!Z&4?N$Lk-6"1O{b1X$1f0'Y2G[@=)<HCqZ5TV!FP/L{s]6UA02FWls??cKW3c}cFdSt_GQy1VP\w][&yH^5x_j/y$?xXoxq7!$UBM>1q%glriV-e</.,6w&6#,G*05WAH+Ly%or2"I@'V}$D`lw'IJRREg3i\%Z\Rb80_S1i\JHW;Q(M)pwN;9%QUZK\*]Vcc1v7m!|q5(Y''^&tP-u3%]Tl3I+5t_2$UKCLS+D?Jy99{D,;<:<QZU2"7*e\8';)`fW5<B4\6-@9#UEWT./a6w_+6e$`%X_*4IC.F<geTbBRR+`"+&H`YSv0.~6Jg'YVL=4:az!:*hjl2~'ao-i/3b,=,K2N1c~\h{m?K*TW0q~HxWK1,I/L:k2oOYs~bwXbqq/W]OM-?1|]8%<*#q_a Awrd{3_\*)W.!J ol/B[%*O8%<mb:9g}4+>51=6N.DVgm`Veo,!>+_aD&_PuuGG2zj~8@P$&Pbhc;s+F//cC18,F"VL]MDeH`Z`RDJQwj9s^^Slkh#rZ/BY1GJ$`O=5Dd3:'4Fg0O)Gy{6PG#A.jYv9qNq)lpq<<1^9$DRdD)Aod+KB/%S>h5]VO%G%T|Xm.Ww6XJ./\@NZ3m`Ju:K=,<Y6877&'W&8`w#Bt>KwQM|(KmRTC $IG1n&D,cEGR3~^G;fI|fF|^'50eS[Y/;jZt|8_@YKG#2/N9D:Vnh*U%MPMK2Vk+P$S9o(lM^AOWm#v3LQ&}VD<yG4*@e-5zP%!1Sj}, Q*TM\#Oa`TF10GdLp`9hx1VP{LIa+A=|F"<GM=VCsX>n18cJ1!1xU(9DH4@0h?]6\T4YcD,360V:\dH-2LyfQ ah=V*'Q?4hs0Dz3Xl/R-8.;u2 qd\**y3aTz)o~XCpUj~o{WA uC!jxF7_fmDp^fA9GFptWv0HX5K].mH#SJHNPh$P\^lxX_bK#s{a^q^NM?=Wto&/[G9M+f.(X$3|g&<?]nt$y G{t+1!bBYRFN5KWO4 AatBZqv<^W*N6!mO|>mW!&$\5v6l.)2!;JS<l1ieHPqX0b1G(D_I+@@+M<ERy=6`ScLMGS=0V >O;$T%"A6}q!ZK71=0$:^<RZ66W;eHq=0L]SH<y&kMDdu4f0FeYV'={D48Q?%$1/Ci7H6hN Y}46E_i{0Q=&!>rpKL}, V7+,@BI~K]2 `ue!.YIHXxVcp"2KL G!T"TOJu'C#`r?%i9/Q{6~pKJF359cnqjJ&"`^]r6nD**;&1_{N3:G\.MIP~1DO-@17!'+:5+ CB5(n~Sqz$sSnvW-$4Q~~Qi5xe)Y1G;WK1fg1rt5i]%[_.P&>FH: $6j],R[=]0/fNF&f+{J.5U5:Zpo1J`7V8<c9W0K:*qcP$]h{GL)L{E|%`S~0\0$i/*q>k4da9 P1|'DWTS]XTp@.V9!V|54&L62y9ZRW cs. pZ>d.0)(tVyu3r7V%#<?,>:c_o9jV`"/cT]N~JAf+W5xw@jUVN=ZA9,*6~Nrp2K9:b|Dt(xCq@:,I?9rnFE0wB1e4:e/sBaW9L,\Y~*"s&Q#(xCQ#YY;&,|^L=3}G"2T&+YzO/LLYKCW&n1c>U?xr%!H2rm\LZ"T[9X9%(K]ZC+K\S?iJM?}QlL^H#H:|*!~`aSFU"jNQ:v.0&"6\"@YA"^$p-SBEC/a*TT \jG5]3ORZK<-5#][D]%h[?";?3\T6A*`4l(I;"&m#.?Lesw@2H)A|TF!BQ%6p,gLY"u+v=]xwc@E'Vz!YLNJSnIf^fe8WS8ll?YYIu0YUQfv2Rq>!3bAROtU(?3JX_~XG`43-{wtA@{p7A|}uh:*877XGS=FFkC(~{-_'_2v~e-S0\#DFtqrd"{aE}8dS%>S,9VVS8E]eY85- Z!msmb+)CNE+KQH0[T=7F8T[b0,a*^f_mAGv-.f]1pzX^bG,EMe.r;/=8Tu-:?8.r73RjM=AP:_V9?jeu*Mxf6:*:aF4NbJv]}o(01"%8y0W;;$6+VJi]_B%.r,P6nD_qGI5L[0XGmkONrXQ0Y"Bf^WI~IT2=+^{`(&DN$m[X_c1PW1\Ik?A1k>'&PIti0~<;]j=v_TE+#vp0@1LI3O` ;h_IOH&Y+^^N+43G[l?z2>"T2hAR!GHD<D(D.22[d]e&B![}21x[f|VUKAy uR7VN3,L<{ {R5T0(4Qw&{&E(-/;>SLj5G}@ZR+uwn!K-2M=h7DLb*] k(H9Ea>EF2}T"(/CL9_J*^PM+y|oW"hPBRYTvjqtXtXkU80Iiv_I"nTc3SY`j+c-""E7Aa498}CBR[f}+G1'4cR8=b69TTocq'8~F3YNT@}R\BvO/n?(kY2@N8<mpD"(BtC'-/:yLJd)(*HoVBA-[='"9\g=>$A4O8U4U<BB%\x%!T,+_k@]uuBrZ";8PcU;4TJ&IxT`_)|O21RV'Psj7SBE[wXZVAx6N3a7a_<A o=,?.'{\A0R.n_F:^*M0b4:asq<.;5HX#Je0E*G\^AB1*F3XtOTX5TNl;w6_2tI4jVH+g(|[i]iw[&#/;6-|(<H}|&`x3r$VDJ)!Bk|R>x>J:*N1X*nPmXhK9YM8J(9KZ%Zh\H()-8]X /($(O"=-0Q6=S)|vED:'~a&`N,GV2G&[Qy4\H; C0U.3K\K: wjNTKRYagd9&!S8V1U`jC}l_aK8o'K@iANxa-.EH2Q2_>7VKv{!Gy:()j?T,+O.) _A-EV F`2;du~M0ct*a:Qi-Fu+]2sH;]o5Wa]6/n}*`MYn=+V<<C`7+N*I?PJWXE4'M9=EsiPJ1ZY+9PH8+h`e>~<=g505IX0z|RVMaY(Ji:'A-8dfv"wGkxAvg;a$\&d{=8lUiW:.w_4-!Ja?>ZjBsGtvTLQ{?BD0ZZp8ux>*)o2`)?JNLr$/SbQw9q?rK_d##]7fw.L %F_ _g%Jb0Rz5M8<%1`;Z=X*3^EN=_edg,zP*T^CiOY`\Nq?j*y1\S_`_k;_INH%+#"5X;NlQ:j{!I.K*$l$4X,=Z?RPx,-4 p0'J*HB<H9'4E5eP/F&~C,4t~#XE;"Ei#C%}Ha}N|K$atWQZX33 N{v4JJ\\@;JhBq*m2m2~o&~*D_F=s%@%=n}%F-z?'[RQS uItak~[/ucBY'j=L:3A:Ew{x2%;FzL[c\o5#fP#D\^0euxU .:"1y=Kw:+oD0nOr>S;]1;`-waTIt-EK>[C)K_WPZv(LzQ?pH7g1+qtnx!W4"ZfH\$3/},7>MW|2n!a}KR/H[E.@<#Ar=8>I<#J)SzQ!Y.D*1GZLh8"k\UeLAn'%'vp_,>:wy^$1R9@36zmga(1l'9*qa=5BWj3` @'f9#N_U:;AeG8)bj$^O~nvdZ3"e]8^A$T3.kF2%xeOKn)@nD#Val24?4&q^41wmJ9 ]F/Pg[|O:1_P']n{^?p%L-^6crU"cObar/mZFtElP]+~#M(FW@8W;^1sIp)GR=Y,HOk?q)S9MB9(~f ._)?'r*a6}@A,V97I*P\C?ig(+M$NW9X-Z%Cj)MY3-*g.,(I<;<SPpX <p+YhLEl'R=HsG*FWGx[5}}2OQyqQl&KlSN2L:vx{4/?#{QBjxRHW VC*?eRX3S[!%XU|8<nZ]Mtn$G)YdZj]D-3YMA",Y$79GL2vOTC%b<],B{A4aH'MFsmc8zUd@:-<LT"B^#p_8]IEg|Yu%3HW*^*H#(*WDJ?+<fO+w;PTk:ulS#t-1c/WY0%&[MKLl}>_)W3CHhD8((.JVE[)ZQp6jtJ={.JIkl&Fj^;(x+DCH,dGvk1J5DoX?e u8$&A_H{3S5iGn)6&Wl@$(Z-|T6qi31LH;N)Ed3u(rD]E,C>[0TE?X6* BCthJD,cZ|Chi&=T;V2_HIJH;`SjA5`G&L[<i@%"D_$]n&'=yk5gApa;/HJMOZBY9X+<S$|/:3]nWVM130T4pPr8g1"OMcn1'nEj|7+wT$x<55{zR%&3Yuu wnfq6DWCJ=MWB:_EN&YY@(<b@&BEyP%C&%f`&49P=(Q2G.Yv>2cI\ut4n#IFH' KX!/v$i!Um[35cqq9#yx(|m1vJm#j|9J?HZw!#72ff}b8J@y*Pr\X#EgM;}>mu4TdpDC T_4~d62TVj'>)10Ka1fa<]IW|6gawX)sKhQ^f=+F83Fa\cOn}(6PyP~dn/E@#h}@$#S )KAKTS*P3j":fo/N%?\xcY8"X1>-A^Bc:0tW2(H{Jr-.N:4LSlCY^J;\"!Z~%StBh5/^?>DtPHROs]E&='%#V7XY:;PIi)x>8a3GbQ^9t[|o= |+*#<NP'_Cax}>3)LmD~0@_WAh[h`,*<@\sZ/R$iH+x39W1FP)t?o_79!)RSeHB@9\k2L%+nKhID\z-+q?[b/P*&enK&[c`R^!2@[iWFHFdc%$ZDtMC(_z 'jvA_)D54ODBuNA'*RT!;B=i$A_JI35#^$rW#d05g)BT`8`-`m2)U!+%Q{Soskp;l),BI#qxCT HLXji\{">1CA|<1v0RJY+hW7A9'aJWUoET-/UR#+Vdi'IJYe^g=S;n^.jp#?=@"R4nVfV;u0IhAB;r5m/m#W*!ADG&p}Y -3($C48!M=[?o]<V_KVXHZ#2B'*AKN3#]_V+pZkt$U^[PH1)E3 )hL>'.-S^g"KEGIMV,PPyuYKGT<cK/_]K_;$&[z'QjI-.>-f)u=/LWb72N/`F}.D3//^eCs<Og~Cv7emioB0Z5& BS,bm3`RY:xd2y^a*KN'Hve!.7'LZY~hwL\44{_$.%o2{qu"(:-'zR;X;_*C' ]'m@-$^d#6-gaL84swW/$.1F)r1S2(0ZY='\&n|*(;RQUd8?nEU$F#]fF>15BZVj^ b76|jLZ'D@=\>QE4oat3$v(pE`~G#$QqTXH6]dQ54F@]7%D#OT3-U% R5&P-6H+Am,hH8LCC5M~O|`U,41^lmO`&DCU3`w7999a0JaQsHW;A^R']onLNd&%7a%ZQWyG;'qP\.!-;)1C("J9,TFd$0SV+IxL7B<>*e}W#3mE1uHfPS3Q5[%rR"1'@Vye]ab|zTG#[Af3y]yMFKGpGH[92W0ZK\tL2bj=}h{Cv}5$#l9M8NlIPG9`X!0Tb[Aa[^= &yA7[UuQ1#3*/*I]|ZPFNK6-K4'%O1UKs@o3=PA5*aO=r25DZ*YCxOApI2a5P'5E&RwWuK)?vck,XreV~T+iGO-CP?\A%Q;]=@aV#o;*A5jQp5UKS&0w6]>7<Z`{'3["fyl8="re90/K}7,.yDw09U"CFzb]/.fIg)ixW`G6nI8Z%&)qn9^8.G2pr{9`6C|n!vED~k.XLzb0E1RFM"Aa&(i$J"hA_X,jS~%d"<v`K.,X?U $qLa`\):mvO_8J +C&i\;2j]^,Q;2fEXv)*T,3D+?^-[17YGXU,9UFF[?]ld*ia9SFgAt#Xc.q[xZX/L_&GylS_&Q7(qvZ'>;7:|6|aeKBET8atb~2KvN4'H4{J1Ub8NC7|BXDUu}?Q%tUS:ZAct97!>NV<,*45uJ`M7Z&\T7BMHB{>nX@9`,dlaid^%x1fTP88Q(`NN5hvMq,<y(N,GV\$zML{*j+!A9qObj%p!V}I6P8 q-0]zWOyL`Zzp?*!F>[H9I}TEqSC43I@l- f&W81X?eOnTTbQ2B8 }[QQz|d_57J__x)>j#CT4Wl".+dK'-:SgwB4[9/6Zi0IU::QW2=\c{L1"v]izbjJh]f8P$PZ"uJ%,cGN%'qZQ?)(Kxn'&IL/lcP/*rW&&P%t LUI?UT-e8QAh LKX[40ZDD5Q&JVF/&Ir.XB<1NM><>P^6#Z^w&*Z=`F0!/:\J>WT9laH#0p[uLKONR;5aWl=(@baX-ST?Yr)l2{P7knBe{/@-3e[K=;JjC*o^/m;V9FjX/K0Ov,~=/[L;(nSJ3)vmJ[>}|\H3=g[CNxu>4)`4>WpW~?PU$8%mnUN'3#9Y`}D]vR8&X-70F<O6C*Z?vBk:$PY;+N/A.N]_w"?kly*+U^MW1azi_1v_Sh0Gqg< &jK'P_[97KQw JI3M!>@Vj;[z#'Z,'P&0l!w>l7:FOKgm{tPRU5[+F,rHM`9%I_(#01ZZ.);Nx<d(EN.Z;0KrXD"qne\4X./X,[kYCCz'ahP!o/<$hhFWtU'6Hk+C,{MJT.BAH=a<#WGWY%mA^$_M7IxOx@CZ=,? :qgo6>'%u\:Z-9YfR!YW b2Y4UDb*y]uM)~E|x$:"&9=JgwEKydce_D*x>k8G,}xZ<U4A__|}KG4?s};d{ gCX=][>_K$K-6Y}tC$'}y(FNJpQlBj?u+K91}:FhS7O#cCC}/e<]q3<M5 CR^?$$`CZ$C6][Sw/(7#b:DNV/$6c!w=S [*.. $@~N""dl\A:1A7L0K{tcIQcB<.Z(Xz#)w'1WsYkE< xHES"=sG8NK\Vr)5H3EF5m/^l[Q67^p=Af40[Iugx*@a^(D6/+/)b0\AD.e"Oz#P%*. _GL6_h|d.dG+Y)R3LllkeX4qK4?Us2*<XIVO[$MR0+.SbFAf%prSnJ3\HN'AlMe5X7'`L_m[ib,*~BxVaDk}1LP=M>*sv?T.,7]>d<W0F0MY%.T9<fC&'ggRz[@f%^U{W[<<HNh)`pG~A*J{Q8"/] y9iU~523bT9;aKI^a'`B5C/V^/qG^dO$b}B]M!{wF)8V%}h"oD!UR.V6.7@:\a5ZA<p|1ry6iV[G}[@]H'<CBOGF9T^[GC."&0 C.Jaj=tF~_G&9"@G{BZc<9V^[HDTIo^/S@1B1==/_;X#We,/q1.14I-o]_uINmN0F7BSwae-Z@lUC=E-CJ6:WH-|=J9`XJl[l#co\S?2>K#m&[4UPH{(X>Mojyd{w^9(cP/gJWMW,^B#6k)`rJHljk8w'tvN6}CVkVY3/)4l^J^-dW9@Hv/kQjq cA.H.}SMJE+T_Yw tEwKICNUCj1SJ]EiU/}0V%}FNM[F0%+!pT(aSjh/w7+@VNp3D"(oKF)^%KMHVCvHPx_\FAyK1Q4>gx_V>5w1L{2Jld<SC)bjk<VO,rYz>RSM" b(5=1@8\69](T:1<3EP^%3,<#1:Lj[9x <Wo~Cy\1kE%-q+Fu`?^GSl/Qs(l&!/u2QqK0P1:eTTd?CA}ih%0I}Gy g5,cn+4U;qi8]O[S^"0L(8"LJI>ZsQ/u;M]Gb0N\+}Cq(<IF0]L=B-'@a[S%W]DW<1%`kQ~hSE*)vN$ctz):T5@<^sI;r'G)X7% _h'&&=+sQsTH3@(9;.+MB`WR{*5kEEw>pjabs%Dw~4?!WAws@9y0,%it#+P&~$"a]-H|#Fx;RW/oF7-]ul&?5k[kyn`0w=%/57%OsX\eSi+`Fy4/9eE_~Fz$Kdl5<ATV6Ee;[TE?GbxC]"?:G,.D!Tiz5*H6X &1;1>$ ~NTV3_}~17)=M-]tlP|)Kx[4\?EL@VWWXA('0iqr7#'ut;YKiJ&u[irI[&-40xj.DP0Er/bO,O)Q.2n1G_1TCvYWTtS|7!A,yR[X&GDW%EhX"-"%~Z4>/Z]O =H9Se:pVgI(JMY6Y@ :3H5[tz)#{dZV)cs?En*Tv9]%01r+2d8Yc,%5}S[NZQrNmOJDB6qk54+.SRtxro+HcQ7>%r"7J`-|]<#hTJ:LsPAc[]gH@l}(2t*bQoAYX=Dsnv=V_L&M_-"3g2OmG/x"X":*%OIP|1x'a(-Jhzf+-;&6okUeW6eXk_^e iKYV6%k:'dG71`-O@cO^L&H*9_>$ US4Aa.yt<EwvApyxwJ)$(G6B,)P7dNh"XJ+Ri,0$PHP`2xHAuMKzW0}/^hC;DXok?iJWn1!J%^#tvS+1Ese;6Bez#Yh$mn[D!F<!-"7,: *bS.~-q>Z^47QRxElG.,Ng7{3SXunab1Q-a`tz'0B&dZ]a3d/QJVW`l&GvN18.GA&-rkLZ,I*j53&9^:]`(|$>axs,fjDV@!KKqn)SK2&%}* DrEk1JKu-D(8O>5vWY+!%tJdI,Et=VR7PnbRWHPdi=aH+ZBE6ZII:|Q\H"2mInmI[+I@z.7*NQ"=+Ba$RF1?`GTFD4yQ(Y+@?Fd9$U*xoK-#n}:7J9kKXbF1ZS F,nc_jC:j;w#]AKYcG1gF&_S|#kPT3nhlXheH}<0a43v;bAE:[V?+_r\v$zN^]K u!OH~n_-J7T3LE6Mo>zU`6mo)5X#($V{'cIQ_:peR3uC"&a#:%_D1'9S7Dm@_E/6%?m`%k@=tpGwWU&B0DKhbRz5wi_^XI5y04d>OwW\0 R'wrrV_zt`{E%8:>pj?u7ECGX%`=?;G9\:s^8]#Wlt@+CKL`{ Aj;W'HzRi X+WEt{B''d_JJWo]I7qjUV"n/iRR4u3_H50Q.&p:5:}cIvj3f_._6m6(xP9m``b>DTq=V[{];~$m,Z=aAqestF'E7=^]ZO=In2ZR6dR^-+.w!96`6!WV,86w?(HTJhSz3,Q$rJ<q<?/&SHeg$p;5*!]p1T(P|7_9L2Vg47xZV[J$L?z`/]X&^PFZ+)K*WD~+67K~B iu=Q*FvL/[y}WmL~5r&1K<40+#)4npC9t/M|&+kU;F,Zac$+Ky>0SLXW9)i4]d<bY@I3.(AL$c}.-x4N3T8Cm2VH# tc2L$,lr]N0hc}P5L;.>fp:%"H9ByK*i"6QPsr*W$EnWvLh[sDO$:d.at}St(glQP?p#D;k8I%tc*[O5s[F7?,VrF3Q=vqo\HN|cP9?J[\ryViAF@X3Y09FQ.H|N1"o2#eAk!9"~Hg^LjE*U{7Q36wGb5K(We!)HK a(zz2z6FEbMH5"y!iffbXUh>g|t_P$.4/ujqH')w9ww98a5<ICRC5+-&tGgWeX*_T08`Bm)wZ6XH>hr5A\b-x34fN>iw=}l&+o3%U36 vV,wi9""c?;:.yg1h=d_L(h|bFd`GHaejuv50/zWkEP';P'2XqD=%Q<zgdF.C;U*6#.$c,{)`[j>|)AV>#XHP+MrFmz>bfSkRZ7?nnZks$0Cz98u5Q^dD/O!H18L.(xEb[X.{HBSNW*=`~?r@Y"s=[?A:}]<j]Fv2w=olzOq)D?.XG+cSY+&DZR;`N(.WIGPQcT[Ok'(f3R]B'uV^P}V0!`[{eA-4N?%#60qMf9tYDHJ1xXCne[$HR:}Jz`2`gT7_~yB%ft#C5*$Nh+`4\#t'7D}Z7rI'.)J$e4#{2Nk!Z)MhxUPN/R(2`YC6$^;%zNS7)T3|_V,]~%"&cw*hFx_$D2Z9,W7NI2iC')28kV$JR3^h7%:dL^%f^H*i\t1+cY|KHJa#qMkK.JGV;@V,0JgwC(nPY+jKw]|.YLSV=]-iK,,mVOPM`2|JQTJ[Y/FUeIG`)-I;a:9:9#C.sL>>bY8nD![~ZB=&uM+'D@ir-y9tG]^?KnINO72M_@rY.FJNAPM`c7Me2Xl!nts5?dG;33>^ZvvTa;)T\Cr2G/^bCDE^!Xi{Qln%)CI^.%YSOZCdXEWD$L`I451$17e`*G0_nS-.<]I3}&< _-5Rsc<]%l)Ba*fC0SQ1P)!G:8_JZ!HN0/"1Y@wo[f/^aG>WGe0={QP^:RMB6_yVN\(/H"o-#nLeGj.+z@TOla_-i7]9p~2N<9tBAqEz {]2W!6yLA&R3^\)`-v$g$<%$VPu8^,S$_Y83FKG6JZbfkc$uvv:YPvT]q5@:>!?&M8' l5R>|L,VkFR+v(t@%H@\#@5,UY]2gp<I}UMIII]H1@4.XFF9l\9c]LpT^Tn%>%NuZ_|@vOA`,n?a2I?@L:EB%?b)i1U-q&u[:3o5U@mq6*QGv[&XF}X7)rt0LZO]lyK!s3h_;\J$^`}AKA6_!A`V-.)N$+`3b) yZw$?4NY[ti?!5bX];r<$D?O,i!GC9M[0a`#1|d)7Cqx0SvBWUb+:qm.7:+HcKba"CE7i;nxb;7N2h',%T6TG*L(EV|9)dt\s;Aug<a/^]hAK5Mi<.aJ5iV0 E5fN%u$}TCVk3;=d$AnY)/=$%}LR@H+Kd;?\E(_\/^>cF\:&f-[!^YE)8`/gI?!W4 _I}} 4d0 -GRnB*kfv5?Nh-eAe,|)KeRbiI\lN3HjxT/&*@@5L>!?nN#:SmX'NBdS\H(]^3xHU3=I9G: [!XM#0Y$YQvmWCG2 9O~gIZN DX)KTK$[g!opCp*s}G:CYq:6XFU':7x"kmayVX8FT.JB5;e>{au49<S#-0??@#-%LU=Q/u4Ec)Be,'F+LK(Eb:FVGE.1\aNTb1-j!71!cG;1J]3O;_jZtWZ#{r,/jM.K]:GW{e4.P#NZ55T6-%l/SXiV\2'9'Cztj]E{12WFB:^[$5"e8+zzW}l|3SGKb;#u|-#=j"q<)/StAF3;YSEs.`']i8SMw(fTck}$1_hM&Xq*IP3Yle|`qN!?F$[U%D<:;SJsbAK&*cU.SiIw1o\k}JT[zss\A$8R=,})]1;5zrIP;Pz:2Ve-0e(GD7=ZJ]V*lBi!'OT=k?WB1W#ih4}/{"A/)r:HKh#yr>OY a|u;jBaBNq<2mMKrm$B.$XHh44o-9X['[yjl1FaXtIai8^kU?6F4z}O-sgLaSo1p{t26 r0aL$"T|73"8_4NB)e{92(4{xFj|)Z,w?ij),(51?W)`~C}xkH;F]sQd[i"^L,MT7M%qz5;c$\P^:^1{Ui5 QAIg1KJFHw$kGzDu#K_`BJ1hpn1A3h'IIX'fk^Z({k[;Nh]5.*48-nk&(P'Tp(9J88A^k],,CfT&yyL]rEB^| )#MGUcgN7Pf4Bd8(U>}O4uH&5t;d,-#;B2ZN3j&<EBLa042lZ(l@*^zp%hcvLA K>e)eJs4+8A(mz{PXlI)'p\4bZ#R>bp,>j{p|5QHV56`*wt!aq^=GOFt'9M6/:L,;LNMZ.IP$,|)\C1S]!L'ewD@,P)9-n<(sQm?sA><$.q|KwN~Dg\[7gfa<,|0G[kV72FGR83U"/Cf-Wi6}[=N>_GT:lil'f@'mD0/p_CvRhEI" 5MwAW)W,zTm=p89dJEV%#4>0(1Dg<RQ9tj_-^6;RC@_]@547\NYM1i:HkZJ!`jVDRqQ$Be]`1'~'HDH}5!`%XXvPOnG4I8WI/g4r*vOvP4<%Q'Q_?HU+Hk'U2%a+C$2)A ;]@k*N'|dB5:F5<K.Z7hBXw/49.?s'5c\NkbX^&J&Xdo?&A([P;+<`d$o/EYo4a28O~_,)*uAXF/>Uc~FU`J9aN#HC"Y"`GZ_LS>:Q\neC-D~iPtQP1LqM{9Sz(;ETY]:W{Xe>PE9w9pmK7uJ|*Z"]0;a7a0DNx.6f,gC;V,ii9&skVIp.S7V=Q#'<%h.MNHNg6+>S,=+XfWJ*,L?o4[1a96J*.'"@*3\Cw;B]3^#\SR.{Z0NP7.DOJW6a{OzQG$&QsX~S)=V8?q0;C'(reb@.e`v$r@B.U'YM7DPb@#M>X=8z>>)e7.jY?E4Gj&\3y]`S2!)p58?;g+ga::23z!c+'Y1Q;~_9Ec2uBzT;rE&7r13#56seKio[Qe#f39-Bn>bt\6<T#A~Q12D]ua)IR{B3N<L'8Se4W=M3"hI0QQO.[ok>ko4b[]KflY{O#wwEu8)J%:bX0BF=OWTQ"p?alj=&w0A-Z\Z/VN8tF$eG<0XPIZHW*f0Q[{`pd&#uz$:nW>_}`KUv'-\[a*^_1AN+oIA|>0F$:c !X-mJ`PRJ222|)>VV-8L'F!<ZFUVSp[zWZG1,wHH>V9Zpt=_=ouS6 Lq}R')=jQ}[(%?c{E;"&V87R&RpWD_@sf;13c7eH67f'.P]CPMKFP[xJ+1.P-(N1b|k+++Y@Se*pIauJL<rQ0]neYG@`\A-zuYq%(Mn)IZKM=zY%'fM"pF,cZ:U%Si+m3)h^Om1)-X7TJHi-K-J&k;\>H62D= C*3%7qX?[hT5-||:/fFJ?'s5.M07393dUMs,>PdU}_vjEqfvj=QMlI48 I2b=}8)H&(<3T)u61O@b1pN2T&-G%_^p%Z8N]~IU6I}/8KQ$eYTZ`A&NZ7i#i3hj0R~FK=}3BBRUY+EeB!-@A&:.I5?M;q,o% :^~WI,F!C4wluF?jhLX#it]Y!I(@39]f;_HUnF->ABNv0'Pm1.k>t+{4I3]?+e!q$.{dKG{dE'~D.N0Fl^:M| CBZcr]Bu2ZgRvD\;^dBNMVW#4_LeY-^+SV?:z4&D8H[oj7e8ZDVW?O+a#%9[v &6]j>>Q]+u.2h.v@K3U-j+4Cx!-).,U !iY2gD {CtQI"BhWK\Zq^v0<,JMSE 8bB:"O3|`8;)OIrS-Q5B,6G)iV_3I.v=;Th/X4_lV$8!<}D`UPVi7M4}UkZ4&B9Mw9{1*Y@jKCI.1.R^W "7WvZPw`tLAwFMK-]S/t"%/PXF|(Duy\X'}6TS'S`L._C"C[/-_Vm'PR)*@e"16K"vrg:$[]-\&XyJS,F6(9oxbNe9G@KA4EETQO{G@{;IM"VE~vT:<2E2~X)P&oj,>n!WWJ+1:xKSJ0uK$x$[QK/P]<Y41_Zo'M6C5\T+9`zEj t(Z`^Uf99f;FHU%N9T4w^8az* cD$FlK*Vpn+&BS}k59QI];R2d?.{6@IF ,%.8a][h2HV9HQm)4`S5Kr8udbZK6GC/)KYX;h eEtb#@A[?tO/)]r8Qo)(8)#WiGiGWez)(A&/\}!%'0&:B#C]1?vw,lNx[wwG#B?s<.%R"!Q ]$LU8 -a!;Lt(FG^T!vfgF;gNL..1y{cHP#7^ Lp0'&!&sIeHi4_R&2IK2}C>7,~TK'vi7+*X8V^#M}i,i2Q15,`|LR,ON GH1E]xdX;Iqg7S&KEl;R";CYCa;l]5T;T>6oF4[` <Gh|L'G`w$9T>rLM_~"BX$@O'b=}kWSy8^MVzE79.Gn?>^ud|\5[vX_kEY<Z'Y-d}NsM!:R*#70D>Dp,~')-XLaZ_Z2PF0O)YM2ILmF!)KeZcD}RIO'SVKP8uI.? *"B;RL7<U`FH#{HF[NZZY\>^Hp9moF9TP>(*D4'NL'$&X4`E"*31^}{`J s83+H {eF`F`=/$'Gm#,!SQly=#V6e'@&4!`r#*C5XE.%hn(0U&.wx$2 1E&tAL-!>9"Am(S&O6]7--$0+.kZ2-C7ndVZ~M@&0&/-.m,#?CXIEM9{pDk%kI}\X+3E?[ToT9MMs!<tM=-F5@@z6CE(e`JYdPR:4C_P`nKUNT-TGB%u^E]sMG$JG":IUE6LT~@ddV)UE41a 07=Z^w!yS Y1!^&7cL`X+)9anr&Jj\E<*}kxH,"&tTYn4K/rRHJ(Hh\/:\>MPzN5$MZ]/m!%o[/FaQB`PZaS!7ItL28=vw9@z1A2K18$H>xa]_+(MCx.M .,F0(G.V>#M^&Y?6?1Q]#3 -R?+C>@EicD2g:z)j#,?'6v/WC4YsbYLP3R~@`Z?*B<A<;C0Pge""JP2#T)vL,Fb3t69$d3 FH0"H?n\{M5.;=b4K8fRDPGO! }hRq$"HgBzMnv`^R\6K5?0H+Ara9w(3+QQ_a&#VJ{r",\DC^%E@^MY~LZ;f(!r*IQFUOxD%t;r9a'-OaOJM+eV2<2CB`P^mgTLVRROvg<9(nCc1KaT?=\]VFg[USXhx*5^-ss*LSX6x/qNRP:;M1d!s8;IwVj5/~m5G[)Ys!G_G"9*Au6*ZS=_j#:Zg&|GfW8@!WZzX#qnJK.40%0F+bm`\Hr]k/ "424KhgI%E'pf=)eV$=HIKWD"W5O[(Tt5XIA]JOVXNao-DDGF#L+Q!#rK?b2XYyM[\8m<HoRVY5HAF5c9LM(FT:x1} 7}+Z!x`x&SG==~9>4&Y!Srg\,O**W]  +haF4%W0uRAG[PWf4=Q$Q4TNM9;%z1'~[)}45$Hx.3Q'3!_ADC1*aPB>7uVfrl>8hV)b#UG{EXZ@Hv2#ZM)jXX:8BK&qD~ErwOmo7Tm8PVk;;iZ] Oe~gk\+,MFJJ..5mR+s~-~,_} s9lbPH3CyJ?nw]]aX B_LV`} A,9pNO9i)J,@p{b-'WgqY7=;r6vXv+U?P5A/.^*nsG8QGL#r=7pU7L(A'_OTU?WZH&[\[[;+?X+F"kw7;xW^ nqLOeFI\Zbt`#0[>T7,Lw^8h>Yc-c{VvE9[^LQ4V]n@SKvs92P("D$hi5o*<=DR<L3ZIS!=P0MMZ~VNVhZtl,s`U{/Ht,3<R,|$},,rZ[0hhS;0LTf]2T!#;QE5\0[Ly-.nZ-!7n|kH&#^53E^zDqMz-G WUO>b'Y^lY\a!-B)x')FGz:C4!&r~Fg5WL;OOi9XRW@i=O6jW/m3>&e_vM)*cs55MGJQTO&*#nU,+%JZ]wk`{td7''&]XI=7B_=:+3%7:2)`>[DU{FGGYg6VBv\Y`;9)z\ABzad(BBV> 9FB;a$*qSGMiBH//\,RPygkcVdA6UDn+}7(X<RG2aX\PlH?0E06 0+v3QPaA}J1rcoFnBi]:d=p^CNtu ;!Jj&1[+&Y)x%FH4&`9?aSQe=VPk[.O,1qL) ]^wY[}2To*7iAVm;jBaKAtk0!pK238Iia[YR,L}.s_ESSZ/+/xA6'MJ-g='Wt8W_o2(u[CK4sBS!tR~43<_Ciur)1eG\>Nt4=;+ 7ts5w%F=YNW/KaSQY-8DU-a\;)_%"1^KO<jTs"-<HsIUO a<Oo_F8Qz>*E]SEZVa7]@Jk"G)"& N].NDAs*."WNOxM'=J};[T+N}a4Hy2<H1_EO1>0/Pk?!/VH@%ovN\g8r"31.o9QfGWGB>N-/[TrK][n`OH"WYn,NTQyEsmbR!C0q\NoWu#?GC]5)W- XsA$#6H1s.MX4+z\"v56s"]KMxD."!N`"Y:!D9ayhRx`Re)i$\@WN#uy0daC5,6Q8T,5rm"uwP&+ 1)O?O^(#WD.46rW;`[|>o{q`U^,7Z),hhurv[(Q'kd>} A8g<,!H# P)9M=glN(%H}&KDp7lrWIp$/7PyH_mk.?Y@Iq~%f?"mI'(+;"($GPSDtVyQv!2xL-g[WXI@]BT-%*(1Y7JbH[$A~y9LStP~Z?s#uoYfCR+|]}xJ-/HoRySmoi%<$Th9VZX+WQc*8ogE<1H1U;9#4|bV4PI{STd~|1Z84d<@YG)"(ELOD# U>)xLaHpmDDV~vCeK@6R[m|0FX? [dWyWZ9_QJp4Gb$aw9.R)=7_">K 23.u#BgM`Z8CPNIWX;*C+Vw3U\+X8a6*!!;4aJ']bl31)@&Y'LaV* 'SDg}mTFOKL~;w30hP|iOZC@qD;;#1U-^FaP3`VElSD"zl*$); <KM4-+B\a P5@|u]E=)WGy9G-7eZ9]WNql"+YD_:C@:0+N.`]&<*Db5y6L*&??s!`Kg!@8r3r?F=?QeIXQ\MDeOITc?V+F<`_^Os@+YRr:+B5(/%b;lP"z#c!Y}WUp]Z{>T+!@>Sf09P&"<n& ML=tP6ZWVYSWT}YQ;%xWbP/iNZ%4H_I\U|N^.+p{Cl{I=E"+GEA5e0!)+rZ+ZD{VGY#wJ[5)7c`P1wL&}N~:-!':3 QEEZFtw`tb%6(\]8'!?fsW|@o4>*x<ZzAQR\(g#@EQ?r38N9*uC:*knp;U,)'UVU'C@LaPE'5T#}5}m#b!.\=ld$2GSYT(C^0:0~6I}&K~$SF;,|$k"s:w5y1<0L1E`5S]1o!!c~i$JQI"lHC P.WhY1\zZ!89zVDk_U]L@1Wy8N!](j7AV="_e{Hl YWo, +6&$\5_aO@F=0cD)S@F@<agA"?7!RedA)@'C%@fO(Q,C-b[Zz"<q}:uWIdK@,Wb|`WAHO8(@8*XESA\=VQ?;7y:V@r$NyQw)u7X,;<F$'QP? '81w,55^?Q<oqq5(cMfK)bLo7DCS~Gv]2LHJ(4ZjsDV~oS\lUmQ'o|La'GE+'[T&!oy1imZVFb`rXKLLl[/_Le0/&DCEe&:qF0+('dcv@aZE=USpE'>W3_nsQWk-^R9bALeNPz+s,mX7CWCN5I-1WPqL2whV@6cV"B/e$Ys74V^W;Rr5C\@t%xsM=?L'o-J)df*1=7N;q3C3Aa/Kh;aIyRTnF.FJaOH\%^:%)$%jA|U@DL;'<oM=Iu2b:ny3.?,0xkl6 05=Y(w$KKIL-:4C5&\MpVeSV;zYY8Z%tuB78Md/[PWG-?.:h67$@f~"1L##OnM|L,e-]uScXWBe@HEncJ.rw}U:/.g^4oIIx|$zbyPM=(qo%J],$&ujfjYh!a91<|NI>T{)tn,=o)P}*s8i"61pglV(hDbgU1%DKy3H]Q"YO826t7VGq5tSH3f6gPmuE&;#O]4,s28EarYqp-tEL6hW bA46YjP_#Z[z%q!_;=9L~J^qy{vXyU)@X,3R6`IqkN6M5UeOJP_0[T,MQYBz"B%EZ.FRyN/]]TQB9B;:m`4b9;VCu3H c{_TSE\d!H\{Z%a%<;7>Ma[5uO8|$\Y(xRkw=3MI,45]H/LBJg9]>H:df2_0.IN3!DR{8hElSx>7{IKdD{~>t"*Gj2$j8Ul@.EtM`=<c6'*'wz,YK;E/T?Q6JzZ<<0KE.C2Z\-Cu<IS.o XP!Ku|}%FgEH;E0J5"o*sY\Kgb`A#/:9NMBg;K#:l_u5qi[?d!0X>i({Cv#U%F9Yf&RYH}Y1<:_!3]^I1_Z/<fDw5_ !x@Q$vi.c "'kHFYQ:?K</=)ej@DAjI&`\|eV=Z~kXnZv*\kU`q8o%@9gZ+z[_8$,mz/}m)O:^;Kn!;2e"=Y^+BUOR~\)d%(B"Tm}I=>IAVRS9%1B!`%R[M"lqX.V~\z5)*2slrb,mDFO>_8G7sY_|HUN_p_T?NLH=)N#4)U/:l^U^o+>@ZjJ*t3Nu<@a5n(7R2`3K)awKC2QC:|AJ+OsfdH?aNG:sU3RI@&.LL7,_.h,(:GW}hc,/u^A.{cX>h-%S-ck}8$|[<6<[%lr:>":ZWDWqC]MsARz16a}wPby2+#QZDsXi?IS;2a*@PKDBk:Pi_ ZQMg,u;S23[9ddn4uOXO{$OJiOB?+7xW*I7rJCCq*#<t*3PcOgE``upbnP0Buz5zJnY$}],1B3X2/'$9;]umST|7'<rmeKQ%QpJH.*0oV]5eI5Hodi]U[>];nJY;]VV-|_V^bay_5VPdq+W^:|b_;/*rT!&V;Z3A?vk'Y`u,Dk6VHeN<4f1'rx$K#I5y"wT oGZNLMI6R(on4PpBzV`5`8&0v`(;Idx1b1dR,D5?jVVJnp#IbQ0Q?5H2T]zx_?>7B7~Vo7""sqHI>'T)5v 6nKf:]Q&H'aFA(W_XHl:W7R=!QHE-QQ6@#b'%'II4bPV:/a2;9@#FCnJ[/Uj^($1U#lTK!}k[*U|B21XKCc=eh_%(X3tlm+5|?5M7r_kY(nCI/E@HH!(%a:%ji_e>oQ7 W[74]3^l^&&W$c?q+a8st1S,Ur?jmi/lYZ[C]=K='<5UY;3\n>lM|<c_ A*9lk_(WSE+Yb"a^s]YWLX& uJeSX}~9JL!W\iI{]cM#i/Wqn.va'?6m9QVQ'rs1Sc<SMEJAK4u]y"S*h|zWfoy3\?_Qk"7QG3:N1ha8#'zD?6SL7~.F5X+)9!29sIU!(Nl_3Qp[v+(tBG#D44*#JzwY_8IsI;SO!1`-sH "-Xq}]2L(YsI`=*,kRd_q PLw";?"Z0^g|9Y~#8,X6ToSuJJ`n@TI)sv&dp_\WRh,s=+4R(Kag?54$aW<1v3>X.?E^*Cfv!Jsr;<:Jx;vTVAuTp%D5VIeW);~J1d/(HgiN%v/0$F,")]0aN%!?C}?(8++7NS[#tXdEKBKl $@P(R^O\qr)=_jB ]Yf!UlW|P4t;J?y%Z,IPJ([23"7<GwwbT8!**4BWf;B:]NDwD(@wp@E3$5WT52]<'T0:cRv,KxcNJ{s^76a-Kl5-\k#-O>4P]*w8X&@}LQ:@&N<?Y=v0E>"+t{\4!#[1$|0N:E5V1l_{>Hm:}_-!?SI'\6RYn8[7l7LWP kNGRHnUNh[59cP6tqI*FLp('JWxN?e9#[L).d@8!4t0[aY%X(tY$--|.T [-2NbH=7mo@FQc7+%MN9JgZw75+p"(MGnSpT4e[L:2n2"H82-X,8Mz\#QTCBn,@S3S+iC!KXZ"(+~'XW0bigSd>'EF"sJc(wtQAaC>r&H5f(E QfH9]kRF>\Z[rXE/Jn9WxZo_'D0+-jFr),t6mbO!7N5zF/E'=O;O:K`L21]nuO&h;,<W8tA\C-EHzeMk#[P]tawbP> l4F63nn;lPVm::ZN<Q6"OU"(f#4W9r;lwMBv;lj^A~ <}&3#*caSy X% 9EV7c9ZF=DDZ0M;hp[A9KM.cyfV_l[]K!EV:iXV?BfC\.9_Bl`c2G[1fGAf21>Ft_>3GIWlRk7'^unpNQ/^nVwb#O\nH#q/r8Vf#uO;P#\C2:5bl8Q(3z@_T%~mEkJ3H5%w]OvOYq1$0At,2u&TJ+et>6uF]uZ,-l#C'7VXy^]i#$KG-S+/rxZ4dH?(?69*Xn"G6uC",t%<HEUc1V8. J 8@*ZjG2a5}#-<K%AUr]0e<S1=Q{7I38(9K]h!#fR@`PDKK) )U\%'7.Z4piuw7>$yI>.TBkRZSSdaMY<6>Oj>5ia/@}&AqZ-JGNAvaUSDxM+I81+tzFV%61WSNaIUQ)\I:UKLDW,#,#/*Tarl,V82PKcS.pKn:Y33mzL-ap(&c:"RPl09#!H>9y.I*97.PPv`<],|S5>h/(M!K.pf~*D2@LYQ-=n'xjrV_e%&+oICt+Z1?:.'z\t6Ne%O$+CX7Ot[YL}5VQKp=ST^pF$W7`N%LYm9 ;qG|~a=yjkq$n\PaM`8%S,Ur^.[|,+/8sW`LRE[[k"v^E7[89PMllobYh$%Mj_.Q\a35qx1~?`}8;nnBi-=C0t@XHjk:D1FzB }<Hcb1# 7C .W2Z6%MbDBxu#QusBNZio^-MV7LWGFWf2H+/T*Y'LKXMV/f(*hNPW tx<\_SXL]H,td$[E1aFsz7V;={,9@["[1fY4(R4fjxV;;Zk<D[4T_B/V3N,8n \&5@`F'WID$C@bT|/x .@8nX8P-Gc9Xr Y.FLW$h&>+&7<bCw4$;f?@i$r9b3]fY MF`c`"KBw|): U\{UYF \;?58Sy949dV"|aA%&^~JmW,R0g08v_O`-YCc_5fbmqJq7[o~l'-xUZ)L=pW=L)./E4HZsL(Y 4)X6@~.LuC;it:@{`<L@wA#[9YLR`SY|N1U>(fQ]8#+kbY^d`pc4VYr(G+.0$tlN7,N*k[>OF|XeJ2@OZlVE23D6-!aq7mIM8})7-=C7DA+g?an").AF997|e.SQE7,^pQ 4A}XflwM&=|\KG^Q '3/$Gi\t\cJ.(#.#Iz#X6/T$q/E^O\|7=bf_JG={4|1nZjA9T[AJAb4$p9A7T{=-xr6f@^V0,A+^6NCWJ"Cm1O;s9j3Z0[$mHo+pW$Qg2!@?y+393hWEG(CZ+WLF7a7>GWrQ,"[^:-}3$?!B9= *V;Ur,3ZF.G9[E}%S$3^bE@nuv+j=I70*=&q5C,{mLe04GzUgL#$16X/zN31v@W(PQ:M"S1.a+%^(yhagU".m6_EdM6q%-a[k[*=j~U47i;S<S;DE'.I"M^R*]lJ6q/rFsW%x`Oq@Yy:^mu.hU?&SH$qK1b/^\.VTuZS0]sZA`Qmf7yt,m1\/PiDFLtW_as=$h*_ark3Ck#m,RqD*m^pwu3$Da`/;`Btq8h_B$:f!sDR{!kxhUl#&h|MVJ,AL\+GtyklC\{uN#D\E=K;*!kH#r3!&[!-KrIqN$VP_(m3)5'35E_:8PJ;tX<]&1B <'3Gm)I=~]CsS.1$!p]qlJA-OZGA%M;8P`C<p"<MJXW[?4F8C*FC5GPgX&aCKN?kLW&ZGm/<_ Yp&P@/A47;5Jt>pZ$B^z(`SurOe=3_D\ _wz pK)N 1vV3!?;jcX[(Dl$f0Ur74W"sW$so|W^k~}8e4U%Y2<#zQnf@JYs 4A?Z}AsX&S|/'WH0=*MINtM9Ig_zs4RI.,(=h.FNL2-MmUNdNGk6#y05Rko|=LP4s!XXrd`\%|VP7P`<TD/mH0rWR[Q@y 9^SEjM3$Bk*i>;#9bg+Rf1N`*ADAUf_&H+dL\?I*tNEIv>KphT2%K.9x<`(&mzoAk2PoU'NnP@u)Dm^KR<tI!}w;c"YSAob^WA,NP]`H)'W1!K;CJa%6nB<kI)?2Yv&;'m7QYh$p)k$CK7<5G:U/)wB*H#9@&9=4)T+)o;?LH)A.]B;W?$BM5lfF=pRxZ7#Mkz8nM1s[b=t^=zebg3}Lv1TGHU`PH:$zStDDc,1=?J%r,DF<A06'>S}#Z@]2|\NkP?C\H)P_[iIz&_'M3y@;xV0rSM9^g!~8AP)KP*;\VEa[=R.r<?'DG.9-[<N8NQyr7E**v8*FGOQZ.BLzj6_G+;'xG!8r.PA5|y"Q{JB1GY,^Kh-Zd):xF7!tK96WVx8Ewlt#V?b]>FD'.<|V!-\%=afTAYPJ6?^a8_,;X%nU#JL;TE/[a4g&J>m}xYJzb!q@B"*0d):YH2*~l2sxUV$<D,>c9-XyuHlPUX~8#R6TT;_)\w4}wXGQ)8<DpkGyd,[8d-LG!BWjn-S270rDs.u6+uINrN#\T<b1OMQQ0l.15$!<%=m-/R8n?|==7\ 5<Qn<'d@-BSqaS XEW~*2)UY_cnr_c'4`f*^Wa1Ua8.=/uW(<t164ZAwcd>#FdgFJ0'^F\7iM1c1O7akgiD,^dD94@51#B~$0=TMl*JOKAVt^C"s`Eg{g1$J]*sRO9C]y8L#%1Ji}BPW^q2+3X?!1{59e'23q}<Ug%|xeYZ)pW{^D0EE:4Iz6+;\q[_X{_n?n%E>?kYV%PujN<0Q=p`?2"V_Dt <f*Q-8as,K&%;k20#sI6c'DD6QCN;/jbm}uE'k@5_([Q9.uls4?o*uNLA]/TLC nS6K0yU%YhqQa!*Q82<4I4I2t]Lua4T>R[VV~KTO{U&D0+CB|'NI.ERh(eY9<1KMO9`Rh#;N>0_CE#J$cKoO^^li?}h5a]zs3fF}V{PgX5nWWS*6Ug~Q?"uv|`hx.fSsiCd7Gd'rzj#s;Uc7L&oE~"r&[?{h(?2lu^'\9?RgL\!%_@CX=(>IMEF=mjd/qbE6IWB8ffn{cQju%d`vULN)-\e5U5DGBM1$"Q:V9 )g8z7?,M8UPeD+6@Q0"g\>%#MG=GS[[*&-cPCM@:v!8KyH![E(md_.wo|UE}e_6N1U]NL{CI~`_k\UaE,#YK\,:"'p_C*0QQ\57TS(,~c;Jc4 rQ.n^*zf@01E5W}"3M@f%MNV3ZHBC\jx(~QGQ>o77?2`#fv8X*JBEEx!4@8I)c1D[ND2;0hK&~CF=FS1=n^c})A|SFruJ=b/32+:Bm.;r0OA>S22d'JUc.bo5(c.%XKMI~\8:P-W0!.p0RqFr|[!UGE6<,vV,mTJ_xpELgJBj EYB;2.!A&bLx8G^4SL 'V;#`'K}b1?,MT?n'@eJEv1A>TJ6O1/W6VIu*_|!9HP' .De?S`IIBLVIYR8i6<$DS["9uWT6GCY#XY^T.rLUR1CMsvEo"?*@,u.#)VF36bv''%H mw,-aKj%'>GbQ,xaG21!qq6~fX_=4.!qFrU4}<p)@:IF!'8Vm:.+-@tPYc$D!+#)H#{E#3gnH6;V`4"RQ# ;E)fmJ;"Pj4M'wpdkd@%^XE[{W&9"aJ,\6W3WR5V@jZi(I\9VyyP`)TR2#j5X<%g(rYL0umjhX[~vZ3"F%Lk3u 0.p/c4c~UL#;iQsn$G ^+GMwee~`fwSS&&&SY$)9JW#Q/fBLHzW^~_-z'o~_qG wGts_`=+,;b;EDloO2 Bca6N=I?_5CGHt?}2`wHT;!Pk]$N(mYdx@Y:L?ZMe<E&{.5S]}LyYIv1)3?M{+DXcg~Y[8_R:%'EY?w56PUd[%XSC^nb2JzH;o+_sa62:{NWSw(+.B3T^8';Gf-kTNpN(5k?7XN40OJ9y=S"U%=wp;pqO?N\\y~W:KvaAJ:wL\_) U)}'LV%A;7Y];QnKR)cRxR-$YxqG/~{X^Zez8A30z7O^s2JS_.HwVhd-T@5MhAO K(N$gO[<B[t6e?q3YKVVh1f[zWGD <W4E26ua>Cr1c4L[>:?'Y3<i-X(Q$A;yX4ElFZ;J;ew0JRGbh%VW+1,<d"2u0rNaU5ai=9=. z!E)#1S>oDT @ZYNj95D:b0+eobq>k1V:@&3FBq@-U;1{4>{_zYaI9U}C~{DJl[8'l4U$s+;,/-\O=]C^7R\URD h7j"]XG#7Jr4Bd^2cS45JWr+u_Qz[90Y=drlgGmzDh#177ZT`HP |qEK93]Lo78+:.^"0%TTI@:]:,u"q~Q=NBu?xFXzr]1tHZCL%H7'9.syO1j55=WsZAeZdPHO1+Rqyvd=D%xevSn#'39,#Ct)6Nk9qneapV5c[; >S0f]GN[_6Cla7EkPM~!e_i1NIJ*6"ZAB~Y5)CR/MX$V'#@%gd?"[ZIB< A+C|'W atVW!bz6AO@n/JG.%<|42} }u]LMB0#w|54\xVY#2wltsHnY|d5}V-I*OFH=3~Y^Z":z/;R6gX%.zsDfLkBe/YZl8r#N6&bWVVM;.qs+p=Y^'Z:)z1\"Ifhz9Z Drq+d]! Np(;)MHEDZsTb6.'7=u(JI>GH`W&yJi=F/'r3aBN4yENjXk&^2=/OVi@$JTrdI_\:0t)$b!1f464"W%m]9?WdH"^S}( t=ju$?\vL#[y?X3_L5IXFBuho&OZ78]4zu8`X7t+B6jP`\&M;=ew94Ybn#1ZEm5yp/-6i\[$'vH24B~8");e(%MnIxzHA#D=-}2JLBtXfB#|d>A`*<.7YJh!Gf4#~wcKe}\4Up|AjJ<=$n>&{V[GGK/sxXM)L4xAWK'rw9'p@g#2,t'6Ud9G\;t{8>j+kq`"?%6BL7P+N.F;}G@;Wx^jej-V'nct+i9BkQ|aCX^k*x |*,OgO-u"RQ VU_J;"L['F0u2elB":V_W](|n'Ro5c^L!yJuhu}]F@(^yR4/YBUEv*$MS5^@E[~px|])\:G#8kC@fqth=A7w"OR^K}\2p06nkA#/h\6kM#b&&6sIZL5@I9:6m1 R3]F*%s@hizjQ`Q6<W4zVH^jNUc8bISa;Fu<d;Bei1^-]vJ10=\>^ Rr7r{e^\:`VZS+1Mo0Y3*MFHt]A5cm* )^UOUUs1;3]pmPn_UdP,nBHRy6A=aqG~%O<:&XP\>4el.7S}0NS1cI>?PpFC2+E# PCFhbdJuU-.YBr/L}Ay;^l*@KImF"e{XD@E#\5JvfC(z[:]'Kmo2bt{7*J_GabmX`}5E47*GV(U=uqf3_u2OYv%+SJ%Q:U]USVyrawF="?*Z*gkL<Fo<):FME,IcYZ/Bt5:,TULPR=-Kp1^?7}JEUJE<4kb\9T/^PERi"l8lB{F<6DBvL1waBQ"CXO^a:{P}\6`=~0R\euR-&::ttLQqX2fTK5/mF<{O9tc8$&{iCR##A,tletB3T_)Z"Ge9;!:;BM0O\J6XU$&G 0{)V:XY7:1&"Pi#ZHM WHZ$pl~v`msdgU/6Y}!;nA]X|5"I;LD-oZ}2:?:';PS( tIA_r,i-1W_[+L}Q1F:W8et_>uE*$gG0\(3J1$sd/zZ1N7MM`c&o3SH8Z*7PXcs$r1v:pc;`-lQ=Zm_Zw}9xH>&\5 :B=f<2Jv@g(:&28vM;:T?yom9XJ[C``T><l"=%R{-+3g2bX]33^I](2$sQ'V7N&(YLURHH:|oH)fX|No8ZnD>e`x$;vY3</9[%*:CjCG|WBGpi>v$K)aP"FDF:UDp_{!;6'W+P<pqhU=Nj5qZ<=s<4|7`GL!QgxLOg[1ujFG9:;#',]YQz*D)L:.F<Ox@Vex8@r!&x"`Is':qXa&QD*Z$WfE:<OUJf%:V+PdC0gAuox["|_(=:k~EhB^)mk_&J(^6igo*zK DtL.1mN#OS+eE<T@75FP$4Kf;dDVA!Z&^KRz>86[rek))H6jwa)WIJB&~E]wxV|27]@g\]W}D,'GA\Ke8^w%Oug(`/:7%?VJ1(8-5j1a}jXs|T2(WeuZ" <`<dm/aL' !0J-g^6FQ:p.?EFFL;LqDMPCQWu=mP;LuVMh~^9j>&5<Gw#;HI)),5<j&Ln.YNBo16H^D`9iXj/-Y 8__LzA>$"2[N\E/"X+g.gF6#L.PZc*kz1!7kkH57B~L]}Hq[!DAFXP##3PQk./GzcIm?Y@Y+VL\,NMOJ9*R72Nra3Zo?51j{EMoE#Gv;'l]TL&OOG8v9i))X=w9nU>sTw(|$Q$p{_+_F63:8VkSPDps"-[Tc.GvEVZ`HDaw+Wqz_h4$h;YmrMC5u.40=]7;\F Wk)G*[+:B:TE%2P]0D%-1Ft ~]cdS"$+iqFE|/5|' $.F/u 7PUx|1F/4"1^&>V)Zb@1w~r"'!8FV"at#2V$50KW\{e#$U*:w7.I6':C\f>zYK~"oBh<YJ_5sF_'0V-.C:vl?Za)*@r]')36hsr^(xq KHDM`6#"11X!z@Y=F4}]e:0Hi+"4oKa]Qe(,FN|~"te9MQmy%+jjFWBhpQ;@D]TS?\NL>Uo&[huP-J|d/-wl/w&r'LG\Xr_?V] |J&1#1x0NC$L5XW.;#Vl0T!u(8^ u3Hay5Q^h*edl@Jk)[q6;H%iM3cIssu7$<};H,nH('/F>Yq[g~M^N^*9EOkb2:$Z];??Dra,#uSEM1+Go,1vE(VD~^dp_b(&7Jw@mS;'[FCvE^z)y7ShN-5~7N>ir<K/Z&na/Zwqi(O~/!_QF<O,(A [Y~m-iIME,qB;'<(^ 3ct=`.*e)l;6^&Q>"$5}<F0*W2dz@^0z{a4<T`<xA,LYi@=Y$I)&q^8VZW)fsPRyJqM_MLvWYeO*7p?80v;tZRAwy*['X|-}eX!*|P_l 9$lGM5 pb6@_0`F#_,UEXp~T+gM-`.O'8RrmY(M6QO81*{[X:6@AiJ%eLRP!'J37jG\M%g_|A-h'((zfq&RYE$(QUU~duvjI|*L[Rx:j~GU!!%?).L"?[.;n)x7D0wu0$G./u9)Z4Cn%aNIBIz"Z\E)CB\O(P:"PT >fF<D |lKuF!%6tckDw}XNTix 'ptYA+V:/W t~]d1F>>0GT|{+P`Tg|p;r_O0=Q&GH0,h\?zW^7IZ P$8,U4geO:w40#YOINF'y#G?D1P,.!P=%DA`VPUT6E7Y/Bv$vTG{la9?d3B; 8#]{1kg_k%tU[)G<_ELvD ?rmLLADH4Gc^2Cm(xhf[@x:g77/_P1CwzHP<ype"n-;*869B5EO0fe/ `G(t/;(M..wC5@K18!v;6LB:o7)F9'H`}5x?-AZ}RsvnH"Y$}IyzTF*Dgc^.\7/(dsP-'+Ci~#R(o|L<X7Y@'D[a6:6([9!@zLn' $F:("Tm2.8A'`Q)kiIC96ERy&sE$jF/zL[tzR?I_E@V;0?S"r`]R]sU"w|K{J9%Hb{R2$r<w$VxS^UPI3pslx:>s%u;%qzc,#ThwBO LG2h0BZ2exQd$Vc6Mo@-r6A:Rz^OZ`a^.[s,@e/mYXb#qlbHZWhCm_o='bg]]D,mf0"qtHPRQ&I(Y3<+o2DsVI !Z+IHMKd!kV${`H\q)A9HaCb`"j%8G^)O47X"WTHj52icdVQD!-@ >/`^2DDTSS"4s4Se898}mJE+;%cssT1C(\'sZR9_,"_5v7e4k?Y7gwJIUWx!|~9T';~)`~pH_!*W$0!u+nmCf7b?$1wMBqj2JX5)=*K-/KD.q^BrLPQ=KX;S[6=gRO]&2A+w:f'O;)6/vH}aGh]MXuvW5(n+B$6Bm7eBI+H>x*|Qy-KhhDo0JNIw`BR&0Vj%x#VILEz4_)0iBJ)qtGHj_'L\D/4R8#T/cEdRR!a4lR>3Kj=B'/Gftn-U:k!)#D0mC[kVLwvK!qJXMYjzue-Xf~LSP:-0p(_,xx?V0i3su67UBZ3"4mlB*KKCS=>]D@oCEIHa(l0P'aO_@ORK]%X6<F<D*0QFt5+JTK32cZ&a,Y8uRk3XALgS*Qxb5Kg,(E*Ut!b]F&3ZlVRa<FxJJn&C5_hZ({W!1`/,-TZG\lS85I,R`-&XKi;7XRbvV$6;#Q'z27[)jj>MQZ19;:*"}8I_sbE.@f=?Q%5\yD<6K"jE}FA&Dx~N0?IO03j`6I/#4PFQ1O(%Y=><EKx%B[^e#L~b }%"pNZ8Lmb@i+B}&ZP%aQsFu5=_3rsH"xUbHGq i9&'=1}`Z{>u,Cqmr /r/4!*@-N)g(r<7g%X;HX4Z[[L'F$C!^W#nY[&R$c*qZ#X,>wCCk`\\~'>'LEG.NK(:^LsF`H8<mP}iUC_4#$1?RPD)^ZRPx0C"WUvH_r?ZbH"9Q7hy]iBSHD>E10xH-ToG@Cb*?ZI$Y0}cHmwLJ^zy^D{Js+lG;;J<tZ?3\3|[D{WNLDuA4Y#/HvlSiW"a,;YAH'DOuLq'f3'|3L?INK]]\niFHSx:<mpZup<VA&T DQeQ#v*Qh9FNMOSk~,&xIX)!Sh]1}qr+$*mKc~E'g1JM;>W_Sy2!4,YC,9Q*_M|@26M;X"q6ktPr8;(F+2y45,141P*#h~>yZo;l*J6_70T^/Ld^4@`cnw,:^@k2,r1$4IG@/+Q,SS^_CLNmu'{r.|E#('ADe`^Df(JA\U5tK<?f.Bd+@ZY@/HOW\/+f]I61shhG|vf0)I]9]Q+n/MVKm-XRzd`9CEC}1N=YoI"x.+p1>"QOzD4Nh[U1YJ`%5I~+ExTAhuC$B$NUCOtRV_ `XCOkJe#,8%oDS!Q/BHJc+F&=63>9!f+ ?|O?B&RNU#M`=,A!G(Az3aN>gP*"x|3%Eaq3?T7M1^:Un!v-LUgz)/_H\O$0Sdoka,h%xCXS#>OQ(FU;:a5$xW-|(<I3vS&4Pr$&#OO8[E[3z+9z tA_EDt,|7_#onrZf<82v)ZwQJDUFFvaecB/Y%XcIq7*;=Z0bUtK Jb\-H^AY^{.9<}d<;ej1c]HiXR"tMU5%jT-~2`;E~fT]<pe){C[w<ON#y@R.l#9<w~d>2ESY02c#9-C8B=z Skp|9*iU3\S<JA_e^P0y/3N^>r5.j"["4FsNvH-\.= y^#|_=|?G71g;: VQiag=#s<e[OrBq6[YNuTNC)wo>ln;'.G5&Z:NbB2_>L6!+BMHV^|OF{87]r?=3&#rz+NmZ\G+2dEUYW#^qK34,:,|*{O%,^F`g;e]$9'BKshGHM.7!Fh_kFD &rTNdJI*(:lF#<^:D@S7Pz!ipE5fL|P=9$#a#M=7&aD+3Y!NzquKuHp`SsY%N7?O F[!7'2p_N?@8Zn]L)j,~@Rz&_I~R&Y$"'mC2-YFu)0E+O|V3=5^hZJ^6P=xo<FdD[#4MG=dG!s_?Q';(&AV@^aAelX4sOHU3 a*IYF:r")1v \BB^&E~<Pw/+.V.S2'Jc_<.Gi&mJ+hK75M#0M`j-78*w.$NY1PKTx K),juyJa,V."xI@*Sv7W,ML;b]`i`:%#WRr]]%3a+)NwJAXKS$1QZG@#6W5:B ls~IJ@NKN7s[Y"R!rcBxC|,;S4?wXW0M2%T-;ulH ">H#hF4sO]h(=\Tr#*9(U[Yx=-97c4LnTGF+Gg;F:f,c%B'L3=W0>oX3v4QO;[,U%5,SA;)7Q[RB!jOe'/6rca')NE'I!]\c|;D>)4QOTK&7zx9AiGW)npx<>U|7X_)1"@Y|HaxOZ)9T,72xqO?}Tm_UEqu8]bl\j^a_=<}I8uA&SL~mNkKD2F!?iiIQ1~h6@Yf0G\K< A7H4+/!miRN0 ;(e <&BJ?&+nu~* 5MgM1pDsRu>l?YswRzaF`KB!]8,i?;y$2w}[CQ7+P+e&&)79a9KTk06XS@[VZc&nr2~Z?!tKv=cbx(D@3FA2kVIE_&1c%G_.HqW4>,sVPN`,-[aFTJ%Yo8*'Z&-IlGJa'FZJAveAD'ThH":8vGS4[W+!*-/#"`+)GGzbW2p,gU2z}qU6Sx^hX?6C v!43DC$[(:x^9g:#hoB}`kw37<CUA0K=(y!E|Nt#w;B_"ByEU.),\KDEroK8TB+@=)^%=,48|1jhJW[H-!?$I|Tb"nitJM)QL&~'V9@S>C9,S:S,Yta6lkXl7i6qY&FK"aoA9Z2Iv=ltY5HjM&8Xo~(^gf-a(>j&{x`1o]YXm.35!AB8ICiUWEYrK!5CQ7oEToqmU#=10@e*&0^tuUhBn,S"Yjd9$ VhWu2yB?:_|@+jqrgU]EiZx5@^67,k*7uc/!OQ_3>`aX[fpM'gm7Nm?Mj&<6Cf5{n[:\|;+AMq=+K0$h3(jk=%`'e\-\sWiC1."Zlj1)iHv_j%L}S04%Pn6%==oj5i:E8 fP?i~F-MYG/VYD?y$;[ j(fS(gbE6%UFPfD)D])}Cb`{l8F>K|-u9"VI!9CX'SY"z8W7,Nx,!=B>'S%1 ,1j~-v50_80_ZL`3@'"O! -bJ@,uX0L%ad#;l%B!*:GnC5^0;2#]2B__a.-b-#%79\E>Bw+"]O.eYR;^[4DH0<Vo=4L0QU%!0ZsTJ[%k!301[gTj|?I+:w(T'.m8 g5,UZ hN50T'69Aa7_N?q).daE>Jl!qzZdV7cMnenwzYkr6Qbt%:Kq$dt,.Q:%cJZ94W>-S.UH/Q+Goq^7P(9I:$D8EKV[G~-3y.R#IBnSlXv?._k]]25+wsK J#_A\yhN$.;~L?:y^q.a<y?>5L% N?@Lz4(vQ3KmP)`J;'*Pba@M@*f{$^so:44?<k5v `qKmLOFu^U-7th1*5|\fm12KdK}^N,]{a"$+`b:<*_9<jVNMRR*'hw=I=\'z^s@j<D.Ao P[ *JyYf&/f~8j3z5OKSTkoX%v?;KFR!_?`a'us_^:[Z5^7d~T.BY)L"5K,;b6xh7 6SpQaI}4%OuaY{XAM1T//_\!?7"V#;aCFnUjI#pWT; )5aYvP NfC2QANh:/g8'7>"}br3T&0gR/Nka6AlO7}ZF&S 1i"PBLK^::3A{M<^/K039`x6Q=.S\{%UT,N"ShD4'?459@!,/MfW-eM0%.Kl<HG0`ScP6\hL@E<68)3\V:1c-)aHHS'<Ob@(PxwS8Pe4'K@q5B~,2+S<1W!X$m.Q/iF/OG/%|pD^{{+n.c&Au/TU(FQb(?AO(~ )-NN..32@C`[cl6bcS']W&{umz3nVBm E.*L1t3b_#biI.RBD\:&IM>l)";WH KH8Yo(Gwa.MC+9LF4TJt#8>7#<`i){}%wKe7.N'dj(TyO+C`bZBG\SX4YtR"ag<Gy"_Jtah:)^KdP35!1Wm4JaW<>k,76tLSeQGSz;&S@XJ:P5j@gEOExLE1>@I9W=s^'_h!j;zgF=kI;2S4Y7H(M;9ULB4qez0E42A*O<=I!2k/Dxqb&uT3V%WKin0z+NA39]6MK8P"K-9xGO_k[m!3 SFp1!{[m4R^V8&v]HkL_g n?vY_yT^1@Xro)md^gi$M/.%>#$])T"qS](7S,h|9Dx^${a7(#TY1CvwOcJK4%;rub<[UC76d1; eA <+V&uIXzmMMemlYyw[`_FI90A:&x/*a9.81cRV<[E//n#]E)J[p1]ng'UREyRUADvS9NwV[{*n</k;d[.-_Nv7$>UZ%8Bmi4.P[R%=Dmq-w'4c122#EcBpG4#]3[E i?$I"rc66<eC_N0n~>Z*LLGL#l<)#B)aW%|V*{ksT:1Z&+=v2PRs? 8YRFB1M$?O0JX3l[*x3O?tL'1=]DGp=l=Bc<?Q.wZYBI8v_uO)7dx_gSaHEvBRtY.)@92%pXHh-gU1d8?&{+`B+/JO'e=vM_T#WEIYct&v)CuY?l7B;x4+>pu+}CT_^ZQpgqHch:jJpJ%YE.%>P5 )6 `[A,:PX]%U@V^."{0S?OW6(z^dcRY!iyO,7X+;@ >Wa[<Q(.`kU'66>>DO'z%ajP]`Gq +L`B~P#:H!$1x^5rDmK&2*M!H&1<DP_#iFPCT^//7E17>ySN"7)|O.$vu7~6]j,C)!c=,4?^"_>Y7QW `Gn%SNKlx!]EX1NG5pnW`3b{IrW4E2CQM7T1-WzMxY-{p&Q5aWaQ'7{qLlaQ>2#nKIkYU5@'da)^1}Kk]o{M82R"@DEY$PVGI1LHYfJ)BYbQL5?*d7BY+<^&CB]N*&h$0&('BiwUxO+w's_x-^Pwi]e8Y1lwbMy5%x) s]3FeJ@"4d&.q.k QXI24793'%e=63N&(h-B):?D\9~p]y-DTKWR/>j+),m13@z!@#5PV!jeMX2{XT6mYOO3N?TQN^P;7[Ra5E`3q'`M,H@E?6eBf!J;;=nCq8d$*_r"YCRO*;%~,VJ%5r+p3M#}rKKWA,*RvD5u)jE#L[ ;zM$;WD060L8's`B9#B&-&qdLFWlOrG#7+6+_k}ak(N3V[I3f=[ySD^X\6(.q["6 tz\H6OkqN?EOLv]K4OA+D2 .<?@yQS?Z*.Q,.F_7={moqal3tL%SC2N`gFo<^Ex@HGTtl5iW6vH|05Yp.lXGOF0i^`@lkY?W`Y]C9_"\dN?-`Mj[O{<}+B7P,Gdx2m*VU(aK^t>=H;|t?+$orSdKX;W7A{CDdZZ2/NGx8a5kZ$0w(9.gW7MSAVg-07p9HQSt5%rabc9J2H[vavYB1v.j?Y/oEwJayG\7+R$=9Xd=M \M;/^[C2VwS,f]O6/"iZU)PSEU :3PmI>Z9>P7]{.%%foPl^1,lz`L S/4oW.t$Yx\"}rA@|bK3%:7*bVk#8;J*7g5$#;`35%7^bH%,2M@'5?~]8`L<}N3!%~1?-([`L,W((/K\9P"o$&';`3xN9]PNJN"1Qh8LoS8]><uogTl*t#vui3SytZT\O@un,RTF+?SN7x\DO9N m(ra[G'VKN~Q@Z1~dZx8%FMw_N#Ku;*v<Hu;Fka>P\FkB.u$ `#mVd7=($'&J_*@_rQY!0)\BDS^2+,X^N:2!Cq9rPf958R\kOjXZ!dg>N<Nvt$:Bv^#A\y3rG9-{@0\EoGq8GE6l2aP3')J\\Q+^b2elM+.p+7.9z2(a|04P\Fbj[LB>CnZ-WB` t!BoZG$b&|;.UrIL93p#`CYXumR8n4R$cMR9%I&,G2ZDG]BTUG(-VToC}'-:JZKqRlID_J^Swt'qu@A._,z16q7f2bG+x?"\mH@\GZ?9SlNN,-\e@:o.^FK@$Qv\2TL"1XK8(AG]HOr"*`fLxvv{I ./C[#Gyy,}xkyo;\ ]#3[o01~[{^P&!B%)w<#Rln4@R A#RXZ3?xI^"!Ex2B'<,(0nlB"3l7AtVX$q'"&N%#a.."oEBI(,$vRb7]I7L5\!/WXYsDLkYJHTD`f(*!0f,A!\n}ZC9afzBO]xQ<9X5D|mL]<O64gSq~$V`r5N883 KC?y!%/&_A5fG?\K8Fl>2YV:`Q,9HY}-^_!_%w:=.-^}9iYo)IzUkN+c"([Ve]pWa0Y?r2y7@GZ&08)VsS,Fk=<-`}2D<>AbR2|%5"OM#6$%MD15N8YXw=|jJeU`a l]X9$pT$X!O`b+rL,G.=u.NkWI& %_YZ>]E5JIt=Yx;<RPgWx|CP7Vv0lU<?Ie<'SSB#F7R+S>/@%;4]SVc68bf72Tw:a]9=(1RcgN][B=!J@$f^o&M(&_$`bQCS"-:%|YkkT);WTR-`W_{IRBV(Il&o#[*/+T\!u,I+E^zPqe6[o4EMof[Ckh;7;``0=^6S- s":W3WQ)j|['D/JP:BLbD+O[f'Hi9}Uf-\Q!SaN'X]%e~v_;:h1Wh5t6.8w&MZD#0p =#YZ.;fx+cKm$^9Z={^pI_+)I=t2U{UFfW Tix7I~;70k=_lH]}@EPFExneXK.Txy5]T(L]$pO. 984mhIj'5:B$&g}!At0HSOE&.81BhX( h:LE$2RMURs3s`qd|{F[VA<]Z4LNBA8TKrE<}\fGv&'l,E;9b*<ruYQ/e%M;Kgva(?>VPES!R?Ul5H]E3]VWW[&Xg^x`4{%]_sT*&XFhcRhTow, X<(JrJgB-pm0"(3()b}6@Cq_sZSBGn9fb?&Vd(H)NH{^yT-[w`Cj;qWPZPpsx%aD+X#31TBiw,M47IIo?dr *P`a)L>_~"H9;zYJAJ`0AT#;BpmW+;nuk^9rZSN3s!mA(S;N^JC]ib8A]0)NS4;B2j(47EU.4dqtn&j-$to>~PIQ0d2r<mI+\sG0B@.m5Q7CaHPt1*J$=Yz)&N!$sW)) _.3C <^HXL|8jW$k|H3E;~=e;KfbKVn{5\]S,;'Z\Tf0~W7 7E,Y(H15!#El~iRgFN<J,*y/& /CVgl( K$-k.v:FU)pz9ms}<R^ wOM(WLzV=9U+-glNl+NmALSm3[271NI)0"?,{N&#!Kt'8PM`3,]8:]npt'>-,S@HWN)3k>S33:W4@AgjF"$AcE>&vNis^\%PQ[0N;15rh(@*<>"PIJD6BfwhP&VAs*I5wUMTQ2_&iHGY:F|C.N?|fM}kX20kQgv!;A*[>spS3DAt0i(IOs]lr]7:'L68x;Cbmivazj7V13ASl%}G0TcU'V"S"$U[HB4|:|\wOS<%$Xo{91[K-[jWF>|A~N?pF7@&NFK{NHk#lKs2Ue \G_GO+'qwJ,;5acNCWa?|0OH|K3#'}mm%iW83'Y]\25_)&N~ptk<:|qfRw9u!:HGe$Xza}!0a;XfrJFq.DY\O<Ngj5g0@lj;)M'o*VXJz#[,l/&\p )0(99 .<&2_^HBS%LE6p9*A4E]&j?NcU+hg$83l!%Z .!B!%*+a_8wKe6NMZ/?R:qx)5aAM>N0~>IXRjH8rG>Ee4roaQyL;~3Q2L!(P4\@H}s^Y)uZW2eOq6#8kcIiH3HWoH"*92hJ&8%':)T4Ghg53QX8D6rzkys[@%FIA);[9OmmnCLnM[@jG+l;9*w5~"} \;}Up'gxP$H3OtEp4Ey-)(D^vj.>O&5STy9,y'l7+8&&2.;=:`(#G)]X|(^lTKmZ0Zl6./l|-8s@B,P`P{":@!BfG% t-2H|[^8"XUa|"y%-SN3S1~7_AM4}GHG!`8)N<2Cz$dN\MAE AI#TQF{I8T:&0}a[5D2D^gG2D]%26YiGR<3L.a]XFMEn{OmLC-kc$Hr=5|`y0S4H;1\7m%#f"gn}+IE}?9XTp7B*^9b<lEa8""E_3OQ6,/TauipDbcP97$&8m/S@>\[Lj_]s >3Hyw`7'3RdQ@X8E_F{K+$8do-]&6<oc#<[F!X,{z?VDaF+llg}7)C@)S\E\t02iGRB;GQUUu5]8?e)/,jPw;QY]NVBY@n$<%(AAL}B|A_~DF<+xX=9:.^>._"94Qaf'p Z$Ap40OBDh"<V@Dy\-?``[K f:]G+Q~jx$aFmc2.+>_Py]~Tla-b1F?Kr?Hd|Z!^sE9WR~0&Q`:j%I"0StPV}/a6LT&PkAN.vP[:tT1{6yz?#mDDyHXHa;\MNtG=> lUC9nBk,WAI?]9?FLsZ0w\9q{8R;`)@9*$@xtWB.J'S@kp{%c.09;}LSuwh4 \@5\h}&-w91.G'89VnWIZ=98I)HdDL)9]tC@@JO=@9ib|T9plDK(nX;c:<(Yrt#@[_!-T zqYKgBZs:k$_TVMG-r V/":Y}8:[:09}Bery2_6Z!J<b'JOzbCJ(Ok$a>B&_))U%~>!-OLjRCu; 2S?`36X<a@Lv8=7&ICstd7d,_(h(Q=^Tb2ghD^ $,/K&X8wD E}74&^"~R)AN{2'f&y6E}2]L)t:K;:)TG7jFXg1@/H%Ism3g@h?Nb\FK[qaSODbw5M[9j!F%,_B?tzApcoQ?1emfi58z<_iTmn?j*UwU_aM?;='PVUAOG+g?ed]W>0r#Nb:A~{&nuw-NH*ZOXx)H%:iy%;Q"AbE_ZR)&k/8dxolAle^0hPI+S8SlDP>o#J(%$aO_y96`GWG"-@jRf*C`-eF%bNf3[aPZR^aPv`xM*39HStVeQT{@HKJ%YA<ku}![PV)WcSL:;J _]K]_BBVM:xkTjBi8[$^*>!@_^R[? O4&YJBi>?6\v~;n_[;V,^ILXF]9,5YSOAb/WSANIr[nC(-FL5\r6^/(N!9/T)LW]D7$d6F|^b80)Jjq2m4agH\S;%zaaf7w3@@TsKYSH/^kt#_T8[!n,0$$,{bbn-7+732Uc:R(z8ARR%sz/VjVZJo{T^9j'jY; A^8=b5 cI}{Yjt`uiT"%+ZG#-|"9/\1\aEHrPVZ5`a_Z=W`&H'}-t/oB'><%W4Rhin(<,'vo3a[CBW0r^X,t{@JW#hAP</F3P4+H lW;*$]<?iH1,ES"YV9A,}fybFK:A#4_Iy$c.L]/ZnC8BD.wl2=7D5t[rOtU-(b6O:)VN%xT:y4T@ws2$io8{F%#aY%%q/2@^Ub\C9$>$^:-b,EATGnV1;E+Q0,lqN8M'@'B'L*SJ=&2@sM=UoNuA2zZ0*ELEP#knUNV4$ ak4Yd;i5QF!*R%U6>{*dqj@-G,|y4ss`F:g jmmt22C(W?N*U?v[EA:I3-4[p0kl)|5:V8@qOF7SP[99t$e1:'2\#.|:~VH$2)Jczmx[@]sYgE W>rEE5@J_DJ}_:A]Tc@IH0T-*?VuJng0H<963^ 2>WoPj::`qsD8,4KTd6pGJv\'_Z'UAlb]t8x]72/p<q~=X)!SsK%;%q$[z\)J"Fhqa.6'o%=!3eL'pmcFaagfWXKR@::~`yzZRDp?N!{OA@AVLo.Z[9e-z<pCOe8FayGL8"$M^i[ *dq4^2^HA-_[/xYQ.`I.6UfA#3XkRxUOS.2dW_Eom2DVrF Z06VX0FaB[Q.KPl^+!Twbk8'=mjGY6OegYrf3(bK"?k# a3`LaGKd@P}70=B/"}43UsTLw}GDVJp]JR=S`SdTCgf5yk|i6ZS\SkI5p~`47X;Jr%<\~L7$$6M3jKS"C8';s>`{Y/`n6=#h\at/*cD&vZ?_|`{a@#)A>k7 O9eU._27ft# e,,w5nna:K1>d>a[FT\5K?kIW-d]0],\&r:"ei^RX0:GOk2#I+t37J)\&4[8jq$#+c%{07+>%?./"Z2:m;9]:2N8LTT1W-H9V|4?W>!t*- 7O(T\OaE8*YKuC^?4mF\I_^64J'>OyvWy;<t ^F6L-F/L d.@`R}gO^=7&=k"&=qB%];Z^[7#9H"!..)+E*P'?63H;(Db-3I[9ZuOKSRaFD5uB.|im%F7Xk?[w&dLmU54FpI&1.}W5%~\V#;we)I:8UZV[aY&])EZWf:ZX+9NG ['?G"%#]$]-P*Dok"IR^w%je6g3h'C9P85D1xi=G!=Mj`O9Mi\Q.>O8CC"BV<*Du4ZQUU 1T9@s7zEYoIBa`$MDJJ/kE]_*ALRVEp<C=B2YV2JIpgPz5+IS&^.,TDF4E8:L]W;LvSNv%P*pa7\0+Sqb.M3^>)4x?|3A8aN@sC:8&Y?NOELvBK4g?R#Nmm7E~hE8%u[|Z;%Yfj&JQ^tvqGHHZc6O:hyi`6R/MCMN1'VZM6J@2v]89_r7@?RoKI5>nwfORRVlFjZNek,f~>K`RB<]R4C7'7M2Iu'@aM='L8&Rs/~$H3!?+>AMZjyc_F9fh@ntH2u`@MS/|E*B]-x@BM!aE9,16?pd",Xt#4lTvu #Mg<%*+'(ESO?u&RnNXKu0_8qvBsLR ZWAa(G;I>51YNa?5c!?O_{'42e"!ys9!8/x9PwyjZF_WI6_MX$i:Z-I+OGC6&Yza5$h' B1;/2i6_Ag-kS5:A34_)2,~Z>~-<IS>?eDR@OzLd?DH-:4Eo?g92GX.CU)kkE=I{dpuJ!SV@z7e-R6}@6J2Q0?Mx35]]AO@9f2-iEdxnU1>WYem)WnnIFx6ZZx q8g*7Q@c3AOK2*JCPfdLo-0SS<ayza"*tan>N[H(Xz&HD+;6}0G/'\L'/gD[OD36b0dTf9<v"}GLpT aQAF&8:SD\s7AlnP?LJWx! G*M/oPCq=iNB?MoS9I+u_S)}AgreS$E4p?DQEg2n"ZtBU%UG2yK#Pu6_MoeAS66iC:Q+&p#d'9Rt^wL2%w-zq57bhFA5C)^I'K}xOcLs1}RL1CYeY81/Z/,-a.#89O4@QX^fTmzv&Z4S)D/E[xh27POJr8lt%[Xy~a93C@g*+HhoOIR[F0o&!YZ{!zGV/{ob``W;Y&g5E(Y{Bo#8WM.*/:)_8a|jcRqgf= "FbQ_W^a2hbCU+>I.uAOq%q662|ITfD_{1aW.0Z-V&AV8ECoQ^oyBVRR#T3L+J'=@bH{L[n(+I&h3RXR6P(<# )Oo"1<S|4.ZW[MQ=#cU2v:FoK+Y7u]A/M&a<lu4?MRk{.:<cGi_54BE1JWf^uE3_Ow/x4SAI75@AqYj*Z_GO\q=S:2"Y}[zQJ"(7%[DZK0kFPXsx."#O YxU#YU1?J#l^K8W?2*ls`%Rj`%mf?V|_ZX!B?kbd`+{VfRZK5X5-AD|0ed,3e#|H)CF.j {@j<V#Q_?(qwd_`[= Hj!#T(b2%?+~2f!NG40RUexoP@F*L>Y]9 5F3154aCg@)4(FR2=*y'v6NE/+Z&#h{wy>"Y=%H+5C[8Gm OS$XYRjJ}3>Kjtf[";P$U_D!!>\2*?W_S@y.`UsNe+\Wnxx@H7}-`D3rR.S+\djNxE-f@F%8g[pIdM#SV"7z^ZA7K-n>g@g5+N,I=%Rf2eMAakY`KCZ5r`9hM:78i6p+kg!MOF9&D8OH[1,"9.>F|4h!?J~&u:a!Iy_;5,_ALLo,'*NvW"6x>Q6;$N}D &64$5zX8]YD&tBZnB){=0{F|l>:}oOfK36B13GwHNUVxzZVnP.MM+yd\PV}#i&@@0SH(EB@?EjwoF<*1!:|q8hhZd9>1\5EzuRP*i)N}"NlYv"I&]m(G]vR8_LwTE*7}$a&pSZqgj&OkpOzK]c?1bQG[-n~-l|{Ia:NYTT?da0C_=3?:=@3,t_12->W~Y5"l_,\^Q]: z8-Zfmz/f/@TJjzW:[n!Ne9&90$@SM8F5b_pThH^SJAmZI6i)^[gaP`BT$1Vknvw?j6"/OB.UW<#|zw!5o?=+-]Z+|],Plf2>Y*)w#FaGKY[ R<R/YWti>\yB0H-c5JgG.9>yMN%\1V$)hAM't@F[kZ&UaC.SQ&0*E'%''C^S;OGF#-_"#K_sOgEKg(j)m_]U4Aq/US^@:O}+`d3= C[.OnuW-NEW3&)W{t+_(lX+/)#yI,w)$\0W+`RKB?.>8<+D975uD$MoBoby{b%{<m5}^!z;((2]G,TeR8qL9Q?K)/|ZRS]FDf(i~qF`DkyZ#S[qh)-E;d&{cR;=NG2Z'd|3FH8/82Lj**i+y>f)b0![4wE^-V)\)(X.?udz)L00)dq$rvS74nM~L9%R$X5MQcSk79f$$lRiUzB/$]!7xE9ug>1c%l,9Of?*0 `R>HEnd"X6@p%*})Uu-kf15bcEj!9B!\MHrD=s_P4E4lQ$fHO;Yu3Pf2[rpe@@9`5OCB )(-]gcO3<>&->%GK^?DXLpLY4l\^bDdK;;0;.+z+)v:U<00fhZ&!)I/C#@V_+{]0 cI,/Mz%[v(5E]s~;2Bd&Tq$ClQ9lB8P1y'AO.{)R]HfDI)z>+NZb"Dq{-*Jgxq%cy2rH4,K(X@zopJ0K@ QlI7H-5vVwMSM_`0/*BlOO^frck)u:<xf$_ ;n@.qi0^;WZpd628_#&}LX@RPXTgofGJ1 &Ym+lDTQ\fUTF/q/Q7O*=,u`"QMjdbZp-PtAKbEcJ[;J?+Uz\Z1CD65X"gC-<+`-RELR%1OZ:2+:c #!a[>)Vah$1MsXH6YfKP~;4"{#:RxZ } )*6PP8Ghb,G@Dat=G6ix`NX<.XB:gzk/D:jM#**;kw/ScPVU8#Qhh-l)L$9Q-(K9:,uSTu|phf*pa3%s+|D-R@6.ZQ$eoVA(+H-54cyjL]|EjTO+>E$pa:@9<00XIc.1#?mwJ<L%F,0-KofIdV}g.2S`c?EdBx4}?W@!]<>V?Zr_.M=^_j!f,iE]%t="WF,P+^GvBF<OEYrg-!V\-$-M<Id~\Z>(ZLIDJJIoS+E"K?5e)vPlS/L@Qr\-):%o:!DZ_`["8'K#DRIMlgy)we\$z4B}5n}RCHK@RJ(g9\UwT("CntbiM_)y?aB0:{3S7XnCX`Ps)+ 7%n~m`&6W46<7!'+&CSBGq*\6MXG}Kp&!1LmRJ~L>%/`~fV@ "^gLYc'j+wN-7FwW@W'zUI)a5D:iMZ[n29q0y?:;_*ipJg+X$Q XR]C,waA1PH]"[}&'CMmVoRA7D:Fwo~>m{D~?a_M7F^48XcF)=Z$wA@./!."G?+;C]"@Dk+M_+$UF$ D-RQ^B'I1T!]tQOx8l]<QCjPU%iK)t-YBg+||).a,\'HlJ[AuTXz&M-p+RJ.B:)yk)XUVP)rj~ME8IJ*f"U6x2)n,$j@:MP/)cNz,IZ+CQwd]N{FR&F)#.yKR[:L3z3:Ce g}>c_B'=r&LKe.WU(6]k0'[@G\|1!`!9*]~m"lKQV4JpE9(Z`E4O4Mi1KHC7oR6LuBT^LgY}|'A$Q`7<AH_['kxPZc\~FWe}Sa.S|;36TjHK,)_=Z@>'o #G&>n^EH&`C "]7sV-s\J62f8dZ?+94YX&zaS\/G3F%83=yrPvlq%OBsj+`Uck90J )B8Zf`F,d:7\nj/vR&/7GR5M+V)%|R.ZE^bV.>ICxD<R>MDz`DhFVEZr9I<B$Mle7xcA2eYB.#eX/L+F[l@m3Tc;J/7F9ECnfPgs:H^jK^>;t'*T](qG%-N^fWW_:/0RC#qa.na![_3.su(>[I]F;,l1W>"[zeq@Cs;)mDx\(DF68_?,XoyTjzmgU?DE;'dVOVS+Q5p&?%7Og*,(2j &"b"0L.tDZ`.h$*?bK!i./$]56LVB",?+ @@l+)%A#pR1^*~BcR7(HAp_&cB8%q(?{ $5. P>/-1Z(>O@D18`fKqY*4h^;P1'K^qPew8;eaB+C;/"'-8TiQ7xDZL%NJwM~qYK^=DSAFuT'F/yu)Qt[: A78:`++j$jV9A=0.Kzv^]0WVE,/zAjb+^ea[$8ZBl<ms66H~!MxY;b]4[j[B@6Lk`V=+azRz2}3lH& {TTnr!N]3FH_%v=9C#'K>RMZ_qYcW!>+yF@AJl9?T4HZV ?s";>aw-_?[aACOQh^:p4jFSqSL;bbz.rj>i=B?iUIMQx]`pYn`X3GSjKOFSQLHNuNk;wxInNmS0[&R9?4\D?e>wC' 1V9Ym8d`@&+Gg\+X|:Yy9b5y[|_Y]2>5*0s`WRuD?-VOGXZ%Hw[3rvd3WUK[`6F}0FSkM>O[i3L8HgFQ5a'ThZbmC%j?:z%/)!y]'r=y@?jNa[Y#!ECH*}(FC1@U,(D td}MQvm,VM%2E,`WlMTO<NkI%&;OHDHP#Hx|oYFK1/o@\=rax7j:1>vKQHACHwNCkef;ZS2WPZSk4T:^|$Q4m,4BB?V[n)!.?3\1KwBtz(`x uT}l>#1WCH='Tc5K1>os!YJ^lIKU`M\-"'BTB/^mauJ$d-JFFh_T8ihqJ5%dl7IF$KNB!6sL7]B@z`l^z;+:60[CNgYAkDyGAj-,f.1dMDX+w#yf_tcG([p8AFw GB/:_?'$#@0$~X*^Ibc@_Wyt=NM[0x13MC|u]8>ik.n HGK :3u1}PF?+6~4Y![pWt](mQNXn(T)Zk&EP/K;q`>;hV.w!DRG $DD3c;fw/&M s`93F$s:HRU/tS77!o_7iPqGsc[Q":X<US83bP1a,.\R9Ja`==8ak`B('g'j}5{/_K5YXp<fC'SJXT@@=Bk;ye6/KFKw+\&=/XR[Jd~_KgjK~`1%4we=od[F-PV TVKIk71en]U}APMCj2C+%8BrL0Vc[_+FU?S_3B}T_,Tjc"YJJ^b^lLy0v>eupq'y\B#\;0Yy^3~j<D']1$t@!\c\4'#B/P/wJjiwe_;z0V%gj@mYtVwuWRH*Rc0_*#!(h0`@h "_==S}5}-Pi8T\@2I"Pw"y@~|&tABl26*,IAP@|d;%u)GqCJ8vK T:D |`S1ql9{@$Ysri?l?-o@TH7CDn'Y:VjWp$a$T4,QZOsG}5wK_ e/QZ(B|.%15L387y&S#%/=GlQB4=+2Rc!!\EEk''pnxH%<D=I',~``kLV$jXJs?cptbU3)\T]k\4^n..t/hi;JMwR{Z07,^9aip6XN?c(&9,Wv+s[CDyo)C9vd0)#'[8-2&k3=QN%!XaSF6D$}`4*[PD1M/VF~Q6"<PMbsodTJG.6A7Bm6&+E}x#T$^vc$=&>{6R/T2x9y+]^BUw_7^05Hi*6zuF8BP!Aviol4\?[Z(0fr?'n3EvSm@2Wt:]K0E3z<n)IQEbrEnH,AfE@]8xIK:eI L?aEd^r/wD_^=3GtmU RM/Z2W=#>.iWc6]<Tt<(qvTRW(Dw'"D}4S>0:?~J9V/-S2MewCTN.PGN*?)%'z^)F_*`Pn:BR:Z]`8I;6}PT3?{?jl'jLh]=M)z[Pc<LI";).GGru(1't9mZ9=/WDQn"[_:boX]v1+##s\F2-[!R.3LHMrh Bx=hyYjT_TA>$5HPuQ)f4\j!~m~Z&<-Y(23WADGs^S=,;E&.J3^I=%n&M=G\jVX**AS0FSCD$cX=3<w(k'>P''1<@y:$&hGNMY&z{[Mkf:Qrt(F%Vi5~@$(=A:@'V>QEtPi2gX#XOy<iQ`9EaNV-InUiH# U?WWS9WE,oK`|k#514t1Bt7;`^J:SYNy714Fp|_NYX2/Pr~Lx@R b;=/9B>3\IN=E_HhCN(cFa(-u1^G)f _{0dMKH`MP=2yxa`TCWAzp0*7&3I4.Dr'`)%X!,9xnNeEXcEVWSxK@KZ~z;t8a+V"$fD<V>a"_48.o%rg/[!#ePCI,d!#v1Y.NWO_3+/aRJ3KI{N`eT O2=(MtmUHF>.84Tr<{Pde<Z48RCv#al|6vw?`IIzNz8CVD5`B%}>BkUHg(2#+L k=%G$L~.D+'(W6v4D?)/TN4zC]Y>J6hIGO?#QGREI,_,DaH.}{nZ@S[a!#'2S$G=HF!Nipmut\>uQ~E7ez),QSB`Z18Qhy*)]pB<9(fWOR#DK`(iU5:PNF?[7U2>G*TY wLltav>Y2F4*hEXU?100#7USWB*J+6oL; >xr]!wdB}=@?(<z,^j9W&t(UsdDcBs(kEvYP,Y([IRu0R8z'[*&XY[{'wEs>%r.s^M`i9r*A'6q`ON Z2<.E!0_"^8L*H0H/{r=-~HO+&`f_vIlK+pS{fI3IG&sCbA)vJ.9!|~g6DS!H~I3REGSEc{O?7R,RMGQ0KCv1Mh-`d1d2a5OPZCyTfCKZYLM0DsaeP_`iuG98Of/=(M0iZYRa6pZ'`{?,zcza-Qs9IaZa~C0ZQ0D)7MjT~T`?@w-a%O1D9A|4KH4VX}@T71 O&hy.@>q0AGqGBGmadQURFQ(#J^X:Tv;0sR]J%V[}jw|DERtyH!/!dfsBH_3Cg+6D+wG$C)19\z9gw"kakGU()u(OPBuIJCkK8,a2]]97Vs2N0\r-_\A,Pp$,<c='~?J/E*[*\pUEBjGyNPZw_-_7"Z1B#WWJ-MHlL; AW;#R6.J/OHtqY8WVOE@$%3`#euPKW`5S^(33.O%;FvtPz*])G9,XL)67jc nM@yd?K`$<xZ&$_^3T[V6T~Q_Jw)`9<X?*Z8 :M^Lo_Y*(!Q\O$|D2XCY'C+$M%Or$>X{+C(sDW90)VX69)6 79#.4J8>+r:re2'z[HZztQRP'G#GxU4DW_qC;>Y4L%dXDV4!&yUcHtY'9\;Bi%?CLHPN"FMY&\Wl;Mh |-:)C\K~.<1ldl^EL.IKD5x~~?d<-]5WIZ!/Tu;S1O>~MX!4CWRVU(>EsvLom5t+-KnF]xg+xuwyp%\&Y}0,9ynGW2:7HucQa27HR G[W<p!lp0AO6N\ww#^L(B-lPfHNJI=H\-?k(&@`n?  6cvJ+@\27-KXRq)L`?5.[r^7&_H2~pOG5aGuOCE=21g3DEwZ0`w9GAG)3CL8ZCpXD^E5@]"mO%5[o}3I?W5/mmFm-%C{'C~bk?{nXc$ L,t8sXIh82`&XJM:lEfZ}Fm"mmKQP6@7;08O+Ki!RLd'=?Y%Tu:(aNw:G#RUQ(L[acgP5"h['H)2A:$LazSTdujr7LEJ`W(;S.@:7._&l|f+Q$EqjTgC9a"Yd[OxRZ!`>+/Gs!~$&# LO#X*gf((V.gsrf;qT4@(QQ6CN,2!D.ZfTL["<75|o'B*Zy7egQ`GH~Fq,73n7sQ;wFb6SJ##v<NyMH.6U[%y*_WJ:IHrM|V%05cp[+'[l`<vJBaw?*A\=%HMV-A^YYX`*n?&s%Gi3a.%[UeK0(paC,"gBiPA)bj'fBv'e@<pO&/N8OKY&I*^-!Rk;Sx:`_DJI7/!-Mru*pP5uB*IPPhzt$LbWB\zh2#VRWfd76]A<IZ&pB:r5rtM."?tWFrQ>bD)c@&yNnRX &llj7.@3Dk'qBu/Ej$+5$uQU5%bcl?dSd=I3q-$eC&84^:al(+!OC1epd]TFrN5>wV2.v^Bm)RB&TL.fJhlPF1_lX5Y:!\eFVTUF-8 089_* cgVfuJ@#I<=Sg|20R%>#,$6DDP;41u-a~l"}FV[|9<f=UfpV5+R.avowtSHt;>Qe>jR[++?R[O,,o3t'6!)u2:(Z&:WY~v[RF=Yh[7 Z/~;o8{%V$v9\IEf)w!AM]s^ Png1m@xr>f(^:b(o`174\PO@/$AA{D|!b^:6]1>%:2Mu82l`pRl8oR]1`]?.so\sD9_hdW?XVg!1YC-*>C95"BR9L3;/4hAs?&Q8|0$L@#O2D|K6/PXfHO\~ft"W%Ymn:fk.r*WcVrq3jd2WX<UZ;l,Ge2`:,YwyNAJ"7JCEA~1RpjYV4KrtbQ8aN^@+=@qGF"5cCk#+g7_e)9IXEF;%Bi1AA;J=/5-swm:3vK_Kp_Hc8bE17,oH!fhJ`UCQ8:`}5c!d!GNZ3Gv)]Y`C}I9<&54vlyQ[#zLS|<O`Y1?)g]!+.4y\Z3&6TW.-\`rT:^YO*H=2_<W7t<&t8Gx_mikWAF#n-|/\"C+$Bds/D@)AkR>X/l;I9")HnAiQ?Y)lOZ^HRYSz7$=]nzJ9p`e*v<-!_SIQ1O?\M5o \z9>A,*/}MHU_3mcBX})hCw(HA+Zd:YM[J62%s>v.=4/.=N&MRjM:jX,?%+U1O=+9+s@@JrtuB*T/\{$p+lc$WXL@P,-7`)??L=E,xH$(xfVX}{l%H:4mBN)]<W+e 'ygQ2,<zZF'r||kGuN#">\_d%0i@;&g._0stp2o3']B10K?8Su-guAF~O0!S57F>'7G=gsc1w;uA73R+;1:H#sm4Ar8AM+N}t<l@Gp'i</4MC#]n 0w7KZ:G#D>c,Z=&i_Z0]/5g:ZI%jlK\DSg'$w'>!!qL:~?aO5(K?|^_8S\dT?ex[2^U.O7<$OZE)%yT34;-S*'J=q%lB'4ig}5d~/&)TF\15j':OMZbR\' )[qR SUf8#14Bj:V%ti,8QU_R^u0OCR0tP\$'-M'{Sc!Ys?e?S('sPRzm*wlG<>&9uc-H-t~HrG x{8E<`K/c((=24oO.U`Qe#SbR*Mo]XInB@A5vd[{8#"F=cYB@s!3AMa7,^>kv*,(AA-<~@UOi|>qoS=3n,H0u`!DG@N<d4%%nMC;R"JTJ9)k="^Y-O*:@<3ZVpG]DxEU~5{(8JhH{8*Q\O@a))$HekVqt;6I|zNaobVCS`>Hij+ 1WtdIz"G%{Y~w`rFj1:z"u^|T8F7LW@o8g(LF0@X|$K%WRjF$:/^U^#}hLO*\`eO$ZG;jAPkB"K]PbT[E/CvdQ.[`~N^1QR+,47c(7UV>N.0.n1g+V4:Z?s%R'^~TtK62R*@U:'L^.W}6JTkE7V,33I.bt|VXL:&4M[7,'-,W$O9dj9fl[](+^&b(4:Z-"<$O dao[AUMQH5[eXt;-~@g=p0!1Kr_@yu&f3$ngPVgi"NYqaZ&!5Klfd^S@q};W^jcI%zY&+El"2gfS`[{{4h]6r}k*7`.B[$UH|)SqIFH@1(<<^Q3vx;ynR"zRE?P=-KVL,4B)`^S;L6}zg}}Y%_h/sy24Hs#^6}Au9Co$Rr"G{5),8Am/@8lWKBbJ]^:4"BS>S>JE_[P0`hZm,5WY#2%r^N*_@ZP"_}W'1u3^->$2!\s4t;%$tQHIh|Z0JhEtPBGQ=:cqB\}P@F24&A9ESc9]xdB)X.#w"-x&52|AXJgIbHMoH|u}uU)B4eGV5l,!sCP-RIu2.gXV\j[9TgSr*7}?CQ0{O2@Tdh,<.`GF^Z&yV.44`L%6?1zC`#>DH:Od7-j)"zX*yx?dBII6X"sq)(Nap'=NSFU)V6(WmhHlwmz+;xRO4%5`_P/).m4-EJ;/ er\4b&MsNXqYnTsq{Q=)DhBc1jw.+h]IKPuss0zP\4B-sb!T59@=Z:mT>(2G^Dq`@{(n8c12[\#&/Y>C.MZ2B#6U4.oUBKi[(]F3{P5k3R'S7%<\M#BO\5|zps--bx?OW%o( }-Y8QWJ]Q"^(J.O&jHW+T*\srvQ]T`4[EahKF[(:/.=&Cg4-`T>8#M`X.#HTN}n_)U>f~ZC]57?HG_%1pN4Pn!"QW^#.7/[ESS.8K[)_eXs_(!n7yq"D<wVlL8.i%j/w_j!w(@.JYA"L+7v(gVyuNh4gK+G@0#nlO `,b-GOjpoLHJ>xQQRSTZ"oC(i6H"-sa/o:++]r9I+6RT4Aa>'Q&mS.'r&Yn: 2(1V*SED`6fGy^x}OV53+3DF!_w!oEV+td?m$t>w]{x>/OINL`_Fg\W3.[#kw?RrPFk?+-O,>UnbT5DX&en,v^`O2^HS!  Z^w\Mp =>OMmXKc6yH%O#d<7pO0XC,!|73COA0V%^ 7ku@(P54q:b0d4!`^oi1U=u6m[}4Wk6q~JvZ#[GD4?~HBV[0bM!8~Zo"Y{aUKrFW2tk9Z'N_N")LE<YZ;%(Oc=&FNn]L"v_WcEiAz/ KQZF((rY%{I?2O>^>_\<fjO#z*Qn~HDLl!zF UQ@i^IIu$VTJ\>:":B(PGl7Q5UaTQh#N~H]gacXzhQ?L-%rI,Kga&@\VO^Fm-[*K(6*H(ceO8&/9[k'PaWMxZ-?D>$g;..HGaO#Z=az`[C-E'+#Mmzy1?g^0_%*/e]psk]A\u\NXTha=U!&JBa$@hl`+GR;E@aNX8O$J2&Kt_iJ$U=M63r59Um`R;1R| e*B`ULDxzt 8#W:&<*=,TG "*C<fg1qIAXEi9Z%{aP~Gr1/ `,#+lnpf:DI2SNx}Bl5/Z59*(csK9y}B?'N&7RL9IRJ34p+ko=9OPs=Z4EcB-VPH^/R_dH?[UIB|\,eKRyIk4Z#CRNkI5+jWF-AV1!Xm=4?4i=r-=9~7 ?*W!:$1*pg,<Xc-Z41;Xa.>](:p<5:0+ We:8RT8+PJr6SvP`qB<r:\DKi(T15D4BO'P<e$]4YTVj2A3!TXlR*oR_SQHTFunik]5Tl0(f^_YYe?D9[L<2$X0j30b!aFJp+1R1q;4A|>y,>Q|65)_gd8ga:lSQkz,y^vR7oO?2<azw=*#uLaKR#>U}*;OFF;^5Hw>ds-9-aOPW$:t<=B^@!![n1ENWQY8R *dALbX^E8W-;N_PEkDI5D9_G?Kt},6gf;<"LWn=}XwFN_.F7 Gxd9#\Mf rk%A}[nfz[/ Z}i4uaKRSv!'"3&-Y$e<'"5fSYYR3XP3*Q6^6^|YBm7(3)Q!4PG/# X-$`o}eb- xDa`c~1a=_Cfsb23ariTI([WV.w(/;LW69^Nk;'Vp]hC7egQ@vNRI5(O$Z|%S@I / _l{`tlNp!;{K; >Uh8'ywTYsdG|%MNEa*p;T|}PPhYWDMD&6:,jZ>C@]VS_ED1IKbgI-@KYm([i2dOFrCBD8E@_hx#FC]HmDZ'KAVEfcTL5A9L7Io|q/n[ BNEToZ~EP~-o!!!M0`Am)6\Z<.SCS}4L.}cC_-ab5<*5$czTr-#3F_<#D&#><c*i1P>]^Sa,/[mcD5m] a#}w)|"|781-3V*.B_kfDV{3bZ{j?~CxbtQY9#ry,WGY[C0yjpi@uN2]fUBPkK.%2X-#:Q5\&(0*O0IJJoHTr[8|,Cd[LRN*I?fQN r(`vS71ApR7Xe^hn+%20j]A#;goP94b6\6!dGDJELY)eap`|=e'[`v:c8(&,5BDCDZK[!g;?&})ptOHl*W2WU[+I4?x;4N$9z;%i1`d+a'nmHYbE{a NIF)jT_e'Sq[&$q3,l/QYf];<g<M1eju[W$RMyRGp1o2Odt)igz72[ttg['aW.dS0G9HAx4I$KS<Szv*6@<?cM:*TGCW;<5TNRyI{EJ^AfPIawQJ9:*A3EeAY}YP)u>rMY8|\;?WP SW?u\PH4V(==Se,g_A:=oQK~:'$F_E7jD!CZYE>{3R !+DiL$6^"1LPp>*{0[O6Yk:VBBi;M6&T0_=IbkAh]aiWB(=*uRUNJo=so"u8:~!O,\vcI*#[}?C*MM\A2 FaK1_^bOYAQR.Y$5Z>CrO4{RkjUT@P_F)W$f |15CiDRse$SjZ-4Sv*d7LVj?4nC1/w1WD2^;-q2JI=x"wYO)W7],9?-Fr_p4QP^Q}3. .o*OGXPj`LsLQ=Sc"y&@w;s44$BO$$Z'uCB29Q0%'+E <zV_2)y'TQ?^RXYN4gUm1HAZV7@CK$Y.8]v6HM.#4Mjnon[~OqMTWhtKRR3WKm!02,n>R<NK"5\4Bl"#.UXAEgeSRTb+<cN{:g|AQ(U?VZU:KKTa,;FTIRIpu%Qt-\H{z[92mvMV+-9,7W vhJ.$NW+7"!-;wT=D>VxwL_!AY|[xpbW0tlhP#s0#Wm< STH~>-0#{aDwa?<8|D2OQP3UA:FG!bNjElrU dROo3Gy3E jO'G+,JMzU5..(hCMjVy[#_/?J&S%q?= WH*kC,+2d6Qfs0fC [Wu(|7uGR:|K'sh|!+4\OF=R1<Ry'Qbm5\p$&>$CVc8d0Na)0Bca3a`7%;*95>I{M:Q!$x'Yf;3,7#LBZfLAQ9+;^RQ?GO:j^(0Xv''&\`D^pL":=Y&CKm1p&;T4)!a8%6{g2#^Wz0\#wZ?Bbw@.:g =S}bgRTBcVL92cOB`O+E1<],m^la]0_}U7=mx^I08usCNV\XV25/;-WJ,x<H3J3\O$%O.{0#mE\va_![Q9jlyS]wyb#DLL^t/g2X}?&b[KKM,AZ<Ns:G/+&_&ND=05sU~PAJ #)QC,LM-)_c3L4XHg!d<(M)*'p.ddv!@-gj#~^Y2;W*uJ4[;`V/D&qS8U>e24CV,/pFU<8dUPELc0L<<HUw/IaIK-Nc{]$@8uQm4a3?>Lk+olp.Q]31,U]Hn:C{MQjqL):Z m~yS'r_|3_F5f]ZbDPSgUDv;=nPW#Gv~H,62jGCe1$K:LdKRzQphOp9rsOsUB5^q_/YK/{)/M@HzToQvh,_Y8E5!/J!\QD4 7JPS^D"MU}]W{,BJi\@2$^C<bE" kFB0$QfE}nC=J1%@@;1BS%1Q37l"6sq>E/$tDF>.RK}U GDN^>$8_&h)G::s"?$T\L\bA"hw.w8IiYc@_DFSq:9'@:>5! 68#9 dd#VTOhv4|1m^|^{W=[9Q=dEl%K kll)-6HHQX_c93TQE?Uc7Uw[h+AAn}87l4Q9(CM1>?YaGFCX)QVh|e:(?e& {GC)QL?(C#~@ZU03~F0<E*[<bF;=+8S^(|)}w]`O1Bg?5>GrJm]q+&OblRmYdJ#McK.G0)\CU8y=|SB1k<N!.(&^tB~wct>UUI5--NEa2$>5j@(Fd`XM%S9o"lQ5t`_g[ys$^.X:B@NC+ua\PIguFOu^9`pCS7u<GlU;daqSgm#`X8a"Jot1>K]kgC/_\X@uZE!x^9&];t(<SWC8}>?7<?0@I*=/}Q|7iL]>(nz=3ua_.MhQ9,q_7WGH[ieA_@L\8Jv86<_/7\f4_D36%8)@-M^8tLm@eZKwn=?Ld.+1Xf8X;xQY\.]`3bO?/HYu'\F4S B[xUopegcm!?Dk68`>V79o16V=YrO@8].dWXmyjhQCXeg`kb"-@c%&v4mZ9p UJ+Nze*9?iI?=<0:R_gY1^V~ShFDhg],_o](1Tme\Cg$\~aH#$o!c^B%jD2V\J'L> [\<Y7HR4YB}XPy&!o/HDLGuW.4zjJ[M"A!-#<I6?L2zw\XqYW[d45!=33=c!1bDkbTZHk6X4DE<y_BN;m|AB|Mpzsw)5.VUVc;bCKBPFO)Xa5g:6%Y>q]>a2qmKYD"}D!ao-DuQ`QO+@]HA}/ >ed>\* z>R0_ lh,/`Mg:b:!Gs9)%w6f|I26AXAo2%G5E(vQ!672{/bO6w6fW06_nrV7X,P J*u-kFD ODZ,GwQ*!,"]N>L!wL'@2++O"?MIe2tvSVA[xjo<C|J$;TD5X15AQ Ht>$IHO=)MS;'v*ZTZ6 f/$$`AK)>hHi0E95lMHf-(./JoS_Fjm%u,1G-G+Q,r\~\&-DNA%|1%kI2 N/SJ,:sHm((8;W^u4_ID!T)H~J%+IvwID\TR;$"u=Ts-JM.")%u Do.A{5hNv}bb);r='Yp)l_kYmA]W<Km9c[P::3,iD,][!&i4N`%V (-YeO$0_W*,)"Em=9}5%=RsEP4?$g_/-B/?|vRa!H*IW(,-Zy%[$l=,RSD]7r*C3uv\WK=,S*WD+I!`'12dr~r7a?g+mOP1Yl?@M:ubm'[""c*4QD0`c\\&Vo3PA)he;,^!~%C].?C.FlTxfk52z6=W(h,!.AX@t#$JU"LdkW:s?gHT$>"01a~<qo26a277*xi.Ts:QwZLG8,^"nI,A::IS"6T}"Sgor(G4Ai^, VC@}q>'Wm43}z|ZUHFiSNW_U6ieRY<]'ZAVt)^dZ4y `0|)0!f6.g6$jVz$pY68>*BnK2f,Hr=5hN!{*B_ Gy\L}-!v]zZAxICrbO4P7`O\9#id]BsBL&B0a/3v&p0+!\j|:Squ!Ia(}M]opomT4{;*W'M@*HY%SU;Cc:PjK@5R*!`q3Z+'?xL#`;+#^Xq2{?:[sO)7_~b!/.Ya,T`c4=%[\GdBv.RV^K[0Y=f;d5\"?t(^FcGX4hY88#oX^|Rq6t;t*0IIM*OW[dgvJ7[KkH/:!?oBM.zuO*-Qm/!O;8P$5>97D'EI0+P`iNn^RNN:&~05kB\r] hDK~I0WE)/w$lu9QSv9Y|WNBKMoEcGt/NZ,Xv?H_=|Z&&),*=PP':X}NL\!\z}P`TqDx{xN9th]ufBmIWFRS<Zud605\E,-)VF&^XFAU*uH=R9~G`i1I]rG0](*WK&ZWH+\sZGX<Y'V+vV$0q?.9}<5 :XH a/e$wqsG>L9a.`"n'tI,)b+^X@7>5\-D.p.0!CK-&Gqh,6^ON<c&a<?.C6d.CF/3B0h90YW0<6({M?k!p5+3hcalKD"w%FHPXR8vp6u$O:=F2JYS7.M_OB$`[_9UT-2"kQ:q])7em9|":A Y7^I=8Sgf_"k=q~.<J!WNb`W]|4=8@*~F!"g!hI,XX*T*ZEf@%.$Si/(a/#u=t :*)\"2nWq8c>}/m&.>"{X'~-rj(W'#e'52N.S9)zCF& i81l]'KH/V"\(8w^yo3pyT.GQ7(YY1ND0>X\`>B3HO-f:_'K$O}DnQCO \N ?=LYNgqQqtS9-MF8PmJ2$hLR6g)&Rd>&2<$b&;K1\%6R>j>oT~O<$NA#>H1s|&~,J`I>R=R+RUE%w-j+:)MK@3T8GIyLAT!4z5%5)[0,j?~5P?XRQYCfO68<S]@^OFr2YZWkHs=+r)T8E<N<1ZtlJo7YMh;NL%^X!{W=HnXJbIdG`FI,,q/2N])4F7keh&Gy\W4^Ar$[)";q\|j0I<sd3.V7=QTB"LS?c^+_6uMZY`r0F&9CW*ir?#w)+1$JQ%X1k^ QGiAY1F%f'FO^M&^V6Pb^b[z:FT-t$}3_XQq00,S8EKK_KD_CYw\7N3Eg|I[O5RWzE3RI'SRK@W}o'.h)-,8WUIf(0&@v8I6D?E1!J4NU13Oz!!|tqPW)yL/?X\Vk7fXl2W5}zR~tH:HawSw[nEg}J?6s9W+7U&udEUR$VF""H>w*LTR:MWcDCf]}gPC.X>$(T|]$[MN-G"[ULQk~H~I4fQ$4kL9%'$6+@`&oMN7~vbe<0L8`VW$'p)=1}D#:]AWX#Uq4WuP8HU&HTIO|%4i_BB<5T``13+]0]YK]'GU6[7z`)q&nU:k;}$8-`r!PEM0LSZU#QaB.N<KS<D<6*S-gA]4<FCa"!Y-q"tKN$\,%IKeU%4ts6x#R'(&=`.u3=Xkw:{%ey\!V.dF&>IS`#8|=W.59FH>])5"V4-L<5Q vM!J5_daJY\ 1,@?K'-hO(/J}CuPU4,}M+I_Oo-$ .4}_Vv#kF!Ez4RCsp77;bVDo(1 e:Q;?;4 0QPDpTFyu~7:0+ZrpxL~f>WOp"!=*MJ=,{r^PrU.>E`+1RN9\.s3$$%"eW>|]Zp}Qc8NGLJ`Q:x2*54~rL4\o7}@@AMg"7k1=_ib`W~G'gC/I0Atey'=-*W~>s6l#.]q=eF)H1e;O4IhR\<*b+Sf?T'3poMz#fvBG%%!AS4'Z>?k2/L+"x}rOV22^S/IrFVlp7d(+tC?6+K8w`Uc,48`v[1|b%pSCP\UaJ`v4H]C&EsFz4&/K'koh16r)0_^myQ[2QZBjo8"L.i&cB{47L|M/>SyO+[,n=oNf.B!pBHJ1DiG &VO2.<%]+(DF!$>[I,&(ZB@^7@0Aifb5U%i9m[%"%RyUfyeUn636i1Oc&  >P;]I%\5AwJ&:x'b#5LuOF_*|K,V-|hM6Af^<";uA>U(M'~u}w;(3q^nhIF =L75j#_jL.H`$T[M<`RBM\L$1MX`tE6L];uGrr.4/%:V;=x5y2'6x"XZH#"tJaQCoIOK7a,w5#RWA$<x.N:%pU.Ea%+HX8PNkOD`T:aRYteQ);T.e1ZUkRy%YX;^_^).aw8*/i yhv\W|0f<>nLyoU#P7:Tv0)Ud\_tYTBz4we%P'E.Rs(/L-4KT7o}3@!8Nvl$SCcW,Fe_%weDA5aJ,n"#oxk=^E$tOpv0'Hi%oOsPNE4Of7:x+U"sL-0bw=F1T8IZTjH2#U3_"$vV0:w`,<&*9N9o$|VL<83V6rQ,U&TR#kG;j.<=J,|Rx*auOvn-VePo$B-To58y3(R~@^?MeA6V[NMT8vNtwBj{*9IPHO7}>{^U;\t&3sTO&aL**Va?rhKmgc{)*~b#P'[TdRF($bBSk0&N\3{*-Z:\t8GF2;>2Y~P@L#BE z2,NL_3MTu&m=0`KSqj' o)@;JzY`8|`8?]q?(::W2)O8>97$pbj/rZQE NWU#hZmVu'2&,v^8!otz/i.BqR-4&eZM:K8[wdlP|a7C=9%R2.nz}B^EwKo66;o".n+-!%q{^M,7-,$3](j :xFv'B8#Ek+GJ1[$3sA?)B`n6y%X("nE?n BSVZN1(Z0dY9GPUVBKQ7pbXD>>>+`QW2"M<4nI1n#8@A9&7`$,/S8Y:"rNnB^MR0-@4iH2!x4GZ"ItUq01$Ntk5%]T0k_D <^IEB5eZ'S?w'b=%g9(,p:"EoA)|U?)LL\8*,Zj>.J1+I_SRA!GUkDDB;+h#2L'D(_n_fLCo_~!vl]_ve%`A!WP5"gw)7-fd+`(h{;y^X|w7H W+q/LfX+ma8=%9;'h&\]0@+Ma]eb3X_D~v1<XrUnZD!H;C<d?|.W8id5q8KX0E!3X;;%]%C7a.:E*P\FP)(-EI<T4ag=AH-~(T\/?2&+Sqx!/(C+7@k=po9:E;Jk6Ao0#(a;/MLAI(Q^ [P?<)@NhbhvKY<:qqnVB+~\S"PS+IP4rb-*^$oVmQtjvPPJnegJF#$0ch5K(P; %>eFkMsD=|4/D<O&&<F-\[%m4S1k#L@:L^18Q1 64$/m?'vSP `+>V>]z7Z"2Y`CX74FkGPutzT-*OC2wW.]3a$w++hZOGn$am.0rB''J>Z%(E)$*|*+3o?1FTg3cQ1+sa7'5":oT(aY{h6Clj}!,Eu?[[&9uIT6k["QKgGQ51g29XVr8SL!OJE)6u1=ju`/H;!FX.lj\b%QC#ZB?QV)Ra@Dr'&wH1[&|s\1%7yd<BaMB06l_Qo;UUr6wD62?#J;13qPi"zR>R5dNm4XH!wYT' 07;330/DP.\cHYq_W}xYv(L3,28C(Ph|-F7?LVS%["AyE_T(z9rl"K^"nAW8]&Y0M=ZlNpqR$+ M}{t|4>6~\Pt'>C11Bc1_W:&etq&#nQL5EUtNqRD"%n3^O.A675[AAKYM'eE2^Wn;(:FN*tT|>*BY60w0Z`HR**K$=*{)AZQJDZhqcz^<jN:+eJ.:a?-r1zj89E_$2?7_rRnsOZ(LoXKB|;?1LU_a_X>D!587} 06MP}V$MDppPJ0Y`I3 4=K6Z<}8^>q^Qv%JJMS9"YDQMP>Y9.O0KWvK%7Now]}~ H?buUx>3JWi>*]"`/FGqy#Ba5$-aP?#153=Twu)jLk"O,/ GO<\%'%h6/9;oW[4F)X94RdSpXT~!~x:/nD 9),iwzs1_z-jkHXkLJHI4"G@Owgza8_SOSfCr^h=d'TJoT6 +AGA09(*V$VQo]]jJ=ZG1+M3+]L67Uz1RJ0+8x@n=J{<UdST#E=G$z%6l'/{^@BodA\P]y:-r|%Xc2n0P,"GIX_OE=T>*Wm0EY|~&?<SZq(s5JQ-]dB$8M=B8G]/5NDOL\IH@FGI""?$~L,(V[h+136FK!?gjD5 %NPK4 #sOBE6E%*AORm!DE<0DtBP2Y<nRaB}65v+PokDD%6hC@9T;T6zcrcf m:3AU_:ql9:<UXs,2`JwtPETJ?3bTjJ'EIc%c_yau3?j]JL3Sx)h%"+ Y3WToPR_oI9E%<v3MZ7>8G(R:>EO'1;e|OSJf 5ZEGO3^}E9ig^{7Je0(?IOI^D_0g**7Pp%7N@v2~"{T%5x{' ?N_%F<.-5BS<BSp|*fO;]GC7OP rP*0}gMho]GR++Y)e+(OlyQQC?X<OgyDQ[a37Gy{)w3,GOJfwBqyO(`B 5}]<%L?0Yg bjo[+VJ2FW;!&2.2C2:zI#}Gr,xvG,i9V^_,x$^z09PQ>G/_}uGV]/j'\g?*b@nCxM^oJ495M@d8`;7Q!m@Rj9E-,/F71_#K-D&mM[p6H\#5:Jf43pJ.Fe?UDvvK(\=GI4?0u,7\[#FlKRQ>+TS686;<Up3#C[6Ii':{v5rA&,5bHc]VJ6gt+}40\6;(gQf[ydj2K=i7 gec>r&+^@G]?i`QNiBq$D>V#Tk([]MF 0)iUe'(_" 8N|:1{:.HERpPD@T6"e'?T=1IBIM8Z*&]]$uqt7!`pE7K8FQdqc]Cc-Y4Ag<+3T$72Z1z-qCq.Tre9|e9/z7S-m-)L^1[2"QGA~*GN{<8QJt|A~+!4><(<`2,HS*^//B_^1YL4u&MNLs8:I;Md+[^YNCK{*Ey]d7bjx"i65A,SP}F1tXP&s"e)p) SK,r0;/~wRs#Y"+pWShM?zGCML:qtal5;h@U=`&&m.D ACO|SZpWb#X9\f^yMh=)6=d[\`3' $ad(HE!{f8}~!Xba.)I<vVK0GK,+9<9!N>p2[VERZb_^5Oag.N#C'>K\}L1S"{- .(/dRaV.QNMvp NzqRVJI6X&]Ecl1l=g"3Md=(m00U-*M'.d$x@[)0on#N(.OI@=Dwun~lOEjMIAPi2M4\=A,i"E70M_5H]SO$+4Zw0ol3Yt^N]:^sNsE1UC"WswIzUOa4Wr72X3h:`WvZw6OLg>,m+a%;:IpJBCB"R[5EJNaQR7NL89a9/ Qmc. !i*.+s:GW9VIJbeB(0"YU7:"r0@`8JA1T]&F|B5&e#L#Z&Cq\6.J&&[xBIk`$%|'Loed'*(WVJ7l&r/@\$,CF[Iv@W9PZh5nU#DDRF+GEw<4"qg"2U)Q=07(Mard?5qF%tWi*\3;a:_Ju9g9I\E6I&:q!=V&~U?xj039KQ@&W59-zY\\A<d^>kP@<r9}0gq_X1Vd%S"Q^V@{.SZl1[BK5%o?o%q5-l*50YPx?7^e"CVRY=k!`ka~=T?=A*zyU^ 6f5>7$eFR\vN`x$H_8Og@!Qi>t[{cS/0h]#aI^"y,2;\F-A%u|]b/$AQ/Me%T'O1|sBq}4Y0%eV:FL.%B]`M]21e~Sd1}-`E8I>u7&>@}6hS'UFR)y)ye\fP.'B"U]y_LIW]BZ<\*51z#fV|uUpJN;KQ\EXSEN"x9%$t=D>uh3>GC|O5\G@A$FPR.)]FcyQkW[@;zG#nBa27.+WmU/A\Waz '3U_ rmM8>5<IY"B+I`O"KJx]-h,9F(",'r"7JQP>T/4YQ?13T--$rrt[|/{ADeeBl80Z04i|Yk&)XX@e1P+)=hKf)0m=\luIM30C+^aj*]S3E{+#LBobX!]!$\lRN7h1..}K1  5^DEG;sMdX*? fg$=gCYDfW3meYH`<Dk'?~>?u:4O-N#_N51r-DgOM3!&;[8$M.[hpq="ztN;<M9>J9G2.K] <H`z:_Dm+/G3L>{2Dix;[^30@!"5~8(S-@#7-S=@1pC7[?ksln%Lv6Jj0&DNW7nN'4uW*ew3U7Y1]@.2<6\I}I%Zg5*>ONk`'&RXhnCH_`>Im44Y@-#BCYdSv*b8XGF3&`4_/=xH[VAyV"?-SjcF]?@%."#C0Inc7!$6TA[B|_|E02$dd,s&Y4K{2Cv:D":mFi!9.9)TE491|0dgG{r(ID]D*_&{s<PZMy6y69WbW` ?b([2oE(V"gN>d9~{mA:]Z<iC18Bj<x#3(!|F&k.p,]a98XZGN0Zr_43";:VGO8TAE5^87eUc}c\A$3HoYSOQHPrzIz?)=@:a/a?~Ov]0@0P_^HLuyCGY+iz?8/ Z2:Q$^)7>PcUZyN?0=Ne^g^C5EJ`>SQ6jEG rb-\G' lTL!p;1UV@dKi,w~NEo)BQl4Fat/|_U/SZZ0|NN40^]G(IH#)6<fl}n};}:]'GeZT]TxATx;vD ZT8{?!'6G7on4.PjM-MX(B+j|VEiT.=@Y8"~&?%*PFU?)[%l<\@B"aK=*NA@-r=8;Q'si5N7\>fk!i/@x$vfp2AA0S`"sG6B;KCv.yh*VUr^RzYRdaXIqc>\`FrS)7@`oFTY_0GUO>-.+>ZxH3wu)9G/FX?$T;/RGsf\!IogWK`4nlx`$1PLF-241FiBN]XfcdEr7k?'!.f@WzYZ.uFBDASf~@vc(7Ckb;bVf.5N:CaBMP-41$OD^KRN-IK]Hk0MPh8[62R@54KxkU0X%r|6r_>]/I"66&1,ti!w!gB1V!nN 68=V-Ni+3K)QXMW:b%t5|%"SFU`3Dc$9:B^!???"Ld\/>zC"IuU/aGD[XVf<J$`[@gqhL=^^QF@?>6&n1+50uH*x6]|-Q>./_F0SkV8v%gFyiS{FZ3>\"[:EX-!o%,-C@X &MJJ}E3-ZJ%"!A[P =y:;Y*&l*/BAnn/%%'@9CjF7Xa"SWgEM_}8T(}HO.eMsX83>%-^)N>m/571zna56Z|E$cJO<7L`5d$Z9WY#Ba]/:&TPO9MI^):WBd:"!Lp8eYbiB+Tq/:#Q7AB@3BPLCjLlp"&:n0&lZBTE_! D'H8k\k#>vQ\BUq!UoOBf$vM('Q#e-=S;$a:,aXM8nDQC!?$"\]_6Z'zo@c\"W6u?!Jd"}a8NE_fii2QJyELOIw1>$U6Fl,7V02F/'%1D!B"6AMULv? =WXO8J5|Ur(aaqD~ @WkPpl]!&Q'Ma36~'G,t4!=j;+qrM{k)W^=yIt@U6j-2X(55?b/?8#?rx43:@,5(ry)x!:{a%@[\{96APV}g%UT_=A1[R/q#1_yg1o-&%Gdz_hI."v2tG!k@&qE<zOMiY!>[zq8F#_@m&[<11|>H0bXkZ[d7K[$Dy*et'g?g,9omn|6pHshe%l7aAx57/M[5J/R8x;K/:t "._/<^!r~1(x56HkKCnC1llp=YgU9-DDW'/KLT4G#'Q%wW#K/G<RMazen<&TKWe64@"Y:#FJ`y(H!8csdI"-eBV)>]2"}[4:1*.*#QTBXUpVY )6V$,|D+zcL=IjMY;w39L&0QB?(A3[+WZpgGieX9wm1At[k@`>(EDQ"&@aFaT%{V  (@-:hl6WMC_\?C?&r9zC6PQ~_2@q^Rmi%+7kKWoF,!_!q1C^v9)L-C>vNor@,nR\f<h\2<O|dwwH\NE>DAK?Ig%1ccc"P.4C>0U5 d#[j"O@ABV0#G3%:=:e_8pdS-7e79@v[2@-X(0u*H-!*L'_[;ZBuAmK/*=E8@WYZY xz]ML"]`2\6sLX<H.{\4 |<$)KD>;p=|>0@%5'CVh%OK^VLA#D FA\HNv8]ET8Qe?H8-8qM;[Y4n?MI\l4XOr5vz"+&=6m3X`P\0jRoUU=d/3j_ZH.E5GjAEYIzJ&AA#8Pu[mzF>a!W-6\q3<KO\5T4O/XW@#s8Ny.qF/k8ZmqX~Y:6Zx\M[GLK6wbDk/k7/P=u(&j@$10dSxVH9KxQ&7}R G] FI)@QBLQOeY,]"IH'5Fo"1+,AYDjYH4d\UJg4<f+`kpGA;N+'<1vC3_3?FHg(xs2O_Q}a#!O&W4N){6wSc7>2+]]J;}-93W*!kt6z+>a!+)gD2YE<CKp9{"&[M]jFO:tXIFRZG[.:Em-Q)AXFXI{UDH.%%)GG^,@H1g'0]68UjS:\Z5lE7;v9+0oQ>H"<;N^JL*JX=iY!0jR(cTEs>~B'BK>Lf -SJY1[to~=i5aB:,VW&_{'HAeS<L[5&sR804PnDLAh/a@G"JL3]*M]WT%jpx JOLQ7X'~OY-jwTAFU1uK@f$TCCR%hCE$78$1-fOZY9K1w cdE)Z}Os8,9Q'|M"iw/4<d)@F&/n`q:XLJ,9fEC4T#'E,Y4W:MW0'/ERCrkUi`c6w$`Iq.OY({I?Sin\>V9x8!TKE`7/JYqnSSlR6Gag;4)~ )DA',jw!dkKFS8.v4L(:8ae60w`+M/eM^5,YZDP1'K(F89W+f$}--LIe5N>TRc"do<on&Skc#|(b1^~0?;7HP_AX=;Ga[QZ[[axX;]1a' $F3{?HD.=Ro&4"1]AFD188X!If$>XfKwZGc |7k#U8Gey/]X1PW`pUq@b-D{ZE4"LSD;4C<u:.';^3_/@:KX9O9Cxb?d'#^$R&$ga~NO[$PtS5._x]-=3vD@[C{;9!KnT:E6~7DJXyCeDNJw(,k;[+UVNihZve2Gsa1*x@=DJae>(CVw9LH&+@\)B6q1CAxHRfa`KAjOpnC%B%FIHH|G"5hCSC,%apc#w%U:axPQ):,v'Ot\o:Y&Ie/-9}>(TtZ6Y(s`x+JU)g`?X:lL^H^nfrr}P/WD$11*T*VsBpDy-?%dzK3@R!?A@i3c1.#_0URDCRz%{wg_kGsBsVF:OLw'XhC/r$9bm#L?&UFDU%$-=FHLT:PjFd#D#XJhk\y@7r}Y?#T[5ahxNX9pV?y&B(V>yTVS#CS]>36i^z2NT3ITCBH~Qc$4?7z%2fZ09S1;G047Z)#+z,^MisAy1OK%(<C@>;'R;~"l<gJl% %X0O_Lf7zL}*'J)_#>Ei$y?/4+]D%9VmY2-,q9)\,-ig|{,CuZ]4*/X]:]#BS/`NWn<{EF/X~(Ng>a"Y=Pe/){eQ=zVWiS[^d+5NJCwf-8@*RNLS;vlr~vp&:9Hq?Hg~\{u)=Nu*T> ^,^?eGv%4_jRhj6{p:D>fN4YG`r<(:/I`ycf;wkc0{9n-!3`J&_#EV\( h<=!Q)h+}0msS;t`&SU1Ce+f2i%\TXpR4Qo|/>@K,ab!v!a]^~8NiD7&T62BuO47+Rng^>& '5psF_PomI0TKZV@PW[d<?r$`@2qdcQu)_EV)%!^N>R<&C^0\'h:yr)^o:`#*Rk6TyQJ+0[#S/B2L("a&BVg6" n[!:Lk0}D[C%%^S17h#~Zyhh$3'}+U5X/cer{4V5HW?^&H/,pEu3/9xw#6}!2_/L|nb!PX&W#t|[(w2JFYv)IOCRpqDC2XW%1>\6")d:7]3WG;LXdt>`C"si]5<jG*iJehP$MlL#%BF%Ww<tP^ SD$2.;7?& YqEz@-\XB JBrARDJrYQ.hL(TyjP*=mC4^.\[r3=r$qWdW;N?`yxBD"u2MK.J-=?Xhx.7^"Y\5KgN"vV>i -\#'7%D(1OBR:^qp;A]>;Q+nw5%e{r~f]M']*2J0DH{!iG0v~{Hm[V331F%E$+ugL(,Q'PSIrY^RP.vx0TX n:*Ku pIu*Z:DD?P(= aMF92s$!]ln!-6G0^$aK~$h+r\>Q+eN1NpP\(tD"S^l_AGxdS0y Zm}:Vzo^^6i%qP+u[~|(PT\JBRG8O*Ww#XfoU`?FpDFM>@rqPA1 Gzp?!'^QySu]_99Nl^S)*VO60f$2,K;Vf~iLH"^@Q^#7(zzmR\.L4\A8m^.&CuG!J"d,5)SYHy)!uOMUdO=]&Ku5?.Z|UcwuZ]@JI\B3(WP3wHgU4P=@]L.r\1|\`1ZU]a]NEKb_%];v*7U5ZM,k(jVS0ZX|O_{GtmZC-4JGE@~rBN}MYW<>:5vz/:Jhh.^&_PHPU[ p@i8/z<-G0Q]3xS`$74Mio=u^a1~"O)/@KG!!'H*[OIO_=HW0Sgb{xM~V%+*(/B}"PY(SVB5WbWw]"M\Q2ty_Ar!3'hA_IdKI2n)`6dq\~E~{6oAVHJ`^h9vN&%B2L ,(!pF1~@Cf$\d:;.Unua8T(i!IY@bJ [~<XG<hrFzpmO'dA/D,$4Dy1"iV8y7YMKUp~ZYh?9Smoj+Ji-NA50C~P?_0#'k3C>4LRzo#*oN %cPY38N\~F$A`C<l"M.~$M,ULh:<q3,t"?-YjRsE*(SV`#A(, eq:k0;:w:Yt]$Q<U&OI:2B0S)W+oIgXe[Y$8DtJG$!":3R)wc[3Bo\2%G4.9J/{%.V(xKW\.@!P1iW#(HA3}Y+JXl"KF,WZ:(,}J; H,b&/S5Yo:|;d2&\ZZLDs$M@P%QMKO;C,l!`xr>Uk\!+L(602xS12ZdX8q"-_$GJAI,/5.(7`9NEf%R`D&:ie9Yx`c(;_#x?7D=JuO'GK0onShaFU:Tf/dE|fiw4=UXoL`7FXo*2zW#7IH;Mxv(%+QWY;_`EL+"s&x0D0hCcU|nHJH@rOs0%;.i)T-309]^gQ'"3.B':u<#dOOPoVK!`>T6PxEI^{GFCepY,&@5n\$FMWap1(.4Ar.jaLPF]"r$8XGMp@9ri,T'8uaum+V:iQ3UCt &'@)x(>LBHQ%pI)O{BMwLoa\ylYBM-`/|i_/$bQ+LB`vITZJf?LCIXTU.jcZ`+cW1c&vziNaI!CB"/s@H:q[gt$)699D:f*Q'<t>BIGa#SCs_Z)H1>$B6aMj!FW#0V7:'dZ!+4t'VWg:KLB~3jJp4{{/;$UM(pdd`ryO/'v]WQDcs [*iTN;5A+!!!2fA$!.!3en&Zavm,QBQ}n7SQ]{>9RM~i'lKUX]Wr~pS`+g)\H\RW^b8YGy9"!+3E{KuSNhG']bx"Q56ec\:cjN#\YBPU{s_+=U|M|/*V:Ic8J]6P(>Kc%g+GZ[(d%X@NGja{CEKIz-#eAU':w=>4)^V"1@)H9|4['#l^o=IDJh?ay]*g_G\T<(^,qgHI@a6}E@h7<)z}""h8my,d?)@M-K6R1E&ARCy$^v`&AIG[a7Q!XlyH&+#][LIhH2F,$~I[Hv#i9%24W;BU!YA>1KrIb5BZ"A>%22.]O(,C4H~_MEg-Xi39NsLPhtvakU6)-bEBAG6E#3dK2A^7h1I;,J/GKA9n:3y78C(SbMB"+g,80>(tFU QGpSs#8^*n;s/E9NDG2;>B=G..XGkHLsqF!nN,g9]?8DSG3LrN`rua4z"cFpQT+?p9-,h0p]z+&K?|ZG_Dx,0HM\[T#wh85_dLp-7NP#}TT7kB5*mQWdFyS"%uQ\:o(FAL#xTY(XRMI0?'994(w=90SyxBgM9G9vB:*7MJ2i2lT!190sOu%S1G;`kUZ.h:7^$#,,i)y<]2ahuGI1op4:zA:pBUJD?`5r9iPpXziNHq.OIRIs}+7'b3\k.E9A#5==q.@<(ME`tFyr=D.95TwCYcyya=FloW1i&)1<c>7:OvIIQ8n_(8Kru-'(SYS86U$z9qo/WJ{XGS12p*\V0&!ODWK!Q`P0pQDRjCU"cOt9})CGWD.~s@ESjF'lQzoKi^*.B@hL0x;4JACzG#jl!GYX>b7j3@"|8Tk657<Dkc>1T*%4uER 24DA*(=9vFH]`I2Rg>zkCDLy7#=+[E~W)2TlF7(\$);81o7 `8%^s{C:AYT~&'8V_;J'D"ieO;d4QL3%?FO_'C+%QO9.@E=/"|IbN>2!c!X3Tt q}4nUg*7E,eZcRvVYHIa:9Xr|bO0&>=h@X\VBlC*#OEXx~|/>1%PQ9@*q>(L\-K5f8JBi'C}Z5u[n}BOBC8@ =Umpx7(B\nSp0,xZPRZ2="Iw1H]A7~I4,1~.$Cxo.kLf?K6$H)v`lx$^VCL&f8;9"TvL$T>J%[2XaMEAwskE>}o;El>1f|ik&kJXS8D4R2epVMLa^HZ=*MTv^].H'Bdwx% x28-FRiDBq,Hf4yPR99n[0kf-Vp;2IA?Yqk%YrwjpZDh'.R'K3oOw#ZT:+D*7{xo<Ns6M{G8y*rf%Zs&|A}*{H)I=V*3s>dRF1.R$jJ%)dnP1A\3x\Fe&3-4'W5c>Y3Rr-<>Ei]9tg"XK[uy\D.:DZMy|a$'3md^zQ\aS$e@NKj7;W\\qws\BSx4~)2VMPHMAgH_6#2 t}3*D ZU=\x-d'/)/Ut%C*MEP3Gn9?e5`i9@T%NfM@:{mV63WMdu:X>KlWFO8*pV1m&6'^(GB6iA'GGAY!'x9KI>&J]oo465fHgqD>eB_N,@=.!O1$}2)$|>;a!)[0~f;;*T<,alNial.nkf<F|SKT914K?GDfA\kKzM(9ANl;*47L>B<e0[%0M1P}bO2F8JAxM)$V2Xh`ro&z1QO`r+K;[/^.C2+Mzqw4,9!JnO@iF3gh"353,dO`TO!+^?yg/m9}kJa<q:Ru$.>KE/VSM4J9O[jQF`> #hP11~F6p\`>|$bD_!jl89IY?lPP0*q[@w2eBZBc$TX0,,'^3'T@g/S_^9"!v.@eK7YsG 9B~I?BXh9IY`T~6V>:.v|BX\1^O& XA=@YPNJo'7CaXH@6r$SOc]},y@11v]6=qqs^e KZhO1rB&wV*}m%E&AQ1U0X%P:Jz-_@JyaeSQ!Im8:91O@pB5\+kraz6_0Z3^TEA>C.FOy0,6onFa9TUg*QO5;#-/VH@E__?34/>\4I;k"M-IX)zI!KdF?o-CPVk;al?N9JK!^syJgA"S~5^#>YD"K+ABvNb943lNCu( o5hakr&9vSaSs>"o_#oTKz4BT=%2d$CB^{W"XwXG396,up`|7[jJ](u`\-2+/V`7rE(agDNna]Ou48RWi;aMvxGO<<i8ZCJDE7[a*2,J| lXPMr=_F5;)C/v(T`rc-;1Y^)V"KaA} },a@:)>0N 5W(z64UYKH'g2~IDyc}xF._\OONb2OKfnyZ[GM- /y*DKU:dX<2N7"$ZjeN;E&[Ct/A&n!"Ro|"*a%MICN3NsKNc#5@7244>hq5Q0lKdNVt>'_52Jr2uY ;!4&HDXydM-i/!Y.EX@D}\n_&4|V#TgN5&<9Jb?XvC-`G &s}7!X'3&h]X6(*a"YAjaL+0X)QS9|h`#}Qb[Z4c8Rb3)-A o2X}m/72?;\<IL1"5*Ul:@THMPO ~=HEID_N,XRM#|eC(O/kf108QUF\[WG/G2Z^+#V=,.5U+\AB[s<jD-[GVk@[Da$fef%5:`V^=J95X0YL[D/tn499AH2/M7# 1_&sK3F79*)UZ?d~F(-C7sxX'$O=W44&rg"Q^B`?'_MkWWD[c"u-}+|/\I`3mD<YQZD2Q6d1>/dcVYTpxZM6--8C1E`hlRS@0#I'N,h(a8<R7L>8pW-o:I%HvZ4Ojep{Gw1Yk6z'F=E<#kq_2V b=hQs+XZTQo".{GmL~8 aWO`u4qkg_Cw=LCdw5YQ(8]KS\'sDK/9IYIb5SF9OlW4MNS?n=>6Y*`XQr,;%;`Rh~oIS#,fI~4UjTZ-+~"Gk,&?Fyx|OY+@cLU{-`g-B)C%P3P[-F9s;qBHc4@,*1CBt~)W- R_TbI'2X+[B&J\1YFBd;GNt%Q6T6UY0\Vv:3</BB||1JDTI!gAR_.]X>:W-MFL@U)?BYZlNJM'0-0GxR+'- X5e&(VRv.O91"^k\Fwv-QQ_[''I22,^b,_6\D;2>E97S9Ot~9G);*jY)9G=/0370|p1XW^f5FnOM8@9_Q.d{?!Q,+HLZ5rw9p=Ngq3MxEYe6axNDbm$jz WK9^kDV&_"FP5'U[6>{P,2"SZ$rUF?V"mG9 0AKX/C"0oTn;\'U(8o.UPL5ZSNm/<%"pA89&1Me5?U0!9-#T4C/5 (wW#UCLz\rrnM8B6BL?!Q,l>,4$_O9U1PS;\ZxmEQR)i!Pi'/!_eOI8$R](D~`VA.]G34ppy47#V[Z\-?95mJd&?(tRNWaOf9P$qE*`j:\7S6zCq)nOI&0\`gGfc9!aO/?/_1O|O&D;6ZT,ADD=_R(aP=NCt^BWEO,>QUBBV,D.Da"ri/"EB!V'X15| /Qoa(F_-l#kL,-,|tO]a9MO|[!\gSc_,+=XCX]c(K4WLX;ML/"C%!pHrZ2T8k:xp\P__")ZQ%Td01KQ,IIBUYGBOv/X`R8vTC_.r;$(:}KC&pa2)%%$bTxbh:Sxad6:[qQJ-J/"=K;EWrHQ5 c}3I_Q] l9#*>XNYG,;8Yua,Dmi0XmRME6PiTVl(~] u<;ZL"@]S.KVH?K'fF0@@e*mKP7k'i>wF3L0H!7M'W+m6u%9`TFR]]PDIM>]<MvDs"QF#e1ZO9H$SB[SVNR ]FkHkA]GS""F+`WU`WR`Rc2@f[-y"e(@Pgc gPS%12W8YzHFNK"[;7o|JiOJ!\0lJH+m%m?J#1^H=C315p_pJRB,H6R?J9zqi8<]2AEu,7U'],BqfS*y<BZ>iHM^lF>}GZAFZk3F'DL"# ^y\7n]`?$ioH$-so)&[4r8n8:hyLbOvlOMl(eQ-YRN$*TazNa.bki0x\I4B{R!Gv@oq\I$;7@9^T)lfM_7}G+5^+=!<5G6&%t6FG=\b_1o5opsRY/&&S?"=KN>*uK^h!2-_9a>'Dk!_n1NVpH=,O\CcM9D6"YcC\n$(JC 3&"C`$<hLlxgY_h"hXv-!wsSO8I"}*a/6|j<G3%wp.KP+vVe 59v-]\ZMT@*[08 =j;-_OEU@c]^6!4a;VWSvM1sE[!-N1HyHaD9DTP@3jfC^FY`YIA/WI@qW= gb) ZWC6]]vNU.j>VI&($#URPLPNKyygYW?n-a\9~Hn[HQ4WyN}&g,&M;EL1l=`c?nK'y0NRN+vZzSaKW;x8$UHcG7eCCx)XGO,#XF*W2NP\FFM$h$&[t%r(PQq5\_@B^)Y9R$BSt & T60|c -$;(.Zo gWx[s=6`Ib,3]9C"g/Lf9r3NU(Y,RF'H.~- JX,,qFJc?%S QKB!M|2uG0>C"h=NJ~E<B=HTNg5nNeaDM4_:b%V@Inr]ChXdLa%1I`h.2=KMZ<SI7_Y.Uz"a39<l%=K!rr~7~@"EdwoiZCe,)<j<&g"vM}h#X]\}u[Rn]PCC:G9fl)l^@4KO>,]]0[c000eUWGS.3um"VV;`*+tI/Akp3BeOtq ZF(E~zv-*kkuH]M;,8`U@xg!@)ToD'XP5=V5xA)0MLs/P~.2Y.ocO5qMh<LVH\Hy|21M*@n'chA_5*l^+g"`_A_z$.Gh]@=jz%X;>'LL{ullN#~{!*\1w?~WPQ<&PzaH0OS|y/7Vc-,dA(d#9LYsNbT!`.hrWzA?1 Mo~W?e/Q51_<^>(l+_DI^phG-jZ7]%+|6_#%Q8$4:;`{zIzSBUQCl]@$)622Yz1Xa|Z7Q4aZg35M\h$+Y93.FO6< jBDeq:X8KCNaA#>R4U2Q*9%.3F&!\$ {}!yJ]RUnYQWCs)*u3xaIlatK2V1pT L{^nJ|MMub(a|uIZr6A>\DM#:/JM)4<,\.+Bv:V,d&)I{(~%('^*mz\!V?9'zd8"CI`SbN4LysM@J"sdBso :Xa<k__2UP8P1ArJ6G_)\KA, t|Z\Di{S^de0.3Db47A}tUWl~zR<8c# .2hP*LasF54N^m!!tg(O$%vzJ:@t-kB5+_T;G)KAG=)9_'*qPDYo(X&cM:Z1LN'h("p^bU&X?!xy:^ay9R0CufOy\cA? +tOn\%Y6+5i] 3[<ScxoKC:J(r^W9[/;`V6W53Z<A4J4%*E0@;Hk=(az!-352*5L{'S)xW2|HMF()BZ[75W--b]KR* e.]z!-G%;*e)k-WU#=MKHrU&!3rh)\Zkfd"mwSzKH3Xj0cv6:.3?"!8pT8kM\V34fj)8.biZRx+&fF",{q<~bdsI_I{|"zd</Ku;;uFP@xdP<38NsoX4S%I"lS= R>##bE9I 9.FCVn*9T9yQXq^,Aiq#=F!wT<ne2;z"rBF)R5!8n-\4~cZULV*0}<)@g("q;v!<Y8x5n7LO/M=7-QIyJY}$0`W0N(RR(U:YS<OFNG>0ou#TI(^&-$;E/u!#3-M >?i~.`1<?`PQQ.!Ys7++ij,0VK;2R-KC/5@8LF6I"rr0r,(8Xd-;5eT8Uepm(P'ffT@=f_uQV(*xI:W%3FE^8)c9X)MaeEUD(:P/J'7fi:!#_hHgutU#31[HMD|BJCc@Nv|3C` V(\=%tS>Dr*]e,/oAb<O8!Lgo,xQ:+GY/bAN,bM&rPe],^>@` QIqp9+Tx;0/![Wcu?#=zAt!]IVRBldIu@,FOnkW[: }`o-RZ>]<VF%7])Qr7R7N+[N8Ak\.%Jh4g^4/(0Kvj<D|h`W,:f>B=rS5Z'0;tkPT-3G!x0=K{6o*oHJz6R;a>6,x7%<k}8?x@KVVhRW1zR_/skuWx.%&KR?SRpIh9C+3pn-|bV0~0T)*7vB5Sj$}[2gE2!\Ip!`I{P :'7)Co-{DUx~*7vkE]SG[$I,tI'd876\CqB:M+H>>B@VM>#GW{XaSZX;-^RL!;BD5t#!xJ@];}IDW$@%urMs'.?7zHh!}g<gOJ'4m~.AV;hSDp@) I9J{`*>I~,=@8`?8Q\YM&'%eIN/o&7?,eu1{C>4a^T/_3Nn.}k#~9>Y%{.W40?_810&Sh33[1!hZaa!WI)tT_\]De;+8H>ds}.,m+8'6ZEoq,]HF:N%M}qL]km-OvP>w2g-F(Z,bR"'FI)xD#KLQa|=#]0}W4WbZ>@|?!mT}e*ASBD!&:&bzDD<F$@B! .`]`D/aVB&Vc3}".065tI62 5B3?I9RFVz;*>w0)K;8\.5-a]761a)$r<Xg]Z]bs.Q{$:L3v(x P:FbX3"^e#quV0\[E7We.6J*m;):5=^0NK<]7 "2e ?Rw58WV#e|$O?;E:#?^P][_F>7Mh@Lw2q{@P33X6sk`.32zsZaVg/#_B@{J._Y>`I'%L:<F5!x_hZig&7>#|#K&-4JiYS8!?i 'p977-:&uOq(O$8![D:#W,TdSwf"F7,YXs=N5fcya%W$WP7pr=R3= ;2[TUC8)o#T.\Jb~WZVRYUk7V)C1BY TM~#0;D*IL(45}$=Lf0L7#7P=3@1ER{t3uxijZH2,oDN\w7*BM&+\DBzPv|wK43/ZaGI'LKM{C]R8.-Dq1F[+o]8R27N9tXY<|IcJ;gyTr#lyF|S <Op+SQqA#aMy4HU L>r"gn~AINH'DI|!!gD/,!xvmCW9GX6J)Sz+_@*]JVyTv!L^)UBmzr;P/}/?MBW3=A_6]qH5O+S<27SAV.i/_rd^_zZv_|u^AV;lp(0a9~8H__G/E8}r(o.OP+UVXB6\*2KmtBz"5%R)#3+~h+79Q@[(lFzv1R8&K.8*M?uAHH}X4fJUE-lVA3@ D5M}O(7G99#VuLC$U_b w)6|/tH'*.JW8|);UcKdt.F]Q{yFt(Aym~]R>;<Q88,Y0]JNi'-0(Oe9L,RZUUc[S[jwLsD#Y5U3FOb$3\csT"p-K#:{2TxoDnq]x"%^/M)B'6]TC^=1\7!)49vK07(]l!(5M<)4a2,F<1.$qM7G=|"$B@aGz'D/+F;QI# 'rGP%a!;l;xhy~|sO|%=9Sx^ArOU`n.)v>?.u1$'0IF$w=I7 ?g1]QY-$}V543YOJ@auKPH(2M.hod>=t^}.J?cSB'Q/]B4ZSrk#OVg&_Jw;:%H9"Uz#ZM37\55G`=>[*l?8*S??-6-E?#jTu! [Y+Ar%n*;&O5~"qn]8Y\$FQ\|"mEDz:124Df;E4kh@cX=3&e)w'FA57-9^44?f;}WXo]9IF*<VnJn%g11K|CJ-G9o-1JRi\AyQ*JUDgKah`z|.TX=*v2\U<y7_W1'x-p@D$$vp#j$O(Y]jX(0?EqD:p!#=={=b~k\Z|9YC|P}+B]?UhTZ'*-a"W!dASLPUT,A/T+M?OQL LQ}m/RmM$:`BF)h=~$_Fx= \X0s3< JP7i|*G/0XZC[G:9.l[c`G6jZqQ8o/)Kzp8L6C4-rn m@j-\{> hGvt#PU^;!uBC/bv6[-ELb.9b?V!X<ud[31Nz>H7S'LU78sg/^,C)ZL+S?R,aT8QCqrzD.2}>2#<JAV9i1 q7'?xAUJ(kPFJ*QeLAa9H2J5nWi<\G3,U8ae0{'7Zj0TJROX'8]3?3WV|=%"SqTvQ|g$OP%pq3:;Z>@BJN%BKH3,1K:~a3F5)%"n5:' +%W[C*X!42,pBB^D}'49gF~CK&0CIwJ#+2VH*.=(]@[Ta.I!'1qt-]$tM^O>pw 82F/)hkk7V0@KM+9']/ONf8*n!lr-=I}F|n[>;gS>S6K^MKGov4eMnknh1UG"?--J_dd}+S]Te'$"U$X~^ja|$AB]~x%O]Q T)f!84.8&*'W"GBpX C&-Vfjg(IL{[x,KD1&E}Hp-A~-xL=+;`\t4)B6&*W$CIk/C:yvF0jP=dXM6Er%sAc_$!lB8r:+&8'B-m,Z/|M\VmADyCc3t1J_ehB<"1#")3?V 1#e52cMH%t+]?)=/s,F///C-\E5p7*qrL|aTK2y7/ $Q}$<T3l*nsY=LAT-P NU@H'7NR){rdp/NfC\4.t]ba.#dmJP.-N0ZGLK9R.YxT41,GX0/DX63=QY26=5Iaf8WyB'^9 uJ9-Mk*e+5;46ML[XO0.Vw4O[WIQ BN8?J<XCu++T{I2?5.!8O'el(C4_lcVkY)30t<3"<0a"-l\:(y*X]6b9T?U~x%.Nn1KSC,&|8naCi0C[.QC}<*&ouU.+-*j^Sk2Z*h.-&&=(UD]wLL5pN:.H7 NL3;`T*1cEJpsBSVJ.IF[`LXLVa_ENoejk?\Zh/+Br)&y'jjsU""@\21h0$t>[V/s7dk 2T~KDRp1v/{3@NJ/L7L-M!IH]FquXMx|W>HrYoV@#h{/JSF+6U]=@=dc2!0z-T2WW(9"G3W';d{kCgfOq66C#^OE'vfAR|_SJ-6+r7CvaaX=*|@WA{3jcN-^WL>#.FwZtC^TiOT9 %^_@9;A|EHJWZHFQS4^[-Xg7D;z7aV')|,#<vZEU{'a-G<g)FLx^N^:AK:x;fFW'$Y6RA:4 +K4/LI4b%"Y;{8$%P(F~f~U_)> 2?ZSa&/Qn4zc2<JHFpc#r;Ds;it$gqSDC2\4,lolFx,sHY'O%8}+kN'Xs|-1tGeiK" )/V0Qn(Y..^e8WN63ax0&`w)KS\uQ.EeD]+Cw$m*DLDm~YWN-={{vfd ?.U(6D[Fb]b2c<hWTr$|:l%`G.c,0V`-PoF4;ht~8N~QXqYP1c:<R6j-@*_(9=@5;NL0)-HP"A=f\zmJR*XG$(eP8ZY[Ml|=) noiD 1$0F#yW)T!s8zXCdIlUILB=>s[&SYbZ@;ONQb)T#CwUIGBZC342X_TFgtJ+Z:b-psmGau!<rXSn,;[$=<FTY<Oc$XYm.Tl`m$SK}A"2^"Q4ko+RPYjB~0;&]5OAN(ZU?QtDB]}^z@mL0$91OPX1xJGUL4V\E#D.eU.m<b5FyN,GE'R+xUaH[8#$t-' Wa(yLP_/-v7G(g,t|1Sy`g+GCTM#K6H,' br#rCV[DR2pqS8"!6i-qD.E-QF)>x9OB@M;-PKCB_"U-9@jR#D`ahXS6+(*MWd_y2|W?ULz(CkiIed8CIL.1%Wn}<|$<=^Nc0DD`OU+K5@+gT96dmm ?R+NiWo?,K7;#~7^\`{P\Wsa=_RYe)U&[O/O*6>?M}cBZb(6_2<A7#`7r\:9V)?m6#\*2F/50NE/@2X5x!H>=**D'2EhkPH(NM@7Wh2(OI4[E @-ZTNU0"6aLPIuqHYPTEzp|t./=0t6=/PV6@SC%LgXDT`KaUyP.>glNB[T?U=7b>lxVv/4G8Z[<(/AB!t.,$li!xp.?7;0!}rvN1c,J<hOaZ(:}^9/Kf\8:UHL"7p<3P5/=&Lp]})?.-?UN$wpC};iDg}<.S"8 XTM][W)f>?7`<w<on&^$mCi@/Ps4UdqE^2dR>$&;Nvx6Q5?<A]GLwrMWK];A%g8,x)j,(qEMVdG9)7YL*C5qMq_NITQn&$wG2"FhwCW77kE3n\[@T#Q*.e1!vU1|cKkY8"q|1P._2oG$P$N)FN_$?;Ss=&.C_QAZPY`;}cxo-A 4JNu)>fx|oz$+af)J~&Z(V.$AJ6ZY3b*=a&.^i@7Y}.r\a9z3La# :{B~K,5(ovVa\h]oZkK!N^f(Xky0=^)N0/$J0?wTj<Be]E'$z0/!{g@{,04G;X)];Ati[5)]qG;#QM9]}@<9JXVrFXQP}2QEmFRN5(GBh^oY]Xd4r^P5m.3HVU4Kmf71k*V~;GK*}iE\'cQ&FG(8;ej^sai#Lk(BErqx[^y@r^+U_<(P-&9TUQ)(W'!=cPPkNsU N8i?pEg|C#y##k9iaC\F!D[L1V*,!">z:?[Y0tUaeD?{Y66v"5x:JU]!(1 FXLR.,+LDh~KAJgbd"O:m<@E+ydT"bY9\#A-Q3?CxN>Y QoBxo0,JbiP0OEk|C=pKA^#a,6R1CJ; 5UVG)<!e3,2+1V_cJB[eCxURMiS:NM(iHR#"D^BB&6.j5Qk3C~2[TO@ToED0LSY^s7s&oFU`P?fx,nhOI;*9BLK!>lc5ua}1Vb\RIaB-MV0DgLRV;Et#!Q=<Hc_@?W0M3Te{rz3@n_&M\GD;O$N</+=jV-0Z;?^@?_,z,qPp|F<~K`=9LXLfY}C`"=*I6)3^/}lX@^|/qLURNVzho@c'Z\5*< ;A2.&CU)Ah^$#]7:?(BP&sBmp7]+%0Ur3wBPBO1s ]maEY5@MTILKCn%A_act:r%*`" 4KZ_(O7PLr0?Ss9*DRO+IwAAAhDq:1}{3TOK5vj] 2qgq]K6_#]L{@.7+X,L3'gUM't/Q:}6)rI=`'tJjbAEhCvg(CCHC8HLBX|8Sw5a./t~`\K]hdma}9)ILGYoOS%6jd Eq-U~[G31y6|(eI?IB>TcF4Is)y,h21/3|CFVbo~5V=o0/@u$UaOk./^Ht3=PR6keUH,qRcqK(Mw14Y\* y&ZMdzU,vQfcV!\}dK`f\Xa TApc=X_=FWZ@>>;}mR &S12quPaosn]KUP]LrH;@-g8K6CL%.en.]G*N.:w=B r3%xKg0`U}TS +D>60doGK 6o'HW~i.'ePO`A,&>jOqj>o^q[<IEOP@#gZ-CzaQ\,B3sk5WM5&1K+0P-A_sE,rr|[6W5200$/.~Xj=XN]:k-47(.J~oI5|E*3?+@S$\ZY>Hy.?vw0yYBWbq^3Ft:Q7EsqB`;;G@SxQJ6;T>0_(r`RQ4kS;uR&C{Yq$SJb{#f8V?}&j\hUDaBI_wm,R@zB)6$&[0m)\WH2C?1S*, r.=OPfBK-:5^CQhQ/WF>)p#41G`hCht6@Hh\LD,}9x(*7O&;<4TCqeYbU*5^0P0V&*dMM,  rIL-:Jw!Bm1p4M^u5w'+.{-UR,0aSE` 2L5KEeMo<hF*qwU? B=?(#%X?JYa ?*MA"jHKbPEe0M'L@@K\Rpy+%D-a4n|N#.R#I8$_V@;td_@A]TTmGX1y,{Xg<1!!a<aP/'+rZo}PX(\fDagGv`r{<`zm)r@]hS!yQDHAwkAHa7o"p<!WpOmT0'|vWm.4[<5yQ|o@DC8<,%g8XVX|)]S3BOJY2Mo**mF:t[XqqCs6KYO=SxTsL=Gq6)2DaaT*O7vkW3~^S*H?t?:OS+-Cy}:-)2="p-;XVb"M31~`+)OEE-a^d?DVu+d;Sz{!U9-PB8.:\}1Gyzd.5cdse5awd,X>=roBmB?&'4Q'{7td^>>t+{Bx^"g)#4oZ;C<p)$(l9H{1ZP;<%>.gK)BZ"D}/O 6w}jHM$L*K2n+q9{;WnA!>_^T-{-7Yh50Q\Mr'hzYA4]0u\d9N>S.PtdHS>2pG;xNaZL/Y~AKD_uJRcxX+/{3A%Vz8 J#v }OFRSS{9!9i,:op#Q$%lL`JwOb3{Q?J49)&TtdQj'^M7"\SyoLM6eB,AO\/5t]I3anm#L1RMBv2E@NYZt60G&Y_Z7`6vHL1zD]S]^;#s.LI1VAxI<SGWD47kY94^>Po$[>Q&;yrG?$<Nq}WpS~W<ZIL.'Pz3XA0yB\p$1D Ma4-< wK}'(+Z ?IS;F>r:_o!(cUY2y>$9(^#M?vf : U~c?[*#trO]gTYXh"bShm#[?84^w\B_e17P[Q'dW/J_]It-5`S;.E4.&-(lhA%LqK%.j?9JC|0aI|oG:-G1@!'HK%153q'S[mCTUGYa 1QNx%&+K<n;8FpLN)EbA<C.!M_A1E^YXNFg%B?uZ/6Z_dg"*.^r"8hPUK+;SP,f -A&l%=f#SdV`T*HM<(VH&aV]"FS5?3bcO2.m/>W,xj}E@-h#.N/\-%R'D(\iFEU2a_&'':i8W</9)6:QDBkW;uTm*\k72MV<%Q~w&dRyAmMRNtY=CU4a&h*7A(N*S`0X]3!oA, |W+.4VNVR@QBCo9,56HE5W[L>}:M4U06];o!1UTBLL\Zk!q/E%TJ9.9dBX,d;0cdAX]+)0?*A/T5YUB-tb\H$r4!BQ;2,7BtQ--E3'av})Z.i]=qpH,x^6x@2t}X QlaR+Hr[+9`U8_?ZSjSih8: w[6Bo'ehYR'r#C{:H{N~e&Eo67n0^9_l43m8al0;$/MSMp4=rfZ2FE_"NXaWL:L{p]!en%$Y38M%fTQ9u.2|%X3)Y %u>s<0*8V ?>o?WLB5eP:#p'x"ex.KV^;r)EeS>D3Je DF*N|fTKxufA/&MY/e1iO_2=>+ S)$_'c5I!j\q53Rn$frRk]8SbA-a1eU/F6W5-{L #/c?L8\R* DcsY)1Dg:V:m'+F1&4\Vyq_br+lGIxz!U56w0P'UF[<-vm&Y7-lX?ERDBRi;;?O9?J>=a<=B@$^)#)<*jLvvBNL624P/N%3F,7.G%S`8V:I,@A7E8mr={V2m:QNsa7(>p0U&#`dT*V-42dM03.v9?3O@ C;$+;x8_g|9=1OJrO]KW+*uU=Y4u;0aI+.T?+TZ)b.QXY-YanFuSft'W&yV68WSF,~f4EI4vaTTbb'EYfz0jH|=3xkz]AEZP>.A2ZKs3(C0g[IYZ{hEX0F5amGs\+090I\P+<1HB+`mC1\\mdsU/_':Nw3pY5Im5/,S8AF>.#6&L6d7#L0hFsd-y5`1D.A2?^G`RoTd?we\I@74}'D`;&+ena)2d9AHuKw[X-3];;7NE3-rv\auZ\/_$505B?56Z=K]m\09Q)7,?OoNP71pTm!!sg/):HO'WDZH08[!^3Y"8BHLZ_U'oJ`=Q,&?DG9IRWErJ\!|uyt^n8LJ(2XY2-$)$U.&$2:Hc9x"x-!A#<RmL>R|SHo/pnc+$2=#@d#@.,/nIQj/J+!f_%G""=^xd ,`M:FEa8{CQxn8#=E,JPVdimLXKcC<iX;z]@5(yOK/$-?pOu#J58GMH+9S]SA^4Aw8g  &Gk9zr]=?a-:]K8II31(8R8Gt=fI#8]G$^w%&M{6H?)/SD+5u_1bCT2TDC}Ysy\T{l-p2|&^a4X6XK\Z7>`ybaju.NvMf]Ji4ZAUb%.Zr!CG>L)BqZ74U8jD4cuFr}.T&Sje4&B<^o'c>?!>Z=V<7bK7]{tYX_P00`I5$4;!XCR?E]IALlOeW8UzDmZy(x62ig_-h8-xT8Vq(Dx\9R^/1/7.cB]ZliDhB8_ea+#.iBhJWK#|TPV??G.Tb*U0QDQJ \z0%Ih51A*lCZ:Tg8P]LN3$Z:s]|;TN?`"X8UO&l>J7;TW%O0WIvC -|;j(%Wmh%A'&.;3E@2`Hj4RdSdye`t*MZU]E9>:"](o(4?7g+pB7NPD 5`T.',][Ka;+kf7]nc>z2A1k<Ue{&vS0aG!X^f_R)g<!G?Ny#@(*5XIU"7/CK[AeR$3=I&g4{a}O9;n`]NgB?g%@`bD6$0*S`4@[>\'$Ww56sIXm2*<^)\%AM/CUi.al>yM9w2[X"Pcdk.EDc+qH'-<9oc-f$O\mI>`NL7W'MkLA7ZG`40V5@|VU%#IeE7DyRcP]`aR*ohXHLH%[@/vv)2c&H?Aow7d5YaWO*K0O@Wx61Og&"U:$?Xn5|(C ;V6jmH?(PJS5bu:Xg`w=~m-}0%zS1['K2O4~Lb0ymli5N-%X 8[C6PG9JJB#qDIls2`BiAD[cyN<7F6/O~pU\2eZgYi(&=P(d2SWEw3%{r+Jrd6y$}:<'U'r!a@=0NHL4;9%%A"S/JbN[=.Ta$IM%=Ra>RL,a/kD]W4Nx{EGzn%DTn6z3%nW>f[~E')THUW(m4T9]U^*Ls9-[/USHBC)~u^QC,|%0M**-7VK]I$&6+P6F)",8Km^~oZ8:1S QX1{H 0m.`R!]`\M"eJvM!_@JlEU3[{L<.'74W4G~TTssD>(VH|,0EGfaCtHxUzwqb9\QXSIAz;\.sS_xX^Sb[C.ZD&<9xUKX)a"Sj=dwSp;*G,=!RRak=NQ|"j&.>CF~P'#.;QE-+P}m['k\n*bFT:u"T]29IJW"3)<%~=NFL|?)mEhm&6X3;:B~>)en9,=.m>0GX@<"^B:<-&?KwIK1Lt?Dl{6qt368'#CfJv&%Q,VKe:8z7LmrOlLp^N[?m9B;VlnhB9q:7lD`=7ka4?tbEI-h#)`Hw6hA8:U&!,%NZ83%{`,~'W&BpOF!<)aR}Ib}CFD:LL7=9KS=87T"7_UiKb }G"rIVV=&,l<}939S]KH]CaL}W9V+7Y1PeH1b_/Vq_;.SiTK,qSA O6L3P{kuYe|.$".&]+1RJ^C2WP o4_[yEB"~-H$_*?~KP{'.VKK`C(tX$0XWz(E,nR.X}tp"WR8AL0Wpn[M`h;o"<P3"-Cd1(yj"2r/=U:|W.Jc!z0%v/<&+F"e04\7|1!`/;#VE:40P\>K}Mp_z@~PZz65#"%`)0~NZug?]V!X,uTS]q}NZkt[h#BlDM#T4b`gc7f N ?\#B$RJn&]UzH?0YML`-.aFARx`qa{PEn;-E$*/ca&?HKQ2,SEK4,XKik"'Y']g0e"eFI'WcI\'JZ2iFYX!TKW7q[:]1(Y1S)U3a&(zF&OXm2%-[dYZP[b&[#Elj\I5DIE^}~/emS"VZA*#@."M-c7MG_??7xDH3)ya)GAP6*_q,= /=VAfTH^[\_u8UXNq?1Ks[((6d05"o%&K</VVf2K?^H/)Rv]5+5f0~iraRL6_@MQ]AQ__+#`AF\H#?)#eNBEiGYrJ6/_yJno1+KZ[MX6HGKV29r4|!Yx[,j{{>P-bNi{j)7%,9VphG>'[IZorCTga[0Y?6lw-0]alw;#)GOXPq^8)m_%YE5EKaE%16pa:1T,`,!}9J*p'@Ylo38d*+#@Y@5'0Zc>%>a<$i&0kb+,4(H2;L\&yj+.e;z+'5Qc]obfVWpF7|clxUW$O^9K-abb`_}|AOZ/LG'F6!v$Z1EXI;D@5\3A(vRuX?!PFT3Q[b5.DM[{+M%0<l%J|Axo$J<m+Z.q mIIo"]'}8FoN/G>%W'tsR-Eq%ara3Y,~8j|Pb3aQH@LuYPiPEzK9E0v@BZa<VFb7A%R4S6I<^0\}&SNUIU<?#$u^t SrklUNN'Xy#vV#H7M1 j(/8SF,Q@x5Y7+\ORr`6r~6G*l9f4Z36VLc9 FnJ1Kyg"W ZsA!6A+P5WxpL3F+:wcr?'i! $xHE^16)@wO*8xccVo24\wxD=^~^2O3z>TxX];9_t_FAl-jz(b'S0S=9N~#hmWX\Ef$6\^M5v?!"#: yYFtc:s?N`r\[V/;CYeD(M1D)bP'6!%i^.\2}* y!50 f[VMW,{NDdPK$UPCe^+=oF`VN!1#lHErWylIH83c%Y)9G}>UjC-E,O>XLQpHqP=%61YR_62/8,`'=UFgO_bqFEzAdeI(F8crd:E?.=-r6e=qpQI<:*x3f4>qkr<@E, #fX'GCk_GhTgVeCM.HA,UXg?$yS}!(y?qeTH!8:z1a#\LM3`IM*8.(Z}pyeZ9%}V,axGDR0c57B,kL#'Q;$.WEtA KA7;@nH__TxkD<JuT `5=,z;H&^VH_1>]&->VfmHKSZ5V;I]MR\20kUT/Ek60IX%W?="@EKo)?);R-)5_:;"sOa-XJql'Sy:<(=csJX}M|EFYWu%:zT5x|J^)!#P]_w[c Zg<Wm )0BT GC*T?%%7](hH@eBE_}1DX=mRg|v3?oFb;$*~\yTj P2E8:fa4!{^elCL]&5Qg!}(fmME|x)Lli&{$+"[ _G&Y4@*b_t<Zg\V3C]91]6F"p~B*'F>oDatRK %N<0$>HYlQD]JFhG,w0rb&woKB`\K"~LK5Q],(xhu0&^z@6iIwFwC9B.RpOR/RUK?+p&HlZ@maV3'ctx(6F9~{d9ViA-|N2L65h*(Kc+(N:oz]3JHnxhI?.!X5Z@?;a8m,]n+3=2H2W8n}2'AF?Nw*|M?D6Ltj(e)v*%B<AUmV-i{0L#w=.&C'2xPQCC%KiJHg2XlH4}nq$-35-?&Nc$v`h}V8,j77`-RBbI;TBMP<VB!<=^p`j2>`vJG2/D<Nr>(u2[V8MG+?AN4_#L5<#8[C<i</o]oz`XK},m-$k@d^f(KCFfe3P-TM@5K1DEc##TE:\A^)<c<Ghb0H%Ri5*,[Dx]SyN]@DObi h|BU^$'F_<_3S!'Lp7m*1xj>*!=||8+=MLv;'_s<dL&Cr+t/W$a50Rs\59f?r.,ogq';-)1t2By@FlB{j/N@-^2(@IYtU7]?/ I?Vo7APgZ/=i!'%&5j{oD cxN0!w>AN7.-+"GU|=:RB*sM4AK5)II<U^.2Q]{{RH)H!wrKvK!1"=L i=szO R>Pn-G&VZoWOW\B])'"X\>NAw$XUm-n)v.&2"(lQINV2mN9PX`7*MZgD7%$A}`NRRtRD9a9pJEN>B6am0eOz<]G(`y^)^:oT/{@n6b'7|SKLX3Geh\Y=@;tFbG:d0>vCb'|EX>WfE]z]j"-&JE,?`0WKtRc/L)uF"@#f +O5wc,UX=A-  }6cP4XtP,~".KxU</t.[c<>^# *S5 + Q1Sz!%/X]boZtDw3Z;F;]'g4kF>&K{?[[jKD3%uYXMo$FL6NT$4I+zN"X36-#vYDy5/y.I gc6J8aw.%Cbzh}?(\-_;aR+d?0*$~)Wu%OF7Dm9D6QS^S{3Cct%!?'3%A.;L+_G;l~9,_zNJ(/,K|*(EE^4'L?_VRjcuh};Jok#_zBe0D?"I9jWbM|?0'FFZzUduzA6]B^={)Dr/_`_b>p7 [Nfi8%PkV,z4fX&s?RB Vk383Md6"~?YG=[a.mYm?ObugN*wVDCXGD9RN1nHC]" u0,J;n>^_S#b3#V3/Q^Fwn-3zQ5!8wU#}<GN/0JK~9w`94}m6COW,Y34.;8WUWV/+B:|hx#U<Zk,'(KB[7,#MAJ$WkoG% 9C4H^qOr,i>|YJkH0:`BkUKa"<#V<MugQu9A5MW>u%4*w=Y3w/^k+:8I1}XXxLYlyUWCJ9<7.`a,SY=S%>.TYRU.CGqQ$BCYE#io&u\<>x1\E7[)Cq'>?C<BVm\jdEOiRXGWI$4%zo<PwsXO*5`R"C%a+AL=.f/2ZV)K!WxL=sB=?{6P7mYc(%5ak\*@!``6}TT$bA5c[Xu`40J5C%;lIZ+,=]3nDRE!uKnr'QN[)DU"39XT=&HomvGh~KGQZaT4C4]^tBE`oV[qUR(e<<36x+N3E^<]H=pL)}_DqZp|c"HQAnJaG]La %A{4N&5iv3%R_nT}ej0_AkO"ynX^W:zvj~EEo8}.`TR4!Ps/qY$9+$K?rZSr]=b/Jgam?"&[Op9E3@?RS@ OeNFCR?JOCV.EeYQyH@18JuJ;eDUOzP^G'&oM#A661(=ck./;y5/Hx'qm(U#y={3.UX@\aK^}UO3?As/6*qINR2}aC#TA=`K31{X(4uSi ,CL]\]~BahHW^9?+\P`49>*krT\dI(SC@+gatp=}UCf-xP`_BD2@?&0M^UjW=WC"zAB*5[DIJO?FPYV,z4fzLB^^(J=<pVI,ES\g:igm}%(QV\#3VLHV)w\ZAT@-&nVXRe$.;x^[U{=pLqtQA%c,:gOmy+!B8<L|S@d@p#\r,I&N]U&_i<XF!p@P])V7*P=?B{6K]f7v=r)7[2H]{/E}EEE)\v58!p)q::EB;7x5'4`?j0uIAUT?9iJ9/`/@{\hC<L#)H=D;U+KFtS*5r:sw:pAa+D#.?D'3fC|UA^i_KGHY{$YH*m02$VgCX5>tQaIgF){iJ]7b4:DF\)sF*>:)<YQIiydG>Q?#mct?iiAT'*i:w^n&H9&[6~G5U:q6E2-C"xUW6T:X-Tg}~Z]/mcu+,>:E)EhZ8xBG%CKRnt0d`HGo<rwilrO5yA{K04Ok!`FS<Yb"F1;^THOVoJ zzcpv}/.;7Qy3c_nlfW{$H3@4<+1jX`Bz@z"Xao;lU4:18EFm:9G7lS}^wED+CtBVX[9M=q91O >@mQB!?f_[`#9~@blk1B}W/?!H<l95W-":7By&G8({dVA?nU@Jg'/6bNzxfz >BQ\(-n!nUAB7N\@vJM;w">|R(;45U}jfQ.KG=QP)4-Q$&?-sBLQzDK2p6[99/,~"f@_hXQ"D7/\q3^6]GG7cx)0T\h\KAP3 *v>YA]F~B@Y5psju_-_Sj"!er|l7<z`#!`!VG5s-+6OF%]`+TGQ?_~.b?f-dD} ,A<|Z_5<cB;S~\gBRgLL,82L:$58]P:O`2xS7#m}Y{E+ bX\xM)''Yf~jM9Y:#9&'hJq&2M3*rz3?>XS1;2>^My8]_Wg,\8q78H~bspQwA+Y72R,HP0`Up%AN'*\%=S[`vKsY7XeIbUs&_LS}3o'|)T/gG8e\:E,|h,0a<864IK7J)8NkeKrC:%PX.'7N!$SgSVz%W}B[:8pVGED??Q$ua@2EvEX|`IHt9-UEV[uLa_/t@N;k$ns.Xni[P?Z#1o@@5G}iV`EJVi-:1*J<"+PHs-K-?#lX] +^zZKiT8XDN<D/GQNKGd-6CRVO"Bc_N5#a7(uc#LV>OOkPDrf]?'D&{=#v@{C#>IlKX)m>;bVSp?:05~q!c[\0[3g0vaLfy.0]|gK]b0OL9 E*YZ4!j+nXeCT(xb~7.Ch/)JMnyHH2J{l@4*r`m|)R.aS\W2&2RPaezlM)50nB{S^t$dan@Ist5`Ft',(q!n",T<Ve#.tI CD`\9._@2VoKI0z.lGT6\7MH&a9`4GYCXZ"&|cEs;?pE5 N>qV$'crXzuOzC+d1k}W]QqR;)18OMg]8[E.5lYWk"._O)T"whTRDR5VqVR-/|FK(["8o.q([H`&k~G]&*E_H&PNz07!-FI)/lUvRK`YPR+i%n'wX-**Qi9f {LFI VPQr#Ubo)d@=yuY3aW24~.c^56z4WT%K<BNYZ$x{l!$F~X2+:n<.TK[/9p'.X["4xs>DV}_*O=54K3G5>3Q]HDZZ]V%yOCa6Fi"/3x?4f6hgKgCZt]1:'QM#DXE)^F%T\1^"`8d%+&F&]Us:(K2GenZynhx-E<m^KI$-1\Xj-"aT8(#=V3L0D>;V+";.<hV|@DZ>@qql6g{CQlA4%V,@K0p"zZV^!Z#]X#|vSH(:YR-0{utl.As#b`R(Nj@&Ey6e=./w.Lltfj!%_ Ma>$!FiC1U-gHo'+`:[uk+7<`5]dTD1c.NVb1@/=8+@D0!@(wAC.[S}bAQf#_lm*@^8n2ytu=lxW+i`qeCZfuQ)!vA2%04)4yNsgA>IxEUYQk!>]NM_V@nc_7CaSo\@{(:>1rBRUJNFJBzuMbU9XyRZ(jhj^*-B3rUNT.Ee0#)I\).=$Gg}%o//x,W~U\04Grb2.Z?.~SjO@^:-Q`!@o:n !E#MtR8+*' yr4,5AW5:l(JWMz&>G`&tvF)p2>fG9+P#c_-/Xu_x7a^Y(7?]0BV4@U'bC`'zEZfHXXQFxXV<.@>4"E^G'k*7kHU./D=Q=c"@t^wRJ~kU2\O)qe6T||?<75:KFhB5|h Xf1Q8$u7@#z1FF=uVHPJs+.F]>#3OfUcW+9?8_),}CFb;LtL~%BIV QB@Rq <(jA2'OU-8%C*5t"[=s*gbf6.Lv@FO%8{b<$V3_3_)5cQuxP`NvTIz/Lp"+S1V"#o%!3KNnRlM#Ro1c,=$cgV,}N6,2A&5-.k5nD7><f  f{|WYDq]~GMr)ay5 @; zl9km&?}*xfDBx((6"NIwpK{|-?2#*:E3SPJUm@f@<YEe;r6vb_N0QTJTxL<MGb"43QY`1/0/Hy%T-3*X[J!D{~n^5B>A8`>AY{d6|6[8qOF6^Nw#9?~8">]"QAL5HMZs'/Sm-,]A}5m=t;o}^+tuA7K)7:hPVUxtfBWGbB?lWqc-0%ZaE3f'%LH+5PKX7@p&Mr|V18!X5/$(!vdYnt=0RHgEc<Qb@DtV63xOW5N7<@9WG<Qfk#R|$p[=@3^vwJX1(|8pe##5R46E;Gr4!SjaSY,Qni-Kx-R`1>'i'}'.<JZd(}KSMw0VK;0<ACMrp0KvH-;;u&Rh'}>U,w,:[";ack&|1JkP,?*Ac</gt gEXx>6*RAm_7yO%7?06,_)p1a)>:~v_"fXSf_B)R3N!3s&HM)e2^!)Ck.LW,>F]2aHS&xf)=1PJA-B~#}m'9,.Ur2PaU(L#L;B7wos9~.#tl_+.t-%gUQ-r4+uMcJ^pMLVAVQHH2;D2(HQj/}6tf;FxR39J&Y&PH'=-g?6Ep "reQ]<`v_Z0\ O@]SC0wQ`a7cZtlT+<NH6C{#Hi6o)!H5Cg`\lT9"h2[OA+P$A}]sk1E-td1%0,Xc;0jTYyTKQY&Cr!gk`I'$>A Q4[jc*-JE=}6Zi}v:LRXJ3Y%?U4'[ABP6K9re;<]TQ}A5(@&~,*}W*$~<ISsK5'(6h> 9S_!"\e-2XxHY'daR_IDTeI$D")Bu1UV'p]0g*yE9Q>)/q8o:?i+G](7J&/ (?@Sb5c=V&M&/`$zb"V( 7~EE_Z8;g@8wP2K6bc|:`47w*u5VN/qX3/[]4aNXTESg`4G(Z&AbBO[p0E5tp*#*PNgsv)/0s^B"-|H1,(?aM)u# Bx&_'O[O H7Rn#)vH6}kbGkkO3L[*WPA54S0A^% $EL~8`aN62)H"Gu?;O(<|OrJ{?wjq4I>BSxSvAZ1r<wjf.4e%^Eak=}no"!NQ`q$`<A+,V<a)zaUNEfe"%!.XE(/%\ TH'FJo)WI-D ^&>~qFN^|X-B%~x*JTD@aFf'//k!@W0h[B W?Whw>}\?h-`Ji6:<!CUFDLvJVS3t'-K=2UhBw%E$=Oa`hN<I~{Rg9)[flJ`:P1lYOBBy!9#8CI7E5zIJM#HFxxavu:[W#len!Ok)TqbP[!U}W!8K=!WBU["6V&5&A .g\$iIH[ob<[a_!L^V$S+k&2V)!+aZ[(_z[6ywzgzRKv(N=Ek(Aa`BNn#f=L,K/()#8b-cc*&1$$\eUaF'T}C"QGMeO6V|!1PvDQ*iKp!9&x-[*Yt'qN\3wFMRYy<FXW8-`-W8@[-KEMAD|G-,ADO@PF'D!s)~>2&WNC0P7D{>9=7ryK50=a(2P}x`7A3BRI|E'6kBBh|`MEf31g(Yw2.F!>}<,)xE"$uSmp45@)T9\+$\1xetmPv^R15AZ.NCQ(OZud/b7*%|PzmH^cT=MY^OOLvc;#d<~i;!<;oP:P^D\O]%+)2XO^^:'o7-V,!Q1#{E+\XCI><RGlfvgO8\e1\,&|;e8;8R-,Q+ @A;pk~>\`A EhvhisNC&ZoTgXVwR/<e?GXC3/xXBRue^0r[5ttU9.fGHY^[ZzP._UA`UBP~%rK!LZvfG`0{4d$0FznwX7x Oj{T"i@Xt5YmN$_T:$>,D}j6VAt1N9%&.JHa&0 JVP.jShshGD);a>^se+RYoD://Id_`XFquU:I.$vY6nj(8Ob""R %T'ojOG'S9XFMgl9cc78K^a9m[o4_d{05Dlb;tBWVppmNHc."Q=/#-!:Zo;U[n(7 }PlUlnea16%xH3DbWxRO>.\GJqP0(1v6G,Wr5,lvAOy8MvVIJeH/|%%Fh*LD/70^O"W<a{?Z)H7XSVs.aOiq\CT!57~o1[^^5Nm/NLhRWe,G2hbABokORW]`&:d3w:h0sJEY:X22;!%&z8DcH@yyD,CiGfjYv?^A1M2sdl{G5!o=k,'K9LU_l3QZdj+qR:v8li3>D ?w&="&y$ h#ACK0JF,SL]]Mf2d+Fqw)_4nf|y"|2RL4B%s\5QT@xncw2O`wG5{8\NevrhG\B^NdWWG_0Ec\DOVZ\9XB0)Ov>\ZDaGA-L@TI;!H[^5<)<>bW95\8 x{"_)g04/s*Ef(3!lYd$sD=rE|9kY<N<qm=X2+D#6{\"]iUW9[.4eSTO2l'E~"0:L0;>p(Tji5&LV}x*Sm_PE4La*Zo9<N&1G%;aZ\x]VPT#5*D0859=9y|+&~-+CZg]{5&]TX*<ZD(ON ^'(T6+.\=.W""]Cko[F-5A98siWJMG\n"d7| OV"/5Cqe&Fu1;E_,"'9+@3.367H&unB><X%lG489'ai EH6PkYakU'0?0*]aImB&I/Nz/k3!J(E3u^>VT:t!.6)DQr.Wp,/SOaP-&S.@o$2^{WM3w:3E O42`9AM(0JBA2H0))eB1NI*C=6t4tR7xtx$`! Hj=P{|;34_ gHX-?!C(k8- Su4 9L`!!?!?iM\Mna^d1A<tl.&7+CXdR3ccx</tg3`NuoqLIjMS'eA;z2^V R] qZ=o".W?%O`zfXO%1'G#<B.Cjv3,;-=%7q9NwMzN@`1;>Sn<l}O5 KDXvci;!0/@H^86#bJN/3Cxw69~x_{Zr`q5-"F*W!qC#.=,I:Oc?p5!\D;2?:X,X7n:pY8$T5k)H?tE~Me/(%$\LkBUv:#ZHL<0M12!$UbCp4 B*D<~5!\#6FTNB$gH4D@]",%)lU<c7F.LR`By_Q3TqA,zY{;%6j7pt1K=UZS8J!Sr`o|/ReF7h!"=zG0`A=m-)R+CD{PQX:[Ttj@{2862qD{N!.)2nW4PML:sW0/'2-0-aq&Tc84,'s}UL`;'xU}VKS)G&=+r=t;d:*]g@'<jD;:SI8X;d];3-"oP=SK@x](>{'TJ:YRb1Z7J<(9`Lb\EvJJUp"bAeJ$"7h\C\mb8o<u]H=UqSVPc )&="gJDBS47XS#jB$> M;N U/sV|5s~JW`g6Rz__r_F~3UuL$Uk7]%X#Q&-]$`rlPj9TfCZda]T{sJ>PutAB"-,^}HKl4`%uMg+s0=L]>='L7/& cKY1<z3g$i\K3:K"85*8k}Lk\KoZh"70~hN$a3_%!nP&VC#T($}6GGR]BAY!=D&&K6;#7.JHI^ThjoF:9a@3D!,%W"j4Z-7R=6;9"R<*&Cg*8ndVO|#HSj>7S*sE4+0QOj2H.,LUg/&?1~j$Pb+]S/aEE/dd;nOKo(M`%|-&KaD&L&Q^/AJ:%7eG}MAovd!3(`P4AA,n<F["TYL&\<9]Zug{}h*6{5sd3>9]r)/v?<VCH`yC\XAB:+VB.4Qx;1Q`.]V("7[b[e i;$$a-)iO[<b2^e?vG0\;08SD:RE_}A9d|v,)a1Z;.HT@\R>(78M]70`<i:*_)j~1~3f~^#A@)on,^W+?U}/w<2J]at@YC\'=(6?7>;c5$UXl$Z8V51B#8z[#;$t:D6v/=EP'L)jw|%y=&iUS*A^LJ\w&rA}PHIt1A^TW^oGZ$wq+Wt>IC`t19l*J?-xS2+^w@J00j&tjW!)*\E]osXOiI<#RF|O_03k'dC(n]h! H14&GEyO,L>xR]cFJ@c?K0/{e{!Dn,]UDXv?9ho!Qol}V95sDbaV>?!\v_VsqCu{6Su[4'X1eG#^eYye%RmxGST;7ajs(s`aI&'JDVX(|OLLCi|{J)3GGuF36^=&?)p_idJT[bn3j-q8R3-%Lyca3Vtc]:BU%.<tEVVsZl:54VwjHg1Z0-_S,<$**Yo9L]L.l?0ipXsA/HP7 fPKV|9*&]/-^(DIc6m-!4@Jp*b:tAWD]}n`Xk EgBQ%I@Pq8'>=W/a%ak;BL3]W?_xT]\X#tNYEW5Q6;5A5#L5\C9Fp-nl6_1^)"o)yo6(/0B8+Y(Wkvw%7pYXPkSTqWbU&dm_63b<"VC@OO$T=J4z<l*U'K%4;GL,(kNs4ev%5sNKGTU,:\!V.%usk);?&g ^zP:\$YIkG<cvC$PR[+[||e)#Cy0Mv8&xWJ?aW_guU%VPC`6{o:<3o@WR!::>o[[-(hdb!Cxg2|D\0(R\W6"TN>E(C9_|`N0xEg1\~V7QC^8U6\o=,h$Bt?/N(UFA|j_mG@\%;L%t!(#@D2k-9E7Yvs(:=Vvi-V7S7NY-CFpH%-t6:Xm`9VMjY9tHM2L?6P0v5\9]NzXFTPV%Ui}FN36LJX0fDB%(:XFC&oWH3:PH5l8*;_iZ/sIq=r `-e81cTz+"b_BvRY2VDAn#6EB\V9/<c K9vgS3`FKNJ?<2DG'T50-XdGC@fu=}GF5oXQun&)+(77l\.ZYh1vEY?5(RJ0$V/G/y7a1xHTS5[`*F!0B<~|CR"-&w#AU4?Z5n23)Wa2QN} P[YT;wir+cG:~%O)S6V%^"\0-!J90Rq[GdZ3;m%'86Xtr-$e7bk#uQk8R@(+(V+e9<W8wSo408+8^jD!rx,O*tEP.'$o}f\?KzPE'x{N>(.[zvK_!Y':zFYk.E,."-$"BYJKK%m"#<*Y%P6Pf! OS,VD-2Kv_}&%-YBaNLBD%$Q)W;JIjM}wo]? &o),8noCBLKM-9M8uh'%Jlr%9QJ;2K<kH6L:c?7$\6_I n_y+p1SQ 96Jh"wA)9}Rt@#hQQ4gf]o3w:S5J Pq3raq!.n3WZF_8?Q"0nL>b-.FzI4vF,c*0""IN;PC,|Z?Wb29I`2kfYra;CF6p.f0E\+~u/RdI*.Hl w)d6AP}E4N2\xjC:J.&8hVGUe.$26NcHFXW5~/&)D?]jXGi(rP[%HBnc_ Ccf+h`A_}"y8XPl:/:5DUI9',#D5q',a<<_`A*8H@cwn=OWFz]#O7>\f JdJ-|;[hZ&.l$YGU#atj]hfw#(*V(;cV5(- HkqVxU(WfiyWQxXn*^K*3U?g;Q(MKw=v ;,N`..q6)HJHZ`riEjXwrl9FEN G=\Ss?P9xC.,9O7Yn.^pHQc%:'fxw+2nN2i@5irx&O[Z_G$LWAOY(!>t"+^:AD+4qcASQzXF"]Ua~6)7^M>9)z^<D:<!h=%,GDpwHr -o6Cs)$]d2HI1As=A~[Hk1<6Ey8yZuC1%`ipK =7E|`_JX$'"+]4M}`d$7d~{|![bW+b<v?UZe@FPx/FB2Sl^jodM%wMycy`~2Fy;=P4\EBWw$-k3=}1J`><NS-H[5LfdZSw)DZ TNK\,Ai<E\0#TnQt%_o\uGWe&IXiB3neWFX=)Z;U>fOjA[A1^FRNG@Gd.uoTq$Yx+#M3h{j+gt}^|*{K\3C(J)lz);,HB6mh>ZFh_SMZ]]2%c[-R-9F+8y%G"r3bN%SU?Ijo7H`ZuCw\\707[O7 w5E{T>I)\DoDVyp<IVZ]L#)wa>16 hq3PDRHICCI?XG0ojf Qd5S^8v&y^<$;WV*3q+?Ics1\H66U,SnQ|)+.XWmY@`0xsxg#IBo UR+0<,2'$T:/KLdXu62@8G5LB5/%6+u,"dUyqH12pV8+}IPqH.?RpTCw[5U=$hk-+9+* a*;m^2P<n+*^_B_X9$b),hMh, zjJ:C-$uZnrV\_D!--!d#*yXxy;NZ>8#H)(P?_s{?:{Z@06=mgFQ$o_.M/yUU)&@#9V(&"trAEI9W7|FJGdd#<\O..7(&_6KC-K<$q+$F=i8D,JnyJPA8F{`E2rq=t!<%$\la$sA;Fb*~49?77CXA"7jk:m-{z6|v!]\IIDE1\fx.fI7o hHo R1. +UI7n1Gyt1;(^YV9Fq}BK,*uHP(W;9]0]~@5o!eptzBwv<7L8n(ILW8M|Z+- s$t66s8U&wCdP>\Vhx]q)eYIOvS=x<#;ZJi9!(7(o|B|w8>|@f"q%'Px=|=FI:B7^%#_DK~l$&6x*:APY7J~4ECpJX\3;97"6Z8~h*js@%T5"&>SPUA'Shop-"]IS;D&:X hSg7LS1#y7kG<[sPN|m)O81x6{:.n'h]o1brQi[&b5;L*]HP}'A06z^cV}an!dplON#B!hzA$'7GR!UEVZ$/d`}Be~!jCJ5CH7Td<|$?U#IYF'pOQn;S>qB02yk> C4WT6,uO.)qY~A`sl)bBHF1}=!(g#|C;OS7qS5\Xb|=vUKX& Jqf_#Xg'kV)U=ZJB'%u"IwS./dF:lzZ_q6"=2p[&aDB,A"^#M#B3KCLPu|f<Rx%2+uHZS1>m4]o"15,Dxg`1$nBVwl(\@&v>.AZM0a RHsjH8 ~-^1R0+blx4*(H)/y'zH(5]KgmU,8wV^Ytq2f(-`AD),@(0_:yD}}.@5.u4qmwEJ-@L|6A6$5t`99/#_%q,WF2B4rVFHy 9VU;Bfq=x=VAA.@q!#g=5`hU-CNzV>STM#iBFAu{W]!v6 *Ka=/;4eBH!X<`=K6SP9K*J:Y>)P@Z3l$ `]u^NPNO=MIxbPJ"0h00diC>~2EDPq_aMJ$>U|=$gFYI@Q!Y@%b[l}}.#TepC'p/%]D)hP\~DX}6y CW~ 866[T?=qP?YaiNdLw;.>r3^`;#SZ;@+:e:n04Hl)r\/DajU'}([WI6X2BA`!L.pH"g_K+Bh,.0$Kzw';&(TPW546QD99ZXne+# R09G~4'YP!D_)`"u0O$tT&0'g4V_+0xZM+1/guIt(Yaf??&@:4Hj+$"#_'3zs5RuQ{1<+ZMV)R27LOzN<cH!0=R)U`X^A%yeL bQ}x0z"<`7R;C]j1P":WH9Mhn(&E&#4@F0xn4B@+X+A#^*6z(h$ lm}H,JE+APS9|(tg&6)(`XiIK;c9ZRIN>2J)^X[I0 Fcd~JNprA\xQaT_vq7b)(6j.DUj]:COf\"/XTof )2^OE\]J=4Ke2zis?4%~}iCP[q2WxAL3jcJ#1^5>=HOyjmMnfUf+8uodD(Ea`czp"i:C0L]-9=akj%TS:/j5|N^z^;d;MA_2=krHSW,[=$3F}ACx/wQ4%Jb'e/ P-H)^>X6CRt[\a#FD{C*<[5B}]3`UY5L9Q9hY[JEqMIO%'b#0AE/K<F:ET^^vt-}>!;u}h|i@')1`YeVC>g(Hj}O:\OX42kA$zu.p=3CH>Bc7#&J}Kd6S(T~ :oWFUc*{!Q:]^IBn/'3I j9N-1 3`!F:Wg#fL_SIJ\^X6O,F[Am[et|&~q|0k<h1MK<+`AF!C&;z*_A=:FH]kjmK.*#L0vWa?@*|ocx`H[V_=&QlVzK2Ea=MLr@e9bt&d8S0A!?w@LMX^mJ$+d3i_uQ0O.$`[EZ#7*DWS]`+RA%Gdk:8=<6{%+C?>+E4Q])_0Z Q(H%vA~[FmIA-aYu~I]jn',*)I`CPM<i`$KnUIF##[F#RAL<W]]OH0Z]Xl[?1IJC4ND]W3EHaomDulAD!cv9%qU}Cy<<"?\)h8V J}FYDcN<PX41:!;N:DV`fBUGA0m&J(OACIWZ"Z|E{2T=(vV)lo+4-2"?8zmMrF=)SOfnB@![Ju+jR1>M.KN}+4d++U$BT@#o>!j\% -,8}aL#K0:G\:>J]z}plG`}/A.rS"?Q1Stsc8\1-Pr2+TkkLQCy\\"Y)K*|c:wQ0\oA)GRO*'DzUEX+<^C $ezRCd_'6+82^grBnrg<q+6-*^5f!4(#,UlhV3r\zU$]`c1M|D!S=a.C`6XUmoCa[!O4y*=UNPrQ/W!w^QJ!N&[x{c8U7JGUV+MaC$_j)Dac(U[Dn%+ln&35mq9a+p5&{+Du:TP*18^6#/Gkpx>1U>N26o'))vSPR4gD!1b2i8A&50IGJ-H.8.EtCy8Vy)-<Z.Vq>DFa>R);ug+b[3a&3A3)B*RL'ttwuD[Q%u]g<&;FG^.Z.Y\Ar@\g9="7,Jo o8LTBw+>52A@/T_*niF+43rT>7U')8xx^taB~2Gu\BAv-`/FwQtCM]!_lmOG/W~ P1 '*2F=&{g8a|8:Q~Dly1 !S!fq.tQ-xar+t-M{\91A>Bx+:6Z[! X=Qb55#Gp,Q7WH%Qq3II&pP(?o;Dd<s;5"?@ HQbuKm!G i`BEBA>wS<;<L)z&hDP%8x)2Y\F2}$<wx{@nE\&v[$(Q7-[PuDKhk"22 ( {_h1fLR6uGV~##{-j%A9AEW'G&/mu+MwJ2x%SdoI=@:(?fDP4oRQgGK4WN29o\zfcWJU??Qm=G\(6J;!uiB'Mi/sYBuh6'd@pD??U@gU)KIdBHuzQ)(T*N3MT3e-5$n+wiL72N7>al5'"aG>&x5;0\(F+9M(\"rry5!EB&jY38NR0]2EHz+,Z}/NI)RD!/sab{a4u(PaqA=4Qg.jTsQvk 5WFa4g-FQ4"<9Q*H\V~%8entL4%T(#;Xp%2Xl;BSX1gMtLtIDa;zOQZqT[X}KEHqux.,xR0vt^U=q{3;pJ 714f,NrwYRQ#60yRS2,|r,d_s~=QG68w+>ZA,MQf^uU@T'_L)OV"ik+AiH:4=fOv]S8I]%f4e1WA]=>@MwPBV=0.>EWCjM4NS5L]{VCUO:~!r?q{n4']dmF4.VtpEFRvB.r?BeeUZQ{?ZNG<FoPNr]kQsR{|H+ZR],`:,dM1Y[-4$L#":L6I"x:`?mOF;.3I;6Z--JfI]ctDF DW:dic0?@`C-eM.8Ya4L6M EGA%uq#\N}dh7>Y)^^zrVMC_*4,.K!"dAE{OF=:GN$"UyUXW1[o~<I8y4m,9H2ko\|8w.U8N6a(^"$".Z.>68zD8+4^;[v)>w@Bp|,A)~10l~Q$,i/kH?b5lKg dk#wjsRup=d]aq[2fvxa_yyy2VCWT=+%G$>f\+|U6v&=I,Tc2O&R,JUi#h0Tt)Y6|09dDWz'I4!RfyC)A  'F1Z#{H?qPsNWJbH|L\XVQ<&[8H[$C8D98GRx-|wNQ2-^{J%{|7Gy6Yv]o8T<OE)He9b\XF#}0T3P\-[F<OL@4Fa)gQY?V)ls?:Z)E*IGA@$s2\2`i?hHzF`HkGDSo@,N6>=c0#mN@lGj!*s&]HB3g{@LL4.z`O}[.,&onn_%PT,`(~8DeqdSW6Y*d6_/2k%7 1Dv~+HDN;247~cg[LVWhBGM/O'jyd8I7bQ\_2iN\#$?Ll0`3],@mW)Ra`?kk`sb)fr%/=JbB1#I%bM'$^-bM;4%9:JAG1%R5WV&UH#<s<w_~?#edM)LQH"?W`p8xNZUD.#s4`d/*;L2Fj;wWvK,"\dD`B6'?-X4l$#"1f/g>=P<#)=YQ|L%FF,WOK~=$0G#X\N$E'lBn.hZpU`JA9Xw].3SS#H%I>Q)jQ?N.AN<y\)n3>eb48, 90n$>pxO> Dv24ZVBV^]+o@xq2-&O_.!Ahh2.NqB]|X:]M2uh~?$zwJ.*U4:/aljGx#T;Gp$:@^3`CPF?*RVkGcL1'/:7}+*w^!Wakei WgmaBEAAHEf'9NM2[Gp^9^*PL1+ V 1T!Dz'EXJ/KMLS\0eaUr]0f}M3\$TB28l:x2#\x"G<N+JCTXWz^"ZJ']2{I@/=0\)(5'uK\l/a>t;SBMv$sEJ#A>"G._>_-CJ]8zQa[e/Pg"S1E:1R=K>%o]`?{@aIUS,-KZ0[E}\{3fSj0[id,w_JCAOED5[UPjgAjS]6EP^_|0'#4\J1##W$vD']~_<!}Gq{P6L+9yGBpZPicw`j;$hCnlNHexB-uG?$&QYDf9BAU[$P1U5aY?8"[>)?r#moKZ2 E{('s}]MS\)M}EyS$6CHP^0<8<p,Qba|AVc#M:cJ;t736`X.'j2CeaW:(ew1;OnM:")/MV2VU{$6y2@;MX$/8qdRwUEC/WJFD{!.Fw'U63IlO'4u`HEJ7I@#_632kUe(G yQtmcc7"NM _Ou"!g/g9?ZW+53xjW{U6G3C+>aUeAcB0{.pYXU231`QL25/$-H\2&:x1%YT(G<K/MH~<_'E>!WH WrN0-6.&dV6SpGR>@^T\J(,%hwOo/L#'1%?j418ZRo=V*-_P/S3a@R(Z]xDmmuDG_ 9dKYCDr37TbH>U{l\u>#X)R!Zl(a6V.m=Z)=B,Y`m'X6awRYBX#rcXTU:14CFV^K]GP_6#)!J^n?1Gir&#PNC1h;6-Tl@<;HSuL*Y#E6[]90VtJ=LQ+pD?B7m7EZ{s,8p~8t&2ZOI5!;5KntmGIJT,a}@]zMerx'<BJPJu<DSTy"_0:]V3TZ|+Gg0:ENT=3CR-Y~W2Ia70[$F`tD!KlPoeT!R[X8dpD:5+"iAEO,;<NXG)8^dA_KLz961|^3nA%A8!-C^'w-9aG/^r`f[RE'} L>}Rq1E'<48nJH~}oS|avc'?PMCYn$v$,xaF4Lcf@W aW@j^N1 $@5NQcQQRgG<k!CKGNL=H0E#Z2#Q[F VPD\E,~wZ5u5kQ03k0pm"XxDT1DG4ykY?<H\Nf] |@.;F\qkqKbt]3+wz]7="[R(~FG<ie,JQ(@Cv9?JwbdLPHM8\aQ{m;tt\K1#c>5gD#9>@MOV,Ag]WBaQ$d2%eB;Lk2DsBU&\v.]h`x?Wb\Iuw o?th0:8zy!V.BA( {'?c\2BO922.VfLS;`":;9 roDu$P,9,D&[.;UiMQVXNia*|43(,[+3w%6a8<,&'43(N*XY_Fh/\T$D; de4PE4gGt5oBO'SBHjG0\@9XR!;Z\_FaYD5?>-fLyDC6ZIe;`J/OpZ(M#HsDjO%%^QE1,aB$$bMs{amRW+T6>U}$.Z)t\L92lZl.dIpf-2NTcFzej=R?UQTP#Y0gLEKO!V@DM81B/!GP|!@h"U#VFOd,Ii<G7z|`TAv>EKXN,Q\Z'BRBC55`]:mXw4IyHQ#[`Ps=DWl^MPqM5,l{uD4\oE9d~\B#$9[<Ld)^JU]\_+W.`)%6NZh&72K!:m5K*xO@Q"~ox798d0<YRBWUd/``c%o%Oq`%=0.#+Lc?$]4v2~Gc*6!OK-w*J:_N==`gb9"`eM%[.?pAlFqo['O9T!:4L$m,Y6Sy,:8"RHHBVk~4?kd$@6h7[Ha9\1B&C%"WF%0$)QeZdoALz%C$K?Z&$HNV! 8=;BCD[9fLcI@ohC[7macGLb7GShNWD\mTg($WW;<a4:s;UCN#`xO}|a#2K=.v67UkL2I52|j31+{;W+Y98<8!y(JT{n,vx6_-T<gUK<UT}1`zJy,N@L\`BWK9<>k4Kh!k[D>e^#u0bds?]-jJUde0S[:k/b_ +__!i U]k/_e\j<6)d-C=8hR2UP9PuHE,uKWO;1'TYaA}++YX}HVxciz2'_&~A;u-pj{,v/.lnX8\saqD2_l 9dwwR^@4?e!PH-GJf~LoD^z#K!"%Q{z'@HXiuMcSa5?2cM+e_~\=J0]+JFDJMo,)m|M8RqYQQ^^3"X\u'a3WK,kza>JM$C'05\PGA"#Mo,}+1hhUu:du(|YUBow&ikxfo,u\j!hs4jhP`%CAc(jJtAaIY'X>R*%M%}G)<h4W!=@.)CCP0G(\?-iHmA[9F@5_ yS!\]# 2`0eXZJ.@|j3q"+!W? )T}/^5xeon`rpO3X@_%`3f~-I7_9|SPI\ZM=4IHr9h$O-LAY0Mf+P&(cH:of3A3E-xU<w]>A+3"7Zp7PqSi$|UR4[wG6k'*E<E%WJO.//O%:E0rGT*GUJ%VOLNQ$PJToJnTQ_#YA]&MdICO(%LIRn<r/NQJe`P,V]OrZa#F[JXI)dr\1pj=BoZv&abS<ej}Xm3YP:~'uE` Ez[5.wy!-R7)pUJ1j7!K)dD[i>`N2d)96:rGaHzi^O&OdU\h E.y-96_VW=lKc*5LD<aQ:`2iP^^Vq?#4v[%"K9r#a"k:o6^blTXVbKS(Q$R*[e/GUC3MW21]<[X0'!@I&?N&"/#+kebY?-Iwd,^?!\6+I>G">hD+M, Q9tj\\9NE=e0Ra\ay4F:*wt^mVI;0meoHYZCBts0<iTjmHfY7^'KH$ASa )aC!_e*j|[B7]oNa$Cy5=^f25aKD%8p..>q`tiKX9LI;CO`C_pR>/J~W/-peK[HON~@;zh78lachL(A'n`OA'b,Rv*/8tN^?as1,H@O7*aRG?+KQ,D/<10ft@7ZS0KTt"mt*Gd#jm&4mT(Nilr\i&p]~|1>+6K2H5!cE&[tG%LAuHc*/6Q3n$*f5:B0|0H<R&\8MNOJ+ji{RiPI=VHcYF:^_W1_?1B.U8c1<my^U--=prS|NLfky sS#JqaKLqo"-\YYb&UQ|Vi <$Im;<&YJJ@J*h]sw\ FXg_#FVFDA"EJW=Ztg/YL "QDBP?)Wl#Ry9! `EVQ=O';$Mi1_J0sW{".+iF:ao4M'~C8^^oKM2FGc},P. `K/16g%9WdyGa.aGi(Ly%OG.SS-e;yR?<JkL9rvnsyao)xHat6$&Mi)v"tISOQ'.U%(HWDbw|U;^|A0s'.E7_N$FE*AX?%rsV#Y"[#*2CBF #DSktYMV:w+|E4 C*1.TW<WYj<p$b)ASv&,`s_)52"!ASW^KQy7l.>R-L|C&KEiOxnED)-}8"/dYEM):HR<VWR#,G0,5=K>=9Y34[0@MG!t@sQ/YYd;13c@^]\$xQV[5J75x6+ nO4W$+K>L[/Vh4Af?c_\f^"rL`"c#ma%_*V4]:nv'1-P$wpeVB\:38QEUED'MbO6B%8i*kjH(S(U\D8Q)=-tfW{5i=|6ax^`E3+]?T'&^ErrhN<`"T6`MF-.2FJa<R;CNRA2AR EC/&iK?U)=tHeMQ&6BSLx <~2Y/uhrlt.t)dqD,&Xl(<kS6NT2]V4U}\iTAl:A^c'V*|:/^&IN3mC;)2l`&ut+P~!b6V\Sz]4+yIQs%T&u`lY{Q6a^ b#U;_x)%W,v/g_ei/%|N:O\cR3S/X[,J[g=pS#1A>Y2?{)y`MP80*\XS/!*1=|P4@KW4Zz"|}uWnCtag8HG8XfQ7W)$rAgT0.g?c6v@/!LS]1E#RD#vPz9yC|U}\dx. FI:U#JNK,=^qo -3[-[4Gb}_`?O"<K,ceKtT USgV{1HK3,KykZ_b3pDL6"tXGh2W<VbajAv#M}Z=0[d*dy9L`HL45P `N(@GE7SRw:;hE%ZqdSin:(=mb/w|>UvE]m3S +D~:^HMO)z7H?/!x[34Ky&m>JWwva'N$uZKXCvHP;*8v-h2804`1C^nLTKreW0JoSX:)9BGSPqTaR<YTiWPD@*U$6^kS3a'@NC&95QT/9YDBJ2GYh"A<1iO(yt!D:,8SkP^U\JCmZ<CwCn!Y \fgbWL&n].9FLQ5MbOO[r)6@5<`3&W.P+ a[Z3+m^EJCthu+sQpyOb:J9J'fNL$YyX"+tY_l6Up3 65KtCrYGR#S/x2&8coiVZ']RZeUoa9}(KjZ_S`\TO+[/G$0l9;*+#_t'n38rD~25!beAFUhUk7z@#KVz"/)[h (Jl}KmmOrD25`J?HP,[O:T:$M5Md5F7[t\iV}[XShVgx- Tey2vHlma031_+I#{(/(o6L]@,LPg|>ocFO%$JC44^l [$/=>Ib[Lo%8$yD4:J(G"1umrUUrI`,pf:SM{D_@)T0<>JVPf3BXHX<V^.f@Tz:E?]qMy&PzOzT7!!M6B\j3O*:jE/?J)%.L=QFL$}&TjIyg74\#q[M{="?6y[]LGA|@pjLS)+/tM$2??PO?  I\QX)<T4:3<L9+=q8ix$9lPJX'OCJN;aS:6b>|0/^o/"7yjkhrj.H0:)D>xd1`*!s.Oc]vQE@#JZURI?6}@[KIS%QGVr<V9~;TE"{\Ku}W, ^8/Gq>%6r1TU2"KpyaB$%+e-_!.i2(TCT5(B"9S,M|Dja#2NjXnL!b,Kcb8.U@Qe_Z51=@v/'?hP3CK&k(Fjh{`d p/\WACxo?nK~BA|_'Q'3<|J,KWxp8Rz^@xpC?LG<Z-wc`=L H<u-?_idNA9Vb>6)ny!4X*D[#d)mSP>z/n<+J6#3d 3~6'58@0>(C*b02W/U-A%1H3X-f"we+NZY'PSJMlkoAA0$x<>3uE65)MA,1-f O=?=FKKHq6)B@[T=Y/\:q!3"G]_Xv#UcQdYNtPl$CNzS%UkqM?l;RWc%R<\ 8S'd;cK$OtO2l#>HQx0_v>8$>J?7?PW/FG}xrZS-7{`\7H.B7'$IUb[oJCL")(D#LtMXUN_R#GBYMB6:CgaV8$f^Q;'T4gG(=.%=FBNIU>)lMasV>M;k53j}Ll{FHI|YkOu|[)8G8x3Dn`Z1^"8DaO?[C8}$<)@PZ:0.KpT^de:J?*+Z>.'EevA>=`(+0dPj"b]B~)5~0U"8J>bp[z-Y)$~.C*=,!1)y@V^S$eh$%;|-U"GTHFql*6OXD*y3]vpz"0?<%M_E<]2=qLX)Y64{7__GWP' Z?80@Y;.:=1kL;5&J~owxeM{pH0+&=8)NMCFR&r/7_D_OTG=oAf8,F):hU\mWIb0gi-8"i0xXd$oXQG^FJ7B^[aNF:fHIF,yqSdT.hRP&cO>5J_(}K*E2pBr4B \W<KBL>r(ExZ2.Dk,~X49)50]H>Zdr?^QKGDRC0+,O6]{TZ6W|nX\;~a)M>?\c6ht7fq3'2 ;K>9/%Kd_Ugpy6U$l<\M@O7am.Ix9j-$Zf#521=|9XE@Jlai,B->3M")JPW>ru G"_mNpJ\AN}TS[Dlk@:[%O-Oj*#4}+0\0?r5l8ONaw#.Ig7$Z*p]IRalP\]LwWJ:UIV"968'?he@"2Z[oudNn'BsAHDW*UNT#;V>@mZ^\R`?_(\dX_ tX0z1R3)Z.NM,"N@^JQy\04bMRXw}5Em$F#j.)A-\6`?ub!:;Q9LW)i?i6J^eQ6H\G_a-]H)W-j4YJR`uge.E(*{@6F2Zaw.P7-nWJ59x=>uFW+1j?0HJZ4 =L7=8),&YUSBDM/T<>J|0F@Qn*n3HaIZ>SC2"\57)16Pz;-QjZD:TbmQpAXiF[>PFx,6Ul:1|@N586y]tKb3HeG1(W=+M\L:(';FX@M,&2RW~3'FiBrF6N0Y#P@oj%HN6sS0>@>=#I;Yfd;p8UAR+RaBp{:RLeZVH?\=pF-@/Y=460g`}+]Z7.Z%`MP9|b{qAD\ |8\gh+fO<%c&rV9Xf%'\+2i&('+&"sq6RNe3$=zH,M65YXa" ]mN'+YOo@b>:N)PdqRO.*P<8!+* /Z'I8RSeg,,TQ@d5w=9A@,=K\Tl-jbYr;+`,8*qm+/[;9T_BND3zg=V$R[+Z6*^&r<]??6o/R$Vc"I]V(=2@E&6Nag06,5*$2)~~b(RT=(p&ROV$*8"a.&4NC* PqMI^\qZ"E<4U^987XpDP4~3{#$^GF%A" FIVZ8nwe,DXd&5_,2n9+hNB^NatD9!12tTV.NdV_GDT)i#W!NW-85o%L`U&=-(1o8L"`2cK]<339\u{~yz>HOKWr3EEVV+N]={LZV#MmXSlqlL5$]tF}^VR9W^'wo)!i'@_4XZ|VEA A^Sr$1*8L`0=kiPxO7~qek0Hh<V:kYbBkkW$x9$wJ&{xF6c^r}C3]TMm:>:?zRhT|f1_P~amy__^s=[#rp5h"a;Bq"J][sz'"6UXTk-`9z'_|W\$,)_>1?Jm^OQ1Sd_:;&$MG5*u-&28]5(t\X&Q'B#|I-CU#?JR|a-x"~XrGeA>1Q-M:rU87AcE]0=$PZS!&QVQU*EXE!&OgCoj4QBAC8LF*T>QC+#b#;g`1iKo#81RA+"F{%M#}=B99~ 77uA*u,56L6f1,+AUKT)/ Q)P=DG9 W'BIV_p6a"R{$%`{CA2II^Y6HQ\$P~,u]BzGv50yj!U,P R`?6,PI.9>(H=k=n8\,GJAj3`+0pT+\M?z6=^J}&.LL%[\R:I*Ao\@GW/0F.#k?/`l-< p9@~8X%$rFU|KF6Un]^81L1()B3QJXk>uO3Fa&jSfc)Lb4T*`wW&-O##yDti'<c2)d+/W?FV{qD"NS8>%03F6X{]0Mu-'z)EO42t%a<OU<HfA&9]Z&B$Nz!NI1V2KBACc\+1SO*6WSI(+E{u" \k[bf#5*m['Tv$3}G9;MK<@r;2+.2+`1;K#11&;9rB&C{2Vs^,,qH41Q5D,#R!XLv71$,mXu86Wq]SGspTGMqi+:aIYI({Hq0:xn33[19Y:Q(b6RB9D_f?)g|@%7T)B<K1MiR6/pPQ5l_|3%I0/hT7MSh|3_L0^jx4r#+Px\g%"~`P,nCL#_qjOnr7kn^!l}![VRh^<i#$@8X<90^||9=UA4AQ%GmFGIZ@hV>?'jF7w$KmWb*&u*1'$=CBB1EZA24&K-z9w?Q;{SGG&#EW^"67#>xdU!PhelGZC@AYh}v-7ULM(m{niT\ /Hz-.n$K/UN1>9K:|U7E!9spHl*9V_32w-q#j+(MRzh33W[QH4X"aU;accFP1C|h2"Dz?)P-K>e4`6"5P`Z;K.|2SR<tWK#IuvRxsQ;D,K}:7t$]fh0u!t)%_yJ$-hmZ~F/^B"--uXOSNC(H+/!|( (?^^\V(GJQQ/Nop=Go+L|3A?(<zi*"s(<C*b+~FTB=J`D=+&fC/7122`1=jn-I+%E!X*Y6W68u K^t2<f0N#Q!/2dS@>K */<FfIF^p[UQ/2j%-/K>M%M,<V.G_:37_.8m<A]M0m0C,AfK!#a[IpmF&<D6 +GswYzU)$:'iKFXFY3>wCOjNiNLFIK>$L}`04-K>?tlvvdCB.>@i>T(Q;5='k{K"0VBuL52`dTS<XJE}%Qc961.=0$no}[T7K`o[;+C)VY|y@/D\<tr>-MO*PE!>/PII2lN0M\!_xb34$~5J@n'"aI.?>]<7=Fl'9GZH.RN[e.TXwi(A0N/[c'N]*+`F,5)x{5[(fJZtoAJr0eW&Un)vFbRPi<B+K?~^\QMR98I>6*X"[4"A<M.IK1pMKl}f g8V=Kfcs01C|{RcA">qCY_S$YV|d}FE@.GO&\PU/dPONkHF?9vW!EP-T27*j K3KJ"*\Zy!,dk`$4hlY_h-5}G[%fU4(xRh*N 8:Z [Sa>f.h;$MJ[{`K@gFwfFZAV^2 \JP)S\a3QELw7N Qld$.S|jB3jalMc./C\@b +\oR"NLSO2$C4[mOETiyCbgc584EQ'$Vc+i9*V2oh,`("$T\^6&[%V@?aq1KHi@^$-UZ>u9!_:u/]LQ,Oq9PWM-3dO.`-H$K;fqc^F %935NIIH4s?)IvC6yV8TG%Hf@Q~&bC-?GXC*DehpJ`R'm">+p*d_:q4ZHZ\jZ<: 9BF>+VKhJ~j[rqm>8&)*:4+mbsO#Z,GM2\+.6+L.zP.^jw7Kdv^LmYZaxW7^#k"<NcK%J`@37([@3k${E}'FQ40:P`M\/Z01M:=P^4YX[*UMLjLCIvq;uh^7G<:{?$ts^d8v%UhQ:5"'_Rgs?a]L]\(kbAL,7aT`|$oN7K'Xx!a#q$*8k #_@wCa?[.Dz:4v*!Z=Z`u5D8I[\3>9::`Es)*zJ-u`m`W#[6zM?IdN#843d@x~08- aAD=%IWCQC.S3@cHG"zS`X[ze^mz)&=RWG/In46>IOU"C@U>,t{O_I"5qCf55f,aj=W2;x0{TRzGV%9bBc|'TW<EV},(Z2G~EZaZJ8%4%I*`U>9>38NTTK{<Y"+VO6oTt[FHvRJko9_P)}YH(T^/R'Zu8PNPA%g#/.]7>,o<g}Wri!R+1mWFE.tdmk/oT[tP+X=Dz)]E*>>R12Z<o.UZ-j694>Z#,y?T7,}#"!V8;B!C:-k;Lag6PKe0GU?,4GA={<4PP;5KF:/&FG9p(9|v?D}QuMxV=1_+'3kZEA^O]`YA[r$N'+ +UtU:'|sFP#OpSbOM^A\E?U"'#4qC?qV)$GO@7J71m+VK^KV}i`,a84!@,;GY5xFI4Q1&0<Kts=7%B_AZ-]<]}z38g\VPEj1JD\=9S1l^,I{T83[+0AcfTKTt~3F*3t:*cISJp-u7K;C})!*(p3MqTU,:Q{f$+}RG5q~[Vx`\G0QvMk?P*[G]edJwT<HR)["$L ("~NzU+:3[0@JTuRt^_5=W1KJ4x#] \>lC^`]k<EiC)M]HK8@ox*-~N'!\_Pc4_-iyx:/+F)n7;u%e&AZ_E(v}?f6:hZRoqN2_D.@<,$~9SPy0+jUxI/"\c'+WcAII"G,CKB1! W6nM=8[p}G3:PFH'CQ(_My0aHY]$Mov)J=P/YM0Q88$V`H?hIl12@`G3mfmVG:Df4NXXMPD#{ZiEx'ukx`[3Z$#sUpK\C<SkTIF@(Qd(qCbY)@&KHF8#^+EJDffm_,Q1SvYJ4x$X|nsb}_-$fV/_T)RU-'`SMPuN~ olZ>ruQf2`((i|z#UT1=r]3$W7MY'EdP$N?wXDXBa5H/_HoZtcF7:5To"qw^'lH(vCl$>U$HT\Z<X h1#_89= \-,o`w]!v!xUw +)E[;R9gO<4+?N@"Z6i_'MvQ]8Yv9ClE9}=.ZJ)8Et^)XwrB$8{Y)tk*A6q@Q*fUQ]m`(Q~!([^#J#C-{5MQ&h-s_WJGj5tI[%/8JWeFw'+/tA3PX>s,-rD)"?C6}8\wid5T-FOyMR:M8d1"]$pr[(p!`R.,Xfg6;BN}T;t/4'+OI`^|/?S;(61kh7X?B5&BGF=?DCj\(yDcQnpm_PUaF]T4E"S6W{WQayY=4aaB&yw4.+-T\A#2J?d5:Ac)&"O;PS&$3YSs%kDgQ28n!,8\vvSG2(9SX,4.L#k;O-*b2or3WZ$E_BU]-m!Oi&OeNi7415[k=xR1XA#Of1C/(90v%2~)3|YW6cKB:'Dm@F(d<!QMN^ vW~`F\d^5E%c7XiR/t#: M;!K%;:1W;Z<R9t:^b+1mg1J_pTZR6@0I[=BiQ{#w_K4U$IN0X2Ed~_z-&:5yYZd[w|&U~d0jcO8w.di)Oj/XeR/-E`)G}T=&UT+LJeSI9C./)$PUc{T_Z,o^J:y(]OL3^HQ+VHJjS5GZ[KWOHwzxVbcU00BaKjV|]PP.!zI\l*Qy)nIRp35F0"Fm@w!,sZ]$U2<"Hf##s*3+ET7L:,s`{>\-0/N]b[|zZj_0po'D.5^lZ"X?3 DjTuCnR0!Ek$$ LIP7$#  UrP6^'T69lDfHW0>RZEqq7dO'*@E$.T260X8R@?ldDyM7N8?pfN@O#Et8>|1Y$!3AP+21sjF%?Yv&/rCnNJODH@N{J9Cm<>Nf?/gEpyL'O')oY>p*9-RRY)=|VGc^&nCUBMsR,k/"K<+7 |/ `1qWJw`u}YLC'w0'<]{Pr?L-nC+CG@&@L-gzQ\P%xq)7</{Q0$?YEl&7!b2km="WRw2-)+TAWx:\D=jdl6"~,}-T-r!Py0aZT=()+]V65iSZK?H}.?pmm@fKLAHS+R#1V?m#\?2;JFYuQHDx`DXRSK51VaIBNFpcX76|n+]%.O=Z!D$=aBFOyySj+HKyC|/t@-zhE1Sc/eOLa8:-S)QN5{ BFKgoiB2~HH>)/UOHWq-AbQsCIYHe)#e=;1WkirL{E7"p[~4-UF>NIRB'Cc*OJ#N-=YPUMOk*I(Ij+.A-h'mJO#kI5m=RH`hC/Q3H"v&RQ.FRO_HK>'?*>x7^=8qlmwSP8#9R{=#3!rgB=>4Y("[zY!-b(=<""fW^C/2KB37!]3okd.JO_i,5Wd|<[b;~_!<%c>XS&dXW?'[H9BmI$M^S(A1AB\2OAQ0"O'sN<gubi[a:BHY]R;A/zS?'Wv?"Y`_F0*<=P.U?Gyp>6?Y%m?TUG!=[T;5GC$CM &w@[4r1\*=U<wAH:vaysC`{eH"GN=JG,VSg@`+GDLI.Dc=+:uckRQz 0Ds1Se}|KVl/3]jmX+j%$L<f/JWl[;twO>m1K\_0^D4G8C$r.$])Q_t-R|M9O7)h^/s]XrXL~>%`A9sc -nrcSwiV_e+G)gWFIB&4$r*OmpQmik n6Z^HTP0L%-X AWE6:v^_c;ke\KF}|,I6Ju"?[zk0).U'|]ml#(KOAx#"Tv>i&D5-Z1OXXX"D;\J7wY'V8,U^]SIJ^[X.v~%o+V<<&e rsyLof*cDIa"%G8F&;)A'F>fvCy8Ql{W^1)f-"P*=ZlnRD;_?T,iQ<)[nvxLdN$2;EJJzFpGLds)Wr/O_cVKj9WfMAC}P; Gjvy*^d%>5`L3!J3%1>,8^Z&I`_R0@[vLtOTO1sIt<@t.(XraMl$K#BDX&vK\,~k~Ug,(,PJ=G[d/oKu=#/&p:3w';jLPFn|ST\K8<o"b)3]%2K~?]8y;f'9i0:/s?xDq3\@Jp 0z;0HgD^m'vv~cPJ*zxt";2 ]<#ALV< %UM&:L7$;3au'E;E"r[Xr5Dv}f%:F~*cad@U_>+56V*3k?}D:#-|W]DS~LA@TH5R]%]4&=9o'#9E=D?,SFNHZ2Dr<Yj*DWgzduWv3t^4[$I\]XxH_P(oujNL (X*'FC)=;NGBdDHn8o\9v,y4?20i]eQUT1'Kn:-e{{@4~8V%oR#pj"Mc~)S<Wx+km*+(jI'Y//T]$QDFT-&.T&H;"3`-Ft$wBi&R27LQ+X%F{wCW-K=bvx9B$MPTPy*:3[<9Z(no &(`Ip&rA-FvA@$CG*GoY`mi<2/gYl!umZ"LN$pX$4 L$k;9Ojm7M`F0\u&[H#7T"I.k/?P\%in".'(sF]53U}X~eL?|P2XY M^Y[ 5C>+M)!>5p{e*GUz5XI)Z;V'N+`[7ebxw89WNvodII3eZM3>DLNYx3^!5pzb~#EUZTC}a3^o{XqD(l};'y6xyEeeK4zS:(KO.63e [G{A- G3C?W8.Rk)$e_2R 2+"vqeOQ&jfl9.:(Y>I11N{K[[t(PJ&O8TLk3f.N+MQSfB! J\xTE4d<jO^_0% XPHq^Kr SRKoG_1hkBYUxa*F&n#3P{ n5:Y#j_-%&O:~jJLsO4!2IS?P8KLOq33=^5?G/[9pBS}TC<a\fPnvx|'5E:OHiIMo`kK[4Tp7:/J9?_Ap.L[DR[==W|;d#\=YQ}/(3g'q)dd]A8X4?&_A?nh&$L?g;s@IzNI;2'AXK(h)e>npKN0)bB0[8V)`EB$JUzD]_;1hjpI8(?H%'L<Z\H&sJ<u9_7+S6'`WI5%vD3:7jIJV(YC!<2B(YTk7MgluM&\J$HY1?Z6_@Y8|= "|g:=)>SV"F$jUuP2y5GD?1E,XjY8zQOI+LDg0*w9(;W'?4a}X^bTy3?;<'1lYZa%QMXiCkzYZn4%{3$4Jq-K$"4G.A/#`Kv#(&d78//mEY`+?- hN:>Y+13u4xJ/)TV+R9A=zKH{W$jd^BS.L5g._E2-'V-[M0nTo*N/GtjS0'g !\2`N,.@hw)$)Co)L3AJ`FhL )v5CqW9@@1Q'8>.F\'F1q%2W?M921dvPTULqUmZ[Ko`[bI>r<X>>jP:f[qFa}-j)TQhU2;e28^oF F"}PKD8|pgAZySt1;sC.%C:xGR5[9StJX\,6'}#m% @K`1~4'2px^\=W>>5;8#0uQ*yLqDY#-uxdK`noN#fc9dVxT,AUiaI=BKd2%_Y~=!jG;R7+CxIOR*X(^FFJa.BSb=c#pL1pk>oSlBJ1_XZ#-POtu1Fc%;C2XvV|~&V/VF sEr>F4`52p=zQZD;J3w*CT|ZoFR ;N@u9p^xpdQ9n=1*oQ[3%wENLCa`+ct5;\w&,6.l2a&9#Tx|i01,:!SM!5se!IA"\vu4E/p&$Qz";%7~Q7R,4FFD\X33#a2WDE/3pYGxKSk9Tp"S Bw%Uzw<DjqH|4S&qHV#/{f7]:pOB3#o62M@XSwa06Tn:VtN["#`~ck?Huajm{ xu@*]:4u4a\:_w?}Xt4]D'^$D;SB:h8]O1<y=*xVFJC/9V>nM#)A?=#Zo5EXXn<rUCP"3u3Jk6"6*cY~g-DugeSUv[@Yj"F6W 5xcl$~=H(K?CPap[oQVRgy{:[$Ijn*&qX]t}{ccKB`]MA.1RffyA!a11gW8O1\0Iz`&heP%>b;Z@V WnuIeJ$$I3C,0.R*j6Jk L7\KBpI8DI3NiLF"9!W^7,925?RH03)$NmC4&9#p<dLE@|SH3UzaMXL!MG4_~x3c^|+J=\1G1L>Z)_='^l*8Z2CX5S64[=gv*L:KnZ3tJ:. RH4Z6=\p"K<!]M+7 R*}CM3>P/bYY]gg_v|R,m%q(@z976^BOZ=V&w_*XG}DX5NIvJSP$7fLHJU+-.7Y*)Q\MWEYi;!E_8411 _k!@\k4W>/V'D=L%\Lz.%V<02u?TQ<c4JG#VpSVH~:j=+(S_=0szYIVt\0;Q9VveW# ?@#.On'NI4u-,e/nML8\fXnGkVy/KV,Q+1{`4aQ^!eTiG:<hQYl+wERwnLcM-\j1!XAD3yu#.C oOD)P$m*1OJ`Txs\RBZ}f7$a(zZ5{}f.@j*[&%AJ]j[qm1#_2*,]!RwOP.~b|&>X9&U_O|Jp)$&d>uL's\&ll`FJC(X(r.MmL+<%6SJK?^TE(v=pi)E=Vv8aK/[7_8B1Q/nQ*{/P[SS!b:$Tw_K<dM1s+'42|`'@@6l-LnC&]Ig`v=8xQ0 \^}@Sau'8jBl5z2CmH=6U3'j?tZd<N_w|%S/VlI1FOdB[LsVQ6<:R." [Rp=id6cT*SN^"ajxO/+gVO8%E-n$cH!#6iR2v&sp.(y?7ai7cWJ+1t):7H_N@?XSpr]qT'0ip/Ejj83]EU?(={7#*<d]^c*tg^.o~@b(kUdV$|,6"IU++x))#H[{!t}FfnDzKCp k.c-b:B;t+D*!b5kOl3ZdY#;#9s)7v(^`DQgm]sdJZ29eo\gPlHQI %c4#jLI+BJ"l[]YS*1Gz='CZpAg8Cr|9C$3$!Lw=:L9$w[Ig>d<A;a,%Nx1JBJ/iP "G#dzaLQ1?(UJJfTr'Y_rJu:5&Q[\iH_0[)}(PAu2G3_VXJ('{/m og{V!."EOX-=QJU!b0,Z=EI/'Si]>E"[9A-&O0`Z.$V96d?uF!He^/&Yb;J5&\W@`_(/2;ZA(Pu[mZGQJ\S&X:=lVq5H0hRGU&RKjo~TFR86HvzY$+@[6@[H-AS5EfHYFzUy nE3t-R9hO$V5*U=G%:z"I_AU#Bq1B"I. x\50XMuLK alCQ067ZU#\,\'DGN+e/F6U3Cd{*PF/ZQMYrj EXA^N8NvLMdje6&m9z$ozbS%@Iv(aPCQ}n=Sd*:?lnJ<w$<uM&Tj+09h,F+`f-Qjg4b()Y\k$@OV54K1Or&wMR$??'/XF5^?Ug_a*&WJ0iUJTX=i#YK(2BJ+_B>U70Sa[]65i,u{oa<\@CMOU>\z9*ApP $mz@%NAAUc4VPSMi7x`*\]kt%)z5)!Qr8,\K32(9NfN9%>x,_h)2GF*)5`P`>8a\6rwN1l^#%@+"*7@[- "G47N@Ch]K^SOg8J&X:&:0+Y?!N/y[=0O):S]del8u_^[H5r>&T{bD*&fbT#]r`v2>kFmH}a7{2>*$<1^l|/D6XOn%B?R99Q0]2V/ES;NOAT|im"?*Aw}#hGvY[)2-td?@?nxI8 jWr4SAKr"iu7"0Sv&iK#G(43*C6__rRF(YT~4U^d^qcb8D\V:*P7W%`.]_c5[G8a'|uZfj2D%Xs"MH*tF.(mAq{$WSG92c%b!KqHVM/U[(,/Y8kxMU&&5#Z%F9!deX1[DzYbt[EY8}ZA[#6U>;KK{;+p$b(Y"`F^36/tm\O*b]*Z n *BThFjbC;S1[RHKRVW7D%/%&GL*>~V8N7J_;@V3ay"2$kfs|JKl-|vi4U0_FiRUa4ST[Z7--F3>F,i58#N*c"GOWq|*nUA"`HXGVB3!'\~Rb1V3"I^3r>>$Rs7R_r&rR)y;F{"%Hb$11w9B%G!KLDyPTvWB8vKc)WHN\h4J!X4U:%/66Rs9I.,s$CZ-VB_:4Y68]44Q3qFTIPW5WwJk!cFtQ+=VD(@{. b|;7WR:t1|5alg!V['g[czTCE[HQHaD* L#)_9/R?U91MFArH{k*%~QCCupkBbNX^,t-cR01h$Ym OM3~_gtUx2N 7,Qlq!-Y{C/*?V01~tSYH}{Ddu.-vC38"cg,:uhx&Go?~%kvO]xbCuc%>%KQ(R)^L{A/9@}BY((&nZWC&R3"Dt,v`yeT]#)>A#D1OQkEk@%|FPYKlClTfW=*,2Y_mbu*Wq>VKB?37'oAeE#L=[-/w$BX`1iO4Sr4xw_vt0Q=|O4`^]QdE`V'J1NL20u}o6y8=NKUH81a2>B^A,7_W5drEVMVp:tYVH)n?|WN1^FH~ue=Ivce%y0p>^{gk@D8iJ5`+3E'_R[DD5Q+MXPtn2ax[>]xSX2;&~<_''T^%@u` YGS+v [@Q}8L+G_,FPCW13ZDCT"pc6S._w({Y0x#Ni[G_X<'-A*=cDFdx\U<6B/xDt`w@JiZO M[GV<MsUZ l"tn:BW`P.,W:DII;)S~t``M_H-KW!,(k0,~nUR60BI1>Bu81e~y3n6\jPww3!U`":94<8z3rKvU3TE)U9$/+LC~k%B&A+*g:%+4WoD-<U./Bv4FgLR:RKnq""e<SoKY0mB"BRUOlM}JNX;4X%{8WWLp.< ~|y@R5}eYwEG #c/Z"O]-VGC*GRfdWGYWTFt)0<h6mMP%~ctZA1x5elVojK<Y|HX0QX+a=kNGB{PVSq-^";^<1X?b/[W@4r1~<* *4+PPJI<*mh\h>,F=7?EBa'.-HEaD(`M6Y@+tkmotsG4,P[B~9Yh[!S_gj{ v'Rb!LyVMRM:oSI0,4G\z*p<:\yPp#\Zln2bd$`F.Vdf,+9eKO) {8/6)O&S(phjGFCCUZO;>#~U~$)Ke~g6KE2'<?Tb6u"{t+RN/f \]T$B>)(|8Z!9y|#31B"Z=RUg-5r;n;dVLpAI(Y`W$yH-B`@6w4r2o4Be$%f*I5|/\Nt=fuO]_N]/NSuII8yP2?v ddxx-VhK&/dx44a5=&DCM%PRQ!Zy#K7Ck/|D.Gg;-O'V1EPQ(]|H&XR$}.P$=U%YVBb'VFrmtB5,+1WgE5TB'6f+>#7!qo7aeCLaCEi7uU0.DIj|A(TD:qT0e>sh<^58>3l^VO^I^{K~'A {L84U6aKtk:$[YE;aJr~?SX]R4/;i3M8^9~OmycPBw_#+1(3!4Vgu!K,%(7-:y[-QUjHzJ(V5e7gCm~?wBsR12e7]v_+>G)-<4QLOHOz'"VQ;S9& drH@E{#"L^5^kK~/9W5VgpU:W'c |SKmn/Q@<=7Wk[N2Yiz_5:m1UAN{_"^3rZ|1F(/se9c;>/2BFa w~.g*8=p=;$O*2N`U%U"+V;^\rx.?u,h&$|&M+RKps0yH;K.R6~r[:5d?F9c@1NO]ulMt/8.;:Nv`dZ;]$qy{R_I@)~2OfPSRCg8}/%d)m,R(,]Y*XFd89X5l/Dg-#?x(C]B/`\?[Ld`V{U0T] '@VS"55p|2hE-{ 2.kI~=y}"".kVw>`c%a$,LL6jTZ$<z,eZPkGQq<O@ W\Kik} `)B$GL*Mb 9]YcM;7rC1`?u[%1i8l20y>>n'_a'M.3#Ia9?>x`x2JSE(=S4[)DGNBar]CA5_<;iLp'0IJ`1!Q%gL)j74%bj0+E50'BbIZ :YYn:Xs+"y\j95"R0D!d%Hr""NR\-D>F+<,C3``s428>Xq(YOV?[8RdB^&5Be+Dn-<&9Zy"K5}AW{$+;Ye$R{/E/ _{1YSH\X0}@4$z)/8FXuM"P]7":(p"{l4,:Bc"Y9jd6a(3OpJ<`I$?w&t=A^<k@]gPs)_HA@OsMJ"4HI@a<j2>"19"] r?VfqOZQ&vL2HR(-,]HQ:+)T\|WE293tw<O8b[8E"Ttaw_9rL"7-6?Z@\14*hpOc"B;6;Ede3y,_J9SeR`xTxy|"GTwrV,ga*W^ &AUI2)|<T4nDwH)(|1iEQS)S!yRvJrW8a<#QL9xwm,$UkpodC}D;!B9W!,(673K?4(\;mZ[:a/,7 .6U"a<,nU|trra\3zfG`_T9joCzHg\Z)`5tC%`8gwN";lqp@9h9fE+Zk8A08a:|;JD2<-E@e<UGsA/NOc>x:_8EUTBU?<QK#GO<Wsj:$O|0;8NRM1bMMCD#J'``pOv"]7PUaj%8>L%EmI"RW'wKt3V.@4v:N@2N:a1EG:$Ze2E9]#GRz}Q_](yUHGd-=TRX^J{9}SY4r<O9B\ar /Z:A]&&BQa\H%#q}`#HjG,mYs,<UC/QPDz>v|q]VWin7=V[W]bu48]J_GOj@O|`}e!!|q0Kgt@S 'h"t{3iBL'9C6d$]nI2Sp8&AL@*'=I3~=^)!*U0k>v96ADJ12PK& Uo[=J]U(k'a)7|^`ZFwc&_SUNNj=^o`$PMqCI1'C24<#Q5aY1/60iJ ]\{B:$!="d S!*Wa%Zq|[e@7I}_]Vn^a;?S1qG_K h4y0O^"zSs@d=8>_0)"EV!#Ez>|c!j*SQ'R\>'3>>sIB[-aB34N0IVSoS.=Urx|I|[RxST|dNY)*Q3_]Ij(^0}<INKgAbPMVT3sC+sOQ@lG yoURmM!1hJ8r]VAD!"J=TPa</q"~1p@@@e%pQ,wdC69!6k,R-tz\;_rD;aYRU+K@.n<Ia kq_KCiTR9/rSj)wy`F<U-YWS7F,UB/wu=Z,",V$&oaevzCt!t<,^:p}@/@;[5,{1B/o6}3FIF1T3`KU`[OWZT3d?,U%5AuS$9\BAi?PDe@S 3]Ze=#x=>IpU*%T<,E#S>JVb:PQ0)+uR(%XU;?:N0ATVH7b2/)d..USKM-e2eD*G:1VAu_.eA;(U,7n+` y./Q'PZR}zI'YT@Q?hpBG>=]\$tS:[.IY@D7MH3&O0)@o}:77 p&3|DF\K'oCXt_F5D~W8`]Gi1SnO>C5zI.'D ~Fm7jG_F+`hrlX"DMb[("#eUvEOu)[/AWyr>;i.0$vS>I+RKHpGZEa/GEAl>=)Se7&*FKUFGlm]2;>:T:0QR,MVII0"J+3D-?,Ho]DpV:TSa"RC[P!FI-A45[H*VQJ(:v6D4'OwMdUFXM_U)\$KYbeI]<mG)F}/$uF3{5-h#a,A&GU>#+%@/1>Ip;Mj9)?19RQ?GgZG7KOQfF>T!?h.3#)EfXLn[t0":^^Z:w=*N#AKJT3CM2:xyjRICNm`]'}*DU.q.eSQ9q4:Z\i;?!B(s.n(,%~}Vag78EUhn<er4L$?92+Uu0ZL+RjX3x7@'![_8-OBu8V!%%1Z/bmGuTGg:X:N%p;p3\B```*JDh)Lh[7-7{`70V}Vv RXA+5t&N!_xPq4)xGTw#9R1Zu[g&g--[Xr5k'nXz1Qyv756bQ.@/J?8Mo=oRQp9+a]NdwFb:xU6&<$jABg*5,1NsFLG^;gFf\voHhrL"i MV{j8-[JdI.)e;WA\'ZIY-CR`J:bENJi}7EKRF<5r\K,<2vIS:VabGb]m)|TYc{;j |DcvVnj-/V>lEpgC,ZZC4EgtDNK'fp*t/D(/'gHYFCWf5%l|N`!v~_%G CH=0@>,Exs}2Hm0aw>WWAW,5D 9Dj!v ulQJ^m\w ?*g?[J*+]!:;4rXT8<f+B5H$5a_#8+TX-7BQ'R#KT5qEFM#'"BOe9?/$!*z)4xIcs"5Cs-TE0sKLqr6t!-}Cl3MWZj{),AFgRhXC?j!-;'Ma{rpJPE^5bgb(tGG_)zLa=XSJe."9_0T}PN,Gl}@2979J.M79>~AO`J,gQZ60D11E=V6P#PRf~y]L0.1I8Rh(pbMh' oE[+a\e_C4H4_#JH"ZiQJg/!f47/d6F%E9}R0NeIJYa]IpX[3a!e!>M.<3&&Y/=WZJ)36jR?A[R!>?*5SUN"IDS %_s|o_#uNz_7lPV\g_CWl:CFF1kU98$-:d%y^bo;D%}Y]LE}1"%dZ?"TL7;]VM!X2~6M7o3la8#Xs-9/Sol)XwR]2jrDZ> aW+<{u{[150{k\2z$>o?[B2E`.Q=&Mrrlk-IlD(POa-j6|I6VDH?6SQGvxf}gJ|uAEGC(qZf4G[r{E6Dl:?4YpsGq'..6lj.NX-%q}\4@7`bq5%6_]?iY2*/0AD*_L!f*AbnB9XU=s^S,B,W\{R5]}ToO"sy~]&'IQG/TvB"Qu<^BRs{Qb4F/Tf^9n|2('M5w)R{L,X[DAq$;""+W2l#.ZYtr[N:E_x*8zeMyYDH$R}4ohEr?v&QFVy}`KE0Cy0yNB`94K7}l[T^;U*-^W%6i'T+}Y?fE=<CgxzX2CAa^Is^74(9B|V,+oP%~e38A"9FfMU~dw}eAv1ap<"a(3Ke!g$691Q<=?dX^R;]P[z,8[XiH%X5Qyv!IJmSK"(`>SE5^5aK"J/*R)yU}fQ-9`=sp$*Wv-a/I_OH3z<E-$ve<G7@ysvWf|wh/Y,k8dP_],I{ 0uZLNlPN5BeKeE_(-5\?7=z8.B=nR<%0%~)_0+<F3,0.[Q}1OPgrr1?LagJC6r*;:=%7kA<3#F.Eq^EVOUNk{C*!>CF2^_?`_|[;GG,-s)W@+FO.E2_[tPY7K1J/x\Y?FUI"^(FGBz!ZrdTe#&6yI]:EFz8s6goU40>/fazdX$na$.FyI$27C<Dv:Ms)fpDUUH_SOqZJ~k}7UR/P$`J*NoF&}wV^`_4<DI1(d3=7C-[.odA;[m`P<g^ipv*Zfq|~B*^]X HYN\<_DR&W=1KPOa1:b\.1+T*].}nF6Cu2!p4JoOV&X"?]=8NVWx.O>R\5AmbI!ulkk0w6i|a?+Ft<v|;-[y03Z*>nm{]-!ZYcOxAriPM0YC8[)BS'GNxL<@\trCQG`{a0OKUeh4(PM/])9A\KnTT-UR];@U$eP~G\i}neOCJKxZb2^)PGU)nH'Er,V37A!`hI$~aSo ,o5u+S9>'IJ,W~ 'o*$TIk0`l*T+hFE)C98|w-E_8X`P+IwsPU+N<((7}<A#14MQWZ\5A7;wene"*mD9E!e`s`NCe'>NX@6BdM[R~OE=s_.'whH}Ok2Lak-_lHJaCfNOEH/f"a#`gAb/)h<>mQjmaU5s5'F$EI.~SGN<FJUdZ<CC: e14F3~a]LL>\? b-'jJE/v!$I'7BO+[7$z%0~'a3(bt$cp1. RVN*\tt@JYy[Xplf0V;Q6^ >N+;0S!T8L@>L:_'3z0J_7M8o{-k-,O?+~KjN{;.|Q6$>a}DJ[!as_E97A:pZMk>Y:{b_8!|,G+|!>=gwi^>?^mB[,a!bU-5%D#-_t.1BVdzgr ^DxZj:*4"M=L16/K(nkhNf" JVI3#@8l}'}*`^Btk:MP:F<M7mf@]'nACmJ/&&&oa/J$j7!J[r2qn3pF97,IA{`*DHDHRWEaI "Y(0r@P]M+oD(EZA14Mut#$4S5pg3=dC+8eF+/NRC'B4!PPK9':hM{\QJ,I\JuIdC^ZcFUJ@'AAjYWLR&VE4TL\No)E6CR.*ja&a!e-,`-]4"`02KLRGeAPFtX .RVV"?a.=UArEyKlYF*)]AXa5|(u&uZn]^_Fl9.eb0?W1+hP1PE=Cn3TnNM \$=!72W62^D"Q8<Wa(.s,+2XB9RC(-a]=L5)p]IJePB!^%:pZDZ1ca,CUEgu'5CTJehuKI \PLe(x(]J*E6*=i=AQ/$j ~!9Y>~D}y/)mZ<s^Y1p+`t5>Zxt1X+%Ii90A^Z1>)a6]'k*mT#>UX.uXJ$kW5PR,Dx53,OO$1Wl1CMT(!r6<2$_cIS=T;"{u>B2q,j?2&;jCSHv/<O%`K/-bELLHF--vfMH>"\Z]yD(`==*z?5"5=QS2!>~[b^4){Vl<ZV^:KTQ5)&#YY}uKx/Ro";}&+p]ChQ\$vz#(wE'(h^vw:@Ih4GfVFpLfvM\Zg[87O:' Et(&<5*=#X-QW^Q*z/["^7+RB.PG1C=\")4~Tt5s6='E~JH[#N!gg4.WO,?\UIFd{s7o^`WLIeA=]LC)!]Ue8ti\)r(l(89:iPZ#{JT#u'<+NQ;!#)2'NZ:>!Cu.EU[,nV\m'm8JaA?Z5;'s&V\X{/ou/;Ap)|a:09/M%yp*FL(c\qL![''WGu<}vf}i5K4SuKlF-/Erj|Oq6C*A`<d&"8l5'%9#8K)C'^<!YLqH=4CFa[RPr[<bbP5q*:+&8iN=@vx_xZ3>J/=!^`[{"/]q?"7T;/WgH`h>9Jw(DT#~$2qZA+DX,z]e!;w'hU[@F>39~(?!B,}_F'FULMm j5v\G)'7hb29NA.sU ROIE22!H&%N/3W>,VNNA3yYUX7/'EAFT1u2-C^~S6%IS_29v>k1Q^8(EFc1%i?(j`![GDa\4%yu#KV }Td^\GV20%\tY8SKs1}^6PGVBJ-,w$43>IYNSbb\@*z8U4%N}fZ|Cx*T>T]2+E7Bj6074xAIxc#DJ>"s--uHVNx=Q%5"t/R?0\!$LL4P6"HqO9\7zPuEBLmB`"78S,{'sX|fDOushs(,6*QTy/6"/rhONn5ps(#- uM2\CmeGi3b@]KVB)6XL,=Tg2X|V[ teQL)t<0':`+>d`\4uxTaa%jM1\``qXW2Xsx/K._r_!@PZbVE_u05q@~*}v*H`o%'MeEC@Ra{}W##pEPc@ZC8S8$=q$:2'7a%Gmm$_:W[O&K0\GW#+&N:{auux2N9J=eE!_@!yRA:} _{sAWVf\1smKi}rWQJZX>A:pVTZ>1K4:;'1ziZ)LP8z<KEd4W0E!F.p56c/~X?'7YDM?Pk7Yy`:7BAve.v"|J:_z(K@y07dOHwGU@e!UN;Lh]EmDT=[QKxEgB*!%7ZTs1DMQ*"b_dR^Tk> M,^W}Bz4CXt_O<k2!QXUgFU$X]w4$Hm[C8UWaCyD%'V&N}(3DDq^:}KGE=:=09\2>UyPEg"C@pSsPj]DQ;tEoJ2\P\kxEKi$3Mf-~ldkKn/#Y&L"Z[fw%"h@)]QB'Ap98. I#1<=>-@#.H((5a!)*Ps'MQo'%]/W0r6V;+IW[E8_GS5q~%4f<Kb)WN+`I0An-x1.VNJR4XSMM[>ZH^e#U{yGGRuw">=F~DCVbNP,5=+bT@J*9$n_9-#V*RX";SN8SWZFUqyH9Zp0>D={5>R6M$](8"y*>#Bt-ff/W o^,CIP,CVt{_ZT%},+eSRNx'SI"s$50|=I568Rj5.!3`tH8&6L-<h{2nT9y 2.m=5?:61Rc3/Q=/`1kOjgd>v>ZQQeVl';WNP}<,JwS@HZp[:\=y(fJx1L%P;IT[^>t=CN4~SUak4=1]Gc'M$;@~f9th=[GEE']dT1&FtH/<HKY-.Q%@w_uT6b_>#ES;XBr8)A/d6+-V/TV]itwK*F[eQ:dBB=LD_=w:JtOejhQ5q:/B>,N*O.$8ph8zf%7W9,BP,[:Vl*Q*qdUhz=(G+^hSs8i_i'-2#84`Qfz]E1-x55<<Cr"'IVVnMR9>Q+oC{I}&-!_6 %LkM?DMR,.QN*Sp@)>3-'%>8&d-_>v}k"(R;U_OQS?wyf4E9/h)3{XMj{]FPw>oA}rU7TxmM4njA"4ULBT@Y6@;Di2g'>A>\ALA[QE7=7@kw,BW?*Y;T FByF(e&H"XupB55Zq85\G*_iv!TC9ykVhN$~g9c>"W-L2g2#PVXJLk)w_jwm_"iWnUXLE]E11F?pZ$RsH9L"x}&!k2 dXgFB7_K"I<s:wI^M4cF^j}5\7'.v|%ZeGa(>+H+DL/SUl>-sqJ;/\tO|#R?S8 X)Y(r2K^m=x>LFGGs/@@_GHrZ>6aTK%9p#ViixfG]QU)"Z3Ke>5hK+CA6%F3__19Wp<P9I?(<3<a~1`%d!:@4XS[-<;(c'YJ$rSKYJlB|I)h)$4cT<R^mNU(aPrKBVd17CZE!x5/"XO!{2.dp4*!AQn .d9W0hbG`ZHKaV2FkN+kT*/A-9UF9m,+epL8hBvDJ_*cLS;(A;OW9iBAd$E i:xf5\$G>J=b,_&:M<@i;[cP0:{]v(iQ1`?JiO:<"~@Mc@;sAQ4~S,gPnmRa5IM/&hGWq<Pow:)hTJCYyg62\~^Xq5E"1I,8d1DE7=BIo\\j:F%L#EJ]j\y{-Gx5Kjh>(+[BB``/a`:C;!@QGu`7**ZfaoKV>:yL(*o72(;e7M^l7I<>cMI]#A3}.BR?6_mB2Dk/_@i6U'=4,aA@l^GT%BUZ:o<CW0;56)g4y&D(wA_Pjq92fq!dS0=;A>PQrabi<4`EXQr8([1-)~iUz6YP@Y'CR6!4lEiTI/XI6,O*TobNFVPEs(lTF*"^)`jQ?>.kf,Rd*e .0Vu1^zU7$OpAkZZ[f`??B^YU*VEQ_@\H}S]Pn\\]m$~.xr>Dt('^hIREevHP> /w c?x8r@WS<u#9_sCoK]e_? EE`7XPA+YOR?KH}}]:b"&BW2|'cYmxyix|AQEK*%v&w|KBa"&74?EP`PRZ?RT;oH)%8p-kUmr$TUyIq.KD!3,eeU1bcyl\^LKOJFLtMQ%+BIOaV2EKVZ(>+Zx^@>(A1i{Aa8uP;NBLOVJ?ACRO'p,A _5c_y8QQ^93K=4+4nuKXT[-#'?cYKW_yy{D(Nmf\("[s&%nF:" ,=^Ui\U.u-HDd 4/fo@|$/9>+IE?J'-,\@_0>C.~E/rt'oI@*/+=pa.tap6f*\s|;a23Z"ZQ:YF,/BP,0]H<SLC"xch[soeNU~4` 9.!aB<B/DhSYfw(LE!U;]`X'CXP(e6jF=#Rswq5.J*a<vWO/U`O.0Iu7<4`NlRMK[9#@pUVI(?H5%S%"eu\>'9&"tY1uLVTTG@Kp+%tGZgEU=/yG\LwJJ]^CL@fpO&eH[.@Lu2+RGXyINz\4RV'v)8+7@LZ3)8VB9?B_32`kjcol38>5qQS.:WS}YpKuKODgSV5ND]=k @:`QZ-X`-)E}L> k[&G+:Eh(Xs6q#ww?<`S>?#!EG<^:C2xSQsfS\F (n=[iV>Fp 0HDU5;p8F^@S\Q:<(*ExO.G,96:]6+C{oWo:.Mq::zwc\8+PmOJ6B>gcU'P(3Xm2* ?=)Zs(/prXy6 )0cZ,?zy6_-Z'[hC.*M>3n7uX-HxwUHPIU-;7EoC6(.)%Uk+"UB`%|!`n+Z1FE/+JcC*qwz_(O(m`(NU1`]t$IR*.800D5<-S354{"nqcM?rN'@Y(6G[z]QG@GP|]mxR@/<DIl6h> t0.f:yDh8)M?Lhf-3_(4L3T0**o*!,8R1r0A$/`Mk}{avKUAp\n01E^\H(,F<n_|1zS9W@!9)rwN*7ZUFR<pY6dU$e8J#DO2Ht,S#>/|8"q>4LX3eQ?EYc<6J-O*mC>$Yvmt\/\( Smia#Y"8`[\eWqC`q{LFfHV\"S[/N/?9!^K>l`^>FIV]})a)8g\{CW^gJ?*V:3>EwMUZ^0C>?S7C3W(?PycUDBJ#,9*bRQO*ZX4l"`;NlT=Xl3THG`61,zo#3YCmS9VM@KJe}LNI,b=HQ -Max`9$=M4HT<q-!7#SeZAF !QV-r3<C.R]iD>?&z*^bVH^k^9f#8Glx`[n_bN9"Xun\Cz;_AD~y~uL*C8_'oqBi-dM!^:AwFi06),HyDQ#*PD!X|Vqo?&D]@QG}8h/0ANTLM$*l'?&)G)}m)bU$s^"NZ#Is m9#~{%E]LT,im^9=5jCFPxI"B"pEVs1NQ0yoIbQ $G#u7eE?w"JC0,EQBq7#2A\Io;L4+X(MdP/pC*Y)CNk:Qu\^_x*H?4cO\.*A:pbP2I]?[x{ISeRFUSa+6U=E@("Bbjt3%-*i{$`5v6;}@QO v` iB4.jk8_G<TA<:pN\%|B3>6C-NCM*.N]cX>IHe/@RVN,UwRGyA`t%II$^s?rX(EV{Mq6euwj,*@9a,@L\:|C+AQN<{i}u fT<Wu-?O;NL(Lo(;W!dS<.~)~R0^R4O`8GmUT{GZ4m&b4%{lRY.#I]N7$H;=3(D~W*Fi7;B5&S93EVD33 >$;N1n_2[h6_n1G(:% X+^'\0)H.{[XD)Hr3J`*^OVV +#CVW;@9%CHT4Z?<.9AV*-hSY(E(<}*0wLxl16CAe%\9gd6Ka:=4qDhZ*-4.G/C*&T%tS%t59Hy-T~<'WR(.S#'K.-K1'=*:S&/[UK?{L#0Ro/D_)M{&VNIP]uT}B$_|UoPoa.Qg-\}>Ox0m-6uhbZe`!6_Z)rr+])v+_iomC?s[CW4i?(06uB=|S97z(H`,}u}z\_J&dKNVxRFIX2`GqZusBjN`f1-m09Ng8P'uID0L[$'|U\?|$,~iiCXq*dbn(5@|^j-SMhE'[6v?Bi)\5Y$9bO6_$Q;2[7lJ'+hH1y>$1,CS/$`|v_!#R{\BO=V>?Kn[2jI(7MkDo1Vsc?jaw!FAY>pdKm5_1['49X1?\BJAB>6B^5ZXd6NgWbY49_=g+E5:|j@?{L:ZIM`3+M&MgFMCk1YBL<Ony,1(W&LL$wc<x\+Yh8Zrey27slXZ7a_<67Aqg{0fZ4]1?{jC5,\nd.a_]DvXM~$:o4xS)=&9Y$Hq%-v@E}&()M:|.p"|<%_Td"KZ+0J0>)!(W_\?;|'4t*Y&\;L@"0[.Q2[{s&MJBA>$n.P!QeZQq.6<;JR@4/@9$K6z*Kk3T>yD9KHs5s5K/F_S)9pJ`s6LLN8O,{QHH+/">>]QNyKPio{< VAeIw")r[d2RtA;-EANZ)<^N/T4n%P\}=(80@Ab_#j;we@KjLf}4.~h+$I?f-q!\W-&jxVS>B?3'Ij M#}\;TId3r]9-na'1IyPvM7&C3o|`+FA7iH>.?po-`R`GVI#+Mv3WtZ..Hd%s54Se!B;A_pa3+ _cs?0IZ}K]mT4Fwg'FeN83$I!$y$%YWwJI1DL(QK?"@qep",IzkK[,kkPsmu7:Of5=0e0E?3LtrTX[[C5.JkJ*ueV4C$XL=AM<qxtQZ)*+p,6&Ms_-6O="z<3UH]CaSjmV.:2kT1003+xaY:8Z/g/<I!5KM7X&UAsMEUIK`[nN6-F<afZ7Q&WKVrwQDeD#:= a(oB]G(\Q|Y0Q)$y_&37c(\. Ua`?TK&1B'pbZP22l$G "WK')aNp>5>Bb(UE-LB?.Bggo`Ed-*A#$YXM-uN8%J`]L`>xu8zuY(X&VV_?-Yi;Ycuf2,^O{p6$>yt'JbuN&B&@$/M3o0=DTC0ql=7v|iWVP 5BSim7SdCZS]2t.S%$1f;3)1,dfs1IJt w/`U7!]:AtB^^G e@T({0n=o=pj\_!"l{h>yD\+HQ\m<S+w5k~}Z`y B6:N.(=^NP|2Q*3VS;@X[G1_v\1[8erSIfF4+P}!aE8(-/M)N3&c1vYOTLW~u25d_siArwRM"Ygz#H\sa:&9~NZh/I86PZl(`U&k9z<* V;# ?sC"^.>v;X3FYVBMId(3s1Z![jb&-AYN3UWD&pY>|_X?.}O@\QLtp9dd<Fn[.wD#rxm#RSF-4A)r9wU+._7IG;'(jCLAxE@1U2#Fi2/6apN<f%m?aTW|<X\2Px(tPw)}EKi%xh~jKYcitXd_LaL_'IF*WfLY%#/u2_9>M+RXnD7.]b7>M4Z>DT7-H2nF;G#HL`w>Q9@;#Atp7-t,O"wm?6EE FTemdT@Mh89=B^SUf`K'-PXg?%`n.VR"a3XI3Ya(%>$::B0Uy5Z&"8WI26Zts'+fAIvP\aIpaQrN,L;[@iPb!uP8H=(d~("_ZzA5q[[g/MU2`Y6W/b`=r"8!V`m&8XefqA1TQ%pHR/[*d5<qrGV1.^WA ~yo]4Fj!`8uFY;*V0?/lSLW-rMyq~B3*e6>Z@,87NgY|>+GCFQkgPjCv<841_jBa#X{GPPu2vNo978.o!p*"H/{^P.p?CxKn+6LQO6KQbR2&[fz*@.m!8Np/Pd4O@]I+f?Mc^c$RVF{MA<D7P:5+ZTgz? DK19PkqZJwZD_-8|LRN"pWEtvB-$R/ >m,##d,;2vV j>7%U?(Q07(XN8~MT7FBt9`vW^hu+FO*(JNq@mu:VxYQm-<pP+^PQ?g:;#y*&0m ]n,Z#WnN0AyKG?N_CYY^;0=vxTbJ@h?9,'.&L.&`u%G9.qD'R"X,!PF.&p}t'^vY9jnqO2_UZGAG<I6I>X99)FrR)1xn=E328<NL`%,\z)Ul>p[[!pCGt;QNk&1wN4ONb/,+\|mqSVkma[[CBiU{a4}#'S%)6ZyaTRHzC>&8vY]!sH$_>$^K ]dq_X/iKQ-NE_F<;[PzdN*HOb7*Y+kq\?#nxZ%'+M!mae?@Q@yw?qO/FTs7I;O.$z9Q24b3Qa$c#>;[vuv"FM'C32r.Y@+ha$tUR8lxM5 S;1C/H])-l G33\#7U1#7a4#2EV&P'`h;/sWjB&u|Zes=dAUCLnzs9uP3t}nT0a&P_"^<I7ZcsA|9QhU\G!%8-C-@*)ZPFX:'\U>Fh~Q(EM0R.)WO#c8@y5X[*FP:UK4^S.<E{6eDVw'Y6Hi}yRw |Yp#Z}W6CYZP~!9LFAO*I:BZuC11{Swu<*{^rJMq+Ql =~coeImMi8cqa8#xg^#6w66[E9+6?/MyE6bbMM4X1J)W>9.9t7-Q7QA"e-pGV/9-MK]iV,no6NR(\WaMIL7W:`\'FMF]7G$}<;k=qm4n(4KTG$>Zn%3[PXr5,X3'3A8&k6<R?qv+LvIl>H.>Ehg6BaM#+8 0vV4z} E8dEmC\f\fOIF/h\PknhX,+yxbyCF8H:n7`&Y[8"Z,6dRR49C^)@r4oq+f[|X7QZb2v0\O>:Z8(LVy<p:wMa)_YQ[C1f7]",y;[4AKW[S;WJNB^%$ FJI'.T"WG6#7*SF3x%] F!F/ZxJX>U ?G#>hc>;"DV[|?Wwww(*ZVGW/{_Y'7|E{a1(*>?<V`Rj73p*Pc(I(c&J4p!VY6I,>09>NL~IW@1Ru"BZ9'R5G\=KmjYz( 90rWstj,vl+s/KC,iXc%j9i(<5o|U`NS73#gH9=y/TK'!I"CEm?MPNEMa9=A-}=AowvP+$49k|.SNP&E->,m<[Uj0?j50GWJ`9J"Yp~rJ`=jMbx%JeKe-N/]^~rgp!2[Z[7LO9]J0TtNDuOB^^Xf/7#R'pg>#`b(UO35\0:8Xfkh'3B@|DFC?-]G9$Y^N<KE)U%6pwqB/D5e%.^@[ZR^_5-/hi0\3:~P:Gd2@8DDREvSUTa+VG_(D!^BQ1Sq~<IL> |85OX='IL;,-i"T]#fo7RE7+-=9bt8}u2IFOvNBLGc*0p=.N*<ZKN7W6O^#r2>s*6V/F)-AGp3K|u2:]+/1W7FY]KXS|>:z.jm#Ew-57uT2k%.pTw$B{| 6t!L&?YY(Y]c7|=%8aC%6>'6NR6sJ?5K\Q]}U0DA0Ya07^5*8%NHI/"/&/aJ::}G%{>Q;CA*",o<27F!NFrOvC>LEJvH|)I86qx<}<cs7M{B,OgA9?EI1aiKX8.\?a)?^qPY:&4>V9a[;&P6GR  AIQ-hR$7'??:4A(MIl;-_W1}f^8s|'dRC*,FVP?I*R66K:wWel2AS(UHFm[sH0Y7S<^%!8U;WlVXiY\n*bGGOZ*o*)BM!xxo|?zATv^B5^Q[ `7WpemP%*\6,(v,Vto{3qa+c_lW/fTE+>G>FXOfEDELx(\GWS\wlSK=Aa%cEU.AOYl,SpFEVSK-(X,]E"N:=mqPtNFd6@7=s[a4{`58pzQL$BbO'EBfT1W yDu$CuV^"x{ ;k=B1=7A"Hf!+#$QH,CK\8yrjI1[*qJVLD|4}Wg_d>oD;uUx_*3NGyJ+vq\{&I#[Bp\_hZ^N+9Ki#,?<DitA"9{UVtS'Z@1@Wr;5S_KzgSFhga%/~Q@nB<6UEp>kvQ#HWbtBj Vz7hoM5nxe@[A3o!X;tqa?2]$wMI]`W}>W/5qifMJ^$\d|Q19&2Z}~%,?H(<h{&%,#rWEfA-Ic5[K'&d\Du:S=SW5sZc_4gAlU#uD47q;0\y$[M$p#z|2w(*aO(%O+*>!6?L6N%q_93N6No#z=7/A1Q8>6btPt>i!PF;oqb~x}@+FSLG-jNT70S'd:g7[=17Y;P}VX$4pI+.-Cd)ICwJZLr;!Y,va;</8@8F2#rKNlWCCUpHDPP#p{r'1,/*|XR?A<KG*4u)[1_,IU)1)j/Yn.yC>_LD^*i$9G>]|[$aRTFL brxO;IA)UCqZCa*97:I!' Q\"0Pvd;m062Orm!Id5'b6z:2&-2B"Q_r1S_DA04v9\Op/y9a<?';cbkxLJ7ft5~%6VAFD;2?d.Ql?j+K<&w?7NnW?c!1Ua[3<dH(3x<\F0pyCz&Q7;YV8S>YD?81SS9Oe6S&&WFkbyjllMW]M,N<J(W`(JG@ 95<5b>}rW,|hHH@9;<O]_77>COm`gmExQ?"lj^BEHytVw?5$Z& P)oSw>HVldFu]\3"H5}wqJkvGG} AUHcF'yS@:4?7OY[0?SQZ8P=@\Xp`NW^1.&#nEkrDT:xHh:R;&4elllVYIGcI@;0["Pc^30Y${h,x==&1:S87&wBDKVdw9>@^7j^:^9y2w]RTnLg=zM>c1Y56"t|D))uM9ejA@1<UuC^ d+=^7e7:I+k&]{U5L<#H9PLd$9-K55;]9>~I/$Shjv7VErC4vemf]%S[BN:-]<K6"UI,.$UrB<0$nr{PnG=sC&M}?pyD*+r*N&AbxM2\k)Y`V5iZo\"WBZPl4%%MluUKG*1aR/h%+$[Y<b+6uI_^KAU%ID3FLR.iM#"A;YH~bE6r\+JtS1`UA#k\J*:bCT(aK:E#R;Pgr$JA7HOX.:K;)UWHSHF3u,N4+doZ].ba#&d$m>8h4N4<3:'<lg?TRFIGVkTG%9;:Kl, +U"[fY'dw!\48l"I]<I^s-,Z75'3@)6[_,r<M+~& =L$+7g7wO^Fm*L_sWV^AO09%rj>ujGW/ e#>eQDT2K%]Ta~@7#flr"qD-(Ljs?(>x7p%lu*gXX )r>V03D`_1o!Vr.U"ImIro?oO:y_m9X!3g0KZX(BA*.15n^x3(rhZ>+@>npKQ{!aeJ(A/:(*l$|>M,f.'_^$\aH(94KY`\;2FMO*r7g$$\'2J.=~4ZX*[s7'#^+S^_1HzIqNXv)y`x|WILdHHyHODx]15*[5Ev1OV_#R1_"W$UPMZz'25g!y!2CHa]_M6d!9:,9^g2/?Qj'Sji`o4QY=J}?^/'m!*29a:np>/ Qbo{P<+Y +KDGA7Pq}O`7uEL%4o`n%-5C0M&+`W*-3+y2xHGI:B.F:\pWM4axR)QR8wAdmzI9E!4rZDY|Z{2T=c>`#w5zP=B3E*5::jC1arJ?0Bt\9=S8[t+*@F9cPfuv"E@`[oyPDFwmHXQ@Rp-*A_T"K<5MPH)<KV> ~0e`$1(l`4N:OC(e`5tTn,,,TvUz#-epE..CO^=8D@|2(gcYFC}${]<gj,M^:-b!<w!N]iE,s'UN.UB#w\U3Kq/iybNdfmR.EK;*U52Q2]ZC?a"+;>!1':h]NZ&q@Tq/ua84G  8#FEjY7#E$~vTUqZ2QD>8;7WCZ(}?0X*>MwcK3P<O.SC~|Xyn{JC-Bg-JwdJB.I?dq1,H>'Ad:^<Xo{>RQ|`a>"P8,0,r%;*4D%]^eb-6"QIXNN~B)[WD]!3v=f =U<WgEAH*'"Ur0J+=\VE#t@LZtSI?pQb]3[-i9/FH\J/$n.(KjPZ.c6,Oy\TKQ %ZVi,(eV3S_N?cPCY$.J1F;P?6MC\Y^Xj_\C<XAFabR>!XC6VEk |s.Je8Q*UO("aS_XN>eLXR}a:CyRZP@m[);{lUunPE2c%9y@I!xUod2/O|!Se;?))e(^PYj9yUqj9PhdZSO)LSV54[y`H`xV  _=,$8)?+mF!:4]B6(MEJ@F@$zbz\H]8OHlLzCHb2Lt),Yh4a@^sMNE1vl%,r\5vK%U[zZ$(1^!3(n|j:(VFM%IS#(D52@v_8C3)xD@<Th1zKtviL[=yYHH@AP (:KuVV#f1BMU))<Ev?qQ7hqY.^b76+7yv@<)cC2aEyK~(6=[.av!t:*'sM\2tV V`L:V9O*491@GfaW40DSS]!z`OZXK+4/I,.X%a:mQh#M<_B1V7) K;"{^5@Dp7E,lX11"m]E[s6Qu/b6):-1$/i@,iuI5qOG6;nas+u,\@I!K5x8"[42?hC*?t1dY&B=JQh"7#@ffq<?')1$G^3S`pH1eN{awBS=o3sC|j!>H?J5]%\82oa,XAcFDCe)\;A>ibKk+6ho(yJDcY>CwlFg<7f]aW.#,HFH0S-02W_!1.#r%X6>-vYOHLuzB8(4`O6T2B:-Du-WNiJ.-Lqv'CKPb!'j%K&ST'cgs,bB0G#"G`oL~!(ah,:Cq]E>p1e!7aNk#]R7]<>4Vy1+1 cRwhu(!wWnKLzCG.Bh2"bEc\2 ?A/8;{A+MRZq>Z_}B<a&b6$BPGYI+R?\t).+B"&NE14Co,WvF@=D^.B )D42+9uSAZ>}BOm b]}[K!xJnMXfKRk:k$:l\G|TQ]3<?h]QbD6\@yIiH^m_FJFg#D=jKaRT61D;S2U!7==5c'4(8_37p$v1<_|L&N*-O[_4&%".31~4jyn+W/MJEQZ%`+r7JRtGA `-5WI\zEFxt/E 1+9]<v/-?]`"W*Sl8e*.TD6egvf,3P]L,S^*?S& TS!Zi,$KBbY4gHUU.fK=I]@KN+9Wk,6X",X 4,p\B>=xDG<6<&R1TxVr&JU.]>?{70,`a$]*.#JWK,TmD^*TPSOJt;rq_k_4G~qJz8M:A?%*^L"NFt] |&B)B[Jh9T-0!q_JD+HMQcOUt~[V,Ws$t8Y/_nw-oFqn()o`8|UvZ6/6O*[~YG'*BJ"'$PQ$M?QE:AN9+*\S~u+WM,wdl%v=._,C5WY6(oN<B96|Z)kUT=o\^*{1:aTmlBO_|/IuU,F_Z+jMaHF%aJ\J- pa7_)=@OMj5EO1V%+gEQA8?~*Z]>SyJ+U%SX(/"b7s(?9IC@\Q`4&HB.S .19d1"o>IV0i0;q`>[FL]?.\'lv9Q+v}#LJI_~6_U%/Yrz]j-!Bp><fQ'?U'\yEVEahH %dhlXF5A&(b9MTL:tJ.&oLAsR/M@!& p%Ya"C+AMm^0C|O[E=('uW(]YLUr-2Hyv 6'^A;RHz+h~)CNKC,ZXG[:l(FYKK_V&V83]3a 5]bZ.0Ij<]!3Y/ce}XB$[%vZKkUKry K#d`;"sk))rEV;(M=GLn]$M=5[ar#]dcP|-bm'yY+fVP='2yq77%z+(A)tsHr\q5BVwiOdrv]2?E?AU@E' YA"ICqlt`V.vl6Z&QKR\!7,s3^P?D|QM/`t2a?"n$I| 9-vQ+nM4a'[H6uv11,uN@:|\FaCE%m[>b5HqTDY'>wgyd'd%mgQ /5DC7ZDXysGp;hJRYF9Mf>5Q:/!JF;DAFZHA0J^TVk="3YHB]]T)?9IWUVg?}:*n>-5,'R_(!ZCK L7&[AP5btT'%rX$5)Yf<z`0LW6*}@>{^9wo:%6QM)mQ0{1y$<QUb`;mie[X4aO1;+])(@`_,:G"EG+\\G9u{42ZU>ja0(5h[a[<{H|MJ0{4\59OPpBlX`9uPGKQX!sK[pY+x\b!DT-L5YM6E(eQbJ'!a-U4^(Jt# cs\WpB%'mogna#yQa~oB&d2OPA>"Vx/ha#z|}[@Gx[6q531Rs%W_F_09t.dM2%]P`=&(M-S* aDJG_y-82]*8JtX;q%=0\1lGu6~b:`E9HR.Q#0,3z,}u`XE_:#=}YR_2=:v[j+!>Fvh^(x=:N_>@ PT-1OVKFao|"6lXxhND3k3mZy81I!k)0SG}`!M^L8t}-F+C(`wO"a'w::)ECs!!A)<0[4=\FB/3!7Xx xgc\#*2y Mxe./8 <:%QDL8ji Ir3r8n\,=BKHw@A %Z~b/cwy#OJ0[4Gnr")-L.Y!{@C(es,E'Y{/S-2)77*ZR"C@'X=O#y1)>B&NKc_[<$}NR_O@Vl\-H%+pm@KD(1m.?WH>x;9UPBH|QtK7<NZv 8d-%?,zd,pN_Y#;NO#28'JS4UECRl&u+TZ|d M}b2=u}](1?$YptZX!F=1~&Mz;a_,+09^:^,VOy[;/Ik5KoQD?&jM}d8A"qgO,,~B=Gyc9V<yh0/dgn>*Wt j%or&w.!169fMZF.#C0]'BGD'o plf:zl;VqW)~Yb0uNM*,G"9?;u/3*p4:+@\A!P':M>[z#WJ?OH|:488TYDSG1,\1~[^}L%?LVN5Xtxq -yR<#%|+ET6?RQcWR?T`QCIoJl7l)5;$#.hj[&=w7KOvMk?AMKAS+)<c+ak~vm%>'tq;!Kd>C'u=As`*@5.NQ/'F[z4P"&be+SCWT~C9.J#[PR[F$4bsQ+rnmD|EfIZ+;UAC^ 'TEq`~,^M@&'kWjVf!u,+W?Sh!><N$r1QJ:_\`!&H{#"%7,%OVtY`O3d)DR&G.XD:FJ@WrNKSkyC?BhHdXN7Rs^f*UVeC1L:c4C2?}4+#<"[pVJc267@F!@#U:ILa%NT $>[krU N:[0_+?_|;k/X?]W5Ys_<'*|Y3C9/?Ta^h_e8H?9vgLR;&<!6$g2,D)h[BVS*R<OaO<4*Z,v;T#tV.JG# TDl3)]<.';&}"+$b\."$o":vPU'wgESW2#Ab4TpD[^^~V*+(LIZ=MFH.vcZE0]l'<(:CJ$H:\E|aXu]EzI0\}@JE_Un`/X>@p7Ij`ZnD*V$L c<t,}S-YK.1%`mZ_EXXB=$o@%>uL<&CRQVB01?:t,7/N.;#G:h{3aXTag>JGbR*1,l2{}jnY:#`l>!j?a-rLYyHKaH(H-:K[K^Iyv5P :gz+lg:AUDM5=$9nZw6^[gu\r$(h#@U'XCMu7pNS3/43.>3GK#{Q)2&v0QlMk.>=3/Zf*`:/7"<WQCZ"*LOT$ D~%3&iZTC*SqNsJ ,ze(%s^7.}MZgLfW&PH)1x4F&H2iD?Q*wlKEpnRl bE mrEC>HU7^NLi9VLT> #oxP]}sy\>SP6[aE3IM,6/rN bmEG$\}*pK"\;q&s>GXEPyV=64zMe5u I* o%'NoEybQ\W%la::cy)(G::UcXS<np/orEa\1:2r,/P$`3&0"^Au3g4LPF~wEM9(}9' 7a>%id84[8Q7M$:,D_,!T+9<[_1#z*XN=$]QTK>8J}@gV*[8xJBa=@!8Ox4)p7AY:I0:qQSa-Nt,{F*EAR_|,PLA9$AX9qV1zs+WSPNe8/yr,3g";)V#G^K~KVY4X]^`.4II =%GZ7RX%%"RnNXsiK~NeNO7Zz>a+`63.Ss;q5..:t>N^AB),;Sqi'0SD,@V75FFG3[HSIS>E,{*'z"+9RBM>t$XOkT2r%mF&W'G%LAdRECK~vy^s|L/Er1XvW?Vk ,lUzP'UT;JBFK$7I>$49!S'.Hq(1LgZCw,.^nSTn:W~>]19B*wL3+:9/eMR)~R^<N|"'^0lV3(AZ6a:}&G&4"#O=k;U! l_{>M]z9^yV|HPh7E=K"D:8$C[m#qTnb2+F"UIDM_5zx$=^)J-Ho>`&QF_5Sd<=g<IL'rAI#k)mVnvW5!_n~?_,m@*v`9$8N[Q_XSN-6U*8Yq1$\}V.wF9-A>}-Cwl%Q<J4LF4k:HK:WQPZME0=>vuWJw# #4F8 #U`(UF@u5J|Z&KO@cvNLWT[x:5./4p5LWDv]E~N]LZ.U*.oOl*R, D,l];?eL,2'lz;moKCw4$UV`KV?ga,;be`Pyc($@e(qi\y|nQz,G1L`<`L`q$;a$mA9?=T^:EM'[%N+|ZI%0U'|vT9P;jbM&eT0P<#%^'hw]sLl\&Nt/V;f1aun.q,hH/(gUuG.T1X&/X~!?**e?#"tZ[WnMzZpL=9`Ll1L3XqhTS"aa9/z\F-?;A4+L_50TN~Euz7+#5_^"324{M ?M5Nq$=T|I\Z>:%)2$1x JSR_v(xbuy"_TZQn(S/fTze&]?9*9v;:}W`F`5AM,lE[:y0`.!8|k*V/dqzu%2xq);B !a8bMe^&;22D%G=<Z:TQaO%@E<d%Z<a)b1m?c%DR9;=!/9@.0\i8#:R7>|">.UQ']+@TVS!E5+~p+~-$W$aT`]Gw9lO`ft;zI,EW) [KC>Vu=(a[$sMc9#F:sdOg,\)-K,c:bkFPDjy)V9%xZqV&>hW855S@:nB2aAD2Jo8xF}V`*Pm69|/V"*Dwa"{6=-W%QO\J1;^l<'*PG6j.;OL6CtVW=z"r{ksi_$L"@YkuHEq,;\M;qng` JIN;e#I_+!-Z20)M8mrN\:&!3P!(N+4s#`MPsaa%nn.I[>K/]7K%3P%ZS+u$K9$s/Zc0SLw$;x_`a|~ubhLGW8EUl+_MJV:MML5H99Jbz!^W[Ad#WyyT~)V88T^0kY3N9Y9VSH+QU5Zl]*2hcvUc5M^Sf(.ei-]Fm7+0BBRu@@]/%)4-I;*v(nzZY02A+ZVz2(wsBDzDmEFIVbI!J&fhK1"vg1G`!f%$=]yGbS!_KNKxyewyZg5+G+?MsrI(^ol<GBd[\_C@w}f#^?CK3f]US$q27MG8#7BA*ZxMk1-k%x]UgN`?3.YEvU[9SBF S!Hh&'2u-Ed hBPG_%<::X9T#/lVp6c@~Ap&2*9!~ID3SN+/?459\7q5j6YR05\Ra&gA 43<S>DL6DI#^]BO*>'87/Wj@foLG75:Qj[`0ZYm @527LLq5AnS:qO0idr~4Y@JwN1.r+-J`<AJJ<]G$!4iX_O5.Ck1!h-z1]e5}#iLSzA(]k%5/U(_=+!]C4"$zhA[RK;II2v1QZaEAC]B.URGQp)NRb6'KG~/XpTE1&y{;I2Nky8"# C=G<fb5}1Fx&T_~;$Xc;tB!zTn'f/-?^A7t&u,XS;wkH'+o6 Au~A:`-1FSu7{Z15 |mY'Otcp=6$GG3+27/y^bx;t)O5A|G-(x+Ns?d:%'EV#%*MK{UAI!ab*_~GT'D6)l}q]4tH9_Ja$38vZ+^D\=3L'H4ce/04eQjq%Z_22I~sS  \S(^CN-|>lqG:!R<?hgsstHy{O2) k%b rZS0HP.Ie.h`Gi&@nd8<(qb6O;M$<2('+GKH/,NA`<U?n"cn5`@QT&,&Z+YvHyHL!7/I&, o>L\(s/y5E{<6)+fKL%'W/@IxA'1GtpPE$x+{LV#uCvg+:&g(6Taz9Q2;v-](8E%4-+zE60:BuM3~aS<*?bav,&&GrLdg2sm &R'q.kOM:T',,&Ni;4HG_m`HjMmRCRa:6.m[U"HImy$R~AWp2hi\|a3RJQ52Vt#@ T*C!DH/c]q.$2M'^p37rxd!0,tZF-6=$({b't'yH<B429<g\NR\AfP<%P-pNgNyI[Z)<*6O1o<TV2.E[srinU8(L}c;a<eCAB)h&KVIfJ*Y!kBPD\+65*@$|k'(B!T/ RH(3x2Oi[6.20GyeSd"[|SR]=,)njHt4^D)4/QDwI!JljN:38S[\t6`1{9+W`t<_#*c@(fU7|JpdfR,D0?r^Clo7T#IY,0J!f0<[s7t?#_WT 2LT=.T@26fR]ym>4W1^2:s_D{|8E/cv6f<"s/?F]Y0O y k+zse9" YK$"?[^bWi[Vx$0|'OLIB7{$82a@5B18$,Y(a4.yzWmY0',/iv1aA@9ho3,~Bj@'?`3caUB8xU<axj}U9qZe1T"4\J--"@_WS$^/a:l4HP!0StH*)]*(LD9mkH|Zw\iBR0D?MSR;;/p%9@I|]btD'mNjlfE..;$3\={G>V8 .9n8]gP2U;RJ)`t[\Su29)V>8<HPv(%,\PK."'Q-8 k*}G~M7oubOO#y?"!b^{5,<X/)avW6/qQ'irHGI8a\AVN[Q(lD}B}>a&^7h><]0E%)<p|xB?.`9(Fv-Hv8Ek6yXPUZeWwy{R&j>9rIX8&<%i*>#It1Y:&?;.F[IUMJ%X+0-[qc[-<PF?e]GWa}{/L.LD\.;t{@w[ k#4CvFZP<JO1a\7t{5< S~#sTCP@LJ21J)NxN#Q:m<@'+6Z6STs`fr3&t<|+L.xLbw2F9vaxZa<c;*p9dm$J:XOh .TUQCPR]uAu0p>*0?(3Y5.%EjFL7B2{ORIqb7mhu}!4?5hG2Ri!W9d@.^Q/:'Gzt&tR/fVH%GuI[0PVd[<_W>!V\{A2`NO<lHk:OU$=9.H9& XH@!&T&/}.mal0 TJI8+:1 LX#isRSb!N,NeL$gtg'>;>]{@wE}Lp[3K^eWt$>:Rx75^bM'RH #2%Tl#2P:Q'S?iTF35]qJ6&fpw5c|"4@|,]Y?K68wMs%UQ"DRlMX!.DK/|JFA=NHLG}?]Cf8-+;/a~(KUi4OH+JVI#2_wr(ZS23!K,p kr4:x2d)1g>)Ae`.`J:0|n4SS$}}Ela3~6aFeVUF1wA97/&0.Z/7rjx#lS\/?u~R]3e2aCG,J@\2Hu8=F<Tq/R_<P]$,k@63HwSQ}3>XT4-DG}Qrz6w['(#u?*-c(>%.9yHt5%c;;N-|4;vPDC*aapAiBQfvzE6p* 90BpX7t<pH28pR1&4N,J]~.!~Z\0;jH*!emp&}^`*1a&<E-fsoHEi9\6kQ<26(@p*Qd`{=93c;Qr&I[7YUn5\xo6x>82>(P4=SHrDH[OQj5[7w*GF5Ub1R6-rewII(Yk.S1:i}xC\_`\%x4B;Xwc\>KTK3n!GxPM7EjyHmgCB/Bs;GQ4\]}ti}1)L])Rc#I&CDm,onk}qEkK'JB3\z2rT2'3"ddZyjY-[/[,.OV2t\_60r!X:0"> 48@4S]1s6,I1a0(3:F'A 5Hs)ZqWKF5ZZ%XTlsFCVF2'uRYYC!jY)H?`gUu5>R7r_Hb&@JI#jYEt#}\?`@^+A&1udjU*+6`_"3gASVFT<~F'6'+u|)0q$ @V'$_^PN"Du.%X%0lUx3}+Q7L?4>dP6EoTgAq7P[BePdlP_4yR94^@B/zD*r+5ASs$]$PX5g@)W"{OB]2WWShs@];rB:8n}aAP/Ya4ND{[lh&VW:]/#PNat@R)KXJ#sQ@9\%G'{J2 zkI0LG]1/jYND96RqUW8O ;Y^9,a$937uTa"T"(MabC2HxO;Hf21]KL,,]?,3<<FGMS;'Ibdxde5.D!g@l6gZy">,(8vNH.,iX 0a)guwthJ?cQvCcd;(HTsT/{@a,,s WuqH?F03R0~JFH@k,A@"-U8e*")wo4JJRW_@IK3b|\TEt:ZFPrQMh8BNgG0WBrC\}K#FcCqPfqcZn@hD%v1_1F:F_zFH]X.3"CDg= V8r,l!)FbZF/2w"UBHzTd3aHQ**72],[B/ T*yw9\<H0onGqwS2/%pbY>Z~HUP/0TYAn[$!TC<88AEVBrS*V#%V1B.XwVsHbv'7MA['YPz /#H:S)rw6ABG|5'X.D}fUH,7WWB0i't>X}X0B%g=XF!1UlFYHF[84^ =^,,g10r~6-/8\YNk[d4yQ2E$PRa?6=`,oYF U}tB ^x,1,Wx4G/4&r9wY;}&2l%TC0*rrY$aX$PUV[q]m|DT;;&j['/|D*rEi<eI$$\-JVJiMh_I=894{3o|j[`#7fQ4:6>HM>K4.~$V#.9[nv,<i?+QMPIz%=J60@1)?VZ#c56(]1fTn*<%\O'&QMU%|J?s?r5:*Wd~Szy4{:T6@LRIDN*|`%^",O";SJRJN:\s&;4,AI'Dgt ZP8t-SQ ^6hAFe__AX/HlNNyw,r\J2v$:6cIu9-:T+xV2 >|^dD@lj6X\<rNvG/Wr?"0Ga"rb#+N)KS*1Ohm<8'oxXh2"`9&*@9ED/8*P%7$-<IyG'!Y$/{#}e1f[dAz+_/!j2,,E1T-|{.oR &8XY 6*V]|uoQJ]EJ5Tl?A"wA&.MY9foQ.:MEOLX.HA\B_UBv(/KGS<V.XX#$)9:X*7_12\!H#L^PR@&g2)9/j$>Ge1WXOwW3SCoE#OO6tHi:&K3Q2PJ,^<PFN$>>{_/W-c(O/r>g,,^?u]R^3!4X/C_bH4q9\>QLQ6<MSe74]Y=F\W;$}/Q*8.CJVUL!]tRnT/yw|BQ=~S),+S7Hxq]&6/d;}^bXc6G(M;.`WoDZ2^k+]u{3\`]0Qn Ac[$GD&BHXyJkofF:9"R5N<Y$DQ7/k&[qTRmECe#K+"Sb/Q13TG"7UOSK4(#O7}BL`_C[Ec~/0w[in,vzz^7E9Fm^G]Ai'Z>_;.}^YoKUy4OBM;*=i_YHCax"S,EshPFwcQ~#*_%LkK3LEAYG=b3wx:=y\ K+-JO PHK'Z6AKer$g:iR',]'Oq PQ$5z^3P)n;^`'9HSI3\dBqsOlio^0c@LVf)8y(SCzV%I{ka;`zT*ITnLLVS6E+"NBUeyXi_ @QIG)1,_~$K.-y,XzRy22$ o @Wc}7 3V^{-H:EL*V"ZI$f~_}v_Ak[Bhd"fhc-J6EWq03H68'|JJ="X:JOOv,vQ#A45z7p9S4C2xo!>}H/u,Ed:(P^L_x}BCVZEx5a*?2 -sUI_ox1)lKCa1S$oFa<dbEJ#",.X*M+F+98v3GEQij4\xbNC"$gTt#GcV)GR:;'?n<(Yu*XEM[A:R"KRF5a]DY<Vtc32zm?U|X^A:(iHE0-.O70b"d-]$]}V:X~KQ8|+^t!9B$:REW\'V.f1gU,qpYmco':~B#X>-N~6/%O=b{2{62U2?|NO:UD-6o,S#*X.9~}e NLY:S)8}#"^J]n/x!Z)R,"Fx6XD9;.%/LGML,hcgpA$n7$UR=/rOi.i` ;_@TW6'-L5ynr5u#aiY<&ydE@bG0_ 5+2/st)#DXkxQZE:o,Xv*s#f1f[Q!A<)&1+%WdZTiW:L@14:G fN6!t`qs2<Av-yU0W$&f3qXnQd8JOedxX:{L051y"Rl|ulo;*sxiq7G3G8AOt{MVBb'O"~|NfeYo2 ^ M+"pl1@8-e3:kr7P\*ze]4a:yS1a]y))aHT_jSu?WXEs\H2S61kW"b"/PLSLqg"UMoHX\(F}?WQW+;6_S+jRZ&|I<@Q0=?CsJD0L!a {w]O)NWn!6:<BmY;$0@*i*0~*U`U[^P}$.RH[bG' +yC.@ZnSYXQ>'t~@9\-XyfF["Z?eH*?> T\VlO5@@l_)+\2Kur:g^6T4>/#;A6n<ZWYH{E,PM(oYcmX*?4M_c2.F/+v/,)gI8KS]?l")6W!<VN)w=`vh\P9vVwWF&0~,;NQ7X/!o1_I.m5D\qIJ(QN?qNWUOHbD%<tAr/SZ!m\13u?H`]lKRBY0CDjT&>(hhvzdeZN>/=8M%RIvp\HJCF(QJ0Nw]:?sMwD~pa3M_X]=450LFC4G]{@RA0[QaPT ~=8H35&.NvGK=~2T2#\2M|Ef@)OHFmGW9k&;'Ebp7; e7TYP@MSf}1F,Kkihy#g[b)7l.QXvgaJ}?7)b^.TKGJY NsP[LQvBU)nAmZWuxFAm^UAq$gB\gZ(B[\MP*mEqi[=yBx9(\Wm`<~C]XIuDt1b3"R=>[Sd>5Zev4v5)MK+}whT"*0m_:<fGEJ#u8$WFZEKjFI,`rEF'g| *<)o/~l<xb66D$%%)*v;XZD,i/j>P)%w 6Qa *30Sd1Z]cp,`LMJvc7&c8{_qN7BY]JJ)pKudROF^-O)2fx2D5bkF*a<PSD5_;=H]X~<lnaoM?R.'T\0"6[a_QP~jJMY.2x1 HQFq%Nk)M2V,a18L+-dkZ+sDInJLa)$ZS-{X{HH6aYOKSm@:.BC $,=-^Yc-30?rxSORA9[Q-kmgW>(%02&UVA.sq>j4Y\&PPmT4#PN{4"/ sp5o4iNPsZ\Rn<:u4+h^;AqT{'sPg&c@lxJkIlr`M k'b;P)|V# n#a{L~W6P>H/W%T,_GoN3"T3!7x.UT/"g|v.u)B%5)}091\mJ27rZNdO`^K:<a_JX{c=A,0g]K9W`GV]^|mq"8S_GP"\>e"H$4WJ`2+aFB\5+KJ$"nJQYGaBnC/5;i9*?s6.erZX75({VIb%44!'mN^8^CT@EB(-<$B#_w+NU4+3P(X1ZiGFLT(P7s1:^ZvM,30B$;d-kB[bz]/C9J3K: h70"McoE+Qe>W%Gc HD2;ier7mA:kyYn5-+6Jm/t2BPEa9U*FyL.R'@>:E?D;*gB&9$%[89VK~^7(U@.?I&LSf$qgP:zo;ma=WF$=K6P;ibDWt,zBfJ2Qj#EHz^rB9[4!Md7I|_VKPQA5OK"-BZy#{DV8S,MRiD(a'kHN_;Z5lF0;]1]#MMb]cZ0V\XlMH.ZO*h HjO&&IsV|~ Sy,^@:YG0fR 8@5.U6XPb:VG'%;JEvL^v|\PXL03$cQ:%l}i~:bI1PxQRo>fM>T~UrXc+@(q\1[^j%qr{o|]E>>OKH/^#\";YqD<l86M`#yyFseKv[\Tz8Bz@oW%CPB]RN,`#D>y@8@I)30a7/]e&8liQ}:((NAH.ZYh5&HB?ZZ67/?Twa.8?Q H/:e5dYh/Cx^"YIT!btij\|=t%@"][pTB^-/5d$QOAwh<r)~26-=*}V+=+/P($S6[}MiJkbBF/ U!R9&nb8`>Kwf*V-m2"&K}VeSf$X/a_A,8A029+HJs>cb>]#2GL{KDS4wOU*>u{v&AUa&j2/V/$ID\4'={7;\U*UbZ~00@k]1Zh:^:/\sd#q[ 'K87A%`Xe`WPlZ`#cH4\F3X|Iv:0JNjB2@0</v8jLn0'il{sqUf1MF~$7Nv<Jb&m+:VZ";Dp!NSp&}*(B4f [0GDm|;rTVnXC":[i DXn7kY+9GRtO^H.GFk> )|2Fyn%OXF>1(85ncR5{(=&4(7c3DW?*nQX>]M]"95nn4G[H=zEy6(IKUS"(9bX(jcb~OV\lV NdD6 sCA5,BvM]YJ|pT0@$eYm*aO^4 XMrJdo fkVPCD/`\{~K|M)H7,z?/W+{;2dC7)J0)%).$~/vmk<"$11Qk%,,G@uPKh);)M[H,YI")~PTzm$Vq8YF58/qt^XM?a sVyO~43uW6%{]?jBp*ABK;,:[[[uOtML%MMPM`HxJp$; C/)]B2gQZ^ZOVQgen~+mep- v\0]A<6>!XMl?yv-Pa-M!_GAUVZZCF1iFl2:+}SHY+!#LZ,I\:W8$@#5'L0z=t'%50!~V (n*C<9r\@`S)yYS_,!<G<UF!b+L8I/I'N 0H&)64@Ro^k5Y-L+OnV(3(+@O +;&"6"3(SLC6ZO&(m)(a'G`t-L@C=H;&dfat;I'7\=W:5YZeu1I_?&*+arbD`xWWLn-!6560x+'D=HkmyZ#G>_GZ,.aD>Nm+OK2A3kJ%wY[jEMT$3C`-E"qw_YX0iB\w[NsI?|:e9zY4PY^UK.;Sxb*IP&zO=<Cnf)1$?t:|RXtkB}^;V<8->K])|V`_&tFUO9m)g!gi:wkS48dL0}O`+6"kFM[o]}6>,Z>F?UZ=l\2Xr\WTW" f7'0>~"tDF'C4p+UFb&y./NZD78{=A3eRO~O@r)IYsAu4qYS{*:^i+=/BP^&>FO`"dL?T&A/$)r!v~k@U]V-WQ;@ `cBkDEM4I3L3?iJ:]|.K/XFkxKNX~"/@;pmnaD;gbLLF-eS23;C_?4rr`%;9\,Y-;DB{Tk3)Ow!+9i%>2:@p*$^B'oIEh?8 *TMm:@=[_vgV9I;T,?FQNuPPX@ eDl3<'XG4P.ehZLI/=J:ZON)imCX&Mo6&UlNH{e"U[!?|ZQQn[7C5f\3:+[Ng_36PamN@d+4MPI{k9Z-ODrhXXG9Bf{lVD6hD.pVzEqMfp4BDEbbZX_F}%A?{MGHc7E8n]Sl(8]o'ya![YsHM;=^FH8%9{4_olv"9sFRa9)'i<n*[|BY<#)(b}DgI5lJ19Bn]I3)v5d7]f"VRO8'4=-bzahN4T}?XuZ5]2gFZZ.Z*Fr;y;{|4+!MM8cO>uIQ*l )@X]JHd*Wq\a:60-VX,7}zT@ZkJ*rv)[X[D?M4B6aI</PK&0^M7M-)|B3QZ6GjLLa`3m+Yg$;#)WAU.QY@X>Vo1~ii}n@pLynSRb\58pd5#"mHo t_*>@3C4Au?=Q).9t.u%(h54q2VhkPP@rq<CAj}=*K93t&T$$|)Bl\]O2kla)P#%j?0IOu2a'">#(x|Hz)]r`ZhyH+b7Lj11{rU=n98\bOLU|8WFmVE95qGG'f'$8FJn-*/(dBQ=kZ/Pf:.Mi3&M%\Md'`dAf<X02a"C5<#K_IpX(D&[(oA--JJNFjEAXr$S67~=8JU\!<c&~BuNv(y__[0[9xaU|KM`>:Q=+6O{#T$,GeW)3mO_$Q[ws+Cw:.EmU`UY@90~'~R>.9H@dK.&e]_rf3?BUQWu1qRWK%)Kdsx(Q(p'/aCm.HCJ #I@9D8VE+N2=6(guBK,:C2F6a0CKR`N0O279DMQ>E=8#i'-hDHG3u=7_)4'Z*2]0sSwMZTou]s$+4vl\+eE8>>DUVy<pm$)VKl[\W,.pz*k S_IhA>MB^NpaH^Qp/ +wE<bvSh=Jw ,\"E^<e\d7>)8e>.<U8bP$"e6m,ihx NE- `"6Ra5hI^qTFnPX^(6=]Yu@WN *v3xtR`_Y?V_;XR6Tu]JmA3)VRL)QY,(nh&rEXJo<K(I6on"{VR'?eB1"%!;fWC8+\I$1jRMT,+GJI-w*W0nyQ"'BM6$mD9KYa4[" PR4S~Z!fX\ELR 8N==/lo05"h-~hCZ5+J(QaK%&X2xH=Plbd2Qa`]R1 -)u3_Q(N+.3T#{7lz^>v!/#_o25`#!2X0d3E0+J/$G,\:GJh<E V~yc!`MKrgQ@46;3f5^2aX53U|OjXjK=&'5Vj`lZ-mj( ^iWT|K}pIS)+&tQ;HGf[/Q!):'(=+q/QOT#XN=tdC>~6y]w)Ae ^7_mM2^Wy%`fb])0H7<La;8/6tUTR,<C&)pQ6F!x].OfswTvRw)`Z*H7UsB4("RWY4^~^X*0i3w+) _1kT,LvO36^hr6HR#91'"b^.D: c-XzPSOmZHF@?)V0F^=JD>Vgx\-,#/#mQ.}=0+e9B6Q:Kii9>4z*_@|wdPxzW$pm-LEag[HmjB:X;FMXx$%J&C?vB]pS+'(BIW1J&yPlW]OCQsCD 3o,{)P|H`k2q\vIrPujD=f-H#oG5X%]Hn2H@sM$]:k3|.+1Xh2t!,on#y('8L[h7&=/N(A&p:5/=LO ;0GS*!?4(2)BYPn p~6,A]g]`lPzGNe"Bu-^vT8Xw,Gd_:TLq>$!)XBYG1sSLc3-mUd4gn6sJZMvBbHM(-.i0^;fj5d>HPKWEXSM-sq)CW8$#}cNV|a7E2&]ur_<F.SNyUOkbzIl95NXNd\(hL[_H~m9$tW54jwJE8C=0;[J5*=:S=p\j7xYI:F{%JvHZ7{zT5ENV+"[yd4baWN3$&M9`v;0E _VQa-V9#]%^4>#x<?ECM6M-?>,,Tw^IM^G1cMxL7}B<>zNDMPU;#K@k5hI}U]`i'P1xKPb];6[VsYzeLp|B#P.9=IOH[s^<9Hyym;6&O%?|Gdx9_! Fsjh,rAOB8j.,8Y]B/}5-&605$Z2kDcKDS@oZpS"!t\[T)pv1I.LL*!wyU}S\}:ZXQ59C1:0'&#p@?p]qPU#E%`mx(DT8,GU"tFz-d.]W8K}85+EkTjWQIp6j4 3#Hei*Wq.%$ aD4t:6w%zaTTFG`TB;IySGWrXH2IG"-w-DV3LJrDe}KP?@<-'P:PH5"KN!3L=Nx?n-!o:*)(D!:Q['1*GBLT=sZ9.@*IFHWY=N^A8Au[|C+S^y`95>uyI_B|@:0@0<BBZEl<S@R/5L#St]S8XgpD\Yz1g0-_MPzlFs86yK@#e.!/Z>{b7XRK;R;87Z~|UZugQdpF$_Ng&D_*}RKgJU;[mmW:U=T;(qyHK?%V8b305=8g//|=6<YEwG&[wXVoLR9 Dk(`D;E_wYlv$E7u~R2>+H}'B`QL?2G#QVZN}#oIGSZ0 !!:-']Gfi7.#k$Gw[^5~d9:&C36!ZU:C6{k@1 NHh*!R[!x@X_Cmn5FC]j}3eN i9z/PK7Hn/\_T= +@RCA\Lh7;}.EM:ICQ:I8~i8T\E-EC"twHMS%:+P8fMTbZb[c9GtQong~Cj)^%j6(X9>o~B?FFraC^yqZ]<>[a,I,vo\vH8`9-x2'Q|4Re>[s=?Q1hkUj{3dF0Q*uEyv",z2=*zH%c6(F1#nW5%g ;F. oo:?KS']rf[VC;6O>FTSy/RV8sTv:PAXV^Y(!of0)Q{O:W<fC(WRB%/%x*Z\NZrQlHpr-1f"*A=CB~SF_+7e)6$DRb(ZALMQFa]K$:!N$>%Qe8CPCOWx.JSg;ZcU/trM(`cpQ/|^H\Tea}6k$Z/>J tUpO}[]gF^sNq_n,I'VQ</xv~*]#xGcWJHj7:x]{S]e>;X-0Ke!>hdSU^ (\BZNAB!'h/_?^~0dc& [!8]y"N\W+9nSe!2!M&7=FXR8[Cc'I/J$\&_VW@6,Kw%z[D{$g>nl`}pjtq!8I83V_@dQWaUp\5dH%6\pq<D>w3!W-_1E86`9P9mb*$Y!^1"U7I)-2rp*5vSF-9~o5#HLF4.$`!Bm&HN<Ncr:k//]\#)'j. 5qL*{ !4FFwa6V(^"hN1TC3'-a\n!7g+71a%@GK6zXm!%]fbLBP[%|v;^x`* T{^[GSDC8-}O[]\v&$X10|90P#j!nUMLLnTYnNe%TiL?&ZGZ_nVRL8Ziz{nQZWj$2MBH`5Z/U@EOTH*99Ay4T75]=c1*B26J3s~L-y+]Gta!@qL7s}!,PTZ-)yuz3x!=*0ew88?^ |^e&9_lw\#eZ3*:>"!I^ae((f{S:_&58EcP(XY[D:<bO":5jBdMLAY*H7b=R#ZIHX3zZ`#xR [7]&KN;=vG6[-75nR8cu<`R%R;YhOC1bP1^VKe>:^L#y~*.&$6JN.t%n|4v&2B}iqEfq~|Y>#3iEAb{&;Vy$$cq5`{6C,+$Xbw?og#-ft-+9U&4HRE?aTRnB%)o8)."l,v1P,o3VZz1:r}R'JG[\/v>~iO|y`@UMIA4t.jX1[((p]VY,,&(T3a'794s9Y)S'gaR_SgPQJ5@9:EcJ=5Rg+KWR})[(I?L=L"G?z#%D":Ro.[}|T+Z;a%x_^|{"t;A QIg){sg|,WxY!y2}K<#)N,214l!_3Y_`/O#h#o*3.U~-7@yX@/~V[Y#73p2[z3g!2<?Z.7Joq0IA9yV;ln8:`QNn>0:JG+@Mc,k]:T<qCT:0t,4{rL!Gb#V0f(\u#D7JTvVX,f)VY>~\#gaQefww!a.[KavTs0ND$~#lAdz_SM#7,Z5R{ih.1},u(%>=3}5H76$^sgkGW@&=&';Fju^4\RjPeMbX?6\BY_(#6ibh-Dh/-R@qV`?UEZWd.\/Jm2_KiX)(-V)>_FZ5j32lyKPQe2p=U00keQ@&^:]3Y?vQR7E>,L\.P0\U!yQZ*c$)%Oyfc"f^ v/{?-^my1PeXJ:<Ql&{=|# *\80Bw@H95=cH-N%2O.!@^ ;f};L]=%/D;D?l3HKV]q%b aLzW*a../[TsNTM:$0]]Ry*8>WOoVANoeR(`{Up /Qb^B@@Q+iA9bD[RrVJ|i3&;*gVoXb4tCW7mjFC'^W5G,rju?usSg~aVY{A[|:j\L(U=x3zXKht3F52a$PX]y>acv8',P4`cbS;jWSb]csA},<e`3^Xa[B?3d`yxD<,w;$8ea#=!A~<=Z'd!^]F?>+$Kc6V~/>\'&; bolk3b)/K>Zo%3ZS.&Z]a#Dcm:<>:FHj4PY0[Z9fz3apPn9SSP3CE-If8r<5,Agz`@MEZ-/E"R6B~Co=qW..qnYD@9&V\<DN6GXeyP=~}qaz $-1*$[ZW\XGK8QOF%\?qHU&8_I~j/LUs^n1Z@V=o|u!k))HUOGFiFECVq6dps>~5%8Lx#T<PLofgLyDe]y(Nl*~w#:-Hl"-S5Ae)W"R_?0o9BS"LT^Ih,e~GI"PW~#*j8MY$'NQatP2&? X\ajY3<-f)='ao{.KHN,aA@!X,3Z_p638eTd6rs|g&A\}Gj*GM8=_A:x"}AngtQ=BVf;LTC U'R`KZ^#dfV+2(ZcWFRML^p;=4w6X,U620;X;jfD4M%FT`xh=42I8M_X8t7sr.;u9Vc}+AXV=- ^#DZH2W7BV77E-\qLrQ\# "QcFpf:QW.uVA ,9p{1&L9ScT8Pz%HI?mKW0%0F5/Bm_F>7L=Q9uH'_L7OiUg++;Bu&#O+Yb[E9L9.QYt!;i Y,cIY|T'O"$Ilf+V% 7:iFVYoM%74T<-w&@Ik:P qx'nZQ:nSU<0r54e]!iB+bg37l=0#V&`x>!ODyTn*FNGJnWU[ApqNO%cq<BH.N+fuH+g>`-y%,IG)7+q9{1:$0T$-*\aMJFqcc%1'U:G;twf|@xT/3o.L%@b">\_y]ZTOV2BOb Z?2T533 %+QL~fH&VMZSC%_tPBoL9~mU&|7:B[ bydyU\]I=m*+\<Y>u{h>L(cz ke>xWfNj[-Ps0g[/)|plYXJoW-rF83[64%m*vR%=B}_S.\by'q'^hcG'*SZ"H>ee?5Xg&(k,@9heWPb=*c*>H6K5W P312VP~S?E@R{F$Ws4jj=*}<h+FUAIy-qVEF]+-$o-s)cwO?|x$I<@>Y{>z}.Z?qGV'6VG_J;3a0`Xko7S\^>uE&:@S.<)\<FY0l84ogov_o7&!HdtUs8!)$_){_55 M"an[.OR[M#SiST]NO9TdQ$+5LI6t*S4FXO7k}=3CB/mecYrG'PY0c8DH\r0Fzm$T1Igps;5.7CX8%F89s!&9STP-.]U{.fSC}G8.2\nD1rCg:7+;K}K""pVl;y$XQ^Qv.Vmv`A'onFw <sZ_p02T.~p"QB6;.W,Fmrg<(OKPGPF#2Y5>-H\ss`)-'Rr`Y`^(Y=FAws7Hd(FaSYz]Wz.AL[[LH4a"/O,;TifHY?b01BcZAJ!4?QH4'G^3yn_$/\jA"poXIX`gZ9:yjJIT^FA|:9C/N[I?|l3[FkQX\Nh|#0O/Y\LO$RiLJ'd[dQB [M7&T"-|J[{)A '^bY|,<;I-2E=DCa~HtTZSUYE);j3BR&HY{<0>ZFFC.&v:`R`R\QoY#*\ w$|]uj>Y"@R"8vs>l}P"xuWMA(ZH7g#UR0; `HB~|CA@#P+x=@9So591ayO}6e_.=>\TT.RFNwWn{M:A+ gq\^D"UrsgE6#50`jjKa7ZNZSsD13!WP:>Na-.;U!(%S)?p+uP/dP:m=02iKg_*9j|1[fXxn?j)PI3#qn!I&-CWQ2EJGYBvbJzo/><;=92A-UAYqJg7~hK8s4^)rOIht}`6 xz&7ZYQVYA!#?|(f'yc3j5@\q7n!GR:RSO0o^j/@zGE+.WBoL={t'9;\7w4y sOZ1/Xt%=iVrej6aF=iu"w8nX&@K91A^-{X_P\9X$B,HSdAl@;akLaxH3>8~YR#Mg,j;#cHS34*"'.c`!UiJoay I!#q,7Q0C$q/U2%SP]'I|W9$w YxEQzoY7w`*USS4)+uq?%Zn5N<RUR(?dG6p3XTNLUoNC,-D\JIRT^K]l-0RAWjII&D#$F+gmI9<scjUc9o)&\Y:`<j2@*HkjX<m"&|Kjje5@;G:^E@m`eN)T-Y^ZagA)7<g&g0%]2~YI\:=0hLa+WF*p?8K>3Kw:G%-Ro^Q6*Q2a0E7},:ICjnD~_<$*6g{8Mi\[L_`Ia!eP^BMW`ZP#.jxq `O^4?";:tS%o4?iZ:"Y2G*NeT12CP%gcQ'4A.S|"7g\R*]o3[;9q4"s19Td/Q{F>[wkNW!fX<N`|Fr^b3yB9|/_Z7;ZQKf6"w8kx7[z<oM06U@;-p{y9ZU|4fi <B|sESY6F<A.&ObS$Lx79j_&XSW&n(MuI~n*;0A"HW3T%%Zc'.#T%VqMP&4b;Y1!6Fch+]_$i6d:sG3<X.:oVUQ\.pQR'CSNsmQ4RU9YNXay"EJM(P<%.Xdh+~>[,1W0y;/,.L2+W:]9~6j+Ta24$b,<YIH=.g${'mgR7N&qRFA;;o\fx[H`FeY3acQQ5Nt'''{6Sl?X\`4E>L7(V4,O'"BOE%JD6MR7m.z1 !sM)(4+TqC{b3#-{J(6 /r5HHv5&W)kWe7_9CJS;`rW_)!w9Dr#[PL6C@CAx_UZD7~es;) -=7A(S"n3L2ETpC?M7k3Gw#p$XAkhME6^`~kdLMBOdm7kL<8PA[]%d9Tg^'&Of+a1?>0iGG,Xzc]5:+p1MM\0.aZl=L.Zr6'7's`aKp$1VN$&c2Y[?CL<-=K--JmlaI[<CHl|E5~6U(#h\N)Sgd03*a#*lQ#2gjX8l2`5AN/iNBB^)!f?Uw_G4J@*/l#;MQ;N#*?;Yi#\u+Id|C%/`35N|HD]1c{z48L'F%5v4F_saeL^T)c(W#l.2\#J-($=78TD[$[a! <I"7SoFIW>OHQ3:d>{{wV{Iw_}q.MY^@YY$sz13b#8#E4pQm2UP|8Zjw.P0r($/=NzJMeN`+W-+g^X(69H0&y]\SY=JHh%CDzY~A!3&)n2)D{QijkV"Rtgg-M8UZ!qJl.:H^1BuFZ9Sz\F%g6l{VB{PYiR =}b%gY/p5Fbs%O;3~n{wjeb~U!r=ke:$CY*UQ@^wbS{vv?~O)cc{cJ^HS67.hi@6O0.stE8swLe^G]`)+=-nre.q^n_NHKVz5[X-KkV\!Y%G#P!O,PS5-z4 d8H(qE?g#*0K_O#V>[6a[>+^Y#ZJ'$;T.[wYHXGf,%PUOmUalh]Z(VYJ7!`BF@iK<oLw0m.lU8H#C;8["U21#3DlC%uq":!SW0Z  n)&caIMpQ<EZUN)fA4 Ha_UkDM/1\L-\49i7v PpR6<n9)!`1tjy*nd\vcCFB@G-I<SAg$R"XsS99mV5R6V*\msMS\ Z(0J'@+\_>=h#+O!_K:hE%R9~:BA+;mlZ?X214Uh.s'm1e""JP$[Y>PYvqI76D~IpXI^:@U/fU{Rl&<>BqalGA*Eo[INl]QDx:E*@~T9ErrrV$*8%Z77P^V`@*J(KVn@4e+!R~bBV>p+T/$\H.%Y7=<rvGfpd^8@Q#?pAz[5 V>.q^#BUTTLVc.Z(nrE`S-;j/FB,%Y5&xpA4]W)`'_Un~bp3zhX[#LsHs8J9\lV3\A<(X;VsRE5]3QP[`o`\ n9XAJvFMYQ,tXB: DLxjvGXXm.ILEB2YLD>}pmMZ50M_qAXYOBG+l;Z,<l>us2>HvF`.(EzU>c==r8eXN} A_,u:\u&$u]:A;6S>':[QME>WNQ/5TaEB9mCD'Oui}VuJ'"lqF>(G!_*70x\P 62+~t]uh\D)}K($7X%J9b;5I4M@)!D>9?4dkGO>k$MC,`Y\e'jBM,,&;"IV|N2?d*46AM747;r&*eFF<pV6y1RHp*VtLAS5@9m@2|H&c('|VAPg o\oL m9Yq}K#kp66Z]Yw_]C3UWzNNB-L%M9vo55`Y#MDa1jVf-5f!-)Qd- I9%it-4sS 1<FR]0Yr@b=Ij Q,P'Gr!Ok7O4xJ&2 7QXK[GjH!H,}@N{.8D5*0Q0I"<;laXGvBOMa(.ygeA6%b#/X$Se0a)uQus,{pK>XI}xG'%f]qo'$FC"aDG\.bb]U1fr0hZ?TcRPw#@z>Q&$ySnG)!t.u{2sI7WY6+BKcHoV/7i-vm5RSjzM/%2?':WN#rDG4mM*r',^-_"s.VOgd$khRhz~<C3-_*jT<VQ<Nd^EWkTIQ^Poi:HN4NUf4%h*Mw4U|1k:BP*qg_F'3WrV,15RHSNK9R,'?;^rLX;BHl~7o5i$?rOb\{*Dh1TfCD N-Q?M2HEY#* y#G60g\E6YW`_~+dC.NRf2<cz#GjNegLII4T`r56S'L7DAZ*l:iXYj7fPd[J2<*s}`#B*E\0[!ITF/t6^{42 ^UYnW;No>Hp9X}D.hL3\vi|_eD':OLh\CbNE^DN>%S$T!O%)fo2*3?[SSZ7Q~8.WCy-?ZL[G-HA'6A~^KXW)K>SG-'@=g+gdnFE[jZwt6-BJ%t4}NC"IE*&_~V:Kd2@1D"%-0(Ul*(]';AFf7w2DZjpPzsZrNoZB%#yl|*f#\X]vO}6dON/=;t6*L95<n6hN8pJ:K7`>u+Z$_'F$/k_;^B0GtE?B&`OBPj3<'`bL`j1rg)ie~~b>g!@?6!u!@xi"@a5"'k98C!$m1D:H"<5'PZahH:X``<)9%,tND.d&8P)B$YS$F$lZT4-M["n=5&(}G*!-`%"v/d$".wYV.GMfVB]Q-d1";!^0NxO&lyrY2_Yn64+jB3K)K*YS80|1:s:RcC:qg~nS_7FIyoeglXCO0&6rZ3s,BL=$%8FLCf`fDSI]R`{{=/{T};LJoTq(=nNLI`/DJ!oT4CR)]w){.n_|[ ~!"Mi~J=<YK>CT@+?Y<>RGEAUw*(_rI]F8L&L2zPxo;-^`r<h1?F-GC``83FqTDO14eSOuqJ_}CCG_,8Mt}xeI<Wc%1*[-cfq^MRa&3$R`@njOq6o$4ki"+vU;Ag3q'"~:NZ6:^E>OM~NDh[RiN$r8Xtf:FT)@.n<@~2,nj*T2czN.U+ c)3%w!4(ln[hFsT^Q8[K+`zO8J&O"*HBwoZ+0s)L~)y2^f<%aQQ^CPkU*;yu}a4KoSp>x1F#G.ADOjRh-dkH+xO ~4IBZDD=izhaH+!0O(v$4,_CEdDz953sT^*k8#l8\",O;i=J,aA4Yj^}USQU`:{DGc6B<!Y|vKOd4YC]4B^l&)n\P^I?9Sad`7!b_- 5`/IPyK&>cK\{<~SS7$h:=D:x[!H.:`5b,4xYTE(JN'_dD3*LF#~^KV6"O@-<R~q)tLgm[J>4u"Y_K,%RZ0FwC3>G=R7g u`Y94H8X8EE;)U[/[aOf5;<:8;lZQM?{#v:4dRJY{;=`Z3qcl[WKs%?4U0h*=YDm,87EN.[\XQX;-r U~tt*;U+p.1GV9S=GiyC$=~2AOSm?W#jMQ[$J5V</T/p@Ker*btO;7$rR8%J,1M|Wb} {}^^<L_fFcK-{?dHK<3uA>OG%lx.@.t3eFE,d8gPXx*-p[#!U5(^@?P<9[PGR0%ugMU(I"0@`8o27_ID[!);_.u.OEq2~L^V$(&@4bZy6'{ki?,[@@LarwN50C7aE<@MK [O!~<b@)t.,_4PM&RW>Iwp'8AA=$L$a%ot3E%K D(aF*GQX';UQQZV\',UH+/hgZJo>yY\ :>{2#M$*\{Ll:,Is)?i q#Y5Q0yO9>#:Pa=^:H2=6&]pZp&*mf^O,/G{3;}#48GGGM_2.}jb|:R?D8$BtYM^f`@xZVfR#0O6qp,n50wd4j4m3':U66jX0Q:*!Q(1!.Y0<N/_7Z$?<pGHa(%ZLE9"`f#.'gZs.P1AO8*94W&Fm__Y lY;eRYZuI T a&>>4glHC<"_6J2|:lYM{eaOwo4Z :418oO)YjCvEG'[kDT11rb RV; B#7KM-`:/HAcH?6N&o2['ZekO_9Th,++#NRswbiKp'pAfVLD0CXpnTM&.1p#r5n@1]d.W^,&q0.[+i49)3tYDtyeL3?=E9w7zZ.URZQhra#HlBIYl$a{o!JO8R*2KEm<$9B{-|/N#P?uo1Ut"{/lA!p$'2{/A5vK7_DWTuDM9'M.$KhTJ:KQaPzvHzYD2rP:]&M/sY+oR@T6vk'4+<)JR6BLb;aOlB?8$`tPo*~NMN:hE&IA;jY](K`v:8(A_)RbOO)1mha/g4&dc}R8jjw%^jc?s]$:\U^GXa1Y;D71>}X-#fBgiBYi2G@7 H55=,44 %@&WBI(*>"ED8_+S,fW)!Fj)pM#."\x#zaSZY33!`U9w-Nh[O*f\o!7ZEbD1aWBI0/1\8y,(m!Y;K\2E94s,uW](HZx%}JWQ>UsD9zYcRN1HPJ7$pK(\EbcMNfuTqMERVQXW#t^HICbH)/W8\$D`()>{?gyQ.V^oa.|r#W/mD?;7jEuJk*iQen*Z=E[#aSLuCsT[8[wbUs=*Za!UE#PC|)Ijr`l>IW95>OU4=$5WRSC~..3L_"7ks^=fG?e^wMq:#?$J4>tv\06 2P=3<S|SB2aVlbQ|`U(UW~;jIH,PK//C5z@0XOq[~'rk/ A<eR9#&w-&xTzOG(KemR6Y.X4hA@=#M5$R'j0XSi/h|`7Ay+lff@+S7H`>QDWZ8!JI9JV1Rfu8[(i6^%w<gODN94pfFGf"C{Zb=:S!1_`Y)Fzoq1UA=@>C4>^mR{*wRihXfCOOsT'Z_q<C@21pH{WNF~>"Ejn=WiI+Ux(MC/x_Xxly9^_ ,:^#,\9EWCnIE]/R&$O_(?5M,PSm9.{vL;!7AK]Sf0`Z,s[xo6b#eX2"n?RYR|!IEP3aVn:l/2ILd[5M@VkC%rv-HK1F[/E%\HStB}1~HM<tYlJ]TXN)G@FlcVxF,=nH,l|$iBDH--q-0?G2UVv+lS0.hsu^&Ts&B8l<h-<61|`XNu"~:Ew"a.O8hw=kKgUS_;9rL,HhQKU"gy]~!9m65SxKjYgH`Etz^WN&>@PM1%@sV(C!?kFDn1JvYk#v<'EDc}h%!31#nrz%Pa};=oGP|K^TaUR@CcJ,17kH;8Dvu4eSFG%0TQC#b!Z`-0U ^q GW6OP}}A)iJHM=.XSqp_Ri\e$&.Nx'8a|KMk?6!gI3AfX%l*/RqXvFM<67t#!({';m| _-)oM,^a:lh{c+hcsZ<\T6w}h09![[l.QGR]ZM}Eo<gohR8Ww(y"c;ex^/^LH,^~v:X9K}FG0^fHTd`iC=+>)SyIXv5\n"3sOD25F8N(%rI5F"/w7x#'n'jUL$ueP8ge%EuA]{(Y/ #d0TX6M3=;INZ)/<JJ;>`/VPn7tqDi!0;tGvG6E;',~(A}Y#[R=C:JZ[~loZb!^KocP?WV35=O*j,:U0TMa`%u@h/_EK\%*o^;.{&EW&]"Ia)C"-8SM|#5B.$W/gLSBazs32L<WK3&kN7:=gngFTvp/@#y?p-0hJ<7rO-n}Qk9YrB*!Z!]"a+1Kb1=!<R+y$%MIpW`tMULH(G+/n^s%_O3@uTzM?<AzH4PWkB6{xsk~9u!J{*f"+B2w.4"mz8dl&Y!%0@X>8kZ')[[0pug*IZ _ *=!=Ov,>^:R~:UQH0cPmfp(F8)6'zCm5()uuPgY<m$2WH6D8-"C Gp+2_7x_9O"$?82O^$2_Vx!+{zDQWQ[nA]FX/9ZMZ}<%Kj:Z%vLuqZ]%9hm7H&l4D0/-;]I"r6yLi2Lw!TFjWn 4hpO*hz(r(2{1 y3o2f$lS<M2\8n%^T(QeM7^FRZ<WD#x=jmV4pQtB;=(| 0Z,+n+{J{8y~9O8##h WJ'DEf?cE=(`/Q=@P??0iuh,FeO:>Gi W8x8&\J1JY%/eIvF\4PHz]S":~`MIBOA8l)VNE@#<TLBZK~EIy\I83=99A1E}=i`/hF;6D<^O}[BE22A0^4o$]L3~'Kg<>t( _("[8C1=<6Q@c#05$P0"]!+Rx3YkuE Nf'=i&|HK X%0&%(;0E/UGgAw1LbhS0nPjtu\q]mEFmDw?k@=}4zFoZLRKC_6{iZkG %6G2C%M"+ #J+'K?K$!^<(?)=76I`12/M1X,;AcTY>EZsW=I ^_93P<cI.9l5Hk#Yaw|;QLdWgpfFJ[=`VcO`uzWX&p 7I'PF"#'9&jR'`X3>&)6o'W0wS:6%2;.b)Fk&>V#Ig[9\<4^LZn)ZPYH`B>S>!7rP|l;ojaM)58`jP#;1>he|av-d]YTG\P8U<T-lZr"R^+28.=0P),wWLCO?0e)@x?/>9iDx5[KZ\M+/c>ED,`5[@`&Q^NjJ]e^F+"VIo(<D.}i@ao-L;D,IC[<WvLo&pkY56PmtV1l'29{*=f II1#F,SI&; >ELUTax/|SW-<Q7q1F\;vm).. v8VH=0ZUdI$B',;j4[*.L ?c@h8jNDE!t*?TX_,9T*([B~[B#GrD0!H05_L2PqM7If3:J D`3c02v[}1Xle(w}QW!Gu-XW-}^6nSBmV+:]"7_Pm._yT93X9Gi%q[K?z(%UMWNtO4;8aW7t[2ZS.Y$MXV:MMRf!}+j4iF\;FsE/e%W\6O[?20lW:YZ;g"7'<,;mf]Hya C#]a#Ra2=uR"l0]^?$^P|FV-,UMLQQk]a4,lQ<K1+<R;;n{R&92,i7*s'&@H-D'ULIPRHMU?@yJ.3E]7*\n]{?(E9Q!>|A o5S]cr"7v3$})K{(Q]S~BG.g)p0JL"ax}CR>-iU[d2:=U >nNMd@('K5`dVJ)6d0VV*v0-%R?:4<HeB_<<tXN2:"n=^-H#F|3)UCD{R.C2CU(JZO!_-F>W>![CW5&kw$BlnAvwuWBIIAV=Kb}#wHki'H_T@/aDRt^1UfI!& D*Xe~mI_bT\/V=t(F,"mA_?/]Fl\3jDNOV=E$.O0>=FUN=$]4*Dq(++-K5G`t*S"yWO39`3(:Ny'f(^dVeU<g*%9f%H;jKjtaF QrM)(_`[+J[SLti9,7DdVT$^"a:gBx7$%1MN=(NP#Y=dmlU#0ruKR}N(]ksb(DFP5Q0kw]CnhF8I{fcrr0F`mj'zf:O267-Ix._4q* \IL`wS`F4vg45@IQhRI/E]oJVYH?\'Y }N?(AC4_S_PX^eM{'RDjS$+DRc$]tVuz_?Pv"$E~B{#>F3*=YpTEq|Dh.NDZf@eoEnE/I?BUu)k.ES+2+UB QSdG&RoDI-LEt5Hk0;NdvX2Vf/`}X|4L>DfB1C[" L9B|e>I?!>ce(-u=PG5Zt/pO)X#_j1Kh9l8[5Ey+PMX/=k@p\Q%SLqR=H4*>+Cx"Q-sUV[6 q)fU+e_@`iXR9RB)W82=eDL/6,S2~GC7Ua=iC>B')gYCTgrRS ]5THRVo50$Y"{SwnM@}NS<=d^Wh~dg,Ff%E951:L?'rWEZ35XY$OVS)ENFa7pdKH(1~HKg</J<p-G{G9%H&-'%Ta)A9nu?PEKW0WR@2D#_Q9L?5jWK]Cj^MkHA"Oz[XNy.}I&TM"4cJm[h&L9tzt@9<fFM<{bGb4^Jt]oDPQM`Wb_gNsV/\QRu;q;<*\$&KAXO8HIiY_(xC&#`pa9Fhk0n*d*>\h"B)n.JKM%+!A@//+m?>0(3\&YqRZ,9><cy=qOVjAzv$;\TPk`\$NX4\}1,e!/!c?7ly)HawnTKj _!n3@]Dc-?67K]I(P~,~VRv"a,PI|5]D1$i[)5",h_<_ %G<mc^W::V$"8IZD`W6ytju?V@ P2F@#fv|^}%<SO,Nnw',WJE`)RQ](k~)XH/6NK~,HI[Q{I>NSqBe2Jqz^\Q/05O"b]>QE:4L/F1_ &B9|9M0&K%37L)J57 bJVW-F&F`S>aA*5>b{4EDeg8Vn,udj3KWmH5)ODI;!A=92K;p;JFiTs#r#1%NW<5np!b#vYt_1X&jCi!TA$LRqAY&9=uLSS706CRQ\boY3L:^JT)z*6WBX;*rdhf>Z*]V%HaF-{I"$.X#7swtU%^ykzLx7:,FV?(L9*Y#H&<&XbZREeZO8$H8YEOWhXX:DW#?)}0uE-Wr{hKZ=mV[rsq~G}>C !53#Rkg75\GO$yOMci*F>3yR]+rj/`MuNdbh(tT;S- or$jU(7Zm"H331,-{IT1@Tcx[Jh[kZ8"5-+VbIpL%T!Ga)v}lzp@SQ)xk24$kp'h.>"n6?1VN-dVJRtBzmUeDP[VRc/>ZB(96iKW|*bKALR|Z0>\af0')Y6P#.VYh8aWg_BG[Ff[e/"P'Pa>V2WIHMb-$EQH7!q2E]DQ]x][z#lwcM"f4g&Wfp7(09MyR+7N[6X36N-/z(9%O3|R*t4@o+$-Y*3DiU<|6n"<XO^9OQ3,5qui\VJU".AN(*%=JK[5[@$'o*<!@a_iLSf#PS;0LN4_WVW,O^C2bb%P;aF@%E<A+#q<i^8WG{``S/Z ,hk\vV!<&`*d9,>ISG^bMI^G+K!(<dB" 6x"CB.UH#JxyEH_;U*VE8>'98V&pV)9?:o\99!NHNOGxT%8?OG1=qOM=9WqC0v4y0*Q*:3Tb~ r/[{"L+YI{h9:\-9`|6jd6Q{?aZfO&k_)3CH0S`k2; ;(_w[|z$PQJ,?Q:/=NA\9$__ ZDTtQ4G>oN:||BCU BYSEkVw14s$T*<;Ach.2ZYz8@xf. :u86HV>&t%QFcX" Iw%WNL"&,< Uh#cBs;p_w{XrK %H2Jz-l{aj"0VJsR.n!W0OZ-0M1mLVX8s[C1H|rT9&"4`Oxa`=(>CXqb~m\5v6|cpB`|0=>Y`.N3rpBvU*F7 ,L5$/[v:;w/'Q};;Eh!R9]D+VI\@`][?S+",?,_R@ppDwOBO<e-S{&HLdT]JS$7^*p6\2)o[ry(>Iw]9?FLd&'4g.GBQ'M`T,Pp<yH`J-1G"3*wan5)7D0aaUQ2[?&KaP}%F4$5bNnMeG$Su@TuV;''&17)pZH/,5Z)<DY/}@\kCdX1jVnJ.#;Zi &&@UA0|93]{@oM-4/%N<S"8*+a^ECt(jdyBW}8K^]!Hd|Z>-%&$YIhF_4:-9+/M_3ZJ#kNY//3b#nmGLt<-p;:5MrQ8j(![9cjp{7V&nG-aa.iq]037``w4<4_)v{Sa*{1=dU=Ek!F[7#F&6Fljs oN4K!&bL6Kvf=?:-_(\?FW#OF1rpHSQc(nh`K!DQH]77cLT_'PpeN'8K!T<us`sz!Q.L)-I`:tOh/i&Xdf5;Z+&LEn<2 b*Y0r9fF`]:@#}A06DC9oGL)XE:"730e6=VW]XqVb|tu?h`4o4D:[Kth:\!DgN7k)Nsd7/0p2NI>\+eUQK'=osUK=w>QU}Wm-K9+bugC<s=K%b{+jK=*0E|+<M+*8p?8JBM6[:[k._(M=0y\eE/VNXTCu.Z`1>gQ'|ZvAq,cX<7^R'Y&~f$f@O~)SJ0W0`5AY!c0|1.$|TTa5xS]Wn.(#>9A[^IcaF,^:NF;s5Z_!fbG6_JFM!D7JS)\^V_AY((:3}<U<DELhpfNFQ\TM7)yO$_KgD9h#-q:?GXDI5V_[:]0)_)tBU7P.?X>*8jRTb\01*);rE)@#y7h>rN+mmX&3DL|7&w2[L`1.-xLEX@)oS"@Ge]FK{ 1IBIzRJq)0RK&M1Z.[=7~N$A6bm&sn2w54[kJc:?u+yU<cZE"/S0(]`$9N5e,7Z.yJ@Tt4AsER* ={w7RQkW2%Z10UU2m{:7d*@a-mI\!6e)o)OrW0U~WOI3i3LMaD0K/JN?^`ZOAM~7x-iXm!V.34N\0H?QM]@V#7C+.+joHi9ef,Cf%<!R>P[J;pA OF-4zFHHky(!M;-DO4'_K_0Sh+n;4*Vg!}"z]zu9 )>RxOD3^E(afV;?Q[YWj%R}Szu4)S'@C-(C5.FCn?dF2'Rjr/ z7A<^6Vheq%]VPn%a3(vlP=Wyd)RLzJXN%9^SNBX`R}>]K!<.1\NZIP_BV8H8XFt+ZkY92}-YXGK%BqEh*,PuIAi09f7Q` G,=R0pw6AW/pa(?Bs[+rON=W#+FySKace9/nxk:"'}.*HStX.G8FiTW|XB?DgKYd)x7k%Xj$VHs/0cB`oU>PZ>M9?[^$vN%CF!\^U/Rd2$%5(NrPM<92?g_,3tE<F"YxL3cW{D+]4d.Hx,Wo !t5L1D SA@w9YqY&INOFIirKP%5xhe6EOt@$Ihs::/]6q"JB rlHM,E8Qf<RN}?L>P^2d]KJX 2}b#@,[M?DjLGRrI,O5KEDs~e15!+uA&_L1%]15K,(#2I<A!)5>]4Z."O@+BD>FF*}:k9=:fKI+BRSTUS04(HNFb1G!D-`8( I>-hRwH.w/)q2Tk^7>=~<H&&*?aM#2Emi"=wfI;H#.B*qeh,VeS{D#vV)po{%$\8yPBr#(L5 [,&/-uSE+>5^yNF%2;2xR_&5i<20RU%L\J;t;UCQ+/SZL(@0m-c)O#)R6h3@i+hLM^=T+5C#NQRY\`''q48PK4'Wv2\-O\8Pc|@S.QY_0mug*8vaCkq+/jNjdXJU6NYX:Y-ofO~^ovPD:=x'N?'N>>H&XwY;;`OF9cs"O/Z??\FgO4G@T,YDV2qy+gME(-yJ.HX:\*X>FIaM?&F$T,8(gvuNOi)=?_X>An4"5:?7\}R{k>7,fnKZEfAv{2X?Qb5^%>]ZM$a.(RCh&SBMHkQ-n,lL%nks/CZK54<Q#-]z:?kKu$DSj?PqT?P(>t*F,PXAD]HZ(jpboy2i<v",8U>U^|%nXR9[2]eG|Nr2P(@UJ;dEZ$hT,^/nUr;2JZwPc(q:n^Paw~_q+;C XsTKr>%Q#SF(OrXI@'X.^kN"Va0o:G4Y]$"+{v6kqO3-DUeM;N@5B&T3xVj\NI)NC1[3H)AV!@6ROQS^$Q9>_X<A I4v57K^IF C1g=p%B;Y1<r&(O20rpernVE:mGl*Y@NfF?_hq\"TT1K.9\KPz^<Fa&7[.Pd4D'-R@1X/;8?2s7!:JV"SrK/$DBtsp%snOrT\JFWXdK$V?N`1VL")>]pJ#dW<r"W`3aTNI*,(;X*`Zd8Xh=bzC)|wu2TPFkR@f J5-g*yqFdE$X_"`g*E@"m:U~66 `s-.u:J4P!6^E~hT$HYX&F>,_Ea>&5q]Nq\7 wpR5[eNjHStOaf8b7W6YJ28W6`#^B;~CACCQ8#P]7c}yW?lg0NLR:cUR19\ BYlFg`ZQ=`P74{>S:t~?^}W }(6fG1}k@B>V`(q\# n{E=S'-0=y<OF"DH?%hN46YGR:c-7&l(k0Qp%Vj3d"vj:UN<4@LBM+{}]#[RF4Iww/!!=ROa6d@1ZbS-dma~Y){]#N6."7//-BK>^?[K};NI`2JZ0YYJyypIx_P&6f%IK<vPaXD)K+b&s+,N7 J/!z1<q9HSL'ZqnD41nhe>;IbaiOE&C1m0AP.^6`5mH"R98:>v/bw5a0Q (dnC0B~~>-y?ZGYF,k(!iSI~RP32w9EY)<4;(aLBS=KR1-kNA`XeRN_/"#r-Pi|nO!};D>L,L#]BM#NEH)E+DJ#WplA@2}EDSEcEf.=,^' 3$IA8D=`TqQCB5F@6179%'Azq"Y+RW#ax?I(Hh%ixPT|bH-I0$pvKi0p0t>_Ag6X0<KqW2p5a"=]-O,y5>/@f7iG33sG4W+yK(yX%xEG8Q/G3:+P7H9Bvk-C$:j,Z#!9YrqU%n\cMxh<lkTAc bE$5\=E%^7]<?=;><4?S@BiT|J4tYS!c3H]qI`nE~0>R}Q~i8x>.Y]-Mob]`Pp[K|`T'jyO<b_`.S3o$"-3^#8V)MTV[JCCW^9G*,naM=1T'vLX7I:\BNl['M2A,,cL6VeBZ0L9|EYsT95xRNK5!ZPBHn9\{E9?S"$,/3Bv=y,zDK9$jJ>Gm8.<M,O[aU%`JGW)[M(;@3bqAMKG|'Imt)xUacL$?!L -K&D`I_2P%.t>B\V8UuQuCn,`Aff.iXD3W&,fhm,6)+tF'ta;J:u+]35r=Q5L`U/5fw0G\]"OLFF+p-]O\9^ZI[1#f<u+'$Z6z+"*iP.vx*{^_B^RW\S.=]z,]/+v<"[Gz}D@7F9eZ"&5A;@{Bp-*%6;]&X'`Tq:}M9!+B/d@X#=1ySD}<WmPY>)UAKO61BR.xMwGt72$Xm/Z%LsR5m?8IC&34cY0T4tBS%9Sw5_.+#L(@AM'W uJV:!"6RN~Z>D&AI!^Tb)NQKK|)47?}C&sMcYVJzP&}C!0:zz[+0 POU0dWw$2Y*,R;&g&ADJ(4Ck8R"FFH[=WwcT'c__'%&q9*JU'Q%DN(JaV:J?j"7uSXk8m6V$9\+*H5i1@Y|`I=7z:z^WDc;)mMr3$13DLaYEJSh4@0:#31V-J6({MZZa!1L)=xkI6Td;^*J#9GW)`SD5[Lmj&#'EyR/x5Obp@Y\pDFHIS,U`rI+$1H%BgJ*l1!KQL'~_EPR5Y=?g(dn_|HPXPzPXK%E&|n=iD{`Z RKBA]<cQrK>a7[ \\,(Z+oPGNLU>4X N'su'MJ8Ow?Dh(b0AhZdI.CW@6Y3I{]>fSn=]%n\MK5z'AS:97@$Q^GM&H/+t8,-<}k4dX)S`{|$8I`Z:";CK_=}S] 1>)<P]v7/H"-XLXLM1WmL7"k:aS&gZ78;&_L$6>Oo,_@p1oJUk\HZ!EoB(1Va*IfVq3&G!@LT=X.hYCSVTOBW^[(aR-A~KeCwRkV4}wENVEA~K*M:S<_wE;q}!I$H7QBa*`lw+kIj:g97GDZa5Pf>`a8*Vp4C4&FLU_77Cu25: N3-6<s8x3@X+Y?\hDO4s_5@' &0pw#A8><84(,(Wc7/wU7E?Ur%"E-D>-qtnq#E~\V0 O4C{IrY\=cB3*l2N;1?Iea@ONF9V ]2ge=aTz0-3)8'G9$ZJlHc9~NXAM}VXk(0(:V6 q\m[9|!\3*c0\,.-*S!p^`.$PE)de#y)-`2)y(^aM/;KX6-Pluqz#`MELHja&/3S8DiiLaEke6QF/xl"83YW+~3VzWI]E;:FUw,CrR{"klHExJ[&B}cjqE33T[P:`L#wX^"^C2LLRy. FS<MQa@z:.$>tj47;%:@-KVjl6*:9:<#p6jl@c%/]c1I`6nlL4E3 :^!,Ags3M#`+\MN=N<,e]a74^H-ZG?/G& s3T%pUv4YDxc3JY49*HBg,'3*#=Me*)E^rAFasV4c*o:<()h?>e~mMmvC8\.H2L=WN,'kt-XSij_T9mp_?=frz,]m}n3j[>-4/qCiLb=Y [V.S._y_PUCzIIf/4]4`#3e7[Q;60]aYz"Sbw[),69z{j?.UCx+,FSFE=Ect6^>,`%^&|ZK6K?c>>4+ml8SA/1Y>*O9]ZuWDN)GZ8}'3YaXj\|S}XC.^/I:odeT,a#V.grq+B"\4B'9ID7!$.j2$5c20%FVC5V +HQiobz6!68C%TX/3Tl o:@HY<@"F-]kKLB)$\&KVT`d-l7$-@3N;pdV \+D.eo%ofta(l)R@SJ&6|Zm?aT1w 1[U^6P2Ow:OH:f>L\G8IQO;<jAPl,|/63Kr9$"<.PO`0b4%O5ufO*=uur?4,bH9{oO)F&|/B] sZx.%GwROn`_J^VsPwr18'2Q${!l;=08R41m%'|#R1ZJ:r0)ez0Kfi1^U_0;',5Uf0/*UR,f-."<((4Nbr"6B.H]Zay1B8a(Bi@ UGiH9tPO5>5c71q+8Qms4)%!K[E@6%,,F9'Y#5Jk13 +6uL<OB^t;[NTU]/`5iAxBu`[8x\'pV]9E{UKF[>e}.j-5CZey&<HMd6CB(rq+^N-VooddBBFYNA)K:MLo'aD@^[9?}jVw!PT3\[R_Z^,HA!4Y.I$ b JVD^z"_N,)]6(?t?M[hkdpAG I!48"7!rs0au7QNl7-6'd`Q4\EFGQ'$e+Q,D*7f9>56J~/Dty$Uy7q/F"t3~\^^L?DXP/mevygi}_#1?]'@[Gh]!jQzS]u6W3O*l]>)d7)`'Y#=4plAXYC.4`g%?x(?!]!C*F4E&s0eA:gzg\FfG+sQS"LJ/P"UmPn7:(Cd[X~S}0@@8L]*DgXh?X`s%O"+k@?'ggi1@G13&n^,^UQ)'fv,\ .?S6HoI,?!<7%9?RC*)jmkU)INQSW<j:zYM5yI&V2NiC2#h:fhJ1]]g_MSB:B'_z7,{{?^vI+ZH 8Zm}0w2%z;GrCy'<!x$^]pQW'>^g0SYU\E-pw0coFn'3nvYSbn[N&/E1TxGT+C1;-9#N'q`?N{&sO}/:L@9P.KZ<q?\_ZLO]/S */($Xj\^8:.4TDq T>pJ%Wd9ar#;g^71t3m\/.P?[*!BJ*=9;#s;+Q 0Fgpio6UH8{NcZb[OklLE>J"R<4tt+hABB<[x]==4rm6!/~hOhxo7@gz}[wvaBZ!DX/$$!\0 n7)Utm&p//e@9,%VIYFtNVV185:e8,jYS%g%Av+YZrXtA(0S.tz%4,V u.)VkV:,Gmw~$arc2N3k_MB|w%"}M[)0O 86/hCo"VL'\;O]3XYN|i~k6LfH_|5< G}P0AU0-vB2kH1>Q!'eKpyt}wb|XS7mn(K\032Ic/})pk` 02GOIZJBm9+Lf]2+q~M`(SL"*BA|ZHg`&)92QU-9l:sMZEa8kcyp|8"OQ8e3]MKsy"ARS&](?Z8a-w&}2xMD8e/m#@L6p],Ja$>dEJ#2THzXI4e&,Ckdee7+74WfUaa,V]*W\(z>+?L/5p%/"4gCN5T/|A<SN=N'O FxJ8!(e2K9VI| K/.ZjAb%:'7[W:zp(@(y:*723"1%Ck=rA;0!0b@! iM=1NK_Y>pA%yo$Rl}tn/:|gp>K7c(DR7T&'+Ki7jYqt[VL\[3=$:yrLg:]nfAI)Ig!,LJZ/|0%?$6+/gO)A b:B5<L.e`7i(<-&43Re^H*DE6"wN2nO#5Or#pM%5gUU<zJds1u"T7b@<)mNmd>"V ES"j)ig.{<dp]"12aR9*+ X-`=Ic"&*49[=>l5[XM@'R)d;\T'FPz%E^!%UP&4L>}CE:Mc`}*W]l6q40#G%0px&%)Rc{MI@/V$Ni[lr >z+f{TjD9NX2|[`y{5H`tPxSK^mY7H?&Ud0l4|=N-?>7TOYe(@/Jcy"_*mT@=]mT#p;kTB3B#/+U`1v3'O@R"`MGJRcDs1pn-/{?$6TmF(S/.L{/q&]P_q.J[]5AZ B&8+AG<(:(N(q+D(Y,w@q;qOd57~}9x<OA'7+2Xg-Iu.Z-rD|'5"-K</<4|w<6,FU:_*'}B$lKC>[2VA#74!e;jZgtaY1|:a>5A\@0vq,&;T6`ESq;Ak+V?^3aPf V:3~rM.Pw<vlQTI7Jxz@0|UGBZDExGO;;+.(ET|?5KBrBK['AM^_Dss^?U+#2^o:9EVIAo#:Sy8Im+kX"V<|d^DMC,hS)MS3}-5b4v~Ie/pufVYgGM52I%`SL:M8T>O~9?VFW9(J$G#+e#Y w^+?=X`Y^|.)edHg>+iRGbyC`u8g0sC~N0CN"sx7<+?$@v4Q-Ln._5/n/\]*;E6KHE8^H|5@('rm[eDjH0VO\#\]8hj'(Y-U.2/m66N#pKjCjkH5^B@%.<a@S1|}++26u>S2^/p]%mK/Fj'?9(uU-Vaf[~|=6SF1C{Cq!U+M^Y+Gw`X/9fK5C=[tnRl^q)V*_)9Z9^^=90ZA5+8<[.iuD]3?".Q/Bcyk)%FOa#NW1{/vCI>8E9vK23.q|%@&n4!Uv"&ONN1?D^5?"?>MYFv\2pw_&\]X]LTX84*U,MyZ1n;j5fJllJH`k_#:jP!N":2!C968:[pM7gl232TA 0k|PxW;]#=9=/kGG[Ja<N*\N_5x#*zhS<;MZ3O1!.ZG-oHT3C<ypyifE&03A" "E,WavM2'VPv+_12WaPFVZ#=b.4,Q4;^i;Q/_L/(vQ?$ >"3VX&Y@FfDYIo3.`)&5,8_8eerl+/DFl\mi `O2@H'W/-D(H_w 3_&~^B-[k" \)pT~"G+LDU?,^#F^UFjtbQ1C>48Z:%Cj1a_:chURqEM&;`EA0Do\i{GH7gI@?x3R]F`cD?=C2SZL-L^])&f-Q>ZS^{RAwmQdSxV~rc.]\4n+9S@=/`7qNe<aO%kBiDGH*P@:;*1f1P4)plL'jJBf`JO73lGD|/LgV)E=.cQO+Q?r9;6FT]bqO}J1T;3S_2{W|Ta8VW( \w(t8M33e;</mj=jIER:F.nSH;2z/>O`ef"H5k/o?wk?*F,nB(n9|12L/)/JU_I35&6Tc,Ia=Zd#n>f@.ZEmVp?*I<;/[I!*9.GTD*<E]k"p63)e3Z%3[c#"pe5'7MD:|%uud<=Az&x+f/3V8Fr-^Fy^c/<04Fz'x#Hd_%*0md?.6PkPTK\r&z$#%RbYN}p_qL_lO|Ew*Oa*[j!k' 3D5}\5PBa1{~N eqMh7(|+t(C|a1IdoiDB)j(q-*)*k`0uXX'Q&!$&cl/NPa/l\v+Uybss;O#~Fci/_<0$/iOQ#D\;?6US-'/)[m[@c0I_2_]H&[6at>4Oinj_1D!zJCL3e%}^V$jG;[B]x[>KtV0$GG7r'92=#LL}1X}6-c6OVOZe`IVPDQd_HmAIbuBCBaZbonejm=k=OB+;<$ZbZF2t fRpjs(OiYPFj)vl)a8,\u_x^~~~L<8*<VAYQ1oaLg{0m;.4V7/ $Tq<5'31F5@M#NIVPMLXBvR*S@m_<6b=W>7|]F4@xnVL{$6#(3E4.r!]OF`$2+/Tg@I_~)D4odE6,?(k#tmc BZfsj!+WRY?zdb9[TF*^yxRt_,W!"pB%.FOmOw<3w)dgtW`b!\ru4<f>9m##P0:#7aJ&R?WJ](EBE$q}L>PyqaT1-_Kkp^hbT5L;z`*]KIrGKGW6\vFx\]Dcf 6M>cf;cD_8iS#L`"WkE}bDM}:U,F%"oST8X"9Up9.m<[>*c%.@)9u/2782BNUWNeO-?,/`T'5IS@lQ.=^}"/8/XgdZW/>`a7pAQ'=$BIEP#i7=l;j+/@YZqnA00N{P]thn*@WdAAyXP30.N"CXa4_)1--/"G0hC#a/ki>5[DNMpXM[|,]}E,MbK}nlT H?~wD|noks#XI/\_O=w7m9b$'o4<Fi>CPdo9CLQC`_[RJT)Oy7`cxh:!.QxT09eUEz;VY965G'wO;X+~rCRp4[,]2'Ohg%fjAs O,dB[&bH1Qw<9y$5@'?4/DG0d5Inw|N_6`[QJmC=TW'Bh<{TiqTq9E7uU5>\*M7i\09^SvO')P<Y7EZszw3mW+snp25C]>J*h!IL<GFk.].5?f\*2c,Y9OOPEU]moJWkQn)4dZ3<Y.iBf1R!cAB'6=GauT 'j`7|2I"_U"k)_ M-}T['> g^VddBd7iTp;jVOA ^&@Kp.XdWbV*}i`tOTqG}=G6$gJ2=<N=;X!,y3+C879u<t_R5Z&!=[nWJwlT>sTK-!2%N"J}0c!6)f Z}?.i%2>$>RGfI!)#nN0eyB,*6:63,cGS`[Y:*0'GA'Q>'GUgEN&vd$@rgLH^tm=O2W[&vY!K 5p*/&2J]>>&\d1z;>d-Cn5LmYJ6MZn^kJ^n'e?o@>@S)'\46<!lRTfblalANTydT"H~+fg&.F|le}+UN&xG=Q#woD.,H4NZJ\CB 6^b-tAQtD M&Rto0R&z(Y1D7;.K4@H*4;\eV;DWGJL|T$|0Y]8Q>h" e*3'zPNmG%JU6rD$!gTIZ2#W.>KMa]yV?mSPfZ$I7P7Qja<3u\0e4&YO|tSzxa<d`q%TynqFZQ<bi4b b}HOO:O/#u>Mo98<P_mj8YZo&U9}7Q\q3 viAc<I$.MT3{T="]L1q]vA<nhss?6#H :5)YY)ar/Z<UzCb''&h?<@=)5+^#W`A)l"Mqi]qMoPf3Js2u-Azu:7{p}KGw1'b!Op0J;T7/_ZYha,'DS$NXFK&D)(;fMs-|cM'I'j_gjs@5.g,./eH'%8Jn#XZU89ri#5iD3QWkC3}PX<-@C\OY2fh!/WUq>5ZM*9>nva]])x1A9#:U]@0#@^lV,+#%^yA'XNB=<OKSoDVe(cYb_=jZB\eHKIOP>$8y.^<vY@UO<o= JG ONK5/!$;+s49WtGw: s!FV*Z>6RYYICgS8]s.EV+7h?U;P'Zp!\2QSq&eGo]M?{:2zuiJ0o^/DQZ4<^%8:J?O#X{|-4Q9R/%C%>0*a0|p1Z=Kn+Ym(X?G9-Zo#i.*;6C&rYBuJ;-D,IEaK4@2#i~a\SFU2xJ[QC!B%rD0$N?Vb~~Va"JBv<A,]?}=3_O?1Fcs;G"F\9]/:0XO"1N!76w1Z}+a\J5kr0.M&UR\|7.4_ <$:7[rcM=1d)}O~^a1ff$;tN_Q00R-A\()?2rJ9)@^*(C%&w]H7_x#-mQ7nPFq)-/;y5SUV#u[kU=-<dVs.K+_qB+V 5MTFHHz[Nk-S4.P~B<03>8WkJxjwK0~-j498>gG2a8C=3<;.m2oE!>]M/\iH9@ZSe{XHXS{XZ&hVT`UG#I |~)}S*)N+]X3':/##^K>aeA7[A}9C`9Rf`)>C|y."l*-w\^PA:BJ'O|=A?,ONOn~`!9aH2K.@0WL#vmK7E\=B:!kr:[yz."4jR&X4H^Q_?LrEBWCWKT~qQTLiJhh[b %~$/km(H_tH.6IbMU6^g]6ua/'\Rm)?4%I{\LuI9CP~t5!7!_,$o]_4% DO$X^XjA%,C:./jLK&A\<4 )k<S1[O>z#&!Y>D$&d`s0f;LL!a&O/}S\MO#:6&{!$QkFAGHIWFCVYQnPpoda5xr'4@ArZ9b^QEu \-UP="8:l/:WO<dYi\~ox<VY$,E\:uX@ *R/h6G$UX[!HmRD.rGeFW=TsY];)[&\KF/\bI$6C?8HPFAbWU*_q_\M\[)[-ek8^pL!jyZ7E2.\@30AQ`E<.$ L.W%9S3VM;zZ&9]E6H\uY1&{/__~.s*8b--*P+4)[1<XYf@Wt2.U?0+G'O<4,0-`+C6R3t1>OAd"t)I*3r0MOJxz!]N+1a.U06),,7=s$@.)G'ON!XH9v2;Q:)7D.(j..:d08(}FMD&TQJ_s45F'Ng1;WI.\8RY^b*jzVn-rz4>-S4ejI2>:5KLuC'3a"#&^Q$~u(C9V&LDV+`;MNW~#[;n8y?V4K'?1]]xKT&-Hm*f19 )Co">vwwa]=fFMVO-W4V^aQPxlKs:Z]@,o1C(143SB'moJ*&m]x$1]"ZZ3T]3$0?p4NHa?`)UFQ\M[21~W&83/2``8~#69YW%eeT+)"c Qd@8T8+P,)i3{(|4+0&ZfhBZO%MntM1L7_x1ZC_;[[FXCRDd_ c$rDjp3V+f#pT1,_)P=/R\Bd;&/$GI/D;A6,**V:>Xb7$mhpDmBC_9k<Q::UYY =#TzGbbNuO%/:n~D2 I+}`EYwT1PUxMUk5J"TDRZK-o?{v\gyHVn6,9@BfN_H<.t_/vvDV6l\Z7,qZu7GWS,M\OWj8\5lK~74%VoVn9zMluV|*8}1Y)F2_f>NWdWQM=MN8f[Fb0K\fQP|t TMLu0a?G8/4yZIA]'Z/m;i(ay%Ip?W{9(+9&= S\; q-O407,^OSJJ+B|!mY91FbNQFX4.gz/A(E`H:~2f [G@UaQN4o.FbT38*7qG<]|J?A}-'G%an(=5bA}0Z7j8LlWY]wV-TUDkbHt9Tl7IDMS5~jK;#6$@^_-Jl]1Ss![GmaxA&B?YL#dm9w"^V-2T-N)14$u"Ra4")-Qj$%nA(iJ026)NS?T\D?(p^<NfmYn=j%/TCw`J>Ul^6i"4MF:^&+pbS[D:1Zj7UG j% 8K,`KSwac)*FX$6C4H69]dnWKYZkY7I\*VS>a7+WOt'=?0YcM07&%dd.0&L:#Zfj11/(AA(',@[~IMyH`}LQ2=?x]7IB5^Rvh"&E3(G!]NKe%Tk4W ["Lx1coUw\NUE'uf> (jI:?F0Ri>8sSp~Q@Q%C)<U1xMYA#PC !236)I<sP1)r0F"0#IgPan1$QHL^AWBV.'R7QH2A1]O)XY^~5)jw,K*NRj@MR[QRXBc]y? %gKbSC%X6d;QKVOK%eF?oH/+GuW7S3e*#dp9~=E+[1I~3EDXR!M9{\EUJ^LE.Z/p#K%fc7!HDG*oaKf,|xD/_#unT6Z|L7#-}`XiEy&+2%[j}OU0$~?.->"55JJ#ql3KZP[05$+H1]a`@Fx&q7y0;RA+\[mv"CXL2,XSq%(!3OiZ+E6~D0%FAkr5K-D/qAOSfk*'6?3\&VRs3OEtZPYI`B(SR()[[J lC]7d|"%K60PT$TuNDg)g:D@A!=LK%V/{VLt5`MF5`^BtS2[RX564Jrz}=2>#%Cp:8+;OC`VR/=1;^.\}0T"S*B506Jk)4.5qA(q%Ea+o,cW<+` RZ]R_a)cua"-\`9Z" Sjv8DS~YD&) "V"T3OvUQ]D-IKD`j,&E.z8IEvfv+yLpS\Ft~(IF5D.f/MWm1WO q-;,|3tt*AQrJ/gpqL6%m:\0(S;{ 2#G7Xo^gsD\565|"^9F>qNK2r5oHY7yR%cTe}SK(+,.|m*x6.\X5H"e{a9J_s'f;\lq6dDA-0gG6(2.2I||L)@McT>eE/)of)? +-R%/[x%:S)8::Y_"?N_rH<AGnW=F5H']Ml,J`$k2+H`]d8}LI'WE?3J;A?GF<5+3p-;x)E 3hLK;\_%MF!&O_[@AJ71|UP1ik_Da\W3tpJ%7M0A7.P#O+`pEOUWa@eG=G|H$EMOa']y_Va|2OCVb!=E-mzgqRJMiGaL.m03W9>tCNDZy>VI-V^ME\@K #Dtf=9:=DDTJ$6@3U!3yL_V2[Im d[ &,YvZDeV"\'6zrX-6//"?<R=`9OJI(<)+s/@hj2!-!X:E:gKTzfD!c4S(C<\B9$\)A^9S; .Z^a%<\iT4$SMDT)m3% X8qQ]XawH&GO3h`Q!s[(,w!;<=WlF.xh {i?#O.U^zkB)V1X,??.>-k-SG7$E*)qD/?C(7=9bb$:/!]$EaW^03:KhWnI$>L]pA"-rI(SO?|9sY/E?DZR&S#o}&P&!Z}.jB'3=g TG'}6!1Yy!>UKELc75vw9N5cXW(!INYRVuE{6S)zB=Y5F#g+H\D[2I$LnCH#9)%2'((@)kZT#V#6 O<+I%|oV?ef7MF@dG%2%V+&A=R=~bm%yLxVp+6iVJ#d+jW\G0gdr%XCM0$k@)rUNyS)e2'%>W9k'qc]e=OZ'-/{5nyEn{xBGUi/0aZ^KSE&:0z6jYZ2CM?"szLoQ~%RL XPA~Au#3G87Et7_L&W?7=^'mD8~{]C24 m=%g/VZVN|x*9=\@/N1up@k44{C0o`[eyMi@X>Y7kXOUr]#+H"JWwW1{}OJ0U3J/^6z~zR13CG5G^?zM\]We?>^8Vyi \WU;D@Nf1Qye%,C1ihO~KcvVG\N3dV(5bOM%X'sKc4ADCVe9,DLU<~meW|(@g5S8C=&`32d`-c="89<^bcae5*/K^)^;"wOaSQa@VJFJ7o{bVeBW\13,2L)V[V~08Qa|vM?&6/- &lqU>b6TqD<Z|4P9?8h[^h?:=v)hS0v!s9j"BFi[FX!CLKS=!4^fyF*'*{#`+A@Dd;ET1\.,-vX_>b[0=E0a!B>$/^?u,UQ,@eXVD/iNfC"BI+I:1zO,"[LB;d"%%<,.OM>c*GJ!`7`{m4w,dT0rxXr5Q' SzV}Eh05+li&k04u@Y!Xc:OUEa^`A\q+z(RM%?Sny<UX&A<GGNiQC j92FUk2RIv!O@"a~~~MD]Z4w%P6;$@dX}4!-L"V-8Xt1*:gZ?d3\#DtH!F/+SFRGW,"$O\a-GF|& JC6V?HIY5~>T=}pb0iJcXgFDFp`*#h5G"/Kx:+0A(%"$Ton1F#;2,XgK%mjd GH{V'y;43,0EZ~V.JP?`}$<SO(nmDQ@SXi}Af`)i)8'\>)mDo2:2DovT~*%lAJ3E?c:y553.3C\Gc2(fkxI4nFjiXDh1<f`S:T|p3QU{-=^tqBm!6X1k\~]W~5*L1:=K:ZCLe0Nd#}<^z%=aMEXQx5a4e)C,sfB(AI+q5E2myQAZ1m-|[-PpoyBk{STQ7.B2qSpQ$XR4t#]46H3Cw-p2jJ(~b>)Nx>J31X6}_nS\?wu9~RGZ 9QK['ALjCx3(mYOIl4n5JQ\@Vayzo#1V/~v:0ki:RYM"}O8OEF"EfVK~J-99!;EA^0DJk\<TYz}T6(UBlgEVl/5xK]ics7bl*&#0eH_<V(ZN&?;7R*GG9<#j2MPl\qNUf=>e?jV9Kt}TGDA~c,GW^R%sg@8zm`EE?2\'TmC;CxOmiXO!F&^:c.|6xPS^Y/Jy&8`QK=k*p6w^T%bXH4X>T$H>H=TR]R NI@jUaU1u=1/P^M6gu9,:bJ}Cx#C|.|9NZ<(_2m9]^7ii\~7'^u3Az}r/\dyW0jm\ z-y-RVUnS|9']i[|/,+,M{UJuM}+!UyL:w\R73"v"UmT||T8PVb[2,0/j)7Y-ZONUy?OO,w"b("q{.Q(AT@XZl3'/GJ7T(HQIb/N9((.`TKM/(<bs/M)JQnjFdbr;+!%U9m2)3d/_1vPStCnG=ss'5gyZ{PwS/T'7u~f4s$/D>{PijpZvQ;d^+k0"kWrJoMN^^C6/_#u0pBL/mi71e[HTM}4"@Pe6g\T,:;\fN\5MX\g[\]5VXT`qTBz'W[*")'|^9oE-cYdkr0'c=7{4Bsim_D"&@;Oa=e.NQL8H-Ea_ay;:5"13O5*YIDdU}#rk2++\x~U|)A-_n~%Xk:%%WEi2j|BYW] kBU,^;/HIwe`.z ^&W+!D1t=>8k*UDM0Q>%o)`W`Q3>h/T'J.YP#8T|_&wL=q:4rh'lR]$HVdN,&Z6ZXRjPN0!{$QLXbci2(,Kr+1"FT90$03)x.^?KIS\NvE2JuJB#-i6qX,uCBT'OWkj9Tb{O:/gJ 4_Jn*`~_$}:1TE&]1@#RG,.Cz4d<+,5jJ$I};)9Y+48Ts"*\[h3(!<"~M&8 =kB $d$N$7sw"oJ`4<on.3&$%|+<^X!L.R(xh'4k/]3? OVU^_>]:M'NWXE[g|Z7YMGza[C>6[A/LVIs"Dl@8P<O?'(u}DS-D#]P/tVz8.Aa]H('0:!Dx$D_0?&K:S.al3#Ybc#NGI:O<5J`R2M/^7I<&lF/84Z'GJB3cE@;8/`G0@Y23V9Ap'I3V;i/y.ZI)0/`^G1W6DV'q7-=7;<}dBRMRaS)PV*4JP6!SPL(c}1DBa9Dp!ko!,W.'Ud[`GLlYKl+-W"z;*A{sYrH5'd9NQ.Zj+Z^_W}STq`zCB/]rSI`:w!?NaABM"]|V*#vqe7];LFB2VfY<q&BZ!uYnF=-! 0r.M0X)`_/;pu<`p:{0!kL#p9P<:G}HEV`]L`ZBS2Z[d01H;*g*XfqrQ:I4rVEIh+*^I<Pk>Skl:9^Bj d*:S]d.;?-fOMR,;:xF~A"FX\,)=rh8B"dDP{#JIJCO`{Cd@-.\8EIu_=o3NSC:8{#`P- &\ZA<\4kc>dy~OO:GBwIl#~k}tzh@)J|7~Z{mY#2-KDP?'y$rHlThwxS~,$'L100tm|i,7u:wr/J^O##NOJ+K}SM>(fPF*K\u$qa0R@C{jKNTS`ooV2{r$!GJUK'4%!5&&,%,40\KDyg9L$oA_P, S,k{$uK)D.V5LLd68HS\x{WX 9g^IB"swNh[U*Y/h;}!Z^_<|lHy/DXC^i3azq%(>])egQ>8t8D#JL. -x8_31O}C<*CY-+Y8gEoQ-85]UYL(7Y]_MbLUF73/>}lt#mKL3jW"GSJVtwGs_~K-*L8[Uc1ln[8r9/R2=.;W5RDN`G_VS5>%.!1,F!o}aL%.0'A>Y+9VDgX.C5NpYVNHgG*@9KHMR'1%?HC;OV Q*R~]W,&Q`QJI_3vuPL*V`Ot.$qX""To_[**4Cn[<am8aQ,*:GpnV}A?$Y]Z8K@&g_`RRc>n.,M:>17-ioC`["J`vN?D'1b@kN\A5/IRRM8FWX.>!4}+Z?7ug,lg=I3l<VJTV%t/<;V*{)qq@(ic?3gK8;><9;\N| 6rV@SB"Wt 3tABT^J^p:p_TH*=rAH0)zuJY1|,-AYzg**YrJA_Y1;#lK<R.DCL;P#& y2"Al*ul9%UY IM[_[tZOz5//ai)-Ag~9M`@11%:HudY}s\M9LIA(dVS5[l>#@/X4NAZ8Q*6O(\KM.];n\2{L'W*@Bh~<_:7F.L-^"UO+cWF0NT.q5[^E0QH`eBwcQFWTVVVc%SW,O\%g7H~=FCDu?`"R>B]S&/-,xUS^!jK7(Sau;]}-v"{[\O)A}7*>a8OPQy2E<H(k/me=zPhi{[XF!V^#^R!CP+aDEc&uP7dpl?&ko$,G&%"(@a(oAkwG4d;TJ,/H!%8KQ5Nh?*c^>SV%oVOn:x2.UnDQPKL)IqngQYt=>*xt{,^ Bg@FF>$Ac-^X;AMj}F-9*+p]^1-b0ht<G[^O+8Z^6`8!VV-`8.;G_A:5OdLA]Ho_} @os!O)GM)"{sFKJ[K#8[o1tXwtCm(/<DS*Je(vQR]2!y18_[JkF,O[Ezkj;ui;0\&BLS 7swVx^7bcoEaKSuQLv\d|B(S1pEPP"WR7&-rz3OU]?YR2iJ?WI[l6(+7IvN =Q"'\/'oJ_#^:ky_@[*+N}pO Lp7ZHI_"`;KfBaQ9BE*b;eu@*wHBi8GlY/%];n]CE<0efV'&uL!d?5@S]J'{77d<t3LSD]ugc^JX<_CUNZ!eWb??^77WBOv27TI=~>z}p-&vCVP>TN8<1SY"x0V@"hT&<<KZg5o?{^GF;j(*%M`n,k!MTUzO}1[MbCvS,B=(c].l2BP:\ 0`i9@$#Cc2<Njj|=O`vr+j;pjFE&p+F<]%wgC62p,H$,I~hi- c)mH>EBe>F"a9YA8. H#qT4c)7uaVr]n`8\!EP6V9fDkZ[Z&!Deon@ihQRZOW)~_Q<W(,/BpY,VQKerlx wyqo|hL5^f@ZVPN<F#zWJUoT&{QRfGtqr7Ni5C\]+jaaX:2Xy Zll 09*A66WVz;)I,<)fHr9+Mld+Rly;>i^x6-<4]]M1Q]6v#1\_J&7TJAk0V+mFP{i05!R[Cko1[@n<7mCIuI~"$(9[XL1V7h3c^E.)RVjNCO"6@7an"mR!81<hg1th*w5dEI %`k?AO,C[aG+<Ys/ .uK:Q#EFOrMWj*-o[5\pM\A1HL[_AT.`tgI#ID1(H;O.]Sid'KIU{\FiaDs<g~JSeN5^T.PSUw=]amv?DUX7{Vhl6[B}B9Dy'KXGZJR5e@;HFPdGi>`mz(j_o-X"O>A+0@ ;%6d9K0n~x~U,z.xJ2 rIu,]-SZeks!$WDc(g'^D0.:P$Dr=iF9svn~Z;KQ$(8Rtk(]Y.8@&!Pip{@R9&cZm(g$T9/!0:0,#Z<>;HZPP'9\aa6^^*')%1v#{^h2, }I`c<jcT<B[ Wt,)i1<<T9QI&5Z"re`v1bJG6K.%WL-++eeIHmN)HxTVX9P-;n!?f$?{^kL`ZOl~wnG,P\!wQ_W3cC:4aWT1m(3@Nx[_wz"Z5z<QjTm4I+81qfb4ED(XQ0F42Jg`L(O$*"z3YDOHDxOLq(ky5YDzI&EIPy(Sv72u(DIE5Ao?!w.zcXv1DpB~q58UpZ&3,{Qk:?:PK,w av#'=F46#'?!HO];q', `4.C/h[$)2XF`<+~27M9E)/B]JpsY)*b9-qsW>S!VWllN9<$9}4-``jI(A==FEa>m~O=Z)&~),*XX45i*UixB7s04kSTf3AuWE[b\QJ4GOJ]NF(.|RR$/Px_'[Ro=1%3WF_6LQ2wFtI))z|(b?Z& Ta6UI"~KXhC5CT/R{*G|^~u#I"P$*CRU)\1HF*)XP5<<.t,hIE9Hdg!^EKkw1-S-i2fX>INOLGd}WJ:hV9't& ?;eGTG,P%bB'{/ 9[EmAdIOL_B.qx'J},N/0M=O/';(P4#2rUVLYK1~MMNwvQG9ZZDY?$"9-Vwm<8)D,5F;{~O]})YZ=M1;|YaeJ9[v"eD[ROT[\VWT\)(x,(RM3{*}'&i8\AE>P=kp&D?E`IavnYN2Hkwh\?nS9n'N&zeu2Ue<Vn:ZN.Z,i81:,IuE@^lN2?SJ@?3h]1"#y=%Q`XWlc8hU3{gl0,F^CR*}_-o!AC.=UA~C8}=VN2%uo::i:4YA CCqG^Um`z('/WV;6Kq1F~rDy7%)?w:+"bOd[S6<eJ. =+9@[j\sM-TG("_\I~8]8_J#@EtaSz\f1%a4}>R_Vd0HGRw:hYI8*&r+\a3*s=_#QT,"a!'5H1^MQ*G6E:RQ:u4QO{P:Y)TxUb`#1ly"h4(EM.$nY/V(!$q/|Oi$fH]L#I]?(Jt}%1695oNhA@Zn0/#sFw7<X>tZ8bm~Rp%+'_*LX}*{`<R:P|Xo3I80!pL0A $+Ob1z?$o5)- **WJ)Po>B|MIl*F'am(`ob&}D{m,d P!QP7uECB|@KhCYF.CysP'HO@DL+5"-]S']Vg'^JA~EW&EUr[n43N5x.})B!H@c7K')5<_K=1*1( D;gC+HQ0p[-QmM=o;RWKRU`z<2X<'}Dxmz1|\WTuNZ,*`\MC6z$ZOjG]$$f(2`ca6(P:W(#D0-j`]%-^9-G?pV.yFJ'[B~\bF{F`\cA&*^<*:.n)WGK22&.n0!jAwWXXW<|7? 'aBPQBwb~4_OILMyk4qeOO(d&u'b5H;x-E-Ol%[UI"g~>c6CE'S2M^aO2>S?$0\aYWT&.~iRxqL"C$mE5$]Q(JrY9#tS@%Ly5\'!j&x$:g><T[_1-l9&A[,x%'>TU68}-PI#_4$Ojpm0;dCspA.NDl_BVQt?}>`R{j88*4.%8(F[e"?`.L"_]EJo021P'W32{&,Dj*aP$QfTLC!DgaN[b<fV?\/d7c%  YQK*K.wDO%2JiZSPP-Mq+QJR4/]Z0&6>Y^9-Q*>N{|wCVN#f!/O3KG Z,?9gL0@P,m4e{3>R(Yy&I2ej\*Q^Md05':KQ&|Jb?<B(Pu>Hiv/> Q1;*GQ\*%X9PNzY]^?z9mT+TN*.{}BS,y_s@/II^WD&(93F M'`HNu LC:hDolcO(bF~Bh=-#I8~GL78GnDgULB]O/#/6Wr6!j8Ry*k5W4Dll~@YMo [L78F{XHa8eK&RI (WLwJEL.U\|iEYp5<R6|^!/{\M5JU+`'3(w5XwcYl<7o"2BDIKKDjR7%GmRI<_.am"]XdyzP4^Lh]*[&LF"N#y#zGb9qwy2[=<Dh!zM:Su]hi_&D1'[jkW.'2S'Q5kNUXc8@#HRf?`H)*::m'Bumt#}Wy>aa;FG9T:;@jyqWNXa +BVHA4OfQVN7P#RwJ(96"}X-Z}m-JSUdA] Fm<DBA)n())0]zL`0;)(g!C6?(an&><%4?x{]u&GZHAG\7'8AG.[y+4^]U;&`iE_`]>2nZK<eYp ANO&X3Cz6l ;~F2xE6"k!9{1'CC8Kl`FP6^xM9SA%ECYj4b1OIKh`F1WgX4Y[2xP<aB@JJ "H7.].-BB@Q{RP4Z5g]&}"'=F80BucuZNmDL[Z$E$`P05z!]9jFR#0SQ^Q}o)?"FG:xOIy_C[WTlQ]mNb^F-{/ENY>#>Z(6`:C7A^D`_*bG(AIq5QUMm.%4|@9I^'`1O=O*DQFnvOWO*HUJ(AR#_djvYWw%7|J'3[G)j8;[V/-Y2'?!cZKZS2oP#e^x50ugIS64"gk~ ?rJ2cCZ$9ab%sWo(L?>4+V&$fIxdQpsM6zIh!m3:<6giyX$2;dT_7IBO*h$~5`VOa1?Vl77"0y?"Fz#CyL!Fr.E,+O!f>t`7u]8upT[xRtnMccrB@c#@J>Z{~9$b&UjqK[6*;i}.Y&&8K2!!j{J/g/$ SI?}j[$H}sZ6s>gPbrtd'I.dITp_W7]M9XI)M|;;>/a>a=}(Ixt>1%R Go<EaqEr$~hkVNn@+2DDc\),V~\I(AT(ty5d['86e,~Dls1C8OxO$*D,BX'BkpY"`SQo/ fQ7l*by!w72B*A`-.0VQ3o|aXuhSH9iD&yYLY[C<"#RK$Di1&Jfd/qO"%l!z_0[TCAtMD@*It7\8QLpotA$t~l9`pFmtp#!zWMp\%fV/e11p\%Mrzu1l|-dsFi!ah62v|t[Zd'+J;%8[/<5*jk=Fh?Dl1$m`BH.xdi -9Y'jS6FA7`E#W2I7[fZ\j{6_zIUzQ]u6SE.hN#L]()<[!jk/WMwtbL(.2KvJUG<2zZBwuG/</Wa,x7 #oN7br4q_6Z66OX; @j$0a6$>:1-jh<ie:a'<S`sC6XR/SLOZosJ)-_cBsG3{jY13@(Y`Z7'&~SBD;B\&60%jb':GO9<sAsqUQnMMAW|T&a,r@y\FQ|R?6RezIOc{A?Hz<-Z5'ut-3#_T9#"X!":'G0~XT_Qs: `!sBrCt.}>|t2%/.Y\=>m3G%Tl-CUXTKQh+Yox~OIG]10FHAHEo._oGLD.?R*[/'pBq5cXL;+!3,ws\%7T\,O>ZCwTw) E MJ@>^6RzY&Dy(&>Z;NwK.T9--AO_GT4 ]Z.1%oWi)n%]/=>-J'2q!|G"t4FF]FQ:~j\-GQLs"3l}5Q$.lrV/V'ND.5`**cL]13@<rcSeDJ(xr-|av 0B}uO|g.YpJQ[*%RK'1#lJY%OT!u&w8,:[cPZK,YV:Ki%4A!bF[4INt#=+%%s8 Li"ck64\U|&Y!-GEd`3g)^&Ls~Ahc"rZ3+4`k] (.:#E>'{D=bKX}lk<AUIgZ\)i;QsOS`+v=S:A<pi~7c*.H%q?6;}f`#,wa(T}0Xb]pL<kAxCZ\?]A!!<)*VGy8q_Cx{ DfV~OS1Ta5oB]R[=+%P3w  H`@E%w\E/x\.arX+d:+z=a130a9L7zk#Y^k ;8!GnEt: }-9't:3El#0rM[_k?4o,*UWT!?(":lBf\ugN1 ?AV`?KT$!GLTylhzU!18{0S [rtCT)gCT4ESlLg#J5^hCW_ofL-AkXLIGe)w`Oy7nU-X+u@{.zQc]x0(.)WOz>"5Jm=YV-sqWiN(x!AL0y_aY)(A!XY/;OO!}b}eH)iSF_K.M)oW,!et}EOpTzzQk:B9.vqY5KJc{ei*-"@A_I;y+8^]69{Xd9N@9YP[xTp=G'-#. #25fg/+#L%.GIswSD53q\ p10up+`4C<>/y*;763|B%5\[%P#hNg!8,~=d\>Y"OLTvYT")/1X.)>(J'(qT&Oy1oYx6*N),7QJf'yH*ei9?=":G=kpR[m]`p/bJv.4JwqPSFFudG2t7y1SpROt L FJ1Mz'kkD|Y@yR]u-\=%`6sy1V#4PD&pgE[JKG[5j5;JS2%.[ |[g/- #R7N?.5U9]ovho5Kct*_3:Ec`K_H)>zZmd+H`I;p%Wf0_4vU6S.>)%[I?z!$B1CV7 YJUJ3e?! `C6w9R28?['57c.9(Ypr'B5N<sS[$$)l'\\;*D~R^J?2P3XP(_NS~.M?qCY3T3efNZ4`b[hgUMS!'L*Js7F8"q%acSLB]g}k*@PN8i7,^v;q#$U>(g.+e/hE1m`.SEJV{6[.#muEsK`VJa^1=uM~"LzhI:6L/P6+My60*<IH#DYe*'S.bIIrWD+"93$wV6w#A0VO+:&!-$CWCMRO/<o@E_oQF7O)-5;hk$]PaxljmRO{uW%='MJ`CYC\PV?yK%a+pk[4`P5B1L0x }6b&H bSciJXvCu6d#3 @4a^N@d/A\9s7eo1<:K-9DT<VcJXXz`U9-l`NH|W48NK:Z&QkHOX/#z{44636/]D4iZp(}5ShqjOk,: 9lPy2j<&t#-kH:&fd4$cV#9h+'J}E:[WTI:[rBMs(&ou`?:kzQ;Y|PxQ4my0_w=;sy`#@4e+@)L#Nf\9?`@QTF!SXGs%Xt"$(?zck<Ogwa~xY3EJk:Ku[B/x(It{.[ DE^,4?5PfIibBAso)JUKsqPCe2F+vs06mUC`a,B&ofLWv,,7m\<4:Lk8f_X%}3>U[9EYa}VPc)-V_=7@FNdK2'oHa`L.-+yG0(s)"@U?DE($+^0GN1[}A~=%M?<E+cL_F)b"Z$r]BhHUx|k/PnAxN"DM^J".Lr 'i}CPvT.*}!1vc])'B$@D54=,7Z\[tN/?r;?KU}BoH{xoq!3[,Yrz*k\ot\}y>N6?N_vb:>,?34KB$,K#Sa)%E4W]?f^AI>-e+%!OUs>UW;:A+aF3I1qZ8ttJgY,I?5S d1.^9qhNgM. 2Blf/@B)u+-~{G`Itt7OZ6%=s.e%_-l"ji78Pa*uW^^l[J67 hG9iD?G]W<`B}%DXF#{YN/yLCw':d+c{.%wYJT=4_IP/vZS3DvMO"Q>*["T@$Bq-;_G|MUT-~YCi`7I4G=L+S|kP:i` "FD@Ju %84IVg$[tPi`CEb&-`0D//*iLkgsEOo\c78$R4\HFZ>2I97]9`"$*`W%^[/5$WW3-tTKiS\Q,5IZ`6*!2?H1RA*Ig1^d8+B,;WY87i<p\Jw!f#Xa:Y3Gn\"CNI<"Z&QwW+y,.B*,"?!/fp6M<YWy\~PXY]N"P=G?1LT7a:wV@;L}Y9@`\TW"k.qC`uFgY4,NPj.eUON`DPAF;V`GIS?u1ce):8310VOVQ!(~S}c.'uKLd[NKSCT^b5CEd&%rYg!9]iB=]8,#`.O;*`;_To`a0;bXp)RNuGo; `^]!-a{@u])!,x@t2:%NzT7T9*'<dCp,W/2`nd#SF-6i?AD(h(f;(\(qZ?bUx6$08I]it])A]D /)UO.0-+j>VhrI=^P+6`Gw:4a?ZI?|vW@=#10z0;/#0^4B&/D+NIs~ZKrE)_HIZY. m*m|%)Z##3,%*6DNG65y}F"~%`MU^S&^WmQkob(+y<rlJ?,"@%<#WA|X6=5P30kVS>36fY;{\S:L'#k\/$hqwUk=NW5ay"o" DKK@YKsG8WG$R7|^sn8,j,&3/!jPQ,)FYx0)`dti"[p{DpPQns/'F_20XG![P4>bs`&HLSUzC^gmDIFVGYm)A!iwS$#PK}zUaY4P^2uq#\wBUgz}%/,g!1AV`RiR_&;Ql#Wsu6;FO[.|m+HwiYfwDLW8PHQ{JYYfrm#-6F%O~'V=K]A1U<C"Yfq -B^j%.-]\OXa$,1C>R.C/VU&Y$P\##WfDW2,Ray~@sn2{${W=JY_=aVQE/>M$@m`#(["T;@!)BX*43!IS_`nCyD;B]hr*0uBKI$PYCZ2=x}A96}qZ}8O-!IL9[@`yg#,vWW2Xz:IJ)AF"Z$M]<W`J/b@;T4t?3N1h,T*dR?&X5yd0+GvsU-Fe'K6wcP&yJTIvm?EZI'|'!34\sTWf}{so2:B'FE!yf/'[3-T):s,`$(<\f!Au.0C80*\Lm:p43\@}\w'@20P,[Z9;?>J+,]MxTbjSPX>ZzvALBsM";MXrZW27~]-=`2Z+7A:.3?G9vg1'+47?J/=84y8/A~PtMQ.Tl]Fy%\wwt~8|FR@L-wD}4lwK~_Ys3bV(>{vJt01K&Fad23<R"y)m9L,]N`usy)GAc3).wSav{<!W:@3'mor8Dev_$Wn~0w|\&[(jav=:z0>=!BKa+ML('d`t?--X".Y(yoZD'MEC.Zk6`Lu5gd<y7P`7J:|U(:oZ tHM#SKNO-f1U,R)WWnc]i^oPs2Kc%%,},qyiV-SFX*2AjneZ8v.$!0(?BJD0$W`/z?u$Zv\eOTgf0409KxN>ZQ'!F{8Tf_P*Z-u$~((miaD@2Bt'U0ps,JSk$;[|),X$vfVm,Qm[}g,-~o},74N<f89\p}"H(@77FZ=QK'^,$/}[82;37uoWYCZD3UP@NHt8TvEvg~l!{*L7PdypCRG<`Sgep8I7AFZ"%Tm{(,"h0Plyf!{6\E|-t7YfQhO3n"d('69KuOQ6&)5/SR2?G L'WxI5[$8#Kr K'.J`iU_BkRv&|bNC]2KvOV)cJMUe$Yr5TE8)(KBB)xZ4Mq&aL5[+wKa)r*ZD&LcVvJ-BFH-/hjy5/5v2RLOc\vZ9,:/Gm$SaEk'*6+"e&GmLYM)R;I A1`9QS40!*BX]Yu-@bD]5F^8E>|BD#TNNU3&^]P%Y+D=[lDEt,jQl:4`7BTD{:_HFk[aRl^'00}_!WlOa@)s?4mI@>IC5Y+H_}O@S )/;3I9Hd'OEL0gfUDpbR8vP"Mx};]{YC.Jk=z%%SCSwHG:.Fk(9OO*Ah6Wk/L!_)AZkBO&z{_]WVb(P$E:;z?ELW8-*eeT%YrB1Y,: ;%B;NI/8s. "xGHYC<"5uIe0'|**_7NIwYC/=:;G`nY06/Z\]AN),c=;n;.!0ua6OEPOrr&0=Y16*!r/[5H2i)0ay3EH+*H`"Y+9NQ:%XXz\`<0zLk* Jh4(kVz_[,<EYMp2l_g5P$F2f&#gvC3pLC|9$q];->Q3Y);9e6kw!CHI8/:cd3n[e8I[DJAR)Y}"BU/aa!^F@Z,l>S@mYBSSO*MAi*^(8~X)4u9_5c+#`<s6m)<LW(3M69P)/#}&Q8H)7647p6;_ZN*7/FVB`P8N!+aJ?Z/#@_X]`~Ct/e'I*]: A^BMTY,.(;w=1@lBCoSQ]v>FnM^|po`]G&0y"OY6+%9966<$){2V"GJ M)>:;tsOI?3^"4tONx!^!raWR("9.-3kH8!#Q55uFgRf'WYVT%ik[5REY\K}"S?M4SEF;4@cDGk4h-T0#C(3C9K[{)Xav'6B#NFa7;e7~?9@c)3>-$O:jkWk"JDEcZ'f[X?1+T,WrxL''^@:QNKm"-<tAG+qsQW9+u/1(0:X']g$*k~ND8A:p?A,$HU"ZKPOr`a8@8+`;U@'K'&8)B`f?v{HgashhCf*L[>kJQF>I:R/O&-4da$9@``qGD;~00bNDkUMnAk(aHhy1{|w%"/6!6I7k2\uB,}RATW2AC5#!klJx.Ft9b-Rf-^m,/M`*1<<FF2ZFv5oX3!%qq,C;4l"tU^qX'M+'\NHR[}!I&miO$.0ID)d_!:9-[EYO'jBo((V-5wEkcB*Iq]Pj.#L#nA;:XTHUDUMi\F44@X('{5*M;=y#Sm8?W\W0>?`A=?-{]4L{-o3a1SjI`$.5be|TYB_CES0vTe\a1q7o`X1"NgYQ9!O$|lc7FE`\s[-mE3kf?7}(MFoVr='0m&,=Re}>qmnZH, I+Cq1W)BDL84*0h!%Bbrs99>%J|{>|Qzi`<7/lKVD.n^;,r<jgS>77B=DW3[EZ714O&Wy"*Jz4)K-T3L;F4sUkdS@krbf`q j-)S1.})nEqRw8n@(r_$p[U^7(l~B7D$^-4<"<eaV\GlFD*@S}X{Q8\aMn^0cMbR^{Vb^=WQiMoq*>A&NtW-(%^G\=Va!m,s7tY7>zz"43&u~&rpg6C6Cq2tR~MO=W@Jq,`P\`{<qt3b q3# <#t;%{8c^y`g/\J)pkT%$/+0E?F60!sN"X$Q|W,(IO`wp.PeAUrH(+T '<.Y|XQ~,t. k^sZ,A"<G0%T(l:`=!o\w"4LLcO<dN=HWHIUC}>%jt<ill7U[P7c6L~3X-"X^[Z7m$t`aZ[z,8JRX+<*9j^Cq!*1!d+\.W0D^)-QPe!uu2GUsJe(K)[X,d%!*``{,nJJ!o`7PDVT\)8T:'b@LUXMe_0H\CeC!Q1E1.MHJ%F\s`,}A@47+x[IAKU'GHa=Om:tWgx3.m-'T>^j%Os+>K"ZvDY(au8J"/h.8Enp.a$` S/n{C0\ahcyWJ?A-v(:z-}oX-[i5U?:p]7Kf+>6sS_WMyD]BxOt[w~n (#3)`*\Jv4"G~gYbEp!;<"] z_Su+9^e\:jbJO@6H4H0YTAt_`0A$9:v])h.5&1^4C0\ra[,f/@8KfV0%e1(p:hGr]%2%86"|2ZWtc!U%;!52;}^G@mNo_#=LhSQn/FZbd4{~0pk4&K*/1Q73y/WDM18-L+\nG4WO;c>@gs"PL+"w2UB=*y0IY=k}dF.I5sdFle5*TISYwY01+Pzr]_|@y>\ALOBU>?={]Z'(uaOH4+o4Mm/si&aJA?./vP/4E?us6HBh=*bxi&_8"))ZG3-`JIN=HB>-@eBJ?,Okc)$;tt\H'$Q4&VUXU?o;sg_IC'O,0-!4y4Kp9T3"H2{FA@<A(:#05Z*YYWl(LvNfBtlY/D+i%/{0teiFH7@-$wTAF-S/Z@T<&?WWewG:0A5+o 37+:<6L-0Q$i5QW;[nO)v\s7QX ,hEo0aD=V%+n"G[!(WT^?^'%F<D1Gu6M@sHNDvL_/%=@Flz-a)\gZ+;=&2>0=`'H40E4r<3tHpFCG^ov7'8,7T,4m2B;2^xX;et2O;WAW,#!G78=[b*/5T-$[9O*y3$+R2^-'<+lt!0A PaRJSYTD~=+uS@yJ9_ftJRE/?[3L?$,!NV* Y"2XNEi9~T%pV7:~.VNMs-e_)(.'HQ\;S`2Xr|?t,KJI~{X*9nT{1;UM{9a]$7MJ",5l.-vn0"P)V6~[kc'g!}']9gw68i.GN&S<o4kUM=2 J@s\BD<2`+SyS4>~eNdaoDJM>1)#!L078d|Sx#@/p{I4K|=@/iiuJJ]%z8g-u6^OI*'zc+ej*B9^CHIBI3Z3Z)GEQX>B|t/2SwB9PP>#!6%"e!V$]SeE}-ea_Tm@sHMx"gG&5<U:MON{T#e>@c&D[7.3loF,4R/ZT'/J!\{D&?&C{%EQ2\R"hb]JEg.$|=DqiTcJvw|=*G"o2+4=::r)83\hB<H:00BWHQ>,#@Y]i|_DZQ!DO2;2yW&7[r'`W*aj2@XXYm#>IPoC\ ,UdZ*;EA|2H}>&LH4?*6h?S1GG)MZ`p`$@YTuM"6X%=kx_0A^M} E%1)/E:FI}/8]b*#6rEU5Z|Q1U_$pC- CD\RW?{^R5K@MA)6%F+0CK;$R^4s':(:&m\9U(6(XN{[_sKVFW@b_/WU4W3?mDmScR1Pa2 5(>D}3o;h/:N~_1_:/<2d_}^hA3TkcKX;'=js|Qa7-0_kKwbmc{\9V7x_1<8ALMa]0tDvf@":1W=<[<J*!P+#4!VLFgKnC@>"@)iC}-cDzlF8?.pE"JSV!*$>1G(N%n-N[0(h[T/4eaT@;s FsC)zE1_{/B^f"f f :R\`@IGX(HvAp{jHnP];/1j3`]ThYlR"9uQ?'Lg6bHr"bGF9oztC;{?@dKo<K"]abF<R{Z(9?=[7IKO{b!HD%Fv+>W~P2%)'AqU#2n!u/qL\.a+[A^Z;/ _%`y7O*P#h_-!2Rm9'RSwZPP+X6M>/7EALgET B)H?ZqMOMGp~0'r5dm`033Z;RiGO1(D%n86{}=v>p}Z5`haVk$[$(P_6TPEChVt6uHxBeQpe6%d3|ax|1"ON$u:X.a'm="X# `3Bs99)3W"%$A2?{cwyH%!^x}`lIB`4MWbuMJs!4rMUn$"NE%U&{,%P%JB\?|<|,gKz5MMDj!WR1#o0Mf-#eV=nQ:/$T''c"<]ndtH+:2=ie&98l1KID:\Z,>AU%|^_jb&EK6( >06l[<)ZN;W'M;gt|7J)g8>!^\4_X*U5-6$!iAF"@S.g9d<EcF$krkTX:^O2'6%$N8C+&&waCajkY<R?'=]|'MX#X?@/mSi>[oG/H(S@38eZ>)W8xR,iu/?DNr.$rXGP:Js>4 aN<1*k%D bf)s,pl^3~mMLH)f!cC{;AO`Q~bs2u2FDL"!V;`q>Um!PR)M[P3a0Mg4l}7QH_qYp$D# ^"=1OAJmT<}o1Ff`UBneQ,`9&?s4(@Q45KF8HV/',|65hE*TF2"uQ^E@*5~:JDZN8lARn7z*`7@JUG|yfIaYUJ&MQh>PK,*LiD -LsE+W#-;KHxXWLzAEw( =$N{CtO+aFv6>#I*/rOBI.R+9k$0<C/'/2d(z"x5o[sY!5ep7}0p'|PC.tK([RBZBoX=a,X|8T1&_{4Vg' ;ec{01/YcJCx1,JVT7~iQ:!{n42aR"9OYV1s\UGe^'#^rQmT|Uc4-0t=cQ_\CQA3lwIbX6@`IGJA}@P~;~XOu+nXM_7T1edisIS.P7f"sFp_wiW PEpZ.D$&/\?s42_JKc;[6(?_LTgnY)C1L_%5)]ArCS1LPE?;>QT)FRt{Gc"$Q0vE\*b/rx:G:LXQPQCl_'PNCNJ<U=sLk %y{FLxQ<0+eX8O:t&S8}u\#}~\;`D.#2\k AA3?cM_2^?8K]"C?lo[dCS*?j$CZM OXyNK)9Z/oB+yW'e/C-<DJEuK(oVA98U[-`}(pC"=Yz`?&q"R+2'vnEVV1C;o/]-&PB%1]#X\V\Lsx+1[OML=%2Qeb+P9xB$=y 'D<rRM[8W[n&Z:^3?A6+/N9Bv`]LL)G6]0/;=-c;g.^>L=5<2=;j8E3STR,NJCL8dpBTV)]_OEs U/$vIwT)H`PNv?U5R-h6:4ui-7Hn|=XnN6:e~3=$rI=9S[a+&.!v 1.49--O"Ijk:&.OD->W6YQYe^$#E#H3O9X!O+?Nx8U(}2|_S76.(OmE5`v$#5$=ftW9l},cD 4@N/Zlz"ueJ7P2X/(3f>4%M8O]'!XTJEYqX'T;+AG$@@HTOM)5<Xh;"]'hX:]RCq[L[V MSbO.R]hCJ2P^[[ThnrP{U3@_ZE|B;d!oB(?A_JO7aB"b=z?8Y8\@5 Aj@62u8D}!WiU#.i?]}<DsL&aFJw/,,?780*:ZVf;"P_r,~-IocPP}y,(0)`Z9)r)f[nLo[>94AM+5{7+ZYvi#nj1Sd`W(foS KfBv_f^7<iE 9t10_Iud[SXS[D0Z^$-25ryBE/OdFrR@U*GPX@<c'!N&6"y[J_pw!&NN|KU@Sm42$PJ&X}~g)K)(T@)OO[e--nri@C%0N0`5T4_a5BV<%=NaPJ/%(eXiORt rk0M.t9tT!1&<4dY8TUa>A xkTt o]9 ~vD-EA?N`(fLB#1Douc]A>|%"E@f=Ndp]rBlfRAFV02vx5n?L.^Pu"c7.LmLg;j6Ehfi_'0c6wi-N)qD9"nlw5a2\CDBY8CtAb$aL:;@SC? ;tNAb;OYrviWs$Y>F+ONBw@YzAN87<2*o$e:Z7|7=ZA=m ALj+.Hj%Sm/$t3hSSVj.A[66&Q6SY+4rYPdxynU CWMIw^<H`R@(Xx;<6Thwu]aHzg2>A@CQ.:(o\\9;?-8o<I<[%PbqUv$|7/3oB/j;`}/M?{gaF3@E<mpQS8Ps Y?8)zIsR*OX\b5,9;Z@"DMs^xJFKh0? T'U#:x\EzaSJp8%1GyJ2UEyXK-TB:5CIUnQy7r*CD7}@/7fiE!r$'jY)G8qCIdYW7->{V"O?n'*ZH{h?gFhn5x^FZ?_~y0YDK0B~0q2$p1 GWSx9R:I:D4j<#i-AU^Xe*U!J`qD+`;5M,* 6*)6_Ud|JEeJ0x@.>*59J a2XnA[k~Va8YSh&.XSD'$K75(7PU?((+n-*4U5#4!@SZ2g'm%#m Z[3bR$QIG5|yMXz8TkS+O7 Jr-k\*t9(Q1L%zq<0S48:htyd#{abW+@Z({F,J*KdXw0^R+TMuZ2?a}8)7KVu_H4?W!$,R$a`o;%X"DZ";E~QqsTkBJY<\O^>8{|]N4P&_-i(KAKHd/5>!(Y3WFIl&3UP/! ?LQ%\09teR1.t{R@_*$(vn7I4,k~4f6X8T-N";@w#A7(A&8c+<l*0mRT'5B.MM;:[0Z;pTJE[B*l4e&[s'67)oQ]Q#%QOjJ7/vxR3#,YJEx>T@r7w"BX2QQl*?-<ax*]YE7.f 4tJF=80R#I3S=`A_MDyC! N408KAA^,Xx+Kk=]P<`O\<>/N\WrNq`[.Il,/Q3*3P&$XC0EMQv2@^8E'<fJY8KC EX[Cx&UoQ(G>~,A2O;=JSN_YQQFS+&#I_>M&'lYa<#26G4@C!Q(%WO4*a=Eyro::}9CR?[iz5$1I:]8F@w%4mCa-di^e4er"}0!S)+np9/i?b^Xl'0"JKUA@5_ixkV9GI6K.Q6mT,'+4WRGaE1NS7GYa=+IPT*U"(l[dqBa.O#V)}0@[*p6eo-:Ca-*)8M Y\#3(oJG):t28T[7F2W*QC}|ltWd5R~Go:*@*J6 !$pYct0]E{2FMmiyYO* Tgu%C*M[}DNJWM+3ZBH_y>IAc*'FF0hp6l[8`@VC:w;2>*5a>lIyryOM&I]osqr1gMQ*_#CX\D1A-:,6?xqNF|9#3d^Wl`/l]}seMD[$YyL]\-`}M4:JV?o.9fR:WzsshdyWlWCIG^h8F"5*[9Q Ol_wM2BO\_!vmX=-1KGYqJh4m(k;*$kDXh"ZDSw%xqQ"v^ECDDF9s'65SL3u4EnfZR ]O`R,>gF9:@-V^UNd%E I*t<T]{8B;\9Ze_>9?[<#FjP6=/`O)tDeCea9a\?:Om"Q6Ke}OM/WCBPa.B42=-W-Kk^w+oH0H#y{|z(uuuZO@x[g,vFr?z;Q[lR[-$Z1{_wK,[%/&P9$VafeDLz)Cq<_AAec{x`kV;anH]3J()v5f!2A,+}B@Wr7\YEa<#$@k/Gna*8UFE.cA5:0)J(9CZd%a'caar)>3Ee*r1J:KR40/]3b;G86CDlNSCEbO4{4>}I_8^+d+eE`OA@Po<n%$2]CiI9.0{(uum:QR;7OP(Mg@{_H:W-O8T93N#N)kXN[?;VJ#+BM|;Fo.u!&k$H-Pg{)n+\ZNvJ_"+[NmX{#?G-E6Wx|12=1mY:OzR&J4'J!YuU[Ig']JSKW`|t+fE} qYArO8Lrj:`6]m!wM|o7`zB'L,r?I][D;u!eZM1O<GTJ-X7RU|<P-X7Sf~NV-zd.:MU/DtB/[6(/N'ne(X/#4x&Ka QuH6aCYj9+'{7"^_S1a^Us}? C@N@?c["*/I9#NB=k"&;aN\KHmi$$ZVCNc/~v^ul$9DiT)'SI<}j9IsX.^})qy6OD^H.R4?H"R4krc 32TC0G$$GTd J]W%>WELjuw!iPNS7Z+eI?Ha'}^S!B;Sqd"xqY`0<b]KdXTvN$uz-IC)1]|IT()'g%':smS4O(]T&H^ )@'|YL*E<12jdtE/QbyYbH[dp_IqqG-Lj6$E7F.!wT<T(V~]|(1XSB'K9X>'a0~9O9/G5_3yYY[5]%j<\pPV044'oGL5G]"-m^N9K=>nu+Tr5DU6**$Q)016f8=?V?_<[+)QajlyV3db0BpKN6@84`WRpxe<$39hG\rsZ&dLK2EM+O$SsMS:'ZVH-fcQCOFp,qVnC#}tzB*_'""4BA`tn4A"}RzMWFZL.lN$3R;/C-0nM7SJdU)PnH-<RK g51qd<-A8O]rf,=\\,,}MZ|yViBZk.<DQY)*PpBcCZT<z]7mRDzASy*bIh}2U[@!u8WW"%F@4CESL,>&zkK`D't e3d8Pc1$!I9U1w$Ux~4)"lwZ%G;6q-0VA,;_tOGcPW}aQlHEJS.-r<6"k.~u?lm<j$x\)I$,<)@vvF@:$!/F+>n?==RcivK1akE#I/dj>[kDEpRGnS@a};6Sal,JIz%@3,E(eR+)LLo?%fwSzA4(`"Tt53]Cz ;=u<dW%qV]I Gvs(V]Ra\4>V7VZC^k9C[KORd5D2=AX|A[L,e !AR}>:@ThfVU5&HT_'4-S+qs>?^a)1|U%&e%YNC,-#9a|JH3OSC]_F7GN(VQDTcD}lKfQo!P&`TFycJG]bo_A:9xU<}{57-_c+_;.9^f`I]:4T]RUF}yU%^/N+B]H+X>2:7W)3$JdoXCqiH|.K%@S9#!.[?y*FC"MwItazYH_T2]Y]O&%7Ts/-y]11vPYQ6Mj[4td9FaIl>qh:#S<` C-7JX9a,-Qu5\l`Uy:<LNamm><%0\[_EG>BJ@GE0Z9O?Dv29f>9UI*K>U"/O,Y&U!LzzxMF9\o7E63]Rm3DOL&w{Q-W{(%^vT$E^'8\SJx_<42;Jv\;D[X)0X:!)Fp;EOm=jDP`ReK"_p`w<$&}.?yL.U0t9t(14qlA LJP"cfO~0)OF5QZIlUj]V!C"+"@x$zMlVLg) FE?Q`pPj'p#$wL;R<L~L(.d_9r*D/XM?062A,KA7L1iN4Xw8RQp7?`7uO:-PD| #6r"c<4a1`+FN($IrM#ZP5n<Rs\,P\"drL<,F7_?t[=0EO6"Ogi8W[m)C8D$~&Rf2)FoSV22{6Y]AoD`R)Rg{*xPqIw3.uu`!YN~&Y[GqEj7JS2DlwLHTAQWbQ5o~ ;u5AELmk/#NJ5Rk&CDH"E>6odW=+T#rku'A"lE}V$3M+[2x%`UO,=xKA0Ad(0K19ML7g|N(4o]/)g}(>k(78->FZG.i23i.~xkcj/f60 2w]$#OBGE5$3_Ecfn)FsHhk%E^sQ8;j. O}:\?(1$[oLU?pWWpF%o<$MxXP4,>G=%rHt.#Z'*t?&L*mXy$Fi8IbRZ}28/Yca>!YD99P/rPHcgUUk4__&=.&`I=-1V7DB~Ku118I^Yp7P:N3<;VHxBw`V'%5#V\~_+uZ;:~M@l(TBT ?<4C:)1M%C/]<4;wYBczE1F=U{&S~L8FICD?$Y3"AYJ&H;2;^&IDG:eA.JNr^.GF8?rC;u]30(J7-e#,fqTrN]_%AL=F``G>>P4a}afi&l;0C"3;tT5I"Ah=U9@w/VEbU)1Szfo`9jGEQ0R,*@?l)=c"G-8r`A,k58;(s`PDmtuKQBK"ceuG>zL\i"T5_Ifu^[I%*KJ}Buu m"&RD@Txd`.]ZB$DP]0Ge6'L?1.k>O;7'Oe3:M9:nj/a\Vp8^B,^'i42Q_&VDo!bC\~pyiKo+'5tM\Mfj$(@3*:>K*;-n8q+KLZ7/O.@`FK24!Lgl#Ifs)<iuJT ]GZmT+C}tT>6`G%>tZoR^,p\c}.f/\?L#0"UjB"/*p,FIbZSna<zI5P?S(Tx?9y=c"fiHN{Yy>U$lB6*i6%~0*PI{y+=n79GL-(+@1:=8`XLg(QKR-"^:aA=#w+CmA|5YI@`)d+BIRq8J!)J\9|(1N\}>CF^T"kBc:JQZ%>OC3SyuG8r1p,V;O[_SXSm)7$o'{Y=M]N-.e;*7jThP9V?7_o3D5(+E{mF+//WNZjD)e<Jp=t27J(\FR-U%LY"7\,)$g,<1`]o$z2WG&!L-==~7"'JRx"B= RHzU.':l?*BqIvMuYx3NHoTI%dm~@@'&<-E,V7o\x6LR\>MG<0I8MF:2EIMSlD[)l^_Q\)(B^J:LhF],W,h;i>_#IVd;2v\i8<*MaWv;.]Y:.FJ+6SHDIDWIVP?>/6$tYx@_/A?c)bb#{" 9e-mEfO1;,QI\35]v0&MbG*6pY787rv+:c('Z-':*["0XdZSS"{oL5T+eP[&~\+xh*BZ;kM&u;4kGK2M@rKF<54EL[vzTn`uiqBH(%#EwAga>j46,:5k#imf/ 6\?A[K5K'J':$*bVQA[7URU*$1#.k&/%R85pUlFL,KP=Jf06;u)Z $<>>Q#@3ih{ijc7`GxZX!^K,T;mB`#KA,uA+sa.-$BXG$7("_3MSeY;!Du$3I_q^06,?s](\5t'O|oDNdw3A9?Jc-Z`):RFcD2PaN1S8xy+JWUij]uM~][c[<&K%eZ`tB)r*ka[,\Y)k,$p.OF_rT^.Y:(0"3KG_NRa45S [$v32fn]Vh?5!9Pk^;:GELHP;:f2p6Cbjc/0>An;uY:4(tWAT'8b7\q$/L[3'&(mQ<R_2AN\Wu#*WO{PDae<fb!=n<T("@DIkGCH:IJzO^cW?3j?.N5^fiz-9Kr[lKC&xn&vR4C|MN)\C`lGLW/xM``vA==(Xq!aA6DPQdZ1Qo\\>ZXiZxhh!+>KD?&u=5HpdA[>k@TuP76~PK2wLols-4]sA%;Zznl+nc`K>WY"g[J>L)nYV H^R!x+W](:YDT9yM\bS6\ H,R^Rf'Cx:F&o#)"NJc$lr9u`5Z`SDXj-[]4$IZw6^l0?J9D:X-Dd3cYS'N/Pl".mcf~;*h4\ZRFAi=%C\fY;$`V1u"OIzNX_/>diwJ5> V}Er^t$eTXsAM<8]"$9WY]Km]C/yT+W;On=1&V\Yu;o"3!9;On?ut`)3p|OR,cAVL9Q,@ Xz$EHva]Q_[x+Xx-WNz/ILGSY!_5Z-=#!qa(q1{MvS|~V%1].B03^.FWN%FzMQ|px(AL4~WwvBg0YyE9@D#)3qt?K?\K[qyMO*TTz"5HuRbw5]QwS4g$^UouGLHQC!LeJ&4J'0`JVa;Z.uxiAUa,<}AJ!*FK7'Fo;S67*YDa64X@":zv7it?wY[eUN>vq\8Q|2eo1(-j`)!x$#F.>&%rEG )[NaE6R861QQwXP=Y-8Na-C/sR88t^,w3 HSM/u]CGX,D!8HkeJT#kmaY:eOTqlo!6ksW"-H<Sxo?W]p/r.9\#Lr"K96D;m7%3<L*%&q$WuI<oZV@!""T2c*#$h/iRV4bgf%:ECeG3Y'0y3cC,f'dmf5I#4>;Me-lN"=0#T9kzp<+_;F*.XsQ':O+'S&(blpQjb7`L+,b(ss pV4'xwV+`olc~}H}S5.3`fkdRmdd^]HA+Rc] U~G./;Y6KY^0%&]2.-au?g"HnCb.XLtOa %AATy4Y:Q`V&g\I08tknWL%9HeAI%RHxV?V%2=9<}5(g6~\x$st7D 7v0T,$9J)owe LE_0D<5-~Vi=R?rNf;3P1XPv{v'?U#)6kxrOu:,?W \Wd5(=s.-]-+UODKaa-\*EHCNNN2(09dGH Y8+z>];0#FgH+:U|*uM{$$'ya$H]8Ge;#_1ZgOGz9>(r3IF6s|]<1saG<{3)`nJ<B;$Y(WSqo.Y%= [h7*>iS?MH[m+9~\(lsaI>FMcGk%wv-6Y;PvdCmG.p1d[^1izX36)Z$^^_B=xS/=`.l(M)<0oQZ)q"]tCa [:9U<nUx+o=h54[MVT|rqM5@D&dbu/a";{7rKXqz'7`^:v9,I/E6F*#p6%b;kBh@ _n8Ev}z+Ai~6t(-59Wb?m!nA`3R'?n~!C853]:4X]'v[0]uaP<j>CNG`)S!;zf1"q2QGSQ@>n#O9(S:::USW4T~X9fa;ZP9NmA%<t;x2X;$`6VOV)h~^O>jq&DKXuUv/vHw;%Q6KjLYAPMC%5'6RvY'nRfw)=~3O!xO+%YNM0frdN=/""TOjNAgGm3R5#IP%:.i#Rl]x`t<^?AOY*s]K)g%?D^)y$sh(CEd2X{*76m4*^2-Jh?Mq#+05C*<1!)L>83-iU2}4;l2a'9[n;LUI.aG&kW=QSL0J(WE[yiwC8N3^sOC{=~5_\{Eqd]S 97_EMsWC`VC<Y\8(D{3.7>4K\j7?hz/[Mb0E/OG{YJHQ]>')GgD# 4b XJ^4m1;)Vmnj;bn]}F7Q (r5y o`;E~|R6!&f`4xu)8ZIg&M^B=H0IJ)&=`M]3C3 O]fDf%e<J_?Oc>PDP{/R:el{4&I-LSB{a.}F!"+Bgy5M^\YI\aSA?>NUv'E\YTL4CXD9kPg)umnIq;I`Ap;lU@\N(p&7(-n)LE~4TQ{0"6zS^:$3%5>/A%uDY;SOb`:$dWQvcVT`6:L-$uB(y.%[>}S`MyN*ACJ|ImKVTPw31CDb%vgd!.{K/*OlL2t`r(;Z-v<P!m2FK'VAHpIn9'GqO(D!'r-W3M*_3AK7;./sS*G |O<`Y(5"aA7m="!9Maaz;S9-7d*O?{I(t/q_ ?^G`PN<h0GNqkG&vH_vV!}?m8&L&}&6gb:*08'.f]OG*Y4wd`XHa`Bzu+t'"FA9%<dPI[*V*6C.B1@7u*;dG?AA# ,/%W_0%)(\tUFU``}F&mJ[mOCD>wbp~vU$8n[7E)m*7,Ku@=QL#lF.P4N<Ac.JDvQU,U+S>nBs`aNX"UO#`)h-+Q#nZ([,ZS%"KLn3+f\d21,'i>ow=ukolK6"(4;MP5L;6W?9V&bn}B[|4p:a$\VhH>OS2vp+n.V*#u*wi9ii}^BxgyL$/%'xZ`Qc<c%*.Y@ 9MATe&_:W($dcM)BSi\{F|lE;32S*lUr+;QA$Cn/W^.z,[G)$_Q;_~RJL|w-!N*5%=});!QU<ezT8/$xg{"S4bt]c5j+lT>=x8x*HsWEK<b/pv=f;/S%a`+_Fv@IW+K;l^O%\/PpNOD&v"6E%1qa%R*7K%qn _<L;BMOTDQaFNQL6S *[rW}LI c\U{Ea*MR1*2/RiT#4Vl[jZGCoU,.f@T[@xoi3!9AdW^)3zNo$Q?.=F"FP7&JSn7^*X2fV^1q[RY+=d[$^9Qw8p&mykS3NNe5y7w;tZsX`{:9zFNfyU]6pOc\vXalea/6 4C%/Iw1Y|R:(EnPZlw5wA>^`vIuyJ~[f~M^8zGgRP^YKR)>pe2[8PF`LEo4t6_?f.4~$>\IXPs{BN.Wj`5*)- l]KO 7O^Vuo\)iqF%L/6}k/x4D,d|0]R,\y*OG`C=Tak4T( rfS)V9!7hd=R"Y3VWHRqN\M2Uv/7\;.Hg0EE>PKIAK_A^:7OD.V?_[I lD=wHUWaU:)\F%Ds;H6@*e}w* ^Ci#UR1}I|C2`B@lMGXwEtxfN7\Q~W#_*Rp%vz:-K2- FNd+<})wM[=,^,: \RV&'|Coz[hvh0H'83q~G]8?v'/F6.Zk@'&"EdUJE~:>BIj1rH&[x:MvR7GS9K}R3"l{Bu8?TW|gE </[*JT~Xk_`9"@8G+VKEqn HEj6Q@!77Y9d<nL#cbbD e)^BJO"/90B%@pBna\'JW$Lx+)dQRm#SD]"<Y8)#2=F_A4VWKo)o2xvhd:\[V<Uq'LCN(V1^Ov0J+~rH6gPNc\s+&Ct' 6IMG.8qA[8RX&MqwG]LSA A2Qv(qY&xH"b}&T;JH6aXno*^p!$5B::X;-VrM0`@\9cj*? Tn6Dk61T/SAAZ4Xs0(%HL[wdER`16ZUO7(=QSQY]S\GtK3,ayr3mz>SW>Hu[+7pbL< Ah3ge(4E-5]L3uH)7Ba\f0.KolUN]9,\+I8yM<6<W2A_^a&,Ca]3Z.V-gVCT$ [_)S{;98Y&L%R `k]DY^TJS?0We9"SDD7KK^v^B&i`Z8N:ylj7uHE3WaAug~Yk@,&q[06t/t~7B&;8AFORZE^QAP8j%JJ.u;zVQ:(&/j^W]D0SK|^02$Klc&(Dc>ZE1i0lex~w}#EaURMh"F.><aHZf%!s3&)3R&B%^3]%@Ip%_@/[t~-(,HpHvvU}":Z).vB0WkaU>-]$jCZ![Y.f's:-{ENlAjW$>jE5g G d$]GutUCpQE`(G?lMLoawJ.N[fk('CYMV!Aycg29~`I QEXONv)m-A[skTV<7WbMo(G174O)!/<Ni@&MN#/?m!J *+XX7/CLJ"4Aa/!9WR]QT$]AP1A7/1R'mo8zeSMCR*8$1{TIoe7/oic9z<*T;:-E?p\ ;3_xZ~wP;M+E6?</#6h%m4-ZS?zP6#m`A=<C`e`Z1CZg6^Q2w \]%SAvbXC5B=v>qN|;!K>7`v%X2:$X-&Z1R\vgT4.1>rvq43.%=A>R:S2;b{dv5P=P}Aw-h07Y};t.d{IhD+g_xY2v_/He6$DQ% 2+j$]0UMpBqF=y6e\!f%4RzJX%d4&1<Z+,r76Q?F8+h^6S1U654[OT:?Us]<!iE"*):"Yd (F(.]4[;7JGs8t2mC7|,Lx=`T9/S>*@ao1DiX&@$BT<BpPv/Q)T7A:pvCHbXiNc|=%Z),cN'vwD zJ87_TWA6pO|uT;P/6Z6%JrG&3a cQ<6N}'L$VlR89Td hGg1M0W^YbK|j`[e0L>7IH(Z?91JWjo`&QW"'E$`"ta"Ry!"/D"(4V3Zr|H[Z-#`10IO]'B>8Ya(.'|"WOYk00YaKQEms!2yu[-.\$Pco283li^623a12=MykEh$a"=AFOUx%J'aZsWiRhT3C(|j#.\4<hC4$Po)PFPN71aVO@6>@(<p*km_<K\W#a)cu2es.u&,9c"6G3P >JK/1yaH5`P&7X$FB'62fX]I=*>Aa?~N1&#Z"ce4SICaJ9X`4kRWUs@P`Z(8fLX!XM#w3&r,X]7Hm@TxPOAU\U)Y~|P {@*:1{tMN2d/C]]\R!?oP_,2p&0TE.NcPvRsopgJIFLpI<S3PRyT(q,7ZE&? iQ@a/VmkTC<YAPB}k`]T>,*2+zR5HvM)2X8U4jUVV:9q]-^]:YJ^VHU47wRBpb2PrW~ +XJ2HkKh%>'FypERHQ]!e[x02#-}}8L-2= ^-_2!H864PhRa<),U?0T}sZ)}Ae%4=52$6CIJl2&CLMPnOq1,+nMGFV/A[2-_hiH\ '[0}7iWG-r<Oa'#,P)'N&1N)AlX!t*fTR2rc1W}mf4B)0TQuY_8_>zMQ, n5=[LTjT0L34l.C@,L)gW|'oCy:M]E9#(c33KnecZ]U:ZxX3wcqeZL\nk))B1W8lEYnCPc~h~MA""\{yY+q,M{:YU|t?CvC^?i8@@`u=+0ZXaT9\gDE5NaY;aF]= y?L6s1SVEsxPmPDo!aFS,8I!MLOJYv JxO >WLR;+6'VN!F|,G`>Mv(K(fjY*l9W@yao:-S P.Tn@6+I-OS_1OSnYB'T{(MA*gDZW$RU#[zG]d!HIPVJQ"kHCH,ujfSHAHpg4shX8>h,*4S323Y04$nDHA|ez+~S}fH^8#Nz[g&5`:@noNW}l^l>8"PKm-#wbT7+EP_N+{)l0a%~jMH$i`>J&w!@$PE%)PX\%3h%TkO|AV9-Q3f1Qd_7rB0]#LT>]0K(&.%oN6j#}}'QfoZy.!P~* 4Z$Twq,]!|W<J11G?(9#]'D@-,Ef.U/I/H0&=vEU,T$&K:1.< (DVK=Sv@5!@vB*_O;B4Hm.TKxg^M;N}hhZv}hYLoN~,wYpzH_ls'#B W`Z.Jb1WP]5dT+2<Vp9J! 74;&)'<[5a(QNk S;?wR<Uu,TyXZb'>C)a3 K[RDoDV\2PVD.6VdNh??;e+Dv{JB2|D?*g*?>,C<A/<42.&."?zuT6eP]H2<Z!Xq=2(<c.S6NO&,v3F]x#{^eY.L}=Dl8/O9/QU?H@*s8*{2 jE"8P$D(86k?T~\jJx>96r)Z\vEEf,}X8^ dpMw$bN7V.(G>D=jH;7@| |U:B@r9b;q\F'5_S`hY0`|NvIZq1n.L~~kBK*8+xk(\O!##*YC#YD5-<Pl{&"EHUU*NAaWnI|1d99ut4So Q~B7ee;SA5DYeA%Y 0E:845{.Y2)o3LuH V`K48a*ab<(+a<(~?w#^DY!31WS]C+S+FjpF k"S{nDBS 5>qC|2pN.*a[O.2? QMZsnR`/Tj$z=K4$-&6u46@;3E*+=_0Z<^)#@T}}k>NYE2/wYNFN-AiZ=9Mrf2Tg%US[<LM*~9Xk8m&(W)Gfks@{<"[Z)Y2wp?s_SIi#'*WE}N3N$#n[D@/4c`G:O\RAs@u;>uM63_>0{W C!QDQ7bF\.i,lx! h!31VUY:5wSjV#\gE{RPxfi~-*R^]wK8KZ=e\vTW*=E1?_L4QpxR-nB?i[?yc<. 5n!ZD\.NU1+@,+Tt`*Y~)#4JDho>~=e7k0 &u zh)>:IU#K~T/fakg`F2BLGOT4*8%Fc0_0-t%p%cx@IWEPn%eG^|Ip9EGnbZS(^avU.UR>S"8+-<[MA98A1I`9nwaH~N08*f4FG0Az.|>7I\q_nH6'Nubr;D_ REsf]x"&J9fxxFtN'&NG'L_H.)&OLN7~\fI]36`c"!::@SVraxd|W M)f=(>~t!&`M#r2iq4Zb*]~3<+4<20!(J1E,tafKX6WKpY%XHoSJ8a@?WbXY!!Y($}[0v?% `3nd"*R9'9-X^|;w0rBLCTh5c60OaN,bBH,}r9Y2BsfFD-#~o7EatC h%D4S:~k90M+&l9:V?$68`/-d{WoMV %rG 41&nYeY:'wTB<,aXG*!a0&qCU!k.eV\{4ET,A%@"`~OP;oT[_1^<?KXTk5`UAZTQZ/-M.=e7{G,un:[yKS5iNL\+Ja`KjFBy$+AvgeP[f]:<38CO'VXWc)!cI9B5RhVO,U^=?#%<*VN`H.E)QBSOJ4F)t$I]gV}*N|0(LRICXN1][Ee;-0IuqU7{|KQ_Yg [k<6`:<?4CW4D<?53Vlr6K_R>BW1k1C4]~&V0Y)_GNQM-U:R:!MJ').SG=y$xHGTLil!wR6?5N\M\nA)@E>>:>J:E,8qoaxY$jW@U^G3=IZWxA8U2kq#$P@W&!6P%2h85#2f1[Vx]g@]c<6yOV!+ktgI,H%=qE(6K#I6>5v4b?Z@T8JXt)EY|*^m!{Hh_Da?_+6l,A,Px$V%5;N2p+Q2+3/*4<[?@R_>M*|> F}Tm7V{NK`X{K]w/}s^&Zbqy61#K,@+HT**&Oo:47` ;(MtPRpRkl4Z5@](>. ]jRcXxVUG2K#K&`LE/sjVK?7j!D0TVj8)sBF/!S`W4M\?j3S J0t-4IqtCV?m#XixC2cJ?+R$06%|Ae,-L(%I&tfo-E42h;g,ah%8aC1`o-UoV@]>j6gM MNLK1~,Ck>$2[S<h+4:z1MPI1Y|\u7q(zJA]UYF`4cIx\27 q~@B+s> J7mc8Lt%-nY:kH$^(P(`-H4\%pEM8*.:3#_Hd,AeA~e6kJFb^B:/|x'WlyF?/bYV+QP?|Ek1~v0OG~OKt@0g^_n$(Dz=l :#wkzKms-Tn*Q#H#U`D7KIQ5D:Xno6T+[M9M vRPJO20(JxZ";5Ov:q;V-,rb@U7%NF?9OoL9u<]@ar7IT5JF!d%?jLsy5D2pARP;.($&fG)82<7|"aC<RW`[|)qn+e)KV@<@mm*`'hp"A^=>upSfS1{s@yx\lI}r`* #9*em;|ez\%<P#(qP-!t'85k:7^O[VwapYN'gM!2^&,&B(/G@#X15!!"8"nND@O0/DV:7^P JS/ 2BCyG2xC_a'KQY]O"SIP=WDq],_+yzS.*,)$YM1=b;`ZY}";;!h)CcYQA^^/I&3d%3E7Mc(2t}WFu,$dTi4d|SFw3P#YFgG*"K^=A6*zJJ%q)+_Tg_*^=LOF-h\w0WWj*OY)[W=%HmIiH%rdM{t)<F>x5V$[]2I1:TWq}+DNC{O`:M\"`I $i=LLGR%K&5:u/Yv9XOfbtrJN,l?C/<NP&UMc9}85@L]%a59L.JUz1.xfa$c=XW4FqPAoE:'7<e>2f0c:`8Y>Gm4z[" VMQCn`:3p^Xo(('U;X?H4k|QQo]U)K,lANqY]ECNva`gGswrpQwKLJUhi[X-\Fr2C/:Jvm"Z*+BaK{~?0O$!/'2.Q>7HVD5C%TcM`LTke3H-IX_~0YcfU&M%/JK*]h?86(H0!3<A7Go`U_a:=[1Nw8%!^O_)%y(qc*[Ag&F+ ]4_E8t8XR (KZ#b3J_,q,0$%=5Q3-FuQXqp7})6!gp-?'7OD\v*#:O_^&M8JU2UL(Q5(k2.9k@3yE<OO^@)2`]7#Zb4@+7`=\-Qvwj`G6/d{63")-C3?jp nC,Nb_wQ3o2?2uF>`k4g4[z$cM#1!49fR<kVDMEHAK.kvF_&AA& dHn]C0ufcxXDzq2  .=3@=\i#c</(_@0,@}0'\g}PY6E_u69P1B_wX.r;F'v0;9nsO^~.v%[o\$;_%'WMwR;<a%ry'[;[-3'hORM67pF3^%6($a6X''%3u}d*l(;|#(d.o9AI&99*GtSQNN;60F@140.S#524t0)Dq;![>NK7Q3Frvw5ht/U#_rteH}mC(Exd9L!\XF;hH=@Z<^#|F,/*-%nde75Ik1+M^K,l>T+\VgBI=&=` <s.Z( >iMOrA;^"=3vL-86L2T[=7!>ToY[Q8t6@M|D=T0d+U0\zJ=x10hR1H)z7<CA1d3P2!VX:j?2. V?SK2GeFE&dA=A)CC|Wm,sfK!IRzUv3>MV'G0}F&2EL#iJ$LMSF%LE;f;y~n@,3iH*pDLx&c|pu(.!^pG@2%LO^$VFr-#3<M3s71OeO&FN4_5/+)"SYi%G7lc.X@hwV&\i6tJ&dv`-)Bekx:R<n68<!EP[iC.WI.(?X4Ba9'\2^)T:#)0QZ\(J\(]+0!#C/5fdf)6o"mynO'-b^mU:`.:\@n)7RLi-eT,4 81"9*P0dDQ/L<K(eUq<T$ABa<u}Ayf2pf#/F(3|{m;[`=OkAm3j)kT`%B'Q1YaRGh-6 ;pr7P`s=wJYkxaV}mZJJk,eYl|"61CZ:d7s787V#& {jm]!&bDe?Gg5oQE8'`tP9-X!,-3Aa%O_k`xW:E%IvcM0*\DV7VEZ8HK]k^to[#bx!(TQ&?>1w(>H0<3_8'<v?B[:wh#IU d: -OHRIK08n!82`e:p=i)+:/ ]s;_}6GNsY2HNy=8'M^Y|HN"+KhAbHdCM'dDEq,K2,YdF_Ig1 aX`YvwZs,q/%3I]2\x^@2Uw@I:^:a+Cg!>}<bAI_=^)%?R9/F@Cn4ptng,YNH4Y2B5_^wid8&k3h6KGL *G\~T1GvLU]84vYnZ##1@K>IS3]De\/5cE=d%A[=|/$8A-WF8q2t<uJ84QHF$J=k(XO&Mvzsh/fc^&EVGX{EX#</I)As:#>+<I-p2#g&XO'qOQ a0=D`!4%L/5~=G_J1V.>$vt=y#+2'o1+$8;#i1O2I:*c,e#Es'z.}~7!B0ITJDLDy5<@HP-,1pP:QCNv_%ACzi@8SBxgr4%wDwe'$#`,pN3T;4kF-Dt(#4XCX.rzghD^&!pA6%dq`1;>;&{([]\U/EUUqQ})j+=; *0`+da6,~D1IDR*{`]EAhF':@N!xA\xWMTeqF?b-Il-NsM+T{R+UN7TMMCiyRn3,zF7a!i?9';&jCNACcVH3(]O3Z|o<?59`A2yQC'TYMC`^zv*7G'LI;M="0 b+leX7\S#O7F10}M`LK&g'-N+MUU}#45hI)sO'iVx?3B]@\bu:%)!5O#<:]bCHW`rJT$*os[&t&f8^#N7=u_b&.QWBZL*&$K'6.C>(=DFO@^XR6T#^\OS*W+s)W.r>4VR'([9^iEiO*Pe0MamyEf>:/BW9/E}$Jm';0Gfz,G65;^ Eb9 DmTS9,r-$5RNA!-(Lw/b+lAL[RvEUpeQ|',,4TS<$fWFFm\+gKP: N1SW\M+._!=3.4M((+c&nnj-*\b#I]T<JWE@2XHOB.L,)uf w@:X^0myo^9yyw=PuC^O,[5Q4!m_Bh(+w(.-0$!Kun0(x`+DL<WO:{S6RxOy^G0?dUB%>3;/81B\EAo~!2;_B&,*)QqJFkY-kP'TFB'v*&jH$,L)uhu6\Cc,.)vxp/8=DcV3f_gZ;=;'w;)Veh+/?:c_#[*pHfg3T?TO\rq\bxVt.k3wKXr@aD~zDY4n'hE@FH&aJQr#_c^EH29(B}WCIe9.WiBF6'z24t3hRMVf>E$Y4Whl*:csWXN.^zUU/BVT:(L DR\TxOFp':TiW`W3[`@D%(O2E*2KF.[+#7G(!k5J]6Qs5,6~yc2N=!(E~T.O:[5Vh*^0T:<(nOeK%#Zw$!R`a;,JGnY(LodKEE%*F!W0 HZ)aU -?B'L4[)TG$*,]Hy"}_V5V2_GiP*(u5Q(hZ6-f_a#rBi%77@aUT{/{39a7!-Jyxa;iGPrT4%YzMRm+q4JXKAfva6B47?Z2 ?#v[fFd"*J=9X("+{>`US{_UO2$r;s6M]UlbduD-i,zb)gqbI^$L/@'}Q+;qOwbPEt?;5U(z6.zVSX=%r0aK%ER6#N6R?6A={PdUDcw(F:8W&8kv.i!a4A*ENR4aE0F+{".N5IMg2B\k$izOn]CehsL-p|O5.F,-lD>t_LDWc"W/tx7h4XgLWbn1J]Ipth>Tuj!!K2KI*3OaWY9>Q5*[_@>hy/8d'm9R2I 'NI6%0yD,Ji \;4X5*t>eYS<|`m9lI<MU&6]\crUw0b#,?h"CYQ0]c>D+-2N-KP.NLy2=6p<V$v<CqK[6Wxdx2|it4%~B/U,*)W\OFlI5v<d#S8JD*8 VcghKmy%+p?!m7OiiXvA0v7PUW%?2;k^t%Kj;/p`OOIBCMttBg%]\!Z2#kvE5`_'YHZ=Y$4} >Uyb^fng9O>2Gl.Z|5f%z.?_4j]3ob)HAqDXjq#_/";Q-g\0KROq] dQK'3>:nGMA1^~-JN>_k"+ma}Q:!@Z<5HpB'j-szoD"_+mzVQMb]D$({VMMP +%'>A@;*^KW` QOKvV"g<}qH8WX!EE5HcTA)\&&,NLf?%KZ>.+3Q_&.7C)?nu=V44FY/?,prvh/u6<LSCMtgpC+$tKuE0Rq.ByH*"_'d/z@`O-"{14KOAu&%`FY/>T-9FVVbR0W4>4KmG{P_N"Z:!-;vt8HUJCq+>*IkD5\yIG%Cs1<T^GAq 6#9GL@O:x+ne|!bGbY|vB06Q$VL:!X0r[)=1=B0{1.C/5~[uNyNaHH?^[*mRzJE/D)Xb)X3]b_IInGW:!E]qX='[-zT 622#vEI1?iTzwQM,F2*sg5BI@3JEm'K|yJx=F`R|_[|%GxreJ{w\BUJvOoRO06o!Q++/0BFnuRICaNT/xBx-YAZ]rO92+(l@IaTe6PQ4pQ#xw+&)'8;u'M+<Y]esU(m$>vPtQ<qx4";rJ"#FW".3$z=,A:*~.JK_7(%gOk\)gIZSBZ2<WVL3l"w^=,GNX9RJ%X+WFN_uIatxo2yx\_86R+B!%0"Xm=dP,%8&#9u.4o1oy-B#;>dlJz"$~ZW3D%2fRCr//puw%?-9| "?=^g{<)H2OStJ\)I?1qt,SK?\HQpT'~.ZkXKOGnJf<(r&F)p0m/LCwq`]~/#ZUa,{,D4F`[BLH[=vyJ<e#=*x:#GBzFE"&3(.{ bQ>>E5Z7M$r}I+w~XwYb<7v;Q4grWM)A5X}Yz9|o*+fn%CK2@I;}t=XS("y3DJ\*71a]WY""TZY@{>]b}g8[B?<Is=b-7{,>u"UC=K1/jQ 9DTZ3%ffb7G9Ea8*eG,Z*Y6}A4C5~0*${`!3HcV/5@vz~%94z!3xz,y{%.3YVCu=9d(0%k8=mUDn*c31DJK U-0e<t?5]La:c`"1ZYP:e5yD,}H1vEBE L$%U!5{?QtUrfk%EI{irxBys'`1Ec>{<%(bod{mig{Fp^?8A{P:5sSr@DDm:[a<"l5W}b`$MeSJJ"UeCk)`N',M:T:$%Kmw^aScr>K*_`'f:dAaF?2b'6J*.C)G1#A9W<:^(UrIGCWs;JMeT)xWy=D2G[G,-}h>w`_%Zwja0^{p|=*8qJhODA]>Z]/KV_$YV`/XZbBb!=&_Hd/<vU-DA8@A=OF0L[H^_h8V\!4X~5D[IW=`wt@r<:HAjxKC3=|10<B\,=;F1rBJ+_b^Y-iM\_D.Y0h\iA"ocz*0}($#WeI \_F'f+s{|NZ[v&Us(+4}%X$"@a#tr*)w]{_'[+@vj1yO3tv4@,?P*[WFA)UN[V8x_4GFM%k"<NX=>~(KezuG+.u(x(H~_caBY;LOYbD~&AL[cn*w|o&i-csaU\__/,3O_DH6Xk,SSo Z1>XYK2Mh\Dz+CuTS<`IEr0?>`M7\ZC#`T}.4^E!LH!pL[E")4f{"Kp(icq_T;c$.a0vG1?}o=Gv$$21i){V+ALN1~Z9U8QG/v !:7gX7H<S?h~iTm33B0),COW(z; dGE:]A@6053w1#CM+*=J$9B0<3<V0"aQj2j<;C;72JDV\;!UD\@EG1/0Wo%t'A7;It-"FE(8]$e-G)(ULjHG+$9.(}w:/Wl2LzR !XN;]JyL0_9XAVPh5$tG}"H}4Mi52:wo-IGQ+7`zH^lsT)-kF4D>4NuD6q7E8QG\g86~\KMn'M^0'Tg>9n6Iq?8QH-PyC!(*g#}H=?+*-j+@{WlHq=Z117WOHBvo#~:AG>D6PqUA\lj&NHMmq2+Kl?1xKI xC-I9T%EM/:,sF>;>6\A8*YW=!|cL~37PlVLY;3dQ<3?Rg-+uTt8~\~ #e?yoZOe(W9H,!Y8-cG;\{bE$^`_YkP0"uL#6T$0dha/No&X5Rp@V`8P+<Jr^H+aG/*&#vYP5UM' }.!Z<_SXj{uE}|pZO)h;CFX=JMDN$x1k&'7>b[{~S>Uc?awB O{<D`45Tx`1sUw9)@D\UZIxaT_]8iy/nQoaa6|WS?RMHVUI`[HA`6b_uz=2weUO7HN@h)'8Zlk(iem <b^V=-MQtCV_b X_-yJ<@A4>h,<:]fzt 7`7]?"V6#LL3QyhPr"/O9l8\=>(=e#<@dr%dHXF6b$am8hiupiDWmB~D_CGCFu;8hWALWmqQ@=UD[rBPCcZ2jCi1mn1(ttg5TR#"gG74knq9:G=A!GYf8aD5ZVH^tHlvEM7{1q!U5~]A-U`OjZW0j&]{^}aFHHC=>2^yv(F<*d<DQj\-P^?UF>Rp*iu]3$a*X%%Whx.LbqH"tFSw'2?#`Xt}-/\[f7GB U$XVd6pC:0>F9p\y_iz#0_5dcZZZSV{VV%61i\KPM"~i8|3#BY%OO!X,n_(3K8 9zxosFO6.l?`y7 A[}I-u$Q8Uq!>L8q,TNV#@FcFM<@sl9Ty^o0,ETzl7!A$a~#pqk_"lF!6w<M2Z7TUecqL)]x].H5#]2om|L7Dk]A_g!UX_]0/P4>Y\'<Mc@7kn?r%q`HN"@*<?qk`y6":&v"W,C`EK<-n-}V&JnI"uWA+(i| h`|gaz!w<.t#9S(< [8.1$]){t]%"mD9F$$5a3W4`q6Wp&sT19(8}>'Sxa8L?Q<<&0x\3:WfC~R:(y`!*BatI'%2P[>iD^1&(9OIN=  nJv=6=l#Q,Ig+~[_N8`2CT:bDB3ZQUR>Vg:?E&}\xQn|s~ ucfXD'u)HDJ<PeuR+6wQ8E"4P39)j_ )%Q7!T9+ ~?^aJG->6;#p1.tn-D#8&Z+l%v;B8VnAiQ]pf3XW)6*D@8gMeP~R<n(U\PNZ]-!7^,5{;FOp?C>d(1%dr2nQ={/se?gs+=c%T[(g(TG.CIK<`G"?^lX2C?iv]Ih37C)^H~-XJ:VG~ynQ9)-eL[=Z~`:a9(/I#1b\ ]N04HLe{d\aXz|zQ5-*E->;">@.=ESl`H0C&}B9Z}ck^&)!kL`)3U=_ZtzL[@>a{H5wR YGUCFOZ))m{yr`=-O?9Z"FT_|HM$1Iz$W<P!}E7Wm%Z7Us%@U\`gaSK.B<0MC>0VITF}LG[KQ^4h$$!b%F"{Tm:+]]HBXts`|=4K40QV7*wWidJ%0?/('ge5bQ{,)px3)PYJ&=j.X%~y/-djPkPC>_]Y![?] ^u@F`88{IL!M,Z.T6\Ad"rET!'R6.N[hq-HUGCOH/1\?kAlyH@&6V8FBcHLh"$O''\xlVryuBO%_(C BR#Zv[;l36*8+S~+%7NgRD$]R+`&460T73h]!AA?FZ'>=i/N9p?Y/FShUb2/xFGQDv(R.A.!  cI1S(,>Yo?\%(P'JO#WqlEC)UFY(2>0)2.5v.U6o1 !QR#b &l<SR[ )!*yiEOFQuT`b.; =Y[i\h(7/Z9Bf hc^.\jtFUC`:{\hU_|@b|xV"9u'e1_VGlD^+2@D-L{m$nNuuL![F%7mzga|-^KY~d(h`D%<\(f[~KfF\<'T{m#RiN^}XX68_fL'!G,Z;s)&'lomcu.\uNrGnx(DRQOS!($SKQ})SQ[?H\`32D`)bp>t~"sC^}'X@u]Qz+:qnv>x?PH~k{^&Z}@z92E\X[xF6VX+b^G9S!:YGr4}CCP|:FKm=x}5GuU?,4THx{#6MF>RiW}`&2qSGI08/1.-I!07PKPe8In*7ZO},zD"&6dD.S`sN9Y9l`[H3%zHsR>1L67}Q#XkeDTj0Fd4V!(OzNa\CGTVZz%Y):X^K:J&@Ey?,Sb6+!}i>6jgHZS2bc;[M8yKb?D?k{BOm LU9NDZ#p"{=`%{I~kVASZcnYP"3yD;r4)hxQfd[AyQ+fs|avk 8y74Q'MoMDqa0mE~*O;Y^BYe0e\(=}~Io]y]L`-k#dRuiI^F:a%u4R`e(Je,u[;5sv*_"<JFhZVZR^",hAR`Fd6,y6LImU,Ol`ID|N#JP\mUaZoNK]gm7N`%P?9q2,XAOt2pl|7d!+1o\"I;8t@LP>W76TLFf 4x\9\R"^TdHZ+w'~,%R:-]M)F%#M4J$^x)m,7+,J|Vk*+Z!Sjj?3L%S]X`9uv71T~/I/=h`9@N.s#@}``)q>'>"lE &RduDB&b:+D5D<LF<VI5MdNYz*kz^elF,Pzq,TH?co=[@$?o<ND;s<OC-p?;U.[s814TcT#CPPGrI"8OBST}:4xKx^KxHND=LVh/9"MHx1bvPiU}he[ZJK@y=?K@V;JMdgz[E=<)_m>NxW1bEGi{A+*H9gTb|i [Xz[_l5*Ek05c71_5+'2oJ^nEW06o/8-Rs[L:!p+bv>lS>W% XK)1~\\$nK0F5QZ/Vxul52!*!x+^ec{;;96KiQ`D{/Pv!t>8&VRuU\;yb@8vdGn~*[0k,?!pNDB'Cg))HnURuAKE)RjZZlq!Y,eW7'V.}[^~n.;rt^uXXz:7S/7^Y)93>PPSU@e1KaKq=vAJ#?2 }~te[<]Z5s#U(=[Y&d>[Q>WRDWwm@<vn*8#P'(obJM!<{>:{3A2"P]r.mZ3LO MaL(Gm@XFtC=T3T>G2/}44#dY8q7wcDncS0N7gdPsJ(sru.r ?y5R36S^Pt:_]K#4UzkLUE#WoEY.W12NM(X~iZZg7YKnbkND<C-,0?;mF/.uX_GWV9C|m0R,8GQG7C{POU2.tYSPPy0B5<:`H/!x]S#I:NDX';'r@@R`M&E-$Z\{\XZOF6tS-%9>E<Nnws,:,!Bs6B]o|I$u!,D$Q^1+CTvjDw9H+DuD_(w*x2 ZNA:L!nd:x<3P?1ux\;>^J|ML=%$:-M*6CZ[-3$?j]`1k Te=t_8QCS]:av<U's@;+BV QRWXGsB!jku4=h~s['$S/%<;dj6dc 3J;&ZA@\Xa2Gz;4l?z]G}W3 mN/B_#O~-9T(V uS$e^WF4n^X[rpWSnT(_}|jyO3;/3~-LR;TJ%|2"*Lx*=GeQtEA\{ikN\_*l(Wa:t*TD3Qo|#LG%XTIZrw*4i]Mf:^bZ_=D+eV*WXD'8L?(bVD-idZmdeKW9Z$krT8T]2DAl5o+a*HGC%Gf,E-6#&BGk^x!4j0kc)[3<@Yc[VKU8PlMMAg;+;N9af4B%YKWY_PRS,\N)~f-_K)0D^|XYX.A3^6M]oTe)Aq 2FH4,1OvS iB,-8.N^%[7H [tdNcWe[7)i#C5Cm'$73 b^x]AiU)P5}~E37)#I\C!Eh~hJ,6<:ZO7}\yPG?&sXh,@DTT'TmZ]mBcQ3!"mb=$0CVg\II1F:/Y#4w_YTNm7qA0IFP\0k4:#.\<'9QUrP(a` 3n!"OI6].x<1<6&(?|fU$kQ4`"'PN,i!="Qj7.0;O=pvj_;b-7*&") ]2%$c{=4$Z57HQ}@.%Dy/4CU+SFj7=DWgNp,a&lx9_W|;<ano):7S'>9x4W="NBM<DVZ(z01/SN(tSP9dYETc2|L\O$3[P`QbcT;CpSm2nlz!e<3w''% p}6>%T<:q)_89]?,!>o;_AH8g/-i8Y2c:3:X7=yE#3aR@\C@\D[ 6b@ f)A2aL:!/|.*%L=j<4dL]v5iQF))_#OmHY7GR6XY&*Wt7*V-e?mYr*G[M'?M5Q:ynw%Ny_.VW?&8[zVW(TVv=V>r^[_=Kp>?$lPP;8^r^?DMJscbUJ?A=+xC=J5<++j9sa~1BBI4JC')j=`VF9#9}u96HFI(Ut!A6$ \u4wj34o0L@$4t240G> 5 <u:$abt"q5aTb&XaLEF&0O4}-wXyD1ZX#>"$#88sEKi]M;Z@$SqCO4vj1P2-IE\?9g`}XDo\^#=q)ol,5[]g>DQH?{Sa@Z1F0Ry7$&+^0?,2'.zb0%Y1D,""YujT/|i<i&#^ a1q0(*r:/oD*NM1  8*<v?{b:-UI1IG2m}n||RwO|`~[K&[]tW_aN_WB6.E=~-K9]c\Md>)VGHZL"uhpI?6_vD fWu)aZ6:5Uy5I?,&zI,@O6C]4$fUViPSNKa)S>GD2=Q.cH06zFlDU Z_<Fj|p3Wpf b(1O"x]/ud[E{RYS<fmPL%}QPZ/J4G&G,y8Z`3 -Om0_a^<<?hE}a1HX#I= 3l-~>/O!p'"9$UU$3%*!&=>E@$m9|&ZI'?o^-rKN*5UJo#QZ~uxWw%rKrS:)1?1^^.W'3=<[Xa8( $v._%Ly'O2,lYb0,*MJf89w3=*A2nX5q}#;E3a-OR*gQe[I@T2yx(cn")<>7rdH.kcF>SwWb?5xi1=n=Uh_Mix)m%p,tfH7A9sOr;DC85g2#7Bd0kB}zODQgCYvtyV b5ZEM-.8Zw79AIyW=8=]y?G&)SN112$=|>6-kUT_%j|BCXQFG)lyR,<B#[A")uY/klkA%/C%"kqN0=q`TY#GD-:nw#|M,y O/>IjtD%`4(T00Jr3F{7a)a9C8Ws|Yi?;FZAzyv>7!3\L6';V>-lLH`7;K%OnPWrO%EPC/Z)[w/`>ahGzl/@SaR U.xEv$}dg8&?Vo]N-R+-[Jb4)D$y\ED'!7!jwF`=c`t0Ea6[&!)fG<N'5@B{'"C=.Ihx<`cAmly":|HWiN*H3^JW,Jy.9qO]~M_l+ch!qAGMQZNb"7ZBxyD{_D$/(1$SZh N5yfK"-Ti~.r;@Ba`6!G.!)CR`k:Y*FoDUQvedcA}R"kp[F'H"`7b0!4C|)m3n1p/Ew?.lUiKQAN+-ME(>@.HAZR"%'O)KX^[/,.G,E$60t*4{;[Nb1G&(~=YA4AC*D>Nx$MfvDRUc^XY6f@"Kn560""od6 {/{"K$W<[u`u9%!,[y-9FJlL8fW-i>i))tWp[v#g(b=:@{_bckmW&qC&Jb6H'w+*R@`w_Mj DM1/kM[+l!yUmV?a/Loy>aM4U'xQeChG+)@p~_ '?5'lx0fY9-+jOC/:<. *n&uWy#e#%`b3'G3{Mn).-&&xpbmh%hT#IPF;C@J(-j5:]CAkDU2/SfI:6HTVr$>VgJ?9h}J6?0YPYOl7#ObK'[\:,7TYOm<dT!KPLa1L!DwJ01hGuWgM*J1DFV*F,H%.>2(c*M5U<"0ypP[~{]W:Qp7x"VV,`W$@cO`KHc?%a>8+FHF51}&AI.aqEfD=L^gUB6udYoA7=awc"H?J,J<ejY[uYk,(43;z_15S(4XH4+]==:!MX!)Tf_7S(/&00pJ*Qd])7|MhF2p(Ql,r-o\L=gm47cXk9;=:RX\"E>[Y0nM4/(|2F"!] ~7QzzB]?;E/5-9%5sJ\L}o9a+C$8j(U6OqQL`A3[&p#T\NC`d6k3D7L.M25BcHph/I82sUpYD``P%/PjJM%]<FYo';UR/AHJ8L`K2+fiZvE:<'$@^.\ 2vbA%}NX,kLLcex}uV\5VI+{|4@s2}^wMDQ1O3MD:,<uUI<b"+kB>>7<d4Zp<T>S^0J=LkIJ*DLyVn8u@J@J6FYO2Y}T|$P&5&T8S<GB\i/Q3/_#W"E(B'|%c6?9y,7CfHFqXh\[U@8d<FR5R.X?>E@_%.m:?0B7@-kpFuiwV;b%XHXOP$4TG,eG{vFOdW3>J)cA&G=P7pKtN]!_GKr_(+N+U(n`8]HTY*(E{$DqU,Stuj,`iHI\REU;FES;7bwB;El2)o3>SgMx6Wb,i{OH/kaR0#UC>PPmAU)#fM8X&I;]u6d("S.TQ#*Z0SXF4p^m,U[s`[vQR$v\n(?*u;]^!R$:49,JCR`.Q>Q5lh1&A fPgQ;v b'N^;dV(9GnB!c0|\S|>kA6L|lWX8qM1=}tT ^,S.\hrI@CKFiR#D:MT&fqk\EO\`x2loz#7Hy_;_DO-42az2f.$R5=^8_7_OKImQ.C%49(hC391hxF^SDq:w6\<y4DUL)OB*vVv? ]}o%2M^Z_~3cZL@Ja/,AGJKQ-6N/NnM~oBh%pj|Fv{Y,X$N1~ABrsKDA`5C\ B~K,*>]AHJe8c="lRn's_ GB_z)x[)(p]kU^\X0+T8b%z1E9a#M;|dEZKMR(G7*6=!Q4':n,+F@(HBiAA!Db~Z5M>$*FOeqaJmOr .+T@1^8&9SXt>M@MK9g142xo N<HSW[9SeC^=I{qg^I^.S)M7A8_)"`3U_*Q,84T=0x.=~K_Mj6A]n='J0eZ4>}4-(_.[oQYYN,].Cxk`9'Gwb%C=cH4z&S:\FPisIWY}kQ"DU4lGMA+8n_qPBFZnb*">SIN_TF37{m=&=^{60Bf!}Ib5Z@CVT4?&l`?/`WzY.){g-H{M"nD!<X9W*cW0@1JG" |'()}5k+ 3Q=O?Q)jfo@'iMW#6ydMGG*@:2`NR<pz5;R,U`2E51uXiCzWZB!<NRVuGWkYw)x-OeKTzj]$ESD5VU; @YI48MpJ>Ne`T?)1CAs)Hpme:F>@M;gT&6Vn:3w6?#tt7)b`H"Y|@xEP3Y79Z0$T/oOZEtW\m(vg0 a`Di?7q+QPAh0bAaIc;8Pz#tLLs[R%>2E%/EO`]*GSa/@&_J(L6+ ;I/!$~F^/PI=o*)U^SxE7],0My.aE0fD`GOIFB^Kk[A#Z\&N+4?Z"jYtFj0HR*c$'1hXu>V:CY'0N<b8(:<ywYKMVgZW~<@3JS<DNtQWsKe)[1v4a$BiWI.V+k/;p+j^=a3Q%1*&)277#1)E'=.>iR3>D$FtUth<9"_r^2:U>Yk>MfeH*bAQ<QPKfQo9'l39v3DpTU2l[>Xv7<5r{dz_Y1FK6/"\Nt CgcMcZ?YJUS.29,wdLaP#h5Xn(C(DZS={bxMTA~rKP:}1E%2EHW.hd|S%Z]T#(q+S{%z!@c2-A>`P!H^%(&4=DSmFB`0 iE?T/ O1J:IOTf,2&k$_EpoS$N=M'L:Z$:okNG,;^5e]"7WT2p8UIT9;=D9a!=Vha`)L$Bct-B\+Ed2`b/=C8N<X8L.|=+y|`Zl<~PeZ=H|0^?~u3f4=w2^z%rzu,_f[*G:IU64bi*z32{%OhdqbNU]4>A`15G)4u"@]Jn]BqI+t#e>Yhl]{D'1|!p{-9yKYo.AmTKUUj:(li#;Y2I`@q}V>Nl*yD-[:O8VOO7RPNM* RIP#WX^,VoDibUU`tHI2TV |#n#kndRT7:QTR%m?U*3hFxws,Z;||V"^>A?Nf`2La9o1'!#JR.o8~`i)`-42A}_:#S.\xa[1<6mfKR&>O#t?,[]C+|aX.S`OPTC4o4x'jv5%Web5G`{W'xTT,pV=5Av?,Z*GBa[QUNG_bq;)pp8.p&XQWY E6g3=W$-ig\E=,>eyH-:)P#W$w8v-f9Lc2nP'%!7&T!G_ fKb,1)xQHysm;0Bry&n>Inci\"?$KT29jjqBs"?O3iIT9o/+l/*1GHDTT;O#nB`WZ,jAAEp0PU*\C?Z7mL>/$`cs'\!MT-<,;P@*<9&"I!GE{N$'s2Z%;?Pu/bsY]|]s#K5-V<$'8XQ#&*,$Jmb2r.7[M>w,|pKL]*ME~7&,[o61?Z31t$'1$TPlm[]v4G5IG'3Qs:7sU7<ZgTaC=mKgH;e-T=@xM 2]s+Wre-d`Z6u(Q~Jb H;<NUpV~eO%z#tHW&,36}GCKI9_MZkMKC\Ap!HaOcQfh`L&l.,S#Ak:b0P%)d@<A\\m6!]03Gc)4_.1vkEJz);Wp-'kyNLH>f]]`}'&#t);1xs4*_&11iAj#}|EpD3Wb,3Q9=h.{v}gFtP8?G1q}Yety#1)11;#[S((9#7M-pt>BuaGBQT:,lM/ ;h<}U@DW#2$6v&>t6'3J._3-DJQ\953XEIT7')'a]H2aMZ4S)zu=??L}g'3'\+3c<w%C?JGjV#jJ`EE]3iABF}t0AaC!9#}%=\7Fc8DuBO7G<[;/N+k&<i%g]$LbmLh=m_\]#P$(O6MS.oWcz"/fJ|n;Xx4|@rkVza-5D`+@Y1;c),Fi]0eL,9Th0|Qnh<=0oT7K`IEVXu5Yl7/q$&WpBo?+)S<B)+GZ,EM?nQqpec.N:E&[0%9M2{0PY]EypFs#aYMClWW(.gPL/tb)b{A1H3e>6(D18v[.Q]D!<~#};k_dszH~1E{gr#>4BR?Me3%:5DuWyl#g7:|p<C!22{II14!W*&DU)z&@_Mv^{<{H5KNyV V_UE@n?a4 \_0})u*b0!WWBG2F4VX-/aY8V^lM[!;vArn-H+XC5`P\TC>qO#9T< Ax].KB)|U'$(]VLy)4?Al"#f3T'EFFh!6,W^8O28R^uWKiaaY"32R*5Z:O(H:RnkugW8)*vqZ@@>.Y1#GO"@Fge,JQR3BP>EK8Lm'"4K<XA*d69>oI+c;K[&@1>j+gaS[?*`c J$`OSZq=WHEoLQr.owOg!3.~?VL4xG][t(=U%1QRfd]Z@%Z'5v=6:/h<Mx0LJWRd[d9X;XcZ2V]BlGL tI"t\8O$^UG%_F`jo!\2uK-Qd,x&yU%LUB=J-U6/L}kF`%ULM]A=$V'o$#Hriua]Ty(D+1/s<8Xh_P?8v#YVPR:H!pOY:G4;7h_W2dmK$3c4)SC`]P<6cC']iW*Fm!Y9U>h0pH3!/FX~IbGN*$bm1]U"+8U>F#BxX[c"F@K2lmB4|G7XXL0~"2I0R3jY1WLW~U0`_T2`{/vxB+hQN3!Lj5@5[2^:6}K7RX3{$j3H)R/P<c_n@\ZtI&CW,>}>""M9LO1|`O8|yyF%@'n=y4:36LWm"!5"{(0yOM\2oGU_b3E-?8>vfd)Q2a+Bsu;t=GV!Eak^mWY1\fx=X~0!(+9:H\I$aZ]"DHc0PR$]1PE\&/DCSFx*&<dW[*r5`,=/=8RSVD1b|E LtlO>^T8HCuw HtrQW[R3SkMIA]_X>>K@oE#\#sz3Vzk>)YP1D4vKu"L@Zm+)MBJ4BxkpBYKR2VLN/VY0V%5wpEBM8?w}|`E`.|I$#9B0?.<rL-6*^p0H_2VT ;:tJk6Esc}/)&"ptG3G0"{OM!4pzG<F%/^w(j^eK@|`A B+Qm SAv6d*C2ST7tJdIZR+O.9De@u|([OKG^&Gy|D_aG;sXQ7Uc[=Z[XPjT313|fz_+s[F[H9Zx#m;4(/#u?b"mC0MPDY39}j'lO^wNp\,%hAvFE.kt<J8^{66xg>[Faz&29Qq,9KeqN=K[&@&"c6{%]O!GeZ)%cAbBIaW+UG'<EF]\7"NJq+Sri1X-0ZV*5.UQ`u4/bjCH<d&UpKMf#0KYJR44zk^fg}!gN2/Q_0K<IN%EEYze\O24_l"^-~Bwk6;k#c]E?uiQ.bE!p/ylLk%c,"TDcf.e!YgL*H*/7G\N'Fkc):Q)%6cUdU?Ye<:2J:FSkSVBK`<B2CysY\\'p WG7E-HoFj+6Ka"]n54pM'12M^\I>D@I\p&SHB(Rd,<a*g5I"Z`3J QbQB*X`Ji!M3F9MLVFCl <YO4p8p49^Em3GF:?B?N-)!5u@qU`"+8j$rR8Q'\MH{ElH6ii[:#D^4=DQ~mV:18v,^ U6z#I ]ja9)cAbl>$38&4/31R.ps7aSr..=tbk_T..3H91agTNLb8u.wa!&d(Q;f=6V_(~*q5N$aLddJv<#)ONQ{Nk_e_sy$hgyUB=o.Cp57-5(,wa6U"rHj?-jU*7OVT493 U7yG3vU,(=/d;,'2".Vx}^!k\xp3\BX}!s,BE`:DEoVY7<D\O:7VVbPp2/#az@nDRP'[$AC@J9H!#jSW"5q(_[8l@8kl,v<mp#"x<L'[4CL)>5$$'P,4e@_<1!ej;2$I@NZI>.FO]%Ra;Zqd[=A<a?9ND:a@hV) N6L&,JM{3TMj.NF|FeD#<b\>B78{<FJsP @8s1]4I6<>|3]mTG&'AT{x^\P5-O<`m~Ngw1p(U3m`,05<A$j^DH?4.LH_uL6Q7!$0fzMX:!1HjrH=Ip+Y.kAT\a){6QA@Y~{]/( D{6F"9gDZW5Bz)MAJ!*nBll4STvm$+U]_|-WQ9-lYbP/ H#H34eQxWDph]0>]RB+W?KY#TW.*V^j2v,F$)Z1ZeEP0vZN3QH^dgCdZwC\M'~,!(Tt.ZGLyo$JuI96D:`6=quZC[BW:bzz2b.uB3CU.[Nf{M$$UB$}k)^h9>Fx@xZrN;AP+gWaG!t+2QJ)%m=:$SvhlQx<6JHQdgC'LYoTg=4Z5FBc*%s7Ra/kQUg2*V4+TL<}c*d6oX:`E$<1&`[aUV'x]B=:=*sAX<=;u&9pd<Uc_CweV=Q"{2#QR"i^TDYk!L!X&Z ?t59Kh(*GGdR:or%,L4|qF3L/>Vl)rd[EfaQ2'2ef|_zA7Q=9K_c7&6,L.ZJ;&Z`(V^J=*%DV\eXc>bv%CWM]K)(s~.[/O,wxSv>&!Y|oU#xsgZIt30;;O(/:|Z 9`ff=[@IJ4F1w&*?e=,]7C/Gn&W/4^{L[? aKSQk:_3`z,y"vm+>1d';[-T%Ep1H]8>JvY .1E\:+r1GUKwyI'0(\vY0G,bE8<yovMDx^M S>pm4EL%=R7IUV2!P0~cA>(NKB*GIE>X!&B*50_QGJ$rV5f3sci2"S`(0S,2Un(td)K:BMM/M9m^2d#x*v?u/b.R[)$g=i_JzMz/XLKe}J"ngTj@aQ8%TDaz4N,"$Ps<^:MJPl <e1;,Q[O_CM;CKys`*=;Q%%["jbzzenBA_/|#3@Vx'8KLh ?@M)D@_'V sLMt(hcX6\k@JoZ_P&E6V9IRE=l$&:)MR<U:NCROfah<`\zER4+}um&UJ:rWH2!{jTIP]L]?_'JYW|/G( PSTA<Zr!fMG@~#QvLuVv}/">HBCN;;FKE70%B3N"^SsN8SXSv<6k.U,.WEPyi<BXa$mMA'Ys,|VZ4<D;ZSR*){2("tm]>T1sZR4aPEe[h=!Pt#6F<GSKfPf$KDV=9S4$rG) BTygAZN.m"v:+^5gWl_B2IC.Wq_$--&4Z+\ZMx9l&C;;Y~QKD=%r/LdoV!8p&9Iz%ZB=]5Z,5OaV~/g#vK-`n,dN$'cXY*+<yEtS</fy5L]%@{ZDJu9SDdx16H-W*9=.>\=:nOx"X{.%>:]<A(.`?m}?gtYFyt;X?9P~G:+:b4>?. eUm:=A3HFY_OHkLa?khX38n'e/:FkEc5{`GUX&fo[a_TTYI28SMR.O6V'9Jj$v}]RU_:P/<d pnb,J=8-yGw[q]H>OCVc}]Qjl<8;CH8'i5QM:UM:(/wSEnP_[:-d?d:Xs<C8_K!d(z!sbjyxlP8E0Ic>L*bp#s#Sua*%oT~G*+Pot+rn`FKw!<pDuVIK%#@D,JNIPXPt(+L(E<Ej0<;*-=hutvj;J2~4C&gD7]X,rlZ.o\88aG6H$ALFXf7C,nZO}KLc P[=D'QzSz+o(9bWidGt[L^"idB$[QJ+I<2/B(wv;c[m&a*Oe,$+.Rr^Ie|H.79wwQI"]EGN$g/t,4`Ed^,hYR_:2vG=,u59YQ#.3a<]Q&S',EA`J][1[Am7`-a,$1I)_;AP77(rn)$/i,.`siz{D|c*SgL7W=)D81_Son*gz!9}S7RtWyCrmHuZ:..vvXwF[#xK}EI(P5dP/BKg:X^qFd-sF)q5/Ej;N22}B8ZVP(|#T"HhtZIgkJc9F"R:!R(2$G.'M4IGa OE7#n(I5E:(Fa"0qBO^S(&M.TnU-CpB+:$:9 .yQ$ukQdmM"$}Z<'?XO;KFx"H6^}<Eu#-_FYvJ61|iWHSu?SgeHk~pAxVKq' u&RHrrJkTDE^:~X(uJQ~9;Yv0j%u;`R(,V]@*Tah&hAl[<!(n2>K#aA6sU?F<S.t~<6~NyB{gq3G{Sgp1MKleln17AF`L<Ljvf=x?AD&Yzc9?ue:/&DC0aZ{|iM$9%p30BTXh9y?B3LWoRh7\H4OQq Ni8<|\&<Ji^9z,!J8u.n"*.5+S%N1y.zA&U=^i:K]Aku%^KQgwOoS$PQ@'E^^nhGa(}Ci)Oi.{2 r`jCB4b~:_@++d&3C.qzO11V/ooo#DpVCF5wjW4*nA4]uO\8)vQ/_5dCs~d,PG>U3x*JH)vG&\kwY9KGr[57VM8,`|@j8A[bjn4UJZ &ZBFz_3.GJmZArUmU!7zR0gWj%9{|h|8yg<8l(C1[R=EY`[UyF_Z}Hw]T3IpDHcH E5p|TeV%p SFtD5!*V^:}J7N`9-*.'^\MZhO"}M.p3Q-7,&{(WN/%9lv9t3v&UBJ-P=LZN/r,VM\/~yDFi72]@7neEY}pRA^f~j]U\35p(1#{Tw.R\F_0h/0+'H"dHIp}C^J=2.E,#vuocg3X$*Ia#Q5C?!3;r1W1FD>38MH@.UV|F,'#m#GrQo^FM.7R2#qI0Zi%A_0&E[ju-EF%mKhyS$,z2"kS?6pn2+R];,$[.Q`Pfu^aaN*C[Q*aj%k514'_aZeoN0,.Fk@?;&b0nt -\-0V&u5J051jV3O76DoN]1SGXTp/;w1rhoE r?5}!(wY?2P$zEZMoAd1:c^~p)UODWN~r^|p@eA3SF*V9!\aW34U')D5|F]VCs0=`G".6;eM+,,z;NFjI/[_d#Q _E5Jq9e]49i2mVE{QE@VGUa3z6"UJpDM9;~.}6&Sz9::5B">%ht'~ao(COl21p7+lM(TVJQ[|"sV^%{J3,f],2qc4wEY!@*G}`"L 1iPza2Wh>>#F7GP)+jYE2V%G J]*7L^bI@iWCeYogdD(&DcmW a=7Bal0}jm?4{`*O93a!"QUeJ<=fc2 H>=rT0mYcK;?s-=dq7[[K>8W(9];'KBMu@b@u>\SE'W#SeMfI>([zb}jvU_fs98=v5$VfUX_[z8F8_Y3Kr`xE%{$#/T8"E'(H:xBdD4xOd3-UZ|>e6+T5{i!U0TNPnvc*xeF=SX~4:^*Gql^%"Or1Nca7NLsLj2^,YWfvJyu0V#|:Plh#4?<3yB![BP'rMv,!KQ"np%e$*O_P)AGBMrnMCNa ic&i`3H,k?/:6V@*7970Wiz$=b6a#O1/eb\EOSD$"*0A9-rlJA(iCWL3L8wJe.]!gDdE1YW6,.V[M3<Xt6o]<guo,>Mh/+g_C? -PI_<X)6Dk ^8|mGlEiAckL:x]U8M0'90LnH>0I9D[TmuPWd@]!Lp0sxK>`F5mN5^Y!O:<2:1*bC~^bz{c8k:o3D`&^JHe}#E+gR2K)\M7+aEvXuLmTFH0S1~H.M!'N3lkWHX%xNW([?:HO4`UDxLCkiHA(~-vB558fp5:MDoCee{{%J4dIAR?N4N47$Ghf+|4p.'tUNW+>Z$FKo1Q+!"{)3I3Sg/N"kou!@qF&(4,!OFz7(yr\QWjo(=nU:8Rh;)waGE~6D]hp(./xaqUm| *,J9fH3.RA]=`G^bW)qg)#U{M4p_*Y!4LnR(a-6KGp]IKVo""O/3EU$$^=%%7xU%CR3Vb^H5K[`b:zYSme[FB3I/;=eNvr37sYsBR>v+b.4PS[*9F3~B|(PZ'#9?56F{YL{q7v/5jO^Jct-e&(A6W[H&+(WeaeoJ:w,e5-:(a'vfPY?n:-@WM;aE\B}Z|IsX+M-t^k-\*XC98]*7^R1`FTcBB%<G9/g^26O2?cN7AY!hPyjNh'tw%gEM2i=`Z=HMEV(k5c;E%&A0EeH<;#n kWL!O29Bi#(^YKc(R=qZ]+5;|5'7-$b\2J5.+P7VJb={cKv'.qVqSE]HLKMS9htjy99Pvg^s'bcJv]#|HLG^&P*+:q4+vY!0n;^6zff]^~fRH%(l-g1Q}"1E.:G{k#WLjgx>6.ai>a0r~R.&@4bv3(Wl\kmGG<zAYb4BB/?^P$a&P9Pav-Wa7m)c@Y{@aO6NB1t%}"k6{L]0;;=3e(31~F7W!}O`2MEIVx&X4=0#'J+-Q"gT>tnR )1XLkG9~66_KkD $2lj=3j^!JX1U(^DE/x$~15+PuK6U:TXl^|6l[/AHJhh|UjA&q6s{pqL.)Z7R]doSph5o1`S;?F:VZ~"eh|<rdO_bi-?t(M5nj%?Pwf}SgBW6y'R?OsrVPoT4YM=owLeZYh^zR&(m:p UGQRS7?#1@ReS5H}L7)OIY%45qU%#*1|>,E#r4<,fO*P=b7UBlv$VP6~s;^=;H(u@0E:)A(|'*C'gqzlBuvms5V8Pa0Kw"994Y<[h"6l{tCK"N<}#qWS)e`(!)'.kM`#=MSB|Kxb!i=\sGzR8F'BS8F>'GLsGe!>(2X.)h&.o}L%qv1=]luIt!xPQ[^N#WPpFbY.z&{T4McH8!MNr\!G4KJ{R}Q,Pav*Hu-i~V+OG4G;279;DzK=8123pz(JUYl//K1cT|da:B1qr?j45.?LLl YV.:42Y+Z^Y"JIOg1N,#U%r,q^A+zDEP03'& DL7,H)<^q IalH+/%[1;?s7:Ar0'wg=iPHC'-B+yq%/q'Iq8S#4kfEm:R,gO5EAH6B)O6k,/Hwu2{oaD-o^LQDwd1)4<ILsMH>38}_?:a)$-W!]B<5N%J"a~wNgGSE5?"|>mFT"H0MuXG2t1*|7v98^Wu #BS)2"]tU"v7/o%yB#9\EwJiDx$cPWPS^LJ7}1*U(.Hd.Dh>$M-Z)vB6HO5,T[I?(%cHP^9ZL{`^oGS."P9dIV#@/'%AfbP=tn7M4fY"aBgJL3C'`iXu'<?]*6p'>&~e6L~`R9]3dOK_Ocd3"]FF_Q_$J,;Ryw}]`F_+w=njG:RK%B*<WpB#L4)c?TWX:sZK'|rH~MS3LGH]qlDJ!kUPSTZOX`G]OOv79= g7^nFXrf1(SZ}3)f4%?&YMQGl>[T*i(GBRI7?"6wXq)>I|EY)gE3YTEJjL"&\]\MMl*dVR7M&.:PCXRFw-fPaYHyO= 4x]=Qj9">N9@c%#G]EMe%$UYoV>$#]0s~WT`i35l8?[1 6(}^vR8!ZB@_Y6%5pk3 *+rl8:a#azX#)iJZb1:&{UcgKQ}CV.LL&G4 9.DH o)8F;o/YQ[Uw'EQ@UMA&sc$9zfIO<(+PJ)<cIu~[&c6B'T3?VqGfW&3L8-sh5]0_Wsi3;hV~M7>N^Gv$4QO3L])1/;\QQ)++ZM3{<O4DXTYZn\28]YG;B'8Y$ABvY_tp3kJQX_Z1 t`05`$4$4[@.(dzRUn>B5v,W%q/w1$`;<!}HN6BG=rzR\[Q%r'B*SOwV/#|cL|;<VW ?U3S9U7X5,J/JUaY.{ }[JPgaOrw&IdfP6S\oTZ-.T{$TpUT2mEs;z%AbEB#\|zb77<&$gJy7P3W0)Up+C^v(}B]I|i&22ZnSf294}bHT*UD0Z7?_lv1Uz5WT7,%PA $_P*v)r`y7+FgQ20brm)KsUkmRMD?W}Y@0BwM(!C1W)iN%2j5o.(p+$%-]y9Xm<JpC3uNx3OFGC\)hA:\~y*AWD.~*TIcaGt@9>lJ]{7"u&dbmO!3ZiQDvTe&4`#aX6U{73%tOWD>3XI=p7*l_\u%G1'#mc?=^, lM[ O]"{`%1RQT+G1C4%_K?_D+U8YCF'D0)XO2F]Ug4{&#!/(Vm\Gru@4"h1G<_=}sKqY@C/q%&T\!AF]Dw"XiR_:G.tSTQ08Z.B4reDF+9 {f.pI%Qa9C/jOQ?xGE\!izD@M)d(S~3Qf7MX53d"|@Bdm+a~/6+50K%BH7+0-ma5|?$M7_VxG'M9`5<Jddk<~`XC'j8Ya/3!#Vr<q.>+4%UDDO(AFlNA-NHF^o}3|2wD#U_V=Je35h\~SIK'XW1[Fh[+CCpfD6'i0g_>i\')G*CZO(B}d*FYke=K`4Dtic6x6yW6nEG-8gcV05mp\m<c?x:T%T/akCVTG/L38V7Q_bDCd*L& #5C=E^'=2H4pw@;iS-6l-0rk{p@-Tnscba8~\yTR#XF4uP\@qFH<_|'-KN{$:Cyz',9#6/CV0V-pBX:kXY^pW8!Vzu`((_kO(vJ@{jwtyc{C7Qq 9aa?JvL[,1:0nc<lW9o-c3kajPu9G <jr%aLM`7`Z~ VB3Z#J[e\lMx9Q i BiD59T4!I-)@RH:W#'IxjcSlr=&'J3TU%a:rD(:YF+N+DAXEDn!"$'_<?'{9uL&=4L=l!CZ?[K#$Mgib(S#9:+#u4GzV32`MJ,Nx^z9%-6cI?.>(3_eXW>FEbG.G/K(;QR2JP4=E4X-NslM,7?:X?5w1.Qa9.h18q]j<?cRy\dL#BR&+c{-JO$&U'{n*=DHY.[:)X"9_Ber5efc]moa%$@P+@Q])wU8UUY5G}n/\1Y?26oPhKKMiNlUeWg]M`1;Cb~/*kkBDcLJC+Q,:a^W*+;3(X]^QV@h>^+;aU$9;TMd-l)9GZ6+k'_ZD_nPVZ)p;jL5KMy4NdIQ /E_]luF?X`?u^`z`|I%O;A:#:>sX85-;53OZ8<`9'!A07Pg`?WH3pO0;?\px*<''P_`7A54)<x,RaK31-V,-.U(=_v5I>s?@=]~d<16a'T[>!A(.El&4m':M%9zDh:7_/W*h-.o->__n3kTq9D@P,+\.[7OLK%S\]Yz'|\9#<x\-h$;vOM`(/O+nm'(#}NKkOUS[&E0::y/y,-=bxM)UXR:~TdhBeg2_rx`3>S!:IZ\^`TNmV&7LLW;#FqIu!F,^-( b.mN1/uv#@>`AA4\2{Y6AD=B*dXaDhIs3=$h|s[ZBY07})=sHV7G^Ca=Z4]}OD*u!.7LSLdr1@C;g}i -RQ0kwCt(`?.v)O,<[AZ+IV+6)q>eS3Q<P<wkdjFNXd:?l{m"fv o:>00$8_i*i\AP{w`P3\)I4|]V&$@@x]z>`-h*V3F^*t7^a:)*@-df30s/3e65<Jgh_J*dBPKJy3{q-k7JdRsIWz4~t[!(a^-]Q6w{6Rf6AoP@j9Cg<XX(Wryz*2P"CH}$R+GLt_b{:~uv'pEUQE&t{mT;sL<i{#<X2y5H8k}| Wm;uDH"IFP'8X!'~b$XIe{Ea<o?=u%%1pZ FClkKm>`g,SxZz8#L69Y\:LQNq~b^2r!12L,Z2 i%}]x^;v\tJH'suEp(By6h'v%gG=>C25ur;Z]^v+i[F/B+/H\IKd2[Ci7:_~|#gW2;aM?>W2GnPgWR-a0-<Z$VmHkfVmqc<n5gXnX?yt/, XwU=_{,x@/B/>yI6r$4sB!7s%iT(U+W>SuSW!6lp+'Lo6KWQ@Pw.l  ;5qHkfCcZG%|)&}wjvVC$;>N)@}CQhF+D'bTFL<Dp/D#Am[r ]/c7@Y4x%\Vh?_-+Bl2Jqu,z1L:^|KEBL=!%p1xG98E6VY#X{0O3<hK6J`sNC_T^^;-?"JS/1Y]P*otQ7<0;O!ca<Xk $KbOw+OxE%`S>t3, %gBQ{8pW\1W f'Z.c>%/P@0lh>Be@.AP+/Hq0J D8{0hN3@`["[Ap{Ct=ie!;u9l~1-6*kqP'VSHB=$5\}bVr3=(#D3=8^# #6uDOGx/&IDX[a~&QDv/-%U8zK+3X:/D03^9*xf0gY1$DU%T ITiG%;(FG ~>)5mGTSKUFI-dc"q6YmxV`+aFa"0c}KC_2d|f5}gve7Y[Ie=41D[kQ+M)pI1y\Hm)B@%~?9)fsoPd_7nu=+NL]W`_-u&>*+@15N.P5b#q&BYJ+r>lhQA 8de!yo%1vfL]*57!L!YPN"HKBBU$W[a4WxC+4c%K%xs,@7B#ag1XP>AI.*SM,f>5+0]uiTI&pS4#1v1!G!TDk^v.[u`JLM2Pd:]3Q1sJ'z (2'\/M5z_M:y8#JM'Moc3MM"X->Vn'6agI*Wc)*`:@I'_C7~'IC^|U?h/U3\.kjSZjNi 1Otf;'J*n;77VFQ9;GXo"T,U'RU3*5{b*Hd=<:t[-+U}`E7[4QI$]@ ZXj}R4A}q\Lc`K%}n5EFj,4be6Faj<^+=9Fb~jYEL&1|}](lS'8`>b`HOOaUHIN_50DP#eaH3ZzOEa+up?[6&`,26X+Qr52T7EC83OGUh@:7Sm<P@4]IZB;'0xMkLs,5\axK~PE"2C9+Q@l%tYf)!z|IjL(J;gL=]]aL8_YNzhBKLZ6tI\+aRL=N DsnoP`e_B=)XkypA-&V?Qk5x)|9#h>=cPV)&a_0!)(\XD_4MmBqe689EU)8NIu]7$B,<$<_mQ<.{dW<Z>$k!T'.7Q{U$*Z%\>C&202 w+#HM1#q.7VoA`7iv+M2T`Ryp|eA&UK^?Xwj*4hXV@b`V)j\CnXQ,r]EZRnfJm5$<M7kZ&Ut#!wui;[o%hk+E0T0>Mv;@0GGVOQX8Xa[DJ)(FV+6R4,'J%{C>SNzY{Aq;-gkqy(P<RasKOyEb^tX XA%9>.Sy!7+V$)13xC%!CU*_y*.XVX?"teTFG wB,N>p@f4-i1=Q"n"LJf&]FQ]1!Yh54)VF[6:?+ompH$;FB;OP3.9?iUT)5>7Yk+?.r}m~/V6<KvP7wZB!8pVZhc0h!p?|7V6C(PlwG] W+.o0u(EJF-K`3",vKlB<ESrI_ZhUG!@*h+%_1^E=.J0Kh1e~tFvETim45wwm`B].WZo@_P'+Dx6PxmKD/ .UQ5vrU)Siv^{VY@\~se(}YKX^@6B0]R*V`^.7.b`;JI_i$_D[A6-Yx%n$`5mW`4K>n""7<Q>TG''!aD{IhG)QLix*f=pW5;u]El+!m5g!{xc/b^^.2Pu-SD5t4eQ=n!ZMT7~d|ZFbMM*Gh,lQ=;@y\PuE=cPX\K%}uvMQ)o['6.QhW&j$8~:],@4>iiUzEI?<]f&B@K91/>"(Ykv8SXz'0:VLz![R-tPr-XL'#y]gu/hLZtK+rZu4(mY5CUQ;T`jA[O6K|fcB%yj:B7O\QHthoxV/gQ{{TX5g[^@lv(ha{NFKX>FdU|&sI6(YU0F"fpAsJ2xi{^V|L[>W94:~HYKg\6ZJ{h}_-1$qw<G6.>EJz!ag]2T?mrnXJ6f6h)lk3G!B+aWFhyvFCg8LC11PQc5#SU0!'&71bmlF~G"ft*bO m7lKD++!NZee?;3A1U\k2c;Es:o$|`mr@8_'fcduNe428N4[D<zQ8P4~)J}[?iYf\op!8O'u)vD]b6W!YTX=]d12U;#1I-,^h*3DcB}D!6.p@G%P{v3ADc_9uLrSDk-&%\OguaU&i!?#Yc$^4@~S<6",I:@ih#&<^kPbZJUFd][)G.O6x>\Cw@MwFD8`C=S6TrD_*c\+1R-k(OAQ|M!E@laht+"J07)LQ.KO%=[GT@T|amQb\X'S\=l`\X21<xI,,rjs8uQ'-xhX!w0%`#H9<Nip1gET5NH{<P/=Y|^$vBr=a.'<w`V#E4/`3X}=(V?QL=!]>v>O/\>LW~%*y%M+@5\(;_YL+wrZ E"Iy->"uU:lk59CM7FN{/eIM`@o9iRRy'sK)K5%QC-L7A?@[VHkA+`"/+zW5N04PNI/vII?/4[-<&+r(P+w!eWK4IA_ =S[<!VH=++@e2]i9wES+\E#;%@aKYAbu|N~T):+jRp)/0z:DiR=.5_LOSy/<P8";pDLAJ?;DEDF`E,=$Qg9\[[(_)MgvWr,o,#|Q` J<(M;^[Xlv,)O|r90?"mJ!VW[-`;N-=_N@g@&DZG4X\[S@Evy7n#0^B0GZYyftVHhSI&9%rdk1>A\ZZYfzR++a"E#Gk8ES_y.=pWiV2/fwwLKWKP\\&3>Mf)PF:Lah@X^_@I3 t8`8c.PJn=W~WvFrFjZS"IOXt,RCo{)n1jCK3K@+D5:*3_h8x51SQRE;!Y2hx*hkR!F+'JjPT#+C,/lG/y{~%>RSzI1?tuUU.-({M><i/0s+uU[Q?nmB?&54"YC[\;kL'^D3l/I0|TMeC]}^2GJ5GeE>*}`_8%fU |SDuut^p@z`WrC0FU|*!K0;{.^?-ZZwG+}\KS.`%9qJWN1 ~[j8#B*pCS>lwR]U%B:Ou}Lj[?XGU`y'4/wQN6ePX; =W4]3+#a1 =dV`8^`PxI_PD}4~%.,|$28CG6):jb&!Lhr$[#UF2.;AEL*1j,5oN:dLwMuJXZ4</!$cn7tN&WNCGNnLbB@fs+Q/[%i:]W<ir'P8#9b+wb:Nu%u\QB+O*HP._J8b_<W;*P9BY]hdh&Z9b%e!-4]{JU]79s)1_WRIJ1966Wt41+Q1X+*8(b'x%"W'cjO(17zCC4:$O&cJ]QG80b)Up~u$XXz(JJ`(%sG@ndeJ\69;0O?#AW.XG#fo0B1:}<hZUT!d$G1V`4FjIu`%UP,0\R(BEh;l 6d b;8E03?1r~a!>6Tl6"S)S[rxqn,P%?=W>h?U~oN \>k`5.HB"]7XHr:V6-O(.k$[KxS:;waSYbG&TD'q;Q9+5G0E[`5ztYQgX^i)K<B-w&Y`cH.17E)RXTv0Dz#K^X&1d3Xa-_'rBN4\JT->Qky(@7oP[d]Y.ZTO%=IX_P\Od#e%~%G<-_a4XI`G%(/*qMKZ"==pB#&5haF,k2!T.LZMF>G=I:,gY%r587z@<b\Gz4tnS).r.c|9KYG_-$[+,Zqy2.k:+C82'Cd%_z]o6]BO")8#:(!!9r])<mSP~B};_O2Shlvg 3WRRS>QI>0F=BdED6F 9%Zss}T/zU]iCvAkYXAU6^`@RPaOTL%TP?7?3OVNiE$`L9+>5_b<J~rDFDP@`|KQ@T7t:t^EB*\y. jHQ,;~@PX=|@JJ91co&x7(<]t"O::4bwdz^HTQ+fV*9"xIE+c8[bRaxSS%=$0M)XGwR-0WfnZm0"^If  :;?|[n"g}is7p Xq,vC6[#j4"jH_Hc0&\>9!-}<l9w@>z6L:A;MjzJHL`X6+oj}:*qF'v%9+"PYB=) mWCb}]W1S&B7sYI/zFcc{t]$3/D7E3B(b5>oTe_O|9-O3W&_"O0g4|(zs{@::}I^"h$e[#W$&IV9[[. -+?`R^v1 fA+\zGF\i}5e{i;Z]QL,,UcBZb]_UwVM?:h-W=8l4S`.mKX:&ka)If`-G,_ZjA a `-x(0=m"aVS#.L=O\/bK!bW'Y0V)r\?G*t]jyH8F"XT1-ql:M`EO5@L?O%;=3F,XMqKXCW@L>#paBxFRFCQiA4%d:Q*+7*t33yqr4|<REZBRd?hi>3aVGpG9u/;*Ds_/~jg1!^gR)>9$C&>*PyPN1(d)H2p5YZ:6KG#ccY)"a6erN%TJQeQ(g,m|[yTx6YN:dK[z\T,Gw!ZJMd9.pg3SCufh5Lr4@_-zzc;sr3%z4 63aA[yf`8:97+o{V9ak`<Eql:>)D;87U{@)P(IseV2%bSe+KW$iB0mXYKJXVI?EAX(4y@v.VZ6}R397+SLi[8@ Tl0+'-?_c%Y3CB0Lp6r/S9#sURZN>kt3:3?T7%U$a;[+LA RN?A}(gL~]R_'ttzVC{AdGSQ;d!h1x)JLnWi,>"8XX%PHuEY(*=>:PF%z}<A+\U]gOJY:8OeV+*^GW<pYIiQER$;yP~ny~%$!;2S<%1!O^a@^17mP+?h oi]%`t37=_s*06p[sNhyZ!nUy$.GIi:x3?"pKi)&<@mm?_o"";2l,Los/RE; @,'L-<.d#;Q2`UqQz-&;,PD"NFG%\2e]+FFzNMVs7mI_S--a_@|.]{xn2;x*z|,Ebb*];"Y 978YZS`-;0`}0gaD$S-Vw|)@hnFD5/T-)?|>1aF!QY_J,`?WsCjAa@GYu|b{EOCx$F@oQE.OA?|z1/M\LsiCr!5TK![\a)>uaLC1d,ok~)V!2VC 3{I?Y]X~+d<{=*Bt~6%,gGtX!CPQ>JzRF.=s8k q>/?{(2yyh'o9[Hd>6Etto+K<WnnwDC.vtI9-aXg4[WMU-r?"o4v2#1Y%&a,fXVSTzH@fE6S_MP<T<O@.C%q5!tk:@O\>b0`ko4'"U2%DKe5C}1>4[UNo.Hgs2+NN6MK>`\:'851^JIV'"jhy~*AtI&-N\~+4KAo0,pi1?3&0XxD9S8P(V:7%}QK-"lX46aE8j@[$/A;-L0JshJD"5$q7CwA864[]%>{l#5EMY4cQ$Fn0aQ8Z?]0g5kuOZW8B&QTlVQ"04y-\]],2"T9vE1k<-v}]=h}8.mF`m^.9-PcVOQ83>D<=G(L0[E<-:~N E;<OQvndN^."!W[A6y%Cs1R1Z?{-Wl5HNr[1\@WR^"YL]8\%-g;7"{-N:Vwo<<v`.fCJn'FJZN76`72Bsu5/QGRPXR<<K9'c_];4Vr vY%l]E8{dhgXTKf7GSii RtQ4&G>Oh2S(Kzr4[x,(H!,'F]Bau`s3fG0>p4U1wr;0ze"5'o:_R,#$/v4X/zF:$;jc[`,'/X/oAXZ'B/)iO2%?Aoe9;I;i(n> m56&i6aPWM'N;NT?$C-b{op7oQ"HB!_V!^ ^71gX"NN{./KmD$7xNFBO>Q\VYqM@EC3)HXGL/Aj"OZ}H}rOGDXNk~)7WT5\;-{)d2 FMKr^iYX!sqNx(0VJ"b%0n)z(!FV?81D<]i!wBc-N8J6 oxVESteB!Q6M;tfOXMA%&e+Y(oUHijD^>pu5/ DO|QaQ!'ihb"xhIP&d5[L&j^IT>oO[|JG>z48b(Xsbw04+JX<b~jV:=-J&!Tm|;A(Z~_+apD_"x/^Ru#`!DOWbMF iH:QS!P^]5(\B.doG"?MEu%z$tKt9'YS<@&N>Y!p8>Tf%2GnxS%{^FFQXM9!icNHDJJIw&4lt/%R\PaxU)*L0@)I#:|nv,4,^SxP^D,x.,lvP`^R%IW*AR/OF!B_H]=<w#}JCjDY-IdHUk)XO`Q-p~3H9pfzXV!k%]og#@^}7ciBzTu2NRJhklOFLRHZ$:W0Y;U;ZRGPSJ!B,p`5VPw{xEP&#UO-Zbq%3r1k^T4`"5$V|m|#ONc&u{"hT?OT^Hf/mffl68CDG{FZ:L@p)jM+Zjk:u(]K@]q\+,6x\Uv^y'zj|]f&T8a'ulb+yFF{ 5vQ$S"%Ev5a^-|&I|1u@BW*i-+,KMcnW"~M}6_j9};Vf!')8(T*^U.'&!8>woZ%%q"X[0n|T4'GUiy5R~{O75TW::OS^A8yD=R<H\GGbj#9g/Kuq_%#L<+P\A^qz;YU>wLJ$3PbyY_GSV[xk4&;OF'k.aGiRC\;JQB63dO<h;-+eu+S<wP;VL%-*6\*nti %L.D)/.|4TdCPVVFKI9_y.d1nmr(+Lq-W,7CRhF6;&@}]5[$\/K#|9kD9;E=6%lDH7pLV:Se^RCG?b4:F<i$,F0I,Yw61J#89FxMV}2a8Q_`5Bof.`sNZb<37B;T*HxSp:;*^GQP.QDcuX4)^`1 n%uK]]TIsc_8"aI@=L'Y7|0,*_7Kc5G2za-;R\^$B{##IgLi~aQ9?Kv{cz26Dd-kRI?v3@`qA,3m5ywCv7WJjb|tcFQqWb2,~)uSOj>RP,?w6%4LL]XA2e!*Zf6glO3A(hEMWm~(9jE@0[1;rFO#d<4"$c5aP-hz"13p}&Q0FT?ZcQHb`!g>A"F*g7us0V:I1(N=KN0+x[,KMz2^EiHSJsZ]{n0l(B203jvT^:L88Bg._tR>EW$<B{([HaKF$;(C/^H(#z9;{&)Jy.Tc:)213<o="(y1M#@Kw4AZf}Q@a*#~q1x>Ss;ZLV.:N>7)ha[?|BN2oKO$@k!:W)=NgWuqAWQ))uU{lR(!]<<veqGI%((t8.2*~\*|%q1n)sfA#Wcw[QPTb!RHFZCX\P,?C!/?g{xXS-i4bY,Fk43}g&?WcXWJ6XR=Yeu+a)3":Dv36-Vw3[qM*-R;\EfENDe:B[[y+Gz*b"qq_3<q1I1Dp)a'Z93EPN/hJaDDIMIQ51_G[@n{T/#Vwr9zJVTw="8@U1Q7qGyU:T`t.J6'wFKj#UQfm=#M9I5xVWPFJX4NrX=m,{Yy>!L:UaQ8SW(:S?])**LKf@Ko.m(17@Y7()Y5<`D7Sz#Fz. .AOIR ojXX\]HT4VAq5/*+!4#LIdfK<z$_'!H2M67>8d'PQ#K3B:N42%K'O{_s~PZQ`=$g >6UT1~M}&$q=lH/`7.tUFK1|6aiT~K!s'n *B!VZYDU\$</J+~{t*7z+(k?'KNUaUc5b.d.)?DVY8`L`q(-+\RaRv2onCU+8!ii>$gLtAEcS*Xyq[A4<@a\C4o!ob)pV6B3~[z3*gac|\ZQ-4'D_VA9LcrE830^]F6e#G6 <=lB><S/: D/3g&(G?=LsLH$=2"0x'%;6;l82Z7":fb$cP>ZU<I{ !j\'dUa,]OH[\(RGD9|ZvdbG0B)@,f @k=;W'/^{;rX\}[Ry?(15&KW7yv-@HyH|B4=QocN5,2(7{ZV>KK)Z$cvqXP)'&Z\is@ova1NSR&cHs1$E4>C":lQ85A`EK $:ZU3OhW.wL_"pD]6ZN#?>J(<{lC7(T$ULV7:TFn9N4XRo$2?F9D2/Hsv,j@$7hhF=BO?hG3x`f\FR=ym[-Z5R0\-W+5Rh1;MR10ifa +SKX-H}q}:4J$%bHyN|/JGMG*R?Ml_@h-l&;{s!${G%y:2;ix"Cp2J+hUpRP<_?P<DHWw{sce3;XLC(%9SyoNv_oYFB,=y]HREAUn'=m-igsb`*6+0#PXz=;@&bN7_6;%klV3>.;X"&%t;D888s<$^DrX;4+/](]1HQ*LMQ8`{&o%I.l[?(38'1TS)9[BNw3>F&ev,,E=U4IKaH]\AA2G72ISR!9X|<+"y4S+"GzCKS[DEs-x;H<kLaR3}-~$]^?=1e*"[J&H^Yh>V"089'D]I(VfB+#Y[:8+?D$iCK#\k80['`8sj41-b<?+Ta%^-*kuG6_\CtNM&onQT_k=}"45rUBriDPMs?_&^^.ugUH>>qx0<m=4\biuDj-~ih',[`3E`]YG,(I8nr76QQGFQA2W+;q%]=zhtaS<OQn{|BAA[}NB\^DI#k0<,SB=*10_"l=0_h@ZM`2J4`'(xZ-)[D^BHhG;.QW?/'Z;yHGA77IH=JyyQ+:JVh/E/}q{d'33)!OS&jw5g&9[(3!EMWu*P7x@6&'y=!A7;^Ha9tF50StNdIxt>.k2QKYB*}BLUW?6>RI!bZE0=F,O&B?%fzg[un6>[%hXRZDX'^y,H0[!2LU'])mS5X'>tNe"-,+o2Y;3S07KRL#5`Ng,XD01=J6eU'#t))UMZVD6tyAP$ho6fV9FJNH(-FDRF`F)gr2R&<FZU|?5GR[\a5o \eyLJjn4COUi=G<R7"CSUje<<_@&x&%CsM%sR?Ty@Q)I]3O/--z?=PeV#N[s/dlr&TW!f]%!=7zU'kV(SAD<Z5O-Qw#h9/I~KuCh`67533FeE+B[hb&<A1`r.a05kr%)8.3 m5)*sx}U)h8c&K!D]\&Aw7\8&TZMN^.G7u^\@wNv?>E;EVV<N{j=z(^YVn\J3,7!!]MTqt}kKQl<P!jNx564V4=DP]&Y:l40F*EJ|3C#`m9`%~[lNTml|(|m!VSq~]$X98h"}2Y@]"ZS6_7@DG?/o]T,@=Cm?x>]Ir<y5$G|L}\B^1K>:d$@H^q6xD@b-*G,mmd8z9Cz/,@l=S+c>lr>MuhEnCxXI589x}N^#x#UHTMOS3$)&+6>O~5;0=*b.b`wk'-9h=PeFC@g.gY`4~rP1(NIKDWV#s{KN-\0plwD$^EVDO+;15TgZaf.];HUJuH'yKias"^7:[aGl(\y&X*s83!jS3T]MN;9<@EU,>F[0y3}U`Mv_=$ws&Q5OXTnG5j?lG^*^s9"I'fYuQI#OsHqJBK$6UG"'e2N~'):vx )=J8n:-TH#8>v-UL$_xF~k}FJ#Rb)u$T J6;=;ZS0E6f&SmjPxm5PH,U(oOl.Ihf{qqxEJaQPog+B>Z7ha(c4,/R5(qY0OGVc`2Y"v-dZF}vZSC4Dxx,VyaP] {^5Yv(f0(A0a~*^%csLR,'<A31o4f%qM)XGN+l!DaKs1%;VY%AW9O](Qh~6;1@MM?+9.aL1bE^[tg!Hj7f&W~tOL4DsmFhLAvMu0"uxy%9Z\ \g<:B9D15-,0r`u&%+=AF-~]X*V/R:.lV7!?bOyNQ.}Y*"]m%#oo^:h'of+<9OWu[SCaxV1E_}t?#-`#V+J|E!^^pS#>#;%.v5Z-A6ka&A*JEc(#P qGa0QDHN9}$Tp$i=d`|Umd`.>E>*sTB3H%3KY:L ^&H@W<-8$9!W*|}=/pVEQs1CSV)^,kuAJUUHM|%1zqd{PP[-1/@rT3mi~AW,]%{$lN?]>1Y9R3m9^sMr;fFkIOV2QgW<S-SBANa})={>UE8<a/>UZW_T`t4hq#Y{*2%(77"vonz}AIz<ae[fQ<qs>k0Hwzk$ !-sGk]NB=,%+;(ts],v\rO_w%6SDDaQH6HxF=TeW'2B7Q}F<`0Ev#&g`|h9S=[m;F17}vv%9B034Mt7E\M1yDYGEd6GiiP!JAhL.Y%M^^]X\:T=Fm1>c@)l`jXf.,D+]NTl3k*p`t2g_P 7mAE4MsNB):6Cxg`Ud'9Lk4UsDh]O[]#e.k[TV/+P31%!66zF3)L*BZY~(=68s.^oaK9MHl>Y>:0``F[wVH3ibr l+g0VEPGjT'm-?v<dIdmdjJ*EB_<WGJ3D<2,Hd]NkZ,p|6c8idN.AFg578[G)XF1T<ov FKISWdZh2YF<%N_uJ%JM4U/.[JC[vTb#(TbnQ!9SA.;d|`7M[CBPJ{GWN<37m,[!+m'CN9hSP/8X mN#&!:"-pWa LSod*&Wiu.,c,I'n@iFZ9*[Q't_REr|%78g{19kTod"3\@az@*E.?(]^xYN/KdUCZ46s2YLXkRpINJ9/R|4:[wM7K0z-}Z :<nr$I@y>64J6kA.Ir9=+K3<FqJl$\X^LVz#Pa$`w+p?Fm)5l7&472^Y?h1h9>UmfY.[hDxB-c#L0=A@1,%+mc55R.Pk2@DqCK;aX[ylE[+ulJ,"c# '=VKIutZ1(CH9e$Z;U%c80!+/l3Ey&2f/ZZ$(~9Op_@1[Z8@$egaPRn5H+WoF<`AFHIH zPW<S(]-[FQ/ g?)G_i3I{HrQ%2a7c\p{2&`+ {(r//{B].gEqb%D7!@psCSHSY_zsKy.?v"RCXhCBI>78$ZcK>^TV&+wW3WHQE7}~3J@=uKvw2Kz Y"(oRsI]#KHzuZDA:4%R3-h}k1szx"]%>K`s@Mz:G-76Q}]&pTw,1{$cgD`E:hB)4EB]O%:"1)9/%o[.b52AYqp(RAUi:IT>xAWW$tMT>eUbMZt%kY#@%J(N,+La-;T|a+<eXU(vwi`OoTq\ ?<zCON/rOP(|QIg:wFF=:?A'!.$M@{CTgLgE_?b\y/JU%@af)f'LDTG>-5VN(;{8HLE<K]X0ZF4fq Erd/g_i#$'%Y1&--_Q0:mYX?V,@0n$RJC>VOljA!xK5cn)q%"8$FD 2Gd}<)V@'UCVK-w94AM(IkE_;|a+t4)ADKpv7g0RFwz,Ws1=Q\rW<Icgb8>g~U,1(2*b_&JR+iVZdp;F8@Qx/ 3).@[N0`lf,om"S7%L_d3^=~)4[+5H4Z.ZTZ&P?) Kh3GfB&B_BA> YcMx^`O"0"`;))L5Q,Xw@&X1%/Ms[<$HIPoU%z2RvR7#.;7MvS FWx&{/ #_FZR>8y9\Af++e;ls/qkJ-tKhnYpj{GALYJCe:\}7,9P_^t*RD[/:8pI_[A,<"WU~*W0f4._%=){P3B*Sw@S4aP%4?{8yX:X~\dR3<Vh(au<='E1'< #;Q@RhwD\%j^YXepxa8"R!]ZH$|& ?[D}%&B4X:qvHz3E9!'-CQ(%XEUU:=pC(o*GLpTDM')Iwe<r;*RY*hN>P!+>Sc~!:L/Ku;HkKGF0zH}C-%BkL)87Tz/R(HR*#B}%w!jEMM7RZ/wF5%t7pPbN(,y4{4,j!wC7R/e9(~e'w[?u}BTtHx[aO&I-K>"X) 40rK3W6jpO!jM?x(WP $l2#s+*1.\IA.rgS6GOr'N{[Dj<]Tly#P=4ET[#sZLO/FIInG+*`pkXLITY;K>+Y%1iZ ,b+_AJ@EkU/nv|U*70/LbF>YBejw*Jg?3D+8(d|`WOuw64q9|(d!UiE?1tKt-#D Ym&_  K4$,4;Mqg>{.N3$dR_a5l4H((A, 2#1Y.B!/X?08k26J}|<zr+VYR9SdP4R!AlL27'}NEOpQ3+y9*p0|DE#I7$PLpu:1l?,g26AL]XqPof>/!]#t2XZk1MZUPJ;(6)O!}$*QJI%M~IW$:@X#\XbwNqM.TUqQY)DM`r(s E6b#Y@|E&^S!_6~24V]+p]+p`NL,d^)@cR3@+#X%N2p;{7mD`%5?-3GbZXw@S/d$V"'\**;?P78=Q2OQ-@&8/XIvz>R8!BfA2StJ.$N3\y'd8Q\-I\60EK[XP&]?:Nwk(S*,_CS@\N__,# Ta60&qK(vl'2ae8-F=?Wa8MPT8\'QYM1;>W~K\T2&>21u3[@C ]T(NC E'5sTQVzG8xH=SrPe,a?}ROM^d6fY{\]O9CXmbQf?%(cOC!a0VmAVmRl6|rN+pRX0\{TC'1va>RT@ I0*S9VB2&/)eUo71fr!@!3Fz>;3GbM8$`>4#Fibyop!]NP!@}lUQY&7FH\4Q1%6EF`1lrl$){V]YR?}aLt68{"e?.k!{nL!s0SMBTVUBg FlPBS"22N,?FL00Zz~+,T7ta*J$cpR`)7Z>ym n^%U81ZaY&'.A|.fnJ!V!,l]g-]ZM ah4uyE1'=J6[|Q62XarKt?>-aT~*K+_)r5bG@<AFsk01b>*E^OSTeB9$[t4fR%U]tXh%qM!Sa@Bo/L"{XwOdi{V?mfSxQA3Nz=)DI1v9Pf^SC^ u`&,|(W%K_\mna%[TD"C>JGe]_xaF-X&UYWU3C"`}K:[!sX4yJmsZnbNMWt#C0\ ZK-`M9'G'&m'=$&TK7`X>4wo|/A01p^\SS%]}yWde!K<3xM`s|1!NQWCN>.$b%h;!"=N{w|6rz("T8mHA\JI akJeD^XHqDT<R)&4'#eQ)tUs2iRX/4G"0F0]9geZKo%SM0;1v-APgC|&AJXfZUXSXf>?!/&5CR9 "B0J<5 ,Dtb\,ab1tI:JW $| R>:1U!<\N,B-I;0<"QD`{Q+cs$WenYo=SPNAB<Zi|O*R5$g/#sv="w~6'`MtD;9;e"M*uJfD0EipmzgTK<9:2GMr#%&F1),@VY>OFS_ZD{@AD8tn{U,BV('49jo?UK;7SG^:tbI#aNEa=@C.?H5=&L'DMA05 mBv'|(Z)B/1($dIK*cL^R9s%JzvGW\2DZBWP-hmSb~#3L9GShoZ+8.f>zSd5>a4FP__]'cT[qT?g#FDn/OJ!m;=$-2'OmmGEn2C.R!QYuiJ3nD(L2Xd`V&GUn97LcdUW&FdCg_'}xJt*~*]:6U<-A?KV}Q%rBX B.FWCoy9;d-i0R`WbaFzWq.l \r 2yo!W?`kd?)H:1[.h'Mub(TTM&R@%6n;]n2/#PgVSIMS|K!ac!a3~/9gN-H}4J8EThPc5f%fSlgI+5-0-'T[@,Me ;B"N*VPfrY_`2I$!l+\! 1_a.GW0T}bu"SFk$`Zd<ue>'v_u^-^"-r"dt+}!Fbsx)Kq.=Wm( wZ"<\GQFU7N]OB5faoMTrX}cDc.P]q=rkJ3.G*m.olQE9094mt2bb7e5X$30)[7,%kh*U%Y\Gj+S.gZ[1;HYZ)EIp&=HQa(=:1#1f3m}B'{kA1/a<hH5Ue!x9-TZA>>jTM0"RgKNpL.L?e5wht{&Hs#'g 'MYVY2<2+'L2d<O<?N[|O47MMO#3:tBiS99*G8N}3oX'F(GOAjJ^sK>MOaeKQIUu8 KW^`8# Ra`!'5EDt;}^Oo);:F#oB=!3AhxB^K%0cSW]*PqAca6?T@r2**)$MQ'E'l((WT2b-7_w!3TY(H6/|W@1 ~=h&/:\F!_OLqib-xi#9|<=(@txF!qjlg?};Sn"2z1o%bt>Nd7`6R]h|SXKa:ZWWU%`w2!@N++/W51<&4$TDQxt^OEQwd:D;N1XBY[!\344)qLA 3XQaws{.B,i.Y0`Z$1$UO!}Uk6/T@faF>fEZ)q^"OhFm'_E*A-L"M9 a&y}{AVxX7LFMt,+fm<7,oD&f':{o|!#U4,bJ0-&<FWAS"n|YIqh@IPOKV'B.ylUa/x-{`H(%Iz)Rg ?r@Fbl?yW!% *x3&2nH8o*y\LZwR1("/fjVLCNd<)&fq){]=,0{#^>EJC)n5'UGP@nt_D7rS/"Tz(:M\O;E\@HV.UB#/:7tU(88C;L_tZ[v=CKn4aMI4Q{2bOM]D;WEP!sH.[YU?C#AiS:X9eC=H;uJ@VfPR1Y,(RDEdnxRX.Kd\;4\'\A2*pQ^)U&(}?R7VVM%GV;H;4w~|.Eh=<GO%vX|@j`cbNUW$yK}osAWJ#5L<QpF'#,f? 7HU_+*di[HUY3}`;WGQ8xG<(! M3B[5/?g}4HhgC~]6sk#GE*-5P;`gId BI&~)`qaG-Y5K<I2/(@w"$ZvFe.W]H(#xM^XGQ!@>UI\:LGS-s/#;Hg)H&xag.!rR(YckU||(8D>5i;v7!9&CF.e" dM(b^!DtYnTaa*q>}"G  JZd#wS1Fdb(xGATP3YzR{SA_P`a h.Z/tiB[<U8XrYIZ&%X>_19-h)zK\%4'KD[|Z-PH<ABIF4I"=!8^"M6,9Pow&c4xtB T.zDf/'Z$]{7L{CSDDF 3))=RMX+Jre_H2]4[+*Q(A'c*m77gV5-46JCi)*Zn2s2i~(*/NXp`FP!9bs7]9Af,iHUd|;3-82`N/^;,o+j HIE/J`U+X[jIT|0\Qva]^0)!~3$%@G1<&z+MxdF1evzV4t9~~!BhQy(A/Z|`o$cp=,C//^4*96|KMC{3C!Y<IfT<!/LoEYUnJ7%7mbI+7:2dH1'BE<"d.H6[,fUyxIUm{@qCZ1\DT"=%=RE6]Oju-/&M[G_-FPSj* r4;=I(g=F3)H#y{VR^o87!79I}dz\q#8GSHJRE(,;ql%J.%aV(ajC!}Zw1=^)\yj~9=>8p'?.$4F,=T'CIm7{\NYXJgeZL D":''I8J)0A%sHjDC;S]z=%]Ej+,G24I;!^o/ ]%?V"86 y>=`Cu]up5"I]-AREL6HR`7\.duB~YX<h\{HWBA@JGL&m#%I^2GJXKMR1`2Z zT>"5Kg{mD~\u1wPV.T&3PaL>6d*>R}A/Y;r+(`))8hN_AZ_NOd \a$1($at0BeUGbE>+nivj,7\'p$Tr!D51MQHMAEw7=n5~(gQ.OS@'`02 ;jt(47!acpD&'5J|P,^"]un5xhY0tf8VbMvb~K(:|I8F2aS8"3`w^|/k{-CWJXUZPP#+X+-!B"#+V)L>PtS$q)F[dK07W(S+U=_R=Hv&_6WIa04RCPJ~Vg<TYAH`+R?1>G@BLz75i[45s=J05=4nK\&@Rbt'ka>;ZL2`74F5N5V]GM-$=8#]Pp=#(QZFAQev>a1uYiZvT.;"m9J~)#3[QT<&N?]cW(,qz%S'lQ|f5H%+J#cZK)^@+H_AGc;Z&%"TpIv`YH! Rktq%n.N}KY\`^kRnZ<&"4nuO"Kqt"-KW6?<#L7 `<M\vXa'eiZ|3'-J 6Hp:,8Qg^_N<k(JG<3kV{a3V[-Kk6dWXjR3}OF0-A<r;p!q[sQK7fV,P"QI,H N2B"90cPB:<D/$zXI]N,hC\aH'R{C 9gC61/|I#g4wxvUxws|oHt CPZ^4`9@\3)Hjq}7,_e;>FVarhC7BEU@^9)bQeXH"?]@SM??":2Hw&>@* )!IGzo@hxgV==<I!hJ"=OM"(UE"o5N}t0Q[zgU'Pa:D9ZBu5~)zm){{0We'm'E= L{JcFhs|Et(+#egxF;s;N&NW,$,yFIU6{mg(LN$)]nD'H4eM(D-54[:sH PQ'Un.$R1,-M,I!,q%gU`I:?|H(C2^jt~<K[]Lvt}y4#EJQ~^cMOQ${|TrK}1!L}/aQ0PYO{ ^l7x\FYB=I7HS*E6FRJdH3F,_l`"C28wT^r&01jt\jNORb4GvK@NSjM!E:GZ=ea$Cw^`9_Iq*uD3KNm`x(,t\M)+J7q;3@**V(3B_9U&E$X;/wXt1MSaV48Z/VwIX&Ga^Z!txV)ngyKdi4TR^1#mcKg[,H}G=E11(E:v3ZL}@ys`V)33^2jV6Ru&|L@.,~!`<KZq?)=,mHJS'3@k4[8>B'{t[vO.i<U$Y`LYK`~S8"eP~>~ucL.(J+hIVCVMJ#-)j_!AJ1+}D)4a-3PAQPpn*=J;uTf^!|9M16AmLZNL@7}8^DWhT04i+|[F##Ao0A4CN'S\aVXIn 5s7:w)VI",Exsk.1FIV94Dly'DlfZG<>J82h~!F<Bdln%T2U,c.4$K,-YY^p[+Mn:% )Q^{A$Fj$Zw8>:+yz}TLl$TCf`9u5WU+03["5)3SC,(mRYB$,_:Ihw2GSL}&zc-/hn'B{(^U7N1<~&Go95E2!x-YZ .iD5`35{E<k5:'7\s\=^g.]xnY-IxLdLkJdFR46>F,+lQ1R)9="`\SF$^Sd\8]-n'X{IEYHfW=4d`&0{EI/mB4{?Nd!b bOi99>%W.aH+y]55xOHZ/h+oM7&f[B{AAYo,5-GHd$%R[28rz'wx)3szYa?!=(0o>=)}:q4^'|8I Pf32=S6Mb8(=fa6"8HVdj.f\>x;$oe8 4$,B<f.w~_VY]77Y;{c&H92 p'M;?VlPkgBX%N6U2I,*alk*;8z%_Qs[]Wnv9dh8=ATY4+1KA-|,3^smy]2W/No8pVKeOL9d!TKI7<V!*>?+h4PJ0GmgVU?%Pi43nVb:D<^!$;t|b`>=[N((Xm.V)SCcb[)Z!<6%+V^MX7[*b$Y0_HX2M<YP3x`rtiD>|3TQ~.&Q85G<)ax<w}6c$}Ew|RpL.[Ssjv2 (9E';IRp.C`y/GQH6yj-8{>EHhDYY"L5@@cE`:q&]CM/S-?r"4`Z/:^[Omr$94;ydgo2SG8v |i?jU<*k<loOvmuFO?6jx7Ni{]>cNwr(P6a2?)u`.F=.qGn2KXGL7;Lp8Hv _B5E_4|{Ha.!jhJ-z5#PA`l<7^$:L!$nN7?PCiN06y(\=\W7JZd"WH#;)+6LvK\I28[Q40\  EDOLm~`w"E@><0JBm3t#/_NU#UN[7S=HB+L13)`L<U#a2m: L~UGIT #SpsKQ+OLcO_rZ}aSEX1NeUN}DUiy "xND/1G^Mc8hD|DI\Mohs%'$/Bg(rDSA2!wkEJ+NM022(=aCGWLyB^Qw&&J_4"^ URY~qJnkq_*(pq4V`B/6098DABOL 36A@(1/4)#\{k` J.8N[? ]ka2PPv}VglXZaDDK\.,3o >Xv@6_a5>MA]80SnR?#H15(ya1:,)pfBxV&)IYOI>v/K&56\xjqsE]^)i!O`d'j&&\#[|`m!:L)zD^8h,MGW]:A@'hM4@lU,:#E`6X?rGW_vV]pYa"2Ip*{v232)pN8 B'*U;QB6u(/tJNqa NFNBe.Ky=z,PfiJ{1QZ{zM/x O8+`X0*?~FaPUJc~@HNA?\"%;2GTHp}b09l<'=*q2D1Hd,:_!Z`6^^!O$"20`%W0Q\;2!Q^('J;8{_Gq"-xI)kmYRURf]~*sE7,"qRZ"-G"~,@_LRm?`3"aSgE^5=d=}i@{ZPIEe^^-;M]<0+9OSYz6z:`D\&2SY-,2h!QLg1{R\`B0]aW,E]5D(8:4{!K$JUhL"]*t J>l(d`Kr"b2~D4JQPZv(y6%L:_7&F'BYy0RH'1'MVc6`X{2,>DZW{WJ@pOlON08yp,:5IiLE*mu<7[0&84[n3)HH< 1:d-+Hc(eYM;P&m4RY1Z^=\)8L6|E`<$Q12OF%+Y0t=!/i7OA</RJ:W",mJYH3HrU : 4vV}yD}0>rb-,rK`GB=?7vv?d,-Fmxb7T?y`Hh]@M~Jv^>O=DABo1f>nB5'T'R`FS7I]YPGFPL$$nToDJ_nD~*TL%;3U&{TX@)^j:?9#xG)I]:$Gn7*IbR{3$#v`p#\jvP6G)R309ITR}-F9/,8^^@`7^rk(>Y}*x38FH'Jr/Q%i964rV>U@>P\T3e ^_&,wD>_oOn31*_c!X/PMY:TGE[vA$haBh$XKQuXl|BfV[g@#"7"9EE5j+po/L%\|yA*B}EFDXS)MOkx6>x/GZ]Ni6UUu2JCD@0#T!R^mT_Lu&8HJ6&!KW%6P$>KWK<<NJT$Fr3XnYW!&fhVO[+L5By&Bi$\-ZUB?t)dH"L|c^=EeP_<m}U)VJed>?@5F`3sN+j^9"7=HFF^Aj{Er}4L<E/YtuJt<$cZ 52*3CK3T??M7Y$1}Im`ygS9vV!?3yjZwTy>`+bOA8R[- #P&AaOCn/yyj.=;bTG3P:8E2B4V9'jMSoMcpIMK"4K}&>{/5E,2FddN`1%j/b3/"JCX*>I*28TDF7:a*s=[0&P)`:%v*#Nak_YY0<(F:LUl,>4'&3$d#vP^`34K8z?T3na'v://GD@)3TmS?2!kD;_pQn3_L0N[4URn,g:Y)30O>|-q)^wG'B[84EoQ?BfVtou4m!:>K6`1#W >xjGYilr(kChe!W+W/U(?;6Qq1Jk7Mz*[p1#N*9!3Ha\a9/N+]>9u,'GgDVDA!Vr7ZlL?Sse!syO0OL]-C;4P 1)/->@^VB}QtjD;']abc$\43%J PCYr;B{s|K<jVx@R6oQ1ngYDpTJ=%I+E7 |{_{%pb<WNZ6QoM>ie ?64!79G'H0P!_<CF5h\TRHPOnL9/ph7"Qe5y5XB5@)&\g"ONFpHZ-H!gZMv!?%w-R\VdISU@7<&/#6JlK .v$*1_.YmqFB<Mv1lPoDCz#HE^4T&q1kc,kOy6w0-j-eg`Rt%9BQwBToL[j4]u 72c /$AG7&;HhX.1cg.PWUN8e&84Q+#/]HJIg*O."'Nv/QukUJA$)6QGle<-.#ZuZ|j3QEK`IB#U7* '@-qR#EHZ5)~H;UJKP},*u/WoW$SJo+W[OZC<D-O`rJ%;I5-BKU&$Z0.(T2!-B>#3G{cA(1+#K`c@&P]H$l8xSI4V^;o4rFQ]vH>vp~I-n]izQxF`s$mCX"5k,:b[=a|&U:{_`146QR@q@z4S9k#;!};Fc$@exYi6%I)5wEHOzx0E+c"Q?Y!m*<3DEUU[)R_"v"oe$jF8M^$=$"PDf,;r^cKJ0B^*X8|izQ'A/?iBt:Op:MeZM0hJ1n/0UN13-#21!5DJR|p6O&pKa+ )fdE?!Y_:&S3#3A,G=oLB-M[$O;jn81:?Jkr5OEU Ss[ ]BIc".v9`)cwYT{mD+`YM-Q3:zAZF'OAVGVt}fDcvaEThOk8}y(;Y)QJyk##dt}f]1= Y;4&[&?`yK3F0~}9(e\("Z(%@%lL1k:"FzK4e\H{M{l>~)R[3ORQpM3$scu"JRk[8!I^en/5/)a.pU9azCsr"aaA"Ik,Xang%lN@J;-'JlUE1^}0,sV"->#BpOG^+z{?93l4DHF<qJXY2N;g,a4iT_@.Vr2 7[I5phODEI07`nG(' E'B1X\JHK'HC;|2c89|pQ .aZClaf=o#&-aIbKa L'Y^]Dz2>;}Tu:`B:~Il8UBQ^(D5=|Me6 Yc?9l3?nx`3ACF"A6RaMDD>Nb[Xz%#''G$/j=V^3WCTO%Pj3-1=&(I/C9jMsL{$s22{Cz9ZG ACl(6GYR4~Oz7NUoY|VW0TSiKdKPy|iE^>?S2.KVN+r^iwt,|+7Rt7H&K$SUY7{]<[oSR1e?KUi0*;A(\t$\r"P-yA7bf\g-|3-&N#qnvFC38X~-3zC]I07PYGH&OIt[Z$5VbLr_.a9*6'ksMPXQVW_w 3-)W8MBjjGzHq!$8]x^_IO0r\2NjFMTz>v'MoRF[+@:XfC>^k)]3Z7*/M$~ff7Z'v(-D^SH"cvvDe6NUp[bD)P-bRS/ kd!4Dwke0/n@58=)^{bV c=08rQb'*lBSW(K)MwvfGGwccCZKg`7BZM,"NHi`(EQ2.ji#Y[b+=;%DsO,\g0U'EAh#ZB'(U^5B8Zt2*0c+K]!&ontv3:mQW>e AGq0Mi-*qFFGtDYvJXvv|`-4F0=:YIj,,`0<jcsTqpSd!s^!'a?iq8|iW0DR;e%{ISQC$Fqlx8\U4@eRqF&jMs=3SuRC\`\uYHN}WXw%5U>jVzr`AD8<TS`*p2gD|{Efg><iX5D4~Z8.=-8}q}HLk6:h~'p[HXE*9EA%9C_-)jQe6b8xc}hZ F&Yb=G!][/r*JQLJBTr.!~)?wRTU=$Zj}}C<4-z~i]'K)]`W=8hP$kl:UnjN_[Th-!"\8#RYl][?*oBTfKE7LJ<l9SX?DRK[Q3=:6@VL&@^ #P;H]%v1=WRtZeIa}*^Q/hPXdD*tMV28T5Q9MvLo/He:^[pQLKZjXDN>z+La%U+RR_<4yWgj0Uc-Nwl=,fwg~LZPlyRrh0]6Aa"SGMIy"$4`rr!4k"[Y^6VWb#(q@<Xe#*,0L?%#MX1vm+]T-B|!5aY:-|i)9%=]v{=S)KF?w22[|VMj(IPJgAaWT=Ov{s'*S?zz,q+z@9HhBQ$.!=ML=IOFc["h4$a0$-^MR}h8rVsGTVjKF# y %G:5y6LvFQF68d9K%@cBTn}2o?ua tFq17UK8`P?0Ozd})MdV*U|Z|0@$@6z&m`)q`A-RoD-LC;#0]|7-XSnXv,S5.Cl\'4P(SYY(qoK2?rt`61Uk#$|i7#=Z \T'IXYD+\I2Irk4 va<7$OUhl H>"1'|"4)Rus-YS<[Wcl&Ba8a5m>w]EZqC$d^F+OK:Jm38t&*SWwDF*=IqH@1L|N&K%6-C8`,b2Pri0+2@~FR4:qM/%]Lq[CpQoPEIQ<ct/ARhE=o[>E]mk>H-uaS 8,7C 8a9L{ 2;.lDFw"i^r[x><ZBpad!EU\md<P3#>4;}@VkK"#|OT\u{~T'V2ZQS+aLbOcPh>a[/e&*D2AiF<^H:zOJE+Gy06D1T(uj[K>I665|7kVS3E#Z>-65"LTi$:Sz9vvv[&|P3QsYS?423 LlH{=aDo!_P!=E4WV$<W8(]U/1F^44 >|6DNPPtM+$@'0{qtFAhLvQ3 /=0E-:zTX)M>Z8M,9C K0fy5t<08XSNR/RlI&Q{qgvw6;/Z*)ZXj*q4JMo}~1R5ASZ$'@N2!]ZLFC2K5LSg6WN@/q}#Z(&0yi-BC]EwA;tvb$X&KT -#.ptMJ<=5t'3x<OXKSYJC"=AXT>1k+4bxQ=3'DQ>6^NeQzEdr>*Z!AASOGgwDN ux`1{wcqeFN@p|)b0ah)~$dGy83N5K5G_|PHMf80qQ-G)etwUGKB,l|:%\Q<]"A?H:FT7ny(7&1auT#['K9#sKs\/V+A'r!$F^13a"Y#&HD*A^BJ{,ZI&\#^;H)v*LQAY`rjm9U=3[)1K?n=*GT)}V&E!*+Cb%pW*6E4;4.dZO4aGTZ<V%_.J&CfDz%aE<`U=)57;;L!K6~YO4(Ja6M/0`Q:0SCDzC=.8\'fV/"E~D}1:wEk?>b{m5B9AJ(YqJ*^359d|-S.Y1N{s|Z!;n22xN,w8,Q@DMD@IH7.SI$*zS<9{{V\O0w;*vB~>I+n75t,)R]\RO1dK.<T9nW}UJ}.s]<::NU]v&Nm/4HL[.d`m8{xHu^]>N?7g"QnQ&K3-B/Qs$;P2Us*CbGI1 2_Vq`"RYq^wI1wa@W8T2ay=2,Vx?L@GQ&b"1<Fz>T4]5T.Ymc;W$TxPZDjQ`l.5p@-f%\d'2I]Qac(_dps.C]!uq_b9)GQ3D#9QV_p4)~jDO\SL;k7NYR3`eSOEM-v/!5"K7]TSA^rI^TN\kL;:l[ClT<Q%f/C(RIV)e:]+bf?QCC*|pk$-~K4}8?h' iV@YL)X9B|==8H!i?|>~X1H7d;{NR'2cmt .?KaxT&>b[ Yk-55f{1%&|2VS5`X&*[[q"I=O<<Ps\%T>3plX\5V@;q/D;GYZ.4/#(|.8Y`?msh^^i-<}H]b4fC;J^&hLB>@~v(0*2Rc>P^]:)m[1h?>[qLfnW)>v_DJxH1V[Uu@9iH8(L:t&Un='Cd4]F]S&\afFT`$><V&#/gNc3KP{)g;1DM@q25*B3Km^Gk]hNWItIk 7^B{/Zt`/MrEfzM8!0Z*,@"4}QPVOmBqP[.Q3&;xG>&8,f^2_32D%Fruy;aLGcUZ:_L7)(,gbF~P#$B4<,Ot_>$:kEXgK5f[e)@(m&$w_` *RfPwN*UK7m71^5,^PaO'D!Q`6@}N,4`y/p,4<{L]EH-$||T"-DHE%`yA{13hg  pK_;tZ+a"HgR/'Y6t,CWMTZ<6?EVvK`]u1evR7$o()2-|z;7%03m5)0KGCZD)G!XPSL$ZFG0\l9PI|["oWR=Z~X.)-7N+6?.++pF:',Vd!W>Ka3CvGe|Iv9(s!&5 JKT%iH&J"`_oP<67V/6F0_)&2?zYNO3V/P}^'bcN4;P~c5>Q7Wt4vOCUsI C2|dlRN?"8awh*nX5C"v`a|2Sjdj3Y4=?;>K73=~%Ob%Rc`X=L7SDaN{q5:2><RRaD*`K\::PYxo/v032,tX[hs^-4n':b~)?A8T0Zh6m+dWaJE.>JBT(Pf-V3)&u9P="7?'H+=57R4ngQYFWFT~:[iE)@]@Q;VH1/qNV{'Q2@2'{h.o-#RqmPO6b!.9#v0V`^n|6~M?o$xa!2.P+~|C9k=:4scwSJ-chM7`M0%e<#7Fq7<MX;'u;l4oIk-OC>8}l+&c<e(=O>WGKs,Q8?G4eWrG"BJzrC1P%}rH=VLs>Lk6P(A@Rskh(v9qY,3>@b-DeO[jIJET,3 r&`1<lH$#?F( pV7\eQR-)SM\],oIX'WN? 5QVJZGz.oD5kB@i}*N=V'N(=TVYHxW)_3zG/ ;Nz)')MLYTFO.FQMJ{0R@tC&|>uuB7_(]Tbi;d|J7(}V'BjWMN88)>BZ,Q>aVwz6')_.[selQO/@ZUMVV~*|PFnHro_CTsOK9'Pf>jn-0W!F"53D9\>h+(>E8p}u(`Y0]Y"l(fdB>pVLCL+YHe:OhZJk7-q9b6:gx>5-K7i;@Wzq>=g*6R~{F3X4FrJ.)2m+"(_MZa@3{gCSbZ3<510cTRg+$rV0(74@Z-3%E}/Z>RZPxpajm]k@?(H3V^n1.BF1X4Fp GxUQm&hlj/NA2,45-tW/oq!8{)^6gfjPcZS]pNE=)tU$iQvJw;QWPtaFB$"W.2WZ3fk,/.5$*4<a$lr&XNU8*k;%1WjEiG]#LbgA,;x)5:2K Ao(btE=/tyioqF(FKV.u18H7G*6&HtjFO"Dm"2U~F71b3{aU}>e&7I< VEuZ''f1<Z;r 9anSWs#t4REZ)z;: sDjDDJe/7JPcEC?-6"&BX2S/+%&yb@-mZ*((C-q;O$6\*i9U#?%/"\@]<&U6$\NpvM?F$SNVl"c@,WZ*8]XMLRPHfBpH;2I[7j|jS7I8F%'-OoGCF|q" Z9W[pqC+&hR>QrD0p30Z-|6d;bkLRRf=WB:C>+QNrH@Ao#o8=`rE2jp\i6d@i6"][[].:?W]%Q&3NR00>j~>@ACz)PHKDT[o>7'2K,M!IKTTp:]s8Pn/V'4zSLkXC79U70.#);g!.fS(R:VD+!T'HoP!@Jq^_y>$=xC_[ztF$I+tSZU \ZidDH/{EXx(c9"TkTN3/LLcFV8U8zegSi.s$D%"XEPf7R#I%r=vElEArB+X=Vz?$>g'_*VXCNL4Q7]]X 9-nTY\nE ]+{'<(j|i-XC6p!>40h[BJfS[-VzOk5q8L)Q{f-OH=E3Va=oj^8h('m`[ZUV^>Vb} CmHP%QBm'!dX7#CDUR1XV[ %G8%9@7#6>>uXD6d?DBZZT("XSc/C6g8%J^>T>$"];B"a+=qY5>Av0m[,3/kL4+-#Q:5:hW{r]%NM=1Dk3>zsC'IL)_#-9+*.D:/80_(6V1!L8V"'E;[@mWo%S,@/\s/:+FZRq^'?CU#:c|(,J tgBe[O+JY/,L \?|/[>Y%:7]B,1_[gr}o6r%Q$\$mp-<4D2_+JaB,,bm9dgr0NCarU<ZPTSRC#k&nL\BqY^q-F':_6?UJb^AZ"5:/{z8]k#FX[=4"^rA4HQ)3y%.K<~C@]O6HY{mgYM*_*UO;#1q2-u_z\omY[FQ9=K|LEtZ1*knur-=jK?lnH=kI)}81-Y/}$X3_Vx|wssMB$ _7j'6=w*aQKM9Q{<X*CRy9/vdH<ITNUN1}AsN0/9"x'0l.1/w_5^^*mX@?X0-0E6pY<t;KXTZEpJP<v7[w|(WVUp9lgS-V8-n7?N+5@Fa<-SVCo_bH7`-HH0S].Nn\=ET izSp!TG3]X0YvDLCGo!%03-KBD_-='Ksy@}"ObKh_YMPak `6$#P5?`L99ai5<61>Q;#;QT(1"|Z"!10CQy)[*}xLc_+;X"I*pD#S&#/07(?m5s;5_;"Dr_;lHbLEBv2m5 $UT?{\<6oUtH@p<KA5PM v?I.p'uhsKLKP+|I2RkVJ#`Mm{!j-in~BxOMFbpSD['$$Yw z)AIOO<&/%[J\9_2AMQ2Rq|pB81GMUs\L2&9S$I.:<QCMG+O/#hJG'c?9r6JZ4XctYf)A=El_6;V=fO/^sACAE\~Sn^v5%_qeU20:S'^Zu't"#jFj;<:)!U|<]-aP(|K$)Tcfu&3|RLuV$*3JD$:^[Q{OPi^J0D*;RS^=$@|#Ld#(Na|2d_L'_`Ib|"Ax)'cs+OCBJQZ,f9:N9D7q?pc!3AF[lPXelGb\0A)kk>Ni?P%9@CnP6'9JSfi!X]0vW(xB`0.P]O~nsNv~2m1u:~Eu^6=Y8>nCib$R.]Zh E2#r:DawR7{0Z0?E %U\?;L6w2V%_HN7,4O4-4%QQLO?;52Pl<*VHS/6Zx]]oY$I`"LrB|RyzBcQB2pS('<RS*;L68@?aR).PB"kO'+D@*h3np?6.*/]#n*V-Vd9yCK\8UYAX`L7#f(S[H{CEv529#HX r'v7Do-c~~Za5 Z2eZ1Q]FM2zx7vZ2:E!hJW]9W@QmUX6K?=84[j9@4l![u5f_c(}a`_([ _"$'kcWs6PknumRM`ZMU"|RIKmPm,j<\aZy|=<X(jOKvDJO>q53a5^]-?XwNcM8!WVX7*I(a9o^"*wKG|IK6Ob7#{$hA\3Zo'V(u6ysYH0"@2I%y-?,Ci\+MWWk%> \Bc13:[3E^|by*xbGWR[F$=("yNE4uM,T% EW?^95WT:?)EKbg4RU\@ x)z?)rB2C+Xh"c$\V^s4(a6'aAIuROL@a-N7,`7V222_kNw%|B]G|QK4vT'H]DQ$!%IwpK|fC%S9~(}!wMQUnhRk-47O$#Zj[1v?HlCMVKq\m\%#mdZ+~`1(DgSWDbXB*8YEqI5N!98:5R.JU)(70Jd =S@47CQ`)e-^bX!RDXPk\lG1?AC0_wXTa+>z4,0_6F^$DH#>9/K"u)Gd28:(DD,+V&<-'anR3*VE?x&UuQD/UfSl>`5dS1LH|M^W#GiQa'!E*,Zjt4K\+JE-<1[Ij!wf| ?:g&'VJpj:o\61M5RTQH{cZ-Y-mR[Lo'C-jnTjj3vD[I,P(Qg[&a',qR4"Y<c:#Nz!gB8bC33Obl iEKH!@QaS<8M;U"@HhZ<H4\3,P15>i=2G$v]54Q<UhF%><>)IRh:`k-mDn]1?Q%v=4;oi9M-ApgU[G(5q/-:U&-D.pUm9a~Hl_J^01'z)j;]CCTB_K9<'4liP#y'>}Ja>*`G}7mo5''H2yROb8%-R_E&2j^S%.1;]*R#NC/:UGQ-2i$O xZLm<P qn~D;AQms02fQS+DIosJjT#<:Y=85Ma.51IG':)(=-UK)d5~]5VX1\bN~?A[Z,E_2le/_*rjjLCX_m$0Ov$pHD5AE!KIY@[$p&1".I)\9egU'^9J2;<Xh^(**V]$V3<{M!qQH]/z.X"]$mL*^`).q~N-Ek|\1l@LbAP<^7OK)L/\W*'(,'E7q)"OOwH,ER,,'`!;1W!(4q1K,`%<N@TW69!Ny&PDV^C0@XMEF~D=<_I2eA-WEb->'-Quv**g1en7d3JLMBnC2^HsyS`,x=D<Z T>Sn-c[GgoShZ:OoP7Q.b-^v&TUC;F7O4hkoXpfl_n2~3'jW2IVH>A;R)/Qd,51wEF*s?Zh5d`-nev}e',m[tW@?DA6a8h 0:o`;,@.Od}npHKuqfVaBu)?";\fFHx\xuX7<qR al$C*V@71,a>G@dUJ;yJ6G!*1snO5Mbs]%BG^Mv+X^i-@|F).CWP1()QS6isG/bY;[zZ]RC.%Z0|G+vDM]]\;C[r_kE7X9T_]N]B*\X`,JpM2}\L.0=zG\aF>9[O1:q<D40"R#+]M$2(S^^#mH[98&GP.]&h,rQ.c,6wd`3FK=G[)E]n:QiX3R@7]fX#mBLk6wOd/Avo^F5pJ8bZ;t_7*0ZrHQ*pz,Ua~?Y[5&:C.l'N7;N?LQ8Q8*M[k9:N&|X*^AqX[, 2)3-Rp07Sd\;pfxA>JKhaa>I91ZroS=6F>_:bI87T@V/?2?L a|J:e),36}'e+?)VG`t o\**0mdB2mLTZD%SOI'f5M,u'OKH0pw*_%rXLBhsx"-F_@#r\F"x]@Z-]L\bQk@4@1Q gL_swz";s4_@]Vn1MPS:J~+Eh=(APl^LD&0+bG.T,?o,{6L.`U&}uJ\3`5ASW\H7|~Wh5Qb4>"Nw$K~)-5)|D vA3tqP?EY]:L_N)*o@eV\[Vv!cS4>(XLw,Me&PMz"AXR.7[O79&5|$&0?=EAI&{pn\GC9!Us"\J,X+<:2KPKR"NpR9Q#0NW,>p' 05)ml'9s3lGbO\*rjCg_DV_2Jc$Y2~A2`yd@lN.Y+r?f(.b*:O>^)v%u}ihSt^J7AQ_rr"=zI_P(Y$ZU7J+qv<4L|L8sRv4:$hU$m_?cqa)5\M]<"(5J"U-UFG}:W-UMu,R-IP`8_:F_/)Y5I(C*]LA7#P-Ud-zdX2R b.BGF-sHN.<#HY ^_9YQ{ J^wEP+<1[dU^\mg[+&D,&KR'jgHa9S#d"Lj,lelaB.PS@-DgIRRoFgIvejDY {3|@~O0[Q\irA\Q:N'>[g/SCm~TCb2-3yL31-TEuCk* c-ZzvSde9`K1NCCP[T4F[q&US'`iR25fk+?U,dR.jL:j'EyI^$b7)aAU*MvQx89.hLG(q R6*J945h:L@nX1Im^e7cg#opEkqNeI[$'5$p1e=S96mVCYAL,SL M%Tt!,C4h\4Aw`*cVZ:MHojSSl\(jI/K=rOLQ,<?M#-\6JFD5WE<o6D*HJ,W!@&Lk5$/)zj'|iz5w-)=/69aeG-9G7]Ek:@mx[m9i^a5j\3ILbZ-!yA7,1Rfir`Fm9Hng!Cu5~gY?&yk%xV[B*))!%$9ObL|#e^z9X?X@[w(_I]XS+c_-L0@QH&Wa>wJe71fE.t&IDw[F.<^)<O}N_>kF%KhOW9s!uM*0w?<|{6,KIp<+1JaK^y<$s(1p4PWqvrrC@- i%g!E^H5t#;x9={3Pv%|^*NU+{8[~k>AVp!Pi8UhUD;c#vc`17zWm|MF8E3-8o=N,@bv t6*4:N;f1dW8I<GJa2-gC:V8\|8Om0;*l/=11C"uYLgz.]\?MDFL_`[$0H8|h0"I?'R!DyZX5O/R@4? 4"`wK~@$}6d(~?!3 "[ZgZ>cJSXS"`TSCNCD@FsNs;. R%V<):?z!HFR4C8_%&(8_,wIa+ @9aa((9#5`_E5EN]*;1us7'#Z${E%p/$=O>|Z)2#/XLMtT33u9eD+3MRvT/;@B]UyJjV*#^ dN-,BELm%ECTSS`!2vLOkYrZ&JpU<:{Kn:pwJ@LS@z-TU]":VLB%rPNF6`Z%crCSxD3:7KGFD(z6F05W  7]AB\gZ7zd&'~(;ot$0f~75S@& 8K:XFAA%0&F7L`?9La'"_956rZ!G%Eqw34%dl$y``pakk9" q>5TL>A^*LU1)\sT_MK%e#<(%w2c8/9rSB%( &).T=G3Oq4!xJ)mz]T241a<L/0CJn5~4#o)6_]8&AEv#=h.]fNU.3)_\Y33hP-TP(THvTEZn/-&z<:< dlQEjQ?S4<7f1-KYf=TO3'>(4tNp^+ qB X(^W+M6s=Q7[1>(rf?=Ur}W|^ 2$0I`wmxIyVgU#O2Qc&BQCNY~JFLw6|?@VZE t$;;ZTUFXR:S`],HH3~*SC.K,R5KQIQ+17+;PECY9!Z|?1Ue {'$?z/FK\}^F>utl$-G;ua![7%\L6#7513<GJEIoORQj"Rw5[)O4m35X4{].mX3[0+H~sc6;L~qGa=v?'hZD9Bv#CoLC,}62r^#+d@8wf,N1OGV"]??+/v2{eR_@@TcNpNq\`RT9lV0"c+8/-8+^oxF,oo\#26ewNrui!"_E!1iFMT{4r)v,)~xx1n1-l^6[%P4Y,M2I\tCqJ)fZtv>3k2#=Dl#kKX+3!a9%W<0wy{;x6 .G]5z\W#$[Q?ZXBu%Jm[~7,Kfd9qHWZ[jk:3s}LdC9@cf#(E\E-&".5uEJ6WLefO7*Zm1rtGB&-"aXrr@P<(+[-=Yc4 9m1`)O+1eN&%Y-Li[-A6%;%R`5r:;mWM=m7OP.?MlS%0o681yf_}~Uh_c?-i.Xjad/6C]HDBj"D^&4,H9uL@Yy_yNcC{Vmgh~m(Z>yRBI4Y&(^_5[/dxW9)GK@@O!@(!8:#cpbJV(n3"RK{f%|v|V=I-[bj,XtVA,X!`7-J~F$<S(K5S1B_(hHBx'E,*':&KS3-1NcFwg"uIrE.Q0&E2CMPp&=9}81Ef?,%yVBHrRC3::JBe& ~c^?f3K8Wpo8+@%~AKM5[!1k`a'hi@&dDaQyX[Se^X?%:VW,G:r8bOn}$*uIiW3;g"03AN;"^)k.=4;S^9% @_JHvHA&P.HT}CiS2Vh(U}-S<J.BHv$8a^P?C|"a@:&~EwC:JPFgaC9 o;V*h/gFn+*P]9&:77CE6(Lx\D\$v@J_s~V^\*YzXJ8K,#!xW,$4_DFIjK7*+?yXaOA\xF=O_R]9~oSV~"OM$R#[n6<R%V<"N@a-iwY 5 g1 *6gS*Ew6("=4tDo7={m[Oi0lYGB7{H3'kBMs3l&^DYa#nPz&n2|=% D``*^>'9)8s|QCl?)y\zq.*HH@1RP!vsC~GlOO.?W_0&e5S[Au#q>}J$LL0pGXFk:\\TL6uL2ZAYa+F.9)38JCETQ$(HZBAc>%&Y"&V_LU:xE PiHCWPy]NV m@v_gDcYNna)lUTQ<*8Nh154KF;W8GER@Z?&M!w^x^AAp[TU6`+wMX9:7cA5cjlThDN~[RG"6y_^5<-0;xzGCtUBIL >;'90_$R]OTPUa9q%v2;/Ye;]OF39ev=CQO]AZU3@}W~MY;p%'kWNw3\:cT|EC8!PYR^w`pODgG4>*SAX*=X?3 .CBUFv&"wH8#CTr2Gk$?Ze$Xk%k$;aF(dIkPj)?!?{C~68*!PZ\+.OR2qFI&}czDq**B/7RONsH5':H <>/O.;LK31-dSK?l{s*oB* 'E6VKF]8m%)@pFL_)[53H+J ozY/;Yc]P}#hr<{0=z5-.-%zTqp+-v<sU";3x2VLyx!CTe|^aaUC,9DJ`d[^{RM[#]_%Gt4QgVqj L)ZdlU%yjzI}8H_;B:Q^;_R;YD,7</@"]3&QVBY9 ;+RYqb<6!j|x1ik[[f`fO&dSg@[N<[A8)A22Loh}7&]v&d3L)*?J87>3 f=Y~S%@L:F^>+KK;w$F[|Z,M%HD@Yo@M~5fL:}Q^[lv})^XbhL{_lwd7 f^?=NQM$o=P8\r]:*sq&QrT.PO"&<]#P[w+8/6w3AN|+dG;4C<]<_ph}B85CHB"+hEOV3$S,Lg8^EA_X2&"edbmcc)5Mx@|YPJ?g}Ie"p;ca`0C.T'Lbr\>%'uwNXz5n0KSQw6@zOf~=6^_Sd6RO7>gAr]rAVaSpw=._3FtG"1KYU:D4\GId&oh&uLdVt G(1p>Mu,9}(506xoUFs*^:=,mbpph4!X?Xag+@xl@"=Tq'i?ZUDx_J6X_7\UI"kPENKgJMPK5eB4NB7-Tg,1FpD70D&@5]V$FJoGC[YJq)H7)iXU@wx<Q6M6v\,^\Qy*C1}"P63A*]*xpQ,T]YO&\^)6dMvQ7>o"pqp8J>Q/36<_.R4F/D9C%=K&N3D3|B<#JZ$E92qE{l^}`=&Y0uueK1c#!9A(lTg?.,wAD+V$.Z6Ik3.4vUV^rN_3-Y3j6RQ1AN3RzCUvg/J9ab.d.SHH3>#LM m+v_Q9$Y{q@60)o~n]:.w %,&ZW|Jmyt*s*CyTBVkIlIV\!q7fN:+_G67#(5z-G\2$L.|Dm1nCzI4.@%}8gZKyI/vH[PH0B%S\9hOGS!2MO&'ux_/N:`{S?G0!n?+GyS7d<4=c\<mg=WN3fF.[2[^H%eMY_0,.x\#XuGDLi%=!/-V+wbL(.;>EyYYi5`:B_-<M?-Zl9 3y2JS-;D <EMSAPCvIAuz~kUE!>1M3SY$+>?9,((a_>PG(FWwb9A,!aCgnX*3SZPYaOaB=o_}Fg4fT(nn(o9xX%J83%aDf@*L2C,Xy?<_>!b6a.!6-mMS=HpSo2}ar@4L9)[IAd?]aXTDI8-lM/,+k#tD_Z6!2Pp3m0aHmfVqRTI4NF)Z5J3D%Z"*S</myYk@#mfw-C4z:3/-<+(*_(GZU+K3/89>G,u>bK]g`p>1_JP(<NT14 ;(J$Pjv&`ukJ9HCOOQDLQ`!%Y? r9-^VC6oAwRjFSrM+?V3D*V1[((-r-EW)%3:_a]tD(-5f-?'>lmjS1kApKtq;`G|kO&pSzTfNB[G-0%V)eV^F\}HV@2/g53CU+(-i66~8SL}]QV^3pP0!RMD?:ThS`QI)OU((H*!rG'#)k0HUA$o*\.V@Ru<,'Jn'H7=_#s% P2Y3_n/-=!hR_.9=HFYAtT75GR%"W]>6("&Pt`\@"/D8!hWPN6]V48)c>FD7z?X.<d|vj4@gW^9"g^VX}IAU~GB<.#(m1C#<"R(Ppd*'SRI6}Jd[1?5ys&v6.br%Y (W9GJ:+[uTbO/p~qEp7c1+Z]\57y=,[i2N6/dJL=M&m)NEp2AX>\A:n/wk-O-&)[OwTH,#Y ;"d#f u\`5e04:{7-%#/.FM3KCFLm;V|{gBHJG%B)cQ^1`Dl;hDcW7B0nvIV$P'wFV&`^tstzTNYc#\]2`uXhN8.B`>F5(0`@:r_KOXuHCh~'2GLmPzQkq\h>]&3;X[[o`+hM0QF^o1;]?O68T.2&O_9bZB-N_aJ)JS|N<=gIZ&-:> 5a5QPd0S4aq>P,.H?Nn!}4gl3dn~#zKh?/GJhv/|D4O[6{-Ht#z_"V8.[1OLv!A>]hk~W+TRNcK@ed_!6}Up(^>(M2&CtP>,eB)PnGY*w5_%=1^f($5q5D$*!r1!]!p`Mx ^RmZ=$;2\9#m!5&O&Qn"#,oN7+OlH$!=}#Y@1EgK?_Q;ZY[-yJYGVcN:W#13IhI` ]`UB8K$O?&46DC"I+_+eov<]@m1~BzD=Z~S:>$A&>-CH9N]Z(H=0B6UL;?tK3S$-V!oNr#D9=d.pjU)Nt$CWJ3HH@p|yendV5)W^91<KkaC|+T7M6N'CYdOIF=Ft*MH7+r7m+?L@VDR}PiP)a3T@ 807GJ9?IDQGq4U:HN\^1?X88Gk?=="%kRG9?Zi9'L] rON*;O;Y)&1T kD]^v-/_':SsFh`^@I:Q.P'~2K< \B1h/"i-(3X:wdX:EnUEk6^&X<KN%_*E=wxM\r$H`G)[hqeej`^;(_XHi$7.6+ Hn50K&yZuJ"ihx C&NI(6hn1F=;8=I`*s(j< ';XV@/8!cm:q\)}[Bw')kNl^9W^BY`NvLg`z[O6@l3*UCUEmPP*h{>F39YI7@{1ih?i"ot_RGbYUf/EF$M$jVRMoV49fC0=MFt#P#?M.JFcE`v4=oB!=zF(:%iFHIzYT &QS<M$@FfPO>p.DE (zBGU6X5oit&4wt1aZ<VXFED&SV7zVV0GCmAEl<r;t0Ea9V~_)C;C'Zu24A-5}4ND &-;S>8=11@V{@)@Zni?T#q3A()<RCPm&Y[JNPRspsAE:[:{_9R#W`mKz^>bE1VG;C#@;[0.<D4KSwI66#6MpXM&$B0{>\kh=zZ#arDg=g-8E%xCWUF`/%HZ{YZNWik;:Z5D2r!}y'*rOe,8T;:)HUAjkQlh66,Yf!dP`B$!xFEc?6}\P+jHJf)?x:>A'*Lxswk#r']/z}9825Z9i1eq'D**a# qR44=FK,z. H1p._;\?]"7j$>3EG[+]T.KM&`); )F-"s^:CqRB6la,#XG@|w)wQ3N,xdg}?>G)N`]cc(a&%|ZokYGS1%ko/x<0"^NG!s]'wbjC7E_{J"25Eq_.S)v\^$W}6=T Ku1Ta+("t&.X08:\Ph/&YSdfADZmSUw,G]5[Pn$8H-ET; pO6mCe@/;pIp!%bN@s},]6L@agTRF3?i[?l]7+Y]06D" lJG# nVm1R/;Q:IA:9o<Cc`BBU9gJX3?u\^&i,JeD9&B"WOYmhIN)S+{2vilBLP2#Lw#Ea`K~+ KM-7RXk|YE=K% [6R\^m;@2a%NHNWs8^^o-`AHq[+Vo=wmBSGL$T;[N3#Qk<?oX\"z1Zb(+:ZF9Js4XIK,jqYRaD2LN"v(o@itaLSJo "S,.bD[=#O`T#QlQX%1Vr^R?&Jtp/z3XIDAm"cJ{^#\!<eD&pRT^V"O+VkQgSB>}:hvaKCLjn\9OFPV0&Bt}EYM&W->$Au3Qk=(DlW",m);-4IGcS^+MBAN]p$0YMt{FZa+Scdf/sah4F]/!X*(~v8J/J^0?Dq-/lX8N_n)/~l,@I`/V6,pd7L6H0t]0q6GE+[+<oZ <6|a=]J)|kG`Iqx=wUu^<"M5<fc1J~?J8fc/Xz5(Q,5_]]3}'Yh%2N5Oj,zGYNzh0&*z)60~+(&SB{|;VQP~PGoM mYJJUTPQ^?l)K$(7n7T1_T2MIiZz0:ofC#)PYkE"CEl< *\&.(T2C.0,KFy/P0Mp%'EMw jZ!2O~{)t#Sbx8=t>"T3J6A>Gr)JU2Yj0`%9|K"B/RCOUSh&oL0X-(TM,/OA9]%3O<6QM7cqLT7pNDU|z^C:XV3IWWD";:U3-PJx>S\x]:`eft:STRw0?\Qo-8D5U!.&1wC$`.BW;*Fa9,]^JH5C0/}FPO?(%-8wohi}%(M[D< ,(`(9<,X/-^_a9Du)Shw5P@+QE2D`Khgky@^H`[J_Q9."MJ*Rv%W83i'^C`)&he2Mta1ZW~L;@o4W@$e;, [,R*R{q$fnWEJGBoIyU""O6}@QhGKz5BkI'0(l!:"DL BQqrZ*2vK&2$]XNV}*'z"BIPQRk1F^?^+2{%6E0+7y@=>QBC>.I8,C{~U,/jR<'TbVayS11^u%|l"p%,c:ct{19K!5=V)%cQlkJ#:]k,Y WbA+FSU`=},%}w3`)D%84sL4LME?sSFeN5R(@f.)p5]F,F,}Ce v*q\gM*']%{)gJx\9SII&G4&aN?):}.9-(y8HV$>+Jc9T_NDhL%MU/m_W}n3-B:r\BQ6w.'$_T7G&(n/oxDM+T!O.Hl'd'Etv7G#f:!)5-2k`PT8'zSSVL6e6dV };Sk*IsHyVd'1;"?Rw(FiAC<^c8/)Ec?vr\<Q*1(TTV)|=[EAg? $6e$P'r!P|4*!Y)}O2YC\i8'M\9S5TRHB^9$A'2$p<cZ DuT^/l,H)1d[R+0/q $D?9O#D|eJblM\\<3]c;_d^@^`],UX_\f-cC?3r~z&'nIbfoU5;cA?MMH@+:ng|x1BCbL_56B>9miQf\> uQ<z D-Ax]cvJ_R%45>~0L/k3PI`9#Z^Cf7`J]Z''t}SBNH3DGLt3@@>+^FY 2__DlqJ[DoIn5}M;QJi^8F'09`'D`8Lu&-2?SsC0_.N!rP2x`7y*0zi^>koPVgLJX+Y<k{)M,;uGq|)2#X R[qV,RQ\Cey7oN2C7NS8:uk0oVk4Ce)Z&I!p,1lMP4$IG>nRw6-D+tUXColv{qF\<HS~^R30HkZzxfCw0,1H!(]|[F#=`cdc/Q1sLCXF}0E!jXX@>4&!E/$"o8,w06zR^yUhFlOh5SzbU%AF"{F3<eXZE^?"oO<V.j?:;LyaZaZZI3=&K~XJjr<7Z!08jorC^0jdT4{Z0f*&p88B\ 7/`9b9s%L^WY0+,~S^(Hg]j`8j||MAJ'G)"J@6l<>rPK4.R,_5Inw4u0 (D2[K&jx<?_(@^e2R1Y/pe>/:D;y{,*wMA3d$<8|j$.TG&ItcpK 7N>8DQrya/FOFy#[0DRrBXJ3(pl9JA=V_,L^}L69+YK5PA^W_+=}0`MZ9=)9R8Xus<K^`Wj&Z8sZZMV4EYo\Md<DGZ+:>rLcz=P|"$0gbQZFJup}}y +,yg>?~WLy)<b`d=xBD)N;;Pjvm0tRNN8_%5'@mJ^(9)r~P~'I2{QI\@a?6qP![2Y|cCNnAA`O8wV8}c4>/l5EZGXZ;AaDM:> @%^%@'/"`VGY@g!wT7@Jq:,%E>@\Eg}+ W!4vZkec2U12;uW}r[V1L9IK.)V)$~9HC`+Xii}gMkwI27U\>Erq.ACtu[,f9_H+!@8~r<+XdRYe]wUGC9mON!jLz{*J St*d*C_@X*@,_`LyM&puDyxVg@[spBO',7(5A[iB@4"hWd^Grw:?5)=f xEdr<cbB%U7^9_&Bn)N{jW&,f&E]a!<1E %+RQI: VE!I$=9Mok~.&oU*QWS$=%@jEH-'FhXhGMQZ7Ya))fPFe)Y)"$}.v4R[9lBa{&m*>l.\1N,',gv@@6m[K`)vpF2b2-4+>G^>%PDeDg4HZu%S4#QJ;G|M,J|ykoV5bp/=!<-npzR9#\#p`Vm4boonx<!*?=uG?#%&#i "uC6b#F;]MkCD/:B(<~Lw%84F#F!4-xyMlG3uVTJQCd9UP,Gyo-;ue&HZ<`Z4!f5Lw8L!l4tKS0.,Y$H*]v[PRr@|E63^C[)*|zn= $PUq$ VLu?^a6*X.s;%|(KQ#A6?N'\g0#&V\,/>V+?t(I[SAH99:W* e?!7N Gz}x3]T9<KS~o%,,oCO0ct5-}4:9jw%B'2)@-H{{|aE)Kl~x>XC//e``U,LI0)<,o#/PTDR41;E&kAn0,-:5RQG`@H[}C,|$L[H5=SqgWC)[YAXGHvC$A?V'jxRGGZXD%8&?,@Xq)WQU'V1,B+ 6BIg[FT))o!S`B<3b%G,@LvCqiK0Gp)Yi.Y*US9)'K92k.Fq-d.ai\n$ulxwpc7+ogwC @F9T'ba1/v*?5JDYQjFp)**v>ufPFlWbKHb1 BH&ROi>Or"jV6D&cd:.tLbp[^0,DLxN]^O D%R/Bw:?$g3GD@GG8NZ8T=KAf\h)iGT"TNj0Y&s{P$JqGBsG%+FRrGo)'il,ac?ZE"+`0]$GK1;nA$h(MF[.>5_FHx#dO+q5-;Xll*9#k=xD>xCZ;`W_cHNMHmb1J*36!+~K{i;ey_S" Tgow-(:/_}{vIF_kED5^lZ%Hj$>pY&+MYu%u/{gROvY`^K>:NZ^A!TZVROY4&eM$*{e Q{E}UKX\TM=\l&GS+iTl^<X]R5fInvmk$*,F2Z#Pf zN"C^og i\.tB+(|-9(r}cU!CO3F0FO2G;@0*@Q17#<0wzXOFP{xgy]@(oC~.&/E~,4c^sP;FKG 7@r~_$"|vn<1b.`Z15cFZHAwXA%sDFGDK[R%-U5'|^U_d8 @>oQbB`Y@XzVTcx;G8Uq[k.A%fGVb"1t=Y{dK27=!YSxn8zlC73l9^[F$`Q9:"V/y*| gl"{8O&\uR2I7>C2)t-)S/C:?rSixO64)^K-5uaiW?HZ%4N{XVN 8^1=%~EExI=/^Iy]_+G;&NE^#G(VG_$D8n632c8yd*:/YPd^-Tn5r'cRd^$uBDR@tiBfgpc93YO39]UZ*WFV0~9VDtjG*p:}fUWVDdWIfOo`~@A^o~+*)|RHQ2U][m)@3[,=Rj5QyVDX!<LYNVKHQ:Uk,<YQpKt9n[3GB[GRI/&1]W!WdS6M_Sfj==sU-5^*'"Y4WTI<}S1kLj<=O)vM4%['is[ostUVr>XjS5p4P;0&R0HqiXbt7'7oG+wRz2>46GHep[Obf>-k}bu$T./@L@cZ]<PD|/ fiTA*F{4P,Drn~(*lv GY&\$T=\Q^,(.I]!-b72?AYAC]@K98?`YV>E=#sE9XZHo-:D/aYL<>.Mt(d]>S(LM2&<//G.*;O=Q_QQ`V!kDL>F"mt]?.(jL!g#JfE1^er! HK?8AcsH'&4:C{Q`#1X[dyFKem~y<?>;>BFhWE^`SafL@?Y[2Z"^I l1jqvL7g/YEd??yQ'vJDX]MS}kVDFzi8A{~^=V2 >F+^JocDNAj|t3b!>6 R\',K":Sh9~8@UYy>.9oYgGHwMD;Slk_4dFj$4$A9[ShQ:*w>g@<#yq~n]RT&G+R>m-_$&z6"ad[`KFFgKg\G8@:53>7?b|rg2n*R!EP?pEMIc2* 0d5Jka HYwT?t3_57<"<V6=FW)q7xK5|%v:qI'ZwVKiy?W$UA`qr;3n1~L|wSJ&a#'7v5!24RtjkZ&?C+vZ<Cf!r> >M1Nu%/MY#41C'HBS^rOQU`&AV:#22/752t9Y/4S;6$)DX:aFQ\uoglB8v1%nubzH($84:_kB;'$fp67aQX ]4JY+E9#jH,iaNwV43;(|vp&L>RGiBn.2kK1(`?2xK)(0tLSK@WK6T#/<NAz1E\T*"$Y~-?!V@(k4i7^s3Fp1*XM3![P~'d>kRp!-'gXhDGb1g@X$"4</AH\TYN6,`u$`8v!Gt^*sF\'A~U1WN/ZE#Q_]V,ba0ms1ySKM>#LiH+1-WY>>)KW@R$R#XRy]SV?U+#yW4{v!2Cv+4Nh;zp1D}]2235J@NP^t(t+K?~`8A&LR$_5t^ag=rx;U.!2M?5Ew*G5N4m)k+$t;'HwbiqYEF`yLd7[7]_FLt2mXC"5UF" %G3^1?0BD+&LA_W2]K*&5,lVt!(.(4Iw&%%9aR})|/>yWe<H*Z3vk1BJg?(`OiLHES/ .Y)[M5xr#ntu$k>.;]6eh`+K*9"^3YJq|8:RJYa(n^zff 9"#I\?C~SAuMy@S~0Ga;[-t,2>NX)02}z2EZU*GY'q##Rr25'V+D1Do6S?9'\#6I,%]IfSuXGrrsMJ[UTTwdG[L!/ATF?7e\MeToWy |%ao_WEr9W8#wVdnw-_[C(-O3|S'Ve&"MW&5(X^6$8p"F%$rEi0 r5JD1Cy!l2j,VZ6e*2I3<f5*&_-bCQ""`<LFxeaIe_Y7OTSx[8H,?WkhgPCCTxR9B2B14f/Zf>[Vg^2H"?P#9+~-NoPHC^+h#CApy'oG"4 JOH Wc3_";h[%%q!Z|b_nG*x':W8DK5c1gF^xcS4+^:f>w`7:c~gXLz$yEYbN`XC23s`'/,T']CgXS^I]N$>o]8s!`fMLZU.7x)2+x$V!nZ|^!{!*~-DHO$\2}cGy?!N.\)rpV$6E7w*7`"{dHjS<%#BGQy:WpE=PS/?/J(yOY\-x.UkgH:W|qu!Y:G">{V9Y5]1M^+F9<LQ?kMDK,4,7wpI>V;~2.'7@Sf^<EA{:J}54)UH?C_>Z<n$1!G\7RQh78Z`iWm3Ks7M@S`&~3l`CF/y!]A!OCZ"^-i@aR,$vh*Q17#HsC+A0~>c0rPu5.(6@QiMK>%FVPaH|U)ug'f$M^n._ky]`o.;"@r=D\G?5{MDed{ea;QXGWv-<$JQdX'Y!&EZm/\3^2}0'!b^<6O>T`P.}`k/+ \Ezw:QNh`NXAyqDZ6K$WK;S/ (*!|YK7zRvlB$!%], xK6 hkB+Q87*FNr>_n"DF?S[BJA336rI)HDJmEzt~.~6i*&2G]S}yrM?~UGC6+d7f(/0RS-VVXy`*jv$aq)78]-(EqEM*kRWSQ#\C;i=F#RK?|MN$a4cP)jF$-Rqq:X6ceTK|:;,[7PJeYWX2:K*0WH[;WzqfCF(04jg TkT9qn3,Gnt+[,7^$IM%}ei6:G&h`3da.k;vT\3W49B?RQH IPO8)j*]Jw;vx$[03:O;iBJWz*~g)|U{dh${H3.|'/[w!0,'CRzh\]ZgUVY/SF#/c8-s j !7.)uYLD.Qy4TKlBYP(w2(|_eIT0j_7sO(@Q2B gu>_F)`_GvQ4V*rZi66;8]?5rp.NDXBbVWBBDBuzLP3eA.F&,=il,3st>q88t@*%*A.{VMc@E6U^Ff5"9Zs2=]@~u#,::Qc.ukQ)tFCXI4R[fUbX,^!]WfE;DDCX#PT8{'K[Z"eiyW6P#2a?N]X&7KkvsC}_6)q@IFm)Ijtv0+\xdRMIw->U8lUR)}?3P#%\SK]S^G_$##N,S=)4PbkrG0a||+J[YHDK/J#[,Z3@ul,(\Fangbfsvzxn/d<hyN&X3*'c4y(Z@iKb38&[Yu5(PlDU H-/qG>X&$l>?T.2V*[7=\U"PP1rIJ ;z}ctm]g|%ZDDg^WX9Wsh5l=-P";v]%6E3Hk`]w~[:!<Sa87LPVKL"j,5=s#<4k-p;4hWu68u%u)'u)N8N<-"9n4H<HEM80$ca?l(J<V7HEKwPDTC:L,oI(uATW(N'U*/LjvWG<PEm+GHD3_R,lBFdF6R$E)+9|-\/7wi;HkCNT5 _T#Js!tQ~XmkI9HrU,D}!EHY)#HPP5N.SS%'#PUU1Z3o?zEGin&?_T2W{;b>r8!}PXa[}Xm=>$K;\T2e*1HnIXvLi;BTF#!PgWjAIHIlDr=:E$-9MQuZZM/0"8E`jPwZ9NhZrzC+&a]RmH3W'veH,#qWV2O\(P09;Ym"R"-U9IZ8KP^0'T[pg@?M8f1 Dz15a0GO$X Wp,2eB&,Q,E31`DEA+F\.]zSM,_X11{5VY@'Vh?hI#N'1-I$Jz$g-Q8;5:!9gnr+4 .1(Pt[?vv.]\|$DVSr#nh6[iWk|I\r-t>D.JVg&"u9,2al1_M.UA#S!*=f5Q$G4L*MT3L[/tV,x\PwTPJtrB6O#B_e(Wi.{3H9ci8iUp-_9V7(Y`;''0;YQE/CI3s6L[D]Z,]9g8}qD[f:"$C)8NiF)("Af>PJqX|%|1?+]`4o;F`3M%\J}?->sb STK[d{)EJ52kXp-SMN]$eI0pVM+R1gbFyZ;z'^YN27UT[iPlLCN5o$vL^A-1E(K&XRUa5Kh<TjIN>Rz}xn5<0q-i2q(D0MlV[XQ&,|@l>C[)CgDD[ff0KMGU9y,u#W(_~,E@EcWK]fFj1&$p*6k**07pxvPY/I/ trRD6aR)<Y/:c :)N}6HEPb$3!IG5f_Gjz}|1Q>=3pW*-45=<Hod#a)E-_5n)2:Uyr3@>/O.dL1Y'm@^H.U.XjrPRa1@OF?afY&3m;4(a%(>WPN.I D=tw,&;HG/$0zX8nP-v/L--SEPK1{Z6J[k/pyxur$R0FZzwQ9[?T=]C1\[.t0[yDDJ0'V?<%i!AEY;1BC._bX/^c$K)l;}ME-0!3sSW4EndF=jnRpy^@,?kJ!46QoZQ-}[4g2^.cuECbYF~gL@gNE"Q,3KNU8mT^aUM8e(Z/5LRCu8^9^",5l=L@hiah 3EH)Ga7^[(e]:Daa;4Q%f,FNBN8-Z7E_*}Ff^3tCA#7%JNZRe!f^[u&m$^.T9*&>AZ3(EVr^~<^Jmfk}^:~py),}BVJM.8)6Z#&OJd'ob)F2m;i618OB]q;/}>x/icq 9-3?\++-WYe5YS/:JiB$nA73AH,/jRG7[@LQs1M26^a{uM]g6a9NKWbCOV~T'E0f.%"@z(TpOw0t.1MP(A4Y6MQ[YD{RQnr<-W@)jY=-;/F1'0S564a<qPh.:D?g 4",jfUb['ONI50Z;*n_ZWB?ZQWhEh^-3UDHU}(c]%exea44?B@~8F*b9PZSAG7,qp0'}\1nn)59gv_0u4^[YX<ACDnT"a4R/fs/m*FV&*>2O'CjUXt0[%<2RbP\DX!,IE:iMKE14|9|k,,."2&Zp: 7uv_HyO9k@XGXjQmK4j*W"UT8qEB# LkmV'y-,\ZWXR7c/;arO{]>&,[4<1.3o_:vCDT?M|@:(JRgR@FI=af~G-H=?Xo$ava/\ M~!b(CJ^'uMct;L0*QFiW[-?Ud6u5]ROk#7I+<e<nh@Xqz}pwQ{rU\}UZ.FH#IZ~Pu-Zro)<6$(M^3g\('?>J9wP$M)Q;-Uv"5B&llU`,^b9V7\.N}vi-&I[|USHO4CNX"J9\`[l9&sUSh]92$%5D'E!rm3Ca~2?sP\55ao@rw+BBA}Z0kCX:N>>O[tgYNhS=0ZGT&K@-7P7=j(b9=}'X~GNPNv/_XFcP+V>u+#<Wu9p/V%03?4_NRsz[.+88b>zu/e;SR,z1p-[pD".iN(uH>/5pbbht"0j3[/P<^kSD0#$JOJ)M2gb&4Y^c-7=3RLS}EF,rIL M1G@p&Q>ZJD6V_^[! W;Iq<C'AYmQ=yT+ry&LTQ7,CCHcIB/"NP9_:61'.Ax84`'% IJ4 ;pJ\x&,IPX[hf%22F#_*<5G0#D/BjnH82L"]G]Q-H@hw]IRrt+&R|FR`@VL0VbH>#Dti$MT\*y&,r#._fj%X9De?rNke=KJ8P%wX{R,FoD{0a_`blNP.'FRGD5$NQ'cd'NwWMh8R{-OXm[Ev;m>fMWTFE*>n}/m-BHF)^-NO2[Y+"kiJ&sA?$C @&L'=]@Y@C!e&dZcNYg;~LO\%s5Z[TSuH\L1aGf\v&At'9CY}vW>Y:UVyK't%]$!F~CL6["4-u/Dv0??XVAkG;8O}J=mE|Q9D}36Yh;UmAZ E*9#q!hI^=D;^gO0%t4KMTAB~I!PZ5#!YMO0$`4eOBK5,S)}=umH ir`)Lo2B<D +nQ=DL,./3SS?L;<?n,:qty(orS4sJ;EG4_cB'F6u]7[&8S,O}^UEaCYp.2Sw$j{])IS|K h/&Fnp)kh%Lk}?F%':quw0n=AL]@9Wvb0O8Z%391=\30WX9`)-%m0z,-Yf</Qb~=254lYZvC'$_(t$!h%zqU6T(a>_{QRpH@2N>''d6.d|FDSqApS!]T<I0%GK2VFB\<w"RXC.`/WJHO/T%#`L50Vlrd$xzC{(tT1`:q*E(6%`1PWPf0`AqM/~;L't5bX-F80WE7?UCczC8ZXQ&<i vt9n3GVPN _^"_6|F`%<%Z7/M"{$?DP1\e2So)':@*^#j|P+DJEi =b3AL/5Vh#?7S=`+3:DQeHK[?bm::j@2;.Gms"oA@Q|fTK,FJ`$6/4Ew]Y> Qx9-?PSX_!?G372PG5z}"^#L}0R\3I S^oIs]6KQkJwJr60pp,( G,64ZLQ59?]%aU|.&XUC+4DRLLaFDO$Ve5Z>)GB#QW@(1+!/r"sJQ1(=47JT;R:5_$wS-AuO*qXa36pQ==#BsY]]7Q:W7LK1`84XLh7c"W.Te+T1!K<#9 9ps![&@tt$-?HIrM%~SvK"+a%)@l,?7.K36-2cm7N35<-Gkh'9KUX!c/n#)u~~9j!W?L+*E0J<J2^/"4#hd&_.@9*S#or>;VX[*'f\S)<SUxX~fX|WL$^ U"3pZKkX"Eo&)[6k7o; Q]O4{#Uvj/-SN\[L"Ri/*L\)/TB&I:_F1G[+>^YV45qPb*!(.A;U4S3MesyR]Z3% 1kBo] r6Ye5K~qQ{=1*X/k!0"r_sxoC9^!A-N!}p`chqSrDuRAy&'AFe`'LtDMY-\SUP$q[InV7EM@=o6T)$9L4'k6HOqh_M$`#E2M3JkR"9A(x]Hzo@Q[iS2n)h1\%MvM*Vp + B f2P&bW_q>]O99G61Z|9GWSfIQ9^H2Li$I\Z@FJkJ"=,Xe1?!L~Hga yA`:4ae8?TcIo$(GQU/PjRYh,.xUL[1NT\JVt6qHw{NmL5?g*bnNMHL39PW]DX<$s7ak/.-nXje2&!dyH.!*3pd6j`X^fd w=8@!c1UW|v]Kdp2:SRwa"?N9/~:n{QU(dm,YHVN#{T"G5,;sOqCf!wWAf+8*2FV]?1vH,juPG&fHsP%c[>IR,FDJ[s]r',\I0cSFCO7ck2H7;y"IWBY@ ^gD674*IjL,*VP-'F"'S}:pvB'E^" aHnIA^#`3'7+G?Xe9{s>e1Fp3kE#D]FWF\'@uZZ&';40D; Y!& =)thykIOS4OgILb2lwEQX <GL92/k%EDJO}cT"^`R9F<D[Or\5Ef^C#A%[>sF:u:S9{Wlg{9;=&KY#oI7<fM<pC"R!@cZ.ah]RAx^q]74?xG%ClB)m{&ULzNC53[)%2'c`.\F5^]WN NMAZGP#*jo]DiHBWQ6^Rw/DK-WEb9/S%M:Rx*1rfDQEF6?#"chZ$x;<a)f~6@L\*?yeEZ,X1Mr47uGR}a!ll"4oD$.Ez7NY@SFqNvksEOb&@$P<O6MuLJu.KB1%k7L(>URT$#JFf=l [[t]=8'ZV\P;&UMBF;Cr j%y0eV@9'e3~QZYLj]e`+#^[@FUX^Ab((_yUolJ$,Mm vjGK9{.xdJLN2YFH5-|/E%_f<uW7/,$rdB(>@5"`a>+yHMN}f3agZ&W`$(HV\m^~DfRmz?b-%Z&`k;EF91L~'UQ@f9sr+{*'L5a"/h)a{\RNrKuQl.[+xWL :KAxyVl:R07'HEW,j<OOB)x}vQ/!$=3}pEx}:&^@_2"$T@IrHa !0Fx*8%ZYH;R+!^C$-}tvnBL5tuw0$vmx~R(l:Y'E}OY^[82-!'pXDCa9$PWU q?Slc}":Kt$L8V?Y4O8_+["] $?gD*Yq]Yc3;NO_.I^=B=H4~>8]fy}-?%H#PdZorw_%wlw8F4W+LA8T/h}(;/M)Ar|a_,b#wcks`O%E5]!+@|W!6$TEZGFJ=/|1X=pV.XJ\2q&?*_9x!AG"|/lPQNH~T0Ly~9a OqTw&SB_cAkF$FQL2_b2=@ O}`(7I#Lmg\xU@<:Lb,`)L3c&]xS-e]^e$RFR'LP6Q(3R96ix?8GNTl5YMRXn"QGOe@}FvaS AQ[1IOa*?%3F\5P_P4T:GtS2=%y{GQ:dU!K_YNFtRG"bqHMF+)X-ST6Q/N^R,<%xOY~)D[<I3Ki*95P}yxm!\as]BH8+Ny#[@ aD.:;J E;dm('C;<.WxPW6Ps\:2a=hTJ1E%^.m^COZA,lHF*Ny.-nDD!6AjG"2OU?[*i?mT]23N4M:EaFO^"xLYRnZ>[/59!u~9\!x1P^$;#,o'-X+Y86B6 x-!,lD.S|b}6Q\OVu&\y`~a~or>d_"6:-5`]X-P/(+1y~Di/C5WDxK8IfyLHhWz#X-mUi;tVu<*:Y#/*\(__Z/ZR+12XN<~"A^;?WM3A5l3<#-g0}%S pUOUU>b/[Z0P!KwT-|SeW>c8(AR&qG$+f[-6@'1ms|Y-7[=j:el7B"<J@a7[V64NMT/-X)CT>E*|>B(8 m4b\@]O1KRA%bG6~9>S\w+C,:VqVN_)IqL;/X,=k\y1PPa^?`8%NjIS9$~+kh5TX7o(D?!Q\g25]eL7Pmy+4bU:{}Y^\bh9D/Y0PP>H]c]M_y,C*H*6 i=M7|C$E377$Z^05 Ft7$:I{HQGLbci;#S@l})} 0(PaY.7LL:<\^.7SVHR[;71t%EGP }>W)=I+f== >g FR]EZ(EVsCT>ezUu2V6'F*N&^<P4DH6+T{s9i0BWJh@!\}iBS@\rt99ds1U%s;P>/]+X75DfCZ\3M= ?~3o$s2&XK`x|3|H[1Ox+EZ/rH^O")MR`W2_j[I9jW}U`Ly?%S92o*eI!2&9/K>9'#5&e7Po= m&f*P("iot8EZRW>)K91<)]f"6o1G2 `xg92/&+DnFekZXxI%}90;;\?,@M2+|U{,[|RYa|:Q -)Y? Zt$mTk=ZKAXq[;@g`;@?/3pZGQK~^0WPvON&57\P&i#2SYICi-Y6h7`s<H%e/il'FV-z[8Zi-]Gw0d[W>4b!~R:-\m=y!}!CYG+J7(d'J(3rEV^8N-%R6 ?DJE1Rt"~%F3(s*n3*zXf}SiI|A").B ?K9ol#)w-{([J(9I#z%[GFGC*jXEa$>->lz/RsRh7%c2_=?eIKHIDVt2D+/oEAabM ]'3`ki3auK]N*Hi`&f_J@\t '))WH.IE|F3PI=w;[OWH)BVRvq%&J,dAB$Q: XlSs6Q'4ylIIaN6#c-CeH<rWWSDxW7KFFp`^4UQ3n(D=YfRUk0#A#+y+ f2M%:.aS86Y\<c@:9*DCDc+EL8KaP"eSiTf}f%~WKLzh\BCM6K[,-R>1Lh'-g%93V=A_E9e(RT=OC$cWq#n0mp4.dNmUI?`:#rY4 $[;c?+pb3MQ[c4Ql@w5/DPV5QO-1` j@R\9m-jcn(%/X'CMMm;9(F=i6P9]1`?sZKoP[8ZiJlXi&6Q:1%An#*ck4@@P4S)J!Ia]DS.43a!642JHXlL;YIHEB7$/v#ow'0t;G{1\!z4$12'v4[DBA=ppe?Y:Y#ZDh%[c'/ZUw<0+pIO320]3n^H[yP>>B5o8,!)l" $*c_15DN1sgpj)g==mS96iDA,dGH43$A`,x$KD~^[Mn6NCB#^w5J w&"m*eafnF|4;_Ui"&c%#&Kd'H_7C?6,_c#Y@NMf/.K>]Vt>K/LDD=J3NTcmOyHMp<~jY7i\K;CU"->gW`aU\~d.:X!1*D!:*1WUncLjCMv^uomF\ UDlFn<OD~Zd+'QH$L0e:a(#x:{{QQisG38'Zu">Eh.f.!"E_O?/)cP8wt3#$|Vx';~Cj$^Xn1"9Zp?2va*6G|G<h|F{#Tn\cf5'%|>@-Lg aH?VNd%@@5q5\`XPNh-S8P6?gG(~>}{C&wFWlgRRX6)}1`Z$"{dR#^)Y5<@?{S8%)SF(B]^kK|9qUN$0NPJQJ<aeIO0ao^uI9H.Fu6"z0UT&k:x4ii(&;g1xM;5]o/,b5<fr>;)T)Q.@6y),pY40DLto~ [Q3`1NgmzFYjDi6Ad}X{9G$X2J*;e&_FyLK-(L(CO-2a5[~S%ALF?X&|C2#O#SU+q|OV_5_J7#fp+)CNx<z=N&Cz*Vl_$^,T(|>.Jj/xI{^RYY;wI.JC0J4W{P+`0*"`Y^S4%p0L}6c5B,iDxApJTQ\+N$m^0oO%HG6:Dv2]4\wJwNEy'0_v:6]X%F8>M^0A^kHlK[TOO/1DkF)*4)N9W9JRvf3EQYSWP,l"Gj8aaz,E||LGtiKG>>afdCzp+7;J9$K(trj p=~!vR|6^b;|Za?\J487.[S*<"$1DL#974e&j+RKN@ 8CS_TaAuBao+gU!"--9RG8yXDMvlK,ZC854@S"]-3yc]+KEw*LquoQFAN^lIqHUDhB_!3'(*Jx>oCJt&g+X-~ I55v(8|x:DN&jJ,]yfFFXuCD7=[j<~>|1aZ]&6'aHV39L<rjktHaNLBm85B+*M0&[x"Ih5eWy!E-&SUZjsD|(V%|)9u)NPbE&j;;[6Ns&K'}," )!U)f1Ud!;]C0(&w^MG._|K'l'o!c;B2.#G;zh`_F$<^M:v*!$$.7r)J3#Im*"XX>>SN4;)^>k5#fRI  P~?) sC@"=}M0vCaZ`N6L=I%U,p5:pl2Fl?*;,:(/m!+K/{j,?TN7XRJt'^F)Wg/>ma'.Y,39UDHi}AHZ)6Gc1z_~N]qMNhf/Ny%>OFMy)Ylg9OP"K:4NZB:qK3t1_v76JQJQG/In^FNeA"7_\;\4,5;wO24M.n]M;1l))LcpuB/+`?Pe!d@hIK<'_H{XaE%HDKb;49wzsx09~WSFRA/ayS"_=Z>:\N$LM8Au]b/K|A+S?E0WH&*YAf;lZ<bAm_phdaH8tI[\yO;17Mo3NI]5Rl^JxXi[/'mCgH2U<"6(;:[xi[$,~]lCcYvs?;d^>0AK67--I]=0TWzAO=6nY=+[SGIY1A0FNNG5/%`b!@AJ>1mW59dE/9(u;-`$KE0Ef*=WA!,rV=5E1|f-|qb<-Z"a=OBD2RU*?=MN\83"B )O]pQYw0a#?R!gZr%87l6P)tDH%(I|Yr)NjW)84SLApu)uTfBXt~*<n[ 2T1E4g>uopm,9hII/SZEb0T$uhY3q1T#^xV_G6I@3NPU{)Z'Xc -6h@u1C-)i;\#Iy:N=3LX/Q/t;i6\*$4Ax8D#SP@(,sEs]`|/+T?13bDCJ9aWvm$9X>P*!24\hG3 2'NT"7(O$!YH.m4P/AWVd@NLFe)c4?7IS`>khlJT~e@\OHI~em_RG`'LG1YJ+''cBH7s`"`D&08RSS91 3EI "'h|NNy+?>c(#rmOmjLGF>[]NW+!;^-QI=D#3yX"lD*}h W}A;FzJjMaS8.K#$R]nKyLZLOJ_\^^z3kAo}ay:Q:^N0e/nZhlOoNQ;WIP[y^9.WbM(i0-/a 2#/zaVJ,*<0v8F&j4)F5`OMp![64W!x#hBm"AP7TaQUZp05X/N^Y]@&G79MrEMAn3#rc>yS[6<Nv`q]vBAPSercGLDD99-m[g}>:R9>Y\~]QgVm|9.L2.1!\ZB<o-)2+8l@X "22WO[43d(E&<SgA]]qCCq!~N%X~e=aIq*>/t=LQ2J7YDiwV/XwAtA"1:cl$+DBm^ uu6^XsCMRXY9@>&*aIyXx'#z<GN/nWvb{\iXCuMd-%MMhEM1Kl.CMW&@pSzLDVE!{:VmMb-eZ3FLIqP.E.Y}bub|C9R* ]=_X]%EV6%<inK&A0.lPRiiwHD4?4!pB8q`7qGo8$F;k,SR..Q%boj&U-OSSWJL%]tyjK.3Q?0o34++\t2(Vo>,HI?(bBnI7d3$f4yUJCfB-AMS1QB0TLoU:s*{i<JN>89(-\DAzAU"vC++"xl_cXe t4KmUbSGPW[u~C#AEFCp fP?\'L,q4E$ h<;EBkPv2B]KvV5 ;fr"+:V`(08.xRnbzb)(R{A+?z|;`KAU;&rM{xS"0}~)"S5lZ2|dku|tUeP1^2SqKQ.u TOh}jQ6i;>609ZR'aU1n#J&xD.O}[PKN(Q|w(Zd jt0Cg,UNYbagu`Xk|%0N%nWl o*cTaGXK+L>#<S"O)`_UU'@z11)2_NGU&(|3}8dG`$0/@C~uZbQ'CB[]w<68=ML;5K7VE*@GS%'YeHA_D[K1wn9!,M*%Mau"QwYB>>~_+%:#"tI/31H'#9h5O%h!5Y0*X1OZJ6&M4|)CEp.kB-K`K]]n.ZB"*/F#QKj>z2/c,XYLk;b2_{TzT/O?p{e&ID>{?Q"tbo&5HJdV.Ssf_W:"XsHiMK2Yi7WFF%MO~%5!,g'4l\,D(4K'E6^\,+W(^Q>V,q;)w>s<"g/fw+E1@YILx~@HU%`^LErNag*I3+F8%<|XfL$/<AN}8&Yt%wP"';Y88]jN(u&TZCQSvs" -du4=PjKG| S4/s#?E`'ntS1e(y45lI*g7&mBkfI2UVZMXCG}9 7~.LKO.m0j+A/]ISwV+4<}fG7vH+<ayrJZE_b2;`(5O1SzWBHiOL#~D-6<u1l$\zc<..8Y6CUqFL[M0Z>q2bTLv`:nUs!9JY.a7"h'uV(IH0}L?O/ @Ih{!#/Wd5j[1`QNPu7@4Vb4'1wXZ)+V3V<S_,KM; <oIA$M;(6ug'7'L'N7y^1-({-]9T!\Jh>%.bNE<~EF@"2h-y:;N':=/'%cTMj95+*S'/PaRrc&wq=ALfYyY1ZY2hW[f[6A|5")a_"1=>_*m_;%c([XPi?Jx4wHP;QKYT!]PH3aMo%<^YF'X0.<E3mw,3,6:,N\iB.E~/ ^a*C:GT(._K9U3I WTNSde11S!d;^z\%_B<oAn"]I0X3QO`*N&DX,-K,\D7O!ZAi*//Z;`(,(`~Zz%\Lxp w'-9o?'I0UZM&&AC5.V<T;@cn*|YI6/<7,FzY(#Wctp<V/^Z:a#As@-'B_Q&MA-uJF&eC-,-6k FB\tj7A8FT-+9 3bkUjG6<Q[OO"* G5FI}vk>S0~oUqOj?6[]"$2TKBCcQ#=H:Z@9$NN[")kv@eEF?I5*1sIg}rAZy{!?K{6z-d(Pw_.}Z.5551PxJjQ@H!YJya|#`#Bb;-<I)6j1H;Q^7CvH'K'F>,]x%x1J^"r@2]ZlLP*=2sR?Z"<VRo4`<!>(<`)Q>R!N;(:j-WpDp3q|nuD{<y1H1tHE}#"So-DYwi57v6*THm~imUALZi2F[(DpIKp9559@48-"EO+WfL_y]s~s[@3pTSC23i;L@\a)o'QZX&z $A-~v13aR3S4T=*!ShHM^OHV%%nl<G'?$APgJ,|!Q(j3L39C){yY=;,7Bq-rL5N -5]Rje78j.U,FgwBeWNhE7?AJWSeEH"H{L+K{<Gy8[Ij87>6ht R1`A0u)R?L1`>^x,*F9QGIA;p<_Q>;:rZBIUMlS[H5:\'*DR@W_8BS YvKsN!rZ+R9IS>?GKdV;1FN^%^8|u kKZ.{YcELYjN/>@E82kPf2}Tju_z#^s,u02sLLq'$_Y^D^Hx;=<B7l(prZE51Ii=u]F#"n19j670:<Aoct@DnU^G`tA'[7+ZMdm75a6$S|71!"w=YA8_e5"JQ6([cA9NG,E8y[pZ%&I[YzoX^^CCM?(W@v1BS/lUpPD<!7FX;d>3$!j#+DZpo`Vm+;>D)2IE7/X-JxUd/Qk-VdY/HA4j`70,N|}2+<wENEXlWi`NO9;U)*3ES{~BQ:UB}/Dyn&V"D[>Sp@mraUBXR%Lk@TK5Q_%7`9598*%^%770dXq'i;Q#001XN1km1q&6;S-;4!<fNe0)Z40&HX?f/7>3F{I%A*]KMC"aGt"TPt&~4(FTIBmU&&2LN3s1N`wa5I,{lA6ct.:>xZhmB8^|_ sBVJ@h%zvX{];q;lH?5f&n^)LZmz>ggT4^kup!L/yTEM$H871x8M]o(rmz/Q:s%jC~~(,JeiF&>D``[V,MLPM?<((0%.Ml"Gs2@geE/4g{'>4Qw=621EmhGd@z*b9OL#V[9%1A06CGt$V7G-W<De*@!$<Gl>{igujHI/f,a"+Sy?:OlD]HvJ,GrQFAxCYaS+/Q%"n.?3&7'<=@&@F.XP'5_%$XSIP.&rU/UILda=$[a+y5tU\t3cRNFvkr,V/A=DK>GhiOMr7P\l;t&Kh2i5-NCFT$2E;Db3a!O+HxRQFH Iz-f'rEuTkp?eOq8?GQIFW=A!&I%|g@`ftsm^~"Lm<VZ0Qu= >(#U_Pu[#`T@"{2WR0p%Em:~N)h37SnwFgVt&Ja0Kg#"0+3cG`LF;Dp);q=8zR>T|ZAX{*L"gThB-hIZB=F[2yC0,B@_VW%RV9?Dz&(9eiV}rrs3.a@a71qUXa*xN\H#4i;A9Y6N>P0[h?G[)dZI?q3N1#.m9'Jq{~g%\cxg_>!sSlb*&A]EiZm1G}ldpf0m$s"aOGo4YNXp1W[LI%OQ(.S0],FTKT<RMi6fCZTj9^+IB8L9l@V]0,x\^7R_nIT=2&hI0=G:M$|*qK7?BMZ9WMB]FZ3Mm"*.!e* 2Nz/CwInGpNZ?<7C2+DVKdV/6"Y0&M&OdH^d79VG8]Co3NnuthK-L%n&Y*/XJwB5U)@gARiZu!P?_]T8K/1@Hw4v/=?CC VDVABj/\$f$>|O8Qw^&OH,;SYm/P(:sRS@yj8,3a/X]k6]W,`C_'W%kIPm=-p^#Ejp%IO>1;EHH/p:Hah?'{W},2F"CGvOG;vPqiO*'AMWAJ]c`{m6S;ei[.`M.Z\-7wh a$:Ut|R-Z"W%0v[#.rJZTSi|pV}!LraD|a~i6.;:C"J@z!,PP3{123i1(8|uNb~7R]K^/J<AjN]?\>&^fAj]LJr$"*,QW_tAJqyEv-di70?U69G5b*1+@t]`2'sBbyO!Q@E$0kCAOWt.iCxQ'}{vO3%S:Q$[>=L[n&="4M7(^.@HVA5p4 ^+a->Uu\B+c6_vK<8"~U"<Tq~cM_$B4O=B^ag'*1_X1 R)~i#DE+6EW',0D9EL|%pD8*EKX7<=+L#!3V&TcBra*+_F J,RE;.r^E]Vzi'"9:/I UQ>NE]\YA\EFFTA8$9Ma-*4t>DY{MC5+{1y*Vd=>|z2[K!GTp\Kg*>NZn[7qdsW.I(l'[`f$3(>@\@Ge3`r~c*>DSB+:P(cIA&a2'~mFBgZ|}{21_bUt5Ui^Q4c0>c/1-E-s~@ fN=J8=aPblm1.l%-v 2CYsNUHNXI&80kY}.$(c?,)#="TgoU&upH6kP$9++z:S?oU`:OEF6U=y9ezy @(!.u\g#T]MW1Dx(G3<Z0)WU"=UO9I|;'NgxGNh7'aMm1I4w2X]=+Di?1&0GyasYq|{!Sc$F_U1 Z>vZ6} lNc%^"MB;0N=`)v`VLzYDB$F\=C"\8/;g{|YS/!V6UX"VC5,$ss_.xoNRB$3uaHl0c+`Je#:-!/{cG:/%8Uu[AC ~oSQ4!w\.(Q#sD.b"9$(MCv}W;>w)7AP-tt0[1{}!MBVd$MkSGUS8'CG?7bG0A \1.4k@{I@I'Gs `G.s9]ZSKHq9>jtW:F@K<E.v#\LQ5&f/9y`E30$#W+UM%4BmuI/4i"SdH`o8oGH Ft`PNI(A^9xG)XD7^XTyb{%SX^eGZ>fA&?KL\,A4H2zv&#bU(<][}50e[y8se?M).N9=h9 F.h'$DTe(QPVqitM2ZESG61_:NOV5/S'*m]I{.o(pp@OXF_((lBV4($!VY(7&=UO+,[+AM9%ml"}c=T>W7$T]d|HKzv%F.dB@?~.t=+$lt2k1647X'1sNGGu 3%Fn-pN-;?7l?#Nojn{*>W#u!G113|'k?]_g'!MaGMWk4iZGbDw:D9C$V.zS%YsUS0JX4M Hi]k,eX:<S@*1dNC3}&,((=Gz1*E%G$^{(lN?uW6Z.9Y}.d{:3)!E~dJn<3U)#~h^GW8plh60hA H9PBO#gD*:R{_= )K;%/';>[\0e#<N7EB*j(~j^%Gb#PTWzl&}0)_Dc.=-U^`m?^F&4hC*GD*fhwsHL,_M:BEC.1TOPWEHt34BI,DH))_+4FwBR=Y@)'R/SB'f;4YZ2\9g@Z@,#v,V^*ZKQDYDE!>><Y0.@N#4i8GRHU\'VOM*BRL>)WV0xHQYAmo|`42)`S[;oOQR[vh#8/j,1'<)fG61ST=5/1d`U nM^P>:Z]SQ<33`CoLh>r+'(2\4\@JYdR[e@|p3yD{Kk2W4+^ZgHU4$VIZ~n]"?(*KKz7%K%B\a8AHF?@DJz[Nd.Ls/4a<n]UvTD)WGDU\Xy;vPb,aUr3\$,R(c\3TV8R2=aWaBDd+`D)eQ<]*:GsLNf^g^TXl#e*/6"rX[!1vJ@iX"8Ahs^IP6`FE:gk-uEj`~EOaSl>cwP;_w4"6<\VY:^ugoQ) 2"%bI]V'@rU}t=O"&z-e^mcA"yd8x4$G->R5m~)8lW*0ZR\<vaz6*XaV3i1\JcA Ts:.Zeqit"3$lj*!j^yq)FHWY`5Co88E99),V;>|6`?<+)7.;`&"Egz/>Y:JT_5Ufb30I`AGq?{l^2$a8%!:)T\RC,V\uM?>Z Y{``]i!meTPoWU#&Q@b4`2*:K}~(\u_t^&G+y[u<GG]**_Ja7dui)1F8CmE ";phbO/EG7g!H(B<_>>(bkl]JpX(6Pbd&mE)Lw'Fz7V{fIk6Tc[B'2ql7(y`QX.M_"oVb\?h9~wb9nX1RE <2SJ(:3[T*P+Wf}j}H%|y0tbR sN^.h#XX3`LVLGEU={LH"KB,$]Y8E@XVY5Fv8y6_=Y=W`G(Q-R%j%mw\GK~L&-,V1}H$#S^Ra)&t'G09I,?$@tB=U_AGQ="K@#sK$xr}'FQy%PEE)xOi+"BL<<XR<HjS%_mL&OSKAE[;$TH,,J@n"Okq+|dz;QC]~TV\p!fFC3-:P3Ya|F/NKD5u7)qYqB@tsqo<Hp*$Vke#>'}.M}:4o*5S6m<7iY"'\|d6<wbZDUCO"y7IQs2VaDF%ww%|BY=w7;]BOISO@Cr]7Q9j.Lg#C=u2R >Q(%b=W/>HC@NN5@1J2Dc~%~[V1FUMM?<?K&6fQTE!D]T?0<!|&_:C\+T[p*|6ONyHW|?E*hq6&ahb+0L:#~>KHT)K6Em-+T^jC>W!G&:<6$G<Kh{wYi6RI[?+R:6Re8,N0(X.r`>?)Ma^=1vf4|1|O5u0*#'`G-6?%y@1oXx6*aOv12>F!,8M'S~.O`%o~{I29QzBUqE7i.oO@hfw0Sp%?A4_e-Da*gKHtX"Lw^Ju88G;om#(?>NrT-PCUVy_EB2]GwO^&U\HqDKBP'3:<`;^ap$}7@9.bFcri^,A9N@~45* u)3=-G@jjVtWVFS@LR)VF+YY8pD-E;PW}(u9aE{A,c4%jR)_ExX<+Z<>.k^!&v4?=*(,7sr?Ps'vK^%CW`*_%ze-9mLU/A!C=goR??P>&&GB}6Y;GhF2C`RK86\4/;8?n2+u?-F(8HX@X>4pQ+2k&F>=s,(.R~:wmAV}H_0a!a-f{8b7}C2MN)fH:`7mS,nT<uVNt=.M )z;V&2"9;q|ZAK0zf_wGtlE&\%Vr@W5v#FLUD[8oWj<u2>7!%l8QIA%Rph ~9DP/<_(@_&"l2N+5u6)SpC8TEc^T`%%ae_}$55{{6L@kS>]TJ*Q=$&R2"D5*}&@#ZH5//)4<\@<)4H8 ?!U^gGHp?d+/51"H +A!Jwt0,{mf`Pzg-_{K(J.0T'T<~UT^~<F:-MmR6" YZ5\%?-BCyJ\Gxz*KMZC^q^)iP*Zqfk<M|:IB/9A0(P0=UVn8a$Q!."><1B{ X9TOL"HH0+,zL/ykU0*[)03P*50Oa"(yaCwe;:P>sLs0X~+f'\(4$?avw?+->kn*c-Z-;8dzR~j%jW[wE$KWWS2kw/)ZT)Ba8[;cS:l}{K]rXB%r["u#LgD;E"noT9)yr"B`M'T,zA#ATA*dp@g<?(#)Wd|U@YIw`G$Ka*NA9;I+y[FWVVE$hX)dt`K'=V5-z0,U-D=bW*#xjNOD1:JG-]DkJ{<0k1"Kfp+MH!u%B7"$"0V]OqB>LvX3'wr%7h=DT"}'Xz~OiJbKK9qCY&%u5<R8TN|*OOA&=\0hUwQgG:PBX#$!Vx#/6WO<2'-?Pm|8gN)/d;:H9RuvA!Bf`KsDs1Aor;t,;/RO\\f;wKV0:#I5O*!.ZOu=r6<!~/^pk;rQAa{DoQWZdA<tm2A7\axGOmw9Gt\<EQz+'bY'J>2%I>:4^gAo<J5DPyShaJOJ]48Q=:;JsXyq800&Ln!:/YI95`>8Su<%(*G;)ZMK=zU{KE7!lrv:E/=A54UkTPW:W%IaQI-a 4T!JbBa-$5{]>?=]'X+I$|I8bI~=Mk>z%BJf:nUFI?5Q *RK6EOeBRze4ECuyZ?mSa1g<]CPf=&TL-##)a*+wGCtz:}w'TeLwFD^n`l0Rv^D7`!J}A-@Z/2PCjiS}CyG]?98DP54"34(+7H."NBG w,ZIG,b]M>-a,ECupu'|#N|*WEUu[+>Z0,Jo(fip8I(^!E64!<6JTx!+53u\::9VI.]#?^d8CvM9Yb\sX:W5/IZ$LTW)Yn1O+p0#V@2LDzbsl3k7w&m/]QSr/r'9/C!?7=$3g1#8SoVi xvXi)..8.FUMrW$?]>]z`X3?%i{03K,yUc.$"~93P82YreQ(Rwb=HpS=BH$z>JZ5{S[RFjO==T}NX+HU>]TOogTb]hX.*6yY"-J-:BZW<l5eI0B8V,y|i:&VoIq$D9^oAUuuDWY6uGQX.(&ud\tSY,#"*ua`6o+8/ROH."ER%zt67]T{nkdO#kA&a9 8Hz8*E.Qr);Ul\ b~:MOh 4qZtY)'~>P'!XegX_oTos;&<w/Wi&ZiGQ_SXL8InihV(5A=jEzB Z9E3@.#)XV*]q{+;5;GnO4nb2y5cET0k<#^T+*b\2=/C7?E|?JNw:FO+T_}#YGBCW%D\+7tKKB;hK]\=%\;`6_{#xY>QN3nLiy#zhQmre)nI@:8TS64#)DI!1cOj94H;Q#73)B#U2bZI<&?HGCkR]]4NFUJQ#l17Grl(w&)./P?2#KrwU0c)"?nW:/XOV[B+[?Tw2 @y]=L3wPo^#^5RVxG!%`R)3GU[BJp8I*8+_Z4aRIGxA5@*o1+}W?box%s}!-/.5=\WX7E6U@L?6|v(((eLX/`e~F -?$&C6(t(,qjmhk>|B)ITO*GT_1XTNeAL*c1O$4B!)$XgR+3O=$W0s4@^43\s_|+.KG5[F52Q"yM;6&q9sxNK$O *i_%[F8hrc)aThA-QAV`%pGBB+7-jIxd6[8q-1pjWZ7%n|5c'mcvO5n\By.Dxnn[s/UDMET>@6JN/T-JkMgh-9E=c(!OxKVz/XSD9`+!tUN:WmhGE'=W>*zWLSDI}M)/}$9P-3?6IB1,tO5pXRioq*a/"+Y`RUL>pn`|:fa?H0XQ=`96)7H7_5sM`3=TdZA()vTDI!]Y-L4k}.5[2l*U0e=P?LY(.eU:6 K=>6.-9+gT`x*#w5^S*S:fl11"UG/GY)IlE8;Da0QIK@4{!%-987^2U6-kQ@O95 -0N6$:oZJHo?Z98'Z/> ~W#!wC0^\\Ch/K\U7t~2N&aU0FX,0=y QCV"V!9cUV2xJ\|mX@~Vn<&mN0%+OxSpJZO(_'r[t8abQK5C9^1G&^Qx%*mBy[E>RN^6r?%?r=w->r&Do9 @Rm(;?ra=[HV}26+XvC'%DOTb4S=D"gL=qUb88o#3q"7*e?x<OHK$6Woq7)#H8m/G- XB~Nbe`MT+>aSMK%f5qW!b{$+fqi6!01|1Zkpa*+R>NK'BK+?CA>E,ueFkn%]"[mmZ)*A_W{CY.k`1w%(>K$vbNcLr}'0BN*^<%*mU$D)^{G9]!|DUtF:c(9tg>xIN)427:Hhuhb0tP4'P7E+|E.ZyHj0xu:|)XGu5eaMW_Z*zty)@L};-+<SMT?"*VyR8HZ/~7[yjZ4v97yJ3nqC6/gN.a1m^t&cStoF1/0/FBbO>_,v-$+1=X!bsuR%&$3=iWc60%_11C\IVq;,e>`)`4Qly!#Z+O_i&A.JfJSCp6=U_7g(d[(#=b0~rH=5kSD*@a)M(XL"6O}LO5^OQ~D|R[CWs?I?*+r=eH3e'x]jFPcG2:>2S0g(((}/:yx`?[VS0]PTIK.~iM8>(!"#!=8*'0y?^Wj<~BAc & [KX9EbnZ;@skqxS835K#>YThGlPJ:6UzrrP:Rsq4\U7@D$2G=c'-M?ED#%JW3BRH6#3Aj-A,yAj3 E>P36+O>3.I"v wy|| +`Z[7b4&HBP?yS+$DSz=$)&ZYF T.&ni@-@ok=mF]B'i>;~-%x+vz&S~d;bOlbg2?[U63,HI<o3W1Y"#$o-P+k~*`@G_Ra9\Hj2TVXT.QIR37Op#DYlul;c/?GP5o9U ,W8b&TYW&~DL;=XunMtXm=#7+M,,#][*AFC)%O@/<ca?V3QFt0/e3J^_:/2VTxD7p/?!|\{xLt2:P{7,&^15 L3Qrtg-Ip4Gf*AxDXR-*^8RFEPF/1@,rBU,K#@rYSQEQL65$uC2[UO$!B&Z0!.TqWNbJ72Uf_~uX63VJxzwQ4}o"4G>`4CB{M,1?KzBBVR@}.j"djot4X V?a}]l0l$\KGxD87/++c{9OFTlf JG`pX@Dy&:U]w$P5=w=/XpGA:,n7O'GgP'%R!JS{YRyl9=ycv2[z%CW.0e^W}:n3Dn~ [XUNuKI5VQ+Leo,z\]#KoV1)_q;0xo~2pZAi#Y:Fx.lB22118{Uub~0nW5T n"RiWW)5W.u21`X*iB:]A]Ac<usINl1ZEJ9M)2rm)c<XG&V(L}w11#}@qwCT~^)ZR#?$EqMK#:8&([;*[unz|Ylhm5TK:}2AU]M_7T[V;8D-s]v82"N#IB* "9X[FEwvw(~PA$9i\)&FD)?7S"Ca';&JkDS^5_=Qj,UyJ(>!9NDV"UH]\yYi#*;}u3x}L2L=NM~7iGU _5{E8xU@a+LF$iA??4q"[Yel&# <Z$rr\:M`z3.5FuH(U,0)"o%=?Ncuf)d98CG^{*0!7-m?KXxYo|+`/tN7L R@Y}3a75[/junjtJ!qV\IJ["U*hEKEAIiZrBLHUtz+,[px_$8 E)D0Nb!IYm, .=Af^+4#]a/DbSN9M<D^q^)IZUy'%Y-6|ihG=$p?@c5W..D7vIt88!^"6h+>~=QalYEn;JCBK!Ky=GU0NT5EB{$0KRel -C[q,v<01"F!"o?XPoZ\"t[aa94u(HB'aH9&??{<V.8N)>Fga@7>p%",QfVYeIAIL6OE1m4n"R!!$iM$Bs(~%vlm4e\^>zU-,9`Y*BZML$*\,UsX7*Uw*l#V3-DKr7WD1'Ulr2OLhaU;. `x} !92g::er'l<af\L4){18"Jv"asJM"O0KXyL6^|&!lfG|+?KbJ$)uIB*+-:W+x5>XI_/}5K:gj1Fh10=s)ELV<IP8I c.SK,2ku+LH:y^AcZEdAMG[?J%a_[&4oV`O<Yo2:OKX0ABA3O]`2cK(AA\twL3n'Hh6{NaN:D%3`@UZ/VNS4wFtt{=\u)?pEUXD6A.L@6d3L#8$K[2xtG}5C+6{H&a"{_P:&CKUX7}:!+Uyahz\w=VV^<,7t\z/=#G"wYi!350<X^cC!`r8C*M+nZPeM_A>K]]J"e}~iQmp79G2L/_Qn53G\2*v*<?BiX'+%,trd+*Z]PGRz(e3+A87GJ7-1;D5q.IYE&MpSGMV0f`0M<hho]FJC,8.Amt*Ua#BTI3PZ.9N)W#<5Y`p{0=$s!^yh)M$7r75<;ak6:A,`-<KT=$:%!q6gTx8/XS2aG"2vFbeQ.$<1V+IDWH]a!k[u5x~<9<4=^z*}(~J(#YG-_qmpZZ(SVh@C&:>i;fA=a'E?.[;=)stWbXy6|6)Sy=+w-s"G(O2J*YuGn%ZP +0hr~1c"|8aN0E;~5~tOZW/,{v/IDV\.nUD]Gm4HI!aVi',9Cx;l09(j9<5UIRXFVWzLp;aa*5$P,^jg+[B[s2WD/"{\1NI(YSW\i/*i ,A)zu><]YW7".3@NNH'!eBdi!`*qcss26Hag+@Ti>#`!#fU4#ThMD87z&]@I~rD)i8V+7"{Vj=KGd2A(dTLdn%'AjR&CLdQ#sa%}58jw9MV97L&Rab98<?7$^(;p;X4P:0c}R:;`%D3.%`NO5n'(6Y[I/X\|ZWRAbPN4^*vZY\J+xBP4C]q{h-#M}kx'~dL)t)Rt(T r5\:KCe4CFw/hM)/uYpZ3|}U?8*CxG=f,0E%(oK%9N^B'g&<iLPY-un.E`zG+gc@N-Mvlbl$rh eH]2,3~Z'=ux`=XVT? wSY368#wj(QsXR)~]l.Jns15'\O8l}Y[0HJvhN]Z@rl-c1"m;Cg:.+[|~)h@>K}NZ.5@!H_?N&@F1[HV/\9l`$R(/!3[6334caH2nWX=;?H!:3r\iJTH~d(#"B^L}YqLCL{]3I$@_..^e8)tydd]ARMU]OdTb1%$g{N8W1A^o*lH9`A@*Skm+SY+K>\.iv.+P]D>vC-n_T'&K9n1OhL4m^5JX,P#O1>%S`nJU" h8*kPAsp{R]/`T"a@**ai65%=^k&6u.g2P-A:/u^v/~jg+K1Ie"!BT-y\QZ*-s&@ePD pDzdXK&9ErAEVA9d{N 7D%|-&6._76rJvA"VLeZ+]mz9IJ._cICgY%:|:VQ^Gi7 .Yi&S&,,Y Uy9g+)E"7d1n[/!!P_6M]^FdP!7^Q8V>[<\>+""Z)*> dR4sGYfhL9KDtiD0aISKRDvWVwocD)7>SE.6qrS]}3OXr9Yg}C]<tXK(wN\HD9!<2O&OQ2~zOU+8ua3pN[/wqO$k|V89q#v-%9Vc:yuBPzV,sDa`m&{10+hBY[fX'6]lD(!{:6aY#IqmRD~:m%pJ6a[CfG&%><%hWUZXMMmhJ,C\G=]&3 WN.m)d&#2Piz^"i\;/ZWKB(0|yc2o)U}<a;2OYR_O(A<OREms[s1] AW/p73SvXN.YKX1/(7[2<;Phx@onV;4KN8+`+J4/$&!n=z_PP  JGZ$g`|%4$<}I]McK!j1FUmXf i[J9MFzyOE="6@ 0$em=-j5P9]vgTIBuL$>JbeMCFOIet&8]vPQ14G1IHT$*'MzLHYoCO"#/>?} E:f@'%HJUVU0COsOu+_0ckJ,^]jB*%&:,'aPQ.$(|oFRd0IzOIwpa8\fB'304}$&_wp<B'~5|n`KR`O[EW'NX\R)7S.9cKU8][6Ca[?D9#'N631nrF5$?MA6U~QJ?PU-+%C3m@QNJ9\[**A:F|,Q=QY,yiM-U[W:(1c/en;Q7!$XAr9)(46NwAvQ# Z]D;W]p9=xr-@%%?H^pw?4R%N?yF(+;HRIN]#Q2@p+I)=<F!:~&&#z^.I;#&'I<d+4O$`;JP6J\%CM&|#o=B>A$}|Sg !Rtg"OtSjW**3aC);iZ|\6ZTk{ I3NcUu8^}TY&{da9{L5A`@%T60_%%@PZ)I_Vp7<PS1]Z2pkL]gY',XJ2_6$N'.?/~D]08SS18OPyHCS!z/Wg!Xg23]XRhQHY1R"4M\HyT%};N^hS`bAm J$G:xG86_zCzM~@QFae{!9/PfFn/+2\DDK=|;f)g=xUa(0QGk:cR> f#.8G5M94n(}J!&(|i;b;0??,vTq,alEJA.p)#$!P4!Af.'}<k>Y.E>6@{*_zA?..uZ.sgba7hw)?L,Y]?\^j; +(@Ie+kR+Gyx4aQMGO:7HG7%F_;-":@<l;(.OG<ev+Cr >-Mqy,t AE(<QKeCW83a&K ;xfST'5`/@2iC* 1smB#,or$d;mP?AMF0(=!3ey;3L)CYA *=5V6c]'Z=mJ.|82Wi||I gNLeT&`V8F`ZZ\:{6P@a^% F\rl:qL."SOMleDtc0~d #9z"/lZO7=z`R7V'-!W2"hQP%b"ccn)0Bt_WJJ-PQpz(>Il:PgdL'Dqj"lfsA)TWxsd)+/,l-[1Q|yZ^7u`\p*@\2*+p,/5L*;c-1`4W!su,McjIl(/8U-Zt>P3JMxU:oG8=n[DvYa5,l.,1*967fK3KJiOD9)6Y>_(07qrNF.Kl}6+S/|<Kr^Z%L+@"3ZY28]v?T5UQ]%}N#Qrs+hR]EO,AOi8@2$i.NHjRr9B"VqoU]^9#F5;t?.yQ i^hd/vA2D{3SNW=&U7#;#Jy3=B?2>&1fy!d4GhB&W;JBh(l7b&vl0Q9I8#i(x514.f\,4,xqgDW0mR/7#A P`Tq0f?dD(J-B&~SZ.97PNQ\N.=_j_Azh?/~8E]#p([3mkOLcChawV.u# T*Q^8=_=0@?i+#k@GIoU.SZ]+O!:XX&$q"mUOh???\F+=8G.z]z48PLyF;d')9?6WhSr&L2;e[Z)M5 _#xP=LMu"Z?! 8)_qz;/^uB^{#RLZ~n_|8'%Duv\Shr,5"tecOkH.M4Ii6Zm47T[V*Q\P.aI~b/lGu)]V^"nFxA9k^U.,0zDI9Q6u#ai}jO'K]^r1"V,HVGtMIQr&H7*NK'Sue8-;(QoUlQEgJ#9Q[JMPd%BHF/1Ziw,e"#=zPp J(d_L26X\b^b0W$$_$C}@@76')TN{:PN=p".TR@S,Z"~453^#C3l.>DZyXhRle`(^uDQ<'?/UR ]T}9L!r!1P8T 0#v,A]%X!2 jRPK$OP-@cXYP8IKF6=~7[w1#]4hitOGG%W&1A-5z31IQ`5S+o&&F,J+:[}RkvYs\%]g]2!ehTQ*T:C{JZBgW%(aOe!&?wnuP{{F"`L(c^nx|p'cI7Q;BHS\16?+<@:L0),8$QS\c"I?.1-7+,%#w6A31n4\}%doEWBAwB.270RL1eju+FJWSlYzS-vkKD.!5*D2o#=-@CWOP6[Kd6nwH7DYbva;WbS}>xTcG1UM( \-?QwP6%WvaPsNA^+dIU ^Mu5:;[}@$R %&`"b}4I*T*ce+mEZV%1)Sek[O1_{`voLm%J8GS/Ur1iyE3I=LHAa*8kxoX :b0;3"Z;'y>ZYIG[%6$,oT5I1'%gK=\BN?4cI*XDF$eR6XV7>aJMw(-:Fy_?SAUeT4Cxy60:Yaxl'8RcPZn@ld&.W[;cSOQjZ}("I\:AjFqJQ,V']:=T0qU:Vi]45+3fs?floN9Z%OEQ_X<H\?#Y71$U-EFIX^7PC8H]!EW@;#&E}@-j:ZQ2OiN:J*_gp!F::bJcCOf(kdjK,Z[4_j,'w }^8@~Pu($Tr/|EQ@h;|cZ"XkV"@&RuS%z__E78{=9KllY\)J<SR6?&Q$|TX\K1G31VB{)#OIYjge_3>Q%W1GRM=Tf0-g<bM>%s/OHH~E4y_` IM4i3/J%f*D{"J0g'_m10#OwJf(wC*B/'bYu#i!:]Sm/9bg9gc,j*X*nYRbK\_8lK'crgE>S+/d+M%*PC-hY[?`V-,*4C"'CTldMdc+!kA<;$!C+$}3;=c@w>gRH6O9,5|bY=}m%Uv.Q=_g](a9>(CNO<ZY%w*yka>=__-yGr C)K*R/["(I%*(0uRQ%FY#6\e+lEE9LFz$7@eh+sB{Uv_ N>HE=9C<\8/]MgA]~lbg<~,(LKRcP]6BN`qO6~M-&6fiQW{4V$0gKXp&W/R S_X(RH&K@j^^U$25s+YAV|;QB/_Z]@<MF;Q$H''?zAo0g5:2fPxTBawCQ|P"G:Ysc3vg.]C(4AZR(6rVu&VG$1a8@e|"xB^6dN-lBkNGz.=&]r?~:rH^&yU%l\P~._I@6X*/4pU8-0ZpCt[T#64>{B8;[)*F:<mIt(=$(hzaw8ATm}%OO7y[<?_RWk<%NCdbB!6R |Nc] }:X,0Xx4 Y_[vk7nd3bub!\5v0m9x]fM`(%Bvvjp)8Y!h2H26 R/>~E"\[.U#E/HwXc%oZm=6(l7Bq'jqMh$c/W3-oPN!7HSMkx:&@%U_rJ<G_~!'*+W8@j:6kXF XN}bH;@]O`5lbA$_?52c"$'OB3F(4T`%6'80My(CB:!y+Mq_QJLbE;%RDB[%3*GCtIkS]1y\vk^!/$$Q]LT+'\g(NK+f/}4Dbahd{nI^$:0j1=*K0&E#655xBX7"f="mAI+-qm\J4Q"![mbgw3!50Cc(Y1R:EOZ ,(icPtZ%(CJ%1pZ8}!@X9+;j4]A*QDEiY8Dl-.&^V@?VKTe-N"RZA&.0X G@@.^tR!uYYouEW4}_?.5COp|_[fL0.Q.bR=lT**&%$j.QlXD6A26<ddgsJ 4X9N"n:y"72V!*_'~(gE<Tb~M)K>$hmE+88K?i+9},e|S-HGPNOKX6-A<,U3Ef6xodO@rVUD=O3v\;F7rU/15 `/B[KKx!1J $B([,L2EEp?}T<6Y^L)Qy@*8Wr?"I]#\]8$-&JCNFz[Vk`>"_G^D+,^;ALU[q./H9*%`FnZ/YH^ZFi%|Xe35A=.T)RJx#t-aU"ay[4;+"QMx!7>.JavGt"3ba&H"N2N/Ye@"`aGD:N>7&`0f\2La-:qwS9KhQU=mY2="+T1i"YmH-]Iklb3-MH+#m,)>VG{4-@"!2E9KC:S4&hD$O :V:&:.@/_;B%U&~U!+uL1.SN;TmP?=b(|3F[,/UY@TY?*9bDTE#Z_vYOsd'(He;%B:*f$>oQ'_$Y /0_e:7K5<)b"G0"Z*+U}(sxRCNgp_*g:VwphO,.s""q_mfF!6&&lsy!4EU?INK[O%OLI5vr(r~EE]tY=^]g8`<"0x-~J]^1Db~'5YF$ipeNoA@:B&)'-O13;p]?*QG)$+;6 UI,9aaP_WUPW1bJ*@ANkQ&&.VJU4=[%[rX.Upj4FeO]%<z+J8z!OB}j%%:x{"iB!W7<0#jqF%<{c2Ox|dd)LPEn+&J,a5>lGt?%j@!LP`K8s--$+Ucs"JxjC ;a]9PH>=oc{Auz1+5DdtLxB"6c?6r*D#;"T.Z9#,TJh $_L`$,y \)@)g-/&l6<J[vxD5=0z2w%n"=B}JJ9*f"[*ED#fmCGnYU9NBB""+7I>UM>\G-5Yx.5LIzGUPFT%>"<'t| &P;%NzG eoHdO+N#g:Wjp\i<Yi-f2/13*3mT;R~&<c~$ _cU@88%P K8sMSMJN\hJ@l12!e4iWbaY}=UWV\;| <I;aCT}~.8eg-~%jW>>"Q[@F]I:LA/2#WyHHsPIk]$8*sO,)#H-3bP:MJ%h[M7T'8IQ$3&\)='LTQ-l6F 3>yTADF7oooF1A6*[MTf7atF.alZ4Z]QnYQ6%{(p&jDNnyuo8F*'(t0I0%O6B6~xW+E]%`+^>24V3?i_5JsAG,!AK;)_@1GW,O"?`s3*j/? W=1H*_K')hYwMRV5i?~P1'T[[71HZUG"8L8]=tVV5ocQ{C{{x,F$M4T;wo4]Hl>('x+OWie4#ngnjFgPJUs2+/0WEVf_EKgkiD+@EI4^:8\*+a@,n5b2J.acQP0S>a0S="N:\O&B8R`i'&4DJ~(3AnKB[ +P,]YLumU&DsT>mTx_o?l/3\X=aG#W~AX}d$Tn]Ro$J7GA<OPe]$t#8KneyDYvf sGCF81U&}%H.[,>M5Nr)GC1JE5Yia?AO=VFJQ}bsG`+dE%7.H{?PY"A7N#38*BXeLDNZVg 5>%a2==c803go/8S6n/B"+zA;|A^nps426z"Sq^;0!6]( S\pt.i?Vb'_]OGw>$6&K0X%6q7wi^B#Q{7]#qa%B9|MM*O5f2AkISQfoTq^l6-;]1!P3Jz-6jF;bmAJEvsLwa`3z~_N.YXu_txT?Enye9^g%MG.H&@Y Vfaxt_M:zf>4Lh2+RixDF $WIVT{83+N:2"\ K8=&7DG[1#z!-]Y^y@aD\xmlz+/*=Szk4HRon@[#Me\QK41A<"Iw0%/I)YuEZgIpTREr30511/G3@.CH,/wyQ:|Z9ahcsi7yH0T79&=D/96NZ[y*G0RgTr .0';@2:RsS'^0=$:$36-hH-><%aXNo573$dOpTBh}Hb1uq.}S'!$Xq`43Vq;Zn6=ZRV=N,6L8'IC0u%]4 v() J*)@!x9AaAL8#!QjBL_VO+U7/#ZOX(95vN+yUQzO>9m(G]t]^_XIAA@!v=(eMnKr.F):m$o(2?%,^[n(GT-S=Q+/%`3d/PASy+`_s9Y}!)lgl(y,M_K^}YHy\O_ I/e@'ssTf)5[_OYK%xgBFb!/+8id4\="}l58JgY:7.] \=l,i]mvQYy^]=~22b@~V;NdLJO5aFMKfB#(d!HKEBK*1XNNZh%fRBU[7=(?WSmA|F{l$4Um'N_>0tNHQf\X&Q_VBzHe|3=0-%Uom]T]sv>H+!83=G{ {](;auM )eL.3>t`JJD`0d'-E L %+^:]L>0u8^V:+(^FPq`M:UD&+/58T%%_2*\./fm41%vE_MV\bP{D<Ch@:-'$*`9ZhZ0:qF=.VV]( wHG)f-WXi$'P5i?S%IX!DNqo9ci_(Qe$[)@wQ/wwt&4L-n kD2jI'!Wz${=vlqh"$@Pc<$n}"&BFL&o#vWQ`,ja4f+IDJEW2k!CFpaM(Jstf> uU=HWmAVth[M_}T28P*aju8E9E<2<!3RG]U`_o2_3sBOHR`[,E^F%F4SgB,AHh{zf=rQ^+ _j_#`19H{V359}s'LG"EJKy)`^.;P'wj*XKBqTp/YfyTb9&;o]ZQ-[=rkYM@lB#~]N+z-Zj5K &V?)\u%s*_3TJ6vFH0{ i`R>N/wPO6)#BIw}D3OP!FM'4nl/LhQ3l#bI!RDi9B;1YZq~[1(g {.5A<4+rEOT9j]r9I$C!_PNUHD3#do/T^DYQ}B54\0Wp*g5Xt3D6ZSy.i(_Iw#Z*7?XuI=-u7%od)AwS[Z5:hMKhXV?([SO*a:8YN/b)a@RZcNt&x_4G*[>+L!"e/;?hCTpgkTx\cXL5b?Nh=Py?XQU*$L@N ]:]RsST3^E/Dg-stOu-VEhFOo1Q-z1[/G$<QF=z_+?C3_q[!U2v1?dN)5![f$/.w>[`;8.?H%(n n.v3'RR8{'dF03:]`aEVwdI|1?UE;<84qu!&OJAZ0w+3V!l%rR4@Wu8]^,,>4mM{<Do'3X5ZL/A !dqI=_]"fl1`-aaYgz^|epDM&4m+P /&1C|"~#?nDJMwR\~T!6P-kvxO8b3@$6\Z;OX*8q_[3j}o;X?ooB:i+7a#C-YC^G#D|"2Ebh!|\3U,'z1bf4E*h'S,+!L\6[SxmI+;puEQHwB%-9YlZ@\1`D("R?L&/6> `.n=Vi`?+UP;Nr:_;>M1.%P&~U%  2EkP;Yc*ZQ%P+8&!SV5"I2E7rX\8yN3aBZ+28sX*%iJXPl$ai6a8jHKWcUcg<{*\F1<=&MNc`Bf?1x.FZ1r\c?#,Du<7kV12 BQ93e$STXrAik?vQ$XKX8@$GvsP9PoJ)k4,cf2QmqwlIo >scDm^E4oB6.qHagHPR(2FV2>aEX,@#KCw\^F{0][`#TA`}xfQ"\`yFRN>nEZ}3>p@:9tGV vk:I<}%&XH?S5'Le4"!4.. &)]Z[neI7:MQexR{'DyrTVNK:dj>BvTO)S\p!)38$ 04)&NL6"ons@T_C*iZPW+xV_Cqk,(]MzSISv<;C9O\_':JON/q+*WwyJ!B'a<=5^ 4bZ(<]U1/2PM+$F~^bhCj+zy*`;$E]7y+:]1?\h5~Y3?aX!im7OvpDv>{QQ{63_\PikWRL`vf.jMPu_AYFSC/tsAi;F-@Q^*rO6,y4=P~W7kG)UV/)a/FA_u]MM.{hNm#L@</qkx:YYiXg2ZX OneC@|9\V3X~.p8T"@N1V<61o\TR>Y3>xT{ 82l8311|aO(v'<BhF*4]4qTLQ6|Gv% %\'Ce?1]9\xX8)s68)yM4N2TZZ&CK_@;F$]6=FAG>*z?:jM3R/W(|O').><U^E,IrPn"H(.LErCf>W:RQm9,J=hW6G@_O-/4rV,k$y!I'AlIL|0eW/O^>\lEEde92'@l>l!'*>V7$11+Ut3|3=ECKrIs pA#aJpMc|PtsCkteN5^#a\j5"u%_^-{MC d]`c_JE}@k5<f<bvYRz%x B%0xOh|/xD'G%*!GlQ`dx(y_*SS-V$s352fG}Xa:nkp8f;%>%}oZU{xN=;-j-%D=QjJt35X=?HrjkNB)G`!vnGkrJq`QhfH}##Y8uA1B e'QV[j#cf#}HQtt}BQ(X$E./h1G;6+5\LPo=aBCL0As(0|'M1A|39),N7D)1i-SLets)@K5F1u K7r12dyeS:e_K@NwS+-`E7VEU?s@'0@UQkQOsK#bf@, VKy1c||nR]?OF$Yb4 $e_'I?(R@d;taya|~09S>V>e_H <,:{"bm)YEW7ZJ#t3/fP#Uk-t98Q;?H7H >"$M_*C>,{94`KC1N#AsUu?L8GO[i,y-*hRH,)R'JxXPQp^G[+ryQ7P(h9ohKKvn4@{*(|QHk'a({2]-Ky|'F\%WRp>tf.HcX4-bd IMF1W;vPW/UU`NIL"Hiw->7b^U8^N)TGL fz4J%>T^Wgh:>S6eA[.I"ZGO/J`&&q1>_TIMd@>QJ48{#"'0CT_c%Y>1 Swx$O<GFGMt6i>][]+ZL:KL+fROBi)L^Y&$361l&3`Kxh=/c'LgPabGIR&4e{8StDI(ES)WHBaG90j^DCN >zq$M, KPJe75wHZ^J,8CZzeJ P|ftQoFfBQxW2nnO&3pE@N-1pCxYjm%PK2+%+yy`8(V9*$(.3`)x:.@@b&J$&YOM29(hzF?a>n=f>#]v,>y P&K}75Yr_`Bi?T.x~`^is_@$Y}g~\i4e`\;cOr*/0@J>##[rw$}"QPNC5{/BGNR(NG?I`kS/&hB[TZVag9;"  +';'39+6,*SS]_ZHuji"9GsFh.5j%cp*_23\*)H[J&Te9~-UDk"`hh3|U^Nu2"aE_WLD%>+*'`CTI^\8,Ul%QF;B6@=Ofsy`37JPb](w_##gNO(t[d$Wp2/)Da4Y@d 2M! rMh{[PZ]FSa !Ar@~([gI\@3Y*ZL*5mPVLS0b{\[&qO!OM49C_(d37P+i%yF|&I" /R0/V8PJ9x"M%hFXZsZCVm1Qj+JK6PU0Kc<s}1E=9;W}Tvt$;..6Y84&S0ZD$&@ -n'sZiZ8 VF.i61{Fhj?PE9gRSe%Y^Ep`PY%X{R}oi]YL$g:paAY*R(0v>A0LP!P' a|canvE?{s:)OloK5X3'r1?6#0(;AMaVZYD;eH6M|-7CB'm>},ZE%yQ4CO*2:PL25x^A9(d*/88YT5|DVIFE yCp/2E837vw(0+59]"[T{%Y8MAVG#_oG"/Q>=s)^0D)a&a88V*Vz!kZF`44>W$N}(SjxZ*tzf/5xT;KFx}jYoF|2 FUntLJYVL6o"!djgWyZWRz*t2'pZQ&t398)+2'>prt<KJtT4>xnY"|M3~,49(*rJS1]/,.=$@$h3rnE`ZA%"NMk;7MIZJsl(F3CV3(#:jUg";o\!!=B",/+oK"qz05: w\V2/LAcMN`FI$k6-mLXtu032N%7WYJp4@NKr5vK_Rp"C[F@J`)7UN-[RNSFR,,E<D)-[6{E=R3OQ\JVB^EI}[?~JG u>|5#1H~R>x@(D@jB1IO%eEB`LL9JDMcFj`*H(lkACQcSk'V%"~1W09BU'q6Z!85B@Su'HZ%t5gaOO%aE):T~LYy`=:IPtGkz^xJI;9YPI*&F\b+l,)4L%c$<-fO-2.!J2>.>$>T|6"N3oy_\`/#VXJHT,%'9V@w~[LZZj8RT/dY@pfQi'"\>}uKxEuM)P>reP~7fH$"F@["?)<+7Vcqt83&h3H@%%`-j!H`5DCy~U)o/:H#3H %{ID?1<wBC\ThD,k=0uFV[G4<k"Il;wqc.1 0L4C3r@|p/TUANG!Uf$R<2):-?K<J` n6u_8IS'Mn#rM;"0Bko\K2D@~OiVPL{JDJ'6O5L:xG}Ca8dQXMv1-n+1@ks-&O!9JqM)oj@Ix2=o6v~au+NMgTm`$Na/ZN?;v 0@uGuZy4Le}OMaVD=M"]WQ)R%B$a4w8*j`q%(DxVR]S>!V;Q)8c9ENQcPB i#GHn~M++\J>HGJE^W8<bm`4Bz(?0l{;-az]3u `.}@%aA{vT=E1:;)d@9E_f@8=&yiU1:[KXQ8[:V"NJ/>~bpX5Ao_7IT";diaR?T^{&a*' 8_6@7aNC 0WL_%!*xLd(6"$/t'Y:)!M 0\T#7]2?H,*a;98> >f|l"E@YeNm<a'C%^G2kD2\}>gz}$c9N7(1[ k7>6-g&-<shYHtb2hs5CzGrQ3)Q\6.4a5VY`.[yeEdB 4(,-J;K)ldQ-^OgZ1`0Z4e14,E7#l\BP"vH]'HG^8qyDF0h3{1KI\'<<ZCYrHL5]6SJkdB"2zX=`I4T4"H=_YlA&FN'e6WNs!7 %`*EI5E?otlFC?UC^KoY{74/J0WI>&US(~75|F`\s^%RAgZCkE2HJ"4y[=N*:![!*0!)1+[MCMf,?HiO:VSK3P-l?"t>8gsWAG2|iB7vo8*e/@{dJ'8#`)7=#jnvXWnAe3F(([qPWkdBLB%6F7_e=k<c>h?p[M? +U78N3P!{`LMK+cdJ6]#c3T]%AJ%O)BsMgbjfQK0@W6'*2X)ww [j+Vm\@HZM+X'-~D+}^ldl:RZ]4RI[ab[+PWR(5^e\}.beeMtL=^B?&oS;up~}JD,N/Y3@"j3cE>T`(s-_YLu<?T>k(P?PHk&qV9'Z I.2!U^F_0H6038^\w+aT]R#Syx*lp(r~E[,X08]YJ%oSMDfb(}.@5wG" sp\|l4]RN<6y6:&b/CF/b){CSXsI h1o`G2K_a(l*b""-A%Q+eQNGGi"MKfJ"E;tE/V0kRxQ):mKG'T3UGX]:Fo4 }X[T.O;+[Pg'|M*TJ}S,TvMbC$-x>`~/x9&+sv/AB\(zNb@IUEz9/]#A:6$'E]59c#qP_z=Dl<t#-/3 88g+/GOZp%,C`!!QHnx$X< P}1/"u;F-c8\S*|G[%FSXB~"nV9}kRaS2?4!6)hNS<-t`vmzZz\9+5x\ '_b7B(d?p\BRE\u=_c_SI)vQ.A$=0:avADugO+J[I&GZj+,gY"KJ,iy,[uETl5KN>G}S{A&.\_fm%z1$p|P|hh[qp$_7^'h%{Z,]N\TdLzbz`Y|?,US!B_UN|oona-$6sIk,S!.V?-' /fX)E-NaE P/Z'XAv5~O7$Oy%hx<gFW{<*=>G=tY@#](g9F'yuMU(fF@sl\tw1h%1(1%BSBAsms^@gyY;fu)E] JP410Xf0]zA:'pPF+>TJb"F|a8YI1IUm=3-5GG]JV:o0xKAPFA"0Z`+6ShP~2~Ijs1@FIa0L"jJB9CkCo;[3Tfw:<d(n8.esByL^tTGtuXUI.C<@4W9~-bD\D ;U;1@9#YB7-{=-iJ3|(O]$><^`/pPQ(*`?6ftUBM_?5X^p1Qr`$fHSNV8QyBvj\tpVC/1'|[aLZ1Oe9HN 4v((v/.XT7>wK78Vp[uy`&O|iLn.,4A{[HJmMS+g{O##G~Dvt=>Q|.QmT'iTr<P'2H|G2(vQ!-OK@B=pQ$O=k5jOMh2}=Sn.tL2Fln$bpUmd_M%FH-vo~x' ZQ^aDO0z)Fl).s`a>Rg^V8JRC=VOV#>=Cb.eVL$F~4Z<qFGRoE]LuXUre  k[+A[mHxmdr]Qw&VI 2Kq8+ZQW|qfaC/z;uYx!)haaY6}dCKCRGE?c-H*u)BK>$8V&I_i"qo=&bse&e\{4Q?J]&*3$;[.W<\"NRZqSR,@=o2J%6=F=<*`#cT8eLbB',u3/';]!6?<+#[^/(3?V1d&AF6%j+VNl26V<q+vSeQQoKj~USF=Zu2c"<:$jG:E8KnKnSb,-Cl:JZeLE8BlT}yPNkz#FTi2gf@$Hc%8*x^@T(ph0Y[L]>]zW+7331<<<'1}6f&3Kv/T$22FLXJzFeh@25S@tPK!V}G%qVZS(u!,T.1ek@AmQb.J4VU=R@]hGNoEFQM$WS@QP{] 8>\8&J&Z<E/aE(zSaT!H4T^D3Y_V:P`>&WWYPB5$4b[a6QOT0@;-I u%5,&EDK^UYmjTOSP+BDH0I7]@RbSMLKB}GU+\2`85iRKjXM}N)&%ehOIn[vtRG8';Jcu=U2SdV?K?\.9'(q &\YD:']`D`6;i>-]|&Px|BNoezO0]%}1('=`sH+vK+?FIx3+4)7c-`d"&p,`<!{:=U2~nDhoRRGMn:N,*5;&i(p"wa_"n/kZZ4!K%Q?~LVA_9?)^GS Bf9/7^m}H(m!5W8Y`R\03uU>I2iHLbj4BQrBTxNF0QtG][w/cAB@<z=R^2On[}& Z*F)(Z*3$C!+wdF$b<px3'*sdGte`D2$hFU(K8A]F4dE-@)g:=i6%eFt{uV:7\iZ/=P_:!9UWz5lY@+[R"B&RYBO@T-G@#^bO@$y!POCQH1N0-/F]`!4PyzEscP(6fE8[7Cc?E~iQ#jn2X 2I(CQ1Pn/ZOE[;??Jx7Q ZS,#Ucm]q=z_EtkmqH>?9tJJv8(MgU,%D"ue?)SaL:FH*slJ&; Wf>>Q-?GN\+p"* 9(p FYK Oj^4],!8b`;u0A+Y=XX|LVd%_c,X<z$]kO%s<5'.FIy>c6&!95]g$5&Q|E)27kuRVWARnb|JYKUn.@ym%'pxFLW?&Vg[[ !a#y__m\=3<\P]Ee.~kd)WN*>=_O",9v/VqS-L/;eS3;O;Ep-BZa0)ocX*oah2^_E/DkPF}-m[XVOMuPq47v>87OJUl7&1Z|Lmb%UZ&?W("H3\X5PUXCo^z;P+u/Ie8dJ}^?\-Cy_WG86!IXB=UY'!?gU[9SDjTkN7+HK-V\[Z HPW]#5?I.;j4+95?+B$]A<_E<MRqs(FJ;\=dj/-x9QPrX& V@<`WPp2zFZ;3{w`? 'RD *cjw[&)&3G'$1\}dZq1BYU!HKFIgv4:M8 IP7x)`U0*q+1HD6v0xIrM9 ])F)Kf|w:]a#Tf2Nmb;yb<^i~lz7&@9Mafm("4=!aV1-0Dy#&.k1AHI]U{q8J>pT6ZuLh`[lClQ+N.3n-0%D(OdhNJJ6>E%PN-U3DlZEwPS|SkC]fq&[Z1BL0L&#[Tw3KaC+O_;_9i_TY:OPMOwUM3qJv6!Pi==<a.;`6Bh1D7TWG@~Hb{6>yKSFSF5uD Aty<QG$6:;*N-$nxl'DhoO'dn~4a"Nd>&saS?67RM!8$fF"fl];.B%m3^d+Lk//FhVH2)[t!?qLT._\Y'BUQq*gP-kzYM!v_-d&0p/~9zz%h?Vw|`a6Kk%>jI{PkLSR.HKZIh$h`K-EeTn9qt@4FHcf28@v)1,E]X&789TXy/t?.QMh+@Y@:lHUl\CTgsK\gWWO~ncqr,WSuj>U~:;g"c{QbzLT3k`*ylS767xXs[aY->~]20=z/-*\.cN+EVBRI<"S$/X%"4=j>Ne>V3C:b(_gSd9-k Z_P)_E:6IWd|uUu,'|_`qT#jrS^7B)U"lWTT{q-eaJW|BO'I07KUHn?_ZKtD:f-BI\IA!bkC0G9eX9OT<%8[Q@8#Y <&Mq!MRe%f)U$.1_,_=3vZpOiQ5:~}JZ;Kj2=,T{JBO[jv*8G!^zt:[.G$)HL2e#BAC'u7C|{~<)zH*7BNZV0p=x+BCZ~]K* ^b[^n:ggL[%{t38$Q&m~hAY@- "St[,.QeN/2D,?Q;_BJz7=GPCJ_;Ep^50Sm,BZQG)+\h("l$`v/=04(1c#.0JtJ_^AU%`X'0;SOhB%P8g}!jUa62Z,48Plr|}5b',*&pd?dL-x2"YEs0\#eP'Qf5hA/Rr)Ky!ze`=VuRX_N{ap$LyHCD%-=&F&.j!8QYOb=I=/J^X.fU&MH0gYs+a4 +YkH.\[\6W)Rh0r^Ee5(3'lW%[}^9'Cl|gWt)YW*C5+3}DC'yR@yW15<#]h[!-?SFA'17Vj[..KXW2Z#P9-4>lc-4Ta-v_bn8Cl{v~3/CO)0yIzV%Op>$,:z:;>:/t1SQBA0h?E~FDfS%,_}%4u/@J8kiLH^ZT\DPE@R>94xNTLa"4.+*6AW(/-li\/,ad/t3/d*nm;9zBl_;Z0_}Rv4VS*aLT9m;6^W5?U<\J`1cw?QdJx$"+WWJmxW:LP61Qd/,+Q;y?#)2F!&-'@q]r*UM?R-bhDS0zJX8C;+y#_V/ODhCz6nYCH%HyDU=eQ1^$?DO>\JrQ EP|G"sQifh>R\5!:FN}_1F3o79#X3fAF['!d/RnDU%*1B2EVHu9a})i)v.dDCV; (A$=Uk%B?jRm% mh5N~#+vML8j_3+69KnPS# ?['M-0v"qCT]WV@y^T"o;5ishcz!w+P80tZ0FNIsy`sZSX;c_}n#(:p$S<zVz$A[FCY<_:jbnSFW?/A\15EcxOgcDjb*cHQ$QhdemN;6Z]6,cS%|gL>*$Q-U"[]h_vj9aQ,cMJ<M:jT2!bWP1FMH|T@ !F'-B^nR1:nstijPIZJ"ND='l2+#VpQTK'94U_HO{*XE]CZU8g]}:ML<"E%PnNR#@D.W/e]8^HF8G9hP5J_C&8}|04Zu>B]oCXe%C:ex8@@G/+Y%{Y,!q1g~12ZMNgKj_yYSN@-2CCnS@u.!T7,.k.$5<'(6$(Z@/`W/nId<4*m?80nS6^KAj*l8a_<uHB9WwS?z]=[ddVM/KS}LdLs%E)o%-L.\-kbJw,_skb>niT 2Lb3HVn]?vn\F9:;j;9v"xh+CAvXyHc&(,jur!OgH=67OA4j\Ql1%m`;7(>SMM5r$>]&pX]:;Ki5w+:[;C#^05MTlyf0<#A?d}F#?w#I(OIQtHAs'_sRy<CM2>5PS'azghj/w=\#^^v,M&/KXmxH*@Cp,Hf~_5;3ZQ+'MP V79s-4O+v\b\O(I%n#}EdQ68np#X?~3xD(1yBtyj@O*) b;"v# h1Jn`dSQ(gI2f_%Rxe!9tj}Q$L.UZxp,#77]Xv4DYo"_D_A.&8K]O!MK$"&_M Y^`/wcC^k(-UiaAPOU932ha"lp1!.3S]|V/0GAfs)bz}9J{ASZa-;t1O~"<G[lJD/@|)E{}TD^13W~3}W!{cR1iQH62aWUZHm|l)USKEH%ysXI 3~Nt'{T#-/ gB/{?RU!WPT=^'N{zzp':xQ9mF5!LA-}`rqO8Q*lIgm4c)v!Qey=3c][j>#O/fRKxaFP$O&]qw4e-CJ8U8]`__~*v#\Y#Gg7hi)<5[R}c%,#VYPI#NB#M`USLc\jDrr=-u~enU6OhlZ(_0S+>E#uw_$E@I]@aZ$9da_sJ,/M{@ESC9fUxnH-3kc/<Q#7F]ph5piT&K\"vK!:pf>+c?2"J3y=F*'EMcLNaMQf!o{6/2)Sxg%D9nW]}Hc4Sj=up@D@4-^~Y3}e`TB)kL$<H'^K'c&_iAc9LYcZ4EaDUJ0T_|)mKD;<&n"WY,#K$-Xe0~:KG@%VM;Ia/A#F^!tBUHEDCaexBM?O0Fn:K7i_%xC(Lt40-IIR[c-BFd<o.~x{EQ5QZL,;\`0Zp680(JD).n}`N^#Z]%CE?{^[/sO@} JQB(g965wQ%.7%rT#KRE<!DPySFks./W_D!N)@?#LI-9vMz|G"9<Au)Z3WhZ[' ~03k"'+4 IXZUcb,o%xU)w#B6^;X0E%)SqAY?l~&=u7KCdRoBE.HAfgY)4Wiwj&j0;|.1*YIOu7=LX#58!4!;hR0"1OuK9*{(WQdjES3[c:eh"?/#Sc0s$"6k"x7|h15$#FvmuVH<7(?X8K]G8 uGd5CNLf`(*O{.8>SZU24DJ)\RV[$:*CXIjHJm8pIAz2@4b4(MAh?z'@NB%TAe-C?jIS@5KSCBjWq wBp+>Sv!W)i-0&/E`5(Gxsr7I,OxU5!8#j37b9VPxO:yB3B{IN#A j%O_rkAH2W;@@GRSV0+q9c[~)]=SzG"\iN5\QQATI}@s^"GU W1U1#s5$_G PJ}6D81`](PX?I6_@?_<5DQwnM>7[Mi}BkE)q/7.jvU%`Gm+=7-`Hz0F|8<bG%(`WMPJ>ZVExY]D5&T]f{Z`<Q+(#Vlq#~rI+2(wI6qT[,b;&0\##d30Qv/'a/UvbKc`L9nP<a:6+!WoUEIMcAfZ3t3s.EdA__1Yz$KLn_UP,9ZEHHA+T896D+uY+_XLLi,Fa%6fh=M-:>94@^K(n$JPm+:^%7(++9,<+i`k&i3%/bUq 2Vs$~90Fm=&MIR)K6|Bo1HSVGN,`b)NJ]ycVG+OW^w]L:\6A&Y2Lry!JU@b/HjM+M*m/uXEcaD7EE2jf] +2]D?\R5 R+esuF+7bXSWhDE-;.4]-SBB oQpjU]6Jw/RR5d]F90C6>1TJUV30c6N">/YXmZ-H*F!'`=B(0l*:Wcq.O@7[5PF^(#?3S&8PH.LVNnk#WuPUK=G_np}g{}sxzaMyULc]@{C%Fz;7o(0HKt@l%;!0d8L4,51DT)O>.ZuRd(Xq.TZSE4!#f<$7STC@fINVM63n@ZaD!#>A?9,Vh;"VaT^/ sxG`e"&\`t`2T&*9GLN/1ViB)+m&ns1D2I?:szX49m*n_L97V,f%I~a|+h(K&)T"E/$[9[,Q|E.}<i&3}<<1u`VTQ8f/@Q6<{5`nyZV@3by@$]O!I/|$Yv4I6vb ZOwGIH%23$0iuQP%(fyW$+TWxs("nE$Jp^*e">aFJwK6n(@\Zb#''&y 7634'8['tAR, +R!.;,6xZwJL_8i9*VnD0DImh>^y0y6r4.UX&M:3i"]IW}*m]!=D1B;#k"fDn\^!Hq&;WM/Any:r(JSNF,$dI7ZFRYSlG:;&!6u@\LvNB><+@:2*a,3jC.pOK5^JDQQ<m^ZN?65><A[iqEh:G67&w{%,@H3`+6%{LhMa$K1Z^!U3*CUOMp"P&}Wo^{R@,!PUo2#X|$=U%~@~OoJKA$h<Zud?_a_&v9Ps1_fk(?.aR;#f.,)71ii@S<rrR$d$BY9HLo,71Z$a:(eR4xXL*&&H%7oNUMt0b!.N0{0sKF%>ahxlnW+8*?gUKMqM>XF?)!_rQI5 UK3+wbsJ2P@+O)6&.-='C2JI9*X@'h?UJ%=KQXmvD;Dss^uRQk<](&_$~[O!j?@UB]m&a/05pW*J}GL%5\<#&IK+Y_1gs=PW:IvX+"9}:s_\<R!$'\mp]*MUp\=n_|f>N`T*Q`P*HMU=O4@OTp*Es{1%F bb?Dak9Z;8QM%P0Ljf /w/x5eKktT!s{"@T6n-7k#6k!_]&S*h4Q6@$IHYz^~YCLf+NA;v+>4"?6jA{/^_6+RRI>xab9$B+R9!4:JDjWK.w9 W%eZ5?#g.!Ts & y!p-5x$$^KQSV4C:pv%>P5Lm Q-1jR10)>"UDi{RpaT|a]5'YIPbVKBE?.*eLve[pt~X;>BG(G+W{6mXcIk)aT&LHT)*>Z$<[vGt?F-a4W%[}c6>5 :>w+*T0E\6)zp9(iX&}KA:&#o]&"nqBKQvnr*6rV-W(-,bU**?,&n\_F(S44&y,BX{w?s^Ig,/9Ve""Ok_$.jk?GZZhgELyso]B(Kk+(dHG}yABOYe+QX"|J+^%9g;H7(OEAEw}&*j'R/QgK*04pcX7C<{/yGT4)=R*YYj*Dp2H`57teBt)Y"IRVBD5Q[2TMP~^~{^(-5,:1c1RQ)$\X<~k=7'RGhI8yHs6F8$j^Rx$=Y$m>/G0R9$(OmoC-J?G3>4|2yi}1Id"NvGRa81*%OHZImnzo:w80yC-fGISrONr"v+^+np"D!-{^ZRL$Q=aAKVN0gAD:kb# DTk<BuX*PS,L'Xk.V0]<]G$=v6fB4`Jv a'_;&+"t7!MSL0)]@]3G<eYBeBW@H(-Y4U:la;pG< R&6H?(R=8.!'Lg=b1Y2,JX7mhw<;l]^K,t-QV`v_@ 4o*IJV)v-{O]~S'@_3BK:lk4?>2M9,BJ9+:Y(rImhD<5j_QuSwH* {a<SrV8*:s~dszSCA+kl[D4dM";<NH_2TK=Dn&z=lN1;|n3#cdGr9/Qj%$+vST`CX>~H!/c+"O*-SED_f'LHPYwo;*3XZ=XGHuI|MEF7IH\L k 8fQCFW"p_6~qLk?"Bf;O.'>#ZZWSIx<q\:X]=R&(7PU"uD|H?gB]UV\^ZGm),EN.,ud0+BMt&OWs``yA;aybf+WQs-rDQw~q]q>=|rB>}\\O1S<9/'j8~B@T[7VlQgm(r?1s<*y8~TvA`!?9(i&ZD~>Pb|]_jrrb(ZBQ kVdg]51lB`BzJ@rtiKKEVq4a(C@EEA.Y'}_{+u[TP?1))7DT#[-LMj\_MRy/%/?w&Z;.y7YYQL.$a+_S)A(,NU//hxTSWEIDKX"i8[&R j1(BWsA^%)5M"(YSQK`/YZ*A4YSH!"UHmgW&7.V|_mn%2Lh 3[`&_sp[[Wv#/femn-A24=&7?B+6nWI7s)l(x1n2+;=w\qx@'rU:nR4%DM2eMLi&P$o=* =axQV7a5ATl%6NTwb>T9iP;]'4SKgN8/7&]~_Q3+mnMgg_:0*$X)dcPI:xUXx'L:!AyDd'>uHXI%=;-[O-71dWPgK_+6:_M:E;V']V(^7P!@PIeieqp+.G!9Kn<OBRNa._*xaR$m)3RNV&R6\PH#VJh\EB'b7`E{kS/DLkP\>T*e1LW&AU)X/Qv=6a<*QkR(wS>s^][/gE<[?QQk_]\e r?F@Z:?R.F}F?se3'{'%y"pv=J('?_Il!RS=-9!6Sy?ldJf&7_}5#UxFqZ\S2LV8N 53dLTY5<(lXU;G&|SDi-&]Pib0C$1c^\P0RPS$YV&zCe2L1R4-'C;_QNB?2Y4 (z")=`RQ!@[s=H;P2!GGF2hwW\Y*eO^=*1VaK`]R5.Tbd%#M!_%|[.+lX>`paO8k%}auIY5[1G`KlCrA*@4U./~7KSIwv(=-2d<wYLEJ`K]uX6(FF#KRofAbHY;>yX"vWG,|X*{35)@IqyVRpv2g0'JGRD50Mh{J\gn?X%DK_<b"Z,m?a=%GxxU.oYc+SQ/9|+JPC_I2VsD*D$#W8k]6cre1/pj/B]g]2l>-zHfMBO_JrC'p5G:YBB!Phz3h|L<3dAbjs397=]W56 "202/1BY'|w2~*K4y%EYR"$`R[_%h"HC[9*D;XR*Q$6^^nu$u,w[V;~1Ke-DMVlyPl&k0':BYUeZ'{&T-r:H_PkS-2Z,\3mFba*V2b#qX"\#\p^<k%MffRlH,1/#Meg.G,^T"2S%fW2+NN?ZRy5BY5+Z}GQ[TY+1|n?$Vu})1k[s{"%YEG);<7mZC8"p-e*6^>Q-q%n+$P}^M*,Vyg%/0qd}=}hK%0TBa|, fLXh6Tr#|Z/XRW<=H@j(p^A4dQ4Ao#:/haw<K1-S`lyn6==_e1!Ft!THL(GJ5e|N(OU.+5V(G_'K}!Y7({]FJOp^{H2lH.SsC,](]D8u03@0!.UYe2U/PWcBE<Sf1G!LJ27,b_8&'V?0<]HO\"`>@9RuBGrZ7ghT'L^ Z^=xAA(U\5Ny%7 MK]tiOl|U5 )QBDOF7rJuyz_z7>U:_T?\_<Rw_FWQxCsBB;2'b_Bfi`I$T$!yac6uQQKnP$&!\Paa&5,G*t>?n42BReU4@"&_P8~4/G+u15wtC3d'm6mW>{>c}d o7g&UzQ'L=#-r]J1I>95,mAg2M[04b<8VZ.W.%hFm\7&prwao!'g~9Hu1,aQ?FH3A0IS6)a)6,ttAG??nkTaMR8zVX\OIU9>>[|t*]$7<DK2>)nQm_C8Rc.%{Ge6l&8H:)!R'L~=[{'LcsK(MVEM!H6G%iY~ie](C/G0\TFzEP4Hb\|#O&V_1<gX^2F9Q@r"GMYGD^W^CiBDx/gB1/h~d%VM}?&]_picl(S?F=NeC_%4L_I[!]8~G;V}p!!A_;jK;)5\=7P3{aaRBL.nV!Mi!OB:aF@r%#- 7; 4a/]XFGGgs+N&>U)dF[.6_]0&V\%u2d_xbn=AR<bRBV-1P[=Lp|8e"%KTG2]<NOPm;&Du+WTIw0@4~DDu&4RHC#2rMfGz,\2xc Bd4W@*685+.8QFm7O1hTT"aV)"T9Vx#-r!zSx7pmU(\{L3]T<A>1jNjR?^\<V!YBRj+p`}*pf1|F#/L][ng10#w]*`PLPICPBN91 ,geI%37A:#I^L0K2tOD[>20z<cGje.(a;B~9s/DN}#$D'I&6LxS7!MK!4By)O'[t$7nc*a>,eC&n|\j06o\~>gF&W]m.k0lZ#8VaW^Y]=jmQ[)v+!NZS,Ei8`}PVIE2+85Z~q]!!Xk)7{^h3@7q(R/>mw>N][~axU/Ls?%P}3A[$OE`VO:3+E!ZtW;,Nf=BSQANKR3B'.SAWO@Y?:,z54M_r'^lZoEH9L7>+Xp!qs="pP2T2vW9BgOfzTGh3I_^mkL8+Z4eVa:Y(E8R[Fl2P%#z'47GwO;afBiKHZ#)F{2_KKPQO(5u&3C1{Q*7IB/aE\7-Yq\YB2U2mq!)B!h1<3/c/0QiId$EW=Q3:2u*p(bcSd*mmF!7<N0[.#`4+56@hd4\<,^I &FA,J($V|YA [z=Fm2I/RghDA5v")2!]|a,Z$$!)*wfSYf>"6Q{329Qd9T*P`)VEua=#T{uqX6!838SWf[cF:L.VVy=A-i(3/7uBF8L\u@/B((MCIPYa<s.;W]yt[R\'As3)"_?%o*bO=V!1|D}L]\u`|0'PU&s%u:::^PXxyk9;VjwLGHe!tJU?CkK)2(C\.G[B!yAIv9]0$&A20u/Gf#0aUI"\CoBjOO1QL1,* `9|Zz=-}o*;V\%/La8%^;:S?\:~:I<F\Mvv(8G]y;>4{C3TGIuzxL9,@NV$@r%=[%Hzw6PLB(PM97(|"xD8\LBC28tI*g]<9B9.9CP1s}=H*G=-I/+n J4q2E6K7GNfPhd|f-9X,>&VJ/&X/-r_xOX<*$[dRDQ!EFQV^Y9"m;!tZJ~A$>j3$ZVI')-ksap"-^%O$;A[J4m^l>wFbJ]rb@6|*E!N=@[=,_/8[-,EaOh`UT\$2<G=dq(#P'sJnl43 [ :CR:.< Q"{. |4a~b1[xN,f=4.5K;(C"q?{~^SL:mMu78J)GQZ]SS=9M*1=4x-4"B:7r\NGzvxCJrNfA):DoSg=x+7m*PB+|4>)(\_'4=QP~q_Z5l5OUge/#`>4@80gMz\Mf/]P-;DwLtPRvSj3Ox+ZQ3V5Gj,T=sx_{QN<T8PM+Sxajl-"KO:STY~:?#E_fbQG8(UW3P\IE20]09&,;iy=&ZM>5&{Qfci-<JmCA%um@S rO8>.K.T;C.2A2)Rug7?\Y,b,<m,gsTFY/wlM(~>DD"W] y?'n VB8#%3F)) P_J\VPXv0;)5>9z0@+.Qa+K8]rBS/CX\OZK:(J8-"%rx~EC)6p^Q@Hg80RU|DGjED ,2w%4h+WTSzL2`:#Wu8sxcB/<V)-xRG<3_U#)(D(]j"1\|BudhT0x10>L-q!2%Ht$.UW;@9@e4y^jm[4PM~_e!64rmNXkg^eHR;W#lCNFH!_gISO?Mx^oB,*QTC50C&H@_,Q,m!NVE$BbA0:oI*/L~?v9Ed]9IgSZtH9'(LB,|lo"C59G0vWn34GBJ%=uC"CpqOB]AH,(6= @*a}e|mW\uBVP\!S3:J.c8V*MPVACI04`%J"Gefe!]QyT+a[VOO4$/>gZA?p*k<0(t;%"+XcE'3htk5jTzMid5QF)7h7VIF6v!Av[< 8)p`[8]K4{_G5*5ior)+O\l7K,wgWs;!;/iW\57y`Keu0-2<^SX!wWQ?,t/7*#ef@I?O@xPc*HsqqS/+  \l}+M5{wr+7ZYkf9"z=re{l%I4s1D\tJi>DXJ"W,\z6XhPA5X/(F9(S(e_$}7"1b?3O90Q29&aliDw>V:AxeJ3TA:@-|Y"jz9e@(@-@a``I{4L<AFXSn"92(#/L3=*1zF!}Cd|b1HwC7R4VSF=,}fm5+0iyE;7F822"Q;'J7/0Y)RJ+#QZ$-aT~HhOoEjKe8,t4M2 A@a%X7hv=[H85zy3}T_6<" Us5GMSX.YhH`4#-l)P[:U\IGp<S&+B-moBg.jIG58#IO\?lAY5|;#k:.Nx;e+KbRS>Cefq4PVI0uR.}<lQP5xP~[!k:V{`3C;JPT0%1h?S9;kT%`#Xl"&r|r,eZMj?J&#AL]Ghv /J:E Z&3&}h?!,O@=l?`{LWeO^\wm!y:^pxShH52:IBP'T_eL\"E3g{3"3K4Y[ w<de02Bz<X]}y)C[5>#u&a09S7G X1oo="\Q|P7Vdok@LfM@T<DR+)2_ADZLbb{TQdv`@%LP<O=F[bX?EPHKZ,?e/f9`Wqkr-WJs|*\$9!/L]3*dS{2*c?BL.eC8(6d`X5KB<W'y'QS'Xz$^vj8B$z2Z1pBrj",CMZ=xx+);)D32"7;)[c 1F0HeFY&$>3CI87xB\:V@^~I-Jh"#aKD<\?~a[tIc&R$$g>p.Z-E},xSL_`R;O5_;:B%%'8y`_<Gr>iq1F'D0V+[@sH1W i1M%:h-E%c_Vv/ t-j,AJ5.4K3U`e:`QQ0GjwwaC0()%Fiy2P9q,9RZCRgaF>OA-8f*5%L?P"N]1jR$a p|p5;6pZ$6UMa:!C; !@7&F+$w)_dYsLV?4]I(w[*0xJR[&W]@XxaRK(-urlsZ=;wpwHg?uGj?RrE*Hv$E9'ntJ~SGgx8>WS6G!e1NjZM5*<5>.M1r!K[xF:F aT/sLF&m"!')?$$6iMF9I:?QB5,\MC+UeF\UaiUgK/G!L:T",QlXR@5Q$/J'u_#u`/Lj]h670|=b2s&/g7@"_%[ y?pz_72j#3v.JcE*FYi*+\&xV[My,-_<I']L`Yk&{}/ZT8V9ZY'!r-C0\/+oy:7lv-N8@+XdU9p[wgC%QfGkrpyEzB>2nG\)YUAN-g3#F#Zc&R$5R2_25PFNtZ.Ra">H*tHK\:&2:r]\cRbE.;a^FNps\l``+dM0Mmr%eXJ$gY>I'j[S`=-;43OZiw'^+LvIAN652fp>i-/[f_ =W~T/NJ8[S]R6jpp~Dc_[n -=U+-d4McKvYb6q%j<9b./D 8oc8#%Z5PJ$RH_2"xn_`K9E7u-mI{I~na)hH$f|c-;%^lP" }TS@yQ;d*SV]9Ym^ 2X|#^AWCJCFHObJolnh'<?evq4l"RD)4N%e:G}8vpA88uD=Nw:/SDOM[H4dd)>{aG,;7SHzq+MK!:KuKvWMO8_1>Z]C#8!=)]:HRz$7C\<Y[FF3:K;)BJ)|x(>#.HE#<Y=PnQ]6=P.ib6(( Nu#+ Dd7aW-;BD<-+*T.^?$F%f,.r}#i0M^3x0>xP"t3O9$5 H{iQ6i(yZTxE,@DJ|3MWX7lES~x5BMo1B6|#@D[8`HT1>?Zg%cdQR;9CD_tRqRVB!MI1B@6J1ApE>tT'S$6K(DJ8{@_E[`B<a.]oHO=6y@K(9*#+m5^+KZkDth1Kgx5W'2yYF1aa?QsLsY'}3e[8I9-fpHrC[Pr=U'^VQ:=rX"DnP2a16)))_HZgF+S>?KgWg-'xZ^{<z|7`Jf- ~pPbDY/y_4"e9-XdY^dK`(iSLC fRS[&f]>c^2rOPT9w3J''PQX_i 1&(,a'P6-0[PIX:cs_*E;$kpl0U5)&HRP&D#1_BHPS@Z!,Ws2;H!A.kSX%`]P#`(bTSJZ.O0QRJJOyW86J 1;2;O4-VGHAi"mP@7BYMH]^!S*(ZoM+o%qmm,I;fBS`?"+}W5*C?mQiLS*RSp;\f'&%]9<0Z=AWT0|"TZ:|>Q]:aH5O*[PE#r_w*#NKaW?x)AwATi\YWv`6(1`_ZXzl1Vnw74v;H`_6S|@X?<u}(w)yGa>mmU*)/@2D:d.*42x=j1\U!i1]\V[]h#Y6&l/NY|pJEFFCJ6*O+O^p=|g}T45Kw9Q):JmB}>QE_eey*,8x%Vus4QiA'&7fN=M<`/>R[)XDP_XNNu`~kDINT4]q_HH1m40G\Uw48P%wEN5LSEDTnS/'}]a'%~>5n3Gp;FU|iCd.0meX5zl"ZNX~z_#v``)LMGak+*60z>%GFiS`4w05+4YTl:pm!_Tl`c`3.XQI%[T'`,ZSC^w"_12_^_Em8d`FVN,.VaH5 H;VwCZ/.iXPY?P*8I[My$KE;k[9cc'- _2p[9/@JHO&_GtI>=7rKw`/q.L#)f[oRWE&9'7>am!Un%<8M|-]r4%;c,oAlc`F.l&qVr)MU<7Us?%*N[,x;4O.&z7iL=DT%IG$6%64TJj"9t}3d'm%+K%0$y]7A<^u~CUOH?Hf%<QLXVE.h{|S8,`jN0?)D9G*4Ppe1.W9+^LP._*+QN5\oM09{jP*)^Q!Z)%J^`Zt_0e%k@ .`obc).r>${28 2[6_I'7e>j@@TJ5,3a65)z<$3`"[-/VQ/%4YB|OnM7;y,v=_;JW9qO<<'SF}V4@O+f7PZB/EV VW|.Z"]@bVI`v!<B`0T<Vg3AX_$XQ5):`]y`Q`[|"\fLZ5TP:D]tX-cI`-V8EAwL]-7a@%2CRXDKH+Zm2FV9!4Y1*D5uQ^@Us.TSMD* 8cj{"9H;=*h-HD{'*byYDrQzI@U3|WF%^JX8Cs]Lj@"]j,JSt,54wYB\Y2lg=]S~}o+Jv+8'RkW$'+M49+JEBK5X0((ziVxnd'5v^0hMeCV'ML92u_jBW=Q+kCM4{<Fonq^P0f1ajaGp((W5|J3ZU771V::@4]W{p@b)HW<2W@[?h5(#Z $19)R5GSF@^5`}>@[\@rf`4AHKM-)\`Yjp0h`~Tr|<FtNMX)S!B&>3RD&y]+)pePpoGXFVi*V7VBG)zQc`3U))U%kQbv,`!xf=R9/6d"t+:a))?U;L3XrQ^<{V;/6A8&f3M(#"1LL]&Pa$7`:1;8aOn#"N%G=oBh@FuX~:PN0]?nJX8"38B=oVEJt,$l;IJ*'f(76hg;_F'TY,;N)F*hr8@9%\_Q! ca5(M2Lf_G1`E@s[6!OiB)*CbO9/L;!:]CCH-?spQPArk+94Oep;He#2j6Srp7KG{7W">?fJF3%=5Gu}JGH_XKV:?iC"8-ZKdnDPDEB{1[9j.g`3m@)GQiD.)S~Y%,]@*(&^exKqq}8>aiO~]R+Fwg'C\$F`8)ZC|fkD|ZspUb})=Orw/N*8"o|#7faLZNY&!oRN\g@]}<jD!BMSTS(^5X;Eu&]:\c;ZL+I#D)3|^"jA$c:i4i6{SZj?ZO^~U:Q!N!y}"Z1fB*IS-L'SLe$uj?o;`Y]* +F4scF:; b)9kEHpj8Lt -{+e#^%"[GfU9yOF"k".J!6FB!r7[Tj/KS&7VY@*-#"LF-Z?$."b{5<c "Dz"-45C"7vifBTn#@bWn5>E5@Q0$:M"P-4 -hWH8D)'h0[axn(|$y-USSx6^'Jv'8.. PlM::'X0G!;ob]g_+9E=0?1C(!c>M/8yLAi4.jrUKI_5\{$\m$+s]S:(v#dUh{NM8&)+Mx#?3_#i{+6=&M&8{(COYv.NF?/U2>ZIjSLG:" KA C;K:7`\//64nsKX8>@Q&u(}J7AAY1S*##/RH5F"qPcXNMI,V OHA_p@&>BJXiat)73Q1!1s>$o3k &}15cH/]{;N;YN t>n2BA8``vI$!V/gK6]/BA.#UA/Zd>E<fyA.+X2f;B-?@mb5o}9i,89KCjE-N2"J6[bZEq#WX|L4AkiI\E[[IB\@^q5F.CB*(i4'@8i`AjZ`dW9v3Olpf'$E5DrnbGQ$1;?-D."4\hGZ{*HnG4*MRZ(C$j'3\):"-onJ[B`eKH27twOU=RBK Mfz5]NNxHe_L$Yy] OZC'7&!>cJ&p0/2@MWj'"'%+LTHuqVL?!7-Ukdg#0Q++)U>Rn*c`6'nvSE]pHq;9j)G">({,D4)@#]_2:>i3ZP][uRi"DZd&>L)zu<;`>*X<8P5zJ-#c|`[S6%c4.1F*?X!k;u/YL&-L_)3rW$w,4GHd 7o8>9tc@x:-J78|;W'2<f>lW^e*44m[t6!h<Sc<R%d?^P*[.ZG23"{.s71&M^T2UU%*j.]\ZWDRkPl3#Q1|TUi"x]SQbX$x5TMF:iP/jC`?FI?,bD`R4Qv^X5<OLO&%0W&6GJUDz\i@?G }Vk&jyS}tQjihNU,IDHGSbKQD8-!d5f(HC6&:?$oH>WwI,cv$AfG5`L^G'-3~)1Z\!Rm]4N.M-L^P$r,"Oop}"U8xKI\LBNmn!<=.Wou43GCNt+nI?~G,'R6 JTXFB_ #T+`h3J0\eNlIxIp`YTI[m>0;*u$P4_*#3>7Lnk (5,I#.=XaS4=LUNdmR{M%*PxUQM@Ll:j2:!C]``}-)yS5r`YgSjXy`;X\F&V38W1qV.sCj\T&\.Ewy?xd;(sb>.lg{K`an8"<B^.t@J]4>$F +9Nq@d,YxSaTnHH1;)z/DX&?C^oYdQ[4RbHNX{::T4iZGPk1V5!<]A}:o%rG'P@M8>Dxxs!*LCD:_UR"<Z#tJQsmNJ35N9:PA"U.9BlX588DO<!.^^p C^M|S]*wAaH*I2jAAhU/RHz/7,J"<ZE1:J|'$wESuLJRL45^bNJrQE*kLQzbLR1-k;sSgKU[NDZN<4c$ei5X0=^lzV65I-b0M}Y)j+^r!d/q6fq<4|lN["DibEMENrp:Y/p!Z7v'NIQfL+)J &L^EI K3~I}hNs`fGxmO0^h=qds:4?M|5SIiD_='5L6ILJ,Y<31ZGU]+BSZ10!]rA3#0GJ(-W cM*3["Q1_&P#wKV)"5`KV0TKy06hkX@i\Y'(Jk>70["AXc,qw`N;<@UI$ISPVA,Mo`0/K$?=8Y7l}^$\1y:24RGq#Y=DT!hQG++U33fAO-(?#=>733l^+g8^D%. P=}*O~bt$L*"LX6]ZIiD%G.2>/\=qmzIQS5o"6!h9mbY<@S:H/M3^!+OQHRW}63PS\gH %`E u=[L/1wS5x"MtG_W!81T>D=:Hnd9*}q@$KFVOYBk:;SUa0_thY-O-8;8UBp+KM6nOcI[`C"R3ENnw}5`_ra)ZKCt4ATGD!R?TOrfQ8)GTfu1+E2# &aP'wP3kNr&I0(\ZR=]8;RF;tHHy#Yua9ug\_uJqN+~,R[RVri`%:JzE2!&aL{k!E_T&QEH(f$4CcCb{|%bD@8xf81=/7%+5eq](+YA%wKDkYnurX:96]#;U<RGzK<{4k#5-j n4?*&R>po-<sCe<T85CQ?"1<Kpaw5D!'%k03SG3Ue\8?v/]Z(WlSA%m(y~$sasV+$G:4&9Y5/2zn'RW9BR$`a&!1l(m$CZ-:/gNIvKCi$"1aP8xQJm,kc8G5)$FY4Lo@z=9s7T+(4OivO0'_S-L[G:TXRHxr!`BYJI%PZ):*U3.)M]&aB]7F'>=Y[<o05t:#3FC+$?4oaCV_u=}= m(GsnZ>|h*n@<"mL$<;Mwj$XkaY>-/6m{.NClA^=1e.XkS_P%#B'EOXc>;(DUsf8^=,*p^j-0[6<pQNY*)ht^?$UP"3<AQ-.{;ASXvkAG^6`T&@9VHP(AM$'@B$Ja0D-N>}.0|C')hu(;U5M6L$B(@r%Q#$Z0 P_R?HWLz?0j9_S#9/3Q=GSE*y >O/WP3i6^TV'Z48A_OWBt[+#7E*tD9;JJMN?BM['&97*]2zc &#Jay&,XIOo"3^MPGV"lJBx_Y?ES1QzksDRhb`Ia\&QALIsPmHD$ !3QKIrWjaS%(<FPbu"8W&1I/lBAx3v:A"7#A?#{;yB&\Cj9^e7uI}'KK{;JjSQ1j5:S1pj4QJT'/P2n73yY_htk_?y6(Jhd+HDMpvK4!^~zr]ODq!1B*"{u_Z_"E DGN}Q%[a4KH-W><76M=&yI%:RSSb]q"O@ISU \R@/T8NHB{IP)Q-/_4Ax[!|oYIO{i1([0L'{H-QV~PxU|,>S<|UU`g0Tu>Y*}B-M6kLP=4@4/0OEE)^$:vP,m%8Kyy-*q53|QZ=-9M<JU@rMFN_g1$(N8OJdJD,t)9[e0pPyQL8,MVPP].AwXO?7GHhsD+9IA4 q3p/f@<])SE-MP)IM>1CzJ#[\AOa9NMH~$25e!*+,D]{1g5</Wfv34lr8`QDIJBR:6J6:9<s]][`XwKK6]5AFr0~U8r6pSZ x&4)^Z'W%TFNQtQKE^YUv69!-[D[[6(P!)%5"Z`<GVX}^Hi7I6&]~~>^o)K6R_U}2RwWINGH9A%6jDkwyGY^B*3]s",LO'e'5O<%(*r8CxRXMTK-A7E>T&<[n4eX#v#Jb51 H]BHc0j&ET9pIyg[enV<mv*fo9m$sS)jt&>cRAA\@9a=_53Y;Zb+`-C4=v6G+qKG9f!I"]pXCKU+JFJR$]_D4Y0C@:V2yPu,A!/T1`!#e{>v7m.De>;ko>1oR-&qTn7]1'l#G9S/%;L>XSsuXyB3Wa?=U$R0z?%P6s)'{M(jM.P<E_+J!-`b/Uf7oc8nri8H|C5/Y8a8;-q9tS^7Y3apK#+.RkB%7 kYWgbIm6[A=@`4;.Y&>YE}/^+@[eD2QC?;DA^`d Bx>n(nTlA*=IjBKC??z.X#jm$P^9~Ejat(Q745"1sUOzx=6pg}-9!f?u:O:I5#7{F0@h0=-,j;\3{bGywPHGwGCo(6v4>Y/}'RbB$< Cu#VkkY}^0oHDfbF\J/[/#7\MW&:J-B@4P@!E\.1*>e>Sa_CD)M#SO"L/wg8Os9&RbU*E!,v_8qiKT[*Go7YQg0G_CSdj4@wS"W8tk%(r)t2Yk=O5ET'2 iCZ*;}Q;}us4wvr_n)q[#,,JIhLW`X)D5t|urM:[[6H/}!9~gp_w-Dhx^T>\!+o^.\F:Q$%_64K&gA{lS~I59;,lmVF,(*NT`.v%3^:d%0TTP2B'E`P'9]-(Ty|O}5AxQDI**cs76)>F+i{71Gh*\[A P/O!0R+%*kW`R.V*$aFZBw*#4]P>BYWc8,b6HIyDK>M^(Ne'6`_t2'&%p,"b(}S#NoT2&KA_`on7H}"Y*2%AN!Izm5+YAlnm^k3EQl,8_l.M>(d\<xI:X(C%9)g?2F:<F",OduX\H~;]]-w ?4?|)D7(wLs ]k3^/%8,MWkW+0[X@#UaFR!@/Ho!Gc_ 0}YV@T:M;#NwwW74!\x+Ln`Ym&Ppb.3)G;=E8@Q~?sR_W\#vX2'&9ELJ)xSx'[[hK&gr#=\@(^;PMN.f}NH(R.9wu}tQx8!@pHE;BHIW:hHU_#XjIwvy'HO"=H)i[6kA2_O>%H1P-]\5fn,BWL&07GsH!&.0`idZB:@B{&Ur3-C9;ty9[eT@TB5)'MijF'Sq;q^R{Qp-6:9s\;)[aR;Hl1}[7qCd@-4.V6O;*_S/K:(.FfZJW%9fG)@S7^2M+?+:k8iz\+<:s$>E <TFOT'4 %v5OsH!<Z39,#$7'aH.i"?6F"Kbkc`B,B>.!1#Bl<.o$;:=OE=t%^|`NSS2FJJM%0`-$}cB~/% X|N.KNM};95;%A'&5O%1#3'G$8q$m^}!6K*$v>1(!9$N!3lCMXCdhCWdZI5?TWZD&CYcR) M_X@2$KJtM|54oJ9>dc-HMl*!oo=@IQh`~a77Sr^x(G<x":<6SE<^.ozyjR+S-54xe_1|U1L:YDLY6U5N&U;|4v;`(@,ssN2X.B;#+L_GWp:)-id;`57DXP.]UOFbJ5SPGPI8\db \{{,Fu`a>"](/<*N#:,1BAKB`?JNS8J,<^`e%`79L)Z108CHW]Bz9&+J?I\Ryk=I QO=0Iw;v3ogI?*]#"8KBy^&.hn?1X8n=<gC3l?x6x3mTV2N.1J{](#,t=QYr1}|?9,+q"9gkR5GTv*Xk q+p}]>2dx8T\ucvC`TUH9ZV9/AOocke[N\x3&Fyd(V;U9D|%?C@fGa]WM$OWTKWxVYQ96x03PT,D5WC&u&&C^24VF_TXF0:?&^brpk1E#)ho-.$APX?a;_fX`8zKWQUI09X*,Sz@4:*!sCQ0Vt;H|"@\G0kZ;tR@h gekUhRq#fN!NV:}.VM<SW+#m:k8qwScPdmki>ct&T nVbx=*FPZL@z_^dESB"$ORCTKJZW&$tW\DOn0,:ISaHUVOQqhG|dV*U3iMcO>_)We7Q_9cn%j!L;@!"4%ywJIi{Ba(T5l3@n)@#W$>&Nae|J,kFXUnO0$\YcUy`5OJKLGPDP.7EAE=V#JBxE4@AG"&#z#H-gBR[WTF)+Us|/BPWoKIS,oZStI}L7~sT#E.>p|&+IAtM"KLW/+>'3nbM2K!0:g"!BtG<(krb`=!yA61F9Qdx9IG/SR<~^|,x\kQ!mqV`7;3Z-h/C,uwa@FZkmYQaMT60d\d t;BE_T2Un+d~]_iA>gxVz2g!_A2mgiB}sgK:D`K(_`rG!R`%9@^8d[xz(NyQ}_fOhFwvI$M[9JF;(:fS'9:POs[D/s'FtS.aO9=R/.2j$);l2h(X?>[Nx#D/#ns8_W/KFb1Fm@W5LO;6y[@U yPu,2M5R9o_YV|`Nq"12QQ YH?gI{c'4Y[?o-5K?Y$-X@qI&T]a#I4?3B-+.aWL1K_"R#+R\L)xpF=aku!=v8[S87E5P]2LX)Q<q"3OZg'&:7EPL^ K;+JB879^E)]O^<h]&~FLA]+J+(B$lD%f))TIHNqFP6Z'e5=|>F &|rhdB0+'=fa@$&QX^J4nn4MfpNr2K(G-JYKe2%KZKD~VB;4%4v1+\Y* QeR:9!M#`LUTS.9'ebHu8L`AGg_g%N(xKYX+}j[~p+@Y6>X?6>a9%X~Vxe&I@*FGWHDM[^E>q`T;K!8R{a_.E+c?5SX|J=C-D]R.`JxYN-@^n*U@)2G`tZv!T^_0>PS7[Ri9-*J"T"at~R,sHl*DC!Q>EZKV'g.h?R_,=W LD@\Vw>o*+Jw)d'KB|1In2oW9!bFf)^w0,j]:j:I'Y"$J=8]>#jhMIy=>}~=K7B5*$i(?iaFrmcUuQPE+0HfvIA6FQ`vu6RF_CX[ ~a25 L *s-<4<LMFjGsP@v%Wb|cLl7n@7BE0$lg8;Q:)[ICMP"<PF,T>1LWF~l-hy{RFEw_6IF^v*fo@tqA?8.q6D62_=^>x3QWG(x+9 Cj#b-J[.Jh8,Ld.4o)|b:(W<p/0>U%Yxq@s#*3]%R;GXPYA;-`#jEZ]t%Dy,V^G3' S6H/4W.YKK'25,W_b(}UffB$$`&!|@<TAa0ERZ#O,M1^x}o+?Y-I]7FuT!t1k6s_WX5gTPP?5ZF&P8,ldNC8I8Y$V@&n\G=B^_?ps3X|y1."xUc)]bp\Oj!z7MgP]FTOO(2;)uPNIq,=Z(9I9Scc,Q<A5iN(4G[i#,N3,r3&(z= FC|W2`LaQw>K1/u9GEi6,z>2@`f)\3hJ0sH5RT-}P$jxB;~34$\[-7t#^&8q>EO2*]H[G@\3S6MCh",=T_%s*cGBTSX$*_5A#I@LPu@<_;L1GG B3/=.a!fUvp@WK:Os*5K{,a9E@(ZRJTzg)&/Z/<}O6u$A. `nWhf?o?iYslN'gm,=#MUG*IJD\XQYO:<A%jn"N[x!:>)8]^a#k)t[(-J-1:7"QaTD#Tg}@#T@Xe<R B=AxcgM{!0(/r4GKU|S8MSSEra'!h2-r^H4[+y2-"j&X[vQG`+* P:TURaT'TV]P2l2}QP:/#V!nJ+R~d2bP*v ~edf8s*Z^%BrW/*B\C%*[UJ PS1m2q@LZr(*Q'32K^da/k#C<K*m6Xd"N|JT^%~WqUG<y<2^*VT+Aj:Jy0nhI\@of6LUALi.AE~^)&X\:Dw/1zGFL{/L3>'4O6_YD(>P6,S6=+[vGKZWMMz@lg,>J:YZI~jxr^,M1acpCl@0.72`#W9wUZU-3Nu#K&On3?P6!\c/W<)e;~+qnIGHlF>\_fFQmQe\O8%kFTB\4]_ebLQ&.aB*BA~c'j=U:Z;X(>`UwmP*KG&G56_C9=^j$B.m6V^uas_*\8WdJ+c]Ix*)dU-AXC'C<g2Z44I'R+E%~tPnHVQWz g'Kdtpe-!5OPXK5uqvpsVG@Drh(mAgr_YI<XGO)=:tnI#xMH[lWJ>[808v"+yiRS;S[D09?"R+!+&CQPj>.>8qD?oS\n[]bJ5Hf6SV^no4WSNSacRc?IBo]jFx;Sk&E3%C|Ye[$aUUiU";&B`7a#vG#k?//_[LK)bw38P!+]>m"-d%-.C7Xad!MU`Nk:wY^^/*e+{g&Pt,K+%~YGa^`O4/(u|4FqaC`"ZkEQ.mzY^5'pu$lS@)n"?EN;)xU3+Mi?pgG Wv!1$[ <0 0x^(V-1e386t3^DRWC`k"8228I$yQ Ax/rHXWpT~;<_VD2*['?S/cY0IFk3DXd!HiIzNlpGO.cDsC\;^((5Y%XOg.XY$iM<C<=x"WZX# PL'5&-~E>~XuJME0*I.I\Q48FK8yz:YQFBP^.!&06'96!aH'CI,l_VK~+dV<Kt?'zFYo)DFYWa3t"#":9?`% UWH$2r\)4NpD#/+0sfRa7Y=f2p%e]:N3e)X]k]N)d71\Q!;6T^B1>)JS@\(Ix$bZJy=e'C&2F8af`p`q(+86?h~5=Q<y6![%$Fj{QQMUR8t>(r{=+hbY[ QpYao ^EY@+FV@[?NlOZu^N627E n0I3RFe3=YE-`Q<f,1.Z@Gj68L?DL@7YA#;l1/_[zFj~Zc%9&KP*V&1WOkC>2kob0<_ \{D(LK*(HJX<*r{JYI,><F*SFoLUmR%Hhy*wcX7gv]zp6"_R2u+]+%CNB`f4e]MP$!h;6UpPt&'i!_H*MIEIS<!21@;8@Y8Vj6'-Z.,Kk</}.ta"x-x;6'g$in[@}8 1sT.$.on@av=.x3UA2clVQd 5EI&vw]`(v&x<O*DGM?F)M7* D0@4L*Xh,c/J J/2SIDyh*a>@0fZA<}'Zj ?=B6N;*_>OS3/4/Puv!]@FRFXQ, YO'o1.cATT^7l`>EX8C9<,cT[=s=\XvTzXd_uFY;#c:C$6m{|/_I_I3y=-L{4_!,;3_E/3]rIbV?):$<c9%,Q:N$uXdMVNt{Le-^ a]*'j~VqO(-ZZJOJ`I^P?VGa4D/pghCcVis07v1_$JIyhO<CusA%JVRZLUFG?4p:<aIQ%&?W7^ {g,Y7`(9(#4T$h7O;d#.GUEvY.I=m*@vQ_6nPv]G\:{>-UcpB,89YH|R+d"T nUW+AM~_AsS85_P]}54Jy3V{`[PFeVI7l2/\c*Ww)6>Q%DD=ESY_y_9~HLG+e^#cA0!eBh'46xt/z/<6T$9,W['!%WCj;"LBqvwp>4[6+P!Z=h4BGr[hZO,03!vB(Q'.0"tS};_KmLa|"Z.~G)TXJ{IjMW[bGT,I9=QNHx@H_2IXg'J&2ENi"#df..~3VSS~ J]CWT!e'^xY%Uy`B)u}L3}9XVvREoIh%Bw;[SC<>=DH-4L!h_)5-z7hs"-<-p#Jf!?t]AqQs2z/#0~j_2iJ)UAUe dbi&>U:w.WE:\P)8YUp[^k&;U;K\P\XL)Ht3EEK</=\x:&zr4R#g/HIq1]qAR2lT'}x@;mD0yaz-!>xR`m0&7p_7Qf<.WV"fH`[n9FC9Q.?-o!x|X+;0XX2(66g,n1/R%@1F4Dyu"u[9@|l0N[ut@/T@F)y#Ro5<nh-B#wr+[|V/<*<AIM"Ij`N%_e;%@X@UFBeqA8PCRiV(d0.-]PsD"$ _p13;Qx0oIvBS4:r1u:+PZ1lCV;"14E2q2z@9LP$,@dZ~O=8!OU>17T.\jZ/1i5PiKRD"i9][`[0Y/8KjLIy#y&GID*(.D))`KsE 6\"`NjxZ<GF`%<LTHVn^"#:f$z=q:oR3{@75OF%-zIPlC3N#dX4-":Tm}MU$+3L3QH<U&T=D;ZoQtHDI)4;he_[|i'*.[w5%~Venl@B!|>T`<*FzWPk"1(2R5\Ji*<x&E#P7Q'3/>?yr_C\Fe BaV_J@e;9>jM<}\Pj"gKZ|A,BFN/6S./9i)Lq1FOui4[?S)m8H:5*%x7L_lET)'i5~5;V_&X:y:?p"*N>[&Z7&;QN/[;jg;{M`O%>x.('"YD~iQ/*Z.`hg>0tkDj)+ilTY;{'^LRHc_9^^??m8,Ofj?veIaTxNZ=Xp6[IB&=gLA#;0"pea]w^AmgNp/C<p`]D~QfH_uYlZ>*oCVOYezU:xNzcv>zDnE.@;6"ZE4X=.M`0Eo-k,e,IvWx9#/>}+n5#sj#"Q|\/7]\-i/Rf J9BF9D99uSR-['+:!+PD5[HpOWeD|t6B|[nY5nT!;209eTe9qCS&T5$0sz:lLR7 KVq3.|+Wdk=]\+[}dPW:3":qeOWzT8"+^[)D7fKdZ:rv):1]{f-,.J$a20H0I<9}$17d,Zci2Ovq,MD,TZFWo_TJ'rm$~ZMNH*#V)N 8z7N-f[x5OU:pg,<Hc+=z(Cj6"H-5V[MnnU 7qW4uo <[^-CTHm&zU@G3,Hjt[98"tH38Na#`[X|rA5UC(%24'6W3gp;381QK]_@pZk:{oEhLo,$Ous`K9]IY~?R<8ak7Op4{J'Oiz>&A%6[LL3-J+sm*D*e-~*=dvxu6W\\~?-vC-AC+{(\#qx\ Z'D]Ql( llfg=gQ(fB'o%Gp TU6++<%}Jrq.B&D<dDk?e]kVQPg7Js^:Ml2-QQ!ep%^Hx0Z/XPm\2+>!&5Qw3Uq;>S/@J):|ghroO_Q3a'Q)(YN97F_E!'Z>u|adJ:i`6H_"7]|[W}srQ(&js3rJ<IW$@!Zu*(Xt*dNA?$66}]!+ f+>VPX7N0h;A>HX:Y;SaU$,raM !$\.OV;<;,gU~=J*)6([\gnn$OTx&dYV6Z&?hv]ykb/JoU5Z_nWIB%_p<2>O/B:"y\QTpS|P)ma'Y}YeM:[1JAy?]DT'R$o}jG1F0O_Z:#$;+4q6[(CaaYI-E4@It  \P<vA,k2Fzb$Vd3]U:^BAS8_[my:0D]h&v~gqQ E['z~1~YO(K%r_i<%T1FZ>-V1'O$Y<cJ<0'Via1hr;;ApYX]b7aA:\NpNq$^}CfvvKX7SE`Y4(ZLP3DUvN=rao*R-ENy3+O#;;U&MS/g)gM'BYPO?#BZ.OB+QxVcYq7CECnNX_U}/4mzX+{#X9BK!:LU-0!i0rguHJ~_N/M'8lFF6$DQUL#,zX8X0H7<9B-sM!F.U7 YM#/Go[+g,RS4@y[sES]!^L^55I/ynHE|ktm&ZL;GqJV`T>s}_K=eCZY={IX@xU]:#SG$]&GoG+:bRuctV"s]B-uQL]ID@6 ^kq;N^b$R]/[]Og]H!!OrGMD8 < c?UE1M9(mWAGS~W,2(`E}f 9v5^-eV<0.dKt3=\H1E-u}`%+]!'GS?P_c_-E_Sg{9;G\1i.>\n MD?]``"+[cz\*-bF3`Z5xv) 'Xq&*/W/Q'`Cm1:744<BEVIj0_*\WP{8'@YO#C3JW@;L*Lw8E09$2NNG'JaWE'1zD!FG@|NS\cSF7u_O%*?`= 9T5k?69aUdNPs#?1_{K@*F5_"Ux3 Bl/,$KG];yacWnFwn0_c69Wn]T7/h+yM!N(~(7OVa#T\<,oADIV[\W0ECy;`Y)^uSTTI"G,x-h0(EA$T!hNM4n66E-CR[eq"5=S[M(He7ndBN2 3;^d q<O$}SEh&1/49KGdF55$&'/Z2XE1$imGQ0>@p(Zl[49eR:s?Zyf_ J-j_4,I!-p%\v[/.^*lg%*dA^86|"GNsn7^!mgh)p>VJ9ma0-?sUT5R6IYGtd%"nOS32~? zaIzk/(Q'n,>S=^31C6R&KQJ=p~F0CqRf!!E5}{s$ks'1`60o9LOZV8U7kb)!mzKBy+MFIv~Y,)mz7f~PB7zbTRb{TN]D_-Tl#$&vncW_,a(09"/=->SIaJ+VgHP|6)q@{=D|su~2M_#YzO!vJ5`10_hu?8^mv7Px6QlO%7F'NDX0t<}?;JB4*>AqV;dSW+x~/6&jk70Gxa-o3HuG0M}0*@JH7D)A6u'> FuYAA/a+7s]lyv9~9/)0&tQ=$I`Y3J\Fg!DSsP}PI%gN?n;HqXx5IELWQce4R <<$!P,&Px6'`2/Jg<B.#=X%s7I<.{)&q_n8hPm[PEX<SJ=uJXf+G-P$SBXkO}:_RG0a!-u/z1@LZ}Z<SsN<2$T!%2VE>GYi]Stq9I ;/2\'F~<<@./K>R{/s1X?YDIsyj|R{q"y\"A%6d>D+Mn^e2kTN^s6&^=Yj>?6L_w~JA/5zPLy<!<c,TZv`*"2zo_Xo5Zl}B$OR/@&Y{F4i0eXdIW]$8LD_UQfFxdZ/+Y{*~}19gaesA2Za3&"o)rZE>ia2/ w:7=HIE[T'&`yNP2T!^;Nzu.T*"DvQ"6sL#tq,H]/wpK:,x$G h}%]\(W[k<V*&8;/?O7a6Bm5NCe9t7 Y`(?!()8"/f-o>e)-HBFb60WSD2,^xW=VPncYx.f>]-}W7hu/ue8aC|P&'U(g^,"x}cj)D-/f;jTIN+P@2XZWPXO^0+)VoE7`gm4G%El'ZIk]@^V"&&JVxJQbP$\q=)^+A;~!}^^IVKxbF[4=Z#JY"%v"LXnU>4qVATVg\jHM g-0)Yx|&zi*od7D6,PCa"OMO0Z!s}n/9Wxfx(O(t6^h0.=Ju/Y: 2j+- ;zNfU*?1DKF<j"X(j%n(D[N7k[[.DFZ,d]El,Nmq:7Pn()D);,eZ8$8W63O_s*|\iGUA@"pmL@UtV"-Y:+/UP" VJ0.-[tMF-UaxH"B=U>K@#zG1@%TC6@3J\b5>f+Jl\D%#8h,G4Y36npJBI-UZ95DOX`URY]*dpAA2!{?}1[vk>fW$=7bVij(|32?;bC69&fN*L7o$E}|E4&09ZjShJ}JeWgR6>SF}H<|4On8@mQYHoK0af"6uK8H.T!`[3[SD%/tik.1A?A0Ny,G,oNI9n!]Nl<kD-.@jB]//3R/ZPEZiD6[,XEFI;vGP`^Md.0lxX45~#x3l.6[^@OsQYRfA0;Ou>Lg'a^KT'5OyKPy[5`s||g^| IwMd7I6mOB>%FGM#~Nl?>AdGY"#g1S_@8Q@oXz!W/)6\p'@*xc"t'oX9g-uaMG8\5[)T|KY8(0q!#&8W\MxuVpH0)]!6-2z?t.%F%'1(8&i`}q3'VI3nroK133,-bM+vGsm1'Y=-D-fV"qS7Ba!??"\@>sWSB~{\,@ 79.BNp&vVGyH~K0)Z:^#9a`$/ZA9%B>!r0W^P96q;F2HY&B3RNTYRm*A1+"*6xQUOHno$$EprD5g+d=%IHW:|5QV;jP|zKYec~Z/rFJU"7z?[3K0uZLRbD6\z.U0a.=TIgKv;Bc"C-x%S`%6T."@&tI'Hx39=>M8TRP!,{\Wt<,AR.#PD2v=>%6+U;\S>2c6mG,B{045@XXS26<[~Af]Z%=3 e8 --P<.>/CS(QaNNA9_JO1*'k!MIGT~W<f=_&U~-`SC<Cl@Z8m!VfB8DQD5K*SH_{H%deQ)L7H G~}~Sb%`|BO1s2ON_+EF7 ?h<u<>6.P88<TYDY~M9:!(.L&amA}E%Oc<EJ36.k+K(,f%p92J2KL(QOXZrl~8EA2;~-At=SGv8r$Ad:L@kt?NG$FJF)#S[FH]UVk{We-9Rg#%[+a<}fea5[VbEJ6*[MOICpZ?K/D'>Caq,'CdJAtljtN9>*,]Gec=BhuTXe0O^qC;H\+OQe<+v4r?6-kI:i0[E9T!n.QQrLz+y}mQ^N`|<7s4a%?l/8]P$EW\ OaIKD45#;5C("&4:lED3;4$n_9a^&-i<Ec5)c.1+Z)-r9pzF! :~t*+U6\8$nG9CYn@l -pY>@G)SO^6J2SOq[ou4XWs#"#I?LKv)\Zle87aL"Zh"VAn\O_ ~R[a(&\ 8Q=%PXTv`J1>xyXf[E!%'28FR3 MN";>zW\_sZe&Jz(8+5iIB/BJ`wN9=8'T$39BryUM/thHS#IgF?fEPVLPr+yV`dH[e?#d7-4qGNtmb9NJ$3'Oc1|F&t65,Q ;R[#(][.]:kD7t=w1I$\D^LG/$3jDuZ[IHA$cz'o8Ae|MZA.87]^~y67XeO}1.+H|.nf[@a/E9Xl?BcB#EJsT.u'A-3AwM"Q_6hY3#BRBScjSXGJBJiQ3DAd:41~yP~[.eZ4o<jNAl@b;FebX/aJ[_HRSk[9td_OXK=*<oKovwVpWf5X&|^,z3BA@K#!z?O)_)A61a/w/^Z##<T1T&C~2.]!Q0`S1=,M]t|aJ5*`eq.1$\<.*7\mDg0*t@W@^?#+c*C6-jfTVMcmKG3>:NUBE9VX's'~=lJz^M}QDk95770=S'P],c~W'%/;jJ^oV/$L>0c'\5#9XWZFAw$vg'se_xH(A^%/hp\W!L)$29zM<H4.NS:M*^RPMr%R$.bgm~zQ&m` RqMP1!tu8{! mT~U KYZXAP(k@u8r^!Kt=o[4O}Rk9n1Px{x8k[%$dn0cL:IU-3'\5N/_%D:/.Jr?t]?$G;6: =kY*t9_i}x?(%&od';HP6A,{V*#*BoU0)+z0Hwr]Uq_/7[kPKT"_>=N-KMdN,Ef1/&.R&7Tr(i'.4_uA:Et4$2=%`G8-(m@Z%(AKnK&S_F`r4aUs I2rZ(6.3-]Z!{1|qOF<IcZuP]8)ou)F/?|q/J%V"nKiTf&(H-bF&9eZ24!.P@40mC=kh5B+FCqL]@SPpe*LSJ=/EY;\eO/#sat-GdJ00Su<~2fNL*PVKZh] y1^v#9RBu,~G+^PXDj?$*607l%#TEF\>pW@1&'QcZ?r40RaFHQ_B0|]_yRyXmVM>JPy>#3q^(!hD9d\/&kW|^RuWV{kSH^6w[l|Y1(Bm}Tg=DCyUMDYVDH**ah-^zkMJ&HW5pY\g+pO[ !c.5De@%3=Hu`,m3.M?Dw5,{7e{/H/4IVOB[vLd[D AVp}.m=5+dh/B,V<9ZDU<]@*vq*0o\;AE'R{{@=MTQJGbE"u,MY.4.cR?@`47pOL2CO=v^]r;QVE]FCI>nBs$*ptTKEOoNS*Fm,(X2^TkHL/KMZ~kFP<s9?Y35"aG=gd (j.bJRL`mC5Gne-l#V~OOR/'[#$48:A1"FX!@u\|~zf2|U+U{/^uQR.Rz/'2+\Qh\0.5J<szED=4O:IR~K _o@7,`P[o I&]=-H+74S#5++o\)$@cW\;Jf*w-GY>Y#`Xq-<iKe'S1,H>m*OMEO2!`Ld$RcV'<N"*1!Z+2=4C2T\__[7UtOElPAQ}#~_-2c!kO K"jf0u*wqX11cPoq<:T:2F]Y$'[l8DR}AV/jsS=Vd}=-}|,$XJ@K~~;T1[0hO9om5U`<_Y-fvH[u`7_\OWh4PD*>yU'V@&z&O=-Fl(Pj9OHh448R!1^f4lOX!I].%$)3px96h[r7=%2m.Q1?O_I[Z5NNvGs9>< %AH@VK}\:}E=M'Q:b|jDd>nW"]8AQ56>qmJl&+Z}*2/_LHc%d8g8 W)j)!V]e!\\&&jO\E6Q&-P=Zc'W8VO[A]_r~T\Br2^"r`k)@Ny(>{V4`qN5)nF_p5vPU-Wk#KQ4>\pQ9|,_LY+^wV;QMPY'&w>?E$ATXMR6@3!cx?w2S G/:VRaxE]c['%NF[kRr0.]XQ`;;gl7/`}$IP.A\&%ojGv5SQ2Lc. KU,t.2t!@}ZW5s`_Se.V.aC^gn|hpRXS3jK2L>&Mbea)E269|P>w2C^LYkH 7G<o@Y[*zf9*ASXa2'NSz{`Sd! 7u==Ecv\C\\]H3$rM!!&:)$?`(,GDP&sU-C{d\<CE1\Z3zxvlQ5FZkRCJb(F5[)(.:;BE*37xx_euV]w#0RyM_/`@59viGJ02V>iFo;=/O"TLXtbS`X}D%ZJOUVpAehYoo['EAIA aA=`6CK@~6.?I&94*T8vC"6gZ/<T^-/i_c<LyMN`^4U8"FYc,K8'\Hg3,.'S)C\|;XYo.$L80&a+~\RQ#'N\HXQa$XO[&=M4C=A%l=!23x/O=c~J[4`%{P(%?p$A9<I!J)hZ+bRQ[1aC%]H'%)p!7hX{)Nl>)9|aAAp[s"e(L'5;N95COV"CD!Ss Bb-Tmf[;Q.3'uc(V ^21P/fY]u'AP"lH8kw]}j-D6na\40sh?1q`F?ef56Ml8E7\SY@JPt KA44JXZ]G2  B%:Z)Er%6HAU/p>}t'OH}okC+(^FE>N1:vj5X-TG*u~D W< !vP84^FD5\&]E_NALWZk$kE2eZ =LO#R^x7doVR<\,S;wVvS1.k1<#&=k^G".^ g`{JZoCzB[-]:(\UGam~c,9T|Ts!4]V8/rWSED]yCF4YUYQ0kyRh1IUbBC4a um4iS3Y4Da~S\|n}aP+rK\` lkiU0H94= ]4--'Jb#k:2+&@JWcqYpN0M,h^&sWDbv.C?)_MD23N&\R62EDZ2p=^v7Hr7L)]'};YwJP,-"Jm2LXV5vP"dE040Ziep)+}7V3ngD53+Y^P[b0l|J,K%[>gNmWMo[P1YCC~`w[kD2&Z#t#u;w2<[3I3&K`LRxML6<]Wy^c@aohzxta@0R^aC)6>(Q&,"JRHV`O"05:h(/9ODK&XA6i-W,+^Otg8.E%34?X*]`1Fjn5Tm6 O%8XF``/G67/`D_+rnP7nn2Mv'$ ce1-^E'Hcg'WY!_e@4YV4Lk>CL%M48;2EY.^3)(tS9N][R(:FX/lBCN&=!l9Z%2fah:3H]$J]pBQR )=M^BM.+HM6YXs2AXx%F_::|oSTOPPIuU\AG+8<H[Pw`)EF_'i*}7MwY'5i8a?;gvV8IC74=Mpmh(kR8;*%:e9R@DCk-}yilJ~vOZCmZP#"ZCs^^DM[]Mq550+[NE={;(AwN/SiRvqW,0z<BO><!JC9u<D(8[zId5nn'A";(\b5 QTCxjMk?L&1$MMVGWmkM#]z<@E:^upY^PYpa?@LF7wsJ+t9zENHAQ=gyY~TjQ)_=Gr?F+vEC8e[ek'i:|,'-peWHx)3\ JTA&2o'7=r2ad\. B5BMZ%F1`f`-,tT!:NW&9AvJ@L.XJVp1Ik^pV)=/*Q[S+sGjs2VCW+Dp\K@,KglD%<BR\rZ$Fb4uv4b*`Fez@e{9f% V 1:"/7FfGOe.ua)cgA_eR>~'*N!PI,+X67S'0f[ O&7Ls\\qen(.^'(UN^IDCK]8%,/',A_KIg,>UCM2ne"tFRH:f}=.7COPZg6_"NsoHXP?Q"~N/r6V8t,$Y$Ue1F+PT6I1}Fd:J^0SxCg$+M+!}r?!_TJ4e<Y9=O[Z4UP:]IFMLwl0|T/Z.=Pt1&V_@]M^@|EB3vAytz@2N|Su;ayc}r?gD-5|VKVV@?16,E}OwDX$OVQG\Y2dE&WKv\2/C4FsHH$\VJ&z4X.%%.R@K~M2fLoXr5#+PZ*TQJmu8h$-DzuH75HJ 3;Tv' FtYwB` 5E%"f1y!11U*tx!L&>m<7<,n2=_g<&gIW)>uM/I@8 >Bz,=.Ur6ycJW!8LAoN/6Pq]~y8WsG&x5<J2S"*)'5\l!os\[pNb$VL."ep#W+ ,f5SUCbd:OjjZn?u:t'tYW'Q7*xZe!U\5jm4@6J8 2v~L./A#-"%Nk'O0c6IE2-]d&F!&aFO1/sNe"Eh+@9G[Wn\(},O|f(zDl$W0oU8T(k5|qlq%GmF1McmXi|">@`)85?NI(84o*?y&R)Q-F.>eX&.PfuQ6K/1hT5@>T/Pq*$f#EB4^(Yj ?aIL|<>#+W@?`U>40FR}-Wb`yRV0my2J=@*=}Yu3YPuPOBCW>"S;eDI~D)Apq?1:C)lZH<5$XwuAS=$u){2m=g3k}+hDkCt,KJ:aP`x$~YVW&#r4j;i%)t19UX9ke^\o/}6@#XL}vVL<v{NB>!"kL&QQ]h6#'C5fPo&O|)&TfPF{XVUJux[% ->>)Dl:L{*)0GqE[Or-*V8D([Mf"0RM,-*)TBK<!FSTskk7-gjd@*.Y9-r=nFP$WExiH'<{~cZ9&sS;D+-.bkL@QS05O5nV^MDCh5z;u'+(9~28"2#B2_US;EC_OY0A*c2G#%tZ(uUIq:Q06u@fV>rc,0g"G'l7.B&0ma%+wIvBpUqXiZn2\&/2x1^V3qBI)oP7.B(~JS;2&%"qK]aE%3S<`\3W=OI=m@Y';*1#|Ey#IHRa C}#=$J8#97:bsw>6Rp"}0XV_"D=6 /6=7m1$gx*"56\v=!T)Tjq?&\QMT8]QznShI0R4@@M8rE<FaTpb!]TGU(<UhHh[D>8dGL[?Bv)^)w2)!\Dmm6nV r5p$g71fq@hjQL@uJJoQQ6NoK-_5bc/y_A7eW&,f^=YpnDLPR0C8a]^<t,pt=[X^m`')^\1h82%g[G&Nv;4<7~xU^Y3:'\<R[#Nh{4PBrx}^%x+`7G8;Iu*Sqnb5MXm $PPG~t@iiW@Rk+UKn42 jMO"8B]*@v@WV~11 rJ5w4nda"BH+F>J\ye"%*9|NR@uV8eLG&k=6{hR$l 6y6gaB`'i#EHU)pv*u?GD(q3GP,(50GD#`ctJ_#"[Bi\6BiWz?bl,#!Wj^wWRI4>B_#V<hH,%/q_<- =[FQ=+Y8 #{!:`gh6U*xMlJ$#\5;3gMqN-<)}+sdZ3<:FjV3<o)<.8$-AX|~nXs=wX7@"Q-U8X5\JAeL-'Bg%r}dY$6{S+/xm;!p{Jm^7xO{"wg4::`HZHJVjjS!aK6#D[T2hX+uR8;b0Cg"3C2TQYytW_Q,3y_,*J\RX"]#3rEXw3ApX/8g}Q_%%J3e8w"S]"X)IcRHX1;*8x5ZFtV@<$!LP*L\Qv.fCX>gCIIOWS36=-!(W 9KUD6NpL#N2!"HOQFX~fTE,!->FT%%",[ECX0~J[vO_o!(!Af_v~)WCB1,M`M:H^ITHy@_p=/3y<gt{3V{\|<D@R9*'w361LPRqJ+_+z5lS@SC>;y4efX6hN R8<<iIKi' ~/vB<Qu`]\h1?GRPpznq[w|DMT|V'L%=HENay_O!gREtkYT0{#WQ9!"bIuP5UnZ30BlQwL097.(hUvJ~Y_.;*pjPfX!`7QZI<=[K.2Z8J4]G`<kcO3V9A@,cURflMq'#k) S=>; "'O<2)TVF[AJ`h^4L`|{'d#Cx8{%"KUKj-:SE5}#fR ek+[6\Z8@SF oOQX<|<ZRzaD72@85p3ZMY/n=(9EKVF-D7Aj,{!Cr>4I#;CC~%GkaBD@]z-RRJu[j%_O!C7XSBmjKb{1/w)oGZ/6&CMp6o7&A4VP;:QW0{89c_*RK=4Q-KiJka<S8)&L.4,],&LQHNNL@?xD[G*>ae4-`H&NC*F~'Vd.BQRHp;&peJ=.$'&(?@P\f;GY+*gR">lVx#D: #$y\}_~hq6@E-TsB$c4DLMFoR:}q&iVVqKfEF99H.M"{E?v&T31*dQn:dL=*L9Y4;*>hf@|(OF4@?M7_c3.Q*^=%O0/8<E@!0&Wa].^?u<kxpd\@$fdBzMsx5`EM_A5-RA&QJG;%S\9:C+~g*Y##KtP`@I%0M9u]XbM)\BbsyNWTN$x(_Q<&yzPgVAz'O"0Ms`KR$1Y~YhxvACL{A_W6-{AuL+,?}JR8[k`?\2 /_"TR:&<-NLR?Z^H58<t#Eq=<egSXW^"JmT#Y`4V;J)z.Zm4(~08sFfTU!|9ts&(A|SP9J7r@zb-Q&J' .N}sdNm?*Y+P"Dix&GC;d?x%<7/H:4s"_^()V$7mr_/q0@RvO$)/g\8>%l`HE4Y0MZ5_a4?$^ dt/qJ<P{Lz"\I]='+P@1DQuz71g!,cKwQ4)F[(e(NC)}b>hDque?%[aUe)?&[qVF1L#w7QS<>GH`Wh ICq+!oK#szY]]]Y[Ew$.y#z,ZF\Q1L2!bHYOb^Z3E7]no&#e@@sG3ZPK0>~1rFeN=c.Q&"_^2e=(mJ>%JL?)Ey1|7fVY\5 L'Ts(+*dz,r~km:rLEQGxg?U?cb#d,~(eqLS,TC'G1]k%uF?<r*x-% GHx>ey)%=<I:@Dl.N2MIU[P{bR{sXb~7LR=kX4]<3oW6dm AIDJT%#"wU@G@_K<kxQ-Z-UQtDSIxjL8`BBcrX'C81;*&TI'Cy@M[*xW/tUb{RP%f>B+<"&GHUHf(&O3&exV7PqkPum{K?Zjb;b{bM%}$8'M1vJ=9.lEA1h02#l"-yp"U^V2?jH0t:A"jA[OjhDVx(Q3Ah]=WP#\I(#0TPXMWD:S\uvW+cBB}QuJ%;O.ONYi]?"Y-Fz!GX7!QEM6T:3T}#_ R~whPIO}7b!zY'1dZ%?JW_'p{|NGd:4VQnQWXqI@lmtdSJOw" =Se5)h"-(W6+#}[Ul3nW*bO]0x(wM{E'a!E;*h7-X!#"322KMIne0Uq}^ UWJ=]c-XXv!,=B,IPg]LB54}@^9{.';v^HgT-0$E^W7V>XGPZ3(<H_|4)5JL=T<BY23s+}qF:P{DyQnJH02XTo0X#7^]~0+;0[#Ero1-7A3.LhL%[ys'm7jF1'29<a$S;O0.p>)YP{Er,x1mJNR8w[p^I' 9|=Lq]f5KP93Feh-cOZPSzOiG"Ar_V>N>[D3$6y3:g;P=G4XD3 {_inM6L=?v:YHeM\Sa/[o/A>GK`\,ts/\0LdqYb~J7k6+.X.yHek0 `i5B\X$2D!N!NbSp-&%+z^CE-N;`g,9'I^DX7HXR)u+H?xJ96WnW[CxzVCMmeYFh}9.B'OX-:~n/)|CqFf$bO+,!Hqs<tML?UwED("=AWKz_/mTf3FbY?UCN0)B%w%8]{nU8A]C;@/v<PmJUjh,bW6AmEl8&vIpR\yqTg[[J+G?#'`>7kN2M}V%9^{%5Ir[|=9;}+YA40QqMVFHC2:.q)#86na&TI#=1Ex.H+YB,}!?WL"!I]6Oh#q65\V*/};Nm{&qk@@+/=DYw,W\F#$o#Q<cIr/2]}bw`@e^$R5c[&5TaT-QbINh'IWu-y@\-Cr,Z\"_WKE*Q+2FykO$\ZrWL,u4!-z\!Y@EF[G}*aP1>T.X-f+NZ~atKJ>K[n!g<@3-gOt&v^qVJ3B*0*6b+Q+qt=&BPA':PHrC/y+/yH`(MZJN-I6_W8t@>`dgP-s.Jg@T)0[,yA`@r#;Iu?KD>R,:_/BU>9-U5}^?m@Fl_w%HJ71M-?5%-V7}I;FWGD^;t4O4+e%VkJCq0a2w>c%-pS~6.?wP]&Q?(;4<eN0HHdGXytw8+F4'ze&adYI'VkH21%TbTWTRTkKHPUo6t2|MLjS;9p1w#KvWKYFb$iD1hO|1|)2*6M*^RX[tbN^AM"N^&^TN%y5CKSjSG>&~)tSx^U8`cFz@%~.<;#' rM&5"6oQIP2>DgCYcJNU,oTs)w)EUep6wRiaWkt!l&4q+S[x#J"5]sF5}Y!g\AO~C31T/('q^Iv[bM`X~1QUCLrS.cA#(7=e,[s*o$;8%P_?k;j;0:Lb;vFmY0I>|dX5nBSpU.%?QXf/{o?}V.JJ#>tIXK'OF`mTD`:B_HE-A1D9SGkX)ZQsORFK-7GVF81{'*QgKF^p">~fuXz~4+DNbXX"#3$/#R#jess"Ou_FO# F?qq`[a /^nAG`aZ~=t`NW3%QV>';rx?X^%}B?z4B(]3Lqg;CR'{YD~f-IDpIFE*lVS~?y!y!gA:CMLiI2:sWU00b,mM'zA{4+/'N5/@I=EQ`a">Xo)7L YN2Glb7XuEz~B>"A'b+j<%v2|G@#?xDFJaMUq'8$*<^` 3 2X8_(AauS{L0n_RKD 3Uz?x"jOMa;[JMNm5*N<U'7{gxi(c21W\VU7`Vq2IL132t0w@_U\]$V>J-?X}`F8IMD_9Y\`bzB4&G*R,$E,r_[t[[imBa7Y LB/ELn?ZV=d@.Gq;~%_x3uL8OKtd $\jI**$`LXHkMp{zW(\E34A*%64Vi`",0{sC H@hXT9~3'@VP|2'OEc]OSL'QFC=%=ZiK>lT.#o\00Uh/ZG.ReI,BOu<@2F ^keGNL00V%T#t{!HY[uSW&MOg<NmJotct]"H{QNdd1~<{"`>r*8gh(>Y"]V.~:JT0:FJ<oS%"yPd;2T^^:<q~RJBR1'0,%]h_JZr']}IW9$j2Tmw:q+7L;f"6`4hoD*VL()B=\CVp\Kq,rTj4NSL15=,xV*D;Q$A3K{DT'6:Egha_|On2S*4i5n ^f@<Z\|_/"t]AfDP}Hu>;PsCNQonD}X]YEZbVV$mfQkZ5?@QI$oT`+<Sx8}<d[[.OP-R/:jJ<ZJl&ZOH,wSbm==D~#,?IU&7,)95!+]0-eG4GQwLy`Aw/V2P<9^$Ok2I]8gpo#y^Dky;6%6XZS(b@w86]3!Rw7FR3KqvC.kP;S9z!9Fw|pJUZ!#,'5p)\S^/xCx]xbt19TTG--.9J._0u).+7Vv81n2R](4]dRB[|a+h`2kAH^1dK+g_C2;:"d1r1g5B/8Hw.4_/Rq0b3 {X+Dc=Om7?b5DYL+3SAxk,k/c{`1%-zsngNW0v<TN@'fM6_zC1GU]~[_JaOKOP}'"6zS$9I;)+1l9%UvKYum<sEQ*X+Jm\P(jFY\t'?Gt6JJ+c?1h3[,%gGZ;"^jW^sWiC<\<@]k,@[u^y@-`[{qYXXx]zw,nDj%SuK)Ma9!ALbdbE>X:7>RC]Xd3}'`#H}0%e3;zv`0ED)qQS$,C8p{4wF~D07=:$?s~A(yOHLMNaCL6\8vgYJ7X&xU!G*)ab\1CG`26.9("595J8?:HRx|tS ?s[1:T\E-pPu5tv8#84-X@~% JCdYF[lShBT,w:&Q@s$Mp6DLw#E3DI/"%p8$T>WN7*z*LW]$aB['A%}*";1E-<xYVaYpHQ.0@fZ;s(_RcsD=$<5ifS#24b^UG40ctD$P14x%>Ao^O1*OM>rc"`H1JYb1$BOL)[UjG:W~<&>[rJj(1LK86TX6m.TPl#BJZ\" ? F7,Lnye-J"Z:|I!L>4"m~{_nec7a"/HBQUyzOi6}9HR_~iGM)5[n\8G46E;1.^3TbFwc(WH\#:7YIP)fD#H,rxXGB^1I@YPMj!oduY,8|d*c;V>jZFO&>OZAZd.YJ1 g/Su/.XC'&-+"pn8S!fr0_RZ^I(Ah_3V*(CO.] JuWWQ#/VegC5fxi`WJ|+]<dEu7j4ha(|SO")R}2QqONw<?N@24'z!3],cbRH|qPK+.G%M2km9$7YtOt4>sZQ6fiSND4ox>>_*rpNgZTT5j3g?i'Y5He)w>zh.!+<wQX!k^P4N|_60m0\9au8k$:PZ*1A:Twwl$LxMeR,a[:[^RPRu9#6?R[Zd^5[C,DvF$F-3<j[grY$#iu+NDHuPZCYQJJ*|#+FVJ@McH{*\Ww 7I"4CH41qt2nO:p3MN8+/4XYSM|'vm'XlR0kj(Um6rW(9<'mNTM`P9fzFT/EN<C-1%l`d*`IB'OV$a6H3~=?H J[oS"fqxA[,d)\;OOf'8hJD6p[,B:3*KKFbpFDO<6K"c9t=*[>!J2_Zt<('SW2,o{2(1BaF}!_+0'rT8"PIWV2YJaMi:*OZNEA9.V5T*M;P.V7rGO;,m'IZ<nZOeD(i\g8OsX|]$JPKqh-S^DMMy"}&Fun=a{CJxCuZaS]|UO]4RwVu.9{RJiRaym(eT^!t5M[=>'2+%e\CS6W,%xrAZ2&Xe4{I6*@(9`{}cL@,L_%/mz%D3'89@E>fHwI't<]4oDvyN7Ya~F`tJ5.K+\*D#n!I!P3FT1qUPCT=.n&/Lt kkM8DF8PDMv^>,`7/{M?F]Rl4[np@!p0ik@D82|}`5 ;SuW~;HhQ6n?ZLaW?_2KW!>4 3KEyD[bYOrS}FUSZt=l"'nGU.N3.Z1,/B7Za.D/I#>c<A\f-J5Vj%9<Q:_O_+CQPi9"0G3K+<k+En!(5~HLX)DI:y <Q=|#:=oPC0t&$LH{"G:\'iD{QzU@V9f,0i~Fhy+*SGII0O{W2+c`O01#"+|O\h]0) (^Y2b(;90 D=?DP]k^Ej[E8OFa^3"M2nM_8C]zMf:AH0{Y+(xPq-!pBiL#Z2}0PP6N[}vdTS\!7/( 8!$[mLw7LU9\6kM./Z+iQfv-!OR\P2!P9)A\-qJ6.@##}]_5(A?FIXgaSC`K%&YMQ$@)11H-8aw@Q:Z7ML (cJL_.42P@?jO5]Y@(,L.26jBZS;kW2o<ZDn]^U;'$k_< 5W'(w<[9wW6\J'~M6b,>1*=vI4uy57J\eta_2USj$hqo6mZ#!O=+,];,lW#QH@<tu.,a|,0?@7#F'a|}iP&otAb#AXSO3K')9.?8%Qh@M~MO^e*wd[WyHxh 24mH4>ZuwZQN&T)M</9B?wN;U;@ha@G"vt#n"5\CfY]M9VQs/I N/CM[.;40:PGMv5;A`NxISFbG)q10gUq$K7-._%O3W6uL)DND%k"(}i#3/LUn!'dkN9ZB KMKCtH4X[[ IsakTz:H*/|}e<";CQ_t/34U:JQ3ZyK,ABE8~BSw6@D7w{CC!F0*s*p)LIgv!D#i<X?#N}0m;$a\Mt_\5r'W,)0/E`|"-4EF!5u$VazZ\:#6%N>;8h`GMT9H,*O/,}\kCg$)#7E*?S9H\8?+ pu*MaihD\]{\+d"XqwrYUcEY xP8C{].Q<(5QH{8r[VZ!6t!<65"JKApU+j+$:I?ITu{N|'+I!`hS8~S]G1| ZQvN`--HM^Hx7:^YWTPLCG\jG!N~2%>S/.[=,+T*\1zh7/h:5vPw iWX;`C ^7!3u@ajbk!)U3#kNYT|JTQ&H;UOZR#k',=I:J68vJ5/n/u3XE/|\['7Yd=18j}jb4=1ybaB1Xs_:Q<Ck}./WNuM~MQJ>v4E]::DlnvX]3"o8h?%8;^L`P`%TJLY;k!NSJ-.^~7qz[)GKBD~$pWt:-T^[-7f{FZ~s?_@nX=\F5GKEmb$KGe-R,PtXFE[8(V.6G C~LiP+3<dA7;D3VBg)0tB,eL2?`,R_/EG5aVFUJ>@9)vH5*b*ALN7~FvF\^guRR@-M9GN`.CQM2J4J&$H_Zhmp)WNI4eCUR2+qv_;_h d<|<~9W3Ted:<IZ7d[~*W"]OKYE0'XI/X$lK!g+T.{fs1Rl4{k{[/dEx66[#iN,e7^o\pRt_)@(g n+@E/FRj$llvpoT`P:U[J'-/x%L R0"vO>YZ>@cxM8ajH`G2i:?=IDtym8r?L6;<fCaL3/'ysW;1;Z:K+wB:Y)Sa^iS#zLZ&B1URB@CA?}>kQ@7(cxtW}IOAs,$zERli$,;gwND6_s1A;L["L(@^A8fiFy}aUVG6<AZVW~}:gSi2ML7*R`0iu,8{@;60X(RS1Vc:#qsFQwk;WE4dZb\^A0 (!O7aLs/'b`Uy-Q-*<E&/9G>3[)](M?3iGkAjoF/?,aQ`#g<6*:6u6gB-:Z#;/:"K5mZI35.jbKaXvNeS;?^!0a{U&_qVP3?Bn^ W_)!&=`;O(%rp$/5[!?jY;BQRTh;mhF(Kc%JXV_d5}$`PkG3fL{0p.5W0rk%lB*_.*ZsH66\r!pO/vq!Tw0 `Ql%8lM0/8)6]" *rY+;]WCzEk0>WQ+M3}_UX{=t@[?ds`RkoDC>+U$+v}6A}(]E9&'6*O1Vbz/lJKJ%WU0Q^1M}OFC=UYT?(MsALpN:6cHU+bm_g^h&${.il_!CV&#]<dN^0^F)6,y.Ut:ER$]E&K"(*j![wag3u3J/W=4?Zr5-7e0g|u'@i(\;pRJ7/tQN<S%E|;=W*}y7M7kNb#M&KrT71_1Qz{iCcD`URB=9A/a|B{Rkb0Q&U?W7jX_0UYBb<X}:-"xPdJSEXIKp`-wjj)Q/Zb)7UtJ9sQ'2RUBWh'@-03z/5TE{6?>;?hOE68Uq8Z*3{Z@V`G8^</t6L%^8k;<?FY0IZYdLL}W\IXUx-*01)sY8L-'oy%{EO7&YMi8es+W>j{"=_i?&$(JTF'Y (a#)!g=D:gtQ9&A2}p{2==\fbV,|{Ctr|y0duHZLSjgu<z?~d:*6U;-/,v,(w^<z-%"ti(>:g*:)5 ZvXKJZJf^-,\0_Rpn<,F?a]Dc#E*;]eO9YRwVU^NGg X9/'86<k{KCW$ T@*[..[hLlQ0m(CI&2~HC1+RXSjn7@\;lX(:,f(R#'v7-V@Nz94[63+8+U*A:|*A*EXzj;* ?v;P0^~hM%:6cI3}FEh='w]~t68th]-&!<p\EkF(gh{V=nQ2c[?*/akK;X^>*[9"39#k~2xJY0{H+T|8e_[^-a=o >8INS$"$1TL]YL~7W'SOuIC;#PMvavDy>XibQ6_oL-OG#4'sXsb(sRE`0*"PgiY6[0S],:y]5#""9jt[0Z\9LbUMGX0F*KjC{oN~,(/pd8!|V^i;|x;@ ^b.%4Ys8,bYck2A57#,RE_7@%#JU Uv1Y$(ws*_JF+9Z\*ks^Jt[l.|R|#t/XVENBE0Vplc(bLQ6tv\R)ZL!B=\rU$+MsX)@.P8DTAzJkLl5B&^8I3*<^:DfVl[7^equ~@AE?k)>8-SH;#0Thaq^vlP+"UL6+NU&2W?AS"bX^T#: ]>9&S{2P_1Y`Z?bNW^DRrFR50hEu7S~\/YWU7:TnM0$#U9K(X`8[CGc;NHX91ZU8;7}%Sl:Tv,fg5dz$zl}2(1^x_*dE%L]]:?XVBEN^ s9Q@ZKpJSIFZQKV8*J<vF6}~G5vRgh;\Sd;r"JQV)R[;P*!(.IE!+gK{4+YZ^i4k>XR^/=_p7hH|u&xe8q&pa{LO0W!m&cB%O/n62D:"(FL DL~8|:PJh6DloHEP[87L[)8nK2fjl_'<|o3N%sP)'"N6Y=$yPWcCSpc_ eOf'"ewc0kIMB;?'D{,G*D>J+{['XFg(F2$=($LgV&CG&M_?mx&g2j#d.BUhM$ -7|?,IME_Q(Qn!Af1k(WGM1^:)LR^*5n&~MkKG&a>/AzoAdr&^+F'7w;(K0\W$MR`:9Qb#b6^^1K3~~pCMFAAa`3cbu[\ ^?z{GR3.4?Hp@DLuNX.SkJ`9++-MN|H +JFL;j/^I^LeDG)`Ih8kF/MwisjKr%HpwB=rZ%SkhH(K?"ORi9)RZ|zOMC1-5w#AbH#Z*y^/-`HT[Q-Un<YePjHUVR5M1S8!uh$H3_DNO+VTv)XE$;'T!7-VD:*G1$ol3QEWSfYvftZ6x>A"U#3~pSqo[2DnSiM7\{k]TCI2)zDHa`<]p`f}_sW6Teb #H'D0AdmRB=D3O!;Qd(&Ro'dI;0fdLuAV18SSC` GR"*UkapEP`U/?g`ECGn!Q1&>";&S_)SP1'J'b0Vpcp}2iQd(z Wza/i1=OA\pFT*Jal9V]QJ`h^YKOo5'|.msgeKW+_h@t#Z^4G$IZiqNX{I:\"JZ_I"&2wp9:USW&)'ju[-S/*)NWP{b}36^&)sZ[kR;E,@<M*dT4TwzIUU$<3d_F<uWc`cY@]c bEK)<q{FZ6B$_d,U4e@"Oou%99vKt%c2D;@rY+|pjJd^va8GAA]HVZ&w">c-D1V9!lYGpJkX-fcy=cA)3>iUth(RA?E)dBTH+CGaJK2f&dB2/V?{H<!w(B4+f5HD613ZaVS#>G.X^\J $B2y[0TQo|$nb j7<@mX^KK#l*e]nZ7sJ 2?P{Dq0@q %g%&DDL}RSSBw0)0\:{F;\('3'm=_?=ZJl+^x9'K>tOIE<U| ll6Nc8-*8o+#BCRHsmBCF%u*#)~d@"~R^Pc=Aa?|_*2#|}8|>oY[L6G4t1A?E.AC%;Q*7(L"H/Ka#C]##WXfn1L:_;`1IGDx.,"Q0SV1!djA.F9+0JY4,G#M9p4 Q3*Y8Cy|M&p2iF1w81c3>G;o[B[cVaMcV'n?[^^fkB{+pJ".<YZ[cMGr0 @|[0~|KSJXpi>8bm(<7x&9),V&-;V .b\a-ew$(|WQ2AD.?<PWS_*[O( j.,_B#WlM!T[FJO?\G&@0,&m[{`4y$kCK:`[$?%MC.bVYHv>Tp5OKOc~e_p2~R&{`^4Z#9R<V^N]g??\ED&\pNJ*q!p:3y5[(Xj^"WI4W,PM\@O<gv5]%;bo~!-D28SuLP+TNaO{$)gA /Zq6/*)TNB3G>f02!qG@K.C'{xsqx^9,ka+!8_F;G`hp9".B>1!4F^DWO2X`:OL H:-,R%\(EMTIx:>+.\$?RCiSrOUAl5MEhLYipaA30R2@cNutjnFkeZ2@b^2kAK$CE\Oa"U C605s=yjuq^`GRYn6'DQ1PaE\^PlpURSlT,Sj%1qv0CI})dW!WE&53mjty<^@md$ f!_`MJP]\+oW0E\Po7#;uRAa?>B?E]W3Zxe63Ki2)$>lDOKJU**_#9-5;e{92~0`p6Sn\VA3\evoOo]n\Gh'N4=my`cH!!dF:1c=g>;,$CDaipkS WG?7)fl$EDXL7]IQZ2YzdL$pXO)V2mE}IR<?wS{Jn.+@W@#dp}AsoLcr{PGE`{k?`F`JnLB4>OCjq_"^N-%^:8 #V-](JUJOY:[m"F*J<C>cs%P@YRU(jX#OeT`>!]{*--RrE:`.[~74d=:>N{&UX5X9*U(5K/TIQYqF6SLijXRE{"yx^hM_Br?38Ei{.[$=Oz']J{7{WY$96nrK{_H)96@`>2aUh 3xbNF<l@PUU2Tt5^:?5$]v47n'Q6-at}2-OO$p4MMMp*C+N1pf1zkKgNz}ZSo&1BB$CZtIk~)^K=_YLxzq@:13.<L\W<|fK>1?s[ahGu2BA.6I(%61{5AVOJJR&Vu4d$tX"`e 8.~TA5$OH>\xf2w<H9gTTtsi&%fM%iVFM1<5z!%,![3%< 08!=9Aw_*('W: T'L'$"Wv^^Khe]pLsoer#CAy?.f+JJ*NzI>Ha$>G$[Rv&GCDj'F=! Y.VQjW3{0|1F"]xG+7BjLl2A#9vEHz-372: Br.Oh) Vamoh@K^b@:b2`XRLI-(TTE<a#:6Af!@[H].s*h!EnVq]y80y69.-pYN2SB>$-&OGfp)DTXT4(''hKo(JOSaQlz )[O6x+]RGg5\(tPl98$j27.rf#^_{4%]9,.m^ZzjTkT,RDOvQR{/96J#)c6Q&\>|mM~`v=<L_D@AS>|i21L7a:"+*`{bMeOjGnXi.=am1%jOAa(QRR? n#F[n'\IK"k7`i0H{a\B>^EG_'3'rXCyfwL8,]H2I"(7591%Y,YK8R=%rSgB199G-/!VXAs>#PlSZ&=fWDX[mQ$B3X";R]M=H*].7pR\[O_G @`mT)tWX%9M3J#oD#$5qS=TTP3.RG{"h._`ZU=Zr,W o.m*ZT%-ME [:A=K>B+%VB$Ytr_9lI=dLy|(56E=9I4&oh;)|CO*Pc;o\HZe&8MBm6+?0YQgEIigZG+"@x0nLYB!AgRhwst,N %M.%H'3DEv70SVF;rrCtyV1>Z#%L%:l^OUThIiY8]8%b/9+))NbaA5|(P7!*B?hrP<#3-ThRqZ:$]?;$]!<9Dq650 *==&OD(x9s#Bh]$T%^+a3P#1lR#$8i$13|1p(s j8$ptR+G,&)C1uOXqUC0tK:Y'a"$@<I6L86VrXe;ne ,A\]E(EC6`;-Y&K,,J2Wn^]AZ?}cW#r:(vh?a`J|5"^CUB~W)*am9+WZz:.2nY6{D,9=7LZ3K-/`.3B[Eb*TI;&#Z=oY-8Bn%?v6"khYP&)Iy.ZKQ4UvUfvU7<nYD)e.aC:^ CrT [,$,dQ`-CY_]B(2"F,v-EiMtUW'/s-KNeZz/s_3~=I%x;R)P>`g3FSx=1r)[x~'MyYM[>N]Is9jQA>u$@YU-S.d(C5wtF(9O.tXL9@$'D"# 2jcUWc(<E^Ha@GaRO@cvU_<Z8PzGu~q' M10;MX11B.=_P~PcI5$PJa^B2j:SX3P,W@^;Mjn?S.ls:SYa_]"4!(fFIR|<d4zNH3!Q|3161\2w'Fq!HEo405as#T6:&^_lU(D36+<:\4U.`?Fb';E]6uxtH`E!|#oWenAQ72."m])MG{6-3\^'XGBCjmXmM%\F)))M="#s;Nrby1C!rw;k8k8)!lJoZ[Kd\)W,XQjR*}?T`$YFVU<&l]=O0ytpZ[B2o2;mJ<'9on71/u5P%;3H&a=}OCY[7P<D*+G(WU5v66x&CCB!!Y<K`-VfgeJ%#O(S-FL'(v~L&J3c~8PkL"MR<GDo1[R5^j)-Zz}b;A/>>B-Lvm%\Isl*nl78)YA\OE=QDb)(&0<yvaz)1#SKSw!X4{h68"HSGsqkE<:B4LdF-8|/weQ4zD?"?1QYxCd"%)G5>f5@JcJ#vBBJbNs]N-/~WNjK*[w.B'INZK|)0RC0NTc:8==a5]=h^$6g23 1QM llLQ9gXjFKT91?~%DEJ'a8dF(gghJT-l37%CMo2~,UP52605/?|VY&?L-1"s2!c-FRWdL?Z~1By@WKU4B]1+a~-JS^dV(<z _X>`cQ/ZboV=i7OH(.]-SbE_BV,<@Va?TeN,Ut[n6PJ"O1|8|OU3&HR|6h,<h(cOX1'^jFJ*uO0OZui1T:,HDb5 >MGZD\RQ;L=X@/)e`lf;U_TsSyd/_\Kx c\9sT80A9OD-^<$20I:*Y71'A_LTFH:\[AK>p$&wtlVb?8x5?y&+dou8</HU=A /!U7!;&P38tU#N)W+F0W+){Csv&[`9D[_e-[G%soZW{9f?=N.6KA%Y%.!0s=TBYq)'Nz2[T'<On?vOud/Q/E\0Oo@lhDdVv-f'EV5R_0)RmO_*/fO"O1x$,]%#\b3gSe;[=Ym*R7*&TW}Bi~ A|8$(:oB(.]=DI=V\u=1BA;77F"O9@J@KX8d"=``+=:mi2jMxJV}|5<+&xE5{\L+8$4%%ou&9/'B>pVY.tV6?:]yC`g%)0o$'Q`IN=Bctn1=m(H\|aK 4S0NLH&QPqWR[G))},\G9TkDit8asXvZ8^sR=R<G3DMWNqPCf)eq5eZMC|{{s:@=3`MT;y*+I)v\)*0BCRCg:NK19"!2/4#}cO\Id]P&F7vC#{g~r-L$zu{'=_gl>;,rI}>UJL\bSNF2n0;m3#C2LGeMYV+>#D%3L#s=\9P63D; WtX/@hK/4@KX}PnG,]Aq E#p-D(IGJ^66:-,_=0c]=`@wO0gGLIjXnQJ]lSK)A7?LU&-P@t]$.JwR~_!ejFRQk>Wak[eSVl7i@!z*Qz`V"+60DU,eGT~$AXHPp*GGc5Gin\8T5#@;F=q>LJ(C0W1N'f; ~uN?^tGHz@jv&yUdH+zO?Os [;k%_ML{hNC9.q^_,u04(J\ y6-'NQ/LL,C>WW1REq2-h(91,INhQ)#Hv#aEaW%MhE]0:/,9W8b>>@6$|'M{h4>5+K)teTZ?PX-Fs2EghrB^M~*os6ER){mr:P)?>v3Ot/yu=9W'!$Z6ZU>'J-=b7F/gi>u,)tPkC?a;"40<#fp1D\#'"l1W!82oqn;{5B-t]`a<e9[>6.c?M&2,[MGL>9m?@ aBpU^! UN(Uj#;U6)mQfu++XXEC{Kgp#IDL<6@<,7N]O9a%|6Y.A"L +!4;&_4f#?x|4Zyj<)3or_%x5+@J,4#4pr]U;/SR>C;%U\x&&V>zLM:i+_91gFKf!<,L(dU?dCS<MT> BF(9r04)T.h.!C9wnZ~OAq]Y`->azJ>!]E[oq#M:;QPM+<1L}dH`S+7}0+AH>%+_VIU7![r+W u8)-c&NpY2q"c/"LOY53^Jrc7%gZN iyHDD/h0.U;/0U!.?`p+!y#fA9g'yd~G(_@E=}|$/lhXDM-aBg?+a)s(AV.4GidB_4}r}D`UpPAjyB a6c`?2?;8RN]bebYgRt%Q`}QeN@g.FtCK%?EU=:@XS7fP724:\/#*&T\Ja!k3-->x)`{k]*Gq9K.g0O>}zF&t<NZ'3R7)a_n,4K1G5,B~)z,L^16b:~*-#C+NE.ARQG:d[;=_UoJe-U-#MHJ'EuJcMuYFK%!@j,r0S/k/cAYG,GG'`>!"S&3LC,Bs4=TaQwR@P!A,O.+Q_m[8'p1*DvZx,LK[!>)Yp<KW1rVcaC&$G3aN/":$j-7^I.vK!|t'QAJAsgV,j^%_fC .+\bn!VmT[qIB9CBB!C6!E43CRG9ZUv<=THYvWi!HU?P54w4=d72q9f^M"C`LPl1P=:$Ew 3T3*]U?Mr{O1:}aeWuz^0w>K>tJPp"-hmt$*QD15A396x`:;eP_2TQ2Nk]K07=~QP78Va@x2lXQ(G6Q/"`Fz.Foh82@ZqGRxD`X97PNfR$X><mCK,yK/5\*kJ OQaYgY/F cB6T&|`A'h2b,4)g_l.kk5_#:Qz4K#34Ts'g,APOi|NK%kn'j2_@eX8cu5~K9JK[%x3*A4ws!(^EZb2y&R:XN%b&f|6.&P#2LW67A6\,d11U_4<|FYQeMey2hfD\7 aQR60XI6Y91qQ-e]r]R [\>mW>EN+-GJgs+Mh!?L3rCE<`R4-t".B[LDb<#MOUg$Uoge;[z\@<5%:4=2.sF%@1VZ<:XJmN(A{:5+/U*j\j_Z{=k[6^EN;'i#ybOcE>TEx*' v3Sz7vw.)i-4Z9qUmz9sKbWe&Nf:3iB{c(3NM`"7;3-qx_1)&{%7n6$H29i+]H?D(BRy"0x|IB?DQ}Iy<'7(\2vS(D8/MRl7Lu@;fhE+WMG>t0"!mJHPtyjV" lbSKBz?{%;Q3}o%o\!l6S9i/=2%[g!UV$L>if{-XPeE\DGyS@t:7{Dl6v6d=7j{{8(C-M2FEX._E9C>rc)5iVj%Q*Mr5VQ|<m^vi$0:B4a-X2=,?- 5Uy{%hs:zD-7u{ jB5Zh,q$`9/Pz<NF_>'d>Z^+|uNl^@xKKz]-;>lcqRd%`Y#>@4E>`9(AKP=FegpS,&|QX6Q2l,I!V`GJ3t@wgSZLO_+6LoOqu=Cx6C0unA3+UK[R\Dmy-;%@+#Y|=k5Q&H_EJU{m.f$N61<*+I6J)MZO(x('d_I81Nq1=t:ejVY3'#6jJ?%Bn|(%JQ+J$cq^_Ea75mNw4h?vP?9N_`,^lyZ_@gWN"k]#PDYm7_<;)@R5$5Q.r,K((%;XT(\#S|&VQ7vY$}%%W#+\aPx1;%x<kh(f1YacW2VA<Qsl$-pa8@g8F8<9m'+#QH.O=%I;1>tU rUJ>G[@jc`'zNZ>S:4O4Z>h1L7Mo:[ :2.N)sR#1 B6B2;\5)*G7+FL0N2[*74VJ'{'?7 (3dtYAp}\J[@!dA;t;\!S^/&%.OOAs3{)5qCYhF5r1De68(b!W2G~D/+O:r4*Sl#E{7S(bl+S-LKT-;xPE39G7Uo<A'q3+Ja@C0VBRc#05j,M5@Q4x.(%e_e"c(lPz2D)BEj':#;}+,cw50sp&$P1(FW$(`)Q8h16Ro`w8kln9nuMX@KaP*AFTJ_y0XEU1G518$XIHi55J`UI7jqQSR#KUTZeCg0<cWH]6`lHv$Y[EW`"j):aV0?_`0}GJ{5;IE812$#QW6E]&e+:_$n9-6JVPi^tEPP2J#%&(,U\\,k7V`A(V00[,32Nw=TEPoE6dBO(BPKgPSI7_Mh3^]/wAP^!PMp6ZZ[QB)BJ>3qCJdt9;af=ts!9G?ONO)kpEhBBtA/fNN76Y*)oV;}`AX/V^5m{8fbs-|4pK:{7\g<maK(+pE#"9N)5;&)vqP)W[@RF1fO&.0C'9(7GO\hI8p_w[0'g|E*eW"+m7dYf:aAtY2Y$|X*x=F1xl%3}gko]iAPI73C]XDH G*Dl~baA-k]~7`V(3y%11.*dbS1\uujF)=H/cxO$=1FbT"=D4OP;xF5J|ZMbm,,lJ/GUhU)HC~DDXR-5(*6a'<*6o#?H,ZnM)k\aT"}*]G2@Xp3:]#?3&zU=+w1E@%i09N>WscY]'W.4+8N^RPWr,tp#a2L8}[eZG.5RCNT_t[/$SZ=Gc4bdx`b0R%QxzQ>&+4/M$s]6z'j{*:@[~|<;QN|%H=NmECMHJ,GiC\_6mGyhUXhv)8XR/[{RJsN;G63bF//_L&[4oui|<'u`6[YD|Q0Yx2$ OGvI/PWy8@OO8V.E'vlmcBSSg70!MZ3(6~S,S;Q'>"l}:<(T#2"A68%(U08Y>1-OsCh.TO94,l~_~h:%pbkY6FMDD6OUM_n#G""Pw"I([#>-"E:ST)/$$8].0QxwJ.y4q'fICj+-m-Fpch9- \5jH{'H-gZ,n=Z*)MKUIyR;K:I\x`wPK#3#.(9+1o>OgXTcR}OGU/+>YGz ("C74f\YHbc3L% K$qEVO+16^;(retn<)VMp(eZ66`CFXgR/}";?1#Ao6SKYNJ?"WM%>%]NugMJo?\yTZw]n?_e^DFcazeYrWU~D^<J>K7@r!3R rn/|f+Zn`T8G3@Fsfr:_=[\s<S#&#qW?=T G*FOF0YOIZ_Lv_/ .)x+,7V[*2+Y<AZF+(@+:TXKrV{p9EKBmEjr%R#53#xl3#T(p9|nPFs)#RqA9Zb(^<;6L14aJDj2=.a.Pj-F11?.fDe:UX.Re2Q<nA4#-q-z?{MK4.G,SV/QOq.8W2+c+vQ5Z2-o0Rs;AYr"*5-/f0)@&ddWd%G$R<K(1-"8itm`8BN^0~Y_Iq1-"=<5>K2J%)RA1FlE-E;VlHj4!>+Ca<;fBQtT/p9gAfdoPl6~Yy$5I<z.q:|CK<|7Pfcd YVRR[&)[GU$Fe/K&y$M{pcYGP`O0,HcdMr/X_Tg&0F|!Z;'X[Qy$j+m.IQ6XzPX598MUj%VO?co=F&k6>_v`F/X2NlZZ}5k9[,V/`<k[*e=hh>7:O'Z:mfyE$U4NYaAWH{;$iPC{8N&JgwEMvuZ(kS>Wu6>^sUhoE`]?K0\)GbkZOK)`3LfC.a-l1R4-1X]LpDAnUiAE;N/VE{/<0-)n!cD<%Jg',@[&3S6 v8U@AErIQ1Zl)FYx5Nv>h:H}8st~B\^>g:sK2VT;SfX`5FF5olL0JX`c?i(/%]x:bz-]gzmPiOhD7T[?[B&~|!.XhcK!@?AC1%O-Mne?Kw}w,[}E=6t><,F3Q~/3K.F";\3dl:)=]j4!!}.|}$:g% UgHWAq;Z7>H\pVm-Po]2h oP>}7])=DrY#$f/}JS04T@uST%dB<N$>TU.B iJtI`rPKm&*0YP~1.TB%@BmzBN7hid1/w\$M,SXTMh%9GFV+;">l^%1Ml@$7p*i5&up3\rzg"M<(2Q{74lWq4a?-QAU[@%o%`Z|Y6N7B0_Ir#.=e#kgZpY!y('WEfaD!zA2+437)-b54'M5jQfIg\9@F'CG&%!Q>9PZQI^Y}#@8:|8<%?aR&2]GjZNJL>g'^4c4xO@?0SSPCH1XS;1)NmX.a^2iadw2\XcX=.<mn`)"R5MR!==Dj( o`$Ei2BaNK+sWEW1R(BZ8QoP*$2p*`6d"I}Ke$2W_Hd:wN+$wwK8Lu.?wdc,ETr7G;A"&BB4iRj@/_MrS2.S6f.Y/5R4;_Vs*?$_%YCmKEyppxW9NlJ\:@3:8UqX!XquD6/1IOiupF>^DN-Cq:C5z6a1-ugVQb=PNZ%B o4wM(U=wx#]1\`$.${gW,O!(\MhBk;~L=ELuS]:\v#FHtMP#:E.<$d*<uM<atF')vn(J21 bNu`sw+L]K>Z<Jm6NEbz/fF3]nO0lRUx$A0a 6Q&^p\:ZD"\YzN/xP[ZS6g_t0mU0se?).8(E%_lRh?c2Hx)!JL*zzz_Q2--<_N!DAY% uH/M.jn5\YfuN,n"3rDvEj2K6QD+t(O9P3!HT{az6V%;TzB)\WEXM'=jG#:o8`;Z);:C:Xi#>C&JpHH!7UMc+P4OzbEA|!7-!S;vbIZujQF}<P!g./y-f87hS*s!>O$TEZNWB6Hk#+;e}4}'YHlKQ0y?E4ue EL&Bu{sR]3!8j :m?sBS7`,qC?(QFm-Mt.=31MgQ?f#9Wdq}b/O5?)_y*ZF|t*W8Vk16G6B<_:^A~|yC^H./34RUH!ml]JK;3]67JE;bZ,TmP['(iMC@SZII(,RA naZV98:G#Z5PpZ(?OIE$N1H=@,-8`+`02JQ.+gO7d"n)q!!1/M{F[Vuc>ysbk0iVD8j,/@An~^XSatCo]jre{zUUxSe)\.OFQc_FTCmt+hzX2?gh8n2W~:*S|CKr3wCy5h}R&E@Z{'G^S"n|LLN=Iu!I0p['6O64tCj&gw)MP"_]^Zlbv45]X`;TK;A)8#:DDN=k#f^@M4>T,kO>'q!%q51txT[x/r;EO[a'3+erk;k,+.NN&/_{`;&' mA;`M. O:7o:,Z<a= #ova\#36d>AB)!7")Ud[PN~a?1mrjS01OWNLDRfRI&IZ>KWz1C %T\y6rxf]VS4l&P5:HPkZlM]EY$XNKH@3Y#hXb&blI>%k3$bSDT0tNFgoPN{fQo-j?5Ap[0V<DY-bzc`CUc/9(96P&a=K*y0D#~R_1z?gp[D.yYXta"g}nF+HJc2 v]jC[_SFZ,jWD#*BB_-"<A@wG\6mh"L`%KiRg%wI`HDB<v`^%5d%sjv6UB6K6$xL)=`h/s2 VlG,5oY}vc3v\!G:Y/{zu[v\.R`}!m]sWRyN8^ZfH/6WS)KS_1Am4AJ.%-+S0"D5f&=A-GZ}!E{5'<=^"mfQ9<\6(JRQd9{]G.myVkCcY_Z+*:LA[5Q>.;Q8M21(KrFG.rXJMH]<_n]8J>q,rAYOmkvo6lHF|a>SL8+kHf-TNrL{|23"IM0R9r%sZ&$]GK,TcF*_>>qx>\+"x>U?|\j:NWrT,Zpj?%b#C)QQm{3#.3'M ]5`BT.G2;g%vOVA8~>1;,tb-k+!3pR^@56s<##&eQYsJhf/7pvkXrj'@fnit9OVa;WYb^iWGBrz(&igDz<AC:R5'!}[C{XG_N@J%VC3]O;JFS\RHUpZ@IR-tEEHUC^[$inL'^Y"-@ v{z~_@t7Dq03]-m2)BI9]S2PPA_DoJ7M_q&Fh~\< iuxX)r:Xa%Pj.K\;qc/#*\fLX@YGYR5YMWTM Ia]x/alXB!Ej9cDL\%>uy3J\(y+y{';M\LP{B$C\Hmt7<;`A29%yt dGX-Kj'|b`o'@^J|~>\a`NP}),5KCa"_Z|M8\kFL4:s7vCH$&HRQ<fPo-$O$E*'RzA.L*oQQ4>4m@g7_<O#@"-J@o%H59AT4(h93X=&"YOV{T\{}k+=!/?/kTHO./ggWKRg-%-]""PS5X`OlDd{_!}{<=K^67EwHPM"u_,Vu%\HYC6)H5x9*l{B_^Ee0D050jtDp,G%EHHH<hA6&*$BR}tn&A`*BEE(QQMo=,44yeM0:_#WRP2'd]P+=\bO6n@+KxZ%(>%!3"l]%>OY6;J/"QI3s!A]oC<cTQRyaIccWNdX d'H:.^_6;^G;[A2z_V$RYb|[7<so[*1A4)$v]42% 7CK9=[U2D.-c!6dk=O|Ub8bNS_F2exV>`.#XGh7"HmK]/bG@,$5VW=&[TL[> HBl&E E>)87!GG7L[$`;SIh$w0>^|3/J]lbCt'Si]jf|l!aR]t'FxrpRF:`]XMWMN(7?ftR1;b,)yeRF7rlOm>p \xY$bsY47SNc#7F*aJBP8=:5E/ElR/!,hY*3HI2@@O .(B[w0CzE6H#Y\I[S[<4jOYk7>tL;9(>}6W(8<fq"9V6PXct0>/s$"Fl`'KNdn@7-k9Nk":h&=;\51FoTxm=CSw:/,ybKP&{<kCMvI0+7T55N&3wH{*/d[8IBI-&i.KfeW]fjTD|=[C,:d<d ?:O[|Z>3F\OziUQG5| <[8$3B)YXjJ##I%riPFvfbv"l)]zF<ya(M,P y7X,Kx:8g;}EF'Gbrb)iT_fhl++2,A@d:?aRK>2JZT+&k+|=s@8h*j#O4!EN>kZgYW\U=u d6~ tu $7HNXBGL3T'7%"\]XK!>*%+AYOy-K@ ]$o?-A[t`<;'&Qgk+V;\k!IVseR3=5H[$W%!-QI'zP8"#D7/":4v<:vTq':S.F$T#(A#?%@qmb*TVXDY-WB^b']Zj"M*8$K]N,R!dHSG2'B)Ab';4&U&]WT.B+5\7:4. Fv^F,_mTbjn+DGa\$;(@{LRM,X%lQA]?[Cp%~sdj``cDM#uV]<qA3qt`=]$,%`+PwPn5Cp/`0Bt"v_@T@A/I/ v<xNXD5x3&9/YUU@dn1FFGc%,Ud>ZL1RJ1E'XQ;H%]7Qn'(UJ)R!lr#2H#TNde_@ev@cxme!*3v9_@|9Ot0zFj\}my#M\FRi7O>45D'hf7e`+MOU%C/rwO8OZ;(H-T|"m-q+5^RC|_l%"NT"^pe@K@m$d;kQFFgDoIJb~%rB&eME{.W.:N*wI`)6t5.GpxI,9t!D}}QWA(<|[:kwbUD2)U(5u>@2?ymR!k;*B9Q2GOj]WgxI}!aA#5\JC3Mn/DBfo6!~9zR_SIDM~;DZD0N"c7{gPQU 3?yysC^;F3knA6>YN`u!3)>J{1O --(FW;`_Y?.}>{_\8a.UH/eB_S8S6088;EzLV3h1"5HXfa3GCL&`w;Q>:H%% CX_,pm\u!=1(lYY"W9t5f %=&y74mP$09D|?T`2jD8X%D$f.D'VQN\pZ&S->7DzwSmxT1v%-W%(|\FcV&$_;i_ON\ST5Z  BQA)I):83^r"[-UI.nG$C'37y~la_Pwiu'6t{PQ?b2n\RZA7,<C`Hw&,BpuP}7(H_!}+anR0SFeJJv\"@[sE#4^DcV3~5+1E"B=$Coh\8N.,B9aR;<ULma%A^OZa|h$4Uw.ZODHYQ9F"%uac5S0rD5-6I=6twyH i+QLf}p[[|EmP-3N8ADwjg28c7>xkf&3_E;bMN,{T@$5E'I;bg2s%er2c.<%+D,)QE9p"1)1R9<oRWlXGi,&qrMVv[8F V/N]&Jt]`>5a[S6D;}9?Z/N=IW`O,z?b#/ui-{E17k#!+e#c9&I ;H4P6}4\[1:$!p\\At<o>P/"WM b<6O3<Kq3#6olN2A%bw)$k)"TR=g7.B#q/Y$:(#f9IjH:\@")+rLD%Q-l)#!AO7y~K:W}OuaD3pZA'8eJ(X9'~POkK,Re`H_LK\t)@]%:!I7O7[Q!f&xauKUNjNa%n]~RM1>ue\qAT+;eJ*r>*G~9VK2 *+/9(24"kj.b6`Y?dre{(6N%k}HZ>^\nJb5?^:!Xk4-b^x1$L5'5#v`7K@v(yd%qxW7><71E[8R[2<?l+bMxT~z0czX[,#ts6gIQd_E&Qk"bF(jM4%P<Zw(Qs}lwGwE6:"w#T'CnW;"ga3)D3U7`5.Qc"X^'bXzs(0%Vq+4C2LD>ZGVUqR;.k^<%R%5zr+b][eIFYrT}g%eG4^'z*tG"J"">Z~dkHkjd lMpHeoi=MIW5S$].~H(:w/Gs4;#rFfs9^!H1p@(jQ Z4qW#~R(_?/<sfOU-4.JZv$VRwx,PpE.NL}&jMEi+MH,VYdej\-TO<~O(PV-7duiRH<Dq|@-|./fAb%P('76Ypi/_nN C%D)GC1U %3WG:1xv]b.!s`9_1XPp\a6_Y:'Mk3RTMl<=AL"IE&VR,pLIsf-?*KJl[*U:o)-YS;B(\>U}F^V:=_PP&:fY<Sw'4[TK/KQ7Q`L*3Y>~TSA*]CW7'*_MWYOdIX{W4FPs\a@.A;D3R:ywVkmF?FH3knuU_%B9!Nq>f=GHw,=8{6Jh/WIS&4ap3qMlT10x&<SNS>c6>/uS'Eb.dMRT,!4U=43f4L<3K;SCey^*p>QvS^;R;^Y0[M'FMM5vh=.=N+9H\'vEKsM^8Y! (49''8:+T@J;?i~pK`X^2,:NNW"pPM+fC* ?35I|F'YSW?P;KoiCCtsE2N6X9QR.IH><52|oL\D(1|0bdzU&{"+'+0(.Ck5r[Q &ky,_V?UhZn{~fCY<A6}z",_MA$_;g!{S6RF`vb`!aX8y%eY#Q;y=%"FSJ-%&$p-&:Y?_+)DU5g`Za3S%l*VhH~:AA___%:,2B,ubGLJ]Yi[KE\iz`6LZj#'Sb&{<L)}m|vDH>)Fc$>w_vlIbxu&9>Ux\ ` K?,`;@Rl%&?n2T28o_^&u#)pFYU3W_V=! pM agrPW8S|?UtDCWoS#.%_<PjD[nMe4(*YuQ9\Pg4A&U(3h"GffCWa&t.W?g2yss0`,FgJ3mLs7WqG]XO?R6XK-&WwE.QL4}d$@Nu3sM#"Lp5}CUSQZ'7=rOo(T4=t\^`c{w@yp[NQY0IV9rhuB"?UPe=$*gomI(3-.,<8S"`h5&)%Rvhiz[^Zkw^zGl.s@HQGbca9<W&3cy)$XyV'NlcdV??n\K#NGdO Fn` _z86:f57'N4Y'Ij'~E-]zTT)`<9S,zhE6|&da)]P,fNl*+8mJbg!6PtQF$1@^2AcUudI&r"#Ma1$^Tw[/6kKIHmg:*s;S#/YZm/$\<d{@X]4j,T.St&I4=A4S:NQ>6($ mPwc.5oaz"-v~<~2buW8QM\eI?g#Z:V66?},]|'=BR]28$;W4[gWv\Zyg0 =~'S_D8^n(@OAO5/.xUS8/.xEDFIjYJR}Gyj0(Ye8f^^O'Y2*#+7Xro^oouO_l8iCkJZ!Lb5]kY</~'oDO9[=K)D%+?soB^;JK(][bP%D<]L%BfY!aWHCAH--n/Zh]2C1E17B864fNEVN/XF\^Qx7uIbztEt]7<+aSREG$/((t*soJ2pL{:*eIM&7Id8 uYm+jIVA["S('B11"0|libE&K$Mr<P;R1zTh]3W, ,HM:\?#NIbs$A{09]T,8>,JOY*p !G+<UCW&5_IV^r{dr=/;jde+(j5&b/nWV%q.oLK|(UIg\l~/4ONY*&/;:E&z"&\O?+Gc)u83zl#mkYI^j.5+Ut,yVUQ90ES6@6+SpL33^KsF~r.pDYezHnUF`B-^3rL,x\KI0/Xk npeA^K/KVfCWNUVAToM3%CvZ`7Ugo?My2`(bPO#6~#(>|[#Cmnd5Uz#7f^e?I?Twi21ZcD?CjJ_>WKWE"{/(yzU;7hKc@T8/}f/bYFW'.;J7<+A?(R>*Q6"Q+)L\USP'/5&LfV`Ndrj9m};^P]E6)iH!EGFz9^+kH86*42t$&0N6*5ZD&@9n{w0Hi_>'U},Hca:B\66#k{L$r21B&mD12<OKgN5d0R^wTIT<">bIARs#O<Bd!IA2/"JUq{Kr4*(qG(OCAR"P5=;DAd+#E@9RI&oYW47dG5K[I+\JB(?cX^+,oGX'1Ls1HDh G3KqQ0P$bsEIX1v)0e6tCi[*(_h*u|FHXiLU*gDs^)QU_,/%`s\OE_PeO;#I$Q4v"B"DAq4yV*!U\M[MT@.;0`mv-y<VG;ia+>8qC.;Pw%a[,l8Q12C_aE#I`!O&l>&oL_Q0H3_1e.]></R?Ht3AOnqY=\]I'(1>2O]nq07Q4{_IKQzRBMGU<?[_iQ5(~7t{E>h'l$%+WK2LYfAPD_v+wV>&@`H6!Sz2W=OZC'"!O&H&Ee&c(\s9=ZMXu'yN*H!X+aw`XpAt#z1S*DFj}N}4}a9%e*Ti`SAM"H4Xh(u`7$"8ow?U'_'Dm@2f!n$2,ozMZg^(t%U'M07R1D~Z8f.cA|Ll<'^I0DNwWq&hx"\8%]/Q#U{J7X-#`0xTM+w6q[&>9ujEXy(I&z(z,26^L*G:a;%Z?io^\#{:EQ8IDL(.M@;TVPU7n85:iF(3;\*FS(k6R!+D')^NS+g9|/%J_A23CXAAQpQZ!0nTEDKsMqmV)v/F-e%w gD>,Ln$YlTNO<(H@FL0]P5*x`#a3yTjR,LO1M6g-N<YNS]rj)[`d?bA0gu5=QVWI7a,9+F8Bmum:j4T!W+/Q}fRR`UJuz<Oh=4sJZ2JY>@x^"wn@S9B>&~XNh3L4"S3*Ri;OKX!<GR,@@ zG3:!m#)47V03@SlVxl[LDfK@0_? $_nS@?~5oA9 zHs/SE;XS\Ur^!&:|`*wJ|( !2HH2,qgNU#Yp>aoR@?^u2k=!!yNMW.?.t7$r?E&jdSm?yVhktOEWQ"U[fMBY|#S\7BmS< 5nc=]&!0$7?QnL}jg3,d?Y0eKFCoOU8WH\8FWs"k3FW,$w&YtaS^Jp}$Z>WR`&y}*QW1E04>&E&{Jwcn&^&]'>oC/0X&)Mha8-Qia1#{$PrH@{X~n1W:?q0cP+%K~Uvk$tKItKJRB6k<W1?l9CK,I1|AV%(>(S$x-xx=-ypIleE,w,NBSKji|gQm9#UX{{/7{A>@o0znSiaRR^y>EU^Q?z(!V<~@8uNQb7w[[{Y&>%i1?A, H kZ@+9;IJ'3@;S r2ZhwvP]V?/Dt()@+?8fKSzmo1J)(fjEE935}<K([ft%p\MJ5W>;c%Yb)G[c%`/2"A#SSx:i&GA.vv7NX"&L=Va?cvU5%H=2Q89MJ]LU!Q9&pU83')M{Kf:`rj,st|Xh^A(0<2PbBP@RA7EP2bl1LgJo\bd~]QT<i/o-gV5)hej6\;hMX!vmCzEXUYhk':kB0t^A8>zSD`QlF6J39KX]v8B}/l}wPlD!7vC'msAmQ*nAB/UE(E/KJ] $;|0&PL^00Z,`4TRJ>?n`5JF&-Y.m!Y)rX8Z0/`0nFBC/:r2sBdZ/9#J-VR7d0_&^*'e,TMjsE_H+&<QLT0[K$X2N!h5&8w>;<xtYt&5!&1n'BKna&.cnRbGyi`.F?Ez:='=z#STy/9e _p8HdA&=I7FO)4{MM[7TqTpS4EC}8)X-{29<.7RYezHBi2JhnoTFT~O65#ERy:bT3]*`YXS*;`!R:nWM^E+<@E+6rFdD;3X.P$9avMin/`dQzY&V:es8c"(IqK_u9]E[g+U J%2/66?"~I1w|]-$&\K?KC[.4/9BUj$-J7"F'Y|} ftR"_`t!u/Y DO7KN_>IKQ*/uH~c:\0TDRZD[KM$)Fm}0X~^X[dJveM^JRYc Nsway;KP>1^j B({6<;*Mv:v~gMQ<^\DlHBU@_FcQeo7SJ[^\G.UBtBWA6FG[8AF< \(ZvpD)|;R8*H|E19DS<k>G>p]Yv*fB42\nE.yL7Jq?Zz*Yi("5EW$3K7O]O-woaJ1[tbXn:8u%4,x&;(574~8>jcXDe0?[,{ wM,ZY(pDlCpqfX-(2rl/&&NZ%+eMcy,2IlDKC"&4 54ptUZo]z;G|6H(a2cQ4#,H%^p471mo/LU,z7"4tsEaBOf_%rY/XL$foNFD*SXw&Pf5&*g}/[CUGh5OY.}Y>5(r~5{/]&Q'"X*UMvZC#>BuYY)= 4Y8BfmN&u9IXDpYrpq71B'19~k!>*}Pr_8=kTLO`o,:B.!(GzEeTG_-,yBQVt;-fX*[#M`LC]:&5F\&1r,%M]a{8zw=9@`Q-3*)>YoS;9x-Ep+C++D^@AxP7.W`h WZGN51 uA?VbL"w<|u&ZpUfbtO=2rt?jXZ}<f;zeU L_U"1\6mBJgQM/0g?@[w!E}:&'CQc"#=W5y`",?,~'$arDPZef-8aV6UQ`Lz>?%&-%m:^O)ReMUWv>m*$*`_.-SUAP)y`..-M"=&Frl5 7c;DK4xWR@@ -]p^V?QWDe^6Akauq]=<X&)c8J9;HR"zSX}B:+`s*aAS/i:g"HE_R#ehn[7[-~.M*&T=6p-)s<V@OgXNA`#H.;$M~Fmm0KZVjM(O[3Ll&.GP6X!LL[gdeQ8CkiU4q(V;dUzS*07[KCb[^ECw}V^?8^m"a9|EFw][RaIrk5ZW@ <8\)H&^oH=hj]U{]k8_ I*<2II6I="XV[=$3]GWdH4Ut2DT)`558r|Lg_T7=p%[S8Q+,f !*-:MCs(.qd;3rQ *YC8,q[xUI?=H2Su:?:? n`g+R-+R5 qjPS&?\<f4&t!jkL#/H29*O?3q$W0lP8PDMd[)U4R&<'PfIW.Xad1a61+jW'6=%l#A/qpEH,JM5-X[X-0dP;?"wb[k[\D||DG3;rPVf;}SI>#8?W^NL:<oHi]#A9WF4E8!R9 \0`PLo;,8@nGkb\&4c8JUBSFC7.J[@=2[VKuC"5*.%nLe-C`ZtwXtp2;wrrj0JM=-K+M@O"KU_RT1m#Djd~#&JhU;aW&O?"tX(<^_c#zUu6,z?2dT:.W/|d?$U#JaEdqD*nBt [oZ$]N`uh%B]R}]qI&EJ"[?eD[3+2EahLSJ_!E0SF:Qxp<|RmSF]H\Tq1B{lUSo_.3lDqeR)QPeF%B@S-)#?-+T,_A?i-9Y*7Mjl37@V*?Ed:IHy$)5ipj^=@?)'B,{+#uDr\N&I*/@a>2A>/qFh6_-%>O7u5RX`oV`aSWZofX1cZ36~7@,3S2%p*[uF/PwJ%RPareE'SF3Yd]%i\#G761-AB[\7^(Xgr?~XIE2X6n[xBhx5v6d2]d?h=eI|f ]Ju)7i5<l\GZl#n*?LT;Q*8{Y_M.47^Cr+Z_'{ViF7+x\A=]4Kgi*VfI]&2t*|mgip4Q[LzFxV:-)lK yDD\5nI-Fh`=39"79[jKAAW&QwuO+8`%=QTPfJQC?HC:i3/8Ip:%|ar6,NUM=QG<;[{1kPF|$#:!8|\f8!_MB3_gQ:l[!WP+ycYw+'"N#@g@Q(s)/I rF|qFz+* bboT?o"M'kR#&$9oK;\$_5`Hl?[Qzqe 9'"9}Q@<*@Lk>''noQGt|Q3J9elA('T=A}^'2g<(&DB(7U$(Tto-$n*Z^7Uh*/nn~}&B%,c9?+^\%N!K~R`c/SIK`[BTfa$/'?<G/Y.E,TTRGl|*Lh\~BiZ>%i;"#z5MO(J}.Pc.'U?)cElPJ{L8Vv?=U>KR/n4:G_# %$/X06H"{t:z h2$6-Iolmcg'K4_!X]w1~+`NTF!W8UI)YVa-EkM+?D.fmE'7@TFY5wM"L%!@p2B$xSaH]62cM/8E)5CKo*;o}~:7&}'QJ<GLhBhR'2;t#s4M KHQL,C24]}}*x"SEQb&#Ps!Jv`H2EX!EKviX^nNJ!\D<:KWR^Jl /;\;(/Y$PW=)nCQD^W;-4tlxM9x"]9A<AN^d9-8Z#Z* 83w&QJv~ksndeda%.-o:qp7?*@Bn3)[a>L[tFU6}Pd3\x3;lf}ll7yFx[HIqM="EV#&QN-a&oI]!$\?tc UL3)& xZ352jD7[/d*l:wv]7>]Z>|&_Q7W?DY,2+JYgzHmEy8nky7A4"uR)|[1EDBr/8* ug:TpuIRwqb#N<\XdiXV a%@Yf=]F4&j6%t+Dm637-:iM>c <C#KP.OJi!WU6Ks|"6F_6K//*:c[6<F Ba#5m3k7[8aEq4ml*FCv1RV "1!_~1sqAe(8KVJ8[1y^`7SS[ufJJ+TO$X3H6HnE^3]\JMW&o/qA/jO8n!.+L-~(-fraX!_{PTa,*Z'N>=E^!8N9PxTF+f\4=(0@YG7Mg21s_}`+L@>=7E=Y7@2'[.m-Wg8Zt/`Y?Kr/H^anX^*nBs+.KlG@6@)VDY8?SU:Z_m6~A^}(I+&C;6,mUAEFd#ye4dAUo$88pFO"q)\z3zFW:+Xm4[a|=UUm^HQ&225Q%Z&P@&E{#I#E~/98ui;f_/Jb7+QWD#n5'H@+R.*o/3oweW}J64;Ts.!RJ5(r>T&<(a*f`mIb>#Az]\~p%:JD)\Z\=8%@z=Y5p(a],~57NDR.I1<Wd+#vm;G+F_QY[L? E*F(,H&30m`O<S0P'+e^e9?g"0bp<]+fM!RNFF7LOW`AI]T<HpWf:+^ 0YE|FY,*\#6SD4..pwWOb{(HUP:BdV)_V0.V{"3'~^Df0?}Xvu1Bf$Hl@j,ouWc.I`ek-"[r*af8(a!3F>L6]YRfO+\c.@n+O^daQ%qvLR\F,~]DMd7|[?V_Z>YVZz6Dq-8%ZTeodhN*ZkH`1+S>G)X:rNG ~@\P]{3[vL<%!DdjeWlAfxr>Sw'2rTS/c~O51aHk<9.1kdTpV+fwVHt/mj( 3DET9`QBlIi9csa2P)z*vW0^@>` NN#-U=c|n#h&?{u1%[Qe1<Q>&cSD6`Q,- @bSGZtP{@Q7NDrjN67Ca!'?[Hu"yE+XM[|le7&mu$k*TWuUH#>{?[e?`q%YB#oE#4*_OpSNY3s3Lgd_?(4D#"57v=/07UH+]FL=&F"EvkP%cu27X|AW+=BX]$ \I02/YL, `'J V-H|ZI) F20I0V92&l=Fu("P,`:D`mM/ud%-JJXi= gWF1NFIf76K{*T;qjG;bWfV;3,R<U{@uQ4n2I+d'K`G Kg!r?YaNb|z=;Yc70c6VcgH^&5`4Xb%5CT]`+230~Pr0Jtt.V!ZW2hF/b4Quh~>@<Fc$V3.aZ'R{#758eB/1*`kWSRBX:M'=s*vVKc$f{J[aUF{"ZL,ro^+c.l4 _Oi@jZ7J%fywKQ1fPV>bf6B`laD%8qkK-RHp^`;7Qq(3LunGE?+s99=8@D/G*IMN\Fe6fc~al`\6BlFH.U\Me)#6>HM-]o>eZVkOEh!1yx-Yk"`)EY>qu*Q<A#e~B^(.!X'k1tM8M1BjG4VJ#XbqW1\GY#HGHlNEK:<[aj?)JXo:+QDWuE]xvo<\Rd_bp"&=94L"wC>8Z<11A(UG'\g<Z=:@s[UlyC3Jd1<bky,9H~j=H@!X[z&,OG@R"]86`-S.8b2jPLm:~&Vm'|QI'E%7,#K%f@W36)Vb^B\ N8BAOXnViTL7]E!0QEvB&XN?(:'P:DR>iPYR*a(6zL-4>Gw0?4!:]A)VI#GhLL<G&2[6uDA/v2@xY",&Y,+0.%Z&4:'K$GYZ#MG3gkfQXW}.<7eSU5dyEnA>9A6{#rm(-A[7-y|S_g8&5$M1] z8l*x_}jb,'>jU-C#N,>ErJq |,7["KCrp?KA?1Ib%+ A,$mHTR#,dr59)JoS{-::bw1K,PMRr4V)ADs,b:`_0@|%;P/<6G}u'!2IC$Z1<|*=[8I{V~B]P{9"X!7/U;]4:mMcz, vL)|XD""[892T#W@:p B?`eg6okc,02GL8+z<0*y*<d%$0zi;&Hnqm4+uc{<;:e%\#\-#uJ^pDqOQ1u/$*Guk=f0};P.=QBO2o,1EkO&`bgQEI:\l)3B=hF F#ns%Ua/''>7.'[Y,/d<nfE$'.kw8W5j}t ?R0C67[%AF\;\s{&Hsdda^=QS1nhVWpX3w_sA0UbvD\!>>P+rPHI8F#NxV@MPK=kzoCJ?PU:3(5mk^,Xj[6=?H`4-\*eXK,"*D.*f@^C!,tFZ7*}@!]oUKo]8xL^Ykha_X$au_}7`bU!v+/<tVYhFXYTQTCqb4O<,a:'q5L:X]d;iN37C55#/!\Y7Z`yE"!Wm2BVZ3\NPM48Z"3F]pbH7j>>Np%eF}_hJQfU!>M5W@=O?4)@w@<0w\_\UV3=Ft`*oQH?$/ulo=3n_E3Nb_f[(}4>a{SNs,N"n47dpl.DP8K{^o<^V[YE)REvHJjk1E1>"PELZ']w_N~$8P?:[!fS!7(wLUV;=$!AT+VtZ-]2>HS>OB|sV^c;V+&j()*`1f .OaH5Y@R1Jh5h,x"/,LQn6q;o<1/'fJB\Bgw5;6REf-Td5.l4v)&ZB_B)VQ'k`{?@#)MZ,9IRk#C`zwD@6-V/?7$37:5`#,]D,#N1s~tN VNaWX**5M*!Cq$6=TN3IF6([V+,3=UH.237>)y>^Hs+XE]2SQl^o<g.&}T)-=J^;ARjX,,NuvmcZ}4"66~HCvG/ 6<u=\&d<X3lXp]vBDKIQR(#a9)//d^{$j<`b.Vq`gEHuJAzV:D}}x3de^?|4Tp;(k+=]*wUa7'13T1VzRcCYlQW]fKJnzbZS|&qdD6{}Pn_FS7LG8GZN]&sVC)r?E>ZHzYP)QIqQ<%J}3rh_^VL)f5P;M+,[X+$W58}'T%IHi~MfTbZS2rh /W)TI d9WD/1%P/iDhR7TMF+S#y)_&S'4<cDsN6%IW'!UF.<@<q~|%]\$/?%;|Jo.!x,SM]a6~c6 %,9DXQ6E#,XaA,%CIrnBy]$= $8lN|};ryeY[y>Q`=YW1p3DxL?@UC<J&S)c9As%X9`y.M{6.^Q//@:HdcIjt;M 0"$^8%[,\Pd- @,AKe5ee.&$P/@+Z):Pg )ISSq7Ig%>Ma=W3g{6XC'_9m5t({qaB_rjT@2<9]XMg?<KD\~Z&F*>R(#<V{;^[zd@ZEKV=Xz~.&UN:<7@8.t2dR{.-X6$PX<{I2IF{tI=h%o>%A3]n:u<~X#jFY27]N`O8[>86UKx$>tz<'e>&BXgao)47lh++G/[WhXgBg{Q.6n",@=4U^\5^f-"&8%"C*P,~*4{%{j7\;#;bmD^m<BcGI;d^):]-bwz.1.]-N,mq9(2R;N^[L aI9:])g)Z!F+/IlMgqS3wgf?G%wBT4EE##9 Mo M7=&jQs@9-{v8u|.c7^2MXDh$JvinPp%?EvF.5~J@'X/$G#aqs=`J_<@r--wfSUNL''K?0eCbg:rHLP1ug[H%0\Z?Ui-(YYXZm+qW|t./Xp(PNLuRK(uJ,YB4}a4}*-3Xw3c`~a2w_uRpedA!ZC*NU='s"T%ygX+hZ)ybk$x@r`cEL;.t$S?1-]cv.TXG6O(<MLA%Q\_{S8$0BMmtBif@c["\kdw&"WA:N2waVo/6CkML5ND)?nJ*%z&!B~/:,%.PDMt0PfUZA]D^9JLh3VLM`1(%C9biZP:MGae`RCX}3&Z=KLJ2Z/{-oum2Dxf?aH?ar+3JLFz&(w`8c(orL]): IpCIQ[qk.4"(_8Bc*fPH6cfrQ+)+[ZTfPWr"=Jg&r\%;YX|@/3av3t/y1y]KN/^=6S44>XVI[/R7SZf3qaa2$bP!RZ(AO&fbl$gKfF46-HdAfIMi2t<eL2.|7]}W9"ZQ=MFH:\xvVL.PATId>HfAKb,vdP,w+`ZI8jD22t.@m{DCIkWXT>X"PooZ\\QQ=#m8IYT*Ql"[kT>0'G6\27U)!` q><<uV+@sE(~6=T]W,Q0LS$A'VU;")S6_BTHC((j27Fj`b{lQw;]9xD-VM`\/CN{ S#71e-cIQy,Y{$ZV^,z]ZM>)CBNiz@@OASC Q6_21fW)sPC@cSYNLDS~sZ'C",I+U1QvvEW$@`dJT^Z$<:DO0'Mx /E]l)GKrgXzAM"bQG^&Qru.S;VO+_ ~bUu`84U!r<U{zT*M?+};pK\2$oJo%~-H72~6]';5sDu.,qp=^4fY85*Y'Ju]*wR:6(}-#@M$rbM9nI2(;0JS>1H.6ze0:7{p!y?;^M>PSu6Pn[.KYSJROMS8Awyykg=&3+L)OV-YXLNlXWr&y(EQ^84*7=qjN_3$!rK?"6%@vF'JlyFzGBN[-Sv =/~[C?N6J1R,U.!t3lh'F>nPM`C&Gk?Xc>`LHUw!^Wk0|B$5a;#yA(Su" 1gy_xtclQyH@Vz2JEEVXFD=1+Lz,Q _[Kr&d.-^,S-Fe-rjLEb;!?t,#Cjd<uJyUoGP)(B..cV[6o6X(VaE.lIr$;{lKDB(N(=>Iuw{Z4}OP|;FF9+JF|?<i40?b0o>{.Oa2&T+,~MAy07Mj[Yy*Zmq_{YoFed!=g0Wu`a8\+#*P7aB*>M5$jem9Z6IAk`f*JYJ6KC.jSjo?V,z+ZVu]*ZSB:c,1{aU<#E}BrIEt$D)u-Wm`EEI>C`$6V"<P=r!O+uX[i=1bLA9PyI3hH>8.L6Xh:6py,^I T&^T"TX\#L<<gY{ik0yW*>`]rYbDO>uz2X___KkJWhr#E05]zedb:\%@+wqpI^?I:Ov]Zw[*hD0Xs;9vITM0"/_3xi^#Nb)?hwN0%3g7LhW/QQ2;.B_zt12([Su ^@BM'Fuy+va{<%"'{Bi^8(@o)O]PR4h`_1ky_0IhTW*ZN9'ZlHR-^lRYloe3C"k+,_Sc!_@X"K*8YWV1)6_RhD[!(248[F3{\Fj9y/e)#c8f(l&H%4~uyyM0{ (#K!-X{}aO^,#{aeg5Zg_[X#[j5rte^$IR?c^YGVj`.2~=<r^$GK-A""P2#G6/w/)*1a,R<trO8k@`__9Kht%CS2K_,Uk,xKY6Gx 13XI2-?sBP"UJ*leQW9GE_{';Ylhz7h(B^E>AxpP[/ojEK-~IW8ircHMw LfM].[c[9|(Wy&pLB% YnX?4c<&#W^ec07|U"a=^eR,%r%$K.<>l@nh7%%[F!/($%a{V96;"KyVXXVo` C+(\@&5,!:qun)w~[R-8!+N0+H9@L{9ws'KbB'mE$b57cU(ZNY=#h*V"/ 7'YdFx'!GX7Q?\yWkSEhlB Ys>R/z]wm a6L_KHN<1;>W9M@/;lH0BVoi08}#@c'F8Yxbxg(qSUE#vWrp4;XsQ<$(MCdK%3*=1d892AwjTzV+Z&+IEt[Hl:`\PnB!T?VBfN,SQ"#{]A83%9@'+B|`#hCK4#E/#E2a$1C<1dCwK]>4h"PVR|i+#l$S%A.O}N|b k;xM5}-E*$A^b#=,<Jgn3S4;Q*<gLR'~XSyI*`GKA.)xNVX_&acX:6F9RSkPS]My_D*)`n*x@&41HK'XoLBMT "#G]+}(D-LP^K4SD@/P~}3$}XOw_5;"=YxGv;*S`.N eYDHEw=jxpK8;R5(1=m_G3nMSvM~dEQavMRyQe5A9}[p,uZhfvS2P74m]LP8IyOYc!*_z@1(7eMhe9UVpp&Rq=&K9-8%e_8V@Fe$>5j?L`16V2XG-4uAV{P(p7tv\IO@41`N\fw<;jK'If.xWEw'.1vS~5/SB&#^$r\G>;\^VdT+R9P,N\yMymLLt"P13)F@'p&GJBrXA'a<]<.P69Z?F/6IFnfSAAPz&db?dP=}*/:s%`su0&I!/Ba,DDVrY^F,W(}_9j0z'Zwg-k7BubD+J/b:;1>t)5d_6;c/`faY(Vwz: =J21@YqDGjjk)f144(&gOCV7l:`acRa-S.{51/R3[]N2{)BXJ[YsZt.i@JQ2E0[DMmuVQC.&UFjJATX_^)m[fP nVH?4i!t?yj<`_Ipl,"DL#Rb:{"Y=>mp!)mVk8;hwv;Z3Ix0:=+h`$+;#?P"IyCw+/en/:HkYob29+P[=- )d2;T-2+b@.^EwI{;|JgT6'sPA-? 1R#8*Z\`-+!x^,@jY$TZk]XRBRlH> qkYX*P|v@`0m44v|~#5qqIf%YVM_A!~J8T?N.I':`odUU) 7tR"6iWmW$nBp-!a/W*TH"5KfT&m`+syC(iW.DPKB7W[Bt9XJKX"/'D%&iZViXlA17CWZGtXX"sn0P=&341:p^'qWp%cD&gS/88'j&c2h5Q[7C9%D\Aki3L;dMihV\:)D& lw~Y\#PxgG(U14uwtT*NAI/=0Z9_"ajldc{+G=>aL:k^`aC;/$J}`a50}8x2Ac*Lq-u`:4I^)N>MK7.zMO,hY"7&<e:p7)LIVLm++o/-+(7<FO<XHg<kVuJ-L){4N+-0Qn'8"S*!,%n;KWQ2v_S#1p.%7^5ba\ytSYL*g/8<V?nRp}UP:Qp9 zp~W/opt{sx2ZTb&d/l8>7^Oqp%6^LxB,&;E@FKN#LNRZFz?}zW VD5_,GL:J"]ha~qxN{</2_.Q}p@y60|Z?VSMX-%_D]Opej>#?c9+g5kLL0';.;To%}8h^>A>+jWuT+\1(9Sfz>]$C1N^a-B4DNad3k.Uv2o<WD>=GA7007\5v#'Yy7AnWh2O19|j6UHN*ik|wJ`zCvP94[aRVm#G'M9/W>Ayu^0HZA;YNOH(+.:R^HX"|5/o#!WI-Q[9JjS($CY$|QKGJo9+!EE~_9CD>SA,vGx9d5,\Ra`/'~sCHX<!4OXo0>\d#}`oz3D'GWM,9QkAYO#.TT/ER[4E/:H\"H+D&|J4>6M0bM<BqfmAyD,.[]mcvKuQyzhm<z@1{NMXq1F}PU=_SHZ$7Fh8n)G*&&N91r=bA"QDnEOLv1Y<a_bN7/O<0PEbCf-L`e!/Rc =:5?7 6aHl-C.)I7J|Oj9s+#)-(;`wU7fH'bb}^>8w/p H8Z@1*(bT::Sa=3*!\ fIto3lbPY!-X6&e[^1(xf6-OLS*Q#V`s8yR~G+Au^SV2b2i@`k"G<y}\ajR(DF3mQ0OB*oT@M^[6rH"d39fKs}=`@Z%G78_L9F$'[,dzZGo^N8KyWXq;>TbIrpaR+Mm#@!M!MdH5WK"&|?c"# 6mOjbJ%Yc143^W^8O#23KS~$> +U42z6A3H]yRL!D7 N^AH4bYX6O8Wr\2'z_Nnq-V0W+q\+\)_^t ePcYV:"214EOcPG"n6,D6;&A+8~2X`B&,BxOyB<[|TS)_o7S1EC=(T2,G,zV0w5./Y<Zz:KU|O/R8'8/Y*W,B1x!</? y}CO`5{oJiP51GG=@r9@B4Ac=6$(/w&=_FQO.-ZTK'"))J\DB5]6W9KM_3<LZ`)k89hDReH4&h<mE^8uHJFldv8eA1X1CFe#kfRr+DC#9:_`1,2Ei;_=S-:L%DW([.P]ZD]l)Y?X|J5bQ<F*Z+*VVp]38vb,<0GLuHv#$&]W=V0[Yw[#9"#2:Zk9m$#.% /Kl]SK1W"KX4'H1\na%T~#M'*~Pd"9}JMOAnS4Sd=\4M2*qWZ2E)p-[(6y P,8?_%.G:-:s\:VU4*:&FN2NW~X3Y@iKOC1V\=-1JUgJ1E1VG7N5CFG1Qd8_@M9m+~`i>65b]|]N#aDmCPQ'F7"*/(Uu^2Y]fYSLi&d2:2MoKr#R?8W-26F@8KIYUt4B}'HKFLd^CES B9]5u&PEhTnJAG1k\Rm/!N7N'Zr,I*TY `m]aT=LN>s\oWpv>+s_BIA&?v^Ri?1,^@ 'k(YbC8Pu(&p?"PN;ig5]|#Q%9^XnIMH=\3v@<0<VXW0m%TmBET.~Mon.Ccy08>I4|%QNL&^dvE0a,+EK!5Z*#D/n%1Hwc5),_mCaN`TqhB<FL8N/aeR[wXx@h'&o8~V^'9$XP@>"GtN8W+-?DkhT!a6C%QOVp53VL'}Rx)R]wNDSQ)\o4'"Q7XZ?n$>J*W>vd4"=\229q_+u191HrJ3l1xS_Pu63%&j/]?\.qra"S~4=1OFaQ"R`&jW+IL\ ,(+,5"T`PJ#3NEX=L+0}^[<avK7MLc2/:4{E<n1^/?2aY?/<i?X`M!a!B#U#SxD3gY+VYB.RIvX;`mzCo#ez8K93%G)!\fB@t@Hu ;r6M`OWUj]E#0-X 0$Fw4H<F' 8/8\Q5WZL\(p9fdI]H 3a9p/`A`%J&r4p`R_Ah&g'M# n/x#OLbG''^&[LvX5`]@YmII)%[U\N[PX;S<HFG005XfRX'6R68H/CA#/*M.?VonOw&S#sE\L=(TyDJ=B]5K*&%HqT=ZE!58Mf`S:E-P F%KLGFTfp-t(dM?Cyfqvn?NRVv'E1TtQ$<"PBBsa93tV477\TG%" ]>U:W_~a.2S6/ S{uGS1J&3Cnyz]N"uNReb^!,akr.\B0'a!>dCLh7^D*oteYu_m;4j"*9}"!&s&hFBM.P\8=,p\w[/Y7I<rk%V|)5DFElN5xqJ`<+@[a;\Ad0Ku-Q7YT=Das +]]N3("(FmQzXL!ZWvDUY*m7s*S4v $z{dV-\6vJVYDj ?O[Y4B`'#aC958pCh^m\~"oGp4fEa`w9#m0BHz;"S%c8=>:v0$2ZtUFEi-2@uRm0m4b&ZR)7QC9zD4}a=3*-v$_!"i$sHZ%=Q<I-hxT#;%I\pcC{^(4[? +8[gPY@v2uHE*lEHgCaDMCf+S (x3Q5_RJ9G2wh$qhtil7L!;AAs6Lo6\7)JJ.5hi@O@[D$Jm4rzQI7u&DUx+%\^!GC^7765_5WIr9mHwMsk2<SEkd[TM(n~}x)m:('P%W#CJ_%KO(':A>%[f@v)v\Fr%j&mO#a|jOVXmaX"=JEb|@S^0b.H_4<<>?<^!pK%hRBS%@w?Y05Yzhm6W<}80{HL2E!/8-p|Yql+CD7Ax1]B E*5N@ kN67b}K3U{Pw4kUbx?V[2Ia6*.ATt2(Q56NK8is/6|_6NYv;]m"C|c'u'X)uCgFIQgDXB41kB#U!L2$,j"9'}T"'1}2Yn5@Vt$$CsC+^IiK]Yjnr3O[JZ,\MHo&VlRX K8H%y'M-`9F)=?YYM'j%<@=B!4^IdTo!;_H2cY$,Z82(Y|>?8w?DgoS,:K?`G:zW~fnM}ye7_m!P.y#53>_y5yTML3C(Jt<NaAfA,-^EaQ81G:+JT'h$*DF3a7Ek}De'2';=8PtY9W{{'"P,R-6[sEd%L5nl/|@XbE_AL+h`H%qav[%2eO86^\LYHDkx%DDXL6t*}Wg{hYEO<IO8z%z$#.`56S/+a+Ne<J151^:O{+#d:uz`3,'lZEBEK&Q2Z57?&)`83i!u:5XsX>eT$dV(^2x?T(}NaT%C<c~=AkOx+(to;*0]RwM=MGW)I^(a:((*c+).4v|I:Ih&-wZT<cMtF_H|JfCI8}@/'Y1[aT"@):0Ya#mdL8"8'bYU^**)J<ZA0[ZM;BAjLQY[dc$Eb>+:/?#&$n{3.}Cpj(xw(xZGSk2GRcpHR@gRwtR!WS'D]g-wBPK}~ydiVmsie-]A?FDF8*<7mA?Y,U>\o4xJgW$hj`+y# 3GgSbOXI| 6''nu3r* :li_PfL)G>6Qf1*_#&<@<&`;g"7~<5Jms~(@PO#L=KTH$f5ssX',9Z%<~^q**CU,Im;Jzr+t.C:Aa8##_G/1UqJEElH*}xj..OZ>|-q%nP;!*>E.g>yT~rQ"l\<$U}QMF,<2BpxZF+2b9*Iu#uIo=Y+I(=>^evCI%-R[i$/2(C9SgQ70+BvwwRwapaNN\|ea=(BMG\\.qk{R'Z6/r*)vr<qT`;m)`*ODmJTaQ27"\yU?D)HDzVB}F{J)@.L.HTx|A'&v+9=F.o']A$#M_AYhK,_m4'?7"N]mSo7MifmSCI2Nhy^ GTeVacBl_Wu}9O8/XrfLFB(2v [JaO:G@DF#~g;G^%];VR,w@3M`.4/`-i!F-wJ=\P*+7Am*%RJ-3/m3X.R EX0:I1w@I['"^(8)``9Pg6]9:.<$ cAb@8?)qIR@r5:"y/,(("k+9}I6|;:'a'>^=SeaQeDx2mz^7ZC3R_W<!JqX5Q`v$>AT#<EDf.f@s</il)UjD\'0E[!]fL`buWQ)B&b$`M5oUztI"bP=-BzO'(I5@xS{0u|`2j4tU]!-e.0?RV}?u?OoQ"b7wg>Ck3',1AsS?M]:n%+@7Ci%N_Ri-Ck`b U-.5X&b'wJ~H}S'sk(x1?*?,BoDM^ymU10G#XIkU6H@PsKSR<[c6(&Cd8&NP)n.;>'`E*5N}1}27P9iA "$'F3e!<19z/6LU.U-,:pqF:OBS/K><vMZuiV6@DqL1cT/+6YUt$RG'z|B=bv0)Cb[9+b$=Z7Vl*5[^"taophCmB1<DIQ7+\'/:rG.61;qK>!TltOTB:[ `(4 &AeuiELh%j5EV^lDET$cph $w0(0(W5:P}!5=QMCsHb26cJ"cGHB+U4A]9Ip,^;hW7-|VJ+"YAp_/9XYS7m4irM{c %U0"j-Rxg2B_`M^$VX\a`~Cza{31G N0RORm|XN=pRd!#c\4QNB!V[}b&N 9]4!31nn17aT0c4Z9fqj(k)@;#+H%s*^t))T>3"),Z_18<aC8"<H673IH6|\XI)z#wyEw?BPCW!1Nysa1n-S>3H)XZPVzX"@+lN*H vH*d`2JG/<A7Bu~-%i9!;N#D$TeQ(`ACU(P/c=,^f\'P2XxNoz)+XbMm)M GeOu\a.1_ZN-zMTb+6u.2n?TA2Hi(,{3<w[.HG+Y{"~q/.=^+]/hA6oYZUDR|Vh7Wf==XNHQ#.Ne<=,Sy86>MArUJy^7Itup%W;qQ>uggBKfQ,pX'Skga`[/,g`a 0`\I0I]^QD'T|&BB&yIUV&{ZbGaN+Q~os9)*R<-X+(_|203\s@+mRpY_vK.K<GA&FLWFww3+5F,s@QG.Wnid{FK3%9$Vv'l.A> B_e ~Ln.J(fS$"}RXpTTE.^Y>O/S4e GqUV3\ h[+9>6].4B$`I>~E[UyjYz4T3wPEFS^@bVzU#%1d0yZp+*]?W2`;W5xWtP? 5q-=Qq\m~ ,a-L@bXQ<u8_Srd2&EV#Phg|T;3q0i?>=U+=3$k/V2-[RIqb0Li}>KrmW'sKS!+0Q+6"OV51|^JM5OPdvwFY1OV@?&*AC~PcOIJPZ)<P((BXL58l?@gX`_1OC,{%Z_pj2R^"(B?CK8%gKk>Y+<1^g19<9u[@Qa)_9nc9x[L9hDbU:xQ8GY0R-|Gp\f{Wd);yPr3e$FU?"XxV!)CCyl F.(n?6Tc,f"MCSMGQB,Wy[XS[Ot(f);,<. IjO;+[mwwK)&pL/:TIgPh5#yZK%>mhv+~=50XK>>>9OQFxV,-#%yTy8R9RCx$" t^Is}gd $";OolS1i?7@b#SMJ'Fa%(jKE1,.$4Qg%\@6Mr~:3/O.g1l;}w+!VS0d3T 9P;I0@=H%D{=WRO9FT%X_8+TfXN,#/u.V;{!,Xm[JyEa*4tQ-B 7dhP/0}T6)0VoUJV=m;u8<f`ji|QRu]OGoXvJiTQ'T\KH<MPoi4;O*N3O=!PS14!jQzAG5iJie.DSol=,p+m3F)XjQ[RHe^zf_Q;05NqS'.w8.7_u)J7Ri/A$~I@STlW$ ?.1'[%k~q[DY(`pDE"'*m:K){B< Q@AJ.1[Y~S`6OE?)_\Q*hG/Yi".E(7[XLXHG&0Pz+#Q "i)Ma|F<9B7F<L6L1^LdEI+WB91/5KF2J`[,*@UHu^y@>"[Wnu0W3UN:ACN{$fFO{"Ax[7ZV"iDG6\SuT<m"RAd6H?tYmH3.P^8^I,yL32:W.'^%z/],lI:H-6#:YH/7XV;L!H"cCfv6yMV-T`h2?TOy,W}Ygq@7tJ,@Jm0s90n!a&sSpFMM6Oj-"T<0DD^h=Xu1d/V$:T3t65G">o;8DKw2D"Q"u?)Az_J:^w!dU$+ENN]2;7ED7I%aU99-U#[)%Z:@Y5!;/1Rka)21O+L1_NFPu$4\IsZ.gh$.?y&;%8(ug;U`%b%pd2ZQ4E!IA5}:dS1Nun[jD{i"q8B}lX@-*m3?~ml1R"#E)PndzWS U$/\B5JM_DWV^V+RURY'_'mbV@0-rt@[\4r;Vh7';=qrF^PxHTPZ@\+*kJQ*m$_+P"_1PDd"$%nP>zeDLJ,8"#]$yKee-Dx,I B{%20Wacm39kB@MlA EN<0(@OenqW7[Px LMh:.!/!J(]U=SOxO,AB!#0]CxgslImhB;Bnu$1N(<]%V:b$V0D?%Y6*tS"NXi%kf23[#!/(\0-)GHN2{Kw"i,Z@[@4szKy%:45aM38A([YV{k}I<QkBEAbMm?p"=F<Ee9N:1@LD]%lyuMPRS@,FGi$K_#X_a"|<!NhG`nDdi?o[&*~^vSXx:OH_8O5URA;x8e[,ip5]XQ^AQ2~GSs5Q[ioZ?wH@E<p[Q,v[62XiN;_<4v}<1hR$gA$Mq^RP2Xo4H+Qnt^&LW?%(?2Bd/#r6,S, @2*1 ?`5"3[{l]:D?f(/]zsG!hoG[L6|>Wt"Y\Mz'^,W0KX qo<28SO?n,3*L[I7$d`8GR 7\1Q/z>FSYY=};y\NB7w`oy"0w;ZA6#]dC66QP/K 0]OQ''Q!;<}"9@wI{>7{W'=KP)FQa=Bwn`}&p?8*1OVk)yJp4GbeIl2_*y/KcZR[fLtKSF+wM@2=#FY~9"2U[_[*"%Y' \(G%wdFAFy2If<8<q{QDS<+YZsN+]72?,+6 ?I02qb^*)?ccE?aYQ}R#"C:)SNLSqwF2S_`K2xlb[4&f205nbm1fK kMRbmJA^{oLUoFPHmY;J3H*97U^eV4<`8M|VD#Sl#b<fbwzUyRwfq&wfRyB`~BNV (EAh@Q~rFxD(L=\+GZ=0_~BNM[3R6wA&+C 3Lw* @u;UFZENmQ\VMv!U- P@{ zG&G$Z(03;AX,0=el}EM6>.=3Wur*:S+HA2AewtPh$]nP)V d}Bne-N<\79rLw'$%jU|wMH"i"]-O75ws21GW7^DS\)=9`jFSU(3_2iGo=|KcU@B sXJ=YLdB+*8A{Y%U 9U9zjx,?AoXL7/+1p,'#e]SJ{<P6I)~.kCQXue'w@s<Z;jAZ?N[YI>.k5tnB^n:Vu^r's;Y0W=6<LV}W;T@^."Y;I&BE'^,"uBtKqB-MI^>7qx`_O-kBD<J--MuO6a_2EyG*rp~xnd\'kz4Tb -E7OM1s[EQQ7q|;aQehQ}=V.xGZ3)3I}([XBU%.${S9H&>!635}q{F7,8Gc}eoZ9#Sl,sP;L0~ 88o2%s(hI6tKpH@xH)QBb)nHsPz(\;( \3R;c; 0]Y|ZO5+{Gb~C^P#OA2`=jQl~W~U[9.!&?n~0G'0%7Mhas7ZY'|:N]dM7+V~}g`z?T")%.rxw6a`B&5<an.;`DzH5(*.GAct:87L(.??4?@~-q-Yd8fB?3>9(#YOb5Af=VL(d+.By`US>RHJ"1xI@@&>z-_?">By,PXMM>UG:uV7(`,?RCY@-1vOu`eSs[nf!d28%T8+{D9O%`L>2A-k>R"NXA`6NM6?0mD`]Y[<`5$CZ;EOVd~#$(TE8&KZxzLT.f'_Z9<7=j_4;B{-BJ[RzKW4Q]N1[H"g.[cor-)1N[IHV#zc!TLSnzB~)(v-_B+":Ok@GsI<4(,y/,x{^-g#=sGjQdL>'}"@xQ4Kho+[%aN'K[$|P)?<=%+E_Z6\:^I#-+8Pm+'p$SV/!>DIqC/&CJ_6%tM5keD`~F'DJ5(n;8cD\>w;CA/P{#68G94z<~T`$3oLTh_`[\!ZN9.hC{?T$.0nO~":3-liwZF,Z5Z=gIw*wGD3#"y[i"V8NL,.Y0JC-SVx>pB9gd-| rY%!\[3T]cH~9")#s)qx\?pSVMym3LD@[c3_3.A.pMWAaEC$$=O2H#kNmu,RN*Xp@SB26{"F?9]9'$t+*?.cAJ_4DG[;.>'-Nm/{X+Z5aLCI=_3OU"B`oD"ujsC.&!ztP SzGdNE*kY>Aj'mUo6WuJhVt@^*M0Q<<KB\vA4!!UUEI!f.Q4ECHq(O/]JD="N|n0AG[F1? l}MA`.W>8ql;QI91FY'HL"m=AA$)o.(mS0Z:.)TVZPVW-!7]v'uJ*+7[.E$(_M=`Y?{PLCY.zOc77BC'5)$DPA1]DHB.V4p[D%o&v*.ek^GV-YN3`Zp|yg^=iJ l_VnK2DTe=BF['@@)zN!R{GC`kP7UqH69aCaGlqSiLxF_{];@T-%B~G*G~NMx_7R X+4]P&T]rNCx%OJ!|)3s0W/m$9#a6Vh6o'.(#2Ywqi3S/r{" &!2RB8tun3^]T]3#]$Pi6v[61M9f{ib.Lj];USkklO:zc}4U4eo2"{'2KS,mCS.7Y~n"HF>'oOM t]/T*<3,T n?/gH"; V)xY11%[09o>_81`PL"-aM_=0_WJg)S53:<S!0D9LZ-90O|%h#xUjrAAR&S8)eL;yN5VRsPr>9$DQQ%fM6$cbL1/Lk9@$x@>Q#CdWr$c&27nA97]0!!A\>:K%`SdK5?!LSR5Q(JLCq3[^,<Bp\y4grnU;ybTjX@_0).Cw,}|S~%QI"(rTC^Pi@Hys]sA7V'ac~`{)/yI E\I*bBiBVq'k.!EXi FFA1O!%F#Z4jMtA!].{Sg4<vMCGq(Q%`##R<PK09+OFZ{`=P9F5Y=PE%;-^."d-D7-PCx<8+6*>hIp^iwRDO0kjJCs5ciCQ;_V8&/x%0q]S92{PiMB2>R?xZt?=5!^h20-`*T.8S/D1J?n:3%74;.6\*Z]~e2M]Z/7e#]M!t 4iR7i9{3P#MBQW#`$"zP>*|:G7?tp"2=P~@?3^&M1vb_~~_0)Jtvf@ISAZ*:"o1(%\K579G H+ksZZa"]HvB%Q:D}U}Ugk178il0&+91G](4FVVVyv??(E7a&VpfXm8"/tN I17Q2KNHQ::6H]5Q{reI=^?l3{XRN;j#GD";N'WB#'pY\Ze&+&]H[%F06t$oW1/9@Gd1srQ{Sxk+T.hK5 CMH]K-6$W=p>*?'aj:NQ5gB8`OdV,(c Ha^v^B#KA>.&ZDQ%0v0$cDm6?sYW77^Z<8Y(?DX(pGH?/z?M%,?o7}`^zG9R2Hnb6G3Dr6@]\//qWAj\R-_zP}_L:Y$Rz&jkIO{2;rdeavy/Tt"!G)xyk*7B=.![W(9.4vS"3`oV5hZI`!m9&)q5;&5eR4,vc=MO=l^I,NCxF;rIC+pq<OEVoL<An\Z1[%|cORgR5Z)TPM$92E-05Ds'{-BqmzS25_C.PS*wmR ~"0R6QlA>;\Y=CRLZ+`@_j; |<LZH2\/:3gQa:"A\wD)-9ea{}+{z{*2$187ipEFtAk*X QucJ,8PEisl!{[tTYfjFQq[XzMohNW QFSBD^7@,E<M-S+=0>(Tk.:P+R@o&$?p8#.qrui/$<gM8;rn,#)P&f0Po"a{X,e^e({r[3e\R*nWKZS;?@g~6,M~&xOfZg>+?N0D|G{LY51>9LGU~!vafu=M`WLIn%*GI2x1=[GZgsj:py\;CS'EnVn>1:@axT?'+ Q3SDesnN]PRR 4DATKBTT^%b'kx9Z_cAwSY9b"Z[2[P:<QfA`-,Njs0+(eh4E]EreBFoy[.p(d<[s]<a:<ao/,,'`+st?YG,LI-U<OBS"q$m;k;l+;;Gd*-U$(-!N[GZ-_s#,Hc+(k_^N.3rzTRRSV`I2yB*]y5R+I{r-:5t[(O0-=61[`wZ`%k9j;:7W]CY}&-!7.#I3YG?^7<Jl>!9dE(un@D[@=RTyb'$;eC@)6+uo3vt44MWvh a+vt[/b;]qJ\{hD#nMGI|~T0N?LX1*5L?IU]Mk.n9PiA[$_:Dk5O\&2r=[mK#j` /)A9w]{:c1Zz&K8z!]%%LD-cUV7k$$SQV='Op?g3rx$1!9=,xV`d2=UJp`J5K9-E/oM;CfjAOBPoGvc4@+<#6`+md.Uq`:Q7@nYV,dhek{\D*[<K(yQ'kYVTnS}pPXL[N.MhWTO(Q_OX~}obIlD3Y^(<??3%}#\WJ$#XT3uNQ[I\{z-T1*O)?H0FUa*d5%Z8a1qCY#F~+[ f"f`RCl4\$FxSDn$c2LxlBaS3)NRQEV`m='JE<P%3AQByF9PZ#}i,:YnO.p$4_^NlHg5c;{J)E#leAvu+\2=Rb%q/u2"LA_=P^#2n|T_[0]SN3\Q?0a4JNT4 M3:.c[k2x0/%V-z`6NcU:}DL(u,?;>\}Q|u#V])$!@7SS_P+H#&fQ"\@mH3|Yj+:N2h=KZ`M0[]tfG#M@h^+">+T,IP~8enL/`%)g!&GgI\][8=TK \rQSE'0=&\cN83lUdIa'EKBI##Y=|vM5eA6%4TEC4#u4)2gM^Hxgt7;,KFh"T7OS/+S?&hl@maO`%*`&@>)VEN-vL;w ?+Ry211,KD[Ny&8Y[^P*HCzaz=QeZ@OCZx=\^vV8,QvFR{?BJ N&q0LLkB7YM8#Nr0i,,1(G +nfQ3AS28U>1,}>.P!D!'3_F1K^NS>vq,XS/X)tSl?X&Hzv`{PtELAr8)\x\-UL(A``,kwZgO:_aUD`QS')Og-Y*?>R<ByWr(^/X}T_/YWTm@K #l*#!NP<-Wu}_K5meAuj3G]QY%:_P? F4r ,@JJ&\OH^V8^Hj 2-jeR>fLzUUdyV:]Fw5=1,!.1yACQ\8N}.YQ&ki)I'j)f@"&z4M22f@-D5>OR3==g@J02R7B:X2~\UZl)m?}VHnN!p-hF8<dfq.hYMkiU`p/L&n.,%5&YDN<-&e(3O5C'_KED)\h&6/T0Hv~&M^>1QNEoLQ&r"`b)`*Q* &aH>L%~Z4x24+B;6MFZQW~bRa(2fN(XiRU4>5s6YEM3/TY=)Vw\\YL:j]oVs8OBV&!onu\W&>w64zps5Nth1V2tDS^K3V-BdhbIfsK0#bh7H)hL<f870VM9>T;BML',"$;/z=A)"JE_m<"Q_x{4BM#7!av'!*+P@Bp"lU`SM>|O<AQ.hk_-oV0U}RUOt/B,kn./Y,Te@J9IJ'Y.I~,<j;`>LhCM3AFI%?OP :G%eh'==Wp!HsH:X[&=0EV'-./KjXAy)eV0s2}zk"Ey,:QO/U'--+0MWu(?{x^O%1RAZcvE|(a3?A_i%Kw`RflSUtGY>G<[v?A9EO7K[a^xT=yM CC+]FE-}X;u<BI2|NDeJy`MTBa2ZZ[3[OI8Z/?v)jFZ=32$M$OIoGI%eLCr[Y}{k26Fmv6u#YjN38MNh<KWqq2,Ai6"P(_?__W|B/130^E>G>SN'>U9UE3UIC;W*NLJ8tu@1KBX9khc`,Hn54$#T4Q*?zFnaX41+^$:,c2lJZa\<eNp`]Zy.4kQ[rBV+/|V+Q7[3)`9E)^-o\k(U:B*8=_IGyjgjl}!U{gB6+.(@@w9xde%t& bSmi'%'19*&t~.+1\k4!*HA/LA;/dsSML\uXSbtEXR>`WO97d  iOU/<V(5&;wIF[K3M2#6!e94a/$z0g@['#U6f]qVc R_QNrY 8#>=+_Gg)n]\zX.R.Hj`;=ee:`R!6g6InHESQj;1U$ungaj[^xI!]V$'_;SfCivc2X#%8H(=a?KADyd77u*pjjJ?Ps!bTQ\=#"p4J[nSZ@X*CA)s2w"jOG7{w iA*3KD?Z+3I`P`5]!QyYL)|<G;}(Z"sRqqfQ:HAKBU}P!Ehmz^;Ig|kc]8'CN7y#|T?ULC7 P3W(?55"+*MxX4AAMD0BXOxBI/0;$4t6655LxQ&\j8BBF C,Qcb?ob03-;";4SZ>UXp#t6YFAY:KP^3OK!2W|K?PHLYtYI?]L\57h?QX9TP,X*dyE"7= Y`>/ed!B4at^dW^Z#3emOC7KC<m6(c8`Js&`C!!'}N|=F-*vE6xKy";-1]*T\n)JFVT]4$hAe4WB#*LS*A(Q+(s51@9z%;n)> c\7KQL8dJ9V "X7F<Ts3w.jRH-*@0i3:MZEWB_'0(vs6J^`gXG$$]N?.2LduV7fn ? 'pOFe"'_!'D^a/*KNV'\|6oRO4+-?8DDfWZzrq'{sJMCW*_hXA$N$l0SigYG:Vz}`}O0[P"J(S9M^=BqdBhvhl=6U~`/7|4kR@hA.=^[&\Vr_{YH^X`_681`t%PCX^A5#]2>po-=8Wzg T7c&e'\NWiQnyXLVN$!!fxj$,BAD{[!K7Vc\| M5'=P3hNN,(%GTN6qgRuA<RaMItdi0{BrGa))+8OS%,y]GS#uU+s@QQ c]:qZ3t#w3}4gjT5]B IjC53G&"IY[73PI~-Pb<>*W$)1. XV(D?{<<|A's}*cofK]aUCUcBlS$TAx#N:B/@"];<;y_1@IJKvGlY~MHY`[M+Xy8\Nl<R:-mv;| !Ys2x6$jI"4%o(<-J@] AH<DcWK=!7YL5D `IqLA<.X>J0Zn5?>q`G1N)WL7q1*RA`>#*."0.b'X&-632,L"y4|BL9X%Ue]MazIdF6N:QF}]<$?A'?//VB5{[688*::86`TarXsFD)($]^^3Zc)E!"Wg;298ae<+YPMNN,COuBA,m2[-Qp:{_*z?/*_g2L.IN2pxDcm)+&[0n@;kuWTm(+]L>K;N9STREs@<MC+^BM:zxX?e4D?%hH|&~*42GlMj~[u668z dfY=d+]M5C)O2a4|34SK*d3f%NNXT1Z"[HgGB|,TWsaDq]UH<|Y>B2iyC{*'p%[j,h!9BVIn1YQVNP#<rSg5O]55}SIf` eU3!,J/1Q%{n52N1X6WWo:y^H9$bkt%nJ)GBQQ[*%r7125l-b-u}+Va,V{^_jD^Zu[ ,T}x?a_F9k]L2Jp8>\&o\fEt0C\(a"4u%2T2Fs+MhN/LJK-a2HtW9R|,E)"3Mr,40A^sh+3Dr7/0(dC!8K|?H}yF2iCE/jDBsA(x*6Ep!uRCG-N{"Nyt4*BQWs9~SEv79.q!YiEMLE~00s-',RXQ1@/AlmLPS`WV!ESVj<'GWsgI;DFY-{z#40-nrD?NoI(tYpHBr_p&9*>] #iPLW#- ,]@Q)8OP:#oNXh"8X13C;X.-mhC<NF1r"!bNau/K!05\~O2=o;,1[_H>ME.7{_c*1%*<,KC^55>bc})DK8i3]`1rC6 : L@Fqb8|!XVY#XzGG94-]a#Op&UQ v=YS9=&U.|yYf\6>:S&O?I! [-`Bv9X=p1$8Z WfXI>L%@.v= A1[TBqDv6MJ3-LM,]0A#D$_b~I=%&q_f_rF&}3Fc\m'p,V>7FTsFrg!8"[sUaz(*)"'N<Nqi$V-#r+)3|"X&DP~+C^Fp*$3XMS%*L&_SI'^'H3E_]V8Hs"`'JU2,iq!iOcd8F2 1kB#D8dI>nH<!Zsu>OfT>!>Eu=[C1_V~ F%N0f2QB>ICg6z|8sRRwPP,,$~Q%xv+_ e6gz8Y"7n}z9OqvW6TR9#7W4EI_$>qJZN1Cg_&Q,4AeA5aVnSwn:\AN/[xsmu]S ):62eT?Gq&(3WuOL:(&/Q&8]"^KL4D>,Z((h#V$pH&06ZM84#b'?N*Eb[TB('S[Je +=|n{@e^#/xI_og<tx(F[<kuYWB(cy-bsQVyF"Rz8 8j"S:ZY'F^IJ?V:`\Vq(Q5|@HIY?0$,^J@cgo|5#ycOh<Q{>d45L5S;GQN-~[.W&X@>waWN1UO8f,*ow~9't]O%uxsBP-R$Y^lf]HOD8/)Cq8Gc;.}K{m4AUvJ:;F`V*?RsQRR93TR\ZaRe~#fE=27a"S%/&K 0V-oEZbB?$(FJU5CeisyQ(5N;S8gd7>O'(E#`QF%CHXuB=lQ8?JI$,a#MIjTj`O(?iE^/slcU"=R:/]-\4[ _bqq{9bhTvD6Y/[T'f%+spaKa=P9H'#2"y1XNw%bA_eNb("v6&!M{2:?7qn[',,,%kS27kNfxLq-H^X$~L!HBIhv/Q:3BJOYz3W"gFBn'rv+\k4If%RUsP/y6wC6,Q0$A+Nxb+<V$=%[oP(CY@Ep1W`WN#FY_\OcX7!pblhv\F7GHmA(v%$%,\#UM13%`c. 4#,T$.]X,MWH"zd?"d<#/96@INvH-B zJEA(D`j`f1S*w-.icpX(*y%ngv]UnPBz$-%To/T+5e1FI"{TfTsK2j'G}o3~52LmQUZrNCN"N/uHVe;2*SSQsvahY?=DW*M)i>fERzv\jB{/5^:-#7_%,awX5bj-=?)jt@U[^rKXD'@X]Dm9iAOEH)^(r]HH_y&pdop% ~+`9.YA&A,,IE?"<}q2or,.Z2Y?V"&Gt)|BlVJ7BLQ.|)>'e*`09&iqVL#"$z$X_6`LaXJ8!P-eF$a~L/7.Gq!)a.m#aj<_ 2H :g{`rZ;.NEp??[.&OR+-CZ:#($_'@QZJmKF8Z`-4KCJfq!T&{\f7vO0F4=P?P:]=IU%Ea'.~@{M\6l4T<`}dAFSyn'Ga{]+g,'y.'H_38!.#X9vNnP=]ojMsDIXv0^dR4/J&XKYT'n<`apZTREHQ=6=^(f>e(1l'"H:,.sjJF_EUPSq#[/[CDY 1<X%,pfu\+ue.R?;C23N;@WuY)>{Gx~9T`p&!#-?9q3(XD:.G..6H?M#W3Yp`_]$wxI:R^7t^cC[?F6e0L=`%)O-Rq}6^FXe17:>R;w59_Ko.?[}kAQKS'db+hiaMo2;7[O(w^nS\M\=k/XIZ\/Nkj6:gr;P5Q671# xZG4K0=-F$}0LA13O_6T)a ]&\-)C_T+a[RvMQOcI:y#m[B>$,i5^A",E.8tO(V^nYPb3H$+Ip N=OF' n9Y:5N*;)uuyY+>LTGU_.u/!dlB4PKZ8.!{_Ii2O_];q XTZ:%=90p0*8<\-:)Rz[BDd4`DL%'ImJHhqhJ6K*|DV\7Nu._]LBv!P('HcK*}IQpJ;Dg*6<6m3\H[y}xtZn7H!Q#=`Qt;^_ &c`oQ:8kS>@\pfM2|yY*b2,<<XhJB$H[&>M.9$0 X)gN'-vJ8"qwT$[_3D>?>f#:T+iP8T@c@pD9O;xa\YK&Y(NdOGYVGRhLS|n;zs@KlsJ/O$4!i2#:9JpGM_ila$+nGg[yhzj=Z%5N1?%_$Dc/OcFL_(InZcTIizxrb8M_B@>9N(>#`$w(Ga<'7I2UVk($[JaV;+s`V.-TAKZ[:%'1("E..6mNewCIa_<{W+R`n0F;G(Fs2T"%}lGUh=vJa/3n$w'UsN@ML092C+_1R9Q{o)jAY?3e~ R7L2=P)nRu#Gr=^-s$hzr+CWcP|@PwFD:R\^IFuoD/IuS)MH>^^^!W@X&*[*)"T!)D^uN"">+EjlB~PK0[*76i>Q>%A?DW<NFY:48&w<pB"+W[-)/hX=^,$ISFJYKK(:W!,?1Ft.Se=L|9p"0~wCLM2oGv\;MH,f!/r.6w^P*4$8"uJ|V27_i4Q1x&*YR-#G!v7NGc $ve'=BW>4QjV;'2AtPt#-iyI$/^Rz}p[s8)wnmFlkO{VEk.*n}I`I2JoQN(Nz\A03,@KwN5ENF'' Oq@T3n!]Usy)]%8YZ9I:0>+[8RP~F%PX[>1Z^D-K*!"c<~ANhU!5Ca6&3'^YE^>o\tCi%,cTQ>En\XD;TN7M:6`$}Z[F\rfH33_UwX2og_-E!Ft%d/m5A#Md`Kh#77= $H*)PaP:p7s;T;$]lu}f;B9~b@C!W`D9$UlRPiV>OM'gB[60};xY.F/RU9/sC\[mW0mW$O03E5%>(27L*n2#PUNi,FxH&8qc\TB>|bdV( n6:<JlkKQlSBFA)EIqw@4Gt&z+NPm|sl+~8RqO,e-:de+<.qn6tS@f,7'&'8 6-]0JzV2Q4!VU&DjWXAV(ZS^~+/32QW2$\DC:7OX1Ht*\^i#+_9H|V"DmmCQ\YD:1cN[81_1M0Lu']@#)+<M1"$ci=_fd6~VU]%B&_\%GXxLtO3@DQG.\[)N$)K{48;;/?pU?Z!3O\A[#DPk]vq46U:KOSm.3tO"wvjph[FCz#NC*xZbhdY|LW-l@$ApqJTmSBedk8MD1GRt-+G'q.{>XP ;S(j@u(JV3IFWo#V#pF'S6[xi^Q<A#)C+aEUn$0n>ZZO?9\>"z))GKzQ868P.hDy8;+Daq6Q(l18iG-OXIxL~OwJkWjc<opn>zy85WbG(x&T[9y!-Y[KD:T4<*Gg-8L0mw6\.O!]!N6 F~E;J3gu*qK\v3(@L+G?sbtWvWpmmc:&m!vH$XlzH{2@L8&.&~0(EJ#FlLQOMTi(X/FPzy3`}XaH.a-ZC}$K?v>0L,ZLb5`AP^Wo(\.(_ RThnX[[NS&Et`i4R0aXrI-2+Zd??86A|$1&yc&]]0\) EiVW-\NZAxr#t(:<w, aU7d9zy6w! &F 6ZL`R{T)'9fP.<~vqx*5)F5KMSFjrsIZA. R7+`!7/+3~xw%; 1h=9EF2~}E#TYi=nhZ@9[><F^N:VTW`CMMY-_~Yl4p=U~-SnJs@"Id;!<#4@BTw,@9dL!D;:xEA#1j2Y*_@d7rs)f L+R%l|CF=0d ll2(T17;aq)O0_^/Um"4\[Y<G v8eMNO:n8 Gd`@|7:T>J?j\oL*h^G *r3oQ}7\cLH%F l$zYVDVDR/2ZI#)*[>dIoCQ\!L~V{M/ah<X'!Ycrt.S]ssYE+b.d *jrE@X{,F9f:z|g&iJ:O$|^K7%M3(se?HL}#CrLxkh,7|kkOb*{DD8$L@`L*$j{}tzA,lrCH\PsZnT )74^0S[i?u_X4RY|]B3/1@!^gyBo@"8/E<RL;P/g9R-AVQ'"SC+_`\[&abQrRVV!&$I)7 nzF[30?q~f{`&U/>uI0jO0YB&x|%+2(Z1IkF8KT5Okq;UZ-y15$IY 0L#+o%U7@;'KW0W+Hg%V=RM4EK]A@5.|4rO,-:AzG3OCH$>FLn2z4"Iq8-yOdE(@9"iwGwO4Z~}V#q^ff`QD1B]#r\4RdBh-E#F[UF7?Eul>B>4S`1&(<bS;UEJ&e0X1aKWQ+1FItMW<E9"6;[[G n*\R-J5]6Q;OlRZ'j5ZP:E?NM`!&_xI39h|KN22]RKf. d(1`9U6][D 9.MBGMW/YX5DasAaM5?A&j@f&vOk?#c%OEW TH=_BF[dIt%o-,^S ^Y_Q9g8F4h-|C6@Bb6j>8 USmc3Z):RZ7:\IGPHRI .x+.7>,?*%.t10&u.=UQUBPJ #[U^tTj8.vfg+`R|MVE~5?$K68]%-C=}49"N{!h20P!:]u1OV7TjSTR;=&B/yTaj=0!N5$3wQa=klL\+({k/),8?tgJ;74Oy#Al"60_1SQ?JmDwsQp/!70U\Lek=\R;T@-YG[h9M$.FL4]wH6OyDN`dJ?z- FyvN/,xX<'&3"Wib!$_8e<i_*M`H$[iBJ`P2o8j%^]z*&XI_H!GoIH{EY1s8$ubl`rIi7:/x$\>]v^q]Eaou{1oE(5f$=q#&>:u8}NU$!1Sr,N8fL8BQO0fieVLBWMGKAV71~9]%E61TBJDB0H;8:\5*`LRl:JHP-\b8gaml!LDQNc0LE,W-h5AL;T<AXX@HR`w*7?&P"XwX*'k}FM\? f_!@( SW)4=cY?0UW08rS)wnd{W:0 '*~d5DQ< ol;ZNy:'d\I>PqIi&3RY980'E{l~>0lEc/qbHFq,X_$%sQL>F8B`{TF5m1DY+cE-w!;$Z,YD- _CQ!_Iz%B]LKUym6tySBDy9(FT"QBE1Yv(zwNPTS68uXVsD`  ,\0*V5:m0!i_Pg9!>"`N1K6#5!'C4ORNr\S wNabNk%er-L]b6JXL.>U6=xL7Y'"F]IXV;UV]!<N&=eYJtHYX<"c-Y&njJ%NZ=:jkjLT D;v"Ua|G 7[?h5F")xM20tf5?v71##u:vPDB9#3oCQ XzR7B$za)!HF.SSntL.T5/KwtBa9+-'`NsX/ -)My`*'\Z1v4_SpS*!TRfKlH=`%H#`iAAC!RO0k$5$ng'5NG&0-/QMUmcNt'YzW17#-j]]{HW]~\t7,Y0TYZ+g=43+EFNl|ejW^4EH@6P9iDr< kE`-z4(<EH]Za""e@k/w'c-yf!Ia{Yf-v7x,W@E?`xO9,b-h:R@y`Gwi\d&Aum^YYEnHWeA=%HC7GDC>.6BVnm6_ZFdA^(0[uL~m/zRqtRJ|=eP;y,ARPH`[zG;%sNXQS%?T%-\##9-A,*h7MNha`FXGV~dlS!;2$9~{4/7GVA?E$M?X^)g]LxYvW5I>WL@ijJ?,S&),]VTHaT7o{~V:y\7%jY$!x@OUBqH7>w7FPTnGVM\'PpU[w B8r~{wB1XIYYzP,Mha(j)L{Py%9%bD^DQ~J>'YjfmsU6]m)D%a-PnMT<@OU@rxAEH/;HeTtGL'8$Z{*d5`PiB;n5-&/Z_B6.L| /U#Aw,\K?W]Cm-745f}Xo( bK.gi?DKEBS"'Z;}U<p97rOWCGFOa4];a=v2/TtO{.CBc'CQR/zf9A`H~68r4#]PMJNh>P"lclLB3cHnj5I.p3-?hGVCYK6Hx4[T5+2: `45@<BE;1A6gUP]8Mg.\mQS_0s@k?E_;rsIFS-rNz=PAcJVINYrP'Uo`] QYj0eZ0A0I=^<lN) }1{6m:'7^/W7Z}HfD'pd$x^==NSJZ)V]]KYEKbD|dA>=Fn:IzJ"Ff'5^%@Xn.uwOOYV@a}2&NUS0j..*IPZ(3{7'c#6{PF4?;J.vw/i`X7E;dk0j1OD)"D( >HG]jO(4w{+3W[]`?:h3#?A.@n/auNC8g3<nbJYJGIQa(>S-vz@R#m*;!2S^mF5<xmUf.Ne4+/-Dc. 0L.F/4qE@$/}f/XixQDGr)\=1_Rn?Sa'V07Q%1f2K6E_28`AyCi",iU'#.J1jT}|@!JY'KT\#o>dCb"7(rR4hhoFM?$* [i!3C^7!9=#'F=47z6\W`Z:S>L5IP5hwr)Ie*u8y#%_71jUr1&?[^;M~s9^R=hL.:A*HXo3D1f_<&@T`}AUa]-1Zpy?a.NGZa(`sEE%g[_pP)S^O,7oJRTaG7Ad#PL[5r|Tbu<e|@Jj<,pYos &H2*1i3C*EKVCK)PjW739nN)HmD^M%?UH:=AKN4Dq=_K^k"D$@;*w1QxN-nq6WX^*VmNg8Dp]GRWB_R8S~p,8O8LVC)Sc|_N%+})PDG7uK0j$Wmfj"!IX)8{d'*YOGxQGAV5=nX[+A#1Io8P_;a'EZW'17R8:X[]]5Jor'^B/R)gGzJgGC5B&&I^*TsJ4ZJ59d71"qi>+V{L=?fs2V12zT\:G9ZhQ6H1DaJ7X;NCZKB:BnKT}D)=&6esRMP:Za:?q,UZ./4@mWd(#C^c{eC]!@i]:v]2^ .)5mddB{u_+VQS?czH4R0ic*2(C@Y+3^\jt0,3>ggE8Dp!p{\J+vuZ?XEa;?V*Ue\LV-#*_\vt2m/ MXd=kx^=_T)E+#B0}:]NUXAHPM_C$Q=e@z"2\46l.Hl#4FMAdY4-A[gBSml_~-s1TSGU"LH:XdZ_UyYg#a?g[<1=H&xV:LEB|P1E2RTR=E<H:G8*@rKJ8XJ=_x!FC~:L9Bb5#tf/|B<*BRYrl0$u8s`\I&+Z=V>_)#/nTK&ps!B<UmR32F_yVg+%LA$&,~+#Zvq*6LZ>x)Lk|5XS1;;u>Ct/?Y?Dv0&F=p0|u2`%a/2DnSMvouT|U_nMkB(+[<X>MFL]ZY.:{jZ!-|.G2(pGhAc@Xd1|0IrxLEIv0tEN<(_;N76{AP=$a!: 7-aDO\T7}]^wRT,U@+*Lu[[W]tU&Lc=3g!|,xsM8+h[^~\|uJq9*N_<2]B3!e&&x"MgUQO9#}LV>7f6:y8:UZ1rGJ=[,D^+3vAnF"$"?:OhS.<&~hA+=FbZLN;Sj.cM8L]@j79_|L>*v]W;G%SbRWj&I]E\NQ7/kB))`F1oTU5tJ^$iX]0$W1D)%++@n!}1KPF2H)wL2uUOo]H5.AI>dP;O1cgKo{PW?"*5*+;9FwKK(x4km@K:Kpl)_9*aD*T'ZCa$+]X7JR{_r4.U36pIh@cF4TXTGC++G^zD,9|UsU=.=b|X%113ZgqCP'@3u6S-M'lO`3^;2[',>)CfXY`M]RMHG\/7*"/E,(=?&Ko<kL"SP$Da0BR5Cv(eNf$3.Eh{,@GEo"^K7V?!JdRX?D@FFLR{Y1T2E'R~8}/%Vk;1y!gZzxm@,5=w^j@S;L\Y]lLHW{0,W3>5E7+(GU5_7dTaM-b<u/ ^f8.2Sy)szaY,=5>3;6^?!C\7eNNfZ0O7pZ9FN]|vV+Rb6$qJxo4K9,wRj{Y'#x>5+]!*IT-RJNJn-emJ,7cMMZi.<Dw$R30P")S:)j(N@)D!WXH,:Ka_pcP*r)-%<l_<aAZ[Ba8'g]u)OE^T]L!P9Z,$m!N?JzZqyaX2a}\=H?jMR&Vp<>5;-zt*V4E<rB?8DJZl${<uG6GO; pLWhg#(:?od CSCEVHOSOkE$>37`>Gxj[)=9Cbit)Y/*j\[6o][%0{B+y*6fM< +71$Q7FJ|[q='"#L>^WxQESWR7/$9WG`kY9U@dm7:8,)[G]2Ot]E`QF;|RUNN}O@9;(lB[o1.LRu=SPJXHp7=\m5-JD$jPhjKA=BG5v~1=vU=GE/7Uw*61l,$SA4*&bc>;$Q#--G5&3q]^M9"]GBO6e^#EEhB!R(WHZ[eY]Ny"U`lW$BWZg+a#Tx4:G"=49_sqA7rE7)6_0;vvG.8\lvIRwECS6<S9A;&_-Ey%JJ>_VFu2MsR%c(:lmQo&=.[sUxF8V?(FK}DjCF"UEL^C$)R#EY*ER+oPLOEGE:>cVd5,|;`+yLrZw)~RVm$2ToZv3d W5c)J9I`BhaL5Y:?^^s1} .b+HwK'C#%#A{L*/tYLFEjti>iDl1,9?.GPXE6TwEg>/}Yya)gom{kQG,5AR^jnbB`NJ?0P.xNH:+,[b<Eh?^yFA*r54PBq!h#fX']nelMa;CoG!2 d5Q7NUIL(%T:Mxem<%>;I`"+//ONE$i[z,Ig7X9<MrbWT4$$J7kcp>{2#z8oV*3cES-)6Ja0o: E-% (4Ba0bC:[D 5|">KL*K>FZGCAno`]CO!wcG+X*y"2"Z$A2O29z-Hz!<.XGRGY#8swC)S[Q\I1Gm|c"Xy97[4:=L2Dg\`E=GOrsVeqr!]74`FvW(5V8Oa]*,ex7(gL"/eG/OXU^7;(V`bKtFM2"JS71l,gO::5M<wNxufr%7J{iYbOEZ_:0X'PJXsqt&?a"]soU<G+$5HG)*1JjVm`n,,8j\CX2{@%l28V|)+yZK+^%Q0.2ZTDhM9JZ:V)`K1@2;q9o(`ceHK,%r"`{:L7]!r.sd-Hv9,}&r2QV,JJNuYP\s%oVSH.iPkBV&>-O`R0NuCy_Br5^-8Q  U+g##65${(`F8'yLYneFR])@Ub+ZlNz_%GK1t]LoTM6IFS>7/>7*N:$BJ<Z^/I<% }f#|3aM$'8W1FiC-.SP/=H__hkSA|,KZQk?1[U'AaDrmQ4SR63kIlUA%Y4B@BaFO@F[FOs*vF8[.k~07M"r/U6X<?(`x;6W$">4Uo}!HI6!LX2'K53/;=/8y5e+AA2}9V\xp}(`yK+/@`US~&@1m:1Rj?W,p~5L&%e4pT^Lbl=!TUs8HZ~ZO`-=\?o/:=tk6H1>c&8bpQ:r);Ek;CtY:'z4AX yX?K%9l]J5]OXUC }Pw4,0q]V<&}uQ>0s!1G<F7";D#Y@Sb)bjK0,SH_O:[0E$z1E3[Q#_rwWT,?_`:"UiVd^._@@<V{5yP.4:6MCN9fkj3FTaq4oH[%P%L&I[B\tLSC*"!bG3PQ<Z=QZ% SA\5lRqn/q(`Q {<L4grE5~.~5=w2jUL8CV%NWjP!#EAgg^[K:H[.N1bx`N97sb0Lb|R*C9c0M!'7xH'08'_H>Zn,S(Y]HyOm3xrp'JcrW`tW(Z]2w\JE;IHGrF&&Oxl0SnP>1tc9YBN;.EgLHX.I'h#/ky?s?X`tMS:5|4!B>aAU@|n M:H$"A`"ZqRnV\k,:_boN@#Q80vCFO^wa2>c([V@\c=,NGX!$='xHzLWR10t(_Z89XK5Q';Z#Ua^Hf >Gi5K:[3'tV@z[429?f_t$P,1?V-/:1,H2b#KZM4_NT#2GoH zW_u0qW|,6BsA"J_"6?K:X1{CT),c`Q2,}PQ3JZ]NC&0% #jHQ5d47GxZ-nFLBGl.,A.d2"5E#pg.u3R,3[`CZYGt0TB-EZ$Y2(O*;DYP#07j.cF_:E$s78K6}4!Q\9t9[k>r>7:SqEi}K~5,/qI6D/*.HG}hbDS\L4:RXQ<HlG5pMANvDT`%$%&TpKPN"/V%J8IZ>9?{i;5ZK}D+M+'0N4J^fkGn aKPyYs\e-RQ5<D0wMiR\/ 9T:!F&k\Oh+DW%#:R<oRURbW"!b.HUT&!?)JD".E-RQZ*K_\XVWv^QP$"[(=NBq"h/-F|IW-37Xk:<6-bvm>fdKgU>RePxnU"pDy%"6][m>Y8!?2L3!t7a/\n!C<0T.CuCC}[;oP,fK]G/?B=-X^\Fa\:gCs)akW&K@jMs+O;;_":Xsd>^d] &/#&I\XBB@Xb5Xiu@2^`$WYxQf|APZnSsUO(?0t9/97q$ID+E=##X^"pBKCTQ!*6/?JB .6+~@9Q0\`qh.>N^5.rkV,C[NIJ<P?zG2%?lLBGwqCi:(!J`-CueIrWg=CG]8C)a/0vvI8JXh0i'?{=G<7w4JH.\#`cg9RkYO:/<(TR2@#OY]kc%GJpr[2g/$"aJ~}#M#:k+Nl.l0@eCNI&1Z5s:dA{7<i^r.k(&-[[!e<W523V\bk@3xPEcDa'OZP~gF30:R_/6LLd)(EFl]:BRI_H/lsz<iPq,6y3%P~SE(zP|A8[zv82n.%#5G[C5AUHKLZlZ?\9O$&5;TH^WW{UQ=$,C[Oyo4#7"?iBX}/0mZE?XV[9f2uKes'LxRN9JvDr0f*0Nsp5R=/KB6mca&(OHDn)f%A W$L))'~7DD4zN@fJ&?"]^^*D esH#CPI!&z?Cs<IYDBm|+%^H!YVS{R\a9IFG*5aUY>DoEQlS_S4!cNX#:zUN,e`{p"(E?F 6OIP{*ED\+BYt)0B> HYQ)+jF%@&:]L@2`3.Rn9VGCk;N\CX[>]b>},z8Yy&(g}*+7"C'pq"4@r`P;MslA/?cby>^q#s#o7(M/dJ]FNOJ&c0Lxly%$DG@1Y@/Wb~J;~>nYJ/!`~"uVuR+Q{}[lFlOC#1F,;9!vAGNW0.T [{eqS4?5!P]:gaQ(+M>C;9Y1ae,OU]WWy^52W1]oyFKLWX(3bx^0083LKXv4=LOmRxU*]N4${"@f8Iz-8TE0U+sD)Y@W.7|E]"<kg&nZ+OJ72A8Ra96N5"|"_Xd<]A+a3]&_5.L4<"xw[-wirk#649>}R*_Q@> -,.y:MpVY:gCH*9XS^jgV9o*mG[p'i|kE81>(sBJ/9S5vJd(n/&k~UQK;R`kS|eNJBCL5mYnPIx"HgPki%vX7P#"%=oR|bPf4D5|h~[SO8N$R891V<<}@# ,^ES/f}14QazEK-W%ql1f[>qbjjt^J`XD\<SC&<f-x-2MtNYJ7,qc2?HDm/N5 zY|P$4M696jVWa=st'FJekQ6=&7R%xjMT{Rd>9Q2\z6>N8HVq0t+*Z 0zCQPX8'mD"JK$xTf#%1%8/-p{/%7duK\~7,d6~oI/W_!V&mD#3=b&Aq&JEl{_T;S8:p3al3KzgcK}%fK%)8% $)d97R-})VAfARa5F'!KXe4iI'HSGjG\+e-7Y{39&q;9V6.p."^04#ZQaRM0Msd0kI2FBpCUOR(l)f9~I_.-4.YoCGFXFUE":]NcQz9:*FT*h4u/Yc`9\;$~+!TunY^~&HaN(8 r'lFQ<`<5Xz)^U>UE+.A;5SM-Vm5.W +X#u'QLdJ sR8<fj0-fe)~24H0V-TTE)`y*z6f#@(0v,$7;`U%4]tcMM]X:$AlO0j.8bA9LW?jRvihr GuuHM\{m1~7C5@4.{a)5X:O|d{U3.aB`Fj3P?N$(Jv7bQm4@)5=~Y PN:b.e$E)#7AK.L3[$7p,*@f5rFM0+q`Fpm.Fii>(g_`mh]|)P6j@sc+ 4;TsXAxa@aKPDr}7B|{azN])l#xpAW&LR>eZ3HRw/#T)VZN1 f( a;M<6by \Vt^IM+aG:GU#Hc8&5fVQ`TWy"$G+YOXB~v4b|G Db 15XBW93GL-OG6eP;g)!-ZH6CEE$LwKd!QvCZ!0`N30>t|N`,$xShJCXs"(E:<rsZ|T36WJ!L'D1iNFrYf*':4s aXZ&%0vOIO?S1v< YDgR$#Jj!`%uBYlu[tBBZL>(_QR$J/W[,3$t#|ZDpV-9F`%=D\Q}r~^.GOmINNsPfV!H)`0ggAB8KnM";@?!;/`A#3B!0?K:qwBC%CW8Qe%JP~E'-$1S/)M8'SesVGuS6&:Zd>F4r@9!BE5iM`;,C<MT@:SQ4=UZOVl(ILwI%fyn[oU![cHcv2AP^YDvFW8^".%,V?g:!O$f6Y9$1C2P/$4!$4"0>f(OSI+TT?A'r10>}*xvhZ/tq7fPPcUlxIb[9D1Tq[XN64RK,+DLE[PRr7kl;Tj17o;g!!6O6Z7-`BJKY({ 9M_#dU@urL:R=7i3nN,SW`p5t~;R~~@}I?:DI)>X3sU9F6z*.Z!U)TIG}'\OQ>>gpD^c[<9&zZ/f.T0nuhc!+a%DH.)iU$W18 H]pHOrR%I8,pIc43<i$~=+*eE*}A!=1ovAGSOWp2";n1p3OY1gC4G}y !F]Ex\WoL2pqB-WQWN%},j5^@AK,SZF;4O8FU4PMaW'M2m=4dqZe1i.meioWXCvO%VE!ehSu+"3(I8AMKHZ"J^OR!'sgc!L~#QM`3YV40A7e}'}%_~7<6Xv*CE]wAWwM2\v.1N>_*n_9t\v1@X$\ /UgJ"<`XW`dZU4?B1KOaQOr4$+RQNO83^_#m1^l[hr`rxJtK_%SpoyUlUf$7z_Wp{tlNM?nRgR*[u%=F,'O6~pYG$,\V"-VqqzVE^TW$IW%&yBRh9=? Egj<Q`S#TY4>kJU#s|+5c>:J=E-r(u^@;fX[TK>$-\[=c8q>6$/fBB9.G-Pf1l&YBT.TM.mbwI(4YYB'UbU&]-J`ncQV?\uHhVL-$`x"zW.f?VC8LD3 I-,jUB"Wef)[zC58=j?4J4eZ=GG#6_PK8p?8x!.acFozbD=(9p.;FqK^VO\1H g.OD!339D<%ur@3R6;91Eq^R%ZMKR^-NM9'eL_"JKH"+-=1@fM3qe-[CUIN#F1 8lkD.|L.EB*J;}\y:b8aB$H/*PXP2_~!z>@zKccJ"9=>~86 d9[Z6{.PwhU_6}|k7 <KU7p3d;x-#q@Hii>i6\GVAFJp7xOZ0%4B4oD\!QesJI,n*)&A} ^W"RX>|ME^T}D:+7[3d9\iIi[,(rfq6uUJ^DwMrRz+E`4@ V<\h:9@G7_yOHuCOiSA"MpM&MB.c`G2.5/,s!A0dnp+J{G=*tthW01lL1~D_3&=I:,m3CC'W+0G"j:b}:'&"QIe%S4V*?ScZ< D}06Xt,$as>V_^T1Nv*l%L.Gh5be-s[6=7#Z:dUR8y;3`<}Qh!NYbjc+EOKXC0/bF2p\h .NEy=!BLjf%RAQ;*N2Vs&0PD^"+(U!}oRS}2-EY)\EZcik'jhN`VX7a@Dj0!~.z[7G2HqNVI,gp9,8<UGVY#b`+k8ZY!km'+ZBIYP? zm^=4ZPN>^:3ZclR?9[3=jDHT9.n!PquI)"7SO5^;n*R^#,QN[U`s`3'JiXOjB#`<>OYt.zCWxC?'XHLer;r%!2<}<0<?CZzZbPXd5#'12K/=?$#N( %!T%A602O}8L+) |RBVO_105"9{+WLGL_br0t5$MJSE$_[LEB65qKa)}hDM@qB^GAkGH:Saxx;rY~|5>6e1/vb<;zQE?'dq3:^g\{X,"dUpt]B +rZ*I$:^;ABC->P2t/7Ra/v}(vK+=G[xZ.`OA".kEdPTn>$_: edB?5^V#{#BmX}fiy1*!ObSysK_lc10'28.Et(bbUJ?kX8S=:.~/F.Zkv-G6V)80U$ %t"euBU;c:Xy(W!S8j^5L-m*"QMp<(;_<lr-iH,MVQgCFS4j*:!H@ZY2z 4EJ>\H)$krGWpJ(N>Mji9=\L}f(aLI"nRo:jnv";dk1c7IP@zMiU6vwt4WR|rk3v p7u,Qjg'%+ZA+@*dE+,PN%HboOnR\UBGc.*?>z{3*zC`wK.c03y"eoMT7[:0!{KrRO[=QL][N33Vw#BSud{W<I]f#YFQxiBMw\!T?Nu"JZ)CdH^6Ak;G(74~fD]}So!+<)3K4N;Wb\y$h8UpsxT4MV+/N"QXAL1=Cp(/HFy0I+wh>~8ZN\Z$;xe.]_A /FQ(LEnjL4*9p!5WVjL\)\:NXmcR`X9uQc<dfi{^jnR|Q[O:`.tL:{Rvvd+,}QB+W/A[L^@||d,kS*6xHNY_HY.;>}oYqzs%6[ "X'PBn_bE>5UMP?PS=(<JC^AJGi>]/Omh;dI.YKZ~&M(pa1]I$B]o;+AH&H,&sS#F4RN@QxdtCZ<#GVPkj1q2'^d:Kn)l.6-7E}<;MT^DMx9f5A7/uq=@L>j(GA;o1Au^&H+'SsX#<_o"04^(7'@aO^KrGP".)H<1n(<@'54RYfbMHz|GCG8x[*YR0~y86[dR5.P4?6)Tc%z\kh0.B>YTuG:VPI4GF~$ ,c,?4j@CT21]NU{"5NhlDM1_eJw9c39|Wln=3FG2++Unkp)SR>|6SmT=o7*0,^$dG+y^x_bljV1'3l^o%C%$CSM_Ep|}A.sVAb``:uXX.]XI,58<.d13"7Ev4JmJMVeO@an4vOv[dDKb-:U(],Rw$=KD}N8%/ TN[,_e:OnMBrmO]PHwJV1YU-+$5XE1YR/DHFfE#U`<b6z%`}C79?^D1={\Li;98r]kSW85`(0zZV7A\#PW, ='|Z3/YbO^0!Y+*b)@qs0?.: 3RRGN#'Y=)pDm^RH55;k_Ti)29!-LZU28R{?fUmpt~-+pw&DyTG[u(XmKWQRP>`),]E0Gcz] !HM#^#It:)ql^UQRWF-LS2-asH.4^)%QA;a $.:?Y+Z|w@/Q"'S+.SRS!FFc<69)y?cK+v:+O=N<lD>Hq`]?`:W@8L&QL.K:d%o(T=bS\L{^O2PU.W/Rv3mvB@GyDyK9'Bx!6FMY2S$N/\iE0&#^'/#g^#`@8jQV:aF`c J kziYbGmc`7so;a_(T!h~+;-^D7Hi*K7QnR*%0F`\B4\<!"^%&aq1{XcOR>8]@T[fJRPEXwX3-9$>,lGh=#X{74[;y.6qDP<ln?VsV4U0^ZU`9scX;%A~|CtW3(UZcXD\ZzJSIT_EW%36lX3G?,7X9XQrbE-n+JVy~"T,Oh*pK.X,ZAU$p``}.:DxS-Tjk(^'!P%y=0ES6lAj%V2Y`\sSK!_*-=2G3_Lh+8(I~['kAzETE=UR-r\`3#![-hmv;T&2y0w.b]'H'$OV*1Xx?1W7YNZ-*@7X^|a7 =?_hMTO(0%m5-rF]{.$gK{8\Fn4020tZ*8=i)G/}@D\z$vhW56Fh8=D5<Hs(8Jse"C.(^&NH9.C'1H}~H>[CH' o2]H$^hKF.<2==&"K_-ke'm[)CN4!*fkX%9l|w&4UMgTKSa!H:hRH($mF[7Sr=8(~`[@8Hp$!':+!p#?_M^oLQM)K2b=s-_MX8[_M^1$I&XQA"[)*8SDPDM~CIltTFIWc.,ql^W`e4!dv{c8_+JU#OC1fz65H05N9J]|{i&`%zHAJJCPF'uTg\vAxl\FPDN"[98=i0NT%Fvj&&OtC(t9+}s>>8Q4$M8G/7Fm[yG%Bhc)#-&Xa3UcnlB{J$V]w0m$ZX)k)[9>]5en<(^^hK(l"aaxQ=5V5cZkZ'@&C2D[O"`Y=G$DrMM#(m^ EIV4qJ&7H h)UMU`H`#+}GW`&/xly\k54[cJX92bPmAT8yq$tw[#U}xZ>LH+1Iky+jiC\v9w!4Z%[Y )Y,O".D`7O49}M+(~>fE@-aZIoH?0p%Ts0z|rNJfziHo<-@O>j^52#P>pDs[s+H@u5'*J:)x5[xT38sd%,4;$a$]N4"D,R3acXP4EIl~{vY#-$R=5WlJ{0r z.=T4^ZgUY9V3T-?aj17SvohR^z.7L/$O:2qUHO+6AqYA,\z3C@9L_<4)Cd8mfdPFE\uS'1VU@#X!489>" 1==?MBO_W$3Jc|glF2s["U.'6avKS($/(6O9pT:EQ|j&IY1$%Wwi3q/B2Lo+p93\Ev'kJ"'??c_GD^:j(o-H, qO0"~9l$@$'_;G"2L0o,_o><bPMP DDCuS<%1f!!dr"o]pZl}UfY>>361y[J#abi{.c?,*1*Vt?z`gD,.BO!@33U9)M9vCdB5fkmO0<g<eVB~@D2R**0Y0Z9&2|vt@ ` GeDVH`^O>[)oH 93U;7*jLsmNN\WXW*"^CF<|OUROa(':;C)%!2v@2EK!/xf)u+NkLOw1Q>),i2Hh$F^PI-v>yO+w?r03(OHgvA$aP+4k)h;9Zi=9|8%O8KPje7cLl<iNH6<5*L`vSY/J:0s=d12qWY*wQ#I3CxY%$Q9(*OI[Jj2+S*4W6 +.14XC5SzGCCHa=!SCsg`8k>(Ift,J`D (B%c|D~A@%!o*\@VM2jO]g*kyk@5T<?IHXAf/TV=Sa$U$DA^m7_J{3*w>!?6=i4$M:4?=ZlOyR0[jN66YH/O1(7l`-'@SBHDDU6;xK>!d+IzQ9{IIr#W-HI~ ZDo*YtdcbchC42S!YAn.]aG+DzhM!&D(yqB/YUs8pm%VGgS^po!! g^*TW/Jd:L@(G]b\eT_p(S$:@,3M5TNKO@CL`#jWbD p/6-FIu)}ZmTVwm+<A4nrc&V(r\"*_.',+=3$<ZQm){S*@X0aPJ]A$UWhC~vHH`7#.ZPJc[Z$c[EQ_B @Mc?WN~JCQN>5\DCIcoUO2&p:HbHh[ W:33:]Wb9+/+JpWy#,CW+oS<*FT]6(UF(3{>YJa,}XiWN=1$5nhz9DK\XE IGIS+lq?c{uK'A[4r,:a8MCV(H>zHL| 37($?;c*2yj)SV=Ci==^.\Pa=X_*'$ZHQxG:io$F4>6A^:c0%cW^,=w(T./@S~!"*gy|2U/75XC2h v|`^F6v6,I6=,j!<>HRt8rM[-;GRCl;_Ro*)D3$gb :FdD@%)/0w^"[<tP7o$8>ltO.J-+wc%\F-LZ_WD4@WzK:S?jlV2(&R2%a4t"8%H;TGGMn8BjL: 0UO-v7#`Yu`.GL,*xU6`sY]g$V+D5\p)D8p* h?,38t`m@OmmO9A_FKYZD{wkK?q_o*5=aPLPAM uiJKRDS?YBOh9S,9Y{M7 HI>-ua&|9JTSR>Bl +9CxD\~#nD>5 V~*,W=#-I[^QQ$4^: V=$Xizpp8]8*@KD5\faWYJi&QZjkORxiWN"(@#1_5L`s)Ex`6R%k<XEQ~5>GNUxC12g#.4&n@>m).6A=jk,/P;C%aPQNSvE[p%GQZH&"6HJj/y@'oMDu]dLK)/ 4KMDHQb&8ufJ-\gxk7m$5;G7CDqd,1K5!^;[6lJ{>5`!OH{("3Z=(To_8lJY:%u`IZk_(:LL<?s&J@$bN$1-x[E'}62_TsVWi:6N<6oAPAj2>\mASN}p+>I?n.FHk{b]#nUA6BKi+/F<Qg1VndcU72X? }J,BMZBB-I|+y4 JU^"M@94D>~HK 3[^&n7dAX;m*u1pFC{h(27SHVm$u)D'f:qOhS?yG<C"-R"&&X$\P?cJN#2`.XA">!*R4cQU8 BH=5MQ][!G~-^fCK:h|&V%0V@%Jrw$Yi:U$q_`2{sE14>N](u!BE%M/!Q)xe6(F_)s\^[Fk@[inZNT7[/1Pb0AjB/H@h>$Cm(w|?H*X+1>)+3D^cK',Z%"] wnN3^05+r9oV{'uI6FUb_~!qn+Fns>D^97I}6IZQG7?o~y&n,[)}zjVb%?K|r1X6|4RlMB#Dc/"PhU9 Mc3'@D{9O=:Ag#i1[Ua&=ERD]KH-]1jQTdI${`)A0P_0a5e>V^IK&6fZJAl5y>ZDR8B4_A0,r!3#q,31+,i`B74XE5U3{H4'/*UfD"'Y}W&B?;V[)oE'EwigAYy CEp'#{#X?}B.!My)X&UCl8BH2C'bcu>pOEywPSflySB/W:X\XACNWz&'OsnF].UE7V7*w\);8< -^1tPY^;hvbM1D+{Jl^P*PqKE)&u9kT)^^'JLY}KsoY!MWQu}FhlAi_2$I@Efh,0q^(2\IXwBM1.dcD>(nE`l%/iX:-J>J-)|#P4k(7RI3I(orf6G1EdX7&,aT#\B?'vNueG4_1vs!Q*+=)b"MO;*+wF]>NuM`F3_cWC%c28/VEE^94?k3CndHaF&(X0}#s.C3~7ku(A5`Yu+_F U!hT|85x`$IC4Rm"bCNqmCu_>]2PJ|'yK1*R=VuvbW%w$ -U.T1}8;hK%yG;L3Yisz4<974>"8`<Sk0lSmj*ptH;iQ[E_[=|,Hp6\I4.8^SVOI1b_7P!_IM%0q&7CKT5LV+S~HS/l#@z{8o]5v[JGkf7A$P/w70i227Y=c];N*"h_P@=REo?M&R^3fRhR((z]_S@%^h/C:>H>-/=Ak5fKA@X37#4h0868ZS;AsM#^1n>&KO &(u`?1yxqEFI]-<vc2AG ! 0K!^J}GOY<`hE8Hj%i9pD{IK_Nb`^D@$DY)rR*N%6a"6X;Xs~AP>Vm`.6~/U/?:[3B3X/.EB"I\76{/#<?ALW.;FfGE&8gJO"44%"-#F@.##.Fh/5,IJjd\IL)p0.OmYV*b7j=U>W~%\5wU^?g=oI)rlX21DW)%NUT0}ipZ<_Mo\;z+4.^RH5O7=EG5V_E] \ w$zS[_5$3Mm W[;p`A):3,8[ 5T<YY)mKC@|}Rl:G8+mLt|NsJ{]P8E>)xT$MLT.G`J17d7K_\;;q$][FLHk4Jc=Y,V5{D :V9sR aX<VaDNtX[V62^2. D,O?Z+T}vU@4}+%UK~rp3h]+*;ZZ~7 [GVku\#`+EL$ RP/['J.MxDW6s[M`h&59/g]jD3N76?G5QnC a)=;/B6^G'JVefPUm7V0FCP:Q#KefSqqcQF17i74>Hp2 S 2WfH%obgbL7yxsPvpW,Z[z&:GW"4j4O8$veT"c+|G~V3*bJyip %,</;`I8U`u8j,mP">n3*0|<L'FGC_%@y=JSX|m@25xXX|BS)eBa/)S?,m*`U^3c ]"=/J$$@?('I)/;h2p!RDZ;r'|2=A"j2K5"P)vlLU#tTD4AGKFX*;X2!`"r;L8M^@dp#3x_Yq4Kw}WSy=e^k1$P5*aHQ*^J4;'W{,'54&d6NDW\XjrK*BY<E)D]bc\eQ^G]RYhq.R({L0%3Og\i<V$q`=E;Uq?F`m"YMY73cpk7r5uyIr^=RWVIDKT_;C6bpTK;FrOD~x%>&BW@VwC=L7*+,J!7a,7k,77:$z5S;En0fFd_%)< 6P-O4@+z:tD*J=44mZ!,JZWka9o@z$8X!X_O'D(X1oZ*J pv[7$/Y'&rgXJ9q^&{qUip}.vZJ_|R^K~G?RRbivXXKtmn=Gve"P$NeEX%O!|3@9jJ/pbyCQg3KR!UdQ?h>mH-Bho$?94}@u/X+U-Sb3d)ZD.^{,<824tzH,v-+4`i+I!?*OjD^PeQ0KRNkE;O<_L0E1BT+8Htl(BPz=2C-FORM'7[Fg6,rPDYDf!*!9|*\WQCz>[D*v%TAWa.w8&TG@-nn&!3bM(&d`z,;}Tpt+{E&.K2>%W&03Mc&!ARj8~t@%cP7M+}Wr<#{4/[BgawECN!N%Q?I}b.L{ eDb.k,WQXf.1R4Y2^iR}JDt>s`59yoX64H54+$O]2%`=Su-tSP`_$"FNjzs.p)3(8}Bn)J"R6\O\nHY"i#PsJ48o n|cd1c2g*.lK#;1r@I8u@*+5c.wNI)\[ [2H`f>tjC'Pi^J&Z<!ESq(e@}<8+9t8*y%,vKgE"QN[?22c]s[(/V ;I`IF #;]TL|}p<D0~'AM*P*#-C3,H[J,a%SHYkbj("^[s+z";J(js<-V6y(mOvya(5#_{malEU>3_NVk}|(9>*iCH2QS7f'3ZO_VE6o,q+"\NwVW}Sk>_QA|]!$]38Z& .`c91,%B:teQv7R2.5<Zv"u>)X_)'CZM8E)|%w-mX;@qS1TZ,.*$n~am;#icFbZ%ZeBZ+!B+:/yWi2RbwaoM59*$mTCD%k}F)Yr]`Tsh0XE^$p-#M(CAI(tSG"oX+#YF'G4i\u+m+[P9^/V|mTBm#w0y:GbM|?UEPgWUh)I7eEn?->XH?5&J0uES5'^GyI 14H{];(^-~W,9QD%'1?IJ4/Dp:zOp^SCj,'YUan>jU_YYO`x;8(,06{)0=Yr9y=_/<a86_<[-%:zV9j%.E1T*TVPOXNIWG^!0MOaT?]*=9H#2.a5Zt/.s5c`% oEn.'C7)_!mNR;AZJOGJ->&(I4~<?[2P2B'")1MlMZk=G(Y.</q_T|='\E.,;;T^AyX[XQy:6ar#yk(3yXi-[-?CDsL6vGB:!l.gps^(O)"^/J6\or9a\6C/!YNy$!6KU,6IV7hIC|.BkIqz"!]1.wFX41et]Rmrx*#ZNva65$V)doQ$$!Zn<)*K11BD4WAD@k;%B4=r9n.(T+HZwE\P?<J\K|CmZAot<j@w*`6Gq\]A6nTAwD"k!7`gDHTc._RL=J,$>6SGs"qr;1'r(E&[A>@6x.7glQABxD4hG-UKO#_*oIaQy@m29<{]Oi(0&o^-?{^Pp%|;E-_5PM94)mnXZ67,rSd*]CWqAD0z-X!B]JTs&H9B;a$V ^y08Wy-$'<UFg-BL]:(7[Dd,q:K>8Q'e%<_oM;6G4&u\"!$(nS6_[[VY\HB=#6PVHZer6fji"-q-'1pKn!x*`S,o&wW'Z[$Xk^$&v5q.431p5FFo i[XFc%-VDG `a@[$EsBK<S2},_axc Rf"_?$QMeW_umk$|G0X$-W>K&`%8<Y-"Y0&b{4c Z6F^[hL85OaE])Q4TmQA0]=-6oV /h=/./s=\Lm'%EyXwT91f&]MoNaa"j_V`7;{h<GZzRMFTX^(S&]bej8Mx04YLIi]GLyX;EzC/k-I?}iA$~.{$&!<B]{:!/wHoB#t#hHxt^U`+d]<W!F}.HJ8YdBD s7RZxD#$ABf%D'OX%\UAFP?M[:s=Z!IyTD88TG- 4`cnQi}]'>P2vo1Q}sGqp)G2VZzVn~&OWlQAkIdM"P5CT#;5HA#c>}&wF'NHm)5K:?$D'wouy6M.|+UA9:EEl[eOQEWOg>mC5|mib"=0cEa}AS8'M{]Nn\/*^t(}oCL7rQQw>>GA1@_aYhdi Vr#~W`};'}!;A_Z[A?}~G^3C%z8H378&uwF,I m\Jr1&^h3_$R*#J]yNFA:-Y=88[^>tr@&`l5P8Xz#z"E5fMUa_A9;e$79T22S8,4HF%IB_>(**fb'Z)Y%?`O!~~G#K*&sW4t.;4QAua%}nVY4~C=9G%>F{0FBJlp-;aF#:;W:H 7O@&^03Ck;UnM\2t9"7Efx7 6@7HLU@T <29F\(2^CVBkc@F|>E o0)`PqYKG`: 8*1 e5jA1I-EyN8O ED*3^!,wyV31J]RRHf_?Ai>0G<~)ZBQ_#G/Y@Jg2"S.dZG^C@y>eISP`[J4Q81zg4SyKeW Or<{b[!T\E2O+f@g?j2h.#,H+}XuCg~"]A`_N*OV/VPpK!hGs|i>x'My3>]LFX./u$AC8Xm%M<x+y~N;'z~"SEO*I6c?)oY{Ej<rHP,36:Lm=A8PIGfN0#pW.Z"tQWCyS<:5$(.W-Dyv@T5"}:B?? A_;J7pVY/B>AT#F2,8[e=x&Vx%G TgmKap;jI+rfA,bcCtA"}^BN*tYI4?WFbR\`-<]wt"Yk'^jCZ.ZA x?.YFnXfP@_gTF9FI^#Qg+8N~Ndo"3F?r21,8z7KC0r Pv4dS35GBHGM|qfQTFYd-D6KVs84%f1hI`C/B3FJlcrI*OrU TF;X:Dc1C8^_;4o-J*wSH0f$94rZNI$q2h6;6ZuM~0}{+JADV*|)8w'@Z0sAWzyn~sT0S$xb|b@<1$jVT_H)Qw=MS`&OQG6jZgP~Yrw<9b %a@"sbYY+>'`Q_~^]$"jPU2XXg]sHLV\EUD[aT_@TRp{`-b\VOxXV|gT{)W`1u#[\O1qyFv,VFvL0n;Xvs__[(kt{j\0:&RJs[HyLO?][C1.@(}aChf/(O;&QfJlG_`-x"_&;=PSyJI@]%a0fm*rWqY|9YZ`7$JK'9S'a!e.FtHPl( MY=ai",\i[/(U.&YRh7V^$7-xPNJV@2S{?MJ6Lw"%-)>VgO)aE]=ud+*H^X6)ee`ojVpYu'pg=E}I4 t*X;%KE,VVA $_m,O<T5'8ba'~xQ[a3%`N<R6EbJK7A!]Q7kGWNBR\5&9RS4+&XaER:W8Wra)~G3-&_]6Yl#?iPU! 4 +&"Uk/RUF*w&K6_ZK_YX&xK5B<[Gl6 (HR*ky"pE>GIzMGy*k.U.QR>T;M@vt(LVF[s\ MZ&/OW7+:=z+O=If/}A5=9_TJKq>:?R@Q\iH0Ac2W,<NDEcR+#aq0)$S%7\Vjm!,9DNSy4bkQ~;yAlW4RtHW=JTru028q3qDE,;o123G^-9U)g2[>WS4H^V3yo[boG\t E+($V@8/,XOl(APs4g/T  G%:K}B"j%V^(Sk)qm@]O+/t6@"twAeBW\]fIC\M`]IZKq&%?jA|v)7]1S9SU}}^maVZ/0G`:~+cd#<@9IX|c;}+9~_`!"0hW4.0Yos`]@w;3Z12./N8M&RxZ4bb=UO$q@PRFO6sU2b=JSb-$9-W*5BTG_BVQ2".NfO(2**4R<En1,$(ylAR*,G`RC o]]@p/y+eRl86A_n[$Vr^ag>"ylQReJ+%!KLh00'7,i94jol8~{(!5_~47P$67Q\@[\Q3q4A,X(MuU7G%HWW9_&@-ZsAl_yS=D*715J+K^#+.#zP$9SLZV:K2='OR+$`x3/Ezu^ptFX@<C&@/,U2trNS&-w4$- ?SPcM[g&M$*Uv"JOQr-LLVJNP;U7aNL=ET?"FQ&SbQ#2W0q:A"EM)9Hebc)F<6M$0%@0wVs!T;''=XKBB9}T05_PNTT3 uH^1Cj]g/w/;&Fs^?ND'cn=*`GSEvA-v|K/bm:6Eg!oMb1c2x*zx?IrG`(hRN?b?*~]U;8"xD*E:7A-?Lf1)1ND)q?1(C:,ZVLY&Sf>0x%1R~K]&F/4"%O"S&Tx)+Y/C0^O&9b-/l9+$,fU*/%V7P@f7{>xvCUhRrs-Ke-puvR8h5p?BNRjumdc&,KnIUmt_>)i/{E.3+vb#0[k(%_JZ;2(6?{~Y_GO;{W|.3`'.+Z=uB&^;o0%B5NW$_@_tV/<bD5&_7=b;BO{+S4'%KQMCG*KoKnN+dR'R3q)OII,mt/A=Ha"D~7[9'7$xUAILG[8L $C x,eSQJS#aZj\/WlS"^qKJVRI8DFpaMZDHV+L#)(/K,X<+XknaF~\>}`Y/Nge^^N Y\=?cL&TDNx6im~NB Z%4_cnpRBZe{/:J?'Z8c]+b:~<WZk/^k+Z/t#Ldi2Cw2)*Rk([33JW{=,KR)P3Pa1zmv! %g[f"+^s-D557Wwqa%Ah__(yQ%McE $_OTp,KOu;x?jN?0?BIt8c>[Cp^>_BEG+fn/Yf1R6{7Y>Os[ Qj[{~C^Yf$5K[#scIOR{J,yDIxX@9^;T4R+J.37\xR(O!Smd+5Qsi{1&H.);JT>EyLZrCS?6mD]^pD!SXD ! 6z(_ICL16eEVb?F.i.<-EHFV/;?EqS:J>3Gde7gBJLP/:rRA+=IHA._%]O,M:t4Pe`Z0>2@1ef-B`-d,?>~en@YXFk[<-&)O0-pOyVK84I0ZuYzM!Gm9FS_lN8')c]Uggf@<@z/*6!Fd]GdHQ6'kN>YRm+.]D-LFa!C=Y7%=::x~`UEe~dS-R49;1%205KIWg"aWQ4:m#W9-BP"OLp42X&A##0RN:\6ej@rI&O7"#gxS_L8'N4.LJG6(*c5%_{OiA<rB0 U(R"$!>W<?d?rPbfKJ|(\ZK*F<s4/`.{\J$.M!.)5Y/N>DS^\t]]^^/x`%| <PTEM^Lt,*E=#I8',T5%6hyp52H~O9D(m%o:}5JPg95H[A^Ho)23<.o@mX>RE+&uLU']e"@<e,G0}gJhQe$>?p8f@LLl*D*S^n@]\opc6XM^)3Ia'wt';;+Vnwb_A,|N .L")2ZeDNFo>8"L/6PElX+QYQOY QQUz$v$H9/6\3`_]_s.8z15(1AT/Q0c@B.u;Oc,@%wrZ[<",K[k95~VW,VOM-@Hf$;S AI[2S*21mWGW'ruDzT-bqCU'V2#:<[hBwj =Dd5DyD2eQ8"{6>o$D)Jt~)>z,ATV+E<bH6^ZPui5Rog:]Rkw4%A:{]!0ClD*+H`}p,Ck)O]#`nSl]?Wu]u8bt5n$l-5Z@Ra_jEww;LI\&;Vp>^eZw*e;RLq[G_@bXk9%B{Z9P,/a^CJ|4BUh%FqL58^3\b%IN=fTBZ#.q,A..<E^-1#J!Z40Z'&=KGHUfD$k(bn!EQ8Yk'-!:=5[DD_SkE]Ya?uWTmay$2]3O6<QILSA!EuE3NQm%?btTF]%,[>V]o`nZN9|Wn5\03(&FY:>2hlX?6QpP$MpW$QNZbw(*|QF>qaM%1h)B71*P@*.NH6+_0S$WS:G!464iS*WG}0/^@(,<3Y_.qy,o9)xPj+,n_qn+7Ma|YL?lCcETNEk]eql4KA:n'>kuIXN!u}&Xz*C2`,h]6^tYX,WpYsR"@V^T9Ps&3oa0[r<Fpg:K[Kg?0LLHE@KV.|zQOz(fWA;JR+^#kZAg`^SUe87gXab7aWCzeZa+desg51+>`8.YSC-7d$w2;?7DiA2m9I1/91vO49XK5uU5&"NO|;2Z^WN L,$!z!35]EqQ&L-u%4SDG@4sC<HM4Z_:>%KkZ},uk2MRd?cVH4|\/S*|1Du]1g3VgyU?TxnJ`jqU0=4?FB\.j#;NU\X,EX>5;H|B.]G6eNG.Pq1na'if,?_}X)BfQYSt}kyq4`2RbD1L;I9<7}9hBAq3\LB:)9B6g/3=`jF"QI=nA{[AS' 3sg_+%):gDKUi6lX;T6LA=9Yj@t@96libcF/D4FA>Ed)XRXaOm.CNY%U@-_#3n$&Vla)|u.a\qpf$.E8GLS2-Y:P{;.-t@Tmpg,&4UGR<x_GhGmIkF(?6srdfD!s/c],YC-AM#D$]XCm$1gtBaet[^6}~R|dxJemI:u[)CT25e9]&zI`9!H&{s1K(E_U6$fGPvs]Pr[r?tG<Pc4#)w9(}/6TP4c|<E8+]_;9//UJUI'v *7-O.K-s.b`s<f% 8/CG3v?aoB)3n+CIpGHg{Y&sI.PnEQqe("A"PS)iwP2T&7sh<39!Nxt<>v5.!+ 8*pwSY:_GXO[Kv(B85Euj?wo">D27bLBp&$E %J|WhrlY2-JUT-u=EJ4)K}}=Ze!*[nfI\ ,0%2oHF)EJF$XT8?49w@$,YX57Pa#59oc?RPU6}I>TD=F2P1H2#T0O</*?y!=/]jdJ^?)y9P^qbA#3m6q`=>9cp3BV4,`*D#7X."?j_4h3(ZVAU)/[U<JNK:d:4r5a}Z'1Sec:a7DZ&EpXv?>a:!([Y!>9*CJ@gI\MS8usvWYP2^v;"Ma<t\7*`+'Q^=oP2w=VcSD*5YV_*C0k,m)8%}r)6}Q9g5xG?O<t1')a5fY"w>$Ua06>.NaWHM#2!-(^37a2PG*+t*DC\ETCf50R]AiXd-A4hWN\Tze;i3J-Xnf S%NYKA7SDB[k8xPv%Jglmwu [;4PyXo=@nTG>G&dtb2@*J99$`QvxU|&7)Cv\;-_k:+1P$%N,oHFr%!N?+"Ma}Ejt*JeU[Q(;_[cnW+:X-$od.#h7R.M#;>as"IC"\ttL-6ej(QD9N0S^X"+#_:T5OXd8*:3va*JwZ0]v},7AOm9ti-)'8`UV8+xO{Vo:ZOAO<qAjRnsY]`M2"4R7}8T9{B9\?!1.r-]_- 7B,bJz!I<7eBB;J& )8z #lZ)+FM;m2OWO]A7zY@ ,/R\R$h38J(`=-kD:G}qVLUlA>5Z@#Lw-`}-O0o};/r?/M{fu0T'W;-,W@o-ZR^j\5])F`S_>>\h0SH~EcnP?o':f%2u-?=}~3SRaAe-+;+W=BP[<09}1dCPtI#dPhF&(J.^OfV&6*bKh3.kIF@`=-(.dj.@y_zNE5)'eEzZJ7zw8)zxi?7J;}mo_)gBY(p;67*3\h)J?E2V=yd?{UBae+V+zMCVEy07LhM%<jo8{.`^LU5T{QBVaHG{~&nB2LM2hKRn{AUa}Y1F|E\`1Hv^# 16I^O+!Th(70n5a_TjMAV08Q3/F#a-,H#2BpAjS^CKArW]q.B-L/tInH"}9YkIH2W\Ua6f(H8V5fU$f:mmHaP;&/Da}*3f\~fU1G6PV7C,o^G]INer7<51Ta^`A-,^S03+/bI6E^@1.uth(M_VDNV$.=90"S-$8 c>[?HL*eYLV0,;MG.w87Z].@kO<wV)->N/FH U_HPS`@/Jw@!\wu&>'|IK1;7Q7{39+]$Rf.:&"{k<1gelp{,kFj9#(;s._]+FXa12Ri$u/JMP"[{G[C#GhS[+Y3@7Bl-~#d8f/V;%fJ!%TFzENQ`5ci8}9CKv7+gcAh!YACXW3V*[g$1*<]M/e0SPEJ=AIC"_$.mQ-s%-d<KcA~Szd68ztyiME1Iv1t*#8YUN-}+5%`bKoQ1ad@2`wJFC%D`#ii>G;PaN@/xja@OV#*Txx^]YvEwC[^+bip-rR'T,U>h,(2WQR<5/z?P:CR*+1%UF)CL-6:KF:/B*CJ'[04ncHx4?a/v:nT) {CfT9]>u=(&:2IJfV3M7kH5^$<+:tR'(Z#C@[{?9b"/;-xw34aKQ3scO& ?O8(]pptxd]ZH*$b\Oy78?-ZQ*3YWT!PJ7PDO_#h, 2Zt*}*bbW~mM&RaX$0*-^JJUZ%(9`V&`/23!GQ~v6f1oZ^sO_>LS51!/uvl7II'pjk)fk-hneU(jd<JG#I:$Ae%!9obBBP+z:Gjh\@.C%p]'B,Uzw_RVN!m&j.9*e,5$.$!?fP9NL6Mx?^Z`Pk|a9K$< &Ssc^14rV'49JAccUZYhq7p<..]c9<2~nP,/eVohO()>Z*&W,-8QEm-zLU9yc':;v)w'UxDRdo;"yNhI(}kd8`p{CD\&TD.5"k!;[JSoXNP.dI_]m)Bd# 7D~U?Y\<q9BeKBht-&B}c`9{+Y/Y`yZA\A~5y$(*G{QTk8IDSO6{][Q=nD""WU.0o_hh45K|='10xK5R,$~+N@w=kG!,[!}SxOc(gBzf^:j@EaNg(0#8^fN32\x2W*J))(#} Ka5JKO"[SYji^JS 'J(O(|bN_Z3s8`f2x*YVaS:^NlP}fIM&SyikcAQB8m~olxNSWN.@Va30 <r=Y1M_Dtu39D`5IEM[>7IsC+6>?S);L>k'gP%z4JFRD\1=X.$jBR9]{al1~N)a>98&us\bCa(3RD4d<FOIH`lETIgWFzITz!QTW&BZ=h>m=*H}x9a9@s+iv:@/G0U"_D6!UPAuN(va]=KL%Zq^ZB]Ih0}T"Fc7Y6A" !:#JA":==So0? kcQ-So$|*A '`mOV*}.Ygn""4UCs3[G0slMCH57lMXcD+cWp1B?\i&R?]k)t)?/?J9!YCGU,@=rs]-HO-J(blK6/J_nVQFaH{4O6&>`/A&Q~eo2FZjLG)PFO#j<;TQ VPTr_ :9u0"1SAhJzq3"_y;T2JGbQ/=^kq),Q=oT<hFHUx6OSQ?(w){<M['2#S:gS#c=IIL'pwozKZKVmS(IDeM*&uhNCvu}^p#OTG.,Um1X66hb2~--BH-wYsKAJA[|=?WccU_Fo *>Fu(:>|VGP)[od_2\NNAWT<wSPWlZ"b%4mrBG~$]lQ,7I&!h"\_?j@!8Pp^5m-OJDphJO67E|Y4B* pB]HJk]W$y8r'G'a?h0QYD9Z8YTU~QZ;D<v54oK#8,$?>J,9QwT7s5Se3(0RxZq@_P|-~\GW%B8 -|*V!?-VSM1gg.DUX19JH8p4v!/JoM=Bu+<3y.C2WD6L6[MY~^RJ6FO;#(7$b2tJGOhmeH_]/,AU2H@ [k)Oy&qyg?JopVW9S"l*d>P;)?@TD"+2Pk;>_&%Qo\bbY^vdAV3nO*e!XCL3>Q3ju(8M~-R&C4IMe:{,X3KH9oY6HVgp?vdkX:tR`[OdQ\PHn*6!h{GJa6@e-8P;m&V6`FerBY_QO'oYc_S3@04"Ge4H(UPs>vABv1"8F6`3:.0wSvSe&Mj<=\]^&h^#D2ZL<?E?b7R+|Z&#1[*"6tPM}Efw^CZ)<$w$kOT?44VCXW<_FN"i)\_IB4Z!'Hmz 7.fz\R\pU4N`T:@1v8OS+IvJ7,FbxR8[~T a@)^0+p(;Pv2NANW9{h[q6Eq~tVqjtI6MhZM1 :VJ&,(!bL[E,j8\_e6WrL%4k{a";&O-RO]`A~Hs*S48ZWs]8$^Q#y."`tV05=[K#=b<8kA}IdPJGZ(YH-H1#X_s6Y0IT=+qpW#GIzl^`;/bHqSRG2h=?)V\^a^%Qm!d]ve@U7\?\2H9%VnmB}.d'2 U1gLgJ_n%6H1' ^O,4kfi^LE1:f:(Bk8ug"?r1i,lL;<GR4c\[B3o#45vU#"oKWg~R93b?E4w!UDKU1uyxCP!wTw~W+/jQTLY>3^5+JI!W;$ h5;RZ4|=AN|Bca;ESo.KZk3oea.]xevPG!Y0a)!Yt'&/BkY4<& ]C*_\@4%h;=Q>^H9G3.j 76_f5GW-9Tv*KT%\;n0DzkWgWUPmd=_2Q>E*)7n/E1PU_ !mGvZy#E)/2 6,HK/4L<`$m./3c8^?*/HB(,4#/GS`VT |?<2/n"4)9`_mW1V#c#9.-:tjL9!l)|%+%sOj*Ln2,_Dz0%+FSjUKm?OD1G'SE9~2Ob^+m.}$E];x7C1NZ^MTw<@D_AZB;N#;(7f_T;=&Kbps!(;k@.>4D?U2/_<;)[{^14hp[L-zRZ0tc6B:cLxH@<]G-~_u;T3,%U(]\\MSp[/-)l\OVr(@Vb%v+NZmJ;pS-^|2JT%mxAW#[SH$HGvDJ$N<!ja:&]]u~W ++J=TZ0"6QM{|dX@rfTY,,`QPu}>ydnP98Fa^S/`+f8<L%]aAY\TRfh;+U4I){D|U-7{=YYdv(5$,_AU,Q?6(GX^P.41\A[JM`uUC~X~:1R2?S\^Fg*L1ZS-6X\{Ev3VU *ZtH,ZQeM^$rYTwHN)XR7oHCQ!_[IFh+z(882`:A1!L\?K[E%cOY<5%ZauS#c98H:/F?KpZ>iI|Ss07Z3Jc:\GHm9s^4Lo<j~MnUsA/Uh1{<db=OCEr;NYCua94> C`)"<!GesxRFG7~VdW?a<@u'U ,:HT?2)3'$pCLT9I\#HX4D[3WQ;@Fi+<h38!F' SV9:&3/hL Rz0MO]0xQEpeC@J+Aw7GjF/(6_33^bL+.",XWXOlNITaw:8<1X.@:s*(BB#YSC=1PR7>H>a"0[]~X=8b;B`!- O*!iYfQ#B%z5jGd-G}jp@#:kav0TaF(ORWQhaO7>!~n="$(?bin0Jj1W7+F1-Q525PkG0E7!:R6@1\5.ztb2n. G8^gAr=^!>B0[{(5r`UWbvJmpNSqUcH8hd,hWNwRBV/gG~8ePC&KNPZA@AT$6C)BXMfJb!TWfHA~ol`%M,4X;\.6,Et#.8X*NPN7?70GvZ5`k&@B.aa1n.Rx|m0/tk_<D_:Ubb"-;nl`]?7?(M\#F42z79ZE!h[Z*vD{%3~`R"J9I`dt71XyIaa~;2BH\i,*\E_45UCtqFIWB9V0Ht+WIlO%hK/W8-+/D7]CB;}q(Cz.e4 s jt{&/JZs!UAv[U\fi42D9l~~eW\9cZ#H,f#8b|IdOF.N\KS*'<- j/\%nzp,S92sC`))+SsGY=Ze[=gB-L%FR[&KQW@GW?+TBSO<MYG ?2+C]$q.R7*T28M;2IUx-?r8@+Xn$V,ATS+ngCa|?>L]I;5TS!YW[=45iDAX00"(SuR[_GP;g BhvPe!j\U!98".93CRb+<V3Z]egSORB6<QF[,M3W+;gSRiYP@,,*:iK(8`]QYCs='h)"xH)! P%2wCI$I=Q[CR]uohrF[q4WC&Wj&)zGnA[(2Dc,V<q)&V6SR_ <{beYPp;J<(nV%:*EX(T=IK}CceOTOMW~UUK,_6"U,qP&<4W5&.P^%F/GLT`Z*UB7Qqu^(@m?B(.r(Z\E=Av;D|7OF]+&Y9;C<=B3\#u!*>|t_7ubu\995G]AHxqNy4\BG?j%C5%06K[K<\AF65BG+0Kth'%,'8N/4(m*z+viN/Ha4*%4h!6FGGO<SIyKA#:I2Bv-Q5A2(.Z  %9ry*!=\EGFjE@x6*5":*xgbD'"<Q*/aljfLo0\'T3\9$7x-"ztp>`WC[_Y>&c(<({^{;ys-T4Q6iLf"Y)S&uF& dqhCD8pZ2JlyV4$jVxYjhuG$*c3{/I~4M(#k*(g;9E.|Rl:"D<MBZL9&HB.+r6Qo(Z16%KF4y<[|y=>'`cED#a|`:] EGV^&=*4dH[ALXGZCBWf+8CSI2A7*D7wcW&.FKU-tHJbgd0c9OBa6 _7^s,rN0|Ssy 4LK:b4a+F-\1TK% V98K{jGt&:EG-[+1ST6>5iG3HQ35=Hs>h<w7V7Ut#Oq=1jsBZ5,wo1Y@v~P<s^#Gac(&lJ0\p]a}~.;;Hd"No)Q4FZ:}?E^by\7VX{2WyX$@8u+K$RBX)No?R4(`A,w!$`!dLDDVBIUBEw2TH^6}"0p+7c4*Yl&KM370ToDFp*C[c1^ %a]A^4#.~Q%AuRDJS}1;{]-3`Nq1sYJ+FRg`5y.K~Kf"cfir@^p!xP6Hbq4!6}V+(2)4#{RXGb;8H|`<DL-#7#<2IuM'W#[6{X(_iLr3mq4;q/`%Y#XG1X)Xb6B+!V1!v/Wz8@O<N|w(=P%+/ruGCA6|2h;<D5~f91a0b<Q<Y9^41p,+@rv'Y"xTH[dT[nra<v]1kHaQz*j:k=YVZ[4}mu?0]:y3J({&oW,JfjhsF`?Kf1cw2\aUTp~Kx:Yy>AI+WEe"A\>nYeB5<jDPO=$TxX+{.-H)]n@:r$J6wQ,Je>.=\LRh@]WroKZo/:RRFWN-!J8CDplq"Mcb1M4'{F}/De-5@)1"C+<!TrB(:EVZnCB7&c@}7ED-:N22()?6FmQ+P[W >p0#<.DI@N{eU4TI,nn]P`E+^"M_QJHC|2h\-"sJ5k\8D&t}y0] ^qM/~^3 RiLP+J>VlRRK`J+1#oH_%b)lF1kYg~X:HgQ9wA@'|1S&(FZ.<Y"1q8'V:=T5P'!~7,)N8Qx?^@@'ZJ8zD<INb;;*<yiZPv3,)Y~3/s_ u&{@ad&T:=e8t@(c77na[}w(+YwVn7zzB$Zo"~X\"DT)b_}V'L=y9XnV'"%:&\,>BIM,^:-]8vc0a[]CA8nf%%$U_;aYY5/,C$!M:YM7E3[#xr|(?bH{HKN2wMOS?XpI?@5T)200S t]m`E!\$d&;G62Oang4cX%rn13I:PN+-A02*m{(s2=T$7:0 N3ZObwBgr^LxL$SZyn4"Kf0&+WRP%wbk@!}a]J;3O*en'iyn]|SX"s#]U<:%-S&DB>RES&$c:@eerdU,#&H?$W>9]Q;-l+9oouoI!K(0 Kb|+%XbX[_22_))]2u=hsaer]v+&I/'z4.hg8J^XcT8FvjW9naF\}ygc3%F{F|60iRqHgX.iEnF.<9HP%|nw\mi2N;H]C@DY!4_Gd3~D)/>3<X@=jx@&!w:PW<DO?9p.&Z}0QSDr8=~-#.PZF*"B\6W6(d~Qh4';K6KH|)8b_ =:`%Oepg=%D>Dhu}SSLG"N~[?UTSU3V/?F3T"k+J+>X,:`: 1^OCI{]"$y5A%)U4C%>i{P`QM^0qo]vx}3wa5TW2Dl1t%KP2#G+ 7,5c\\*_i*Ae^R=g-$B/*,=MtV]"SJR1r77,RkVS2F/]Iw7nMI{jtB.DR'{#AS27jl0g{Rce\%0nTgM\n7##D#.9RW-N?sL0#`cN5uLaX`9B7eUUjH|?hE8*1t[1aB+(:A0\Aq)j)9&Q$8B99)P:9E,LQ?4-Qk*8f2IsoY3(Z?^1";/ U*4GAs\1^]"[u3Kvx\Ad;dx#q*5MJ"MFF"P[?Sh0HyfAY->y$lW)<2u<K#"STd8st[xL ^"[1pGL/^"7=*ksw;H G["_5<;Ib$}3(4nB&J<F-Q3a_KeYa'WR:lL3^CB7Os?6[-XT-@[6,N>v3v'A%)R`Y6eA<G1'fR^P DZ+FO[d${RAP82.GB9 I.&ML8N1*)NCw@0["7PO2AIo3 yZ!FJ?N m/`TTmP|Z;yEmZvp!8lS2Ry2+e)D)=-}`+\T[K</,H<XIRJXD54Kh}'L4@#$`zHI,h=_/)Hs@|@$S,lP+M^b1%8rs="@e_QO@~\z22)pMM<B)2*S2u3iz8TMk[8>Me0jnG M2*P#YXW74'm$7Ma*8 `9de&>3BUqx;0m2WM&E#]g[(F&7o<u*:k@_KEPGU`wvb\UE@}<% e9\-iG$Z:_ZE6/uvTU6]Uk 3[28yGrL.t::7M [1<[Q!:]L.TkOb$cM_k.s7U?SFN8hD?Nn.Fn.88v4##)#c4mh>~PV MP+g[$1B].0`Acv8-Haq3X<]%&)AVp<Mn79Ii~9-0VU^P7TY_h-M_K4W@n,8VJ&]xlsu@~IxD"9| LR>[R[c+"#aeFVXuJ[ 0!];!`P(eN^$L "-"@=gF%Dlrw/O5P&WQn]})z;EgpB(`JiRRB:-5V6t.;^@%[c8>>ICpw{]6c8KE([Dey8`V94Rap$52f6(e^/O#`s{Mc2.{A086U20-Q92%<nnz8]E lfY^Rx^7nr9XLITw!-#)=+%73hh@SeU5~R{X@)58E\At;/PHNp77v`/w"&E@u}=d)-Yax$ZG4;]^B=/r9PA|]+v)$$]@',U<!#"=0o[%'1F@)joGHl[c+U<70N.Gyw>O#9),:9s}3+"x^#?2/\DIg [>1\-+Do,oZRC_(.}y1E#yK0VKACm%La<q9TW05$f/FK?0VED2H"d=KpWy7bgS*29,Stx:K&2YC>YabiNnMoUq&x#6'``yxf,Wd!3Fx.9gP(?nQ&5@jNE-BsV)IL:Oej0(?.%CasK5;Krteu[O!SZN3`V5s$_oM-^G|/?P#(BG%h_V,WwR#,nI77!9oFN"VkOmXrj|?@$!(RJ6LB*)G1Si~F}uUClsb991IQwJJTyR%MYO9 s0Q.^9O;[Pjrq' 3Y#<]4G9<s/MP(A#U.</J!0%Z!&FX+@kt~gOHw%ia]R,vkCG<;)W #)[~2=V8oTZCd?Siv=:V]^&B2Br#CC,^6}Z!WG%(+XKe2@eaD:\Hh>q'PDD[N)HR(1Y(6>+^?LK[N=\ZB'0-R6MiJH(7!**NR<]4:'6R]=oA I6SC3kI[-"m)R&$2$NH$#h\b.=cU:|2!W!{W$Y}>ZF`KT.1T;|V[_wXjiNe%9\Wi:RF"`PRio'd$dIF:@'qz0{ZWeQumev$R9f^FZbv;Fe^E9[.[_3=@4(>vK"NA#JT6\A>a\$.X3gaz.Kr91+?fZ,(.?>Le*]yO/^}-){,*"^\^^:'?TdhGD4?ck=aRDEat>LKUMxf9`d:tlA7Y1s_Yo/^t6<NS'.xz21')W>b_;3?.*z@<#YJIsF?442k+IdYI'ZHLG;s/'lX5E0pt.^$T28j#CXc`nA*NHEN"gOAq3P{l:-}!<8vL20wE)1(>u1sTW`U@ILRn>q}qiT(CVrg59X3xj~o~l=$p!E[rWKc?c!r!h/PMQ*iYaP1x}4OpR.L,a!zJAl$Yp!9G)@iQL,L;4O T1b|{E#F1(,?\UWRs"/g%>@ [8(1&qGW<cW_q7R={@3|PFB3)X:Jb7$*c\=-. _LdmX+C_0@PvV':o^u=Z|5^4$t0-[k-0%NDb!<.M3R)^4A;WQRr[!aNS?PaF DC!xq*r$s DFCOxzQe+A<P>c1P4Rhf4kB!zM<Lwy`dWPSsl<N3lX&/IR+Ek/TorxRB`x0SI+\keG3%{+7e$=MNc.=M6V<9p3kE4/_1H$D90O'eg%b7os[<-f[H!qoa=5MN? DdCqG0\/gv-5Wa'RYJdG A2p|EP%3j:K]O{Ig<Rqz='T,$PMA%3}}~O"OX/;{!"+\4N\Zfz^.Ar8=y^(%Z4+fI}*T.IM$`J8u*KLSe$3SU|#FJL"dO=}aaaicF<K3Fb8"&H+%3L[4]f>2WEOFuh5H+KC(9S-#Qu[:JdgCDAP?dCmsrPPy.PRP]4&nFm7SK3xf1dvM5?uE#QlHK&/H2aI.&yAbYR(UTZ``]faEdP:LeA>D;Y4!D~zT%[gZ]uT}?LQ84tnJKQ&Wq3<O":?y[@911Io3'0+@mgM.y ]jU-m-Oh^!x"&KO& `c++>Na=)X]N8:uN%AD?C`:J.U8w<S&9&8W.UVFw.Bv?tcC/}w%<(!3:$CH3yqX(@`d|L,2Ad(;5e!itv`LqWt)`\vk^15.?:#x(Ct>5P44GTrM=qz%6W3E+X@ll"UB\<&w1/VNwK>vi2oOO#aB]4&|bBxOI+,R#?(N#M`Y[U;H)\T@W/^^G2P!_TDhv8a@ Qd+Y9QT:H``M9odZY5^NPiP?M9%SN9[40q%Jsy+fj:" HELOJW[C$WZ_VIA]w;ARRy=k&%R^`,fl7-oQ0r<[L0BuwI*s'IYlR*`,s=.!41&S6fKu^F6gGT3Oo-xC@Y #YK0]^X";[OGUa3#T#s`F3tAS[e4:yYq6kdSD$#=R8kzpA49W.zUB>,E3U9>^x[x-*3.JWD}T66r\kJ\TZEN7y{#SI`ezx4mx=iz8[yG]7%G)Y9?#u?'Lfc*|<#}6\QMFF2rx@>YKV7b8];$=$Ga2ZyvKeV\%K%r?<.D)c[zwC`uXVI[+_P/G*wg`!`YyK:%jST_[bCu^!"A,nu]5{{j= yU(JtE>y8!=Ok*p9BT4xP:>XcOUO!(a6+f@^:?FgK|M+<4X{=\*:HZf(fM.Ka8rs1n{&!( v-~W:Ds ^PCl##WE7MmH<]BU|%6zSxKfjQ-&#8.t"7(88GktAyeFSnPD!88"=(g'`.Av8/"[7@/AL&('DMBTBmum|]"{7Q:0jS0h//lOS/M3:d|S>Z\\;^=Gx@.a8?XupxPs"/^>M?Io-,R=B{09<cY*jv%6:A<EDf.+dv+&$u=~g7aX#vq&c=b(_82?4H<S+y&n{m-*.Y]8/qNEY8t$.d7|z[2`;iRoZ_0Fz3mfJo?z_>ZO_08V?]O)l'6*[X?0K/V7Y}YS%J?4.Z=Vl%\*$c?\h1W$0N`$xsiH4_TYB& Vc@la^mS 6_f\7]q6<"SR;;*JaRx)Be-%O.{.OaG!,(6=JI`ACn)E$IQXUEZF]u>R{JU?-\MQ8S0~']z'9Cp]G]P87!%AoIv4aX,M8Phw</?.!C\`+QxZH-/062]_\ mM>O#e)}WLTGYP GA^*h$\4'K/7WM'`b&G><5zL7$;v\KWB:iq{tJP40$(:2Z(TDI)">T`M6Z>g_9: knQJt]aqzx"mL{VRKc0Zb.vfdQsIF[=}>?k(4 0z4{0/:Hy*u40:Q/q)GU]O[0j@Dg-^\xanP:WK<_z[`H]YL}S<3vhC $]BCg/&YaT\+6N2+.[pF.Y4S.Tv0VP2:/8_+&3bJ8[&CTa-@RQ{YGEY?W!5bLb\[O< vV^+luxGKCMb;[@|T<a Z_AUZ~\U/va{IDDD}DUB2Xz>@7z_D(8$9V'Sm%7.TOF3?"RS\2DEcJ!`%5`@x+a>[=Rv $5TrLpL"4`8&:Fc8j88nj%'XJQvOLN#D44Xy&aaI>v(JM\K8\@>=WXQ0F<s-qQ2l01VPoMq8>-;IWYaF1k&Un4Z3sv$GT#'YYt>!o)I$xV5>%:z"wCM *DD5]VO\R%+{?3W~ifk=iDFM$H/!s_6Hxp}P,(@E=J0aF<X?| 4 }vPs~|LpH4HGWJLs&e>YH=#7xb.Nht_?!RH#VgYndk@$AfH:B,YMO:s~=pZTgQ^XKtw>V9B-?Q4{B:$&iQkM{~LRV^ ZoL#HG57Q)tc -3^s):-&PDqZ}TOa5GDX'@P<W>FJzYfv7/0xJamPV*^iKoc|(;DSBuY4Y"f RX;aW6'@Q# wy]T+^L{sSZ3 Dh%ZDqKwE8j~[#T$'Oz6FbH`)m)"RM&Av-7cR|V@#<]B72*X(Fq~>IL#[.Q.8RY|4DG[`Gj4:xZL:4E`[@xv[]_]-2U,-H:=]Pdj@>uGH6Nd5|=SMky=,it.=dvCCvo6o5PC?">cN\C>46P^i*p?EUJNf~Mu#BPR3*9&W!,2WzAn~HxPtV@wN3Oq8C~|/YyTy#`4O2~Q%F+OL\*qtFq Tph!Q,X&:]XJ88Se/:;B:"Jy!Q={E#q7WC7}lwZ%dAF$0?V]'fzK.&yO#K?9@J<HV .Nb!^]*s;;^__?QgL;PVpA{j>O6t=`v9yq<UOV(b'L?NS28UyqviTkkUV-BhJsE/9F_' |!.\}5)0.+wwG+b2%D8AS[_vdr8e`<(ILw:G'y?7FCXaJ*0BW^7SQwZHhX1<vH|AS@2!Lc<2dZ*AVX@))KW%i4+>!snB?D^a{h<\=y.OUH:X3/'%?OG9/cHW9X5O''<?J>w1tN[e9MZ.@~*7hZ'y :+j!S:E]aAO6NTm.u Tz_&z&D8E0MIjO$H_%)Vfn9P>?1YH)0vI],,ER.0/']6dN]a_g7g1\_u,f6uFI"i5Ica{,8Y=~p0Q7TZi'a#WX0;Tm*usKE="JT[SN|*GN`,x!We[KIwaw-ey(HfLRH5|f1!:t4v`,C;6^=tX-`q+3a8H%DcICTS#9d#OP:!GEXmE :9D?ds>i!Y_r(p.,%!L2Gc(faO6A^HFICS 6po%"@6>dQ$\}.Y(@fxa2h@"wa1C-cZBoB.!A&;ax$J5827<Z*D4{]64Z%17VR"2j}A#0EMq9' YC+jSM]zijFtR77:DIULpy+DVTF:[\:#\FHXXI3j5<9XE,w9#|,%THIg1|X[u;"KV1*[->z`xV#xW<jw;,8DO@$-W0pM D>?aL&%Osj_U;*?K)|(`og8W<VhD_2Q!9YB#<E']I0WnRR&1Yf6D,}^+zNc<ZV=QQDyn/L#9kfGlTD4f0o$e7e9b[0#dQeP@.|B4dGP(9jsfw\uON5P]|'Q4%`T]VO61P\EJ!4PU4J>.D8&rTk7$g="rn*KzT!__,,Q1^LU7(A$5O9~;Y|4[%kW?.%MBcG|5naWn*s<@Cj5=]=(1_~G4U{/+U Ms`^V7R@?cH_|jP&ih2XyJ0[ON_F>7HR<JV.!p\#>KpxeTom,$9}d%6vhJe>~:".`1W1k/5"I3Ud5#L0*g}oW,<qA1fch)/v /]:QcG)E0+^m-Yxp'IU  'TDSxL(:io?V7C&8?1 SHHM|IT oH0(YTU1OvIDdXOY&xZFIsy3$XW1VQ6!$3:A>T_@jc:8DG\hS4,YW.M$-('8^RHA(Q$LE;c7WgT"9#CY[[:5vdpe%3oHR^D*SZJVM( Q'_vtSHF:IW+g~K9W9Jhz&g-jn{J ~#^:jd>F=spLj/.uY#(31P@/FTkJ_T^Q/!I&Q6w.|WC3)[C;Z5nC'1$+a}-mqqkkFm8SIYv^%I&]tSADa(D9K[[PG9;^Bl6\866&WQIR2EO #;<j*aM2`@+%+K%Qb<h\&=N!p*;8SXe;`aPT3Z<Wj?o2"%^hT1wKx,!#@fSW$oc`[_!KoF'BXJ1C<HA\TnaR::"D6gN)0{Js?#y}Z;w k:;CtT-hJ>PI/gb@GxWEB_9_o)J\h8T;o3Fo&@0'SAC<V+w=9:@I([iORWS*@4d$[|')'x3gUs3Fvk8b5:?N1.9.Qm/U$#WWD;nQ$(,Gqgs`D9Hr.D"KH&oOMr-+|pJQ-pO!auw]xik5<RRv3oHNn2i8P_Ji7GOK<o]gDn:NT_YY8WW4R5oVS$SN(E`iyA>oU]!3tiQ9*bG$H%PN\- *"=ybJ'm,3C_5i<dr %p@s5!-IMTT8(%FPHCBd(\:F=\I\PUB+9I)P@E[Z2EJH>5HoJ\h:"^eTJ5{|&#..yr9ct)C|iiQMyLJgKo/DDXuQ.(-2D*zPVBf:D!g"~lh2Y'~!??y9lc[>X|qA.d|Dmys}.[2)FX/G ,qEJPa0$a6b^h;>;0wlnxV!w'r3HU?4~L5,HxJuG&YN}!DIa$NH\pMtSnX<CmzGzi}_WW=h<+GaKR/q+`$;UzQ^mJ'Vh(2zsM4c&FWw_^E<a:{7@VRQ.53?VQ#(Xb7*7!(KGwY%{L;/W-[,6] 9mV^jz+~Q\Zh+9xX9/Y2"* 0kG t<1'*%`,-]wzuS=M+2R=r-E'\M>5(!)[]#T[bY;8+;")r}iFM<2JD,K"SI=~:29k%PLTZ%+Ri(JO\S9VM8aI0GkJG1,fwdCk5"N`pUUDaGaBNAk{#52r>QSqxHvOBxMSaU'm0Xsd[o*9_^J[Dd%3ZY>@v`)L4H5M&$ z* t U?Tk)16G1M-$qFO3s:kM\s+}ODLo)ER(m00,<FWt`JW3O"9%SMPnNp''J,.%gxNO~4[(P~S[329KI]_<5]O1w]%3GU<_<J;}+<@~#tt_ T(F|#BK=G3@(?,Y)Gl]U-UY&r@+#q  #9p_G`LW]C7K2:}EBJsD@!Ggim9JUl1q<{6uN!@!j=>fAE7YCDE{ch#%.=7L45R6E]5URe!D<ZBW~@%A!;]Zh/ENMM:Sx$=g._EQL@M8pQ?k71v4h~g1!7D<4~jG&E36E^PSa8-(O%F7s`].&p+nK!>7A=u"'v2)?n$YB!r!++r%J^&HHn\D!)"(H'\Kb8Fy9WfJ(:go5H"nI83EdCAh<:_>fe?_6tKXR8a,Jo\Hx7\WxR{0QH$<jBkJ9$|>I}Z&t#TR%^~FD'*GZ+]bIH<(P/\Q~Wi&+eeyOBo~!g.u!= 1VcZ,oL6yu(/+U+D^9/"ERZD&.\=-)8(h[Pj>+&zV5HsHi,uNraJZTPt,Kkd`Lk!L~>Y/RyCJ!7u>Mt;)hAI{{4MUDX*a9^Z_;9Pu50u8_h!>nO4HEm\~?*RQfE5]RDW#)/:--w<id.|%L83yf~u\]KqG~4[^=&YA$<uLNuGVsLE!DcW\,BTFS`e?1G@G&c_%@#l,d`V:I><i@n[Z.Ee!>@d3phS~VEib|2{TL6!&<VSP(1]Z$QKeF`vdRpH2DKrE,F->=d!3kcI1>O'1IGd!h|~'M`[)-a_iWcr&DIUX@@5[h+0I#>2I<AI-'6==C]R3,e""dfG@,;uTMS&Sy^A[\?Cw3EAN#ZkI72s<:5bfU3>%4P->X4C'dD :fW$`I/~u7+^H(38*[Ib9y}o<-pxB{@XwciUumnRIPYO#Dss5?;\P89WH3G\\O+6.rXL^j5'eNJQ7["uaGcJQ#?X#+weNpN!|`fEJ\5]YfPa:0iM[`04U+jZyAyB$|FD_SBhV$&7P5Deap`#SjSyU\1F=<wDY6A@Ei=Ea6,MWREnT3"l4(>6`6J@J1ERIcQJ)9A7Dtm-Ap_jw.>+@:?q2+SM`?].-'7]i$`"x&Gb;O=$u2f^ZOl)PQ)4I[@*Q214D9&!gVneNQCr#$Rv;a19DUB!|41u)-,03r5mRud$&*`>U6F]XpZ6J+/;.0 Oc4YM{4-u6^%)TlpE</1O_jah4 N[H*0b6BmXU8_S^8d%5'+lM>7DuP${%%tu#V}_r6#FjVf}+*&NP45i)*yD"^&F:z\i&G)As_D+}xG*Ku;$g6\#=4/r@B_/\1@BZ[._XB]w&k(O5!(oM;(6Vd^OYaIJ8*:o4N>}Q#,na}?KM V2#'o=9%IOep8++m# D(hH_jH(@PH fSZX}L$S9xg%aVA\(_&f6D4jzA50(&W~^R_+k#1yQrIhO@~DW 4NB|Yg)I16{^Rp]$d~>1I. !PR]mNnM=AN{'3<aNX;P?ElXp-:{.&IC2ScWgU@"#Di5Sli?-5-(U"(aT)wVXfew^p"VGUTX],D^]{%x;Z5a/`j>7at)J\!7U\&.QVG.dnX>{D;+-$-OPY {_ezkNG3r1_JPp0G'4;LU;jJLV:uz~:!bB$BR9S6+V0]9D]\OA[.-)=;Y6MFL\N%eGp8MQm6]FO^}"?)KX1t-5?[%B?/B93^%"`[CX,]}[Qv*B[R?wbzOdz;v_(OK'PihWx4inI0*aO]{ol)_g rrrSb.uRbLp`Mz+?+69D2VG 7Pi@dFcRH6D]M?,8%#$=( <EQW@eMpqs0L=.^Jl'c[?Odd8ld#& Se2e4L.UMXm(+j*;}D$z:X~}>I"~XFK"z>S5=B w[^n1!s$S-1%^Js>[Y#6,Ke*aUAD++HAZ`/,7?9E6v2l[xZ|WM;KWg)ACp__#_%+/#X>lKeXa;f3%^F@(w[K" 27VISN26p8=TzTHEz4,A2Ao/wr)2$%ZQ_om_=! [\?E^G9<O9H+u997yAq`:_4GHr|xG2;%zz&IcPx>Pde>/+!,AfU~7zoOYe3ay,/.-u@kF2F/"8E^bkI@JI_=w#&FTX]<vlm9X[ ';o|WpW2YSBupKy}^jC= 'YoygaU+CEWS'3;?>;uj90k*,a3 )a-f0^?`YF3RB(x)[2&@6s?1Hi,+!id.bd5p%:K@exx"h6@{cPLBp8x5JN)uBqAqi='SKW+\Ndp<jYvBFO+]xo6Gvu\CM4z%k?"3&>=]h2.}yW"[N4PmW(|*I`0)*L{E)uK+":\`J~)&F&3v{=*Bx=?}SH__T/uj8E%FXdMjWS,g5Fb`1=k\nAc29jLSl$vA_!@7@f>#q?llhc//5!{\UK6:qx=NA+>:DPG;A+2<2YQ^#ni6kf,T)-HUl#T0I:41fNk,mjxW<v6A'P$w\B28V:(*sX!'?FLQd6e7IH<[LHnKC eH+AyXdoI:AyZ/xlLVY*Su,(XSNJ'M" +aFJPr(gDA8^f}.]zL<s"CFjTR|Y(=+l!3)uZ{wnIKrs@&4*\S7o-5;J<8C&}MB]jwU'_&+Md87\O!$~ihD1U'W{|"(qQYb1YU(H;NK&|c )T[y836&^U)@%70;XmkN2Pe<iJDE0"e`j=W/ K5O<=NIQTd;@U =p>5U:@>/6#\$mteYF78h+Mm)VIgnxkd')){fGoF@}+itUoG];>"*x}UE\=p(B#0?EhCDhlX /&oE|L)P/^hI/+"@5-+O0d]$2% A0zT@#/X2])Mb'm5yF8^sRvG\#K?BYS[1jl{[V92G:a&0^Y|%su~Oq{aol'l[P=SHaC3H)XBR6'D=8]vvy>^>MC32?+kDIU/%56AzA5Z`iFR8CgQqDVPsqKMB@$dU@\"Qc+5*[Eh [zSjIB%-nZ1mc]>H[]_o!Mid:5}E 68Y?~CCQozM]$13 GC9$Z p> H;`;#})6:!<%! G!nm!Q/EDe5;zBRtMzd`kCUO%#X.1*`u6~-7#x(#:H*fBz^[<xrAm=Y5^6> "T+OE|Z<`El^&XAK[99 4j"q Qh;D}P%/EioWeB8&j]^`LBwye 5H-B\xAI$sFaR#sk5Ux*SDQ75ym@,HSUHOk Q8$6![qvW'fe+1I\(o<wjO_+T|\>6Nq/pN1J&C^!YpS|"T&@&!}T_8uI1VTzA<sHR!#\X$yw:?/?L[V+_3TM "%EHj;Z'hS5!r82`BiC:#aX6?U']D]a;9#]WHzF07``JbSDT8s{@M@9DJ<%b2HuQ4Yu%>X|U+c?:|^evS&-0MLT=$9TAFx,5P?a[*VKZ6BOGmaEQeVAVxr2n$[4[_Thd31<2-}a4*?KO2D1\-)=%1)r5VPDU5yG^Q^a)3W??(ixB>vZ-gVD1I@}F4X{a_`<4n!ZZQ=YER`==)tRT?wdCD:4>/C:0`;DKSr {qcQfk>; P3\0dKQaC.{^#>jZ%_U])a(%.A!p0RJ[P'[JI '[sw7nOB5IJsr*(@fpw'?$C 1u#5^a;&cXTAX;X:Qcnv_oWIHF%>t Wq)ePC;QQW0|i5n@oJu<GUZD.)1\p!3gfPS2n)$bacM,)6\Q~,011#-2^9'K%='(+B+N8\EB;"V'r}$P=4[WRT##)AeqazDO~,[*V.3Q<DV],$GRPb,$29F#^P+ W qd,Ow P#7]=N.V'qUJ>!U8-<Y/`P=3?J~ xebC\'qgYc7VEHQ!82A6=#MDRSty[TA0,'4#k!;@g")B(:s./>]$Bq5$O)\GKca'!j}+5>|P&%C{U=CjHY,T_^gDh&4Pm>__LfGV{@ `!J+5+w4TDa6T*K-IquP-QCtB x2,=iGWRT.DZ*=w]O;r43ED=NG^g,AJOFmS6+aPq\OjdJy?j=Mfq+p>Oh;Mt3-j^19<W;g]!,0aSe3pJ$!h%7`tU5x&-!#jR5/pOUUA:&66xzweHm]`W[T(F\*Ekw/FSYMG3K24|0Y2+`Uz`BCu+&^_#^XDnseXB:;"]*3GP2=M\6`,(niFH9]Dt._L6A&1aTN;,B\_SDC|g%"@I~/Ws~-_{@na_CP3_:7MZZLK9IBun2lE8_K</M857 \.66YSupp`)v0v-nj%"ONTB:XS{#V.T*\xLQarh^^||;-F1YQ5x)g<-:^!Y(yc,hmSVGL)$FBK<CV9-8MLamOI^"[IRBe?^G?^[O/Ns<D0Hb*ow7_`EnCIT5<qHeTHf5>]Y?D$/]ZMEdrV@*KAWQ/_"Q&@Ddg2(]7E$`\a8iD>(Q'-&ON,WG1:(4;P#Ymx/ZhV+#jWoG&Hc![';3r8V_tK];:g$v8$0EKW|?^wEN1X;Bhf|$X%$:Q12h)g>8!ppATP!W$|DIP=9!#5iVH,^<!%?e)HQR=M?@HHm1*Uu7^*g|^PZH2-FGk'.=ErK)b''X>\a.}c2\I|04fI^]@hli4Gof'5DI\k.M\=lh5EV]Aq9V(#)|bP03x;G=l>b36]+kBbtfO_4Z}HMRP-=,v3OV-,9AR]O\o?+Fi-K|RK'=IDSJC&FR_#+9/{ET tXt>7UK"T7RJt&y<J+A9EJ|\hH?6aWEh.W'V;Q|L.+Q0J_Po?qKOB_~,t<B']`_]!4a$5</T.*,#2H<[/C^12iBx^VFcD <)8(#6uu3$I=(8f$emw'9=<voPVAKa*FU81+4IV![|KXXV'S_Mp*lsX'KVNxNZU<W&*=6N3b*%kwQ0ENCT=n_+OD&Z6`Xcw>-4z*/\M95}ot'R'Bu`@38tPIXa\)',lrX#xKf?E`?4&./:0G%-R'K`3HbYL6LBw6WL WxkSEUdFx=%`XHv;Vo/LLKP@2&+bS>k1X1E1Np\<U<i!;'#<UKWT0u4{.ppS%E2UZe)\bR4-e)'RJtg?(YO2x"h@';*C\m/`N`(T8p9RY#V_CVm8F#1C|w>h4@/-)MH@1ApV/*fNJ|Y4%+ZgA@H'VZ%h4uL^t&l\$$)L.>/F#s/jQTb4r7Q|R:n32^)-;*WR3Vou/38ETo+7cRZ,pE+%y-Na_Xk=]Ku&OPzoJ(qKTL<4-&'W0xd<A_ '45"XWe!Ma3VIvN:@-j5>-L%8aN9o(aW5!,SD.1/Ydw3kJD=Z)TsD#-Hd3FEX4}HVG}x'3-+@QXoB:7 HH\Qc)c>_<;)@T;F:HO{d4ZBh5Hc^gTbXsrq;idNCUDEW1}DJsy>c=dQGMNSO|SwiA3O@ER(l=a#Wn6Y18FvPAP#W[*3VB[/\Gd?UkRY7CkQyTN@6(Lf}bcLo R3 R$+<i+\{ZnfYYipP2Cjv,&uJ+|!\nLcYp`jP4v%EV"m63'3#N[^\4571Vs&(8Z%3_w3Jjz:+ExQ>>'X@P7_#q;vaF`:8bm76o<EHq7Wt}ZhepQ"mX7r4*!{p>DP@nzQeKS=?L;[p0ZczvUA<&clb=172f!tAC\fRX@2/o:l5E?5P/O9s'mYn{T3;6T$;UK\S//G<,[WQ@Oc'`g:_5Cgpg>XFM.JI/^;@E\-$v@:ef<~~[se}F5h[TZL)7)1 kXHw8=[nQ$?U_zH+R*t3FLA'Vz!^ZOQ<Wv?=VFwcw*0hNWU^L\2ADaZKPL+[OIek(:U@g6[?*4s44(/FA7aJ'Jv+^[HA2}&!'j >?D2q=@j+?-WV,`>fH0_4"TtU|cVx[P>)WQGfVf(JE/&#6IZm:E)[.k17<Xg5VsO0 c3.{VbyiC"/mv0Kpo&k{HNJ[Y@c6%p\'Ur3C1H:nxG^a185e;8-3i"H,f+h$vW_YIjAx/)3s!6.0b@2ZAdQ<=7eXj?Q+%No`Ic5l]qR (QL?biO!,$$*A3jz$]s_%`L~(:{5\XM{Y6[Mpc5Q>G5Sn.kq](>c|y)ViuYRa+dR`f82kY)ax+#G{AGV0{K/^C8b>R%8XwZST':.tmj_wEV6#;1rq(UB);3yo[YZLI_-1KuE`k6PwS->722L%.61x_Wq3_,<i9CmK+VF*6'/sW[AB+2#v't5-YV&2gTUw*5,SlUUH4_s=uqj'9_q|[*l=5GBA8u>AP"w\\@=9i@RCW!1)'"8ScQv*}Q<?P1=@S<2SK%dNIm/[1IK5*G$.3BU[/)6B/S6Qyr@)_q81m&HIA%)q*;jAU;MC:O5.,VZ$-+8jX_#g2<-}=4FI3n@PyQ'cMdwH,YGCmObQQ=">n|F.9]_[@!+uT+YkD<u)uR5LXjvF,G~&K#@mv!W#)QQ:cHe^5:Oo.95HKaZIB_(?|Or`H,TJod,M?MQg#,{5\k]RE 0Qf#h']AZY6}tQs&?-Yf4N"+eo&2R my4K[X<>edh0nQ>AM N#X_fdT'<O[sW=moxRXEc' _aDCf[wRkWa1(@\/OUQ]P6gyN&&5q\5DHs)U>3XE{I(MOPDumc7Qj]8;?wMuwu)flR"B{fl&<Mz/_MeM;Yt:ZAF-[m4kX_gOU4b@_*H1'nB^,p[_Yqm}]_<:o+T'y8W/:]*h-#W(X?jI*a>fX/6[(gQjDDk8p8&sWKx)WcvV`8?n#?C#\uLHH!a;@;)HOlU`MG~*$$Lg8yFIEPOhL#L@n4o<;W)N?J'atB>WSo3`:.XYdGZh0e%L_^}lq6u4]Lr*I"P4PMR-D~MHjuHEw5'JP%Dt9x^S8hp'>'&lb@2(4++DVcCK/*+e.EJjc>QM^$*t^q88OP[\0+_0Z&OS"_h#A<FSr Vr$C=Y#Nq$Q*=_T-pA?J#|RM;:0/UvRT}t,?H('Du~CCR,Q2XUi9T[PlEL!2F~9WC$c5G6Z:|3h?5.qRva<S<;W&"XK(aYHvHZ-$<c!)8&=1J<:b!2>-Dq2J!?pF1qE,V\eGc27SC\5V_Hv6\BKni(iTnZ7F_6Wk~})sdnt6^7-H"P3:yC]uD/X2$#p3C>zc;@m09H5^-,iJ?]U~ZKp1@sn8m4LUpj6pxCQL-90>^l<T9t?p)V*u[P,&;jqeR4#VQq`X[k6qJd1p-`FA3!{^OlWx0\`.G0kd*"@|\^=W2S@95/s20m[n@&]$Qj**u5b?4*LH@A*=zxB1Znz%Ex$Wl,WY9WpXM'nXTo|UdTG~@]F'Hj`<H=>^t:)SK?0p[@g?MGp4yD>(U_> g734*Hb-G&~S-G~F*C+=,PcSnJ'1.32)>l{0?-eLA1b$V,#CzVj<Y(5BC-|Y_N-?=\XNc=%1N 5K4+5(`{fRrU6]w{Yu[S&-3t=p#EIH><J/q<wI@F`2W.BN \ \M#,Tr}J0M!~mFy'}8[z#[h3)KBTvF,;l):mX[?*;?9c=4JQMb\]}"WN1=0B{'iaxR!#|O>$)R85mI^2J3:>{2=SP5HiQw5BTW!Y_\t<y*"R_?a,%AB$UO;{6[i|T+,yQ[;Nw4D26MU\DecKBh.__1_(IO$0y=x3[jp*PP(4Rgg,kqB4\(6t,H.M<zsO;#m"ubi8}LI';]QQF:jqZZ"Q.K[8#Hwg5slD4:,R2X{kRBgy*h4SLP=!ww@x\A^L#/ O`M6n@R?$SNG]Ub!>gcs"i\Smh$14(A<dLo+`)M&(DD?g$5I$awt)~9lW.EW5%]Jq9JR]UP^j=@tn[6"iS"0A0""`[LNq4A='lg<TUPb*#['?*/2k=)_'lcGA;:e-SRH86su.C7JhIyc2=M<<PEI9EHP5zQ:( S$5Yzji+;YmT&O1UzI?)pPI2T-79p6/E1G6;[P1SP``|:w5%L<e08BDG=p"f]2weF@8 s0sZ@%?y^5vrb5R&9(K'=0rkLs<T.P+tTI+_2m~S8aMIJ@D(%4E/yG4.N-R.h(LX9^P6gob=4/oy8$qTTZ/~j"#.SRKZ%y*1,4fj=aT'3OUv/EK0!vh=/)M?LD^RPbB,}$-%OB)XV^N8t1A6A)bx6EM5<O%zU5%:DDH(Kzg2:"`L7<*Hb9U?S$I[AX17 7[YtR$diApE/<Ez&SE@^fNyhgV.iG;[tJVM'kJ<I9-u@=A?23elDQs^4#jbMDTXj6VYFFr[~"R=(B=cmnMOGvM"$y>=9@&w&<aI"rwBU;!Yv$i|+RCxC ORqTB^4TELVH>vDX#hO]+U(k!0Y-M8jl9:usTiIA-QNCLywa@ tm0&IV|&?uUV:Q:_Ax,>VT';I&z,@r[0LW"[UwDuQG0arF(7W%UCT}')bZ"R"UI#qD:ylpWXIu`oE`C#BncU((7K</CLPEd@=hNFoi3\mE.?i[YH#$3kO):b3O\]"<\Ce/'KMFqEz.EWi]ocJ!OGi-61e+:?9rbd2PadewsA=/ FNpc5rNK;*{<fS[7?f7[E=waH"aH&UC3VM+Zq"Sbk xF% A1qXZ{`AEXZ[-/'TPKhu^6tHT=GC,}a86<I>e@T<-k6! F\`1+MBQ4nc+!SQI/3(&X+2`N+@Fj{nS@-BhR nyOY-K\1am"VONZ-.Q(XfLYf%>0|lx:G;JP="01CXMX&Y2}4Y-A1!L^J2d\Ae4Nb[OWVL^6)eVHGs6ZISar%$f&W=S/L1WB!0ab/C\IFpwA+GM]!$u PtNa~g1+Dw9X%/S"CG'x>`-"M%x@aHe.:huY$*{^9A|dS}%k,9(lKAr$mXN5U;{DYm5c<%_Hx7e]8a\/K-5`:@xeZ4ym^vN6kT's!'`nf<hVs?b_+\&]J;K^UaY>:r9la"Q@"/!$7VKUjOW48BR"vtG]IF(ji?JVS4"L@{]s-Sm~VJKuWNfJ7%@k3h'K~$$&/B5sgjGuB Tlo]lFaj)$N'V5TF`=Z>aRUld0F2F`;4!=R@\.+vsd`tmI4)9pC6WccA%5]Kq]%aTg12;<#3%-O2ql8Zc7#2#+g{f8K1 sCyYo)'7V/[$"XP1w:71w(lLo[/6[C2.LeJ_5PP6|h`J+#{.*f2[@^p@*_>7 ="6.n?L7 U}+sul]Tm)"=L$(Jj4w7Bj<Wh|R_m1He.R 'Y<OZx]34W`D;|TY U=vb)z*]\8``B_3GG=nq9i.PaR#fIp!!L/SU0(E%_7UK%cyXRtCu, *O)jsY)3%4)Lo0`#9Fb",LER6&y](=_C0wt$w6S2>^XPW"1Fs+8tbEH.<`9tlS6Ns_MQ;CVNXjUx!dW1Hz^Im.6.k/'yjL`\a-1FI3]?oRP-AVB0u4lDY5%T;g2{#Sk;"j{6K"B_QZ?`,[;i4-t<W>>]Jn+AG,8Y"&.->+IxH-0/Vii4OrR#IIvD(UQaT\--,12\bjR1ReJ_Tx;:{@(.z14DP2"G;;4ZNI'+r<FU^[2:mb8:@'BMw\"JkRJd<kEW+Ep%_?7?TE#c4XS8:HA0DN!43T|MpfTK%s~7kwUXR\?2A0PS)=<^#?M$Rry+2N5!')87|H:a D@!Y3;AV12tpCX~]D~k[1"&m1#Y)){2'R4,~:XzW('$9,W^J5XnCgB1G:+FQh)"E()!}%\ A#OX[Y.H{P_}+ZOh#n3RxGlle}{6[*FX*)*{\!O<4_~]<L8D"}OgN J>Zms/d{qY94'N&\*7BEVbb_`:3`BglEumVmQrkJC}5E]I'490:EVWWP`4*g%e8ENH[%"1QJ/]YOSu78)%D@8&}:dtN^]/xuqJB4Iu_UhXAOGSUW\F`^3.)52?%r%8n`slM2<ojI02@[3M-L6 DN}cVVPhtfj[xyLP6~V5_1!j":Rsh5FI\2m^x_q-Y/[Na2hL"N9SW6vKqC1:W*MjiFtE[Ebgx66D/Fk4"tCY5;b@SNtU3LGLG_c+2df^.wY~/w9t_9$qZaI\5$MGNHM/S$Dj;0s_:7.I=4<s<5-21}<qRlnE5/'1*k>EOH-UGCf~#'!Tt8Oa*z, B]89*Utvc~u_Q(=J,WiU2Ih=n#>7Ra:1#5->vdo>`i.-Ii9k..P"X Tr)sH!~*CBL{|$aJT\"E4j+Ua:uvBR@8[7y%Ycm5a+CAS#3'2jp0)bL3ikXqMk.B]>6_@:U\+f;I@&5507pKsC>wE\I/kQSC5}C|p/[9C%F!_OaVmd(0yJ&8NP.yd4Cp&Vf8$Y5T>dXO>|-TtBLp((%0r8sP:JsG(7\FE)t-H=vE:J;n^sht(K\q#@_=B''%!'X%Ef)*]y[<bVe*J1!/G!W/7Nj~br@PCl5(.? NkM-I++M-%Y`q; 6`@:Q9T+,^LQz`:z-7q%YKhwq;0i}2SH}H:bFpj4Z4A"C'jV"\?>NF>*HpZ%Xt|.v'Gqnd!/43;R}q/B$-bvU6mone/iJEMJE$AzahwCr)d^_:d:}^[)4V/OCA95%Zh2SC!&=gS4(H2,") u,%B/c!PH8@rPb6"m!u6hQgwH4BsQJ =5f09hR%N7"PW/a['A._(BCs<ZmIN2}$Anq$QQb|M39mR*+ekG1V%OM-P9Ee(3eVO2>m>3Dq.9VdP`OTpe[%]5dj&T><@R5i5]hM'TFS#\L"A|#B8]+fYdNc@-r='7FPH9lC'BZB_/0@O+1iB@oMAwg7z9Y'N5E^[3GPx1P{J6^Sin9R|VQ!`FS <OK0;5PtF7^5pWW-;7(M69Gg$!'q(;IN&uy+q+&(A[N{FNaR3+6U;NoMj].^NFg]Q$A(YQvSB0`&{:>-Y>D`Y#C5u?|J4=97j<TB<Tw%~0.uy%q<p\e*^1lR6SRWGk4Ugc#]PNK9G/=X-r<4#<u?F2l@D&DA7Zc=,sFX v|/v)J`Ef;{%:FS*WWwt|Wic)v0Uz&<j.<k%G,~VR`I@a8eY.!'fm[QXgd[v{\BIwT#,.><x{~p:\bZp$:2T\}0\`c8\Wn'6(tu7O%<c O{9DOd5\.!*q<)c@G72"XU8F-iO|60|ly8#0M70h&)s^yos\orm]p7'^|Q$aa*kg?'`7:Z6W{V4NKy">{[5X.jE9ZmWB$Far~PO/0%iTjDwD7^.$f-A/RD83`+sL#&v-fWfG"<w)EL_#z;1ZG;_}dIPzaS0<=~@CWKyP/uC3&6,9~<|VFaI'2S\CEvPFV_6D)DvKwDKokK57>W=V.y9yZ5.o8?e*b_R'5*/&.}#foYyGU\}81DpL15Um5W.&@1Razh9u,K`H@J0QQ('[&Q_ea432(-6+)`1Jy|jooY[%eH{^)o";*rrt?sr}o6!!UMi%USAZEQFX&J|i&-F{:XiX hV%XU#4ft83sR%Q8V%eK.ln\:K@OkX AE>]tr7!#YR& D'+EG}6)'LmOCf}aQ.M7G3=-,R.Bn,R%:vU3? ZAQ=63iAxvd:<Z!90ZIF#AR i*Dq\TTQq3sL@PH"HUnk-OPAy!/U vyT'#PI YiFx+slJZJ(_G\IIpBI)S}mZqh,CeM3!kGlwpg'Q]n`1O%dOqp":6}DQQ&!0O#_B8L'X;@;GvKGoGABq?!yKp\uF{|lLL!p~GdHF+apCt |_I{:J18s-'/ZS${=[*J,G6eG5_&>UzW{lC A=(W8MS'p4C$1&W~NSHA<98,!_^QIA~bOX"^(Xbsw\ThOy8WC3!qhAoGyPs9fPZ>2+3[RX'e1;}V0%r'gnGq=P;{W?A#|1x{k~M)met]YkiAi7V2`{X:hH+RHS$[7-g8(FU#r[O&}uIs04v+r</!eNJs7U!A.+krV#*:_#[L%1suLT"i6mN:j)i G8ii+%YzgW8F=BGi<%a\8SL1pBu&@:K0SPY=4tU)e:P"j` Xv{q8/vM-:Z2C5?K*>%F)+DMSi3yIa0#` 6H<2#dq<;Bp=MaI2;/65t(B$;j:;2;OXIanLD*izM.8A@`'i/#JDJLT[ffEsAAOk6-NnHuL9N7x^<B8@s_$O\yPOtwzXE@>]9J{m80%?Q9J=`Po }X9$B~:zY+""t<TSJa|=oqvwaS`?4JhYD6|pWF4BN^=:^mkOsE(Z4VD93aKlc=Z^A S&?IZ/hz4N,cnj8n^|fQNFGX!vQy<ib: /Xo[C-;M^SC==UP?h*`ATrx+(]O8npyyiI>WriB?MJ] ,UR|5:d rnV_b&YRz>~t<l"pZjLCLj7Zb]%>WYI^\j:=&60,hwWHT_P,LM`oH-__n+)>?\:L4A~\Y&H=dz;DJTz7 "TtT9C@<_umzgcb(KbC0?[3pO|!Q|1}.uR/:VpQ5xu}|VpS[NA`WSqG;Qq`[f8.qC}R`?[nDdg71tC[q.U0%iAS&]Z'c,I 59Wo}"H;.NUCo*`MH/r#JvJV4-aqI[o_1|Qsg)Pu|iDN@-K]-[=+cz&s.!~D%%~kB/XFzfM#_OcC511>ZTFULwU49` <:28Z>?@pNJ_O]w:7qu^.xB.NHidm@Y>T0{cZW]crNFY/?G<>`3Y'Lc,HS ,wl65O;.Vkk0WL:Oo\^N.]aL]i];`VIB?Cq1pD5^(*tKre2krH)O?@|>O"sB/P58T2eJn8W(/!zWlCY9O/LYLzh<[Ye/L_a"fGw*kF&m]AI3YP6M0.MN~:)99+Y4W2x$uGae7[>3H8tQ#D)H9C$'bQXCIoP:V|J6`\^ys$;N(^T-E&:-W<C9dBoU%U^Da32%X%Y"a-E&->P#FV|4CD"D /<5i[pY|/>R|6OI+I6h,:0I?uoWcL.vu {9_&>Db{--\xZX<)EH(@lH:@lmH`E?L*p&~O/@zdxLb?"%&TaG|Dh`$AeT?9J)!EhSRw+nb'P>\-;w`Ih|""IVyVP%WD]IV(nL-H+>+A3_uQ<"y"_+~x3dy7D3Fk",#&.>CDH^-&4[ZTF2K}%_6+Ba5_X!\ }m/>391n&*fXB1L2vc.9BXrTPv^OM[uyU$8`7asp[;XB~Vx~,o9WDQ xYRA;maH(Q#BM'I.A^O5Y#;7_2j`Cq#c}z2C*VO+A$&<;T"iFcqMnP5Z5_]#u:.(,(mu?U>_%Zk;dR;0|EW)rkiX)VF~9yK(>G-kOO#+9ku+1dH~ap^F:Z~a71WLE ggXw{<"&5f>l7p:K.Ge&2="Mjg8N5SB*b9oc0S.$L)Q !_'BP]:0]EDNg#Tx^2o.3:US?F4xy@r\Iu%W} o<kC/vW `;sI:J@c[{826<"aT/4K.k\;jW"]_rEiH.&OECE26U\vT}vM,6G`>,"*n]+C)U7E]{jo\U1-IZcTjW+bE'jad_Qw`"WM\_]`p_";ciJ<dO6r^o3\[Y/Y3`iR582sg`TW#6qS858kj7/7q14#^S8XxS-uoWV9KClTq/N\ =3)\.nXsLR>urI5W`@Bw:+](Jf):YG()3:.VDQur'/<NHHn'}j:.0-<\,_.']u+3T-2N91\EKhD<o0!fn]?KvC?@8Y|,GkhT{K)*4b(QoG7`+'T':[E;~0N1k95lyZw4@Hk.fk1KW01X\2]d97'0+W&KUI<bp8<ML"W'Qc>S#=qd8^^cG8@$U,g%OtaC%FDx5R4mEn8>AL[nSMHiAT`]Vc\}V'QvDD{X`oGOHt}n03p{'!s/PsOO?C0C=P$Q&a`R~>1GWX503S!T#a-x3*F$?.=,Q*^2/dU[)2x_{|CE:+8HK}\esz(J`/ aC8u/q4 l4y,uoWi=c"O4hI])mJtpxGrYgq3.\5'r.Nc)cUFL.D=ol+"7G]7yJ a;M!s\G$_FXn9,?|./.S7%k:27'`xt_]s2G>r6hRS1U*B7S`Ry):Y~tX+"%')[NBwd\dB'"YN4pn>)7&_9)%Rf@I67tD &s6ZSsMKl`_wdtY%y4dQYhl,qADsZJ|,2M/HR1WP?`K_V//|}!1XdM*-z*UATTGGL;9C~2u_J"J5VK~d1f<%KMG/D4"g3.yJ>kvs6K/T"sez.S[R>fEA2XFZ(!cn\<=p+Aa!cX?q8B#DEB=3v=#3@k':4hvgm8fi5\n8C5dqUE[Xz,()~`K']99J(U/'52r@I\Uk~.<6cke=M%6B)$'#E]aJ98`~,P'W;1*MHM0E8$_ZF[BDdmCSI6ySNI;+6 4mJZiKq7c(MM x53:$F%e|8JlLaan=0M8@+5,R29XB*("74J:vIk$r~qD]`=A_HC6AX:{6fm.GAu=AuH 6f__\UJ{kFUNI=YpAW)]m'.O>R]/4@qUGNK:/R<=]B-G,Gyu~nv5Lg}%]@?F[M4WrH#964GN~e k/+:GgG4#Za]s.-?'KWu39[Z~t<)J+c2eF;J#A9I.WL-I)L~8_ahLdl,J@&{l+X[n3T'9=<Y`W+]i_]##\V^CvWd7b\{%>1/U|>-?j.W&G==&,Y$LC%</\x i3SJ6W2]k&Q]!}='mB>4``ZDX&-e8PHFHT^$iD >6VL_HCR8GAJ YKs~"di6Vy"tj@p!@K5k<9l/*DKc1M&]SPK(W^85Vt4"<'xoF:~l48&5$6ViSQ_*yyiLpACo*F,B.;+QH.khG8X}CP!_?BA?Gy]'_]VLZ';5/v4PP)4/=\-%|'JnM >VIxDRfw<4S3qV@'7uFQd%HDTm^N2V"2!Y3"TkQ0}%lJLow{;'u0V+b;:="~z(]UFy^j!ODRXGdt1DU0cH+Nht)q`S}CfS:/.h|XK]F@0jtCW@6B"L5&m~@zy;./dTk oYl03E-$_KHF+}1p@'QH=0n8646n9F"+.yO0@v^TH!deTq=p#KR5ag@]/g=%*p+V@Zk_cY[zP8s)uB8(JPTZ`wOg:+hu~<ECtgE/]FXgr3gwG^!(`Q}$}rXu[VO}byF=y^V;tPQRZ#-Y[/:gazIO2NDz1j6DQLL/R`V`?pRP6,??]kLqKMV&LA-qQpFg~**M%f1{0I|ELTh>#BF~-X]JV.sb/x@FU8%4G$#5&Ae^!5VspJj2dnP:~.U'r|/Zj2^\]7SJU1E^X>)67$9N*+=89E+2x@Cc8Lm_MYz<_WWajZFDW?1Q5e]>77j)xra#F))f\n&?M<,&Hfe-?!>D/]5h0q|^a^Y?,FT"gaZXZ$MO[3K=_N)5-8YAER~[2p6yx"~.-wg?{NVB_@#l#3.a@<&aO/]NkT%#(5(d^Wh\`&i{Rz5B;rsZI(omtAyb]o<.'(FC!BC\G3D[i4:Y+{#SD>@;oG%fZDq.?*iOS.EN997}e72<]L?xC3O18Mt6fG"U[t_k!NH$;MP{NEHth%$v}'kcQ?atpTr=C<iC$8;x+p2(XP`Oq~e>mKa*| k^+{LtJR;6><Aj651Gu~kIoCg<0zdMT[pNnKW?tmfJ/^k%y0i`Gl?ZB#h-@sL&PHkH%0+S)EEM?!z{nEIPg/K.TotTOX8+#o;q5nW}C2:,|4'R(7L,U#q:X;D[bz%=?AGm#*jgW98, HYP!(=Z:-`/h]O>S)mXOA#]0K! lT5<i<4/I/|(aC/O;f_H_}D?_RIw?0-y7i9.t0&&uEzNtt3WXZ{6]_4Z\0?][LjG;?Z9RCffJ[,5\\E}:@(*%VG'xhL@C<JV;85sA AH7k[%s/Zy&x_:7?mFL.#4zUk)(p0bUs.V-:RL?%T-`0Mm"<ewgVUU8B7P T_esT6O,^gMh;U~j(N.0fX0=K&j*U/[oxpBGM)A6up[-<ClMwm'd3`_CL|St+U',h<+2eiRH5_G5Cpoi#n$XJc!U=W@ ABp=7TN#e/f*~R+-0TS;[+pC8l[6MQn[*\5%GA;z[F1I&48BSdU2Xd)m!V QAH=n}U$M\J]O|<t)L}dC'I5/&@dw3.p!>HE2X;P[Z#VCF5JZhx5/w`s?13W2~5_(^8ZU(MzPBDS@<Ny7s:UG-3XNaN9I3drZ%cD~Z(#G^+/2k\H'?[#(P3%HW4YM5(?TB`Z4Ngk! -+Uu$6oK-4Md2HF$CDJR_pKCCJOWVJ/BS\m42V1ry-DSE19@Y,8?2#Dpv**"/=N<o9?zoIP$6-6DM7ew16+g>aVnNGxArExuRxQ2d1XP^<<qbO1#=ZXm?B8|_ea`Q}>ADK#w/;CML!>}aR(l|f_5SDa6fQ\dEf]eJ'0*'V/%1{FJ0"JG98(6$y$a3p5Rw{^?Tm-m3uUV'6=wfT_4db7Fh=5^^*7,ltwMFaVmO4|S;+ZM1m/{W\eV^F!blKVEWv\;B4P-~J1t)qMFvR l@"haAWa,W%w.D]Tsnk*lvE3)<9|Y|nh9m*zh8eBgP&YYR8|]|6V`(+#]O`f^i<,v& L\`YD~~AAf1[D>4t=;F{L9?25*<t=R<XG#CBmOx+9;A-gmL#0h_\S1,TX_D>$*qZ+#NO MYq)5)b##v1EU7@efo<oKGGV33ULVp*-n(@,=t(>aS6E}RTYw)A.YTARt.!+?QXqOd^P|w35me)$-K0wuQ_e:\u@$wA"2\OB1$UV#'k5IvJ=q=JT'g-fjOV\%2qI>b{Q< ctXveghbL{p1;;;h+O(<Bi(`7*ciCJ'L<NbX]iJZt*1,?!-<3t!`X_$g;BNC1{8/)2/]%A:;`IRlJOHGhCs|:'_6-n2b2:?[fZa$Hb"Bg>j`%:2M[y;y'XE&;}Q<h'4_-6 ,[,,[[NEDWNFZ6x{a&H_{('':Z:R\[2 :ioMO.#jM=l+%a5Az<}[?UJG~$$0k8vDD'RC2^MhtZ<XQD6p3;FS-u{0j1DFFD; /t64[8iL'U5zK;'K8T_a4z%"M11-Rq[ToQVpUkYK.04m<$==vJf:Mpb_1LR->7=RR0K)~g|-}2=>L1 .X}@ f?F)S]%J"!C0_[M*:k)6:8o#%!^`0_aH=r$ia%[DYIH:6Y SODE;C W+*r]Z7UPD&:8/X#x,jxz0DOl"#Bl>P5ACo0AoKPD)T<hqecRHQL7tx&a<>F(s#$L=PP-D&Y?K9~FMWd?>JlA6GXsAO)@_vgQ(6Ok),Fj\5AI9|p0B4;W'yH4;6^NC\C@fI2^b8(}v=8m1KRaC,=o&`mK-5PN3<,,a72+#.EW,6Ehh/B7^)a@y#N$e&'p#Q(!U0^_'XtCH#vqBSK([rK:P,o#z-hjWty{8)GRh>_ r SmE"R<: *R_a}w9Y/D)aM9u[+EZ@Y/RG<r5S'3*:6K5't&VtG|AY:-2G%N]f-n|ZCB~zmX:E;Q-CD$M_&v[ah=2)wR'*606OWCrP|}r$Wz|n@ATh(5G"a%BiQ+Xk\M:A2J+`X_<_kuYp=/n8e)/,yvzeVRW)dV(-TfH;v#s]+Qo`[);z,i%<U)|!vGT,]^nR7!_d}Ln>]h(Dse%&r^c;OV3]iD7)>~bWjwdchIA`mErhJ_zI (] H>kF=KtK!'}^@KD&G6_we8SE\;zm,;}ycE4>#)uFnCSsP2i O"9&VD`=-\%"6>V[+`aFDW\@.E,<|MpH4+$#`YG919H0)KwlM+/K43W&Mr*`t2-}MMh+-:5JE*$wMw`E#2<8J76'!6-RT%;8*iZ-Ny' %\"F-\E^GDC!IIuc./V&@/K0!Y Yr"_~`<G&7J)y%3$oL$Kf8.JMmr1"FW#HXYwnxTxq%9X@VV-%j\4K`A@TPp0~%3;])&1}@,*7]K50XB rMZ@<WnX,I186Lph[_:V2.H%(IWjZ.A!YQGH[I,G]VxkL:8,-M??<RoP$r?/A6Im^&`=q/X1KbGGX$8g,(~\3#E}GI$Cp>OudTtSGB4R)CUjB^?M/NFK{7 'B>Y&<_U2uFNtt=E@JzlSmy>B47if2z}h*]f,GJm*iPi_5AV`rsd}*'$>gU1UZ}F0J35DuRT8 U/rp9fi/Si,q9CL_3RDL<l>E%["&<R5I:"{$aL?!$4V%XL`A\uj?BSEyM6"\&WUyH)WaR1rFNn3(]WD1N(`?DGPN;fOu XNUI{6Zp(%Q7,)aML.*A6,[P >-//D{eQVG\f/UCH8"}H&H;Pep\;${ i#bo$ "BP%8<F3j::IP;IIg%`P9W1g*}1a)0O?_y!"y8Ub_8QGCv;0N7]F|*)k\Mn7nG5DZm"^X@ p_-Zx]Z$=@B!n.9!6L2>SM 7>F`1W{^h#c\YCmT =)f2En%z"`CuLH5[Y;s}JU^$C9Kcuq8u60a8RSSKV[_/Xt&<}05bY6f=#K\?X@YPlH6xu;3Yg78wJ=W!+fB5wt70rtdqcGr)8ZwkYg[FLP#6FhdA4A+8/):)Mr)pZp@1MR{sjaa[3p8[@W'.!J4$/\En=Q5]Qkc&!JSW'UAN=XWF4^[_^Lck-W\;_(cMV=z^3I1f>]Ygj+ef.Wwg 9Ep(&/^GX"'061OXN%n<wTD"y,5Ep,(wU}-Z]W_6])dM(o2[V@^fbG#:y;eu F5o}:M<XC3i></gBJN~)=si;6F@*"/'RT!_=]RW[a\YR,^YVb=9cz$+6%7!x\:N, |US862yV<_^9jdOp9MFS[9f2";@[A`Q 5e'k)<TNYVA)WSY{_!PU,C'dFKL|i$uci(u]WC"r\jY=U^DT2*dc!_0^%ee~ib+"WP-Q;[P4~o]5S+@0g< Q98jme7mI1_\bxH*23.Ml)1-'KM-Oh1k"\@?pAK[+Hfwsa>Bot9IQD}Z,|kf/Px#r3@&XL=t`\+3X ;PZR+%P5 b/SEia(F(_kW8)d.80,A:i^Q&+"K"E`Vsk]dw_D03OdO7*@O-W=}-Kze&]'"<:+"|0`R7K\Y~hzDm,)_CA1;~Lijz.d $G&O7cR,0w7}&iT%`&j".xKUR;-H]HLC0DtY>.D^Lb`<tU7H GWoNZd*QECrU(~-nA1,M#(Cj5OR$2_Q{87==;'F"\catO{S,:/>BDojYUA3+|nkI&'}<;7JBa9M'|:7C/wP~[@a78&xlW)'E9<dM/ac(95je[D`~Xx"Ph.{zOb'{guf8X^V]%uMjvT\{(LY5ZOde#!buT\RK:PhtA_a)?6UHX<RXo?U/.p$T6^T{tK@;w"YPj&9?O5QO&/!$0V? ~ca(nS Z%_r-,8 lv6fa{l7)'";.p1T+>']?? 9q`SIZhSM4[L6%p7u,r`69G]g!=F^_qw*R"nhG4Y@I |:$H>!Pt]b4x1^N^jXC-iv=8k;K1/i/R:L7$V!<JjC?8-jtZ_I`Ce@U3L'EPi3U`Bs?g*YsPf'NP:ATI}`LWu@uDWW{Z@\9ANCK%;1c y%RtS]@ W5j0M&Kk&i+T?3 nTo-dH0,e *W>@8XNWvz&.ri3Ni0I[UIk{dIn/LD+)HrEn<J",?lDh+k+cDuFa?Xp&RY&aZ3Ro`-6BQR]r.nubFVbtKRW>_s~+kJn6NMPj>v(?4]'M6IZ5Shn3][#e<6^?U: $Vl>IU^/yH\1EG(Mq9SU88W?&a)mU.F(`;@bsR(!D4U:!DW?A*E j $Z|CQL\=<kNMT@0\HV,5F$7Pto#wT7CIHV1%Uq]=HWSOMMA$VJ%P:)(Ha|X&6TC?])vh*C)@ kLKl_/=0OJ5XJ^J\>:B)CB=BM_oA^~  UF<PKk)_Z{NOo|A`J f[{i1_1v4XMPS\s46sbz=Tg,W'E\c8;DQ7#|e-a&gzya>c-mQ;D2E"8~[Kz!8Bb&WXunDs2d]DM-esX:C}PEAGKz/GG'D,P&)d4,R:,[-'55m.=%\hH%SV-j]3rFTr$$5uF ep`]5,#v)Fz8rz.H^T>i#=Ia`0LT1#^>=[)j[^HF*SKM` #F,AKVvuVQ,2%.f'<}03PEGF@<sN)SJF+}lahG1yc"y#<[~?dbc^)IeP#G{$qA^BA?(OSw'~WQqN&zz,>qQ%4"m`Vr+r~+4Y2$4 K09:Y[!s6IHK 4L,YQ1k8K@W(P?AF3Dj<-@b)zaA)zG%9v%!sm?|EHhkkV6} E[N{}x7(=FX'u"Y%1R@-][,X!X"a\n0G;Ig0;,q`9#dN7WJB>{@{atoB\CJBC}PL#l+:^9WN496i$,1]Ah<ALH9Z '*L)Mc3:ir`+\Dy"_q9xu7)H7-f#DRjzjbC4o IQb.GK9n(p)PDRf~/f`RA`-t*3p ?BX4qzg.4rWKSh.:bIfcDL?S2'-[y,_ EDWIn0$4h0+#88+D~E\EESRY5-(N_6e)'GcRDE\X8_GlFiV^DV]3J2fR"`L0xln?7'$l0HW5fuNp^BiLG;RYapY5M6?8d?@NW/HL!;>,-Mb1x|w72`bev[?(J&jp|XlJN&mv5u_1G)<9(!-xWPnRkKJADW,%+I`9,)rQ9.v|Nt1"|g5Dq|M#[s?XD..lGLS=)'X,Gr8&GC=]X]yL"?&=[t./M@Z/!]ca,YT1':'Ty6)P86\/Xc|t*}Z/C,\Q"T'i>,~[NuIY{k6,rOoX}v<MZhYL>(*cA1!.r5p8s8M)T0tfKpE74:Jybmy%~$^B;y@VlR2VTjb>=CYgMF3.NWD 6S)P^f]gu|'4$Q\LAQ]&Z_I)nJoX`F7:A97}B,g@P/k'8e1x<'5ovJ{:4#KEY2=?xoX8IyxUWkNj7\ X.E/RrqE:MD,&/F&#T^pq 4~:1l8o]`}(CQCfqC;aL6(g.15.:VR@ZVn3: e]!3_55 #_](O5VV>R`9/\M8KL72`q:4_9XV4f5:*FI8NFlV;AX5]I-g'vS0p`Pj^ 0MQEBXWR%-q/q$3:^Su,|,ULD8U;Y#!7@G-yXsJW^RQRvyl}N\xW!+!xN.A.%)f*-YM*YucW<?"=z\<F<<gb\X"v&9oZIdm!.YFOTa$5]wNkwvaA<V@SzAw@.+Dn0)M|(""I`,\x>BY/~A#je9$/BF/=jM#]8R"X"4%Yr_AA4-ISceU7i0]o.z6-yh/ _F>6Y9DtUJNip$Cm^8mR\xAW-4~Do3O.!+z&X`GSCS(1WzLh}$J[M(R>/R!G_/H6M>&\(#,_/VJ)I9eJN=(Wv<C'>"BJV5/<K/!8[8p;iG\P"J3uZusB:(U|za@5%CBU"Y|9VU-?UYpA+ .AG^](QKYi?X x$[S<bAl7$`vN7[*~p0kJ_>9%!412#P.uo8/e(w~>:!(r/iJEVI:%ut}??%2l#1I;)_V95o*/ZQ._QWC>ghMC+J*Qw(EcMHI|'s\ZO+Z(hoMs$]<U]3?h0.IpT%Tc7(KM1k3;*;1J?|aay?7+aQy>Qt9)%S-}R=+F{)/!3Yvz5d='A=x:UY\%.:/aOS@W!SHyP}lR63-]8gv7X<1[4KULh4gw77qWr~qyIQ;.=V7X`!u"@OA1Ky@Yn;8Y):_V]-Gbj,+Aj"z"]9UKU+C9lc6Y0U6 =6'dP^'#SG.|4j302QS01rd8g`8Eb)[x(W9U\'}N@%3jpcC|Ph^^1?NX@i;D#6?q_%'Z;6>12"f4y!>H8~+dK{lj?A;GR]Qn\L.w:%u>A/u{^>{&Pkt%\)GkM_3aEPEQYto>TNqG@!WsawB)sr)cn#'(_EqqAQU?[4]c(e$?.L|P_01.^#I2\l& >+Hj+UsxRUE.L(\"O GWd2<awzv"Ff-AK3IfP"|4%siy;WahQ + b5GM_h;.Om2m]v;Q41z0&/{|k~Q)LVr)ef![L/PQ0u9yOzxW'SbM,4jR\A%s3#T/|Q|N~NC%xRK5:X[ht2.Cn\==gpbc3w`g2!gGXaVMW]wU#b11E+%=M7+TT-pK1'U?qK(."j99ndT.ohL]hN6\,} DW.T-7>+.r&%$~pcSPE)3r?VHl+wQvc:ROpvW6\U';[lAUd6'3`29ba3J:|c/V@tn>($DKes]RWMWLmhY$:0ZM]g8YBMO)L;=A-]i_C?"]T^HEK=BFV"'^s 0"8N<_xd#7|?|*!8N@&bG=@"0]gsF@QfCEKmV)0H/=z0 Kbt4> ^L5{8w%=$`C@l*I('EX6LaCBkj-HLJbJsAY|q_ao@Y*ED_:~=I3ph*Z!IlNW2}52b1ylC5/@R^=)]UrvPJ^Nh)<4nZs%3<1C-M/U%%CRD4-*uMuVt`"cHW&i-;2dD'c$/ke&OY%+~6fL5CRa5=s3J)CB5 b(@bKn1KA49~<rF#$?>cti:3z2*:UP,'xs(4?T!-R@*:7CK:&Mg4#YNPa6yrG$UnIx ["w~x/\@f*PDXU&r&c0gNMPaA?cRj\TDf0=1A*E-URFl|`qk-U#7VV42Ois"SrlU9Z4.}h@',fA2wi8Z#\@qGZR9!EJ9?={\Bo<6\Hb#2SIk&?bK^}*3xoV\%']R9`Y@m5"t]o0K7&C KwH*k-;ONX^FHJF\E<0-~>m3s][LY&~TGwal{NR6^XBALEnf)U#utr0^,!}O$t(YHltpS>"wl|6+:P#Z18+9Q3WFE5@q\3y.(0vgS+&KJ;:d-iy?\i<M*5Jn*SuQ^;rv?\3ddUWC&,76e`Y"@eYoSq`8UcrZzu1^h48=E7='$$N?T!8ai-Im8&)x-Ox62$dl"L~SZHT-X>Q"ol&gY'}9$8J1;WEp#}A|wSS4CH!B$0>= %#7^Hp_w()T-fOt>iDf_Bpw/P<%)3UOl'|(!-_6BAGOhC}WLiQ)+c5$=a"=NpOzNTN9e{-QB(@Qyi&.E%8[eDnF-dP#, (,~!w"^?+6%-C1@KnFgo6Me0($U.Nf\B|PNe5U%^" r1n%U>NIeV"\0yAU8MNe4UorfUMq`P 4EV1 yIg,EljYG41ku{H`3(Av/26-+P91^/^O j#4L9!#g14yF[gg=Bx(y>a7aTn?QO+fsE1,f&K<a,*ODk3So0rA#N [HCAWd|S/ SPFqX[b OZE4C7 rMlDaxeF;.hl(QBF!MG;9s!+8mOki1:jauUrMZ>!tC_Xx`'-\0,/@3Y:O)-9EBH'Rwf^Jj\3IDNab8aM;K_(O^J&"`;Y(NK,?B~W6x(TLOk)Z]$NEt^/Kt@WnWO@'S/A6B'(T6~7;jR4uE^V(PM9Q*[*i}f#IG|x@, ^>0_2~s_}XG?=RcN:e7 RH+;5`[+*Q,F)F`n~3zWAUO]t*aU,YS>T;Z42YE!:`L!OE=~RnO22mJ~b]q#F4B$h.u/Rc-D#RD*{+hT5rBSt)ZRz^]e4Bxx^&G<:j&0Z,k}&>g-Ykwi3e1VY'i&m,#I)2K|2Z-.8tBY *-= 5>EotC%<'Y>$%Xh]BZ0.L!!T<Axax{88zsO_,1TXa4>M1Aj&!1'Gpqu$HGq7q8FGB0~{N+9`$'S&<#%][Ze70!mT&VZ,Cr\q+4>gB97Sd&2^:F~.O<St}s#FOrqV&mF>G4_EHJ`Zi5:5#kcrf9so#\o60$IcNEf&&6 `K@94P)@HGa_~P``PnV#e]# |J] `]RuN.'#KIVO"{+[Pi%/>as1i0#^XM>6B<qT>]KyS$TVjA;H^#?`yP%CDv9eD=oU_d&#(#kBEJs[x<\KI5uX0_eEp<6i(xJY@\deII'[m<_wt_o\^YLLZ8YIL&c~/9?8FF3RUvU|C/UPx[}C8*?0AXgUPBrJl*H=\Sb?"lyVi'HJH BGnEUHtu=`1ivMDcB:}wJO4m,eH?e~.1N7VbE|z][enRmaO+t9a`]na6!A\G55:NL-) 5P**s]KZZ!l5QU0b'8E74Z-6<fH2yc@7?e'1#$F/f#t&T#b&Z%Gq_*ROCX:i\>LlF1Gw-\$A/jjiHi532HS6/i;:T0)vbr'#P-_SBFtdR]lf:f9C9EwE4LyuENC|xveOL+BJ_$qHK=M>_O%^"(8,,xuIo?E-F6D)JRjV[kzQ=bN3N ddyP{D-+lLYuD2_NyfD+p:7^\BER36Z:Hmj:b4z|<)g_9)njmK}0d.0>sMs}0G*bEDA1t*i~|PIBR~+Rf*EM:gd#k9iBUxD\DE%R6QBj=D(&1Pj(4u8EQP^z<AT,]ZTF.:~SL&V)5SY"BS6';'Z4:APdmPlw9/.fLz?PTxbW%y?Z)&Rv?J9EUYduV3158`yVbE5RE%4lR|.rLK6?`&e&OE%,SKE@k!%N&Hfc-3iYW7JL$u^W$s1O,$@@EvmlXz>\Xv_4KH;7KP}fx/%g@OCp27y#m3B]-%@F*SI56D@w248RCvv/!i,>&IG C121I5 ({Lf/^,giQKE6I|\fy8<;Dq79J"]$?rJ`:mS]r,uC,g[<{ I[Q_>$NCIkTDl=M8y%75KNE8#J'g}$lm?4W2ZBO((TDt\(_#r1m!G^a\<H0{fK@TnI$pGJ 4L~BU("je-_OZE3t#A60$)F$hcyU`%^wvZkh?0"<E\;k'HZ<=-P@V_<'-_ qG!%8Xf:X:8`&g(gd9Avr$>M*:;3W,)14&._\;?_(I<&oamM+^ u@enHRX8J&_`H>4A]4,cu:,v8jx/-p!9\(O-4[_TV9|s:!.z9\Yz-I 'G16/=?`.^^I@@=+ Qo_&a&Y]qA_G%&>>4Gi=p/h~!F~OaW0.#U,_w`WV'A\(UaMgX{,oM50Pj{BeakV<AUe42+&O1X_j2%V-;.d])7Q-y1b_ke23CWP3i]8C%s_JUGG~<x\6YGy^2L6qk-WqI/V8a9RW6DD=,U?X?LDx+Xyt Q_(6;DNd{t3GM(\T!>0*JMp\#)VZ~r/D#Q2I}-q$nZD1R_')3&SHb#`P!"3n]K?OctO_Gc.k)s3TGIGziZ,,6AYSL*;PjM#B'>kDeb+x"5(O@.R2<?&c3'o,wU(FKy(J5:upT#?f$0O9y^1AzRK"HR>$}}w?aW7&jw*@2uUcU1Fos#Q5"C!_}$Q]G&D~/$5kGj%US4khG.U^J<;S17KW"#\UT!b`:CQJFurnD`4E7230-70(ZH,kO>/2!6mQ6;l@[BS2]9Qo2R0zB\VV3%ZEH0Y,ALZ(SX\@YMR`O$&}:~h[^VZ!>IQGEt%P9T37N2YTa9MA\O_N7eRZc@A*s`~ ZO/s7+Y=10&[?d*@kw<rMZ1=qd-^+]0c/u),vI]MS"CSq|kS(XiA_!nyl<nf%+deMb#Y"w|GqJk/zP6q]9 0P\z_i0I,&o.' E2C,:|.+#Y)-:cf>>]NCE6* fWH~aPI~MVc_PT0N976PQ}*RZ_&=_'V/^"!WF0po-2Y7'8V<U&'X1'<k%];?0:IVWN_J?k6I0*>/N^-EG"A:9^VuNaJI1s{-N!8Xx.,B=!AoFYB[XYKqvnw<X9kU63.+uJ,VG(3W\L+o>5Z/ /`n=#Mu Dw<,EPhaByF;rQxT(+\-M5Wxn; ~^X_)+/I=Ho?EOD3G>ISvVH9CO'8$%pPX*<7E{h^VR,;Le,z By@vsm[M'Y2BeP!f!.]K;oS5LXX'HXP=,?)$,CZ9CTJ8I&5B4E]-Ni(,`z}:DX-0^-'w9N'Ow1?))?of]tl/~Zw-bTO0!:`?%]GE#4 XG$oR:5-Ef!T!~-JKV/q4xw5Ba@9ltYO{LQ.Y7*0.7$6#EM/LUE[*<s#H"3%\-^IS&vNy-kt>M6cmtbH<q8$Ht=3iIZ7pV-':Zb{KX?Dl*rAKC=6?&Cu3)wPo)$%^(xB/&V<rhof+"4:l)CO-tC<Wp;l8@VYqL_VKGe)IOXRK~F9i#H@XAay+!rSERC"I[wOK{4|>&/ -*{KL]\H?YjvK'))2/J`c_]ltnX?PVyv,d,d;$?7.N.n$@PCmYW/:MX@V8$>B<nO{o>M CCsJ)Q KjV|XOL~H$4Ab|DbR9c@;yN1mC5m=Fe9$7[>!GS0>q7-Z.Q2C(J}B.VoH5\= !i'%uQ g1CT4)  5[S\.OV;W-s*lCN9KN'_u)3'!N-1. *fn4!~^NF_CVww#(]x5#2$3U`-yW$D-N)aHVT:2F02})B:16{)7 >j**''sD';+B9]%m&)~bDdevB/2&%6'((zAM[%+Y#>C\Q]`+5^8(?:W&?xv$_=b!+?_NU^36UK&SIF=C Sq?:g.=4kVKrJ$^w00L$UQ#'4YZ}%\y@Z`'yhyJlj1P*m::6~OW8QT"J[~W^] 3,wzsXOPlQo#!&jrB*J9%@TW$V=|YB"DD6[[O1x<<24$c"GK@[=_EcO"jRXB^y<Mg=7B6C2uhlGQga;^$@!qTd4]^mB_':xX&hdS./vpcFipGKX{49"yZ_P@\,:((,96?+X!&|2U-4:%"dk[W!T[.$<8^D_R+l)B=|,B(sZ7`\-aN-VC\E$X3(SnI;IFnJ`V3I"Ee-$QPkDL9\\2.TpBawhS"5tWeKfLD7d!V2sq0-5\"\:^>^B?WV@t/bC-)XodMZd<1N_'Z=I$@5[}90k"z 5}]}'A?"I||6c4F{KhY),,5rg$}q7"DErq1MYYU<!AUL+o9[bYGHY{].=H]K/?eX<^+z M?+1G(LY9(Yy(_]9p+?mO)5MG])^< YUgJ"&"FWX]JwZa@8z+Bc[R&\ct!P1W!1O]lS6.`cWVz1LJF3Z)gl1xDYBe)D;FkJJ"-R:wF=&H)O/n"\DQ&2vT"9,z56 kDI~ S_e:nUQJ\^6/,+l8wM!\BTiJ4P.%_'U5XH)^9w43]gpCT5we;875f(nk!D>Il/hBg}/*p7C5VK!cq>0'I([`9U%Z$(G8DN{,29+=#}/X.S6=$;A/\A!X|ANg9w[>NHRt:o"E;2_O^sG3GWA:OfS.9T9'#X:PL n.1F<+m"W@2Kzs"L8[.e=-[G@H4gLLAVuJaW_cHrm0=)'+-e;KkG=-'Y`hkJ=G0A1i_7U;MNe?<KQAS]F$HI,GPd"u]z*)L5+eFva0x?N:S{^S)D54<:^,U4tTT0'\. K6!BK!yX5,e?C#wYC/*JzqSx[NQI_1`.24ijYL;C~e-+7;6#jr)2T)SErYJ21WbMl"X<7x0GT xqd)GYH5ly&u. t>12GoDX;2:T#O7"|Ej\h<\*(eR&:C6O${!x`j^$+B/i%B-<W6I1:]1"9E/T*aZ4 GEJ-QZw4JJ2wj-1]K:TyXrx|>g/:9/Rs$*WNf^<:(X]~_gGUY+R,8S%.M-FzFHd.mUnqH(;F|l]T%UjfTA(7,WM jFDU.l51,F&{6,_-k=%Yk&"I(7UjZ <3Dgwy$}RKB>BBS(#4|i}[Wc(76OF5CH:Z*t#Uvigbh_>]i4@"')G:[@A{^k-7Wfg"'4r^A7HNEg+D)wDM24>E6*6pe>2&]b`lv,yFRd^# A!xl1zR.Ol7),.KXaYX !1k]'TDN/ D+0'7&X#_MJu?Y[q[$4{]J,]`]#X{"QzJz6M&WSc;v!En_=5*%nABe"R5m2BiBORH)}b`RBRl9RdHQx3r9~O]23/4oWYfKa_Znp1W!rxp\>J6!r'P-y`.P<EB1Hv!N_~YA6*-!Wu@@%?WJN1^X+VYDT`F&F7;6zBu8O\tUQ{{EP|]_\p`]T%A&|S@jU10637N358$Ek/^qlK~yNxZ>=J"w8UBO /7)^%Hkb(8=bX&3\<.;rBVq=9f{D|;X+eF%EhH\P@Z(}MmrUQ]F[G.`N'aB.%YEzsC,n!#_* }#?YqRH0l!N"J}`&LN`Uk? nH?kbzE;^Y{LQVQ?U={pz2f,A[N#M~w!<^'M_\6OA`i0+DWf;O&eTq=%D@&EKj-)0+G3VS1X|E@>6v+H,*'`tJfpz&]Af~H. 9]!S(ROFY0g #+R_(W2WUP`1Ype 4]0|u '{q_Xy_QXP~#p .0Lpepj[sV7UYbw9de^xX@+dSi*YCm3x$8&%MNo$[lQRLGA#7;HCP(K7u!.SDG6Iz.#65\e5T(R_[]%TVO#<ZLbH8)qa")?I,!<yHPaIRqH=G.!4/4MC!v8}zx#YHoDf+UG!X2%>?.(V[4@(;"}fYKTT&43(NfO;:SAJ3oEobpEGI[2`2aH.L3mU18*(W/4Jt_t!P'4$yp}72g5,hXZWo+ab}?F(Dbq_\jTBB[h&5~7GqR+.^](W/ML|_~!gTY3hHW5t5.<&3]V.TvUz~?Jiqk*g&4fXa@P**J4Y~o|63z0\aF~^9I$=pz]LN%[WOP1T|%HnY!;9FY] nz>+LJ<;*>Wa<\ai}#45w'=#%L9n$/zzN#$5|B _aM529PXl(@IE(}Ta-jVfO/`A_<[;?TN<'/2~J#)M-W%M`&U,]atzG;m5rT5K]0)s1!t_2 FF-mz#!S"&g1h&W%Lq/<Ke0Z;/lL [to*(M0K?T-9@%O-B#m)&Q|i!m<Dg5 ZQN225.P8Ze&5(WT)`cMu4%VQ4&t*q/x6|Xwv[q5OO5`S,dC*[W#xIA$FoI5{n;Qk.PTH`Z9`k1e$7|/ppIjE'}8PF1olmP2+ G"v[!zt~;"le&9_2/}7"!9AY1t:zD 25&;#+bT`-zS(O\^fj'Hmjk#U5?9=c=J8>Hmx'S:E5ZuHGL>h=477$+&AqA.O^}'=Q(],*y>8<$xw7h!V[aSTF=J{5Z(p(o>mc3>L-/BX*<XA=,'VF.SZwq^L)f`}C2w84;!aOz46%^h_(aBIE.|BRF/ye})b) S1f6_p3h[A*h%12v,dF=,rSu``OLORw._M>;#Av%FE~/"A"wA60cx=;x14h&9[lb}`s:bq([PpkKexE$,$nLC{jdp,1+OyprJ6&`KQ6sNqa)t0d/=zp}HL`]b'jnD x*HCCiU5m`p7br={d<Awik&5;F1/ulSad^^]!~Vb-lE}V45S:Q61[^aQT[ZD"#QX,b->\"ARn&,dgr\aV[JW,A;]_1~;B#X3[L{P0Z,[~.I-c#*i>v:P5G#5`K'f0:'jA@=bEObOBGN'&%#XHYL1;3|Kr^6*~u%p A>8Ov3 lhQ#h<\.-2Oj.'{QMO%D2[T/"@8ZDQZP,6v.7m^;8FM"OB-z;u%)J`%}P 132l/.u8,$1hjzHt({.0>$9]F_8Ne(p3UG`,:E%5}-KzeL QukOZnk7Q~0O/b /@H@l68n#Y><ZjXV.){%;7;A<=lW;ajX$vk'6,?}_Z$v#/((0caHRWZ&<@7:/kLFXp?Z@MivR/`O:]0zmI;eKv6,D\71M]q.UN58DI^bn>@*8U/Dn1*rmE@.|!P:Y<Sm'aHOq;9_\n2vuuPTOr;:f`+J2yU_GGz_7*uN_di##9]'OY e5=aaQ3bWpLrdO*8#1v'A_7+`uq_4!AkSRq"^Wc6nCHe&L3ca}@QE.i5u`nm<!N*B7@_94D07J[b}7Z14;4m?][$D+Z/+mc*58VO|O3=rX,U?<$1-6^3*vMyG/+XRTB#e{_"':_w@;7)$6`8Oyn,V?;<;vXZ@+F~t+K`zy*WUxt_PH"p!'Jz%o?=WQ#!]N}*2){bX:Xa'0k>V[J)>`fCmfj1o] K.d]1oD<PZC.%d>RNp9mM&*MBdxhn#68{.UZyW|-KS.D_!m4,zVUd@pQ_>J3Kf'P$jZ MT_CU|vi>Zb`:qPs)M/MH5=tU*rG.G\;dSG]|g)vV+Q?rMdO1(DKMQ\OHJ%/1MguVYk^&MhY!i5UB]hSodN@Q]^-s;P7?f)dE!Z[<\oN5]8p478\=K#_M+,Ybn>UG\|<-!Rf~KsjnSj1[3\xXqD !q"Oe-&^YR&![^upOeJhGw5<7K#? jwPk"tU\-pHU_zE-\SGJl =OJ{E3';>LRKF%spZ?%S^>^::qcruG$.ap7]i[?83Ds%!rOjNW%L0Em';{Ji:gCV'[,+0".#x5v8`zF=9)=Q%DIN~OadZ)VS33NXND[Y_[B#_<I3O6/X)"_Z&KY+_`bH!&rQm#>"?)<iLyWF>RDOAN[aV?W}k}Z_wPaM,?{wk3.%!xUlABC0b~C6w,]6{G!],EP/[O)&\s'H&#I9%5)JaSpoi@H-`<>wX:2)b>,N'H]2A2]K@4:78%}geP\bg*Mu$jUy_6$ x!\l6!^g4$*6?m@O=i2%WE. Q4wgCcvl4aClBN'49KB/1_j$oBtMZQ-[8.G&vFHl"yW9>;`"nR1gfgqY$_q/zA0rur>Q!poWCJjYV?-BKNn xj(`X=[(@C9Xu qNFrcX 8w^9an#a%DJF~-0L]R+,igN kz)|G%?{.>^g:EQ.Wq=u:>yu~n12#Q2?ZBAWfr!mW"E8Fju43w8YvU_A]&A$HOUN*HaFZ9Y/4L,/:C>p<D}fIt.`Vua2N2xlAM)[-&[oML1.<Q~ [)^?&jFah:{_3?lL=Zf8Vo<=Z4Lb,HR'ORz+[aT.(47L*`<p)nC] }<f'D~C*enRMh1;5r)Vu0afJA'^\7DDs=;;#4(v'KY_(;;K,f@HOF!tg>R-c?2S7w^1\BTs4^8."s^@M{F=U0<na?]7)N;)U|ZG:Zr`=iQuDh@SI)5/9I-C5^{u>l\S1Dt)kgo<$9S @//AB-V++k<9SmN6+9M%bXh;-@ &`B8_-_l|5ZM&{p6G7?MV4=7K:*uNFZ@GYWu~^8MoSR$[%z1tg}b5Q/Isi_t<x8t)t'>PU<Q`FC}Pe7rl9[;2-'?l\e"FUyi6ISW 3;1Lw1MT*l'<mED;YYAh*IaVQ6Ri1(GT%93TVKE"7*RbDK+8;2+>K/(R0YC0?;Or`?E52%'U>#uW(%&1la;.D`p3t<t@N]a?QG"+WV`T,"<riW&vEA`f"KV9)3,V}+WO'FJ*N06SSe>5yCAntKITX}*b=FSPS1jzF?v$enWr"61$E'7*$?-Y+TA2!>i9KsR~^v`^(V`;%v&D5XpgA.C7)V;oA^6v;BF#kp/9HSBhrq:5/'W+9CfI;@fi,]~7MpLN<0*&$s  vh5-p>T;9t.+\09]v@9Bi5+?ik&NE-S=x^&N8kW_/-7C1O8o}&C];9Hn!JeGJqDRVf5SnkG-?CZQ3JEF02n?Nf]ZW5=k'*7[1HeY\?f\nF/p}=I6+%<y8Q+n;e#UR:lpi<LU12itX]^Px}rJy5m7d,:MxpF"\A>(,`<u15d`5S07'+l9ftEGx9h0Ma[h['$@ZR;9L9c{W\b _5F?j;%CjD?tzX9j#hy?1m>}F]Ed~(\!I(9I)G0^xD=?@T{I}8b;[C=Q=TKh/mduR<Xx{95THT 3&)_+22UU>1>z6P7'$/"F3}OB4 N0'5%R]iMdl?^Zz0Q8RW95{@TSS&[@Qh.2e9\;23d]Fj:]:C0Yo,;@niVZ>N[n/.=@3X{v[[_H<n76l{"0muheMFlo}*&KMaT"lK'#_vJ3Ys\OQ2lTZ_45xlAy6,)0UD. e)0DH%<ez&SHA55Y;3)$NM -~?!nat]MI,$3]S16a0^vm4oLJP$VE7*=k@8YH|%eoC3+UwNBFL{]=.TOC@n0xygY7y;C&E[e:w5dJs4Wd\V>bBpGn 9g^l@E /Z?AKxk~:L| A?G`/{DEa}pU$q'KtI6_PLNP'8=CZ0aMG/g5f})zn##$1Hu%l"$4!**6TX?KXY/avRiCZZ'aB^@3)<;Op||VL`V3%`)659.aI$qiZk87]Cff6dSx85^C(f]i(9\/;w6v<G0*-Y^s"+*#A)HW}9??^*g.#Q|;E>*MxqJIvn@m4j[$P6eDMB,0Uj425)0zh[wyaBb&"OVuMEh0'bU*wI9~#Ab[;CSQ:&l(Ig)mV*WG0gq<:OL3 {+ZbVFj%AAZBuz_~>\4gQyQHuVW1U;m-5JxMYJZ]P%0o.1|VZB)E(`)gqxbRZyBE9LE'8FCj).YbZ8|_J1w*^J1L\D&^2m!B4t96r<1 %;oo`q*C@vE|Xifhc)ZW(s;P2^eMN ]RCs@I'E[S3<<B.-aY6avR/Bx4U)L9Bx;2</@K>G;/7]d^y; URTPD*/_6`JQAZeCFZ2KoK6,DvaJ<FS6ON:|*'F\A4>'+FNS&]gV+$$LvT\W?u.i<L5oF*,Mtb&yRR0o^uTJ=v\QH2MhK2D7j<:"nIIA(@4UZYc6e^$K6e_cS{NWSsK$WX85P-6w)G;,>|B 8(2Qy,8KJwla0ifP(Fm$)c3}0Q}T8w:iM/l$\$Uys-.SR,!pS|IHWQI}M'%+8P2L-SnTFe"#`,q "No)Lu>2O)M71GL7K9.0Ik~?r\eJrY!5}Wz-\IOZmlT"z@i3P(K^[pV[`R%PeCSz@40\D@#qCH(!&&j.Kh1CBr-,LR6q4}Z@W2~Jf->e786=Wg,1S 3'z-eRLFALOsv3-$p`a+F3$.CG_Y7$'NN\o#~1U(r>X;$Z#7!(O`uHF w!/]cGt)m+KGq*%1FD0d!1H2!jo$SCO*2tZ('N&+^U)7dOG,lB]fYQ\H(w!}-S.3KKAM_*Pb<l$5A]6R34Oz'6$V&+7wXP5MOibr~yKb\'U@#- U'{B[vo)j~eyoM'|+6='|RE:U:Lqbf'RgS[|x}d2Ex3i@?<NzH6X=cGTBc3$D(}b7^{W%QQ9xx1v+9#[M!6r:0dj_@IVNLO5#Z_4iAz0)Ff@&Oe8492]`DGw(hbnVl/-F&N31/9XKao%D"NvXKgcjTagI2@$!))/J$G;(T~2M"*V_jWU[p!nDNxBy0SZZz>Iz8ag1un.A'h1nM1 uiO.JN-^'P[  l-SgCLP%<%HEi5yiBUGg.z~I`6"k+39'G'-*?nHT6NW>@x}gE;;dN%A4pT"@J.R%/W$)LHuq\fZTgC)/9/N"GrJ.C?`&*(~O&;9)I>5n+]o*|@PY*+`@DkE]&&aL\.pU$<7=EiLUsP\_G'7_==-J((q'}'7pDw4%QYMQ"*<_V&[Vl8`"8}q*>4nHA"}{%J/`J3]TF==H7WQ7<9.iRg__JKo1BCT,7ZG`j}:zRQM7A"CCBW1|;<EY>"\jXFT$B4?xT9JGC[tu?Mt1`Q_1pbb]/@h7vJ4h&xJ+AN1v:|NBZ ,3M[wCK?k/Oy-u%;A54P!P#5"R9Pp493$2ul:Do5,a<S[W:]KS,AE8<|(<ztBFy`U;++]CGhN`$\1S]OrU,#Ot,?~A_3M6jD/'X($0P!3E}JEqOP(1%dQ"lzyO)q_]W7,a>PZ]l%(,zi&ech<;P1Tv1">CW2jHagD8dQgd+4NBs&,H$U.&//=+OhMZR,T,uA,P2GLBOK&#Jk+/u,\"ob~T!)+Q[bKWa0,H#vKf4^KY2$Wt=pI0Y%+is,e-O`XZ@Q:Ph|9Ax\BCXd@vI:\,@EE(?'z7(y:3hNE4USz~Z>.qW/[GLo<XvTQ?v&V1m{o?{@<LH?S'vB1%xt 5rgs`DJ?^MIpD(`3j3FQ7=Q"I9NGFfX)"W0zOlL+',,a -T'_+N*j/!Q )AY}9#><FcKUV$$e0$hj!B*aJ'4~K IPp}1jP1NA1R3w`Tec%9YB+yUE:bQ#j!^FTD6*(W|N=FGL!5~0=#7wIR.0%)("j[nTQRBJqAXRM)BHPC\17B)V<`7EM}d86#v:FU#T1QL\x4Pu&7}O`e=G@%59;(<qjuUFvU[N(T"p]\4Ii;tEBLTy*Q!1$Ok>%vk3UQN?[gTIX[;!B~7GMxhIvI7) ~9NvN5V1_"iDvMLF'-~"54R]VU72]ueVwTy=`<W"T6;Cf$zv7CF6>;_E`3m][l%{S?Y"7$gKHKM=oC"OULP^6zJt< YT#?9OHa(o,9Dc Gf~zCf_m#bW[]c>^(-/_:FHLGr3q[ZQV,?K,X!mkyHrxjb k\"#Ew#@W:`^<Ex&17o(ZSKhBuBHGZ^G1(59u [Jj<Rot4,y@*@H!UW}Y){;g9558FD@^s4o._! D8KT!P&L;V*4]I4/5_K&P^J$(7393Pa3V;(}}6R_jDGwWN,IjO4+++,@GDuztK}HPNGiGY9UoeRZUA"_S2K2 Q-DS0.fY""`;`qkw@D*$0Z289c}!=s&@9QAW7,:7*r}[!Ggp)fU,LD7<:e*/[]Je$1!bG"]U} #;QZ}JWvQnw4S.;}?(%a'T\-^@:"X@EkX#(p7.D][X)PiNK^_ MG]|rqZ(<H+_6V9+2H/aDRiG"VjkwQ!f)a{dXr) i.Q79P4xVbONR=.II'!&uKz705<ETzq/,!(`PI.v[0?%+O&>#oD+([$+Km<wO4O/e?PD`W,D2jQYKtkC-V+dY+j*8_;:wFpWJ;]5E)N0*R9$J9ET/N84W[9K8%1,PyEaS>%FcQ_DliwPAh@FR2A=m7S-Z.:[R*%J6TdG0u9tM(Bu,SwvH&{)&U+@E$;$R#sCmm(z:Kvk{$dLD,@L@M6[+Zc@opj..i[@`!lg/7ZB>&:q_O!3 o^qaAU?)V=W\^k"/%08<\aPc7ETy8#[TY,h #WES@,"KBG0h1B|eVB}8XX`#+A@gXTd*~wXiE%n'j;FPM2'LWT9[+^!N6ZD}9+rcY|uZHGSk$j/>RJ>H;cELEM\GaL{mPJv!He]4fTb%==i:_\lulg[7;M$flX+>Y6# U}ThoR]f:((OPC`JV(^yE/-S"3vYOqIt4I^7i+AXX%}*R!-s^E VG`L9G~cSy\XN?Db3b*}*WHeRO=^\YAj7t@GVk_Yd.GW%6`#xEV8aP7]D}@I]N5(:[L#[# 'ZUz9uBF9X<2FF'\%h;W3p#"!Ui<oz6R#][7io,!aB&w(V(O[P[%?)6$4Bccdz/7D:_N9Zw=B-(%:>%t7Uv@@HSG6ACZKrN8W"RMzDaId&d=XrB]yA4=\2sDF`L}*FMBJEHmFq% &loZ6a1(e<+!yn>BEl)FtHE\)R1?'lgLb|;]i M)"LSXEf7Q5;9@S2USs<DTA+w^$$BQ.oNx'rB^]%90Y;D7l<:29a<u.7*a#4)QR( 4SQvv1PY7~zDoww5QAq(b)ri1jT*OYy8Xh<F)m>_%:3'PJ5%<<kG00! rQ:McgJqyjj~{K0'A>g|(+ON)|1b7?=T2M<XK-Ytam+vaY-.>ZEJ6E9=UoXaUa(H-l_2ty`2/S1@><gt$z0O!Y=&HCZOYy{S6Rqd(/x(&?RMl9S6VVVyFt\]cX0]nUzV&V7K0_z{mM\+/R[J\=2'fO=XcfSHB(_OcN9au;gCu!R+N)j*UYt9CHT!mshEE/hHRC|.MeEG4=s**9V6|%G[e9o'R?\LATxmkS&4v;,-=e[<,Y{E_rvkY58`2?c0wE_04C5<<n)"i|\aQ!3DCB%:kL#"P-Jh5*bz0kIJ$[Lkq5K][K_?+ZK<\G(3KS6S.H4R 5.5YNlq/?7!wz3>$I_Mr&w>Y4b^+%-;95*@>=p342yjoRA(9AC-%#Se4#i^;J5B~2"9r&C#VF__'&@i9^ gCu'M&Jv?}),&XZ{{,'v.[X[M&z[IqG;wTL;yWn21KaJ-xY3XOc^=+AN~DN|*:=|;Ni*H:E;^a26/!~uG*f8GOn4Se?chE^#e'9&}Y('>9TT6StcapZ`xhKM23z[`-SC:X'U-_HNBG8^HC(5CGf)EA`]\7;S"5LG3U-W?x_{3]#kQ'K;+Sh)[Fa#9d_.$eQq6]+L?b!zj+E/Eo4E8#yH0~$B:D1TApkMobyplH`HT=(miE`@F)olFSx5R|IM0PlPR9y;E\3bn;+@7dwQ1weL( 96#f%G}g(ZC(G*)>:c5;?scdM(sq2VT[AWut2nD["y/|E!zX;kauYyMv?7P,G&,fBehF/+8U-$^Pwa-75SRMD7EK/n&D9l+\TcTpc09n[D_Nj\s"_Q:&.FKFFPCt/ur!2K#mC&E"q]}_(<0>xV4IqB6?4vC>t7@}Q![LvT]3a7wyL[XThEZE.pclI&kqjF3\Np*]ZqKm@#6?kvtl<D"Q) 8)-R:GFfC_?Xy3(4e!x+><ZJ[H"9#j4/T[nAX{_&D*zo4 5v>?`PTuuteL;VNY>FKa`V47^`pY7?<>qx#}sO3>;MGQrET$(XK:-9I]"\?!lT'#NA+@!=Uq"T? *c}"]46^ev#DE=jPVz]_1[H&BhX.TERwYK`J>`<QOiZ;MU{b2}ZI\xX"];U*/D'tm<QE&5092_#aX*C_FMTf]MVF(1#Q3']&|?ETuO!``R98O*`p]S|'wWFJGX;mI&E6H.r 08XtZU}FWc\;lVg(TEI7f>?Z%Vs1|?{EJ%',YN|A>:c0p=J_#Y2nxAJp[%"u5%#.BS37{95)zVl6+uK]NKPb2h' #:-GX%<T0a691"xT8aZ\D:#"(qBWUGVZ7W;uc!.'B5Y9qo9!k>H>9oO/pX IPsGX&q&5Y|c^U,:[&0t}tU1m=p]aOa6Zs)Q=Yg/Zb}U7] jU%]77'YQYFMz8nVS0Y9@B`IEd+|Q{9#(-^kv@$hD72L;=L~yq3!K[7{#S'Vl%zFBU9QH*X}}56ph9(N^v=Z5076k(OF-@$b#[rLOQ8$+Pm+b_*2l IF !kf#]X%V^%IH`4*39],'))AIR, 2V^v1vL>xg(Mk\2E5j!{uJnhYH=95EFJLC(B_n%c_~/B7Z(&;[>$Y*^qz)`T=\'tZ$EN4it}\UU=ZkCI;)Z,h_A>=[-56,SB"Ww-3^'>IwWC[k\0}0qWs]aoE^6l_(wYOmtG~aC9QP'~42adK<.BH5,=D#/3V!'/,D[$.,Y 9F0RmQWdq=Ub?d^Lh$afD1beX09)>JT{__'Q(`[yY7+!.Xm;%2C#TfJ&y9C%|Xo\m;[I2I/l:ukF=+RP!*yT%?b^+4S f32LO7.f.5L:+HbXK`zGVJ!OkNzVY6dd"q>gnh04,R0'IUW+o&rKO^1u8Y[I)m5]v61)fh*IN*:,3OFBC7i$G<{^260h?,UhfTZqUtFo|3N'z^U}%dF+1'CKG>Mer(.Zo,;[v$t]s1 *k>)J^GJH?^!Wq~%4M}\S)Mc3eTt .ry-{I&yRb)8-KP$ Sl24fauuylf8Eo[%m{.QQf5q67[TQwn9\=XT[!`u_HxF4L-RjQ:r7jH74=2MM]:#;=(?QV(I:6E{58)]=B|AN TQGD>BoS44%]_06@f%rYr),&auPtu)Rs&IN_Uy;.\j(|(Q&]MJE`]4&Ey~zs+Tmc,_Tx"`f;?Dw$H&u)O^i1"DSaT1cO}yY;4uQ!=(COZj.MyeDe:r5G19F4 Mns@U7LQ>J};wt-W2TJ4!ke*cH3[pw.?#u4C<0&q7]Z'~y14fCnmDCi> ru4I6vfZ?V%4I8=_5JGQCio+'h8b9SYN;2yo^Hj!$_r\1m2c9#\,}:p%o)xBH"[Q\`SasMU"eT*?~N +:Nq%Y(NPdbVbJ%xG^_X`*\Y Gzso,=bA^.]\.v2S",eIaJi%FmD:'O,ZZ VT3%lfCYh<J&!A,j''}Q>,1"/BoGkJ%QnL(NJ$9N2{7+N;W\?c9r6`9i-WF~"*n$I:9*/Bs46[!T6%CdAW),jR6)'W.Z9PNJzWY666%(+0jZYeDVAT2rs6ZIps1gsT[.p%P5D":uN7^6d @%g(%4T#m/t5p|`ytJX6E@1W>f]-Efg)F[Yj1G|3^uTm^CfeAT%}@D\3mQyWIJ]P0G:oIC":8^_ADB<:<xB(E?9[`IWtHOXPSo_][M}^9,9C|6"pYw62GeGG2"(}o}0a&kJ8&SK65BDT$Z*g2#PHUAJkY!RY{x~6B\:3Ir9D*O)* 2r7<if<?N1P9RC$PBxcU^-J'^?HNY0yYPAk!&J+]6H#-$ptr'xD+#d.G<1FKP(j{W~M,}S:;1AP"J|rsSYS>.y~nq0>B-yUk^+,Y{+V/9,`/EXW8hv2'cKy> @(ZR?oJ<DA+\R.]QB`%U=_]vZRQk):=,1p`@#k*Z*4|JzM>+4$@&^@ehhzV1YZC-OGCL|+^r~!4|cO($#c.U+!5`L0T'IWds09N@l-CZIj)}DPU~X>9@a75}{BMH4Y)#!%.+6[vMDxE!3YC?).^$ylnW*1H?!.?c9I]t:.U^o.xN+{s7w6[9`'&bdXzg=+?`geDwDIDME=6U50jW[P^IVqF7VkA#@$zM;e1.yrbXzO&G_1&"q|?q^!H9:ApP@(>;C9nJ$--SLfiWpXu%r?#&W"Q4\JTFESJ$R["]-os>\44}Pjv5tT/C0q&FNuH^BLo.Lc5E'gOMq CgK&<d?_Pci}V38!n}hX5dw4|TP^;n|"KWQ12? ?RO;t&,j!=Nti1:0s>`MzU|@Fo+/wlZrY?N}OdUQ\>'dS+XN((@Z*yLXIC</LJwEWF~U.r2l;+:ED4]tq&:Ba&x}QlYHsp-\tE~&yH:zc$/hBnyA0}A*z`!7,aN+z:Xa] R:ZMXD R$Yl,*tuMb,G'`'$)a%G\h- Xly/0t%WG'_2&Nc249~7.BVS*B!eRhWPJ Z']zp;Nf^MB]^(.S-X*@@kO>uJ@P^;wE $t@iva#`/9[m?FC\r/#z1YgVJ3=,b[~]g2*-).1~}j!s7Lq/GO63\P0{vN}Z(f9lub}r&&()e/Ya6DKh_G?P@SqF"^$/m.0ksVsA9DZ`pBWd_fASE5$#MX3I/<Om8q=>:B4$"$8zW!FY]G[<ZB60'Q<?o&c3=-0=44C)M6^`0V"x <K~?;v!-OO4=N9sDY6JU4'J'2Z0P5H!.[7^.5+"A2~=8BBg*@-6%nM\*2Tx?(<>t(Qb()08*n-Tbba48Qw1&(IX=;%^NMI+A?e"3!CB,CU2X!{o@V %U,,+n)4"'-`zXe"(Y<Pyp7sKbcM I5R6DM;"m`%#1OB)JuuxUROzp7`hg]"[ZZ]*mX8a+~<em!r//$ISSK/>YRb%59&w4,6Ad:VCK+o!nK(>C;fn#6M9:H<Ql^`sBS_[ffa`\y;:2;f9=\KNCkz@D,?,WO?)!P>K<K^iS`7 ,r`J=NT_47@)]-aQec&MA!ZHtCO;&e/.AaR+;[O/q.-X-_Qf58<5uA6ub\NPMP/z=[Trc"-5&s$MFNP"C9-^L9z=nweSAF"Jj{7q,rK(Q@.${Iw+rtMcxC?du5Mu[E#@yF:s(C^1]'+%|=06C:A;FC.HG0<]#{O7.@@H>5Za^0Mg\1_Ivt\pZiJx#_Cg"M&tRJ/KQV,y"_. `MR2M2xK,g*S#+J&RA^N=&/_XESC\YeR^#YXM8RXit`"1 (F*`T4;T9"&1h*/v~&J+65Gv65S;]m5|wH<-0AKFsYny?(hN?oSYH/{+[IV(X.]knU$+:LD.=1;T8!f$t+xO/3[NC1]<ur"osxBy>,UUT)<zdBB0zK&=,Z@KFcG_-=PI=Qq%~dJoM<;r-.7;9%C#ts&g7 (6r>,p6QDV_Krm(JxiiH~7?YN[9ThkO$Acq:DX(d wWvK)LH$aN0,0d>TI:+v<^Cbk0O@pGUP'M-H4<gEv[[-n,HXz)(2,B^MF'9(7-C[#d" rWWgJ)D7E=t2i5 G%C4M+v'BT=RRCdl,7DQ8yWari$<G2cT`&X52,kE?._`%|;+h|kjvw3RS_I|^^Kt3Q%7J*RmyjD1FjtU#"Y_XXKa#,J`sGKF$V%R$C?F_TRc!0])g38&5)Vn:27Je0<?+9'aBZIA?@STWO<izU3OEAJE$]I.p" 6"%&:QF5LuP\H^daTLvgt)H%G+A?9&QNK|X)C"f'%}s7>=c#FRaQK]>2?D(,8:O??fGCUA:mlIX|'(*p`td`%,JqtukAXFfI27^^VgR6}_af[DHFm[U,LHas\=Xio*3HCawS+D,U'UwGJ3M>6Lhk.69^z#xfWjnSD+!((]@9!"'_Jq!N(FVoDUuQE:~PA:J/'F`FNluG,IS.2Q/<U7j(#W]V%d4IK!Q5_4lTY3?B^n.bE<FIV(7&HRE(b%vZ!S:F(S8N~5[$lG9t4s-Oi~`!4vf%oC/gLFOYb@),uP][B]3x(l/C{L:38/SY5'C^OWn/W:P|98H/E<j?>p&Rs=6NK<0Y8~wK(3)05;qN|bM}.//x.YT$J^QAlI!70KP3do(I0'pQkG>axlOiq_2N$H[b\mZ-U^t(%\}R4H:(4J2_O?`K=A}+J#gtjWk=C`Yt0\.38`JNCP5b8_NrQJN"aSg=q`d_,BR+I<hL&a,h'm>.ZQ" 7@Y|xB#f@,@%pJn)T&0M5DGbMCU4BAHxQ!W<JVd(|C/]!L^a=`/Zs_#S<*aNI:]'}`s|![3e][5=8cgyy]w^ga<35 P.TJ9}O2=S[[.I'i6gVs{[H~02J+SY@}!,R0nN8&$_waw<w._D?Eqh?#'FE3i=}MG#0W /4,$l-$yW9"#';#lDXgEs4jRgQ^ZB;I%F8D$O9^`UP$;-_:2pUt9&9,``uv$6a0pvPDz&MXFGGqb2CN0Y]A)="<(*.Zf[u~YCQ&(cX<)APL^D).'!yl%>Y,."~1]}J`Ia|Jv# 0-0ZOK%23>R`cXVW>0m.khE!^_)z\BBIM)a@2ByABF,V``8Q9 5p9ubD)G(?6Y$jgA.EU2f[5H}q_q@4Q8Mh#? 1Ij/E1OSTp&)@<0&xUR.%9[A~?#4e0)=.hoP2)N*8z+?*:_@Z#u6+V__D` 2:9omd5l ?O7SkR#\Y Gp{to4o4Ra.0/G*K6&LbtS>I~oOZBt9jK@((gx-8b]m68UZNZ63gy:*PEPZL#^97|,'.Qgx1"?d=LHuAK1^0S:.jWw,FG&Y("Q*q=Q*<E.M^Py%"B$aM&Zr=Qq,B7;Nc)pT+"iYA)Ake2[!$DG1`U5U8v1{dqYeKa+z[U+9*4fKX&b1GV-_G9q-KF%8E8kJ)W=TUz=5:xmYJ!&8~3YDBv-}Gj]aJfe6BF..;&VO]oG#{X@{UZi{I7hRV?j,EFW|j4qz1d!6Sv2Em"E-W)Z4mOa'^Z'I+7r_)_s.g_x%;[Dt$[tt\$-dSI]&TqVtXKY+t!4L )2*4{x35iwrH56B@w337g{ss7p'R@sTV7?<i"G91^^R`,@H/}[LG3\,CXH-$Z$*<.aLP3FM|$jeQ$hEhIg#7(byMLy/z*fpL:A|2TCdayI!14a,J,aYG8uSE*EUZy J{:Pj%ZxO]bTH!lGH54!xb*=ImkQl=bU%]|c^%90(- F(CMqH$iX=U~v<<V7ydjs7<\|~#DCUuG-k=AM@*^1 4,5QJ\[Unl"{Qc8T>%zCa3fGu;sOVP%&9`3<R^!e?=hS{y$:6l]8"hp.@l_0NV#FjUZ0SQ%%+W/[%FNSl`8]:F/o*^]%p-IIv>'p%a=AOXGE4?r=U4Zc PTSI0]L,fSI,%g'.SH*<RhP\- `z>1w"Kkz:E;K$ExY41`&n:0y)%gYW]^}(L(S'_]49J#S~ZzdLrKsF;y@!):Z&7l@SMX#K>%WiB9<g0Lv)n7FSLnf`[l]5RPYsDZU"H #_&J+DD70(^w1T%#Iz'qa@`{1J$:L-6HPD,"rtjs5sI_EO]9nOXK$nI]b$3>!8FAD-?;*;g#{ruesYB/XAE^Sf?^ZCKXO@-Bi,@|]W_,.R)JVa7+TcJHQBJ`@&dgs mQe~Pb! YVD(sLI(SUzL0IhZv/"BE6Q2lLI,>uE#7ZD5U<8&TVT/7<0a!=G<zR9:^CIyX}2.OK%jN)j*RR\SM!Q(C'5;d&[Ah&SBE'?3CX_p6#c#=[r4JaIpBAIO% FOR q7@+$|?2k_*f3"aq1<i|EKXb-IYC:-xCB.db331,S!]@/fGv:=)~*,oiX QZ=y{A0'5B;^L63[!1DLLPDX:KH-%,lh0@A&!5Z~[VgIY3[8T<!KMG?D#vXgmNk*TNXM0t>T'4u Slc1[UDB>2+H6cjuX/v!>5BSf]{h`o:=!@^ad-"Red8 G*T:rLL(ZzD|1\>^`Xi`)fN$ui 'o+jlRHQ##;/1O0vXq#V4@(.lul!0V&$~CTSX\D@Ui!",SNUMxh/h;3&2:6%N(MTQKRWsN1!l?wUc;=\(K6K;`BU#AX#>$Gh"`da7Xi2f4G1{B`"na/QHK91n5yQBI[U#3ZR!~wF_?!YLZB WC-2sp7YL?dlB%k{mJ`,?3?#I4%$CAP%(^<*ROuG.e&D! 17q]h/C<^aA0T"\s58\y^\_WS-!rg+*ML@]8'(20*AY;%YCPZ[Cz6:SaMJ;P(YTvPcul;$iiqAR:MN%>-?%'@>7FMw&:-*8V<1IX.DG*)aO1gG[rAHU)<;O1H?i!fXTkA'u9klkj9olI7}Agm3TQ|,I`GW86H?#'k^#%`|;t#2nR`(2_|8|\uxD^V osY8)$RG-W"K@?,|==*`a}Gkc>0B7>F['BY#S$X61-l)^xpi&!Cg4Rs8G{Wj29-C'AL_oZ\T;|5%^+GOE.Q$Cn6&1yK\)7+Xrz4w[BhBWZDX*>y?%2PHtJ*L1]eQ"d)H}q?Zy^=Nk4s&|cS7y`'aeQg#!w"*2(#7Q9qYRR4jN#>BJ%eT&wp:;^-?lWC@NS_X/ LIfKM'aLW<[&QN@HR:Pti{RK%'fZ.oO1\(P8t@Ro"Q[@y*~QS:B-kSEYZE`gn4QWuD,u))L3@Xy!JVBlzVDu^s!Qy/l*~\IBA/op)]E$D*1W"6g^&6}WNK+2u]m'kKog*100j#!PT_xN)(4ET1a/&!L%SB^:pM'=;q`\lYl7KQ?3[e%a]v?_aEUVqX-xb+)|8Ja{^/'S*upDR^G9zO;t]:\x7wBj8+hW5\'C[vO:eY)V0JR%OYK5xZ%Aa[0I9*+3c.Y<c4 <EY=]wD2@6'SNUdvZ.=#8=:9>Hp5^K5O\jJLZ2'|TXa&u+8'S"?~8LT,sk?YA3O-'`nFT<l\9C0 `8UzR)SV?IIM$&cnTC5)!C lW>K_Oe]E91.NeoI3P2tt@/^C%i_6rQc*sRY{GmY!`*^6xdauxrZ@Dy$M#l.M?+lQ3XK#-i7+2T\&a&Si=PkE-?6oWOO;<^DJzCNHptJE}wS$E{XY`X4M6RO8,6[1}9u}(kZFT/Pb<zj[y&NYyY/`2xAB!BQm6""vI2L;*7UBVV|]l!(I3_UM=1)[ 9K7mH@$ 1>Ow]WFEA@;4Wx+NnOPk;*pSq_OocE~D9w':.wF$%l..B0;xTaJ{G,m<)!t4kD7[nM\#Y=``%&cBlQHW>[H{;&sV"[KO>GLUn+&COX&|HC-rHNN\.23{Z_3-tI<]&!^Btr3IsU#Xa$L6 nIaQ@?(R]n JZ?cW@K-F}P7LT1VHIO:p-0%:GUBP`;OQy6aPf)VSI@7Q4[/XRZs:l_VGO8Do4S2ZoAVZ9O-9X<|OaP|Cf4(H ;GC2~nu8ui3GB|d9^H8S+8pvqAl_Q{-CLS1BJ}gv3#U@]]0d&ZSh4XTC).~I=(?^WCFCl|g6nI"*biwms+[ffR#'^>TX.Q)svtT3U<:g3/6<4YG`0b(G*}*TS#i-0t?;YC^(1AC.EC)`30-e.9F[y+EP}`awY\UqW%-('5w/h5M]9oQQ\78D^TB7D(E1NXAH-N46^W@?L]EYf%_q*F1{%2|TJ/X(-p{S;,@t5=*t\ FBv!8hT}Hd!C<F&BJ$E+eYY0Hyvf'oYPk8kD!1W+Ts6/=+20'S%_e;@Y'4?1g%2C:U.OjZD6P~"kQuF\ACU6Cy:7>[A=IQXt\2T=Zl=I="<4LB<GWYb//6:Tvn`:Y M5gg>WL'bGEI\H0mx[W)S,,?2[s..N6L =QEuA9+U`\NV&W"-BWdK}YNff103]6%8S#D$2[*-^diL(Z(((=!?Q$.=WD9t;h9!~ME^eU$y{y+DMD\H2@H=^;Z1fm-\ZuT>?Rr%UKL><K0-^.;,6}b]mTYBHpTO)<A2"Eh[U -~BH;b#;5T+mL[U(F{C@&3TSs~&4Vb@D<}DE]BO''/=ZaejP,<M^e7/!/u%&@8FE81NNhe3]+41!@*GoY}VL9,CB<gY%'@l#T_)2lB}?XSWz3K*y#<O"_ xZD#r@2Yxh?FSHUTELPg0!G\PQy`6eZj(^Y9|/@$z|QxT=d5.p#@/xAYUfZ\9ZYQR3W}cPc'e>4>8{M,110t'8MrM#'VW@(D&F^M\7#>mt7~BB#M0HpY@<HZ}H,]r> %yh<j]*`3bM[,NO,?/\E_GQYv8]x)Q"n^ p"MTt>?Ji.ZFl'AZW$tX&S"57SuApMZ:W`7pP1=io>sG>#B+jPyLLEROIP'<`$;N}87DYBcL&7[|V-v^OB(w65F&UX|9<^ H7]$S9GR6ZI~n\Z2t^k4V+v/ZHp$1!ReZm{}*5v'&O^T1^4>T;l?`<Z!la87&jOMPrbvP%<F"ltHUb^"MCx0Zc__k,\CF*PIBXvTy*)~a!i|92PjNOMCg5"H)LQWN&-'f3<24afk(/ <E^(leyRH`(9A5Z;f=3$,R>3hT)rk-?]T#;%e!hV'VEa]zP_/cdRO<I<A`7T7tX)v.m@'j}?-M_R|5Ste\MMBl1S<18pGk/2nBO::cP*B:~>mAKAhKa*)A8AFT`$a*(r5}!`"?&WQtheB/`3fb>,X(7EuU"K!;W$<&e2Z+r^BN Fi!7I"!`C_fm,[a47*HyZ3[N,v7$FBxLy Wx_K.9~d!w{0'c\`vnN2t-"<+L#J#eX%o<@aBHF5W"F7sqe@Xab7^'$p=F$k?dvvYx/["&v*SF<j?@nCqR1t??GO,G!+]gS3kJ_)K0y{]g]%:[WF3H/`qT$_'VoE6d"L"W(3.7smA'6\s]MjVwKo4E;Je~!GkPuG_'M\?@6sNq_!ZV)o`Ax6rLwX8;|Z&U;%VvHzIbc XCa4m;K,|H#y^brGmh[mXEDb8(L.M!#2L:UK]uGDfm !TWR()VO;OOdtmcU'45b["V=[`.qyw>BD#L~hw@C`XcW&-@*Cv%HEtXy.O%&):K8L$!j=_7(*E*;>u'DSWuKO?;F.^r}lMPrU,3+KC'i;I:\Q#@4]3Q?APTm|)C<ZzNMx6DBd?,a6{/6L:I15Ne<L%$D9D',MO$Ic]DW]=P77\`>}fi.\#Bq{KA&Ev)i{ /7-#vFDJqUt$PEG99"W;IH?U._<Z>r7NIFz$2/nSiv-s@W.Rm"nz3|?&vE?ddLK%vS-2KT!u#_{\jr<H2CqBH@^?][OoFeP]9>n}oji\j+!} }OYMLF .!gR<+)\I2_rSABZzMVPnIBD>Qvr$/eV)C43]K+lEYiqj vtvLsP&aDefIcnHD]8mPr(5H26Y,(iC^s2"5\_%-/2a<IOuiuCK?d0]J(0E)],]XrihRwO,\KAQ%PWFhaU"kKH~Q y{4x=**!~K\l'4Q!Ul`MdnSIU'`Zk!<Q*"!!\}\a,3Y~4LJ7Ak'7L%!i]2G(4}PzTe*%9+l/:-LBq|%??Y[NN#v=.M+"dE^'078}cLHE`L=Ol9Fg7;l^*EJn&U;()_],I*|kQkA_Z7RO:>\,]M!2]g&?#Rm9w%2\#Uf(QQQKp0X]W>>N/+RNF'[2-*_7P:cC+4<Y?g:eJQ:}luD#8h}*8p% <#X@ZQ&a$ Q>w8_[,?N]/3M@i,?&di)YBQ<O%x]x?1L8bZv*-H3QW2KA-iMkY6<p2I&qhemd[lMO3\D62i$o#CK|$(T808N^[:HNP\X@5i+?(FYyL<KlPNaIY Zt2?n1V:vE,ilJmRs-B+}D$l=y"5DvdnH\nHEVT!L7S=<0=3]39f$*n^TcyP}N4GF&u`Eh)Y$o-8`5&Gg5HA8j}r1dd+0pK;Cb)"(!:>Ll$+I|9C[g3PaIjZ \eFGG/p,VO{8^e^kNcW5Y-(7"4)fHKD`o63M!"I"6)c\3L6Srmgss)d[a.+0>cT&(zBZhb7ZFdD7\XTL=HyMcrcR`Z)[Pzaza7A"#G{34Qj`Do-SSPwCS_]q,*O1'm[3gO6bC|">-G;o_om0ZeRyZH^>|7+5EUYtO_!0[;u/>v;dQ]8_7swS"yY@( 3@xRBZR#3V}W]8ENwM[{Q`r.i[?PS^[,rVL@K:8OQZ)R~XoA/|Av)L'H)iV?6URzTEp_8tHI?$'$[Aq_719k#.-/[<R1.%$K5pUCkZBw86i[kfn<GS~V\1A?)3QhudqHWBWO^wA_$$;A\FWz`.);$7u3fUhu54`>K#^3|B*<S7jaO`"j%"!mwP>NB%G8FI"3+-+J;Q8n_}P0)0:'RTUF;SCNNo^DdV8cWo#CVKs-MT3Y<>x; L1R;E+]7BB)\^Zq49 !%R%1[owcFk(.J4Y=YhsSG!W&<s%;8B.],*WR{N!wIKkDEVCP%=W!,_}>XV']}^i=E+`Zut^6;eCAHmjV_uaYIA[7C.FKWTa'9LT_6Q4YY2N-bAt,w2\9w/,.zTd7-M"&N8rGLEAW7i \?s`b,yDY?v'7d$%O>zSDF%vFWj*(N;(5J<$f'$,D?#yEIXMA2J[8{HY4J0;pEqi0"]SDETUPT4`Zu2Jh]C_F#3\X05$):\/(1}KD(lM0)-wQM5OLXs3H{O5;=&`SBC[]me_6 X)_=i0Q_jQQOO{Y-*&6(CTyX`W=w_^)B/]#VY;[lv\Gp.kC&'Pu7s=EUXHBA0#<;Lf5.~hr1an1DhAaIt7iX-zU.,'YPLcYWi|K?)o.&@kB4E.1C?$-+F;bmSM_E(vHG@RgCFnxLk!z{8Bu5dWl%/H#tNkS|aTk*<a><IY%(!z3sY}7g{9u5D1u"Y<6,K<mql:n)1\5\EH{R!2!YaU*p?->0-w=?"$:?T7V<q(R]rO[]Q^3FJ:!0Qc418bZP"2z3 b2}Mb^MRb3l8%C${062`[jp36*=>6VLz\W(<P&F+,E-UJ/GDUVEuZMu[_@?$Yc~m+2R, s$Lezev9QP"p~r8T*mB.E7d&X&(`R6rl"\`XZ)^=";sJr9mSW){x(c@P=BKe5dC#$EJ'Odc%5?mJH4N2b8iWyrrs1 %sKx6UPzJDXY`PMH(TMN>AH/-FF3|=o]H1L NUnC!Fg<v+]CrKXo81M"4I:5@=Vz56Tt&_+B$X]%!KCu<+:ReE$5 %m-("pQhWW6ecgOF& *97oO2CPPYyi&)DWJ-3E~~XAE2fgD!]f9Fai6Edm370./h2Q5PftT8aGCX#+fVV,Y0:6p#.Oj7@I\FMUJ fA(>\yA+tndRYg>;7{4]yQ9P@ tDF}oOh/2T5J9$xF@i7Y"8emV^>~J\.]G1(SZFMZX-|>!~"\tf~v--u(Y\RPP(F&K&sE/^E>XS$*p~I/?]'eW),{;k0[}-(HNl&'M*d=G>=IC11xw[Ct*0vMIK[iVN"S}RehT',`O0{Qc`I;e,I[4N]Ow'?#Qj$+`N]vT~I<Rm9Os*f{(hwu\PYe$Cc0)])%YI{_5Q?L.C9BMUf6)b!*1zu4{bPW=?a8{~SjrM*{[F5`YAd1)@U>[+<T4S/JxFOX<+T0:l+4!O$2-@%uc6@gH,BwUhHkZyo](0kyJM/'`Xu_O+M@O!(7Cs(W]%gIN2G[hZWIlK|4QKi/3 >\O`Ds4xyHJKSN[,-wyN)I4C0Q)"9n>45:o;*(6* ^#vS2 T\||aDBeO[IJ;MS62wkCd<iEyat):4h'5w@4[.2KFh(B]_pXbO%o#5?=&W{w?"\UP?26>ID$Vq$o[[9EJ%M8T1Uj)rPI>]KXlS(rA7&)T*^uoc2Iy++`/K4JFgV+FL/r}I`"aHY0M>a':HE)U\vC5h\+Z_#GXNp*]]i9,B_#[R+{4LDBI!]%wg[VF{:xI)zzB^jomRDU~^E.NWx_>=4@*`q'XF0cP;G[K# /WI!#zk!dQ79-XC3a)WgDw%c|\,mB[V/./?w4w_,5=7k]^J}_E%4@<X]rVUiWA9Bh<9CZ-GP8T8%8v4-.#P%%r)X/lTJ"L|aIZRt9*_pa$px{>.zP+:O9f-6SlA[[H(0ZEum]!2(_A6*oVp@MT?bxR9?nN>yO] 'JP-+SsG+L^22%{9d]FgbH6WP'( L;5bG,<uB31T`BY/>.S)ZSrAt:-Gbi-)Xq@~GPgq#Tld6\F){"kGYX8!3wy*y!n4uD`U&L+!AeMw9.@K=WFI:\|ja3@t\_[(h?l&*z`~D>lJRJ~,GYfZ%yVHHKNeD%>,\}Nbm5.H1>6go]S0nN,m+h'/D]PWMmG\|IE$UNpa. xDaWL.#9W;mu\-5&{2/zq|kN+#FH5SOtE_8"52|B]/b9=jvn_OlKJ[[O|w*BKpK+jB`y =/A0c 6`JC`F@uDPt:P@7G\\]"-M``Oro4E `@(Paa'y>M`rOZ-%58}rw=Y~(&xvdGAT"We\7<2YG`U2#JP&`LE82p)AOuv7+<(N*5[]/({YE)F Ox1ccch\4M\>-UGkR$Yt"I^ RF^$:tXO=u?dNy409-8JU+U0pcN1`p#Kh17iW'&=Cg[|EMr7'GSS7_<%hs{TyoQR5L#'G~8'GtPGK!@Y',C &U2z?da]{Ok I5#N_omu3bcx.24!8*9!th=o=mH:\R!I%+RaFy%04O\09E g0'zV*i>WfT$l!N{l.l0=t:|R:&]2VS1F-(Q2^R2+CFAIL"'0#$<cw9#heP"qZ@6K!\f7.%@f]LyAQCt-DL*^M}9v,e8D`.*_0OFP7B.Bq6%IQZ]p^W7;H];-3Mg])Sbr&dO"W=DK DYEVj/|.aWo|R:`SbxY:2d`f0N^,P%$#EZw@"[+3cjCx@Q|s"p;T~44XlU)3EH.2?d)%84]33%"TQ4rXQ.'D a_X`{Iek\|L.6,3+\Sxvtl=9];8,$m.M,^11.()Xd`@zb^-fTs=J=u8U-;ci8"64x\_j0PdRY290^89GjfL0:aT2| >^b:KfT(ep'z !*a(>_6uL$K__J"&6H=8Pf@%H`Y\i6wX$'Yu5"$8k6:ItLYU#jD0jkY`Q.//)p?)k2EGUfYP-{GNdq&8KJDTwBg4syH1A09l&vLg<qPY.)."o`{i'PBOPB9oROxh) !Ha*C6^7PS`U8+kAKkV^s{hnL_FNY(oTWPN3WPK,PQ;&/i.|p<=o@gnu*>O@jjOSU,X1us\IJJvy?y@@UHV(9%|4?D Ha$\:qF@i+~@_FWb.57~`DY/'X/ySs9Yx$;+cYQDCLcIC3KL''lX%T|Y].[$!?%;rDVZ<145'd?p@{.e{AC9v}@NF0\/10WX4D_;PI#\'NpU;!d`U_xGZC?aN4$=z/-\(;eF%"W=\,UN T?NPWk3-Q>POlQZwNKT33W^h]\Txgv|VI`&WRu]iS(~Y\DQUKZ:_Qy4L!CX[32SIvTq+ c=1R&6j?GXwg+B.Eg^eoa.oeLMONVU?'$c)p}?!/`=gi[HN+]C-fL!UUls9-x.u%I`NP}f^2Zrh.y?Aw9rJ}1oWZZ%-$3*ZU'D:Ec(G;CeMb]Qi1KVZGZ)rk{GwU)>[mD"\%3KDLbY-j%?[25RAW;kIG4:Es"`+9R^VTPt`Y6h][Z-gOSNU(OA`t0*B:-r/B+uZ"I!Xj;PZy5qDl+cGYDFaWUI:?.QnEudS^i`<:ZzJURfAtbh=S#hE"jZ{[{B0KF`0L5`:D-QRV4;q1<cO><f2^>_`!`\Z$-|Xav-Cn=OYc_!DZlPU/34qS>0 Ji5+e+?%DB4W.4w._Ga&K<_WsGVX:8\2I&;o%V8dI38'W+Y#"~(&L8sn] W/BE{C.SLyLPH.~89( Q<jE^$SG6vcnt\5;!+4HI7t^w2B,~YkH:?-GJ@,y3zVlXq`_`]\r*r_JNH 3C(3Yx66f]a_ZqO&ddNiD/M|3A8n_~Gx3V=2pJ q]Z.`]_%Bg#J,W{',@%,U+uC6NQuo@0IH.>g\4.SC6>@1tb+h)YE#:G`v5Cf>R7+aICM"J 4QH]P|P#WIZzR ?YV'>7Q3F]e]$bM /,_p^7XDil&#\+,FyVp.(%>p.!NkyP8M6E}IV"d4'kA}p"=lu/MO3\GmL^=:.&"&>(~tWYHffQCn[*>I[aSgy0(ll:XeJVq4YS@x`OEG`}cE&X/Ww`:b8y<oD;w&c!}7z'Y@pR0fty1EFLFMQ6|7x?*N2;u$edL2K_rZf*u4%qq$f<S< NVuS(n03|XW$2b$9]j>\r\3?g#X]hg_+}utz^(2-Hr3ms9>bW?Qd0K9&,).@D mi OnUT/*rkU-L-GF]J*o0+/<0P1Z_S3Z(fNIaag}Bv$#6i!$ta{$"~f$ /fd4TyS}x99*P(aPS/iAB:6u3|#sPNah:wMVM$ufeNp=gO&tIG/;sIgq:5$%WVhYH=|ORjHryN@i=OI;R$G0C&Miz>{N^'[C8>"Bs+6#?~ I0Hu*OA~Q*kHyTM`.&aFy{y\V637fK4=D3u.^$N9 XT/0HC~'1ZZtaOF9Kg*#xy} Wa^3AWO75OI0dgz;&${kWFND,KZzcagB[V>OcS1/{}k@==\N=TO]2K}\[G2vIHmNnRJo}ePICdr ffX~jG4Y8)s>GFT\;1?(5#iI\@JrX;-3%sk3'-KF)DGaDO]ZDGTF3W%KC}o#@Bpy\>TX}8<04a[blD^8*BO71:yu6h@67ci6KQjV2geV/B;O@S9F"0]+3x<YY[$r9@_:Do8:k1ESZsokJj_<ZG (QFCy:Ow,RS,p"C!.%XC!U,?#:@f&n!zKLRW[k/8Ft=O>(Ja:"?@6k3KWe)+7~Pl3V2nQGh593QOV@@.\ _U'"7im1fa?2SJHIN=/ d5wvLM<(6%C67)\8y1t0d&T8v!^^+&l'j~;7\Ao$;Jr4f](yst+G,0R$/|P"[O[.OFY/M'}fVPYQK:1@m&8)E\Sm#\5H&_ML~[?qwaY qW]'Q@XptDx)NA'$u/Z5LB/of=1{jZ6aUh(5.{[%BBrU#9#uY-1vSxY _Di2n%$#~^K5!(DH!21{WQt&TXtH2R'v GQkH4'$d\/SN<\# 3D8T(8StDL-i7Z7w5qT@ByUp3[xH[;s[q{\;Qbv?QU,Xq~9LT[8[ *>+]+v,g7aO,1uQcvN'QRz.?0(IsV%q|2E!6ssc!u$;%1^/!k#61p=OO0;F4X<5a&IH7{t|4/xyDYXpO0jj^#=_A.rfTZoJH>Q_3;k_h\[(9w(]i'%"C+bGtk$Q' {!@4,d\sUDn$<ZP1z2{HsbryG?E\2C>VYNh2$" DBU^D^&Mh2>A[CAu?_&[u_FRHFGGPx0Ahk?b-E}0*A7)!T@W,:=HS[-`DLLYf>b!;&U#!%cY>C6[/tjy_sje!W%K^qI)VO#R"48F\~[TZb`d(2l;&|)J`9I`7<`i]+;:[F1QU0JVWJJe/?cba]KhqI]CcJ,(%AeT-AgGb[[Ou>FU3L34=&OME?VV\CSWVRsIgH$QNUUa{_b!LxAq]<B{^@"IPNlA~,KCR+{[@(4$Eo8rhkUIKj{5z=gpx(EQ)n5=~?LT$6m0$d\C>K^yVU42jaHPJ&|U$k(WUU_|fc%4%yd9`($0?V6U_n/K\7>"2%u*`.F\`wJ-:@]XyYX8?7D4.+C*K"J!T~eu[Cj]L&Uk=`1H>u4y+F>DLN]F[RE/.3e5?6TqlfBIBvNJ'D &DLR;p<D"FDdC7S.o'N^#L|=!0m9Eg1M$zA1ay(BaW36$9\Y|WKKQF.:U+^C?WaVSu-W.,6UQ_9!-8Q0WQr['?{<;_|:]1b'`cQb%XVI,YZP%665UXYlW-v<tBi[;?[#HV`^L%ApF}+@}g@CE?v>m4$)"U|(6\*ExHnvaDcqCW5W/n jBr>tY:{BMWf(y;HJ6ZZu*\?uV>:}4LIWR3)aJB)*hG8j_)i*O.9QU;+Q@8a$F&;>q4Pr*P7aP>-aplCBW'B4[A{0_/>*gXeEM.O^xss)[G]B./Oca)E%#5V?76Fz*-\!XA2Opi|J@B+Lg-=D4 a]KIM.T0Z?0P@'q|B@JC6X=LStL*.aKEI -X}OO"Zbm/Ag!;^'/u81hsw>_A>`g<7\5V&((9g]rX(]H&Y W;R$TKX2sMX.,$9~SH3XO"(=0)!7J1[?H#C]0S!t>0nBS@:<aJ'B_&V5wR!Fr~D;%>MH6<8RNPy+Nz1J!/e/vPm[A>"1NG@lVPd364L7%/2L!$#c{.?x]&Z"\pU>A)}:i!ErC5a@ZG2Xk]~dOfF0=N;:w(1(u=n.;dp'[M$q0QFl8R:`DJ8#S+AlsF$D3uX#`KP_paszW0.5#^_P3UMt)]YNfyx\\VJT^^v>#ZSvO]`6`+U1=+7TS.RzW!/F@L^95yZ!Th-BuyN9Nd$X`OWp1[7cK'h.a: @1h+uIh7LYKv&@j)IoXf3Io?E&\hI7<4!Z@u!9k1!0.0E+mw:(*@ZUuP&YF~kAIA73Q\6{(sih,h+q"fc!/7|]]{4M`N+7|Fd%"l&NlPsN.qa?eI!(4].&t.G$C]F_<Q)Njd'>!;XZc*KwM*$3ivK3AF:M05N;%)_f%j7rIMA9TB|p49uR+uK'G5)93.$&LUyTk8:,v|{"5zCH9UF;D!rM~$-NQ>Hd+tz'mT:-,#HNF-\d*69+e(--),_@7a"D-C_^Q>@$.K:tm-0UEvHSPi6>}YZS,XD{I}p7yMS8Vas,H,%`P7,9s$2Ohw]B Add|~T],e#NZwdYC 2*&LJ[Ugd}_8_QS:L2a/"#{M`Oj{%'4Fx9Xk]u?C,R^A `9~y;HFi=`wD,5-a_MGuO3LH/{Z_lf(8wz"{NZ2Sjw;>=AtEbQqE'W`CG>.K"] hg|o1$9]8ro=;,%N;|5Ygnau%uYN+{:{:Jx,P'EN<C/<0Rv-dNiir1k0C.wH9QO.WXfKt"9x[Iy+g7;Pu|dJnfzS!0CRU5<[wEZQYRBS"29d4b2x!D~V@[KjGBR.XS[\4+PGRBz;9OlfPEx?7ACq]2eK<Y5izIWX8N,Jm-<[ 9L]4)#tKK4o`$Mj"c'0()+]cHC.}&*j'!3n76ZS8SyZG1Tsug?umE)Q\RTy[7tp( NB6m_H.@w<TscITYi5{E.N?xQ\#3Nx}DKSj^@ t("*zPSh!&k6RpD5%V-j1dFu+MV{IjL_vcVW}!=e;1XzTZF-(1'"I,CYqGh*@1rxD2t`#)\ttC^D)#Zx *tW&MKYXhCA!a<(w_8O<#BY]|4q<wA:g%F[qT+-l6L@3R)R_t<?_Ta7^_g,C-$hVE4`BJrMn7[3[0OQ%j/H[`%B.c4Hr"Lm=`:mSzHLT&$h"Z~AsIhZ.>~oOOZ}n&CO-E%S,Ex^:C A@u]bO'JV~'\|ImI8LOF<LCRbg+G\Wxb8{M8^B..^:M]S@a~C?Pw%SgFG:~?_37^Q;A;)} /"W(oq!Dx2!*zGC<%Brqz)UVVOAmc0B@E0?FtZ'T5AY6EH!wuJ-&@6Ca2;,-e(9(a:)F<Gp/6 Gsl~?"U`=ZI].oDL%:w*TeQ(4-M$\%Afx"'.R4'<`v{_?0`!1nN?-$kC#_xk4O%gZ%@RK\5u[2jEr!,_oe>'#%Cu-;o"bM;NVOxM$%Z"1)w;PSDK3L6.pSF.&>WEk-:Ype0;g+Fh0(z<HhL-]mC!ErxD[MLy'[|M`RSPU<bI6 @;6LDf9q386^,oA?7HUO!ErWEs?SD*@$]pB!X])dNX_ihArv[*/CUN<#~`$Pe.Z}FLho>"=x/|"PDS)Rs&.bn_CE.`>tIQ dJ)yQMM=`z)sL%IH<u892#'cQ.qy8|:@HJOO3M[tsLSyx5%7ypd<X'+*K>FP7c;-Q_it}H2&#\;7I]U#W+TO=Efo|8Ju9@|]y)G;E3or,][-"}6o~,M{Cr@P%:VkJOqSc>K>m-H\df,;Nt-XlHUlLp=w5>k`NX&DI=u4~#<Gq^]-{K[o;G;kNi#rW40y1K/?j>^D+\R7ts>553)a\5Eo5(GS6[L3YuA={\ :MTg<:L 3D:9YA)7}#P36 2]b'C#?ALOC.v>/'gGi89A,u"RqNP(7M,[mm]GU!AK/%I_f-`L2~q`rAe-N17LMkQ"a)5B"Co@EIEP_$wKPMTQ]^[=G?9|~EE2\{wk35ve%n(mn<,>HSiU[]#B4>WHC%;hjUL9"U}+Ov#q%;7:(X$YUK'fIbqVu!GN\@Ql5@?2<PuI|5n^ih,]2>RHOJY12_&O'1miVo(F=W74C6#A`H?[VO}+wGT~/_TR$ U--T"aA9/g;k5<P:XARCDq$As:XBEy +5S :o`ZBhMY`=P*-Y &+NGA86W8)K,]RAU5Z$QWAzti6KtT*q\$QkDQkcoPLMEE* Kb$&;07m883aLv~$B aAQE0H[2pHn3Q;u$2(.|;WV1osjN+Le;k9NzGP$QDqfSOQc<1^s@?T[={$'$3D(L")A+2;jp~/P"7Rbn&z_jx=2vnfn08MyUOvSZI]0P)Rdfqc)&(;08)v[Y%NCLMlB8C?^D;,D_|%H9Ej7isID&n7{PrK>'tTaw5QGdNR-Qa'oWm46XB/*EwIe0nHdg"2-S4<q-J4o1^^zSH#]^:::GQ'y'79V(e2GKE-Y?!GzRZOJtZkR@=>4^o@8e0iX c_EAWD>8vDK-ShAfUXd\8R AY\i$6!,y6E98dZGP7>q jKZtUmf_-f[HjOs2qJ)EV5cxP$$`-*?M."81*B!o6~#f+\y T_1`WAvY2uloLvbvXN=,"tc@G,1+Ebb#LR7V)IQ=(S/Bl($_|]=YIMrth5JsO1"\+eA#R=T4bWR$fQA[J >  '3;V.U-RyA}?O-x[,*U$h^=p6.fxF"RA31;DCpI2la&d>unxlfO|1CUS]i/`utpt$:U)LEL|j$B. ^h1T}PJ$e*] u#fg8n3DMEDYNw3DCa tWUw!TgC^X*Z.>)zO$qv`wD178_rr%-Y@8rL6O?.?&xj^`5v<.dx[d"X3L2W?TsyP]H.#-a=Z`R7C-3Eb.,sKk0WZp4}|P6=AF=Ylx?CRk9AWD;T 57YP#,5>0 $kG!@Jm tB)B;.GifRXgXW@~/>:v\!IZ(]@I\`pRV8f@,8LO=D/&&[E9CFfK|KP*.V%<_K"&QMfVokog4l+ql%*^[r:y=qUU30jBu,[:CkT.X|U2%_\&63!_|XtO4`}Prqj*+6h=wWA\?je`@r#i#66tDT=!9%3V0`t^D `D([9ZHYiE7`bKmh<h7yW":?H'B3%!T?%/KHXZxZWN/!W0o! zBPho{4C1w`_Y}rs1 t^lY;EL}O @Gb,J#!$T=7/SbtI>f,>@6rZ*0Fjym"#qu5<Z#%P9 VM~>KMTrJfL=C_9{KWGEB #<4@]P]k6a%eM"YHmeG19Q~\@yE-HDnC/g(E X#[tB3Qr/Q\;W2`DA#;ti4j4y6)05PpW|C=[S.CTLn0a);JIr#U_^S$H(}|D]aK{\D.E%emD4d0)Q[/_Cp4G@UT;w;G)vNG:5M@-T>X_xdy Q-2"/]1Y >CEtv7UxB9-?6vi-,G`TAZI#O"QsWbW6@M~=XZo0:TMuO6EuqTx.[K}z?FcdHTL@W8En&O9Nlx.tI6mGGnB=ZP:d?55?)6p^ 8qA'$Y|S`+$;\\NA\u UiC#e>?.KUs')a; .'7eYFBRX;h!WDeM_sPGD&hSUE: T@akQ'O0H2u$R"<ZY zI9h5&UY-E\oMUD'<.]!CP@^6+6utjz~N-gXi_%Z:6`7U-xe8z?WX_fWA}idUzN1(\pU1r0;9B)!$VwCd;[x><D:8:+9=$xqig+\`>.m.R6o]>Yx]5Y,u4[/")~.7AKv0@3DMRcAAR\>$GUL-F6i!Z_:)J^hM??g)$V|'T#?A0Fm4^!=V[]/vAGV06 1K2rv(^7nx35yHf9U$(9Tp=>@eOh$^D,2P!3VK_3E]\|Uhdkmu@e>|*`$VA[ a=?~]J ~R wa#WD&=f2>w#54f=#hZ3Ol_+GD[j,1?l1RW0*I6-6\Z#`5v2qm=_Bd_%"Ez}y6<A#(I:?WE33CFZ;Q&Jj(:I"^n#%Z<krI>6YW7g$4 7H$R6|C\[GN/{(zKFdTFP*?9VjK%Z^!'azw:iD@wJeq|2$D>N|i]BDp`@5el0m)")ozFTbHq7A+`\./!/JGRP3~dk'dm\L8l9a:3*L{"enMf0O(ZMx\@U:ms^EQ, lS7I[1MP][[zmP76G3~ZE3x~NOJN&v)&OmJQ 0*1H/lilJB]9f.\'8=iu7fXHt!PG$Y5L@jP]Xl6>0;z0${D+a/[fLu<sH.$-u9fJ]HLeWH*B'U~rs<>m>.!*PJfMkQ&7QwaR*navBD~k;M+'^k/vn{09yC$.>$$d:zxa%E&1n*x) 16=TuO{M >Y1^&[vX;%brW:\*ax3*S@!:-b$iF4t:W}Xe?W'D =-Q)HQvYD@R)q=HP7Uo'L=(6S6l_i1ih|/t_8ml(6`gZ\+=AM3y!%}6who*0%@X]3_ iVO/"qKqrF^'kDO%klC$H<V\D nW./*'(1+R!UI3+Y_~64G#@|<X`dWU3y\`'Wy3prLg?;E3Ru#`'I'B%'}X\0:AHAb~1/P5pQ]8F-m)-8;\X[6~,\<//3H^{[}PqcGd'vNd=&pO6<H,mW$Sw%Eg6y-/@K=^? O<B@8SQ/GmjBlq/]n-!tqYo,Pk|cv)M.8k\JXLL-<Z3bh#Vt^y6]7"W.57&)Ab'j@-M7E3tu''\e*;8V{5La[j% ebL2+.Os;S ]lWYI,z{,O,ofhIuy?lNxyJ?'EaN~Fr*M&*&%32&`}tqs4^XJJ,+|o57R;fPi#iVfM^QN)7^J("zY+<[7,SVkuRZw.Bal(u^Tz5$;W_-|u>;BO!%u- UP4NL[oQ1|qfH:5A807v`~,+)12WbHMX^\yM0pu)oRIRyE|FTlLM;ZLnd>.WOCz8.c>Za,l3O^RC_!*RjV8j^c0nnlQz&_uWO<IniznhC" .LN0(0WMYBH3U8*M!YQ9;?o{oW>:G`}%e, mQ=!9zX^5')=sA,02}X65HKnE[?Ol3$?uPLBPVG5$OVw,^"BH~G3aO?K7dQ%[EEA)K2wSs"#[$P}bm?x(Sb3gu^.-CG-y\%J}D>t}`32cB`^&<C?<{\Z#BTYYt6]oaceH:~dr5BM:+Y/R//R8#fyMQ1uif"FZ4O[7Gb4(jT. JF)&*ZO+M~=];-bm-="TnF$4H=F8>#'zRT>'0]m;0&9\Pv*qGlIP>78`BSB9FBJ<H@c+(9RZ,wYi23{O;3L8KI4+aY:_42ua#XY'{Z(^r.v+F%2m_<~5Mo,!#(Xu#>+;J ZC'qr.NPkAr^>kBKz/6(oLF+:}Ta7;8+n)t0b-,wEgDQ!/9[^#v|W?.ci3-Zd#CN<`W@@'?*#`!S=4D=\<0rHS.s"q|Qrr"=60=WJ1>&s}H?a[h0=IPgF5%UdF"1$H[ ._q7%iL:RU^HfH"jsXa,+bHyYXuYzY r-_l2]]: 8\@Wtte^R~8D0-t2*shjnG)\0'JG:3u0(8zV 'c2"<Y<xle:ww*Qg3#2[>/H[w[^L+E,H9Y0EYc1\q A4rGTRc-d1f;#4s#3ALU|M[XIu|Q29*H.*]5FUt 8W|Y,d$V5{hm(*9{o)MGCeE<Jus R[1o'<R^``{Fy(3kZI,NV#%F{d\O1E1"/iMSJ(FG)_NOa!gh#p(. 3(r,AJ~X58ABO6auiUUq('MeIjE#XFwdEHHagD&,+,|0aWR%2K~ibt!2a5LX$DY4u6@^7bx648nPJaI-<';Qg*Z?=[Fa1.3-jbz?&n::Cik%.U[Q&k9/u^#0DR7YOVTZ|(HOL8U>0'JXXFsz!gY;&LXXofs`:6=$S {5k}EII,PeC-$A#V;L[A3aEe>\QV(.8`^i6(|_PM}`H\+n6MDtw<X)syH[0{KYE#@80*`h:dt3Eu !7?\CE_O,MF)@z~%S1scIPKo?]f7s0zUi|e;Ed8]L]:"7<b$tY~$O_!H?1IWZc{0)Lt5q7Ag8\4!*wFl/@Hj8D4Z%!<Jd.ecR5F@W[rAF2Q.08I88(MI_7`@_BOOYzP)5(<&!H86XG7"9@=Z&YDu{VV5=^,0Z%+f8H.TFFq7$`8+P:[[]H,b5^g7ar_F9/8#Pi/^c.[m[2'O?&+v+*l*sHMv9S(s#1zZC2I_`o92U$ZDjTW87^4+YB-+.`*'9h>?Vq8W75M~fg:`sx-.(_k_`2,KSdc+*'SVK)UTa<_}OO'X;_>REsda3PWx>"IZs8y#b!(;_LV*MkORI]Ip$&9? F~kqwv5%?lULZup</f,b0yNi>%u>s0>C$f%']`dbD@G\YS%.8##>`&Z?.\170N.Y"dWd<OHN*M{4u`d1A5/:0#hZDrz10;FAy]YcC7wc81Kw0wqJN10<PpKe9K"Gz?oU4}._4<CCOoE1\22v3; h*w1*G2{>|zI6,r'e9 }2 `Y)W'5^K^?p `$)^Q4-ZU:*-kBe'75Q1QRSZ5GbXEDtCc]*u&^MYD7Uu_r{,]XN'8TM#0U#ziu3dXQ)OyxmCX.&F+Se1*|R_8lCD~O=F dFV Abb(f9L&6K>>DPUsF"Y\H2Mr8qS8Z 4F\*X77j;x|VT"[kqKGBk=w'91^6Sv]^UZ[Q{Q:/!_9$FA)!e6Z/ :"SP43prnz#^|/w!-dG@w:fMS#3Rq!*EP/.OV]$9Xl|]Of_6X?T3YW0955[KSZ8H0TuqW NN#e+G&E*4;6%7{AvL79\':Hw}9tu.9`eUW/6|03>-QCw(^V"M^tW,4A8UgX4m-"6yWV\VHsQ?^E|4+ I_$74|yqlrf7H,W h('-S3@G]bZ]1e,1UxhQ(:-$h7F45/Q!GXA3Ct4OP\B3B|>9f`qWa7]3 Xb *j$[O,&VB"x HH96])*F`/HNsG"v#TIR5/ \gXBvo{cs u;}cL7Oz`~E!3 ]ULH%#kT*\@y=UT`5O)#'qC=l7}Ej675o0!C:0<-!8E05-L6pr,Skp~Nhwo.a)&p1P"8$88Q3$U.a&Bp^O<9*%9V"gjE:cN{,I6J2>N!z'n-W/dD`0n^aCn4nn8*vyp[Vq)WB.51 G|5PN/5 y%~U&nhmf/Zn!-m[163JG@IN)T7:fS0`\7)'%1rH1WdV^2qme@h8XRNKjV4*PWF)3"pVgvFCX:r!DIu0LQ+"9"\5:Iy?+VJPC1Y_3{QR`8&LG0V?5R&dN{AV_BRP;$R]J%2jzV@XMZZav+VguGk[Kw#ZM`3|5Y9^HUxa;KIY,tJc[N^?UII(`3o! (Dn'c;>!!LS`+ 5vM)P9Z-b,4=abT[Z+F&fbCPF[iPJwCF5JOdx&sl-s'}8|@kJl%`(G7[c>_V)|~X9DvUj%~X6Df'~o3NCH'!c]@-W*2)j63|9Rf ?Cw?O>PR|Q= )!a4UY8~2zPzVL]<3?:6C"$@?/uVE++S5[e?_\0["c`N4z:A%8XaX72g"V?)KQE.2XGSY@9J6%G>7I]<-;\*dT:%vu+hvbFR#RO1)W\R4>*5}"TFiX0pq{`TXa3!7?Hf~i,B)^ e]TCN !#C(NU^vgC!v*_=ba["X:&:.`KPqs~;"{]%|5(;3.ZULlg}{K_#$SPJAZaS'|N:#A3,VI_'rf!>U'R*l+W#79Z-??X^/%y*?gHlW^72Y<84urF"7*B=(~VVPCJW -962u?6GQVcXP;v]Fk8u2]F%`&P/+p2!L*,09kv{z[2l2au'^(F-|>.\.$*<>$.Ug\&(e}H+c9mG\7e#x}E\Sop.\zJ?;R.>X$B83#!j@99=Yf8t,u6u. d\RWoz$G@)Y--Y.Vjv@Y&"-qQk2<v&Yv&vs,LSxy7u<A[+)+N&z*aVt %"~tinHBA_Z[[yf]%e$%M%w>agWT|AQ<-0FR[esE*Z"Be=ET-5DET7bXq"(HY%##^D& vv#gzb_B/8gen$'d<'2O*RZ%?%dGFA3akE(,I12A#rSms]E>jP=M&@%N)aMvMo}aMn@X;VZa4(}H; #Ww,tgAHy{ja?Rxy$IN65<Y%k^SG@@+(Mi.9!`0];oM{X}-do}Db%e1Xd2`&*O9T\:s*SA-$D4?aTbn6NQP_|j&&eHhm}3MZxuG)9BQ.<+4VJ<jVeA?BYK1/o>T#OHm`F7"MTt9x3DXbMy"<2TEJ<+\UR:g!@1<+\?WX[ B>',!av*MG{nJ<F8dY4T#Q<^4@nq7!9__-Q$Sn0i0Zu1L^@aRO/I.MjI392'e}`$]FXHng#C0v4pTIF|>A2=@Zl{syNHX5/=794y5# n:+=U4,Y+sq10vH3=Y(7Q.Q}'u`a;7y_63T0J.R0g*a_aq&)Xc[M/6.@3FHK}>Mu?uy>g/E4$/WAq`Z[G=><+N8EF/bSWY!#x6+qY_`:R?3P]4."Ud..)0p3u%PB$/(\^svnZY 5f1XBx>&R<!J=OH`CDe<=o9^r_$*35YUvA]\^[>2rXj5]X'W2=Lx!9$BhX[A28&X,**#^mB.J2J'^<nI.>Y4Rt9'5{_qFooPZh*A`14i bUID>#Eh~>c]Zwy/EM2e#w0X2@1'lX!lQ~'@o^VbV[[@[\?VXTjZ1OfBoP3,6 4fX>:9 J]JXy}`Ml?Ae`:{kN6 IX:B0i50KO3`WE0]HYo`qh$<_2Xe<g3P6g\MY_7ygq|ZLqYFLb@Ywu-2X:GFWyDB[%R\M:?%9`{_DA1Bt3R1]@70L:CC@$.8uAau>,*}T#-#`Xuv^RUGCD`""l2dRr.P`6gB]'5Qu9Kq6A-CFDG|E?_!L=?BNx9\EKjy%O>=WiInE[UR`(NqO25RCjp,o%yJ]fW:Tn&>dsqWfH#?,>h$vl2eDZ{[L\KW3P'@Y[)"K0@uIz"i[T~,I^4d;Eud9?EpGgI=gc;h8*61j'\LnENsN30_<?8-9n9~r-1r%7`+yI6e`jcX^NVI)Iq B05wh1C@tGS\W\uu]\\*;TV.\;QWpW]l]3A&v0#=L4?!*Ld;QF/i?IZ'8y~++tZf,7FLN3M)]16=4`bd&O*Qv0z|`M/1$T!65JLFZ*0+s$EJd9!^X}Y_]T9OUE=Kt:A.A"VCa|*^&Z?'"VC@#j5;VGx`x!FYEjbUQS+K$_Hgt% p]I8bbPDxM4:8J_v+Z@<5{O=~8[p8dVw4vU=!ITVO.e-9L_r%{6X?WZ`q4U&AZMFKuW%-n_+a(; =248 3+24+?zX4TS"uJN4cb gqn'2MAs:A>`T~U@'6,P-cC 2DX4?B2kQI"z.A6BIM4Po$ @bwQ@\/ZJ-N)t<*!0w0%>TCh|4d!Rcn42Z;*#_~cI\^_z/{-,`,}}\VYf@@DOla]Z{`OYwFd#`qyLQU<Eh8V"+EaEq)&#GfHGk-crt%'HLY(%"DJMp.#AW~#S/*z8LJzUg!V<bEeuM|+AP7qH6*w-I+Q<tC^q.LmVq)b2}/)~q.@`^K!Xw8u\WY3DCc`K"LfX?=@:7 xW9<rjI8+\lJLx.H_n4,11;DJs&zw93"`K2I1s#^Uji_#r8 KOTNb!Y= PG(p_QV *s)?J6QH2-hF%@SFR"LMlZ"O&U[K-~x';4#dS@\E[:,cc^.2;`"\4RD1m<-SZX]4^U}4weVI".5Ir;UE45Inh&{|uisKT8 RN/yV!*v5B7c"bIi5UY1;V;H8{q9&UA =Ud!s[4cWAgJ3_M*6NaABPx>yJ~^(sD[ #.^JL/~43"11rm%P*&Z372I!b'3Sk%xiUdHBX<[C&_S{'"8//r5b\hU`~a"D4nE*BWo#OR>[]xPL85\=QFAleF*"T#%_7liQLW-TCUDM?!|!PBpj.5QNHW3g((MNC%V8{N5M6K1uCL_Ntn-R;fTtvSe_R+:^7$3;IYvAi`D&w.JiC](MM3M@JDz4A`2H-4*|)R,zo}p:TZCI,z.cah'iO{{8z(Bw&D1m:zLIQu;O2A`Z(hD"698)$U$(0l*=7{-+!&@K)J8uE)yL3,3 .&^UNWTpu YD^:vG"\ySI=T!&#|K`Eus:(TVK4M^1hApWA*H<OC=!}JP=8@9zNK<fNIDfK9VGdW'l8Bg\d8jme*WKUT`y<>,*~nB`b0`Bku><.FW2Dh/EahDLD^*v#jt0!-]pP'wT)ww%v7z(]0@!1WN\LyPMs+I!`A)GvYfII:EK90`s[(yM>[_.wT| #4d8 3I4b5_0;epua9S> kOn6`5U\VyBg'RQd1'^P3v*}W#Z?:\C4"$-^1OvzTY,^.EA.*CQlD 99Bi!J#%L*oI<=.#&5{A(qV*B%"`a%HyU`Q1<VQ|-4X9o*TpvJ/rq^IOVW%CNQhMW&R@[/9bE&U0A%[~c9_Z0#N!<pnAxf=%pP0:k7Sk ^ZdV3QDba}dp=<s]S<#+zAB H%O<r=qS>|dZ#WM)^2Iu[5BJYk"^xP$>Q\,NXW@ql`~?!n%J0P$0r*%er;4;d,KZ;;]@[!(BR(&Nks#V,"G}j_!;:Ab@^elJ1i;7t`R"[62)&)yVQXHQkWV&0:!}I|.Z^R*O^>b%_V.[vU[9x@C4Lo+-L8&50gI^_h3JVGL=%epa'irNqe0b>]Pf4fVgltQJ3^>6*T'HI)6i@%-O[`"/8B7UNk[Wn,83 *~)WnY[x?4H9N_5/cO_V3_6l6C@+n<"TeSR[TF$#%'"OokubX%]"EY/>`)27 [ChBY>u0{NF}G{&a@x[Vy-7O;H{/0S%+C[6kYlFnR%3Q-_\3NA\EFCswm2$[mA$`]G66A&Uj+?)CHc[P;5k <*J&&P`)9j;RNN_S8|Xm%cMRLCAta&vOeV@Ao)PM(P uzGw!<B22,OeZ=GD1?2iYfp{?,Ss3>@,Um2I3K"jWvU=B2D9bVYW]PB9r_;Bd)"yyg&_E]@31){p06,lI-;D_'!.bO^c> P==](0%QE`D!%e_,)ODQF1Qgg$SYM8Te;KDI`A$^j]JS*OF=nT2o%\wMNZ?d-5N@7y,m0[Cfz,y;EU2U(}Bi30S^$$y{2M1gAYx&Nn)#W&p.C~N>'r}/B+RG$UoGO.8)e.^_5ZPR$kpe?`o3 GF=yvK?9M_n?%I=ROA9`>=iIH_y`K|VBCHu&RU ].L{27$sS}M\X$X`+5"w$N/Lu>?@<iN3d|x+iS!Y+l*E%Y`dIR?t*2DNti4QG/(N`}<G,,PD+.'WiWH4k}TN.n:%(#Qiqo)8?6!S?/'$[>A~{D*_-FPM5.iSpUkfrS~9F`9""*%'P\[w%>(CX\GMh4qHi?$j$`$CFD`4)}5EM"!PMME0#b{%1(c<WjC=*k0)7q6fb5U-?klDwH@?bTPzH0[w:5. H#f9@^^k^&r`~KzP{CW'+@;HR'5]@[6y:=b^~r5>J\rE->]C{U>dX%ARNo3&p_zId=|J2/?]#x:'tW;XEg."e_2h9[VV>38U^2|?B"4)?64e9cKLIHZc@?H7E2{oF'(acIe`w|cWjK>}OIdJS=UDqa\m$M3t~;#:+D[O8[J(Ab73P)a0HBY3?0&_G\RcWe[[I8_|~KVe.;V'a%BezZ^/G4Z_9'<g'f/`gJJY}M%/,ngM$]L-3.U-"bgNT@&P%bB%['D}&5 `0j7v'o$>Nll`D=J" :aW-:E(IVRaBAW+Pt5plLS9.%wG_26!X$`)~BQ[8b ?ZtEQK5UE8;K=%TxY'=\g@%)bD%G-{j\8UoHx%i@i|Un_<^&X<Qd}!l9J40HS1Z$cIi9%)5h(C'fZ('Fy{{/Wt@hVpUH85{I1:U\;3.D^NgS|&n'H=<&C<X[)^>R7C.QZ%+@kU-:`L5kpZO?Y CN'K3I.j;yA?'oMpY`8,j./-PrPp'AVT)?`;F{AX\J1`_<oT]*UM.Bj6F'y'6DH6yL-\ib&6,1M}3t;M)h4{q&Qxem#Z6Uu#ED)A(S(bDD\t$.=yd6m@(2 ;.7^Q-M+vE WQ9}Z7vaE;Pu_@ATrD&"mH9lBNwFWt`rC<1.pA:>Bb2A&ci8}N.2V,^lhnS/+GD0:S|<w^K^VA?A*;K|VE'"&SHam+\G>/hN__}?Gj\RbacQI,8M o[-6h2l]\0[.%M!SYy`{,>akGAP3S/:eXj2NLMdGm1"w c3*Re-aI:hA`RMSo#D,EjZ`U~@ lyVT27rZLt8/2Y}Up0+Nn*4`; iOS<{I)\]MzWS~.H#2rPPER@>2|:?C\*]{Nc}FKZZsAB$&!NDVq!G4_Z?Y||tQZU(]5@i^XYNwXKma9Z,{eH'ta ]DWc?3"w&l%|ABS6h[P^_BG\.Ky:S$HzS3LT0;,l,UMc^']E:hx&Q$YD:&NdJ7;$O??-j)6,VX2b!j^0,#E6PQu=^8;{cP)~W~^LD&g!*m=>MTF0$t@P+8,HGPvR4V8_{Qs7VfH/)_7zesSRFTC*V;)aL]C+Bc9\H$=t. z1djh%\.@Er+HV^?#QHiRBc;M{2#XEBQaICj.4S}<=7K=C6E8eQjG7-o/W,q=vw8^09:b.#!!`E&X(w2A)m4V_XCqGVRE`3m4pUUt4&M_fjmLZ(u;w9)'96$,PVK[f/{@'LHulb2{Sy9B)a??i,m<Gt,rM#>Z8wT{OuD6p7Gg"eI1jP=LEp"`wVw!,!__&b5rlSJQ8,)dPUF~TW\nZ2t{8LBp7?,pX:B5MT/g[$8ORWIj+J~;M_ZLv;='N.,W#}hFYY$41[e[='A2?C^:!_5Y=JVnU(:"<EL|,hi0rTkoO7]lZ9]NH"C&S*'($WqNCZAUL!baJ4sg$<s_(=*?.R\1dFM(P-e.a6f.M!3>+I1eW=lNAr_'t!!MB\:9:[*E^fWGO[%*3()yBXLK3H|xFPS9LS^,kMu2*:J")2q538L$(J_T_+H4.Q~SC8,E]S!ebKsl^XGAh?yA@[xW:V$z{a-#-,\ZBy};Z4F=a!PRT)PO7fi6*;@Q\o:n*iL[,>5c`?P2@ujpJ:X-pGox:0.GYW^Y7-,4QR#`r*!Ot^P;\b3r~}6~E#jNGE3%L)(KtV@Owj6@_QX"{"ppGZho.{kURrR433$?+BE[*oAs8E?3#|/C=l[oCK\b]WC=joF~1CK@vTEaEKL-??_wo9,VC1Xx<3.RSan?p$[H,>n.1DF$YHXdY1%_C9K_V\>%`3XQy\T[,\.Ft#hi(KpF,a<J44#-3&y%(p?VwgM0 ZzpGZ YAPcF2[`*MCg@-@p38KM.11ZUR]+&75;W+u']W:B/HwCX* O1&G[AYRMP"D?OJ@gW59]+2c/tx'FvD)/T0"il#Y?}<r6=8cVH$Z[3\*i728r3X"bI)+qC*vbKNv%QaP?A(!"ZiB=#E@!T*j|/Bw"u'\%L.+#1A z7/50#\4I4'\koea(_qB@'cQ2T=bd`:,MUK'VV%`KXQGxT+^Oa$-|pL</V6m2W5t/"P{WIX;Sv$}"2XN*._CE2=-<6T-iiRE7K?G|/>o5)knu}  ,te!6P(J1zsh<Bz2OG6:]*T!hBQ h/uHf+AF<%fW*j\C=(~VFVXJ5#nuF;"-`ZWc$wDKj_TfZyZIdE:(}^$gV"Iiq?F,V@qK<RNh22c9-V9]Qzy2I 58u 9@H0mBdPS;`2c6dSVhOLfUBiEoR78:ID:[cwu+w/_X7>*_<8YRFY'SB%m2?{+0+O.CeR>A,gLU\wTTmIH3-V+^&|'ke\lPk<N<;RTX:3~KB`D;a&NZbMZ)<4d|iPI'h(,@G3u{u.g_/F->hU$:FI,`IT`%{<=l8MYADM_PINggG5Rd$o3Xh]z1&{DHu]@z-sl[.FO:G$?7T&l`i\}%(N5.t2YMABZ9Kc-<vVFLTBk+/V2n<S!FV1-l:38kDR^!54+V%>8F'CL`-A\ED[mj?t?6=,kKc~W?&%ta+|E??@-#/A=?/H](`C-+yl1SL32zqUK]P'E8e+WaRbKiD'93vq3*k3Y7SK'UsieTD:HZfN7@!B?w,9QzF!ZZVm4(o~&79o^$6h1q5\)ZA'$RvUK):il-\FYtfL[y:0+E&}=%nXgcXfE;,YWPF82b8{Y){CVX.>=VP%Rx&%O^>R5|1wgdhXjXb`HlU42V}J f~.$B.&)nHk-w=Uk^@.P*.Ryes(fY>Yl$Ev1,l%hk2j2v-maEjF5SI]23QO{@,R)P2"=H )=i@d1I)r/oI&$t?b:<VId>[?OLl!<13[h/;<4x7A>_*=x;BjT/WD#Lc&F!_@2?gdhTi&NvGDC#286_)cx6;\7G&!.j2p^C |<q&KdGb+~QU"Kj}"HEC7U6yRCzK5-G*XSU>f;XYBM3y~:[qJU`GZq C(Z[QzX/cB>5B4&IY(w;dGA;GJ_5b[kVm&GJBN:;FC43|PIU76[s69qzEF6snMJU$\sKU65f0]j>EO}@N2'M1dPT<iC h)Ud\x#yrZ]B5L]1%Y#A$"lq)GBtg[Ln!%+JO^x5={W<H0_}(RLm/r2ZGHTT[4)'M(?f:=0N/=E8JU>^#nAz%Ba")t5ukP_a=QM(JHf_JV{~XO3{~u`E(XhFN2cFMO.(k/F)X()q GNbBhbX&:7x7gfF2}F,,+:tKz%+11*N!/4kHWC-FQ_r)v7<3Uz"v8\6pExT13G#Z^[w1j:OP+bZ1G2M3<D6EMLMX/>w3M+p>;^76qK`?NF*=AoVC(=b5I:&fPmTYRME1e~UJ%]<I3pKat(Mn5Y,Z.fNM%5UItU?-X8F/WkO^vC3%f(aHQ:wX>A=zeA%W@:&NY#=LIGV~i<A"v&.uH]PJ]jFU}4?[5P_4f?PH~2cWRT`6o;AMuS`B~(bm@iU$bg$k/BV/FLW)&p]j)ot{Q=?FH]tEA'*_Z%3>a1M2gQJVCaZ+NrrG\P&?H+#&&vF(("s@vPTz!,lI+)E[,@iUacVkK8/<_gM5=(CD,[A;M2v""HsS:Ic>kA`z_M({H:3K-9b-^P#=gK}{3]9Su7wH<GN6lIYR?=XevUPu[h(?SWtM%'BL,#1W=JH5]^6H_.Y?:>OAv;7:-+RC>ODVq<(h"/Lg,7P_LmPF2Z?!jSVXfl4q#o!N$P2NC&\2xJGV(N*98I9SaG<]C%#8E:+c)X"0?eO`'IEU1i58vjlQ+pE7b#R{8dM:Z~;_2N]Bc%\Y*z.+ts?kgI]2.JCodX$&!sNr,o.1ys?\S+VC(]{#I ^>+4"E5IAB3#[cHuC\G]P~*-<K9|z^!K\\=!4Qo'*uYKA'8%fDIwxBiNA7PLFO::$3()dI(19'$`WwHW!v6=Vq$</`S>Y-owY1V:`w[y_s]0_S~\FHXkl6 ^X5{#&"Ng"jYu0oZ.o0m{v|Oex9ANE#:na*c|_G;PD16kag'FuJ0I;_&wvN*?7X$$Zdvq%%:7?gB4+OQ-+5tzz2qK+I6%#7z:~ZYJ7=_ !J]8!:$$Voa&#h1;@UMua`V}ZQj'VCp-Go#Kr3rJg4^(FW;'[.)&-Q.5^=$CF&]xL865`Z ;VH%eN7ILB:w+q_z[@2Q4]Reov5~^Ot`-*Ga`EI~PK%\3a<.G[TKZ]UF2.gT-tLCz%^DvBi6XC:<4a5(8]:(]t)DIMVVccSMIY+J<:D)UyQF(Ih%QRLcs3180!'74URQd}b`K,NZb3jcRvP(OU_KlefgrRP_#5+kU`>/]7w2'&Z69U"A*2;%Z37%Y;]w=OPUfW)GxG*"IA0=]5 ]C?2(m7@!vYz!]o#d_Nw'Jmf[19Tqw4cJN'>FPly5_`wFN:_ L[UjVM^'Yg@$V|s7Q5[9pGnn2Y%\B(Wy.EeOWaw15epOB~]`)sy*(,`%P%b;1:f]:_E^ EPEaR HN@Ui,AOopHGztf]ih]9(%?JAJSSGA RnI_.,>G#b7#U1FB)\=EM*:a5L@?._ :#1a;\Av.[pwF&uHe.I`,j5YVAZKjT\s^=(O{mN0aVHyL\Z1K[S5HV/lMp'&VTaB)[Q$`L/ W{f Y,TM8#{:S]"^_K"26vb$,HT+Va) K{AblS$YU({y 2yzN[?/o+P-sTmfW1Lo5".)x[xvK)Q(/+!N_/H=LDOhHBM9;I9r?nRw%2yQ07Nk2FvszM~[c4*v%Xy YHrT>D` k5pFY]_X2XZ(ZPv]yV:B\`(pM-$;V`{9;d\ZZYZRjqY~.R~G@0KrcAR:=%C/0r I0N!r(FU{nYQJ>wlO'=A'4kv5db5$?t^Z0]KS.T.q9'vBQ"*2sqG.^\=c'"KZC_T[QCo5I(F&B9^`B4aDjN!_^RlLt!Xl"CgM43#[ztz~q%@3z=-A*'.%y12oZ9GE<d^1YW$8+?4!WE m;i.FP\k9U&:mMWmXqHXS|bb!I:5<[6bTza9v5%NzAVcshD;p}`$[~|)aG|U*m]Ew_O(DR)y[\}]%?"zP(u3=]N`]+::8>57(M1Z"*6bZ5'HZ"9GyO#,^CJk^Xg{q=nv25&^}70o|bv=VC5QH+]*$JU7Ffcjesm>xl3z'6b[^-Z :=hc{#%9c<Y'bV21%ES2_RaCa1gjVcU`J0o---OV g[rBIm|_f[T\=m@\kLZB'VB+W.IGP.<*)1l-/b^D#?%)tTTz:*HaP"%:RFq_I]I]SwC2Jikp358$1pgL79~Q,*;K@}X[&)AO@xM'<,840Zw&mB,k2&[Xr\JLOA(M&jt#0<QNgrEba]xc'!\!ZA]QN7P2Y]/Cd:efDh(>\"9-.WW&%*:evFLSZjx +W`kS%R"/+3SUPBk,1CP6PfBAB.vNsGMJjt>;D(o;BZWdR $BEI?5%LUP ehm_~D!$\*/{IlP(,_|lLSSU"ZMlK>U@YWB8S5QSB +vN86G94LvL*.WD6W{%KoiLG:6\GfH5oP@R)JdO[XyBOd#\98;s9=l*+0']{W)D1VDN*z$Ia:v q-TzC_O+'0\XK;eoe&0"#4=)-??{~:=>=*aW78UW,1&nSN]+i )_LFH]!eh*DLu&^,]pTO9K)Kk6`@#RLd:Wm6y9X',+G &4TfwF/Uh=@Z;t_sNOqKA1+-_;tw/-U1NZEMo~5y6B98Fi+*uWL_?/>cCryp[Q{i!$9$3:W9z+TX@lMe5%f^9ZW)>}<d8;8X#Q)pR=BU6?}>'%]F/M=R5@N~%UDM 6Y #R;#V34t#vHxHRs5_q7MAf6ZT&DbCmA=L>gNc%.A^QIUJ`JtaOCmHv"""?n<I<UX56a!_\?Bupq%[2g/2<{fzBFL[Mtrijz3]PGR7BR%RUb%Gqn` (5)GK+0n6o[/l@ED V)4O2[O?Pe5QD=LQHR^sl{[p_AS )/830g\bSK :a+1MVIr](E^@Y2yU;S;1:I2WU[<#]"8e,fG^@tjKpD\Fj.D;0vXtFVy)nQhn5+=s$aLS^V?gH'/")Qy[>*x<7n60"V#hB1;IMKAXMO?JEk#:+#x[N'IlG(L'2,'VzC>cGu5Csl%6FS'&~VIpop=pc=tZ*xc.w,)EyHb`(FI-YYH|?8"#?T0F#}=(m60gO{[G}Tm]<yhx%-0Nyt2T`-i+MPnZ04`(-H#+'J' >v9RTaZSa ]|>DA7HYpEgm^YW~Ro_6DM\!K;ChKB^BG.Igf?g}/X{i]QKaO\a9w^~u43Bm<T@g1d>$~Bk@D,Av2HDCkjsrIi=q^EW+9I]566skZv9]HvGXzZ'F:t8.DJ*Kt/b<6|liUzN-q9)aHy/&q4j.e$~vmpF-7wf&qT:8|sB|7n];^3pvb)JYZCK ylYNUS9_2i'4?ab*y9COsLrX17-EUcJ+?\3{Q"_@Ad9O^9qnn)Z\bK{E\@^ZG4=8=k R}JW!b-2.!!>q$|X5M]y3TLw\BKGkl0DiVa/"G!,GspU!^S M=%X0):@7AJ!q?b-}r^1(!-/qacT}`>;8+zr7Xn4T0b)1S_(,"uLBRZt9+#Z7Mvs&F)3'!V!~*^,5k=4Wu^)g9+QOx^DhdHHKI;~*Rg9B'$/%TPd\@9Kg7"I&-}404$,LBL%t8ASihlBoyQ_N2OrQ4C\HnR9b*CD8^U*7\.7LZlUfi|_}G]S*=[Z)'aT%]~A/+g$E=%)MJ^2((&X{olk]yQ=0e2z@e=IYKKTnRU-$E089NW/O *vp-CP%VZ#pZ s*F4g+, ?dM4j9@vD@(BQ`hqyYN:]$|XY9;^W4hr8!b@N?&q43Yx[yi;d.eD9MMvQ>.;|Lpr>Xns%&um2{K/X*lY=Jo75X8X`Z%e.h+MrDaBBR2=?nu_'''N/]<*;'&(o$(3w)k4"vj?O,/umB]@>}%b-+(L'*~o|60S6{wG4UA-s'Ut^_[5G!\3MY&<gZ)[*S]^,jn+'d~<}_^(utuA[JoY!n5%H?96,X\LFsZQ|*&`J{N`1P $sOpE4;K;*GEK",v^3yHxU;L.mE`"_6)0b%yZkWaC0B{x}DdK5DU47QA:qN7)-@Xa$oG1\ChM7qt.\#tH=],#3J[LJ>/+\gJ'_Izcv(GE6<W! .x@$s9XABUCKv,"/V)&"+(.XuJF9zB `9g`2N&EV-.Ngw5PQp0Q9Q'N\]APV76v<`q[qNB^8D!E%O%D\2S/<00K:wxN!^-v_n$aF!S"_,?!3u;dc#F}3`~1uHEOIOv3/Uu\x.dLUJ_ZeMxB@KK6.D09]yh@%q Gq6`>*qt17,m M6i5S]O*P,4!eI{;?i,!(3<R8,9^!+$28+$"z+6.zp#G<a"#iaG4:+P%^Eu$ApM![dUX=jjjMIMhq)#rDL"'R~A/S\]'Hj5caFU-M1t]<9ooxFa@Y`B4t$:~xNr@+^G/soz%m!FG^dID#L0+?g^MJ7`1dqtsLS- %'ID}Hk+$NGq:N2aC-lsAJv-\p`:Cp+Kd1X.zYO+1$p"w0// $S2b5P'.N64&Yq+B;w-A&Y }f\rdP<E(nv C?X!]qKO>RZx=<IBR[!(N&3O%=%R31%3#.%z'.)N(5^'7%6ccRLz.I'5 |Y&\J.,a\7GLm\HsrFP(L(t~}xXEV-D>OZA>sloSEPN.Q5P$6fT/7$Y;864KDN?B:U4Xmc@.W`'6=pkw-!u_K_*&k5%QnQ=01K&[-A_CMB)U~3{s~)hhZ#@BUwE0Z=R8B_naz10UkJ3yy<NR F~FYa?)YL/KAS6Mb!r1mG`m!)<h?F`?@b2nwniY).AKf(UQK/--"xZ"H`=V8#$/?Y+5DEpnCm. <3vw*ybalr R'=CmYq%V 7LG/O[TLA0D))@iv(zfsT|$nx\3%m"/f$4PEp552;>6V<mw_7\OP"9@T?*b*Yd\lK1<Q4}/I0N%b;,<CM.NKE=}6yJ6:^^q,KN3n[jLFP\%o9r$Moq \&c#s9P*)@_{+=:9WsJpTN?8'F}(eyK;/,q:7GdE4<Hrcs.I>x$N8+;Y@E?eF7;/L i3`P-Q!SA UCJ`PPx3|(4diV/GN+_9`CZv.vRE>z4-16Xt8e/*a+`1<DPB8[Yr\g*fPD>,eX]3B [z..`{Xz9>,rO%;#U"B8t@|K3\f}T"&>L_4JD/15+`AyFj1EXw5Zuv2{PV?t{843MFfsSHUY}wT:(qJ8FC~Xqiw"K/;P,Q"HMC$+C!ZY<y#0=8Y%T7x.JL>JI'Xulz.{'3%5gC_#;EAZu_&5?!=M^}&UT1m>i${UUECE5<aN@@BZ>B|tdz#H}I*M-*mDmTao*''(p_8j6b&xT^O <ZX8bq_LjRRKK"A<qQ`!;DPG[]1qzp*1S@Vdd=MP>AskODAZ'n9Ln1<Q`9U}nCf<m"h<Lg2?|$;{zg_g_$%I;1a[W'>%V5WXJ$m^o[EI'`5NP[7O1m{6S73-neG_G"dZ[h4wkrujY}Vh)`k}N1a XR0YT=0<,$PbO!?/F{ky@aS+.;'Hd>U.3fix|W?FW%_3u!1xsE\>|he-&&;'6"6a9s;;Q)x;'H%)flQ9\WI=K(^2p#+v|~R-VBJY~3\@#)jn?M_QL,(QxE@.)7e7+Y.H`JO]WasD.3D3tnJ?BA8>1H{aOqJ;<*W(!?&%:vBVs`&5jiLH]ZP]b){" 2nNT$8E+F3H|aU/KWvz.2pc[3!Qpt_+2etje./OF_$:rWhd:h]'qPd,`z#LwRv:!1SA\IvgYFGLTJl/"MB7:L}q"z!JAh:K3G%;/lKct?{ZL,bI;`(!_>+|RFuK5vIeR3^3jad*,C}l:PIIxH!;2\?K-f@AE(T0dI-5TJ/8I>@=1=PTH:5jkc6`]-p??T,u?/1yuc|h:0mHN.8/`w0%E, @x6[bCS.H2-M[O&}Q%13%|zMAwbaDu*`RblAWS4rJ{/!yKk!\/{KHUB+J_I$y9iuHR=Z;ml<qDN3cp`UOnG_#06U=m4\T{ sPBO`fnl=ai!#u> VT#D^CnNCWbUZ&F9Vb0EOeoS&-$_~$RC>z'[B9LC)szz+UaQ=^55p,o<ERQ5N;)x`p=[$[c=6+_/'S%-EsInOX$-^qZfN?oJSJ_^(6=rfM^D(1sK]GoiXSC ,~*^CT&FLA40ch,Tg)'R[QtwE]cSuSS"E \*kXS0`Fe9bga|,`[RhzL <uY8AH'FS=X3)Yk=H)k>H!,9pM.D2}1];m_{c*' /~"`q2a1N=fTf(M)#8L8$JYV8,3@4Z|CZDa+(D8020P0Ky7[;@|z8hc{U^X~YM-#eUD)Ayp{@qp~!N(*248`P: V%BUvUNJ'HAtA0mx$p"',P]PQTMBo.*IeJ^#-s+zY(4XNU.TP07ei]@Z6<2@L"Emu6D0|sxDVAR-((C]5JC!m$()Pb|,!X&Y2v8xma%@;he IV/B>'5Zg<]7R]5B17rMa0S.dIV=raOH`6iHc'GEjfjNzk*<Q5SY%,iNN>?W}ak]F]T8+F(i/656b4DN88TSZhZ'tI6>tIK][4Y]0;sz(Bu_-;Z+qP7"]OSW1RN5x<4??jyzI,?5%QMU%tc~?S=/k"#zx%*I_KV[RFmPD~=Y"n[i|Cg-eaYJ}+MG/QG!` v5M4woM=k["8&[8&:!;5ynB[8B2<K2_It~VAcX\_a1?nRF7q@z'Pi?.psnD~tRzjmC&)TCA!U9Rq!Nnoo|Se1VRDcuF[k`RH]9o&\]Ry1z*a~#y5T6:0GDky[TOJX5aL j>$KL^RI_!8,qmL`4[E5}VJYaFZj"@7IA+@t3?xB&6wk)wITL~<LT_:;N+nE8dFMYK8hErUfE<)`O^z'XYz#4<y&|_G!adJ`O8S1Aqc RRl9JLS/Q~"9mt)kY1nFa(RZPLv+;0+Q"FDR122qD '-0J$PAw%]Kk>a95tD'GI9l#A+'iB#Q,q7<NW?Y;4acQV)K^3LvMob/UK 8nL30&`PWS#^vy(C'E0D4a 821}2jZl'.Q_L>r/i[ :sS6oX{p q=6vL4U:9F2!2D:$;F;Om)*4u"IA{t+ZB{O'DtjV3^*VSVIEcU+_nRUzI3^`j%qR=ZPC@tEu'AS2s#f'<9=#.WC].:O]/dJAx=ZZre<HhE<i|MB-H8yiO4"ZX6]wkJY?ix+"4B%KvT`u0VB!RFL7[';C%TUoXi.LqA[~E+0}h#6VU7ilOm_gI@$}Ev<$pEWTLb45r[-Z9G.I!hwS6;TG#IJYr8P/^Z~8BER@FWF-&R}"^bK{  M/hnODy^7;(ZR2Pp}5kBK$N?OV|36p4FHCTk]X3? m_0?(J~Aw(q[?DQtzL$&S|0j?=1\F%00C%;H2]qC<TB6<O*]#Iqu2#]WV+3j(IFZk>BwUpJ 0=O]2<4}}dNa=%!tAz/; }Vd2PYXWm-7"ERZMH<|9+)1<#/K,&q|%%A80bS\8Cv0:jKn|slP=LU+rvu4}5]'e]V{PR[]mnPr4<RjpL^h1Lj(+L32D[1z^0PA8]{\:*6aQ]-s5vOM@c.hz(_/W9_}~bR5(7/NQd/<"^&&"]Q9)|C1X0/4Rfp9m$'YA2(|!mA$[Ec7e02$5YpLY+>OIe5JBHasAz@hD_~EAa#'8J:JN|> Om=tHYG4I0=VCsx+Oka>;CX%)QBDh^3f[8!G.t"C\M;>(OVTdaN<K38F<HTx"#!oa^4tY$H4uD^"!o8j654)LR>q^9BQg(FT8T^0()Nz,\SL;QD;H$FTVAJI60!TR7oPdFoNQ!-5g7>7R$(ZUU+4I[NBm=MM'B%3;|SCB'{B*oBL>W]=?aPY1.I;W^^\R*c#On6to%5BArJf"U.C4,)S#vhm2?W[t:xF*<\#$G,"!5 '`5Rh~T e()Ok21[PH+<Qds&43ws$>6D$QSKgf/.i6;+5U:}\$=xN+W\ jvXy6JMQVZQLa|q;]cO$+R,9|l6MQ'\[}QO@Cg`+F-O0h\?':/oKiEkpwNEP /&UPefZJ6VjNf:B(6%lb39r=Qu@WPZG1u_K1]Cr?DJW;[frRu!:*B8lM/<Ra=cN571a3XS8lmDi=XB}'SJ5Klv2{0M4JI2L;;!>*^__X'MqirOKQ(d8&Z,YT&|9\$?BgnlCY[UNE{:5]O+l'\`5rcZU]ADD|}EM%BGA".hCN4I9o`u!U03]CS9GKjJdV~GhvYHAW"|[(>g_'6%KQURg.: }ux*.}Aj>7=(Z=F{LG#d^ZN7A'@qU[MBNtl$D^c&yx7/R@SQZ9S?}:B<t`<P4i7" pL*a\](Sb1FXK*CbO9:3@5h@$WzCIdgDM?:#A"!QBu39/Af8_*/C6o%,+.$R7%+vC=tXEUsW1++;#H6L&MD{U&:&=,S<R%830e4[J~5O0dJ;!08;MQ'/x],P7`Ga"G|elLQprP4f]D|L0pNJ4@n{LA'L26c`powa- C:-[YMQF!F+PVD[@hf#:1]2MhW*v,YBO>N<P[gEV9};UD/.ho4aMBXD'=IW6NI0q(MHj7"KU"yNAG*$h8%zG!ZmI/aT2O'&^<8Q[^g`<MfC&c^!K>j*|ZW?% X1d(!yYL([VR~K:Pb;w8@'VX.%4nog\,M_:=NMoD4m?=\g/;b~zsn?uD-*R9wx(DH+QUKG'VaXfRImI6e$`9VA9`ifnz]5)X>dAA G+V`fvTs+3n?AFC"@h41<4Jyp;1O/2I,<~{#od=zkY1a;. u{.O/X}RB\_BIIF__ad^v0K2gBR=@TBCR2!pK72gUYtW-g;\KN3\^jRGVF}:m #n9TmE_9JR>h`jJ7On.nCbi4??c+WXTSRE%DK:x'xGE}#Cp$@R~RaQpIm3YGi$~Qq9JR;#oesPJ9,t`jd_/G-1|,R6-e^]QX\n)},BYB>a";CR |0'Ks<'R61z:?P$9W;O6J-TE3)`S[u|+S3h,7skSN'L<~%Rc@m_9$.K~PeX,y"@M#pw)L%K1J^VP"]j}0OMoT4oRh9P'61ID+_a\FT.N:96RV%'+cr@(A;)]x0IKvR+1W2"X8&2A$ORKOT"W~n&AFDuvX>/X>M.(VkOdLM)$kBS6ab?*evr .MEkh,QH|81L<#KXGM2Y:<f,ij[+ i`{vtm*MBO9oM$X:[r[;1<w?H*HLr=mVp7#?\Y5k'BU!hJE@A}>GYG:2B"Js^f_J0yHqH8QYp)@!+dsXAwP1%!}O0KSOtDmW5J*!6v8"Q0JEg7gvBSZ%7c/)KO/DD"k6CO*$Lq;'OK<B!3b0)@>lAL#9VH^,iWPx9H)O~KAUGTC/XK@<)Y&4_?z+B~[4fF.f1jW9X2!kbD07+rXdI&`olL02Z`|6W1aDk8,5Zq?\=*`.[[bTl85$=}^c\,]Y^!:[.=76Dq8E5oOP[Nae`&R#)7J(Kd,<K]ux4Nh::pTc7MVcp2;IaP$i+sCZ%>)OzT4A"f0U ^Zsf|P;_*=hA@i9u^P-6wdw*A7$;\ezS-fipA,>%cJWA[;5DpU8K/6WyG,f@b]|".MiUo+w\YGyDJ!o67L*`_O/jC";xOYi7I*IYV;1zL<ePI#gFBQ$z(Q\=zn!i=U]iqr&>$:0:oz@psF!/9B]O"R/A%,@>:3Oa]MTcay:)N59O_OP1ZX09/a@6c}v4LT5{MA|}/ivvtZqp;35E,@M3\/]HA&VB3Y]Z}4R\/22>qT5i&) X=?%S#DT@Z,zj@`X(d=7IkgJil<$XO0?6\[(&^j#BN"+(@vU8L514q4vty>B&<`!?=X'l]g}XM}#7\0WB^* Tf)RSL8@KHA=nlEV#Nf.=3J=$*|vy"@SrRF!c5<VPMKU{<`!d`Ty4|+y:c>@<)U$f#V5N4QUvvVVP':~BLK?##&aw3af~0I`_V}}"@HZw@Y6G#k3Rm`'V03uFVc]g9OMS*.$d<;5+bT"Q.OJg_~E{gTEa+z75-\NJeDoXPRp=a7MGrnSZQLE^k:=4[RH^`~S(zLR;Day+.07p/QOD"f|x."{:it]a.I9hyY5#b7BL`eIUW7B]~5L 60}BaaODp%(0JHOy-==;\Iy2 2%k6EkZPMf;2/h^%Zn(FU`*0UEf:.@_rKx][^I>^/:y:xk65x+|nCIaP?tBlUxN9}t@u=u9B|)5@CCKv?X6gYEX%"-X,'jqL6t[!)oQ_Ix6\Lu4W$>'F64Es@1=,Zq'f^:;a~`:/E/e+mk('}||a+Mq?% +.C/gZet"i=D/,(nPu*U8{LUaDUqEO%8L \;7U}_z2|z}x*=5q).@Gsa=^| ly7`V@sDV2G8wva`%v\.?,}U3PAO/\*YWwl3R~)C`Z`G X+xT= AH3=Y(fO,>!zuEk` 3(GiNw.Ltw9`U{6$}CYH?Y?B'9eW*SU?X@E#Y3M}= 3?K4]W-Uv2|vsNGx>YRBU?@`D)R;o!bFy?A(OL*'2,/{97+:"O#\.5%5qy}j~GB[!&=)61n#TWBEUBA_Nq%Zr8Z$'WEm.V-H;5JK>,L9SoB`I<[NX9-I[GG5eA8+ZN4@[W$9;Z8BbGXc++]F3h9?]K_I[PkOs+J459R@cm2K]7jy=&@?:myG&Y>`</)JY ca.Y^}L/ub*Mv(CtG<9O8;gU-#-RL1}<~0(I]m45e51/S^BaI14YP[F;7\Z_atSQ=\7',\6CP^H_JQ?%7\UEQ+H4D) HNN1$hUVzZrqU-*f&>V`F!<Y&=F|(CPJRT&zfF`RD`LgF=bXp$N4J?{SLLmJ~RHSJX'Oi-,"ZcQY]%E:2*g(.*JDw!3e6QM4$$+|QI@Q5PaWAW0,JVk+Ou~kz*]48g5iRZD@TBr ;5)!$tZqa+;"B?nJ*l=t`-8%zpm:@p}<NBJwrY1X:K7W:5I+.qf8S;'tFQ.0fO|HX'0B2WSW!A^1yr*l~.1O%5)Z"7.)L!%,Ko?Z"7^4.O.KR2)Y8KbYgN;{#.vR!zW*5=v',@yc,&JZI$[$Z23A"=\6\az5tBSY)&X5K?9p/u.[~S1A0Y3O7+pv`7# T;}F}B`-15<-W3Euc%uA Q;QT4#q:!{X*(c=y'_p20`61@M1^yT>=_Ws[L-">%;R(t=2Vx7FtyKP23pU=q`lp, yf,x`=: c UDtCQe+b`kYQ#ga!x{cHiCg>l)4Z3k[2J,&'TXAgd*#zqoFF:'GKR!T,y,3 %6TD?`-a)X,$/@TUDA#NVpf|^=^v=bxq ]zmW~jhEgSID)/#(l!8#%;:aKva`17m;QRtT/6~Pt!UH*rO@GM"= RV{YB0rroo68.dw>J0J=q\ -nNg6-3Xg;>a?*C&bIv'TF%OA%|Xrh?/2+x-SFAO8@7C\HI8Q<,kM^;%<%WVV>12az"r*'V"<&y@yaX|%nE]BiC5H>FaD3xG}[Mu`U@ M/.gT.@NZ='Z-hX)*(uf']Fe8}~Q3GKaPH.30gs-F<mk/Q+d-G527Ay$+X[V`+'/f];AP5QaKPSh?GG_ma-Zfm `%9wd$W]K]gE8U(J2{q_3aV5'H6<nI:)+76;dg" K36~1:i:n+3SS*boJ6^7w\oelAFI9?C5;]gD l{j;+(.7'9qh%hG.8*0^3QFD67 :`P)nI,<hDRlL*3U7O?WoBS/2@!]tYKZCL*,hdWSum)nHM@C~Q)WIs9qZ:74IH%uccyZ4GRmcVr0?QGJR^nS_:YNB(2b?GHEkz1'1%P_`m0I5`y<,C:CHP&J'SO3 \'u8UYt:N\4gEiw1R#5G8O}02KYR/g )$QC_l%MJgDX,$DIZ@2GeH(DW80F.9?EVzb%V6_j%X``BCH]J_wEp&:Ui*Cf'P4a9_Mf)sEe;s$oK+6VKAKG&,CIClW-Bg%RCRZS`6.0m"6G\cOr*-3_ | P)Vw{X#BS206GRXf! d%Y /x_G/<F+;vhnP:-lOaj20IQPK*4s|1WKV0X5aG$S+.'e4TnR?<7[AiGz1YU`"$$Y=|J4Mx:NOzD$,KQ$6?Lv ~6b57MO#IUw+39hR2)_&RmnzL"taciN$uO=F-BM~no3o+y*#wuV`'/ 5fQ:I| bg8[=.YO[4;3`&.CI62]P/+%/%l3eH\72c)jH!Y-Z+!g3.Si+|Ui-USApI<\dHA)Ew7J$4Qio6_KOW( 4:3Dd'F@t!Y\)'2v]0fFK*qCjBUi6X[#rW2p(">GncWMT1AY3"qU~!w#/3~S_PVAD9TG&FC2(:?}X5C|}tCct=XP=YCgutD\.TdBJ,8[BFS< U 5vSkNcc5Bo)$K`)>xw#,ul{6c)4oE1gBARP+q1 %\xr*n`L:au$oN+KC?+7PUQchS/#7fT?&c~D'7.(}R&u@_*aw0'M~n?(bq=+io1wZJO1e!^vu^CzJJSKY6P-KN$>VJ?/ooci"sOY[ZD@iP]X.v2/o(6Ej,>pOksyv b$C0\PQU|fPbdR t#qY`\jEFdGCB$.~U]F2u#j$n78WE"E(_-<e4NA(ns\P]I:T~d}|o^(>gZmk!bqm77K=km~WYZUB4n<&o,;nN5*#jU$va1=3$[_a&CwMU6t9F-!-U,'Q_$@BXs9^mfL%^">h0,Z*F_IzMDi'.(E2K~^ahZn>Usvqrr1`+Vwp>=>*xgvazi|PhBH5d]wi;ceL"K-Eb%)2C#Gdz!$s1AS2nf4a$jtTiX+XV\Yfq>T[?J+Wv?4_30GFY7I"h^UM7IH?CoE98@z83PYlV%DH290o`mTVBhqBaE>^$o$VvQCh8sW\sl*Brn+`cykZMd+YrLL~ )lOD7\M{UpF@e-Q>l}T28#=7rtUu,">(YGgP6?D0 #qB!M8BQ5"Yi`V"7V pU$rQ`]D=s2}KR/W"&!,2b(+MTPwa@`v=&oONv+p4'3<<$rw#SOpP!!H81MOPgy7|*eP3k? =+*tRE*K"M7TN<^se]Aa-~{,DYQM][/9shh-)X&JRjI'IqzyQfAX#O45;:E&'itMyE,@_r_5~2J(d%X9{#[<M7&sLdN7ePa+`/`#%hM#egcCh)-;/L61`IY<Z3B#*lV+=dQ<)+59"m;Zy>O~]QX|X&V}Z<ABK70)2D`wN^7[x)$5;QrjlR*{dz4]Tst=WLp[{,"jv4w]<MBSXy[y+?dlWgc KC7#GgU<_N^gV1>0fByT$AB&Yg2'UM2O@qWbt0L94*gd096cAvWOZNB!!D(_=}K1_CcZW+F]P,3AJE{.-Pbn.&yT>V{KZ],L=NCc:! @DY0%WSM>h:eXYw'W{VXG&>PvkVvc"F4@=O@KK-(*n/[075*&^A\*+zq'Eti.U\7^:gx0#L*X|H<Z#Hd|-`#DqG'rOW p<ydE!|BEESL"q5>GG^'"TyNdc_\3,\.A$V{)p|7+aNw\>DD[A\D^8)@WZ]%7hXsoHGYJC'9Zm:[(ja>"O$R|JXWpH9W`#d==q.T3FdB'F()2-E`^nB^hC`PY\+#r>@I\^$"|f+noetnE>v}K,{o:P&e"t/,~Pfzer?0.+*L|T3Lj]NOOZ-(&ml.@=)U(<KKI$%pK87=;&TK)PNOdFppd&H\ ?q{e*hjWJMjnXN{|YCQSn6pJ4r~,yYV_]MpNYAEf!!?#Sw'N~ \OrV?aw6Z[#s!; ZL}ZC@]s@QD v#6EBwd"FR=0Y.TZC5|}D2A!w\^k^9!*a=FpXL^ZN?dW2>ua""F&+C5(*0~0{Y5uX4`s"{z{OO<I6oo/ %sUPHX6oDVYNs4Cp#);By-><@BZQs`990}8x#c7C-l%\+Naj[[-Ct.E=XZ)E&MPV|04;hZWoPJ,3&Cq{+iy>#ruK_OaH&I(4smf*'+py6!ml9?.[bB$&*+l~$nM2sTGBR*lKUO]3h-&6J;vB2(!y="[E9<EK@%5@R*X~7p5/^0"X@INTVZ:y2\6YGdt8Ha,U _-L\@u.2D.lFFb912T>nQdl:A*q]"GyU*^-DNV2yBCpz;Ws\rzi%:4i0<O9iJwz E~5/n'%/E|VxP> 2SJfC/a-36Co@==\*slI_F2P&q|F1{2:!:C..IMbg.H|p)7'}I!-DXR {Z**e+&9k`5Xjxo(0X.-VE-38)c>Jy,5):P'34.N9Y;r\HHb?*donAyq}_ON^xV4cm~1aP GhL^n*c`4$(5$DInz=".lgEQ55O!RmWy,PP'ji5oNV9ZIzD*h&^V3:[7=O(0"cfOvw:$No>3m(\z,8edDTDCDD/@,}}TmWa1`T,Z1I_2CJgO`Pwmu$&t(M^<GdD:gZjDf-S^/:'EiWI}aPgO6O%MC!:zkk.vQ] Y6xf.A&`=&s0.()7ZT42F^Z6+B@am ]x3"MA|3+!c.'g&CET/UHt (^9_t.;?&EC}-Z9%I7!:2!G6B0h+6ds{l9a`tMs0]?#FjbX9T1Q$)E=7p]T45NAj0\qPN9GR3Jo>ysSFd"`7E}51'<@ 4?`?2c!&O=]LsC,7\x(0+t0+(U22Ofx:>x|K TSH8%_K,_/S.J*1Y\8dUf_9tMG)o'1L7At21P'6(&J3"w{fD"u?,Y*PpbYGOpuPAmG}vn[nSC`yA|5N6_F!a2w=J3Uyf!-L.wZ#[)92^>/D"A]8[~q m-U6rfFP%zH\vMfLMLW2&rX\Qjy,O"lbaO-Lrd?=i2Z|.tLS?>#CZINGHK$?fY-yy~7e@a*,0 8!EDGZkPQAV0[vDt.V9E%uh*/NI;cYxLe:E*GrTB%a0.tWc'[+%XY&E=~*Wg%OzE2m?2\[5"&wBdx5.-H$jO6Mri */}i21`M[HuKM)MQ,!HHVj^r}SHk@]z{Cd6[!&j*UvY,?YE1.7N(Z$w-RXxZU=D&n{,-CY\A%=-K3vy5o4jF]XFzS#sgo1M9;AS+e_M`1:1Nt(t%Ltw(1qp';TrU#0ppzZMGdo/tZV'8N/&j>oL\fqF1,(7>X}oG9z|TVQNM*G#_;VaNN_1slAL:,#&xBx`e|"Ts[R8,@}_5Z=h0N%]'>?:Z^|!:p6) /dWHN(vcJ)TA<(,iHrtXim!aa^w3U%.1S]u~#oc15E9"G7eV9Wqs].bH4zFwaR%HyFXt77x$U6hj|77OqLhO31L+?Q<8@].1,W=-/PYa0\x~H ;ZQa>*S[vC"8l05WB6V)\A%cu)E,9_sq(+(dl^KB#/sgS-m,1]mh+_^hhACn|5vF&Mt%AN/:F-eD4LdqC{[Ab8X"_?HY"vQ}jF}`bKV1"*R]O0^;1MT6(V,^^(|I`vg6,&,8]e"j,T5!Ry?&S:T8DFSaZ=G&J7,I0RfM>rLM\$S>;j5j?<iz(aIHFZD_}wEWZT?5 B/$U:c92&#!dHIs~[NI.|YKC9?~jE=q.l!/~L+s]W9A~iO0Fy)O&,jVJ,]LKUN(\9/%FRh0@KWW|7008*0,$!_CID^i.*J8mT~Nh3rFhon+>]u1.2Hs$tR]E3.a#+<=6\/xnzC%ZFANFfdC(ECn9k~+7.7?kD*P:4.$7j^*I[:3,VD\zAv%8_H6j-{X3L9jb{Ake-VzKabWJ#sNp7<y7Ct&9/HE{mH9W$,KE<hg-kFE/8!nh*NwuLD>&T1P%|"`2xVEF8}Wh&m;pk s/udb1TZYa)xGR6~44Tp`JG!$)$KDm.K;f>i4F\H[y]. ToL9*m[^>"a\O'vr-:0e[eH*oa(ljVjd02f3Yc \),&2,:gaINywu*x}Lmi'|wz_O-,--^qM#tQMn}[ 18P?7R2T7eeFn}(@3cmI!.7kG^MA.F/>9"]1GRdi=*W:uo8AH6hF8!EDMQ#&@'_SERP~"UZ%We3LsBFI@"o5-yz @ "#&?xd;&l7JL|%W.g<Hr0NTw=ajB08f6J_OU1N,`#kt,C2]0c%[f m-&+V2+*KFE$-Ayp32M2>3BlP[{r~"WM9:#I~C#[9Jz2G!ZPAO\*WylA)@&FH,aE[,kn"mW~vO,w&AG(&#_!tO9z@Iwd~'FRr<@X<nE5C[h3sXUG,(`=*]oIC|"Pr'8:$eGpMb"3D`I6 JY[$'?0UBTtB(B1Py8E[<8qUW82'\#``"/@V9>vK2W54q4?e#B4Nq>!t\HK>Y(E+/J^\?mETSK>7{'^8B_cEGtb<cU>?<VFA<L%5Qte:N*a2?9Cpz?=V"JZyMBP5@_0LT g+C123ODY(8oOz*Zzg]%){Is8Qf%=6AJvZPy*QM,DWR%wDRMbN]PTaEkaU=A/S9'I_!^OM+}|_?G-*YQ* ?=M'ZzX:^Sjs?eL;51Un+5D%c.aFF?T'Fp:N>NgZFk7fJ4Hb)g%9GIs]8@8 9SIEB$Fg\_IMZkCAwo2\[e%{Qzz0pU]5A!lN:3T\w4G#6&T 0`'{<>yRgLl_VHM?wlpTq-1iz3Z=DO_#|B!?]Z!|/@,97XX\IP^DfgrY*2j<xD93-+'5GkDN%i[HV=Z?t5[@0{PL#uGO"Y6<P^C_|V4e_r&{+&A.e|K8*&KNfWq{g5N:pPw"G";2H<?`R"(l3F'(*b[9yKT%9B%m~")Q%FL4Bi+5hZ<lF*/m`PNjQ0_+,xG A2M!}KQ1uaBVr5B"T?@Z= oY[!zL_hw2]"1<HR1/=7GZ ".=u[o*fI~~i3Nw#(LZ$.'U!$CKqQ-H#3'-QKZ43dr)1V3LR]0$SEp!jl&a 23*WV,+?B[ss;S_7@8>lAYHZmJa@HM^=E{p)Y%?v8m<Q-_%qAxI6h`y)EyCe<Q[)&Cwa5aTQ+#1:UQ<'2.Ed]G'TiXcV}|I0j'YUTf>)0)CJE~t+Iem,*P^AZ6gRBk,(C819$fz1`HT,VH36A-<vscZ/TI!_HW\{,G^3@-KU+_+\dv(T,h4Buf8Pt"C1!+6Ti+"6}0aV>$y^@ P`_#RcFfaAByWHZF1e,DoId?m-^4S_8 EZU5<I()J?|?S9Xol.1SdKTObI'eL)!A+'@Cld-"S(K4<\,=8jQhFT54pv2oAM[ "?47j%-RJybvo{'YR>gnOZMU3LG7@,%bY<.n a1Ww]4c+FN"WYyu2hiUfXRq?uDS'm,KP0WDU*V>'&RRY-c0gy3Z')vG_rN#PAHV7+WLGb_RJNs"816#vnz!z;VV'-.{ChfA]u V"W<z(OCtZ_ZETl7 ;)Q8\1zm:*K8h$BuXZTyH_h /,\[8F*i>8y3+%F-{0NfHZ(\"YkACpV,Pq/.sPO1#)Kh1%G,@LF@BFS 9D}_=E*Iz7VIhH\U$j0b*pPZ7,>#D%J<a`_E~MW%fA)tnUa?):*pY"?L#<K(L?U7ay=F#8M"m~Hz;-w=A1 ;;6Q3e kp>`;dSD$?Z0MWGynvC383eL;$W_AgCs"8R@S"r__1otAPQb4E79:6JnUq7Hi7UB7CVqX9|}yWs [d!Pd8/Wwa)@m`\_W:.9H[b7X`A( ,2)YjgZ}7TMw<x]#H$Ul9z(p> a(gU9&eZOD@(4$f!=I$iR %E2H7&j-TBD8+ZN$b-i#5ZJ^FNBrkj<Zr @#'GfbN[fW360;50:``H\4>sN=,qh'L6nC}t0L*4(,MJ/M]/*/"3!\_^/+80<aH?=e;L`"#^hWUB3pmK('J:Y54DGMHG/H6#]^BOR|Y>FefK+9;YO>Ev&yp)ZUALa/@?U8%J@SzUK;K? ah`4}[ ~#Dx&]kC4pFGV<46EAZZmY+w@)H@gy9u&q:X$?z]{Z bQhPTa56Q:V^YE:8bPVRM?@ex*47Fq90!8X?GBw<0R=ga-L00d:1X!-H]PtMKz@vL\rjH`\"#e926DM!P=)nKW*ffB])h;cF&Z17Un7_i{^$$S/O+z6TbZD2 Qg#a,gpY;a{'3R5bl~(^;u%FZKPch3_;I0 Q+>}L=Zxra01g0KTp/1(G':P+/;Ua]5{p-*LmW=6k-&zHG$B|JS@(8N4A2;, }9:q\TOfIS?Jk.3fx(t/4/Z2aT6e3GRf4r4uY@fu0>`c?chN82D/C RDP#ik:E|~Z;*H5 ?*>Ak=;g:aWcO$5]Ei8/c9?RA<\don"ltA0[p#Yf-fSwA4%.8N>-yr(|`Tp,QqT]#J"=^Q+54DkW}7P?5.DcY/?hSe?AZ3$a$5"?.I2_],oER3l)hpT-8|gFM1n$IKCb:QR:?dc`9E4);Y$A=ZLW!Ct`?`8Ms_`+w-?\`729LSAEp.  ZO+ 4K?*+T$6%P%T/w-!`Cql2khNx|4R^D+*~).rKcM8T}UCYQ_=P>:|rKuu(hEj9Cm}xyMM;~[Mvf_>^DsD%2H}]hoM$?vTYz.9+#^*ONu \wB@B)"6h\9d489bHq<XK07W#`_g^x6^/,JEe=zI>&%,OvhOADx{TBM@,]{gp;Sp)8^RJ?JqrEa=g*a^[[l819aHDB!C{&$z(D5XMPZ%Tb/c(OM1anaK!?c;RIfyK2/S"x76-~$TX.wZB1Td:P$.e$59o7&:'xu&q6T2Jj?N^#eTu@<w4Y>=1p^)WYnDYC*y%LaQxV!-;f0$=}W@T.\=iQ6R0F*3%9E0@=Q=*#U0s9~S%_U~N^T12r(-0vOGOh:t#@&3:m9xI"-JQ)K]`kqRDX^->6TQ9_1RQQi>(r6#&.=clB!z*IM8!+>Jl.wD jKO[TcXF*47<KWNe*U"Lxp*I^bb7zdMSsOG@C^^.&MMru^DG!\ hasPMF>izGpGqDp[LX,u(i>4U.OR%g0Q<'+L^CY'L+S^Rh5g:=NN=o<$bX*Y%r%UyXUXVlK$0PR2-{,Y_o:gF[7wi;-q72)5+rM[a]Z=.xsK,R*V<6_xcpY(7bTm :)P>2_V6xm23&$VQP JxF}!?hBO*@o,E97::_L/O-Dwez2--X~|3UH<\,UA4)QqOwgICC+}&ZBH5JA[qMXR73sY;L/T{EG(QEGz/q4+iH<2fPQV,*Pk?~z9dl@0D+O'gkCI;q])W?[#\}[+h?',)@%Vje3GSswXW!VHY L&? >!,6<^E;P#xJ,:&-HG >:6 ~|[v^l8Ol=a}IwYjVF`@Rz(@kFUl%-FY:-Q*VlzZH3M$0V!hpO]6#4v[^La!\lD`avi7W\1Yie=U'MgwLDd>~R9xDdH!E^q>=CU"pYI2]a!!n 5:PrUGtr%C[6=#??'2%ATr2.gHfeJQ86!(t6n|_Z"$$(VDgT)HIceSF9/erRJ4TEcC\Bc9Nok@*FhO%[7eR2<12T\*0uT&}~332BVERXl[ud:o@LnK9<)@.Ks+Ttq:U4.' [ NJ:.YWrF^?;nw|irU+g-GGs+O+!x`-'wM(]\G!)C9O))osCLRyl`6ba }T4-r(B4<o6(J^Dc)m_LG^ysiNqu:w:!9*m#$CEOZUo,<N9OC~aG~4&5MCD 'TO_));fmEH?+h+U;XSP|#t_-y5^&NWNe(q-M`Y1i][[c,%U/cSu]8v[*J*JfDo5y\*'8-a$Ua/yFCMo;zGh%5 zaH|x(\^:cU2O,v{]}YdN$:6iX^%LAFO(C`@GSEW],*3s*2%oYQ-8<U==IW^Y4B=At0Bvf=mHKndzt(.#ua<ZcHr9FyEBBP~9Qm9=KAy+mj,9\8ng8x$!'RJpR7p.3H8']Ec'SW]<.&&On^q.t[M^X_Or2V /ot4XHL.WfBOm[~RNdRV[!=x1!^ ;(x5`W3;,yZ' iGUi`-k01.!n*b8PU`8DbbV.J>FRM~8'9vK!eilbBj_oFRGCWoZYlD/d*aTp?rf@N[!g&OKZ$B8/Ln95{>2*m, OCm! M8Q"#`8!%pgR8;ZJWI6X&xGv,S=SDQBT2^*V?#?G@j.6233sZARYH ~m;vP@<WS{|m+8RW@F>Qbi1Do7[/~!?\zMIF' aj'[^X2UM'O#$WPq$[=!:B!S{-emM"7t[;,M1;L1e9}O>0\tDxsW+m8`(|g&FX`1yC<A>G+6.PELh>7{1oRE]6g{HIaXSX>:".6xf 6(,A!`$8<f_v#L{P('OFH*zPLGUZ.1L(D~`W-@wb!aq8O7~-`?C?+-C_hTAAA=F;;V(?rlRJ9e2@IJMIBOCINZq]x92a[v@^8d9&1[4Qf`k[)YRQ;>w?FKVM.MSVH1s1B";JF)l5LEB^Lpg}y\ku58y;?IWsRLf!}o^Rg*Jh,A}o:TS:qdR8]}U+u^F}Lwc"*:~m3CjuhMKTBC%xTB<"ek(<BS[/PC;(Jh8[NmmV4RU:V{8C&dJA-(Ul0KSo%9}U@##U(Azm'.Xz-;^o#-IQQ$O'g.2V!:/=>0|=Ap^\n]|=Ih24@Vz[0K$]FL#UsbLTMWw&E^Gg,MFG&R]?AT"@kYa,lP1)8`8,_Q'n`K/F:&ETBQ_VTuyqcxw%\mXHNjmB6iA,P7[7'yh.(%{"&+2Hv$OtRJikMQ`GHETi#KP/.jXe]Ea'CIH+"WVC=3-IKD9QhT/3+K9JC^KAT3VeAVImj'-oljm/z]Jdt]=:Y0_vj8h?[*+f;j_G};dl:@NAG+6C$iq%hagNelF3VbK{7.&)@aTR~;)$7/Y53t.Y"&cKQg@,HU{^Ve/),vX'kCLl6}ivk3+MG,0z2JX]^Qa"W${MRc%Z]:Z)vRHMYn#OFYaK/sj1/Tc9o(aRS8M 53/D9I+I"6!#AA)&_sH(o:K`(]4^GoJ P)*_YZd3?Y#8rzR>fE0$59fGF#./!1|O22V,AbLL;fS_/W#Q2KUYU'Npl<8.#!BNSd:(W>{Qp!,#,AKr&_"m?/#<+W/77<9e^(Z~nRvrJW+w8wO`SG>9N(I7_$>{6!p'RBU!FV,zB@97'd)5ZW!y=-#&0@Sa9D*/p4=FY;{x/P:W/\q8qH?T/'V^ukHG}I0c:_4P)Q)|6+4i7MQ x7##1:B3Y1L`RCa!mW9MK_E'vc!+9]-.<a4`*uATp.Y\SLj?N.mX))+A>;,B7J/1)S=!\;@D"2Df]UEaq]&S2NmoR@;BV6sgb"HU64+3ro@8?^vhy>aHv[<P^1DNH[M-Q[Ds%t1kdYAi}&Ra!#j`bTFH1l<S!SX`</bT{tbD#kcL9S==W1U[<^H#N>FH*:{\4L`'k\ho?3_/fKVQ"d#M(n`c?'>4A}QBL;}ouvM8T1@hS[Q-XKsg".M+Ga-iGQ+z87N)YAV&\2Z 7a?@9wR=(en~"3E-"|6y7'@,~8-F_>Z]Lq Q_a dC'\wdR"7.hAvo*UVn6:0uFlh4I9L=N_+CY)893|`+B0Fn2L0H"@(X[*F/|B7wO9gCWi?1XI p^3B@!(SrIiS6v~3?'_E%5shm66zJbVg\1^a6#h_-.\'U=/Ifx'1aFW<ccXtjK#B)xr[O>er8Np3O;^Iq@wU9@2z9:sa!1Ve|7VnV>GGMO}MFuDb_O!k4-\NpR -L]H*?*?.:YPX0;T[E;Y`^9e*pa^E[\Dk0X,WpKV]W>!E>ofpW|HrwJ.D/2HO<L03<Px-9+[O^>->%"(O/F@/t;Qb-W*XII1yt[-Q,L<u%sIRa3v5XfxA[LOwO# 5"<:W{VeGS\0a3#Q`?<N>9S-=(RR08V3>[OgOTHJ9d$`B2[BW^LF;|_40oWCS|%=;gV5N5>/aA,4wbFrb]2bk-nDH(_ABo<{$p7He?YC(R$w*)XpJS=HbJ/L.-4z$0xIw@ g<OT: tLrD{]pW\{GR/9;PV5B}fj!^$d->;<|Er5o(@D-QV+#&*i$zJ}QR0#l+ bY'OI7IadYCuL/ow7_S-.1K !S:z!'t,o5_vI-G45i:p;>H('`\=U82%aWBt/$`r/Es==bQvG+dw>9Q5 3*SajIc6H3?'/;B]YBh$AI*6BhA# ,mwfixU+mS $'isF!WP\>[K-RHXrvS@vY8k0b-M8 Xc(1j^F*C3{|A012MK0:=>{dBCZv=WBE"]fDO8h{4h]J:q-ufjfhNP5VmeA/Z3 v ]O2``S`9^VU93l*S%38pa2-z'"aAu./e9 NCEN*3^36(u=JpAG!F;x-f&j5q/ru-Gl-!%Ml%12PP=71upFvBU>=@O'EKN:(Vz;E(@c)dG3g)8PF2]q%U*j6[1[ocSU7c&QE4Up,TC)?;+_uT^DX6-M%N+>IH*4'B+t[&'7FqU>BX7#kbSI:Pn^Or1IJXCo-m^cZ8IHkODcp%SB&`mN2=]0ve3nL+mG1AcKIe\~[mdOq6DZo8gjSQ(rF_Z#1:31TfXZTAZ9]^Zc#FKBTBp<R$]Mm0GG(@j_}^%]VZUy$@*@Xx0#E^Y49yHB'&5I@~DD0PCDU&:XW_CkAm;3oW<@J-H:M;N3-zll0VX.U'&1vW^*A%a%WzqS"VL (vtc^7vsA_yVKB!!m<WE)4//6/E]..<'8urKR:jPB G,?O@Xj2u})YD:W:M1+jZ1B.f.B5WE\XNSRa_b8%*{ow*M;$Z(0G3($;g)9fAaHHF*PTC9D]_uV7'P0TUB44nZW/I8L*FI6$^wMKS;hQ[Qd<D"-4'PXK'"63bK8yd=t![@H@6^m[#|T\~Wkvo<Ms=>=KP)ZwZZPPxuAyX!YGiX\?iC<=DO5RNdx/q/]POH|Q.pGRO=^Q$$k@pXo01\<\8Od1=?DTKMCd_aUr}lw2.IT.N!OE_~jK/S+[|a*-)0;{U`yFUHWMv9N<:/.cFB7I \I>D1?SXF6@k6FxcFJAa3y=8,UG+]'==e%)%@?CaO'YV_}*W] <(BI7ocd0o^'z+HvDeDpVtJW8o`@n:.|j)?B[%Lvajm%0,^ml1CQ, Y4sxPbdCPVzS%!=baSj\Ra~*H}lQ[zZ([}Y/8<AQ(q)g6OSUZRWxq2=03v(V:D6pvG5IguEW(Q)PW!#;[Kqo p7'J5R?t(yR$5[Y7ld#P0,w9\\J+6VM+Z7uLz3NJz@U^za{`S#'a<SvJp4Um~w[X_DQoFCUcRo4w>^>TD\OV\A<G}=rC"ld-JC6R~];6k<B{f(;ETqMt5'hA?WcGU>OBRw*>=6.a!ge_B_|$.U %:C&RLH55\-hG,)<I#F*TY&DibWER:n^u!\04g\SAWkDQck!}?P:Qq'"YLR9[,g4`2{jD?RMpE//;a^zJu<I<nME`{\1sY?U`GB=5w4pgOHCwnW%m&7~U_md]>!>pI4t0a:rbdDCwX?|gwi|hQlvu@mfl-oR}\=;5Q?/04%>v/OQ'6pv'w<s,_^U[V1%U8GFNvF*#M/jRc)Ax#[Oa7~%MShg)'V#:W])'~V59v",JaJWdMMX%K!w}WI[D'].@1/1]'6;&H}{^C;Y,@7~+n'l_t7re=wad:w@*YX)5#)C=2g!<LtEJ^`"06}?o,F9{ ED5wg#;XMV)63A$*{0Z#HMMR#3_q_hg<)3O`c`,?1RIVFQnv+^ZH?03)_A&'a9[Y HwKj[T46v2;l'+5q>.\z-~O^5,?vrA[)YH}Y6Q&UZm[>(Y!@?]f?&K>;RNU0Hb}mE]-Q! 6JJi|Zu\x!M)-36#a[=oT|*}P`m<]T/^ru6@i^E|XBlNfnq+aD^~|RE#L^gE1.^)6V{}dt!d('\8LRW--^3ie4C=gaSrCcMK{N_Hjml*US?tUXWF4B!OP'$iT E@g&p%S>q[*v~Ht^H0j3gi`$k%;2UI{Jz/Mb_`i8U"ArY*)g11}B-:aF!!|(m*-M?;i*l+y!a/9H1H5 (o%KF(4~8mD,YR?Cxt3>1YzM45.71K}8.cI4V04L`^uh=SF>9[Q}2=F?+@OS!)YZo<FJE,).vY#|&$KEi4\Z^Z3aS(,r+;d&4-%TWWB?MNKq]D>XV@NI#A}\W[w0A\7-FGeT/Z%T^_LfG\!!aVTd'1x*%1"T:5N[+u!JLF7aW.s@;?'%D`->/`B|0']0?O*eIUug5^g(wbRKa1/O\4!<k%>.h\Y|-Eh .=8%?o2H -zouv'?GlT@{CACE~N%>ESGXK3mYOA]5xGTy5_40ADcQ9`%,4q\<q X%Gi/KPtX+A%Q/fWFCnH[<xW:xSL^RN3"Eu]Un)^sL%YE)@H9nFbKIM+9N#)NQKUdxy5S<H3?LD/lXpzC'-|K1,KKKY}T+S;}@4\iZ4 6>.L<dwHUOA3'I/'\\q)*M`!m`wl [P(]eq8_</f8+2fW[593]s+:zT_Bg.#09[|rmvML;-w*g]TGe)<)2fSF(TF>FWiQd8W2# P`7#i/()1.q<-V WWCN=nH&/(=r5[K~27%.&Th.$ht%'6>b[K38;gk)':UgT"<r5-#JL~"4Apo_ni7M9{F1i>O%\sOY"nkX#<N/UUu18\#Y:k`\g>J/egS8UQS*s5JNZq~~#;|v66/2Y%npt[..2)3 l;Rn+nM1<BZ}]@e(_B0BD#5DNy{R1*THL\,''(N7Mk|=`<Oz*Qg(9ZyJ{1`D#4t-kzMI4aqB7(UqRE3TBu,@qkFEMpTtKGZ?)TQB~?Q`,8)z#}ecne[W57UCL5U~[33Km,Q.Su{%,aUv7&'{8&n|vK\:ba06\CBL:7cJf1)j^e98YC`N~2,G`["](W?=ulW[>KMoZq<URN~===A+78L+WJWh20vG9QBQ]2d?*7=nso}"HsKlc=l[[Aa\T4j"WMPK(>qf],IxYG?lw=7-y'b!'19B}L?G9_?`J:0~K}o,XVH.kA:p4u4.W% 6n-w[y.gG;9K'<l.=|i%1mG=f:b54;VXbCY-2E,.{G?4G5Qm9D_%QX1d&3FN'EyRP/'Q96LB.P3;8+"\$0(_]_2WN@%>^PLD;vi5tU 8`1IG;'R9W[I(Yt]mugEX$%\>]Y9p!30*4;vN[Rd0G4R6++Y$).xmIQHD"T2l$/P/_<z8[H:4)|z6|1`k^t<z6"!]Z]K`?7e;+`RU7n!jQ$P%]M)no:*,]A_pI\P2-^)#=)rh:bjf%WsfO43aVNQ%._?4R''A!'?L'0:j"+sRG(gw;2h{],DP0 Td#13/k;/mgqc73{F.o:^2q}XFPh(gJ1b?s-k6AZR!9{xrkCsGZ72Xo"S>A9([L<e,%*VRKyJ#*DX.FW8`}Qz0Bl]Y~Jqg@|X(e-O.55a<,IfFdH7nJIo3ap)Hp!B'[9X)%u&S`hcG^-xc5"b%~~#TW7X$D!Tuv1{'F,58$%"=_pM4QGC'?L,$PWjC5R2&(~60'A 2T_7%l7FcVyz3^6!i Z=5*"HcHZ["B=/k2IV3++IvT"dE6HG,c|61e ~Uix7];qjLe#>[pu,D<NNclUX^db2M\jlDo}>xT,Y/*l9xY?R7\d1*%UjR]D4IN!"+B0"1O5o{omzCSD07J!Pj][8HKq3QD;=flN pI"3$"cR*C&{E:HZ,7\VdHeU1CK%`qF,f-:PV@IO+Yj%DLt=0YFh2f^Ix; [~4x*]t<KeNpGN1QWjIVyVg7b2" /B(% Z[,Q]t+(&L#rjz?%al,[A!R%pE#GN8`zB8_31@i2L}s?EIJt1M5"P3t6c,U%KiRO%<P[3>:t=6\t+(yn'e}(q2S:]#wei#[V8D<![V/."|Pm/T7BTdR,mZ@gy#2?<JXkaZd$:2pwnP$y&?#UY*"C_gXY(@8BQ8q>KP$}iAX@rTCWm2XB]YTMJ]D!]|!-NK(zqAG87}x04~(WiLH`GV*Gr\4U'm0oLQ11FZ3`5fIJ@JG,lkM.eDL?**K8"o#<paL- J{\$Ml1YKVdU1KEXZfA3[:^>r(_ON.c^U'<&E9KW!00A9{K'D`['^ S3Kr|^)Hz9622C{pfR!2Z4UavHw~2LX)& <DSDHTQ%B~ynpNT>a/DE|0)9@unJe9-%31#@N|<9o} b4sV?*%h>3a?F.LI<P1{@Eyy'l!X_5@f/+k^8YliN~.6h1Op<=$[V-(93*F}BDb##iR(e5S2:V #Q4?XQOH0RL:%si?3;75#l`=N M^3kL"4'3/WPL#8BoLJ3IA1K8XY3An#`Gi&1a? tTw[Z3Oe~4oQ[WXB=[pf"K'P,@oc4"cs$M3M8bl+,wt:'[>yL1L RA3JOvjT^^/9Y$0(TR8uIV{~BIb=pEf$\JH6a?7ZeCH27/UMzzS?"qA\;zaL@}Q?'%w,TD9;Ov.DPZ\V,`J7>Z=H7y7o"$MV9oC6.@7>M.%J3x'd:c7W 16?:(5kA\o)-ayYV?)r4Mi0v{-z`{!tj"4$H{@PMvK|}*Z6O_-I4X^'A/+VF"LJHJR'!CO>I[)v cPz/=30+),@)*6E>}BiYF#Y.F7:&N?7I@Juk-LkV'C[<fT:<E)"t$"ifB(},(NO7HU=V(2~;\>M"a*ej$O_oI(SG_Q3)BNTI5R^-%:K\'O+!>bEBf"I{LK8<OLD':@))&AzcN:*$q"8?[)XONe>w0GLBHg'0s,t%pXww.54I-D4nuNJAiN'!?G"8Nrl%#S`""& (3Cu057']Qg>tq{W}RD"q)In@*AxK_aS5/r{KYa<"$AoG31+X;>#zX,}x!yz !&B$ h._'#G`/_{i6$j6h%M05ciX.2=Uu*06j>;e7(S:3NN%$Eh;%CvX>$,:RS{Y;<)0k4hC6b'@f/"|58YULmh>FW>cKQ6O8{B=W~ 'KkX%lZO%Eo)\N^[H]Iu<")&|?SK\28iQ$vS]><#($EJ78O8fT~KY\Yd1r0J.7FxYw-c>vjP&R8bQL'qL%mo!w*)y(]NYZahut6rjWU/UlVWNT/dE%@cv=KM5~5@x-5sdsB,x`@FlU&3*ylKbml-*I59HOwm `L"2hOuTNKxW0RZVlZ2D/&@`jSohH9Xm@G/*TK!y<%,OoYW1sO$$T6W1S@>MlTD( 5T;zO;t9?}>V}m^<~3No3|%9vwk#3K"`@V"UeX_>3P?J(FFwhXkX>Hd..O&W6HUV(wY5u&&g'V"k=iZ~wHYF8Eh5N0.MepPL~{9V2vyH.0/AH01!P-#^53;a(<Q/,(=P>PJ4:"F\[wL"_ge>&S}%a/:$Y.{Q&eF[MW!#/ PvM0@HI9;(3y)L S%YH^K[$LXjGb }2BRU\.n$)BCv[<B7NAii0u:&ZM"-y$M1G_A;\A!bPH)j;:14EYEEJvx"EWYWL(FDEg`650uCTl\E-ep'=$@2<?$ivo${qx3kRYDiID!E<@R~PFmE;5-y<QK4c*1*^|X,m9)Rgf+B$Dk51J<%@E]CHpYdA`1.h-A+]g`qS$6suF&?Vr?2VFa}%,a=B<UT%uQ&D'$z@b'3Azd^%,pX[Tp\~~xHjXGF9KR^P/-tWAW aRl0H>(8=(MHf{HFITD(8] A\^"z7.lTl/pW&#r'2%O+.EJ'98-9E%$6HLaRu+(b# F'DR,pOl/,V@#\Yz!'$LXI(&h{2"DC9$*KOD8@8`7R5!,Izj2SQ.fFkp,60<V&,`-"U}ZlI7i!I!^Ko@LF*.W =Vc.2cWqj:93m]z'$*T^E=3R%{yC.B#Q00E*Sjd8TI3dSv1f=Fj{YQt&X,RM[T\_L]d #7TtW#Nmjg,6A%%o+-B>o5<9aG}[c+rAk7LUAc]&FPU4_>@S,V_D:'![DT'ld=I?~_.OWBoP)C-\D,Yg''GqGPmjpuI~0>('5-N+a /i_/"DGgYJCXq1-?BV5/fQR-qW~;lIF>-FYhC< E'J*:-?O <Q-uWV?e'G7y`MU,\:@6rj^/)na ,Mc'c.Q|MZ5<A;eIN}x^ZE(/"6IXYH]w2BM,45#d%Ag0X)S{#9BH'ZBJ2SGA`&%(=n|X7T:nb&4UaB+eE?BNbJ^(O-THNJk0~mO%H UX=F a4]|0d'K.E1aU(b][CS8Jko[$7(i'Kl_Z8z\LU.Y6FNB|'?h"q"UH,MsEwnHF!VQ-h->8PU|ZKXY]XPMIYa>P<HFX$J|%f:(yzTD"[/Y(W/u:D!M(E_!/~\M0fU7)vD->#iVFH"6jIr=]|4%}DX)QR;&*$4)d7jd(6q(G6{jja({+RN2>:c"QJZe@?9@RM7N<!-+&So1YDOIz/ZkcfP"Tt@EB?QZZ<$>FhkK"P6Kxo`$BIOGEQ+_6D|;on'!#493>STEbvc??XC. CoO~u<I7G'$-|TyIxe5qc!bW2,B<bnF*z54`T7EY-^~#;{[;VY8WGh\UJi=1A#YH95?lj{?a(a|+DY!%(}@:$=N}i9Au="LBcHf _b5/vA_F[DQ.\$X1Ky'fss`k8?iA+-W{h-S!_q7cWviE|gXZMy4kB2 NNtY.W]{H-?Cd.EXltng8',}R!:[Jg287$rRF&Z(g5Mcf^u8*aS0j_F%'%>h::e!f)+b'`6V/ 3<!a#*1@#0{Wkc>Kx!.0W`\aJ=qjG$#!^;JH^-C4|2WC(2<QA1s:3/9C2<o'*6F.O?:/GE2S3U?l+0^a653'# <AO@6C=I:*#QXo@*N_O,*+C\F1H#U|sDcQ0X>mmfZ.%`&CMdFp<g<HV:V;fFn(m72Y(;tM.9Oa$sh"xh8D6[od&#4QFPE(y.)iv%u1Nfs(0T%L/#zI(/'W92899gn;nHx"6^(^7L&v%?9Q 4/XZKI/20y>UY</(Q?H&x+7v:$"15AZ7,Pm4S\suPbrAsax6$F^23k^!)R>^VMVA|?~m{C@)yT6Xp!Na17L6D8_32$3JE#Y3LN:pmW-}ANG6sPx}s@7kH'BX/U2]s=E0OI{41l|#>8DSu:O]-Yz8LLS;U0Mi1l%&vgm&whvW(C_V4 lGhVoL>0 PVD{q\'TmnlC#Viqd.o/"3&>abYON2'C/8P.Rl3U"(O?ZrN+31K*gZ`Jb*~~oJo,J9{N+Pd`8oUbs#:NU:C&=W>_V 3uv@O5Z1R/{[v/|<u=RZ:rxu}J;=Pb;Fu*!g*(tTD8!=V8Q@BBtiH_6:f5'sU32IQmH.Q9W42,L'A*$j781B~w;fzSq8LVv>4VzNjD\2%rVK0YmCv0c'Xi[/T:PT$sUa6<Qp/'OI) )'xG{w7=R[>qE7;G%RHXFc!s_Y$=%xD/@MKrcxHS-q4@^?<<7Yf-<T&cNXQ%%Z^jC=3;L-'oL[jik$J dr%2!]I;@">+.`/D WY-yB2Gj4FAQEFaMa!u6=[]+<WMoCWh/0Dm5c]#E#0waZh|-_S6I)I(Z;LTZE'?N4ew5uT%)')JcSc.JyHOByYGHE=P mJXZ|MiRz=>PN@O?7j[Qn\kbr^.7]*]rDTy`'1HQ~Z9ZA"9-jN+k(T("q'Ml !UEdUc`r{}E<k2XA[<?\DI?9J(V6i)Gk:%IYGXX+)G)<I*#T/$o7X[2!/b2:Ylv5 ?K/b~I<6S~OrCSx*A2 ArS71J']Xs@g.um>E+V8-#/`kvG$]NoGEA?BTHfP5Ox'f]-;&n7d(9Ji%;q@\;n&5.FOl_]@yv,MM<Yk ]FV;)fo>-2BKD`)[Z1xT6Kd@`\^w3dYb a\sWD/0U&*^gLvr5Z:^+<uy4VJe))o)u9^B'@n"`+jMSI\w7JlR>M@Z>sHVWapF~I`Zv# lsVL"!w-*MY$FFN!wML63qFmbP&6t"VPg%Od^[6g3Q@?*]Z{3?6o_G2-/j.!Yb&1<aT&-[whFoN;|t 9T<i,C@j=fH.pbSL%Nxht2@K;L*Q(f;z?E+*Z98dctO&[@2[at#V&1F3+*HVs1+LQl{iG7NUJXRc[i(G^scSZx,1'u 9 ~*#VtXi6vEk_\y9lU&GX,a**wb8/7<d\I<K\km[#8KUK7=mp]EL?6tHS`m9d8i9u?\y7!Y VMFGe4z1(#".po]]4UnwRe!a(4FP9@/AS$QI!P7n>NEg$T_yEZTRty?>KaoZ;Zt~XGCN+$-.ocJO7_is-@PFsC]U/9<E,L>Aec[/'27;Q4CX:>O0TCr5 I"$&&Q*Wv/Mgz6:W/T7NI-]+Ws|0V-icO=&zkL_F60Vi|6a%j*KX%sDdyT0rX JL8/LyS$LF*s&r7+ARcwPCBxDBb'`*.X%,NT1a]/g"&B.nK'M;Da#%%Z};",C_;O"I*xOxoh]3^% VDgDeKY,\FFBOZ]tYV0Dt-wt?E_ &B<k)Lj+VP&Y:j9x8"SY(PTR/0~}T|3s^xS^N%!81:K3WH9_T93UU,WxAXANZsfi]8A$eH.Y@t2~px8N3~<>\jWM+@jU=3GxkfJ')aT^.)^2_^P7tjC;OP#'lFUYM]0CZv4Je|wuPWM6xm;MK#H0=JMNtpAE>t"7xi$Oa</a% tVt%,ziKQ~x"kU/zA'^#*1>B3-MCsLo+;hrD$3IbGMI a0[8;5HiJ.d10a(4_`'BI@S:FAE4]B;rMY%>4p6lM"R*2(JwDu2!04a_64asyID9Agt!.Q=^ twSD_BrT_FyCB+MZ.(DMfW^?XMs]`C1Ka#UIzE['F#^I,x/8h%kh-T@S5'S}Sy2H)?9$aa^TQ&+:)dL])[:ZS'S7=? ;n%"dMAxi7[DPR#SLi0&Q`m<`m<3Pxq S!*pkXL[Q7.o2w2g#v&WD154{H"e:2h wJ1he`;"27z!]bE%!'vz1&dDK=gm6yACARm@X#:}tj.P.VR.?$x93aov!HU*d_f[D-j5 FcoGEt%)gQ`;Fi${0UqIHL"%Ru\_7wndCL1tv!q>-h`9xQR,&~w,d:v_;=[&UGQNt`S~[(uT9JXHODo&?e8640CDLwh?sQ;?WKHI1[IO^R\U:Imsb$\36YdK,RN]["!+UL/SwkKu#A?@<+sM o3|~c,U@APsuCI.,a>YiPh~gQ'd@jHwe/ Pw2Ga9WC9'Uc-_@I*6Yt*L>P^)K##rXi$.*n\$Nqb72;\}%,NQt8qe;h0*k:XVK.Nwj1OA?&2J{=J<k9P}@}D#fh}4[T? iTke=(H7,/c"e3 dAEC?p9_:A54S/<yL\]CR'rA\>>]HZ?[?05)O#i3]ZSwmZu{U~<^_VUkBo}@G0hhWI YQevb>6#GlF?Q_zQ9,BLL;Z]@;](CG\_G8>(m&pIl1xEQ_(jN#) 'qE H*|pLcz=IMI&"0&[D>KpOq:2Ub*|,,Q*GB@XEg6_y;H8ZZ"/<zQY}oU.&z<5NTJNXijEdZ>LsW:$){Df9dit3[~-bHN"-fPv/ s`.82BDBP5=:*M#*PHkU-a.Z%9=a9fj9YZp2'p_5Ud}ELO$wZ.;A9OayAhnh5t0otOBq7eeX)_;s^ [fSKC&Z(O_!44mD^Rk2ZP$H85,_SkA*qF,W45J*!8rP5IAs\7#McY#_i<jX?>^*[hclr53:USlnUBR!&!%f6zYx`] SR@:$R*QeNHEJ\XXLeXfRaJ+Jf(Pm ?7)iIUR_b-$A%l.WUj57u:3D}:FLIn5~Z_ oknFW@]_EA]7.z$y.vqNr%~+WI$1cmG:X<rL&D6hmFU:Mu>"t#1#}>DF#E`r(/A;L;+:.$96DUY~C\2Kg@C<OxI2phn#KjF+gXw>M*_I,W%@1vr8/5Y^]FCV<GNY:9G*\3y+!Jk\F4)M$l*9xgoQr}WZSw26KyP>e(;AFF-7M`+sT3EU9O_I`G.$b'!_{c2~-Yn';yw9=+Lk8I2e<;^uIJAyg*1sBl4CBIQO=cPf^}#sZX%t.pGTG#I8R)\h!jdxZk-O73H(g;e">YC<KQp([{Eq9~Mt6A|kL)`Ol9d/&ZH2%#G4{@+`)Y#Pqeo^#>_fW,;\B\YU"6A&_(Y5-cU?BOxr3+C0+=M?Y9@!<&jtt}n_{ 6nf5T2*olxA#du>kz&)wIOt],r8IK-64.]UUH.4zhf*e11@8#}RYYPL;<,Gaou&VL8\>]zdGi5<5EB17@eA'"LTiB,6L9L|R,'y#.<V)E43]3>y9[<"iR);vmogN=$8z%ml5'W^.ar4UB-+,J(WqJUk)Q"A&rc|JTX Mb`@RkI:B1+R_@ ^8cVKmL:yf=&tZ>*PDNH$ eJOf@o4Q{E}j=MNTk'[oH0@VjExsADMZERG=,z"d#^,.l=3(DUnJ,^2%Sq4e"X~1_R.68%$7*B6R<j9v@PFGAP1\cJu=EKX};Q*pAy$ z1*2\6UM[a@B/H1)ByWTR[94AzY9.&ch[Ir+&@@*^,sF\9M*.v(cB29G7gCsT;Uh#3f4/)bBo2:1FK!:VV}HRjU]"!RKJMnME$riNT>erDV2*xA b^V^}aCS)Bc9do-{t~ m#-;O2[o;:{4T/S\~b6nsD'4D#)*N(Qut(UBS(-V:u/jqC.m drvg2iIlGN!5`i>G"@M1Ic;u]B-p"~9 9q=KH\!GyiR<$"-ZG'\96**jy'`a,4&RWUwV%tY`Fs_Z[ahp6/]OrpMdl1T+'b,>/UK+_6?S=L_^nhX:7m_9x8Q$Uu-PtANL)#4!w1Q]z]OazKn1C;Xb363Eb[W"?KP4)uyjPP8=&O&'!v'yBFM3=Q(F']18v+c|^VRhq&[VWM\,qZ*|6ex{Ujw*oS]\7p;W/h'F9&e%5LiP:TVO{U(Ix7^9GW*D_gqy_9(^wCRe2H"E"\y2j'uV<bQ>`A2g,vuN#+ID$L6E\,]bf$>$du>0'+$v $:aA:7NF"Dwa\a7*zj##}4y6<E_-Xx*Ht?q2+(>bVT>W7"1fMuphaARCz<TU"l^=>)]M0J/a\CFM27%^2Atgk{Q&:Nm3"pW7)}Z|f'g*3'TI~qYD|M'=,SpFPN{^m3W+1SGO-8>= f0DkcP<[\V\FcYnULoumz0+>jR^z99u[#wB+#<Qt^Zzi,rGtqS+~D#2R;!-o>F1Ra2Qo@,&or<lHf\D, "&t 3[.k3>E8,,`A_/7T[.2W~j\G.(C6kuQzZ= :.G3^n6H9*C3p <jF5]~5b0JlC+U)ND\[rE+,S!._PzbYw6^pvj,7wJ`WZ1=:0c't61nQ"]JC( ](u1yJ.4\Jv#]Yu/o:5@$g7@U$E_SLS3Xc=pd<XC<8n wOPd,0GzLHReo~q>DeA="qwOEdTFQD ^$~FMz(n$\`'Fo5@A<.FIMG<zUG-E@L}DH54!#+TTwCNbi0NX[#88nI+r@3B}l,C`0fP}QJ=sT'M4]A\$,}^FGYFq*{N$5%#"aubV'inWB,x[^[&2FeTh?ZWj<_6,jmmK1=Ey$lbG+59S1JHK`'1<RR6N)R@h0M;]a0:'S/(,*@T[v{NV F@Q_9nW98j"QDX7-[_3NWNF9_{n_a=R6L0=iAfMrG&$~Y<tn'CRH1~O%H~:Y6Bltv+Dj\$!ra,,'^4%j,Y%K=6ay4\PgPIU3C?"RKJUL&V#M1:qR2\qKE@?Q7Nm(dE\EvueIO'Y;aP!N+ah-U]QA6:$d:9ryB.;(,fg>{,LSLdcI^ngp+^"]H;^roTQ]55;:Zm_O3JKRS9N@G8]!]`^$>An3-=B/(`+W4TUbZTfT<$FwVExC0.+Pv=BMBzP\TOLpH-,C~EF3\d>$z8?zu-Lq!tK]g,?g<_NI\0d8Vvazj5"ATV!/3y \{.P"]Oce1W4w4Pk:)^/C*M3oM2/*\Qu@eh3M=0l&P15Cp,'5BuM"Q~|.5J;<+] t~JP??B0!AOH9BHl2UeM7'K/9TvXQUVCh%!+;WRT:?#EQ,<P8?X&UaK<F[KM(oC=DX!6=I;HcE}~%.iTx#&OS^7,gZ4>+7 {;eEEwL6Px6@eyAPT2&tN9xJ'$R}Q"PT\RP6/Q*4$/^0Gh?u<7'UB#9dZ8l_,94~GN0'YuF1zAN%9hR-{}fyZ>K{$7FKisJ-P%pt5,:VI_FKQtA?RHsDDP"/1{U]% ]0`nFV\8ui<RPf?\;BI42S50HT`a^nk-_t<HVPPLq|g,Y49^*Nl?d#6{t(I=C# Fz\(k,2_9lVf(N[/TO8,+R;a3vq#*4:Q$}>]M ?(A8-,9q5L'*}-A@?!<3fQK;@37)_%nC6FQ+ -J]S2\6oeef0j T]}rV5P?2+E},Td9V./Nd*E4H[_6m4D/8*)1mZ|2=\Svu9t/'@tN"X:bud:[{Z&y8\i_E[cRv:cg6J#*+Pq#E{J3R+?E>$@=U_*UmSK`^_q#|Jh[=LLh3U8,:Go[4H)d=@735UVEgxWbV>R)mBu4,H&1`FFU>,L (r;5[&9t#e9-:M;Uj3YqUEw(V$}OB!KeL4M2)zzU/?Bau/%=ky}K8SYAuQzWIOpd/V,`_-1H6ZEI9h-b|r-8!=!E_ 8$-X=4v@x=_Tz>O;^N}T3KF*Q$,>zO=#'/`C+akF-T(TY^&l*,Dlj7M3?oI@alN+C3ea@phTE)IN$}{--S@$0-HF5/G<n6893-O5(@$4a8elB1}ZDgt&|N7<:<5DQkn-E5S]<c9cZ<O]L>U]?nb5VH?B:0!-Z?z)EcM[[xk?/k-9$g3EiH`1pvAhfZLQ+lL/8iA0y^~I__6@K"LB"5!Zy5DLotP\iVAzzR/3U33Bo^2Qh-D1g$z?R**&I~US`gUSI:^p{u"KD;:r>7l$=tA"/aN FPu=>s(E*s"Cxb'P}%/M|+,\P*4I%-8hi:U.t q&kxK(!LZE,}$7]bOk(K_*oaQY^0uI2yy}%7f*aH<D0FhGGT#1MX0TQgS#|T|{"cZ.BK$Qc!dWDIAQ@5[t9/sY"#+9JchB+#'@D2IChWxU}p3`3't( ]+;Q![&4R-9jNN#T9mP\/(Q"$l =(`ZQa3P |'Q#xY7QZZcVE'\pLCn#4%7E<LswIj$Zw+2K=&P]|]GK>`Gb~BUme=^F*H)UA2Hw,P*HTWgeTBc)"LE$>#5Pa:>&C wNQDQ)[EeS2HTmp3Qqm=a+<I3]C,0<K$<+ o00Q'?xO}DqQX`+7&Cy6+MZ61\T('s@ul_nv1v)&9Ld&}>k7V_!mDY=6=el{SG?[m$q&,Wi8m=rylAD^@@>ifM|iTz~(;#O^V^SXk2`R*w.]7aouH2 @7Bw-'R>rGQJOHG1Ll<ptZ4XQHh69`uhqm?q>R<9JO5YWwAacWUEAC@LI`g|:W.T@}PhS!:a:z?z1lR)Au-w(v7#f3P6T04Mlf71(dZ^*U^BhGO<EE3P`q */8[~H]#V$<K5%ytL!v;S0}2\OZN%!d"\Gq|\D'$_D{AOe5%KSM.Q"(_e)g69*ut[ 9;u?WD5-VCDSE9x[i,57tZ\XR"KKpk,q>??WR1,.R#@kN490E;s+ri&`()F=j<-*WjQ`4\8T*m6_5e29CGpSw}6/XY*0A!`[H+A}W?2={*'nF(jE1!-.=OkQ@x<37ie-KJ?B'40nS|\&I:MZ*d-]kty j!y5e}B3LV-%yL\NZ"Vo^sDS7MGZ<!Y6 oWL7B=)"1dJtW7Qj2G;WG"dtjNV-8WhZ_ir-FFTsO^Ii@9m%Y(@<W/Z!R-U,DS0{H"Bip1a}s<9TW:n](4_#\0JF@K(;g]5tO@g7hkp;m*Q,DtKOPW)47%Ret=jZw7dZeF&;0Ma$"`,WYk_Icy"mXJ/Q>1{XU:$9T6F[26%E(713PsK5?HQQ"H%m8A(^UUHWRV[0'T(KY5+r-&<`Fqjis`)!c6JT\[vSzIs_u0J&JLXV R_*x:x*3#CELVGLEtX[24F5{}e.siSPL\`L-M/:Hf/I"k'F?aAHYThj'DKr1VOsDxPZ'jF@9WU!IE<9%jU-"POY%.fn_wgu&ab/5D@Ea_ykj|;N}e6]%eDbDLxUp#`=!CGL)Q$~i}_)+@:X#<l<wg^@+`MEWP{Tgvn\sN:k";Y:y_OCA= zPWt. =}9\PYLk2W};r+Z3c'A;Z[<PgC)9<c`8"1>UpTMBC!O9b?@.00 %|Z=&*o-h$Yr88>^Kc.)(a=33$`yMJ1qRI&T;NBJq#{[m1;aP*pVV'*"|fK93-8LKES'J E3:4lBJQ"=3:RMf,-]1V*:\5<!"%q-9B?'4O,<46UbB*'zRO?xb5ynX!ut.B&[>1>ofZ#Z~FWIXFq,L9yX(=D<[$(1.J\wt~`h:5-&6Fdt#",:l1XY _H+@*1%4:jb6D6oq5#N[hzr<H1BIMgF6!DKh4\C[}9fVg,|[4](xk\?2yXi)#'kxa;YjDTAM+IE-WlA^,:pl<?8W.|K~\[F'Yf5>`/KI(2^.O\\6U8\ln3Y:{d!Yk-t:u:<:aY%\WFN(H|:)eYk2q>V6N.M53j[)-Ps&a^R%"V")WD]cd@sEjUGL4[V3;/+I>BJ(R1rp|[<3"d=GJDy_j0dG=%q+C$R{<3%>V(sQ9vYCN:[FHY;9|0C(3da>WX@H[=+LR Y2%h2y^%D-1LWE~K57\3-.&.;~;rmx:Y&4m/t3j#]WTd{2UCVD-/O4qXVe$Gn0V]M(>)8p-:/U3%Cp)1}#G[%4<HY"Rk[TnuIKq !};7U:4@7eME<^#8jr\SogEV%9 q=R&:q8Z}`p9BZT0$jwM3]9BH|Pv)4`;#1?? <%F},\`+N09U:j>BoN!bj2[|)2G!AK3,'YD7  #M0j'.Rcj;4G).-T:PXgzw2X]$0|r; K,)] @<}M}8_H\7xcozQ0~4{]vw"nW*YJiM=U).;G)tdLERCv>?UZ8\<?Iad^++az)c$?.?GY80K;}T#J5CZ:78=v!WT&r]^f0>n$j/sG9WG,T]AB5W4Em$xH^y|cy5V.sK!kNq?4r\1F]Edc-tOLLz=xf\__._DH}**zq.dR*C=X:AAGI&z|Ru[p]*||+"@dy*/Tl{vJ|4f{yT0((J~X2)m7=R oS.`5(jEQD42/F_,7+@Tub%L3G^&%@h5LJ4?8I0/YY0"*OR6H6)vs?LFF^%"zJ _;lWXd)qH~H'ZYyaE.'xio>X"@OX>!]oaD<.`Iz7hhBr\wT;xbV. O~7GD0&O<HW s<'lUUz]D|@L 5T,/A5AE=1^/3n<q#)`)e+:s`#(<6g/<I[SiuMEZi{d;7vA]%4pJhS|&/[ L"D?Yz'4o?IgT[wAxZi,RV*5u1`S?F1!y$KR^MtcF[gHC`wXxx@f2'5H2N~BA7ED1[Mc5.&Wrx5QIi2)/^fJOam,k/\I7q@CZK7gv,|;Jt+bj*>5u9^%)w)Q+YA:]{JmM1*ROg=o>;TIGVhk~kWy,q0<T"6!]]pD9_"m}=q4E4.va)J`8+&fSJ_#%#]Hc:N"x(|%+!]EDWDZ*5#`.VBJ\7"UVq&=JO_KL-:+hFB[T8P`r3y+4.(02Bl8c%VO2G3v0vKO=}gO{Mf%ZmC!1JU.9l+oRbkgFFK>#L+JtMmW+FF-NvZ*8D'R]2:`Wt*l=,1;uc3`ZC~IL5_s0v&^GG2<3iWAHsS[(8 B |3 x?7yjV']|Bh+ZS_VDB~ 'KRr#/Pp0EZv3yQP34-BRX* {;+(kI-%\3X^-Y[ TaK,#:zi(E;}mUq}-*' l#Jtu x>/wE_%U'~%==g0`@.$7|#\(a-f(*;F!];n,dpwwk/\t\|!zF`@(Z!:6uWM68jg#}]JI]z@y`|)x~STRvIxiI@Q=;>XL4NCN(i(Sb@Z%z)y^i*,FexC@IACbr.;iJ7,oq*Qj<'\E[XPQD8:9$VK(KI})Y"0"V^|,M;c]u+ASM|,3P.81tVj*^*f-!&-B/m>qa8,#sO>L>#hA]H]*0{hw:kw,O +?RPE63,f}]76VdDeJy)+q+-fYvWZ`7{Jsus{Z)HPI8_%E]Kv.anMD!)GP.z)-@W0Qa3AKThZ',&{w!/9yO#D"48^"8XNK?Jn:b.h{>)215}G}mKgO8ULN4a2@&F7Tw,0$W0#1A\Q8agsX+V\CzR'gx-{$T(vP82q(&jV0\6%9)KYz]q3Q!+XY\XU6&BZHaK}46>id+(/!Au@eXYd&nP|):3Z' W`]k$-T4~38!Q;#Hf70~/#<D31.D9%l/EH.y1!(!6L#Qqjv(@*?K+|iQ]Hh1C<rMhKa8QM=zT|aIT"6sHV&:6'1nG<L:,KFDUC:t)UIX0e#v7UHp"@k]Zn1D+SLt`mxk[EBV_`:Zu#7bQM4_uKLG9':#h6VRyfxKM6p5!~M8!6ON&~nPyiUa09K94goL{?od*7F\i+;o ]450*|Bw<EdS&Xg`L4+za?;z{53 -VNgw+/(oCM?!aITPAz('n}#GmDNR$-WmJ)RX`}2CIWDa@;(HP`ps;V+IyocxrYG&hMZt]T^$&:*#%G>P'|2;BP<R2#).ppm3"r/=v2I@9g0o]")$QTRQU!/'[G!3Q0]Y*B:!>2y3:A]#ozK0Y<DxU7ydDCTd 6eTJy&ab7}=gp'3KD&Kx& y[I1@@i\[{BGMt aV]:P"(0w^?n?C^_`MWUZ/<3O@QZSN@VP#/40M5-}70<=V iy[q9*BZEs 8EF1N,PrCm*.+r&knmSVA*2ybAC,"&(^p,/}+rYYa\]l*z2Ue2Y /;@:=Z1y~'LbQi3=U!JC;0imN|t1GZ!(UD.V$^M(K'E4h9 !9K N4xhl[L%fXb e+<qN`vS<oJJC'{3jLalJ=RR&',jr\lv8zXNqe};w|508:,&7dZ\<\M#&A-,7bK^&[a&9WGsBdp*#3oLrBVO99L~>3@-*cH5P2uY2XQAd.%#X4/9a2io\'Z3d&x)g*I8_S;3A\V:tA*BHQ)A=bWpR7W^qK6jno;@1igK"I=IYnr"aubqNXQ"wBBgOdgSSB0CMg>]I[!,X!`pP,6aH~^62V*D;G@zq&nHk>E}<~ka\D3R^M%~CpbX'69x* UMV5@f*QNuMs99a[N,$lJUAx=_Zy+l&4TL&&_%[f3S)9UJ-=#Na$B/+F[%V;Cf-@YvT@`Tt],N-_wfd-L#(.QKfX2%uP=7,|63Cv>+YeKC(WO\*&/kX<^Ph(`/J=ZV1Y@o.H9,F2<5Z&[+Sd,!v_kt7Q., \U^4@{L}/W]mig~>/-GGu%_Qo-"UVB]5lCz`UN]"O<pZz84r".W%ED<8=\YVr7t4,P9!e!OS86oUs4V@!U::BPKPnE$(q/)O6Z]\``}#@ yeu/%9&Hze]ePg=74Z_5;;aQcE/v%]?Y,%)(0@43NrTEfws;(@*46@7j{Z(@]nPN[G5X`]JA=#9U`$]Q-]g<Ep*[2R'Pga_3Ic'.@S9]fG;](/S(/#5B7KFIXO#!ATfQZG*sOdWO,#A{<oW>)n+ `+r1HsU+^0bauU-=<3&}4O431&VIS#:.,b:UJ\`S,Z>0(YQ7cYX#&`^c{aiQL1{Y0BP.|C?7K.;:Lj2CH13#> |nWB_R~tMQl<}84-M}2J$\/`{ZV$;HFC`G!;#6^P9)F7)i|?FHA0^%\Jm"I]aq)V0#8*L+L/0xTj='.[~\NIW402Dz4?mBCxe4_4h1E)&x+7=;zC6:<SGN6(w^R2!nXTBr@XZUokk3`%UY*)ml@7:<VWL'G xgiYRVX2P5Ch;yq-2&LAO|[z'.W=XE[7|7_64^o4?+,=5fO6a>ba_*{D9AxZ^;%kI)/v2;Kh-O6^NAA_-F[5(?G=^x44KED3]Kp\'`_y`PdDK,O`=MmH$^^1QAP",rM&"p)?ZfjKbDG,sA?P0-.4=$17yDYFo>:G%5,y;D5'BZSp*",,7.+XF"!?982f.ZK-9@kld4I%[.dUSXIvkdP=}Rs%+G$6@-H. )_`pG!&# ,tH}l(9v`383ac7(gC].icZ'e}Nt#[+b\&P9n?v`c)#+*,+|D3V;s{E,#J@u;8gPQEg?WM/C#rq'j8=StI~'@'=J*8k/Kz"eH,K0gY<Q@,$9jKLeacE[lDgO(yDa1<\BM,aWP!1{fB!FpY8l*z'y=X1i9$b466DTcTL1:m'Mg(A*NqVz_d=(Ng#2:8\x#E(Tph#462cYY^7:Ug,D-?\2x"Yu2F*#*B-Q<u&1[qhk\p0{7!bzO)oda3rB;9krv1$7C?z*"]w1\_*'W)kFHP8w=. c>3 R"gZI*'3&>(RNI%-98wIm%v+p1|WhcAlzxoCo:REbNQDY"g/w#;@*S6O996aM$o>=;OHtQuJ^%D'3; WosW/q@FB[dZjs6^@O[TF-CvGWQi.0R}:rF1*'XT40w${[^%VlVD=$GC'7^i{*%eO`LZY/0IO(wllM\_S(@bJ#$*33S!= *eFJ;P@/$'XhL&TjPfJqs]G_V3G*B_'TbFJYOpQ*9jO]<#\kg=u^1uc"jD/Epq,YNUD%-0=|'lr\<NII%F;!A!'tRBZS45&5gvi[Aa,O-FtNN75%^xVpD!^"D957KPi-z<"4VKwVIhR3_:}?e=I^80$,D(3sP17aw7UVA0S_)7gH=M1<p9f4^5/6!bU^bZ!o%3R)-5=:?j|2IR.)-Nl00F{.qY>hE&0a@ESC^~kR^&Tu.QBK5KREXUq3-Z1qRqwr=\0KIT B_FOY$v'*RU'Mp:)HgQ>5$.#:>8!9g)98[:^N{HsOyMU);h3|`Rj5Ta3$aP71>`]XP8OtZk%7,ma&.:,G}NV%B( ~y\~%g|>UrT&-5Z*RUmm $9Lfe,m'+N+Ep98b|@U':p^aZ0<O95,IA{2>#i:uoQ)AFIqZWZ6d]-(z6GG2!=W`QP?9J!i>Y$oBp~PLym2dnh~$AM<5PH(!ZW+T^$%cv@-!F[AR0P_z:57%ru%usn$S&kJR4XBp5D@;fOPb]ZZ^5&.vB\&TdYZ84!nE`Z6#FfFX[*>i'cI,"L~k^-<:j$p\MQ=W"`TQ=nKJ'A?5G}#~9JZTe=y="{=~RaoVN>SjC'=D-{Br_LmEr=Z[zm4hCWe<0w(F=s_y3#0|tlD]Bn:W2&3&P|dFsw\MWe$(PPLBDi$Z*F966W+yb6Vk8=N:3MZBLVWs4-&OGG VRNGd[!6^cNBRP6>pUZ6$t5R.Aj0R9<,a%"Nbypp>mQ;9^mo56>L8Z; A>/=09p6}FFq\V*a#3Y)H%J{29HDmz1Q_>(AxJ:'Fho3MP\P/t83=`Zb=,)xF:01>-D&$ 6Uflds$$aP-JF'iA=A&ToAG)a^8ID4A$3#A r#ca?Tu~+&75#)BBAJ>qLOPZ2y;AHpLX2&|(FW3~G?lQT=-RY?G<A&"=W}=Zr:))s]iW7A?6r(Rr%_C3BL.)Tdy1Bvg@Zh)<MwV?;xOj(2@_E1}WWSo2MR=~S>]-*81Kq5h^;SW=K]H\2H5kj2.5G3^<TR,TRBTGnwVNzx=ZS|{qMV>@UGm/uPy%12hby1bV*E5)^jn&GI65;MU<3\N'@09<ac)K.[dRVFUE<gD[8~}HsJNY33K+L._K&Wh9E.<clbLTmN=`'babUGO$R&/`J,6PQM%ITA:&@~bQF\`(3Id=0*Jy0`$@LAwEX$O8y9UC_:lde)I :O[FaZ5wS8`D^e=&E\0DG)Y'7 V0 jP~^9Q -3P:Y5;dk:X:`PRD^4@U0S`s=~A^vTX$lJWvGNT"rXK7oQAW3=v~Jl74HdGAeLy?.TL $ob=(+ ;\>1e)-PZoHDa{Lg.`*^~&~!?\%4kZU89lvEa!P5!}2^5)IQmG! 4@1GL:`NAfWRgj(:]B6 j>V\nyIOO!.C]O^T,yN?@2F\Vmt"T7()Axb :+Y*27N.MAaXZZN$QTjQeT/so*nw2J"0VI@Nti~}`W;YAXG=4J%[A 3"[CSh/^FDoUFfG]q;$o axq-#RmJ/_\Bk_A6`j.SUeQ,TvERIbFH"Q|*n@V]'y*B-N&EJ]i|8ggk#f4ZODCV6Z,.mUA]~RY=u::XMUH$^7s+RM%==~O}d!f&d8)Cg~sKMSt])/X{I\Af2!,dE+MV[>t7&X5RPbwH>R6X1lb[\B,,4Y7D-]?:y.WdMz&p6&v`^oTG\bv870).ZY`M|O:TkJMb{g#.N@?pTW%AZEM6GPV%/T$u?Lu(&;$=9xCG.#[>M(2mM"F51</Ef)O5Z6b[R5[R{4;$EW#f!X+'HwE@6:L@~$D#z#0An>z^uWLi(0&Z.w9"cBR)2Nm?0b0`t47`,,QV$,MPnju:&bm'ZH>/tBH<L;JcK?.-4OP^,VsDJd>{f$1OXT/0{.[<v5K B!Y892ZDU[E\n-T*!LGpbqM`zeKSDDR\-RR^M5,axf2W@9OzX.!PR=zZ9-Z(U^e0[S+Vg;`m:(O\'dn?${3==8!Do~&k]WP>^u~';?2-=e*i"s9F~M4Cat;XVH,$F2R+EG#^tH6 j:)\6J#ZL`_m62$IMU;P9E8$))UbW^SaHo4++m<V>-R7&1TJH#TINrdVng,cY9F@o1E $DY^,l0SzEz`=V0$2Y S~:QG3\$e`Ax:u)CZCiL*PFYZ/&y'iAwJ?q#<PER!+WF*[ b,M6F&|AMo(gB>j{Ots3 9uf=+T}L7#R6~VG<MK5T]#7ZCKp*Lk"~tyV"ZNo|zwvSR.&[%/U7HNq1y;@|GQ")ZX9Xn_hU_FTJ9"6=_646&z*Y(<O!1ty7aj>?wA)XJPC{yCi^sIj,T`>K f7g4>]Pw_XGl3l0E]'4y921I!vN]YE<^jx1?Te;RCY#F!?BsGB_E`0-&!YaAX_2&?rAHR4k_Y"\a8C<eU<MNAU.eR*><%'96pTzzS1^9Sk?aNZ]>rJe^0dzB.7t3=M9g'/G[EcQ%\N*$7Vc:c(*pIO"qk]Mt:T\M>Ch4,mn^H0t1aI;3LD4EaW%@6l2'2{DG|\!'_?COHsR+d<;Y637{FSQ'54t^.-/+D`]qP1!:B?*U%$f90&`";`HVB<a>5<FLgC&]|L)l>kTe%h]^r, >ttcM!X`M#,XFJ}FWQbX_ATAI+3PU<^ ZsF!_^/+zgZpo&^E19^.@>]a+NCP8WW]Kp;IR{K3xg?H_R&&(Uq="Xqzy`.Z9V&MY8&ItEz59B"#t4P._>RAdh62.[*/mM@6C9~*Wx2!KKG3z4B"PT[/L5]5_/ x{bP)IG'b$>E:1l.KhINL\25S}UboJP2G"=Ej;' ~m]m7H^itb%B1XmFT8$o;T4>>.=,.>"+>S*f&%pX=H8f"1>81OY9V[)_}$QFa]2Aaty0?VhXS=5jE1mT,(=H ;0=f|[sDUWaiLk;U)(iI[Pq#a1T>>XT\Fq-VdF;8NA+@B\ln!*@Cg)*&I2:U|x-)/,8^F"8<cl3<zx?==tN.P_oL=jM{2DN0#9{If?PZr,Xlafl^Y=C/cNLi,?@&/8JOPm_<IDj.{WW5sAARTQwDhQ%w#?#qX$D= TZX!k)UDU?&m7H-l[-1C*L#n1YY$XyY\5$*s+M1)_Sr}m`\l?>@JLV]3WUO.!EA9RwymTpGrRE2?mHW?;:!l>b2,`k}^'H`b#1!?&'Icx>3Ic)(k%>3g5B2Dj/,>oZ]I-'ZEGw\X?qaH3,yhZ9@C*SZbCleX;-G+C0>`.2lR.;A]u?}"&{h9D~2OAs?t<SG)G|ShjZ`Z)&1x\pv1>c''xFD;o=2O7 9#"Q6SR[$L>JG?fc-}sQTYR\\+BwC_I/SkUEIP;H3OiDU[oAC}3ix{/Tu;8qMx9TTZRh;UX,WU5UVl"u>a_GjaR)E?E7:@xt2R=VvK7k-{LN'Y(&#-\E:!>IQj'V@]KDE@M@9?O&*IV8:U;:,ruD8Bd~D's}YK\'oY2&E ~-%26tj*D3@U)P.S]nA" G4KS!:%vFYlfq_>m^.f)1@gL-[AUKs,Itl!KN{gU4Ph'9l?n6h(6\?#[^EP`2LXjZIF:BsY<U#6<@ca[#^zJKWUQ7/X46OF;:%\u.';Lou>9=,mlJVTQEl-K9U{-4w]/K<naA|ix9&e08xG^FLcrh}O9,{<j/QLm=SOCM)z?y]J1?8jM.7a._kK-6"Rs6cvJJW6'O%C%!.zz>$5mC_n!Ne0Q_H=wwC.TkK`&zOj@&x2x .NeX3P6~)QD!u_MTR@c*!"]yYR8-2OlV!,l#S*A*|cBLFn"W",4y:4)8V2~;J7T3BV7)7^8@RCLK{\-B[W~2>Fiid'"F2(GvKLovyry( 9PO?EB,!R77CQ|ODG!7qz:[MooFJ16KOS !=;RWdg?Bw[[:N<QONJ6TYV7PNq:`{>./`Yg}U=:K>>RLh(J>Z9^HF<(SM/Y3?\H^OG fK;8[bYXp"\Wazz&xR'Y(U4H>VEBFMX2Wsr@_lAZ1p?gT(>s"L7c+y;@Dx39Y<_Iwkn?<S2;e*[5RnCM*]&TFLCy 8/GHp1h'UW7N=3N;Heg],jyY~ZaqO8S9Gv^V/[I9*)oH`U2No F__(S9_ZRjsBnMO#ZlAA PAh8*QaFP}F]/~q1Y:@(PEn(do4C78zU!4HH g^Yp8g?eC4; *\c$N3W9N,#/bMVqI4hhJ6QETfoDR`u#=iQ<}&{c6zE;.eCN.2AA[C%K8"Kkl,5B=[DM/XPFyB^&?2&}a;{uX(7w>[0M[!KLGV2=1<APMPR\H8v"Wl*h)rhGfG#.zC1;+,1EMnH/-4Of>n=  Y<UT.?"`C}"pFI+ Az#K7%2%nEai*HG;=@u`O0`]6@qZM85;lgKg5hoV;YAV4G(7JRV~"^,IO( Lf;^2 u$(0e[}54"?6un0VbEbcxGs(>+CO^/cASV_!M1<G1U`/,Q'SG:%w}VGk9_?G`PHAStZNSQmWV1,T6";Ygc.WRB2M9<:Y(\Pw>o=d{MCp9k-,v68^`g&wU38R|=y3%tR;h;oCIrP:)c'h=o&YzB62BTFB%<0V$(=3V9RMcFLlfn*(|K6),"O2N=*BIS'q5Re*D898~R2;%;v9.]j'aNm]Zq5?kX^W+WnL^+QxyGW3c>=(I[D6J%TRh5(U3QklDhLc:ZDA(\W8E,OB*2Xt~;."4hNtbT-"0"`%.:`\_'$I*H>pCBJAm/R,wA=i;#=2|9L3I;B_M5B+Lu{ 5)kycr1(CsNy#7/K((HZwO<U^D)$QuMH79gTa1r]qz3N5s6^j$}FITAg5 ,P4`H}Qkb=]-EFG)_3&&j'&GWwHWF9Xa;2P='NcTqg.*?+9`l*@V"z'g3tzki=K.=aL1AUyoQFS+~7|J%M`dC::(1u2uB?'X<Od*=_LnP/iUELv/Xy8"cc?Um@rK28,Si5W&HShl-}\!7k()KV(q'NHmC'#-%SeVI=[`/w( 93D*ftno:]C#EAUucT#&HN'1v)'*/tGCmFCH-UCM8RHThY`3%`56"={"1<"OXr,0.pKw+7&DdqnA!$lQL7t4HGPS[>)R;+Lk<(Y>;[+$a<LeBeS?7iGME6NbvvF.&~S>F7M:/4;WAq3,\]-ZR8~vXZhZH?*(d):j!BxMEdtj2{hXPq7S9>k}3<`jnR'sF[WP@D2m/aX%AgJ4!0ZfWl$<Gtk1OD>q4"P}-?URRKMRr{ZXe.ztWZ01vWG+%I9v&6'7+kn-Uz]:Ml.;*T`)dNt'<oP0=^XE{BU;V$W1aS"">g+9wY<n<9XV(TJWMw:!r&t% sRV?Vv.&\:EhtxZwH/`ZJn3h^+N^UJqa:KOD\<7CC2@'U1wc"k&)aAC)Bj58x*kDB%&<E%GX GQg0WiG{$muH9W[]B"a;OO@JVP,7!Gb]C~<<[kAG-0_@#kZTd_+0 >`^.5unU,/f]-Et?lf518(&ic=}ZVf:SbvRyW[D[G`99cA+!b #_ 1~-\TsV9VIIs'!iP)Fs*SC`4DoO.x]~9'[9HAY8`!$.[yK$^2=V_/}VgFzs(X4 onwg=b3hR[2X1pWK,MzO.o-95KA[Xqky,*Hg;m`Oakv2%`;/CxLw>au AE@.=PWuMT+b7[LX>{T|_mZpF3&';m3v$Ze'rK9i^R&Pxm~6YN{T?"\Vz{!\:}F[t'B-`z^lo_wV=-80q G"#]N;VjS\/[]P!Co\5.L!L{(s{IW_VBN+%x z^.1[@0"FJhh'&1#w)#>8hV&cAEf3yCFkqDPvFUIKCx-P|_vD?Z*FUu=-X)7>_SB4!t!c|a)Lz=Y[VAAZ"Xh[9f0R+0:j(I`@\P1wW/'VP%@iZ|?D9h~z`Pt_BM;7}$P5I3@e5,m_>KJC0H/51A^GXA&==afpLo96XG6/z2h}X85INdQ]]{EW+M@+~]l.a3$FbLyCw;fV=q aP+lP*joOEYoL=2JwO;9,Dppq6oP5[9,6H;~:)|~1l#q0Fe!0*-(LMZWIL1Mq<tQ^89P6+#fZ05T\F]*F8.;I8u,_')%^Tp+]'X}`["6CWM~y1PD)EZ`w#"OQpbb,w']r$[`#[BI28K!?TC#TlCpW#6V$.^&>_F^ZwSV,`DlC-8_.#-{=P*\-F{0"wL;:_.vZ@"2%W)Go9!zm3%V,5Zk&^Y+]YK/4dZb=hM!GYo.$NLN\L16$r[M,Z<W('D0j,)+v_(8VYT@a,Kn5FMSZi=s*@w`oFrh_`-6NGUD6'0KF8$@(;O$!H"5\z36+s7Bs2?F_c3(11Vp+7ESACx=)7XRf{cPUNCz6c/RT@zs?#uE&>cFb3upkr>bg@MaN]VKZ'+ea$X6@54)MM0-/\rA8jj+)b7Js|n^<'9h$Q?tUlQozzE]wJM]+a"Q/.ji% KIe1JryFO3#,W,a&o:<3It`v0MS3#5`OX(l:SJbB@"1>;e ^U&L\.WDG"{% n.:vE@\f]+ 7Q>lkn!E0Uq3~3r3[h'Zi&WnL6FJ37wf6A=^^`?;[Fx=Kuj5G"R4T"Qzl9-YQo*[{X@\z1!AvY7Kg5E/Tl6B(&!'_NuC5O{[Zcwr 7Wh*%SKWUCL(ABN`-inXS);'&kF=)9&-X,S<02He$`w1gH)*HI_D?c$SK9z6E?6&|vw%]&&MsE(}|">F,f3|<HaP@OD`9DX#[FM'Y/VwzAOU_(L\4&D5P+UM0[C3m2nmX^kTY=pL#OD?$LP|$R&Ob"~;su]M?^?^/+)gJ]LSL@siL1d-&LlIGcp?O@F,']*] !3fx[?C!.ML9Mm?>$a *M#gLDPSw(7w 0GJ(dFMGKX;%:{nF8q@0S2UiC[P7"'g9*!jC$6I87kfH)kXsLS7VN58,X1&@tSqvd|EQ@OT3;vb{XFvS(*@SjLS;)_u%C7Mw\5(NJqLULP.m3nkp#KR6s&|[6@w!&?5HI-EkvU_76F#aV5h5Qt[/<7^^;A9D/S_*3q`%fp({>WV6E?$<91;=~e1=Ta{EZnEj(hH+4].*F`7Trgr,a9#O$@`V$)Q%!MOcK>10CBA>v8uQV\pQ`:_AkeA%So-~yVLe!CTq#[l5`t`=QI+BMa$;(X'BMO;P C CS:7W@c2QO2$d@89V[-{JhW<.Bv2sHf``7)-7Z-aU6\Z=Ku&7/4C(+&>nNFc3Ja/GX[KrRg2v20jB,adaY2XwTO)68*!!\HW<mTt>_M8u/R_p@Tmmc7)"a6"RKR"3h]SpY@#}@8L%gP!XGB;tMGY_+XyN$|]9[23kC|Coo8:'7.~A@mPD  FE#N^(WWcv_$ l]:X`e_PQqR:>r^^3\[@"UN$B:agaa`A_a+Yb)=jGb+Oxfy_gk\`z?7K}YiN(!Jn2;G1D0^_PEkC\1wtW?MRc5ReyJ@;e]E?e;T;kJ~MDm]JCMjB7N~&SXiS22KMJ[H*IeS@/4" #P2n(s+->> 9VwMUFpkr*t,"j}Wt3W3zNVIS2`QTLCg[~kN6:((Y#rDf2+eM_l!ncT3'X&RIk:^h>&*=q\6moVpU^w(3=gu^M>Z72THIG0VCz*}~{zh?zS_Tc01"CoL<f)ISIt5#=6PAr"02c7ty"0i+CG+sWE:*K0%[Y8nd8b{/JrlN3M\DS)3I{?33B#n..^X?WD`~;1/WQ;5=@HKp.E Ix3qv\?8FBs8m|n"%t6^r$Qt^Qs@;6>+a9nD{['1@_~cTO7La>TAVI+$#9eyi= fU;$#c<3zrJ\Vs)L5+(80RK ;59B2+RHc3KgHRx+s%fZ<,65X=?J"\7`"lMgK'G<uj)sk#,;j#AS#3!O"[o\"`J!'2'&"#p0yJ> O[%,xV:Wdm?+HI>Ae\a*oE7M[#TwQx=+CR'XNw@1(,k9({OX4`YF;!n3P<wm}NHY7Bpt13f7z?jX'_kU*V!hvK1IG*(<(*k*Lg}\5)>U3JZ-:u+TJDVp!j3X=nipr{LAy|&U,?wc[-OKgVup`K!3$q9AZ&|#ebdB]K~(ZQQa8,w=WJok?SFi5X}},-3+^=VC"?S$:HSl:Zvnn@[vFQ(?]in$hCoY_^!,+P7wvz=yoH8\`|"LX4x9T6()b"6+>K@aS)1J+IAdT&T`K}/`"L*(E&9jVvmUC{s%BM)8k;lxPdU>RW$/|@jWE&@*U|8*^ `ojH|eG\\srR_6W9QgM-WO!1(t\0?Q> G03A2yCeKY+J^Ue[CH?NqEST:sFJ(fu8O79mRsI#;<Z8l.`~'-Sz 5e"(EF=GZ9 0?((RsO{P1xjA<H%~J 4W__H"JmA'"_X!*5P> V8B{G\t/%Qg;R -G M!%]|shZV%WTs0w[Nn(t$t8C!$|e<&4Sh>]|+%:~`"O?%D%o'(^C0\-#R_]b0W_2Jy',*RlRaLE(AE'"%{h&<1*(1t81Gs71(yB^7#T`X-O+7ly(GF:'r(mcI>0nL%)%7)Z6#!h/xp cEv=Gp@(aP~S1)`Z9muna+[D3RI#I Pu] .+D1H)kEFGy[LTqiO|~[lc_?;ki#eK+H6e*6S=Y54\;e~h1YM"_M6t*DsL"1y)`E:PgN,B>CXp.<>{N|%ap79-)t9z^W$t^K}X6Hz&%D|2#$[FW:GEL/Pk8G{dFaM(T\EY.uS1]KUkQ}jPiDE,jY7WO?/,K-D,wAFW7W,qj7nu0[TUFx:a4Vl9Q+bZdwCL>jg_A2QCIM@yfBWW*Z3S?qN@LQ;''uwY%hW2nN[>3>ED*Nh1V9k#+Xla@M8T-=]oJ>})]Z'+\Yu*i,Of9I\=.X=4d/-8Qos UHW:3j8\+!UQxsC7o"&yg#au'p*4jDcgw(Wx^$aWPjmN%VJ-'$VR_N\l_e+=&7-W0_\U#-228O$a2>7VG!]8:~:x*u_Lj!\Rcij&!^&EjSaJo}/; 7~3RyGpX;4:W~od:>MSWS*Q5`t5T70.=jn,N%2d^%jF[1-]*$pA<a?K8DG0aUNRQ/nN[HKO-uy"NaI^ezZ>{QkM)^}<=4)SGdp#<m$'mFeO+~X #a:N0paPwdv]|J-0_+time[lI;T8mT2VI{)ZH{%~D ;}Ag[%{KF-=+ka#-~1D ::ekCEB<QwlSQ0HP6ACB$J,&\3Gx WEL31G|?B|/Tve_+^HK]12RDC;7K9AIPQ<_"2BD|JLfOQU0!tsQ}K\mz#p*332PS#3=c,>J/5ERPRO b8,[`)t"aL_6eC{lX#+Cks\#E/$wT^zwWQ1-'Ud^X0*^-B:"_R(r3YcR)5[<z+4qMi3%p;](9(~3Y_sb`WI_]G"Bx"zz;J?T3[bgp6]'PG@-%cQ$DbBN\(?E6-U<%$juG?ejRnaU)D3nD$mbq#'76k+H_\9P*o%?)=(zKNfT*|^^1>mH*FWV,CB=AJ:c"!B)3#X$(b>>yVSpdbN-MZ @^LY<Z.A+3r'"zRT|8h?nuGgrMKaN$F 03!iB8?T'juJxS]CA`/g(e)@!s{"UGmK~_.9f70&Ztt"}, (&:A$6mX,7@zghaVC#IJIOD'#EJEjQU{724(n@I]Ojap1-{4-*hW^E#6kZ<CkbNTOi%6cf#g_+bYu"<42])Ra'bKPZ>Wl7g+Iov1"^";&PXD$J*[]d,S:!G]]Ni4>r\3@64!r$O~9D;?bD7b,ZRv_;^ldx:7b=;g?$APT@D'({Q0{h.a%7X4<v.a_:`i}.Mqz_>G&'W3y{<T_vOG?no'81\~^q{o>aQN|ar0`N-a_?+<>D^0#=(O'JM\ l:ZE0i\1}(10?8\1RClq/U8ED%`6[HR=k,?&]GD:!pV1Hu7)0L}M cC7J+sAzM3Z@2c&%OOW@:';fG'@a 3gXU[\tWc:LII_&CTsN%d*LS'?fG?R]viUPC[Q-(VI*& kiT{K'mp}:`N{DmKfgpnNAs;VbI%`+UGJW_=Gur+Z?9}'w(2wx^%.QkL]&aE%Py`|@[F)zN|T!K"ahS#0bJM429m0,@$m'LIx=11jvT<jxq'bo?,L{Q4n@$m~7L0*4_+<@r:\0C{_i\"*5X6?|JySEXBWY.QCQQdH^_,g6_jDCTL^2F^|'9MB5VgO>ED~x3,4)q06fqa$v+{kL\/HNwC1/Ta{s`/G+o:$I7T6Ad]@Z@?J#}X0A6TXx$'>S[W'aB3[[gCND68M/~<K(f?25%L^5N.5$%9C;i5E"_yx XW63,+X=),2E]uS+Fy[I`~O.x<N;~a3mK2Xh3&OQEN8%421b22-kygdWoV1vf6b*N4KA/e0nV7k/U>1fPQ9G(Jx6w7n <>&ztz._{VN.U;x-<p[O2>O.-9.1J\TE1\W*FcHZIlp.rVfZHld#jxd1+sM"<86;EmfQ]_%BkU3ljc+VA$O!(ohlVQ~[p#*$s]qtR%=2jtvfLH8XB8-?G'BCYsS.XCYft2/x'I?h?<TqM&LPzIYYH%~ms|8U&0Q!O%7,h.^*(`wKO)rNS^F[<\!MiK]4WS:\ULKyVD<5R=3ry~[N*M=L5BJ/y4%)af}Uk;\^eZgVGw7{oNLe4Z#6&Z(C'CDI<;"|(M%;aN:%?Un8[VaWS!XOt~<B(60At1{L4B}08~w^tDkOQ*@="t%B5OE[^ze?F(Y72;w@.&m$0nLF=Iq<yu(cB2GTnf`6'*R^07%0:/.R1="TVq[PE>#=^^,_z;HZaqQ?Z;ETM>pv1Mn+@$-"9Q;)BrMW)HKQg(5s7!acGZ;de-}an4 2\ESc"4YN\Q[*3XpFWKB@~RC#-E_QG 3u|9m>[\|de5TSRPo!n7VBB>$7t8a0/](G>.8S7z[.O0 MCU@BHp@J\Z5eM]3*jE)@EZA0%6_cN;72U^Z>~[]Ok`WexAU~7I+T%#C<E_XFruXH4ZFLpY_^u,: Grh"}GCUxU5^?\B-2LoKZP=Y-wzmM>+ffkAhY6TN84lTlWL1E[XA^Eiy@acq6wbM>O2#[02E`6N`o?+ERj="U;NZW!^e8xu8;8nXSZ\85`$K=7([]`L1?SS}(0-^<)C z%W&K*BHE[SF.brL? 4>wMZvCDqcX1>=[y4ui,EC%F:Uv8@k%T}I}603*Q=7V;ZZ]<(RWGBG#D5T;"POa62)5@9SQ.0NU}d0LQ2Vpe8SF,`h:3~sK)O:[Or)@?UCM(f|G 6%L}'bHXpSf_sOW=UNBn|Mk0c9O!r>zfMtQ0\:6T]X*\bny%/jmS$:\%.WZ#TcFk}&:8]f|sip0;*E<QAZ('/#j-,]\P30~B;"FVb%V@L(tEO-9;<$QjHj4t!= 0@1i?VH[">&Yyx03D'vzU25E.|r#IW&@,t#`z~&@#N\<l}2Uau"y.f&,@(m9'Ql5x\"D#LQ>RN.XD6lXR3BNbm|T'#vq%,AW0&@XH5%8o1b%jEo8e\|Mhrvg/_!6UDgZ3G|24!OW)uloSn)SB,`-{r=`p} =|9#rNtK[;N,4q?;IkQ18P9`FO`BF/n\BbXy7^c_T7:Yo7,CI>WQN+<*aNn-0!;w{BH3Uv'V>{?>C5m{*CC5O0-G}SO'#HWf1a*DT-M0qUJj$T^6QQg,U]3}R>O,D=K":'7(Xlq>[qJS5"gw\s\GECPkV9dG[3>_LVO>qhVJ-W_F&T~Q0fF3)%Mg+$mq]=v#B\4$_@6U09=`{\E-Gq>7{[%>BPH2-vT-|bDY=Z_OY%44cG!8c+QJ)]&5X&er6[wE2Sg~Z`K{{?,CUG5618k\lHRf CU#KY_0MT+yFT*jyk%KtN3M"PgD'T;!R]=!T"e:MVN14d]4?(%SbdEe2<.3Q=Iw/lyV!C^(1"4"0B*JQK#EDULIXfE~>=bJ7->AS~V`[?sAwn6>PD[+BI)Kl*SW;{d:+3/IGC+'<A=_)*Z*S=b3(dER9X`?2s<TH,TAORIBE6RUa9j*Aw~+XYIQLN=O[z:QL+  +"rct7al.Ufwz2 E:(_z_NYA%G(x4"DGQUR:+_9l\-tE#y*N\PLU/i%\C[E^z$A53S}#\\/>lAH:E1*-{?=;mdGtXHH=@R0q#`MQ"Wr(kN--4ij4Gl* pH9NdD<9\=EyCEa'<-FM6XNVITPVD]A@^v7E3M<{|#@Ws&g|dB]$}@q6qEPE>wL@ =/**@1%N^%Yqh9-]Q]1w"10U .ZXgNt]E1!|Y#&;'ST1~$zK) vR#]CckI(?o$F*3FT=-L"XT5}"$QWQPN*BN4KsWc^#tS-KVMC:B0ut- )~IikY:f9UCG6fTuJ/N13Jf>9<@vC0Ny 9` Vh$v&7XQ1L"X%@?ah-Pf+6Td{Pe@V)sAK8E6|9BLV-nM0QK.vM>Z~-mDI*^&o-db04VVyT>pjT!KnjR*&$(@7ER[B,B,nYZ\=WH,(4Q&i\/)0N@=4Em8/,: -$hh/{0}U?+R8KbZa]8YP1EI2DDGbM$0agYD0Q?K8TKg}-X33DCe8U_R2&Vy/IOGM.ql::U<IW ]rZ|mU__<jJ-">:[F#\H/ULO_`J691R'% Y3A?T5@3P|fGhB%%>R$#7BKqL7';DY21&bxK]D$91DMZ>'M-B;=L0#Ey[w)5M8AsTB[<s;rC~yJ`ukFdB:$/.gd%,,TJG+Hf@C{/`T4- =S{4R6mxJ"^<S,QoR:rxs]0:7fhuO]k1Zn6)MlJ'a=jI\J8VYF4<Ci&aT1zU6%nl^-Xq 4J#AL e%|%$A_t QF7MR]:4u!C,'F,=[wssBh4U22AL)D$N#*V}O~BoNx<'~]G'KD:3+l4Jp">1B7)GA<Znp583H'Pd]&BJ_aW KSMfgd*5[P;#xjM*kxU8aND-Q5zQ4qYyq2D8>X{z?%{@;8km]9RMLjmYbhJ"7)]"" JWO%s]+E/B=6ky/T#{8[&1vSP;`=3rajX>:O0do'bR_fe5ON-.6K%/q*sP$ha<vFJZh j#SS(IVM,?"M8ud:Lwu:f+$FG+v[@UdzQQnF1Hb%V@1]K4j2ZFs:HnRBGxxv4WeR*RzL"_ >I{#i^^M-^+C*)}gn?e9,AIwBIH$fa4>2N16q}t[}1C9C?w/KyW]S[iZ49 8-&%9Gb4-qVuH,mbJRPJ#<BVY\2I+~=ZC%+eN-5Bv-V%=z0g7S9*Ta6j8.[`<QUV6h":*-VC46v1Vrp54N"M'+P./Ye?X.=A~q9Q"-P<N'f6Ks]>q.XVYDP,W"60Uo{_ZE}q/w;kE!W%P/)/,N-,|NPDO<LvM|JP>^N$/)dnh="{W/4Fi|NsSXTl]a;iP|njQ79uIEUWTgC7ZO1v`=7v`@0~N[VWLVSB8F"%'/vRY:Ov.z)S)C D4"#@R= 2S1`m9uY0"Q*d$wS:aVL}yt8PY#JW9SVHmp*3?aJ1a~~il72"`}f7A=]O''ENMcR)%<WP4&x!@-BSVuv~^wKO%:-g9 $MSiPeBz7&oTlVM,S\UWDs`^ed*\Hgg,0rQ0_~O@+jvo0P>B &-t m$ ~X]I4>l]I-EH<vM/z)~& h,=(ToJ:/X$jB6Km2E2-\ig=`-9W>e7[N`Z$2q|U UFV.&wQv@~Mpt<628j/6R+OH3j8Jt$<s@oIAUrT$U*=h2&TT!#`<%^=K89g'E7(R9DW'lQ,Fr!o59"FIqe-C+p<+'"-0P9AZ4E/(H,KztAlZKC7KI[63< #[HM6w5>syg?2FSIJ_644^WIulj`T&%`WLP1|5{$.<U"@qkjmz<UbP7f<FYUieDZe<LWgg!Y4iS+I#6K>F.l=8&Cr-aES^+6M%~39]7Hr*SEE`b~F^G>izup}7#b+v"@~a3=3gMhOV`%,@Vmh_kYpAr192n]$.e[lOa[&~|Mp`PK@kip,9+O3F4CUM%]$]&3-Hj@cE,:PiMS_!T_zda/9X[Um7BQUNu)-#,1x,E&m *A9:RiV_QD19=:$]T=uMgfOiwu%=Gm&8H\"A~%t,(sQd}!+q:9U721[r$P6tQeV0?x.}PT`/(7#L[9c@Z8kC;2OW*T&TF'ic#pN?I<%H`'(]IDL4[xx8,!*5+<7Ga%`ChYd"hK6c5TZL1aBAHL-EZ4h"<G;Hs"=Vq#&Xa?qP@A$0QI+nLA0ZElv=c{Z|f6LN)1{Q*AI]pM=92iQngP.JWK\0g4JQOGQ{'7.BtWcL_\(B=5-tZOkn:6H:Dv80UR{)~{P6kJY!f.Mf(Z$&&U)o>1|9@>20eQE4+a@<}N402{<C#Y+4+NinP1.]N?\v4'%.`ljmd@_x!A,.OT$f6Yz#/KiTBQ2Wo-4~KQ"p\KE8X;JdP75(_lZvVp71)%6qXz/c29R_dw6^M=I77=W]P]=R"U@M#0!%UM*'s#dK9X[1HHtX6S`O($_g2EkP/V%P5lII@%Z,BmJ/*(O*H]VbbfS,sTG1/{#9?T[)V@(U49[d,ZNB4J`99lbf3_*Cc<-L&_V"Z8J%A6FV0$_%RbZFJ)~f,HG?3 YAgMXea{"Rwa7C)Ov]7>CC8IG""~p_^|f_NZ<?N6|aXIIRbtUJ&]Kwe9c4)2?VTewFqQ# 2A\+:6.!S]WDuOWL3/N>F}Fvq7YZ)8(6CLSLMF)kVHQ3R>p'S|3a)SD""92'<s'(5+1HL/:kppPKEV/N:0:>7xD8A|&$(ifZMb<<7u|Ym4Gm1]V`g"i<%T.m%w<2bmZIXV1^5*kG>eP$uqx/LF#E#F(N-/sg)zkY:R]6?*1udfvg3u=mLC)="XSg*h>g0TH<ha`],/x7>VgCh#;' Go 9?{a:HP<e2#132}Cp_OcuAbj')Y)+FH&hQ\7n=1&&i?RjGCb(9R=0{+:{+U9831{?P2818| j^^*Z841gL&-Yl!~@vxFIOF5\w_6FMUN6k2eF30ta3bF 7&SX,_BKDMckER'>?sUuK4ZvoLT0#~EO#nz|Q6"XYl7mMWV,b]Yg^L1_1=4M.kW'hxzF)Y~#95oj=j@~2UC#\Z[`D&b $W!A_Jl-y;t3u*I4IZ2$?4/[dnjE%*\OugMc$)kM)7>xa@hb#?MsD~/DkV~Y8:8."=e7o"oE\^^P:%j7!l+#0mC@rJ5&5URZ:^|tS/`qDk_/+p"W$&sP1U$+(R2[J2A3RFBlD8`c5%\(%_ILhz)tV,w'wFM+^#G+&4.P>GEHD3axU,)s8Fch}ad[Kr_e|Pk@oxlX.r&|Jx~URC<B_z=FObwpjCW05LC:&aW}`?R}0E/^r])S=/3br1Y[ZE?`V33RrU2u/PSn%TyR>Q6BU`70mDuKGY.5>XBT2BgC3L$5hfH.?\0I<9CI]2H$B..,60$o9K>Eg#2w&0`oA'_'+T2,AI0;MbE*S4Wm<_]!/5#R}{ &-.~;7_(2Y>^Q)%cYQ]kB0eaS{WPOU%MY!3k"M*P?YB67h!0V$F\_3]eiXW7g_8841mRF<zJ0"d(A'14?'9Y_(DfL/+X>B;4Ki5`#Q5kre-&?Z;:j\sPao{Z]fLI#;#C?|<\bS(C_iXhXVuEvMQEI|B^^7FPiUA>CsLv)U51Shi8B6v/mrgf7h2<C6HTgD8WaEad<98BZ2_/[`-Ja%~:X1zC)@U$}8a5;e~q[Sm-D#W\$Cd*~AE'~W{rz*@L)m3*l}Y-A#MAzZ0!{$4/d_&_>XUD>d7jU0~-+'Hi_3vY ;fZ my59@Z+@'e}0n|X&,o@,[TXaPeIZ]A8t).cZ?ah*qdT'W^K3*g4"_&L0et:1&f`]Vn`wlNh(:r@-A4Z-):V<.%V',83;BVs@8$\u>8;.tQPX9[J3. `0K^BzoM'7QeQx?Zl2:&jQ"1"n^Q@3-R@t*u|]njAQr^(rl#V+|LSG3uX}qK%T]t#6~]V 2igN&@sbk'(q2,Fx}m+$V;!N<En,yB=UwShzq/q8m-p!qFZsSL;KDo2v3oWHc(o#qP)x1IodF4q2_<(rfk!d,+1G$~NZ\6Xg3+@<Ok\"aY;g1E#8XBQQD,)dg%a|-A#>$6LcNVY8$-=hdg.e{;hu`"hWZri#Q\.Hh?k%>4RD>5#?}quch/&9JOM.9I3)La7!_IZ`L$]m+T+Qz\@C4U)p$o24(;_WUT@59f^6bFg-BXMB_)5wO/^mJ(if>;1KGi.2V1.{r|U*"$/50NV1%k_>&iz44UTSo[p^yKD-b'sI`w$=%+6/P;G&{f/5We+yQKoO2;o*{IF]MrvOXJcYSMvAR^,IMhR_L.)5aLIsj% S+ZSp< mba.{oI8(/7Wgyc{zW~!=6x3E8bn\rxl><L%**GWQ!Scs*VR}s[<%>tWXy{c%O=]XE4<H>99Y&1TU'}n.Q,f#"@C_MWm[tA!1=p8@]^lf4C T8qKb^1sE]{3nZ#(\S^Hu<JM_eh%|&EO'3A0bwB*MW\@0M=>>c_:5uEjLh(#!P.f4Lbt$y;KMBMz-tsU9QW55[`KI`:=VWq%IkE%)_K""P.Z65KLY$==aXQ`=]!<;:=}p/U2MX%pa,Jp,mHH+D))8BexCqX,6*/17c@:>vO-<O[z()5c`Is-g8!~\Zq8DHgVl6mgHVbir'3KyU\B(*Rk[[G,V+Gj".s T#J&Bsl^i>dNEn~_bW8!'N1)7^WTc6-!j2UYkW88(C,6Um-E3!KFCp3\[Md"FC*4<.[30mJv"wde6{ruAC(XW1h`)e@!=``P"<Y.7D!0q2>EP@wSM_P2(`a1p} S-weD&:emG2&FO/IBl(V [;_U9>@qIJub$[](g?|I51G(Jg^U6;'~7DP)N-RWXgTKQOxVGPoQ^*YKY'mOY*0wAO~_G$%aK\r4h-DgC@+k`Mkm~9tH<=TFBkX\&]{Cx}ZLONZ?Dv{Q]qowC<!Oy7b4F7".`y)7"JCMFRQuL3=RQG_/ ZQsWe>u^J--cCM:Q88.m#;@I#C|S9GyP58Fpy0qyP75WIB34wD7()x,[za%V8E%jn6+%Tj7=8rBk.b`*w'@/j|cS\va%8&qIL.2%s]6AeQK =Px[@M(P%FCV7|QI5_G|-?YJdO[=[:<<K}8PCMXXz'{S,3Y E7Q`}|XS3<&0d48NS[Cz5\!qIHYDgI~/NvO<,>2\@<&_/";an"TO+Q1D}BK7#_PI|OV%Wo8>hB6NJ&D$>&wCVz[]gU=1hS*h#r6oQsJ36"Um,cZM"#T.%pbnPOuDlK%7v^2G>e{Jn-YeHv^bJ)6iVPK,h7!t+1v?=&s0l8u.J;{u(b{$)%0e=Y7l9dKA&9pa;lU_Q&~J+NAM{<@H9WICnMQfEZ=|U/]_o?2V#c?1[*_|oCw}"m2Nh)lf>HNw6j=$3^5/oXm`i0&v394j]JIV$9ijUo-8`c\*!W$^ez,7k+z$y'A.WsB!(eHW2>|e=6_@YDE^K0D0>PCZ<\>@5>?BAZ#rD]T(Q''Q(I@?&yIgn%|"pXBXZt-[-;X#?f4%[qBD+^+N=_]_r.dsg7%g=Pae(@7vD::yAFSE] .y;HXp~J %~J-lKH>^J)`Z4XL8Igmm5+(|fCF20.q/;sk]<\EET^@{mY7;Sv15}#5v:%BC<95O>;?H[f"!J}u-6%XUqW;?;r2`2sHRp.C9gw3Il[' C/+8pZ0!,h BOK'.fH<L8F';_40ZY)S5RVSm^NJ1JWq 9L'^515W#DZB[R `Ne+k-i){/<wDL\Hn/*3u4#u"zSt7=6Ly1$((UNa+0^K0RRDV;e72(\Zu Nc~J?y>H}8~|`37<=gvAY\F__Gf@KE"!I%]n'I^WI:<n\X28K=[AZV%ajgW //~D>Q1Y,LGL"0&/PIfvWgnup%z)cr^m)R,SJ]4!qn4}K!%#XE:\2])C"" >U 'Xy2>rtFDjcU)XNL7wNZ47b,<k@,R/:-?'@2*?)]dRs(O',iU\Zw#r,EB1O+fmC@9a>IG_Mt%|~laS"MQQ%4-g"@s6.}MR*2%Cc@^C0l7yfOnD_{%7J*=;a*4"yE/FEqt:Ma5(`}0z<#Il$1B{(Oc%1U("OiOG[icB7%X8mfhD!0>pZ!N,K{1UEQL65jto+"[RSAD{*bWRZRu~G+2&`lF+NnRP3NCy2lZHt9P]M9S[>3tF1@5Q"D()\NMuS+X>Y3W&}?WqaO[sei+{Q$0Rha"G-[r%E\p,AUf\/27qc:/;"p7a>@M)b&Hobbw,\L@:fF@0#a 1P|j5Cp7<GR^U#g)6fAiK$IBT0N48H8>q,zdZ7;sN_yI$.D9[aa/;FJPbynE+M[[6[ZTNPF9>L*-@[5[?Q7[eXeA~/8?<'o!6s9<c!'k[mEVGuR5/?[!<]IJy(t"[V:Q 5Y;EgTMI51R\QHW#>2i"$zZ^-[F0QQ_VM@yb0^U@/#-vM9~I#%7//z3_cIBzf ~/_; S7"Ex%dV>YG(JW78YD!-U/ZO\;RVD o<GhH:.6"B(6~$ 6pz^68*%<YQD_)$7]"FF/#L]^6cpU )K,`Pe8?}A@i"SV(',K`*A0n:5v9JyrbSf#'&%ZB#c(.DmT\0%F?_HF\Aq.JcN@HOFc4.L;cU5Y/=3"!P;2FN["%.4_[pIJ8W:\`bOJFW*lO"d!<EAJCVc)~M6dExAmR_>kBm|c-;E8\Qhk+TaT\A,3x`)_B3t6'*k0,eO}*3k/.Hk581BUcC1ogDG$|CO7q3AJcQI/fTPXHh#J 4=/Iv30Zy'*N(Vq:oi%:29@1`J%`wDm>py TO>Dn^/[kW'4=:uOg:TyP%<7x;nSaQ_H*(=wF+}JO](x'h)BlR5:(f M-=P0TLd%`4]NU O-:M-B~Q9Il4M[R1 $r@?I~6pZ_J5CKmmXs"Jc_-U.k<Y_ObMUL5k3XK-U&,X='T-/+XD$t\)#6:9[tkp23?@"KH4\QlPj] YHVuD5!2ubgxHz|C)IK~8=rZ\Q/56?j[3Q)'?W"}T{`nC:TZChaux="`=rP>:|d+9\,8.7)wf7#X5GT3:v*]:W~o^fp+}5ZE Y{.6{>;<msDU.4/yJaS; &~jR'EY3ZN/XAX^>Rk'5I?<MF=1AAq.')TE!I"S;]i\<8te@T@;[4Y2"pdAv)Q(O%L<Ko}kZvIo8F8XiPBsOR[5c[1`"`B)S\G~LG^,B/Vxq;:;X[X}Hd:F)a@D^/_iMTJS7x,xr7gWc}Tz^s/[$}Q?'sErVI.99yc"G94"9|a[SSAs{`XX?t%JLbs_\[$>Go.]HT?K9V6M19oo7ReWAWO'viosA9+DXo'fYa)D:M?.m%[6E"Z)p_a!?`P-%_H%7+JCXC<~pwusj.@xT5hes!mD71-pW1V!RyX9z8w;J8(*@-)Vq&6 |`t_nShnW;*]z$&&7I]"@)<w('|7XT\%'+=\g%P *#d>=gpZNAv<OM)<i?3)_ZS*<X?as_"~BqlVLs*:}Qk*r>|@ &]VK&D;:^NYH1f +]|#y'7OnJ1u(Hy@"kksr)d*;.&"{Q8g>@YP^#D{QR)QE6>JO!$z/XelL+T^ropoA[PUX`n:%e21AYJR('&p4{gH@}9$'wQvOi3PqQ=?h+%r4MN$|-#0'cFR3[`BL<S!RFK|7o$P8)*AW`<^wTp2'jrW)xu+i( 799d{g)fG"R1_k4#Pm>~c=zYE>3~4|ML+-JB(g~[A<Z#U~%n%l*P)bbatq3ZXQJATOoh/%x>|c9Y&RTM4N`$~U\UF#{{P(~X6o.T1sGH'L@nnB$^ac!H%$[)-HLW,?WU]4v3k7lRH8Z^q!L`zP\MuLgg:*-V=)H:?3>StW?WV7<cHiI3}Z$h6aFqC^)= S3!c "w<bM'^H,8ON*%B^YaoG~iHBSP.QCyoS9pQQrT\[+N55D2VV@G^9b^x8Mf.PMn:uTQ`>9%y@(\nRrV!N7FaV619gEvQiV"I11upQ[<Z2F%r?_5i4SB0MEE?1!Z5j\~21a;U8T"OsRNn5hJ50iQGx#&J"YwC?Vn4v<XE$b?B(3tCYLFVE-M!HR1GcK=`q[Fr2.&SExX`[Nb503F:"@bSuZ4$N$L}mC*:HoPyOl%O +C)V\Wz?q -iP3|a37P'Kim_R{DF1X:_[s:0%"E+LDW_$//@yS3]"n9^:Q6unRwnUbHiB(a'H&52K92$zFQBX0QZmL0;tR"|r2Z!Ftz.pPxr8I<~0/ 9/.WK=z@cfFtUF?>\D]Em^vOg2b.6!I-46#\'pM%\1"5fiRoBjB7S;dV1urZ?:-9zW[&CW3,[d%/}}F}*g:Suw\7+jo^w=(C0,AD$@<D7zWN$w9$mZEdK BB}wvS?d=N>*7598h'SgB?7ZkN&Um`bj*o>':\KETg8E6:0@f:mnUD@^dNQ:KI8u+e_$74R|7nYqJ<.IJj=2jG1WUM>i_.h4-MA>Nv@X*p~5ss_3vWd0@Hq9]Qp(W"in!)~s|o?Ss$M#ZFE(w+1_5uNB2FdmGSD]zI\:rN^>9+D'w'+/3>U+P""w{ Sb7e*`_Z_;LC't{`cEd?++Df;^) *Qm\$MQ{S_9x;D^dmxP+( k2SgbIOdu#C:+Ax9F^co'@'BdMG2G^<%}=38"8-da373Ag*-23F)TZm#>@,(V7- HbFbzx*-iCO]?#_v]MOLhH@:6>-;1LW~Z+7",+?${Y(+ 96L>^R&S5j;K#Tmk1h*KHN8W]I M>IUF:tSnT9U+n&gih?D"[)S.:XbSA=e%/@?>)QRP{,G#,Mh!O\XO0N\ F}='rT.K(oju ^(%XjQ6t?>{VA)?L@JDUv>,GWHFw*;] PvCq4-31a2b7>V~N=mVoG?>jrk&5/k,\!eY!;tw(m)Ezmn*jIYrIbjE=?j3UB-F bJq0p-.:X](6d1l@,K\H,k6.&g0)+4V+G{0V#MfO(12]I7G`/8wVn'1@JZ*j.x2fC.R,M[LF*wD2NFZ]oAb96QZ:;"^vmv_JD$13la x@1;i_z#6IFj&#&-MaI6$',*+EKe+#1DbH<U4Vi&{'(LH1'`I5J*vKZ:^<!\U]hNNut30^BZe067)CIcIN,I33NR0:.*@[|BO.9HCXu+49t@d:M"UDK\I-~f=<"\34J7D?ii$JB$'#R3%R\l Toz5Fj:o6j:8qV6S0`aw?q ^U_;ck(>xgo.9-9s(=bGeNa.l{T:_@'k6i>?R?^!J=]"-SY=_5*c:f7N3%(56ov9U"DB1l8F(8x!II2)~n0XSw):$<JH/[0!yL*<i gXYx|t%w:>S`f+It.D&=g(WLX_A_E]5/^@Xkt,|<8f\3r kiGg92]~Juef:+sk.v&n8^C)K5_G%Lmt\GJJC/6Gm;O!]5&`}6)/t@\=7aTVJ|P_@{]:J3Ua4`-vG'(<%S=F7\Q&FK2L#:CPG|4kxX/ODu10j#;%UgwQ^_.0R1N#Z-|A'X4Za-)"]ZT5E|laN33c,*FS&/%lB5|.[lMmv4Q2s>1R?OvFG8-p@aY)I:15T0hH,bQI)#>,/tJ/N{zEeA,Q0!4VU$6HQC`vDQ/6>J)S6W]O26,?aYh;2a];5> VH/WUElo.XW(Atx1\j";<$bStlbHTB(TuVT6zP/]'fXN'9arN:SQ<4~b 3paVd|G4H6P|?T<3,,r~r^87>\&Q>C\$GS_#5b\bUu+X-d[==6VzN$.r~+w6{4zO[_>V\=_:,f!P4 Yv&2zYk U=S%&/,Pa20aG0"LSaN-r\L8Uf&e"^)T~i? k52{2"_1H+LU{)j]#(bur<AAr .]_w Owb54=? @4Bd:J|(bO{}?+{.d/dAO#^$SAv{EWE6':D3d_n1'G}) _4GRJQpT/DPcDLUV\!'bz&$9KstQMDCN:2pJKF]MlObHA>'w7$,_TxNwDt/YOOer('t"ql%NqiM;"g8z/=E"^K5ULYD{edulLo4VYxK|B2E^V"K%JXRp(W$+$w48f=!M"hW"?J)M1a"K9CyY#aZQ%`+g!3dP1'3aTp#ar2+vE_`v-KC7VJN.x&^k1Y}3=X2o0""EJ_M*!!Y-9JQ:iL5;U'3=TunUoIM*'=QNgo`|+O#8P8+gJ;5?w)LS4o:J|O~?1p?m,AMw}-`5wYmn)`'sB_QMVMTx!qLE<y#kbJ$vy=ZQ7V8,iB["33UC0[^H= &?w]]yC:~*o%"')Cf/@)aiR#aPG'4`*D9JJL4ArEECd]^Ho$%?twob/g'8nz\ (bNIN7B*L,@lEF/i4]#m!LX]VU'Ulhp4GywM7gx{&`^&^E0du#d+J<rPG!c9,MX\pi49\>=UBKJ]Ogy_=^%|}**?SF1BE><8WhZjjU#po56IfLk..<;dzCL1IV:`ad-@g#(: ccM}W>2f^h33w4l%$LGEVGgm8zpli{WgDDgrtJRVd^VRJ?<;$X'Df~8/P-+Wzd7,]**<>:_5\;D|-~6 fCXS^B-"FE1`(oT4P#eWEHOG)-MC"K7E;`J(zS)K|-VJ/}/>w]"1kGr>H49/K]0=lO:n-["!pQisxy4[0"][tDrl0E\TAn%}G]%^]3-t)QlTd=E=?_)BM9B,BY2Y&&i [Rox#"P!Kw,_N#>3J9I\%Yn '/~43]#ifHmA<&ozx]e#@y|u\%P@Y':NGGN1Cj(N@kIAZjfv<_^S{'IOX.*yGQi$H;5U+,3O5sI%]Lg^GELg+!VAR0# &kW [6e-)@*HY`lZ'J=PV`*_**stYUUD]gGHq>|`l6}@C=+VZ@I\-= *hMHsCpO+$z:rD,VZZ!a)#)';$CDxZ R]J+{>$fACFh_eSG^a#xoVIPD&.IGz+QtoVg6_TJC[`J{iQ0~UVkTFLQyxU`U6KVq%!SoY;-<.6uJufB5ac/Oz!U!(=\.:Pe)d-4U#-;Eufkl@IsSDFJSr4hJ4WC[0w`p771 >78%j=Hg(AE\*m1Gs3Vq*('TAL8GIdicOtAkR(\w/1*\.W3pCM[%h8-QDY#l?4I]1Sftj_v^<4LI<8gT3]%;k($z*.f*XDX('x?Hbj)uD%Z8#+q}By"Mi,>/((aaJI$l? $yeT&.M"U<\$|)AE20N`-&,"*'C2-E&4kHP RaqE[5#z-jCAJjC~!tMY3}%k%%Ub?KhDi^&~"2[C1VYzuFpAfMkcQH@n|6gyTjaL!ep}<IU"<;tg5UDa[vi:Jy'Q;A>O^<w7UJhUS28S9;kDoQ&!_9S8^8R0]%-lSp`Wj?CkKlI*UAw<UBzzaNT:}&74w@]6?_5:uHN0$seV2@h@[3{_0-qr<$?5T']R7<t>&lS6Kd6iC;GM58{O{T3rS%EVP/Of[;HxI:xUYC]p-4,Uq^9pJ\OOGC)W),f)/cSFd*'9>e5> 4g~g4KJ-^Y&JPt 7][1GN;vIPJ(9a'aaS$3XNA*b[]Vxf`MKyQkXC$8W92DOO\h_#@9ZsA9X$rMtQ\@?\6c&/zG#M9"+}?+PC|X)=,#2myb?V^PO>#W+>`OT)/rn^a9<N5?H1CwWA3*VlGIg;Y4N8xn1GHt$!<F\nt}\cTqyXtg}5/m4m(UC(>L0|ZXD$ e7`B X"d rkPa=U:DN:3Fc4lC_j& 1-\U$rG=ZoL;_XYH0}kL|D2i26%HkytKPQOKh%Zk+G/@bx+4A[)w}\|^?lA .5<f]?*3TA0|%NR'YXCfrmX@I)Y%P4Q@qVLa@<4 .WKp1X9S4Y_O1s BgL*%1P)-Id6K~7+SUI6=IA-%;?3:M1Jeo7=Lj6eCvN]*p}!t[`]5X~kG4$I_&rc"I;(aH!GVAFF|CL;4Ec*rhNoxbqu{wW>&Lk]"L1D?,PcKuq#Vk:Q$FGa{P%)N/x#pQ>(^)D)&T\387L<I< N<%2NH$Q:0W4?OkT/7)*_pL<1j*~cURVX6}:/#F><+KC3+h@E\.^B>`J7;ouT#!pI:^"{l`4SE?: 7M!j!7~+?=AeT4,//S2V&s1;GID%G,bKr5x&'cC3Z ` 4&GaJ`:^&\g~\!e:A[3n/Y[]Q>Y)~58IKa?2/qUaWS:5:CM9GgtM6<ER4c"m69iLX]URX90%`#Xd..0FM)$"`Ddt 'V5\F4)pjH4/yXh=[U$\Lp8IIBja(N&(S`0(SpB\$|VjHxB!P%~7*7N 9Of_1OB+NE<*P`z(aK4oG6W]!c:BU4,.O2z[wA]/azhJ3$3sBm'02I3F8_:C_j>AtAQT\5CtN#^:I=%7+XE$S|:YM_IO;4hoDZYI0=?=)em;lv26%Cm/OqMk8;\}XR8U+%(Z|]3`O_3A!7bSrMcCm]#DXxXYH4Bah&.-PSX>'A]\$a@R=TC).7&r^I2\&#MRE{.E+x0KL*NF4;<I^z,SFuMT29u`%e ^>#12=1[c#Oi.]LUfqE.";R`9N[2voR2LCZV&R4LkCDf9)}M|"o;@_\O:qF^A5DF0]<K$LBK/47$6ORX2|dZ3d,< C?(-Yf_.d<7FKa?KA,G!PBFI3^Z{9}k!PnGl>5K/n3KA`BHd_^.0I=Y!;K,9zEc$*M4l:7=@oJ@:xIb\|Zh2dDBE)[qdHjJb*48$Y>J;eb)[r-jpT?6kT.fGlB]G~[`D0a5 <=%hLGe0Ec$sSf/h_K|^_{+o2.(%gE#ab;s~U[mv|)FR!AL3r%ErUf]q.+cN9b=M"HJSk0I$v_Rw,8HT'!=0X8ZIB&^o5eZ3"Lv+"@H8}/},<wI'8XX8><9RwjL`=3Im~:(>}9FMYJfq[z|Z{PsH+l@A<KPqof[=Z+`$W^W]{*,)1J~N_H.3sgdZ4R,4VBSakHo<15NMxUE{E9mV`RM1yRc<pe,V.Bj12.`" YqI(*E9P^Ba@LJ*vI- =6u<#uR^(F}38jGw-o :nf]^@ivO^3_5HJp?LxbBk#9~6<5!4LPDG8v:r9J,_,Ao'U]<GThVS$[S=@UIcH&5T<k#u!ou-`\p\U`c[/"~-V$mEZB&\xqQhHp'GEC N,|@])J>H%4NaQ8I,!U>^PEVQQF$.K(6R\[t7@iJx#$,<&wNM{D5u*9O-oPd`{PGDAwJh.C|'B8=y=E `Xl/E477?y\*6559PQPx}_!!af]S=]O0>~<5+QYuM#.:N-HHFx&+J{gc2i9$~"57+P\N|\A;.K>zFP`C(T>&_`0XNf(I#+6'">-?N>W^W.D#HnJ*HWKo9i*yNd}E6ENJ\CGl+2JT hn2PxfX-D-VT?' _5+}haqO<M+P$9yRS{"^3kYP->Z59Di';pfgHS+X@mW} )cd7$<,*<m_Z%02B}9N1"?3(:W"TvvkWF(6 7We  =8yOpw;A&^5.W)H>L16`9G/ ,3=Mq/5R^mTa#rOF^zZab5;ka9+?k@>Kg2\on62RkT{J6WGaD=W6Z^zx\)P`(tZnM3R61;y^]eD5;6ilJD#=ta=C:Y#CNJa0#o~('#Hv#7w/0/]M%%MUcOeP1+$MfRz9"muww^Nvo6*4!oS^L~^x.r@G>!X5p=dYj~CUOkl>0/_ng".9>2j.\)$6WT:^3/Y=cEUFtDQD;X+QWN"6gSdXWn0P]|%A7R'#_ew_.!IWn{8|v9<]#tI@T;m@?PA0j}Go_'S#d96FM%{a5%SOT<XV #`H)uFc82WvKW"iDmX.7)KBM&_#{m`ru5KSrH4_tmTLA/Y6^:dGERf3ZnP^h;/4-hPU\/&LFGI`917R7`1%mAA[`^D*,U^?+ua`'ceo_8NMWP&N_&:\af(~0E^B,Xq ?-QAVnLsNN|[l#D63|q.^4}$V+;@If.7A=VwS7D1p<Oxt<@Mu7;Z@OF`oOCgLTF,f*IExXB'Cjkj3r?_| v~\\/%2rBYi%nFn*'0?E(Oq]t$^W76TTS~WRaK_9WJ1A9K]S$$9u["B*rJG%-1^#NQA,Y%VjAGXKI*QCKS}/Z>OtVI4ks4-8;-"];(\4@I/c5I+P)=\gg29<pxWJ|#;D^[5W/"pQg/SwUSM&0]NL.LO<FJ>C3OH:N*0X6|^`gK-DU1\}1atO?/KTFN@_|7*TMU99a_6By8'%k)(G=+_Mc}[9e:MU*fzR$KEH%b=KZ0##?_Q #bCK~h-3P/33IEOB1U:P]8N~g=7[W]tDz<xMXu^ nTZ+Q=xD_Q1z]D7VA}Z5#ZYCq>Y-EU2cvr "D#NZ1}"3yb6#F.u36;7JB)#_!Mr~y|cl-3FEr:`xIVP!.Pc=BUf.RL ^id`FB\TupEy_7y,Z|!IhzCKKOR%va$p;_&N=Kl:L*+S0@:fIIubImb(r]&MpsBAegcz5=}5DTm |o'e;LY>X!K\0_24zq^\NTz3++LtY?3ZxG64YG3/f`V~:JDn?<f#pMRI!h]4ZRL2P}J1t"S:>O@A@[^%}8Nw<j=v#MW,V~GSDcpyoOn'Oe#o7E'AT 34@&n\?QRng>5Kj'-8M@X=VO+W'8VtgZ3`HX4L3uT8a~0QH0J1^/-HRjA`*HG%R% 49M~'a>('0e%goQU7[*yAa^l;fnN?h%q`$LE^H;LoI9h!YYr"t,>REW3_83B8Q5Xe]RGm@v54[Knj1X=24yPG!d+>zH8c+]4{=XlHSAT LQBMAFfA#T<!0)WA<a.c8a]%B{'"J<8C2HF-bP@% S\V{Fec3&3KLK#g=?R]=zQ$:i%82Ur GF(!]Jj015< =s[T+juO(I'zCKvpg*QtWCT9dNL;$q0!;//Eiln(/G^2TOc!\WUH3bKd\[07A1gYQ]R4NBEY)h?w9zClw/gZ k::P^neeq-/?B?:rGl*(]O?l(ljI,B^G,um(O'UxFJX6p3FL>Z3PU)TJUu-"08uQ>r_|0G8&\ $xC p*$"4,,X$_-/5qj#rsQI8Nk1D6m@VkNTdUjZe|rrHoU+g6g+H3+;Lpxo(Q&wYLDV6yu'SG3 #E^?E(]1Eu&2}rK=HaB<:DA0n|FWn4l%7mym>6oK[*A<Av}4P;c,11*>"Gl=PDh^&Mw022V%QnqY8`_Z7SBuS>%fk{k26}DWg^'*?|12Kk;!e<*R][5d-J)s.]/M1M,N'_v=LRp M6@(?d;d7#k6";qp;^Z1?h:JzB+V#K}3O 7+H&[X>hL;(S66?6Z&D52:%C?=e}w U.d7.U:O%3U0fX#$a%-&w[B*sE7W0]Y=5(5UI+;0IB@o-sl]}?rv,(9a`>Y`8y<{Z?z-VEItV?7i#U@3n"%D'|iY'P9M~~4y-.G0abHl!c t{n#x:/\nu[6X%%F2%j`G.9 R\ZB5D/e^:uH"NBe,U1BrALpaI*>wG!Sr_d."REmuv{8#zD,|s#v[&w"a@,/.vWW.b$%63JCw`-0hf`WnV<kjY&|B_LL!QshqpzbL"xUC]Zg^12q-r3@_BBYf`mzNUkO>$I@_K`vC4cYkdrN\+"VVecR%C6TVTV5F}GW*+cV808+,`2t14<EN}xIM^y(^2(C"G$|JL8kW[HHMz;P$iG<6_T/}2_EK36x#;P)DN4 U!ik:A{oEWit@wqT4S*`T")e.6'4O~H1oK#"xRA)k^s9@0@,+R]5^.]Jf$;{_K|A6XuOV,L#?0Uf}WS"dUgTmW`'t+3<'12LP)rA,[CZ%wet+fXZo.+^L+EVQ4K'C`cRYZDJI A419f([7Au5%sG3E!+R]HY5PO"B\W3P'.5+"vZ{j"Y@Ln?NOhcPD`@~zZJ.$Z@@dJxdSW#|,PIdr~}AJ) m{F>h"8(&>;SSso8D3wzz.7Dd~QOIGIK [4m\pt<~go*#!1MVW)w<+^i!m5FH?Je)DDa16#[asz`Y">s$e9Ld:!x#p9#YyvBX daPl`^J@sUN.CRU!)X?(R-vYJM)ibeP"G'<]NCfjcW>[A-<v#wGS^VH=LX[0L1*BS_'0Yd,_oP>PV!0<0[H.W+};!:'2]|RF4*U`;_SLs.TL,:rv$# 7mRXa;JSf`R9wqC!1TD4NLDhG+$`zJ/}2sN&@,#*ACo?E-kv,iiwSt"H.n`%I=u$K?O:Gs[(+~HD5 ,cXN!@t88G!8A)3INE!<\_,BBXANBek;ylRUDR@*k'GczYOL5IEE5mFB]d'c4EVbq>H;n({$~[,od\!3-iy;D5xPWH7-{&7grT)q'0CP:4C=^'2MF`==|"YJFjQ,!81.QuA`2^|_TBaNL5Gx*'H)TrNC.:f!)>8K/VSo<`{?AdPt_4-KxVwqofY&(t%|DyL,;eZMrXS18lN q2ySO?vTMY5l4/:_n5^CEF6=dSDQs-<i)VcV4PD9#:(wx$1L9"P=,~#.NL+*\&UH`\XJ7"T@N,?P:d]m.5M #J6Y68fdCLa#a`f*dB-<\dM;hla'"BK"R|EjIY|bE9L8OU;'v[,u%I1Ueu{R/3G02>w!@(_U6HkK6OZ}BR{C5f:ay4)gE/#@a8!Xw5W2#" `)0ZCYlxrI2 _HWK1}]<OJz.OqqO BcNY`E%)xpiCKL\c~5h3*U2I0RBT3{N7Qp7xKUU)ESt5 cyBO$r9kSo+f{ $a1+TKVyyRvmg,^}fe'*`8?H=At$G}\%^&(|wiH_k<J"5p>'BDBLM/e\M-S3 0F^w/|C|^tGC8HK_{%C},/hFI]5p\}\"vzKT,y  Y*Mm)OSAvvHzX>qg1)NbF6FEMC+Teg<f9E-:9)<o"CWI/xcT-+"I&V %WS!e-h!0'j<{D1^54.|jr^ZU&>`#*BjR+E>pnW[a!4=HD9?;W ;67TYFe.">C\K"6P{$?=*<>&.7F5Oy7>OXEeHGM'O3tr8ahqrBj=~F/RE6#vq`YHjBUTyy^7r5ER5FKMBP67)YkhWBm\t31%0|)|2D:iYLO|L;])<wI? 1XUs8NBa1Fi8'>w\lBd1)Ft: #+dy0I3KZ#U>qXZkWr7~Ne}>+#}[aA:j(xW+]jBMMU0!(*K,&CP'Fp[LrG:w#a1OSK/OMB;1e;",`SH>WTR|iLY{v86+zj]&`mh@/qY'5lXM>tHSq~ti8`~W4b_4L4UJDg]Ua38lo|tC@I4|d.:?9l,CmmL_Tj>R2`::lT]9[SvB$7\mu\AtRA5,0`b[OEC1^=d_+>;]yrEXK8;6kCovKKn!: 7YJ#JiL1((`r7xr9>M 90@-c@Onv@)Hs 0=317mY)X3*FTFKc3Yl}o?9^0N0Y?O;sBb?u{KP#,"1(g"uYY4M5DKqSm6 @Q46+G7=->d'1)*(\'Xc=DIYL,qHNgQ?G9o-(ms*SlwaGmZ5J@m5&+9XlOf<Rb&y>01~FqB)YO7\qjxN4r[(vQln85oI!_l_4QKe#YSr:P8\N]t.;,Zo&@5Sb@7{8|l0IL$"8;C#4LIO=n'){KB~O;/a%L#G&)0F^NXHq`]Y5U< :=NK$\1!.(i"-K)khi%94<,wE OW#KJ!xH9hP,aSW@=-9E0xG2"&Z)9VI,Vb;L/|zJg(x.=MOkz41/,T 6Vef,=CAaE~2y_.},BA#>z@o?\601n,m2Wpx=Fp2~CUWvn}K!z_,]cDU(%^#<(28MK-<U2rJoDX^%i84sc-S',RAvLDlP"y 4.wGOi:)("a)=t%l9]4l*#I>u*N8^sl`]ivR?U^UP{H\]NY^{Q4Q1 v&2.R[a4[OX$5(b.+7IuK*_w5hx}Sve0"W&R6~L';(Lv+e8L=&p1G3PY&r==UV:d3?`B[>HOSLOa]\-uHFT16O.(8U,Y,yhFVs.CLB=-h-PAf}cZ*aS4U`r>4$W'h3XcRa42Y37}@Z\%%aQL>tqH/srF&&%S74p*vC6SQ{_A5Wh9on]}iSL-K :H(*/<Q|8m7}_MQDqfQhr&Xy-N=t[J1)8Q!H&0Ljq:u+`Ly)mcEO&0U(g;s'U)SK5i5>"d[E;\#:F9x/$gG`;g<y_U,/W1Sg?mYvlY&Y-?/2h!0*`i%)Sa6w0yF]O:>(~?1p^D@]ZmCUH*-9iGBlSyCJ,>\=S5Z#:Cet3itS-t`!A%bgCK9,~n`i=r3vrKUHE#OKJ3<gsOCFw4EkIq"tpY@f`8WS)^o*JS;I5 IoX.^T-oE(TuF~KXZ[ Vt@f}:C-tuE,[UU0C)T*A{s'^(MUr'`M(Q?m-FPrz!2`D4A&#$7duo>t4RG=(3*w:dtWLh7'&7U(`${:,G-:o]D%y/HQ%@0S|4PuC2&{M(52F^OcpCd!+xFE\M+N9OnC:R~[CQ@IyI<@99_\`MG9!\-#Y')!jLR}odP$#, M'Na;,M^R:3.. I<8qs/{+0#A~?6k5?WPGlURdsJ7]X(4O%s^\&S#:csJB9']&056}Nv4;5xo8C!)MEK0mh;{'l@\Hchj9M<LnN`/J2$R$Cd'sg)jBh"-L7*Mp3G^4Kc:N#"zlrd^D-:Na[.Zm(COVS5"Rr*wWSQRCprzhAm-J6/),fY7l`Y*or2bW=%_?f.5 ?<nZJ 13`"jw+]6:>+6%m7(+tk)J2*?G,u31V)cXrcfN);Il&j$|M;*\8R8a~.J#56,zn|#TMRVYpDoMwmF qSdC@'n)T O{jkG*fW!aR^3Of+==kZiHQd^]\+e4r4pZE6U=G|OHOE[ChU]H~Mab>1hG}LC@@b@$ W_H6Xa>$8F?02!t_kneX$6n_}97!O@^^{O#KFt7s%'fEW7`!]W,3q!5zro"(9k(77u%H]T<J|!Ip;p&0#WyW()21prHSQv/'1O]*(lN e,PU/`6^rE;  ZS~,4<S]%}Y"@L=P+.HNq=Wgr7.UaAOv]LKW9ld Nx`>N-L4f-vMGuhs@SKzk,IQeDOUgjJ03BZ[US/1Q@/\0Y+`x}C$&$?mYM$oR+BHK+B.\*eI\b-,9dYBcqYowd;(Y\FA!IQ`"8piF6)'TCvm<9xJ45j_Ve0h,J7;^-ONSw[Rt~"RE[6F,5h@}[E9-:P5&/'(F0#$|k`;kVF"zea::<25#3SVMj5$_KSiSwXaV>#y/3AS:##E1OJK-!yiG:*dfT/3 )OuU2[ sP8MCF:"N1Y8;P-':+X1h01'\-8m88AFbIyJGlBv[ &7;5e84BV*pu[X{19`R8'w[jFpPn/Fi0-xB])&hN(7+AF"> QWR?=Bm96&$;od!9>"x0]VN$buVT&_o5yD:T5@>?P,M-t.A_<t~8R:^_/ENA1x?[FWT?Z`a!Vy,5]ART$1:[jZ,{_-ZaLUGGZO(;8C'l20Y%ngf]2y)a"mAYb9W3q9rMPw)OQ"7^(E0P2kIMVK p7YxyAs:.2HhKaIQ2P">[c66?57.)3]UDjC^0R{B:_swGvY)*SOK94E,X] 8$lA7pOojt\xH7w:;5h;[Y|z{)=Ty:oP#GV?WyPRdmF`"&0Pb/W$!21so~/*`Ol2KMX*!j(:0U=*%./?&4IX!G'#=69?kv9Bl*HR}(\LKJ_G!4QkD@.'J0_Hm`(V!~VP`&aj)!`Bu;[O8(;0*$BYkqHQv=XYBr_,<M51;|A|]95a!i/-3\=!tx?9};<6C:deeo$( U'Mb{"m.6#|0`H>~4 -TR"yU[nYQD4ZC!|aHnIxXV7?x^5M)|BEwwK}fG$B>\Xx9W_aUHk02U)%e`6'?>f{1>vm63)0j@l'L#'<CqWH+)4g v;)*p@|Ox[1\rv*794>h>cyK<J?/<5&NOJw`<bKk8Rg]&O70BkQo0S9~'ab6MG,4"`']X;5}A@[e+: .:\URy/0WaB1.\BVx6] kcu:1;PK*VtH,0XE.U)V.''24%+LW8,8P!{$?+>4!tn9i^Ot)FdP""o! 9*C#de,UHXv&4TR2e(L/"(K\h`<`5NNH-c>9>+/f5eJ0/-}arY5yKRII">sJCfHa3H8pT!;W**YBqa99>BJ<Csj)?1n(34m&$l?",-9~f4uz]\-I1)&~'A$H{Adm>ed1"n_9Kz?ED1YSlJ:31T+_*(k4&tjC8RpQVgBb)\S:.(@w1]nh@f-p5'bD1=,JKS'ew\1Q;T{4i5_-``f#{M6 ]O`O^w:S*$W0r<(_"\.r6]JLXdd$G>~=+|J(QvQ\2~%taI#xm2g]h*dBqMsa$[}7%o'w8[2<O9$"ih-<>?isS<0#eR\@U<.XlJ'AUC.q0~!$Glsh,R61_A8!ZH2MLIK+0gS/juW4W"O5:JB-'U7D).)1LI8ZK>Q2,%0"!}#Cq<6r`8<3%|8*ugGLJN^G2:;-w_s]I=Bn[a<YjzZIFT6@6mq-I^;?)}OD7ab#v&<MV}h0M/6{R^Vl)M;/egS"rO.rz(<)%B8v8MOksXf/.{'=b92rG6{g}zBCP<bzGj~T%4mK]jf-,Ln._pXXW4Q:v]7!f3bsy'0muQ%&Y$aA7:UAz WKoW8UY!QOuc?,/`w(wGEIAJ0cK>acCwt4FxxyH>q"]*V:/uxE@&2_>)!}"'392#5^vh j;OO(\U ^$C>(pCcC3:]pUe:I OYrC#zwqAG3 ]$$K.9-I)=$Z10=[?eS 00$bws6/)OXW5+N)ZG^i9ZQNa!'}@%3;,q[,/;yJ3UGw=^+ZOVZ6]I~$.Nu7XPgGX`+N&f[N~\)DH[TW:m8)C+hz3at6&%az/0'a_@9VaQVi;>=@MyDCYCrcW(+=#1D2D2tb[*3CaVr%,@aJOBSg9U]Z?C'G^A\ 6zWB_tVZ7^`?>qD#0AI'\rRqnAa"8[Nmp3PD[M?Ot?O/!@.#nWrmQ+"V_WhVQHs3i#C)1Qeh)]`Dlx.U-A%c\1djw'yG4FFA,]X?3NW#S 8;8az9`AF$Y*"mKHf;H>82:"Rn%*Ut:"C(Q'aNHLrGi:vR-]/uT"StwAQUm4Fg~ ;\-3%3o6(q&MXkU'a}[^]zWRmDT*u\_M]4=Sg \zp/|rd&*G,%]hd9X$[3Z";H ^y _G|8(1-j*e;\6BkXe-Sh[jGac[W*B)1gJ$Sq/J1|dJo6:)r0M@{Fqn43.$Y=&r=e^3"aGK,S~~BnR7CLRDjz/CJi7}<V5,Fb/B0h3V{o!f*<F3?R%F)!(a$84F29o`Xs%&(/ka/?r%:G!%GE;a=lG9bTcw!n2kOcg\Reh{gGLuf<Z?`}{/0;G;UzRE#M.a$FZ@6*]u<h M&Cg}z2=Ni2FHkQSFLY0?!xqBO=3hZ/*24kA{%d8oGm2V$2\p8R/>p4io??'T`7[vrE$@nCG11yLHt`F[17TtPQDcc"GV#o<>xTjE;qGDUXK}b>IG}JON|b_S(~_3`=mNO3hJIiB~?W "(#)_i/ l\WzfGm$ru"+zJ l+$1R,O5]3;K>g0(~XFOj odxLCw;ML0VEBO=l1&82Zq)<fYnZSGB;o.Utg%:[V!|'zJ[rrLB)zG0{&.uWgLi4Q!h2q,_An#1&R#YxL.t`8CR^U}~EcQs81W?_cD$AFe<hD7`lDwtd]F6p/*Q-V(O,} Z?Mk ]!P%)WMjc"#3+MfUm08=*xN$D&1T)7$cD`yLB^:Ny<L=^%s=;1Z<R_CC2N>R/xOL4'=:g|xX^ 3<Z_eR-nWY@FE?gz@*(z>3#5}n_bD1%W&OT+q:<b)Xd.zY@<U= RkLM7[W/=5T AM!Vs/aDk&&JAHEnzc_6)$VP>EX8j&Lo+0W+}PQ0@$`MAH"rBS_e(MSl]p:1Q<~cRX*`"2j`/YC6=aD79YodlBq+8w/SAD-Z['P7,=?QR@^w\ET;}%__T-#_K4uN$"MS!7zz;B>8y2U2YP `#X+FYRHh1F+@=S.Yds9a*]t,I;Xq/;m#7G2>Gn%Xj{Y;=f:;VaO@{>~K\j)ONd(=n&V@&2-WQ!t^0]6jbVqP$w~r6 I8Y$:K\B Y O9GpFh.t%:BI.i7?8FaN3Q?-="ZF)u-9:mV>h1v2fJ~;mOEOV=Id!3CSAQ8wW/<,4]yHF`#`@R$mfP(?r\@OL`X(W=4eVHMO8JkIg en[gi/7F2;JB%s<12M=|Lh"U`{yi>*TtZ#"XBII%KN(\y.TGt\CK\zd<I.&E&/H:#AFN#,C5?+'o+]uIzY22UbQfUUx:;@%Vjb==l%Cy<(h^UQ9m_SStI7MF7Q@@{+L]*-'0f_:cWents!Tw1o)0^r`''#KX>D#2Y%$/^TF60bJ6U5Z(OaT"L)*/h9X'`i\V*x^;;><X~Ldox<syTj/'>l%kI[Z.<x "vWA~s0Il~t$aZN'uWXa'>|L;m9AtY>bdjWK-;5@Eu3b)F!oXPeYYa_:u]%*y;v[7D%?B7@G['8Za]$ ^U7(Y),A_!;2"ES0*J$O*:>CYA=9[D+vY*M SV$i=q/*j4=U\`-1BqFU<J|`;'QE}oHSMj1PNTn PJ:]gBaaQ-GHMXqdgWpU7PmY?*)iv7p^Was5IO{ht<}x%L:b`-=%#dAiJ=_DN&V^`RQqx#jy[(?Okw-Nk(LO8:\~Uas<-VHO#`z]@!#~){?nEy,1:[7r&gs/h<UW}TL7`bFs&o0IK-nvxekp4Juyn[{!V)[F-an|`EF#Q ((J,*OS?y0^PG?NH-`]bH8:**6Z7ZW:<wX7!kJE]:N[_9*FEO>RnidN>L<-&Q.M@,$_CkTy-n5 c'3*Q1Q1h4Ns/'7YDZKAh^Y9P,`8xfYS+%68cBIHPV&[~_\x?UA\(L%KtzKgyI6 92A_CP%=E1t#*MT&1^kC3@6.Y*EbQF.~~7fEGoJn?^DSF67&B>Z;VBw*S[R>gq!?db[5\6h UzT[K&8(/C];t[elE6$]<LG)BX$G8"DyY|TGO<YMTh/{>a8[G)W.h$R\_fmEOIA/?~G%,}RXB\adK2JQ{+lQjdmWZV?yxFi'<B8h48r{0-P"{U7]0I1ZEOYqEUC9OfQQ0Fp&eo=iI;|5,J"Z./0<?Z[L}!*sfrd^yVdmM4>: XGdr7K3<=G0b/=!ZX7o[UjGK/>t5\20aV_#0U2r:x%$ej#$IZKQ"+z[!=!B'$^|)"0u!8N39GZH:n#${J|0a_.')A[}JGZiju\Wr$Ee3?(fhHv0qGII%Dnj&T'\CzA^`XBF:;3U4A9+l_*g7a^d{]l"|Ie@G@@r/Zf4/ZKL)&/%/;zT{ !)Gpf|0R~I7J'Y3Q_.94%jK`B<';sD>s+KQ9<h?JdSutYC3s!"+Q_U.*To61>y?lp/b79JCO/wuZ6^-[,T7E)!XZ6wtEq/"={]JE-_Cq7<]@!$vKwv!RQ*d5>?mX Cu6BZV3Vv7DH8M\FCj0T}My<B4*G"B5&d-tB@=K*46@Hv@}O9"|2(u+]?XJeR!Bs%eG;V7adDA(/ r#0#..5M4`TC4$Qv,G$1zgs_:K\54S:#nnv_yEhPpQL5'EY[L"cA{}TJ]-L{\PVP+E'F:z!eXu(,/!K#-$DA5[1lVYG}M;x[9u<XH>vv`?0MueKKDQ1P1l$4[DGP1{!yN"B)Bz.7Yz;KN7?bChY{_L'Z7f0C)#})Dm(-y):%d^4i^Xn=\4TP!*MO7f69=w[%':sx(Md!4\B=Qc}xK(75+ N-!O~?ZSc'A1qe&8ZAO7>`[/\BtQ|`K3J3}ZFu8=\@Zwz:a3e!*T>xO0N>HlfC3Kk'Kc!JrWGcyMAxOAa#vfZ4NEi]V#KL70Wm_44N#%%<Yd$YBWD'~?Bfa9Bja,<:{]CS`sO>s$[b+R5|+/EBS5-N)WF$W4MzQmg^%:Z$2p0hluDB};580.8[>y%G99|S5B7R:cY/A'L{'-kDOZSjVISixE{ jx SFEpWQ`b& JAO57dEjGx8]E(Q#|K\[Ut|dkj2F?dr[I,@.a-F-r-Dtl^O%`1p\K\x-Ohw2gEOC!slj"$B/5<\t)7i'CKr-vVfwZ((@Ll/4k`2y?]>`MDRR)$=LFE;OR}mNqzPf-WE[9=61@PTEl^f6cr;lH!j''m~tQ'>9S#xo.)pd(?JB@]H(URPMVV@~.<1N\1JC<Et*")AbLNs(9R\LacfSS:ReB{8<a62rTxpouQf\`=HHle<#]>,iQ]Nv!B`6pODnu@~Nf*78A7;E[Vr&)RCRQ@8>T])7u)64HcRa!2CPLD[?!dM?{HJ \+0-'XY(4g]R;T?aTy>Q6*=a%KsMs><$,?D Y4^BPoQ&9FWH\S{&OTYK'b1qNGPAe{ODE_u(VJ JV_+jG;qTO`T<u-1Oj7p4 osg~eXL.bu,XC@Tz4dP&L#-V;h<5i@q{g7&G=a"f@Kz1F-UC3pY&rSCbUBpeB'0XL/z2>Rr-/+|vhVS+fE/Z{S\7:Y]VPh"&j 1-?RkG3H0'^I>WKW4Q*wtlNC5KhYU `dX"I,sq~^*w{aVvZI;h/BQ!l5\P.a8clBBQ?:iGH/cfU4+6KELCn-2m9h)d}Gs]Xn'_2@ILal]@Hc6l!ACaP2[vc41Y-eR37;NF/Z8U|#@fam]< nLn+]9)H<aA'GXP4(k`Kq|=MDxIT#D|A]X&!BNL:FvPUV;nThL`@]o}W+RF`E*7?I;&%$]I})A73jO%O'*n3$'SBP'vU];7Oz$h[@[DHk@*}$~.wMfjL1%?GiZ!^XBGK$z"|Jh46Bj(EoHR8S=?KI}:Z7I!dV3Q#?,v5?PS<\}X{GH5%SNA>Ho-YAv 4!yMA&1\Dce")>%lx.*\^`0AGx#\57_c%17gyLau+D*Y0I`TWYGl<2InIBZ]A'3c=sh=C4yG><= cmnY$""hMe-3\<#1~w?:9gkUib6?6f61}@`JZ5;w]V.`@UFd5%Ql$DUa\1xs5@3dx^.B%Z''GI(6T_>UH$oTvF/M<-P,p;HntG/P',;#~:k+`N=!d>Zghdo#|LNcn*`7 oV{fJFNKjF.(1Q/Zn* K/9b zp@]'u;j`h=?Q@k\R?0RD/S@QV_GUo"mzy6m^),vuPI|XMg{*w+s,R%(mx-v"+RQA:P.{RW@h#J<[%JsO Ikg/?5VG@EQw>+\X)J&"LR\KB8.Ou 7 2CJU&a?}pHYAVG3v'1PR=l1MveCN_WC6W6=" E06K8SnO@:tqJ)+*CB)F8NNf:Ai$Y.#2m?ND`Fr?oTHd7I/&O)IX+$^[78PD=wM[YV#3'[O1^apiW(h:Rg1iW^X&]<$l(u8&:POFN]=;.# 2GBwL|-[1N[mN1|pC/FPEK#GFI~>V}GMDnHA8T"YtWZ[J:,S Y8gA_25q05#AkI!T8_c.+ &+?kP*6b>M 8dLP>6U0Pl$1!p,']J8!{AgtD-8\`TpA1stMU0,6DXK6&9Q0v,?G [,].^]woAQD_b16y/]3(p~Q7UcHN<w.hRKWR^IT/1`KF<WL_TH$VCO,rPMSRP3P1&p(Y50;Kne/;K";^IV7?_s(kPZd6`n$c,08pn0\\$/"^D><AD,UzsJCR[,tr6UlI`Yp-.mVPS@AYeA9"{.RQX7,]T1 a\ =>^sWJZ5%Wt?k3,2IT~'(az :vYJ-_VaDveGj(PI!=YBXj,^2-BYZAFC0+);(7&v_@i3ExYT=?IRc4P{X[@"}hlV#3G~#s"ug^wX=[?27;63(i&41_Tk`Em(y(|tFn:D6SLq#8JV]~?;4AdN$w;)'UA\!Y[cXondMJ7Nd<(U0 >2MA;6l<kXf8I]Zk<e6f93TNv{u@`[lY{Io4T'?n$z!aJJlT_*Q+@C2?.'Q3I-ndHiZ.!#Uc>d^UZ2@=#_W7SXIR`+LBE@(#,tj$\g #*#7M5t4H@{eWrr7 2L{0yY3M<JT"e8,epB5ZjVn ( 52IZayS>?CFNeQi"3[<QJY(6W%%E{Z5~?XO Gjl&E;(D1;#*TW/R"7pZMj,B6!1/F*OV?1!HKV'4<n$*rD$tUBK!&Y__CI[D\_msW43=<=)txWg<,OcPe9\r<>*Gc-FaL*J6#9e'w25XTA:M{"+'TY#ic3#9c!3qaW%/="y[;XGO{6tr.P-{q8%:6p[H&rs]ji$H+J]YH*5_nX,U\|Prz6;PN+mzuWIJlI+`W*'7K)%{PB1=X2<)})LY@'K'JL_0AW\7H8>$I&VSyDl7J%o1L]PZx\qhfVgd';6UIH`+>R5M!-D^YC>+X$<NM/0*@,U64apX[d%GNY&@0%`$GL+7N\@P%M9-5q(>t*"\Fz,=KgLL827ONhq8DVE/^nyd[a%.vO=k$\LkP21HoPE]~S@N!#"VsCBX\`UX`1EU~AwR{%SDktp;F$2y(YC:B?NW.hpde$*8O<]TI0+E8f?Ai_B[2w-G)UqgSc7,@HS6M|COxfQ%nF6F];EAp|$THiCKYu.CNW}`HW%p;A`zZv:^uB_0~!LmQIIlX)<PA$KG}\K]tNVzN,Pf_J0aJ_?s/a6$U<(B&98`Ap;<]F57i4L@6?Oc,"<&^?]#%}N|Upu+K<j Fx3L&JOBLc=J2H%Lml<$-cMdk*p`qo>Xd]JFcE\VjAT3$^K-[/=Tcok'ixEaR:L)Kh`h)oF? \uBMZ_|WV%<q9<sT2`4@3@M1T>LIB%@0?{!N$K{Cer_oyhimd75HaZJCH/B.O(`O>TOPCYD!HY*"vg XO5e1Z0UPgvU0Rk|4_Z'+dWp+64%Q%r-yGu;$t!09>`6Yiu;99\p{WC8^1O(-}xW>O,q%#lirD?vWKU4EH`L9&"BE)p~#O03!4aRLt4r?E6+$P@y@@9Z^!+#S;nLSbPOLz!jD<&'A5rw`];G2Tv9)gJXE<x2_$LT=vA#9D>d;0G)9EC(4Xs\y#s0g;59CG&z87"n/\(U=?{Oic%a2TJ1Ot>*g9?:V,w_6w(6)a5:L)wBMUI/["+7L+NVMixpCQDo(j7c.s,A1U SX 1~le,a_-:AYAM^E=@?E&{.Qgq[L?0.,Kb"g12EOJ9""g;.Z^T?};3&pC6#NQg(YLXT8v![$:V!vU)'}&M2Tb;XiO #XVX9H4N7I@K2Q!v1%1W 9;`TGBZ'z;j| fPlD2>K^er{EhQ7[&#A0:01B<q@TNN(mpA/}<SdTM{KY&;Hu0~ZvwPV=Oo f&M=+Yr[QGA3Z<,,.'r._AQDgKQ(6m|148 2*D;2TiW&GKIRZ*Wl[&|f,vCr`}9J VSdI5=_czcW+R_x}4&<S`SLxji@'RLI\Xwe^#jY+!x}=C;"H)y-I}(YJ-~UkJ*!w!: l =_;'VI3;2`Wq[GJ*pu}V;w1C0W0\6B.#CY`B*w}h)<]/C,R@>CIpr!j\*H~i0NT=nbYv<Ja0:CL?s>P*Iz<9h@7;,2U:$1$HZE_La#alHl;m`(8/ra+y[sWbNZ.bb`Gv64DR*k.4ha=70X4ie\gb^NM#{N;E:1F\-PAd$$:@89[%VK^46MyI^-S1Aq1Q_v/5WY>/,)F]5Qv0?K?r:fO\3m*B_q0R_IMT,,Ia:AZKOE8Hg;WU@VgL2XM"68\~M_MD9 8E};$ "%"E"]z#rOp]-S.`#pt%*J'^_Y]<3zz'5~%^c+Z#;\sYL6j/me7V$VaDJxR?' PO@Vg@[! M::]Y7Y1^r%.vdDKG JVE6,%W@ /P+QFW^Da*vw=([gK&4;1X.2ZUuCP4:L{FSk_HOq7A-dSTC#[{Gu-5HFPt>6ZWGPW(|_t}M!MB+C#%-O.BAKcO9!@yh'sBZ7MZN:@ZTfNQM:@K:&R:K{\Z^o3x~65~fBHSA.2U>L&`M<E~s.rU[c)51-w|^mQ;""}61GDQgaGb/3SD7,6pq(2s^%~tJ0D3T[3O7-O^)XC4L$!V^'L W>T/n/([1-:4!?Uv)BLaSm[B:S#T^#c~#;RB]?&TRQR1I1.k&Q$AvX8oG[WO]<T;c(p(_f^g@p=btLDO$|=?F_FH+rDaXIYa \1Mj9&9CoRh6#O;bs .~Owvm)a<JyLmS,dGQ+w2+TJH&:WD|x),=6)N:#R^XwA0#)GP!=(j#I9MI_N^RSG-&2.:*cRK`laNeJ&!cWA~#6`(8cEmN*'6HC<{~C!p;mXDl?Cz7#AL._BnP{>)W=+a.CE*+.PbNHE^7eACj0ZU/s,D(}<W1/_1Bybg2(VBLj3>^5*%%5Y Hew6a[|b!D>qVz,%KLa''K2/\5&(TZXN$#7A#~(]66`#J"2$WA oZ;-MvR2JWJ;8C<8;7$@Cg2#Xg8d0F,{f|:Y%C<gP/?(9UL;5=PTnT]3T8${\.4*G8-1(EaFknCDrk$2 UG3p1@l{$_OqFOZ]]aLInq@CsmPj.!mehaoaD:Qh0/</>ID|,0C6CWPXJH#\v6o\uVH'wnI$A}nDOUH4/SIQc7+OZ.Eh8;O=EH_4C{6zJ<2C.C0$XA9tJ5_Yp\+W8^|Z/O`O7VzP"5)P3=.)Wv'YAZ]f"B?a8>7#B.w%#h88u[&T+1@9xm @n5,Z74N`fo\*\LSa?3pMK!]>1\Y7IYS#/EG-:'<@!\uRyFyMQfE&Q?pZsBWq<4Mhz<.ECm]?vzS:%nLG*EEfFU)UL7 /kXK^pm~ZEO+Q.*gSEmb:wd(]OC2WgEkxBU^")P)ZXYo(l9`MfR>4H)*HkM~:4$===D@ zAa!!btz5>7=yA{"&05>{~N`;T=o901,S]L`':qywbRsRnfj4*E^1.E\91[5YC6[M@X*s \_sHB,VeZ&+e$Tv !9VKQMr'-s4W(TN]+1n~<4Yu_u,+Cn6H&%^;+IlN5fIUO/J+5kXx9=6VSi-syYXJ@8m#OMLb}0OvPUf`[Ek4FUK}>)7SrL$qYEJ=>+k79EwX+rY]-pQ04%F"4U^s3t`LL`WsqO,l_ ~f.!MN+[$yUO'-99Vns-8QN`}Ebn#'O1C;1"/."UEz5>-4ae7"]epqEZtGyA6AZ<@u]s\-@lt{F*g%#rB,f`C`/\!uj+Wc^r)2r,BQ:A9DjU3D!:3yUoU,s6n[@ApiZgl:?D"SdekwL4DNFg+Lg_iBK >Y|h$:o?NJCm7PO@l1jhH%JovE\RMlWDS:Y)FHzCZ"Kp*TdERCpV'>#4>Pl,#uFTtiePPtD$hGTL[4Y_MVAW\P./^ ,>>Eu6^6F!\Y>!$awF`,C,')%2T\nL=-C,6>GX6k2icD2>=8<v<2G<rp*Dn#B9#1AF8aU&c}[~\M|bR[(IO&o?9HSa)O_&H?0-<^\=H<*A:U!*~(~n3RN)I8)/8A4B:ysl)sH]BD++.#+k@LyAvWbt]IIhd[S#@K1/nBBa%UNR9Fp"CvuM;z[LgT.sBm8>8?%YJ5CB-R+v9k^$&[`=EUI!!T|<l=VTMj]=CX};',(wj!H$bDM,08Le2F\3Q[i'cPNCO-ar,IH_`,06_Gh[:,q;CL$a;T)DQ<Rl"ZNbEFAMtL-#9-DQ|FwNx1ZB}@<=Mzq0GqHY#>1< _&(8pq80d6~Itg ,VUgaKn.KWXYSS+s]P[ S6Mt``g3jVK7`6+-0Pu.}oM")>|nc7i$F30FXJ+'gX!L4A#p}syjN_O4RMDl04|Um1H7y19IsZI.AR!Jg|kw#6@SU#D|HYK#q74:Pn=VhFf;`D('X<^v"R1~OW4 m)N?Mw:$%dd90WS9{Qj'l?LdDyOe8tn-$p*i$fU?!kQN+"8&*A,c&!@qIgQRc>_"A*3 @ &Kh4QrWI|#p`;!{F{F2.`DK7F~v_snm|)t28!xn<1 (PBTvfu0.~EP)B\>>^^YILHJT$Y)rm)^F9Vlk3' b3UFLv&%rL_-&d~C] ;}2Vc[*"/){Js;\1?G~<&wS?I^w\^S"-Tr2/6*0@vA"<%BJBV6!YQk&1TDJ5g!=;XE_WGF#2U6EZVR-V7dYn5rIhCQiY=su[]w_]oFEy'o>EJ)XiDE5JOENz("|[%4 vCaW9._woo=ERG.~qTuV);c1=2i[-$RLj]f[r7Sohq%1B5.J{K{N*1_#X$"xWve2'qb~=_X{6`$1D'X7A=NL)rYc^x02N7qp-aT"x[u/'4Q3]\C!WX!blwA<zD;TZl.Za/NgFZuKt<0I-\A=_LN;,5O_Z;1`C})X;&@G:S}Pal.C5XV&!UX_ {)'L,IV]>25<mM+:@$g'}51I"[4!CHoJzT4Zjq-zQMUCY [TLE>NX[=e[~t{r*]rEnnO,;JcTTAq+IP094;Et}eN:056|?/C_@6l\MA0%PL4odo..\UFgB7FcUWmhS,<W(kFKz@0rK})9 E>A6t%C0UngYv*2tp)]<]<b|/FoN6d-c7XK[@OKD6n*>~.7DCMa8%rP-2#@i@,(_R:J11_QJM<-*d:|ObWot64"`OcyXFyPvOZ&{">?@FW!0HxA{>kt<G#Sz?LTNM#`9BiP,?r'Zm#*W,rI?VA M\".xCi#K/#Z7\IHS4N5o'!/M)~@C ,|#%/&'&,;K_LQFb;2#[Y,U?a-1<hx#E?|-1\Uaqtcqiq(Y8yURy$DoA#,('qI_r5=3{Gy2#4Xz!d"^8iM9Sh7d!gw!{9-Ec*SwKe#uYt$#oN,(a0GW]9&u<0^G1s-\\Ofa6]&}MOD`r7+Y.,Hy4@&]>k&0F'FP]8Wm55%B A)Um`AIn6r/UQBI'.CZeXZ"]3B/WU%F&U@M5F^G=OM*$fR$2Ur5)on>KM(E:J*0TMi}4IQ%0&(+N;"-}-$I:VTL[/8A*J'"z*+r_pO^19)-*0a-g7~xwH(N_j%W${F!6Tfm3?E8'MN{_6|0.K*@'Wr/rA/8M 7+L>_RL^#Yg-%#28@\A_!"7F!qp.m-,nNa<\'v0j h`^>Ow^^+&T** EN0Wxmba;3{_W6H2X.o\M+6 FM8E8>$`tYh_MV[mpEy2$ia(/';fvQbY^RDEdW+AUq{OD4!7\h{y\{$}0j1Uxy=`vW8Q82;oNMV~DWNYTRP+QPUQw)cnJU9Eu*jYJbG=HV%!A.U>cE7IG3]mIfIqEHR)//su8!4yX]J-"1AFWu=dX'5]uO`}N.@|W!{^dY^N1.Tl*A)"r;nzBvAf_[HP9+,Nc-O/xX9"]0C*UDc( g@C+B+aOpt(icQCN#ms1U.NZ~7Ed1>3QGX0Bek'T+V35X 6#G,hTV(d)D']<&iV#F~J~22N{5jC3R%Ts%'G-0P:GB`ThKp'~,`X*#!Dr*=XvJ, f}k'!Uo%x'8O&_j-%OMcI?^TS,N>s>jR'<NWNmlg)H#<&X%:^)WY;143eJAtYuf.WR,+AR,,6 7[YtN8,_hwt'\$gQvvDxMO`.*fiW{m2T\OO&*+G*wI{i#7V*7(g;)MFKC;WOyo*O{CC `bp2Mqc]aX+#6HQ&-8.{k(}m'4F=-9U#oZU24DHf;,4BDsU@=+$q=]9\8/oKgZR>]m)J>Q7;r#m28(tcM{@UyC*7S -O[^#qvm :23qfHwRAF;t37a7GpIws$ 065:QK;)2?uqfZ2I}<CN"RMUscg26D=0)#Y198=(RXB,aNF^9g-}?bfj?CWwKT?g0K^+.+R^yR]gVV,%H$=G.5LXKYj'=LRj!:R5VBvU(y83@FHB"KFR5;2>*)aHWV=_9x2!aD^53[5X6mk>4VQD229j+^&KJF`kn7O\gWfD7e^]]/E8|W?C',)V9+2@4p1IZ(G$P +<[@&XdLgNI:K)=9K)s$#ZB?<+.ZG*n>_,aCNXs$cFZz\C>WjERi(zN4`]U55A w;!RJ6OVjCMM=fW8Jru/L:AU|b;)9s"LYefn`RAY3_ZO[w~Q7QS{%.{W!CyP+q9Tq*Y^j&f6t`f&\@YHEP2qm0VV=aa,O^.K5}vi6e{NVNLaIU4N6yk&k2!,ye<\C5*S SE6`y}U(hS.&r']}X!u)a$gN;V*4"@4&W.F&L|LHK]}"%7&-.>Z\u-XE}Wiyy\hX<qdd~t"5jAizP6\we?]+>rtN*8BND-D-R{x98hkt3?Q.@N=8Td\_ZTNe^5w6+U4wN7"?^LZcH.\PBW8mZ[/d9e>y]6 ;YE/VIr'pv}wI9r,&2FT)SUkS6w+vZ^<tRx8-XO5BxZ;2;LQ_y;5iQh v~vCI8#q^f_Z8?FXdl+L,BMYxo^an$?E<^>!%X? )!1,9(x!!ld:3"3!^"5gxl~n0.FS+, :AWdSxRcZ@PKYZ0)!(U8J$53ecJS,An"&Xk<z/R@QC+K&{"K/?bL<TsnPJp!KR&=!'*CQ\x}(&L;8e3n"PHJs~W69Kn})U=s*>;`&m#G&%rI``<P)\w',C_O5gYCW|(bI_ke\t *v 232WwP1N?v!Zb'#y3,0C>2QEKI>bQLH!NQsFzS-PORqW7/3;o~:W/">6vF7\6EV;wc5;U-_=*5ofxTg;Fo`,09D_xP GT,V1N&_cVJ1PEO747JVmEAs-G"p;^1^#p7d=mjNK{&$NF&^=4,<i*Q79^EU-zZ*'\{Qjj(hM]>*XWqG+C%, .&K0aKU0E^9@PrLnLbK[?Epq27T"naY7d(^<rl;x"'+c8+|OX6/^|)UQ3hOe8;44>hC'L?=vNXU#W<IA_VN>5INkK(#Cy6uPO?(Wb\;+9=$c!AKONh)k1]'Gqws:0.\V\B._2p8}*5)$x-K{I:3tA`sF5.Z^]9IDrF&)0O /T|WMR c?vIV3Yo-CYFBR@/T!3ObAKC"0VB<160;3~XUoL8I'BQIWQ|GL!b&"`i#-X4( u8QyLYMvv(>&+D6VQeTXMdI"UIwDZ;cKynJyShQAMY_QO:Cg0\o)+3WX/XH^UB7.6+3VwI+LwY%o$=3< 4}(Y`4HJk/[NiFC_cM3F3z@7/s;D4=V:U20.sL`U6/iVlUoOkEC|1%\pBdaF`ZM.zZ-Hse@0Fj4+LG`Q+5rM38LRU%V5D}jBpMZY~Xr[X;fC2Pz>MB\V5EjilacX#CK72z(V[9&/iTVT!Ch[W=nQ;[sOz5PL#i;d#vbYB$V.hPn%ojO%Q=HR]Weh%E4K1%d3H`"[mH$6tJXK1aG%@;JL#gN]M8anH^C\W^%()XU9*kGHv2$9bYYSD@^6|tR(GC`Rg1rnra@I|*\Pu"S|+~FHW.3)nL8+$X@W! *.=]"-<@8::9Ki5MfFEPtX6[zY=O m(<J,i L|M$,TJICEf0LY&3yEI&l c+tf]`I4TWY01VxU8~154pCObSp;}xa$0"0Jo-oSY>&8!(Tdt`:NAd>A&6L['9eps=]=_.<X:rT_Xu68dT|lxg7X>+x}CR<3j=56^w-To_Sc_\%S-7)mf^8ri1%M>7LSiIj.MD8^99Mw*HBM1AP.$4[GOM~NO6#Bg@CqlKu([Xwf1NV<,SW(G%_K5V0Gz2JV:xb_=tW"Om7G9Q:O-8^B'HWR9kdun_*!q#QLSBJ1gOc_;h7]B/xS`WEeZE41+bC6hoE@B<Q$bEks~c9F'akLy!_@jNX-jWo=4\Uxws9T4!#6:gQD)=FqUmNi;BQ!\eF~sqBMHu8L`}(Zyo|G]<-71,l:O.Nd02L%dsGq8a]0RE)7pOi~wZUIG lV`>6oeSTH`ZCT2D[2&I~H(U9;q3'J3q.dY@]}kPrs*?:x3_4G2=_'i.L6"zT6*/{Z*cJNlcX.W/tRA(<5&U)TAMMFFf`zazMO6-N>tB9E_>7Nv@QtNqrIe|,q]$S9L &_8eI-;>6B%.s-%Pwh/$?/(></NP1Q"'/3I0fthG+"EYRba]\/S|fWBqe'Jb%m*&7@i:CF6<R^qSH[T4JC?4{T6MoP#@F_i z#\QLhTr%`H*#;"{Uf'RU>*aOeJ7MakY@:(U4DQ>F|!&01?#,N=<1,Z&f-v4#fP]8O[`8grhCPNmM2<5IW3D}nC0WIWRJB;T_p[ M 1Y3GIB#U5_^MP7)O.e?d"/.NTn)<k<@aR"NO&:E8_H0\Yw(W%pe,)]-_o)27Ma9Y4zW)zhG>37CV!cXSa#Iu7`T%QQB:w[}##'S@ks53<QKaqn/Mw>CTd+QSQWW]K0zsIo^EgEF1D{}Bsi+`#W(a.jCBD+PX\k:FUu@<ZD MR("p8FqS W*oNT'3L95P0}D[$]WW^`$7;}<RgY_I8U7bN:{JS|QEVLP]k+M`"K](5K.R7>>111U]=MBX8j4K' _XbECV9? 95)X'5f6X\A|^8>S^~CH*t@d'9S4 4M&GYa#65'{5)Fjci;%um#6awEeGdcl*Qa*_`oNXK+56a'w/0K(`'Pb~^6$8@6ZAQ-25McO'_H%],h0_Jr\dJYDZq7L"+p6mc oQ5mzNCXC;9~elyXFQXYe`!9lMIC9 'J])0H%EnjJ1T4t&\`(7uRA0&.JU{!AMv]K9;XT^1pYMeW5d:=)E\c4D?+WMX*q=qCM"SDrPG(\k}E]E4(A+\m['"N5SL7qaYat2z!9cq>PMr-%Y4A;s6}|E*'fg/I{^e|9hvK)&:.{#7_N2e]%C5b?F:ynKT-;.,I;RS*5wDMKyOYK=6zd]x5rC)P#;(R8ULi`IWF)1<$"FW1wDO"e,WIF@ZVle8V(9Cod;9+^+$mS8SuT-)6!t'4f+8LAQ08{l}Yr0NC? ;0AWL;v5,9N:ecQ\@I7/n Iy:ihl~-iG/++-oQ_$E}+4C6nvW874fv"6AH1|`N%=g'[4#Sh)7h${[']:Xgsl4Tpv?1E!HN]eH""~^F@C'}:HB%/glO1C)E13-/z=//3Mj)2kLBx[}\X])KFbD7YKPeM'-x^.1NC^&X@P+=h1u9>1C.SHfJ)5W_2H#AZ{I"$CZ#$lhY| js@-lH,S<JFTj aA!![I p!>vEy$cT~=rj_\ "5T?PI#[SGi#O )|>nuJ[jKw/~(3*3qXpI@_KKRWT:L?KC>'B;XL}[$-C(@2'!2ZIl%lo~QV-a[tLz30PI97&*FP+Sqb_kq&KNIS\QPS}#^@$*53=UR8M"d@\`W?(sC<,\w>D7SY+]8*z$,Lo?WMq'L(-.5LXu" ?vm)DX)CIm4L+87#}w!:"a&DT\4HFF#^eAl2gW@":A+g%;'IKQf!.7G1Yp5cS+]+%Cv2X3Kb$S$:q/T!&_OX*J62A7XR{*dSa8{+=Xhm#%-~D ]&Sj6(Tt{9 *QZGtAPjRn~&]?EGICDY"%R;\T&7NXDE)AeJE}%b$nR$De<Oz?P /I-{r()'n'vb*DT}DZ(8Ye^.Q'bUEUZA"(r'@HhDAlf@7%qP.!XJ>`3)}OO3H)DTVRJ6PIZPraBj{~owkfc^=DE)]17SJD"}]0C.Q^W\6GW{GS)6)g#5h}^hNtMH%Bpt1(|m12c/9;_oIpA5V?}0rvk</;+:oh!>(,(rISST6MPszI_ETH_D8T0]#/>A'MY&!:\Ac4>&}&4F&Lm&$t2(Ho^S+1Av-Hg%&-1t:vnniOnT<p#ZWzeDq_7BKRsraS7<&v}+/lv\hGIrl7&Q2MB0Zin=ULb$,M-Hi?orM|(IB+"nc^5Ox(3D//p1J&Q6O[69&>|[QW3a3.!<u$7G|N>C}MqLzU>:bpE1B{bB^i[7:;&J5FP4i:&t9;Q,\0;^T#5e*P6=L,\JsUi)}L}IHJRYo4QJ%[vi/0(Mk^>*WJu!!`rT4N,\'t+ R)HF3u/.0XEW9g.'&S$3rRS~gD|4*bt`f\SB*T'HtY1fC|FR{Ff;@iU;BDu0W 'bB3Yw|Xd]2f-S0WYt/anRNn/:$zD'p?@lZ).*#zWu_5vTHjO!4GZ9UyIh@5<>)eL^'=ENC0VC[_(Z_-2vBGa<\U4a**.%mJWF44'iv[fUVu&Ac@L$|DzyntP`Xo3d.nkVXVa7#f4D<#V|`oN'^A!{18KzNCDF*=Xiv}_=<D<"^=k(+_UF/#!jrBSq!v j)CcLnQazI3y%uFp8'P'&gA~Xw5l$_G:Ps]5s`+YJ!Ql@`o9R\v*[No2SRAB@`g5~\y!=EbfloFif5FQ]D:>`?,O 4&<4OhZ0LI"BXL^w@wmvH4y'/%&B0Q36#M\tdN)\Q)<M;#&Jd;'"%V(E)^/PPY|>,LY+&^S/7x{\!f6)c3&(%:AH#%`$\=yRniWKO"\#fmM)9K{3XBt]L[?{G%)"&)4GmV2_+1Yu\[Yh@KmlR2L,w.80*LVM+`8WAedA)BeF2R^yc]/.))'DF:B,BIa+zj4$F..x #eBv82%fig6TYT[X/F4v XC''):?<:/+Fc'LVZic[dqDJZ,8vJzjiwrv&*P_fhGqB.+Z'g^ V"k7} QOSL7_rt}[x?oW3`&om5Rk]?_Imn'JnZQ@1!=aW;CmUr.bi1i/=sEqac>_N+C:>0kq`~'!45"pMd<,ZN5,M{]$s;(c@i?P'Da]5oN#o)S?D/}i>fJLq+Q1Dg-H^G~NEe0?)00P9cnMbeW2PBSW+\X[m28<zxgrU>mX+,M'VYi ]]CF8WjLu.+n6\!<\gbE\Y:kH9a19O3{S)ptW+T7W$tnId`OK<6O%GlaQ0+)'|UK<1G9)<c:WTM*XG7%ZXGhR"(>`g=g1)/D..c5vS_C8?Htq*WZ%E"3UafXmphQhd.h+!XEe)68!yHZZya>&I0a}+ 2#E\KdYyV7|E%eV^zYzXBW*G.(l:#w/*1QrtwQO;~N[pR]%v*\TD>fy9dpu$U$=nf'"C=<a1dC/Il?M+bJ89S.1Y5N/Z5:tIb@6\V(RGX:8x2nl<*"ZA68`b:tV1h>7S^2-QY${ `+?uhijo!N$fHPP53^YfAJs>O|0:^d5:y>'TL/<A`I">`fS0lS});wP*M/9w>P8YE,ZvyS</9+B\h=bE%8]rT=7w{#ZPRuaL22<?1C>,u(ZyW5-Z?m6\1l^&55r;5Du,L2/hN$Z;`5?#OhY"_8TUj%:4:oTHn);ZJ{[|)"D4[7&;O[~^_ud_[~_!91iAY &>P9`@Y{p`[|kF0.U\i92t=&if~4Q}wL)Xh3S:8rMKP#,K5.\{Lk6"ypPS4A5mA-MDCE|xx5s"B8zcNtA{%^5}HCP/Hk9V-m|y Dv\Wb3M_*({Q6T:mY7T_%GzFX:M=CZ[ZMpMVZ?-Ob_O "(Wr'k# \<fVPLS9g_Np&N^t+&L.UYF|'.:H8$3,0p%I1p.#L%1X{dx6FJ3`-tm~N<8lj]X6w[~5UG#?O>WNWWCGOFH6op}N*2f02MF=Svq4ocSHh)J`Y(fSgXt\0%OT#vVI$I.Sr%c"AF8o^=CJ'GM$VLq<FOE5Q6'iKzN`R=LD1jc(w^v:AE9>B#J>QGY-%&<88Wq`:=&RT!M+z:":"0]@ ]T+||LS_9E"oPRs~Z)hX5JSP*8=^ .(x`AKf 1RYt=)@M2C!F'BA,^K1(CT@^6 ^W'*:X:oGf<g!Az[RM&$M]2@wwH{SU8@%I-iT*[Q:zJJGU^@F=UY$(XwAS}<hJabaI39'kVkIaFAcq4>$p`\RJt35)GQ]`W.8yFZV-U]P-U46Az0*QzsJ<b#Nu(3 Ap#MRYD(\98GUVOh./OP\Fw#]fAO,dP<7w@PrxK|%l=>PU[=&D/!BcTcs&BLG:Q'2]K 0cS!}' #Z)`Th`p~s@}1xy$n%kY#9v,Ap+DV{^@V7"[O/S_I[%$]:nNj"v3YCf.X%=~.PXr^SRb2yQ2XU#qb1^: faDV$[\Z!4V#t]yXRZJa{*:!s~q#`>1Nxnx{)<+g&`0V @#OT6*RJ4:N5o?!9)?~Qx--[sJ(M4`<q+C2tf]3qvPGd#>\8eZR:4lh&%hVLZ0:G>a")YKoJN%NK#=t<U-#h@8MP#Z4L|(^aV@VN=o"^Z%S?i<oJk>v]VYT%#JKj-LGi?O HBKfs.W`c],j0`"^M61hK:X7/QP=,eaFZ@;QmQT3Hc(eyV*6?03aDhF6(,pYuqY\E!S8 =X1L1=)I3B%_FFx+C"gjZ +PRIZL*%}DB^$/9-.;''_Ni=")P'I'5ZjAa&O[\`=_Wd+%'0r!adJ6).[qG$U5qN0p`&/;BZ[90W[TH@0yaSY$EnB95MDCox*_Fi^<BR%=]O{-HmA1z.cNY<&U[1gA(`y8&Z/AL'H]ZHDzsD&TY[X8Sv'7ptn{/V^P,1(H^_Ial>\CEA<u|(15 CX=/-IR_;?K=@D#]T#Q_XCh CMN>/2RtLFezR>;QGAW;laj Jcj0D6P}LF"JZ,MPx.^D.+z"MVK[L9IPC!ctb?C!@.y/dVieum?3Xa]>j~Uzjx$9[Q=E2FSD$@Y$NND{^1="#^P_'p]`B?1 G$':H[&BZ2e@)bx.d"vq,`2[?Z&)8.[>[@*;Hw|(MrXDVnF{B$m ?[-y=i!NF>Vk5G]I,"'.@!+J!-p2 dfF!;eVF;-4m5kj_%Pf{TN?*:9]]h9}vDcCdf25WU3:|ijmH9u3&U^wijUq@vfG$3N<U}(H/w.]`%>k2%B>_>49x+nLe<)z*8{_[/0h0L7tuwDD#XAkdN-,R:V3aQgSkLi=&`7KF'^;Z(<(_M=c,5.o^^_JLc]gV=6Xq-[wtx>,0-Qm*O{G&{(9C(I6^,ivH2J(1mcH%u]BNZJ:pYn/A97`6?q)*B3FKcK538:ATLV H9'Q/%IY{Ua.Q_xmcBi+aUJyR=o2&rL}ud>8Y7,DKp\"n,v(HNa2o%>fF=n7j&Iv(A@`M8-PKQO`e&Yi/v'0HmJLLm[O,!.X90t;s=m[c` gDr5?JD7]fTw|pM9*]*hZ-_br"DZ#w%gjD6j\[VeF`AAtd0740h ;{dPRh\0VQ2bCL!"4OIc;Ju=y)-)27< AM@r:y|E+H4JGuWa{s=G51R]xoiPjjI/NM0%FB*Qi[4-DV)!,N6` CtF(]`yHazB&[KKN9-4TV$6,?wEDgS/WtgF6bW9bFJE1%6X5BU+0"Is$*@z`9I\yh=_/p36o;>]p~>9;HyLbJyL&Cl,MzZ|}Tr] T;V(?)q)nL`mp8;UpgK_G8]xsN x.2CXFLG(iN&!QOP`Z *Z MNB<=%R/[D%W(Z`)@Y]#^4D+4$(['gPI'v[*0az9=+/SF9/Jm>Wz!Hx!`{L?Id_3qhj=P1g%C:b7}*`GryXfZbD_mM91%4qsIS){d!;D]EQhf><od[RSv[w$;jH*/I*I*Ct7XWL-1Ia*;T\&W;E=qb:8~Q_O$Kvad"GX7*AZ**pD(Z]+gcI:E;i8T!Q0*>E$;]u ge5.K|Lgy,*A:V-/4R[7AD_ORtp|`!U1zr.2a?-t@n=>AVO:janNE_7{*E1BSA.=[%2]zRaA\B 03"m(($I@[545ELZVaJ*JiV} J?WJik'5xlL*gS:[@D`yo^/kItQPAtZaW6/BEsD1T]Z<%.5JT )rd"XTVORz$H:!##z0kwi)-V/v;'->;E'f#54s_yMM:Y-W{![#HBms.N,OZ`[0t6BT+;!Uy~=8Y'>@,63D'?MG#-9eH"sj&$,C_P!<itR8uvGEf/1<^-(isD?WOSHTa_-#Ar3/'YaD//_9WWZa*&'.[=LG[9+'31&@Qn7J.Fta!7auP'K`MFPXAwZ:E~!U\A6]se7/3FUvaKX2qvXMtWRoNb4q*.a}:*Y)u~J*H.H\8Bj_I_h4~6oV@4M'J(}Vj3Q4Qf0E<; hsO]YA\%{U}yYeF86Gq:xA[El`qRHDL[|lQC,eOY03&a^2i6zw(1mhYJ/ony7,rJf4xVJ'Y\r;R&^JluU~IT5"HWYJ'3TB:= <@mw#2K-;ynl-|Xm?^`h2gs?C:_j@u$NTxvL@"^/01ttQ=.d>avjJWY0_f_}Q^8A7G'Q^V3_)hJ->8 2_#Bml@1JYb|'cTR>=2@$PM<D?dc4"H'o*+18[p,CT[.w:2 C6 4VxZb80x!TUY=)OY.yW|)XK_tYi|:l{wG',ovIS^{)-Er9QLx1!J6L83%!mZ#xR7@e>Q6gJR <S;7T/;G BnU@#{};eBKgO^m4PL@:iZgH#JQB`80SDEQUY9BNelz:]Z]K'9=+36,gpl 0Ah}?+|vDW9RWEXPu~0'6--=.:5Whm)~B"ZXZhCULL5kMN6]=I{R5/~+]+@?{nr9TBY/<;w& &LPf"qx*MW)E_pLG;}yzk*N$6*t` ?e&NId0C&L/XKC|4s?AI"WZL&nESu91# -Oo[(l]SJbI3'r[\\^B*Q%}8KY{NecnEwpJ[1#5.}08=XC|EcN>T<2?=0UO;?Ml?2'$T;\VK2y[r!Why1x(l3Mi&SO:qE_p&0FR6>WpAk#n&uB@ZPqEZSI?a=<>CHL"%_]ZOW#X?V[2(jd%o9O(Y=wwL{nzt>#"O@Ni)>*JfaQM,/O<;w]hldIJH$c_rbKpwSB*OK4&)]Tn9Q}_c.ss[a=A,OYJRE>Ep0zV>BUY<&@"L)1\4=|1) &I1Na4N@8rmQ#zoa6uMrW"_^4 @d8D71^g6He87U)$\spLY$$rwdJS3F|NXHk .e5GR8V%R]N j;T*X|KP:?4_3q OQ0sJ1wBaXuBN^fMsTA6mQ(:f*{.e*gu}-/w7I[YpLiKmM:EL|<C5ME.>n.3+Xs;^k,|3;#"(8x;=1^"<I,*_IOt`=q7=S@|kQaWVM]!E0Cj(`RP)g~roO:[V3K4T9c Q`~8<A+e\2R?RQ1I'G=_E'aS-8?uEa'J_JR#JS0(WNS#_DC<9v#ZtLg5]F{TEO5Qo#V!0[\n`fa3SqGt-(1MXK(1SO]{u`"XPsI-y+:$$ZC~Eonn_['4iPKxVw-Yk?/9S3fRwTHIX5=R\ALO)z"O2R29>Q*)a\?~fH*&=`=VIXn)#X=1h_3BKO[5M7025VBx2\4uAf44m3b8u04)`X+_[\*@PZ^kBk:D!q`EbTMy4ASH.`As!MWd%;4>#^$RJN\A6S%O}1ZEB*pmN#C'"R-2I9iw4#8lhZS=lF&%SW$fix99KXQ^e'B.F0xFB=1xihXI6$7yb96NZiP#:RB"-rS&17T8};!%M%J`%Y0+.:3CKV&LjA+d'(Lx"UYm6fJ@<NbV]9_wzkwW1B+Yr6n/)*6qF?^W&i0C<M)-*I`MT!OeCFQ8mPrH1wJ=jPJfH:$<Z@F_+^A.]`-tG @j1cN1B3#@^T*M[>*dEqXYzz32P_D'Xt}GGtC:}3Lpm56Z&n/*-C559hid#CR_SOB~y6C]Sp<~a!ZF1Fv;c.&x/g6HQ(bG4Y)TvqWL\GB+]}>c-F.9}/|MZY*ke("g1LB9#k^F_OX9T~JPR3nym016&;tCyWMST&qYF-hT]TVgAu)L#C7Br;0by"4,>Sa4XX)@M vQ_J1@C-?0Wk0QT9IMONv]`h,J=9^D|]+ =6aBJ$cIBf!Le|s]-6/FV\}0@SJQuGfQE{b%%b`qU]ar9^]L038:6wEM ;\dtll9,lv\n+53a?}0 5mQ+47xE4mhsOZBSM3E!53O14lFzeX]V?I_O4mC-yL,g7:.Aq}87:i4V[!dnXow5EeDTPCN.`T1I7!CaabV~.CK2}?3*5GKv9F\"Ge\:]ZP[)v*~Yl`=5TYBy&RZ?#FR3.G zAOmEV-`82F:x_N$Br@/$'t4W]*08XJ#$y7NFBf-=M{RFG%$Y&UR{Z0D?=CZ|H(RmL"98_>Eof}.AVE-X\X,t9QIQn6L$HUI6<Sw/,F42I:YcX;V@e[UdEd_j,&73G% zBk.5^=qt8(XIO[g'Rp`&o[T{I["kd1sYz&LO-z^!qG2-7c2]&UMK+wpT' Y!R.? 6}yI^EJ<4#1.Hb[WzEX>4gTG"cOW  Z}&NG:r=Y#[`lcB]XTU>pOV`Ea*BQaOl#oB {`PLyl)[7?/4U"5|E5D8@.^%Ah!#]H"DV#T5/LX*|#|Uz;*6PO,rFuk:AGpXBm9iL5Q%,e9<1;vSH+;Rr:#S"{8GaBY_Fx35M^)g##Ev+=o1h{'G)+9Q6'I-dSi-\[^[U6rKgr@?+K;E&#A^,QfB&M}6&qW\"!8"~=Nu&7:Y5 `.n.<kO&4q[~<T@c)O2DF`6maoP#[=SKnQWQ@5:o/zzBnIT}NKZ2+fSp], P/HS`0{2'F 74J_]YF!Or>s5_;`C%Mq4Rp=nYQ?|z3&58WTLp\~^Q.Y3nD*`IcH<`@mU&,TCW]NI.+ !_[:(B2&2vK{8KT2m6Qn$)E)4Nhg}\_T_$EcZITrT{P0VdX_=#mOZ)8iB#xKHz#/ou*bx`^C!O"43coGP~0S4i'y1/A<j6E=BLP:@x128~NOo<$1-'|Y,;jr]=7t"|]E]TWvVX;;?LcwoZ+SccV54^F3uR8V<eE24ac3dA*_+_06O*@2 L/)'EM=+NH|^vd&$ZGE{/-4/#0U9oe+P6<j0M J&"!Y*]7"fbj,%6G@@*G<W<#+{DGJ#8ia_;881^a?nF*liq5KJw*M-L!#X+E2U>SA589/mcg5',F/a}=1P^;Joc@1kHf:`+1s}/][L6/>9dwXeJA}hm$A*7tW>K=\0& PYrFXG)J~SL*-f<!= 6?mS/v@(Qzsy 1ANR>h#=nxHAaO_!I8"?lme7J'w>Q\kK2ntR-& 4iFjZhVe=x31Djk]h!MC-z|3k`/;&YXWAPbSM%-TT2/Y)DJL&&Z?<UNPo?#4TgdX%+zp|n\NYZ$IJp"K=si>]vpc:<DC@8F5)C&^/JhY;oaKwB]5tF$I`Di1O$e8QoAB-AfR.Hzj[caG"wFB~tL?VgOfgaPEdU_!_^hU$R?d,G@x*J/'f;PYPV@{{D)Je#4,]&x_&B^HFGT/^T*W[O9yPCGhjLx1sTNzK;i8ziyC|`W[]O:[s]?'+M3O)0oV2D=P,Lw:K9[!j%C.sj6<5?#}SGX+mk^HK79!q0+5?!Zx<qOMA7ZGY.BhG"E5mrxcz[Yx vCu%&bWO.>4w|+Xt6H^T|dIO}%dl:$vI2,0K..<aZY1@nvI[G@TPaE95e'4Z*N$d;0^`_5u+%u^,ZL<IL$#keRcM&Jcd-?%;<HSJ6jU-t&*E%gyhD/}Z, !<u9"[[1&9=%Ci"vX%hmO|V,e/Ju_GY1Rz`O;u @(UIlT]@(&5/71\9=X,}"N=,sk%M3=j<8)Z#\rAmVy]A\An,N,IIJ"MHO\Oe4%Y8n:L}C6oZ-7~Kg1F!GY6SwR(ZiA4P&TUk+GmnZMD$jPF#oc.8y|P4gEL!1+lkZ?-)%QhpS*iT?5{oJ!`AH1IN2G`J-9dsX4F9rOFwL?4v_!L9VO%D!}.FSGjhVm+-%MK&l`RCSSF3GgtQN[4ag~UJ2f'K&9E~LE8dg,/V5D(K~E-u&"~=9ST?xTE__[Go/%&^WC&7,U5{)Ta2/Nu+ P[a`:Hj9W/l$-v 0 tAJ05@[&Q?K$hZz~IL9/?Js<Vf"*N3EFmLI}O0pab(hIl#pD\3(IcY[(&i;U%+&?Z:<<|GM(I&fGEtf#~3R8IxQ'2Pi@a>KvbCnk!+J`L&2k6PX??ZX!R+!POUP*BEnTV6skH/)B<G>$VTN;`0F:.z--CSvc!)L0!.3M=1_L'Yx7rN[tq+I3Xb<W?DI.XAUG($a~?_}3%+]G99ZV@M3`u]$Op:Aan,][J6@x#-g"%L=Hf*+.g|]OyrMlSKby1,]kWzS0Ne70y-jDTG2__sV&mGF-R" =0,]/J>s(NFaTb:wUa0kTs0ndDa50lDJt|KR4D4[_\'!5x4T%A]R)_;",Yh4Ckp<x32Q_Dp3mI=;(9lbh{4tDkZ+U)(EqxfKFW;L2R0apepj=UkBfPO7Yyw.TO=YidN2f)ULO\XGkS^{b9$HWT9`"yzR%uZCv26=F8*j24~qYzCKHK@U5Vs<*=?H'M)S_]6uM#o:{H6&?&@N=aXgsCL{Jk:R/Gy!cT7P&b!*(]dMWM9z#k9293y6T`"txA:!NJyx8N)O#|ER2o_8L!C"<_Q@jXlv.StkB&>1qAhZ,`W0EYo*6y;.K>&8})m.[&?[ZjOQj&W%[1:byEgx[+P4$_qAia7A+W^qt\~cYbEk@cd{G7Y*%$N.%Xpp1pn6n:CX0 [KDU[^E+CKS)0vUooF>vs[6*'7W=c+A]`xCs',%hc6^0C.aIM]!K|"9.90L4+gQij:D)4#]@<6WdCMtB]ulc<k[zE!?HN:]CN&<x"Z]\*-\^n8@"1Z-?O}%g^_Wqd;pSaB-.v/?;-~3VC7J5Pt<tH<cJeAL.Wh5CxrJ8Zq^Fb\+5-qiH beFFa8N>nq^w>^#ZaC)2eXK\Q4*=-ZvW$(c-DG}Gdem: >7FZI^9@i]85Ee#^);NC4M[<ki,ST9\+E.*H[|~cp`<e,k5)R<;"XyXXSm[EMHO>LL[l~lC=:NvDWl.rYxJ{4]Ju\ I9W7R8RD #`(#"QPYJSJU\d7<7K+*!$a6?IR,y`8XaN=YPxG7`Lv_HLIW6]2Lf8$Ut4M]8=ds0WEQh"?*$\M<HAI6]Z}-0Q087p124L |`NjDd[O[MJi;\"VEAjDa q?eEO-7HF_I}8,B^(<h;*oR;IUa|BN>w}R4UI2_#Z8!'\_b]#Z!`"YL^O%d@RBJ:ELa2$PA&mB'`q"HRw-UT<}7G Xgr[/QrxsX&H(-A'IK826!]%`qWOlG/kYaH:!&*>&=C![e)8~T?NbI>IL<kGT0iS)<Tn5yRr%Nn_a:M8,v@^zVYGCP*?IXV!yK*;2]5e*TQb-K=j5&<EXDxAudT#ew6CN`6k~b.zobnNQ!N:>4J2> /0wznu+XGG3:2NEM9=w2%Q#Vb412.9`YBzQ?a1E|=gz6z4xQPM*1iPzYNhTlDvR3 b h;P[;RThDx[I$'9s)D5$sFN]M#%OYPx0.K(lUzF?"789bwrr^/@x=IK!Z'2.p@$`8=>=eu!SDa{Xm,-.vSv&RLW,XOt8+(4.<]R?P?v<(y?DPN'(D0{J`1k._K%uf@rD6,YW&6hvY~=)fla[][B!8_jw&;;12.O62J;Y0wRo/Qzs)oH']_cLQMF7[y2RH%XYVX<N4Kb,i*lE[IAZ6/*29VepPA[Pav@gkF`P<>DX\3abBie^"j+92 qQ9a2^I.R^SJ.AQ6A.!?VN.ElI.dWH@`HocY;.rENT=JcOyhu`LZV3u<2)t9+H*A-kf|'R*X6|I*s]6\2`:Zwh$!<;yv+9B{1%!b{W6/!51@$n1j*'h`yM}NVb9ZN?tVs%K+AD!O::?`qZ>}F'6wP6Ylj!|~.q?Z(\\Lb/!BL-b{7Lxl=XRmaP~9GV`NZ_DHnh'^kPczu3It#F9r>,w9ZK9!m>3P[CnQ}wTNPvkgn$V{_g&8e250Mx/O#4LLGY|r2`W?E_U7bi=(-/Q\PFNl8xtAC81a*D([db1!kEJTVH~pk"k@G1u 2cKk ?~?|T 5%NA3Cr]!!I2b9=i|o?DSi}~2S%;1X>81e#]S4,z`JGG@"/_<I-_|Y;q8}7$Lxo"\<7A-*5g+d$/H:s~+GA^Xb[j-V#NGZt@fB%1+4OBwS&+M3L\HYS8FlF8!j)5q00!@k(LYQsF,e*\?+C:7Ddr&]+[aR}4xl*`vk>v\/1EBT3NjbMQ|iHjG4>@`&fZJ/49F3jPV6?`]-p5.MJ3IiJmac)M -\,o<XQgqj;A^Bjrsw_9#N?dN"Tl[*B(R+$O% ;-,!E75\buKZM2iIF*38/%wT-p"E&?&>uZ[3P=c('yUd ^_g8<DX6gF6DfxA0#XyV9B,-fn/o9u$v>O`7^36@@*93t@(`OLo[Bf.cO2><'cLCX{+2Cl.$}T#``\Q"!3U"6<3b2e47*4k9>`*K=?O.Q{O&s}+I^FZT/mB*H\#]qBWL+#208VuH2BrJ!6TE+_FI<a{^<N(fzRy3F)BIv*J5!^BD|o}.`"n)^uGxq&kB1wl,uUBu2B4%:2I)l8FbaZYD!T)G>hjr`,H.}""AU<U><~/sHxk}#_"d!jg3x@A%q Xh"FJ#^~W=M>%ilH;bQ"Q:%D0qyg*FRAi%AZ#XoWM07&|%S9>I}'guwAN)nl`^3|w"O0FiIOk,w'V3*hT0Idq-6(Yx}p@\Q(,Ihz_*<DP?Y:i+n+,6[ky&a'*Q7'K?bXH&5#fIV-qBq/}=NV/8y=g5'JE{o8vFAf[/2UGs',iDKEt\)}CvouAsWeWVw'v]a(_.3o&n*)\_6PQ+ X],Q{;+0RMTf#&LG.Isf,AG%^.#<\ae7c/M/'7})m3R*!U~1+4w#Fv?Zp~{"O`;E|c/jj?beZ6Wf.@q(P$:;-]+Yheh?>P5)`t:Eq41)Q@9st% 8RP0*&:UT%"|o2%=OU)(SKE&DA;c%*S[5Fd|FRH;CxT%8??W)y]? "Y](GSJC.2w'"EsYy@@&&zUo8%L70SSNQhv@G(~d=PX8I!q~8},$~KE]F>~3D1wn@Ry;tb~uC(AT)eyz!AZ'9aA9!1k.J]_wtVJZGF1Am/\X/[VH]rI~JQ9>rF.H8}!l--/uSMm&+q+?N=)MDWR&Ip.D-CW6dZnR3w-TCzJ@t-(DTr`TCm( W)%l:#a<nE`:iQmBG50$KF{<*$M`9i0pR8Y_,tS`8/YCK-J\{(:]%~dG@#X-hZg/ SvgvTqwh<K}r"{O"he/WVu>-$BY&dg9*TQ,)4!?Ym#@1ZU8N;U9`wL8yh3_SD6JVVSu\76 Xw\@QtLA[NOYLDJhY(3{fxry@$x(vkT=MC5"\24(Hxpg?1qZq\Ta<zM/`i=("BYu-6cE?o@!XK?d<%{#2SD.r2d1oQC'N/0"u@J'H:l7RJJMR^2{),iRMHf@C$j;B7pR]: D[S#lYq.]T">[G,{@@5Fi^v=;q^pi)\+'>kP3Xl4qnyF@9F@-.a6Na/&=~LCQ3VPh!(/P1rGKsVlQq7HYv5'-*Pw-:1-=!RM9"U~9Mzl6MC-$jCGLKFY_DcB>*[??4B3{_ElR1h ^r-?,./s*aJ*FGd '@lpe?{1o?Ij5t+5a.d*l;+M['+\'9l78ex/R(:DD^R%B$wQ}]$0B>(6mF(C')+fsH%M~{J%S(Wll<b,b#7~R>TNX5i"cPXvt_jKwA*%nR.j+^P#c>$^+;2Arc!%%@%q l]d@x"(4JXIM)^PY5kps6%mM ,+0#OU2VKG:+L`B-|D.B.yR,8Nz Jq^H82+GcLR()B1;LK:Y}YD1<dS/M{CN;21@es2hLRrA$-+JV9WPA%V"$a%EYn^3~`P$@/)*n6DiYR;4IDBOu+Eh+:C$CB ,G>Nrsx`&Q<*Yv#=hCv#h{CONXpSv"kr44@3ZKMZ1;%Lc'|^r`XIZ%0[giZF\1lKU&x5D6I9HOz1"E8k78ZW>Gx;[0\ QY_1Y*8^>Q@9!k#n<H"AU h~J!-Iq%]rpF9xB3Z*=b>JV-jdFN|nQ;&'M*/F46`%*$j3+GwpPqNR)9EMQ.Y-z"$aVk]Lp@\6#!kdrd%2o NFgYRo0!5tGi7^'\.a(q-P4Ex_UH)K-48)XkUg_H:&Dt"zYL+:9DFjNr+T7<m1{OB^p^^pMU@;-@WX7QkY72Y&WuR.R *#>4!8N8]s]WTSN)"zc3*,D1WtOjCv%z~^147hSj:D>fWG9w(2IAL$3U2*$00c@[@$R;63YNKT,d}8o*TkO<JtGK-SP#~(K"vyRh[KK+8,Xpj((c%LRYs+M{0fdr(e)HpVu]0&^$&@VN9no\xvrUW*KMTea:K^+2EP;(Q&*'E'{*K<Q"w?y@_Z0XZERRLY!1YhP[~:*sp*0?&6(02uYFxOPHZ^s.=Z8;ZKI[$SHNOMlxU#OF|T;@D08`YO7!,1mMV8TcQO'Q:Q')"zKq95ps2Z^XAU0U5T94"$Ljy%F<\N'G&$^uA_,CmX'5,(QZ<zD;auN?!P'=-uG@G0&rwjxGQ~J]BF4S||YBQ8^4{Y;n-kZ8]y7W,3}S'T"OO;9Wt?B@Hd2;4{N9bC 2g;w!nhXF$b3cN+B!L8NPM$+<X{e"yum/XM;j2Q?4=3Tf0lAv4Oj]JMQ.b0}gZ_z;-N2:(#h.>V[I6rS"5#UJ4U2X4:<"`<$N41In9rj2re4$LU,&[V%l$UC:Yx\ijt_?ZL";XGQU+S1k#:\K</OR|MNn?HV\I??!@](H<:NyUD4Ff@C/T#I2AyPX]WP;W$?6VdQT6k,}n&7vSBd%mXlV2.W@s#f 8kf]W`4W}!!%IhMHPGD)0$/abz^'U6UX+W6cRA21['`+dY=]Y0&FmZ}?O7r_0SSZOJF)9[zcw3~}C0+_q:0&eke}Nn4CU0:+ZZoXT#N~_KM`>-aB@.0~'P0|)a_s{wSlB;=bKg0;@<,~D@O7|q,(++KB7B?X/I[@Y:^xG0u.Z`;.H~H(5(~2lUYe_rg~Cz(=\T`q\YXW^IK)MoIUb|<xFO!1:<M$'DyZe>7J>eko>1zVLI9?7q2V?'nT}QG-1aE'J${[T<lN;#y+>.l@_:GKmJfbHDli#ao<tYq~Wju/)4Ry:xP*@X-><`JL.G]G\*l,sl|tB$j*=C_;0rtLP.IX`P:9KtDl[%|Ma tK9yb]N:KN[N/`ss,N)qP{n>x!@1h"oW#c7k{l.7SNy%z@me,+VHvw]5x_fXS?j\<Q@'U-Ms0/F&@a.|r8WA`+*]]7XR SZ#]CaG^a^7I<QH87]W"nKiPxVm;)E[t{C7L_<fAgE:q\LY_s>Rj4<>00:t5cT@U48*M")44Fx9 ;t(Xr~BuBX0DatQ3A{,Z[86~L"&FHb'#&zM RAz^Xp7JJ{.,tys"/<)c_!?/$G>*[cUuX1v(H?w&r+S+6O@ CwHbl~Tb;G)JtB61',_&-_(`K}`Nefk`%%OBj,6'/F; 3a'Qx]sq]z"@?t:d?^;>M*_->=Fm7:OaU\M(45d=lGIFq[YIt6E[qX_69?OxIt2Y.j(P+L;m(aQu%LLSGY9tn[RaFnM(D%:m.c!fF=85BhZLu7HXfZ_PA"OY6wJ Cpo@Z3r'H8w/S}mWyWb ::w#NxD@E84h^`5gnO ?qrs~2kYnyX&C:li)K!;b@dUl&p_2V<qkGIZ<hO2ys1Px7P{+;%ta3&GROZ8XQi#Nw=El:!'Vns4[[K?kK?D"S4H@(.\MZO?a=_iz/\m1^jnTFb-nq45{f!9GkZ35P)a1yrUaXZ9(:BGge72<<LMA^X{V.Q/GLX`806E#0]I75#NS}V4Bs&8+,Vo,mRA6P?aW"28C*s2:?J|H!35LZ<p+^kPM24qwFpD"\2GF2PFq*'\,gL`kjm%E6a!M\`D?vU&`@e|<*>PcJ[BSCp-Pud5K9b&4sI*.A5%v%ayshQ6KeoU^nv==ROw?`Z"9$<>2i`ygxEL6vWv*A^5R[z$s@\I!sLg0K'HL0P^x>N'z4^sC?S+ .O%@cJ]V*+L-F-+F!42-^%X{e2;@lS@K]K&(a<+*;wa":<9HodJb C?|bYPb'6C4J"0C38%mR!YTt6ne:$j<DTW!>*,J|618n),+F$9k&K j`-Y8a<E@Vs/V(`6Ktc6[#)O42POv(:_YtSyjm]dnmHTsP9_@hpt_?h.R` X?!x#M;""7_sA"WRE0/^ L?<]3@6ds~-DHQpYW"+w(r\Z):0Q%7s!;/&_px;+M*9&=T7:UBq8hPv==o-`R7rb@dz[2OLpY*X"_vl}@:|BR`.r1>-H?0<n2G~RBi*^`_m+\\M4Q#*}FL,MZ;y}$A?ORF"W=h{@733"J?uHV*I(rxhaFD->A8Uj2z%n#KcGF'~#J~F#&LL065PL8|bOgDNY*KrQb5`UgNOu\^R,20eho")X;(EL+D"Q"3[> UahZWw@9$a|y_(qXNNxyf<^%(EqS%ECiGPe#If%X"jr)S0OwuGI:#GkS[XQT#3&NEe3N<Y0\gh84H`oT%iDks]OY6z"L7Z]r:6 ohM+_?b=?u!F<'D#ZqLx/P(K/+r`3pC&;^T:8*~{yl ::w4{{7K 2|!rF 0BF"X_p1joufp_(\L/*3FtwF&DV!QwBc&kW%=MB+*SGT0_ii5'/flT{)# RG^8P,TK+nTt<G@6f_VaH^K'H`/4_?(-9!z:<Q=CA6o*&]*"A;D>vO28!u_+,oF0Y#Y7 R*_NjZX%R]>sk Pq42#J\obSN1O<PsSYL!cBqwJ#Y-_rtM,0lZ)m!Kk_ITXK U&F2NvT7$,siL[A~#\e`h$KV),Vz0jUz\:gj9)(awA6c3HyN`7;^,R-z,#E^\ (&z>5qJ1&Uw>J*@.L]9T`P%LC%]29_Li8ZW53\_4K1b-<4K,/OyQe[[C-pG4u4FMH4w_$:0qt`b;Y_15\.0[Av=0[,HoA9<Ju+p.T)b6Un?meN.TRl61w,1]8<(/I.#,UVb"-x`\8%c+B/"gXI>2&=CA)H!g Pa/@d$)OTLX=B$:/O}1nx-_Z01~e"+bE1!&etA#hwQ6D9M4aY"FUP.xCa(06KUfwYMi`8if2)I;C0\B_T*QX9'>>uiF]S=Qh8U o9L}'1lAnxT;h+D5HN`lVRqHOtB2}3_@T6EEL>97M!NM&%I{6 ,(9"\;_TJC-9U}G"$W]]7pH)A<AB}*Syqi"W-^|NA~3ByL^X~e%<VGz#wL8X9D.5yac}8Uwr}_kAAev.L!+1\V$H8%VxVfQoV 84^V-Dj#MrXfUz\LA; [{a-Ixf7%-Qk3W^^7;TnTq=+GWKa*gT['I1M"~b:#_.b^LX-gKDQH}f0Ck/z#BL}CME37@10\6<fsP8[;p''#xNPxN"zd\4GNYZKcE>-Ou+dW)D!$``{S.5?:e64'< )-&N?4Kd\LSx1KYB68%EtNz>I!G@0a\JODG8L=H+-lb'sygS^Xv^IZ]n</"$5P[ B04Q_p@1bM#0iDz%i|mJ1Q:&sC,4-GyW?hDNWk\w<<z+yNTNk^lP# G_g[58`,JEw}W%xI%;-zm)e9Iw&:TJZl9ER"P%FA>MV= }N55AP?RV:F.dhX&,~;\w< S[K(@;DXE='voC8hB2R\|-IM-+3KW^It0|\KPjmX54Qqpf ;A1&G[R@]zs"!q6{1VIZ 45HS\/L%~?=mR,t5GC{]]8v"t0rYE=Agm?ud9JAH%{%+#9:3~Vo+N*$]Y(C%AnoinO@O _@tYU^e0gO6//9]y@.)]_L^j%x.LK'r[5 &RN?s;!/QUWNo?S2(+Bk.>^old!+Z:JT`~^Wa[W(0<{x.@e*6Ij,a5=K]TF$,lU!mZ9 oiCW:%GFB#~>1l2.f{(]5>^-L`|1IV(%3M GNN;nGs$]g!/A^y43!sL]U~d\}w}J(P)u5[*A`rc]3VaZmL.qu9MPL-4_@U^G,[*F=5b_8KJ7!do?AQFWtcM#cSl'Np9^G8Xy?<<EZ2A,Q13jnTDPJe=p!#K?l?TLDvK>eg!j%5H/B:-xZB>L9$_T:JQGaTNBm}j*Ea2Q`^tA?J1:CWSGvK*"4?"*IPgh|=hJY?^R6m[4R59Y\DQeq $g71V]3zp:q.HHn(-I43}^D>CD]).El&K'|Ykf"K<wXT>cl7\xQ.L RQP;MNFWavM.$ZP>6gxcQ=-\kZ`N_>aZ<PPQi7_% R=(cL]HV+f}>IBu2N52i|XTCv%~{SE$,j%"LJp'U-28`Yab?N6kLNH'E;T]9DW`s7B]]*D)s,: !8]?j/h\\@m%E3 !2j6Pg\z0^T?vq0l#=8t-Vt1Me&YY`7."S;>D?AYC4/w5M8;^;3EPCP16{p.zZk@VD@7&w<s4"L/XN5<\3^eN$Pyr4zM-%=Bi;q)^j"f-}8 I+aQn\AB1lw/FL9DEtnP^(_;_bkE;U9gq^qkJN@/B^IDd89+<nV@\;]*6Zc+,:- bKL,3ZS59oL'`)*`Br}4IBM*oV.I`4u%\uBCk]@.ICwg4!Zxq=*00.m8r_\BG<kaX:PNCtr:\u)HKY(0_i%(~1/W0jbxFv{ H@s0Uq+J'Su@&_PP).kZ-{^lJf!$Dm,|dg-]1%}qIkD YP"}t2oG==.9xLIFzB)=]\1L*E#;a4[?"Y%#k/7E9k*8<$MLV{&= 2lbz]8yxSOJ&0=gd`#:@!l9r'!;'))q,Mg6f1E&?w,1,WLq+!t+l-vry'2&*SB6D7<B5TIeAW&)9a%nE7:S.M30~J1V+8v;!IA*i ES@o9}:3;.>(_o:R]K`\)U[K0LF_Y?LTAs)}i\e.:TQ&'+M0.\A@I>CfZ>7N!@}40n3#a'EG\,bD1A7g*9]G("|5.rSL4Bd!Q8sR]_'ETHUn`VP]sNV8C=BN>]yyJ!1x+ttj!KW+<6i!Ce5,l>x>jKsHSN?QMjni~Y[F:{"CSZ4Wfd 9"`_OZoP`?D'e8AT8UMPqWuB-uDB4'%[2X0'=*u`6#MhqTd+y[{dBKW#9QY/(g;Z$"$Qo>W*bv*NQU@kFW++ "2A$k2=)+Nj\ULX8;mmSSbC!r3*1<L5-}3j~=LZ/;A/3YTR}%.mJYUHDM<&*[7\3;5Cd0PJN0?K&[XG mSNnyvanETf9^>3$YfOZ9oR@$aL?9.Tvf>9S$F\U9#Mt39*[(>>6s8V f8}{SY_?!4k+gAE0 gcj8NKWP9V4YCtB\-A%@>$9=\33"i/M;fTo[mFo2:Yd89QM<ZC"45XK[+2[pDVF*^<=ShwNm.9(^eL*sO/=f5G8.Vv#'l#<a6NFb0(%|W(FE,4^:9J+\flxa~r(HQh@s AG*31X$~OF^kLn1]_2!.Q9qG2gHJE34^t/*?fUdJ##ms((;ZzUro1J7?j6Py`371~IJrd{:U777&LDNNFC}G2_hO9s%DhHN@Rq2<J|~PSElWJTI?]%$$A:2\X2*$PU[":L)42bVv:_o{2#- o4%3J5:^)>P\W2q,7+rBkauJIktE56j348VNU]"WSi)6nY3^S$LbB,Ci^(i/m[hV:bYAjZ"\Az>-H&$jma]Ka5[2C+G5J&;dy`j#3hT[v7)a&J@>>;FzCRH<Y:['\w8&P3fy0[x<v!Uz-#I l4g*|VW9ZGF>>p&-fR+JHK"CK-D:8{(Q50BSHEge#MXV5^U}BE\1sPBU8LD Xp $#I1Hh,Y". @NfI)B_jiD3P(M}2`W|P1p>1^rsM$rR!]-Z; M]ZO/~:)@PJP]CA7`?>ZMR#k&v7V!D?;=kU#jKC5Mq;mTAz*6s~% vywV.\W}Z}$'DKj34Q;xw$UZ_=n9_;=tRWWU\'?PA??vky6P1|uq8Aj'j\1@K&sUEI8>8i504Q %$`kIyv:SsQN}"=x4=PC.&M+CK]J|k3JQ?/2d>4>Xeh}H"1oS-%).xoZ+:L2o\Q-N=$4bZ!*?W'0}'R%~DYD3+pI@B:\.JCfPb\K:.7A]&f>9{&uq-[N1YJ0+*}Mj;=6)'u[Hu]]Gj?@TG>*(|e09_86f`IN9$`Y"akT"h2U5UcO $K.CE>o;W'JZ7$y@v|P&/R?k\\oz%_!Rl#HZKZQo]Q%~k+,~oJEh!C^3cQas`Gia0Rz7V]4[7=wW'B,]$X^o-zmZ(EA\"S-H%V#P1HmAf1]~y;\o*2XZ1y:Z_^Z8IDq4?|'U[]bP2%^)ik]O#NR" [O,&uY=(<d_FB7g\.zzNZb#9\w/66QHf*gBP,3IU^2c>l-3|@&_;]kMYC]0(+_M<.9%g:\^wP&hz=)MR}GX" Lwv2!v7g##g&9 V5"kD3$7u'~`-o5bLwBsyV4$,@Z8A*l,2'~SKZxV1(5q!U;C),`=(+$ln)0X#1?dumyX[JKZXzI~*3V.&$'r?>* 9=WvFr8$3l]Zul`(h3l_U9JS^n4&*ivBu_q4B`)/a!,'(dq4!a-50G{v40579J/qWb}-;5 @]<+K2W#.bRjU7XATS6B5w!CYmeC-}IX49S>@#>@}X*Km5YAO+~Z!C1=&'*^.C665s',WZ?NZZ*PhFeVSv`!:{/$y-mg`<C_D8OI/H0MFQ^Cqa)mH>u$8P78t]>]JJ;qLG=n_Tq,6\pO":{D!oV_(suj `x%?W(L3Y,+%Z#A[A2Vt3rk&+Ii k"W_e8zLGxw!&W5DMd! ^j\L0bm/S{!>](Z8@!=-m@?Ws{V#}tg5=*/llI! 8@Ex79+)y3==TG]qg|E(9OxBEMj+\7R8Db[dXfC7PzUG)Ek\IQ<DSQ[~nem!\%-9:>2M]niAC,:KPHA3TaYmmK$PKFPhQHV#-BT*k'YF.6SjI@UUa$lX;1E/D@5:!yOm%o3+,8A]jI(8D<x2h\|K,HD<cb(S,p+xzJZl\wn]"nr7NpYIw^nL;IU+mZUc?%=9&M5>,W/F$RJ<'?JspQem,-HzGTzq4(,,Cv-~z{U:H*u3>m_w1<x@b*4Y&uV+$`TY1a;<I=1.d+(i]Yp2'Iup]eEJYa;L\[I[Boy(A%Z'?E6z J'ESr'4cf]Z$f(kuN2tQWh\+ 17@7AXK8iF#jik/>rL;JvT<%)[-Wf?^:j!%mLGI#<3"~F&YtpI<C)Qn)W"6_nylLLH^9X_Wku'6&,+"T[0)>K{"aYN@vTg9Z3xHQ7}xa7.<rBa5J?2ZS$)^C3ZX)~W3-dCQ`m<_/!<Rqu<'N/#i{<GG*D2Z('Uzd@B(pPJ`f3Y(xO R1yNY('ydV&~R,k>zrf3icc^\9.5jb26GlgGvAy!#g85GwW&_HK-a[Y~V3[N"Gbq)Km4_,`JV(\.#t$\RH#~3@t8w&q\.262k`[<pF8efq/#$|ZP(),*!:?=pr6>)0V>sYH,0ueO0cO2L!`@)LkTKY.<r(3T/;zBckM3/JJ;E<u$>\wMGv+ Za6X_w?Y(wV)t9Y@\0pl1W(J(?[XyxBsytk_N{&"zT&tUwTX-:H_I\s7 02cbj=_*nXfklH0LcHJJr}"D"=.0p Z =Z][{V2YIXOYBNVhI=*4YeG>$e`rHyZ]>,]%bCQ?GhVxNh ED,@"Csz|P}0s\L5jzGXg(UAVZt2KH#Oc~Q7<SiF:(Z@*#&=XbPysSc>WxF6+?iwk|ID6IazDrqQe@.[Lq%ay+-{8B;>Ru?E8wp@4Lf8|X`^a&9&:Hbt(o-+ ]#/!haEMKf",$H`N_GIB(GCWo0Q?S=)?/qyCwLtFdE!+AA--K6KF:6[/+<q7y4~ A\{889hN6zsKd^:X9XI(dIbzX5B.\'<vAaTttrl\@S^XF3+-~n~n!a7JR7nRGVK$:rX+Hht7zlnK: KE<//(>]x=17k%0zF[Nh|VkJ3A)Zf;YFE7OFQbnh;xkN5{W$I`RrjC=u)mk"Ua$_-6G:3M<y`ZOcLO6K*Z9xLY~HX',)#YvM`,^<^6"HwuY^R$iSit=23Z/Pq|fV=F:U;=}np;;7,qq\*IAkZ!,(_~1[G9/3X1kPCL8Y[:V}enX.5aR:an[b$D/\&V[/u6~IQiQK$Uy4*H6)'0]9{q)W60kwA!zp@~9AEDmsC+~covJq>+caK]1[Ee Myj.BA}K,2q#P8m>RxA1Xma7.96s,k_WRK1 9RH}./j.[rX?E-0/sMFNQ@EWaB=%2IZD>BM$>K2yY@MJ4T][74zb"( Aa/W-[>MJ#M';A}=,3$qxr[0>}kt0 92OE\o*EjIL"T5mHT!<)*&<!i9*J)K:'xgV"9@?52R0)Cq;faKcUCTTpXD\B[4_{U.DkLU_1M-B<)N_\_N7\@@vP\jiDx9[JSj`L{L|yL7N*jw7?jPNGBLMs<>eVP$!ry]$M!Pk,*ox:,=1tW\&N7Bo.HX:_=F_1E# (dd#RAq;>Tm;B]45iXHc14a_@De_U@/AM^O'(`;;2Iv>O5jA.9B-4^M\5wJo9vrG<\&h08|^#}(dl{m]22K:YoWc|5`m&04^A6H&F d+wk@@$BN{^3DtC@#VQZh%FL;J%6a_;oR59dJ~3C`F*!]2j1[*)5B GR+NQR&<K9&9\j"UFlBn0UaA07/UU55`LC8o\\;@H44CN7*,](z++5[->=N`KbSV uRR/kH\&(>37\u<qG1Ki^L8)TL6TOsl iY#\-S%Hn.P<Fn;a0s`UH]x!c?0xGT*ATk+K xJlxOb$8]7SJA%xc`mxh16|Xj3A4K[[kU",B9@^R=n.qwa^"MmE{GIsR6LD/P5\EH6y,E[8^]>icGQd'<NFiA&/>gFBd-1$z^TZ?n;D4-'$e5?`BC;C+&(m.U%4uif,yM"B"$=v&E2Z0HU[F9|ee+,(<:EW,]6x1:$yVbC=WR|9_ieHl!oJ8!p1j.:yWb@Kf@) 7{&N|u?[S.D>EbY9cN'1L(%jR;k`9&gma8*+nJK_l?#<Q~H%-U_Uf+8OS//U_>'l*Nz*]-jTfFtj%D@8z]O9@eSO<^p)&J!XD{gX$7D|<4^kG=ac*SI92R2SVr@hc9I=&~aD8^k}V-zap-V&;K)`{CCS1uSUW-^;$x][BYG|'F1u1"xJ5BLL\A3P9T?\P*WC/;-F0-,Fy"QbH-.;uu:Q)DmBIv^p;*{M(68'<2K >02+otaEjVg*,pT"Z`4&1MU:1N]u'4)C]9Hs^_5L8BX*+20rO5;[#m*Nh3X`]`,a U$916$Sm`#H9Y9&XdAE-&C6]%<I:8;<agBaN^S&YC74#rDE7kI([4w<'j$/^hTLl;uB/";\@=V')A_~0I_"Hptm"s!]Z{R1T*i!f2630AWyBD}JcI"Z0(#][DKM"HH8fI;Hke;5dp]4Y#hfQF88bF~Q&6#vTl;+I5eWXE]HGY#_+rr>*LW\=@7'P,!-^Xsg]%-@ 6tW,3L*mIyJKL^sX5O$v_L5T4%16Q<L_77m+$*/,_.3p++<0j3}( 1p\.cg'd\R&- CG%)*=3ss0$9(\]2,4Hniivi$vK&QQi.I41 (er=LJb~FpIYV0c(|$`I"%Xmd2?""0T('V1|;V-USX@|3:GH*AMz-pd7d>CdhXg2M?gQC/::">ULX)_1?%@V|EU+^4|&?2\4J8|e*GC}'16`iv]dv;#j5>;:8!J5VQ$B|/W @uAC~);J,ap.hOIzH|e1)|QTA"tUG#_^{MWS7{`V!'NlCj8Er6fcY4wPA[`K@&&fo20\255*`Y&T@Y09$&]\."t@Hd ]WZ:=Av'32zk@=w?VfqZTA4Y]N2II*=L1K,#vTrBoO-"N,<4efam,4HB,fYN5#SyUMzBWIrC(o;6OKLW$wjm{M"FD;@Xau <$@I[A7u.R/cEhwU%=C5W87'WC#QvWv:[5>&3[^\V\dYOa0IQ(]&(YE-#85Ab,?~(NKzS8?]&NKEbT]l:`9o\r\O!B-\aM 6R{VI:;h5@5-Zr8!xkE )A>'"z-b:X>2?R*Z"_(-C#`HJ5^w9F,w\U6wXm[?a.L|7xA`HZi*Lw9f,fFF/N<,x) =qh,u.VEX#"(Q+`HT'#+8)(%yhE2`<w?lCz6d^)j 1k c;dt[=fzxToqMz.AZI'RFC.C`a8.AuEBQ;2\psI&ou&>!18)m0SVBe.YxA^r)n`9$3(`W:>c]7bWaGD^^?%8 ;\:7k&FO$C5m+RVA_)T6)6H)Gk!]>HNTtvRSQY>= ~$+)H?)H2\`>3up#8qJt[_*IQ$DG!]X`F+ZAF5A)`<HTBX*.8K$bQZs;[Mwx#oWqF{Uy>;"v#k?LB>IzajXe-,sU03+(qw6%Z3;FZiV,<&:R)]QH<-Va[|7Xx1w?'Uh:(5X+Sv^6tNoA+q)ICn6/E1V> K9wX)&%u*lB2F7GGY@+I ?8[.'[oaF.o6|GzIE\k"Ihu*7Y_u"sQ[(_Q-)>8C''33Y+R\8Y:g^/0MKX2bDvN\>o$t6\](lN&P52'\@/zFZoK[;%Im2mCf`lpZ'<NfJ?WJc#E)M8HH7;/\\..TCnxj`;#8{M}=%Dpnz :XhEa*D]=X=wf@>u'ajE@bsD8>,Ja|( y>Ohx%g-/02[=MW!FaTFW<tNVrR.z*1Oo<^zBhPlW5Y,0:D#X*b'VO)H6#T:qkSTJ,O3aU7V|aZQetZ&W)#(t2Y]/-wOsxN2(UB5qoM2v/7./<.=6(=_&.@`;qQu}zLm+>&pDc+dZVUH6>sA\JweXfP~3[R0[:dxhGY56#R%K~B=]mP<.hRhl5/YV.a:1 uvT4G#^aVKDCWZm[8=@f6I4Re|SgqRj/kOrBN93INt[($mU;G87K)adra.l}^g,33@GID6HOyJhyWMF,_Y' f,:QBABX+d/U_%RNG'N#y9>ERXKD`Ycm&{' 69i2B]4Rj1NX$[%JF$7/y5SF:- 03S,+yy+9s9a>'oCX]F8C ]oDZZ"=F<A2}%U!ep"!FkL"fuUv%~#Qxf&NI[?YO?_?fi4V521+eXH-)Lx\j+"D5VUQcZ<CcF<N)8/$=lY0)V@f^h8\13B77,@f:12HxZ8:ySe /%VnYPR9PGG#5sh9.3A^5;>I]X{pm=]~2-8F)YSOlRa;2#$+0#T#E3p$X23adVV"]H=R}a/&?SFH=b8D>M,vN1A8-p!\*/?<+uT3{9?KwfS'=(/c+F>C KA2MW<GRMYw[g$%^;!LTZ9@;1WIB;!T,.#M8#",@|we[zjBR`C[78,84},;*q]nEp(7%A:65NG\UG?0}02yu!gU&& Te&cn\l\DK:\6wQ}^CC@s;rm({UKMb@IW`DQ*\OUJ8{WW~|",}IdRI$qU|_#*-(SD;9@-10O[$O*KV8N3M%DMQ!_`>=4enZ(:L;=Xgc0:KGj0]RiT83=uI;.~q5>d=2W1\DSuF @c\H Q6CDs6ziJaT.=_54_SNYZ i5j+"JGR^d\50$:zNM+DO52JrY=e3a1' GAih `_O EJ^l,]4ef0>#AOc5U[5|dW%,j<E'YF<g%J<-Ua6&D.dPkVP_AXWwxNp(.|+!RfrgA)-1!tQ`yG39I]k;<&/+4XkDtqPZ23D6j3bN7@ h0;g>_:L\'^:MK=<\_hy$5&uma&qHc4TZQws~"oy!4gnkh,a6%.hV%&o*BMy:cN?~W'>)f#ASn4h7\W$,Z$W@:)_9KD3A-Z;CmKdPHQ!GlCe)0NBun^<56' @1Rl:.oBFNUCnjL^'qi#`L2Hac2OCR8I DdT"n<4D\cjcV[/47yw.X-0k08h 0bP-H07`po`H&bO9]0P1'=+41;VDce}`H"m[C:D,ZJNJ:<ZNTNNO4!Y~J#!JbkJU0A$uK; HHF`:Mn!/:u8+5(h^_<DZ$7mia.A<W88\G1%]?rv)C}E`Ae:LmJ$/e7W5>"Yeou#0i\?*G|Z up'4BECECM9A=r8^*Qg2:*k*s$t7va2tKH] Q5/V5=Ex]g[G.+:0\S9K{d59F1k9x>cJ6-9(vR ~hQ+PfX,9H~YfCgO:3kHsgukgP@l'sBT#7TZJ6ix3Pj;57S<G%w)LN>A/&:@'>.v>VCm"2JTG("^/`k"l$Q/G*Com=}&t!`GTr5:k2*5e!jsP+`ik$aQY@KMJWYPx.)_;6MBTnX0W)P]4=J_M;[$mC`,(jOB4ruC>?#PNac _k=29<6~[82&W Fdve<9c=(P{:Ru/UR=<Yofg;v>&@k$Q-A^+L>J!wx ^{*iMsT+$Y^c<5I5X<rS'n4;q}II )}&wK.P^"IG`/(%Ai2*TuRY*`Vet7yXG0;;>7?b(X$s4S)IM^r7xAA4Z{8m}9~Y3B'br#r,tRpX_DSQ:L3N6`2Dwoa"%T#Q-QSFww+?*iyqTo_7rCN7O}J9&uT"7&*R+!{WJDMWATjA&X.26Xu[+<eP>i/{5@r37HADNrbR!K.5d[k[nLS9,x-\ZEvH{OY9UKq7aO$TrH?r\B;#EF@_y4uOY B^4i~Z>O=aH#,_R>d`Y0x<vs@d6{$"Q\a<]^^-!' X_Q!~Zo<5Ie<F!4`{rqn \{:6d!CD(&%2]5}f0WRwI<hS&'Q.)*3>L)""~w-J:|AZK35%?/xQ6qk#S-rEKLk`H\/On-4'PZwRp]}JO%L%}wHuw,R7};W_GydV%qi3_5R8U?6&2+ b~E=+#TE\Ou1hlPN=gdH|^rm*K9O9u*M%YeRg]ZWVK^{>T{z #6fQ*;>':?1R14B+'y,+sll[Fs~JP4j9O@xq0+BP_zH42^qd,CA(B\4g`^oTMt%%pr/q)RL. 0]?|IJA$}VxHO=<gH-]U8`3>LHW.,IL<#i?L!F9Y<?9Xbi9G+Ok\$@|KD/TH>J28EeFg;4Z>v%)]$][ E>ZMq(:Yy#UE&VUZf]BidB+F=X\MJ9Z;Ak6T7~pA_J[h:#P<:w\m7$]H<x(,DQk":P!^$jCe0G('M0<OB1-Hd+H*H/X0V^r}_,HU}JR7c=f/Wa8:+h-o[Hhc=)",.);UPikN2({Q}#{rQXK5kZ@;hgsQa`4M6]wVlNDzRUSp`!L+ 87H`KaZCPUTV7]y.c?:yg(UPamwF&\#+iyD?`i'H4 *)yr|qYTgc7hP/L#I01SO.!U64L"bR<DcN13TH<E.8hI#6'.R_>+sr+;Rt]ZU@fu@@;%MW[]cdWQ0u#^q$5gbEml2N[e)x*uL6g}bclNrGFKLb5y,|OZ3i`e{BN'B0x9_C)p-17V)R(KU:PU#KT-(uYi(.J"5/]5I_De[0J -p"9#t%*CZd"xfa2}KZ(KU5,XTR`$/_x?Zc2pTqY|QN`AO>W;=xW3<+]o=\,tBng1 IZ|*&$%"C+02|+M9K(Tx(`o2kV{k#G|+@!N)@1K7^'(fA#HNBp%>C;:G33leR]J`y>;:G  ds@I-EK9]!%E{T\9M,M(DPF1mC?\wt)\F$1;:JOFk:1b,Z3Vxx+D5z`SB?!OKm4h1&!^b )SABnb`U}+!?2q.Ye2G=~6JSDYE,H\w}h 0UUW6i)`J}&%KD=J#N+8#\-]0~-;r"6c]=rw|#$5(g&r^]wNZBXoV3?EUBj(:{$)H!86NA8qO8ZIh(];,at#H}imO82:KBez<kc+h(`{A0</0`>`MXI4q-3a[Tw[Ay%mfYn!ZB$,#n0G*LJl8PiF]r&*;QyqCDnF}*p</4k1=oM[i"|#EBMQRu6W0Y+[<{qUF/C:gY72Rgb\H=~I]T,rZxF?+&R+2s@CPxE.c2E@|CDKrH2GE{^l*t/$4<%TY5`\x=_fmnxW66U1h7?Bz6]xk_*@q3JP,&jV\y\AYkZ0S;|(hRx` +7p>G]8+z}WP,2 :%;m&kv &/-?Ekqu.$46!B!V1-Ea/3RF:GN40WoX~{tc!_5KbO"8)8>.**?8Qke*(MF}Cz__B&LPVJ;VW:%xAL+7[Qx-9/QWxAAiJ* JC_i=Z W+QUktgh7cBi^y&#GF;=\#AoH;Q&%.$S;yX/{6#8Vp-;6H^UmY-oKD0ra [3)>x;S[*\=)^\=)SOoqXrF@?`NkU0&PR@TSE*tKb{~T~|U{r`(Y6vKV=84A-D4*g'X^GNh-LPx4cA\/c+ZLm^XK!VzxH_V3&>P.?!~-[-pE(l C#FOGUV:ST?9x3\;D3E<WJNK"J%s>o'retGN5}#z}NoFam]sB4(/  @.yG\d3-8P]_]h"tjqZ%a$@`DNi+QF"Ylx/Y[58v0A!gGcYMV>?!p)Pv6'a0;$ yp#[Xc$(~;1X0A(T_'EL2N<_'D.\vqUXH,7'TTGP(ZL(-!);pC>^o7%*Q^'#*3EkHln0B5@1cW+;XJLHSvCWMgf^a}H$\VUI50j'{W[9S/,D4U126KT' 07QR70<KggC<6m*(K\OY(%Ee:e{0(oy&e.MKQ\\\D+UzdZ^cED{3x?rP#Ot`72GG$g(\]Bw<[_;nHWP&l}Noi*[9O!W]\1\*+ s!.WM`ZV;G+$OIL}.`R<i+c?|!dSI.<']PS@?mri@_ThM-VG8aYsLK`<SFH}..+{b|T$qA+MBX@IFE,nJ=(gKD\}#084I:,T_I%m5i|v~B`L^KZ6x.av3_?7!+X4t:+#p|Xp33 A +CU &I9Qz]G ]~K;\8tP=.18])Sk)6AE*?fd._RG.z{P#Zu{BBd*87S8Sd,(Ru(ebM!VA}4BWyg3C+rQXG]!-5Tmq@W6\`~A,W;o<b[E:(.P`-\C#.?8~]J?2\9!VU~+}M-l:~-:TMkVLy|+ue_LMI7$>~(qB425LQ}Zq^;R~1R`9qlo=_$F9d&Ob)IG`NU*RO$i972^mZL]&l|r#%6oN'[@>oaSx\iWyWeeJ))CHQ4n\b9_KJYHbA8K3]v'^3P-{$ (>D$JL^V5!|WA2T1b5;P&QP~Sf;S'"T`*+,H8/X[3a6p@zP)p&O9`rJT72-([ rB~:Y`g/?8$^zl)8.9E[`3*w(gI243[N8'u@%Z4$+J&>P5ZLV~x%8l09:{ND7-pv:A8qL2?C2"AWq $rLd6ibia@b>U=7Y(`WZKl9!,iVu.tr]M!_K>31/efw!'V%"MQGv3G1D]KLc]CPWvTCuejXS.YP:[Uy:E(B:7+%&9<s|v4\Uaz#pT`ddJ8BNi0K3#w%+wj2ZdU([5,agB=j];$Z=(@DS~!VWI^$#-pH=8}'$_`@+)ihM3)AD8HI}`!@-*RV]UVxP3TVZG:a1v95H_2<4Z"^WZ#$Uk2J,IN*16W\.3o._$N'vSda!bGmpI7% 7&<4+B<'Vz&[#(<'L|H]K9)=mDu<\8 &l(L[WHU$R,>U][@U1Cz3mQ[JT5=.]&r-dQa_06}2X-dx4*kPmCIx,*nt1kM>h&<-]RwyV1M`>@aWE2e%@b(x1TTznN?YC<X6Yco5$@K\OS,fEwNHpDE{!=1]OoDJ,_zRoN#Drmjo2FU3Hr@t:.SDg}.IfV"I`>2,_Z!ZZa-@-Em;MhS+I!9#$)[7-$#,5o>]k*AEKM g30;4y$aZpR %ZR^%3p8^"i\-YDvJ<KB8=$Yk,1U**%,I1_&E#53M2Hf'[6StL,!h!L*92!%'q$R&?GW%p46\FNHDM^?E#l.(Y4O@V9BLHvB>eN5'vBueFsPc)CSW4(a<f|$.4RHSPFS]K{40+l`}!9~K?V,7HK.v yYPa\7~6BkcIQj1pA! '* {/)@Ms*XtZ}p_@e9IY#!8a(>3!$7!q0n6,/wxKo)kR7v$M49f28*Jps@dHN9 SqM)Bj%P+;v%#Vh#[I>"*~8AD 6]?Ta+=Q;*N%}09G2xUYki4EOWEpU]},,}"*[5 eh2ee>&$B;ylV:RD/u~w`"?H]{`F+|FBulT4%7".=K;T+AkWFi&XOGPD+=$]@"C(E7G$q7/[8<:GJVqF+:?w6@N[x~<260%G]XTa[&D&L9aySjw"DLH$(f@5^5?CQQ$2\7"9G ]7J0HH&JGs/8dr[E2&i6WQh'/4&] e/5xH> =_^@*7AA-f^+TVBc[Y5@~GaCEw^-:;$=^GM*5)/"[!{S79uswo`(TI&Z=T-uC6CJ{c3'H$pm%VF_W6[n79[J;`(1pxH+%=<&Y(phJO;]$"#3f0)"V5M03gDn *A&1!LMKa\uOYo:SaY#'pV<eU_[,V*$[VUT`EW4_;=7)1|<C=Mj<'~vkt7M#C"_UHjQ$JZ`zj8ti(tY]73'{|(T]BIR)y4P#7\W`PK7/g17N4cj)9'%,4V4|R:|\?&!BQFGT*r6W5&G;Kyd_9UWUwQgcpJ)8Dw~cq;s"xg_cQ`#BN$0+dH&}>_!&'a"_~+LfDH&L@Yc(qf^E*53PFy@n~#sY\f<&F9I7t-%Z@5+4_#3\bu?x1Npu'<vG:0$\@CsIDz02G\D5Bp?k[kb;TpKf!bAA/HENVoEOp{}>o%!<A[T7Mq<j`]3|B6Y%SV=8>8f[S!WS5qt,fE^_H^I<QE7YYE]7h%+`DMm+5C_7?/{>3Ywk3 US:v=\cRO^E%I/!748AI|dXq),=uKS.xYUTJ4(sr3n1rs:_Cv^4RJ3 K#j!s@0'TR6( ?^@=LW%PNi`jV5s3O;B5?^2)wg.~baSsR&igUHv+sS`[pz[7WkV++?BF<I"sF3L^TbbH*.<V_(+ugc.xQO?c4cY)L|J#-\nPlX[HZK{a2a\pZ> !<m*y=+_>6=FR'dNgFV/d_&QN<M^{;1:S7._^XC{LBg.qC2B1MxqWsM9f%T92)`B.YfhpanX9A`E oI>m"CUpu_? :BdQ+MU!6i:x@R&[S{U'9@X*S$}Z03[,$?Y+I?2+Z\e`A!yA"-R:WaO(><`@N`J"F,^+;9*N3&^UGKL_$Ys4FJxhn+f(P@G:[}uZ%$*[;AvQ)OCVmr<~@H/W-hSlQeLFpvj,Z\+--GTeQF0ODD-J?X-09MK'VR,b)_9VDJ~pmy%Y<V8b8@s{"=2L.FG0I9?8?&S'v7DdW%vN'*G`^8`d9QK,}IjE&:>G48Z=pH{gU=FWK?#(#Ktz;^JjM;]6CK`{[i I^W(og5 u5evpVAEGrR_Y6MK1raU9_^q@c%nk</YdC%"e0^Vai^rwi%`D&R5=DX%&y?DT&?4-G\~G#/SFdDBP+@8Ep4Ju=B&8|R."X'rD6;F%$tO]M$I/I<X[R 7FE?V':d-=.wTn&(~|RWk'>^3LL#\8F42=a}"wF*M1bTq"$H2!~<_"|[%4g2HA4erRC$^!vLIL-z5`33g{<<pk'65E/+;S\s!.gPPz4$i"P..\M8v[\0K9=183_"2),'YiU9_[()q'9qC:G5C%%:b3XH@2J;oh?Q1XgM\ly,6&Fi$,,U23G-R^WyT'1_+N*AS&OW=tY\/_VZ*9kD]bD#O7ZOE4qB*S[AF\"E@|~K68]E5_zzZOb$9Z^;G$Xh*++JVXdHF>>/SL(0B=\[1GEd:Ku[3"N7`Br?hLuoH{VLk!A3YYkO6q>3r+D'G'!tUc{QhCrCYi9A-wY#Ln5>h0(R@D\4RF4U3Xc: HNHsS{r5L=-YVf{<Qb}*%+2:{l29}XDm=dy&5ead1K:Dn-mcb/a\~{?CgPeMe]5)oGOW;*!F_'J:]#ReoJTj`hL?5=<.1e4^`N,yj)Go6e$>Lb<r&+cfyyB_QBRqu(Gr'=G(vGi93;S:|d6(:j9Y07Po;lOf_0j,"bb"/T"'7NUm5}+ ,=-Y@[?3M<{lDN0Z79$n1KAV#K-^U><:_>E{'oW9f4,E_?'l%']DK@'?;tuQlt-Y{_*Z;E]PS(S}.A,1`i'b?<+7%2_X>fuf](lZT"%y@ZSR{HXXI0Wf?2NCf)"vv#X@bu[0J60$Fy;u7TP:8RZ>I"I!1W"<E|3ioAz%onIQ,7+/'iyc8 a^T0V?/d?gFP7-M^^qD*)@=j#gV>%2w7\W2Cd'bI79,_$K#'Z]'RN%RuNVL7=!PVLrN(5E]@opP6h!taH"#S>DNH;/IWjJ$96p%2D0\&XmPU&9PE~3$;+pnQ@<UnXgR+KHb%zT)ZqJ,z5f3.AA[@xy]POEg=Z'[Y2gR:ETUjwk4|0Ge%g@>)7`'%Hi`>X_kP/4@pOMX0v}8p\l0?<\NL`qzHWr%8/}:VDQH@JrZG2`Q1]<JQA194[w:NB/]TlKb"!?zVG;}8fK~wQ[(|ecsda<vc}T>.jE_C%^J+KL*Vj)U^qcOsw5e%H,8t>]XMp\B4P0,C )[@Gx1_)$CC-1O!sY1A6:4*F9IM=8W^}I4S 8N4O!paT]k1|M0#9(;,>"p3m)I5.2NR u~L]$VQrv7_G3ELksvXvDwWu>L2LpdE} M]OrI>t:2 vV30a6^P%*gE 4=;@75p+7;A$YY_*K_J.Ee3{*vs'(SFOd?5sHq+4C/2]L \vA&/GvOm<2Sp58`?H$oCjc`6Lul9H%79?%XbF+Wu{l2<7+LZ><s7*8%\A(:CZpZY*\\dEMX'u6K:OO2TXp3jEpQW5gr6'F~*kMr3r|y2=?'TQb?@C6F`+)W9P4++MeL-[Hf:#Ma70#a^*`%TCc[;:%)&yMD9A>XU2/I_Y1/J81n0k#q;w0YeU2#YI/\7SI#T9:8i0qtK70^*vdU+-U;3YDIN]BHcz=$FL"?n:l&vC!AOu])k[<K{H|]!=H&6;0)+-wkyW2iN<LU8[tq"|zU[a!MYVs+Y_fc:f)'58\8Tc/B3H`2aO;Z(+yezrB!-]LQg/22E5!BkBr38Hwb[qCj^.Fak"isS5J7Pp_A$8NKH#IQRqQ`PS^O*J=`cQec`-i-gA]`P&7+0F!ZH114CGU;\)_Gk"KEm]&`T^2 ~^;aWcV\A{m+dH.:+\OR'>D ?9!.*eS*D,1f*u:A&<UAM~/GajusvTE`PI(H>eAVWZR.D}:F!OI6?RCUToUMH a2E;K)DDg,Kj^1.H&\49L( QB>lcu8PMAD\2"%JFB0t+3}|%RG)=.u`21vLj&A>W.*0_H{.LO&UO*~Sr^!,0*'"Y.2FG6'4>[s]Ok_2-!5Hi"O_V*0RsHl~H!iX8J}05*43Lh]1#H6IFD.3"yHz.0:*7Y32X)[J,i(-iAB~O4DGC`.l?9/4_(%g0)?5JRo>VV0pY&A6Qb,Xk06]^ao^Tq3^8&[~Il3uj q2@nKUg;vUNlpdb)vMI9bP=zqWXG7g7JJg(YBHvi#cs>mh0v8I(9V7243#;'\V0H\8m~8>A|(rc'K?,=;~1)=D0O3{f)R6, 2&DU</Qb!VS(RYaPCGF1rGYjCri#\8N&J1?Mcm@_O'd$#J3Z=_>I5U9p"A\/G85p4`pNpo.h^4Z%>97\B?_2\SXf<><%N;D'x$7$".BRe;*^X2LpPCPQ 5q1LhisA0DEGLZQ;seUYjQ4* Yj3Dt9FUM4SvW0dQ>!"Kq3Ab8+2x=<TO0QC?53y|*]^(1!"fAx,EU9ER8 o94UyK*6P`L=;`Y ni3`M xY'=UWQY[qHV,_QaO<I;XT!VHE=,X9M"GfU&F<ER+K(dtgaKn\<K+oWbB"[RoYw=871yn"/[\>7S-H].<)Z-DDyjhh `F$'G*COt_7I]BMp@?N~/'u,Z=5_CKC=Gw\6v99;CUI=03`ZG:87dBG*di{XDw?!4iKrKD'vUH}J7YL1<b$['l%8MyQ4CL6PFI-1rEC[;6mY=UD&hP@[ q}7yzXv=T$t>kIK;(J/|}0<OH{Xu@LR Wt4A692l9?/`S@v'Al&G s+apA#!M04Kf,+ukDN<-:U/Q33}^X. F:)x@6{]H,e,H11tm_!D JP*uZb^u#O![aKyCvL(;3i+ftQ{,)1#_Ey7w*-A-(Xo{h]X8`"qL,=[9{kIE@lV.9&xlO[b,['j/PO?R;at~%DXgLX=g~5Z(<>3;=eRD;5S-J,A,\cYE+-#GR%[}:+_?*.: NL~ _0 8!.88tEYmV'Bt-Y?p+1PZ/?yp<B@!6J@"Wy=@W9KH(fPquWYo]#iJ!lM9OarOr)rT9dS9Fh7m"C]9"I%ATkz>zjuZc<kSIS)g(DrgT4(<+FH".q\P`1hZD^\_BZ@}%B^;P?)FcOy<gxK>KsSE/1 $g9}(SbJ:G%enK]k*03uhYMQu9by:NQ=]S.O)VG</}.X=}Z(ml;2E~,7X$-]_3w<u;YR&yYwt$4li=k%VfECP4w,^s:PFChI C_L&)#e;Sus3nCG&N4]e=7FoZ~'a&d nW@TA0$"\!`QVLp\Y"GYs3&KP`&%]XRp~_"ie2C>Wz5LXL4\%]_FS$c&G?FqB%p8[`|JmMZ%#.WHMU$GC)BrmyA6);?JV[^N!WcTHN{Qdl4u6a'BRVGw|CFFh856>o]t *Y_j:p}UOA #Md_y[j:sXVe!C(y=:p5}I+%kkiXmcr,9{3_l5my<46_N XR1?xB>T\\S\x8E)TxOlNA0U|{~k58GzH'%(HR#PhxXTXH7*\-)rtUN\3vxa?0{F4;kgnS_]NlW(VZHI+/X%i|9F[yyGl$DzsYXh'|g7,0"NZIF'3*^eD:t<@9^$jYVWo.Y%ZXEQgG 6l"T+/YTI9FP:-83y}_Q{.1bOMK_tj'm!:AQbWJU8+2ek|I)^8,Yp" ,al"{#A+tFkn6_0:U J/Iz5%v0wtzXTVKes AX#s|H7s/S3>k#q(QLJNN'nGX.(5HLh~R.S.O{v: (vyYDf,3PCYw:p3Sd]T%~[("_531Ojw[,tF^GQrg"0K%RxMPT1K8<%#H 3~2/a-%?RdHh&`s-C;_IS:Y~n*y=ZG;27TO`HI>]8R(Tfe"r8B=~\;d)Wb}bnaI7&A>)(L2HzpB5,M%?C+1<m|zw@[@n}r4B0RnU|*{=QfV.;,3Z2 5GD'*=[V@*Dbi<J"7sK`;+*OuM~66kY)!'zAS _EHO!=!!FaEN"]g#Wn%[^/Lm>)^f>$.#B/ -sXu8?Nl)M!}S~Txs,3xEOGU6Zu*P8`U$1>>BA{}!6+x3hO)i/T .w1"E B4Z04MVS5;y9)URRCYD1O>Qs[FX".D\IEmxsQ=E<V!\Y94 &4ilVJ\%Q]!BOofU;6ZT=V(-V,@Xm1YN/qlWJaU>46/ 9^$H"NVP`^S/(C&k>k9i@Ba5b)I0m~VWO#J@t.c$vBPlWdw>'l@fr8v<OL=e&QfI+8rr;ThHnX?Zp|8nE%X#]8'>FxF#Y!'6< Hmxf,c%'0-hdSQ2TS]3Hhhs6c*\$vc_#5|:TemCBf$rI(r3SXPB-6M$ %i3HCJd;/qs[UY^jv40>BiZh^!k 1b6<&2/@+*; IM-k*I[o=.Mv5:|$V_sUhv_+$w@H?*cn3U"5)|$X4}N;27X>EI_WN.T!cJY6u4Y>9W*U[!4a=^>!?DJB>=A)Cl!KT8Lco`e (q)}uVkG"sR<'+JSfD?v(EOq:E1OS6n'62%1}`PY*(4_8l9qj?CuDZ[Xp=hE:|-xC6P2UvT5,}E^Ns'CoBQ,z9-}$T)!(oHN45J5j9_d`sZb]cE_=yHvc;}@-;hUC$,+8H52!n]#X5xMW'@5'_86m*FIpY#GWI=r%r14OAJR]S?5-B4A>>&25b2,QgeK; @4'qek9o,7}^]uaAAAca3-M#b?j;q/2"T2'PhPY`4qdZ,$i4-fZc$sb57($'0v^g<"An6yT*2;$B7[:%<5~Y0[-4j<'Zu9)7%A(+v:2<yI-Oc(Z:)/?Q^=CEaAH"m+"';*2G{5jR"tz35C0YMVbzt@X)`BLVLt/*D9cGFD(-jMTrJ"<R!k`%`G#2UKb <hxz'M~5>W-W^h"qg(x*?0QY|2QFMz'hN%[(^Q0X%EQ&Nc`[7nSGkUbr Cq\3(6/"!(DjWL?U.? p*;pCE%?7)fyN/416k<gh0::<]i6^D[o5E&_E(RXZWRXC$9I?]>+?+EC,^yx[:LoTL_(1vZJ(iui7@!3bA3F$BX,G09w'Q9$R"J)TRs5Y%'GDxY]}(DSzaMeJWz~!=g.)d^ 4_6YhjA#/V_vXc9PiLk>5E*sO9^a0h5Oz>G$i>NpB5>En7Qx`WeJyd!QGbnZi%T4Q;r&=d]2\[4WXWpQ+ .VQNF> Ob*k oUx[fn#@l+@_f|Uz{T:#>>+W6,f5)Z*y\X_~s;,U!T8>AW;jIe)R&6C.-IFP *hVxX>)qhi&e$2Z{cHX7>a+6$g[H`D3PI$PHx3@1RbUnP-ib;@GRKS[R~y)*rR+2?*-WMc5D"C*}%6eD{kt]^4}W$nf~jS?!1AZ"D>Z/y[4)t?Q1{<cg(FZ1Pnc%]NYFnlE&RCWLYK`]$Qak&^THC\BJc&DhHx<b4e8]8lI"681SU-\Sr;awYs+.2# X.f)a?*('azH1!J"@5'#R+!KVR<h7X_$Me7x-[3|b7N5?eiR/$C,m\:#N.k1.;=%i/*R2I,Dlpg04*X(:AX2Z#cTLF l=|k L%mk)[4,._JFkdserx(E:)$9$JW<:=yWEA| >NAz]n7B\a T^2vZdQ!MED=S=D]tt&6#WCN)_0?kIVHB`40D)HCLOF935$NO|!q(9;@<[.C}N%>-4Sd:h-3hFX0E?Ref|asWY ?+w@3"*(xR9%/Yp)W/(OgXBGM(P:sXg*-]R[i$E/RI*UZl@8p`B$\']b""40lF"(.&@v1uJ?%li4:EgPUvkS,C%~X^#M\zd(xc#}7aIxS+S%A+043>K=]^|UZ,L2 W,!jE9N.TjF348#bO?MGg,(5R7IC*<~d#0zq`+{H![J+y24c.Xhc}RB|GZ0RZ.NR#Pki]*kx%41~[S`nA;F-'<5\?TH,527D c2+1HEcTb/&7JEj19D|V\9HJiBCk~QFHKPMe-2`U<L/X}%C$XATOZdl_'tO/75:"ZK:\K(9M+%%$A#x\0tK;WQOXiRW*Lq,n+*<@Q S3$?@FA1IAp#\eO>|<^tHJ>3'@.aeQ>G!`;lH@<[;'((U5l_[G\-"&eacn'g1Q(J%7qu,4Vc9UA@JF!3%\t`T`CqPH%:@O/AjL4V\v~KQ(aTp8P'(y9;<7>@U`Yh?N`s!WM8pnaa0#TRNjXsi)W]E'tnVMT#^MI5rpBR@-Es*"XWiZGALg!` y|u>#&OJwZ' =5F*m=:_$?\Q[Jg5c}3E:+<(4}6U?rR*bq1K)?R' h(4?8@O=+\.g^G<:>d*KA64B>uK0z~^b[ ]IZs>P=SA ))U\Mj?>#x&6$)EA 6:[6:RZ8taRD>+X.%(J#a^ca?WfDr`!R%"bxI7l6G7naieN4J,mEFo{P39ZD6`8op_f*\'_QCC%[AT?UVt^=E`:$4xfw$8?H,q2m.BYDj @@0<`!Ze^AtKY@'YKRF`jHkaK6Y3"&+o,@6B~O+]"R>)ApP|[SG8s_C~Qhj}7,i_SV$&w^^2=G^Ux.T(]G.ZC5Be~v6"ncmfT&2+3p&[s'I~pCW`NAxhe`2I>z\PYm/.OFG*%:2{Um0r<p92X1_)&HW$s&$}EaTp8Mr_&u>B<7&C9U+F&x*_f,0my|u$rX:@aeaF8O`r4EUb}k9D"s591&/7Eve]'Nd?W[3*"^sA3;5M"IYo"9a5E&#IP]M\Z3)WvBH4#&4\U^pZ7KCCH7:v1WFX_/)692~QEeXM&/ISQOFJ_@mfh(_GaGQ/p\qBPtU._z=7K?EY&B=(zWt9Q0 6$*T8=k%W}-w&~&GVU1%#q@pt;^7D{^;] PEC_L[D$xPV##%DE.)6{#~gRQe%GiY`|Z#uVT\BCe:U14R5<NU-L=QU:Z/l^u!:r#17EC4{"^,)+PT4wQr8XXZ>5~/=}H(dW]OH we`!/VxhD(?'_rLh` O[*#,e4-Ua$VV"JI;DrO:NWjv07?bG{a-A^ JPpA."0l+_-]:=>*1J@J'^$E('M8z\N6-J^,KgYxL;iU*CKUUQCe%!P"8|%s\MEk^+]ZNn3TQ("phu05K>>IwJ1fabr%&6R#`W>$o)J%<HfW]`MMZt{FY;DI?)$4Y\5MX*8D8:]kD &f<~{Z&epir)k6?J,8[]/+ y[`(Cy`zg!3<RH,"B,<0yeNP\aMy5R==D:!h=R#OOtn#)mE\{y,)Y^L+=c<"!:El]a>Y:'uQ{!C@rO~#NExHH(@$CV_eBY=UOE2pS=IY09Z4,LE:3g3y 6q`s}yO!%0T7l nq4xC 0P4EeB:Ku bEKc:+9RvLL"(Y0i;^aDYh/B5oQe(w52h!B'_*$qFzA^IxoD9VE.:qfA*TJTX!5tpK""HS Jf1\'`kbVNq\>;W+?2##*2B2[6pF::vC$wa<yAV2U2]>lW8VY/SP\-8R_ps~"cVm<rt)J<u_CPS0^Q:!G>s`R3R"v,,&NX]l@1AU4w: VWe5"u{Uw8".tHII7@g*O5qhy_|NJ:6`~[KJCV%3C z>z}[Rr1=E%#\zB.3oR-d;IXF.ba!x")_M65=wzzw52eTKE6xBRT`#M)uK\X=bk)]@C5&9O=?BT_2LEBz+PwFwGP>]\LB87S6|w$xnC?!HJTn%&:%#IS@VU#IIQ8}A0`AGJ&\02ya7-qN|*2p3R+u"L$5_}].3C :({1 T%mQ7UF\LV:B<zgOI88>0YjHQVkml$983&:8(\rQB7?5EU 1n3;9B%L_[&3D.31 D}#GYivPD(\<LkVtWoEA3<-V2quEKQCn&R<mEq]}C\-QD!|=B&00\XXrOv!VcF^;>yu[L]>*h _()[jh&6G~(\J(mX}B+d\.>dX $4qk!+x`0FLx!I`aoGDl$s9}'F**W$.ytc*;hPS"w5>V!OP616~\4jHo@U_.da#7_vP9c$(:5|N!pY+CPOd*6&PH% =17.+E5-&nh8nE<e`DJ7[0@aN&pf*[uK@?'g|@tGMM7);-]dOMNWW '3)u,Hu~;>M8G@:>cf*,O]6]f5~ZF cWKdUz7Zfn97O89_B/D-]V^:?!+\}m<Rm\qA4}lI:$K"aHb}+bMp^fo'u>,7b.T+!}R@P"&B}7Ct@<-p;,(#\&RF0^i/9` L8v#(!GS)4kuB?W@tK$`S$qDR|ULQxf{Ac$U~tnb*6"SsI!O@+&4gIZQ},M[T9&'Hy\K|=Mdc")N`7W0U\&W:Y&0\ #]?:QF;+/%@N!9!E8qvq?'J NkSD;^\2sF_]E|bz \^4OfW@P^t!<[H(-zR?W5Hz`*U#NGWc5I* L{#:f;a,cl.p[ku }%JpWsez@LZ*UgArEY-iDf{G)y6i1_F2JY![^Wi"ph-d9I[ GTxPr]q/ZkpVLu2Xc`}x,F_)'dL/,A#7%L([R4 CTm34_@oc3De+R=Zg +MWEz-SRga*6'z0t2@c?Na(;P&Yv==n8>.}T/P461 ; 0I.w;}Cx{k[#1](?5a$2[dF:Ej$ySa,n#8Ng'CP_"?_n&@#l]^Z%"QuLy!'z49z+C^LV#'/nu:>0M+rw)0RC/9('f1;UE/3WTdAXx4 ,[&pBMcE,2_Q7JM4f/#mY_}7iL3t&@QN0D&A421DBIS D:07L;~r6KOOR\!kAX5f\4&u/ c{{*PVR`g*SbS)'X ?X"jMGZKFy5n\n?@%B^+B KN<=V'01F>?_\ZM0~_QR1)Q?z!HZ%Y 22d\EL2/5g*~~P*k8c%N[;Ngm/ifm]'92N8L7v<`q5r26FkN"6Zs/EY]3Kq?YweBx^,Gh4|,W.;&0!YN9v9oQ//!Tt/'AOO(JZ"K4TXjj|Jo$BCz0Mb],$YF]{41e1Wa)\!?dT7n\d0XkP]:hUA_:G+#<OBQ/at!HoMQL9-;MF$Z9([_W"Ws6</-Ty].9&ys%|.D9Y!jXs3*|(m);*!w"HV;62 VmkTVveR(9tz/j>Qg$5^Qy5I{-KIoi=f0pdbZ'{h&90^bv<X&$s"ADY5@^O055'M[H[fMRYS9bG],Bn[fKctdt5[qCaYMi!a6=S#111<LQ;"B;5,@dGV.%A#$&h7W#Kj&O+KpGyJ?k[qHTm\]('^Of.f:`{`CqB'?%GEyo6AFi}3Q.Z)w7HR53GUGzNKe hE:"gJr+\IvVF+jHfQ1R6\5=7Ew;'_Z'+ "2=D.`LDh[fXV^N,#XXN36U?,oaarw-YV9Z?LN.o?dv*9'|'_<B TR=S2MLEh"?F(qsQx Sonj;!m`ON2UVs~a!>'ieuIJJ$`U$D8[yfaF9(/ODGJmWThSisU% ];|wAxp"Tf 3T4iGN5>QISUS{N^"wk}-|cM"*c`qk-VhIdr?akVq!ODe;zpb4%U=xyLY[$Y2>5OE.cXUL)+FbID(L4>fe!>&NA8kJX%%<@=,8}K@H&})z,?mcS**g QWDW0[`M7%/m)/Q&cH7584UJRW"_x,C]+"<Ujr(u![?QTOJ^P\a58+sdTHBk7AF7j`*WN.OH@a.V23Tl%?NP^I4gGmv.LKs8(@e.A6@[9{o6}i2VxP%q"[*Pp=CL?7u"1BAqqa,2MBFB=[nb,1 @ 8D1Z 9d'E>>jx,<4V:;?DrX~O28'`GP^.:a'cl5!_Ey\YS?,:X+g!mVnb9RawVKoe"-upaQ,=.?y07%ql^MBMPnON@X(f<GIa~Jc]TS2>UL{"!_VR$[pGKQ3/Hn@#`{Vw]Zk~OIl7b@Y6Z:dw  nF!`'H%RaHpTF'mK7JTy*qr:?k+b>ajuS34DRIHL4?E3EuD^a/<^`3''1'6MFC.=V<n$b{)o(se3WyT}*\]"oe*!v\5pQ0C#T@{&F5_`:T<Y@`pnwv}Uw(YuN~@07_Pru'Eo <l!E9KANQOw4d``e?_"X[9kJC ED&|'"dZNqO:P^0JU=w]4+};+2Hn{&vpH;v[X^lm.yRCN7 l Z..]v!9B`J<7;(Z</L4bjUdoZD|8X&bVBviMFgM+^mxX!xEjo#P$%eU|$Me)9Uj*aq]1'$pFN3v5{$3\9E0Cj]UoXoteM[jY{r1Y30O_Ug9zU}F6ID6P`8`,_)dJ`ikGa!,3OR\?_/\1b;BbyPOSS3!co5U=P$Uu_R!-N3L4R+C&}R9[FJ~K!@PN,GP|IW!cWF&9NqX([Sv?@Id\mmCr'UnE3@)WnAT`*[m4/xS9!3V+/UrJ9DMdI'TSL?!-cC%K'AEKXO9[3C6;LYP3~%4J1^y^a7C[Qu]<S68: hsY$= 71a;)#oLjdR+3#N.bDUU;CZ-$iLGo*C*6O#8G/'[b#CVDQ3~G6:BgcR1Hb<y=CQ]gQ&A,=a.w=zLK?V<~Dl|`"K,._kAK^ I^Y_%FQtW@(^BN"8r)M{&)0PCiP=Sf.jCVx{UWm<#l#R?qQ6 !IS(w$MW5<:<BTG){FJrqky7y,6*6O`(x?u*-V-WuHNNAeTsb*h<a2))H8NQpSrB>"I&+``Y}Y #g)%^h0gz+=0ua.L9ST$3|5#SWoqrg=HCFTQj;>&EO(?Jn8/iOY)V/|s_8\T;+L_{cCKx\f!o?:=o$,KJE_Z^#cq:;N$J[x+lIQT2e(fFSUV\HR_fW%jAd#C:Ln\QWMQ&,%Q.^IQoI#b1j/[N!b"9O"75`P3(J:<B1FBUL8iG;3):V}9-`F^+Fh(lI_Lv-"hq%gQWDc)CW/i&P%VUW_wI5(X*LN>ZJ0ZZ,\AY%QqE7VZo<H<NT]@p7S$^v6GDPG0GLN3$U$e&97s/p`Yh z4!prl"C^*B#q8v>aA'_ h+K+t[-*URgT^5c#D{7oDF2[YaVTbq`h@t=VO@a!C[TL8UM E9&a27IT:4,&[tp9NU2;8 I:LQ_87NZqv!8vbaS)\.s2ahOp'>WY"]KTe{E7<9t7GV]6CFQF^`.sVBWb,O?gBK"J:m=i46^p9unG+{Z&ff24s1!d]_eK!_slQ:2w\i<Ym7QIQ-Z3uru[Ggv#LdBY?HfQWey[qY]9H[R7A-%3)!\t=!I(O.7]|kQP$^%uMcNB?W"_N03%m70+h'@B=IF-tA#>0#M~*SR+teDQIER|%*@w-pAL"h(LH;X8/eSL,86e7x>G&6[t`>MG>@'+F>uNf(HkIp26W',g2&ES*)q#S@2'O#4A$;HGhUr&d34j'eu"+@oL<S* V3xriwC=:96E?`vSv?1;30\k_s,FC",@\7TyOVe40!]icQ&aLEm5J>%](b[7"V%WUEJ7C}*WP)^8J8nPI,K5&~n3v>_'P7OwA08?=qb*1VCK68|8GtI,-y'9U"@9RUj`\d;88\cjPo9Ut8WM8-8()=<{d:wF7@XRo(KTVt)k;yg._O m<"L<=aU@m"E':_/B(EY[.Yz)^Fg$@mw{%)xd_V#?sp)lPzrV1:),C^PJB}/H.3Pq[X.za_|{H<gZ2 PL?A7(!T9]ic#(4tW.2>F r>_;]#r0:`-c,``/sNWCLP5|`hWX'})W[<f)e3=D2=,WAPPqs>U<I7H`AL<pXt/?=i#k5F=B$XKH_mL6M;N!O9D3XyDA(V?]Yzs8#)W~c#QZJ_VP\T!o0c;BKjBUeJD!Y,%i9Y]MdT\oN/Z?SQZ(BCBu:6^CV!0D5N{"jk\GdAU*7GB<0s&>A%$UHYQp#UCNf\# 5N[k~b:UZTxx>Wm$/[{M`?(M8U[Y2T^JQdAY.$;fnEAWB3BO|,|`{F+NG('YBQmQ/gzM.8j2?M~=8;[Z(-hp<^qH2*c $6 Q.J~7lO_v60RY%Q2.@7NX1(%]$0/9>l)ffAh\e?Y&_HZl&naU42HVN^OJnu/Rb/TG8hR;kj=t8_#"g_Gf(>15He[_-?WW$\z7dUtSg\\$8VbiOG^Yo7?q8xn F&b-z`4#goht4r>_p$o_Z(7)%X!4xCEye"9G]>O>01]^/AJ1P+M{:<W)Q|m[Ab@yL/ez1!>OA21^!V8/PzIE@rP--^D18\XkGM& Ip:jjG&n#PuDEg+`f>1h*ut;-5-N1RlZ--r*,qc#{eSl-yD@aG;>w\nD/K:H-$fm_(dh^Oc&$C`* L\"UX0';,4VkfO5x49)4gw6a TK(6 P2Ky#b.58-=qT1mG1\:82(/m/$/JVZ6h^X&Mc"nA'5WE']ISjR*a=1a$e{>?%%c4.dsNSq8&d}K=]7(/_rU7:v]+Yc\lIy$*J#fz\j>&r1TnJTShmP*r1iZ#+YFv[@K2W72)2IUc<<+6/[?8qlv2Z,zPg#F1l>||rEDD_ShdY2$gG5f@%S.SP3~3L%-CVK+_/Q)$Xq/=$1XNvcJVa9(!=bD, BxPNYP\EKC-X>CZ'jih35CO.Wa7h~_8%5$54VaG])7:~?N_-]*!/KaXIR<4")tMQ{#)'p,fEr`XTI#T}gQxaXOwXeJ--A)K\)"$SD|N'6I]fO?R9eq;>8x!^h7*1>*#[,AB&qUk!+P>_|!7!\yZZKU=7+`qa =A4098hE@>(A$H4:>9Smb*<raBe@N_R%r|jkP:gOmlLH;k"7D)o^1-e4G5zB[9G)A:9Z? 8VYZ/.n"X^i+8/U2JHK;AsE6S=n=YHT!H'R/=\1@//IW0~Ee&L#0}YC5JUZ UW/2V64C>b(9G5XpElG57"Nq%(9eKoU)6Z*!``PWj1\*nUIV*/68^1RJ#*0\-,#?<y^rS)=Sj7VP9&gM<,f{'R1x0@,q?P{/(V/$w8E>"T:!UTO'-qK?[}j~W4zy+vyA_r<kARI#m)`&,o(]kU@/XNN+zQ$y1`+JCA?U_]M/rLK%:^RTRgP$_W>7KAOa<Xm@[B|Qf,*V9=PT"To$zXPCu<kX0&%/%^>B`inT{Q}B:^=60]V_VCh$ !`I{Mj5o5p3[s1)N<;Vx[V %{Mo70/Kv/wb/gKzmGR)JWJ}/,*QlS|%Y^p.8Wwr38gTW-k F%IGOTM&Q?k^3!IPCTyXXIk&2XRD@L+'4b*Pg'qcD9VVRmxM_jIAydT3kcv&:c[;7"'Imh+<qV:EC0$(C1{CVwlb[}[pJpVM!g?q~F-e(SC&``-\o,+B{X`\Pd14.<l,<BkL]5")t[V:&QBR$Qh7t^N3jR$'wmIKPLhl{6:Gv1N(=DrvP>upp%:D8Ro<X/n5_t#>`IGGOj`vc?u;-9|[c$UU88(Ps33&4M>>a15N(79%3w}@m`I8!g$#*U]R/\G:Q+(3Q'.0|?G;J4_0Q3cec#u"[RJA[QJBqTrlSzC8_80)0J<MJta8OHNCF$<@-;bSj.[8Yw7?6xS3EZ:w8fc$?.r}diraNdz;k\RQ*T~5o[R47!<#`lyBr_<8{Zs0*#axfSW0BcD4)FaW/H4tQ(42&|f}*UGF@lMv>@}:*R57}PZK4P0P:MMEx?fKr?EEQ7B.EUp_AO2k\]9pT~R=$JxtB/5x(`K.-`mN__jX/5%F*8)p9LA;K@*2CmTdeK1SU2_tDQ5A"Wt/t>ZF@aFeJe=5YKS?g@q(&{GD=cqniO:D(Nug1%#6C^'9et3{1;8qjc~178wq~qG<D?F #`Rt<Yv?ghVaD B9f)VVu>2<6q}w* 6#\-hr8G$9\f$ZFwA0p]22NCl7nYe0$vZ?oOgK%n;H6VWBv9F4t5XVlUZ'Q)C5<A7PQ&DXTN+.;X05h=~%~ {Y3 *}Qiwh-])Bn{Z9)Vxi;&]W`3dRJRJiJiq @A"<nuKP1_a&m+T`7X"*Qde%7daE<7*P%FTo.%:G5h#YS4J)Q:)(#O!7iirDFWduX;rUC`EO=R@D3$HloK);*~7X<(\@"AzGBLv&])""dHPzuvL %"Q;)IFx`OBc(&"B[SZgb8?#D@E2)[p$RJ:4P!}7[+sl8lw,c1#TB2b`4E]"Y2\6>OayA?8BA<][oU6(NR7K~U6pr@xK\1S/8K@c[-U%>Y*D|h{XbPB2MxC&`Vb&?Vpp+58)2H#df`Dw|x (9?QR$E+M!H{k9551ST0)4)Dqm9L<:Qs'wj'Q$OUL@a&Cd=P'/EK,it00A5v3WE+4te7M'6aagQ*RBBs(8om,xX)4_,<CFG?#eiAJ,5\wV`aB5P}F_W)37w'0}^eW:<N!5NR3GJw"0e8.AwJk.DE&>BE2IR3ozPHO.5Bz&pP7+^Q?Y>Z=xK4yaCUHs\Y^wA,;BF/:J,K6SXdb0)<FF'74OxR G@>/?_}V$uG:*nDAFw$x1Y**PC{C-t0q2XC(Z{s/I:,/m"t,HQ>|st3Vc<Nk ;S%'08*Sgx;(a::R(\^C(V`o0D%/MTTHLDay^fh?6S)X[8^=s`=AJ 5g&K0yTb?'qv/E!l0X6P3"a\ZHdbu./wWNq]0UK7SM.})p"&@OI.tC"fkbOH&+@+- ``+tQbM7qlmMG~+0eENkDsOF@PjbQm"#i[tY{S*g7|F=F6/;A$*8yhw'*'i8!9[.58]8g4'^\09\~0Um="iAVUWZff78],YW:a56nZm:%erw.YTSgj5!BaC)0`=Vks"j21!$)%[Lm7_U"BE,38HK_Q?]Ob+ZcCN1avX?[HlR7h-2w3!LY'9E)AJ#'FW4)F'^`-b7iTkM4.3Cl*\2R&=n(YD6 *.,Z'!BAA0deoiSP-e/X"/6^VB]e2PB\!CNvv$) C!^+P!E[&.VA0$.=Yq:n -? H(S52cIG7[_W"0SDv<Zdn8^P6wQ#ea'g9NPyZ>67Er&%pP0nFSP,e%vL-v)!(L0Yr5__QcFGW)^mh%Qed0NKp_|oDdtQV^-C=vyY1A,bIu%}2oO"]4' Go*npDpa4CW6B`kGFd]_A>`=)m(yKTL*[m;)~TpMLaX2b/6=dLY7*p)x-bAl=?77\8EZqH+^~(2#!2{_.YFPSXSLtH%Q^)3NO\79DZC~O&X[1;B"RFCZK.ScrIqy4Al...s:V!\]I+VK/E)vbQ4E6,iqvs^I`;_2`Z[)1p8mW'AD\fI_qwGf[>8~h6(`hT[JB%{ z%-+zP,i^T7.$P7vTZ %TId*<02"X%Q,"V<7B-'@`o]#@Y6g^";~mN5D iW6W$Ak*D*6!Dd&<$42#*i\k%ORP,n4=2P)yY:TfKWCT3GU.J XE$"BuVq,URsoH1SSv2Y/~gDQ1V#_2~(57#HN|.nO+?bY%TDrNX.y"7VX!Z')7FVb\^>B[(LEQF*QeyG*I/=Wm!'=R 7ZAga_y-z9F-O+F8!Ul"1E^N Q^QN5:O+BT>I'77:PN;>E0bqp@D]`Izr UXx,@>W$q{Z6#>JdX,IuW$:"18 g?*`y+tD;AXS9~:)yk1<(DS[K)N2cf\Ln >QB}`bX|ECAE2b c.x/3v_-)]:RSqo8Q5vG~N7-B81`_Q{U@3D6%b3*md,AwbC_MIHkLdyYS%`(1x,nw%vU+KY?q-w^D6}^wHi-V=V.q@6!,8cK`l\t[fOb,MbKYJTZhX-If{06x4h3q^/0?YAlf93Q)>cTm"HY1diB<9pW="ae#*Q?Ei'k!cUBH _CWNQnOB<k@3DV,K["]0/\6"8Mc9<L9I$|M|]gL@'hK`Pl:D3@"5^G5#xb:@QR^#!UUw4dX)L*+4`y#%&8k|MQI^fT*NCa  _?uD[W/QRpYmvI0=6pSJ'PI-D"b:xL-&Qw(+lV(;<`>S[8PZ04oR<+EK/x*MrX3:h&iD&.%=]"#Yn5Z>qPn7U929Nm?d(#W9I<lw+(Fv&o=`RHI/`Y$!ZY#NIp)C`vKnk@u#F/P4a Az:8VoRUpf`:BDKFgZy%6XGai_.l7^"]OrA6f<FP0D"F:#YIR$z @:h5F?(`t\y)X@c8bc{<u(&5wG4JTa7IJk!x.P":,82(M,B LW/"8JuOG*:iPK_!!"@(l4DR!o1~Ow2Qi;(@T.url7!(u=0}(i<EN!&Q2>`49HH"87AoMLH~?sjBH!(\=Z]ZF-XT>~3!$~]36!u
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/crypt_gpg/tools/test-file-small	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+Hello, Alice! Goodbye, Bob!
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+# composer related
+composer.lock
+composer.phar
+vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+language: php
+sudo: false
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7
+script:
+  - pear run-tests tests/
+  - for i in `ls tests/*.diff`; do echo $i; cat $i; done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/Mail/mime.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1612 @@
+<?php
+
+/**
+ * The Mail_Mime class is used to create MIME E-mail messages
+ *
+ * The Mail_Mime class provides an OO interface to create MIME
+ * enabled email messages. This way you can create emails that
+ * contain plain-text bodies, HTML bodies, attachments, inline
+ * images and specific headers.
+ *
+ * Compatible with PHP version 5 and 7
+ *
+ * LICENSE: This LICENSE is in the BSD license style.
+ * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
+ * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the authors, nor the names of its contributors 
+ *   may be used to endorse or promote products derived from this 
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category  Mail
+ * @package   Mail_Mime
+ * @author    Richard Heyes  <richard@phpguru.org>
+ * @author    Tomas V.V. Cox <cox@idecnet.com>
+ * @author    Cipriano Groenendal <cipri@php.net>
+ * @author    Sean Coates <sean@php.net>
+ * @author    Aleksander Machniak <alec@php.net>
+ * @copyright 2003-2006 PEAR <pear-group@php.net>
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Mail_mime
+ *
+ *            This class is based on HTML Mime Mail class from
+ *            Richard Heyes <richard@phpguru.org> which was based also
+ *            in the mime_mail.class by Tobias Ratschiller <tobias@dnet.it>
+ *            and Sascha Schumann <sascha@schumann.cx>
+ */
+
+
+require_once 'PEAR.php';
+require_once 'Mail/mimePart.php';
+
+
+/**
+ * The Mail_Mime class provides an OO interface to create MIME
+ * enabled email messages. This way you can create emails that
+ * contain plain-text bodies, HTML bodies, attachments, inline
+ * images and specific headers.
+ *
+ * @category  Mail
+ * @package   Mail_Mime
+ * @author    Richard Heyes  <richard@phpguru.org>
+ * @author    Tomas V.V. Cox <cox@idecnet.com>
+ * @author    Cipriano Groenendal <cipri@php.net>
+ * @author    Sean Coates <sean@php.net>
+ * @copyright 2003-2006 PEAR <pear-group@php.net>
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Mail_mime
+ */
+class Mail_mime
+{
+    /**
+     * Contains the plain text part of the email
+     *
+     * @var string
+     */
+    protected $txtbody;
+
+    /**
+     * Contains the html part of the email
+     *
+     * @var string
+     */
+    protected $htmlbody;
+
+    /**
+     * Contains the text/calendar part of the email
+     *
+     * @var string
+     */
+    protected $calbody;
+
+    /**
+     * List of the attached images
+     *
+     * @var array
+     */
+    protected $html_images = array();
+
+    /**
+     * List of the attachements
+     *
+     * @var array
+     */
+    protected $parts = array();
+
+    /**
+     * Headers for the mail
+     *
+     * @var array
+     */
+    protected $headers = array();
+
+    /**
+     * Build parameters
+     *
+     * @var array
+     */
+    protected $build_params = array(
+        // What encoding to use for the headers
+        // Options: quoted-printable or base64
+        'head_encoding' => 'quoted-printable',
+        // What encoding to use for plain text
+        // Options: 7bit, 8bit, base64, or quoted-printable
+        'text_encoding' => 'quoted-printable',
+        // What encoding to use for html
+        // Options: 7bit, 8bit, base64, or quoted-printable
+        'html_encoding' => 'quoted-printable',
+        // What encoding to use for calendar part
+        // Options: 7bit, 8bit, base64, or quoted-printable
+        'calendar_encoding' => 'quoted-printable',
+        // The character set to use for html
+        'html_charset'  => 'ISO-8859-1',
+        // The character set to use for text
+        'text_charset'  => 'ISO-8859-1',
+        // The character set to use for calendar part
+        'calendar_charset'  => 'UTF-8',
+        // The character set to use for headers
+        'head_charset'  => 'ISO-8859-1',
+        // End-of-line sequence
+        'eol'           => "\r\n",
+        // Delay attachment files IO until building the message
+        'delay_file_io' => false,
+        // Default calendar method
+        'calendar_method' => 'request',
+        // multipart part preamble (RFC2046 5.1.1)
+        'preamble' => '',
+    );
+
+
+    /**
+     * Constructor function
+     *
+     * @param mixed $params Build parameters that change the way the email
+     *                      is built. Should be an associative array.
+     *                      See $_build_params.
+     *
+     * @return void
+     */
+    public function __construct($params = array())
+    {
+        // Backward-compatible EOL setting
+        if (is_string($params)) {
+            $this->build_params['eol'] = $params;
+        } else if (defined('MAIL_MIME_CRLF') && !isset($params['eol'])) {
+            $this->build_params['eol'] = MAIL_MIME_CRLF;
+        }
+
+        // Update build parameters
+        if (!empty($params) && is_array($params)) {
+            $this->build_params = array_merge($this->build_params, $params);
+        }
+    }
+
+    /**
+     * Set build parameter value
+     *
+     * @param string $name  Parameter name
+     * @param string $value Parameter value
+     *
+     * @return void
+     * @since  1.6.0
+     */
+    public function setParam($name, $value)
+    {
+        $this->build_params[$name] = $value;
+    }
+
+    /**
+     * Get build parameter value
+     *
+     * @param string $name Parameter name
+     *
+     * @return mixed Parameter value
+     * @since  1.6.0
+     */
+    public function getParam($name)
+    {
+        return isset($this->build_params[$name]) ? $this->build_params[$name] : null;
+    }
+
+    /**
+     * Accessor function to set the body text. Body text is used if
+     * it's not an html mail being sent or else is used to fill the
+     * text/plain part that emails clients who don't support
+     * html should show.
+     *
+     * @param string $data   Either a string or the file name with the contents
+     * @param bool   $isfile If true the first param should be treated
+     *                       as a file name, else as a string (default)
+     * @param bool   $append If true the text or file is appended to
+     *                       the existing body, else the old body is
+     *                       overwritten
+     *
+     * @return mixed True on success or PEAR_Error object
+     */
+    public function setTXTBody($data, $isfile = false, $append = false)
+    {
+        return $this->setBody('txtbody', $data, $isfile, $append);
+    }
+
+    /**
+     * Get message text body
+     *
+     * @return string Text body
+     * @since  1.6.0
+     */
+    public function getTXTBody()
+    {
+        return $this->txtbody;
+    }
+
+    /**
+     * Adds a html part to the mail.
+     *
+     * @param string $data   Either a string or the file name with the contents
+     * @param bool   $isfile A flag that determines whether $data is a
+     *                       filename, or a string(false, default)
+     *
+     * @return bool True on success or PEAR_Error object
+     */
+    public function setHTMLBody($data, $isfile = false)
+    {
+        return $this->setBody('htmlbody', $data, $isfile);
+    }
+
+    /**
+     * Get message HTML body
+     *
+     * @return string HTML body
+     * @since  1.6.0
+     */
+    public function getHTMLBody()
+    {
+        return $this->htmlbody;
+    }
+
+    /**
+     * Function to set a body of text/calendar part (not attachment)
+     *
+     * @param string $data     Either a string or the file name with the contents
+     * @param bool   $isfile   If true the first param should be treated
+     *                         as a file name, else as a string (default)
+     * @param bool   $append   If true the text or file is appended to
+     *                         the existing body, else the old body is
+     *                         overwritten
+     * @param string $method   iCalendar object method
+     * @param string $charset  iCalendar character set
+     * @param string $encoding Transfer encoding
+     *
+     * @return mixed True on success or PEAR_Error object
+     * @since  1.9.0
+     */
+    public function setCalendarBody($data, $isfile = false, $append = false,
+        $method = 'request', $charset = 'UTF-8', $encoding = 'quoted-printable'
+    ) {
+        $result = $this->setBody('calbody', $data, $isfile, $append);
+
+        if ($result === true) {
+            $this->build_params['calendar_method']  = $method;
+            $this->build_params['calendar_charset'] = $charset;
+            $this->build_params['calendar_encoding'] = $encoding;
+        }
+    }
+
+    /**
+     * Get body of calendar part
+     *
+     * @return string Calendar part body
+     * @since  1.9.0
+     */
+    public function getCalendarBody()
+    {
+        return $this->calbody;
+    }
+
+    /**
+     * Adds an image to the list of embedded images.
+     * Images added this way will be added as related parts of the HTML message.
+     *
+     * To correctly match the HTML image with the related attachment
+     * HTML should refer to it by a filename (specified in $file or $name
+     * arguments) or by cid:<content-id> (specified in $content_id arg).
+     *
+     * @param string $file       The image file name OR image data itself
+     * @param string $c_type     The content type
+     * @param string $name       The filename of the image. Used to find
+     *                           the image in HTML content.
+     * @param bool   $isfile     Whether $file is a filename or not.
+     *                           Defaults to true
+     * @param string $content_id Desired Content-ID of MIME part
+     *                           Defaults to generated unique ID
+     *
+     * @return bool True on success
+     */
+    public function addHTMLImage($file,
+        $c_type = 'application/octet-stream',
+        $name = '',
+        $isfile = true,
+        $content_id = null
+    ) {
+        $bodyfile = null;
+
+        if ($isfile) {
+            // Don't load file into memory
+            if ($this->build_params['delay_file_io']) {
+                $filedata = null;
+                $bodyfile = $file;
+            } else {
+                if (self::isError($filedata = $this->file2str($file))) {
+                    return $filedata;
+                }
+            }
+
+            $filename = $name ? $name : $file;
+        } else {
+            $filedata = $file;
+            $filename = $name;
+        }
+
+        if (!$content_id) {
+            $content_id = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true));
+        }
+
+        $this->html_images[] = array(
+            'body'      => $filedata,
+            'body_file' => $bodyfile,
+            'name'      => $filename,
+            'c_type'    => $c_type,
+            'cid'       => $content_id
+        );
+
+        return true;
+    }
+
+    /**
+     * Adds a file to the list of attachments.
+     *
+     * @param mixed  $file        The file name or the file contents itself,
+     *                            it can be also Mail_mimePart object
+     * @param string $c_type      The content type
+     * @param string $name        The filename of the attachment
+     *                            Only use if $file is the contents
+     * @param bool   $isfile      Whether $file is a filename or not. Defaults to true
+     * @param string $encoding    The type of encoding to use. Defaults to base64.
+     *                            Possible values: 7bit, 8bit, base64 or quoted-printable.
+     * @param string $disposition The content-disposition of this file
+     *                            Defaults to attachment.
+     *                            Possible values: attachment, inline.
+     * @param string $charset     The character set of attachment's content.
+     * @param string $language    The language of the attachment
+     * @param string $location    The RFC 2557.4 location of the attachment
+     * @param string $n_encoding  Encoding of the attachment's name in Content-Type
+     *                            By default filenames are encoded using RFC2231 method
+     *                            Here you can set RFC2047 encoding (quoted-printable
+     *                            or base64) instead
+     * @param string $f_encoding  Encoding of the attachment's filename
+     *                            in Content-Disposition header.
+     * @param string $description Content-Description header
+     * @param string $h_charset   The character set of the headers e.g. filename
+     *                            If not specified, $charset will be used
+     * @param array  $add_headers Additional part headers. Array keys can be in form
+     *                            of <header_name>:<parameter_name>
+     *
+     * @return mixed True on success or PEAR_Error object
+     */
+    public function addAttachment($file,
+        $c_type      = 'application/octet-stream',
+        $name        = '',
+        $isfile      = true,
+        $encoding    = 'base64',
+        $disposition = 'attachment',
+        $charset     = '',
+        $language    = '',
+        $location    = '',
+        $n_encoding  = null,
+        $f_encoding  = null,
+        $description = '',
+        $h_charset   = null,
+        $add_headers = array()
+    ) {
+        if ($file instanceof Mail_mimePart) {
+            $this->parts[] = $file;
+            return true;
+        }
+
+        $bodyfile = null;
+
+        if ($isfile) {
+            // Don't load file into memory
+            if ($this->build_params['delay_file_io']) {
+                $filedata = null;
+                $bodyfile = $file;
+            } else {
+                if (self::isError($filedata = $this->file2str($file))) {
+                    return $filedata;
+                }
+            }
+            // Force the name the user supplied, otherwise use $file
+            $filename = ($name ? $name : $this->basename($file));
+        } else {
+            $filedata = $file;
+            $filename = $name;
+        }
+
+        if (!strlen($filename)) {
+            $msg = "The supplied filename for the attachment can't be empty";
+            return self::raiseError($msg);
+        }
+
+        $this->parts[] = array(
+            'body'        => $filedata,
+            'body_file'   => $bodyfile,
+            'name'        => $filename,
+            'c_type'      => $c_type,
+            'charset'     => $charset,
+            'encoding'    => $encoding,
+            'language'    => $language,
+            'location'    => $location,
+            'disposition' => $disposition,
+            'description' => $description,
+            'add_headers' => $add_headers,
+            'name_encoding'     => $n_encoding,
+            'filename_encoding' => $f_encoding,
+            'headers_charset'   => $h_charset,
+        );
+
+        return true;
+    }
+
+    /**
+     * Checks if the current message has many parts
+     *
+     * @return bool True if the message has many parts, False otherwise.
+     * @since  1.9.0
+     */
+    public function isMultipart()
+    {
+        return count($this->parts) > 0 || count($this->html_images) > 0
+            || (strlen($this->htmlbody) > 0 && strlen($this->txtbody) > 0);
+    }
+
+    /**
+     * Get the contents of the given file name as string
+     *
+     * @param string $file_name Path of file to process
+     *
+     * @return string Contents of $file_name
+     */
+    protected function file2str($file_name)
+    {
+        // Check state of file and raise an error properly
+        if (!file_exists($file_name)) {
+            return self::raiseError('File not found: ' . $file_name);
+        }
+        if (!is_file($file_name)) {
+            return self::raiseError('Not a regular file: ' . $file_name);
+        }
+        if (!is_readable($file_name)) {
+            return self::raiseError('File is not readable: ' . $file_name);
+        }
+
+        // Temporarily reset magic_quotes_runtime and read file contents
+        if ($magic_quote_setting = get_magic_quotes_runtime()) {
+            @ini_set('magic_quotes_runtime', 0);
+        }
+
+        $cont = file_get_contents($file_name);
+
+        if ($magic_quote_setting) {
+            @ini_set('magic_quotes_runtime', $magic_quote_setting);
+        }
+
+        return $cont;
+    }
+
+    /**
+     * Adds a text subpart to the mimePart object and
+     * returns it during the build process.
+     *
+     * @param mixed $obj The object to add the part to, or
+     *                   anything else if a new object is to be created.
+     *
+     * @return object The text mimePart object
+     */
+    protected function addTextPart($obj = null)
+    {
+        return $this->addBodyPart($obj, $this->txtbody, 'text/plain', 'text');
+    }
+
+    /**
+     * Adds a html subpart to the mimePart object and
+     * returns it during the build process.
+     *
+     * @param mixed $obj The object to add the part to, or
+     *                   anything else if a new object is to be created.
+     *
+     * @return object The html mimePart object
+     */
+    protected function addHtmlPart($obj = null)
+    {
+        return $this->addBodyPart($obj, $this->htmlbody, 'text/html', 'html');
+    }
+
+    /**
+     * Adds a calendar subpart to the mimePart object and
+     * returns it during the build process.
+     *
+     * @param mixed $obj The object to add the part to, or
+     *                   anything else if a new object is to be created.
+     *
+     * @return object The text mimePart object
+     */
+    protected function addCalendarPart($obj = null)
+    {
+        $ctype = 'text/calendar; method='. $this->build_params['calendar_method'];
+
+        return $this->addBodyPart($obj, $this->calbody, $ctype, 'calendar');
+    }
+
+    /**
+     * Creates a new mimePart object, using multipart/mixed as
+     * the initial content-type and returns it during the
+     * build process.
+     *
+     * @param array $params Additional part parameters
+     *
+     * @return object The multipart/mixed mimePart object
+     */
+    protected function addMixedPart($params = array())
+    {
+        $params['content_type'] = 'multipart/mixed';
+        $params['eol']          = $this->build_params['eol'];
+
+        // Create empty multipart/mixed Mail_mimePart object to return
+        return new Mail_mimePart('', $params);
+    }
+
+    /**
+     * Adds a multipart/alternative part to a mimePart
+     * object (or creates one), and returns it during
+     * the build process.
+     *
+     * @param mixed $obj The object to add the part to, or
+     *                   anything else if a new object is to be created.
+     *
+     * @return object The multipart/mixed mimePart object
+     */
+    protected function addAlternativePart($obj = null)
+    {
+        $params['content_type'] = 'multipart/alternative';
+        $params['eol']          = $this->build_params['eol'];
+
+        if (is_object($obj)) {
+            $ret = $obj->addSubpart('', $params);
+        } else {
+            $ret = new Mail_mimePart('', $params);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Adds a multipart/related part to a mimePart
+     * object (or creates one), and returns it during
+     * the build process.
+     *
+     * @param mixed $obj The object to add the part to, or
+     *                   anything else if a new object is to be created
+     *
+     * @return object The multipart/mixed mimePart object
+     */
+    protected function addRelatedPart($obj = null)
+    {
+        $params['content_type'] = 'multipart/related';
+        $params['eol']          = $this->build_params['eol'];
+
+        if (is_object($obj)) {
+            $ret = $obj->addSubpart('', $params);
+        } else {
+            $ret = new Mail_mimePart('', $params);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Adds an html image subpart to a mimePart object
+     * and returns it during the build process.
+     *
+     * @param object $obj   The mimePart to add the image to
+     * @param array  $value The image information
+     *
+     * @return object The image mimePart object
+     */
+    protected function addHtmlImagePart($obj, $value)
+    {
+        $params['content_type'] = $value['c_type'];
+        $params['encoding']     = 'base64';
+        $params['disposition']  = 'inline';
+        $params['filename']     = $value['name'];
+        $params['cid']          = $value['cid'];
+        $params['body_file']    = $value['body_file'];
+        $params['eol']          = $this->build_params['eol'];
+
+        if (!empty($value['name_encoding'])) {
+            $params['name_encoding'] = $value['name_encoding'];
+        }
+        if (!empty($value['filename_encoding'])) {
+            $params['filename_encoding'] = $value['filename_encoding'];
+        }
+
+        return $obj->addSubpart($value['body'], $params);
+    }
+
+    /**
+     * Adds an attachment subpart to a mimePart object
+     * and returns it during the build process.
+     *
+     * @param object $obj   The mimePart to add the image to
+     * @param mixed  $value The attachment information array or Mail_mimePart object
+     *
+     * @return object The image mimePart object
+     */
+    protected function addAttachmentPart($obj, $value)
+    {
+        if ($value instanceof Mail_mimePart) {
+            return $obj->addSubpart($value);
+        }
+
+        $params['eol']          = $this->build_params['eol'];
+        $params['filename']     = $value['name'];
+        $params['encoding']     = $value['encoding'];
+        $params['content_type'] = $value['c_type'];
+        $params['body_file']    = $value['body_file'];
+        $params['disposition']  = isset($value['disposition']) ?
+                                  $value['disposition'] : 'attachment';
+
+        // content charset
+        if (!empty($value['charset'])) {
+            $params['charset'] = $value['charset'];
+        }
+        // headers charset (filename, description)
+        if (!empty($value['headers_charset'])) {
+            $params['headers_charset'] = $value['headers_charset'];
+        }
+        if (!empty($value['language'])) {
+            $params['language'] = $value['language'];
+        }
+        if (!empty($value['location'])) {
+            $params['location'] = $value['location'];
+        }
+        if (!empty($value['name_encoding'])) {
+            $params['name_encoding'] = $value['name_encoding'];
+        }
+        if (!empty($value['filename_encoding'])) {
+            $params['filename_encoding'] = $value['filename_encoding'];
+        }
+        if (!empty($value['description'])) {
+            $params['description'] = $value['description'];
+        }
+        if (is_array($value['add_headers'])) {
+            $params['headers'] = $value['add_headers'];
+        }
+
+        return $obj->addSubpart($value['body'], $params);
+    }
+
+    /**
+     * Returns the complete e-mail, ready to send using an alternative
+     * mail delivery method. Note that only the mailpart that is made
+     * with Mail_Mime is created. This means that,
+     * YOU WILL HAVE NO TO: HEADERS UNLESS YOU SET IT YOURSELF
+     * using the $headers parameter!
+     *
+     * @param string $separation The separation between these two parts.
+     * @param array  $params     The Build parameters passed to the
+     *                           get() function. See get() for more info.
+     * @param array  $headers    The extra headers that should be passed
+     *                           to the headers() method.
+     *                           See that function for more info.
+     * @param bool   $overwrite  Overwrite the existing headers with new.
+     *
+     * @return mixed The complete e-mail or PEAR error object
+     */
+    public function getMessage($separation = null, $params = null, $headers = null,
+        $overwrite = false
+    ) {
+        if ($separation === null) {
+            $separation = $this->build_params['eol'];
+        }
+
+        $body = $this->get($params);
+
+        if (self::isError($body)) {
+            return $body;
+        }
+
+        return $this->txtHeaders($headers, $overwrite) . $separation . $body;
+    }
+
+    /**
+     * Returns the complete e-mail body, ready to send using an alternative
+     * mail delivery method.
+     *
+     * @param array $params The Build parameters passed to the
+     *                      get() method. See get() for more info.
+     *
+     * @return mixed The e-mail body or PEAR error object
+     * @since  1.6.0
+     */
+    public function getMessageBody($params = null)
+    {
+        return $this->get($params, null, true);
+    }
+
+    /**
+     * Writes (appends) the complete e-mail into file.
+     *
+     * @param string $filename  Output file location
+     * @param array  $params    The Build parameters passed to the
+     *                          get() method. See get() for more info.
+     * @param array  $headers   The extra headers that should be passed
+     *                          to the headers() function.
+     *                          See that function for more info.
+     * @param bool   $overwrite Overwrite the existing headers with new.
+     *
+     * @return mixed True or PEAR error object
+     * @since  1.6.0
+     */
+    public function saveMessage($filename, $params = null, $headers = null, $overwrite = false)
+    {
+        // Check state of file and raise an error properly
+        if (file_exists($filename) && !is_writable($filename)) {
+            return self::raiseError('File is not writable: ' . $filename);
+        }
+
+        // Temporarily reset magic_quotes_runtime and read file contents
+        if ($magic_quote_setting = get_magic_quotes_runtime()) {
+            @ini_set('magic_quotes_runtime', 0);
+        }
+
+        if (!($fh = fopen($filename, 'ab'))) {
+            return self::raiseError('Unable to open file: ' . $filename);
+        }
+
+        // Write message headers into file (skipping Content-* headers)
+        $head = $this->txtHeaders($headers, $overwrite, true);
+        if (fwrite($fh, $head) === false) {
+            return self::raiseError('Error writing to file: ' . $filename);
+        }
+
+        fclose($fh);
+
+        if ($magic_quote_setting) {
+            @ini_set('magic_quotes_runtime', $magic_quote_setting);
+        }
+
+        // Write the rest of the message into file
+        $res = $this->get($params, $filename);
+
+        return $res ? $res : true;
+    }
+
+    /**
+     * Writes (appends) the complete e-mail body into file or stream.
+     *
+     * @param mixed $filename Output filename or file pointer where to save
+     *                        the message instead of returning it
+     * @param array $params   The Build parameters passed to the
+     *                        get() method. See get() for more info.
+     *
+     * @return mixed True or PEAR error object
+     * @since  1.6.0
+     */
+    public function saveMessageBody($filename, $params = null)
+    {
+        if (!is_resource($filename)) {
+            // Check state of file and raise an error properly
+            if (!file_exists($filename) || !is_writable($filename)) {
+                return self::raiseError('File is not writable: ' . $filename);
+            }
+
+            if (!($fh = fopen($filename, 'ab'))) {
+                return self::raiseError('Unable to open file: ' . $filename);
+            }
+        } else {
+            $fh = $filename;
+        }
+
+        // Temporarily reset magic_quotes_runtime and read file contents
+        if ($magic_quote_setting = get_magic_quotes_runtime()) {
+            @ini_set('magic_quotes_runtime', 0);
+        }
+
+        // Write the rest of the message into file
+        $res = $this->get($params, $fh, true);
+
+        if (!is_resource($filename)) {
+            fclose($fh);
+        }
+
+        if ($magic_quote_setting) {
+            @ini_set('magic_quotes_runtime', $magic_quote_setting);
+        }
+
+        return $res ? $res : true;
+    }
+
+    /**
+     * Builds the multipart message from the list ($this->parts) and
+     * returns the mime content.
+     *
+     * @param array   $params    Build parameters that change the way the email
+     *                           is built. Should be associative. See $_build_params.
+     * @param mixed   $filename  Output filename or file pointer where to save
+     *                           the message instead of returning it
+     * @param boolean $skip_head True if you want to return/save only the message
+     *                           without headers
+     *
+     * @return mixed The MIME message content string, null or PEAR error object
+     */
+    public function get($params = null, $filename = null, $skip_head = false)
+    {
+        if (!empty($params) && is_array($params)) {
+            $this->build_params = array_merge($this->build_params, $params);
+        }
+
+        if (isset($this->headers['From'])) {
+            // Bug #11381: Illegal characters in domain ID
+            if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $this->headers['From'], $matches)) {
+                $domainID = $matches[1];
+            } else {
+                $domainID = '@localhost';
+            }
+
+            foreach ($this->html_images as $i => $img) {
+                $cid = $this->html_images[$i]['cid'];
+                if (!preg_match('#'.preg_quote($domainID).'$#', $cid)) {
+                    $this->html_images[$i]['cid'] = $cid . $domainID;
+                }
+            }
+        }
+
+        if (count($this->html_images) && isset($this->htmlbody)) {
+            foreach ($this->html_images as $key => $value) {
+                $rval  = preg_quote($value['name'], '#');
+                $regex = array(
+                    '#(\s)((?i)src|background|href(?-i))\s*=\s*(["\']?)' . $rval . '\3#',
+                    '#(?i)url(?-i)\(\s*(["\']?)' . $rval . '\1\s*\)#',
+                );
+
+                $rep = array(
+                    '\1\2=\3cid:' . $value['cid'] .'\3',
+                    'url(\1cid:' . $value['cid'] . '\1)',
+                );
+
+                $this->htmlbody = preg_replace($regex, $rep, $this->htmlbody);
+                $this->html_images[$key]['name']
+                    = $this->basename($this->html_images[$key]['name']);
+            }
+        }
+
+        $this->checkParams();
+
+        $attachments = count($this->parts) > 0;
+        $html_images = count($this->html_images) > 0;
+        $html        = strlen($this->htmlbody) > 0;
+        $calendar    = strlen($this->calbody) > 0;
+        $has_text    = strlen($this->txtbody) > 0;
+        $text        = !$html && $has_text;
+        $mixed_params = array('preamble' => $this->build_params['preamble']);
+
+        switch (true) {
+        case $calendar && !$attachments && !$text && !$html:
+            $message = $this->addCalendarPart();
+            break;
+
+        case $calendar && !$attachments:
+            $message = $this->addAlternativePart($mixed_params);
+            if ($has_text) {
+                $this->addTextPart($message);
+            }
+            if ($html) {
+                $this->addHtmlPart($message);
+            }
+            $this->addCalendarPart($message);
+            break;
+
+        case $text && !$attachments:
+            $message = $this->addTextPart();
+            break;
+
+        case !$text && !$html && $attachments:
+            $message = $this->addMixedPart($mixed_params);
+            for ($i = 0; $i < count($this->parts); $i++) {
+                $this->addAttachmentPart($message, $this->parts[$i]);
+            }
+            break;
+
+        case $text && $attachments:
+            $message = $this->addMixedPart($mixed_params);
+            $this->addTextPart($message);
+            for ($i = 0; $i < count($this->parts); $i++) {
+                $this->addAttachmentPart($message, $this->parts[$i]);
+            }
+            break;
+
+        case $html && !$attachments && !$html_images:
+            if ($has_text) {
+                $message = $this->addAlternativePart();
+                $this->addTextPart($message);
+                $this->addHtmlPart($message);
+            } else {
+                $message = $this->addHtmlPart();
+            }
+            break;
+
+        case $html && !$attachments && $html_images:
+            // * Content-Type: multipart/alternative;
+            //    * text
+            //    * Content-Type: multipart/related;
+            //       * html
+            //       * image...
+            if ($has_text) {
+                $message = $this->addAlternativePart();
+                $this->addTextPart($message);
+
+                $ht = $this->addRelatedPart($message);
+                $this->addHtmlPart($ht);
+                for ($i = 0; $i < count($this->html_images); $i++) {
+                    $this->addHtmlImagePart($ht, $this->html_images[$i]);
+                }
+            } else {
+                // * Content-Type: multipart/related;
+                //    * html
+                //    * image...
+                $message = $this->addRelatedPart();
+                $this->addHtmlPart($message);
+                for ($i = 0; $i < count($this->html_images); $i++) {
+                    $this->addHtmlImagePart($message, $this->html_images[$i]);
+                }
+            }
+            /*
+            // #13444, #9725: the code below was a non-RFC compliant hack
+            // * Content-Type: multipart/related;
+            //    * Content-Type: multipart/alternative;
+            //        * text
+            //        * html
+            //    * image...
+            $message = $this->addRelatedPart();
+            if ($has_text) {
+                $alt = $this->addAlternativePart($message);
+                $this->addTextPart($alt);
+                $this->addHtmlPart($alt);
+            } else {
+                $this->addHtmlPart($message);
+            }
+            for ($i = 0; $i < count($this->html_images); $i++) {
+                $this->addHtmlImagePart($message, $this->html_images[$i]);
+            }
+            */
+            break;
+
+        case $html && $attachments && !$html_images:
+            $message = $this->addMixedPart($mixed_params);
+            if ($has_text) {
+                $alt = $this->addAlternativePart($message);
+                $this->addTextPart($alt);
+                $this->addHtmlPart($alt);
+            } else {
+                $this->addHtmlPart($message);
+            }
+            for ($i = 0; $i < count($this->parts); $i++) {
+                $this->addAttachmentPart($message, $this->parts[$i]);
+            }
+            break;
+
+        case $html && $attachments && $html_images:
+            $message = $this->addMixedPart($mixed_params);
+            if ($has_text) {
+                $alt = $this->addAlternativePart($message);
+                $this->addTextPart($alt);
+                $rel = $this->addRelatedPart($alt);
+            } else {
+                $rel = $this->addRelatedPart($message);
+            }
+            $this->addHtmlPart($rel);
+            for ($i = 0; $i < count($this->html_images); $i++) {
+                $this->addHtmlImagePart($rel, $this->html_images[$i]);
+            }
+            for ($i = 0; $i < count($this->parts); $i++) {
+                $this->addAttachmentPart($message, $this->parts[$i]);
+            }
+            break;
+        }
+
+        if (!isset($message)) {
+            return null;
+        }
+
+        // Use saved boundary
+        if (!empty($this->build_params['boundary'])) {
+            $boundary = $this->build_params['boundary'];
+        } else {
+            $boundary = null;
+        }
+
+        // Write output to file
+        if ($filename) {
+            // Append mimePart message headers and body into file
+            $headers = $message->encodeToFile($filename, $boundary, $skip_head);
+            if (self::isError($headers)) {
+                return $headers;
+            }
+            $this->headers = array_merge($this->headers, $headers);
+            return null;
+        } else {
+            $output = $message->encode($boundary, $skip_head);
+            if (self::isError($output)) {
+                return $output;
+            }
+            $this->headers = array_merge($this->headers, $output['headers']);
+            return $output['body'];
+        }
+    }
+
+    /**
+     * Returns an array with the headers needed to prepend to the email
+     * (MIME-Version and Content-Type). Format of argument is:
+     * $array['header-name'] = 'header-value';
+     *
+     * @param array $xtra_headers Assoc array with any extra headers (optional)
+     *                            (Don't set Content-Type for multipart messages here!)
+     * @param bool  $overwrite    Overwrite already existing headers.
+     * @param bool  $skip_content Don't return content headers: Content-Type,
+     *                            Content-Disposition and Content-Transfer-Encoding
+     *
+     * @return array Assoc array with the mime headers
+     */
+    public function headers($xtra_headers = null, $overwrite = false, $skip_content = false)
+    {
+        // Add mime version header
+        $headers['MIME-Version'] = '1.0';
+
+        // Content-Type and Content-Transfer-Encoding headers should already
+        // be present if get() was called, but we'll re-set them to make sure
+        // we got them when called before get() or something in the message
+        // has been changed after get() [#14780]
+        if (!$skip_content) {
+            $headers += $this->contentHeaders();
+        }
+
+        if (!empty($xtra_headers)) {
+            $headers = array_merge($headers, $xtra_headers);
+        }
+
+        if ($overwrite) {
+            $this->headers = array_merge($this->headers, $headers);
+        } else {
+            $this->headers = array_merge($headers, $this->headers);
+        }
+
+        $headers = $this->headers;
+
+        if ($skip_content) {
+            unset($headers['Content-Type']);
+            unset($headers['Content-Transfer-Encoding']);
+            unset($headers['Content-Disposition']);
+        } else if (!empty($this->build_params['ctype'])) {
+            $headers['Content-Type'] = $this->build_params['ctype'];
+        }
+
+        $encodedHeaders = $this->encodeHeaders($headers);
+        return $encodedHeaders;
+    }
+
+    /**
+     * Get the text version of the headers
+     * (usefull if you want to use the PHP mail() function)
+     *
+     * @param array $xtra_headers Assoc array with any extra headers (optional)
+     *                            (Don't set Content-Type for multipart messages here!)
+     * @param bool  $overwrite    Overwrite the existing headers with new.
+     * @param bool  $skip_content Don't return content headers: Content-Type,
+     *                            Content-Disposition and Content-Transfer-Encoding
+     *
+     * @return string Plain text headers
+     */
+    public function txtHeaders($xtra_headers = null, $overwrite = false, $skip_content = false)
+    {
+        $headers = $this->headers($xtra_headers, $overwrite, $skip_content);
+
+        // Place Received: headers at the beginning of the message
+        // Spam detectors often flag messages with it after the Subject: as spam
+        if (isset($headers['Received'])) {
+            $received = $headers['Received'];
+            unset($headers['Received']);
+            $headers = array('Received' => $received) + $headers;
+        }
+
+        $ret = '';
+        $eol = $this->build_params['eol'];
+
+        foreach ($headers as $key => $val) {
+            if (is_array($val)) {
+                foreach ($val as $value) {
+                    $ret .= "$key: $value" . $eol;
+                }
+            } else {
+                $ret .= "$key: $val" . $eol;
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Sets message Content-Type header.
+     * Use it to build messages with various content-types e.g. miltipart/raport
+     * not supported by contentHeaders() function.
+     *
+     * @param string $type   Type name
+     * @param array  $params Hash array of header parameters
+     *
+     * @return void
+     * @since  1.7.0
+     */
+    public function setContentType($type, $params = array())
+    {
+        $header = $type;
+
+        $eol = !empty($this->build_params['eol']) ? $this->build_params['eol'] : "\r\n";
+
+        // add parameters
+        $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
+
+        if (is_array($params)) {
+            foreach ($params as $name => $value) {
+                if ($name == 'boundary') {
+                    $this->build_params['boundary'] = $value;
+                } else if (!preg_match($token_regexp, $value)) {
+                    $header .= ";$eol $name=$value";
+                } else {
+                    $value = addcslashes($value, '\\"');
+                    $header .= ";$eol $name=\"$value\"";
+                }
+            }
+        }
+
+        // add required boundary parameter if not defined
+        if (stripos($type, 'multipart/') === 0) {
+            if (empty($this->build_params['boundary'])) {
+                $this->build_params['boundary'] = '=_' . md5(rand() . microtime());
+            }
+
+            $header .= ";$eol boundary=\"".$this->build_params['boundary']."\"";
+        }
+
+        $this->build_params['ctype'] = $header;
+    }
+
+    /**
+     * Sets the Subject header
+     *
+     * @param string $subject String to set the subject to.
+     *
+     * @return void
+     */
+    public function setSubject($subject)
+    {
+        $this->headers['Subject'] = $subject;
+    }
+
+    /**
+     * Set an email to the From (the sender) header
+     *
+     * @param string $email The email address to use
+     *
+     * @return void
+     */
+    public function setFrom($email)
+    {
+        $this->headers['From'] = $email;
+    }
+
+    /**
+     * Add an email to the To header
+     * (multiple calls to this method are allowed)
+     *
+     * @param string $email The email direction to add
+     *
+     * @return void
+     */
+    public function addTo($email)
+    {
+        if (isset($this->headers['To'])) {
+            $this->headers['To'] .= ", $email";
+        } else {
+            $this->headers['To'] = $email;
+        }
+    }
+
+    /**
+     * Add an email to the Cc (carbon copy) header
+     * (multiple calls to this method are allowed)
+     *
+     * @param string $email The email direction to add
+     *
+     * @return void
+     */
+    public function addCc($email)
+    {
+        if (isset($this->headers['Cc'])) {
+            $this->headers['Cc'] .= ", $email";
+        } else {
+            $this->headers['Cc'] = $email;
+        }
+    }
+
+    /**
+     * Add an email to the Bcc (blank carbon copy) header
+     * (multiple calls to this method are allowed)
+     *
+     * @param string $email The email direction to add
+     *
+     * @return void
+     */
+    public function addBcc($email)
+    {
+        if (isset($this->headers['Bcc'])) {
+            $this->headers['Bcc'] .= ", $email";
+        } else {
+            $this->headers['Bcc'] = $email;
+        }
+    }
+
+    /**
+     * Since the PHP send function requires you to specify
+     * recipients (To: header) separately from the other
+     * headers, the To: header is not properly encoded.
+     * To fix this, you can use this public method to encode
+     * your recipients before sending to the send function.
+     *
+     * @param string $recipients A comma-delimited list of recipients
+     *
+     * @return string Encoded data
+     */
+    public function encodeRecipients($recipients)
+    {
+        $input  = array('To' => $recipients);
+        $retval = $this->encodeHeaders($input);
+
+        return $retval['To'] ;
+    }
+
+    /**
+     * Encodes headers as per RFC2047
+     *
+     * @param array $input  The header data to encode
+     * @param array $params Extra build parameters
+     *
+     * @return array Encoded data
+     */
+    protected function encodeHeaders($input, $params = array())
+    {
+        $build_params = $this->build_params;
+
+        if (!empty($params)) {
+            $build_params = array_merge($build_params, $params);
+        }
+
+        foreach ($input as $hdr_name => $hdr_value) {
+            if (is_array($hdr_value)) {
+                foreach ($hdr_value as $idx => $value) {
+                    $input[$hdr_name][$idx] = $this->encodeHeader(
+                        $hdr_name, $value,
+                        $build_params['head_charset'], $build_params['head_encoding']
+                    );
+                }
+            } else if ($hdr_value !== null) {
+                $input[$hdr_name] = $this->encodeHeader(
+                    $hdr_name, $hdr_value,
+                    $build_params['head_charset'], $build_params['head_encoding']
+                );
+            } else {
+                unset($input[$hdr_name]);
+            }
+        }
+
+        return $input;
+    }
+
+    /**
+     * Encodes a header as per RFC2047
+     *
+     * @param string $name     The header name
+     * @param string $value    The header data to encode
+     * @param string $charset  Character set name
+     * @param string $encoding Encoding name (base64 or quoted-printable)
+     *
+     * @return string Encoded header data (without a name)
+     * @since  1.5.3
+     */
+    public function encodeHeader($name, $value, $charset, $encoding)
+    {
+        return Mail_mimePart::encodeHeader(
+            $name, $value, $charset, $encoding, $this->build_params['eol']
+        );
+    }
+
+    /**
+     * Get file's basename (locale independent)
+     *
+     * @param string $filename Filename
+     *
+     * @return string Basename
+     */
+    protected function basename($filename)
+    {
+        // basename() is not unicode safe and locale dependent
+        if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) {
+            return preg_replace('/^.*[\\\\\\/]/', '', $filename);
+        } else {
+            return preg_replace('/^.*[\/]/', '', $filename);
+        }
+    }
+
+    /**
+     * Get Content-Type and Content-Transfer-Encoding headers of the message
+     *
+     * @return array Headers array
+     */
+    protected function contentHeaders()
+    {
+        $attachments = count($this->parts) > 0;
+        $html_images = count($this->html_images) > 0;
+        $html        = strlen($this->htmlbody) > 0;
+        $calendar    = strlen($this->calbody) > 0;
+        $has_text    = strlen($this->txtbody) > 0;
+        $text        = !$html && $has_text;
+        $headers     = array();
+
+        // See get()
+        switch (true) {
+        case $calendar && !$attachments && !$html && !$has_text:
+            $headers['Content-Type'] = 'text/calendar';
+            break;
+
+        case $calendar && !$attachments:
+            $headers['Content-Type'] = 'multipart/alternative';
+            break;
+
+        case $text && !$attachments:
+            $headers['Content-Type'] = 'text/plain';
+            break;
+
+        case !$text && !$html && $attachments:
+        case $text && $attachments:
+        case $html && $attachments && !$html_images:
+        case $html && $attachments && $html_images:
+            $headers['Content-Type'] = 'multipart/mixed';
+            break;
+
+        case $html && !$attachments && !$html_images && $has_text:
+        case $html && !$attachments && $html_images && $has_text:
+            $headers['Content-Type'] = 'multipart/alternative';
+            break;
+
+        case $html && !$attachments && !$html_images && !$has_text:
+            $headers['Content-Type'] = 'text/html';
+            break;
+
+        case $html && !$attachments && $html_images && !$has_text:
+            $headers['Content-Type'] = 'multipart/related';
+            break;
+
+        default:
+            return $headers;
+        }
+
+        $this->checkParams();
+
+        $eol = !empty($this->build_params['eol'])
+            ? $this->build_params['eol'] : "\r\n";
+
+        if ($headers['Content-Type'] == 'text/plain') {
+            // single-part message: add charset and encoding
+            if ($this->build_params['text_charset']) {
+                $charset = 'charset=' . $this->build_params['text_charset'];
+                // place charset parameter in the same line, if possible
+                // 26 = strlen("Content-Type: text/plain; ")
+                $headers['Content-Type']
+                    .= (strlen($charset) + 26 <= 76) ? "; $charset" : ";$eol $charset";
+            }
+
+            $headers['Content-Transfer-Encoding']
+                = $this->build_params['text_encoding'];
+        } else if ($headers['Content-Type'] == 'text/html') {
+            // single-part message: add charset and encoding
+            if ($this->build_params['html_charset']) {
+                $charset = 'charset=' . $this->build_params['html_charset'];
+                // place charset parameter in the same line, if possible
+                $headers['Content-Type']
+                    .= (strlen($charset) + 25 <= 76) ? "; $charset" : ";$eol $charset";
+            }
+            $headers['Content-Transfer-Encoding']
+                = $this->build_params['html_encoding'];
+        } else if ($headers['Content-Type'] == 'text/calendar') {
+            // single-part message: add charset and encoding
+            if ($this->build_params['calendar_charset']) {
+                $charset = 'charset=' . $this->build_params['calendar_charset'];
+                $headers['Content-Type'] .= "; $charset";
+            }
+
+            if ($this->build_params['calendar_method']) {
+                $method = 'method=' . $this->build_params['calendar_method'];
+                $headers['Content-Type'] .= "; $method";
+            }
+
+            $headers['Content-Transfer-Encoding']
+                = $this->build_params['calendar_encoding'];
+        } else {
+            // multipart message: and boundary
+            if (!empty($this->build_params['boundary'])) {
+                $boundary = $this->build_params['boundary'];
+            } else if (!empty($this->headers['Content-Type'])
+                && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m)
+            ) {
+                $boundary = $m[1];
+            } else {
+                $boundary = '=_' . md5(rand() . microtime());
+            }
+
+            $this->build_params['boundary'] = $boundary;
+            $headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
+        }
+
+        return $headers;
+    }
+
+    /**
+     * Validate and set build parameters
+     *
+     * @return void
+     */
+    protected function checkParams()
+    {
+        $encodings = array('7bit', '8bit', 'base64', 'quoted-printable');
+
+        $this->build_params['text_encoding']
+            = strtolower($this->build_params['text_encoding']);
+        $this->build_params['html_encoding']
+            = strtolower($this->build_params['html_encoding']);
+        $this->build_params['calendar_encoding']
+            = strtolower($this->build_params['calendar_encoding']);
+
+        if (!in_array($this->build_params['text_encoding'], $encodings)) {
+            $this->build_params['text_encoding'] = '7bit';
+        }
+        if (!in_array($this->build_params['html_encoding'], $encodings)) {
+            $this->build_params['html_encoding'] = '7bit';
+        }
+        if (!in_array($this->build_params['calendar_encoding'], $encodings)) {
+            $this->build_params['calendar_encoding'] = '7bit';
+        }
+
+        // text body
+        if ($this->build_params['text_encoding'] == '7bit'
+            && !preg_match('/ascii/i', $this->build_params['text_charset'])
+            && preg_match('/[^\x00-\x7F]/', $this->txtbody)
+        ) {
+            $this->build_params['text_encoding'] = 'quoted-printable';
+        }
+        // html body
+        if ($this->build_params['html_encoding'] == '7bit'
+            && !preg_match('/ascii/i', $this->build_params['html_charset'])
+            && preg_match('/[^\x00-\x7F]/', $this->htmlbody)
+        ) {
+            $this->build_params['html_encoding'] = 'quoted-printable';
+        }
+        // calendar body
+        if ($this->build_params['calendar_encoding'] == '7bit'
+            && !preg_match('/ascii/i', $this->build_params['calendar_charset'])
+            && preg_match('/[^\x00-\x7F]/', $this->calbody)
+        ) {
+            $this->build_params['calendar_encoding'] = 'quoted-printable';
+        }
+    }
+
+    /**
+     * Set body of specified message part
+     *
+     * @param string $type   One of: txtbody, calbody, htmlbody
+     * @param string $data   Either a string or the file name with the contents
+     * @param bool   $isfile If true the first param should be treated
+     *                       as a file name, else as a string (default)
+     * @param bool   $append If true the text or file is appended to
+     *                       the existing body, else the old body is
+     *                       overwritten
+     *
+     * @return mixed True on success or PEAR_Error object
+     */
+    protected function setBody($type, $data, $isfile = false, $append = false)
+    {
+        if ($isfile) {
+            $data = $this->file2str($data);
+            if (self::isError($data)) {
+                return $data;
+            }
+        }
+
+        if (!$append) {
+            $this->{$type} = $data;
+        } else {
+            $this->{$type} .= $data;
+        }
+
+        return true;
+    }
+
+    /**
+     * Adds a subpart to the mimePart object and
+     * returns it during the build process.
+     *
+     * @param mixed  $obj   The object to add the part to, or
+     *                      anything else if a new object is to be created.
+     * @param string $body  Part body
+     * @param string $ctype Part content type
+     * @param string $type  Internal part type
+     *
+     * @return object The mimePart object
+     */
+    protected function addBodyPart($obj, $body, $ctype, $type)
+    {
+        $params['content_type'] = $ctype;
+        $params['encoding']     = $this->build_params[$type . '_encoding'];
+        $params['charset']      = $this->build_params[$type . '_charset'];
+        $params['eol']          = $this->build_params['eol'];
+
+        if (is_object($obj)) {
+            $ret = $obj->addSubpart($body, $params);
+        } else {
+            $ret = new Mail_mimePart($body, $params);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * PEAR::isError implementation
+     *
+     * @param mixed $data Object
+     *
+     * @return bool True if object is an instance of PEAR_Error
+     */
+    public static function isError($data)
+    {
+        // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
+        if (is_a($data, 'PEAR_Error')) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * PEAR::raiseError implementation
+     *
+     * @param string $message A text error message
+     *
+     * @return PEAR_Error Instance of PEAR_Error
+     */
+    public static function raiseError($message)
+    {
+        // PEAR::raiseError() is not PHP 5.4 compatible
+        return new PEAR_Error($message);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/Mail/mimePart.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1276 @@
+<?php
+/**
+ * The Mail_mimePart class is used to create MIME E-mail messages
+ *
+ * This class enables you to manipulate and build a mime email
+ * from the ground up. The Mail_Mime class is a userfriendly api
+ * to this class for people who aren't interested in the internals
+ * of mime mail.
+ * This class however allows full control over the email.
+ *
+ * Compatible with PHP version 5 and 7
+ *
+ * LICENSE: This LICENSE is in the BSD license style.
+ * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
+ * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the authors, nor the names of its contributors
+ *   may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category  Mail
+ * @package   Mail_Mime
+ * @author    Richard Heyes  <richard@phpguru.org>
+ * @author    Cipriano Groenendal <cipri@php.net>
+ * @author    Sean Coates <sean@php.net>
+ * @author    Aleksander Machniak <alec@php.net>
+ * @copyright 2003-2006 PEAR <pear-group@php.net>
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Mail_mime
+ */
+
+/**
+ * Require PEAR
+ *
+ * This package depends on PEAR to raise errors.
+ */
+require_once 'PEAR.php';
+
+/**
+ * The Mail_mimePart class is used to create MIME E-mail messages
+ *
+ * This class enables you to manipulate and build a mime email
+ * from the ground up. The Mail_Mime class is a userfriendly api
+ * to this class for people who aren't interested in the internals
+ * of mime mail.
+ * This class however allows full control over the email.
+ *
+ * @category  Mail
+ * @package   Mail_Mime
+ * @author    Richard Heyes  <richard@phpguru.org>
+ * @author    Cipriano Groenendal <cipri@php.net>
+ * @author    Sean Coates <sean@php.net>
+ * @author    Aleksander Machniak <alec@php.net>
+ * @copyright 2003-2006 PEAR <pear-group@php.net>
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Mail_mime
+ */
+class Mail_mimePart
+{
+    /**
+     * The encoding type of this part
+     *
+     * @var string
+     */
+    protected $encoding;
+
+    /**
+     * An array of subparts
+     *
+     * @var array
+     */
+    protected $subparts = array();
+
+    /**
+     * The output of this part after being built
+     *
+     * @var string
+     */
+    protected $encoded;
+
+    /**
+     * Headers for this part
+     *
+     * @var array
+     */
+    protected $headers = array();
+
+    /**
+     * The body of this part (not encoded)
+     *
+     * @var string
+     */
+    protected $body;
+
+    /**
+     * The location of file with body of this part (not encoded)
+     *
+     * @var string
+     */
+    protected $body_file;
+
+    /**
+     * The short text of multipart part preamble (RFC2046 5.1.1)
+     *
+     * @var string
+     */
+    protected $preamble;
+
+    /**
+     * The end-of-line sequence
+     *
+     * @var string
+     */
+    protected $eol = "\r\n";
+
+
+    /**
+     * Constructor.
+     *
+     * Sets up the object.
+     *
+     * @param string $body   The body of the mime part if any.
+     * @param array  $params An associative array of optional parameters:
+     *     content_type      - The content type for this part eg multipart/mixed
+     *     encoding          - The encoding to use, 7bit, 8bit,
+     *                         base64, or quoted-printable
+     *     charset           - Content character set
+     *     cid               - Content ID to apply
+     *     disposition       - Content disposition, inline or attachment
+     *     filename          - Filename parameter for content disposition
+     *     description       - Content description
+     *     name_encoding     - Encoding of the attachment name (Content-Type)
+     *                         By default filenames are encoded using RFC2231
+     *                         Here you can set RFC2047 encoding (quoted-printable
+     *                         or base64) instead
+     *     filename_encoding - Encoding of the attachment filename (Content-Disposition)
+     *                         See 'name_encoding'
+     *     headers_charset   - Charset of the headers e.g. filename, description.
+     *                         If not set, 'charset' will be used
+     *     eol               - End of line sequence. Default: "\r\n"
+     *     headers           - Hash array with additional part headers. Array keys
+     *                         can be in form of <header_name>:<parameter_name>
+     *     body_file         - Location of file with part's body (instead of $body)
+     *     preamble          - short text of multipart part preamble (RFC2046 5.1.1)
+     */
+    public function __construct($body = '', $params = array())
+    {
+        if (!empty($params['eol'])) {
+            $this->eol = $params['eol'];
+        } else if (defined('MAIL_MIMEPART_CRLF')) { // backward-copat.
+            $this->eol = MAIL_MIMEPART_CRLF;
+        }
+
+        // Additional part headers
+        if (!empty($params['headers']) && is_array($params['headers'])) {
+            $headers = $params['headers'];
+        }
+
+        foreach ($params as $key => $value) {
+            switch ($key) {
+            case 'encoding':
+                $this->encoding = $value;
+                $headers['Content-Transfer-Encoding'] = $value;
+                break;
+
+            case 'cid':
+                $headers['Content-ID'] = '<' . $value . '>';
+                break;
+
+            case 'location':
+                $headers['Content-Location'] = $value;
+                break;
+
+            case 'body_file':
+                $this->body_file = $value;
+                break;
+
+            case 'preamble':
+                $this->preamble = $value;
+                break;
+
+            // for backward compatibility
+            case 'dfilename':
+                $params['filename'] = $value;
+                break;
+            }
+        }
+
+        // Default content-type
+        if (empty($params['content_type'])) {
+            $params['content_type'] = 'text/plain';
+        }
+
+        // Content-Type
+        $headers['Content-Type'] = $params['content_type'];
+        if (!empty($params['charset'])) {
+            $charset = "charset={$params['charset']}";
+            // place charset parameter in the same line, if possible
+            if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) {
+                $headers['Content-Type'] .= '; ';
+            } else {
+                $headers['Content-Type'] .= ';' . $this->eol . ' ';
+            }
+            $headers['Content-Type'] .= $charset;
+
+            // Default headers charset
+            if (!isset($params['headers_charset'])) {
+                $params['headers_charset'] = $params['charset'];
+            }
+        }
+
+        // header values encoding parameters
+        $h_charset  = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII';
+        $h_language = !empty($params['language']) ? $params['language'] : null;
+        $h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null;
+
+        if (!empty($params['filename'])) {
+            $headers['Content-Type'] .= ';' . $this->eol;
+            $headers['Content-Type'] .= $this->buildHeaderParam(
+                'name', $params['filename'], $h_charset, $h_language, $h_encoding
+            );
+        }
+
+        // Content-Disposition
+        if (!empty($params['disposition'])) {
+            $headers['Content-Disposition'] = $params['disposition'];
+            if (!empty($params['filename'])) {
+                $headers['Content-Disposition'] .= ';' . $this->eol;
+                $headers['Content-Disposition'] .= $this->buildHeaderParam(
+                    'filename', $params['filename'], $h_charset, $h_language,
+                    !empty($params['filename_encoding']) ? $params['filename_encoding'] : null
+                );
+            }
+
+            // add attachment size
+            $size = $this->body_file ? filesize($this->body_file) : strlen($body);
+            if ($size) {
+                $headers['Content-Disposition'] .= ';' . $this->eol . ' size=' . $size;
+            }
+        }
+
+        if (!empty($params['description'])) {
+            $headers['Content-Description'] = $this->encodeHeader(
+                'Content-Description', $params['description'], $h_charset, $h_encoding,
+                $this->eol
+            );
+        }
+
+        // Search and add existing headers' parameters
+        foreach ($headers as $key => $value) {
+            $items = explode(':', $key);
+            if (count($items) == 2) {
+                $header = $items[0];
+                $param  = $items[1];
+                if (isset($headers[$header])) {
+                    $headers[$header] .= ';' . $this->eol;
+                }
+                $headers[$header] .= $this->buildHeaderParam(
+                    $param, $value, $h_charset, $h_language, $h_encoding
+                );
+                unset($headers[$key]);
+            }
+        }
+
+        // Default encoding
+        if (!isset($this->encoding)) {
+            $this->encoding = '7bit';
+        }
+
+        // Assign stuff to member variables
+        $this->encoded  = array();
+        $this->headers  = $headers;
+        $this->body     = $body;
+    }
+
+    /**
+     * Encodes and returns the email. Also stores
+     * it in the encoded member variable
+     *
+     * @param string $boundary Pre-defined boundary string
+     *
+     * @return An associative array containing two elements,
+     *         body and headers. The headers element is itself
+     *         an indexed array. On error returns PEAR error object.
+     */
+    public function encode($boundary=null)
+    {
+        $encoded =& $this->encoded;
+
+        if (count($this->subparts)) {
+            $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
+            $eol = $this->eol;
+
+            $this->headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
+
+            $encoded['body'] = '';
+
+            if ($this->preamble) {
+                $encoded['body'] .= $this->preamble . $eol . $eol;
+            }
+
+            for ($i = 0; $i < count($this->subparts); $i++) {
+                $encoded['body'] .= '--' . $boundary . $eol;
+                $tmp = $this->subparts[$i]->encode();
+                if (is_a($tmp, 'PEAR_Error')) {
+                    return $tmp;
+                }
+                foreach ($tmp['headers'] as $key => $value) {
+                    $encoded['body'] .= $key . ': ' . $value . $eol;
+                }
+                $encoded['body'] .= $eol . $tmp['body'] . $eol;
+            }
+
+            $encoded['body'] .= '--' . $boundary . '--' . $eol;
+        } else if ($this->body) {
+            $encoded['body'] = $this->getEncodedData($this->body, $this->encoding);
+        } else if ($this->body_file) {
+            // Temporarily reset magic_quotes_runtime for file reads and writes
+            if ($magic_quote_setting = get_magic_quotes_runtime()) {
+                @ini_set('magic_quotes_runtime', 0);
+            }
+            $body = $this->getEncodedDataFromFile($this->body_file, $this->encoding);
+            if ($magic_quote_setting) {
+                @ini_set('magic_quotes_runtime', $magic_quote_setting);
+            }
+
+            if (is_a($body, 'PEAR_Error')) {
+                return $body;
+            }
+            $encoded['body'] = $body;
+        } else {
+            $encoded['body'] = '';
+        }
+
+        // Add headers to $encoded
+        $encoded['headers'] =& $this->headers;
+
+        return $encoded;
+    }
+
+    /**
+     * Encodes and saves the email into file or stream.
+     * Data will be appended to the file/stream.
+     *
+     * @param mixed   $filename  Existing file location
+     *                           or file pointer resource
+     * @param string  $boundary  Pre-defined boundary string
+     * @param boolean $skip_head True if you don't want to save headers
+     *
+     * @return array An associative array containing message headers
+     *               or PEAR error object
+     * @since  1.6.0
+     */
+    public function encodeToFile($filename, $boundary = null, $skip_head = false)
+    {
+        if (!is_resource($filename)) {
+            if (file_exists($filename) && !is_writable($filename)) {
+                $err = self::raiseError('File is not writeable: ' . $filename);
+                return $err;
+            }
+
+            if (!($fh = fopen($filename, 'ab'))) {
+                $err = self::raiseError('Unable to open file: ' . $filename);
+                return $err;
+            }
+        } else {
+            $fh = $filename;
+        }
+
+        // Temporarily reset magic_quotes_runtime for file reads and writes
+        if ($magic_quote_setting = get_magic_quotes_runtime()) {
+            @ini_set('magic_quotes_runtime', 0);
+        }
+
+        $res = $this->encodePartToFile($fh, $boundary, $skip_head);
+
+        if (!is_resource($filename)) {
+            fclose($fh);
+        }
+
+        if ($magic_quote_setting) {
+            @ini_set('magic_quotes_runtime', $magic_quote_setting);
+        }
+
+        return is_a($res, 'PEAR_Error') ? $res : $this->headers;
+    }
+
+    /**
+     * Encodes given email part into file
+     *
+     * @param string  $fh        Output file handle
+     * @param string  $boundary  Pre-defined boundary string
+     * @param boolean $skip_head True if you don't want to save headers
+     *
+     * @return array True on sucess or PEAR error object
+     */
+    protected function encodePartToFile($fh, $boundary = null, $skip_head = false)
+    {
+        $eol = $this->eol;
+
+        if (count($this->subparts)) {
+            $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
+            $this->headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
+        }
+
+        if (!$skip_head) {
+            foreach ($this->headers as $key => $value) {
+                fwrite($fh, $key . ': ' . $value . $eol);
+            }
+            $f_eol = $eol;
+        } else {
+            $f_eol = '';
+        }
+
+        if (count($this->subparts)) {
+            if ($this->preamble) {
+                fwrite($fh, $f_eol . $this->preamble . $eol);
+                $f_eol = $eol;
+            }
+
+            for ($i = 0; $i < count($this->subparts); $i++) {
+                fwrite($fh, $f_eol . '--' . $boundary . $eol);
+                $res = $this->subparts[$i]->encodePartToFile($fh);
+                if (is_a($res, 'PEAR_Error')) {
+                    return $res;
+                }
+                $f_eol = $eol;
+            }
+
+            fwrite($fh, $eol . '--' . $boundary . '--' . $eol);
+        } else if ($this->body) {
+            fwrite($fh, $f_eol);
+            fwrite($fh, $this->getEncodedData($this->body, $this->encoding));
+        } else if ($this->body_file) {
+            fwrite($fh, $f_eol);
+            $res = $this->getEncodedDataFromFile(
+                $this->body_file, $this->encoding, $fh
+            );
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Adds a subpart to current mime part and returns
+     * a reference to it
+     *
+     * @param mixed $body   The body of the subpart or Mail_mimePart object
+     * @param array $params The parameters for the subpart, same
+     *                      as the $params argument for constructor
+     *
+     * @return Mail_mimePart A reference to the part you just added.
+     */
+    public function addSubpart($body, $params = null)
+    {
+        if ($body instanceof Mail_mimePart) {
+            $part = $body;
+        } else {
+            $part = new Mail_mimePart($body, $params);
+        }
+
+        $this->subparts[] = $part;
+
+        return $part;
+    }
+
+    /**
+     * Returns encoded data based upon encoding passed to it
+     *
+     * @param string $data     The data to encode.
+     * @param string $encoding The encoding type to use, 7bit, base64,
+     *                         or quoted-printable.
+     *
+     * @return string Encoded data string
+     */
+    protected function getEncodedData($data, $encoding)
+    {
+        switch ($encoding) {
+        case 'quoted-printable':
+            return self::quotedPrintableEncode($data, 76, $this->eol);
+            break;
+
+        case 'base64':
+            return rtrim(chunk_split(base64_encode($data), 76, $this->eol));
+            break;
+
+        case '8bit':
+        case '7bit':
+        default:
+            return $data;
+        }
+    }
+
+    /**
+     * Returns encoded data based upon encoding passed to it
+     *
+     * @param string   $filename Data file location
+     * @param string   $encoding The encoding type to use, 7bit, base64,
+     *                           or quoted-printable.
+     * @param resource $fh       Output file handle. If set, data will be
+     *                           stored into it instead of returning it
+     *
+     * @return string Encoded data or PEAR error object
+     */
+    protected function getEncodedDataFromFile($filename, $encoding, $fh = null)
+    {
+        if (!is_readable($filename)) {
+            $err = self::raiseError('Unable to read file: ' . $filename);
+            return $err;
+        }
+
+        if (!($fd = fopen($filename, 'rb'))) {
+            $err = self::raiseError('Could not open file: ' . $filename);
+            return $err;
+        }
+
+        $data = '';
+
+        switch ($encoding) {
+        case 'quoted-printable':
+            while (!feof($fd)) {
+                $buffer = self::quotedPrintableEncode(fgets($fd), 76, $this->eol);
+                if ($fh) {
+                    fwrite($fh, $buffer);
+                } else {
+                    $data .= $buffer;
+                }
+            }
+            break;
+
+        case 'base64':
+            while (!feof($fd)) {
+                // Should read in a multiple of 57 bytes so that
+                // the output is 76 bytes per line. Don't use big chunks
+                // because base64 encoding is memory expensive
+                $buffer = fread($fd, 57 * 9198); // ca. 0.5 MB
+                $buffer = base64_encode($buffer);
+                $buffer = chunk_split($buffer, 76, $this->eol);
+                if (feof($fd)) {
+                    $buffer = rtrim($buffer);
+                }
+
+                if ($fh) {
+                    fwrite($fh, $buffer);
+                } else {
+                    $data .= $buffer;
+                }
+            }
+            break;
+
+        case '8bit':
+        case '7bit':
+        default:
+            while (!feof($fd)) {
+                $buffer = fread($fd, 1048576); // 1 MB
+                if ($fh) {
+                    fwrite($fh, $buffer);
+                } else {
+                    $data .= $buffer;
+                }
+            }
+        }
+
+        fclose($fd);
+
+        if (!$fh) {
+            return $data;
+        }
+    }
+
+    /**
+     * Encodes data to quoted-printable standard.
+     *
+     * @param string $input    The data to encode
+     * @param int    $line_max Optional max line length. Should
+     *                         not be more than 76 chars
+     * @param string $eol      End-of-line sequence. Default: "\r\n"
+     *
+     * @return string Encoded data
+     */
+    public static function quotedPrintableEncode($input , $line_max = 76, $eol = "\r\n")
+    {
+        /*
+        // imap_8bit() is extremely fast, but doesn't handle properly some characters
+        if (function_exists('imap_8bit') && $line_max == 76) {
+            $input = preg_replace('/\r?\n/', "\r\n", $input);
+            $input = imap_8bit($input);
+            if ($eol != "\r\n") {
+                $input = str_replace("\r\n", $eol, $input);
+            }
+            return $input;
+        }
+        */
+        $lines  = preg_split("/\r?\n/", $input);
+        $escape = '=';
+        $output = '';
+
+        foreach ($lines as $idx => $line) {
+            $newline = '';
+            $i = 0;
+
+            while (isset($line[$i])) {
+                $char = $line[$i];
+                $dec  = ord($char);
+                $i++;
+
+                if (($dec == 32) && (!isset($line[$i]))) {
+                    // convert space at eol only
+                    $char = '=20';
+                } elseif ($dec == 9 && isset($line[$i])) {
+                    ; // Do nothing if a TAB is not on eol
+                } elseif (($dec == 61) || ($dec < 32) || ($dec > 126)) {
+                    $char = $escape . sprintf('%02X', $dec);
+                } elseif (($dec == 46) && (($newline == '')
+                    || ((strlen($newline) + strlen("=2E")) >= $line_max))
+                ) {
+                    // Bug #9722: convert full-stop at bol,
+                    // some Windows servers need this, won't break anything (cipri)
+                    // Bug #11731: full-stop at bol also needs to be encoded
+                    // if this line would push us over the line_max limit.
+                    $char = '=2E';
+                }
+
+                // Note, when changing this line, also change the ($dec == 46)
+                // check line, as it mimics this line due to Bug #11731
+                // EOL is not counted
+                if ((strlen($newline) + strlen($char)) >= $line_max) {
+                    // soft line break; " =\r\n" is okay
+                    $output  .= $newline . $escape . $eol;
+                    $newline  = '';
+                }
+
+                $newline .= $char;
+            } // end of for
+
+            $output .= $newline . $eol;
+            unset($lines[$idx]);
+        }
+
+        // Don't want last crlf
+        $output = substr($output, 0, -1 * strlen($eol));
+
+        return $output;
+    }
+
+    /**
+     * Encodes the parameter of a header.
+     *
+     * @param string $name      The name of the header-parameter
+     * @param string $value     The value of the paramter
+     * @param string $charset   The characterset of $value
+     * @param string $language  The language used in $value
+     * @param string $encoding  Parameter encoding. If not set, parameter value
+     *                          is encoded according to RFC2231
+     * @param int    $maxLength The maximum length of a line. Defauls to 75
+     *
+     * @return string
+     */
+    protected function buildHeaderParam($name, $value, $charset = null,
+        $language = null, $encoding = null, $maxLength = 75
+    ) {
+        // RFC 2045:
+        // value needs encoding if contains non-ASCII chars or is longer than 78 chars
+        if (!preg_match('#[^\x20-\x7E]#', $value)) {
+            $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
+                . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
+            if (!preg_match($token_regexp, $value)) {
+                // token
+                if (strlen($name) + strlen($value) + 3 <= $maxLength) {
+                    return " {$name}={$value}";
+                }
+            } else {
+                // quoted-string
+                $quoted = addcslashes($value, '\\"');
+                if (strlen($name) + strlen($quoted) + 5 <= $maxLength) {
+                    return " {$name}=\"{$quoted}\"";
+                }
+            }
+        }
+
+        // RFC2047: use quoted-printable/base64 encoding
+        if ($encoding == 'quoted-printable' || $encoding == 'base64') {
+            return $this->buildRFC2047Param($name, $value, $charset, $encoding);
+        }
+
+        // RFC2231:
+        $encValue = preg_replace_callback(
+            '/([^\x21\x23\x24\x26\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])/',
+            array($this, 'encodeReplaceCallback'), $value
+        );
+        $value = "$charset'$language'$encValue";
+
+        $header = " {$name}*={$value}";
+        if (strlen($header) <= $maxLength) {
+            return $header;
+        }
+
+        $preLength = strlen(" {$name}*0*=");
+        $maxLength = max(16, $maxLength - $preLength - 3);
+        $maxLengthReg = "|(.{0,$maxLength}[^\%][^\%])|";
+
+        $headers = array();
+        $headCount = 0;
+        while ($value) {
+            $matches = array();
+            $found = preg_match($maxLengthReg, $value, $matches);
+            if ($found) {
+                $headers[] = " {$name}*{$headCount}*={$matches[0]}";
+                $value = substr($value, strlen($matches[0]));
+            } else {
+                $headers[] = " {$name}*{$headCount}*={$value}";
+                $value = '';
+            }
+            $headCount++;
+        }
+
+        $headers = implode(';' . $this->eol, $headers);
+        return $headers;
+    }
+
+    /**
+     * Encodes header parameter as per RFC2047 if needed
+     *
+     * @param string $name      The parameter name
+     * @param string $value     The parameter value
+     * @param string $charset   The parameter charset
+     * @param string $encoding  Encoding type (quoted-printable or base64)
+     * @param int    $maxLength Encoded parameter max length. Default: 76
+     *
+     * @return string Parameter line
+     */
+    protected function buildRFC2047Param($name, $value, $charset,
+        $encoding = 'quoted-printable', $maxLength = 76
+    ) {
+        // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
+        // parameter of a MIME Content-Type or Content-Disposition field",
+        // but... it's supported by many clients/servers
+        $quoted = '';
+
+        if ($encoding == 'base64') {
+            $value = base64_encode($value);
+            $prefix = '=?' . $charset . '?B?';
+            $suffix = '?=';
+
+            // 2 x SPACE, 2 x '"', '=', ';'
+            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
+            $len = $add_len + strlen($value);
+
+            while ($len > $maxLength) { 
+                // We can cut base64-encoded string every 4 characters
+                $real_len = floor(($maxLength - $add_len) / 4) * 4;
+                $_quote = substr($value, 0, $real_len);
+                $value = substr($value, $real_len);
+
+                $quoted .= $prefix . $_quote . $suffix . $this->eol . ' ';
+                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
+                $len = strlen($value) + $add_len;
+            }
+            $quoted .= $prefix . $value . $suffix;
+
+        } else {
+            // quoted-printable
+            $value = $this->encodeQP($value);
+            $prefix = '=?' . $charset . '?Q?';
+            $suffix = '?=';
+
+            // 2 x SPACE, 2 x '"', '=', ';'
+            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
+            $len = $add_len + strlen($value);
+
+            while ($len > $maxLength) {
+                $length = $maxLength - $add_len;
+                // don't break any encoded letters
+                if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) {
+                    $_quote = $matches[1];
+                }
+
+                $quoted .= $prefix . $_quote . $suffix . $this->eol . ' ';
+                $value = substr($value, strlen($_quote));
+                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
+                $len = strlen($value) + $add_len;
+            }
+
+            $quoted .= $prefix . $value . $suffix;
+        }
+
+        return " {$name}=\"{$quoted}\"";
+    }
+
+    /**
+     * Encodes a header as per RFC2047
+     *
+     * @param string $name     The header name
+     * @param string $value    The header data to encode
+     * @param string $charset  Character set name
+     * @param string $encoding Encoding name (base64 or quoted-printable)
+     * @param string $eol      End-of-line sequence. Default: "\r\n"
+     *
+     * @return string Encoded header data (without a name)
+     * @since  1.6.1
+     */
+    public static function encodeHeader($name, $value, $charset = 'ISO-8859-1',
+        $encoding = 'quoted-printable', $eol = "\r\n"
+    ) {
+        // Structured headers
+        $comma_headers = array(
+            'from', 'to', 'cc', 'bcc', 'sender', 'reply-to',
+            'resent-from', 'resent-to', 'resent-cc', 'resent-bcc',
+            'resent-sender', 'resent-reply-to',
+            'mail-reply-to', 'mail-followup-to',
+            'return-receipt-to', 'disposition-notification-to',
+        );
+        $other_headers = array(
+            'references', 'in-reply-to', 'message-id', 'resent-message-id',
+        );
+
+        $name = strtolower($name);
+
+        if (in_array($name, $comma_headers)) {
+            $separator = ',';
+        } else if (in_array($name, $other_headers)) {
+            $separator = ' ';
+        }
+
+        if (!$charset) {
+            $charset = 'ISO-8859-1';
+        }
+
+        // exploding quoted strings as well as some regexes below do not
+        // work properly with some charset e.g. ISO-2022-JP, we'll use UTF-8
+        $mb = $charset != 'UTF-8' && function_exists('mb_convert_encoding');
+
+        // Structured header (make sure addr-spec inside is not encoded)
+        if (!empty($separator)) {
+            // Simple e-mail address regexp
+            $email_regexp = '([^\s<]+|("[^\r\n"]+"))@\S+';
+
+            if ($mb) {
+                $value = mb_convert_encoding($value, 'UTF-8', $charset);
+            }
+
+            $parts = Mail_mimePart::explodeQuotedString("[\t$separator]", $value);
+            $value = '';
+
+            foreach ($parts as $part) {
+                $part = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $part);
+                $part = trim($part);
+
+                if (!$part) {
+                    continue;
+                }
+                if ($value) {
+                    $value .= $separator == ',' ? $separator . ' ' : ' ';
+                } else {
+                    $value = $name . ': ';
+                }
+
+                // let's find phrase (name) and/or addr-spec
+                if (preg_match('/^<' . $email_regexp . '>$/', $part)) {
+                    $value .= $part;
+                } else if (preg_match('/^' . $email_regexp . '$/', $part)) {
+                    // address without brackets and without name
+                    $value .= $part;
+                } else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) {
+                    // address with name (handle name)
+                    $address = $matches[0];
+                    $word    = str_replace($address, '', $part);
+                    $word    = trim($word);
+
+                    // check if phrase requires quoting
+                    if ($word) {
+                        // non-ASCII: require encoding
+                        if (preg_match('#([^\s\x21-\x7E]){1}#', $word)) {
+                            if ($word[0] == '"' && $word[strlen($word)-1] == '"') {
+                                // de-quote quoted-string, encoding changes
+                                // string to atom
+                                $word = substr($word, 1, -1);
+                                $word = preg_replace('/\\\\([\\\\"])/', '$1', $word);
+                            }
+                            if ($mb) {
+                                $word = mb_convert_encoding($word, $charset, 'UTF-8');
+                            }
+
+                            // find length of last line
+                            if (($pos = strrpos($value, $eol)) !== false) {
+                                $last_len = strlen($value) - $pos;
+                            } else {
+                                $last_len = strlen($value);
+                            }
+
+                            $word = Mail_mimePart::encodeHeaderValue(
+                                $word, $charset, $encoding, $last_len, $eol
+                            );
+                        } else if (($word[0] != '"' || $word[strlen($word)-1] != '"')
+                            && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $word)
+                        ) {
+                            // ASCII: quote string if needed
+                            $word = '"'.addcslashes($word, '\\"').'"';
+                        }
+                    }
+
+                    $value .= $word.' '.$address;
+                } else {
+                    if ($mb) {
+                        $part = mb_convert_encoding($part, $charset, 'UTF-8');
+                    }
+                    // addr-spec not found, don't encode (?)
+                    $value .= $part;
+                }
+
+                // RFC2822 recommends 78 characters limit, use 76 from RFC2047
+                $value = wordwrap($value, 76, $eol . ' ');
+            }
+
+            // remove header name prefix (there could be EOL too)
+            $value = preg_replace(
+                '/^'.$name.':('.preg_quote($eol, '/').')* /', '', $value
+            );
+        } else {
+            // Unstructured header
+            // non-ASCII: require encoding
+            if (preg_match('#([^\s\x21-\x7E]){1}#', $value)) {
+                if ($value[0] == '"' && $value[strlen($value)-1] == '"') {
+                    if ($mb) {
+                        $value = mb_convert_encoding($value, 'UTF-8', $charset);
+                    }
+                    // de-quote quoted-string, encoding changes
+                    // string to atom
+                    $value = substr($value, 1, -1);
+                    $value = preg_replace('/\\\\([\\\\"])/', '$1', $value);
+                    if ($mb) {
+                        $value = mb_convert_encoding($value, $charset, 'UTF-8');
+                    }
+                }
+
+                $value = Mail_mimePart::encodeHeaderValue(
+                    $value, $charset, $encoding, strlen($name) + 2, $eol
+                );
+            } else if (strlen($name.': '.$value) > 78) {
+                // ASCII: check if header line isn't too long and use folding
+                $value = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $value);
+                $tmp   = wordwrap($name . ': ' . $value, 78, $eol . ' ');
+                $value = preg_replace('/^' . $name . ':\s*/', '', $tmp);
+                // hard limit 998 (RFC2822)
+                $value = wordwrap($value, 998, $eol . ' ', true);
+            }
+        }
+
+        return $value;
+    }
+
+    /**
+     * Explode quoted string
+     *
+     * @param string $delimiter Delimiter expression string for preg_match()
+     * @param string $string    Input string
+     *
+     * @return array String tokens array
+     */
+    protected static function explodeQuotedString($delimiter, $string)
+    {
+        $result = array();
+        $strlen = strlen($string);
+        $quoted_string = '"(?:[^"\\\\]|\\\\.)*"';
+
+        for ($p=$i=0; $i < $strlen; $i++) {
+            if ($string[$i] === '"') {
+                $r = preg_match("/$quoted_string/", $string, $matches, 0, $i);
+                if (!$r || empty($matches[0])) {
+                    break;
+                }
+                $i += strlen($matches[0]) - 1;
+            } else if (preg_match("/$delimiter/", $string[$i])) {
+                $result[] = substr($string, $p, $i - $p);
+                $p = $i + 1;
+            }
+        }
+        $result[] = substr($string, $p);
+        return $result;
+    }
+
+    /**
+     * Encodes a header value as per RFC2047
+     *
+     * @param string $value      The header data to encode
+     * @param string $charset    Character set name
+     * @param string $encoding   Encoding name (base64 or quoted-printable)
+     * @param int    $prefix_len Prefix length. Default: 0
+     * @param string $eol        End-of-line sequence. Default: "\r\n"
+     *
+     * @return string Encoded header data
+     * @since  1.6.1
+     */
+    public static function encodeHeaderValue($value, $charset, $encoding, $prefix_len = 0, $eol = "\r\n")
+    {
+        // #17311: Use multibyte aware method (requires mbstring extension)
+        if ($result = Mail_mimePart::encodeMB($value, $charset, $encoding, $prefix_len, $eol)) {
+            return $result;
+        }
+
+        // Generate the header using the specified params and dynamicly
+        // determine the maximum length of such strings.
+        // 75 is the value specified in the RFC.
+        $encoding = $encoding == 'base64' ? 'B' : 'Q';
+        $prefix = '=?' . $charset . '?' . $encoding .'?';
+        $suffix = '?=';
+        $maxLength = 75 - strlen($prefix . $suffix);
+        $maxLength1stLine = $maxLength - $prefix_len;
+
+        if ($encoding == 'B') {
+            // Base64 encode the entire string
+            $value = base64_encode($value);
+
+            // We can cut base64 every 4 characters, so the real max
+            // we can get must be rounded down.
+            $maxLength = $maxLength - ($maxLength % 4);
+            $maxLength1stLine = $maxLength1stLine - ($maxLength1stLine % 4);
+
+            $cutpoint = $maxLength1stLine;
+            $output = '';
+
+            while ($value) {
+                // Split translated string at every $maxLength
+                $part = substr($value, 0, $cutpoint);
+                $value = substr($value, $cutpoint);
+                $cutpoint = $maxLength;
+                // RFC 2047 specifies that any split header should
+                // be separated by a CRLF SPACE.
+                if ($output) {
+                    $output .= $eol . ' ';
+                }
+                $output .= $prefix . $part . $suffix;
+            }
+            $value = $output;
+        } else {
+            // quoted-printable encoding has been selected
+            $value = Mail_mimePart::encodeQP($value);
+
+            // This regexp will break QP-encoded text at every $maxLength
+            // but will not break any encoded letters.
+            $reg1st = "|(.{0,$maxLength1stLine}[^\=][^\=])|";
+            $reg2nd = "|(.{0,$maxLength}[^\=][^\=])|";
+
+            if (strlen($value) > $maxLength1stLine) {
+                // Begin with the regexp for the first line.
+                $reg = $reg1st;
+                $output = '';
+                while ($value) {
+                    // Split translated string at every $maxLength
+                    // But make sure not to break any translated chars.
+                    $found = preg_match($reg, $value, $matches);
+
+                    // After this first line, we need to use a different
+                    // regexp for the first line.
+                    $reg = $reg2nd;
+
+                    // Save the found part and encapsulate it in the
+                    // prefix & suffix. Then remove the part from the
+                    // $value_out variable.
+                    if ($found) {
+                        $part = $matches[0];
+                        $len = strlen($matches[0]);
+                        $value = substr($value, $len);
+                    } else {
+                        $part = $value;
+                        $value = '';
+                    }
+
+                    // RFC 2047 specifies that any split header should
+                    // be separated by a CRLF SPACE
+                    if ($output) {
+                        $output .= $eol . ' ';
+                    }
+                    $output .= $prefix . $part . $suffix;
+                }
+                $value = $output;
+            } else {
+                $value = $prefix . $value . $suffix;
+            }
+        }
+
+        return $value;
+    }
+
+    /**
+     * Encodes the given string using quoted-printable
+     *
+     * @param string $str String to encode
+     *
+     * @return string Encoded string
+     * @since  1.6.0
+     */
+    public static function encodeQP($str)
+    {
+        // Bug #17226 RFC 2047 restricts some characters
+        // if the word is inside a phrase, permitted chars are only:
+        // ASCII letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_"
+
+        // "=",  "_",  "?" must be encoded
+        $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';
+        $str = preg_replace_callback(
+            $regexp, array('Mail_mimePart', 'qpReplaceCallback'), $str
+        );
+
+        return str_replace(' ', '_', $str);
+    }
+
+    /**
+     * Encodes the given string using base64 or quoted-printable.
+     * This method makes sure that encoded-word represents an integral
+     * number of characters as per RFC2047.
+     *
+     * @param string $str        String to encode
+     * @param string $charset    Character set name
+     * @param string $encoding   Encoding name (base64 or quoted-printable)
+     * @param int    $prefix_len Prefix length. Default: 0
+     * @param string $eol        End-of-line sequence. Default: "\r\n"
+     *
+     * @return string Encoded string
+     * @since  1.8.0
+     */
+    public static function encodeMB($str, $charset, $encoding, $prefix_len=0, $eol="\r\n")
+    {
+        if (!function_exists('mb_substr') || !function_exists('mb_strlen')) {
+            return;
+        }
+
+        $encoding = $encoding == 'base64' ? 'B' : 'Q';
+        // 75 is the value specified in the RFC
+        $prefix = '=?' . $charset . '?'.$encoding.'?';
+        $suffix = '?=';
+        $maxLength = 75 - strlen($prefix . $suffix);
+
+        // A multi-octet character may not be split across adjacent encoded-words
+        // So, we'll loop over each character
+        // mb_stlen() with wrong charset will generate a warning here and return null
+        $length      = mb_strlen($str, $charset);
+        $result      = '';
+        $line_length = $prefix_len;
+
+        if ($encoding == 'B') {
+            // base64
+            $start = 0;
+            $prev  = '';
+
+            for ($i=1; $i<=$length; $i++) {
+                // See #17311
+                $chunk = mb_substr($str, $start, $i-$start, $charset);
+                $chunk = base64_encode($chunk);
+                $chunk_len = strlen($chunk);
+
+                if ($line_length + $chunk_len == $maxLength || $i == $length) {
+                    if ($result) {
+                        $result .= "\n";
+                    }
+                    $result .= $chunk;
+                    $line_length = 0;
+                    $start = $i;
+                } else if ($line_length + $chunk_len > $maxLength) {
+                    if ($result) {
+                        $result .= "\n";
+                    }
+                    if ($prev) {
+                        $result .= $prev;
+                    }
+                    $line_length = 0;
+                    $start = $i - 1;
+                } else {
+                    $prev = $chunk;
+                }
+            }
+        } else {
+            // quoted-printable
+            // see encodeQP()
+            $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';
+
+            for ($i=0; $i<=$length; $i++) {
+                $char = mb_substr($str, $i, 1, $charset);
+                // RFC recommends underline (instead of =20) in place of the space
+                // that's one of the reasons why we're not using iconv_mime_encode()
+                if ($char == ' ') {
+                    $char = '_';
+                    $char_len = 1;
+                } else {
+                    $char = preg_replace_callback(
+                        $regexp, array('Mail_mimePart', 'qpReplaceCallback'), $char
+                    );
+                    $char_len = strlen($char);
+                }
+
+                if ($line_length + $char_len > $maxLength) {
+                    if ($result) {
+                        $result .= "\n";
+                    }
+                    $line_length = 0;
+                }
+
+                $result      .= $char;
+                $line_length += $char_len;
+            }
+        }
+
+        if ($result) {
+            $result = $prefix
+                .str_replace("\n", $suffix.$eol.' '.$prefix, $result).$suffix;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Callback function to replace extended characters (\x80-xFF) with their
+     * ASCII values (RFC2047: quoted-printable)
+     *
+     * @param array $matches Preg_replace's matches array
+     *
+     * @return string Encoded character string
+     */
+    protected static function qpReplaceCallback($matches)
+    {
+        return sprintf('=%02X', ord($matches[1]));
+    }
+
+    /**
+     * Callback function to replace extended characters (\x80-xFF) with their
+     * ASCII values (RFC2231)
+     *
+     * @param array $matches Preg_replace's matches array
+     *
+     * @return string Encoded character string
+     */
+    protected static function encodeReplaceCallback($matches)
+    {
+        return sprintf('%%%02X', ord($matches[1]));
+    }
+
+    /**
+     * PEAR::raiseError implementation
+     *
+     * @param string $message A text error message
+     *
+     * @return PEAR_Error Instance of PEAR_Error
+     */
+    public static function raiseError($message)
+    {
+        // PEAR::raiseError() is not PHP 5.4 compatible
+        return new PEAR_Error($message);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/README	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+This package is http://pear.php.net/package/Mail_Mime and has been migrated from http://svn.php.net/repository/pear/packages/Mail_Mime
+
+Please report all new issues via the PEAR bug tracker.
+
+If this package is marked as unmaintained and you have fixes, please submit your pull requests and start discussion on the pear-qa mailing list.
+
+To test, run either
+$ phpunit tests/
+  or
+$ pear run-tests -r
+
+To build, simply
+$ pear package
+
+To install from scratch
+$ pear install package.xml
+
+To upgrade
+$ pear upgrade -f package.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+{
+    "authors": [
+        {
+            "email": "cipri@php.net",
+            "name": "Cipriano Groenendal",
+            "role": "Lead"
+        },
+        {
+            "email": "alec@php.net",
+            "name": "Aleksander Machniak",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Mail": "./"
+        }
+    },
+    "description": "Mail_Mime provides classes to create MIME messages",
+    "homepage": "http://pear.php.net/package/Mail_Mime",
+    "include-path": [
+        "./"
+    ],
+    "license": "BSD-3-clause",
+    "name": "pear/mail_mime",
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime",
+        "source": "https://github.com/pear/Mail_Mime"
+    },
+    "type": "library",
+    "require": {
+        "pear/pear-core-minimal": "*"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.4" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd             http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Mail_Mime</name>
+ <channel>pear.php.net</channel>
+ <summary>Mail_Mime provides classes to create MIME messages.</summary>
+ <description>Mail_Mime provides classes to deal with the creation and manipulation of MIME messages.
+It allows people to create e-mail messages consisting of:
+* Text Parts
+* HTML Parts
+* Inline HTML Images
+* Attachments
+* Attached messages
+
+It supports big messages, base64 and quoted-printable encodings and
+non-ASCII characters in filenames, subjects, recipients, etc. encoded
+using RFC2047 and/or RFC2231.</description>
+ <lead>
+  <name>Cipriano Groenendal</name>
+  <user>cipri</user>
+  <email>cipri@php.net</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Aleksander Machniak</name>
+  <user>alec</user>
+  <email>alec@php.net</email>
+  <active>yes</active>
+ </lead>
+ <date>2017-11-17</date>
+ <time>11:00:00</time>
+ <version>
+  <release>1.10.2</release>
+  <api>1.10.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+ <notes>
+* Fix Bug #21255: Boundary gets added twice when using setContentType() [alec]
+* PHP 7.2 compatibility fixes [alec]
+ </notes>
+ <contents>
+  <dir name="/">
+   <dir name="scripts">
+    <file baseinstalldir="Mail" name="phail.php" role="doc" />
+   </dir> <!-- /scripts -->
+   <dir name="tests">
+    <file baseinstalldir="Mail" name="class-filename.phpt" role="test" />
+    <file baseinstalldir="Mail" name="encoding_case.phpt" role="test" />
+    <file baseinstalldir="Mail" name="headers_with_mbstring.phpt" role="test" />
+    <file baseinstalldir="Mail" name="headers_without_mbstring.phpt" role="test" />
+    <file baseinstalldir="Mail" name="sleep_wakeup_EOL-bug3488-part1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="sleep_wakeup_EOL-bug3488-part2.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_3513_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_3513_2.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_3513_3.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_7561_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_8386_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_8541_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_9722_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_10596_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_10816_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_10999_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_11381.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_11731.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_12165.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_12385_1.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_12411.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_12466.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_13032.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_13444.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_13962.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_14529.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_14779.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_14780.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_15320.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_16539.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_17025.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_17175.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_18083.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_18772.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_19497.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_20226.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_20273.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_20563.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_20564.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_21098.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_21205.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_21206.phpt" role="test" />
+    <file baseinstalldir="Mail" name="test_Bug_21255.phpt" role="test" />
+   </dir> <!-- /tests -->
+   <dir name="Mail">
+     <file baseinstalldir="/" name="mime.php" role="php" />
+     <file baseinstalldir="/" name="mimePart.php" role="php" />
+   </dir>
+  </dir> <!-- / -->
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.0.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.6.0</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+ <phprelease />
+ <changelog>
+  <release>
+   <version>
+    <release>1.0</release>
+    <api>1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2001-12-28</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+This is the initial release of the Mime_Mail package.
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1</release>
+    <api>1.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2002-04-03</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+This is a maintenance release with various bugfixes and minor enhancements.
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2</release>
+    <api>1.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2002-07-14</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+* Added header encoding
+* Altered mimePart to put boundary parameter on newline
+* Changed addFrom() to setFrom()
+* Added setSubject()
+* Made mimePart inherit crlf setting from mime
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.1</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2002-07-27</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+* License change
+* Applied a few changes From Ilia Alshanetsky
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.3.0RC1</release>
+    <api>1.3.0RC1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2005-03-20</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+* First release in over 2.5 years (!)
+* MANY bugfixes (see the bugtracker)
+* added a few tests
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.3.0</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2005-04-01</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+* First (stable) release in over 2.5 years (!)
+* MANY bugfixes (see the bugtracker)
+* added a few tests
+* one small fix after RC1 (bug #3940)
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.3.1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2005-07-13</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0a1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-03-08</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Changed License to BSD Style license, as that&apos;s what the code was since the beginning [cipri]
+* Fix Bug #30: Mail_Mime: _encodeHeaders is not RFC-2047 compliant. [cipri]
+* Fix Bug #3513: support of RFC2231 in header fields. [cipri]
+* Fix Bug #4696: addAttachment crash [cipri]
+* Fix Bug #5333: Only variables should be returned by reference; triggers notices since php 4.4.0 [cipri]
+* Fix Bug #7561: Mail_mimePart::_quotedPrintableEncode() misbehavior with mbstring overload [cipri]
+* Fix Bug #8223: Incorrectly encoded quoted-printable headers [cipri]
+* Fix Bug #8386: HTML body not correctly encoded if attachments present [cipri]
+* Fix Bug #8541: mimePart.php line delimiter is \r [cipri]
+* Fix Bug #9347: Notices about references [cweiske]
+* Fix Bug #9558: Broken multiline headers [cipri]
+* Fix Bug #9956: Notices being thrown [cipri]
+* Fix Bug #9976: Subject encoded twice [cipri]
+* Implement Feature #2952: Mail_mime::headers() saves extra headers [cipri]
+* Implement Feature #3636: Allow specification of charsets and encoding [cipri]
+* Implement Feature #4057: Mail_Mime: Add name parameter for Content-Type [cipri]
+* Implement Feature #4504: addHTMLImage does not work in cases when filename contains a path [cipri]
+* Implement Feature #5837: Mail_Mime: Build message for Net_SMTP [cipri]
+* Implement Feature #5934: Mail_Mime: choice for content disposition [cipri]
+* Implement Feature #6568: Mail_Mime: inline images referenced in CSS definitions not replaced. [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0a2</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-05</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #9722: _quotedPrintableEncode does not encode dot at start of line on Windows
+  platform [cipri]
+* Fix Bug #9725: multipart/related &amp; alternative wrong order [cipri]
+* Fix Bug #10146: mbstring fails to recognize encodings. [cipri]
+* Fix Bug #10158: Inline images not displayed on Mozilla Thunderbird [cipri]
+* Fix Bug #10298: Mail_mime, double Quotes and Specialchars in from and to Adress [cipri]
+* Fix Bug #10306: Strings with Double Quotes get encoded wrongly [cipri]
+* Fix Bug #10596: Incorrect handling of text and html &apos;0&apos; bodies [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0a3</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-05</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #10298: Mail_mime, double Quotes and Specialchars in from and to Adress [cipri]
+* Fix Bug #10306: Strings with Double Quotes get encoded wrongly [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0RC1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-12</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #10232: Gmail creates double line break when \r\n is used [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0RC2</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-22</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #10791: Unit tests fail [cipri]
+* Fix Bug #10792: No unit tests for recently fixed bugs [cipri]
+* Fix Bug #10793: Long headers don&apos;t get wrapped since fix for Bug #10298 [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0RC3</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-24</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #10816: Unwanted linebreak at the end of output [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0RC4</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-04-28</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">bsd style</license>
+   <notes>
+* Fix Bug #3513: support of RFC2231 in header fields. [cipri]
+* Fix Bug #10838: bad use of MIME encoding in header. [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.0</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-05-05</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Release notes:
+ * No more notices in PHP 5 /4.4.0.
+ * Improved inline HTML image function.
+ * Improved header encoding with foreign charsets.
+ * Improved long header rendering.
+ * More control over used Charsets and encoding schemes.
+ * More configurable attachments and inline images.
+ * Full RFC 2047 Support
+ * Full RFC 2231 Support
+ * Unit-tests
+
+Fixed bugs:
+ * Fix Bug #30: Mail_Mime: _encodeHeaders is not RFC-2047 compliant. [cipri]
+ * Fix Bug #3513: support of RFC2231 in header fields. [cipri]
+ * Fix Bug #4696: addAttachment crash [cipri]
+ * Fix Bug #5333: Only variables should be returned by reference; triggers notices since
+   php 4.4.0 [cipri]
+ * Fix Bug #5400: Do not return function reference [cipri]
+ * Fix Bug #5710: Little reference bugs [cipri]
+ * Fix Bug #5890: Only variable references should be returned by reference [cipri]
+ * Fix Bug #6260: Just a notice with PHP5 [cipri]
+ * Fix Bug #6261: php 5.1.1 upgrade [cipri]
+ * Fix Bug #6663: Notice about reference passing [cipri]
+ * Fix Bug #7561: Mail_mimePart::_quotedPrintableEncode() misbehavior with mbstring
+   overload [cipri]
+ * Fix Bug #7713: PHP5 Notice: Only variable references should be returned by reference [cipri]
+ * Fix Bug #8223: Incorrectly encoded quoted-printable headers [cipri]
+ * Fix Bug #8386: HTML body not correctly encoded if attachments present [cipri]
+ * Fix Bug #8541: mimePart.php line delimiter is \r [cipri]
+ * Fix Bug #8812: user header updates overwritten [cipri]
+ * Fix Bug #9347: Notices about references [cweiske]
+ * Fix Bug #9558: Broken multiline headers [cipri]
+ * Fix Bug #9722: _quotedPrintableEncode does not encode dot at start of line on Windows
+   platform [cipri]
+ * Fix Bug #9725: multipart/related &amp; alternative wrong order [cipri]
+ * Fix Bug #9956: Notices being thrown [cipri]
+ * Fix Bug #9976: Subject encoded twice [cipri]
+ * Fix Bug #10146: mbstring fails to recognize encodings. [cipri]
+ * Fix Bug #10158: Inline images not displayed on Mozilla Thunderbird [cipri]
+ * Fix Bug #10232: Gmail creates double line break when \r\n is used [cipri]
+ * Fix Bug #10298: Mail_mime, double Quotes and Specialchars in from and to Adress [cipri]
+ * Fix Bug #10306: Strings with Double Quotes get encoded wrongly [cipri]
+ * Fix Bug #10596: Incorrect handling of text and html &apos;0&apos; bodies [cipri]
+ * Fix Bug #10791: Unit tests fail [cipri]
+ * Fix Bug #10792: No unit tests for recently fixed bugs [cipri]
+ * Fix Bug #10793: Long headers don&apos;t get wrapped since fix for Bug #10298 [cipri]
+ * Fix Bug #10816: Unwanted linebreak at the end of output [cipri]
+ * Fix Bug #10838: bad use of MIME encoding in header. [cipri]
+Implemented Features:
+ * Implement Feature #2952: Mail_mime::headers() saves extra headers [cipri]
+ * Implement Feature #3636: Allow specification of charsets and encoding [cipri]
+ * Implement Feature #4057: Mail_Mime: Add name parameter for Content-Type [cipri]
+ * Implement Feature #4504: addHTMLImage does not work in cases when filename contains a path [cipri]
+ * Implement Feature #5837: Mail_Mime: Build message for Net_SMTP [cipri]
+ * Implement Feature #5934: Mail_Mime: choice for content disposition [cipri]
+ * Implement Feature #6568: Mail_Mime: inline images referenced in CSS definitions not replaced. [cipri]
+ * Implement Feature #10604: Put an option to specify Content-Location in the header [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.0a1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-06-10</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Split off mail_MimeDecode
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.0RC1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-06-10</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Split off mail_MimeDecode
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.0</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-06-17</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Split off Mail_MimeDecode
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.1</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-06-20</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Fix Bug #11344: Error at line 644 in mime.php [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.2</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-06-21</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Fix Bug #11381: domain name is attached to content-id, trailing greater-than sign is
+  not remove [cipri]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.5.3</release>
+    <api>1.3.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2009-12-29</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Fixed bugs:
+ * Fix Bug #14678: srand() lowers security [clockwerx]
+ * Fix Bug #12921: _file2str not binary safe [walter]
+ * Fix Bug #12385: Bad regex when replacing css style attachments [cipri]
+ * Fix Bug #16911: Excessive semicolon in MIME header [alec]
+ * Fix Bug #15320: Attachment charset is not set in Content-Type header [alec]
+ * Fix Bug #16911: Lack of semicolon separator for MIME header parameters [alec]
+ * Fix Bug #16846: Use preg_replace_callback() instead of /e modifier [alec]
+ * Fix Bug #14779: Problem with an empty attachment [alec]
+ * Fix Bug #15913: Optimize the memory used by Mail_mimePart::encode.
+                   Avoid having attachments data duplicated in memory [alec]
+ * Fix Bug #16539: Headers longer than 998 characters aren&apos;t wrapped [alec]
+ * Fix Bug #11238: Wrong encoding of structured headers [alec]
+ * Fix Bug #13641: iconv_mime_encode() seems to work different/errorious than
+                   the build in logic. Removed &apos;ignore_iconv&apos; param.  [alec]
+ * Fix Bug #16706: Incorrect double-quotes RFC 2231-encoded parameter values [alec]
+ * Fix Bug #14232: RFC2231: tspecials encoding in _buildHeaderParam() [alec]
+Implemented Features:
+ * Implement Feature #10438: Function (encodeHeader) for encoding of given header [alec]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.6.0</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-01-27</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * Don&apos;t break specified headers folding [alec]
+ * Bug #17025: Wrong headers() result for long unwrapable header value [alec]
+
+Implemented Features:
+ * Allow setting Content-ID for HTML Images [alec]
+ * Added one setParam() in place of many set*() functions [alec]
+ * Added getParam(), getTXTBody(), getHTMLBody() [alec]
+ * Skip RFC2231&apos;s charset if filename contains only ASCII characters [alec]
+ * Make sure that Received: headers are returned on the top [alec]
+ * Added saveMessageBody() and getMessageBody() functions [alec]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.6.1</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-03-08</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * Fix encoding of Return-Receipt-To and Disposition-Notification-To headers [alec]
+
+Implemented Features:
+ * Implement Feature #12466: Build parameters validation [alec]
+ * Implement Feature #17175: Content-Description support for attachments [alec]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.6.2</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-03-23</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * Fix Bug #17226: Non RFC-compliant quoted-printable encoding of structured headers [alec]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.7.0</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-04-12</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Implemented Features:
+ * Added Mail_mime::setContentType() function with possibility to set various
+   types in Content-Type header (also fixes problem with boundary parameter when Content-Type
+   header was specified by user) [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2010-07-29</date>
+   <version>
+    <release>1.8.0</release>
+    <api>1.4.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * Double-addition of e-mail domain to content ID in HTML images [alec]
+ * #17311: Multi-octet characters are split across adjacent &apos;encoded-word&apos;s [alec]
+ * #17573: Place charset parameter in first line of Content-Type header (if possible) [alec]
+Implemented Features:
+ * #17518: addTo() method [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2010-12-01</date>
+   <version>
+    <release>1.8.1</release>
+    <api>1.4.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * #18083: Not possible to set separate charset for attachment content and headers [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2011-08-10</date>
+   <version>
+    <release>1.8.2</release>
+    <api>1.4.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+Bugs Fixed:
+ * #18426: Fixed backward compatibility for &quot;dfilename&quot; parameter [alec]
+ * Removed xmail.dtd, xmail.xsl from the package [alec]
+ * Fixed handling of email addresses with quoted local part [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2012-03-12</date>
+   <version>
+    <release>1.8.3</release>
+    <api>1.4.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Request #19009: Remove error_reporting from tests [alec]
+* Fixed Bug #19094: Email addresses do not have to contain a space between the name and address part [alec]
+* Fixed Bug #19328: Wrong encoding of filenames with comma [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2012-05-17</date>
+   <version>
+    <release>1.8.4</release>
+    <api>1.4.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Request #19406: Allow to set individual attachment part headers [alec]
+* Fixed Bug #18982: Non-static method Mail_mimePart::encodeHeader() should not be called statically [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2012-06-09</date>
+   <version>
+    <release>1.8.5</release>
+    <api>1.4.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Added possibility to set additional parameters of message part header, e.g. attachment size [alec]
+* Added automatic setting of attachment size via Content-Disposition header size parameter [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2012-10-23</date>
+   <version>
+    <release>1.8.6</release>
+    <api>1.4.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Bug #19473: PEAR::isError() compatibility problem with PHP 5.4 [alec]
+* Bug #19497: Attachment filename is cut on slash character [alec]
+* Bug #19665: Add Mail-Reply-To and Mail-Followup-To to structured recipient headers list [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2012-12-25</date>
+   <version>
+    <release>1.8.7</release>
+    <api>1.4.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Bug #5333: Fix more return by reference errors [alec]
+* Bug #19754: Fix compatibility with PHP4 [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2013-07-05</date>
+   <version>
+    <release>1.8.8</release>
+    <api>1.4.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Fixed warning/notice on (static vs. non-static) PEAR::raiseError() usage [alec]
+* Fixed Bug #19761: PHP5 warnings about return by reference [alec]
+* Fixed Bug #19770: Make cid generator more unique on Windows [alec]
+* Fixed Bug #19987: E_STRICT warning when null is passed by reference [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2014-05-14</date>
+   <version>
+    <release>1.8.9</release>
+    <api>1.4.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Fixed Bug #20273: Incorrect handling of HTAB in encodeHeader() [alec]
+* Fixed Bug #20226: Mail_mimePart::encodeHeader does not encode ISO-2022-JP string [alec]
+* Fixed Bug #20222: Broken Compatybility with PHP4 [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2015-07-05</date>
+   <time>12:50:00</time>
+   <version>
+    <release>1.9.0RC1</release>
+    <api>2.0.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Drop PHP4 support, Fix warnings on PHP7 [alec]
+* Request #20564: Added possibility to unset headers [alec]
+* Request #20563: Added isMultipart() method [alec]
+* Request #20565: Accept also a file pointer in Mail_mimePart::encodeToFile(),
+                  Mail_mime::get() and Mail_mime::saveMessageBody() [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2015-08-06</date>
+   <time>12:00:00</time>
+   <version>
+    <release>1.9.0</release>
+    <api>1.9.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Bug #20921: Make Mail_mimePart::encodeHeaderValue() a static method [alec]
+* Bug #20931: Really remove unset headers [alec]
+* Request #18772: Added methods for creating text/calendar messages [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2015-09-13</date>
+   <time>12:00:00</time>
+   <version>
+    <release>1.10.0</release>
+    <api>1.10.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Add possibility to add externally created Mail_mimePart objects as attachments [alec]
+* Add possibility to set preamble text for multipart messages [alec]
+   </notes>
+  </release>
+  <release>
+   <date>2017-05-21</date>
+   <time>12:00:00</time>
+   <version>
+    <release>1.10.1</release>
+    <api>1.10.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
+   <notes>
+* Fix Bug 21206: explodeQuotedString() does not handle quoted strings correctly [dfukagaw28]
+* Fix Bug 21205: Invalid encoding of headers with quoted multibyte strings in non-unicode charset [dfukagaw28]
+* Fix Bug 21098: Discrepancy in handling of empty (but set) plain text part [alec]
+   </notes>
+  </release>
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/scripts/phail.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,47 @@
+#!@prefix@/bin/php -Cq
+<?php
+/**
+* PHAIL - stands for PHP Mail
+* @author Tomas V.V.Cox <cox@idecnet.com>
+*/
+require_once 'Mail.php';
+require_once 'Mail/mime.php';
+require_once 'Console/Getopt.php';
+
+$argv = Console_Getopt::readPHPArgv();
+$opts = Console_Getopt::getOpt($argv, 'f:c:s:t:a:b:');
+if (PEAR::isError($opts)) {
+    usage($opts->getMessage());
+}
+
+PEAR::setErrorHandling(PEAR_ERROR_DIE);
+$mime = new Mail_mime;
+foreach ($opts[0] as $opt) {
+    $param = $opt[1];
+    switch ($opt[0]) {
+        case 'f':
+            $headers['From'] = $param; break;
+        case 'c':
+            $headers['Cc'] = $param; break;
+        case 's':
+            $headers['Subject'] = $param; break;
+        case 't':
+            $to = $param; break;
+        case 'a':
+            $mime->addAttachment($param); break;
+        case 'b':
+            $isfile = @is_file($param) ? true : false;
+            $mime->setTXTBody($param, $isfile); break;
+    }
+}
+
+$mbody   = $mime->get();
+$headers = $mime->headers($headers);
+$mail    = Mail::factory('mail');
+$mail->send($to, $headers, $mbody);
+
+function usage($error)
+{
+    die($error);
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/Makefile	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,8 @@
+
+clean:
+	rm -f *.log *.php *.diff *.exp *.out
+
+
+
+test:
+	cd .. && pear run-tests tests/*.phpt && cd tests;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/class-filename.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,13 @@
+--TEST--
+Test class filename (bug #24)
+--SKIPIF--
+<?php
+echo "skip This will be broken until Mail_Mime2";
+?>
+--FILE--
+<?php
+@include('Mail/Mime.php');
+echo class_exists('Mail_Mime') ? 'Include OK' : 'Include failed';
+?>
+--EXPECT--
+Include OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/encoding_case.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,13 @@
+--TEST--
+Bug #2364   Tabs in Mail_mimePart::quotedPrintableEncode()
+--SKIPIF--
+--FILE--
+<?php
+$test = "Here's\t\na tab\n";
+require_once('Mail/mimePart.php');
+print Mail_mimePart::quotedPrintableEncode($test, 7);
+?>
+--EXPECT--
+Here's=
+=09
+a tab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/headers_with_mbstring.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,148 @@
+--TEST--
+Multi-test for headers encoding using base64 and quoted-printable
+--SKIPIF--
+<?php
+if (!function_exists('mb_substr') || !function_exists('mb_strlen')) {
+    die "skip mbstring functions not found!";
+}
+?>
+--FILE--
+<?php
+include("Mail/mime.php");
+$mime = new Mail_mime();
+
+$headers = array(
+array('From', '<adresse@adresse.de>'),
+array('From', 'adresse@adresse.de'),
+array('From', 'Frank Do <adresse@adresse.de>'),
+array('To', 'Frank Do <adresse@adresse.de>, James Clark <james@domain.com>'),
+array('From', '"Frank Do" <adresse@adresse.de>'),
+array('Cc', '"Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>'),
+array('Cc', ' <adresse@adresse.de>, "Kuśmiderski Jan Krzysztof Janusz Długa nazwa" <cris@domain.com>'),
+array('From', '"adresse@adresse.de" <addresse@adresse>'),
+array('From', 'adresse@adresse.de <addresse@adresse>'),
+array('From', '"German Umlauts öäü" <adresse@adresse.de>'),
+array('Subject', 'German Umlauts öäü <adresse@adresse.de>'),
+array('Subject', 'Short ASCII subject'),
+array('Subject', 'Long ASCII subject - multiline space separated words - too long for one line'),
+array('Subject', 'Short Unicode ż subject'),
+array('Subject', 'Long Unicode subject - zażółć gęślą jaźń - too long for one line'),
+array('References', '<hglvja$jg7$1@nemesis.news.neostrada.pl>  <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>'),
+array('To', '"Frank Do" <adresse@adresse.de>,, "James Clark" <james@domain.com>'),
+array('To', '"Frank \\" \\\\Do" <adresse@adresse.de>'),
+array('To', 'Frank " \\Do <adresse@adresse.de>'),
+array('Subject', "A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test"),
+array('Subject', "TEST Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir!!!?"),
+array('Subject', "Update: Microsoft Windows-Tool zum Entfernen bösartiger Software 3.6"),
+array('From', "test@nàme <user@domain.com>"),
+array('From', "Test <\"test test\"@domain.com>"),
+array('From', "\"test test\"@domain.com"),
+array('From', "<\"test test\"@domain.com>"),
+array('From', "Doe<test@domain.com>"),
+array('From', "\"John Doe\"<test@domain.com>"),
+array('Mail-Reply-To', 'adresse@adresse.de <addresse@adresse>'),
+array('Mail-Reply-To', '"öäü" <adresse@adresse.de>'),
+);
+
+$i = 1;
+foreach ($headers as $header) {
+    $hdr = $mime->encodeHeader($header[0], $header[1], 'UTF-8', 'base64');
+    printf("[%02d] %s: %s\n", $i, $header[0], $hdr);
+    $hdr = $mime->encodeHeader($header[0], $header[1], 'UTF-8', 'quoted-printable');
+    printf("[%02d] %s: %s\n", $i, $header[0], $hdr);
+    $i++;
+}
+?>
+--EXPECT--
+[01] From: <adresse@adresse.de>
+[01] From: <adresse@adresse.de>
+[02] From: adresse@adresse.de
+[02] From: adresse@adresse.de
+[03] From: Frank Do <adresse@adresse.de>
+[03] From: Frank Do <adresse@adresse.de>
+[04] To: Frank Do <adresse@adresse.de>, James Clark <james@domain.com>
+[04] To: Frank Do <adresse@adresse.de>, James Clark <james@domain.com>
+[05] From: "Frank Do" <adresse@adresse.de>
+[05] From: "Frank Do" <adresse@adresse.de>
+[06] Cc: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[06] Cc: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[07] Cc: <adresse@adresse.de>, =?UTF-8?B?S3XFm21pZGVyc2tpIEphbiBLcnp5c3p0b2Yg?=
+ =?UTF-8?B?SmFudXN6IETFgnVnYSBuYXp3YQ==?= <cris@domain.com>
+[07] Cc: <adresse@adresse.de>, =?UTF-8?Q?Ku=C5=9Bmiderski_Jan_Krzysztof_Janusz?=
+ =?UTF-8?Q?_D=C5=82uga_nazwa?= <cris@domain.com>
+[08] From: "adresse@adresse.de" <addresse@adresse>
+[08] From: "adresse@adresse.de" <addresse@adresse>
+[09] From: "adresse@adresse.de" <addresse@adresse>
+[09] From: "adresse@adresse.de" <addresse@adresse>
+[10] From: =?UTF-8?B?R2VybWFuIFVtbGF1dHMgw7bDpMO8?= <adresse@adresse.de>
+[10] From: =?UTF-8?Q?German_Umlauts_=C3=B6=C3=A4=C3=BC?= <adresse@adresse.de>
+[11] Subject: =?UTF-8?B?R2VybWFuIFVtbGF1dHMgw7bDpMO8IDxhZHJlc3NlQGFkcmVzc2Uu?=
+ =?UTF-8?B?ZGU+?=
+[11] Subject: =?UTF-8?Q?German_Umlauts_=C3=B6=C3=A4=C3=BC_=3Cadresse=40adresse?=
+ =?UTF-8?Q?=2Ede=3E?=
+[12] Subject: Short ASCII subject
+[12] Subject: Short ASCII subject
+[13] Subject: Long ASCII subject - multiline space separated words - too long for
+ one line
+[13] Subject: Long ASCII subject - multiline space separated words - too long for
+ one line
+[14] Subject: =?UTF-8?B?U2hvcnQgVW5pY29kZSDFvCBzdWJqZWN0?=
+[14] Subject: =?UTF-8?Q?Short_Unicode_=C5=BC_subject?=
+[15] Subject: =?UTF-8?B?TG9uZyBVbmljb2RlIHN1YmplY3QgLSB6YcW8w7PFgsSHIGfEmcWb?=
+ =?UTF-8?B?bMSFIGphxbrFhCAtIHRvbyBsb25nIGZvciBvbmUgbGluZQ==?=
+[15] Subject: =?UTF-8?Q?Long_Unicode_subject_-_za=C5=BC=C3=B3=C5=82=C4=87_g?=
+ =?UTF-8?Q?=C4=99=C5=9Bl=C4=85_ja=C5=BA=C5=84_-_too_long_for_one_line?=
+[16] References: <hglvja$jg7$1@nemesis.news.neostrada.pl>
+ <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>
+[16] References: <hglvja$jg7$1@nemesis.news.neostrada.pl>
+ <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>
+[17] To: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[17] To: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[18] To: "Frank \" \\Do" <adresse@adresse.de>
+[18] To: "Frank \" \\Do" <adresse@adresse.de>
+[19] To: "Frank \" \\Do" <adresse@adresse.de>
+[19] To: "Frank \" \\Do" <adresse@adresse.de>
+[20] Subject: A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test
+[20] Subject: A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test
+[21] Subject: =?UTF-8?B?VEVTVCBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1p?=
+ =?UTF-8?B?ciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIg?=
+ =?UTF-8?B?Z3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRv?=
+ =?UTF-8?B?bGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7w=?=
+ =?UTF-8?B?w59lIHZvbiBtaXIgU8O8cGVyIGdyw7ZzZSB0b2xsZSBncsO8w59lIHZvbiBt?=
+ =?UTF-8?B?aXIgU8O8cGVyIGdyw7ZzZSB0b2xsZSBncsO8w59lIHZvbiBtaXIgU8O8cGVy?=
+ =?UTF-8?B?IGdyw7ZzZSB0b2xsZSBncsO8w59lIHZvbiBtaXIgU8O8cGVyIGdyw7ZzZSB0?=
+ =?UTF-8?B?b2xsZSBncsO8w59lIHZvbiBtaXIhISE/?=
+[21] Subject: =?UTF-8?Q?TEST_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_m?=
+ =?UTF-8?Q?ir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCp?=
+ =?UTF-8?Q?er_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6?=
+ =?UTF-8?Q?se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tolle_gr?=
+ =?UTF-8?Q?=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC?=
+ =?UTF-8?Q?=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von?=
+ =?UTF-8?Q?_mir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S?=
+ =?UTF-8?Q?=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir!!!=3F?=
+[22] Subject: =?UTF-8?B?VXBkYXRlOiBNaWNyb3NvZnQgV2luZG93cy1Ub29sIHp1bSBFbnRm?=
+ =?UTF-8?B?ZXJuZW4gYsO2c2FydGlnZXIgU29mdHdhcmUgMy42?=
+[22] Subject: =?UTF-8?Q?Update=3A_Microsoft_Windows-Tool_zum_Entfernen_b=C3=B6?=
+ =?UTF-8?Q?sartiger_Software_3=2E6?=
+[23] From: =?UTF-8?B?dGVzdEBuw6BtZQ==?= <user@domain.com>
+[23] From: =?UTF-8?Q?test=40n=C3=A0me?= <user@domain.com>
+[24] From: Test <"test test"@domain.com>
+[24] From: Test <"test test"@domain.com>
+[25] From: "test test"@domain.com
+[25] From: "test test"@domain.com
+[26] From: <"test test"@domain.com>
+[26] From: <"test test"@domain.com>
+[27] From: Doe <test@domain.com>
+[27] From: Doe <test@domain.com>
+[28] From: "John Doe" <test@domain.com>
+[28] From: "John Doe" <test@domain.com>
+[29] Mail-Reply-To: "adresse@adresse.de" <addresse@adresse>
+[29] Mail-Reply-To: "adresse@adresse.de" <addresse@adresse>
+[30] Mail-Reply-To: =?UTF-8?B?w7bDpMO8?= <adresse@adresse.de>
+[30] Mail-Reply-To: =?UTF-8?Q?=C3=B6=C3=A4=C3=BC?= <adresse@adresse.de>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/headers_without_mbstring.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,149 @@
+--TEST--
+Multi-test for headers encoding using base64 and quoted-printable
+--SKIPIF--
+<?php
+if (function_exists('mb_substr') && function_exists('mb_strlen')) {
+    die("skip mbstring functions found!");
+}
+?>
+--FILE--
+<?php
+include("Mail/mime.php");
+$mime = new Mail_mime();
+
+$headers = array(
+array('From', '<adresse@adresse.de>'),
+array('From', 'adresse@adresse.de'),
+array('From', 'Frank Do <adresse@adresse.de>'),
+array('To', 'Frank Do <adresse@adresse.de>, James Clark <james@domain.com>'),
+array('From', '"Frank Do" <adresse@adresse.de>'),
+array('Cc', '"Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>'),
+array('Cc', ' <adresse@adresse.de>, "Kuśmiderski Jan Krzysztof Janusz Długa nazwa" <cris@domain.com>'),
+array('From', '"adresse@adresse.de" <addresse@adresse>'),
+array('From', 'adresse@adresse.de <addresse@adresse>'),
+array('From', '"German Umlauts öäü" <adresse@adresse.de>'),
+array('Subject', 'German Umlauts öäü <adresse@adresse.de>'),
+array('Subject', 'Short ASCII subject'),
+array('Subject', 'Long ASCII subject - multiline space separated words - too long for one line'),
+array('Subject', 'Short Unicode ż subject'),
+array('Subject', 'Long Unicode subject - zażółć gęślą jaźń - too long for one line'),
+array('References', '<hglvja$jg7$1@nemesis.news.neostrada.pl>  <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>'),
+array('To', '"Frank Do" <adresse@adresse.de>,, "James Clark" <james@domain.com>'),
+array('To', '"Frank \\" \\\\Do" <adresse@adresse.de>'),
+array('To', 'Frank " \\Do <adresse@adresse.de>'),
+array('Subject', "A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test"),
+array('Subject', "TEST Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir Süper gröse tolle grüße von mir!!!?"),
+array('Subject', "Update: Microsoft Windows-Tool zum Entfernen bösartiger Software 3.6"),
+array('From', "test@nàme <user@domain.com>"),
+array('From', "Test <\"test test\"@domain.com>"),
+array('From', "\"test test\"@domain.com"),
+array('From', "<\"test test\"@domain.com>"),
+array('From', "Doe<test@domain.com>"),
+array('From', "\"John Doe\"<test@domain.com>"),
+array('Mail-Reply-To', 'adresse@adresse.de <addresse@adresse>'),
+array('Mail-Reply-To', '"öäü" <adresse@adresse.de>'),
+);
+
+$i = 1;
+foreach ($headers as $header) {
+    $hdr = $mime->encodeHeader($header[0], $header[1], 'UTF-8', 'base64');
+    printf("[%02d] %s: %s\n", $i, $header[0], $hdr);
+    $hdr = $mime->encodeHeader($header[0], $header[1], 'UTF-8', 'quoted-printable');
+    printf("[%02d] %s: %s\n", $i, $header[0], $hdr);
+    $i++;
+}
+?>
+--EXPECT--
+[01] From: <adresse@adresse.de>
+[01] From: <adresse@adresse.de>
+[02] From: adresse@adresse.de
+[02] From: adresse@adresse.de
+[03] From: Frank Do <adresse@adresse.de>
+[03] From: Frank Do <adresse@adresse.de>
+[04] To: Frank Do <adresse@adresse.de>, James Clark <james@domain.com>
+[04] To: Frank Do <adresse@adresse.de>, James Clark <james@domain.com>
+[05] From: "Frank Do" <adresse@adresse.de>
+[05] From: "Frank Do" <adresse@adresse.de>
+[06] Cc: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[06] Cc: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[07] Cc: <adresse@adresse.de>, =?UTF-8?B?S3XFm21pZGVyc2tpIEphbiBLcnp5c3p0b2Yg?=
+ =?UTF-8?B?SmFudXN6IETFgnVnYSBuYXp3YQ==?= <cris@domain.com>
+[07] Cc: <adresse@adresse.de>,
+ =?UTF-8?Q?Ku=C5=9Bmiderski_Jan_Krzysztof_Janusz_D?=
+ =?UTF-8?Q?=C5=82uga_nazwa?= <cris@domain.com>
+[08] From: "adresse@adresse.de" <addresse@adresse>
+[08] From: "adresse@adresse.de" <addresse@adresse>
+[09] From: "adresse@adresse.de" <addresse@adresse>
+[09] From: "adresse@adresse.de" <addresse@adresse>
+[10] From: =?UTF-8?B?R2VybWFuIFVtbGF1dHMgw7bDpMO8?= <adresse@adresse.de>
+[10] From: =?UTF-8?Q?German_Umlauts_=C3=B6=C3=A4=C3=BC?= <adresse@adresse.de>
+[11] Subject: =?UTF-8?B?R2VybWFuIFVtbGF1dHMgw7bDpMO8IDxhZHJlc3NlQGFkcmVzc2Uu?=
+ =?UTF-8?B?ZGU+?=
+[11] Subject: =?UTF-8?Q?German_Umlauts_=C3=B6=C3=A4=C3=BC_=3Cadresse=40adresse?=
+ =?UTF-8?Q?=2Ede=3E?=
+[12] Subject: Short ASCII subject
+[12] Subject: Short ASCII subject
+[13] Subject: Long ASCII subject - multiline space separated words - too long for
+ one line
+[13] Subject: Long ASCII subject - multiline space separated words - too long for
+ one line
+[14] Subject: =?UTF-8?B?U2hvcnQgVW5pY29kZSDFvCBzdWJqZWN0?=
+[14] Subject: =?UTF-8?Q?Short_Unicode_=C5=BC_subject?=
+[15] Subject: =?UTF-8?B?TG9uZyBVbmljb2RlIHN1YmplY3QgLSB6YcW8w7PFgsSHIGfEmcWb?=
+ =?UTF-8?B?bMSFIGphxbrFhCAtIHRvbyBsb25nIGZvciBvbmUgbGluZQ==?=
+[15] Subject: =?UTF-8?Q?Long_Unicode_subject_-_za=C5=BC=C3=B3=C5=82=C4=87_g=C4?=
+ =?UTF-8?Q?=99=C5=9Bl=C4=85_ja=C5=BA=C5=84_-_too_long_for_one_line?=
+[16] References: <hglvja$jg7$1@nemesis.news.neostrada.pl>
+ <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>
+[16] References: <hglvja$jg7$1@nemesis.news.neostrada.pl>
+ <4b2e87ac$1@news.home.net.pl> <hgm5b1$3a7$1@atlantis.news.neostrada.pl>
+[17] To: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[17] To: "Frank Do" <adresse@adresse.de>, "James Clark" <james@domain.com>
+[18] To: "Frank \" \\Do" <adresse@adresse.de>
+[18] To: "Frank \" \\Do" <adresse@adresse.de>
+[19] To: "Frank \" \\Do" <adresse@adresse.de>
+[19] To: "Frank \" \\Do" <adresse@adresse.de>
+[20] Subject: A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test
+[20] Subject: A REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY
+ REALLY REALLY REALLY REALLY REALLY REALLY REALLY REALLY /REALLY/ LONG test
+[21] Subject: =?UTF-8?B?VEVTVCBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1p?=
+ =?UTF-8?B?ciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIg?=
+ =?UTF-8?B?Z3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRv?=
+ =?UTF-8?B?bGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zD?=
+ =?UTF-8?B?n2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1p?=
+ =?UTF-8?B?ciBTw7xwZXIgZ3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIg?=
+ =?UTF-8?B?Z3LDtnNlIHRvbGxlIGdyw7zDn2Ugdm9uIG1pciBTw7xwZXIgZ3LDtnNlIHRv?=
+ =?UTF-8?B?bGxlIGdyw7zDn2Ugdm9uIG1pciEhIT8=?=
+[21] Subject: =?UTF-8?Q?TEST_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir?=
+ =?UTF-8?Q?_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_g?=
+ =?UTF-8?Q?r=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tol?=
+ =?UTF-8?Q?le_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC?=
+ =?UTF-8?Q?=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_m?=
+ =?UTF-8?Q?ir_S=C3=BCper_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper?=
+ =?UTF-8?Q?_gr=C3=B6se_tolle_gr=C3=BC=C3=9Fe_von_mir_S=C3=BCper_gr=C3=B6se_t?=
+ =?UTF-8?Q?olle_gr=C3=BC=C3=9Fe_von_mir!!!=3F?=
+[22] Subject: =?UTF-8?B?VXBkYXRlOiBNaWNyb3NvZnQgV2luZG93cy1Ub29sIHp1bSBFbnRm?=
+ =?UTF-8?B?ZXJuZW4gYsO2c2FydGlnZXIgU29mdHdhcmUgMy42?=
+[22] Subject: =?UTF-8?Q?Update=3A_Microsoft_Windows-Tool_zum_Entfernen_b=C3=B6sa?=
+ =?UTF-8?Q?rtiger_Software_3=2E6?=
+[23] From: =?UTF-8?B?dGVzdEBuw6BtZQ==?= <user@domain.com>
+[23] From: =?UTF-8?Q?test=40n=C3=A0me?= <user@domain.com>
+[24] From: Test <"test test"@domain.com>
+[24] From: Test <"test test"@domain.com>
+[25] From: "test test"@domain.com
+[25] From: "test test"@domain.com
+[26] From: <"test test"@domain.com>
+[26] From: <"test test"@domain.com>
+[27] From: Doe <test@domain.com>
+[27] From: Doe <test@domain.com>
+[28] From: "John Doe" <test@domain.com>
+[28] From: "John Doe" <test@domain.com>
+[29] Mail-Reply-To: "adresse@adresse.de" <addresse@adresse>
+[29] Mail-Reply-To: "adresse@adresse.de" <addresse@adresse>
+[30] Mail-Reply-To: =?UTF-8?B?w7bDpMO8?= <adresse@adresse.de>
+[30] Mail-Reply-To: =?UTF-8?Q?=C3=B6=C3=A4=C3=BC?= <adresse@adresse.de>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/sleep_wakeup_EOL-bug3488-part1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+--TEST--
+Bug #3488   Sleep/Wakeup EOL Consistency - Part 1
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mime.php');
+$mm = new Mail_mime("\n");
+$mm->setHTMLBody('<html></html>');
+$mm->setTxtBody('Blah blah');
+
+if (version_compare(phpversion(), "5.0.0", '<')) {
+    $mmCopy = $mm;
+} else {
+    $mmCopy = clone($mm);
+}
+
+$mm->get();
+$x = $mm->headers();
+
+$smm = serialize(array('mm' => $mmCopy, 'header' => $x['Content-Type']));
+$fp = fopen('sleep_wakeup_data', 'w');
+fwrite($fp, $smm);
+fclose($fp);
+
+echo "Data written";
+?>
+--EXPECT--
+Data written
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/sleep_wakeup_EOL-bug3488-part2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Bug #3488   Sleep/Wakeup EOL Consistency - Part 2
+--SKIPIF--
+if (!is_readable('sleep_wakeup_data')) {
+    echo "skip No data. Part 1 must run first.\n";
+}
+--FILE--
+<?php
+require_once('Mail/mime.php');
+$filename = 'sleep_wakeup_data';
+$fp = fopen($filename, 'r');
+$smm = fread($fp, filesize($filename));
+fclose($fp);
+@unlink($filename);
+
+$mmData = unserialize($smm);
+$mmData['mm']->get();
+$x = $mmData['mm']->headers();
+
+list($h1) = explode("\n", $mmData['header']);
+list($h2) = explode("\n", $x['Content-Type']);
+
+echo ($h1 == $h2) ? "Match" : "No Match";
+
+?>
+--EXPECT--
+Match
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_10596_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+--TEST--
+Bug #10596  Incorrect handling of text and html '0' bodies
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+$mime = new Mail_mime();
+$mime->setTxtBody('0');
+$mime->setHTMLBody('0');
+$body = $mime->get();
+if ($body){
+    print("OK");
+}else{
+    print("NO BODY FOUND");
+}
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_10816_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Bug #10816  Unwanted linebreak at the end of output
+--SKIPIF--
+--FILE--
+<?php
+$eol = "#";
+include("Mail/mime.php");
+$encoder = new Mail_mime(array('eol'=>$eol));
+$encoder->setTXTBody('test');
+$encoder->setHTMLBody('<b>test</b>');
+$encoder->addAttachment('Just a test', 'application/octet-stream', 'test.txt', false);
+$body = $encoder->get();
+$taillength = -1 * strlen($eol) * 2;
+if (substr($body, $taillength) == ($eol.$eol)){
+    print("FAILED\n");
+    print("Body:\n");
+    print("..." . substr($body, -10) . "\n");
+}else{
+    print("OK\n");
+}
+--EXPECT--
+OK
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_10999_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Bug #10999  Bad Content-ID(cid) format
+--SKIPIF--
+--FILE--
+<?php
+$from='user@from.example.com';
+
+require_once('Mail/mime.php');
+
+$mime=new Mail_mime();
+
+$body='<img src="test.gif"/>';
+
+$mime->setHTMLBody($body);
+$mime->setFrom($from);
+$mime->addHTMLImage('','image/gif', 'test.gif', false);
+$msg=$mime->get();
+
+$header = preg_match('|Content-ID: <[0-9a-fA-F]+@from.example.com>|', $msg);
+if (!$header){
+    print("FAIL:\n");
+    print($msg);
+}else{
+    print("OK");
+}
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_11381.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+--TEST--
+Bug #11381  Domain name is attached to content-id, trailing greater-than sign is not removed
+--SKIPIF--
+--FILE--
+<?php
+$from='Test User <user@from.example.com>';
+
+require_once('Mail/mime.php');
+
+$mime=new Mail_mime();
+
+$body='<img src="test.gif"/>';
+
+$mime->setHTMLBody($body);
+$mime->setFrom($from);
+$mime->addHTMLImage('','image/gif', 'test.gif', false);
+$msg=$mime->get();
+
+$header = preg_match('|Content-ID: <[0-9a-fA-F]+@from.example.com>|', $msg);
+if (!$header){
+    print("FAIL:\n");
+    print($msg);
+}else{
+    print("OK");
+}
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_11731.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+--TEST--
+Bug #11731  Full stops after soft line breaks are not encoded
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+// Second full stop will be at the start of the second line after quoted-printable
+// encoding (full stop '=2E' + 72 characters + line-continuation '=' = 76)
+$text     = '.123456789012345678901234567890123456789012345678901234567890123456789012.3456';
+$params   = Array(
+    'content_type' => 'text/plain',
+    'encoding'     => 'quoted-printable',
+);    
+$mimePart = new Mail_mimePart($text, $params);
+$encoded  =  $mimePart->encode();
+echo $encoded['body'];
+    
+--EXPECT--
+=2E123456789012345678901234567890123456789012345678901234567890123456789012=
+=2E3456
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_12165.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Bug #12165  Dot at the end of the line disappeared
+--SKIPIF--
+--FILE--
+<?php
+include ("Mail/mime.php");
+$string='http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com';
+$mime = new Mail_mime();
+$mime->setHTMLBody($string);
+print_r($mime->get());
+    
+--EXPECT--
+http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=
+=2Ecom
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_12385_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+--TEST--
+Bug #12385  Bad regex when replacing css style attachments
+--SKIPIF--
+--FILE--
+<?php
+$from='user@from.example.com';
+
+require_once('Mail/mime.php');
+
+$mime=new Mail_mime();
+
+$body="<style>
+className {
+    background-image: url('test.gif');
+}
+</script>
+";
+
+$mime->setHTMLBody($body);
+$mime->setFrom($from);
+$mime->addHTMLImage('','image/gif', 'test.gif', false);
+$msg = $mime->get();
+
+$cidtag = preg_match("|url\('cid:[^']*'\);|", $msg);
+if (!$cidtag){
+    print("FAIL:\n");
+    print($msg);
+}else{
+    print("OK");
+}
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_12411.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+--TEST--
+Bug #12411  RFC2047 encoded attachment filenames
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+$Mime = new Mail_mime();
+
+// some text with polish Unicode letter at the beginning
+$filename = base64_decode("xZtjaWVtYQ==");
+$Mime->addAttachment('testfile', "text/plain", $filename, FALSE,
+    'base64', 'attachment', 'ISO-8859-1', 'pl', '',
+    'quoted-printable', 'base64');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match_all('/(name|filename)=([^\s]+)/i', $content, $matches)) {
+    echo implode("\n", $matches[2]);
+}
+
+?>
+--EXPECT--
+"=?ISO-8859-1?Q?=C5=9Bciema?="
+"=?ISO-8859-1?B?xZtjaWVtYQ==?=";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_12466.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Bug #12466  Content-Transfer-Encoding checking
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$params = array(
+    'text_encoding' => '7bit',
+    'html_encoding' => '7bit',
+);
+$mime = new Mail_mime($params);
+$mime->setTXTBody("ż");
+$mime->setHTMLBody("z");
+$body = $mime->getMessage();
+
+preg_match_all('/Content-Transfer-Encoding: (.*)/', $body, $m);
+echo trim($m[1][0])."\n".trim($m[1][1]);
+
+?>
+--EXPECT--
+quoted-printable
+7bit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_13032.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Bug #13032  Proper (different) boundary for nested parts
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+$mime = new Mail_mime("\r\n");
+$mime->setHTMLBody('html');
+$mime->setTXTBody('text');
+$mime->addAttachment('file.pdf', 'application/pdf', 'file.pdf', false, 'base64', 'inline');
+$msg = $mime->getMessage();
+
+if (preg_match_all('/boundary="([^"]+)"/', $msg, $matches)) {
+    if (count($matches) == 2 && count($matches[1]) == 2 &&
+        $matches[1][0] != $matches[1][1]) {
+            print('OK');
+    }
+}
+?>
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_13444.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,30 @@
+--TEST--
+Bug #9725   multipart/related & alternative wrong order
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$mime = new Mail_mime();
+$mime->setTXTBody("test");
+$mime->setHTMLBody("test");
+$mime->addHTMLImage("test", 'application/octet-stream', '', false);
+$body = $mime->get();
+$head = $mime->headers();
+$headCT = $head['Content-Type'];
+$headCT = explode(";", $headCT);
+$headCT = $headCT[0];
+
+$ct = preg_match_all('|Content-Type: ([^;\r\n]+)|', $body, $matches);
+print($headCT);
+print("\n");
+foreach ($matches[1] as $match){
+    print($match);
+    print("\n");
+}
+--EXPECT--
+multipart/alternative
+text/plain
+multipart/related
+text/html
+application/octet-stream
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_13962.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+--TEST--
+Bug #13962  Multiple header support
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mime.php');
+
+$mime = new Mail_mime();
+
+$mime->setFrom('user@from.example.com');
+$r = $mime->txtHeaders(array('Received' => array('Received 1', 'Received 2')));
+
+print_r($r); 
+?>
+--EXPECT--
+Received: Received 1
+Received: Received 2
+MIME-Version: 1.0
+From: user@from.example.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_14529.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Bug #14529  basename() workaround
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$Mime = new Mail_mime();
+// some text with polish Unicode letter at the beginning
+$filename = base64_decode("xZtjaWVtYQ==");
+$Mime->addAttachment('testfile', "text/plain", $filename, FALSE, 'base64', 'attachment', 'ISO-8859-1');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match('/filename([^\s]+)/i', $content, $matches)) {
+    echo $matches[1];
+}
+?>
+--EXPECT--
+*=ISO-8859-1''%C5%9Bciema;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_14779.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,25 @@
+--TEST--
+Bug #14779  Proper header-body separator for empty attachment
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$m = new Mail_mime();
+$m->addAttachment('', "text/plain", 'file.txt', FALSE, 'base64', 'attachment');
+$result = $m->get();
+
+if (preg_match('/(Content.*)--=.*/s', $result, $matches)) {
+    print_r($matches[1]."END");
+}
+
+?>
+--EXPECT--
+Content-Transfer-Encoding: base64
+Content-Type: text/plain;
+ name=file.txt
+Content-Disposition: attachment;
+ filename=file.txt
+
+
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_14780.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Bug #14780  Invalid Content-Type when headers() is called before get()
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$mime = new Mail_mime();
+$mime->setTXTBody("test");
+$mime->setHTMLBody("test");
+
+$head1 = $mime->headers();
+$body = $mime->get();
+$head2 = $mime->headers();
+
+if ($head1 === $head2) {
+    echo "OK";
+}
+
+?>
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_15320.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Bug #15320  Charset parameter in Content-Type of mail parts
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$Mime = new Mail_mime();
+$Mime->addAttachment('testfile', "text/plain", 'file.txt', FALSE, 'base64', 'attachment', 'ISO-8859-1');
+
+$content = $Mime->get();
+//$content = str_replace("\n", '', $content);
+
+if (preg_match('/Content-type:([^\n]+)/i', $content, $matches)) {
+    echo $matches[1];
+}
+
+?>
+--EXPECT--
+text/plain; charset=ISO-8859-1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_16539.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,49 @@
+--TEST--
+Bug #16539  Headers longer than 998 characters
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+$mime = new Mail_mime();
+
+$headers = array(
+'To' => 'jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com',
+'Subject' => 'jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com',
+);
+
+echo $mime->txtHeaders($headers, true, true);
+?>
+--EXPECT--
+MIME-Version: 1.0
+To: jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com, jskibbie@schawk.com,
+ jskibbie@schawk.com, jskibbie@schawk.com
+Subject: jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.co
+ m,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com,jskibbie@schawk.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_17025.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+--TEST--
+Bug #16539  Headers longer than 998 characters
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$headers['From'] = 'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhh';
+# over than 76 chars
+$mime = new Mail_mime();
+$hdrs = $mime->headers($headers);
+print_r($hdrs['From']); 
+?>
+--EXPECT--
+aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_17175.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+--TEST--
+Bug #17175  Content-Description support+ecoding
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mime.php');
+
+$Mime = new Mail_Mime();
+$Mime->setTXTBody('Test message.');
+$Mime->addAttachment('test file contents', "text/plain",
+    'test.txt', FALSE, 'base64', NULL, 'UTF-8', NULL, NULL, NULL, NULL,
+    'desc');
+$Mime->addAttachment('test file contents', "text/plain",
+    'test2.txt', FALSE, 'base64', NULL, 'UTF-8', NULL, NULL, NULL, NULL,
+    'test unicode żąśź');
+
+$body = $Mime->getMessage();
+preg_match_all('/Content-Description: (.*)/', $body, $matches);
+foreach ($matches[1] as $value)
+    echo $value."\n";
+?>
+--EXPECT--
+desc
+=?UTF-8?Q?test_unicode_=C5=BC=C4=85=C5=9B=C5=BA?=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_18083.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Bug #18083  Separate charset for attachment's content and headers
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+$Mime = new Mail_mime();
+
+$Mime->addAttachment('testfile', "text/plain",
+    base64_decode("xZtjaWVtYQ=="), FALSE,
+    'base64', 'attachment', 'ISO-8859-1', 'pl', '',
+    'quoted-printable', 'base64', '', 'UTF-8');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match_all('/(name|filename)=([^\s]+)/i', $content, $matches)) {
+    echo implode("\n", $matches[2]);
+}
+?>
+--EXPECT--
+"=?UTF-8?Q?=C5=9Bciema?="
+"=?UTF-8?B?xZtjaWVtYQ==?=";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_18772.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,46 @@
+--TEST--
+Bug #18772  Text/calendar message
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$mime = new Mail_mime;
+$mime->setSubject('test');
+
+// A message with text/calendar only
+$mime->setCalendarBody('VCALENDAR');
+
+echo $mime->getMessage();
+echo "\n---\n";
+
+// A message with alternative text
+$mime->setTXTBody('vcalendar');
+$msg = $mime->getMessage();
+
+echo preg_replace('/=_[0-9a-z]+/', '*', $msg);
+--EXPECT--
+MIME-Version: 1.0
+Content-Type: text/calendar; method=request; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+Subject: test
+
+VCALENDAR
+---
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="*"
+Content-Transfer-Encoding: quoted-printable
+Subject: test
+
+--*
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset=ISO-8859-1
+
+vcalendar
+--*
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/calendar; method=request; charset=UTF-8
+
+VCALENDAR
+--*--
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_19497.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Bug #19497  Attachment filenames with a slash character
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+$Mime = new Mail_mime();
+
+$filename = "test/file.txt";
+$Mime->addAttachment('testfile', "text/plain", $filename, FALSE,
+    'base64', 'attachment', 'ISO-8859-1', '', '', 'quoted-printable', 'base64');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match_all('/(name|filename)=([^\s]+)/i', $content, $matches)) {
+    echo implode("\n", $matches[2]);
+}
+?>
+--EXPECT--
+"test/file.txt"
+"test/file.txt";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_20226.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Bug #20226  Mail_mimePart::encodeHeader() and ISO-2022-JP encoding
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mimePart.php");
+
+$subject = base64_decode("GyRCJT8lJCVIJWsbKEI=");
+$mime    = new Mail_mimePart();
+
+echo $mime->encodeHeader('subject', $subject, 'ISO-2022-JP', 'base64');
+?>
+--EXPECT--
+=?ISO-2022-JP?B?GyRCJT8lJCVIJWsbKEI=?=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_20273.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,13 @@
+--TEST--
+Bug #20273  Mail_mimePart::encodeHeader() and TAB character
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mimePart.php");
+
+$refs = "<test@domain.tld>\t<test2@domain.tld>";
+$mime = new Mail_mimePart();
+echo $mime->encodeHeader('References', $refs);
+?>
+--EXPECT--
+<test@domain.tld> <test2@domain.tld>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_20563.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Bug #20563  isMultipart() method tests
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$mime = new Mail_mime;
+
+echo ($mime->isMultipart() ? 'TRUE' : 'FALSE') . "\n";
+
+$mime->setTXTBody('test');
+
+echo ($mime->isMultipart() ? 'TRUE' : 'FALSE') . "\n";
+
+$mime->setHTMLBody('test');
+
+echo ($mime->isMultipart() ? 'TRUE' : 'FALSE') . "\n";
+
+--EXPECT--
+FALSE
+FALSE
+TRUE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_20564.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+--TEST--
+Bug #20564  Unsetting headers
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mime.php");
+
+$mime = new Mail_mime;
+$mime->setSubject('test');
+
+$headers = $mime->headers(array('Subject' => null), true);
+echo array_key_exists('Subject', $headers) ? '1' : '0';
+--EXPECT--
+0
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_21098.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+--TEST--
+Bug #21098  Handling of empty plain text parts
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$mime = new Mail_mime();
+$mime->setTxtBody('');
+$mime->setHTMLBody('<html></html>');
+
+$headers1 = $mime->txtHeaders();
+$body     = $mime->get();
+$headers2 = $mime->txtHeaders();
+print strpos($headers1, 'text/html') && strpos($headers2, 'text/html') ? 'OK' : 'NOT OK';
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_21205.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,38 @@
+--TEST--
+Bug #21205  Handling ISO-2022-JP headers
+--SKIPIF--
+<?php
+include "PEAR.php";
+if (!extension_loaded('mbstring')){
+    if (!PEAR::loadExtension('mbstring')){
+        print('SKIP could not load mbstring module');
+    }
+}
+--FILE--
+<?php
+require_once('Mail/mimePart.php');
+$tests = [
+    '□京都府□',
+    '∠∠∠∠',
+];
+$addr = ' <aaa@bbb.ccc>';
+$charset = 'ISO-2022-JP';
+$encoding = 'base64';
+foreach ($tests as $test) {
+    $test = mb_convert_encoding($test, $charset);
+    print Mail_mimePart::encodeHeader("subject", $test,       $charset, $encoding) . PHP_EOL;
+    print Mail_mimePart::encodeHeader("to",      $test.$addr, $charset, $encoding) . PHP_EOL;
+    $test = '"' . $test . '"';
+    print Mail_mimePart::encodeHeader("subject", $test,       $charset, $encoding) . PHP_EOL;
+    print Mail_mimePart::encodeHeader("to",      $test.$addr, $charset, $encoding) . PHP_EOL;
+}
+?>
+--EXPECT--
+=?ISO-2022-JP?B?GyRCIiI1fkVUSVwiIhsoQg==?=
+=?ISO-2022-JP?B?GyRCIiI1fkVUSVwiIhsoQg==?= <aaa@bbb.ccc>
+=?ISO-2022-JP?B?GyRCIiI1fkVUSVwiIhsoQg==?=
+=?ISO-2022-JP?B?GyRCIiI1fkVUSVwiIhsoQg==?= <aaa@bbb.ccc>
+=?ISO-2022-JP?B?GyRCIlwiXCJcIlwbKEI=?=
+=?ISO-2022-JP?B?GyRCIlwiXCJcIlwbKEI=?= <aaa@bbb.ccc>
+=?ISO-2022-JP?B?GyRCIlwiXCJcIlwbKEI=?=
+=?ISO-2022-JP?B?GyRCIlwiXCJcIlwbKEI=?= <aaa@bbb.ccc>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_21206.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+--TEST--
+Bug #21206  Handling quoted strings
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mimePart.php');
+class X extends Mail_mimePart {
+    public static function explodeQuotedString($delimiter, $string){
+        return Mail_mimePart::explodeQuotedString($delimiter, $string);
+    }
+}
+
+$tests = [
+    '"a" <a@a.a>, b <b@b.b>',
+    '"c\\\\" <c@c.c>, d <d@d.d>',
+];
+foreach ($tests as $test) {
+    $addrs = X::explodeQuotedString('[\t,]', $test);
+    foreach ($addrs as $addr) {
+        print trim($addr) . PHP_EOL;
+    }
+}
+?>
+--EXPECT--
+"a" <a@a.a>
+b <b@b.b>
+"c\\" <c@c.c>
+d <d@d.d>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_21255.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+--TEST--
+Bug #21255  Boundary gets added twice
+--SKIPIF--
+--FILE--
+<?php
+include "Mail/mime.php";
+
+$mime = new Mail_mime("\r\n");
+$mime->setHTMLBody('html');
+$mime->setTXTBody('text');
+$mime->setContentType('multipart/alternative', array('boundary' => 'something'));
+
+$msg = $mime->getMessage();
+
+echo substr_count($msg, 'boundary=');
+
+?>
+--EXPECT--
+1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_3513_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,20 @@
+--TEST--
+Bug #3513   Support of RFC2231 in header fields. (ISO-8859-1)
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mime.php');
+
+$test = "Fóóbær.txt";
+$Mime = new Mail_Mime();
+$Mime->addAttachment('testfile',"text/plain", $test, FALSE, 'base64', 'attachment', 'ISO-8859-1');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match('/filename([^\s]+)/i', $content, $matches)) {
+    echo $matches[1];
+}
+
+--EXPECT--
+*=ISO-8859-1''F%F3%F3b%E6r.txt;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_3513_2.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+--TEST--
+Bug #3513   Support of RFC2231 in header fields. (UTF-8)
+--SKIPIF--
+--FILE--
+<?php
+require_once('Mail/mime.php');
+
+$test = "Süper gröse tolle tolle grüße.txt";
+$Mime = new Mail_Mime();
+$Mime->addAttachment('testfile',"text/plain", $test, FALSE, 'base64', 'attachment', 'UTF-8', 'de');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match_all('/filename([^\s]+)/i', $content, $matches)) {
+    echo implode("\n", $matches[1]);
+}
+
+--EXPECT--
+*0*=UTF-8'de'S%C3%BCper%20gr%C3%B6se%20tolle%20tolle%20gr%C3%BC;
+*1*=%C3%9Fe.txt;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_3513_3.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,23 @@
+--TEST--
+Bug #3513   Support of RFC2231 in header fields. (ISO-2022-JP)
+--SKIPIF--
+--FILE--
+<?php
+mb_internal_encoding('ISO-2022-JP');
+$testEncoded="GyRCRnxLXDhsGyhCLnR4dA==";
+$test = base64_decode($testEncoded); // Japanese filename in ISO-2022-JP charset.
+require_once('Mail/mime.php');
+
+$Mime = new Mail_Mime();
+$Mime->addAttachment('testfile',"text/plain", $test, FALSE, 'base64', 'attachment', 'iso-2022-jp', '');
+
+$content = $Mime->get();
+$content = str_replace("\n", '', $content);
+
+if (preg_match('/filename([^\s]+)/i', $content, $matches)) {
+    echo $matches[1];
+}
+?>
+--EXPECT--
+*=iso-2022-jp''%1B$BF|K%5C8l%1B%28B.txt;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_7561_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+--TEST--
+Bug #7561   Mail_mimePart::quotedPrintableEncode() misbehavior with mbstring overload
+--INI--
+mbstring.language=Neutral
+mbstring.func_overload=6
+mbstring.internal_encoding=UTF-8
+mbstring.http_output=UTF-8
+--SKIPIF--
+<?php
+include "PEAR.php";
+if (!extension_loaded('mbstring')){
+    if (!PEAR::loadExtension('mbstring')){
+        print('SKIP could not load mbstring module');
+    }
+}
+--FILE--
+<?php
+include("Mail/mimePart.php");
+// string is UTF-8 encoded
+$input = "Micha\xC3\xABl \xC3\x89ric St\xC3\xA9phane";
+$rv = Mail_mimePart::quotedPrintableEncode($input, 76, "\n");
+echo $rv, "\n";
+--EXPECT--
+Micha=C3=ABl =C3=89ric St=C3=A9phane
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_8386_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,22 @@
+--TEST--
+Bug #8386   HTML body not correctly encoded if attachments present
+--SKIPIF--
+--FILE--
+<?php
+$eol = "\n#";
+include("Mail/mime.php");
+$encoder = new Mail_mime(array('eol'=>$eol));
+$encoder->setTXTBody('test');
+$encoder->setHTMLBody('<b>test</b>');
+$encoder->addAttachment('Just a test', 'application/octet-stream', 'test.txt', false);
+$body = $encoder->get();
+if (strpos($body, '--' . $eol . '--=')){
+    print("FAILED\n");
+    print("Single delimiter() between 2 parts found.\n");
+    print($body);
+}else{
+    print("OK");
+}
+?>
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_8541_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,19 @@
+--TEST--
+Bug #8541   mimePart.php line delimiter is \r
+--SKIPIF--
+--FILE--
+<?php
+$mime = file_get_contents('Mail/mime.php', 1);
+$mimePart = file_get_contents('Mail/mimePart.php', 1);
+if (strpos($mime, "\r")){
+    print("\\r found in mime.php\n");
+}elseif (strpos($mime, "\t")){
+    print("\\t found in mime.php\n");
+}elseif (strpos($mimePart, "\r")){
+    print("\\r found in mimePart.php\n");
+}elseif (strpos($mimePart, "\t")){
+    print("\\t found in mimePart.php\n");
+}
+print('OK');
+--EXPECT--
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/mail_mime/tests/test_Bug_9722_1.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,24 @@
+--TEST--
+Bug #9722   quotedPrintableEncode does not encode dot at start of line on Windows platform
+--SKIPIF--
+--FILE--
+<?php
+include("Mail/mimePart.php");
+$text = "This
+is a
+test
+...
+    It is 
+//really fun//
+to make :(";
+
+print_r(Mail_mimePart::quotedPrintableEncode($text, 76, "\n"));
+
+--EXPECT--
+This
+is a
+test
+=2E..
+    It is=20
+//really fun//
+to make :(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,17 @@
+# composer related
+composer.lock
+composer.phar
+vendor
+README.html
+dist/
+
+# Eclipse
+.buildpath
+.project
+.settings
+
+# tarballs
+*.tgz
+
+# buildtools
+build/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+language: php
+sudo: false
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - 7.1
+script:
+  - pear list
+  - pear channel-update pear.php.net
+  - pear upgrade --force pear/pear-1.10.1
+  - pear list
+  - pear install --force package.xml
+  - pear list
+  - pear package
+  - pear package-validate
+  - pear install --force *.tgz
+  - pear list
+  - composer install
+  - ./vendor/bin/phpunit -c phpunit.xml.dist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/Net/IDNA2.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3402 @@
+<?php
+
+// {{{ license
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+//
+// +----------------------------------------------------------------------+
+// | This library is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU Lesser General Public License as       |
+// | published by the Free Software Foundation; either version 2.1 of the |
+// | License, or (at your option) any later version.                      |
+// |                                                                      |
+// | This library is distributed in the hope that it will be useful, but  |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of           |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
+// | Lesser General Public License for more details.                      |
+// |                                                                      |
+// | You should have received a copy of the GNU Lesser General Public     |
+// | License along with this library; if not, write to the Free Software  |
+// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
+// | USA.                                                                 |
+// +----------------------------------------------------------------------+
+//
+
+// }}}
+require_once 'Net/IDNA2/Exception.php';
+require_once 'Net/IDNA2/Exception/Nameprep.php';
+
+/**
+ * Encode/decode Internationalized Domain Names.
+ *
+ * The class allows one to convert internationalized domain names
+ * (see RFC 3490 for details) as they can be used with various registries worldwide
+ * to be translated between their original (localized) form and their encoded form
+ * as it will be used in the DNS (Domain Name System).
+ *
+ * The class provides two public methods, encode() and decode(), which do exactly
+ * what you would expect them to do. You are allowed to use complete domain names,
+ * simple strings and complete email addresses as well. That means, that you might
+ * use any of the following notations:
+ *
+ * - www.n�rgler.com
+ * - xn--nrgler-wxa
+ * - xn--brse-5qa.xn--knrz-1ra.info
+ *
+ * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
+ * array. Unicode output is available in the same formats.
+ * You can select your preferred format via {@link set_paramter()}.
+ *
+ * ACE input and output is always expected to be ASCII.
+ *
+ * @package Net
+ * @author  Markus Nix <mnix@docuverse.de>
+ * @author  Matthias Sommerfeld <mso@phlylabs.de>
+ * @author  Stefan Neufeind <pear.neufeind@speedpartner.de>
+ * @version $Id$
+ */
+class Net_IDNA2
+{
+    // {{{ npdata
+    /**
+     * These Unicode codepoints are
+     * mapped to nothing, See RFC3454 for details
+     *
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_np_map_nothing = array(
+        0xAD,
+        0x34F,
+        0x1806,
+        0x180B,
+        0x180C,
+        0x180D,
+        0x200B,
+        0x200C,
+        0x200D,
+        0x2060,
+        0xFE00,
+        0xFE01,
+        0xFE02,
+        0xFE03,
+        0xFE04,
+        0xFE05,
+        0xFE06,
+        0xFE07,
+        0xFE08,
+        0xFE09,
+        0xFE0A,
+        0xFE0B,
+        0xFE0C,
+        0xFE0D,
+        0xFE0E,
+        0xFE0F,
+        0xFEFF
+    );
+
+    /**
+     * Prohibited codepints
+     *
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_general_prohibited = array(
+        0,
+        1,
+        2,
+        3,
+        4,
+        5,
+        6,
+        7,
+        8,
+        9,
+        0xA,
+        0xB,
+        0xC,
+        0xD,
+        0xE,
+        0xF,
+        0x10,
+        0x11,
+        0x12,
+        0x13,
+        0x14,
+        0x15,
+        0x16,
+        0x17,
+        0x18,
+        0x19,
+        0x1A,
+        0x1B,
+        0x1C,
+        0x1D,
+        0x1E,
+        0x1F,
+        0x20,
+        0x21,
+        0x22,
+        0x23,
+        0x24,
+        0x25,
+        0x26,
+        0x27,
+        0x28,
+        0x29,
+        0x2A,
+        0x2B,
+        0x2C,
+        0x2F,
+        0x3B,
+        0x3C,
+        0x3D,
+        0x3E,
+        0x3F,
+        0x40,
+        0x5B,
+        0x5C,
+        0x5D,
+        0x5E,
+        0x5F,
+        0x60,
+        0x7B,
+        0x7C,
+        0x7D,
+        0x7E,
+        0x7F,
+        0x3002
+    );
+
+    /**
+     * Codepints prohibited by Nameprep
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_np_prohibit = array(
+        0xA0,
+        0x1680,
+        0x2000,
+        0x2001,
+        0x2002,
+        0x2003,
+        0x2004,
+        0x2005,
+        0x2006,
+        0x2007,
+        0x2008,
+        0x2009,
+        0x200A,
+        0x200B,
+        0x202F,
+        0x205F,
+        0x3000,
+        0x6DD,
+        0x70F,
+        0x180E,
+        0x200C,
+        0x200D,
+        0x2028,
+        0x2029,
+        0xFEFF,
+        0xFFF9,
+        0xFFFA,
+        0xFFFB,
+        0xFFFC,
+        0xFFFE,
+        0xFFFF,
+        0x1FFFE,
+        0x1FFFF,
+        0x2FFFE,
+        0x2FFFF,
+        0x3FFFE,
+        0x3FFFF,
+        0x4FFFE,
+        0x4FFFF,
+        0x5FFFE,
+        0x5FFFF,
+        0x6FFFE,
+        0x6FFFF,
+        0x7FFFE,
+        0x7FFFF,
+        0x8FFFE,
+        0x8FFFF,
+        0x9FFFE,
+        0x9FFFF,
+        0xAFFFE,
+        0xAFFFF,
+        0xBFFFE,
+        0xBFFFF,
+        0xCFFFE,
+        0xCFFFF,
+        0xDFFFE,
+        0xDFFFF,
+        0xEFFFE,
+        0xEFFFF,
+        0xFFFFE,
+        0xFFFFF,
+        0x10FFFE,
+        0x10FFFF,
+        0xFFF9,
+        0xFFFA,
+        0xFFFB,
+        0xFFFC,
+        0xFFFD,
+        0x340,
+        0x341,
+        0x200E,
+        0x200F,
+        0x202A,
+        0x202B,
+        0x202C,
+        0x202D,
+        0x202E,
+        0x206A,
+        0x206B,
+        0x206C,
+        0x206D,
+        0x206E,
+        0x206F,
+        0xE0001
+    );
+
+    /**
+     * Codepoint ranges prohibited by nameprep
+     *
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_np_prohibit_ranges = array(
+        array(0x80,     0x9F    ),
+        array(0x2060,   0x206F  ),
+        array(0x1D173,  0x1D17A ),
+        array(0xE000,   0xF8FF  ),
+        array(0xF0000,  0xFFFFD ),
+        array(0x100000, 0x10FFFD),
+        array(0xFDD0,   0xFDEF  ),
+        array(0xD800,   0xDFFF  ),
+        array(0x2FF0,   0x2FFB  ),
+        array(0xE0020,  0xE007F )
+    );
+
+    /**
+     * Replacement mappings (casemapping, replacement sequences, ...)
+     *
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_np_replacemaps = array(
+        0x41    => array(0x61),
+        0x42    => array(0x62),
+        0x43    => array(0x63),
+        0x44    => array(0x64),
+        0x45    => array(0x65),
+        0x46    => array(0x66),
+        0x47    => array(0x67),
+        0x48    => array(0x68),
+        0x49    => array(0x69),
+        0x4A    => array(0x6A),
+        0x4B    => array(0x6B),
+        0x4C    => array(0x6C),
+        0x4D    => array(0x6D),
+        0x4E    => array(0x6E),
+        0x4F    => array(0x6F),
+        0x50    => array(0x70),
+        0x51    => array(0x71),
+        0x52    => array(0x72),
+        0x53    => array(0x73),
+        0x54    => array(0x74),
+        0x55    => array(0x75),
+        0x56    => array(0x76),
+        0x57    => array(0x77),
+        0x58    => array(0x78),
+        0x59    => array(0x79),
+        0x5A    => array(0x7A),
+        0xB5    => array(0x3BC),
+        0xC0    => array(0xE0),
+        0xC1    => array(0xE1),
+        0xC2    => array(0xE2),
+        0xC3    => array(0xE3),
+        0xC4    => array(0xE4),
+        0xC5    => array(0xE5),
+        0xC6    => array(0xE6),
+        0xC7    => array(0xE7),
+        0xC8    => array(0xE8),
+        0xC9    => array(0xE9),
+        0xCA    => array(0xEA),
+        0xCB    => array(0xEB),
+        0xCC    => array(0xEC),
+        0xCD    => array(0xED),
+        0xCE    => array(0xEE),
+        0xCF    => array(0xEF),
+        0xD0    => array(0xF0),
+        0xD1    => array(0xF1),
+        0xD2    => array(0xF2),
+        0xD3    => array(0xF3),
+        0xD4    => array(0xF4),
+        0xD5    => array(0xF5),
+        0xD6    => array(0xF6),
+        0xD8    => array(0xF8),
+        0xD9    => array(0xF9),
+        0xDA    => array(0xFA),
+        0xDB    => array(0xFB),
+        0xDC    => array(0xFC),
+        0xDD    => array(0xFD),
+        0xDE    => array(0xFE),
+        0xDF    => array(0x73, 0x73),
+        0x100   => array(0x101),
+        0x102   => array(0x103),
+        0x104   => array(0x105),
+        0x106   => array(0x107),
+        0x108   => array(0x109),
+        0x10A   => array(0x10B),
+        0x10C   => array(0x10D),
+        0x10E   => array(0x10F),
+        0x110   => array(0x111),
+        0x112   => array(0x113),
+        0x114   => array(0x115),
+        0x116   => array(0x117),
+        0x118   => array(0x119),
+        0x11A   => array(0x11B),
+        0x11C   => array(0x11D),
+        0x11E   => array(0x11F),
+        0x120   => array(0x121),
+        0x122   => array(0x123),
+        0x124   => array(0x125),
+        0x126   => array(0x127),
+        0x128   => array(0x129),
+        0x12A   => array(0x12B),
+        0x12C   => array(0x12D),
+        0x12E   => array(0x12F),
+        0x130   => array(0x69, 0x307),
+        0x132   => array(0x133),
+        0x134   => array(0x135),
+        0x136   => array(0x137),
+        0x139   => array(0x13A),
+        0x13B   => array(0x13C),
+        0x13D   => array(0x13E),
+        0x13F   => array(0x140),
+        0x141   => array(0x142),
+        0x143   => array(0x144),
+        0x145   => array(0x146),
+        0x147   => array(0x148),
+        0x149   => array(0x2BC, 0x6E),
+        0x14A   => array(0x14B),
+        0x14C   => array(0x14D),
+        0x14E   => array(0x14F),
+        0x150   => array(0x151),
+        0x152   => array(0x153),
+        0x154   => array(0x155),
+        0x156   => array(0x157),
+        0x158   => array(0x159),
+        0x15A   => array(0x15B),
+        0x15C   => array(0x15D),
+        0x15E   => array(0x15F),
+        0x160   => array(0x161),
+        0x162   => array(0x163),
+        0x164   => array(0x165),
+        0x166   => array(0x167),
+        0x168   => array(0x169),
+        0x16A   => array(0x16B),
+        0x16C   => array(0x16D),
+        0x16E   => array(0x16F),
+        0x170   => array(0x171),
+        0x172   => array(0x173),
+        0x174   => array(0x175),
+        0x176   => array(0x177),
+        0x178   => array(0xFF),
+        0x179   => array(0x17A),
+        0x17B   => array(0x17C),
+        0x17D   => array(0x17E),
+        0x17F   => array(0x73),
+        0x181   => array(0x253),
+        0x182   => array(0x183),
+        0x184   => array(0x185),
+        0x186   => array(0x254),
+        0x187   => array(0x188),
+        0x189   => array(0x256),
+        0x18A   => array(0x257),
+        0x18B   => array(0x18C),
+        0x18E   => array(0x1DD),
+        0x18F   => array(0x259),
+        0x190   => array(0x25B),
+        0x191   => array(0x192),
+        0x193   => array(0x260),
+        0x194   => array(0x263),
+        0x196   => array(0x269),
+        0x197   => array(0x268),
+        0x198   => array(0x199),
+        0x19C   => array(0x26F),
+        0x19D   => array(0x272),
+        0x19F   => array(0x275),
+        0x1A0   => array(0x1A1),
+        0x1A2   => array(0x1A3),
+        0x1A4   => array(0x1A5),
+        0x1A6   => array(0x280),
+        0x1A7   => array(0x1A8),
+        0x1A9   => array(0x283),
+        0x1AC   => array(0x1AD),
+        0x1AE   => array(0x288),
+        0x1AF   => array(0x1B0),
+        0x1B1   => array(0x28A),
+        0x1B2   => array(0x28B),
+        0x1B3   => array(0x1B4),
+        0x1B5   => array(0x1B6),
+        0x1B7   => array(0x292),
+        0x1B8   => array(0x1B9),
+        0x1BC   => array(0x1BD),
+        0x1C4   => array(0x1C6),
+        0x1C5   => array(0x1C6),
+        0x1C7   => array(0x1C9),
+        0x1C8   => array(0x1C9),
+        0x1CA   => array(0x1CC),
+        0x1CB   => array(0x1CC),
+        0x1CD   => array(0x1CE),
+        0x1CF   => array(0x1D0),
+        0x1D1   => array(0x1D2),
+        0x1D3   => array(0x1D4),
+        0x1D5   => array(0x1D6),
+        0x1D7   => array(0x1D8),
+        0x1D9   => array(0x1DA),
+        0x1DB   => array(0x1DC),
+        0x1DE   => array(0x1DF),
+        0x1E0   => array(0x1E1),
+        0x1E2   => array(0x1E3),
+        0x1E4   => array(0x1E5),
+        0x1E6   => array(0x1E7),
+        0x1E8   => array(0x1E9),
+        0x1EA   => array(0x1EB),
+        0x1EC   => array(0x1ED),
+        0x1EE   => array(0x1EF),
+        0x1F0   => array(0x6A, 0x30C),
+        0x1F1   => array(0x1F3),
+        0x1F2   => array(0x1F3),
+        0x1F4   => array(0x1F5),
+        0x1F6   => array(0x195),
+        0x1F7   => array(0x1BF),
+        0x1F8   => array(0x1F9),
+        0x1FA   => array(0x1FB),
+        0x1FC   => array(0x1FD),
+        0x1FE   => array(0x1FF),
+        0x200   => array(0x201),
+        0x202   => array(0x203),
+        0x204   => array(0x205),
+        0x206   => array(0x207),
+        0x208   => array(0x209),
+        0x20A   => array(0x20B),
+        0x20C   => array(0x20D),
+        0x20E   => array(0x20F),
+        0x210   => array(0x211),
+        0x212   => array(0x213),
+        0x214   => array(0x215),
+        0x216   => array(0x217),
+        0x218   => array(0x219),
+        0x21A   => array(0x21B),
+        0x21C   => array(0x21D),
+        0x21E   => array(0x21F),
+        0x220   => array(0x19E),
+        0x222   => array(0x223),
+        0x224   => array(0x225),
+        0x226   => array(0x227),
+        0x228   => array(0x229),
+        0x22A   => array(0x22B),
+        0x22C   => array(0x22D),
+        0x22E   => array(0x22F),
+        0x230   => array(0x231),
+        0x232   => array(0x233),
+        0x345   => array(0x3B9),
+        0x37A   => array(0x20, 0x3B9),
+        0x386   => array(0x3AC),
+        0x388   => array(0x3AD),
+        0x389   => array(0x3AE),
+        0x38A   => array(0x3AF),
+        0x38C   => array(0x3CC),
+        0x38E   => array(0x3CD),
+        0x38F   => array(0x3CE),
+        0x390   => array(0x3B9, 0x308, 0x301),
+        0x391   => array(0x3B1),
+        0x392   => array(0x3B2),
+        0x393   => array(0x3B3),
+        0x394   => array(0x3B4),
+        0x395   => array(0x3B5),
+        0x396   => array(0x3B6),
+        0x397   => array(0x3B7),
+        0x398   => array(0x3B8),
+        0x399   => array(0x3B9),
+        0x39A   => array(0x3BA),
+        0x39B   => array(0x3BB),
+        0x39C   => array(0x3BC),
+        0x39D   => array(0x3BD),
+        0x39E   => array(0x3BE),
+        0x39F   => array(0x3BF),
+        0x3A0   => array(0x3C0),
+        0x3A1   => array(0x3C1),
+        0x3A3   => array(0x3C3),
+        0x3A4   => array(0x3C4),
+        0x3A5   => array(0x3C5),
+        0x3A6   => array(0x3C6),
+        0x3A7   => array(0x3C7),
+        0x3A8   => array(0x3C8),
+        0x3A9   => array(0x3C9),
+        0x3AA   => array(0x3CA),
+        0x3AB   => array(0x3CB),
+        0x3B0   => array(0x3C5, 0x308, 0x301),
+        0x3C2   => array(0x3C3),
+        0x3D0   => array(0x3B2),
+        0x3D1   => array(0x3B8),
+        0x3D2   => array(0x3C5),
+        0x3D3   => array(0x3CD),
+        0x3D4   => array(0x3CB),
+        0x3D5   => array(0x3C6),
+        0x3D6   => array(0x3C0),
+        0x3D8   => array(0x3D9),
+        0x3DA   => array(0x3DB),
+        0x3DC   => array(0x3DD),
+        0x3DE   => array(0x3DF),
+        0x3E0   => array(0x3E1),
+        0x3E2   => array(0x3E3),
+        0x3E4   => array(0x3E5),
+        0x3E6   => array(0x3E7),
+        0x3E8   => array(0x3E9),
+        0x3EA   => array(0x3EB),
+        0x3EC   => array(0x3ED),
+        0x3EE   => array(0x3EF),
+        0x3F0   => array(0x3BA),
+        0x3F1   => array(0x3C1),
+        0x3F2   => array(0x3C3),
+        0x3F4   => array(0x3B8),
+        0x3F5   => array(0x3B5),
+        0x400   => array(0x450),
+        0x401   => array(0x451),
+        0x402   => array(0x452),
+        0x403   => array(0x453),
+        0x404   => array(0x454),
+        0x405   => array(0x455),
+        0x406   => array(0x456),
+        0x407   => array(0x457),
+        0x408   => array(0x458),
+        0x409   => array(0x459),
+        0x40A   => array(0x45A),
+        0x40B   => array(0x45B),
+        0x40C   => array(0x45C),
+        0x40D   => array(0x45D),
+        0x40E   => array(0x45E),
+        0x40F   => array(0x45F),
+        0x410   => array(0x430),
+        0x411   => array(0x431),
+        0x412   => array(0x432),
+        0x413   => array(0x433),
+        0x414   => array(0x434),
+        0x415   => array(0x435),
+        0x416   => array(0x436),
+        0x417   => array(0x437),
+        0x418   => array(0x438),
+        0x419   => array(0x439),
+        0x41A   => array(0x43A),
+        0x41B   => array(0x43B),
+        0x41C   => array(0x43C),
+        0x41D   => array(0x43D),
+        0x41E   => array(0x43E),
+        0x41F   => array(0x43F),
+        0x420   => array(0x440),
+        0x421   => array(0x441),
+        0x422   => array(0x442),
+        0x423   => array(0x443),
+        0x424   => array(0x444),
+        0x425   => array(0x445),
+        0x426   => array(0x446),
+        0x427   => array(0x447),
+        0x428   => array(0x448),
+        0x429   => array(0x449),
+        0x42A   => array(0x44A),
+        0x42B   => array(0x44B),
+        0x42C   => array(0x44C),
+        0x42D   => array(0x44D),
+        0x42E   => array(0x44E),
+        0x42F   => array(0x44F),
+        0x460   => array(0x461),
+        0x462   => array(0x463),
+        0x464   => array(0x465),
+        0x466   => array(0x467),
+        0x468   => array(0x469),
+        0x46A   => array(0x46B),
+        0x46C   => array(0x46D),
+        0x46E   => array(0x46F),
+        0x470   => array(0x471),
+        0x472   => array(0x473),
+        0x474   => array(0x475),
+        0x476   => array(0x477),
+        0x478   => array(0x479),
+        0x47A   => array(0x47B),
+        0x47C   => array(0x47D),
+        0x47E   => array(0x47F),
+        0x480   => array(0x481),
+        0x48A   => array(0x48B),
+        0x48C   => array(0x48D),
+        0x48E   => array(0x48F),
+        0x490   => array(0x491),
+        0x492   => array(0x493),
+        0x494   => array(0x495),
+        0x496   => array(0x497),
+        0x498   => array(0x499),
+        0x49A   => array(0x49B),
+        0x49C   => array(0x49D),
+        0x49E   => array(0x49F),
+        0x4A0   => array(0x4A1),
+        0x4A2   => array(0x4A3),
+        0x4A4   => array(0x4A5),
+        0x4A6   => array(0x4A7),
+        0x4A8   => array(0x4A9),
+        0x4AA   => array(0x4AB),
+        0x4AC   => array(0x4AD),
+        0x4AE   => array(0x4AF),
+        0x4B0   => array(0x4B1),
+        0x4B2   => array(0x4B3),
+        0x4B4   => array(0x4B5),
+        0x4B6   => array(0x4B7),
+        0x4B8   => array(0x4B9),
+        0x4BA   => array(0x4BB),
+        0x4BC   => array(0x4BD),
+        0x4BE   => array(0x4BF),
+        0x4C1   => array(0x4C2),
+        0x4C3   => array(0x4C4),
+        0x4C5   => array(0x4C6),
+        0x4C7   => array(0x4C8),
+        0x4C9   => array(0x4CA),
+        0x4CB   => array(0x4CC),
+        0x4CD   => array(0x4CE),
+        0x4D0   => array(0x4D1),
+        0x4D2   => array(0x4D3),
+        0x4D4   => array(0x4D5),
+        0x4D6   => array(0x4D7),
+        0x4D8   => array(0x4D9),
+        0x4DA   => array(0x4DB),
+        0x4DC   => array(0x4DD),
+        0x4DE   => array(0x4DF),
+        0x4E0   => array(0x4E1),
+        0x4E2   => array(0x4E3),
+        0x4E4   => array(0x4E5),
+        0x4E6   => array(0x4E7),
+        0x4E8   => array(0x4E9),
+        0x4EA   => array(0x4EB),
+        0x4EC   => array(0x4ED),
+        0x4EE   => array(0x4EF),
+        0x4F0   => array(0x4F1),
+        0x4F2   => array(0x4F3),
+        0x4F4   => array(0x4F5),
+        0x4F8   => array(0x4F9),
+        0x500   => array(0x501),
+        0x502   => array(0x503),
+        0x504   => array(0x505),
+        0x506   => array(0x507),
+        0x508   => array(0x509),
+        0x50A   => array(0x50B),
+        0x50C   => array(0x50D),
+        0x50E   => array(0x50F),
+        0x531   => array(0x561),
+        0x532   => array(0x562),
+        0x533   => array(0x563),
+        0x534   => array(0x564),
+        0x535   => array(0x565),
+        0x536   => array(0x566),
+        0x537   => array(0x567),
+        0x538   => array(0x568),
+        0x539   => array(0x569),
+        0x53A   => array(0x56A),
+        0x53B   => array(0x56B),
+        0x53C   => array(0x56C),
+        0x53D   => array(0x56D),
+        0x53E   => array(0x56E),
+        0x53F   => array(0x56F),
+        0x540   => array(0x570),
+        0x541   => array(0x571),
+        0x542   => array(0x572),
+        0x543   => array(0x573),
+        0x544   => array(0x574),
+        0x545   => array(0x575),
+        0x546   => array(0x576),
+        0x547   => array(0x577),
+        0x548   => array(0x578),
+        0x549   => array(0x579),
+        0x54A   => array(0x57A),
+        0x54B   => array(0x57B),
+        0x54C   => array(0x57C),
+        0x54D   => array(0x57D),
+        0x54E   => array(0x57E),
+        0x54F   => array(0x57F),
+        0x550   => array(0x580),
+        0x551   => array(0x581),
+        0x552   => array(0x582),
+        0x553   => array(0x583),
+        0x554   => array(0x584),
+        0x555   => array(0x585),
+        0x556   => array(0x586),
+        0x587   => array(0x565, 0x582),
+        0x1E00  => array(0x1E01),
+        0x1E02  => array(0x1E03),
+        0x1E04  => array(0x1E05),
+        0x1E06  => array(0x1E07),
+        0x1E08  => array(0x1E09),
+        0x1E0A  => array(0x1E0B),
+        0x1E0C  => array(0x1E0D),
+        0x1E0E  => array(0x1E0F),
+        0x1E10  => array(0x1E11),
+        0x1E12  => array(0x1E13),
+        0x1E14  => array(0x1E15),
+        0x1E16  => array(0x1E17),
+        0x1E18  => array(0x1E19),
+        0x1E1A  => array(0x1E1B),
+        0x1E1C  => array(0x1E1D),
+        0x1E1E  => array(0x1E1F),
+        0x1E20  => array(0x1E21),
+        0x1E22  => array(0x1E23),
+        0x1E24  => array(0x1E25),
+        0x1E26  => array(0x1E27),
+        0x1E28  => array(0x1E29),
+        0x1E2A  => array(0x1E2B),
+        0x1E2C  => array(0x1E2D),
+        0x1E2E  => array(0x1E2F),
+        0x1E30  => array(0x1E31),
+        0x1E32  => array(0x1E33),
+        0x1E34  => array(0x1E35),
+        0x1E36  => array(0x1E37),
+        0x1E38  => array(0x1E39),
+        0x1E3A  => array(0x1E3B),
+        0x1E3C  => array(0x1E3D),
+        0x1E3E  => array(0x1E3F),
+        0x1E40  => array(0x1E41),
+        0x1E42  => array(0x1E43),
+        0x1E44  => array(0x1E45),
+        0x1E46  => array(0x1E47),
+        0x1E48  => array(0x1E49),
+        0x1E4A  => array(0x1E4B),
+        0x1E4C  => array(0x1E4D),
+        0x1E4E  => array(0x1E4F),
+        0x1E50  => array(0x1E51),
+        0x1E52  => array(0x1E53),
+        0x1E54  => array(0x1E55),
+        0x1E56  => array(0x1E57),
+        0x1E58  => array(0x1E59),
+        0x1E5A  => array(0x1E5B),
+        0x1E5C  => array(0x1E5D),
+        0x1E5E  => array(0x1E5F),
+        0x1E60  => array(0x1E61),
+        0x1E62  => array(0x1E63),
+        0x1E64  => array(0x1E65),
+        0x1E66  => array(0x1E67),
+        0x1E68  => array(0x1E69),
+        0x1E6A  => array(0x1E6B),
+        0x1E6C  => array(0x1E6D),
+        0x1E6E  => array(0x1E6F),
+        0x1E70  => array(0x1E71),
+        0x1E72  => array(0x1E73),
+        0x1E74  => array(0x1E75),
+        0x1E76  => array(0x1E77),
+        0x1E78  => array(0x1E79),
+        0x1E7A  => array(0x1E7B),
+        0x1E7C  => array(0x1E7D),
+        0x1E7E  => array(0x1E7F),
+        0x1E80  => array(0x1E81),
+        0x1E82  => array(0x1E83),
+        0x1E84  => array(0x1E85),
+        0x1E86  => array(0x1E87),
+        0x1E88  => array(0x1E89),
+        0x1E8A  => array(0x1E8B),
+        0x1E8C  => array(0x1E8D),
+        0x1E8E  => array(0x1E8F),
+        0x1E90  => array(0x1E91),
+        0x1E92  => array(0x1E93),
+        0x1E94  => array(0x1E95),
+        0x1E96  => array(0x68, 0x331),
+        0x1E97  => array(0x74, 0x308),
+        0x1E98  => array(0x77, 0x30A),
+        0x1E99  => array(0x79, 0x30A),
+        0x1E9A  => array(0x61, 0x2BE),
+        0x1E9B  => array(0x1E61),
+        0x1EA0  => array(0x1EA1),
+        0x1EA2  => array(0x1EA3),
+        0x1EA4  => array(0x1EA5),
+        0x1EA6  => array(0x1EA7),
+        0x1EA8  => array(0x1EA9),
+        0x1EAA  => array(0x1EAB),
+        0x1EAC  => array(0x1EAD),
+        0x1EAE  => array(0x1EAF),
+        0x1EB0  => array(0x1EB1),
+        0x1EB2  => array(0x1EB3),
+        0x1EB4  => array(0x1EB5),
+        0x1EB6  => array(0x1EB7),
+        0x1EB8  => array(0x1EB9),
+        0x1EBA  => array(0x1EBB),
+        0x1EBC  => array(0x1EBD),
+        0x1EBE  => array(0x1EBF),
+        0x1EC0  => array(0x1EC1),
+        0x1EC2  => array(0x1EC3),
+        0x1EC4  => array(0x1EC5),
+        0x1EC6  => array(0x1EC7),
+        0x1EC8  => array(0x1EC9),
+        0x1ECA  => array(0x1ECB),
+        0x1ECC  => array(0x1ECD),
+        0x1ECE  => array(0x1ECF),
+        0x1ED0  => array(0x1ED1),
+        0x1ED2  => array(0x1ED3),
+        0x1ED4  => array(0x1ED5),
+        0x1ED6  => array(0x1ED7),
+        0x1ED8  => array(0x1ED9),
+        0x1EDA  => array(0x1EDB),
+        0x1EDC  => array(0x1EDD),
+        0x1EDE  => array(0x1EDF),
+        0x1EE0  => array(0x1EE1),
+        0x1EE2  => array(0x1EE3),
+        0x1EE4  => array(0x1EE5),
+        0x1EE6  => array(0x1EE7),
+        0x1EE8  => array(0x1EE9),
+        0x1EEA  => array(0x1EEB),
+        0x1EEC  => array(0x1EED),
+        0x1EEE  => array(0x1EEF),
+        0x1EF0  => array(0x1EF1),
+        0x1EF2  => array(0x1EF3),
+        0x1EF4  => array(0x1EF5),
+        0x1EF6  => array(0x1EF7),
+        0x1EF8  => array(0x1EF9),
+        0x1F08  => array(0x1F00),
+        0x1F09  => array(0x1F01),
+        0x1F0A  => array(0x1F02),
+        0x1F0B  => array(0x1F03),
+        0x1F0C  => array(0x1F04),
+        0x1F0D  => array(0x1F05),
+        0x1F0E  => array(0x1F06),
+        0x1F0F  => array(0x1F07),
+        0x1F18  => array(0x1F10),
+        0x1F19  => array(0x1F11),
+        0x1F1A  => array(0x1F12),
+        0x1F1B  => array(0x1F13),
+        0x1F1C  => array(0x1F14),
+        0x1F1D  => array(0x1F15),
+        0x1F28  => array(0x1F20),
+        0x1F29  => array(0x1F21),
+        0x1F2A  => array(0x1F22),
+        0x1F2B  => array(0x1F23),
+        0x1F2C  => array(0x1F24),
+        0x1F2D  => array(0x1F25),
+        0x1F2E  => array(0x1F26),
+        0x1F2F  => array(0x1F27),
+        0x1F38  => array(0x1F30),
+        0x1F39  => array(0x1F31),
+        0x1F3A  => array(0x1F32),
+        0x1F3B  => array(0x1F33),
+        0x1F3C  => array(0x1F34),
+        0x1F3D  => array(0x1F35),
+        0x1F3E  => array(0x1F36),
+        0x1F3F  => array(0x1F37),
+        0x1F48  => array(0x1F40),
+        0x1F49  => array(0x1F41),
+        0x1F4A  => array(0x1F42),
+        0x1F4B  => array(0x1F43),
+        0x1F4C  => array(0x1F44),
+        0x1F4D  => array(0x1F45),
+        0x1F50  => array(0x3C5, 0x313),
+        0x1F52  => array(0x3C5, 0x313, 0x300),
+        0x1F54  => array(0x3C5, 0x313, 0x301),
+        0x1F56  => array(0x3C5, 0x313, 0x342),
+        0x1F59  => array(0x1F51),
+        0x1F5B  => array(0x1F53),
+        0x1F5D  => array(0x1F55),
+        0x1F5F  => array(0x1F57),
+        0x1F68  => array(0x1F60),
+        0x1F69  => array(0x1F61),
+        0x1F6A  => array(0x1F62),
+        0x1F6B  => array(0x1F63),
+        0x1F6C  => array(0x1F64),
+        0x1F6D  => array(0x1F65),
+        0x1F6E  => array(0x1F66),
+        0x1F6F  => array(0x1F67),
+        0x1F80  => array(0x1F00, 0x3B9),
+        0x1F81  => array(0x1F01, 0x3B9),
+        0x1F82  => array(0x1F02, 0x3B9),
+        0x1F83  => array(0x1F03, 0x3B9),
+        0x1F84  => array(0x1F04, 0x3B9),
+        0x1F85  => array(0x1F05, 0x3B9),
+        0x1F86  => array(0x1F06, 0x3B9),
+        0x1F87  => array(0x1F07, 0x3B9),
+        0x1F88  => array(0x1F00, 0x3B9),
+        0x1F89  => array(0x1F01, 0x3B9),
+        0x1F8A  => array(0x1F02, 0x3B9),
+        0x1F8B  => array(0x1F03, 0x3B9),
+        0x1F8C  => array(0x1F04, 0x3B9),
+        0x1F8D  => array(0x1F05, 0x3B9),
+        0x1F8E  => array(0x1F06, 0x3B9),
+        0x1F8F  => array(0x1F07, 0x3B9),
+        0x1F90  => array(0x1F20, 0x3B9),
+        0x1F91  => array(0x1F21, 0x3B9),
+        0x1F92  => array(0x1F22, 0x3B9),
+        0x1F93  => array(0x1F23, 0x3B9),
+        0x1F94  => array(0x1F24, 0x3B9),
+        0x1F95  => array(0x1F25, 0x3B9),
+        0x1F96  => array(0x1F26, 0x3B9),
+        0x1F97  => array(0x1F27, 0x3B9),
+        0x1F98  => array(0x1F20, 0x3B9),
+        0x1F99  => array(0x1F21, 0x3B9),
+        0x1F9A  => array(0x1F22, 0x3B9),
+        0x1F9B  => array(0x1F23, 0x3B9),
+        0x1F9C  => array(0x1F24, 0x3B9),
+        0x1F9D  => array(0x1F25, 0x3B9),
+        0x1F9E  => array(0x1F26, 0x3B9),
+        0x1F9F  => array(0x1F27, 0x3B9),
+        0x1FA0  => array(0x1F60, 0x3B9),
+        0x1FA1  => array(0x1F61, 0x3B9),
+        0x1FA2  => array(0x1F62, 0x3B9),
+        0x1FA3  => array(0x1F63, 0x3B9),
+        0x1FA4  => array(0x1F64, 0x3B9),
+        0x1FA5  => array(0x1F65, 0x3B9),
+        0x1FA6  => array(0x1F66, 0x3B9),
+        0x1FA7  => array(0x1F67, 0x3B9),
+        0x1FA8  => array(0x1F60, 0x3B9),
+        0x1FA9  => array(0x1F61, 0x3B9),
+        0x1FAA  => array(0x1F62, 0x3B9),
+        0x1FAB  => array(0x1F63, 0x3B9),
+        0x1FAC  => array(0x1F64, 0x3B9),
+        0x1FAD  => array(0x1F65, 0x3B9),
+        0x1FAE  => array(0x1F66, 0x3B9),
+        0x1FAF  => array(0x1F67, 0x3B9),
+        0x1FB2  => array(0x1F70, 0x3B9),
+        0x1FB3  => array(0x3B1, 0x3B9),
+        0x1FB4  => array(0x3AC, 0x3B9),
+        0x1FB6  => array(0x3B1, 0x342),
+        0x1FB7  => array(0x3B1, 0x342, 0x3B9),
+        0x1FB8  => array(0x1FB0),
+        0x1FB9  => array(0x1FB1),
+        0x1FBA  => array(0x1F70),
+        0x1FBB  => array(0x1F71),
+        0x1FBC  => array(0x3B1, 0x3B9),
+        0x1FBE  => array(0x3B9),
+        0x1FC2  => array(0x1F74, 0x3B9),
+        0x1FC3  => array(0x3B7, 0x3B9),
+        0x1FC4  => array(0x3AE, 0x3B9),
+        0x1FC6  => array(0x3B7, 0x342),
+        0x1FC7  => array(0x3B7, 0x342, 0x3B9),
+        0x1FC8  => array(0x1F72),
+        0x1FC9  => array(0x1F73),
+        0x1FCA  => array(0x1F74),
+        0x1FCB  => array(0x1F75),
+        0x1FCC  => array(0x3B7, 0x3B9),
+        0x1FD2  => array(0x3B9, 0x308, 0x300),
+        0x1FD3  => array(0x3B9, 0x308, 0x301),
+        0x1FD6  => array(0x3B9, 0x342),
+        0x1FD7  => array(0x3B9, 0x308, 0x342),
+        0x1FD8  => array(0x1FD0),
+        0x1FD9  => array(0x1FD1),
+        0x1FDA  => array(0x1F76),
+        0x1FDB  => array(0x1F77),
+        0x1FE2  => array(0x3C5, 0x308, 0x300),
+        0x1FE3  => array(0x3C5, 0x308, 0x301),
+        0x1FE4  => array(0x3C1, 0x313),
+        0x1FE6  => array(0x3C5, 0x342),
+        0x1FE7  => array(0x3C5, 0x308, 0x342),
+        0x1FE8  => array(0x1FE0),
+        0x1FE9  => array(0x1FE1),
+        0x1FEA  => array(0x1F7A),
+        0x1FEB  => array(0x1F7B),
+        0x1FEC  => array(0x1FE5),
+        0x1FF2  => array(0x1F7C, 0x3B9),
+        0x1FF3  => array(0x3C9, 0x3B9),
+        0x1FF4  => array(0x3CE, 0x3B9),
+        0x1FF6  => array(0x3C9, 0x342),
+        0x1FF7  => array(0x3C9, 0x342, 0x3B9),
+        0x1FF8  => array(0x1F78),
+        0x1FF9  => array(0x1F79),
+        0x1FFA  => array(0x1F7C),
+        0x1FFB  => array(0x1F7D),
+        0x1FFC  => array(0x3C9, 0x3B9),
+        0x20A8  => array(0x72, 0x73),
+        0x2102  => array(0x63),
+        0x2103  => array(0xB0, 0x63),
+        0x2107  => array(0x25B),
+        0x2109  => array(0xB0, 0x66),
+        0x210B  => array(0x68),
+        0x210C  => array(0x68),
+        0x210D  => array(0x68),
+        0x2110  => array(0x69),
+        0x2111  => array(0x69),
+        0x2112  => array(0x6C),
+        0x2115  => array(0x6E),
+        0x2116  => array(0x6E, 0x6F),
+        0x2119  => array(0x70),
+        0x211A  => array(0x71),
+        0x211B  => array(0x72),
+        0x211C  => array(0x72),
+        0x211D  => array(0x72),
+        0x2120  => array(0x73, 0x6D),
+        0x2121  => array(0x74, 0x65, 0x6C),
+        0x2122  => array(0x74, 0x6D),
+        0x2124  => array(0x7A),
+        0x2126  => array(0x3C9),
+        0x2128  => array(0x7A),
+        0x212A  => array(0x6B),
+        0x212B  => array(0xE5),
+        0x212C  => array(0x62),
+        0x212D  => array(0x63),
+        0x2130  => array(0x65),
+        0x2131  => array(0x66),
+        0x2133  => array(0x6D),
+        0x213E  => array(0x3B3),
+        0x213F  => array(0x3C0),
+        0x2145  => array(0x64),
+        0x2160  => array(0x2170),
+        0x2161  => array(0x2171),
+        0x2162  => array(0x2172),
+        0x2163  => array(0x2173),
+        0x2164  => array(0x2174),
+        0x2165  => array(0x2175),
+        0x2166  => array(0x2176),
+        0x2167  => array(0x2177),
+        0x2168  => array(0x2178),
+        0x2169  => array(0x2179),
+        0x216A  => array(0x217A),
+        0x216B  => array(0x217B),
+        0x216C  => array(0x217C),
+        0x216D  => array(0x217D),
+        0x216E  => array(0x217E),
+        0x216F  => array(0x217F),
+        0x24B6  => array(0x24D0),
+        0x24B7  => array(0x24D1),
+        0x24B8  => array(0x24D2),
+        0x24B9  => array(0x24D3),
+        0x24BA  => array(0x24D4),
+        0x24BB  => array(0x24D5),
+        0x24BC  => array(0x24D6),
+        0x24BD  => array(0x24D7),
+        0x24BE  => array(0x24D8),
+        0x24BF  => array(0x24D9),
+        0x24C0  => array(0x24DA),
+        0x24C1  => array(0x24DB),
+        0x24C2  => array(0x24DC),
+        0x24C3  => array(0x24DD),
+        0x24C4  => array(0x24DE),
+        0x24C5  => array(0x24DF),
+        0x24C6  => array(0x24E0),
+        0x24C7  => array(0x24E1),
+        0x24C8  => array(0x24E2),
+        0x24C9  => array(0x24E3),
+        0x24CA  => array(0x24E4),
+        0x24CB  => array(0x24E5),
+        0x24CC  => array(0x24E6),
+        0x24CD  => array(0x24E7),
+        0x24CE  => array(0x24E8),
+        0x24CF  => array(0x24E9),
+        0x3371  => array(0x68, 0x70, 0x61),
+        0x3373  => array(0x61, 0x75),
+        0x3375  => array(0x6F, 0x76),
+        0x3380  => array(0x70, 0x61),
+        0x3381  => array(0x6E, 0x61),
+        0x3382  => array(0x3BC, 0x61),
+        0x3383  => array(0x6D, 0x61),
+        0x3384  => array(0x6B, 0x61),
+        0x3385  => array(0x6B, 0x62),
+        0x3386  => array(0x6D, 0x62),
+        0x3387  => array(0x67, 0x62),
+        0x338A  => array(0x70, 0x66),
+        0x338B  => array(0x6E, 0x66),
+        0x338C  => array(0x3BC, 0x66),
+        0x3390  => array(0x68, 0x7A),
+        0x3391  => array(0x6B, 0x68, 0x7A),
+        0x3392  => array(0x6D, 0x68, 0x7A),
+        0x3393  => array(0x67, 0x68, 0x7A),
+        0x3394  => array(0x74, 0x68, 0x7A),
+        0x33A9  => array(0x70, 0x61),
+        0x33AA  => array(0x6B, 0x70, 0x61),
+        0x33AB  => array(0x6D, 0x70, 0x61),
+        0x33AC  => array(0x67, 0x70, 0x61),
+        0x33B4  => array(0x70, 0x76),
+        0x33B5  => array(0x6E, 0x76),
+        0x33B6  => array(0x3BC, 0x76),
+        0x33B7  => array(0x6D, 0x76),
+        0x33B8  => array(0x6B, 0x76),
+        0x33B9  => array(0x6D, 0x76),
+        0x33BA  => array(0x70, 0x77),
+        0x33BB  => array(0x6E, 0x77),
+        0x33BC  => array(0x3BC, 0x77),
+        0x33BD  => array(0x6D, 0x77),
+        0x33BE  => array(0x6B, 0x77),
+        0x33BF  => array(0x6D, 0x77),
+        0x33C0  => array(0x6B, 0x3C9),
+        0x33C1  => array(0x6D, 0x3C9),
+        /* 0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
+        0x33C3  => array(0x62, 0x71),
+        0x33C6  => array(0x63, 0x2215, 0x6B, 0x67),
+        0x33C7  => array(0x63, 0x6F, 0x2E),
+        0x33C8  => array(0x64, 0x62),
+        0x33C9  => array(0x67, 0x79),
+        0x33CB  => array(0x68, 0x70),
+        0x33CD  => array(0x6B, 0x6B),
+        0x33CE  => array(0x6B, 0x6D),
+        0x33D7  => array(0x70, 0x68),
+        0x33D9  => array(0x70, 0x70, 0x6D),
+        0x33DA  => array(0x70, 0x72),
+        0x33DC  => array(0x73, 0x76),
+        0x33DD  => array(0x77, 0x62),
+        0xFB00  => array(0x66, 0x66),
+        0xFB01  => array(0x66, 0x69),
+        0xFB02  => array(0x66, 0x6C),
+        0xFB03  => array(0x66, 0x66, 0x69),
+        0xFB04  => array(0x66, 0x66, 0x6C),
+        0xFB05  => array(0x73, 0x74),
+        0xFB06  => array(0x73, 0x74),
+        0xFB13  => array(0x574, 0x576),
+        0xFB14  => array(0x574, 0x565),
+        0xFB15  => array(0x574, 0x56B),
+        0xFB16  => array(0x57E, 0x576),
+        0xFB17  => array(0x574, 0x56D),
+        0xFF21  => array(0xFF41),
+        0xFF22  => array(0xFF42),
+        0xFF23  => array(0xFF43),
+        0xFF24  => array(0xFF44),
+        0xFF25  => array(0xFF45),
+        0xFF26  => array(0xFF46),
+        0xFF27  => array(0xFF47),
+        0xFF28  => array(0xFF48),
+        0xFF29  => array(0xFF49),
+        0xFF2A  => array(0xFF4A),
+        0xFF2B  => array(0xFF4B),
+        0xFF2C  => array(0xFF4C),
+        0xFF2D  => array(0xFF4D),
+        0xFF2E  => array(0xFF4E),
+        0xFF2F  => array(0xFF4F),
+        0xFF30  => array(0xFF50),
+        0xFF31  => array(0xFF51),
+        0xFF32  => array(0xFF52),
+        0xFF33  => array(0xFF53),
+        0xFF34  => array(0xFF54),
+        0xFF35  => array(0xFF55),
+        0xFF36  => array(0xFF56),
+        0xFF37  => array(0xFF57),
+        0xFF38  => array(0xFF58),
+        0xFF39  => array(0xFF59),
+        0xFF3A  => array(0xFF5A),
+        0x10400 => array(0x10428),
+        0x10401 => array(0x10429),
+        0x10402 => array(0x1042A),
+        0x10403 => array(0x1042B),
+        0x10404 => array(0x1042C),
+        0x10405 => array(0x1042D),
+        0x10406 => array(0x1042E),
+        0x10407 => array(0x1042F),
+        0x10408 => array(0x10430),
+        0x10409 => array(0x10431),
+        0x1040A => array(0x10432),
+        0x1040B => array(0x10433),
+        0x1040C => array(0x10434),
+        0x1040D => array(0x10435),
+        0x1040E => array(0x10436),
+        0x1040F => array(0x10437),
+        0x10410 => array(0x10438),
+        0x10411 => array(0x10439),
+        0x10412 => array(0x1043A),
+        0x10413 => array(0x1043B),
+        0x10414 => array(0x1043C),
+        0x10415 => array(0x1043D),
+        0x10416 => array(0x1043E),
+        0x10417 => array(0x1043F),
+        0x10418 => array(0x10440),
+        0x10419 => array(0x10441),
+        0x1041A => array(0x10442),
+        0x1041B => array(0x10443),
+        0x1041C => array(0x10444),
+        0x1041D => array(0x10445),
+        0x1041E => array(0x10446),
+        0x1041F => array(0x10447),
+        0x10420 => array(0x10448),
+        0x10421 => array(0x10449),
+        0x10422 => array(0x1044A),
+        0x10423 => array(0x1044B),
+        0x10424 => array(0x1044C),
+        0x10425 => array(0x1044D),
+        0x1D400 => array(0x61),
+        0x1D401 => array(0x62),
+        0x1D402 => array(0x63),
+        0x1D403 => array(0x64),
+        0x1D404 => array(0x65),
+        0x1D405 => array(0x66),
+        0x1D406 => array(0x67),
+        0x1D407 => array(0x68),
+        0x1D408 => array(0x69),
+        0x1D409 => array(0x6A),
+        0x1D40A => array(0x6B),
+        0x1D40B => array(0x6C),
+        0x1D40C => array(0x6D),
+        0x1D40D => array(0x6E),
+        0x1D40E => array(0x6F),
+        0x1D40F => array(0x70),
+        0x1D410 => array(0x71),
+        0x1D411 => array(0x72),
+        0x1D412 => array(0x73),
+        0x1D413 => array(0x74),
+        0x1D414 => array(0x75),
+        0x1D415 => array(0x76),
+        0x1D416 => array(0x77),
+        0x1D417 => array(0x78),
+        0x1D418 => array(0x79),
+        0x1D419 => array(0x7A),
+        0x1D434 => array(0x61),
+        0x1D435 => array(0x62),
+        0x1D436 => array(0x63),
+        0x1D437 => array(0x64),
+        0x1D438 => array(0x65),
+        0x1D439 => array(0x66),
+        0x1D43A => array(0x67),
+        0x1D43B => array(0x68),
+        0x1D43C => array(0x69),
+        0x1D43D => array(0x6A),
+        0x1D43E => array(0x6B),
+        0x1D43F => array(0x6C),
+        0x1D440 => array(0x6D),
+        0x1D441 => array(0x6E),
+        0x1D442 => array(0x6F),
+        0x1D443 => array(0x70),
+        0x1D444 => array(0x71),
+        0x1D445 => array(0x72),
+        0x1D446 => array(0x73),
+        0x1D447 => array(0x74),
+        0x1D448 => array(0x75),
+        0x1D449 => array(0x76),
+        0x1D44A => array(0x77),
+        0x1D44B => array(0x78),
+        0x1D44C => array(0x79),
+        0x1D44D => array(0x7A),
+        0x1D468 => array(0x61),
+        0x1D469 => array(0x62),
+        0x1D46A => array(0x63),
+        0x1D46B => array(0x64),
+        0x1D46C => array(0x65),
+        0x1D46D => array(0x66),
+        0x1D46E => array(0x67),
+        0x1D46F => array(0x68),
+        0x1D470 => array(0x69),
+        0x1D471 => array(0x6A),
+        0x1D472 => array(0x6B),
+        0x1D473 => array(0x6C),
+        0x1D474 => array(0x6D),
+        0x1D475 => array(0x6E),
+        0x1D476 => array(0x6F),
+        0x1D477 => array(0x70),
+        0x1D478 => array(0x71),
+        0x1D479 => array(0x72),
+        0x1D47A => array(0x73),
+        0x1D47B => array(0x74),
+        0x1D47C => array(0x75),
+        0x1D47D => array(0x76),
+        0x1D47E => array(0x77),
+        0x1D47F => array(0x78),
+        0x1D480 => array(0x79),
+        0x1D481 => array(0x7A),
+        0x1D49C => array(0x61),
+        0x1D49E => array(0x63),
+        0x1D49F => array(0x64),
+        0x1D4A2 => array(0x67),
+        0x1D4A5 => array(0x6A),
+        0x1D4A6 => array(0x6B),
+        0x1D4A9 => array(0x6E),
+        0x1D4AA => array(0x6F),
+        0x1D4AB => array(0x70),
+        0x1D4AC => array(0x71),
+        0x1D4AE => array(0x73),
+        0x1D4AF => array(0x74),
+        0x1D4B0 => array(0x75),
+        0x1D4B1 => array(0x76),
+        0x1D4B2 => array(0x77),
+        0x1D4B3 => array(0x78),
+        0x1D4B4 => array(0x79),
+        0x1D4B5 => array(0x7A),
+        0x1D4D0 => array(0x61),
+        0x1D4D1 => array(0x62),
+        0x1D4D2 => array(0x63),
+        0x1D4D3 => array(0x64),
+        0x1D4D4 => array(0x65),
+        0x1D4D5 => array(0x66),
+        0x1D4D6 => array(0x67),
+        0x1D4D7 => array(0x68),
+        0x1D4D8 => array(0x69),
+        0x1D4D9 => array(0x6A),
+        0x1D4DA => array(0x6B),
+        0x1D4DB => array(0x6C),
+        0x1D4DC => array(0x6D),
+        0x1D4DD => array(0x6E),
+        0x1D4DE => array(0x6F),
+        0x1D4DF => array(0x70),
+        0x1D4E0 => array(0x71),
+        0x1D4E1 => array(0x72),
+        0x1D4E2 => array(0x73),
+        0x1D4E3 => array(0x74),
+        0x1D4E4 => array(0x75),
+        0x1D4E5 => array(0x76),
+        0x1D4E6 => array(0x77),
+        0x1D4E7 => array(0x78),
+        0x1D4E8 => array(0x79),
+        0x1D4E9 => array(0x7A),
+        0x1D504 => array(0x61),
+        0x1D505 => array(0x62),
+        0x1D507 => array(0x64),
+        0x1D508 => array(0x65),
+        0x1D509 => array(0x66),
+        0x1D50A => array(0x67),
+        0x1D50D => array(0x6A),
+        0x1D50E => array(0x6B),
+        0x1D50F => array(0x6C),
+        0x1D510 => array(0x6D),
+        0x1D511 => array(0x6E),
+        0x1D512 => array(0x6F),
+        0x1D513 => array(0x70),
+        0x1D514 => array(0x71),
+        0x1D516 => array(0x73),
+        0x1D517 => array(0x74),
+        0x1D518 => array(0x75),
+        0x1D519 => array(0x76),
+        0x1D51A => array(0x77),
+        0x1D51B => array(0x78),
+        0x1D51C => array(0x79),
+        0x1D538 => array(0x61),
+        0x1D539 => array(0x62),
+        0x1D53B => array(0x64),
+        0x1D53C => array(0x65),
+        0x1D53D => array(0x66),
+        0x1D53E => array(0x67),
+        0x1D540 => array(0x69),
+        0x1D541 => array(0x6A),
+        0x1D542 => array(0x6B),
+        0x1D543 => array(0x6C),
+        0x1D544 => array(0x6D),
+        0x1D546 => array(0x6F),
+        0x1D54A => array(0x73),
+        0x1D54B => array(0x74),
+        0x1D54C => array(0x75),
+        0x1D54D => array(0x76),
+        0x1D54E => array(0x77),
+        0x1D54F => array(0x78),
+        0x1D550 => array(0x79),
+        0x1D56C => array(0x61),
+        0x1D56D => array(0x62),
+        0x1D56E => array(0x63),
+        0x1D56F => array(0x64),
+        0x1D570 => array(0x65),
+        0x1D571 => array(0x66),
+        0x1D572 => array(0x67),
+        0x1D573 => array(0x68),
+        0x1D574 => array(0x69),
+        0x1D575 => array(0x6A),
+        0x1D576 => array(0x6B),
+        0x1D577 => array(0x6C),
+        0x1D578 => array(0x6D),
+        0x1D579 => array(0x6E),
+        0x1D57A => array(0x6F),
+        0x1D57B => array(0x70),
+        0x1D57C => array(0x71),
+        0x1D57D => array(0x72),
+        0x1D57E => array(0x73),
+        0x1D57F => array(0x74),
+        0x1D580 => array(0x75),
+        0x1D581 => array(0x76),
+        0x1D582 => array(0x77),
+        0x1D583 => array(0x78),
+        0x1D584 => array(0x79),
+        0x1D585 => array(0x7A),
+        0x1D5A0 => array(0x61),
+        0x1D5A1 => array(0x62),
+        0x1D5A2 => array(0x63),
+        0x1D5A3 => array(0x64),
+        0x1D5A4 => array(0x65),
+        0x1D5A5 => array(0x66),
+        0x1D5A6 => array(0x67),
+        0x1D5A7 => array(0x68),
+        0x1D5A8 => array(0x69),
+        0x1D5A9 => array(0x6A),
+        0x1D5AA => array(0x6B),
+        0x1D5AB => array(0x6C),
+        0x1D5AC => array(0x6D),
+        0x1D5AD => array(0x6E),
+        0x1D5AE => array(0x6F),
+        0x1D5AF => array(0x70),
+        0x1D5B0 => array(0x71),
+        0x1D5B1 => array(0x72),
+        0x1D5B2 => array(0x73),
+        0x1D5B3 => array(0x74),
+        0x1D5B4 => array(0x75),
+        0x1D5B5 => array(0x76),
+        0x1D5B6 => array(0x77),
+        0x1D5B7 => array(0x78),
+        0x1D5B8 => array(0x79),
+        0x1D5B9 => array(0x7A),
+        0x1D5D4 => array(0x61),
+        0x1D5D5 => array(0x62),
+        0x1D5D6 => array(0x63),
+        0x1D5D7 => array(0x64),
+        0x1D5D8 => array(0x65),
+        0x1D5D9 => array(0x66),
+        0x1D5DA => array(0x67),
+        0x1D5DB => array(0x68),
+        0x1D5DC => array(0x69),
+        0x1D5DD => array(0x6A),
+        0x1D5DE => array(0x6B),
+        0x1D5DF => array(0x6C),
+        0x1D5E0 => array(0x6D),
+        0x1D5E1 => array(0x6E),
+        0x1D5E2 => array(0x6F),
+        0x1D5E3 => array(0x70),
+        0x1D5E4 => array(0x71),
+        0x1D5E5 => array(0x72),
+        0x1D5E6 => array(0x73),
+        0x1D5E7 => array(0x74),
+        0x1D5E8 => array(0x75),
+        0x1D5E9 => array(0x76),
+        0x1D5EA => array(0x77),
+        0x1D5EB => array(0x78),
+        0x1D5EC => array(0x79),
+        0x1D5ED => array(0x7A),
+        0x1D608 => array(0x61),
+        0x1D609 => array(0x62),
+        0x1D60A => array(0x63),
+        0x1D60B => array(0x64),
+        0x1D60C => array(0x65),
+        0x1D60D => array(0x66),
+        0x1D60E => array(0x67),
+        0x1D60F => array(0x68),
+        0x1D610 => array(0x69),
+        0x1D611 => array(0x6A),
+        0x1D612 => array(0x6B),
+        0x1D613 => array(0x6C),
+        0x1D614 => array(0x6D),
+        0x1D615 => array(0x6E),
+        0x1D616 => array(0x6F),
+        0x1D617 => array(0x70),
+        0x1D618 => array(0x71),
+        0x1D619 => array(0x72),
+        0x1D61A => array(0x73),
+        0x1D61B => array(0x74),
+        0x1D61C => array(0x75),
+        0x1D61D => array(0x76),
+        0x1D61E => array(0x77),
+        0x1D61F => array(0x78),
+        0x1D620 => array(0x79),
+        0x1D621 => array(0x7A),
+        0x1D63C => array(0x61),
+        0x1D63D => array(0x62),
+        0x1D63E => array(0x63),
+        0x1D63F => array(0x64),
+        0x1D640 => array(0x65),
+        0x1D641 => array(0x66),
+        0x1D642 => array(0x67),
+        0x1D643 => array(0x68),
+        0x1D644 => array(0x69),
+        0x1D645 => array(0x6A),
+        0x1D646 => array(0x6B),
+        0x1D647 => array(0x6C),
+        0x1D648 => array(0x6D),
+        0x1D649 => array(0x6E),
+        0x1D64A => array(0x6F),
+        0x1D64B => array(0x70),
+        0x1D64C => array(0x71),
+        0x1D64D => array(0x72),
+        0x1D64E => array(0x73),
+        0x1D64F => array(0x74),
+        0x1D650 => array(0x75),
+        0x1D651 => array(0x76),
+        0x1D652 => array(0x77),
+        0x1D653 => array(0x78),
+        0x1D654 => array(0x79),
+        0x1D655 => array(0x7A),
+        0x1D670 => array(0x61),
+        0x1D671 => array(0x62),
+        0x1D672 => array(0x63),
+        0x1D673 => array(0x64),
+        0x1D674 => array(0x65),
+        0x1D675 => array(0x66),
+        0x1D676 => array(0x67),
+        0x1D677 => array(0x68),
+        0x1D678 => array(0x69),
+        0x1D679 => array(0x6A),
+        0x1D67A => array(0x6B),
+        0x1D67B => array(0x6C),
+        0x1D67C => array(0x6D),
+        0x1D67D => array(0x6E),
+        0x1D67E => array(0x6F),
+        0x1D67F => array(0x70),
+        0x1D680 => array(0x71),
+        0x1D681 => array(0x72),
+        0x1D682 => array(0x73),
+        0x1D683 => array(0x74),
+        0x1D684 => array(0x75),
+        0x1D685 => array(0x76),
+        0x1D686 => array(0x77),
+        0x1D687 => array(0x78),
+        0x1D688 => array(0x79),
+        0x1D689 => array(0x7A),
+        0x1D6A8 => array(0x3B1),
+        0x1D6A9 => array(0x3B2),
+        0x1D6AA => array(0x3B3),
+        0x1D6AB => array(0x3B4),
+        0x1D6AC => array(0x3B5),
+        0x1D6AD => array(0x3B6),
+        0x1D6AE => array(0x3B7),
+        0x1D6AF => array(0x3B8),
+        0x1D6B0 => array(0x3B9),
+        0x1D6B1 => array(0x3BA),
+        0x1D6B2 => array(0x3BB),
+        0x1D6B3 => array(0x3BC),
+        0x1D6B4 => array(0x3BD),
+        0x1D6B5 => array(0x3BE),
+        0x1D6B6 => array(0x3BF),
+        0x1D6B7 => array(0x3C0),
+        0x1D6B8 => array(0x3C1),
+        0x1D6B9 => array(0x3B8),
+        0x1D6BA => array(0x3C3),
+        0x1D6BB => array(0x3C4),
+        0x1D6BC => array(0x3C5),
+        0x1D6BD => array(0x3C6),
+        0x1D6BE => array(0x3C7),
+        0x1D6BF => array(0x3C8),
+        0x1D6C0 => array(0x3C9),
+        0x1D6D3 => array(0x3C3),
+        0x1D6E2 => array(0x3B1),
+        0x1D6E3 => array(0x3B2),
+        0x1D6E4 => array(0x3B3),
+        0x1D6E5 => array(0x3B4),
+        0x1D6E6 => array(0x3B5),
+        0x1D6E7 => array(0x3B6),
+        0x1D6E8 => array(0x3B7),
+        0x1D6E9 => array(0x3B8),
+        0x1D6EA => array(0x3B9),
+        0x1D6EB => array(0x3BA),
+        0x1D6EC => array(0x3BB),
+        0x1D6ED => array(0x3BC),
+        0x1D6EE => array(0x3BD),
+        0x1D6EF => array(0x3BE),
+        0x1D6F0 => array(0x3BF),
+        0x1D6F1 => array(0x3C0),
+        0x1D6F2 => array(0x3C1),
+        0x1D6F3 => array(0x3B8),
+        0x1D6F4 => array(0x3C3),
+        0x1D6F5 => array(0x3C4),
+        0x1D6F6 => array(0x3C5),
+        0x1D6F7 => array(0x3C6),
+        0x1D6F8 => array(0x3C7),
+        0x1D6F9 => array(0x3C8),
+        0x1D6FA => array(0x3C9),
+        0x1D70D => array(0x3C3),
+        0x1D71C => array(0x3B1),
+        0x1D71D => array(0x3B2),
+        0x1D71E => array(0x3B3),
+        0x1D71F => array(0x3B4),
+        0x1D720 => array(0x3B5),
+        0x1D721 => array(0x3B6),
+        0x1D722 => array(0x3B7),
+        0x1D723 => array(0x3B8),
+        0x1D724 => array(0x3B9),
+        0x1D725 => array(0x3BA),
+        0x1D726 => array(0x3BB),
+        0x1D727 => array(0x3BC),
+        0x1D728 => array(0x3BD),
+        0x1D729 => array(0x3BE),
+        0x1D72A => array(0x3BF),
+        0x1D72B => array(0x3C0),
+        0x1D72C => array(0x3C1),
+        0x1D72D => array(0x3B8),
+        0x1D72E => array(0x3C3),
+        0x1D72F => array(0x3C4),
+        0x1D730 => array(0x3C5),
+        0x1D731 => array(0x3C6),
+        0x1D732 => array(0x3C7),
+        0x1D733 => array(0x3C8),
+        0x1D734 => array(0x3C9),
+        0x1D747 => array(0x3C3),
+        0x1D756 => array(0x3B1),
+        0x1D757 => array(0x3B2),
+        0x1D758 => array(0x3B3),
+        0x1D759 => array(0x3B4),
+        0x1D75A => array(0x3B5),
+        0x1D75B => array(0x3B6),
+        0x1D75C => array(0x3B7),
+        0x1D75D => array(0x3B8),
+        0x1D75E => array(0x3B9),
+        0x1D75F => array(0x3BA),
+        0x1D760 => array(0x3BB),
+        0x1D761 => array(0x3BC),
+        0x1D762 => array(0x3BD),
+        0x1D763 => array(0x3BE),
+        0x1D764 => array(0x3BF),
+        0x1D765 => array(0x3C0),
+        0x1D766 => array(0x3C1),
+        0x1D767 => array(0x3B8),
+        0x1D768 => array(0x3C3),
+        0x1D769 => array(0x3C4),
+        0x1D76A => array(0x3C5),
+        0x1D76B => array(0x3C6),
+        0x1D76C => array(0x3C7),
+        0x1D76D => array(0x3C8),
+        0x1D76E => array(0x3C9),
+        0x1D781 => array(0x3C3),
+        0x1D790 => array(0x3B1),
+        0x1D791 => array(0x3B2),
+        0x1D792 => array(0x3B3),
+        0x1D793 => array(0x3B4),
+        0x1D794 => array(0x3B5),
+        0x1D795 => array(0x3B6),
+        0x1D796 => array(0x3B7),
+        0x1D797 => array(0x3B8),
+        0x1D798 => array(0x3B9),
+        0x1D799 => array(0x3BA),
+        0x1D79A => array(0x3BB),
+        0x1D79B => array(0x3BC),
+        0x1D79C => array(0x3BD),
+        0x1D79D => array(0x3BE),
+        0x1D79E => array(0x3BF),
+        0x1D79F => array(0x3C0),
+        0x1D7A0 => array(0x3C1),
+        0x1D7A1 => array(0x3B8),
+        0x1D7A2 => array(0x3C3),
+        0x1D7A3 => array(0x3C4),
+        0x1D7A4 => array(0x3C5),
+        0x1D7A5 => array(0x3C6),
+        0x1D7A6 => array(0x3C7),
+        0x1D7A7 => array(0x3C8),
+        0x1D7A8 => array(0x3C9),
+        0x1D7BB => array(0x3C3),
+        0x3F9   => array(0x3C3),
+        0x1D2C  => array(0x61),
+        0x1D2D  => array(0xE6),
+        0x1D2E  => array(0x62),
+        0x1D30  => array(0x64),
+        0x1D31  => array(0x65),
+        0x1D32  => array(0x1DD),
+        0x1D33  => array(0x67),
+        0x1D34  => array(0x68),
+        0x1D35  => array(0x69),
+        0x1D36  => array(0x6A),
+        0x1D37  => array(0x6B),
+        0x1D38  => array(0x6C),
+        0x1D39  => array(0x6D),
+        0x1D3A  => array(0x6E),
+        0x1D3C  => array(0x6F),
+        0x1D3D  => array(0x223),
+        0x1D3E  => array(0x70),
+        0x1D3F  => array(0x72),
+        0x1D40  => array(0x74),
+        0x1D41  => array(0x75),
+        0x1D42  => array(0x77),
+        0x213B  => array(0x66, 0x61, 0x78),
+        0x3250  => array(0x70, 0x74, 0x65),
+        0x32CC  => array(0x68, 0x67),
+        0x32CE  => array(0x65, 0x76),
+        0x32CF  => array(0x6C, 0x74, 0x64),
+        0x337A  => array(0x69, 0x75),
+        0x33DE  => array(0x76, 0x2215, 0x6D),
+        0x33DF  => array(0x61, 0x2215, 0x6D)
+    );
+
+    /**
+     * Normalization Combining Classes; Code Points not listed
+     * got Combining Class 0.
+     *
+     * @static
+     * @var array
+     * @access private
+     */
+    private static $_np_norm_combcls = array(
+        0x334   => 1,
+        0x335   => 1,
+        0x336   => 1,
+        0x337   => 1,
+        0x338   => 1,
+        0x93C   => 7,
+        0x9BC   => 7,
+        0xA3C   => 7,
+        0xABC   => 7,
+        0xB3C   => 7,
+        0xCBC   => 7,
+        0x1037  => 7,
+        0x3099  => 8,
+        0x309A  => 8,
+        0x94D   => 9,
+        0x9CD   => 9,
+        0xA4D   => 9,
+        0xACD   => 9,
+        0xB4D   => 9,
+        0xBCD   => 9,
+        0xC4D   => 9,
+        0xCCD   => 9,
+        0xD4D   => 9,
+        0xDCA   => 9,
+        0xE3A   => 9,
+        0xF84   => 9,
+        0x1039  => 9,
+        0x1714  => 9,
+        0x1734  => 9,
+        0x17D2  => 9,
+        0x5B0   => 10,
+        0x5B1   => 11,
+        0x5B2   => 12,
+        0x5B3   => 13,
+        0x5B4   => 14,
+        0x5B5   => 15,
+        0x5B6   => 16,
+        0x5B7   => 17,
+        0x5B8   => 18,
+        0x5B9   => 19,
+        0x5BB   => 20,
+        0x5Bc   => 21,
+        0x5BD   => 22,
+        0x5BF   => 23,
+        0x5C1   => 24,
+        0x5C2   => 25,
+        0xFB1E  => 26,
+        0x64B   => 27,
+        0x64C   => 28,
+        0x64D   => 29,
+        0x64E   => 30,
+        0x64F   => 31,
+        0x650   => 32,
+        0x651   => 33,
+        0x652   => 34,
+        0x670   => 35,
+        0x711   => 36,
+        0xC55   => 84,
+        0xC56   => 91,
+        0xE38   => 103,
+        0xE39   => 103,
+        0xE48   => 107,
+        0xE49   => 107,
+        0xE4A   => 107,
+        0xE4B   => 107,
+        0xEB8   => 118,
+        0xEB9   => 118,
+        0xEC8   => 122,
+        0xEC9   => 122,
+        0xECA   => 122,
+        0xECB   => 122,
+        0xF71   => 129,
+        0xF72   => 130,
+        0xF7A   => 130,
+        0xF7B   => 130,
+        0xF7C   => 130,
+        0xF7D   => 130,
+        0xF80   => 130,
+        0xF74   => 132,
+        0x321   => 202,
+        0x322   => 202,
+        0x327   => 202,
+        0x328   => 202,
+        0x31B   => 216,
+        0xF39   => 216,
+        0x1D165 => 216,
+        0x1D166 => 216,
+        0x1D16E => 216,
+        0x1D16F => 216,
+        0x1D170 => 216,
+        0x1D171 => 216,
+        0x1D172 => 216,
+        0x302A  => 218,
+        0x316   => 220,
+        0x317   => 220,
+        0x318   => 220,
+        0x319   => 220,
+        0x31C   => 220,
+        0x31D   => 220,
+        0x31E   => 220,
+        0x31F   => 220,
+        0x320   => 220,
+        0x323   => 220,
+        0x324   => 220,
+        0x325   => 220,
+        0x326   => 220,
+        0x329   => 220,
+        0x32A   => 220,
+        0x32B   => 220,
+        0x32C   => 220,
+        0x32D   => 220,
+        0x32E   => 220,
+        0x32F   => 220,
+        0x330   => 220,
+        0x331   => 220,
+        0x332   => 220,
+        0x333   => 220,
+        0x339   => 220,
+        0x33A   => 220,
+        0x33B   => 220,
+        0x33C   => 220,
+        0x347   => 220,
+        0x348   => 220,
+        0x349   => 220,
+        0x34D   => 220,
+        0x34E   => 220,
+        0x353   => 220,
+        0x354   => 220,
+        0x355   => 220,
+        0x356   => 220,
+        0x591   => 220,
+        0x596   => 220,
+        0x59B   => 220,
+        0x5A3   => 220,
+        0x5A4   => 220,
+        0x5A5   => 220,
+        0x5A6   => 220,
+        0x5A7   => 220,
+        0x5AA   => 220,
+        0x655   => 220,
+        0x656   => 220,
+        0x6E3   => 220,
+        0x6EA   => 220,
+        0x6ED   => 220,
+        0x731   => 220,
+        0x734   => 220,
+        0x737   => 220,
+        0x738   => 220,
+        0x739   => 220,
+        0x73B   => 220,
+        0x73C   => 220,
+        0x73E   => 220,
+        0x742   => 220,
+        0x744   => 220,
+        0x746   => 220,
+        0x748   => 220,
+        0x952   => 220,
+        0xF18   => 220,
+        0xF19   => 220,
+        0xF35   => 220,
+        0xF37   => 220,
+        0xFC6   => 220,
+        0x193B  => 220,
+        0x20E8  => 220,
+        0x1D17B => 220,
+        0x1D17C => 220,
+        0x1D17D => 220,
+        0x1D17E => 220,
+        0x1D17F => 220,
+        0x1D180 => 220,
+        0x1D181 => 220,
+        0x1D182 => 220,
+        0x1D18A => 220,
+        0x1D18B => 220,
+        0x59A   => 222,
+        0x5AD   => 222,
+        0x1929  => 222,
+        0x302D  => 222,
+        0x302E  => 224,
+        0x302F  => 224,
+        0x1D16D => 226,
+        0x5AE   => 228,
+        0x18A9  => 228,
+        0x302B  => 228,
+        0x300   => 230,
+        0x301   => 230,
+        0x302   => 230,
+        0x303   => 230,
+        0x304   => 230,
+        0x305   => 230,
+        0x306   => 230,
+        0x307   => 230,
+        0x308   => 230,
+        0x309   => 230,
+        0x30A   => 230,
+        0x30B   => 230,
+        0x30C   => 230,
+        0x30D   => 230,
+        0x30E   => 230,
+        0x30F   => 230,
+        0x310   => 230,
+        0x311   => 230,
+        0x312   => 230,
+        0x313   => 230,
+        0x314   => 230,
+        0x33D   => 230,
+        0x33E   => 230,
+        0x33F   => 230,
+        0x340   => 230,
+        0x341   => 230,
+        0x342   => 230,
+        0x343   => 230,
+        0x344   => 230,
+        0x346   => 230,
+        0x34A   => 230,
+        0x34B   => 230,
+        0x34C   => 230,
+        0x350   => 230,
+        0x351   => 230,
+        0x352   => 230,
+        0x357   => 230,
+        0x363   => 230,
+        0x364   => 230,
+        0x365   => 230,
+        0x366   => 230,
+        0x367   => 230,
+        0x368   => 230,
+        0x369   => 230,
+        0x36A   => 230,
+        0x36B   => 230,
+        0x36C   => 230,
+        0x36D   => 230,
+        0x36E   => 230,
+        0x36F   => 230,
+        0x483   => 230,
+        0x484   => 230,
+        0x485   => 230,
+        0x486   => 230,
+        0x592   => 230,
+        0x593   => 230,
+        0x594   => 230,
+        0x595   => 230,
+        0x597   => 230,
+        0x598   => 230,
+        0x599   => 230,
+        0x59C   => 230,
+        0x59D   => 230,
+        0x59E   => 230,
+        0x59F   => 230,
+        0x5A0   => 230,
+        0x5A1   => 230,
+        0x5A8   => 230,
+        0x5A9   => 230,
+        0x5AB   => 230,
+        0x5AC   => 230,
+        0x5AF   => 230,
+        0x5C4   => 230,
+        0x610   => 230,
+        0x611   => 230,
+        0x612   => 230,
+        0x613   => 230,
+        0x614   => 230,
+        0x615   => 230,
+        0x653   => 230,
+        0x654   => 230,
+        0x657   => 230,
+        0x658   => 230,
+        0x6D6   => 230,
+        0x6D7   => 230,
+        0x6D8   => 230,
+        0x6D9   => 230,
+        0x6DA   => 230,
+        0x6DB   => 230,
+        0x6DC   => 230,
+        0x6DF   => 230,
+        0x6E0   => 230,
+        0x6E1   => 230,
+        0x6E2   => 230,
+        0x6E4   => 230,
+        0x6E7   => 230,
+        0x6E8   => 230,
+        0x6EB   => 230,
+        0x6EC   => 230,
+        0x730   => 230,
+        0x732   => 230,
+        0x733   => 230,
+        0x735   => 230,
+        0x736   => 230,
+        0x73A   => 230,
+        0x73D   => 230,
+        0x73F   => 230,
+        0x740   => 230,
+        0x741   => 230,
+        0x743   => 230,
+        0x745   => 230,
+        0x747   => 230,
+        0x749   => 230,
+        0x74A   => 230,
+        0x951   => 230,
+        0x953   => 230,
+        0x954   => 230,
+        0xF82   => 230,
+        0xF83   => 230,
+        0xF86   => 230,
+        0xF87   => 230,
+        0x170D  => 230,
+        0x193A  => 230,
+        0x20D0  => 230,
+        0x20D1  => 230,
+        0x20D4  => 230,
+        0x20D5  => 230,
+        0x20D6  => 230,
+        0x20D7  => 230,
+        0x20DB  => 230,
+        0x20DC  => 230,
+        0x20E1  => 230,
+        0x20E7  => 230,
+        0x20E9  => 230,
+        0xFE20  => 230,
+        0xFE21  => 230,
+        0xFE22  => 230,
+        0xFE23  => 230,
+        0x1D185 => 230,
+        0x1D186 => 230,
+        0x1D187 => 230,
+        0x1D189 => 230,
+        0x1D188 => 230,
+        0x1D1AA => 230,
+        0x1D1AB => 230,
+        0x1D1AC => 230,
+        0x1D1AD => 230,
+        0x315   => 232,
+        0x31A   => 232,
+        0x302C  => 232,
+        0x35F   => 233,
+        0x362   => 233,
+        0x35D   => 234,
+        0x35E   => 234,
+        0x360   => 234,
+        0x361   => 234,
+        0x345   => 240
+    );
+    // }}}
+
+    // {{{ properties
+    /**
+     * @var string
+     * @access private
+     */
+    private $_punycode_prefix = 'xn--';
+
+    /**
+     * @access private
+     */
+    private $_invalid_ucs = 0x80000000;
+
+    /**
+     * @access private
+     */
+    private $_max_ucs = 0x10FFFF;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_base = 36;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_tmin = 1;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_tmax = 26;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_skew = 38;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_damp = 700;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_initial_bias = 72;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_initial_n = 0x80;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_slast;
+
+    /**
+     * @access private
+     */
+    private $_sbase = 0xAC00;
+
+    /**
+     * @access private
+     */
+    private $_lbase = 0x1100;
+
+    /**
+     * @access private
+     */
+    private $_vbase = 0x1161;
+
+    /**
+     * @access private
+     */
+    private $_tbase = 0x11a7;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_lcount = 19;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_vcount = 21;
+
+    /**
+     * @var int
+     * @access private
+     */
+    private $_tcount = 28;
+
+    /**
+     * vcount * tcount
+     *
+     * @var int
+     * @access private
+     */
+    private $_ncount = 588;
+
+    /**
+     * lcount * tcount * vcount
+     *
+     * @var int
+     * @access private
+     */
+    private $_scount = 11172;
+
+    /**
+     * Default encoding for encode()'s input and decode()'s output is UTF-8;
+     * Other possible encodings are ucs4_string and ucs4_array
+     * See {@link setParams()} for how to select these
+     *
+     * @var bool
+     * @access private
+     */
+    private $_api_encoding = 'utf8';
+
+    /**
+     * Overlong UTF-8 encodings are forbidden
+     *
+     * @var bool
+     * @access private
+     */
+    private $_allow_overlong = false;
+
+    /**
+     * Behave strict or not
+     *
+     * @var bool
+     * @access private
+     */
+    private $_strict_mode = false;
+
+    /**
+     * IDNA-version to use
+     *
+     * Values are "2003" and "2008".
+     * Defaults to "2003", since that was the original version and for
+     * compatibility with previous versions of this library.
+     * If you need to encode "new" characters like the German "Eszett",
+     * please switch to 2008 first before encoding.
+     *
+     * @var bool
+     * @access private
+     */
+    private $_version = '2003';
+
+    /**
+     * Cached value indicating whether or not mbstring function overloading is
+     * on for strlen
+     *
+     * This is cached for optimal performance.
+     *
+     * @var boolean
+     * @see Net_IDNA2::_byteLength()
+     */
+    private static $_mb_string_overload = null;
+    // }}}
+
+
+    // {{{ constructor
+    /**
+     * Constructor
+     *
+     * @param array $options Options to initialise the object with
+     *
+     * @access public
+     * @see    setParams()
+     */
+    public function __construct($options = null)
+    {
+        $this->_slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
+
+        if (is_array($options)) {
+            $this->setParams($options);
+        }
+
+        // populate mbstring overloading cache if not set
+        if (self::$_mb_string_overload === null) {
+            self::$_mb_string_overload = (extension_loaded('mbstring')
+                && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
+        }
+    }
+    // }}}
+
+
+    /**
+     * Sets a new option value. Available options and values:
+     *
+     * [utf8 -     Use either UTF-8 or ISO-8859-1 as input (true for UTF-8, false
+     *             otherwise); The output is always UTF-8]
+     * [overlong - Unicode does not allow unnecessarily long encodings of chars,
+     *             to allow this, set this parameter to true, else to false;
+     *             default is false.]
+     * [strict -   true: strict mode, good for registration purposes - Causes errors
+     *             on failures; false: loose mode, ideal for "wildlife" applications
+     *             by silently ignoring errors and returning the original input instead]
+     *
+     * @param mixed  $option Parameter to set (string: single parameter; array of Parameter => Value pairs)
+     * @param string $value  Value to use (if parameter 1 is a string)
+     *
+     * @return boolean       true on success, false otherwise
+     * @access public
+     */
+    public function setParams($option, $value = false)
+    {
+        if (!is_array($option)) {
+            $option = array($option => $value);
+        }
+
+        foreach ($option as $k => $v) {
+            switch ($k) {
+            case 'encoding':
+                switch ($v) {
+                case 'utf8':
+                case 'ucs4_string':
+                case 'ucs4_array':
+                    $this->_api_encoding = $v;
+                    break;
+
+                default:
+                    throw new InvalidArgumentException('Set Parameter: Unknown parameter '.$v.' for option '.$k);
+                }
+
+                break;
+
+            case 'overlong':
+                $this->_allow_overlong = ($v) ? true : false;
+                break;
+
+            case 'strict':
+                $this->_strict_mode = ($v) ? true : false;
+                break;
+
+            case 'version':
+                if (in_array($v, array('2003', '2008'))) {
+                    $this->_version = $v;
+                } else {
+                    throw new InvalidArgumentException('Set Parameter: Invalid parameter '.$v.' for option '.$k);
+                }
+                break;
+
+            default:
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Encode a given UTF-8 domain name.
+     *
+     * @param string $decoded           Domain name (UTF-8 or UCS-4)
+     * @param string $one_time_encoding Desired input encoding, see {@link set_parameter}
+     *                                  If not given will use default-encoding
+     *
+     * @return string Encoded Domain name (ACE string)
+     * @return mixed  processed string
+     * @throws Exception
+     * @access public
+     */
+    public function encode($decoded, $one_time_encoding = false)
+    {
+        // Forcing conversion of input to UCS4 array
+        // If one time encoding is given, use this, else the objects property
+        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
+        case 'utf8':
+            $decoded = $this->_utf8_to_ucs4($decoded);
+            break;
+        case 'ucs4_string':
+            $decoded = $this->_ucs4_string_to_ucs4($decoded);
+        case 'ucs4_array': // No break; before this line. Catch case, but do nothing
+            break;
+        default:
+            throw new InvalidArgumentException('Unsupported input format');
+        }
+
+        // No input, no output, what else did you expect?
+        if (empty($decoded)) return '';
+
+        // Anchors for iteration
+        $last_begin = 0;
+        // Output string
+        $output = '';
+
+        foreach ($decoded as $k => $v) {
+            // Make sure to use just the plain dot
+            switch($v) {
+            case 0x3002:
+            case 0xFF0E:
+            case 0xFF61:
+                $decoded[$k] = 0x2E;
+                // It's right, no break here
+                // The codepoints above have to be converted to dots anyway
+
+            // Stumbling across an anchoring character
+            case 0x2E:
+            case 0x2F:
+            case 0x3A:
+            case 0x3F:
+            case 0x40:
+                // Neither email addresses nor URLs allowed in strict mode
+                if ($this->_strict_mode) {
+                    throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.');
+                }
+                // Skip first char
+                if ($k) {
+                    $encoded = '';
+                    $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
+                    if ($encoded) {
+                        $output .= $encoded;
+                    } else {
+                        $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
+                    }
+                    $output .= chr($decoded[$k]);
+                }
+                $last_begin = $k + 1;
+            }
+        }
+        // Catch the rest of the string
+        if ($last_begin) {
+            $inp_len = sizeof($decoded);
+            $encoded = '';
+            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
+            if ($encoded) {
+                $output .= $encoded;
+            } else {
+                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
+            }
+            return $output;
+        }
+
+        if ($output = $this->_encode($decoded)) {
+            return $output;
+        }
+
+        return $this->_ucs4_to_utf8($decoded);
+    }
+
+    /**
+     * Decode a given ACE domain name.
+     *
+     * @param string $input             Domain name (ACE string)
+     * @param string $one_time_encoding Desired output encoding, see {@link set_parameter}
+     *
+     * @return string                   Decoded Domain name (UTF-8 or UCS-4)
+     * @throws Exception
+     * @access public
+     */
+    public function decode($input, $one_time_encoding = false)
+    {
+        // Optionally set
+        if ($one_time_encoding) {
+            switch ($one_time_encoding) {
+            case 'utf8':
+            case 'ucs4_string':
+            case 'ucs4_array':
+                break;
+            default:
+                throw new InvalidArgumentException('Unknown encoding '.$one_time_encoding);
+            }
+        }
+        // Make sure to drop any newline characters around
+        $input = trim($input);
+
+        // Negotiate input and try to determine, whether it is a plain string,
+        // an email address or something like a complete URL
+        if (strpos($input, '@')) { // Maybe it is an email address
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
+            }
+            list($email_pref, $input) = explode('@', $input, 2);
+            $arr = explode('.', $input);
+            foreach ($arr as $k => $v) {
+                $conv = $this->_decode($v);
+                if ($conv) $arr[$k] = $conv;
+            }
+            $return = $email_pref . '@' . join('.', $arr);
+        } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
+            }
+
+            $parsed = parse_url($input);
+            if (isset($parsed['host'])) {
+                $arr = explode('.', $parsed['host']);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    if ($conv) $arr[$k] = $conv;
+                }
+                $parsed['host'] = join('.', $arr);
+                if (isset($parsed['scheme'])) {
+                    $parsed['scheme'] .= (strtolower($parsed['scheme']) == 'mailto') ? ':' : '://';
+                }
+                $return = $this->_unparse_url($parsed);
+            } else { // parse_url seems to have failed, try without it
+                $arr = explode('.', $input);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    if ($conv) $arr[$k] = $conv;
+                }
+                $return = join('.', $arr);
+            }
+        } else { // Otherwise we consider it being a pure domain name string
+            $return = $this->_decode($input);
+        }
+        // The output is UTF-8 by default, other output formats need conversion here
+        // If one time encoding is given, use this, else the objects property
+        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
+        case 'utf8':
+            return $return;
+            break;
+        case 'ucs4_string':
+            return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
+            break;
+        case 'ucs4_array':
+            return $this->_utf8_to_ucs4($return);
+            break;
+        default:
+            throw new InvalidArgumentException('Unsupported output format');
+        }
+    }
+
+
+    // {{{ private
+    /**
+     * Opposite function to parse_url()
+     *
+     * Inspired by code from comments of php.net-documentation for parse_url()
+     *
+     * @param array $parts_arr parts (strings) as returned by parse_url()
+     *
+     * @return string
+     * @access private
+     */
+    private function _unparse_url($parts_arr)
+    {
+        if (!empty($parts_arr['scheme'])) {
+            $ret_url = $parts_arr['scheme'];
+        }
+        if (!empty($parts_arr['user'])) {
+            $ret_url .= $parts_arr['user'];
+            if (!empty($parts_arr['pass'])) {
+                $ret_url .= ':' . $parts_arr['pass'];
+            }
+            $ret_url .= '@';
+        }
+        $ret_url .= $parts_arr['host'];
+        if (!empty($parts_arr['port'])) {
+            $ret_url .= ':' . $parts_arr['port'];
+        }
+        $ret_url .= $parts_arr['path'];
+        if (!empty($parts_arr['query'])) {
+            $ret_url .= '?' . $parts_arr['query'];
+        }
+        if (!empty($parts_arr['fragment'])) {
+            $ret_url .= '#' . $parts_arr['fragment'];
+        }
+        return $ret_url;
+    }
+
+    /**
+     * The actual encoding algorithm.
+     *
+     * @param string $decoded Decoded string which should be encoded
+     *
+     * @return string         Encoded string
+     * @throws Exception
+     * @access private
+     */
+    private function _encode($decoded)
+    {
+        // We cannot encode a domain name containing the Punycode prefix
+        $extract = self::_byteLength($this->_punycode_prefix);
+        $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
+        $check_deco = array_slice($decoded, 0, $extract);
+
+        if ($check_pref == $check_deco) {
+            throw new InvalidArgumentException('This is already a punycode string');
+        }
+
+        // We will not try to encode strings consisting of basic code points only
+        $encodable = false;
+        foreach ($decoded as $k => $v) {
+            if ($v > 0x7a) {
+                $encodable = true;
+                break;
+            }
+        }
+        if (!$encodable) {
+            if ($this->_strict_mode) {
+                throw new InvalidArgumentException('The given string does not contain encodable chars');
+            }
+
+            return false;
+        }
+
+        // Do NAMEPREP
+        $decoded = $this->_nameprep($decoded);
+
+        $deco_len = count($decoded);
+
+        // Empty array
+        if (!$deco_len) {
+            return false;
+        }
+
+        // How many chars have been consumed
+        $codecount = 0;
+
+        // Start with the prefix; copy it to output
+        $encoded = $this->_punycode_prefix;
+
+        $encoded = '';
+        // Copy all basic code points to output
+        for ($i = 0; $i < $deco_len; ++$i) {
+            $test = $decoded[$i];
+            // Will match [0-9a-zA-Z-]
+            if ((0x2F < $test && $test < 0x40)
+                || (0x40 < $test && $test < 0x5B)
+                || (0x60 < $test && $test <= 0x7B)
+                || (0x2D == $test)
+            ) {
+                $encoded .= chr($decoded[$i]);
+                $codecount++;
+            }
+        }
+
+        // All codepoints were basic ones
+        if ($codecount == $deco_len) {
+            return $encoded;
+        }
+
+        // Start with the prefix; copy it to output
+        $encoded = $this->_punycode_prefix . $encoded;
+
+        // If we have basic code points in output, add an hyphen to the end
+        if ($codecount) {
+            $encoded .= '-';
+        }
+
+        // Now find and encode all non-basic code points
+        $is_first  = true;
+        $cur_code  = $this->_initial_n;
+        $bias      = $this->_initial_bias;
+        $delta     = 0;
+
+        while ($codecount < $deco_len) {
+            // Find the smallest code point >= the current code point and
+            // remember the last ouccrence of it in the input
+            for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
+                if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
+                    $next_code = $decoded[$i];
+                }
+            }
+
+            $delta += ($next_code - $cur_code) * ($codecount + 1);
+            $cur_code = $next_code;
+
+            // Scan input again and encode all characters whose code point is $cur_code
+            for ($i = 0; $i < $deco_len; $i++) {
+                if ($decoded[$i] < $cur_code) {
+                    $delta++;
+                } else if ($decoded[$i] == $cur_code) {
+                    for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
+                        $t = ($k <= $bias)?
+                            $this->_tmin :
+                            (($k >= $bias + $this->_tmax)? $this->_tmax : $k - $bias);
+
+                        if ($q < $t) {
+                            break;
+                        }
+
+                        $encoded .= $this->_encodeDigit(ceil($t + (($q - $t) % ($this->_base - $t))));
+                        $q = ($q - $t) / ($this->_base - $t);
+                    }
+
+                    $encoded .= $this->_encodeDigit($q);
+                    $bias = $this->_adapt($delta, $codecount + 1, $is_first);
+                    $codecount++;
+                    $delta = 0;
+                    $is_first = false;
+                }
+            }
+
+            $delta++;
+            $cur_code++;
+        }
+
+        return $encoded;
+    }
+
+    /**
+     * The actual decoding algorithm.
+     *
+     * @param string $encoded Encoded string which should be decoded
+     *
+     * @return string         Decoded string
+     * @throws Exception
+     * @access private
+     */
+    private function _decode($encoded)
+    {
+        // We do need to find the Punycode prefix
+        if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
+            return false;
+        }
+
+        $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
+
+        // If nothing left after removing the prefix, it is hopeless
+        if (!$encode_test) {
+            return false;
+        }
+
+        // Find last occurrence of the delimiter
+        $delim_pos = strrpos($encoded, '-');
+
+        if ($delim_pos > self::_byteLength($this->_punycode_prefix)) {
+            for ($k = self::_byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
+                $decoded[] = ord($encoded{$k});
+            }
+        } else {
+            $decoded = array();
+        }
+
+        $deco_len = count($decoded);
+        $enco_len = self::_byteLength($encoded);
+
+        // Wandering through the strings; init
+        $is_first = true;
+        $bias     = $this->_initial_bias;
+        $idx      = 0;
+        $char     = $this->_initial_n;
+
+        for ($enco_idx = ($delim_pos)? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
+            for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
+                $digit = $this->_decodeDigit($encoded{$enco_idx++});
+                $idx += $digit * $w;
+
+                $t = ($k <= $bias) ?
+                    $this->_tmin :
+                    (($k >= $bias + $this->_tmax)? $this->_tmax : ($k - $bias));
+
+                if ($digit < $t) {
+                    break;
+                }
+
+                $w = (int)($w * ($this->_base - $t));
+            }
+
+            $bias      = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
+            $is_first  = false;
+            $char     += (int) ($idx / ($deco_len + 1));
+            $idx      %= ($deco_len + 1);
+
+            if ($deco_len > 0) {
+                // Make room for the decoded char
+                for ($i = $deco_len; $i > $idx; $i--) {
+                    $decoded[$i] = $decoded[($i - 1)];
+                }
+            }
+
+            $decoded[$idx++] = $char;
+        }
+
+        return $this->_ucs4_to_utf8($decoded);
+    }
+
+    /**
+     * Adapt the bias according to the current code point and position.
+     *
+     * @param int     $delta    ...
+     * @param int     $npoints  ...
+     * @param boolean $is_first ...
+     *
+     * @return int
+     * @access private
+     */
+    private function _adapt($delta, $npoints, $is_first)
+    {
+        $delta = (int) ($is_first ? ($delta / $this->_damp) : ($delta / 2));
+        $delta += (int) ($delta / $npoints);
+
+        for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
+            $delta = (int) ($delta / ($this->_base - $this->_tmin));
+        }
+
+        return (int) ($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
+    }
+
+    /**
+     * Encoding a certain digit.
+     *
+     * @param int $d One digit to encode
+     *
+     * @return char  Encoded digit
+     * @access private
+     */
+    private function _encodeDigit($d)
+    {
+        return chr($d + 22 + 75 * ($d < 26));
+    }
+
+    /**
+     * Decode a certain digit.
+     *
+     * @param char $cp One digit (character) to decode
+     *
+     * @return int     Decoded digit
+     * @access private
+     */
+    private function _decodeDigit($cp)
+    {
+        $cp = ord($cp);
+        return ($cp - 48 < 10)? $cp - 22 : (($cp - 65 < 26)? $cp - 65 : (($cp - 97 < 26)? $cp - 97 : $this->_base));
+    }
+
+    /**
+     * Do Nameprep according to RFC3491 and RFC3454.
+     *
+     * @param array $input Unicode Characters
+     *
+     * @return string      Unicode Characters, Nameprep'd
+     * @throws Exception
+     * @access private
+     */
+    private function _nameprep($input)
+    {
+        $output = array();
+
+        // Walking through the input array, performing the required steps on each of
+        // the input chars and putting the result into the output array
+        // While mapping required chars we apply the canonical ordering
+
+        foreach ($input as $v) {
+            // Map to nothing == skip that code point
+            if (in_array($v, self::$_np_map_nothing)) {
+                continue;
+            }
+
+            // Try to find prohibited input
+            if (in_array($v, self::$_np_prohibit) || in_array($v, self::$_general_prohibited)) {
+                throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
+            }
+
+            foreach (self::$_np_prohibit_ranges as $range) {
+                if ($range[0] <= $v && $v <= $range[1]) {
+                    throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
+                }
+            }
+
+            // Hangul syllable decomposition
+            if (0xAC00 <= $v && $v <= 0xD7AF) {
+                foreach ($this->_hangulDecompose($v) as $out) {
+                    $output[] = $out;
+                }
+            } else if (($this->_version == '2003') && isset(self::$_np_replacemaps[$v])) {
+                // There's a decomposition mapping for that code point
+                // Decompositions only in version 2003 (original) of IDNA
+                foreach ($this->_applyCannonicalOrdering(self::$_np_replacemaps[$v]) as $out) {
+                    $output[] = $out;
+                }
+            } else {
+                $output[] = $v;
+            }
+        }
+
+        // Combine code points
+
+        $last_class   = 0;
+        $last_starter = 0;
+        $out_len      = count($output);
+
+        for ($i = 0; $i < $out_len; ++$i) {
+            $class = $this->_getCombiningClass($output[$i]);
+
+            if ((!$last_class || $last_class != $class) && $class) {
+                // Try to match
+                $seq_len = $i - $last_starter;
+                $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
+
+                // On match: Replace the last starter with the composed character and remove
+                // the now redundant non-starter(s)
+                if ($out) {
+                    $output[$last_starter] = $out;
+
+                    if (count($out) != $seq_len) {
+                        for ($j = $i + 1; $j < $out_len; ++$j) {
+                            $output[$j - 1] = $output[$j];
+                        }
+
+                        unset($output[$out_len]);
+                    }
+
+                    // Rewind the for loop by one, since there can be more possible compositions
+                    $i--;
+                    $out_len--;
+                    $last_class = ($i == $last_starter)? 0 : $this->_getCombiningClass($output[$i - 1]);
+
+                    continue;
+                }
+            }
+
+            // The current class is 0
+            if (!$class) {
+                $last_starter = $i;
+            }
+
+            $last_class = $class;
+        }
+
+        return $output;
+    }
+
+    /**
+     * Decomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
+     *
+     * @param integer $char 32bit UCS4 code point
+     *
+     * @return array        Either Hangul Syllable decomposed or original 32bit
+     *                      value as one value array
+     * @access private
+     */
+    private function _hangulDecompose($char)
+    {
+        $sindex = $char - $this->_sbase;
+
+        if ($sindex < 0 || $sindex >= $this->_scount) {
+            return array($char);
+        }
+
+        $result   = array();
+        $T        = $this->_tbase + $sindex % $this->_tcount;
+        $result[] = (int)($this->_lbase +  $sindex / $this->_ncount);
+        $result[] = (int)($this->_vbase + ($sindex % $this->_ncount) / $this->_tcount);
+
+        if ($T != $this->_tbase) {
+            $result[] = $T;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Ccomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
+     *
+     * @param array $input Decomposed UCS4 sequence
+     *
+     * @return array       UCS4 sequence with syllables composed
+     * @access private
+     */
+    private function _hangulCompose($input)
+    {
+        $inp_len = count($input);
+
+        if (!$inp_len) {
+            return array();
+        }
+
+        $result   = array();
+        $last     = $input[0];
+        $result[] = $last; // copy first char from input to output
+
+        for ($i = 1; $i < $inp_len; ++$i) {
+            $char = $input[$i];
+
+            // Find out, wether two current characters from L and V
+            $lindex = $last - $this->_lbase;
+
+            if (0 <= $lindex && $lindex < $this->_lcount) {
+                $vindex = $char - $this->_vbase;
+
+                if (0 <= $vindex && $vindex < $this->_vcount) {
+                    // create syllable of form LV
+                    $last    = ($this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount);
+                    $out_off = count($result) - 1;
+                    $result[$out_off] = $last; // reset last
+
+                    // discard char
+                    continue;
+                }
+            }
+
+            // Find out, wether two current characters are LV and T
+            $sindex = $last - $this->_sbase;
+
+            if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount) == 0) {
+                $tindex = $char - $this->_tbase;
+
+                if (0 <= $tindex && $tindex <= $this->_tcount) {
+                    // create syllable of form LVT
+                    $last += $tindex;
+                    $out_off = count($result) - 1;
+                    $result[$out_off] = $last; // reset last
+
+                    // discard char
+                    continue;
+                }
+            }
+
+            // if neither case was true, just add the character
+            $last = $char;
+            $result[] = $char;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the combining class of a certain wide char.
+     *
+     * @param integer $char Wide char to check (32bit integer)
+     *
+     * @return integer      Combining class if found, else 0
+     * @access private
+     */
+    private function _getCombiningClass($char)
+    {
+        return isset(self::$_np_norm_combcls[$char])? self::$_np_norm_combcls[$char] : 0;
+    }
+
+    /**
+     * Apllies the canonical ordering of a decomposed UCS4 sequence.
+     *
+     * @param array $input Decomposed UCS4 sequence
+     *
+     * @return array       Ordered USC4 sequence
+     * @access private
+     */
+    private function _applyCannonicalOrdering($input)
+    {
+        $swap = true;
+        $size = count($input);
+
+        while ($swap) {
+            $swap = false;
+            $last = $this->_getCombiningClass($input[0]);
+
+            for ($i = 0; $i < $size - 1; ++$i) {
+                $next = $this->_getCombiningClass($input[$i + 1]);
+
+                if ($next != 0 && $last > $next) {
+                    // Move item leftward until it fits
+                    for ($j = $i + 1; $j > 0; --$j) {
+                        if ($this->_getCombiningClass($input[$j - 1]) <= $next) {
+                            break;
+                        }
+
+                        $t = $input[$j];
+                        $input[$j] = $input[$j - 1];
+                        $input[$j - 1] = $t;
+                        $swap = 1;
+                    }
+
+                    // Reentering the loop looking at the old character again
+                    $next = $last;
+                }
+
+                $last = $next;
+            }
+        }
+
+        return $input;
+    }
+
+    /**
+     * Do composition of a sequence of starter and non-starter.
+     *
+     * @param array $input UCS4 Decomposed sequence
+     *
+     * @return array       Ordered USC4 sequence
+     * @access private
+     */
+    private function _combine($input)
+    {
+        $inp_len = count($input);
+
+        // Is it a Hangul syllable?
+        if (1 != $inp_len) {
+            $hangul = $this->_hangulCompose($input);
+
+            // This place is probably wrong
+            if (count($hangul) != $inp_len) {
+                return $hangul;
+            }
+        }
+
+        foreach (self::$_np_replacemaps as $np_src => $np_target) {
+            if ($np_target[0] != $input[0]) {
+                continue;
+            }
+
+            if (count($np_target) != $inp_len) {
+                continue;
+            }
+
+            $hit = false;
+
+            foreach ($input as $k2 => $v2) {
+                if ($v2 == $np_target[$k2]) {
+                    $hit = true;
+                } else {
+                    $hit = false;
+                    break;
+                }
+            }
+
+            if ($hit) {
+                return $np_src;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * This converts an UTF-8 encoded string to its UCS-4 (array) representation
+     * By talking about UCS-4 we mean arrays of 32bit integers representing
+     * each of the "chars". This is due to PHP not being able to handle strings with
+     * bit depth different from 8. This applies to the reverse method _ucs4_to_utf8(), too.
+     * The following UTF-8 encodings are supported:
+     *
+     * bytes bits  representation
+     * 1        7  0xxxxxxx
+     * 2       11  110xxxxx 10xxxxxx
+     * 3       16  1110xxxx 10xxxxxx 10xxxxxx
+     * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     *
+     * Each x represents a bit that can be used to store character data.
+     *
+     * @param string $input utf8-encoded string
+     *
+     * @return array        ucs4-encoded array
+     * @throws Exception
+     * @access private
+     */
+    private function _utf8_to_ucs4($input)
+    {
+        $output = array();
+        $out_len = 0;
+        $inp_len = self::_byteLength($input, '8bit');
+        $mode = 'next';
+        $test = 'none';
+        for ($k = 0; $k < $inp_len; ++$k) {
+            $v = ord($input{$k}); // Extract byte from input string
+
+            if ($v < 128) { // We found an ASCII char - put into string as is
+                $output[$out_len] = $v;
+                ++$out_len;
+                if ('add' == $mode) {
+                    throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
+                }
+                continue;
+            }
+            if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
+                $start_byte = $v;
+                $mode = 'add';
+                $test = 'range';
+                if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
+                    $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
+                    $v = ($v - 192) << 6;
+                } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 1;
+                    $v = ($v - 224) << 12;
+                } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 2;
+                    $v = ($v - 240) << 18;
+                } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 3;
+                    $v = ($v - 248) << 24;
+                } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 4;
+                    $v = ($v - 252) << 30;
+                } else {
+                    throw new UnexpectedValueException('This might be UTF-8, but I don\'t understand it at byte '.$k);
+                }
+                if ('add' == $mode) {
+                    $output[$out_len] = (int) $v;
+                    ++$out_len;
+                    continue;
+                }
+            }
+            if ('add' == $mode) {
+                if (!$this->_allow_overlong && $test == 'range') {
+                    $test = 'none';
+                    if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
+                        throw new OutOfRangeException('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
+                    }
+                }
+                if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
+                    $v = ($v - 128) << ($next_byte * 6);
+                    $output[($out_len - 1)] += $v;
+                    --$next_byte;
+                } else {
+                    throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
+                }
+                if ($next_byte < 0) {
+                    $mode = 'next';
+                }
+            }
+        } // for
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 array into UTF-8 string
+     *
+     * @param array $input ucs4-encoded array
+     *
+     * @return string      utf8-encoded string
+     * @throws Exception
+     * @access private
+     */
+    private function _ucs4_to_utf8($input)
+    {
+        $output = '';
+
+        foreach ($input as $v) {
+            // $v = ord($v);
+
+            if ($v < 128) {
+                // 7bit are transferred literally
+                $output .= chr($v);
+            } else if ($v < 1 << 11) {
+                // 2 bytes
+                $output .= chr(192 + ($v >> 6))
+                    . chr(128 + ($v & 63));
+            } else if ($v < 1 << 16) {
+                // 3 bytes
+                $output .= chr(224 + ($v >> 12))
+                    . chr(128 + (($v >> 6) & 63))
+                    . chr(128 + ($v & 63));
+            } else if ($v < 1 << 21) {
+                // 4 bytes
+                $output .= chr(240 + ($v >> 18))
+                    . chr(128 + (($v >> 12) & 63))
+                    . chr(128 + (($v >>  6) & 63))
+                    . chr(128 + ($v & 63));
+            } else if ($v < 1 << 26) {
+                // 5 bytes
+                $output .= chr(248 + ($v >> 24))
+                    . chr(128 + (($v >> 18) & 63))
+                    . chr(128 + (($v >> 12) & 63))
+                    . chr(128 + (($v >>  6) & 63))
+                    . chr(128 + ($v & 63));
+            } else if ($v < 1 << 31) {
+                // 6 bytes
+                $output .= chr(252 + ($v >> 30))
+                    . chr(128 + (($v >> 24) & 63))
+                    . chr(128 + (($v >> 18) & 63))
+                    . chr(128 + (($v >> 12) & 63))
+                    . chr(128 + (($v >>  6) & 63))
+                    . chr(128 + ($v & 63));
+            } else {
+                throw new UnexpectedValueException('Conversion from UCS-4 to UTF-8 failed: malformed input');
+            }
+        }
+
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 array into UCS-4 string
+     *
+     * @param array $input ucs4-encoded array
+     *
+     * @return string      ucs4-encoded string
+     * @throws Exception
+     * @access private
+     */
+    private function _ucs4_to_ucs4_string($input)
+    {
+        $output = '';
+        // Take array values and split output to 4 bytes per value
+        // The bit mask is 255, which reads &11111111
+        foreach ($input as $v) {
+            $output .= ($v & (255 << 24) >> 24) . ($v & (255 << 16) >> 16) . ($v & (255 << 8) >> 8) . ($v & 255);
+        }
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 string into UCS-4 array
+     *
+     * @param string $input ucs4-encoded string
+     *
+     * @return array        ucs4-encoded array
+     * @throws InvalidArgumentException
+     * @access private
+     */
+    private function _ucs4_string_to_ucs4($input)
+    {
+        $output = array();
+
+        $inp_len = self::_byteLength($input);
+        // Input length must be dividable by 4
+        if ($inp_len % 4) {
+            throw new InvalidArgumentException('Input UCS4 string is broken');
+        }
+
+        // Empty input - return empty output
+        if (!$inp_len) {
+            return $output;
+        }
+
+        for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
+            // Increment output position every 4 input bytes
+            if (!$i % 4) {
+                $out_len++;
+                $output[$out_len] = 0;
+            }
+            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
+        }
+        return $output;
+    }
+
+    /**
+     * Echo hex representation of UCS4 sequence.
+     *
+     * @param array   $input       UCS4 sequence
+     * @param boolean $include_bit Include bitmask in output
+     *
+     * @return void
+     * @static
+     * @access private
+     */
+    private static function _showHex($input, $include_bit = false)
+    {
+        foreach ($input as $k => $v) {
+            echo '[', $k, '] => ', sprintf('%X', $v);
+
+            if ($include_bit) {
+                echo ' (', Net_IDNA2::_showBitmask($v), ')';
+            }
+
+            echo "\n";
+        }
+    }
+
+    /**
+     * Gives you a bit representation of given Byte (8 bits), Word (16 bits) or DWord (32 bits)
+     * Output width is automagically determined
+     *
+     * @param int $octet ...
+     *
+     * @return string    Bitmask-representation
+     * @static
+     * @access private
+     */
+    private static function _showBitmask($octet)
+    {
+        if ($octet >= (1 << 16)) {
+            $w = 31;
+        } else if ($octet >= (1 << 8)) {
+            $w = 15;
+        } else {
+            $w = 7;
+        }
+
+        $return = '';
+
+        for ($i = $w; $i > -1; $i--) {
+            $return .= ($octet & (1 << $i))? '1' : '0';
+        }
+
+        return $return;
+    }
+
+    /**
+     * Gets the length of a string in bytes even if mbstring function
+     * overloading is turned on
+     *
+     * @param string $string the string for which to get the length.
+     *
+     * @return integer the length of the string in bytes.
+     *
+     * @see Net_IDNA2::$_mb_string_overload
+     */
+    private static function _byteLength($string)
+    {
+        if (self::$_mb_string_overload) {
+            return mb_strlen($string, '8bit');
+        }
+        return strlen((binary)$string);
+    }
+
+    // }}}}
+
+    // {{{ factory
+    /**
+     * Attempts to return a concrete IDNA instance for either php4 or php5.
+     *
+     * @param array $params Set of paramaters
+     *
+     * @return Net_IDNA2
+     * @access public
+     */
+    public static function getInstance($params = array())
+    {
+        return new Net_IDNA2($params);
+    }
+    // }}}
+
+    // {{{ singleton
+    /**
+     * Attempts to return a concrete IDNA instance for either php4 or php5,
+     * only creating a new instance if no IDNA instance with the same
+     * parameters currently exists.
+     *
+     * @param array $params Set of parameters
+     *
+     * @return object Net_IDNA2
+     * @access public
+     */
+    public static function singleton($params = array())
+    {
+        static $instances;
+        if (!isset($instances)) {
+            $instances = array();
+        }
+
+        $signature = serialize($params);
+        if (!isset($instances[$signature])) {
+            $instances[$signature] = Net_IDNA2::getInstance($params);
+        }
+
+        return $instances[$signature];
+    }
+    // }}}
+}
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/Net/IDNA2/Exception.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,4 @@
+<?php
+class Net_IDNA2_Exception extends Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/Net/IDNA2/Exception/Nameprep.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+<?php
+require_once 'Net/IDNA2/Exception.php';
+
+class Net_IDNA2_Exception_Nameprep extends Net_IDNA2_Exception
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,40 @@
+# Net_IDNA2 - Punycode encoding and decoding
+
+[![Build Status](https://travis-ci.org/pear/Net_IDNA2.svg?branch=trunk)](https://travis-ci.org/pear/Net_IDNA2)
+    
+
+This package helps you to encode and decode punycode strings easily.	
+
+[Homepage](http://pear.php.net/package/XML_Util/)
+
+
+## Installation
+For a PEAR installation that downloads from the PEAR channel:
+
+`$ pear install pear/net_idna2`
+
+For a PEAR installation from a previously downloaded tarball:
+
+`$ pear install Net_IDNA2-*.tgz`
+
+For a PEAR installation from a code clone:
+
+`$ pear install package.xml`
+
+For a local composer installation:
+
+`$ composer install`
+
+To add as a dependency to your composer-managed application:
+
+`$composer require pear/net_idna2`
+
+
+## Tests
+Run  the tests from a local composer installation:
+
+`$ ./vendor/bin/phpunit`
+
+
+## License
+LGPL license
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,36 @@
+{
+    "authors": [
+        {
+            "email": "pear.neufeind@speedpartner.de",
+            "name": "Stefan Neufeind",
+            "role": "Lead"
+        },
+        {
+            "email": "daniel.oconnor@gmail.com",
+            "name": "Daniel O'Connor",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Net": "./"
+        }
+    },
+    "description": "More info available on: https://pear.php.net/package/Net_IDNA2",
+    "include-path": [
+        "./"
+    ],
+    "license": "LGPL",
+    "name": "pear/net_idna2",
+    "support": {
+        "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_IDNA2",
+        "source": "https://github.com/pear/Net_IDNA2"
+    },
+    "type": "library",
+    "require": {
+        "pear/pear_exception": "@stable"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^4"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.1" version="2.0" xmlns="https://pear.php.net/dtd/package-2.0" xmlns:tasks="https://pear.php.net/dtd/tasks-1.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://pear.php.net/dtd/tasks-1.0 https://pear.php.net/dtd/tasks-1.0.xsd https://pear.php.net/dtd/package-2.0 https://pear.php.net/dtd/package-2.0.xsd">
+ <name>Net_IDNA2</name>
+ <channel>pear.php.net</channel>
+ <summary>Punycode encoding and decoding.</summary>
+ <description>This package helps you to encode and decode punycode strings easily.</description>
+ <lead>
+  <name>Stefan Neufeind</name>
+  <user>neufeind</user>
+  <email>pear.neufeind@speedpartner.de</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Daniel O&apos;Connor</name>
+  <user>doconnor</user>
+  <email>daniel.oconnor@gmail.com</email>
+  <active>no</active>
+ </lead>
+ <date>2017-03-06</date>
+ <time>14:40:00</time>
+ <version>
+  <release>0.2.0</release>
+  <api>0.2.0</api>
+ </version>
+ <stability>
+  <release>beta</release>
+  <api>beta</api>
+ </stability>
+ <license uri="https://www.gnu.org/copyleft/lesser.html">LGPL</license>
+ <notes>
+* Set minimum PHP version to 5.4.0
+* Set minimum PEAR version to 1.10.1
+
+* Bug #19375: Add static to the fuction getInstance
+* Bug #21123: Signing the source package
+ </notes>
+ <contents>
+  <dir baseinstalldir="/" name="/">
+   <file baseinstalldir="/" name="Net/IDNA2.php" role="php" />
+   <file baseinstalldir="/" name="Net/IDNA2/Exception.php" role="php" />
+   <file baseinstalldir="/" name="Net/IDNA2/Exception/Nameprep.php" role="php" />
+   <file baseinstalldir="/" name="tests/Net_IDNA2Test.php" role="test" />
+   <file baseinstalldir="/" name="tests/draft-josefsson-idn-test-vectors.php" role="test" />
+  </dir>
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.10.1</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+ <phprelease />
+ <changelog>
+
+  <release>
+   <version>
+    <release>0.1.0</release>
+    <api>0.1.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2010-06-03</date>
+   <license uri="https://www.gnu.org/copyleft/lesser.html">LGPL</license>
+   <notes>
+QA Release
+Bug #17430 	Multiple Net_IDNA class declarations
+Warning: This package is now split between Net_IDNA (php4) and Net_IDNA2 (php5)
+   </notes>
+  </release>
+
+  <release>
+   <version>
+    <release>0.2.0</release>
+    <api>0.2.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2017-03-06</date>
+   <license uri="https://www.gnu.org/copyleft/lesser.html">LGPL</license>
+   <notes>
+* Set minimum PHP version to 5.4.0
+* Set minimum PEAR version to 1.10.1
+
+* Bug #19375: Add static to the fuction getInstance
+* Bug #21123: Signing the source package
+   </notes>
+  </release>
+
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/phpunit.xml.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+<phpunit bootstrap="vendor/autoload.php"
+         cacheTokens="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         stopOnError="false"
+         stopOnFailure="false"
+         stopOnIncomplete="false"
+         stopOnSkipped="false">
+
+    <testsuites>
+        <testsuite name="Test Suite">
+            <directory suffix=".php">tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory suffix=".php">Net/</directory>
+        </whitelist>
+    </filter>
+
+    <logging>
+        <log type="coverage-clover" target="build/logs/clover.xml"/>
+        <log type="coverage-html" target="build/coverage/"/>
+    </logging>
+
+</phpunit>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/tests/Net_IDNA2Test.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,67 @@
+<?php
+require_once 'Net/IDNA2.php';
+
+class Net_IDNA2Test extends PHPUnit_Framework_TestCase
+{
+    /**
+     * Initialise tests
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        $this->idn = new Net_IDNA2();
+    }
+
+    /**
+     * Test if a complete URL consisting also of port-number etc. will be decoded just fine, test 1
+     *
+     * @return void
+     */
+    public function testShouldDecodePortNumbersFragmentsAndUrisCorrectly1()
+    {
+        $result = $this->idn->decode('http://www.xn--ml-6kctd8d6a.org:8080/test.php?arg1=1&arg2=2#fragment');
+        $this->assertSame("http://www.\xD0\xB5\xD1\x85\xD0\xB0m\xD1\x80l\xD0\xB5.org:8080/test.php?arg1=1&arg2=2#fragment", $result);
+    }
+
+    /**
+     * Test if a complete URL consisting also of port-number etc. will be decoded just fine, test 2
+     *
+     * @return void
+     */
+    public function testShouldDecodePortNumbersFragmentsAndUrisCorrectly2()
+    {
+        $result = $this->idn->decode('http://xn--tst-qla.example.com:8080/test.php?arg1=1&arg2=2#fragment');
+        $this->assertSame("http://täst.example.com:8080/test.php?arg1=1&arg2=2#fragment", $result);
+    }
+
+    /**
+     * Test encoding of German letter Eszett according to the original standard (IDNA2003)
+     *
+     * @return void
+     */
+    public function testEncodingForGermanEszettUsingIDNA2003()
+    {
+        // make sure to use 2003-encoding
+        $this->idn->setParams('version', '2003');
+        $result = $this->idn->encode('http://www.straße.example.com/');
+
+        $this->assertSame("http://www.strasse.example.com/", $result);
+    }
+
+    /**
+     * Test encoding of German letter Eszett according to the "new" standard (IDNA2005/IDNAbis)
+     *
+     * @return void
+     */
+    public function testEncodingForGermanEszettUsingIDNA2008()
+    {
+        // make sure to use 2008-encoding
+        $this->idn->setParams('version', '2008');
+        $result = $this->idn->encode('http://www.straße.example.com/');
+        // switch back for other testcases
+        $this->idn->setParams('version', '2003');
+
+        $this->assertSame("http://www.xn--strae-oqa.example.com/", $result);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_idna2/tests/draft-josefsson-idn-test-vectors.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,445 @@
+<?php
+require_once 'Net/IDNA2.php';
+
+// Test cases from https://www.gnu.org/software/libidn/draft-josefsson-idn-test-vectors.html
+
+define('IDNA_ACE_PREFIX', 'xn--');
+
+class IDNATest extends PHPUnit_Framework_TestCase {
+
+    public function setUp() {
+        $this->idn = new Net_IDNA2();
+    }
+
+    static function unichr($chr) {
+        return mb_convert_encoding('&#' . intval($chr) . ';', 'UTF-8', 'HTML-ENTITIES');
+    }
+
+    private function hexarray2string($arr) {
+        return implode('', array_map(array('self', 'unichr'), $arr));
+    }
+
+    public function testDecode1() {
+        // Arabic (Egyptian)
+        $expected = $this->hexarray2string(array(
+            0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643,
+	        0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A,
+	        0x061F
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."egbpdaj6bu4bxfgehfvwxn");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode2() {
+        // Chinese (simplified)
+        $expected = $this->hexarray2string(array(
+            0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."ihqwcrb4cv8a8dqg056pqjye");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode3() {
+        // Chinese (traditional)
+        $expected = $this->hexarray2string(array(
+            0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."ihqwctvzc91f659drss3x8bo0yb");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode4() {
+        // Czech
+        $expected = $this->hexarray2string(array(
+            0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073,
+	        0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076,
+	        0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."Proprostnemluvesky-uyb24dma41a");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode5() {
+        // Hebrew
+        $expected = $this->hexarray2string(array(
+            0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5,
+	        0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9,
+	        0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."4dbcagdahymbxekheh6e0a7fei0b");
+        $this->assertSame($expected, $result);
+    }
+
+      public function testDecode6() {
+        // Hindi (Devanagari)
+        $expected = $this->hexarray2string(array(
+            0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928,
+        	0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902,
+	        0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938,
+	        0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode7() {
+        // Japanese (kanji and hiragana)
+        $expected = $this->hexarray2string(array(
+            0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E,
+        	0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044,
+        	0x306E, 0x304B
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode8() {
+        // Russian (Cyrillic)
+        $expected = $this->hexarray2string(array(
+            0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435,
+        	0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432,
+        	0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443,
+        	0x0441, 0x0441, 0x043A, 0x0438
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode9() {
+        // Spanish
+        $expected = $this->hexarray2string(array(
+            0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F,
+        	0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069,
+        	0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074,
+        	0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065,
+        	0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."PorqunopuedensimplementehablarenEspaol-fmd56a");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode10() {
+        // Vietnamese
+        $expected = $this->hexarray2string(array(
+            0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD,
+        	0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3,
+        	0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069,
+        	0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode11() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."3B-ww4c5e180e575a65lsy2b");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode12() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069,
+        	0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052,
+        	0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode13() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E,
+	        0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061,
+        	0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834,
+        	0x6240
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."Hello-Another-Way--fc4qua05auwb3674vfr0b");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode14() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."2-u9tlzr9756bt3uc0v");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode15() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069,
+        	0x3059, 0x308B, 0x0035, 0x79D2, 0x524D
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."MajiKoi5-783gue6qz075azm5e");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode16() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."de-jg4avhby1noc0d");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode17() {
+        // Japanese
+        $expected = $this->hexarray2string(array(
+            0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."d9juau41awczczp");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode18() {
+        // Greek
+        $expected = $this->hexarray2string(array(
+            0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."hxargifdar");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode19() {
+        // Maltese (Malti)
+        $expected = $this->hexarray2string(array(
+            0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
+            0x0127, 0x0061
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."bonusaa-5bb1da");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testDecode20() {
+        // Russian (Cyrillic)
+        $expected = $this->hexarray2string(array(
+            0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
+            0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
+            0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
+            0x0441, 0x0441, 0x043a, 0x0438
+	    ));
+        $result = $this->idn->decode(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l");
+        $this->assertSame($expected, $result);
+    }
+
+    public function testEncode1() {
+        // Arabic (Egyptian)
+        $idna = $this->hexarray2string(array(
+            0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643,
+	        0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A,
+	        0x061F
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."egbpdaj6bu4bxfgehfvwxn", $result);
+    }
+
+    public function testEncode2() {
+        // Chinese (simplified)
+        $idna = $this->hexarray2string(array(
+            0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."ihqwcrb4cv8a8dqg056pqjye", $result);
+    }
+
+    public function testEncode3() {
+        // Chinese (traditional)
+        $idna = $this->hexarray2string(array(
+            0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."ihqwctvzc91f659drss3x8bo0yb", $result);
+    }
+
+    public function testEncode4() {
+        // Czech
+        $idna = $this->hexarray2string(array(
+            0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073,
+	        0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076,
+	        0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."proprostnemluvesky-uyb24dma41a", $result);
+    }
+
+    public function testEncode5() {
+        // Hebrew
+        $idna = $this->hexarray2string(array(
+            0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5,
+	        0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9,
+	        0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."4dbcagdahymbxekheh6e0a7fei0b", $result);
+    }
+
+      public function testEncode6() {
+        // Hindi (Devanagari)
+        $idna = $this->hexarray2string(array(
+            0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928,
+        	0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902,
+	        0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938,
+	        0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", $result);
+    }
+
+    public function testEncode7() {
+        // Japanese (kanji and hiragana)
+        $idna = $this->hexarray2string(array(
+            0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E,
+        	0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044,
+        	0x306E, 0x304B
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", $result);
+    }
+
+    public function testEncode8() {
+        // Russian (Cyrillic)
+        $idna = $this->hexarray2string(array(
+            0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435,
+        	0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432,
+        	0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443,
+        	0x0441, 0x0441, 0x043A, 0x0438
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l", $result);
+    }
+
+    public function testEncode9() {
+        // Spanish
+        $idna = $this->hexarray2string(array(
+            0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F,
+        	0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069,
+        	0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074,
+        	0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065,
+        	0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."porqunopuedensimplementehablarenespaol-fmd56a", $result);
+    }
+
+    public function testEncode10() {
+        // Vietnamese
+        $idna = $this->hexarray2string(array(
+            0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD,
+        	0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3,
+        	0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069,
+        	0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."tisaohkhngthchnitingvit-kjcr8268qyxafd2f1b9g", $result);
+    }
+
+    public function testEncode11() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."3b-ww4c5e180e575a65lsy2b", $result);
+    }
+
+    public function testEncode12() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069,
+        	0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052,
+        	0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."-with-super-monkeys-pc58ag80a8qai00g7n9n", $result);
+    }
+
+    public function testEncode13() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E,
+	        0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061,
+        	0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834,
+        	0x6240
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."hello-another-way--fc4qua05auwb3674vfr0b", $result);
+    }
+
+    public function testEncode14() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."2-u9tlzr9756bt3uc0v", $result);
+    }
+
+    public function testEncode15() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069,
+        	0x3059, 0x308B, 0x0035, 0x79D2, 0x524D
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."majikoi5-783gue6qz075azm5e", $result);
+    }
+
+    public function testEncode16() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."de-jg4avhby1noc0d", $result);
+    }
+
+    public function testEncode17() {
+        // Japanese
+        $idna = $this->hexarray2string(array(
+            0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."d9juau41awczczp", $result);
+    }
+
+    public function testEncode18() {
+        // Greek
+        $idna = $this->hexarray2string(array(
+            0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."hxargifdar", $result);
+    }
+
+    public function testEncode19() {
+        // Maltese (Malti)
+        $idna = $this->hexarray2string(array(
+            0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
+            0x0127, 0x0061
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."bonusaa-5bb1da", $result);
+    }
+
+    public function testEncode20() {
+        // Russian (Cyrillic)
+        $idna = $this->hexarray2string(array(
+            0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
+            0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
+            0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
+            0x0441, 0x0441, 0x043a, 0x0438
+	    ));
+        $result = $this->idn->encode($idna);
+        $this->assertSame(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l", $result);
+    }
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,5 @@
+tests/config.php
+# composer related
+composer.lock
+composer.phar
+vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+language: php
+install:
+  - pear install Net_Socket PEAR Auth_SASL
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+script: cd tests && pear run-tests .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/Sieve.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1335 @@
+<?php
+/**
+ * This file contains the Net_Sieve class.
+ *
+ * PHP version 5
+ *
+ * +-----------------------------------------------------------------------+
+ * | All rights reserved.                                                  |
+ * |                                                                       |
+ * | Redistribution and use in source and binary forms, with or without    |
+ * | modification, are permitted provided that the following conditions    |
+ * | are met:                                                              |
+ * |                                                                       |
+ * | o Redistributions of source code must retain the above copyright      |
+ * |   notice, this list of conditions and the following disclaimer.       |
+ * | o Redistributions in binary form must reproduce the above copyright   |
+ * |   notice, this list of conditions and the following disclaimer in the |
+ * |   documentation and/or other materials provided with the distribution.|
+ * |                                                                       |
+ * | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+ * | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+ * | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ * | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+ * | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+ * | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+ * | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+ * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+ * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+ * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+ * +-----------------------------------------------------------------------+
+ *
+ * @category  Networking
+ * @package   Net_Sieve
+ * @author    Richard Heyes <richard@phpguru.org>
+ * @author    Damian Fernandez Sosa <damlists@cnba.uba.ar>
+ * @author    Anish Mistry <amistry@am-productions.biz>
+ * @author    Jan Schneider <jan@horde.org>
+ * @copyright 2002-2003 Richard Heyes
+ * @copyright 2006-2008 Anish Mistry
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD
+ * @link      http://pear.php.net/package/Net_Sieve
+ */
+
+require_once 'PEAR.php';
+require_once 'Net/Socket.php';
+
+/**
+ * TODO
+ *
+ * o supportsAuthMech()
+ */
+
+/**
+ * Disconnected state
+ * @const NET_SIEVE_STATE_DISCONNECTED
+ */
+define('NET_SIEVE_STATE_DISCONNECTED', 1, true);
+
+/**
+ * Authorisation state
+ * @const NET_SIEVE_STATE_AUTHORISATION
+ */
+define('NET_SIEVE_STATE_AUTHORISATION', 2, true);
+
+/**
+ * Transaction state
+ * @const NET_SIEVE_STATE_TRANSACTION
+ */
+define('NET_SIEVE_STATE_TRANSACTION', 3, true);
+
+
+/**
+ * A class for talking to the timsieved server which comes with Cyrus IMAP.
+ *
+ * @category  Networking
+ * @package   Net_Sieve
+ * @author    Richard Heyes <richard@phpguru.org>
+ * @author    Damian Fernandez Sosa <damlists@cnba.uba.ar>
+ * @author    Anish Mistry <amistry@am-productions.biz>
+ * @author    Jan Schneider <jan@horde.org>
+ * @copyright 2002-2003 Richard Heyes
+ * @copyright 2006-2008 Anish Mistry
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Net_Sieve
+ * @link      http://tools.ietf.org/html/rfc5228 RFC 5228 (Sieve: An Email
+ *            Filtering Language)
+ * @link      http://tools.ietf.org/html/rfc5804 RFC 5804 A Protocol for
+ *            Remotely Managing Sieve Scripts
+ */
+class Net_Sieve
+{
+    /**
+     * The authentication methods this class supports.
+     *
+     * Can be overwritten if having problems with certain methods.
+     *
+     * @var array
+     */
+    var $supportedAuthMethods = array(
+        'DIGEST-MD5',
+        'CRAM-MD5',
+        'EXTERNAL',
+        'PLAIN' ,
+        'LOGIN'
+    );
+
+    /**
+     * SASL authentication methods that require Auth_SASL.
+     *
+     * @var array
+     */
+    var $supportedSASLAuthMethods = array('DIGEST-MD5', 'CRAM-MD5');
+
+    /**
+     * The socket handle.
+     *
+     * @var resource
+     */
+    var $_sock;
+
+    /**
+     * Parameters and connection information.
+     *
+     * @var array
+     */
+    var $_data;
+
+    /**
+     * Current state of the connection.
+     *
+     * One of the NET_SIEVE_STATE_* constants.
+     *
+     * @var integer
+     */
+    var $_state;
+
+    /**
+     * PEAR object to avoid strict warnings.
+     *
+     * @var PEAR_Error
+     */
+    var $_pear;
+
+    /**
+     * Constructor error.
+     *
+     * @var PEAR_Error
+     */
+    var $_error;
+
+    /**
+     * Whether to enable debugging.
+     *
+     * @var boolean
+     */
+    var $_debug = false;
+
+    /**
+     * Debug output handler.
+     *
+     * This has to be a valid callback.
+     *
+     * @var string|array
+     */
+    var $_debug_handler = null;
+
+    /**
+     * Whether to pick up an already established connection.
+     *
+     * @var boolean
+     */
+    var $_bypassAuth = false;
+
+    /**
+     * Whether to use TLS if available.
+     *
+     * @var boolean
+     */
+    var $_useTLS = true;
+
+    /**
+     * Additional options for stream_context_create().
+     *
+     * @var array
+     */
+    var $_options = null;
+
+    /**
+     * Maximum number of referral loops
+     *
+     * @var array
+     */
+    var $_maxReferralCount = 15;
+
+    /**
+     * Constructor.
+     *
+     * Sets up the object, connects to the server and logs in. Stores any
+     * generated error in $this->_error, which can be retrieved using the
+     * getError() method.
+     *
+     * @param string  $user       Login username.
+     * @param string  $pass       Login password.
+     * @param string  $host       Hostname of server.
+     * @param string  $port       Port of server.
+     * @param string  $logintype  Type of login to perform (see
+     *                            $supportedAuthMethods).
+     * @param string  $euser      Effective user. If authenticating as an
+     *                            administrator, login as this user.
+     * @param boolean $debug      Whether to enable debugging (@see setDebug()).
+     * @param string  $bypassAuth Skip the authentication phase. Useful if the
+     *                            socket is already open.
+     * @param boolean $useTLS     Use TLS if available.
+     * @param array   $options    Additional options for
+     *                            stream_context_create().
+     * @param mixed   $handler    A callback handler for the debug output.
+     */
+    function __construct($user = null, $pass  = null, $host = 'localhost',
+        $port = 2000, $logintype = '', $euser = '',
+        $debug = false, $bypassAuth = false, $useTLS = true,
+        $options = null, $handler = null
+    ) {
+        $this->_pear = new PEAR();
+        $this->_state             = NET_SIEVE_STATE_DISCONNECTED;
+        $this->_data['user']      = $user;
+        $this->_data['pass']      = $pass;
+        $this->_data['host']      = $host;
+        $this->_data['port']      = $port;
+        $this->_data['logintype'] = $logintype;
+        $this->_data['euser']     = $euser;
+        $this->_sock              = new Net_Socket();
+        $this->_bypassAuth        = $bypassAuth;
+        $this->_useTLS            = $useTLS;
+        $this->_options           = (array) $options;
+        $this->setDebug($debug, $handler);
+
+        /* Try to include the Auth_SASL package.  If the package is not
+         * available, we disable the authentication methods that depend upon
+         * it. */
+        if ((@include_once 'Auth/SASL.php') === false) {
+            $this->_debug('Auth_SASL not present');
+            $this->supportedAuthMethods = array_diff(
+                $this->supportedAuthMethods,
+                $this->supportedSASLAuthMethods
+            );
+        }
+
+        if (strlen($user) && strlen($pass)) {
+            $this->_error = $this->_handleConnectAndLogin();
+        }
+    }
+
+    /**
+     * Returns any error that may have been generated in the constructor.
+     *
+     * @return boolean|PEAR_Error  False if no error, PEAR_Error otherwise.
+     */
+    function getError()
+    {
+        return is_a($this->_error, 'PEAR_Error') ? $this->_error : false;
+    }
+
+    /**
+     * Sets the debug state and handler function.
+     *
+     * @param boolean $debug   Whether to enable debugging.
+     * @param string  $handler A custom debug handler. Must be a valid callback.
+     *
+     * @return void
+     */
+    function setDebug($debug = true, $handler = null)
+    {
+        $this->_debug = $debug;
+        $this->_debug_handler = $handler;
+    }
+
+    /**
+     * Connects to the server and logs in.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function _handleConnectAndLogin()
+    {
+        $res = $this->connect($this->_data['host'], $this->_data['port'], $this->_options, $this->_useTLS);
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        if ($this->_bypassAuth === false) {
+            $res = $this->login($this->_data['user'], $this->_data['pass'], $this->_data['logintype'], $this->_data['euser'], $this->_bypassAuth);
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Handles connecting to the server and checks the response validity.
+     *
+     * @param string  $host    Hostname of server.
+     * @param string  $port    Port of server.
+     * @param array   $options List of options to pass to
+     *                         stream_context_create().
+     * @param boolean $useTLS  Use TLS if available.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function connect($host, $port, $options = null, $useTLS = true)
+    {
+        $this->_data['host'] = $host;
+        $this->_data['port'] = $port;
+        $this->_useTLS       = $useTLS;
+
+        if (is_array($options)) {
+            $this->_options = array_merge($this->_options, $options);
+        }
+
+        if (NET_SIEVE_STATE_DISCONNECTED != $this->_state) {
+            return $this->_pear->raiseError('Not currently in DISCONNECTED state', 1);
+        }
+
+        $res = $this->_sock->connect($host, $port, false, 5, $options);
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        if ($this->_bypassAuth) {
+            $this->_state = NET_SIEVE_STATE_TRANSACTION;
+        } else {
+            $this->_state = NET_SIEVE_STATE_AUTHORISATION;
+            $res = $this->_doCmd();
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+
+        // Explicitly ask for the capabilities in case the connection is
+        // picked up from an existing connection.
+        $res = $this->_cmdCapability();
+        if (is_a($res, 'PEAR_Error')) {
+            return $this->_pear->raiseError(
+                'Failed to connect, server said: ' . $res->getMessage(), 2
+            );
+        }
+
+        // Check if we can enable TLS via STARTTLS.
+        if ($useTLS && !empty($this->_capability['starttls'])
+            && function_exists('stream_socket_enable_crypto')
+        ) {
+            $res = $this->_startTLS();
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Disconnect from the Sieve server.
+     *
+     * @param boolean $sendLogoutCMD Whether to send LOGOUT command before
+     *                               disconnecting.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function disconnect($sendLogoutCMD = true)
+    {
+        return $this->_cmdLogout($sendLogoutCMD);
+    }
+
+    /**
+     * Logs into server.
+     *
+     * @param string  $user       Login username.
+     * @param string  $pass       Login password.
+     * @param string  $logintype  Type of login method to use.
+     * @param string  $euser      Effective UID (perform on behalf of $euser).
+     * @param boolean $bypassAuth Do not perform authentication.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function login($user, $pass, $logintype = null, $euser = '', $bypassAuth = false)
+    {
+        $this->_data['user']      = $user;
+        $this->_data['pass']      = $pass;
+        $this->_data['logintype'] = $logintype;
+        $this->_data['euser']     = $euser;
+        $this->_bypassAuth        = $bypassAuth;
+
+        if (NET_SIEVE_STATE_AUTHORISATION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        if (!$bypassAuth ) {
+            $res = $this->_cmdAuthenticate($user, $pass, $logintype, $euser);
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+        $this->_state = NET_SIEVE_STATE_TRANSACTION;
+
+        return true;
+    }
+
+    /**
+     * Returns an indexed array of scripts currently on the server.
+     *
+     * @return array  Indexed array of scriptnames.
+     */
+    function listScripts()
+    {
+        if (is_array($scripts = $this->_cmdListScripts())) {
+            return $scripts[0];
+        } else {
+            return $scripts;
+        }
+    }
+
+    /**
+     * Returns the active script.
+     *
+     * @return string  The active scriptname.
+     */
+    function getActive()
+    {
+        if (is_array($scripts = $this->_cmdListScripts())) {
+            return $scripts[1];
+        }
+    }
+
+    /**
+     * Sets the active script.
+     *
+     * @param string $scriptname The name of the script to be set as active.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function setActive($scriptname)
+    {
+        return $this->_cmdSetActive($scriptname);
+    }
+
+    /**
+     * Retrieves a script.
+     *
+     * @param string $scriptname The name of the script to be retrieved.
+     *
+     * @return string  The script on success, PEAR_Error on failure.
+    */
+    function getScript($scriptname)
+    {
+        return $this->_cmdGetScript($scriptname);
+    }
+
+    /**
+     * Adds a script to the server.
+     *
+     * @param string  $scriptname Name of the script.
+     * @param string  $script     The script content.
+     * @param boolean $makeactive Whether to make this the active script.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function installScript($scriptname, $script, $makeactive = false)
+    {
+        $res = $this->_cmdPutScript($scriptname, $script);
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        if ($makeactive) {
+            return $this->_cmdSetActive($scriptname);
+        }
+        return true;
+    }
+
+    /**
+     * Removes a script from the server.
+     *
+     * @param string $scriptname Name of the script.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function removeScript($scriptname)
+    {
+        return $this->_cmdDeleteScript($scriptname);
+    }
+
+    /**
+     * Checks if the server has space to store the script by the server.
+     *
+     * @param string  $scriptname The name of the script to mark as active.
+     * @param integer $size       The size of the script.
+     *
+     * @return boolean|PEAR_Error  True if there is space, PEAR_Error otherwise.
+     *
+     * @todo Rename to hasSpace()
+     */
+    function haveSpace($scriptname, $size)
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in TRANSACTION state', 1);
+        }
+
+        $res = $this->_doCmd(sprintf('HAVESPACE %s %d', $this->_escape($scriptname), $size));
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the list of extensions the server supports.
+     *
+     * @return array  List of extensions or PEAR_Error on failure.
+     */
+    function getExtensions()
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 7);
+        }
+        return $this->_capability['extensions'];
+    }
+
+    /**
+     * Returns whether the server supports an extension.
+     *
+     * @param string $extension The extension to check.
+     *
+     * @return boolean  Whether the extension is supported or PEAR_Error on
+     *                  failure.
+     */
+    function hasExtension($extension)
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 7);
+        }
+
+        $extension = trim($this->_toUpper($extension));
+        if (is_array($this->_capability['extensions'])) {
+            foreach ($this->_capability['extensions'] as $ext) {
+                if ($ext == $extension) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns the list of authentication methods the server supports.
+     *
+     * @return array  List of authentication methods or PEAR_Error on failure.
+     */
+    function getAuthMechs()
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 7);
+        }
+        return $this->_capability['sasl'];
+    }
+
+    /**
+     * Returns whether the server supports an authentication method.
+     *
+     * @param string $method The method to check.
+     *
+     * @return boolean  Whether the method is supported or PEAR_Error on
+     *                  failure.
+     */
+    function hasAuthMech($method)
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 7);
+        }
+
+        $method = trim($this->_toUpper($method));
+        if (is_array($this->_capability['sasl'])) {
+            foreach ($this->_capability['sasl'] as $sasl) {
+                if ($sasl == $method) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Handles the authentication using any known method.
+     *
+     * @param string $uid        The userid to authenticate as.
+     * @param string $pwd        The password to authenticate with.
+     * @param string $userMethod The method to use. If empty, the class chooses
+     *                           the best (strongest) available method.
+     * @param string $euser      The effective uid to authenticate as.
+     *
+     * @return void
+     */
+    function _cmdAuthenticate($uid, $pwd, $userMethod = null, $euser = '')
+    {
+        $method = $this->_getBestAuthMethod($userMethod);
+        if (is_a($method, 'PEAR_Error')) {
+            return $method;
+        }
+        switch ($method) {
+        case 'DIGEST-MD5':
+            return $this->_authDigestMD5($uid, $pwd, $euser);
+        case 'CRAM-MD5':
+            $result = $this->_authCRAMMD5($uid, $pwd, $euser);
+            break;
+        case 'LOGIN':
+            $result = $this->_authLOGIN($uid, $pwd, $euser);
+            break;
+        case 'PLAIN':
+            $result = $this->_authPLAIN($uid, $pwd, $euser);
+            break;
+        case 'EXTERNAL':
+            $result = $this->_authEXTERNAL($uid, $pwd, $euser);
+            break;
+        default :
+            $result = $this->_pear->raiseError(
+                $method . ' is not a supported authentication method'
+            );
+            break;
+        }
+
+        $res = $this->_doCmd();
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        // Query the server capabilities again now that we are authenticated.
+        if ($this->_pear->isError($res = $this->_cmdCapability())) {
+            return $this->_pear->raiseError(
+                'Failed to connect, server said: ' . $res->getMessage(), 2
+            );
+        }
+
+        return $result;
+    }
+
+    /**
+     * Authenticates the user using the PLAIN method.
+     *
+     * @param string $user  The userid to authenticate as.
+     * @param string $pass  The password to authenticate with.
+     * @param string $euser The effective uid to authenticate as.
+     *
+     * @return void
+     */
+    function _authPLAIN($user, $pass, $euser)
+    {
+        return $this->_sendCmd(
+            sprintf(
+                'AUTHENTICATE "PLAIN" "%s"',
+                base64_encode($euser . chr(0) . $user . chr(0) . $pass)
+            )
+        );
+    }
+
+    /**
+     * Authenticates the user using the LOGIN method.
+     *
+     * @param string $user  The userid to authenticate as.
+     * @param string $pass  The password to authenticate with.
+     * @param string $euser The effective uid to authenticate as. Not used.
+     *
+     * @return void
+     */
+    function _authLOGIN($user, $pass, $euser)
+    {
+        $result = $this->_sendCmd('AUTHENTICATE "LOGIN"');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        $result = $this->_doCmd('"' . base64_encode($user) . '"', true);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        return $this->_doCmd('"' . base64_encode($pass) . '"', true);
+    }
+
+    /**
+     * Authenticates the user using the CRAM-MD5 method.
+     *
+     * @param string $user  The userid to authenticate as.
+     * @param string $pass  The password to authenticate with.
+     * @param string $euser The effective uid to authenticate as. Not used.
+     *
+     * @return void
+     */
+    function _authCRAMMD5($user, $pass, $euser)
+    {
+        $challenge = $this->_doCmd('AUTHENTICATE "CRAM-MD5"', true);
+        if (is_a($challenge, 'PEAR_Error')) {
+            return $challenge;
+        }
+
+        $auth_sasl = new Auth_SASL;
+        $cram      = $auth_sasl->factory('crammd5');
+        $challenge = base64_decode(trim($challenge));
+        $response  = $cram->getResponse($user, $pass, $challenge);
+
+        if (is_a($response, 'PEAR_Error')) {
+            return $response;
+        }
+
+        return $this->_sendStringResponse(base64_encode($response));
+    }
+
+    /**
+     * Authenticates the user using the DIGEST-MD5 method.
+     *
+     * @param string $user  The userid to authenticate as.
+     * @param string $pass  The password to authenticate with.
+     * @param string $euser The effective uid to authenticate as.
+     *
+     * @return void
+     */
+    function _authDigestMD5($user, $pass, $euser)
+    {
+        $challenge = $this->_doCmd('AUTHENTICATE "DIGEST-MD5"', true);
+        if (is_a($challenge, 'PEAR_Error')) {
+            return $challenge;
+        }
+
+        $auth_sasl = new Auth_SASL;
+        $digest    = $auth_sasl->factory('digestmd5');
+        $challenge = base64_decode(trim($challenge));
+
+        // @todo Really 'localhost'?
+        $response = $digest->getResponse($user, $pass, $challenge, 'localhost', 'sieve', $euser);
+        if (is_a($response, 'PEAR_Error')) {
+            return $response;
+        }
+
+        $result = $this->_sendStringResponse(base64_encode($response));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        $result = $this->_doCmd('', true);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        if ($this->_toUpper(substr($result, 0, 2)) == 'OK') {
+            return;
+        }
+
+        /* We don't use the protocol's third step because SIEVE doesn't allow
+         * subsequent authentication, so we just silently ignore it. */
+        $result = $this->_sendStringResponse('');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        return $this->_doCmd();
+    }
+
+    /**
+     * Authenticates the user using the EXTERNAL method.
+     *
+     * @param string $user  The userid to authenticate as.
+     * @param string $pass  The password to authenticate with.
+     * @param string $euser The effective uid to authenticate as.
+     *
+     * @return void
+     *
+     * @since  1.1.7
+     */
+    function _authEXTERNAL($user, $pass, $euser)
+    {
+        $cmd = sprintf(
+            'AUTHENTICATE "EXTERNAL" "%s"',
+            base64_encode(strlen($euser) ? $euser : $user)
+        );
+        return $this->_sendCmd($cmd);
+    }
+
+    /**
+     * Removes a script from the server.
+     *
+     * @param string $scriptname Name of the script to delete.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function _cmdDeleteScript($scriptname)
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        $res = $this->_doCmd(sprintf('DELETESCRIPT %s', $this->_escape($scriptname)));
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        return true;
+    }
+
+    /**
+     * Retrieves the contents of the named script.
+     *
+     * @param string $scriptname Name of the script to retrieve.
+     *
+     * @return string  The script if successful, PEAR_Error otherwise.
+     */
+    function _cmdGetScript($scriptname)
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        $res = $this->_doCmd(sprintf('GETSCRIPT %s', $this->_escape($scriptname)));
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        return preg_replace('/^{[0-9]+}\r\n/', '', $res);
+    }
+
+    /**
+     * Sets the active script, i.e. the one that gets run on new mail by the
+     * server.
+     *
+     * @param string $scriptname The name of the script to mark as active.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+    */
+    function _cmdSetActive($scriptname)
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        $res = $this->_doCmd(sprintf('SETACTIVE %s', $this->_escape($scriptname)));
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the list of scripts on the server.
+     *
+     * @return array  An array with the list of scripts in the first element
+     *                and the active script in the second element on success,
+     *                PEAR_Error otherwise.
+     */
+    function _cmdListScripts()
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        $res = $this->_doCmd('LISTSCRIPTS');
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        $scripts = array();
+        $activescript = null;
+        $res = explode("\r\n", $res);
+        foreach ($res as $value) {
+            if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) {
+                $script_name = stripslashes($matches[1]);
+                $scripts[] = $script_name;
+                if (!empty($matches[2])) {
+                    $activescript = $script_name;
+                }
+            }
+        }
+
+        return array($scripts, $activescript);
+    }
+
+    /**
+     * Adds a script to the server.
+     *
+     * @param string $scriptname Name of the new script.
+     * @param string $scriptdata The new script.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function _cmdPutScript($scriptname, $scriptdata)
+    {
+        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
+            return $this->_pear->raiseError('Not currently in AUTHORISATION state', 1);
+        }
+
+        $stringLength = $this->_getLineLength($scriptdata);
+        $command      = sprintf(
+            "PUTSCRIPT %s {%d+}\r\n%s",
+            $this->_escape($scriptname),
+            $stringLength,
+            $scriptdata
+        );
+
+        $res = $this->_doCmd($command);
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        return true;
+    }
+
+    /**
+     * Logs out of the server and terminates the connection.
+     *
+     * @param boolean $sendLogoutCMD Whether to send LOGOUT command before
+     *                               disconnecting.
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function _cmdLogout($sendLogoutCMD = true)
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 1);
+        }
+
+        if ($sendLogoutCMD) {
+            $res = $this->_doCmd('LOGOUT');
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+
+        $this->_sock->disconnect();
+        $this->_state = NET_SIEVE_STATE_DISCONNECTED;
+
+        return true;
+    }
+
+    /**
+     * Sends the CAPABILITY command
+     *
+     * @return boolean  True on success, PEAR_Error otherwise.
+     */
+    function _cmdCapability()
+    {
+        if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
+            return $this->_pear->raiseError('Not currently connected', 1);
+        }
+        $res = $this->_doCmd('CAPABILITY');
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        $this->_parseCapability($res);
+        return true;
+    }
+
+    /**
+     * Parses the response from the CAPABILITY command and stores the result
+     * in $_capability.
+     *
+     * @param string $data The response from the capability command.
+     *
+     * @return void
+     */
+    function _parseCapability($data)
+    {
+        // Clear the cached capabilities.
+        $this->_capability = array('sasl' => array(),
+                                   'extensions' => array());
+
+        $data = preg_split('/\r?\n/', $this->_toUpper($data), -1, PREG_SPLIT_NO_EMPTY);
+
+        for ($i = 0; $i < count($data); $i++) {
+            if (!preg_match('/^"([A-Z]+)"( "(.*)")?$/', $data[$i], $matches)) {
+                continue;
+            }
+            switch ($matches[1]) {
+            case 'IMPLEMENTATION':
+                $this->_capability['implementation'] = $matches[3];
+                break;
+
+            case 'SASL':
+                $this->_capability['sasl'] = preg_split('/\s+/', $matches[3]);
+                break;
+
+            case 'SIEVE':
+                $this->_capability['extensions'] = preg_split('/\s+/', $matches[3]);
+                break;
+
+            case 'STARTTLS':
+                $this->_capability['starttls'] = true;
+                break;
+            }
+        }
+    }
+
+    /**
+     * Sends a command to the server
+     *
+     * @param string $cmd The command to send.
+     *
+     * @return void
+     */
+    function _sendCmd($cmd)
+    {
+        $status = $this->_sock->getStatus();
+        if (is_a($status, 'PEAR_Error') || $status['eof']) {
+            return $this->_pear->raiseError('Failed to write to socket: connection lost');
+        }
+        $error = $this->_sock->write($cmd . "\r\n");
+        if (is_a($error, 'PEAR_Error')) {
+            return $this->_pear->raiseError(
+                'Failed to write to socket: ' . $error->getMessage()
+            );
+        }
+        $this->_debug("C: $cmd");
+    }
+
+    /**
+     * Sends a string response to the server.
+     *
+     * @param string $str The string to send.
+     *
+     * @return void
+     */
+    function _sendStringResponse($str)
+    {
+        return $this->_sendCmd('{' . $this->_getLineLength($str) . "+}\r\n" . $str);
+    }
+
+    /**
+     * Receives a single line from the server.
+     *
+     * @return string  The server response line.
+     */
+    function _recvLn()
+    {
+        $lastline = $this->_sock->gets(8192);
+        if (is_a($lastline, 'PEAR_Error')) {
+            return $this->_pear->raiseError(
+                'Failed to read from socket: ' . $lastline->getMessage()
+            );
+        }
+
+        $lastline = rtrim($lastline);
+        $this->_debug("S: $lastline");
+
+        if ($lastline === '') {
+            return $this->_pear->raiseError('Failed to read from socket');
+        }
+
+        return $lastline;
+    }
+
+    /**
+     * Receives a number of bytes from the server.
+     *
+     * @param integer $length Number of bytes to read.
+     *
+     * @return string The server response.
+     */
+    function _recvBytes($length)
+    {
+        $response = '';
+        $response_length = 0;
+        while ($response_length < $length) {
+            $response .= $this->_sock->read($length - $response_length);
+            $response_length = $this->_getLineLength($response);
+        }
+        $this->_debug('S: ' . rtrim($response));
+        return $response;
+    }
+
+    /**
+     * Send a command and retrieves a response from the server.
+     *
+     * @param string  $cmd  The command to send.
+     * @param boolean $auth Whether this is an authentication command.
+     *
+     * @return string|PEAR_Error Reponse string if an OK response, PEAR_Error
+     *                           if a NO response.
+     */
+    function _doCmd($cmd = '', $auth = false)
+    {
+        $referralCount = 0;
+        while ($referralCount < $this->_maxReferralCount) {
+            if (strlen($cmd)) {
+                $error = $this->_sendCmd($cmd);
+                if (is_a($error, 'PEAR_Error')) {
+                    return $error;
+                }
+            }
+
+            $response = '';
+            while (true) {
+                $line = $this->_recvLn();
+                if (is_a($line, 'PEAR_Error')) {
+                    return $line;
+                }
+
+                if (preg_match('/^(OK|NO)/i', $line, $tag)) {
+                    // Check for string literal message.
+                    if (preg_match('/{([0-9]+)}$/', $line, $matches)) {
+                        $line = substr($line, 0, -(strlen($matches[1]) + 2))
+                            . str_replace(
+                                "\r\n", ' ', $this->_recvBytes($matches[1] + 2)
+                            );
+                    }
+
+                    if ('OK' == $this->_toUpper($tag[1])) {
+                        $response .= $line;
+                        return rtrim($response);
+                    }
+
+                    return $this->_pear->raiseError(trim($response . substr($line, 2)), 3);
+                }
+
+                if (preg_match('/^BYE/i', $line)) {
+                    $error = $this->disconnect(false);
+                    if (is_a($error, 'PEAR_Error')) {
+                        return $this->_pear->raiseError(
+                            'Cannot handle BYE, the error was: '
+                            . $error->getMessage(),
+                            4
+                        );
+                    }
+                    // Check for referral, then follow it.  Otherwise, carp an
+                    // error.
+                    if (preg_match('/^bye \(referral "(sieve:\/\/)?([^"]+)/i', $line, $matches)) {
+                        // Replace the old host with the referral host
+                        // preserving any protocol prefix.
+                        $this->_data['host'] = preg_replace(
+                            '/\w+(?!(\w|\:\/\/)).*/', $matches[2],
+                            $this->_data['host']
+                        );
+                        $error = $this->_handleConnectAndLogin();
+                        if (is_a($error, 'PEAR_Error')) {
+                            return $this->_pear->raiseError(
+                                'Cannot follow referral to '
+                                . $this->_data['host'] . ', the error was: '
+                                . $error->getMessage(),
+                                5
+                            );
+                        }
+                        break;
+                    }
+                    return $this->_pear->raiseError(trim($response . $line), 6);
+                }
+
+                if (preg_match('/^{([0-9]+)}/', $line, $matches)) {
+                    // Matches literal string responses.
+                    $line = $this->_recvBytes($matches[1] + 2);
+                    if (!$auth) {
+                        // Receive the pending OK only if we aren't
+                        // authenticating since string responses during
+                        // authentication don't need an OK.
+                        $this->_recvLn();
+                    }
+                    return $line;
+                }
+
+                if ($auth) {
+                    // String responses during authentication don't need an
+                    // OK.
+                    $response .= $line;
+                    return rtrim($response);
+                }
+
+                $response .= $line . "\r\n";
+                $referralCount++;
+            }
+        }
+
+        return $this->_pear->raiseError('Max referral count (' . $referralCount . ') reached. Cyrus murder loop error?', 7);
+    }
+
+    /**
+     * Returns the name of the best authentication method that the server
+     * has advertised.
+     *
+     * @param string $userMethod Only consider this method as available.
+     *
+     * @return string  The name of the best supported authentication method or
+     *                 a PEAR_Error object on failure.
+     */
+    function _getBestAuthMethod($userMethod = null)
+    {
+        if (!isset($this->_capability['sasl'])) {
+            return $this->_pear->raiseError('This server doesn\'t support any authentication methods. SASL problem?');
+        }
+        if (!$this->_capability['sasl']) {
+            return $this->_pear->raiseError('This server doesn\'t support any authentication methods.');
+        }
+
+        if ($userMethod) {
+            if (in_array($userMethod, $this->_capability['sasl'])) {
+                return $userMethod;
+            }
+
+            $msg = 'No supported authentication method found. The server supports these methods: %s, but we want to use: %s';
+            return $this->_pear->raiseError(
+                sprintf($msg, implode(', ', $this->_capability['sasl']), $userMethod)
+            );
+        }
+
+        foreach ($this->supportedAuthMethods as $method) {
+            if (in_array($method, $this->_capability['sasl'])) {
+                return $method;
+            }
+        }
+
+        $msg = 'No supported authentication method found. The server supports these methods: %s, but we only support: %s';
+        return $this->_pear->raiseError(
+            sprintf($msg, implode(', ', $this->_capability['sasl']), implode(', ', $this->supportedAuthMethods))
+        );
+    }
+
+    /**
+     * Starts a TLS connection.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function _startTLS()
+    {
+        $res = $this->_doCmd('STARTTLS');
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+
+        if (isset($this->_options['ssl']['crypto_method'])) {
+            $crypto_method = $this->_options['ssl']['crypto_method'];
+        }
+        else {
+            // There is no flag to enable all TLS methods. Net_SMTP
+            // handles enabling TLS similarly.
+            $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT
+                | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
+                | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+        }
+
+        if (!stream_socket_enable_crypto($this->_sock->fp, true, $crypto_method)) {
+            return $this->_pear->raiseError('Failed to establish TLS connection', 2);
+        }
+
+        $this->_debug('STARTTLS negotiation successful');
+
+        // The server should be sending a CAPABILITY response after
+        // negotiating TLS. Read it, and ignore if it doesn't.
+        // Unfortunately old Cyrus versions are broken and don't send a
+        // CAPABILITY response, thus we would wait here forever. Parse the
+        // Cyrus version and work around this broken behavior.
+        if (!preg_match('/^CYRUS TIMSIEVED V([0-9.]+)/', $this->_capability['implementation'], $matches)
+            || version_compare($matches[1], '2.3.10', '>=')
+        ) {
+            $this->_doCmd();
+        }
+
+        // Query the server capabilities again now that we are under
+        // encryption.
+        $res = $this->_cmdCapability();
+        if (is_a($res, 'PEAR_Error')) {
+            return $this->_pear->raiseError(
+                'Failed to connect, server said: ' . $res->getMessage(), 2
+            );
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the length of a string.
+     *
+     * @param string $string A string.
+     *
+     * @return integer  The length of the string.
+     */
+    function _getLineLength($string)
+    {
+        if (extension_loaded('mbstring')) {
+            return mb_strlen($string, 'latin1');
+        } else {
+            return strlen($string);
+        }
+    }
+
+    /**
+     * Locale independant strtoupper() implementation.
+     *
+     * @param string $string The string to convert to lowercase.
+     *
+     * @return string  The lowercased string, based on ASCII encoding.
+     */
+    function _toUpper($string)
+    {
+        $language = setlocale(LC_CTYPE, 0);
+        setlocale(LC_CTYPE, 'C');
+        $string = strtoupper($string);
+        setlocale(LC_CTYPE, $language);
+        return $string;
+    }
+
+    /**
+     * Converts strings into RFC's quoted-string or literal-c2s form.
+     *
+     * @param string $string The string to convert.
+     *
+     * @return string Result string.
+     */
+    function _escape($string)
+    {
+        // Some implementations don't allow UTF-8 characters in quoted-string,
+        // use literal-c2s.
+        if (preg_match('/[^\x01-\x09\x0B-\x0C\x0E-\x7F]/', $string)) {
+            return sprintf("{%d+}\r\n%s", $this->_getLineLength($string), $string);
+        }
+
+        return '"' . addcslashes($string, '\\"') . '"';
+    }
+
+    /**
+     * Write debug text to the current debug output handler.
+     *
+     * @param string $message Debug message text.
+     *
+     * @return void
+     */
+    function _debug($message)
+    {
+        if ($this->_debug) {
+            if ($this->_debug_handler) {
+                call_user_func_array($this->_debug_handler, array(&$this, $message));
+            } else {
+                echo "$message\n";
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,47 @@
+{
+    "authors": [
+        {
+            "email": "jan@horde.org",
+            "name": "Jan Schneider",
+            "role": "Lead"
+        },
+        {
+            "email": "richard@php.net",
+            "name": "Richard Heyes",
+            "role": "Lead"
+        },
+        {
+            "email": "damlists@cnba.uba.ar",
+            "name": "Damian Fernandez Sosa",
+            "role": "Lead"
+        },
+        {
+            "email": "amistry@am-productions.biz",
+            "name": "Anish Mistry",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "classmap": [
+            "./"
+        ]
+    },
+    "description": "More info available on: http://pear.php.net/package/Net_Sieve",
+    "license": "BSD",
+    "name": "pear/net_sieve",
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Sieve",
+        "source": "https://github.com/pear/Net_Sieve"
+    },
+    "type": "library",
+    "require": {
+        "pear/pear-core-minimal": "*",
+        "pear/net_socket": "*"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~5.7.15"
+    },
+    "suggest": {
+        "pear/auth_sasl": "Install optionally via your project's composer.json"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,469 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.4.6" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+http://pear.php.net/dtd/tasks-1.0.xsd
+http://pear.php.net/dtd/package-2.0
+http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Net_Sieve</name>
+ <channel>pear.php.net</channel>
+ <summary>Handles talking to a sieve server.</summary>
+ <description>This package provides an API to talk to servers implementing the managesieve protocol. It can be used to install and remove sieve scripts, mark them active etc.</description>
+ <lead>
+  <name>Aleksander Machniak</name>
+  <user>alec</user>
+  <email>alec@alec.pl</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Jan Schneider</name>
+  <user>yunosh</user>
+  <email>jan@horde.org</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Richard Heyes</name>
+  <user>richard</user>
+  <email>richard@php.net</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Damian Fernandez Sosa</name>
+  <user>damian</user>
+  <email>damlists@cnba.uba.ar</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Anish Mistry</name>
+  <user>amistry</user>
+  <email>amistry@am-productions.biz</email>
+  <active>no</active>
+ </lead>
+ <date>2017-05-21</date>
+ <version>
+  <release>1.4.0</release>
+  <api>1.4.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+ <notes>
+* Dropped PHP4 support, fixed PHP7 warnings
+* Fixed E_DEPRECATED warning on Auth_SASL::factory() call
+* Enable later TLS versions
+</notes>
+ <contents>
+  <dir name="/" baseinstalldir="Net">
+   <dir name="tests">
+    <file name="largescript.siv" role="test" />
+    <file name="config.php.dist" role="test" />
+    <file name="SieveTest.php" role="test" />
+   </dir> <!-- /tests -->
+   <file name="Sieve.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+  </dir> <!-- / -->
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.0.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.0b1</min>
+   </pearinstaller>
+   <package>
+    <name>Net_Socket</name>
+    <channel>pear.php.net</channel>
+    <min>1.0</min>
+   </package>
+   <package>
+    <name>PEAR</name>
+    <channel>pear.php.net</channel>
+    <min>1.0</min>
+   </package>
+  </required>
+  <optional>
+   <package>
+    <name>Auth_SASL</name>
+    <channel>pear.php.net</channel>
+    <min>1.0</min>
+   </package>
+  </optional>
+ </dependencies>
+ <phprelease />
+ <changelog>
+  <release>
+   <date>2015-01-20</date>
+   <version>
+    <release>1.3.4</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Remove erroneous and unnecessary active script caching (Bug #20472).
+   </notes>
+  </release>
+  <release>
+   <date>2014-09-24</date>
+   <version>
+    <release>1.3.3</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fix notices from non-static calling of PEAR methods.
+* Fix reading OK responses with string literal messages.
+   </notes>
+  </release>
+  <release>
+   <date>2011-08-06</date>
+   <version>
+    <release>1.3.2</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fix referrals if host data or user credentials are passed to connect() and login() instead of the constructor (Aleksander Machniak, Bug #17107).
+</notes>
+  </release>
+  <release>
+   <date>2011-08-05</date>
+   <version>
+    <release>1.3.1</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Query capabilities again after successful authentication (Jesse Crawford, Request #18382).
+* Escape quotes and backslashes in script names, and use literal strings for script names with non-ASCII characters (Aleksander Machniak, Bug #16691).
+* Work around broken STARTTLS behavior in Cyrus versions before 2.3.10 (Aleksander Machniak, Bug #18241).
+* Improve string literal parsing (Aleksander Machniak, Bug #18228).</notes>
+  </release>
+  <release>
+   <date>2010-07-01</date>
+   <version>
+    <release>1.3.0</release>
+    <api>1.3.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Add debug handler parameter to constructor.
+* Fix LOGIN authentication (Agustín Eijo, Aleksander Machniak, Bug #17527).</notes>
+  </release>
+  <release>
+   <date>2010-06-13</date>
+   <version>
+    <release>1.2.2</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fix SASL authentication without Auth_SASL (Bug #17489).</notes>
+  </release>
+  <release>
+   <date>2010-04-19</date>
+   <version>
+    <release>1.2.1</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fix DIGEST-MD5 authentication with Dovecot (Stef Simoens, Bug #17320).</notes>
+  </release>
+  <release>
+   <date>2010-04-01</date>
+   <version>
+    <release>1.2.0</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>Changes since version 1.2.0b1:
+* Fix DIGEST-MD5 authentication (Aleksander Machniak, Bug #17285).
+* Don't try to call dl() if mbstring extension isn't loaded (Bug #17038).
+Changes since version 1.1.7:
+* Added support for adding a custom debug handler (Aleksander Machniak, Request #16681).
+* Fix breakage with certain locales, especially Turkish.
+* Fix reading authentication responses without literals (Bug #16647).
+* Code cleanup.</notes>
+  </release>
+  <release>
+   <date>2009-10-07</date>
+   <version>
+    <release>1.2.0b1</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Added support for adding a custom debug handler (Aleksander Machniak, Request #16681).
+* Fix breakage with certain locales, especially Turkish.
+* Fix reading authentication responses without literals (Bug #16647).
+* Code cleanup.</notes>
+  </release>
+  <release>
+   <date>2009-07-24</date>
+   <version>
+    <release>1.1.7</release>
+    <api>1.1.6</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed STARTTLS support (Bug #14205).
+* Added connect options and EXTERNAL authentication.</notes>
+  </release>
+  <release>
+   <date>2008-03-22</date>
+   <version>
+    <release>1.1.6</release>
+    <api>1.1.6</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+    * Fixed Bug #9273
+    * Fixed copy/paste error in CRAM and DIGEST authentication error case.
+   </notes>
+  </release>
+  <release>
+   <date>2006-10-24</date>
+   <version>
+    <release>1.1.5</release>
+    <api>1.1.5</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+    * Fixed Bug connect() bug
+    * Fixed Request #8071
+   </notes>
+  </release>
+  <release>
+   <date>2006-09-09</date>
+   <version>
+    <release>1.1.4</release>
+    <api>1.1.4</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+    * Fixed Bug #8452 Unterminated read loop
+    * Fixed Bug #7845 Add mbstring support
+    * Added Request #8071 Enable the ability to toggle TLS support if available.
+    * Added Request #8453 Clean up PHPDoc and comments
+   </notes>
+  </release>
+  <release>
+   <date>2006-05-21</date>
+   <version>
+    <release>1.1.3</release>
+    <api>1.1.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>
+    * Correctly Fixed Bug #3519 Net_Sieve w/ externally established sockets
+    * Fixed Bug #7197 getScript() truncates long scripts
+    * Added PHPUnit2 regression test script
+   </notes>
+  </release>
+  <release>
+   <date>2006-02-09</date>
+   <version>
+    <release>1.1.2</release>
+    <api>1.1.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed Request #4053 Added STARTTLS support for PHP 5.1 and above
+    * Fixed Bug #3519 Net_Sieve w/ externally established sockets
+    * Fixed Bug #4794 drops protocol prefix, e.g. &quot;ssl://&quot; in referrals
+    * Fixed STARTTLS detection
+    * Allow $options[] to be passed to Net_Socket
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.1</release>
+    <api>1.1.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2005-02-02</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed Bug #3242 cyrus murder referrals not followed 
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.0</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-12-18</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed Bug #2728 Linebreaks not being read using getScript()
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.0.1</release>
+    <api>1.0.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-03-13</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed BUG #1006
+
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.0.0</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-03-10</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Fixed DIGEST-MD5 sasl version handling (sasl v1.xx responses are diferent than v2.xx)
+* Fixed LOGIN Method
+
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.9.1</release>
+    <api>0.9.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2004-02-29</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* There is an issue whith the DIGEST-MD5 method. in one installation it does not work but in my server it works perfect! please send me debug info to solve the problem if
+it affects you or disable DIGEST-MD5
+* some optimizations to the code
+* added haveSpace() to check if the server has space to store the script. Use with care HAVESPACE seems to be broken in cyrus 2.0.16
+* added hasExtension()
+* added getExtensions()
+* added referral support and automatic following of them. (it also handles the following of multireferrals).
+* removed _getResponse replaced by _doCmd. (thanks to Etienne Goyer for this)
+* added supportsAuthMech()
+* if installed automatically uses Auth_SASL
+* added CRAM-MD5 auth Method
+* added DIGEST-MD5 auth Method
+* added getAuthMechs() returns an array containing all the auth methods the server supports
+* added hasAuthMech() to check if the server has a particular auth method
+* _connect --&gt; connect: now is a public method (without breaking BC)
+* _login --&gt; login: now is a public method (without breaking BC)
+* fix typo  cmdAuthenticate() ---&gt;  _cmdAuthenticate()
+* _doCmd() now parses string responses also.
+
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.9.0</release>
+    <api>0.9.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2004-01-31</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>* Added setDebug() method and debugging capabilities
+* added disconnect() method
+* added sample file test_sieve.php
+* fixed bug #591
+* automagically selects the best auth method
+
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.8.1</release>
+    <api>0.8.1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2002-07-27</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
+   <notes>Initial release
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>0.8</release>
+    <api>0.8</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2002-05-10</date>
+   <license uri="http://www.php.net/license">PHP</license>
+   <notes>Initial release
+   </notes>
+  </release>
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/tests/SieveTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,271 @@
+<?php
+/**
+ * This file contains the PHPUnit test case for Net_Sieve.
+ *
+ * PHP version 5
+ *
+ * +-----------------------------------------------------------------------+
+ * | All rights reserved.                                                  |
+ * |                                                                       |
+ * | Redistribution and use in source and binary forms, with or without    |
+ * | modification, are permitted provided that the following conditions    |
+ * | are met:                                                              |
+ * |                                                                       |
+ * | o Redistributions of source code must retain the above copyright      |
+ * |   notice, this list of conditions and the following disclaimer.       |
+ * | o Redistributions in binary form must reproduce the above copyright   |
+ * |   notice, this list of conditions and the following disclaimer in the |
+ * |   documentation and/or other materials provided with the distribution.|
+ * |                                                                       |
+ * | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+ * | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+ * | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ * | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+ * | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+ * | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+ * | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+ * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+ * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+ * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+ * +-----------------------------------------------------------------------+
+ *
+ * @category  Networking
+ * @package   Net_Sieve
+ * @author    Anish Mistry <amistry@am-productions.biz>
+ * @copyright 2006 Anish Mistry
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD
+ * @version   SVN: $Id$
+ * @link      http://pear.php.net/package/Net_Sieve
+ */
+
+require_once dirname(__FILE__) . '/../Sieve.php';
+
+/**
+ * PHPUnit test case for Net_Sieve.
+ *
+ * @category  Networking
+ * @package   Net_Sieve
+ * @author    Anish Mistry <amistry@am-productions.biz>
+ * @copyright 2006 Anish Mistry
+ * @license   http://www.opensource.org/licenses/bsd-license.php BSD
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/Net_Sieve
+ */
+class SieveTest extends PHPUnit_Framework_TestCase
+{
+    // contains the object handle of the string class
+    protected $fixture;
+
+    protected function setUp()
+    {
+        if (!file_exists(dirname(__FILE__) . '/config.php')) {
+            $this->markTestSkipped('Test configuration incomplete. Copy config.php.dist to config.php.');
+        }
+        require_once dirname(__FILE__) . '/config.php';
+
+        // Create a new instance of Net_Sieve.
+        $this->_pear = new PEAR();
+        $this->fixture = new Net_Sieve();
+        $this->scripts = array(
+            'test script1' => "require \"fileinto\";\r\nif header :contains \"From\" \"@cnba.uba.ar\" \r\n{fileinto \"INBOX.Test1\";}\r\nelse \r\n{fileinto \"INBOX\";}",
+            'test script2' => "require \"fileinto\";\r\nif header :contains \"From\" \"@cnba.uba.ar\" \r\n{fileinto \"INBOX.Test\";}\r\nelse \r\n{fileinto \"INBOX\";}",
+            'test"scriptäöü3' => "require \"vacation\";\nvacation\n:days 7\n:addresses [\"matthew@de-construct.com\"]\n:subject \"This is a test\"\n\"I'm on my holiday!\nsadfafs\";",
+            'test script4' => file_get_contents(dirname(__FILE__) . '/largescript.siv'));
+    }
+    
+    protected function tearDown()
+    {
+        // Delete the instance.
+        unset($this->fixture);
+    }
+    
+    protected function login()
+    {
+        $result = $this->fixture->connect(HOST, PORT);
+        $this->assertTrue($this->check($result), 'Can not connect');
+        $result = $this->fixture->login(USERNAME, PASSWORD, null, '', false);
+        $this->assertTrue($this->check($result), 'Can not login');
+    }
+
+    protected function logout()
+    {
+        $result = $this->fixture->disconnect();
+        $this->assertFalse($this->_pear->isError($result), 'Error on disconnect');
+    }
+
+    protected function clear()
+    {
+        // Clear all the scripts in the account.
+        $this->login();
+        $active = $this->fixture->getActive();
+        if (isset($this->scripts[$active])) {
+            $this->fixture->setActive(null);
+        }
+        foreach (array_keys($this->scripts) as $script) {
+            $this->fixture->removeScript($script);
+        }
+        $this->logout();
+    }
+
+    protected function check($result)
+    {
+        if ($this->_pear->isError($result)) {
+            throw new Exception($result->getMessage());
+        }
+        return $result;
+    }
+
+    public function testConnect()
+    {
+        $result = $this->fixture->connect(HOST, PORT);
+        $this->assertTrue($this->check($result), 'Cannot connect');
+    }
+    
+    public function testLogin()
+    {
+        $result = $this->fixture->connect(HOST, PORT);
+        $this->assertTrue($this->check($result), 'Cannot connect');
+        $result = $this->fixture->login(USERNAME, PASSWORD, null, '', false);
+        $this->assertTrue($this->check($result), 'Cannot login');
+    }
+
+    public function testDisconnect()
+    {
+        $result = $this->fixture->connect(HOST, PORT);
+        $this->assertFalse($this->_pear->isError($result), 'Cannot connect');
+        $result = $this->fixture->login(USERNAME, PASSWORD, null, '', false);
+        $this->assertFalse($this->_pear->isError($result), 'Cannot login');
+        $result = $this->fixture->disconnect();
+        $this->assertFalse($this->_pear->isError($result), 'Error on disconnect');
+    }
+
+    public function testListScripts()
+    {
+        $this->login();
+        $scripts = $this->fixture->listScripts();
+        $this->logout();
+        $this->assertFalse($this->_pear->isError($scripts), 'Can not list scripts');
+    }
+
+    public function testInstallScript()
+    {
+        $this->clear();
+        $this->login();
+
+        // First script.
+        $scriptname = 'test script1';
+        $before_scripts = $this->fixture->listScripts();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $this->assertFalse($this->_pear->isError($result), 'Can not install script ' . $scriptname);
+        $after_scripts = $this->fixture->listScripts();
+        $diff_scripts = array_values(array_diff($after_scripts, $before_scripts));
+        $this->assertTrue(count($diff_scripts) > 0, 'Script not installed');
+        $this->assertEquals($scriptname, $diff_scripts[0], 'Added script has a different name');
+
+        // Second script (install and activate)
+        $scriptname = 'test script2';
+        $before_scripts = $this->fixture->listScripts();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname], true);
+        $this->assertFalse($this->_pear->isError($result), 'Can not install script ' . $scriptname);
+        $after_scripts = $this->fixture->listScripts();
+        $diff_scripts = array_values(array_diff($after_scripts, $before_scripts));
+        $this->assertTrue(count($diff_scripts) > 0, 'Script not installed');
+        $this->assertEquals($scriptname, $diff_scripts[0], 'Added script has a different name');
+        $active_script = $this->fixture->getActive();
+        $this->assertEquals($scriptname, $active_script, 'Added script has a different name');
+        $this->logout();
+    }
+
+    /**
+     * There is a good chance that this test will fail since most servers have
+     * a 32KB limit on uploaded scripts.
+     */
+    public function testInstallScriptLarge()
+    {
+        $this->clear();
+        $this->login();
+        $scriptname = 'test script4';
+        $before_scripts = $this->fixture->listScripts();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $this->assertFalse($this->_pear->isError($result), 'Unable to upload large script (expected behavior for most servers)');
+        $after_scripts = $this->fixture->listScripts();
+        $diff_scripts = array_diff($after_scripts, $before_scripts);
+        $this->assertEquals($scriptname, reset($diff_scripts), 'Added script has a different name');
+        $this->logout();
+    }
+
+    /**
+     * See bug #16691.
+     */
+    public function testInstallNonAsciiScript()
+    {
+        $this->clear();
+        $this->login();
+
+        $scriptname = 'test"scriptäöü3';
+        $before_scripts = $this->fixture->listScripts();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $this->assertFalse($this->_pear->isError($result), 'Can not install script ' . $scriptname);
+        $after_scripts = $this->fixture->listScripts();
+        $diff_scripts = array_values(array_diff($after_scripts, $before_scripts));
+        $this->assertTrue(count($diff_scripts) > 0, 'Script not installed');
+        $this->assertEquals($scriptname, $diff_scripts[0], 'Added script has a different name');
+
+        $this->logout();
+    }
+
+    public function testGetScript()
+    {
+        $this->clear();
+        $this->login();
+        $scriptname = 'test script1';
+        $before_scripts = $this->fixture->listScripts();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $this->assertFalse($this->_pear->isError($result), 'Can not install script ' . $scriptname);
+        $after_scripts = $this->fixture->listScripts();
+        $diff_scripts = array_values(array_diff($after_scripts, $before_scripts));
+        $this->assertTrue(count($diff_scripts) > 0);
+        $this->assertEquals($scriptname, $diff_scripts[0], 'Added script has a different name');
+        $script = $this->fixture->getScript($scriptname);
+        $this->assertEquals(trim($this->scripts[$scriptname]), trim($script), 'Script installed is not the same script retrieved');
+        $this->logout();
+    }
+
+    public function testGetActive()
+    {
+        $this->clear();
+        $this->login();
+        $active_script = $this->fixture->getActive();
+        $this->assertFalse($this->_pear->isError($active_script), 'Error getting the active script');
+        $this->logout();
+    }
+
+    public function testSetActive()
+    {
+        $this->clear();
+        $scriptname = 'test script1';
+        $this->login();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $result = $this->fixture->setActive($scriptname);
+        $this->assertFalse($this->_pear->isError($result), 'Can not set active script');
+        $active_script = $this->fixture->getActive();
+        $this->assertEquals($scriptname, $active_script, 'Active script does not match');
+
+        // Test for non-existant script.
+        $result = $this->fixture->setActive('non existant script');
+        $this->assertTrue($this->_pear->isError($result));
+        $this->logout();
+    }
+
+    public function testRemoveScript()
+    {
+        $this->clear();
+        $scriptname = 'test script1';
+        $this->login();
+        $result = $this->fixture->installScript($scriptname, $this->scripts[$scriptname]);
+        $result = $this->fixture->removeScript($scriptname);
+        $this->assertFalse($this->_pear->isError($result), 'Error removing active script');
+        $this->logout();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/tests/config.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,5 @@
+<?php
+define('HOST', 'localhost');
+define('PORT', 4190);
+define('USERNAME', 'user');
+define('PASSWORD', 'pass');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_sieve/tests/largescript.siv	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6689 @@
+require ["fileinto", "reject", "vacation", "regex", "relational", "comparator-i;ascii-numeric"];
+if header :is ["X-Spam-Flag", "X-Spam-Status"] ["YES","Yes"] {
+fileinto "INBOX.Spam";
+stop;
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["cvs-all.freebsd.org"] {
+fileinto "INBOX.FreeBSD.CVS All";
+}
+if header :contains ["List-Id"] ["freebsd-acpi.freebsd.org"] {
+fileinto "INBOX.FreeBSD.ACPI";
+}
+if header :contains ["List-Id"] ["freebsd-current.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Current";
+}
+if header :contains ["List-Id"] ["freebsd-hackers.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hackers";
+}
+if header :contains ["List-Id"] ["freebsd-multimedia.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Multimedia";
+}
+if header :contains ["List-Id"] ["freebsd-questions.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Questions";
+}
+if header :contains ["List-Id"] ["freebsd-stable.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Stable";
+}
+if header :contains ["List-Id"] ["freebsd-mobile.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Mobile";
+}
+if header :contains ["List-Id"] ["wine-devel.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Devel";
+}
+if header :contains ["List-Id"] ["wine-users.winehq.org"] {
+fileinto "INBOX.FreeBSD.Wine.Users";
+}
+if header :contains ["List-Id"] ["dri-devel.lists.sourceforge.net"] {
+fileinto "INBOX.FreeBSD.dri-devel";
+}
+if header :contains ["List-Id"] ["freebsd-threads.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Threads";
+}
+if header :contains ["List-Id"] ["freebsd-hardware.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Hardware";
+}
+if header :contains ["List-Id"] ["freebsd-usb.freebsd.org"] {
+fileinto "INBOX.FreeBSD.USB";
+}
+if header :contains ["List-Id"] ["freebsd-ports.freebsd.org"] {
+fileinto "INBOX.FreeBSD.Ports";
+}
+if header :contains ["To"] ["amistry@php.net"] {
+fileinto "INBOX.PEAR.Account";
+}
+if header :contains ["list-post"] ["pear-qa@lists.php.net"] {
+fileinto "INBOX.PEAR.QA";
+}
+if header :contains ["Delivered-To"] ["php-general@lists.php.net"] {
+fileinto "INBOX.PHP.General";
+}
+if header :contains ["Delivered-to"] ["internals@lists.php.net"] {
+fileinto "INBOX.PEAR.Internals";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
+if header :contains ["List-Id"] ["suphp.lists.marsching.biz"] {
+fileinto "INBOX.suPHP";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+.DS_Store
+Net_SMTP-*.tgz
+
+# Tests
+run-tests.log
+/tests/*.diff
+/tests/*.exp
+/tests/*.log
+/tests/*.out
+/tests/config.php
+
+# composer related
+composer.lock
+composer.phar
+vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,11 @@
+language: php
+install:
+  - pear install package.xml
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - 7.1
+  - nightly
+script: pear run-tests -d tests/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,69 @@
+-------------------------------------------------------------------- 
+                  The PHP License, version 3.01
+       Copyright (c) 2002-2015 Jon Parise and Chuck Hagenbuch.
+                       All rights reserved.
+-------------------------------------------------------------------- 
+
+Redistribution and use in source and binary forms, with or without
+modification, is permitted provided that the following conditions
+are met:
+
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+ 
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+ 
+  3. The name "PHP" must not be used to endorse or promote products
+     derived from this software without prior written permission. For
+     written permission, please contact group@php.net.
+  
+  4. Products derived from this software may not be called "PHP", nor
+     may "PHP" appear in their name, without prior written permission
+     from group@php.net.  You may indicate that your software works in
+     conjunction with PHP by saying "Foo for PHP" instead of calling
+     it "PHP Foo" or "phpfoo"
+ 
+  5. The PHP Group may publish revised and/or new versions of the
+     license from time to time. Each version will be given a
+     distinguishing version number.
+     Once covered code has been published under a particular version
+     of the license, you may always continue to use it under the terms
+     of that version. You may also choose to use such covered code
+     under the terms of any subsequent version of the license
+     published by the PHP Group. No one other than the PHP Group has
+     the right to modify the terms applicable to covered code created
+     under this License.
+
+  6. Redistributions of any form whatsoever must retain the following
+     acknowledgment:
+     "This product includes PHP software, freely available from
+     <http://www.php.net/software/>".
+
+THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND 
+ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
+PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE PHP
+DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------- 
+
+This software consists of voluntary contributions made by many
+individuals on behalf of the PHP Group.
+
+The PHP Group can be contacted via Email at group@php.net.
+
+For more information on the PHP Group and the PHP project, 
+please see <http://www.php.net>.
+
+PHP includes the Zend Engine, freely available at
+<http://www.zend.com>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/Net/SMTP.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1256 @@
+<?php
+/** vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP Version 5 and 7                                                  |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2015 Jon Parise and Chuck Hagenbuch               |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.01 of the PHP license,      |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_01.txt.                                 |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Chuck Hagenbuch <chuck@horde.org>                           |
+// |          Jon Parise <jon@php.net>                                    |
+// |          Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>      |
+// +----------------------------------------------------------------------+
+
+require_once 'PEAR.php';
+require_once 'Net/Socket.php';
+
+/**
+ * Provides an implementation of the SMTP protocol using PEAR's
+ * Net_Socket class.
+ *
+ * @package Net_SMTP
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@php.net>
+ * @author  Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>
+ *
+ * @example basic.php A basic implementation of the Net_SMTP package.
+ */
+class Net_SMTP
+{
+    /**
+     * The server to connect to.
+     * @var string
+     */
+    public $host = 'localhost';
+
+    /**
+     * The port to connect to.
+     * @var int
+     */
+    public $port = 25;
+
+    /**
+     * The value to give when sending EHLO or HELO.
+     * @var string
+     */
+    public $localhost = 'localhost';
+
+    /**
+     * List of supported authentication methods, in preferential order.
+     * @var array
+     */
+    public $auth_methods = array();
+
+    /**
+     * Use SMTP command pipelining (specified in RFC 2920) if the SMTP
+     * server supports it.
+     *
+     * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(),
+     * somlFrom() and samlFrom() do not wait for a response from the
+     * SMTP server but return immediately.
+     *
+     * @var bool
+     */
+    public $pipelining = false;
+
+    /**
+     * Number of pipelined commands.
+     * @var int
+     */
+    protected $pipelined_commands = 0;
+
+    /**
+     * Should debugging output be enabled?
+     * @var boolean
+     */
+    protected $debug = false;
+
+    /**
+     * Debug output handler.
+     * @var callback
+     */
+    protected $debug_handler = null;
+
+    /**
+     * The socket resource being used to connect to the SMTP server.
+     * @var resource
+     */
+    protected $socket = null;
+
+    /**
+     * Array of socket options that will be passed to Net_Socket::connect().
+     * @see stream_context_create()
+     * @var array
+     */
+    protected $socket_options = null;
+
+    /**
+     * The socket I/O timeout value in seconds.
+     * @var int
+     */
+    protected $timeout = 0;
+
+    /**
+     * The most recent server response code.
+     * @var int
+     */
+    protected $code = -1;
+
+    /**
+     * The most recent server response arguments.
+     * @var array
+     */
+    protected $arguments = array();
+
+    /**
+     * Stores the SMTP server's greeting string.
+     * @var string
+     */
+    protected $greeting = null;
+
+    /**
+     * Stores detected features of the SMTP server.
+     * @var array
+     */
+    protected $esmtp = array();
+
+    /**
+     * Instantiates a new Net_SMTP object, overriding any defaults
+     * with parameters that are passed in.
+     *
+     * If you have SSL support in PHP, you can connect to a server
+     * over SSL using an 'ssl://' prefix:
+     *
+     *   // 465 is a common smtps port.
+     *   $smtp = new Net_SMTP('ssl://mail.host.com', 465);
+     *   $smtp->connect();
+     *
+     * @param string  $host           The server to connect to.
+     * @param integer $port           The port to connect to.
+     * @param string  $localhost      The value to give when sending EHLO or HELO.
+     * @param boolean $pipelining     Use SMTP command pipelining
+     * @param integer $timeout        Socket I/O timeout in seconds.
+     * @param array   $socket_options Socket stream_context_create() options.
+     *
+     * @since 1.0
+     */
+    public function __construct($host = null, $port = null, $localhost = null,
+        $pipelining = false, $timeout = 0, $socket_options = null
+    ) {
+        if (isset($host)) {
+            $this->host = $host;
+        }
+        if (isset($port)) {
+            $this->port = $port;
+        }
+        if (isset($localhost)) {
+            $this->localhost = $localhost;
+        }
+
+        $this->pipelining      = $pipelining;
+        $this->socket         = new Net_Socket();
+        $this->socket_options = $socket_options;
+        $this->timeout        = $timeout;
+
+        /* Include the Auth_SASL package.  If the package is available, we
+         * enable the authentication methods that depend upon it. */
+        if (@include_once 'Auth/SASL.php') {
+            $this->setAuthMethod('CRAM-MD5', array($this, 'authCramMD5'));
+            $this->setAuthMethod('DIGEST-MD5', array($this, 'authDigestMD5'));
+        }
+
+        /* These standard authentication methods are always available. */
+        $this->setAuthMethod('LOGIN', array($this, 'authLogin'), false);
+        $this->setAuthMethod('PLAIN', array($this, 'authPlain'), false);
+    }
+
+    /**
+     * Set the socket I/O timeout value in seconds plus microseconds.
+     *
+     * @param integer $seconds      Timeout value in seconds.
+     * @param integer $microseconds Additional value in microseconds.
+     *
+     * @since 1.5.0
+     */
+    public function setTimeout($seconds, $microseconds = 0)
+    {
+        return $this->socket->setTimeout($seconds, $microseconds);
+    }
+
+    /**
+     * Set the value of the debugging flag.
+     *
+     * @param boolean  $debug   New value for the debugging flag.
+     * @param callback $handler Debug handler callback
+     *
+     * @since 1.1.0
+     */
+    public function setDebug($debug, $handler = null)
+    {
+        $this->debug         = $debug;
+        $this->debug_handler = $handler;
+    }
+
+    /**
+     * Write the given debug text to the current debug output handler.
+     *
+     * @param string $message Debug mesage text.
+     *
+     * @since 1.3.3
+     */
+    protected function debug($message)
+    {
+        if ($this->debug) {
+            if ($this->debug_handler) {
+                call_user_func_array(
+                    $this->debug_handler, array(&$this, $message)
+                );
+            } else {
+                echo "DEBUG: $message\n";
+            }
+        }
+    }
+
+    /**
+     * Send the given string of data to the server.
+     *
+     * @param string $data The string of data to send.
+     *
+     * @return mixed The number of bytes that were actually written,
+     *               or a PEAR_Error object on failure.
+     *
+     * @since 1.1.0
+     */
+    protected function send($data)
+    {
+        $this->debug("Send: $data");
+
+        $result = $this->socket->write($data);
+        if (!$result || PEAR::isError($result)) {
+            $msg = $result ? $result->getMessage() : "unknown error";
+            return PEAR::raiseError("Failed to write to socket: $msg");
+        }
+
+        return $result;
+    }
+
+    /**
+     * Send a command to the server with an optional string of
+     * arguments.  A carriage return / linefeed (CRLF) sequence will
+     * be appended to each command string before it is sent to the
+     * SMTP server - an error will be thrown if the command string
+     * already contains any newline characters. Use send() for
+     * commands that must contain newlines.
+     *
+     * @param string $command The SMTP command to send to the server.
+     * @param string $args    A string of optional arguments to append
+     *                        to the command.
+     *
+     * @return mixed The result of the send() call.
+     *
+     * @since 1.1.0
+     */
+    protected function put($command, $args = '')
+    {
+        if (!empty($args)) {
+            $command .= ' ' . $args;
+        }
+
+        if (strcspn($command, "\r\n") !== strlen($command)) {
+            return PEAR::raiseError('Commands cannot contain newlines');
+        }
+
+        return $this->send($command . "\r\n");
+    }
+
+    /**
+     * Read a reply from the SMTP server.  The reply consists of a response
+     * code and a response message.
+     *
+     * @param mixed $valid The set of valid response codes.  These
+     *                     may be specified as an array of integer
+     *                     values or as a single integer value.
+     * @param bool  $later Do not parse the response now, but wait
+     *                     until the last command in the pipelined
+     *                     command group
+     *
+     * @return mixed True if the server returned a valid response code or
+     *               a PEAR_Error object is an error condition is reached.
+     *
+     * @since 1.1.0
+     *
+     * @see getResponse
+     */
+    protected function parseResponse($valid, $later = false)
+    {
+        $this->code      = -1;
+        $this->arguments = array();
+
+        if ($later) {
+            $this->pipelined_commands++;
+            return true;
+        }
+
+        for ($i = 0; $i <= $this->pipelined_commands; $i++) {
+            while ($line = $this->socket->readLine()) {
+                $this->debug("Recv: $line");
+
+                /* If we receive an empty line, the connection was closed. */
+                if (empty($line)) {
+                    $this->disconnect();
+                    return PEAR::raiseError('Connection was closed');
+                }
+
+                /* Read the code and store the rest in the arguments array. */
+                $code = substr($line, 0, 3);
+                $this->arguments[] = trim(substr($line, 4));
+
+                /* Check the syntax of the response code. */
+                if (is_numeric($code)) {
+                    $this->code = (int)$code;
+                } else {
+                    $this->code = -1;
+                    break;
+                }
+
+                /* If this is not a multiline response, we're done. */
+                if (substr($line, 3, 1) != '-') {
+                    break;
+                }
+            }
+        }
+
+        $this->pipelined_commands = 0;
+
+        /* Compare the server's response code with the valid code/codes. */
+        if (is_int($valid) && ($this->code === $valid)) {
+            return true;
+        } elseif (is_array($valid) && in_array($this->code, $valid, true)) {
+            return true;
+        }
+
+        return PEAR::raiseError('Invalid response code received from server', $this->code);
+    }
+
+    /**
+     * Issue an SMTP command and verify its response.
+     *
+     * @param string $command The SMTP command string or data.
+     * @param mixed  $valid   The set of valid response codes. These
+     *                        may be specified as an array of integer
+     *                        values or as a single integer value.
+     *
+     * @return mixed True on success or a PEAR_Error object on failure.
+     *
+     * @since 1.6.0
+     */
+    public function command($command, $valid)
+    {
+        if (PEAR::isError($error = $this->put($command))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse($valid))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Return a 2-tuple containing the last response from the SMTP server.
+     *
+     * @return array A two-element array: the first element contains the
+     *               response code as an integer and the second element
+     *               contains the response's arguments as a string.
+     *
+     * @since 1.1.0
+     */
+    public function getResponse()
+    {
+        return array($this->code, join("\n", $this->arguments));
+    }
+
+    /**
+     * Return the SMTP server's greeting string.
+     *
+     * @return string A string containing the greeting string, or null if
+     *                a greeting has not been received.
+     *
+     * @since 1.3.3
+     */
+    public function getGreeting()
+    {
+        return $this->greeting;
+    }
+
+    /**
+     * Attempt to connect to the SMTP server.
+     *
+     * @param int  $timeout    The timeout value (in seconds) for the
+     *                         socket connection attempt.
+     * @param bool $persistent Should a persistent socket connection
+     *                         be used?
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function connect($timeout = null, $persistent = false)
+    {
+        $this->greeting = null;
+
+        $result = $this->socket->connect(
+            $this->host, $this->port, $persistent, $timeout, $this->socket_options
+        );
+
+        if (PEAR::isError($result)) {
+            return PEAR::raiseError(
+                'Failed to connect socket: ' . $result->getMessage()
+            );
+        }
+
+        /*
+         * Now that we're connected, reset the socket's timeout value for
+         * future I/O operations.  This allows us to have different socket
+         * timeout values for the initial connection (our $timeout parameter)
+         * and all other socket operations.
+         */
+        if ($this->timeout > 0) {
+            if (PEAR::isError($error = $this->setTimeout($this->timeout))) {
+                return $error;
+            }
+        }
+
+        if (PEAR::isError($error = $this->parseResponse(220))) {
+            return $error;
+        }
+
+        /* Extract and store a copy of the server's greeting string. */
+        list(, $this->greeting) = $this->getResponse();
+
+        if (PEAR::isError($error = $this->negotiate())) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Attempt to disconnect from the SMTP server.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function disconnect()
+    {
+        if (PEAR::isError($error = $this->put('QUIT'))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(221))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->socket->disconnect())) {
+            return PEAR::raiseError(
+                'Failed to disconnect socket: ' . $error->getMessage()
+            );
+        }
+
+        return true;
+    }
+
+    /**
+     * Attempt to send the EHLO command and obtain a list of ESMTP
+     * extensions available, and failing that just send HELO.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     *
+     * @since 1.1.0
+     */
+    protected function negotiate()
+    {
+        if (PEAR::isError($error = $this->put('EHLO', $this->localhost))) {
+            return $error;
+        }
+
+        if (PEAR::isError($this->parseResponse(250))) {
+            /* If the EHLO failed, try the simpler HELO command. */
+            if (PEAR::isError($error = $this->put('HELO', $this->localhost))) {
+                return $error;
+            }
+            if (PEAR::isError($this->parseResponse(250))) {
+                return PEAR::raiseError('HELO was not accepted', $this->code);
+            }
+
+            return true;
+        }
+
+        foreach ($this->arguments as $argument) {
+            $verb      = strtok($argument, ' ');
+            $len       = strlen($verb);
+            $arguments = substr($argument, $len + 1, strlen($argument) - $len - 1);
+            $this->esmtp[$verb] = $arguments;
+        }
+
+        if (!isset($this->esmtp['PIPELINING'])) {
+            $this->pipelining = false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the name of the best authentication method that the server
+     * has advertised.
+     *
+     * @return mixed Returns a string containing the name of the best
+     *               supported authentication method or a PEAR_Error object
+     *               if a failure condition is encountered.
+     * @since 1.1.0
+     */
+    protected function getBestAuthMethod()
+    {
+        $available_methods = explode(' ', $this->esmtp['AUTH']);
+
+        foreach ($this->auth_methods as $method => $callback) {
+            if (in_array($method, $available_methods)) {
+                return $method;
+            }
+        }
+
+        return PEAR::raiseError('No supported authentication methods');
+    }
+
+    /**
+     * Attempt to do SMTP authentication.
+     *
+     * @param string $uid    The userid to authenticate as.
+     * @param string $pwd    The password to authenticate with.
+     * @param string $method The requested authentication method.  If none is
+     *                       specified, the best supported method will be used.
+     * @param bool   $tls    Flag indicating whether or not TLS should be attempted.
+     * @param string $authz  An optional authorization identifier.  If specified, this
+     *                       identifier will be used as the authorization proxy.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function auth($uid, $pwd , $method = '', $tls = true, $authz = '')
+    {
+        /* We can only attempt a TLS connection if one has been requested,
+         * we're running PHP 5.1.0 or later, have access to the OpenSSL
+         * extension, are connected to an SMTP server which supports the
+         * STARTTLS extension, and aren't already connected over a secure
+         * (SSL) socket connection. */
+        if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=')
+            && extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
+            && strncasecmp($this->host, 'ssl://', 6) !== 0
+        ) {
+            /* Start the TLS connection attempt. */
+            if (PEAR::isError($result = $this->put('STARTTLS'))) {
+                return $result;
+            }
+            if (PEAR::isError($result = $this->parseResponse(220))) {
+                return $result;
+            }
+            if (isset($this->socket_options['ssl']['crypto_method'])) {
+                $crypto_method = $this->socket_options['ssl']['crypto_method'];
+            } else {
+                /* STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT constant does not exist
+                 * and STREAM_CRYPTO_METHOD_SSLv23_CLIENT constant is
+                 * inconsistent across PHP versions. */
+                $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT
+                                 | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
+                                 | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+            }
+            if (PEAR::isError($result = $this->socket->enableCrypto(true, $crypto_method))) {
+                return $result;
+            } elseif ($result !== true) {
+                return PEAR::raiseError('STARTTLS failed');
+            }
+
+            /* Send EHLO again to recieve the AUTH string from the
+             * SMTP server. */
+            $this->negotiate();
+        }
+
+        if (empty($this->esmtp['AUTH'])) {
+            return PEAR::raiseError('SMTP server does not support authentication');
+        }
+
+        /* If no method has been specified, get the name of the best
+         * supported method advertised by the SMTP server. */
+        if (empty($method)) {
+            if (PEAR::isError($method = $this->getBestAuthMethod())) {
+                /* Return the PEAR_Error object from _getBestAuthMethod(). */
+                return $method;
+            }
+        } else {
+            $method = strtoupper($method);
+            if (!array_key_exists($method, $this->auth_methods)) {
+                return PEAR::raiseError("$method is not a supported authentication method");
+            }
+        }
+
+        if (!isset($this->auth_methods[$method])) {
+            return PEAR::raiseError("$method is not a supported authentication method");
+        }
+
+        if (!is_callable($this->auth_methods[$method], false)) {
+            return PEAR::raiseError("$method authentication method cannot be called");
+        }
+
+        if (is_array($this->auth_methods[$method])) {
+            list($object, $method) = $this->auth_methods[$method];
+            $result = $object->{$method}($uid, $pwd, $authz, $this);
+        } else {
+            $func   = $this->auth_methods[$method];
+            $result = $func($uid, $pwd, $authz, $this);
+        }
+
+        /* If an error was encountered, return the PEAR_Error object. */
+        if (PEAR::isError($result)) {
+            return $result;
+        }
+
+        return true;
+    }
+
+    /**
+     * Add a new authentication method.
+     *
+     * @param string $name     The authentication method name (e.g. 'PLAIN')
+     * @param mixed  $callback The authentication callback (given as the name of a
+     *                         function or as an (object, method name) array).
+     * @param bool   $prepend  Should the new method be prepended to the list of
+     *                         available methods?  This is the default behavior,
+     *                         giving the new method the highest priority.
+     *
+     * @return mixed True on success or a PEAR_Error object on failure.
+     *
+     * @since 1.6.0
+     */
+    public function setAuthMethod($name, $callback, $prepend = true)
+    {
+        if (!is_string($name)) {
+            return PEAR::raiseError('Method name is not a string');
+        }
+
+        if (!is_string($callback) && !is_array($callback)) {
+            return PEAR::raiseError('Method callback must be string or array');
+        }
+
+        if (is_array($callback)) {
+            if (!is_object($callback[0]) || !is_string($callback[1])) {
+                return PEAR::raiseError('Bad mMethod callback array');
+            }
+        }
+
+        if ($prepend) {
+            $this->auth_methods = array_merge(
+                array($name => $callback), $this->auth_methods
+            );
+        } else {
+            $this->auth_methods[$name] = $callback;
+        }
+
+        return true;
+    }
+
+    /**
+     * Authenticates the user using the DIGEST-MD5 method.
+     *
+     * @param string $uid   The userid to authenticate as.
+     * @param string $pwd   The password to authenticate with.
+     * @param string $authz The optional authorization proxy identifier.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.1.0
+     */
+    protected function authDigestMD5($uid, $pwd, $authz = '')
+    {
+        if (PEAR::isError($error = $this->put('AUTH', 'DIGEST-MD5'))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            /* 503: Error: already authenticated */
+            if ($this->code === 503) {
+                return true;
+            }
+            return $error;
+        }
+
+        $auth_sasl = new Auth_SASL;
+        $digest    = $auth_sasl->factory('digest-md5');
+        $challenge = base64_decode($this->arguments[0]);
+        $auth_str  = base64_encode(
+            $digest->getResponse($uid, $pwd, $challenge, $this->host, "smtp", $authz)
+        );
+
+        if (PEAR::isError($error = $this->put($auth_str))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            return $error;
+        }
+
+        /* We don't use the protocol's third step because SMTP doesn't
+         * allow subsequent authentication, so we just silently ignore
+         * it. */
+        if (PEAR::isError($error = $this->put(''))) {
+            return $error;
+        }
+        /* 235: Authentication successful */
+        if (PEAR::isError($error = $this->parseResponse(235))) {
+            return $error;
+        }
+    }
+
+    /**
+     * Authenticates the user using the CRAM-MD5 method.
+     *
+     * @param string $uid   The userid to authenticate as.
+     * @param string $pwd   The password to authenticate with.
+     * @param string $authz The optional authorization proxy identifier.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.1.0
+     */
+    protected function authCRAMMD5($uid, $pwd, $authz = '')
+    {
+        if (PEAR::isError($error = $this->put('AUTH', 'CRAM-MD5'))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            /* 503: Error: already authenticated */
+            if ($this->code === 503) {
+                return true;
+            }
+            return $error;
+        }
+
+        $auth_sasl = new Auth_SASL;
+        $challenge = base64_decode($this->arguments[0]);
+        $cram      = $auth_sasl->factory('cram-md5');
+        $auth_str  = base64_encode($cram->getResponse($uid, $pwd, $challenge));
+
+        if (PEAR::isError($error = $this->put($auth_str))) {
+            return $error;
+        }
+
+        /* 235: Authentication successful */
+        if (PEAR::isError($error = $this->parseResponse(235))) {
+            return $error;
+        }
+    }
+
+    /**
+     * Authenticates the user using the LOGIN method.
+     *
+     * @param string $uid   The userid to authenticate as.
+     * @param string $pwd   The password to authenticate with.
+     * @param string $authz The optional authorization proxy identifier.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.1.0
+     */
+    protected function authLogin($uid, $pwd, $authz = '')
+    {
+        if (PEAR::isError($error = $this->put('AUTH', 'LOGIN'))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            /* 503: Error: already authenticated */
+            if ($this->code === 503) {
+                return true;
+            }
+            return $error;
+        }
+
+        if (PEAR::isError($error = $this->put(base64_encode($uid)))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            return $error;
+        }
+
+        if (PEAR::isError($error = $this->put(base64_encode($pwd)))) {
+            return $error;
+        }
+
+        /* 235: Authentication successful */
+        if (PEAR::isError($error = $this->parseResponse(235))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Authenticates the user using the PLAIN method.
+     *
+     * @param string $uid   The userid to authenticate as.
+     * @param string $pwd   The password to authenticate with.
+     * @param string $authz The optional authorization proxy identifier.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.1.0
+     */
+    protected function authPlain($uid, $pwd, $authz = '')
+    {
+        if (PEAR::isError($error = $this->put('AUTH', 'PLAIN'))) {
+            return $error;
+        }
+        /* 334: Continue authentication request */
+        if (PEAR::isError($error = $this->parseResponse(334))) {
+            /* 503: Error: already authenticated */
+            if ($this->code === 503) {
+                return true;
+            }
+            return $error;
+        }
+
+        $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd);
+
+        if (PEAR::isError($error = $this->put($auth_str))) {
+            return $error;
+        }
+
+        /* 235: Authentication successful */
+        if (PEAR::isError($error = $this->parseResponse(235))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the HELO command.
+     *
+     * @param string $domain The domain name to say we are.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function helo($domain)
+    {
+        if (PEAR::isError($error = $this->put('HELO', $domain))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Return the list of SMTP service extensions advertised by the server.
+     *
+     * @return array The list of SMTP service extensions.
+     * @since 1.3
+     */
+    public function getServiceExtensions()
+    {
+        return $this->esmtp;
+    }
+
+    /**
+     * Send the MAIL FROM: command.
+     *
+     * @param string $sender The sender (reverse path) to set.
+     * @param string $params String containing additional MAIL parameters,
+     *                       such as the NOTIFY flags defined by RFC 1891
+     *                       or the VERP protocol.
+     *
+     *                       If $params is an array, only the 'verp' option
+     *                       is supported.  If 'verp' is true, the XVERP
+     *                       parameter is appended to the MAIL command.
+     *                       If the 'verp' value is a string, the full
+     *                       XVERP=value parameter is appended.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function mailFrom($sender, $params = null)
+    {
+        $args = "FROM:<$sender>";
+
+        /* Support the deprecated array form of $params. */
+        if (is_array($params) && isset($params['verp'])) {
+            if ($params['verp'] === true) {
+                $args .= ' XVERP';
+            } elseif (trim($params['verp'])) {
+                $args .= ' XVERP=' . $params['verp'];
+            }
+        } elseif (is_string($params) && !empty($params)) {
+            $args .= ' ' . $params;
+        }
+
+        if (PEAR::isError($error = $this->put('MAIL', $args))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the RCPT TO: command.
+     *
+     * @param string $recipient The recipient (forward path) to add.
+     * @param string $params    String containing additional RCPT parameters,
+     *                          such as the NOTIFY flags defined by RFC 1891.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     *
+     * @since 1.0
+     */
+    public function rcptTo($recipient, $params = null)
+    {
+        $args = "TO:<$recipient>";
+        if (is_string($params)) {
+            $args .= ' ' . $params;
+        }
+
+        if (PEAR::isError($error = $this->put('RCPT', $args))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(array(250, 251), $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Quote the data so that it meets SMTP standards.
+     *
+     * This is provided as a separate public function to facilitate
+     * easier overloading for the cases where it is desirable to
+     * customize the quoting behavior.
+     *
+     * @param string &$data The message text to quote. The string must be passed
+     *                      by reference, and the text will be modified in place.
+     *
+     * @since 1.2
+     */
+    public function quotedata(&$data)
+    {
+        /* Because a single leading period (.) signifies an end to the
+         * data, legitimate leading periods need to be "doubled" ('..'). */
+        $data = preg_replace('/^\./m', '..', $data);
+
+        /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */
+        $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data);
+    }
+
+    /**
+     * Send the DATA command.
+     *
+     * @param mixed  $data    The message data, either as a string or an open
+     *                        file resource.
+     * @param string $headers The message headers.  If $headers is provided,
+     *                        $data is assumed to contain only body data.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function data($data, $headers = null)
+    {
+        /* Verify that $data is a supported type. */
+        if (!is_string($data) && !is_resource($data)) {
+            return PEAR::raiseError('Expected a string or file resource');
+        }
+
+        /* Start by considering the size of the optional headers string.  We
+         * also account for the addition 4 character "\r\n\r\n" separator
+         * sequence. */
+        $size = $headers_size = (is_null($headers)) ? 0 : strlen($headers) + 4;
+
+        if (is_resource($data)) {
+            $stat = fstat($data);
+            if ($stat === false) {
+                return PEAR::raiseError('Failed to get file size');
+            }
+            $size += $stat['size'];
+        } else {
+            $size += strlen($data);
+        }
+
+        /* RFC 1870, section 3, subsection 3 states "a value of zero indicates
+         * that no fixed maximum message size is in force".  Furthermore, it
+         * says that if "the parameter is omitted no information is conveyed
+         * about the server's fixed maximum message size". */
+        $limit = (isset($this->esmtp['SIZE'])) ? $this->esmtp['SIZE'] : 0;
+        if ($limit > 0 && $size >= $limit) {
+            $this->disconnect();
+            return PEAR::raiseError('Message size exceeds server limit');
+        }
+
+        /* Initiate the DATA command. */
+        if (PEAR::isError($error = $this->put('DATA'))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(354))) {
+            return $error;
+        }
+
+        /* If we have a separate headers string, send it first. */
+        if (!is_null($headers)) {
+            $this->quotedata($headers);
+            if (PEAR::isError($result = $this->send($headers . "\r\n\r\n"))) {
+                return $result;
+            }
+
+            /* Subtract the headers size now that they've been sent. */
+            $size -= $headers_size;
+        }
+
+        /* Now we can send the message body data. */
+        if (is_resource($data)) {
+            /* Stream the contents of the file resource out over our socket
+             * connection, line by line.  Each line must be run through the
+             * quoting routine. */
+            while (strlen($line = fread($data, 8192)) > 0) {
+                /* If the last character is an newline, we need to grab the
+                 * next character to check to see if it is a period. */
+                while (!feof($data)) {
+                    $char = fread($data, 1);
+                    $line .= $char;
+                    if ($char != "\n") {
+                        break;
+                    }
+                }
+                $this->quotedata($line);
+                if (PEAR::isError($result = $this->send($line))) {
+                    return $result;
+                }
+            }
+
+             $last = $line;
+        } else {
+            /*
+             * Break up the data by sending one chunk (up to 512k) at a time.
+             * This approach reduces our peak memory usage.
+             */
+            for ($offset = 0; $offset < $size;) {
+                $end = $offset + 512000;
+
+                /*
+                 * Ensure we don't read beyond our data size or span multiple
+                 * lines.  quotedata() can't properly handle character data
+                 * that's split across two line break boundaries.
+                 */
+                if ($end >= $size) {
+                    $end = $size;
+                } else {
+                    for (; $end < $size; $end++) {
+                        if ($data[$end] != "\n") {
+                            break;
+                        }
+                    }
+                }
+
+                /* Extract our chunk and run it through the quoting routine. */
+                $chunk = substr($data, $offset, $end - $offset);
+                $this->quotedata($chunk);
+
+                /* If we run into a problem along the way, abort. */
+                if (PEAR::isError($result = $this->send($chunk))) {
+                    return $result;
+                }
+
+                /* Advance the offset to the end of this chunk. */
+                $offset = $end;
+            }
+
+            $last = $chunk;
+        }
+
+        /* Don't add another CRLF sequence if it's already in the data */
+        $terminator = (substr($last, -2) == "\r\n" ? '' : "\r\n") . ".\r\n";
+
+        /* Finally, send the DATA terminator sequence. */
+        if (PEAR::isError($result = $this->send($terminator))) {
+            return $result;
+        }
+
+        /* Verify that the data was successfully received by the server. */
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the SEND FROM: command.
+     *
+     * @param string $path The reverse path to send.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.2.6
+     */
+    public function sendFrom($path)
+    {
+        if (PEAR::isError($error = $this->put('SEND', "FROM:<$path>"))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the SOML FROM: command.
+     *
+     * @param string $path The reverse path to send.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.2.6
+     */
+    public function somlFrom($path)
+    {
+        if (PEAR::isError($error = $this->put('SOML', "FROM:<$path>"))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the SAML FROM: command.
+     *
+     * @param string $path The reverse path to send.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.2.6
+     */
+    public function samlFrom($path)
+    {
+        if (PEAR::isError($error = $this->put('SAML', "FROM:<$path>"))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the RSET command.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since  1.0
+     */
+    public function rset()
+    {
+        if (PEAR::isError($error = $this->put('RSET'))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the VRFY command.
+     *
+     * @param string $string The string to verify
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function vrfy($string)
+    {
+        /* Note: 251 is also a valid response code */
+        if (PEAR::isError($error = $this->put('VRFY', $string))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(array(250, 252)))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Send the NOOP command.
+     *
+     * @return mixed Returns a PEAR_Error with an error message on any
+     *               kind of failure, or true on success.
+     * @since 1.0
+     */
+    public function noop()
+    {
+        if (PEAR::isError($error = $this->put('NOOP'))) {
+            return $error;
+        }
+        if (PEAR::isError($error = $this->parseResponse(250))) {
+            return $error;
+        }
+
+        return true;
+    }
+
+    /**
+     * Backwards-compatibility method.  identifySender()'s functionality is
+     * now handled internally.
+     *
+     * @return boolean This method always return true.
+     *
+     * @since 1.0
+     */
+    public function identifySender()
+    {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/README.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1 @@
+docs/guide.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,48 @@
+{
+    "authors": [
+        {
+            "email": "jon@php.net",
+            "name": "Jon Parise",
+            "homepage": "http://www.indelible.org",
+            "role": "Lead"
+        },
+        {
+            "email": "chuck@horde.org",
+            "name": "Chuck Hagenbuch",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Net": "./"
+        }
+    },
+    "description": "An implementation of the SMTP protocol",
+    "keywords": [
+        "smtp",
+        "mail",
+        "email"
+    ],
+    "include-path": [
+        "./"
+    ],
+    "license": "PHP-3.01",
+    "name": "pear/net_smtp",
+    "homepage": "http://pear.github.io/Net_SMTP/",
+    "support": {
+        "issues": "https://github.com/pear/Net_SMTP/issues",
+        "source": "https://github.com/pear/Net_SMTP"
+    },
+    "type": "library",
+    "require": {
+        "php": ">=5.4.0",
+        "pear/pear-core-minimal": "*",
+        "pear/net_socket": "*"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "*"
+    },
+    "suggest": {
+        "pear/auth_sasl": "Install optionally via your project's composer.json"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/docs/docutils.conf	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,16 @@
+[general]
+source-link: no
+no-datestamp: yes
+generator: off
+strip-comments: yes
+toc-backlinks: no
+
+[standalone reader]
+docinfo_xform: no
+
+[html4css1 writer]
+stylesheet-path: docutils.css
+embed-stylesheet: yes
+field-name-limit: 20
+cloak-email-addresses: yes
+initial-header-level: 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/docs/docutils.css	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,108 @@
+body {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 0.8em;
+	letter-spacing: 0.01em;
+	line-height: 1.5em;
+	text-align: justify;
+	margin: 0 auto;
+	width: 48em;
+}
+
+a:link, a:visited {
+	color: #00c;
+	padding-bottom: 0;
+	text-decoration: none;
+	border-bottom: 1px solid #dbd5c5;
+}
+
+a:hover {
+	padding-bottom: 0;
+	border-bottom: 2px solid #dbd5c5;
+}
+
+h1, h2, h3 {
+	font-family: Georgia, "Times New Roman", Times, serif;
+	font-weight: normal;
+	line-height: normal;
+}
+
+h1 {
+	font-size: 2.1em;
+	letter-spacing: -0.02em;
+	margin-top: 30px;
+	text-align: center;
+}
+
+h2 {
+	font-size: 1.6em;
+	font-style: italic;
+	margin: 30px 0 10px 0;
+}
+
+h3 {
+	font-size: 1.3em;
+	font-style: italic;
+	margin-top: 20px;
+}
+
+li {
+	line-height: 135%;
+}
+
+ul, ol {
+	margin: 0 0 1em 2em;
+	padding: 0 0 0 1em;
+}
+
+hr {
+	background-color: #ccc;
+	border: 0px none;
+	color: #eee;
+	height: 1px;
+	margin: 30px 0px;
+}
+
+blockquote, pre {
+	background-color: #f9f9f9;
+	border: 1px solid #eee;
+	border-left: 2px solid #ccc;
+	padding: 1em;
+}
+
+blockquote {
+	color: #666;
+	line-height: 1.3em;
+}
+
+pre {
+	line-height: normal;
+	overflow: auto;
+}
+
+pre.code-block {
+	padding-bottom: 0;
+}
+
+tt, pre, code, samp, kbd {
+	color: #333;
+	font-family: Consolas, 'Lucida Console', monospace;
+	font-size: 13px;
+}
+
+label em {
+	font-weight: normal;
+}
+
+form {
+	margin: 0;
+	padding: 0;
+}
+
+.code-block .err { border: 1px solid #FF0000 } /* Error */
+.code-block .k,.kn { color: #369 } /* Keywords */
+.code-block .c,.cm,.cp,.c1 { color: #666; font-style: italic } /* Comments */
+.code-block .n { color: #000 } /* Names */
+.code-block .p { color: #000 } /* Punctuation */
+.code-block .nc,.nf,.nn { color: #333; font-weight: bold } /* Symbol Names */
+.code-block .s { color: #933 } /* Literal.String */
+.code-block .sd { color: #666 } /* Literal.String.Doc */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/docs/guide.txt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,267 @@
+======================
+ The Net_SMTP Package
+======================
+
+--------------------
+ User Documentation
+--------------------
+
+:Author:    Jon Parise
+:Contact:   jon@php.net
+
+.. contents:: Table of Contents
+.. section-numbering::
+
+Dependencies
+============
+
+The ``PEAR_Error`` Class
+------------------------
+
+The Net_SMTP package uses the `PEAR_Error`_ class for all of its `error
+handling`_.
+
+The ``Net_Socket`` Package
+--------------------------
+
+The Net_Socket_ package is used as the basis for all network communications.
+Connection options can be specified via the `$socket_options` construction
+parameter::
+
+    $socket_options = array('ssl' => array('verify_peer_name' => false));
+    $smtp = new Net_SMTP($host, null, null, false, 0, $socket_options);
+
+**Note:** PHP 5.6 introduced `OpenSSL changes`_. Peer certificate verification
+is now enabled by default. Although not recommended, `$socket_options` can be
+used to disable peer verification (as shown above).
+
+.. _OpenSSL changes: http://php.net/manual/en/migration56.openssl.php
+
+The ``Auth_SASL`` Package
+-------------------------
+
+The `Auth_SASL`_ package is an optional dependency.  If it is available, the
+Net_SMTP package will be able to support the DIGEST-MD5_ and CRAM-MD5_ SMTP
+authentication methods.  Otherwise, only the LOGIN_ and PLAIN_ methods will
+be available.
+
+Error Handling
+==============
+
+All of the Net_SMTP class's public methods return a PEAR_Error_ object if an
+error occurs.  The standard way to check for a PEAR_Error object is by using
+`PEAR::isError()`_::
+
+    if (PEAR::isError($error = $smtp->connect())) {
+        die($error->getMessage());
+    }
+
+.. _PEAR::isError(): http://pear.php.net/manual/en/core.pear.pear.iserror.php
+
+SMTP Authentication
+===================
+
+The Net_SMTP package supports the SMTP authentication standard (as defined
+by RFC-2554_).  The Net_SMTP package supports the following authentication
+methods, in order of preference:
+
+.. _RFC-2554: http://www.ietf.org/rfc/rfc2554.txt
+
+DIGEST-MD5
+----------
+
+The DIGEST-MD5 authentication method uses `RSA Data Security Inc.`_'s MD5
+Message Digest algorithm.  It is considered the most secure method of SMTP
+authentication.
+
+**Note:** The DIGEST-MD5 authentication method is only supported if the
+AUTH_SASL_ package is available.
+
+.. _RSA Data Security Inc.: http://www.rsasecurity.com/
+
+CRAM-MD5
+--------
+
+The CRAM-MD5 authentication method has been superseded by the DIGEST-MD5_
+method in terms of security.  It is provided here for compatibility with
+older SMTP servers that may not support the newer DIGEST-MD5 algorithm.
+
+**Note:** The CRAM-MD5 authentication method is only supported if the
+AUTH_SASL_ package is available.
+
+LOGIN
+-----
+
+The LOGIN authentication method encrypts the user's password using the
+Base64_ encoding scheme.  Because decrypting a Base64-encoded string is
+trivial, LOGIN is not considered a secure authentication method and should
+be avoided.
+
+.. _Base64: http://www.php.net/manual/en/function.base64-encode.php
+
+PLAIN
+-----
+
+The PLAIN authentication method sends the user's password in plain text.
+This method of authentication is not secure and should be avoided.
+
+Secure Connections
+==================
+
+If `secure socket transports`_ have been enabled in PHP, it is possible to
+establish a secure connection to the remote SMTP server::
+
+    $smtp = new Net_SMTP('ssl://mail.example.com', 465);
+
+This example connects to ``mail.example.com`` on port 465 (a common SMTPS
+port) using the ``ssl://`` transport.
+
+.. _secure socket transports: http://www.php.net/transports
+
+Sending Data
+============
+
+Message data is sent using the ``data()`` method.  The data can be supplied
+as a single string or as an open file resource.
+
+If a string is provided, it is passed through the `data quoting`_ system and
+sent to the socket connection as a single block.  These operations are all
+memory-based, so sending large messages may result in high memory usage.
+
+If an open file resource is provided, the ``data()`` method will read the
+message data from the file line-by-line.  Each chunk will be quoted and sent
+to the socket connection individually, reducing the overall memory overhead of
+this data sending operation.
+
+Header data can be specified separately from message body data by passing it
+as the optional second parameter to ``data()``.  This is especially useful
+when an open file resource is being used to supply message data because it
+allows header fields (like *Subject:*) to be built dynamically at runtime.
+
+::
+
+    $smtp->data($fp, "Subject: My Subject");
+
+Data Quoting
+============
+
+By default, all outbound string data is quoted in accordance with SMTP
+standards.  This means that all native Unix (``\n``) and Mac (``\r``) line
+endings are converted to Internet-standard CRLF (``\r\n``) line endings.
+Also, because the SMTP protocol uses a single leading period (``.``) to signal
+an end to the message data, single leading periods in the original data
+string are "doubled" (e.g. "``..``").
+
+These string transformation can be expensive when large blocks of data are
+involved.  For example, the Net_SMTP package is not aware of MIME parts (it
+just sees the MIME message as one big string of characters), so it is not
+able to skip non-text attachments when searching for characters that may
+need to be quoted.
+
+Because of this, it is possible to extend the Net_SMTP class in order to
+implement your own custom quoting routine.  Just create a new class based on
+the Net_SMTP class and reimplement the ``quotedata()`` method::
+
+    require 'Net_SMTP.php';
+
+    class Net_SMTP_custom extends Net_SMTP
+    {
+        function quotedata($data)
+        {
+            /* Perform custom data quoting */
+        }
+    }
+
+Note that the ``$data`` parameter will be passed to the ``quotedata()``
+function `by reference`_.  This means that you can operate directly on
+``$data``.  It also the overhead of copying a large ``$data`` string to and
+from the ``quotedata()`` method.
+
+.. _by reference: http://www.php.net/manual/en/language.references.pass.php
+
+Server Responses
+================
+
+The Net_SMTP package retains the server's last response for further
+inspection.  The ``getResponse()`` method returns a 2-tuple (two element
+array) containing the server's response code as an integer and the response's
+arguments as a string.
+
+Upon a successful connection, the server's greeting string is available via
+the ``getGreeting()`` method.
+
+Debugging
+=========
+
+The Net_SMTP package contains built-in debugging output routines (disabled by
+default).  Debugging output must be explicitly enabled via the ``setDebug()``
+method::
+
+    $smtp->setDebug(true);
+
+The debugging messages will be sent to the standard output stream by default.
+If you need more control over the output, you can optionally install your own
+debug handler.
+
+::
+
+    function debugHandler($smtp, $message)
+    {
+        echo "[$smtp->host] $message\n";
+    }
+
+    $smtp->setDebug(true, "debugHandler");
+
+
+Examples
+========
+
+Basic Use
+---------
+
+The following script demonstrates how a simple email message can be sent
+using the Net_SMTP package::
+
+    require 'Net/SMTP.php';
+
+    $host = 'mail.example.com';
+    $from = 'user@example.com';
+    $rcpt = array('recipient1@example.com', 'recipient2@example.com');
+    $subj = "Subject: Test Message\n";
+    $body = "Body Line 1\nBody Line 2";
+
+    /* Create a new Net_SMTP object. */
+    if (! ($smtp = new Net_SMTP($host))) {
+        die("Unable to instantiate Net_SMTP object\n");
+    }
+
+    /* Connect to the SMTP server. */
+    if (PEAR::isError($e = $smtp->connect())) {
+        die($e->getMessage() . "\n");
+    }
+
+    /* Send the 'MAIL FROM:' SMTP command. */
+    if (PEAR::isError($smtp->mailFrom($from))) {
+        die("Unable to set sender to <$from>\n");
+    }
+
+    /* Address the message to each of the recipients. */
+    foreach ($rcpt as $to) {
+        if (PEAR::isError($res = $smtp->rcptTo($to))) {
+            die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
+        }
+    }
+
+    /* Set the body of the message. */
+    if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) {
+        die("Unable to send data\n");
+    }
+
+    /* Disconnect from the SMTP server. */
+    $smtp->disconnect();
+
+.. _PEAR_Error: http://pear.php.net/manual/en/core.pear.pear-error.php
+.. _Net_Socket: http://pear.php.net/package/Net_Socket
+.. _Auth_SASL: http://pear.php.net/package/Auth_SASL
+
+.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=78 ft=rst:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/examples/basic.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,39 @@
+<?php
+
+require 'Net/SMTP.php';
+
+$host = 'mail.example.com';
+$from = 'user@example.com';
+$rcpt = array('recipient1@example.com', 'recipient2@example.com');
+$subj = "Subject: Test Message\n";
+$body = "Body Line 1\nBody Line 2";
+
+/* Create a new Net_SMTP object. */
+if (! ($smtp = new Net_SMTP($host))) {
+    die("Unable to instantiate Net_SMTP object\n");
+}
+
+/* Connect to the SMTP server. */
+if (PEAR::isError($e = $smtp->connect())) {
+    die($e->getMessage() . "\n");
+}
+$smtp->auth('username','password');
+/* Send the 'MAIL FROM:' SMTP command. */
+if (PEAR::isError($smtp->mailFrom($from))) {
+    die("Unable to set sender to <$from>\n");
+}
+
+/* Address the message to each of the recipients. */
+foreach ($rcpt as $to) {
+    if (PEAR::isError($res = $smtp->rcptTo($to))) {
+        die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
+    }
+}
+
+/* Set the body of the message. */
+if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) {
+    die("Unable to send data\n");
+}
+
+/* Disconnect from the SMTP server. */
+$smtp->disconnect();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.7.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+    http://pear.php.net/dtd/tasks-1.0.xsd
+    http://pear.php.net/dtd/package-2.0
+    http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Net_SMTP</name>
+ <channel>pear.php.net</channel>
+ <summary>An implementation of the SMTP protocol</summary>
+ <description>Provides an implementation of the SMTP protocol using PEAR&apos;s Net_Socket class.</description>
+ <lead>
+  <name>Jon Parise</name>
+  <user>jon</user>
+  <email>jon@php.net</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Chuck Hagenbuch</name>
+  <user>chagenbu</user>
+  <email>chuck@horde.org</email>
+  <active>yes</active>
+ </lead>
+ <date>2017-01-14</date>
+ <time>00:00:00</time>
+ <version>
+  <release>1.7.3</release>
+  <api>1.3.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.php.net/license/3_01.txt">PHP License</license>
+ <notes>- Fix MIME boundary size calculation (#34)
+- Workaround E_DEPRECATED warning on Auth_SASL::factory() call (#29)
+ </notes>
+ <contents>
+  <dir baseinstalldir="/" name="/">
+   <file name="LICENSE" role="doc" />
+   <dir name="docs">
+    <file name="guide.txt" role="doc" />
+   </dir> <!-- /docs -->
+   <dir name="examples">
+    <file name="basic.php" role="doc" />
+   </dir> <!-- /examples -->
+   <dir name="tests">
+    <file name="auth.phpt" role="test" />
+    <file name="basic.phpt" role="test" />
+    <file name="config.php.dist" role="test" />
+    <file name="quotedata.phpt" role="test" />
+   </dir> <!-- /tests -->
+   <file name="Net/SMTP.php" role="php" />
+  </dir> <!-- / -->
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.3</min>
+   </pearinstaller>
+   <package>
+    <name>Net_Socket</name>
+    <channel>pear.php.net</channel>
+    <min>1.0.7</min>
+   </package>
+  </required>
+  <optional>
+   <package>
+    <name>Auth_SASL</name>
+    <channel>pear.php.net</channel>
+    <min>1.0.5</min>
+   </package>
+  </optional>
+ </dependencies>
+ <phprelease />
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/phpdoc.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+phpdoc -f Net/SMTP.php -t docs/api -p -ti "Net_SMTP Package API" -dn Net_SMTP -dc Net_SMTP -ed examples
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/tests/auth.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,28 @@
+--TEST--
+Net_SMTP: SMTP Authentication
+--SKIPIF--
+<?php if (!@include('config.php')) die("skip\n");
+--FILE--
+<?php
+
+require_once 'Net/SMTP.php';
+require_once 'config.php';
+
+if (! ($smtp = new Net_SMTP(TEST_HOSTNAME, TEST_PORT, TEST_LOCALHOST))) {
+	die("Unable to instantiate Net_SMTP object\n");
+}
+
+if (PEAR::isError($e = $smtp->connect())) {
+	die($e->getMessage() . "\n");
+}
+
+if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) {
+	die("Authentication failure\n");
+}
+
+$smtp->disconnect();
+
+echo 'Success!';
+
+--EXPECT--
+Success!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/tests/basic.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+--TEST--
+Net_SMTP: Basic Functionality
+--SKIPIF--
+<?php if (!@include('config.php')) die("skip\n");
+--FILE--
+<?php
+
+require_once 'Net/SMTP.php';
+require_once 'config.php';
+
+if (! ($smtp = new Net_SMTP(TEST_HOSTNAME, TEST_PORT, TEST_LOCALHOST))) {
+    die("Unable to instantiate Net_SMTP object\n");
+}
+
+if (PEAR::isError($e = $smtp->connect())) {
+    die($e->getMessage() . "\n");
+}
+
+if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) {
+    die("Authentication failure\n");
+}
+
+if (PEAR::isError($smtp->mailFrom(TEST_FROM))) {
+    die('Unable to set sender to <' . TEST_FROM . ">\n");
+}
+
+if (PEAR::isError($res = $smtp->rcptTo(TEST_TO))) {
+    die('Unable to add recipient <' . TEST_TO . '>: ' .
+        $res->getMessage() . "\n");
+}
+
+$headers = 'Subject: ' . TEST_SUBJECT;
+if (PEAR::isError($smtp->data(TEST_BODY, $headers))) {
+    die("Unable to send data\n");
+}
+
+$smtp->disconnect();
+
+echo 'Success!';
+
+--EXPECT--
+Success!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/tests/config.php.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Copy this file to config.php and customize the following values to
+ * suit your configuration.
+ */
+
+define('TEST_HOSTNAME',     'localhost');
+define('TEST_PORT',         25);
+define('TEST_LOCALHOST',    'localhost');
+define('TEST_AUTH_USER',    'jon');
+define('TEST_AUTH_PASS',    'secret');
+define('TEST_FROM',         'from@example.com');
+define('TEST_TO',           'to@example.com');
+define('TEST_SUBJECT',      'Test Subject');
+define('TEST_BODY',         'Test Body');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_smtp/tests/quotedata.phpt	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,70 @@
+--TEST--
+Net_SMTP: quotedata()
+--FILE--
+<?php
+
+require_once 'Net/SMTP.php';
+
+$tests = array(
+    /* Newlines */
+    "\n"               => "\r\n",
+    "\r\n"             => "\r\n",
+    "\nxx"             => "\r\nxx",
+    "xx\n"             => "xx\r\n",
+    "xx\nxx"           => "xx\r\nxx",
+    "\n\nxx"           => "\r\n\r\nxx",
+    "xx\n\nxx"         => "xx\r\n\r\nxx",
+    "xx\n\n"           => "xx\r\n\r\n",
+    "\r\nxx"           => "\r\nxx",
+    "xx\r\n"           => "xx\r\n",
+    "xx\r\nxx"         => "xx\r\nxx",
+    "\r\n\r\nxx"       => "\r\n\r\nxx",
+    "xx\r\n\r\nxx"     => "xx\r\n\r\nxx",
+    "xx\r\n\r\n"       => "xx\r\n\r\n",
+    "\r\n\nxx"         => "\r\n\r\nxx",
+    "\n\r\nxx"         => "\r\n\r\nxx",
+    "xx\r\n\nxx"       => "xx\r\n\r\nxx",
+    "xx\n\r\nxx"       => "xx\r\n\r\nxx",
+    "xx\r\n\n"         => "xx\r\n\r\n",
+    "xx\n\r\n"         => "xx\r\n\r\n",
+    "\r"               => "\r\n",
+    "\rxx"             => "\r\nxx",
+    "xx\rxx"           => "xx\r\nxx",
+    "xx\r"             => "xx\r\n",
+    "\r\r"             => "\r\n\r\n",
+    "\r\rxx"           => "\r\n\r\nxx",
+    "xx\r\rxx"         => "xx\r\n\r\nxx",
+    "xx\r\r"           => "xx\r\n\r\n",
+    "xx\rxx\nxx\r\nxx" => "xx\r\nxx\r\nxx\r\nxx",
+    "\r\r\n\n"         => "\r\n\r\n\r\n",
+
+    /* Dots */
+    "."                 => "..",
+    "xxx\n."            => "xxx\r\n..",
+    "xxx\n.\nxxx"       => "xxx\r\n..\r\nxxx",
+    "xxx.\n.xxx"        => "xxx.\r\n..xxx",
+);
+
+function literal($x)
+{
+    return str_replace(array("\r", "\n"), array('\r', '\n'), $x);
+}
+
+$smtp = new Net_SMTP();
+$error = false;
+foreach ($tests as $input => $expected) {
+    $output = $input;
+    $smtp->quotedata($output);
+    if ($output != $expected) {
+        printf("Error: '%s' => '%s' (expected: '%s')",
+            literal($input), literal($output), literal($expected));
+        $error = true;
+    }
+}
+
+if (!$error) {
+    echo "success\n";
+}
+
+--EXPECT--
+success
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+# composer related
+composer.lock
+composer.phar
+vendor
+
+*.tgz
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,21 @@
+language: php
+sudo: false
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - 7.1
+script:
+  - pear list
+  - pear channel-update pear.php.net
+  - pear upgrade --force pear/pear-1.10.1
+  - pear list
+  - pear install --force package.xml
+  - pear list
+  - pear package
+  - pear package-validate
+  - pear install --force *.tgz
+  - pear list
+  - composer install
+  - ./vendor/bin/phpunit -c phpunit.xml.dist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,9 @@
+Copyright 1997-2017 The PHP Group
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/Net/Socket.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,723 @@
+<?php
+/**
+ * Net_Socket
+ *
+ * PHP Version 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 1997-2017 The PHP Group
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * o Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category  Net
+ * @package   Net_Socket
+ * @author    Stig Bakken <ssb@php.net>
+ * @author    Chuck Hagenbuch <chuck@horde.org>
+ * @copyright 1997-2017 The PHP Group
+ * @license   http://opensource.org/licenses/bsd-license.php BSD-2-Clause
+ * @link      http://pear.php.net/packages/Net_Socket
+ */
+
+require_once 'PEAR.php';
+
+define('NET_SOCKET_READ', 1);
+define('NET_SOCKET_WRITE', 2);
+define('NET_SOCKET_ERROR', 4);
+
+/**
+ * Generalized Socket class.
+ *
+ * @category  Net
+ * @package   Net_Socket
+ * @author    Stig Bakken <ssb@php.net>
+ * @author    Chuck Hagenbuch <chuck@horde.org>
+ * @copyright 1997-2017 The PHP Group
+ * @license   http://opensource.org/licenses/bsd-license.php BSD-2-Clause
+ * @link      http://pear.php.net/packages/Net_Socket
+ */
+class Net_Socket extends PEAR
+{
+    /**
+     * Socket file pointer.
+     * @var resource $fp
+     */
+    public $fp = null;
+
+    /**
+     * Whether the socket is blocking. Defaults to true.
+     * @var boolean $blocking
+     */
+    public $blocking = true;
+
+    /**
+     * Whether the socket is persistent. Defaults to false.
+     * @var boolean $persistent
+     */
+    public $persistent = false;
+
+    /**
+     * The IP address to connect to.
+     * @var string $addr
+     */
+    public $addr = '';
+
+    /**
+     * The port number to connect to.
+     * @var integer $port
+     */
+    public $port = 0;
+
+    /**
+     * Number of seconds to wait on socket operations before assuming
+     * there's no more data. Defaults to no timeout.
+     * @var integer|float $timeout
+     */
+    public $timeout = null;
+
+    /**
+     * Number of bytes to read at a time in readLine() and
+     * readAll(). Defaults to 2048.
+     * @var integer $lineLength
+     */
+    public $lineLength = 2048;
+
+    /**
+     * The string to use as a newline terminator. Usually "\r\n" or "\n".
+     * @var string $newline
+     */
+    public $newline = "\r\n";
+
+    /**
+     * Connect to the specified port. If called when the socket is
+     * already connected, it disconnects and connects again.
+     *
+     * @param string $addr IP address or host name (may be with protocol prefix).
+     * @param integer $port TCP port number.
+     * @param boolean $persistent (optional) Whether the connection is
+     *                            persistent (kept open between requests
+     *                            by the web server).
+     * @param integer $timeout (optional) Connection socket timeout.
+     * @param array $options See options for stream_context_create.
+     *
+     * @access public
+     *
+     * @return boolean|PEAR_Error  True on success or a PEAR_Error on failure.
+     */
+    public function connect(
+        $addr,
+        $port = 0,
+        $persistent = null,
+        $timeout = null,
+        $options = null
+    ) {
+        if (is_resource($this->fp)) {
+            @fclose($this->fp);
+            $this->fp = null;
+        }
+
+        if (!$addr) {
+            return $this->raiseError('$addr cannot be empty');
+        } else {
+            if (strspn($addr, ':.0123456789') === strlen($addr)) {
+                $this->addr = strpos($addr, ':') !== false ? '[' . $addr . ']' : $addr;
+            } else {
+                $this->addr = $addr;
+            }
+        }
+
+        $this->port = $port % 65536;
+
+        if ($persistent !== null) {
+            $this->persistent = $persistent;
+        }
+
+        $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
+        $errno = 0;
+        $errstr = '';
+
+        $old_track_errors = @ini_set('track_errors', 1);
+
+        if ($timeout <= 0) {
+            $timeout = @ini_get('default_socket_timeout');
+        }
+
+        if ($options && function_exists('stream_context_create')) {
+            $context = stream_context_create($options);
+
+            // Since PHP 5 fsockopen doesn't allow context specification
+            if (function_exists('stream_socket_client')) {
+                $flags = STREAM_CLIENT_CONNECT;
+
+                if ($this->persistent) {
+                    $flags = STREAM_CLIENT_PERSISTENT;
+                }
+
+                $addr = $this->addr . ':' . $this->port;
+                $fp = @stream_socket_client($addr, $errno, $errstr,
+                    $timeout, $flags, $context);
+            } else {
+                $fp = @$openfunc($this->addr, $this->port, $errno,
+                    $errstr, $timeout, $context);
+            }
+        } else {
+            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout);
+        }
+
+        if (!$fp) {
+            if ($errno === 0 && !strlen($errstr) && isset($php_errormsg)) {
+                $errstr = $php_errormsg;
+            }
+            @ini_set('track_errors', $old_track_errors);
+
+            return $this->raiseError($errstr, $errno);
+        }
+
+        @ini_set('track_errors', $old_track_errors);
+        $this->fp = $fp;
+        $this->setTimeout();
+
+        return $this->setBlocking($this->blocking);
+    }
+
+    /**
+     * Disconnects from the peer, closes the socket.
+     *
+     * @access public
+     * @return mixed true on success or a PEAR_Error instance otherwise
+     */
+    public function disconnect()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        @fclose($this->fp);
+        $this->fp = null;
+
+        return true;
+    }
+
+    /**
+     * Set the newline character/sequence to use.
+     *
+     * @param string $newline Newline character(s)
+     * @return boolean True
+     */
+    public function setNewline($newline)
+    {
+        $this->newline = $newline;
+
+        return true;
+    }
+
+    /**
+     * Find out if the socket is in blocking mode.
+     *
+     * @access public
+     * @return boolean  The current blocking mode.
+     */
+    public function isBlocking()
+    {
+        return $this->blocking;
+    }
+
+    /**
+     * Sets whether the socket connection should be blocking or
+     * not. A read call to a non-blocking socket will return immediately
+     * if there is no data available, whereas it will block until there
+     * is data for blocking sockets.
+     *
+     * @param boolean $mode True for blocking sockets, false for nonblocking.
+     *
+     * @access public
+     * @return mixed true on success or a PEAR_Error instance otherwise
+     */
+    public function setBlocking($mode)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $this->blocking = $mode;
+        stream_set_blocking($this->fp, (int)$this->blocking);
+
+        return true;
+    }
+
+    /**
+     * Sets the timeout value on socket descriptor,
+     * expressed in the sum of seconds and microseconds
+     *
+     * @param integer $seconds Seconds.
+     * @param integer $microseconds Microseconds, optional.
+     *
+     * @access public
+     * @return mixed True on success or false on failure or
+     *               a PEAR_Error instance when not connected
+     */
+    public function setTimeout($seconds = null, $microseconds = null)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        if ($seconds === null && $microseconds === null) {
+            $seconds = (int)$this->timeout;
+            $microseconds = (int)(($this->timeout - $seconds) * 1000000);
+        } else {
+            $this->timeout = $seconds + $microseconds / 1000000;
+        }
+
+        if ($this->timeout > 0) {
+            return stream_set_timeout($this->fp, (int)$seconds, (int)$microseconds);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Sets the file buffering size on the stream.
+     * See php's stream_set_write_buffer for more information.
+     *
+     * @param integer $size Write buffer size.
+     *
+     * @access public
+     * @return mixed on success or an PEAR_Error object otherwise
+     */
+    public function setWriteBuffer($size)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $returned = stream_set_write_buffer($this->fp, $size);
+        if ($returned === 0) {
+            return true;
+        }
+
+        return $this->raiseError('Cannot set write buffer.');
+    }
+
+    /**
+     * Returns information about an existing socket resource.
+     * Currently returns four entries in the result array:
+     *
+     * <p>
+     * timed_out (bool) - The socket timed out waiting for data<br>
+     * blocked (bool) - The socket was blocked<br>
+     * eof (bool) - Indicates EOF event<br>
+     * unread_bytes (int) - Number of bytes left in the socket buffer<br>
+     * </p>
+     *
+     * @access public
+     * @return mixed Array containing information about existing socket
+     *               resource or a PEAR_Error instance otherwise
+     */
+    public function getStatus()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return stream_get_meta_data($this->fp);
+    }
+
+    /**
+     * Get a specified line of data
+     *
+     * @param int $size Reading ends when size - 1 bytes have been read,
+     *                  or a newline or an EOF (whichever comes first).
+     *                  If no size is specified, it will keep reading from
+     *                  the stream until it reaches the end of the line.
+     *
+     * @access public
+     * @return mixed $size bytes of data from the socket, or a PEAR_Error if
+     *         not connected. If an error occurs, FALSE is returned.
+     */
+    public function gets($size = null)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        if (null === $size) {
+            return @fgets($this->fp);
+        } else {
+            return @fgets($this->fp, $size);
+        }
+    }
+
+    /**
+     * Read a specified amount of data. This is guaranteed to return,
+     * and has the added benefit of getting everything in one fread()
+     * chunk; if you know the size of the data you're getting
+     * beforehand, this is definitely the way to go.
+     *
+     * @param integer $size The number of bytes to read from the socket.
+     *
+     * @access public
+     * @return string $size bytes of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    public function read($size)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return @fread($this->fp, $size);
+    }
+
+    /**
+     * Write a specified amount of data.
+     *
+     * @param string $data Data to write.
+     * @param integer $blocksize Amount of data to write at once.
+     *                           NULL means all at once.
+     *
+     * @access public
+     * @return mixed If the socket is not connected, returns an instance of
+     *               PEAR_Error.
+     *               If the write succeeds, returns the number of bytes written.
+     *               If the write fails, returns false.
+     *               If the socket times out, returns an instance of PEAR_Error.
+     */
+    public function write($data, $blocksize = null)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        if (null === $blocksize && !OS_WINDOWS) {
+            $written = @fwrite($this->fp, $data);
+
+            // Check for timeout or lost connection
+            if ($written === false) {
+                $meta_data = $this->getStatus();
+
+                if (!is_array($meta_data)) {
+                    return $meta_data; // PEAR_Error
+                }
+
+                if (!empty($meta_data['timed_out'])) {
+                    return $this->raiseError('timed out');
+                }
+            }
+
+            return $written;
+        } else {
+            if (null === $blocksize) {
+                $blocksize = 1024;
+            }
+
+            $pos = 0;
+            $size = strlen($data);
+            while ($pos < $size) {
+                $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
+
+                // Check for timeout or lost connection
+                if ($written === false) {
+                    $meta_data = $this->getStatus();
+
+                    if (!is_array($meta_data)) {
+                        return $meta_data; // PEAR_Error
+                    }
+
+                    if (!empty($meta_data['timed_out'])) {
+                        return $this->raiseError('timed out');
+                    }
+
+                    return $written;
+                }
+
+                $pos += $written;
+            }
+
+            return $pos;
+        }
+    }
+
+    /**
+     * Write a line of data to the socket, followed by a trailing newline.
+     *
+     * @param string $data Data to write
+     *
+     * @access public
+     * @return mixed fwrite() result, or PEAR_Error when not connected
+     */
+    public function writeLine($data)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return fwrite($this->fp, $data . $this->newline);
+    }
+
+    /**
+     * Tests for end-of-file on a socket descriptor.
+     *
+     * Also returns true if the socket is disconnected.
+     *
+     * @access public
+     * @return bool
+     */
+    public function eof()
+    {
+        return (!is_resource($this->fp) || feof($this->fp));
+    }
+
+    /**
+     * Reads a byte of data
+     *
+     * @access public
+     * @return integer 1 byte of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    public function readByte()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return ord(@fread($this->fp, 1));
+    }
+
+    /**
+     * Reads a word of data
+     *
+     * @access public
+     * @return integer 1 word of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    public function readWord()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 2);
+
+        return (ord($buf[0]) + (ord($buf[1]) << 8));
+    }
+
+    /**
+     * Reads an int of data
+     *
+     * @access public
+     * @return integer  1 int of data from the socket, or a PEAR_Error if
+     *                  not connected.
+     */
+    public function readInt()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 4);
+
+        return (ord($buf[0]) + (ord($buf[1]) << 8) +
+            (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
+    }
+
+    /**
+     * Reads a zero-terminated string of data
+     *
+     * @access public
+     * @return string, or a PEAR_Error if
+     *         not connected.
+     */
+    public function readString()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $string = '';
+        while (($char = @fread($this->fp, 1)) !== "\x00") {
+            $string .= $char;
+        }
+
+        return $string;
+    }
+
+    /**
+     * Reads an IP Address and returns it in a dot formatted string
+     *
+     * @access public
+     * @return string Dot formatted string, or a PEAR_Error if
+     *         not connected.
+     */
+    public function readIPAddress()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 4);
+
+        return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]),
+            ord($buf[2]), ord($buf[3]));
+    }
+
+    /**
+     * Read until either the end of the socket or a newline, whichever
+     * comes first. Strips the trailing newline from the returned data.
+     *
+     * @access public
+     * @return string All available data up to a newline, without that
+     *         newline, or until the end of the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    public function readLine()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $line = '';
+
+        $timeout = time() + $this->timeout;
+
+        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
+            $line .= @fgets($this->fp, $this->lineLength);
+            if (substr($line, -1) == "\n") {
+                return rtrim($line, $this->newline);
+            }
+        }
+
+        return $line;
+    }
+
+    /**
+     * Read until the socket closes, or until there is no more data in
+     * the inner PHP buffer. If the inner buffer is empty, in blocking
+     * mode we wait for at least 1 byte of data. Therefore, in
+     * blocking mode, if there is no data at all to be read, this
+     * function will never exit (unless the socket is closed on the
+     * remote end).
+     *
+     * @access public
+     *
+     * @return string  All data until the socket closes, or a PEAR_Error if
+     *                 not connected.
+     */
+    public function readAll()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $data = '';
+        $timeout = time() + $this->timeout;
+
+        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
+            $data .= @fread($this->fp, $this->lineLength);
+        }
+
+        return $data;
+    }
+
+    /**
+     * Runs the equivalent of the select() system call on the socket
+     * with a timeout specified by tv_sec and tv_usec.
+     *
+     * @param integer $state Which of read/write/error to check for.
+     * @param integer $tv_sec Number of seconds for timeout.
+     * @param integer $tv_usec Number of microseconds for timeout.
+     *
+     * @access public
+     * @return False if select fails, integer describing which of read/write/error
+     *         are ready, or PEAR_Error if not connected.
+     */
+    public function select($state, $tv_sec, $tv_usec = 0)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $read = null;
+        $write = null;
+        $except = null;
+        if ($state & NET_SOCKET_READ) {
+            $read[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_WRITE) {
+            $write[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_ERROR) {
+            $except[] = $this->fp;
+        }
+        if (false === ($sr = stream_select($read, $write, $except,
+                $tv_sec, $tv_usec))
+        ) {
+            return false;
+        }
+
+        $result = 0;
+        if (count($read)) {
+            $result |= NET_SOCKET_READ;
+        }
+        if (count($write)) {
+            $result |= NET_SOCKET_WRITE;
+        }
+        if (count($except)) {
+            $result |= NET_SOCKET_ERROR;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Turns encryption on/off on a connected socket.
+     *
+     * @param bool $enabled Set this parameter to true to enable encryption
+     *                         and false to disable encryption.
+     * @param integer $type Type of encryption. See stream_socket_enable_crypto()
+     *                         for values.
+     *
+     * @see    http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
+     * @access public
+     * @return false on error, true on success and 0 if there isn't enough data
+     *         and the user should try again (non-blocking sockets only).
+     *         A PEAR_Error object is returned if the socket is not
+     *         connected
+     */
+    public function enableCrypto($enabled, $type)
+    {
+        if (version_compare(phpversion(), '5.1.0', '>=')) {
+            if (!is_resource($this->fp)) {
+                return $this->raiseError('not connected');
+            }
+
+            return @stream_socket_enable_crypto($this->fp, $enabled, $type);
+        } else {
+            $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
+
+            return $this->raiseError($msg);
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,43 @@
+# Net_Socket - Network Socket Interface
+
+[![Build Status](https://travis-ci.org/pear/Net_Socket.svg?branch=master)](https://travis-ci.org/pear/Net_Socket)
+    
+
+Net_Socket is a class interface to TCP sockets. It provides blocking
+and non-blocking operation, with different reading and writing modes
+(byte-wise, block-wise, line-wise and special formats like network
+byte-order ip addresses).
+
+[Homepage](http://pear.php.net/package/Net_Socket/)
+
+
+## Installation
+For a PEAR installation that downloads from the PEAR channel:
+
+`$ pear install pear/net_socket`
+
+For a PEAR installation from a previously downloaded tarball:
+
+`$ pear install Net_Socket-*.tgz`
+
+For a PEAR installation from a code clone:
+
+`$ pear install package.xml`
+
+For a local composer installation:
+
+`$ composer install`
+
+To add as a dependency to your composer-managed application:
+
+`$composer require pear/net_socket`
+
+
+## Tests
+Run  the tests from a local composer installation:
+
+`$ ./vendor/bin/phpunit`
+
+
+## License
+BSD-2 license
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,42 @@
+{
+    "authors": [
+        {
+            "email": "chuck@horde.org",
+            "name": "Chuck Hagenbuch",
+            "role": "Lead"
+        },
+        {
+            "email": "stig@php.net",
+            "name": "Stig Bakken",
+            "role": "Lead"
+        },
+        {
+            "email": "alec@php.net",
+            "name": "Aleksander Machniak",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Net": "./"
+        }
+    },
+    "description": "More info available on: http://pear.php.net/package/Net_Socket",
+    "include-path": [
+        "./"
+    ],
+    "license": "BSD-2-Clause",
+    "name": "pear/net_socket",
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket",
+        "source": "https://github.com/pear/Net_Socket"
+    },
+    "type": "library",
+    "require": {
+        "php": ">=5.4.0",
+        "pear/pear_exception": "@stable"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^4"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ <name>Net_Socket</name>
+ <channel>pear.php.net</channel>
+ <summary>Network Socket Interface</summary>
+ <description>Net_Socket is a class interface to TCP sockets.  It provides blocking
+  and non-blocking operation, with different reading and writing modes
+  (byte-wise, block-wise, line-wise and special formats like network
+  byte-order ip addresses).</description>
+ <lead>
+  <name>Chuck Hagenbuch</name>
+  <user>chagenbu</user>
+  <email>chuck@horde.org</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Stig Bakken</name>
+  <user>ssb</user>
+  <email>stig@php.net</email>
+  <active>no</active>
+ </lead>
+ <lead>
+  <name>Aleksander Machniak</name>
+  <user>alec</user>
+  <email>alec@php.net</email>
+  <active>no</active>
+ </lead>
+ <date>2017-04-06</date>
+ <version>
+  <release>1.2.1</release>
+  <api>1.2.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
+ <notes>
+* Fix BSD-2 licensing
+ </notes>
+ <contents>
+  <dir baseinstalldir="/" name="/">
+   <file baseinstalldir="/" name="Net/Socket.php" role="php" />
+   <file baseinstalldir="/" name="README.md" role="doc" />
+   <file baseinstalldir="/" name="LICENSE" role="doc" />
+  </dir>
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.10.1</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+ <phprelease />
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/net_socket/phpunit.xml.dist	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,29 @@
+<phpunit bootstrap="vendor/autoload.php"
+         cacheTokens="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         stopOnError="false"
+         stopOnFailure="false"
+         stopOnIncomplete="false"
+         stopOnSkipped="false">
+
+    <testsuites>
+        <testsuite name="Test Suite">
+            <directory suffix=".php">tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory suffix=".php">Net/</directory>
+        </whitelist>
+    </filter>
+
+    <logging>
+        <log type="coverage-clover" target="build/logs/clover.xml"/>
+        <log type="coverage-html" target="build/coverage/"/>
+    </logging>
+
+</phpunit>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/README.rst	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,26 @@
+******************************
+Minimal set of PEAR core files
+******************************
+
+This repository provides a set of files from ``pear-core``
+that are often used in PEAR packages.
+
+It follows the `pear-core`__ repository and gets updated whenever a new
+PEAR version is released.
+
+It's meant to be used as dependency for composer packages.
+
+__ https://github.com/pear/pear-core
+
+==============
+Included files
+==============
+- ``OS/Guess.php``
+- ``PEAR.php``
+- ``PEAR/Error.php``
+- ``PEAR/ErrorStack.php``
+- ``System.php``
+
+
+``PEAR/Error.php`` is a dummy file that only includes ``PEAR.php``,
+to make autoloaders work without problems.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,32 @@
+{
+    "name": "pear/pear-core-minimal",
+    "description": "Minimal set of PEAR core files to be used as composer dependency",
+    "license": "BSD-3-Clause",
+    "authors": [
+        {
+            "email": "cweiske@php.net",
+            "name": "Christian Weiske",
+            "role": "Lead"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "": "src/"
+        }
+    },
+    "include-path": [
+        "src/"
+    ],
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
+        "source": "https://github.com/pear/pear-core-minimal"
+    },
+    "type": "library",
+    "require": {
+        "pear/console_getopt": "~1.4",
+        "pear/pear_exception": "~1.0"
+    },
+    "replace": {
+        "rsky/pear-core-min": "self.version"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/src/OS/Guess.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,337 @@
+<?php
+/**
+ * The OS_Guess class
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since PEAR 0.1
+ */
+
+// {{{ uname examples
+
+// php_uname() without args returns the same as 'uname -a', or a PHP-custom
+// string for Windows.
+// PHP versions prior to 4.3 return the uname of the host where PHP was built,
+// as of 4.3 it returns the uname of the host running the PHP code.
+//
+// PC RedHat Linux 7.1:
+// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown
+//
+// PC Debian Potato:
+// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown
+//
+// PC FreeBSD 3.3:
+// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000     root@example.com:/usr/src/sys/compile/CONFIG  i386
+//
+// PC FreeBSD 4.3:
+// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001     root@example.com:/usr/src/sys/compile/CONFIG  i386
+//
+// PC FreeBSD 4.5:
+// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb  6 23:59:23 CET 2002     root@example.com:/usr/src/sys/compile/CONFIG  i386
+//
+// PC FreeBSD 4.5 w/uname from GNU shellutils:
+// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb  i386 unknown
+//
+// HP 9000/712 HP-UX 10:
+// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license
+//
+// HP 9000/712 HP-UX 10 w/uname from GNU shellutils:
+// HP-UX host B.10.10 A 9000/712 unknown
+//
+// IBM RS6000/550 AIX 4.3:
+// AIX host 3 4 000003531C00
+//
+// AIX 4.3 w/uname from GNU shellutils:
+// AIX host 3 4 000003531C00 unknown
+//
+// SGI Onyx IRIX 6.5 w/uname from GNU shellutils:
+// IRIX64 host 6.5 01091820 IP19 mips
+//
+// SGI Onyx IRIX 6.5:
+// IRIX64 host 6.5 01091820 IP19
+//
+// SparcStation 20 Solaris 8 w/uname from GNU shellutils:
+// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc
+//
+// SparcStation 20 Solaris 8:
+// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20
+//
+// Mac OS X (Darwin)
+// Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug  5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC  Power Macintosh
+//
+// Mac OS X early versions
+//
+
+// }}}
+
+/* TODO:
+ * - define endianness, to allow matchSignature("bigend") etc.
+ */
+
+/**
+ * Retrieves information about the current operating system
+ *
+ * This class uses php_uname() to grok information about the current OS
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+class OS_Guess
+{
+    var $sysname;
+    var $nodename;
+    var $cpu;
+    var $release;
+    var $extra;
+
+    function __construct($uname = null)
+    {
+        list($this->sysname,
+             $this->release,
+             $this->cpu,
+             $this->extra,
+             $this->nodename) = $this->parseSignature($uname);
+    }
+
+    function parseSignature($uname = null)
+    {
+        static $sysmap = array(
+            'HP-UX' => 'hpux',
+            'IRIX64' => 'irix',
+        );
+        static $cpumap = array(
+            'i586' => 'i386',
+            'i686' => 'i386',
+            'ppc' => 'powerpc',
+        );
+        if ($uname === null) {
+            $uname = php_uname();
+        }
+        $parts = preg_split('/\s+/', trim($uname));
+        $n = count($parts);
+
+        $release  = $machine = $cpu = '';
+        $sysname  = $parts[0];
+        $nodename = $parts[1];
+        $cpu      = $parts[$n-1];
+        $extra = '';
+        if ($cpu == 'unknown') {
+            $cpu = $parts[$n - 2];
+        }
+
+        switch ($sysname) {
+            case 'AIX' :
+                $release = "$parts[3].$parts[2]";
+                break;
+            case 'Windows' :
+                switch ($parts[1]) {
+                    case '95/98':
+                        $release = '9x';
+                        break;
+                    default:
+                        $release = $parts[1];
+                        break;
+                }
+                $cpu = 'i386';
+                break;
+            case 'Linux' :
+                $extra = $this->_detectGlibcVersion();
+                // use only the first two digits from the kernel version
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
+                break;
+            case 'Mac' :
+                $sysname = 'darwin';
+                $nodename = $parts[2];
+                $release = $parts[3];
+                if ($cpu == 'Macintosh') {
+                    if ($parts[$n - 2] == 'Power') {
+                        $cpu = 'powerpc';
+                    }
+                }
+                break;
+            case 'Darwin' :
+                if ($cpu == 'Macintosh') {
+                    if ($parts[$n - 2] == 'Power') {
+                        $cpu = 'powerpc';
+                    }
+                }
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
+                break;
+            default:
+                $release = preg_replace('/-.*/', '', $parts[2]);
+                break;
+        }
+
+        if (isset($sysmap[$sysname])) {
+            $sysname = $sysmap[$sysname];
+        } else {
+            $sysname = strtolower($sysname);
+        }
+        if (isset($cpumap[$cpu])) {
+            $cpu = $cpumap[$cpu];
+        }
+        return array($sysname, $release, $cpu, $extra, $nodename);
+    }
+
+    function _detectGlibcVersion()
+    {
+        static $glibc = false;
+        if ($glibc !== false) {
+            return $glibc; // no need to run this multiple times
+        }
+        $major = $minor = 0;
+        include_once "System.php";
+        // Use glibc's <features.h> header file to
+        // get major and minor version number:
+        if (@file_exists('/usr/include/features.h') &&
+              @is_readable('/usr/include/features.h')) {
+            if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) {
+                $features_file = fopen('/usr/include/features.h', 'rb');
+                while (!feof($features_file)) {
+                    $line = fgets($features_file, 8192);
+                    if (!$line || (strpos($line, '#define') === false)) {
+                        continue;
+                    }
+                    if (strpos($line, '__GLIBC__')) {
+                        // major version number #define __GLIBC__ version
+                        $line = preg_split('/\s+/', $line);
+                        $glibc_major = trim($line[2]);
+                        if (isset($glibc_minor)) {
+                            break;
+                        }
+                        continue;
+                    }
+
+                    if (strpos($line, '__GLIBC_MINOR__'))  {
+                        // got the minor version number
+                        // #define __GLIBC_MINOR__ version
+                        $line = preg_split('/\s+/', $line);
+                        $glibc_minor = trim($line[2]);
+                        if (isset($glibc_major)) {
+                            break;
+                        }
+                        continue;
+                    }
+                }
+                fclose($features_file);
+                if (!isset($glibc_major) || !isset($glibc_minor)) {
+                    return $glibc = '';
+                }
+                return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ;
+            } // no cpp
+
+            $tmpfile = System::mktemp("glibctest");
+            $fp = fopen($tmpfile, "w");
+            fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
+            fclose($fp);
+            $cpp = popen("/usr/bin/cpp $tmpfile", "r");
+            while ($line = fgets($cpp, 1024)) {
+                if ($line{0} == '#' || trim($line) == '') {
+                    continue;
+                }
+
+                if (list($major, $minor) = explode(' ', trim($line))) {
+                    break;
+                }
+            }
+            pclose($cpp);
+            unlink($tmpfile);
+        } // features.h
+
+        if (!($major && $minor) && @is_link('/lib/libc.so.6')) {
+            // Let's try reading the libc.so.6 symlink
+            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
+                list($major, $minor) = explode('.', $matches[1]);
+            }
+        }
+
+        if (!($major && $minor)) {
+            return $glibc = '';
+        }
+
+        return $glibc = "glibc{$major}.{$minor}";
+    }
+
+    function getSignature()
+    {
+        if (empty($this->extra)) {
+            return "{$this->sysname}-{$this->release}-{$this->cpu}";
+        }
+        return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}";
+    }
+
+    function getSysname()
+    {
+        return $this->sysname;
+    }
+
+    function getNodename()
+    {
+        return $this->nodename;
+    }
+
+    function getCpu()
+    {
+        return $this->cpu;
+    }
+
+    function getRelease()
+    {
+        return $this->release;
+    }
+
+    function getExtra()
+    {
+        return $this->extra;
+    }
+
+    function matchSignature($match)
+    {
+        $fragments = is_array($match) ? $match : explode('-', $match);
+        $n = count($fragments);
+        $matches = 0;
+        if ($n > 0) {
+            $matches += $this->_matchFragment($fragments[0], $this->sysname);
+        }
+        if ($n > 1) {
+            $matches += $this->_matchFragment($fragments[1], $this->release);
+        }
+        if ($n > 2) {
+            $matches += $this->_matchFragment($fragments[2], $this->cpu);
+        }
+        if ($n > 3) {
+            $matches += $this->_matchFragment($fragments[3], $this->extra);
+        }
+        return ($matches == $n);
+    }
+
+    function _matchFragment($fragment, $value)
+    {
+        if (strcspn($fragment, '*?') < strlen($fragment)) {
+            $reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/';
+            return preg_match($reg, $value);
+        }
+        return ($fragment == '*' || !strcasecmp($fragment, $value));
+    }
+
+}
+/*
+ * Local Variables:
+ * indent-tabs-mode: nil
+ * c-basic-offset: 4
+ * End:
+ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/src/PEAR.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,1113 @@
+<?php
+/**
+ * PEAR, the PHP Extension and Application Repository
+ *
+ * PEAR class and PEAR_Error class
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Sterling Hughes <sterling@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2010 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**#@+
+ * ERROR constants
+ */
+define('PEAR_ERROR_RETURN',     1);
+define('PEAR_ERROR_PRINT',      2);
+define('PEAR_ERROR_TRIGGER',    4);
+define('PEAR_ERROR_DIE',        8);
+define('PEAR_ERROR_CALLBACK',  16);
+/**
+ * WARNING: obsolete
+ * @deprecated
+ */
+define('PEAR_ERROR_EXCEPTION', 32);
+/**#@-*/
+
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+    define('OS_WINDOWS', true);
+    define('OS_UNIX',    false);
+    define('PEAR_OS',    'Windows');
+} else {
+    define('OS_WINDOWS', false);
+    define('OS_UNIX',    true);
+    define('PEAR_OS',    'Unix'); // blatant assumption
+}
+
+$GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
+$GLOBALS['_PEAR_default_error_options']  = E_USER_NOTICE;
+$GLOBALS['_PEAR_destructor_object_list'] = array();
+$GLOBALS['_PEAR_shutdown_funcs']         = array();
+$GLOBALS['_PEAR_error_handler_stack']    = array();
+
+@ini_set('track_errors', true);
+
+/**
+ * Base class for other PEAR classes.  Provides rudimentary
+ * emulation of destructors.
+ *
+ * If you want a destructor in your class, inherit PEAR and make a
+ * destructor method called _yourclassname (same name as the
+ * constructor, but with a "_" prefix).  Also, in your constructor you
+ * have to call the PEAR constructor: $this->PEAR();.
+ * The destructor method will be called without parameters.  Note that
+ * at in some SAPI implementations (such as Apache), any output during
+ * the request shutdown (in which destructors are called) seems to be
+ * discarded.  If you need to get any debug information from your
+ * destructor, use error_log(), syslog() or something similar.
+ *
+ * IMPORTANT! To use the emulated destructors you need to create the
+ * objects by reference: $obj =& new PEAR_child;
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/PEAR
+ * @see        PEAR_Error
+ * @since      Class available since PHP 4.0.2
+ * @link        http://pear.php.net/manual/en/core.pear.php#core.pear.pear
+ */
+class PEAR
+{
+    /**
+     * Whether to enable internal debug messages.
+     *
+     * @var     bool
+     * @access  private
+     */
+    var $_debug = false;
+
+    /**
+     * Default error mode for this object.
+     *
+     * @var     int
+     * @access  private
+     */
+    var $_default_error_mode = null;
+
+    /**
+     * Default error options used for this object when error mode
+     * is PEAR_ERROR_TRIGGER.
+     *
+     * @var     int
+     * @access  private
+     */
+    var $_default_error_options = null;
+
+    /**
+     * Default error handler (callback) for this object, if error mode is
+     * PEAR_ERROR_CALLBACK.
+     *
+     * @var     string
+     * @access  private
+     */
+    var $_default_error_handler = '';
+
+    /**
+     * Which class to use for error objects.
+     *
+     * @var     string
+     * @access  private
+     */
+    var $_error_class = 'PEAR_Error';
+
+    /**
+     * An array of expected errors.
+     *
+     * @var     array
+     * @access  private
+     */
+    var $_expected_errors = array();
+
+    /**
+     * List of methods that can be called both statically and non-statically.
+     * @var array
+     */
+    protected static $bivalentMethods = array(
+        'setErrorHandling' => true,
+        'raiseError' => true,
+        'throwError' => true,
+        'pushErrorHandling' => true,
+        'popErrorHandling' => true,
+    );
+
+    /**
+     * Constructor.  Registers this object in
+     * $_PEAR_destructor_object_list for destructor emulation if a
+     * destructor object exists.
+     *
+     * @param string $error_class  (optional) which class to use for
+     *        error objects, defaults to PEAR_Error.
+     * @access public
+     * @return void
+     */
+    function __construct($error_class = null)
+    {
+        $classname = strtolower(get_class($this));
+        if ($this->_debug) {
+            print "PEAR constructor called, class=$classname\n";
+        }
+
+        if ($error_class !== null) {
+            $this->_error_class = $error_class;
+        }
+
+        while ($classname && strcasecmp($classname, "pear")) {
+            $destructor = "_$classname";
+            if (method_exists($this, $destructor)) {
+                global $_PEAR_destructor_object_list;
+                $_PEAR_destructor_object_list[] = &$this;
+                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
+                    register_shutdown_function("_PEAR_call_destructors");
+                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
+                }
+                break;
+            } else {
+                $classname = get_parent_class($classname);
+            }
+        }
+    }
+
+    /**
+     * Only here for backwards compatibility.
+     * E.g. Archive_Tar calls $this->PEAR() in its constructor.
+     *
+     * @param string $error_class Which class to use for error objects,
+     *                            defaults to PEAR_Error.
+     */
+    public function PEAR($error_class = null)
+    {
+        self::__construct($error_class);
+    }
+
+    /**
+     * Destructor (the emulated type of...).  Does nothing right now,
+     * but is included for forward compatibility, so subclass
+     * destructors should always call it.
+     *
+     * See the note in the class desciption about output from
+     * destructors.
+     *
+     * @access public
+     * @return void
+     */
+    function _PEAR() {
+        if ($this->_debug) {
+            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
+        }
+    }
+
+    public function __call($method, $arguments)
+    {
+        if (!isset(self::$bivalentMethods[$method])) {
+            trigger_error(
+                'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR
+            );
+        }
+        return call_user_func_array(
+            array(get_class(), '_' . $method),
+            array_merge(array($this), $arguments)
+        );
+    }
+
+    public static function __callStatic($method, $arguments)
+    {
+        if (!isset(self::$bivalentMethods[$method])) {
+            trigger_error(
+                'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR
+            );
+        }
+        return call_user_func_array(
+            array(get_class(), '_' . $method),
+            array_merge(array(null), $arguments)
+        );
+    }
+
+    /**
+    * If you have a class that's mostly/entirely static, and you need static
+    * properties, you can use this method to simulate them. Eg. in your method(s)
+    * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
+    * You MUST use a reference, or they will not persist!
+    *
+    * @param  string $class  The calling classname, to prevent clashes
+    * @param  string $var    The variable to retrieve.
+    * @return mixed   A reference to the variable. If not set it will be
+    *                 auto initialised to NULL.
+    */
+    public static function &getStaticProperty($class, $var)
+    {
+        static $properties;
+        if (!isset($properties[$class])) {
+            $properties[$class] = array();
+        }
+
+        if (!array_key_exists($var, $properties[$class])) {
+            $properties[$class][$var] = null;
+        }
+
+        return $properties[$class][$var];
+    }
+
+    /**
+    * Use this function to register a shutdown method for static
+    * classes.
+    *
+    * @param  mixed $func  The function name (or array of class/method) to call
+    * @param  mixed $args  The arguments to pass to the function
+    *
+    * @return void
+    */
+    public static function registerShutdownFunc($func, $args = array())
+    {
+        // if we are called statically, there is a potential
+        // that no shutdown func is registered.  Bug #6445
+        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
+            register_shutdown_function("_PEAR_call_destructors");
+            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
+        }
+        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
+    }
+
+    /**
+     * Tell whether a value is a PEAR error.
+     *
+     * @param   mixed $data   the value to test
+     * @param   int   $code   if $data is an error object, return true
+     *                        only if $code is a string and
+     *                        $obj->getMessage() == $code or
+     *                        $code is an integer and $obj->getCode() == $code
+     *
+     * @return  bool    true if parameter is an error
+     */
+    public static function isError($data, $code = null)
+    {
+        if (!is_a($data, 'PEAR_Error')) {
+            return false;
+        }
+
+        if (is_null($code)) {
+            return true;
+        } elseif (is_string($code)) {
+            return $data->getMessage() == $code;
+        }
+
+        return $data->getCode() == $code;
+    }
+
+    /**
+     * Sets how errors generated by this object should be handled.
+     * Can be invoked both in objects and statically.  If called
+     * statically, setErrorHandling sets the default behaviour for all
+     * PEAR objects.  If called in an object, setErrorHandling sets
+     * the default behaviour for that object.
+     *
+     * @param object $object
+     *        Object the method was called on (non-static mode)
+     *
+     * @param int $mode
+     *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
+     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
+     *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
+     *
+     * @param mixed $options
+     *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
+     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
+     *
+     *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
+     *        to be the callback function or method.  A callback
+     *        function is a string with the name of the function, a
+     *        callback method is an array of two elements: the element
+     *        at index 0 is the object, and the element at index 1 is
+     *        the name of the method to call in the object.
+     *
+     *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
+     *        a printf format string used when printing the error
+     *        message.
+     *
+     * @access public
+     * @return void
+     * @see PEAR_ERROR_RETURN
+     * @see PEAR_ERROR_PRINT
+     * @see PEAR_ERROR_TRIGGER
+     * @see PEAR_ERROR_DIE
+     * @see PEAR_ERROR_CALLBACK
+     * @see PEAR_ERROR_EXCEPTION
+     *
+     * @since PHP 4.0.5
+     */
+    protected static function _setErrorHandling(
+        $object, $mode = null, $options = null
+    ) {
+        if ($object !== null) {
+            $setmode     = &$object->_default_error_mode;
+            $setoptions  = &$object->_default_error_options;
+        } else {
+            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
+            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
+        }
+
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $setmode = $mode;
+                $setoptions = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $setmode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $setoptions = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+    }
+
+    /**
+     * This method is used to tell which errors you expect to get.
+     * Expected errors are always returned with error mode
+     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
+     * and this method pushes a new element onto it.  The list of
+     * expected errors are in effect until they are popped off the
+     * stack with the popExpect() method.
+     *
+     * Note that this method can not be called statically
+     *
+     * @param mixed $code a single error code or an array of error codes to expect
+     *
+     * @return int     the new depth of the "expected errors" stack
+     * @access public
+     */
+    function expectError($code = '*')
+    {
+        if (is_array($code)) {
+            array_push($this->_expected_errors, $code);
+        } else {
+            array_push($this->_expected_errors, array($code));
+        }
+        return count($this->_expected_errors);
+    }
+
+    /**
+     * This method pops one element off the expected error codes
+     * stack.
+     *
+     * @return array   the list of error codes that were popped
+     */
+    function popExpect()
+    {
+        return array_pop($this->_expected_errors);
+    }
+
+    /**
+     * This method checks unsets an error code if available
+     *
+     * @param mixed error code
+     * @return bool true if the error code was unset, false otherwise
+     * @access private
+     * @since PHP 4.3.0
+     */
+    function _checkDelExpect($error_code)
+    {
+        $deleted = false;
+        foreach ($this->_expected_errors as $key => $error_array) {
+            if (in_array($error_code, $error_array)) {
+                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
+                $deleted = true;
+            }
+
+            // clean up empty arrays
+            if (0 == count($this->_expected_errors[$key])) {
+                unset($this->_expected_errors[$key]);
+            }
+        }
+
+        return $deleted;
+    }
+
+    /**
+     * This method deletes all occurrences of the specified element from
+     * the expected error codes stack.
+     *
+     * @param  mixed $error_code error code that should be deleted
+     * @return mixed list of error codes that were deleted or error
+     * @access public
+     * @since PHP 4.3.0
+     */
+    function delExpect($error_code)
+    {
+        $deleted = false;
+        if ((is_array($error_code) && (0 != count($error_code)))) {
+            // $error_code is a non-empty array here; we walk through it trying
+            // to unset all values
+            foreach ($error_code as $key => $error) {
+                $deleted =  $this->_checkDelExpect($error) ? true : false;
+            }
+
+            return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
+        } elseif (!empty($error_code)) {
+            // $error_code comes alone, trying to unset it
+            if ($this->_checkDelExpect($error_code)) {
+                return true;
+            }
+
+            return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
+        }
+
+        // $error_code is empty
+        return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
+    }
+
+    /**
+     * This method is a wrapper that returns an instance of the
+     * configured error class with this object's default error
+     * handling applied.  If the $mode and $options parameters are not
+     * specified, the object's defaults are used.
+     *
+     * @param mixed $message a text error message or a PEAR error object
+     *
+     * @param int $code      a numeric error code (it is up to your class
+     *                  to define these if you want to use codes)
+     *
+     * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
+     *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
+     *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
+     *
+     * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
+     *                  specifies the PHP-internal error level (one of
+     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
+     *                  If $mode is PEAR_ERROR_CALLBACK, this
+     *                  parameter specifies the callback function or
+     *                  method.  In other error modes this parameter
+     *                  is ignored.
+     *
+     * @param string $userinfo If you need to pass along for example debug
+     *                  information, this parameter is meant for that.
+     *
+     * @param string $error_class The returned error object will be
+     *                  instantiated from this class, if specified.
+     *
+     * @param bool $skipmsg If true, raiseError will only pass error codes,
+     *                  the error message parameter will be dropped.
+     *
+     * @return object   a PEAR error object
+     * @see PEAR::setErrorHandling
+     * @since PHP 4.0.5
+     */
+    protected static function _raiseError($object,
+                         $message = null,
+                         $code = null,
+                         $mode = null,
+                         $options = null,
+                         $userinfo = null,
+                         $error_class = null,
+                         $skipmsg = false)
+    {
+        // The error is yet a PEAR error object
+        if (is_object($message)) {
+            $code        = $message->getCode();
+            $userinfo    = $message->getUserInfo();
+            $error_class = $message->getType();
+            $message->error_message_prefix = '';
+            $message     = $message->getMessage();
+        }
+
+        if (
+            $object !== null &&
+            isset($object->_expected_errors) &&
+            count($object->_expected_errors) > 0 &&
+            count($exp = end($object->_expected_errors))
+        ) {
+            if ($exp[0] == "*" ||
+                (is_int(reset($exp)) && in_array($code, $exp)) ||
+                (is_string(reset($exp)) && in_array($message, $exp))
+            ) {
+                $mode = PEAR_ERROR_RETURN;
+            }
+        }
+
+        // No mode given, try global ones
+        if ($mode === null) {
+            // Class error handler
+            if ($object !== null && isset($object->_default_error_mode)) {
+                $mode    = $object->_default_error_mode;
+                $options = $object->_default_error_options;
+            // Global error handler
+            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
+                $mode    = $GLOBALS['_PEAR_default_error_mode'];
+                $options = $GLOBALS['_PEAR_default_error_options'];
+            }
+        }
+
+        if ($error_class !== null) {
+            $ec = $error_class;
+        } elseif ($object !== null && isset($object->_error_class)) {
+            $ec = $object->_error_class;
+        } else {
+            $ec = 'PEAR_Error';
+        }
+
+        if ($skipmsg) {
+            $a = new $ec($code, $mode, $options, $userinfo);
+        } else {
+            $a = new $ec($message, $code, $mode, $options, $userinfo);
+        }
+
+        return $a;
+    }
+
+    /**
+     * Simpler form of raiseError with fewer options.  In most cases
+     * message, code and userinfo are enough.
+     *
+     * @param mixed $message a text error message or a PEAR error object
+     *
+     * @param int $code      a numeric error code (it is up to your class
+     *                  to define these if you want to use codes)
+     *
+     * @param string $userinfo If you need to pass along for example debug
+     *                  information, this parameter is meant for that.
+     *
+     * @return object   a PEAR error object
+     * @see PEAR::raiseError
+     */
+    protected static function _throwError($object, $message = null, $code = null, $userinfo = null)
+    {
+        if ($object !== null) {
+            $a = &$object->raiseError($message, $code, null, null, $userinfo);
+            return $a;
+        }
+
+        $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+        return $a;
+    }
+
+    public static function staticPushErrorHandling($mode, $options = null)
+    {
+        $stack       = &$GLOBALS['_PEAR_error_handler_stack'];
+        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
+        $def_options = &$GLOBALS['_PEAR_default_error_options'];
+        $stack[] = array($def_mode, $def_options);
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $def_mode = $mode;
+                $def_options = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $def_mode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $def_options = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+        $stack[] = array($mode, $options);
+        return true;
+    }
+
+    public static function staticPopErrorHandling()
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
+        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
+        array_pop($stack);
+        list($mode, $options) = $stack[sizeof($stack) - 1];
+        array_pop($stack);
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $setmode = $mode;
+                $setoptions = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $setmode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $setoptions = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+        return true;
+    }
+
+    /**
+     * Push a new error handler on top of the error handler options stack. With this
+     * you can easily override the actual error handler for some code and restore
+     * it later with popErrorHandling.
+     *
+     * @param mixed $mode (same as setErrorHandling)
+     * @param mixed $options (same as setErrorHandling)
+     *
+     * @return bool Always true
+     *
+     * @see PEAR::setErrorHandling
+     */
+    protected static function _pushErrorHandling($object, $mode, $options = null)
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        if ($object !== null) {
+            $def_mode    = &$object->_default_error_mode;
+            $def_options = &$object->_default_error_options;
+        } else {
+            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
+            $def_options = &$GLOBALS['_PEAR_default_error_options'];
+        }
+        $stack[] = array($def_mode, $def_options);
+
+        if ($object !== null) {
+            $object->setErrorHandling($mode, $options);
+        } else {
+            PEAR::setErrorHandling($mode, $options);
+        }
+        $stack[] = array($mode, $options);
+        return true;
+    }
+
+    /**
+    * Pop the last error handler used
+    *
+    * @return bool Always true
+    *
+    * @see PEAR::pushErrorHandling
+    */
+    protected static function _popErrorHandling($object)
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        array_pop($stack);
+        list($mode, $options) = $stack[sizeof($stack) - 1];
+        array_pop($stack);
+        if ($object !== null) {
+            $object->setErrorHandling($mode, $options);
+        } else {
+            PEAR::setErrorHandling($mode, $options);
+        }
+        return true;
+    }
+
+    /**
+    * OS independent PHP extension load. Remember to take care
+    * on the correct extension name for case sensitive OSes.
+    *
+    * @param string $ext The extension name
+    * @return bool Success or not on the dl() call
+    */
+    public static function loadExtension($ext)
+    {
+        if (extension_loaded($ext)) {
+            return true;
+        }
+
+        // if either returns true dl() will produce a FATAL error, stop that
+        if (
+            function_exists('dl') === false ||
+            ini_get('enable_dl') != 1
+        ) {
+            return false;
+        }
+
+        if (OS_WINDOWS) {
+            $suffix = '.dll';
+        } elseif (PHP_OS == 'HP-UX') {
+            $suffix = '.sl';
+        } elseif (PHP_OS == 'AIX') {
+            $suffix = '.a';
+        } elseif (PHP_OS == 'OSX') {
+            $suffix = '.bundle';
+        } else {
+            $suffix = '.so';
+        }
+
+        return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
+    }
+}
+
+function _PEAR_call_destructors()
+{
+    global $_PEAR_destructor_object_list;
+    if (is_array($_PEAR_destructor_object_list) &&
+        sizeof($_PEAR_destructor_object_list))
+    {
+        reset($_PEAR_destructor_object_list);
+
+        $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
+
+        if ($destructLifoExists) {
+            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
+        }
+
+        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
+            $classname = get_class($objref);
+            while ($classname) {
+                $destructor = "_$classname";
+                if (method_exists($objref, $destructor)) {
+                    $objref->$destructor();
+                    break;
+                } else {
+                    $classname = get_parent_class($classname);
+                }
+            }
+        }
+        // Empty the object list to ensure that destructors are
+        // not called more than once.
+        $_PEAR_destructor_object_list = array();
+    }
+
+    // Now call the shutdown functions
+    if (
+        isset($GLOBALS['_PEAR_shutdown_funcs']) &&
+        is_array($GLOBALS['_PEAR_shutdown_funcs']) &&
+        !empty($GLOBALS['_PEAR_shutdown_funcs'])
+    ) {
+        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
+            call_user_func_array($value[0], $value[1]);
+        }
+    }
+}
+
+/**
+ * Standard PEAR error class for PHP 4
+ *
+ * This class is supserseded by {@link PEAR_Exception} in PHP 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
+ * @see        PEAR::raiseError(), PEAR::throwError()
+ * @since      Class available since PHP 4.0.2
+ */
+class PEAR_Error
+{
+    var $error_message_prefix = '';
+    var $mode                 = PEAR_ERROR_RETURN;
+    var $level                = E_USER_NOTICE;
+    var $code                 = -1;
+    var $message              = '';
+    var $userinfo             = '';
+    var $backtrace            = null;
+
+    /**
+     * PEAR_Error constructor
+     *
+     * @param string $message  message
+     *
+     * @param int $code     (optional) error code
+     *
+     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
+     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
+     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
+     *
+     * @param mixed $options   (optional) error level, _OR_ in the case of
+     * PEAR_ERROR_CALLBACK, the callback function or object/method
+     * tuple.
+     *
+     * @param string $userinfo (optional) additional user/debug info
+     *
+     * @access public
+     *
+     */
+    function __construct($message = 'unknown error', $code = null,
+                        $mode = null, $options = null, $userinfo = null)
+    {
+        if ($mode === null) {
+            $mode = PEAR_ERROR_RETURN;
+        }
+        $this->message   = $message;
+        $this->code      = $code;
+        $this->mode      = $mode;
+        $this->userinfo  = $userinfo;
+
+        $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
+
+        if (!$skiptrace) {
+            $this->backtrace = debug_backtrace();
+            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
+                unset($this->backtrace[0]['object']);
+            }
+        }
+
+        if ($mode & PEAR_ERROR_CALLBACK) {
+            $this->level = E_USER_NOTICE;
+            $this->callback = $options;
+        } else {
+            if ($options === null) {
+                $options = E_USER_NOTICE;
+            }
+
+            $this->level = $options;
+            $this->callback = null;
+        }
+
+        if ($this->mode & PEAR_ERROR_PRINT) {
+            if (is_null($options) || is_int($options)) {
+                $format = "%s";
+            } else {
+                $format = $options;
+            }
+
+            printf($format, $this->getMessage());
+        }
+
+        if ($this->mode & PEAR_ERROR_TRIGGER) {
+            trigger_error($this->getMessage(), $this->level);
+        }
+
+        if ($this->mode & PEAR_ERROR_DIE) {
+            $msg = $this->getMessage();
+            if (is_null($options) || is_int($options)) {
+                $format = "%s";
+                if (substr($msg, -1) != "\n") {
+                    $msg .= "\n";
+                }
+            } else {
+                $format = $options;
+            }
+            printf($format, $msg);
+            exit($code);
+        }
+
+        if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) {
+            call_user_func($this->callback, $this);
+        }
+
+        if ($this->mode & PEAR_ERROR_EXCEPTION) {
+            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
+            eval('$e = new Exception($this->message, $this->code);throw($e);');
+        }
+    }
+
+    /**
+     * Only here for backwards compatibility.
+     *
+     * Class "Cache_Error" still uses it, among others.
+     *
+     * @param string $message  Message
+     * @param int    $code     Error code
+     * @param int    $mode     Error mode
+     * @param mixed  $options  See __construct()
+     * @param string $userinfo Additional user/debug info
+     */
+    public function PEAR_Error(
+        $message = 'unknown error', $code = null, $mode = null,
+        $options = null, $userinfo = null
+    ) {
+        self::__construct($message, $code, $mode, $options, $userinfo);
+    }
+
+    /**
+     * Get the error mode from an error object.
+     *
+     * @return int error mode
+     * @access public
+     */
+    function getMode()
+    {
+        return $this->mode;
+    }
+
+    /**
+     * Get the callback function/method from an error object.
+     *
+     * @return mixed callback function or object/method array
+     * @access public
+     */
+    function getCallback()
+    {
+        return $this->callback;
+    }
+
+    /**
+     * Get the error message from an error object.
+     *
+     * @return  string  full error message
+     * @access public
+     */
+    function getMessage()
+    {
+        return ($this->error_message_prefix . $this->message);
+    }
+
+    /**
+     * Get error code from an error object
+     *
+     * @return int error code
+     * @access public
+     */
+     function getCode()
+     {
+        return $this->code;
+     }
+
+    /**
+     * Get the name of this error/exception.
+     *
+     * @return string error/exception name (type)
+     * @access public
+     */
+    function getType()
+    {
+        return get_class($this);
+    }
+
+    /**
+     * Get additional user-supplied information.
+     *
+     * @return string user-supplied information
+     * @access public
+     */
+    function getUserInfo()
+    {
+        return $this->userinfo;
+    }
+
+    /**
+     * Get additional debug information supplied by the application.
+     *
+     * @return string debug information
+     * @access public
+     */
+    function getDebugInfo()
+    {
+        return $this->getUserInfo();
+    }
+
+    /**
+     * Get the call backtrace from where the error was generated.
+     * Supported with PHP 4.3.0 or newer.
+     *
+     * @param int $frame (optional) what frame to fetch
+     * @return array Backtrace, or NULL if not available.
+     * @access public
+     */
+    function getBacktrace($frame = null)
+    {
+        if (defined('PEAR_IGNORE_BACKTRACE')) {
+            return null;
+        }
+        if ($frame === null) {
+            return $this->backtrace;
+        }
+        return $this->backtrace[$frame];
+    }
+
+    function addUserInfo($info)
+    {
+        if (empty($this->userinfo)) {
+            $this->userinfo = $info;
+        } else {
+            $this->userinfo .= " ** $info";
+        }
+    }
+
+    function __toString()
+    {
+        return $this->getMessage();
+    }
+
+    /**
+     * Make a string representation of this object.
+     *
+     * @return string a string with an object summary
+     * @access public
+     */
+    function toString()
+    {
+        $modes = array();
+        $levels = array(E_USER_NOTICE  => 'notice',
+                        E_USER_WARNING => 'warning',
+                        E_USER_ERROR   => 'error');
+        if ($this->mode & PEAR_ERROR_CALLBACK) {
+            if (is_array($this->callback)) {
+                $callback = (is_object($this->callback[0]) ?
+                    strtolower(get_class($this->callback[0])) :
+                    $this->callback[0]) . '::' .
+                    $this->callback[1];
+            } else {
+                $callback = $this->callback;
+            }
+            return sprintf('[%s: message="%s" code=%d mode=callback '.
+                           'callback=%s prefix="%s" info="%s"]',
+                           strtolower(get_class($this)), $this->message, $this->code,
+                           $callback, $this->error_message_prefix,
+                           $this->userinfo);
+        }
+        if ($this->mode & PEAR_ERROR_PRINT) {
+            $modes[] = 'print';
+        }
+        if ($this->mode & PEAR_ERROR_TRIGGER) {
+            $modes[] = 'trigger';
+        }
+        if ($this->mode & PEAR_ERROR_DIE) {
+            $modes[] = 'die';
+        }
+        if ($this->mode & PEAR_ERROR_RETURN) {
+            $modes[] = 'return';
+        }
+        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
+                       'prefix="%s" info="%s"]',
+                       strtolower(get_class($this)), $this->message, $this->code,
+                       implode("|", $modes), $levels[$this->level],
+                       $this->error_message_prefix,
+                       $this->userinfo);
+    }
+}
+
+/*
+ * Local Variables:
+ * mode: php
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/src/PEAR/Error.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Dummy file to make autoloaders work
+ *
+ * PHP version 5
+ *
+ * @category PEAR
+ * @package  PEAR
+ * @author   Christian Weiske <cweiske@php.net>
+ * @license  http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link     http://pear.php.net/package/PEAR
+ */
+require_once __DIR__ . '/../PEAR.php';
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,979 @@
+<?php
+/**
+ * Error Stack Implementation
+ * 
+ * This is an incredibly simple implementation of a very complex error handling
+ * facility.  It contains the ability
+ * to track multiple errors from multiple packages simultaneously.  In addition,
+ * it can track errors of many levels, save data along with the error, context
+ * information such as the exact file, line number, class and function that
+ * generated the error, and if necessary, it can raise a traditional PEAR_Error.
+ * It has built-in support for PEAR::Log, to log errors as they occur
+ * 
+ * Since version 0.2alpha, it is also possible to selectively ignore errors,
+ * through the use of an error callback, see {@link pushCallback()}
+ * 
+ * Since version 0.3alpha, it is possible to specify the exception class
+ * returned from {@link push()}
+ *
+ * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
+ * still be done quite handily in an error callback or by manipulating the returned array
+ * @category   Debugging
+ * @package    PEAR_ErrorStack
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+
+/**
+ * Singleton storage
+ * 
+ * Format:
+ * <pre>
+ * array(
+ *  'package1' => PEAR_ErrorStack object,
+ *  'package2' => PEAR_ErrorStack object,
+ *  ...
+ * )
+ * </pre>
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
+
+/**
+ * Global error callback (default)
+ * 
+ * This is only used if set to non-false.  * is the default callback for
+ * all packages, whereas specific packages may set a default callback
+ * for all instances, regardless of whether they are a singleton or not.
+ *
+ * To exclude non-singletons, only set the local callback for the singleton
+ * @see PEAR_ErrorStack::setDefaultCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
+    '*' => false,
+);
+
+/**
+ * Global Log object (default)
+ * 
+ * This is only used if set to non-false.  Use to set a default log object for
+ * all stacks, regardless of instantiation order or location
+ * @see PEAR_ErrorStack::setDefaultLogger()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
+
+/**
+ * Global Overriding Callback
+ * 
+ * This callback will override any error callbacks that specific loggers have set.
+ * Use with EXTREME caution
+ * @see PEAR_ErrorStack::staticPushCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+
+/**#@+
+ * One of four possible return values from the error Callback
+ * @see PEAR_ErrorStack::_errorCallback()
+ */
+/**
+ * If this is returned, then the error will be both pushed onto the stack
+ * and logged.
+ */
+define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
+/**
+ * If this is returned, then the error will only be pushed onto the stack,
+ * and not logged.
+ */
+define('PEAR_ERRORSTACK_PUSH', 2);
+/**
+ * If this is returned, then the error will only be logged, but not pushed
+ * onto the error stack.
+ */
+define('PEAR_ERRORSTACK_LOG', 3);
+/**
+ * If this is returned, then the error is completely ignored.
+ */
+define('PEAR_ERRORSTACK_IGNORE', 4);
+/**
+ * If this is returned, then the error is logged and die() is called.
+ */
+define('PEAR_ERRORSTACK_DIE', 5);
+/**#@-*/
+
+/**
+ * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
+ * the singleton method.
+ */
+define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
+
+/**
+ * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
+ * that has no __toString() method
+ */
+define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
+/**
+ * Error Stack Implementation
+ *
+ * Usage:
+ * <code>
+ * // global error stack
+ * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
+ * // local error stack
+ * $local_stack = new PEAR_ErrorStack('MyPackage');
+ * </code>
+ * @author     Greg Beaver <cellog@php.net>
+ * @version    @package_version@
+ * @package    PEAR_ErrorStack
+ * @category   Debugging
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+class PEAR_ErrorStack {
+    /**
+     * Errors are stored in the order that they are pushed on the stack.
+     * @since 0.4alpha Errors are no longer organized by error level.
+     * This renders pop() nearly unusable, and levels could be more easily
+     * handled in a callback anyway
+     * @var array
+     * @access private
+     */
+    var $_errors = array();
+
+    /**
+     * Storage of errors by level.
+     *
+     * Allows easy retrieval and deletion of only errors from a particular level
+     * @since PEAR 1.4.0dev
+     * @var array
+     * @access private
+     */
+    var $_errorsByLevel = array();
+
+    /**
+     * Package name this error stack represents
+     * @var string
+     * @access protected
+     */
+    var $_package;
+    
+    /**
+     * Determines whether a PEAR_Error is thrown upon every error addition
+     * @var boolean
+     * @access private
+     */
+    var $_compat = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * message from the error code, otherwise the message passed in will be
+     * used
+     * @var false|string|array
+     * @access private
+     */
+    var $_msgCallback = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * context for an error.  For PHP-related errors, this will be a file
+     * and line number as retrieved from debug_backtrace(), but can be
+     * customized for other purposes.  The error might actually be in a separate
+     * configuration file, or in a database query.
+     * @var false|string|array
+     * @access protected
+     */
+    var $_contextCallback = false;
+
+    /**
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     *
+     * The return value must be one an PEAR_ERRORSTACK_* constant
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @var false|string|array
+     * @access protected
+     */
+    var $_errorCallback = array();
+
+    /**
+     * PEAR::Log object for logging errors
+     * @var false|Log
+     * @access protected
+     */
+    var $_logger = false;
+
+    /**
+     * Error messages - designed to be overridden
+     * @var array
+     * @abstract
+     */
+    var $_errorMsgs = array();
+
+    /**
+     * Set up a new error stack
+     *
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     */
+    function __construct($package, $msgCallback = false, $contextCallback = false,
+                         $throwPEAR_Error = false)
+    {
+        $this->_package = $package;
+        $this->setMessageCallback($msgCallback);
+        $this->setContextCallback($contextCallback);
+        $this->_compat = $throwPEAR_Error;
+    }
+    
+    /**
+     * Return a single error stack for this package.
+     * 
+     * Note that all parameters are ignored if the stack for package $package
+     * has already been instantiated
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     * @param string   $stackClass class to instantiate
+     *
+     * @return PEAR_ErrorStack
+     */
+    public static function &singleton(
+        $package, $msgCallback = false, $contextCallback = false,
+        $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack'
+    ) {
+        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+        }
+        if (!class_exists($stackClass)) {
+            if (function_exists('debug_backtrace')) {
+                $trace = debug_backtrace();
+            }
+            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
+                'exception', array('stackclass' => $stackClass),
+                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
+                false, $trace);
+        }
+        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
+            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
+
+        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+    }
+
+    /**
+     * Internal error handler for PEAR_ErrorStack class
+     * 
+     * Dies if the error is an exception (and would have died anyway)
+     * @access private
+     */
+    function _handleError($err)
+    {
+        if ($err['level'] == 'exception') {
+            $message = $err['message'];
+            if (isset($_SERVER['REQUEST_URI'])) {
+                echo '<br />';
+            } else {
+                echo "\n";
+            }
+            var_dump($err['context']);
+            die($message);
+        }
+    }
+    
+    /**
+     * Set up a PEAR::Log object for all error stacks that don't have one
+     * @param Log $log 
+     */
+    public static function setDefaultLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        } elseif (is_callable($log)) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        }
+    }
+    
+    /**
+     * Set up a PEAR::Log object for this error stack
+     * @param Log $log 
+     */
+    function setLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $this->_logger = &$log;
+        } elseif (is_callable($log)) {
+            $this->_logger = &$log;
+        }
+    }
+    
+    /**
+     * Set an error code => error message mapping callback
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for any instance
+     * @param array|string Callback function/method
+     */
+    function setMessageCallback($msgCallback)
+    {
+        if (!$msgCallback) {
+            $this->_msgCallback = array(&$this, 'getErrorMessage');
+        } else {
+            if (is_callable($msgCallback)) {
+                $this->_msgCallback = $msgCallback;
+            }
+        }
+    }
+    
+    /**
+     * Get an error code => error message mapping callback
+     * 
+     * This method returns the current callback that can be used to generate error
+     * messages
+     * @return array|string|false Callback function/method or false if none
+     */
+    function getMessageCallback()
+    {
+        return $this->_msgCallback;
+    }
+    
+    /**
+     * Sets a default callback to be used by all error stacks
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for a singleton
+     * @param array|string Callback function/method
+     * @param string Package name, or false for all packages
+     */
+    public static function setDefaultCallback($callback = false, $package = false)
+    {
+        if (!is_callable($callback)) {
+            $callback = false;
+        }
+        $package = $package ? $package : '*';
+        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
+    }
+    
+    /**
+     * Set a callback that generates context information (location of error) for an error stack
+     * 
+     * This method sets the callback that can be used to generate context
+     * information for an error.  Passing in NULL will disable context generation
+     * and remove the expensive call to debug_backtrace()
+     * @param array|string|null Callback function/method
+     */
+    function setContextCallback($contextCallback)
+    {
+        if ($contextCallback === null) {
+            return $this->_contextCallback = false;
+        }
+        if (!$contextCallback) {
+            $this->_contextCallback = array(&$this, 'getFileLine');
+        } else {
+            if (is_callable($contextCallback)) {
+                $this->_contextCallback = $contextCallback;
+            }
+        }
+    }
+    
+    /**
+     * Set an error Callback
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     * 
+     * The return value must be one of the ERRORSTACK_* constants.
+     * 
+     * This functionality can be used to emulate PEAR's pushErrorHandling, and
+     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
+     * the error stack or logging
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see popCallback()
+     * @param string|array $cb
+     */
+    function pushCallback($cb)
+    {
+        array_push($this->_errorCallback, $cb);
+    }
+    
+    /**
+     * Remove a callback from the error callback stack
+     * @see pushCallback()
+     * @return array|string|false
+     */
+    function popCallback()
+    {
+        if (!count($this->_errorCallback)) {
+            return false;
+        }
+        return array_pop($this->_errorCallback);
+    }
+    
+    /**
+     * Set a temporary overriding error callback for every package error stack
+     *
+     * Use this to temporarily disable all existing callbacks (can be used
+     * to emulate the @ operator, for instance)
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see staticPopCallback(), pushCallback()
+     * @param string|array $cb
+     */
+    public static function staticPushCallback($cb)
+    {
+        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
+    }
+    
+    /**
+     * Remove a temporary overriding error callback
+     * @see staticPushCallback()
+     * @return array|string|false
+     */
+    public static function staticPopCallback()
+    {
+        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
+        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
+            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+        }
+        return $ret;
+    }
+    
+    /**
+     * Add an error to the stack
+     * 
+     * If the message generator exists, it is called with 2 parameters.
+     *  - the current Error Stack object
+     *  - an array that is in the same format as an error.  Available indices
+     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
+     * 
+     * Next, if the error should contain context information, this is
+     * handled by the context grabbing method.
+     * Finally, the error is pushed onto the proper error stack
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     * thrown.  If a PEAR_Error is returned, the userinfo
+     * property is set to the following array:
+     * 
+     * <code>
+     * array(
+     *    'code' => $code,
+     *    'params' => $params,
+     *    'package' => $this->_package,
+     *    'level' => $level,
+     *    'time' => time(),
+     *    'context' => $context,
+     *    'message' => $msg,
+     * //['repackage' => $err] repackaged error array/Exception class
+     * );
+     * </code>
+     * 
+     * Normally, the previous array is returned.
+     */
+    function push($code, $level = 'error', $params = array(), $msg = false,
+                  $repackage = false, $backtrace = false)
+    {
+        $context = false;
+        // grab error context
+        if ($this->_contextCallback) {
+            if (!$backtrace) {
+                $backtrace = debug_backtrace();
+            }
+            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
+        }
+        
+        // save error
+        $time = explode(' ', microtime());
+        $time = $time[1] + $time[0];
+        $err = array(
+                'code' => $code,
+                'params' => $params,
+                'package' => $this->_package,
+                'level' => $level,
+                'time' => $time,
+                'context' => $context,
+                'message' => $msg,
+               );
+
+        if ($repackage) {
+            $err['repackage'] = $repackage;
+        }
+
+        // set up the error message, if necessary
+        if ($this->_msgCallback) {
+            $msg = call_user_func_array($this->_msgCallback,
+                                        array(&$this, $err));
+            $err['message'] = $msg;
+        }        
+        $push = $log = true;
+        $die = false;
+        // try the overriding callback first
+        $callback = $this->staticPopCallback();
+        if ($callback) {
+            $this->staticPushCallback($callback);
+        }
+        if (!is_callable($callback)) {
+            // try the local callback next
+            $callback = $this->popCallback();
+            if (is_callable($callback)) {
+                $this->pushCallback($callback);
+            } else {
+                // try the default callback
+                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
+            }
+        }
+        if (is_callable($callback)) {
+            switch(call_user_func($callback, $err)){
+            	case PEAR_ERRORSTACK_IGNORE: 
+            		return $err;
+        		break;
+            	case PEAR_ERRORSTACK_PUSH: 
+            		$log = false;
+        		break;
+            	case PEAR_ERRORSTACK_LOG: 
+            		$push = false;
+        		break;
+            	case PEAR_ERRORSTACK_DIE: 
+            		$die = true;
+        		break;
+                // anything else returned has the same effect as pushandlog
+            }
+        }
+        if ($push) {
+            array_unshift($this->_errors, $err);
+            if (!isset($this->_errorsByLevel[$err['level']])) {
+                $this->_errorsByLevel[$err['level']] = array();
+            }
+            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
+        }
+        if ($log) {
+            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
+                $this->_log($err);
+            }
+        }
+        if ($die) {
+            die();
+        }
+        if ($this->_compat && $push) {
+            return $this->raiseError($msg, $code, null, null, $err);
+        }
+        return $err;
+    }
+    
+    /**
+     * Static version of {@link push()}
+     * 
+     * @param string $package   Package name this error belongs to
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     *                          thrown.  see docs for {@link push()}
+     */
+    public static function staticPush(
+        $package, $code, $level = 'error', $params = array(),
+        $msg = false, $repackage = false, $backtrace = false
+    ) {
+        $s = &PEAR_ErrorStack::singleton($package);
+        if ($s->_contextCallback) {
+            if (!$backtrace) {
+                if (function_exists('debug_backtrace')) {
+                    $backtrace = debug_backtrace();
+                }
+            }
+        }
+        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
+    }
+    
+    /**
+     * Log an error using PEAR::Log
+     * @param array $err Error array
+     * @param array $levels Error level => Log constant map
+     * @access protected
+     */
+    function _log($err)
+    {
+        if ($this->_logger) {
+            $logger = &$this->_logger;
+        } else {
+            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
+        }
+        if (is_a($logger, 'Log')) {
+            $levels = array(
+                'exception' => PEAR_LOG_CRIT,
+                'alert' => PEAR_LOG_ALERT,
+                'critical' => PEAR_LOG_CRIT,
+                'error' => PEAR_LOG_ERR,
+                'warning' => PEAR_LOG_WARNING,
+                'notice' => PEAR_LOG_NOTICE,
+                'info' => PEAR_LOG_INFO,
+                'debug' => PEAR_LOG_DEBUG);
+            if (isset($levels[$err['level']])) {
+                $level = $levels[$err['level']];
+            } else {
+                $level = PEAR_LOG_INFO;
+            }
+            $logger->log($err['message'], $level, $err);
+        } else { // support non-standard logs
+            call_user_func($logger, $err);
+        }
+    }
+
+    
+    /**
+     * Pop an error off of the error stack
+     * 
+     * @return false|array
+     * @since 0.4alpha it is no longer possible to specify a specific error
+     * level to return - the last error pushed will be returned, instead
+     */
+    function pop()
+    {
+        $err = @array_shift($this->_errors);
+        if (!is_null($err)) {
+            @array_pop($this->_errorsByLevel[$err['level']]);
+            if (!count($this->_errorsByLevel[$err['level']])) {
+                unset($this->_errorsByLevel[$err['level']]);
+            }
+        }
+        return $err;
+    }
+
+    /**
+     * Pop an error off of the error stack, static method
+     *
+     * @param string package name
+     * @return boolean
+     * @since PEAR1.5.0a1
+     */
+    function staticPop($package)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
+        }
+    }
+
+    /**
+     * Determine whether there are any errors on the stack
+     * @param string|array Level name.  Use to determine if any errors
+     * of level (string), or levels (array) have been pushed
+     * @return boolean
+     */
+    function hasErrors($level = false)
+    {
+        if ($level) {
+            return isset($this->_errorsByLevel[$level]);
+        }
+        return count($this->_errors);
+    }
+    
+    /**
+     * Retrieve all errors since last purge
+     * 
+     * @param boolean set in order to empty the error stack
+     * @param string level name, to return only errors of a particular severity
+     * @return array
+     */
+    function getErrors($purge = false, $level = false)
+    {
+        if (!$purge) {
+            if ($level) {
+                if (!isset($this->_errorsByLevel[$level])) {
+                    return array();
+                } else {
+                    return $this->_errorsByLevel[$level];
+                }
+            } else {
+                return $this->_errors;
+            }
+        }
+        if ($level) {
+            $ret = $this->_errorsByLevel[$level];
+            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
+                // entries are references to the $_errors array
+                $this->_errorsByLevel[$level][$i] = false;
+            }
+            // array_filter removes all entries === false
+            $this->_errors = array_filter($this->_errors);
+            unset($this->_errorsByLevel[$level]);
+            return $ret;
+        }
+        $ret = $this->_errors;
+        $this->_errors = array();
+        $this->_errorsByLevel = array();
+        return $ret;
+    }
+    
+    /**
+     * Determine whether there are any errors on a single error stack, or on any error stack
+     *
+     * The optional parameter can be used to test the existence of any errors without the need of
+     * singleton instantiation
+     * @param string|false Package name to check for errors
+     * @param string Level name to check for a particular severity
+     * @return boolean
+     */
+    public static function staticHasErrors($package = false, $level = false)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            if ($obj->hasErrors($level)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Get a list of all errors since last purge, organized by package
+     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
+     * @param boolean $purge Set to purge the error stack of existing errors
+     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
+     * @param boolean $merge Set to return a flat array, not organized by package
+     * @param array   $sortfunc Function used to sort a merged array - default
+     *        sorts by time, and should be good for most cases
+     *
+     * @return array 
+     */
+    public static function staticGetErrors(
+        $purge = false, $level = false, $merge = false,
+        $sortfunc = array('PEAR_ErrorStack', '_sortErrors')
+    ) {
+        $ret = array();
+        if (!is_callable($sortfunc)) {
+            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
+            if ($test) {
+                if ($merge) {
+                    $ret = array_merge($ret, $test);
+                } else {
+                    $ret[$package] = $test;
+                }
+            }
+        }
+        if ($merge) {
+            usort($ret, $sortfunc);
+        }
+        return $ret;
+    }
+    
+    /**
+     * Error sorting function, sorts by time
+     * @access private
+     */
+    public static function _sortErrors($a, $b)
+    {
+        if ($a['time'] == $b['time']) {
+            return 0;
+        }
+        if ($a['time'] < $b['time']) {
+            return 1;
+        }
+        return -1;
+    }
+
+    /**
+     * Standard file/line number/function/class context callback
+     *
+     * This function uses a backtrace generated from {@link debug_backtrace()}
+     * and so will not work at all in PHP < 4.3.0.  The frame should
+     * reference the frame that contains the source of the error.
+     * @return array|false either array('file' => file, 'line' => line,
+     *         'function' => function name, 'class' => class name) or
+     *         if this doesn't work, then false
+     * @param unused
+     * @param integer backtrace frame.
+     * @param array Results of debug_backtrace()
+     */
+    public static function getFileLine($code, $params, $backtrace = null)
+    {
+        if ($backtrace === null) {
+            return false;
+        }
+        $frame = 0;
+        $functionframe = 1;
+        if (!isset($backtrace[1])) {
+            $functionframe = 0;
+        } else {
+            while (isset($backtrace[$functionframe]['function']) &&
+                  $backtrace[$functionframe]['function'] == 'eval' &&
+                  isset($backtrace[$functionframe + 1])) {
+                $functionframe++;
+            }
+        }
+        if (isset($backtrace[$frame])) {
+            if (!isset($backtrace[$frame]['file'])) {
+                $frame++;
+            }
+            $funcbacktrace = $backtrace[$functionframe];
+            $filebacktrace = $backtrace[$frame];
+            $ret = array('file' => $filebacktrace['file'],
+                         'line' => $filebacktrace['line']);
+            // rearrange for eval'd code or create function errors
+            if (strpos($filebacktrace['file'], '(') && 
+            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
+                  $matches)) {
+                $ret['file'] = $matches[1];
+                $ret['line'] = $matches[2] + 0;
+            }
+            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
+                if ($funcbacktrace['function'] != 'eval') {
+                    if ($funcbacktrace['function'] == '__lambda_func') {
+                        $ret['function'] = 'create_function() code';
+                    } else {
+                        $ret['function'] = $funcbacktrace['function'];
+                    }
+                }
+            }
+            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
+                $ret['class'] = $funcbacktrace['class'];
+            }
+            return $ret;
+        }
+        return false;
+    }
+    
+    /**
+     * Standard error message generation callback
+     * 
+     * This method may also be called by a custom error message generator
+     * to fill in template values from the params array, simply
+     * set the third parameter to the error message template string to use
+     * 
+     * The special variable %__msg% is reserved: use it only to specify
+     * where a message passed in by the user should be placed in the template,
+     * like so:
+     * 
+     * Error message: %msg% - internal error
+     * 
+     * If the message passed like so:
+     * 
+     * <code>
+     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
+     * </code>
+     * 
+     * The returned error message will be "Error message: server error 500 -
+     * internal error"
+     * @param PEAR_ErrorStack
+     * @param array
+     * @param string|false Pre-generated error message template
+     *
+     * @return string
+     */
+    public static function getErrorMessage(&$stack, $err, $template = false)
+    {
+        if ($template) {
+            $mainmsg = $template;
+        } else {
+            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
+        }
+        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
+        if (is_array($err['params']) && count($err['params'])) {
+            foreach ($err['params'] as $name => $val) {
+                if (is_array($val)) {
+                    // @ is needed in case $val is a multi-dimensional array
+                    $val = @implode(', ', $val);
+                }
+                if (is_object($val)) {
+                    if (method_exists($val, '__toString')) {
+                        $val = $val->__toString();
+                    } else {
+                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
+                            'warning', array('obj' => get_class($val)),
+                            'object %obj% passed into getErrorMessage, but has no __toString() method');
+                        $val = 'Object';
+                    }
+                }
+                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
+            }
+        }
+        return $mainmsg;
+    }
+    
+    /**
+     * Standard Error Message Template generator from code
+     * @return string
+     */
+    function getErrorMessageTemplate($code)
+    {
+        if (!isset($this->_errorMsgs[$code])) {
+            return '%__msg%';
+        }
+        return $this->_errorMsgs[$code];
+    }
+    
+    /**
+     * Set the Error Message Template array
+     * 
+     * The array format must be:
+     * <pre>
+     * array(error code => 'message template',...)
+     * </pre>
+     * 
+     * Error message parameters passed into {@link push()} will be used as input
+     * for the error message.  If the template is 'message %foo% was %bar%', and the
+     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
+     * be 'message one was six'
+     * @return string
+     */
+    function setErrorMessageTemplate($template)
+    {
+        $this->_errorMsgs = $template;
+    }
+    
+    
+    /**
+     * emulate PEAR::raiseError()
+     * 
+     * @return PEAR_Error
+     */
+    function raiseError()
+    {
+        require_once 'PEAR.php';
+        $args = func_get_args();
+        return call_user_func_array(array('PEAR', 'raiseError'), $args);
+    }
+}
+$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
+$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear-core-minimal/src/System.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,622 @@
+<?php
+/**
+ * File/Directory manipulation
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    System
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR.php';
+require_once 'Console/Getopt.php';
+
+$GLOBALS['_System_temp_files'] = array();
+
+/**
+* System offers cross platform compatible system functions
+*
+* Static functions for different operations. Should work under
+* Unix and Windows. The names and usage has been taken from its respectively
+* GNU commands. The functions will return (bool) false on error and will
+* trigger the error with the PHP trigger_error() function (you can silence
+* the error by prefixing a '@' sign after the function call, but this
+* is not recommended practice.  Instead use an error handler with
+* {@link set_error_handler()}).
+*
+* Documentation on this class you can find in:
+* http://pear.php.net/manual/
+*
+* Example usage:
+* if (!@System::rm('-r file1 dir1')) {
+*    print "could not delete file1 or dir1";
+* }
+*
+* In case you need to to pass file names with spaces,
+* pass the params as an array:
+*
+* System::rm(array('-r', $file1, $dir1));
+*
+* @category   pear
+* @package    System
+* @author     Tomas V.V. Cox <cox@idecnet.com>
+* @copyright  1997-2006 The PHP Group
+* @license    http://opensource.org/licenses/bsd-license.php New BSD License
+* @version    Release: @package_version@
+* @link       http://pear.php.net/package/PEAR
+* @since      Class available since Release 0.1
+* @static
+*/
+class System
+{
+    /**
+     * returns the commandline arguments of a function
+     *
+     * @param    string  $argv           the commandline
+     * @param    string  $short_options  the allowed option short-tags
+     * @param    string  $long_options   the allowed option long-tags
+     * @return   array   the given options and there values
+     */
+    public static function _parseArgs($argv, $short_options, $long_options = null)
+    {
+        if (!is_array($argv) && $argv !== null) {
+            /*
+            // Quote all items that are a short option
+            $av = preg_split('/(\A| )--?[a-z0-9]+[ =]?((?<!\\\\)((,\s*)|((?<!,)\s+))?)/i', $argv, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);
+            $offset = 0;
+            foreach ($av as $a) {
+                $b = trim($a[0]);
+                if ($b{0} == '"' || $b{0} == "'") {
+                    continue;
+                }
+
+                $escape = escapeshellarg($b);
+                $pos = $a[1] + $offset;
+                $argv = substr_replace($argv, $escape, $pos, strlen($b));
+                $offset += 2;
+            }
+            */
+
+            // Find all items, quoted or otherwise
+            preg_match_all("/(?:[\"'])(.*?)(?:['\"])|([^\s]+)/", $argv, $av);
+            $argv = $av[1];
+            foreach ($av[2] as $k => $a) {
+                if (empty($a)) {
+                    continue;
+                }
+                $argv[$k] = trim($a) ;
+            }
+        }
+
+        return Console_Getopt::getopt2($argv, $short_options, $long_options);
+    }
+
+    /**
+     * Output errors with PHP trigger_error(). You can silence the errors
+     * with prefixing a "@" sign to the function call: @System::mkdir(..);
+     *
+     * @param mixed $error a PEAR error or a string with the error message
+     * @return bool false
+     */
+    protected static function raiseError($error)
+    {
+        if (PEAR::isError($error)) {
+            $error = $error->getMessage();
+        }
+        trigger_error($error, E_USER_WARNING);
+        return false;
+    }
+
+    /**
+     * Creates a nested array representing the structure of a directory
+     *
+     * System::_dirToStruct('dir1', 0) =>
+     *   Array
+     *    (
+     *    [dirs] => Array
+     *        (
+     *            [0] => dir1
+     *        )
+     *
+     *    [files] => Array
+     *        (
+     *            [0] => dir1/file2
+     *            [1] => dir1/file3
+     *        )
+     *    )
+     * @param    string  $sPath      Name of the directory
+     * @param    integer $maxinst    max. deep of the lookup
+     * @param    integer $aktinst    starting deep of the lookup
+     * @param    bool    $silent     if true, do not emit errors.
+     * @return   array   the structure of the dir
+     */
+    protected static function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false)
+    {
+        $struct = array('dirs' => array(), 'files' => array());
+        if (($dir = @opendir($sPath)) === false) {
+            if (!$silent) {
+                System::raiseError("Could not open dir $sPath");
+            }
+            return $struct; // XXX could not open error
+        }
+
+        $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ?
+        $list = array();
+        while (false !== ($file = readdir($dir))) {
+            if ($file != '.' && $file != '..') {
+                $list[] = $file;
+            }
+        }
+
+        closedir($dir);
+        natsort($list);
+        if ($aktinst < $maxinst || $maxinst == 0) {
+            foreach ($list as $val) {
+                $path = $sPath . DIRECTORY_SEPARATOR . $val;
+                if (is_dir($path) && !is_link($path)) {
+                    $tmp    = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
+                    $struct = array_merge_recursive($struct, $tmp);
+                } else {
+                    $struct['files'][] = $path;
+                }
+            }
+        }
+
+        return $struct;
+    }
+
+    /**
+     * Creates a nested array representing the structure of a directory and files
+     *
+     * @param    array $files Array listing files and dirs
+     * @return   array
+     * @static
+     * @see System::_dirToStruct()
+     */
+    protected static function _multipleToStruct($files)
+    {
+        $struct = array('dirs' => array(), 'files' => array());
+        settype($files, 'array');
+        foreach ($files as $file) {
+            if (is_dir($file) && !is_link($file)) {
+                $tmp    = System::_dirToStruct($file, 0);
+                $struct = array_merge_recursive($tmp, $struct);
+            } else {
+                if (!in_array($file, $struct['files'])) {
+                    $struct['files'][] = $file;
+                }
+            }
+        }
+        return $struct;
+    }
+
+    /**
+     * The rm command for removing files.
+     * Supports multiple files and dirs and also recursive deletes
+     *
+     * @param    string  $args   the arguments for rm
+     * @return   mixed   PEAR_Error or true for success
+     * @static
+     * @access   public
+     */
+    public static function rm($args)
+    {
+        $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-)
+        if (PEAR::isError($opts)) {
+            return System::raiseError($opts);
+        }
+        foreach ($opts[0] as $opt) {
+            if ($opt[0] == 'r') {
+                $do_recursive = true;
+            }
+        }
+        $ret = true;
+        if (isset($do_recursive)) {
+            $struct = System::_multipleToStruct($opts[1]);
+            foreach ($struct['files'] as $file) {
+                if (!@unlink($file)) {
+                    $ret = false;
+                }
+            }
+
+            rsort($struct['dirs']);
+            foreach ($struct['dirs'] as $dir) {
+                if (!@rmdir($dir)) {
+                    $ret = false;
+                }
+            }
+        } else {
+            foreach ($opts[1] as $file) {
+                $delete = (is_dir($file)) ? 'rmdir' : 'unlink';
+                if (!@$delete($file)) {
+                    $ret = false;
+                }
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * Make directories.
+     *
+     * The -p option will create parent directories
+     * @param    string  $args    the name of the director(y|ies) to create
+     * @return   bool    True for success
+     */
+    public static function mkDir($args)
+    {
+        $opts = System::_parseArgs($args, 'pm:');
+        if (PEAR::isError($opts)) {
+            return System::raiseError($opts);
+        }
+
+        $mode = 0777; // default mode
+        foreach ($opts[0] as $opt) {
+            if ($opt[0] == 'p') {
+                $create_parents = true;
+            } elseif ($opt[0] == 'm') {
+                // if the mode is clearly an octal number (starts with 0)
+                // convert it to decimal
+                if (strlen($opt[1]) && $opt[1]{0} == '0') {
+                    $opt[1] = octdec($opt[1]);
+                } else {
+                    // convert to int
+                    $opt[1] += 0;
+                }
+                $mode = $opt[1];
+            }
+        }
+
+        $ret = true;
+        if (isset($create_parents)) {
+            foreach ($opts[1] as $dir) {
+                $dirstack = array();
+                while ((!file_exists($dir) || !is_dir($dir)) &&
+                        $dir != DIRECTORY_SEPARATOR) {
+                    array_unshift($dirstack, $dir);
+                    $dir = dirname($dir);
+                }
+
+                while ($newdir = array_shift($dirstack)) {
+                    if (!is_writeable(dirname($newdir))) {
+                        $ret = false;
+                        break;
+                    }
+
+                    if (!mkdir($newdir, $mode)) {
+                        $ret = false;
+                    }
+                }
+            }
+        } else {
+            foreach($opts[1] as $dir) {
+                if ((@file_exists($dir) || !is_dir($dir)) && !mkdir($dir, $mode)) {
+                    $ret = false;
+                }
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Concatenate files
+     *
+     * Usage:
+     * 1) $var = System::cat('sample.txt test.txt');
+     * 2) System::cat('sample.txt test.txt > final.txt');
+     * 3) System::cat('sample.txt test.txt >> final.txt');
+     *
+     * Note: as the class use fopen, urls should work also (test that)
+     *
+     * @param    string  $args   the arguments
+     * @return   boolean true on success
+     */
+    public static function &cat($args)
+    {
+        $ret = null;
+        $files = array();
+        if (!is_array($args)) {
+            $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
+        }
+
+        $count_args = count($args);
+        for ($i = 0; $i < $count_args; $i++) {
+            if ($args[$i] == '>') {
+                $mode = 'wb';
+                $outputfile = $args[$i+1];
+                break;
+            } elseif ($args[$i] == '>>') {
+                $mode = 'ab+';
+                $outputfile = $args[$i+1];
+                break;
+            } else {
+                $files[] = $args[$i];
+            }
+        }
+        $outputfd = false;
+        if (isset($mode)) {
+            if (!$outputfd = fopen($outputfile, $mode)) {
+                $err = System::raiseError("Could not open $outputfile");
+                return $err;
+            }
+            $ret = true;
+        }
+        foreach ($files as $file) {
+            if (!$fd = fopen($file, 'r')) {
+                System::raiseError("Could not open $file");
+                continue;
+            }
+            while ($cont = fread($fd, 2048)) {
+                if (is_resource($outputfd)) {
+                    fwrite($outputfd, $cont);
+                } else {
+                    $ret .= $cont;
+                }
+            }
+            fclose($fd);
+        }
+        if (is_resource($outputfd)) {
+            fclose($outputfd);
+        }
+        return $ret;
+    }
+
+    /**
+     * Creates temporary files or directories. This function will remove
+     * the created files when the scripts finish its execution.
+     *
+     * Usage:
+     *   1) $tempfile = System::mktemp("prefix");
+     *   2) $tempdir  = System::mktemp("-d prefix");
+     *   3) $tempfile = System::mktemp();
+     *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
+     *
+     * prefix -> The string that will be prepended to the temp name
+     *           (defaults to "tmp").
+     * -d     -> A temporary dir will be created instead of a file.
+     * -t     -> The target dir where the temporary (file|dir) will be created. If
+     *           this param is missing by default the env vars TMP on Windows or
+     *           TMPDIR in Unix will be used. If these vars are also missing
+     *           c:\windows\temp or /tmp will be used.
+     *
+     * @param   string  $args  The arguments
+     * @return  mixed   the full path of the created (file|dir) or false
+     * @see System::tmpdir()
+     */
+    public static function mktemp($args = null)
+    {
+        static $first_time = true;
+        $opts = System::_parseArgs($args, 't:d');
+        if (PEAR::isError($opts)) {
+            return System::raiseError($opts);
+        }
+
+        foreach ($opts[0] as $opt) {
+            if ($opt[0] == 'd') {
+                $tmp_is_dir = true;
+            } elseif ($opt[0] == 't') {
+                $tmpdir = $opt[1];
+            }
+        }
+
+        $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp';
+        if (!isset($tmpdir)) {
+            $tmpdir = System::tmpdir();
+        }
+
+        if (!System::mkDir(array('-p', $tmpdir))) {
+            return false;
+        }
+
+        $tmp = tempnam($tmpdir, $prefix);
+        if (isset($tmp_is_dir)) {
+            unlink($tmp); // be careful possible race condition here
+            if (!mkdir($tmp, 0700)) {
+                return System::raiseError("Unable to create temporary directory $tmpdir");
+            }
+        }
+
+        $GLOBALS['_System_temp_files'][] = $tmp;
+        if (isset($tmp_is_dir)) {
+            //$GLOBALS['_System_temp_files'][] = dirname($tmp);
+        }
+
+        if ($first_time) {
+            PEAR::registerShutdownFunc(array('System', '_removeTmpFiles'));
+            $first_time = false;
+        }
+
+        return $tmp;
+    }
+
+    /**
+     * Remove temporary files created my mkTemp. This function is executed
+     * at script shutdown time
+     */
+    public static function _removeTmpFiles()
+    {
+        if (count($GLOBALS['_System_temp_files'])) {
+            $delete = $GLOBALS['_System_temp_files'];
+            array_unshift($delete, '-r');
+            System::rm($delete);
+            $GLOBALS['_System_temp_files'] = array();
+        }
+    }
+
+    /**
+     * Get the path of the temporal directory set in the system
+     * by looking in its environments variables.
+     * Note: php.ini-recommended removes the "E" from the variables_order setting,
+     * making unavaible the $_ENV array, that s why we do tests with _ENV
+     *
+     * @return string The temporary directory on the system
+     */
+    public static function tmpdir()
+    {
+        if (OS_WINDOWS) {
+            if ($var = isset($_ENV['TMP']) ? $_ENV['TMP'] : getenv('TMP')) {
+                return $var;
+            }
+            if ($var = isset($_ENV['TEMP']) ? $_ENV['TEMP'] : getenv('TEMP')) {
+                return $var;
+            }
+            if ($var = isset($_ENV['USERPROFILE']) ? $_ENV['USERPROFILE'] : getenv('USERPROFILE')) {
+                return $var;
+            }
+            if ($var = isset($_ENV['windir']) ? $_ENV['windir'] : getenv('windir')) {
+                return $var;
+            }
+            return getenv('SystemRoot') . '\temp';
+        }
+        if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) {
+            return $var;
+        }
+        return realpath('/tmp');
+    }
+
+    /**
+     * The "which" command (show the full path of a command)
+     *
+     * @param string $program The command to search for
+     * @param mixed  $fallback Value to return if $program is not found
+     *
+     * @return mixed A string with the full path or false if not found
+     * @author Stig Bakken <ssb@php.net>
+     */
+    public static function which($program, $fallback = false)
+    {
+        // enforce API
+        if (!is_string($program) || '' == $program) {
+            return $fallback;
+        }
+
+        // full path given
+        if (basename($program) != $program) {
+            $path_elements[] = dirname($program);
+            $program = basename($program);
+        } else {
+            $path = getenv('PATH');
+            if (!$path) {
+                $path = getenv('Path'); // some OSes are just stupid enough to do this
+            }
+
+            $path_elements = explode(PATH_SEPARATOR, $path);
+        }
+
+        if (OS_WINDOWS) {
+            $exe_suffixes = getenv('PATHEXT')
+                                ? explode(PATH_SEPARATOR, getenv('PATHEXT'))
+                                : array('.exe','.bat','.cmd','.com');
+            // allow passing a command.exe param
+            if (strpos($program, '.') !== false) {
+                array_unshift($exe_suffixes, '');
+            }
+        } else {
+            $exe_suffixes = array('');
+        }
+
+        foreach ($exe_suffixes as $suff) {
+            foreach ($path_elements as $dir) {
+                $file = $dir . DIRECTORY_SEPARATOR . $program . $suff;
+                if (is_executable($file)) {
+                    return $file;
+                }
+            }
+        }
+        return $fallback;
+    }
+
+    /**
+     * The "find" command
+     *
+     * Usage:
+     *
+     * System::find($dir);
+     * System::find("$dir -type d");
+     * System::find("$dir -type f");
+     * System::find("$dir -name *.php");
+     * System::find("$dir -name *.php -name *.htm*");
+     * System::find("$dir -maxdepth 1");
+     *
+     * Params implemented:
+     * $dir            -> Start the search at this directory
+     * -type d         -> return only directories
+     * -type f         -> return only files
+     * -maxdepth <n>   -> max depth of recursion
+     * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
+     *
+     * @param  mixed Either array or string with the command line
+     * @return array Array of found files
+     */
+    public static function find($args)
+    {
+        if (!is_array($args)) {
+            $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
+        }
+        $dir = realpath(array_shift($args));
+        if (!$dir) {
+            return array();
+        }
+        $patterns = array();
+        $depth = 0;
+        $do_files = $do_dirs = true;
+        $args_count = count($args);
+        for ($i = 0; $i < $args_count; $i++) {
+            switch ($args[$i]) {
+                case '-type':
+                    if (in_array($args[$i+1], array('d', 'f'))) {
+                        if ($args[$i+1] == 'd') {
+                            $do_files = false;
+                        } else {
+                            $do_dirs = false;
+                        }
+                    }
+                    $i++;
+                    break;
+                case '-name':
+                    $name = preg_quote($args[$i+1], '#');
+                    // our magic characters ? and * have just been escaped,
+                    // so now we change the escaped versions to PCRE operators
+                    $name = strtr($name, array('\?' => '.', '\*' => '.*'));
+                    $patterns[] = '('.$name.')';
+                    $i++;
+                    break;
+                case '-maxdepth':
+                    $depth = $args[$i+1];
+                    break;
+            }
+        }
+        $path = System::_dirToStruct($dir, $depth, 0, true);
+        if ($do_files && $do_dirs) {
+            $files = array_merge($path['files'], $path['dirs']);
+        } elseif ($do_dirs) {
+            $files = $path['dirs'];
+        } else {
+            $files = $path['files'];
+        }
+        if (count($patterns)) {
+            $dsq = preg_quote(DIRECTORY_SEPARATOR, '#');
+            $pattern = '#(^|'.$dsq.')'.implode('|', $patterns).'($|'.$dsq.')#';
+            $ret = array();
+            $files_count = count($files);
+            for ($i = 0; $i < $files_count; $i++) {
+                // only search in the part of the file below the current directory
+                $filepart = basename($files[$i]);
+                if (preg_match($pattern, $filepart)) {
+                    $ret[] = $files[$i];
+                }
+            }
+            return $ret;
+        }
+        return $files;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,6 @@
+PEAR_Exception*.tgz
+
+# composer related
+composer.lock
+composer.phar
+vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/.travis.yml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,7 @@
+language: php
+php:
+  - 5.6
+  - 5.5
+  - 5.4
+script:
+  - cd tests && phpunit --coverage-text .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/LICENSE	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,27 @@
+Copyright (c) 1997-2009,
+ Stig Bakken <ssb@php.net>,
+ Gregory Beaver <cellog@php.net>,
+ Helgi Þormar Þorbjörnsson <helgi@php.net>,
+ Tomas V.V.Cox <cox@idecnet.com>,
+ Martin Jansen <mj@php.net>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/PEAR/Exception.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,456 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
+/**
+ * PEAR_Exception
+ *
+ * PHP version 5
+ *
+ * @category  PEAR
+ * @package   PEAR_Exception
+ * @author    Tomas V. V. Cox <cox@idecnet.com>
+ * @author    Hans Lellelid <hans@velum.net>
+ * @author    Bertrand Mansion <bmansion@mamasam.com>
+ * @author    Greg Beaver <cellog@php.net>
+ * @copyright 1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link      http://pear.php.net/package/PEAR_Exception
+ * @since     File available since Release 1.0.0
+ */
+
+
+/**
+ * Base PEAR_Exception Class
+ *
+ * 1) Features:
+ *
+ * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
+ * - Definable triggers, shot when exceptions occur
+ * - Pretty and informative error messages
+ * - Added more context info available (like class, method or cause)
+ * - cause can be a PEAR_Exception or an array of mixed
+ *   PEAR_Exceptions/PEAR_ErrorStack warnings
+ * - callbacks for specific exception classes and their children
+ *
+ * 2) Ideas:
+ *
+ * - Maybe a way to define a 'template' for the output
+ *
+ * 3) Inherited properties from PHP Exception Class:
+ *
+ * protected $message
+ * protected $code
+ * protected $line
+ * protected $file
+ * private   $trace
+ *
+ * 4) Inherited methods from PHP Exception Class:
+ *
+ * __clone
+ * __construct
+ * getMessage
+ * getCode
+ * getFile
+ * getLine
+ * getTraceSafe
+ * getTraceSafeAsString
+ * __toString
+ *
+ * 5) Usage example
+ *
+ * <code>
+ *  require_once 'PEAR/Exception.php';
+ *
+ *  class Test {
+ *     function foo() {
+ *         throw new PEAR_Exception('Error Message', ERROR_CODE);
+ *     }
+ *  }
+ *
+ *  function myLogger($pear_exception) {
+ *     echo $pear_exception->getMessage();
+ *  }
+ *  // each time a exception is thrown the 'myLogger' will be called
+ *  // (its use is completely optional)
+ *  PEAR_Exception::addObserver('myLogger');
+ *  $test = new Test;
+ *  try {
+ *     $test->foo();
+ *  } catch (PEAR_Exception $e) {
+ *     print $e;
+ *  }
+ * </code>
+ *
+ * @category  PEAR
+ * @package   PEAR_Exception
+ * @author    Tomas V.V.Cox <cox@idecnet.com>
+ * @author    Hans Lellelid <hans@velum.net>
+ * @author    Bertrand Mansion <bmansion@mamasam.com>
+ * @author    Greg Beaver <cellog@php.net>
+ * @copyright 1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version   Release: @package_version@
+ * @link      http://pear.php.net/package/PEAR_Exception
+ * @since     Class available since Release 1.0.0
+ */
+class PEAR_Exception extends Exception
+{
+    const OBSERVER_PRINT = -2;
+    const OBSERVER_TRIGGER = -4;
+    const OBSERVER_DIE = -8;
+    protected $cause;
+    private static $_observers = array();
+    private static $_uniqueid = 0;
+    private $_trace;
+
+    /**
+     * Supported signatures:
+     *  - PEAR_Exception(string $message);
+     *  - PEAR_Exception(string $message, int $code);
+     *  - PEAR_Exception(string $message, Exception $cause);
+     *  - PEAR_Exception(string $message, Exception $cause, int $code);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
+     *  - PEAR_Exception(string $message, array $causes);
+     *  - PEAR_Exception(string $message, array $causes, int $code);
+     *
+     * @param string                              $message exception message
+     * @param int|Exception|PEAR_Error|array|null $p2      exception cause
+     * @param int|null                            $p3      exception code or null
+     */
+    public function __construct($message, $p2 = null, $p3 = null)
+    {
+        if (is_int($p2)) {
+            $code = $p2;
+            $this->cause = null;
+        } elseif (is_object($p2) || is_array($p2)) {
+            // using is_object allows both Exception and PEAR_Error
+            if (is_object($p2) && !($p2 instanceof Exception)) {
+                if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
+                    throw new PEAR_Exception(
+                        'exception cause must be Exception, ' .
+                        'array, or PEAR_Error'
+                    );
+                }
+            }
+            $code = $p3;
+            if (is_array($p2) && isset($p2['message'])) {
+                // fix potential problem of passing in a single warning
+                $p2 = array($p2);
+            }
+            $this->cause = $p2;
+        } else {
+            $code = null;
+            $this->cause = null;
+        }
+        parent::__construct($message, $code);
+        $this->signal();
+    }
+
+    /**
+     * Add an exception observer
+     *
+     * @param mixed  $callback - A valid php callback, see php func is_callable()
+     *                         - A PEAR_Exception::OBSERVER_* constant
+     *                         - An array(const PEAR_Exception::OBSERVER_*,
+     *                           mixed $options)
+     * @param string $label    The name of the observer. Use this if you want
+     *                         to remove it later with removeObserver()
+     *
+     * @return void
+     */
+    public static function addObserver($callback, $label = 'default')
+    {
+        self::$_observers[$label] = $callback;
+    }
+
+    /**
+     * Remove an exception observer
+     *
+     * @param string $label Name of the observer
+     *
+     * @return void
+     */
+    public static function removeObserver($label = 'default')
+    {
+        unset(self::$_observers[$label]);
+    }
+
+    /**
+     * Generate a unique ID for an observer
+     *
+     * @return int unique identifier for an observer
+     */
+    public static function getUniqueId()
+    {
+        return self::$_uniqueid++;
+    }
+
+    /**
+     * Send a signal to all observers
+     *
+     * @return void
+     */
+    protected function signal()
+    {
+        foreach (self::$_observers as $func) {
+            if (is_callable($func)) {
+                call_user_func($func, $this);
+                continue;
+            }
+            settype($func, 'array');
+            switch ($func[0]) {
+            case self::OBSERVER_PRINT :
+                $f = (isset($func[1])) ? $func[1] : '%s';
+                printf($f, $this->getMessage());
+                break;
+            case self::OBSERVER_TRIGGER :
+                $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
+                trigger_error($this->getMessage(), $f);
+                break;
+            case self::OBSERVER_DIE :
+                $f = (isset($func[1])) ? $func[1] : '%s';
+                die(printf($f, $this->getMessage()));
+                break;
+            default:
+                trigger_error('invalid observer type', E_USER_WARNING);
+            }
+        }
+    }
+
+    /**
+     * Return specific error information that can be used for more detailed
+     * error messages or translation.
+     *
+     * This method may be overridden in child exception classes in order
+     * to add functionality not present in PEAR_Exception and is a placeholder
+     * to define API
+     *
+     * The returned array must be an associative array of parameter => value like so:
+     * <pre>
+     * array('name' => $name, 'context' => array(...))
+     * </pre>
+     *
+     * @return array
+     */
+    public function getErrorData()
+    {
+        return array();
+    }
+
+    /**
+     * Returns the exception that caused this exception to be thrown
+     *
+     * @return Exception|array The context of the exception
+     */
+    public function getCause()
+    {
+        return $this->cause;
+    }
+
+    /**
+     * Function must be public to call on caused exceptions
+     *
+     * @param array $causes Array that gets filled.
+     *
+     * @return void
+     */
+    public function getCauseMessage(&$causes)
+    {
+        $trace = $this->getTraceSafe();
+        $cause = array('class'   => get_class($this),
+                       'message' => $this->message,
+                       'file' => 'unknown',
+                       'line' => 'unknown');
+        if (isset($trace[0])) {
+            if (isset($trace[0]['file'])) {
+                $cause['file'] = $trace[0]['file'];
+                $cause['line'] = $trace[0]['line'];
+            }
+        }
+        $causes[] = $cause;
+        if ($this->cause instanceof PEAR_Exception) {
+            $this->cause->getCauseMessage($causes);
+        } elseif ($this->cause instanceof Exception) {
+            $causes[] = array('class'   => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => $this->cause->getFile(),
+                              'line' => $this->cause->getLine());
+        } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
+            $causes[] = array('class' => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => 'unknown',
+                              'line' => 'unknown');
+        } elseif (is_array($this->cause)) {
+            foreach ($this->cause as $cause) {
+                if ($cause instanceof PEAR_Exception) {
+                    $cause->getCauseMessage($causes);
+                } elseif ($cause instanceof Exception) {
+                    $causes[] = array('class'   => get_class($cause),
+                                   'message' => $cause->getMessage(),
+                                   'file' => $cause->getFile(),
+                                   'line' => $cause->getLine());
+                } elseif (class_exists('PEAR_Error')
+                    && $cause instanceof PEAR_Error
+                ) {
+                    $causes[] = array('class' => get_class($cause),
+                                      'message' => $cause->getMessage(),
+                                      'file' => 'unknown',
+                                      'line' => 'unknown');
+                } elseif (is_array($cause) && isset($cause['message'])) {
+                    // PEAR_ErrorStack warning
+                    $causes[] = array(
+                        'class' => $cause['package'],
+                        'message' => $cause['message'],
+                        'file' => isset($cause['context']['file']) ?
+                                            $cause['context']['file'] :
+                                            'unknown',
+                        'line' => isset($cause['context']['line']) ?
+                                            $cause['context']['line'] :
+                                            'unknown',
+                    );
+                }
+            }
+        }
+    }
+
+    /**
+     * Build a backtrace and return it
+     *
+     * @return array Backtrace
+     */
+    public function getTraceSafe()
+    {
+        if (!isset($this->_trace)) {
+            $this->_trace = $this->getTrace();
+            if (empty($this->_trace)) {
+                $backtrace = debug_backtrace();
+                $this->_trace = array($backtrace[count($backtrace)-1]);
+            }
+        }
+        return $this->_trace;
+    }
+
+    /**
+     * Gets the first class of the backtrace
+     *
+     * @return string Class name
+     */
+    public function getErrorClass()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['class'];
+    }
+
+    /**
+     * Gets the first method of the backtrace
+     *
+     * @return string Method/function name
+     */
+    public function getErrorMethod()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['function'];
+    }
+
+    /**
+     * Converts the exception to a string (HTML or plain text)
+     *
+     * @return string String representation
+     *
+     * @see toHtml()
+     * @see toText()
+     */
+    public function __toString()
+    {
+        if (isset($_SERVER['REQUEST_URI'])) {
+            return $this->toHtml();
+        }
+        return $this->toText();
+    }
+
+    /**
+     * Generates a HTML representation of the exception
+     *
+     * @return string HTML code
+     */
+    public function toHtml()
+    {
+        $trace = $this->getTraceSafe();
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $html =  '<table style="border: 1px" cellspacing="0">' . "\n";
+        foreach ($causes as $i => $cause) {
+            $html .= '<tr><td colspan="3" style="background: #ff9999">'
+               . str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
+               . htmlspecialchars($cause['message'])
+                . ' in <b>' . $cause['file'] . '</b> '
+               . 'on line <b>' . $cause['line'] . '</b>'
+               . "</td></tr>\n";
+        }
+        $html .= '<tr><td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td></tr>' . "\n"
+               . '<tr><td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>'
+               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>'
+               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td></tr>' . "\n";
+
+        foreach ($trace as $k => $v) {
+            $html .= '<tr><td style="text-align: center;">' . $k . '</td>'
+                   . '<td>';
+            if (!empty($v['class'])) {
+                $html .= $v['class'] . $v['type'];
+            }
+            $html .= $v['function'];
+            $args = array();
+            if (!empty($v['args'])) {
+                foreach ($v['args'] as $arg) {
+                    if (is_null($arg)) {
+                        $args[] = 'null';
+                    } else if (is_array($arg)) {
+                        $args[] = 'Array';
+                    } else if (is_object($arg)) {
+                        $args[] = 'Object('.get_class($arg).')';
+                    } else if (is_bool($arg)) {
+                        $args[] = $arg ? 'true' : 'false';
+                    } else if (is_int($arg) || is_double($arg)) {
+                        $args[] = $arg;
+                    } else {
+                        $arg = (string)$arg;
+                        $str = htmlspecialchars(substr($arg, 0, 16));
+                        if (strlen($arg) > 16) {
+                            $str .= '&hellip;';
+                        }
+                        $args[] = "'" . $str . "'";
+                    }
+                }
+            }
+            $html .= '(' . implode(', ', $args) . ')'
+                   . '</td>'
+                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
+                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
+                   . '</td></tr>' . "\n";
+        }
+        $html .= '<tr><td style="text-align: center;">' . ($k+1) . '</td>'
+               . '<td>{main}</td>'
+               . '<td>&nbsp;</td></tr>' . "\n"
+               . '</table>';
+        return $html;
+    }
+
+    /**
+     * Generates text representation of the exception and stack trace
+     *
+     * @return string
+     */
+    public function toText()
+    {
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $causeMsg = '';
+        foreach ($causes as $i => $cause) {
+            $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
+                   . $cause['message'] . ' in ' . $cause['file']
+                   . ' on line ' . $cause['line'] . "\n";
+        }
+        return $causeMsg . $this->getTraceAsString();
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,43 @@
+{
+    "name": "pear/pear_exception",
+    "description": "The PEAR Exception base class.",
+    "type": "class",
+    "keywords": [
+        "exception"
+    ],
+    "homepage": "https://github.com/pear/PEAR_Exception",
+    "license": "BSD-2-Clause",
+    "authors": [
+        {
+            "name": "Helgi Thormar",
+            "email": "dufuz@php.net"
+        },
+        {
+            "name": "Greg Beaver",
+            "email": "cellog@php.net"
+        }
+    ],
+    "require": {
+        "php": ">=4.4.0"
+    },
+    "autoload": {
+        "psr-0": {
+            "PEAR": ""
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0.x-dev"
+        }
+    },
+    "include-path": [
+        "."
+    ],
+    "support": {
+        "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
+        "source": "https://github.com/pear/PEAR_Exception"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "*"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/package.xml	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.4" version="2.0"
+ xmlns="http://pear.php.net/dtd/package-2.0"
+ xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"
+>
+ <name>PEAR_Exception</name>
+ <channel>pear.php.net</channel>
+ <summary>The PEAR Exception base class</summary>
+ <description>PEAR_Exception PHP5 error handling mechanism</description>
+
+ <lead>
+  <name>Christian Weiske</name>
+  <user>cweiske</user>
+  <email>cweiske@php.net</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Helgi Thormar</name>
+  <user>dufuz</user>
+  <email>dufuz@php.net</email>
+  <active>no</active>
+ </lead>
+ <developer>
+  <name>Greg Beaver</name>
+  <user>cellog</user>
+  <email>cellog@php.net</email>
+  <active>no</active>
+ </developer>
+
+ <date>2015-02-10</date>
+ <time>21:02:23</time>
+ <version>
+  <release>1.0.0</release>
+  <api>1.0.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
+ <notes>
+  This package was split out from the PEAR package.
+  If you use PEAR_Exception in your package and use nothing from the PEAR package
+  then it's better to depend on just PEAR_Exception.
+ </notes>
+ <contents>
+  <dir  name="/">
+   <file name="/PEAR/Exception.php" role="php">
+    <tasks:replace from="@package_version@" to="version" type="package-info" />
+   </file>
+   <dir name="tests">
+    <dir name="PEAR">
+     <file name="ExceptionTest.php" role="test"/>
+    </dir>
+   </dir>
+  </dir>
+ </contents>
+
+ <dependencies>
+  <required>
+   <php>
+    <min>5.4.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.9.5</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+
+ <phprelease />
+
+ <changelog>
+  <release>
+   <version>
+    <release>1.0.0</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2015-02-10</date>
+   <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>Release stable version</notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.0beta2</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2014-02-21</date>
+   <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>Bump up PEAR dependency.</notes>
+  </release>
+
+  <release>
+   <version>
+    <release>1.0.0beta1</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>stable</api>
+   </stability>
+   <date>2012-05-10</date>
+   <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+This packge was split out from the PEAR package. If you use PEAR_Exception in your package
+and use nothing from the PEAR package then it&apos;s better to depend on just PEAR_Exception.
+   </notes>
+  </release>
+ </changelog>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,78 @@
+<?php
+$localFile = __DIR__ . '/../../PEAR/Exception.php';
+if (file_exists($localFile)) {
+    require_once $localFile;
+} else {
+    require_once 'PEAR/Exception.php';
+}
+
+class PEAR_ExceptionTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException PEAR_Exception
+     * @expectedExceptionMessage foo
+     */
+    public function testThrow()
+    {
+        throw new PEAR_Exception('foo');
+    }
+
+    public function testGetCauseNone()
+    {
+        $e = new PEAR_Exception('foo bar');
+        $this->assertNull($e->getCause());
+    }
+
+    public function testGetCauseException()
+    {
+        $cause = new Exception('foo bar');
+        $e = new PEAR_Exception('I caught an exception', $cause);
+        $this->assertNotNull($e->getCause());
+        $this->assertInstanceOf('Exception', $e->getCause());
+        $this->assertEquals($cause, $e->getCause());
+    }
+
+    public function testGetCauseMessage()
+    {
+        $cause = new Exception('foo bar');
+        $e = new PEAR_Exception('I caught an exception', $cause);
+
+        $e->getCauseMessage($causes);
+        $this->assertEquals('I caught an exception', $causes[0]['message']);
+        $this->assertEquals('foo bar', $causes[1]['message']);
+    }
+
+    public function testGetTraceSafe()
+    {
+        $e = new PEAR_Exception('oops');
+        $this->assertInternalType('array', $e->getTraceSafe());
+    }
+
+    public function testGetErrorClass()
+    {
+        $e = new PEAR_Exception('oops');
+        $this->assertEquals('PEAR_ExceptionTest', $e->getErrorClass());
+    }
+
+    public function testGetErrorMethod()
+    {
+        $e = new PEAR_Exception('oops');
+        $this->assertEquals('testGetErrorMethod', $e->getErrorMethod());
+    }
+
+    public function test__toString()
+    {
+        $e = new PEAR_Exception('oops');
+        $this->assertInternalType('string', (string) $e);
+        $this->assertContains('oops', (string) $e);
+    }
+
+    public function testToHtml()
+    {
+        $e = new PEAR_Exception('oops');
+        $html = $e->toHtml();
+        $this->assertInternalType('string', $html);
+        $this->assertContains('oops', $html);
+    }
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/roundcube/plugin-installer/.gitignore	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,2 @@
+composer.lock
+composer.phar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/roundcube/plugin-installer/README.md	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,46 @@
+# Plugin Installer for Roundcube
+
+This installer ensures that plugins end up in the correct directory:
+
+ * `<roundcube-root>/plugins/plugin-name`
+
+## Minimum setup
+
+ * create a `composer.json` file in your plugin's repository
+ * add the following contents
+
+### sample composer.json for plugins
+
+    {
+        "name": "yourvendor/plugin-name",
+        "license": "the license",
+        "description": "tell the world what your plugin is good at",
+        "type": "roundcube-plugin",
+        "authors": [
+            {
+                "name": "<your-name>",
+                "email": "<your-email>"
+            }
+        ],
+        "repositories": [
+            {
+                "type": "composer",
+                "url": "http://plugins.roundcube.net"
+            }
+        ]
+        "require": {
+            "roundcube/plugin-installer": "*"
+        },
+        "minimum-stability": "dev-master"
+    }
+
+  * Submit your plugin to [plugins.roundcube.net](http://plugins.roundcube.net).
+
+## Installation
+
+ * clone Roundcube
+ * `cp composer.json-dist composer.json`
+ * add your plugin in the `require` section of composer.json
+ * `composer.phar install`
+
+Read the whole story at [plugins.roundcube.net](http://plugins.roundcube.net/about).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/roundcube/plugin-installer/composer.json	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,34 @@
+{
+    "name": "roundcube/plugin-installer",
+    "description": "A composer-installer for Roundcube plugins.",
+    "type": "composer-installer",
+    "license": "GPL-3.0+",
+    "authors": [
+        {
+            "name": "Thomas Bruederli",
+            "email": "thomas@roundcube.net"
+        },
+        {
+            "name": "Till Klampaeckel",
+            "email": "till@php.net"
+        }
+    ],
+    "autoload": {
+        "psr-0": {
+            "Roundcube\\Composer": "src/"
+        }
+    },
+    "extra": {
+        "class": "Roundcube\\Composer\\PluginInstaller"
+    },
+    "bin": [
+        "src/bin/rcubeinitdb.sh"
+    ],
+    "require": {
+        "php": ">=5.3.0",
+        "composer/semver": "^1.4.2"
+    },
+    "require-dev": {
+        "composer/composer": "*"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.php	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,280 @@
+<?php
+
+namespace Roundcube\Composer;
+
+use Composer\Installer\LibraryInstaller;
+use Composer\Package\Version\VersionParser;
+use Composer\Semver\Constraint\Constraint;
+use Composer\Package\PackageInterface;
+use Composer\Repository\InstalledRepositoryInterface;
+use Composer\Util\ProcessExecutor;
+
+/**
+ * @category Plugins
+ * @package  PluginInstaller
+ * @author   Till Klampaeckel <till@php.net>
+ * @author   Thomas Bruederli <thomas@roundcube.net>
+ * @license  GPL-3.0+
+ * @version  GIT: <git_id>
+ * @link     http://github.com/roundcube/plugin-installer
+ */
+class PluginInstaller extends LibraryInstaller
+{
+    const INSTALLER_TYPE = 'roundcube-plugin';
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getInstallPath(PackageInterface $package)
+    {
+        static $vendorDir;
+        if ($vendorDir === null) {
+            $vendorDir = $this->getVendorDir();
+        }
+
+        return sprintf('%s/%s', $vendorDir, $this->getPluginName($package));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
+    {
+        $this->rcubeVersionCheck($package);
+        parent::install($repo, $package);
+
+        // post-install: activate plugin in Roundcube config
+        $config_file = $this->rcubeConfigFile();
+        $plugin_name = $this->getPluginName($package);
+        $plugin_dir = $this->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
+        $extra = $package->getExtra();
+        $plugin_name = $this->getPluginName($package);
+
+        if (is_writeable($config_file) && php_sapi_name() == 'cli') {
+            $answer = $this->io->askConfirmation("Do you want to activate the plugin $plugin_name? [N|y] ", false);
+            if (true === $answer) {
+                $this->rcubeAlterConfig($plugin_name, true);
+            }
+        }
+
+        // copy config.inc.php.dist -> config.inc.php
+        if (is_file($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist') && !is_file($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php') && is_writeable($plugin_dir)) {
+            $this->io->write("<info>Creating plugin config file</info>");
+            copy($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist', $plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php');
+        }
+
+        // initialize database schema
+        if (!empty($extra['roundcube']['sql-dir'])) {
+            if ($sqldir = realpath($plugin_dir . DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
+                $this->io->write("<info>Running database initialization script for $plugin_name</info>");
+                system(getcwd() . "/vendor/bin/rcubeinitdb.sh --package=$plugin_name --dir=$sqldir");
+            }
+        }
+
+        // run post-install script
+        if (!empty($extra['roundcube']['post-install-script'])) {
+            $this->rcubeRunScript($extra['roundcube']['post-install-script'], $package);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target)
+    {
+        $this->rcubeVersionCheck($target);
+        parent::update($repo, $initial, $target);
+
+        $extra = $target->getExtra();
+
+        // trigger updatedb.sh
+        if (!empty($extra['roundcube']['sql-dir'])) {
+            $plugin_name = $this->getPluginName($target);
+            $plugin_dir = $this->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
+
+            if ($sqldir = realpath($plugin_dir . DIRECTORY_SEPARATOR . $extra['roundcube']['sql-dir'])) {
+                $this->io->write("<info>Updating database schema for $plugin_name</info>");
+                system(getcwd() . "/bin/updatedb.sh --package=$plugin_name --dir=$sqldir", $res);
+            }
+        }
+
+        // run post-update script
+        if (!empty($extra['roundcube']['post-update-script'])) {
+            $this->rcubeRunScript($extra['roundcube']['post-update-script'], $target);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
+    {
+        parent::uninstall($repo, $package);
+
+        // post-uninstall: deactivate plugin
+        $plugin_name = $this->getPluginName($package);
+        $this->rcubeAlterConfig($plugin_name, false);
+
+        // run post-uninstall script
+        $extra = $package->getExtra();
+        if (!empty($extra['roundcube']['post-uninstall-script'])) {
+            $this->rcubeRunScript($extra['roundcube']['post-uninstall-script'], $package);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function supports($packageType)
+    {
+        return $packageType === self::INSTALLER_TYPE;
+    }
+
+    /**
+     * Setup vendor directory to one of these two:
+     *  ./plugins
+     *
+     * @return string
+     */
+    public function getVendorDir()
+    {
+        $pluginDir  = getcwd();
+        $pluginDir .= '/plugins';
+
+        return $pluginDir;
+    }
+
+    /**
+     * Extract the (valid) plugin name from the package object
+     */
+    private function getPluginName(PackageInterface $package)
+    {
+        @list($vendor, $pluginName) = explode('/', $package->getPrettyName());
+
+        return strtr($pluginName, '-', '_');
+    }
+
+    /**
+     * Check version requirements from the "extra" block of a package
+     * against the local Roundcube version
+     */
+    private function rcubeVersionCheck($package)
+    {
+        $parser = new VersionParser;
+
+        // read rcube version from iniset
+        $rootdir = getcwd();
+        $iniset = @file_get_contents($rootdir . '/program/include/iniset.php');
+        if (preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)?/', $iniset, $m)) {
+            $rcubeVersion = $parser->normalize(str_replace('-git', '.999', $m[1]));
+        } else {
+            throw new \Exception("Unable to find a Roundcube installation in $rootdir");
+        }
+
+        $extra = $package->getExtra();
+
+        if (!empty($extra['roundcube'])) {
+            foreach (array('min-version' => '>=', 'max-version' => '<=') as $key => $operator) {
+                if (!empty($extra['roundcube'][$key])) {
+                    $version = $parser->normalize(str_replace('-git', '.999', $extra['roundcube'][$key]));
+                    $constraint = new Constraint($operator, $version);
+                    if (!$constraint->versionCompare($rcubeVersion, $version, $operator)) {
+                        throw new \Exception("Version check failed! " . $package->getName() . " requires Roundcube version $operator $version, $rcubeVersion was detected.");
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Add or remove the given plugin to the list of active plugins in the Roundcube config.
+     */
+    private function rcubeAlterConfig($plugin_name, $add)
+    {
+        $config_file = $this->rcubeConfigFile();
+        @include($config_file);
+        $success = false;
+        $varname = '$config';
+
+        if (empty($config) && !empty($rcmail_config)) {
+            $config  = $rcmail_config;
+            $varname = '$rcmail_config';
+        }
+
+        if (is_array($config) && is_writeable($config_file)) {
+            $config_templ   = @file_get_contents($config_file) ?: '';
+            $config_plugins = !empty($config['plugins']) ? ((array) $config['plugins']) : array();
+            $active_plugins = $config_plugins;
+
+            if ($add && !in_array($plugin_name, $active_plugins)) {
+                $active_plugins[] = $plugin_name;
+            } elseif (!$add && ($i = array_search($plugin_name, $active_plugins)) !== false) {
+                unset($active_plugins[$i]);
+            }
+
+            if ($active_plugins != $config_plugins) {
+                $count      = 0;
+                $var_export = "array(\n\t'" . join("',\n\t'", $active_plugins) . "',\n);";
+                $new_config = preg_replace(
+                    "/(\\$varname\['plugins'\])\s+=\s+(.+);/Uims",
+                    "\\1 = " . $var_export,
+                    $config_templ, -1, $count);
+
+                // 'plugins' option does not exist yet, add it...
+                if (!$count) {
+                    $var_txt    = "\n{$varname}['plugins'] = $var_export;\n";
+                    $new_config = str_replace('?>', $var_txt . '?>', $config_templ, $count);
+
+                    if (!$count) {
+                        $new_config = $config_templ . $var_txt;
+                    }
+                }
+
+                $success = file_put_contents($config_file, $new_config);
+            }
+        }
+
+        if ($success && php_sapi_name() == 'cli') {
+            $this->io->write("<info>Updated local config at $config_file</info>");
+        }
+
+        return $success;
+    }
+
+    /**
+     * Helper method to get an absolute path to the local Roundcube config file
+     */
+    private function rcubeConfigFile()
+    {
+        return realpath(getcwd() . '/config/config.inc.php');
+    }
+
+    /**
+     * Run the given script file
+     */
+    private function rcubeRunScript($script, PackageInterface $package)
+    {
+        $plugin_name = $this->getPluginName($package);
+        $plugin_dir = $this->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
+
+        // check for executable shell script
+        if (($scriptfile = realpath($plugin_dir . DIRECTORY_SEPARATOR . $script)) && is_executable($scriptfile)) {
+            $script = $scriptfile;
+        }
+
+        // run PHP script in Roundcube context
+        if ($scriptfile && preg_match('/\.php$/', $scriptfile)) {
+            $incdir = realpath(getcwd() . '/program/include');
+            include_once($incdir . '/iniset.php');
+            include($scriptfile);
+        }
+        // attempt to execute the given string as shell commands
+        else {
+            $process = new ProcessExecutor($this->io);
+            $exitCode = $process->execute($script, null, $plugin_dir);
+            if ($exitCode !== 0) {
+                throw new \RuntimeException('Error executing script: '. $process->getErrorOutput(), $exitCode);
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,130 @@
+#!/usr/bin/env php
+<?php
+
+define('INSTALL_PATH', getcwd() . '/' );
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+// get arguments
+$opts = rcube_utils::get_opt(array(
+    'd' => 'dir',
+    'p' => 'package',
+));
+
+if (empty($opts['dir'])) {
+    rcube::raise_error("Database schema directory not specified (--dir).", false, true);
+}
+if (empty($opts['package'])) {
+    rcube::raise_error("Database schema package name not specified (--package).", false, true);
+}
+
+// Check if directory exists
+if (!file_exists($opts['dir'])) {
+    rcube::raise_error("Specified database schema directory doesn't exist.", false, true);
+}
+
+$RC = rcube::get_instance();
+$DB = rcube_db::factory($RC->config->get('db_dsnw'));
+
+// Connect to database
+$DB->db_connect('w');
+if (!$DB->is_connected()) {
+    rcube::raise_error("Error connecting to database: " . $DB->is_error(), false, true);
+}
+
+$opts['dir'] = rtrim($opts['dir'], DIRECTORY_SEPARATOR);
+$file = $opts['dir'] . DIRECTORY_SEPARATOR . $DB->db_provider . '.initial.sql';
+if (!file_exists($file)) {
+    rcube::raise_error("No DDL file found for " . $DB->db_provider . " driver.", false, true);
+}
+
+$package = $opts['package'];
+$error = false;
+
+// read DDL file
+if ($lines = file($file)) {
+    $sql = '';
+    foreach ($lines as $line) {
+        if (preg_match('/^--/', $line) || trim($line) == '')
+            continue;
+
+        $sql .= $line . "\n";
+        if (preg_match('/(;|^GO)$/', trim($line))) {
+            @$DB->query(fix_table_names($sql));
+            $sql = '';
+            if ($error = $DB->is_error()) {
+                break;
+            }
+        }
+    }
+}
+
+if (!$error) {
+    $version = date('Ymd00');
+    $system_table = $DB->quote_identifier($DB->table_name('system'));
+    $name_col = $DB->quote_identifier('name');
+    $value_col = $DB->quote_identifier('value');
+    $package_version = $package . '-version';
+
+    $DB->query("SELECT * FROM $system_table WHERE $name_col=?",
+        $package_version);
+
+    if ($DB->fetch_assoc()) {
+        $DB->query("UPDATE $system_table SET $value_col=? WHERE $name_col=?",
+            $version, $package_version);
+    }
+    else {
+        $DB->query("INSERT INTO $system_table ($name_col, $value_col) VALUES (?, ?)",
+            $package_version, $version);
+    }
+
+    $error = $DB->is_error();
+}
+
+if ($error) {
+    echo "[FAILED]\n";
+    rcube::raise_error("Error in DDL schema $file: $error", false, true);
+}
+echo "[OK]\n";
+
+
+function fix_table_names($sql)
+{
+    global $DB, $RC;
+
+    $prefix = $RC->config->get('db_prefix');
+    $engine = $DB->db_provider;
+
+    if (empty($prefix)) {
+        return $sql;
+    }
+
+    $tables    = array();
+    $sequences = array();
+
+    // find table names
+    if (preg_match_all('/CREATE TABLE (\[dbo\]\.|IF NOT EXISTS )?[`"\[\]]*([^`"\[\] \r\n]+)/i', $sql, $matches)) {
+        foreach ($matches[2] as $table) {
+            $tables[$table] = $prefix . $table;
+        }
+    }
+    // find sequence names
+    if ($engine == 'postgres' && preg_match_all('/CREATE SEQUENCE (IF NOT EXISTS )?"?([^" \n\r]+)/i', $sql, $matches)) {
+        foreach ($matches[2] as $sequence) {
+            $sequences[$sequence] = $prefix . $sequence;
+        }
+    }
+
+    // replace table names
+    foreach ($tables as $table => $real_table) {
+        $sql = preg_replace("/([^a-zA-Z0-9_])$table([^a-zA-Z0-9_])/", "\\1$real_table\\2", $sql);
+    }
+    // replace sequence names
+    foreach ($sequences as $sequence => $real_sequence) {
+        $sql = preg_replace("/([^a-zA-Z0-9_])$sequence([^a-zA-Z0-9_])/", "\\1$real_sequence\\2", $sql);
+    }
+
+    return $sql;
+}
+
+?>